Movement

The game does not have any subpixels. All movements are done in whole pixels. For horizontal speed, the game keeps a counter which cycles seven values: 1, 1, 2, 1, 1, 2, 2. This works out as 10 pixels over 7 frames or ~1.43 pixels per frame. (Why the designers didn't just make it alternate between 1 and 2 for a mean speed of 1.5 is anyone's guess, but everyone who participated in the DTC hated them for it.)
The speed counter advances for every frame the player walks, and every frame the player is in the air, regardless if moving horizontally or not. The speed counter also advances when pressing against a wall on the ground, even if no actual horizontal movement is made. The speed counter pauses when standing still or climbing a ladder. The speed counter resets every mission.
Small improvements are easily lost to the whims of the speed cycle god.
Other than this speed cycle the game is very hex edit friendly.
Basically the movement works like this:
Main Counter432187654321876543218765432187654321
Move Flag 000011111111111111111111111111111111
2nd Counter 777712345671234567123456712345671234
3rd Counter 333332132133213213321321332132133213
Speed 222221121122112112211211221121122112
Displacement000021121122112112211211221121122112

Tricks

Scrolling skip

If you pause on the frame you touch the trigger for a scrolling transition, the game will load the data associated with it (camera bounds, new transitions, etc) without actually starting the scrolling itself. This is only useful for one-way transitions, however, as two-way transitions actually consist of two transitions, and touching the last one will cause the old room exits to be loaded, preventing you from progressing any further in the game.

Speed cycle advancing

Similar to the scrolling skip, pausing when triggering a black transition has strange effects. In this case, pausing and immediately unpausing the game does not delay the next room load. It does, however, allow the game to advance one more frame before entering the next room. In the TAS, this is used to advance the speed cycle to a more favourable phase.

Corner boosting

Jumping or falling into a ceiling or floor corner whilst moving away from it allows you to slightly pass through said corner. If you let go of the direction key you were holding, the game will push you out of the block, advancing you a maximum of 4 pixels at a time. For ceiling boosts, a maximum of 8 pixels (over 2 frames) is possible, for floor boosts this is 6.

Ladder zipping

You can grab onto ladders when you're 16 pixels away from their centre. Due to this, it is often faster to grab onto a ladder and let go immediately, as this will move you forward ~16 pixels, at the cost of not moving a single frame.

Low ladder grabs

When approaching a ladder going down from the floor you are on, you can grab it a few pixels lower than you would by just walking up to it. To do this, jump before the ladder, and land on the ground on the same frame as you grab the ladder. The downward speed will be applied once before grabbing the ladder. It is better to be as close as possible (1 pixel above) the ground on the frame before grabbing. For this reason, some jump heights are better than others, and 8 and 11 are best when possible.
Jump heightPixels gained
no jump0
10
20
32
42
51
62
72
83
90
101
113
120
130
140

Wall jumps

When passing through a downward corner, instead of releasing forward to corner boost, you can press backward. Under some circumstances, depending on jump height and pixel position, you will enter the standing animation for one frame, and can jump again from this position. The possible applications are very limited.

GameResources/NES/MetalForce last edited by on 1/1/2022 6:13 PM
Page History Latest diff List referrers View Source