Post subject: RAM locations of games?
Joined: 4/25/2004
Posts: 615
Location: The Netherlands
Does anyone have a site or something that lists interesting addresses of games? And I don't mean the rom addresses, google spams a lot of sites listing locations of stuff inside a rom. I need addresses of data when the game is running. I'm sure there are sites with a database about this stuff and I need some to test my bot more properly give some examples of it's strength. If there's no such site, please consider this the "spam the RAM findings of your game here" thread... :)
qfox.nl
Emulator Coder, Site Developer, Former player
Joined: 11/6/2004
Posts: 833
Might try starting here.
Joined: 4/25/2004
Posts: 615
Location: The Netherlands
Looked good, but half of the games have "empty" pages, and none I randomly looked at had any rom info.
qfox.nl
Editor, Skilled player (1939)
Joined: 6/15/2005
Posts: 3247
That's a good site. It has information on Pokémon Gold/Silver that I tried to find for a long time.
Joined: 3/7/2006
Posts: 720
Location: UK
I'll add what I found about Pokemon TCG there.
Voted NO for NO reason
Joined: 4/25/2004
Posts: 615
Location: The Netherlands
Yes well, this is more the rom-hacking part. It's nice and all, and google kills me with romhacking replies, but I'm talking about running info. I think GameGenie or Gameshark or something like that does the same thing. I'll give some examples... In SMB1, 0x0057 contains the current running speed 0x001D indicates your falling state 0x009F is your vertical speed 0x0002 is your height 0x0500-0x05CF is a map layout 0x07F8-0x07FA is the time 0x075E continains your coin-count 0x07DE-0x07E2 is your score 0x07D8-0x07DC is the hi-score In 3D worldrunner (blatant copy/paste coming ;), 0024 - 0025 = input flags? 002E = horizontal position (proving the game is 255 units or positions wide) 0035 = direction. 00 = forward. FF = backward 005D = how high up in the air... offsets at 0 when on the ground, moves up/down by 2. you can fire when this value <= 2 going or staying down. once jumping, you have one frame to fire. 0065 = airborne (0=no, 1=yes) 007c = 0A means uncontrollable... 0083 = some kind of count down when fired, doesnt seem to impact gameplay... start at 28 every shot 0092 = new life state: 0 = starting game (reset) / nothing (just alive), 224 = gameover, 128 = unmoveable (like coming onscreen new game) until 0, 112 = dying until 128 00A8 = some kind of forward position 00C0 = see 00A8 00D0 = distance of current shot. you can not fire when this is >0, and it reaches 0 before the last shot leaves the visual range. gets reset immediately when hitting an enemy. 00D9 = something about height as well, but offsets at 181 when on the ground and decreases as you go up. there are more addresses like this one in the 02xx range 00E0 = number of lifes 0603 - 0608 = (value-0x30) is score, xxxxxx, where 100's = 0606, 1000's = 0604 etc. when the counter ticks at 999900, 0607's lowbyte turns to 9 as well (only time ever). after that no increments are possible. game doesn't use the 0608 lowbyte, but you can set them all to 9 to get the game to show 999999 as score :) what the 0x30 represents I can't tell. 06C0 - 070F = indicates land, where "you" seem to be on 070D E or F and 06C0 is at the horizon. only lowbytes are used, E means land, 4 means gap. And finally Excitebike (another paste from my own docs), 0408-040f = timer (f=low 8=high). counts 0 to 10 each 03d4 = some kind of vert pos, not quite though 00b0 = which track you are in, 1-4 (0 means sand etc). luke says "when in the air" :s 049x-04fx = track picture, use for collision stuff 03e3 = motor temp. starts at 08. stables at 17 when holding A. overheats at 32. running over "speedup" actually just resets your temp (kind of misleading...) 03ac = 2=down, 1 moves towards the moter a little bit (how much?), 0 doesnt move towards the motor/on the motor/... 037c = 0:ok, 1:puddle, 2:top/bottom of track (1 and 2 = slowdown) 0627 - 062C = score (low nibbles make up score) 08f3 = speed. starting at 0, maxes at 46/47. pressing B gets you there faster (increments by 2, where A adds just one), but 47/49 seems the max speed. seems to be a cap somewhere, poking it higher doesnt give you more speed. 0090 = vertical position (out of context of game) 000e = i think this is 1 when your standing still and are ready to go, 0 else 0024 & 0034 = count down at start. 0034 starts at 5 counts down every 11 frames then 0024 starts to count down once per frame, when 0024 is at 2, it means go (why 2?) Its stuff like this I'm looking for. This is usefull for a bot. Romhacks are generally not. So...
qfox.nl
Editor, Skilled player (1939)
Joined: 6/15/2005
Posts: 3247
Try searching for Gameshark codes. The linked article says how to decipher Gameshark codes. Game Genie modifies ROM, so it does not work for your purpose. Edit: In datacrystal.org, there are links inside the game links called RAM maps, and they exist for many NES games.
Active player (405)
Joined: 3/22/2006
Posts: 708
This actually made me curious about the Super Mario Bros ROM map. The site listed above only has a small amount of information about them. I had experimented with game genie codes a long time ago and don't remember all the codes now, so I was hoping to find out where things like collision detection were stored in the ROM map. I do remember these: PLASNA - Makes every powerup function as a mushroom/fireflower. NAPALT - Makes you dark grey all over, like a shadow. I'd found other weird effects. One code I created caused the first few bars of the overworld theme to constantly repeat, and one caused you to constantly slide instead of walk. Wish I could remember how I came up with them.
Joined: 4/25/2004
Posts: 615
Location: The Netherlands
awesome! thats what i meant :D thanks!
qfox.nl
Active player (410)
Joined: 3/16/2004
Posts: 2623
Location: America, Québec
The main problem with datacrystal is it doesn't have useful RAM addresses for tasing games like energy bosses, random generator but only ones for game hacking.
Joined: 4/25/2004
Posts: 615
Location: The Netherlands
Well there are at least some rom maps. And now I know what to google for, I didn't know the proper terms :)
qfox.nl
Joined: 10/3/2004
Posts: 138
If you're into Genesis Sonic games, check out the Sonic Community Hacking Guide.
HHS
Active player (282)
Joined: 10/8/2006
Posts: 356
Here is a list for Mega Man 5: 0014 Keys pressed on pad 1 0015 Always cleared 0016 Keys held on pad 1 0017 Always cleared 0018 Palette changed 0019 Draw horizontal data 001A Draw vertical data 001B Palette cycle stopped 001C Update tile 001E New tile position 0023 New tile number 0026 Current level 0027 PRG bank for level 0028 Scrolling direction 0029 Area number 002A Maximum screen 002B Current screen 002C Mirroring 002D Life bar select 002E Weapon bar select 002F Boss bar enable 0030 Current move 0031 Direction 0032 Current weapon 0033 Shooting timer 0034 Shooting flag 0035 Sliding timer 0036 Kill block type (F0 => Kill, 00 => Nothing, others => decrease life by 1) 0037 Platform sprite index 0038 Charge counter 0039 Platform direction 003A Platform X speed low 003B Platform X speed high 003C Previous X pos low 003D Previous X pos high 003E Previous Y pos low 003F Previous Y pos high 0041 Unused 0042 Largest block type found 0043 Nb. of destroyed blocks 0044 Previous scroll X 0045 Previous scroll Y 0046 Vertical level 0047 Block number to draw 0048-004F Block types in each tested position 0050 Weapon selection in menu order 0051 Unused 0054 Freeze counter 0055 Horizontal autoscroll lock 0056 Boss sprite index 0057 Bump timer 0058 Bump flag 0059 Destroyed block disable 005A Animation disable 005B Shot type 005D Picked up M-tank 0060 Display updated 0069 Last screen visited 006A Current boss in rematch 006B Killed bosses in rematch 006C Current Wily level 006D Beat letters 006E Levels cleared 0074 Show elevator borders 0075 Elevator position low 0076 Elevator position high 0078 Split parameters 0080-008F Thread info 0090 VBL flag 0092 Asynchronous frame counter 0093-0094 Execute address 0095 Critical section flag 0096 Split effect enabled 0097-0098 Split effect execution routine 0099 Next split effect number 009A Current split effect number 009B Next split position 009C Current split position 009D Synchronous frame counter 009E Current sprite drawn 009F Next OAM table offset 00A0 Freeze frame 00A1 Gravity 00A2 Current Y scroll 00A4 Current X scroll 00A5 Current name table 00A6 Current sprite 00A7 Saved X register when PRG change interrupted 00A8 Saved Y register when PRG change interrupted 00A9 Colour lock 00AC Horizontal scroll direction 00AD Next enemy in level 00AE Previous enemy in level 00AF Mega man upside down 00B0 Life 00B1-00BC Weapon energy 00BD E-tanks 00BE M-tanks 00BF Lives 00C0 In sound code 00C7 Song time increment 00C8 Song time low 00C9 Song speed high 00CA Song spedd low 00CB Global transpose 00CC SF channels playing 00CF Current track bit 00D0-00D1 SF pointer 00D2 SF transpose 00D3 SF ontime 00D4 SF timer 00D5 SF on-timer 00DA Sound queue write pointer 00DB Sound queue read pointer 00DC-00E3 Sound queue 00E4-00E7 LSFR 00E8-00E9 NMI return address 00EA-00EB Background CHR banks 00EC-00EF Sprite CHR banks 00F0 Screen disabled 00F2 Last MMC3 command 00F3 Last PRG bank 8000-9FFF 00F4 Last PRG bank A000-BFFF 00F5 New PRG bank 8000-9FFF 00F6 New PRG bank A000-BFFF 00F7 In PRG change 00F8 Postponed PRG change 00F9 Scroll X high 00FA Scroll Y 00FB Vertical screen offset 00FC Scroll X 00FD Current nametable 00FE Display settings 1 00FF Display settings 2 0100-011F Powerups taken in level 0150-016F Debug stack 0170-017F Main stack 0190-01AF Palette animation stack 01B0-01DF Game stack 01E0-01FF System stack 0200-02FF OAM table 0300-0317 Sprite type 0318-032F X position fraction 0330-0347 X position low 0348-035F X position high 0360-0377 Y position fraction 0378-038F Y position low 0390-03A7 Y position high 03A8-03BF X speed low 03C0-03D7 X speed high 03D8-03EF Y speed low 03F0-0407 Y speed high 0408-041F Sprite flags (7 => Hurts Mega Man, 6 => Shielded, 5 to 0 => Size) 0420-0437 Direction 0438-044F Sprite number 0450-0467 Life 0468-047F Variable A 0480-0497 Variable B 0498-04AF Variable C 04B0-04C7 Variable D 04C8-04DF Variable E 04E0-04F7 Variable F 04F8-050F Variable G 0510-0527 Variable H 0528-053F Display flags (6 => Flipped, 5 => Mirrored, 4 => In background, 3 => Don't destroy when off screen, 2 => Invisible) 0540-0557 Animation frame 0558-056F Animation 0570-0587 Animation timer 0588-059F Enemy handler low 05A0-05B7 Enemy handler high 05B8-05CF Flash counter 05D0 Background animation 05D1 Background frame 05D2 Background timer 05E0-05EF Current column 05F0-05F3 Palette animation 05F4-05F7 Palette frame 05F8-05FB Palette timer 0600-061F Palette 0620-063F Original palette 0640-067F Attribute table 0680-06BF Local destroyed blocks 06C0-06FF Destroyed blocks 0700-077F Channel variables 0780-07FF Drawing buffer
Editor, Skilled player (1939)
Joined: 6/15/2005
Posts: 3247
Thanks, HHS. Data added.