View Full Version : Research: Some Pokemon Gold Data

The dude
February 2nd, 2008, 7:07 PM

Some things i found



1. Pre-Game Hacking docs and data
2. Actual Gameplay Hacking Data


1. Pre-Game Hacking docs and data

a) (ASM) A Titlescreen from scratch
b) Intro Offsets
b) Titlescreen Offsets

a) Titlescreen ASM TUT:
Let's write a titlescreen for Pokemon Gold!

Find some free space and insert your AGIXP Picture.
You can have 255 Tiles on screen.
So open up paint and draw your titlescren then insert it anywhere you like.

Find some blank space in the rom and input this code!

Turn Screen off:
3E 63 ld a,63
E0 40 ld (FF00+40),a ;lcd ctrl

Get Pallete:
06 0C ld b,0c
CD 85 35 Call 3583

Load GFX:
21 xxxx ld hl,(2byte GFX pointer)
11 yyyy ld de,(Tile Space - either 0088 or 0090)
3E zz ld a,(gfx bank)

Load Tile Arrangement:
21 xxxx ld hl,(2byte to tile arrangement - must be in same bank as code)
11 A0C3 ld de,C3A0
0E FE ld c,FE

Play Music:
21 xxxx 2byte Music byte
CD 98 3D Call 3D98

Turn Screen on:
3E E3 ld a,E3
E0 40 ld (FF00+40),a ;lcd ctrl

Wait for Keypress:
CD 31 0A Call 0a31
C9 Ret

Now you need to point to it!
At 6250 type in the 2byte pointer to the code! or type in a pointer to this code:
21 xxxx 3e zz CF C9 x=2byte pointer to code zz=bank - This way you can have the titlescreen in another bank!

b) Intro Offsets:
6241 - Call intro
624e - Skip intro sequence
624f - Call titlescreen
6513 - Credits Arrange

New Game/Option Screen:

359 - Pointer to mAIN mENU (7b86)

5b0a - start of Options screen

00=Continue 01=New game 02=Option 03=Mystery Gift

0x5a98 Border Placing

0x5ad5 - (02) Number of Options : 2
0x5ad6 - (01) 1st Option - > New Game
0x5ad7 - (02) 2nd Option - > Option
0x5ad8 - (FF) End of menu

Continue/New Game/Option Screen:

0x5ad9 - (03) Number of Options : 3
0x5ada - (00) 1st Option - > Continue
0x5adb - (01) 2st Option - > New Game
0x5adc - (02) 3rd Option - > Option
0x5add - (FF) End of menu

Continue/New Game/Option Screen/Mystery Gift Screen:

0x5ade - (04) Number of Options : 4
0x5adf - (00) 1st Option - > Continue
0x5ae0 - (01) 2st Option - > New Game
0x5ae1 - (02) 3rd Option - > Option
0x5ae2 - (03) 3rd Option - > Mystery Gift
0x5ae3 - (FF) End of menu

The Introduction with Prof.Oak:
0x5fc2 - 1st Oak Picture byte (0c)
0x5fDe - Pokemon Picture (B7 Marill)
0x60167 - 2nd Oak Picture byte (0c)
0x6037 - Hiro Picture at name choosing screen (0A)
0x60c0 - Hiro Picture at end of intro (0A)
0x6061 - Marril's Cry (B7) 0x605f(033e00) for no cry

Name Screen:

0x60d3 - Pointer to Default Name
0x60dc - Border size and Position
0x60e2 No. Of Names
0x609a - Name written! probably to rAm here!

61f7 - Something to do woth the little ppl icon_!

b9d1 = Rival!!!!

name from 606c - 60d8

How many letters can a name have (Hiro)
0x11c42 - 07 - 7 letters

0x60a5 - Which Little Sprite to Show 01-Hiro 02-Rival 03-Mom - 04 Box 1

0x6049 - Call "What's your name" Text
0x6049 - Call The Name List, Change to 000000 to Disable names.

Game start:
0x15319 - Where the game starts [Map Bank][Map][X][Y]
0x5cea - How much money to start with : 3000 in hex = 0bb8 0x5cea = b8 0x5cef = 0b

c) Titlescreen Offsets
62bf - 00 = static title screen!
0x62cc - Pointer to Top of the Titlescreen GFX 2b*
0x62c1 - Pointer to Bottom of Titlescreen GFX 2b*
0x630c - Hoho X,Y (Inverted)
0x62d7 - Hoho Pointer to GFX 2b*
0x98616 - Titlescreen Arrangement
0x6381 - Top of Titlescreen Pallet map pointer 2b
0x6387 - Top of Titlescreen Pallet Colour - (01 - BGP01)
0x638c - Middle of Titlescreen (Gold Version text) Pallet map pointer 2b
0x6392 - Middle of Titlescreen (Gold Version text) Pallet Colour (03 - BGP03)
0x6397 - Bottom of Titlescreen Pallet map pointer 2b
0x639d - Bottom of Titlescreen Pallet Colour - (04 - BGP04)

2. Actual Gameplay Hacking Data
a)Big Tileset Hack:
b)Misc - Cant be bothered to organize it so here is loads of data...
c)Personal Information! - My notes!!! Might be of help!

a)Big Tileset Hack:
This gives you 127 tiles instead of 48!

Instructions... Just Copy the Hex to their adresses.

How to use bigger tilesets - Remember that the tileset header has two unused bytes? 0000?
Now they are the two byte pointer to the extra tiles! the extra tiles get loaded at 01:8800(VRAM1)
So you can use them by inputing 80-FF in the block data!
Palettes: After the regular tileset pallete declaration start to enter the rest of the tiles! from 60-FF.

00:2944 - Call $DrwVram1, Call 2953
02:4046 - Call $UseVRAM1
02:4091 - Call $UseVRAM1

$DrwVram1 ( I normally put this at 00:0080 )
ld a,01 ; Set VRAM1
ld (ff00+4f),a ;
ld hl,d0c3 ; Get tileset pointer
ld a,(hl) ; Load Pointer into HL
inc hl
ld h,(hl)
ld l,a
ld de,8000 ; Put Tiles at 8000
ld a,(d0c2); Get tileset Bank
call 0AF0 - Load GFX
ld a,(d0ce) ; Check for Extra Tileset!
cp 00 ; If its blank then
jr z,end ; return!
ld hl,d0cd - Get extra tileset pointer
ld a,(hl) ; Load Pointer into HL
inc hl
ld h,(hl)
ld l,a
ld de,9000 ; Put extra Tiles at 9000
ld a,(d0c2); Get tileset Bank
call 0AF0 - Load GFX
ld a,00 ;Set Vram to 0 again
ld (ff00+4f),a

$UseVRAM1 ( I normaly put this at 00:0070 )
add a,08 - Adds 8 to the pallete declaration so it loads the that tile at VRAM0 0-7 VRAM 1 8-F
ld (de),a - code from the the game, moved so the above instruction could be inserted!
dec c
inc de

HEX: at 0080

at 2944


at 0070

at 8046
at 8091

b) Misc

Master ball starts at 0x68a0 next item is +seven bytes (0x68a7) and thereafter.

1st byte: Price of item (2 bytes)
3rd byte: The Effect - eg PP,HP heal , Evolution etc.
4th byte: (How Much ?P Ether/Potion etc.)
5th byte: Type of menu 80:(Use,Sel) xInf 00:(Normal Menu) x01
6th byte: Which Pocket - 01=Item Pocket 02=Key Items 03=Ball Pocker 04=TM/HM
7th byte: (1st/2nd) - 1st-Use Outside? 2nd - Use in battle? eg. 1st=A 2nd=B (AB)

Music Header:[80][xx][01][yy][02][zz][03][47][4C] xx=2b to first Channel, yy,zz Pointers to 2nd 3rd and 4th channels.
Music Codes:
[DA][xx][yy] - Tempo xxyy, the lower the faster e.g. Moderate [01][00] Fast [00][50] Slow [01][50]
[E5][xx] - Volume? 77=Normal 44=Softer
[DB][xx] - Instrument?
[E6][00][01] - ???
[E1][xx][yy] - Set it Hight for an erie sound, normal setting would be [10][12]
[EF][xx] - Pan
[D8][08][a7] -???
[FD][xx]- Loop xx times... 00 = infinite loop.
[yz] y=note z=length - 1=C 3=D 5=E 6=F 8=G A=A C=B 2=C# 4=D# 6=F# 9=G# B=A#
[Dx] x=octave - 7=1 6=2 5=3 4=4 3=5 2=6 1=7 0=8

The Music Pointers are at 0xe906e

c) Personal Information!
These are my notes.. written for me..but u can have a look!

Diamond!(my gold hack):
ONLY DIAMOND!!! - Always blue code... 17bb0!

D400 - Saved Ram!!!

List boxes!!!

ld bc,0505
push bc
ld hl,Options here ! 4F and 57 tables!
call 1bb3
pop bc
ld a,b
"EA BA CE"ld (ceba),a
add a,07
ld cebc,a
add a,c
add a,04
call 1c62

ceca yes no


c=delay time
call 033c

Put the Pallete at c280
ld a,01 into ffe7
and call 038a

1!! 0f60ba
Quick pallete!
ld c,PALLETE (1b)
call 3583... load Pallet!

Call 03b1 - Fade Screen

04:6d07 - Items in start menu Calls

04:6994 - Start Menu Code

10:4000 - Pokedex Code
14:404F - Pokemon List
04:4430 - Pack
24:4B5E - Pokegear


Call 2c21 - Get Map Back!

Load your pallete into c280 and call 032e
use 311a code to load your pallete

Call 1c41 = yes no box
cee0 - 1=yes 2=no

ld hl,xxxx get
ld de,c280 put
ld bc,000a no. 0f bytes
call 311a
call 032e


Intro Stuff:

2e34: credit intro stuff?

5585 sets the Hiro Sprite

Call 5bf7 - ccd 5fall intro
Call 5fa5
Call 5d979 - Little man before map load

6241 - Call intro

41501 - Pokedex ... Invert Text Tiles!
414CD - Pokedex invert botton 2 tiles!
414e6 - Pokedex graphics pointer

142b4 - Hiro sprite pointer pointer
147de - 05:47de - Hiro Sprite Pointer!

3e348 - Placement of da little arrow
3e331 - Placement of Attacks
3e319 - FIGHt - Attacks Border
3e533 - Where Border for Atack PP goes
3e58f - Where "TYPE/" Goes
3e5bf - Where type goes
3e50d - Where PP p1 goes
3e598 - Where "/" Goes
3e5aa - Where PP p2 goes
3ee89 - Level up stats border

5ed7 - Something to do with Saving? Research Later

5ea9 - Continue Border placement

5ae4 - Call Viarable Borders Text

75e0 - Load Signposts!

21 xx xx 110088 3e yy cdf00a 3e38 210240 cfc9

x120190 - 1st Signpost!

75f8 = 3rd sp

1c2700 and 33c000 - Signpost GFX

hmm... Palette Code???

ld hl,c3a0
ld b,03 - height
ld c,0a - width
ld a,04 - pallete colour
jp 0f35
ld a,(d19e)
and 01

cd 31 0a wait for a or b!


(3bp)0F8678 - battle Border wh

(0f:78bb) 3f8bb - Put your Pokemon at c41a

1c41 - Yes/no box y/X

5b9c - ret no time set txt
5b6b - Dont ya be showin da date!

f80 - Defines text codes!

ld hl,ram adreess eg c490
ld bc, width+height!
Call 0eef = Make Border!!!

f60 - Where in map text is put!!!
call 0ecf ... fill with 7F

f45 - Where in map Border Goes!!
f48-f49 - Textbox Width and height!!!
1221 - try to fix code f7

No start Menu Descriptor: 00s from 12c75 to 12c7b and 12c7f to 12c92

470? 3byte pointer to ???


08:4021 - Change to ret for no time reset
21 a0 c3 ld hl,c3a0
3e 7e ld a,7e
08:4031 (083140) 20031 = Call ???? ... ChaNGE to ret for no reset time!
5e76 calls it 1st i think

5c00 Call Load Font for New Game Options etc...

09:4e87 (09874e) - Call Moves list in battle


7bb0 - Black BG Code

5a88 - Something to do with continue

13526 - 043675 04:7536 Go to Fill BG with 7f called by battle

5ae3 ... Put Text into Menu!

907b2 - tyime menu!!!!

5c17 - Point to options!

6246 - go straight to titlescreen!, Errors here...

