Death's Thread - a Knights of the Round mod/ROM hack (arcade, CPS)
Death's Thread is my modification (or ROM hack) of the game Knights of the Round (1991 arcade game, by Capcom). With it, I wanted to provide a different, more difficult experience of the original game. While being a single-life, no-continue affair, the advanced player will be able to manage a 100% larger life bar through leveling up, eating food.
Finally, a minor amount of life is gained by the player every time he kills an enemy and redees his soul.
Death's Thread includes the following modifications to the original game:
the souls of killed enemies are redeemed, healing the player
it is a one-life game; additional lives cannot be gained and continuing is disabled
player's life bar has been doubled in size
player is allowed one magic attack (fire+jump) per stage
it is a single player game - only player one can start
stages have no time limit, and don't push you forward with annoying sounds
original game's intro sequences have been removed to begin playing faster
To run it in an emulator (such as MAME), start the game
Knights of the Round (World 911127).
If MAME won't run it, then use:
ROM set: Knights of the Round (World, 911127)
ROM set filename: knights.zip
Debuggers: MAME 0.230 built-in debugger (primary, used for program analysis), WinKawaks 1.65 built-in
debugger (secondary, used to test modifications quickly)
Assembler: LEA (for assembling binary patches)
Hex editor: HxD
OS: Windows 10
Patching, byte swapping: custom-built tools
Death's Thread was built on the foundation already created during the development of Warlock's Tower.
As I've already described in the development log of Warlock's Tower, the original Knights of the Round program is of poor quality. Aside from a few gems (which taught me some tricks), there is much repetition of game logic.
This translated into much repetition needed on my part for seemingly simple changes like increase the life bar by 100%. This change alone took a day and half of work.
I had known where player's maximum life is stored, yet I was unable to use that. When I started working on Death's Thread, my plan was to double the maximum life amount, assuming that player's current life would just be set from that for events like level up or eating food past the maximum life.
This was not the case; The original Capcom programmers set the maximum life field in the player record and essentially forgot about it. From a complete playthrough of the game, the maximum life field is only read at the start of the game, and never again.
Instead, whenever the player levels up, the nominal maximum life value is written from a constant. Likewise, when the player eats food which would result in a higher-than-maximum value, the code to bound his current life to the maximum value is copy-pasted to enforce the constant.
All this could have been replaced by a set player current life routine, which enforces that maximum, as set in the player's record.