Skip to content

Embedded data in EXE #1

Description

@RedMike

There are a number of things embedded into the EXEs themselves, which means both reading and modifying them is much more complex than normal data. An initial implementation would likely just be to read this data as read-only in order to allow the editor to display it usefully. A full editing implementation might start being as complex as just reimplementing the game engine to some extent, so it's unclear how useful that would be; but a small editing implementation might let strings be changed while locking them into the current length, etc.

Known data embedded and fairly easy to find visually (but not programmatically):

  • Mission Sets - the combination of missions and strings to identify VICTIM/etc, arbitrary number of crimes in each mission set but maximum of 6 (otherwise there's an overflow that leads to some placeholder data being loaded, specifically Max Remington's apartment as a location and a mattress full of cash as the object); modifying this data is non-trivial because changing the lengths of the strings or the count of crimes in a mission set would require updating the relocation table and potentially direct instructions if offsets are encoded directly somewhere. Additionally there are many bits of data in the mission set that seem to be pointers to various other bits of data.
  • Organisation Names - despite the WORLD files containing a list of organisations, this also exists in the EXE files, probably to allow things like the save files or hall of fame screen to correctly show them?
  • References to animation files as well as prose/text/dialogues - this also includes an apparently placeholder of animation.pan which doesn't seem to match a file?
  • Various in-game strings - menu options, prompts, difficulty levels, skill names, as well as some dialogue like the crime end briefing dialogue and others; also prefixes/suffixes/infixes for various things like describing actions, time, options, etc. All are null-terminated strings so changing the length would be a problem because it would require updating the relocation table and potentially direct instructions if offsets are encoded directly somewhere.

The EXE files themselves are reasonably simple to decompress/recompress (EXEPACK).

However the big problem is that there is no simple way to identify the correct places to modify, short of assuming explicit positions in the file; and even then, that won't allow changing the lengths of strings/counts of arrays/etc without also understanding the format of the instructions/etc.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions