Difference between revisions of "Super Mario Bros. 2:RAM map"
From Data Crystal
(Many RAM Addresses) |
m (Touched up some of the various spelling errors on this page and provided a bit of extra information in some parts.) |
||
(28 intermediate revisions by 12 users not shown) | |||
Line 1: | Line 1: | ||
− | + | {{rammap|game=Super Mario Bros. 2}} | |
− | |||
− | |||
− | |||
− | $ | + | =RAM= |
− | $ | + | |
− | $ | + | ==Counters== |
− | $ | + | |
− | $ | + | * $04ED - Current number of lives |
− | $ | + | * $05C5 - Current number of Continues |
− | + | * $062A - Current number of cherries | |
− | $ | + | * $062B - Current number of coins pulled in Subspace (Slot machine currency) |
− | $ | + | * $062C - Current number of BIG vegetables pulled for stop watch |
− | $ | + | |
− | $ | + | * $062D - Number of levels finished as Mario |
− | $ | + | * $062E - Number of levels finished as Princess |
− | + | * $062F - Number of levels finished as Toad | |
− | $ | + | * $0630 - Number of levels finished as Luigi |
− | $ | + | |
− | + | ==Sprite Related== | |
− | + | ||
− | + | * $0014 - Page of main character's X position | |
− | + | * $001E - Page of main character's Y position | |
− | $ | + | * $0638 - Player's Overalls Palette |
− | $ | + | * $0639 - Player's Cap Palette |
− | $ | + | * $063A - Player's Skin Palette |
− | $ | + | |
− | $ | + | ===Position of sprites=== |
− | + | ||
− | + | ====X position on page==== | |
− | $ | + | |
− | + | * $0028 - main character | |
− | + | * $0029 - enemy 5 | |
− | + | * $002A - enemy 4 | |
− | $ | + | * $002B - enemy 3 |
− | $ | + | * $002C - enemy 2 |
− | $ | + | * $002D - enemy 1 |
− | $ | + | |
− | $ | + | ====Y position on page==== |
− | + | ||
− | + | * $0033 - enemy 5 | |
− | + | * $0034 - enemy 4 | |
− | + | * $0035 - enemy 3 | |
− | $ | + | * $0036 - enemy 2 |
− | $ | + | * $0037 - enemy 1 |
− | $ | + | |
− | + | ===Speed of sprites (left/right)=== | |
− | $ | + | |
− | + | * $003C - Main character | |
− | + | * $003D - Enemy 5 | |
− | . | + | * $003E - Enemy 4 |
− | + | * $003F - Enemy 3 | |
− | + | * $0040 - Enemy 2 | |
− | + | * $0041 - Enemy 1 | |
− | + | ||
− | $ | + | ===Jumping Physics=== |
− | $ | + | |
− | $ | + | * $0046 - main character |
− | $ | + | * $0047 - enemy 5 |
− | $ | + | * $0048 - enemy 4 |
− | + | * $0049 - enemy 3 | |
− | + | * $004A - Enemy 2 | |
− | + | * $004B - Enemy 1 | |
− | + | ||
− | + | * $0050 - Is character on a vine? | |
− | + | 00 - no | |
− | + | 01 - yes | |
− | $ | + | |
− | $ | + | ===Misc. sprite addresses=== |
− | $ | + | |
− | + | * $0051 - Enemy 5 | |
− | $ | + | * $0052 - Enemy 4 |
− | + | * $0053 - Enemy 3 | |
− | + | * $0054 - Enemy 2 | |
− | + | * $0055 - Enemy 1 | |
− | + | 00 - Invisible | |
− | + | 01 - Visible | |
− | + | 02 - Dead | |
− | $0090 - | + | |
− | $0091 - | + | * $005A - Enemy 5's relation to main character/landscape |
− | $0092 - | + | * $005B - Enemy 4's relation to main character/landscape |
− | $0093 - | + | * $005C - Enemy 3's relation to main character/landscape |
− | $0094 - | + | * $005D - Enemy 2's relation to main character/landscape |
− | + | * $005E - Enemy 1's relation to main character/landscape | |
− | $0096 - Item pulled up from ground | + | 00 - not on the ground (could be jumping or being thrown) |
− | + | 04 - walking | |
− | $0099 - | + | 05 - turn left because object blocks path |
− | $009A - Drop through | + | 06 - turn right because object blocks path |
− | $009B - | + | 20 - carrying main character when reaching an edge to turn around |
− | + | 24 - carrying main character with same speed as movement | |
− | $ | + | |
− | + | ===Sprite's palette, mirroring, etc.=== | |
− | + | ||
− | $ | + | * $0065 - Enemy 5 |
− | $ | + | * $0066 - Enemy 4 |
− | + | * $0067 - Enemy 3 | |
− | $ | + | * $0068 - Enemy 2 |
− | + | * $0069 - Enemy 1 | |
− | + | ||
− | $ | + | ===Sprite IDs=== |
− | + | ||
− | + | * $008F - Character selected (appearance only, until defeated, then stats as well) | |
− | + | 00 - Mario | |
− | + | 01 - Princess | |
− | $ | + | 02 - Toad |
− | + | 03 - Luigi | |
− | + | * $0090 - Enemy 5 | |
− | + | * $0091 - Enemy 4 | |
− | + | * $0092 - Enemy 3 | |
− | + | * $0093 - Enemy 2 | |
− | $ | + | * $0094 - Enemy 1 |
− | $ | + | |
− | $ | + | * $0096 - Item pulled up from ground |
− | + | ||
− | + | * $0099 - Graphics for when main character jumps | |
− | + | * $009A - Drop through | |
− | + | * $009B - Graphics for when main character walks | |
− | + | ||
− | + | * $00C7 - Character's status | |
− | + | ||
− | + | ===Sprite HP=== | |
− | + | ||
− | + | * $0465 - Enemy 5 | |
− | + | * $0466 - Enemy 4 | |
− | + | * $0467 - Enemy 3 | |
− | + | * $0468 - Enemy 2 | |
− | + | * $0469 - Enemy 1 | |
− | + | ||
− | + | ===Main character=== | |
− | + | ||
− | + | * $04C2 - Current life in the life meter | |
− | + | 0F - One heart | |
− | + | 1F - Two hearts | |
− | . | + | 2F - Three hearts |
− | + | 3F - Four hearts | |
− | + | ||
− | + | * $04C3 - Number of bars in the life meter (for visual purposes only) | |
− | + | FF - One bar (doesn't work very well) | |
− | + | 00 - Two bars (default) | |
− | . | + | 01 - Three bars |
− | + | 02 - Four bars | |
− | + | ||
− | + | ==Timers== | |
− | + | ||
− | + | * $0085 - Amount of time left until main character becomes vulnerable | |
− | + | * $0086 - Amount of time left for unknown | |
− | + | * $0087 - Amount of time left before Bob Omb 5 explodes | |
− | + | * $0088 - Amount of time left before Bob Omb 4 explodes | |
− | + | * $0089 - Amount of time left before Bob Omb 3 explodes | |
− | $ | + | * $008A - Amount of time left before Bob Omb 2 explodes |
− | + | * $008B - Amount of time left before Bob Omb 1 explodes | |
− | $ | + | * $008C - Amount of time left before Bomb 1 explodes |
− | + | * $008D - Amount of time left before Bomb 2 explodes | |
− | $ | + | * $008E - Amount of time left before Bomb 3 explodes |
− | + | * $00B9 - Current time left to use Pidget's carpet | |
− | + | * $04B7 - Amount of time left in subspace | |
− | + | * $04E0 - Amount of time left as star Mario | |
− | + | * $04FF - Current amount of time left from the stop watch | |
− | + | * $14CA - Timer for crouch jump power (0 - 3C) | |
− | $ | + | |
− | $ | + | ===Item flags=== |
− | + | ||
− | $ | + | * $009C - Holding an item? |
− | + | 00 = no | |
− | $ | + | 01 = yes |
− | + | * $009D - Character's mirroring, etc. (not palette) | |
− | + | * $00A3 - Changes once for everytime Tweeter jumps | |
− | + | ||
− | + | * $00AD - Is key held? | |
− | + | 00 - no | |
− | + | 01 - yes - Key appears above head even if thrown, but then not chased. | |
− | + | * $00AE - Item in hand height (used for different character sizes?) | |
− | + | ||
− | + | ==Misc.== | |
− | + | ||
− | + | * $002F - Bonus chance left card | |
− | + | ||
− | + | * $0030 - Bonus chance middle card | |
− | + | ||
− | + | * $0031 - Bonus chance right card | |
− | + | ||
− | + | * $00BA - Screen speed moving left and right | |
− | + | ||
− | + | * $0100 - (screen hold?) | |
− | + | ||
− | + | * $0415 - the rising of the heart | |
− | + | * $0416 - Height of whale's spout after peaking. | |
− | + | ||
− | + | * $0456 - Current time left Hawkmouth (before Wart) is open | |
− | + | ||
− | + | * $04EC - Level Transition. | |
− | + | 00 - normal game play | |
− | + | 01 - begin the same level and area again (like dying revive) | |
− | + | 02 - game over | |
− | + | 03 - end level, go to bonus game | |
− | + | 04 - warp | |
− | + | ||
− | + | * $06F6 - Character growing or shrinking | |
− | + | ||
− | $ | + | |
− | + | * $0211 + $0215 = Slot machine Slot #1 (only during slot game) | |
− | $ | + | * $0219 + $021D = Slot machine Slot #2 (only during slot game) |
− | + | * $0221 + $0225 = Slot machine Slot #3 (only during slot game) | |
− | $ | + | 9, 9 = Star |
− | + | 1, 3 = Shy Guy | |
− | + | 11, 11 = Radish | |
− | + | 5, 7 = Cherry | |
− | $ | + | |
− | . | + | ==Button Related== |
− | + | ||
− | + | * $00F5 - Button pressed (Controller 1) | |
− | + | * $00F6 - Button pressed (Controller 2) | |
− | + | * $00F7 - Button held (Controller 1) | |
− | $ | + | * $00F8 - Button held (Controller 2) |
− | + | ||
− | $ | + | Directional Pad |
− | + | *0 - no movement | |
− | + | *1 - Right | |
− | $ | + | *2 - Left |
− | + | *3 - Left + Right | |
− | + | *4 - Down | |
− | + | *5 - Down + Right | |
− | $ | + | *6 - Down + Left |
− | + | *7 - Down + Left + Right | |
− | + | *8 - Up | |
− | + | *9 - Up + Right | |
− | $ | + | *A - Up + Left |
− | + | *B - Up + Left + Right | |
− | + | *C - Up + Down | |
− | + | *D - Up + Down + Right | |
− | + | *E - Up + Down + Left | |
− | + | *F - Up + Down + Left + Right | |
− | + | ||
− | + | Buttons | |
− | + | 0* - not pressed | |
− | + | 1* - Start | |
− | + | 2* - Select | |
− | . | + | 3* - Start + Select |
− | + | 4* - B | |
− | + | 5* - Start + B | |
− | + | 6* - Select + B | |
− | + | 7* - Start + Select + B | |
− | + | 8* - A | |
− | + | 9* - Start + A | |
− | + | A* - Select + A | |
− | + | B* - Start + Select + A | |
− | + | C* - A + B | |
− | + | D* - Start + A + B | |
− | + | E* - Select + A + B | |
− | + | F* - Start + Select + A + B | |
− | + | ||
− | + | ==Sprite Flags== | |
− | + | ||
− | + | * $04B4 - Something to do with the Hawkmouth opening and closing | |
− | + | ||
− | + | * $04AD - Current number of enemies defeated to grab a heart. | |
− | + | ||
− | + | * $04B0 - Has Key been used on lock? | |
− | + | 00 - no | |
− | + | 01 - yes - If yes, then it won't reappear. | |
− | + | ||
− | + | * $04B4 - How wide Hawkmouth is open | |
− | + | * $04B5 - Has the Crystal been obtained? If yes, effect will last while in area. | |
− | + | 00 - no | |
− | + | 01 - yes | |
− | $ | + | * $04B6 - look into |
− | $ | + | |
− | + | * $04BE - Time counts up for how long the door takes to open | |
− | $ | + | |
− | + | * $04C4 - Amount of time left for the screen to shake after POW | |
− | $ | + | * $04C5 - Height to raise and lower the "level" for shake |
− | + | * $04C6 - Amount of time left for bomb flash in background | |
− | $ | + | |
− | + | * $04CA - Amount of time to build up to charged jump | |
− | $ | + | |
− | + | * $04E0 - Current Starman time length left | |
− | $ | + | |
− | $ | + | ==Regeneration properties== |
− | + | ||
− | $ | + | * $04E7 - Area |
− | $ | + | * $04E8 - Sub-area |
− | $ | + | * $04E9 - Page |
− | $ | + | |
− | $ | + | ==Mushroom Flags== |
− | $ | + | |
− | $ | + | * $04FB - Has First Mushroom been pulled? If yes, then it won't reappear. |
− | $ | + | 00 - no |
− | $ | + | 01 - yes |
− | $0609 - Stores music track from $0600 played | + | * $04FC - Has Second Mushroom been pulled? If yes, then it won't reappear. |
− | + | 00 - no | |
− | $0612 - Current music tempo | + | 01 - yes |
− | + | * $0620 - Has 1-up been pulled? | |
− | + | 00 - no | |
− | + | 01 - yes - If yes, then it won't reappear. | |
− | + | ||
− | $ | + | ===Subspace Related Properties=== |
− | + | ||
− | + | * $0621 - Number of times leaving Subspace after grabbing a coin | |
− | + | 00 - 1st chance to grab coins | |
− | + | 01 - 2nd chance to grab coins | |
− | $ | + | 02 - No more chances, get vegetables. |
− | + | ||
− | + | * $0628 - In subspace? | |
− | + | 00 - no | |
− | + | 02 - yes (doesn't work for vertical areas) | |
− | + | * $0629 - Possible subspace offset | |
− | + | ||
− | + | ==Level in Memory== | |
− | $ | + | |
− | + | $0531 - Current level loaded | |
− | $ | + | 00 - 1-1 |
− | + | 01 - 1-2 | |
− | + | 02 - 1-3 | |
− | + | 03 - 2-1 | |
− | + | 04 - 2-2 | |
− | + | 05 - 2-3 | |
− | + | 06 - 3-1 | |
− | $ | + | 07 - 3-2 |
− | + | 08 - 3-3 | |
− | + | 09 - 4-1 | |
− | + | 0A - 4-2 | |
− | + | 0B - 4-3 | |
− | + | 0C - 5-1 | |
− | + | 0D - 5-2 | |
− | + | 0E - 5-3 | |
− | + | 0F - 6-1 | |
− | + | 10 - 6-2 | |
− | $ | + | 11 - 6-3 |
− | + | 12 - 7-1 | |
− | $ | + | 13 - 7-2 |
− | $ | + | |
− | + | ==Character Properties== | |
− | + | ||
− | $ | + | * $0546 - Pickup Speed Animation 1 |
− | + | * $0547 - Pickup Speed Animation 2 | |
− | $ | + | * $0548 - Pickup Speed Animation 3 |
− | + | * $0549 - Pickup Speed Animation 4 | |
− | $ | + | * $054A - Pickup Speed Animation 5 |
+ | * $054B - Pickup Speed Animation 6 | ||
+ | |||
+ | * $054D - Standing Jump Height | ||
+ | * $054E - Crouching Power Jump Height | ||
+ | |||
+ | * $0550 - Running Jump Height | ||
+ | * $0551 - Running Jump Height while carrying object | ||
+ | |||
+ | * $0553 - Float Timer (set to 0 for everyone but Princess) | ||
+ | |||
+ | * $0555 - Character's Jumping physics? | ||
+ | |||
+ | ==Music and Sound Properties== | ||
+ | |||
+ | * $05EE - Current music track? | ||
+ | * $05EF - Current music track? | ||
+ | |||
+ | * $0600 - Loads the current song track | ||
+ | * $0601 - Plays a sound effect | ||
+ | * $0602 - Plays a sound effect | ||
+ | * $0603 - Plays a small clip of music (and also for ending sequence) | ||
+ | * $0604 - Character's sound effects | ||
+ | * $0605 - POW sound effects | ||
+ | * $0606 - Stores sound effect from $0603 played | ||
+ | * $0607 - Stores sound effect from $0602 played | ||
+ | * $0608 - Stores sound effect from $0601 played | ||
+ | * $0609 - Stores music track from $0600 played | ||
+ | |||
+ | * $0612 - Current music tempo | ||
+ | |||
+ | ==World Properties== | ||
+ | |||
+ | * $0635 - Current World number (loads characteristics of world such as Ice) | ||
+ | |||
+ | ===Graphics Tileset=== | ||
+ | |||
+ | * $06F7 - Current Level Tileset (1st half of the right Table) | ||
+ | 10 - Grass | ||
+ | 12 - Desert | ||
+ | 14 - Sky | ||
+ | 16 - Wart's Palace? | ||
+ | * $06F8 - Current Cycling Sprite Tileset (2nd half of the right Table) | ||
+ | * $06F9 - Current Character (Appearance, not stats) (1st quarter of left Table) | ||
+ | 00 - Large Mario | ||
+ | 01 - Large Luigi | ||
+ | 02 - Large Princess | ||
+ | 03 - Large Toad | ||
+ | 04 - Small Mario | ||
+ | 05 - Small Luigi | ||
+ | 06 - Small Princess | ||
+ | 07 - Small Toad | ||
+ | * $06FA - Current standard sprites (Snifits, Hawkmouth, etc.) (2nd quarter of left Table) | ||
+ | * $06FB - Current standard sprites (1-Up, Birdo, etc.) (3rd quarter of left Table) | ||
+ | * $06FC - Current changeable sprites (Ostro, Pidget, Pokey, etc.) (4th quarter of left Table) | ||
+ | * $06FD - Current animation of $06F8 (Cycling sprites) | ||
+ | |||
+ | ===Level Layout=== | ||
+ | |||
+ | * $0700 ~ $07FF - Subspace and jars | ||
+ | * $6000 - $695F - Currently loaded level (Almost half the SRAM) | ||
+ | |||
+ | ===Stuff posted by ACMLM on rustedmagick forums in 2002=== | ||
+ | <pre>SMB2's music ROM bank: ($8000-FFFF, Addresses not counting header) | ||
+ | |||
+ | ---------- | ||
+ | $8000-8119 = ?? (contains data such as the jump sound, climbing sound, falling sound (in 1-1)) | ||
+ | $811A-8137 = Mushroom sound (notes in reverse order) | ||
+ | $8138-818E = ?? | ||
+ | $818F-8196 = Pointers to sound effects | ||
+ | $8197-828D = Sound effects | ||
+ | $828E-8746 = ?? (must be the code that generates music from the data) | ||
+ | $8747-875E = Note frequency data (base scale) | ||
+ | |||
+ | $875F-8EFF = unused | ||
+ | |||
+ | $8F00-8FB2 = Note length tables | ||
+ | $8FB3-8FFF = unused (can be used to add note length tables) | ||
+ | |||
+ | $9000-9029 = Music part pointers | ||
+ | $902A-9102 = Music part headers | ||
+ | $9103-910B = Pointers to first music part (for each song) | ||
+ | $910C-9114 = Pointers to last music part | ||
+ | $9115-911D = Pointers to looping music part | ||
+ | $911E-A18D = Music data | ||
+ | $A18E-A3EE = Instrument sound data (square pulse property bits) | ||
+ | |||
+ | $A3EF-BFFF = unused | ||
+ | ---------- | ||
+ | |||
+ | Pointers to | ||
+ | first/last/loop part of: | ||
+ | $9103-910C-9115 = Normal level ($10-16-11) | ||
+ | $9104-910D-9116 = Character select ($07-0F-08) | ||
+ | $9105-910E-9117 = Underground ($29-29-29) | ||
+ | $9106-910F-9118 = Boss ($17-17-17) | ||
+ | $9107-9110-9119 = Star ($18-18-18) | ||
+ | $9108-9111-911A = Sub-space ($1E-22-1E) | ||
+ | $9109-9112-911B = Wart ($19-19-19) | ||
+ | $910A-9113-911C = Intro ($1A-1D-00) | ||
+ | $910B-9114-911D = Ending ($23-28-28) | ||
+ | --> pointing from $9000 | ||
+ | |||
+ | $9000-9029 = Music part pointers | ||
+ | Default: | ||
+ | $9000 = Bonus (get mushroom) ($99) | ||
+ | $9001 = Boss beaten ($8E) | ||
+ | $9002 = Bonus 2 (get ball) ($84) | ||
+ | $9003 = Die, lose ($A4) | ||
+ | $9004 = Game Over ($89) | ||
+ | $9005 = Same as $9002 ($84) | ||
+ | $9006 = Same as $9000 ($99) | ||
+ | $9007-900F = Character select ($2A,30,36,30,3C,42,A9,9E,93) | ||
+ | $9010-9016 = Normal level ($48,4E,54,5A,54,60,66) | ||
+ | $9017 = Boss ($72) | ||
+ | $9018 = Star ($78) | ||
+ | $9019 = Wart ($7E) | ||
+ | $901A-901D = Intro ($B5,AF,BB,C1) | ||
+ | $901E-9022 = Subspace ($C7,CD,D3,CD,D9) | ||
+ | $9023-9028 = Ending ($DF,EB,E5,F7,F1,FD) | ||
+ | $9029 = Underground ($6C) | ||
+ | --> pointing from $9000 | ||
+ | |||
+ | Music part headers: | ||
+ | $902A-902F \ | ||
+ | $9030-9035 | | ||
+ | $9036-903B | Character select | ||
+ | $903C-9041 | (part 1) | ||
+ | $9042-9047 / | ||
+ | $9048-904D \ | ||
+ | $904E-9053 | | ||
+ | $9054-9059 | Normal level | ||
+ | $905A-905F | | ||
+ | $9060-9065 | | ||
+ | $9066-906B / | ||
+ | $906C-9071 = Underground | ||
+ | $9072-9077 = Boss | ||
+ | $9078-907D = Star | ||
+ | $907E-9083 = Wart | ||
+ | $9084-9088 = Bonus 2 | ||
+ | $9089-908D = Game Over | ||
+ | $908E-9092 = Boss beaten | ||
+ | $9093-9098 = Character select (2) | ||
+ | $9099-909D = Bonus | ||
+ | $909E-90A3 = Character select (3) | ||
+ | $90A4-90A8 = Die, lose | ||
+ | $90A9-90AE = Character select (4) | ||
+ | $90AF-90B4 \ | ||
+ | $90B5-90BA | Intro | ||
+ | $90BB-90C0 | | ||
+ | $90C1-90C6 / | ||
+ | $90C7-90CC \ | ||
+ | $90CD-90D2 | Subspace | ||
+ | $90D3-90D8 | | ||
+ | $90D9-90DE / | ||
+ | $90DF-90E4 \ | ||
+ | $90E5-90EA | | ||
+ | $90EB-90F0 | Ending | ||
+ | $90F1-90F6 | | ||
+ | $90F7-90FC | | ||
+ | $90FD-9102 / | ||
+ | |||
+ | Music header bytes: | ||
+ | 00 = Pointer to note length table (points from $8F00) | ||
+ | 01-02 = Pointer for square 1 channel (main pointer) | ||
+ | 03 = Data offset for triangle (from main address) | ||
+ | 04 = Data offset for square 2 | ||
+ | 05 = Data offset for noise | ||
+ | |||
+ | Note length tables: | ||
+ | $8F00-8F0C = $03,03,04,04,06,09,08,08,0C,12,18,24,30 | ||
+ | $8F0D-8F1A = $03,04,05,04,07,0A,09,0A,0E,15,1C,2A,38,0B | ||
+ | $8F1B-8F27 = $04,04,05,06,08,0C,0B,0A,10,18,20,30,40 | ||
+ | $8F28-8F36 = $04,05,06,06,09,0D,0C,0C,12,1B,24,36,48,0E,03 | ||
+ | $8F37-8F43 = $05,05,07,06,0A,0F,0D,0E,14,1E,28,3C,50 | ||
+ | $8F44-8F51 = $05,06,07,08,0B,10,0F,0E,16,21,2C,42,58,11 | ||
+ | $8F52-8F5f = $06,06,08,08,0C,12,10,10,18,24,30,48,60,02 | ||
+ | $8F50-8F6D = $06,07,09,08,0D,13,11,12,1A,27,34,4E,68,14 | ||
+ | $8F6E-8F7C = $07,07,09,0A,0E,15,13,12,1C,2A,38,54,70,03,04 | ||
+ | $8F7D-8F8A = $07,08,0A,0A,0F,16,14,14,1E,2D,3C,5A,78,17 | ||
+ | $8F8B-8F97 = $08,08,0B,0A,10,18,15,16,20,30,40,60,80 | ||
+ | $8F98-8FA5 = $08,09,0B,0C,11,19,15,16,22,33,44,60,88,1A | ||
+ | $8FA6-8FB2 = $09,09,0C,0C,12,1B,18,18,24,36,48,6C,90 | ||
+ | |||
+ | Music data: | ||
+ | DF-$911E = Ending (1) | ||
+ | E5-$919C = Ending (2) | ||
+ | F7-$920D = Ending (5) | ||
+ | EB-$9280 = Ending (3) | ||
+ | F1-$92F2 = Ending (4) | ||
+ | FD-$9376 = Ending (6) | ||
+ | 78-$9469 = Star | ||
+ | 6C-$94BD = Underground | ||
+ | C7-$9550 = Subspace (1) | ||
+ | CD-$95A3 = Subspace (2) | ||
+ | D3-$95E0 = Subspace (3) | ||
+ | D9-$960F = Subspace (4) | ||
+ | B5-$963E = Intro (2) | ||
+ | AF-$96A7 = Intro (1) | ||
+ | BB-$9794 = Intro (3) | ||
+ | C1-$9878 = Intro (4) | ||
+ | 2A-$98AD = Character select (1) | ||
+ | 30-$995C = Character select (2) | ||
+ | 36-$999A = Character select (3) | ||
+ | 3C-$999E = Character select (4) | ||
+ | 42-$9A26 = Character select (5) | ||
+ | A9-$9A5D = Character select (8) | ||
+ | 9E-$9ADF = Character select (7) | ||
+ | 93-$9B93 = Character select (6) | ||
+ | 48-$9BD4 = Normal level (1) | ||
+ | 4E-$9C20 = Normal level (2) | ||
+ | 54-$9CF9 = Normal level (3) | ||
+ | 5A-$9D3F = Normal level (4) | ||
+ | 60-$9E00 = Normal level (5) | ||
+ | 66-$9E4D = Normal level (6) | ||
+ | 72-$9F1C = Boss | ||
+ | 7E-$9FC7 = Wart | ||
+ | 99-$A0BB = Bonus | ||
+ | 89-$A0CE = Game Over | ||
+ | 8E-$A0F2 = Boss Beaten | ||
+ | 84-$A148 = Bonus 2 | ||
+ | A4-$A16F = Die, lose | ||
+ | |||
+ | $818F-8196 = Sound effect pointers | ||
+ | |||
+ | $8197-81B5 = Door appearing | ||
+ | $81B6-81DC = Throwing item | ||
+ | $81DD-81FB = Birdo spitting | ||
+ | $81FC-8202 = Selecting, getting cherry/heart | ||
+ | $8203-8219 = Defeating enemy | ||
+ | $821A-8233 = Clock ticking | ||
+ | $8234-8265 = Hawkmouth opening | ||
+ | $8266-828D = 1UP sound | ||
+ | |||
+ | $8397:B9 03 91 LDA $9103,Y --Load the start part pointer | ||
+ | $839A:8D EE 05 STA $05EE | ||
+ | $839D:B9 0C 91 LDA $910C,Y --Load the end part pointer | ||
+ | $83A0:18 CLC | ||
+ | $83A1:69 02 ADC #$02 | ||
+ | $83A3:8D EF 05 STA $05EF | ||
+ | $83A6:B9 15 91 LDA $9115,Y --Load the loop part pointer | ||
+ | $83A9:8D F0 05 STA $05F0 | ||
+ | |||
+ | And some old info from 2 years ago: (addresses without header, again) | ||
+ | |||
+ | $4C3A -- Panser's spitting time | ||
+ | $4C64 -- Grey panser's spitting direction | ||
+ | |||
+ | $4D43 -- Jump height on coming out of jars | ||
+ | |||
+ | $4F98 -- Birdo's jump height | ||
+ | $4FB3 -- Birdo's spitting time | ||
+ | $4FC6 -- Birdo's speed (right) | ||
+ | $4FCC -- Birdo's speed (left) | ||
+ | $4FDA -- Birdo's spitting sound | ||
+ | |||
+ | $555C -- Snifit's jump height | ||
+ | $5593 -- Snifit's spitting time | ||
+ | |||
+ | $6161 -- Clawglip's rock throwing time | ||
+ | $61C5 -- Rock speed | ||
+ | |||
+ | $65A0 -- Mouser's jump height | ||
+ | $65AC -- Mouser's bomb holding time | ||
+ | $65E4 -- Mouser's bomb throwing height | ||
+ | $65EB -- Time before bomb explosion | ||
+ | $65EF -- Mouser's bomb throwing speed | ||
+ | |||
+ | $68AB -- Triclyde's spitting sound | ||
+ | |||
+ | $720D -- Wart's speed (left) | ||
+ | $7213 -- Wart's speed (right)</pre> | ||
+ | |||
+ | =References= | ||
+ | |||
+ | http://www.tekhacks.net/forum - lost when forum was removed (recovered by internet archive) | ||
+ | http://board.acmlm.org - lost when board was remade (recovered by internet archive) | ||
+ | http://bmf.rustedmagick.com/ | ||
+ | |||
+ | {{Internal Data|game=Super Mario Bros. 2}} |
Latest revision as of 11:20, 24 March 2021
The following article is a RAM map for Super Mario Bros. 2.
Contents
RAM
Counters
- $04ED - Current number of lives
- $05C5 - Current number of Continues
- $062A - Current number of cherries
- $062B - Current number of coins pulled in Subspace (Slot machine currency)
- $062C - Current number of BIG vegetables pulled for stop watch
- $062D - Number of levels finished as Mario
- $062E - Number of levels finished as Princess
- $062F - Number of levels finished as Toad
- $0630 - Number of levels finished as Luigi
Sprite Related
- $0014 - Page of main character's X position
- $001E - Page of main character's Y position
- $0638 - Player's Overalls Palette
- $0639 - Player's Cap Palette
- $063A - Player's Skin Palette
Position of sprites
X position on page
- $0028 - main character
- $0029 - enemy 5
- $002A - enemy 4
- $002B - enemy 3
- $002C - enemy 2
- $002D - enemy 1
Y position on page
- $0033 - enemy 5
- $0034 - enemy 4
- $0035 - enemy 3
- $0036 - enemy 2
- $0037 - enemy 1
Speed of sprites (left/right)
- $003C - Main character
- $003D - Enemy 5
- $003E - Enemy 4
- $003F - Enemy 3
- $0040 - Enemy 2
- $0041 - Enemy 1
Jumping Physics
- $0046 - main character
- $0047 - enemy 5
- $0048 - enemy 4
- $0049 - enemy 3
- $004A - Enemy 2
- $004B - Enemy 1
- $0050 - Is character on a vine?
00 - no 01 - yes
Misc. sprite addresses
- $0051 - Enemy 5
- $0052 - Enemy 4
- $0053 - Enemy 3
- $0054 - Enemy 2
- $0055 - Enemy 1
00 - Invisible 01 - Visible 02 - Dead
- $005A - Enemy 5's relation to main character/landscape
- $005B - Enemy 4's relation to main character/landscape
- $005C - Enemy 3's relation to main character/landscape
- $005D - Enemy 2's relation to main character/landscape
- $005E - Enemy 1's relation to main character/landscape
00 - not on the ground (could be jumping or being thrown) 04 - walking 05 - turn left because object blocks path 06 - turn right because object blocks path 20 - carrying main character when reaching an edge to turn around 24 - carrying main character with same speed as movement
Sprite's palette, mirroring, etc.
- $0065 - Enemy 5
- $0066 - Enemy 4
- $0067 - Enemy 3
- $0068 - Enemy 2
- $0069 - Enemy 1
Sprite IDs
- $008F - Character selected (appearance only, until defeated, then stats as well)
00 - Mario 01 - Princess 02 - Toad 03 - Luigi
- $0090 - Enemy 5
- $0091 - Enemy 4
- $0092 - Enemy 3
- $0093 - Enemy 2
- $0094 - Enemy 1
- $0096 - Item pulled up from ground
- $0099 - Graphics for when main character jumps
- $009A - Drop through
- $009B - Graphics for when main character walks
- $00C7 - Character's status
Sprite HP
- $0465 - Enemy 5
- $0466 - Enemy 4
- $0467 - Enemy 3
- $0468 - Enemy 2
- $0469 - Enemy 1
Main character
- $04C2 - Current life in the life meter
0F - One heart 1F - Two hearts 2F - Three hearts 3F - Four hearts
- $04C3 - Number of bars in the life meter (for visual purposes only)
FF - One bar (doesn't work very well) 00 - Two bars (default) 01 - Three bars 02 - Four bars
Timers
- $0085 - Amount of time left until main character becomes vulnerable
- $0086 - Amount of time left for unknown
- $0087 - Amount of time left before Bob Omb 5 explodes
- $0088 - Amount of time left before Bob Omb 4 explodes
- $0089 - Amount of time left before Bob Omb 3 explodes
- $008A - Amount of time left before Bob Omb 2 explodes
- $008B - Amount of time left before Bob Omb 1 explodes
- $008C - Amount of time left before Bomb 1 explodes
- $008D - Amount of time left before Bomb 2 explodes
- $008E - Amount of time left before Bomb 3 explodes
- $00B9 - Current time left to use Pidget's carpet
- $04B7 - Amount of time left in subspace
- $04E0 - Amount of time left as star Mario
- $04FF - Current amount of time left from the stop watch
- $14CA - Timer for crouch jump power (0 - 3C)
Item flags
- $009C - Holding an item?
00 = no 01 = yes
- $009D - Character's mirroring, etc. (not palette)
- $00A3 - Changes once for everytime Tweeter jumps
- $00AD - Is key held?
00 - no 01 - yes - Key appears above head even if thrown, but then not chased.
- $00AE - Item in hand height (used for different character sizes?)
Misc.
- $002F - Bonus chance left card
- $0030 - Bonus chance middle card
- $0031 - Bonus chance right card
- $00BA - Screen speed moving left and right
- $0100 - (screen hold?)
- $0415 - the rising of the heart
- $0416 - Height of whale's spout after peaking.
- $0456 - Current time left Hawkmouth (before Wart) is open
- $04EC - Level Transition.
00 - normal game play 01 - begin the same level and area again (like dying revive) 02 - game over 03 - end level, go to bonus game 04 - warp
- $06F6 - Character growing or shrinking
- $0211 + $0215 = Slot machine Slot #1 (only during slot game)
- $0219 + $021D = Slot machine Slot #2 (only during slot game)
- $0221 + $0225 = Slot machine Slot #3 (only during slot game)
9, 9 = Star 1, 3 = Shy Guy 11, 11 = Radish 5, 7 = Cherry
Button Related
- $00F5 - Button pressed (Controller 1)
- $00F6 - Button pressed (Controller 2)
- $00F7 - Button held (Controller 1)
- $00F8 - Button held (Controller 2)
Directional Pad *0 - no movement *1 - Right *2 - Left *3 - Left + Right *4 - Down *5 - Down + Right *6 - Down + Left *7 - Down + Left + Right *8 - Up *9 - Up + Right *A - Up + Left *B - Up + Left + Right *C - Up + Down *D - Up + Down + Right *E - Up + Down + Left *F - Up + Down + Left + Right
Buttons 0* - not pressed 1* - Start 2* - Select 3* - Start + Select 4* - B 5* - Start + B 6* - Select + B 7* - Start + Select + B 8* - A 9* - Start + A A* - Select + A B* - Start + Select + A C* - A + B D* - Start + A + B E* - Select + A + B F* - Start + Select + A + B
Sprite Flags
- $04B4 - Something to do with the Hawkmouth opening and closing
- $04AD - Current number of enemies defeated to grab a heart.
- $04B0 - Has Key been used on lock?
00 - no 01 - yes - If yes, then it won't reappear.
- $04B4 - How wide Hawkmouth is open
- $04B5 - Has the Crystal been obtained? If yes, effect will last while in area.
00 - no 01 - yes
- $04B6 - look into
- $04BE - Time counts up for how long the door takes to open
- $04C4 - Amount of time left for the screen to shake after POW
- $04C5 - Height to raise and lower the "level" for shake
- $04C6 - Amount of time left for bomb flash in background
- $04CA - Amount of time to build up to charged jump
- $04E0 - Current Starman time length left
Regeneration properties
- $04E7 - Area
- $04E8 - Sub-area
- $04E9 - Page
Mushroom Flags
- $04FB - Has First Mushroom been pulled? If yes, then it won't reappear.
00 - no 01 - yes
- $04FC - Has Second Mushroom been pulled? If yes, then it won't reappear.
00 - no 01 - yes
- $0620 - Has 1-up been pulled?
00 - no 01 - yes - If yes, then it won't reappear.
Subspace Related Properties
- $0621 - Number of times leaving Subspace after grabbing a coin
00 - 1st chance to grab coins 01 - 2nd chance to grab coins 02 - No more chances, get vegetables.
- $0628 - In subspace?
00 - no 02 - yes (doesn't work for vertical areas)
- $0629 - Possible subspace offset
Level in Memory
$0531 - Current level loaded
00 - 1-1 01 - 1-2 02 - 1-3 03 - 2-1 04 - 2-2 05 - 2-3 06 - 3-1 07 - 3-2 08 - 3-3 09 - 4-1 0A - 4-2 0B - 4-3 0C - 5-1 0D - 5-2 0E - 5-3 0F - 6-1 10 - 6-2 11 - 6-3 12 - 7-1 13 - 7-2
Character Properties
- $0546 - Pickup Speed Animation 1
- $0547 - Pickup Speed Animation 2
- $0548 - Pickup Speed Animation 3
- $0549 - Pickup Speed Animation 4
- $054A - Pickup Speed Animation 5
- $054B - Pickup Speed Animation 6
- $054D - Standing Jump Height
- $054E - Crouching Power Jump Height
- $0550 - Running Jump Height
- $0551 - Running Jump Height while carrying object
- $0553 - Float Timer (set to 0 for everyone but Princess)
- $0555 - Character's Jumping physics?
Music and Sound Properties
- $05EE - Current music track?
- $05EF - Current music track?
- $0600 - Loads the current song track
- $0601 - Plays a sound effect
- $0602 - Plays a sound effect
- $0603 - Plays a small clip of music (and also for ending sequence)
- $0604 - Character's sound effects
- $0605 - POW sound effects
- $0606 - Stores sound effect from $0603 played
- $0607 - Stores sound effect from $0602 played
- $0608 - Stores sound effect from $0601 played
- $0609 - Stores music track from $0600 played
- $0612 - Current music tempo
World Properties
- $0635 - Current World number (loads characteristics of world such as Ice)
Graphics Tileset
- $06F7 - Current Level Tileset (1st half of the right Table)
10 - Grass 12 - Desert 14 - Sky 16 - Wart's Palace?
- $06F8 - Current Cycling Sprite Tileset (2nd half of the right Table)
- $06F9 - Current Character (Appearance, not stats) (1st quarter of left Table)
00 - Large Mario 01 - Large Luigi 02 - Large Princess 03 - Large Toad 04 - Small Mario 05 - Small Luigi 06 - Small Princess 07 - Small Toad
- $06FA - Current standard sprites (Snifits, Hawkmouth, etc.) (2nd quarter of left Table)
- $06FB - Current standard sprites (1-Up, Birdo, etc.) (3rd quarter of left Table)
- $06FC - Current changeable sprites (Ostro, Pidget, Pokey, etc.) (4th quarter of left Table)
- $06FD - Current animation of $06F8 (Cycling sprites)
Level Layout
- $0700 ~ $07FF - Subspace and jars
- $6000 - $695F - Currently loaded level (Almost half the SRAM)
Stuff posted by ACMLM on rustedmagick forums in 2002
SMB2's music ROM bank: ($8000-FFFF, Addresses not counting header) ---------- $8000-8119 = ?? (contains data such as the jump sound, climbing sound, falling sound (in 1-1)) $811A-8137 = Mushroom sound (notes in reverse order) $8138-818E = ?? $818F-8196 = Pointers to sound effects $8197-828D = Sound effects $828E-8746 = ?? (must be the code that generates music from the data) $8747-875E = Note frequency data (base scale) $875F-8EFF = unused $8F00-8FB2 = Note length tables $8FB3-8FFF = unused (can be used to add note length tables) $9000-9029 = Music part pointers $902A-9102 = Music part headers $9103-910B = Pointers to first music part (for each song) $910C-9114 = Pointers to last music part $9115-911D = Pointers to looping music part $911E-A18D = Music data $A18E-A3EE = Instrument sound data (square pulse property bits) $A3EF-BFFF = unused ---------- Pointers to first/last/loop part of: $9103-910C-9115 = Normal level ($10-16-11) $9104-910D-9116 = Character select ($07-0F-08) $9105-910E-9117 = Underground ($29-29-29) $9106-910F-9118 = Boss ($17-17-17) $9107-9110-9119 = Star ($18-18-18) $9108-9111-911A = Sub-space ($1E-22-1E) $9109-9112-911B = Wart ($19-19-19) $910A-9113-911C = Intro ($1A-1D-00) $910B-9114-911D = Ending ($23-28-28) --> pointing from $9000 $9000-9029 = Music part pointers Default: $9000 = Bonus (get mushroom) ($99) $9001 = Boss beaten ($8E) $9002 = Bonus 2 (get ball) ($84) $9003 = Die, lose ($A4) $9004 = Game Over ($89) $9005 = Same as $9002 ($84) $9006 = Same as $9000 ($99) $9007-900F = Character select ($2A,30,36,30,3C,42,A9,9E,93) $9010-9016 = Normal level ($48,4E,54,5A,54,60,66) $9017 = Boss ($72) $9018 = Star ($78) $9019 = Wart ($7E) $901A-901D = Intro ($B5,AF,BB,C1) $901E-9022 = Subspace ($C7,CD,D3,CD,D9) $9023-9028 = Ending ($DF,EB,E5,F7,F1,FD) $9029 = Underground ($6C) --> pointing from $9000 Music part headers: $902A-902F \ $9030-9035 | $9036-903B | Character select $903C-9041 | (part 1) $9042-9047 / $9048-904D \ $904E-9053 | $9054-9059 | Normal level $905A-905F | $9060-9065 | $9066-906B / $906C-9071 = Underground $9072-9077 = Boss $9078-907D = Star $907E-9083 = Wart $9084-9088 = Bonus 2 $9089-908D = Game Over $908E-9092 = Boss beaten $9093-9098 = Character select (2) $9099-909D = Bonus $909E-90A3 = Character select (3) $90A4-90A8 = Die, lose $90A9-90AE = Character select (4) $90AF-90B4 \ $90B5-90BA | Intro $90BB-90C0 | $90C1-90C6 / $90C7-90CC \ $90CD-90D2 | Subspace $90D3-90D8 | $90D9-90DE / $90DF-90E4 \ $90E5-90EA | $90EB-90F0 | Ending $90F1-90F6 | $90F7-90FC | $90FD-9102 / Music header bytes: 00 = Pointer to note length table (points from $8F00) 01-02 = Pointer for square 1 channel (main pointer) 03 = Data offset for triangle (from main address) 04 = Data offset for square 2 05 = Data offset for noise Note length tables: $8F00-8F0C = $03,03,04,04,06,09,08,08,0C,12,18,24,30 $8F0D-8F1A = $03,04,05,04,07,0A,09,0A,0E,15,1C,2A,38,0B $8F1B-8F27 = $04,04,05,06,08,0C,0B,0A,10,18,20,30,40 $8F28-8F36 = $04,05,06,06,09,0D,0C,0C,12,1B,24,36,48,0E,03 $8F37-8F43 = $05,05,07,06,0A,0F,0D,0E,14,1E,28,3C,50 $8F44-8F51 = $05,06,07,08,0B,10,0F,0E,16,21,2C,42,58,11 $8F52-8F5f = $06,06,08,08,0C,12,10,10,18,24,30,48,60,02 $8F50-8F6D = $06,07,09,08,0D,13,11,12,1A,27,34,4E,68,14 $8F6E-8F7C = $07,07,09,0A,0E,15,13,12,1C,2A,38,54,70,03,04 $8F7D-8F8A = $07,08,0A,0A,0F,16,14,14,1E,2D,3C,5A,78,17 $8F8B-8F97 = $08,08,0B,0A,10,18,15,16,20,30,40,60,80 $8F98-8FA5 = $08,09,0B,0C,11,19,15,16,22,33,44,60,88,1A $8FA6-8FB2 = $09,09,0C,0C,12,1B,18,18,24,36,48,6C,90 Music data: DF-$911E = Ending (1) E5-$919C = Ending (2) F7-$920D = Ending (5) EB-$9280 = Ending (3) F1-$92F2 = Ending (4) FD-$9376 = Ending (6) 78-$9469 = Star 6C-$94BD = Underground C7-$9550 = Subspace (1) CD-$95A3 = Subspace (2) D3-$95E0 = Subspace (3) D9-$960F = Subspace (4) B5-$963E = Intro (2) AF-$96A7 = Intro (1) BB-$9794 = Intro (3) C1-$9878 = Intro (4) 2A-$98AD = Character select (1) 30-$995C = Character select (2) 36-$999A = Character select (3) 3C-$999E = Character select (4) 42-$9A26 = Character select (5) A9-$9A5D = Character select (8) 9E-$9ADF = Character select (7) 93-$9B93 = Character select (6) 48-$9BD4 = Normal level (1) 4E-$9C20 = Normal level (2) 54-$9CF9 = Normal level (3) 5A-$9D3F = Normal level (4) 60-$9E00 = Normal level (5) 66-$9E4D = Normal level (6) 72-$9F1C = Boss 7E-$9FC7 = Wart 99-$A0BB = Bonus 89-$A0CE = Game Over 8E-$A0F2 = Boss Beaten 84-$A148 = Bonus 2 A4-$A16F = Die, lose $818F-8196 = Sound effect pointers $8197-81B5 = Door appearing $81B6-81DC = Throwing item $81DD-81FB = Birdo spitting $81FC-8202 = Selecting, getting cherry/heart $8203-8219 = Defeating enemy $821A-8233 = Clock ticking $8234-8265 = Hawkmouth opening $8266-828D = 1UP sound $8397:B9 03 91 LDA $9103,Y --Load the start part pointer $839A:8D EE 05 STA $05EE $839D:B9 0C 91 LDA $910C,Y --Load the end part pointer $83A0:18 CLC $83A1:69 02 ADC #$02 $83A3:8D EF 05 STA $05EF $83A6:B9 15 91 LDA $9115,Y --Load the loop part pointer $83A9:8D F0 05 STA $05F0 And some old info from 2 years ago: (addresses without header, again) $4C3A -- Panser's spitting time $4C64 -- Grey panser's spitting direction $4D43 -- Jump height on coming out of jars $4F98 -- Birdo's jump height $4FB3 -- Birdo's spitting time $4FC6 -- Birdo's speed (right) $4FCC -- Birdo's speed (left) $4FDA -- Birdo's spitting sound $555C -- Snifit's jump height $5593 -- Snifit's spitting time $6161 -- Clawglip's rock throwing time $61C5 -- Rock speed $65A0 -- Mouser's jump height $65AC -- Mouser's bomb holding time $65E4 -- Mouser's bomb throwing height $65EB -- Time before bomb explosion $65EF -- Mouser's bomb throwing speed $68AB -- Triclyde's spitting sound $720D -- Wart's speed (left) $7213 -- Wart's speed (right)
References
http://www.tekhacks.net/forum - lost when forum was removed (recovered by internet archive) http://board.acmlm.org - lost when board was remade (recovered by internet archive) http://bmf.rustedmagick.com/
Internal Data for Super Mario Bros. 2 |
---|
ROM Map • RAM Map • Text Table • Notes • Tutorials |