Interrupt / systemshock

Shockolate - A minimalist and cross platform System Shock source port.
GNU General Public License v3.0
803 stars 62 forks source link

Delta grove jettison switch has gone missing #298

Open markkurikola opened 5 years ago

markkurikola commented 5 years ago

The same happens with all rendering options.

image

voodoo47 commented 5 years ago

I'll quote dertseha here: "there have been a few messages on the Steam forums of players noting that switches were missing in their game. I remember at least three cases of plot-related switches missing. Two of which I helped out by patching their savegame. My suspicion is there's a delete object action/effect going rampant. Switches, screens, plot items - nothing is safe from such an event..."

HunterZ commented 5 years ago

Is this reproducible? I wonder if adding some WARN() calls around code that deletes things would help catch it?

icosahedral-dragon commented 4 years ago

It could be a rogue action. The code to read the general level information (fullmap structure) from archive (saveload.c:835ff) is wrong. It does not properly support the DOS (version 11) archive format and attempts to read a single-byte packed structure directly into a 2-byte packed one. However, there is code to repair the structure after the fact. It appears that somebody was in a hurry: // CC: HAX HAX HAX - Why don't these get set properly? The code looks as if it should do the trick, but it is suspicious given the circumstances. I haven't yet managed to reproduce the problem in either 32 or 64-bit code. The 64-bit code converts the structure from the archive of necessity, but it only currently supports the original version 11 archive format and not the version 12 saved-game format. Basically the level archive handling code is still a big old mess :)