If you are still using the old URL (datacrystal.romhacking.net), please update your bookmarks! The old URL may stop working soon.
The current URL is datacrystal.tcrf.net.
The current URL is datacrystal.tcrf.net.
Super Mario Bros. 2 (NES)/RAM map: Difference between revisions
Jump to navigation
Jump to search
(→Misc.: added bonus card memory locations) |
(Formatted ACMLM's research for better readability.) |
||
Line 393: | Line 393: | ||
===Stuff posted by ACMLM on rustedmagick forums in 2002=== | ===Stuff posted by ACMLM on rustedmagick forums in 2002=== | ||
SMB2's music ROM bank: ($8000-FFFF, Addresses not counting header) | <pre>SMB2's music ROM bank: ($8000-FFFF, Addresses not counting header) | ||
---------- | ---------- | ||
Line 601: | Line 601: | ||
$720D -- Wart's speed (left) | $720D -- Wart's speed (left) | ||
$7213 -- Wart's speed (right) | $7213 -- Wart's speed (right)</pre> | ||
=References= | =References= |
Revision as of 07:13, 31 March 2015
The following article is a RAM map for Super Mario Bros. 2 (NES).
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 - Invisable 01 - Visable 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 Properites
- $0621 - Number of times leaving Subspace aftering 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 - look into
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 Properites
- $0635 - Current World number (loads characteristics of world such as Ice)
Graphics Tileset
- $06F7 - Current Level Tileset (1st half of the right Table)
- $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 changable 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 archieve) http://board.acmlm.org - lost when board was remade (recovered by internet archive) http://bmf.rustedmagick.com/