One of the quirks of the Marvel pushbox system was that the start of the pushbox data in ROM is not indicated by a pointer in the character's memory space, but is hardcoded and offset by an amount that depends on the character. The start position varies between different versions (clones) of the game. The only way to get the position, as far as I know, is to run a trace, study it, and make the script refer to a table that maps the clone's name to its respective address in ROM.
The D&D games are beat em' ups and don't have pushboxes, but the data for both the blue and red boxes work this way. Rather than make a table for each, I noticed that the relative positions of the blue and red data was always the same in every clone, so only an offset from a reference pair of addresses needed to be specified.
DDSoM has further complications. The redboxes of the player's projectiles and magic don't depend on any IDs, but have their own table of data in ROM. This doesn't apply to enemy projectiles/magic. Also like Marvel, there's more than one set of addresses for the camera position. The one in use depends on the current stage. This was handled before by making a table that mapped cam address to stage. But SoM has like a million stages, and I wasn't about to tabulate all of them. Instead, I noticed that there seems to be only two cam value possibilities, and I found another value that determines which one is used.
I discovered from the lightning bolt animation that I had been reading the box data wrong. It hits full screen but the box wasn't reaching that far. It turns out that hval/vval offsets should be read as signed bytes or words, but the hrad/vrad radius should be unsigned, which makes sense. This has been fixed now.
Regarding the difference between these games: ToD is more primitive and not as fun than SoM. But you should play it first because it's makes learning SoM easier, and the controls are simpler and less frustrating.
In ToD, the current subweapons or magic is shown in the player's HUD. To change you need only press the Select button, and you can mash it as fast as you want. In SoM, there's a distracting menu that floats around your character's head, one ring for items and two more for magic if available. There's a limit to how fast the next item or submenu can be selected. Jump and Attack are used for menu control, so the only way to defend yourself with it open is to walk, run around, or backstep. Obviously this was done on purpose, but it makes the learning curve and emphasis on memorization stiffer than it already is.
There are some annoying things about SoM's controls. A smash attack is performed with F, Attack instead of F + Attack like in ToD. This means pressing F and Attack on the same frame only gets you a normal attack, and if you want to walk forward a step and do a normal attack you get a smash attack instead. Also, for some reason if you walk forward for a longer time and then release the stick and attack on the same frame, nothing comes out. To run in either game, press F, F and hold the stick. In SoM if you run for even one frame and then stop running, you'll go into a skidding animation that is very likely to put you in harm's way. In ToD you sensibly have to run a few steps before this happens.
SoM added a huge amount of special moves and cancels, which can be canceled before the active frames. It also removed the normal chains that were present in ToD. All these things, along with the random chance of hits that flash the screen white and knock down the opponent, deemphasize the button-mashing aspect that you expect to find in a beat 'em up, and make SoM a peculiar specimen of the genre, with combos that require a measure of timing and hit-confirming.
Posted by: |