Rockman technical data
Introduction
This is technical data that has been analyzed from the Rockman game ROM
for the purpose of making Rockman tool-assisted speedruns as precise as possible.
The
disassembly of the game
has been an invaluable help in discovering these.
All numbers on this page are hexadecimal unless otherwise mentioned.
Coordinate system
In Rockman and Rockman 2, every object of the game has the following properties:
- Screen number (00―FF), it tells which screen the object resides in.
- X position (00.00―FF.FF), it tells where in the screen the object is in.
- Y position (00.00―FF.FF), it tells where in the screen the object is in.
- X speed (−80.00―7F.FF).
- Y speed (−80.00―7F.FF).
The position of the object has 8 bits of decimal part,
but only the integer part can be observed on the screen.
- Y coordinates increase towards the bottom of the screen
- X coordinates increase towards the right
- Negative Y speed means falling, positive Y speed means ascending
- X speed is always positive. It is subtracted or added depending on Rockman’s facing.
Vertical motion
Jump curve
- In Rockman 1 and 2, when Rockman jumps, his Y speed is set to 04.DF.
- In Rockman 3, when Rockman jumps, his Y speed is set to 04.A5.
- In Rockman 4, when Rockman jumps, his Y speed is set to 04.C0.
- Every frame, 00.40 is subtracted from his Y speed (0.25 in decimal).
- In Rockman 1 and 2, if the Y speed grows smaller than −0C.00 (−12 in decimal), it is set to −0C.00.
- In Rockman 3 and 4, if the Y speed grows smaller than −07.00, it is set to −07.00.
- In Rockman 1 and 2, if the Y speed is larger than 02.1F and the player is not holding the A button, the speed is immediately set to 01.00.
- In Rockman 3 if [rules unknown and] the player is not holding the A button, the speed is immediately set to −00.80.
- In Rockman 4 if [rules unknown and] the player is not holding the A button, the speed is immediately set to −00.00.
Walking on lifts / magnet beam
During walking on a magnet beam or a lift, Rockman’s Y speed grows
continuously as if he was falling. However the lift/beam forces
his Y position (actually, only the integer part of it) to be stable.
This effect happens in Rockman, but not in Rockman 2.
- In Rockman 2, Item 1 forces Rockman’s Y speed to be 01.00.
- In Rockman 3, RC makes Rockman’s Y speed first 06.AE, then the rest is decided by gravity.
Walking on solid ground
Every frame when Rockman bumps into an platform either from top or below
(magnet beams and lifts don’t count), Rockman’s Y speed is set into a constant.
- Rockman 1: −00.C0.
- Rockman 2: −00.40.
Top collision checked only when moving upwards, bottom collision
checked only when moving downwards.
If he has an obstacle below him, his Y position is adjusted accordingly.
Magical Y coordinates
- Y coordinate F8 (−08) means a dead object.
- When Rockman jumps, the game prevents the coordinate from decreasing below −04 (FC). (Only true in Rockman 1.)
- However it is possible to land on a beam that forces the coordinate to be −05. This is the highest possible coordinate where Rockman can be.
- To zip through ceiling at screen top, Y speed must be −08.C0 or faster. (Smaller speed leads to death on attempt to zip.)
- To survive the spikes in Bombman stage when performing finalfighter’s
r1bombsuper.mpg
trick, Y speed must be −01.C0 or faster before scrolling.
Climbing
- In Rockman 1 and 2, Rockman climbs at speed of 00.C0.
- In Rockman 3, Rockman climbs at speed of 01.4C.
- In Rockman 1, Rockman’s Y speed and position are accumulated even during transforming. (Which allows him to pass through enemies without hurting himself.)
- In Rockman 2, Y speed is reset when pausing. During transforming, enemies move. (Which allows them to pass through Rockman without hurting him.)
- In Rockman 3, transformation is an extension to pause. Game continues after transformation from the same situation that was before pause.
- Since Rockman 4, Rockman no longer transforms after pause/weapon switch.
Horizontal motion
Jumping
- In Rockman 1 and 2, during jumping/falling into some direction, Rockman’s X speed is 01.50.
- In Rockman 3 and 4, during jumping/falling, Rockman’s X speed is the same as when walking.
- If the player stops pressing the directional button, the speed falls immediately into 00.00.
- In Rockman 1, if Rockman starts moving after not moving, his X speed first goes to 00.20, then back to 01.50.
- In Rockman 2, if Rockman starts moving after not moving, his X speed goes immediately back to 01.50.
Walking
Walking speed
- In Rockman 1 and 2, during walking, Rockman’s X speed is 01.60.
- In Rockman 3 and 4, during walking, Rockman’s X speed is 01.4C.
Sliding speed
- In Rockman 3 and 4, during sliding, Rockman’s X speed is 02.80.
Acceleration
- In Rockman 1, when Rockman accelerates from non-full speed (full halt or deacceleration), his X speed is 00.20 for 9 frames before gaining full speed.
- In Rockman 2, when Rockman accelerates from non-full speed (full halt or deacceleration, item-throwing halt excluded), his X speed is 00.20 for 7 frames before gaining full speed.
- In Rockman 3, when Rockman accelerates from non-full speed, he walks normally the first frame (as far as speed is concerned), then is completely in stall for 8 frames, after which he has the full speed again.
Deceleration
- In Rockman 1, when Rockman decelerates from full speed (not from acceleration), his X speed is 00.80 for 13 (decimal) frames before halting completely.
- In Rockman 2, when Rockman decelerates from full speed (not from acceleration), his X speed is 00.80 for 8 (decimal) frames before halting completely.
- In Rockman 3, when Rockman decelerates from full speed (not from acceleration), he moves normally for 1 frame, after which he halts immediately (though the sprite indicates deceleration for 8 frames).
Magnet beams (Rockman 1)
There may be at maximum 5 magnet beams simultaneously active.
Every magnet beam has the following properties:
- Screen number where the center of the beam is anchored in
- X position within that screen (00―FF)
- Y position within that screen (00―FF)
- Length (00―41)
- Life (00―9C)
- Cycle position (00―10)
Lifecycle
Beams die when
- Their Life is 00
- A boss battle starts
- A stage is loaded (death for example)
Beams don’t die when
When a new magnet beam is created:
As long as B button is held:
- Life does not decrease
- Length increases by 1 every frame, unless it is already 41
- Beam center position is readjusted, see below
- If the beam far end is inside a wall, the beam is released (as if B button was no longer held)
When B button is no longer held:
- Life decreases by 1 every frame, unless it is already 00
- If Life is 0, the beam is forgotten
Every frame when the beam exists:
- Cycle position is increased by 1
- If (Cycle_position×8) == (Length×2), Cycle position is reset to 0
Beam center position
Note: All numbers in this section are decimal, not hexadecimal.
As long as the player holds B, the beam center is adjusted according to Rockman’s position.
- Beam Y position is set to Rockman’s Y position
- A temporary variable is calculated:
- Temp = (Beam_length_before_growth × 2 + 16)
- If(Temp & 7)==0, then Temp = Temp+8
- If Rockman looks to the right, then Beam X position = Rockman’s X position + Temp
- If Rockman looks to the left, then Beam X position = Rockman’s X position − Temp
For lengths 1-65, the X position of the beam is therefore adjusted in the following ways:
1:+24[1]M>32 17:+56[5]M>96 33:+88[9]M>160 49:+120[13]M>224 65:+152[17]M>288
2:+18[1]>26 18:+50[5]>90 34:+82[9]>154 50:+114[13]>218 65:+146[17]>282
3:+20[1]>28 19:+52[5]>92 35:+84[9]>156 51:+116[13]>220
4:+22[2]m>38 20:+54[6]m>102 36:+86[10]m>166 52:+118[14]m>230
5:+24[2]>40 21:+56[6]>104 37:+88[10]>168 53:+120[14]>232
6:+26[2]>42 22:+58[6]>106 38:+90[10]>170 54:+122[14]>234
7:+28[2]>44 23:+60[6]>108 39:+92[10]>172 55:+124[14]>236
8:+30[3]m>54 24:+62[7]m>118 40:+94[11]m>182 56:+126[15]m>246
9:+40[3]M>64 25:+72[7]M>128 41:+104[11]M>192 57:+136[15]M>256
10:+34[3]>58 26:+66[7]>122 42:+98[11]>186 58:+130[15]>250
11:+36[3]>60 27:+68[7]>124 43:+100[11]>188 59:+132[15]>252
12:+38[4]m>70 28:+70[8]m>134 44:+102[12]m>198 60:+134[16]m>262
13:+40[4]>72 29:+72[8]>136 45:+104[12]>200 61:+136[16]>264
14:+42[4]>74 30:+74[8]>138 46:+106[12]>202 62:+138[16]>266
15:+44[4]>76 31:+76[8]>140 47:+108[12]>204 63:+140[16]>268
16:+46[5]m>86 32:+78[9]m>150 48:+110[13]m>214 64:+142[17]m>278
Note: The second “65” is when the beam no longer grows. The number in [brackets] is the beam length in units.
- Add 1 and multiply by 16 to get the carrying width of the beam.
- 32 at minimum, 272 at maximum.
- The game actually uses half of this value (range for each side from the center of the beam), so it does not overflow even when ≥ 256.
- m = nearest distance of beam for each length (important when operating on next screen (different than displayed))
- M = biggest distance of beam (often the optimal choice for zipping)
- >number = location of the far end of the beam
Randomness
Memory addresses
Game | Screen# | X (hi,lo) | Xspd (hi,lo) | Y (hi,lo) | Yspd (hi,lo)
|
---|
Rockman 1 | $460 | $480:$4A0 | $4C0:$4E0 | $600:$620 | $660:$680
|
Rockman 2 | $440 | $460:$480 | $600:$620 | $4A0:$4C0 | $640:$660
|
Rockman 3 | $380 | $360:$340 | no RAM address? | $3C0:$3A0 | $460:$440
|
Rockman 4 | $348 | $330:$318 | no RAM address? | $378:$360 | $3F0:$3D8
|
Rockman 5 | | | | |
Rockman 6 | | | | |
The variables for object #n
can be found by adding n
to each address.
Boss has n
=1 in RM1/2, Rockman always has n
=0.