fullsec is a patch for Chip's Challenge that fixes the timer to give you a full first second at the start of each level. Due to the way it was implemented, it is possible to force the game to reset the timer at any time during the level, not just at the start. This can be abused to arbitrarily gain seconds, or to manipulate teeth and blobs in ways that would otherwise be impossible.
fullsecfix is an updated version of fullsec that fixes this deficiency.
CHIPS.EXE
, not to a fullsec-patched copy.
The bug is related to when and where, exactly, the tick counter should be reset to 0.
The original game never resets it, which is the cause of the timer weirdness that fullsec exists to fix.
The original fullsec patch modifies the function at 4:0950
in the executable to insert the tick reset code.
This function is the one the parses the start of the DAT file, reading the first 6 bytes - the file signature and the number of levels.
Fullsec replaced the signature check with the tick reset code.
It's true that this function is called every time a level starts — CHIPS.EXE
has to read the DAT file every time a level starts in order to loads the level data.
However, it can also be called at other times. In particular, whenever the game needs to check a password it has to read it from the DAT file.
My updated patch modifies the function at 4:0356
instead. This is the function that is actually responsible for starting a level. It clears the game state, loads the level data, resets the onscreen timer and chip count, and does a bunch of other bookkeeping. It's the function that's called when chip dies or reaches the exit, or when the user hits Previous/Next Level. In short, it's exactly the right time and place to reset the tick counter.
(As a bonus, there are some superfluous instructions right nearby that we can clean up to make space for the patch, so we don't need to disable the signature check or anything.)