View Page Source

Revision (current)
Last Updated by FractalFusion on 9/15/2015 6:47 PM
Back to Page

This is a RAM Map for Mega Man X.

||Address||Byte length||Description||
|$7E:0000|16 bytes|Scratch RAM|
|$7E:003B|1 byte|Intro sequence timer for the title screen. Counts down from #$FF at the title screen. When it reaches 0, there is a fade out and the intro sequence starts again. The counter is reset to #$EA when a new option is selected.|
|$7E:003C|1 byte|The currently selected option on the title screen. #$00 = Start Game, #$01 = Password Screen, #$02 = Options Menu.|
|$7E:00A7|1 byte|Controller data 1, current frame. Format: axlr----%%% a = A; x = X; l = L; r = R, - = unused. |
|$7E:00A8|1 byte|Controller data 2, current frame. Format: byetUDLR%%% b = B; y = Y; e = Select; t = Start; U = Up; D = Down; L = Left; R = Right.|
|$7E:00A9|1 byte|Controller data 1, previous frame. Format: axlr----%%% a = A; x = X; l = L; r = R. |
|$7E:00AA|1 byte|Controller data 2, previous frame. Format: byetUDLR%%% b = B; y = Y; e = Select; t = Start; U = Up; D = Down; L = Left; R = Right.|
|$7E:00AB|1 byte|Controller data 1, button press (current frame and not previous frame). Format: axlr----%%% a = A; x = X; l = L; r = R. |
|$7E:00AC|1 byte|Controller data 2, button press (current frame and not previous frame). Format: byetUDLR%%% b = B; y = Y; e = Select; t = Start; U = Up; D = Down; L = Left; R = Right. |
|$7E:00B3|1 byte|Used as a counter for the screen's level of brightness when fading (bits 0 to 7). #$0F = full brightness, #$00 = completely faded.|
|$7E:00B4|2 bytes|Camera X-position, in pixels.|
|$7E:00B6|2 bytes|Camera Y-position, in pixels.|
|$7E:0100|unknown|Sound effects?|
|$7E:0300|512 bytes(?)|Graphics?|
|$7E:0740|unknown|Sound effects?|
|$7E:0B9B|1 byte|Frame counter. Differs from the other two in that this one pauses during loading screens.|
|$7E:0B9C|1 byte|"Effective" frame counter. Stops when the player dies, among other things.|
|$7E:0B9D|1 byte|If the value in it is not zero, run the actual game; otherwise, loop forever. It's set to a non-zero value during NMI, and it's set to zero after the game mode has been run, so that the game runs exactly once a frame - one NMI trigger per frame.|
|$7E:0B9E|1 byte|"True" frame counter. Always increments once per frame.|
|$7E:0BA6|2 bytes|Value of Pseudo-Random Number Generator.|
|$7E:0BAC|1 byte|X's sub-pixel X-position.|
|$7E:0BAD|2 bytes|X's X-position, in pixels.|
|$7E:0BAF|1 byte|X's sub-pixel Y-position.|
|$7E:0BB0|2 bytes|X's Y-position, in pixels.|
|$7E:0BBB|1 byte|X's blink (close and open eyes) animation timer. If X is standing still, begin the following cycle:%%% - Start with #$50, decrease by one every frame until it reaches 0;%%% - Make X blink once (#$08-frame-long blink);%%% - Set to #$30, decrease by one every frame until it reaches 0;%%% - Make X blink twice (#$04-frame-long blinks);%%% If X is moving, reset the cycle. |
|$7E:0BBF|1 byte|X's sprite (bits 0-7).|
|$7E:0BC2|2 bytes|X's X-velocity, in sub-pixels per frame.|
|$7E:0BC4|2 bytes|X's Y-velocity, in negative sub-pixels per frame.|
|$7E:0BC6|1 byte|X's Y-acceleration, in sub-pixels per frame per frame.|
|$7E:0BCF|1 byte|X's current health.|
|$7E:0BDB|1 byte|Current weapon selected. A list of values can be found [http://dl.dropbox.com/u/14136904/Selected%20Weapon.html|here].|
|$7E:0BDD|1 byte|Number of bullets (of any shot type) onscreen.|
|$7E:0BDE|6 bytes|Controller data. Disabled buttons (such as default X and select) are not included.|
|$7E:0BF8|1 byte|Timer for how long to display X's buster after shooting. Set to #$FF when X's buster isn't out, set to #$0F and decreases once per frame after shooting. Is reset to #$0F with each successive shot.|
|$7E:0BFA|1 byte|Dashing timer. Decreases by one every frame. Once it hits 0, X stops dashing. Freezes at the last value it was at if X stop dashing before it reaches 0.|
|$7E:0BFF|1 byte|Timer for the level of X's charge shot, while charging. Starts at #$95 and decreases once per frame. #$95 = green shot charged, #$4F = blue shot charged, #$01 = pink shot charged.|
|$7E:0C03|1 byte|Level of X's charged shot, while charging. #$00 = not charging, #$01 = pink shot charged, #$02 = blue shot charged, #$03 = green shot charged.|
|$7E:0C06|1 byte|Bitflags: Standing = #$04, hanging on left wall = #$02, right wall = #$01.|
|$7E:0C11|1 byte|X's direction. #$00 = left, #$40 = right.|
|$7E:0C13|1 byte|X's recovery (flashing) time after a hit. Decreases by one every frame.|
|$7E:0C30|96 bytes|Stuff for armor parts (position, type, and so forth). [TODO]|
|$7E:0E18|1 byte|Ride armor exist flag (#$00 = ride armor does not exist, #$01 = ride armor exists).|
|$7E:0E1A|1 byte|Ride armor's current state. (#$00 = empty, #$02 = still, #$04 = walking, #$06 = punching, #$08 = jumping, #$0E = dashing, #$14 = mount ride armor, #$16 = dismount ride armor)|
|$7E:0E1C|1 byte|Ride armor's sub-pixel X-position.|
|$7E:0E1D|2 bytes|Ride armor's X-position, in pixels.|
|$7E:0E1F|1 byte|Ride armor's sub-pixel Y-position.|
|$7E:0E20|2 bytes|Ride armor's Y-position, in pixels.|
|$7E:0E32|2 bytes|Ride armor's X-velocity, in sub-pixels per frame.|
|$7E:0E34|2 bytes|Ride armor's Y-velocity, in negative sub-pixels per frame.|
|$7E:0E36|1 byte|Ride armor's Y-acceleration, in sub-pixels per frame per frame|
|$7E:0E4B|1 byte|Ride armor's heading (#$00 = facing left, #$40 = facing right).|
|$7E:0E4E|6 bytes|Controller data, if ride armor is nearby. Disabled buttons (such as default X and select) are not included. Data for previous frame not included.|
|$7E:0E68|64*15 bytes|Enemy data. Each enemy is given 64 bytes.|
|$7E:1228|64*8 bytes|X's shot/bullet data. Each shot is given 64 bytes.|
|$7E:1428|64*8 bytes|Enemy shot/bullet data. Each shot is given 64 bytes.|
|$7E:1628|48*16 bytes|Misc. data (such as item drops). Each item is given 48 bytes.|
|$7E:1928|Unknown|Unknown data (possibly including shot impact and explosion sprites). Each part is given 32 bytes.|
|$7E:1ED2|1 byte|Current item selected on the pause menu.%%%#$00 = X Buster%%%#$01 = Homing Torpedo%%%#$02 = Chameleon Sting%%%#$03 = Rolling Shield%%%#$04 = Fire Wave%%%#$05 = Storm Tornado%%%#$06 = Electric Spark%%%#$07 = Boomerang Cutter%%%#$08 = Shotgun Ice%%%#$09 = Escape Unit%%%#$0A = Sub Tank 1%%%#$0B = Sub Tank 2%%%#$0C = Sub Tank 3%%%#$0D = Sub Tank 4|
|$7E:1F7A|1 byte|Current level ID.%%%#$00 = Highway/intro stage%%%#$01 = Launch Octopus%%%#$02 = Sting Chameleon%%%#$03 = Armored Armadillo%%%#$04 = Flame Mammoth%%%#$05 = Storm Eagle%%%#$06 = Spark Mandrill%%%#$07 = Boomer Kuwanger%%%#$08 = Chill Penguin%%%#$09 = Sigma Stage 1%%%#$0A = Sigma Stage 2%%%#$0B = Sigma Stage 3%%%#$0C = Sigma Stage 4|
|$7E:1F7E|1 byte|Increases by one each time you visit the Hadoken capsule location. It's used when determining whether or not to make the capsule appear.|
|$7E:1F80|1 byte|Life counter. Capped at #$09.|
|$7E:1F87|16 bytes|Weapon Energy. Each weapon's energy is stored as two bytes. First byte: Sub-unit amount. Second byte (bits 0 to 5): Unit amount.%%% Once unit amount is 0, sub-unit amount cannot be used even if it is not 0.%%% Usage: Homing Torpedo and Chameleon Sting: 1/2 unit; Fire Wave: 1/16 unit; Everything else: 1 unit. |
|$7E:1F99|1 byte|Bitflags for upgrades and sub-tanks collected. Format: dcbaZYXW %%% Upgrades: W = Head; X = Arm (Buster); Y = Body (Armor); Z = Leg (Dash).%%% Sub-tanks: a = Eagle; b = Armadillo; c = Mandrill; d = Mammoth. |
|$7E:1F9A|1 byte|X's maximum health. Increases by 2 per heart tank.|
|$7E:1F9C|1 byte|Bitflags for heart tanks collected. Format: hgfedcba %%% a = Penguin; b = Armadillo; c = Eagle; d = Chameleon; e = Mammoth; f = Kuwanger; g = Mandrill; h = Octopus. |

__Enemy/Object data__

||Offset||Byte length||Description||
|#$0| 1 byte|Object in memory flag. #$00 = No object in memory. #$01 = Object exists in memory.|
|#$1| 1 byte|Object's action 1.|
|#$2| 1 byte|Object's action 2.|
|#$4| 1 byte|Object's sub-pixel X-position.|
|#$5| 2 bytes|Object's X-position, in pixels.|
|#$7| 1 byte|Object's sub-pixel Y-position.|
|#$8| 2 bytes|Object's Y-position, in pixels.|
|#$A| 1 byte|Object ID.|
|#$13| 1 byte|Animation countdown (animates and reset when zero).|
|#$17| 1 byte|Object sprite (bits 0-7).|
|#$1A| 2 bytes|Object X-velocity, in sub-pixels per frame.|
|#$1C| 2 bytes|Object Y-velocity, in negative sub-pixels per frame.|
|#$1E| 1 byte|Object Y-acceleration, in sub-pixels per frame per frame.|
|#$22| 2 bytes|Object X-position, in pixels.|
|#$24| 2 bytes|Object Y-position, in pixels.|
|#$27| 1 byte|Object's current health.|
|#$28| 24 bytes|Unknown. Contains further data about the object, such as recovery timers for bosses. Data may not be fixed.