5faa - nop = Skip Time! , Pointer To Time,(here one can write a new intro! Call the new ntro and then a ret command!

906ad - Initial Hour

time at 244146 - 0x90641

407e 4080

3d33 - no animations!

Title screen

62e4 --- Put Stars at ???? ld de,8f80 11 80 8f

632f - 00 or 22 = static TSCREEN!

6380 ld hl,9800 Where BGP1 Put at 9000 in MAP

6386 ld a,3 -- Load Palette 3 into A

638e ld hl,98c5 bgp 3 goes here
ld bc,010a ???
ld a,03 ... Palete 3

633a do titlesreen music!

Load GFX

ld hl,xx yy - pointer to GFX
ld de,8800 (8800) ram the pics start
ld a,zz --- zz = bank
call 0af0

in hex....

da0 - here is da font loader loader hah!

F8840 border 2bpp byte!

About You Box

around 2526b

6316 - 11 xx xx load something maybe start x,y!

Diploma ASM

d5e : Call Font Pointer

31:7CD9 (31D97C) [C7CD9] - Pokemon Nickname when given asm


ld (D004),a
ld a,01
ld (D11D),a
call 61DF

Code to Call Other Bank

3E bk LD A,bank
20 2byte LD HL,2byte

f:7949 - battle scroll

ram cb34 - Rival's Name!



ASM Scripts:

Make Pallete??
21 xx xx ld hl,c280
ld bc,0088 ???
ld a ff???
call 314c ?????

Print Tiles(Up to 9f!!!)
21 xx xx : ld hl,place in map ram eg c4b9
11 xx xx : ld de,text
cd 74 0f : call 0f74

Place Palette_
21 xx xx : ld hl,(map placement)
01 yy yy : ld bc,(height - Width)
3E zz : ld a,(palette)
CD A6 63 : Call 63A6

Text Box_
21 xx xx : load hl,(text pointer 2byte)
CD 5E 0F : Call 0F5E

Music Play_
11 xx xx : ld de,(2byte Music)
CD 98 3D : Call 3D98

Load Compressed Graphics_
21 xx xx : ld hl,(2-byte pointer to GFX)
01 yy yy : ld bc,(Tile Area)
3E zz : ld a,(GFX bank)
CD A6 63 : Call 0AF0

216699 010a01 3e03cd a6 63

Fill BG with tile_
21 A0 C3 : LD HL,C3A0
3E XX : LD A,TILE 51
21 68 01 : LD BC 0168???

ld hl,4349
ld a,23
rst 08

Apply Tile Arrangement_
21 xx xx : ld hl,(2-byte pointer to tile arrangement table)
01 yy yy : ld bc,(map placement)
3E zz : ld a,(tile table bank)
CD A6 63 : Call 3128

Jump To and Come Back_
3E xx : LD A,(bank)
21 yyyy : LD HL,Pointer to ASM
CF : RST 08
C9 : RET

Bank 3E: (Use Jump Code above)

Load Graphics_
11 xx xx : ld de,(2-byte pointer to GFX)
21 yy yy : ld hl,(Tile Area)
01 xx yy : ld bc,(GFX bank / number of tiles to load)
C3 72 0E : jp 0E72

Load Mochronome Graphics_
11 xx xx : ld de,(2-byte pointer to GFX)
21 yy yy : ld hl,(Tile Area)
01 xx yy : ld bc,(GFX bank / number of tiles to load)
C3 8D 0E : jp 0E8D

my working outs:

5ad5 db 02
ld bc,ff02

ld a,24
ld hl,4641
rst 08


636e call Palletes

ld hl,4616ld de,9880
ld a,26

5179D - change to FF to FF to make new pokemon

Rom Header:
0x143 - Gameboy Colour Features 00=None 80=GBC C0=GBC Only
0x146 - Super Gameboy Features 00=none 03=SGB

0x6513 - Credits Arrange

Intro Sequence:
0x624e - (00)=Skip intro sequence
0x937320 - Pointer to BG gFX

Title Screen:
stop ho-ho,use A & B buttons for TSCREEN
63f4 - 37 cd 31 0a c9

01:63f4 Call stars animation

February 3rd, 2008, 9:13 AM
yay first cooment :D

nice work on this. rlly helped me

February 4th, 2008, 7:01 AM
Wow nice work....
It must have took long to right and it is really useful, bound to help G/S/C hackers....
I wish someone found something like this for FR/LG lol.


The dude
February 5th, 2008, 10:28 AM
Lol thats only some of the data i found ... heheh
I have tons more somewhere

February 5th, 2008, 10:32 AM
Thanks for sharing the Info "The Dude!" Finding all the info isn't that hard (some of it is), but you jot it down so you have it for later. That's what I do. XD

Well, I am sure this will help people, so thanks.

February 5th, 2008, 1:29 PM
All I have to say is WHOA! I'll take the tine to learn to ASM hack in a couple of decades...

February 11th, 2008, 3:59 PM
Yes...you'll say in your face NIN!
When i didn't even do anything and don't remember anything at that moment.
Well at least i'll be 80 by that time.
I won't care about anything except myself.

March 28th, 2008, 3:59 PM
Thanks man, this is really useful.
I appreciate the time you put into it, there isn't much on G/S/C and it's quite frustrating for people trying to learn it.
Thank you.