XJDHDR / impressions-resolution-customiser

Programs used to turn the 1024x768 resolution option in the various isometric Impressions Studios City Building series games and allow the user to define a resolution different from the default.
Other
32 stars 1 forks source link

Resolution customiser for Impressions' City Building series

The various isometric 2D city building games that were created by Impressions Games were hardcoded to only allow setting specific resolution options. These were 640x480, 800x600 and 1024x768; with Zeus and Emperor dropping the 480p option and only allowing the other two. Though this was manageable at the time due to these being the most common resolutions used then, screens have since gotten bigger and denser. The switch to LCD further caused issues due to their blurring images that run outside their native resolutions, as well as the adoption of widescreen aspect ratios meaning that 4:3 resolutions are stretched and distorted.

This started to change on the 5th of February, 2012 when a Widescreen Gaming Forum member named JackFuste uploaded copies of Pharaoh's EXE that he had modified to run on a few widescreen resolutions. From there, he went on to upload a number of packs and fixes containing edits for all 4 games to run on a number of common resolutions and whatever resolutions users requested. While a massive improvement over the default options, the main issue was that Jack was for the most part the only one making these fixes and any resolution not already available had to be requested. Another thing that can be seen is that he became better at modifying the resolutions over time, ultimately adding some fixes to the UI in his latest mods that weren't present in earlier versions. This meant that his fixes as they stand have varying levels of quality and some resolution options simply never had fixes created.

A small area of progress here came from another Widescreen Gaming Forum member named Mario who, on the 4th of September, 2018, uploaded his own modifications for Zeus and Emperor that came with a guide describing how he created his fixes. With this guide, it was now easier for people to create their own fixes.

And that is where this project comes in. By using Mario's guides as well as comparing JackFuste's modified EXEs with the originals, I have managed to start creating programs that will allow a user to create their own versions of the games that will run on a much wider range of resolutions than was possible with even my widescreen fixes packs (which packages together all of the widescreen fixes that JackFuste created) and with all of the fixes that are present in the latest versions of his patches. I would also like to add useful EXE patches to this project so that they can be applied in addition to the resolution changes. One example of this is the animation fix patch for Zeus created by Pecunia.

The ultimate aim of this project is to support adapting as many different versions of the various games (i.e. languages and distribution channels) as possible to use almost any resolution the user desires (within reason).

Contributions

One way that anyone can contribute to the development of this project is by telling me where I can find copies of the games that these patchers don't support yet. For example, non-english versions of these games are one thing I really want to support but which are very difficult to find.

More knowledgeable users can contribute by giving me a list of offsets that need to be patched. All of the EXE editing code is found in the non-UI_code folder.For resolution patching, you can find a list of the things that need patching by opening a utility's <game-name>ResHexOffsetTable struct then look at the <game-name>ResolutionEdits class to find out how those fields are used, as well as a description of the process. The offsets regarding the other patchers in the utilities are defined in the other structs in this directory. The <game-name>ExeAttributes struct is used to define various required pieces of information about the EXE that is being patched, which is used by the other patchers to define the offsets that need patching. You could even make the required changes to these structs yourself and submit a Pull Request. Keep in mind that I will only accept such a PR if I can verify your changes against the version of the game you are targeting. Your PR also needs to comply with other requirements I outlined in the FAQ section.

Finally, though I don't do this with the intention of getting money and my work here will always be free, any financial contributions will be greatly appreciated. You can use the list of payment services under Sponsor this project to do so. Otherwise, please see the readmes for the various utilities for other ways you can do so, including "free":

FAQ

What is your current progress?

Where are the binaries/files that players can use?

What are your future plans?

What about Caesar 3?

What requirements do you have for adding support for unrecognised versions of the game?

Why don't you support no-CD patches?

The game's display menu option for selecting my resolution still says "1024x768".