summaryrefslogtreecommitdiff
path: root/engine
diff options
context:
space:
mode:
Diffstat (limited to 'engine')
-rw-r--r--engine/battle_start.asm28
-rwxr-xr-xengine/billspc.asm166
-rwxr-xr-xengine/breeding/egg.asm16
-rw-r--r--engine/buena_phone_scripts.asm154
-rwxr-xr-xengine/card_flip.asm4
-rw-r--r--engine/color.asm85
-rwxr-xr-xengine/compose_mail.asm498
-rw-r--r--engine/credits.asm4
-rwxr-xr-xengine/crystal_intro.asm2531
-rwxr-xr-xengine/debug.asm1517
-rwxr-xr-xengine/decorations.asm1438
-rw-r--r--engine/diploma.asm4
-rwxr-xr-xengine/dummy_game.asm4
-rw-r--r--engine/engine_flags.asm113
-rw-r--r--engine/events.asm133
-rw-r--r--engine/events_2.asm228
-rwxr-xr-xengine/evolution_animation.asm103
-rwxr-xr-xengine/evolve.asm682
-rw-r--r--engine/facings.asm40
-rwxr-xr-xengine/flypoints.asm916
-rwxr-xr-xengine/intro_menu.asm1427
-rwxr-xr-xengine/link.asm1832
-rwxr-xr-xengine/mail.asm589
-rwxr-xr-xengine/main_menu.asm1242
-rw-r--r--engine/map_objects.asm1140
-rw-r--r--engine/map_setup.asm12
-rwxr-xr-xengine/mart.asm22
-rwxr-xr-xengine/menu.asm6
-rwxr-xr-xengine/money.asm209
-rw-r--r--engine/more_phone_scripts.asm578
-rw-r--r--engine/movement.asm292
-rwxr-xr-xengine/mysterygift.asm1702
-rwxr-xr-xengine/namingscreen.asm24
-rwxr-xr-xengine/npctrade.asm635
-rwxr-xr-xengine/options_menu.asm565
-rwxr-xr-xengine/overworld.asm1488
-rw-r--r--engine/pack.asm367
-rw-r--r--engine/party_menu.asm122
-rw-r--r--engine/phone.asm4
-rw-r--r--engine/phone_scripts.asm802
-rwxr-xr-xengine/pokecenter_pc.asm705
-rw-r--r--engine/pokedex.asm12
-rwxr-xr-xengine/pokegear.asm2990
-rw-r--r--engine/predef.asm14
-rwxr-xr-xengine/printer.asm1493
-rw-r--r--engine/radio2.asm404
-rw-r--r--engine/save.asm165
-rw-r--r--engine/scripting.asm1001
-rwxr-xr-xengine/selectmenu.asm2
-rwxr-xr-xengine/slot_machine.asm24
-rw-r--r--engine/specials.asm72
-rwxr-xr-xengine/sprites.asm4524
-rwxr-xr-xengine/startmenu.asm218
-rwxr-xr-xengine/stats_screen.asm1150
-rwxr-xr-xengine/time_capsule/conversion.asm684
-rw-r--r--engine/timeofdaypals.asm10
-rwxr-xr-xengine/timeset.asm771
-rw-r--r--engine/title.asm60
-rwxr-xr-xengine/town_map.asm173
-rwxr-xr-xengine/trade/animation.asm1542
-rwxr-xr-xengine/trainer_card.asm619
-rwxr-xr-xengine/variables.asm150
-rwxr-xr-xengine/wildmons.asm1057
63 files changed, 32323 insertions, 7239 deletions
diff --git a/engine/battle_start.asm b/engine/battle_start.asm
index 0897b8a4a..845af9d2a 100644
--- a/engine/battle_start.asm
+++ b/engine/battle_start.asm
@@ -26,8 +26,8 @@ Predef_StartBattle: ; 8c20f
ld a, $5
ld [rSVBK], a
- ld hl, wMapPals
- ld bc, $0040
+ ld hl, UnknBGPals
+ ld bc, 8 palettes
xor a
call ByteFill
@@ -84,7 +84,7 @@ endr
Function8c2a0: ; 8c2a0
call LoadTrainerBattlePokeballTiles
- ld hl, VBGMap0
+ hlbgcoord 0, 0
call Function8c2cf
ret
; 8c2aa
@@ -308,9 +308,11 @@ StartTrainerBattle_Flash: ; 8c3ab (23:43ab)
StartTrainerBattle_SetUpForWavyOutro: ; 8c3e8 (23:43e8)
callba Function5602
- ld a, $5
+ ld a, $5 ; BANK(LYOverrides)
ld [rSVBK], a
+
call StartTrainerBattle_NextScene
+
ld a, $43
ld [hLCDStatCustom], a
xor a
@@ -342,8 +344,8 @@ StartTrainerBattle_SineWave: ; 8c408 (23:4408)
ld d, [hl]
add [hl]
ld [hl], a
- ld a, $90
- ld bc, wd100
+ ld a, LYOverridesEnd - LYOverrides
+ ld bc, LYOverrides
ld e, $0
.loop
@@ -364,7 +366,7 @@ StartTrainerBattle_SineWave: ; 8c408 (23:4408)
StartTrainerBattle_SetUpForSpinOutro: ; 8c43d (23:443d)
callba Function5602
- ld a, $5
+ ld a, $5 ; BANK(LYOverrides)
ld [rSVBK], a
call StartTrainerBattle_NextScene
xor a
@@ -507,7 +509,7 @@ endr
StartTrainerBattle_SetUpForRandomScatterOutro: ; 8c578 (23:4578)
callba Function5602
- ld a, $5
+ ld a, $5 ; BANK(LYOverrides)
ld [rSVBK], a
call StartTrainerBattle_NextScene
ld a, $10
@@ -659,7 +661,7 @@ StartTrainerBattle_LoadPokeBallGraphics: ; 8c5dc (23:45dc)
ld [rSVBK], a
call .copypals
push hl
- ld de, wMapPals + 8 * 7
+ ld de, UnknBGPals + 8 * 7
ld bc, $8
call CopyBytes
pop hl
@@ -678,15 +680,15 @@ StartTrainerBattle_LoadPokeBallGraphics: ; 8c5dc (23:45dc)
ret
.copypals: ; 8c677 (23:4677)
- ld de, wMapPals + 8 * 7
+ ld de, UnknBGPals + 8 * 7
call .copy
ld de, BGPals + 8 * 7
call .copy
- ld de, Unkn2Pals + 8 * 6
+ ld de, UnknOBPals + 8 * 6
call .copy
ld de, OBPals + 8 * 6
call .copy
- ld de, Unkn2Pals + 8 * 7
+ ld de, UnknOBPals + 8 * 7
call .copy
ld de, OBPals + 8 * 7
@@ -739,10 +741,12 @@ WipeLYOverrides: ; 8c6d8
push af
ld a, $5
ld [rSVBK], a
+
ld hl, LYOverrides
call .wipe
ld hl, LYOverridesBackup
call .wipe
+
pop af
ld [rSVBK], a
ret
diff --git a/engine/billspc.asm b/engine/billspc.asm
index 03a7592ca..a4dd02876 100755
--- a/engine/billspc.asm
+++ b/engine/billspc.asm
@@ -1165,30 +1165,30 @@ endr
cp $f
jr z, .asm_e2bf5
ld b, a
- call Functione3396
+ call GetBoxPointer
ld a, b
call GetSRAMBank
push hl
- ld bc, $35
+ ld bc, sBoxMon1Level - sBox
add hl, bc
- ld bc, $20
+ ld bc, BOXMON_STRUCT_LENGTH
ld a, e
call AddNTimes
ld a, [hl]
ld [TempMonLevel], a
pop hl
push hl
- ld bc, $17
+ ld bc, sBoxMon1Item - sBox
add hl, bc
- ld bc, $20
+ ld bc, BOXMON_STRUCT_LENGTH
ld a, e
call AddNTimes
ld a, [hl]
ld [TempMonItem], a
pop hl
- ld bc, $2b
+ ld bc, sBoxMon1DVs - sBox
add hl, bc
- ld bc, $20
+ ld bc, BOXMON_STRUCT_LENGTH
ld a, e
call AddNTimes
ld de, TempMonDVs
@@ -1201,19 +1201,19 @@ endr
ret
.asm_e2bc6
ld hl, PartyMon1Level
- ld bc, $30
+ ld bc, PARTYMON_STRUCT_LENGTH
ld a, e
call AddNTimes
ld a, [hl]
ld [TempMonLevel], a
ld hl, PartyMon1Item
- ld bc, $30
+ ld bc, PARTYMON_STRUCT_LENGTH
ld a, e
call AddNTimes
ld a, [hl]
ld [TempMonItem], a
ld hl, PartyMon1DVs
- ld bc, $30
+ ld bc, PARTYMON_STRUCT_LENGTH
ld a, e
call AddNTimes
ld de, TempMonDVs
@@ -1228,21 +1228,21 @@ endr
ld a, BANK(sBox)
call GetSRAMBank
ld hl, sBoxMon1Level
- ld bc, $20
+ ld bc, BOXMON_STRUCT_LENGTH
ld a, e
call AddNTimes
ld a, [hl]
ld [TempMonLevel], a
ld hl, sBoxMon1Item
- ld bc, $20
+ ld bc, BOXMON_STRUCT_LENGTH
ld a, e
call AddNTimes
ld a, [hl]
ld [TempMonItem], a
ld hl, sBoxMon1DVs
- ld bc, $20
+ ld bc, BOXMON_STRUCT_LENGTH
ld a, e
call AddNTimes
ld de, TempMonDVs
@@ -1307,6 +1307,7 @@ Functione2c6e: ; e2c6e (38:6c6e)
ld de, String_e2c67
call PlaceString
ret
+
.asm_e2c7c
inc de
ld a, [de]
@@ -1320,36 +1321,38 @@ Functione2c6e: ; e2c6e (38:6c6e)
cp $f
jr z, .asm_e2cf1
push hl
- call Functione3396
+ call GetBoxPointer
ld a, b
call GetSRAMBank
push hl
- ld bc, $16
+ ld bc, sBoxMons - sBox
add hl, bc
- ld bc, $20
+ ld bc, BOXMON_STRUCT_LENGTH
ld a, e
call AddNTimes
ld a, [hl]
pop hl
and a
jr z, .asm_e2cc2
- ld bc, $372
+ ld bc, sBoxMonNicknames - sBox
add hl, bc
- ld bc, $b
+ ld bc, PKMN_NAME_LENGTH
ld a, e
call AddNTimes
ld de, StringBuffer1
- ld bc, $b
+ ld bc, PKMN_NAME_LENGTH
call CopyBytes
call CloseSRAM
pop hl
ld de, StringBuffer1
call PlaceString
ret
+
.asm_e2cc2
call CloseSRAM
pop hl
jr .asm_e2d23
+
.asm_e2cc8
push hl
ld hl, PartySpecies
@@ -1359,19 +1362,21 @@ Functione2c6e: ; e2c6e (38:6c6e)
and a
jr z, .asm_e2cee
ld hl, PartyMonNicknames
- ld bc, $b
+ ld bc, PKMN_NAME_LENGTH
ld a, e
call AddNTimes
ld de, StringBuffer1
- ld bc, $b
+ ld bc, PKMN_NAME_LENGTH
call CopyBytes
pop hl
ld de, StringBuffer1
call PlaceString
ret
+
.asm_e2cee
pop hl
jr .asm_e2d23
+
.asm_e2cf1
push hl
ld a, BANK(sBox)
@@ -1394,6 +1399,7 @@ Functione2c6e: ; e2c6e (38:6c6e)
ld de, StringBuffer1
call PlaceString
ret
+
.asm_e2d1f
call CloseSRAM
pop hl
@@ -1422,7 +1428,7 @@ Functione2d30: ; e2d30 (38:6d30)
cp $f
jr z, .asm_e2db7
ld b, a
- call Functione3396
+ call GetBoxPointer
ld a, b
call GetSRAMBank
inc hl
@@ -1447,6 +1453,7 @@ Functione2d30: ; e2d30 (38:6d30)
inc a
ld [wd004], a
jr .asm_e2d57
+
.asm_e2d79
call CloseSRAM
ld a, $ff
@@ -1455,6 +1462,7 @@ Functione2d30: ; e2d30 (38:6d30)
inc a
ld [wcb2c], a
ret
+
.asm_e2d87
ld hl, PartySpecies
.asm_e2d8a
@@ -1478,6 +1486,7 @@ Functione2d30: ; e2d30 (38:6d30)
inc a
ld [wd004], a
jr .asm_e2d8a
+
.asm_e2dac
ld a, $ff
ld [de], a
@@ -1485,6 +1494,7 @@ Functione2d30: ; e2d30 (38:6d30)
inc a
ld [wcb2c], a
ret
+
.asm_e2db7
ld a, BANK(sBox)
call GetSRAMBank
@@ -1510,6 +1520,7 @@ Functione2d30: ; e2d30 (38:6d30)
inc a
ld [wd004], a
jr .asm_e2dbf
+
.asm_e2de1
call CloseSRAM
ld a, $ff
@@ -1538,10 +1549,11 @@ Functione2e01: ; e2e01 (38:6e01)
jr nz, .asm_e2e0b
call ClearSprites
ret
+
.asm_e2e0b
ld hl, Unknown_e2e2b
ld de, Sprites
-.done1
+.loop
ld a, [hl]
cp $ff
ret z
@@ -1561,7 +1573,7 @@ Functione2e01: ; e2e01 (38:6e01)
ld a, [hli]
ld [de], a
inc de
- jr .done1
+ jr .loop
; e2e2b (38:6e2b)
Unknown_e2e2b: ; e2e2b
@@ -1795,11 +1807,11 @@ Functione2fd6: ; e2fd6 (38:6fd6)
ld a, BANK(sBox)
call GetSRAMBank
ld hl, sBoxSpecies
- call Functione3357
+ call CopySpeciesToTemp
ld hl, sBoxMonNicknames
- call Functione3363
+ call CopyNicknameToTemp
ld hl, sBoxMonOT
- call Functione3376
+ call CopyOTNameToTemp
ld hl, sBoxMons
ld bc, BOXMON_STRUCT_LENGTH
ld a, [CurPartyMon]
@@ -1813,11 +1825,11 @@ Functione2fd6: ; e2fd6 (38:6fd6)
.asm_e3020
ld hl, PartySpecies
- call Functione3357
+ call CopySpeciesToTemp
ld hl, PartyMonNicknames
- call Functione3363
+ call CopyNicknameToTemp
ld hl, PartyMonOT
- call Functione3376
+ call CopyOTNameToTemp
ld hl, PartyMons ; wdcdf (aliases: PartyMon1, PartyMon1Species)
ld bc, PARTYMON_STRUCT_LENGTH
ld a, [CurPartyMon]
@@ -1829,27 +1841,27 @@ Functione2fd6: ; e2fd6 (38:6fd6)
.asm_e3048
ld b, a
- call Functione3396
+ call GetBoxPointer
ld a, b
call GetSRAMBank
push hl
inc hl
- call Functione3357
+ call CopySpeciesToTemp
pop hl
push hl
- ld bc, $372
+ ld bc, sBoxMonNicknames - sBox
add hl, bc
- call Functione3363
+ call CopyNicknameToTemp
pop hl
push hl
- ld bc, $296
+ ld bc, sBoxMonOT - sBox
add hl, bc
- call Functione3376
+ call CopyOTNameToTemp
pop hl
- ld bc, $16
+ ld bc, sBoxMons - sBox
add hl, bc
- ld bc, $20
- call Functione3389
+ ld bc, BOXMON_STRUCT_LENGTH
+ call CopyMonToTemp
call CloseSRAM
callba Function5088b
ret
@@ -2141,7 +2153,7 @@ Functione32b0: ; e32b0
ld a, [wcb31]
dec a
ld e, a
- callba Function14ac2
+ callba MovePkmnWOMail_SaveGame
ld a, [wcb30]
ld hl, wcb2f
add [hl]
@@ -2149,14 +2161,14 @@ Functione32b0: ; e32b0
ld a, $1
call GetSRAMBank
ld hl, sBoxSpecies
- call Functione3357
+ call CopySpeciesToTemp
ld hl, sBoxMonNicknames
- call Functione3363
+ call CopyNicknameToTemp
ld hl, sBoxMonOT
- call Functione3376
+ call CopyOTNameToTemp
ld hl, sBoxMons
ld bc, BOXMON_STRUCT_LENGTH
- call Functione3389
+ call CopyMonToTemp
call CloseSRAM
callba Function5088b
ld a, PC_DEPOSIT
@@ -2169,7 +2181,7 @@ Functione32fa: ; e32fa
ld a, [wcb2e]
dec a
ld e, a
- callba Function14ac2
+ callba MovePkmnWOMail_SaveGame
ld a, [wcb2b]
ld hl, wcb2a
add [hl]
@@ -2184,14 +2196,14 @@ Functione3316: ; e3316
add [hl]
ld [CurPartyMon], a
ld hl, PartySpecies
- call Functione3357
+ call CopySpeciesToTemp
ld hl, PartyMonNicknames
- call Functione3363
+ call CopyNicknameToTemp
ld hl, PartyMonOT
- call Functione3376
+ call CopyOTNameToTemp
ld hl, PartyMon1Species
ld bc, PARTYMON_STRUCT_LENGTH
- call Functione3389
+ call CopyMonToTemp
xor a
ld [wPokemonWithdrawDepositParameter], a
callba Functione039
@@ -2207,7 +2219,7 @@ Functione3346: ; e3346
ret
; e3357
-Functione3357: ; e3357 (38:7357)
+CopySpeciesToTemp: ; e3357 (38:7357)
ld a, [CurPartyMon]
ld c, a
ld b, $0
@@ -2216,36 +2228,36 @@ Functione3357: ; e3357 (38:7357)
ld [CurPartySpecies], a
ret
-Functione3363: ; e3363 (38:7363)
- ld bc, $b
+CopyNicknameToTemp: ; e3363 (38:7363)
+ ld bc, PKMN_NAME_LENGTH
ld a, [CurPartyMon]
call AddNTimes
ld de, wd002
- ld bc, $b
+ ld bc, PKMN_NAME_LENGTH
call CopyBytes
ret
-Functione3376: ; e3376 (38:7376)
- ld bc, $b
+CopyOTNameToTemp: ; e3376 (38:7376)
+ ld bc, NAME_LENGTH
ld a, [CurPartyMon]
call AddNTimes
ld de, wd00d
- ld bc, $b
+ ld bc, NAME_LENGTH
call CopyBytes
ret
-Functione3389: ; e3389 (38:7389)
+CopyMonToTemp: ; e3389 (38:7389)
ld a, [CurPartyMon]
call AddNTimes
- ld de, wd018
+ ld de, wd018_Mon
call CopyBytes
ret
-Functione3396: ; e3396 (38:7396)
+GetBoxPointer: ; e3396 (38:7396)
dec b
ld c, b
ld b, 0
- ld hl, Unknown_e33a6
+ ld hl, .boxes
rept 3
add hl, bc
endr
@@ -2257,7 +2269,7 @@ endr
ret
; e33a6 (38:73a6)
-Unknown_e33a6: ; e33a6
+.boxes: ; e33a6
; bank, address
dba sBox1
dba sBox2
@@ -2350,7 +2362,7 @@ _ChangeBox: ; e35aa (38:75aa)
ld hl, _ChangeBox_menudataheader
call CopyMenuDataHeader
xor a
- ld [wd0e4], a
+ ld [wMenuScrollPosition], a
hlcoord 0, 4
lb bc, 8, 9
call TextBox
@@ -2535,52 +2547,52 @@ String_e36f1: ; e36f1
; e36f9
Functione36f9: ; e36f9 (38:76f9)
- ld hl, MenuDataHeader_0xe377b
+ ld hl, .MenuDataHeader
call LoadMenuDataHeader
call InterpretMenu2
call ExitMenu
ret c
ld a, [MenuSelection2]
cp $1
- jr z, .asm_e3734
+ jr z, .Switch
cp $2
- jr z, .asm_e3745
+ jr z, .Name
cp $3
- jr z, .asm_e3717
+ jr z, .Print
and a
ret
-.asm_e3717
+.Print
call GetBoxCount
and a
- jr z, .asm_e372f
+ jr z, .EmptyBox
ld e, l
ld d, h
ld a, [MenuSelection]
dec a
ld c, a
- callba Function844bc
+ callba PrintPCBox
call Functione35e2
and a
ret
-.asm_e372f
+.EmptyBox
call Functione37be
and a
ret
-.asm_e3734
+.Switch
ld a, [MenuSelection]
dec a
ld e, a
ld a, [wCurBox]
cp e
ret z
- callba Function14a83
+ callba ChangeBoxSaveGame
ret
-.asm_e3745
- ld b, $4
+.Name
+ ld b, $4 ; box
ld de, wd002
callba NamingScreen
call ClearTileMap
@@ -2604,15 +2616,15 @@ Functione36f9: ; e36f9 (38:76f9)
hlcoord 11, 7 ; XXX
-MenuDataHeader_0xe377b: ; 0xe377b
+.MenuDataHeader: ; 0xe377b
db $40 ; flags
db 04, 11 ; start coords
db 13, 19 ; end coords
- dw MenuData2_0xe3783
+ dw .MenuData2
db 1 ; default option
; 0xe3783
-MenuData2_0xe3783: ; 0xe3783
+.MenuData2: ; 0xe3783
db $80 ; flags
db 4 ; items
db "SWITCH@"
diff --git a/engine/breeding/egg.asm b/engine/breeding/egg.asm
index 7c4d8ba62..ebf5e48d8 100755
--- a/engine/breeding/egg.asm
+++ b/engine/breeding/egg.asm
@@ -192,7 +192,7 @@ OverworldHatchEgg:: ; 16f5e
call ResetWindow
call LoadStandardMenuDataHeader
call Function16f70
- call Function2b4d
+ call ExitAllMenus
call RestartMapMusic
jp LoadMoveSprites
; 16f70
@@ -219,7 +219,7 @@ Function16f7a: ; 16f7a (5:6f7a)
push de
- callba Function4dbb8
+ callba SetEggMonCaughtData
callba MobileFn_10608d
ld a, [CurPartyMon]
ld hl, PartyMons ; wdcdf (aliases: PartyMon1, PartyMon1Species)
@@ -650,7 +650,7 @@ Function1723c: ; 1723c (5:723c)
ld hl, BattleMonDVs
predef GetUnownLetter
pop de
- predef_jump Function5108b
+ predef_jump FrontpicPredef
Function17254: ; 17254 (5:7254)
push af
@@ -775,7 +775,7 @@ Function1728f: ; 1728f (5:728f)
Function17363: ; 17363 (5:7363)
ld [PlayerHPPal], a
- ld b, $b
+ ld b, SCGB_0B
ld c, $0
jp GetSGBLayout
@@ -792,8 +792,8 @@ Function1736d: ; 1736d (5:736d)
add $4c
ld d, a
ld e, $58
- ld a, $19
- call Function3b2a
+ ld a, SPRITE_ANIM_INDEX_19
+ call _InitSpriteAnimStruct
ld hl, $3
add hl, bc
ld [hl], $0
@@ -821,8 +821,8 @@ Function173b3: ; 173b3 (5:73b3)
ld b, a
push hl
push bc
- ld a, $1c
- call Function3b2a
+ ld a, SPRITE_ANIM_INDEX_1C
+ call _InitSpriteAnimStruct
ld hl, $3
add hl, bc
ld [hl], $0
diff --git a/engine/buena_phone_scripts.asm b/engine/buena_phone_scripts.asm
index 3c0717503..98a7b72a3 100644
--- a/engine/buena_phone_scripts.asm
+++ b/engine/buena_phone_scripts.asm
@@ -1,168 +1,170 @@
BuenaPhoneScript1:
checkflag ENGINE_ROCKETS_IN_RADIO_TOWER
- iftrue UnknownScript_0xa0b73
+ iftrue BuenaPhoneScript_Rocket
checkcode VAR_HOUR
- if_greater_than 17, UnknownScript_0xa0b4b
- scall UnknownScript_0xa0b32
- jump UnknownScript_0xa0c0e
+ if_greater_than 17, BuenaPhoneScript_AfterMidnight1
+ scall BuenaPhoneScript_CheckTimeOfDay1
+ jump BuenaPhoneScript_Random1
BuenaPhoneScript2:
checkflag ENGINE_ROCKETS_IN_RADIO_TOWER
- iftrue UnknownScript_0xa0b73
- scall UnknownScript_0xa0b4f
- jump UnknownScript_0xa0b77
+ iftrue BuenaPhoneScript_Rocket
+ scall BuenaPhoneScript_CheckTimeOfDay2
+ jump BuenaPhoneScript_Random2
-UnknownScript_0xa0b32:
+BuenaPhoneScript_CheckTimeOfDay1:
checkmorn
- iftrue UnknownScript_0xa0b41
+ iftrue .morn
checkday
- iftrue UnknownScript_0xa0b46
+ iftrue .day
writetext UnknownText_0xa0d42
keeptextopen
end
-UnknownScript_0xa0b41:
+.morn:
writetext UnknownText_0xa0c28
keeptextopen
end
-UnknownScript_0xa0b46:
+.day:
writetext UnknownText_0xa0c72
keeptextopen
end
-UnknownScript_0xa0b4b:
+BuenaPhoneScript_AfterMidnight1:
writetext UnknownText_0xa0caf
end
-UnknownScript_0xa0b4f:
+BuenaPhoneScript_CheckTimeOfDay2:
checkcode VAR_HOUR
- if_greater_than 17, UnknownScript_0xa0b6e
+ if_greater_than 17, BuenaPhoneScript_AfterMidnight2
checkmorn
- iftrue UnknownScript_0xa0b64
+ iftrue .morn
checkday
- iftrue UnknownScript_0xa0b69
+ iftrue .day
writetext UnknownText_0xa0e29
keeptextopen
end
-UnknownScript_0xa0b64:
+.morn:
writetext UnknownText_0xa0d96
keeptextopen
end
-UnknownScript_0xa0b69:
+.day:
writetext UnknownText_0xa0dcf
keeptextopen
end
-UnknownScript_0xa0b6e:
+BuenaPhoneScript_AfterMidnight2:
writetext UnknownText_0xa0e01
keeptextopen
end
-UnknownScript_0xa0b73:
+BuenaPhoneScript_Rocket:
writetext UnknownText_0xa0e5e
end
-UnknownScript_0xa0b77:
+BuenaPhoneScript_Random2:
checkevent EVENT_BEAT_ELITE_FOUR
- iftrue UnknownScript_0xa0b82
+ iftrue .PostE4
random 11
- jump UnknownScript_0xa0b84
+ jump .Jumptable
-UnknownScript_0xa0b82:
+.PostE4:
random 14
-UnknownScript_0xa0b84:
- if_equal 0, UnknownScript_0xa0bbc
- if_equal 1, UnknownScript_0xa0bc2
- if_equal 2, UnknownScript_0xa0bc8
- if_equal 3, UnknownScript_0xa0bce
- if_equal 4, UnknownScript_0xa0bd4
- if_equal 5, UnknownScript_0xa0bda
- if_equal 6, UnknownScript_0xa0be0
- if_equal 7, UnknownScript_0xa0be6
- if_equal 8, UnknownScript_0xa0bec
- if_equal 9, UnknownScript_0xa0bf2
- if_equal 10, UnknownScript_0xa0bf8
- if_equal 11, UnknownScript_0xa0bfe
- if_equal 12, UnknownScript_0xa0c04
- if_equal 13, UnknownScript_0xa0c0a
-
-UnknownScript_0xa0bbc:
+.Jumptable:
+ if_equal 0, .zero
+ if_equal 1, .one
+ if_equal 2, .two
+ if_equal 3, .three
+ if_equal 4, .four
+ if_equal 5, .five
+ if_equal 6, .six
+ if_equal 7, .seven
+ if_equal 8, .eight
+ if_equal 9, .nine
+ if_equal 10, .ten
+ if_equal 11, .eleven
+ if_equal 12, .twelve
+ if_equal 13, .thirteen
+
+.zero:
writetext UnknownText_0xa0efb
- jump UnknownScript_0xa0c0d
+ jump .finish
-UnknownScript_0xa0bc2:
+.one:
writetext UnknownText_0xa0fcf
- jump UnknownScript_0xa0c0d
+ jump .finish
-UnknownScript_0xa0bc8:
+.two:
writetext UnknownText_0xa109d
- jump UnknownScript_0xa0c0d
+ jump .finish
-UnknownScript_0xa0bce:
+.three:
writetext UnknownText_0xa1143
- jump UnknownScript_0xa0c0d
+ jump .finish
-UnknownScript_0xa0bd4:
+.four:
writetext UnknownText_0xa1244
- jump UnknownScript_0xa0c0d
+ jump .finish
-UnknownScript_0xa0bda:
+.five:
writetext UnknownText_0xa1318
- jump UnknownScript_0xa0c0d
+ jump .finish
-UnknownScript_0xa0be0:
+.six:
writetext UnknownText_0xa13d8
- jump UnknownScript_0xa0c0d
+ jump .finish
-UnknownScript_0xa0be6:
+.seven:
writetext UnknownText_0xa1488
- jump UnknownScript_0xa0c0d
+ jump .finish
-UnknownScript_0xa0bec:
+.eight:
writetext UnknownText_0xa15de
- jump UnknownScript_0xa0c0d
+ jump .finish
-UnknownScript_0xa0bf2:
+.nine:
writetext UnknownText_0xa1717
- jump UnknownScript_0xa0c0d
+ jump .finish
-UnknownScript_0xa0bf8:
+.ten:
writetext UnknownText_0xa183d
- jump UnknownScript_0xa0c0d
+ jump .finish
-UnknownScript_0xa0bfe:
+.eleven:
writetext UnknownText_0xa19b1
- jump UnknownScript_0xa0c0d
+ jump .finish
-UnknownScript_0xa0c04:
+.twelve:
writetext UnknownText_0xa1ac0
- jump UnknownScript_0xa0c0d
+ jump .finish
-UnknownScript_0xa0c0a:
+.thirteen:
writetext UnknownText_0xa1bed
-UnknownScript_0xa0c0d:
+.finish:
end
-UnknownScript_0xa0c0e:
+BuenaPhoneScript_Random1:
random 3
- if_equal 0, UnknownScript_0xa0c1c
- if_equal 1, UnknownScript_0xa0c20
- if_equal 2, UnknownScript_0xa0c24
+ if_equal 0, .zero
+ if_equal 1, .one
+ if_equal 2, .two
-UnknownScript_0xa0c1c:
+.zero:
writetext UnknownText_0xa1c88
end
-UnknownScript_0xa0c20:
+.one:
writetext UnknownText_0xa1d5f
end
-UnknownScript_0xa0c24:
+.two:
writetext UnknownText_0xa1e2f
end
; a0c28
+
+INCLUDE "text/phone/buena.asm"
diff --git a/engine/card_flip.asm b/engine/card_flip.asm
index 8ee1e5cd9..df9d895d1 100755
--- a/engine/card_flip.asm
+++ b/engine/card_flip.asm
@@ -1621,7 +1621,7 @@ Functione0c37: ; e0c37 (38:4c37)
ld a, $5
ld [rSVBK], a
ld hl, Palette_e0c93
- ld de, wMapPals
+ ld de, UnknBGPals
ld bc, $48
call CopyBytes
pop af
@@ -1751,7 +1751,7 @@ Functione1190: ; e1190
ld a, $93
ld [rLCDC], a
call WaitBGMap
- ld b, $18
+ ld b, SCGB_18
call GetSGBLayout
ld a, $e4
call DmgToCgbBGPals
diff --git a/engine/color.asm b/engine/color.asm
index 8530c2181..7e7520816 100644
--- a/engine/color.asm
+++ b/engine/color.asm
@@ -1,4 +1,4 @@
-
+PALPACKET_LENGTH EQU $10
INCLUDE "predef/sgb.asm"
SHINY_ATK_BIT EQU 5
@@ -89,7 +89,7 @@ Function8aa4: ; 8aa4
push bc
ld hl, PalPacket_9ce6
ld de, wcda9
- ld bc, PalPacket_9cf6 - PalPacket_9ce6
+ ld bc, PALPACKET_LENGTH
call CopyBytes
pop bc
pop de
@@ -117,7 +117,7 @@ Function8ad1: ; 8ad1
ret
; 8ade
-Function8ade: ; 8ade
+Function8ade: ; 8ade SGB layout $fc
ld hl, wcd9b
ld a, [wcda9]
ld e, a
@@ -149,7 +149,7 @@ Function8b07: ; 8b07
call CheckCGB
ret z
ld hl, Palette8b2f
- ld de, wMapPals
+ ld de, UnknBGPals
ld bc, $0008
ld a, $5
call FarCopyWRAM
@@ -200,7 +200,7 @@ Function8b4d: ; 8b4d
jp Function9809
.asm_8b5c
- ld de, Unkn2Pals
+ ld de, UnknOBPals
ld a, $3b
call GetAthPalletFromPalettes9df6
jp LoadHLPaletteIntoDE
@@ -216,7 +216,7 @@ Function8b67: ; 8b67
jp Function9809
.asm_8b76
- ld de, Unkn2Pals
+ ld de, UnknOBPals
ld a, $3c
call GetAthPalletFromPalettes9df6
jp LoadHLPaletteIntoDE
@@ -232,7 +232,7 @@ Function8b81: ; 8b81
push af
ld hl, PalPacket_9ce6
ld de, wcda9
- ld bc, $0010
+ ld bc, PALPACKET_LENGTH
call CopyBytes
pop af
call Function9775
@@ -248,7 +248,7 @@ Function8b81: ; 8b81
jp Function9809
.asm_8bb2
- ld de, Unkn2Pals
+ ld de, UnknOBPals
ld a, c
call Function9775
call Function9643
@@ -275,7 +275,7 @@ endr
asm_8bd7
push hl
- ld hl, wMapPals
+ ld hl, UnknBGPals
ld de, $0008
.asm_8bde
and a
@@ -318,8 +318,8 @@ Function8bec: ; 8bec
lb bc, 6, 4
ld a, [EnemySafeguardCount]
and $3
- call Function9663
- call LoadDETile
+ call FillBoxCGB
+ call LoadEDTile
ret
; 8c1d
@@ -338,7 +338,7 @@ Function8c1d: ; 8c1d
call Function976b
.asm_8c33
- ld de, wMapPals
+ ld de, UnknBGPals
call Function9643
call Function9699
call Function96b3
@@ -394,7 +394,7 @@ endr
.asm_8c82
lb bc, 2, 8
ld a, e
- call Function9663
+ call FillBoxCGB
ret
; 8c8a
@@ -412,11 +412,11 @@ endr
ld a, $5
ld [rSVBK], a
ld a, [hli]
- ld [wMapPals], a
- ld [wMapPals + 8 * 2], a
+ ld [UnknBGPals], a
+ ld [UnknBGPals + 8 * 2], a
ld a, [hl]
- ld [wMapPals + 1], a
- ld [wMapPals + 8 * 2 + 1], a
+ ld [UnknBGPals + 1], a
+ ld [UnknBGPals + 8 * 2 + 1], a
pop af
ld [rSVBK], a
call Function96a4
@@ -437,7 +437,7 @@ endr
push hl
ld hl, PalPacket_9ce6
ld de, wcda9
- ld bc, $0010
+ ld bc, PALPACKET_LENGTH
call CopyBytes
pop hl
rept 2
@@ -458,7 +458,7 @@ endr
ret
.asm_8cf0
- ld de, wMapPals
+ ld de, UnknBGPals
ld bc, $0008
ld a, $5
call FarCopyWRAM
@@ -525,7 +525,7 @@ INCLUDE "predef/cgb.asm"
Function95f0: ; 95f0
ld hl, Palette_9608
- ld de, wMapPals
+ ld de, UnknBGPals
ld bc, 8
ld a, $5
call FarCopyWRAM
@@ -544,7 +544,7 @@ Palette_9608: ; 9608
CopyFourPalettes: ; 9610
- ld de, wMapPals
+ ld de, UnknBGPals
ld c, $4
CopyPalettes: ; 9615
@@ -618,7 +618,7 @@ Function9643: ; 9643
ret
; 9663
-Function9663: ; 9663
+FillBoxCGB: ; 9663
.row
push bc
push hl
@@ -644,9 +644,9 @@ Function9673: ; 9673
push af
ld a, $5
ld [rSVBK], a
- ld hl, wMapPals
- ld c, $8
-.asm_9683
+ ld hl, UnknBGPals
+ ld c, 8
+.loop
ld a, $ff
rept 4
ld [hli], a
@@ -656,7 +656,7 @@ rept 4
ld [hli], a
endr
dec c
- jr nz, .asm_9683
+ jr nz, .loop
pop af
ld [rSVBK], a
pop hl
@@ -676,7 +676,7 @@ Function9699: ; 9699
; 96a4
Function96a4: ; 96a4
- ld hl, wMapPals
+ ld hl, UnknBGPals
ld de, BGPals
ld bc, $0080
ld a, $5
@@ -702,7 +702,7 @@ Function96b3: ; 96b3
.asm_96d0
hlcoord 0, 0, AttrMap
- ld de, VBGMap0
+ debgcoord 0, 0
ld b, $12
ld a, $1
ld [rVBK], a
@@ -728,7 +728,7 @@ Function96b3: ; 96b3
ret
; 96f3
-Function96f3: ; 96f3
+Function96f3: ; 96f3 CGB layout $fc
ld hl, wcd9b
ld a, [wcda9]
ld e, a
@@ -752,14 +752,14 @@ Function96f3: ; 96f3
.asm_9712
lb bc, 2, 8
ld a, e
- call Function9663
+ call FillBoxCGB
ret
; 971a
Function971a: ; 971a
ld hl, Palettes_b681
- ld de, Unkn2Pals
+ ld de, UnknOBPals
ld bc, $0010
ld a, $5
call FarCopyWRAM
@@ -792,7 +792,7 @@ Function974b: ; 974b
and a
jp nz, Function97f9
ld a, [wPlayerSpriteSetupFlags]
- bit 2, a
+ bit 2, a ; transformed to male
jr nz, .male
ld a, [PlayerGender]
and a
@@ -843,7 +843,7 @@ Function977a: ; 977a
dec c
jr nz, .asm_9787
ld hl, Palettes_979c
- ld de, Unkn2Pals + 8 * 2
+ ld de, UnknOBPals + 8 * 2
ld bc, $0010
ld a, $5
call FarCopyWRAM
@@ -1047,7 +1047,7 @@ Function9890:: ; 9890
push af
ld a, $5
ld [rSVBK], a
- ld hl, wMapPals
+ ld hl, UnknBGPals
call Function98df
ld hl, BGPals
call Function98df
@@ -1058,13 +1058,13 @@ Function9890:: ; 9890
Function98df: ; 98df
ld c, $40
-.asm_98e1
+.loop
ld a, $ff
ld [hli], a
ld a, $7f
ld [hli], a
dec c
- jr nz, .asm_98e1
+ jr nz, .loop
ret
; 98eb
@@ -1212,7 +1212,7 @@ Function99d8: ; 99d8
ld a, $e4
ld [rBGP], a
ld de, VTiles1
- ld bc, $0140
+ ld bc, 20 tiles
call CopyData
ld b, $12
.asm_99ea
@@ -1293,7 +1293,7 @@ ClearBytes: ; 0x9a5b
DrawDefaultTiles: ; 0x9a64
; Draw 240 tiles (2/3 of the screen) from tiles in VRAM
- ld hl, VBGMap0 ; BG Map 0
+ hlbgcoord 0, 0 ; BG Map 0
ld de, 32 - 20
ld a, $80 ; starting tile
ld c, 12 + 1
@@ -1367,6 +1367,7 @@ BlkPacket_9b86: ; 9a86
; 9b96
; 9b96
+
PalPacket_9b96: db $51, $48, $00, $49, $00, $4a, $00, $4b, $00, $00, $00, $00, $00, $00, $00, $00
PalPacket_9ba6: db $51, $2b, $00, $24, $00, $20, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
PalPacket_9bb6: db $51, $41, $00, $42, $00, $43, $00, $44, $00, $00, $00, $00, $00, $00, $00, $00
@@ -1973,7 +1974,7 @@ endr
push af
ld a, $5
ld [rSVBK], a
- ld hl, wMapPals
+ ld hl, UnknBGPals
ld b, $8
.asm_b210
ld a, [de]
@@ -2009,9 +2010,9 @@ endr
ld bc, $40
ld hl, MapObjectPals
call AddNTimes
- ld de, Unkn2Pals
+ ld de, UnknOBPals
ld bc, $40
- ld a, $5 ; BANK(Unkn2Pals)
+ ld a, $5 ; BANK(UnknOBPals)
call FarCopyWRAM
ld a, [wPermission]
@@ -2036,7 +2037,7 @@ rept 4
inc hl
endr
.asm_b26d
- ld de, wMapPals + 8 * 6 + 2
+ ld de, UnknBGPals + 8 * 6 + 2
ld bc, 4
ld a, $5
call FarCopyWRAM
diff --git a/engine/compose_mail.asm b/engine/compose_mail.asm
new file mode 100755
index 000000000..f02f99326
--- /dev/null
+++ b/engine/compose_mail.asm
@@ -0,0 +1,498 @@
+_ComposeMailMessage: ; 11e75 (mail?)
+ ld hl, wc6d0
+ ld [hl], e
+ inc hl
+ ld [hl], d
+ ld a, [hMapAnims]
+ push af
+ xor a
+ ld [hMapAnims], a
+ ld a, [hInMenu]
+ push af
+ ld a, $1
+ ld [hInMenu], a
+ call .InitBlankMail
+ call DelayFrame
+
+.loop
+ call .DoMailEntry
+ jr nc, .loop
+
+ pop af
+ ld [hInMenu], a
+ pop af
+ ld [hMapAnims], a
+ ret
+
+.InitBlankMail: ; 11e9a (4:5e9a)
+ call ClearBGPalettes
+ call DisableLCD
+ call Function11c51
+ ld de, VTiles0 tile $00
+ ld hl, .MailIcon
+ ld bc, 8 tiles
+ ld a, BANK(.MailIcon)
+ call FarCopyBytes
+ xor a
+ ld hl, wc300
+ ld [hli], a
+ ld [hl], a
+
+ ; init mail icon
+ depixel 3, 2
+ ld a, SPRITE_ANIM_INDEX_00
+ call _InitSpriteAnimStruct
+
+ ld hl, $2
+ add hl, bc
+ ld [hl], $0
+ call .InitCharset
+ ld a, $e3
+ ld [rLCDC], a
+ call .initwc6d3
+ ld b, SCGB_08
+ call GetSGBLayout
+ call WaitBGMap
+ call WaitTop
+ ld a, %11100100
+ call DmgToCgbBGPals
+ ld a, %11100100
+ call Functioncf8
+ call Function11be0
+ ld hl, wc6d0
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ ld hl, $10
+ add hl, de
+ ld [hl], $4e
+ ret
+; 11ef4 (4:5ef4)
+
+.MailIcon: ; 11ef4
+INCBIN "gfx/icon/mail2.2bpp"
+; 11f74
+
+.initwc6d3: ; 11f74 (4:5f74)
+ ld a, $21
+ ld [wc6d3], a
+ ret
+; 11f7a (4:5f7a)
+
+.Dummy: ; dummied out
+ db "メールを かいてね@"
+; 11f84
+
+.InitCharset: ; 11f84 (4:5f84)
+ call WaitTop
+ hlcoord 0, 0
+ ld bc, 6 * SCREEN_WIDTH
+ ld a, $60 ; border
+ call ByteFill
+ hlcoord 0, 6
+ ld bc, 12 * SCREEN_WIDTH
+ ld a, " "
+ call ByteFill
+ hlcoord 1, 1
+ lb bc, 4, SCREEN_WIDTH - 2
+ call ClearBox
+ ld de, MailEntry_Uppercase
+
+.PlaceMailCharset: ; 11fa9 (4:5fa9)
+ hlcoord 1, 7
+ ld b, 6
+.next
+ ld c, SCREEN_WIDTH - 1
+.loop_
+ ld a, [de]
+ ld [hli], a
+ inc de
+ dec c
+ jr nz, .loop_
+ push de
+ ld de, SCREEN_WIDTH + 1
+ add hl, de
+ pop de
+ dec b
+ jr nz, .next
+ ret
+
+.DoMailEntry: ; 11fc0 (4:5fc0)
+ call JoyTextDelay
+ ld a, [wJumptableIndex]
+ bit 7, a
+ jr nz, .exit_mail
+ call .DoJumptable
+ callba Function8cf62
+ call .Update
+ call DelayFrame
+ and a
+ ret
+.exit_mail
+ callab Function8cf53
+ call ClearSprites
+ xor a
+ ld [hSCX], a
+ ld [hSCY], a
+ scf
+ ret
+
+.Update: ; 11feb (4:5feb)
+ xor a
+ ld [hBGMapMode], a
+ hlcoord 1, 1
+ lb bc, 4, 18
+ call ClearBox
+ ld hl, wc6d0
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ hlcoord 2, 2
+ call PlaceString
+ ld a, $1
+ ld [hBGMapMode], a
+ ret
+
+.DoJumptable: ; 12008 (4:6008)
+ ld a, [wJumptableIndex]
+ ld e, a
+ ld d, 0
+ ld hl, .Jumptable
+rept 2
+ add hl, de
+endr
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp [hl]
+
+.Jumptable: ; 12017 (4:6017)
+ dw .init_blinking_cursor
+ dw .process_joypad
+
+
+.init_blinking_cursor: ; 1201b (4:601b)
+ depixel 9, 2
+ ld a, SPRITE_ANIM_INDEX_09
+ call _InitSpriteAnimStruct
+ ld a, c
+ ld [wc6d5], a
+ ld a, b
+ ld [wc6d6], a
+ ld hl, $1
+ add hl, bc
+ ld a, [hl]
+ ld hl, $e
+ add hl, bc
+ ld [hl], a
+ ld hl, wJumptableIndex
+ inc [hl]
+ ret
+
+.process_joypad: ; 1203a (4:603a)
+ ld hl, hJoyPressed ; $ffa7
+ ld a, [hl]
+ and A_BUTTON
+ jr nz, .a
+ ld a, [hl]
+ and B_BUTTON
+ jr nz, .b
+ ld a, [hl]
+ and START
+ jr nz, .start
+ ld a, [hl]
+ and SELECT
+ jr nz, .select
+ ret
+
+.a
+ call Function12185
+ cp $1
+ jr z, .select
+ cp $2
+ jr z, .b
+ cp $3
+ jr z, .finished
+ call Function11c11
+ call Function121ac
+ jr c, .start
+ ld hl, wc6d2
+ ld a, [hl]
+ cp $10
+ ret nz
+ inc [hl]
+ call Function11bd0
+ ld [hl], $f2
+ dec hl
+ ld [hl], $4e
+ ret
+
+.start
+ ld hl, wc6d5
+ ld c, [hl]
+ inc hl
+ ld b, [hl]
+ ld hl, $c
+ add hl, bc
+ ld [hl], $9
+ ld hl, $d
+ add hl, bc
+ ld [hl], $5
+ ret
+
+.b
+ call Function11bbc
+ ld hl, wc6d2
+ ld a, [hl]
+ cp $10
+ ret nz
+ dec [hl]
+ call Function11bd0
+ ld [hl], $f2
+ inc hl
+ ld [hl], $4e
+ ret
+
+.finished
+ call Function11bf7
+ ld hl, wJumptableIndex
+ set 7, [hl]
+ ret
+
+.select
+ ld hl, wcf64
+ ld a, [hl]
+ xor $1
+ ld [hl], a
+ jr nz, .switch_to_lowercase
+ ld de, MailEntry_Uppercase
+ call .PlaceMailCharset
+ ret
+.switch_to_lowercase
+ ld de, MailEntry_Lowercase
+ call .PlaceMailCharset
+ ret
+
+Function120c1: ; 120c1 (4:60c1)
+ call Function1210c
+ ld hl, SpriteAnim1Sprite0d - SpriteAnim1
+ add hl, bc
+ ld a, [hl]
+ ld e, a
+ swap e
+ ld hl, SpriteAnim1YOffset - SpriteAnim1
+ add hl, bc
+ ld [hl], e
+ cp $5
+ ld de, Unknown_120f8
+ ld a, $0
+ jr nz, .asm_120df
+ ld de, Unknown_12102
+ ld a, $1
+.asm_120df
+ ld hl, SpriteAnim1Sprite0e - SpriteAnim1
+ add hl, bc
+ add [hl]
+ ld hl, SpriteAnim1Sprite01 - SpriteAnim1
+ add hl, bc
+ ld [hl], a
+ ld hl, SpriteAnim1Sprite0c - SpriteAnim1
+ add hl, bc
+ ld l, [hl]
+ ld h, SpriteAnim1Index - SpriteAnim1
+ add hl, de
+ ld a, [hl]
+ ld hl, SpriteAnim1XOffset - SpriteAnim1
+ add hl, bc
+ ld [hl], a
+ ret
+; 120f8 (4:60f8)
+
+Unknown_120f8: ; 120f8
+ db $00, $10, $20, $30, $40, $50, $60, $70, $80, $90
+Unknown_12102: ; 12102
+ db $00, $00, $00, $30, $30, $30, $60, $60, $60, $60
+; 1210c
+
+Function1210c: ; 1210c (4:610c)
+ ld hl, hJoyLast
+ ld a, [hl]
+ and D_UP
+ jr nz, .up
+ ld a, [hl]
+ and D_DOWN
+ jr nz, .down
+ ld a, [hl]
+ and D_LEFT
+ jr nz, .left
+ ld a, [hl]
+ and D_RIGHT
+ jr nz, .right
+ ret
+.right
+ call Function1218b
+ and a
+ jr nz, .asm_12138
+ ld hl, $c
+ add hl, bc
+ ld a, [hl]
+ cp $9
+ jr nc, .asm_12135
+ inc [hl]
+ ret
+.asm_12135
+ ld [hl], $0
+ ret
+.asm_12138
+ cp $3
+ jr nz, .asm_1213d
+ xor a
+.asm_1213d
+ ld e, a
+ add a
+ add e
+ ld hl, $c
+ add hl, bc
+ ld [hl], a
+ ret
+.left
+ call Function1218b
+ and a
+ jr nz, .asm_12159
+ ld hl, $c
+ add hl, bc
+ ld a, [hl]
+ and a
+ jr z, .asm_12156
+ dec [hl]
+ ret
+.asm_12156
+ ld [hl], $9
+ ret
+.asm_12159
+ cp $1
+ jr nz, .asm_1215f
+ ld a, $4
+.asm_1215f
+rept 2
+ dec a
+endr
+ ld e, a
+ add a
+ add e
+ ld hl, $c
+ add hl, bc
+ ld [hl], a
+ ret
+.down
+ ld hl, $d
+ add hl, bc
+ ld a, [hl]
+ cp $5
+ jr nc, .asm_12175
+ inc [hl]
+ ret
+.asm_12175
+ ld [hl], $0
+ ret
+.up
+ ld hl, $d
+ add hl, bc
+ ld a, [hl]
+ and a
+ jr z, .asm_12182
+ dec [hl]
+ ret
+.asm_12182
+ ld [hl], $5
+ ret
+
+Function12185: ; 12185 (4:6185)
+ ld hl, wc6d5
+ ld c, [hl]
+ inc hl
+ ld b, [hl]
+
+Function1218b: ; 1218b (4:618b)
+ ld hl, $d
+ add hl, bc
+ ld a, [hl]
+ cp $5
+ jr nz, .asm_121aa
+ ld hl, $c
+ add hl, bc
+ ld a, [hl]
+ cp $3
+ jr c, .asm_121a4
+ cp $6
+ jr c, .asm_121a7
+ ld a, $3
+ ret
+.asm_121a4
+ ld a, $1
+ ret
+.asm_121a7
+ ld a, $2
+ ret
+.asm_121aa
+ xor a
+ ret
+
+Function121ac: ; 121ac (4:61ac)
+ ld a, [wc6d7]
+ jp Function11b17
+; 121b2 (4:61b2)
+
+Function121b2: ; unreferenced
+ ld a, [wc6d2]
+ and a
+ ret z
+ cp $11
+ jr nz, .asm_121c3
+ push hl
+ ld hl, wc6d2
+rept 2
+ dec [hl]
+endr
+ jr .asm_121c8
+
+.asm_121c3
+ push hl
+ ld hl, wc6d2
+ dec [hl]
+
+.asm_121c8
+ call Function11bd0
+ ld c, [hl]
+ pop hl
+.asm_121cd
+ ld a, [hli]
+ cp $ff
+ jp z, Function11b27
+ cp c
+ jr z, .asm_121d9
+ inc hl
+ jr .asm_121cd
+
+.asm_121d9
+ ld a, [hl]
+ jp Function11b23
+; 121dd
+
+MailEntry_Uppercase: ; 122dd
+ db "A B C D E F G H I J"
+ db "K L M N O P Q R S T"
+ db "U V W X Y Z , ? !"
+ db "1 2 3 4 5 6 7 8 9 0"
+ db "<PK> <MN> <PO> <KE> é ♂ ♀ ¥ … ×"
+ db "lower DEL END "
+; 1224f
+
+MailEntry_Lowercase: ; 1224f
+ db "a b c d e f g h i j"
+ db "k l m n o p q r s t"
+ db "u v w x y z . - /"
+ db "'d 'l 'm 'r 's 't 'v & ( )"
+ db "<``> <''> [ ] ' : ; "
+ db "UPPER DEL END "
+; 122c1
diff --git a/engine/credits.asm b/engine/credits.asm
index 6b35fbe6a..6e2bef12d 100644
--- a/engine/credits.asm
+++ b/engine/credits.asm
@@ -637,10 +637,10 @@ GetCreditsPalette: ; 109b2c
push af
push hl
- add wMapPals % $100
+ add UnknBGPals % $100
ld e, a
ld a, 0
- adc wMapPals / $100
+ adc UnknBGPals / $100
ld d, a
ld bc, 24
call CopyBytes
diff --git a/engine/crystal_intro.asm b/engine/crystal_intro.asm
new file mode 100755
index 000000000..69a068ff9
--- /dev/null
+++ b/engine/crystal_intro.asm
@@ -0,0 +1,2531 @@
+Functione455c: ; e455c
+ hlcoord 1, 1
+ ld de, SCREEN_WIDTH
+ ld c, $10
+.asm_e4564
+ ld [hl], $7f
+ add hl, de
+ dec c
+ jr nz, .asm_e4564
+ hlcoord 1, 2
+ ld bc, $28
+ ld a, [wJumptableIndex]
+ call AddNTimes
+ ld [hl], $ed
+ ret
+; e4579
+
+
+Functione4579: ; e4579
+ ld de, MUSIC_NONE
+ call PlayMusic
+ call ClearBGPalettes
+ call ClearTileMap
+ ld a, VBGMap0 / $100
+ ld [hBGMapAddress + 1], a
+ xor a
+ ld [hBGMapAddress], a
+ ld [hJoyDown], a
+ ld [hSCX], a
+ ld [hSCY], a
+ ld a, $90
+ ld [hWY], a
+ call WaitBGMap
+ ld b, SCGB_19
+ call GetSGBLayout
+ call SetPalettes
+ ld c, 10
+ call DelayFrames
+ callab Copyright
+ call WaitBGMap
+ ld c, 100
+ call DelayFrames
+ call ClearTileMap
+ callba GBCOnlyScreen
+ call Functione45e8
+.joy_loop
+ call JoyTextDelay
+ ld a, [hJoyLast]
+ and BUTTONS
+ jr nz, .pressed_button
+ ld a, [wJumptableIndex]
+ bit 7, a
+ jr nz, .finish
+ call PlaceGameFreakPresents
+ callba Function8cf69
+ call DelayFrame
+ jr .joy_loop
+
+.pressed_button
+ call Functione465e
+ scf
+ ret
+
+.finish
+ call Functione465e
+ and a
+ ret
+; e45e8
+
+Functione45e8: ; e45e8
+ ld de, GameFreakLogo
+ ld hl, VTiles2
+ lb bc, BANK(GameFreakLogo), $1c
+ call Get1bpp
+
+ ld a, [rSVBK]
+ push af
+ ld a, $6
+ ld [rSVBK], a
+
+ ld hl, IntroLogoGFX
+ ld de, w6_d000
+ ld a, BANK(IntroLogoGFX)
+ call FarDecompress
+
+ ld hl, VTiles0
+ ld de, w6_d000
+ lb bc, 1, 8 tiles
+ call Request2bpp
+
+ ld hl, VTiles1
+ ld de, w6_d000 + $80 tiles
+ lb bc, 1, 8 tiles
+ call Request2bpp
+
+ pop af
+ ld [rSVBK], a
+
+ callba Function8cf53
+ depixel 10, 11, 4, 0
+ ld a, SPRITE_ANIM_INDEX_03
+ call _InitSpriteAnimStruct
+ ld hl, $7
+ add hl, bc
+ ld [hl], $a0
+ ld hl, $c
+ add hl, bc
+ ld [hl], $60
+ ld hl, $d
+ add hl, bc
+ ld [hl], $30
+ xor a
+ ld [wJumptableIndex], a
+ ld [wcf64], a
+ ld [wcf65], a
+ ld [hSCX], a
+ ld [hSCY], a
+ ld a, $1
+ ld [hBGMapMode], a
+ ld a, $90
+ ld [hWY], a
+ ld de, $e4e4
+ call DmgToCgbObjPals
+ ret
+; e465e
+
+Functione465e: ; e465e
+ callba Function8cf53
+ call ClearTileMap
+ call ClearSprites
+ ld c, 16
+ call DelayFrames
+ ret
+; e4670
+
+PlaceGameFreakPresents: ; e4670
+ ld a, [wJumptableIndex]
+ ld e, a
+ ld d, 0
+ ld hl, .jumptable
+rept 2
+ add hl, de
+endr
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp [hl]
+; e467f
+
+.jumptable: ; e467f
+ dw PlaceGameFreakPresents_0
+ dw PlaceGameFreakPresents_1
+ dw PlaceGameFreakPresents_2
+ dw PlaceGameFreakPresents_3
+; e4687
+
+PlaceGameFreakPresents_AdvanceIndex: ; e4687
+ ld hl, wJumptableIndex
+ inc [hl]
+ ret
+; e468c
+
+PlaceGameFreakPresents_0: ; e468c
+ ret
+; e468d
+
+PlaceGameFreakPresents_1: ; e468d
+ ld hl, wcf65
+ ld a, [hl]
+ cp $20
+ jr nc, .PlaceGameFreak
+ inc [hl]
+ ret
+
+.PlaceGameFreak
+ ld [hl], 0
+ ld hl, .GAME_FREAK
+ decoord 5, 10
+ ld bc, .end - .GAME_FREAK
+ call CopyBytes
+ call PlaceGameFreakPresents_AdvanceIndex
+ ld de, SFX_GAME_FREAK_PRESENTS
+ call PlaySFX
+ ret
+; e46af
+
+.GAME_FREAK
+ ; G A M E _ F R E A K
+ db 0, 1, 2, 3, 13, 4, 5, 3, 1, 6
+.end
+ db "@"
+; e46ba
+
+PlaceGameFreakPresents_2: ; e46ba
+ ld hl, wcf65
+ ld a, [hl]
+ cp $40
+ jr nc, .place_presents
+ inc [hl]
+ ret
+
+.place_presents
+ ld [hl], 0
+ ld hl, .presents
+ decoord 7,11
+ ld bc, .end - .presents
+ call CopyBytes
+ call PlaceGameFreakPresents_AdvanceIndex
+ ret
+; e46d6
+
+.presents
+ db 7, 8, 9, 10, 11, 12
+.end
+ db "@"
+; e46dd
+
+PlaceGameFreakPresents_3: ; e46dd
+ ld hl, wcf65
+ ld a, [hl]
+ cp $80
+ jr nc, .finish
+ inc [hl]
+ ret
+
+.finish
+ ld hl, wJumptableIndex
+ set 7, [hl]
+ ret
+; e46ed
+
+
+
+GameFreakLogoJumper: ; e46ed (39:46ed)
+ ld hl, $b
+ add hl, bc
+ ld e, [hl]
+ ld d, 0
+ ld hl, GameFreakLogoScenes
+rept 2
+ add hl, de
+endr
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp [hl]
+
+GameFreakLogoScenes: ; e46fd (39:46fd)
+ dw GameFreakLogoScene1
+ dw GameFreakLogoScene2
+ dw GameFreakLogoScene3
+ dw GameFreakLogoScene4
+ dw GameFreakLogoScene5
+
+
+GameFreakLogoScene1: ; e4707 (39:4707)
+ ld hl, $b
+ add hl, bc
+ inc [hl]
+ ret
+
+GameFreakLogoScene2: ; e470d (39:470d)
+ ld hl, $c
+ add hl, bc
+ ld a, [hl]
+ and a
+ jr z, .asm_e4747
+ ld d, a
+ ld hl, $d
+ add hl, bc
+ ld a, [hl]
+ and $3f
+ cp $20
+ jr nc, .asm_e4723
+ add $20
+.asm_e4723
+ ld e, a
+ callba Functionce765
+ ld hl, $7
+ add hl, bc
+ ld [hl], e
+ ld hl, $d
+ add hl, bc
+ ld a, [hl]
+ dec [hl]
+ and $1f
+ ret nz
+ ld hl, $c
+ add hl, bc
+ ld a, [hl]
+ sub $30
+ ld [hl], a
+ ld de, SFX_DITTO_BOUNCE
+ call PlaySFX
+ ret
+.asm_e4747
+ ld hl, $b
+ add hl, bc
+ inc [hl]
+ ld hl, $d
+ add hl, bc
+ ld [hl], $0
+ ld de, SFX_DITTO_POP_UP
+ call PlaySFX
+ ret
+
+GameFreakLogoScene3: ; e4759 (39:4759)
+ ld hl, $d
+ add hl, bc
+ ld a, [hl]
+ cp $20
+ jr nc, .asm_e4764
+ inc [hl]
+ ret
+.asm_e4764
+ ld hl, $b
+ add hl, bc
+ inc [hl]
+ ld hl, $d
+ add hl, bc
+ ld [hl], $0
+ ld de, SFX_DITTO_TRANSFORM
+ call PlaySFX
+ ret
+
+GameFreakLogoScene4: ; e4776 (39:4776)
+ ld hl, $d
+ add hl, bc
+ ld a, [hl]
+ cp $40
+ jr z, .asm_e47a3
+ inc [hl]
+ srl a
+ srl a
+ ld e, a
+ ld d, $0
+ ld hl, GameFreakLogoPalettes
+rept 2
+ add hl, de
+endr
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+ ld a, [hli]
+ ld [OBPals + 12], a
+ ld a, [hli]
+ ld [OBPals + 13], a
+ pop af
+ ld [rSVBK], a
+ ld a, $1
+ ld [hCGBPalUpdate], a
+ ret
+.asm_e47a3
+ ld hl, $b
+ add hl, bc
+ inc [hl]
+ call PlaceGameFreakPresents_AdvanceIndex
+
+GameFreakLogoScene5: ; e47ab (39:47ab)
+ ret
+; e47ac (39:47ac)
+
+GameFreakLogoPalettes: ; e47ac
+; Ditto's color as it turns into the Game Freak logo.
+; Fade from pink to orange.
+; One color per step.
+ RGB 23, 12, 28
+ RGB 23, 12, 27
+ RGB 23, 13, 26
+ RGB 23, 13, 24
+ RGB 24, 14, 22
+ RGB 24, 14, 20
+ RGB 24, 15, 18
+ RGB 24, 15, 16
+ RGB 25, 16, 14
+ RGB 25, 16, 12
+ RGB 25, 17, 10
+ RGB 25, 17, 08
+ RGB 26, 18, 06
+ RGB 26, 18, 04
+ RGB 26, 19, 02
+ RGB 26, 19, 00
+;' e47cc
+
+GameFreakLogo: ; e47cc
+INCBIN "gfx/splash/logo.1bpp"
+; e48ac
+
+CrystalIntro: ; e48ac
+ ld a, [rSVBK]
+ push af
+ ld a, 5
+ ld [rSVBK], a
+ ld a, [hInMenu]
+ push af
+ ld a, [hVBlank]
+ push af
+ call Functione4901
+.loop: ; e48bc
+ call JoyTextDelay
+ ld a, [hJoyLast]
+ and BUTTONS
+ jr nz, .ShutOffMusic
+ ld a, [wJumptableIndex]
+ bit 7, a
+ jr nz, .done
+ call IntroSceneJumper
+ callba Function8cf69
+ call DelayFrame
+ jp .loop
+
+.ShutOffMusic
+ ld de, MUSIC_NONE
+ call PlayMusic
+
+.done
+ call ClearBGPalettes
+ call ClearSprites
+ call ClearTileMap
+ xor a
+ ld [hSCX], a
+ ld [hSCY], a
+ ld a, $7
+ ld [hWX], a
+ ld a, $90
+ ld [hWY], a
+ pop af
+ ld [hVBlank], a
+ pop af
+ ld [hInMenu], a
+ pop af
+ ld [rSVBK], a
+ ret
+; e4901
+
+Functione4901: ; e4901
+ xor a
+ ld [hVBlank], a
+ ld a, $1
+ ld [hInMenu], a
+ xor a
+ ld [hMapAnims], a
+ ld [wJumptableIndex], a
+ ret
+; e490f
+
+IntroSceneJumper: ; e490f
+ ld a, [wJumptableIndex]
+ ld e, a
+ ld d, 0
+ ld hl, IntroScenes
+rept 2
+ add hl, de
+endr
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp [hl]
+; e491e
+
+
+IntroScenes: ; e491e (39:491e)
+ dw IntroScene1
+ dw IntroScene2
+ dw IntroScene3
+ dw IntroScene4
+ dw IntroScene5
+ dw IntroScene6
+ dw IntroScene7
+ dw IntroScene8
+ dw IntroScene9
+ dw IntroScene10
+ dw IntroScene11
+ dw IntroScene12
+ dw IntroScene13
+ dw IntroScene14
+ dw IntroScene15
+ dw IntroScene16
+ dw IntroScene17
+ dw IntroScene18
+ dw IntroScene19
+ dw IntroScene20
+ dw IntroScene21
+ dw IntroScene22
+ dw IntroScene23
+ dw IntroScene24
+ dw IntroScene25
+ dw IntroScene26
+ dw IntroScene27
+ dw IntroScene28
+
+
+NextIntroScene: ; e4956 (39:4956)
+ ld hl, wJumptableIndex
+ inc [hl]
+ ret
+
+IntroScene1: ; e495b (39:495b)
+; Setup the next scene.
+ call Functione54a3
+ call ClearSprites
+ call ClearTileMap
+ xor a
+ ld [hBGMapMode], a
+ ld a, $1
+ ld [rVBK], a
+ ld hl, IntroTilemap001
+ debgcoord 0, 0
+ call Functione54fa
+ ld a, $0
+ ld [rVBK], a
+ ld hl, IntroUnownsGFX
+ ld de, VTiles2 tile $00
+ call Functione54c2
+ ld hl, IntroPulseGFX
+ ld de, VTiles0 tile $00
+ call Functione54c2
+ ld hl, IntroTilemap002
+ debgcoord 0, 0
+ call Functione54fa
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+ ld hl, Palette_365ad
+ ld de, UnknBGPals
+ ld bc, $80
+ call CopyBytes
+ ld hl, Palette_365ad
+ ld de, BGPals
+ ld bc, $80
+ call CopyBytes
+ pop af
+ ld [rSVBK], a
+ xor a
+ ld [hSCX], a
+ ld [hSCY], a
+ ld a, $7
+ ld [hWX], a
+ ld a, $90
+ ld [hWY], a
+ callba Function8cf53
+ call Functione549e
+ xor a
+ ld [wIntroSceneFrameCounter], a
+ ld [wcf65], a
+ call NextIntroScene
+ ret
+
+IntroScene2: ; e49d6 (39:49d6)
+; First Unown (A) fades in, pulses, then fades out.
+ ld hl, wIntroSceneFrameCounter
+ ld a, [hl]
+ inc [hl]
+ cp $80
+ jr nc, .endscene
+ cp $60
+ jr nz, .DontPlaySound
+ push af
+ ld de, $5858
+ call Functione51dc
+ ld de, SFX_INTRO_UNOWN_1
+ call PlaySFX
+ pop af
+.DontPlaySound
+ ld [wcf65], a
+ xor a
+ call Functione5223
+ ret
+.endscene
+ call NextIntroScene
+ ret
+
+IntroScene3: ; e49fd (39:49fd)
+; More setup. Transition to the outdoor scene.
+ call Functione54a3
+ call ClearSprites
+ call ClearTileMap
+ xor a
+ ld [hBGMapMode], a
+ ld a, $1
+ ld [rVBK], a
+ ld hl, IntroTilemap003
+ debgcoord 0, 0
+ call Functione54fa
+ ld a, $0
+ ld [rVBK], a
+ ld hl, IntroBackgroundGFX
+ ld de, VTiles2 tile $00
+ call Functione54c2
+ ld hl, IntroTilemap004
+ debgcoord 0, 0
+ call Functione54fa
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+ ld hl, Palette_e5edd
+ ld de, UnknBGPals
+ ld bc, $80
+ call CopyBytes
+ ld hl, Palette_e5edd
+ ld de, BGPals
+ ld bc, $80
+ call CopyBytes
+ pop af
+ ld [rSVBK], a
+ xor a
+ ld [hSCX], a
+ ld [hSCY], a
+ ld a, $7
+ ld [hWX], a
+ ld a, $90
+ ld [hWY], a
+ call Functione5516
+ call Functione549e
+ xor a
+ ld [wIntroSceneFrameCounter], a
+ call NextIntroScene
+ ret
+
+IntroScene4: ; e4a69 (39:4a69)
+; Scroll the outdoor panorama for a bit.
+ call Functione552f
+ ld hl, wIntroSceneFrameCounter
+ ld a, [hl]
+ cp $80
+ jr z, .endscene
+ inc [hl]
+ ret
+.endscene
+ call NextIntroScene
+ ret
+
+IntroScene5: ; e4a7a (39:4a7a)
+; Go back to the Unown.
+ call Functione54a3
+ call ClearSprites
+ call ClearTileMap
+ xor a
+ ld [hBGMapMode], a
+ ld [hLCDStatCustom], a
+ ld a, $1
+ ld [rVBK], a
+ ld hl, IntroTilemap005
+ debgcoord 0, 0
+ call Functione54fa
+ ld a, $0
+ ld [rVBK], a
+ ld hl, IntroUnownsGFX
+ ld de, VTiles2 tile $00
+ call Functione54c2
+ ld hl, IntroPulseGFX
+ ld de, VTiles0 tile $00
+ call Functione54c2
+ ld hl, IntroTilemap006
+ debgcoord 0, 0
+ call Functione54fa
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+ ld hl, Palette_365ad
+ ld de, UnknBGPals
+ ld bc, $80
+ call CopyBytes
+ ld hl, Palette_365ad
+ ld de, BGPals
+ ld bc, $80
+ call CopyBytes
+ pop af
+ ld [rSVBK], a
+ xor a
+ ld [hSCX], a
+ ld [hSCY], a
+ ld a, $7
+ ld [hWX], a
+ ld a, $90
+ ld [hWY], a
+ callba Function8cf53
+ call Functione549e
+ xor a
+ ld [wcf64], a
+ ld [wcf65], a
+ call NextIntroScene
+ ret
+
+IntroScene6: ; e4af7 (39:4af7)
+; Two more Unown (I, H) fade in.
+ ld hl, wcf64
+ ld a, [hl]
+ inc [hl]
+ cp $80
+ jr nc, .endscene
+ cp $60
+ jr z, .SecondUnown
+ cp $40
+ jr nc, .StopUnown
+ cp $20
+ jr z, .FirstUnown
+ jr .NoUnown
+.FirstUnown
+ push af
+ ld de, $3878
+ call Functione51dc
+ ld de, SFX_INTRO_UNOWN_2
+ call PlaySFX
+ pop af
+.NoUnown
+ ld [wcf65], a
+ xor a
+ call Functione5223
+ ret
+.SecondUnown
+ push af
+ ld de, $7030
+ call Functione51dc
+ ld de, SFX_INTRO_UNOWN_1
+ call PlaySFX
+ pop af
+.StopUnown
+ ld [wcf65], a
+ ld a, $1
+ call Functione5223
+ ret
+.endscene
+ call NextIntroScene
+ ret
+
+IntroScene7: ; e4b3f (39:4b3f)
+; Back to the outdoor scene.
+ call Functione54a3
+ call ClearSprites
+ call ClearTileMap
+ xor a
+ ld [hBGMapMode], a
+ ld a, $1
+ ld [rVBK], a
+ ld hl, IntroTilemap003
+ debgcoord 0, 0
+ call Functione54fa
+ ld hl, IntroPichuWooperGFX
+ ld de, VTiles0 tile $00
+ call Functione54c2
+ ld a, $0
+ ld [rVBK], a
+ ld hl, IntroSuicuneRunGFX
+ ld de, VTiles0 tile $00
+ call Functione54de
+ ld hl, IntroBackgroundGFX
+ ld de, VTiles2 tile $00
+ call Functione54c2
+ ld hl, IntroTilemap004
+ debgcoord 0, 0
+ call Functione54fa
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+ ld hl, Palette_e5edd
+ ld de, UnknBGPals
+ ld bc, $80
+ call CopyBytes
+ ld hl, Palette_e5edd
+ ld de, BGPals
+ ld bc, $80
+ call CopyBytes
+ pop af
+ ld [rSVBK], a
+ xor a
+ ld [hSCX], a
+ ld [hSCY], a
+ ld a, $7
+ ld [hWX], a
+ ld a, $90
+ ld [hWY], a
+ call Functione5516
+ callba Function8cf53
+ depixel 13, 27, 4, 0
+ ld a, SPRITE_ANIM_INDEX_26
+ call _InitSpriteAnimStruct
+ ld a, $f0
+ ld [wc3c0], a
+ call Functione549e
+ xor a
+ ld [wIntroSceneFrameCounter], a
+ ld [wcf65], a
+ call NextIntroScene
+ ret
+
+IntroScene8: ; e4bd3 (39:4bd3)
+; Scroll the scene, then show Suicune running across the screen.
+ ld hl, wIntroSceneFrameCounter
+ ld a, [hl]
+ inc [hl]
+ cp $40
+ jr z, .asm_e4be2
+ jr nc, .asm_e4be8
+ call Functione552f
+ ret
+.asm_e4be2
+ ld de, SFX_INTRO_SUICUNE_3
+ call PlaySFX
+.asm_e4be8
+ ld a, [wc3c0]
+ and a
+ jr z, .asm_e4bf4
+ sub $8
+ ld [wc3c0], a
+ ret
+.asm_e4bf4
+ ld de, SFX_INTRO_SUICUNE_2
+ call PlaySFX
+ callba Function8d03d
+ call NextIntroScene
+ ret
+
+IntroScene9: ; e4c04 (39:4c04)
+; Set up the next scene (same bg).
+ xor a
+ ld [hLCDStatCustom], a
+ call ClearSprites
+ hlcoord 0, 0, AttrMap
+ ld bc, $f0
+ ld a, $1
+ call ByteFill
+ ld bc, $3c
+ ld a, $2
+ call ByteFill
+ ld bc, $3c
+ ld a, $3
+ call ByteFill
+ ld a, $2
+ ld [hBGMapMode], a
+ call DelayFrame
+ call DelayFrame
+ call DelayFrame
+ ld a, $c
+ ld [hBGMapAddress], a
+ call DelayFrame
+ call DelayFrame
+ call DelayFrame
+ xor a
+ ld [hBGMapMode], a
+ ld [hBGMapAddress], a
+ ld [wc3c0], a
+ xor a
+ ld [wcf64], a
+ call NextIntroScene
+ ret
+
+IntroScene10: ; e4c4f (39:4c4f)
+; Wooper and Pichu enter.
+ call Functione546d
+ ld hl, wcf64
+ ld a, [hl]
+ inc [hl]
+ cp $c0
+ jr z, .done
+ cp $20
+ jr z, .wooper
+ cp $40
+ jr z, .pichu
+ ret
+
+.pichu
+ depixel 21, 16, 1, 0
+ ld a, SPRITE_ANIM_INDEX_27
+ call _InitSpriteAnimStruct
+ ld de, SFX_INTRO_PICHU
+ call PlaySFX
+ ret
+
+.wooper
+ depixel 22, 6
+ ld a, SPRITE_ANIM_INDEX_28
+ call _InitSpriteAnimStruct
+ ld de, SFX_INTRO_PICHU
+ call PlaySFX
+ ret
+.done
+ call NextIntroScene
+ ret
+
+IntroScene11: ; e4c86 (39:4c86)
+; Back to Unown again.
+ call Functione54a3
+ call ClearSprites
+ call ClearTileMap
+ xor a
+ ld [hBGMapMode], a
+ ld [hLCDStatCustom], a
+ ld a, $1
+ ld [rVBK], a
+ ld hl, IntroTilemap007
+ debgcoord 0, 0
+ call Functione54fa
+ ld a, $0
+ ld [rVBK], a
+ ld hl, IntroUnownsGFX
+ ld de, VTiles2 tile $00
+ call Functione54c2
+ ld hl, IntroTilemap008
+ debgcoord 0, 0
+ call Functione54fa
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+ ld hl, Palette_365ad
+ ld de, UnknBGPals
+ ld bc, $80
+ call CopyBytes
+ ld hl, Palette_365ad
+ ld de, BGPals
+ ld bc, $80
+ call CopyBytes
+ pop af
+ ld [rSVBK], a
+ xor a
+ ld [hSCX], a
+ ld [hSCY], a
+ ld a, $7
+ ld [hWX], a
+ ld a, $90
+ ld [hWY], a
+ callba Function8cf53
+ call Functione549e
+ xor a
+ ld [wIntroSceneFrameCounter], a
+ ld [wcf65], a
+ call NextIntroScene
+ ret
+
+IntroScene12: ; e4cfa (39:4cfa)
+; Even more Unown.
+ call Functione4d36
+ ld hl, wIntroSceneFrameCounter
+ ld a, [hl]
+ inc [hl]
+ cp $c0
+ jr nc, .asm_e4d32
+ cp $80
+ jr nc, .asm_e4d1d
+ ld c, a
+ and $1f
+ sla a
+ ld [wcf65], a
+ ld a, c
+ and $e0
+ srl a
+ swap a
+ call Functione5223
+ ret
+.asm_e4d1d
+ ld c, a
+ and $f
+ sla a
+ sla a
+ ld [wcf65], a
+ ld a, c
+ and $70
+ or $40
+ swap a
+ call Functione5223
+ ret
+.asm_e4d32
+ call NextIntroScene
+ ret
+
+Functione4d36: ; e4d36 (39:4d36)
+ ld a, [wIntroSceneFrameCounter]
+ ld c, a
+ ld hl, .UnownSounds
+.loop
+ ld a, [hli]
+ cp -1
+ ret z
+ cp c
+ jr z, .playsound
+rept 2
+ inc hl
+endr
+ jr .loop
+.playsound
+ ld a, [hli]
+ ld d, [hl]
+ ld e, a
+ push de
+ call SFXChannelsOff
+ pop de
+ call PlaySFX
+ ret
+; e4d54 (39:4d54)
+
+.UnownSounds: ; e4d54
+ dbw $00, SFX_INTRO_UNOWN_3
+ dbw $20, SFX_INTRO_UNOWN_2
+ dbw $40, SFX_INTRO_UNOWN_1
+ dbw $60, SFX_INTRO_UNOWN_2
+ dbw $80, SFX_INTRO_UNOWN_3
+ dbw $90, SFX_INTRO_UNOWN_2
+ dbw $a0, SFX_INTRO_UNOWN_1
+ dbw $b0, SFX_INTRO_UNOWN_2
+ db $ff
+; e4d6d
+
+IntroScene13: ; e4d6d (39:4d6d)
+; Switch scenes again.
+ call Functione54a3
+ call ClearSprites
+ call ClearTileMap
+ xor a
+ ld [hBGMapMode], a
+ ld a, $1
+ ld [rVBK], a
+ ld hl, IntroTilemap003
+ debgcoord 0, 0
+ call Functione54fa
+ ld a, $0
+ ld [rVBK], a
+ ld hl, IntroSuicuneRunGFX
+ ld de, VTiles0 tile $00
+ call Functione54de
+ ld hl, IntroBackgroundGFX
+ ld de, VTiles2 tile $00
+ call Functione54c2
+ ld hl, IntroTilemap004
+ debgcoord 0, 0
+ call Functione54fa
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+ ld hl, Palette_e5edd
+ ld de, UnknBGPals
+ ld bc, $80
+ call CopyBytes
+ ld hl, Palette_e5edd
+ ld de, BGPals
+ ld bc, $80
+ call CopyBytes
+ pop af
+ ld [rSVBK], a
+ xor a
+ ld [hSCX], a
+ ld [hSCY], a
+ ld a, $7
+ ld [hWX], a
+ ld a, $90
+ ld [hWY], a
+ callba Function8cf53
+ depixel 13, 11, 4, 0
+ ld a, SPRITE_ANIM_INDEX_26
+ call _InitSpriteAnimStruct
+ ld de, MUSIC_CRYSTAL_OPENING
+ call PlayMusic
+ xor a
+ ld [wc3c0], a
+ call Functione549e
+ xor a
+ ld [wcf64], a
+ ld [wcf65], a
+ call NextIntroScene
+ ret
+
+IntroScene14: ; e4dfa (39:4dfa)
+; Suicune runs then jumps.
+ ld a, [hSCX]
+ sub 10
+ ld [hSCX], a
+ ld hl, wcf64
+ ld a, [hl]
+ inc [hl]
+ cp $80
+ jr z, .done
+ cp $60
+ jr z, .jump
+ jr nc, .asm_e4e1a
+ cp $40
+ jr nc, .asm_e4e33
+ ret
+
+.jump
+ ld de, SFX_INTRO_SUICUNE_4
+ call PlaySFX
+
+.asm_e4e1a
+ ld a, $1
+ ld [wcf65], a
+ ld a, [wc3c0]
+ cp $88
+ jr c, .asm_e4e2c
+ sub $8
+ ld [wc3c0], a
+ ret
+
+.asm_e4e2c
+ callba Function8d03d
+ ret
+
+.asm_e4e33
+ ld a, [wc3c0]
+ sub $2
+ ld [wc3c0], a
+ ret
+
+.done
+ call NextIntroScene
+ ret
+
+IntroScene15: ; e4e40 (39:4e40)
+; Transition to a new scene.
+ call Functione54a3
+ call ClearSprites
+ call ClearTileMap
+ xor a
+ ld [hBGMapMode], a
+ ld a, $1
+ ld [rVBK], a
+ ld hl, IntroTilemap009
+ debgcoord 0, 0
+ call Functione54fa
+ ld a, $0
+ ld [rVBK], a
+ ld hl, IntroSuicuneJumpGFX
+ ld de, VTiles2 tile $00
+ call Functione54c2
+ ld hl, IntroUnownBackGFX
+ ld de, VTiles0 tile $00
+ call Functione54c2
+ ld de, GFX_e7a5d
+ ld hl, VTiles1 tile $00
+ lb bc, BANK(GFX_e7a5d), 1
+ call Request2bpp
+ ld hl, IntroTilemap010
+ debgcoord 0, 0
+ call Functione54fa
+ call Functione541b
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+ ld hl, Palette_e77dd
+ ld de, UnknBGPals
+ ld bc, $80
+ call CopyBytes
+ ld hl, Palette_e77dd
+ ld de, BGPals
+ ld bc, $80
+ call CopyBytes
+ pop af
+ ld [rSVBK], a
+ xor a
+ ld [hSCX], a
+ ld a, $90
+ ld [hSCY], a
+ ld a, $7
+ ld [hWX], a
+ ld a, $90
+ ld [hWY], a
+ callba Function8cf53
+ call Functione549e
+ depixel 8, 5
+ ld a, SPRITE_ANIM_INDEX_2A
+ call _InitSpriteAnimStruct
+ depixel 12, 0
+ ld a, SPRITE_ANIM_INDEX_2B
+ call _InitSpriteAnimStruct
+ xor a
+ ld [wcf64], a
+ ld [wcf65], a
+ call NextIntroScene
+ ret
+
+IntroScene16: ; e4edc (39:4edc)
+; Suicune shows its face. An Unown appears in front.
+ ld hl, wcf64
+ ld a, [hl]
+ inc [hl]
+ cp $80
+ jr nc, .done
+ call Functione5441
+ ld a, [hSCY]
+ and a
+ ret z
+ add 8
+ ld [hSCY], a
+ ret
+.done
+ call NextIntroScene
+ ret
+
+IntroScene17: ; e4ef5 (39:4ef5)
+; ...
+ call Functione54a3
+ call ClearSprites
+ call ClearTileMap
+ xor a
+ ld [hBGMapMode], a
+ ld a, $1
+ ld [rVBK], a
+ ld hl, IntroTilemap011
+ debgcoord 0, 0
+ call Functione54fa
+ ld a, $0
+ ld [rVBK], a
+ ld hl, IntroSuicuneCloseGFX
+ ld de, VTiles1 tile $00
+ call Functione54de
+ ld hl, IntroTilemap012
+ debgcoord 0, 0
+ call Functione54fa
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+ ld hl, Palette_e6d6d
+ ld de, UnknBGPals
+ ld bc, $80
+ call CopyBytes
+ ld hl, Palette_e6d6d
+ ld de, BGPals
+ ld bc, $80
+ call CopyBytes
+ pop af
+ ld [rSVBK], a
+ xor a
+ ld [hSCX], a
+ ld [hSCY], a
+ ld a, $7
+ ld [hWX], a
+ ld a, $90
+ ld [hWY], a
+ callba Function8cf53
+ call Functione549e
+ xor a
+ ld [wcf64], a
+ ld [wcf65], a
+ call NextIntroScene
+ ret
+
+IntroScene18: ; e4f67 (39:4f67)
+; Suicune close up.
+ ld hl, wcf64
+ ld a, [hl]
+ inc [hl]
+ cp $60
+ jr nc, .done
+ ld a, [hSCX]
+ cp $60
+ ret z
+ add 8
+ ld [hSCX], a
+ ret
+.done
+ call NextIntroScene
+ ret
+
+IntroScene19: ; e4f7e (39:4f7e)
+; More setup.
+ call Functione54a3
+ call ClearSprites
+ call ClearTileMap
+ xor a
+ ld [hBGMapMode], a
+ ld a, $1
+ ld [rVBK], a
+ ld hl, IntroTilemap013
+ debgcoord 0, 0
+ call Functione54fa
+ ld a, $0
+ ld [rVBK], a
+ ld hl, IntroSuicuneBackGFX
+ ld de, VTiles2 tile $00
+ call Functione54c2
+ ld hl, IntroUnownsGFX
+ ld de, VTiles1 tile $00
+ call Functione54c2
+ ld de, GFX_e7a5d
+ ld hl, VTiles1 tile $7f
+ lb bc, BANK(GFX_e7a5d), 1
+ call Request2bpp
+ ld hl, IntroTilemap014
+ debgcoord 0, 0
+ call Functione54fa
+ call Functione541b
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+ ld hl, Palette_e77dd
+ ld de, UnknBGPals
+ ld bc, $80
+ call CopyBytes
+ ld hl, Palette_e77dd
+ ld de, BGPals
+ ld bc, $80
+ call CopyBytes
+ pop af
+ ld [rSVBK], a
+ xor a
+ ld [hSCX], a
+ ld a, $d8
+ ld [hSCY], a
+ ld a, $7
+ ld [hWX], a
+ ld a, $90
+ ld [hWY], a
+ callba Function8cf53
+ ld hl, wc300
+ xor a
+ ld [hli], a
+ ld [hl], $7f
+ call Functione549e
+ depixel 12, 0
+ ld a, SPRITE_ANIM_INDEX_2B
+ call _InitSpriteAnimStruct
+ xor a
+ ld [wcf64], a
+ ld [wcf65], a
+ call NextIntroScene
+ ret
+
+IntroScene20: ; e5019 (39:5019)
+; Suicune running away. A bunch of Unown appear.
+ ld hl, wcf64
+ ld a, [hl]
+ inc [hl]
+ cp $98
+ jr nc, .asm_e5059
+ cp $58
+ ret nc
+ cp $40
+ jr nc, .asm_e5032
+ cp $28
+ ret nc
+ ld a, [hSCY]
+ inc a
+ ld [hSCY], a
+ ret
+
+.asm_e5032
+ sub $18
+ ld c, a
+ and $3
+ cp $3
+ ret nz
+ ld a, c
+ and $1c
+ srl a
+ srl a
+ ld [wcf65], a
+ xor a
+ call Functione5348
+ ret
+; e5049 (39:5049)
+
+ ld a, c
+ and $1c
+ srl a
+ srl a
+ ld [wcf65], a
+ ld a, 1
+ call Functione5348
+ ret
+
+.asm_e5059
+ call NextIntroScene
+ ret
+
+IntroScene21: ; e505d (39:505d)
+; Suicune gets more distant and turns black.
+ call Functione5451
+ ld c, 3
+ call DelayFrames
+ xor a
+ ld [hBGMapMode], a
+ ld [wcf64], a
+ ld [wcf65], a
+ call NextIntroScene
+ ret
+
+IntroScene22: ; e5072 (39:5072)
+ ld hl, wcf64
+ ld a, [hl]
+ inc [hl]
+ cp $8
+ jr nc, .done
+ ret
+.done
+ callba Function8d03d
+ call NextIntroScene
+ ret
+
+IntroScene23: ; e5086 (39:5086)
+ xor a
+ ld [wcf64], a
+ call NextIntroScene
+ ret
+
+IntroScene24: ; e508e (39:508e)
+; Fade to white.
+ ld hl, wcf64
+ ld a, [hl]
+ inc [hl]
+ cp $20
+ jr nc, .done
+
+ ld c, a
+ and $3
+ ret nz
+ ld a, c
+ and $1c
+ sla a
+ call Functione5172
+ ret
+
+.done
+ ld a, $40
+ ld [wcf64], a
+ call NextIntroScene
+ ret
+
+IntroScene25: ; e50ad (39:50ad)
+; Wait around a bit.
+ ld a, [wcf64]
+ dec a
+ jr z, .done
+ ld [wcf64], a
+ ret
+.done
+ call NextIntroScene
+ ret
+
+IntroScene26: ; e50bb (39:50bb)
+; Load the final scene.
+ call ClearBGPalettes
+ call ClearSprites
+ call ClearTileMap
+ xor a
+ ld [hBGMapMode], a
+ ld a, $1
+ ld [rVBK], a
+ ld hl, IntroTilemap015
+ debgcoord 0, 0
+ call Functione54fa
+ ld a, $0
+ ld [rVBK], a
+ ld hl, IntroCrystalUnownsGFX
+ ld de, VTiles2 tile $00
+ call Functione54c2
+ ld hl, IntroTilemap017
+ debgcoord 0, 0
+ call Functione54fa
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+ ld hl, Palette_e679d
+ ld de, UnknBGPals
+ ld bc, $80
+ call CopyBytes
+ ld hl, Palette_e679d
+ ld de, BGPals
+ ld bc, $80
+ call CopyBytes
+ pop af
+ ld [rSVBK], a
+ xor a
+ ld [hSCX], a
+ ld [hSCY], a
+ ld a, $7
+ ld [hWX], a
+ ld a, $90
+ ld [hWY], a
+ callba Function8cf53
+ call Functione549e
+ xor a
+ ld [wcf64], a
+ ld [wcf65], a
+ call NextIntroScene
+ ret
+
+IntroScene27: ; e512d (39:512d)
+; Spell out C R Y S T A L with Unown.
+ ld hl, wcf65
+ inc [hl]
+ ld hl, wcf64
+ ld a, [hl]
+ inc [hl]
+ cp $80
+ jr nc, .done
+
+ ld c, a
+ and $f
+ ld [wcf65], a
+ ld a, c
+ and $70
+ swap a
+ call Functione539d
+ ret
+
+.done
+ call NextIntroScene
+ ld a, $80
+ ld [wcf64], a
+ ret
+
+IntroScene28: ; e5152 (39:5152)
+; Cut out when the music ends, and lead into the title screen.
+ ld hl, wcf64
+ ld a, [hl]
+ and a
+ jr z, .done
+ dec [hl]
+ cp $18
+ jr z, .clear
+ cp $8
+ ret nz
+
+ ld de, SFX_UNKNOWN_CB
+ call PlaySFX
+ ret
+
+.clear
+ call ClearBGPalettes
+ ret
+
+.done
+ ld hl, wJumptableIndex
+ set 7, [hl]
+ ret
+
+
+Functione5172: ; e5172 (39:5172)
+ ld hl, Unknown_e519c
+ add l
+ ld l, a
+ ld a, $0
+ adc h
+ ld h, a
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+ ld de, BGPals
+ ld b, $8
+.asm_e5187
+ push hl
+ ld c, $8
+.asm_e518a
+ ld a, [hli]
+ ld [de], a
+ inc de
+ dec c
+ jr nz, .asm_e518a
+ pop hl
+ dec b
+ jr nz, .asm_e5187
+ pop af
+ ld [rSVBK], a
+ ld a, $1
+ ld [hCGBPalUpdate], a
+ ret
+; e519c (39:519c)
+
+Unknown_e519c: ; e519c
+; Fade to white.
+ RGB 24, 12, 09
+ RGB 31, 31, 31
+ RGB 12, 00, 31
+ RGB 00, 00, 00
+
+ RGB 31, 19, 05
+ RGB 31, 31, 31
+ RGB 15, 05, 31
+ RGB 07, 07, 07
+
+ RGB 31, 21, 09
+ RGB 31, 31, 31
+ RGB 18, 09, 31
+ RGB 11, 11, 11
+
+ RGB 31, 23, 13
+ RGB 31, 31, 31
+ RGB 21, 13, 31
+ RGB 15, 15, 15
+
+ RGB 31, 25, 17
+ RGB 31, 31, 31
+ RGB 25, 17, 31
+ RGB 19, 19, 19
+
+ RGB 31, 27, 21
+ RGB 31, 31, 31
+ RGB 27, 21, 31
+ RGB 23, 23, 23
+
+ RGB 31, 29, 25
+ RGB 31, 31, 31
+ RGB 29, 26, 31
+ RGB 27, 27, 27
+
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+; e51dc
+
+Functione51dc: ; e51dc (39:51dc)
+ push de
+ ld a, SPRITE_ANIM_INDEX_29
+ call _InitSpriteAnimStruct
+ ld hl, $c
+ add hl, bc
+ ld [hl], $8
+ ld a, $3c
+ call Function3b3c
+ pop de
+
+ push de
+ ld a, SPRITE_ANIM_INDEX_29
+ call _InitSpriteAnimStruct
+ ld hl, $c
+ add hl, bc
+ ld [hl], $18
+ ld a, $3b
+ call Function3b3c
+ pop de
+
+ push de
+ ld a, SPRITE_ANIM_INDEX_29
+ call _InitSpriteAnimStruct
+ ld hl, $c
+ add hl, bc
+ ld [hl], $28
+ ld a, $39
+ call Function3b3c
+ pop de
+
+ ld a, SPRITE_ANIM_INDEX_29
+ call _InitSpriteAnimStruct
+ ld hl, $c
+ add hl, bc
+ ld [hl], $38
+ ld a, $3a
+ call Function3b3c
+ ret
+
+Functione5223: ; e5223 (39:5223)
+rept 3
+ add a
+endr
+ ld e, a
+ ld d, $0
+ ld hl, BGPals
+ add hl, de
+rept 2
+ inc hl
+endr
+ ld a, [wcf65]
+ and $3f
+ cp $1f
+ jr z, .asm_e523e
+ jr c, .asm_e523e
+ ld c, a
+ ld a, $3f
+ sub c
+.asm_e523e
+ ld c, a
+ ld b, $0
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+ push hl
+ push bc
+ ld hl, BGPals
+ ld bc, $40
+ xor a
+ call ByteFill
+ pop bc
+ pop hl
+ push hl
+ ld hl, Unknown_e5288
+rept 2
+ add hl, bc
+endr
+ ld a, [hli]
+ ld d, [hl]
+ ld e, a
+ pop hl
+ ld a, e
+ ld [hli], a
+ ld a, d
+ ld [hli], a
+ push hl
+ ld hl, Unknown_e52c8
+rept 2
+ add hl, bc
+endr
+ ld a, [hli]
+ ld d, [hl]
+ ld e, a
+ pop hl
+ ld a, e
+ ld [hli], a
+ ld a, d
+ ld [hli], a
+ push hl
+ ld hl, Unknown_e5308
+rept 2
+ add hl, bc
+endr
+ ld a, [hli]
+ ld d, [hl]
+ ld e, a
+ pop hl
+ ld a, e
+ ld [hli], a
+ ld a, d
+ ld [hli], a
+ pop af
+ ld [rSVBK], a
+ ld a, $1
+ ld [hCGBPalUpdate], a
+ ret
+; e5288 (39:5288)
+
+Unknown_e5288: ; e5288
+; Fade between black and white.
+hue = 0
+rept 32
+ RGB hue, hue, hue
+hue = hue + 1
+endr
+; e52c8
+
+Unknown_e52c8: ; e52c8
+; Fade between black and light blue.
+hue = 0
+rept 32
+ RGB 0, hue / 2, hue
+hue = hue + 1
+endr
+; e5308
+
+Unknown_e5308: ; e5308
+; Fade between black and blue.
+hue = 0
+rept 32
+ RGB 0, 0, hue
+hue = hue + 1
+endr
+; e5348
+
+Functione5348: ; e5348 (39:5348)
+ and a
+ jr nz, .asm_e5350
+ ld hl, Palette_e538d
+ jr .asm_e5353
+.asm_e5350
+ ld hl, Palette_e5395
+.asm_e5353
+ ld a, [wcf65]
+ and $7
+rept 3
+ add a
+endr
+ ld c, a
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+ push bc
+ ld de, BGPals
+ ld a, c
+ add e
+ ld e, a
+ ld a, $0
+ adc d
+ ld d, a
+ ld bc, $8
+ call CopyBytes
+ pop bc
+ ld de, UnknBGPals
+ ld a, c
+ add e
+ ld e, a
+ ld a, $0
+ adc d
+ ld d, a
+ ld bc, $8
+ call CopyBytes
+ pop af
+ ld [rSVBK], a
+ ld a, $1
+ ld [hCGBPalUpdate], a
+ ret
+; e538d (39:538d)
+
+Palette_e538d: ; e538d
+ RGB 24, 12, 09
+ RGB 31, 31, 31
+ RGB 12, 00, 31
+ RGB 00, 00, 00
+; e5395
+
+Palette_e5395: ; e5395
+ RGB 24, 12, 09
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+; e539d
+
+Functione539d: ; e539d (39:539d)
+rept 3
+ add a
+endr
+ ld e, a
+ ld d, $0
+ ld hl, BGPals
+ add hl, de
+rept 4
+ inc hl
+endr
+ ld a, [wcf65]
+ add a
+ ld c, a
+ ld b, $0
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+ push hl
+ ld hl, Palette_e53db
+ add hl, bc
+ ld a, [hli]
+ ld d, [hl]
+ ld e, a
+ pop hl
+ ld a, e
+ ld [hli], a
+ ld a, d
+ ld [hli], a
+ push hl
+ ld hl, Palette_e53fb
+ add hl, bc
+ ld a, [hli]
+ ld d, [hl]
+ ld e, a
+ pop hl
+ ld a, e
+ ld [hli], a
+ ld a, d
+ ld [hli], a
+ pop af
+ ld [rSVBK], a
+ ld a, $1
+ ld [hCGBPalUpdate], a
+ ret
+; e53db (39:53db)
+
+Palette_e53db: ; e53db
+hue = 31
+rept 8
+ RGB hue, hue, hue
+hue = hue + -1
+ RGB hue, hue, hue
+hue = hue + -2
+endr
+; e53fb
+
+Palette_e53fb: ; e53fb
+hue = 31
+rept 16
+ RGB hue, hue, hue
+hue = hue + -1
+endr
+; e541b
+
+Functione541b: ; e541b (39:541b)
+ ld a, [rSVBK]
+ push af
+ ld a, $6
+ ld [rSVBK], a
+ ld hl, w6_d000
+ decoord 0, 0
+ ld b, SCREEN_HEIGHT
+.asm_e542a
+ ld c, SCREEN_WIDTH
+.asm_e542c
+ ld a, [hli]
+ ld [de], a
+ inc de
+ dec c
+ jr nz, .asm_e542c
+ ld a, $c
+ add l
+ ld l, a
+ ld a, $0
+ adc h
+ ld h, a
+ dec b
+ jr nz, .asm_e542a
+ pop af
+ ld [rSVBK], a
+ ret
+
+Functione5441: ; e5441 (39:5441)
+ ld a, [wcf64]
+ and $3
+ jr z, Functione5451
+ cp $3
+ jr z, .asm_e544d
+ ret
+.asm_e544d
+ xor a
+ ld [hBGMapMode], a
+ ret
+
+Functione5451: ; e5451 (39:5451)
+ hlcoord 0, 0
+ ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
+.asm_e5457
+ ld a, [hl]
+ and a
+ jr z, .asm_e5462
+ cp $80
+ jr nc, .asm_e5462
+ xor $8
+ ld [hl], a
+.asm_e5462
+ inc hl
+ dec bc
+ ld a, c
+ or b
+ jr nz, .asm_e5457
+ ld a, $1
+ ld [hBGMapMode], a
+ ret
+
+Functione546d: ; e546d (39:546d)
+ ld a, [wcf64]
+ cp $24
+ ret nc
+ and $c
+ srl a
+ ld e, a
+ ld d, $0
+ ld hl, Unknown_e5496
+ add hl, de
+ ld a, [hli]
+ ld [Requested2bppSource], a
+ ld a, [hli]
+ ld [Requested2bppSource + 1], a
+ ld a, (VTiles2 tile $09) % $100
+ ld [Requested2bppDest], a
+ ld a, (VTiles2 tile $09) / $100
+ ld [Requested2bppDest + 1], a
+ ld a, $4
+ ld [Requested2bpp], a
+ ret
+; e5496 (39:5496)
+
+Unknown_e5496: ; e5496
+ dw GFX_e799d
+ dw GFX_e79dd
+ dw GFX_e7a1d
+ dw GFX_e79dd
+; e549e
+
+Functione549e: ; e549e (39:549e)
+ ld a, $1
+ ld [hCGBPalUpdate], a
+ ret
+
+Functione54a3: ; e54a3 (39:54a3)
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+ ld hl, BGPals
+ ld bc, $80
+ xor a
+ call ByteFill
+ pop af
+ ld [rSVBK], a
+ ld a, $1
+ ld [hCGBPalUpdate], a
+ call DelayFrame
+ call DelayFrame
+ ret
+
+Functione54c2: ; e54c2 (39:54c2)
+ ld a, [rSVBK]
+ push af
+ ld a, $6
+ ld [rSVBK], a
+ push de
+ ld de, w6_d000
+ call Decompress
+ pop hl
+ ld de, w6_d000
+ ld bc, $180
+ call Request2bpp
+ pop af
+ ld [rSVBK], a
+ ret
+
+Functione54de: ; e54de (39:54de)
+ ld a, [rSVBK]
+ push af
+ ld a, $6
+ ld [rSVBK], a
+ push de
+ ld de, w6_d000
+ call Decompress
+ pop hl
+ ld de, w6_d000
+ ld bc, $1ff
+ call Request2bpp
+ pop af
+ ld [rSVBK], a
+ ret
+
+Functione54fa: ; e54fa (39:54fa)
+ ld a, [rSVBK]
+ push af
+ ld a, $6
+ ld [rSVBK], a
+ push de
+ ld de, w6_d000
+ call Decompress
+ pop hl
+ ld de, w6_d000
+ ld bc, $140
+ call Request2bpp
+ pop af
+ ld [rSVBK], a
+ ret
+
+Functione5516: ; e5516 (39:5516)
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+ ld hl, LYOverrides
+ ld bc, $90
+ xor a
+ call ByteFill
+ pop af
+ ld [rSVBK], a
+ ld a, $43
+ ld [hLCDStatCustom], a
+ ret
+
+Functione552f: ; e552f (39:552f)
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+ ld a, [wcf64]
+ and $1
+ jr z, .asm_e5548
+ ld hl, LYOverrides
+ ld a, [hl]
+ inc a
+ ld bc, $5f
+ call ByteFill
+.asm_e5548
+ ld hl, LYOverrides + $5f
+ ld a, [hl]
+rept 2
+ inc a
+endr
+ ld bc, $31
+ call ByteFill
+ ld a, [LYOverrides + 0]
+ ld [hSCX], a
+ pop af
+ ld [rSVBK], a
+ ret
+
+IntroSuicuneRunGFX: ; e555d
+INCBIN "gfx/intro/suicune_run.2bpp.lz"
+; e592d
+
+IntroPichuWooperGFX: ; e592d
+INCBIN "gfx/intro/pichu_wooper.2bpp.lz"
+; e5c7d
+
+IntroBackgroundGFX: ; e5c7d
+INCBIN "gfx/intro/background.2bpp.lz"
+; e5e6d
+
+IntroTilemap004: ; e5e6d
+INCBIN "gfx/intro/004.tilemap.lz"
+; e5ecd
+
+IntroTilemap003: ; e5ecd
+INCBIN "gfx/intro/003.tilemap.lz"
+; e5edd
+
+Palette_e5edd: ; e5edd
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 0, 4, 5
+ RGB 1, 8, 5
+ RGB 4, 12, 9
+ RGB 24, 12, 9
+ RGB 0, 4, 5
+ RGB 9, 6, 8
+ RGB 8, 16, 5
+ RGB 5, 10, 4
+ RGB 31, 31, 31
+ RGB 9, 6, 8
+ RGB 18, 9, 9
+ RGB 13, 8, 9
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 2, 5, 22
+ RGB 1, 5, 12
+ RGB 31, 31, 31
+ RGB 31, 10, 25
+ RGB 31, 21, 0
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 21, 31
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+
+IntroUnownsGFX: ; e5f5d
+INCBIN "gfx/intro/unowns.2bpp.lz"
+; e634d
+
+IntroPulseGFX: ; e634d
+INCBIN "gfx/intro/pulse.2bpp.lz"
+; e63dd
+
+IntroTilemap002: ; e63dd
+INCBIN "gfx/intro/002.tilemap.lz"
+; e641d
+
+IntroTilemap001: ; e641d
+INCBIN "gfx/intro/001.tilemap.lz"
+; e642d
+
+IntroTilemap006: ; e642d
+INCBIN "gfx/intro/006.tilemap.lz"
+; e647d
+
+IntroTilemap005: ; e647d
+INCBIN "gfx/intro/005.tilemap.lz"
+; e649d
+
+IntroTilemap008: ; e649d
+INCBIN "gfx/intro/008.tilemap.lz"
+; e655d
+
+IntroTilemap007: ; e655d
+INCBIN "gfx/intro/007.tilemap.lz"
+; e65ad
+
+Palette_365ad: ; e65ad
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 10, 0, 10
+ RGB 19, 0, 19
+ RGB 31, 0, 31
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+
+IntroCrystalUnownsGFX: ; e662d
+INCBIN "gfx/intro/crystal_unowns.2bpp.lz"
+; e672d
+
+IntroTilemap017: ; e672d
+INCBIN "gfx/intro/017.tilemap.lz"
+; e676d
+
+IntroTilemap015: ; e676d
+INCBIN "gfx/intro/015.tilemap.lz"
+; e679d
+
+Palette_e679d: ; e679d
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+
+IntroSuicuneCloseGFX: ; e681d
+INCBIN "gfx/intro/suicune_close.2bpp.lz"
+; e6c3d
+
+IntroTilemap012: ; e6c3d
+INCBIN "gfx/intro/012.tilemap.lz"
+; e6d0d
+
+IntroTilemap011: ; e6d0d
+INCBIN "gfx/intro/011.tilemap.lz"
+; e6d6d
+
+Palette_e6d6d: ; e6d6d
+ RGB 24, 12, 9
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 24, 12, 9
+ RGB 31, 31, 31
+ RGB 8, 9, 31
+ RGB 0, 0, 0
+ RGB 24, 12, 9
+ RGB 12, 20, 31
+ RGB 19, 8, 31
+ RGB 0, 0, 0
+ RGB 12, 20, 31
+ RGB 8, 9, 31
+ RGB 19, 8, 31
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 12, 20, 31
+ RGB 8, 9, 31
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+
+IntroSuicuneJumpGFX: ; e6ded
+INCBIN "gfx/intro/suicune_jump.2bpp.lz"
+; e72ad
+
+IntroSuicuneBackGFX: ; e72ad
+INCBIN "gfx/intro/suicune_back.2bpp.lz"
+; e764d
+
+IntroTilemap010: ; e764d
+INCBIN "gfx/intro/010.tilemap.lz"
+; e76ad
+
+IntroTilemap009: ; e76ad
+INCBIN "gfx/intro/009.tilemap.lz"
+; e76bd
+
+IntroTilemap014: ; e76bd
+INCBIN "gfx/intro/014.tilemap.lz"
+; e778d
+
+IntroTilemap013: ; e778d
+INCBIN "gfx/intro/013.tilemap.lz"
+; e77dd
+
+Palette_e77dd: ; e77dd
+ RGB 24, 12, 9
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 24, 12, 9
+ RGB 31, 31, 31
+ RGB 8, 9, 31
+ RGB 0, 0, 0
+ RGB 24, 12, 9
+ RGB 24, 12, 9
+ RGB 24, 12, 9
+ RGB 24, 12, 9
+ RGB 24, 12, 9
+ RGB 24, 12, 9
+ RGB 24, 12, 9
+ RGB 24, 12, 9
+ RGB 24, 12, 9
+ RGB 24, 12, 9
+ RGB 24, 12, 9
+ RGB 24, 12, 9
+ RGB 24, 12, 9
+ RGB 24, 12, 9
+ RGB 24, 12, 9
+ RGB 24, 12, 9
+ RGB 24, 12, 9
+ RGB 24, 12, 9
+ RGB 24, 12, 9
+ RGB 24, 12, 9
+ RGB 24, 12, 9
+ RGB 24, 12, 9
+ RGB 24, 12, 9
+ RGB 24, 12, 9
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 12, 0, 31
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 21, 9, 0
+ RGB 21, 9, 0
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+ RGB 31, 31, 31
+ RGB 20, 20, 20
+ RGB 11, 11, 11
+ RGB 0, 0, 0
+
+IntroUnownBackGFX: ; e785d
+INCBIN "gfx/intro/unown_back.2bpp.lz"
+; e799d
+
+GFX_e799d: ; e799d
+INCBIN "gfx/unknown/0e799d.2bpp"
+GFX_e79dd: ; e79dd
+INCBIN "gfx/unknown/0e79dd.2bpp"
+GFX_e7a1d: ; e7a1d
+INCBIN "gfx/unknown/0e7a1d.2bpp"
+
+GFX_e7a5d: ; e7a5d
+INCBIN "gfx/unknown/0e7a5d.2bpp"
+
+
diff --git a/engine/debug.asm b/engine/debug.asm
new file mode 100755
index 000000000..0d2720990
--- /dev/null
+++ b/engine/debug.asm
@@ -0,0 +1,1517 @@
+ColorTest: ; 818ac
+; A debug menu to test monster and trainer palettes at runtime.
+
+ ld a, [hCGB]
+ and a
+ jr nz, .asm_818b5
+ ld a, [hSGB]
+ and a
+ ret z
+
+.asm_818b5
+ ld a, [hInMenu]
+ push af
+ ld a, $1
+ ld [hInMenu], a
+ call DisableLCD
+ call Function81948
+ call Function8197c
+ call Function819a7
+ call Function818f4
+ call EnableLCD
+ ld de, MUSIC_NONE
+ call PlayMusic
+ xor a
+ ld [wJumptableIndex], a
+ ld [wcf66], a
+ ld [wd003], a
+.asm_818de
+ ld a, [wJumptableIndex]
+ bit 7, a
+ jr nz, .asm_818f0
+ call Function81a74
+ call Function81f5e
+ call DelayFrame
+ jr .asm_818de
+
+.asm_818f0
+ pop af
+ ld [hInMenu], a
+ ret
+; 818f4
+
+Function818f4: ; 818f4
+ ld a, [wd002]
+ and a
+ jr nz, Function81911
+ ld hl, PokemonPalettes
+
+Function818fd: ; 818fd
+ ld de, OverworldMap
+ ld c, NUM_POKEMON + 1
+.asm_81902
+ push bc
+ push hl
+ call Function81928
+ pop hl
+ ld bc, 8
+ add hl, bc
+ pop bc
+ dec c
+ jr nz, .asm_81902
+ ret
+
+Function81911: ; 81911
+ ld hl, TrainerPalettes
+ ld de, OverworldMap
+ ld c, NUM_TRAINER_CLASSES
+.asm_81919
+ push bc
+ push hl
+ call Function81928
+ pop hl
+ ld bc, 4
+ add hl, bc
+ pop bc
+ dec c
+ jr nz, .asm_81919
+ ret
+; 81928
+
+Function81928: ; 81928
+ ld a, BANK(PokemonPalettes) ; BANK(TrainerPalettes)
+ call GetFarByte
+ ld [de], a
+ inc de
+ inc hl
+ ld a, BANK(PokemonPalettes) ; BANK(TrainerPalettes)
+ call GetFarByte
+ ld [de], a
+ inc de
+ inc hl
+ ld a, BANK(PokemonPalettes) ; BANK(TrainerPalettes)
+ call GetFarByte
+ ld [de], a
+ inc de
+ inc hl
+ ld a, BANK(PokemonPalettes) ; BANK(TrainerPalettes)
+ call GetFarByte
+ ld [de], a
+ inc de
+ ret
+; 81948
+
+Function81948: ; 81948
+ ld a, $1
+ ld [rVBK], a
+ ld hl, VTiles0
+ ld bc, sScratch - VTiles0
+ xor a
+ call ByteFill
+ ld a, $0
+ ld [rVBK], a
+ ld hl, VTiles0
+ ld bc, sScratch - VTiles0
+ xor a
+ call ByteFill
+ hlcoord 0, 0, AttrMap
+ ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+ xor a
+ call ByteFill
+ hlcoord 0, 0
+ ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+ xor a
+ call ByteFill
+ call ClearSprites
+ ret
+; 8197c
+
+Function8197c: ; 8197c
+ ld hl, DebugColorTestGFX + $10
+ ld de, VTiles2 tile $6a
+ ld bc, $160
+ call CopyBytes
+ ld hl, DebugColorTestGFX
+ ld de, VTiles0
+ ld bc, $10
+ call CopyBytes
+ call LoadStandardFont
+ ld hl, VTiles1
+ lb bc, 8, 0
+.asm_8199d
+ ld a, [hl]
+ xor $ff
+ ld [hli], a
+ dec bc
+ ld a, c
+ or b
+ jr nz, .asm_8199d
+ ret
+; 819a7
+
+Function819a7: ; 819a7
+ ld a, [hCGB]
+ and a
+ ret z
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+ ld hl, Palette_819f4
+ ld de, BGPals
+ ld bc, $80
+ call CopyBytes
+ ld a, $80
+ ld [rBGPI], a
+ ld hl, Palette_819f4
+ ld c, $40
+ xor a
+.asm_819c8
+ ld [rBGPD], a
+ dec c
+ jr nz, .asm_819c8
+ ld a, $80
+ ld [rOBPI], a
+ ld hl, Palette_81a34
+ ld c, $40
+.asm_819d6
+ ld a, [hli]
+ ld [rOBPD], a
+ dec c
+ jr nz, .asm_819d6
+ ld a, $94
+ ld [wc608], a
+ ld a, $52
+ ld [wc608 + 1], a
+ ld a, $4a
+ ld [wc608 + 2], a
+ ld a, $29
+ ld [wc608 + 3], a
+ pop af
+ ld [rSVBK], a
+ ret
+; 819f4
+
+Palette_819f4: ; 819f4
+ ; white
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 00, 00, 00
+
+ ; red
+ RGB 31, 00, 00
+ RGB 31, 00, 00
+ RGB 31, 00, 00
+ RGB 00, 00, 00
+
+ ; green
+ RGB 00, 31, 00
+ RGB 00, 31, 00
+ RGB 00, 31, 00
+ RGB 00, 00, 00
+
+ ; blue
+ RGB 00, 00, 31
+ RGB 00, 00, 31
+ RGB 00, 00, 31
+ RGB 00, 00, 00
+
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 00, 00, 00
+
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 00, 00, 00
+
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 00, 00, 00
+
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 00, 00, 00
+
+Palette_81a34: ; 81a34
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 00, 00, 00
+
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 00, 00, 00
+
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 00, 00, 00
+
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 00, 00, 00
+
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 00, 00, 00
+
+ ; red
+ RGB 31, 31, 31
+ RGB 31, 00, 00
+ RGB 31, 00, 00
+ RGB 00, 00, 00
+
+ ; green
+ RGB 31, 31, 31
+ RGB 00, 31, 00
+ RGB 00, 31, 00
+ RGB 00, 00, 00
+
+ ; blue
+ RGB 31, 31, 31
+ RGB 00, 00, 31
+ RGB 00, 00, 31
+ RGB 00, 00, 00
+; 81a74
+
+Function81a74: ; 81a74
+ call JoyTextDelay
+ ld a, [wJumptableIndex]
+ cp $4
+ jr nc, .asm_81a8b
+ ld hl, hJoyLast
+ ld a, [hl]
+ and SELECT
+ jr nz, .asm_81a9a
+ ld a, [hl]
+ and START
+ jr nz, .asm_81aab
+
+.asm_81a8b
+ ld a, [wJumptableIndex]
+ ld e, a
+ ld d, 0
+ ld hl, Jumptable_81acf
+rept 2
+ add hl, de
+endr
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp [hl]
+
+.asm_81a9a
+ call Function81eca
+ call Function81ac3
+ ld e, a
+ ld a, [wcf66]
+ inc a
+ cp e
+ jr c, .asm_81aba
+ xor a
+ jr .asm_81aba
+
+.asm_81aab
+ call Function81eca
+ ld a, [wcf66]
+ dec a
+ cp $ff
+ jr nz, .asm_81aba
+ call Function81ac3
+ dec a
+
+.asm_81aba
+ ld [wcf66], a
+ ld a, $0
+ ld [wJumptableIndex], a
+ ret
+; 81ac3
+
+Function81ac3: ; 81ac3
+; Looping back around the pic set.
+ ld a, [wd002]
+ and a
+ jr nz, .asm_81acc
+ ld a, NUM_POKEMON ; CELEBI
+ ret
+
+.asm_81acc
+ ld a, NUM_TRAINER_CLASSES - 1 ; MYSTICALMAN
+ ret
+; 81acf
+
+Jumptable_81acf: ; 81acf
+ dw Function81adb
+ dw Function81c18
+ dw Function81c33
+ dw Function81cc2
+ dw Function81d8e
+ dw Function81daf
+; 81adb
+
+Function81adb: ; 81adb
+ xor a
+ ld [hBGMapMode], a
+ hlcoord 0, 0
+ ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+ ld a, $6f
+ call ByteFill
+ hlcoord 1, 3
+ lb bc, 7, 18
+ ld a, $6c
+ call Bank20_FillBoxWithByte
+ hlcoord 11, 0
+ lb bc, 2, 3
+ ld a, $6d
+ call Bank20_FillBoxWithByte
+ hlcoord 16, 0
+ lb bc, 2, 3
+ ld a, $6e
+ call Bank20_FillBoxWithByte
+ call Function81bc0
+ call Function81bf4
+ ld a, [wcf66]
+ inc a
+ ld [CurPartySpecies], a
+ ld [wd265], a
+ hlcoord 0, 1
+ ld de, wd265
+ lb bc, PRINTNUM_LEADINGZEROS | 1, 3
+ call PrintNum
+ ld a, [wd002]
+ and a
+ jr nz, .asm_81b7a
+ ld a, $1
+ ld [UnownLetter], a
+ call GetPokemonName
+ hlcoord 4, 1
+ call PlaceString
+ xor a
+ ld [wc2c6], a
+ hlcoord 12, 3
+ call _PrepMonFrontpic
+ ld de, VTiles2 tile $31
+ predef GetBackpic
+ ld a, $31
+ ld [hFillBox], a
+ hlcoord 2, 4
+ lb bc, 6, 6
+ predef FillBox
+ ld a, [wd003]
+ and a
+ jr z, .asm_81b66
+ ld de, String_81baf
+ jr .asm_81b69
+
+.asm_81b66
+ ld de, String_81bb4
+
+.asm_81b69
+ hlcoord 7, 17
+ call PlaceString
+ hlcoord 0, 17
+ ld de, String_81bb9
+ call PlaceString
+ jr .asm_81ba9
+
+.asm_81b7a
+ ld a, [wd265]
+ ld [TrainerClass], a
+ callab Function3957b
+ ld de, StringBuffer1
+ hlcoord 4, 1
+ call PlaceString
+ ld de, VTiles2
+ callab GetTrainerPic
+ xor a
+ ld [TempEnemyMonSpecies], a
+ ld [hFillBox], a
+ hlcoord 2, 3
+ lb bc, 7, 7
+ predef FillBox
+
+.asm_81ba9
+ ld a, $1
+ ld [wJumptableIndex], a
+ ret
+; 81baf
+
+String_81baf: db "レア", $6f, $6f, "@" ; rare (shiny)
+String_81bb4: db "ノーマル@" ; normal
+String_81bb9: db $7a, "きりかえ▶@" ; (A) switches
+; 81bc0
+
+Function81bc0: ; 81bc0
+ decoord 0, 11, AttrMap
+ hlcoord 2, 11
+ ld a, $1
+ call Function81bde
+ decoord 0, 13, AttrMap
+ hlcoord 2, 13
+ ld a, $2
+ call Function81bde
+ decoord 0, 15, AttrMap
+ hlcoord 2, 15
+ ld a, $3
+
+Function81bde: ; 81bde
+ push af
+ ld a, $6a
+ ld [hli], a
+ ld bc, $f
+ ld a, $6b
+ call ByteFill
+ ld l, e
+ ld h, d
+ pop af
+ ld bc, $28
+ call ByteFill
+ ret
+; 81bf4
+
+Function81bf4: ; 81bf4
+ ld a, [wcf66]
+ inc a
+ ld l, a
+ ld h, $0
+rept 2
+ add hl, hl
+endr
+ ld de, OverworldMap
+ add hl, de
+ ld de, wc608
+ ld bc, 4
+ call CopyBytes
+ xor a
+ ld [wcf64], a
+ ld [wcf65], a
+ ld de, wc608
+ call Function81ea5
+ ret
+; 81c18
+
+Function81c18: ; 81c18
+ ld a, [hCGB]
+ and a
+ jr z, .asm_81c2a
+ ld a, $2
+ ld [hBGMapMode], a
+ call DelayFrame
+ call DelayFrame
+ call DelayFrame
+
+.asm_81c2a
+ call WaitBGMap
+ ld a, $2
+ ld [wJumptableIndex], a
+ ret
+; 81c33
+
+Function81c33: ; 81c33
+ ld a, [hCGB]
+ and a
+ jr z, .asm_81c69
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+ ld hl, BGPals
+ ld de, wc608
+ ld c, $1
+ call Function81ee3
+ hlcoord 10, 2
+ ld de, wc608
+ call Function81ca7
+ hlcoord 15, 2
+ ld de, wc608 + 2
+ call Function81ca7
+ ld a, $1
+ ld [hCGBPalUpdate], a
+ ld a, $3
+ ld [wJumptableIndex], a
+ pop af
+ ld [rSVBK], a
+ ret
+
+.asm_81c69
+ ld hl, wcda9
+ ld a, $1
+ ld [hli], a
+ ld a, $ff
+ ld [hli], a
+ ld a, $7f
+ ld [hli], a
+ ld a, [wc608]
+ ld [hli], a
+ ld a, [wc608 + 1]
+ ld [hli], a
+ ld a, [wc608 + 2]
+ ld [hli], a
+ ld a, [wc608 + 3]
+ ld [hli], a
+ xor a
+rept 2
+ ld [hli], a
+endr
+ ld [hl], a
+ ld hl, wcda9
+ call Function81f0c
+ hlcoord 10, 2
+ ld de, wc608
+ call Function81ca7
+ hlcoord 15, 2
+ ld de, wc608 + 2
+ call Function81ca7
+ ld a, $3
+ ld [wJumptableIndex], a
+ ret
+; 81ca7
+
+Function81ca7: ; 81ca7
+rept 3
+ inc hl
+endr
+ ld a, [de]
+ call Function81cbc
+ ld a, [de]
+ swap a
+ call Function81cbc
+ inc de
+ ld a, [de]
+ call Function81cbc
+ ld a, [de]
+ swap a
+
+Function81cbc: ; 81cbc
+ and $f
+ add $70
+ ld [hld], a
+ ret
+; 81cc2
+
+Function81cc2: ; 81cc2
+ ld a, [hJoyLast]
+ and B_BUTTON
+ jr nz, .asm_81cdf
+ ld a, [hJoyLast]
+ and A_BUTTON
+ jr nz, .asm_81ce5
+ ld a, [wcf64]
+ and $3
+ ld e, a
+ ld d, 0
+ ld hl, Jumptable_81d02
+rept 2
+ add hl, de
+endr
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp [hl]
+
+.asm_81cdf
+ ld a, $4
+ ld [wJumptableIndex], a
+ ret
+
+.asm_81ce5
+ ld a, [wd002]
+ and a
+ ret nz
+ ld a, [wd003]
+ xor $4
+ ld [wd003], a
+ ld c, a
+ ld b, 0
+ ld hl, PokemonPalettes
+ add hl, bc
+ call Function818fd
+ ld a, $0
+ ld [wJumptableIndex], a
+ ret
+; 81d02
+
+Jumptable_81d02: ; 81d02
+ dw Function81d0a
+ dw Function81d34
+ dw Function81d46
+ dw Function81d58
+; 81d0a
+
+Function81d0a: ; 81d0a
+ ld hl, hJoyLast
+ ld a, [hl]
+ and D_DOWN
+ jr nz, Function81d89
+ ld a, [hl]
+ and D_LEFT
+ jr nz, .asm_81d1d
+ ld a, [hl]
+ and D_RIGHT
+ jr nz, .asm_81d28
+ ret
+
+.asm_81d1d
+ xor a
+ ld [wcf65], a
+ ld de, wc608
+ call Function81ea5
+ ret
+
+.asm_81d28
+ ld a, $1
+ ld [wcf65], a
+ ld de, wc608 + 2
+ call Function81ea5
+ ret
+
+Function81d34: ; 81d34
+ ld hl, hJoyLast
+ ld a, [hl]
+ and D_DOWN
+ jr nz, Function81d89
+ ld a, [hl]
+ and D_UP
+ jr nz, Function81d84
+ ld hl, wc608 + 10
+ jr Function81d63
+
+Function81d46: ; 81d46
+ ld hl, hJoyLast
+ ld a, [hl]
+ and D_DOWN
+ jr nz, Function81d89
+ ld a, [hl]
+ and D_UP
+ jr nz, Function81d84
+ ld hl, wc608 + 11
+ jr Function81d63
+
+Function81d58: ; 81d58
+ ld hl, hJoyLast
+ ld a, [hl]
+ and D_UP
+ jr nz, Function81d84
+ ld hl, wc608 + 12
+
+Function81d63: ; 81d63
+ ld a, [hJoyLast]
+ and D_RIGHT
+ jr nz, Function81d70
+ ld a, [hJoyLast]
+ and D_LEFT
+ jr nz, Function81d77
+ ret
+
+Function81d70: ; 81d70
+ ld a, [hl]
+ cp $1f
+ ret nc
+ inc [hl]
+ jr Function81d7b
+
+Function81d77: ; 81d77
+ ld a, [hl]
+ and a
+ ret z
+ dec [hl]
+
+Function81d7b: ; 81d7b
+ call Function81e67
+ ld a, $2
+ ld [wJumptableIndex], a
+ ret
+
+Function81d84: ; 81d84
+ ld hl, wcf64
+ dec [hl]
+ ret
+
+Function81d89: ; 81d89
+ ld hl, wcf64
+ inc [hl]
+ ret
+; 81d8e
+
+Function81d8e: ; 81d8e
+ hlcoord 0, 10
+ ld bc, $a0
+ ld a, $6f
+ call ByteFill
+ hlcoord 2, 12
+ ld de, String_81fcd
+ call PlaceString
+ xor a
+ ld [wd004], a
+ call Function81df4
+ ld a, $5
+ ld [wJumptableIndex], a
+ ret
+; 81daf
+
+Function81daf: ; 81daf
+ ld hl, hJoyPressed
+ ld a, [hl]
+ and B_BUTTON
+ jr nz, .asm_81dbb
+ call Function81dc7
+ ret
+
+.asm_81dbb
+ ld a, $0
+ ld [wJumptableIndex], a
+ ret
+; 81dc1
+
+Function81dc1: ; 81dc1
+ ld hl, wJumptableIndex
+ set 7, [hl]
+ ret
+; 81dc7
+
+Function81dc7: ; 81dc7
+ ld hl, hJoyLast
+ ld a, [hl]
+ and D_UP
+ jr nz, .asm_81dd5
+ ld a, [hl]
+ and D_DOWN
+ jr nz, .asm_81de2
+ ret
+
+.asm_81dd5
+ ld a, [wd004]
+ cp $3b
+ jr z, .asm_81ddf
+ inc a
+ jr .asm_81ded
+
+.asm_81ddf
+ xor a
+ jr .asm_81ded
+
+.asm_81de2
+ ld a, [wd004]
+ and a
+ jr z, .asm_81deb
+ dec a
+ jr .asm_81ded
+
+.asm_81deb
+ ld a, $3b
+
+.asm_81ded
+ ld [wd004], a
+ call Function81df4
+ ret
+; 81df4
+
+Function81df4: ; 81df4
+ hlcoord 10, 11
+ call Function81e5e
+ hlcoord 10, 12
+ call Function81e5e
+ hlcoord 10, 13
+ call Function81e5e
+ hlcoord 10, 14
+ call Function81e5e
+ ld a, [wd004]
+ inc a
+ ld [wd265], a
+ predef GetTMHMMove
+ ld a, [wd265]
+ ld [wd262], a
+ call GetMoveName
+ hlcoord 10, 12
+ call PlaceString
+ ld a, [wd004]
+ call Function81e55
+ ld [CurItem], a
+ predef CanLearnTMHMMove
+ ld a, c
+ and a
+ ld de, String_81e46
+ jr nz, .asm_81e3f
+ ld de, String_81e4d
+
+.asm_81e3f
+ hlcoord 10, 14
+ call PlaceString
+ ret
+; 81e46
+
+String_81e46: db "おぼえられる@" ; can be taught
+String_81e4d: db "おぼえられない@" ; cannot be taught
+; 81e55
+
+Function81e55: ; 81e55
+ cp $32
+ jr c, .asm_81e5b
+rept 2
+ inc a
+endr
+
+.asm_81e5b
+ add $bf
+ ret
+; 81e5e
+
+Function81e5e: ; 81e5e
+ ld bc, $a
+ ld a, $6f
+ call ByteFill
+ ret
+; 81e67
+
+Function81e67: ; 81e67
+ ld a, [wc608 + 10]
+ and $1f
+ ld e, a
+ ld a, [wc608 + 11]
+ and $7
+ sla a
+ swap a
+ or e
+ ld e, a
+ ld a, [wc608 + 11]
+ and $18
+ sla a
+ swap a
+ ld d, a
+ ld a, [wc608 + 12]
+ and $1f
+ sla a
+ sla a
+ or d
+ ld d, a
+ ld a, [wcf65]
+ and a
+ jr z, .asm_81e9c
+ ld a, e
+ ld [wc608 + 2], a
+ ld a, d
+ ld [wc608 + 3], a
+ ret
+
+.asm_81e9c
+ ld a, e
+ ld [wc608], a
+ ld a, d
+ ld [wc608 + 1], a
+ ret
+; 81ea5
+
+Function81ea5: ; 81ea5
+ ld a, [de]
+ and $1f
+ ld [wc608 + 10], a
+ ld a, [de]
+ and $e0
+ swap a
+ srl a
+ ld b, a
+ inc de
+ ld a, [de]
+ and $3
+ swap a
+ srl a
+ or b
+ ld [wc608 + 11], a
+ ld a, [de]
+ and $7c
+ srl a
+ srl a
+ ld [wc608 + 12], a
+ ret
+; 81eca
+
+Function81eca: ; 81eca
+ ld a, [wcf66]
+ inc a
+ ld l, a
+ ld h, $0
+rept 2
+ add hl, hl
+endr
+ ld de, OverworldMap
+ add hl, de
+ ld e, l
+ ld d, h
+ ld hl, wc608
+ ld bc, 4
+ call CopyBytes
+ ret
+; 81ee3
+
+Function81ee3: ; 81ee3
+.asm_81ee3
+ ld a, $ff
+ ld [hli], a
+ ld a, $7f
+ ld [hli], a
+ ld a, [de]
+ inc de
+ ld [hli], a
+ ld a, [de]
+ inc de
+ ld [hli], a
+ ld a, [de]
+ inc de
+ ld [hli], a
+ ld a, [de]
+ inc de
+ ld [hli], a
+ xor a
+rept 2
+ ld [hli], a
+endr
+ dec c
+ jr nz, .asm_81ee3
+ ret
+; 81efc
+
+Bank20_FillBoxWithByte: ; 81efc
+; For some reason, we have another copy of FillBoxWithByte here
+.row
+ push bc
+ push hl
+.col
+ ld [hli], a
+ dec c
+ jr nz, .col
+ pop hl
+ ld bc, SCREEN_WIDTH
+ add hl, bc
+ pop bc
+ dec b
+ jr nz, .row
+ ret
+; 81f0c
+
+Function81f0c: ; 81f0c
+ ld a, [wcfbe]
+ push af
+ set 7, a
+ ld [wcfbe], a
+ call Function81f1d
+ pop af
+ ld [wcfbe], a
+ ret
+; 81f1d
+
+Function81f1d: ; 81f1d
+ ld a, [hl]
+ and $7
+ ret z
+ ld b, a
+.asm_81f22
+ push bc
+ xor a
+ ld [rJOYP], a
+ ld a, $30
+ ld [rJOYP], a
+ ld b, $10
+.asm_81f2c
+ ld e, $8
+ ld a, [hli]
+ ld d, a
+.asm_81f30
+ bit 0, d
+ ld a, $10
+ jr nz, .asm_81f38
+ ld a, $20
+
+.asm_81f38
+ ld [rJOYP], a
+ ld a, $30
+ ld [rJOYP], a
+ rr d
+ dec e
+ jr nz, .asm_81f30
+ dec b
+ jr nz, .asm_81f2c
+ ld a, $20
+ ld [rJOYP], a
+ ld a, $30
+ ld [rJOYP], a
+ ld de, 7000
+.asm_81f51
+ nop
+ nop
+ nop
+ dec de
+ ld a, d
+ or e
+ jr nz, .asm_81f51
+ pop bc
+ dec b
+ jr nz, .asm_81f22
+ ret
+; 81f5e
+
+Function81f5e: ; 81f5e
+ ld a, $6f
+ hlcoord 10, 0
+ ld [hl], a
+ hlcoord 15, 0
+ ld [hl], a
+ hlcoord 1, 11
+ ld [hl], a
+ hlcoord 1, 13
+ ld [hl], a
+ hlcoord 1, 15
+ ld [hl], a
+ ld a, [wJumptableIndex]
+ cp $3
+ jr nz, .asm_81fc9
+ ld a, [wcf64]
+ and a
+ jr z, .asm_81f8d
+ dec a
+ hlcoord 1, 11
+ ld bc, 2 * SCREEN_WIDTH
+ call AddNTimes
+ ld [hl], $ed
+
+.asm_81f8d
+ ld a, [wcf65]
+ and a
+ jr z, .asm_81f98
+ hlcoord 15, 0
+ jr .asm_81f9b
+
+.asm_81f98
+ hlcoord 10, 0
+
+.asm_81f9b
+ ld [hl], $ed
+ ld b, $70
+ ld c, $5
+ ld hl, Sprites
+ ld de, wc608 + 10
+ call .asm_81fb7
+ ld de, wc608 + 11
+ call .asm_81fb7
+ ld de, wc608 + 12
+ call .asm_81fb7
+ ret
+
+.asm_81fb7
+ ld a, b
+ ld [hli], a
+ ld a, [de]
+rept 2
+ add a
+endr
+ add $18
+ ld [hli], a
+ xor a
+ ld [hli], a
+ ld a, c
+ ld [hli], a
+ ld a, $10
+ add b
+ ld b, a
+ inc c
+ ret
+
+.asm_81fc9
+ call ClearSprites
+ ret
+; 81fcd
+
+String_81fcd: ; 81fcd
+ db "おわりますか?" ; Are you finished?
+ next "はい", $f2, $f2, $f2, $7a ; YES (A)
+ next "いいえ", $f2, $f2, $7b ; NO (B)
+ db "@"
+; 81fe3
+
+DebugColorTestGFX:
+INCBIN "gfx/debug/color_test.2bpp"
+
+
+TilesetColorTest:
+ ret
+ xor a
+ ld [wJumptableIndex], a
+ ld [wcf64], a
+ ld [wcf65], a
+ ld [wcf66], a
+ ld [hMapAnims], a
+ call ClearSprites
+ call OverworldTextModeSwitch
+ call Function3200
+ xor a
+ ld [hBGMapMode], a
+ ld de, DebugColorTestGFX + $10
+ ld hl, VTiles2 tile $6a
+ lb bc, BANK(DebugColorTestGFX), $16
+ call Request2bpp
+ ld de, DebugColorTestGFX
+ ld hl, VTiles1
+ lb bc, BANK(DebugColorTestGFX), 1
+ call Request2bpp
+ ld a, VBGMap1 / $100
+ ld [hBGMapAddress + 1], a
+ hlcoord 0, 0
+ ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+ ld a, $6f
+ call ByteFill
+ hlcoord 0, 0, AttrMap
+ ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+ ld a, $7
+ call ByteFill
+ ld de, $15
+ ld a, $6c
+ call Function821d2
+ ld de, $1a
+ ld a, $6d
+ call Function821d2
+ ld de, $1f
+ ld a, $6e
+ call Function821d2
+ ld de, $24
+ ld a, $6f
+ call Function821d2
+ call Function821f4
+ call Function8220f
+ call Function3200
+ ld [wJumptableIndex], a
+ ld a, $40
+ ld [hWY], a
+ ret
+; 821d2
+
+Function821d2: ; 821d2
+ hlcoord 0, 0
+ call Function821de
+
+Function821d8: ; 821d8
+ ld a, [wcf64]
+ hlcoord 0, 0, AttrMap
+
+Function821de: ; 821de
+ add hl, de
+rept 4
+ ld [hli], a
+endr
+ ld bc, $10
+ add hl, bc
+rept 4
+ ld [hli], a
+endr
+ ld bc, $10
+ add hl, bc
+rept 4
+ ld [hli], a
+endr
+ ret
+; 821f4
+
+Function821f4: ; 821f4
+ hlcoord 2, 4
+ call Function82203
+ hlcoord 2, 6
+ call Function82203
+ hlcoord 2, 8
+
+Function82203: ; 82203
+ ld a, $6a
+ ld [hli], a
+ ld bc, $10 - 1
+ ld a, $6b
+ call ByteFill
+ ret
+; 8220f
+
+Function8220f: ; 8220f
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+ ld a, [wcf64]
+ ld l, a
+ ld h, $0
+rept 3
+ add hl, hl
+endr
+ ld de, UnknBGPals
+ add hl, de
+ ld de, wc608
+ ld bc, 8
+ call CopyBytes
+ ld de, wc608
+ call Function81ea5
+ pop af
+ ld [rSVBK], a
+ ret
+; 82236
+
+
+Function82236: ; 82236
+ ld hl, hJoyLast
+ ld a, [hl]
+ and SELECT
+ jr nz, .loop7
+ ld a, [hl]
+ and B_BUTTON
+ jr nz, .asm_82299
+ call Function822f0
+ ret
+
+.loop7
+ ld hl, wcf64
+ ld a, [hl]
+ inc a
+ and $7
+ cp $7
+ jr nz, .asm_82253
+ xor a
+
+.asm_82253
+ ld [hl], a
+ ld de, $15
+ call Function821d8
+ ld de, $1a
+ call Function821d8
+ ld de, $1f
+ call Function821d8
+ ld de, $24
+ call Function821d8
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+ ld hl, BGPals
+ ld a, [wcf64]
+ ld bc, 8
+ call AddNTimes
+ ld de, wc608
+ ld bc, 8
+ call CopyBytes
+ pop af
+ ld [rSVBK], a
+ ld a, $2
+ ld [hBGMapMode], a
+ ld c, 3
+ call DelayFrames
+ ld a, $1
+ ld [hBGMapMode], a
+ ret
+
+.asm_82299
+ call ClearSprites
+ ld a, [hWY]
+ xor $d0
+ ld [hWY], a
+ ret
+; 822a3
+
+Function822a3: ; 822a3
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+ ld hl, BGPals
+ ld a, [wcf64]
+ ld bc, 8
+ call AddNTimes
+ ld e, l
+ ld d, h
+ ld hl, wc608
+ ld bc, 8
+ call CopyBytes
+ hlcoord 1, 0
+ ld de, wc608
+ call Function81ca7
+ hlcoord 6, 0
+ ld de, wc608 + 2
+ call Function81ca7
+ hlcoord 11, 0
+ ld de, wc608 + 4
+ call Function81ca7
+ hlcoord 16, 0
+ ld de, wc608 + 6
+ call Function81ca7
+ pop af
+ ld [rSVBK], a
+ ld a, $1
+ ld [hCGBPalUpdate], a
+ call DelayFrame
+ ret
+; 822f0
+
+Function822f0: ; 822f0
+ ld a, [wcf65]
+ and 3
+ ld e, a
+ ld d, 0
+ ld hl, .jumptable
+rept 2
+ add hl, de
+endr
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp [hl]
+; 82301
+
+.jumptable: ; 82301
+ dw Function82309
+ dw Function82339
+ dw Function8234b
+ dw Function8235d
+; 82309
+
+Function82309: ; 82309
+ ld hl, hJoyLast
+ ld a, [hl]
+ and D_DOWN
+ jr nz, Function8238c
+ ld a, [hl]
+ and D_LEFT
+ jr nz, .asm_8231c
+ ld a, [hl]
+ and D_RIGHT
+ jr nz, .asm_82322
+ ret
+
+.asm_8231c
+ ld a, [wcf66]
+ dec a
+ jr .asm_82326
+
+.asm_82322
+ ld a, [wcf66]
+ inc a
+
+.asm_82326
+ and $3
+ ld [wcf66], a
+ ld e, a
+ ld d, $0
+ ld hl, wc608
+rept 2
+ add hl, de
+endr
+ ld e, l
+ ld d, h
+ call Function81ea5
+ ret
+
+Function82339: ; 82338
+ ld hl, hJoyLast
+ ld a, [hl]
+ and D_DOWN
+ jr nz, Function8238c
+ ld a, [hl]
+ and D_UP
+ jr nz, Function82387
+ ld hl, wc608 + 10
+ jr Function82368
+
+Function8234b: ; 8234b
+ ld hl, hJoyLast
+ ld a, [hl]
+ and D_DOWN
+ jr nz, Function8238c
+ ld a, [hl]
+ and D_UP
+ jr nz, Function82387
+ ld hl, wc608 + 11
+ jr Function82368
+
+Function8235d: ; 8235d
+ ld hl, hJoyLast
+ ld a, [hl]
+ and D_UP
+ jr nz, Function82387
+ ld hl, wc608 + 12
+
+Function82368: ; 82368
+ ld a, [hJoyLast]
+ and D_RIGHT
+ jr nz, .asm_82375
+ ld a, [hJoyLast]
+ and D_LEFT
+ jr nz, .asm_8237c
+ ret
+
+.asm_82375
+ ld a, [hl]
+ cp $1f
+ ret nc
+ inc [hl]
+ jr .asm_82380
+
+.asm_8237c
+ ld a, [hl]
+ and a
+ ret z
+ dec [hl]
+
+.asm_82380
+ call Function82391
+ call Function822a3
+ ret
+
+Function82387: ; 82387
+ ld hl, wcf65
+ dec [hl]
+ ret
+
+Function8238c: ; 8238c
+ ld hl, wcf65
+ inc [hl]
+ ret
+; 82391
+
+Function82391: ; 82391
+ ld a, [wc608 + 10]
+ and $1f
+ ld e, a
+ ld a, [wc608 + 11]
+ and $7
+ sla a
+ swap a
+ or e
+ ld e, a
+ ld a, [wc608 + 11]
+ and $18
+ sla a
+ swap a
+ ld d, a
+ ld a, [wc608 + 12]
+ and $1f
+ sla a
+ sla a
+ or d
+ ld d, a
+ ld a, [wcf66]
+ ld c, a
+ ld b, $0
+ ld hl, wc608
+rept 2
+ add hl, bc
+endr
+ ld a, e
+ ld [hli], a
+ ld [hl], d
+ ret
+; 823c6
+
+Function823c6: ; 823c6
+ ret
+
+Function823c7: ; 823c7
+ ret
+; 823c8
diff --git a/engine/decorations.asm b/engine/decorations.asm
new file mode 100755
index 000000000..1fa5cac7e
--- /dev/null
+++ b/engine/decorations.asm
@@ -0,0 +1,1438 @@
+InitDecorations: ; 26751 (9:6751)
+ ld a, DECO_FEATHERY_BED
+ ld [Bed], a
+ ld a, DECO_TOWN_MAP
+ ld [Poster], a
+ ret
+
+_KrisDecorationMenu: ; 0x2675c
+ ld a, [wcf76]
+ push af
+ ld hl, .MenuDataHeader
+ call LoadMenuDataHeader
+ xor a
+ ld [wd1ee], a
+ ld a, $1
+ ld [wd1ef], a
+.top_loop
+ ld a, [wd1ef]
+ ld [wMenuCursorBuffer], a
+ call .FindCategoriesWithOwnedDecos
+ call DoNthMenu
+ ld a, [MenuSelection2]
+ ld [wd1ef], a
+ jr c, .exit_menu
+ ld a, [MenuSelection]
+ ld hl, .pointers
+ call MenuJumptable
+ jr nc, .top_loop
+
+.exit_menu
+ call ExitMenu
+ pop af
+ ld [wcf76], a
+ ld a, [wd1ee]
+ ld c, a
+ ret
+; 0x2679a
+
+.MenuDataHeader: ; 0x2679a
+ db $40 ; flags
+ db 00, 05 ; start coords
+ db 17, 19 ; end coords
+ dw .MenuData2
+ db 1 ; default option
+; 0x267a2
+
+.MenuData2: ; 0x267a2
+ db $a0 ; flags
+ db 0 ; items
+ dw wd002
+ dw PlaceNthMenuStrings
+ dw .pointers
+; 0x267aa
+
+.pointers: ; 267aa
+ dw DecoBedMenu, .bed
+ dw DecoCarpetMenu, .carpet
+ dw DecoPlantMenu, .plant
+ dw DecoPosterMenu, .poster
+ dw DecoConsoleMenu, .game
+ dw DecoOrnamentMenu, .ornament
+ dw DecoBigDollMenu, .big_doll
+ dw DecoExitMenu, .exit
+
+.bed db "BED@"
+.carpet db "CARPET@"
+.plant db "PLANT@"
+.poster db "POSTER@"
+.game db "GAME CONSOLE@"
+.ornament db "ORNAMENT@"
+.big_doll db "BIG DOLL@"
+.exit db "EXIT@"
+; 26806
+
+.FindCategoriesWithOwnedDecos: ; 26806
+ xor a
+ ld [wcf76], a
+ call .ClearStringBuffer2
+ call .FindOwndDecos
+ ld a, 7
+ call .AppendToStringBuffer2
+ ld hl, StringBuffer2
+ ld de, wd002
+ ld bc, ITEM_NAME_LENGTH
+ call CopyBytes
+ ret
+
+.ClearStringBuffer2: ; 26822 (9:6822)
+ ld hl, StringBuffer2
+ xor a
+ ld [hli], a
+ ld bc, ITEM_NAME_LENGTH - 1
+ ld a, -1
+ call ByteFill
+ ret
+
+.AppendToStringBuffer2: ; 26830 (9:6830)
+ ld hl, StringBuffer2
+ inc [hl]
+ ld e, [hl]
+ ld d, 0
+ add hl, de
+ ld [hl], a
+ ret
+
+.FindOwndDecos: ; 2683a (9:683a)
+ ld hl, .jumptable
+.loop
+ ld a, [hli]
+ ld e, a
+ ld a, [hli]
+ ld d, a
+ or e
+ jr z, .done
+ push hl
+ call _de_
+ pop hl
+ jr nc, .next
+ ld a, [hl]
+ push hl
+ call .AppendToStringBuffer2
+ pop hl
+.next
+ inc hl
+ jr .loop
+.done
+ ret
+; 26855 (9:6855)
+
+.jumptable: ; 26855
+ dwb FindOwnedBeds, 0 ; bed
+ dwb FindOwnedCarpets, 1 ; carpet
+ dwb FindOwnedPlants, 2 ; plant
+ dwb FindOwnedPosters, 3 ; poster
+ dwb FindOwnedConsoles, 4 ; game console
+ dwb FindOwnedOrnaments, 5 ; ornament
+ dwb FindOwnedBigDolls, 6 ; big doll
+ dw 0 ; end
+; 2686c
+
+Deco_FillTempWithMinusOne: ; 2686c
+ xor a
+ ld hl, wd002
+ ld [hli], a
+ ld a, -1
+ ld bc, $10
+ call ByteFill
+ ret
+; 2687a
+
+CheckAllDecorationFlags: ; 2687a
+.loop
+ ld a, [hli]
+ cp -1
+ jr z, .done
+ push hl
+ push af
+ ld b, CHECK_FLAG
+ call DecorationFlagAction
+ ld a, c
+ and a
+ pop bc
+ ld a, b
+ call nz, AppendDecoIndex
+ pop hl
+ jr .loop
+
+.done
+ ret
+; 26891
+
+AppendDecoIndex: ; 26891
+ ld hl, wd002
+ inc [hl]
+ ld e, [hl]
+ ld d, $0
+ add hl, de
+ ld [hl], a
+ ret
+; 2689b
+
+FindOwnedDecosInCategory: ; 2689b
+ push bc
+ push hl
+ call Deco_FillTempWithMinusOne
+ pop hl
+ call CheckAllDecorationFlags
+ pop bc
+ ld a, [wd002]
+ and a
+ ret z
+
+ ld a, c
+ call AppendDecoIndex
+ ld a, 0
+ call AppendDecoIndex
+ scf
+ ret
+; 268b5
+
+DecoBedMenu: ; 268b5
+ call FindOwnedBeds
+ call PopulateDecoCategoryMenu
+ xor a
+ ret
+; 268bd
+
+FindOwnedBeds: ; 268bd
+ ld hl, .beds
+ ld c, DECO_BEDS
+ jp FindOwnedDecosInCategory
+; 268c5
+
+.beds: ; 268c5
+ db DECO_FEATHERY_BED ; 2
+ db DECO_PINK_BED ; 3
+ db DECO_POLKADOT_BED ; 4
+ db DECO_PIKACHU_BED ; 5
+ db -1
+; 268ca
+
+DecoCarpetMenu: ; 268ca
+ call FindOwnedCarpets
+ call PopulateDecoCategoryMenu
+ xor a
+ ret
+; 268d2
+
+FindOwnedCarpets: ; 268d2
+ ld hl, .carpets
+ ld c, DECO_CARPETS
+ jp FindOwnedDecosInCategory
+; 268da
+
+.carpets: ; 268da
+ db DECO_RED_CARPET ; 7
+ db DECO_BLUE_CARPET ; 8
+ db DECO_YELLOW_CARPET ; 9
+ db DECO_GREEN_CARPET ; a
+ db -1
+; 268df
+
+DecoPlantMenu: ; 268df
+ call FindOwnedPlants
+ call PopulateDecoCategoryMenu
+ xor a
+ ret
+; 268e7
+
+FindOwnedPlants: ; 268e7
+ ld hl, .plants
+ ld c, DECO_0B
+ jp FindOwnedDecosInCategory
+; 268ef
+
+.plants: ; 268ef
+ db DECO_MAGNAPLANT ; c
+ db DECO_TROPICPLANT ; d
+ db DECO_JUMBOPLANT ; e
+ db -1
+; 268f3
+
+DecoPosterMenu: ; 268f3
+ call FindOwnedPosters
+ call PopulateDecoCategoryMenu
+ xor a
+ ret
+; 268fb
+
+FindOwnedPosters: ; 268fb
+ ld hl, .posters
+ ld c, DECO_POSTERS
+ jp FindOwnedDecosInCategory
+; 26903
+
+.posters: ; 26903
+ db DECO_TOWN_MAP ; 10
+ db DECO_PIKACHU_POSTER ; 11
+ db DECO_CLEFAIRY_POSTER ; 12
+ db DECO_JIGGLYPUFF_POSTER ; 13
+ db -1
+; 26908
+
+DecoConsoleMenu: ; 26908
+ call FindOwnedConsoles
+ call PopulateDecoCategoryMenu
+ xor a
+ ret
+; 26910
+
+FindOwnedConsoles: ; 26910
+ ld hl, .consoles
+ ld c, DECO_CONSOLES
+ jp FindOwnedDecosInCategory
+; 26918
+
+.consoles: ; 26918
+ db DECO_FAMICOM ; 15
+ db DECO_SNES ; 16
+ db DECO_N64 ; 17
+ db DECO_VIRTUAL_BOY ; 18
+ db -1
+; 2691d
+
+DecoOrnamentMenu: ; 2691d
+ call FindOwnedOrnaments
+ call PopulateDecoCategoryMenu
+ xor a
+ ret
+; 26925
+
+FindOwnedOrnaments: ; 26925
+ ld hl, .ornaments
+ ld c, DECO_DOLLS
+ jp FindOwnedDecosInCategory
+; 2692d
+
+.ornaments: ; 2692d
+ db DECO_PIKACHU_DOLL ; 1e
+ db DECO_SURF_PIKACHU_DOLL ; 1f
+ db DECO_CLEFAIRY_DOLL ; 20
+ db DECO_JIGGLYPUFF_DOLL ; 21
+ db DECO_BULBASAUR_DOLL ; 22
+ db DECO_CHARMANDER_DOLL ; 23
+ db DECO_SQUIRTLE_DOLL ; 24
+ db DECO_POLIWAG_DOLL ; 25
+ db DECO_DIGLETT_DOLL ; 26
+ db DECO_STARMIE_DOLL ; 27
+ db DECO_MAGIKARP_DOLL ; 28
+ db DECO_ODDISH_DOLL ; 29
+ db DECO_GENGAR_DOLL ; 2a
+ db DECO_SHELLDER_DOLL ; 2b
+ db DECO_GRIMER_DOLL ; 2c
+ db DECO_VOLTORB_DOLL ; 2d
+ db DECO_WEEDLE_DOLL ; 2e
+ db DECO_UNOWN_DOLL ; 2f
+ db DECO_GEODUDE_DOLL ; 30
+ db DECO_MACHOP_DOLL ; 31
+ db DECO_TENTACOOL_DOLL ; 32
+ db DECO_GOLD_TROPHY_DOLL ; 33
+ db DECO_SILVER_TROPHY_DOLL ; 34
+ db -1
+; 26945
+
+DecoBigDollMenu: ; 26945
+ call FindOwnedBigDolls
+ call PopulateDecoCategoryMenu
+ xor a
+ ret
+; 2694d
+
+FindOwnedBigDolls: ; 2694d
+ ld hl, .big_dolls
+ ld c, DECO_BIG_DOLLS
+ jp FindOwnedDecosInCategory
+; 26955
+
+.big_dolls: ; 26955
+ db DECO_BIG_SNORLAX_DOLL ; 1a
+ db DECO_BIG_ONIX_DOLL ; 1b
+ db DECO_BIG_LAPRAS_DOLL ; 1c
+ db -1
+; 26959
+
+DecoExitMenu: ; 26959
+ scf
+ ret
+; 2695b
+
+PopulateDecoCategoryMenu: ; 2695b
+ ld a, [wd002]
+ and a
+ jr z, .empty
+ cp 8
+ jr nc, .beyond_eight
+ xor a
+ ld [wcf76], a
+ ld hl, .NonscrollingMenuDataHeader
+ call LoadMenuDataHeader
+ call DoNthMenu
+ jr c, .no_action_1
+ call DoDecorationAction2
+
+.no_action_1
+ call ExitMenu
+ ret
+
+.beyond_eight
+ ld hl, wd002
+ ld e, [hl]
+ dec [hl]
+ ld d, 0
+ add hl, de
+ ld [hl], -1
+ call LoadStandardMenuDataHeader
+ ld hl, .ScrollingMenuDataHeader
+ call CopyMenuDataHeader
+ xor a
+ ld [hBGMapMode], a
+ call InitScrollingMenu
+ xor a
+ ld [wMenuScrollPosition], a
+ call HandleScrollingMenu
+ ld a, [wcf73]
+ cp 2
+ jr z, .no_action_2
+ call DoDecorationAction2
+
+.no_action_2
+ call ExitMenu
+ ret
+
+.empty
+ ld hl, .Text_nothing_to_choose
+ call MenuTextBoxBackup
+ ret
+; 269b0
+
+.Text_nothing_to_choose: ; 0x269b0
+ ; There's nothing to choose.
+ text_jump UnknownText_0x1bc471
+ db "@"
+; 0x269b5
+
+.NonscrollingMenuDataHeader: ; 0x269b5
+ db $40 ; flags
+ db 00, 00 ; start coords
+ db 17, 19 ; end coords
+ dw .NonscrollingMenuData2
+ db 1 ; default option
+; 0x269bd
+
+.NonscrollingMenuData2: ; 0x269bd
+ db $a0 ; flags
+ db 0 ; items
+ dw wd002
+ dw DecorationMenuFunction
+ dw DecorationAttributes
+; 0x269c5
+
+.ScrollingMenuDataHeader: ; 0x269c5
+ db $40 ; flags
+ db 01, 01 ; start coords
+ db 16, 18 ; end coords
+ dw .ScrollingMenuData2
+ db 1 ; default option
+; 0x269cd
+
+.ScrollingMenuData2: ; 0x269cd
+ db $10 ; flags
+ db 8, 0 ; rows, columns
+ db 1 ; horizontal spacing
+ dbw 0, wd002 ; text pointer
+ dba DecorationMenuFunction
+ dbw 0, 0
+ dbw 0, 0
+; 269dd
+
+
+GetDecorationData: ; 269dd
+ ld hl, DecorationAttributes
+ ld bc, 6
+ call AddNTimes
+ ret
+; 269e7
+
+GetDecorationName: ; 269e7
+ push hl
+ call GetDecorationData
+ call GetDecoName
+ pop hl
+ call CopyName2
+ ret
+; 269f3
+
+DecorationMenuFunction: ; 269f3
+ ld a, [MenuSelection]
+ push de
+ call GetDecorationData
+ call GetDecoName
+ pop hl
+ call PlaceString
+ ret
+; 26a02
+
+DoDecorationAction2: ; 26a02
+ ld a, [MenuSelection]
+ call GetDecorationData
+ ld de, 2 ; function 2
+ add hl, de
+ ld a, [hl]
+ ld hl, .DecoActions
+ rst JumpTable
+ ret
+; 26a12
+
+.DecoActions: ; 26a12
+ dw DecoAction_nothing
+ dw DecoAction_setupbed
+ dw DecoAction_putawaybed
+ dw DecoAction_setupcarpet
+ dw DecoAction_putawaycarpet
+ dw DecoAction_setupplant
+ dw DecoAction_putawayplant
+ dw DecoAction_setupposter
+ dw DecoAction_putawayposter
+ dw DecoAction_setupconsole
+ dw DecoAction_putawayconsole
+ dw DecoAction_setupbigdoll
+ dw DecoAction_putawaybigdoll
+ dw DecoAction_setupornament
+ dw DecoAction_putawayornament
+; 26a30
+
+
+GetDecorationFlag: ; 26a30
+ call GetDecorationData
+ ld de, 3 ; event flag
+ add hl, de
+ ld a, [hli]
+ ld d, [hl]
+ ld e, a
+ ret
+; 26a3b
+
+DecorationFlagAction: ; 26a3b
+ push bc
+ call GetDecorationFlag
+ pop bc
+ call EventFlagAction
+ ret
+; 26a44
+
+GetDecorationSprite: ; 26a44
+ ld a, c
+ call GetDecorationData
+ ld de, 5 ; sprite
+ add hl, de
+ ld a, [hl]
+ ld c, a
+ ret
+; 26a4f
+
+decoration: MACRO
+ ; type, name, command, event flag, tile/sprite
+ db \1, \2, \3
+ dw \4
+ db \5
+ENDM
+
+DecorationAttributes: ; 26a4f
+ decoration DECO_PLANT, $00, $0, EVENT_GAVE_KURT_APRICORNS, $00
+ decoration DECO_PLANT, PUT_IT_AWAY, PUT_AWAY_BED, EVENT_GAVE_KURT_APRICORNS, $00
+ decoration DECO_BED, FEATHERY_BED, SET_UP_BED, EVENT_DECO_BED_1, $1b
+ decoration DECO_BED, PINK_BED, SET_UP_BED, EVENT_DECO_BED_2, $1c
+ decoration DECO_BED, POLKADOT_BED, SET_UP_BED, EVENT_DECO_BED_3, $1d
+ decoration DECO_BED, PIKACHU_BED, SET_UP_BED, EVENT_DECO_BED_4, $1e
+ decoration DECO_PLANT, PUT_IT_AWAY, PUT_AWAY_CARPET, EVENT_GAVE_KURT_APRICORNS, $00
+ decoration DECO_CARPET, RED_CARPET, SET_UP_CARPET, EVENT_DECO_CARPET_1, $08
+ decoration DECO_CARPET, BLUE_CARPET, SET_UP_CARPET, EVENT_DECO_CARPET_2, $0b
+ decoration DECO_CARPET, YELLOW_CARPET, SET_UP_CARPET, EVENT_DECO_CARPET_3, $0e
+ decoration DECO_CARPET, GREEN_CARPET, SET_UP_CARPET, EVENT_DECO_CARPET_4, $11
+ decoration DECO_PLANT, PUT_IT_AWAY, PUT_AWAY_PLANT, EVENT_GAVE_KURT_APRICORNS, $00
+ decoration DECO_PLANT, MAGNAPLANT, SET_UP_PLANT, EVENT_DECO_PLANT_1, $20
+ decoration DECO_PLANT, TROPICPLANT, SET_UP_PLANT, EVENT_DECO_PLANT_2, $21
+ decoration DECO_PLANT, JUMBOPLANT, SET_UP_PLANT, EVENT_DECO_PLANT_3, $22
+ decoration DECO_PLANT, PUT_IT_AWAY, PUT_AWAY_POSTER, EVENT_GAVE_KURT_APRICORNS, $00
+ decoration DECO_PLANT, TOWN_MAP_D, SET_UP_POSTER, EVENT_DECO_PLANT_4, $1f
+ decoration DECO_POSTER, PIKACHU, SET_UP_POSTER, EVENT_DECO_POSTER_1, $23
+ decoration DECO_POSTER, CLEFAIRY, SET_UP_POSTER, EVENT_DECO_POSTER_2, $24
+ decoration DECO_POSTER, JIGGLYPUFF, SET_UP_POSTER, EVENT_DECO_POSTER_3, $25
+ decoration DECO_PLANT, PUT_IT_AWAY, PUT_AWAY_CONSOLE, EVENT_GAVE_KURT_APRICORNS, $00
+ decoration DECO_PLANT, FAMICOM, SET_UP_CONSOLE, EVENT_DECO_FAMICOM, SPRITE_FAMICOM
+ decoration DECO_PLANT, SUPER_NES, SET_UP_CONSOLE, EVENT_DECO_SNES, SPRITE_SNES
+ decoration DECO_PLANT, NINTENDO_64, SET_UP_CONSOLE, EVENT_DECO_N64, SPRITE_N64
+ decoration DECO_PLANT, VIRTUAL_BOY, SET_UP_CONSOLE, EVENT_DECO_VIRTUAL_BOY, SPRITE_VIRTUAL_BOY
+ decoration DECO_PLANT, PUT_IT_AWAY, PUT_AWAY_BIG_DOLL, EVENT_GAVE_KURT_APRICORNS, $00
+ decoration DECO_BIGDOLL, SNORLAX, SET_UP_BIG_DOLL, EVENT_DECO_BIG_SNORLAX_DOLL, SPRITE_BIG_SNORLAX
+ decoration DECO_BIGDOLL, ONIX, SET_UP_BIG_DOLL, EVENT_DECO_BIG_ONIX_DOLL, SPRITE_BIG_ONIX
+ decoration DECO_BIGDOLL, LAPRAS, SET_UP_BIG_DOLL, EVENT_DECO_BIG_LAPRAS_DOLL, SPRITE_BIG_LAPRAS
+ decoration DECO_PLANT, PUT_IT_AWAY, PUT_AWAY_DOLL, EVENT_GAVE_KURT_APRICORNS, $00
+ decoration DECO_DOLL, PIKACHU, SET_UP_DOLL, EVENT_DECO_PIKACHU_DOLL, SPRITE_PIKACHU
+ decoration DECO_PLANT, SURF_PIKA_DOLL, SET_UP_DOLL, EVENT_DECO_SURFING_PIKACHU_DOLL, SPRITE_SURFING_PIKACHU
+ decoration DECO_DOLL, CLEFAIRY, SET_UP_DOLL, EVENT_DECO_CLEFAIRY_DOLL, SPRITE_CLEFAIRY
+ decoration DECO_DOLL, JIGGLYPUFF, SET_UP_DOLL, EVENT_DECO_JIGGLYPUFF_DOLL, SPRITE_JIGGLYPUFF
+ decoration DECO_DOLL, BULBASAUR, SET_UP_DOLL, EVENT_DECO_BULBASAUR_DOLL, SPRITE_BULBASAUR
+ decoration DECO_DOLL, CHARMANDER, SET_UP_DOLL, EVENT_DECO_CHARMANDER_DOLL, SPRITE_CHARMANDER
+ decoration DECO_DOLL, SQUIRTLE, SET_UP_DOLL, EVENT_DECO_SQUIRTLE_DOLL, SPRITE_SQUIRTLE
+ decoration DECO_DOLL, POLIWAG, SET_UP_DOLL, EVENT_DECO_POLIWAG_DOLL, SPRITE_POLIWAG
+ decoration DECO_DOLL, DIGLETT, SET_UP_DOLL, EVENT_DECO_DIGLETT_DOLL, SPRITE_DIGLETT
+ decoration DECO_DOLL, STARYU, SET_UP_DOLL, EVENT_DECO_STARMIE_DOLL, SPRITE_STARMIE
+ decoration DECO_DOLL, MAGIKARP, SET_UP_DOLL, EVENT_DECO_MAGIKARP_DOLL, SPRITE_MAGIKARP
+ decoration DECO_DOLL, ODDISH, SET_UP_DOLL, EVENT_DECO_ODDISH_DOLL, SPRITE_ODDISH
+ decoration DECO_DOLL, GENGAR, SET_UP_DOLL, EVENT_DECO_GENGAR_DOLL, SPRITE_GENGAR
+ decoration DECO_DOLL, SHELLDER, SET_UP_DOLL, EVENT_DECO_SHELLDER_DOLL, SPRITE_SHELLDER
+ decoration DECO_DOLL, GRIMER, SET_UP_DOLL, EVENT_DECO_GRIMER_DOLL, SPRITE_GRIMER
+ decoration DECO_DOLL, VOLTORB, SET_UP_DOLL, EVENT_DECO_VOLTORB_DOLL, SPRITE_VOLTORB
+ decoration DECO_DOLL, WEEDLE, SET_UP_DOLL, EVENT_DECO_WEEDLE_DOLL, SPRITE_WEEDLE
+ decoration DECO_DOLL, UNOWN, SET_UP_DOLL, EVENT_DECO_UNOWN_DOLL, SPRITE_UNOWN
+ decoration DECO_DOLL, GEODUDE, SET_UP_DOLL, EVENT_DECO_GEODUDE_DOLL, SPRITE_GEODUDE
+ decoration DECO_DOLL, MACHOP, SET_UP_DOLL, EVENT_DECO_MACHOP_DOLL, SPRITE_MACHOP
+ decoration DECO_DOLL, TENTACOOL, SET_UP_DOLL, EVENT_DECO_TENTACOOL_DOLL, SPRITE_TENTACOOL
+ decoration DECO_PLANT, GOLD_TROPHY, SET_UP_DOLL, EVENT_DECO_GOLD_TROPHY, SPRITE_GOLD_TROPHY
+ decoration DECO_PLANT, SILVER_TROPHY, SET_UP_DOLL, EVENT_DECO_SILVER_TROPHY, SPRITE_SILVER_TROPHY
+; 26b8d
+
+
+DecorationNames: ; 26b8d
+ db "CANCEL@"
+ db "PUT IT AWAY@"
+ db "MAGNAPLANT@"
+ db "TROPICPLANT@"
+ db "JUMBOPLANT@"
+ db "TOWN MAP@"
+ db "NES@"
+ db "SUPER NES@"
+ db "NINTENDO 64@"
+ db "VIRTUAL BOY@"
+ db "GOLD TROPHY@"
+ db "SILVER TROPHY@"
+ db "SURF PIKACHU DOLL@"
+ db " BED@"
+ db " CARPET@"
+ db " POSTER@"
+ db " DOLL@"
+ db "BIG @"
+ db "FEATHERY@"
+ db "PIKACHU@"
+ db "PINK@"
+ db "POLKADOT@"
+ db "RED@"
+ db "BLUE@"
+ db "YELLOW@"
+ db "GREEN@"
+; 26c72
+
+GetDecoName: ; 26c72
+ ld a, [hli]
+ ld e, [hl]
+ ld bc, StringBuffer2
+ push bc
+ ld hl, .NameFunctions
+ rst JumpTable
+ pop de
+ ret
+; 26c7e
+
+.NameFunctions: ; 26c7e
+ dw .invalid
+ dw .plant
+ dw .bed
+ dw .carpet
+ dw .poster
+ dw .doll
+ dw .bigdoll
+; 26c8c
+
+
+.invalid: ; 26c8c
+ ret
+; 26c8d
+
+.plant: ; 26c8d
+ ld a, e
+ jr .getdeconame
+
+.bed: ; 26c90
+ call .plant
+ ld a, _BED
+ jr .getdeconame
+
+.carpet: ; 26c97
+ call .plant
+ ld a, _CARPET
+ jr .getdeconame
+
+.poster: ; 26c9e
+ ld a, e
+ call .getpokename
+ ld a, _POSTER
+ jr .getdeconame
+
+.doll: ; 26ca6
+ ld a, e
+ call .getpokename
+ ld a, _DOLL
+ jr .getdeconame
+
+.bigdoll: ; 26cae
+ push de
+ ld a, BIG_
+ call .getdeconame
+ pop de
+ ld a, e
+ jr .getpokename
+
+.unused: ; 26cb8
+ push de
+ call .getdeconame
+ pop de
+ ld a, e
+ jr .getdeconame
+
+.getpokename: ; 26cc0
+ push bc
+ ld [wd265], a
+ call GetPokemonName
+ pop bc
+ jr .copy
+
+.getdeconame: ; 26cca
+ call ._getdeconame
+ jr .copy
+
+._getdeconame: ; 26ccf
+ push bc
+ ld hl, DecorationNames
+ call GetNthString
+ ld d, h
+ ld e, l
+ pop bc
+ ret
+
+.copy: ; 26cda
+ ld h, b
+ ld l, c
+ call CopyName2
+ dec hl
+ ld b, h
+ ld c, l
+ ret
+; 26ce3
+
+DecoAction_nothing: ; 26ce3
+ scf
+ ret
+; 26ce5
+
+DecoAction_setupbed: ; 26ce5
+ ld hl, Bed
+ jp DecoAction_TrySetItUp
+; 26ceb
+
+DecoAction_putawaybed: ; 26ceb
+ ld hl, Bed
+ jp DecoAction_TryPutItAway
+; 26cf1
+
+DecoAction_setupcarpet: ; 26cf1
+ ld hl, Carpet
+ jp DecoAction_TrySetItUp
+; 26cf7
+
+DecoAction_putawaycarpet: ; 26cf7
+ ld hl, Carpet
+ jp DecoAction_TryPutItAway
+; 26cfd
+
+DecoAction_setupplant: ; 26cfd
+ ld hl, Plant
+ jp DecoAction_TrySetItUp
+; 26d03
+
+DecoAction_putawayplant: ; 26d03
+ ld hl, Plant
+ jp DecoAction_TryPutItAway
+; 26d09
+
+DecoAction_setupposter: ; 26d09
+ ld hl, Poster
+ jp DecoAction_TrySetItUp
+; 26d0f
+
+DecoAction_putawayposter: ; 26d0f
+ ld hl, Poster
+ jp DecoAction_TryPutItAway
+; 26d15
+
+DecoAction_setupconsole: ; 26d15
+ ld hl, Console
+ jp DecoAction_TrySetItUp
+; 26d1b
+
+DecoAction_putawayconsole: ; 26d1b
+ ld hl, Console
+ jp DecoAction_TryPutItAway
+; 26d21
+
+DecoAction_setupbigdoll: ; 26d21
+ ld hl, BigDoll
+ jp DecoAction_TrySetItUp
+; 26d27
+
+DecoAction_putawaybigdoll: ; 26d27
+ ld hl, BigDoll
+ jp DecoAction_TryPutItAway
+; 26d2d
+
+DecoAction_TrySetItUp: ; 26d2d
+ ld a, [hl]
+ ld [Buffer1], a
+ push hl
+ call DecoAction_SetItUp
+ jr c, .failed
+ ld a, 1
+ ld [wd1ee], a
+ pop hl
+ ld a, [MenuSelection]
+ ld [hl], a
+ xor a
+ ret
+
+.failed
+ pop hl
+ xor a
+ ret
+; 26d46
+
+DecoAction_SetItUp: ; 26d46
+; See if there's anything of the same type already out
+ ld a, [Buffer1]
+ and a
+ jr z, .nothingthere
+; See if that item is already out
+ ld b, a
+ ld a, [MenuSelection]
+ cp b
+ jr z, .alreadythere
+; Put away the item that's already out, and set up the new one
+ ld a, [MenuSelection]
+ ld hl, StringBuffer4
+ call GetDecorationName
+ ld a, [Buffer1]
+ ld hl, StringBuffer3
+ call GetDecorationName
+ ld hl, DecoText_PutAwayAndSetUp
+ call MenuTextBoxBackup
+ xor a
+ ret
+
+.nothingthere
+ ld a, [MenuSelection]
+ ld hl, StringBuffer3
+ call GetDecorationName
+ ld hl, DecoText_SetUpTheDeco
+ call MenuTextBoxBackup
+ xor a
+ ret
+
+.alreadythere
+ ld hl, DecoText_AlreadySetUp
+ call MenuTextBoxBackup
+ scf
+ ret
+; 26d86
+
+DecoAction_TryPutItAway: ; 26d86
+; If there is no item of that type already set, there is nothing to put away.
+ ld a, [hl]
+ ld [Buffer1], a
+ xor a
+ ld [hl], a
+ ld a, [Buffer1]
+ and a
+ jr z, .nothingthere
+; Put it away.
+ ld a, $1
+ ld [wd1ee], a
+ ld a, [Buffer1]
+ ld [MenuSelection], a
+ ld hl, StringBuffer3
+ call GetDecorationName
+ ld hl, DecoText_PutAwayTheDeco
+ call MenuTextBoxBackup
+ xor a
+ ret
+
+.nothingthere
+ ld hl, DecoText_NothingToPutAway
+ call MenuTextBoxBackup
+ xor a
+ ret
+; 26db3
+
+DecoAction_setupornament: ; 26db3
+ ld hl, UnknownText_0x26e41
+ call DecoAction_AskWhichSide
+ jr c, .cancel
+ call DecoAction_SetItUp_Ornament
+ jr c, .cancel
+ ld a, $1
+ ld [wd1ee], a
+ jr DecoAction_FinishUp_Ornament
+
+.cancel
+ xor a
+ ret
+
+DecoAction_putawayornament: ; 26dc9
+ ld hl, DecoText_WhichSide
+ call DecoAction_AskWhichSide
+ jr nc, .incave
+ xor a
+ ret
+
+.incave
+ call DecoAction_PutItAway_Ornament
+
+DecoAction_FinishUp_Ornament: ; 26dd6
+ call QueryWhichSide
+ ld a, [wd1ec]
+ ld [hl], a
+ ld a, [wd1ed]
+ ld [de], a
+ xor a
+ ret
+; 26de3
+
+DecoAction_SetItUp_Ornament: ; 26de3
+ ld a, [wd1ec]
+ and a
+ jr z, .nothingthere
+ ld b, a
+ ld a, [MenuSelection]
+ cp b
+ jr z, .failed
+ ld a, b
+ ld hl, StringBuffer3
+ call GetDecorationName
+ ld a, [MenuSelection]
+ ld hl, StringBuffer4
+ call GetDecorationName
+ ld a, [MenuSelection]
+ ld [wd1ec], a
+ call .getwhichside
+ ld hl, DecoText_PutAwayAndSetUp
+ call MenuTextBoxBackup
+ xor a
+ ret
+
+.nothingthere
+ ld a, [MenuSelection]
+ ld [wd1ec], a
+ call .getwhichside
+ ld a, [MenuSelection]
+ ld hl, StringBuffer3
+ call GetDecorationName
+ ld hl, DecoText_SetUpTheDeco
+ call MenuTextBoxBackup
+ xor a
+ ret
+
+.failed
+ ld hl, DecoText_AlreadySetUp
+ call MenuTextBoxBackup
+ scf
+ ret
+; 26e33
+
+.getwhichside: ; 26e33
+ ld a, [MenuSelection]
+ ld b, a
+ ld a, [wd1ed]
+ cp b
+ ret nz
+ xor a
+ ld [wd1ed], a
+ ret
+; 26e41
+
+UnknownText_0x26e41: ; 0x26e41
+ ; Which side do you want to put it on?
+ text_jump UnknownText_0x1bc48c
+ db "@"
+; 0x26e46
+
+DecoAction_PutItAway_Ornament: ; 26e46
+ ld a, [wd1ec]
+ and a
+ jr z, .nothingthere
+ ld hl, StringBuffer3
+ call GetDecorationName
+ ld a, $1
+ ld [wd1ee], a
+ xor a
+ ld [wd1ec], a
+ ld hl, DecoText_PutAwayTheDeco
+ call MenuTextBoxBackup
+ xor a
+ ret
+
+.nothingthere
+ ld hl, DecoText_NothingToPutAway
+ call MenuTextBoxBackup
+ xor a
+ ret
+; 26e6b
+
+DecoText_WhichSide: ; 0x26e6b
+ ; Which side do you want to put away?
+ text_jump UnknownText_0x1bc4b2
+ db "@"
+; 0x26e70
+
+DecoAction_AskWhichSide: ; 26e70
+ call MenuTextBox
+ ld hl, MenuDataHeader_0x26eab
+ call GetMenu2
+ call ExitMenu
+ call CopyMenuData2
+ jr c, .nope
+ ld a, [MenuSelection2]
+ cp 3
+ jr z, .nope
+ ld [Buffer2], a
+ call QueryWhichSide
+ ld a, [hl]
+ ld [wd1ec], a
+ ld a, [de]
+ ld [wd1ed], a
+ xor a
+ ret
+
+.nope
+ scf
+ ret
+; 26e9a
+
+QueryWhichSide: ; 26e9a
+ ld hl, RightOrnament
+ ld de, LeftOrnament
+ ld a, [Buffer2]
+ cp 1
+ ret z
+ push hl
+ ld h, d
+ ld l, e
+ pop de
+ ret
+; 26eab
+
+MenuDataHeader_0x26eab: ; 0x26eab
+ db $40 ; flags
+ db 00, 00 ; start coords
+ db 07, 13 ; end coords
+ dw MenuData2_0x26eb3
+ db 1 ; default option
+; 0x26eb3
+
+MenuData2_0x26eb3: ; 0x26eb3
+ db $80 ; flags
+ db 3 ; items
+ db "RIGHT SIDE@"
+ db "LEFT SIDE@"
+ db "CANCEL@"
+; 0x26ed1
+
+DecoText_PutAwayTheDeco: ; 0x26ed1
+ ; Put away the @ .
+ text_jump UnknownText_0x1bc4d7
+ db "@"
+; 0x26ed6
+
+DecoText_NothingToPutAway: ; 0x26ed6
+ ; There's nothing to put away.
+ text_jump UnknownText_0x1bc4ec
+ db "@"
+; 0x26edb
+
+DecoText_SetUpTheDeco: ; 0x26edb
+ ; Set up the @ .
+ text_jump UnknownText_0x1bc509
+ db "@"
+; 0x26ee0
+
+DecoText_PutAwayAndSetUp: ; 0x26ee0
+ ; Put away the @ and set up the @ .
+ text_jump UnknownText_0x1bc51c
+ db "@"
+; 0x26ee5
+
+DecoText_AlreadySetUp: ; 0x26ee5
+ ; That's already set up.
+ text_jump UnknownText_0x1bc546
+ db "@"
+; 0x26eea
+
+GetDecorationName_c_de: ; 26eea
+ ld a, c
+ ld h, d
+ ld l, e
+ call GetDecorationName
+ ret
+; 26ef1
+
+DecorationFlagAction_c: ; 26ef1
+ ld a, c
+ jp DecorationFlagAction
+; 26ef5
+
+
+GetDecorationName_c: ; 26ef5 (9:6ef5)
+ ld a, c
+ call GetDecorationID
+ ld hl, StringBuffer1
+ push hl
+ call GetDecorationName
+ pop de
+ ret
+
+
+SetSpecificDecorationFlag: ; 26f02
+ ld a, c
+ call GetDecorationID
+ ld b, SET_FLAG
+ call DecorationFlagAction
+ ret
+; 26f0c
+
+GetDecorationID: ; 26f0c
+ push hl
+ push de
+ ld e, a
+ ld d, 0
+ ld hl, DecorationIDs
+ add hl, de
+ ld a, [hl]
+ pop de
+ pop hl
+ ret
+; 26f19
+
+SetAllDecorationFlags: ; 26f19
+ ld hl, DecorationIDs
+.loop
+ ld a, [hli]
+ cp -1
+ jr z, .done
+ push hl
+ ld b, SET_FLAG
+ call DecorationFlagAction
+ pop hl
+ jr .loop
+
+.done
+ ret
+; 26f2b
+
+DecorationIDs: ; 26f2b
+ db DECO_FEATHERY_BED ; 2
+ db DECO_PINK_BED ; 3
+ db DECO_POLKADOT_BED ; 4
+ db DECO_PIKACHU_BED ; 5
+
+ db DECO_RED_CARPET ; 7
+ db DECO_BLUE_CARPET ; 8
+ db DECO_YELLOW_CARPET ; 9
+ db DECO_GREEN_CARPET ; a
+
+ db DECO_MAGNAPLANT ; c
+ db DECO_TROPICPLANT ; d
+ db DECO_JUMBOPLANT ; e
+
+ db DECO_TOWN_MAP ; 10
+ db DECO_PIKACHU_POSTER ; 11
+ db DECO_CLEFAIRY_POSTER ; 12
+ db DECO_JIGGLYPUFF_POSTER ; 13
+
+ db DECO_FAMICOM ; 15
+ db DECO_SNES ; 16
+ db DECO_N64 ; 17
+ db DECO_VIRTUAL_BOY ; 18
+
+ db DECO_PIKACHU_DOLL ; 1e
+ db DECO_SURF_PIKACHU_DOLL ; 1f
+ db DECO_CLEFAIRY_DOLL ; 20
+ db DECO_JIGGLYPUFF_DOLL ; 21
+ db DECO_BULBASAUR_DOLL ; 22
+ db DECO_CHARMANDER_DOLL ; 23
+ db DECO_SQUIRTLE_DOLL ; 24
+ db DECO_POLIWAG_DOLL ; 25
+ db DECO_DIGLETT_DOLL ; 26
+ db DECO_STARMIE_DOLL ; 27
+ db DECO_MAGIKARP_DOLL ; 28
+ db DECO_ODDISH_DOLL ; 29
+ db DECO_GENGAR_DOLL ; 2a
+ db DECO_SHELLDER_DOLL ; 2b
+ db DECO_GRIMER_DOLL ; 2c
+ db DECO_VOLTORB_DOLL ; 2d
+ db DECO_WEEDLE_DOLL ; 2e
+ db DECO_UNOWN_DOLL ; 2f
+ db DECO_GEODUDE_DOLL ; 30
+ db DECO_MACHOP_DOLL ; 31
+ db DECO_TENTACOOL_DOLL ; 32
+ db DECO_BIG_SNORLAX_DOLL ; 1a
+ db DECO_BIG_ONIX_DOLL ; 1b
+ db DECO_BIG_LAPRAS_DOLL ; 1c
+Trophys:
+ db DECO_GOLD_TROPHY_DOLL ; 33
+ db DECO_SILVER_TROPHY_DOLL ; 34
+ db -1
+; 26f59
+
+DescribeDecoration:: ; 26f59
+ ld a, b
+ ld hl, JumpTable_DecorationDesc
+ rst JumpTable
+ ret
+; 26f5f
+
+JumpTable_DecorationDesc: ; 26f5f
+ dw DecorationDesc_Poster
+ dw DecorationDesc_LeftOrnament
+ dw DecorationDesc_RightOrnament
+ dw DecorationDesc_GiantOrnament
+ dw DecorationDesc_Console
+; 26f69
+
+DecorationDesc_Poster: ; 26f69
+ ld a, [Poster]
+ ld hl, DecorationDesc_PosterPointers
+ ld de, 3
+ call IsInArray
+ jr c, .nope
+ ld de, DecorationDesc_NullPoster
+ ld b, BANK(DecorationDesc_NullPoster)
+ ret
+
+.nope
+ ld b, BANK(DecorationDesc_TownMapPoster)
+ inc hl
+ ld a, [hli]
+ ld d, [hl]
+ ld e, a
+ ret
+; 26f84
+
+DecorationDesc_PosterPointers: ; 26f84
+ dbw DECO_TOWN_MAP, DecorationDesc_TownMapPoster
+ dbw DECO_PIKACHU_POSTER, DecorationDesc_PikachuPoster
+ dbw DECO_CLEFAIRY_POSTER, DecorationDesc_ClefairyPoster
+ dbw DECO_JIGGLYPUFF_POSTER, DecorationDesc_JigglypuffPoster
+ db -1
+; 26f91
+
+DecorationDesc_TownMapPoster: ; 0x26f91
+ loadfont
+ writetext .TownMapText
+ closetext
+ special Special_TownMap
+ loadmovesprites
+ end
+; 0x26f9b
+
+.TownMapText: ; 0x26f9b
+ ; It's the TOWN MAP.
+ text_jump UnknownText_0x1bc55d
+ db "@"
+; 0x26fa0
+
+DecorationDesc_PikachuPoster: ; 0x26fa0
+ jumptext .PikaPosterText
+; 0x26fa3
+
+.PikaPosterText: ; 0x26fa3
+ ; It's a poster of a cute PIKACHU.
+ text_jump UnknownText_0x1bc570
+ db "@"
+; 0x26fa8
+
+DecorationDesc_ClefairyPoster: ; 0x26fa8
+ jumptext .ClefairyPosterText
+; 0x26fab
+
+.ClefairyPosterText: ; 0x26fab
+ ; It's a poster of a cute CLEFAIRY.
+ text_jump UnknownText_0x1bc591
+ db "@"
+; 0x26fb0
+
+DecorationDesc_JigglypuffPoster: ; 0x26fb0
+ jumptext .JigglypuffPosterText
+; 0x26fb3
+
+.JigglypuffPosterText: ; 0x26fb3
+ ; It's a poster of a cute JIGGLYPUFF.
+ text_jump UnknownText_0x1bc5b3
+ db "@"
+; 0x26fb8
+
+DecorationDesc_NullPoster: ; 26fb8
+ end
+; 26fb9
+
+DecorationDesc_LeftOrnament: ; 26fb9
+ ld a, [LeftOrnament]
+ jr DecorationDesc_OrnamentOrConsole
+
+DecorationDesc_RightOrnament: ; 26fbe
+ ld a, [RightOrnament]
+ jr DecorationDesc_OrnamentOrConsole
+
+DecorationDesc_Console: ; 26fc3
+ ld a, [Console]
+ jr DecorationDesc_OrnamentOrConsole
+
+DecorationDesc_OrnamentOrConsole: ; 26fc8
+ ld c, a
+ ld de, StringBuffer3
+ call GetDecorationName_c_de
+ ld b, BANK(.OrnamentConsoleScript)
+ ld de, .OrnamentConsoleScript
+ ret
+; 26fd5
+
+.OrnamentConsoleScript: ; 26fd5
+ jumptext .OrnamentConsoleText
+; 26fd8
+
+.OrnamentConsoleText: ; 0x26fd8
+ ; It's an adorable @ .
+ text_jump UnknownText_0x1bc5d7
+ db "@"
+; 0x26fdd
+
+DecorationDesc_GiantOrnament: ; 26fdd
+ ld b, BANK(.BigDollScript)
+ ld de, .BigDollScript
+ ret
+; 26fe3
+
+.BigDollScript: ; 26fe3
+ jumptext .BigDollText
+; 26fe6
+
+.BigDollText: ; 0x26fe6
+ ; A giant doll! It's fluffy and cuddly.
+ text_jump UnknownText_0x1bc5ef
+ db "@"
+; 0x26feb
+
+ToggleMaptileDecorations: ; 26feb
+ lb de, 0, 4
+ ld a, [Bed]
+ call SetDecorationTile
+ lb de, 7, 4
+ ld a, [Plant]
+ call SetDecorationTile
+ lb de, 6, 0
+ ld a, [Poster]
+ call SetDecorationTile
+ call SetPosterVisibility
+ lb de, 0, 0
+ call PadCoords_de
+ ld a, [Carpet]
+ and a
+ ret z
+ call _GetDecorationSprite
+ ld [hl], a
+ push af
+ lb de, 0, 2
+ call PadCoords_de
+ pop af
+ inc a
+ ld [hli], a
+ inc a
+ ld [hli], a
+ dec a
+ ld [hl], a
+ ret
+; 27027
+
+SetPosterVisibility: ; 27027
+ ld b, SET_FLAG
+ ld a, [Poster]
+ and a
+ jr nz, .ok
+ ld b, RESET_FLAG
+
+.ok
+ ld de, EVENT_KRISS_ROOM_POSTER
+ jp EventFlagAction
+; 27037
+
+SetDecorationTile: ; 27037
+ push af
+ call PadCoords_de
+ pop af
+ and a
+ ret z
+ call _GetDecorationSprite
+ ld [hl], a
+ ret
+; 27043
+
+ToggleDecorationsVisibility: ; 27043
+ ld de, EVENT_KRISS_HOUSE_2F_CONSOLE
+ ld hl, VariableSprites + SPRITE_CONSOLE - SPRITE_VARS
+ ld a, [Console]
+ call ToggleDecorationVisibility
+ ld de, EVENT_KRISS_HOUSE_2F_DOLL_1
+ ld hl, VariableSprites + SPRITE_DOLL_1 - SPRITE_VARS
+ ld a, [LeftOrnament]
+ call ToggleDecorationVisibility
+ ld de, EVENT_KRISS_HOUSE_2F_DOLL_2
+ ld hl, VariableSprites + SPRITE_DOLL_2 - SPRITE_VARS
+ ld a, [RightOrnament]
+ call ToggleDecorationVisibility
+ ld de, EVENT_KRISS_HOUSE_2F_BIG_DOLL
+ ld hl, VariableSprites + SPRITE_BIG_DOLL - SPRITE_VARS
+ ld a, [BigDoll]
+ call ToggleDecorationVisibility
+ ret
+; 27074
+
+ToggleDecorationVisibility: ; 27074
+ and a
+ jr z, .hide
+ call _GetDecorationSprite
+ ld [hl], a
+ ld b, RESET_FLAG
+ jp EventFlagAction
+
+.hide
+ ld b, SET_FLAG
+ jp EventFlagAction
+; 27085
+
+_GetDecorationSprite: ; 27085
+ ld c, a
+ push de
+ push hl
+ callba GetDecorationSprite
+ pop hl
+ pop de
+ ld a, c
+ ret
+; 27092
diff --git a/engine/diploma.asm b/engine/diploma.asm
index 7699cf930..8f8ef9e99 100644
--- a/engine/diploma.asm
+++ b/engine/diploma.asm
@@ -1,5 +1,5 @@
-Function1dd702: ; 1dd702
+_Diploma: ; 1dd702
call Function1dd709
call WaitPressAorB_BlinkCursor
ret
@@ -31,7 +31,7 @@ Function1dd709: ; 1dd709
call PlaceString
call EnableLCD
call WaitBGMap
- ld b, $8
+ ld b, SCGB_08
call GetSGBLayout
call SetPalettes
call DelayFrame
diff --git a/engine/dummy_game.asm b/engine/dummy_game.asm
index 86d505e0e..4e8dad1a3 100755
--- a/engine/dummy_game.asm
+++ b/engine/dummy_game.asm
@@ -8,7 +8,7 @@ _DummyGame: ; e1e5b (38:5e5b)
Functione1e67: ; e1e67 (38:5e67)
call DisableLCD
- ld b, $8
+ ld b, SCGB_08
call GetSGBLayout
callab Function8cf53
ld hl, LZ_e2221
@@ -123,7 +123,7 @@ Functione1f1c: ; e1f1c
.asm_e1f30
ld de, $341c
ld a, $c
- call Function3b2a
+ call _InitSpriteAnimStruct
ld a, $5
ld [wc702], a
ld hl, wJumptableIndex
diff --git a/engine/engine_flags.asm b/engine/engine_flags.asm
index 5baa52cc4..74113b4a5 100644
--- a/engine/engine_flags.asm
+++ b/engine/engine_flags.asm
@@ -1,3 +1,90 @@
+EngineFlagAction:: ; 80430
+; Do action b on engine flag de
+;
+; b = 0: reset flag
+; = 1: set flag
+; > 1: check flag, result in c
+;
+; Setting/resetting does not return a result.
+
+
+; 16-bit flag ids are considered invalid, but it's nice
+; to know that the infrastructure is there.
+
+ ld a, d
+ cp 0
+ jr z, .ceiling
+ jr c, .read ; cp 0 can't set carry!
+ jr .invalid
+
+; There are only $a2 engine flags, so
+; anything beyond that is invalid too.
+
+.ceiling
+ ld a, e
+ cp NUM_ENGINE_FLAGS
+ jr c, .read
+
+; Invalid flags are treated as flag 00.
+
+.invalid
+ xor a
+ ld e, a
+ ld d, a
+
+; Get this flag's location.
+
+.read
+ ld hl, EngineFlags
+; location
+rept 2
+ add hl, de
+endr
+; bit
+ add hl, de
+
+; location
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ inc hl
+; bit
+ ld c, [hl]
+
+; What are we doing with this flag?
+
+ ld a, b
+ cp 1
+ jr c, .reset ; b = 0
+ jr z, .set ; b = 1
+
+; Return the given flag in c.
+.check
+ ld a, [de]
+ and c
+ ld c, a
+ ret
+
+; Set the given flag.
+.set
+ ld a, [de]
+ or c
+ ld [de], a
+ ret
+
+; Reset the given flag.
+.reset
+ ld a, c
+ cpl ; AND all bits except the one in question
+ ld c, a
+ ld a, [de]
+ and c
+ ld [de], a
+ ret
+; 80462
+
+
+EngineFlags: ; 80462
; All locations are in WRAM bank 1.
engine_flag: MACRO
dwb \1, 1 << \2
@@ -22,7 +109,7 @@ ENDM
engine_flag wMomSavingMoney, 0 ; mom saving money ; $8
engine_flag wMomSavingMoney, 7 ; dst
- engine_flag wdc39, 0
+ engine_flag wdc39, 0 ; unused, possibly related to a 2-day timer
engine_flag StatusFlags, 0 ; pokedex
engine_flag StatusFlags, 1 ; unown dex
@@ -31,7 +118,7 @@ ENDM
engine_flag StatusFlags, 6 ; credits skip
engine_flag StatusFlags, 7 ; bug contest on ; $10
engine_flag StatusFlags2, 2 ; bug contest timer
- engine_flag StatusFlags2, 1
+ engine_flag StatusFlags2, 1 ; ???
engine_flag StatusFlags2, 0 ; rockets in radio tower
engine_flag StatusFlags2, 4 ; bike shop call enabled (1024 bike steps reqd)
engine_flag StatusFlags2, 5 ; give pokerus
@@ -71,14 +158,14 @@ ENDM
engine_flag UnlockedUnowns, 7 ; 8
; fly
- engine_flag VisitedSpawns, 0 ; your house
- engine_flag VisitedSpawns, 1 ; viridian pokecenter
- engine_flag VisitedSpawns, 2 ; pallet
- engine_flag VisitedSpawns, 3 ; viridian
- engine_flag VisitedSpawns, 4 ; pewter
- engine_flag VisitedSpawns, 5 ; cerulean ; $38
- engine_flag VisitedSpawns, 6 ; rock tunnel
- engine_flag VisitedSpawns, 7 ; vermilion
+ engine_flag VisitedSpawns, 0 ; your house
+ engine_flag VisitedSpawns, 1 ; viridian pokecenter
+ engine_flag VisitedSpawns, 2 ; pallet
+ engine_flag VisitedSpawns, 3 ; viridian
+ engine_flag VisitedSpawns, 4 ; pewter
+ engine_flag VisitedSpawns, 5 ; cerulean ; $38
+ engine_flag VisitedSpawns, 6 ; rock tunnel
+ engine_flag VisitedSpawns, 7 ; vermilion
engine_flag VisitedSpawns + 1, 0 ; lavender
engine_flag VisitedSpawns + 1, 1 ; saffron
engine_flag VisitedSpawns + 1, 2 ; celadon
@@ -88,6 +175,7 @@ ENDM
engine_flag VisitedSpawns + 1, 6 ; new bark
engine_flag VisitedSpawns + 1, 7 ; cherrygrove
engine_flag VisitedSpawns + 2, 0 ; violet
+ ; union cave
engine_flag VisitedSpawns + 2, 2 ; azalea
engine_flag VisitedSpawns + 2, 3 ; cianwood
engine_flag VisitedSpawns + 2, 4 ; goldenrod
@@ -97,6 +185,7 @@ ENDM
engine_flag VisitedSpawns + 3, 0 ; lake of rage
engine_flag VisitedSpawns + 3, 1 ; blackthorn
engine_flag VisitedSpawns + 3, 2 ; silver cave
+ ; fast ship
engine_flag VisitedSpawns + 3, 4 ; unused
engine_flag wLuckyNumberShowFlag, 0 ; lucky number show
@@ -157,7 +246,7 @@ ENDM
engine_flag wDailyPhoneItemFlags, 0 ; beverly has nugget
engine_flag wDailyPhoneItemFlags, 1 ; jose has star piece
- engine_flag wDailyPhoneItemFlags, 2 ; wade has item (see bittable1 $032b-e)
+ engine_flag wDailyPhoneItemFlags, 2 ; wade has item (see EVENT_WADE_HAS_*** in constants/event_flags.asm)
engine_flag wDailyPhoneItemFlags, 3 ; gina has leaf stone ; $80
engine_flag wDailyPhoneItemFlags, 4 ; alan has fire stone
engine_flag wDailyPhoneItemFlags, 5 ; liz has thunderstone
@@ -165,7 +254,7 @@ ENDM
engine_flag wDailyPhoneItemFlags, 7 ; tully has water stone
engine_flag wDailyPhoneItemFlags + 1, 0 ; tiffany has pink bow
- engine_flag wDailyPhoneItemFlags + 1, 1 ; wilton has item (see bittable1 $032f-31)
+ engine_flag wDailyPhoneItemFlags + 1, 1 ; wilton has item (see EVENT_WILTON_HAS_*** in constants/event_flags.asm)
engine_flag wDailyPhoneTimeOfDayFlags, 0
engine_flag wDailyPhoneTimeOfDayFlags, 1 ; $88
diff --git a/engine/events.asm b/engine/events.asm
index bd26afffd..40e863cdc 100644
--- a/engine/events.asm
+++ b/engine/events.asm
@@ -24,13 +24,13 @@ OverworldLoop:: ; 966b0
; 966cb
-ClearAllScriptFlags3: ; 966cb
+DisableEvents: ; 966cb
xor a
ld [ScriptFlags3], a
ret
; 966d0
-SetAll_ScriptFlags3:: ; 966d0
+EnableEvents:: ; 966d0
ld a, $ff
ld [ScriptFlags3], a
ret
@@ -42,73 +42,73 @@ CheckBit5_ScriptFlags3: ; 966d6
ret
; 966dc
-ResetBit2_ScriptFlags3: ; 966dc
+DisableWarpsConnxns: ; 966dc
ld hl, ScriptFlags3
res 2, [hl]
ret
; 966e2
-ResetBit1_ScriptFlags3: ; 966e2
+DisableCoordEvents: ; 966e2
ld hl, ScriptFlags3
res 1, [hl]
ret
; 966e8
-ResetBit0_ScriptFlags3: ; 966e8
+DisableStepCount: ; 966e8
ld hl, ScriptFlags3
res 0, [hl]
ret
; 966ee
-ResetBit4_ScriptFlags3: ; 966ee
+DisableWildEncounters: ; 966ee
ld hl, ScriptFlags3
res 4, [hl]
ret
; 966f4
-SetBit2_ScriptFlags3: ; 966f4
+EnableWarpsConnxns: ; 966f4
ld hl, ScriptFlags3
set 2, [hl]
ret
; 966fa
-SetBit1_ScriptFlags3: ; 966fa
+EnableCoordEvents: ; 966fa
ld hl, ScriptFlags3
set 1, [hl]
ret
; 96700
-SetBit0_ScriptFlags3: ; 96700
+EnableStepCount: ; 96700
ld hl, ScriptFlags3
set 0, [hl]
ret
; 96706
-SetBit4_ScriptFlags3: ; 96706
+EnableWildEncounters: ; 96706
ld hl, ScriptFlags3
set 4, [hl]
ret
; 9670c
-CheckBit2_ScriptFlags3: ; 9670c
+CheckWarpConnxnScriptFlag: ; 9670c
ld hl, ScriptFlags3
bit 2, [hl]
ret
; 96712
-CheckBit1_ScriptFlags3: ; 96712
+CheckCoordEventScriptFlag: ; 96712
ld hl, ScriptFlags3
bit 1, [hl]
ret
; 96718
-CheckBit0_ScriptFlags3: ; 96718
+CheckStepCountScriptFlag: ; 96718
ld hl, ScriptFlags3
bit 0, [hl]
ret
; 9671e
-CheckBit4_ScriptFlags3: ; 9671e
+CheckWildEncountersScriptFlag: ; 9671e
ld hl, ScriptFlags3
bit 4, [hl]
ret
@@ -135,13 +135,13 @@ EnterMap: ; 9673e
ld [wd454], a
call SetUpFiveStepWildEncounterCooldown
callba RunMapSetupScript
- call ClearAllScriptFlags3
+ call DisableEvents
ld a, [hMapEntryMethod]
cp MAPSETUP_CONNECTION
- jr nz, .dontset
- call SetAll_ScriptFlags3
-.dontset
+ jr nz, .dont_enable
+ call EnableEvents
+.dont_enable
ld a, [hMapEntryMethod]
cp MAPSETUP_RELOADMAP
@@ -168,7 +168,7 @@ Function9676d: ; 9676d
HandleMap: ; 96773
call ResetOverworldDelay
call Function967c1
- callba Function97e08
+ callba HandleCmdQueue ; no need to farcall
call MapEvents
; Not immediately entering a connected map will cause problems.
@@ -197,7 +197,7 @@ MapEvents: ; 96795
.events ; 967a1
call PlayerEvents
- call ClearAllScriptFlags3
+ call DisableEvents
callba ScriptEvents
ret
; 967ae
@@ -238,28 +238,28 @@ Function967c1: ; 967c1
; 967d1
Function967d1: ; 967d1
- callba Function576a
+ callba Function576a ; engine/map_objects.asm
callba Functiond497
call Function96812
ret
; 967e1
Function967e1: ; 967e1
- callba RefreshMapAppearDisappear
+ callba _UpdateSprites
callba Functiond4d2
callba PlaceMapNameSign
ret
; 967f4
Function967f4: ; 967f4
- ld a, [wd150]
+ ld a, [wPlayerStepFlags]
bit 5, a
jr z, .events
bit 6, a
jr z, .noevents
bit 4, a
jr nz, .noevents
- call SetAll_ScriptFlags3
+ call EnableEvents
.events
ld a, 0 ; events
@@ -273,7 +273,7 @@ Function967f4: ; 967f4
; 96812
Function96812: ; 96812
- ld hl, wd150
+ ld hl, wPlayerStepFlags
bit 6, [hl]
ret z
@@ -355,8 +355,8 @@ CheckTrainerBattle3: ; 96867
CheckTileEvent: ; 96874
; Check for warps, tile triggers or wild battles.
- call CheckBit2_ScriptFlags3
- jr z, .bit2
+ call CheckWarpConnxnScriptFlag
+ jr z, .connections_disabled
callba CheckMovingOffEdgeOfMap
jr c, .map_connection
@@ -364,22 +364,22 @@ CheckTileEvent: ; 96874
call CheckWarpTile
jr c, .warp_tile
-.bit2
- call CheckBit1_ScriptFlags3
- jr z, .bit1
+.connections_disabled
+ call CheckCoordEventScriptFlag
+ jr z, .coord_events_disabled
- call CheckCurrentMapXYTriggers
- jr c, .movement
+ call CheckCurrentNextMapXYTriggers
+ jr c, .coord_event
-.bit1
- call CheckBit0_ScriptFlags3
- jr z, .bit0
+.coord_events_disabled
+ call CheckStepCountScriptFlag
+ jr z, .step_count_disabled
call CountStep
ret c
-.bit0
- call CheckBit4_ScriptFlags3
+.step_count_disabled
+ call CheckWildEncountersScriptFlag
jr z, .ok
call RandomEncounter
@@ -396,7 +396,7 @@ CheckTileEvent: ; 96874
ret
.warp_tile
- ld a, [PlayerStandingTile]
+ ld a, [PlayerNextTile]
call CheckPitTile
jr nz, .not_pit
ld a, PLAYEREVENT_FALL
@@ -408,8 +408,8 @@ CheckTileEvent: ; 96874
scf
ret
-.movement
- ld hl, MovementAnimation
+.coord_event
+ ld hl, EngineBuffer5
ld a, [hli]
ld h, [hl]
ld l, a
@@ -511,7 +511,7 @@ CheckTimeEvents: ; 9693a
jr nz, .nothing
ld hl, StatusFlags2
- bit 2, [hl]
+ bit 2, [hl] ; bug contest
jr z, .do_daily
callba CheckBugContestTimer
@@ -552,7 +552,7 @@ OWPlayerInput: ; 96974
jr nz, .NoAction
; Can't perform button actions while sliding on ice.
- callba Function80404
+ callba CheckStandingOnIce
jr c, .NoAction
call CheckAPressOW
@@ -635,21 +635,23 @@ TryObjectEvent: ; 969b5
jp [hl]
.nope_bugged
+ ; pop bc
xor a
ret
.pointers
- dbw 0, .zero
- dbw 1, .one
- dbw 2, .two
- dbw 3, .three
- dbw 4, .four
- dbw 5, .five
- dbw 6, .six
+ dbw PERSONTYPE_SCRIPT, .script
+ dbw PERSONTYPE_ITEMFRAGMENT, .itemfragment
+ dbw PERSONTYPE_TRAINER, .trainer
+ ; the remaining four are dummy events
+ dbw PERSONTYPE_3, .three
+ dbw PERSONTYPE_4, .four
+ dbw PERSONTYPE_5, .five
+ dbw PERSONTYPE_6, .six
db -1
; 96a04
-.zero ; 96a04
+.script ; 96a04
ld hl, MAPOBJECT_SCRIPT_POINTER
add hl, bc
ld a, [hli]
@@ -657,11 +659,10 @@ TryObjectEvent: ; 969b5
ld l, a
call GetMapScriptHeaderBank
call CallScript
-; ld a, -1
ret
; 96a12
-.one ; 96a12
+.itemfragment ; 96a12
ld hl, MAPOBJECT_SCRIPT_POINTER
add hl, bc
ld a, [hli]
@@ -671,14 +672,14 @@ TryObjectEvent: ; 969b5
ld de, EngineBuffer1
ld bc, 2
call FarCopyBytes
- ld a, 3
+ ld a, PLAYEREVENT_ITEMBALL
scf
ret
; 96a29
-.two ; 96a29
- call Function3674
- ld a, 2
+.trainer ; 96a29
+ call TalkToTrainer
+ ld a, PLAYEREVENT_TALKTOTRAINER
scf
ret
; 96a30
@@ -729,16 +730,16 @@ TryReadSign: ; 96a38
; 96a59
.up
- ld b, UP << 2
+ ld b, OW_UP
jr .checkdir
.down
- ld b, DOWN << 2
+ ld b, OW_DOWN
jr .checkdir
.right
- ld b, RIGHT << 2
+ ld b, OW_RIGHT
jr .checkdir
.left
- ld b, LEFT << 2
+ ld b, OW_LEFT
jr .checkdir
.checkdir
@@ -1077,12 +1078,12 @@ PlayerEventScriptPointers: ; 96c0c
dba SeenByTrainerScript ; 1
dba TalkToTrainerScript ; 2
dba FindItemInBallScript ; 3
- dba UnknownScript_0x96c4d ; 4
+ dba EdgeWarpScript ; 4
dba WarpToNewMapScript ; 5
dba FallIntoMapScript ; 6
dba Script_OverworldWhiteout ; 7
dba HatchEggScript ; 8
- dba UnknownScript_0x96c4f ; 9
+ dba ChangeDirectionScript ; 9
dba Invalid_0x96c2d ; 10
; 96c2d
@@ -1124,13 +1125,13 @@ LandAfterPitfallScript: ; 96c4a
end
; 96c4d
-UnknownScript_0x96c4d: ; 4
+EdgeWarpScript: ; 4
reloadandreturn MAPSETUP_CONNECTION
; 96c4f
-UnknownScript_0x96c4f: ; 9
- deactivatefacing $3
- callasm SetBit4_ScriptFlags3
+ChangeDirectionScript: ; 9
+ deactivatefacing 3
+ callasm EnableWildEncounters
end
; 96c56
diff --git a/engine/events_2.asm b/engine/events_2.asm
index 9dd604a47..c9b673e81 100644
--- a/engine/events_2.asm
+++ b/engine/events_2.asm
@@ -3,8 +3,8 @@
WarpToSpawnPoint:: ; 97c28
ld hl, StatusFlags2
- res 1, [hl]
- res 2, [hl]
+ res 1, [hl] ; ??
+ res 2, [hl] ; bug contest
ret
; 97c30
@@ -161,7 +161,7 @@ CanUseSweetScent:: ; 97cfd
jr nc, .no
.ice_check
- ld a, [PlayerStandingTile]
+ ld a, [PlayerNextTile]
call CheckIceTile
jr z, .no
scf
@@ -235,7 +235,7 @@ ChooseWildEncounter_BugContest:: ; 97d31
; 97d64
TryWildEncounter_BugContest: ; 97d64
- ld a, [PlayerStandingTile]
+ ld a, [PlayerNextTile]
call CheckSuperTallGrassTile
ld b, 40 percent
jr z, .ok
@@ -275,7 +275,7 @@ DoBikeStep:: ; 97db3
; if we've already gotten the call, we don't have to
; be here.
ld hl, StatusFlags2
- bit 4, [hl]
+ bit 4, [hl] ; bike shop call
jr z, .NoCall
; If we're not on the bike, we don't have to be here.
@@ -326,7 +326,7 @@ DoBikeStep:: ; 97db3
xor a
ld [wSpecialPhoneCallID + 1], a
ld hl, StatusFlags2
- res 4, [hl]
+ res 4, [hl] ; bike shop call
scf
ret
@@ -335,8 +335,8 @@ DoBikeStep:: ; 97db3
ret
; 97df9
-Function97df9:: ; 97df9
- ld hl, wd6de
+ClearCmdQueue:: ; 97df9
+ ld hl, wCmdQueue
ld de, 6
ld c, 4
xor a
@@ -348,8 +348,8 @@ Function97df9:: ; 97df9
ret
; 97e08
-Function97e08:: ; 97e08
- ld hl, wd6de
+HandleCmdQueue:: ; 97e08
+ ld hl, wCmdQueue
xor a
.loop
ld [hMapObjectIndexBuffer], a
@@ -359,106 +359,106 @@ Function97e08:: ; 97e08
push hl
ld b, h
ld c, l
- call Function97e79
+ call HandleQueuedCommand
pop hl
.skip
- ld de, $0006
+ ld de, CMDQUEUE_ENTRY_SIZE
add hl, de
ld a, [hMapObjectIndexBuffer]
inc a
- cp $4
+ cp CMDQUEUE_CAPACITY
jr nz, .loop
ret
; 97e25
-Function97e25: ; 97e25
- ld hl, wd6de
- ld bc, 6
+GetNthCmdQueueEntry: ; 97e25 unreferenced
+ ld hl, wCmdQueue
+ ld bc, CMDQUEUE_ENTRY_SIZE
call AddNTimes
ld b, h
ld c, l
ret
; 97e31
-Function97e31:: ; 97e31
+WriteCmdQueue:: ; 97e31
push bc
push de
- call Function97e45
+ call .GetNextEmptyEntry
ld d, h
ld e, l
pop hl
pop bc
ret c
ld a, b
- ld bc, $0005
+ ld bc, CMDQUEUE_ENTRY_SIZE - 1
call FarCopyBytes
xor a
ld [hl], a
ret
; 97e45
-Function97e45: ; 97e45
- ld hl, wd6de
- ld de, $0006
- ld c, $4
-.asm_97e4d
+.GetNextEmptyEntry: ; 97e45
+ ld hl, wCmdQueue
+ ld de, CMDQUEUE_ENTRY_SIZE
+ ld c, CMDQUEUE_CAPACITY
+.loop
ld a, [hl]
and a
- jr z, .asm_97e57
+ jr z, .done
add hl, de
dec c
- jr nz, .asm_97e4d
+ jr nz, .loop
scf
ret
-.asm_97e57
- ld a, $4
+.done
+ ld a, CMDQUEUE_CAPACITY
sub c
and a
ret
; 97e5c
-Function97e5c:: ; 97e5c
- ld hl, wd6de
- ld de, $0006
- ld c, $4
-.asm_97e64
+DelCmdQueue:: ; 97e5c
+ ld hl, wCmdQueue
+ ld de, CMDQUEUE_ENTRY_SIZE
+ ld c, CMDQUEUE_CAPACITY
+.loop
ld a, [hl]
cp b
- jr z, .asm_97e6e
+ jr z, .done
add hl, de
dec c
- jr nz, .asm_97e64
+ jr nz, .loop
and a
ret
-.asm_97e6e
+.done
xor a
ld [hl], a
scf
ret
; 97e72
-Function97e72: ; 97e72
- ld hl, 0
+_DelCmdQueue: ; 97e72
+ ld hl, CMDQUEUE_TYPE
add hl, bc
ld [hl], 0
ret
; 97e79
-Function97e79: ; 97e79
- ld hl, 0
+HandleQueuedCommand: ; 97e79
+ ld hl, CMDQUEUE_TYPE
add hl, bc
ld a, [hl]
cp 5
- jr c, .asm_97e83
+ jr c, .okay
xor a
-.asm_97e83
+.okay
ld e, a
ld d, 0
- ld hl, Table97e94
+ ld hl, .Jumptable_ba
rept 3
add hl, de
endr
@@ -472,16 +472,16 @@ endr
ret
; 97e94
-Table97e94: ; 97e94
- dba Function97eb7
- dba Function97eb8
- dba Function97f42
- dba Function97ef9
- dba Function97ebc
+.Jumptable_ba: ; 97e94
+ dba CmdQueue_Null
+ dba CmdQueue_Null2
+ dba CmdQueue_StoneTable
+ dba CmdQueue_Type3
+ dba CmdQueue_Type4
; 97ea3
-Function97ea3: ; 97ea3
- ld hl, $0005
+CmdQueueAnonymousJumptable: ; 97ea3
+ ld hl, CMDQUEUE_05
add hl, bc
ld a, [hl]
pop hl
@@ -489,45 +489,44 @@ Function97ea3: ; 97ea3
ret
; 97eab
-Function97eab: ; 97eab
- ld hl, $0005
+CmdQueueAnonJT_Increment: ; 97eab
+ ld hl, CMDQUEUE_05
add hl, bc
inc [hl]
ret
; 97eb1
-Function97eb1: ; 97eb1
- ld hl, $0005
+CmdQueueAnonJT_Decrement: ; 97eb1
+ ld hl, CMDQUEUE_05
add hl, bc
dec [hl]
ret
; 97eb7
-Function97eb7: ; 97eb7
+CmdQueue_Null: ; 97eb7
ret
; 97eb8
-Function97eb8: ; 97eb8
+CmdQueue_Null2: ; 97eb8
call ret_2f3e
ret
; 97ebc
-Function97ebc: ; 97ebc
- call Function97ea3
- dw Function97ec3
- dw Function97ecd
+CmdQueue_Type4: ; 97ebc
+ call CmdQueueAnonymousJumptable
+ ; anonymous jumptable
+ dw .zero
+ dw .one
; 97ec3
-Function97ec3: ; 97ec3
+.zero: ; 97ec3
ld a, [hSCY]
- ld hl, $0004
+ ld hl, 4
add hl, bc
ld [hl], a
- call Function97eab
-; 97ecd
-
-Function97ecd: ; 97ecd
- ld hl, $0001
+ call CmdQueueAnonJT_Increment
+.one: ; 97ecd
+ ld hl, 1
add hl, bc
ld a, [hl]
dec a
@@ -535,7 +534,7 @@ Function97ecd: ; 97ecd
jr z, .asm_97eee
and $1
jr z, .asm_97ee4
- ld hl, $0002
+ ld hl, 2
add hl, bc
ld a, [hSCY]
sub [hl]
@@ -543,7 +542,7 @@ Function97ecd: ; 97ecd
ret
.asm_97ee4
- ld hl, $0002
+ ld hl, 2
add hl, bc
ld a, [hSCY]
add [hl]
@@ -551,61 +550,60 @@ Function97ecd: ; 97ecd
ret
.asm_97eee
- ld hl, $0004
+ ld hl, 4
add hl, bc
ld a, [hl]
ld [hSCY], a
- call Function97e72
+ call _DelCmdQueue
ret
; 97ef9
-Function97ef9: ; 97ef9
- call Function97ea3
- dw Function97f02
- dw Function97f0a
- dw Function97f1b
+CmdQueue_Type3: ; 97ef9
+ call CmdQueueAnonymousJumptable
+ ; anonymous jumptable
+ dw .zero
+ dw .one
+ dw .two
; 97f02
-Function97f02: ; 97f02
- call Function97f38
- jr z, Function97f2c
- call Function97eab
-; 97f0a
-
-Function97f0a: ; 97f0a
- call Function97f38
- jr z, Function97f2c
- call Function97eab
+.zero: ; 97f02
+ call .IsPlayerFacingDown
+ jr z, .PlayerNotFacingDown
+ call CmdQueueAnonJT_Increment
+.one: ; 97f0a
+ call .IsPlayerFacingDown
+ jr z, .PlayerNotFacingDown
+ call CmdQueueAnonJT_Increment
- ld hl, $0002
+ ld hl, 2
add hl, bc
ld a, [hl]
ld [wd173], a
ret
; 97f1b
-Function97f1b: ; 97f1b
- call Function97f38
- jr z, Function97f2c
- call Function97eb1
+.two: ; 97f1b
+ call .IsPlayerFacingDown
+ jr z, .PlayerNotFacingDown
+ call CmdQueueAnonJT_Decrement
- ld hl, $0003
+ ld hl, 3
add hl, bc
ld a, [hl]
ld [wd173], a
ret
; 97f2c
-Function97f2c: ; 97f2c
+.PlayerNotFacingDown: ; 97f2c
ld a, $7f
ld [wd173], a
- ld hl, $0005
+ ld hl, 5
add hl, bc
ld [hl], 0
ret
; 97f38
-Function97f38: ; 97f38
+.IsPlayerFacingDown: ; 97f38
push bc
ld bc, PlayerStruct
call GetSpriteDirection
@@ -614,50 +612,50 @@ Function97f38: ; 97f38
ret
; 97f42
-Function97f42: ; 97f42
+CmdQueue_StoneTable: ; 97f42
ld de, PlayerStruct
- ld a, $d
-.asm_97f47
+ ld a, NUM_OBJECT_STRUCTS
+.loop
push af
- ld hl, 0
+ ld hl, OBJECT_SPRITE
add hl, de
ld a, [hl]
and a
- jr z, .asm_97f71
+ jr z, .next
- ld hl, $0003
+ ld hl, OBJECT_MOVEMENTTYPE
add hl, de
ld a, [hl]
- cp $19
- jr nz, .asm_97f71
+ cp STEP_TYPE_19
+ jr nz, .next
- ld hl, $000e
+ ld hl, OBJECT_NEXT_TILE
add hl, de
ld a, [hl]
call CheckPitTile
- jr nz, .asm_97f71
+ jr nz, .next
- ld hl, $0007
+ ld hl, OBJECT_DIRECTION_WALKING
add hl, de
ld a, [hl]
- cp $ff
- jr nz, .asm_97f71
- call Function3567
- jr c, .asm_97f7c
+ cp STANDING
+ jr nz, .next
+ call HandleStoneQueue
+ jr c, .fall_down_hole
-.asm_97f71
- ld hl, $0028
+.next
+ ld hl, OBJECT_STRUCT_LENGTH
add hl, de
ld d, h
ld e, l
pop af
dec a
- jr nz, .asm_97f47
+ jr nz, .loop
ret
-.asm_97f7c
+.fall_down_hole
pop af
ret
; 97f7e
diff --git a/engine/evolution_animation.asm b/engine/evolution_animation.asm
index 69e7aec4c..835db8b52 100755
--- a/engine/evolution_animation.asm
+++ b/engine/evolution_animation.asm
@@ -52,11 +52,11 @@ _EvolutionAnimation: ; 4e607
ld [PlayerHPPal], a
ld c, $0
- call Function4e703
+ call .GetSGBLayout
ld a, [Buffer1]
ld [CurPartySpecies], a
ld [CurSpecies], a
- call Function4e708
+ call .PlaceFrontpic
ld de, VTiles2
ld hl, VTiles2 tile $31
@@ -65,11 +65,11 @@ _EvolutionAnimation: ; 4e607
ld a, $31
ld [wd1ec], a
- call Evolution_FlashFrontpics
+ call .ReplaceFrontpic
ld a, [Buffer2]
ld [CurPartySpecies], a
ld [CurSpecies], a
- call Function4e711
+ call .LoadFrontpic
ld a, [Buffer1]
ld [CurPartySpecies], a
ld [CurSpecies], a
@@ -90,14 +90,14 @@ _EvolutionAnimation: ; 4e607
call DelayFrames
ld c, $1
- call Function4e703
- call Function4e726
- jr c, .pressed_b
+ call .GetSGBLayout
+ call .AnimationSequence
+ jr c, .cancel_evo
- ld a, $cf
+ ld a, -7 * 7
ld [wd1ec], a
- call Evolution_FlashFrontpics
+ call .ReplaceFrontpic
xor a
ld [wd1ed], a
@@ -105,7 +105,7 @@ _EvolutionAnimation: ; 4e607
ld [PlayerHPPal], a
ld c, $0
- call Function4e703
+ call .GetSGBLayout
call Function4e7a6
callba Function8cf53
call Function4e794
@@ -134,7 +134,7 @@ _EvolutionAnimation: ; 4e607
.asm_4e6de
ret
-.pressed_b
+.cancel_evo
ld a, $1
ld [wd1ed], a
@@ -142,7 +142,7 @@ _EvolutionAnimation: ; 4e607
ld [PlayerHPPal], a
ld c, $0
- call Function4e703
+ call .GetSGBLayout
call Function4e7a6
callba Function8cf53
call Function4e794
@@ -153,38 +153,38 @@ _EvolutionAnimation: ; 4e607
ret
; 4e703
-Function4e703: ; 4e703
- ld b, $b
+.GetSGBLayout: ; 4e703
+ ld b, SCGB_0B
jp GetSGBLayout
; 4e708
-Function4e708: ; 4e708
+.PlaceFrontpic: ; 4e708
call GetBaseData
hlcoord 7, 2
jp PrepMonFrontpic
; 4e711
-Function4e711: ; 4e711
+.LoadFrontpic: ; 4e711
call GetBaseData
ld a, $1
ld [wc2c6], a
ld de, VTiles2
- predef Function5108b
+ predef FrontpicPredef
xor a
ld [wc2c6], a
ret
; 4e726
-Function4e726: ; 4e726
+.AnimationSequence: ; 4e726
call ClearJoypad
- lb bc, 1, 14
+ lb bc, 1, 2 * 7 ; flash b times, wait c frames in between
.loop
push bc
- call Evolution_CheckPressedB
+ call .WaitFrames_CheckPressedB
pop bc
- jr c, .pressed_b
+ jr c, .exit_sequence
push bc
- call Evolution_NextFrame
+ call .Flash
pop bc
inc b
rept 2
@@ -194,31 +194,30 @@ endr
and a
ret
-.pressed_b
+.exit_sequence
scf
ret
; 4e741
-Evolution_NextFrame: ; 4e741
-.loop
- ld a, -49
+.Flash: ; 4e741
+ ld a, -7 * 7 ; new stage
ld [wd1ec], a
- call Evolution_FlashFrontpics
- ld a, 49
+ call .ReplaceFrontpic
+ ld a, 7 * 7 ; previous stage
ld [wd1ec], a
- call Evolution_FlashFrontpics
+ call .ReplaceFrontpic
dec b
- jr nz, .loop
+ jr nz, .Flash
ret
; 4e755
-Evolution_FlashFrontpics: ; 4e755
+.ReplaceFrontpic: ; 4e755
push bc
xor a
ld [hBGMapMode], a
hlcoord 7, 2
lb bc, 7, 7
- ld de, $d
+ ld de, SCREEN_WIDTH - 7
.loop1
push bc
.loop2
@@ -238,8 +237,7 @@ Evolution_FlashFrontpics: ; 4e755
ret
; 4e779
-Evolution_CheckPressedB: ; 4e779
-.loop
+.WaitFrames_CheckPressedB: ; 4e779
call DelayFrame
push bc
call JoyTextDelay
@@ -247,16 +245,16 @@ Evolution_CheckPressedB: ; 4e779
pop bc
and B_BUTTON
jr nz, .pressed_b
-.loop2
+.loop3
dec c
- jr nz, .loop
+ jr nz, .WaitFrames_CheckPressedB
and a
ret
.pressed_b
ld a, [wd1e9]
and a
- jr nz, .loop2
+ jr nz, .loop3
scf
ret
; 4e794
@@ -281,18 +279,18 @@ Function4e7a6: ; 4e7a6
ld a, [hl]
push af
ld [hl], $0
-.asm_4e7b8
+.loop
call Function4e7cf
- jr nc, .asm_4e7c2
+ jr nc, .done
call Function4e80c
- jr .asm_4e7b8
+ jr .loop
-.asm_4e7c2
+.done
ld c, $20
-.asm_4e7c4
+.loop2
call Function4e80c
dec c
- jr nz, .asm_4e7c4
+ jr nz, .loop2
pop af
ld [wJumptableIndex], a
ret
@@ -319,9 +317,9 @@ Function4e7cf: ; 4e7cf
Function4e7e8: ; 4e7e8
push de
- ld de, $4858
+ lb de, $48, $58
ld a, $13
- call Function3b2a
+ call _InitSpriteAnimStruct
ld hl, $b
add hl, bc
ld a, [wJumptableIndex]
@@ -342,6 +340,7 @@ Function4e7e8: ; 4e7e8
Function4e80c: ; 4e80c
push bc
callab Function8cf69
+ ; a = (([hVBlankCounter] + 4) / 2) % NUM_PALETTES
ld a, [hVBlankCounter]
and $e
srl a
@@ -350,9 +349,9 @@ rept 2
endr
and $7
ld b, a
- ld hl, Sprites + 3
- ld c, $28
-.asm_4e823
+ ld hl, Sprites + 3 ; attributes
+ ld c, 40
+.loop
ld a, [hl]
or b
ld [hli], a
@@ -360,7 +359,7 @@ rept 3
inc hl
endr
dec c
- jr nz, .asm_4e823
+ jr nz, .loop
pop bc
call DelayFrame
ret
@@ -378,7 +377,7 @@ Function4e881: ; 4e881
call DisableLCD
call LoadStandardFont
call LoadFontsBattleExtra
- ld hl, VBGMap0
+ hlbgcoord 0, 0
ld bc, VBGMap1 - VBGMap0
ld a, " "
call ByteFill
@@ -411,7 +410,7 @@ Function4e8c2: ; 4e8c2
call DisableLCD
call LoadStandardFont
call LoadFontsBattleExtra
- ld hl, VBGMap0
+ hlbgcoord 0, 0
ld bc, VBGMap1 - VBGMap0
ld a, " "
call ByteFill
@@ -446,7 +445,7 @@ Function4e906: ; 4e906
ld bc, w6_d400 - w6_d000
ld a, " "
call ByteFill
- ld hl, VBGMap0
+ hlbgcoord 0, 0
ld de, w6_d000
ld b, $0
ld c, $40
diff --git a/engine/evolve.asm b/engine/evolve.asm
new file mode 100755
index 000000000..6772db932
--- /dev/null
+++ b/engine/evolve.asm
@@ -0,0 +1,682 @@
+EvolvePokemon: ; 421d8
+ ld hl, EvolvableFlags
+ xor a
+ ld [hl], a
+ ld a, [CurPartyMon]
+ ld c, a
+ ld b, SET_FLAG
+ call EvoFlagAction
+
+EvolveAfterBattle: ; 421e6
+ xor a
+ ld [wMonTriedToEvolve], a
+ dec a
+ ld [CurPartyMon], a
+ push hl
+ push bc
+ push de
+ ld hl, PartyCount
+
+ push hl
+
+CheckForEvolvablePokemon: ; 421f5
+ ld hl, CurPartyMon
+ inc [hl]
+
+ pop hl
+
+ inc hl
+ ld a, [hl]
+ cp $ff
+ jp z, Evolution_ReturnToMap
+
+ ld [Buffer1], a
+
+ push hl
+ ld a, [CurPartyMon]
+ ld c, a
+ ld hl, EvolvableFlags
+ ld b, CHECK_FLAG
+ call EvoFlagAction
+ ld a, c
+ and a
+ jp z, CheckForEvolvablePokemon
+
+ ld a, [Buffer1]
+ dec a
+ ld b, 0
+ ld c, a
+ ld hl, EvosAttacksPointers
+rept 2
+ add hl, bc
+endr
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+
+ push hl
+ xor a
+ ld [MonType], a
+ predef CopyPkmnToTempMon
+ pop hl
+
+.loop
+ ld a, [hli]
+ and a
+ jr z, CheckForEvolvablePokemon
+
+ ld b, a
+
+ cp EVOLVE_TRADE
+ jr z, .trade
+
+ ld a, [wLinkMode]
+ and a
+ jp nz, .dont_evolve_2
+
+ ld a, b
+ cp EVOLVE_ITEM
+ jp z, .item
+
+ ld a, [wd1e9]
+ and a
+ jp nz, .dont_evolve_2
+
+ ld a, b
+ cp EVOLVE_LEVEL
+ jp z, .level
+
+ cp EVOLVE_HAPPINESS
+ jr z, .happiness
+
+
+; EVOLVE_STAT
+ ld a, [TempMonLevel]
+ cp [hl]
+ jp c, .dont_evolve_1
+
+ call IsMonHoldingEverstone
+ jp z, .dont_evolve_1
+
+ push hl
+ ld de, TempMonAttack
+ ld hl, TempMonDefense
+ ld c, 2
+ call StringCmp
+ ld a, ATK_EQ_DEF
+ jr z, .got_tyrogue_evo
+ ld a, ATK_LT_DEF
+ jr c, .got_tyrogue_evo
+ ld a, ATK_GT_DEF
+.got_tyrogue_evo
+ pop hl
+
+ inc hl
+ cp [hl]
+ jp nz, .dont_evolve_2
+
+ inc hl
+ jr .proceed
+
+
+.happiness
+ ld a, [TempMonHappiness]
+ cp 220
+ jp c, .dont_evolve_2
+
+ call IsMonHoldingEverstone
+ jp z, .dont_evolve_2
+
+ ld a, [hli]
+ cp TR_ANYTIME
+ jr z, .proceed
+ cp TR_MORNDAY
+ jr z, .happiness_daylight
+
+; TR_NITE
+ ld a, [TimeOfDay]
+ cp NITE
+ jp nz, .dont_evolve_3
+ jr .proceed
+
+.happiness_daylight
+ ld a, [TimeOfDay]
+ cp NITE
+ jp z, .dont_evolve_3
+ jr .proceed
+
+
+.trade
+ ld a, [wLinkMode]
+ and a
+ jp z, .dont_evolve_2
+
+ call IsMonHoldingEverstone
+ jp z, .dont_evolve_2
+
+ ld a, [hli]
+ ld b, a
+ inc a
+ jr z, .proceed
+
+ ld a, [wLinkMode]
+ cp LINK_TIMECAPSULE
+ jp z, .dont_evolve_3
+
+ ld a, [TempMonItem]
+ cp b
+ jp nz, .dont_evolve_3
+
+ xor a
+ ld [TempMonItem], a
+ jr .proceed
+
+
+.item
+ ld a, [hli]
+ ld b, a
+ ld a, [CurItem]
+ cp b
+ jp nz, .dont_evolve_3
+
+ ld a, [wd1e9]
+ and a
+ jp z, .dont_evolve_3
+ ld a, [wLinkMode]
+ and a
+ jp nz, .dont_evolve_3
+ jr .proceed
+
+
+.level
+ ld a, [hli]
+ ld b, a
+ ld a, [TempMonLevel]
+ cp b
+ jp c, .dont_evolve_3
+ call IsMonHoldingEverstone
+ jp z, .dont_evolve_3
+
+.proceed
+ ld a, [TempMonLevel]
+ ld [CurPartyLevel], a
+ ld a, $1
+ ld [wMonTriedToEvolve], a
+
+ push hl
+
+ ld a, [hl]
+ ld [Buffer2], a
+ ld a, [CurPartyMon]
+ ld hl, PartyMonNicknames
+ call GetNick
+ call CopyName1
+ ld hl, Text_WhatEvolving
+ call PrintText
+
+ ld c, 50
+ call DelayFrames
+
+ xor a
+ ld [hBGMapMode], a
+ hlcoord 0, 0
+ lb bc, 12, 20
+ call ClearBox
+
+ ld a, $1
+ ld [hBGMapMode], a
+ call ClearSprites
+
+ callba EvolutionAnimation
+
+ push af
+ call ClearSprites
+ pop af
+ jp c, CancelEvolution
+
+ ld hl, Text_CongratulationsYourPokemon
+ call PrintText
+
+ pop hl
+
+ ld a, [hl]
+ ld [CurSpecies], a
+ ld [TempMonSpecies], a
+ ld [Buffer2], a
+ ld [wd265], a
+ call GetPokemonName
+
+ push hl
+ ld hl, Text_EvolvedIntoPKMN
+ call PrintTextBoxText
+ callba MobileFn_106094
+
+ ld de, MUSIC_NONE
+ call PlayMusic
+ ld de, SFX_CAUGHT_MON
+ call PlaySFX
+ call WaitSFX
+
+ ld c, 40
+ call DelayFrames
+
+ call ClearTileMap
+ call UpdateSpeciesNameIfNotNicknamed
+ call GetBaseData
+
+ ld hl, TempMonExp + 2
+ ld de, TempMonMaxHP
+ ld b, $1
+ predef CalcPkmnStats
+
+ ld a, [CurPartyMon]
+ ld hl, PartyMons
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call AddNTimes
+ ld e, l
+ ld d, h
+ ld bc, MON_MAXHP
+ add hl, bc
+ ld a, [hli]
+ ld b, a
+ ld c, [hl]
+ ld hl, TempMonMaxHP + 1
+ ld a, [hld]
+ sub c
+ ld c, a
+ ld a, [hl]
+ sbc b
+ ld b, a
+ ld hl, TempMonHP + 1
+ ld a, [hl]
+ add c
+ ld [hld], a
+ ld a, [hl]
+ adc b
+ ld [hl], a
+
+ ld hl, TempMonSpecies
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call CopyBytes
+
+ ld a, [CurSpecies]
+ ld [wd265], a
+ xor a
+ ld [MonType], a
+ call LearnLevelMoves
+ ld a, [wd265]
+ dec a
+ call SetSeenAndCaughtMon
+
+ ld a, [wd265]
+ cp UNOWN
+ jr nz, .skip_unown
+
+ ld hl, TempMonDVs
+ predef GetUnownLetter
+ callab UpdateUnownDex
+
+.skip_unown
+ pop de
+ pop hl
+ ld a, [TempMonSpecies]
+ ld [hl], a
+ push hl
+ ld l, e
+ ld h, d
+ jp CheckForEvolvablePokemon
+; 423f8
+
+.dont_evolve_1
+ inc hl
+.dont_evolve_2
+ inc hl
+.dont_evolve_3
+ inc hl
+ jp .loop
+; 423fe
+
+; dummy pop
+ pop hl
+
+Evolution_ReturnToMap: ; 423ff
+ pop de
+ pop bc
+ pop hl
+ ld a, [wLinkMode]
+ and a
+ ret nz
+ ld a, [wBattleMode]
+ and a
+ ret nz
+ ld a, [wMonTriedToEvolve]
+ and a
+ call nz, RestartMapMusic
+ ret
+; 42414
+
+UpdateSpeciesNameIfNotNicknamed: ; 42414
+ ld a, [CurSpecies]
+ push af
+ ld a, [BaseDexNo]
+ ld [wd265], a
+ call GetPokemonName
+ pop af
+ ld [CurSpecies], a
+ ld hl, StringBuffer1
+ ld de, StringBuffer2
+.loop
+ ld a, [de]
+ inc de
+ cp [hl]
+ inc hl
+ ret nz
+ cp "@"
+ jr nz, .loop
+
+ ld a, [CurPartyMon]
+ ld bc, PKMN_NAME_LENGTH
+ ld hl, PartyMonNicknames
+ call AddNTimes
+ push hl
+ ld a, [CurSpecies]
+ ld [wd265], a
+ call GetPokemonName
+ ld hl, StringBuffer1
+ pop de
+ ld bc, PKMN_NAME_LENGTH
+ jp CopyBytes
+; 42454
+
+CancelEvolution: ; 42454
+ ld hl, Text_StoppedEvolving
+ call PrintText
+ call ClearTileMap
+ pop hl
+ jp CheckForEvolvablePokemon
+; 42461
+
+IsMonHoldingEverstone: ; 42461
+ push hl
+ ld a, [CurPartyMon]
+ ld hl, PartyMon1Item
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call AddNTimes
+ ld a, [hl]
+ cp EVERSTONE
+ pop hl
+ ret
+; 42473
+
+Text_CongratulationsYourPokemon: ; 0x42473
+ ; Congratulations! Your @ @
+ text_jump UnknownText_0x1c4b92
+ db "@"
+; 0x42478
+
+Text_EvolvedIntoPKMN: ; 0x42478
+ ; evolved into @ !
+ text_jump UnknownText_0x1c4baf
+ db "@"
+; 0x4247d
+
+Text_StoppedEvolving: ; 0x4247d
+ ; Huh? @ stopped evolving!
+ text_jump UnknownText_0x1c4bc5
+ db "@"
+; 0x42482
+
+Text_WhatEvolving: ; 0x42482
+ ; What? @ is evolving!
+ text_jump UnknownText_0x1c4be3
+ db "@"
+; 0x42487
+
+
+LearnLevelMoves: ; 42487
+ ld a, [wd265]
+ ld [CurPartySpecies], a
+ dec a
+ ld b, 0
+ ld c, a
+ ld hl, EvosAttacksPointers
+rept 2
+ add hl, bc
+endr
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+
+.skip_evos
+ ld a, [hli]
+ and a
+ jr nz, .skip_evos
+
+.find_move
+ ld a, [hli]
+ and a
+ jr z, .done
+
+ ld b, a
+ ld a, [CurPartyLevel]
+ cp b
+ ld a, [hli]
+ jr nz, .find_move
+
+ push hl
+ ld d, a
+ ld hl, PartyMon1Moves
+ ld a, [CurPartyMon]
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call AddNTimes
+
+ ld b, NUM_MOVES
+.check_move
+ ld a, [hli]
+ cp d
+ jr z, .has_move
+ dec b
+ jr nz, .check_move
+ jr .learn
+.has_move
+
+ pop hl
+ jr .find_move
+
+.learn
+ ld a, d
+ ld [wd262], a
+ ld [wd265], a
+ call GetMoveName
+ call CopyName1
+ predef LearnMove
+ pop hl
+ jr .find_move
+
+.done
+ ld a, [CurPartySpecies]
+ ld [wd265], a
+ ret
+; 424e1
+
+
+FillMoves: ; 424e1
+; Fill in moves at de for CurPartySpecies at CurPartyLevel
+
+ push hl
+ push de
+ push bc
+ ld hl, EvosAttacksPointers
+ ld b, 0
+ ld a, [CurPartySpecies]
+ dec a
+ add a
+ rl b
+ ld c, a
+ add hl, bc
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+.GoToAttacks
+ ld a, [hli]
+ and a
+ jr nz, .GoToAttacks
+ jr .GetLevel
+
+.NextMove
+ pop de
+.GetMove
+ inc hl
+.GetLevel
+ ld a, [hli]
+ and a
+ jp z, .done
+ ld b, a
+ ld a, [CurPartyLevel]
+ cp b
+ jp c, .done
+ ld a, [Buffer1]
+ and a
+ jr z, .CheckMove
+ ld a, [wd002]
+ cp b
+ jr nc, .GetMove
+
+.CheckMove
+ push de
+ ld c, NUM_MOVES
+.CheckRepeat
+ ld a, [de]
+ inc de
+ cp [hl]
+ jr z, .NextMove
+ dec c
+ jr nz, .CheckRepeat
+ pop de
+ push de
+ ld c, NUM_MOVES
+.CheckSlot
+ ld a, [de]
+ and a
+ jr z, .LearnMove
+ inc de
+ dec c
+ jr nz, .CheckSlot
+ pop de
+ push de
+ push hl
+ ld h, d
+ ld l, e
+ call ShiftMoves
+ ld a, [Buffer1]
+ and a
+ jr z, .ShiftedMove
+ push de
+ ld bc, PartyMon1PP - (PartyMon1Moves + NUM_MOVES - 1)
+ add hl, bc
+ ld d, h
+ ld e, l
+ call ShiftMoves
+ pop de
+
+.ShiftedMove
+ pop hl
+
+.LearnMove
+ ld a, [hl]
+ ld [de], a
+ ld a, [Buffer1]
+ and a
+ jr z, .NextMove
+ push hl
+ ld a, [hl]
+ ld hl, MON_PP - MON_MOVES
+ add hl, de
+ push hl
+ dec a
+ ld hl, Moves + MOVE_PP
+ ld bc, MOVE_LENGTH
+ call AddNTimes
+ ld a, BANK(Moves)
+ call GetFarByte
+ pop hl
+ ld [hl], a
+ pop hl
+ jr .NextMove
+
+.done
+ pop bc
+ pop de
+ pop hl
+ ret
+; 4256e
+
+ShiftMoves: ; 4256e
+ ld c, NUM_MOVES - 1
+.loop
+ inc de
+ ld a, [de]
+ ld [hli], a
+ dec c
+ jr nz, .loop
+ ret
+; 42577
+
+
+EvoFlagAction: ; 42577
+ push de
+ ld d, $0
+ predef FlagPredef
+ pop de
+ ret
+; 42581
+
+GetPreEvolution: ; 42581
+; Find the first mon to evolve into CurPartySpecies.
+
+; Return carry and the new species in CurPartySpecies
+; if a pre-evolution is found.
+
+ ld c, 0
+.loop ; For each Pokemon...
+ ld hl, EvosAttacksPointers
+ ld b, 0
+rept 2
+ add hl, bc
+endr
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+.loop2 ; For each evolution...
+ ld a, [hli]
+ and a
+ jr z, .no_evolve ; If we jump, this Pokemon does not evolve into CurPartySpecies.
+ cp EVOLVE_STAT ; This evolution type has the extra parameter of stat comparison.
+ jr nz, .not_tyrogue
+ inc hl
+
+.not_tyrogue
+ inc hl
+ ld a, [CurPartySpecies]
+ cp [hl]
+ jr z, .found_preevo
+ inc hl
+ ld a, [hl]
+ and a
+ jr nz, .loop2
+
+.no_evolve
+ inc c
+ ld a, c
+ cp NUM_POKEMON
+ jr c, .loop
+ and a
+ ret
+
+.found_preevo
+ inc c
+ ld a, c
+ ld [CurPartySpecies], a
+ scf
+ ret
+; 425b1
diff --git a/engine/facings.asm b/engine/facings.asm
index 47e6fd352..f807e77f8 100644
--- a/engine/facings.asm
+++ b/engine/facings.asm
@@ -50,7 +50,7 @@ BEHIND_BG EQU 1 << OAM_PRIORITY
Facing00:
Facing02:
Facing24:
-Facing26: ; 408b
+Facing26: ; standing down
db 4 ; #
db 0, 0, 0, $00
db 0, 8, 0, $01
@@ -58,7 +58,7 @@ Facing26: ; 408b
db 8, 8, 2, $03
; 409c
-Facing01: ; 409c
+Facing01: ; walking down 1
db 4 ; #
db 0, 0, 0, $80
db 0, 8, 0, $81
@@ -66,7 +66,7 @@ Facing01: ; 409c
db 8, 8, 2, $83
; 40ad
-Facing03: ; 40ad
+Facing03: ; walking down 2
db 4 ; #
db 0, 8, X_FLIP, $80
db 0, 0, X_FLIP, $81
@@ -75,7 +75,7 @@ Facing03: ; 40ad
; 40be
Facing04:
-Facing06: ; 40be
+Facing06: ; standing up
db 4 ; #
db 0, 0, 0, $04
db 0, 8, 0, $05
@@ -83,7 +83,7 @@ Facing06: ; 40be
db 8, 8, 2, $07
; 40cf
-Facing05: ; 40cf
+Facing05: ; walking up 1
db 4 ; #
db 0, 0, 0, $84
db 0, 8, 0, $85
@@ -91,7 +91,7 @@ Facing05: ; 40cf
db 8, 8, 2, $87
; 40e0
-Facing07: ; 40e0
+Facing07: ; walking up 2
db 4 ; #
db 0, 8, X_FLIP, $84
db 0, 0, X_FLIP, $85
@@ -100,7 +100,7 @@ Facing07: ; 40e0
; 40f1
Facing08:
-Facing10: ; 40f1
+Facing10: ; standing left
db 4 ; #
db 0, 0, 0, $08
db 0, 8, 0, $09
@@ -109,7 +109,7 @@ Facing10: ; 40f1
; 4102
Facing12:
-Facing14: ; 4102
+Facing14: ; standing right
db 4 ; #
db 0, 8, X_FLIP, $08
db 0, 0, X_FLIP, $09
@@ -118,7 +118,7 @@ Facing14: ; 4102
; 4113
Facing09:
-Facing11: ; 4113
+Facing11: ; walking left
db 4 ; #
db 0, 0, 0, $88
db 0, 8, 0, $89
@@ -127,7 +127,7 @@ Facing11: ; 4113
; 4124
Facing13:
-Facing15: ; 4124
+Facing15: ; walking right
db 4 ; #
db 0, 8, X_FLIP, $88
db 0, 0, X_FLIP, $89
@@ -135,7 +135,7 @@ Facing15: ; 4124
db 8, 0, 2 | X_FLIP, $8b
; 4135
-Facing16: ; 4135
+Facing16: ; fishing down
db 5 ; #
db 0, 0, 0, $00
db 0, 8, 0, $01
@@ -144,7 +144,7 @@ Facing16: ; 4135
db 16, 0, 4, $fc
; 414a
-Facing17: ; 414a
+Facing17: ; fishing up
db 5 ; #
db 0, 0, 0, $04
db 0, 8, 0, $05
@@ -153,7 +153,7 @@ Facing17: ; 414a
db -8, 0, 4, $fc
; 415f
-Facing18: ; 415f
+Facing18: ; fishing left
db 5 ; #
db 0, 0, 0, $08
db 0, 8, 0, $09
@@ -162,7 +162,7 @@ Facing18: ; 415f
db 5, -8, 4 | X_FLIP, $fd
; 4174
-Facing19: ; 4174
+Facing19: ; fishing right
db 5 ; #
db 0, 8, X_FLIP, $08
db 0, 0, X_FLIP, $09
@@ -171,7 +171,7 @@ Facing19: ; 4174
db 5, 16, 4, $fd
; 4189
-Facing20: ; 4189
+Facing20: ; emote
db 4 ; #
db 0, 0, 4, $f8
db 0, 8, 4, $f9
@@ -179,13 +179,13 @@ Facing20: ; 4189
db 8, 8, 4, $fb
; 419a
-Facing21: ; 419a
+Facing21: ; shadow
db 2 ; #
db 0, 0, 4, $fc
db 0, 8, 4 | X_FLIP, $fc
; 41a3
-Facing23: ; 41a3
+Facing23: ; big snorlax or lapras doll
db 16 ; #
db 0, 0, 0, $00
db 0, 8, 0, $01
@@ -221,7 +221,7 @@ Facing27: ; 41f5
db 8, 0, X_FLIP, $07
; 4206
-Facing22: ; 4206
+Facing22: ; big doll other than snorlax or lapras
db 14 ; #
db 0, 0, 0, $00
db 0, 8, 0, $01
@@ -239,7 +239,7 @@ Facing22: ; 4206
db 24, 16, 0, $0b
; 423f
-Facing28: ; 423f
+Facing28: ; boulder dust 1
db 4 ; #
db 0, 0, 4, $fe
db 0, 8, 4, $fe
@@ -247,7 +247,7 @@ Facing28: ; 423f
db 8, 8, 4, $fe
; 4250
-Facing29: ; 4250
+Facing29: ; boulder dust 2
db 4 ; #
db 0, 0, 4, $ff
db 0, 8, 4, $ff
diff --git a/engine/flypoints.asm b/engine/flypoints.asm
deleted file mode 100755
index 7f6d384aa..000000000
--- a/engine/flypoints.asm
+++ /dev/null
@@ -1,916 +0,0 @@
-_FlyMap: ; 91af3
- call ClearBGPalettes
- call ClearTileMap
- call ClearSprites
- ld hl, hInMenu
- ld a, [hl]
- push af
- ld [hl], $1
- xor a
- ld [hBGMapMode], a
- callba Function8cf53
- call Function91ff2
- ld de, GFX_922e1
- ld hl, VTiles2 tile $30
- lb bc, BANK(GFX_922e1), 6
- call Request1bpp
- call FlyMap
- call Function91c8f
- ld b, $2
- call GetSGBLayout
- call SetPalettes
-.loop
- call JoyTextDelay
- ld hl, hJoyPressed
- ld a, [hl]
- and B_BUTTON
- jr nz, .pressedB
- ld a, [hl]
- and A_BUTTON
- jr nz, .pressedA
- call FlyMapScroll
- call GetMapCursorCoordinates
- callba Function8cf69
- call DelayFrame
- jr .loop
-
-.pressedB
- ld a, -1
- jr .exit
-
-.pressedA
- ld a, [wd002]
- ld l, a
- ld h, 0
- add hl, hl
- ld de, Flypoints + 1
- add hl, de
- ld a, [hl]
-
-.exit
- ld [wd002], a
- pop af
- ld [hInMenu], a
- call ClearBGPalettes
- ld a, $90
- ld [hWY], a
- xor a
- ld [hBGMapAddress], a
- ld a, VBGMap0 / $100
- ld [hBGMapAddress + 1], a
- ld a, [wd002]
- ld e, a
- ret
-; 91b73
-
-FlyMapScroll: ; 91b73
- ld a, [StartFlypoint]
- ld e, a
- ld a, [EndFlypoint]
- ld d, a
- ld hl, hJoyLast
- ld a, [hl]
- and D_UP
- jr nz, .ScrollNext
- ld a, [hl]
- and D_DOWN
- jr nz, .ScrollPrev
- ret
-
-.ScrollNext
- ld hl, wd002
- ld a, [hl]
- cp d
- jr nz, .NotAtEndYet
- ld a, e
- dec a
- ld [hl], a
-
-.NotAtEndYet
- inc [hl]
- call CheckIfVisitedFlypoint
- jr z, .ScrollNext
- jr .Finally
-
-.ScrollPrev
- ld hl, wd002
- ld a, [hl]
- cp e
- jr nz, .NotAtStartYet
- ld a, d
- inc a
- ld [hl], a
-
-.NotAtStartYet
- dec [hl]
- call CheckIfVisitedFlypoint
- jr z, .ScrollPrev
-
-.Finally
- call TownMapBubble
- call WaitBGMap
- xor a
- ld [hBGMapMode], a
- ret
-; 91bb5
-
-TownMapBubble: ; 91bb5
-; Draw the bubble containing the location text in the town map HUD
-
-; Top-left corner
- hlcoord 1, 0
- ld a, $30
- ld [hli], a
-
-; Top row
- ld bc, 16
- ld a, " "
- call ByteFill
-
-; Top-right corner
- ld a, $31
- ld [hl], a
- hlcoord 1, 1
-
-
-; Middle row
- ld bc, 18
- ld a, " "
- call ByteFill
-
-
-; Bottom-left corner
- hlcoord 1, 2
- ld a, $32
- ld [hli], a
-
-; Bottom row
- ld bc, 16
- ld a, " "
- call ByteFill
-
-; Bottom-right corner
- ld a, $33
- ld [hl], a
-
-
-; Print "Where?"
- hlcoord 2, 0
- ld de, .Where
- call PlaceString
-
-; Print the name of the default flypoint
- call .Name
-
-; Up/down arrows
- hlcoord 18, 1
- ld [hl], $34
- ret
-
-.Where
- db "Where?@"
-
-.Name
-; We need the map location of the default flypoint
- ld a, [wd002]
- ld l, a
- ld h, 0
- add hl, hl ; two bytes per flypoint
- ld de, Flypoints
- add hl, de
- ld e, [hl]
-
- callba GetLandmarkName
-
- hlcoord 2, 1
- ld de, StringBuffer1
- call PlaceString
- ret
-; 91c17
-
-GetMapCursorCoordinates: ; 91c17
- ld a, [wd002]
- ld l, a
- ld h, $0
- add hl, hl
- ld de, Flypoints
- add hl, de
- ld e, [hl]
- callba GetLandmarkCoords
- ld a, [wd003]
- ld c, a
- ld a, [wd004]
- ld b, a
- ld hl, $4
- add hl, bc
- ld [hl], e
- ld hl, $5
- add hl, bc
- ld [hl], d
- ret
-; 91c3c
-
-CheckIfVisitedFlypoint: ; 91c3c
-; Check if the flypoint loaded in [hl] has been visited yet.
- push bc
- push de
- push hl
- ld l, [hl]
- ld h, 0
- add hl, hl
- ld de, Flypoints + 1
- add hl, de
- ld c, [hl]
- call HasVisitedSpawn
- pop hl
- pop de
- pop bc
- and a
- ret
-; 91c50
-
-HasVisitedSpawn: ; 91c50
-; Check if spawn point c has been visited.
- ld hl, VisitedSpawns
- ld b, CHECK_FLAG
- ld d, 0
- predef FlagPredef
- ld a, c
- ret
-; 91c5e
-
-Flypoints: ; 91c5e
-; landmark, spawn point
-
- const_def
-
-flypoint: MACRO
-; \1\@FLY EQUS "FLY_\1"
-; \1\@SPAWN EQUS "SPAWN_\1"
- ; const \1\@FLY
- ; db \2, \1\@SPAWN
- const FLY_\1
- db \2, SPAWN_\1
-ENDM
-
-; Johto
- flypoint NEW_BARK, NEW_BARK_TOWN
- flypoint CHERRYGROVE, CHERRYGROVE_CITY
- flypoint VIOLET, VIOLET_CITY
- flypoint AZALEA, AZALEA_TOWN
- flypoint GOLDENROD, GOLDENROD_CITY
- flypoint ECRUTEAK, ECRUTEAK_CITY
- flypoint OLIVINE, OLIVINE_CITY
- flypoint CIANWOOD, CIANWOOD_CITY
- flypoint MAHOGANY, MAHOGANY_TOWN
- flypoint LAKE, LAKE_OF_RAGE
- flypoint BLACKTHORN, BLACKTHORN_CITY
- flypoint MT_SILVER, SILVER_CAVE
-
-; Kanto
-KANTO_FLYPOINT EQU const_value
-
- flypoint PALLET, PALLET_TOWN
- flypoint VIRIDIAN, VIRIDIAN_CITY
- flypoint PEWTER, PEWTER_CITY
- flypoint CERULEAN, CERULEAN_CITY
- flypoint VERMILION, VERMILION_CITY
- flypoint ROCK_TUNNEL, ROCK_TUNNEL
- flypoint LAVENDER, LAVENDER_TOWN
- flypoint CELADON, CELADON_CITY
- flypoint SAFFRON, SAFFRON_CITY
- flypoint FUCHSIA, FUCHSIA_CITY
- flypoint CINNABAR, CINNABAR_ISLAND
- flypoint INDIGO, INDIGO_PLATEAU
-
- db -1
-; 91c8f
-
-Function91c8f: ; 91c8f
- ret
-; 91c90
-
-FlyMap: ; 91c90
-
- ld a, [MapGroup]
- ld b, a
- ld a, [MapNumber]
- ld c, a
- call GetWorldMapLocation
-
-; If we're not in a valid location, i.e. Pokecenter floor 2F,
-; the backup map information is used
-
- cp SPECIAL_MAP
- jr nz, .CheckRegion
-
- ld a, [BackupMapGroup]
- ld b, a
- ld a, [BackupMapNumber]
- ld c, a
- call GetWorldMapLocation
-
-.CheckRegion
-; The first 46 locations are part of Johto. The rest are in Kanto
- cp KANTO_LANDMARK
- jr nc, .KantoFlyMap
-
-.JohtoFlyMap
-; Note that .NoKanto should be modified in tandem with this branch
-
- push af
-
-; Start from New Bark Town
- ld a, FLY_NEW_BARK
- ld [wd002], a
-
-; Flypoints begin at New Bark Town...
- ld [StartFlypoint], a
-; ..and end at Silver Cave
- ld a, FLY_MT_SILVER
- ld [EndFlypoint], a
-
-; Fill out the map
- call FillJohtoMap
- call .MapHud
- pop af
- call TownMapPlayerIcon
- ret
-
-.KantoFlyMap
-
-; The event that there are no flypoints enabled in a map is not
-; accounted for. As a result, if you attempt to select a flypoint
-; when there are none enabled, the game will crash. Additionally,
-; the flypoint selection has a default starting point that
-; can be flown to even if none are enabled
-
-; To prevent both of these things from happening when the player
-; enters Kanto, fly access is restricted until Indigo Plateau is
-; visited and its flypoint enabled
-
- push af
- ld c, SPAWN_INDIGO
- call HasVisitedSpawn
- and a
- jr z, .NoKanto
-
-; Kanto's map is only loaded if we've visited Indigo Plateau
-
-; Flypoints begin at Pallet Town...
- ld a, FLY_PALLET
- ld [StartFlypoint], a
-; ...and end at Indigo Plateau
- ld a, FLY_INDIGO
- ld [EndFlypoint], a
-
-; Because Indigo Plateau is the first flypoint the player
-; visits, it's made the default flypoint
- ld [wd002], a
-
-; Fill out the map
- call FillKantoMap
- call .MapHud
- pop af
- call TownMapPlayerIcon
- ret
-
-.NoKanto
-; If Indigo Plateau hasn't been visited, we use Johto's map instead
-
-; Start from New Bark Town
- ld a, FLY_NEW_BARK
- ld [wd002], a
-
-; Flypoints begin at New Bark Town...
- ld [StartFlypoint], a
-; ..and end at Silver Cave
- ld a, FLY_MT_SILVER
- ld [EndFlypoint], a
-
- call FillJohtoMap
-
- pop af
-
-.MapHud
- call TownMapBubble
- call TownMapPals
-
- ld hl, VBGMap0 ; BG Map 0
- call TownMapBGUpdate
-
- call TownMapMon
- ld a, c
- ld [wd003], a
- ld a, b
- ld [wd004], a
- ret
-; 91d11
-
-Function91d11: ; 91d11
- ld a, [wd002]
- push af
- ld a, [wd003]
- push af
- ld a, e
- ld [wd002], a
- call ClearSprites
- xor a
- ld [hBGMapMode], a
- ld a, $1
- ld [hInMenu], a
- ld de, GFX_922d1
- ld hl, VTiles0 tile $7f
- lb bc, BANK(GFX_922d1), 1
- call Request2bpp ; actually 1bpp
- call Function91ed0
- ld hl, VTiles0 tile $78
- ld c, $4
- call Request2bpp
- call Function91ff2
- call FillKantoMap
- call Function91de9
- call TownMapPals
- ld hl, VBGMap1
- call TownMapBGUpdate
- call FillJohtoMap
- call Function91de9
- call TownMapPals
- ld hl, VBGMap0
- call TownMapBGUpdate
- ld b, $2
- call GetSGBLayout
- call SetPalettes
- xor a
- ld [hBGMapMode], a
- xor a
- call Function91e1e
-.asm_91d6e
- call JoyTextDelay
- ld hl, hJoyPressed
- ld a, [hl]
- and A_BUTTON | B_BUTTON
- jr nz, .asm_91d8f
- ld a, [hJoypadDown]
- and SELECT
- jr nz, .asm_91d87
- call Function91d9b
- call Function91dcd
- jr .asm_91d8a
-
-.asm_91d87
- call Function91e5a
-
-.asm_91d8a
- call DelayFrame
- jr .asm_91d6e
-
-.asm_91d8f
- call ClearSprites
- pop af
- ld [wd003], a
- pop af
- ld [wd002], a
- ret
-; 91d9b
-
-Function91d9b: ; 91d9b
- ld a, [hl]
- and $20
- jr nz, .asm_91da6
- ld a, [hl]
- and $10
- jr nz, .asm_91db7
- ret
-
-.asm_91da6
- ld a, [hWY]
- cp $90
- ret z
- call ClearSprites
- ld a, $90
- ld [hWY], a
- xor a
- call Function91e1e
- ret
-
-.asm_91db7
- ld a, [StatusFlags]
- bit 6, a
- ret z
- ld a, [hWY]
- and a
- ret z
- call ClearSprites
- xor a
- ld [hWY], a
- ld a, $1
- call Function91e1e
- ret
-; 91dcd
-
-Function91dcd: ; 91dcd
- ld a, [hVBlankCounter]
- ld e, a
- and $f
- ret nz
- ld a, e
- and $10
- jr nz, .asm_91ddc
- call ClearSprites
- ret
-
-.asm_91ddc
- hlcoord 0, 0
- ld de, Sprites
- ld bc, $a0
- call CopyBytes
- ret
-; 91de9
-
-Function91de9: ; 91de9
- hlcoord 0, 0
- ld bc, SCREEN_WIDTH
- ld a, $7f
- call ByteFill
- hlcoord 0, 1
- ld a, $6
- ld [hli], a
- ld bc, SCREEN_HEIGHT
- ld a, $7
- call ByteFill
- ld [hl], $17
- call GetPokemonName
- hlcoord 2, 0
- call PlaceString
- ld h, b
- ld l, c
- ld de, String_91e16
- call PlaceString
- ret
-; 91e16
-
-String_91e16:
- db "'S NEST@"
-; 91e1e
-
-Function91e1e: ; 91e1e
- ld [wd003], a
- ld e, a
- callba Function2a01f
- decoord 0, 0
- ld hl, Sprites
-.asm_91e2e
- ld a, [de]
- and a
- jr z, .asm_91e4d
- push de
- ld e, a
- push hl
- callba GetLandmarkCoords
- pop hl
- ld a, d
- sub $4
- ld [hli], a
- ld a, e
- sub $4
- ld [hli], a
- ld a, $7f
- ld [hli], a
- xor a
- ld [hli], a
- pop de
- inc de
- jr .asm_91e2e
-
-.asm_91e4d
- ld hl, Sprites
- decoord 0, 0
- ld bc, $a0
- call CopyBytes
- ret
-; 91e5a
-
-Function91e5a: ; 91e5a
- call Function91ea9
- ret c
-
- ld a, [wd002]
- ld e, a
- callba GetLandmarkCoords
- ld c, e
- ld b, d
- ld de, Unknown_91e9c
- ld hl, Sprites
-.asm_91e70
- ld a, [de]
- cp $80
- jr z, .asm_91e91
-
- add b
- ld [hli], a
- inc de
-
- ld a, [de]
- add c
- ld [hli], a
- inc de
-
- ld a, [de]
- add $78
- ld [hli], a
- inc de
-
- push bc
- ld c, 0
- ld a, [PlayerGender]
- bit 0, a
- jr z, .asm_91e8c
- inc c
-.asm_91e8c
- ld a, c
- ld [hli], a
- pop bc
-
- jr .asm_91e70
-
-.asm_91e91
- ld hl, Sprites + $10
- ld bc, SpritesEnd - (Sprites + $10)
- xor a
- call ByteFill
- ret
-; 91e9c
-
-Unknown_91e9c: ; 91e9c
- db -8, -8, 0
- db -8, 0, 1
- db 0, -8, 2
- db 0, 0, 3
- db $80 ; terminator
-; 91ea9
-
-Function91ea9: ; 91ea9
- ld a, [wd002]
- cp FAST_SHIP
- jr z, .johto
- cp KANTO_LANDMARK
- jr c, .johto
-
-.kanto
- ld a, [wd003]
- and a
- jr z, .clear
- jr .ok
-
-.johto
- ld a, [wd003]
- and a
- jr nz, .clear
-
-.ok
- and a
- ret
-
-.clear
- ld hl, Sprites
- ld bc, SpritesEnd - Sprites
- xor a
- call ByteFill
- scf
- ret
-; 91ed0
-
-Function91ed0: ; 91ed0
- ld a, [wd002]
- cp FAST_SHIP
- jr z, .asm_91ede
- callba GetPlayerIcon
- ret
-
-.asm_91ede
- ld de, FastShipGFX
- ld b, BANK(FastShipGFX)
- ret
-; 91ee4
-
-TownMapBGUpdate: ; 91ee4
-; Update BG Map tiles and attributes
-
-; BG Map address
- ld a, l
- ld [hBGMapAddress], a
- ld a, h
- ld [hBGMapAddress + 1], a
-
-; Only update palettes on CGB
- ld a, [hCGB]
- and a
- jr z, .tiles
-
-; BG Map mode 2 (palettes)
- ld a, 2
- ld [hBGMapMode], a
-
-; The BG Map is updated in thirds, so we wait
-; 3 frames to update the whole screen's palettes.
- ld c, 3
- call DelayFrames
-
-.tiles
-; Update BG Map tiles
- call WaitBGMap
-
-; Turn off BG Map update
- xor a
- ld [hBGMapMode], a
- ret
-; 91eff
-
-FillJohtoMap: ; 91eff
- ld de, JohtoMap
- jr FillTownMap
-
-FillKantoMap: ; 91f04
- ld de, KantoMap
-
-FillTownMap: ; 91f07
- hlcoord 0, 0
-.loop
- ld a, [de]
- cp $ff
- ret z
- ld a, [de]
- ld [hli], a
- inc de
- jr .loop
-; 91f13
-
-TownMapPals: ; 91f13
-; Assign palettes based on tile ids
-
- hlcoord 0, 0
- decoord 0, 0, AttrMap
- ld bc, 360
-.loop
-; Current tile
- ld a, [hli]
- push hl
-
-; HP/borders use palette 0
- cp $60
- jr nc, .pal0
-
-; The palette data is condensed to nybbles,
-; least-significant first.
- ld hl, TownMapPalMap
- srl a
- jr c, .odd
-
-; Even-numbered tile ids take the bottom nybble...
- add l
- ld l, a
- ld a, h
- adc 0
- ld h, a
- ld a, [hl]
- and %111
- jr .update
-
-.odd
-; ...and odd ids take the top.
- add l
- ld l, a
- ld a, h
- adc 0
- ld h, a
- ld a, [hl]
- swap a
- and %111
- jr .update
-
-.pal0
- xor a
-
-.update
- pop hl
- ld [de], a
- inc de
- dec bc
- ld a, b
- or c
- jr nz, .loop
- ret
-
-TownMapPalMap:
- db $11, $21, $22, $00, $11, $13, $54, $54, $11, $21, $22, $00
- db $11, $10, $01, $00, $11, $21, $22, $00, $00, $00, $00, $00
- db $00, $00, $44, $04, $00, $00, $00, $00, $33, $33, $33, $33
- db $33, $33, $33, $03, $33, $33, $33, $33, $00, $00, $00, $00
-; 91f7b
-
-TownMapMon: ; 91f7b
-; Draw the FlyMon icon at town map location in
-
-; Get FlyMon species
- ld a, [CurPartyMon]
- ld hl, PartySpecies
- ld e, a
- ld d, $0
- add hl, de
- ld a, [hl]
- ld [wd265], a
-
-; Get FlyMon icon
- ld e, 8 ; starting tile in VRAM
- callba GetSpeciesIcon
-
-; Animation/palette
- ld de, 0
- ld a, $0
- call Function3b2a
-
- ld hl, 3
- add hl, bc
- ld [hl], 8
- ld hl, 2
- add hl, bc
- ld [hl], 0
- ret
-; 91fa6
-
-TownMapPlayerIcon: ; 91fa6
-; Draw the player icon at town map location in a
- push af
-
- callba GetPlayerIcon
-
-; Standing icon
- ld hl, VTiles0 tile $10
- ld c, 4 ; # tiles
- call Request2bpp
-
-; Walking icon
- ld hl, $c0
- add hl, de
- ld d, h
- ld e, l
- ld hl, VTiles0 tile $14
- ld c, 4 ; # tiles
- ld a, BANK(ChrisSpriteGFX) ; does nothing
- call Request2bpp
-
-; Animation/palette
- ld de, 0
- ld b, $0a ; Male
- ld a, [PlayerGender]
- bit 0, a
- jr z, .asm_91fd3
- ld b, $1e ; Female
-.asm_91fd3
- ld a, b
- call Function3b2a
-
- ld hl, $3
- add hl, bc
- ld [hl], $10
-
- pop af
- ld e, a
- push bc
- callba GetLandmarkCoords
- pop bc
-
- ld hl, 4
- add hl, bc
- ld [hl], e
- ld hl, 5
- add hl, bc
- ld [hl], d
- ret
-; 0x91ff2
-
-Function91ff2: ; 91ff2
- ld hl, TownMapGFX
- ld de, VTiles2
- lb bc, BANK(TownMapGFX), $30
- call DecompressRequest2bpp
- ret
-; 91fff
-
-
-JohtoMap: ; 91fff
-INCBIN "gfx/misc/johto.bin"
-; 92168
-
-KantoMap: ; 92168
-INCBIN "gfx/misc/kanto.bin"
-; 922d1
-
-
-GFX_922d1: ; 922d1
-INCBIN "gfx/unknown/0922d1.2bpp"
-GFX_922e1: ; 922e1
-INCBIN "gfx/unknown/0922e1.2bpp"
-GFX_92301: ; 92301
-INCBIN "gfx/unknown/092301.2bpp"
diff --git a/engine/intro_menu.asm b/engine/intro_menu.asm
new file mode 100755
index 000000000..cf5bcf8a0
--- /dev/null
+++ b/engine/intro_menu.asm
@@ -0,0 +1,1427 @@
+_MainMenu: ; 5ae8
+ ld de, MUSIC_NONE
+ call PlayMusic
+ call DelayFrame
+ ld de, MUSIC_MAIN_MENU
+ ld a, e
+ ld [wMapMusic], a
+ call PlayMusic
+ callba MainMenu
+ jp Function6219
+; 5b04
+
+; unreferenced
+ ret
+; 5b05
+
+PrintDayOfWeek: ; 5b05
+ push de
+ ld hl, .Days
+ ld a, b
+ call GetNthString
+ ld d, h
+ ld e, l
+ pop hl
+ call PlaceString
+ ld h, b
+ ld l, c
+ ld de, .Day
+ call PlaceString
+ ret
+; 5b1c
+
+.Days ; 5b1c
+ db "SUN@"
+ db "MON@"
+ db "TUES@"
+ db "WEDNES@"
+ db "THURS@"
+ db "FRI@"
+ db "SATUR@"
+; 5b40
+
+.Day ; 5b40
+ db "DAY@"
+; 5b44
+
+NewGame_ClearTileMapEtc: ; 5b44
+ xor a
+ ld [hMapAnims], a
+ call ClearTileMap
+ call LoadFontsExtra
+ call LoadStandardFont
+ call ResetTextRelatedRAM
+ ret
+; 5b54
+
+MysteryGift: ; 5b54
+ call UpdateTime
+ callba DoMysteryGiftIfDayHasPassed
+ callba DoMysteryGift
+ ret
+; 5b64
+
+OptionsMenu: ; 5b64
+ callba _OptionsMenu
+ ret
+; 5b6b
+
+NewGame: ; 5b6b
+ xor a
+ ld [wc2cc], a
+ call ResetWRAM
+ call NewGame_ClearTileMapEtc
+ call AreYouABoyOrAreYouAGirl
+ call OakSpeech
+ call InitializeWorld
+ ld a, 1
+ ld [wPreviousLandmark], a
+
+ ld a, SPAWN_HOME
+ ld [DefaultSpawnpoint], a
+
+ ld a, MAPSETUP_WARP
+ ld [hMapEntryMethod], a
+ jp FinishContinueFunction
+; 5b8f
+
+AreYouABoyOrAreYouAGirl: ; 5b8f
+ callba Function10632f ; some mobile stuff
+ jr c, .ok
+ callba InitGender
+ ret
+
+.ok
+ ld c, 0
+ callba InitMobileProfile ; mobile
+ ret
+; 5ba7
+
+ResetWRAM: ; 5ba7
+ xor a
+ ld [hBGMapMode], a
+ call _ResetWRAM
+ ret
+; 5bae
+
+_ResetWRAM: ; 5bae
+
+ ld hl, Sprites
+ ld bc, Options - Sprites
+ xor a
+ call ByteFill
+
+ ld hl, wd000
+ ld bc, wGameData - wd000
+ xor a
+ call ByteFill
+
+ ld hl, wGameData
+ ld bc, wGameDataEnd - wGameData
+ xor a
+ call ByteFill
+
+ ld a, [rLY]
+ ld [hSecondsBackup], a
+ call DelayFrame
+ ld a, [hRandomSub]
+ ld [PlayerID], a
+
+ ld a, [rLY]
+ ld [hSecondsBackup], a
+ call DelayFrame
+ ld a, [hRandomAdd]
+ ld [PlayerID + 1], a
+
+ call Random
+ ld [wSecretID], a
+ call DelayFrame
+ call Random
+ ld [wSecretID + 1], a
+
+ ld hl, PartyCount
+ call InitList
+
+ xor a
+ ld [wCurBox], a
+ ld [wSavedAtLeastOnce], a
+
+ call SetDefaultBoxNames
+
+ ld a, BANK(sBoxCount)
+ call GetSRAMBank
+ ld hl, sBoxCount
+ call InitList
+ call CloseSRAM
+
+ ld hl, NumItems
+ call InitList
+
+ ld hl, NumKeyItems
+ call InitList
+
+ ld hl, NumBalls
+ call InitList
+
+ ld hl, PCItems
+ call InitList
+
+ xor a
+ ld [wRoamMon1Species], a
+ ld [wRoamMon2Species], a
+ ld [wRoamMon3Species], a
+ ld a, -1
+ ld [wRoamMon1MapGroup], a
+ ld [wRoamMon2MapGroup], a
+ ld [wRoamMon3MapGroup], a
+ ld [wRoamMon1MapNumber], a
+ ld [wRoamMon2MapNumber], a
+ ld [wRoamMon3MapNumber], a
+
+ ld a, BANK(sMysteryGiftItem)
+ call GetSRAMBank
+ ld hl, sMysteryGiftItem
+ xor a
+ ld [hli], a
+ dec a
+ ld [hl], a
+ call CloseSRAM
+
+ call LoadOrRegenerateLuckyIDNumber
+ call InitializeMagikarpHouse
+
+ xor a
+ ld [MonType], a
+
+ ld [JohtoBadges], a
+ ld [KantoBadges], a
+
+ ld [Coins], a
+ ld [Coins + 1], a
+
+START_MONEY EQU 3000
+
+IF START_MONEY / $10000
+ ld a, START_MONEY / $10000
+ENDC
+ ld [Money], a
+ ld a, START_MONEY / $100 % $100
+ ld [Money + 1], a
+ ld a, START_MONEY % $100
+ ld [Money + 2], a
+
+ xor a
+ ld [wdc17], a
+
+ ld hl, wdc19
+ ld [hl], 2300 / $10000
+ inc hl
+ ld [hl], 2300 / $100 % $100
+ inc hl
+ ld [hl], 2300 % $100
+
+ call InitializeNPCNames
+
+ callba InitDecorations
+
+ callba DeletePartyMonMail
+
+ callba DeleteMobileEventIndex
+
+ call ResetGameTime
+ ret
+; 5ca1
+
+InitList: ; 5ca1
+; Loads 0 in the count and -1 in the first item or mon slot.
+ xor a
+ ld [hli], a
+ dec a
+ ld [hl], a
+ ret
+; 5ca6
+
+SetDefaultBoxNames: ; 5ca6
+ ld hl, wBoxNames
+ ld c, 0
+.loop
+ push hl
+ ld de, .Box
+ call CopyName2
+ dec hl
+ ld a, c
+ inc a
+ cp 10
+ jr c, .less
+ sub 10
+ ld [hl], "1"
+ inc hl
+
+.less
+ add "0"
+ ld [hli], a
+ ld [hl], "@"
+ pop hl
+ ld de, 9
+ add hl, de
+ inc c
+ ld a, c
+ cp NUM_BOXES
+ jr c, .loop
+ ret
+
+.Box
+ db "BOX@"
+; 5cd3
+
+InitializeMagikarpHouse: ; 5cd3
+ ld hl, wBestMagikarpLengthFeet
+ ld a, $3
+ ld [hli], a
+ ld a, $6
+ ld [hli], a
+ ld de, .Ralph
+ call CopyName2
+ ret
+; 5ce3
+
+.Ralph ; 5ce3
+ db "RALPH@"
+; 5ce9
+
+InitializeNPCNames: ; 5ce9
+ ld hl, .Rival
+ ld de, RivalName
+ call .Copy
+
+ ld hl, .Mom
+ ld de, MomsName
+ call .Copy
+
+ ld hl, .Red
+ ld de, RedsName
+ call .Copy
+
+ ld hl, .Green
+ ld de, GreensName
+
+.Copy
+ ld bc, NAME_LENGTH
+ call CopyBytes
+ ret
+
+.Rival db "???@"
+.Red db "RED@"
+.Green db "GREEN@"
+.Mom db "MOM@"
+; 5d23
+
+InitializeWorld: ; 5d23
+ call ShrinkPlayer
+ callba GetSpawnCoord
+ callba _InitializeStartDay
+ ret
+; 5d33
+
+LoadOrRegenerateLuckyIDNumber: ; 5d33
+ ld a, BANK(sLuckyIDNumber)
+ call GetSRAMBank
+ ld a, [CurDay]
+ inc a
+ ld b, a
+ ld a, [sLuckyNumberDay]
+ cp b
+ ld a, [sLuckyIDNumber + 1]
+ ld c, a
+ ld a, [sLuckyIDNumber]
+ jr z, .skip
+ ld a, b
+ ld [sLuckyNumberDay], a
+ call Random
+ ld c, a
+ call Random
+
+.skip
+ ld [wLuckyIDNumber], a
+ ld [sLuckyIDNumber], a
+ ld a, c
+ ld [wLuckyIDNumber + 1], a
+ ld [sLuckyIDNumber + 1], a
+ jp CloseSRAM
+; 5d65
+
+Continue: ; 5d65
+ callba TryLoadSaveFile
+ jr c, .FailToLoad
+ callba Function150b9
+ call LoadStandardMenuDataHeader
+ call DisplaySaveInfoOnContinue
+ ld a, $1
+ ld [hBGMapMode], a
+ ld c, 20
+ call DelayFrames
+ call ConfirmContinue
+ jr nc, .Check1Pass
+ call WriteBackup
+ jr .FailToLoad
+
+.Check1Pass
+ call Continue_CheckRTC_RestartClock
+ jr nc, .Check2Pass
+ call WriteBackup
+ jr .FailToLoad
+
+.Check2Pass
+ ld a, $8
+ ld [MusicFade], a
+ ld a, MUSIC_NONE % $100
+ ld [MusicFadeIDLo], a
+ ld a, MUSIC_NONE / $100
+ ld [MusicFadeIDHi], a
+ call ClearBGPalettes
+ call Continue_MobileAdapterMenu
+ call WriteBackup
+ call ClearTileMap
+ ld c, 20
+ call DelayFrames
+ callba JumpRoamMons
+ callba Function105091 ; Mystery Gift
+ callba Function140ae ; time-related
+ ld a, [wSpawnAfterChampion]
+ cp SPAWN_LANCE
+ jr z, .SpawnAfterE4
+ ld a, MAPSETUP_CONTINUE
+ ld [hMapEntryMethod], a
+ jp FinishContinueFunction
+
+.FailToLoad
+ ret
+
+.SpawnAfterE4
+ ld a, SPAWN_NEW_BARK
+ ld [wd001], a
+ call PostCreditsSpawn
+ jp FinishContinueFunction
+; 5de2
+
+SpawnAfterRed: ; 5de2
+ ld a, SPAWN_MT_SILVER
+ ld [wd001], a
+; 5de7
+
+PostCreditsSpawn: ; 5de7
+ xor a
+ ld [wSpawnAfterChampion], a
+ ld a, MAPSETUP_WARP
+ ld [hMapEntryMethod], a
+ ret
+; 5df0
+
+Continue_MobileAdapterMenu: ; 5df0
+ callba Function10632f ; mobile check
+ ret nc
+ ld hl, wd479
+ bit 1, [hl]
+ ret nz
+ ld a, 5
+ ld [MusicFade], a
+ ld a, MUSIC_MOBILE_ADAPTER_MENU % $100
+ ld [MusicFadeIDLo], a
+ ld a, MUSIC_MOBILE_ADAPTER_MENU / $100
+ ld [MusicFadeIDHi], a
+ ld c, 20
+ call DelayFrames
+ ld c, $1
+ callba InitMobileProfile ; mobile
+ callba _SaveData
+ ld a, 8
+ ld [MusicFade], a
+ ld a, MUSIC_NONE % $100
+ ld [MusicFadeIDLo], a
+ ld a, MUSIC_NONE / $100
+ ld [MusicFadeIDHi], a
+ ld c, 35
+ call DelayFrames
+ ret
+; 5e34
+
+ConfirmContinue: ; 5e34
+.loop
+ call DelayFrame
+ call GetJoypad
+ ld hl, hJoyPressed
+ bit 0, [hl]
+ jr nz, .PressA
+ bit 1, [hl]
+ jr z, .loop
+ scf
+ ret
+
+.PressA
+ ret
+; 5e48
+
+Continue_CheckRTC_RestartClock: ; 5e48
+ call CheckRTCStatus
+ and %10000000 ; Day count exceeded 16383
+ jr z, .pass
+ callba RestartClock
+ ld a, c
+ and a
+ jr z, .pass
+ scf
+ ret
+
+.pass
+ xor a
+ ret
+; 5e5d
+
+FinishContinueFunction: ; 5e5d
+.loop
+ xor a
+ ld [wc2c1], a
+ ld [wLinkMode], a
+ ld hl, GameTimerPause
+ set 0, [hl]
+ res 7, [hl]
+ ld hl, wEnteredMapFromContinue
+ set 1, [hl]
+ callba OverworldLoop
+ ld a, [wSpawnAfterChampion]
+ cp SPAWN_RED
+ jr z, .AfterRed
+ jp Reset
+
+.AfterRed
+ call SpawnAfterRed
+ jr .loop
+; 5e85
+
+DisplaySaveInfoOnContinue: ; 5e85
+ call CheckRTCStatus
+ and %10000000
+ jr z, .clock_ok
+ lb de, 4, 8
+ call DisplayContinueDataWithRTCError
+ ret
+
+.clock_ok
+ lb de, 4, 8
+ call DisplayNormalContinueData
+ ret
+; 5e9a
+
+DisplaySaveInfoOnSave: ; 5e9a
+ lb de, 4, 0
+ jr DisplayNormalContinueData
+; 5e9f
+
+DisplayNormalContinueData: ; 5e9f
+ call Continue_LoadMenuHeader
+ call Continue_DisplayBadgesDexPlayerName
+ call Continue_PrintGameTime
+ call LoadFontsExtra
+ call UpdateSprites
+ ret
+; 5eaf
+
+DisplayContinueDataWithRTCError: ; 5eaf
+ call Continue_LoadMenuHeader
+ call Continue_DisplayBadgesDexPlayerName
+ call Continue_UnknownGameTime
+ call LoadFontsExtra
+ call UpdateSprites
+ ret
+; 5ebf
+
+Continue_LoadMenuHeader: ; 5ebf
+ xor a
+ ld [hBGMapMode], a
+ ld hl, .MenuDataHeader_Dex
+ ld a, [StatusFlags]
+ bit 0, a ; pokedex
+ jr nz, .pokedex_header
+ ld hl, .MenuDataHeader_NoDex
+
+.pokedex_header
+ call Function1e35
+ call MenuBox
+ call Function1c89
+ ret
+; 5ed9
+
+.MenuDataHeader_Dex: ; 5ed9
+ db $40 ; flags
+ db 00, 00 ; start coords
+ db 09, 15 ; end coords
+ dw .MenuData2_Dex
+ db 1 ; default option
+; 5ee1
+
+.MenuData2_Dex: ; 5ee1
+ db $00 ; flags
+ db 4 ; items
+ db "PLAYER@"
+ db "BADGES@"
+ db "#DEX@"
+ db "TIME@"
+; 5efb
+
+.MenuDataHeader_NoDex: ; 5efb
+ db $40 ; flags
+ db 00, 00 ; start coords
+ db 09, 15 ; end coords
+ dw .MenuData2_NoDex
+ db 1 ; default option
+; 5f03
+
+.MenuData2_NoDex: ; 5f03
+ db $00 ; flags
+ db 4 ; items
+ db "PLAYER <PLAYER>@"
+ db "BADGES@"
+ db " @"
+ db "TIME@"
+; 5f1c
+
+
+Continue_DisplayBadgesDexPlayerName: ; 5f1c
+ call MenuBoxCoord2Tile
+ push hl
+ decoord 13, 4, 0
+ add hl, de
+ call Continue_DisplayBadgeCount
+ pop hl
+ push hl
+ decoord 12, 6, 0
+ add hl, de
+ call Continue_DisplayPokedexNumCaught
+ pop hl
+ push hl
+ decoord 8, 2, 0
+ add hl, de
+ ld de, .Player
+ call PlaceString
+ pop hl
+ ret
+
+.Player
+ db "<PLAYER>@"
+; 5f40
+
+Continue_PrintGameTime: ; 5f40
+ decoord 9, 8, 0
+ add hl, de
+ call Continue_DisplayGameTime
+ ret
+; 5f48
+
+Continue_UnknownGameTime: ; 5f48
+ decoord 9, 8, 0
+ add hl, de
+ ld de, .three_question_marks
+ call PlaceString
+ ret
+
+.three_question_marks
+ db " ???@"
+; 5f58
+
+Continue_DisplayBadgeCount: ; 5f58
+ push hl
+ ld hl, JohtoBadges
+ ld b, 2
+ call CountSetBits
+ pop hl
+ ld de, wd265
+ lb bc, 1, 2
+ jp PrintNum
+; 5f6b
+
+Continue_DisplayPokedexNumCaught: ; 5f6b
+ ld a, [StatusFlags]
+ bit 0, a
+ ret z
+ push hl
+ ld hl, PokedexCaught
+IF NUM_POKEMON % 8
+ ld b, NUM_POKEMON / 8 + 1
+ELSE
+ ld b, NUM_POKEMON / 8
+ENDC
+ call CountSetBits
+ pop hl
+ ld de, wd265
+ lb bc, 1, 3
+ jp PrintNum
+; 5f84
+
+Continue_DisplayGameTime: ; 5f84
+ ld de, GameTimeHours
+ lb bc, 2, 3
+ call PrintNum
+ ld [hl], "<COLON>"
+ inc hl
+ ld de, GameTimeMinutes
+ lb bc, PRINTNUM_LEADINGZEROS | 1, 2
+ jp PrintNum
+; 5f99
+
+
+OakSpeech: ; 0x5f99
+ callba InitClock
+ call RotateFourPalettesLeft
+ call ClearTileMap
+
+ ld de, MUSIC_ROUTE_30
+ call PlayMusic
+
+ call RotateFourPalettesRight
+ call RotateThreePalettesRight
+ xor a
+ ld [CurPartySpecies], a
+ ld a, POKEMON_PROF
+ ld [TrainerClass], a
+ call Intro_PrepTrainerPic
+
+ ld b, SCGB_1C
+ call GetSGBLayout
+ call Intro_RotatePalettesLeftFrontpic
+
+ ld hl, OakText1
+ call PrintText
+ call RotateThreePalettesRight
+ call ClearTileMap
+
+ ld a, WOOPER
+ ld [CurSpecies], a
+ ld [CurPartySpecies], a
+ call GetBaseData
+
+ hlcoord 6, 4
+ call PrepMonFrontpic
+
+ xor a
+ ld [TempMonDVs], a
+ ld [TempMonDVs + 1], a
+
+ ld b, SCGB_1C
+ call GetSGBLayout
+ call Intro_WipeInFrontpic
+
+ ld hl, OakText2
+ call PrintText
+ ld hl, OakText4
+ call PrintText
+ call RotateThreePalettesRight
+ call ClearTileMap
+
+ xor a
+ ld [CurPartySpecies], a
+ ld a, POKEMON_PROF
+ ld [TrainerClass], a
+ call Intro_PrepTrainerPic
+
+ ld b, SCGB_1C
+ call GetSGBLayout
+ call Intro_RotatePalettesLeftFrontpic
+
+ ld hl, OakText5
+ call PrintText
+ call RotateThreePalettesRight
+ call ClearTileMap
+
+ xor a
+ ld [CurPartySpecies], a
+ callba DrawIntroPlayerPic
+
+ ld b, SCGB_1C
+ call GetSGBLayout
+ call Intro_RotatePalettesLeftFrontpic
+
+ ld hl, OakText6
+ call PrintText
+ call NamePlayer
+ ld hl, OakText7
+ call PrintText
+ ret
+
+OakText1: ; 0x6045
+ text_jump _OakText1
+ db "@"
+
+OakText2: ; 0x604a
+ text_jump _OakText2
+ start_asm
+ ld a, WOOPER
+ call PlayCry
+ call WaitSFX
+ ld hl, OakText3
+ ret
+
+OakText3: ; 0x605b
+ text_jump _OakText3
+ db "@"
+
+OakText4: ; 0x6060
+ text_jump _OakText4
+ db "@"
+
+OakText5: ; 0x6065
+ text_jump _OakText5
+ db "@"
+
+OakText6: ; 0x606a
+ text_jump _OakText6
+ db "@"
+
+OakText7: ; 0x606f
+ text_jump _OakText7
+ db "@"
+
+NamePlayer: ; 0x6074
+ callba MovePlayerPicRight
+ callba ShowPlayerNamingChoices
+ ld a, [MenuSelection2]
+ dec a
+ jr z, .NewName
+ call StorePlayerName
+ callba Function8c1d
+ callba MovePlayerPicLeft
+ ret
+
+.NewName
+ ld b, 1
+ ld de, PlayerName
+ callba NamingScreen
+
+ call RotateThreePalettesRight
+ call ClearTileMap
+
+ call LoadFontsExtra
+ call WaitBGMap
+
+ xor a
+ ld [CurPartySpecies], a
+ callba DrawIntroPlayerPic
+
+ ld b, SCGB_1C
+ call GetSGBLayout
+ call RotateThreePalettesLeft
+
+ ld hl, PlayerName
+ ld de, .Chris
+ ld a, [PlayerGender]
+ bit 0, a
+ jr z, .Male
+ ld de, .Kris
+.Male
+ call InitName
+ ret
+
+.Chris
+ db "CHRIS@@@@@@"
+.Kris
+ db "KRIS@@@@@@@"
+; 60e9
+
+Function60e9: ; Unreferenced
+ call LoadMenuDataHeader
+ call InterpretMenu2
+ ld a, [MenuSelection2]
+ dec a
+ call CopyNameFromMenu
+ call WriteBackup
+ ret
+; 60fa
+
+StorePlayerName: ; 60fa
+ ld a, "@"
+ ld bc, NAME_LENGTH
+ ld hl, PlayerName
+ call ByteFill
+ ld hl, PlayerName
+ ld de, StringBuffer2
+ call CopyName2
+ ret
+; 610f
+
+ShrinkPlayer: ; 610f
+
+ ld a, [hROMBank]
+ push af
+
+ ld a, 0 << 7 | 32 ; fade out
+ ld [MusicFade], a
+ ld de, MUSIC_NONE
+ ld a, e
+ ld [MusicFadeIDLo], a
+ ld a, d
+ ld [MusicFadeIDHi], a
+
+ ld de, SFX_ESCAPE_ROPE
+ call PlaySFX
+ pop af
+ rst Bankswitch
+
+ ld c, 8
+ call DelayFrames
+
+ ld hl, Shrink1Pic
+ ld b, BANK(Shrink1Pic)
+ call ShrinkFrame
+
+ ld c, 8
+ call DelayFrames
+
+ ld hl, Shrink2Pic
+ ld b, BANK(Shrink2Pic)
+ call ShrinkFrame
+
+ ld c, 8
+ call DelayFrames
+
+ hlcoord 6, 5
+ ld b, 7
+ ld c, 7
+ call ClearBox
+
+ ld c, 3
+ call DelayFrames
+
+ call Intro_PlacePlayerSprite
+ call LoadFontsExtra
+
+ ld c, 50
+ call DelayFrames
+
+ call RotateThreePalettesRight
+ call ClearTileMap
+ ret
+; 616a
+
+Intro_RotatePalettesLeftFrontpic: ; 616a
+ ld hl, IntroFadePalettes
+ ld b, IntroFadePalettesEnd - IntroFadePalettes
+.loop
+ ld a, [hli]
+ call DmgToCgbBGPals
+ ld c, 10
+ call DelayFrames
+ dec b
+ jr nz, .loop
+ ret
+; 617c
+
+IntroFadePalettes: ; 0x617c
+ db %01010100
+ db %10101000
+ db %11111100
+ db %11111000
+ db %11110100
+ db %11100100
+IntroFadePalettesEnd
+; 6182
+
+Intro_WipeInFrontpic: ; 6182
+ ld a, $77
+ ld [hWX], a
+ call DelayFrame
+ ld a, %11100100
+ call DmgToCgbBGPals
+.loop
+ call DelayFrame
+ ld a, [hWX]
+ sub $8
+ cp -1
+ ret z
+ ld [hWX], a
+ jr .loop
+; 619c
+
+Intro_PrepTrainerPic: ; 619c
+ ld de, VTiles2
+ callba GetTrainerPic
+ xor a
+ ld [hFillBox], a
+ hlcoord 6, 4
+ lb bc, 7, 7
+ predef FillBox
+ ret
+; 61b4
+
+ShrinkFrame: ; 61b4
+ ld de, VTiles2
+ ld c, $31
+ predef DecompressPredef
+ xor a
+ ld [hFillBox], a
+ hlcoord 6, 4
+ lb bc, 7, 7
+ predef FillBox
+ ret
+; 61cd
+
+Intro_PlacePlayerSprite: ; 61cd
+
+ callba GetPlayerIcon
+ ld c, $c
+ ld hl, VTiles0
+ call Request2bpp
+
+ ld hl, Sprites
+ ld de, .sprites
+ ld a, [de]
+ inc de
+
+ ld c, a
+.loop
+ ld a, [de]
+ inc de
+ ld [hli], a
+ ld a, [de]
+ inc de
+ ld [hli], a
+ ld a, [de]
+ inc de
+ ld [hli], a
+
+ ld b, 0
+ ld a, [PlayerGender]
+ bit 0, a
+ jr z, .male
+ ld b, 1
+.male
+ ld a, b
+
+ ld [hli], a
+ dec c
+ jr nz, .loop
+ ret
+; 61fe
+
+.sprites ; 61fe
+ db 4
+ db $4c, $48, 0
+ db $4c, $50, 1
+ db $54, $48, 2
+ db $54, $50, 3
+; 620b
+
+
+Function620b: ; 620b
+ callab Functione4579
+ jr c, Function6219
+ callba CrystalIntro
+
+Function6219: ; 6219
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+
+ call .TitleScreen
+ call DelayFrame
+.loop
+ call Function627b
+ jr nc, .loop
+
+ call ClearSprites
+ call ClearBGPalettes
+
+ pop af
+ ld [rSVBK], a
+
+ ld hl, rLCDC
+ res 2, [hl]
+ call ClearScreen
+ call Function3200
+ xor a
+ ld [hLCDStatCustom], a
+ ld [hSCX], a
+ ld [hSCY], a
+ ld a, $7
+ ld [hWX], a
+ ld a, $90
+ ld [hWY], a
+ ld b, SCGB_08
+ call GetSGBLayout
+ call UpdateTimePals
+ ld a, [wcf64]
+ cp $5
+ jr c, .ok
+ xor a
+.ok
+ ld e, a
+ ld d, 0
+ ld hl, .jumptable
+rept 2
+ add hl, de
+endr
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp [hl]
+; 626a
+
+.jumptable
+ dw _MainMenu
+ dw Function6389
+ dw Function620b
+ dw Function620b
+ dw ResetClock
+; 6274
+
+
+.TitleScreen: ; 6274
+ callba _TitleScreen
+ ret
+; 627b
+
+Function627b: ; 627b
+ ld a, [wJumptableIndex]
+ bit 7, a
+ jr nz, .done_title
+ call TitleScreenScene
+ callba SuicuneFrameIterator
+ call DelayFrame
+ and a
+ ret
+
+.done_title
+ scf
+ ret
+; 6292
+
+Function6292: ; 6292 ; unreferenced
+ ld a, [hVBlankCounter]
+ and $7
+ ret nz
+ ld hl, LYOverrides + $5f
+ ld a, [hl]
+ dec a
+ ld bc, 2 * SCREEN_WIDTH
+ call ByteFill
+ ret
+; 62a3
+
+TitleScreenScene: ; 62a3
+ ld e, a
+ ld d, 0
+ ld hl, .scenes
+rept 2
+ add hl, de
+endr
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp [hl]
+; 62af
+
+.scenes
+ dw TitleScreenEntrance
+ dw TitleScreenTimer
+ dw TitleScreenMain
+ dw TitleScreenEnd
+; 62b7
+
+Function62b7: ; Unreferenced
+ ld hl, wJumptableIndex
+ inc [hl]
+ ret
+; 62bc
+
+
+TitleScreenEntrance: ; 62bc
+
+; Animate the logo:
+; Move each line by 4 pixels until our count hits 0.
+ ld a, [hSCX]
+ and a
+ jr z, .done
+ sub 4
+ ld [hSCX], a
+
+; Lay out a base (all lines scrolling together).
+ ld e, a
+ ld hl, LYOverrides
+ ld bc, 8 * 10 ; logo height
+ call ByteFill
+
+; Reversed signage for every other line's position.
+; This is responsible for the interlaced effect.
+ ld a, e
+ xor -1
+ inc a
+
+ ld b, 8 * 10 / 2 ; logo height / 2
+ ld hl, LYOverrides + 1
+.loop
+ ld [hli], a
+ inc hl
+ dec b
+ jr nz, .loop
+
+ callba AnimateTitleCrystal
+ ret
+
+.done
+; Next scene
+ ld hl, wJumptableIndex
+ inc [hl]
+ xor a
+ ld [hLCDStatCustom], a
+
+; Play the title screen music.
+ ld de, MUSIC_TITLE
+ call PlayMusic
+
+ ld a, $88
+ ld [hWY], a
+ ret
+; 62f6
+
+
+TitleScreenTimer: ; 62f6
+
+; Next scene
+ ld hl, wJumptableIndex
+ inc [hl]
+
+; Start a timer
+ ld hl, wcf65
+ ld de, $1140 ; 73.6 seconds
+ ld [hl], e
+ inc hl
+ ld [hl], d
+ ret
+; 6304
+
+TitleScreenMain: ; 6304
+
+; Run the timer down.
+ ld hl, wcf65
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ ld a, e
+ or d
+ jr z, .end
+
+ dec de
+ ld [hl], d
+ dec hl
+ ld [hl], e
+
+; Save data can be deleted by pressing Up + B + Select.
+ call GetJoypad
+ ld hl, hJoyDown
+ ld a, [hl]
+ and D_UP + B_BUTTON + SELECT
+ cp D_UP + B_BUTTON + SELECT
+ jr z, .delete_save_data
+
+; To bring up the clock reset dialog:
+
+; Hold Down + B + Select to initiate the sequence.
+ ld a, [$ffeb]
+ cp $34
+ jr z, .check_clock_reset
+
+ ld a, [hl]
+ and D_DOWN + B_BUTTON + SELECT
+ cp D_DOWN + B_BUTTON + SELECT
+ jr nz, .check_start
+
+ ld a, $34
+ ld [$ffeb], a
+ jr .check_start
+
+; Keep Select pressed, and hold Left + Up.
+; Then let go of Select.
+.check_clock_reset
+ bit 2, [hl] ; SELECT
+ jr nz, .check_start
+
+ xor a
+ ld [$ffeb], a
+
+ ld a, [hl]
+ and D_LEFT + D_UP
+ cp D_LEFT + D_UP
+ jr z, .clock_reset
+
+; Press Start or A to start the game.
+.check_start
+ ld a, [hl]
+ and START | A_BUTTON
+ jr nz, .incave
+ ret
+
+.incave
+ ld a, 0
+ jr .done
+
+.delete_save_data
+ ld a, 1
+
+.done
+ ld [wcf64], a
+
+; Return to the intro sequence.
+ ld hl, wJumptableIndex
+ set 7, [hl]
+ ret
+
+.end
+; Next scene
+ ld hl, wJumptableIndex
+ inc [hl]
+
+; Fade out the title screen music
+ xor a
+ ld [MusicFadeIDLo], a
+ ld [MusicFadeIDHi], a
+ ld hl, MusicFade
+ ld [hl], 8 ; 1 second
+
+ ld hl, wcf65
+ inc [hl]
+ ret
+
+.clock_reset
+ ld a, 4
+ ld [wcf64], a
+
+; Return to the intro sequence.
+ ld hl, wJumptableIndex
+ set 7, [hl]
+ ret
+; 6375
+
+TitleScreenEnd: ; 6375
+
+; Wait until the music is done fading.
+
+ ld hl, wcf65
+ inc [hl]
+
+ ld a, [MusicFade]
+ and a
+ ret nz
+
+ ld a, 2
+ ld [wcf64], a
+
+; Back to the intro.
+ ld hl, wJumptableIndex
+ set 7, [hl]
+ ret
+; 6389
+
+Function6389: ; 6389
+ callba Function4d54c
+ jp Init
+; 6392
+
+ResetClock: ; 6392
+ callba _ResetClock
+ jp Init
+; 639b
+
+Function639b: ; unreferenced
+ ; If bit 0 or 1 of [wcf65] is set, we don't need to be here.
+ ld a, [wcf65]
+ and $3
+ ret nz
+ ld bc, SpriteAnim10
+ ld hl, SpriteAnim10FrameIndex - SpriteAnim10
+ add hl, bc ; over-the-top compicated way to load wc3ae into hl
+ ld l, [hl]
+ ld h, 0
+rept 2
+ add hl, hl
+endr
+ ld de, Data63ca
+ add hl, de
+ ; If bit 2 of [wcf65] is set, get the second dw; else, get the first dw
+ ld a, [wcf65]
+ and %00000100
+rept 2
+ srl a
+endr
+ ld e, a
+ ld d, 0
+rept 2
+ add hl, de
+endr
+ ld a, [hli]
+ and a
+ ret z
+ ld e, a
+ ld d, [hl]
+ ld a, SPRITE_ANIM_INDEX_01
+ call _InitSpriteAnimStruct
+ ret
+; 63ca
+
+Data63ca: ; 63ca
+; frame 0 y, x; frame 1 y, x
+ db $5c, $50, $00, $00
+ db $5c, $68, $5c, $58
+ db $5c, $68, $5c, $78
+ db $5c, $88, $5c, $78
+ db $00, $00, $5c, $78
+ db $00, $00, $5c, $58
+; 63e2
+
+Copyright: ; 63e2
+ call ClearTileMap
+ call LoadFontsExtra
+ ld de, CopyrightGFX
+ ld hl, VTiles2 tile $60
+ lb bc, BANK(CopyrightGFX), $1d
+ call Request2bpp
+ hlcoord 2, 7
+ ld de, CopyrightString
+ jp PlaceString
+; 63fd
+
+CopyrightString: ; 63fd
+ ; ©1995-2001 Nintendo
+ db $60, $61, $62, $63, $64, $65, $66
+ db $67, $68, $69, $6a, $6b, $6c
+
+ db $4e
+
+ ; ©1995-2001 Creatures inc.
+ db $60, $61, $62, $63, $64, $65, $66, $6d
+ db $6e, $6f, $70, $71, $72, $7a, $7b, $7c
+
+ db $4e
+
+ ; ©1995-2001 GAME FREAK inc.
+ db $60, $61, $62, $63, $64, $65, $66, $73, $74
+ db $75, $76, $77, $78, $79, $7a, $7b, $7c
+
+ db "@"
+; 642e
+
+GameInit:: ; 642e
+ callba TryLoadSaveData
+ call ResetTextRelatedRAM
+ call ClearBGPalettes
+ call ClearTileMap
+ ld a, VBGMap0 / $100
+ ld [hBGMapAddress + 1], a
+ xor a
+ ld [hBGMapAddress], a
+ ld [hJoyDown], a
+ ld [hSCX], a
+ ld [hSCY], a
+ ld a, $90
+ ld [hWY], a
+ call WaitBGMap
+ jp Function620b
+; 6454
diff --git a/engine/link.asm b/engine/link.asm
index a1fa0661b..8ba1702e9 100755
--- a/engine/link.asm
+++ b/engine/link.asm
@@ -40,7 +40,7 @@ Function2805d: ; 2805d
call Function28499
call Function28434
xor a
- ld [wcf56], a
+ ld [wPlayerLinkAction], a
call Function87d
ld a, [hLinkPlayerNumber]
cp $2
@@ -83,8 +83,8 @@ Function2805d: ; 2805d
ld a, $fe
ld [de], a
ld hl, wc608
- ld de, wc6d0
- ld bc, $c8
+ ld de, wPlayerTrademonSpecies
+ ld bc, wPlayerTrademonSpecies - wc608
call Function75f
xor a
ld [rIF], a
@@ -105,7 +105,7 @@ Function2805d: ; 2805d
ld de, OverworldMap
ld bc, $1a2
call Function2879e
- ld de, wc6d0
+ ld de, wPlayerTrademonSpecies
ld hl, wc813
ld c, $2
.asm_280fe
@@ -226,7 +226,7 @@ Function28177: ; 28177
ld a, $fe
ld [de], a
ld hl, wc608
- ld de, wc6d0
+ ld de, wPlayerTrademonSpecies
ld bc, $c8
call Function75f
ld a, [wLinkMode]
@@ -250,7 +250,7 @@ Function28177: ; 28177
ld de, OverworldMap
ld bc, $1b9
call Function2879e
- ld de, wc6d0
+ ld de, wPlayerTrademonSpecies
ld hl, wc813
ld c, $2
.asm_28224
@@ -363,23 +363,23 @@ Function28177: ; 28177
.asm_282cc
push bc
push de
- callba Function1de5c8
+ callba IsMailEuropean
ld a, c
or a
- jr z, .asm_282ee
+ jr z, .next
sub $3
- jr nc, .asm_282e4
- callba Function1df203
- jr .asm_282ee
+ jr nc, .skip
+ callba DeutenEnglischenPost
+ jr .next
-.asm_282e4
+.skip
cp $2
- jr nc, .asm_282ee
- callba Function1df220
+ jr nc, .next
+ callba HandleSpanishItalianMail
-.asm_282ee
+.next
pop de
- ld hl, $2f
+ ld hl, MAIL_STRUCT_LENGTH
add hl, de
ld d, h
ld e, l
@@ -474,7 +474,7 @@ Function283b2: ; 283b2
ld b, $a
.asm_283b7
call DelayFrame
- call Function908
+ call LinkCommunicationsSignalDataReceived
dec b
jr nz, .asm_283b7
xor a
@@ -493,9 +493,9 @@ Function283b2: ; 283b2
pop hl
bccoord 1, 14
call PlaceWholeStringInBoxAtOnce
- call FadeToWhite
+ call RotateThreePalettesRight
call ClearScreen
- ld b, $8
+ ld b, SCGB_08
call GetSGBLayout
call Function3200
ret
@@ -802,105 +802,120 @@ Function284f6: ; 284f6
; 28595
Function28595: ; 28595
- ld de, OverworldMap
- ld a, $fd
- ld b, $6
+ ld de, wc800
+ ld a, EGG
+ ld b, PARTY_LENGTH
.loop1
ld [de], a
inc de
dec b
jr nz, .loop1
+ ; de = $c806
ld hl, PlayerName
ld bc, NAME_LENGTH
call CopyBytes
+ ; de = $c811
ld hl, PartyCount
- ld bc, 8
+ ld bc, 1 + PARTY_LENGTH + 1
call CopyBytes
+ ; de = $c819
ld hl, PlayerID
ld bc, 2
call CopyBytes
+ ; de = $c81b
ld hl, PartyMon1Species
- ld bc, $120
+ ld bc, PARTY_LENGTH * PARTYMON_STRUCT_LENGTH
call CopyBytes
+ ; de = $c93b
ld hl, PartyMonOT
- ld bc, $42
+ ld bc, PARTY_LENGTH * NAME_LENGTH
call CopyBytes
+ ; de = $c97d
ld hl, PartyMonNicknames
- ld bc, $42
+ ld bc, PARTY_LENGTH * PKMN_NAME_LENGTH
call CopyBytes
+ ; de = $c9bf
+
+; Okay, we did all that. Now, are we in the trade center?
ld a, [wLinkMode]
cp LINK_TRADECENTER
ret nz
+
+; Fill 5 bytes at wc9f4 with $20
ld de, wc9f4
ld a, $20
call Function28682
- ld a, BANK(sPartyScratch1)
+
+; Copy all the mail messages to wc9f9
+ ld a, BANK(sPartyMail)
call GetSRAMBank
- ld hl, sPartyScratch1
+ ld hl, sPartyMail
ld b, PARTY_LENGTH
.loop2
push bc
- ld bc, $21
+ ld bc, MAIL_MSG_LENGTH + 1
call CopyBytes
- ld bc, $e
+ ld bc, sPartyMon1MailEnd - sPartyMon1MailAuthor
add hl, bc
pop bc
dec b
jr nz, .loop2
- ld hl, sPartyScratch1
+; Copy the mail metadata to wcabf
+ ld hl, sPartyMail
ld b, PARTY_LENGTH
.loop3
push bc
- ld bc, $21
+ ld bc, MAIL_MSG_LENGTH + 1
add hl, bc
- ld bc, $e
+ ld bc, sPartyMon1MailEnd - sPartyMon1MailAuthor
call CopyBytes
pop bc
dec b
jr nz, .loop3
+
ld b, PARTY_LENGTH
- ld de, sPartyScratch1
+ ld de, sPartyMail
ld hl, wc9f9
.loop4
push bc
push hl
push de
push hl
- callba Function1de5c8
+ callba IsMailEuropean
pop de
ld a, c
or a
jr z, .next
sub $3
- jr nc, .skip
- callba Function1df1e6
+ jr nc, .italian_spanish
+ callba HandleFrenchGermanMail
jr .next
-.skip
+.italian_spanish
cp $2
jr nc, .next
- callba Function1df220
+ callba HandleSpanishItalianMail
.next
pop de
- ld hl, SCRATCHMON_STRUCT_LENGTH
+ ld hl, MAIL_STRUCT_LENGTH
add hl, de
ld d, h
ld e, l
pop hl
- ld bc, $21
+ ld bc, sPartyMon1MailAuthor - sPartyMon1Mail
add hl, bc
pop bc
dec b
jr nz, .loop4
call CloseSRAM
ld hl, wc9f9
- ld bc, $c6
+ ld bc, PARTY_LENGTH * (sPartyMon1MailAuthor - sPartyMon1Mail)
.loop5
ld a, [hl]
cp $fe
jr nz, .skip2
- ld [hl], $21
+ ld [hl], sPartyMon1MailAuthor - sPartyMon1Mail
.skip2
inc hl
@@ -910,7 +925,7 @@ Function28595: ; 28595
jr nz, .loop5
ld hl, wcabf
ld de, wcb13
- ld b, $54
+ ld b, PARTY_LENGTH * (sPartyMon1MailEnd - sPartyMon1MailAuthor)
ld c, $0
.loop6
inc c
@@ -1198,7 +1213,7 @@ Function287e3: ; 287e3
call Function28ef8
callba Function16d673
xor a
- ld hl, wcf51
+ ld hl, wOtherPlayerLinkMode
rept 3
ld [hli], a
endr
@@ -1206,7 +1221,7 @@ endr
ld a, $1
ld [MenuSelection2], a
inc a
- ld [wcf56], a
+ ld [wPlayerLinkAction], a
jp Function2888b
; 28803
@@ -1363,7 +1378,7 @@ Function28926: ; 28926
hlcoord 0, 15
ld b, $1
ld c, $12
- call Function28eef
+ call Predef_LinkTextbox
hlcoord 2, 16
ld de, String28ab4
call PlaceString
@@ -1453,9 +1468,9 @@ Function28926: ; 28926
ld [MenuSelection2], a
dec a
ld [wd002], a
- ld [wcf56], a
+ ld [wPlayerLinkAction], a
callba Function16d6ce
- ld a, [wcf51]
+ ld a, [wOtherPlayerLinkMode]
cp $f
jp z, Function287e3
ld [wd003], a
@@ -1468,11 +1483,11 @@ Function28926: ; 28926
jp nc, Function28b87
xor a
ld [wcf57], a
- ld [wcf52], a
+ ld [wOtherPlayerLinkAction], a
hlcoord 0, 12
ld b, $4
ld c, $12
- call Function28eef
+ call Predef_LinkTextbox
callba Function4d354
ld hl, UnknownText_0x28aaf
bccoord 1, 14
@@ -1482,7 +1497,7 @@ Function28926: ; 28926
.asm_28a58
xor a
ld [wcf57], a
- ld [wcf52], a
+ ld [wOtherPlayerLinkAction], a
ld a, [wd003]
ld hl, OTPartySpecies
ld c, a
@@ -1494,7 +1509,7 @@ Function28926: ; 28926
hlcoord 0, 12
ld b, $4
ld c, $12
- call Function28eef
+ call Predef_LinkTextbox
callba Function4d354
ld hl, UnknownText_0x28ac4
bccoord 1, 14
@@ -1504,12 +1519,12 @@ Function28926: ; 28926
hlcoord 0, 12
ld b, $4
ld c, $12
- call Function28eef
+ call Predef_LinkTextbox
hlcoord 1, 14
ld de, String28ece
call PlaceString
ld a, $1
- ld [wcf56], a
+ ld [wPlayerLinkAction], a
callba Function16d6ce
ld c, $64
call DelayFrames
@@ -1576,16 +1591,16 @@ Function28ade: ; 28ade
ld a, $ec
ldcoord_a 9, 17
ld a, $f
- ld [wcf56], a
+ ld [wPlayerLinkAction], a
callba Function16d6ce
- ld a, [wcf51]
+ ld a, [wOtherPlayerLinkMode]
cp $f
jr nz, .asm_28ade
Function28b22: ; 28b22
- call FadeToWhite
+ call RotateThreePalettesRight
call ClearScreen
- ld b, $8
+ ld b, SCGB_08
call GetSGBLayout
call Function3200
xor a
@@ -1619,7 +1634,7 @@ String_28b61: ; 28b61
; 28b68
Function28b68: ; 28b68
- ld a, [wcf51]
+ ld a, [wOtherPlayerLinkMode]
hlcoord 6, 9
ld bc, SCREEN_WIDTH
call AddNTimes
@@ -1647,11 +1662,11 @@ Function28b77: ; 28b77
Function28b87: ; 28b87
xor a
ld [wcf57], a
- ld [wcf52], a
+ ld [wOtherPlayerLinkAction], a
hlcoord 0, 12
ld b, $4
ld c, $12
- call Function28eef
+ call Predef_LinkTextbox
callba Function4d354
ld a, [wd002]
ld hl, PartySpecies
@@ -1680,7 +1695,7 @@ Function28b87: ; 28b87
hlcoord 10, 7
ld b, $3
ld c, $7
- call Function28eef
+ call Predef_LinkTextbox
ld de, String28eab
hlcoord 12, 8
call PlaceString
@@ -1716,11 +1731,11 @@ Function28b87: ; 28b87
.asm_28c33
ld a, $1
- ld [wcf56], a
+ ld [wPlayerLinkAction], a
hlcoord 0, 12
ld b, 4
ld c, 18
- call Function28eef
+ call Predef_LinkTextbox
hlcoord 1, 14
ld de, String28ece
call PlaceString
@@ -1729,30 +1744,30 @@ Function28b87: ; 28b87
.asm_28c54
ld a, $2
- ld [wcf56], a
+ ld [wPlayerLinkAction], a
callba Function16d6ce
- ld a, [wcf51]
+ ld a, [wOtherPlayerLinkMode]
dec a
jr nz, .asm_28c7b
hlcoord 0, 12
ld b, 4
ld c, 18
- call Function28eef
+ call Predef_LinkTextbox
hlcoord 1, 14
ld de, String28ece
call PlaceString
jp Function28ea3
.asm_28c7b
- ld hl, sPartyScratch1
+ ld hl, sPartyMail
ld a, [wd002]
- ld bc, SCRATCHMON_STRUCT_LENGTH
+ ld bc, MAIL_STRUCT_LENGTH
call AddNTimes
- ld a, BANK(sPartyScratch1)
+ ld a, BANK(sPartyMail)
call GetSRAMBank
ld d, h
ld e, l
- ld bc, SCRATCHMON_STRUCT_LENGTH
+ ld bc, MAIL_STRUCT_LENGTH
add hl, bc
ld a, [wd002]
ld c, a
@@ -1762,28 +1777,28 @@ Function28b87: ; 28b87
cp $6
jr z, .asm_28ca6
push bc
- ld bc, SCRATCHMON_STRUCT_LENGTH
+ ld bc, MAIL_STRUCT_LENGTH
call CopyBytes
pop bc
jr .asm_28c96
.asm_28ca6
- ld hl, sPartyScratch1
+ ld hl, sPartyMail
ld a, [PartyCount]
dec a
- ld bc, SCRATCHMON_STRUCT_LENGTH
+ ld bc, MAIL_STRUCT_LENGTH
call AddNTimes
push hl
ld hl, wc9f4
ld a, [wd003]
- ld bc, SCRATCHMON_STRUCT_LENGTH
+ ld bc, MAIL_STRUCT_LENGTH
call AddNTimes
pop de
- ld bc, SCRATCHMON_STRUCT_LENGTH
+ ld bc, MAIL_STRUCT_LENGTH
call CopyBytes
call CloseSRAM
ld hl, PlayerName
- ld de, wc6e7
+ ld de, wPlayerTrademonSenderName
ld bc, NAME_LENGTH
call CopyBytes
ld a, [wd002]
@@ -1792,28 +1807,28 @@ Function28b87: ; 28b87
ld c, a
add hl, bc
ld a, [hl]
- ld [wc6d0], a
+ ld [wPlayerTrademonSpecies], a
push af
ld a, [wd002]
ld hl, PartyMonOT
call SkipNames
- ld de, wc6f2
+ ld de, wPlayerTrademonOTName
ld bc, NAME_LENGTH
call CopyBytes
ld hl, PartyMon1ID
ld a, [wd002]
call GetPartyLocation
ld a, [hli]
- ld [PlayerScreens], a
+ ld [wPlayerTrademonID], a
ld a, [hl]
- ld [EnemyScreens], a
+ ld [wPlayerTrademonID + 1], a
ld hl, PartyMon1DVs
ld a, [wd002]
call GetPartyLocation
ld a, [hli]
- ld [wc6fd], a
+ ld [wPlayerTrademonDVs], a
ld a, [hl]
- ld [wPlayerMinimized], a
+ ld [wPlayerTrademonDVs + 1], a
ld a, [wd002]
ld hl, PartyMon1Species
call GetPartyLocation
@@ -1821,9 +1836,9 @@ Function28b87: ; 28b87
ld c, l
callba GetCaughtGender
ld a, c
- ld [wc701], a
+ ld [wPlayerTrademonCaughtData], a
ld hl, wd26b
- ld de, wc719
+ ld de, wOTTrademonSenderName
ld bc, NAME_LENGTH
call CopyBytes
ld a, [wd003]
@@ -1832,27 +1847,27 @@ Function28b87: ; 28b87
ld c, a
add hl, bc
ld a, [hl]
- ld [wc702], a
+ ld [wOTTrademonSpecies], a
ld a, [wd003]
ld hl, OTPartyMonOT
call SkipNames
- ld de, wc724
+ ld de, wOTTrademonOTName
ld bc, NAME_LENGTH
call CopyBytes
ld hl, OTPartyMon1ID
ld a, [wd003]
call GetPartyLocation
ld a, [hli]
- ld [wEnemyWrapCount], a
+ ld [wOTTrademonID], a
ld a, [hl]
- ld [wPlayerCharging], a
+ ld [wOTTrademonID + 1], a
ld hl, OTPartyMon1DVs
ld a, [wd003]
call GetPartyLocation
ld a, [hli]
- ld [wEnemyTrappingMove], a
+ ld [wOTTrademonDVs], a
ld a, [hl]
- ld [wPlayerWrapCount], a
+ ld [wOTTrademonDVs + 1], a
ld a, [wd003]
ld hl, OTPartyMon1Species
call GetPartyLocation
@@ -1860,7 +1875,7 @@ Function28b87: ; 28b87
ld c, l
callba GetCaughtGender
ld a, c
- ld [wEnemyCharging], a
+ ld [wOTTrademonCaughtData], a
ld a, [wd002]
ld [CurPartyMon], a
ld hl, PartySpecies
@@ -1889,18 +1904,18 @@ Function28b87: ; 28b87
call DelayFrames
call ClearTileMap
call LoadFontsBattleExtra
- ld b, $8
+ ld b, SCGB_08
call GetSGBLayout
ld a, [hLinkPlayerNumber]
cp $1
- jr z, .asm_28de4
- predef Function28f24
- jr .asm_28de9
+ jr z, .player_2
+ predef TradeAnimation
+ jr .done_animation
-.asm_28de4
- predef Function28f63
+.player_2
+ predef TradeAnimationPlayer2
-.asm_28de9
+.done_animation
pop af
ld c, a
ld [CurPartyMon], a
@@ -1916,11 +1931,11 @@ Function28b87: ; 28b87
ld de, TempMonSpecies
ld bc, PARTYMON_STRUCT_LENGTH
call CopyBytes
- predef Functionda96
+ predef AddTempmonToParty
ld a, [PartyCount]
dec a
ld [CurPartyMon], a
- callab Function421d8
+ callab EvolvePokemon
call ClearScreen
call Function28ef8
call Function28eff
@@ -1944,7 +1959,7 @@ Function28b87: ; 28b87
.asm_28e49
ld a, b
- ld [wcf56], a
+ ld [wPlayerLinkAction], a
push bc
call Function862
pop bc
@@ -1954,7 +1969,7 @@ Function28b87: ; 28b87
ld a, b
and a
jr z, .asm_28e63
- ld a, [wcf52]
+ ld a, [wOtherPlayerLinkAction]
cp b
jr nz, .asm_28e49
@@ -1967,7 +1982,7 @@ Function28b87: ; 28b87
hlcoord 0, 12
ld b, 4
ld c, 18
- call Function28eef
+ call Predef_LinkTextbox
hlcoord 1, 14
ld de, String28ebd
call PlaceString
@@ -2004,10 +2019,10 @@ String28ece: ; 28ece
next "was canceled!@"
-Function28eef: ; 28eef
+Predef_LinkTextbox: ; 28eef
ld d, h
ld e, l
- callba Function16d6ca
+ callba LinkTextbox
ret
; 28ef8
@@ -2026,1551 +2041,16 @@ Function28f09: ; 28f09
hlcoord 0, 0
ld b, 6
ld c, 18
- call Function28eef
+ call Predef_LinkTextbox
hlcoord 0, 8
ld b, 6
ld c, 18
- call Function28eef
+ call Predef_LinkTextbox
callba Functionfb60d
ret
; 28f24
-Function28f24: ; 28f24
- xor a
- ld [wcf66], a
- ld hl, wc6e7
- ld de, wc719
- call Function297ff
- ld hl, wc6d0
- ld de, wc702
- call Function29814
- ld de, .data_28f3f
- jr Function28fa1
-
-.data_28f3f
- db $1b
- db $1
- db $1c
- db $21
- db $2d
- db $27
- db $23
- db $3
- db $25
- db $28
- db $25
- db $1e
- db $29
- db $6
- db $16
- db $1f
- db $19
- db $17
- db $22
- db $1f
- db $2a
- db $e
- db $3
- db $24
- db $5
- db $25
- db $2
- db $27
- db $25
- db $1d
- db $2c
- db $2e
- db $1e
- db $18
- db $1f
- db $2b
-
-Function28f63: ; 28f63
- xor a
- ld [wcf66], a
- ld hl, wc719
- ld de, wc6e7
- call Function297ff
- ld hl, wc702
- ld de, wc6d0
- call Function29814
- ld de, .data_28f7e
- jr Function28fa1
-
-.data_28f7e
- db $1a
- db $17
- db $22
- db $1f
- db $2a
- db $6
- db $3
- db $24
- db $5
- db $25
- db $2
- db $27
- db $25
- db $1d
- db $2c
- db $2f
- db $1e
- db $18
- db $1f
- db $1b
- db $1
- db $1c
- db $22
- db $27
- db $23
- db $3
- db $25
- db $28
- db $25
- db $1e
- db $29
- db $e
- db $16
- db $1f
- db $2b
-
-Function28fa1: ; 28fa1
- ld hl, BattleEnded
- ld [hl], e
- inc hl
- ld [hl], d
- ld a, [hMapAnims]
- push af
- xor a
- ld [hMapAnims], a
- ld hl, VramState
- ld a, [hl]
- push af
- res 0, [hl]
- ld hl, Options
- ld a, [hl]
- push af
- set 4, [hl]
- call Function28fdb
- ld a, [wcf66]
- and a
- jr nz, .asm_28fca
- ld de, MUSIC_EVOLUTION
- call PlayMusic2
-.asm_28fca
- call Function29082
- jr nc, .asm_28fca
- pop af
- ld [Options], a
- pop af
- ld [VramState], a
- pop af
- ld [hMapAnims], a
- ret
-; 28fdb
-
-Function28fdb: ; 28fdb
- xor a
- ld [wJumptableIndex], a
- call ClearBGPalettes
- call ClearSprites
- call ClearTileMap
- call DisableLCD
- call LoadFontsBattleExtra
- callab Function8cf53
- ld a, [hCGB]
- and a
- jr z, .asm_2900b
- ld a, $1
- ld [rVBK], a
- ld hl, VTiles0
- ld bc, sScratch - VTiles0
- xor a
- call ByteFill
- ld a, $0
- ld [rVBK], a
-
-.asm_2900b
- ld hl, VBGMap0
- ld bc, sScratch - VBGMap0
- ld a, " "
- call ByteFill
- ld hl, TradeGameBoyLZ
- ld de, VTiles2 tile $31
- call Decompress
- ld hl, TradeArrowGFX
- ld de, VTiles1 tile $6d
- ld bc, $10
- ld a, BANK(TradeArrowGFX)
- call FarCopyBytes
- ld hl, TradeArrowGFX + $10
- ld de, VTiles1 tile $6e
- ld bc, $10
- ld a, BANK(TradeArrowGFX)
- call FarCopyBytes
- xor a
- ld [hSCX], a
- ld [hSCY], a
- ld a, $7
- ld [hWX], a
- ld a, $90
- ld [hWY], a
- callba Function4d7fd
- call EnableLCD
- call Function2982b
- ld a, [wc6d0]
- ld hl, wc6fd
- ld de, VTiles0
- call Function29491
- ld a, [wc702]
- ld hl, wEnemyTrappingMove
- ld de, VTiles0 tile $31
- call Function29491
- ld a, [wc6d0]
- ld de, wc6d1
- call Function294a9
- ld a, [wc702]
- ld de, wc703
- call Function294a9
- call Function297ed
- ret
-; 29082
-
-Function29082: ; 29082
- ld a, [wJumptableIndex]
- bit 7, a
- jr nz, .asm_2909b
- call Function290a0
- callab Function8cf69
- ld hl, wcf65
- inc [hl]
- call DelayFrame
- and a
- ret
-
-.asm_2909b
- call LoadStandardFont
- scf
- ret
-; 290a0
-
-Function290a0: ; 290a0
- ld a, [wJumptableIndex]
- ld e, a
- ld d, 0
- ld hl, JumpTable290af
-rept 2
- add hl, de
-endr
- ld a, [hli]
- ld h, [hl]
- ld l, a
- jp [hl]
-; 290af
-
-JumpTable290af: ; 290af
- dw Function29114
- dw Function2942e
- dw Function29461
- dw Function29348
- dw Function2937e
- dw Function29391
- dw Function29129
- dw Function291af
- dw Function291c4
- dw Function291d9
- dw Function2925d
- dw Function29220
- dw Function2925d
- dw Function29229
- dw Function2913c
- dw Function2925d
- dw Function291e8
- dw Function291fd
- dw Function29211
- dw Function29220
- dw Function2925d
- dw Function29229
- dw Function29701
- dw Function2973c
- dw Function2975c
- dw Function2977f
- dw Function297a4
- dw Function293a6
- dw Function293b6
- dw Function293d2
- dw Function293de
- dw Function293ea
- dw Function2940c
- dw Function294e7
- dw Function294f0
- dw Function2961b
- dw Function2962c
- dw Function29879
- dw Function29886
- dw Function29649
- dw Function29660
- dw Function2926d
- dw Function29277
- dw Function29123
- dw Function29487
- dw Function294f9
- dw Function29502
- dw Function2950c
-; 2910f
-
-Function2910f: ; 2910f
- ld hl, wJumptableIndex
- inc [hl]
- ret
-; 29114
-
-Function29114: ; 29114
- ld hl, BattleEnded
- ld e, [hl]
- inc hl
- ld d, [hl]
- ld a, [de]
- ld [wJumptableIndex], a
- inc de
- ld [hl], d
- dec hl
- ld [hl], e
- ret
-; 29123
-
-Function29123: ; 29123
- ld hl, wJumptableIndex
- set 7, [hl]
- ret
-; 29129
-
-Function29129: ; 29129
- ld a, $ed
- call Function292f6
- ld a, [wc74c]
- ld [wd265], a
- xor a
- ld de, $2c58
- ld b, $0
- jr Function2914e
-
-Function2913c: ; 2913c
- ld a, $ee
- call Function292f6
- ld a, [wc74d]
- ld [wd265], a
- ld a, $2
- lb de, $4c, $94
- ld b, $4
-
-Function2914e: ; 2914e
- push bc
- push de
- push bc
- push de
- push af
- call DisableLCD
- callab Function8cf53
- ld hl, $9874
- ld bc, $c
- ld a, $60
- call ByteFill
- pop af
- call Function29281
- xor a
- ld [hSCX], a
- ld a, $7
- ld [hWX], a
- ld a, $70
- ld [hWY], a
- call EnableLCD
- call Function2985a
- pop de
- ld a, $11
- call Function3b2a
- ld hl, $b
- add hl, bc
- pop bc
- ld [hl], b
- pop de
- ld a, $12
- call Function3b2a
- ld hl, $b
- add hl, bc
- pop bc
- ld [hl], b
- call WaitBGMap
- ld b, $1b
- call GetSGBLayout
- ld a, $e4
- call DmgToCgbBGPals
- ld a, $d0
- call Functioncf8
- call Function2910f
- ld a, $5c
- ld [wcf64], a
- ret
-; 291af
-
-Function291af: ; 291af
- call Function2981d
- ld a, [hSCX]
- add $2
- ld [hSCX], a
- cp $50
- ret nz
- ld a, $1
- call Function29281
- call Function2910f
- ret
-; 291c4
-
-Function291c4: ; 291c4
- call Function2981d
- ld a, [hSCX]
- add $2
- ld [hSCX], a
- cp $a0
- ret nz
- ld a, $2
- call Function29281
- call Function2910f
- ret
-; 291d9
-
-Function291d9: ; 291d9
- call Function2981d
- ld a, [hSCX]
- add $2
- ld [hSCX], a
- and a
- ret nz
- call Function2910f
- ret
-; 291e8
-
-Function291e8: ; 291e8
- call Function2981d
- ld a, [hSCX]
- sub $2
- ld [hSCX], a
- cp $b0
- ret nz
- ld a, $1
- call Function29281
- call Function2910f
- ret
-; 291fd
-
-Function291fd: ; 291fd
- call Function2981d
- ld a, [hSCX]
- sub $2
- ld [hSCX], a
- cp $60
- ret nz
- xor a
- call Function29281
- call Function2910f
- ret
-; 29211
-
-Function29211: ; 29211
- call Function2981d
- ld a, [hSCX]
- sub $2
- ld [hSCX], a
- and a
- ret nz
- call Function2910f
- ret
-; 29220
-
-Function29220: ; 29220
- ld a, $80
- ld [wcf64], a
- call Function2910f
- ret
-; 29229
-
-Function29229: ; 29229
- call ClearBGPalettes
- call ClearTileMap
- call ClearSprites
- call DisableLCD
- callab Function8cf53
- ld hl, VBGMap0
- ld bc, sScratch - VBGMap0
- ld a, " "
- call ByteFill
- xor a
- ld [hSCX], a
- ld a, $90
- ld [hWY], a
- call EnableLCD
- call Function2982b
- call WaitBGMap
- call Function297ed
- call Function29114
- ret
-; 2925d
-
-Function2925d: ; 2925d
- call Function2981d
- ld hl, wcf64
- ld a, [hl]
- and a
- jr z, .asm_29269
- dec [hl]
- ret
-
-.asm_29269
- call Function2910f
- ret
-; 2926d
-
-Function2926d: ; 2926d
- call Function29114
- ld de, SFX_GIVE_TRADEMON
- call PlaySFX
- ret
-; 29277
-
-Function29277: ; 29277
- call Function29114
- ld de, SFX_GET_TRADEMON
- call PlaySFX
- ret
-; 29281
-
-Function29281: ; 29281
- and 3
- ld e, a
- ld d, 0
- ld hl, Jumptable_2928f
-rept 2
- add hl, de
-endr
- ld a, [hli]
- ld h, [hl]
- ld l, a
- jp [hl]
-; 2928f
-
-Jumptable_2928f: ; 2928f
- dw Function29297
- dw Function292af
- dw Function292be
- dw Function29297
-; 29297
-
-Function29297: ; 29297
- call Function297cf
- hlcoord 9, 3
- ld [hl], $5b
- inc hl
- ld bc, $a
- ld a, $60
- call ByteFill
- hlcoord 3, 2
- call Function292ec
- ret
-; 292af
-
-Function292af: ; 292af
- call Function297cf
- hlcoord 0, 3
- ld bc, SCREEN_WIDTH
- ld a, $60
- call ByteFill
- ret
-; 292be
-
-Function292be: ; 292be
- call Function297cf
- hlcoord 0, 3
- ld bc, $11
- ld a, $60
- call ByteFill
- hlcoord 17, 3
- ld a, $5d
- ld [hl], a
- ld a, $61
- ld de, SCREEN_WIDTH
- ld c, $3
-.asm_292d9
- add hl, de
- ld [hl], a
- dec c
- jr nz, .asm_292d9
- add hl, de
- ld a, $5f
- ld [hld], a
- ld a, $5b
- ld [hl], a
- hlcoord 10, 6
- call Function292ec
- ret
-; 292ec
-
-Function292ec: ; 292ec
- ld de, TradeGameBoyTilemap
- lb bc, 8, 6
- call Function297db
- ret
-; 292f6
-
-Function292f6: ; 292f6
- push af
- call ClearBGPalettes
- call WaitTop
- ld a, VBGMap1 / $100
- ld [hBGMapAddress + 1], a
- call ClearTileMap
- hlcoord 0, 0
- ld bc, SCREEN_WIDTH
- ld a, "─"
- call ByteFill
- hlcoord 0, 1
- ld de, wc736
- call PlaceString
- ld hl, wc741
- ld de, 0
-.asm_2931e
- ld a, [hli]
- cp "@"
- jr z, .asm_29326
- dec de
- jr .asm_2931e
-
-.asm_29326
- hlcoord 0, 4
- add hl, de
- ld de, wc741
- call PlaceString
- hlcoord 7, 2
- ld bc, 6
- pop af
- call ByteFill
- call WaitBGMap
- call WaitTop
- ld a, VBGMap0 / $100
- ld [hBGMapAddress + 1], a
- call ClearTileMap
- ret
-; 29348
-
-Function29348: ; 29348
- call ClearTileMap
- call WaitTop
- ld a, $a0
- ld [hSCX], a
- call DelayFrame
- hlcoord 8, 2
- ld de, Tilemap_298f7
- lb bc, 3, 12
- call Function297db
- call WaitBGMap
- ld b, $1b
- call GetSGBLayout
- ld a, $e4
- call DmgToCgbBGPals
- ld de, $e4e4
- call DmgToCgbObjPals
- ld de, SFX_POTION
- call PlaySFX
- call Function2910f
- ret
-; 2937e
-
-Function2937e: ; 2937e
- ld a, [hSCX]
- and a
- jr z, .asm_29388
- add $4
- ld [hSCX], a
- ret
-
-.asm_29388
- ld c, $50
- call DelayFrames
- call Function29114
- ret
-; 29391
-
-Function29391: ; 29391
- ld a, [hSCX]
- cp $a0
- jr z, .asm_2939c
- sub $4
- ld [hSCX], a
- ret
-
-.asm_2939c
- call ClearTileMap
- xor a
- ld [hSCX], a
- call Function29114
- ret
-; 293a6
-
-Function293a6: ; 293a6
- ld a, $8f
- ld [hWX], a
- ld a, $88
- ld [hSCX], a
- ld a, $50
- ld [hWY], a
- call Function29114
- ret
-; 293b6
-
-Function293b6: ; 293b6
- ld a, [hWX]
- cp $7
- jr z, .asm_293c7
- sub $4
- ld [hWX], a
- ld a, [hSCX]
- sub $4
- ld [hSCX], a
- ret
-
-.asm_293c7
- ld a, $7
- ld [hWX], a
- xor a
- ld [hSCX], a
- call Function29114
- ret
-; 293d2
-
-Function293d2: ; 293d2
- ld a, $7
- ld [hWX], a
- ld a, $50
- ld [hWY], a
- call Function29114
- ret
-; 293de
-
-Function293de: ; 293de
- ld a, $7
- ld [hWX], a
- ld a, $90
- ld [hWY], a
- call Function29114
- ret
-; 293ea
-
-Function293ea: ; 293ea
- call WaitTop
- ld a, VBGMap1 / $100
- ld [hBGMapAddress + 1], a
- call WaitBGMap
- ld a, $7
- ld [hWX], a
- xor a
- ld [hWY], a
- call DelayFrame
- call WaitTop
- ld a, VBGMap0 / $100
- ld [hBGMapAddress + 1], a
- call ClearTileMap
- call Function2910f
- ret
-; 2940c
-
-Function2940c: ; 2940c
- ld a, [hWX]
- cp $a1
- jr nc, .asm_29417
- add $4
- ld [hWX], a
- ret
-
-.asm_29417
- ld a, VBGMap1 / $100
- ld [hBGMapAddress + 1], a
- call WaitBGMap
- ld a, $7
- ld [hWX], a
- ld a, $90
- ld [hWY], a
- ld a, VBGMap0 / $100
- ld [hBGMapAddress + 1], a
- call Function29114
- ret
-; 2942e
-
-Function2942e: ; 2942e
- call Function2951f
- ld a, [wc6d0]
- ld [CurPartySpecies], a
- ld a, [wc6fd]
- ld [TempMonDVs], a
- ld a, [wPlayerMinimized]
- ld [TempMonDVs + 1], a
- ld b, $1a
- call GetSGBLayout
- ld a, $e4
- call DmgToCgbBGPals
- call Function294bb
-
- ld a, [wc6d0]
- call GetCryIndex
- jr c, .asm_2945d
- ld e, c
- ld d, b
- call PlayCryHeader
-.asm_2945d
-
- call Function29114
- ret
-; 29461
-
-Function29461: ; 29461
- call Function29549
- ld a, [wc702]
- ld [CurPartySpecies], a
- ld a, [wEnemyTrappingMove]
- ld [TempMonDVs], a
- ld a, [wPlayerWrapCount]
- ld [TempMonDVs + 1], a
- ld b, $1a
- call GetSGBLayout
- ld a, $e4
- call DmgToCgbBGPals
- call Function294c0
- call Function29114
- ret
-; 29487
-
-Function29487: ; 29487
- callba Function4d81e
- call Function29114
- ret
-; 29491
-
-Function29491: ; 29491
- push de
- push af
- predef GetUnownLetter
- pop af
- ld [CurPartySpecies], a
- ld [CurSpecies], a
- call GetBaseData
- pop de
- predef GetFrontpic
- ret
-; 294a9
-
-Function294a9: ; 294a9
- push de
- ld [wd265], a
- call GetPokemonName
- ld hl, StringBuffer1
- pop de
- ld bc, NAME_LENGTH
- call CopyBytes
- ret
-; 294bb
-
-Function294bb: ; 294bb
- ld de, VTiles0
- jr Function294c3
-
-Function294c0: ; 294c0
- ld de, VTiles0 tile $31
-
-Function294c3: ; 294c3
- call DelayFrame
- ld hl, VTiles2
- ld bc, $a31
- call Request2bpp
- call WaitTop
- call Function297cf
- hlcoord 7, 2
- xor a
- ld [hFillBox], a
- lb bc, 7, 7
- predef FillBox
- call WaitBGMap
- ret
-; 294e7
-
-Function294e7: ; 294e7
- ld c, $50
- call DelayFrames
- call Function29114
- ret
-; 294f0
-
-Function294f0: ; 294f0
- ld c, $28
- call DelayFrames
- call Function29114
- ret
-; 294f9
-
-Function294f9: ; 294f9
- ld c, $60
- call DelayFrames
- call Function29114
- ret
-; 29502
-
-Function29502: ; 29502
- call Function29516
- ret nz
- ld c, $50
- call DelayFrames
- ret
-; 2950c
-
-Function2950c: ; 2950c
- call Function29516
- ret nz
- ld c, $b4
- call DelayFrames
- ret
-; 29516
-
-Function29516: ; 29516
- call Function29114
- ld a, [wc702]
- cp $fd
- ret
-; 2951f
-
-Function2951f: ; 2951f
- ld de, wc6d0
- ld a, [de]
- cp $fd
- jr z, Function295a1
- call Function29573
- ld de, wc6d0
- call Function295e3
- ld de, wc6d1
- call Function295ef
- ld a, [wc701]
- ld de, wc6f2
- call Function295f6
- ld de, PlayerScreens
- call Function29611
- call Function295d8
- ret
-; 29549
-
-Function29549: ; 29549
- ld de, wc702
- ld a, [de]
- cp $fd
- jr z, Function295a1
- call Function29573
- ld de, wc702
- call Function295e3
- ld de, wc703
- call Function295ef
- ld a, [wEnemyCharging]
- ld de, wc724
- call Function295f6
- ld de, wEnemyWrapCount
- call Function29611
- call Function295d8
- ret
-; 29573
-
-Function29573: ; 29573
- call WaitTop
- call Function297cf
- ld a, VBGMap1 / $100
- ld [hBGMapAddress + 1], a
- hlcoord 3, 0
- ld b, $6
- ld c, $d
- call TextBox
- hlcoord 4, 0
- ld de, String29591
- call PlaceString
- ret
-; 29591
-
-String29591: ; 29591
- db "─── №."
- next ""
- next "OT/"
- next $73, "№.@"
-; 295a1
-
-Function295a1: ; 295a1
- call WaitTop
- call Function297cf
- ld a, VBGMap1 / $100
- ld [hBGMapAddress + 1], a
- hlcoord 3, 0
- ld b, $6
- ld c, $d
- call TextBox
- hlcoord 4, 2
- ld de, String295c2
- call PlaceString
- call Function295d8
- ret
-; 295c2
-
-String295c2: ; 295c2
- db "EGG"
- next "OT/?????"
- next $73, "№.?????@"
-; 295d8
-
-Function295d8: ; 295d8
- call WaitBGMap
- call WaitTop
- ld a, VBGMap0 / $100
- ld [hBGMapAddress + 1], a
- ret
-; 295e3
-
-Function295e3: ; 295e3
- hlcoord 10, 0
- lb bc, PRINTNUM_LEADINGZEROS | 1, 3
- call PrintNum
- ld [hl], $7f
- ret
-; 295ef
-
-Function295ef: ; 295ef
- hlcoord 4, 2
- call PlaceString
- ret
-; 295f6
-
-Function295f6: ; 295f6
- cp 3
- jr c, .asm_295fb
- xor a
-
-.asm_295fb
- push af
- hlcoord 7, 4
- call PlaceString
- inc bc
- pop af
- ld hl, Unknown_2960e
- ld d, 0
- ld e, a
- add hl, de
- ld a, [hl]
- ld [bc], a
- ret
-; 2960e
-
-Unknown_2960e: ; 2960e
- db " ", "♂", "♀"
-; 29611
-
-Function29611: ; 29611
- hlcoord 7, 6
- lb bc, PRINTNUM_LEADINGZEROS | 2, 5
- call PrintNum
- ret
-; 2961b
-
-Function2961b: ; 2961b
- lb de, $54, $58
- ld a, $e
- call Function3b2a
- call Function29114
- ld a, $20
- ld [wcf64], a
- ret
-; 2962c
-
-Function2962c: ; 2962c
- lb de, $54, $58
- ld a, $e
- call Function3b2a
- ld hl, $b
- add hl, bc
- ld [hl], $1
- ld hl, $7
- add hl, bc
- ld [hl], $dc
- call Function29114
- ld a, $38
- ld [wcf64], a
- ret
-; 29649
-
-Function29649: ; 29649
- lb de, $54, $58
- ld a, $f
- call Function3b2a
- call Function29114
- ld a, $10
- ld [wcf64], a
- ld de, SFX_BALL_POOF
- call PlaySFX
- ret
-; 29660
-
-Function29660: ; 29660
- ld a, $e4
- call Functioncf8
- lb de, $28, $58
- ld a, $10
- call Function3b2a
- call Function29114
- ld a, $40
- ld [wcf64], a
- ret
-; 29676
-
-Function29676: ; 29676 (a:5676)
- ld hl, $b
- add hl, bc
- ld e, [hl]
- ld d, 0
- ld hl, Jumptable_29686
-rept 2
- add hl, de
-endr
- ld a, [hli]
- ld h, [hl]
- ld l, a
- jp [hl]
-; 29686
-
-Jumptable_29686: ; 29686 (a:5686)
- dw Function2969a
- dw Function296a4
- dw Function296af
- dw Function296bd
- dw Function296cf
- dw Function296dd
- dw Function296f2
-; 2969a
-
-Function29694: ; 29694 (a:5694)
- ld hl, $b
- add hl, bc
- inc [hl]
- ret
-
-Function2969a: ; 2969a (a:569a)
- call Function29694
- ld hl, $c
- add hl, bc
- ld [hl], $80
- ret
-
-Function296a4: ; 296a4 (a:56a4)
- ld hl, $c
- add hl, bc
- ld a, [hl]
- dec [hl]
- and a
- ret nz
- call Function29694
-
-Function296af: ; 296af (a:56af)
- ld hl, $4
- add hl, bc
- ld a, [hl]
- cp $94
- jr nc, .asm_296ba
- inc [hl]
- ret
-.asm_296ba
- call Function29694
-
-Function296bd: ; 296bd (a:56bd)
- ld hl, $5
- add hl, bc
- ld a, [hl]
- cp $4c
- jr nc, .asm_296c8
- inc [hl]
- ret
-.asm_296c8
- ld hl, $
- add hl, bc
- ld [hl], $0
- ret
-
-Function296cf: ; 296cf (a:56cf)
- ld hl, $5
- add hl, bc
- ld a, [hl]
- cp $2c
- jr z, .asm_296da
- dec [hl]
- ret
-.asm_296da
- call Function29694
-
-Function296dd: ; 296dd (a:56dd)
- ld hl, $4
- add hl, bc
- ld a, [hl]
- cp $58
- jr z, .asm_296e8
- dec [hl]
- ret
-.asm_296e8
- call Function29694
- ld hl, $c
- add hl, bc
- ld [hl], $80
- ret
-
-Function296f2: ; 296f2 (a:56f2)
- ld hl, $c
- add hl, bc
- ld a, [hl]
- dec [hl]
- and a
- ret nz
- ld hl, $
- add hl, bc
- ld [hl], $0
- ret
-; 29701 (a:5701)
-
-Function29701: ; 29701
- ld a, [wLinkMode]
- cp LINK_TIMECAPSULE
- jr z, .asm_29725
- ld hl, UnknownText_0x29737
- call PrintText
- ld c, $bd
- call DelayFrames
- ld hl, UnknownText_0x29732
- call PrintText
- call Function297c9
- ld c, $80
- call DelayFrames
- call Function29114
- ret
-
-.asm_29725
- ld hl, UnknownText_0x29732
- call PrintText
- call Function297c9
- call Function29114
- ret
-; 29732
-
-UnknownText_0x29732: ; 0x29732
- ; was sent to @ .
- text_jump UnknownText_0x1bc6e9
- db "@"
-; 0x29737
-
-UnknownText_0x29737: ; 0x29737
- ;
- text_jump UnknownText_0x1bc701
- db "@"
-; 0x2973c
-
-Function2973c: ; 2973c
- ld hl, UnknownText_0x29752
- call PrintText
- call Function297c9
- ld hl, UnknownText_0x29757
- call PrintText
- call Function297c9
- call Function29114
- ret
-; 29752
-
-UnknownText_0x29752: ; 0x29752
- ; bids farewell to
- text_jump UnknownText_0x1bc703
- db "@"
-; 0x29757
-
-UnknownText_0x29757: ; 0x29757
- ; .
- text_jump UnknownText_0x1bc719
- db "@"
-; 0x2975c
-
-Function2975c: ; 2975c
- call WaitTop
- hlcoord 0, 10
- ld bc, 8 * SCREEN_WIDTH
- ld a, " "
- call ByteFill
- call WaitBGMap
- ld hl, UnknownText_0x2977a
- call PrintText
- call Function297c9
- call Function29114
- ret
-; 2977a
-
-UnknownText_0x2977a: ; 0x2977a
- ; Take good care of @ .
- text_jump UnknownText_0x1bc71f
- db "@"
-; 0x2977f
-
-Function2977f: ; 2977f
- ld hl, UnknownText_0x2979a
- call PrintText
- call Function297c9
- ld hl, UnknownText_0x2979f
- call PrintText
- call Function297c9
- ld c, $e
- call DelayFrames
- call Function29114
- ret
-; 2979a
-
-UnknownText_0x2979a: ; 0x2979a
- ; For @ 's @ ,
- text_jump UnknownText_0x1bc739
- db "@"
-; 0x2979f
-
-UnknownText_0x2979f: ; 0x2979f
- ; sends @ .
- text_jump UnknownText_0x1bc74c
- db "@"
-; 0x297a4
-
-Function297a4: ; 297a4
- ld hl, UnknownText_0x297bf
- call PrintText
- call Function297c9
- ld hl, UnknownText_0x297c4
- call PrintText
- call Function297c9
- ld c, $e
- call DelayFrames
- call Function29114
- ret
-; 297bf
-
-UnknownText_0x297bf: ; 0x297bf
- ; will trade @ @
- text_jump UnknownText_0x1bc75e
- db "@"
-; 0x297c4
-
-UnknownText_0x297c4: ; 0x297c4
- ; for @ 's @ .
- text_jump UnknownText_0x1bc774
- db "@"
-; 0x297c9
-
-Function297c9: ; 297c9
- ld c, $50
- call DelayFrames
- ret
-; 297cf
-
-Function297cf: ; 297cf
- hlcoord 0, 0
- ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
- ld a, " "
- call ByteFill
- ret
-; 297db
-
-Function297db: ; 297db
-.asm_297db
- push bc
- push hl
-.asm_297dd
- ld a, [de]
- inc de
- ld [hli], a
- dec c
- jr nz, .asm_297dd
- pop hl
- ld bc, SCREEN_WIDTH
- add hl, bc
- pop bc
- dec b
- jr nz, .asm_297db
- ret
-; 297ed
-
-Function297ed: ; 297ed
- ld a, [hSGB]
- and a
- ld a, $e4
- jr z, .asm_297f6
- ld a, $f0
-
-.asm_297f6
- call Functioncf8
- ld a, $e4
- call DmgToCgbBGPals
- ret
-; 297ff
-
-Function297ff: ; 297ff
- push de
- ld de, wc736
- ld bc, NAME_LENGTH
- call CopyBytes
- pop hl
- ld de, wc741
- ld bc, NAME_LENGTH
- call CopyBytes
- ret
-; 29814
-
-Function29814: ; 29814
- ld a, [hl]
- ld [wc74c], a
- ld a, [de]
- ld [wc74d], a
- ret
-; 2981d
-
-Function2981d: ; 2981d
- ld a, [wcf65]
- and $7
- ret nz
- ld a, [rBGP]
- xor $3c
- call DmgToCgbBGPals
- ret
-; 2982b
-
-Function2982b: ; 2982b
- call DelayFrame
- ld de, TradeBallGFX
- ld hl, VTiles0 tile $62
- lb bc, BANK(TradeBallGFX), $6
- call Request2bpp
- ld de, TradePoofGFX
- ld hl, VTiles0 tile $68
- lb bc, BANK(TradePoofGFX), $c
- call Request2bpp
- ld de, TradeCableGFX
- ld hl, VTiles0 tile $74
- lb bc, BANK(TradeCableGFX), $4
- call Request2bpp
- xor a
- ld hl, wc300
- ld [hli], a
- ld [hl], $62
- ret
-; 2985a
-
-Function2985a: ; 2985a
- call DelayFrame
- ld e, $3
- callab Function8e83f
- ld de, TradeBubbleGFX
- ld hl, VTiles0 tile $72
- lb bc, BANK(TradeBubbleGFX), $4
- call Request2bpp
- xor a
- ld hl, wc300
- ld [hli], a
- ld [hl], $62
- ret
-; 29879
-
-Function29879: ; 29879
- ld hl, wcf64
- ld a, [hl]
- and a
- jr z, .asm_29882
- dec [hl]
- ret
-
-.asm_29882
- call Function29114
- ret
-; 29886
-
-Function29886: ; 29886
- ld hl, wcf64
- ld a, [hl]
- and a
- jr z, .asm_2988f
- dec [hl]
- ret
-
-.asm_2988f
- call Function29114
- ret
-; 29893
-
-
-Function29893: ; 29893
-; This function is unreferenced.
-; It was meant for use in Japanese versions, so the
-; constant used for copy length was changed by accident.
-
- ld hl, Unknown_298b5
-
- ld a, [hli]
- ld [wc6d0], a
- ld de, wc6e7
- ld c, 13 ; jp: 8
-.asm_2989f
- ld a, [hli]
- ld [de], a
- inc de
- dec c
- jr nz, .asm_2989f
-
- ld a, [hli]
- ld [wc702], a
- ld de, wc719
- ld c, 13 ; jp: 8
-.asm_298ae
- ld a, [hli]
- ld [de], a
- inc de
- dec c
- jr nz, .asm_298ae
- ret
-; 298b5
-
-Unknown_298b5: ; 298b5
- db $03, "ゲーフり@@", $23, $01 ; GAME FREAK
- db $06, "クりーチャ@", $56, $04 ; Creatures Inc.
-; 298c7
-
-
-TradeGameBoyTilemap: ; 298c7
-; 6x8
- db $31, $32, $32, $32, $32, $33
- db $34, $35, $36, $36, $37, $38
- db $34, $39, $3a, $3a, $3b, $38
- db $3c, $3d, $3e, $3e, $3f, $40
- db $41, $42, $43, $43, $44, $45
- db $46, $47, $43, $48, $49, $4a
- db $41, $43, $4b, $4c, $4d, $4e
- db $4f, $50, $50, $50, $51, $52
-; 297f7
-
-Tilemap_298f7: ; 297f7
-; 12x3
- db $43, $55, $56, $53, $53, $53, $53, $53, $53, $53, $53, $53
- db $43, $57, $58, $54, $54, $54, $54, $54, $54, $54, $54, $54
- db $43, $59, $5a, $43, $43, $43, $43, $43, $43, $43, $43, $43
-; 2991b
-
-TradeArrowGFX: INCBIN "gfx/trade/arrow.2bpp"
-TradeCableGFX: INCBIN "gfx/trade/cable.2bpp"
-TradeBubbleGFX: INCBIN "gfx/trade/bubble.2bpp"
-TradeGameBoyLZ: INCBIN "gfx/trade/game_boy.2bpp.lz"
-TradeBallGFX: INCBIN "gfx/trade/ball.2bpp"
-TradePoofGFX: INCBIN "gfx/trade/poof.2bpp"
+INCLUDE "engine/trade/animation.asm"
Special_CheckTimeCapsuleCompatibility: ; 29bfb
; Checks to see if your Party is compatible with the generation 1 games. Returns the following in ScriptVar:
@@ -3668,11 +2148,11 @@ Function29c67: ; 29c67
; 29c7b
Special_EnterTimeCapsule: ; 29c7b
- ld c, $a
+ ld c, 10
call DelayFrames
ld a, $4
call Function29f17
- ld c, $28
+ ld c, 40
call DelayFrames
xor a
ld [hVBlank], a
@@ -3730,15 +2210,15 @@ Special_AbortLink: ; 29c92
; 29ce8
Special_SetBitsForLinkTradeRequest: ; 29ce8
- ld a, $1
- ld [wcf56], a
+ ld a, LINK_TRADECENTER - 1
+ ld [wPlayerLinkAction], a
ld [wd265], a
ret
; 29cf1
Special_SetBitsForBattleRequest: ; 29cf1
- ld a, $2
- ld [wcf56], a
+ ld a, LINK_COLOSSEUM - 1
+ ld [wPlayerLinkAction], a
ld [wd265], a
ret
; 29cfa
@@ -3752,14 +2232,14 @@ Special_SetBitsForTimeCapsuleRequest: ; 29cfa
ld [rSC], a
ld a, $80
ld [rSC], a
- xor a
- ld [wcf56], a
+ xor a ; LINK_TIMECAPSULE - 1
+ ld [wPlayerLinkAction], a
ld [wd265], a
ret
; 29d11
Special_WaitForLinkedFriend: ; 29d11
- ld a, [wcf56]
+ ld a, [wPlayerLinkAction]
and a
jr z, .asm_29d2f
ld a, $2
@@ -3815,9 +2295,9 @@ Special_WaitForLinkedFriend: ; 29d11
jr .asm_29d39
.asm_29d79
- call Function908
+ call LinkCommunicationsSignalDataReceived
call DelayFrame
- call Function908
+ call LinkCommunicationsSignalDataReceived
ld c, $32
call DelayFrames
ld a, $1
@@ -3832,7 +2312,7 @@ Special_WaitForLinkedFriend: ; 29d11
Special_CheckLinkTimeout: ; 29d92
ld a, $1
- ld [wcf56], a
+ ld [wPlayerLinkAction], a
ld hl, wcf5b
ld a, $3
ld [hli], a
@@ -3854,7 +2334,7 @@ Special_CheckLinkTimeout: ; 29d92
Function29dba: ; 29dba
ld a, $5
- ld [wcf56], a
+ ld [wPlayerLinkAction], a
ld hl, wcf5b
ld a, $3
ld [hli], a
@@ -3875,17 +2355,17 @@ Function29dba: ; 29dba
ld a, b
or c
jr nz, .asm_29de0
- ld a, [wcf51]
+ ld a, [wOtherPlayerLinkMode]
cp $5
jr nz, .asm_29e03
ld a, $6
- ld [wcf56], a
+ ld [wPlayerLinkAction], a
ld hl, wcf5b
ld a, $1
ld [hli], a
ld [hl], $32
call Function29e0c
- ld a, [wcf51]
+ ld a, [wOtherPlayerLinkMode]
cp $6
jr z, .asm_29e08
@@ -3946,7 +2426,7 @@ Function29e47: ; 29e47
ld b, $a
.asm_29e49
call DelayFrame
- call Function908
+ call LinkCommunicationsSignalDataReceived
dec b
jr nz, .asm_29e49
ret
@@ -3969,7 +2449,7 @@ Function29e53: ; 29e53
Special_TryQuickSave: ; 29e66
ld a, [wd265]
push af
- callba Function14ab2
+ callba Link_SaveGame
ld a, $1
jr nc, .asm_29e75
xor a
@@ -3987,14 +2467,14 @@ Special_CheckBothSelectedSameRoom: ; 29e82
ld a, [wd265]
call Function29f17
push af
- call Function908
+ call LinkCommunicationsSignalDataReceived
call DelayFrame
- call Function908
+ call LinkCommunicationsSignalDataReceived
pop af
ld b, a
ld a, [wd265]
cp b
- jr nz, .asm_29eaa
+ jr nz, .fail
ld a, [wd265]
inc a
ld [wLinkMode], a
@@ -4004,7 +2484,7 @@ Special_CheckBothSelectedSameRoom: ; 29e82
ld [ScriptVar], a
ret
-.asm_29eaa
+.fail
xor a
ld [ScriptVar], a
ret
@@ -4052,14 +2532,14 @@ Special_CloseLink: ; 29eee
; 29efa
Special_FailedLinkToPast: ; 29efa
- ld c, $28
+ ld c, 40
call DelayFrames
ld a, $e
jp Function29f17
; 29f04
Function29f04: ; 29f04
- ld c, $3
+ ld c, 3
call DelayFrames
ld a, -1
ld [hLinkPlayerNumber], a
@@ -4073,26 +2553,26 @@ Function29f04: ; 29f04
Function29f17: ; 29f17
add $d0
- ld [wcf56], a
+ ld [wPlayerLinkAction], a
ld [wcf57], a
ld a, $2
ld [hVBlank], a
call DelayFrame
call DelayFrame
-.asm_29f29
+.receive_loop
call Function83b
- ld a, [wcf51]
+ ld a, [wOtherPlayerLinkMode]
ld b, a
and $f0
cp $d0
- jr z, .asm_29f40
- ld a, [wcf52]
+ jr z, .done
+ ld a, [wOtherPlayerLinkAction]
ld b, a
and $f0
cp $d0
- jr nz, .asm_29f29
+ jr nz, .receive_loop
-.asm_29f40
+.done
xor a
ld [hVBlank], a
ld a, b
diff --git a/engine/mail.asm b/engine/mail.asm
new file mode 100755
index 000000000..82d27d4be
--- /dev/null
+++ b/engine/mail.asm
@@ -0,0 +1,589 @@
+SendMailToPC: ; 4456e
+ ld a, MON_ITEM
+ call GetPartyParamLocation
+ ld d, [hl]
+ callba ItemIsMail
+ jr nc, .full
+ call GetMailboxCount
+ cp MAILBOX_CAPACITY
+ jr nc, .full
+ ld bc, MAIL_STRUCT_LENGTH
+ ld hl, sMailbox
+ call AddNTimes
+ ld d, h
+ ld e, l
+ ld a, [CurPartyMon]
+ ld bc, MAIL_STRUCT_LENGTH
+ ld hl, sPartyMail
+ call AddNTimes
+ push hl
+ ld a, BANK(sMailboxCount)
+ call GetSRAMBank
+ ld bc, MAIL_STRUCT_LENGTH
+ call CopyBytes
+ pop hl
+ xor a
+ ld bc, MAIL_STRUCT_LENGTH
+ call ByteFill
+ ld a, MON_ITEM
+ call GetPartyParamLocation
+ ld [hl], $0
+ ld hl, sMailboxCount
+ inc [hl]
+ call CloseSRAM
+ xor a
+ ret
+
+.full
+ scf
+ ret
+; 445c0
+
+DeleteMailFromPC: ; 445c0 (11:45c0)
+; Shift all mail messages in the mailbox
+ ld a, BANK(sMailboxCount)
+ call GetSRAMBank
+ ld a, b
+ push bc
+ ld hl, sMailbox
+ ld bc, MAIL_STRUCT_LENGTH
+ call AddNTimes
+ push hl
+ add hl, bc
+ pop de
+ pop bc
+.loop
+ ld a, b
+ cp MAILBOX_CAPACITY - 1
+ jr z, .done
+ push bc
+ ld bc, MAIL_STRUCT_LENGTH
+ call CopyBytes
+ pop bc
+ inc b
+ jr .loop
+.done
+ ld h, d
+ ld l, e
+ xor a
+ ld bc, MAIL_STRUCT_LENGTH
+ call ByteFill
+ ld hl, sMailboxCount
+ dec [hl]
+ jp CloseSRAM
+; 445f4 (11:45f4)
+
+ReadMailMessage: ; 445f4
+ ld a, b
+ ld hl, sMailbox
+ ld bc, MAIL_STRUCT_LENGTH
+ call AddNTimes
+ ld d, h
+ ld e, l
+ callba ReadAnyMail
+ ret
+
+MoveMailFromPCToParty: ; 44607
+ ld a, BANK(sMailboxCount)
+ call GetSRAMBank
+ push bc
+ ld a, b
+ ld bc, MAIL_STRUCT_LENGTH
+ ld hl, sMailbox
+ call AddNTimes
+ push hl
+ ld a, [CurPartyMon]
+ ld bc, MAIL_STRUCT_LENGTH
+ ld hl, sPartyMail
+ call AddNTimes
+ ld d, h
+ ld e, l
+ pop hl
+ push hl
+ ld bc, MAIL_STRUCT_LENGTH
+ call CopyBytes
+ pop hl
+ ld de, PARTYMON_STRUCT_LENGTH - MON_MOVES
+ add hl, de
+ ld d, [hl]
+ ld a, [CurPartyMon]
+ ld hl, PartyMon1Item
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call AddNTimes
+ ld [hl], d
+ call CloseSRAM
+ pop bc
+ jp DeleteMailFromPC
+; 44648 (11:4648)
+
+GetMailboxCount: ; 44648
+ ld a, BANK(sMailboxCount)
+ call GetSRAMBank
+ ld a, [sMailboxCount]
+ ld c, a
+ jp CloseSRAM
+; 44654
+
+CheckPokeItem:: ; 44654
+ push bc
+ push de
+ callba SelectMonFromParty
+ ld a, $2
+ jr c, .pop_return
+
+ ld a, [CurPartyMon]
+ ld hl, PartyMon1Item
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call AddNTimes
+ ld d, [hl]
+ callba ItemIsMail
+ ld a, $3
+ jr nc, .pop_return
+
+ ld a, BANK(sPartyMail)
+ call GetSRAMBank
+ ld a, [CurPartyMon]
+ ld hl, sPartyMail
+ ld bc, MAIL_STRUCT_LENGTH
+ call AddNTimes
+ ld d, h
+ ld e, l
+ pop hl
+ pop bc
+
+; Compare the mail message, byte for byte, with the expected message.
+ ld a, MAIL_MSG_LENGTH
+ ld [wd265], a
+.loop
+ ld a, [de]
+ ld c, a
+ ld a, b
+ call GetFarByte
+ cp "@"
+ jr z, .done
+ cp c
+ ld a, $0
+ jr nz, .close_sram_return
+ inc hl
+ inc de
+ ld a, [wd265]
+ dec a
+ ld [wd265], a
+ jr nz, .loop
+
+.done
+ callba CheckCurPartyMonFainted
+ ld a, $4
+ jr c, .close_sram_return
+ xor a
+ ld [wPokemonWithdrawDepositParameter], a
+ callba Functione039
+ ld a, $1
+
+.close_sram_return
+ call CloseSRAM
+ jr .return
+
+.pop_return
+ pop de
+ pop bc
+
+.return
+ ld [ScriptVar], a
+ ret
+; 446cc
+
+
+GivePokeItem:: ; 446cc
+ ld a, [PartyCount]
+ dec a
+ push af
+ push bc
+ ld hl, PartyMon1Item
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call AddNTimes
+ pop bc
+ ld [hl], b
+ pop af
+ push bc
+ push af
+ ld hl, sPartyMail
+ ld bc, $2f
+ call AddNTimes
+ ld d, h
+ ld e, l
+ ld hl, wd002
+ ld bc, $21
+ ld a, BANK(sPartyMail)
+ call GetSRAMBank
+ call CopyBytes
+ pop af
+ push af
+ ld hl, PartyMonOT
+ ld bc, NAME_LENGTH
+ call AddNTimes
+ ld bc, $a
+ call CopyBytes
+ pop af
+ ld hl, PartyMon1ID
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call AddNTimes
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hl]
+ ld [de], a
+ inc de
+ ld a, [CurPartySpecies]
+ ld [de], a
+ inc de
+ pop bc
+ ld a, b
+ ld [de], a
+ jp CloseSRAM
+; 44725
+
+
+BackupPartyMonMail: ; 44725
+ ld a, BANK(sPartyMail)
+ call GetSRAMBank
+ ld hl, sPartyMail
+ ld de, sPartyMailBackup
+ ld bc, 6 * MAIL_STRUCT_LENGTH
+ call CopyBytes
+ ld hl, sMailboxCount
+ ld de, sMailboxCountBackup
+ ld bc, 1 + 10 * MAIL_STRUCT_LENGTH
+ call CopyBytes
+ jp CloseSRAM
+; 44745
+
+RestorePartyMonMail: ; 44745 (11:4745)
+ ld a, BANK(sPartyMail)
+ call GetSRAMBank
+ ld hl, sPartyMailBackup
+ ld de, sPartyMail
+ ld bc, 6 * MAIL_STRUCT_LENGTH
+ call CopyBytes
+ ld hl, sMailboxCountBackup
+ ld de, sMailboxCount
+ ld bc, 1 + 10 * MAIL_STRUCT_LENGTH
+ call CopyBytes
+ jp CloseSRAM
+
+DeletePartyMonMail: ; 44765 (11:4765)
+ ld a, BANK(sPartyMail)
+ call GetSRAMBank
+ xor a
+ ld hl, sPartyMail
+ ld bc, 6 * MAIL_STRUCT_LENGTH
+ call ByteFill
+ xor a
+ ld hl, sMailboxCount
+ ld bc, 1 + 10 * MAIL_STRUCT_LENGTH
+ call ByteFill
+ jp CloseSRAM
+; 44781 (11:4781)
+
+
+IsAnyMonHoldingMail: ; 44781
+ ld a, [PartyCount]
+ and a
+ jr z, .no_mons
+ ld e, a
+ ld hl, PartyMon1Item
+.loop
+ ld d, [hl]
+ push hl
+ push de
+ callba ItemIsMail
+ pop de
+ pop hl
+ ret c
+ ld bc, PARTYMON_STRUCT_LENGTH
+ add hl, bc
+ dec e
+ jr nz, .loop
+
+.no_mons
+ and a
+ ret
+; 447a0
+
+_KrisMailBoxMenu: ; 0x447a0
+ call InitMail
+ jr z, .nomail
+ call LoadStandardMenuDataHeader
+ call MailboxPC
+ jp WriteBackup
+
+.nomail
+ ld hl, .EmptyMailboxText
+ jp MenuTextBoxBackup
+; 0x447b4
+
+.EmptyMailboxText ; 0x447b4
+ text_jump _EmptyMailboxText
+ db "@"
+
+InitMail: ; 0x447b9
+; initialize wMailboxCount and beyond with incrementing values, one per mail
+; set z if no mail
+ ld a, BANK(sMailboxCount)
+ call GetSRAMBank
+ ld a, [sMailboxCount]
+ call CloseSRAM
+ ld hl, wMailboxCount
+ ld [hli], a
+ and a
+
+ jr z, .done ; if no mail, we're done
+
+ ; load values in memory with incrementing values starting at wMailboxCount
+ ld b, a
+ ld a, 1
+.loop
+ ld [hli], a
+ inc a
+ dec b
+ jr nz, .loop
+.done
+ ld [hl], -1 ; terminate
+
+ ld a, [wMailboxCount]
+ and a
+ ret
+; 0x447da
+
+Function447da: ; 0x447da
+ dec a
+ ld hl, sMailbox1Author
+ ld bc, MAIL_STRUCT_LENGTH
+ call AddNTimes
+ ld a, BANK(sMailboxCount)
+ call GetSRAMBank
+ ld de, StringBuffer2
+ push de
+ ld bc, NAME_LENGTH - 1
+ call CopyBytes
+ ld a, "@"
+ ld [de], a
+ call CloseSRAM
+ pop de
+ ret
+; 0x447fb
+
+Function447fb: ; 0x447fb
+ push de
+ ld a, [MenuSelection]
+ call Function447da
+ pop hl
+ jp PlaceString
+; 0x44806
+
+MailboxPC: ; 0x44806
+ xor a
+ ld [OBPals + 8 * 6], a
+ ld a, $1
+ ld [wCurMessageIndex], a
+.loop
+ call InitMail
+ ld hl, MenuData4494c
+ call CopyMenuDataHeader
+ xor a
+ ld [hBGMapMode], a
+ call InitScrollingMenu
+ call UpdateSprites
+
+ ld a, [wCurMessageIndex]
+ ld [wMenuCursorBuffer], a
+ ld a, [OBPals + 8 * 6]
+ ld [wMenuScrollPosition], a
+ call HandleScrollingMenu
+ ld a, [wMenuScrollPosition]
+ ld [OBPals + 8 * 6], a
+ ld a, [MenuSelection2]
+ ld [wCurMessageIndex], a
+
+ ld a, [wcf73]
+ cp $2
+ jr z, .exit
+ call Function4484a
+ jr .loop
+
+.exit
+ xor a
+ ret
+; 0x4484a
+
+Function4484a: ; 0x4484a
+ ld hl, MenuData44964
+ call LoadMenuDataHeader
+ call InterpretMenu2
+ call ExitMenu
+ jr c, .exit
+ ld a, [MenuSelection2]
+ dec a
+ ld hl, .JumpTable
+ rst JumpTable
+
+.exit
+ ret
+; 0x44861
+
+.JumpTable
+ dw .ReadMail
+ dw .PutInPack
+ dw .AttachMail
+ dw .Cancel
+
+.ReadMail ; 0x44869
+ call FadeToMenu
+ ld a, [MenuSelection]
+ dec a
+ ld b, a
+ call ReadMailMessage
+ jp ReturnToCallingMenu
+; 0x44877
+
+.PutInPack ; 0x44877
+ ld hl, .MessageLostText
+ call MenuTextBox
+ call YesNoBox
+ call ExitMenu
+ ret c
+ ld a, [MenuSelection]
+ dec a
+ call .GetMailType
+ ld a, $1
+ ld [wItemQuantityChangeBuffer], a
+ ld hl, NumItems
+ call ReceiveItem
+ jr c, .put_in_bag
+ ld hl, .PackFullText
+ jp MenuTextBoxBackup
+
+.put_in_bag
+ ld a, [MenuSelection]
+ dec a
+ ld b, a
+ call DeleteMailFromPC
+ ld hl, .PutAwayText
+ jp MenuTextBoxBackup
+; 0x448ac
+
+.PutAwayText ; 0x448ac
+ text_jump ClearedMailPutAwayText
+ db "@"
+
+.PackFullText ; 0x448b1
+ text_jump MailPackFullText
+ db "@"
+
+.MessageLostText ; 0x448b6
+ text_jump MailMessageLostText
+ db "@"
+
+.GetMailType: ; 0x448bb
+ push af
+ ld a, BANK(sMailboxCount)
+ call GetSRAMBank
+ pop af
+ ld hl, sMailbox1Type
+ ld bc, MAIL_STRUCT_LENGTH
+ call AddNTimes
+ ld a, [hl]
+ ld [CurItem], a
+ jp CloseSRAM
+; 0x448d2
+
+.AttachMail ; 0x448d2
+ call FadeToMenu
+ xor a
+ ld [PartyMenuActionText], a
+ call ClearBGPalettes
+.try_again
+ callba LoadPartyMenuGFX
+ callba InitPartyMenuWithCancel
+ callba InitPartyMenuGFX
+ callba WritePartyMenuTilemap
+ callba PrintPartyMenuText
+ call WaitBGMap
+ call SetPalettes
+ call DelayFrame
+ callba PartyMenuSelect
+ jr c, .exit2
+ ld a, [CurPartySpecies]
+ cp EGG
+ jr z, .egg
+ ld a, MON_ITEM
+ call GetPartyParamLocation
+ ld a, [hl]
+ and a
+ jr z, .attach_mail
+ ld hl, .HoldingMailText
+ call PrintText
+ jr .try_again
+
+.egg
+ ld hl, .EggText
+ call PrintText
+ jr .try_again
+
+.attach_mail
+ ld a, [MenuSelection]
+ dec a
+ ld b, a
+ call MoveMailFromPCToParty
+ ld hl, .MailMovedText
+ call PrintText
+
+.exit2
+ jp ReturnToCallingMenu
+; 0x4493c
+
+.HoldingMailText ; 0x4493c
+ text_jump MailAlreadyHoldingItemText
+ db "@"
+
+.EggText ; 0x44941
+ text_jump MailEggText
+ db "@"
+
+.MailMovedText ; 0x44946
+ text_jump MailMovedFromBoxText
+ db "@"
+
+.Cancel
+ ret
+
+MenuData4494c: ; 0x4494c
+ db %01000000 ; flags
+ db 1, 8 ; start coords
+ db 10, 18 ; end coords
+ dw .MenuData2
+ db 1 ; default option
+
+.MenuData2
+ db %00010000 ; flags
+ db 4, 0 ; rows/columns?
+ db 1 ; horizontal spacing?
+ dbw 0, wMailboxCount ; text pointer
+ dba Function447fb
+ dbw 0,0
+ dbw 0,0
+
+MenuData44964: ; 0x44964
+ db %01000000 ; flags
+ db 0, 0 ; start coords
+ db 9, $d ; end coords
+ dw .MenuData2
+ db 1 ; default option
+
+.MenuData2
+ db %10000000 ; flags
+ db 4 ; items
+ db "READ MAIL@"
+ db "PUT IN PACK@"
+ db "ATTACH MAIL@"
+ db "CANCEL@"
diff --git a/engine/main_menu.asm b/engine/main_menu.asm
new file mode 100755
index 000000000..efab46cda
--- /dev/null
+++ b/engine/main_menu.asm
@@ -0,0 +1,1242 @@
+GFX_49c0c: ; 49c0c
+INCBIN "gfx/unknown/049c0c.2bpp"
+; 49cdc
+
+MainMenu: ; 49cdc
+ xor a
+ ld [wc2d7], a
+ call Function49ed0
+ ld b, SCGB_08
+ call GetSGBLayout
+ call SetPalettes
+ ld hl, GameTimerPause
+ res 0, [hl]
+ call Function49da4
+ ld [wcf76], a
+ call Function49e09
+ ld hl, MenuDataHeader_0x49d14
+ call LoadMenuDataHeader
+ call Function49de4
+ call WriteBackup
+ jr c, .quit
+ call ClearTileMap
+ ld a, [MenuSelection]
+ ld hl, Jumptable_49d60
+ rst JumpTable
+ jr MainMenu
+
+.quit
+ ret
+; 49d14
+
+MenuDataHeader_0x49d14: ; 49d14
+ db $40 ; flags
+ db 00, 00 ; start coords
+ db 07, 16 ; end coords
+ dw MenuData2_0x49d1c
+ db 1 ; default option
+; 49d1c
+
+MenuData2_0x49d1c: ; 49d1c
+ db $80 ; flags
+ db 0 ; items
+ dw MainMenuItems
+ dw Function1f79
+ dw MainMenuText
+; 49d20
+
+MainMenuText: ; 49d24
+ db "CONTINUE@"
+ db "NEW GAME@"
+ db "OPTION@"
+ db "MYSTERY GIFT@"
+ db "MOBILE@"
+ db "MOBILE STUDIUM@"
+
+Jumptable_49d60: ; 0x49d60
+ dw MainMenu_Continue
+ dw MainMenu_NewGame
+ dw MainMenu_Options
+ dw MainMenu_MysteryGift
+ dw MainMenu_Mobile
+ dw MainMenu_MobileStudium
+; 0x49d6c
+
+CONTINUE EQU 0
+NEW_GAME EQU 1
+OPTION EQU 2
+MYSTERY_GIFT EQU 3
+MOBILE EQU 4
+MOBILE_STUDIUM EQU 5
+
+MainMenuItems:
+
+NewGameMenu: ; 0x49d6c
+ db 2
+ db NEW_GAME
+ db OPTION
+ db $ff
+
+ContinueMenu: ; 0x49d70
+ db 3
+ db CONTINUE
+ db NEW_GAME
+ db OPTION
+ db $ff
+
+MobileMysteryMenu: ; 0x49d75
+ db 5
+ db CONTINUE
+ db NEW_GAME
+ db OPTION
+ db MYSTERY_GIFT
+ db MOBILE
+ db $ff
+
+MobileMenu: ; 0x49d7c
+ db 4
+ db CONTINUE
+ db NEW_GAME
+ db OPTION
+ db MOBILE
+ db $ff
+
+MobileStudiumMenu: ; 0x49d82
+ db 5
+ db CONTINUE
+ db NEW_GAME
+ db OPTION
+ db MOBILE
+ db MOBILE_STUDIUM
+ db $ff
+
+MysteryMobileStudiumMenu: ; 0x49d89
+ db 6
+ db CONTINUE
+ db NEW_GAME
+ db OPTION
+ db MYSTERY_GIFT
+ db MOBILE
+ db MOBILE_STUDIUM
+ db $ff
+
+MysteryMenu: ; 0x49d91
+ db 4
+ db CONTINUE
+ db NEW_GAME
+ db OPTION
+ db MYSTERY_GIFT
+ db $ff
+
+MysteryStudiumMenu: ; 0x49d97
+ db 5
+ db CONTINUE
+ db NEW_GAME
+ db OPTION
+ db MYSTERY_GIFT
+ db MOBILE_STUDIUM
+ db $ff
+
+StudiumMenu: ; 0x49d9e
+ db 4
+ db CONTINUE
+ db NEW_GAME
+ db OPTION
+ db MOBILE_STUDIUM
+ db $ff
+
+
+Function49da4: ; 49da4
+ nop
+ nop
+ nop
+ ld a, [wSaveFileExists]
+ and a
+ jr nz, .next
+ ld a, $0
+ ret
+
+.next
+ ld a, [hCGB]
+ cp $1
+ ld a, $1
+ ret nz
+ ld a, BANK(sNumDailyMysteryGiftPartnerIDs)
+ call GetSRAMBank
+ ld a, [sNumDailyMysteryGiftPartnerIDs]
+ cp $ff
+ call CloseSRAM
+ jr nz, .done
+ ld a, [StatusFlags]
+ bit 7, a
+ ld a, $1
+ jr z, .ok
+ jr .ok
+
+.ok
+ jr .ok2
+
+.ok2
+ ld a, $1
+ ret
+
+.done
+ ld a, [StatusFlags]
+ bit 7, a
+ jr z, .ok3
+ jr .ok3
+
+.ok3
+ jr .ok4
+
+.ok4
+ ld a, $6
+ ret
+; 49de4
+
+Function49de4: ; 49de4
+ call SetUpMenu
+.asm_49de7
+ call Function49e09
+ ld a, [wcfa5]
+ set 5, a
+ ld [wcfa5], a
+ call Function1f1a
+ ld a, [wcf73]
+ cp $2
+ jr z, .asm_49e07
+ cp $1
+ jr z, .asm_49e02
+ jr .asm_49de7
+
+.asm_49e02
+ call PlayClickSFX
+ and a
+ ret
+
+.asm_49e07
+ scf
+ ret
+; 49e09
+
+Function49e09: ; 49e09
+ ld a, [wSaveFileExists]
+ and a
+ ret z
+ xor a
+ ld [hBGMapMode], a
+ call Function49e27
+ ld hl, Options
+ ld a, [hl]
+ push af
+ set 4, [hl]
+ call Function49e3d
+ pop af
+ ld [Options], a
+ ld a, $1
+ ld [hBGMapMode], a
+ ret
+; 49e27
+
+
+Function49e27: ; 49e27
+ call CheckRTCStatus
+ and $80
+ jr nz, .asm_49e39
+ hlcoord 0, 14
+ ld b, $2
+ ld c, $12
+ call TextBox
+ ret
+
+.asm_49e39
+ call SpeechTextBox
+ ret
+; 49e3d
+
+
+Function49e3d: ; 49e3d
+ ld a, [wSaveFileExists]
+ and a
+ ret z
+ call CheckRTCStatus
+ and $80
+ jp nz, Function49e75
+ call UpdateTime
+ call GetWeekday
+ ld b, a
+ decoord 1, 15
+ call Function49e91
+ decoord 4, 16
+ ld a, [hHours]
+ ld c, a
+ callba PrintHour
+ ld [hl], ":"
+ inc hl
+ ld de, hMinutes
+ lb bc, PRINTNUM_LEADINGZEROS | 1, 2
+ call PrintNum
+ ret
+; 49e70
+
+; 49e70
+ db "min.@"
+; 49e75
+
+Function49e75: ; 49e75
+ hlcoord 1, 14
+ ld de, .TimeNotSet
+ call PlaceString
+ ret
+; 49e7f
+
+.TimeNotSet ; 49e7f
+ db "TIME NOT SET@"
+; 49e8c
+
+UnknownText_0x49e8c: ; 49e8c
+ text_jump UnknownText_0x1c5182
+ db "@"
+; 49e91
+
+Function49e91: ; 49e91
+ push de
+ ld hl, .Days
+ ld a, b
+ call GetNthString
+ ld d, h
+ ld e, l
+ pop hl
+ call PlaceString
+ ld h, b
+ ld l, c
+ ld de, .Day
+ call PlaceString
+ ret
+; 49ea8
+
+.Days
+ db "SUN@"
+ db "MON@"
+ db "TUES@"
+ db "WEDNES@"
+ db "THURS@"
+ db "FRI@"
+ db "SATUR@"
+.Day
+ db "DAY@"
+; 49ed0
+
+Function49ed0: ; 49ed0
+ xor a
+ ld [hMapAnims], a
+ call ClearTileMap
+ call LoadFontsExtra
+ call LoadStandardFont
+ call ResetTextRelatedRAM
+ ret
+; 49ee0
+
+
+MainMenu_NewGame: ; 49ee0
+ callba NewGame
+ ret
+; 49ee7
+
+MainMenu_Options: ; 49ee7
+ callba OptionsMenu
+ ret
+; 49eee
+
+MainMenu_Continue: ; 49eee
+ callba Continue
+ ret
+; 49ef5
+
+MainMenu_MysteryGift: ; 49ef5
+ callba MysteryGift
+ ret
+; 49efc
+
+MainMenu_Mobile: ; 49efc
+ call ClearBGPalettes
+ ld a, MUSIC_MOBILE_ADAPTER_MENU
+ ld [wMapMusic], a
+ ld de, MUSIC_MOBILE_ADAPTER_MENU
+ call Function4a6c5
+Function49f0a: ; 49f0a
+ call ClearBGPalettes
+ call Function4a3a7
+ call Function4a492
+ call ClearBGPalettes
+Function49f16: ; 49f16
+ call Function4a071
+ ld c, 12
+ call DelayFrames
+ hlcoord 4, 0
+ ld b, $a
+ ld c, $a
+ call Function48cdc
+ hlcoord 6, 2
+ ld de, MobileString1
+ call PlaceString
+ hlcoord 0, 12
+ ld b, $4
+ ld c, $12
+ call TextBox
+ xor a
+ ld de, String_0x49fe9
+ hlcoord 1, 14
+ call PlaceString
+ call Function3200
+ call SetPalettes
+ call Function1bc9
+ ld hl, MenuSelection2
+ ld b, [hl]
+ push bc
+ jr .asm_49f5d
+
+.asm_49f55
+ call Function1bd3
+ ld hl, MenuSelection2
+ ld b, [hl]
+ push bc
+
+.asm_49f5d
+ bit 0, a
+ jr nz, .asm_49f67
+ bit 1, a
+ jr nz, .asm_49f84
+ jr .asm_49f97
+
+.asm_49f67
+ ld hl, MenuSelection2
+ ld a, [hl]
+ cp $1
+ jp z, Function4a098
+ cp $2
+ jp z, Function4a0b9
+ cp $3
+ jp z, Function4a0c2
+ cp $4
+ jp z, Function4a100
+ ld a, $1
+ call Function1ff8
+
+.asm_49f84
+ pop bc
+ call ClearBGPalettes
+ call ClearTileMap
+ ld a, MUSIC_MAIN_MENU
+ ld [wMapMusic], a
+ ld de, MUSIC_MAIN_MENU
+ call Function4a6c5
+ ret
+
+.asm_49f97
+ ld hl, MenuSelection2
+ ld a, [hl]
+ dec a
+ ld hl, MobileStrings2
+ call GetNthString
+ ld d, h
+ ld e, l
+ hlcoord 1, 13
+ ld b, $4
+ ld c, $12
+ call ClearBox
+ hlcoord 1, 14
+ call PlaceString
+ jp .asm_49fb7
+
+.asm_49fb7
+ call Function4a071
+ pop bc
+ ld hl, MenuSelection2
+ ld [hl], b
+ ld b, $a
+ ld c, $1
+ hlcoord 5, 1
+ call ClearBox
+ jp .asm_49f55
+; 49fcc
+
+
+MobileString1: ; 49fcc
+ db "めいしフ,ルダー"
+ next "あいさつ"
+ next "プロフィール"
+ next "せ", $1e, "い"
+ next "もどる"
+ db "@"
+; 49fe9
+
+
+MobileStrings2:
+
+String_0x49fe9: ; 49fe9
+ db "めいし¯つくったり"
+ next "ほぞんしておける フ,ルダーです@"
+; 4a004
+
+String_0x4a004: ; 4a004
+ db "モバイルたいせんや じぶんのめいしで"
+ next "つかう あいさつ¯つくります@"
+; 4a026
+
+String_0x4a026: ; 4a026
+ db "あなた%じゅうしょや ねんれいの"
+ next "せ", $1e, "い¯かえられます@"
+; 4a042
+
+String_0x4a042: ; 4a042
+ db "モバイルセンター", $1d, "せつぞくするとき"
+ next "ひつような こと¯きめます@"
+; 4a062
+
+String_0x4a062: ; 4a062
+ db "まえ%がめん ", $1d, "もどります"
+ next "@"
+; 4a071
+
+Function4a071: ; 4a071 (12:6071)
+ ld hl, wcfa1
+ ld a, $2
+ ld [hli], a
+ ld a, $5
+ ld [hli], a
+ ld a, $5
+ ld [hli], a
+ ld a, $1
+ ld [hli], a
+ ld [hl], $0
+ set 5, [hl]
+ inc hl
+ xor a
+ ld [hli], a
+ ld a, $20
+ ld [hli], a
+ ld a, $1
+ add $40
+ add $80
+ add $2
+ ld [hli], a
+ ld a, $1
+rept 2
+ ld [hli], a
+endr
+ ret
+
+Function4a098: ; 4a098 (12:6098)
+ ld a, $2
+ call Function1ff8
+ call Function1bee
+ call WaitBGMap
+ call LoadStandardMenuDataHeader
+ callba Function89de0
+ call Call_ExitMenu
+ call Function49351
+ call Function4a485
+ pop bc
+ jp Function49f16
+
+Function4a0b9: ; 4a0b9 (12:60b9)
+ ld a, $2
+ call Function1ff8
+ pop bc
+ jp Function4a4c4
+
+Function4a0c2: ; 4a0c2 (12:60c2)
+ ld a, $2
+ call Function1ff8
+ ld a, BANK(sPlayerData)
+ call GetSRAMBank
+ ld hl, sPlayerData + PlayerName - wPlayerData
+ ld de, PlayerName
+ ld bc, $6
+ call CopyBytes
+ call CloseSRAM
+ callba Function150b9
+ ld c, 2
+ call DelayFrames
+ ld c, $1
+ call InitMobileProfile
+ push af
+ call ClearBGPalettes
+ pop af
+ and a
+ jr nz, .asm_4a0f9
+ callba _SaveData
+.asm_4a0f9
+ ld c, 5
+ call DelayFrames
+ jr asm_4a111
+
+Function4a100: ; 4a100 (12:6100)
+ ld a, $2
+ call Function1ff8
+ call ClearBGPalettes
+ call Function4a13b
+ call ClearBGPalettes
+ call ClearTileMap
+
+asm_4a111: ; 4a111 (12:6111)
+ pop bc
+ call LoadFontsExtra
+ jp Function49f0a
+
+Function4a118: ; 4a118 (12:6118)
+ ld hl, wcfa1
+ ld a, $1
+ ld [hli], a
+ ld a, $d
+ ld [hli], a
+ ld a, $3
+ ld [hli], a
+ ld a, $1
+ ld [hli], a
+ ld [hl], $0
+ set 5, [hl]
+ inc hl
+ xor a
+ ld [hli], a
+ ld a, $20
+ ld [hli], a
+ ld a, $1
+ add $2
+ ld [hli], a
+ ld a, $1
+rept 2
+ ld [hli], a
+endr
+ ret
+
+Function4a13b: ; 4a13b (12:613b)
+ call Function4a3a7
+ call Function4a492
+ call Function4a373
+ ld c, 10
+ call DelayFrames
+
+Function4a149: ; 4a149 (12:6149)
+ hlcoord 1, 2
+ ld b, $6
+ ld c, $10
+ call Function48cdc
+ hlcoord 3, 4
+ ld de, String_4a1ef
+ call PlaceString
+ hlcoord 0, 12
+ ld b, $4
+ ld c, $12
+ call TextBox
+ ld a, [MenuSelection2]
+ dec a
+ ld hl, Strings_4a23d
+ call GetNthString
+ ld d, h
+ ld e, l
+ hlcoord 1, 13
+ ld b, $4
+ ld c, $12
+ call ClearBox
+ hlcoord 1, 14
+ call PlaceString
+ callba Function104148
+ call SetPalettes
+ call Function1bc9
+ ld hl, MenuSelection2
+ ld b, [hl]
+ push bc
+ jr asm_4a19d
+
+Function4a195: ; 4a195 (12:6195)
+ call Function1bd3
+ ld hl, MenuSelection2
+ ld b, [hl]
+ push bc
+
+asm_4a19d: ; 4a19d (12:619d)
+ bit 0, a
+ jr nz, .asm_4a1a7
+ bit 1, a
+ jr nz, .asm_4a1ba
+ jr .asm_4a1bc
+.asm_4a1a7
+ ld hl, MenuSelection2
+ ld a, [hl]
+ cp $1
+ jp z, Function4a20e
+ cp $2
+ jp z, Function4a221
+ ld a, $1
+ call Function1ff8
+.asm_4a1ba
+ pop bc
+ ret
+.asm_4a1bc
+ ld hl, MenuSelection2
+ ld a, [hl]
+ dec a
+ ld hl, Strings_4a23d
+ call GetNthString
+ ld d, h
+ ld e, l
+ hlcoord 1, 13
+ ld b, $4
+ ld c, $12
+ call ClearBox
+ hlcoord 1, 14
+ call PlaceString
+ jr .asm_4a1db
+.asm_4a1db
+ call Function4a373
+ pop bc
+ ld hl, MenuSelection2
+ ld [hl], b
+ lb bc, 6, 1
+ hlcoord 2, 3
+ call ClearBox
+ jp Function4a195
+; 4a1ef (12:61ef)
+
+String_4a1ef: ; 4a1ef
+ db "モバイルセンター¯えらぶ"
+ next "ログインパスワード¯いれる"
+ next "もどる@"
+; 4a20e
+
+Function4a20e: ; 4a20e (12:620e)
+ ld a, $1
+ call Function1ff8
+ callba Function1719c8
+ call ClearBGPalettes
+ call DelayFrame
+ jr Function4a239
+
+Function4a221: ; 4a221 (12:6221)
+ ld a, $1
+ call Function1ff8
+ call Function4a28a
+ jr c, Function4a239
+ call Function4a373
+ ld a, $2
+ ld [MenuSelection2], a
+ jr .asm_4a235
+.asm_4a235
+ pop bc
+ jp Function4a149
+
+Function4a239: ; 4a239 (12:6239)
+ pop bc
+ jp Function4a13b
+; 4a23d (12:623d)
+
+Strings_4a23d: ; 4a23d
+ db "いつも せつぞく¯する"
+ next "モバイルセンター¯えらびます@"
+
+ db "モバイルセンター", $1d, "せつぞくするとき"
+ next "つかうパスワード¯ほぞんできます@"
+
+ db "まえ%がめん ", $1d, "もどります@"
+
+ db "@"
+; 4a28a
+
+Function4a28a: ; 4a28a (12:628a)
+ hlcoord 2, 3
+ lb bc, 6, 1
+ ld a, " "
+ call Function4a6d8
+ call Function1bee
+ call WaitBGMap
+ call LoadStandardMenuDataHeader
+ ld a, $5
+ call GetSRAMBank
+ ld a, [$aa4b]
+ call CloseSRAM
+ and a
+ jr z, .asm_4a2df
+ hlcoord 12, 0
+ ld b, $5
+ ld c, $6
+ call Function48cdc
+ hlcoord 14, 1
+ ld de, String_4a34b
+ call PlaceString
+ callba Function104148
+ call Function4a118
+ call Function1bd3
+ push af
+ call PlayClickSFX
+ pop af
+ bit 1, a
+ jr nz, .asm_4a33b
+ ld a, [MenuSelection2]
+ cp $2
+ jr z, .asm_4a2f0
+ cp $3
+ jr z, .asm_4a33b
+.asm_4a2df
+ callba Function11765d
+ call ClearBGPalettes
+ call Call_ExitMenu
+ call LoadFontsExtra
+ scf
+ ret
+.asm_4a2f0
+ call Function1bee
+ ld hl, UnknownText_0x4a358
+ call PrintText
+ hlcoord 14, 7
+ ld b, $3
+ ld c, $4
+ call TextBox
+ callba Function104148
+ ld hl, MenuDataHeader_0x4a362
+ call LoadMenuDataHeader
+ call InterpretMenu2
+ bit 1, a
+ jr nz, .asm_4a338
+ ld a, [MenuSelection2]
+ cp $2
+ jr z, .asm_4a338
+ ld a, $5
+ call GetSRAMBank
+ ld hl, $aa4b
+ xor a
+ ld bc, $11
+ call ByteFill
+ call CloseSRAM
+ ld hl, UnknownText_0x4a35d
+ call PrintText
+ call JoyWaitAorB
+.asm_4a338
+ call ExitMenu
+.asm_4a33b
+ call Call_ExitMenu
+ callba Function104148
+ xor a
+ ret
+; 4a346 (12:6346)
+
+MenuDataHeader_0x4a346: ; 0x4a346
+ db $40 ; flags
+ db 00, 12 ; start coords
+ db 06, 19 ; end coords
+
+String_4a34b: ; 4a34b
+ db "いれなおす"
+ next "けす"
+ next "もどる@"
+; 4a358
+
+UnknownText_0x4a358: ; 0x4a358
+ ; Delete the saved LOG-IN PASSWORD?
+ text_jump UnknownText_0x1c5196
+ db "@"
+; 0x4a35d
+
+UnknownText_0x4a35d: ; 0x4a35d
+ ; Deleted the LOG-IN PASSWORD.
+ text_jump UnknownText_0x1c51b9
+ db "@"
+; 0x4a362
+
+MenuDataHeader_0x4a362: ; 0x4a362
+ db $40 ; flags
+ db 07, 14 ; start coords
+ db 11, 19 ; end coords
+ dw MenuData2_0x4a36a
+ db 2 ; default option
+; 0x4a36a
+
+MenuData2_0x4a36a: ; 0x4a36a
+ db $e0 ; flags
+ db 2 ; items
+ db "はい@"
+ db "いいえ@"
+; 0x4a373
+
+Function4a373: ; 4a373 (12:6373)
+ ld hl, wcfa1
+ ld a, $4
+ ld [hli], a
+ ld a, $2
+ ld [hli], a
+ ld a, $3
+ ld [hli], a
+ ld a, $1
+ ld [hli], a
+ ld [hl], $0
+ set 5, [hl]
+ inc hl
+ xor a
+ ld [hli], a
+ ld a, $20
+ ld [hli], a
+ ld a, $1
+ add $40
+ add $80
+ add $2
+ ld [hli], a
+ ld a, $1
+rept 2
+ ld [hli], a
+endr
+ ret
+; 4a39a (12:639a)
+
+Function4a39a: ; 4a39a
+ call Function4a485
+ call Function4a492
+ call Function4a3aa
+ call SetPalettes
+ ret
+; 4a3a7
+
+Function4a3a7: ; 4a3a7 (12:63a7)
+ call Function4a485
+Function4a3aa: ; 4a3aa
+ hlcoord 0, 0
+ lb bc, 3, 1
+ xor a
+ call Function4a6d8
+ lb bc, 1, 1
+ ld a, $1
+ call Function4a6d8
+ lb bc, 1, 1
+ xor a
+ call Function4a6d8
+ lb bc, 1, 1
+ ld a, $1
+ call Function4a6d8
+ lb bc, 4, 1
+ ld a, $2
+ call Function4a6d8
+ lb bc, 1, 1
+ ld a, $3
+ call Function4a6d8
+ lb bc, 1, 1
+ ld a, " "
+ call Function4a6d8
+ hlcoord 1, 0
+ ld a, $1
+ lb bc, 3, 18
+ call Function4a6d8
+ lb bc, 1, 18
+ ld a, $0
+ call Function4a6d8
+ lb bc, 1, 18
+ ld a, $1
+ call Function4a6d8
+ lb bc, 1, 18
+ ld a, $2
+ call Function4a6d8
+ lb bc, 11, 18
+ ld a, " "
+ call Function4a6d8
+ hlcoord 19, 0
+ lb bc, 3, 1
+ ld a, $0
+ call Function4a6d8
+ lb bc, 1, 1
+ ld a, $1
+ call Function4a6d8
+ lb bc, 1, 1
+ xor a
+ call Function4a6d8
+ lb bc, 1, 1
+ ld a, $1
+ call Function4a6d8
+ lb bc, 4, 1
+ ld a, $2
+ call Function4a6d8
+ lb bc, 1, 1
+ ld a, $3
+ call Function4a6d8
+ lb bc, 1, 1
+ ld a, " "
+ call Function4a6d8
+ ret
+; 4a449 (12:6449)
+
+Function4a449: ; 4a449
+ ld bc, 3 * SCREEN_WIDTH
+ ld a, $0
+ hlcoord 0, 0
+ call ByteFill
+ ld bc, 2 * SCREEN_WIDTH
+ ld a, $1
+ call ByteFill
+ ld bc, 2 * SCREEN_WIDTH
+ ld a, $0
+ call ByteFill
+ ld bc, 2 * SCREEN_WIDTH
+ ld a, $1
+ call ByteFill
+ ld bc, SCREEN_WIDTH
+ ld a, $2
+ call ByteFill
+ ld bc, SCREEN_WIDTH
+ ld a, $3
+ call ByteFill
+ ld bc, SCREEN_WIDTH
+ ld a, " "
+ call ByteFill
+ ret
+; 4a485
+
+Function4a485: ; 4a485 (12:6485)
+ ld de, GFX_49c0c
+ ld hl, VTiles2 tile $00
+ lb bc, BANK(GFX_49c0c), $d
+ call Get2bpp
+ ret
+
+Function4a492: ; 4a492 (12:6492)
+ call Function4936e
+ ret
+
+
+MainMenu_MobileStudium: ; 4a496
+ ld a, [StartDay]
+ ld b, a
+ ld a, [StartHour]
+ ld c, a
+ ld a, [StartMinute]
+ ld d, a
+ ld a, [StartSecond]
+ ld e, a
+ push bc
+ push de
+ callba MobileStudium
+ call ClearBGPalettes
+ pop de
+ pop bc
+ ld a, b
+ ld [StartDay], a
+ ld a, c
+ ld [StartHour], a
+ ld a, d
+ ld [StartMinute], a
+ ld a, e
+ ld [StartSecond], a
+ ret
+; 4a4c4
+
+
+Function4a4c4: ; 4a4c4 (12:64c4)
+ call ClearBGPalettes
+ call Function4a3a7
+ call Function4a492
+ call Function4a680
+ call ClearBGPalettes
+ ld c, 20
+ call DelayFrames
+ hlcoord 2, 0
+ ld b, $a
+ ld c, $e
+ call Function48cdc
+ hlcoord 4, 2
+ ld de, String_4a5c5
+ call PlaceString
+ hlcoord 4, 4
+ ld de, String_4a5cd
+ call PlaceString
+ hlcoord 4, 6
+ ld de, String_4a5da
+ call PlaceString
+ hlcoord 4, 8
+ ld de, String_4a5e6
+ call PlaceString
+ hlcoord 4, 10
+ ld de, String_4a5f2
+ call PlaceString
+ hlcoord 0, 12
+ ld b, $4
+ ld c, $12
+ call TextBox
+ xor a
+ ld hl, Strings_4a5f6
+ ld d, h
+ ld e, l
+ hlcoord 1, 14
+ call PlaceString
+ ld a, $1
+ ld hl, Strings_4a5f6
+ call GetNthString
+ ld d, h
+ ld e, l
+ hlcoord 1, 16
+ call PlaceString
+ call Function3200
+ call SetPalettes
+ call Function1bc9
+ ld hl, MenuSelection2
+ ld b, [hl]
+ push bc
+ jr asm_4a54d
+
+Function4a545: ; 4a545 (12:6545)
+ call Function1bd3
+ ld hl, MenuSelection2
+ ld b, [hl]
+ push bc
+
+asm_4a54d: ; 4a54d (12:654d)
+ bit 0, a
+ jr nz, .asm_4a557
+ bit 1, a
+ jr nz, .asm_4a574
+ jr .asm_4a57e
+.asm_4a557
+ ld hl, MenuSelection2
+ ld a, [hl]
+ cp $1
+ jp z, Function4a6ab
+ cp $2
+ jp z, Function4a6ab
+ cp $3
+ jp z, Function4a6ab
+ cp $4
+ jp z, Function4a6ab
+ ld a, $1
+ call Function1ff8
+.asm_4a574
+ pop bc
+ call ClearBGPalettes
+ call ClearTileMap
+ jp Function49f0a
+.asm_4a57e
+ ld hl, MenuSelection2
+ ld a, [hl]
+ dec a
+ add a
+ push af
+ ld hl, Strings_4a5f6
+ call GetNthString
+ ld d, h
+ ld e, l
+ hlcoord 1, 13
+ ld b, $4
+ ld c, $12
+ call ClearBox
+ hlcoord 1, 14
+ call PlaceString
+ pop af
+ inc a
+ ld hl, Strings_4a5f6
+ call GetNthString
+ ld d, h
+ ld e, l
+ hlcoord 1, 16
+ call PlaceString
+ jp Function4a5b0
+
+Function4a5b0: ; 4a5b0 (12:65b0)
+ call Function4a680
+ pop bc
+ ld hl, MenuSelection2
+ ld [hl], b
+ ld b, $a
+ ld c, $1
+ hlcoord 3, 1
+ call ClearBox
+ jp Function4a545
+; 4a5c5 (12:65c5)
+
+String_4a5c5: ; 4a5c5
+ db "じこしょうかい@"
+String_4a5cd: ; 4a5cd
+ db "たいせん ", $4a, "はじまるとき@"
+String_4a5da: ; 4a5da
+ db "たいせん ", $1d, "かったとき@"
+String_4a5e6: ; 4a5e6
+ db "たいせん ", $1d, "まけたとき@"
+String_4a5f2: ; 4a5f2
+ db "もどる@"
+; 4a5f6
+
+Strings_4a5f6: ; 4a5f6
+ db "めいし や ニュース ", $1d, "のせる@"
+ db "あなた%あいさつです@"
+ db "モバイル たいせん", $4a, "はじまるとき@"
+ db "あいて", $1d, "みえる あいさつです@"
+ db "モバイル たいせんで かったとき@"
+ db "あいて", $1d, "みえる あいさつです@"
+ db "モバイル たいせんで まけたとき@"
+ db "あいて", $1d, "みえる あいさつです@"
+ db "まえ%がめん ", $1d, "もどります@"
+ db "@"
+; 4a680
+
+Function4a680: ; 4a680 (12:6680)
+ ld hl, wcfa1
+ ld a, $2
+ ld [hli], a
+ ld a, $3
+ ld [hli], a
+ ld a, $5
+ ld [hli], a
+ ld a, $1
+ ld [hli], a
+ ld [hl], $0
+ set 5, [hl]
+ inc hl
+ xor a
+ ld [hli], a
+ ld a, $20
+ ld [hli], a
+ ld a, $1
+ add $40
+ add $80
+ add $2
+ ld [hli], a
+ ld a, $1
+rept 2
+ ld [hli], a
+endr
+ xor a
+rept 3
+ ld [hli], a
+endr
+ ret
+
+Function4a6ab: ; 4a6ab (12:66ab)
+ ld a, $2
+ call Function1ff8
+ call ClearBGPalettes
+ ld b, SCGB_08
+ call GetSGBLayout
+ callba Function11c1ab
+ pop bc
+ call LoadFontsExtra
+ jp Function4a4c4
+
+Function4a6c5: ; 4a6c5 (12:66c5)
+ ld a, $5
+ ld [MusicFade], a
+ ld a, e
+ ld [MusicFadeIDLo], a
+ ld a, d
+ ld [MusicFadeIDHi], a
+ ld c, 22
+ call DelayFrames
+ ret
+
+Function4a6d8: ; 4a6d8 (12:66d8)
+ push bc
+ push hl
+.asm_4a6da
+ ld [hli], a
+ dec c
+ jr nz, .asm_4a6da
+ pop hl
+ ld bc, $14
+ add hl, bc
+ pop bc
+ dec b
+ jr nz, Function4a6d8
+ ret
diff --git a/engine/map_objects.asm b/engine/map_objects.asm
index 4c2adc9aa..13e4f73bf 100644
--- a/engine/map_objects.asm
+++ b/engine/map_objects.asm
@@ -2,45 +2,50 @@
INCLUDE "engine/facings.asm"
SpriteMovementData:: ; 4273
- ; function, facing, ?, ?, ?, ?
- db SPRITEMOVEFN_00, DOWN, $01, $02, $00, $00 ; 00
- db SPRITEMOVEFN_STANDING, DOWN, $01, $0c, $00, $00 ; 01
- db SPRITEMOVEFN_RANDOM_WALK_XY, DOWN, $01, $00, $00, $00 ; 02
- db SPRITEMOVEFN_SLOW_RANDOM_SPIN, DOWN, $01, $00, $00, $00 ; 03
- db SPRITEMOVEFN_RANDOM_WALK_Y, DOWN, $01, $00, $00, $00 ; 04
- db SPRITEMOVEFN_RANDOM_WALK_X, DOWN, $01, $00, $00, $00 ; 05
- db SPRITEMOVEFN_STANDING, DOWN, $01, $00, $00, $00 ; 06
- db SPRITEMOVEFN_STANDING, UP, $01, $00, $00, $00 ; 07
- db SPRITEMOVEFN_STANDING, LEFT, $01, $00, $00, $00 ; 08
- db SPRITEMOVEFN_STANDING, RIGHT, $01, $00, $00, $00 ; 09
- db SPRITEMOVEFN_FAST_RANDOM_SPIN, DOWN, $01, $00, $00, $00 ; 0a
- db SPRITEMOVEFN_OBEY_DPAD, DOWN, $01, $02, $00, $00 ; 0b
- db SPRITEMOVEFN_08, DOWN, $01, $00, $00, $00 ; 0c
- db SPRITEMOVEFN_09, DOWN, $01, $00, $00, $00 ; 0d
- db SPRITEMOVEFN_0A, DOWN, $01, $00, $00, $00 ; 0e
- db SPRITEMOVEFN_0B, DOWN, $01, $00, $00, $00 ; 0f
- db SPRITEMOVEFN_0C, DOWN, $01, $00, $00, $00 ; 10
- db SPRITEMOVEFN_0D, DOWN, $01, $00, $00, $00 ; 11
- db SPRITEMOVEFN_0E, DOWN, $01, $00, $00, $00 ; 12
- db SPRITEMOVEFN_FOLLOW, DOWN, $01, $02, $00, $00 ; 13
- db SPRITEMOVEFN_SCRIPTED, DOWN, $01, $02, $00, $00 ; 14
- db SPRITEMOVEFN_BIG_SNORLAX, DOWN, $09, $2e, $01, $c0 ; 15
- db SPRITEMOVEFN_BOUNCE, DOWN, $0a, $2e, $00, $00 ; 16
- db SPRITEMOVEFN_STANDING, DOWN, $01, $0c, $00, $00 ; 17
- db SPRITEMOVEFN_STANDING, DOWN, $01, $2e, $10, $00 ; 18
- db SPRITEMOVEFN_STRENGTH, DOWN, $01, $2e, $00, $40 ; 19
- db SPRITEMOVEFN_FOLLOWNOTEXACT, DOWN, $01, $02, $00, $00 ; 1a
- db SPRITEMOVEFN_13, DOWN, $00, $8e, $01, $00 ; 1b
- db SPRITEMOVEFN_14, DOWN, $08, $8e, $02, $00 ; 1c
- db SPRITEMOVEFN_17, DOWN, $00, $82, $00, $00 ; 1d
- db SPRITEMOVEFN_SPIN_COUNTERCLOCKWISE, LEFT, $01, $00, $00, $00 ; 1e
- db SPRITEMOVEFN_SPIN_CLOCKWISE, RIGHT, $01, $00, $00, $00 ; 1f
- db SPRITEMOVEFN_STRENGTH, DOWN, $0c, $2e, $01, $c0 ; 20
- db SPRITEMOVEFN_STRENGTH, DOWN, $0d, $2e, $01, $c0 ; 21
- db SPRITEMOVEFN_1A, DOWN, $0e, $8e, $01, $00 ; 22
- db SPRITEMOVEFN_1B, DOWN, $0f, $8e, $02, $00 ; 23
- db SPRITEMOVEFN_RANDOM_WALK_XY, DOWN, $01, $00, $00, $20 ; 24
- db SPRITEMOVEFN_00, DOWN, $01, $00, $00, $00 ; 25
+
+sprite_movement_data: macro
+ db \1, \2, \3, \4, \5
+ dn \6, 0
+ endm
+ ; function, facing, action, flags1, flags2, palette flags
+ sprite_movement_data SPRITEMOVEFN_00, DOWN, PERSON_ACTION_STAND, $02, $00, %0000 ; 00
+ sprite_movement_data SPRITEMOVEFN_STANDING, DOWN, PERSON_ACTION_STAND, $0c, $00, %0000 ; 01
+ sprite_movement_data SPRITEMOVEFN_RANDOM_WALK_XY, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 02
+ sprite_movement_data SPRITEMOVEFN_SLOW_RANDOM_SPIN, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 03
+ sprite_movement_data SPRITEMOVEFN_RANDOM_WALK_Y, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 04
+ sprite_movement_data SPRITEMOVEFN_RANDOM_WALK_X, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 05
+ sprite_movement_data SPRITEMOVEFN_STANDING, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 06
+ sprite_movement_data SPRITEMOVEFN_STANDING, UP, PERSON_ACTION_STAND, $00, $00, %0000 ; 07
+ sprite_movement_data SPRITEMOVEFN_STANDING, LEFT, PERSON_ACTION_STAND, $00, $00, %0000 ; 08
+ sprite_movement_data SPRITEMOVEFN_STANDING, RIGHT, PERSON_ACTION_STAND, $00, $00, %0000 ; 09
+ sprite_movement_data SPRITEMOVEFN_FAST_RANDOM_SPIN, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 0a
+ sprite_movement_data SPRITEMOVEFN_OBEY_DPAD, DOWN, PERSON_ACTION_STAND, $02, $00, %0000 ; 0b
+ sprite_movement_data SPRITEMOVEFN_08, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 0c
+ sprite_movement_data SPRITEMOVEFN_09, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 0d
+ sprite_movement_data SPRITEMOVEFN_0A, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 0e
+ sprite_movement_data SPRITEMOVEFN_0B, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 0f
+ sprite_movement_data SPRITEMOVEFN_0C, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 10
+ sprite_movement_data SPRITEMOVEFN_0D, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 11
+ sprite_movement_data SPRITEMOVEFN_0E, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 12
+ sprite_movement_data SPRITEMOVEFN_FOLLOW, DOWN, PERSON_ACTION_STAND, $02, $00, %0000 ; 13
+ sprite_movement_data SPRITEMOVEFN_SCRIPTED, DOWN, PERSON_ACTION_STAND, $02, $00, %0000 ; 14
+ sprite_movement_data SPRITEMOVEFN_BIG_SNORLAX, DOWN, PERSON_ACTION_09, $2e, $01, %1100 ; 15
+ sprite_movement_data SPRITEMOVEFN_BOUNCE, DOWN, PERSON_ACTION_0A, $2e, $00, %0000 ; 16
+ sprite_movement_data SPRITEMOVEFN_STANDING, DOWN, PERSON_ACTION_STAND, $0c, $00, %0000 ; 17
+ sprite_movement_data SPRITEMOVEFN_STANDING, DOWN, PERSON_ACTION_STAND, $2e, $10, %0000 ; 18
+ sprite_movement_data SPRITEMOVEFN_STRENGTH, DOWN, PERSON_ACTION_STAND, $2e, $00, %0100 ; 19
+ sprite_movement_data SPRITEMOVEFN_FOLLOWNOTEXACT, DOWN, PERSON_ACTION_STAND, $02, $00, %0000 ; 1a
+ sprite_movement_data SPRITEMOVEFN_SHADOW, DOWN, PERSON_ACTION_00, $8e, $01, %0000 ; 1b
+ sprite_movement_data SPRITEMOVEFN_EMOTE, DOWN, PERSON_ACTION_EMOTE, $8e, $02, %0000 ; 1c
+ sprite_movement_data SPRITEMOVEFN_SCREENSHAKE, DOWN, PERSON_ACTION_00, $82, $00, %0000 ; 1d
+ sprite_movement_data SPRITEMOVEFN_SPIN_COUNTERCLOCKWISE, LEFT, PERSON_ACTION_STAND, $00, $00, %0000 ; 1e
+ sprite_movement_data SPRITEMOVEFN_SPIN_CLOCKWISE, RIGHT, PERSON_ACTION_STAND, $00, $00, %0000 ; 1f
+ sprite_movement_data SPRITEMOVEFN_STRENGTH, DOWN, PERSON_ACTION_0C, $2e, $01, %1100 ; 20
+ sprite_movement_data SPRITEMOVEFN_STRENGTH, DOWN, PERSON_ACTION_0D, $2e, $01, %1100 ; 21
+ sprite_movement_data SPRITEMOVEFN_BOULDERDUST, DOWN, PERSON_ACTION_0E, $8e, $01, %0000 ; 22
+ sprite_movement_data SPRITEMOVEFN_GRASS, DOWN, PERSON_ACTION_0F, $8e, $02, %0000 ; 23
+ sprite_movement_data SPRITEMOVEFN_RANDOM_WALK_XY, DOWN, PERSON_ACTION_STAND, $00, $00, %0010 ; 24
+ sprite_movement_data SPRITEMOVEFN_00, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 25
; 4357
@@ -84,7 +89,7 @@ Function4386: ; 4386
res 6, [hl]
ld a, [XCoord]
ld e, a
- ld hl, OBJECT_MAP_X
+ ld hl, OBJECT_NEXT_MAP_X
add hl, bc
ld a, [hl]
add 1
@@ -94,7 +99,7 @@ Function4386: ; 4386
jr nc, .ok
ld a, [YCoord]
ld e, a
- ld hl, OBJECT_MAP_Y
+ ld hl, OBJECT_NEXT_MAP_Y
add hl, bc
ld a, [hl]
add 1
@@ -110,7 +115,7 @@ Function4386: ; 4386
set 6, [hl]
ld a, [XCoord]
ld e, a
- ld hl, OBJECT_20
+ ld hl, OBJECT_INIT_X
add hl, bc
ld a, [hl]
add 1
@@ -120,7 +125,7 @@ Function4386: ; 4386
jr nc, .ok2
ld a, [YCoord]
ld e, a
- ld hl, OBJECT_21
+ ld hl, OBJECT_INIT_Y
add hl, bc
ld a, [hl]
add 1
@@ -151,16 +156,18 @@ Function4386: ; 4386
; 43f3
Function43f3: ; 43f3
- ld hl, OBJECT_09
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
ld a, [hl]
and a
jr z, .zero
+
ld hl, OBJECT_FLAGS2
add hl, bc
bit 5, [hl]
jr nz, .bit5
- cp 1
+
+ cp STEP_TYPE_STANDING
jr z, .one
jr .ok
@@ -173,12 +180,13 @@ Function43f3: ; 43f3
.one
call Function47dd
- ld hl, OBJECT_09
+
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
ld a, [hl]
and a
ret z
- cp 1
+ cp STEP_TYPE_STANDING
ret z
.ok
@@ -193,13 +201,13 @@ Function43f3: ; 43f3
Function4427: ; 4427
ld hl, OBJECT_FLAGS1
add hl, bc
- bit 0, [hl]
- jr nz, Function44a3
+ bit INVISIBLE, [hl]
+ jr nz, SetFacingStanding
ld hl, OBJECT_FLAGS2
add hl, bc
bit 6, [hl]
- jr nz, Function44a3
+ jr nz, SetFacingStanding
bit 5, [hl]
jr nz, Function4448
@@ -211,18 +219,16 @@ Function4427: ; 4427
Function4440: ; 4440
ld hl, OBJECT_FLAGS1
add hl, bc
- bit 0, [hl]
- jr nz, Function44a3
- ; fallthrough
-; 4448
-
+ bit INVISIBLE, [hl]
+ jr nz, SetFacingStanding
Function4448: ; 4448
ld de, Pointers445f + 2
jr Function444d
; 444d
Function444d: ; 444d
- ld hl, OBJECT_11
+; call [4 * ObjectStructs[ObjInd, OBJECT_ACTION] + de]
+ ld hl, OBJECT_ACTION
add hl, bc
ld a, [hl]
ld l, a
@@ -239,52 +245,35 @@ endr
; 445f
Pointers445f: ; 445f
- dw Function44a3 ; 00
- dw Function44a3 ; 01
- dw Function44b5 ; 02
- dw Function44aa ; 03
- dw Function44c1 ; 04
- dw Function44aa ; 05
- dw Function4508 ; 06
- dw Function44aa ; 07
- dw Function4529 ; 08
- dw Function44aa ; 09
- dw Function4539 ; 0a
- dw Function44a3 ; 0b
- dw Function456e ; 0c
- dw Function456e ; 0d
- dw Function457b ; 0e
- dw Function44a3 ; 0f
- dw Function4582 ; 10
- dw Function4582 ; 11
- dw Function4589 ; 12
- dw Function4589 ; 13
- dw Function4590 ; 14
- dw Function45a4 ; 15
- dw Function45ab ; 16
- dw Function44aa ; 17
- dw Function45be ; 18
- dw Function45be ; 19
- dw Function45c5 ; 1a
- dw Function45c5 ; 1b
- dw Function45da ; 1c
- dw Function44a3 ; 1d
- dw Function45ed ; 1e
- dw Function44a3 ; 1f
- dw Function44e4 ; 20
- dw Function44aa ; 21
+ dw SetFacingStanding, SetFacingStanding ; 00
+ dw Function44b5, SetFacingCurrent ; 01 standing?
+ dw Function44c1, SetFacingCurrent ; 02 walking?
+ dw Function4508, SetFacingCurrent ; 03 bumping?
+ dw Function4529, SetFacingCurrent ; 04
+ dw Function4539, SetFacingStanding ; 05
+ dw Function456e, Function456e ; 06
+ dw Function457b, SetFacingStanding ; 07
+ dw Function4582, Function4582 ; 08
+ dw Function4589, Function4589 ; 09
+ dw Function4590, Function45a4 ; 0a
+ dw Function45ab, SetFacingCurrent ; 0c
+ dw Function45be, Function45be ; 0b
+ dw Function45c5, Function45c5 ; 0d
+ dw Function45da, SetFacingStanding ; 0e
+ dw Function45ed, SetFacingStanding ; 0f
+ dw Function44e4, SetFacingCurrent ; 10
; 44a3
-Function44a3: ; 44a3
+SetFacingStanding: ; 44a3
ld hl, OBJECT_FACING_STEP
add hl, bc
- ld [hl], -1
+ ld [hl], STANDING
ret
; 44aa
-Function44aa: ; 44aa
+SetFacingCurrent: ; 44aa
call GetSpriteDirection
- or 0
+ or 0 ; useless
ld hl, OBJECT_FACING_STEP
add hl, bc
ld [hl], a
@@ -297,26 +286,29 @@ Function44b5: ; 44b5
ld a, [hl]
and 1
jr nz, Function44c1
- jp Function44aa
+ jp SetFacingCurrent
; 44c1
Function44c1: ; 44c1
ld hl, OBJECT_FLAGS1
add hl, bc
- bit 3, [hl]
- jp nz, Function44aa
- ld hl, OBJECT_12
+ bit SLIDING, [hl]
+ jp nz, SetFacingCurrent
+
+ ld hl, OBJECT_STEP_FRAME
add hl, bc
ld a, [hl]
inc a
and %00001111
ld [hl], a
+
rrca
rrca
and %00000011
ld d, a
+
call GetSpriteDirection
- or 0
+ or 0 ; useless
or d
ld hl, OBJECT_FACING_STEP
add hl, bc
@@ -327,20 +319,23 @@ Function44c1: ; 44c1
Function44e4: ; 44e4
ld hl, OBJECT_FLAGS1
add hl, bc
- bit 3, [hl]
- jp nz, Function44aa
- ld hl, OBJECT_12
+ bit SLIDING, [hl]
+ jp nz, SetFacingCurrent
+
+ ld hl, OBJECT_STEP_FRAME
add hl, bc
ld a, [hl]
add 2
and %00001111
ld [hl], a
+
rrca
rrca
and %00000011
ld d, a
+
call GetSpriteDirection
- or 0
+ or 0 ; useless
or d
ld hl, OBJECT_FACING_STEP
add hl, bc
@@ -351,19 +346,22 @@ Function44e4: ; 44e4
Function4508: ; 4508
ld hl, OBJECT_FLAGS1
add hl, bc
- bit 3, [hl]
- jp nz, Function44aa
- ld hl, OBJECT_12
+ bit SLIDING, [hl]
+ jp nz, SetFacingCurrent
+
+ ld hl, OBJECT_STEP_FRAME
add hl, bc
inc [hl]
+
ld a, [hl]
rrca
rrca
rrca
and %00000011
ld d, a
+
call GetSpriteDirection
- or 0
+ or 0 ; useless
or d
ld hl, OBJECT_FACING_STEP
add hl, bc
@@ -376,7 +374,7 @@ Function4529: ; 4529
ld hl, OBJECT_FACING
add hl, bc
ld a, [hl]
- or 0
+ or 0 ; useless
ld hl, OBJECT_FACING_STEP
add hl, bc
ld [hl], a
@@ -385,21 +383,23 @@ Function4529: ; 4529
Function4539: ; 4539
call Function453f
- jp Function44a3
+ jp SetFacingStanding
; 453f
Function453f: ; 453f
- ld hl, OBJECT_12
+ ld hl, OBJECT_STEP_FRAME
add hl, bc
ld a, [hl]
and %11110000
ld e, a
+
ld a, [hl]
inc a
and %00001111
ld d, a
cp 4
jr c, .ok
+
ld d, 0
ld a, e
add $10
@@ -410,6 +410,7 @@ Function453f: ; 453f
ld a, d
or e
ld [hl], a
+
swap e
ld d, 0
ld hl, .Directions
@@ -422,7 +423,7 @@ Function453f: ; 453f
; 456a
.Directions ; 456a
- db DOWN << 2, RIGHT << 2, UP << 2, LEFT << 2
+ db OW_DOWN, OW_RIGHT, OW_UP, OW_LEFT
; 456e
Function456e: ; 456e
@@ -439,26 +440,26 @@ Function456e: ; 456e
Function457b: ; 457b
ld hl, OBJECT_FACING_STEP
add hl, bc
- ld [hl], $15
+ ld [hl], FACING_15
ret
; 4582
-Function4582: ; 4582
+Function4582: ; 4582 emote
ld hl, OBJECT_FACING_STEP
add hl, bc
- ld [hl], $14
+ ld [hl], FACING_EMOTE
ret
; 4589
Function4589: ; 4589
ld hl, OBJECT_FACING_STEP
add hl, bc
- ld [hl], $17
+ ld [hl], FACING_17
ret
; 4590
Function4590: ; 4590
- ld hl, OBJECT_12
+ ld hl, OBJECT_STEP_FRAME
add hl, bc
ld a, [hl]
inc a
@@ -468,7 +469,7 @@ Function4590: ; 4590
jr z, Function45a4
ld hl, OBJECT_FACING_STEP
add hl, bc
- ld [hl], $4
+ ld [hl], FACING_04
ret
; 45a4
@@ -480,7 +481,7 @@ Function45a4: ; 45a4
; 45ab
Function45ab: ; 45ab
- ld hl, OBJECT_12
+ ld hl, OBJECT_STEP_FRAME
add hl, bc
ld a, [hl]
inc a
@@ -498,18 +499,18 @@ Function45ab: ; 45ab
Function45be: ; 45be
ld hl, OBJECT_FACING_STEP
add hl, bc
- ld [hl], $16
+ ld [hl], FACING_16
ret
; 45c5
Function45c5: ; 45c5
ld a, [VariableSprites + SPRITE_BIG_DOLL - SPRITE_VARS]
- ld d, $17
+ ld d, FACING_17
cp SPRITE_BIG_SNORLAX
jr z, .ok
cp SPRITE_BIG_LAPRAS
jr z, .ok
- ld d, $16
+ ld d, FACING_16
.ok
ld hl, OBJECT_FACING_STEP
@@ -519,7 +520,7 @@ Function45c5: ; 45c5
; 45da
Function45da: ; 45da
- ld hl, OBJECT_12
+ ld hl, OBJECT_STEP_FRAME
add hl, bc
inc [hl]
ld a, [hl]
@@ -527,25 +528,25 @@ Function45da: ; 45da
ld hl, OBJECT_FACING_STEP
add hl, bc
and 2
- ld a, $1c
+ ld a, FACING_1C
jr z, .ok
- inc a
+ inc a ; FACING_1D
.ok
ld [hl], a
ret
; 45ed
Function45ed: ; 45ed
- ld hl, OBJECT_12
+ ld hl, OBJECT_STEP_FRAME
add hl, bc
inc [hl]
ld a, [hl]
ld hl, OBJECT_FACING_STEP
add hl, bc
and 4
- ld a, $1e
+ ld a, FACING_1E
jr z, .ok
- inc a
+ inc a ; FACING_1F
.ok
ld [hl], a
@@ -554,49 +555,49 @@ Function45ed: ; 45ed
Function4600: ; 4600
- ld hl, OBJECT_MAP_X
+ ld hl, OBJECT_NEXT_MAP_X
add hl, bc
ld a, [hl]
- ld hl, OBJECT_NEXT_MAP_X
+ ld hl, OBJECT_MAP_X
add hl, bc
ld [hl], a
- ld hl, OBJECT_MAP_Y
+ ld hl, OBJECT_NEXT_MAP_Y
add hl, bc
ld a, [hl]
- ld hl, OBJECT_NEXT_MAP_Y
+ ld hl, OBJECT_MAP_Y
add hl, bc
ld [hl], a
- ld hl, OBJECT_STANDING_TILE
+ ld hl, OBJECT_NEXT_TILE
add hl, bc
ld a, [hl]
- ld hl, OBJECT_NEXT_TILE
+ ld hl, OBJECT_STANDING_TILE
add hl, bc
ld [hl], a
- call Function4661
- ld hl, OBJECT_STANDING_TILE
+ call SetTallGrassFlags
+ ld hl, OBJECT_NEXT_TILE
add hl, bc
ld a, [hl]
- call Function4679
+ call UselessAndA
ret
; 462a
Function462a: ; 462a
- ld hl, OBJECT_NEXT_MAP_X
+ ld hl, OBJECT_MAP_X
add hl, bc
ld a, [hl]
- ld hl, OBJECT_MAP_X
+ ld hl, OBJECT_NEXT_MAP_X
add hl, bc
ld [hl], a
- ld hl, OBJECT_NEXT_MAP_Y
+ ld hl, OBJECT_MAP_Y
add hl, bc
ld a, [hl]
- ld hl, OBJECT_MAP_Y
+ ld hl, OBJECT_NEXT_MAP_Y
add hl, bc
ld [hl], a
@@ -606,30 +607,30 @@ Function462a: ; 462a
Function463f: ; 463f
ld hl, OBJECT_FLAGS2
add hl, bc
- bit 3, [hl]
+ bit 3, [hl] ; is current tile grass?
jr z, .ok
- ld hl, OBJECT_STANDING_TILE
+ ld hl, OBJECT_NEXT_TILE
add hl, bc
ld a, [hl]
- call Function4661
+ call SetTallGrassFlags
.ok
- ld hl, OBJECT_STANDING_TILE
+ ld hl, OBJECT_NEXT_TILE
add hl, bc
ld a, [hl]
- call Function4679
- ret c
- ld hl, OBJECT_NEXT_TILE
+ call UselessAndA
+ ret c ; never happens
+ ld hl, OBJECT_STANDING_TILE
add hl, bc
ld a, [hl]
- call Function4679
+ call UselessAndA
ret
; 4661
-Function4661: ; 4661
+SetTallGrassFlags: ; 4661
call CheckSuperTallGrassTile
jr z, .set
- call Function1875
+ call CheckGrassTile
jr c, .reset
.set
@@ -645,14 +646,14 @@ Function4661: ; 4661
ret
; 4679
-Function4679: ; 4679
+UselessAndA: ; 4679
and a
ret
; 467b
Function467b: ; 467b
xor a
- ld hl, OBJECT_12
+ ld hl, OBJECT_STEP_FRAME
add hl, bc
ld [hl], a
ld hl, OBJECT_MOVEMENT_BYTE_INDEX
@@ -660,7 +661,7 @@ Function467b: ; 467b
rept 3
ld [hli], a
endr
- ld [hl], a
+ ld [hl], a ; OBJECT_30
ld hl, OBJECT_DIRECTION_WALKING
add hl, bc
ld [hl], STANDING
@@ -673,8 +674,8 @@ Function4690: ; 4690
ld [hl], a
ld hl, OBJECT_FLAGS1
add hl, bc
- bit 2, [hl]
- jr nz, .ok
+ bit FIXED_FACING, [hl]
+ jr nz, GetNextTile
rept 2
add a
@@ -684,12 +685,7 @@ endr
add hl, bc
ld [hl], a
-.ok
- ; fallthrough
-; 46a6
-
-Function46a6: ; 46a6
-
+GetNextTile: ; 46a6
call GetStepVector
ld hl, OBJECT_STEP_DURATION
@@ -697,37 +693,37 @@ Function46a6: ; 46a6
ld [hl], a
ld a, d
- call Function4730
- ld hl, OBJECT_NEXT_MAP_X
+ call GetStepVectorSign
+ ld hl, OBJECT_MAP_X
add hl, bc
add [hl]
- ld hl, OBJECT_MAP_X
+ ld hl, OBJECT_NEXT_MAP_X
add hl, bc
ld [hl], a
ld d, a
ld a, e
- call Function4730
- ld hl, OBJECT_NEXT_MAP_Y
+ call GetStepVectorSign
+ ld hl, OBJECT_MAP_Y
add hl, bc
add [hl]
- ld hl, OBJECT_MAP_Y
+ ld hl, OBJECT_NEXT_MAP_Y
add hl, bc
ld [hl], a
ld e, a
push bc
- call Function2a3c
+ call GetCoordTile
pop bc
- ld hl, OBJECT_STANDING_TILE
+ ld hl, OBJECT_NEXT_TILE
add hl, bc
ld [hl], a
ret
; 46d7
-Function46d7: ; 46d7
+AddStepVector: ; 46d7
call GetStepVector
@@ -787,13 +783,15 @@ StepVectors: ; 4700
db 4, 0, 4, 4
; 4730
-Function4730: ; 4730
+GetStepVectorSign: ; 4730
add a
- ret z
+ ret z ; 0 or 128
+
ld a, 1
- ret nc
+ ret nc ; 1 - 127
+
ld a, -1
- ret
+ ret ; 129 - 255
; 4738
Function4738: ; 4738
@@ -801,15 +799,15 @@ Function4738: ; 4738
add hl, bc
ld a, [hl]
and %00000011
- ld [wd151], a
- call Function46d7
- ld a, [wd14e]
+ ld [wPlayerStepDirection], a
+ call AddStepVector
+ ld a, [wPlayerStepVectorX]
add d
- ld [wd14e], a
- ld a, [wd14f]
+ ld [wPlayerStepVectorX], a
+ ld a, [wPlayerStepVectorY]
add e
- ld [wd14f], a
- ld hl, wd150
+ ld [wPlayerStepVectorY], a
+ ld hl, wPlayerStepFlags
set 5, [hl]
ret
; 4759
@@ -847,28 +845,28 @@ RestoreDefaultMovement: ; 4769
ret
; 4780
-ClearObjectStructField27: ; 4780
+ClearObjectMovementByteIndex: ; 4780
ld hl, OBJECT_MOVEMENT_BYTE_INDEX
add hl, bc
ld [hl], 0
ret
; 4787
-IncrementObjectStructField27: ; 4787
+IncrementObjectMovementByteIndex: ; 4787
ld hl, OBJECT_MOVEMENT_BYTE_INDEX
add hl, bc
inc [hl]
ret
; 478d
-DecrementObjectStructField27: ; 478d
+DecrementObjectMovementByteIndex: ; 478d
ld hl, OBJECT_MOVEMENT_BYTE_INDEX
add hl, bc
dec [hl]
ret
; 4793
-JumptoObjectStructField27: ; 4793
+MovementAnonymousJumptable: ; 4793
ld hl, OBJECT_MOVEMENT_BYTE_INDEX
add hl, bc
ld a, [hl]
@@ -891,7 +889,8 @@ IncrementObjectStructField28: ; 47a2
ret
; 47a8
-JumptoObjectStructField28: ; 47a8
+Object28AnonymousJumptable: ; 47a8
+; anonymous jumptable
ld hl, OBJECT_28
add hl, bc
ld a, [hl]
@@ -915,23 +914,23 @@ SetValueObjectStructField28: ; 47b6
; 47bc
Function47bc: ; 47bc
- ld hl, OBJECT_MAP_X
+ ld hl, OBJECT_NEXT_MAP_X
add hl, bc
ld d, [hl]
- ld hl, OBJECT_MAP_Y
+ ld hl, OBJECT_NEXT_MAP_Y
add hl, bc
ld e, [hl]
push bc
- call Function2a3c
+ call GetCoordTile
pop bc
- ld hl, OBJECT_STANDING_TILE
+ ld hl, OBJECT_NEXT_TILE
add hl, bc
ld [hl], a
call Function4600
call Function467b
- ld hl, OBJECT_09
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], 1
+ ld [hl], STEP_TYPE_STANDING
ret
; 47dd
@@ -964,15 +963,15 @@ Function47dd: ; 47dd
dw .Script ; 10
dw .Strength ; 11
dw .FollowNotExact ; 12
- dw .Movement13 ; 13
- dw .Movement14 ; 14
+ dw .MovementShadow ; 13
+ dw .MovementEmote ; 14
dw .MovementBigStanding ; 15
dw .MovementBouncing ; 16
- dw .Movement17 ; 17
+ dw .MovementScreenShake ; 17
dw .MovementSpinClockwise ; 18
dw .MovementSpinCounterclockwise ; 19
- dw .Movement1a ; 1a
- dw .Movement1b ; 1b
+ dw .MovementBoulderDust ; 1a
+ dw .MovementShakingGrass ; 1b
; 4821
.Null_00: ; 4821
@@ -1008,7 +1007,7 @@ Function47dd: ; 47dd
ld hl, OBJECT_FACING
add hl, bc
ld [hl], a
- jp Function4b1d
+ jp RandomStepDuration_Slow
; 4851
.RandomSpin2: ; 4851
@@ -1026,18 +1025,18 @@ Function47dd: ; 47dd
.keep
ld [hl], a
- jp Function4b26
+ jp RandomStepDuration_Fast
; 4869
.Standing: ; 4869
call Function462a
call Function467b
- ld hl, OBJECT_11
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], 1
- ld hl, OBJECT_09
+ ld [hl], PERSON_ACTION_STAND
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], 5
+ ld [hl], STEP_TYPE_05
ret
; 487c
@@ -1088,13 +1087,13 @@ Function47dd: ; 47dd
; 48ac
.Strength: ; 48ac
- call JumptoObjectStructField27
+ call MovementAnonymousJumptable
dw .Strength_Start
dw .Strength_Stop
; 48b3
.Strength_Start: ; 48b3
- ld hl, OBJECT_STANDING_TILE
+ ld hl, OBJECT_NEXT_TILE
add hl, bc
ld a, [hl]
call CheckPitTile
@@ -1106,7 +1105,7 @@ Function47dd: ; 47dd
res 2, [hl]
jr z, .ok
- ld hl, OBJECT_32
+ ld hl, OBJECT_RANGE
add hl, bc
ld a, [hl]
and %00000011
@@ -1117,11 +1116,11 @@ Function47dd: ; 47dd
ld de, SFX_STRENGTH
call PlaySFX
- call Function5538
+ call SpawnStrengthBoulderDust
call Function463f
- ld hl, OBJECT_09
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $f
+ ld [hl], STEP_TYPE_0F
ret
.ok2
@@ -1134,9 +1133,7 @@ Function47dd: ; 47dd
ret
.on_pit
- call IncrementObjectStructField27
- ; fallthrough
-; 48f8
+ call IncrementObjectMovementByteIndex
.Strength_Stop: ; 48f8
ld hl, OBJECT_DIRECTION_WALKING
@@ -1146,15 +1143,15 @@ Function47dd: ; 47dd
; 48ff
.FollowNotExact: ; 48ff
- ld hl, OBJECT_MAP_X
+ ld hl, OBJECT_NEXT_MAP_X
add hl, bc
ld d, [hl]
- ld hl, OBJECT_MAP_Y
+ ld hl, OBJECT_NEXT_MAP_Y
add hl, bc
ld e, [hl]
- ld hl, OBJECT_32
+ ld hl, OBJECT_RANGE
add hl, bc
ld a, [hl]
@@ -1166,7 +1163,7 @@ Function47dd: ; 47dd
cp STANDING
jr z, .standing
- ld hl, OBJECT_NEXT_MAP_X
+ ld hl, OBJECT_MAP_X
add hl, bc
ld a, [hl]
cp d
@@ -1180,7 +1177,7 @@ Function47dd: ; 47dd
jr .done
.equal
- ld hl, OBJECT_NEXT_MAP_Y
+ ld hl, OBJECT_MAP_Y
add hl, bc
ld a, [hl]
cp e
@@ -1207,9 +1204,9 @@ Function47dd: ; 47dd
ld hl, OBJECT_DIRECTION_WALKING
add hl, bc
ld [hl], STANDING
- ld hl, OBJECT_11
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], 1
+ ld [hl], PERSON_ACTION_STAND
ret
; 4958
@@ -1218,12 +1215,12 @@ Function47dd: ; 47dd
ld hl, OBJECT_DIRECTION_WALKING
add hl, bc
ld [hl], STANDING
- ld hl, OBJECT_11
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], 9
- ld hl, OBJECT_09
+ ld [hl], PERSON_ACTION_09
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], 4
+ ld [hl], STEP_TYPE_04
ret
; 496e
@@ -1232,24 +1229,24 @@ Function47dd: ; 47dd
ld hl, OBJECT_DIRECTION_WALKING
add hl, bc
ld [hl], STANDING
- ld hl, OBJECT_11
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], 10
- ld hl, OBJECT_09
+ ld [hl], PERSON_ACTION_0A
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], 4
+ ld [hl], STEP_TYPE_04
ret
; 4984
.MovementSpinCounterclockwise: ; 4984
- call JumptoObjectStructField27
+ call MovementAnonymousJumptable
dw .MovementSpinInit
dw .MovementSpinRepeat
dw .MovementSpinTurnLeft
; 498d
.MovementSpinClockwise: ; 498d
- call JumptoObjectStructField27
+ call MovementAnonymousJumptable
dw .MovementSpinInit
dw .MovementSpinRepeat
dw .MovementSpinTurnRight
@@ -1257,25 +1254,22 @@ Function47dd: ; 47dd
.MovementSpinInit: ; 4996
call Function467b
- call IncrementObjectStructField27
- ; fallthrough
-; 499c
-
+ call IncrementObjectMovementByteIndex
.MovementSpinRepeat: ; 499c
- ld hl, OBJECT_11
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], 1
- ld hl, OBJECT_32
+ ld [hl], PERSON_ACTION_STAND
+ ld hl, OBJECT_RANGE
add hl, bc
ld a, [hl]
ld a, $10
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], a
- ld hl, OBJECT_09
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], 3
- call IncrementObjectStructField27
+ ld [hl], STEP_TYPE_03
+ call IncrementObjectMovementByteIndex
ret
; 49b8
@@ -1286,7 +1280,7 @@ Function47dd: ; 47dd
; 49c0
.DirectionData_Counterclockwise ; 49c0
- db RIGHT << 2, LEFT << 2, DOWN << 2, UP << 2
+ db OW_RIGHT, OW_LEFT, OW_DOWN, OW_UP
; 49c4
.MovementSpinTurnRight: ; 49c4
@@ -1296,7 +1290,7 @@ Function47dd: ; 47dd
; 49cc
.DirectionData_Clockwise ; 49cc
- db LEFT << 2, RIGHT << 2, UP << 2, DOWN << 2
+ db OW_LEFT, OW_RIGHT, OW_UP, OW_DOWN
; 49d0
.MovementSpinNextFacing: ; 49d0
@@ -1313,15 +1307,15 @@ Function47dd: ; 47dd
ld a, [hl]
pop hl
ld [hl], a
- call DecrementObjectStructField27
+ call DecrementObjectMovementByteIndex
ret
; 49e5
-.Movement13: ; 49e5
- call ._Movement13_14_1a_1b
- ld hl, OBJECT_11
+.MovementShadow: ; 49e5
+ call ._MovementShadow_Grass_Emote_BoulderDust
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], $7
+ ld [hl], PERSON_ACTION_07
ld hl, OBJECT_STEP_DURATION
add hl, de
ld a, [hl]
@@ -1349,39 +1343,39 @@ Function47dd: ; 47dd
ld hl, OBJECT_SPRITE_X_OFFSET
add hl, bc
ld [hl], 0
- ld hl, OBJECT_09
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $13
+ ld [hl], STEP_TYPE_13
ret
; 4a21
-.Movement14: ; 4a21
+.MovementEmote: ; 4a21
call Function467b
- call ._Movement13_14_1a_1b
- ld hl, OBJECT_11
+ call ._MovementShadow_Grass_Emote_BoulderDust
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], 8
+ ld [hl], PERSON_ACTION_EMOTE
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], 0
ld hl, OBJECT_SPRITE_Y_OFFSET
add hl, bc
- ld [hl], $f0
+ ld [hl], -$10
ld hl, OBJECT_SPRITE_X_OFFSET
add hl, bc
ld [hl], 0
- ld hl, OBJECT_09
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $13
+ ld [hl], STEP_TYPE_13
ret
; 4a46
-.Movement1a: ; 4a46
+.MovementBoulderDust: ; 4a46
call Function467b
- call ._Movement13_14_1a_1b
- ld hl, OBJECT_11
+ call ._MovementShadow_Grass_Emote_BoulderDust
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], $e
+ ld [hl], PERSON_ACTION_0E
ld hl, OBJECT_STEP_DURATION
add hl, de
ld a, [hl]
@@ -1409,9 +1403,9 @@ endr
ld hl, OBJECT_SPRITE_Y_OFFSET
add hl, bc
ld [hl], e
- ld hl, OBJECT_09
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $13
+ ld [hl], STEP_TYPE_13
ret
; 4a81
@@ -1423,12 +1417,12 @@ endr
db -6, 2
; 4a89
-.Movement1b: ; 4a89
+.MovementShakingGrass: ; 4a89
call Function467b
- call ._Movement13_14_1a_1b
- ld hl, OBJECT_11
+ call ._MovementShadow_Grass_Emote_BoulderDust
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], $f
+ ld [hl], PERSON_ACTION_0F
ld hl, OBJECT_STEP_DURATION
add hl, de
ld a, [hl]
@@ -1436,14 +1430,14 @@ endr
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], a
- ld hl, OBJECT_09
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $13
+ ld [hl], STEP_TYPE_13
ret
; 4aa8
-._Movement13_14_1a_1b: ; 4aa8
- ld hl, OBJECT_32
+._MovementShadow_Grass_Emote_BoulderDust: ; 4aa8
+ ld hl, OBJECT_RANGE
add hl, bc
ld a, [hl]
push bc
@@ -1459,28 +1453,28 @@ endr
ret
; 4abc
-.Movement17: ; 4abc
+.MovementScreenShake: ; 4abc
call Function467b
- ld hl, OBJECT_11
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], 0
- ld hl, OBJECT_32
+ ld [hl], PERSON_ACTION_00
+ ld hl, OBJECT_RANGE
add hl, bc
ld a, [hl]
- call ._Movement17
+ call ._MovementScreenShake
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], e
ld hl, OBJECT_30
add hl, bc
ld [hl], a
- ld hl, OBJECT_09
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $15
+ ld [hl], STEP_TYPE_15
ret
; 4ade
-._Movement17: ; 4ade
+._MovementScreenShake: ; 4ade
ld d, a
and %00111111
ld e, a
@@ -1500,90 +1494,88 @@ endr
.RandomWalkContinue: ; 4af0
call Function4690
- call Function6ec1
- jr c, Function4b17
+ call Function6ec1 ; check whether the object can move in that direction
+ jr c, .NewDuration
+
call Function463f
- ld hl, OBJECT_11
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], 2
- ld hl, wd4cf
+ ld [hl], PERSON_ACTION_STEP
+
+ ld hl, wCenteredObject
ld a, [hMapObjectIndexBuffer]
cp [hl]
jr z, .load_6
- ld hl, OBJECT_09
+
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], 7
+ ld [hl], STEP_TYPE_07
ret
.load_6
- ld hl, OBJECT_09
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], 6
+ ld [hl], STEP_TYPE_PLAYER_WALK
ret
-Function4b17: ; 4b17
+.NewDuration: ; 4b17
call Function467b
call Function462a
- ; fallthrough
-; 4b1d
-
-Function4b1d: ; 4b1d
+RandomStepDuration_Slow: ; 4b1d
call Random
ld a, [hRandomAdd]
and %01111111
- jr Function4b2d
+ jr SetRandomStepDuration
; 4b26
-Function4b26: ; 4b26
+RandomStepDuration_Fast: ; 4b26
call Random
ld a, [hRandomAdd]
and %00011111
- ; fallthrough
-; 4b2d
-
-Function4b2d: ; 4b2d
+SetRandomStepDuration: ; 4b2d
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], a
ld hl, OBJECT_DIRECTION_WALKING
add hl, bc
ld [hl], STANDING
- ld hl, OBJECT_11
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], 1
- ld hl, OBJECT_09
+ ld [hl], PERSON_ACTION_STAND
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], 3
+ ld [hl], STEP_TYPE_03
ret
; 4b45
Pointers4b45: ; 4b45
- dw Function47bc
- dw Function47dd
- dw Function4e2b
- dw Function4ddd
- dw Function4e21
- dw Function4e0c
- dw Function4e56
- dw Function4e47
- dw Function4b86
- dw Function4bbf
- dw Function4e83
- dw Function4dff
- dw Function4c18
- dw Function4c89
- dw Function4d14
- dw Function4ecd
- dw Function4d7e
- dw Function4daf
- dw Function4dc8
- dw Function4f04
- dw Function4f33
- dw Function4f33
- dw Function4f77
- dw Function4f7a
- dw Function4df0
- dw Function4f83
+; These pointers use OBJECT_STEP_TYPE. See constants/sprite_constants.asm
+ dw Function47bc ; 00
+ dw Function47dd ; 01
+ dw Function4e2b ; 02 npc walk
+ dw Function4ddd ; 03
+ dw Function4e21 ; 04
+ dw Function4e0c ; 05
+ dw Function4e56 ; 06 player walk
+ dw Function4e47 ; 07
+ dw Function4b86 ; 08 npc jump step
+ dw Function4bbf ; 09 player jump step
+ dw Function4e83 ; 0a half step
+ dw Function4dff ; 0b
+ dw Function4c18 ; 0c teleport from
+ dw Function4c89 ; 0d teleport to
+ dw Function4d14 ; 0e skyfall
+ dw Function4ecd ; 0f
+ dw Function4d7e ; 10
+ dw Function4daf ; 11
+ dw Function4dc8 ; 12
+ dw Function4f04 ; 13
+ dw Function4f33 ; 14
+ dw Function4f33 ; 15
+ dw Function4f77 ; 16
+ dw Function4f7a ; 17
+ dw Function4df0 ; 18
+ dw Function4f83 ; 19
; 4b79
Function4b79: ; 4b79
@@ -1591,27 +1583,28 @@ Function4b79: ; 4b79
add hl, bc
dec [hl]
ret nz
- ld hl, OBJECT_09
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], 1
+ ld [hl], STEP_TYPE_STANDING
ret
; 4b86
Function4b86: ; 4b86
- call JumptoObjectStructField28
+ call Object28AnonymousJumptable
+; anonymous jumptable
dw Function4b8d
dw Function4ba9
; 4b8d
Function4b8d: ; 4b8d
- call Function46d7
+ call AddStepVector
call UpdateJumpPosition
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
ret nz
call Function4600
- call Function46a6
+ call GetNextTile
ld hl, OBJECT_FLAGS2
add hl, bc
res 3, [hl]
@@ -1620,21 +1613,22 @@ Function4b8d: ; 4b8d
; 4ba9
Function4ba9: ; 4ba9
- call Function46d7
+ call AddStepVector
call UpdateJumpPosition
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
ret nz
call Function4600
- ld hl, OBJECT_09
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], 1
+ ld [hl], STEP_TYPE_STANDING
ret
; 4bbf
Function4bbf: ; 4bbf
- call JumptoObjectStructField28
+ call Object28AnonymousJumptable
+; anonymous jumptable
dw Function4bca
dw Function4bd2
dw Function4bf2
@@ -1642,12 +1636,9 @@ Function4bbf: ; 4bbf
; 4bca
Function4bca: ; 4bca
- ld hl, wd150
+ ld hl, wPlayerStepFlags
set 7, [hl]
call IncrementObjectStructField28
-; fallthrough
-; 4bd2
-
Function4bd2: ; 4bd2
call UpdateJumpPosition
call Function4738
@@ -1659,7 +1650,7 @@ Function4bd2: ; 4bd2
ld hl, OBJECT_FLAGS2
add hl, bc
res 3, [hl]
- ld hl, wd150
+ ld hl, wPlayerStepFlags
set 6, [hl]
set 4, [hl]
call IncrementObjectStructField28
@@ -1667,13 +1658,10 @@ Function4bd2: ; 4bd2
; 4bf2
Function4bf2: ; 4bf2
- call Function46a6
- ld hl, wd150
+ call GetNextTile
+ ld hl, wPlayerStepFlags
set 7, [hl]
call IncrementObjectStructField28
-; fallthrough
-; 4bfd
-
Function4bfd: ; 4bfd
call UpdateJumpPosition
call Function4738
@@ -1681,17 +1669,18 @@ Function4bfd: ; 4bfd
add hl, bc
dec [hl]
ret nz
- ld hl, wd150
+ ld hl, wPlayerStepFlags
set 6, [hl]
call Function4600
- ld hl, OBJECT_09
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], 1
+ ld [hl], STEP_TYPE_STANDING
ret
; 4c18
Function4c18: ; 4c18
- call JumptoObjectStructField28
+ call Object28AnonymousJumptable
+; anonymous jumptable
dw Function4c23
dw Function4c32
dw Function4c42
@@ -1699,20 +1688,17 @@ Function4c18: ; 4c18
; 4c23
Function4c23: ; 4c23
- ld hl, OBJECT_12
+ ld hl, OBJECT_STEP_FRAME
add hl, bc
ld [hl], 0
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], $10
call IncrementObjectStructField28
-; fallthrough
-; 4c32
-
Function4c32: ; 4c32
- ld hl, OBJECT_11
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], 4
+ ld [hl], PERSON_ACTION_SPIN
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
@@ -1722,7 +1708,7 @@ Function4c32: ; 4c32
; 4c42
Function4c42: ; 4c42
- ld hl, OBJECT_12
+ ld hl, OBJECT_STEP_FRAME
add hl, bc
ld [hl], 0
ld hl, OBJECT_31
@@ -1735,13 +1721,10 @@ Function4c42: ; 4c42
add hl, bc
res 3, [hl]
call IncrementObjectStructField28
-; fallthrough
-; 4c5d
-
Function4c5d: ; 4c5d
- ld hl, OBJECT_11
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], 4
+ ld [hl], PERSON_ACTION_SPIN
ld hl, OBJECT_31
add hl, bc
inc [hl]
@@ -1757,17 +1740,18 @@ Function4c5d: ; 4c5d
add hl, bc
dec [hl]
ret nz
- ld hl, OBJECT_12
+ ld hl, OBJECT_STEP_FRAME
add hl, bc
ld [hl], 0
- ld hl, OBJECT_09
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], 1
+ ld [hl], STEP_TYPE_STANDING
ret
; 4c89
Function4c89: ; 4c89
- call JumptoObjectStructField28
+ call Object28AnonymousJumptable
+; anonymous jumptable
dw Function4c9a
dw Function4caa
dw Function4cb3
@@ -1778,9 +1762,9 @@ Function4c89: ; 4c89
; 4c9a
Function4c9a: ; 4c9a
- ld hl, OBJECT_11
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], 0
+ ld [hl], PERSON_ACTION_00
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], $10
@@ -1794,11 +1778,8 @@ Function4caa: ; 4caa
dec [hl]
ret nz
call IncrementObjectStructField28
-; fallthrough
-; 4cb3
-
Function4cb3: ; 4cb3
- ld hl, OBJECT_12
+ ld hl, OBJECT_STEP_FRAME
add hl, bc
ld [hl], 0
ld hl, OBJECT_31
@@ -1812,9 +1793,9 @@ Function4cb3: ; 4cb3
; 4cc9
Function4cc9: ; 4cc9
- ld hl, OBJECT_11
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], 4
+ ld [hl], PERSON_ACTION_SPIN
ld hl, OBJECT_31
add hl, bc
inc [hl]
@@ -1831,9 +1812,6 @@ Function4cc9: ; 4cc9
dec [hl]
ret nz
call IncrementObjectStructField28
-; fallthrough
-; 4ceb
-
Function4ceb: ; 4ceb
ld hl, OBJECT_STEP_DURATION
add hl, bc
@@ -1843,30 +1821,29 @@ Function4ceb: ; 4ceb
; 4cf5
Function4cf5: ; 4cf5
- ld hl, OBJECT_11
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], 4
+ ld [hl], PERSON_ACTION_SPIN
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
ret nz
-; 4d01
-
Function4d01: ; 4d01
- ld hl, OBJECT_12
+ ld hl, OBJECT_STEP_FRAME
add hl, bc
ld [hl], 0
ld hl, OBJECT_SPRITE_Y_OFFSET
add hl, bc
ld [hl], 0
- ld hl, OBJECT_09
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], 1
+ ld [hl], STEP_TYPE_STANDING
ret
; 4d14
Function4d14: ; 4d14
- call JumptoObjectStructField28
+ call Object28AnonymousJumptable
+; anonymous jumptable
dw Function4d1f
dw Function4d2e
dw Function4d4f
@@ -1874,25 +1851,22 @@ Function4d14: ; 4d14
; 4d1f
Function4d1f: ; 4d1f
- ld hl, OBJECT_11
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], 0
+ ld [hl], PERSON_ACTION_00
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], $10
call IncrementObjectStructField28
-; fallthrough
-; 4d2e
-
Function4d2e: ; 4d2e
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
ret nz
- ld hl, OBJECT_11
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], 2
- ld hl, OBJECT_12
+ ld [hl], PERSON_ACTION_STEP
+ ld hl, OBJECT_STEP_FRAME
add hl, bc
ld [hl], 0
ld hl, OBJECT_31
@@ -1902,9 +1876,6 @@ Function4d2e: ; 4d2e
add hl, bc
ld [hl], $10
call IncrementObjectStructField28
-; fallthrough
-; 4d4f
-
Function4d4f: ; 4d4f
ld hl, OBJECT_31
add hl, bc
@@ -1922,24 +1893,22 @@ Function4d4f: ; 4d4f
dec [hl]
ret nz
call IncrementObjectStructField28
-; fallthrough
-; 4d6b
-
Function4d6b: ; 4d6b
- ld hl, OBJECT_12
+ ld hl, OBJECT_STEP_FRAME
add hl, bc
ld [hl], 0
ld hl, OBJECT_SPRITE_Y_OFFSET
add hl, bc
ld [hl], 0
- ld hl, OBJECT_09
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], 1
+ ld [hl], STEP_TYPE_STANDING
ret
; 4d7e
Function4d7e: ; 4d7e
- call JumptoObjectStructField28
+ call Object28AnonymousJumptable
+; anonymous jumptable
dw Function4d85
dw Function4d94
; 4d85
@@ -1952,9 +1921,6 @@ Function4d85: ; 4d85
add hl, bc
ld [hl], 0
call IncrementObjectStructField28
- ; fallthrough
-; 4d94
-
Function4d94: ; 4d94
ld hl, OBJECT_SPRITE_Y_OFFSET
add hl, bc
@@ -1968,9 +1934,9 @@ Function4d94: ; 4d94
ld hl, OBJECT_SPRITE_Y_OFFSET
add hl, bc
ld [hl], 0
- ld hl, OBJECT_09
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], 1
+ ld [hl], STEP_TYPE_STANDING
ret
; 4daf
@@ -1984,12 +1950,12 @@ Function4db5: ; 4db5
add hl, bc
ld a, [hl]
and %00000001
- ld a, 1
+ ld a, PERSON_ACTION_STAND
jr z, .yes
- ld a, 0
+ ld a, PERSON_ACTION_00
.yes
- ld hl, OBJECT_11
+ ld hl, OBJECT_ACTION
add hl, bc
ld [hl], a
ret
@@ -2000,12 +1966,12 @@ Function4dc8: ; 4dc8
add hl, bc
ld a, [hl]
and %00000001
- ld a, 4
+ ld a, PERSON_ACTION_SPIN
jr z, .yes
- ld a, 5
+ ld a, PERSON_ACTION_SPIN_FLICKER
.yes
- ld hl, OBJECT_11
+ ld hl, OBJECT_ACTION
add hl, bc
ld [hl], a
jp Function4b79
@@ -2019,9 +1985,9 @@ Function4ddd: ; 4ddd
add hl, bc
dec [hl]
ret nz
- ld hl, OBJECT_09
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], 1
+ ld [hl], STEP_TYPE_STANDING
ret
; 4df0
@@ -2041,28 +2007,26 @@ Function4dff: ; 4dff
add hl, bc
dec [hl]
ret nz
- ld hl, OBJECT_09
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], 1
+ ld [hl], STEP_TYPE_STANDING
ret
; 4e0c
Function4e0c: ; 4e0c
- call JumptoObjectStructField28
+ call Object28AnonymousJumptable
+; anonymous jumptable
dw Function4e13
dw Function4e21
; 4e13
Function4e13: ; 4e13
call RestoreDefaultMovement
- call Function1a47
+ call GetInitialFacing
ld hl, OBJECT_FACING
add hl, bc
ld [hl], a
call IncrementObjectStructField28
- ; fallthrough
-; 4e21
-
Function4e21: ; 4e21
call Function4fb2
ld hl, OBJECT_DIRECTION_WALKING
@@ -2073,7 +2037,7 @@ Function4e21: ; 4e21
Function4e2b: ; 4e2b
call Function4fb2
- call Function46d7
+ call AddStepVector
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
@@ -2082,56 +2046,56 @@ Function4e2b: ; 4e2b
ld hl, OBJECT_DIRECTION_WALKING
add hl, bc
ld [hl], STANDING
- ld hl, OBJECT_09
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], 1
+ ld [hl], STEP_TYPE_STANDING
ret
; 4e47
Function4e47: ; 4e47
- call Function46d7
+ call AddStepVector
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
ret nz
call Function4600
- jp Function4b1d
+ jp RandomStepDuration_Slow
; 4e56
Function4e56: ; 4e56
; AnimateStep?
- call JumptoObjectStructField28
+ call Object28AnonymousJumptable
+; anonymous jumptable
dw Function4e5d
dw Function4e65
; 4e5d
Function4e5d: ; 4e5d
- ld hl, wd150
+ ld hl, wPlayerStepFlags
set 7, [hl]
call IncrementObjectStructField28
- ; fallthrough
-; 4e65
-
Function4e65: ; 4e65
call Function4738
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
ret nz
- ld hl, wd150
+
+ ld hl, wPlayerStepFlags
set 6, [hl]
call Function4600
ld hl, OBJECT_DIRECTION_WALKING
add hl, bc
ld [hl], STANDING
- ld hl, OBJECT_09
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], 1
+ ld [hl], STEP_TYPE_STANDING
ret
; 4e83
Function4e83: ; 4e83
- call JumptoObjectStructField28
+ call Object28AnonymousJumptable
+; anonymous jumptable
dw Function4e8e
dw Function4ea4
dw Function4ead
@@ -2142,7 +2106,7 @@ Function4e8e: ; 4e8e
ld hl, OBJECT_DIRECTION_WALKING
add hl, bc
ld [hl], STANDING
- ld hl, OBJECT_12
+ ld hl, OBJECT_STEP_FRAME
add hl, bc
ld a, [hl]
ld [hl], 2
@@ -2150,18 +2114,12 @@ Function4e8e: ; 4e8e
add hl, bc
ld [hl], 2
call IncrementObjectStructField28
- ; fallthrough
-; 4ea4
-
Function4ea4: ; 4ea4
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
ret nz
call IncrementObjectStructField28
- ; fallthrough
-; 4ead
-
Function4ead: ; 4ead
ld hl, OBJECT_29
add hl, bc
@@ -2173,31 +2131,28 @@ Function4ead: ; 4ead
add hl, bc
ld [hl], $2
call IncrementObjectStructField28
- ; fallthrough
-; 4ec0
-
Function4ec0: ; 4ec0
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
ret nz
- ld hl, OBJECT_09
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], 1
+ ld [hl], STEP_TYPE_STANDING
ret
; 4ecd
Function4ecd: ; 4ecd
- call Function46d7
+ call AddStepVector
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
ret nz
push bc
- ld hl, OBJECT_MAP_X
+ ld hl, OBJECT_NEXT_MAP_X
add hl, bc
ld d, [hl]
- ld hl, OBJECT_MAP_Y
+ ld hl, OBJECT_NEXT_MAP_Y
add hl, bc
ld e, [hl]
ld hl, OBJECT_MAP_OBJECT_INDEX
@@ -2213,9 +2168,9 @@ Function4ecd: ; 4ecd
ld hl, OBJECT_DIRECTION_WALKING
add hl, bc
ld [hl], STANDING
- ld hl, OBJECT_09
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], 1
+ ld [hl], STEP_TYPE_STANDING
ret
; 4f04
@@ -2255,7 +2210,8 @@ Function4f04: ; 4f04
; 4f33
Function4f33: ; 4f33
- call JumptoObjectStructField28
+ call Object28AnonymousJumptable
+; anonymous jumptable
dw Function4f3a
dw Function4f43
; 4f3a
@@ -2266,16 +2222,13 @@ Function4f3a: ; 4f3a
add hl, bc
ld [hl], a
call IncrementObjectStructField28
- ; fallthrough
-; 4f43
-
Function4f43: ; 4f43
ld hl, OBJECT_29
add hl, bc
ld d, [hl]
- ld a, [wd14f]
+ ld a, [wPlayerStepVectorY]
sub d
- ld [wd14f], a
+ ld [wPlayerStepVectorY], a
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
@@ -2286,9 +2239,9 @@ Function4f43: ; 4f43
add hl, bc
ld [hl], a
ld d, a
- ld a, [wd14f]
+ ld a, [wPlayerStepVectorY]
add d
- ld [wd14f], a
+ ld [wPlayerStepVectorY], a
ret
.ok
@@ -2308,29 +2261,31 @@ Function4f6c: ; 4f6c
; 4f77
Function4f77: ; 4f77
- call JumptoObjectStructField28 ; ????
+ call Object28AnonymousJumptable ; ????
; 4f7a
Function4f7a: ; 4f7a
- call JumptoObjectStructField28
+ call Object28AnonymousJumptable
+; anonymous jumptable
dw Function4f83
dw Function4f83
dw Function4f83
; 4f83
Function4f83: ; 4f83
- call JumptoObjectStructField28
+ call Object28AnonymousJumptable
+; anonymous jumptable
dw Function4f8a
dw Function4f99
; 4f8a
Function4f8a: ; 4f8a
- ld hl, OBJECT_11
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], $10
+ ld [hl], PERSON_ACTION_10
ld hl, OBJECT_STEP_DURATION
add hl, bc
- ld [hl], $10
+ ld [hl], 16
call IncrementObjectStructField28
; 4f99
@@ -2342,12 +2297,12 @@ Function4f99: ; 4f99
ld hl, OBJECT_SPRITE_Y_OFFSET
add hl, bc
ld [hl], $60
- ld hl, OBJECT_12
+ ld hl, OBJECT_STEP_FRAME
add hl, bc
ld [hl], 0
- ld hl, OBJECT_09
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], 1
+ ld [hl], STEP_TYPE_STANDING
ret
; 4fb2
@@ -2404,7 +2359,7 @@ UpdateJumpPosition: ; 4fd5
; 5000
Function5000: ; unscripted?
-; copy [wc3de] to [wc2df]
+; copy [wc2de] to [wc2df]
ld a, [wc2de]
ld hl, wc2df
ld [hl], a
@@ -2598,86 +2553,87 @@ Function550a: ; 550a
ret
; 5529
-Function5529: ; 5529
+SpawnShadow: ; 5529
push bc
- ld de, .data_5535
- call Function55b9
- call Function55ac
+ ld de, .ShadowObject
+ call CopyTempObjectData
+ call InitTempObject
pop bc
ret
-.data_5535
- db $00, $05, $1b
+.ShadowObject
+ ; vtile, palette, movement
+ db $00, PAL_OW_SILVER, SPRITEMOVEDATA_SHADOW
; 5538
-Function5538: ; 5538
+SpawnStrengthBoulderDust: ; 5538
push bc
- ld de, .data_5544
- call Function55b9
- call Function55ac
+ ld de, .BoulderDustObject
+ call CopyTempObjectData
+ call InitTempObject
pop bc
ret
-.data_5544
- db $00, $05, $22
+.BoulderDustObject
+ db $00, PAL_OW_SILVER, SPRITEMOVEDATA_BOULDERDUST
; 5547
-Function5547: ; 5547
+SpawnEmote: ; 5547
push bc
- ld de, .data_5553
- call Function55b9
- call Function55ac
+ ld de, .EmoteObject
+ call CopyTempObjectData
+ call InitTempObject
pop bc
ret
-.data_5553
- db $00, $05, $1c
+.EmoteObject
+ db $00, PAL_OW_SILVER, SPRITEMOVEDATA_EMOTE
; 5556
-Function5556: ; 5556
+ShakeGrass: ; 5556
push bc
ld de, .data_5562
- call Function55b9
- call Function55ac
+ call CopyTempObjectData
+ call InitTempObject
pop bc
ret
.data_5562
- db $00, $06, $23
+ db $00, PAL_OW_TREE, SPRITEMOVEDATA_GRASS
; 5565
-Function5565: ; 5565
+ShakeScreen: ; 5565
push bc
push af
- ld de, .data_5576
- call Function55b9
+ ld de, .ScreenShakeObject
+ call CopyTempObjectData
pop af
- ld [wc2f5], a
- call Function55ac
+ ld [wTempObjectCopyRange], a
+ call InitTempObject
pop bc
ret
-.data_5576
- db $00, $05, $1d
+.ScreenShakeObject
+ db $00, PAL_OW_SILVER, SPRITEMOVEDATA_SCREENSHAKE
; 5579
-Function5579: ; 5579
+DespawnEmote: ; 5579
push bc
ld a, [hMapObjectIndexBuffer]
ld c, a
- call Function5582
+ call .DeleteEmote
pop bc
ret
; 5582
-Function5582: ; 5582
+.DeleteEmote: ; 5582
ld de, ObjectStructs
ld a, NUM_OBJECT_STRUCTS
.loop
push af
ld hl, OBJECT_FLAGS1
add hl, de
- bit 7, [hl]
+ bit EMOTE_OBJECT, [hl]
jr z, .next
ld hl, OBJECT_SPRITE
add hl, de
@@ -2701,20 +2657,21 @@ Function5582: ; 5582
ret
; 55ac
-Function55ac: ; 55ac
+InitTempObject: ; 55ac
call FindFirstEmptyObjectStruct
ret nc
ld d, h
ld e, l
- callba Function8286
+ callba CopyTempObjectToObjectStruct
ret
; 55b9
-Function55b9: ; 55b9
-; load into wc2f0:
-; -1, -1, [de], [de + 1], [de + 2], [hMapObjectIndexBuffer], [MapX], [MapY], -1
- ld hl, wc2f0
+CopyTempObjectData: ; 55b9
+; load into wTempObjectCopy:
+; -1, -1, [de], [de + 1], [de + 2], [hMapObjectIndexBuffer], [NextMapX], [NextMapY], -1
+; This spawns the object at the same place as whichever object is loaded into bc.
+ ld hl, wTempObjectCopyMapObjectIndex
ld [hl], -1
inc hl
ld [hl], -1
@@ -2733,10 +2690,10 @@ Function55b9: ; 55b9
ld [hli], a
push hl
- ld hl, OBJECT_MAP_X
+ ld hl, OBJECT_NEXT_MAP_X
add hl, bc
ld d, [hl]
- ld hl, OBJECT_MAP_Y
+ ld hl, OBJECT_NEXT_MAP_Y
add hl, bc
ld e, [hl]
pop hl
@@ -2753,6 +2710,7 @@ Function55e0:: ; 55e0
ld a, [VramState]
bit 0, a
ret z
+
ld bc, ObjectStructs
xor a
.loop
@@ -2773,28 +2731,30 @@ Function55e0:: ; 55e0
ret
; 5602
-Function5602: ; 5602
- call Function5645
- ld a, 0
- call Function5629
- ld a, [wd459]
+Function5602: ; 5602, called at battle start
+ call Function5645 ; clear sprites
+ ld a, PLAYER
+ call Function5629 ; respawn player
+
+ ld a, [wBattleScriptFlags]
bit 7, a
jr z, .ok
+
ld a, [hLastTalked]
and a
jr z, .ok
- call Function5629
+ call Function5629 ; respawn opponent
.ok
- call RefreshMapAppearDisappear
+ call _UpdateSprites
ret
; 561d
Function561d: ; 561d
- call Function5645
- ld a, 0
- call Function5629
- call RefreshMapAppearDisappear
+ call Function5645 ; clear sprites
+ ld a, PLAYER
+ call Function5629 ; respawn player
+ call _UpdateSprites
ret
; 5629
@@ -2825,7 +2785,7 @@ Function5645: ; 5645
ld bc, ObjectStructs
.loop
ld [hMapObjectIndexBuffer], a
- call Function5680
+ call SetFacing_Standing
ld hl, OBJECT_STRUCT_LENGTH
add hl, bc
ld b, h
@@ -2841,9 +2801,9 @@ Function565c: ; 565c
push bc
call Function56cd
pop bc
- jr c, Function5680
+ jr c, SetFacing_Standing
call Function56a3
- jr c, Function5680
+ jr c, SetFacing_Standing
call Function5688
callba Function4440
xor a
@@ -2852,13 +2812,13 @@ Function565c: ; 565c
Function5673: ; 5673
call Function56a3
- jr c, Function5680
- callba Function4440
+ jr c, SetFacing_Standing
+ callba Function4440 ; no need to farcall
xor a
ret
; 5680
-Function5680: ; 5680
+SetFacing_Standing: ; 5680
ld hl, OBJECT_FACING_STEP
add hl, bc
ld [hl], STANDING
@@ -2868,26 +2828,26 @@ Function5680: ; 5680
Function5688: ; 5688
push bc
- ld hl, OBJECT_MAP_X
+ ld hl, OBJECT_NEXT_MAP_X
add hl, bc
ld d, [hl]
- ld hl, OBJECT_MAP_Y
+ ld hl, OBJECT_NEXT_MAP_Y
add hl, bc
ld e, [hl]
- call Function2a3c
+ call GetCoordTile
pop bc
- ld hl, OBJECT_STANDING_TILE
+ ld hl, OBJECT_NEXT_TILE
add hl, bc
ld [hl], a
- callba Function463f
+ callba Function463f ; no need to farcall
ret
; 56a3
Function56a3: ; 56a3
- ld hl, OBJECT_MAP_X
+ ld hl, OBJECT_NEXT_MAP_X
add hl, bc
ld d, [hl]
- ld hl, OBJECT_MAP_Y
+ ld hl, OBJECT_NEXT_MAP_Y
add hl, bc
ld e, [hl]
inc d
@@ -3043,11 +3003,11 @@ Function576a:: ; 576a
Function5771: ; 5771
xor a
- ld [wd14e], a
- ld [wd14f], a
- ld [wd150], a
+ ld [wPlayerStepVectorX], a
+ ld [wPlayerStepVectorY], a
+ ld [wPlayerStepFlags], a
ld a, -1
- ld [wd151], a
+ ld [wPlayerStepDirection], a
ret
; 5781
@@ -3078,11 +3038,11 @@ Function579d: ; 579d
ld [wc2df], a
xor a
ld [wd04e], a
- ld [PlayerObject12], a
+ ld [PlayerObjectStepFrame], a
call Function57bc
callba CheckWarpCollision
call c, SpawnInFacingDown
- call Function57ca
+ call SpawnInCustomFacing
ret
; 57bc
@@ -3093,12 +3053,12 @@ Function57bc: ; 57bc
ret
.ok
- ld a, 0
+ ld a, PERSON_ACTION_00
ld [PlayerAction], a
ret
; 57ca
-Function57ca: ; 57ca
+SpawnInCustomFacing: ; 57ca
ld hl, wPlayerSpriteSetupFlags
bit 5, [hl]
ret z
@@ -3107,30 +3067,29 @@ Function57ca: ; 57ca
rept 2
add a
endr
- jr Function57db
+ jr ContinueSpawnFacing
; 57d9
SpawnInFacingDown: ; 57d9
ld a, 0
- ; fallthrough
-; 57db
-
-Function57db: ; 57db
+ContinueSpawnFacing: ; 57db
ld bc, PlayerStruct
call SetSpriteDirection
ret
; 57e2
-Function57e2: ; 57e2
+SetPlayerPalette: ; 57e2
ld a, d
and %10000000
ret z
+
ld bc, 0 ; debug?
ld hl, OBJECT_FACING
add hl, bc
ld a, [hl]
or d
ld [hl], a
+
ld a, d
swap a
and %00000111
@@ -3186,9 +3145,9 @@ SetFollowerIfVisible: ; 582c
ld hl, OBJECT_MOVEMENTTYPE
add hl, bc
ld [hl], SPRITEMOVEDATA_FOLLOWING
- ld hl, OBJECT_09
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], 0
+ ld [hl], STEP_TYPE_00
ld a, [hObjectStructIndexBuffer]
ld [wObjectFollow_Follower], a
ret
@@ -3326,9 +3285,9 @@ Function58e3: ; 58e3
add hl, bc
ld [hl], a
- ld hl, OBJECT_09
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], 0
+ ld [hl], STEP_TYPE_00
ret
; 5903
@@ -3345,9 +3304,9 @@ Function5903: ; 5903
add hl, bc
ld [hl], a
- ld hl, OBJECT_09
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], 0
+ ld [hl], STEP_TYPE_00
ret
.standing_movefns
@@ -3357,7 +3316,7 @@ Function5903: ; 5903
db SPRITEMOVEDATA_STANDING_RIGHT
; 5920
-RefreshMapAppearDisappear:: ; 5920
+_UpdateSprites:: ; 5920
ld a, [VramState]
bit 0, a
ret z
@@ -3367,29 +3326,29 @@ RefreshMapAppearDisappear:: ; 5920
push af
ld a, 1
ld [hOAMUpdate], a
- call Function5991
- call Function593a
+ call InitSprites
+ call .fill
pop af
ld [hOAMUpdate], a
ret
; 593a
-Function593a: ; 593a
+.fill: ; 593a
ld a, [VramState]
bit 1, a
- ld b, $a0
+ ld b, SpritesEnd % $100
jr z, .ok
- ld b, $70
+ ld b, 28 * 4
.ok
ld a, [hUsedSpriteIndex]
cp b
ret nc
ld l, a
- ld h, $c4
- ld de, OBJECT_FLAGS1
+ ld h, Sprites / $100
+ ld de, 4
ld a, b
- ld c, $a0
+ ld c, SCREEN_HEIGHT_PX + 16
.loop
ld [hl], c
add hl, de
@@ -3444,26 +3403,29 @@ Function5958: ; 5958
ret
; 5991
-Function5991: ; 5991
- call Function59a4
- ld c, $30
- call Function59f3
- ld c, $20
- call Function59f3
- ld c, $10
- call Function59f3
+InitSprites: ; 5991
+PRIORITY_LOW EQU $10
+PRIORITY_NORM EQU $20
+PRIORITY_HIGH EQU $30
+ call .DeterminePriorities
+ ld c, PRIORITY_HIGH
+ call .InitSpritesByPriority
+ ld c, PRIORITY_NORM
+ call .InitSpritesByPriority
+ ld c, PRIORITY_LOW
+ call .InitSpritesByPriority
ret
; 59a4
-Function59a4: ; 59a4
+.DeterminePriorities: ; 59a4
xor a
- ld hl, wMovementPointer
- ld bc, 13
+ ld hl, wc2eb
+ ld bc, NUM_OBJECT_STRUCTS
call ByteFill
ld d, 0
ld bc, ObjectStructs
- ld hl, wMovementPointer
+ ld hl, wc2eb
.loop
push hl
call GetObjectSprite
@@ -3472,19 +3434,19 @@ Function59a4: ; 59a4
ld hl, OBJECT_FACING_STEP
add hl, bc
ld a, [hl]
- cp -1
+ cp STANDING
jr z, .skip
; Define the sprite priority.
- ld e, $10
+ ld e, PRIORITY_LOW
ld hl, OBJECT_FLAGS2
add hl, bc
bit 0, [hl]
jr nz, .add
- ld e, $20
+ ld e, PRIORITY_NORM
bit 1, [hl]
jr z, .add
- ld e, $30
+ ld e, PRIORITY_HIGH
jr .add
.skip
@@ -3513,28 +3475,28 @@ Function59a4: ; 59a4
ret
; 59f3
-Function59f3: ; 59f3
+.InitSpritesByPriority: ; 59f3
ld hl, wMovementPointer
-.next
+.next_sprite
ld a, [hli]
ld d, a
and $f0
ret z
cp c
- jr nz, .next
+ jr nz, .next_sprite
push bc
push hl
ld a, d
and $f
call .GetObjectStructPointer
- call .asm_5a0d
+ call .InitSprite
pop hl
pop bc
- jr .next
+ jr .next_sprite
; 5a0d
-.asm_5a0d: ; 5a0d
+.InitSprite: ; 5a0d
ld hl, OBJECT_SPRITE_TILE
add hl, bc
ld a, [hl]
@@ -3608,7 +3570,7 @@ Function59f3: ; 59f3
ld hl, OBJECT_FACING_STEP
add hl, bc
ld a, [hl]
- cp -1
+ cp STANDING
jp z, .done
cp NUM_FACINGS
jp nc, .done
diff --git a/engine/map_setup.asm b/engine/map_setup.asm
index 9c99df2f6..7444c7fbe 100644
--- a/engine/map_setup.asm
+++ b/engine/map_setup.asm
@@ -249,10 +249,10 @@ MapSetupCommands: ; 15440
dba PlayMapMusic ; 03
dba RestartMapMusic ; 04
dba FadeToMapMusic ; 05
- dba FadeOutMapAndMusic ; 06
+ dba RotatePalettesRightMapAndMusic ; 06
dba EnterMapMusic ; 07
dba ForceMapMusic ; 08
- dba FadeInMusic ; 09
+ dba RotatePalettesLeftMusic ; 09
dba LoadBlockData ; 0a
dba LoadNeighboringBlockData ; 0b
dba SaveScreen ; 0c
@@ -311,10 +311,10 @@ SuspendMapAnims: ; 154d3
; 154d7
LoadObjectsRunCallback_02: ; 154d7
- ld a, $2
+ ld a, 2
call RunMapCallback
callba LoadObjectMasks
- callba Function8177
+ callba InitializeVisibleSprites
ret
; 154ea (5:54ea)
@@ -417,14 +417,14 @@ RetainOldPalettes: ; 1556d
callba _UpdateTimePals
ret
-FadeOutMapAndMusic: ; 15574
+RotatePalettesRightMapAndMusic: ; 15574
ld e, 0
ld a, [MusicFadeIDLo]
ld d, 0
ld a, [MusicFadeIDHi]
ld a, $4
ld [MusicFade], a
- call FadeToWhite
+ call RotateThreePalettesRight
ret
; 15587
diff --git a/engine/mart.asm b/engine/mart.asm
index 2c3dac0e7..87c805c25 100755
--- a/engine/mart.asm
+++ b/engine/mart.asm
@@ -29,7 +29,7 @@ MartDialog: ; 15a61
ld a, 0
ld [EngineBuffer1], a
xor a
- ld [MovementAnimation], a
+ ld [EngineBuffer5], a
call StandardMart
ret
; 15a6e
@@ -129,7 +129,7 @@ LoadMartPointer: ; 15b10
ld bc, 16
call ByteFill
xor a
- ld [MovementAnimation], a
+ ld [EngineBuffer5], a
ld [wBargainShopFlags], a
ld [FacingDirection], a
ret
@@ -157,10 +157,10 @@ endr
StandardMart: ; 15b47
.loop
- ld a, [MovementAnimation]
+ ld a, [EngineBuffer5]
ld hl, .MartFunctions
rst JumpTable
- ld [MovementAnimation], a
+ ld [EngineBuffer5], a
cp $ff
jr nz, .loop
ret
@@ -377,7 +377,7 @@ BuyMenu: ; 15c62
.loop
call BuyMenuLoop ; menu loop
jr nc, .loop
- call Function2b3c
+ call ReturnToCallingMenu
ret
; 15c7d
@@ -470,16 +470,16 @@ endr
BuyMenuLoop: ; 15cef
- callba Function24ae8
+ callba PlaceMoneyTopRightOW
call UpdateSprites
ld hl, MenuDataHeader_Buy
call CopyMenuDataHeader
ld a, [wd045]
ld [wMenuCursorBuffer], a
ld a, [wd045 + 1]
- ld [wd0e4], a
+ ld [wMenuScrollPosition], a
call HandleScrollingMenu
- ld a, [wd0e4]
+ ld a, [wMenuScrollPosition]
ld [wd045 + 1], a
ld a, [MenuSelection2]
ld [wd045], a
@@ -658,7 +658,7 @@ MenuDataHeader_Buy: ; 0x15e18
dbw 0, CurMart
dba PlaceMenuItemName
dba .PrintBCDPrices
- dba Function244c3
+ dba UpdateItemDescription
; 15e30
.PrintBCDPrices: ; 15e30
@@ -875,7 +875,7 @@ Function15ee0: ; 15ee0
.okay_to_sell
ld hl, Text_Mart_SellHowMany
call PrintText
- callba Function24af8
+ callba PlaceMoneyTopRightMenu
callba Function24fe1
call ExitMenu
jr c, .declined
@@ -899,7 +899,7 @@ Function15ee0: ; 15ee0
ld hl, Text_Mart_SoldForAmount
call PrintTextBoxText
call PlayTransactionSound
- callba Function24af0
+ callba PlaceMoneyBottomLeftOW
call JoyWaitAorB
.declined
diff --git a/engine/menu.asm b/engine/menu.asm
index a1ec30b7a..6978a0e54 100755
--- a/engine/menu.asm
+++ b/engine/menu.asm
@@ -4,7 +4,7 @@ Function2400e:: ; 2400e
rst FarCall
call Function24085
call UpdateSprites
- call Function321c
+ call ApplyTilemap
call Function2408f
ret
; 24022
@@ -16,7 +16,7 @@ Function24022:: ; 24022
call Function24085
callba MobileTextBorder
call UpdateSprites
- call Function321c
+ call ApplyTilemap
call Function2408f
ret
; 2403c
@@ -28,7 +28,7 @@ Function2403c:: ; 2403c
call Function24085
callba MobileTextBorder
call UpdateSprites
- call Function321c
+ call ApplyTilemap
call Function2411a
ld hl, wcfa5
set 7, [hl]
diff --git a/engine/money.asm b/engine/money.asm
new file mode 100755
index 000000000..5935a23e7
--- /dev/null
+++ b/engine/money.asm
@@ -0,0 +1,209 @@
+GiveMoney:: ; 15fd7
+ ld a, $3
+ call AddMoney
+ ld bc, MaxMoney
+ ld a, $3
+ call CompareMoney
+ jr z, .asm_15ff5
+ jr c, .asm_15ff5
+ ld hl, MaxMoney
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hli]
+ ld [de], a
+ scf
+ ret
+
+.asm_15ff5
+ and a
+ ret
+; 15ff7
+
+MaxMoney: ; 15ff7
+ dt 999999
+; 15ffa
+
+
+TakeMoney:: ; 15ffa
+ ld a, 3
+ call SubtractMoney
+ jr nc, .asm_16009
+ xor a
+ ld [de], a
+ inc de
+ ld [de], a
+ inc de
+ ld [de], a
+ scf
+ ret
+
+.asm_16009
+ and a
+ ret
+; 1600b
+
+CompareMoney:: ; 1600b
+ ld a, $3
+CompareFunds: ; 1600d
+ push hl
+ push de
+ push bc
+ ld h, b
+ ld l, c
+ ld c, $0
+ ld b, a
+.loop1
+ dec a
+ jr z, .done
+ inc de
+ inc hl
+ jr .loop1
+
+.done
+ and a
+.loop2
+ ld a, [de]
+ sbc [hl]
+ jr z, .okay
+ inc c
+
+.okay
+ dec de
+ dec hl
+ dec b
+ jr nz, .loop2
+ jr c, .set_carry
+ ld a, c
+ and a
+ jr .skip_carry
+
+.set_carry
+ ld a, $1
+ and a
+ scf
+
+.skip_carry
+ pop bc
+ pop de
+ pop hl
+ ret
+; 16035
+
+SubtractMoney: ; 16035
+ ld a, 3
+SubtractFunds: ; 16037
+ push hl
+ push de
+ push bc
+ ld h, b
+ ld l, c
+ ld b, a
+ ld c, 0
+.loop
+ dec a
+ jr z, .done
+ inc de
+ inc hl
+ jr .loop
+
+.done
+ and a
+.loop2
+ ld a, [de]
+ sbc [hl]
+ ld [de], a
+ dec de
+ dec hl
+ dec b
+ jr nz, .loop2
+ pop bc
+ pop de
+ pop hl
+ ret
+; 16053
+
+AddMoney: ; 16053
+ ld a, $3
+AddFunds: ; 16055
+ push hl
+ push de
+ push bc
+ ld h, b
+ ld l, c
+ ld b, a
+.loop1
+ dec a
+ jr z, .done
+ inc de
+ inc hl
+ jr .loop1
+
+.done
+ and a
+.loop2
+ ld a, [de]
+ adc [hl]
+ ld [de], a
+ dec de
+ dec hl
+ dec b
+ jr nz, .loop2
+ pop bc
+ pop de
+ pop hl
+ ret
+; 1606f
+
+GiveCoins:: ; 1606f
+ ld a, 2
+ ld de, Coins
+ call AddFunds
+ ld a, 2
+ ld bc, .maxcoins
+ call CompareFunds
+ jr c, .not_maxed
+ ld hl, .maxcoins
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hli]
+ ld [de], a
+ scf
+ ret
+
+.not_maxed
+ and a
+ ret
+; 1608d
+
+.maxcoins: ; 1608d
+ bigdw 9999
+; 1608f
+
+
+TakeCoins:: ; 1608f
+ ld a, 2
+ ld de, Coins
+ call SubtractFunds
+ jr nc, .asm_1609f
+ xor a
+ ld [de], a
+ inc de
+ ld [de], a
+ scf
+ ret
+
+.asm_1609f
+ and a
+ ret
+; 160a1
+
+CheckCoins:: ; 160a1
+ ld a, $2
+ ld de, Coins
+ jp CompareFunds
+; 160a9
diff --git a/engine/more_phone_scripts.asm b/engine/more_phone_scripts.asm
index 5bc1f1560..f0c835e92 100644
--- a/engine/more_phone_scripts.asm
+++ b/engine/more_phone_scripts.asm
@@ -56,468 +56,468 @@ UnknownScript_0xa0074:
UnknownScript_0xa007c:
checkcode VAR_CALLERID
- if_equal $5, UnknownScript_0xa00c2
- if_equal $b, UnknownScript_0xa00c8
- if_equal $d, UnknownScript_0xa00ce
- if_equal $f, UnknownScript_0xa00d4
- if_equal $10, UnknownScript_0xa00da
- if_equal $11, UnknownScript_0xa00e0
- if_equal $13, UnknownScript_0xa00e6
- if_equal $14, UnknownScript_0xa00ec
- if_equal $17, UnknownScript_0xa00f2
- if_equal $18, UnknownScript_0xa00f8
- if_equal $1b, UnknownScript_0xa00fe
- if_equal $1c, UnknownScript_0xa0104
- if_equal $1d, UnknownScript_0xa010a
- if_equal $1e, UnknownScript_0xa0110
- if_equal $20, UnknownScript_0xa0116
- if_equal $21, UnknownScript_0xa011c
- if_equal $23, UnknownScript_0xa0122
-
-UnknownScript_0xa00c2:
+ if_equal PHONE_SCHOOLBOY_JACK, .Jack
+ if_equal PHONE_COOLTRAINERM_GAVEN, .Gaven
+ if_equal PHONE_BIRDKEEPER_JOSE, .Jose
+ if_equal PHONE_YOUNGSTER_JOEY, .Joey
+ if_equal PHONE_BUG_CATCHER_WADE, .Wade
+ if_equal PHONE_FISHER_RALPH, .Ralph
+ if_equal PHONE_HIKER_ANTHONY, .Anthony
+ if_equal PHONE_CAMPER_TODD, .Todd
+ if_equal PHONE_BUG_CATCHER_ARNIE, .Arnie
+ if_equal PHONE_SCHOOLBOY_ALAN, .Alan
+ if_equal PHONE_SCHOOLBOY_CHAD, .Chad
+ if_equal PHONE_POKEFANM_DEREK, .Derek
+ if_equal PHONE_FISHER_TULLY, .Tully
+ if_equal PHONE_POKEMANIAC_BRENT, .Brent
+ if_equal PHONE_BIRDKEEPER_VANCE, .Vance
+ if_equal PHONE_FISHER_WILTON, .Wilton
+ if_equal PHONE_HIKER_PARRY, .Parry
+
+.Jack:
farwritetext UnknownText_0x1740c0
keeptextopen
end
-UnknownScript_0xa00c8:
+.Gaven:
farwritetext UnknownText_0x174a24
keeptextopen
end
-UnknownScript_0xa00ce:
+.Jose:
farwritetext UnknownText_0x174f2f
keeptextopen
end
-UnknownScript_0xa00d4:
+.Joey:
farwritetext UnknownText_0x175530
keeptextopen
end
-UnknownScript_0xa00da:
+.Wade:
farwritetext UnknownText_0x1757d4
keeptextopen
end
-UnknownScript_0xa00e0:
+.Ralph:
farwritetext UnknownText_0x175bc4
keeptextopen
end
-UnknownScript_0xa00e6:
+.Anthony:
farwritetext UnknownText_0x176a2f
keeptextopen
end
-UnknownScript_0xa00ec:
+.Todd:
farwritetext UnknownText_0x176e5d
keeptextopen
end
-UnknownScript_0xa00f2:
+.Arnie:
farwritetext UnknownText_0x649dc
keeptextopen
end
-UnknownScript_0xa00f8:
+.Alan:
farwritetext UnknownText_0x64cbd
keeptextopen
end
-UnknownScript_0xa00fe:
+.Chad:
farwritetext UnknownText_0x65271
keeptextopen
end
-UnknownScript_0xa0104:
+.Derek:
farwritetext UnknownText_0x65ab2
keeptextopen
end
-UnknownScript_0xa010a:
+.Tully:
farwritetext UnknownText_0x65de4
keeptextopen
end
-UnknownScript_0xa0110:
+.Brent:
farwritetext UnknownText_0x660be
keeptextopen
end
-UnknownScript_0xa0116:
+.Vance:
farwritetext UnknownText_0x66980
keeptextopen
end
-UnknownScript_0xa011c:
+.Wilton:
farwritetext UnknownText_0x66afc
keeptextopen
end
-UnknownScript_0xa0122:
+.Parry:
farwritetext UnknownText_0x66f9f
keeptextopen
end
UnknownScript_0xa0128:
checkcode VAR_CALLERID
- if_equal $6, UnknownScript_0xa014a
- if_equal $c, UnknownScript_0xa0150
- if_equal $e, UnknownScript_0xa0156
- if_equal $12, UnknownScript_0xa015c
- if_equal $15, UnknownScript_0xa0162
- if_equal $1a, UnknownScript_0xa0168
- if_equal $1f, UnknownScript_0xa016e
- if_equal $24, UnknownScript_0xa0174
-
-UnknownScript_0xa014a:
+ if_equal PHONE_POKEFAN_BEVERLY, .Beverly
+ if_equal PHONE_COOLTRAINERF_BETH, .Beth
+ if_equal PHONE_COOLTRAINERF_REENA, .Reena
+ if_equal PHONE_PICNICKER_LIZ, .Liz
+ if_equal PHONE_PICNICKER_GINA, .Gina
+ if_equal PHONE_LASS_DANA, .Dana
+ if_equal PHONE_PICNICKER_TIFFANY, .Tiffany
+ if_equal PHONE_PICNICKER_ERIN, .Erin
+
+.Beverly:
farwritetext UnknownText_0x174688
keeptextopen
end
-UnknownScript_0xa0150:
+.Beth:
farwritetext UnknownText_0x174c7f
keeptextopen
end
-UnknownScript_0xa0156:
+.Reena:
farwritetext UnknownText_0x1752f5
keeptextopen
end
-UnknownScript_0xa015c:
+.Liz:
farwritetext UnknownText_0x175fda
keeptextopen
end
-UnknownScript_0xa0162:
+.Gina:
farwritetext UnknownText_0x1771fd
keeptextopen
end
-UnknownScript_0xa0168:
+.Dana:
farwritetext UnknownText_0x64f74
keeptextopen
end
-UnknownScript_0xa016e:
+.Tiffany:
farwritetext UnknownText_0x665ad
keeptextopen
end
-UnknownScript_0xa0174:
+.Erin:
farwritetext UnknownText_0x6717a
keeptextopen
end
UnknownScript_0xa017a:
checkcode VAR_CALLERID
- if_equal $5, UnknownScript_0xa01c0
- if_equal $b, UnknownScript_0xa01c6
- if_equal $d, UnknownScript_0xa01cc
- if_equal $f, UnknownScript_0xa01d2
- if_equal $10, UnknownScript_0xa01d8
- if_equal $11, UnknownScript_0xa01de
- if_equal $13, UnknownScript_0xa01e4
- if_equal $14, UnknownScript_0xa01ea
- if_equal $17, UnknownScript_0xa01f0
- if_equal $18, UnknownScript_0xa01f6
- if_equal $1b, UnknownScript_0xa01fc
- if_equal $1c, UnknownScript_0xa0202
- if_equal $1d, UnknownScript_0xa0208
- if_equal $1e, UnknownScript_0xa020e
- if_equal $20, UnknownScript_0xa0214
- if_equal $21, UnknownScript_0xa021a
- if_equal $23, UnknownScript_0xa0220
-
-UnknownScript_0xa01c0:
+ if_equal PHONE_SCHOOLBOY_JACK, .Jack
+ if_equal PHONE_COOLTRAINERM_GAVEN, .Gaven
+ if_equal PHONE_BIRDKEEPER_JOSE, .Jose
+ if_equal PHONE_YOUNGSTER_JOEY, .Joey
+ if_equal PHONE_BUG_CATCHER_WADE, .Wade
+ if_equal PHONE_FISHER_RALPH, .Ralph
+ if_equal PHONE_HIKER_ANTHONY, .Anthony
+ if_equal PHONE_CAMPER_TODD, .Todd
+ if_equal PHONE_BUG_CATCHER_ARNIE, .Arnie
+ if_equal PHONE_SCHOOLBOY_ALAN, .Alan
+ if_equal PHONE_SCHOOLBOY_CHAD, .Chad
+ if_equal PHONE_POKEFANM_DEREK, .Derek
+ if_equal PHONE_FISHER_TULLY, .Tully
+ if_equal PHONE_POKEMANIAC_BRENT, .Brent
+ if_equal PHONE_BIRDKEEPER_VANCE, .Vance
+ if_equal PHONE_FISHER_WILTON, .Wilton
+ if_equal PHONE_HIKER_PARRY, .Parry
+
+.Jack:
farwritetext UnknownText_0x174106
keeptextopen
end
-UnknownScript_0xa01c6:
+.Gaven:
farwritetext UnknownText_0x174a80
keeptextopen
end
-UnknownScript_0xa01cc:
+.Jose:
farwritetext UnknownText_0x174f90
keeptextopen
end
-UnknownScript_0xa01d2:
+.Joey:
farwritetext UnknownText_0x175591
keeptextopen
end
-UnknownScript_0xa01d8:
+.Wade:
farwritetext UnknownText_0x175869
keeptextopen
end
-UnknownScript_0xa01de:
+.Ralph:
farwritetext UnknownText_0x175c24
keeptextopen
end
-UnknownScript_0xa01e4:
+.Anthony:
farwritetext UnknownText_0x176aef
keeptextopen
end
-UnknownScript_0xa01ea:
+.Todd:
farwritetext UnknownText_0x176e9c
keeptextopen
end
-UnknownScript_0xa01f0:
+.Arnie:
farwritetext UnknownText_0x64a13
keeptextopen
end
-UnknownScript_0xa01f6:
+.Alan:
farwritetext UnknownText_0x64cf3
keeptextopen
end
-UnknownScript_0xa01fc:
+.Chad:
farwritetext UnknownText_0x65318
keeptextopen
end
-UnknownScript_0xa0202:
+.Derek:
farwritetext UnknownText_0x65b29
keeptextopen
end
-UnknownScript_0xa0208:
+.Tully:
farwritetext UnknownText_0x65e42
keeptextopen
end
-UnknownScript_0xa020e:
+.Brent:
farwritetext UnknownText_0x6613c
keeptextopen
end
-UnknownScript_0xa0214:
+.Vance:
farwritetext UnknownText_0x669b2
keeptextopen
end
-UnknownScript_0xa021a:
+.Wilton:
farwritetext UnknownText_0x66b3e
keeptextopen
end
-UnknownScript_0xa0220:
+.Parry:
farwritetext UnknownText_0x66fc0
keeptextopen
end
UnknownScript_0xa0226:
checkcode VAR_CALLERID
- if_equal $6, UnknownScript_0xa0248
- if_equal $c, UnknownScript_0xa024e
- if_equal $e, UnknownScript_0xa0254
- if_equal $12, UnknownScript_0xa025a
- if_equal $15, UnknownScript_0xa0260
- if_equal $1a, UnknownScript_0xa0266
- if_equal $1f, UnknownScript_0xa026c
- if_equal $24, UnknownScript_0xa0272
-
-UnknownScript_0xa0248:
+ if_equal PHONE_POKEFAN_BEVERLY, .Beverly
+ if_equal PHONE_COOLTRAINERF_BETH, .Beth
+ if_equal PHONE_COOLTRAINERF_REENA, .Reena
+ if_equal PHONE_PICNICKER_LIZ, .Liz
+ if_equal PHONE_PICNICKER_GINA, .Gina
+ if_equal PHONE_LASS_DANA, .Dana
+ if_equal PHONE_PICNICKER_TIFFANY, .Tiffany
+ if_equal PHONE_PICNICKER_ERIN, .Erin
+
+.Beverly:
farwritetext UnknownText_0x1746c3
keeptextopen
end
-UnknownScript_0xa024e:
+.Beth:
farwritetext UnknownText_0x174cf6
keeptextopen
end
-UnknownScript_0xa0254:
+.Reena:
farwritetext UnknownText_0x17536b
keeptextopen
end
-UnknownScript_0xa025a:
+.Liz:
farwritetext UnknownText_0x17602d
keeptextopen
end
-UnknownScript_0xa0260:
+.Gina:
farwritetext UnknownText_0x177237
keeptextopen
end
-UnknownScript_0xa0266:
+.Dana:
farwritetext UnknownText_0x64fb2
keeptextopen
end
-UnknownScript_0xa026c:
+.Tiffany:
farwritetext UnknownText_0x66605
keeptextopen
end
-UnknownScript_0xa0272:
+.Erin:
farwritetext UnknownText_0x671a4
keeptextopen
end
UnknownScript_0xa0278:
checkcode VAR_CALLERID
- if_equal $5, UnknownScript_0xa02be
- if_equal $b, UnknownScript_0xa02c4
- if_equal $d, UnknownScript_0xa02ca
- if_equal $f, UnknownScript_0xa02d0
- if_equal $10, UnknownScript_0xa02d6
- if_equal $11, UnknownScript_0xa02dc
- if_equal $13, UnknownScript_0xa02e2
- if_equal $14, UnknownScript_0xa02e8
- if_equal $17, UnknownScript_0xa02ee
- if_equal $18, UnknownScript_0xa02f4
- if_equal $1b, UnknownScript_0xa02fa
- if_equal $1c, UnknownScript_0xa0300
- if_equal $1d, UnknownScript_0xa0306
- if_equal $1e, UnknownScript_0xa030c
- if_equal $20, UnknownScript_0xa0312
- if_equal $21, UnknownScript_0xa0318
- if_equal $23, UnknownScript_0xa031e
-
-UnknownScript_0xa02be:
+ if_equal PHONE_SCHOOLBOY_JACK, .Jack
+ if_equal PHONE_COOLTRAINERM_GAVEN, .Gaven
+ if_equal PHONE_BIRDKEEPER_JOSE, .Jose
+ if_equal PHONE_YOUNGSTER_JOEY, .Joey
+ if_equal PHONE_BUG_CATCHER_WADE, .Wade
+ if_equal PHONE_FISHER_RALPH, .Ralph
+ if_equal PHONE_HIKER_ANTHONY, .Anthony
+ if_equal PHONE_CAMPER_TODD, .Todd
+ if_equal PHONE_BUG_CATCHER_ARNIE, .Arnie
+ if_equal PHONE_SCHOOLBOY_ALAN, .Alan
+ if_equal PHONE_SCHOOLBOY_CHAD, .Chad
+ if_equal PHONE_POKEFANM_DEREK, .Derek
+ if_equal PHONE_FISHER_TULLY, .Tully
+ if_equal PHONE_POKEMANIAC_BRENT, .Brent
+ if_equal PHONE_BIRDKEEPER_VANCE, .Vance
+ if_equal PHONE_FISHER_WILTON, .Wilton
+ if_equal PHONE_HIKER_PARRY, .Parry
+
+.Jack:
farwritetext UnknownText_0x174165
keeptextopen
end
-UnknownScript_0xa02c4:
+.Gaven:
farwritetext UnknownText_0x174b2d
keeptextopen
end
-UnknownScript_0xa02ca:
+.Jose:
farwritetext UnknownText_0x174ffd
keeptextopen
end
-UnknownScript_0xa02d0:
+.Joey:
farwritetext UnknownText_0x175611
keeptextopen
end
-UnknownScript_0xa02d6:
+.Wade:
farwritetext UnknownText_0x1758e4
keeptextopen
end
-UnknownScript_0xa02dc:
+.Ralph:
farwritetext UnknownText_0x175c9f
keeptextopen
end
-UnknownScript_0xa02e2:
+.Anthony:
farwritetext UnknownText_0x176b45
keeptextopen
end
-UnknownScript_0xa02e8:
+.Todd:
farwritetext UnknownText_0x176eee
keeptextopen
end
-UnknownScript_0xa02ee:
+.Arnie:
farwritetext UnknownText_0x64a71
keeptextopen
end
-UnknownScript_0xa02f4:
+.Alan:
farwritetext UnknownText_0x64d4f
keeptextopen
end
-UnknownScript_0xa02fa:
+.Chad:
farwritetext UnknownText_0x65399
keeptextopen
end
-UnknownScript_0xa0300:
+.Derek:
farwritetext UnknownText_0x65bc8
keeptextopen
end
-UnknownScript_0xa0306:
+.Tully:
farwritetext UnknownText_0x65eac
keeptextopen
end
-UnknownScript_0xa030c:
+.Brent:
farwritetext UnknownText_0x6618c
keeptextopen
end
-UnknownScript_0xa0312:
+.Vance:
farwritetext UnknownText_0x669ed
keeptextopen
end
-UnknownScript_0xa0318:
+.Wilton:
farwritetext UnknownText_0x66b8f
keeptextopen
end
-UnknownScript_0xa031e:
+.Parry:
farwritetext UnknownText_0x67001
keeptextopen
end
UnknownScript_0xa0324:
checkcode VAR_CALLERID
- if_equal $6, UnknownScript_0xa0346
- if_equal $c, UnknownScript_0xa034c
- if_equal $e, UnknownScript_0xa0352
- if_equal $12, UnknownScript_0xa0358
- if_equal $15, UnknownScript_0xa035e
- if_equal $1a, UnknownScript_0xa0364
- if_equal $1f, UnknownScript_0xa036a
- if_equal $24, UnknownScript_0xa0370
-
-UnknownScript_0xa0346:
+ if_equal PHONE_POKEFAN_BEVERLY, .Beverly
+ if_equal PHONE_COOLTRAINERF_BETH, .Beth
+ if_equal PHONE_COOLTRAINERF_REENA, .Reena
+ if_equal PHONE_PICNICKER_LIZ, .Liz
+ if_equal PHONE_PICNICKER_GINA, .Gina
+ if_equal PHONE_LASS_DANA, .Dana
+ if_equal PHONE_PICNICKER_TIFFANY, .Tiffany
+ if_equal PHONE_PICNICKER_ERIN, .Erin
+
+.Beverly:
farwritetext UnknownText_0x174734
keeptextopen
end
-UnknownScript_0xa034c:
+.Beth:
farwritetext UnknownText_0x174d86
keeptextopen
end
-UnknownScript_0xa0352:
+.Reena:
farwritetext UnknownText_0x1753c5
keeptextopen
end
-UnknownScript_0xa0358:
+.Liz:
farwritetext UnknownText_0x176095
keeptextopen
end
-UnknownScript_0xa035e:
+.Gina:
farwritetext UnknownText_0x177297
keeptextopen
end
-UnknownScript_0xa0364:
+.Dana:
farwritetext UnknownText_0x6501c
keeptextopen
end
-UnknownScript_0xa036a:
+.Tiffany:
farwritetext UnknownText_0x66688
keeptextopen
end
-UnknownScript_0xa0370:
+.Erin:
farwritetext UnknownText_0x671eb
keeptextopen
end
@@ -532,150 +532,150 @@ UnknownScript_0xa037e:
UnknownScript_0xa0386:
checkcode VAR_CALLERID
- if_equal $5, UnknownScript_0xa03cc
- if_equal $7, UnknownScript_0xa03d2
- if_equal $b, UnknownScript_0xa03d8
- if_equal $d, UnknownScript_0xa03de
- if_equal $f, UnknownScript_0xa03e4
- if_equal $10, UnknownScript_0xa03ea
- if_equal $11, UnknownScript_0xa03f0
- if_equal $13, UnknownScript_0xa03f6
- if_equal $14, UnknownScript_0xa03fc
- if_equal $17, UnknownScript_0xa0402
- if_equal $18, UnknownScript_0xa0408
- if_equal $1b, UnknownScript_0xa040e
- if_equal $1d, UnknownScript_0xa0414
- if_equal $1e, UnknownScript_0xa041a
- if_equal $20, UnknownScript_0xa0420
- if_equal $21, UnknownScript_0xa0426
- if_equal $23, UnknownScript_0xa042c
-
-UnknownScript_0xa03cc:
+ if_equal PHONE_SCHOOLBOY_JACK, .Jack
+ if_equal PHONE_SAILOR_HUEY, .Huey
+ if_equal PHONE_COOLTRAINERM_GAVEN, .Gaven
+ if_equal PHONE_BIRDKEEPER_JOSE, .Jose
+ if_equal PHONE_YOUNGSTER_JOEY, .Joey
+ if_equal PHONE_BUG_CATCHER_WADE, .Wade
+ if_equal PHONE_FISHER_RALPH, .Ralph
+ if_equal PHONE_HIKER_ANTHONY, .Anthony
+ if_equal PHONE_CAMPER_TODD, .Todd
+ if_equal PHONE_BUG_CATCHER_ARNIE, .Arnie
+ if_equal PHONE_SCHOOLBOY_ALAN, .Alan
+ if_equal PHONE_SCHOOLBOY_CHAD, .Chad
+ if_equal PHONE_FISHER_TULLY, .Tully
+ if_equal PHONE_POKEMANIAC_BRENT, .Brent
+ if_equal PHONE_BIRDKEEPER_VANCE, .Vance
+ if_equal PHONE_FISHER_WILTON, .Wilton
+ if_equal PHONE_HIKER_PARRY, .Parry
+
+.Jack:
farwritetext UnknownText_0x1741e1
keeptextopen
end
-UnknownScript_0xa03d2:
+.Huey:
farwritetext UnknownText_0x1748ea
keeptextopen
end
-UnknownScript_0xa03d8:
+.Gaven:
farwritetext UnknownText_0x174bc5
keeptextopen
end
-UnknownScript_0xa03de:
+.Jose:
farwritetext UnknownText_0x17507d
keeptextopen
end
-UnknownScript_0xa03e4:
+.Joey:
farwritetext UnknownText_0x175693
keeptextopen
end
-UnknownScript_0xa03ea:
+.Wade:
farwritetext UnknownText_0x175976
keeptextopen
end
-UnknownScript_0xa03f0:
+.Ralph:
farwritetext UnknownText_0x175d40
keeptextopen
end
-UnknownScript_0xa03f6:
+.Anthony:
farwritetext UnknownText_0x176bee
keeptextopen
end
-UnknownScript_0xa03fc:
+.Todd:
farwritetext UnknownText_0x176f60
keeptextopen
end
-UnknownScript_0xa0402:
+.Arnie:
farwritetext UnknownText_0x64ada
keeptextopen
end
-UnknownScript_0xa0408:
+.Alan:
farwritetext UnknownText_0x64da4
keeptextopen
end
-UnknownScript_0xa040e:
+.Chad:
farwritetext UnknownText_0x65419
keeptextopen
end
-UnknownScript_0xa0414:
+.Tully:
farwritetext UnknownText_0x65f17
keeptextopen
end
-UnknownScript_0xa041a:
+.Brent:
farwritetext UnknownText_0x66214
keeptextopen
end
-UnknownScript_0xa0420:
+.Vance:
farwritetext UnknownText_0x66a3a
keeptextopen
end
-UnknownScript_0xa0426:
+.Wilton:
farwritetext UnknownText_0x66bf3
keeptextopen
end
-UnknownScript_0xa042c:
+.Parry:
farwritetext UnknownText_0x67096
keeptextopen
end
UnknownScript_0xa0432:
checkcode VAR_CALLERID
- if_equal $c, UnknownScript_0xa0450
- if_equal $e, UnknownScript_0xa0456
- if_equal $12, UnknownScript_0xa045c
- if_equal $15, UnknownScript_0xa0462
- if_equal $1a, UnknownScript_0xa0468
- if_equal $1f, UnknownScript_0xa046e
- if_equal $24, UnknownScript_0xa0474
-
-UnknownScript_0xa0450:
+ if_equal PHONE_COOLTRAINERF_BETH, .Beth
+ if_equal PHONE_COOLTRAINERF_REENA, .Reena
+ if_equal PHONE_PICNICKER_LIZ, .Liz
+ if_equal PHONE_PICNICKER_GINA, .Gina
+ if_equal PHONE_LASS_DANA, .Dana
+ if_equal PHONE_PICNICKER_TIFFANY, .Tiffany
+ if_equal PHONE_PICNICKER_ERIN, .Erin
+
+.Beth:
farwritetext UnknownText_0x174e4e
keeptextopen
end
-UnknownScript_0xa0456:
+.Reena:
farwritetext UnknownText_0x17543a
keeptextopen
end
-UnknownScript_0xa045c:
+.Liz:
farwritetext UnknownText_0x17610a
keeptextopen
end
-UnknownScript_0xa0462:
+.Gina:
farwritetext UnknownText_0x1772e2
keeptextopen
end
-UnknownScript_0xa0468:
+.Dana:
farwritetext UnknownText_0x65091
keeptextopen
end
-UnknownScript_0xa046e:
+.Tiffany:
farwritetext UnknownText_0x66730
keeptextopen
end
-UnknownScript_0xa0474:
+.Erin:
farwritetext UnknownText_0x6722e
keeptextopen
end
@@ -690,147 +690,147 @@ UnknownScript_0xa047f:
UnknownScript_0xa0484:
checkcode VAR_CALLERID
- if_equal $5, UnknownScript_0xa04d6
- if_equal $7, UnknownScript_0xa04db
- if_equal $b, UnknownScript_0xa04e0
- if_equal $d, UnknownScript_0xa04e5
- if_equal $f, UnknownScript_0xa04ea
- if_equal $10, UnknownScript_0xa04ef
- if_equal $11, UnknownScript_0xa04f4
- if_equal $13, UnknownScript_0xa04f9
- if_equal $14, UnknownScript_0xa04fe
- if_equal $16, UnknownScript_0xa0503
- if_equal $17, UnknownScript_0xa0508
- if_equal $18, UnknownScript_0xa050d
- if_equal $1b, UnknownScript_0xa0512
- if_equal $1c, UnknownScript_0xa0517
- if_equal $1d, UnknownScript_0xa051c
- if_equal $1e, UnknownScript_0xa0521
- if_equal $20, UnknownScript_0xa0526
- if_equal $21, UnknownScript_0xa052b
- if_equal $22, UnknownScript_0xa0530
- if_equal $23, UnknownScript_0xa0535
-
-UnknownScript_0xa04d6:
+ if_equal PHONE_SCHOOLBOY_JACK, .Jack
+ if_equal PHONE_SAILOR_HUEY, .Huey
+ if_equal PHONE_COOLTRAINERM_GAVEN, .Gaven
+ if_equal PHONE_BIRDKEEPER_JOSE, .Jose
+ if_equal PHONE_YOUNGSTER_JOEY, .Joey
+ if_equal PHONE_BUG_CATCHER_WADE, .Wade
+ if_equal PHONE_FISHER_RALPH, .Ralph
+ if_equal PHONE_HIKER_ANTHONY, .Anthony
+ if_equal PHONE_CAMPER_TODD, .Todd
+ if_equal PHONE_JUGGLER_IRWIN, .Irwin
+ if_equal PHONE_BUG_CATCHER_ARNIE, .Arnie
+ if_equal PHONE_SCHOOLBOY_ALAN, .Alan
+ if_equal PHONE_SCHOOLBOY_CHAD, .Chad
+ if_equal PHONE_POKEFANM_DEREK, .Derek
+ if_equal PHONE_FISHER_TULLY, .Tully
+ if_equal PHONE_POKEMANIAC_BRENT, .Brent
+ if_equal PHONE_BIRDKEEPER_VANCE, .Vance
+ if_equal PHONE_FISHER_WILTON, .Wilton
+ if_equal PHONE_BLACKBELT_KENJI, .Kenji
+ if_equal PHONE_HIKER_PARRY, .Parry
+
+.Jack:
farwritetext UnknownText_0x174251
end
-UnknownScript_0xa04db:
+.Huey:
farwritetext UnknownText_0x174962
end
-UnknownScript_0xa04e0:
+.Gaven:
farwritetext UnknownText_0x174c0e
end
-UnknownScript_0xa04e5:
+.Jose:
farwritetext UnknownText_0x175106
end
-UnknownScript_0xa04ea:
+.Joey:
farwritetext UnknownText_0x17570a
end
-UnknownScript_0xa04ef:
+.Wade:
farwritetext UnknownText_0x1759e7
end
-UnknownScript_0xa04f4:
+.Ralph:
farwritetext UnknownText_0x175db7
end
-UnknownScript_0xa04f9:
+.Anthony:
farwritetext UnknownText_0x176c47
end
-UnknownScript_0xa04fe:
+.Todd:
farwritetext UnknownText_0x176fdb
end
-UnknownScript_0xa0503:
+.Irwin:
farwritetext UnknownText_0x64000
end
-UnknownScript_0xa0508:
+.Arnie:
farwritetext UnknownText_0x64b48
end
-UnknownScript_0xa050d:
+.Alan:
farwritetext UnknownText_0x64e1f
end
-UnknownScript_0xa0512:
+.Chad:
farwritetext UnknownText_0x65471
end
-UnknownScript_0xa0517:
+.Derek:
farwritetext UnknownText_0x65c4e
end
-UnknownScript_0xa051c:
+.Tully:
farwritetext UnknownText_0x65f6e
end
-UnknownScript_0xa0521:
+.Brent:
farwritetext UnknownText_0x662a9
end
-UnknownScript_0xa0526:
+.Vance:
farwritetext UnknownText_0x66a93
end
-UnknownScript_0xa052b:
+.Wilton:
farwritetext UnknownText_0x66c58
end
-UnknownScript_0xa0530:
+.Kenji:
farwritetext UnknownText_0x66dab
end
-UnknownScript_0xa0535:
+.Parry:
farwritetext UnknownText_0x670eb
end
UnknownScript_0xa053a:
checkcode VAR_CALLERID
- if_equal $6, UnknownScript_0xa055c
- if_equal $c, UnknownScript_0xa0561
- if_equal $e, UnknownScript_0xa0566
- if_equal $12, UnknownScript_0xa056b
- if_equal $15, UnknownScript_0xa0570
- if_equal $1a, UnknownScript_0xa0575
- if_equal $1f, UnknownScript_0xa057a
- if_equal $24, UnknownScript_0xa057f
-
-UnknownScript_0xa055c:
+ if_equal PHONE_POKEFAN_BEVERLY, .Beverly
+ if_equal PHONE_COOLTRAINERF_BETH, .Beth
+ if_equal PHONE_COOLTRAINERF_REENA, .Reena
+ if_equal PHONE_PICNICKER_LIZ, .Liz
+ if_equal PHONE_PICNICKER_GINA, .Gina
+ if_equal PHONE_LASS_DANA, .Dana
+ if_equal PHONE_PICNICKER_TIFFANY, .Tiffany
+ if_equal PHONE_PICNICKER_ERIN, .Erin
+
+.Beverly:
farwritetext UnknownText_0x1747ac
end
-UnknownScript_0xa0561:
+.Beth:
farwritetext UnknownText_0x174eb7
end
-UnknownScript_0xa0566:
+.Reena:
farwritetext UnknownText_0x175488
end
-UnknownScript_0xa056b:
+.Liz:
farwritetext UnknownText_0x17620a
end
-UnknownScript_0xa0570:
+.Gina:
farwritetext UnknownText_0x177361
end
-UnknownScript_0xa0575:
+.Dana:
farwritetext UnknownText_0x650e2
end
-UnknownScript_0xa057a:
+.Tiffany:
farwritetext UnknownText_0x667f7
end
-UnknownScript_0xa057f:
+.Erin:
farwritetext UnknownText_0x67281
end
@@ -856,15 +856,15 @@ UnknownScript_0xa05a0:
UnknownScript_0xa05a4:
checkcode VAR_CALLERID
- if_equal $10, UnknownScript_0xa05ae
- if_equal $1c, UnknownScript_0xa05b6
+ if_equal PHONE_BUG_CATCHER_WADE, .Wade
+ if_equal PHONE_POKEFANM_DEREK, .Derek
-UnknownScript_0xa05ae:
+.Wade:
farwritetext UnknownText_0x1759f7
keeptextopen
jump UnknownScript_0xa0484
-UnknownScript_0xa05b6:
+.Derek:
farwritetext UnknownText_0x65c66
keeptextopen
jump UnknownScript_0xa0484
@@ -896,57 +896,57 @@ UnknownScript_0xa05de:
UnknownScript_0xa05e6:
checkcode VAR_CALLERID
- if_equal $d, UnknownScript_0xa0600
- if_equal $10, UnknownScript_0xa0605
- if_equal $18, UnknownScript_0xa060a
- if_equal $1c, UnknownScript_0xa060f
- if_equal $1d, UnknownScript_0xa0614
- if_equal $21, UnknownScript_0xa0619
-
-UnknownScript_0xa0600:
+ if_equal PHONE_BIRDKEEPER_JOSE, .Jose
+ if_equal PHONE_BUG_CATCHER_WADE, .Wade
+ if_equal PHONE_SCHOOLBOY_ALAN, .Alan
+ if_equal PHONE_POKEFANM_DEREK, .Derek
+ if_equal PHONE_FISHER_TULLY, .Tully
+ if_equal PHONE_FISHER_WILTON, .Wilton
+
+.Jose:
farwritetext UnknownText_0x175116
end
-UnknownScript_0xa0605:
+.Wade:
farwritetext UnknownText_0x175a60
end
-UnknownScript_0xa060a:
+.Alan:
farwritetext UnknownText_0x64e2f
end
-UnknownScript_0xa060f:
+.Derek:
farwritetext UnknownText_0x65cf9
end
-UnknownScript_0xa0614:
+.Tully:
farwritetext UnknownText_0x65f88
end
-UnknownScript_0xa0619:
+.Wilton:
farwritetext UnknownText_0x66c6b
end
UnknownScript_0xa061e:
checkcode VAR_CALLERID
- if_equal $6, UnknownScript_0xa0630
- if_equal $15, UnknownScript_0xa0635
- if_equal $1a, UnknownScript_0xa063a
- if_equal $1f, UnknownScript_0xa063f
+ if_equal PHONE_POKEFAN_BEVERLY, .Beverly
+ if_equal PHONE_PICNICKER_GINA, .Gina
+ if_equal PHONE_LASS_DANA, .Dana
+ if_equal PHONE_PICNICKER_TIFFANY, .Tiffany
-UnknownScript_0xa0630:
+.Beverly:
farwritetext UnknownText_0x1747cc
end
-UnknownScript_0xa0635:
+.Gina:
farwritetext UnknownText_0x1773e7
end
-UnknownScript_0xa063a:
+.Dana:
farwritetext UnknownText_0x650ec
end
-UnknownScript_0xa063f:
+.Tiffany:
farwritetext UnknownText_0x66801
end
diff --git a/engine/movement.asm b/engine/movement.asm
index 21dd89e9f..86a2eb6fb 100644
--- a/engine/movement.asm
+++ b/engine/movement.asm
@@ -59,7 +59,7 @@ MovementPointers: ; 5075
dw Movement_39 ; 39
dw Movement_remove_fixed_facing ; 3a
dw Movement_fix_facing ; 3b
- dw Movement_3c ; 3c
+ dw Movement_show_person ; 3c
dw Movement_hide_person ; 3d
dw Movement_step_sleep_1 ; 3e
dw Movement_step_sleep_2 ; 3f
@@ -78,8 +78,8 @@ MovementPointers: ; 5075
dw Movement_teleport_from ; 4c
dw Movement_teleport_to ; 4d
dw Movement_skyfall ; 4e
- dw Movement_step_wait5 ; 4f
- dw Movement_50 ; 50
+ dw Movement_step_dig ; 4f
+ dw Movement_step_bump ; 50
dw Movement_fish_got_bite ; 51
dw Movement_fish_cast_rod ; 52
dw Movement_hide_emote ; 53
@@ -87,67 +87,67 @@ MovementPointers: ; 5075
dw Movement_step_shake ; 55
dw Movement_56 ; 56
dw Movement_rock_smash ; 57
- dw Movement_58 ; 58
+ dw Movement_return_dig ; 58
dw Movement_59 ; 59
; 5129
Movement_teleport_from: ; 5129
- ld hl, OBJECT_09
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $c
+ ld [hl], STEP_TYPE_TELEPORT_FROM
ret
; 5130
Movement_teleport_to: ; 5130
- ld hl, OBJECT_09
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $d
+ ld [hl], STEP_TYPE_TELEPORT_TO
ret
; 5137
Movement_skyfall: ; 5137
- ld hl, OBJECT_09
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $e
+ ld [hl], STEP_TYPE_SKYFALL
ret
; 513e
Movement_59: ; 513e
- ld hl, OBJECT_09
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $19
+ ld [hl], STEP_TYPE_19
ret
; 5145
-Movement_step_wait5: ; 5145
+Movement_step_dig: ; 5145
call GetSpriteDirection
rlca
rlca
- ld hl, OBJECT_12
+ ld hl, OBJECT_STEP_FRAME
add hl, bc
ld [hl], a
- ld hl, OBJECT_11
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], $4
+ ld [hl], PERSON_ACTION_SPIN
call GetMovementByte
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], a
- ld hl, OBJECT_09
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $3
+ ld [hl], STEP_TYPE_03
ld hl, OBJECT_DIRECTION_WALKING
add hl, bc
ld [hl], STANDING
ret
; 516a
-Movement_58: ; 516a
+Movement_return_dig: ; 516a
call GetSpriteDirection
rlca
rlca
- ld hl, OBJECT_12
+ ld hl, OBJECT_STEP_FRAME
add hl, bc
ld [hl], a
call GetMovementByte
@@ -157,19 +157,19 @@ Movement_58: ; 516a
ld hl, OBJECT_DIRECTION_WALKING
add hl, bc
ld [hl], STANDING
- ld hl, OBJECT_09
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $12
+ ld [hl], STEP_TYPE_RETURN_DIG
ret
; 5189
Movement_fish_got_bite: ; 5189
- ld hl, OBJECT_11
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], $6
- ld hl, OBJECT_09
+ ld [hl], PERSON_ACTION_FISHING
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $10
+ ld [hl], STEP_TYPE_GOT_BITE
ret
; 5196
@@ -178,22 +178,22 @@ Movement_rock_smash: ; 5196
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], a
- ld hl, OBJECT_11
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], $1
- ld hl, OBJECT_09
+ ld [hl], PERSON_ACTION_STAND
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $11
+ ld [hl], STEP_TYPE_ROCK_SMASH
ret
; 51ab
Movement_fish_cast_rod: ; 51ab
- ld hl, OBJECT_11
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], $6
- ld hl, OBJECT_09
+ ld [hl], PERSON_ACTION_FISHING
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $1
+ ld [hl], STEP_TYPE_STANDING
ret
; 51b8
@@ -217,9 +217,9 @@ Movement_step_end: ; 51c1
ld hl, VramState
res 7, [hl]
- ld hl, OBJECT_09
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $1
+ ld [hl], STEP_TYPE_STANDING
ret
; 51db
@@ -238,9 +238,9 @@ Movement_48: ; 51db
add hl, bc
ld [hl], a
- ld hl, OBJECT_09
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $3
+ ld [hl], STEP_TYPE_03
ld hl, VramState
res 7, [hl]
@@ -262,13 +262,13 @@ Movement_remove_person: ; 51fd
; 5210
Movement_4b: ; 5210
- ld hl, OBJECT_11
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], $1
+ ld [hl], PERSON_ACTION_STAND
- ld hl, OBJECT_09
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $4
+ ld [hl], STEP_TYPE_04
ld hl, VramState
res 7, [hl]
@@ -276,56 +276,56 @@ Movement_4b: ; 5210
; 5222
Movement_step_sleep_1: ; 5222
- ld a, $1
- jr Function5247
+ ld a, 1
+ jr Movement_step_sleep_common
Movement_step_sleep_2: ; 5226
- ld a, $2
- jr Function5247
+ ld a, 2
+ jr Movement_step_sleep_common
Movement_step_sleep_3: ; 522a
- ld a, $3
- jr Function5247
+ ld a, 3
+ jr Movement_step_sleep_common
Movement_step_sleep_4: ; 522e
- ld a, $4
- jr Function5247
+ ld a, 4
+ jr Movement_step_sleep_common
Movement_step_sleep_5: ; 5232
- ld a, $5
- jr Function5247
+ ld a, 5
+ jr Movement_step_sleep_common
Movement_step_sleep_6: ; 5236
- ld a, $6
- jr Function5247
+ ld a, 6
+ jr Movement_step_sleep_common
Movement_step_sleep_7: ; 523a
- ld a, $7
- jr Function5247
+ ld a, 7
+ jr Movement_step_sleep_common
Movement_step_sleep_8: ; 523e
- ld a, $8
- jr Function5247
+ ld a, 8
+ jr Movement_step_sleep_common
Movement_step_sleep: ; 5242
; parameters:
; duration (DecimalParam)
call GetMovementByte
- jr Function5247
+ jr Movement_step_sleep_common
-Function5247: ; 5247
+Movement_step_sleep_common: ; 5247
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], a
- ld hl, OBJECT_09
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $3
+ ld [hl], STEP_TYPE_03
- ld hl, OBJECT_11
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], $1
+ ld [hl], PERSON_ACTION_STAND
ld hl, OBJECT_DIRECTION_WALKING
add hl, bc
@@ -333,17 +333,20 @@ Function5247: ; 5247
ret
; 525f
-Movement_50: ; 525f
- ld a, $1
+Movement_step_bump: ; 525f
+ ld a, 1
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], a
- ld hl, OBJECT_09
+
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $b
- ld hl, OBJECT_11
+ ld [hl], STEP_TYPE_BUMP
+
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], $3
+ ld [hl], PERSON_ACTION_BUMP
+
ld hl, OBJECT_DIRECTION_WALKING
add hl, bc
ld [hl], STANDING
@@ -351,16 +354,19 @@ Movement_50: ; 525f
; 5279
Movement_56: ; 5279
- ld a, $18
+ ld a, 24
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], a
- ld hl, OBJECT_09
+
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $3
- ld hl, OBJECT_11
+ ld [hl], STEP_TYPE_03
+
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], $b
+ ld [hl], PERSON_ACTION_0B
+
ld hl, OBJECT_DIRECTION_WALKING
add hl, bc
ld [hl], STANDING
@@ -370,52 +376,52 @@ Movement_56: ; 5279
Movement_38: ; 5293
ld hl, OBJECT_FLAGS1
add hl, bc
- res 3, [hl]
+ res SLIDING, [hl]
jp ContinueReadingMovement
; 529c
Movement_39: ; 529c
ld hl, OBJECT_FLAGS1
add hl, bc
- set 3, [hl]
+ set SLIDING, [hl]
jp ContinueReadingMovement
; 52a5
Movement_remove_fixed_facing: ; 52a5
ld hl, OBJECT_FLAGS1
add hl, bc
- res 2, [hl]
+ res FIXED_FACING, [hl]
jp ContinueReadingMovement
; 52ae
Movement_fix_facing: ; 52ae
ld hl, OBJECT_FLAGS1
add hl, bc
- set 2, [hl]
+ set FIXED_FACING, [hl]
jp ContinueReadingMovement
; 52b7
-Movement_3c: ; 52b7
+Movement_show_person: ; 52b7
ld hl, OBJECT_FLAGS1
add hl, bc
- res 0, [hl]
+ res INVISIBLE, [hl]
jp ContinueReadingMovement
; 52c0
Movement_hide_person: ; 52c0
ld hl, OBJECT_FLAGS1
add hl, bc
- set 0, [hl]
+ set INVISIBLE, [hl]
jp ContinueReadingMovement
; 52c9
Movement_hide_emote: ; 52c9
- call Function5579
+ call DespawnEmote
jp ContinueReadingMovement
; 52cf
Movement_show_emote: ; 52cf
- call Function5547
+ call SpawnEmote
jp ContinueReadingMovement
; 52d5
@@ -424,7 +430,7 @@ Movement_step_shake: ; 52d5
; displacement (DecimalParam)
call GetMovementByte
- call Function5565
+ call ShakeScreen
jp ContinueReadingMovement
; 52de
@@ -448,9 +454,11 @@ TurnHead: ; 52ee
ld hl, OBJECT_FACING
add hl, bc
ld [hl], a
- ld hl, OBJECT_11
+
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], $1
+ ld [hl], PERSON_ACTION_STAND
+
ld hl, OBJECT_DIRECTION_WALKING
add hl, bc
ld [hl], STANDING
@@ -721,70 +729,76 @@ HalfStep: ; 5400
ld hl, OBJECT_29
add hl, bc
ld [hl], a
- ld hl, OBJECT_11
+
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], $2
- ld hl, OBJECT_09
+ ld [hl], PERSON_ACTION_STEP
+
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $a
+ ld [hl], STEP_TYPE_HALF_STEP
ret
; 5412
NormalStep: ; 5412
call Function4690
call Function463f
- ld hl, OBJECT_11
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], $2
- ld hl, OBJECT_STANDING_TILE
+ ld [hl], PERSON_ACTION_STEP
+
+ ld hl, OBJECT_NEXT_TILE
add hl, bc
ld a, [hl]
call CheckSuperTallGrassTile
- jr z, .asm_542d
+ jr z, .shake_grass
- call Function1875
- jr c, .asm_5430
+ call CheckGrassTile
+ jr c, .skip_grass
-.asm_542d
- call Function5556
+.shake_grass
+ call ShakeGrass
-.asm_5430
- ld hl, wd4cf
+.skip_grass
+ ld hl, wCenteredObject
ld a, [hMapObjectIndexBuffer]
cp [hl]
- jr z, .asm_543f
+ jr z, .player
- ld hl, OBJECT_09
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $2
+ ld [hl], STEP_TYPE_NPC_WALK
ret
-.asm_543f
- ld hl, OBJECT_09
+.player
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $6
+ ld [hl], STEP_TYPE_PLAYER_WALK
ret
; 5446
TurningStep: ; 5446
call Function4690
call Function463f
- ld hl, OBJECT_11
+
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], $4
- ld hl, wd4cf
+ ld [hl], PERSON_ACTION_SPIN
+
+ ld hl, wCenteredObject
ld a, [hMapObjectIndexBuffer]
cp [hl]
- jr z, .asm_5461
- ld hl, OBJECT_09
+ jr z, .player
+
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $2
+ ld [hl], STEP_TYPE_NPC_WALK
ret
-.asm_5461
- ld hl, OBJECT_09
+.player
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $6
+ ld [hl], STEP_TYPE_PLAYER_WALK
ret
; 5468
@@ -792,22 +806,25 @@ TurningStep: ; 5446
SlideStep: ; 5468
call Function4690
call Function463f
- ld hl, OBJECT_11
+
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], $1
- ld hl, wd4cf
+ ld [hl], PERSON_ACTION_STAND
+
+ ld hl, wCenteredObject
ld a, [hMapObjectIndexBuffer]
cp [hl]
- jr z, .asm_5483
- ld hl, OBJECT_09
+ jr z, .player
+
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $2
+ ld [hl], STEP_TYPE_NPC_WALK
ret
-.asm_5483
- ld hl, OBJECT_09
+.player
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $6
+ ld [hl], STEP_TYPE_PLAYER_WALK
ret
; 548a
@@ -817,25 +834,30 @@ JumpStep: ; 548a
ld hl, OBJECT_31
add hl, bc
ld [hl], $0
+
ld hl, OBJECT_FLAGS2
add hl, bc
res 3, [hl]
- ld hl, OBJECT_11
+
+ ld hl, OBJECT_ACTION
add hl, bc
- ld [hl], $2
- call Function5529
- ld hl, wd4cf
+ ld [hl], PERSON_ACTION_STEP
+
+ call SpawnShadow
+
+ ld hl, wCenteredObject
ld a, [hMapObjectIndexBuffer]
cp [hl]
- jr z, .asm_54b1
- ld hl, OBJECT_09
+ jr z, .player
+
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $8
+ ld [hl], STEP_TYPE_NPC_JUMP
ret
-.asm_54b1
- ld hl, OBJECT_09
+.player
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $9
+ ld [hl], STEP_TYPE_PLAYER_JUMP
ret
; 54b8
diff --git a/engine/mysterygift.asm b/engine/mysterygift.asm
new file mode 100755
index 000000000..43cbe52d1
--- /dev/null
+++ b/engine/mysterygift.asm
@@ -0,0 +1,1702 @@
+DoMysteryGift: ; 1048ba (41:48ba)
+ call ClearTileMap
+ call ClearSprites
+ call WaitBGMap
+ call Function105153
+ hlcoord 3, 8
+ ld de, .String_PressAToLink_BToCancel
+ call PlaceString
+ call WaitBGMap
+ callba Function2c642
+ call Function1050fb
+ ld a, $2
+ ld [wca01], a
+ ld a, $14
+ ld [wca02], a
+ ld a, [rIE]
+ push af
+ call Function104a95
+ ld d, a
+ xor a
+ ld [rIF], a
+ pop af
+ ld [rIE], a
+ push de
+ call ClearTileMap
+ call EnableLCD
+ call WaitBGMap
+ ld b, SCGB_08
+ call GetSGBLayout
+ call SetPalettes
+ pop de
+ hlcoord 2, 8
+ ld a, d
+ ld de, .Text_LinkCanceled ; Link has been canceled
+ cp $10
+ jp z, .LinkCanceled
+ cp $6c
+ jp nz, .CommunicationError
+ ld a, [wc900]
+ cp $3
+ jr z, .skip_checks
+ call .CheckAlreadyGotFiveGiftsToday
+ ld hl, .Text_MaxFiveGifts ; Only 5 gifts a day
+ jp nc, .PrintTextAndExit
+ call .CheckAlreadyGotAGiftFromThatPerson
+ ld hl, .Text_MaxOneGiftPerPerson ; Only one gift a day per person
+ jp c, .PrintTextAndExit
+.skip_checks
+ ld a, [wc962]
+ and a
+ jp nz, .GiftWaiting
+ ld a, [wc912]
+ and a
+ jp nz, .FriendNotReady
+ ld a, [wc900]
+ cp $3
+ jr z, .skip_append_save
+ call .AddMysteryGiftPartnerID
+ ld a, [wc900]
+ cp $4
+ jr z, .skip_append_save
+ call .SaveMysteryGiftTrainerName
+ callba RestoreMobileEventIndex
+ callba MobileFn_1060a9
+ callba BackupMobileEventIndex
+.skip_append_save
+ ld a, [wc90f]
+ and a
+ jr z, .item
+ ld a, [wc911]
+ ld c, a
+ callba MysteryGiftGetDecoration
+ push bc
+ call Function105069
+ pop bc
+ jr nz, .item
+ callab GetDecorationName_c
+ ld h, d
+ ld l, e
+ ld de, StringBuffer1
+ ld bc, ITEM_NAME_LENGTH
+ call CopyBytes
+ ld hl, .Text_SentToHome ; sent decoration to home
+ jr .PrintTextAndExit
+
+.item
+ call GetMysteryGiftBank
+ ld a, [wc910]
+ ld c, a
+ callba MysteryGiftGetItemHeldEffect
+ ld a, c
+ ld [sBackupMysteryGiftItem], a
+ ld [wNamedObjectIndexBuffer], a
+ call CloseSRAM
+ call GetItemName
+ ld hl, .Text_Sent ; sent item
+ jr .PrintTextAndExit
+
+.LinkCanceled: ; 1049af (41:49af)
+ ld hl, .Text_LinkCanceled ; Link has been canceled
+ jr .PrintTextAndExit
+
+.CommunicationError: ; 1049b4 (41:49b4)
+ ld hl, .Text_CommunicationError ; Communication error
+ call PrintText
+ jp DoMysteryGift
+
+.GiftWaiting: ; 1049bd (41:49bd)
+ ld hl, .Text_ReceiveGiftAtCounter ; receive gift at counter
+ jr .PrintTextAndExit
+
+.FriendNotReady: ; 1049c2 (41:49c2)
+ ld hl, .Text_FriendNotReady ; friend not ready
+
+.PrintTextAndExit: ; 1049c5 (41:49c5)
+ call PrintText
+ ld a, $e3
+ ld [rLCDC], a
+ ret
+; 1049cd (41:49cd)
+
+.String_PressAToLink_BToCancel: ; 1049cd
+ db "Press A to"
+ next "link IR-Device"
+ next "Press B to"
+ next "cancel it."
+ db "@"
+; 1049fd
+
+.Text_LinkCanceled: ; 1049fd
+ text_jump UnknownText_0x1c0436
+ db "@"
+; 104a02
+
+.Text_CommunicationError: ; 104a02
+ text_jump UnknownText_0x1c0454
+ db "@"
+; 104a07
+
+.Text_ReceiveGiftAtCounter: ; 104a07
+ text_jump UnknownText_0x1c046a
+ db "@"
+; 104a0c
+
+.Text_FriendNotReady: ; 104a0c
+ text_jump UnknownText_0x1c048e
+ db "@"
+; 104a11
+
+.Text_MaxFiveGifts: ; 104a11
+ text_jump UnknownText_0x1c04a7
+ db "@"
+; 104a16
+
+.Text_MaxOneGiftPerPerson: ; 104a16
+ text_jump UnknownText_0x1c04c6
+ db "@"
+; 104a1b
+
+.Text_Sent: ; 104a1b
+ text_jump UnknownText_0x1c04e9
+ db "@"
+; 104a20
+
+.Text_SentToHome: ; 104a20
+ text_jump UnknownText_0x1c04fa
+ db "@"
+; 104a25
+
+.CheckAlreadyGotFiveGiftsToday: ; 104a25 (41:4a25)
+ call GetMysteryGiftBank
+ ld a, [sNumDailyMysteryGiftPartnerIDs]
+ cp $5
+ jp CloseSRAM
+
+.CheckAlreadyGotAGiftFromThatPerson: ; 104a30 (41:4a30)
+ call GetMysteryGiftBank
+ ld a, [wMysteryGiftPartnerID]
+ ld b, a
+ ld a, [wMysteryGiftPartnerID + 1]
+ ld c, a
+ ld a, [sNumDailyMysteryGiftPartnerIDs]
+ ld d, a
+ ld hl, sDailyMysteryGiftPartnerIDs
+.loop
+ ld a, d
+ and a
+ jr z, .No
+ ld a, [hli]
+ cp b
+ jr nz, .skip
+ ld a, [hl]
+ cp c
+ jr z, .Yes
+.skip
+ inc hl
+ dec d
+ jr .loop
+.Yes
+ scf
+.No
+ jp CloseSRAM
+
+.AddMysteryGiftPartnerID: ; 104a56 (41:4a56)
+ call GetMysteryGiftBank
+ ld hl, sNumDailyMysteryGiftPartnerIDs
+ ld a, [hl]
+ inc [hl]
+ ld hl, sDailyMysteryGiftPartnerIDs ; inc hl
+ ld e, a
+ ld d, $0
+rept 2
+ add hl, de
+endr
+ ld a, [wMysteryGiftPartnerID]
+ ld [hli], a
+ ld a, [wMysteryGiftPartnerID + 1]
+ ld [hl], a
+ jp CloseSRAM
+
+.SaveMysteryGiftTrainerName: ; 104a71 (41:4a71)
+ call GetMysteryGiftBank
+ ld a, $1
+ ld [sMysteryGiftTrainerHouseFlag], a
+ ld hl, wMysteryGiftPartnerName
+ ld de, sMysteryGiftPartnerName
+ ld bc, NAME_LENGTH
+ call CopyBytes
+ ld a, $1
+ ld [de], a
+ inc de
+ ld hl, wMysteryGiftTrainerData
+ ld bc, (1 + 1 + NUM_MOVES) * PARTY_LENGTH + 2
+ call CopyBytes
+ jp CloseSRAM
+
+Function104a95: ; 104a95 (41:4a95)
+ di
+ callba ClearChannels
+ call Function104d5e
+.loop2
+ call Function104d96
+ call Function104ddd
+ ld a, [hPrintNum10]
+ cp $10
+ jp z, Function104bd0
+ cp $6c
+ jr nz, .loop2
+ ld a, [hPrintNum9]
+ cp $2
+ jr z, Function104b22
+ ld hl, $ffb3
+ ld b, $1
+ call Function104d56
+ jr nz, .ly_loop
+ call Function104b49
+ jp nz, Function104bd0
+ jr asm_104b0a
+.ly_loop
+ ld a, [rLY]
+ cp $90
+ jr c, .ly_loop
+ ld c, rRP % $100
+ ld a, $c0
+ ld [$ff00+c], a
+ ld b, $f0
+.loop3
+ push bc
+ call Function105038
+ ld b, $2
+ ld c, rRP % $100
+.ly_loop2
+ ld a, [$ff00+c]
+ and b
+ ld b, a
+ ld a, [rLY]
+ cp $90
+ jr nc, .ly_loop2
+.ly_loop3
+ ld a, [$ff00+c]
+ and b
+ ld b, a
+ ld a, [rLY]
+ cp $90
+ jr c, .ly_loop3
+ ld a, b
+ pop bc
+ dec b
+ jr z, .loop2
+ or a
+ jr nz, .loop2
+ ld a, [hMoneyTemp + 1]
+ bit 1, a
+ jr z, .loop3
+ ld a, $10
+ ld [hPrintNum10], a
+ jp Function104bd0
+
+Function104b04: ; 104b04 (41:4b04)
+ call Function104b40
+ jp nz, Function104bd0
+
+asm_104b0a: ; 104b0a (41:4b0a)
+ call Function104d38
+ jp nz, Function104bd0
+ call Function104b88
+ jp nz, Function104bd0
+ call Function104d43
+ jp nz, Function104bd0
+ call Function105033
+ jp Function104bd0
+
+Function104b22: ; 104b22 (41:4b22)
+ call Function104b88
+ jp nz, Function104bd0
+ call Function104d43
+ jp nz, Function104bd0
+ call Function104b40
+ jp nz, Function104bd0
+ call Function104d38
+ jp nz, Function104bd0
+ call Function10502e
+ jp Function104bd0
+
+Function104b40: ; 104b40 (41:4b40)
+ ld hl, $ffb3
+ ld b, $1
+ call Function104d56
+ ret nz
+
+Function104b49: ; 104b49 (41:4b49)
+ call Function105033
+ ld a, [hPrintNum10]
+ cp $6c
+ ret nz
+ ld a, [$ffb3]
+ cp $96
+ jp nz, Function104d32
+ ld a, $90
+ ld [$ffb3], a
+ call Function104d38
+ ret nz
+ ld hl, $ffb3
+ ld b, $1
+ call Function104d4e
+ ret nz
+ call Function10502e
+ ld a, [hPrintNum10]
+ cp $6c
+ ret nz
+ call Function104d43
+ ret nz
+ ld hl, wMysteryGiftTrainerData
+ ld a, [wca02]
+ ld b, a
+ call Function104d56
+ ret nz
+ call Function105033
+ ld a, [hPrintNum10]
+ cp $6c
+ ret
+
+Function104b88: ; 104b88 (41:4b88)
+ ld a, $96
+ ld [$ffb3], a
+ ld hl, $ffb3
+ ld b, $1
+ call Function104d4e
+ ret nz
+ call Function10502e
+ ld a, [hPrintNum10]
+ cp $6c
+ ret nz
+ call Function104d43
+ ret nz
+ ld hl, $ffb3
+ ld b, $1
+ call Function104d56
+ ret nz
+ call Function105033
+ ld a, [hPrintNum10]
+ cp $6c
+ ret nz
+ ld a, [$ffb3]
+ cp $90
+ jp nz, Function104d32
+ call Function104d38
+ ret nz
+ ld hl, OverworldMap
+ ld a, [wca02]
+ ld b, a
+ call Function104d4e
+ ret nz
+ call Function10502e
+ ld a, [hPrintNum10]
+ cp $6c
+ ret
+
+Function104bd0: ; 104bd0 (41:4bd0)
+ nop
+ ld a, [hPrintNum10]
+ cp $10
+ jr z, .asm_104c18
+ cp $6c
+ jr nz, .asm_104c18
+ ld hl, wca01
+ dec [hl]
+ jr z, .asm_104c18
+ ld hl, wMysteryGiftTrainerData
+ ld de, wc900
+ ld bc, $14
+ call CopyBytes
+ ld a, [wMysteryGiftTrainerData]
+ cp $3
+ jr nc, .asm_104c18
+ callba Function10510b
+ call Function1050fb
+ ld a, $26
+ ld [wca02], a
+ ld a, [hPrintNum9]
+ cp $2
+ jr z, .asm_104c10
+ call Function104d43
+ jr nz, Function104bd0
+ jp Function104b04
+.asm_104c10
+ call Function104d38
+ jr nz, Function104bd0
+ jp Function104b22
+.asm_104c18
+ ld a, [hPrintNum10]
+ push af
+ call Function104da0
+ xor a
+ ld [rIF], a
+ ld a, [rIE]
+ or $1
+ ld [rIE], a
+ ei
+ call DelayFrame
+ pop af
+ ret
+
+Function104c2d: ; 104c2d (41:4c2d)
+ di
+ callba ClearChannels
+ call Function104d5e
+.asm_104c37
+ call Function104d96
+ call Function104ddd
+ ld a, [hPrintNum10]
+ cp $10
+ jp z, Function104d1c
+ cp $6c
+ jr nz, .asm_104c37
+ ld a, [hPrintNum9]
+ cp $2
+ jr z, .asm_104c6c
+ call Function104c8a
+ jp nz, Function104d1c
+ call Function104d38
+ jp nz, Function104d1c
+ call Function104cd2
+ jp nz, Function104d1c
+ call Function104d43
+ jp nz, Function104d1c
+ call Function105033
+ jp Function104d1c
+.asm_104c6c
+ call Function104cd2
+ jp nz, Function104d1c
+ call Function104d43
+ jp nz, Function104d1c
+ call Function104c8a
+ jp nz, Function104d1c
+ call Function104d38
+ jp nz, Function104d1c
+ call Function10502e
+ jp Function104d1c
+
+Function104c8a: ; 104c8a (41:4c8a)
+ ld hl, $ffb3
+ ld b, $1
+ call Function104d56
+ ret nz
+ call Function105033
+ ld a, [hPrintNum10]
+ cp $6c
+ ret nz
+ ld a, [$ffb3]
+ cp $3c
+ jp nz, Function104d32
+ swap a
+ ld [$ffb3], a
+ call Function104d38
+ ret nz
+ ld hl, $ffb3
+ ld b, $1
+ call Function104d4e
+ ret nz
+ call Function10502e
+ ld a, [hPrintNum10]
+ cp $6c
+ ret nz
+ call Function104d43
+ ret nz
+ ld hl, wMysteryGiftTrainerData
+ ld a, [wca02]
+ ld b, a
+ call Function104d56
+ ret nz
+ call Function105033
+ ld a, [hPrintNum10]
+ cp $6c
+ ret
+
+Function104cd2: ; 104cd2 (41:4cd2)
+ ld a, $3c
+ ld [$ffb3], a
+ ld hl, $ffb3
+ ld b, $1
+ call Function104d4e
+ ret nz
+ call Function10502e
+ ld a, [hPrintNum10]
+ cp $6c
+ ret nz
+ call Function104d43
+ ret nz
+ ld hl, $ffb3
+ ld b, $1
+ call Function104d56
+ ret nz
+ call Function105033
+ ld a, [hPrintNum10]
+ cp $6c
+ ret nz
+ ld a, [$ffb3]
+ swap a
+ cp $3c
+ jp nz, Function104d32
+ call Function104d38
+ ret nz
+ ld hl, OverworldMap
+ ld a, [wca02]
+ ld b, a
+ call Function104d4e
+ ret nz
+ call Function10502e
+ ld a, [hPrintNum10]
+ cp $6c
+ ret
+
+Function104d1c: ; 104d1c (41:4d1c)
+ nop
+ ld a, [hPrintNum10]
+ push af
+ call Function104da0
+ xor a
+ ld [rIF], a
+ ld a, [rIE]
+ or $1
+ ld [rIE], a
+ ei
+ call DelayFrame
+ pop af
+ ret
+
+Function104d32: ; 104d32 (41:4d32)
+ ld a, $80
+ ld [hPrintNum10], a
+ and a
+ ret
+
+Function104d38: ; 104d38 (41:4d38)
+ call Function104d96
+ call Function104e46
+ ld a, [hPrintNum10]
+ cp $6c
+ ret
+
+Function104d43: ; 104d43 (41:4d43)
+ call Function104d96
+ call Function104dfe
+ ld a, [hPrintNum10]
+ cp $6c
+ ret
+
+Function104d4e: ; 104d4e (41:4d4e)
+ call Function104e93
+ ld a, [hPrintNum10]
+ cp $6c
+ ret
+
+Function104d56: ; 104d56 (41:4d56)
+ call Function104f57
+ ld a, [hPrintNum10]
+ cp $6c
+ ret
+
+Function104d5e: ; 104d5e (41:4d5e)
+ call Function104d74
+ ld a, $4
+ ld [rIE], a
+ xor a
+ ld [rIF], a
+ call Function104d96
+ xor a
+ ld b, a
+.asm_104d6d
+ inc a
+ jr nz, .asm_104d6d
+ inc b
+ jr nz, .asm_104d6d
+ ret
+
+Function104d74: ; 104d74 (41:4d74)
+ xor a
+ ld [rTAC], a
+ ld a, $fe
+ ld [rTMA], a
+ ld [rTIMA], a
+ ld a, $2
+ ld [rTAC], a
+ or $4
+ ld [rTAC], a
+ ret
+
+Function104d86: ; 104d86 (41:4d86)
+ xor a
+ ld [rTAC], a
+ ld [rTMA], a
+ ld [rTIMA], a
+ ld a, $2
+ ld [rTAC], a
+ or $4
+ ld [rTAC], a
+ ret
+
+Function104d96: ; 104d96 (41:4d96)
+ ld a, $c0
+ call Function104e8c
+ ld a, $1
+ ld [hPrintNum9], a
+ ret
+
+Function104da0: ; 104da0 (41:4da0)
+ xor a
+ call Function104e8c
+ ld a, $2
+ ld [rTAC], a
+ ret
+
+Function104da9: ; 104da9 (41:4da9)
+ inc d
+ ret z
+ xor a
+ ld [rIF], a
+ halt
+ ld a, [$ff00+c]
+ bit 1, a
+ jr z, Function104da9
+ or a
+ ret
+
+Function104db7: ; 104db7 (41:4db7)
+ inc d
+ ret z
+ xor a
+ ld [rIF], a
+ halt
+ ld a, [$ff00+c]
+ bit 1, a
+ jr nz, Function104db7
+ or a
+ ret
+
+Function104dc5: ; 104dc5 (41:4dc5)
+ ld a, $c1
+ ld [$ff00+c], a
+.asm_104dc8
+ dec d
+ ret z
+ xor a
+ ld [rIF], a
+ halt
+ jr .asm_104dc8
+
+Function104dd1: ; 104dd1 (41:4dd1)
+ ld a, $c0
+ ld [$ff00+c], a
+.asm_104dd4
+ dec d
+ ret z
+ xor a
+ ld [rIF], a
+ halt
+ jr .asm_104dd4
+
+Function104ddd: ; 104ddd (41:4ddd)
+ ld d, $0
+ ld e, d
+ ld a, $1
+ ld [hPrintNum9], a
+.asm_104de4
+ call Function105038
+ ld b, $2
+ ld c, rRP % $100
+ ld a, [hMoneyTemp + 1]
+ bit 1, a
+ jr z, .asm_104df6
+ ld a, $10
+ ld [hPrintNum10], a
+ ret
+.asm_104df6
+ bit 0, a
+ jr nz, asm_104e3a
+ ld a, [$ff00+c]
+ and b
+ jr nz, .asm_104de4
+
+Function104dfe: ; 104dfe (41:4dfe)
+ ld c, rRP % $100
+ ld d, $0
+ ld e, d
+ call Function104db7
+ jp z, Function104f42
+ ld d, e
+ call Function104da9
+ jp z, Function104f42
+ call Function104db7
+ jp z, Function104f42
+ call Function104da9
+ jp z, Function104f42
+ ld a, $6c
+ ld [hPrintNum10], a
+ ld d, $3d
+ call Function104dd1
+ ld d, $5
+ call Function104dc5
+ ld d, $15
+ call Function104dd1
+ ld d, $5
+ call Function104dc5
+ ld d, $5
+ call Function104dd1
+ ret
+
+asm_104e3a: ; 104e3a (41:4e3a)
+ call Random
+ ld e, a
+ and $f
+ ld d, a
+.asm_104e41
+ dec de
+ ld a, d
+ or e
+ jr nz, .asm_104e41
+
+Function104e46: ; 104e46 (41:4e46)
+ ld a, $2
+ ld [hPrintNum9], a
+ ld c, $56
+ ld d, $0
+ ld e, d
+ ld d, $3d
+ call Function104dd1
+ ld d, $5
+ call Function104dc5
+ ld d, $15
+ call Function104dd1
+ ld d, $5
+ call Function104dc5
+ ld d, $5
+ call Function104dd1
+ ld d, e
+ call Function104db7
+ jp z, Function104f42
+ ld d, e
+ call Function104da9
+ jp z, Function104f42
+ call Function104db7
+ jp z, Function104f42
+ call Function104da9
+ jp z, Function104f42
+ ld d, $3d
+ call Function104dd1
+ ld a, $6c
+ ld [hPrintNum10], a
+ ret
+
+Function104e8c: ; 104e8c (41:4e8c)
+ ld [rRP], a
+ ld a, $ff
+ ld [hPrintNum10], a
+ ret
+
+Function104e93: ; 104e93 (41:4e93)
+ xor a
+ ld [hDivisor], a
+ ld [hMathBuffer], a
+ push hl
+ push bc
+ ld c, $56
+ ld d, $3d
+ call Function104dd1
+ ld hl, hQuotient ; $ffb4 (aliases: hMultiplicand)
+ ld a, $5a
+ ld [hli], a
+ ld [hl], b
+ dec hl
+ ld b, $2
+ call Function104ed6
+ pop bc
+ pop hl
+ call Function104ed6
+ ld a, [hDivisor]
+ ld [hQuotient], a
+ ld a, [hMathBuffer]
+ ld [$ffb5], a
+ push hl
+ ld hl, hQuotient ; $ffb4 (aliases: hMultiplicand)
+ ld b, $2
+ call Function104ed6
+ ld hl, hPrintNum10
+ ld b, $1
+ call Function104faf
+ ld a, [hQuotient]
+ ld [hDivisor], a
+ ld a, [$ffb5]
+ ld [hMathBuffer], a
+ pop hl
+ ret
+
+Function104ed6: ; 104ed6 (41:4ed6)
+ ld c, $56
+ ld d, $5
+ call Function104dd1
+ ld d, $5
+ call Function104dc5
+ ld d, $15
+ call Function104dd1
+ ld a, b
+ cpl
+ ld b, a
+ ld a, $f4
+ ld [rTMA], a
+.asm_104eee
+ inc b
+ jr z, .asm_104f2e
+ ld a, $8
+ ld [$ffb6], a
+ ld a, [hli]
+ ld e, a
+ ld a, [hDivisor]
+ add e
+ ld [hDivisor], a
+ ld a, [hMathBuffer]
+ adc $0
+ ld [hMathBuffer], a
+.asm_104f02
+ xor a
+ ld [rIF], a
+ halt
+ ld a, $c1
+ ld [rRP], a
+ ld d, $1
+ ld a, e
+ rlca
+ ld e, a
+ jr nc, .asm_104f13
+ inc d
+.asm_104f13
+ ld a, [rTIMA]
+ cp $f8
+ jr c, .asm_104f13
+ ld a, $c0
+ ld [rRP], a
+ dec d
+ jr z, .asm_104f25
+ xor a
+ ld [rIF], a
+ halt
+.asm_104f25
+ ld a, [$ffb6]
+ dec a
+ jr z, .asm_104eee
+ ld [$ffb6], a
+ jr .asm_104f02
+.asm_104f2e
+ ld a, $fe
+ ld [rTMA], a
+ xor a
+ ld [rIF], a
+ halt
+ ld d, $5
+ call Function104dc5
+ ld d, $11
+ call Function104dd1
+ ret
+
+Function104f42: ; 104f42 (41:4f42)
+ ld a, [hPrintNum10]
+ or $2
+ ld [hPrintNum10], a
+ ret
+
+Function104f49: ; 104f49 (41:4f49)
+ ld a, [hPrintNum10]
+ or $1
+ ld [hPrintNum10], a
+ ret
+
+Function104f50: ; 104f50 (41:4f50)
+ ld a, [hPrintNum10]
+ or $80
+ ld [hPrintNum10], a
+ ret
+
+Function104f57: ; 104f57 (41:4f57)
+ xor a
+ ld [hDivisor], a
+ ld [hMathBuffer], a
+ push bc
+ push hl
+ ld hl, hQuotient ; $ffb4 (aliases: hMultiplicand)
+ ld b, $2
+ call Function104faf
+ ld a, [$ffb5]
+ ld [$ffba], a
+ ld b, a
+ pop hl
+ pop af
+ cp b
+ jp c, Function104f50
+ ld a, [hQuotient]
+ cp $5a
+ jp nz, Function104f50
+ call Function104faf
+ ld a, [hDivisor]
+ ld d, a
+ ld a, [hMathBuffer]
+ ld e, a
+ push hl
+ push de
+ ld hl, hQuotient ; $ffb4 (aliases: hMultiplicand)
+ ld b, $2
+ call Function104faf
+ pop de
+ ld hl, hQuotient ; $ffb4 (aliases: hMultiplicand)
+ ld a, [hli]
+ xor d
+ ld b, a
+ ld a, [hl]
+ xor e
+ or b
+ call nz, Function104f49
+ push de
+ ld d, $3d
+ call Function104dd1
+ ld hl, hPrintNum10
+ ld b, $1
+ call Function104ed6
+ pop de
+ pop hl
+ ld a, d
+ ld [hDivisor], a
+ ld a, e
+ ld [hMathBuffer], a
+ ret
+
+Function104faf: ; 104faf (41:4faf)
+ ld c, rRP % $100
+ ld d, $0
+ call Function104db7
+ jp z, Function104f42
+ ld d, $0
+ call Function104da9
+ jp z, Function104f42
+ ld d, $0
+ call Function104db7
+ jp z, Function104f42
+ ld a, b
+ cpl
+ ld b, a
+ xor a
+ ld [hMoneyTemp + 2], a
+ call Function104d86
+.asm_104fd2
+ inc b
+ jr z, .asm_10501a
+ ld a, $8
+ ld [$ffb6], a
+.asm_104fd9
+ ld d, $0
+.asm_104fdb
+ inc d
+ jr z, .asm_104fe5
+ ld a, [$ff00+c]
+ bit 1, a
+ jr z, .asm_104fdb
+ ld d, $0
+.asm_104fe5
+ inc d
+ jr z, .asm_104fed
+ ld a, [$ff00+c]
+ bit 1, a
+ jr nz, .asm_104fe5
+.asm_104fed
+ ld a, [hMoneyTemp + 2]
+ ld d, a
+ ld a, [rTIMA]
+ ld [hMoneyTemp + 2], a
+ sub d
+ cp $12
+ jr c, .asm_104ffd
+ set 0, e
+ jr .asm_104fff
+.asm_104ffd
+ res 0, e
+.asm_104fff
+ ld a, [$ffb6]
+ dec a
+ ld [$ffb6], a
+ jr z, .asm_10500b
+ ld a, e
+ rlca
+ ld e, a
+ jr .asm_104fd9
+.asm_10500b
+ ld a, e
+ ld [hli], a
+ ld a, [hDivisor]
+ add e
+ ld [hDivisor], a
+ ld a, [hMathBuffer]
+ adc $0
+ ld [hMathBuffer], a
+ jr .asm_104fd2
+.asm_10501a
+ call Function104d74
+ xor a
+ ld [rIF], a
+ ld d, $0
+ call Function104da9
+ jp z, Function104f42
+ ld d, $10
+ call Function104dd1
+ ret
+
+Function10502e: ; 10502e (41:502e)
+ ld b, $0
+ jp Function104e93
+
+Function105033: ; 105033 (41:5033)
+ ld b, $0
+ jp Function104f57
+
+Function105038: ; 105038 (41:5038)
+ ld a, $20
+ ld [rJOYP], a
+rept 2
+ ld a, [rJOYP]
+endr
+ cpl
+ and $f
+ swap a
+ ld b, a
+ ld a, $10
+ ld [rJOYP], a
+rept 6
+ ld a, [rJOYP]
+endr
+ cpl
+ and $f
+ or b
+ ld c, a
+ ld a, [hMoneyTemp]
+ xor c
+ and c
+ ld [hMoneyTemp + 1], a
+ ld a, c
+ ld [hMoneyTemp], a
+ ld a, $30
+ ld [rJOYP], a
+ ret
+
+Function105069: ; 105069 (41:5069)
+ call GetMysteryGiftBank
+ ld d, $0
+ ld b, CHECK_FLAG
+ ld hl, sMysteryGiftDecorationsReceived
+ predef_id FlagPredef
+ push hl
+ push bc
+ call Predef
+ call CloseSRAM
+ ld a, c
+ and a
+ pop bc
+ pop hl
+ ret nz
+ call GetMysteryGiftBank
+ ld b, SET_FLAG
+ predef FlagPredef
+ call CloseSRAM
+ xor a
+ ret
+
+Function105091: ; 105091 (41:5091)
+ call GetMysteryGiftBank
+ ld c, $0
+.loop
+ push bc
+ ld d, $0
+ ld b, CHECK_FLAG
+ ld hl, sMysteryGiftDecorationsReceived
+ predef FlagPredef
+ ld a, c
+ and a
+ pop bc
+ jr z, .skip
+ push bc
+ callab SetSpecificDecorationFlag
+ pop bc
+.skip
+ inc c
+ ld a, c
+ cp Trophys - DecorationIDs
+ jr c, .loop
+ jp CloseSRAM
+
+Special_UnlockMysteryGift: ; 1050b9
+ call GetMysteryGiftBank
+ ld hl, sMysteryGiftUnlocked
+ ld a, [hl]
+ inc a
+ jr nz, .ok
+ ld [hld], a
+ ld [hl], a
+.ok
+ jp CloseSRAM
+; 1050c8
+
+Function1050c8: ; 1050c8
+ call GetMysteryGiftBank
+ ld a, [sNumDailyMysteryGiftPartnerIDs]
+ cp $ff
+ jr z, .okay
+ xor a
+ ld [sNumDailyMysteryGiftPartnerIDs], a
+.okay
+ jp CloseSRAM
+; 1050d9
+
+
+BackupMysteryGift: ; 1050d9
+ call GetMysteryGiftBank
+ ld hl, sMysteryGiftItem
+ ld de, sBackupMysteryGiftItem
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hl]
+ ld [de], a
+ jp CloseSRAM
+; 1050ea
+
+
+RestoreMysteryGift: ; 1050ea (41:50ea)
+ call GetMysteryGiftBank
+ ld hl, sBackupMysteryGiftItem
+ ld de, sMysteryGiftItem
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hl]
+ ld [de], a
+ jp CloseSRAM
+
+Function1050fb: ; 1050fb (41:50fb)
+ ld hl, wMysteryGiftTrainerData
+ xor a
+ ld b, $26
+.asm_105101
+ ld [hli], a
+ dec b
+ jr nz, .asm_105101
+ ret
+
+
+GetMysteryGiftBank: ; 105106
+ ld a, BANK(sBackupMysteryGiftItem)
+ jp GetSRAMBank
+; 10510b
+
+
+Function10510b: ; 10510b (41:510b)
+ ld a, BANK(sPokemonData)
+ call GetSRAMBank
+ ld de, OverworldMap
+ ld bc, sPokemonData + PartyMons - wPokemonData
+ ld hl, sPokemonData + PartySpecies - wPokemonData
+.asm_105119
+ ld a, [hli]
+ cp $ff
+ jr z, .asm_105148
+ cp EGG
+ jr z, .asm_10513e
+ push hl
+ ld hl, MON_LEVEL
+ add hl, bc
+ ld a, [hl]
+ ld [de], a
+ inc de
+ ld hl, MON_SPECIES
+ add hl, bc
+ ld a, [hl]
+ ld [de], a
+ inc de
+ ld hl, MON_MOVES
+ add hl, bc
+ push bc
+ ld bc, NUM_MOVES
+ call CopyBytes
+ pop bc
+ pop hl
+.asm_10513e
+ push hl
+ ld hl, PARTYMON_STRUCT_LENGTH
+ add hl, bc
+ ld b, h
+ ld c, l
+ pop hl
+ jr .asm_105119
+.asm_105148
+ ld a, $ff
+ ld [de], a
+ ld a, $26
+ ld [wca00], a
+ jp CloseSRAM
+
+Function105153: ; 105153 (41:5153)
+ call ClearBGPalettes
+ call DisableLCD
+ ld hl, MysteryGiftGFX
+ ld de, VTiles2 tile $00
+ ld a, BANK(MysteryGiftGFX)
+ ld bc, Function105688 - MysteryGiftGFX
+ call FarCopyBytes
+ hlcoord 0, 0
+ ld a, $42
+ ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
+ call ByteFill
+ hlcoord 3, 7
+ lb bc, 9, 15
+ call ClearBox
+ hlcoord 0, 0
+ ld a, $0
+ ld [hli], a
+ inc a
+ ld [hl], a
+ hlcoord 0, 1
+ inc a
+ ld [hli], a
+ inc a
+ ld [hl], a
+ hlcoord 7, 1
+ ld a, $12
+ call Function10522e
+ hlcoord 2, 2
+ ld a, $17
+ call Function105236
+ hlcoord 2, 3
+ ld a, $27
+ call Function105236
+ hlcoord 9, 4
+ ld a, $37
+ ld [hli], a
+ inc a
+ ld [hl], a
+ hlcoord 1, 2
+ ld [hl], $4
+ hlcoord 1, 3
+ ld a, $5
+ call Function105246
+ ld a, $9
+ hlcoord 18, 5
+ call Function105242
+ hlcoord 2, 5
+ ld a, $b
+ call Function105251
+ hlcoord 2, 16
+ ld a, $7
+ call Function105251
+ hlcoord 2, 5
+ ld a, $d
+ call Function10522e
+ hlcoord 7, 5
+ ld [hl], $c
+ hlcoord 18, 5
+ ld [hl], $a
+ hlcoord 18, 16
+ ld [hl], $8
+ hlcoord 1, 16
+ ld [hl], $6
+ hlcoord 2, 6
+ ld a, $3a
+ call Function105251
+ hlcoord 2, 15
+ ld a, $40
+ call Function105251
+ hlcoord 2, 6
+ ld a, $3c
+ call Function10523e
+ hlcoord 17, 6
+ ld a, $3e
+ call Function10523e
+ hlcoord 2, 6
+ ld [hl], $39
+ hlcoord 17, 6
+ ld [hl], $3b
+ hlcoord 2, 15
+ ld [hl], $3f
+ hlcoord 17, 15
+ ld [hl], $41
+ call EnableLCD
+ call WaitBGMap
+ ld b, SCGB_1D
+ call GetSGBLayout
+ call SetPalettes
+ ret
+
+Function10522e: ; 10522e (41:522e)
+ ld b, $5
+ jr asm_105238
+; 105232 (41:5232)
+
+Function105232: ; unreferenced
+ ld b, 6
+ jr asm_105238
+
+Function105236: ; 105236 (41:5236)
+ ld b, $10
+
+asm_105238: ; 105238 (41:5238)
+ ld [hli], a
+ inc a
+ dec b
+ jr nz, asm_105238
+ ret
+
+Function10523e: ; 10523e (41:523e)
+ ld b, $9
+ jr asm_105248
+
+Function105242: ; 105242 (41:5242)
+ ld b, $b
+ jr asm_105248
+
+Function105246: ; 105246 (41:5246)
+ ld b, $e
+
+asm_105248: ; 105248 (41:5248)
+ ld [hl], a
+ ld de, $14
+ add hl, de
+ dec b
+ jr nz, asm_105248
+ ret
+
+Function105251: ; 105251 (41:5251)
+ ld b, $10
+.asm_105253
+ ld [hli], a
+ dec b
+ jr nz, .asm_105253
+ ret
+
+MysteryGiftGFX: ; 105258
+INCBIN "gfx/misc/mystery_gift.2bpp"
+
+
+Function105688: ; 105688 (41:5688)
+ call ClearTileMap
+ call ClearSprites
+ call WaitBGMap
+ call Function1057d7
+ hlcoord 3, 8
+ ld de, String_10572e
+ call PlaceString
+ call WaitBGMap
+ call Function10578c
+ call Function1050fb
+ ld a, $24
+ ld [wca02], a
+ ld a, [rIE]
+ push af
+ call Function104c2d
+ ld d, a
+ xor a
+ ld [rIF], a
+ pop af
+ ld [rIE], a
+ ld a, d
+ cp $10
+ jp z, Function105712
+ cp $6c
+ jp nz, Function10571a
+ call Function1056eb
+ ld c, 60
+ call DelayFrames
+ call Function105777
+ ld hl, Text_10575e
+ call PrintText
+ ld de, wMysteryGiftTrainerData
+ callba Function8ac70
+ ld a, c
+ ld [wd265], a
+ ld hl, Text_105768
+ jr c, asm_105726
+ ld hl, Text_105763
+ jr asm_105726
+
+Function1056eb: ; 1056eb (41:56eb)
+ ld c, $10
+.asm_1056ed
+ ld hl, Sprites
+ ld b, $8
+.asm_1056f2
+ dec [hl]
+rept 4
+ inc hl
+endr
+ dec b
+ jr nz, .asm_1056f2
+ ld hl, Sprites + $20
+ ld b, $8
+.asm_1056ff
+ inc [hl]
+rept 4
+ inc hl
+endr
+ dec b
+ jr nz, .asm_1056ff
+ dec c
+ ret z
+ push bc
+ ld c, 4
+ call DelayFrames
+ pop bc
+ jr .asm_1056ed
+
+Function105712: ; 105712 (41:5712)
+ call Function105777
+ ld hl, Text_10576d
+ jr asm_105726
+
+Function10571a: ; 10571a (41:571a)
+ call Function105777
+ ld hl, Text_105772
+ call PrintText
+ jp Function105688
+
+asm_105726: ; 105726 (41:5726)
+ call PrintText
+ ld a, $e3
+ ld [rLCDC], a
+ ret
+; 10572e (41:572e)
+
+String_10572e: ; 10572e
+ db "エーボタン¯おすと"
+ next "つうしん", $4a, "おこなわれるよ!"
+ next "ビーボタン¯おすと"
+ next "つうしん¯ちゅうし します"
+ db "@"
+
+; 10575e
+
+Text_10575e: ; 10575e
+ text_jump UnknownText_0x1c051a
+ db "@"
+
+Text_105763: ; 105763
+ text_jump UnknownText_0x1c0531
+ db "@"
+
+Text_105768: ; 105768
+ text_jump UnknownText_0x1c0555
+ db "@"
+
+Text_10576d: ; 10576d
+ text_jump UnknownText_0x1c0573
+ db "@"
+
+Text_105772: ; 105772
+ text_jump UnknownText_0x1c0591
+ db "@"
+; 105777
+
+Function105777: ; 105777 (41:5777)
+ call ClearSprites
+ call ClearTileMap
+ call EnableLCD
+ call WaitBGMap
+ ld b, SCGB_08
+ call GetSGBLayout
+ call SetPalettes
+ ret
+
+Function10578c: ; 10578c (41:578c)
+ ld de, OverworldMap
+ ld a, BANK(sPlayerData)
+ call GetSRAMBank
+ ld hl, sPlayerData + PlayerName - wPlayerData
+ ld bc, NAME_LENGTH
+ call CopyBytes
+ ld hl, sPlayerData + PlayerID - wPlayerData
+ ld bc, 2
+ call CopyBytes
+ ld hl, sPlayerData + wSecretID - wPlayerData
+ ld bc, 2
+ call CopyBytes
+ call CloseSRAM
+ ld a, BANK(sCrystalData)
+ call GetSRAMBank
+ ld a, [sCrystalData + 0]
+ ld [de], a
+ inc de
+ ld a, $4
+ call GetSRAMBank
+ ld hl, $a603
+ ld bc, $8
+ call CopyBytes
+ ld hl, $a007
+ ld bc, $c
+ call CopyBytes
+ call CloseSRAM
+ ret
+
+Function1057d7: ; 1057d7 (41:57d7)
+ call ClearBGPalettes
+ call DisableLCD
+ ld hl, MysteryGiftJP_GFX
+ ld de, VTiles2 tile $00
+ ld a, BANK(MysteryGiftJP_GFX)
+ lb bc, 4, 0
+ call FarCopyBytes
+ ld hl, MysteryGiftJP_GFX + $400
+ ld de, VTiles0 tile $00
+ ld a, BANK(MysteryGiftJP_GFX)
+ ld bc, $80
+ call FarCopyBytes
+ hlcoord 0, 0
+ ld a, $3f
+ ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
+ call ByteFill
+ hlcoord 3, 7
+ lb bc, 9, 15
+ call ClearBox
+ hlcoord 0, 0
+ ld a, $0
+ ld [hli], a
+ inc a
+ ld [hl], a
+ hlcoord 0, 1
+ inc a
+ ld [hli], a
+ inc a
+ ld [hl], a
+ hlcoord 4, 2
+ ld a, $13
+ call Function1058ca
+ hlcoord 4, 3
+ ld a, $1e
+ call Function1058ce
+ hlcoord 4, 4
+ ld a, $2a
+ call Function1058ce
+ hlcoord 1, 2
+ ld [hl], $4
+ hlcoord 1, 3
+ ld a, $5
+ call Function1058de
+ ld a, $9
+ hlcoord 18, 5
+ call Function1058da
+ hlcoord 2, 5
+ ld a, $b
+ call Function1058e9
+ hlcoord 2, 16
+ ld a, $7
+ call Function1058e9
+ hlcoord 2, 5
+ ld a, $d
+ call Function1058c6
+ hlcoord 8, 5
+ ld [hl], $c
+ hlcoord 18, 5
+ ld [hl], $a
+ hlcoord 18, 16
+ ld [hl], $8
+ hlcoord 1, 16
+ ld [hl], $6
+ hlcoord 2, 6
+ ld a, $37
+ call Function1058e9
+ hlcoord 2, 15
+ ld a, $3d
+ call Function1058e9
+ hlcoord 2, 6
+ ld a, $39
+ call Function1058d6
+ hlcoord 17, 6
+ ld a, $3b
+ call Function1058d6
+ hlcoord 2, 6
+ ld [hl], $36
+ hlcoord 17, 6
+ ld [hl], $38
+ hlcoord 2, 15
+ ld [hl], $3c
+ hlcoord 17, 15
+ ld [hl], $3e
+ ld de, Sprites
+ ld hl, OAM_1058f0
+ ld bc, $40
+ call CopyBytes
+ call EnableLCD
+ call WaitBGMap
+ ld b, $2
+ callba Function4930f
+ jp SetPalettes
+
+Function1058c6: ; 1058c6 (41:58c6)
+ ld b, $6
+ jr asm_1058d0
+
+Function1058ca: ; 1058ca (41:58ca)
+ ld b, $b
+ jr asm_1058d0
+
+Function1058ce: ; 1058ce (41:58ce)
+ ld b, $c
+
+asm_1058d0: ; 1058d0 (41:58d0)
+ ld [hli], a
+ inc a
+ dec b
+ jr nz, asm_1058d0
+ ret
+
+Function1058d6: ; 1058d6 (41:58d6)
+ ld b, $9
+ jr asm_1058e0
+
+Function1058da: ; 1058da (41:58da)
+ ld b, $b
+ jr asm_1058e0
+
+Function1058de: ; 1058de (41:58de)
+ ld b, $e
+
+asm_1058e0: ; 1058e0 (41:58e0)
+ ld [hl], a
+ ld de, SCREEN_WIDTH
+ add hl, de
+ dec b
+ jr nz, asm_1058e0
+ ret
+
+Function1058e9: ; 1058e9 (41:58e9)
+ ld b, $10
+.asm_1058eb
+ ld [hli], a
+ dec b
+ jr nz, .asm_1058eb
+ ret
+; 1058f0 (41:58f0)
+
+OAM_1058f0: ; 1058f0
+ db $11, $34, $00, $00
+ db $11, $3c, $01, $00
+ db $11, $44, $02, $00
+ db $11, $4c, $03, $00
+ db $19, $34, $04, $00
+ db $19, $3c, $05, $00
+ db $19, $44, $06, $00
+ db $19, $4c, $07, $00
+ db $01, $5c, $00, $00
+ db $01, $64, $01, $00
+ db $01, $6c, $02, $00
+ db $01, $74, $03, $00
+ db $09, $5c, $04, $00
+ db $09, $64, $05, $00
+ db $09, $6c, $06, $00
+ db $09, $74, $07, $00
+
+; japanese mystery gift gfx
+MysteryGiftJP_GFX: ; 105930
+INCBIN "gfx/misc/mystery_gift_jp.2bpp"
diff --git a/engine/namingscreen.asm b/engine/namingscreen.asm
index 21ec969b4..93cd97199 100755
--- a/engine/namingscreen.asm
+++ b/engine/namingscreen.asm
@@ -41,7 +41,7 @@ NamingScreen: ; 116c1
Function116f8: ; 116f8
call ClearBGPalettes
- ld b, $8
+ ld b, SCGB_08
call GetSGBLayout
call DisableLCD
call Function11c51
@@ -173,9 +173,9 @@ Function117f5: ; 117f5 (4:57f5)
ld hl, wc300
ld [hli], a
ld [hl], a
- ld de, $2420
- ld a, $a
- call Function3b2a
+ depixel 4, 4, 4, 0
+ ld a, SPRITE_ANIM_INDEX_0A
+ call _InitSpriteAnimStruct
ld hl, $1
add hl, bc
ld [hl], $0
@@ -220,18 +220,18 @@ Function11847: ; 11847 (4:5847)
ld [hli], a
ld [hl], a
pop de
- ld b, $a
+ ld b, SPRITE_ANIM_INDEX_0A
ld a, d
cp $7a
jr nz, .asm_11873
ld a, e
cp $40
jr nz, .asm_11873
- ld b, $1e
+ ld b, SPRITE_ANIM_INDEX_1E
.asm_11873
ld a, b
- ld de, $2420
- call Function3b2a
+ depixel 4, 4, 4, 0
+ call _InitSpriteAnimStruct
ret
Function1187b: ; 1187b (4:587b)
@@ -400,13 +400,13 @@ Jumptable_11977: ; 11977 (4:5977)
Function1197b: ; 1197b (4:597b)
- lb de, $50, $18
+ depixel 10, 3
call Function1189c
jr nz, .asm_11985
- ld d, $40
+ ld d, 8 * 8
.asm_11985
- ld a, $2
- call Function3b2a
+ ld a, SPRITE_ANIM_INDEX_02
+ call _InitSpriteAnimStruct
ld a, c
ld [wc6d5], a
ld a, b
diff --git a/engine/npctrade.asm b/engine/npctrade.asm
new file mode 100755
index 000000000..71ab03ee3
--- /dev/null
+++ b/engine/npctrade.asm
@@ -0,0 +1,635 @@
+
+; Trade struct
+TRADE_DIALOG EQU 0
+TRADE_GIVEMON EQU 1
+TRADE_GETMON EQU 2
+TRADE_NICK EQU 3
+TRADE_DVS EQU 14
+TRADE_ITEM EQU 16
+TRADE_OT_ID EQU 17
+TRADE_OT_NAME EQU 19
+TRADE_GENDER EQU 30
+TRADE_PADDING EQU 31
+
+; Trade dialogs
+TRADE_INTRO EQU 0
+TRADE_CANCEL EQU 1
+TRADE_WRONG EQU 2
+TRADE_COMPLETE EQU 3
+TRADE_AFTER EQU 4
+
+TRADE_EITHER_GENDER EQU 0
+TRADE_MALE_ONLY EQU 1
+TRADE_FEMALE_ONLY EQU 2
+
+NPCTrade:: ; fcba8
+ ld a, e
+ ld [wJumptableIndex], a
+ call Trade_GetDialog
+ ld b, CHECK_FLAG
+ call TradeFlagAction
+ ld a, TRADE_AFTER
+ jr nz, .done
+
+ ld a, TRADE_INTRO
+ call PrintTradeText
+
+ call YesNoBox
+ ld a, TRADE_CANCEL
+ jr c, .done
+
+; Select givemon from party
+ ld b, 6
+ callba Function5001d
+ ld a, TRADE_CANCEL
+ jr c, .done
+
+ ld e, TRADE_GIVEMON
+ call GetTradeAttribute
+ ld a, [CurPartySpecies]
+ cp [hl]
+ ld a, TRADE_WRONG
+ jr nz, .done
+
+ call CheckTradeGender
+ ld a, TRADE_WRONG
+ jr c, .done
+
+ ld b, SET_FLAG
+ call TradeFlagAction
+
+ ld hl, ConnectLinkCableText
+ call PrintText
+
+ call DoNPCTrade
+ call .TradeAnimation
+ call GetTradeMonNames
+
+ ld hl, TradedForText
+ call PrintText
+
+ call RestartMapMusic
+
+ ld a, TRADE_COMPLETE
+
+.done
+ call PrintTradeText
+ ret
+; fcc07
+
+.TradeAnimation: ; fcc07
+ call DisableSpriteUpdates
+ ld a, [wJumptableIndex]
+ push af
+ ld a, [wcf64]
+ push af
+ predef TradeAnimation
+ pop af
+ ld [wcf64], a
+ pop af
+ ld [wJumptableIndex], a
+ call Function2b74
+ ret
+; fcc23
+
+CheckTradeGender: ; fcc23
+ xor a
+ ld [MonType], a
+
+ ld e, TRADE_GENDER
+ call GetTradeAttribute
+ ld a, [hl]
+ and a
+ jr z, .asm_fcc46
+ cp 1
+ jr z, .asm_fcc3e
+
+ callba GetGender
+ jr nz, .asm_fcc48
+ jr .asm_fcc46
+
+.asm_fcc3e
+ callba GetGender
+ jr z, .asm_fcc48
+
+.asm_fcc46
+ and a
+ ret
+
+.asm_fcc48
+ scf
+ ret
+; fcc4a
+
+TradeFlagAction: ; fcc4a
+ ld hl, wTradeFlags
+ ld a, [wJumptableIndex]
+ ld c, a
+ predef FlagPredef
+ ld a, c
+ and a
+ ret
+; fcc59
+
+Trade_GetDialog: ; fcc59
+ ld e, TRADE_DIALOG
+ call GetTradeAttribute
+ ld a, [hl]
+ ld [wcf64], a
+ ret
+; fcc63
+
+DoNPCTrade: ; fcc63
+ ld e, TRADE_GIVEMON
+ call GetTradeAttribute
+ ld a, [hl]
+ ld [wPlayerTrademonSpecies], a
+
+ ld e, TRADE_GETMON
+ call GetTradeAttribute
+ ld a, [hl]
+ ld [wOTTrademonSpecies], a
+
+ ld a, [wPlayerTrademonSpecies]
+ ld de, wPlayerTrademonSpeciesName
+ call GetTradeMonName
+ call CopyTradeName
+
+ ld a, [wOTTrademonSpecies]
+ ld de, wOTTrademonSpeciesName
+ call GetTradeMonName
+ call CopyTradeName
+
+ ld hl, PartyMonOT
+ ld bc, NAME_LENGTH
+ call Trade_GetAttributeOfCurrentPartymon
+ ld de, wPlayerTrademonOTName
+ call CopyTradeName
+
+ ld hl, PlayerName
+ ld de, wPlayerTrademonSenderName
+ call CopyTradeName
+
+ ld hl, PartyMon1ID
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call Trade_GetAttributeOfCurrentPartymon
+ ld de, wPlayerTrademonID
+ call Trade_CopyTwoBytes
+
+ ld hl, PartyMon1DVs
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call Trade_GetAttributeOfCurrentPartymon
+ ld de, wPlayerTrademonDVs
+ call Trade_CopyTwoBytes
+
+ ld hl, PartyMon1Species
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call Trade_GetAttributeOfCurrentPartymon
+ ld b, h
+ ld c, l
+ callba GetCaughtGender
+ ld a, c
+ ld [wPlayerTrademonCaughtData], a
+
+ ld e, TRADE_DIALOG
+ call GetTradeAttribute
+ ld a, [hl]
+ cp 3
+ ld a, 1
+ jr c, .okay
+ ld a, 2
+.okay
+ ld [wOTTrademonCaughtData], a
+
+ ld hl, PartyMon1Level
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call Trade_GetAttributeOfCurrentPartymon
+ ld a, [hl]
+ ld [CurPartyLevel], a
+ ld a, [wOTTrademonSpecies]
+ ld [CurPartySpecies], a
+ xor a
+ ld [MonType], a
+ ld [wPokemonWithdrawDepositParameter], a
+ callab Functione039
+ predef TryAddMonToParty
+
+ ld e, TRADE_DIALOG
+ call GetTradeAttribute
+ ld a, [hl]
+ cp TRADE_COMPLETE
+ ld b, RESET_FLAG
+ jr c, .asm_fcd1c
+ ld b, SET_FLAG
+.asm_fcd1c
+ callba SetGiftPartyMonCaughtData
+
+ ld e, TRADE_NICK
+ call GetTradeAttribute
+ ld de, wOTTrademonNickname
+ call CopyTradeName
+
+ ld hl, PartyMonNicknames
+ ld bc, PKMN_NAME_LENGTH
+ call Trade_GetAttributeOfLastPartymon
+ ld hl, wOTTrademonNickname
+ call CopyTradeName
+
+ ld e, TRADE_OT_NAME
+ call GetTradeAttribute
+ push hl
+ ld de, wOTTrademonOTName
+ call CopyTradeName
+ pop hl
+ ld de, wOTTrademonSenderName
+ call CopyTradeName
+
+ ld hl, PartyMonOT
+ ld bc, NAME_LENGTH
+ call Trade_GetAttributeOfLastPartymon
+ ld hl, wOTTrademonOTName
+ call CopyTradeName
+
+ ld e, TRADE_DVS
+ call GetTradeAttribute
+ ld de, wOTTrademonDVs
+ call Trade_CopyTwoBytes
+
+ ld hl, PartyMon1DVs
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call Trade_GetAttributeOfLastPartymon
+ ld hl, wOTTrademonDVs
+ call Trade_CopyTwoBytes
+
+ ld e, TRADE_OT_ID
+ call GetTradeAttribute
+ ld de, wOTTrademonID + 1
+ call Trade_CopyTwoBytesReverseEndian
+
+ ld hl, PartyMon1ID
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call Trade_GetAttributeOfLastPartymon
+ ld hl, wOTTrademonID
+ call Trade_CopyTwoBytes
+
+ ld e, TRADE_ITEM
+ call GetTradeAttribute
+ push hl
+ ld hl, PartyMon1Item
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call Trade_GetAttributeOfLastPartymon
+ pop hl
+ ld a, [hl]
+ ld [de], a
+
+ push af
+ push bc
+ push de
+ push hl
+ ld a, [CurPartyMon]
+ push af
+ ld a, [PartyCount]
+ dec a
+ ld [CurPartyMon], a
+ callba Functione134
+ pop af
+ ld [CurPartyMon], a
+ pop hl
+ pop de
+ pop bc
+ pop af
+ ret
+; fcdc2
+
+
+GetTradeAttribute: ; 0xfcdc2
+ ld d, 0
+ push de
+ ld a, [wJumptableIndex]
+ and $f
+ swap a
+ ld e, a
+ ld d, 0
+ ld hl, NPCTrades
+rept 2
+ add hl, de
+endr
+ pop de
+ add hl, de
+ ret
+; 0xfcdd7
+
+Trade_GetAttributeOfCurrentPartymon: ; fcdd7
+ ld a, [CurPartyMon]
+ call AddNTimes
+ ret
+; fcdde
+
+Trade_GetAttributeOfLastPartymon: ; fcdde
+ ld a, [PartyCount]
+ dec a
+ call AddNTimes
+ ld e, l
+ ld d, h
+ ret
+; fcde8
+
+GetTradeMonName: ; fcde8
+ push de
+ ld [wd265], a
+ call GetBasePokemonName
+ ld hl, StringBuffer1
+ pop de
+ ret
+; fcdf4
+
+CopyTradeName: ; fcdf4
+ ld bc, NAME_LENGTH
+ call CopyBytes
+ ret
+; fcdfb
+
+Functionfcdfb: ; fcdfb
+; unreferenced
+ ld bc, 4
+ call CopyBytes
+ ld a, "@"
+ ld [de], a
+ ret
+; fce05
+
+Functionfce05: ; fce05
+; unreferenced
+ ld bc, 3
+ call CopyBytes
+ ld a, "@"
+ ld [de], a
+ ret
+; fce0f
+
+Trade_CopyTwoBytes: ; fce0f
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hl]
+ ld [de], a
+ ret
+; fce15
+
+Trade_CopyTwoBytesReverseEndian: ; fce15
+ ld a, [hli]
+ ld [de], a
+ dec de
+ ld a, [hl]
+ ld [de], a
+ ret
+; fce1b
+
+GetTradeMonNames: ; fce1b
+ ld e, TRADE_GETMON
+ call GetTradeAttribute
+ ld a, [hl]
+ call GetTradeMonName
+
+ ld de, StringBuffer2
+ call CopyTradeName
+
+ ld e, TRADE_GIVEMON
+ call GetTradeAttribute
+ ld a, [hl]
+ call GetTradeMonName
+
+ ld de, wd050
+ call CopyTradeName
+
+ ld hl, StringBuffer1
+.loop
+ ld a, [hli]
+ cp "@"
+ jr nz, .loop
+
+ dec hl
+ push hl
+ ld e, TRADE_GENDER
+ call GetTradeAttribute
+ ld a, [hl]
+ pop hl
+ and a
+ ret z
+
+ cp 1
+ ld a, "♂"
+ jr z, .done
+ ld a, "♀"
+.done
+ ld [hli], a
+ ld [hl], "@"
+ ret
+; fce58
+
+
+NPCTrades: ; fce58
+npctrade: MACRO
+ db \1, \2, \3, \4
+ dw \5
+ db \6
+ dw \7
+ db \8, \9, 0
+ENDM
+
+
+ npctrade 0, ABRA, MACHOP, "MUSCLE@@@@@", $6637, GOLD_BERRY, 37460, "MIKE@@@@@@@", TRADE_EITHER_GENDER
+ npctrade 0, BELLSPROUT, ONIX, "ROCKY@@@@@@", $6696, BITTER_BERRY, 48926, "KYLE@@@@@@@", TRADE_EITHER_GENDER
+ npctrade 1, KRABBY, VOLTORB, "VOLTY@@@@@@", $8898, PRZCUREBERRY, 29189, "TIM@@@@@@@@", TRADE_EITHER_GENDER
+ npctrade 3, DRAGONAIR, DODRIO, "DORIS@@@@@@", $6677, SMOKE_BALL, 00283, "EMY@@@@@@@@", TRADE_FEMALE_ONLY
+ npctrade 2, HAUNTER, XATU, "PAUL@@@@@@@", $8696, MYSTERYBERRY, 15616, "CHRIS@@@@@@", TRADE_EITHER_GENDER
+ npctrade 3, CHANSEY, AERODACTYL, "AEROY@@@@@@", $6696, GOLD_BERRY, 26491, "KIM@@@@@@@@", TRADE_EITHER_GENDER
+ npctrade 0, DUGTRIO, MAGNETON, "MAGGIE@@@@@", $6696, METAL_COAT, 50082, "FOREST@@@@@", TRADE_EITHER_GENDER
+; fcf38
+
+
+PrintTradeText: ; fcf38
+ push af
+ call GetTradeMonNames
+ pop af
+ ld bc, 2 * 4
+ ld hl, TradeTexts
+ call AddNTimes
+ ld a, [wcf64]
+ ld c, a
+rept 2
+ add hl, bc
+endr
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ call PrintText
+ ret
+; fcf53
+
+TradeTexts: ; fcf53
+; intro
+ dw TradeIntroText1
+ dw TradeIntroText2
+ dw TradeIntroText3
+ dw TradeIntroText4
+
+; cancel
+ dw TradeCancelText1
+ dw TradeCancelText2
+ dw TradeCancelText3
+ dw TradeCancelText4
+
+; wrong mon
+ dw TradeWrongText1
+ dw TradeWrongText2
+ dw TradeWrongText3
+ dw TradeWrongText4
+
+; completed
+ dw TradeCompleteText1
+ dw TradeCompleteText2
+ dw TradeCompleteText3
+ dw TradeCompleteText4
+
+; after
+ dw TradeAfterText1
+ dw TradeAfterText2
+ dw TradeAfterText3
+ dw TradeAfterText4
+; fcf7b
+
+
+ConnectLinkCableText: ; 0xfcf7b
+ ; OK, connect the Game Link Cable.
+ text_jump UnknownText_0x1bd407
+ db "@"
+; 0xfcf80
+
+
+TradedForText: ; 0xfcf80
+ ; traded givemon for getmon
+ text_jump UnknownText_0x1bd429
+ start_asm
+
+ ld de, MUSIC_NONE
+ call PlayMusic
+ call DelayFrame
+ ld hl, .done
+ ret
+
+.done
+ ; sound_dex_fanfare_80_109
+ ; interpret_data
+ text_jump UnknownText_0x1bd445
+ db "@"
+; 0xfcf97
+
+
+TradeIntroText1: ; 0xfcf97
+ ; I collect #MON. Do you have @ ? Want to trade it for my @ ?
+ text_jump UnknownText_0x1bd449
+ db "@"
+; 0xfcf9c
+
+TradeCancelText1: ; 0xfcf9c
+ ; You don't want to trade? Aww…
+ text_jump UnknownText_0x1bd48c
+ db "@"
+; 0xfcfa1
+
+TradeWrongText1: ; 0xfcfa1
+ ; Huh? That's not @ . What a letdown…
+ text_jump UnknownText_0x1bd4aa
+ db "@"
+; 0xfcfa6
+
+TradeCompleteText1: ; 0xfcfa6
+ ; Yay! I got myself @ ! Thanks!
+ text_jump UnknownText_0x1bd4d2
+ db "@"
+; 0xfcfab
+
+TradeAfterText1: ; 0xfcfab
+ ; Hi, how's my old @ doing?
+ text_jump UnknownText_0x1bd4f4
+ db "@"
+; 0xfcfb0
+
+
+TradeIntroText2:
+TradeIntroText3: ; 0xfcfb0
+ ; Hi, I'm looking for this #MON. If you have @ , would you trade it for my @ ?
+ text_jump UnknownText_0x1bd512
+ db "@"
+; 0xfcfb5
+
+TradeCancelText2:
+TradeCancelText3: ; 0xfcfb5
+ ; You don't have one either? Gee, that's really disappointing…
+ text_jump UnknownText_0x1bd565
+ db "@"
+; 0xfcfba
+
+TradeWrongText2:
+TradeWrongText3: ; 0xfcfba
+ ; You don't have @ ? That's too bad, then.
+ text_jump UnknownText_0x1bd5a1
+ db "@"
+; 0xfcfbf
+
+TradeCompleteText2: ; 0xfcfbf
+ ; Great! Thank you! I finally got @ .
+ text_jump UnknownText_0x1bd5cc
+ db "@"
+; 0xfcfc4
+
+TradeAfterText2: ; 0xfcfc4
+ ; Hi! The @ you traded me is doing great!
+ text_jump UnknownText_0x1bd5f4
+ db "@"
+; 0xfcfc9
+
+
+TradeIntroText4: ; 0xfcfc9
+ ; 's cute, but I don't have it. Do you have @ ? Want to trade it for my @ ?
+ text_jump UnknownText_0x1bd621
+ db "@"
+; 0xfcfce
+
+TradeCancelText4: ; 0xfcfce
+ ; You don't want to trade? Oh, darn…
+ text_jump UnknownText_0x1bd673
+ db "@"
+; 0xfcfd3
+
+TradeWrongText4: ; 0xfcfd3
+ ; That's not @ . Please trade with me if you get one.
+ text_jump UnknownText_0x1bd696
+ db "@"
+; 0xfcfd8
+
+TradeCompleteText4: ; 0xfcfd8
+ ; Wow! Thank you! I always wanted @ !
+ text_jump UnknownText_0x1bd6cd
+ db "@"
+; 0xfcfdd
+
+TradeAfterText4: ; 0xfcfdd
+ ; How is that @ I traded you doing? Your @ 's so cute!
+ text_jump UnknownText_0x1bd6f5
+ db "@"
+; 0xfcfe2
+
+
+TradeCompleteText3: ; 0xfcfe2
+ ; Uh? What happened?
+ text_jump UnknownText_0x1bd731
+ db "@"
+; 0xfcfe7
+
+TradeAfterText3: ; 0xfcfe7
+ ; Trading is so odd… I still have a lot to learn about it.
+ text_jump UnknownText_0x1bd745
+ db "@"
+; 0xfcfec
diff --git a/engine/options_menu.asm b/engine/options_menu.asm
new file mode 100755
index 000000000..ed2c21f30
--- /dev/null
+++ b/engine/options_menu.asm
@@ -0,0 +1,565 @@
+_OptionsMenu: ; e41d0
+ ld hl, hInMenu
+ ld a, [hl]
+ push af
+ ld [hl], $1
+ call ClearBGPalettes
+ hlcoord 0, 0
+ ld b, $10
+ ld c, $12
+ call TextBox
+ hlcoord 2, 2
+ ld de, StringOptions
+ call PlaceString
+ xor a
+ ld [wJumptableIndex], a
+ ld c, $6 ; number of items on the menu minus 1 (for cancel)
+
+.print_text_loop ; this next will display the settings of each option when the menu is opened
+ push bc
+ xor a
+ ld [hJoyLast], a
+ call GetOptionPointer
+ pop bc
+ ld hl, wJumptableIndex
+ inc [hl]
+ dec c
+ jr nz, .print_text_loop
+
+ call UpdateFrame
+ xor a
+ ld [wJumptableIndex], a
+ inc a
+ ld [hBGMapMode], a
+ call WaitBGMap
+ ld b, SCGB_08
+ call GetSGBLayout
+ call SetPalettes
+
+.joypad_loop
+ call JoyTextDelay
+ ld a, [hJoyPressed]
+ and START | B_BUTTON
+ jr nz, .ExitOptions
+ call OptionsControl
+ jr c, .dpad
+ call GetOptionPointer
+ jr c, .ExitOptions
+
+.dpad
+ call Functione455c
+ ld c, 3
+ call DelayFrames
+ jr .joypad_loop
+
+.ExitOptions
+ ld de, SFX_TRANSACTION
+ call PlaySFX
+ call WaitSFX
+ pop af
+ ld [hInMenu], a
+ ret
+; e4241
+
+StringOptions: ; e4241
+ db "TEXT SPEED<LNBRK>"
+ db " :<LNBRK>"
+ db "BATTLE SCENE<LNBRK>"
+ db " :<LNBRK>"
+ db "BATTLE STYLE<LNBRK>"
+ db " :<LNBRK>"
+ db "SOUND<LNBRK>"
+ db " :<LNBRK>"
+ db "PRINT<LNBRK>"
+ db " :<LNBRK>"
+ db "MENU ACCOUNT<LNBRK>"
+ db " :<LNBRK>"
+ db "FRAME<LNBRK>"
+ db " :TYPE<LNBRK>"
+ db "CANCEL@"
+; e42d6
+
+
+GetOptionPointer: ; e42d6
+ ld a, [wJumptableIndex] ; load the cursor position to a
+ ld e, a ; copy it to de
+ ld d, 0
+ ld hl, .Pointers
+rept 2
+ add hl, de
+endr
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp [hl] ; jump to the code of the current highlighted item
+; e42e5
+
+.Pointers
+ dw Options_TextSpeed
+ dw Options_BattleScene
+ dw Options_BattleStyle
+ dw Options_Sound
+ dw Options_Print
+ dw Options_MenuAccount
+ dw Options_Frame
+ dw Options_Cancel
+; e42f5
+
+
+Options_TextSpeed: ; e42f5
+ call GetTextSpeed
+ ld a, [hJoyPressed]
+ bit D_LEFT_F, a
+ jr nz, .LeftPressed
+ bit D_RIGHT_F, a
+ jr z, .NonePressed
+ ld a, c ; right pressed
+ cp SLOW_TEXT
+ jr c, .Increase
+ ld c, FAST_TEXT +- 1
+
+.Increase
+ inc c
+ ld a, e
+ jr .Save
+
+.LeftPressed
+ ld a, c
+ and a
+ jr nz, .Decrease
+ ld c, SLOW_TEXT + 1
+
+.Decrease
+ dec c
+ ld a, d
+
+.Save
+ ld b, a
+ ld a, [Options]
+ and $f0
+ or b
+ ld [Options], a
+
+.NonePressed
+ ld b, 0
+ ld hl, .Strings
+rept 2
+ add hl, bc
+endr
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ hlcoord 11, 3
+ call PlaceString
+ and a
+ ret
+; e4331
+
+.Strings
+ dw .Fast
+ dw .Mid
+ dw .Slow
+
+.Fast
+ db "FAST@"
+.Mid
+ db "MID @"
+.Slow
+ db "SLOW@"
+; e4346
+
+
+GetTextSpeed: ; e4346
+ ld a, [Options] ; This converts the number of frames, to 0, 1, 2 representing speed
+ and 7
+ cp 5 ; 5 frames of delay is slow
+ jr z, .slow
+ cp 1 ; 1 frame of delay is fast
+ jr z, .fast
+ ld c, MED_TEXT ; set it to mid if not one of the above
+ lb de, 1, 5
+ ret
+
+.slow
+ ld c, SLOW_TEXT
+ lb de, 3, 1
+ ret
+
+.fast
+ ld c, FAST_TEXT
+ lb de, 5, 3
+ ret
+; e4365
+
+
+Options_BattleScene: ; e4365
+ ld hl, Options
+ ld a, [hJoyPressed]
+ bit D_LEFT_F, a
+ jr nz, .LeftPressed
+ bit D_RIGHT_F, a
+ jr z, .NonePressed
+ bit BATTLE_SCENE, [hl]
+ jr nz, .ToggleOn
+ jr .ToggleOff
+
+.LeftPressed
+ bit BATTLE_SCENE, [hl]
+ jr z, .ToggleOff
+ jr .ToggleOn
+
+.NonePressed
+ bit BATTLE_SCENE, [hl]
+ jr z, .ToggleOn
+ jr .ToggleOff
+
+.ToggleOn
+ res BATTLE_SCENE, [hl]
+ ld de, .On
+ jr .Display
+
+.ToggleOff
+ set BATTLE_SCENE, [hl]
+ ld de, .Off
+
+.Display
+ hlcoord 11, 5
+ call PlaceString
+ and a
+ ret
+; e4398
+
+.On
+ db "ON @"
+.Off
+ db "OFF@"
+; e43a0
+
+
+Options_BattleStyle: ; e43a0
+ ld hl, Options
+ ld a, [hJoyPressed]
+ bit D_LEFT_F, a
+ jr nz, .LeftPressed
+ bit D_RIGHT_F, a
+ jr z, .NonePressed
+ bit BATTLE_SHIFT, [hl]
+ jr nz, .ToggleShift
+ jr .ToggleSet
+
+.LeftPressed
+ bit BATTLE_SHIFT, [hl]
+ jr z, .ToggleSet
+ jr .ToggleShift
+
+.NonePressed
+ bit BATTLE_SHIFT, [hl]
+ jr nz, .ToggleSet
+
+.ToggleShift
+ res BATTLE_SHIFT, [hl]
+ ld de, .Shift
+ jr .Display
+
+.ToggleSet
+ set BATTLE_SHIFT, [hl]
+ ld de, .Set
+
+.Display
+ hlcoord 11, 7
+ call PlaceString
+ and a
+ ret
+; e43d1
+
+.Shift
+ db "SHIFT@"
+.Set
+ db "SET @"
+; e43dd
+
+
+Options_Sound: ; e43dd
+ ld hl, Options
+ ld a, [hJoyPressed]
+ bit D_LEFT_F, a
+ jr nz, .LeftPressed
+ bit D_RIGHT_F, a
+ jr z, .NonePressed
+ bit STEREO, [hl]
+ jr nz, .SetMono
+ jr .SetStereo
+
+.LeftPressed
+ bit STEREO, [hl]
+ jr z, .SetStereo
+ jr .SetMono
+
+.NonePressed
+ bit STEREO, [hl]
+ jr nz, .ToggleStereo
+ jr .ToggleMono
+
+.SetMono
+ res STEREO, [hl]
+ call RestartMapMusic
+
+.ToggleMono
+ ld de, .Mono
+ jr .Display
+
+.SetStereo
+ set STEREO, [hl]
+ call RestartMapMusic
+
+.ToggleStereo
+ ld de, .Stereo
+
+.Display
+ hlcoord 11, 9
+ call PlaceString
+ and a
+ ret
+; e4416
+
+.Mono
+ db "MONO @"
+.Stereo
+ db "STEREO@"
+; e4424
+
+
+Options_Print: ; e4424
+ call GetPrinterSetting
+ ld a, [hJoyPressed]
+ bit D_LEFT_F, a
+ jr nz, .LeftPressed
+ bit D_RIGHT_F, a
+ jr z, .NonePressed
+ ld a, c
+ cp 4
+ jr c, .Increase
+ ld c, -1
+
+.Increase
+ inc c
+ ld a, e
+ jr .Save
+
+.LeftPressed
+ ld a, c
+ and a
+ jr nz, .Decrease
+ ld c, 5
+
+.Decrease
+ dec c
+ ld a, d
+
+.Save
+ ld b, a
+ ld [GBPrinter], a
+
+.NonePressed
+ ld b, $0
+ ld hl, .Strings
+rept 2
+ add hl, bc
+endr
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ hlcoord 11, 11
+ call PlaceString
+ and a
+ ret
+; e445a
+
+.Strings
+ dw .Lightest
+ dw .Lighter
+ dw .Normal
+ dw .Darker
+ dw .Darkest
+
+.Lightest
+ db "LIGHTEST@"
+.Lighter
+ db "LIGHTER @"
+.Normal
+ db "NORMAL @"
+.Darker
+ db "DARKER @"
+.Darkest
+ db "DARKEST @"
+; e4491
+
+
+GetPrinterSetting: ; e4491
+ ld a, [GBPrinter] ; converts from the stored printer setting to 0,1,2,3,4
+ and a
+ jr z, .IsLightest
+ cp PRINT_LIGHTER
+ jr z, .IsLight
+ cp PRINT_DARKER
+ jr z, .IsDark
+ cp PRINT_DARKEST
+ jr z, .IsDarkest
+ ld c, 2 ; normal if none of the above
+ lb de, PRINT_LIGHTER, PRINT_DARKER ; the 2 values next to this setting
+ ret
+
+.IsLightest
+ ld c, 0
+ lb de, PRINT_DARKEST, PRINT_LIGHTER ; the 2 values next to this setting
+ ret
+
+.IsLight
+ ld c, 1
+ lb de, PRINT_LIGHTEST, PRINT_NORMAL ; the 2 values next to this setting
+ ret
+
+.IsDark
+ ld c, 3
+ lb de, PRINT_NORMAL, PRINT_DARKEST ; the 2 values next to this setting
+ ret
+
+.IsDarkest
+ ld c, 4
+ lb de, PRINT_DARKER, PRINT_LIGHTEST ; the 2 values next to this setting
+ ret
+; e44c1
+
+Options_MenuAccount: ; e44c1
+ ld hl, Options2
+ ld a, [hJoyPressed]
+ bit D_LEFT_F, a
+ jr nz, .LeftPressed
+ bit D_RIGHT_F, a
+ jr z, .NonePressed
+ bit MENU_ACCOUNT, [hl]
+ jr nz, .ToggleOff
+ jr .ToggleOn
+
+.LeftPressed
+ bit MENU_ACCOUNT, [hl]
+ jr z, .ToggleOn
+ jr .ToggleOff
+
+.NonePressed
+ bit MENU_ACCOUNT, [hl]
+ jr nz, .ToggleOn
+
+.ToggleOff
+ res MENU_ACCOUNT, [hl]
+ ld de, .Off
+ jr .Display
+
+.ToggleOn
+ set MENU_ACCOUNT, [hl]
+ ld de, .On
+
+.Display
+ hlcoord 11, 13
+ call PlaceString
+ and a
+ ret
+; e44f2
+
+.Off
+ db "OFF@"
+.On
+ db "ON @"
+; e44fa
+
+
+Options_Frame: ; e44fa
+ ld hl, TextBoxFrame
+ ld a, [hJoyPressed]
+ bit D_LEFT_F, a
+ jr nz, .LeftPressed
+ bit D_RIGHT_F, a
+ jr nz, .RightPressed
+ and a
+ ret
+
+.RightPressed
+ ld a, [hl]
+ inc a
+ jr .Save
+
+.LeftPressed
+ ld a, [hl]
+ dec a
+
+.Save
+ and $7
+ ld [hl], a
+UpdateFrame: ; e4512
+ ld a, [TextBoxFrame]
+ hlcoord 16, 15 ; where on the screen the number is drawn
+ add "1"
+ ld [hl], a
+ call LoadFontsExtra
+ and a
+ ret
+; e4520
+
+Options_Cancel: ; e4520
+ ld a, [hJoyPressed]
+ and A_BUTTON
+ jr nz, .Exit
+ and a
+ ret
+
+.Exit
+ scf
+ ret
+; e452a
+
+OptionsControl: ; e452a
+ ld hl, wJumptableIndex
+ ld a, [hJoyLast]
+ cp D_DOWN
+ jr z, .DownPressed
+ cp D_UP
+ jr z, .UpPressed
+ and a
+ ret
+
+.DownPressed
+ ld a, [hl] ; load the cursor position to a
+ cp $7 ; maximum number of items in option menu
+ jr nz, .CheckFive
+ ld [hl], $0
+ scf
+ ret
+
+.CheckFive ; I have no idea why this exists...
+ cp $5
+ jr nz, .Increase
+ ld [hl], $5
+
+.Increase
+ inc [hl]
+ scf
+ ret
+
+.UpPressed
+ ld a, [hl]
+ cp $6
+ jr nz, .NotSix
+ ld [hl], $5 ; Another thing where I'm not sure why it exists
+ scf
+ ret
+
+.NotSix
+ and a
+ jr nz, .Decrease
+ ld [hl], $8 ; number of option items +1
+
+.Decrease
+ dec [hl]
+ scf
+ ret
+; e455c
diff --git a/engine/overworld.asm b/engine/overworld.asm
new file mode 100755
index 000000000..fa4d02e7c
--- /dev/null
+++ b/engine/overworld.asm
@@ -0,0 +1,1488 @@
+GetEmote2bpp: ; 1412a
+ ld a, $1
+ ld [rVBK], a
+ call Get2bpp
+ xor a
+ ld [rVBK], a
+ ret
+; 14135
+
+_ReplaceKrisSprite:: ; 14135
+ call GetPlayerSprite
+ ld a, [UsedSprites]
+ ld [hUsedSpriteIndex], a
+ ld a, [UsedSprites + 1]
+ ld [hUsedSpriteTile], a
+ call GetUsedSprite
+ ret
+; 14146
+
+Function14146: ; mobile
+ ld hl, wSpriteFlags
+ ld a, [hl]
+ push af
+ res 7, [hl]
+ set 6, [hl]
+ call RunCallback_04
+ pop af
+ ld [wSpriteFlags], a
+ ret
+; 14157
+
+Function14157: ; mobile
+ ld hl, wSpriteFlags
+ ld a, [hl]
+ push af
+ set 7, [hl]
+ res 6, [hl]
+ call RunCallback_04
+ pop af
+ ld [wSpriteFlags], a
+ ret
+; 14168
+
+RefreshSprites:: ; 14168
+ call .Refresh
+ call RunCallback_04
+ ret
+; 1416f
+
+.Refresh: ; 1416f
+ xor a
+ ld bc, UsedSpritesEnd - UsedSprites
+ ld hl, UsedSprites
+ call ByteFill
+ call GetPlayerSprite
+ call AddMapSprites
+ call LoadAndSortSprites
+ ret
+; 14183
+
+GetPlayerSprite: ; 14183
+; Get Chris or Kris's sprite.
+ ld hl, .Chris
+ ld a, [wPlayerSpriteSetupFlags]
+ bit 2, a
+ jr nz, .go
+ ld a, [PlayerGender]
+ bit 0, a
+ jr z, .go
+ ld hl, .Kris
+
+.go
+ ld a, [PlayerState]
+ ld c, a
+.loop
+ ld a, [hli]
+ cp c
+ jr z, .good
+ inc hl
+ cp $ff
+ jr nz, .loop
+
+; Any player state not in the array defaults to Chris's sprite.
+ xor a ; ld a, PLAYER_NORMAL
+ ld [PlayerState], a
+ ld a, SPRITE_CHRIS
+ jr .finish
+
+.good
+ ld a, [hl]
+
+.finish
+ ld [UsedSprites + 0], a
+ ld [PlayerSprite], a
+ ld [PlayerObjectSprite], a
+ ret
+
+.Chris
+ db PLAYER_NORMAL, SPRITE_CHRIS
+ db PLAYER_BIKE, SPRITE_CHRIS_BIKE
+ db PLAYER_SURF, SPRITE_SURF
+ db PLAYER_SURF_PIKA, SPRITE_SURFING_PIKACHU
+ db $ff
+
+.Kris
+ db PLAYER_NORMAL, SPRITE_KRIS
+ db PLAYER_BIKE, SPRITE_KRIS_BIKE
+ db PLAYER_SURF, SPRITE_SURF
+ db PLAYER_SURF_PIKA, SPRITE_SURFING_PIKACHU
+ db $ff
+; 141c9
+
+
+AddMapSprites: ; 141c9
+ call GetMapPermission
+ call CheckOutdoorMap
+ jr z, .outdoor
+ call AddIndoorSprites
+ ret
+
+.outdoor
+ call AddOutdoorSprites
+ ret
+; 141d9
+
+
+AddIndoorSprites: ; 141d9
+ ld hl, Map1ObjectSprite
+ ld a, 1
+.loop
+ push af
+ ld a, [hl]
+ call AddSpriteGFX
+ ld de, OBJECT_LENGTH
+ add hl, de
+ pop af
+ inc a
+ cp NUM_OBJECTS
+ jr nz, .loop
+ ret
+; 141ee
+
+
+AddOutdoorSprites: ; 141ee
+ ld a, [MapGroup]
+ dec a
+ ld c, a
+ ld b, 0
+ ld hl, OutdoorSprites
+rept 2
+ add hl, bc
+endr
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld c, MAX_OUTDOOR_SPRITES
+.loop
+ push bc
+ ld a, [hli]
+ call AddSpriteGFX
+ pop bc
+ dec c
+ jr nz, .loop
+ ret
+; 14209
+
+
+RunCallback_04: ; 14209
+ ld a, $4
+ call RunMapCallback
+ call GetUsedSprites
+ call .LoadMiscTiles
+ ret
+; 14215
+
+.LoadMiscTiles: ; 14215
+ ld a, [wSpriteFlags]
+ bit 6, a
+ ret nz
+
+ ld c, EMOTE_SHADOW
+ callba LoadEmote
+ call GetMapPermission
+ call CheckOutdoorMap
+ ld c, EMOTE_0B
+ jr z, .outdoor
+ ld c, EMOTE_BOULDER_DUST
+.outdoor
+ callba LoadEmote
+ ret
+; 14236
+
+
+
+SafeGetSprite: ; 14236
+ push hl
+ call GetSprite
+ pop hl
+ ret
+; 1423c
+
+GetSprite: ; 1423c
+ call GetMonSprite
+ ret c
+
+ ld hl, SpriteHeaders ; address
+ dec a
+ ld c, a
+ ld b, 0
+ ld a, 6
+ call AddNTimes
+ ; load the address into de
+ ld a, [hli]
+ ld e, a
+ ld a, [hli]
+ ld d, a
+ ; load the length into c
+ ld a, [hli]
+ swap a
+ ld c, a
+ ; load the sprite bank into both b and h
+ ld b, [hl]
+ ld a, [hli]
+ ; load the sprite type into l
+ ld l, [hl]
+ ld h, a
+ ret
+; 14259
+
+
+GetMonSprite: ; 14259
+; Return carry if a monster sprite was loaded.
+
+ cp SPRITE_POKEMON
+ jr c, .Normal
+ cp SPRITE_DAYCARE_MON_1
+ jr z, .wBreedMon1
+ cp SPRITE_DAYCARE_MON_2
+ jr z, .wBreedMon2
+ cp SPRITE_VARS
+ jr nc, .Variable
+ jr .Icon
+
+.Normal
+ and a
+ ret
+
+.Icon
+ sub SPRITE_POKEMON
+ ld e, a
+ ld d, 0
+ ld hl, SpriteMons
+ add hl, de
+ ld a, [hl]
+ jr .Mon
+
+.wBreedMon1
+ ld a, [wBreedMon1Species]
+ jr .Mon
+
+.wBreedMon2
+ ld a, [wBreedMon2Species]
+
+.Mon
+ ld e, a
+ and a
+ jr z, .NoBreedmon
+
+ callba Function8e82b
+
+ ld l, 1
+ ld h, 0
+ scf
+ ret
+
+.Variable
+ sub SPRITE_VARS
+ ld e, a
+ ld d, 0
+ ld hl, VariableSprites
+ add hl, de
+ ld a, [hl]
+ and a
+ jp nz, GetMonSprite
+
+.NoBreedmon
+ ld a, 1
+ ld l, 1
+ ld h, 0
+ and a
+ ret
+; 142a7
+
+
+_DoesSpriteHaveFacings:: ; 142a7
+; Checks to see whether we can apply a facing to a sprite.
+; Returns carry unless the sprite is a Pokemon or a Still Sprite.
+ cp SPRITE_POKEMON
+ jr nc, .only_down
+
+ push hl
+ push bc
+ ld hl, SpriteHeaders + SPRITEHEADER_TYPE ; type
+ dec a
+ ld c, a
+ ld b, 0
+ ld a, NUM_SPRITEHEADER_FIELDS
+ call AddNTimes
+ ld a, [hl]
+ pop bc
+ pop hl
+ cp STILL_SPRITE
+ jr nz, .only_down
+ scf
+ ret
+
+.only_down
+ and a
+ ret
+; 142c4
+
+
+_GetSpritePalette:: ; 142c4
+ ld a, c
+ call GetMonSprite
+ jr c, .is_pokemon
+
+ ld hl, SpriteHeaders + 5 ; palette
+ dec a
+ ld c, a
+ ld b, 0
+ ld a, 6
+ call AddNTimes
+ ld c, [hl]
+ ret
+
+.is_pokemon
+ xor a
+ ld c, a
+ ret
+; 142db
+
+
+LoadAndSortSprites: ; 142db
+ call LoadSpriteGFX
+ call SortUsedSprites
+ call ArrangeUsedSprites
+ ret
+; 142e5
+
+
+AddSpriteGFX: ; 142e5
+; Add any new sprite ids to a list of graphics to be loaded.
+; Return carry if the list is full.
+
+ push hl
+ push bc
+ ld b, a
+ ld hl, UsedSprites + 2
+ ld c, SPRITE_GFX_LIST_CAPACITY - 1
+.loop
+ ld a, [hl]
+ cp b
+ jr z, .exists
+ and a
+ jr z, .new
+rept 2
+ inc hl
+endr
+ dec c
+ jr nz, .loop
+
+ pop bc
+ pop hl
+ scf
+ ret
+
+.exists
+ pop bc
+ pop hl
+ and a
+ ret
+
+.new
+ ld [hl], b
+ pop bc
+ pop hl
+ and a
+ ret
+; 14306
+
+
+LoadSpriteGFX: ; 14306
+; Bug: b is not preserved, so
+; it's useless as a next count.
+
+ ld hl, UsedSprites
+ ld b, SPRITE_GFX_LIST_CAPACITY
+.loop
+ ld a, [hli]
+ and a
+ jr z, .done
+ push hl
+ call .LoadSprite
+ pop hl
+ ld [hli], a
+ dec b
+ jr nz, .loop
+
+.done
+ ret
+
+.LoadSprite
+ call GetSprite
+ ld a, l
+ ret
+; 1431e
+
+
+SortUsedSprites: ; 1431e
+; Bubble-sort sprites by type.
+
+; Run backwards through UsedSprites to find the last one.
+
+ ld c, SPRITE_GFX_LIST_CAPACITY
+ ld de, UsedSprites + (SPRITE_GFX_LIST_CAPACITY - 1) * 2
+.FindLastSprite
+ ld a, [de]
+ and a
+ jr nz, .FoundLastSprite
+rept 2
+ dec de
+endr
+ dec c
+ jr nz, .FindLastSprite
+.FoundLastSprite
+ dec c
+ jr z, .quit
+
+; If the length of the current sprite is
+; higher than a later one, swap them.
+
+ inc de
+ ld hl, UsedSprites + 1
+
+.CheckSprite
+ push bc
+ push de
+ push hl
+
+.CheckFollowing
+ ld a, [de]
+ cp [hl]
+ jr nc, .loop
+
+; Swap the two sprites.
+
+ ld b, a
+ ld a, [hl]
+ ld [hl], b
+ ld [de], a
+ dec de
+ dec hl
+ ld a, [de]
+ ld b, a
+ ld a, [hl]
+ ld [hl], b
+ ld [de], a
+ inc de
+ inc hl
+
+; Keep doing this until everything's in order.
+
+.loop
+rept 2
+ dec de
+endr
+ dec c
+ jr nz, .CheckFollowing
+
+ pop hl
+rept 2
+ inc hl
+endr
+ pop de
+ pop bc
+ dec c
+ jr nz, .CheckSprite
+
+.quit
+ ret
+; 14355
+
+
+ArrangeUsedSprites: ; 14355
+; Get the length of each sprite and space them out in VRAM.
+; Crystal introduces a second table in VRAM bank 0.
+
+ ld hl, UsedSprites
+ ld c, SPRITE_GFX_LIST_CAPACITY
+ ld b, 0
+.FirstTableLength
+; Keep going until the end of the list.
+ ld a, [hli]
+ and a
+ jr z, .quit
+
+ ld a, [hl]
+ call GetSpriteLength
+
+; Spill over into the second table after $80 tiles.
+ add b
+ cp $80
+ jr z, .loop
+ jr nc, .SecondTable
+
+.loop
+ ld [hl], b
+ inc hl
+ ld b, a
+
+; Assumes the next table will be reached before c hits 0.
+ dec c
+ jr nz, .FirstTableLength
+
+.SecondTable
+; The second tile table starts at tile $80.
+ ld b, $80
+ dec hl
+.SecondTableLength
+; Keep going until the end of the list.
+ ld a, [hli]
+ and a
+ jr z, .quit
+
+ ld a, [hl]
+ call GetSpriteLength
+
+; There are only two tables, so don't go any further than that.
+ add b
+ jr c, .quit
+
+ ld [hl], b
+ ld b, a
+ inc hl
+
+ dec c
+ jr nz, .SecondTableLength
+
+.quit
+ ret
+; 14386
+
+
+GetSpriteLength: ; 14386
+; Return the length of sprite type a in tiles.
+
+ cp WALKING_SPRITE
+ jr z, .AnyDirection
+ cp STANDING_SPRITE
+ jr z, .AnyDirection
+ cp STILL_SPRITE
+ jr z, .OneDirection
+
+ ld a, 12
+ ret
+
+.AnyDirection
+ ld a, 12
+ ret
+
+.OneDirection
+ ld a, 4
+ ret
+; 1439b
+
+
+GetUsedSprites: ; 1439b
+ ld hl, UsedSprites
+ ld c, SPRITE_GFX_LIST_CAPACITY
+
+.loop
+ ld a, [wSpriteFlags]
+ res 5, a
+ ld [wSpriteFlags], a
+
+ ld a, [hli]
+ and a
+ jr z, .done
+ ld [hUsedSpriteIndex], a
+
+ ld a, [hli]
+ ld [hUsedSpriteTile], a
+
+ bit 7, a
+ jr z, .dont_set
+
+ ld a, [wSpriteFlags]
+ set 5, a ; load VBank0
+ ld [wSpriteFlags], a
+
+.dont_set
+ push bc
+ push hl
+ call GetUsedSprite
+ pop hl
+ pop bc
+ dec c
+ jr nz, .loop
+
+.done
+ ret
+; 143c8
+
+GetUsedSprite: ; 143c8
+ ld a, [hUsedSpriteIndex]
+ call SafeGetSprite
+ ld a, [hUsedSpriteTile]
+ call .GetTileAddr
+ push hl
+ push de
+ push bc
+ ld a, [wSpriteFlags]
+ bit 7, a
+ jr nz, .skip
+ call .CopyToVram
+
+.skip
+ pop bc
+ ld l, c
+ ld h, $0
+rept 4
+ add hl, hl
+endr
+ pop de
+ add hl, de
+ ld d, h
+ ld e, l
+ pop hl
+
+ ld a, [wSpriteFlags]
+ bit 5, a
+ jr nz, .done
+ bit 6, a
+ jr nz, .done
+
+ ld a, [hUsedSpriteIndex]
+ call _DoesSpriteHaveFacings
+ jr c, .done
+
+ ld a, h
+ add $8
+ ld h, a
+ call .CopyToVram
+
+.done
+ ret
+; 14406
+
+.GetTileAddr: ; 14406
+; Return the address of tile (a) in (hl).
+ and $7f
+ ld l, a
+ ld h, 0
+rept 4
+ add hl, hl
+endr
+ ld a, l
+ add VTiles0 % $100
+ ld l, a
+ ld a, h
+ adc VTiles0 / $100
+ ld h, a
+ ret
+; 14418
+
+.CopyToVram: ; 14418
+ ld a, [rVBK]
+ push af
+ ld a, [wSpriteFlags]
+ bit 5, a
+ ld a, $1
+ jr z, .bankswitch
+ ld a, $0
+
+.bankswitch
+ ld [rVBK], a
+ call Get2bpp
+ pop af
+ ld [rVBK], a
+ ret
+; 1442f
+
+LoadEmote:: ; 1442f
+; Get the address of the pointer to emote c.
+ ld a, c
+ ld bc, 6
+ ld hl, EmotesPointers
+ call AddNTimes
+; Load the emote address into de
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+; load the length of the emote (in tiles) into c
+ inc hl
+ ld c, [hl]
+ swap c
+; load the emote pointer bank into b
+ inc hl
+ ld b, [hl]
+; load the VRAM destination into hl
+ inc hl
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+; if the emote has a length of 0, do not proceed (error handling)
+ ld a, c
+ and a
+ ret z
+ call GetEmote2bpp
+ ret
+; 1444d
+
+emote_header: MACRO
+ dw \1
+ db \2 tiles, BANK(\1)
+ dw VTiles1 tile \3
+ENDM
+
+EmotesPointers: ; 144d
+; dw source address
+; db length, bank
+; dw dest address
+
+ emote_header ShockEmote, 4, $78
+ emote_header QuestionEmote, 4, $78
+ emote_header HappyEmote, 4, $78
+ emote_header SadEmote, 4, $78
+ emote_header HeartEmote, 4, $78
+ emote_header BoltEmote, 4, $78
+ emote_header SleepEmote, 4, $78
+ emote_header FishEmote, 4, $78
+ emote_header JumpShadowGFX, 1, $7c
+ emote_header FishingRodGFX2, 2, $7c
+ emote_header BoulderDustGFX, 2, $7e
+ emote_header FishingRodGFX4, 1, $7e
+; 14495
+
+
+SpriteMons: ; 14495
+ db UNOWN
+ db GEODUDE
+ db GROWLITHE
+ db WEEDLE
+ db SHELLDER
+ db ODDISH
+ db GENGAR
+ db ZUBAT
+ db MAGIKARP
+ db SQUIRTLE
+ db TOGEPI
+ db BUTTERFREE
+ db DIGLETT
+ db POLIWAG
+ db PIKACHU
+ db CLEFAIRY
+ db CHARMANDER
+ db JYNX
+ db STARMIE
+ db BULBASAUR
+ db JIGGLYPUFF
+ db GRIMER
+ db EKANS
+ db PARAS
+ db TENTACOOL
+ db TAUROS
+ db MACHOP
+ db VOLTORB
+ db LAPRAS
+ db RHYDON
+ db MOLTRES
+ db SNORLAX
+ db GYARADOS
+ db LUGIA
+ db HO_OH
+; 144b8
+
+
+OutdoorSprites: ; 144b8
+; Valid sprite IDs for each map group.
+
+ dw Group1Sprites
+ dw Group2Sprites
+ dw Group3Sprites
+ dw Group4Sprites
+ dw Group5Sprites
+ dw Group6Sprites
+ dw Group7Sprites
+ dw Group8Sprites
+ dw Group9Sprites
+ dw Group10Sprites
+ dw Group11Sprites
+ dw Group12Sprites
+ dw Group13Sprites
+ dw Group14Sprites
+ dw Group15Sprites
+ dw Group16Sprites
+ dw Group17Sprites
+ dw Group18Sprites
+ dw Group19Sprites
+ dw Group20Sprites
+ dw Group21Sprites
+ dw Group22Sprites
+ dw Group23Sprites
+ dw Group24Sprites
+ dw Group25Sprites
+ dw Group26Sprites
+; 144ec
+
+
+Group13Sprites: ; 144ec
+ db SPRITE_SUICUNE
+ db SPRITE_SILVER_TROPHY
+ db SPRITE_FAMICOM
+ db SPRITE_POKEDEX
+ db SPRITE_WILL
+ db SPRITE_KAREN
+ db SPRITE_NURSE
+ db SPRITE_OLD_LINK_RECEPTIONIST
+ db SPRITE_BIG_LAPRAS
+ db SPRITE_BIG_ONIX
+ db SPRITE_SUDOWOODO
+ db SPRITE_BIG_SNORLAX
+ db SPRITE_TEACHER
+ db SPRITE_FISHER
+ db SPRITE_YOUNGSTER
+ db SPRITE_BLUE
+ db SPRITE_GRAMPS
+ db SPRITE_BUG_CATCHER
+ db SPRITE_COOLTRAINER_F
+ db SPRITE_SWIMMER_GIRL
+ db SPRITE_SWIMMER_GUY
+ db SPRITE_POKE_BALL
+ db SPRITE_FRUIT_TREE
+; 14503
+
+Group23Sprites: ; 14503
+ db SPRITE_SUICUNE
+ db SPRITE_SILVER_TROPHY
+ db SPRITE_FAMICOM
+ db SPRITE_POKEDEX
+ db SPRITE_WILL
+ db SPRITE_KAREN
+ db SPRITE_NURSE
+ db SPRITE_OLD_LINK_RECEPTIONIST
+ db SPRITE_BIG_LAPRAS
+ db SPRITE_BIG_ONIX
+ db SPRITE_SUDOWOODO
+ db SPRITE_BIG_SNORLAX
+ db SPRITE_TEACHER
+ db SPRITE_FISHER
+ db SPRITE_YOUNGSTER
+ db SPRITE_BLUE
+ db SPRITE_GRAMPS
+ db SPRITE_BUG_CATCHER
+ db SPRITE_COOLTRAINER_F
+ db SPRITE_SWIMMER_GIRL
+ db SPRITE_SWIMMER_GUY
+ db SPRITE_POKE_BALL
+ db SPRITE_FRUIT_TREE
+; 1451a
+
+Group14Sprites: ; 1451a
+ db SPRITE_SUICUNE
+ db SPRITE_SILVER_TROPHY
+ db SPRITE_FAMICOM
+ db SPRITE_POKEDEX
+ db SPRITE_WILL
+ db SPRITE_KAREN
+ db SPRITE_NURSE
+ db SPRITE_OLD_LINK_RECEPTIONIST
+ db SPRITE_BIG_LAPRAS
+ db SPRITE_BIG_ONIX
+ db SPRITE_SUDOWOODO
+ db SPRITE_BIG_SNORLAX
+ db SPRITE_TEACHER
+ db SPRITE_FISHER
+ db SPRITE_YOUNGSTER
+ db SPRITE_BLUE
+ db SPRITE_GRAMPS
+ db SPRITE_BUG_CATCHER
+ db SPRITE_COOLTRAINER_F
+ db SPRITE_SWIMMER_GIRL
+ db SPRITE_SWIMMER_GUY
+ db SPRITE_POKE_BALL
+ db SPRITE_FRUIT_TREE
+; 14531
+
+Group6Sprites: ; 14531
+ db SPRITE_SUICUNE
+ db SPRITE_SILVER_TROPHY
+ db SPRITE_FAMICOM
+ db SPRITE_POKEDEX
+ db SPRITE_WILL
+ db SPRITE_KAREN
+ db SPRITE_NURSE
+ db SPRITE_OLD_LINK_RECEPTIONIST
+ db SPRITE_BIG_LAPRAS
+ db SPRITE_BIG_ONIX
+ db SPRITE_SUDOWOODO
+ db SPRITE_BIG_SNORLAX
+ db SPRITE_TEACHER
+ db SPRITE_FISHER
+ db SPRITE_YOUNGSTER
+ db SPRITE_BLUE
+ db SPRITE_GRAMPS
+ db SPRITE_BUG_CATCHER
+ db SPRITE_COOLTRAINER_F
+ db SPRITE_SWIMMER_GIRL
+ db SPRITE_SWIMMER_GUY
+ db SPRITE_POKE_BALL
+ db SPRITE_FRUIT_TREE
+; 14548
+
+Group7Sprites: ; 14548
+ db SPRITE_SUICUNE
+ db SPRITE_SILVER_TROPHY
+ db SPRITE_FAMICOM
+ db SPRITE_POKEDEX
+ db SPRITE_WILL
+ db SPRITE_KAREN
+ db SPRITE_NURSE
+ db SPRITE_OLD_LINK_RECEPTIONIST
+ db SPRITE_BIG_LAPRAS
+ db SPRITE_BIG_ONIX
+ db SPRITE_SUDOWOODO
+ db SPRITE_BIG_SNORLAX
+ db SPRITE_COOLTRAINER_M
+ db SPRITE_SUPER_NERD
+ db SPRITE_COOLTRAINER_F
+ db SPRITE_FISHER
+ db SPRITE_YOUNGSTER
+ db SPRITE_LASS
+ db SPRITE_POKEFAN_M
+ db SPRITE_ROCKET
+ db SPRITE_MISTY
+ db SPRITE_POKE_BALL
+ db SPRITE_SLOWPOKE
+; 1455f
+
+Group25Sprites: ; 1455f
+ db SPRITE_SUICUNE
+ db SPRITE_SILVER_TROPHY
+ db SPRITE_FAMICOM
+ db SPRITE_POKEDEX
+ db SPRITE_WILL
+ db SPRITE_KAREN
+ db SPRITE_NURSE
+ db SPRITE_OLD_LINK_RECEPTIONIST
+ db SPRITE_BIG_LAPRAS
+ db SPRITE_BIG_ONIX
+ db SPRITE_SUDOWOODO
+ db SPRITE_BIG_SNORLAX
+ db SPRITE_COOLTRAINER_M
+ db SPRITE_SUPER_NERD
+ db SPRITE_COOLTRAINER_F
+ db SPRITE_FISHER
+ db SPRITE_YOUNGSTER
+ db SPRITE_LASS
+ db SPRITE_POKEFAN_M
+ db SPRITE_ROCKET
+ db SPRITE_MISTY
+ db SPRITE_POKE_BALL
+ db SPRITE_SLOWPOKE
+; 14576
+
+Group21Sprites: ; 14576
+ db SPRITE_SUICUNE
+ db SPRITE_SILVER_TROPHY
+ db SPRITE_FAMICOM
+ db SPRITE_POKEDEX
+ db SPRITE_WILL
+ db SPRITE_KAREN
+ db SPRITE_NURSE
+ db SPRITE_OLD_LINK_RECEPTIONIST
+ db SPRITE_BIG_LAPRAS
+ db SPRITE_BIG_ONIX
+ db SPRITE_SUDOWOODO
+ db SPRITE_BIG_SNORLAX
+ db SPRITE_FISHER
+ db SPRITE_POLIWAG
+ db SPRITE_TEACHER
+ db SPRITE_GRAMPS
+ db SPRITE_YOUNGSTER
+ db SPRITE_LASS
+ db SPRITE_BIKER
+ db SPRITE_SILVER
+ db SPRITE_BLUE
+ db SPRITE_POKE_BALL
+ db SPRITE_FRUIT_TREE
+; 1458d
+
+Group18Sprites: ; 1458d
+ db SPRITE_SUICUNE
+ db SPRITE_SILVER_TROPHY
+ db SPRITE_FAMICOM
+ db SPRITE_POKEDEX
+ db SPRITE_WILL
+ db SPRITE_KAREN
+ db SPRITE_NURSE
+ db SPRITE_OLD_LINK_RECEPTIONIST
+ db SPRITE_BIG_LAPRAS
+ db SPRITE_BIG_ONIX
+ db SPRITE_SUDOWOODO
+ db SPRITE_BIG_SNORLAX
+ db SPRITE_POKEFAN_M
+ db SPRITE_MACHOP
+ db SPRITE_GRAMPS
+ db SPRITE_YOUNGSTER
+ db SPRITE_FISHER
+ db SPRITE_TEACHER
+ db SPRITE_SUPER_NERD
+ db SPRITE_BIG_SNORLAX
+ db SPRITE_BIKER
+ db SPRITE_POKE_BALL
+ db SPRITE_FRUIT_TREE
+; 145a4
+
+Group12Sprites: ; 145a4
+ db SPRITE_SUICUNE
+ db SPRITE_SILVER_TROPHY
+ db SPRITE_FAMICOM
+ db SPRITE_POKEDEX
+ db SPRITE_WILL
+ db SPRITE_KAREN
+ db SPRITE_NURSE
+ db SPRITE_OLD_LINK_RECEPTIONIST
+ db SPRITE_BIG_LAPRAS
+ db SPRITE_BIG_ONIX
+ db SPRITE_SUDOWOODO
+ db SPRITE_BIG_SNORLAX
+ db SPRITE_POKEFAN_M
+ db SPRITE_MACHOP
+ db SPRITE_GRAMPS
+ db SPRITE_YOUNGSTER
+ db SPRITE_FISHER
+ db SPRITE_TEACHER
+ db SPRITE_SUPER_NERD
+ db SPRITE_BIG_SNORLAX
+ db SPRITE_BIKER
+ db SPRITE_POKE_BALL
+ db SPRITE_FRUIT_TREE
+; 145bb
+
+Group17Sprites: ; 145bb
+ db SPRITE_SUICUNE
+ db SPRITE_SILVER_TROPHY
+ db SPRITE_FAMICOM
+ db SPRITE_POKEDEX
+ db SPRITE_WILL
+ db SPRITE_KAREN
+ db SPRITE_NURSE
+ db SPRITE_OLD_LINK_RECEPTIONIST
+ db SPRITE_BIG_LAPRAS
+ db SPRITE_BIG_ONIX
+ db SPRITE_SUDOWOODO
+ db SPRITE_BIG_SNORLAX
+ db SPRITE_POKEFAN_M
+ db SPRITE_MACHOP
+ db SPRITE_GRAMPS
+ db SPRITE_YOUNGSTER
+ db SPRITE_FISHER
+ db SPRITE_TEACHER
+ db SPRITE_SUPER_NERD
+ db SPRITE_BIG_SNORLAX
+ db SPRITE_BIKER
+ db SPRITE_POKE_BALL
+ db SPRITE_FRUIT_TREE
+; 145d2
+
+Group16Sprites: ; 145d2
+ db SPRITE_SUICUNE
+ db SPRITE_SILVER_TROPHY
+ db SPRITE_FAMICOM
+ db SPRITE_POKEDEX
+ db SPRITE_WILL
+ db SPRITE_KAREN
+ db SPRITE_NURSE
+ db SPRITE_OLD_LINK_RECEPTIONIST
+ db SPRITE_BIG_LAPRAS
+ db SPRITE_BIG_ONIX
+ db SPRITE_SUDOWOODO
+ db SPRITE_BIG_SNORLAX
+ db SPRITE_POKEFAN_M
+ db SPRITE_BUENA
+ db SPRITE_GRAMPS
+ db SPRITE_YOUNGSTER
+ db SPRITE_FISHER
+ db SPRITE_TEACHER
+ db SPRITE_SUPER_NERD
+ db SPRITE_MACHOP
+ db SPRITE_BIKER
+ db SPRITE_POKE_BALL
+ db SPRITE_BOULDER
+; 145e9
+
+Group24Sprites: ; 145e9
+ db SPRITE_SUICUNE
+ db SPRITE_SILVER_TROPHY
+ db SPRITE_FAMICOM
+ db SPRITE_POKEDEX
+ db SPRITE_WILL
+ db SPRITE_KAREN
+ db SPRITE_NURSE
+ db SPRITE_OLD_LINK_RECEPTIONIST
+ db SPRITE_BIG_LAPRAS
+ db SPRITE_BIG_ONIX
+ db SPRITE_SUDOWOODO
+ db SPRITE_BIG_SNORLAX
+ db SPRITE_SILVER
+ db SPRITE_TEACHER
+ db SPRITE_FISHER
+ db SPRITE_COOLTRAINER_M
+ db SPRITE_YOUNGSTER
+ db SPRITE_MONSTER
+ db SPRITE_GRAMPS
+ db SPRITE_BUG_CATCHER
+ db SPRITE_COOLTRAINER_F
+ db SPRITE_POKE_BALL
+ db SPRITE_FRUIT_TREE
+; 14600
+
+Group26Sprites: ; 14600
+ db SPRITE_SUICUNE
+ db SPRITE_SILVER_TROPHY
+ db SPRITE_FAMICOM
+ db SPRITE_POKEDEX
+ db SPRITE_WILL
+ db SPRITE_KAREN
+ db SPRITE_NURSE
+ db SPRITE_OLD_LINK_RECEPTIONIST
+ db SPRITE_BIG_LAPRAS
+ db SPRITE_BIG_ONIX
+ db SPRITE_SUDOWOODO
+ db SPRITE_BIG_SNORLAX
+ db SPRITE_SILVER
+ db SPRITE_TEACHER
+ db SPRITE_FISHER
+ db SPRITE_COOLTRAINER_M
+ db SPRITE_YOUNGSTER
+ db SPRITE_MONSTER
+ db SPRITE_GRAMPS
+ db SPRITE_BUG_CATCHER
+ db SPRITE_COOLTRAINER_F
+ db SPRITE_POKE_BALL
+ db SPRITE_FRUIT_TREE
+; 14617
+
+Group19Sprites: ; 14617
+ db SPRITE_SUICUNE
+ db SPRITE_SILVER_TROPHY
+ db SPRITE_FAMICOM
+ db SPRITE_POKEDEX
+ db SPRITE_WILL
+ db SPRITE_KAREN
+ db SPRITE_NURSE
+ db SPRITE_OLD_LINK_RECEPTIONIST
+ db SPRITE_BIG_LAPRAS
+ db SPRITE_BIG_ONIX
+ db SPRITE_SUDOWOODO
+ db SPRITE_BIG_SNORLAX
+ db SPRITE_SILVER
+ db SPRITE_TEACHER
+ db SPRITE_FISHER
+ db SPRITE_COOLTRAINER_M
+ db SPRITE_YOUNGSTER
+ db SPRITE_MONSTER
+ db SPRITE_GRAMPS
+ db SPRITE_BUG_CATCHER
+ db SPRITE_COOLTRAINER_F
+ db SPRITE_POKE_BALL
+ db SPRITE_FRUIT_TREE
+; 1462e
+
+Group10Sprites: ; 1462e
+ db SPRITE_SUICUNE
+ db SPRITE_SILVER_TROPHY
+ db SPRITE_FAMICOM
+ db SPRITE_POKEDEX
+ db SPRITE_WILL
+ db SPRITE_KAREN
+ db SPRITE_NURSE
+ db SPRITE_OLD_LINK_RECEPTIONIST
+ db SPRITE_BIG_LAPRAS
+ db SPRITE_BIG_ONIX
+ db SPRITE_SUDOWOODO
+ db SPRITE_BIG_SNORLAX
+ db SPRITE_FISHER
+ db SPRITE_LASS
+ db SPRITE_OFFICER
+ db SPRITE_GRAMPS
+ db SPRITE_YOUNGSTER
+ db SPRITE_COOLTRAINER_M
+ db SPRITE_BUG_CATCHER
+ db SPRITE_SUPER_NERD
+ db SPRITE_WEIRD_TREE
+ db SPRITE_POKE_BALL
+ db SPRITE_FRUIT_TREE
+; 14645
+
+Group4Sprites: ; 14645
+ db SPRITE_SUICUNE
+ db SPRITE_SILVER_TROPHY
+ db SPRITE_FAMICOM
+ db SPRITE_POKEDEX
+ db SPRITE_WILL
+ db SPRITE_KAREN
+ db SPRITE_NURSE
+ db SPRITE_OLD_LINK_RECEPTIONIST
+ db SPRITE_BIG_LAPRAS
+ db SPRITE_BIG_ONIX
+ db SPRITE_SUDOWOODO
+ db SPRITE_BIG_SNORLAX
+ db SPRITE_FISHER
+ db SPRITE_LASS
+ db SPRITE_OFFICER
+ db SPRITE_GRAMPS
+ db SPRITE_YOUNGSTER
+ db SPRITE_COOLTRAINER_M
+ db SPRITE_BUG_CATCHER
+ db SPRITE_SUPER_NERD
+ db SPRITE_WEIRD_TREE
+ db SPRITE_POKE_BALL
+ db SPRITE_FRUIT_TREE
+; 1465c
+
+Group8Sprites: ; 1465c
+ db SPRITE_SUICUNE
+ db SPRITE_SILVER_TROPHY
+ db SPRITE_FAMICOM
+ db SPRITE_POKEDEX
+ db SPRITE_WILL
+ db SPRITE_KAREN
+ db SPRITE_NURSE
+ db SPRITE_OLD_LINK_RECEPTIONIST
+ db SPRITE_KURT_OUTSIDE
+ db SPRITE_BIG_ONIX
+ db SPRITE_SUDOWOODO
+ db SPRITE_BIG_SNORLAX
+ db SPRITE_GRAMPS
+ db SPRITE_YOUNGSTER
+ db SPRITE_OFFICER
+ db SPRITE_POKEFAN_M
+ db SPRITE_BLACK_BELT
+ db SPRITE_TEACHER
+ db SPRITE_AZALEA_ROCKET
+ db SPRITE_LASS
+ db SPRITE_SILVER
+ db SPRITE_FRUIT_TREE
+ db SPRITE_SLOWPOKE
+; 14673
+
+Group11Sprites: ; 14673
+ db SPRITE_SUICUNE
+ db SPRITE_SILVER_TROPHY
+ db SPRITE_POKE_BALL
+ db SPRITE_POKEDEX
+ db SPRITE_WILL
+ db SPRITE_KAREN
+ db SPRITE_NURSE
+ db SPRITE_OLD_LINK_RECEPTIONIST
+ db SPRITE_BIG_LAPRAS
+ db SPRITE_BIG_ONIX
+ db SPRITE_SUDOWOODO
+ db SPRITE_BIG_SNORLAX
+ db SPRITE_GRAMPS
+ db SPRITE_YOUNGSTER
+ db SPRITE_OFFICER
+ db SPRITE_POKEFAN_M
+ db SPRITE_DAYCARE_MON_1
+ db SPRITE_COOLTRAINER_F
+ db SPRITE_ROCKET
+ db SPRITE_LASS
+ db SPRITE_DAYCARE_MON_2
+ db SPRITE_FRUIT_TREE
+ db SPRITE_SLOWPOKE
+; 1468a
+
+Group22Sprites: ; 1468a
+ db SPRITE_SUICUNE
+ db SPRITE_SILVER_TROPHY
+ db SPRITE_FAMICOM
+ db SPRITE_POKEDEX
+ db SPRITE_WILL
+ db SPRITE_KAREN
+ db SPRITE_NURSE
+ db SPRITE_OLD_LINK_RECEPTIONIST
+ db SPRITE_STANDING_YOUNGSTER
+ db SPRITE_BIG_ONIX
+ db SPRITE_SUDOWOODO
+ db SPRITE_BIG_SNORLAX
+ db SPRITE_OLIVINE_RIVAL
+ db SPRITE_POKEFAN_M
+ db SPRITE_LASS
+ db SPRITE_BUENA
+ db SPRITE_SWIMMER_GIRL
+ db SPRITE_SAILOR
+ db SPRITE_POKEFAN_F
+ db SPRITE_SUPER_NERD
+ db SPRITE_TAUROS
+ db SPRITE_FRUIT_TREE
+ db SPRITE_ROCK
+; 146a1
+
+Group1Sprites: ; 146a1
+ db SPRITE_SUICUNE
+ db SPRITE_SILVER_TROPHY
+ db SPRITE_FAMICOM
+ db SPRITE_POKEDEX
+ db SPRITE_WILL
+ db SPRITE_KAREN
+ db SPRITE_NURSE
+ db SPRITE_OLD_LINK_RECEPTIONIST
+ db SPRITE_STANDING_YOUNGSTER
+ db SPRITE_BIG_ONIX
+ db SPRITE_SUDOWOODO
+ db SPRITE_BIG_SNORLAX
+ db SPRITE_OLIVINE_RIVAL
+ db SPRITE_POKEFAN_M
+ db SPRITE_LASS
+ db SPRITE_BUENA
+ db SPRITE_SWIMMER_GIRL
+ db SPRITE_SAILOR
+ db SPRITE_POKEFAN_F
+ db SPRITE_SUPER_NERD
+ db SPRITE_TAUROS
+ db SPRITE_FRUIT_TREE
+ db SPRITE_ROCK
+; 146b8
+
+Group9Sprites: ; 146b8
+ db SPRITE_SUICUNE
+ db SPRITE_SILVER_TROPHY
+ db SPRITE_FAMICOM
+ db SPRITE_POKEDEX
+ db SPRITE_WILL
+ db SPRITE_KAREN
+ db SPRITE_NURSE
+ db SPRITE_OLD_LINK_RECEPTIONIST
+ db SPRITE_BIG_LAPRAS
+ db SPRITE_BIG_ONIX
+ db SPRITE_SUDOWOODO
+ db SPRITE_BIG_SNORLAX
+ db SPRITE_LANCE
+ db SPRITE_GRAMPS
+ db SPRITE_SUPER_NERD
+ db SPRITE_COOLTRAINER_F
+ db SPRITE_FISHER
+ db SPRITE_COOLTRAINER_M
+ db SPRITE_LASS
+ db SPRITE_YOUNGSTER
+ db SPRITE_GYARADOS
+ db SPRITE_FRUIT_TREE
+ db SPRITE_POKE_BALL
+; 146cf
+
+Group2Sprites: ; 146cf
+ db SPRITE_SUICUNE
+ db SPRITE_SILVER_TROPHY
+ db SPRITE_FAMICOM
+ db SPRITE_POKEDEX
+ db SPRITE_WILL
+ db SPRITE_KAREN
+ db SPRITE_NURSE
+ db SPRITE_OLD_LINK_RECEPTIONIST
+ db SPRITE_BIG_LAPRAS
+ db SPRITE_BIG_ONIX
+ db SPRITE_SUDOWOODO
+ db SPRITE_BIG_SNORLAX
+ db SPRITE_GRAMPS
+ db SPRITE_YOUNGSTER
+ db SPRITE_LASS
+ db SPRITE_SUPER_NERD
+ db SPRITE_COOLTRAINER_M
+ db SPRITE_POKEFAN_M
+ db SPRITE_BLACK_BELT
+ db SPRITE_COOLTRAINER_F
+ db SPRITE_FISHER
+ db SPRITE_FRUIT_TREE
+ db SPRITE_POKE_BALL
+; 146e6
+
+Group5Sprites: ; 146e6
+ db SPRITE_SUICUNE
+ db SPRITE_SILVER_TROPHY
+ db SPRITE_FAMICOM
+ db SPRITE_POKEDEX
+ db SPRITE_WILL
+ db SPRITE_KAREN
+ db SPRITE_NURSE
+ db SPRITE_OLD_LINK_RECEPTIONIST
+ db SPRITE_BIG_LAPRAS
+ db SPRITE_BIG_ONIX
+ db SPRITE_SUDOWOODO
+ db SPRITE_BIG_SNORLAX
+ db SPRITE_GRAMPS
+ db SPRITE_YOUNGSTER
+ db SPRITE_LASS
+ db SPRITE_SUPER_NERD
+ db SPRITE_COOLTRAINER_M
+ db SPRITE_POKEFAN_M
+ db SPRITE_BLACK_BELT
+ db SPRITE_COOLTRAINER_F
+ db SPRITE_FISHER
+ db SPRITE_FRUIT_TREE
+ db SPRITE_POKE_BALL
+; 146fd
+
+Group3Sprites: ; 146fd
+ db SPRITE_SUICUNE
+ db SPRITE_SILVER_TROPHY
+ db SPRITE_FAMICOM
+ db SPRITE_POKEDEX
+ db SPRITE_WILL
+ db SPRITE_KAREN
+ db SPRITE_NURSE
+ db SPRITE_OLD_LINK_RECEPTIONIST
+ db SPRITE_GAMEBOY_KID
+ db SPRITE_BIG_ONIX
+ db SPRITE_SUDOWOODO
+ db SPRITE_BIG_SNORLAX
+ db SPRITE_LASS
+ db SPRITE_POKEFAN_F
+ db SPRITE_TEACHER
+ db SPRITE_YOUNGSTER
+ db SPRITE_GROWLITHE
+ db SPRITE_POKEFAN_M
+ db SPRITE_ROCKER
+ db SPRITE_FISHER
+ db SPRITE_SCIENTIST
+ db SPRITE_POKE_BALL
+ db SPRITE_BOULDER
+; 14714
+
+Group15Sprites: ; 14714
+ db SPRITE_SUICUNE
+ db SPRITE_SILVER_TROPHY
+ db SPRITE_FAMICOM
+ db SPRITE_POKEDEX
+ db SPRITE_WILL
+ db SPRITE_KAREN
+ db SPRITE_NURSE
+ db SPRITE_OLD_LINK_RECEPTIONIST
+ db SPRITE_BIG_LAPRAS
+ db SPRITE_BIG_ONIX
+ db SPRITE_SUDOWOODO
+ db SPRITE_BIG_SNORLAX
+ db SPRITE_SAILOR
+ db SPRITE_FISHING_GURU
+ db SPRITE_GENTLEMAN
+ db SPRITE_SUPER_NERD
+ db SPRITE_HO_OH
+ db SPRITE_TEACHER
+ db SPRITE_COOLTRAINER_F
+ db SPRITE_YOUNGSTER
+ db SPRITE_FAIRY
+ db SPRITE_POKE_BALL
+ db SPRITE_ROCK
+; 1472b
+
+Group20Sprites: ; 1472b
+ db SPRITE_OAK
+ db SPRITE_FISHER
+ db SPRITE_TEACHER
+ db SPRITE_TWIN
+ db SPRITE_POKEFAN_M
+ db SPRITE_GRAMPS
+ db SPRITE_FAIRY
+ db SPRITE_SILVER
+ db SPRITE_FISHING_GURU
+ db SPRITE_POKE_BALL
+ db SPRITE_POKEDEX
+; 14736
+
+
+SpriteHeaders: ; 14736
+INCLUDE "gfx/overworld/sprite_headers.asm"
+; 1499a
diff --git a/engine/pack.asm b/engine/pack.asm
index 2ba9c9d3a..0b7d35ece 100644
--- a/engine/pack.asm
+++ b/engine/pack.asm
@@ -1,7 +1,7 @@
Pack: ; 10000
ld hl, Options
- set 4, [hl]
+ set NO_TEXT_SCROLL, [hl]
call Function1068a
.loop
call JoyTextDelay
@@ -14,9 +14,9 @@ Pack: ; 10000
.done
ld a, [wcf65]
- ld [wd0d6], a
+ ld [wLastPocket], a
ld hl, Options
- res 4, [hl]
+ res NO_TEXT_SCROLL, [hl]
ret
; 10026
@@ -65,11 +65,11 @@ Function10067: ; 10067 (4:4067)
call CopyMenuDataHeader
ld a, [wItemsPocketCursor]
ld [wMenuCursorBuffer], a
- ld a, [wd0df]
- ld [wd0e4], a
+ ld a, [wItemsPocketScrollPosition]
+ ld [wMenuScrollPosition], a
call HandleScrollingMenu
- ld a, [wd0e4]
- ld [wd0df], a
+ ld a, [wMenuScrollPosition]
+ ld [wItemsPocketScrollPosition], a
ld a, [MenuSelection2]
ld [wItemsPocketCursor], a
ld b, $7
@@ -93,11 +93,11 @@ Function100a6: ; 100a6 (4:40a6)
call CopyMenuDataHeader
ld a, [wKeyItemsPocketCursor]
ld [wMenuCursorBuffer], a
- ld a, [wd0e0]
- ld [wd0e4], a
+ ld a, [wKeyItemsPocketScrollPosition]
+ ld [wMenuScrollPosition], a
call HandleScrollingMenu
- ld a, [wd0e4]
- ld [wd0e0], a
+ ld a, [wMenuScrollPosition]
+ ld [wKeyItemsPocketScrollPosition], a
ld a, [MenuSelection2]
ld [wKeyItemsPocketCursor], a
ld b, $3
@@ -164,7 +164,7 @@ MenuData2_0x1012c: ; 0x1012c
Jumptable_10137: ; 10137
dw Function10159
- dw Function10492_ret
+ dw QuitItemSubmenu
; 1013b
MenuDataHeader_0x1013b: ; 0x1013b
@@ -185,8 +185,8 @@ MenuData2_0x10143: ; 0x10143
Jumptable_10153: ; 10153
dw Function10159
- dw Function103fd
- dw Function10492_ret
+ dw GiveItem
+ dw QuitItemSubmenu
; 10159
Function10159: ; 10159
@@ -223,11 +223,11 @@ Function10198: ; 10198 (4:4198)
call CopyMenuDataHeader
ld a, [wBallsPocketCursor]
ld [wMenuCursorBuffer], a
- ld a, [wd0e1]
- ld [wd0e4], a
+ ld a, [wBallsPocketScrollPosition]
+ ld [wMenuScrollPosition], a
call HandleScrollingMenu
- ld a, [wd0e4]
- ld [wd0e1], a
+ ld a, [wMenuScrollPosition]
+ ld [wBallsPocketScrollPosition], a
ld a, [MenuSelection2]
ld [wBallsPocketCursor], a
ld b, $1
@@ -267,32 +267,32 @@ Function101c5: ; 101c5 (4:41c5)
jr .tossable_unselectable
.usable
- ld hl, MenuDataHeader_0x10249
+ ld hl, MenuDataHeader_UsableKeyItem
ld de, Jumptable_1026a
jr .build_menu
.selectable_usable
- ld hl, MenuDataHeader_0x10274
+ ld hl, MenuDataHeader_UsableItem
ld de, Jumptable_10291
jr .build_menu
.tossable_selectable
- ld hl, MenuDataHeader_0x10299
+ ld hl, MenuDataHeader_UnusableItem
ld de, Jumptable_102ac
jr .build_menu
.tossable_unselectable
- ld hl, MenuDataHeader_0x102b0
+ ld hl, MenuDataHeader_UnusableKeyItem
ld de, Jumptable_102c7
jr .build_menu
.unusable
- ld hl, MenuDataHeader_0x102cd
+ ld hl, MenuDataHeader_HoldableKeyItem
ld de, Jumptable_102ea
jr .build_menu
.selectable_unusable
- ld hl, MenuDataHeader_0x102f2
+ ld hl, MenuDataHeader_HoldableItem
ld de, Jumptable_1030b
.build_menu
push de
@@ -307,15 +307,15 @@ Function101c5: ; 101c5 (4:41c5)
jp [hl]
; 10249 (4:4249)
-MenuDataHeader_0x10249: ; 0x10249
+MenuDataHeader_UsableKeyItem: ; 0x10249
db $40 ; flags
db 01, 13 ; start coords
db 11, 19 ; end coords
- dw MenuData2_0x10251
+ dw .MenuData2
db 1 ; default option
; 0x10251
-MenuData2_0x10251: ; 0x10251
+.MenuData2: ; 0x10251
db $c0 ; flags
db 5 ; items
db "USE@"
@@ -326,22 +326,22 @@ MenuData2_0x10251: ; 0x10251
; 0x1026a
Jumptable_1026a: ; 1026a
- dw Function10311
- dw Function103fd
- dw Function10364
- dw Function103c2
- dw Function10492_ret
+ dw UseItem
+ dw GiveItem
+ dw TossMenu
+ dw RegisterItem
+ dw QuitItemSubmenu
; 10274
-MenuDataHeader_0x10274: ; 0x10274
+MenuDataHeader_UsableItem: ; 0x10274
db $40 ; flags
db 03, 13 ; start coords
db 11, 19 ; end coords
- dw MenuData2_0x1027c
+ dw .MenuData2
db 1 ; default option
; 0x1027c
-MenuData2_0x1027c: ; 0x1027c
+.MenuData2: ; 0x1027c
db $c0 ; flags
db 4 ; items
db "USE@"
@@ -351,21 +351,21 @@ MenuData2_0x1027c: ; 0x1027c
; 0x10291
Jumptable_10291: ; 10291
- dw Function10311
- dw Function103fd
- dw Function10364
- dw Function10492_ret
+ dw UseItem
+ dw GiveItem
+ dw TossMenu
+ dw QuitItemSubmenu
; 10299
-MenuDataHeader_0x10299: ; 0x10299
+MenuDataHeader_UnusableItem: ; 0x10299
db %01000000 ; flags
db 07, 13 ; start coords
db 11, 19 ; end coords
- dw MenuData2_0x102a1
+ dw .MenuData2
db 1 ; default option
; 0x102a1
-MenuData2_0x102a1: ; 0x102a1
+.MenuData2: ; 0x102a1
db $c0 ; flags
db 2 ; items
db "USE@"
@@ -373,19 +373,19 @@ MenuData2_0x102a1: ; 0x102a1
; 0x102ac
Jumptable_102ac: ; 102ac
- dw Function10311
- dw Function10492_ret
+ dw UseItem
+ dw QuitItemSubmenu
; 102b0
-MenuDataHeader_0x102b0: ; 0x102b0
+MenuDataHeader_UnusableKeyItem: ; 0x102b0
db %01000000 ; flags
db 05, 13 ; start coords
db 11, 19 ; end coords
- dw MenuData2_0x102b8
+ dw .MenuData2
db 1 ; default option
; 0x102b8
-MenuData2_0x102b8: ; 0x102b8
+.MenuData2: ; 0x102b8
db $c0 ; flags
db 3 ; items
db "USE@"
@@ -394,20 +394,20 @@ MenuData2_0x102b8: ; 0x102b8
; 0x102c7
Jumptable_102c7: ; 102c7
- dw Function10311
- dw Function103c2
- dw Function10492_ret
+ dw UseItem
+ dw RegisterItem
+ dw QuitItemSubmenu
; 102cd
-MenuDataHeader_0x102cd: ; 0x102cd
+MenuDataHeader_HoldableKeyItem: ; 0x102cd
db $40 ; flags
db 03, 13 ; start coords
db 11, 19 ; end coords
- dw MenuData2_0x102d5
+ dw .MenuData2
db 1 ; default option
; 0x102d5
-MenuData2_0x102d5: ; 0x102d5
+.MenuData2: ; 0x102d5
db $c0 ; flags
db 4 ; items
db "GIVE@"
@@ -417,21 +417,21 @@ MenuData2_0x102d5: ; 0x102d5
; 0x102ea
Jumptable_102ea: ; 102ea
- dw Function103fd
- dw Function10364
- dw Function103c2
- dw Function10492_ret
+ dw GiveItem
+ dw TossMenu
+ dw RegisterItem
+ dw QuitItemSubmenu
; 102f2
-MenuDataHeader_0x102f2: ; 0x102f2
+MenuDataHeader_HoldableItem: ; 0x102f2
db $40 ; flags
db 05, 13 ; start coords
db 11, 19 ; end coords
- dw MenuData2_0x102fa
+ dw .MenuData2
db 1 ; default option
; 0x102fa
-MenuData2_0x102fa: ; 0x102fa
+.MenuData2: ; 0x102fa
db $c0 ; flags
db 3 ; items
db "GIVE@"
@@ -440,12 +440,12 @@ MenuData2_0x102fa: ; 0x102fa
; 0x1030b
Jumptable_1030b: ; 1030b
- dw Function103fd
- dw Function10364
- dw Function10492_ret
+ dw GiveItem
+ dw TossMenu
+ dw QuitItemSubmenu
; 10311
-Function10311: ; 10311
+UseItem: ; 10311
callba CheckItemMenu
ld a, [wItemAttributeParamBuffer]
ld hl, .jumptable
@@ -464,7 +464,7 @@ Function10311: ; 10311
; 1035c
.Oak: ; 1032d (4:432d)
- ld hl, UnknownText_0x10af3
+ ld hl, Text_ThisIsntTheTime
call Function10889
ret
@@ -498,30 +498,30 @@ Function10311: ; 10311
ret
; 10364 (4:4364)
-Function10364: ; 10364
- ld hl, UnknownText_0x10ae4
+TossMenu: ; 10364
+ ld hl, Text_ThrowAwayHowMany
call Function10889
callba Function24fbf
push af
call ExitMenu
pop af
- jr c, .asm_1039c
- call Function10a1d
- ld hl, UnknownText_0x10ae9
+ jr c, .finish
+ call Pack_GetItemName
+ ld hl, Text_ConfirmThrowAway
call MenuTextBox
call YesNoBox
push af
call ExitMenu
pop af
- jr c, .asm_1039c
+ jr c, .finish
ld hl, NumItems
- ld a, [wd107]
+ ld a, [ItemCountBuffer]
call TossItem
- call Function10a1d
- ld hl, UnknownText_0x10aee
+ call Pack_GetItemName
+ ld hl, Text_ThrewAway
call Function10889
-.asm_1039c
+.finish
ret
; 1039d
@@ -538,23 +538,23 @@ Function1039d: ; 1039d
.asm_103aa
xor a
ld [wBallsPocketCursor], a
- ld [wd0e1], a
+ ld [wBallsPocketScrollPosition], a
ret
.asm_103b2
xor a
ld [wItemsPocketCursor], a
- ld [wd0df], a
+ ld [wItemsPocketScrollPosition], a
ret
.asm_103ba
xor a
ld [wKeyItemsPocketCursor], a
- ld [wd0e0], a
+ ld [wKeyItemsPocketScrollPosition], a
ret
; 103c2
-Function103c2: ; 103c2
+RegisterItem: ; 103c2
callba CheckSelectableItem
ld a, [wItemAttributeParamBuffer]
and a
@@ -564,27 +564,27 @@ Function103c2: ; 103c2
rrca
and $c0
ld b, a
- ld a, [wd107]
+ ld a, [ItemCountBuffer]
inc a
and $3f
or b
ld [WhichRegisteredItem], a
ld a, [CurItem]
ld [RegisteredItem], a
- call Function10a1d
+ call Pack_GetItemName
ld de, SFX_FULL_HEAL
call WaitPlaySFX
- ld hl, UnknownText_0x10afd
+ ld hl, Text_RegisteredItem
call Function10889
ret
.asm_103f6
- ld hl, UnknownText_0x10b02
+ ld hl, Text_CantRegister
call Function10889
ret
; 103fd
-Function103fd: ; 103fd
+GiveItem: ; 103fd
ld a, [PartyCount]
and a
jp z, Function10486
@@ -595,9 +595,9 @@ Function103fd: ; 103fd
ld a, $8
ld [PartyMenuActionText], a
call ClearBGPalettes
- callba Function5004f
- callba Function50405
- callba Function503e0
+ callba LoadPartyMenuGFX
+ callba InitPartyMenuWithCancel
+ callba InitPartyMenuGFX
.asm_10427
callba WritePartyMenuTilemap
callba PrintPartyMenuText
@@ -652,7 +652,7 @@ TextJump_AnEGGCantHoldAnItem: ; 0x1048d
db "@"
; 0x10492
-Function10492_ret: ; 10492
+QuitItemSubmenu: ; 10492
ret
; 10493
@@ -661,18 +661,18 @@ BattlePack: ; 10493
ld hl, Options
set 4, [hl]
call Function1068a
-.asm_1049b
+.loop
call JoyTextDelay
ld a, [wJumptableIndex]
bit 7, a
- jr nz, .asm_104ad
+ jr nz, .end
call Function104b9
call DelayFrame
- jr .asm_1049b
+ jr .loop
-.asm_104ad
+.end
ld a, [wcf65]
- ld [wd0d6], a
+ ld [wLastPocket], a
ld hl, Options
res 4, [hl]
ret
@@ -723,11 +723,11 @@ Function104fa: ; 104fa (4:44fa)
call CopyMenuDataHeader
ld a, [wItemsPocketCursor]
ld [wMenuCursorBuffer], a
- ld a, [wd0df]
- ld [wd0e4], a
+ ld a, [wItemsPocketScrollPosition]
+ ld [wMenuScrollPosition], a
call HandleScrollingMenu
- ld a, [wd0e4]
- ld [wd0df], a
+ ld a, [wMenuScrollPosition]
+ ld [wItemsPocketScrollPosition], a
ld a, [MenuSelection2]
ld [wItemsPocketCursor], a
ld b, $7
@@ -751,11 +751,11 @@ Function10539: ; 10539 (4:4539)
call CopyMenuDataHeader
ld a, [wKeyItemsPocketCursor]
ld [wMenuCursorBuffer], a
- ld a, [wd0e0]
- ld [wd0e4], a
+ ld a, [wKeyItemsPocketScrollPosition]
+ ld [wMenuScrollPosition], a
call HandleScrollingMenu
- ld a, [wd0e4]
- ld [wd0e0], a
+ ld a, [wMenuScrollPosition]
+ ld [wKeyItemsPocketScrollPosition], a
ld a, [MenuSelection2]
ld [wKeyItemsPocketCursor], a
ld b, $3
@@ -773,7 +773,7 @@ Function10566: ; 10566 (4:4566)
xor a
ld [hBGMapMode], a
call WaitBGMap_DrawPackGFX
- ld hl, UnknownText_0x10b0c
+ ld hl, Text_PackEmptyString
call Function10889
call Function10866
ret
@@ -802,11 +802,11 @@ Function105a6: ; 105a6 (4:45a6)
call CopyMenuDataHeader
ld a, [wBallsPocketCursor]
ld [wMenuCursorBuffer], a
- ld a, [wd0e1]
- ld [wd0e4], a
+ ld a, [wBallsPocketScrollPosition]
+ ld [wMenuScrollPosition], a
call HandleScrollingMenu
- ld a, [wd0e4]
- ld [wd0e1], a
+ ld a, [wMenuScrollPosition]
+ ld [wBallsPocketScrollPosition], a
ld a, [MenuSelection2]
ld [wBallsPocketCursor], a
ld b, $1
@@ -898,7 +898,7 @@ Function105dc: ; 105dc (4:45dc)
.Oak: ; 10645 (4:4645)
- ld hl, UnknownText_0x10af3
+ ld hl, Text_ThisIsntTheTime
call Function10889
ret
@@ -951,7 +951,7 @@ Function105dc: ; 105dc (4:45dc)
Function1068a: ; 1068a
xor a
ld [wJumptableIndex], a
- ld a, [wd0d6]
+ ld a, [wLastPocket]
and $3
ld [wcf65], a
inc a
@@ -1008,33 +1008,33 @@ Jumptable_106d1: ; 106d1 (4:46d1)
call CopyMenuDataHeader
ld a, [wItemsPocketCursor]
ld [wMenuCursorBuffer], a
- ld a, [wd0df]
- ld [wd0e4], a
+ ld a, [wItemsPocketScrollPosition]
+ ld [wMenuScrollPosition], a
call HandleScrollingMenu
- ld a, [wd0e4]
- ld [wd0df], a
+ ld a, [wMenuScrollPosition]
+ ld [wItemsPocketScrollPosition], a
ld a, [MenuSelection2]
ld [wItemsPocketCursor], a
ret
.KeyItemsPocket: ; 106ff (4:46ff)
- ld a, $2
+ ld a, 2
call InitPocket
ld hl, MenuDataHeader_0x10a97
call CopyMenuDataHeader
ld a, [wKeyItemsPocketCursor]
ld [wMenuCursorBuffer], a
- ld a, [wd0e0]
- ld [wd0e4], a
+ ld a, [wKeyItemsPocketScrollPosition]
+ ld [wMenuScrollPosition], a
call HandleScrollingMenu
- ld a, [wd0e4]
- ld [wd0e0], a
+ ld a, [wMenuScrollPosition]
+ ld [wKeyItemsPocketScrollPosition], a
ld a, [MenuSelection2]
ld [wKeyItemsPocketCursor], a
ret
.TMHMPocket: ; 10726 (4:4726)
- ld a, $3
+ ld a, 3
call InitPocket
call WaitBGMap_DrawPackGFX
callba Function2c76f
@@ -1043,17 +1043,17 @@ Jumptable_106d1: ; 106d1 (4:46d1)
ret
.BallsPocket: ; 1073b (4:473b)
- ld a, $1
+ ld a, 1
call InitPocket
ld hl, MenuDataHeader_0x10ac7
call CopyMenuDataHeader
ld a, [wBallsPocketCursor]
ld [wMenuCursorBuffer], a
- ld a, [wd0e1]
- ld [wd0e4], a
+ ld a, [wBallsPocketScrollPosition]
+ ld [wMenuScrollPosition], a
call HandleScrollingMenu
- ld a, [wd0e4]
- ld [wd0e1], a
+ ld a, [wMenuScrollPosition]
+ ld [wBallsPocketScrollPosition], a
ld a, [MenuSelection2]
ld [wBallsPocketCursor], a
ret
@@ -1120,17 +1120,17 @@ Function1076f: ; 1076f
ret
; 107bb
-Function107bb: ; 107bb
+TutorialPack: ; 107bb
call Function106a5
ld a, [InputType]
or a
- jr z, .asm_107ca
+ jr z, .loop
callba _DudeAutoInput_RightA
-.asm_107ca
+.loop
call Function107d7
call Function1076f
- jr c, .asm_107ca
+ jr c, .loop
xor a
ld [wcf66], a
ret
@@ -1138,13 +1138,13 @@ Function107bb: ; 107bb
Function107d7: ; 107d7
ld a, [wJumptableIndex]
- ld hl, Jumptable_107e1
+ ld hl, .jumptable
call Function1086b
jp [hl]
; 107e1
-Jumptable_107e1: ; 107e1 (4:47e1)
+.jumptable: ; 107e1 (4:47e1)
dw Function107e9
dw Function1083b
dw Function10807
@@ -1161,22 +1161,22 @@ MenuDataHeader_0x107ef: ; 0x107ef
db $40 ; flags
db 01, 07 ; start coords
db 11, 19 ; end coords
- dw MenuData2_0x107f7
+ dw .MenuData2
db 1 ; default option
; 0x107f7
-MenuData2_0x107f7: ; 0x107f7
+.MenuData2: ; 0x107f7
db $ae ; flags
db 5, 8 ; rows, columns
db 2 ; horizontal spacing
dbw 0, OTPartyMons
dba PlaceMenuItemName
dba PlaceMenuItemQuantity
- dba Function244c3
+ dba UpdateItemDescription
; 10807
Function10807: ; 10807 (4:4807)
- ld a, $2
+ ld a, 2
ld hl, MenuDataHeader_0x1080e
jr Function1085a
; 1080e (4:480e)
@@ -1185,22 +1185,22 @@ MenuDataHeader_0x1080e: ; 0x1080e
db $40 ; flags
db 01, 07 ; start coords
db 11, 19 ; end coords
- dw MenuData2_0x10816
+ dw .MenuData2
db 1 ; default option
; 0x10816
-MenuData2_0x10816: ; 0x10816
+.MenuData2: ; 0x10816
db $ae ; flags
db 5, 8 ; rows, columns
db 1 ; horizontal spacing
dbw 0, OTPartyMon1Exp + 2
dba PlaceMenuItemName
dba PlaceMenuItemQuantity
- dba Function244c3
+ dba UpdateItemDescription
; 10826
Function10826: ; 10826 (4:4826)
- ld a, $3
+ ld a, 3
call InitPocket
call WaitBGMap_DrawPackGFX
callba Function2c76f
@@ -1209,7 +1209,7 @@ Function10826: ; 10826 (4:4826)
ret
Function1083b: ; 1083b (4:483b)
- ld a, $1
+ ld a, 1
ld hl, MenuDataHeader_0x10842
jr Function1085a
; 10842 (4:4842)
@@ -1218,18 +1218,18 @@ MenuDataHeader_0x10842: ; 0x10842
db $40 ; flags
db 01, 07 ; start coords
db 11, 19 ; end coords
- dw MenuData2_0x1084a
+ dw .MenuData2
db 1 ; default option
; 0x1084a
-MenuData2_0x1084a: ; 0x1084a
+.MenuData2: ; 0x1084a
db $ae ; flags
db 5, 8 ; rows, columns
db 2 ; horizontal spacing
dbw 0, OTPartyMon1CaughtGender
dba PlaceMenuItemName
dba PlaceMenuItemQuantity
- dba Function244c3
+ dba UpdateItemDescription
; 1085a
Function1085a: ; 1085a (4:485a)
@@ -1374,7 +1374,7 @@ Function108d4: ; 108d4 (4:48d4)
ret
.asm_10923
callba Function2490c
- ld hl, UnknownText_0x10b07
+ ld hl, Text_MoveItemWhere
call Function10889
scf
ret
@@ -1410,13 +1410,19 @@ Function10955: ; 10955
ld bc, $60 tiles
ld a, BANK(PackMenuGFX)
call FarCopyBytes
+
+; Background (blue if male, pink if female)
hlcoord 0, 1
ld bc, 11 * SCREEN_WIDTH
ld a, $24
call ByteFill
+
+; This is where the items themselves will be listed.
hlcoord 5, 1
lb bc, 11, 15
call ClearBox
+
+; ◀▶ POCKET ▼▲ ITEMS
hlcoord 0, 0
ld a, $28
ld c, SCREEN_WIDTH
@@ -1425,31 +1431,34 @@ Function10955: ; 10955
inc a
dec c
jr nz, .loop
+
call DrawPocketName
- call Function109a5
- hlcoord 0, 12
- lb bc, 4, 18
+ call PlacePackGFX
+
+; Place the textbox for displaying the item description
+ hlcoord 0, SCREEN_HEIGHT - 4 - 2
+ lb bc, 4, SCREEN_WIDTH - 2
call TextBox
call EnableLCD
call DrawPackGFX
ret
; 109a5
-Function109a5: ; 109a5
+PlacePackGFX: ; 109a5
hlcoord 0, 3
ld a, $50
- ld de, 15
+ ld de, SCREEN_WIDTH - 5
ld b, 3
-.asm_109af
+.row
ld c, 5
-.asm_109b1
+.column
ld [hli], a
inc a
dec c
- jr nz, .asm_109b1
+ jr nz, .column
add hl, de
dec b
- jr nz, .asm_109af
+ jr nz, .row
ret
; 109bb
@@ -1487,21 +1496,33 @@ DrawPocketName: ; 109bb
; 109e1
.tilemap: ; 109e1
- db $00, $04, $04, $04, $01, $06, $07, $08, $09, $0a, $02, $05, $05, $05, $03
- db $00, $04, $04, $04, $01, $15, $16, $17, $18, $19, $02, $05, $05, $05, $03
- db $00, $04, $04, $04, $01, $0b, $0c, $0d, $0e, $0f, $02, $05, $05, $05, $03
- db $00, $04, $04, $04, $01, $10, $11, $12, $13, $14, $02, $05, $05, $05, $03
+ db $00, $04, $04, $04, $01 ; top border
+ db $06, $07, $08, $09, $0a ; Items
+ db $02, $05, $05, $05, $03 ; bottom border
+
+ db $00, $04, $04, $04, $01 ; top border
+ db $15, $16, $17, $18, $19 ; Balls
+ db $02, $05, $05, $05, $03 ; bottom border
+
+ db $00, $04, $04, $04, $01 ; top border
+ db $0b, $0c, $0d, $0e, $0f ; Key Items
+ db $02, $05, $05, $05, $03 ; bottom border
+
+ db $00, $04, $04, $04, $01 ; top border
+ db $10, $11, $12, $13, $14 ; TM/HM
+ db $02, $05, $05, $05, $03 ; bottom border
; 10a1d
-Function10a1d: ; 10a1d
+Pack_GetItemName: ; 10a1d
ld a, [CurItem]
- ld [wd265], a
+ ld [wNamedObjectIndexBuffer], a
call GetItemName
call CopyName1
ret
; 10a2a
-Function10a2a: ; 10a2a
+Pack_ClearTilemap: ; 10a2a
+; unreferenced
hlcoord 0, 0
ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
ld a, " "
@@ -1540,7 +1561,7 @@ MenuData2_0x10a57: ; 0x10a57
dbw 0, NumItems
dba PlaceMenuItemName
dba PlaceMenuItemQuantity
- dba Function244c3
+ dba UpdateItemDescription
; 10a67
MenuDataHeader_0x10a67: ; 0x10a67
@@ -1558,7 +1579,7 @@ MenuData2_0x10a6f: ; 0x10a6f
dbw 0, NumItems
dba PlaceMenuItemName
dba PlaceMenuItemQuantity
- dba Function244c3
+ dba UpdateItemDescription
; 10a7f
MenuDataHeader_0x10a7f: ; 0x10a7f
@@ -1576,7 +1597,7 @@ MenuData2_0x10a87: ; 0x10a87
dbw 0, NumKeyItems
dba PlaceMenuItemName
dba PlaceMenuItemQuantity
- dba Function244c3
+ dba UpdateItemDescription
; 10a97
MenuDataHeader_0x10a97: ; 0x10a97
@@ -1594,7 +1615,7 @@ MenuData2_0x10a9f: ; 0x10a9f
dbw 0, NumKeyItems
dba PlaceMenuItemName
dba PlaceMenuItemQuantity
- dba Function244c3
+ dba UpdateItemDescription
; 10aaf
MenuDataHeader_0x10aaf: ; 0x10aaf
@@ -1612,7 +1633,7 @@ MenuData2_0x10ab7: ; 0x10ab7
dbw 0, NumBalls
dba PlaceMenuItemName
dba PlaceMenuItemQuantity
- dba Function244c3
+ dba UpdateItemDescription
; 10ac7
MenuDataHeader_0x10ac7: ; 0x10ac7
@@ -1630,34 +1651,34 @@ MenuData2_0x10acf: ; 0x10acf
dbw 0, NumBalls
dba PlaceMenuItemName
dba PlaceMenuItemQuantity
- dba Function244c3
+ dba UpdateItemDescription
; 10adf
-UnknownText_0x10adf: ; 0x10adf
+Text_PackNoItems: ; 0x10adf
; No items.
text_jump UnknownText_0x1c0b9a
db "@"
; 0x10ae4
-UnknownText_0x10ae4: ; 0x10ae4
+Text_ThrowAwayHowMany: ; 0x10ae4
; Throw away how many?
text_jump UnknownText_0x1c0ba5
db "@"
; 0x10ae9
-UnknownText_0x10ae9: ; 0x10ae9
+Text_ConfirmThrowAway: ; 0x10ae9
; Throw away @ @ (S)?
text_jump UnknownText_0x1c0bbb
db "@"
; 0x10aee
-UnknownText_0x10aee: ; 0x10aee
+Text_ThrewAway: ; 0x10aee
; Threw away @ (S).
text_jump UnknownText_0x1c0bd8
db "@"
; 0x10af3
-UnknownText_0x10af3: ; 0x10af3
+Text_ThisIsntTheTime: ; 0x10af3
; OAK: ! This isn't the time to use that!
text_jump UnknownText_0x1c0bee
db "@"
@@ -1669,25 +1690,25 @@ TextJump_YouDontHaveAPkmn: ; 0x10af8
db "@"
; 0x10afd
-UnknownText_0x10afd: ; 0x10afd
+Text_RegisteredItem: ; 0x10afd
; Registered the @ .
text_jump UnknownText_0x1c0c2e
db "@"
; 0x10b02
-UnknownText_0x10b02: ; 0x10b02
+Text_CantRegister: ; 0x10b02
; You can't register that item.
text_jump UnknownText_0x1c0c45
db "@"
; 0x10b07
-UnknownText_0x10b07: ; 0x10b07
+Text_MoveItemWhere: ; 0x10b07
; Where should this be moved to?
text_jump UnknownText_0x1c0c63
db "@"
; 0x10b0c
-UnknownText_0x10b0c: ; 0x10b0c
+Text_PackEmptyString: ; 0x10b0c
;
text_jump UnknownText_0x1c0c83
db "@"
diff --git a/engine/party_menu.asm b/engine/party_menu.asm
index 4d50ee8e4..06b774064 100644
--- a/engine/party_menu.asm
+++ b/engine/party_menu.asm
@@ -20,7 +20,7 @@ Function5001d: ; 5001d
call ClearBGPalettes
call Function5003f
call WaitBGMap
- ld b, $a
+ ld b, SCGB_0A
call GetSGBLayout
call SetPalettes
call DelayFrame
@@ -30,18 +30,18 @@ Function5001d: ; 5001d
; 5003f
Function5003f: ; 5003f
- call Function5004f
- call Function50405
- call Function503e0
+ call LoadPartyMenuGFX
+ call InitPartyMenuWithCancel
+ call InitPartyMenuGFX
call WritePartyMenuTilemap
call PrintPartyMenuText
ret
; 5004f
-Function5004f: ; 5004f
+LoadPartyMenuGFX: ; 5004f
call LoadFontsBattleExtra
callab Function8ad1 ; engine/color.asm
- callab InefficientlyClear121BytesAtwc300
+ callab ClearSpriteAnims
ret
; 5005f
@@ -149,7 +149,7 @@ PlacePartyHPBar: ; 500cf
ld b, $0
add hl, bc
call SetHPPal
- ld b, $fc
+ ld b, SCGB_FC
call GetSGBLayout
.skip
@@ -162,7 +162,7 @@ PlacePartyHPBar: ; 500cf
inc b
dec c
jr nz, .loop
- ld b, $a
+ ld b, SCGB_0A
call GetSGBLayout
ret
; 50117
@@ -648,7 +648,7 @@ endr
; 503e0
-Function503e0: ; 503e0
+InitPartyMenuGFX: ; 503e0
ld hl, PartyCount
ld a, [hli]
and a
@@ -656,7 +656,7 @@ Function503e0: ; 503e0
ld c, a
xor a
ld [hObjectStructIndexBuffer], a
-.asm_503ea
+.loop
push bc
push hl
ld hl, Function8e83f
@@ -669,60 +669,62 @@ Function503e0: ; 503e0
pop hl
pop bc
dec c
- jr nz, .asm_503ea
+ jr nz, .loop
callab Function8cf69
ret
; 50405
-Function50405: ; 50405
+InitPartyMenuWithCancel: ; 50405
+; with cancel
xor a
- ld [wd0e3], a
- ld de, Unknown_5044f
- call Function1bb1
+ ld [wSwitchMon], a
+ ld de, PartyMenuAttributes
+ call InitMenu3
ld a, [PartyCount]
inc a
- ld [wcfa3], a
+ ld [wcfa3], a ; list length
dec a
ld b, a
- ld a, [wd0d8]
+ ld a, [wPartyMenuCursor]
and a
- jr z, .asm_50422
+ jr z, .skip
inc b
cp b
- jr c, .asm_50424
+ jr c, .done
-.asm_50422
+.skip
ld a, $1
-.asm_50424
+.done
ld [MenuSelection2], a
- ld a, $3
+ ld a, A_BUTTON | B_BUTTON
ld [wcfa8], a
ret
; 5042d
-Function5042d: ; 0x5042d
- ld de, Unknown_5044f
- call Function1bb1
+InitPartyMenuNoCancel: ; 0x5042d
+; no cancel
+ ld de, PartyMenuAttributes
+ call InitMenu3
ld a, [PartyCount]
- ld [wcfa3], a
+ ld [wcfa3], a ; list length
ld b, a
- ld a, [wd0d8]
+ ld a, [wPartyMenuCursor]
and a
- jr z, .asm_50444
+ jr z, .skip
inc b
cp b
- jr c, .asm_50446
-.asm_50444
+ jr c, .done
+.skip
ld a, $1
-.asm_50446
+.done
ld [MenuSelection2], a
- ld a, $3
+ ld a, A_BUTTON | B_BUTTON
ld [wcfa8], a
ret
; 5044f (14:444f)
-Unknown_5044f: ; 5044f
+PartyMenuAttributes: ; 5044f
; cursor y
; cursor x
; list length
@@ -744,7 +746,7 @@ PartyMenuSelect: ; 0x50457
ld a, [MenuSelection2] ; menu selection?
cp b
jr z, .exitmenu ; CANCEL
- ld [wd0d8], a
+ ld [wPartyMenuCursor], a
ld a, [hJoyLast]
ld b, a
bit 1, b
@@ -839,92 +841,92 @@ YouHaveNoPKMNString: ; 0x50556
db "You have no <PK><MN>!@"
-Function50566: ; 50566
+PrintPartyMenuActionText: ; 50566
ld a, [CurPartyMon]
ld hl, PartyMonNicknames
call GetNick
ld a, [PartyMenuActionText]
and $f
- ld hl, Unknown_5057b
- call Function505c1
+ ld hl, .MenuActionTexts
+ call .PrintText
ret
; 5057b
-Unknown_5057b: ; 5057b
- dw UnknownText_0x50594
- dw UnknownText_0x5059e
- dw UnknownText_0x505a3
- dw UnknownText_0x505a8
- dw UnknownText_0x50599
- dw UnknownText_0x5058f
- dw UnknownText_0x505ad
- dw UnknownText_0x505b2
- dw UnknownText_0x505b7
- dw UnknownText_0x505bc
+.MenuActionTexts: ; 5057b
+ dw .Text_CuredOfPoison
+ dw .Text_BurnWasHealed
+ dw .Text_Defrosted
+ dw .Text_WokeUp
+ dw .Text_RidOfParalysis
+ dw .Text_RecoveredSomeHP
+ dw .Text_HealthReturned
+ dw .Text_Revitalized
+ dw .Text_GrewToLevel
+ dw .Text_CameToItsSenses
; 5058f
-UnknownText_0x5058f: ; 0x5058f
+.Text_RecoveredSomeHP: ; 0x5058f
; recovered @ HP!
text_jump UnknownText_0x1bc0a2
db "@"
; 0x50594
-UnknownText_0x50594: ; 0x50594
+.Text_CuredOfPoison: ; 0x50594
; 's cured of poison.
text_jump UnknownText_0x1bc0bb
db "@"
; 0x50599
-UnknownText_0x50599: ; 0x50599
+.Text_RidOfParalysis: ; 0x50599
; 's rid of paralysis.
text_jump UnknownText_0x1bc0d2
db "@"
; 0x5059e
-UnknownText_0x5059e: ; 0x5059e
+.Text_BurnWasHealed: ; 0x5059e
; 's burn was healed.
text_jump UnknownText_0x1bc0ea
db "@"
; 0x505a3
-UnknownText_0x505a3: ; 0x505a3
+.Text_Defrosted: ; 0x505a3
; was defrosted.
text_jump UnknownText_0x1bc101
db "@"
; 0x505a8
-UnknownText_0x505a8: ; 0x505a8
+.Text_WokeUp: ; 0x505a8
; woke up.
text_jump UnknownText_0x1bc115
db "@"
; 0x505ad
-UnknownText_0x505ad: ; 0x505ad
+.Text_HealthReturned: ; 0x505ad
; 's health returned.
text_jump UnknownText_0x1bc123
db "@"
; 0x505b2
-UnknownText_0x505b2: ; 0x505b2
+.Text_Revitalized: ; 0x505b2
; is revitalized.
text_jump UnknownText_0x1bc13a
db "@"
; 0x505b7
-UnknownText_0x505b7: ; 0x505b7
+.Text_GrewToLevel: ; 0x505b7
; grew to level @ !@ @
text_jump UnknownText_0x1bc14f
db "@"
; 0x505bc
-UnknownText_0x505bc: ; 0x505bc
+.Text_CameToItsSenses: ; 0x505bc
; came to its senses.
text_jump UnknownText_0x1bc16e
db "@"
; 0x505c1
-Function505c1: ; 505c1
+.PrintText: ; 505c1
ld e, a
ld d, 0
rept 2
@@ -935,7 +937,7 @@ endr
ld l, a
ld a, [Options]
push af
- set 4, a
+ set NO_TEXT_SCROLL, a
ld [Options], a
call PrintText
pop af
diff --git a/engine/phone.asm b/engine/phone.asm
index 32481deaa..ab0ecb84a 100644
--- a/engine/phone.asm
+++ b/engine/phone.asm
@@ -604,7 +604,7 @@ Phone_StartRinging: ; 9033f
call PlaySFX
call Phone_CallerTextbox
call UpdateSprites
- callba Function4d188
+ callba PhoneRing_LoadEDTile
ret
; 90355
@@ -614,7 +614,7 @@ HangUp_Wait20Frames: ; 90355
Phone_Wait20Frames
ld c, 20
call DelayFrames
- callba Function4d188
+ callba PhoneRing_LoadEDTile
ret
; 90363
diff --git a/engine/phone_scripts.asm b/engine/phone_scripts.asm
index 33541e224..5d0795766 100644
--- a/engine/phone_scripts.asm
+++ b/engine/phone_scripts.asm
@@ -1914,369 +1914,369 @@ UnknownScript_0xbde4e:
checknite
iftrue UnknownScript_0xbdfec
checkcode VAR_CALLERID
- if_equal PHONE_SCHOOLBOY_JACK, UnknownScript_0xbdeaa
- if_equal PHONE_SAILOR_HUEY, UnknownScript_0xbdeb0
- if_equal PHONE_COOLTRAINERM_GAVEN, UnknownScript_0xbdeb6
- if_equal PHONE_BIRDKEEPER_JOSE, UnknownScript_0xbdebc
- if_equal PHONE_YOUNGSTER_JOEY, UnknownScript_0xbdec2
- if_equal PHONE_BUG_CATCHER_WADE, UnknownScript_0xbdec8
- if_equal PHONE_FISHER_RALPH, UnknownScript_0xbdece
- if_equal PHONE_HIKER_ANTHONY, UnknownScript_0xbded4
- if_equal PHONE_CAMPER_TODD, UnknownScript_0xbdeda
- if_equal PHONE_JUGGLER_IRWIN, UnknownScript_0xbdee0
- if_equal PHONE_BUG_CATCHER_ARNIE, UnknownScript_0xbdee6
- if_equal PHONE_SCHOOLBOY_ALAN, UnknownScript_0xbdeec
- if_equal PHONE_SCHOOLBOY_CHAD, UnknownScript_0xbdef2
- if_equal PHONE_POKEFANM_DEREK, UnknownScript_0xbdef8
- if_equal PHONE_FISHER_TULLY, UnknownScript_0xbdefe
- if_equal PHONE_POKEMANIAC_BRENT, UnknownScript_0xbdf04
- if_equal PHONE_BIRDKEEPER_VANCE, UnknownScript_0xbdf0a
- if_equal PHONE_FISHER_WILTON, UnknownScript_0xbdf10
- if_equal PHONE_BLACKBELT_KENJI, UnknownScript_0xbdf16
- if_equal PHONE_HIKER_PARRY, UnknownScript_0xbdf1c
-
-UnknownScript_0xbdeaa:
+ if_equal PHONE_SCHOOLBOY_JACK, .Jack
+ if_equal PHONE_SAILOR_HUEY, .Huey
+ if_equal PHONE_COOLTRAINERM_GAVEN, .Gaven
+ if_equal PHONE_BIRDKEEPER_JOSE, .Jose
+ if_equal PHONE_YOUNGSTER_JOEY, .Joey
+ if_equal PHONE_BUG_CATCHER_WADE, .Wade
+ if_equal PHONE_FISHER_RALPH, .Ralph
+ if_equal PHONE_HIKER_ANTHONY, .Anthony
+ if_equal PHONE_CAMPER_TODD, .Todd
+ if_equal PHONE_JUGGLER_IRWIN, .Irwin
+ if_equal PHONE_BUG_CATCHER_ARNIE, .Arnie
+ if_equal PHONE_SCHOOLBOY_ALAN, .Alan
+ if_equal PHONE_SCHOOLBOY_CHAD, .Chad
+ if_equal PHONE_POKEFANM_DEREK, .Derek
+ if_equal PHONE_FISHER_TULLY, .Tully
+ if_equal PHONE_POKEMANIAC_BRENT, .Brent
+ if_equal PHONE_BIRDKEEPER_VANCE, .Vance
+ if_equal PHONE_FISHER_WILTON, .Wilton
+ if_equal PHONE_BLACKBELT_KENJI, .Kenji
+ if_equal PHONE_HIKER_PARRY, .Parry
+
+.Jack:
farwritetext UnknownText_0x1b4dc5
keeptextopen
end
-UnknownScript_0xbdeb0:
+.Huey:
farwritetext UnknownText_0x1b5073
keeptextopen
end
-UnknownScript_0xbdeb6:
+.Gaven:
farwritetext UnknownText_0x1b5270
keeptextopen
end
-UnknownScript_0xbdebc:
+.Jose:
farwritetext UnknownText_0x1b55ae
keeptextopen
end
-UnknownScript_0xbdec2:
+.Joey:
farwritetext UnknownText_0x1b589a
keeptextopen
end
-UnknownScript_0xbdec8:
+.Wade:
farwritetext UnknownText_0x1b5a3b
keeptextopen
end
-UnknownScript_0xbdece:
+.Ralph:
farwritetext UnknownText_0x1b5c10
keeptextopen
end
-UnknownScript_0xbded4:
+.Anthony:
farwritetext UnknownText_0x1b5f7a
keeptextopen
end
-UnknownScript_0xbdeda:
+.Todd:
farwritetext UnknownText_0x1b60f5
keeptextopen
end
-UnknownScript_0xbdee0:
+.Irwin:
farwritetext UnknownText_0x1b638c
keeptextopen
end
-UnknownScript_0xbdee6:
+.Arnie:
farwritetext UnknownText_0x1b6454
keeptextopen
end
-UnknownScript_0xbdeec:
+.Alan:
farwritetext UnknownText_0x1b659d
keeptextopen
end
-UnknownScript_0xbdef2:
+.Chad:
farwritetext UnknownText_0x1b67e2
keeptextopen
end
-UnknownScript_0xbdef8:
+.Derek:
farwritetext UnknownText_0x1b69a8
keeptextopen
end
-UnknownScript_0xbdefe:
+.Tully:
farwritetext UnknownText_0x1b6b39
keeptextopen
end
-UnknownScript_0xbdf04:
+.Brent:
farwritetext UnknownText_0x1b6c96
keeptextopen
end
-UnknownScript_0xbdf0a:
+.Vance:
farwritetext UnknownText_0x1b7019
keeptextopen
end
-UnknownScript_0xbdf10:
+.Wilton:
farwritetext UnknownText_0x1b71d5
keeptextopen
end
-UnknownScript_0xbdf16:
+.Kenji:
farwritetext UnknownText_0x1b730b
keeptextopen
end
-UnknownScript_0xbdf1c:
+.Parry:
farwritetext UnknownText_0x1b73c7
keeptextopen
end
UnknownScript_0xbdf22:
checkcode VAR_CALLERID
- if_equal PHONE_SCHOOLBOY_JACK, UnknownScript_0xbdf74
- if_equal PHONE_SAILOR_HUEY, UnknownScript_0xbdf7a
- if_equal PHONE_COOLTRAINERM_GAVEN, UnknownScript_0xbdf80
- if_equal PHONE_BIRDKEEPER_JOSE, UnknownScript_0xbdf86
- if_equal PHONE_YOUNGSTER_JOEY, UnknownScript_0xbdf8c
- if_equal PHONE_BUG_CATCHER_WADE, UnknownScript_0xbdf92
- if_equal PHONE_FISHER_RALPH, UnknownScript_0xbdf98
- if_equal PHONE_HIKER_ANTHONY, UnknownScript_0xbdf9e
- if_equal PHONE_CAMPER_TODD, UnknownScript_0xbdfa4
- if_equal PHONE_JUGGLER_IRWIN, UnknownScript_0xbdfaa
- if_equal PHONE_BUG_CATCHER_ARNIE, UnknownScript_0xbdfb0
- if_equal PHONE_SCHOOLBOY_ALAN, UnknownScript_0xbdfb6
- if_equal PHONE_SCHOOLBOY_CHAD, UnknownScript_0xbdfbc
- if_equal PHONE_POKEFANM_DEREK, UnknownScript_0xbdfc2
- if_equal PHONE_FISHER_TULLY, UnknownScript_0xbdfc8
- if_equal PHONE_POKEMANIAC_BRENT, UnknownScript_0xbdfce
- if_equal PHONE_BIRDKEEPER_VANCE, UnknownScript_0xbdfd4
- if_equal PHONE_FISHER_WILTON, UnknownScript_0xbdfda
- if_equal PHONE_BLACKBELT_KENJI, UnknownScript_0xbdfe0
- if_equal PHONE_HIKER_PARRY, UnknownScript_0xbdfe6
-
-UnknownScript_0xbdf74:
+ if_equal PHONE_SCHOOLBOY_JACK, .Jack
+ if_equal PHONE_SAILOR_HUEY, .Huey
+ if_equal PHONE_COOLTRAINERM_GAVEN, .Gaven
+ if_equal PHONE_BIRDKEEPER_JOSE, .Jose
+ if_equal PHONE_YOUNGSTER_JOEY, .Joey
+ if_equal PHONE_BUG_CATCHER_WADE, .Wade
+ if_equal PHONE_FISHER_RALPH, .Ralph
+ if_equal PHONE_HIKER_ANTHONY, .Anthony
+ if_equal PHONE_CAMPER_TODD, .Todd
+ if_equal PHONE_JUGGLER_IRWIN, .Irwin
+ if_equal PHONE_BUG_CATCHER_ARNIE, .Arnie
+ if_equal PHONE_SCHOOLBOY_ALAN, .Alan
+ if_equal PHONE_SCHOOLBOY_CHAD, .Chad
+ if_equal PHONE_POKEFANM_DEREK, .Derek
+ if_equal PHONE_FISHER_TULLY, .Tully
+ if_equal PHONE_POKEMANIAC_BRENT, .Brent
+ if_equal PHONE_BIRDKEEPER_VANCE, .Vance
+ if_equal PHONE_FISHER_WILTON, .Wilton
+ if_equal PHONE_BLACKBELT_KENJI, .Kenji
+ if_equal PHONE_HIKER_PARRY, .Parry
+
+.Jack:
farwritetext UnknownText_0x1b4ded
keeptextopen
end
-UnknownScript_0xbdf7a:
+.Huey:
farwritetext UnknownText_0x1b509b
keeptextopen
end
-UnknownScript_0xbdf80:
+.Gaven:
farwritetext UnknownText_0x1b52a5
keeptextopen
end
-UnknownScript_0xbdf86:
+.Jose:
farwritetext UnknownText_0x1b55da
keeptextopen
end
-UnknownScript_0xbdf8c:
+.Joey:
farwritetext UnknownText_0x1b58c2
keeptextopen
end
-UnknownScript_0xbdf92:
+.Wade:
farwritetext UnknownText_0x1b5a74
keeptextopen
end
-UnknownScript_0xbdf98:
+.Ralph:
farwritetext UnknownText_0x1b5c63
keeptextopen
end
-UnknownScript_0xbdf9e:
+.Anthony:
farwritetext UnknownText_0x1b5f9e
keeptextopen
end
-UnknownScript_0xbdfa4:
+.Todd:
farwritetext UnknownText_0x1b611b
keeptextopen
end
-UnknownScript_0xbdfaa:
+.Irwin:
farwritetext UnknownText_0x1b63a8
keeptextopen
end
-UnknownScript_0xbdfb0:
+.Arnie:
farwritetext UnknownText_0x1b647e
keeptextopen
end
-UnknownScript_0xbdfb6:
+.Alan:
farwritetext UnknownText_0x1b65c7
keeptextopen
end
-UnknownScript_0xbdfbc:
+.Chad:
farwritetext UnknownText_0x1b680e
keeptextopen
end
-UnknownScript_0xbdfc2:
+.Derek:
farwritetext UnknownText_0x1b69d2
keeptextopen
end
-UnknownScript_0xbdfc8:
+.Tully:
farwritetext UnknownText_0x1b6b65
keeptextopen
end
-UnknownScript_0xbdfce:
+.Brent:
farwritetext UnknownText_0x1b6cc6
keeptextopen
end
-UnknownScript_0xbdfd4:
+.Vance:
farwritetext UnknownText_0x1b7057
keeptextopen
end
-UnknownScript_0xbdfda:
+.Wilton:
farwritetext UnknownText_0x1b71fc
keeptextopen
end
-UnknownScript_0xbdfe0:
+.Kenji:
farwritetext UnknownText_0x1b7331
keeptextopen
end
-UnknownScript_0xbdfe6:
+.Parry:
farwritetext UnknownText_0x1b73ef
keeptextopen
end
UnknownScript_0xbdfec:
checkcode VAR_CALLERID
- if_equal PHONE_SCHOOLBOY_JACK, UnknownScript_0xbe03e
- if_equal PHONE_SAILOR_HUEY, UnknownScript_0xbe044
- if_equal PHONE_COOLTRAINERM_GAVEN, UnknownScript_0xbe04a
- if_equal PHONE_BIRDKEEPER_JOSE, UnknownScript_0xbe050
- if_equal PHONE_YOUNGSTER_JOEY, UnknownScript_0xbe056
- if_equal PHONE_BUG_CATCHER_WADE, UnknownScript_0xbe05c
- if_equal PHONE_FISHER_RALPH, UnknownScript_0xbe062
- if_equal PHONE_HIKER_ANTHONY, UnknownScript_0xbe068
- if_equal PHONE_CAMPER_TODD, UnknownScript_0xbe06e
- if_equal PHONE_JUGGLER_IRWIN, UnknownScript_0xbe074
- if_equal PHONE_BUG_CATCHER_ARNIE, UnknownScript_0xbe07a
- if_equal PHONE_SCHOOLBOY_ALAN, UnknownScript_0xbe080
- if_equal PHONE_SCHOOLBOY_CHAD, UnknownScript_0xbe086
- if_equal PHONE_POKEFANM_DEREK, UnknownScript_0xbe08c
- if_equal PHONE_FISHER_TULLY, UnknownScript_0xbe092
- if_equal PHONE_POKEMANIAC_BRENT, UnknownScript_0xbe098
- if_equal PHONE_BIRDKEEPER_VANCE, UnknownScript_0xbe09e
- if_equal PHONE_FISHER_WILTON, UnknownScript_0xbe0a4
- if_equal PHONE_BLACKBELT_KENJI, UnknownScript_0xbe0aa
- if_equal PHONE_HIKER_PARRY, UnknownScript_0xbe0b0
-
-UnknownScript_0xbe03e:
+ if_equal PHONE_SCHOOLBOY_JACK, .Jack
+ if_equal PHONE_SAILOR_HUEY, .Huey
+ if_equal PHONE_COOLTRAINERM_GAVEN, .Gaven
+ if_equal PHONE_BIRDKEEPER_JOSE, .Jose
+ if_equal PHONE_YOUNGSTER_JOEY, .Joey
+ if_equal PHONE_BUG_CATCHER_WADE, .Wade
+ if_equal PHONE_FISHER_RALPH, .Ralph
+ if_equal PHONE_HIKER_ANTHONY, .Anthony
+ if_equal PHONE_CAMPER_TODD, .Todd
+ if_equal PHONE_JUGGLER_IRWIN, .Irwin
+ if_equal PHONE_BUG_CATCHER_ARNIE, .Arnie
+ if_equal PHONE_SCHOOLBOY_ALAN, .Alan
+ if_equal PHONE_SCHOOLBOY_CHAD, .Chad
+ if_equal PHONE_POKEFANM_DEREK, .Derek
+ if_equal PHONE_FISHER_TULLY, .Tully
+ if_equal PHONE_POKEMANIAC_BRENT, .Brent
+ if_equal PHONE_BIRDKEEPER_VANCE, .Vance
+ if_equal PHONE_FISHER_WILTON, .Wilton
+ if_equal PHONE_BLACKBELT_KENJI, .Kenji
+ if_equal PHONE_HIKER_PARRY, .Parry
+
+.Jack:
farwritetext UnknownText_0x1b4e16
keeptextopen
end
-UnknownScript_0xbe044:
+.Huey:
farwritetext UnknownText_0x1b50c2
keeptextopen
end
-UnknownScript_0xbe04a:
+.Gaven:
farwritetext UnknownText_0x1b52cc
keeptextopen
end
-UnknownScript_0xbe050:
+.Jose:
farwritetext UnknownText_0x1b55fc
keeptextopen
end
-UnknownScript_0xbe056:
+.Joey:
farwritetext UnknownText_0x1b58ea
keeptextopen
end
-UnknownScript_0xbe05c:
+.Wade:
farwritetext UnknownText_0x1b5a9f
keeptextopen
end
-UnknownScript_0xbe062:
+.Ralph:
farwritetext UnknownText_0x1b5cb6
keeptextopen
end
-UnknownScript_0xbe068:
+.Anthony:
farwritetext UnknownText_0x1b5fc9
keeptextopen
end
-UnknownScript_0xbe06e:
+.Todd:
farwritetext UnknownText_0x1b6149
keeptextopen
end
-UnknownScript_0xbe074:
+.Irwin:
farwritetext UnknownText_0x1b63c4
keeptextopen
end
-UnknownScript_0xbe07a:
+.Arnie:
farwritetext UnknownText_0x1b64a8
keeptextopen
end
-UnknownScript_0xbe080:
+.Alan:
farwritetext UnknownText_0x1b65e3
keeptextopen
end
-UnknownScript_0xbe086:
+.Chad:
farwritetext UnknownText_0x1b6836
keeptextopen
end
-UnknownScript_0xbe08c:
+.Derek:
farwritetext UnknownText_0x1b69f8
keeptextopen
end
-UnknownScript_0xbe092:
+.Tully:
farwritetext UnknownText_0x1b6b92
keeptextopen
end
-UnknownScript_0xbe098:
+.Brent:
farwritetext UnknownText_0x1b6cf6
keeptextopen
end
-UnknownScript_0xbe09e:
+.Vance:
farwritetext UnknownText_0x1b7092
keeptextopen
end
-UnknownScript_0xbe0a4:
+.Wilton:
farwritetext UnknownText_0x1b722a
keeptextopen
end
-UnknownScript_0xbe0aa:
+.Kenji:
farwritetext UnknownText_0x1b7357
keeptextopen
end
-UnknownScript_0xbe0b0:
+.Parry:
farwritetext UnknownText_0x1b7417
keeptextopen
end
@@ -2287,153 +2287,153 @@ UnknownScript_0xbe0b6:
checknite
iftrue UnknownScript_0xbe164
checkcode VAR_CALLERID
- if_equal PHONE_POKEFAN_BEVERLY, UnknownScript_0xbe0e2
- if_equal PHONE_COOLTRAINERF_BETH, UnknownScript_0xbe0e8
- if_equal PHONE_COOLTRAINERF_REENA, UnknownScript_0xbe0ee
- if_equal PHONE_PICNICKER_LIZ, UnknownScript_0xbe0f4
- if_equal PHONE_PICNICKER_GINA, UnknownScript_0xbe0fa
- if_equal PHONE_LASS_DANA, UnknownScript_0xbe100
- if_equal PHONE_PICNICKER_TIFFANY, UnknownScript_0xbe106
- if_equal PHONE_PICNICKER_ERIN, UnknownScript_0xbe10c
-
-UnknownScript_0xbe0e2:
+ if_equal PHONE_POKEFAN_BEVERLY, .Beverly
+ if_equal PHONE_COOLTRAINERF_BETH, .Beth
+ if_equal PHONE_COOLTRAINERF_REENA, .Reena
+ if_equal PHONE_PICNICKER_LIZ, .Liz
+ if_equal PHONE_PICNICKER_GINA, .Gina
+ if_equal PHONE_LASS_DANA, .Dana
+ if_equal PHONE_PICNICKER_TIFFANY, .Tiffany
+ if_equal PHONE_PICNICKER_ERIN, .Erin
+
+.Beverly:
farwritetext UnknownText_0x1b4f21
keeptextopen
end
-UnknownScript_0xbe0e8:
+.Beth:
farwritetext UnknownText_0x1b53f7
keeptextopen
end
-UnknownScript_0xbe0ee:
+.Reena:
farwritetext UnknownText_0x1b5702
keeptextopen
end
-UnknownScript_0xbe0f4:
+.Liz:
farwritetext UnknownText_0x1b5d9f
keeptextopen
end
-UnknownScript_0xbe0fa:
+.Gina:
farwritetext UnknownText_0x1b626a
keeptextopen
end
-UnknownScript_0xbe100:
+.Dana:
farwritetext UnknownText_0x1b66c8
keeptextopen
end
-UnknownScript_0xbe106:
+.Tiffany:
farwritetext UnknownText_0x1b6e7c
keeptextopen
end
-UnknownScript_0xbe10c:
+.Erin:
farwritetext UnknownText_0x1b751a
keeptextopen
end
UnknownScript_0xbe112:
checkcode VAR_CALLERID
- if_equal PHONE_POKEFAN_BEVERLY, UnknownScript_0xbe134
- if_equal PHONE_COOLTRAINERF_BETH, UnknownScript_0xbe13a
- if_equal PHONE_COOLTRAINERF_REENA, UnknownScript_0xbe140
- if_equal PHONE_PICNICKER_LIZ, UnknownScript_0xbe146
- if_equal PHONE_PICNICKER_GINA, UnknownScript_0xbe14c
- if_equal PHONE_LASS_DANA, UnknownScript_0xbe152
- if_equal PHONE_PICNICKER_TIFFANY, UnknownScript_0xbe158
- if_equal PHONE_PICNICKER_ERIN, UnknownScript_0xbe15e
-
-UnknownScript_0xbe134:
+ if_equal PHONE_POKEFAN_BEVERLY, .Beverly
+ if_equal PHONE_COOLTRAINERF_BETH, .Beth
+ if_equal PHONE_COOLTRAINERF_REENA, .Reena
+ if_equal PHONE_PICNICKER_LIZ, .Liz
+ if_equal PHONE_PICNICKER_GINA, .Gina
+ if_equal PHONE_LASS_DANA, .Dana
+ if_equal PHONE_PICNICKER_TIFFANY, .Tiffany
+ if_equal PHONE_PICNICKER_ERIN, .Erin
+
+.Beverly:
farwritetext UnknownText_0x1b4f4d
keeptextopen
end
-UnknownScript_0xbe13a:
+.Beth:
farwritetext UnknownText_0x1b5424
keeptextopen
end
-UnknownScript_0xbe140:
+.Reena:
farwritetext UnknownText_0x1b572e
keeptextopen
end
-UnknownScript_0xbe146:
+.Liz:
farwritetext UnknownText_0x1b5dcc
keeptextopen
end
-UnknownScript_0xbe14c:
+.Gina:
farwritetext UnknownText_0x1b6296
keeptextopen
end
-UnknownScript_0xbe152:
+.Dana:
farwritetext UnknownText_0x1b66ec
keeptextopen
end
-UnknownScript_0xbe158:
+.Tiffany:
farwritetext UnknownText_0x1b6ea6
keeptextopen
end
-UnknownScript_0xbe15e:
+.Erin:
farwritetext UnknownText_0x1b7548
keeptextopen
end
UnknownScript_0xbe164:
checkcode VAR_CALLERID
- if_equal PHONE_POKEFAN_BEVERLY, UnknownScript_0xbe186
- if_equal PHONE_COOLTRAINERF_BETH, UnknownScript_0xbe18c
- if_equal PHONE_COOLTRAINERF_REENA, UnknownScript_0xbe192
- if_equal PHONE_PICNICKER_LIZ, UnknownScript_0xbe198
- if_equal PHONE_PICNICKER_GINA, UnknownScript_0xbe19e
- if_equal PHONE_LASS_DANA, UnknownScript_0xbe1a4
- if_equal PHONE_PICNICKER_TIFFANY, UnknownScript_0xbe1aa
- if_equal PHONE_PICNICKER_ERIN, UnknownScript_0xbe1b0
-
-UnknownScript_0xbe186:
+ if_equal PHONE_POKEFAN_BEVERLY, .Beverly
+ if_equal PHONE_COOLTRAINERF_BETH, .Beth
+ if_equal PHONE_COOLTRAINERF_REENA, .Reena
+ if_equal PHONE_PICNICKER_LIZ, .Liz
+ if_equal PHONE_PICNICKER_GINA, .Gina
+ if_equal PHONE_LASS_DANA, .Dana
+ if_equal PHONE_PICNICKER_TIFFANY, .Tiffany
+ if_equal PHONE_PICNICKER_ERIN, .Erin
+
+.Beverly:
farwritetext UnknownText_0x1b4f75
keeptextopen
end
-UnknownScript_0xbe18c:
+.Beth:
farwritetext UnknownText_0x1b5446
keeptextopen
end
-UnknownScript_0xbe192:
+.Reena:
farwritetext UnknownText_0x1b575a
keeptextopen
end
-UnknownScript_0xbe198:
+.Liz:
farwritetext UnknownText_0x1b5df8
keeptextopen
end
-UnknownScript_0xbe19e:
+.Gina:
farwritetext UnknownText_0x1b62c5
keeptextopen
end
-UnknownScript_0xbe1a4:
+.Dana:
farwritetext UnknownText_0x1b6713
keeptextopen
end
-UnknownScript_0xbe1aa:
+.Tiffany:
farwritetext UnknownText_0x1b6ec9
keeptextopen
end
-UnknownScript_0xbe1b0:
+.Erin:
farwritetext UnknownText_0x1b756f
keeptextopen
end
@@ -2444,369 +2444,369 @@ UnknownScript_0xbe1b6:
checknite
iftrue UnknownScript_0xbe354
checkcode VAR_CALLERID
- if_equal PHONE_SCHOOLBOY_JACK, UnknownScript_0xbe212
- if_equal PHONE_SAILOR_HUEY, UnknownScript_0xbe218
- if_equal PHONE_COOLTRAINERM_GAVEN, UnknownScript_0xbe21e
- if_equal PHONE_BIRDKEEPER_JOSE, UnknownScript_0xbe224
- if_equal PHONE_YOUNGSTER_JOEY, UnknownScript_0xbe22a
- if_equal PHONE_BUG_CATCHER_WADE, UnknownScript_0xbe230
- if_equal PHONE_FISHER_RALPH, UnknownScript_0xbe236
- if_equal PHONE_HIKER_ANTHONY, UnknownScript_0xbe23c
- if_equal PHONE_CAMPER_TODD, UnknownScript_0xbe242
- if_equal PHONE_JUGGLER_IRWIN, UnknownScript_0xbe248
- if_equal PHONE_BUG_CATCHER_ARNIE, UnknownScript_0xbe24e
- if_equal PHONE_SCHOOLBOY_ALAN, UnknownScript_0xbe254
- if_equal PHONE_SCHOOLBOY_CHAD, UnknownScript_0xbe25a
- if_equal PHONE_POKEFANM_DEREK, UnknownScript_0xbe260
- if_equal PHONE_FISHER_TULLY, UnknownScript_0xbe266
- if_equal PHONE_POKEMANIAC_BRENT, UnknownScript_0xbe26c
- if_equal PHONE_BIRDKEEPER_VANCE, UnknownScript_0xbe272
- if_equal PHONE_FISHER_WILTON, UnknownScript_0xbe278
- if_equal PHONE_BLACKBELT_KENJI, UnknownScript_0xbe27e
- if_equal PHONE_HIKER_PARRY, UnknownScript_0xbe284
-
-UnknownScript_0xbe212:
+ if_equal PHONE_SCHOOLBOY_JACK, .Jack
+ if_equal PHONE_SAILOR_HUEY, .Huey
+ if_equal PHONE_COOLTRAINERM_GAVEN, .Gaven
+ if_equal PHONE_BIRDKEEPER_JOSE, .Jose
+ if_equal PHONE_YOUNGSTER_JOEY, .Joey
+ if_equal PHONE_BUG_CATCHER_WADE, .Wade
+ if_equal PHONE_FISHER_RALPH, .Ralph
+ if_equal PHONE_HIKER_ANTHONY, .Anthony
+ if_equal PHONE_CAMPER_TODD, .Todd
+ if_equal PHONE_JUGGLER_IRWIN, .Irwin
+ if_equal PHONE_BUG_CATCHER_ARNIE, .Arnie
+ if_equal PHONE_SCHOOLBOY_ALAN, .Alan
+ if_equal PHONE_SCHOOLBOY_CHAD, .Chad
+ if_equal PHONE_POKEFANM_DEREK, .Derek
+ if_equal PHONE_FISHER_TULLY, .Tully
+ if_equal PHONE_POKEMANIAC_BRENT, .Brent
+ if_equal PHONE_BIRDKEEPER_VANCE, .Vance
+ if_equal PHONE_FISHER_WILTON, .Wilton
+ if_equal PHONE_BLACKBELT_KENJI, .Kenji
+ if_equal PHONE_HIKER_PARRY, .Parry
+
+.Jack:
farwritetext UnknownText_0x1b4e3e
keeptextopen
end
-UnknownScript_0xbe218:
+.Huey:
farwritetext UnknownText_0x1b50e9
keeptextopen
end
-UnknownScript_0xbe21e:
+.Gaven:
farwritetext UnknownText_0x1b5301
keeptextopen
end
-UnknownScript_0xbe224:
+.Jose:
farwritetext UnknownText_0x1b5628
keeptextopen
end
-UnknownScript_0xbe22a:
+.Joey:
farwritetext UnknownText_0x1b5912
keeptextopen
end
-UnknownScript_0xbe230:
+.Wade:
farwritetext UnknownText_0x1b5ad8
keeptextopen
end
-UnknownScript_0xbe236:
+.Ralph:
farwritetext UnknownText_0x1b5d09
keeptextopen
end
-UnknownScript_0xbe23c:
+.Anthony:
farwritetext UnknownText_0x1b5ff6
keeptextopen
end
-UnknownScript_0xbe242:
+.Todd:
farwritetext UnknownText_0x1b616e
keeptextopen
end
-UnknownScript_0xbe248:
+.Irwin:
farwritetext UnknownText_0x1b63e3
keeptextopen
end
-UnknownScript_0xbe24e:
+.Arnie:
farwritetext UnknownText_0x1b64d2
keeptextopen
end
-UnknownScript_0xbe254:
+.Alan:
farwritetext UnknownText_0x1b660d
keeptextopen
end
-UnknownScript_0xbe25a:
+.Chad:
farwritetext UnknownText_0x1b6862
keeptextopen
end
-UnknownScript_0xbe260:
+.Derek:
farwritetext UnknownText_0x1b6a22
keeptextopen
end
-UnknownScript_0xbe266:
+.Tully:
farwritetext UnknownText_0x1b6bb9
keeptextopen
end
-UnknownScript_0xbe26c:
+.Brent:
farwritetext UnknownText_0x1b6d26
keeptextopen
end
-UnknownScript_0xbe272:
+.Vance:
farwritetext UnknownText_0x1b70e7
keeptextopen
end
-UnknownScript_0xbe278:
+.Wilton:
farwritetext UnknownText_0x1b725c
keeptextopen
end
-UnknownScript_0xbe27e:
+.Kenji:
farwritetext UnknownText_0x1b737f
keeptextopen
end
-UnknownScript_0xbe284:
+.Parry:
farwritetext UnknownText_0x1b743f
keeptextopen
end
UnknownScript_0xbe28a:
checkcode VAR_CALLERID
- if_equal PHONE_SCHOOLBOY_JACK, UnknownScript_0xbe2dc
- if_equal PHONE_SAILOR_HUEY, UnknownScript_0xbe2e2
- if_equal PHONE_COOLTRAINERM_GAVEN, UnknownScript_0xbe2e8
- if_equal PHONE_BIRDKEEPER_JOSE, UnknownScript_0xbe2ee
- if_equal PHONE_YOUNGSTER_JOEY, UnknownScript_0xbe2f4
- if_equal PHONE_BUG_CATCHER_WADE, UnknownScript_0xbe2fa
- if_equal PHONE_FISHER_RALPH, UnknownScript_0xbe300
- if_equal PHONE_HIKER_ANTHONY, UnknownScript_0xbe306
- if_equal PHONE_CAMPER_TODD, UnknownScript_0xbe30c
- if_equal PHONE_JUGGLER_IRWIN, UnknownScript_0xbe312
- if_equal PHONE_BUG_CATCHER_ARNIE, UnknownScript_0xbe318
- if_equal PHONE_SCHOOLBOY_ALAN, UnknownScript_0xbe31e
- if_equal PHONE_SCHOOLBOY_CHAD, UnknownScript_0xbe324
- if_equal PHONE_POKEFANM_DEREK, UnknownScript_0xbe32a
- if_equal PHONE_FISHER_TULLY, UnknownScript_0xbe330
- if_equal PHONE_POKEMANIAC_BRENT, UnknownScript_0xbe336
- if_equal PHONE_BIRDKEEPER_VANCE, UnknownScript_0xbe33c
- if_equal PHONE_FISHER_WILTON, UnknownScript_0xbe342
- if_equal PHONE_BLACKBELT_KENJI, UnknownScript_0xbe348
- if_equal PHONE_HIKER_PARRY, UnknownScript_0xbe34e
-
-UnknownScript_0xbe2dc:
+ if_equal PHONE_SCHOOLBOY_JACK, .Jack
+ if_equal PHONE_SAILOR_HUEY, .Huey
+ if_equal PHONE_COOLTRAINERM_GAVEN, .Gaven
+ if_equal PHONE_BIRDKEEPER_JOSE, .Jose
+ if_equal PHONE_YOUNGSTER_JOEY, .Joey
+ if_equal PHONE_BUG_CATCHER_WADE, .Wade
+ if_equal PHONE_FISHER_RALPH, .Ralph
+ if_equal PHONE_HIKER_ANTHONY, .Anthony
+ if_equal PHONE_CAMPER_TODD, .Todd
+ if_equal PHONE_JUGGLER_IRWIN, .Irwin
+ if_equal PHONE_BUG_CATCHER_ARNIE, .Arnie
+ if_equal PHONE_SCHOOLBOY_ALAN, .Alan
+ if_equal PHONE_SCHOOLBOY_CHAD, .Chad
+ if_equal PHONE_POKEFANM_DEREK, .Derek
+ if_equal PHONE_FISHER_TULLY, .Tully
+ if_equal PHONE_POKEMANIAC_BRENT, .Brent
+ if_equal PHONE_BIRDKEEPER_VANCE, .Vance
+ if_equal PHONE_FISHER_WILTON, .Wilton
+ if_equal PHONE_BLACKBELT_KENJI, .Kenji
+ if_equal PHONE_HIKER_PARRY, .Parry
+
+.Jack:
farwritetext UnknownText_0x1b4e72
keeptextopen
end
-UnknownScript_0xbe2e2:
+.Huey:
farwritetext UnknownText_0x1b511a
keeptextopen
end
-UnknownScript_0xbe2e8:
+.Gaven:
farwritetext UnknownText_0x1b5335
keeptextopen
end
-UnknownScript_0xbe2ee:
+.Jose:
farwritetext UnknownText_0x1b564c
keeptextopen
end
-UnknownScript_0xbe2f4:
+.Joey:
farwritetext UnknownText_0x1b5948
keeptextopen
end
-UnknownScript_0xbe2fa:
+.Wade:
farwritetext UnknownText_0x1b5b0b
keeptextopen
end
-UnknownScript_0xbe300:
+.Ralph:
farwritetext UnknownText_0x1b5d21
keeptextopen
end
-UnknownScript_0xbe306:
+.Anthony:
farwritetext UnknownText_0x1b6017
keeptextopen
end
-UnknownScript_0xbe30c:
+.Todd:
farwritetext UnknownText_0x1b618f
keeptextopen
end
-UnknownScript_0xbe312:
+.Irwin:
farwritetext UnknownText_0x1b6407
keeptextopen
end
-UnknownScript_0xbe318:
+.Arnie:
farwritetext UnknownText_0x1b6506
keeptextopen
end
-UnknownScript_0xbe31e:
+.Alan:
farwritetext UnknownText_0x1b6624
keeptextopen
end
-UnknownScript_0xbe324:
+.Chad:
farwritetext UnknownText_0x1b6890
keeptextopen
end
-UnknownScript_0xbe32a:
+.Derek:
farwritetext UnknownText_0x1b6a56
keeptextopen
end
-UnknownScript_0xbe330:
+.Tully:
farwritetext UnknownText_0x1b6bef
keeptextopen
end
-UnknownScript_0xbe336:
+.Brent:
farwritetext UnknownText_0x1b6d57
keeptextopen
end
-UnknownScript_0xbe33c:
+.Vance:
farwritetext UnknownText_0x1b7112
keeptextopen
end
-UnknownScript_0xbe342:
+.Wilton:
farwritetext UnknownText_0x1b7283
keeptextopen
end
-UnknownScript_0xbe348:
+.Kenji:
farwritetext UnknownText_0x1b7397
keeptextopen
end
-UnknownScript_0xbe34e:
+.Parry:
farwritetext UnknownText_0x1b746f
keeptextopen
end
UnknownScript_0xbe354:
checkcode VAR_CALLERID
- if_equal PHONE_SCHOOLBOY_JACK, UnknownScript_0xbe3a6
- if_equal PHONE_SAILOR_HUEY, UnknownScript_0xbe3ac
- if_equal PHONE_COOLTRAINERM_GAVEN, UnknownScript_0xbe3b2
- if_equal PHONE_BIRDKEEPER_JOSE, UnknownScript_0xbe3b8
- if_equal PHONE_YOUNGSTER_JOEY, UnknownScript_0xbe3be
- if_equal PHONE_BUG_CATCHER_WADE, UnknownScript_0xbe3c4
- if_equal PHONE_FISHER_RALPH, UnknownScript_0xbe3ca
- if_equal PHONE_HIKER_ANTHONY, UnknownScript_0xbe3d0
- if_equal PHONE_CAMPER_TODD, UnknownScript_0xbe3d6
- if_equal PHONE_JUGGLER_IRWIN, UnknownScript_0xbe3dc
- if_equal PHONE_BUG_CATCHER_ARNIE, UnknownScript_0xbe3e2
- if_equal PHONE_SCHOOLBOY_ALAN, UnknownScript_0xbe3e8
- if_equal PHONE_SCHOOLBOY_CHAD, UnknownScript_0xbe3ee
- if_equal PHONE_POKEFANM_DEREK, UnknownScript_0xbe3f4
- if_equal PHONE_FISHER_TULLY, UnknownScript_0xbe3fa
- if_equal PHONE_POKEMANIAC_BRENT, UnknownScript_0xbe400
- if_equal PHONE_BIRDKEEPER_VANCE, UnknownScript_0xbe406
- if_equal PHONE_FISHER_WILTON, UnknownScript_0xbe40c
- if_equal PHONE_BLACKBELT_KENJI, UnknownScript_0xbe412
- if_equal PHONE_HIKER_PARRY, UnknownScript_0xbe418
-
-UnknownScript_0xbe3a6:
+ if_equal PHONE_SCHOOLBOY_JACK, .Jack
+ if_equal PHONE_SAILOR_HUEY, .Huey
+ if_equal PHONE_COOLTRAINERM_GAVEN, .Gaven
+ if_equal PHONE_BIRDKEEPER_JOSE, .Jose
+ if_equal PHONE_YOUNGSTER_JOEY, .Joey
+ if_equal PHONE_BUG_CATCHER_WADE, .Wade
+ if_equal PHONE_FISHER_RALPH, .Ralph
+ if_equal PHONE_HIKER_ANTHONY, .Anthony
+ if_equal PHONE_CAMPER_TODD, .Todd
+ if_equal PHONE_JUGGLER_IRWIN, .Irwin
+ if_equal PHONE_BUG_CATCHER_ARNIE, .Arnie
+ if_equal PHONE_SCHOOLBOY_ALAN, .Alan
+ if_equal PHONE_SCHOOLBOY_CHAD, .Chad
+ if_equal PHONE_POKEFANM_DEREK, .Derek
+ if_equal PHONE_FISHER_TULLY, .Tully
+ if_equal PHONE_POKEMANIAC_BRENT, .Brent
+ if_equal PHONE_BIRDKEEPER_VANCE, .Vance
+ if_equal PHONE_FISHER_WILTON, .Wilton
+ if_equal PHONE_BLACKBELT_KENJI, .Kenji
+ if_equal PHONE_HIKER_PARRY, .Parry
+
+.Jack:
farwritetext UnknownText_0x1b4e9e
keeptextopen
end
-UnknownScript_0xbe3ac:
+.Huey:
farwritetext UnknownText_0x1b5154
keeptextopen
end
-UnknownScript_0xbe3b2:
+.Gaven:
farwritetext UnknownText_0x1b535f
keeptextopen
end
-UnknownScript_0xbe3b8:
+.Jose:
farwritetext UnknownText_0x1b5670
keeptextopen
end
-UnknownScript_0xbe3be:
+.Joey:
farwritetext UnknownText_0x1b597c
keeptextopen
end
-UnknownScript_0xbe3c4:
+.Wade:
farwritetext UnknownText_0x1b5b37
keeptextopen
end
-UnknownScript_0xbe3ca:
+.Ralph:
farwritetext UnknownText_0x1b5d39
keeptextopen
end
-UnknownScript_0xbe3d0:
+.Anthony:
farwritetext UnknownText_0x1b6041
keeptextopen
end
-UnknownScript_0xbe3d6:
+.Todd:
farwritetext UnknownText_0x1b61bd
keeptextopen
end
-UnknownScript_0xbe3dc:
+.Irwin:
farwritetext UnknownText_0x1b642c
keeptextopen
end
-UnknownScript_0xbe3e2:
+.Arnie:
farwritetext UnknownText_0x1b6539
keeptextopen
end
-UnknownScript_0xbe3e8:
+.Alan:
farwritetext UnknownText_0x1b663b
keeptextopen
end
-UnknownScript_0xbe3ee:
+.Chad:
farwritetext UnknownText_0x1b68ba
keeptextopen
end
-UnknownScript_0xbe3f4:
+.Derek:
farwritetext UnknownText_0x1b6a8b
keeptextopen
end
-UnknownScript_0xbe3fa:
+.Tully:
farwritetext UnknownText_0x1b6c23
keeptextopen
end
-UnknownScript_0xbe400:
+.Brent:
farwritetext UnknownText_0x1b6d88
keeptextopen
end
-UnknownScript_0xbe406:
+.Vance:
farwritetext UnknownText_0x1b7132
keeptextopen
end
-UnknownScript_0xbe40c:
+.Wilton:
farwritetext UnknownText_0x1b72a5
keeptextopen
end
-UnknownScript_0xbe412:
+.Kenji:
farwritetext UnknownText_0x1b73af
keeptextopen
end
-UnknownScript_0xbe418:
+.Parry:
farwritetext UnknownText_0x1b749b
keeptextopen
end
@@ -2817,314 +2817,314 @@ UnknownScript_0xbe41e:
checknite
iftrue UnknownScript_0xbe4cc
checkcode VAR_CALLERID
- if_equal PHONE_POKEFAN_BEVERLY, UnknownScript_0xbe44a
- if_equal PHONE_COOLTRAINERF_BETH, UnknownScript_0xbe450
- if_equal PHONE_COOLTRAINERF_REENA, UnknownScript_0xbe456
- if_equal PHONE_PICNICKER_LIZ, UnknownScript_0xbe45c
- if_equal PHONE_PICNICKER_GINA, UnknownScript_0xbe462
- if_equal PHONE_LASS_DANA, UnknownScript_0xbe468
- if_equal PHONE_PICNICKER_TIFFANY, UnknownScript_0xbe46e
- if_equal PHONE_PICNICKER_ERIN, UnknownScript_0xbe474
-
-UnknownScript_0xbe44a:
+ if_equal PHONE_POKEFAN_BEVERLY, .Beverly
+ if_equal PHONE_COOLTRAINERF_BETH, .Beth
+ if_equal PHONE_COOLTRAINERF_REENA, .Reena
+ if_equal PHONE_PICNICKER_LIZ, .Liz
+ if_equal PHONE_PICNICKER_GINA, .Gina
+ if_equal PHONE_LASS_DANA, .Dana
+ if_equal PHONE_PICNICKER_TIFFANY, .Tiffany
+ if_equal PHONE_PICNICKER_ERIN, .Erin
+
+.Beverly:
farwritetext UnknownText_0x1b4fa1
keeptextopen
end
-UnknownScript_0xbe450:
+.Beth:
farwritetext UnknownText_0x1b5472
keeptextopen
end
-UnknownScript_0xbe456:
+.Reena:
farwritetext UnknownText_0x1b5786
keeptextopen
end
-UnknownScript_0xbe45c:
+.Liz:
farwritetext UnknownText_0x1b5e25
keeptextopen
end
-UnknownScript_0xbe462:
+.Gina:
farwritetext UnknownText_0x1b62f1
keeptextopen
end
-UnknownScript_0xbe468:
+.Dana:
farwritetext UnknownText_0x1b6738
keeptextopen
end
-UnknownScript_0xbe46e:
+.Tiffany:
farwritetext UnknownText_0x1b6ef3
keeptextopen
end
-UnknownScript_0xbe474:
+.Erin:
farwritetext UnknownText_0x1b758f
keeptextopen
end
UnknownScript_0xbe47a:
checkcode VAR_CALLERID
- if_equal PHONE_POKEFAN_BEVERLY, UnknownScript_0xbe49c
- if_equal PHONE_COOLTRAINERF_BETH, UnknownScript_0xbe4a2
- if_equal PHONE_COOLTRAINERF_REENA, UnknownScript_0xbe4a8
- if_equal PHONE_PICNICKER_LIZ, UnknownScript_0xbe4ae
- if_equal PHONE_PICNICKER_GINA, UnknownScript_0xbe4b4
- if_equal PHONE_LASS_DANA, UnknownScript_0xbe4ba
- if_equal PHONE_PICNICKER_TIFFANY, UnknownScript_0xbe4c0
- if_equal PHONE_PICNICKER_ERIN, UnknownScript_0xbe4c6
-
-UnknownScript_0xbe49c:
+ if_equal PHONE_POKEFAN_BEVERLY, .Beverly
+ if_equal PHONE_COOLTRAINERF_BETH, .Beth
+ if_equal PHONE_COOLTRAINERF_REENA, .Reena
+ if_equal PHONE_PICNICKER_LIZ, .Liz
+ if_equal PHONE_PICNICKER_GINA, .Gina
+ if_equal PHONE_LASS_DANA, .Dana
+ if_equal PHONE_PICNICKER_TIFFANY, .Tiffany
+ if_equal PHONE_PICNICKER_ERIN, .Erin
+
+.Beverly:
farwritetext UnknownText_0x1b4fda
keeptextopen
end
-UnknownScript_0xbe4a2:
+.Beth:
farwritetext UnknownText_0x1b54a6
keeptextopen
end
-UnknownScript_0xbe4a8:
+.Reena:
farwritetext UnknownText_0x1b57b7
keeptextopen
end
-UnknownScript_0xbe4ae:
+.Liz:
farwritetext UnknownText_0x1b5e59
keeptextopen
end
-UnknownScript_0xbe4b4:
+.Gina:
farwritetext UnknownText_0x1b630e
keeptextopen
end
-UnknownScript_0xbe4ba:
+.Dana:
farwritetext UnknownText_0x1b6757
keeptextopen
end
-UnknownScript_0xbe4c0:
+.Tiffany:
farwritetext UnknownText_0x1b6f1c
keeptextopen
end
-UnknownScript_0xbe4c6:
+.Erin:
farwritetext UnknownText_0x1b75ac
keeptextopen
end
UnknownScript_0xbe4cc:
checkcode VAR_CALLERID
- if_equal PHONE_POKEFAN_BEVERLY, UnknownScript_0xbe4ee
- if_equal PHONE_COOLTRAINERF_BETH, UnknownScript_0xbe4f4
- if_equal PHONE_COOLTRAINERF_REENA, UnknownScript_0xbe4fa
- if_equal PHONE_PICNICKER_LIZ, UnknownScript_0xbe500
- if_equal PHONE_PICNICKER_GINA, UnknownScript_0xbe506
- if_equal PHONE_LASS_DANA, UnknownScript_0xbe50c
- if_equal PHONE_PICNICKER_TIFFANY, UnknownScript_0xbe512
- if_equal PHONE_PICNICKER_ERIN, UnknownScript_0xbe518
-
-UnknownScript_0xbe4ee:
+ if_equal PHONE_POKEFAN_BEVERLY, .Beverly
+ if_equal PHONE_COOLTRAINERF_BETH, .Beth
+ if_equal PHONE_COOLTRAINERF_REENA, .Reena
+ if_equal PHONE_PICNICKER_LIZ, .Liz
+ if_equal PHONE_PICNICKER_GINA, .Gina
+ if_equal PHONE_LASS_DANA, .Dana
+ if_equal PHONE_PICNICKER_TIFFANY, .Tiffany
+ if_equal PHONE_PICNICKER_ERIN, .Erin
+
+.Beverly:
farwritetext UnknownText_0x1b5004
keeptextopen
end
-UnknownScript_0xbe4f4:
+.Beth:
farwritetext UnknownText_0x1b54d4
keeptextopen
end
-UnknownScript_0xbe4fa:
+.Reena:
farwritetext UnknownText_0x1b57e8
keeptextopen
end
-UnknownScript_0xbe500:
+.Liz:
farwritetext UnknownText_0x1b5e8e
keeptextopen
end
-UnknownScript_0xbe506:
+.Gina:
farwritetext UnknownText_0x1b6331
keeptextopen
end
-UnknownScript_0xbe50c:
+.Dana:
farwritetext UnknownText_0x1b6776
keeptextopen
end
-UnknownScript_0xbe512:
+.Tiffany:
farwritetext UnknownText_0x1b6f37
keeptextopen
end
-UnknownScript_0xbe518:
+.Erin:
farwritetext UnknownText_0x1b75c9
keeptextopen
end
UnknownScript_0xbe51e:
checkcode VAR_CALLERID
- if_equal PHONE_SCHOOLBOY_JACK, UnknownScript_0xbe564
- if_equal PHONE_COOLTRAINERM_GAVEN, UnknownScript_0xbe570
- if_equal PHONE_BIRDKEEPER_JOSE, UnknownScript_0xbe576
- if_equal PHONE_YOUNGSTER_JOEY, UnknownScript_0xbe57c
- if_equal PHONE_BUG_CATCHER_WADE, UnknownScript_0xbe582
- if_equal PHONE_FISHER_RALPH, UnknownScript_0xbe588
- if_equal PHONE_HIKER_ANTHONY, UnknownScript_0xbe58e
- if_equal PHONE_CAMPER_TODD, UnknownScript_0xbe594
- if_equal PHONE_BUG_CATCHER_ARNIE, UnknownScript_0xbe59a
- if_equal PHONE_SCHOOLBOY_ALAN, UnknownScript_0xbe5a0
- if_equal PHONE_SCHOOLBOY_CHAD, UnknownScript_0xbe5a6
- if_equal PHONE_POKEFANM_DEREK, UnknownScript_0xbe5ac
- if_equal PHONE_FISHER_TULLY, UnknownScript_0xbe5b2
- if_equal PHONE_POKEMANIAC_BRENT, UnknownScript_0xbe5b8
- if_equal PHONE_BIRDKEEPER_VANCE, UnknownScript_0xbe5be
- if_equal PHONE_FISHER_WILTON, UnknownScript_0xbe5c4
- if_equal PHONE_HIKER_PARRY, UnknownScript_0xbe5ca
-
-UnknownScript_0xbe564:
+ if_equal PHONE_SCHOOLBOY_JACK, .Jack
+ if_equal PHONE_COOLTRAINERM_GAVEN, .Gaven
+ if_equal PHONE_BIRDKEEPER_JOSE, .Jose
+ if_equal PHONE_YOUNGSTER_JOEY, .Joey
+ if_equal PHONE_BUG_CATCHER_WADE, .Wade
+ if_equal PHONE_FISHER_RALPH, .Ralph
+ if_equal PHONE_HIKER_ANTHONY, .Anthony
+ if_equal PHONE_CAMPER_TODD, .Todd
+ if_equal PHONE_BUG_CATCHER_ARNIE, .Arnie
+ if_equal PHONE_SCHOOLBOY_ALAN, .Alan
+ if_equal PHONE_SCHOOLBOY_CHAD, .Chad
+ if_equal PHONE_POKEFANM_DEREK, .Derek
+ if_equal PHONE_FISHER_TULLY, .Tully
+ if_equal PHONE_POKEMANIAC_BRENT, .Brent
+ if_equal PHONE_BIRDKEEPER_VANCE, .Vance
+ if_equal PHONE_FISHER_WILTON, .Wilton
+ if_equal PHONE_HIKER_PARRY, .Parry
+
+.Jack:
farwritetext UnknownText_0x1b4ecd
keeptextopen
end
-UnknownScript_0xbe56a:
+.Unknown:
farwritetext UnknownText_0x1b518b
keeptextopen
end
-UnknownScript_0xbe570:
+.Gaven:
farwritetext UnknownText_0x1b5393
keeptextopen
end
-UnknownScript_0xbe576:
+.Jose:
farwritetext UnknownText_0x1b5694
keeptextopen
end
-UnknownScript_0xbe57c:
+.Joey:
farwritetext UnknownText_0x1b59b2
keeptextopen
end
-UnknownScript_0xbe582:
+.Wade:
farwritetext UnknownText_0x1b5b68
keeptextopen
end
-UnknownScript_0xbe588:
+.Ralph:
farwritetext UnknownText_0x1b5d51
keeptextopen
end
-UnknownScript_0xbe58e:
+.Anthony:
farwritetext UnknownText_0x1b606f
keeptextopen
end
-UnknownScript_0xbe594:
+.Todd:
farwritetext UnknownText_0x1b61f2
keeptextopen
end
-UnknownScript_0xbe59a:
+.Arnie:
farwritetext UnknownText_0x1b656c
keeptextopen
end
-UnknownScript_0xbe5a0:
+.Alan:
farwritetext UnknownText_0x1b6652
keeptextopen
end
-UnknownScript_0xbe5a6:
+.Chad:
farwritetext UnknownText_0x1b68e8
keeptextopen
end
-UnknownScript_0xbe5ac:
+.Derek:
farwritetext UnknownText_0x1b6ac2
keeptextopen
end
-UnknownScript_0xbe5b2:
+.Tully:
farwritetext UnknownText_0x1b6c56
keeptextopen
end
-UnknownScript_0xbe5b8:
+.Brent:
farwritetext UnknownText_0x1b6db9
keeptextopen
end
-UnknownScript_0xbe5be:
+.Vance:
farwritetext UnknownText_0x1b7161
keeptextopen
end
-UnknownScript_0xbe5c4:
+.Wilton:
farwritetext UnknownText_0x1b72d0
keeptextopen
end
-UnknownScript_0xbe5ca:
+.Parry:
farwritetext UnknownText_0x1b74c8
keeptextopen
end
UnknownScript_0xbe5d0:
checkcode VAR_CALLERID
- if_equal PHONE_POKEFAN_BEVERLY, UnknownScript_0xbe5f2
- if_equal PHONE_COOLTRAINERF_BETH, UnknownScript_0xbe5f8
- if_equal PHONE_COOLTRAINERF_REENA, UnknownScript_0xbe5fe
- if_equal PHONE_PICNICKER_LIZ, UnknownScript_0xbe604
- if_equal PHONE_PICNICKER_GINA, UnknownScript_0xbe60a
- if_equal PHONE_LASS_DANA, UnknownScript_0xbe610
- if_equal PHONE_PICNICKER_TIFFANY, UnknownScript_0xbe616
- if_equal PHONE_PICNICKER_ERIN, UnknownScript_0xbe61c
-
-UnknownScript_0xbe5f2:
+ if_equal PHONE_POKEFAN_BEVERLY, .Beverly
+ if_equal PHONE_COOLTRAINERF_BETH, .Beth
+ if_equal PHONE_COOLTRAINERF_REENA, .Reena
+ if_equal PHONE_PICNICKER_LIZ, .Liz
+ if_equal PHONE_PICNICKER_GINA, .Gina
+ if_equal PHONE_LASS_DANA, .Dana
+ if_equal PHONE_PICNICKER_TIFFANY, .Tiffany
+ if_equal PHONE_PICNICKER_ERIN, .Erin
+
+.Beverly:
farwritetext UnknownText_0x1b502b
keeptextopen
end
-UnknownScript_0xbe5f8:
+.Beth:
farwritetext UnknownText_0x1b5510
keeptextopen
end
-UnknownScript_0xbe5fe:
+.Reena:
farwritetext UnknownText_0x1b5819
keeptextopen
end
-UnknownScript_0xbe604:
+.Liz:
farwritetext UnknownText_0x1b5ebe
keeptextopen
end
-UnknownScript_0xbe60a:
+.Gina:
farwritetext UnknownText_0x1b6352
keeptextopen
end
-UnknownScript_0xbe610:
+.Dana:
farwritetext UnknownText_0x1b6795
keeptextopen
end
-UnknownScript_0xbe616:
+.Tiffany:
farwritetext UnknownText_0x1b6f60
keeptextopen
end
-UnknownScript_0xbe61c:
+.Erin:
farwritetext UnknownText_0x1b75e5
keeptextopen
end
diff --git a/engine/pokecenter_pc.asm b/engine/pokecenter_pc.asm
new file mode 100755
index 000000000..064b35a6c
--- /dev/null
+++ b/engine/pokecenter_pc.asm
@@ -0,0 +1,705 @@
+PokemonCenterPC: ; 1559a
+ call PC_CheckPartyForPokemon
+ ret c
+ call PC_PlayBootSound
+ ld hl, UnknownText_0x15a27
+ call PC_DisplayText
+ ld hl, UnknownText_0x15a2c
+ call PC_DisplayTextWaitMenu
+ ld hl, .TopMenu
+ call LoadMenuDataHeader
+.loop
+ xor a
+ ld [hBGMapMode], a
+ call .ChooseWhichPCListToUse
+ ld [wcf76], a
+ call DoNthMenu
+ jr c, .shutdown
+ ld a, [MenuSelection]
+ ld hl, .JumpTable
+ call MenuJumptable
+ jr nc, .loop
+
+.shutdown
+ call PC_PlayShutdownSound
+ call ExitMenu
+ call WriteBackup
+ ret
+; 155d6
+
+.TopMenu: ; 0x155d6
+ db $48 ; flags
+ db 00, 00 ; start coords
+ db 12, 15 ; end coords
+ dw .MenuData2
+ db 1 ; default option
+; 0x155de
+
+.MenuData2: ; 0x155de
+ db $a0 ; flags
+ db 0 ; items
+ dw .WhichPC
+ dw PlaceNthMenuStrings
+ dw .JumpTable
+; 0x155e6
+
+.JumpTable: ; 155e6
+ dw PlayersPC, .String_PlayersPC
+ dw BillsPC, .String_BillsPC
+ dw OaksPC, .String_OaksPC
+ dw HallOfFamePC, .String_HallOfFame
+ dw TurnOffPC, .String_TurnOff
+; 155fa
+
+.String_PlayersPC: db "<PLAYER>'s PC@"
+.String_BillsPC: db "BILL's PC@"
+.String_OaksPC: db "PROF.OAK's PC@"
+.String_HallOfFame: db "HALL OF FAME@"
+.String_TurnOff: db "TURN OFF@"
+; 1562c
+
+.WhichPC: ; 1562c
+ ; before pokedex
+ db 3 ; items
+ db 1, 0, 4 ; bill's, player's, turn off
+ db -1
+
+ ; before Hall Of Fame
+ db 4 ; items
+ db 1, 0, 2, 4 ; bill's, player's, oak's, turn off
+ db -1
+
+ ; postgame
+ db 5 ; items
+ db 1, 0, 2, 3, 4 ; bill's, player's, oak's, hall of fame, turn off
+ db -1
+; 1563e
+
+.ChooseWhichPCListToUse: ; 1563e
+ call CheckReceivedDex
+ jr nz, .got_dex
+ ld a, $0
+ ret
+
+.got_dex
+ ld a, [wHallOfFameCount]
+ and a
+ ld a, $1
+ ret z
+ ld a, $2
+ ret
+; 15650
+
+PC_CheckPartyForPokemon: ; 15650
+ ld a, [PartyCount]
+ and a
+ ret nz
+ ld de, SFX_CHOOSE_PC_OPTION
+ call PlaySFX
+ ld hl, UnknownText_0x15663
+ call PC_DisplayText
+ scf
+ ret
+; 15663
+
+UnknownText_0x15663: ; 0x15663
+ ; Bzzzzt! You must have a #MON to use this!
+ text_jump UnknownText_0x1c1328
+ db "@"
+; 0x15668
+
+BillsPC: ; 15668
+ call PC_PlayChoosePCSound
+ ld hl, UnknownText_0x15a31
+ call PC_DisplayText
+ callba _BillsPC
+ and a
+ ret
+; 15679 (5:5679)
+
+PlayersPC: ; 15679
+ call PC_PlayChoosePCSound
+ ld hl, UnknownText_0x15a36
+ call PC_DisplayText
+ ld b, $0
+ call _PlayersPC
+ and a
+ ret
+; 15689
+
+OaksPC: ; 15689
+ call PC_PlayChoosePCSound
+ ld hl, UnknownText_0x15a3b
+ call PC_DisplayText
+ callba ProfOaksPC
+ and a
+ ret
+; 1569a
+
+HallOfFamePC: ; 1569a
+ call PC_PlayChoosePCSound
+ call FadeToMenu
+ callba _HallOfFamePC
+ call ReturnToCallingMenu
+ and a
+ ret
+; 156ab
+
+TurnOffPC: ; 156ab
+ ld hl, UnknownText_0x15a40
+ call PrintText
+ scf
+ ret
+; 156b3
+
+PC_PlayBootSound: ; 156b3
+ ld de, SFX_BOOT_PC
+ jr PC_WaitPlaySFX
+
+PC_PlayShutdownSound: ; 156b8
+ ld de, SFX_SHUT_DOWN_PC
+ call PC_WaitPlaySFX
+ call WaitSFX
+ ret
+
+PC_PlayChoosePCSound: ; 156c2
+ ld de, SFX_CHOOSE_PC_OPTION
+ jr PC_WaitPlaySFX
+
+Function156c7: ; 156c7
+ ld de, SFX_SWITCH_POKEMON
+ call PC_WaitPlaySFX
+ ld de, SFX_SWITCH_POKEMON
+
+PC_WaitPlaySFX: ; 156d0
+ push de
+ call WaitSFX
+ pop de
+ call PlaySFX
+ ret
+; 156d9
+
+_KrissHousePC: ; 156d9
+ call PC_PlayBootSound
+ ld hl, UnknownText_0x156ff
+ call PC_DisplayText
+ ld b, $1
+ call _PlayersPC
+ and a
+ jr nz, .asm_156f9
+ call OverworldTextModeSwitch
+ call ApplyTilemap
+ call UpdateSprites
+ call PC_PlayShutdownSound
+ ld c, $0
+ ret
+
+.asm_156f9
+ call ClearBGPalettes
+ ld c, $1
+ ret
+; 156ff
+
+UnknownText_0x156ff: ; 0x156ff
+ ; turned on the PC.
+ text_jump UnknownText_0x1c1353
+ db "@"
+; 0x15704
+
+_PlayersPC: ; 15704
+ ld a, b
+ ld [wcf76], a
+ ld hl, UnknownText_0x157cc
+ call PC_DisplayTextWaitMenu
+ call Function15715
+ call ExitMenu
+ ret
+; 15715
+
+Function15715: ; 15715
+ xor a
+ ld [wd0d7], a
+ ld [wd0dd], a
+ ld hl, KrissPCMenuData
+ call LoadMenuDataHeader
+.asm_15722
+ call UpdateTimePals
+ call DoNthMenu
+ jr c, .asm_15731
+ call MenuJumptable
+ jr nc, .asm_15722
+ jr .asm_15732
+
+.asm_15731
+ xor a
+
+.asm_15732
+ call ExitMenu
+ ret
+; 15736
+
+KrissPCMenuData: ; 0x15736
+ db %01000000
+ db 0, 0 ; top left corner coords (y, x)
+ db 12, 15 ; bottom right corner coords (y, x)
+ dw .KrissPCMenuData2
+ db 1 ; default selected option
+
+.KrissPCMenuData2
+ db %10100000 ; bit7
+ db 0 ; # items?
+ dw .KrissPCMenuList1
+ dw PlaceNthMenuStrings
+ dw .KrissPCMenuPointers
+
+.KrissPCMenuPointers ; 0x15746
+ dw KrisWithdrawItemMenu, .WithdrawItem
+ dw KrisDepositItemMenu, .DepositItem
+ dw KrisTossItemMenu, .TossItem
+ dw KrisMailBoxMenu, .MailBox
+ dw KrisDecorationMenu, .Decoration
+ dw KrisLogOffMenu, .LogOff
+ dw KrisLogOffMenu, .TurnOff
+
+.WithdrawItem db "WITHDRAW ITEM@"
+.DepositItem db "DEPOSIT ITEM@"
+.TossItem db "TOSS ITEM@"
+.MailBox db "MAIL BOX@"
+.Decoration db "DECORATION@"
+.TurnOff db "TURN OFF@"
+.LogOff db "LOG OFF@"
+
+WITHDRAW_ITEM EQU 0
+DEPOSIT_ITEM EQU 1
+TOSS_ITEM EQU 2
+MAIL_BOX EQU 3
+DECORATION EQU 4
+TURN_OFF EQU 5
+LOG_OFF EQU 6
+
+.KrissPCMenuList1
+ db 5
+ db WITHDRAW_ITEM
+ db DEPOSIT_ITEM
+ db TOSS_ITEM
+ db MAIL_BOX
+ db TURN_OFF
+ db -1
+
+.KrissPCMenuList2
+ db 6
+ db WITHDRAW_ITEM
+ db DEPOSIT_ITEM
+ db TOSS_ITEM
+ db MAIL_BOX
+ db DECORATION
+ db LOG_OFF
+ db -1
+
+PC_DisplayTextWaitMenu: ; 157bb
+ ld a, [Options]
+ push af
+ set NO_TEXT_SCROLL, a
+ ld [Options], a
+ call MenuTextBox
+ pop af
+ ld [Options], a
+ ret
+; 157cc
+
+UnknownText_0x157cc: ; 0x157cc
+ ; What do you want to do?
+ text_jump UnknownText_0x1c1368
+ db "@"
+; 0x157d1
+
+KrisWithdrawItemMenu: ; 0x157d1
+ call LoadStandardMenuDataHeader
+ callba ClearPCItemScreen
+.asm_157da
+ call Function15985
+ jr c, .asm_157e4
+ call Function157e9
+ jr .asm_157da
+
+.asm_157e4
+ call ReturnToCallingMenu
+ xor a
+ ret
+; 0x157e9
+
+Function157e9: ; 0x157e9
+ ; check if the item has a quantity
+ callba _CheckTossableItem
+ ld a, [wItemAttributeParamBuffer]
+ and a
+ jr z, .askquantity
+
+ ; items without quantity are always ×1
+ ld a, 1
+ ld [wItemQuantityChangeBuffer], a
+ jr .withdraw
+
+.askquantity
+ ld hl, .HowManyText
+ call MenuTextBox
+ callba Function24fbf
+ call ExitMenu
+ call ExitMenu
+ jr c, .done
+
+.withdraw
+ ld a, [wItemQuantityChangeBuffer]
+ ld [Buffer1], a ; quantity
+ ld a, [wd107]
+ ld [Buffer2], a
+ ld hl, NumItems
+ call ReceiveItem
+ jr nc, .PackFull
+ ld a, [Buffer1]
+ ld [wItemQuantityChangeBuffer], a
+ ld a, [Buffer2]
+ ld [wd107], a
+ ld hl, PCItems
+ call TossItem
+ predef PartyMonItemName
+ ld hl, .WithdrewText
+ call MenuTextBox
+ xor a
+ ld [hBGMapMode], a
+ call ExitMenu
+ ret
+
+.PackFull
+ ld hl, .NoRoomText
+ call MenuTextBoxBackup
+ ret
+
+.done
+ ret
+; 0x15850
+
+.HowManyText ; 0x15850
+ text_jump _KrissPCHowManyWithdrawText
+ db "@"
+
+.WithdrewText ; 0x15855
+ text_jump _KrissPCWithdrewItemsText
+ db "@"
+
+.NoRoomText ; 0x1585a
+ text_jump _KrissPCNoRoomWithdrawText
+ db "@"
+
+
+KrisTossItemMenu: ; 0x1585f
+ call LoadStandardMenuDataHeader
+ callba ClearPCItemScreen
+.asm_15868
+ call Function15985
+ jr c, .asm_15878
+ ld de, PCItems
+ callba Function129f4
+ jr .asm_15868
+
+.asm_15878
+ call ReturnToCallingMenu
+ xor a
+ ret
+; 0x1587d
+
+
+KrisDecorationMenu: ; 0x1587d
+ callba _KrisDecorationMenu
+ ld a, c
+ and a
+ ret z
+ scf
+ ret
+; 0x15888
+
+
+KrisLogOffMenu: ; 0x15888
+ xor a
+ scf
+ ret
+; 0x1588b
+
+
+KrisDepositItemMenu: ; 0x1588b
+ call Function158b8
+ jr c, .asm_158b6
+ call DisableSpriteUpdates
+ call LoadStandardMenuDataHeader
+ callba Function106a5
+.asm_1589c
+ callba Function106be
+ ld a, [wcf66]
+ and a
+ jr z, .asm_158b3
+ call Function158cc
+ callba CheckRegisteredItem
+ jr .asm_1589c
+
+.asm_158b3
+ call ReturnToCallingMenu
+
+.asm_158b6
+ xor a
+ ret
+; 0x158b8
+
+Function158b8: ; 0x158b8
+ callba HasNoItems
+ ret nc
+ ld hl, UnknownText_0x158c7
+ call MenuTextBoxBackup
+ scf
+ ret
+; 0x158c7
+
+UnknownText_0x158c7: ; 0x158c7
+ ; No items here!
+ text_jump UnknownText_0x1c13df
+ db "@"
+; 0x158cc
+
+
+Function158cc: ; 0x158cc
+ ld a, [wSpriteUpdatesEnabled]
+ push af
+ ld a, $0
+ ld [wSpriteUpdatesEnabled], a
+ callba CheckItemMenu
+ ld a, [wItemAttributeParamBuffer]
+ ld hl, .jumptable
+ rst JumpTable
+ pop af
+ ld [wSpriteUpdatesEnabled], a
+ ret
+; 0x158e7
+
+.jumptable: ; 0x158e7
+ dw .tossable
+ dw .no_toss
+ dw .no_toss
+ dw .no_toss
+ dw .tossable
+ dw .tossable
+ dw .tossable
+
+.no_toss:
+ ret
+
+.tossable:
+ ld a, [Buffer1]
+ push af
+ ld a, [Buffer2]
+ push af
+ call Function1590a
+ pop af
+ ld [Buffer2], a
+ pop af
+ ld [Buffer1], a
+ ret
+; 0x1590a
+
+Function1590a: ; 0x1590a
+ callba _CheckTossableItem
+ ld a, [wItemAttributeParamBuffer]
+ and a
+ jr z, .asm_1591d
+ ld a, $1
+ ld [wItemQuantityChangeBuffer], a
+ jr .asm_15933
+
+.asm_1591d
+ ld hl, .HowManyText
+ call MenuTextBox
+ callba Function24fbf
+ push af
+ call ExitMenu
+ call ExitMenu
+ pop af
+ jr c, .asm_1596c
+
+.asm_15933
+ ld a, [wItemQuantityChangeBuffer]
+ ld [Buffer1], a
+ ld a, [wd107]
+ ld [Buffer2], a
+ ld hl, PCItems
+ call ReceiveItem
+ jr nc, .asm_15965
+ ld a, [Buffer1]
+ ld [wItemQuantityChangeBuffer], a
+ ld a, [Buffer2]
+ ld [wd107], a
+ ld hl, NumItems
+ call TossItem
+ predef PartyMonItemName
+ ld hl, .DepositText
+ call PrintText
+ ret
+
+.asm_15965
+ ld hl, .NoRoomText
+ call PrintText
+ ret
+
+.asm_1596c
+ and a
+ ret
+; 0x1596e
+
+
+.HowManyText ; 0x1596e
+ text_jump _KrissPCHowManyDepositText
+ db "@"
+
+.DepositText ; 0x15973
+ text_jump _KrissPCDepositItemsText
+ db "@"
+
+.NoRoomText ; 0x15978
+ text_jump _KrissPCNoRoomDepositText
+ db "@"
+
+
+KrisMailBoxMenu: ; 0x1597d
+ callba _KrisMailBoxMenu
+ xor a
+ ret
+; 0x15985
+
+
+Function15985: ; 0x15985
+ xor a
+ ld [wd0e3], a
+.asm_15989
+ ld a, [wSpriteUpdatesEnabled]
+ push af
+ ld a, $0
+ ld [wSpriteUpdatesEnabled], a
+ ld hl, MenuData15a08
+ call CopyMenuDataHeader
+ hlcoord 0, 0
+ ld b, $a
+ ld c, $12
+ call TextBox
+ ld a, [wd0d7]
+ ld [wMenuCursorBuffer], a
+ ld a, [wd0dd]
+ ld [wMenuScrollPosition], a
+ call HandleScrollingMenu
+ ld a, [wMenuScrollPosition]
+ ld [wd0dd], a
+ ld a, [MenuSelection2]
+ ld [wd0d7], a
+ pop af
+ ld [wSpriteUpdatesEnabled], a
+ ld a, [wd0e3]
+ and a
+ jr nz, .asm_159d8
+ ld a, [wcf73]
+ cp $2
+ jr z, .asm_15a06
+ cp $1
+ jr z, .asm_159fb
+ cp $4
+ jr z, .asm_159f2
+ jr .asm_159f8
+
+.asm_159d8
+ ld a, [wcf73]
+ cp $2
+ jr z, .asm_159e9
+ cp $1
+ jr z, .asm_159ef
+ cp $4
+ jr z, .asm_159ef
+ jr .asm_159f8
+
+.asm_159e9
+ xor a
+ ld [wd0e3], a
+ jr .asm_159f8
+
+.asm_159ef
+ call Function156c7
+
+.asm_159f2
+ callba Function2490c
+
+.asm_159f8
+ jp .asm_15989
+
+.asm_159fb
+ callba Function24706
+ call Function1bee
+ and a
+ ret
+
+.asm_15a06
+ scf
+ ret
+; 0x15a08
+
+MenuData15a08: ; 0x15a08
+ db %01000000
+ db 1, 4 ; start coords
+ db 10, 18 ; end coords
+ dw .MenuData2
+ db 1 ; default option
+
+.MenuData2
+ db %10110000
+ db 4, 8 ; rows/cols?
+ db 2 ; horizontal spacing?
+ dbw 0, PCItems
+ dba PlaceMenuItemName
+ dba PlaceMenuItemQuantity
+ dba UpdateItemDescription
+
+PC_DisplayText: ; 15a20
+ call MenuTextBox
+ call ExitMenu
+ ret
+; 15a27
+
+
+UnknownText_0x15a27: ; 0x15a27
+ ; turned on the PC.
+ text_jump UnknownText_0x1c144d
+ db "@"
+; 0x15a2c
+
+UnknownText_0x15a2c: ; 0x15a2c
+ ; Access whose PC?
+ text_jump UnknownText_0x1c1462
+ db "@"
+; 0x15a31
+
+UnknownText_0x15a31: ; 0x15a31
+ ; BILL's PC accessed. #MON Storage System opened.
+ text_jump UnknownText_0x1c1474
+ db "@"
+; 0x15a36
+
+UnknownText_0x15a36: ; 0x15a36
+ ; Accessed own PC. Item Storage System opened.
+ text_jump UnknownText_0x1c14a4
+ db "@"
+; 0x15a3b
+
+UnknownText_0x15a3b: ; 0x15a3b
+ ; PROF.OAK's PC accessed. #DEX Rating System opened.
+ text_jump UnknownText_0x1c14d2
+ db "@"
+; 0x15a40
+
+UnknownText_0x15a40: ; 0x15a40
+ ; … Link closed…
+ text_jump UnknownText_0x1c1505
+ db "@"
+; 0x15a45
diff --git a/engine/pokedex.asm b/engine/pokedex.asm
index 8d5680ded..d150ee471 100644
--- a/engine/pokedex.asm
+++ b/engine/pokedex.asm
@@ -65,12 +65,8 @@ InitPokedex: ; 40063
call ClearTileMap
call Function414b7
- ld hl, wc6d0
-IF DEF(CRYSTAL11)
- ld bc, $0116
-ELSE
- ld bc, $0115
-ENDC
+ ld hl, wPokedexDataStart
+ ld bc, wPokedexDataEnd - wPokedexDataStart
xor a
call ByteFill
@@ -480,7 +476,7 @@ Function4034f: ; 4034f
push af
ld a, [wJumptableIndex]
push af
- callba Function8442c
+ callba PrintDexEntry
pop af
ld [wJumptableIndex], a
pop af
@@ -2367,7 +2363,7 @@ Function41401: ; 41401 (10:5401)
push af
ld a, $5
ld [rSVBK], a
- ld hl, wMapPals
+ ld hl, UnknBGPals
ld bc, $40
xor a
call ByteFill
diff --git a/engine/pokegear.asm b/engine/pokegear.asm
new file mode 100755
index 000000000..da6006853
--- /dev/null
+++ b/engine/pokegear.asm
@@ -0,0 +1,2990 @@
+PokeGear: ; 90b8d (24:4b8d)
+ ld hl, Options
+ ld a, [hl]
+ push af
+ set NO_TEXT_SCROLL, [hl]
+
+ ld a, [hInMenu]
+ push af
+ ld a, $1
+ ld [hInMenu], a
+
+ ld a, [VramState]
+ push af
+ xor a
+ ld [VramState], a
+
+ call Function90bea
+ call DelayFrame
+
+.loop
+ call UpdateTime
+ call JoyTextDelay
+ ld a, [wJumptableIndex]
+ bit 7, a
+ jr nz, .done
+ call Function90f04
+ callba Function8cf69
+ call DelayFrame
+ jr .loop
+
+.done
+ ld de, SFX_READ_TEXT_2
+ call PlaySFX
+ call WaitSFX
+ pop af
+ ld [VramState], a
+ pop af
+ ld [hInMenu], a
+ pop af
+ ld [Options], a
+ call ClearBGPalettes
+ xor a
+ ld [hBGMapAddress], a
+ ld a, VBGMap0 / $100
+ ld [hBGMapAddress + 1], a
+ ld a, $90
+ ld [hWY], a
+ call Function91492
+ ret
+
+Function90bea: ; 90bea (24:4bea)
+ call ClearBGPalettes
+ call ClearTileMap
+ call ClearSprites
+ call DisableLCD
+ xor a
+ ld [hSCY], a
+ ld [hSCX], a
+ ld a, $7
+ ld [hWX], a
+ call Function90c4e
+ callba Function8cf53
+ call Function90d32
+ ld a, 8
+ call SkipMusic
+ ld a, $e3
+ ld [rLCDC], a
+ call Function90d70
+ xor a
+ ld [wJumptableIndex], a
+ ld [wcf64], a
+ ld [wcf65], a
+ ld [wcf66], a
+ ld [wc6d2], a
+ ld [wc6d1], a
+ ld [wc6d3], a
+ ld [wc6d9], a
+ ld [wc6da], a
+ ld [wc6db], a
+ call Function90d9e
+ call Function90da8
+ ld b, SCGB_02
+ call GetSGBLayout
+ call SetPalettes
+ ld a, [hCGB]
+ and a
+ ret z
+ ld a, $e4
+ call Functioncf8
+ ret
+
+Function90c4e: ; 90c4e
+ call ClearVBank1
+ ld hl, TownMapGFX
+ ld de, VTiles2
+ ld a, BANK(TownMapGFX)
+ call FarDecompress
+
+ ld hl, PokegearGFX
+ ld de, VTiles2 + $30 tiles
+ ld a, BANK(PokegearGFX)
+ call FarDecompress
+
+ ld hl, PokegearSpritesGFX
+ ld de, VTiles0
+ ld a, BANK(PokegearSpritesGFX)
+ call Decompress
+
+ ld a, [MapGroup]
+ ld b, a
+ ld a, [MapNumber]
+ ld c, a
+ call GetWorldMapLocation
+ cp FAST_SHIP
+ jr z, .ssaqua
+
+ callba GetPlayerIcon
+
+ push de
+ ld h, d
+ ld l, e
+ ld a, b
+
+ push af
+ ld de, VTiles0 tile $10
+ ld bc, 4 tiles
+ call FarCopyBytes
+ pop af
+
+ pop hl
+
+ ld de, $c0
+ add hl, de
+ ld de, VTiles0 tile $14
+ ld bc, 4 tiles
+ call FarCopyBytes
+ ret
+
+.ssaqua
+ ld hl, FastShipGFX
+ ld de, VTiles0 tile $10
+ ld bc, 8 tiles
+ call CopyBytes
+ ret
+; 90cb2
+
+FastShipGFX: ; 90cb2
+INCBIN "gfx/misc/fast_ship.2bpp"
+; 90d32
+
+Function90d32: ; 90d32 (24:4d32)
+ depixel 4, 2, 4, 0
+ ld a, SPRITE_ANIM_INDEX_0D
+ call _InitSpriteAnimStruct
+ ld hl, $3
+ add hl, bc
+ ld [hl], $0
+ ret
+
+Function90d41: ; 90d41 (24:4d41)
+ ld hl, wcf64
+ ld e, [hl]
+ ld d, 0
+ ld hl, Unknown_90d52
+ add hl, de
+ ld a, [hl]
+ ld hl, $6
+ add hl, bc
+ ld [hl], a
+ ret
+; 90d52 (24:4d52)
+
+Unknown_90d52: ; 90d52
+ db $00, $10, $20, $30
+; 90d56
+
+Function90d56: ; 90d56
+ ld a, [MapGroup]
+ ld b, a
+ ld a, [MapNumber]
+ ld c, a
+ call GetWorldMapLocation
+ cp SPECIAL_MAP
+ ret nz
+ ld a, [BackupMapGroup]
+ ld b, a
+ ld a, [BackupMapNumber]
+ ld c, a
+ call GetWorldMapLocation
+ ret
+; 90d70
+
+
+Function90d70: ; 90d70 (24:4d70)
+ ld a, [MapGroup]
+ ld b, a
+ ld a, [MapNumber]
+ ld c, a
+ call GetWorldMapLocation
+
+ cp FAST_SHIP
+ jr z, .asm_90d95
+
+ cp SPECIAL_MAP
+ jr nz, .asm_90d8e
+
+ ld a, [BackupMapGroup]
+ ld b, a
+ ld a, [BackupMapNumber]
+ ld c, a
+ call GetWorldMapLocation
+
+.asm_90d8e
+ ld [wc6d8], a
+ ld [wc6d7], a
+ ret
+
+.asm_90d95
+ ld [wc6d8], a
+ ld a, NEW_BARK_TOWN
+ ld [wc6d7], a
+ ret
+
+Function90d9e: ; 90d9e (24:4d9e)
+ ld a, $0
+ ld [wJumptableIndex], a
+ xor a
+ ld [wcf64], a
+ ret
+
+Function90da8: ; 90da8 (24:4da8)
+ xor a
+ ld [hBGMapMode], a
+ hlcoord 0, 0
+ ld bc, TileMapEnd - TileMap
+ ld a, $4f
+ call ByteFill
+ ld a, [wcf64]
+ and $3
+ add a
+ ld e, a
+ ld d, 0
+ ld hl, Jumptable_90e12
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld de, .asm_90dcb
+ push de
+ jp [hl]
+
+.asm_90dcb
+ call Function90eb0
+ callba TownMapPals
+ ld a, [wcf65]
+ and a
+ jr nz, .asm_90de8
+
+ xor a
+ ld [hBGMapAddress], a
+ ld a, VBGMap0 / $100
+ ld [hBGMapAddress + 1], a
+ call Function90e00
+ ld a, $90
+ jr .asm_90df3
+
+.asm_90de8
+ xor a
+ ld [hBGMapAddress], a
+ ld a, VBGMap1 / $100
+ ld [hBGMapAddress + 1], a
+ call Function90e00
+ xor a
+
+.asm_90df3
+ ld [hWY], a
+ ld a, [wcf65]
+ and 1
+ xor 1
+ ld [wcf65], a
+ ret
+
+Function90e00: ; 90e00 (24:4e00)
+ ld a, [hCGB]
+ and a
+ jr z, .asm_90e0e
+ ld a, $2
+ ld [hBGMapMode], a
+ ld c, 3
+ call DelayFrames
+.asm_90e0e
+ call WaitBGMap
+ ret
+; 90e12 (24:4e12)
+
+Jumptable_90e12: ; 90e12
+ dw Function90e1a
+ dw Function90e3f
+ dw Function90e82
+ dw Function90e72
+; 90e1a
+
+Function90e1a: ; 90e1a
+ ld de, ClockTilemapRLE
+ call Function914bb
+ hlcoord 12, 1
+ ld de, .switch
+ call PlaceString
+ hlcoord 0, 12
+ lb bc, 4, 18
+ call TextBox
+ call Function90f86
+ ret
+; 90e36 (24:4e36)
+
+.switch
+ db " SWITCH▶@"
+; 90e3f
+
+Function90e3f: ; 90e3f
+
+ ld a, [wc6d8]
+ cp FAST_SHIP
+ jr z, .johto
+ cp KANTO_LANDMARK
+ jr nc, .kanto
+.johto
+ ld e, 0
+ jr .ok
+.kanto
+ ld e, 1
+.ok
+ callba PokegearMap
+ ld a, $7
+ ld bc, $12
+ hlcoord 1, 2
+ call ByteFill
+ hlcoord 0, 2
+ ld [hl], $6
+ hlcoord 19, 2
+ ld [hl], $17
+ ld a, [wc6d7]
+ call Function910b4
+ ret
+; 90e72
+
+Function90e72: ; 90e72
+ ld de, RadioTilemapRLE
+ call Function914bb
+ hlcoord 0, 12
+ lb bc, 4, 18
+ call TextBox
+ ret
+; 90e82
+
+Function90e82: ; 90e82
+ ld de, PhoneTilemapRLE
+ call Function914bb
+ hlcoord 0, 12
+ lb bc, 4, 18
+ call TextBox
+ call Function90e98
+ call Function912d8
+ ret
+; 90e98
+
+Function90e98: ; 90e98 (24:4e98)
+ hlcoord 17, 1
+ ld a, $3c
+ ld [hli], a
+ inc a
+ ld [hl], a
+ hlcoord 17, 2
+ inc a
+ ld [hli], a
+ call GetMapHeaderPhoneServiceNybble
+ and a
+ ret nz
+ hlcoord 18, 2
+ ld [hl], $3f
+ ret
+
+Function90eb0: ; 90eb0 (24:4eb0)
+ hlcoord 0, 0
+ ld bc, $8
+ ld a, $4f
+ call ByteFill
+ hlcoord 0, 1
+ ld bc, $8
+ ld a, $4f
+ call ByteFill
+ ld de, wPokegearFlags
+ ld a, [de]
+ bit 0, a
+ call nz, Function90ee4
+ ld a, [de]
+ bit 2, a
+ call nz, Function90eeb
+ ld a, [de]
+ bit 1, a
+ call nz, Function90ef2
+ hlcoord 0, 0
+ ld a, $46
+ call Function90ef7
+ ret
+
+Function90ee4: ; 90ee4 (24:4ee4)
+ hlcoord 2, 0
+ ld a, $40
+ jr Function90ef7
+
+Function90eeb: ; 90eeb (24:4eeb)
+ hlcoord 4, 0
+ ld a, $44
+ jr Function90ef7
+
+Function90ef2: ; 90ef2 (24:4ef2)
+ hlcoord 6, 0
+ ld a, $42
+
+Function90ef7: ; 90ef7 (24:4ef7)
+ ld [hli], a
+ inc a
+ ld [hld], a
+ ld bc, $14
+ add hl, bc
+ add $f
+ ld [hli], a
+ inc a
+ ld [hld], a
+ ret
+
+Function90f04: ; 90f04 (24:4f04)
+ ld a, [wJumptableIndex]
+ ld e, a
+ ld d, 0
+ ld hl, Jumptable_90f13
+rept 2
+ add hl, de
+endr
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp [hl]
+
+Jumptable_90f13: ; 90f13 (24:4f13)
+ dw Function90f2d
+ dw Function90f3e
+ dw Function90fb4
+ dw Function90fcd
+ dw Function90fee
+ dw Function90fcd
+ dw Function90fe9
+ dw Function91156
+ dw Function91171
+ dw Function911eb
+ dw Function91256
+ dw Function910f9
+ dw Function91112
+
+
+Function90f2d: ; 90f2d (24:4f2d)
+ call Function90da8
+ ld hl, UnknownText_0x914d3
+ call PrintText
+ ld hl, wJumptableIndex
+ inc [hl]
+ call Function91492
+ ret
+
+Function90f3e: ; 90f3e (24:4f3e)
+ call Function90f7b
+ ld hl, hJoyLast
+
+ ld a, [hl]
+ and A_BUTTON + B_BUTTON + START + SELECT
+ jr nz, .asm_90f75
+
+ ld a, [hl]
+ and D_RIGHT
+ ret z
+
+ ld a, [wPokegearFlags]
+ bit 0, a
+ jr z, .asm_90f5a
+ ld c, $2
+ ld b, $1
+ jr .asm_90f71
+.asm_90f5a
+
+ ld a, [wPokegearFlags]
+ bit 2, a
+ jr z, .asm_90f67
+ ld c, $7
+ ld b, $2
+ jr .asm_90f71
+.asm_90f67
+
+ ld a, [wPokegearFlags]
+ bit 1, a
+ ret z
+
+ ld c, $b
+ ld b, $3
+
+.asm_90f71
+ call Function91480
+ ret
+
+.asm_90f75
+ ld hl, wJumptableIndex
+ set 7, [hl]
+ ret
+
+Function90f7b: ; 90f7b (24:4f7b)
+ xor a
+ ld [hBGMapMode], a
+ call Function90f86
+ ld a, $1
+ ld [hBGMapMode], a
+ ret
+
+Function90f86: ; 90f86 (24:4f86)
+ hlcoord 3, 5
+ lb bc, 5, 14
+ call ClearBox
+ ld a, [hHours]
+ ld b, a
+ ld a, [hMinutes]
+ ld c, a
+ decoord 6, 8
+ callba PrintHoursMins
+ ld hl, UnknownText_0x90faf
+ bccoord 6, 6
+ call PlaceWholeStringInBoxAtOnce
+ ret
+; 90fa8 (24:4fa8)
+
+String_90fa8: db "ごぜん@"
+String_90fac: db "ごご@"
+
+UnknownText_0x90faf: ; 0x90faf
+ text_jump UnknownText_0x1c5821
+ db "@"
+; 0x90fb4
+
+Function90fb4: ; 90fb4 (24:4fb4)
+ ld a, [wc6d8]
+ cp FAST_SHIP
+ jr z, .johto
+ cp KANTO_LANDMARK
+ jr nc, .kanto
+.johto
+ ld a, 3
+ jr .done
+
+ ret
+
+.kanto
+ ld a, 5
+.done
+ ld [wJumptableIndex], a
+ call Function91492
+ ret
+
+Function90fcd: ; 90fcd (24:4fcd)
+ call Function90da8
+ ld a, [wc6d8]
+ call Function9106a
+ ld a, [wc6d7]
+ call Function91098
+ ld a, c
+ ld [wc6d5], a
+ ld a, b
+ ld [wc6d6], a
+ ld hl, wJumptableIndex
+ inc [hl]
+ ret
+
+Function90fe9: ; 90fe9 (24:4fe9)
+ call Function910e8
+ jr Function90ff2
+
+Function90fee: ; 90fee (24:4fee)
+ ld d, $2e
+ ld e, $1
+Function90ff2: ; 90ff2 (24:4ff2)
+ ld hl, hJoyLast
+ ld a, [hl]
+ and B_BUTTON
+ jr nz, .cancel
+ ld a, [hl]
+ and D_RIGHT
+ jr nz, .right
+ ld a, [hl]
+ and D_LEFT
+ jr nz, .left
+ call Function9102f
+ ret
+
+.right
+ ld a, [wPokegearFlags]
+ bit 2, a
+ jr z, .asm_91015
+ ld c, $7
+ ld b, $2
+ jr .done
+
+.asm_91015
+ ld a, [wPokegearFlags]
+ bit 1, a
+ ret z
+ ld c, $b
+ ld b, $3
+ jr .done
+
+.left
+ ld c, $0
+ ld b, $0
+.done
+ call Function91480
+ ret
+.cancel
+ ld hl, wJumptableIndex
+ set 7, [hl]
+ ret
+
+Function9102f: ; 9102f (24:502f)
+ ld hl, hJoyLast
+ ld a, [hl]
+ and D_UP
+ jr nz, .up
+ ld a, [hl]
+ and D_DOWN
+ jr nz, .down
+ ret
+.up
+ ld hl, wc6d7
+ ld a, [hl]
+ cp d
+ jr c, .asm_91047
+ ld a, e
+ dec a
+ ld [hl], a
+.asm_91047
+ inc [hl]
+ jr .done
+
+.down
+ ld hl, wc6d7
+ ld a, [hl]
+ cp e
+ jr nz, .asm_91054
+ ld a, d
+ inc a
+ ld [hl], a
+.asm_91054
+ dec [hl]
+
+.done
+ ld a, [wc6d7]
+ call Function910b4
+ ld a, [wc6d5]
+ ld c, a
+ ld a, [wc6d6]
+ ld b, a
+ ld a, [wc6d7]
+ call Function910d4
+ ret
+
+Function9106a: ; 9106a
+ push af
+ ld de, 0
+ ld b, SPRITE_ANIM_INDEX_0A
+ ld a, [PlayerGender]
+ bit 0, a
+ jr z, .asm_91079
+ ld b, SPRITE_ANIM_INDEX_1E
+
+.asm_91079
+ ld a, b
+ call _InitSpriteAnimStruct
+ ld hl, $3
+ add hl, bc
+ ld [hl], $10
+ pop af
+ ld e, a
+ push bc
+ callba GetLandmarkCoords
+ pop bc
+ ld hl, $4
+ add hl, bc
+ ld [hl], e
+ ld hl, $5
+ add hl, bc
+ ld [hl], d
+ ret
+; 91098
+
+Function91098: ; 91098
+ push af
+ ld de, 0
+ ld a, SPRITE_ANIM_INDEX_0D
+ call _InitSpriteAnimStruct
+ ld hl, $3
+ add hl, bc
+ ld [hl], $4
+ ld hl, $2
+ add hl, bc
+ ld [hl], $0
+ pop af
+ push bc
+ call Function910d4
+ pop bc
+ ret
+; 910b4
+
+Function910b4: ; 910b4
+ push af
+ hlcoord 8, 0
+ lb bc, 2, 12
+ call ClearBox
+ pop af
+ ld e, a
+ push de
+ callba GetLandmarkName
+ pop de
+ callba Function1de2c5
+ hlcoord 8, 0
+ ld [hl], $34
+ ret
+; 910d4
+
+Function910d4: ; 910d4
+ push bc
+ ld e, a
+ callba GetLandmarkCoords
+ pop bc
+ ld hl, $4
+ add hl, bc
+ ld [hl], e
+ ld hl, $5
+ add hl, bc
+ ld [hl], d
+ ret
+; 910e8
+
+Function910e8: ; 910e8
+ ld a, [StatusFlags]
+ bit 6, a
+ jr z, .asm_910f4
+ ld d, $5e
+ ld e, $2f
+ ret
+
+.asm_910f4
+ ld d, $5e
+ ld e, $58
+ ret
+; 910f9
+
+
+Function910f9: ; 910f9 (24:50f9)
+ call Function90da8
+ depixel 4, 10, 4, 4
+ ld a, SPRITE_ANIM_INDEX_14
+ call _InitSpriteAnimStruct
+ ld hl, $3
+ add hl, bc
+ ld [hl], $8
+ call _UpdateRadioStation
+ ld hl, wJumptableIndex
+ inc [hl]
+ ret
+
+Function91112: ; 91112 (24:5112)
+ ld hl, hJoyLast
+ ld a, [hl]
+ and B_BUTTON
+ jr nz, .cancel
+ ld a, [hl]
+ and D_LEFT
+ jr nz, .left
+ ld a, [wc6da]
+ ld l, a
+ ld a, [wc6db]
+ ld h, a
+ ld a, [wc6d9]
+ and a
+ ret z
+ rst FarCall
+ ret
+
+.left
+ ld a, [wPokegearFlags]
+ bit 2, a
+ jr z, .asm_9113b
+ ld c, $7
+ ld b, $2
+ jr .asm_9114c
+
+.asm_9113b
+ ld a, [wPokegearFlags]
+ bit 0, a
+ jr z, .asm_91148
+ ld c, $2
+ ld b, $1
+ jr .asm_9114c
+
+.asm_91148
+ ld c, $0
+ ld b, $0
+.asm_9114c
+ call Function91480
+ ret
+
+.cancel
+ ld hl, wJumptableIndex
+ set 7, [hl]
+ ret
+
+Function91156: ; 91156 (24:5156)
+ ld hl, wJumptableIndex
+ inc [hl]
+ xor a
+ ld [wc6d2], a
+ ld [wc6d1], a
+ ld [wc6d3], a
+ call Function90da8
+ call Function91492
+ ld hl, UnknownText_0x914ce
+ call PrintText
+ ret
+
+Function91171: ; 91171 (24:5171)
+ ld hl, hJoyPressed
+ ld a, [hl]
+ and B_BUTTON
+ jr nz, .b
+ ld a, [hl]
+ and A_BUTTON
+ jr nz, .a
+ ld hl, hJoyLast
+ ld a, [hl]
+ and D_LEFT
+ jr nz, .left
+ ld a, [hl]
+ and D_RIGHT
+ jr nz, .right
+ call Function9126d
+ ret
+
+.left
+ ld a, [wPokegearFlags]
+ bit 0, a
+ jr z, .asm_9119c
+ ld c, $2
+ ld b, $1
+ jr .asm_911ac
+.asm_9119c
+ ld c, $0
+ ld b, $0
+ jr .asm_911ac
+
+.right
+ ld a, [wPokegearFlags]
+ bit 1, a
+ ret z
+ ld c, $b
+ ld b, $3
+.asm_911ac
+ call Function91480
+ ret
+
+.b
+ ld hl, wJumptableIndex
+ set 7, [hl]
+ ret
+
+.a
+ ld hl, wPhoneList
+ ld a, [wc6d2]
+ ld e, a
+ ld d, 0
+ add hl, de
+ ld a, [wc6d1]
+ ld e, a
+ ld d, 0
+ add hl, de
+ ld a, [hl]
+ and a
+ ret z
+
+ ld [wc6d3], a
+ hlcoord 1, 4
+ ld a, [wc6d1]
+ ld bc, 20 * 2
+ call AddNTimes
+ ld [hl], "▷"
+ call Function91342
+ jr c, .asm_911e5
+
+ ld hl, wJumptableIndex
+ inc [hl]
+ ret
+
+.asm_911e5
+ ld a, $8
+ ld [wJumptableIndex], a
+ ret
+
+Function911eb: ; 911eb (24:51eb)
+ call GetMapHeaderPhoneServiceNybble
+ and a
+ jr nz, .asm_91234
+ ld hl, Options
+ res NO_TEXT_SCROLL, [hl]
+ xor a
+ ld [hInMenu], a
+ ld de, SFX_CALL
+ call PlaySFX
+ ld hl, UnknownText_0x9124c
+ call PrintText
+ call WaitSFX
+ ld de, SFX_CALL
+ call PlaySFX
+ ld hl, UnknownText_0x9124c
+ call PrintText
+ call WaitSFX
+ ld a, [wc6d3]
+ ld b, a
+ call Function90199
+ ld c, 10
+ call DelayFrames
+ ld hl, Options
+ set NO_TEXT_SCROLL, [hl]
+ ld a, $1
+ ld [hInMenu], a
+ call Function912b7
+ ld hl, wJumptableIndex
+ inc [hl]
+ ret
+.asm_91234
+ callba Phone_NoSignal
+ ld hl, OutOfServiceAreaText
+ call PrintText
+ ld a, $8
+ ld [wJumptableIndex], a
+ ld hl, UnknownText_0x914ce
+ call PrintText
+ ret
+; 9124c (24:524c)
+
+UnknownText_0x9124c: ; 0x9124c
+ ;
+ text_jump UnknownText_0x1c5824
+ db "@"
+; 0x91251
+
+OutOfServiceAreaText: ; 0x91251
+ ; You're out of the service area.
+ text_jump UnknownText_0x1c5827
+ db "@"
+; 0x91256
+
+Function91256: ; 91256 (24:5256)
+ ld a, [hJoyPressed]
+ and A_BUTTON | B_BUTTON
+ ret z
+ callba HangUp
+ ld a, $8
+ ld [wJumptableIndex], a
+ ld hl, UnknownText_0x914ce
+ call PrintText
+ ret
+
+Function9126d: ; 9126d (24:526d)
+ ld hl, hJoyLast
+ ld a, [hl]
+ and D_UP
+ jr nz, .up
+ ld a, [hl]
+ and D_DOWN
+ jr nz, .down
+ ret
+
+.up
+ ld hl, wc6d1
+ ld a, [hl]
+ and a
+ jr z, .asm_91285
+ dec [hl]
+ jr .asm_912a3
+
+.asm_91285
+ ld hl, wc6d2
+ ld a, [hl]
+ and a
+ ret z
+ dec [hl]
+ jr .asm_912ad
+
+.down
+ ld hl, wc6d1
+ ld a, [hl]
+ cp $3
+ jr nc, .asm_91299
+ inc [hl]
+ jr .asm_912a3
+
+.asm_91299
+ ld hl, wc6d2
+ ld a, [hl]
+ cp $6
+ ret nc
+ inc [hl]
+ jr .asm_912ad
+
+.asm_912a3
+ xor a
+ ld [hBGMapMode], a
+ call Function912b7
+ call WaitBGMap
+ ret
+
+.asm_912ad
+ xor a
+ ld [hBGMapMode], a
+ call Function912d8
+ call WaitBGMap
+ ret
+
+Function912b7: ; 912b7 (24:52b7)
+ ld a, " "
+ hlcoord 1, 4
+ ld [hl], a
+ hlcoord 1, 6
+ ld [hl], a
+ hlcoord 1, 8
+ ld [hl], a
+ hlcoord 1, 10
+ ld [hl], a
+ hlcoord 1, 4
+ ld a, [wc6d1]
+ ld bc, $28
+ call AddNTimes
+ ld [hl], "▶"
+ ret
+
+Function912d8: ; 912d8 (24:52d8)
+ hlcoord 1, 3
+ ld b, $9
+ ld a, $7f
+.asm_912df
+ ld c, $12
+.asm_912e1
+ ld [hli], a
+ dec c
+ jr nz, .asm_912e1
+rept 2
+ inc hl
+endr
+ dec b
+ jr nz, .asm_912df
+ ld a, [wc6d2]
+ ld e, a
+ ld d, $0
+ ld hl, wPhoneList
+ add hl, de
+ xor a
+ ld [wc6d0], a
+.asm_912f8
+ ld a, [hli]
+ push hl
+ push af
+ hlcoord 2, 4
+ ld a, [wc6d0]
+ ld bc, $28
+ call AddNTimes
+ ld d, h
+ ld e, l
+ pop af
+ ld b, a
+ call Function90380
+ pop hl
+ ld a, [wc6d0]
+ inc a
+ ld [wc6d0], a
+ cp $4
+ jr c, .asm_912f8
+ call Function912b7
+ ret
+; 9131e (24:531e)
+
+Function9131e: ; 9131e
+ ld hl, wPhoneList
+ ld a, [wc6d2]
+ ld e, a
+ ld d, 0
+ add hl, de
+ ld a, [wc6d1]
+ ld e, a
+ ld d, 0
+ add hl, de
+ ld [hl], 0
+ ld hl, wPhoneList
+ ld c, $a
+.asm_91336
+ ld a, [hli]
+ and a
+ jr nz, .asm_9133e
+ ld a, [hld]
+ ld [hli], a
+ ld [hl], 0
+.asm_9133e
+ dec c
+ jr nz, .asm_91336
+ ret
+; 91342
+
+Function91342: ; 91342 (24:5342)
+ ld hl, wPhoneList
+ ld a, [wc6d2]
+ ld e, a
+ ld d, 0
+ add hl, de
+ ld a, [wc6d1]
+ ld e, a
+ ld d, 0
+ add hl, de
+ ld c, [hl]
+ callba Function9038a
+ ld a, c
+ and a
+ jr z, .asm_91366
+
+ ld hl, Jumptable_91455
+ ld de, Unknown_9143f
+ jr .asm_9136c
+
+.asm_91366
+ ld hl, Jumptable_9146a
+ ld de, Unknown_9145b
+
+.asm_9136c
+ xor a
+ ld [hBGMapMode], a
+ push hl
+ push de
+ ld a, [de]
+ ld l, a
+ inc de
+ ld a, [de]
+ ld h, a
+ inc de
+ push hl
+ ld bc, hBGMapAddress + 1
+ add hl, bc
+ ld a, [de]
+ inc de
+ sla a
+ ld b, a
+ ld c, 8
+ push de
+ call TextBox
+ pop de
+ pop hl
+ inc hl
+ call PlaceString
+ pop de
+ xor a
+ ld [wc6d4], a
+ call Function9141d
+ call WaitBGMap
+
+.asm_91398
+ push de
+ call JoyTextDelay
+ pop de
+ ld hl, hJoyPressed
+ ld a, [hl]
+ and D_UP
+ jr nz, .asm_913b4
+ ld a, [hl]
+ and D_DOWN
+ jr nz, .asm_913c1
+ ld a, [hl]
+ and A_BUTTON | B_BUTTON
+ jr nz, .asm_913d4
+ call DelayFrame
+ jr .asm_91398
+
+.asm_913b4
+ ld hl, wc6d4
+ ld a, [hl]
+ and a
+ jr z, .asm_91398
+ dec [hl]
+ call Function9141d
+ jr .asm_91398
+
+.asm_913c1
+ ld hl, 2
+ add hl, de
+ ld a, [wc6d4]
+ inc a
+ cp [hl]
+ jr nc, .asm_91398
+ ld [wc6d4], a
+ call Function9141d
+ jr .asm_91398
+
+.asm_913d4
+ xor a
+ ld [hBGMapMode], a
+ call Function912d8
+ ld a, $1
+ ld [hBGMapMode], a
+ pop hl
+ ld a, [hJoyPressed]
+ and B_BUTTON
+ jr nz, Function913f1
+
+ ld a, [wc6d4]
+ ld e, a
+ ld d, 0
+rept 2
+ add hl, de
+endr
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp [hl]
+
+Function913f1: ; 913f1
+ ld hl, UnknownText_0x914ce
+ call PrintText
+ scf
+ ret
+; 913f9 (24:53f9)
+
+Function913f9: ; 913f9
+ ld hl, UnknownText_0x914d8
+ call MenuTextBox
+ call YesNoBox
+ call ExitMenu
+ jr c, .asm_91419
+ call Function9131e
+ xor a
+ ld [hBGMapMode], a
+ call Function912d8
+ ld hl, UnknownText_0x914ce
+ call PrintText
+ call WaitBGMap
+.asm_91419
+ scf
+ ret
+; 9141b
+
+Function9141b: ; 9141b
+ and a
+ ret
+; 9141d
+
+Function9141d: ; 9141d (24:541d)
+ push de
+ ld a, [de]
+ inc de
+ ld l, a
+ ld a, [de]
+ inc de
+ ld h, a
+ ld a, [de]
+ ld c, a
+ push hl
+ ld a, " "
+ ld de, 20 * 2
+.asm_9142c
+ ld [hl], a
+ add hl, de
+ dec c
+ jr nz, .asm_9142c
+ pop hl
+ ld a, [wc6d4]
+ ld bc, 20 * 2
+ call AddNTimes
+ ld [hl], "▶"
+ pop de
+ ret
+; 9143f (24:543f)
+
+Unknown_9143f: ; 9143f
+ dwcoord 10, 6
+ db 3
+ db "CALL"
+ next "DELETE"
+ next "CANCEL"
+ db "@"
+; 91455
+
+Jumptable_91455: ; 91455
+ dw Function9141b
+ dw Function913f9
+ dw Function913f1
+; 9145b
+
+Unknown_9145b: ; 9145b
+ dwcoord 10, 8
+ db 2
+ db "CALL"
+ next "CANCEL"
+ db "@"
+; 9146a
+
+Jumptable_9146a: ; 9146a
+ dw Function9141b
+ dw Function913f1
+; 9146e
+
+
+Function9146e: ; 9146e
+ ld a, [hHours]
+ cp 12
+ jr c, .asm_9147b
+ sub 12
+ ld [wd265], a
+ scf
+ ret
+
+.asm_9147b
+ ld [wd265], a
+ and a
+ ret
+; 91480
+
+
+Function91480: ; 91480 (24:5480)
+ ld de, SFX_READ_TEXT_2
+ call PlaySFX
+ ld a, c
+ ld [wJumptableIndex], a
+ ld a, b
+ ld [wcf64], a
+ call DeleteSpriteAnimStruct2ToEnd
+ ret
+
+Function91492: ; 91492
+ ld a, [wc6dc]
+ cp $fe
+ jr z, .asm_914a3
+ cp $ff
+ call z, EnterMapMusic
+ xor a
+ ld [wc6dc], a
+ ret
+
+.asm_914a3
+ call RestartMapMusic
+ xor a
+ ld [wc6dc], a
+ ret
+; 914ab
+
+
+DeleteSpriteAnimStruct2ToEnd: ; 914ab (24:54ab)
+ ld hl, SpriteAnim2
+ ld bc, wSpriteAnimationStructsEnd - SpriteAnim2
+ xor a
+ call ByteFill
+ ld a, 2
+ ld [wSpriteAnimCount], a
+ ret
+
+Function914bb: ; 914bb (24:54bb)
+ hlcoord 0, 0
+.asm_914be
+ ld a, [de]
+ cp $ff
+ ret z
+ ld b, a
+ inc de
+ ld a, [de]
+ ld c, a
+ inc de
+ ld a, b
+.asm_914c8
+ ld [hli], a
+ dec c
+ jr nz, .asm_914c8
+ jr .asm_914be
+; 914ce (24:54ce)
+
+UnknownText_0x914ce: ; 0x914ce
+ ; Whom do you want to call?
+ text_jump UnknownText_0x1c5847
+ db "@"
+; 0x914d3
+
+UnknownText_0x914d3: ; 0x914d3
+ ; Press any button to exit.
+ text_jump UnknownText_0x1c5862
+ db "@"
+; 0x914d8
+
+UnknownText_0x914d8: ; 0x914d8
+ ; Delete this stored phone number?
+ text_jump UnknownText_0x1c587d
+ db "@"
+; 0x914dd
+
+
+PokegearSpritesGFX: ; 914dd
+INCBIN "gfx/misc/pokegear_sprites.2bpp.lz"
+; 9150d
+
+RadioTilemapRLE: ; 9150d
+INCBIN "gfx/unknown/09150d.tilemap.rle"
+
+PhoneTilemapRLE: ; 9158a
+INCBIN "gfx/unknown/09158a.tilemap.rle"
+
+ClockTilemapRLE: ; 915db
+INCBIN "gfx/unknown/0915db.tilemap.rle"
+; 9163e
+_UpdateRadioStation: ; 9163e (24:563e)
+ jr UpdateRadioStation
+
+Function91640: ; 91640 (24:5640)
+ push bc
+ call .TuningKnob
+ pop bc
+ ld a, [wRadioTuningKnob]
+ ld hl, $6
+ add hl, bc
+ ld [hl], a
+ ret
+
+.TuningKnob: ; 9164e (24:564e)
+ ld hl, hJoyLast
+ ld a, [hl]
+ and D_DOWN
+ jr nz, .down
+ ld a, [hl]
+ and D_UP
+ jr nz, .up
+ ret
+
+.down
+ ld hl, wRadioTuningKnob
+ ld a, [hl]
+ and a
+ ret z
+rept 2
+ dec [hl]
+endr
+ jr .update
+
+.up
+ ld hl, wRadioTuningKnob
+ ld a, [hl]
+ cp 80
+ ret nc
+rept 2
+ inc [hl]
+endr
+
+.update
+
+UpdateRadioStation: ; 9166f (24:566f)
+ ld hl, wRadioTuningKnob
+ ld d, [hl]
+ ld hl, RadioChannels
+.loop
+ ld a, [hli]
+ cp -1
+ jr z, .nostation
+ cp d
+ jr z, .foundstation
+rept 2
+ inc hl
+endr
+ jr .loop
+
+.nostation
+ call NoRadioStation
+ ret
+
+.foundstation
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld de, .returnafterstation
+ push de
+ jp [hl]
+.returnafterstation
+ ld a, [wc6d9]
+ and a
+ ret z
+ xor a
+ ld [hBGMapMode], a
+ hlcoord 2, 9
+ call PlaceString
+ ld a, $1
+ ld [hBGMapMode], a
+ ret
+; 916a1 (24:56a1)
+
+Function916a1: ; 916a1
+ ld [wc6d9], a
+ ld a, [hli]
+ ld [wc6da], a
+ ld a, [hli]
+ ld [wc6db], a
+ ret
+; 916ad
+
+
+RadioChannels:
+; frequencies and the shows that play on them.
+; frequency value given here = 4 × ingame_frequency − 2
+ dbw 16, .PkmnTalkAndPokedexShow
+ dbw 28, .PokemonMusic
+ dbw 32, .LuckyChannel
+ dbw 40, .BuenasPassword
+ dbw 52, .RuinsOfAlphRadio
+ dbw 64, .PlacesAndPeople
+ dbw 72, .LetsAllSing
+ dbw 78, .PokeFluteRadio
+ dbw 80, .EvolutionRadio
+ db $ff
+
+.PkmnTalkAndPokedexShow
+; Pokédex Show in the morning
+; Oak's Pokémon Talk in the afternoon and evening
+ call .InJohto
+ jr nc, .NoSignal
+ ld a, [TimeOfDay]
+ and a
+ jp z, LoadStation_PokedexShow
+ jp LoadStation_OaksPokemonTalk
+
+.PokemonMusic
+ call .InJohto
+ jr nc, .NoSignal
+ jp LoadStation_PokemonMusic
+
+.LuckyChannel
+ call .InJohto
+ jr nc, .NoSignal
+ jp LoadStation_LuckyChannel
+
+.BuenasPassword
+ call .InJohto
+ jr nc, .NoSignal
+ jp LoadStation_BuenasPassword
+
+.RuinsOfAlphRadio
+ ld a, [wc6d8]
+ cp RUINS_OF_ALPH
+ jr nz, .NoSignal
+ jp LoadStation_UnownRadio
+
+.PlacesAndPeople
+ call .InJohto
+ jr c, .NoSignal
+ ld a, [wPokegearFlags]
+ bit 3, a
+ jr z, .NoSignal
+ jp LoadStation_PlacesAndPeople
+
+.LetsAllSing
+ call .InJohto
+ jr c, .NoSignal
+ ld a, [wPokegearFlags]
+ bit 3, a
+ jr z, .NoSignal
+ jp LoadStation_LetsAllSing
+
+.PokeFluteRadio
+ call .InJohto
+ jr c, .NoSignal
+ ld a, [wPokegearFlags]
+ bit 3, a
+ jr z, .NoSignal
+ jp LoadStation_PokeFluteRadio
+
+.EvolutionRadio
+; This station airs in the Lake of Rage area when Rocket are still in Mahogany.
+
+ ld a, [StatusFlags]
+ bit 4, a
+ jr z, .NoSignal
+
+ ld a, [wc6d8]
+ cp MAHOGANY_TOWN
+ jr z, .ok
+ cp ROUTE_43
+ jr z, .ok
+ cp LAKE_OF_RAGE
+ jr nz, .NoSignal
+.ok
+ jp LoadStation_EvolutionRadio
+
+.NoSignal
+ call NoRadioStation
+ ret
+
+.InJohto
+; if in Johto or on the S.S. Aqua, set carry
+; otherwise clear carry
+ ld a, [wc6d8]
+ cp FAST_SHIP
+ jr z, .johto
+ cp KANTO_LANDMARK
+ jr c, .johto
+.kanto
+ and a
+ ret
+.johto
+ scf
+ ret
+
+
+
+LoadStation_OaksPokemonTalk: ; 91753 (24:5753)
+ xor a ; OAKS_POKEMON_TALK
+ ld [wd002], a
+ ld [wd005], a
+ ld a, BANK(PlayRadioShow)
+ ld hl, PlayRadioShow
+ call Radio_BackUpFarCallParams
+ ld de, OaksPkmnTalkName
+ ret
+
+LoadStation_PokedexShow: ; 91766 (24:5766)
+ ld a, POKEDEX_SHOW
+ ld [wd002], a
+ xor a
+ ld [wd005], a
+ ld a, BANK(PlayRadioShow)
+ ld hl, PlayRadioShow
+ call Radio_BackUpFarCallParams
+ ld de, PokedexShowName
+ ret
+
+LoadStation_PokemonMusic: ; 9177b (24:577b)
+ ld a, POKEMON_MUSIC
+ ld [wd002], a
+ xor a
+ ld [wd005], a
+ ld a, BANK(PlayRadioShow)
+ ld hl, PlayRadioShow
+ call Radio_BackUpFarCallParams
+ ld de, PokemonMusicName
+ ret
+
+LoadStation_LuckyChannel: ; 91790 (24:5790)
+ ld a, LUCKY_CHANNEL
+ ld [wd002], a
+ xor a
+ ld [wd005], a
+ ld a, BANK(PlayRadioShow)
+ ld hl, PlayRadioShow
+ call Radio_BackUpFarCallParams
+ ld de, LuckyChannelName
+ ret
+
+LoadStation_BuenasPassword: ; 917a5 (24:57a5)
+ ld a, BUENAS_PASSWORD
+ ld [wd002], a
+ xor a
+ ld [wd005], a
+ ld a, BANK(PlayRadioShow)
+ ld hl, PlayRadioShow
+ call Radio_BackUpFarCallParams
+ ld de, NotBuenasPasswordName
+ ld a, [StatusFlags2]
+ bit 0, a
+ ret z
+ ld de, BuenasPasswordName
+ ret
+; 917c3 (24:57c3)
+
+BuenasPasswordName: db "BUENA'S PASSWORD@"
+NotBuenasPasswordName: db "@"
+
+LoadStation_UnownRadio: ; 917d5 (24:57d5)
+ ld a, UNOWN_RADIO
+ ld [wd002], a
+ xor a
+ ld [wd005], a
+ ld a, BANK(PlayRadioShow)
+ ld hl, PlayRadioShow
+ call Radio_BackUpFarCallParams
+ ld de, UnknownStationName
+ ret
+
+LoadStation_PlacesAndPeople: ; 917ea (24:57ea)
+ ld a, PLACES_AND_PEOPLE
+ ld [wd002], a
+ xor a
+ ld [wd005], a
+ ld a, BANK(PlayRadioShow)
+ ld hl, PlayRadioShow
+ call Radio_BackUpFarCallParams
+ ld de, PlacesAndPeopleName
+ ret
+
+LoadStation_LetsAllSing: ; 917ff (24:57ff)
+ ld a, LETS_ALL_SING
+ ld [wd002], a
+ xor a
+ ld [wd005], a
+ ld a, BANK(PlayRadioShow)
+ ld hl, PlayRadioShow
+ call Radio_BackUpFarCallParams
+ ld de, LetsAllSingName
+ ret
+; 91814 (24:5814)
+
+LoadStation_RocketRadio: ; 91814
+ ld a, ROCKET_RADIO
+ ld [wd002], a
+ xor a
+ ld [wd005], a
+ ld a, BANK(PlayRadioShow)
+ ld hl, PlayRadioShow
+ call Radio_BackUpFarCallParams
+ ld de, LetsAllSingName
+ ret
+; 91829
+
+LoadStation_PokeFluteRadio: ; 91829 (24:5829)
+ ld a, POKE_FLUTE_RADIO
+ ld [wd002], a
+ xor a
+ ld [wd005], a
+ ld a, BANK(PlayRadioShow)
+ ld hl, PlayRadioShow
+ call Radio_BackUpFarCallParams
+ ld de, PokeFluteStationName
+ ret
+
+LoadStation_EvolutionRadio: ; 9183e (24:583e)
+ ld a, EVOLUTION_RADIO
+ ld [wd002], a
+ xor a
+ ld [wd005], a
+ ld a, BANK(PlayRadioShow)
+ ld hl, PlayRadioShow
+ call Radio_BackUpFarCallParams
+ ld de, UnknownStationName
+ ret
+; 91853 (24:5853)
+
+LoadStation_Dummy: ; 91853
+ ret
+
+RadioMusicRestartDE: ; 91854 (24:5854)
+ push de
+ ld a, e
+ ld [wc6dc], a
+ ld de, MUSIC_NONE
+ call PlayMusic
+ pop de
+ ld a, e
+ ld [wMapMusic], a
+ call PlayMusic
+ ret
+
+RadioMusicRestartPokemonChannel: ; 91868 (24:5868)
+ push de
+ ld a, $fe
+ ld [wc6dc], a
+ ld de, MUSIC_NONE
+ call PlayMusic
+ pop de
+ ld de, MUSIC_POKEMON_CHANNEL
+ call PlayMusic
+ ret
+
+Radio_BackUpFarCallParams: ; 9187c (24:587c)
+ ld [wc6d9], a
+ ld a, l
+ ld [wc6da], a
+ ld a, h
+ ld [wc6db], a
+ ret
+
+NoRadioStation: ; 91888 (24:5888)
+ call NoRadioMusic
+ call NoRadioName
+ xor a
+ ld [wc6d9], a
+ ld [wc6da], a
+ ld [wc6db], a
+ ld a, $1
+ ld [hBGMapMode], a
+ ret
+
+NoRadioMusic: ; 9189d (24:589d)
+ ld de, MUSIC_NONE
+ call PlayMusic
+ ld a, $ff
+ ld [wc6dc], a
+ ret
+
+NoRadioName: ; 918a9 (24:58a9)
+ xor a
+ ld [hBGMapMode], a
+ hlcoord 1, 8
+ lb bc, 3, 18
+ call ClearBox
+ hlcoord 0, 12
+ ld bc, $412
+ call TextBox
+ ret
+; 918bf
+
+OaksPkmnTalkName: db "OAK's <PK><MN> Talk@"
+PokedexShowName: db "#DEX Show@"
+PokemonMusicName: db "#MON Music@"
+LuckyChannelName: db "Lucky Channel@"
+UnknownStationName: db "?????@"
+PlacesAndPeopleName: db "Places & People@"
+LetsAllSingName: db "Let's All Sing!@"
+PokeFluteStationName: db "# FLUTE@"
+; 9191c
+
+INCLUDE "engine/town_map.asm"
+
+PlayRadio: ; 91a53
+ ld hl, Options
+ ld a, [hl]
+ push af
+ set 4, [hl]
+ call .PlayStation
+ ld c, 100
+ call DelayFrames
+.loop
+ call JoyTextDelay
+ ld a, [hJoyPressed]
+ and A_BUTTON | B_BUTTON
+ jr nz, .stop
+ ld a, [wc6da]
+ ld l, a
+ ld a, [wc6db]
+ ld h, a
+ ld a, [wc6d9]
+ and a
+ jr z, .zero
+ rst FarCall
+
+.zero
+ call DelayFrame
+ jr .loop
+
+.stop
+ pop af
+ ld [Options], a
+ call Function91492
+ ret
+; 91a87
+
+.PlayStation: ; 91a87
+ ld a, -1
+ ld [EnemyTurnsTaken], a
+ ld hl, .StationPointers
+ ld d, $0
+rept 2
+ add hl, de
+endr
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld de, .jump_return
+ push de
+ jp [hl]
+
+.jump_return
+ push de
+ hlcoord 0, 12
+ lb bc, 4, 18
+ call TextBox
+ hlcoord 1, 14
+ ld [hl], $72
+ pop de
+ hlcoord 2, 14
+ call PlaceString
+ ld h, b
+ ld l, c
+ ld [hl], $73
+ call WaitBGMap
+ ret
+; 91ab9
+
+.StationPointers: ; 91ab9
+ dw .OakOrPnP
+ dw LoadStation_OaksPokemonTalk
+ dw LoadStation_PokedexShow
+ dw LoadStation_PokemonMusic
+ dw LoadStation_LuckyChannel
+ dw LoadStation_UnownRadio
+ dw LoadStation_PlacesAndPeople
+ dw LoadStation_LetsAllSing
+ dw LoadStation_RocketRadio
+; 91acb
+
+.OakOrPnP: ; 91acb
+ call IsInJohto
+ and a
+ jr nz, .kanto
+ call UpdateTime
+ ld a, [TimeOfDay]
+ and a
+ jp z, LoadStation_PokedexShow
+ jp LoadStation_OaksPokemonTalk
+
+.kanto
+ jp LoadStation_PlacesAndPeople
+; 91ae1
+
+PokegearMap: ; 91ae1
+ ld a, e
+ and a
+ jr nz, .kanto
+ call Function91ff2
+ call FillJohtoMap
+ ret
+
+.kanto
+ call Function91ff2
+ call FillKantoMap
+ ret
+; 91af3
+
+_FlyMap: ; 91af3
+ call ClearBGPalettes
+ call ClearTileMap
+ call ClearSprites
+ ld hl, hInMenu
+ ld a, [hl]
+ push af
+ ld [hl], $1
+ xor a
+ ld [hBGMapMode], a
+ callba Function8cf53
+ call Function91ff2
+ ld de, GFX_922e1
+ ld hl, VTiles2 tile $30
+ lb bc, BANK(GFX_922e1), 6
+ call Request1bpp
+ call FlyMap
+ call Function91c8f
+ ld b, SCGB_02
+ call GetSGBLayout
+ call SetPalettes
+.loop
+ call JoyTextDelay
+ ld hl, hJoyPressed
+ ld a, [hl]
+ and B_BUTTON
+ jr nz, .pressedB
+ ld a, [hl]
+ and A_BUTTON
+ jr nz, .pressedA
+ call FlyMapScroll
+ call GetMapCursorCoordinates
+ callba Function8cf69
+ call DelayFrame
+ jr .loop
+
+.pressedB
+ ld a, -1
+ jr .exit
+
+.pressedA
+ ld a, [wd002]
+ ld l, a
+ ld h, 0
+ add hl, hl
+ ld de, Flypoints + 1
+ add hl, de
+ ld a, [hl]
+
+.exit
+ ld [wd002], a
+ pop af
+ ld [hInMenu], a
+ call ClearBGPalettes
+ ld a, $90
+ ld [hWY], a
+ xor a
+ ld [hBGMapAddress], a
+ ld a, VBGMap0 / $100
+ ld [hBGMapAddress + 1], a
+ ld a, [wd002]
+ ld e, a
+ ret
+; 91b73
+
+FlyMapScroll: ; 91b73
+ ld a, [StartFlypoint]
+ ld e, a
+ ld a, [EndFlypoint]
+ ld d, a
+ ld hl, hJoyLast
+ ld a, [hl]
+ and D_UP
+ jr nz, .ScrollNext
+ ld a, [hl]
+ and D_DOWN
+ jr nz, .ScrollPrev
+ ret
+
+.ScrollNext
+ ld hl, wd002
+ ld a, [hl]
+ cp d
+ jr nz, .NotAtEndYet
+ ld a, e
+ dec a
+ ld [hl], a
+
+.NotAtEndYet
+ inc [hl]
+ call CheckIfVisitedFlypoint
+ jr z, .ScrollNext
+ jr .Finally
+
+.ScrollPrev
+ ld hl, wd002
+ ld a, [hl]
+ cp e
+ jr nz, .NotAtStartYet
+ ld a, d
+ inc a
+ ld [hl], a
+
+.NotAtStartYet
+ dec [hl]
+ call CheckIfVisitedFlypoint
+ jr z, .ScrollPrev
+
+.Finally
+ call TownMapBubble
+ call WaitBGMap
+ xor a
+ ld [hBGMapMode], a
+ ret
+; 91bb5
+
+TownMapBubble: ; 91bb5
+; Draw the bubble containing the location text in the town map HUD
+
+; Top-left corner
+ hlcoord 1, 0
+ ld a, $30
+ ld [hli], a
+
+; Top row
+ ld bc, 16
+ ld a, " "
+ call ByteFill
+
+; Top-right corner
+ ld a, $31
+ ld [hl], a
+ hlcoord 1, 1
+
+
+; Middle row
+ ld bc, 18
+ ld a, " "
+ call ByteFill
+
+
+; Bottom-left corner
+ hlcoord 1, 2
+ ld a, $32
+ ld [hli], a
+
+; Bottom row
+ ld bc, 16
+ ld a, " "
+ call ByteFill
+
+; Bottom-right corner
+ ld a, $33
+ ld [hl], a
+
+
+; Print "Where?"
+ hlcoord 2, 0
+ ld de, .Where
+ call PlaceString
+
+; Print the name of the default flypoint
+ call .Name
+
+; Up/down arrows
+ hlcoord 18, 1
+ ld [hl], $34
+ ret
+
+.Where
+ db "Where?@"
+
+.Name
+; We need the map location of the default flypoint
+ ld a, [wd002]
+ ld l, a
+ ld h, 0
+ add hl, hl ; two bytes per flypoint
+ ld de, Flypoints
+ add hl, de
+ ld e, [hl]
+
+ callba GetLandmarkName
+
+ hlcoord 2, 1
+ ld de, StringBuffer1
+ call PlaceString
+ ret
+; 91c17
+
+GetMapCursorCoordinates: ; 91c17
+ ld a, [wd002]
+ ld l, a
+ ld h, $0
+ add hl, hl
+ ld de, Flypoints
+ add hl, de
+ ld e, [hl]
+ callba GetLandmarkCoords
+ ld a, [wd003]
+ ld c, a
+ ld a, [wd004]
+ ld b, a
+ ld hl, $4
+ add hl, bc
+ ld [hl], e
+ ld hl, $5
+ add hl, bc
+ ld [hl], d
+ ret
+; 91c3c
+
+CheckIfVisitedFlypoint: ; 91c3c
+; Check if the flypoint loaded in [hl] has been visited yet.
+ push bc
+ push de
+ push hl
+ ld l, [hl]
+ ld h, 0
+ add hl, hl
+ ld de, Flypoints + 1
+ add hl, de
+ ld c, [hl]
+ call HasVisitedSpawn
+ pop hl
+ pop de
+ pop bc
+ and a
+ ret
+; 91c50
+
+HasVisitedSpawn: ; 91c50
+; Check if spawn point c has been visited.
+ ld hl, VisitedSpawns
+ ld b, CHECK_FLAG
+ ld d, 0
+ predef FlagPredef
+ ld a, c
+ ret
+; 91c5e
+
+Flypoints: ; 91c5e
+; landmark, spawn point
+
+ const_def
+
+flypoint: MACRO
+; \1\@FLY EQUS "FLY_\1"
+; \1\@SPAWN EQUS "SPAWN_\1"
+ ; const \1\@FLY
+ ; db \2, \1\@SPAWN
+ const FLY_\1
+ db \2, SPAWN_\1
+ENDM
+
+; Johto
+ flypoint NEW_BARK, NEW_BARK_TOWN
+ flypoint CHERRYGROVE, CHERRYGROVE_CITY
+ flypoint VIOLET, VIOLET_CITY
+ flypoint AZALEA, AZALEA_TOWN
+ flypoint GOLDENROD, GOLDENROD_CITY
+ flypoint ECRUTEAK, ECRUTEAK_CITY
+ flypoint OLIVINE, OLIVINE_CITY
+ flypoint CIANWOOD, CIANWOOD_CITY
+ flypoint MAHOGANY, MAHOGANY_TOWN
+ flypoint LAKE, LAKE_OF_RAGE
+ flypoint BLACKTHORN, BLACKTHORN_CITY
+ flypoint MT_SILVER, SILVER_CAVE
+
+; Kanto
+KANTO_FLYPOINT EQU const_value
+
+ flypoint PALLET, PALLET_TOWN
+ flypoint VIRIDIAN, VIRIDIAN_CITY
+ flypoint PEWTER, PEWTER_CITY
+ flypoint CERULEAN, CERULEAN_CITY
+ flypoint VERMILION, VERMILION_CITY
+ flypoint ROCK_TUNNEL, ROCK_TUNNEL
+ flypoint LAVENDER, LAVENDER_TOWN
+ flypoint CELADON, CELADON_CITY
+ flypoint SAFFRON, SAFFRON_CITY
+ flypoint FUCHSIA, FUCHSIA_CITY
+ flypoint CINNABAR, CINNABAR_ISLAND
+ flypoint INDIGO, INDIGO_PLATEAU
+
+ db -1
+; 91c8f
+
+Function91c8f: ; 91c8f
+ ret
+; 91c90
+
+FlyMap: ; 91c90
+
+ ld a, [MapGroup]
+ ld b, a
+ ld a, [MapNumber]
+ ld c, a
+ call GetWorldMapLocation
+
+; If we're not in a valid location, i.e. Pokecenter floor 2F,
+; the backup map information is used
+
+ cp SPECIAL_MAP
+ jr nz, .CheckRegion
+
+ ld a, [BackupMapGroup]
+ ld b, a
+ ld a, [BackupMapNumber]
+ ld c, a
+ call GetWorldMapLocation
+
+.CheckRegion
+; The first 46 locations are part of Johto. The rest are in Kanto
+ cp KANTO_LANDMARK
+ jr nc, .KantoFlyMap
+
+.JohtoFlyMap
+; Note that .NoKanto should be modified in tandem with this branch
+
+ push af
+
+; Start from New Bark Town
+ ld a, FLY_NEW_BARK
+ ld [wd002], a
+
+; Flypoints begin at New Bark Town...
+ ld [StartFlypoint], a
+; ..and end at Silver Cave
+ ld a, FLY_MT_SILVER
+ ld [EndFlypoint], a
+
+; Fill out the map
+ call FillJohtoMap
+ call .MapHud
+ pop af
+ call TownMapPlayerIcon
+ ret
+
+.KantoFlyMap
+
+; The event that there are no flypoints enabled in a map is not
+; accounted for. As a result, if you attempt to select a flypoint
+; when there are none enabled, the game will crash. Additionally,
+; the flypoint selection has a default starting point that
+; can be flown to even if none are enabled
+
+; To prevent both of these things from happening when the player
+; enters Kanto, fly access is restricted until Indigo Plateau is
+; visited and its flypoint enabled
+
+ push af
+ ld c, SPAWN_INDIGO
+ call HasVisitedSpawn
+ and a
+ jr z, .NoKanto
+
+; Kanto's map is only loaded if we've visited Indigo Plateau
+
+; Flypoints begin at Pallet Town...
+ ld a, FLY_PALLET
+ ld [StartFlypoint], a
+; ...and end at Indigo Plateau
+ ld a, FLY_INDIGO
+ ld [EndFlypoint], a
+
+; Because Indigo Plateau is the first flypoint the player
+; visits, it's made the default flypoint
+ ld [wd002], a
+
+; Fill out the map
+ call FillKantoMap
+ call .MapHud
+ pop af
+ call TownMapPlayerIcon
+ ret
+
+.NoKanto
+; If Indigo Plateau hasn't been visited, we use Johto's map instead
+
+; Start from New Bark Town
+ ld a, FLY_NEW_BARK
+ ld [wd002], a
+
+; Flypoints begin at New Bark Town...
+ ld [StartFlypoint], a
+; ..and end at Silver Cave
+ ld a, FLY_MT_SILVER
+ ld [EndFlypoint], a
+
+ call FillJohtoMap
+
+ pop af
+
+.MapHud
+ call TownMapBubble
+ call TownMapPals
+
+ hlbgcoord 0, 0 ; BG Map 0
+ call TownMapBGUpdate
+
+ call TownMapMon
+ ld a, c
+ ld [wd003], a
+ ld a, b
+ ld [wd004], a
+ ret
+; 91d11
+
+Function91d11: ; 91d11
+ ld a, [wd002]
+ push af
+ ld a, [wd003]
+ push af
+ ld a, e
+ ld [wd002], a
+ call ClearSprites
+ xor a
+ ld [hBGMapMode], a
+ ld a, $1
+ ld [hInMenu], a
+
+ ld de, GFX_922d1
+ ld hl, VTiles0 tile $7f
+ lb bc, BANK(GFX_922d1), 1
+ call Request2bpp ; actually 1bpp
+
+ call Function91ed0
+
+ ld hl, VTiles0 tile $78
+ ld c, $4
+ call Request2bpp
+
+ call Function91ff2
+ call FillKantoMap
+ call Function91de9
+ call TownMapPals
+ hlbgcoord 0, 0, VBGMap1
+ call TownMapBGUpdate
+ call FillJohtoMap
+ call Function91de9
+ call TownMapPals
+ hlbgcoord 0, 0
+ call TownMapBGUpdate
+ ld b, SCGB_02
+ call GetSGBLayout
+ call SetPalettes
+ xor a
+ ld [hBGMapMode], a
+ xor a
+ call Function91e1e
+.loop
+ call JoyTextDelay
+ ld hl, hJoyPressed
+ ld a, [hl]
+ and A_BUTTON | B_BUTTON
+ jr nz, .a_b
+ ld a, [hJoypadDown]
+ and SELECT
+ jr nz, .select
+ call Function91d9b
+ call Function91dcd
+ jr .next
+
+.select
+ call Function91e5a
+
+.next
+ call DelayFrame
+ jr .loop
+
+.a_b
+ call ClearSprites
+ pop af
+ ld [wd003], a
+ pop af
+ ld [wd002], a
+ ret
+; 91d9b
+
+Function91d9b: ; 91d9b
+ ld a, [hl]
+ and $20
+ jr nz, .asm_91da6
+ ld a, [hl]
+ and $10
+ jr nz, .asm_91db7
+ ret
+
+.asm_91da6
+ ld a, [hWY]
+ cp $90
+ ret z
+ call ClearSprites
+ ld a, $90
+ ld [hWY], a
+ xor a
+ call Function91e1e
+ ret
+
+.asm_91db7
+ ld a, [StatusFlags]
+ bit 6, a ; hall of fame
+ ret z
+ ld a, [hWY]
+ and a
+ ret z
+ call ClearSprites
+ xor a
+ ld [hWY], a
+ ld a, $1
+ call Function91e1e
+ ret
+; 91dcd
+
+Function91dcd: ; 91dcd
+ ld a, [hVBlankCounter]
+ ld e, a
+ and $f
+ ret nz
+ ld a, e
+ and $10
+ jr nz, .asm_91ddc
+ call ClearSprites
+ ret
+
+.asm_91ddc
+ hlcoord 0, 0
+ ld de, Sprites
+ ld bc, $a0
+ call CopyBytes
+ ret
+; 91de9
+
+Function91de9: ; 91de9
+ hlcoord 0, 0
+ ld bc, SCREEN_WIDTH
+ ld a, $7f
+ call ByteFill
+ hlcoord 0, 1
+ ld a, $6
+ ld [hli], a
+ ld bc, SCREEN_HEIGHT
+ ld a, $7
+ call ByteFill
+ ld [hl], $17
+ call GetPokemonName
+ hlcoord 2, 0
+ call PlaceString
+ ld h, b
+ ld l, c
+ ld de, String_91e16
+ call PlaceString
+ ret
+; 91e16
+
+String_91e16:
+ db "'S NEST@"
+; 91e1e
+
+Function91e1e: ; 91e1e
+ ld [wd003], a
+ ld e, a
+ callba Function2a01f
+ decoord 0, 0
+ ld hl, Sprites
+.asm_91e2e
+ ld a, [de]
+ and a
+ jr z, .asm_91e4d
+ push de
+ ld e, a
+ push hl
+ callba GetLandmarkCoords
+ pop hl
+ ld a, d
+ sub $4
+ ld [hli], a
+ ld a, e
+ sub $4
+ ld [hli], a
+ ld a, $7f
+ ld [hli], a
+ xor a
+ ld [hli], a
+ pop de
+ inc de
+ jr .asm_91e2e
+
+.asm_91e4d
+ ld hl, Sprites
+ decoord 0, 0
+ ld bc, $a0
+ call CopyBytes
+ ret
+; 91e5a
+
+Function91e5a: ; 91e5a
+ call Function91ea9
+ ret c
+
+ ld a, [wd002]
+ ld e, a
+ callba GetLandmarkCoords
+ ld c, e
+ ld b, d
+ ld de, Unknown_91e9c
+ ld hl, Sprites
+.asm_91e70
+ ld a, [de]
+ cp $80
+ jr z, .asm_91e91
+
+ add b
+ ld [hli], a
+ inc de
+
+ ld a, [de]
+ add c
+ ld [hli], a
+ inc de
+
+ ld a, [de]
+ add $78
+ ld [hli], a
+ inc de
+
+ push bc
+ ld c, 0
+ ld a, [PlayerGender]
+ bit 0, a
+ jr z, .asm_91e8c
+ inc c
+.asm_91e8c
+ ld a, c
+ ld [hli], a
+ pop bc
+
+ jr .asm_91e70
+
+.asm_91e91
+ ld hl, Sprites + $10
+ ld bc, SpritesEnd - (Sprites + $10)
+ xor a
+ call ByteFill
+ ret
+; 91e9c
+
+Unknown_91e9c: ; 91e9c
+ db -8, -8, 0
+ db -8, 0, 1
+ db 0, -8, 2
+ db 0, 0, 3
+ db $80 ; terminator
+; 91ea9
+
+Function91ea9: ; 91ea9
+ ld a, [wd002]
+ cp FAST_SHIP
+ jr z, .johto
+ cp KANTO_LANDMARK
+ jr c, .johto
+
+.kanto
+ ld a, [wd003]
+ and a
+ jr z, .clear
+ jr .ok
+
+.johto
+ ld a, [wd003]
+ and a
+ jr nz, .clear
+
+.ok
+ and a
+ ret
+
+.clear
+ ld hl, Sprites
+ ld bc, SpritesEnd - Sprites
+ xor a
+ call ByteFill
+ scf
+ ret
+; 91ed0
+
+Function91ed0: ; 91ed0
+ ld a, [wd002]
+ cp FAST_SHIP
+ jr z, .asm_91ede
+ callba GetPlayerIcon
+ ret
+
+.asm_91ede
+ ld de, FastShipGFX
+ ld b, BANK(FastShipGFX)
+ ret
+; 91ee4
+
+TownMapBGUpdate: ; 91ee4
+; Update BG Map tiles and attributes
+
+; BG Map address
+ ld a, l
+ ld [hBGMapAddress], a
+ ld a, h
+ ld [hBGMapAddress + 1], a
+
+; Only update palettes on CGB
+ ld a, [hCGB]
+ and a
+ jr z, .tiles
+
+; BG Map mode 2 (palettes)
+ ld a, 2
+ ld [hBGMapMode], a
+
+; The BG Map is updated in thirds, so we wait
+; 3 frames to update the whole screen's palettes.
+ ld c, 3
+ call DelayFrames
+
+.tiles
+; Update BG Map tiles
+ call WaitBGMap
+
+; Turn off BG Map update
+ xor a
+ ld [hBGMapMode], a
+ ret
+; 91eff
+
+FillJohtoMap: ; 91eff
+ ld de, JohtoMap
+ jr FillTownMap
+
+FillKantoMap: ; 91f04
+ ld de, KantoMap
+
+FillTownMap: ; 91f07
+ hlcoord 0, 0
+.loop
+ ld a, [de]
+ cp $ff
+ ret z
+ ld a, [de]
+ ld [hli], a
+ inc de
+ jr .loop
+; 91f13
+
+TownMapPals: ; 91f13
+; Assign palettes based on tile ids
+
+ hlcoord 0, 0
+ decoord 0, 0, AttrMap
+ ld bc, 360
+.loop
+; Current tile
+ ld a, [hli]
+ push hl
+
+; HP/borders use palette 0
+ cp $60
+ jr nc, .pal0
+
+; The palette data is condensed to nybbles,
+; least-significant first.
+ ld hl, TownMapPalMap
+ srl a
+ jr c, .odd
+
+; Even-numbered tile ids take the bottom nybble...
+ add l
+ ld l, a
+ ld a, h
+ adc 0
+ ld h, a
+ ld a, [hl]
+ and %111
+ jr .update
+
+.odd
+; ...and odd ids take the top.
+ add l
+ ld l, a
+ ld a, h
+ adc 0
+ ld h, a
+ ld a, [hl]
+ swap a
+ and %111
+ jr .update
+
+.pal0
+ xor a
+
+.update
+ pop hl
+ ld [de], a
+ inc de
+ dec bc
+ ld a, b
+ or c
+ jr nz, .loop
+ ret
+
+TownMapPalMap:
+ db $11, $21, $22, $00, $11, $13, $54, $54, $11, $21, $22, $00
+ db $11, $10, $01, $00, $11, $21, $22, $00, $00, $00, $00, $00
+ db $00, $00, $44, $04, $00, $00, $00, $00, $33, $33, $33, $33
+ db $33, $33, $33, $03, $33, $33, $33, $33, $00, $00, $00, $00
+; 91f7b
+
+TownMapMon: ; 91f7b
+; Draw the FlyMon icon at town map location in
+
+; Get FlyMon species
+ ld a, [CurPartyMon]
+ ld hl, PartySpecies
+ ld e, a
+ ld d, $0
+ add hl, de
+ ld a, [hl]
+ ld [wd265], a
+
+; Get FlyMon icon
+ ld e, 8 ; starting tile in VRAM
+ callba GetSpeciesIcon
+
+; Animation/palette
+ ld de, 0
+ ld a, $0
+ call _InitSpriteAnimStruct
+
+ ld hl, 3
+ add hl, bc
+ ld [hl], 8
+ ld hl, 2
+ add hl, bc
+ ld [hl], 0
+ ret
+; 91fa6
+
+TownMapPlayerIcon: ; 91fa6
+; Draw the player icon at town map location in a
+ push af
+
+ callba GetPlayerIcon
+
+; Standing icon
+ ld hl, VTiles0 tile $10
+ ld c, 4 ; # tiles
+ call Request2bpp
+
+; Walking icon
+ ld hl, $c0
+ add hl, de
+ ld d, h
+ ld e, l
+ ld hl, VTiles0 tile $14
+ ld c, 4 ; # tiles
+ ld a, BANK(ChrisSpriteGFX) ; does nothing
+ call Request2bpp
+
+; Animation/palette
+ ld de, 0
+ ld b, $0a ; Male
+ ld a, [PlayerGender]
+ bit 0, a
+ jr z, .asm_91fd3
+ ld b, $1e ; Female
+.asm_91fd3
+ ld a, b
+ call _InitSpriteAnimStruct
+
+ ld hl, $3
+ add hl, bc
+ ld [hl], $10
+
+ pop af
+ ld e, a
+ push bc
+ callba GetLandmarkCoords
+ pop bc
+
+ ld hl, 4
+ add hl, bc
+ ld [hl], e
+ ld hl, 5
+ add hl, bc
+ ld [hl], d
+ ret
+; 0x91ff2
+
+Function91ff2: ; 91ff2
+ ld hl, TownMapGFX
+ ld de, VTiles2
+ lb bc, BANK(TownMapGFX), $30
+ call DecompressRequest2bpp
+ ret
+; 91fff
+
+
+JohtoMap: ; 91fff
+INCBIN "gfx/misc/johto.bin"
+; 92168
+
+KantoMap: ; 92168
+INCBIN "gfx/misc/kanto.bin"
+; 922d1
+
+
+GFX_922d1: ; 922d1
+INCBIN "gfx/unknown/0922d1.2bpp"
+GFX_922e1: ; 922e1
+INCBIN "gfx/unknown/0922e1.2bpp"
+GFX_92301: ; 92301
+INCBIN "gfx/unknown/092301.2bpp"
+Function92311: ; unreferenced
+ xor a
+ ld [wd002], a
+ call ClearBGPalettes
+ call ClearTileMap
+ call ClearSprites
+ ld hl, hInMenu
+ ld a, [hl]
+ push af
+ ld [hl], $1
+ xor a
+ ld [hBGMapMode], a
+ callba Function8cf53
+ call Function91ff2
+ ld de, GFX_922e1
+ ld hl, VTiles2 tile $30
+ lb bc, BANK(GFX_922e1), 6
+ call Request1bpp
+ call FillKantoMap
+ call TownMapBubble
+ call TownMapPals
+ hlbgcoord 0, 0, VBGMap1
+ call TownMapBGUpdate
+ call FillJohtoMap
+ call TownMapBubble
+ call TownMapPals
+ hlbgcoord 0, 0
+ call TownMapBGUpdate
+ call TownMapMon
+ ld a, c
+ ld [wd003], a
+ ld a, b
+ ld [wd004], a
+ ld b, SCGB_02
+ call GetSGBLayout
+ call SetPalettes
+.loop
+ call JoyTextDelay
+ ld hl, hJoyPressed
+ ld a, [hl]
+ and B_BUTTON
+ jr nz, .pressedB
+ ld a, [hl]
+ and A_BUTTON
+ jr nz, .pressedA
+ call Function923b8
+ call GetMapCursorCoordinates
+ callba Function8cf69
+ call DelayFrame
+ jr .loop
+
+.pressedB
+ ld a, -1
+ jr .asm_9239f
+
+.pressedA
+ ld a, [wd002]
+ ld l, a
+ ld h, 0
+ add hl, hl
+ ld de, Flypoints + 1
+ add hl, de
+ ld a, [hl]
+
+.asm_9239f
+ ld [wd002], a
+ pop af
+ ld [hInMenu], a
+ call ClearBGPalettes
+ ld a, $90
+ ld [hWY], a
+ xor a
+ ld [hBGMapAddress], a
+ ld a, VBGMap0 / $100
+ ld [hBGMapAddress + 1], a
+ ld a, [wd002]
+ ld e, a
+ ret
+; 923b8
+
+Function923b8: ; 923b8
+ ld hl, hJoyLast
+ ld a, [hl]
+ and D_DOWN | D_RIGHT
+ jr nz, .asm_923c6
+ ld a, [hl]
+ and D_UP | D_LEFT
+ jr nz, .asm_923d3
+ ret
+
+.asm_923c6
+ ld hl, wd002
+ ld a, [hl]
+ cp FLY_INDIGO
+ jr c, .asm_923d0
+ ld [hl], -1
+.asm_923d0
+ inc [hl]
+ jr .asm_923dd
+
+.asm_923d3
+ ld hl, wd002
+ ld a, [hl]
+ and a
+ jr nz, .asm_923dc
+ ld [hl], FLY_INDIGO + 1
+.asm_923dc
+ dec [hl]
+
+.asm_923dd
+ ld a, [wd002]
+ cp KANTO_FLYPOINT
+ jr c, .johto
+
+ call FillKantoMap
+ xor a
+ ld b, $9c
+ jr .asm_923f3
+
+.johto
+ call FillJohtoMap
+ ld a, $90
+ ld b, $98
+
+.asm_923f3
+ ld [hWY], a
+ ld a, b
+ ld [hBGMapAddress + 1], a
+ call TownMapBubble
+ call WaitBGMap
+ xor a
+ ld [hBGMapMode], a
+ ret
+; 92402
diff --git a/engine/predef.asm b/engine/predef.asm
index 6079b48a4..680a6b4a0 100644
--- a/engine/predef.asm
+++ b/engine/predef.asm
@@ -37,7 +37,7 @@ PredefPointers:: ; 856b
add_predef DrawPartyMenuHPBar
add_predef FillPP
add_predef TryAddMonToParty
- add_predef Functionda96
+ add_predef AddTempmonToParty
add_predef SentGetPkmnIntoFromBox
add_predef SentPkmnIntoBox
add_predef GiveEgg
@@ -46,7 +46,7 @@ PredefPointers:: ; 856b
add_predef CalcPkmnStatC
add_predef CanLearnTMHMMove
add_predef GetTMHMMove
- add_predef Function28eef ; $ 10
+ add_predef Predef_LinkTextbox ; $ 10
add_predef PrintMoveDesc
add_predef UpdatePlayerHUD
add_predef FillBox
@@ -58,9 +58,9 @@ PredefPointers:: ; 856b
add_predef GetMonFrontpic
add_predef LearnLevelMoves
add_predef FillMoves
- add_predef Function421e6
- add_predef Function28f63
- add_predef Function28f24
+ add_predef EvolveAfterBattle
+ add_predef TradeAnimationPlayer2
+ add_predef TradeAnimation
add_predef CopyPkmnToTempMon
add_predef ListMoves ; $20
add_predef PlaceNonFaintStatus
@@ -92,12 +92,12 @@ PredefPointers:: ; 856b
add_predef PartyMonItemName
add_predef GetFrontpic
add_predef GetBackpic
- add_predef Function5108b
+ add_predef FrontpicPredef
add_predef GetTrainerPic
add_predef DecompressPredef ; $40
add_predef CheckTypeMatchup
add_predef ConvertMon_1to2
- add_predef Functionfb877
+ add_predef NewPokedexEntry
add_predef AnimateMon_Slow_Normal
add_predef PlaceStatusString
add_predef LoadMonAnimation
diff --git a/engine/printer.asm b/engine/printer.asm
new file mode 100755
index 000000000..5330d6b3c
--- /dev/null
+++ b/engine/printer.asm
@@ -0,0 +1,1493 @@
+Function84000: ; 84000
+ ld hl, OverworldMap
+ lb bc, 4, 12
+ xor a
+ call Function842ab
+ xor a
+ ld [rSB], a
+ ld [rSC], a
+ ld [wc2d5], a
+ ld hl, wc2d4
+ set 0, [hl]
+ ld a, [GBPrinter]
+ ld [wcbfb], a
+ xor a
+ ld [wJumptableIndex], a
+ ret
+; 84022
+
+Function84022: ; 84022
+ ld a, [wJumptableIndex]
+ ld e, a
+ ld d, 0
+ ld hl, Jumptable_84031
+rept 2
+ add hl, de
+endr
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp [hl]
+; 84031
+
+
+Jumptable_84031: ; 84031 (21:4031)
+ dw Function84077
+ dw Function84143
+ dw Function84120
+ dw Function84099
+ dw Function84180
+ dw Function8412e
+ dw Function840c5
+ dw Function84180
+ dw Function84120
+ dw Function840de
+ dw Function84180
+ dw Function84120
+ dw Function841a1
+ dw Function84063
+ dw Function8406d
+ dw Function84120
+ dw Function84103
+ dw Function84071
+ dw Function841b0
+ dw Function841b3
+
+
+Function84059: ; 84059 (21:4059)
+ ld hl, wJumptableIndex
+ inc [hl]
+ ret
+
+Function8405e: ; 8405e (21:405e)
+ ld hl, wJumptableIndex
+ dec [hl]
+ ret
+
+Function84063: ; 84063 (21:4063)
+ xor a
+ ld [wca89], a
+ ld hl, wJumptableIndex
+ set 7, [hl]
+ ret
+
+Function8406d: ; 8406d (21:406d)
+ call Function84059
+ ret
+
+Function84071: ; 84071 (21:4071)
+ ld a, $1
+ ld [wJumptableIndex], a
+ ret
+
+Function84077: ; 84077 (21:4077)
+ call Function841fb
+ ld hl, Unknown_842b7
+ call Function841e2
+ xor a
+ ld [wca8e], a
+ ld [wca8f], a
+ ld a, [wcf65]
+ ld [wca81], a
+ call Function84059
+ call Function841c3
+ ld a, $1
+ ld [wcbf8], a
+ ret
+
+Function84099: ; 84099 (21:4099)
+ call Function841fb
+ ld hl, wca81
+ ld a, [hl]
+ and a
+ jr z, Function840c5
+ ld hl, Unknown_842c3
+ call Function841e2
+ call Function84260
+ ld a, $80
+ ld [wca8e], a
+ ld a, $2
+ ld [wca8f], a
+ call Function84219
+ call Function84059
+ call Function841c3
+ ld a, $2
+ ld [wcbf8], a
+ ret
+
+Function840c5: ; 840c5 (21:40c5)
+ ld a, $6
+ ld [wJumptableIndex], a
+ ld hl, Unknown_842c9
+ call Function841e2
+ xor a
+ ld [wca8e], a
+ ld [wca8f], a
+ call Function84059
+ call Function841c3
+ ret
+
+Function840de: ; 840de (21:40de)
+ call Function841fb
+ ld hl, Unknown_842bd
+ call Function841e2
+ call Function84249
+ ld a, $4
+ ld [wca8e], a
+ ld a, $0
+ ld [wca8f], a
+ call Function84219
+ call Function84059
+ call Function841c3
+ ld a, $3
+ ld [wcbf8], a
+ ret
+
+Function84103: ; 84103 (21:4103)
+ call Function841fb
+ ld hl, Unknown_842b7
+ call Function841e2
+ xor a
+ ld [wca8e], a
+ ld [wca8f], a
+ ld a, [wcf65]
+ ld [wca81], a
+ call Function84059
+ call Function841c3
+ ret
+
+Function84120: ; 84120 (21:4120)
+ ld hl, wca8b
+ inc [hl]
+ ld a, [hl]
+ cp $6
+ ret c
+ xor a
+ ld [hl], a
+ call Function84059
+ ret
+
+Function8412e: ; 8412e (21:412e)
+ ld hl, wca8b
+ inc [hl]
+ ld a, [hl]
+ cp $6
+ ret c
+ xor a
+ ld [hl], a
+ ld hl, wca81
+ dec [hl]
+ call Function8405e
+ call Function8405e
+ ret
+
+Function84143: ; 84143 (21:4143)
+ ld a, [wc2d5]
+ and a
+ ret nz
+ ld a, [wca88]
+ cp $ff
+ jr nz, .printer_connected
+ ld a, [wca89]
+ cp $ff
+ jr z, .printer_error
+
+.printer_connected
+ ld a, [wca88]
+ cp $81
+ jr nz, .printer_error
+ ld a, [wca89]
+ cp $0
+ jr nz, .printer_error
+ ld hl, wc2d4
+ set 1, [hl]
+ ld a, $5
+ ld [wca8a], a
+ call Function84059
+ ret
+
+.printer_error
+ ld a, $ff
+ ld [wca88], a
+ ld [wca89], a
+ ld a, $e
+ ld [wJumptableIndex], a
+ ret
+
+Function84180: ; 84180 (21:4180)
+ ld a, [wc2d5]
+ and a
+ ret nz
+ ld a, [wca89]
+ and $f0
+ jr nz, .asm_8419b
+ ld a, [wca89]
+ and $1
+ jr nz, .asm_84197
+ call Function84059
+ ret
+.asm_84197
+ call Function8405e
+ ret
+.asm_8419b
+ ld a, $12
+ ld [wJumptableIndex], a
+ ret
+
+Function841a1: ; 841a1 (21:41a1)
+ ld a, [wc2d5]
+ and a
+ ret nz
+ ld a, [wca89]
+ and $f3
+ ret nz
+ call Function84059
+ ret
+
+Function841b0: ; 841b0 (21:41b0)
+ call Function84059
+
+Function841b3: ; 841b3 (21:41b3)
+ ld a, [wc2d5]
+ and a
+ ret nz
+ ld a, [wca89]
+ and $f0
+ ret nz
+ xor a
+ ld [wJumptableIndex], a
+ ret
+
+Function841c3: ; 841c3 (21:41c3)
+ ld a, [wc2d5]
+ and a
+ jr nz, Function841c3
+ xor a
+ ld [wca8c], a
+ ld [wca8d], a
+ ld a, $1
+ ld [wc2d5], a
+ ld a, $88
+ ld [rSB], a
+ ld a, $1
+ ld [rSC], a
+ ld a, $81
+ ld [rSC], a
+ ret
+
+Function841e2: ; 841e2 (21:41e2)
+ ld a, [hli]
+ ld [wca82], a
+ ld a, [hli]
+ ld [wca83], a
+ ld a, [hli]
+ ld [wca84], a
+ ld a, [hli]
+ ld [wca85], a
+ ld a, [hli]
+ ld [wca86], a
+ ld a, [hl]
+ ld [wca87], a
+ ret
+
+Function841fb: ; 841fb (21:41fb)
+ xor a
+ ld hl, wca82
+rept 3
+ ld [hli], a
+endr
+ ld [hl], a
+ ld hl, wca86
+ ld [hli], a
+ ld [hl], a
+ xor a
+ ld [wca8e], a
+ ld [wca8f], a
+ ld hl, OverworldMap
+ ld bc, $280
+ call Function842ab
+ ret
+
+Function84219: ; 84219 (21:4219)
+ ld hl, 0
+ ld bc, $4
+ ld de, wca82
+ call Function8423c
+ ld a, [wca8e]
+ ld c, a
+ ld a, [wca8f]
+ ld b, a
+ ld de, OverworldMap
+ call Function8423c
+ ld a, l
+ ld [wca86], a
+ ld a, h
+ ld [wca87], a
+ ret
+
+Function8423c: ; 8423c (21:423c)
+ ld a, [de]
+ inc de
+ add l
+ jr nc, .asm_84242
+ inc h
+.asm_84242
+ ld l, a
+ dec bc
+ ld a, c
+ or b
+ jr nz, Function8423c
+ ret
+
+Function84249: ; 84249 (21:4249)
+ ld a, $1
+ ld [OverworldMap], a
+ ld a, [wcbfa]
+ ld [wc801], a
+ ld a, $e4
+ ld [wc802], a
+ ld a, [wcbfb]
+ ld [wc803], a
+ ret
+
+Function84260: ; 84260 (21:4260)
+ ld a, [wca81]
+ xor $ff
+ ld d, a
+ ld a, [wcf65]
+ inc a
+ add d
+ ld hl, wca90
+ ld de, $28
+.asm_84271
+ and a
+ jr z, .asm_84278
+ add hl, de
+ dec a
+ jr .asm_84271
+.asm_84278
+ ld e, l
+ ld d, h
+ ld hl, OverworldMap
+ ld c, $28
+.asm_8427f
+ ld a, [de]
+ inc de
+ push bc
+ push de
+ push hl
+ swap a
+ ld d, a
+ and $f0
+ ld e, a
+ ld a, d
+ and $f
+ ld d, a
+ and $8
+ ld a, d
+ jr nz, .asm_84297
+ or $90
+ jr .asm_84299
+.asm_84297
+ or $80
+.asm_84299
+ ld d, a
+ lb bc, $21, 1
+ call Request2bpp
+ pop hl
+ ld de, $10
+ add hl, de
+ pop de
+ pop bc
+ dec c
+ jr nz, .asm_8427f
+ ret
+
+Function842ab: ; 842ab
+ push de
+ ld e, a
+.asm_842ad
+ ld [hl], e
+ inc hl
+ dec bc
+ ld a, c
+ or b
+ jr nz, .asm_842ad
+ ld a, e
+ pop de
+ ret
+; 842b7
+
+Unknown_842b7: db 1, 0, $00, 0, 1, 0
+Unknown_842bd: db 2, 0, $04, 0, 0, 0
+Unknown_842c3: db 4, 0, $80, 2, 0, 0
+Unknown_842c9: db 4, 0, $00, 0, 4, 0
+Unknown_842cf: db 8, 0, $00, 0, 8, 0 ; unused
+Unknown_842d5: db 15, 0, $00, 0, 15, 0 ; unused
+; 842db
+
+
+Function842db:: ; 842db
+ ld a, [wc2d5]
+ add a
+ ld e, a
+ ld d, 0
+ ld hl, Jumptable_842ea
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp [hl]
+; 842ea
+
+
+Jumptable_842ea: ; 842ea (21:42ea)
+ dw Function8432f
+ dw Function84330
+ dw Function84339
+ dw Function84343
+ dw Function8434d
+ dw Function84357
+ dw Function84361
+ dw Function8438b
+ dw Function84395
+ dw Function8439f
+ dw Function843a8
+ dw Function843b6
+ dw Function84330
+ dw Function843c0
+ dw Function843c9
+ dw Function843c9
+ dw Function843c9
+ dw Function843c0
+ dw Function843c9
+ dw Function8439f
+ dw Function843a8
+ dw Function843e6
+ dw Function84330
+ dw Function843d2
+ dw Function843c9
+ dw Function843c9
+ dw Function843c9
+ dw Function843d2
+ dw Function843c9
+ dw Function8439f
+ dw Function843a8
+ dw Function843b6
+
+
+Function8432a: ; 8432a (21:432a)
+ ld hl, wc2d5
+ inc [hl]
+ ret
+
+Function8432f: ; 8432f (21:432f)
+ ret
+
+Function84330: ; 84330 (21:4330)
+ ld a, $33
+ call Function843db
+ call Function8432a
+ ret
+
+Function84339: ; 84339 (21:4339)
+ ld a, [wca82]
+ call Function843db
+ call Function8432a
+ ret
+
+Function84343: ; 84343 (21:4343)
+ ld a, [wca83]
+ call Function843db
+ call Function8432a
+ ret
+
+Function8434d: ; 8434d (21:434d)
+ ld a, [wca84]
+ call Function843db
+ call Function8432a
+ ret
+
+Function84357: ; 84357 (21:4357)
+ ld a, [wca85]
+ call Function843db
+ call Function8432a
+ ret
+
+Function84361: ; 84361 (21:4361)
+ ld hl, wca8e
+ ld a, [hli]
+ ld d, [hl]
+ ld e, a
+ or d
+ jr z, .asm_84388
+ dec de
+ ld [hl], d
+ dec hl
+ ld [hl], e
+ ld a, [wca8c]
+ ld e, a
+ ld a, [wca8d]
+ ld d, a
+ ld hl, OverworldMap
+ add hl, de
+ inc de
+ ld a, e
+ ld [wca8c], a
+ ld a, d
+ ld [wca8d], a
+ ld a, [hl]
+ call Function843db
+ ret
+.asm_84388
+ call Function8432a
+
+Function8438b: ; 8438b (21:438b)
+ ld a, [wca86]
+ call Function843db
+ call Function8432a
+ ret
+
+Function84395: ; 84395 (21:4395)
+ ld a, [wca87]
+ call Function843db
+ call Function8432a
+ ret
+
+Function8439f: ; 8439f (21:439f)
+ ld a, $0
+ call Function843db
+ call Function8432a
+ ret
+
+Function843a8: ; 843a8 (21:43a8)
+ ld a, [rSB]
+ ld [wca88], a
+ ld a, $0
+ call Function843db
+ call Function8432a
+ ret
+
+Function843b6: ; 843b6 (21:43b6)
+ ld a, [rSB]
+ ld [wca89], a
+ xor a
+ ld [wc2d5], a
+ ret
+
+Function843c0: ; 843c0 (21:43c0)
+ ld a, $f
+ call Function843db
+ call Function8432a
+ ret
+
+Function843c9: ; 843c9 (21:43c9)
+ ld a, $0
+ call Function843db
+ call Function8432a
+ ret
+
+Function843d2: ; 843d2 (21:43d2)
+ ld a, $8
+ call Function843db
+ call Function8432a
+ ret
+
+Function843db: ; 843db (21:43db)
+ ld [rSB], a
+ ld a, $1
+ ld [rSC], a
+ ld a, $81
+ ld [rSC], a
+ ret
+
+Function843e6: ; 843e6 (21:43e6)
+ ld a, [rSB]
+ ld [wca89], a
+ xor a
+ ld [wc2d5], a
+ ret
+
+Function843f0: ; 843f0
+.asm_843f0
+ call JoyTextDelay
+ call Function846f6
+ jr c, .asm_8440f
+ ld a, [wJumptableIndex]
+ bit 7, a
+ jr nz, .asm_8440d
+ call Function84022
+ call Function84757
+ call Function84785
+ call DelayFrame
+ jr .asm_843f0
+
+.asm_8440d
+ and a
+ ret
+
+.asm_8440f
+ scf
+ ret
+; 84411
+
+Function84411: ; 84411
+ xor a
+ ld [wc2d4], a
+ ld [wc2d5], a
+ ret
+; 84419
+
+Function84419: ; 84419
+ push af
+ call Function84000
+ pop af
+ ld [wcbfa], a
+ call Function84728
+ ret
+; 84425
+
+Function84425: ; 84425
+ call ReturnToMapFromSubmenu
+ call Function84753
+ ret
+; 8442c
+
+PrintDexEntry: ; 8442c
+ ld a, [wcf65]
+ push af
+ ld hl, VTiles1
+ ld de, FontInversed
+ lb bc, BANK(FontInversed), $80
+ call Request1bpp
+ xor a
+ ld [hPrinter], a
+ call Function8474c
+ ld a, [rIE]
+ push af
+ xor a
+ ld [rIF], a
+ ld a, $9
+ ld [rIE], a
+ call Function84000
+ ld a, $10
+ ld [wcbfa], a
+ callba Function1dc1b0
+ call ClearTileMap
+ ld a, $e4
+ call DmgToCgbBGPals
+ call DelayFrame
+ ld hl, hVBlank
+ ld a, [hl]
+ push af
+ ld [hl], $4
+ ld a, $8
+ ld [wcf65], a
+ call Function84742
+ call Function843f0
+ jr c, .asm_8449d
+ call Function84411
+ ld c, 12
+ call DelayFrames
+ xor a
+ ld [hBGMapMode], a
+ call Function84000
+ ld a, $3
+ ld [wcbfa], a
+ callba Function1dc213
+ call Function84742
+ ld a, $4
+ ld [wcf65], a
+ call Function843f0
+
+.asm_8449d
+ pop af
+ ld [hVBlank], a
+ call Function84411
+ xor a
+ ld [rIF], a
+ pop af
+ ld [rIE], a
+ call Function84425
+ ld c, $8
+.asm_844ae
+ call LowVolume
+ call DelayFrame
+ dec c
+ jr nz, .asm_844ae
+ pop af
+ ld [wcf65], a
+ ret
+; 844bc
+
+PrintPCBox: ; 844bc (21:44bc)
+ ld a, [wcf65]
+ push af
+ ld a, $9
+ ld [wcf65], a
+ ld a, e
+ ld [wd004], a
+ ld a, d
+ ld [wd005], a
+ ld a, b
+ ld [wd006], a
+ ld a, c
+ ld [wd007], a
+ xor a
+ ld [hPrinter], a
+ ld [wd003], a
+ call Function8474c
+ ld a, [rIE]
+ push af
+ xor a
+ ld [rIF], a
+ ld a, $9
+ ld [rIE], a
+ ld hl, hVBlank
+ ld a, [hl]
+ push af
+ ld [hl], $4
+ xor a
+ ld [hBGMapMode], a
+ call Function84817
+ ld a, $10
+ call Function84419
+ call Function84559
+ jr c, .asm_84545
+ call Function84411
+ ld c, 12
+ call DelayFrames
+ xor a
+ ld [hBGMapMode], a
+ call Function8486f
+ ld a, $0
+ call Function84419
+ call Function84559
+ jr c, .asm_84545
+ call Function84411
+ ld c, 12
+ call DelayFrames
+ xor a
+ ld [hBGMapMode], a
+ call Function84893
+ ld a, $0
+ call Function84419
+ call Function84559
+ jr c, .asm_84545
+ call Function84411
+ ld c, 12
+ call DelayFrames
+ xor a
+ ld [hBGMapMode], a
+ call Function848b7
+ ld a, $3
+ call Function84419
+ call Function84559
+.asm_84545
+ pop af
+ ld [hVBlank], a
+ call Function84411
+ xor a
+ ld [rIF], a
+ pop af
+ ld [rIE], a
+ call Function84425
+ pop af
+ ld [wcf65], a
+ ret
+
+Function84559: ; 84559 (21:4559)
+ call Function84742
+ call Function843f0
+ ret
+
+PrintUnownStamp: ; 84560
+ ld a, [wcf65]
+ push af
+ xor a
+ ld [hPrinter], a
+ call Function8474c
+ ld a, [rIE]
+ push af
+ xor a
+ ld [rIF], a
+ ld a, $9
+ ld [rIE], a
+ ld hl, hVBlank
+ ld a, [hl]
+ push af
+ ld [hl], $4
+ xor a
+ ld [hBGMapMode], a
+ call LoadTileMapToTempTileMap
+ callba Function16dac
+ ld a, $0
+ call Function84419
+ call Call_LoadTempTileMapToTileMap
+ call Function84742
+ ld a, $9
+ ld [wcf65], a
+.asm_84597
+ call JoyTextDelay
+ call Function846f6
+ jr c, .asm_845c0
+ ld a, [wJumptableIndex]
+ bit 7, a
+ jr nz, .asm_845c0
+ call Function84022
+ ld a, [wJumptableIndex]
+ cp $2
+ jr nc, .asm_845b5
+ ld a, $3
+ ld [wca81], a
+
+.asm_845b5
+ call Function84757
+ call Function84785
+ call DelayFrame
+ jr .asm_84597
+
+.asm_845c0
+ pop af
+ ld [hVBlank], a
+ call Function84411
+ call Call_LoadTempTileMapToTileMap
+ xor a
+ ld [rIF], a
+ pop af
+ ld [rIE], a
+ pop af
+ ld [wcf65], a
+ ret
+; 845d4
+
+PrintMail: ; 845d4
+ call Function845db
+ call Function84425
+ ret
+; 845db
+
+Function845db: ; 845db
+ ld a, [wcf65]
+ push af
+ xor a
+ ld [hPrinter], a
+ call Function8474c
+ ld a, [rIE]
+ push af
+ xor a
+ ld [rIF], a
+ ld a, $9
+ ld [rIE], a
+ xor a
+ ld [hBGMapMode], a
+ ld a, $13
+ call Function84419
+ ld hl, hVBlank
+ ld a, [hl]
+ push af
+ ld [hl], $4
+ ld a, $9
+ ld [wcf65], a
+ call Function843f0
+ pop af
+ ld [hVBlank], a
+ call Function84411
+ call Function84735
+ xor a
+ ld [rIF], a
+ pop af
+ ld [rIE], a
+ pop af
+ ld [wcf65], a
+ ret
+; 8461a
+
+PrintPartymon: ; 8461a
+ ld a, [wcf65]
+ push af
+ xor a
+ ld [hPrinter], a
+ call Function8474c
+ ld a, [rIE]
+ push af
+ xor a
+ ld [rIF], a
+ ld a, $9
+ ld [rIE], a
+ xor a
+ ld [hBGMapMode], a
+ callba Function1dc381
+ ld a, $10
+ call Function84419
+ ld hl, hVBlank
+ ld a, [hl]
+ push af
+ ld [hl], $4
+ ld a, $8
+ ld [wcf65], a
+ call Function84742
+ call Function843f0
+ jr c, .asm_84671
+ call Function84411
+ ld c, 12
+ call DelayFrames
+ xor a
+ ld [hBGMapMode], a
+ callba Function1dc47b
+ ld a, $3
+ call Function84419
+ ld a, $9
+ ld [wcf65], a
+ call Function84742
+ call Function843f0
+
+.asm_84671
+ pop af
+ ld [hVBlank], a
+ call Function84411
+ call Function84735
+ xor a
+ ld [rIF], a
+ pop af
+ ld [rIE], a
+ call Function84425
+ pop af
+ ld [wcf65], a
+ ret
+; 84688
+
+_PrintDiploma: ; 84688
+ ld a, [wcf65]
+ push af
+ callba Function1dd709
+ xor a
+ ld [hPrinter], a
+ call Function8474c
+ ld a, [rIE]
+ push af
+ xor a
+ ld [rIF], a
+ ld a, $9
+ ld [rIE], a
+ ld hl, hVBlank
+ ld a, [hl]
+ push af
+ ld [hl], $4
+ ld a, $10
+ call Function84419
+ call Function84742
+ ld a, $9
+ ld [wcf65], a
+ call Function843f0
+ jr c, .asm_846e2
+ call Function84411
+ ld c, 12
+ call DelayFrames
+ call LoadTileMapToTempTileMap
+ xor a
+ ld [hBGMapMode], a
+ callba Function1dd7ae
+ ld a, $3
+ call Function84419
+ call Call_LoadTempTileMapToTileMap
+ call Function84742
+ ld a, $9
+ ld [wcf65], a
+ call Function843f0
+
+.asm_846e2
+ pop af
+ ld [hVBlank], a
+ call Function84411
+ xor a
+ ld [rIF], a
+ pop af
+ ld [rIE], a
+ call Function84425
+ pop af
+ ld [wcf65], a
+ ret
+; 846f6
+
+Function846f6: ; 846f6
+ ld a, [hJoyDown]
+ and B_BUTTON
+ jr nz, .asm_846fe
+ and a
+ ret
+
+.asm_846fe
+ ld a, [wca80]
+ cp $c
+ jr nz, .asm_84722
+.asm_84705
+ ld a, [wc2d5]
+ and a
+ jr nz, .asm_84705
+ ld a, $16
+ ld [wc2d5], a
+ ld a, $88
+ ld [rSB], a
+ ld a, $1
+ ld [rSC], a
+ ld a, $81
+ ld [rSC], a
+.asm_8471c
+ ld a, [wc2d5]
+ and a
+ jr nz, .asm_8471c
+
+.asm_84722
+ ld a, $1
+ ld [hPrinter], a
+ scf
+ ret
+; 84728
+
+Function84728: ; 84728
+ hlcoord 0, 0
+ ld de, wca90
+ ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+ call CopyBytes
+ ret
+; 84735
+
+Function84735: ; 84735
+ ld hl, wca90
+ decoord 0, 0
+ ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+ call CopyBytes
+ ret
+; 84742
+
+Function84742: ; 84742
+ xor a
+ ld [hJoyReleased], a
+ ld [hJoyPressed], a
+ ld [hJoyDown], a
+ ld [hJoyLast], a
+ ret
+; 8474c
+
+Function8474c: ; 8474c
+ ld de, MUSIC_PRINTER
+ call PlayMusic2
+ ret
+; 84753
+
+Function84753: ; 84753
+ call RestartMapMusic
+ ret
+; 84757
+
+Function84757: ; 84757
+ ld a, [wca88]
+ cp -1
+ jr nz, .printer_connected
+ ld a, [wca89]
+ cp -1
+ jr z, .error_2
+
+.printer_connected
+ ld a, [wca89]
+ and %11100000
+ ret z ; no error
+
+ bit 7, a
+ jr nz, .error_1
+ bit 6, a
+ jr nz, .error_4
+ ld a, 6 ; error 3
+ jr .load_text_index
+
+.error_4
+ ld a, 7 ; error 4
+ jr .load_text_index
+
+.error_1
+ ld a, 4 ; error 1
+ jr .load_text_index
+
+.error_2
+ ld a, 5 ; error 2
+
+.load_text_index
+ ld [wcbf8], a
+ ret
+; 84785
+
+Function84785: ; 84785
+ ld a, [wcbf8]
+ and a
+ ret z
+ push af
+ xor a
+ ld [hBGMapMode], a
+ hlcoord 0, 5
+ lb bc, 10, 18
+ call TextBox
+ pop af
+ ld e, a
+ ld d, 0
+ ld hl, PrinterStatusStringPointers
+rept 2
+ add hl, de
+endr
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ hlcoord 1, 7
+ ld a, BANK(GBPrinterStrings)
+ call FarString
+ hlcoord 2, 15
+ ld de, String_PressBToCancel
+ call PlaceString
+ ld a, $1
+ ld [hBGMapMode], a
+ xor a
+ ld [wcbf8], a
+ ret
+; 847bd
+
+Function847bd: ; 847bd
+ ld a, [wcbf8]
+ and a
+ ret z
+ push af
+ xor a
+ ld [hBGMapMode], a
+ hlcoord 2, 4
+ lb bc, 13, 16
+ call ClearBox
+ pop af
+ ld e, a
+ ld d, 0
+ ld hl, PrinterStatusStringPointers
+rept 2
+ add hl, de
+endr
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ hlcoord 4, 7
+ ld a, BANK(GBPrinterStrings)
+ call FarString
+ hlcoord 4, 15
+ ld de, String_PressBToCancel
+ call PlaceString
+ ld a, $1
+ ld [hBGMapMode], a
+ xor a
+ ld [wcbf8], a
+ ret
+; 847f5
+
+String_PressBToCancel:
+ db "Press B to Cancel@"
+; 84807
+
+PrinterStatusStringPointers: ; 84807
+ dw String_1dc275 ; @
+ dw String_1dc276 ; CHECKING LINK
+ dw String_1dc289 ; TRANSMITTING
+ dw String_1dc29c ; PRINTING
+ dw String_1dc2ad ; error 1
+ dw String_1dc2e2 ; error 2
+ dw String_1dc317 ; error 3
+ dw String_1dc34c ; error 4
+; 84817
+
+Function84817: ; 84817 (21:4817)
+ xor a
+ ld [wd002], a
+ hlcoord 0, 0
+ ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
+ ld a, " "
+ call ByteFill
+ call Printer_PlaceEmptyBoxSlotString
+ hlcoord 0, 0
+ ld bc, 9 * SCREEN_WIDTH
+ ld a, " "
+ call ByteFill
+ call Printer_PlaceSideBorders
+ call Printer_PlaceTopBorder
+ hlcoord 4, 3
+ ld de, .String_PokemonList
+ call PlaceString
+ ld a, [wd007]
+ ld bc, BOX_NAME_LENGTH
+ ld hl, wBoxNames
+ call AddNTimes
+ ld d, h
+ ld e, l
+ hlcoord 6, 5
+ call PlaceString
+ ld a, $1
+ call Function849c6
+ hlcoord 2, 9
+ ld c, $3
+ call Function848e7
+ ret
+; 84865 (21:4865)
+
+.String_PokemonList:
+ db "#MON LIST@"
+; 8486f
+
+Function8486f: ; 8486f (21:486f)
+ hlcoord 0, 0
+ ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
+ ld a, " "
+ call ByteFill
+ call Printer_PlaceEmptyBoxSlotString
+ call Printer_PlaceSideBorders
+ ld a, [wd003]
+ and a
+ ret nz
+ ld a, $4
+ call Function849c6
+ hlcoord 2, 0
+ ld c, $6
+ call Function848e7
+ ret
+
+Function84893: ; 84893 (21:4893)
+ hlcoord 0, 0
+ ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
+ ld a, " "
+ call ByteFill
+ call Printer_PlaceEmptyBoxSlotString
+ call Printer_PlaceSideBorders
+ ld a, [wd003]
+ and a
+ ret nz
+ ld a, $a
+ call Function849c6
+ hlcoord 2, 0
+ ld c, $6
+ call Function848e7
+ ret
+
+Function848b7: ; 848b7 (21:48b7)
+ hlcoord 0, 0
+ ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
+ ld a, " "
+ call ByteFill
+ call Printer_PlaceEmptyBoxSlotString
+ hlcoord 1, 15
+ lb bc, 2, 18
+ call ClearBox
+ call Printer_PlaceSideBorders
+ call Printer_PlaceBottomBorders
+ ld a, [wd003]
+ and a
+ ret nz
+ ld a, $10
+ call Function849c6
+ hlcoord 2, 0
+ ld c, $5
+ call Function848e7
+ ret
+
+Function848e7: ; 848e7 (21:48e7)
+ ld a, [wd006]
+ call GetSRAMBank
+
+Function848ed: ; 848ed (21:48ed)
+ ld a, c
+ and a
+ jp z, Function84986
+ dec c
+ ld a, [de]
+ cp $ff
+ jp z, Function84981
+ ld [wd265], a
+ ld [CurPartySpecies], a
+ push bc
+ push hl
+ push de
+ push hl
+ ld bc, $10
+ ld a, " "
+ call ByteFill
+ pop hl
+ push hl
+ call GetBasePokemonName
+ pop hl
+ push hl
+ call PlaceString
+ ld a, [CurPartySpecies]
+ cp EGG
+ pop hl
+ jr z, .ok2
+ ld bc, $b
+ add hl, bc
+ call Function8498a
+ ld bc, $9
+ add hl, bc
+ ld a, "/"
+ ld [hli], a
+ push hl
+ ld bc, $e
+ ld a, " "
+ call ByteFill
+ pop hl
+ push hl
+ ld a, [wd004]
+ ld l, a
+ ld a, [wd005]
+ ld h, a
+ ld bc, $372
+ add hl, bc
+ ld bc, $b
+ ld a, [wd002]
+ call AddNTimes
+ ld e, l
+ ld d, h
+ pop hl
+ push hl
+ call PlaceString
+ pop hl
+ ld bc, $b
+ add hl, bc
+ push hl
+ ld a, [wd004]
+ ld l, a
+ ld a, [wd005]
+ ld h, a
+ ld bc, $35
+ add hl, bc
+ ld bc, $20
+ ld a, [wd002]
+ call AddNTimes
+ ld a, [hl]
+ pop hl
+ call Function383d
+.ok2
+ ld hl, wd002
+ inc [hl]
+ pop de
+ pop hl
+ ld bc, $3c
+ add hl, bc
+ pop bc
+ inc de
+ jp Function848ed
+
+Function84981: ; 84981 (21:4981)
+ ld a, $1
+ ld [wd003], a
+
+Function84986: ; 84986 (21:4986)
+ call CloseSRAM
+ ret
+
+Function8498a: ; 8498a (21:498a)
+ push hl
+ ld a, [wd004]
+ ld l, a
+ ld a, [wd005]
+ ld h, a
+ ld bc, $2b
+ add hl, bc
+ ld bc, $20
+ ld a, [wd002]
+ call AddNTimes
+ ld de, TempMonDVs
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hli]
+ ld [de], a
+ ld a, [wd002]
+ ld [CurPartyMon], a
+ ld a, $3
+ ld [MonType], a
+ callba GetGender
+ ld a, $7f
+ jr c, .asm_849c3
+ ld a, $ef
+ jr nz, .asm_849c3
+ ld a, $f5
+.asm_849c3
+ pop hl
+ ld [hli], a
+ ret
+
+Function849c6: ; 849c6 (21:49c6)
+ push hl
+ ld e, a
+ ld d, $0
+ ld a, [wd004]
+ ld l, a
+ ld a, [wd005]
+ ld h, a
+ add hl, de
+ ld e, l
+ ld d, h
+ pop hl
+ ret
+
+Printer_PlaceTopBorder: ; 849d7 (21:49d7)
+ hlcoord 0, 0
+ ld a, "┌"
+ ld [hli], a
+ ld a, "─"
+ ld c, SCREEN_WIDTH - 2
+.loop
+ ld [hli], a
+ dec c
+ jr nz, .loop
+ ld a, "┐"
+ ld [hl], a
+ ret
+
+Printer_PlaceSideBorders: ; 849e9 (21:49e9)
+ hlcoord 0, 0
+ ld de, SCREEN_WIDTH - 1
+ ld c, SCREEN_HEIGHT
+.loop
+ ld a, "│"
+ ld [hl], a
+ add hl, de
+ ld a, "│"
+ ld [hli], a
+ dec c
+ jr nz, .loop
+ ret
+
+Printer_PlaceBottomBorders: ; 849fc (21:49fc)
+ hlcoord 0, 17
+ ld a, "└"
+ ld [hli], a
+ ld a, "─"
+ ld c, SCREEN_WIDTH - 2
+.loop
+ ld [hli], a
+ dec c
+ jr nz, .loop
+ ld a, "┘"
+ ld [hl], a
+ ret
+
+Printer_PlaceEmptyBoxSlotString: ; 84a0e (21:4a0e)
+ hlcoord 2, 0
+ ld c, $6
+.loop
+ push bc
+ push hl
+ ld de, String84a25
+ call PlaceString
+ pop hl
+ ld bc, 3 * SCREEN_WIDTH
+ add hl, bc
+ pop bc
+ dec c
+ jr nz, .loop
+ ret
+; 84a25 (21:4a25)
+
+String84a25: ; 84a25
+ db " ------@"
+; 84a2e
diff --git a/engine/radio2.asm b/engine/radio2.asm
deleted file mode 100644
index 1d07c904c..000000000
--- a/engine/radio2.asm
+++ /dev/null
@@ -1,404 +0,0 @@
-_UpdateRadioStation: ; 9163e (24:563e)
- jr UpdateRadioStation
-
-Function91640: ; 91640 (24:5640)
- push bc
- call .TuningKnob
- pop bc
- ld a, [wRadioTuningKnob]
- ld hl, $6
- add hl, bc
- ld [hl], a
- ret
-
-.TuningKnob: ; 9164e (24:564e)
- ld hl, hJoyLast
- ld a, [hl]
- and D_DOWN
- jr nz, .down
- ld a, [hl]
- and D_UP
- jr nz, .up
- ret
-
-.down
- ld hl, wRadioTuningKnob
- ld a, [hl]
- and a
- ret z
-rept 2
- dec [hl]
-endr
- jr .update
-
-.up
- ld hl, wRadioTuningKnob
- ld a, [hl]
- cp 80
- ret nc
-rept 2
- inc [hl]
-endr
-
-.update
-
-UpdateRadioStation: ; 9166f (24:566f)
- ld hl, wRadioTuningKnob
- ld d, [hl]
- ld hl, RadioChannels
-.loop
- ld a, [hli]
- cp -1
- jr z, .nostation
- cp d
- jr z, .foundstation
-rept 2
- inc hl
-endr
- jr .loop
-
-.nostation
- call NoRadioStation
- ret
-
-.foundstation
- ld a, [hli]
- ld h, [hl]
- ld l, a
- ld de, .returnafterstation
- push de
- jp [hl]
-.returnafterstation
- ld a, [wc6d9]
- and a
- ret z
- xor a
- ld [hBGMapMode], a
- hlcoord 2, 9
- call PlaceString
- ld a, $1
- ld [hBGMapMode], a
- ret
-; 916a1 (24:56a1)
-
-Function916a1: ; 916a1
- ld [wc6d9], a
- ld a, [hli]
- ld [wc6da], a
- ld a, [hli]
- ld [wc6db], a
- ret
-; 916ad
-
-
-RadioChannels:
-; frequencies and the shows that play on them.
-; frequency value given here = 4 × ingame_frequency − 2
- dbw 16, .PkmnTalkAndPokedexShow
- dbw 28, .PokemonMusic
- dbw 32, .LuckyChannel
- dbw 40, .BuenasPassword
- dbw 52, .RuinsOfAlphRadio
- dbw 64, .PlacesAndPeople
- dbw 72, .LetsAllSing
- dbw 78, .PokeFluteRadio
- dbw 80, .EvolutionRadio
- db $ff
-
-.PkmnTalkAndPokedexShow
-; Pokédex Show in the morning
-; Oak's Pokémon Talk in the afternoon and evening
- call .InJohto
- jr nc, .NoSignal
- ld a, [TimeOfDay]
- and a
- jp z, LoadStation_PokedexShow
- jp LoadStation_OaksPokemonTalk
-
-.PokemonMusic
- call .InJohto
- jr nc, .NoSignal
- jp LoadStation_PokemonMusic
-
-.LuckyChannel
- call .InJohto
- jr nc, .NoSignal
- jp LoadStation_LuckyChannel
-
-.BuenasPassword
- call .InJohto
- jr nc, .NoSignal
- jp LoadStation_BuenasPassword
-
-.RuinsOfAlphRadio
- ld a, [wc6d8]
- cp RUINS_OF_ALPH
- jr nz, .NoSignal
- jp LoadStation_UnownRadio
-
-.PlacesAndPeople
- call .InJohto
- jr c, .NoSignal
- ld a, [wPokegearFlags]
- bit 3, a
- jr z, .NoSignal
- jp LoadStation_PlacesAndPeople
-
-.LetsAllSing
- call .InJohto
- jr c, .NoSignal
- ld a, [wPokegearFlags]
- bit 3, a
- jr z, .NoSignal
- jp LoadStation_LetsAllSing
-
-.PokeFluteRadio
- call .InJohto
- jr c, .NoSignal
- ld a, [wPokegearFlags]
- bit 3, a
- jr z, .NoSignal
- jp LoadStation_PokeFluteRadio
-
-.EvolutionRadio
-; This station airs in the Lake of Rage area when Rocket are still in Mahogany.
-
- ld a, [StatusFlags]
- bit 4, a
- jr z, .NoSignal
-
- ld a, [wc6d8]
- cp MAHOGANY_TOWN
- jr z, .ok
- cp ROUTE_43
- jr z, .ok
- cp LAKE_OF_RAGE
- jr nz, .NoSignal
-.ok
- jp LoadStation_EvolutionRadio
-
-.NoSignal
- call NoRadioStation
- ret
-
-.InJohto
-; if in Johto or on the S.S. Aqua, set carry
-; otherwise clear carry
- ld a, [wc6d8]
- cp FAST_SHIP
- jr z, .johto
- cp KANTO_LANDMARK
- jr c, .johto
-.kanto
- and a
- ret
-.johto
- scf
- ret
-
-
-
-LoadStation_OaksPokemonTalk: ; 91753 (24:5753)
- xor a ; OAKS_POKEMON_TALK
- ld [wd002], a
- ld [wd005], a
- ld a, BANK(PlayRadioShow)
- ld hl, PlayRadioShow
- call Radio_BackUpFarCallParams
- ld de, OaksPkmnTalkName
- ret
-
-LoadStation_PokedexShow: ; 91766 (24:5766)
- ld a, POKEDEX_SHOW
- ld [wd002], a
- xor a
- ld [wd005], a
- ld a, BANK(PlayRadioShow)
- ld hl, PlayRadioShow
- call Radio_BackUpFarCallParams
- ld de, PokedexShowName
- ret
-
-LoadStation_PokemonMusic: ; 9177b (24:577b)
- ld a, POKEMON_MUSIC
- ld [wd002], a
- xor a
- ld [wd005], a
- ld a, BANK(PlayRadioShow)
- ld hl, PlayRadioShow
- call Radio_BackUpFarCallParams
- ld de, PokemonMusicName
- ret
-
-LoadStation_LuckyChannel: ; 91790 (24:5790)
- ld a, LUCKY_CHANNEL
- ld [wd002], a
- xor a
- ld [wd005], a
- ld a, BANK(PlayRadioShow)
- ld hl, PlayRadioShow
- call Radio_BackUpFarCallParams
- ld de, LuckyChannelName
- ret
-
-LoadStation_BuenasPassword: ; 917a5 (24:57a5)
- ld a, BUENAS_PASSWORD
- ld [wd002], a
- xor a
- ld [wd005], a
- ld a, BANK(PlayRadioShow)
- ld hl, PlayRadioShow
- call Radio_BackUpFarCallParams
- ld de, NotBuenasPasswordName
- ld a, [StatusFlags2]
- bit 0, a
- ret z
- ld de, BuenasPasswordName
- ret
-; 917c3 (24:57c3)
-
-BuenasPasswordName: db "BUENA'S PASSWORD@"
-NotBuenasPasswordName: db "@"
-
-LoadStation_UnownRadio: ; 917d5 (24:57d5)
- ld a, UNOWN_RADIO
- ld [wd002], a
- xor a
- ld [wd005], a
- ld a, BANK(PlayRadioShow)
- ld hl, PlayRadioShow
- call Radio_BackUpFarCallParams
- ld de, UnknownStationName
- ret
-
-LoadStation_PlacesAndPeople: ; 917ea (24:57ea)
- ld a, PLACES_AND_PEOPLE
- ld [wd002], a
- xor a
- ld [wd005], a
- ld a, BANK(PlayRadioShow)
- ld hl, PlayRadioShow
- call Radio_BackUpFarCallParams
- ld de, PlacesAndPeopleName
- ret
-
-LoadStation_LetsAllSing: ; 917ff (24:57ff)
- ld a, LETS_ALL_SING
- ld [wd002], a
- xor a
- ld [wd005], a
- ld a, BANK(PlayRadioShow)
- ld hl, PlayRadioShow
- call Radio_BackUpFarCallParams
- ld de, LetsAllSingName
- ret
-; 91814 (24:5814)
-
-LoadStation_RocketRadio: ; 91814
- ld a, ROCKET_RADIO
- ld [wd002], a
- xor a
- ld [wd005], a
- ld a, BANK(PlayRadioShow)
- ld hl, PlayRadioShow
- call Radio_BackUpFarCallParams
- ld de, LetsAllSingName
- ret
-; 91829
-
-LoadStation_PokeFluteRadio: ; 91829 (24:5829)
- ld a, POKE_FLUTE_RADIO
- ld [wd002], a
- xor a
- ld [wd005], a
- ld a, BANK(PlayRadioShow)
- ld hl, PlayRadioShow
- call Radio_BackUpFarCallParams
- ld de, PokeFluteStationName
- ret
-
-LoadStation_EvolutionRadio: ; 9183e (24:583e)
- ld a, EVOLUTION_RADIO
- ld [wd002], a
- xor a
- ld [wd005], a
- ld a, BANK(PlayRadioShow)
- ld hl, PlayRadioShow
- call Radio_BackUpFarCallParams
- ld de, UnknownStationName
- ret
-; 91853 (24:5853)
-
-LoadStation_Dummy: ; 91853
- ret
-
-RadioMusicRestartDE: ; 91854 (24:5854)
- push de
- ld a, e
- ld [wc6dc], a
- ld de, MUSIC_NONE
- call PlayMusic
- pop de
- ld a, e
- ld [wMapMusic], a
- call PlayMusic
- ret
-
-RadioMusicRestartPokemonChannel: ; 91868 (24:5868)
- push de
- ld a, $fe
- ld [wc6dc], a
- ld de, MUSIC_NONE
- call PlayMusic
- pop de
- ld de, MUSIC_POKEMON_CHANNEL
- call PlayMusic
- ret
-
-Radio_BackUpFarCallParams: ; 9187c (24:587c)
- ld [wc6d9], a
- ld a, l
- ld [wc6da], a
- ld a, h
- ld [wc6db], a
- ret
-
-NoRadioStation: ; 91888 (24:5888)
- call NoRadioMusic
- call NoRadioName
- xor a
- ld [wc6d9], a
- ld [wc6da], a
- ld [wc6db], a
- ld a, $1
- ld [hBGMapMode], a
- ret
-
-NoRadioMusic: ; 9189d (24:589d)
- ld de, MUSIC_NONE
- call PlayMusic
- ld a, $ff
- ld [wc6dc], a
- ret
-
-NoRadioName: ; 918a9 (24:58a9)
- xor a
- ld [hBGMapMode], a
- hlcoord 1, 8
- lb bc, 3, 18
- call ClearBox
- hlcoord 0, 12
- ld bc, $412
- call TextBox
- ret
-; 918bf
-
-OaksPkmnTalkName: db "OAK's <PK><MN> Talk@"
-PokedexShowName: db "#DEX Show@"
-PokemonMusicName: db "#MON Music@"
-LuckyChannelName: db "Lucky Channel@"
-UnknownStationName: db "?????@"
-PlacesAndPeopleName: db "Places & People@"
-LetsAllSingName: db "Let's All Sing!@"
-PokeFluteStationName: db "# FLUTE@"
-; 9191c
diff --git a/engine/save.asm b/engine/save.asm
index de11a8133..20f59c042 100644
--- a/engine/save.asm
+++ b/engine/save.asm
@@ -1,13 +1,13 @@
-Function14a1a: ; 14a1a
+SaveMenu: ; 14a1a
call LoadStandardMenuDataHeader
- callba Function5e9a
+ callba DisplaySaveInfoOnSave
call SpeechTextBox
call UpdateSprites
- callba Function4cf45
+ callba SaveMenu_LoadEDTile
ld hl, UnknownText_0x15283
call SaveTheGame_yesorno
jr nz, .refused
- call CheckForExistingSaveFile
+ call AskOverwriteSaveFile
jr c, .refused
call SetWRAMStateForSave
call _SavingDontTurnOffThePower
@@ -15,36 +15,37 @@ Function14a1a: ; 14a1a
call ExitMenu
and a
ret
+
.refused
call ExitMenu
call Functiond90
- callba Function4cf45
+ callba SaveMenu_LoadEDTile
scf
ret
Function14a58: ; 14a58
call SetWRAMStateForSave
- callba Function14056
- callba Function1050d9
+ callba StageRTCTimeForSave
+ callba BackupMysteryGift
call SavePokemonData
- call Function14e13
+ call SaveChecksum
call SaveBackupPokemonData
call SaveBackupChecksum
- callba BackupScratchmons
- callba Function1406a
+ callba BackupPartyMonMail
+ callba SaveRTC
call ClearWRAMStateAfterSave
ret
; 14a83
-Function14a83: ; 14a83 (5:4a83)
+ChangeBoxSaveGame: ; 14a83 (5:4a83)
push de
ld hl, UnknownText_0x152a1
call MenuTextBox
call YesNoBox
call ExitMenu
jr c, .refused
- call CheckForExistingSaveFile
+ call AskOverwriteSaveFile
jr c, .refused
call SetWRAMStateForSave
call SavingDontTurnOffThePower
@@ -61,8 +62,8 @@ Function14a83: ; 14a83 (5:4a83)
pop de
ret
-Function14ab2: ; 14ab2
- call CheckForExistingSaveFile
+Link_SaveGame: ; 14ab2
+ call AskOverwriteSaveFile
jr c, .refused
call SetWRAMStateForSave
call _SavingDontTurnOffThePower
@@ -73,7 +74,7 @@ Function14ab2: ; 14ab2
ret
; 14ac2
-Function14ac2: ; 14ac2
+MovePkmnWOMail_SaveGame: ; 14ac2
call SetWRAMStateForSave
push de
call SaveBox
@@ -93,46 +94,46 @@ Function14ad5: ; 14ad5
ld a, e
ld [wCurBox], a
ld a, $1
- ld [wcfcd], a
- callba Function14056
- callba Function1050d9
+ ld [wSaveFileExists], a
+ callba StageRTCTimeForSave
+ callba BackupMysteryGift
call ValidateSave
call SaveOptions
call SavePlayerData
call SavePokemonData
- call Function14e13
+ call SaveChecksum
call ValidateBackupSave
call SaveBackupOptions
call SaveBackupPlayerData
call SaveBackupPokemonData
call SaveBackupChecksum
- callba BackupScratchmons
+ callba BackupPartyMonMail
callba BackupMobileEventIndex
- callba Function1406a
+ callba SaveRTC
call LoadBox
call ClearWRAMStateAfterSave
ld de, SFX_SAVE
call PlaySFX
- ld c, $18
+ ld c, 24
call DelayFrames
ret
; 14b34
-Function14b34: ; 14b34
+StartMovePkmnWOMail_SaveGame: ; 14b34
ld hl, UnknownText_0x152a6
call MenuTextBox
call YesNoBox
call ExitMenu
- jr c, .asm_14b52
- call CheckForExistingSaveFile
- jr c, .asm_14b52
+ jr c, .refused
+ call AskOverwriteSaveFile
+ jr c, .refused
call SetWRAMStateForSave
call _SavingDontTurnOffThePower
call ClearWRAMStateAfterSave
and a
ret
-.asm_14b52
+.refused
scf
ret
; 14b54
@@ -177,8 +178,8 @@ SaveGameData: ; 14b85
ret
; 14b89
-CheckForExistingSaveFile: ; 14b89
- ld a, [wcfcd]
+AskOverwriteSaveFile: ; 14b89
+ ld a, [wSaveFileExists]
and a
jr z, .erase
call Function14bcb
@@ -269,31 +270,31 @@ SavedTheGame: ; 14be6
SaveGameData_: ; 14c10
ld a, 1
- ld [wcfcd], a
- callba Function14056
- callba Function1050d9
+ ld [wSaveFileExists], a
+ callba StageRTCTimeForSave
+ callba BackupMysteryGift
call ValidateSave
call SaveOptions
call SavePlayerData
call SavePokemonData
call SaveBox
- call Function14e13
+ call SaveChecksum
call ValidateBackupSave
call SaveBackupOptions
call SaveBackupPlayerData
call SaveBackupPokemonData
call SaveBackupChecksum
call UpdateStackTop
- callba BackupScratchmons
+ callba BackupPartyMonMail
callba BackupMobileEventIndex
- callba Function1406a
- ld a, BANK(s1_be45)
+ callba SaveRTC
+ ld a, BANK(sBattleTowerChallengeState)
call GetSRAMBank
- ld a, [s1_be45]
+ ld a, [sBattleTowerChallengeState]
cp $4
jr nz, .ok
xor a
- ld [s1_be45], a
+ ld [sBattleTowerChallengeState], a
.ok
call CloseSRAM
ret
@@ -371,7 +372,7 @@ ErasePreviousSave: ; 14cbb
call EraseHallOfFame
call EraseLinkBattleStats
call EraseMysteryGift
- call Function14d68
+ call SaveData
call Function14d5c
ld a, BANK(sStackTop)
call GetSRAMBank
@@ -395,10 +396,10 @@ EraseLinkBattleStats: ; 14ce2
; 14cf4
EraseMysteryGift: ; 14cf4
- ld a, BANK(s0_abe4)
+ ld a, BANK(sBackupMysteryGiftItem)
call GetSRAMBank
- ld hl, s0_abe4
- ld bc, s0_abe4End - s0_abe4
+ ld hl, sBackupMysteryGiftItem
+ ld bc, sBackupMysteryGiftItemEnd - sBackupMysteryGiftItem
xor a
call ByteFill
jp CloseSRAM
@@ -437,15 +438,15 @@ Unknown_14d2c: ; 14d2c
; 14d5c
Function14d5c: ; 14d5c
- ld a, BANK(s1_be45)
+ ld a, BANK(sBattleTowerChallengeState)
call GetSRAMBank
xor a
- ld [s1_be45], a
+ ld [sBattleTowerChallengeState], a
jp CloseSRAM
; 14d68
-Function14d68: ; 14d68
- call Function1509a
+SaveData: ; 14d68
+ call _SaveData
ret
; 14d6c
@@ -496,9 +497,9 @@ Function14da0: ; 14da0
ValidateSave: ; 14da9
ld a, BANK(s1_a008)
call GetSRAMBank
- ld a, $63
+ ld a, 99
ld [s1_a008], a
- ld a, $7f
+ ld a, " "
ld [s1_ad0f], a
jp CloseSRAM
; 14dbb
@@ -547,7 +548,7 @@ SaveBox: ; 14e0c
ret
; 14e13
-Function14e13: ; 14e13
+SaveChecksum: ; 14e13
ld hl, sGameData
ld bc, sGameDataEnd - sGameData
ld a, BANK(sGameData)
@@ -564,9 +565,9 @@ Function14e13: ; 14e13
ValidateBackupSave: ; 14e2d
ld a, BANK(s0_b208)
call GetSRAMBank
- ld a, $63
+ ld a, 99
ld [s0_b208], a
- ld a, $7f
+ ld a, " "
ld [s0_bf0f], a
call CloseSRAM
ret
@@ -630,9 +631,9 @@ TryLoadSaveFile: ; 14ea5 (5:4ea5)
call LoadPlayerData
call LoadPokemonData
call LoadBox
- callba RestoreScratchmons
+ callba RestorePartyMonMail
callba RestoreMobileEventIndex
- callba Function1050ea
+ callba RestoreMysteryGift
call ValidateBackupSave
call SaveBackupOptions
call SaveBackupPlayerData
@@ -647,21 +648,21 @@ TryLoadSaveFile: ; 14ea5 (5:4ea5)
call LoadBackupPlayerData
call LoadBackupPokemonData
call LoadBox
- callba RestoreScratchmons
+ callba RestorePartyMonMail
callba RestoreMobileEventIndex
- callba Function1050ea
+ callba RestoreMysteryGift
call ValidateSave
call SaveOptions
call SavePlayerData
call SavePokemonData
- call Function14e13
+ call SaveChecksum
and a
ret
.corrupt
ld a, [Options]
push af
- set 4, a
+ set NO_TEXT_SCROLL, a
ld [Options], a
ld hl, UnknownText_0x1529c
call PrintText
@@ -671,11 +672,11 @@ TryLoadSaveFile: ; 14ea5 (5:4ea5)
ret
-Function14f1c: ; 14f1c
+TryLoadSaveData: ; 14f1c
xor a
- ld [wcfcd], a
- call Function14f84
- ld a, [wcfcd]
+ ld [wSaveFileExists], a
+ call CheckPrimarySaveFile
+ ld a, [wSaveFileExists]
and a
jr z, .backup
@@ -693,8 +694,8 @@ Function14f1c: ; 14f1c
ret
.backup
- call Function14faf
- ld a, [wcfcd]
+ call CheckBackupSaveFile
+ ld a, [wSaveFileExists]
and a
jr z, .corrupt
@@ -716,7 +717,7 @@ Function14f1c: ; 14f1c
ld de, Options
ld bc, OptionsEnd - Options
call CopyBytes
- call Function67e
+ call PanicResetClock
ret
; 14f7c
@@ -731,14 +732,14 @@ DefaultOptions: ; 14f7c
db $00
; 14f84
-Function14f84: ; 14f84
+CheckPrimarySaveFile: ; 14f84
ld a, BANK(s1_a008)
call GetSRAMBank
ld a, [s1_a008]
- cp $63
+ cp 99
jr nz, .nope
ld a, [s1_ad0f]
- cp $7f
+ cp " "
jr nz, .nope
ld hl, sOptions
ld de, Options
@@ -746,28 +747,28 @@ Function14f84: ; 14f84
call CopyBytes
call CloseSRAM
ld a, $1
- ld [wcfcd], a
+ ld [wSaveFileExists], a
.nope
call CloseSRAM
ret
; 14faf
-Function14faf: ; 14faf
+CheckBackupSaveFile: ; 14faf
ld a, BANK(s0_b208)
call GetSRAMBank
ld a, [s0_b208]
- cp $63
+ cp 99
jr nz, .nope
ld a, [s0_bf0f]
- cp $7f
+ cp " "
jr nz, .nope
ld hl, sBackupOptions
ld de, Options
ld bc, OptionsEnd - Options
call CopyBytes
ld a, $2
- ld [wcfcd], a
+ ld [wSaveFileExists], a
.nope
call CloseSRAM
@@ -787,14 +788,14 @@ LoadPlayerData: ; 14fd7 (5:4fd7)
ld bc, wMapDataEnd - wMapData
call CopyBytes
call CloseSRAM
- ld a, BANK(s1_be45)
+ ld a, BANK(sBattleTowerChallengeState)
call GetSRAMBank
- ld a, [s1_be45]
+ ld a, [sBattleTowerChallengeState]
cp $4
- jr nz, .asm_15008
+ jr nz, .not_4
ld a, $3
- ld [s1_be45], a
-.asm_15008
+ ld [sBattleTowerChallengeState], a
+.not_4
call CloseSRAM
ret
@@ -822,10 +823,10 @@ VerifyChecksum: ; 15028 (5:5028)
call Checksum
ld a, [sChecksum + 0]
cp e
- jr nz, .asm_15040
+ jr nz, .fail
ld a, [sChecksum + 1]
cp d
-.asm_15040
+.fail
push af
call CloseSRAM
pop af
@@ -863,17 +864,17 @@ VerifyBackupChecksum: ; 1507c (5:507c)
call Checksum
ld a, [sBackupChecksum + 0]
cp e
- jr nz, .asm_15094
+ jr nz, .fail
ld a, [sBackupChecksum + 1]
cp d
-.asm_15094
+.fail
push af
call CloseSRAM
pop af
ret
-Function1509a: ; 1509a
+_SaveData: ; 1509a
ld a, BANK(sCrystalData)
call GetSRAMBank
ld hl, wCrystalData
diff --git a/engine/scripting.asm b/engine/scripting.asm
index ae5041bc2..c80343a4c 100644
--- a/engine/scripting.asm
+++ b/engine/scripting.asm
@@ -69,13 +69,13 @@ RunScriptCommand: ; 96ca9
; 96cb1
-ScriptCommandTable: ; 0x96cb1
- dw Script_2call
- dw Script_3call
- dw Script_2ptcall
- dw Script_2jump
- dw Script_3jump
- dw Script_2ptjump
+ScriptCommandTable: ; 96cb1
+ dw Script_scall
+ dw Script_farscall
+ dw Script_ptcall
+ dw Script_jump
+ dw Script_farjump
+ dw Script_ptjump
dw Script_if_equal
dw Script_if_not_equal
dw Script_iffalse
@@ -84,9 +84,9 @@ ScriptCommandTable: ; 0x96cb1
dw Script_if_less_than
dw Script_jumpstd
dw Script_callstd
- dw Script_3callasm
+ dw Script_callasm
dw Script_special
- dw Script_2ptcallasm
+ dw Script_ptcallasm
dw Script_checkmaptriggers
dw Script_domaptrigger
dw Script_checktriggers
@@ -144,16 +144,16 @@ ScriptCommandTable: ; 0x96cb1
dw Script_loadfont
dw Script_refreshscreen
dw Script_loadmovesprites
- dw Script_loadbytec1ce
- dw Script_3writetext
- dw Script_2writetext
+ dw Script_loadbytec2cf
+ dw Script_farwritetext
+ dw Script_writetext
dw Script_repeattext
dw Script_yesorno
dw Script_loadmenudata
dw Script_writebackup
dw Script_jumptextfaceplayer
IF _CRYSTAL
- dw Script_3jumptext
+ dw Script_farjumptext
ENDC
dw Script_jumptext
dw Script_closetext
@@ -241,28 +241,28 @@ ENDC
dw Script_trainerclassname
dw Script_name
dw Script_wait
- dw Script_unknown0xa9
-; 0x96e05
+ dw Script_check_save
+; 96e05
-StartScript: ; 0x96e05
+StartScript: ; 96e05
ld hl, ScriptFlags
set SCRIPT_RUNNING, [hl]
ret
-; 0x96e0b
+; 96e0b
-CheckScript: ; 0x96e0b
+CheckScript: ; 96e0b
ld hl, ScriptFlags
bit SCRIPT_RUNNING, [hl]
ret
-; 0x96e11
+; 96e11
-StopScript: ; 0x96e11
+StopScript: ; 96e11
ld hl, ScriptFlags
res SCRIPT_RUNNING, [hl]
ret
-; 0x96e17
+; 96e17
-Script_3callasm: ; 0x96e17
+Script_callasm: ; 96e17
; script command 0xe
; parameters:
; asm (AsmPointerParam)
@@ -276,9 +276,9 @@ Script_3callasm: ; 0x96e17
ld a, b
rst FarCall
ret
-; 0x96e26
+; 96e26
-Script_special: ; 0x96e26
+Script_special: ; 96e26
; script command 0xf
; parameters:
; predefined_script (MultiByteParam)
@@ -289,9 +289,9 @@ Script_special: ; 0x96e26
ld d, a
callba Special
ret
-; 0x96e35
+; 96e35
-Script_2ptcallasm: ; 0x96e35
+Script_ptcallasm: ; 96e35
; script command 0x10
; parameters:
; asm (PointerToAsmPointerParam)
@@ -308,9 +308,9 @@ Script_2ptcallasm: ; 0x96e35
ld a, b
rst FarCall
ret
-; 0x96e45
+; 96e45
-Script_jumptextfaceplayer: ; 0x96e45
+Script_jumptextfaceplayer: ; 96e45
; script command 0x51
; parameters:
; text_pointer (RawTextPointerLabelParam)
@@ -324,9 +324,9 @@ Script_jumptextfaceplayer: ; 0x96e45
ld b, BANK(JumpTextFacePlayerScript)
ld hl, JumpTextFacePlayerScript
jp ScriptJump
-; 0x96e5f
+; 96e5f
-Script_jumptext: ; 0x96e5f
+Script_jumptext: ; 96e5f
; script command 0x53
; parameters:
; text_pointer (RawTextPointerLabelParam)
@@ -340,22 +340,22 @@ Script_jumptext: ; 0x96e5f
ld b, BANK(JumpTextScript)
ld hl, JumpTextScript
jp ScriptJump
-; 0x96e79
+; 96e79
-JumpTextFacePlayerScript: ; 0x96e79
+JumpTextFacePlayerScript: ; 96e79
faceplayer
-JumpTextScript: ; 0x96e7a
+JumpTextScript: ; 96e7a
loadfont
repeattext -1, -1
closetext
loadmovesprites
end
-; 0x96e81
+; 96e81
IF _CRYSTAL
-Script_3jumptext: ; 0x96e81
+Script_farjumptext: ; 96e81
; script command 0x52
; parameters:
; text_pointer (PointerLabelBeforeBank)
@@ -369,12 +369,12 @@ Script_3jumptext: ; 0x96e81
ld b, BANK(JumpTextScript)
ld hl, JumpTextScript
jp ScriptJump
-; 0x96e9b
+; 96e9b
ENDC
-Script_2writetext: ; 0x96e9b
+Script_writetext: ; 96e9b
; script command 0x4c
; parameters:
; text_pointer (RawTextPointerLabelParam)
@@ -387,9 +387,9 @@ Script_2writetext: ; 0x96e9b
ld b, a
call MapTextbox
ret
-; 0x96eab
+; 96eab
-Script_3writetext: ; 0x96eab
+Script_farwritetext: ; 96eab
; script command 0x4b
; parameters:
; text_pointer (PointerLabelBeforeBank)
@@ -402,9 +402,9 @@ Script_3writetext: ; 0x96eab
ld h, a
call MapTextbox
ret
-; 0x96ebb
+; 96ebb
-Script_repeattext: ; 0x96ebb
+Script_repeattext: ; 96ebb
; script command 0x4d
; parameters:
; byte (SingleByteParam)
@@ -415,10 +415,10 @@ Script_repeattext: ; 0x96ebb
call GetScriptByte
ld h, a
cp -1
- jr nz, .done ; 0x96ec5 $11
+ jr nz, .done
ld a, l
cp -1
- jr nz, .done ; 0x96eca $c
+ jr nz, .done
ld hl, wd44e
ld a, [hli]
ld b, a
@@ -429,15 +429,15 @@ Script_repeattext: ; 0x96ebb
ret
.done
ret
-; 0x96ed9
+; 96ed9
-Script_closetext: ; 0x96ed9
+Script_closetext: ; 96ed9
; script command 0x54
jp CloseText
-; 0x96edc
+; 96edc
-Script_keeptextopen: ; 0x96edc
+Script_keeptextopen: ; 96edc
; script command 0x55
ld a, [hOAMUpdate]
@@ -449,21 +449,21 @@ Script_keeptextopen: ; 0x96edc
pop af
ld [hOAMUpdate], a
ret
-; 0x96eed
+; 96eed
-Script_yesorno: ; 0x96eed
+Script_yesorno: ; 96eed
; script command 0x4e
call YesNoBox
ld a, 0
- jr c, .no ; 0x96ef2 $2
+ jr c, .no
ld a, 1
.no
ld [ScriptVar], a
ret
-; 0x96efa
+; 96efa
-Script_loadmenudata: ; 0x96efa
+Script_loadmenudata: ; 96efa
; script command 0x4f
; parameters:
; data (MenuDataPointerParam)
@@ -477,17 +477,17 @@ Script_loadmenudata: ; 0x96efa
call Call_a_de
call UpdateSprites
ret
-; 0x96f0f
+; 96f0f
-Script_writebackup: ; 0x96f0f
+Script_writebackup: ; 96f0f
; script command 0x50
call WriteBackup
call UpdateSprites
ret
-; 0x96f16
+; 96f16
-Script_pokepic: ; 0x96f16
+Script_pokepic: ; 96f16
; script command 0x56
; parameters:
; pokemon (PokemonParam)
@@ -500,16 +500,16 @@ Script_pokepic: ; 0x96f16
ld [CurPartySpecies], a
callba Pokepic
ret
-; 0x96f29
+; 96f29
-Script_pokepicyesorno: ; 0x96f29
+Script_pokepicyesorno: ; 96f29
; script command 0x57
callba PokepicYesOrNo
ret
-; 0x96f30
+; 96f30
-Script_interpretmenu2: ; 0x96f30
+Script_interpretmenu2: ; 96f30
; script command 0x59
ld a, [ScriptBank]
@@ -521,9 +521,9 @@ Script_interpretmenu2: ; 0x96f30
.ok
ld [ScriptVar], a
ret
-; 0x96f41
+; 96f41
-Script_interpretmenu: ; 0x96f41
+Script_interpretmenu: ; 96f41
; script command 0x58
ld a, [ScriptBank]
@@ -535,9 +535,9 @@ Script_interpretmenu: ; 0x96f41
.ok
ld [ScriptVar], a
ret
-; 0x96f52
+; 96f52
-Script_battletowertext: ; 0x96f52
+Script_battletowertext: ; 96f52
; script command 0xa4
; parameters:
; pointer (PointerLabelBeforeBank)
@@ -548,9 +548,9 @@ Script_battletowertext: ; 0x96f52
ld c, a
callba BattleTowerText
ret
-; 0x96f60
+; 96f60
-Script_verbosegiveitem: ; 0x96f60
+Script_verbosegiveitem: ; 96f60
; script command 0x9e
; parameters:
; item (ItemLabelByte)
@@ -564,15 +564,15 @@ Script_verbosegiveitem: ; 0x96f60
ld b, BANK(GiveItemScript)
ld de, GiveItemScript
jp ScriptCall
-; 0x96f76
+; 96f76
-Function96f76: ; 96f76
+ret_96f76: ; 96f76
ret
; 96f77
GiveItemScript: ; 96f77
- callasm Function96f76
+ callasm ret_96f76
writetext ReceivedItemText
iffalse .Full
waitbutton
@@ -593,7 +593,7 @@ ReceivedItemText: ; 96f89
; 96f8e
-Script_verbosegiveitem2: ; 0x96f8e
+Script_verbosegiveitem2: ; 96f8e
; script command 0x9f
; parameters:
; item (ItemLabelByte)
@@ -623,9 +623,9 @@ Script_verbosegiveitem2: ; 0x96f8e
ld b, BANK(GiveItemScript)
ld de, GiveItemScript
jp ScriptCall
-; 0x96fc6
+; 96fc6
-Script_itemnotify: ; 0x96fc6
+Script_itemnotify: ; 96fc6
; script command 0x45
call GetPocketName
@@ -634,9 +634,9 @@ Script_itemnotify: ; 0x96fc6
ld hl, PutItemInPocketText
call MapTextbox
ret
-; 0x96fd5
+; 96fd5
-Script_pocketisfull: ; 0x96fd5
+Script_pocketisfull: ; 96fd5
; script command 0x46
call GetPocketName
@@ -645,9 +645,9 @@ Script_pocketisfull: ; 0x96fd5
ld hl, PocketIsFullText
call MapTextbox
ret
-; 0x96fe4
+; 96fe4
-Script_specialsound: ; 0x96fe4
+Script_specialsound: ; 96fe4
; script command 0x88
callba CheckItemPocket
@@ -660,7 +660,7 @@ Script_specialsound: ; 0x96fe4
call PlaySFX
call WaitSFX
ret
-; 0x96ffe
+; 96ffe
GetPocketName: ; 96ffe
@@ -715,7 +715,7 @@ PocketIsFullText: ; 97060
; 97065
-Script_pokemart: ; 0x97065
+Script_pokemart: ; 97065
; script command 0x94
; parameters:
; dialog_id (SingleByteParam)
@@ -731,9 +731,9 @@ Script_pokemart: ; 0x97065
ld b, a
callba OpenMartDialog
ret
-; 0x9707c
+; 9707c
-Script_elevator: ; 0x9707c
+Script_elevator: ; 9707c
; script command 0x95
; parameters:
; floor_list_pointer (PointerLabelParam)
@@ -751,9 +751,9 @@ Script_elevator: ; 0x9707c
ld a, $1
ld [ScriptVar], a
ret
-; 0x97099
+; 97099
-Script_trade: ; 0x97099
+Script_trade: ; 97099
; script command 0x96
; parameters:
; trade_id (SingleByteParam)
@@ -762,9 +762,9 @@ Script_trade: ; 0x97099
ld e, a
callba NPCTrade
ret
-; 0x970a4
+; 970a4
-Script_phonecall: ; 0x970a4
+Script_phonecall: ; 970a4
; script command 0x98
; parameters:
; caller_name (RawTextPointerLabelParam)
@@ -777,40 +777,40 @@ Script_phonecall: ; 0x970a4
ld b, a
callba PhoneCall
ret
-; 0x970b7
+; 970b7
-Script_hangup: ; 0x970b7
+Script_hangup: ; 970b7
; script command 0x99
callba HangUp
ret
-; 0x970be
+; 970be
-Script_askforphonenumber: ; 0x970be
+Script_askforphonenumber: ; 970be
; script command 0x97
; parameters:
; number (SingleByteParam)
call YesNoBox
- jr c, .refused ; 0x970c1 $13
+ jr c, .refused
call GetScriptByte
ld c, a
callba AddPhoneNumber
- jr c, .phonefull ; 0x970cd $3
+ jr c, .phonefull
xor a
- jr .done ; 0x970d0 $9
+ jr .done
.phonefull
ld a, 1
- jr .done ; 0x970d4 $5
+ jr .done
.refused
call GetScriptByte
ld a, 2
.done
ld [ScriptVar], a
ret
-; 0x970df
+; 970df
-Script_describedecoration: ; 0x970df
+Script_describedecoration: ; 970df
; script command 0x9a
; parameters:
; byte (SingleByteParam)
@@ -821,9 +821,9 @@ Script_describedecoration: ; 0x970df
ld h, d
ld l, e
jp ScriptJump
-; 0x970ee
+; 970ee
-Script_fruittree: ; 0x970ee
+Script_fruittree: ; 970ee
; script command 0x9b
; parameters:
; tree_id (SingleByteParam)
@@ -833,9 +833,9 @@ Script_fruittree: ; 0x970ee
ld b, BANK(FruitTreeScript)
ld hl, FruitTreeScript
jp ScriptJump
-; 0x970fc
+; 970fc
-Script_loadwilddata: ; 0x970fc
+Script_loadwilddata: ; 970fc
; script command 0xa0
; parameters:
; flag (SingleByteParam)
@@ -850,9 +850,9 @@ Script_loadwilddata: ; 0x970fc
ld e, a
callba LoadWildData
ret
-; 0x9710f
+; 9710f
-Script_trainertext: ; 0x9710f
+Script_trainertext: ; 9710f
; script command 0x62
; parameters:
; which_text (SingleByteParam)
@@ -871,9 +871,9 @@ endr
ld b, a
call MapTextbox
ret
-; 0x97125
+; 97125
-Script_scripttalkafter: ; 0x97125
+Script_scripttalkafter: ; 97125
; script command 0x65
ld hl, wd04b
@@ -883,9 +883,9 @@ Script_scripttalkafter: ; 0x97125
ld a, [EngineBuffer1]
ld b, a
jp ScriptJump
-; 0x97132
+; 97132
-Script_trainerstatus: ; 0x97132
+Script_trainerstatus: ; 97132
; script command 0x63
; parameters:
; action (SingleByteParam)
@@ -905,9 +905,9 @@ Script_trainerstatus: ; 0x97132
ld a, 1
ld [ScriptVar], a
ret
-; 0x9714c
+; 9714c
-Script_winlosstext: ; 0x9714c
+Script_winlosstext: ; 9714c
; script command 0x64
; parameters:
; win_text_pointer (TextPointerLabelParam)
@@ -924,47 +924,47 @@ Script_winlosstext: ; 0x9714c
call GetScriptByte
ld [hli], a
ret
-; 0x97163
+; 97163
-Script_talkaftercancel: ; 0x97163
+Script_talkaftercancel: ; 97163
; script command 0x66
- ld a, [wd04d]
+ ld a, [wRunningTrainerBattleScript]
and a
ret z
jp Script_end
-; 0x9716b
+; 9716b
-Script_talkaftercheck: ; 0x9716b
+Script_talkaftercheck: ; 9716b
; script command 0x67
ld a, 1
ld [ScriptVar], a
- ld a, [wd04d]
+ ld a, [wRunningTrainerBattleScript]
and a
ret nz
xor a
ld [ScriptVar], a
ret
-; 0x9717a
+; 9717a
-Script_playrammusic: ; 0x9717a
+Script_playrammusic: ; 9717a
; script command 0x80
ld a, [OtherTrainerClass]
ld e, a
callba PlayTrainerEncounterMusic
ret
-; 0x97185
+; 97185
-Script_playmapmusic: ; 0x97185
+Script_playmapmusic: ; 97185
; script command 0x82
call PlayMapMusic
ret
-; 0x97189
+; 97189
-Script_playmusic: ; 0x97189
+Script_playmusic: ; 97189
; script command 0x7f
; parameters:
; music_pointer (MultiByteParam)
@@ -980,9 +980,9 @@ Script_playmusic: ; 0x97189
ld d, a
call PlayMusic
ret
-; 0x971a2
+; 971a2
-Script_musicfadeout: ; 0x971a2
+Script_musicfadeout: ; 971a2
; script command 0x81
; parameters:
; music (MultiByteParam)
@@ -996,9 +996,9 @@ Script_musicfadeout: ; 0x971a2
and $7f
ld [MusicFade], a
ret
-; 0x971b7
+; 971b7
-Script_playsound: ; 0x971b7
+Script_playsound: ; 971b7
; script command 0x85
; parameters:
; sound_pointer (MultiByteParam)
@@ -1009,24 +1009,24 @@ Script_playsound: ; 0x971b7
ld d, a
call PlaySFX
ret
-; 0x971c3
+; 971c3
-Script_waitbutton: ; 0x971c3
+Script_waitbutton: ; 971c3
; script command 0x86
call WaitSFX
ret
-; 0x971c7
+; 971c7
-Script_warpsound: ; 0x971c7
+Script_warpsound: ; 971c7
; script command 0x87
callba Function14a07
call PlaySFX
ret
-; 0x971d1
+; 971d1
-Script_cry: ; 0x971d1
+Script_cry: ; 971d1
; script command 0x84
; parameters:
; cry_id (MultiByteParam)
@@ -1041,18 +1041,18 @@ Script_cry: ; 0x971d1
.ok
call PlayCry
ret
-; 0x971e3
+; 971e3
-GetScriptPerson: ; 0x971e3
+GetScriptPerson: ; 971e3
and a
ret z
cp LAST_TALKED
ret z
dec a
ret
-; 0x971ea
+; 971ea
-Script_setlasttalked: ; 0x971ea
+Script_setlasttalked: ; 971ea
; script command 0x68
; parameters:
; person (SingleByteParam)
@@ -1061,9 +1061,9 @@ Script_setlasttalked: ; 0x971ea
call GetScriptPerson
ld [hLastTalked], a
ret
-; 0x971f3
+; 971f3
-Script_applymovement: ; 0x971f3
+Script_applymovement: ; 971f3
; script command 0x69
; parameters:
; person (SingleByteParam)
@@ -1097,14 +1097,14 @@ ApplyMovement: ; 971fa
ld [ScriptMode], a
call StopScript
ret
-; 0x97221
+; 97221
-SetFlagsForMovement_2: ; 0x97221
+SetFlagsForMovement_2: ; 97221
callba _SetFlagsForMovement_2
ret
-; 0x97228
+; 97228
-Script_applymovement2: ; 0x97228
+Script_applymovement2: ; 97228
; apply movement to last talked
; script command 0x6a
; parameters:
@@ -1113,9 +1113,9 @@ Script_applymovement2: ; 0x97228
ld a, [hLastTalked]
ld c, a
jp ApplyMovement
-; 0x9722e
+; 9722e
-Script_faceplayer: ; 0x9722e
+Script_faceplayer: ; 9722e
; script command 0x6b
ld a, [hLastTalked]
@@ -1134,9 +1134,9 @@ endr
ld d, a
call ApplyPersonFacing
ret
-; 0x97248
+; 97248
-Script_faceperson: ; 0x97248
+Script_faceperson: ; 97248
; script command 0x6c
; parameters:
; person1 (SingleByteParam)
@@ -1168,9 +1168,9 @@ endr
ld d, c
call ApplyPersonFacing
ret
-; 0x97274
+; 97274
-Script_spriteface: ; 0x97274
+Script_spriteface: ; 97274
; script command 0x76
; parameters:
; person (SingleByteParam)
@@ -1190,13 +1190,13 @@ endr
ld e, a
call ApplyPersonFacing
ret
-; 0x9728b
+; 9728b
-ApplyPersonFacing: ; 0x9728b
+ApplyPersonFacing: ; 9728b
ld a, d
push de
call CheckObjectVisibility
- jr c, .not_visible ; 0x97290 $27
+ jr c, .not_visible
ld hl, OBJECT_SPRITE
add hl, bc
ld a, [hl]
@@ -1207,13 +1207,13 @@ ApplyPersonFacing: ; 0x9728b
ld hl, OBJECT_FLAGS1
add hl, bc
bit 2, [hl]
- jr nz, .not_visible ; 0x972a4 $13
+ jr nz, .not_visible
pop de
ld a, e
call SetSpriteDirection
ld hl, VramState
bit 6, [hl]
- jr nz, .text_state ; 0x972b0 $3
+ jr nz, .text_state
call .DisableTextTiles
.text_state
call UpdateSprites
@@ -1223,9 +1223,9 @@ ApplyPersonFacing: ; 0x9728b
pop de
scf
ret
-; 0x972bc
+; 972bc
-.DisableTextTiles: ; 0x972bc
+.DisableTextTiles: ; 972bc
call LoadMapPart
hlcoord 0, 0
ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
@@ -1235,11 +1235,11 @@ ApplyPersonFacing: ; 0x9728b
dec bc
ld a, b
or c
- jr nz, .loop ; 0x972cb $f8
+ jr nz, .loop
ret
-; 0x972ce
+; 972ce
-Script_variablesprite: ; 0x972ce
+Script_variablesprite: ; 972ce
; script command 0x6d
; parameters:
; byte (SingleByteParam)
@@ -1253,9 +1253,9 @@ Script_variablesprite: ; 0x972ce
call GetScriptByte
ld [hl], a
ret
-; 0x972dd
+; 972dd
-Script_appear: ; 0x972dd
+Script_appear: ; 972dd
; script command 0x6f
; parameters:
; person (SingleByteParam)
@@ -1267,9 +1267,9 @@ Script_appear: ; 0x972dd
ld b, 0 ; clear
call ApplyEventActionAppearDisappear
ret
-; 0x972ee
+; 972ee
-Script_disappear: ; 0x972ee
+Script_disappear: ; 972ee
; script command 0x6e
; parameters:
; person (SingleByteParam)
@@ -1284,11 +1284,11 @@ Script_disappear: ; 0x972ee
ld a, [hMapObjectIndexBuffer]
ld b, 1 ; set
call ApplyEventActionAppearDisappear
- callba RefreshMapAppearDisappear
+ callba _UpdateSprites
ret
-; 0x9730b
+; 9730b
-ApplyEventActionAppearDisappear: ; 0x9730b
+ApplyEventActionAppearDisappear: ; 9730b
push bc
call GetMapObject
ld hl, MAPOBJECT_EVENT_FLAG
@@ -1299,17 +1299,17 @@ ApplyEventActionAppearDisappear: ; 0x9730b
ld d, [hl]
ld a, -1
cp e
- jr nz, .okay ; 0x9731a $5
+ jr nz, .okay
cp d
- jr nz, .okay ; 0x9731d $2
+ jr nz, .okay
xor a
ret
.okay
call EventFlagAction
ret
-; 0x97325
+; 97325
-Script_follow: ; 0x97325
+Script_follow: ; 97325
; script command 0x70
; parameters:
; person2 (SingleByteParam)
@@ -1323,16 +1323,16 @@ Script_follow: ; 0x97325
ld c, a
callba StartFollow
ret
-; 0x9733a
+; 9733a
-Script_stopfollow: ; 0x9733a
+Script_stopfollow: ; 9733a
; script command 0x71
callba StopFollow
ret
-; 0x97341
+; 97341
-Script_moveperson: ; 0x97341
+Script_moveperson: ; 97341
; script command 0x72
; parameters:
; person (SingleByteParam)
@@ -1350,9 +1350,9 @@ Script_moveperson: ; 0x97341
ld e, a
callba CopyDECoordsToMapObject
ret
-; 0x9735b
+; 9735b
-Script_writepersonxy: ; 0x9735b
+Script_writepersonxy: ; 9735b
; script command 0x73
; parameters:
; person (SingleByteParam)
@@ -1366,9 +1366,9 @@ Script_writepersonxy: ; 0x9735b
ld b, a
callba WritePersonXY
ret
-; 0x9736f
+; 9736f
-Script_follownotexact: ; 0x9736f
+Script_follownotexact: ; 9736f
; script command 0x77
; parameters:
; person2 (SingleByteParam)
@@ -1382,24 +1382,24 @@ Script_follownotexact: ; 0x9736f
ld c, a
callba FollowNotExact
ret
-; 0x97384
+; 97384
-Script_loademote: ; 0x97384
+Script_loademote: ; 97384
; script command 0x74
; parameters:
; bubble (SingleByteParam)
call GetScriptByte
cp -1
- jr nz, .not_var_emote ; 0x97389 $3
+ jr nz, .not_var_emote
ld a, [ScriptVar]
.not_var_emote
ld c, a
callba LoadEmote
ret
-; 0x97396
+; 97396
-Script_showemote: ; 0x97396
+Script_showemote: ; 97396
; script command 0x75
; parameters:
; bubble (SingleByteParam)
@@ -1419,7 +1419,7 @@ Script_showemote: ; 0x97396
ld b, BANK(ShowEmoteScript)
ld de, ShowEmoteScript
jp ScriptCall
-; 0x973b6
+; 973b6
ShowEmoteScript: ; 973b6
loademote EMOTE_MEM
@@ -1440,7 +1440,7 @@ ShowEmoteScript: ; 973b6
; 973c7
-Script_earthquake: ; 0x973c7
+Script_earthquake: ; 973c7
; script command 0x78
; parameters:
; param (DecimalParam)
@@ -1456,7 +1456,7 @@ Script_earthquake: ; 0x973c7
ld b, BANK(.script)
ld de, .script
jp ScriptCall
-; 0x973e6
+; 973e6
.script: ; 973e6
applymovement PLAYER, wd002
@@ -1471,7 +1471,7 @@ EarthquakeMovementEnd
; 973f0
-Script_loadpikachudata: ; 0x973f0
+Script_loadpikachudata: ; 973f0
; script command 0x5a
ld a, PIKACHU
@@ -1479,59 +1479,59 @@ Script_loadpikachudata: ; 0x973f0
ld a, 5
ld [CurPartyLevel], a
ret
-; 0x973fb
+; 973fb
-Script_battlecheck: ; 0x973fb
+Script_battlecheck: ; 973fb
; script command 0x5b
xor a
- ld [wd459], a
+ ld [wBattleScriptFlags], a
ret
-; 0x97400
+; 97400
-Script_loadtrainerdata: ; 0x97400
+Script_loadtrainerdata: ; 97400
; script command 0x5c
ld a, (1 << 7) | 1
- ld [wd459], a
+ ld [wBattleScriptFlags], a
ld a, [WalkingDirection]
ld [OtherTrainerClass], a
ld a, [FacingDirection]
ld [OtherTrainerID], a
ret
-; 0x97412
+; 97412
-Script_loadpokedata: ; 0x97412
+Script_loadpokedata: ; 97412
; script command 0x5d
; parameters:
; pokemon (PokemonParam)
; level (DecimalParam)
ld a, (1 << 7)
- ld [wd459], a
+ ld [wBattleScriptFlags], a
call GetScriptByte
ld [TempWildMonSpecies], a
call GetScriptByte
ld [CurPartyLevel], a
ret
-; 0x97424
+; 97424
-Script_loadtrainer: ; 0x97424
+Script_loadtrainer: ; 97424
; script command 0x5e
; parameters:
; trainer_group (TrainerGroupParam)
; trainer_id (TrainerIdParam)
ld a, (1 << 7) | 1
- ld [wd459], a
+ ld [wBattleScriptFlags], a
call GetScriptByte
ld [OtherTrainerClass], a
call GetScriptByte
ld [OtherTrainerID], a
ret
-; 0x97436
+; 97436
-Script_startbattle: ; 0x97436
+Script_startbattle: ; 97436
; script command 0x5f
call BufferScreen
@@ -1540,9 +1540,9 @@ Script_startbattle: ; 0x97436
and $3f
ld [ScriptVar], a
ret
-; 0x97447
+; 97447
-Script_catchtutorial: ; 0x97447
+Script_catchtutorial: ; 97447
; script command 0x61
; parameters:
; byte (SingleByteParam)
@@ -1552,53 +1552,53 @@ Script_catchtutorial: ; 0x97447
call BufferScreen
callba CatchTutorial
jp Script_reloadmap
-; 0x97459
+; 97459
-Script_returnafterbattle: ; 0x97459
+Script_returnafterbattle: ; 97459
; script command 0x60
- ld hl, wd459
+ ld hl, wBattleScriptFlags
ld d, [hl]
ld [hl], $0
ld a, [wBattleResult]
and $3f
cp $1
- jr nz, .notblackedout ; 0x97466 $8
+ jr nz, .notblackedout
ld b, BANK(Script_BattleWhiteout)
ld hl, Script_BattleWhiteout
jp ScriptJump
.notblackedout
bit 0, d
- jr z, .was_wild ; 0x97472 $8
+ jr z, .was_wild
callba MomTriesToBuySomething
- jr .done ; 0x9747a $12
+ jr .done
.was_wild
ld a, [wBattleResult]
bit 7, a
- jr z, .done ; 0x97481 $b
+ jr z, .done
ld b, BANK(Script_SpecialBillCall)
ld de, Script_SpecialBillCall
callba LoadScriptBDE
.done
jp Script_reloadmap
-; 0x97491
+; 97491
-Script_reloadmap: ; 0x97491
+Script_reloadmap: ; 97491
; script command 0x7b
xor a
- ld [wd459], a
+ ld [wBattleScriptFlags], a
ld a, MAPSETUP_RELOADMAP
ld [hMapEntryMethod], a
ld a, $1
call LoadMapStatus
call StopScript
ret
-; 0x974a2
+; 974a2
-Script_2call: ; 0x974a2
+Script_scall: ; 974a2
; script command 0x0
; parameters:
; pointer (ScriptPointerLabelParam)
@@ -1610,9 +1610,9 @@ Script_2call: ; 0x974a2
call GetScriptByte
ld d, a
jr ScriptCall
-; 0x974b0
+; 974b0
-Script_3call: ; 0x974b0
+Script_farscall: ; 974b0
; script command 0x1
; parameters:
; pointer (ScriptPointerLabelBeforeBank)
@@ -1624,9 +1624,9 @@ Script_3call: ; 0x974b0
call GetScriptByte
ld d, a
jr ScriptCall
-; 0x974be
+; 974be
-Script_2ptcall: ; 0x974be
+Script_ptcall: ; 974be
; script command 0x2
; parameters:
; pointer (PointerLabelToScriptPointer)
@@ -1642,13 +1642,19 @@ Script_2ptcall: ; 0x974be
ld d, [hl]
; fallthrough
-ScriptCall: ; 0x974cb
+ScriptCall: ; 974cb
+; Bug: The script stack has a capacity of 5 scripts, yet there is
+; nothing to stop you from pushing a sixth script. The high part
+; of the script address can then be overwritten by modifications
+; to ScriptDelay, causing the script to return to the rst/interrupt
+; space.
+
push de
- ld hl, wd43c
+ ld hl, wScriptStackSize
ld e, [hl]
inc [hl]
ld d, $0
- ld hl, wd43d
+ ld hl, wScriptStackBA1
rept 3
add hl, de
endr
@@ -1666,16 +1672,16 @@ endr
ld a, d
ld [ScriptPos + 1], a
ret
-; 0x974f3
+; 974f3
-CallCallback:: ; 0x974f3
+CallCallback:: ; 974f3
ld a, [ScriptBank]
or $80
ld [ScriptBank], a
jp ScriptCall
-; 0x974fe
+; 974fe
-Script_2jump: ; 0x974fe
+Script_jump: ; 974fe
; script command 0x3
; parameters:
; pointer (ScriptPointerLabelParam)
@@ -1687,9 +1693,9 @@ Script_2jump: ; 0x974fe
ld a, [ScriptBank]
ld b, a
jp ScriptJump
-; 0x9750d
+; 9750d
-Script_3jump: ; 0x9750d
+Script_farjump: ; 9750d
; script command 0x4
; parameters:
; pointer (ScriptPointerLabelBeforeBank)
@@ -1701,9 +1707,9 @@ Script_3jump: ; 0x9750d
call GetScriptByte
ld h, a
jp ScriptJump
-; 0x9751c
+; 9751c
-Script_2ptjump: ; 0x9751c
+Script_ptjump: ; 9751c
; script command 0x5
; parameters:
; pointer (PointerLabelToScriptPointer)
@@ -1718,9 +1724,9 @@ Script_2ptjump: ; 0x9751c
ld h, [hl]
ld l, a
jp ScriptJump
-; 0x9752c
+; 9752c
-Script_iffalse: ; 0x9752c
+Script_iffalse: ; 9752c
; script command 0x8
; parameters:
; pointer (ScriptPointerLabelParam)
@@ -1728,21 +1734,21 @@ Script_iffalse: ; 0x9752c
ld a, [ScriptVar]
and a
jp nz, SkipTwoScriptBytes
- jp Script_2jump
-; 0x97536
+ jp Script_jump
+; 97536
-Script_iftrue: ; 0x97536
+Script_iftrue: ; 97536
; script command 0x9
; parameters:
; pointer (ScriptPointerLabelParam)
ld a, [ScriptVar]
and a
- jp nz, Script_2jump
+ jp nz, Script_jump
jp SkipTwoScriptBytes
-; 0x97540
+; 97540
-Script_if_equal: ; 0x97540
+Script_if_equal: ; 97540
; script command 0x6
; parameters:
; byte (SingleByteParam)
@@ -1751,11 +1757,11 @@ Script_if_equal: ; 0x97540
call GetScriptByte
ld hl, ScriptVar
cp [hl]
- jr z, Script_2jump ; 0x97547 $b5
- jr SkipTwoScriptBytes ; 0x97549 $4b
-; 0x9754b
+ jr z, Script_jump
+ jr SkipTwoScriptBytes
+; 9754b
-Script_if_not_equal: ; 0x9754b
+Script_if_not_equal: ; 9754b
; script command 0x7
; parameters:
; byte (SingleByteParam)
@@ -1764,11 +1770,11 @@ Script_if_not_equal: ; 0x9754b
call GetScriptByte
ld hl, ScriptVar
cp [hl]
- jr nz, Script_2jump ; 0x97552 $aa
- jr SkipTwoScriptBytes ; 0x97554 $40
-; 0x97556
+ jr nz, Script_jump
+ jr SkipTwoScriptBytes
+; 97556
-Script_if_greater_than: ; 0x97556
+Script_if_greater_than: ; 97556
; script command 0xa
; parameters:
; byte (SingleByteParam)
@@ -1778,11 +1784,11 @@ Script_if_greater_than: ; 0x97556
ld b, a
call GetScriptByte
cp b
- jr c, Script_2jump ; 0x9755e $9e
- jr SkipTwoScriptBytes ; 0x97560 $34
-; 0x97562
+ jr c, Script_jump
+ jr SkipTwoScriptBytes
+; 97562
-Script_if_less_than: ; 0x97562
+Script_if_less_than: ; 97562
; script command 0xb
; parameters:
; byte (SingleByteParam)
@@ -1792,20 +1798,20 @@ Script_if_less_than: ; 0x97562
ld b, a
ld a, [ScriptVar]
cp b
- jr c, Script_2jump ; 0x9756a $92
- jr SkipTwoScriptBytes ; 0x9756c $28
-; 0x9756e
+ jr c, Script_jump
+ jr SkipTwoScriptBytes
+; 9756e
-Script_jumpstd: ; 0x9756e
+Script_jumpstd: ; 9756e
; script command 0xc
; parameters:
; predefined_script (MultiByteParam)
call StdScript
- jr ScriptJump ; 0x97571 $2a
-; 0x97573
+ jr ScriptJump
+; 97573
-Script_callstd: ; 0x97573
+Script_callstd: ; 97573
; script command 0xd
; parameters:
; predefined_script (MultiByteParam)
@@ -1814,9 +1820,9 @@ Script_callstd: ; 0x97573
ld d, h
ld e, l
jp ScriptCall
-; 0x9757b
+; 9757b
-StdScript: ; 0x9757b
+StdScript: ; 9757b
call GetScriptByte
ld e, a
call GetScriptByte
@@ -1832,15 +1838,15 @@ endr
ld a, BANK(StdScripts)
call GetFarHalfword
ret
-; 0x97596
+; 97596
-SkipTwoScriptBytes: ; 0x97596
+SkipTwoScriptBytes: ; 97596
call GetScriptByte
call GetScriptByte
ret
-; 0x9759d
+; 9759d
-ScriptJump: ; 0x9759d
+ScriptJump: ; 9759d
ld a, b
ld [ScriptBank], a
ld a, l
@@ -1848,9 +1854,9 @@ ScriptJump: ; 0x9759d
ld a, h
ld [ScriptPos + 1], a
ret
-; 0x975aa
+; 975aa
-Script_priorityjump: ; 0x975aa
+Script_priorityjump: ; 975aa
; script command 0x8d
; parameters:
; pointer (ScriptPointerLabelParam)
@@ -1864,22 +1870,23 @@ Script_priorityjump: ; 0x975aa
ld hl, ScriptFlags
set 3, [hl]
ret
-; 0x975c2
+; 975c2
-Script_checktriggers: ; 0x975c2
+Script_checktriggers: ; 975c2
; script command 0x13
call CheckTriggers
- jr z, .asm_975cb ; 0x975c5 $4
+ jr z, .no_triggers
ld [ScriptVar], a
ret
-.asm_975cb
+
+.no_triggers
ld a, $ff
ld [ScriptVar], a
ret
-; 0x975d1
+; 975d1
-Script_checkmaptriggers: ; 0x975d1
+Script_checkmaptriggers: ; 975d1
; script command 0x11
; parameters:
; map_group (SingleByteParam)
@@ -1892,17 +1899,18 @@ Script_checkmaptriggers: ; 0x975d1
call GetMapTrigger
ld a, d
or e
- jr z, .asm_975e5 ; 0x975de $5
+ jr z, .no_triggers
ld a, [de]
ld [ScriptVar], a
ret
-.asm_975e5
+
+.no_triggers
ld a, $ff
ld [ScriptVar], a
ret
-; 0x975eb
+; 975eb
-Script_dotrigger: ; 0x975eb
+Script_dotrigger: ; 975eb
; script command 0x14
; parameters:
; trigger_id (SingleByteParam)
@@ -1911,10 +1919,10 @@ Script_dotrigger: ; 0x975eb
ld b, a
ld a, [MapNumber]
ld c, a
- jr Unknown_975fd ; 0x975f3 $8
-; 0x975f5
+ jr DoTrigger
+; 975f5
-Script_domaptrigger: ; 0x975f5
+Script_domaptrigger: ; 975f5
; script command 0x12
; parameters:
; map_group (MapGroupParam)
@@ -1925,20 +1933,18 @@ Script_domaptrigger: ; 0x975f5
ld b, a
call GetScriptByte
ld c, a
- ; fallthrough
-
-Unknown_975fd: ; 0x975fd
+DoTrigger: ; 975fd
call GetMapTrigger
ld a, d
or e
- jr z, .asm_97608 ; 0x97602 $4
+ jr z, .no_trigger
call GetScriptByte
ld [de], a
-.asm_97608
+.no_trigger
ret
-; 0x97609
+; 97609
-Script_copybytetovar: ; 0x97609
+Script_copybytetovar: ; 97609
; script command 0x19
; parameters:
; address (RAMAddressParam)
@@ -1950,9 +1956,9 @@ Script_copybytetovar: ; 0x97609
ld a, [hl]
ld [ScriptVar], a
ret
-; 0x97616
+; 97616
-Script_copyvartobyte: ; 0x97616
+Script_copyvartobyte: ; 97616
; script command 0x1a
; parameters:
; address (RAMAddressParam)
@@ -1964,9 +1970,9 @@ Script_copyvartobyte: ; 0x97616
ld a, [ScriptVar]
ld [hl], a
ret
-; 0x97623
+; 97623
-Script_loadvar: ; 0x97623
+Script_loadvar: ; 97623
; script command 0x1b
; parameters:
; address (RAMAddressParam)
@@ -1979,9 +1985,9 @@ Script_loadvar: ; 0x97623
call GetScriptByte
ld [hl], a
ret
-; 0x97630
+; 97630
-Script_writebyte: ; 0x97630
+Script_writebyte: ; 97630
; script command 0x15
; parameters:
; value (SingleByteParam)
@@ -1989,9 +1995,9 @@ Script_writebyte: ; 0x97630
call GetScriptByte
ld [ScriptVar], a
ret
-; 0x97637
+; 97637
-Script_addvar: ; 0x97637
+Script_addvar: ; 97637
; script command 0x16
; parameters:
; value (SingleByteParam)
@@ -2001,9 +2007,9 @@ Script_addvar: ; 0x97637
add [hl]
ld [hl], a
ret
-; 0x97640
+; 97640
-Script_random: ; 0x97640
+Script_random: ; 97640
; script command 0x17
; parameters:
; input (SingleByteParam)
@@ -2012,28 +2018,31 @@ Script_random: ; 0x97640
ld [ScriptVar], a
and a
ret z
+
ld c, a
- call Function97673
+ call .Divide256byC
and a
- jr z, .asm_9765f ; 0x9764d $10
+ jr z, .no_restriction ; 256 % b == 0
ld b, a
xor a
sub b
ld b, a
-.asm_97653
+.loop
push bc
call Random
pop bc
- ld a, [$ffe1]
+ ld a, [hRandomAdd]
cp b
- jr nc, .asm_97653 ; 0x9765b $f6
- jr .asm_97666 ; 0x9765d $7
-.asm_9765f
+ jr nc, .loop
+ jr .finish
+
+.no_restriction
push bc
call Random
pop bc
- ld a, [$ffe1]
-.asm_97666
+ ld a, [hRandomAdd]
+
+.finish
push af
ld a, [ScriptVar]
ld c, a
@@ -2041,22 +2050,22 @@ Script_random: ; 0x97640
call SimpleDivide
ld [ScriptVar], a
ret
-; 0x97673
+; 97673
-Function97673: ; 0x97673
+.Divide256byC: ; 97673
xor a
ld b, a
sub c
-.asm_97676
+.mod_loop
inc b
sub c
- jr nc, .asm_97676 ; 0x97678 $fc
+ jr nc, .mod_loop
dec b
add c
ret
-; 0x9767d
+; 9767d
-Script_checkcode: ; 0x9767d
+Script_checkcode: ; 9767d
; script command 0x1c
; parameters:
; variable_id (SingleByteParam)
@@ -2066,9 +2075,9 @@ Script_checkcode: ; 0x9767d
ld a, [de]
ld [ScriptVar], a
ret
-; 0x97688
+; 97688
-Script_writevarcode: ; 0x97688
+Script_writevarcode: ; 97688
; script command 0x1d
; parameters:
; variable_id (SingleByteParam)
@@ -2078,9 +2087,9 @@ Script_writevarcode: ; 0x97688
ld a, [ScriptVar]
ld [de], a
ret
-; 0x97693
+; 97693
-Script_writecode: ; 0x97693
+Script_writecode: ; 97693
; script command 0x1e
; parameters:
; variable_id (SingleByteParam)
@@ -2091,27 +2100,27 @@ Script_writecode: ; 0x97693
call GetScriptByte
ld [de], a
ret
-; 0x9769e
+; 9769e
-GetVarAction: ; 0x9769e
+GetVarAction: ; 9769e
ld c, a
callba _GetVarAction
ret
-; 0x976a6
+; 976a6
-Script_checkver: ; 0x976a6
+Script_checkver: ; 976a6
; script command 0x18
ld a, [Version]
ld [ScriptVar], a
ret
-; 0x976ad
+; 976ad
Version: ; 976ad
db VERSION
; 976ae
-Script_pokenamemem: ; 0x976ae
+Script_pokenamemem: ; 976ae
; script command 0x40
; parameters:
; pokemon (PokemonParam); leave $0 to draw from script var
@@ -2119,14 +2128,14 @@ Script_pokenamemem: ; 0x976ae
call GetScriptByte
and a
- jr nz, .gotit ; 0x976b2 $3
+ jr nz, .gotit
ld a, [ScriptVar]
.gotit
ld [wd265], a
call GetPokemonName
ld de, StringBuffer1
-ConvertMemToText: ; 0x976c0
+ConvertMemToText: ; 976c0
call GetScriptByte
cp 3
jr c, .ok
@@ -2139,26 +2148,26 @@ CopyConvertedText: ; 976c8
call AddNTimes
call CopyName2
ret
-; 0x976d5
+; 976d5
-Script_itemtotext: ; 0x976d5
+Script_itemtotext: ; 976d5
; script command 0x41
; parameters:
-; item (ItemLabelByte)
+; item (ItemLabelByte); use 0 to draw from ScriptVar
; memory (SingleByteParam)
call GetScriptByte
and a
- jr nz, .ok ; 0x976d9 $3
+ jr nz, .ok
ld a, [ScriptVar]
.ok
ld [wd265], a
call GetItemName
ld de, StringBuffer1
- jr ConvertMemToText ; 0x976e7 $d7
-; 0x976e9
+ jr ConvertMemToText
+; 976e9
-Script_mapnametotext: ; 0x976e9
+Script_mapnametotext: ; 976e9
; script command 0x42
; parameters:
; memory (SingleByteParam)
@@ -2169,24 +2178,24 @@ Script_mapnametotext: ; 0x976e9
ld c, a
call GetWorldMapLocation
-ConvertLandmarkToText: ; 0x976f4
+ConvertLandmarkToText: ; 976f4
ld e, a
callba GetLandmarkName
ld de, StringBuffer1
jp ConvertMemToText
-; 0x97701
+; 97701
-Script_displaylocation: ; 0x97701
+Script_displaylocation: ; 97701
; script command 0xa5
; parameters:
; id (SingleByteParam)
; memory (SingleByteParam)
call GetScriptByte
- jr ConvertLandmarkToText ; 0x97704 $ee
-; 0x97706
+ jr ConvertLandmarkToText
+; 97706
-Script_trainertotext: ; 0x97706
+Script_trainertotext: ; 97706
; script command 0x43
; parameters:
; trainer_id (TrainerGroupParam)
@@ -2198,10 +2207,10 @@ Script_trainertotext: ; 0x97706
call GetScriptByte
ld b, a
callba GetTrainerName
- jr ConvertMemToText ; 0x97714 $aa
-; 0x97716
+ jr ConvertMemToText
+; 97716
-Script_name: ; 0x97716
+Script_name: ; 97716
; script command 0xa7
; parameters:
; type (SingleByteParam)
@@ -2211,15 +2220,15 @@ Script_name: ; 0x97716
call GetScriptByte
ld [wNamedObjectTypeBuffer], a
-ContinueToGetName: ; 0x9771c
+ContinueToGetName: ; 9771c
call GetScriptByte
ld [CurSpecies], a
call GetName
ld de, StringBuffer1
jp ConvertMemToText
-; 0x9772b
+; 9772b
-Script_trainerclassname: ; 0x9772b
+Script_trainerclassname: ; 9772b
; script command 0xa6
; parameters:
; id (SingleByteParam)
@@ -2227,10 +2236,10 @@ Script_trainerclassname: ; 0x9772b
ld a, TRAINER_NAME
ld [wNamedObjectTypeBuffer], a
- jr ContinueToGetName ; 0x97730 $ea
-; 0x97732
+ jr ContinueToGetName
+; 97732
-Script_readmoney: ; 0x97732
+Script_readmoney: ; 97732
; script command 0x3d
; parameters:
; account (SingleByteParam)
@@ -2243,9 +2252,9 @@ Script_readmoney: ; 0x97732
call PrintNum
ld de, StringBuffer1
jp ConvertMemToText
-; 0x97747
+; 97747
-Script_readcoins: ; 0x97747
+Script_readcoins: ; 97747
; script command 0x3e
; parameters:
; memory (SingleByteParam)
@@ -2257,9 +2266,9 @@ Script_readcoins: ; 0x97747
call PrintNum
ld de, StringBuffer1
jp ConvertMemToText
-; 0x9775c
+; 9775c
-Script_RAM2MEM: ; 0x9775c
+Script_RAM2MEM: ; 9775c
; script command 0x3f
; parameters:
; memory (SingleByteParam)
@@ -2271,17 +2280,17 @@ Script_RAM2MEM: ; 0x9775c
call PrintNum
ld de, StringBuffer1
jp ConvertMemToText
-; 0x97771
+; 97771
-ResetStringBuffer1: ; 0x97771
+ResetStringBuffer1: ; 97771
ld hl, StringBuffer1
ld bc, NAME_LENGTH
ld a, "@"
call ByteFill
ret
-; 0x9777d
+; 9777d
-Script_stringtotext: ; 0x9777d
+Script_stringtotext: ; 9777d
; script command 0x44
; parameters:
; text_pointer (EncodedTextLabelParam)
@@ -2296,9 +2305,9 @@ Script_stringtotext: ; 0x9777d
rst FarCall
ld de, StringBuffer2
jp ConvertMemToText
-; 0x97792
+; 97792
-Script_givepokeitem: ; 0x97792
+Script_givepokeitem: ; 97792
; script command 0x2f
; parameters:
; pointer (PointerParamToItemAndLetter)
@@ -2319,9 +2328,9 @@ Script_givepokeitem: ; 0x97792
pop bc
callba GivePokeItem
ret
-; 0x977b7
+; 977b7
-Script_checkpokeitem: ; 0x977b7
+Script_checkpokeitem: ; 977b7
; script command 0x30
; parameters:
; pointer (PointerParamToItemAndLetter)
@@ -2332,11 +2341,11 @@ Script_checkpokeitem: ; 0x977b7
ld d, a
ld a, [ScriptBank]
ld b, a
- callba Function44654
+ callba CheckPokeItem
ret
-; 0x977ca
+; 977ca
-Script_giveitem: ; 0x977ca
+Script_giveitem: ; 977ca
; script command 0x1f
; parameters:
; item (ItemLabelByte)
@@ -2344,7 +2353,7 @@ Script_giveitem: ; 0x977ca
call GetScriptByte
cp ITEM_FROM_MEM
- jr nz, .ok ; 0x977cf $3
+ jr nz, .ok
ld a, [ScriptVar]
.ok
ld [CurItem], a
@@ -2352,7 +2361,7 @@ Script_giveitem: ; 0x977ca
ld [wItemQuantityChangeBuffer], a
ld hl, NumItems
call ReceiveItem
- jr nc, .full ; 0x977e3 $6
+ jr nc, .full
ld a, $1
ld [ScriptVar], a
ret
@@ -2360,9 +2369,9 @@ Script_giveitem: ; 0x977ca
xor a
ld [ScriptVar], a
ret
-; 0x977f0
+; 977f0
-Script_takeitem: ; 0x977f0
+Script_takeitem: ; 977f0
; script command 0x20
; parameters:
; item (ItemLabelByte)
@@ -2382,9 +2391,9 @@ Script_takeitem: ; 0x977f0
ld a, $1
ld [ScriptVar], a
ret
-; 0x97812
+; 97812
-Script_checkitem: ; 0x97812
+Script_checkitem: ; 97812
; script command 0x21
; parameters:
; item (ItemLabelByte)
@@ -2399,9 +2408,9 @@ Script_checkitem: ; 0x97812
ld a, 1
ld [ScriptVar], a
ret
-; 0x97829
+; 97829
-Script_givemoney: ; 0x97829
+Script_givemoney: ; 97829
; script command 0x22
; parameters:
; account (SingleByteParam)
@@ -2411,9 +2420,9 @@ Script_givemoney: ; 0x97829
call LoadMoneyAmountToMem
callba GiveMoney
ret
-; 0x97836
+; 97836
-Script_takemoney: ; 0x97836
+Script_takemoney: ; 97836
; script command 0x23
; parameters:
; account (SingleByteParam)
@@ -2423,9 +2432,9 @@ Script_takemoney: ; 0x97836
call LoadMoneyAmountToMem
callba TakeMoney
ret
-; 0x97843
+; 97843
-Script_checkmoney: ; 0x97843
+Script_checkmoney: ; 97843
; script command 0x24
; parameters:
; account (SingleByteParam)
@@ -2434,9 +2443,9 @@ Script_checkmoney: ; 0x97843
call GetMoneyAccount
call LoadMoneyAmountToMem
callba CompareMoney
-; 0x9784f
+; 9784f
-CompareMoneyAction: ; 0x9784f
+CompareMoneyAction: ; 9784f
jr c, .two
jr z, .one
ld a, 0
@@ -2449,18 +2458,18 @@ CompareMoneyAction: ; 0x9784f
.done
ld [ScriptVar], a
ret
-; 0x97861
+; 97861
-GetMoneyAccount: ; 0x97861
+GetMoneyAccount: ; 97861
call GetScriptByte
and a
ld de, Money
ret z
ld de, wMomsMoney
ret
-; 0x9786d
+; 9786d
-LoadMoneyAmountToMem: ; 0x9786d
+LoadMoneyAmountToMem: ; 9786d
ld bc, hMoneyTemp
push bc
call GetScriptByte
@@ -2473,9 +2482,9 @@ LoadMoneyAmountToMem: ; 0x9786d
ld [bc], a
pop bc
ret
-; 0x97881
+; 97881
-Script_givecoins: ; 0x97881
+Script_givecoins: ; 97881
; script command 0x25
; parameters:
; coins (CoinByteParam)
@@ -2483,9 +2492,9 @@ Script_givecoins: ; 0x97881
call LoadCoinAmountToMem
callba GiveCoins
ret
-; 0x9788b
+; 9788b
-Script_takecoins: ; 0x9788b
+Script_takecoins: ; 9788b
; script command 0x26
; parameters:
; coins (CoinByteParam)
@@ -2493,9 +2502,9 @@ Script_takecoins: ; 0x9788b
call LoadCoinAmountToMem
callba TakeCoins
ret
-; 0x97895
+; 97895
-Script_checkcoins: ; 0x97895
+Script_checkcoins: ; 97895
; script command 0x27
; parameters:
; coins (CoinByteParam)
@@ -2512,9 +2521,9 @@ LoadCoinAmountToMem: ; 978a0
ld [hMoneyTemp], a
ld bc, hMoneyTemp
ret
-; 0x978ae
+; 978ae
-Script_checktime: ; 0x978ae
+Script_checktime: ; 978ae
; script command 0x2b
; parameters:
; time (SingleByteParam)
@@ -2528,9 +2537,9 @@ Script_checktime: ; 0x978ae
ld a, $1
ld [ScriptVar], a
ret
-; 0x978c3
+; 978c3
-Script_checkpoke: ; 0x978c3
+Script_checkpoke: ; 978c3
; script command 0x2c
; parameters:
; pkmn (PokemonParam)
@@ -2545,9 +2554,9 @@ Script_checkpoke: ; 0x978c3
ld a, 1
ld [ScriptVar], a
ret
-; 0x978da
+; 978da
-Script_addcellnum: ; 0x978da
+Script_addcellnum: ; 978da
; script command 0x28
; parameters:
; person (SingleByteParam)
@@ -2561,9 +2570,9 @@ Script_addcellnum: ; 0x978da
ld a, $1
ld [ScriptVar], a
ret
-; 0x978ef
+; 978ef
-Script_delcellnum: ; 0x978ef
+Script_delcellnum: ; 978ef
; script command 0x29
; parameters:
; person (SingleByteParam)
@@ -2577,9 +2586,9 @@ Script_delcellnum: ; 0x978ef
ld a, $1
ld [ScriptVar], a
ret
-; 0x97904
+; 97904
-Script_checkcellnum: ; 0x97904
+Script_checkcellnum: ; 97904
; script command 0x2a
; parameters:
; person (SingleByteParam)
@@ -2594,9 +2603,9 @@ Script_checkcellnum: ; 0x97904
ld a, $1
ld [ScriptVar], a
ret
-; 0x97919
+; 97919
-Script_specialphonecall: ; 0x97919
+Script_specialphonecall: ; 97919
; script command 0x9c
; parameters:
; call_id (MultiByteParam)
@@ -2606,9 +2615,9 @@ Script_specialphonecall: ; 0x97919
call GetScriptByte
ld [wSpecialPhoneCallID + 1], a
ret
-; 0x97926
+; 97926
-Script_checkphonecall: ; 0x97926
+Script_checkphonecall: ; 97926
; script command 0x9d
; returns false if no special phone call is stored
@@ -2619,9 +2628,9 @@ Script_checkphonecall: ; 0x97926
.ok
ld [ScriptVar], a
ret
-; 0x97932
+; 97932
-Script_givepoke: ; 0x97932
+Script_givepoke: ; 97932
; script command 0x2d
; parameters:
; pokemon (PokemonParam)
@@ -2654,9 +2663,9 @@ Script_givepoke: ; 0x97932
ld a, b
ld [ScriptVar], a
ret
-; 0x97968
+; 97968
-Script_giveegg: ; 0x97968
+Script_giveegg: ; 97968
; script command 0x2e
; parameters:
; pkmn (PokemonParam)
@@ -2675,9 +2684,9 @@ Script_giveegg: ; 0x97968
ld a, 2
ld [ScriptVar], a
ret
-; 0x97988
+; 97988
-Script_setevent: ; 0x97988
+Script_setevent: ; 97988
; script command 0x33
; parameters:
; bit_number (MultiByteParam)
@@ -2689,9 +2698,9 @@ Script_setevent: ; 0x97988
ld b, SET_FLAG
call EventFlagAction
ret
-; 0x97996
+; 97996
-Script_clearevent: ; 0x97996
+Script_clearevent: ; 97996
; script command 0x32
; parameters:
; bit_number (MultiByteParam)
@@ -2703,9 +2712,9 @@ Script_clearevent: ; 0x97996
ld b, RESET_FLAG
call EventFlagAction
ret
-; 0x979a4
+; 979a4
-Script_checkevent: ; 0x979a4
+Script_checkevent: ; 979a4
; script command 0x31
; parameters:
; bit_number (MultiByteParam)
@@ -2718,14 +2727,14 @@ Script_checkevent: ; 0x979a4
call EventFlagAction
ld a, c
and a
- jr z, .false ; 0x979b3 $2
+ jr z, .false
ld a, 1
.false
ld [ScriptVar], a
ret
-; 0x979bb
+; 979bb
-Script_setflag: ; 0x979bb
+Script_setflag: ; 979bb
; script command 0x36
; parameters:
; bit_number (MultiByteParam)
@@ -2737,9 +2746,9 @@ Script_setflag: ; 0x979bb
ld b, 1 ; set
call _EngineFlagAction
ret
-; 0x979c9
+; 979c9
-Script_clearflag: ; 0x979c9
+Script_clearflag: ; 979c9
; script command 0x35
; parameters:
; bit_number (MultiByteParam)
@@ -2751,9 +2760,9 @@ Script_clearflag: ; 0x979c9
ld b, 0 ; clear
call _EngineFlagAction
ret
-; 0x979d7
+; 979d7
-Script_checkflag: ; 0x979d7
+Script_checkflag: ; 979d7
; script command 0x34
; parameters:
; bit_number (MultiByteParam)
@@ -2766,35 +2775,35 @@ Script_checkflag: ; 0x979d7
call _EngineFlagAction
ld a, c
and a
- jr z, .false ; 0x979e6 $2
+ jr z, .false
ld a, 1
.false
ld [ScriptVar], a
ret
-; 0x979ee
+; 979ee
-_EngineFlagAction: ; 0x979ee
+_EngineFlagAction: ; 979ee
callba EngineFlagAction
ret
-; 0x979f5
+; 979f5
-Script_wildoff: ; 0x979f5
+Script_wildoff: ; 979f5
; script command 0x38
ld hl, StatusFlags
set 5, [hl]
ret
-; 0x979fb
+; 979fb
-Script_wildon: ; 0x979fb
+Script_wildon: ; 979fb
; script command 0x37
ld hl, StatusFlags
res 5, [hl]
ret
-; 0x97a01
+; 97a01
-Script_xycompare: ; 0x97a01
+Script_xycompare: ; 97a01
; script command 0x39
; parameters:
; pointer (MultiByteParam)
@@ -2804,9 +2813,9 @@ Script_xycompare: ; 0x97a01
call GetScriptByte
ld [wd454], a
ret
-; 0x97a0e
+; 97a0e
-Script_warpfacing: ; 0x97a0e
+Script_warpfacing: ; 97a0e
; script command 0xa3
; parameters:
; facing (SingleByteParam)
@@ -2824,7 +2833,7 @@ Script_warpfacing: ; 0x97a0e
ld [wPlayerSpriteSetupFlags], a
; fall through
-Script_warp: ; 0x97a1d
+Script_warp: ; 97a1d
; script command 0x3c
; parameters:
; map_group (MapGroupParam)
@@ -2835,7 +2844,7 @@ Script_warp: ; 0x97a1d
; This seems to be some sort of error handling case.
call GetScriptByte
and a
- jr z, .not_ok ; 0x97a21 $27
+ jr z, .not_ok
ld [MapGroup], a
call GetScriptByte
ld [MapNumber], a
@@ -2864,9 +2873,9 @@ Script_warp: ; 0x97a1d
call LoadMapStatus
call StopScript
ret
-; 0x97a65
+; 97a65
-Script_warpmod: ; 0x97a65
+Script_warpmod: ; 97a65
; script command 0x3a
; parameters:
; warp_id (SingleByteParam)
@@ -2880,9 +2889,9 @@ Script_warpmod: ; 0x97a65
call GetScriptByte
ld [BackupMapNumber], a
ret
-; 0x97a78
+; 97a78
-Script_blackoutmod: ; 0x97a78
+Script_blackoutmod: ; 97a78
; script command 0x3b
; parameters:
; map_group (MapGroupParam)
@@ -2893,17 +2902,17 @@ Script_blackoutmod: ; 0x97a78
call GetScriptByte
ld [wLastSpawnMapNumber], a
ret
-; 0x97a85
+; 97a85
-Script_reloadmapmusic: ; 0x97a85
+Script_reloadmapmusic: ; 97a85
; script command 0x83
ld a, 1
ld [wc2c1], a
ret
-; 0x97a8b
+; 97a8b
-Script_writecmdqueue: ; 0x97a8b
+Script_writecmdqueue: ; 97a8b
; script command 0x7d
; parameters:
; queue_pointer (MultiByteParam)
@@ -2914,11 +2923,11 @@ Script_writecmdqueue: ; 0x97a8b
ld d, a
ld a, [ScriptBank]
ld b, a
- callba Function97e31
+ callba WriteCmdQueue ; no need to farcall
ret
-; 0x97a9e
+; 97a9e
-Script_delcmdqueue: ; 0x97a9e
+Script_delcmdqueue: ; 97a9e
; script command 0x7e
; parameters:
; byte (SingleByteParam)
@@ -2927,14 +2936,14 @@ Script_delcmdqueue: ; 0x97a9e
ld [ScriptVar], a
call GetScriptByte
ld b, a
- callba Function97e5c
+ callba DelCmdQueue ; no need to farcall
ret c
ld a, 1
ld [ScriptVar], a
ret
-; 0x97ab3
+; 97ab3
-Script_changemap: ; 0x97ab3
+Script_changemap: ; 97ab3
; script command 0x79
; parameters:
; map_data_pointer (MapDataPointerParam)
@@ -2948,9 +2957,9 @@ Script_changemap: ; 0x97ab3
call ChangeMap
call BufferScreen
ret
-; 0x97acc
+; 97acc
-Script_changeblock: ; 0x97acc
+Script_changeblock: ; 97acc
; script command 0x7a
; parameters:
; x (SingleByteParam)
@@ -2968,35 +2977,35 @@ Script_changeblock: ; 0x97acc
ld [hl], a
call BufferScreen
ret
-; 0x97ae3
+; 97ae3
-Script_reloadmappart:: ; 0x97ae3
+Script_reloadmappart:: ; 97ae3
; script command 0x7c
xor a
ld [hBGMapMode], a
call OverworldTextModeSwitch
- call Function2914
- callba Function104061
+ call GetMovementPermissions
+ callba ReloadMapPart
call UpdateSprites
ret
-; 0x97af6
+; 97af6
-Script_warpcheck: ; 0x97af6
+Script_warpcheck: ; 97af6
; script command 0x8e
call WarpCheck
ret nc
- callba SetAll_ScriptFlags3
+ callba EnableEvents
ret
-; 0x97b01
+; 97b01
-Function97b01: ; 0x97b01
- callba SetAll_ScriptFlags3
+Script_enableevents: ; unreferenced
+ callba EnableEvents
ret
-; 0x97b08
+; 97b08
-Script_newloadmap: ; 0x97b08
+Script_newloadmap: ; 97b08
; script command 0x8a
; parameters:
; which_method (SingleByteParam)
@@ -3007,23 +3016,23 @@ Script_newloadmap: ; 0x97b08
call LoadMapStatus
call StopScript
ret
-; 0x97b16
+; 97b16
-Script_reloadandreturn: ; 0x97b16
+Script_reloadandreturn: ; 97b16
; script command 0x92
call Script_newloadmap
jp Script_end
-; 0x97b1c
+; 97b1c
-Script_loadfont: ; 0x97b1c
+Script_loadfont: ; 97b1c
; script command 0x47
call LoadFont
ret
-; 0x97b20
+; 97b20
-Script_refreshscreen: ; 0x97b20
+Script_refreshscreen: ; 97b20
; script command 0x48
; parameters:
; dummy (SingleByteParam)
@@ -3031,9 +3040,9 @@ Script_refreshscreen: ; 0x97b20
call ResetWindow
call GetScriptByte
ret
-; 0x97b27
+; 97b27
-Script_loadbytec1ce: ; 0x97b27
+Script_loadbytec2cf: ; 97b27
; script command 0x4a
; parameters:
; byte (SingleByteParam)
@@ -3041,23 +3050,23 @@ Script_loadbytec1ce: ; 0x97b27
call GetScriptByte
ld [wc2cf], a
ret
-; 0x97b2e
+; 97b2e
LoadMoveSpritesScript: ; 97b2e
loadmovesprites
; 97b2f
-Script_loadmovesprites: ; 0x97b2f
+Script_loadmovesprites: ; 97b2f
; script command 0x49
call Function2e20
call LoadMoveSprites
ret
-; 0x97b36
+; 97b36
-Script_passtoengine: ; 0x97b36
+Script_passtoengine: ; 97b36
; script command 0x89
; parameters:
; data_pointer (PointerLabelBeforeBank)
@@ -3071,52 +3080,52 @@ Script_passtoengine: ; 0x97b36
pop af
call StartAutoInput
ret
-; 0x97b47
+; 97b47
-Script_pause: ; 0x97b47
+Script_pause: ; 97b47
; script command 0x8b
; parameters:
; length (DecimalParam)
call GetScriptByte
and a
- jr z, .loop ; 0x97b4b $3
+ jr z, .loop
ld [ScriptDelay], a
.loop
ld c, 2
call DelayFrames
ld hl, ScriptDelay
dec [hl]
- jr nz, .loop ; 0x97b59 $f5
+ jr nz, .loop
ret
-; 0x97b5c
+; 97b5c
-Script_deactivatefacing: ; 0x97b5c
+Script_deactivatefacing: ; 97b5c
; script command 0x8c
; parameters:
; time (SingleByteParam)
call GetScriptByte
and a
- jr z, .no_time ; 0x97b60 $3
+ jr z, .no_time
ld [ScriptDelay], a
.no_time
ld a, SCRIPT_WAIT
ld [ScriptMode], a
call StopScript
ret
-; 0x97b6e
+; 97b6e
-Script_ptpriorityjump: ; 0x97b6e
+Script_ptpriorityjump: ; 97b6e
; script command 0x8f
; parameters:
; pointer (ScriptPointerLabelParam)
call StopScript
- jp Script_2jump
-; 0x97b74
+ jp Script_jump
+; 97b74
-Script_end: ; 0x97b74
+Script_end: ; 97b74
; script command 0x91
call ExitScriptSubroutine
@@ -3132,9 +3141,9 @@ Script_end: ; 0x97b74
res 0, [hl]
call StopScript
ret
-; 0x97b8c
+; 97b8c
-Script_return: ; 0x97b8c
+Script_return: ; 97b8c
; script command 0x90
call ExitScriptSubroutine
@@ -3144,19 +3153,19 @@ Script_return: ; 0x97b8c
res 0, [hl]
call StopScript
ret
-; 0x97b9a
+; 97b9a
-ExitScriptSubroutine: ; 0x97b9a
+ExitScriptSubroutine: ; 97b9a
; Return carry if there's no parent to return to.
- ld hl, wd43c
+ ld hl, wScriptStackSize
ld a, [hl]
and a
- jr z, .done ; 0x97b9f $1d
+ jr z, .done
dec [hl]
ld e, [hl]
ld d, $0
- ld hl, wd43d
+ ld hl, wScriptStackBA1
rept 3
add hl,de
endr
@@ -3175,13 +3184,13 @@ endr
.done
scf
ret
-; 0x97bc0
+; 97bc0
-Script_resetfuncs: ; 0x97bc0
+Script_resetfuncs: ; 97bc0
; script command 0x93
xor a
- ld [wd43c], a
+ ld [wScriptStackSize], a
ld [ScriptRunning], a
ld a, SCRIPT_OFF
ld [ScriptMode], a
@@ -3189,9 +3198,9 @@ Script_resetfuncs: ; 0x97bc0
res 0, [hl]
call StopScript
ret
-; 0x97bd5
+; 97bd5
-Script_halloffame: ; 0x97bd5
+Script_halloffame: ; 97bd5
; script command 0xa1
ld hl, GameTimerPause
@@ -3202,9 +3211,9 @@ Script_halloffame: ; 0x97bd5
ld hl, GameTimerPause
set 0, [hl]
jr DisplayCredits
-; 0x97bf3
+; 97bf3
-Script_credits: ; 0x97bf3
+Script_credits: ; 97bf3
; script command 0xa2
callba RedCredits
@@ -3216,9 +3225,9 @@ DisplayCredits:
call LoadMapStatus
call StopScript
ret
-; 0x97c051
+; 97c051
-Script_wait: ; 0x97c05
+Script_wait: ; 97c05
; script command 0xa8
; parameters:
; unknown (SingleByteParam)
@@ -3231,22 +3240,22 @@ Script_wait: ; 0x97c05
call DelayFrames
pop af
dec a
- jr nz, .loop ; 0x97c11 $f6
+ jr nz, .loop
pop bc
ret
-; 0x97c15
+; 97c15
-Script_unknown0xa9: ; 0x97c15
+Script_check_save: ; 97c15
; script command 0xa9
- callba Function4cffe
+ callba CheckSave
ld a, c
ld [ScriptVar], a
ret
-; 0x97c20
+; 97c20
-Function97c20: ; 97c20 unreferenced
+; 97c20 unreferenced
ld a, [.byte]
ld [ScriptVar], a
ret
diff --git a/engine/selectmenu.asm b/engine/selectmenu.asm
index e73f397a5..916e48b3c 100755
--- a/engine/selectmenu.asm
+++ b/engine/selectmenu.asm
@@ -158,7 +158,7 @@ UseRegisteredItem: ; 133c3
call ResetWindow
call FadeToMenu
call DoItemEffect
- call Function2b3c
+ call ReturnToCallingMenu
call LoadMoveSprites
and a
ret
diff --git a/engine/slot_machine.asm b/engine/slot_machine.asm
index 075b1ba78..afd038588 100755
--- a/engine/slot_machine.asm
+++ b/engine/slot_machine.asm
@@ -26,11 +26,11 @@ Function926f7: ; 926f7 (24:66f7)
call PlayMusic
call DelayFrame
call DisableLCD
- ld hl, VBGMap0 tile $00
+ hlbgcoord 0, 0
lb bc, 4, 0
- ld a, $7f
+ ld a, " "
call ByteFill
- ld b, $5
+ ld b, SCGB_05
call GetSGBLayout
callab Function8cf53
ld hl, wc6d0
@@ -1037,9 +1037,9 @@ Function92d20: ; 92d20
call Function92fc0
push bc
push af
- ld de, $6068
- ld a, $6
- call Function3b2a
+ depixel 12, 13
+ ld a, SPRITE_ANIM_INDEX_06
+ call _InitSpriteAnimStruct
ld hl, $e
add hl, bc
pop af
@@ -1096,9 +1096,9 @@ Function92d7e: ; 92d7e
add hl, bc
ld [hl], $0
push bc
- ld de, $6000
- ld a, $7
- call Function3b2a
+ depixel 12, 0
+ ld a, SPRITE_ANIM_INDEX_07
+ call _InitSpriteAnimStruct
pop bc
xor a
ld [wcf64], a
@@ -2063,9 +2063,9 @@ Function932fc: ; 932fc (24:72fc)
add hl, bc
dec [hl]
push bc
- ld de, $606c
- ld a, $8
- call Function3b2a
+ depixel 12, 13, 0, 4
+ ld a, SPRITE_ANIM_INDEX_08
+ call _InitSpriteAnimStruct
pop bc
ret
; 93316 (24:7316)
diff --git a/engine/specials.asm b/engine/specials.asm
index 21d391faa..09edbb263 100644
--- a/engine/specials.asm
+++ b/engine/specials.asm
@@ -101,14 +101,14 @@ SpecialsPointers:: ; c029
add_special SpecialCheckPokerus
add_special Special_DisplayCoinCaseBalance
add_special Special_DisplayMoneyAndCoinBalance
- add_special Function24ae8
+ add_special PlaceMoneyTopRightOW
add_special Special_CheckForLuckyNumberWinners
add_special Special_CheckLuckyNumberShowFlag
add_special Special_ResetLuckyNumberShowFlag
add_special Special_PrintTodaysLuckyNumber
add_special Special_SelectApricornForKurt
add_special SpecialNameRater
- add_special Functionc2da
+ add_special Special_DisplayLinkRecord
add_special GetFirstPokemonHappiness
add_special CheckFirstMonIsEgg
add_special RandomPhoneRareWildMon
@@ -120,15 +120,17 @@ SpecialsPointers:: ; c029
add_special Special_YoungerHaircutBrother
add_special Special_OlderHaircutBrother
add_special Special_DaisyMassage
- add_special Functionc472
+ add_special PlayCurMonCry
add_special ProfOaksPCBoot
add_special SpecialGameboyCheck
add_special SpecialTrainerHouse
add_special PhotoStudio
add_special InitRoamMons
- add_special Functionc48f
- add_special Functionc49f
- add_special Functionc4ac
+ add_special Special_RotatePalettesRightMusic
+ add_special Diploma
+ add_special PrintDiploma
+
+ ; Crystal
add_special Function11ac3e
add_special Function11b444
add_special Function11b5e8
@@ -151,7 +153,7 @@ SpecialsPointers:: ; c029
add_special Function101220
add_special Function101225
add_special Function101231
- add_special Function4925b
+ add_special Special_MoveTutor
add_special SpecialOmanyteChamber
add_special Function11c1ab
add_special BattleTowerAction
@@ -160,11 +162,11 @@ SpecialsPointers:: ; c029
add_special Function17d2b6
add_special Function17d2ce
add_special Function17f53d
- add_special Function103612
+ add_special AskMobileOrCable
add_special SpecialHoOhChamber
add_special Function102142
add_special Special_CelebiShrineEvent
- add_special Function49bf9
+ add_special CheckCaughtCelebi
add_special SpecialPokeSeer
add_special SpecialBuenasPassword
add_special SpecialBuenaPrize
@@ -172,7 +174,7 @@ SpecialsPointers:: ; c029
add_special Special_SampleKenjiBreakCountdown
add_special SpecialBeastsCheck
add_special SpecialMonCheck
- add_special Functionc225
+ add_special Special_SetPlayerPalette
add_special Function170bd2
add_special Mobile_SelectThreeMons
add_special Function1037eb
@@ -180,12 +182,12 @@ SpecialsPointers:: ; c029
add_special Mobile_HealParty
add_special RefreshSprites
add_special Function1037c2
- add_special Function10630f
+ add_special Mobile_DummyReturnFalse
add_special Function103780
add_special Function10387b
- add_special Function4ae12
+ add_special AskRememberPassword
add_special LoadMapPalettes
- add_special Function4a927
+ add_special FindItemInPCOrBag
add_special Special_InitialSetDSTFlag
add_special Special_InitialClearDSTFlag
add_special SpecialNone
@@ -195,10 +197,10 @@ SpecialNone: ; c224
ret
; c225
-Functionc225: ; c225
+Special_SetPlayerPalette: ; c225
ld a, [ScriptVar]
ld d, a
- callba Function57e2
+ callba SetPlayerPalette
ret
; c230
@@ -213,8 +215,8 @@ Special_GameCornerPrizeMonCheckDex: ; c230
call FadeToMenu
ld a, [ScriptVar]
ld [wd265], a
- callba Functionfb877
- call Function2b4d
+ callba NewPokedexEntry
+ call ExitAllMenus
ret
; c252
@@ -285,29 +287,29 @@ SpecialNameRater: ; c2b9
Special_TownMap: ; c2c0
call FadeToMenu
- callba Function9191c
- call Function2b4d
+ callba _TownMap
+ call ExitAllMenus
ret
; c2cd
Special_UnownPrinter: ; c2cd
call FadeToMenu
- callba Function16be4
- call Function2b4d
+ callba UnownPrinter
+ call ExitAllMenus
ret
; c2da
-Functionc2da: ; c2da
+Special_DisplayLinkRecord: ; c2da
call FadeToMenu
- callba Function3f836
- call Function2b4d
+ callba DisplayLinkRecord
+ call ExitAllMenus
ret
; c2e7
Special_KrissHousePC: ; c2e7
xor a
ld [ScriptVar], a
- callba Function156d9
+ callba _KrissHousePC
ld a, c
ld [ScriptVar], a
ret
@@ -381,7 +383,7 @@ Special_UnownPuzzle: ; c360
callba Functione1190
ld a, [wd0ec]
ld [ScriptVar], a
- call Function2b4d
+ call ExitAllMenus
ret
; c373
@@ -423,7 +425,7 @@ Special_StartGameCornerGame: ; c39a
ld l, a
pop af
rst FarCall
- call Function2b4d
+ call ExitAllMenus
ret
; c3ae
@@ -586,7 +588,7 @@ SpecialSnorlaxAwake: ; 0xc43d
db $ff
-Functionc472: ; c472
+PlayCurMonCry: ; c472
ld a, [CurPartySpecies]
jp PlayCry
; c478
@@ -614,7 +616,7 @@ SpecialGameboyCheck: ; c478
ret
-Functionc48f: ; c48f
+Special_RotatePalettesRightMusic: ; c48f
ld a, MUSIC_NONE % $100
ld [MusicFadeIDLo], a
ld a, MUSIC_NONE / $100
@@ -624,17 +626,17 @@ Functionc48f: ; c48f
ret
; c49f
-Functionc49f: ; c49f
+Diploma: ; c49f
call FadeToMenu
- callba Function1dd702
- call Function2b4d
+ callba _Diploma
+ call ExitAllMenus
ret
; c4ac
-Functionc4ac: ; c4ac
+PrintDiploma: ; c4ac
call FadeToMenu
- callba Function84688
- call Function2b4d
+ callba _PrintDiploma
+ call ExitAllMenus
ret
; c4b9
diff --git a/engine/sprites.asm b/engine/sprites.asm
index 517428007..f12ed1de8 100755
--- a/engine/sprites.asm
+++ b/engine/sprites.asm
@@ -1,1480 +1,3424 @@
-GetEmote2bpp: ; 1412a
- ld a, $1
- ld [rVBK], a
- call Get2bpp
- xor a
- ld [rVBK], a
+Function8cf53: ; 8cf53
+ ld hl, wc300
+ ld bc, wc3c1 - wc300
+.loop
+ ld [hl], $0
+ inc hl
+ dec bc
+ ld a, c
+ or b
+ jr nz, .loop
ret
-; 14135
+; 8cf62
-_ReplaceKrisSprite:: ; 14135
- call GetPlayerSprite
- ld a, [UsedSprites]
- ld [hUsedSpriteIndex], a
- ld a, [UsedSprites + 1]
- ld [hUsedSpriteTile], a
- call Function143c8
+Function8cf62: ; 8cf62
+ call Function8cf69
+ call DelayFrame
ret
-; 14146
+; 8cf69
-Function14146: ; 14146
- ld hl, wSpriteFlags
- ld a, [hl]
+Function8cf69: ; 8cf69
+ push hl
+ push de
+ push bc
push af
- res 7, [hl]
- set 6, [hl]
- call RunCallback_04
- pop af
- ld [wSpriteFlags], a
- ret
-; 14157
-Function14157: ; 14157
- ld hl, wSpriteFlags
- ld a, [hl]
- push af
- set 7, [hl]
- res 6, [hl]
- call RunCallback_04
+ ld a, $0
+ ld [wc3b5], a
+ call Function8cf7a
+
pop af
- ld [wSpriteFlags], a
+ pop bc
+ pop de
+ pop hl
ret
-; 14168
+; 8cf7a
-RefreshSprites:: ; 14168
- call .Refresh
- call RunCallback_04
- ret
-; 1416f
+Function8cf7a: ; 8cf7a
+ ld hl, wc314
+ ld e, 10 ; There are 10 structs here.
-.Refresh: ; 1416f
- xor a
- ld bc, UsedSpritesEnd - UsedSprites
- ld hl, UsedSprites
- call ByteFill
- call GetPlayerSprite
- call AddMapSprites
- call LoadAndSortSprites
- ret
-; 14183
-
-GetPlayerSprite: ; 14183
-; Get Chris or Kris's sprite.
- ld hl, .Chris
- ld a, [wPlayerSpriteSetupFlags]
- bit 2, a
- jr nz, .go
- ld a, [PlayerGender]
- bit 0, a
- jr z, .go
- ld hl, .Kris
-
-.go
- ld a, [PlayerState]
- ld c, a
.loop
- ld a, [hli]
- cp c
- jr z, .good
- inc hl
- cp $ff
+ ld a, [hl]
+ and a
+ jr z, .next ; This struct is deinitialized.
+ ld c, l
+ ld b, h
+ push hl
+ push de
+ call Function8d24b ; Uses a massive jumptable
+ call Function8d04c
+ pop de
+ pop hl
+ jr c, .done
+
+.next
+ ld bc, $10
+ add hl, bc
+ dec e
jr nz, .loop
-; Any player state not in the array defaults to Chris's sprite.
- xor a ; ld a, PLAYER_NORMAL
- ld [PlayerState], a
- ld a, SPRITE_CHRIS
- jr .finish
+ ld a, [wc3b5]
+ ld l, a
+ ld h, Sprites / $0100
-.good
- ld a, [hl]
+.loop2 ; Clear (Sprites + [wc3b5] --> SpritesEnd)
+ ld a, l
+ cp SpritesEnd % $100
+ jr nc, .done
+ xor a
+ ld [hli], a
+ jr .loop2
-.finish
- ld [UsedSprites + 0], a
- ld [PlayerSprite], a
- ld [PlayerObjectSprite], a
+.done
ret
+; 8cfa8
-.Chris
- db PLAYER_NORMAL, SPRITE_CHRIS
- db PLAYER_BIKE, SPRITE_CHRIS_BIKE
- db PLAYER_SURF, SPRITE_SURF
- db PLAYER_SURF_PIKA, SPRITE_SURFING_PIKACHU
- db $ff
+Function8cfa8: ; 8cfa8 (23:4fa8)
+ ld hl, wSpriteAnimationStructs
+ ld e, 10
-.Kris
- db PLAYER_NORMAL, SPRITE_KRIS
- db PLAYER_BIKE, SPRITE_KRIS_BIKE
- db PLAYER_SURF, SPRITE_SURF
- db PLAYER_SURF_PIKA, SPRITE_SURFING_PIKACHU
- db $ff
-; 141c9
+.loop
+ ld a, [hl]
+ and a
+ jr z, .next
+ ld c, l
+ ld b, h
+ push hl
+ push de
+ call Function8d24b ; Uses a massive jumptable
+ call Function8d04c
+ pop de
+ pop hl
+ jr c, .done
+.next
+ ld bc, $10
+ add hl, bc
+ dec e
+ jr nz, .loop
-AddMapSprites: ; 141c9
- call GetMapPermission
- call CheckOutdoorMap
- jr z, .outdoor
- call AddIndoorSprites
- ret
+ ld a, [wc3b5]
+ ld l, a
+ ld h, (Sprites + $40) / $100
-.outdoor
- call AddOutdoorSprites
- ret
-; 141d9
+.loop2 ; Clear (Sprites + [wc3b5] --> Sprites + $40)
+ ld a, l
+ cp (Sprites + $40) % $100
+ jr nc, .done
+ xor a
+ ld [hli], a
+ jr .loop2
+.done
+ ret
-AddIndoorSprites: ; 141d9
- ld hl, Map1ObjectSprite
- ld a, 1
-.loop
+InitSpriteAnimStruct:: ; 8cfd6
+; Find if there's any room in the wc314 array, which is 10x16
+ push de
push af
+ ld hl, wc314
+ ld e, 10
+.loop
ld a, [hl]
- call AddSpriteGFX
- ld de, OBJECT_LENGTH
- add hl, de
- pop af
- inc a
- cp NUM_OBJECTS
+ and a
+ jr z, .found
+ ld bc, $10
+ add hl, bc
+ dec e
jr nz, .loop
+; We've reached the end. There is no more room here.
+; Return carry.
+ pop af
+ pop de
+ scf
ret
-; 141ee
+.found
+; Back up the structure address to bc.
+ ld c, l
+ ld b, h
+; Value [wc3b4] is initially set to -1. Set it to
+; the number of objects loaded into this array.
+ ld hl, wc3b4
+ inc [hl]
+ ld a, [hl]
+ and a
+ jr nz, .initialized
+ inc [hl]
-AddOutdoorSprites: ; 141ee
- ld a, [MapGroup]
- dec a
- ld c, a
- ld b, 0
- ld hl, OutdoorSprites
-rept 2
+.initialized
+; Get row a of Unknown_8d1c4, copy the pointer into de
+ pop af
+ ld e, a
+ ld d, 0
+ ld hl, Unknown_8d1c4
+rept 3
+ add hl, de
+endr
+ ld e, l
+ ld d, h
+; Set hl to the first field (field 0) in the current structure.
+ ld hl, 0
+ add hl, bc
+; Load the index.
+ ld a, [wc3b4]
+ ld [hli], a
+; Copy the table entry to the next two fields.
+ ld a, [de]
+ ld [hli], a
+ inc de
+ ld a, [de]
+ ld [hli], a
+ inc de
+; Look up the third field from the table in the wc300 array (10x2).
+; Take the value and load it in
+ ld a, [de]
+ call LookUpInwSpriteAnimDict
+ ld [hli], a
+ pop de
+; Set hl to field 4. Kinda pointless, because we're presumably already here.
+ ld hl, $4
add hl, bc
+; Load the original value of de into here.
+ ld a, e
+ ld [hli], a
+ ld a, d
+ ld [hli], a
+; load 0 into the next four fields
+ xor a
+rept 2
+ ld [hli], a
+endr
+ xor a
+rept 2
+ ld [hli], a
+endr
+; load -1 into the next field
+ dec a
+ ld [hli], a
+; load 0 into the last five fields
+ xor a
+rept 4
+ ld [hli], a
endr
+ ld [hl], a
+; back up the address of the first field to wc3b8
+ ld a, c
+ ld [wc3b8], a
+ ld a, b
+ ld [wc3b8 + 1], a
+ ret
+; 8d036
+
+Function8d036: ; 8d036
+; Clear the index field of the struct in bc.
+ ld hl, 0
+ add hl, bc
+ ld [hl], $0
+ ret
+; 8d03d
+
+
+Function8d03d: ; 8d03d (23:503d)
+; Clear the index field of every struct in the wc314 array.
+ ld hl, wc314
+ ld bc, $10
+ ld e, 10
+ xor a
+.loop
+ ld [hl], a
+ add hl, bc
+ dec e
+ jr nz, .loop
+ ret
+
+
+Function8d04c: ; 8d04c
+ call Function8d0ec ; init WRAM
+ call Function8d132 ; read from a memory array
+ cp -3
+ jr z, .done
+ cp -4
+ jr z, .almost
+ call Function8d1a2 ; read from a pointer table
+ ld a, [wc3ba]
+ add [hl]
+ ld [wc3ba], a
+ inc hl
ld a, [hli]
ld h, [hl]
ld l, a
- ld c, MAX_OUTDOOR_SPRITES
-.loop
push bc
+ ld a, [wc3b5]
+ ld e, a
+ ld d, Sprites / $100
ld a, [hli]
- call AddSpriteGFX
- pop bc
+ ld c, a
+.loop
+ ld a, [wc3bc]
+ ld b, a
+ ld a, [wc3be]
+ add b
+ ld b, a
+ ld a, [wc3bf]
+ add b
+ ld b, a
+ call Function8d0be
+ add b
+ ld [de], a
+ inc hl
+ inc de
+ ld a, [wc3bb]
+ ld b, a
+ ld a, [wc3bd]
+ add b
+ ld b, a
+ ld a, [wc3c0]
+ add b
+ ld b, a
+ call Function8d0ce
+ add b
+ ld [de], a
+ inc hl
+ inc de
+ ld a, [wc3ba]
+ add [hl]
+ ld [de], a
+ inc hl
+ inc de
+ call Function8d0de
+ ld [de], a
+ inc hl
+ inc de
+ ld a, e
+ ld [wc3b5], a
+ cp SpritesEnd % $100
+ jr nc, .outofroom
dec c
jr nz, .loop
- ret
-; 14209
+ pop bc
+ jr .done
+.almost
+ call Function8d036
-RunCallback_04: ; 14209
- ld a, $4
- call RunMapCallback
- call Function1439b
- call Function14215
+.done
+ and a
ret
-; 14215
-Function14215: ; 14215
- ld a, [wSpriteFlags]
- bit 6, a
- ret nz
- ld c, EMOTE_08
- callba LoadEmote
- call GetMapPermission
- call CheckOutdoorMap
- ld c, EMOTE_0B
- jr z, .outdoor
- ld c, EMOTE_0A
-
-.outdoor
- callba LoadEmote
+.outofroom
+ pop bc
+ scf
ret
-; 14236
+; 8d0be
+Function8d0be: ; 8d0be
+ push hl
+ ld a, [hl]
+ ld hl, wc3b8
+ bit 6, [hl]
+ jr z, .ok
+ add $8
+ xor $ff
+ inc a
+.ok
+ pop hl
+ ret
+; 8d0ce
-SafeGetSprite: ; 14236
+Function8d0ce: ; 8d0ce
push hl
- call GetSprite
+ ld a, [hl]
+ ld hl, wc3b8
+ bit 5, [hl]
+ jr z, .ok
+ add $8
+ xor $ff
+ inc a
+
+.ok
pop hl
ret
-; 1423c
+; 8d0de
-GetSprite: ; 1423c
- call GetMonSprite
- ret c
+Function8d0de: ; 8d0de
+ ld a, [wc3b8]
+ ld b, a
+ ld a, [hl]
+ xor b
+ and $e0
+ ld b, a
+ ld a, [hl]
+ and $1f
+ or b
+ ret
+; 8d0ec
- ld hl, SpriteHeaders ; address
- dec a
- ld c, a
- ld b, 0
- ld a, 6
- call AddNTimes
- ; load the address into de
+Function8d0ec: ; 8d0ec
+ xor a
+ ld [wc3b8], a
+ ld hl, $3
+ add hl, bc
ld a, [hli]
- ld e, a
+ ld [wc3ba], a
ld a, [hli]
- ld d, a
- ; load the length into c
+ ld [wc3bb], a
ld a, [hli]
- swap a
- ld c, a
- ; load the sprite bank into both b and h
- ld b, [hl]
+ ld [wc3bc], a
ld a, [hli]
- ; load the sprite type into l
- ld l, [hl]
- ld h, a
+ ld [wc3bd], a
+ ld a, [hli]
+ ld [wc3be], a
ret
-; 14259
+; 8d109
+LookUpInwSpriteAnimDict: ; 8d109
+; a = wSpriteAnimDict[a] if a in wSpriteAnimDict else 0
+ push hl
+ push bc
+ ld hl, wSpriteAnimDict
+ ld b, a
+ ld c, 10
+.loop
+ ld a, [hli]
+ cp b
+ jr z, .ok
+ inc hl
+ dec c
+ jr nz, .loop
+ xor a
+ jr .done
-GetMonSprite: ; 14259
-; Return carry if a monster sprite was loaded.
+.ok
+ ld a, [hl]
- cp SPRITE_POKEMON
- jr c, .Normal
- cp SPRITE_DAYCARE_MON_1
- jr z, .wBreedMon1
- cp SPRITE_DAYCARE_MON_2
- jr z, .wBreedMon2
- cp SPRITE_VARS
- jr nc, .Variable
- jr .Icon
+.done
+ pop bc
+ pop hl
+ ret
+; 8d120
-.Normal
- and a
+Function8d120:: ; 8d120
+ ld hl, $1
+ add hl, bc
+ ld [hl], a
+ ld hl, $8
+ add hl, bc
+ ld [hl], $0
+ ld hl, $a
+ add hl, bc
+ ld [hl], $ff
ret
+; 8d132
-.Icon
- sub SPRITE_POKEMON
- ld e, a
- ld d, 0
- ld hl, SpriteMons
- add hl, de
- ld a, [hl]
- jr .Mon
-.wBreedMon1
- ld a, [wBreedMon1Species]
- jr .Mon
+Function8d132: ; 8d132
+.loop
+ ld hl, $8
+ add hl, bc
+ ld a, [hl]
+ and a
+ jr z, .ok
+ dec [hl]
+ call Function8d189
+ ld a, [hli]
+ push af
+ jr .skip
-.wBreedMon2
- ld a, [wBreedMon2Species]
+.ok
+ ld hl, $a
+ add hl, bc
+ inc [hl]
+ call Function8d189
+ ld a, [hli]
+ cp $fe
+ jr z, .minus_2
+ cp $ff
+ jr z, .minus_1
+ push af
+ ld a, [hl]
+ push hl
+ and $3f
+ ld hl, $9
+ add hl, bc
+ add [hl]
+ ld hl, $8
+ add hl, bc
+ ld [hl], a
+ pop hl
-.Mon
- ld e, a
- and a
- jr z, .NoBreedmon
+.skip
+ ld a, [hl]
+ and $c0
+ srl a
+ ld [wc3b8], a
+ pop af
+ ret
- callba Function8e82b
+.minus_1
+ xor a
+ ld hl, $8
+ add hl, bc
+ ld [hl], a
+ ld hl, $a
+ add hl, bc
+rept 2
+ dec [hl]
+endr
+ jr .loop
- ld l, 1
+.minus_2
+ xor a
+ ld hl, $8
+ add hl, bc
+ ld [hl], a
+ dec a
+ ld hl, $a
+ add hl, bc
+ ld [hl], a
+ jr .loop
+; 8d189
+
+Function8d189: ; 8d189
+ ; Get the [bc+10]th entry in the data table
+ ; indexed at [bc+1] in Unknown_8d6e6
+ ld hl, $1
+ add hl, bc
+ ld e, [hl]
+ ld d, 0
+ ld hl, Unknown_8d6e6
+rept 2
+ add hl, de
+endr
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ ld hl, $a
+ add hl, bc
+ ld l, [hl]
ld h, 0
- scf
+ add hl, hl
+ add hl, de
ret
+; 8d1a2
-.Variable
- sub SPRITE_VARS
+Function8d1a2: ; 8d1a2
ld e, a
ld d, 0
- ld hl, VariableSprites
+ ld hl, Unknown_8d94d
+rept 3
add hl, de
- ld a, [hl]
- and a
- jp nz, GetMonSprite
-
-.NoBreedmon
- ld a, 1
- ld l, 1
- ld h, 0
- and a
+endr
ret
-; 142a7
-
-
-_DoesSpriteHaveFacings:: ; 142a7
-; Checks to see whether we can apply a facing to a sprite.
-; Returns carry unless the sprite is a Pokemon or a Still Sprite.
- cp SPRITE_POKEMON
- jr nc, .only_down
+; 8d1ac
+Function8d1ac: ; unreferenced
push hl
+ ld l, a
+ ld h, 0
+rept 2
+ add hl, hl
+endr
+ ld de, Unknown_8e706 ; broken 2bpp pointers
+ add hl, de
+ ld c, [hl]
+ inc hl
+ ld b, [hl]
+ inc hl
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ pop hl
push bc
- ld hl, SpriteHeaders + SPRITEHEADER_TYPE ; type
- dec a
- ld c, a
- ld b, 0
- ld a, NUM_SPRITEHEADER_FIELDS
- call AddNTimes
- ld a, [hl]
+ call Request2bpp
pop bc
- pop hl
- cp STILL_SPRITE
- jr nz, .only_down
- scf
+ ret
+; 8d1c4
+
+Unknown_8d1c4: ; 8d1c4
+ db $01, SPRITE_ANIM_SEQ_01, $00 ; 00
+ db $07, SPRITE_ANIM_SEQ_04, $00 ; 01
+ db $08, SPRITE_ANIM_SEQ_05, $05 ; 02
+ db $0a, SPRITE_ANIM_SEQ_06, $00 ; 03
+ db $0b, SPRITE_ANIM_SEQ_07, $06 ; 04
+ db $0c, SPRITE_ANIM_SEQ_08, $06 ; 05
+ db $0d, SPRITE_ANIM_SEQ_09, $07 ; 06
+ db $0e, SPRITE_ANIM_SEQ_0A, $07 ; 07
+ db $10, SPRITE_ANIM_SEQ_0B, $07 ; 08
+ db $08, SPRITE_ANIM_SEQ_0C, $05 ; 09
+ db $11, SPRITE_ANIM_SEQ_00, $00 ; 0a
+ db $12, SPRITE_ANIM_SEQ_0D, $08 ; 0b
+ db $12, SPRITE_ANIM_SEQ_0E, $08 ; 0c
+ db $12, SPRITE_ANIM_SEQ_0F, $08 ; 0d
+ db $13, SPRITE_ANIM_SEQ_10, $00 ; 0e
+ db $15, SPRITE_ANIM_SEQ_00, $00 ; 0f
+ db $16, SPRITE_ANIM_SEQ_11, $00 ; 10
+ db $17, SPRITE_ANIM_SEQ_12, $00 ; 11
+ db $18, SPRITE_ANIM_SEQ_12, $00 ; 12
+ db $19, SPRITE_ANIM_SEQ_13, $00 ; 13
+ db $1a, SPRITE_ANIM_SEQ_14, $00 ; 14
+ db $1b, SPRITE_ANIM_SEQ_00, $00 ; 15
+ db $1d, SPRITE_ANIM_SEQ_15, $00 ; 16
+ db $1e, SPRITE_ANIM_SEQ_00, $00 ; 17
+ db $1d, SPRITE_ANIM_SEQ_17, $00 ; 18
+ db $1f, SPRITE_ANIM_SEQ_00, $00 ; 19
+ db $24, SPRITE_ANIM_SEQ_19, $00 ; 1a
+ db $25, SPRITE_ANIM_SEQ_00, $00 ; 1b
+ db $20, SPRITE_ANIM_SEQ_13, $00 ; 1c
+ db $26, SPRITE_ANIM_SEQ_1A, $00 ; 1d
+ db $2d, SPRITE_ANIM_SEQ_00, $00 ; 1e
+ db $2e, SPRITE_ANIM_SEQ_00, $00 ; 1f
+ db $2f, SPRITE_ANIM_SEQ_00, $00 ; 20
+ db $30, SPRITE_ANIM_SEQ_00, $00 ; 21
+ db $31, SPRITE_ANIM_SEQ_00, $00 ; 22
+ db $32, SPRITE_ANIM_SEQ_1B, $00 ; 23
+ db $33, SPRITE_ANIM_SEQ_1C, $00 ; 24
+ db $34, SPRITE_ANIM_SEQ_00, $00 ; 25
+ db $35, SPRITE_ANIM_SEQ_1D, $00 ; 26
+ db $37, SPRITE_ANIM_SEQ_1E, $00 ; 27
+ db $38, SPRITE_ANIM_SEQ_1E, $00 ; 28
+ db $39, SPRITE_ANIM_SEQ_20, $00 ; 29
+ db $3f, SPRITE_ANIM_SEQ_21, $00 ; 2a
+ db $3e, SPRITE_ANIM_SEQ_22, $00 ; 2b
+ db $40, SPRITE_ANIM_SEQ_00, $00 ; 2c
+; 8d24b
+
+
+Function8d24b: ; 8d24b
+ ld hl, $2 ; field 2, see the second column in the above table
+ add hl, bc
+ ld e, [hl]
+ ld d, 0
+ ld hl, .Jumptable
+rept 2
+ add hl, de
+endr
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp [hl]
+; 8d25b
+
+
+.Jumptable: ; 8d25b (23:525b)
+ dw .zero ; town map
+ dw .one ; bouncing mon icons
+ dw .two
+ dw .three
+ dw .four
+ dw .five
+ dw .six ; Game Freak logo
+ dw .seven
+ dw .eight
+ dw .nine
+ dw .ten
+ dw .eleven
+ dw .twelve ; blinking cursor
+ dw .thirteen
+ dw .fourteen
+ dw .fifteen
+ dw .sixteen
+ dw .seventeen
+ dw .eighteen
+ dw .nineteen
+ dw .twenty
+ dw .twentyone
+ dw .twentytwo ; flying sprite
+ dw .twentythree ; flying leaves
+ dw .twentyfour
+ dw .twentyfive
+ dw .twentysix
+ dw .twentyseven
+ dw .twentyeight
+ dw .twentynine ; intro suicune
+ dw .thirty ; intro pichu wooper
+ dw .thirtyone
+ dw .thirtytwo ; intro unown
+ dw .thirtythree ; intro unown F with suicune leaping up
+ dw .thirtyfour ; intro suicune facing away from us
+
+
+.zero: ; 8d2a1 (23:52a1)
+ ret
+
+.one: ; 8d2a2 (23:52a2)
+ ld a, [MenuSelection2]
+ ld hl, 0
+ add hl, bc
+ cp [hl]
+ jr z, .two
+ ld hl, $4
+ add hl, bc
+ ld [hl], $10
+ ld hl, $7
+ add hl, bc
+ ld [hl], $0
ret
-.only_down
+.two: ; 8d2b9 (23:52b9)
+ ld hl, $4
+ add hl, bc
+ ld [hl], $18
+ ld hl, $c
+ add hl, bc
+ ld a, [hl]
+ ld d, a
+ inc [hl]
+ and $f
+ ret nz
+ ld hl, $d
+ add hl, bc
+ ld e, [hl]
+ ld hl, $7
+ add hl, bc
+ ld a, d
+ and $10 ; bit 4
+ jr z, .asm_8d2df
+ ld a, e
and a
+ jr z, .asm_8d2e6
+ cp $1
+ jr z, .asm_8d2e2
+.asm_8d2df
+ xor a
+ ld [hl], a
+ ret
+.asm_8d2e2
+ ld a, $ff
+ ld [hl], a
+ ret
+.asm_8d2e6
+ ld a, $fe
+ ld [hl], a
ret
-; 142c4
+.three: ; 8d2ea (23:52ea)
+ ld a, [MenuSelection2]
+ ld hl, 0
+ add hl, bc
+ cp [hl]
+ jr z, .asm_8d2fb
+ ld hl, $4
+ add hl, bc
+ ld [hl], $10
+ ret
+.asm_8d2fb
+ ld hl, $4
+ add hl, bc
+ ld [hl], $18
+ ret
-_GetSpritePalette:: ; 142c4
- ld a, c
- call GetMonSprite
- jr c, .is_pokemon
+.four: ; 8d302 (23:5302)
+ call .anonymous_jumptable
+ jp [hl]
+; 8d306 (23:5306)
- ld hl, SpriteHeaders + 5 ; palette
- dec a
- ld c, a
- ld b, 0
- ld a, 6
- call AddNTimes
- ld c, [hl]
+; Anonymous jumptable (see .anonymous_jumptable)
+ dw .four_zero
+ dw .four_one
+; 8d30a
+
+.four_zero: ; 8d30a
+ call .asm_8d6d8
+ ld hl, 0
+ add hl, bc
+ ld a, [hl]
+ ld hl, $d
+ add hl, bc
+ and $3
+ ld [hl], a
+ inc [hl]
+ swap a
+ ld hl, $c
+ add hl, bc
+ ld [hl], a
+
+.four_one: ; 8d321
+ ld hl, $4
+ add hl, bc
+ ld a, [hl]
+ cp $a4
+ jr nc, .asm_8d356
+ ld hl, $d
+ add hl, bc
+ add $4
+ ld hl, $4
+ add hl, bc
+ ld [hl], a
+ ld hl, $5
+ add hl, bc
+ inc [hl]
+ ld hl, $d
+ add hl, bc
+ ld a, [hl]
+ sla a
+ sla a
+ ld d, $2
+ ld hl, $c
+ add hl, bc
+ ld a, [hl]
+ add $3
+ ld [hl], a
+ call .asm_8d6de
+ ld hl, $7
+ add hl, bc
+ ld [hl], a
ret
-.is_pokemon
- xor a
- ld c, a
+.asm_8d356
+ call Function8d036
ret
-; 142db
+; 8d35a
+.twentyfive: ; 8d35a (23:535a)
+ ld hl, $c
+ add hl, bc
+ ld a, [hl]
+ inc a
+ ld [hl], a
+ ld d, $2
+ call .asm_8d6de
+ ld hl, $7
+ add hl, bc
+ ld [hl], a
+ ret
-LoadAndSortSprites: ; 142db
- call LoadSpriteGFX
- call SortUsedSprites
- call ArrangeUsedSprites
+.five: ; 8d36c (23:536c)
+ callab Function11a3b
ret
-; 142e5
+.twelve: ; 8d373 (23:5373)
+ callab Function120c1
+ ret
-AddSpriteGFX: ; 142e5
-; Add any new sprite ids to a list of graphics to be loaded.
-; Return carry if the list is full.
+.six: ; 8d37a (23:537a)
+ callab GameFreakLogoJumper
+ ret
- push hl
- push bc
- ld b, a
- ld hl, UsedSprites + 2
- ld c, SPRITE_GFX_LIST_CAPACITY - 1
-.loop
+.seven: ; 8d381 (23:5381)
+ ld hl, $c
+ add hl, bc
ld a, [hl]
- cp b
- jr z, .exists
and a
- jr z, .new
+ jr z, .asm_8d3ba
rept 2
- inc hl
+ dec [hl]
endr
- dec c
- jr nz, .loop
+ ld d, a
+ and $1f
+ jr nz, .asm_8d395
+ ld hl, $d
+ add hl, bc
+ dec [hl]
+.asm_8d395
+ ld hl, $b
+ add hl, bc
+ ld a, [hl]
+ push af
+ push de
+ call .asm_8d6de
+ ld hl, $7
+ add hl, bc
+ ld [hl], a
+ pop de
+ pop af
+ call .asm_8d6e2
+ ld hl, $6
+ add hl, bc
+ ld [hl], a
+ ld hl, $d
+ add hl, bc
+ ld a, [hl]
+ ld hl, $b
+ add hl, bc
+ add [hl]
+ ld [hl], a
+ ret
+.asm_8d3ba
+ ld a, $1
+ ld [wcf64], a
+ call Function8d036
+ ret
- pop bc
- pop hl
- scf
+.eight: ; 8d3c3 (23:53c3)
+ ld hl, $c
+ add hl, bc
+ ld a, [hli]
+ or [hl]
+ jr z, .asm_8d41e
+ ld hl, $f
+ add hl, bc
+ ld d, [hl]
+ ld hl, $b
+ add hl, bc
+ ld a, [hl]
+ push af
+ push de
+ call .asm_8d6de
+ ld hl, $7
+ add hl, bc
+ ld [hl], a
+ pop de
+ pop af
+ call .asm_8d6e2
+ ld hl, $6
+ add hl, bc
+ ld [hl], a
+ ld hl, $c
+ add hl, bc
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ ld hl, $e
+ add hl, bc
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ add hl, de
+ ld e, l
+ ld d, h
+ ld hl, $e
+ add hl, bc
+ ld [hl], e
+ inc hl
+ ld [hl], d
+ ld hl, $c
+ add hl, bc
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld de, -$10
+ add hl, de
+ ld e, l
+ ld d, h
+ ld hl, $c
+ add hl, bc
+ ld [hl], e
+ inc hl
+ ld [hl], d
+ ld hl, $b
+ add hl, bc
+ ld a, [hl]
+ xor $20
+ ld [hl], a
+ ret
+.asm_8d41e
+ call Function8d036
ret
-.exists
- pop bc
- pop hl
- and a
+.nine: ; 8d422 (23:5422)
+ callab Function9321d
ret
-.new
- ld [hl], b
- pop bc
- pop hl
- and a
+.ten: ; 8d429 (23:5429)
+ callab Function932ac
+ ld hl, wcf64
+ ld a, [hl]
+ cp $2
+ ret nz
+ ld [hl], $3
+ ld a, $f
+ call Function8d120
ret
-; 14306
+.eleven: ; 8d43e (23:543e)
+ ld hl, $b
+ add hl, bc
+ ld a, [hl]
+ dec [hl]
+ ld e, a
+ and $1
+ jr z, .asm_8d462
+ ld hl, $4
+ add hl, bc
+ ld a, [hl]
+ cp $78
+ jr c, .asm_8d461
+ call Function8d036
+ ld a, $4
+ ld [wcf64], a
+ ld de, SFX_PLACE_PUZZLE_PIECE_DOWN
+ call PlaySFX
+ ret
+.asm_8d461
+ inc [hl]
+.asm_8d462
+ ld a, e
+ ld d, $20
+ call .asm_8d6de
+ ld hl, $7
+ add hl, bc
+ ld [hl], a
+ ret
-LoadSpriteGFX: ; 14306
-; Bug: b is not preserved, so
-; it's useless as a next count.
+.thirteen: ; 8d46e (23:546e)
+ callab Functione00ed
+ ret
- ld hl, UsedSprites
- ld b, SPRITE_GFX_LIST_CAPACITY
-.loop
- ld a, [hli]
- and a
- jr z, .done
- push hl
- call .LoadSprite
- pop hl
- ld [hli], a
- dec b
- jr nz, .loop
+.fifteen: ; 8d475 (23:5475)
+ callab Function90d41
+ ret
-.done
+.fourteen: ; 8d47c (23:547c)
+ callab Functione21a1
ret
-.LoadSprite
- call GetSprite
- ld a, l
+.sixteen: ; 8d483 (23:5483)
+ call .anonymous_jumptable
+ jp [hl]
+; 8d487 (23:5487)
+
+; Anonymous jumptable (see .anonymous_jumptable)
+ dw .sixteen_zero
+ dw .sixteen_one
+ dw .sixteen_two
+ dw .sixteen_three
+ dw .sixteen_four
+ dw .sixteen_five
+; 8d493
+
+.sixteen_zero: ; 8d493
+ ld a, $14
+ call Function8d120
+ ld hl, $b
+ add hl, bc
+ ld [hl], $2
+ ld hl, $c
+ add hl, bc
+ ld [hl], $20
+ ret
+; 8d4a5
+
+.sixteen_two: ; 8d4a5
+ ld hl, $c
+ add hl, bc
+ ld a, [hl]
+ and a
+ jr z, .asm_8d4af
+ dec [hl]
ret
-; 1431e
+.asm_8d4af
+ call .asm_8d6d8
+ ld hl, $c
+ add hl, bc
+ ld [hl], $40
-SortUsedSprites: ; 1431e
-; Bubble-sort sprites by type.
+.sixteen_three: ; 8d4b8
+ ld hl, $c
+ add hl, bc
+ ld a, [hl]
+ cp $30
+ jr c, .asm_8d4cd
+ dec [hl]
+ ld d, $28
+ call .asm_8d6de
+ ld hl, $7
+ add hl, bc
+ ld [hl], a
+ ret
-; Run backwards through UsedSprites to find the last one.
+.asm_8d4cd
+ ld de, SFX_GOT_SAFARI_BALLS
+ call PlaySFX
+ jr .sixteen_five
+; 8d4d5
- ld c, SPRITE_GFX_LIST_CAPACITY
- ld de, UsedSprites + (SPRITE_GFX_LIST_CAPACITY - 1) * 2
-.FindLastSprite
- ld a, [de]
+.sixteen_one: ; 8d4d5
+ ld hl, $b
+ add hl, bc
+ ld [hl], $4
+ ld hl, $c
+ add hl, bc
+ ld [hl], $30
+ ld hl, $d
+ add hl, bc
+ ld [hl], $24
+ ret
+; 8d4e8
+
+.sixteen_four: ; 8d4e8
+ ld hl, $d
+ add hl, bc
+ ld a, [hl]
and a
- jr nz, .FoundLastSprite
+ jr z, .asm_8d51c
+ ld d, a
+ ld hl, $c
+ add hl, bc
+ ld a, [hl]
+ call Function8e72c
+ ld hl, $7
+ add hl, bc
+ ld [hl], a
+ ld hl, $c
+ add hl, bc
+ inc [hl]
+ ld a, [hl]
+ and $3f
+ ret nz
+ ld hl, $c
+ add hl, bc
+ ld [hl], $20
+ ld hl, $d
+ add hl, bc
+ ld a, [hl]
+ sub $c
+ ld [hl], a
+ ld de, SFX_SWITCH_POKEMON
+ call PlaySFX
+ ret
+
+.asm_8d51c
+ xor a
+ ld hl, $7
+ add hl, bc
+ ld [hl], a
+ call .asm_8d6d8
+ ret
+
+.sixteen_five: ; 8d526
+ call Function8d036
+ ret
+; 8d52a
+
+.seventeen: ; 8d52a (23:552a)
+ ld hl, $4
+ add hl, bc
+ ld a, [hl]
rept 2
- dec de
+ inc [hl]
endr
- dec c
- jr nz, .FindLastSprite
-.FoundLastSprite
- dec c
- jr z, .quit
+ cp $b0
+ jr nc, .asm_8d53f
+ and $3
+ ret nz
+ ld de, SFX_POKEBALLS_PLACED_ON_TABLE
+ call PlaySFX
+ ret
-; If the length of the current sprite is
-; higher than a later one, swap them.
+.asm_8d53f
+ call Function8d036
+ ret
- inc de
- ld hl, UsedSprites + 1
+.eighteen: ; 8d543 (23:5543)
+ callab Function29676
+ ret
-.CheckSprite
- push bc
+.nineteen: ; 8d54a (23:554a)
+ ld hl, $c
+ add hl, bc
+ ld a, [hl]
+ cp $80
+ jr nc, .asm_8d574
+ ld d, a
+ add $8
+ ld [hl], a
+ ld hl, $b
+ add hl, bc
+ ld a, [hl]
+ xor $20
+ ld [hl], a
+ push af
push de
- push hl
+ call .asm_8d6de
+ ld hl, $7
+ add hl, bc
+ ld [hl], a
+ pop de
+ pop af
+ call .asm_8d6e2
+ ld hl, $6
+ add hl, bc
+ ld [hl], a
+ ret
+.asm_8d574
+ call Function8d036
+ ret
-.CheckFollowing
- ld a, [de]
- cp [hl]
- jr nc, .loop
+.twenty: ; 8d578 (23:5578)
+ callab Function91640
+ ret
-; Swap the two sprites.
+.twentyone: ; 8d57f (23:557f)
+ ld hl, $d
+ add hl, bc
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ ld hl, $80
+ add hl, de
+ ld e, l
+ ld d, h
+ ld hl, $d
+ add hl, bc
+ ld [hl], e
+ inc hl
+ ld [hl], d
+ ld hl, $c
+ add hl, bc
+ ld a, [hl]
+rept 3
+ inc [hl]
+endr
+ push af
+ push de
+ call .asm_8d6de
+ ld hl, $7
+ add hl, bc
+ ld [hl], a
+ pop de
+ pop af
+ call .asm_8d6e2
+ ld hl, $6
+ add hl, bc
+ ld [hl], a
+ ret
- ld b, a
+.twentytwo: ; 8d5b0 (23:55b0)
+ ld hl, $5
+ add hl, bc
ld a, [hl]
- ld [hl], b
- ld [de], a
- dec de
- dec hl
- ld a, [de]
- ld b, a
+ and a
+ ret z
+ ld hl, $d
+ add hl, bc
ld a, [hl]
- ld [hl], b
- ld [de], a
- inc de
- inc hl
-
-; Keep doing this until everything's in order.
-
-.loop
+ inc [hl]
+ cp $40
+ ret c
+ ld hl, $5
+ add hl, bc
rept 2
- dec de
+ dec [hl]
endr
- dec c
- jr nz, .CheckFollowing
+ ld hl, $f
+ add hl, bc
+ ld a, [hl]
+ ld d, a
+ cp $40
+ jr nc, .asm_8d5d3
+ add $8
+ ld [hl], a
+.asm_8d5d3
+ ld hl, $e
+ add hl, bc
+ ld a, [hl]
+ inc [hl]
+ call .asm_8d6e2
+ ld hl, $6
+ add hl, bc
+ ld [hl], a
+ ret
- pop hl
+.twentythree: ; 8d5e2 (23:55e2)
+ ld hl, $4
+ add hl, bc
+ ld a, [hl]
+ cp $b8
+ jr nc, .asm_8d603
rept 2
- inc hl
+ inc [hl]
endr
- pop de
- pop bc
- dec c
- jr nz, .CheckSprite
+ ld hl, $5
+ add hl, bc
+ dec [hl]
+ ld d, $40
+ ld hl, $c
+ add hl, bc
+ ld a, [hl]
+ inc [hl]
+ call .asm_8d6e2
+ ld hl, $6
+ add hl, bc
+ ld [hl], a
+ ret
+.asm_8d603
+ call Function8d036
+ ret
-.quit
+.twentyfour: ; 8d607 (23:5607)
+ ld hl, $5
+ add hl, bc
+ ld a, [hl]
+ cp $54
+ ret z
+ ld hl, $5
+ add hl, bc
+rept 2
+ inc [hl]
+endr
+ ld hl, $f
+ add hl, bc
+ ld a, [hl]
+ ld d, a
+ and a
+ jr z, .asm_8d621
+ sub $2
+ ld [hl], a
+.asm_8d621
+ ld hl, $e
+ add hl, bc
+ ld a, [hl]
+ inc [hl]
+ call .asm_8d6e2
+ ld hl, $6
+ add hl, bc
+ ld [hl], a
ret
-; 14355
+.twentyseven: ; 8d630 (23:5630)
+ callba Function108bc7
+ ret
-ArrangeUsedSprites: ; 14355
-; Get the length of each sprite and space them out in VRAM.
-; Crystal introduces a second table in VRAM bank 0.
+.twentyeight: ; 8d637 (23:5637)
+ callba Function108be0
+ ret
- ld hl, UsedSprites
- ld c, SPRITE_GFX_LIST_CAPACITY
- ld b, 0
-.FirstTableLength
-; Keep going until the end of the list.
- ld a, [hli]
+.twentynine: ; 8d63e (23:563e)
+ ld a, [wcf65]
and a
- jr z, .quit
-
+ jr nz, .asm_8d645
+ ret
+.asm_8d645
+ ld hl, $7
+ add hl, bc
+ ld [hl], $0
+ ld hl, $d
+ add hl, bc
ld a, [hl]
- call GetSpriteLength
+ add $2
+ ld [hl], a
+ xor $ff
+ inc a
+ ld d, $20
+ call .asm_8d6de
+ ld hl, $7
+ add hl, bc
+ ld [hl], a
+ ld a, $36
+ call Function8d120
+ ret
-; Spill over into the second table after $80 tiles.
- add b
- cp $80
- jr z, .loop
- jr nc, .SecondTable
+.thirty: ; 8d666 (23:5666)
+ ld hl, $c
+ add hl, bc
+ ld a, [hl]
+ cp $14
+ jr nc, .asm_8d67f
+ add $2
+ ld [hl], a
+ xor $ff
+ inc a
+ ld d, $20
+ call .asm_8d6de
+ ld hl, $7
+ add hl, bc
+ ld [hl], a
+.asm_8d67f
+ ret
-.loop
- ld [hl], b
- inc hl
- ld b, a
+.thirtytwo: ; 8d680 (23:5680)
+ ld hl, $b
+ add hl, bc
+ ld d, [hl]
+rept 3
+ inc [hl]
+endr
+ ld hl, $c
+ add hl, bc
+ ld a, [hl]
+ push af
+ push de
+ call .asm_8d6de
+ ld hl, $7
+ add hl, bc
+ ld [hl], a
+ pop de
+ pop af
+ call .asm_8d6e2
+ ld hl, $6
+ add hl, bc
+ ld [hl], a
+ ret
-; Assumes the next table will be reached before c hits 0.
- dec c
- jr nz, .FirstTableLength
-
-.SecondTable
-; The second tile table starts at tile $80.
- ld b, $80
- dec hl
-.SecondTableLength
-; Keep going until the end of the list.
- ld a, [hli]
- and a
- jr z, .quit
+.thirtythree: ; 8d6a2 (23:56a2)
+ ld a, [wcf64]
+ cp $40
+ ret nz
+ ld a, $3d
+ call Function8d120
+ ret
+.thirtyfour: ; 8d6ae (23:56ae)
+ ld hl, $5
+ add hl, bc
ld a, [hl]
- call GetSpriteLength
+ add $10
+ ld [hl], a
+ ret
-; There are only two tables, so don't go any further than that.
- add b
- jr c, .quit
+.twentysix: ; 8d6b7 (23:56b7)
+ callba Function11d0b6
+ ret
- ld [hl], b
- ld b, a
+.thirtyone: ; 8d6be (23:56be)
+ callba Function49aa2
+ ret
+
+.anonymous_jumptable: ; 8d6c5 (23:56c5)
+ ld hl, [sp+$0]
+ ld e, [hl]
inc hl
+ ld d, [hl]
+ inc de
+ ld hl, $b
+ add hl, bc
+ ld l, [hl]
+ ld h, $0
+ add hl, hl
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ret
+; 8d6d8 (23:56d8)
- dec c
- jr nz, .SecondTableLength
+.asm_8d6d8: ; 8d6d8
+ ld hl, $b
+ add hl, bc
+ inc [hl]
+ ret
+; 8d6de
-.quit
+.asm_8d6de: ; 8d6de (23:56de)
+ call Function8e72c
ret
-; 14386
+.asm_8d6e2: ; 8d6e2 (23:56e2)
+ call Function8e72a
+ ret
+; 8d6e6 (23:56e6)
+
+Unknown_8d6e6: ; 8d6e6
+ dw Unknown_8d76a
+ dw Unknown_8d76d
+ dw Unknown_8d772
+ dw Unknown_8d777
+ dw Unknown_8d77c
+ dw Unknown_8d781
+ dw Unknown_8d786
+ dw Unknown_8d7a6
+ dw Unknown_8d7ab
+ dw Unknown_8d7b0
+ dw Unknown_8d7b5
+ dw Unknown_8d7d4
+ dw Unknown_8d7d9
+ dw Unknown_8d7e2
+ dw Unknown_8d7eb
+ dw Unknown_8d7f4
+ dw Unknown_8d7ff
+ dw Unknown_8d78b
+ dw Unknown_8d802
+ dw Unknown_8d805
+ dw Unknown_8d808
+ dw Unknown_8d811
+ dw Unknown_8d818
+ dw Unknown_8d81d
+ dw Unknown_8d822
+ dw Unknown_8d825
+ dw Unknown_8d82c
+ dw Unknown_8d82f
+ dw Unknown_8d861
+ dw Unknown_8d864
+ dw Unknown_8d867
+ dw Unknown_8d874
+ dw Unknown_8d877
+ dw Unknown_8d87a
+ dw Unknown_8d87d
+ dw Unknown_8d880
+ dw Unknown_8d883
+ dw Unknown_8d890
+ dw Unknown_8d899
+ dw Unknown_8d89c
+ dw Unknown_8d89f
+ dw Unknown_8d8a2
+ dw Unknown_8d8a5
+ dw Unknown_8d8a8
+ dw Unknown_8d8ab
+ dw Unknown_8d794
+ dw Unknown_8d79d
+ dw Unknown_8d8ae
+ dw Unknown_8d8cd
+ dw Unknown_8d8ec
+ dw Unknown_8d8f1
+ dw Unknown_8d8f4
+ dw Unknown_8d8f7
+ dw Unknown_8d8fe
+ dw Unknown_8d907
+ dw Unknown_8d90c
+ dw Unknown_8d913
+ dw Unknown_8d916
+ dw Unknown_8d91d
+ dw Unknown_8d924
+ dw Unknown_8d92b
+ dw Unknown_8d932
+ dw Unknown_8d93d
+ dw Unknown_8d940
+ dw Unknown_8d943
+ dw Unknown_8d948
+; 8d76a
+
+Unknown_8d76a: dw $2000
+ db -1
+Unknown_8d76d: dw $0800, $0801
+ db -2
+Unknown_8d772: dw $083d, $083e
+ db -2
+Unknown_8d777: dw $083f, $0840
+ db -2
+Unknown_8d77c: dw $0400, $0401
+ db -2
+Unknown_8d781: dw $043d, $043e
+ db -2
+Unknown_8d786: dw $043f, $0440
+ db -2
+Unknown_8d78b: dw $0800, $0801, $0800, $4801
+ db -2
+Unknown_8d794: dw $0863, $0864, $0863, $4864
+ db -2
+Unknown_8d79d: dw $0865, $0866, $0865, $4866
+ db -2
+Unknown_8d7a6: dw $011e, $011f
+ db -2
+Unknown_8d7ab: dw $0120, $01fd
+ db -2
+Unknown_8d7b0: dw $0121, $01fd
+ db -2
+Unknown_8d7b5: dw $0c81, $0182, $0183, $0482, $0c81, $0c82, $0483, $2084, $0385, $0386, $0487, $0488, $0489, $0a8a, $078b
+ db -1
+Unknown_8d7d4: dw $0323, $8323
+ db -2
+Unknown_8d7d9: dw $0224, $0225, $0226, $0225
+ db -2
+Unknown_8d7e2: dw $0727, $0728, $8727, $4728
+ db -2
+Unknown_8d7eb: dw $0729, $072a, $0729, $072b
+ db -2
+Unknown_8d7f4: dw $0729, $072c, $072d, $072c, $0729
+ db -1
+Unknown_8d7ff: dw $142e
+ db -1
+Unknown_8d802: dw $202f
+ db -1
+Unknown_8d805: dw $2030
+ db -1
+Unknown_8d808: dw $0330, $0331, $0330, $4331
+ db -2
+Unknown_8d811: dw $0432, $0433, $0434
+ db -4
+Unknown_8d818: dw $0335, $0336
+ db -2
+Unknown_8d81d: dw $0737, $0738
+ db -2
+Unknown_8d822: dw $2039
+ db -1
+Unknown_8d825: dw $023b, $023a, $023b
+ db -1
+Unknown_8d82c: dw $203c
+ db -1
+Unknown_8d82f: dw $0841, $0842, $0841, $4842
+ db -2
+ dw $0843, $0844
+ db -2
+ dw $0845, $0846
+ db -2
+ dw $0847, $0848
+ db -2
+ dw $0149, $4149, $c149, $8149
+ db -2
+ dw $204a
+ db -1
+ dw $204b
+ db -1
+ dw $204c
+ db -1
+ dw $204d
+ db -1
+ dw $034e, $03fd
+ db -2
+Unknown_8d861: dw $20fd
+ db -1
+Unknown_8d864: dw $204f
+ db -1
+Unknown_8d867: dw $0250, $1051, $01fd, $0152, $01fd, $0153
+ db -4
+Unknown_8d874: dw $2054
+ db -1
+Unknown_8d877: dw $2055
+ db -1
+Unknown_8d87a: dw $6055
+ db -1
+Unknown_8d87d: dw $a055
+ db -1
+Unknown_8d880: dw $e055
+ db -1
+Unknown_8d883: dw $0a56, $0957, $0a58, $0a59, $0958, $0a5a
+ db -2
+Unknown_8d890: dw $0250, $025b, $0250, $425b
+ db -2
+Unknown_8d899: dw $025c
+ db -1
+Unknown_8d89c: dw $025d
+ db -1
+Unknown_8d89f: dw $025e
+ db -1
+Unknown_8d8a2: dw $025f
+ db -1
+Unknown_8d8a5: dw $0260
+ db -1
+Unknown_8d8a8: dw $0261
+ db -1
+Unknown_8d8ab: dw $0262
+ db -1
+Unknown_8d8ae: dw $0332, $0333, $0334, $0330, $0331, $0330, $4331, $0330, $0331, $0330, $4331, $0330, $0331, $0330, $4331
+ db -1
+Unknown_8d8cd: dw $0330, $0331, $0330, $4331, $0330, $0331, $0330, $4331, $0330, $0331, $0330, $4331, $0332, $0333, $0334
+ db -4
+Unknown_8d8ec: dw $0367, $0368
+ db -2
+Unknown_8d8f1: dw $036c
+ db -1
+Unknown_8d8f4: dw $036d
+ db -1
+Unknown_8d8f7: dw $0269, $026a, $026b
+ db -4
+Unknown_8d8fe: dw $036e, $036f, $0370, $0371
+ db -2
+Unknown_8d907: dw $0371, $076e
+ db -1
+Unknown_8d90c: dw $2072, $0773, $0774
+ db -1
+Unknown_8d913: dw $0375
+ db -1
+Unknown_8d916: dw $0376, $0377, $0778
+ db -4
+Unknown_8d91d: dw $4376, $4377, $4778
+ db -4
+Unknown_8d924: dw $8376, $8377, $8778
+ db -4
+Unknown_8d92b: dw $c376, $c377, $c778
+ db -4
+Unknown_8d932: dw $0379, $037a, $037b, $077c, $077d
+ db -1
+Unknown_8d93d: dw $037e
+ db -1
+Unknown_8d940: dw $00fd
+ db -1
+Unknown_8d943: dw $087f, $0880
+ db -1
+Unknown_8d948: dw $487f, $4880
+ db -1
+; 8d94d
+
+Unknown_8d94d: ; 8d94d
+ dbw $00, Unknown_8dd8a ; 00
+ dbw $04, Unknown_8dd8a ; 01
+ dbw $4c, Unknown_8daf1 ; 02
+ dbw $5c, Unknown_8daf1 ; 03
+ dbw $6c, Unknown_8daf6 ; 04
+ dbw $6e, Unknown_8daf6 ; 05
+ dbw $2d, Unknown_8ddf0 ; 06
+ dbw $4d, Unknown_8ddf0 ; 07
+ dbw $60, Unknown_8de09 ; 08
+ dbw $00, Unknown_8de09 ; 09
+ dbw $00, Unknown_8de09 ; 0a
+ dbw $06, Unknown_8de09 ; 0b
+ dbw $0c, Unknown_8de7e ; 0c
+ dbw $0d, Unknown_8daf1 ; 0d
+ dbw $00, Unknown_8dc53 ; 0e
+ dbw $04, Unknown_8dc53 ; 0f
+ dbw $08, Unknown_8dc53 ; 10
+ dbw $40, Unknown_8dc53 ; 11
+ dbw $44, Unknown_8dc53 ; 12
+ dbw $48, Unknown_8dc53 ; 13
+ dbw $4c, Unknown_8dc53 ; 14
+ dbw $80, Unknown_8de87 ; 15
+ dbw $85, Unknown_8de87 ; 16
+ dbw $8a, Unknown_8de87 ; 17
+ dbw $00, Unknown_8db29 ; 18
+ dbw $01, Unknown_8db5c ; 19
+ dbw $09, Unknown_8db9d ; 1a
+ dbw $10, Unknown_8dc94 ; 1b
+ dbw $29, Unknown_8dc94 ; 1c
+ dbw $42, Unknown_8dc94 ; 1d
+ dbw $f8, Unknown_8e17e ; 1e
+ dbw $fa, Unknown_8e17e ; 1f
+ dbw $00, Unknown_8deb2 ; 20
+ dbw $00, Unknown_8dec3 ; 21
+ dbw $00, Unknown_8deec ; 22
+ dbw $0f, Unknown_8db07 ; 23
+ dbw $11, Unknown_8daf1 ; 24
+ dbw $12, Unknown_8daf1 ; 25
+ dbw $13, Unknown_8daf1 ; 26
+ dbw $00, Unknown_8df29 ; 27
+ dbw $08, Unknown_8df29 ; 28
+ dbw $10, Unknown_8df42 ; 29
+ dbw $10, Unknown_8df5b ; 2a
+ dbw $10, Unknown_8df74 ; 2b
+ dbw $10, Unknown_8df8d ; 2c
+ dbw $10, Unknown_8dfa6 ; 2d
+ dbw $3a, Unknown_8daf1 ; 2e
+ dbw $00, Unknown_8dd8a ; 2f
+ dbw $00, Unknown_8db18 ; 30
+ dbw $02, Unknown_8dd9b ; 31
+ dbw $06, Unknown_8db5c ; 32
+ dbw $0a, Unknown_8db5c ; 33
+ dbw $0e, Unknown_8db5c ; 34
+ dbw $12, Unknown_8db3a ; 35
+ dbw $13, Unknown_8db3a ; 36
+ dbw $00, Unknown_8dd8a ; 37
+ dbw $04, Unknown_8dd8a ; 38
+ dbw $10, Unknown_8db5c ; 39
+ dbw $00, Unknown_8dd9b ; 3a
+ dbw $04, Unknown_8daf1 ; 3b
+ dbw $00, Unknown_8dfbf ; 3c
+ dbw $00, Unknown_8ddac ; 3d
+ dbw $00, Unknown_8ddbd ; 3e
+ dbw $00, Unknown_8ddce ; 3f
+ dbw $00, Unknown_8dddf ; 40
+ dbw $00, Unknown_8dd9b ; 41
+ dbw $04, Unknown_8dd9b ; 42
+ dbw $00, Unknown_8dc2e ; 43
+ dbw $30, Unknown_8dc2e ; 44
+ dbw $03, Unknown_8dc2e ; 45
+ dbw $33, Unknown_8dc2e ; 46
+ dbw $06, Unknown_8dc2e ; 47
+ dbw $36, Unknown_8dc2e ; 48
+ dbw $09, Unknown_8dc2e ; 49
+ dbw $39, Unknown_8dc2e ; 4a
+ dbw $0c, Unknown_8dfcc ; 4b
+ dbw $0c, Unknown_8dfe5 ; 4c
+ dbw $3c, Unknown_8daf1 ; 4d
+ dbw $3e, Unknown_8daf1 ; 4e
+ dbw $00, Unknown_8de9c ; 4f
+ dbw $00, Unknown_8dea1 ; 50
+ dbw $00, Unknown_8dff6 ; 51
+ dbw $00, Unknown_8e007 ; 52
+ dbw $00, Unknown_8e018 ; 53
+ dbw $00, Unknown_8daf1 ; 54
+ dbw $01, Unknown_8daf1 ; 55
+ dbw $00, Unknown_8e029 ; 56
+ dbw $00, Unknown_8e076 ; 57
+ dbw $00, Unknown_8e0b7 ; 58
+ dbw $00, Unknown_8e0f4 ; 59
+ dbw $00, Unknown_8e139 ; 5a
+ dbw $04, Unknown_8dea1 ; 5b
+ dbw $00, Unknown_8e183 ; 5c
+ dbw $00, Unknown_8e1b4 ; 5d
+ dbw $00, Unknown_8e1b9 ; 5e
+ dbw $00, Unknown_8e1ca ; 5f
+ dbw $00, Unknown_8e1eb ; 60
+ dbw $00, Unknown_8e1f0 ; 61
+ dbw $00, Unknown_8e1f9 ; 62
+ dbw $00, Unknown_8e202 ; 63
+ dbw $04, Unknown_8e202 ; 64
+ dbw $00, Unknown_8e213 ; 65
+ dbw $04, Unknown_8e213 ; 66
+ dbw $20, Unknown_8e224 ; 67
+ dbw $21, Unknown_8e224 ; 68
+ dbw $22, Unknown_8e24b ; 69
+ dbw $23, Unknown_8e25c ; 6a
+ dbw $27, Unknown_8e27d ; 6b
+ dbw $2a, Unknown_8e229 ; 6c
+ dbw $2a, Unknown_8e23a ; 6d
+ dbw $00, Unknown_8e2ae ; 6e
+ dbw $08, Unknown_8e33f ; 6f
+ dbw $60, Unknown_8e3b0 ; 70
+ dbw $68, Unknown_8e429 ; 71
+ dbw $00, Unknown_8e4a6 ; 72
+ dbw $05, Unknown_8e4a6 ; 73
+ dbw $0a, Unknown_8e4a6 ; 74
+ dbw $50, Unknown_8e50b ; 75
+ dbw $00, Unknown_8e54c ; 76
+ dbw $01, Unknown_8e551 ; 77
+ dbw $04, Unknown_8e55e ; 78
+ dbw $00, Unknown_8db29 ; 79
+ dbw $01, Unknown_8e57b ; 7a
+ dbw $03, Unknown_8e59c ; 7b
+ dbw $08, Unknown_8e5cd ; 7c
+ dbw $1c, Unknown_8e5cd ; 7d
+ dbw $80, Unknown_8e61e ; 7e
+ dbw $00, Unknown_8e66f ; 7f
+ dbw $04, Unknown_8e66f ; 80
+ dbw $d0, Unknown_8e680 ; 81
+ dbw $d3, Unknown_8e680 ; 82
+ dbw $d6, Unknown_8e680 ; 83
+ dbw $6c, Unknown_8e6a5 ; 84
+ dbw $68, Unknown_8e6a5 ; 85
+ dbw $64, Unknown_8e6a5 ; 86
+ dbw $60, Unknown_8e6a5 ; 87
+ dbw $0c, Unknown_8e6a5 ; 88
+ dbw $08, Unknown_8e6a5 ; 89
+ dbw $04, Unknown_8e6a5 ; 8a
+ dbw $00, Unknown_8e6a5 ; 8b
+; 8daf1
+
+
+Unknown_8daf1: ; 8daf1
+ db 1
+ db $fc, $fc, $00, $00
+; 8daf6
+
+Unknown_8daf6: ; 8daf6
+ db 4
+ db $f8, $f8, $00, $00
+ db $f8, $00, $01, $00
+ db $00, $f8, $10, $00
+ db $00, $00, $11, $00
+; 8db07
+
+Unknown_8db07: ; 8db07
+ db 4
+ db $f8, $f8, $00, $00
+ db $f8, $00, $00, $20
+ db $00, $f8, $01, $00
+ db $00, $00, $01, $20
+; 8db18
+
+Unknown_8db18: ; 8db18
+ db 4
+ db $f8, $f8, $00, $80
+ db $f8, $00, $00, $a0
+ db $00, $f8, $01, $80
+ db $00, $00, $01, $a0
+; 8db29
+
+Unknown_8db29: ; 8db29
+ db 4
+ db $f8, $f8, $00, $00
+ db $f8, $00, $00, $20
+ db $00, $f8, $00, $40
+ db $00, $00, $00, $60
+; 8db3a
+
+Unknown_8db3a: ; 8db3a
+ db 4
+ db $f8, $f8, $00, $07
+ db $f8, $00, $00, $27
+ db $00, $f8, $00, $47
+ db $00, $00, $00, $67
+; 8db4b
+
+; 8db4b
+ db 4
+ db $f8, $f8, $00, $80
+ db $f8, $00, $00, $a0
+ db $00, $f8, $00, $c0
+ db $00, $00, $00, $e0
+; 8db5c
+
+Unknown_8db5c: ; 8db5c
+ db 16
+ db $f0, $f0, $00, $00
+ db $f0, $f8, $01, $00
+ db $f8, $f0, $02, $00
+ db $f8, $f8, $03, $00
+ db $f0, $00, $01, $20
+ db $f0, $08, $00, $20
+ db $f8, $00, $03, $20
+ db $f8, $08, $02, $20
+ db $00, $f0, $02, $40
+ db $00, $f8, $03, $40
+ db $08, $f0, $00, $40
+ db $08, $f8, $01, $40
+ db $00, $00, $03, $60
+ db $00, $08, $02, $60
+ db $08, $00, $01, $60
+ db $08, $08, $00, $60
+; 8db9d
+
+Unknown_8db9d: ; 8db9d
+ db 36
+ db $e8, $e8, $00, $00
+ db $e8, $f0, $01, $00
+ db $e8, $f8, $02, $00
+ db $f0, $e8, $03, $00
+ db $f0, $f0, $04, $00
+ db $f0, $f8, $05, $00
+ db $f8, $e8, $06, $00
+ db $f8, $f0, $05, $00
+ db $f8, $f8, $05, $00
+ db $e8, $00, $02, $20
+ db $e8, $08, $01, $20
+ db $e8, $10, $00, $20
+ db $f0, $00, $05, $20
+ db $f0, $08, $04, $20
+ db $f0, $10, $03, $20
+ db $f8, $00, $05, $20
+ db $f8, $08, $05, $20
+ db $f8, $10, $06, $20
+ db $00, $e8, $06, $40
+ db $00, $f0, $05, $40
+ db $00, $f8, $05, $40
+ db $08, $e8, $03, $40
+ db $08, $f0, $04, $40
+ db $08, $f8, $05, $40
+ db $10, $e8, $00, $40
+ db $10, $f0, $01, $40
+ db $10, $f8, $02, $40
+ db $00, $00, $05, $60
+ db $00, $08, $05, $60
+ db $00, $10, $06, $60
+ db $08, $00, $05, $60
+ db $08, $08, $04, $60
+ db $08, $10, $03, $60
+ db $10, $00, $02, $60
+ db $10, $08, $01, $60
+ db $10, $10, $00, $60
+; 8dc2e
+
+Unknown_8dc2e: ; 8dc2e
+ db 9
+ db $f4, $f4, $00, $00
+ db $f4, $fc, $01, $00
+ db $f4, $04, $02, $00
+ db $fc, $f4, $10, $00
+ db $fc, $fc, $11, $00
+ db $fc, $04, $12, $00
+ db $04, $f4, $20, $00
+ db $04, $fc, $21, $00
+ db $04, $04, $22, $00
+; 8dc53
+
+Unknown_8dc53: ; 8dc53
+ db 16
+ db $f0, $f0, $00, $00
+ db $f0, $f8, $01, $00
+ db $f0, $00, $02, $00
+ db $f0, $08, $03, $00
+ db $f8, $f0, $10, $00
+ db $f8, $f8, $11, $00
+ db $f8, $00, $12, $00
+ db $f8, $08, $13, $00
+ db $00, $f0, $20, $00
+ db $00, $f8, $21, $00
+ db $00, $00, $22, $00
+ db $00, $08, $23, $00
+ db $08, $f0, $30, $00
+ db $08, $f8, $31, $00
+ db $08, $00, $32, $00
+ db $08, $08, $33, $00
+; 8dc94
+
+Unknown_8dc94: ; 8dc94
+ db 25
+ db $ec, $ec, $00, $00
+ db $f4, $ec, $01, $00
+ db $fc, $ec, $02, $00
+ db $04, $ec, $03, $00
+ db $0c, $ec, $04, $00
+ db $ec, $f4, $05, $00
+ db $f4, $f4, $06, $00
+ db $fc, $f4, $07, $00
+ db $04, $f4, $08, $00
+ db $0c, $f4, $09, $00
+ db $ec, $fc, $0a, $00
+ db $f4, $fc, $0b, $00
+ db $fc, $fc, $0c, $00
+ db $04, $fc, $0d, $00
+ db $0c, $fc, $0e, $00
+ db $ec, $04, $0f, $00
+ db $f4, $04, $10, $00
+ db $fc, $04, $11, $00
+ db $04, $04, $12, $00
+ db $0c, $04, $13, $00
+ db $ec, $0c, $14, $00
+ db $f4, $0c, $15, $00
+ db $fc, $0c, $16, $00
+ db $04, $0c, $17, $00
+ db $0c, $0c, $18, $00
+; 8dcf9
+
+; 8dcf9
+ db 36
+ db $e8, $e8, $00, $00
+ db $e8, $f0, $01, $00
+ db $e8, $f8, $02, $00
+ db $e8, $00, $03, $00
+ db $e8, $08, $04, $00
+ db $e8, $10, $05, $00
+ db $f0, $e8, $06, $00
+ db $f0, $f0, $07, $00
+ db $f0, $f8, $08, $00
+ db $f0, $00, $09, $00
+ db $f0, $08, $0a, $00
+ db $f0, $10, $0b, $00
+ db $f8, $e8, $0c, $00
+ db $f8, $f0, $0d, $00
+ db $f8, $f8, $0e, $00
+ db $f8, $00, $0f, $00
+ db $f8, $08, $10, $00
+ db $f8, $10, $11, $00
+ db $00, $e8, $12, $00
+ db $00, $f0, $13, $00
+ db $00, $f8, $14, $00
+ db $00, $00, $15, $00
+ db $00, $08, $16, $00
+ db $00, $10, $17, $00
+ db $08, $e8, $18, $00
+ db $08, $f0, $19, $00
+ db $08, $f8, $1a, $00
+ db $08, $00, $1b, $00
+ db $08, $08, $1c, $00
+ db $08, $10, $1d, $00
+ db $10, $e8, $1e, $00
+ db $10, $f0, $1f, $00
+ db $10, $f8, $20, $00
+ db $10, $00, $21, $00
+ db $10, $08, $22, $00
+ db $10, $10, $23, $00
+; 8dd8a
+
+Unknown_8dd8a: ; 8dd8a
+ db 4
+ db $f8, $f8, $00, $00
+ db $f8, $00, $01, $00
+ db $00, $f8, $02, $00
+ db $00, $00, $03, $00
+; 8dd9b
+
+Unknown_8dd9b: ; 8dd9b
+ db 4
+ db $f8, $f8, $00, $80
+ db $f8, $00, $01, $80
+ db $00, $f8, $02, $80
+ db $00, $00, $03, $80
+; 8ddac
+
+Unknown_8ddac: ; 8ddac
+ db 4
+ db $f8, $f8, $00, $00
+ db $f8, $00, $01, $00
+ db $00, $f8, $08, $00
+ db $00, $00, $03, $00
+; 8ddbd
+
+Unknown_8ddbd: ; 8ddbd
+ db 4
+ db $f8, $f8, $04, $00
+ db $f8, $00, $05, $00
+ db $00, $f8, $08, $00
+ db $00, $00, $07, $00
+; 8ddce
+
+Unknown_8ddce: ; 8ddce
+ db 4
+ db $f8, $f8, $00, $00
+ db $f8, $00, $01, $00
+ db $00, $f8, $09, $00
+ db $00, $00, $03, $00
+; 8dddf
+
+Unknown_8dddf: ; 8dddf
+ db 4
+ db $f8, $f8, $04, $00
+ db $f8, $00, $05, $00
+ db $00, $f8, $09, $00
+ db $00, $00, $07, $00
+; 8ddf0
+
+Unknown_8ddf0: ; 8ddf0
+ db 6
+ db $f8, $f4, $00, $01
+ db $f8, $fc, $01, $01
+ db $f8, $04, $02, $01
+ db $00, $f4, $10, $01
+ db $00, $fc, $11, $01
+ db $00, $04, $12, $01
+; 8de09
+
+Unknown_8de09: ; 8de09
+ db 29
+ db $e8, $e8, $00, $00
+ db $e8, $f0, $01, $00
+ db $e8, $f8, $02, $00
+ db $e8, $00, $03, $00
+ db $f0, $e8, $10, $00
+ db $f0, $f0, $11, $00
+ db $f0, $f8, $12, $00
+ db $f0, $00, $13, $00
+ db $f8, $e8, $20, $00
+ db $f8, $f0, $21, $00
+ db $f8, $f8, $22, $00
+ db $f8, $00, $23, $00
+ db $f8, $08, $24, $00
+ db $00, $e8, $30, $80
+ db $00, $f0, $31, $80
+ db $00, $f8, $32, $80
+ db $00, $00, $33, $80
+ db $00, $08, $34, $80
+ db $08, $e8, $40, $80
+ db $08, $f0, $41, $80
+ db $08, $f8, $42, $80
+ db $08, $00, $43, $80
+ db $08, $08, $44, $80
+ db $08, $10, $45, $80
+ db $10, $f0, $51, $80
+ db $10, $f8, $52, $80
+ db $10, $00, $53, $80
+ db $10, $08, $54, $80
+ db $10, $10, $55, $80
+; 8de7e
+
+Unknown_8de7e: ; 8de7e
+ db 2
+ db $f8, $fc, $00, $00
+ db $00, $fc, $10, $00
+; 8de87
+
+Unknown_8de87: ; 8de87
+ db 5
+ db $f0, $18, $00, $00
+ db $f0, $20, $01, $00
+ db $f8, $10, $02, $00
+ db $f8, $18, $03, $00
+ db $00, $10, $04, $00
+; 8de9c
+
+Unknown_8de9c: ; 8de9c
+ db 1
+ db $fc, $fc, $00, $06
+; 8dea1
+
+Unknown_8dea1: ; 8dea1
+ db 4
+ db $f8, $f8, $00, $06
+ db $f8, $00, $01, $06
+ db $00, $f8, $02, $06
+ db $00, $00, $03, $06
+; 8deb2
+
+Unknown_8deb2: ; 8deb2
+ db 4
+ db $ff, $ff, $00, $00
+ db $ff, $00, $00, $20
+ db $00, $ff, $00, $40
+ db $00, $00, $00, $60
+; 8dec3
+
+Unknown_8dec3: ; 8dec3
+ db 10
+ db $ff, $00, $00, $00
+ db $ff, $08, $01, $00
+ db $ff, $10, $01, $00
+ db $ff, $18, $01, $00
+ db $ff, $20, $00, $20
+ db $00, $00, $00, $40
+ db $00, $08, $01, $40
+ db $00, $10, $01, $40
+ db $00, $18, $01, $40
+ db $00, $20, $00, $60
+; 8deec
+
+Unknown_8deec: ; 8deec
+ db 15
+ db $ec, $f4, $00, $11
+ db $ec, $fc, $01, $11
+ db $ec, $04, $02, $11
+ db $f4, $f4, $03, $11
+ db $f4, $fc, $04, $11
+ db $f4, $04, $05, $11
+ db $fc, $f4, $06, $11
+ db $fc, $fc, $07, $11
+ db $fc, $04, $08, $11
+ db $04, $f4, $09, $11
+ db $04, $fc, $0a, $11
+ db $04, $04, $0b, $11
+ db $0c, $f4, $0c, $11
+ db $0c, $fc, $0d, $11
+ db $0c, $04, $0e, $11
+; 8df29
+
+Unknown_8df29: ; 8df29
+ db 6
+ db $f4, $f4, $00, $15
+ db $f4, $fc, $02, $15
+ db $f4, $04, $00, $35
+ db $04, $f4, $04, $15
+ db $04, $fc, $06, $15
+ db $04, $04, $04, $35
+; 8df42
+
+Unknown_8df42: ; 8df42
+ db 6
+ db $f4, $f4, $00, $16
+ db $f4, $fc, $02, $16
+ db $f4, $04, $04, $16
+ db $04, $f4, $06, $16
+ db $04, $fc, $08, $16
+ db $04, $04, $0a, $16
+; 8df5b
+
+Unknown_8df5b: ; 8df5b
+ db 6
+ db $f4, $f4, $00, $16
+ db $f4, $fc, $02, $16
+ db $f4, $04, $04, $16
+ db $04, $f4, $0c, $16
+ db $04, $fc, $0e, $16
+ db $04, $04, $10, $16
+; 8df74
+
+Unknown_8df74: ; 8df74
+ db 6
+ db $f4, $f4, $00, $16
+ db $f4, $fc, $02, $16
+ db $f4, $04, $04, $16
+ db $04, $f4, $12, $16
+ db $04, $fc, $14, $16
+ db $04, $04, $16, $16
+; 8df8d
+
+Unknown_8df8d: ; 8df8d
+ db 6
+ db $f4, $f4, $00, $16
+ db $f4, $fc, $02, $16
+ db $f4, $04, $04, $16
+ db $04, $f4, $18, $16
+ db $04, $fc, $1a, $16
+ db $04, $04, $1c, $16
+; 8dfa6
+
+Unknown_8dfa6: ; 8dfa6
+ db 6
+ db $f4, $f4, $1e, $16
+ db $f4, $fc, $20, $16
+ db $f4, $04, $22, $16
+ db $04, $f4, $24, $16
+ db $04, $fc, $26, $16
+ db $04, $04, $28, $16
+; 8dfbf
+
+Unknown_8dfbf: ; 8dfbf
+ db 3
+ db $f4, $fc, $00, $10
+ db $fc, $fc, $00, $10
+ db $04, $fc, $00, $10
+; 8dfcc
+
+Unknown_8dfcc: ; 8dfcc
+ db 6
+ db $00, $00, $00, $00
+ db $00, $08, $01, $00
+ db $00, $10, $01, $00
+ db $00, $18, $01, $00
+ db $00, $20, $02, $00
+ db $00, $28, $03, $00
+; 8dfe5
+
+Unknown_8dfe5: ; 8dfe5
+ db 4
+ db $00, $00, $00, $00
+ db $00, $08, $01, $00
+ db $00, $10, $02, $00
+ db $00, $18, $03, $00
+; 8dff6
+
+Unknown_8dff6: ; 8dff6
+ db 4
+ db $f8, $f6, $00, $06
+ db $f8, $02, $01, $06
+ db $00, $f6, $02, $06
+ db $00, $02, $03, $06
+; 8e007
+
+Unknown_8e007: ; 8e007
+ db 4
+ db $f8, $f4, $00, $06
+ db $f8, $04, $01, $06
+ db $00, $f4, $02, $06
+ db $00, $04, $03, $06
+; 8e018
+
+Unknown_8e018: ; 8e018
+ db 4
+ db $f8, $f0, $00, $06
+ db $f8, $08, $01, $06
+ db $00, $f0, $02, $06
+ db $00, $08, $03, $06
+; 8e029
+
+Unknown_8e029: ; 8e029
+ db 19
+ db $f8, $e0, $00, $00
+ db $f0, $e8, $02, $00
+ db $00, $e8, $04, $00
+ db $e8, $f0, $06, $00
+ db $f8, $f0, $08, $00
+ db $08, $f0, $0a, $00
+ db $e8, $f8, $0c, $00
+ db $f8, $f8, $0e, $00
+ db $08, $f8, $10, $00
+ db $e8, $00, $12, $00
+ db $f8, $00, $14, $00
+ db $08, $00, $16, $00
+ db $e8, $08, $18, $00
+ db $f8, $08, $1a, $00
+ db $08, $08, $1c, $00
+ db $f8, $10, $1e, $00
+ db $08, $10, $20, $00
+ db $f0, $18, $22, $00
+ db $00, $18, $24, $00
+; 8e076
+
+Unknown_8e076: ; 8e076
+ db 16
+ db $f8, $e0, $00, $00
+ db $f0, $e8, $02, $00
+ db $00, $e8, $04, $00
+ db $f8, $f0, $26, $00
+ db $08, $f0, $0a, $00
+ db $e8, $f8, $28, $00
+ db $f8, $f8, $2a, $00
+ db $08, $f8, $10, $00
+ db $f8, $00, $2c, $00
+ db $08, $00, $16, $00
+ db $f8, $08, $30, $00
+ db $08, $08, $1c, $00
+ db $f8, $10, $1e, $00
+ db $08, $10, $20, $00
+ db $f0, $18, $22, $00
+ db $00, $18, $24, $00
+; 8e0b7
+
+Unknown_8e0b7: ; 8e0b7
+ db 15
+ db $f8, $e0, $00, $00
+ db $f0, $e8, $02, $00
+ db $00, $e8, $32, $00
+ db $f8, $f0, $34, $00
+ db $08, $f0, $36, $00
+ db $f8, $f8, $38, $00
+ db $08, $f8, $3a, $00
+ db $f8, $00, $3c, $00
+ db $08, $00, $3e, $00
+ db $f8, $08, $30, $00
+ db $08, $08, $1c, $00
+ db $f8, $10, $1e, $00
+ db $08, $10, $20, $00
+ db $f0, $18, $22, $00
+ db $00, $18, $24, $00
+; 8e0f4
+
+Unknown_8e0f4: ; 8e0f4
+ db 17
+ db $f8, $e0, $00, $00
+ db $f0, $e8, $02, $00
+ db $00, $e8, $04, $00
+ db $f8, $f0, $40, $00
+ db $08, $f0, $42, $00
+ db $18, $f0, $44, $00
+ db $f8, $f8, $46, $00
+ db $08, $f8, $48, $00
+ db $18, $f8, $4a, $00
+ db $f8, $00, $4c, $00
+ db $08, $00, $4e, $00
+ db $f8, $08, $30, $00
+ db $08, $08, $1c, $00
+ db $f8, $10, $1e, $00
+ db $08, $10, $20, $00
+ db $f0, $18, $22, $00
+ db $00, $18, $24, $00
+; 8e139
+
+Unknown_8e139: ; 8e139
+ db 17
+ db $f8, $e0, $00, $00
+ db $f0, $e8, $02, $00
+ db $00, $e8, $04, $00
+ db $f8, $f0, $50, $00
+ db $08, $f0, $0a, $00
+ db $e8, $f8, $52, $00
+ db $f8, $f8, $54, $00
+ db $08, $f8, $10, $00
+ db $e8, $00, $56, $00
+ db $f8, $00, $2e, $00
+ db $08, $00, $16, $00
+ db $f8, $08, $30, $00
+ db $08, $08, $1c, $00
+ db $f8, $10, $1e, $00
+ db $08, $10, $20, $00
+ db $f0, $18, $22, $00
+ db $00, $18, $24, $00
+; 8e17e
+
+Unknown_8e17e: ; 8e17e
+ db 1
+ db $fc, $fc, $00, $11
+; 8e183
+
+Unknown_8e183: ; 8e183
+ db 12
+ db $00, $00, $30, $00
+ db $00, $08, $31, $00
+ db $00, $10, $31, $00
+ db $00, $18, $31, $00
+ db $00, $20, $31, $00
+ db $00, $28, $32, $00
+ db $08, $00, $33, $00
+ db $08, $08, $34, $00
+ db $08, $10, $34, $00
+ db $08, $18, $34, $00
+ db $08, $20, $34, $00
+ db $08, $28, $35, $00
+; 8e1b4
+
+Unknown_8e1b4: ; 8e1b4
+ db 1
+ db $00, $00, $ed, $00
+; 8e1b9
+
+Unknown_8e1b9: ; 8e1b9
+ db 4
+ db $ff, $ff, $30, $00
+ db $ff, $01, $32, $00
+ db $01, $ff, $33, $00
+ db $01, $01, $35, $00
+; 8e1ca
+
+Unknown_8e1ca: ; 8e1ca
+ db 8
+ db $ff, $ff, $30, $00
+ db $ff, $04, $31, $00
+ db $ff, $0c, $31, $00
+ db $ff, $11, $32, $00
+ db $01, $ff, $33, $00
+ db $01, $04, $34, $00
+ db $01, $0c, $34, $00
+ db $01, $11, $35, $00
+; 8e1eb
+
+Unknown_8e1eb: ; 8e1eb
+ db 1
+ db $00, $00, $34, $00
+; 8e1f0
+
+Unknown_8e1f0: ; 8e1f0
+ db 2
+ db $00, $00, $30, $00
+ db $08, $00, $33, $00
+; 8e1f9
+
+Unknown_8e1f9: ; 8e1f9
+ db 2
+ db $00, $00, $32, $00
+ db $08, $00, $35, $00
+; 8e202
+
+Unknown_8e202: ; 8e202
+ db 4
+ db $f8, $f8, $00, $01
+ db $f8, $00, $01, $01
+ db $00, $f8, $02, $01
+ db $00, $00, $03, $01
+; 8e213
+
+Unknown_8e213: ; 8e213
+ db 4
+ db $f8, $f8, $00, $81
+ db $f8, $00, $01, $81
+ db $00, $f8, $02, $81
+ db $00, $00, $03, $81
+; 8e224
+
+Unknown_8e224: ; 8e224
+ db 1
+ db $fc, $fc, $00, $02
+; 8e229
+
+Unknown_8e229: ; 8e229
+ db 4
+ db $f0, $fc, $00, $03
+ db $f8, $fc, $01, $03
+ db $00, $fc, $02, $03
+ db $08, $fc, $03, $03
+; 8e23a
+
+Unknown_8e23a: ; 8e23a
+ db 4
+ db $f0, $fc, $03, $44
+ db $f8, $fc, $02, $44
+ db $00, $fc, $01, $44
+ db $08, $fc, $00, $44
+; 8e24b
+
+Unknown_8e24b: ; 8e24b
+ db 4
+ db $f8, $f8, $00, $01
+ db $f8, $00, $00, $21
+ db $00, $f8, $00, $41
+ db $00, $00, $00, $61
+; 8e25c
+
+Unknown_8e25c: ; 8e25c
+ db 8
+ db $f4, $f4, $00, $01
+ db $f4, $fc, $01, $01
+ db $f4, $04, $00, $21
+ db $fc, $f4, $02, $01
+ db $fc, $04, $02, $21
+ db $04, $f4, $00, $41
+ db $04, $fc, $01, $41
+ db $04, $04, $00, $61
+; 8e27d
+
+Unknown_8e27d: ; 8e27d
+ db 12
+ db $f0, $f0, $00, $01
+ db $f0, $f8, $01, $01
+ db $f8, $f0, $02, $01
+ db $f0, $00, $01, $21
+ db $f0, $08, $00, $21
+ db $f8, $08, $02, $21
+ db $00, $f0, $02, $41
+ db $08, $f0, $00, $41
+ db $08, $f8, $01, $41
+ db $00, $08, $02, $61
+ db $08, $00, $01, $61
+ db $08, $08, $00, $61
+; 8e2ae
+
+Unknown_8e2ae: ; 8e2ae
+ db 36
+ db $e8, $08, $05, $00
+ db $e8, $10, $06, $00
+ db $e8, $18, $07, $00
+ db $f0, $e8, $11, $00
+ db $f0, $f0, $12, $00
+ db $f0, $f8, $13, $00
+ db $f0, $00, $14, $00
+ db $f0, $08, $15, $00
+ db $f0, $10, $16, $00
+ db $f0, $18, $17, $00
+ db $f8, $e0, $20, $00
+ db $f8, $e8, $21, $00
+ db $f8, $f0, $22, $00
+ db $f8, $f8, $23, $00
+ db $f8, $00, $24, $00
+ db $f8, $08, $25, $00
+ db $f8, $10, $26, $00
+ db $f8, $18, $27, $00
+ db $00, $e0, $30, $00
+ db $00, $e8, $31, $00
+ db $00, $f0, $32, $00
+ db $00, $f8, $33, $00
+ db $00, $00, $34, $00
+ db $00, $08, $35, $00
+ db $00, $10, $36, $00
+ db $08, $e0, $40, $00
+ db $08, $e8, $41, $00
+ db $08, $f0, $42, $00
+ db $08, $f8, $43, $00
+ db $08, $00, $44, $00
+ db $08, $08, $45, $00
+ db $08, $10, $46, $00
+ db $08, $18, $47, $00
+ db $10, $e0, $50, $00
+ db $10, $e8, $51, $00
+ db $10, $18, $57, $00
+; 8e33f
+
+Unknown_8e33f: ; 8e33f
+ db 28
+ db $e8, $00, $04, $00
+ db $e8, $08, $05, $00
+ db $e8, $10, $06, $00
+ db $f0, $e8, $11, $00
+ db $f0, $f0, $12, $00
+ db $f0, $f8, $13, $00
+ db $f0, $00, $14, $00
+ db $f0, $08, $15, $00
+ db $f0, $10, $16, $00
+ db $f8, $e8, $21, $00
+ db $f8, $f0, $22, $00
+ db $f8, $f8, $23, $00
+ db $f8, $00, $24, $00
+ db $f8, $08, $25, $00
+ db $f8, $10, $26, $00
+ db $00, $e0, $30, $00
+ db $00, $e8, $31, $00
+ db $00, $f0, $32, $00
+ db $00, $f8, $33, $00
+ db $00, $00, $34, $00
+ db $00, $08, $35, $00
+ db $08, $f0, $42, $00
+ db $08, $f8, $43, $00
+ db $08, $00, $44, $00
+ db $08, $08, $45, $00
+ db $10, $f8, $53, $00
+ db $10, $00, $54, $00
+ db $10, $08, $55, $00
+; 8e3b0
+
+Unknown_8e3b0: ; 8e3b0
+ db 30
+ db $e8, $00, $04, $00
+ db $e8, $08, $05, $00
+ db $f0, $e8, $11, $00
+ db $f0, $f0, $12, $00
+ db $f0, $f8, $13, $00
+ db $f0, $00, $14, $00
+ db $f0, $08, $15, $00
+ db $f0, $10, $16, $00
+ db $f0, $18, $17, $00
+ db $f8, $e0, $20, $00
+ db $f8, $e8, $21, $00
+ db $f8, $f0, $22, $00
+ db $f8, $f8, $23, $00
+ db $f8, $00, $24, $00
+ db $f8, $08, $25, $00
+ db $f8, $10, $26, $00
+ db $00, $e0, $30, $00
+ db $00, $e8, $31, $00
+ db $00, $f0, $32, $00
+ db $00, $f8, $33, $00
+ db $00, $00, $34, $00
+ db $00, $08, $35, $00
+ db $08, $f0, $42, $00
+ db $08, $f8, $43, $00
+ db $08, $00, $44, $00
+ db $08, $08, $45, $00
+ db $10, $f0, $52, $00
+ db $10, $f8, $53, $00
+ db $10, $00, $54, $00
+ db $10, $08, $55, $00
+; 8e429
+
+Unknown_8e429: ; 8e429
+ db 31
+ db $f0, $e8, $11, $00
+ db $f0, $f0, $12, $00
+ db $f0, $f8, $13, $00
+ db $f0, $00, $14, $00
+ db $f0, $08, $15, $00
+ db $f0, $10, $16, $00
+ db $f0, $18, $17, $00
+ db $f8, $e0, $20, $00
+ db $f8, $e8, $21, $00
+ db $f8, $f0, $22, $00
+ db $f8, $f8, $23, $00
+ db $f8, $00, $24, $00
+ db $f8, $08, $25, $00
+ db $f8, $10, $26, $00
+ db $f8, $18, $27, $00
+ db $00, $e0, $30, $00
+ db $00, $e8, $31, $00
+ db $00, $f0, $32, $00
+ db $00, $f8, $33, $00
+ db $00, $00, $34, $00
+ db $00, $08, $35, $00
+ db $00, $10, $36, $00
+ db $08, $e8, $41, $00
+ db $08, $f0, $42, $00
+ db $08, $f8, $43, $00
+ db $08, $00, $44, $00
+ db $08, $08, $45, $00
+ db $10, $e8, $51, $00
+ db $10, $f0, $52, $00
+ db $10, $00, $54, $00
+ db $10, $08, $55, $00
+; 8e4a6
+
+Unknown_8e4a6: ; 8e4a6
+ db 25
+ db $ec, $ec, $00, $09
+ db $ec, $f4, $01, $09
+ db $ec, $fc, $02, $09
+ db $ec, $04, $03, $09
+ db $ec, $0c, $04, $09
+ db $f4, $ec, $10, $09
+ db $f4, $f4, $11, $09
+ db $f4, $fc, $12, $09
+ db $f4, $04, $13, $09
+ db $f4, $0c, $14, $09
+ db $fc, $ec, $20, $09
+ db $fc, $f4, $21, $09
+ db $fc, $fc, $22, $09
+ db $fc, $04, $23, $09
+ db $fc, $0c, $24, $09
+ db $04, $ec, $30, $09
+ db $04, $f4, $31, $09
+ db $04, $fc, $32, $09
+ db $04, $04, $33, $09
+ db $04, $0c, $34, $09
+ db $0c, $ec, $40, $09
+ db $0c, $f4, $41, $09
+ db $0c, $fc, $42, $09
+ db $0c, $04, $43, $09
+ db $0c, $0c, $44, $09
+; 8e50b
+
+Unknown_8e50b: ; 8e50b
+ db 16
+ db $f0, $ec, $00, $0a
+ db $f0, $f4, $01, $0a
+ db $f0, $fc, $02, $0a
+ db $f0, $04, $03, $0a
+ db $f8, $ec, $04, $0a
+ db $f8, $f4, $05, $0a
+ db $f8, $fc, $06, $0a
+ db $f8, $04, $07, $0a
+ db $00, $ec, $08, $0a
+ db $00, $f4, $09, $0a
+ db $00, $fc, $0a, $0a
+ db $00, $04, $0b, $0a
+ db $08, $ec, $0c, $0a
+ db $08, $f4, $0d, $0a
+ db $08, $fc, $0e, $0a
+ db $08, $04, $0f, $0a
+; 8e54c
+
+Unknown_8e54c: ; 8e54c
+ db 1
+ db $fc, $fc, $00, $00
+; 8e551
+
+Unknown_8e551: ; 8e551
+ db 3
+ db $00, $f8, $00, $00
+ db $f8, $f8, $01, $00
+ db $f8, $00, $02, $00
+; 8e55e
+
+Unknown_8e55e: ; 8e55e
+ db 7
+ db $08, $f0, $00, $00
+ db $00, $f0, $01, $00
+ db $f8, $f0, $02, $00
+ db $f8, $f8, $03, $00
+ db $f0, $f8, $04, $00
+ db $f0, $00, $05, $00
+ db $f0, $08, $06, $00
+; 8e57b
+
+Unknown_8e57b: ; 8e57b
+ db 8
+ db $f8, $f0, $00, $00
+ db $f8, $f8, $01, $00
+ db $f8, $00, $01, $20
+ db $f8, $08, $00, $20
+ db $00, $f0, $00, $40
+ db $00, $f8, $01, $40
+ db $00, $00, $01, $60
+ db $00, $08, $00, $60
+; 8e59c
+
+Unknown_8e59c: ; 8e59c
+ db 12
+ db $e8, $f8, $00, $00
+ db $f0, $f8, $01, $00
+ db $f8, $f8, $02, $00
+ db $e8, $00, $00, $20
+ db $f0, $00, $01, $20
+ db $f8, $00, $02, $20
+ db $00, $f8, $02, $40
+ db $08, $f8, $01, $40
+ db $10, $f8, $00, $40
+ db $00, $00, $02, $60
+ db $08, $00, $01, $60
+ db $10, $00, $00, $60
+; 8e5cd
+
+Unknown_8e5cd: ; 8e5cd
+ db 20
+ db $ec, $f0, $00, $00
+ db $ec, $f8, $01, $00
+ db $ec, $00, $02, $00
+ db $ec, $08, $03, $00
+ db $f4, $f0, $04, $00
+ db $f4, $f8, $05, $00
+ db $f4, $00, $06, $00
+ db $f4, $08, $07, $00
+ db $fc, $f0, $08, $00
+ db $fc, $f8, $09, $00
+ db $fc, $00, $0a, $00
+ db $fc, $08, $0b, $00
+ db $04, $f0, $0c, $00
+ db $04, $f8, $0d, $00
+ db $04, $00, $0e, $00
+ db $04, $08, $0f, $00
+ db $0c, $f0, $10, $00
+ db $0c, $f8, $11, $00
+ db $0c, $00, $12, $00
+ db $0c, $08, $13, $00
+; 8e61e
+
+Unknown_8e61e: ; 8e61e
+ db 20
+ db $00, $08, $00, $81
+ db $08, $10, $00, $81
+ db $10, $18, $00, $81
+ db $18, $20, $00, $81
+ db $20, $28, $00, $81
+ db $18, $30, $00, $81
+ db $10, $38, $00, $81
+ db $08, $40, $00, $81
+ db $00, $48, $00, $81
+ db $08, $50, $00, $81
+ db $10, $58, $00, $81
+ db $18, $60, $00, $81
+ db $20, $68, $00, $81
+ db $18, $70, $00, $81
+ db $10, $78, $00, $81
+ db $08, $80, $00, $81
+ db $00, $88, $00, $81
+ db $08, $90, $00, $81
+ db $10, $98, $00, $81
+ db $18, $a0, $00, $81
+; 8e66f
+
+Unknown_8e66f: ; 8e66f
+ db 4
+ db $f8, $f8, $00, $02
+ db $f8, $00, $01, $02
+ db $00, $f8, $02, $02
+ db $00, $00, $03, $02
+; 8e680
+
+Unknown_8e680: ; 8e680
+ db 9
+ db $f0, $f4, $00, $01
+ db $f0, $fc, $01, $01
+ db $f0, $04, $02, $01
+ db $f8, $f4, $10, $01
+ db $f8, $fc, $11, $01
+ db $f8, $04, $12, $01
+ db $00, $f4, $20, $01
+ db $00, $fc, $21, $01
+ db $00, $04, $22, $01
+; 8e6a5
+
+Unknown_8e6a5: ; 8e6a5
+ db 24
+ db $d8, $f4, $00, $01
+ db $d8, $fc, $01, $01
+ db $d8, $04, $02, $01
+ db $d8, $0c, $03, $01
+ db $e0, $f4, $10, $01
+ db $e0, $fc, $11, $01
+ db $e0, $04, $12, $01
+ db $e0, $0c, $13, $01
+ db $e8, $f4, $20, $01
+ db $e8, $fc, $21, $01
+ db $e8, $04, $22, $01
+ db $e8, $0c, $23, $01
+ db $f0, $f4, $30, $01
+ db $f0, $fc, $31, $01
+ db $f0, $04, $32, $01
+ db $f0, $0c, $33, $01
+ db $f8, $f4, $40, $01
+ db $f8, $fc, $41, $01
+ db $f8, $04, $42, $01
+ db $f8, $0c, $43, $01
+ db $00, $f4, $50, $01
+ db $00, $fc, $51, $01
+ db $00, $04, $52, $01
+ db $00, $0c, $53, $01
+; 8e706
+Unknown_8e706: ; Broken 2bpp pointers
+ dbbw $80, $01, $672a ; 128-tile 2bpp at 1:672a (inside Multiply)
+ dbbw $80, $01, $672a
+ dbbw $80, $01, $672a
+ dbbw $80, $01, $672a
+ dbbw $10, $37, $672a ; 16-tile 2bpp at 37:672a (within Tileset11GFX)
+ dbbw $10, $11, $672a ; 16-tile 2bpp at 11:672a (empty data)
+ dbbw $10, $39, $672a ; 16-tile 2bpp at 39:672a (empty data)
+ dbbw $10, $24, $672a ; 16-tile 2bpp at 24:672a (inside Function926f7)
+ dbbw $10, $21, $672a ; 16-tile 2bpp at 21:672a (inside Function8671c)
+
+Function8e72a: ; 8e72a
+ add $10
+Function8e72c: ; 8e72c
+ and $3f
+ cp $20
+ jr nc, .asm_8e737
+ call Function8e741
+ ld a, h
+ ret
-GetSpriteLength: ; 14386
-; Return the length of sprite type a in tiles.
+.asm_8e737
+ and $1f
+ call Function8e741
+ ld a, h
+ xor $ff ; cpl
+ inc a
+ ret
+; 8e741
- cp WALKING_SPRITE
- jr z, .AnyDirection
- cp STANDING_SPRITE
- jr z, .AnyDirection
- cp STILL_SPRITE
- jr z, .OneDirection
+Function8e741: ; 8e741
+ ld e, a
+ ld a, d
+ ld d, 0
+ ld hl, Unknown_8e75d
+rept 2
+ add hl, de
+endr
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ ld hl, 0
+.asm_8e750
+ srl a
+ jr nc, .asm_8e755
+ add hl, de
- ld a, 12
+.asm_8e755
+ sla e
+ rl d
+ and a
+ jr nz, .asm_8e750
ret
+; 8e75d
+
+Unknown_8e75d: ; 8e75d
+ sine_wave $100
-.AnyDirection
- ld a, 12
- ret
-.OneDirection
- ld a, 4
+Function8e79d: ; 8e79d
+ ld a, [hSGB]
+ ld de, GFX_8e7f4
+ and a
+ jr z, .asm_8e7a8
+ ld de, GFX_8e804
+
+.asm_8e7a8
+ ld hl, VTiles0
+ lb bc, BANK(GFX_8e7f4), 1
+ call Request2bpp
+ ld c, $8
+ ld d, $0
+.asm_8e7b5
+ push bc
+ call Function8e7c6
+ call DelayFrame
+ pop bc
+rept 2
+ inc d
+endr
+ dec c
+ jr nz, .asm_8e7b5
+ call ClearSprites
ret
-; 1439b
+; 8e7c6
+Function8e7c6: ; 8e7c6
+ ld hl, Sprites
+ ld c, $8
+.asm_8e7cb
+ ld a, c
+ and a
+ ret z
+ dec c
+ ld a, c
+ sla a
+ sla a
+ sla a
+ push af
+ push de
+ push hl
+ call Function8e72c
+ pop hl
+ pop de
+ add $68
+ ld [hli], a
+ pop af
+ push de
+ push hl
+ call Function8e72a
+ pop hl
+ pop de
+ add $54
+ ld [hli], a
+ ld a, $0
+ ld [hli], a
+ ld a, $6
+ ld [hli], a
+ jr .asm_8e7cb
+; 8e7f4
+
+GFX_8e7f4: ; 8e7f4
+INCBIN "gfx/unknown/08e7f4.2bpp"
+GFX_8e804: ; 8e804
+INCBIN "gfx/unknown/08e804.2bpp"
-Function1439b: ; 1439b
- ld hl, UsedSprites
- ld c, SPRITE_GFX_LIST_CAPACITY
+ClearSpriteAnims: ; 8e814
+ push hl
+ push de
+ push bc
+ push af
+ ld hl, wSpriteAnimDict
+ ld bc, wSpriteAnimsEnd - wSpriteAnimDict
.loop
- ld a, [wSpriteFlags]
- res 5, a
- ld [wSpriteFlags], a
+ ld [hl], $0
+ inc hl
+ dec bc
+ ld a, c
+ or b
+ jr nz, .loop
+ pop af
+ pop bc
+ pop de
+ pop hl
+ ret
+; 8e82b
+
+Function8e82b: ; 8e82b
+ ld a, e
+ call ReadMonMenuIcon
+ ld l, a
+ ld h, 0
+ add hl, hl
+ ld de, IconPointers
+ add hl, de
ld a, [hli]
- and a
- jr z, .done
- ld [hUsedSpriteIndex], a
+ ld e, a
+ ld d, [hl]
+ ld b, BANK(Icons)
+ ld c, 8
+ ret
+; 8e83f
+
+Function8e83f: ; 8e83f
+ push hl
+ push de
+ push bc
+ call Function8e849
+ pop bc
+ pop de
+ pop hl
+ ret
+; 8e849
+
+Function8e849: ; 8e849
+ ld d, 0
+ ld hl, Jumptable_8e854
+rept 2
+ add hl, de
+endr
ld a, [hli]
- ld [hUsedSpriteTile], a
- bit 7, a
- jr z, .dont_set
- ld a, [wSpriteFlags]
- set 5, a
- ld [wSpriteFlags], a
-
-.dont_set
+ ld h, [hl]
+ ld l, a
+ jp [hl]
+; 8e854
+
+
+Jumptable_8e854: ; 8e854 (23:6854)
+ dw Function8e8d5
+ dw Function8e961
+ dw Function8e97d
+ dw Function8e99a
+ dw Function8e898
+ dw Function8e8b1
+ dw Function8e862
+
+
+Function8e862: ; 8e862 (23:6862)
+ call Function8e908
+ call Function8e86c
+ call Function8e936
+ ret
+
+Function8e86c: ; 8e86c (23:686c)
push bc
+ ld a, [hObjectStructIndexBuffer]
+ ld hl, PartyMon1Item
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call AddNTimes
+ pop bc
+ ld a, [hl]
+ and a
+ jr z, .asm_8e890
push hl
- call Function143c8
- pop hl
+ push bc
+ ld d, a
+ callab ItemIsMail
pop bc
- dec c
- jr nz, .loop
+ pop hl
+ jr c, .asm_8e88e
+ ld a, $6
+ jr .asm_8e892
+.asm_8e88e
+ ld a, $5
+.asm_8e890
+ ld a, $4
+.asm_8e892
+ ld hl, $1
+ add hl, bc
+ ld [hl], a
+ ret
-.done
+Function8e898: ; 8e898 (23:6898)
+ call Function8e8d5
+ ld hl, $2
+ add hl, bc
+ ld a, $0
+ ld [hl], a
+ ld hl, $4
+ add hl, bc
+ ld a, $48
+ ld [hl], a
+ ld hl, $5
+ add hl, bc
+ ld a, $48
+ ld [hl], a
+ ret
+
+Function8e8b1: ; 8e8b1 (23:68b1)
+ call Function8e908
+ call Function8e936
+ ld hl, $2
+ add hl, bc
+ ld a, $0
+ ld [hl], a
+ ld hl, $4
+ add hl, bc
+ ld a, $18
+ ld [hl], a
+ ld hl, $5
+ add hl, bc
+ ld a, $60
+ ld [hl], a
+ ld a, c
+ ld [wc608], a
+ ld a, b
+ ld [wc608 + 1], a
+ ret
+
+Function8e8d5: ; 8e8d5 (23:68d5)
+ call Function8e908
+ call Function8e8df
+ call Function8e936
ret
-; 143c8
-Function143c8: ; 143c8
- ld a, [hUsedSpriteIndex]
- call SafeGetSprite
- ld a, [hUsedSpriteTile]
- call .GetTileAddr
+Function8e8df: ; 8e8df (23:68df)
+ push bc
+ ld a, [hObjectStructIndexBuffer]
+ ld hl, PartyMon1Item
+ ld bc, $30
+ call AddNTimes
+ pop bc
+ ld a, [hl]
+ and a
+ ret z
push hl
- push de
push bc
- ld a, [wSpriteFlags]
- bit 7, a
- jr nz, .skip
- call .CopyToVram
-
-.skip
+ ld d, a
+ callab ItemIsMail
pop bc
- ld l, c
- ld h, $0
+ pop hl
+ jr c, .asm_8e900
+ ld a, $3
+ jr .asm_8e902
+.asm_8e900
+ ld a, $2
+.asm_8e902
+ ld hl, $1
+ add hl, bc
+ ld [hl], a
+ ret
+
+Function8e908: ; 8e908 (23:6908)
+ ld a, [wc3b7]
+ push af
+ ld a, [hObjectStructIndexBuffer]
+ ld hl, PartySpecies
+ ld e, a
+ ld d, $0
+ add hl, de
+ ld a, [hl]
+ call ReadMonMenuIcon
+ ld [CurIcon], a
+ call Function8e9db
+ ld a, [hObjectStructIndexBuffer]
+; y coord
rept 4
- add hl, hl
+ add a
endr
- pop de
+ add $1c
+ ld d, a
+; x coord
+ ld e, $10
+; type is partymon icon
+ ld a, SPRITE_ANIM_INDEX_00
+ call InitSpriteAnimStruct
+ pop af
+ ld hl, $3
+ add hl, bc
+ ld [hl], a
+ ret
+
+Function8e936: ; 8e936 (23:6936)
+ push bc
+ ld a, [hObjectStructIndexBuffer]
+ ld b, a
+ call Function8e94c
+ ld a, b
+ pop bc
+ ld hl, $9
+ add hl, bc
+ ld [hl], a
+ rlca
+ rlca
+ ld hl, $d
+ add hl, bc
+ ld [hl], a
+ ret
+
+Function8e94c: ; 8e94c (23:694c)
+ callba PlacePartymonHPBar
+ call GetHPPal
+ ld e, d
+ ld d, 0
+ ld hl, Unknown_8e95e
add hl, de
- ld d, h
- ld e, l
- pop hl
- ld a, [wSpriteFlags]
- bit 5, a
- jr nz, .done
- bit 6, a
- jr nz, .done
- ld a, [hUsedSpriteIndex]
- call _DoesSpriteHaveFacings
- jr c, .done
- ld a, h
- add $8
- ld h, a
- call .CopyToVram
+ ld b, [hl]
+ ret
+; 8e95e (23:695e)
-.done
+Unknown_8e95e: ; 8e95e
+ db $00, $40, $80
+; 8e961
+
+Function8e961: ; 8e961 (23:6961)
+ ld a, [wd265]
+ call ReadMonMenuIcon
+ ld [CurIcon], a
+ xor a
+ call GetIconGFX
+ lb de, $24, $20
+ ld a, SPRITE_ANIM_INDEX_00
+ call InitSpriteAnimStruct
+ ld hl, $2
+ add hl, bc
+ ld [hl], $0
+ ret
+
+Function8e97d: ; 8e97d (23:697d)
+ ld a, [wd265]
+ call ReadMonMenuIcon
+ ld [CurIcon], a
+ xor a
+ call GetIconGFX
+ ld d, $1a
+ ld e, $24
+ ld a, SPRITE_ANIM_INDEX_00
+ call InitSpriteAnimStruct
+ ld hl, $2
+ add hl, bc
+ ld [hl], $0
+ ret
+
+Function8e99a: ; 8e99a (23:699a)
+ ld a, [wd265]
+ call ReadMonMenuIcon
+ ld [CurIcon], a
+ ld a, $62
+ ld [wc3b7], a
+ call Function8e9db
+ ret
+
+GetSpeciesIcon: ; 8e9ac
+; Load species icon into VRAM at tile a
+ push de
+ ld a, [wd265]
+ call ReadMonMenuIcon
+ ld [CurIcon], a
+ pop de
+ ld a, e
+ call GetIconGFX
+ ret
+; 8e9bc
+
+
+Function8e9bc: ; 8e9bc (23:69bc)
+ push de
+ ld a, [wd265]
+ call ReadMonMenuIcon
+ ld [CurIcon], a
+ pop de
+ ld a, e
+ call GetIcon_a
+ ret
+; 8e9cc (23:69cc)
+
+Function8e9cc: ; 8e9cc
+ push de
+ ld a, [wd265]
+ call ReadMonMenuIcon
+ ld [CurIcon], a
+ pop de
+ call GetIcon_de
+ ret
+; 8e9db
+
+Function8e9db: ; 8e9db (23:69db)
+ ld a, [wc3b7]
+
+GetIconGFX: ; 8e9de
+ call GetIcon_a
+ ld de, $80 ; 8 tiles
+ add hl, de
+ ld de, HeldItemIcons
+ lb bc, BANK(HeldItemIcons), 2
+ call GetGFXUnlessMobile
+ ld a, [wc3b7]
+ add 10
+ ld [wc3b7], a
ret
-; 14406
-.GetTileAddr: ; 14406
-; Return the address of tile (a) in (hl).
- and $7f
+HeldItemIcons:
+INCBIN "gfx/icon/mail.2bpp"
+INCBIN "gfx/icon/item.2bpp"
+; 8ea17
+
+GetIcon_de: ; 8ea17
+; Load icon graphics into VRAM starting from tile de.
+ ld l, e
+ ld h, d
+ jr GetIcon
+
+GetIcon_a: ; 8ea1b
+; Load icon graphics into VRAM starting from tile a.
ld l, a
ld h, 0
+
+GetIcon: ; 8ea1e
+; Load icon graphics into VRAM starting from tile hl.
+
+; One tile is 16 bytes long.
rept 4
add hl, hl
endr
- ld a, l
- add VTiles0 % $100
+
+ ld de, VTiles0
+ add hl, de
+ push hl
+
+; The icons are contiguous, in order and of the same
+; size, so the pointer table is somewhat redundant.
+ ld a, [CurIcon]
+ push hl
ld l, a
- ld a, h
- adc VTiles0 / $100
- ld h, a
- ret
-; 14418
+ ld h, 0
+ add hl, hl
+ ld de, IconPointers
+ add hl, de
+ ld a, [hli]
+ ld e, a
+ ld d, [hl]
+ pop hl
-.CopyToVram: ; 14418
- ld a, [rVBK]
- push af
- ld a, [wSpriteFlags]
- bit 5, a
- ld a, $1
- jr z, .bankswitch
+ lb bc, BANK(Icons), 8
+ call GetGFXUnlessMobile
+
+ pop hl
+ ret
+; 8ea3f
+
+GetGFXUnlessMobile: ; 8ea3f
+ ld a, [wLinkMode]
+ cp LINK_MOBILE
+ jp nz, Request2bpp
+ jp Get2bpp_2
+; 8ea4a
+
+Function8ea4a: ; 8ea4a
+ ld hl, wSpriteAnimationStructs
+ ld e, $6
+ ld a, [MenuSelection2]
+ ld d, a
+.loop
+ ld a, [hl]
+ and a
+ jr z, .next
+ cp d
+ jr z, .loadwithtwo
ld a, $0
+ jr .ok
-.bankswitch
- ld [rVBK], a
- call Get2bpp
- pop af
- ld [rVBK], a
+.loadwithtwo
+ ld a, $2
+
+.ok
+ push hl
+ ld c, l
+ ld b, h
+ ld hl, $2
+ add hl, bc
+ ld [hl], a
+ pop hl
+
+.next
+ ld bc, $10
+ add hl, bc
+ dec e
+ jr nz, .loop
ret
-; 1442f
+; 8ea71
-LoadEmote:: ; 1442f
-; Get the address of the pointer to emote c.
- ld a, c
- ld bc, 6
- ld hl, EmotesPointers
- call AddNTimes
-; Load the emote address into de
- ld e, [hl]
- inc hl
- ld d, [hl]
-; load the length of the emote (in tiles) into c
- inc hl
- ld c, [hl]
- swap c
-; load the emote pointer bank into b
- inc hl
- ld b, [hl]
-; load the VRAM destination into hl
- inc hl
- ld a, [hli]
- ld h, [hl]
- ld l, a
-; if the emote has a length of 0, do not proceed (error handling)
- ld a, c
+Function8ea71: ; 8ea71
+ ld hl, wSpriteAnimationStructs
+ ld e, $6
+.loop
+ ld a, [hl]
and a
- ret z
- call GetEmote2bpp
- ret
-; 1444d
-
-emote_header: MACRO
- dw \1
- db \2 tiles, BANK(\1)
- dw \3
-ENDM
-
-EmotesPointers: ; 144d
-; dw source address
-; db length, bank
-; dw dest address
-
- emote_header ShockEmote, 4, VTiles1 tile $78
- emote_header QuestionEmote, 4, VTiles1 tile $78
- emote_header HappyEmote, 4, VTiles1 tile $78
- emote_header SadEmote, 4, VTiles1 tile $78
- emote_header HeartEmote, 4, VTiles1 tile $78
- emote_header BoltEmote, 4, VTiles1 tile $78
- emote_header SleepEmote, 4, VTiles1 tile $78
- emote_header FishEmote, 4, VTiles1 tile $78
- emote_header FishingRodGFX1, 1, VTiles1 tile $7c
- emote_header FishingRodGFX2, 2, VTiles1 tile $7c
- emote_header FishingRodGFX3, 2, VTiles1 tile $7e
- emote_header FishingRodGFX4, 1, VTiles1 tile $7e
-; 14495
-
-
-SpriteMons: ; 14495
- db UNOWN
- db GEODUDE
- db GROWLITHE
- db WEEDLE
- db SHELLDER
- db ODDISH
- db GENGAR
- db ZUBAT
- db MAGIKARP
- db SQUIRTLE
- db TOGEPI
- db BUTTERFREE
- db DIGLETT
- db POLIWAG
- db PIKACHU
- db CLEFAIRY
- db CHARMANDER
- db JYNX
- db STARMIE
- db BULBASAUR
- db JIGGLYPUFF
- db GRIMER
- db EKANS
- db PARAS
- db TENTACOOL
- db TAUROS
- db MACHOP
- db VOLTORB
- db LAPRAS
- db RHYDON
- db MOLTRES
- db SNORLAX
- db GYARADOS
- db LUGIA
- db HO_OH
-; 144b8
-
-
-OutdoorSprites: ; 144b8
-; Valid sprite IDs for each map group.
-
- dw Group1Sprites
- dw Group2Sprites
- dw Group3Sprites
- dw Group4Sprites
- dw Group5Sprites
- dw Group6Sprites
- dw Group7Sprites
- dw Group8Sprites
- dw Group9Sprites
- dw Group10Sprites
- dw Group11Sprites
- dw Group12Sprites
- dw Group13Sprites
- dw Group14Sprites
- dw Group15Sprites
- dw Group16Sprites
- dw Group17Sprites
- dw Group18Sprites
- dw Group19Sprites
- dw Group20Sprites
- dw Group21Sprites
- dw Group22Sprites
- dw Group23Sprites
- dw Group24Sprites
- dw Group25Sprites
- dw Group26Sprites
-; 144ec
-
-
-Group13Sprites: ; 144ec
- db SPRITE_SUICUNE
- db SPRITE_SILVER_TROPHY
- db SPRITE_FAMICOM
- db SPRITE_POKEDEX
- db SPRITE_WILL
- db SPRITE_KAREN
- db SPRITE_NURSE
- db SPRITE_OLD_LINK_RECEPTIONIST
- db SPRITE_BIG_LAPRAS
- db SPRITE_BIG_ONIX
- db SPRITE_SUDOWOODO
- db SPRITE_BIG_SNORLAX
- db SPRITE_TEACHER
- db SPRITE_FISHER
- db SPRITE_YOUNGSTER
- db SPRITE_BLUE
- db SPRITE_GRAMPS
- db SPRITE_BUG_CATCHER
- db SPRITE_COOLTRAINER_F
- db SPRITE_SWIMMER_GIRL
- db SPRITE_SWIMMER_GUY
- db SPRITE_POKE_BALL
- db SPRITE_FRUIT_TREE
-; 14503
-
-Group23Sprites: ; 14503
- db SPRITE_SUICUNE
- db SPRITE_SILVER_TROPHY
- db SPRITE_FAMICOM
- db SPRITE_POKEDEX
- db SPRITE_WILL
- db SPRITE_KAREN
- db SPRITE_NURSE
- db SPRITE_OLD_LINK_RECEPTIONIST
- db SPRITE_BIG_LAPRAS
- db SPRITE_BIG_ONIX
- db SPRITE_SUDOWOODO
- db SPRITE_BIG_SNORLAX
- db SPRITE_TEACHER
- db SPRITE_FISHER
- db SPRITE_YOUNGSTER
- db SPRITE_BLUE
- db SPRITE_GRAMPS
- db SPRITE_BUG_CATCHER
- db SPRITE_COOLTRAINER_F
- db SPRITE_SWIMMER_GIRL
- db SPRITE_SWIMMER_GUY
- db SPRITE_POKE_BALL
- db SPRITE_FRUIT_TREE
-; 1451a
-
-Group14Sprites: ; 1451a
- db SPRITE_SUICUNE
- db SPRITE_SILVER_TROPHY
- db SPRITE_FAMICOM
- db SPRITE_POKEDEX
- db SPRITE_WILL
- db SPRITE_KAREN
- db SPRITE_NURSE
- db SPRITE_OLD_LINK_RECEPTIONIST
- db SPRITE_BIG_LAPRAS
- db SPRITE_BIG_ONIX
- db SPRITE_SUDOWOODO
- db SPRITE_BIG_SNORLAX
- db SPRITE_TEACHER
- db SPRITE_FISHER
- db SPRITE_YOUNGSTER
- db SPRITE_BLUE
- db SPRITE_GRAMPS
- db SPRITE_BUG_CATCHER
- db SPRITE_COOLTRAINER_F
- db SPRITE_SWIMMER_GIRL
- db SPRITE_SWIMMER_GUY
- db SPRITE_POKE_BALL
- db SPRITE_FRUIT_TREE
-; 14531
-
-Group6Sprites: ; 14531
- db SPRITE_SUICUNE
- db SPRITE_SILVER_TROPHY
- db SPRITE_FAMICOM
- db SPRITE_POKEDEX
- db SPRITE_WILL
- db SPRITE_KAREN
- db SPRITE_NURSE
- db SPRITE_OLD_LINK_RECEPTIONIST
- db SPRITE_BIG_LAPRAS
- db SPRITE_BIG_ONIX
- db SPRITE_SUDOWOODO
- db SPRITE_BIG_SNORLAX
- db SPRITE_TEACHER
- db SPRITE_FISHER
- db SPRITE_YOUNGSTER
- db SPRITE_BLUE
- db SPRITE_GRAMPS
- db SPRITE_BUG_CATCHER
- db SPRITE_COOLTRAINER_F
- db SPRITE_SWIMMER_GIRL
- db SPRITE_SWIMMER_GUY
- db SPRITE_POKE_BALL
- db SPRITE_FRUIT_TREE
-; 14548
-
-Group7Sprites: ; 14548
- db SPRITE_SUICUNE
- db SPRITE_SILVER_TROPHY
- db SPRITE_FAMICOM
- db SPRITE_POKEDEX
- db SPRITE_WILL
- db SPRITE_KAREN
- db SPRITE_NURSE
- db SPRITE_OLD_LINK_RECEPTIONIST
- db SPRITE_BIG_LAPRAS
- db SPRITE_BIG_ONIX
- db SPRITE_SUDOWOODO
- db SPRITE_BIG_SNORLAX
- db SPRITE_COOLTRAINER_M
- db SPRITE_SUPER_NERD
- db SPRITE_COOLTRAINER_F
- db SPRITE_FISHER
- db SPRITE_YOUNGSTER
- db SPRITE_LASS
- db SPRITE_POKEFAN_M
- db SPRITE_ROCKET
- db SPRITE_MISTY
- db SPRITE_POKE_BALL
- db SPRITE_SLOWPOKE
-; 1455f
-
-Group25Sprites: ; 1455f
- db SPRITE_SUICUNE
- db SPRITE_SILVER_TROPHY
- db SPRITE_FAMICOM
- db SPRITE_POKEDEX
- db SPRITE_WILL
- db SPRITE_KAREN
- db SPRITE_NURSE
- db SPRITE_OLD_LINK_RECEPTIONIST
- db SPRITE_BIG_LAPRAS
- db SPRITE_BIG_ONIX
- db SPRITE_SUDOWOODO
- db SPRITE_BIG_SNORLAX
- db SPRITE_COOLTRAINER_M
- db SPRITE_SUPER_NERD
- db SPRITE_COOLTRAINER_F
- db SPRITE_FISHER
- db SPRITE_YOUNGSTER
- db SPRITE_LASS
- db SPRITE_POKEFAN_M
- db SPRITE_ROCKET
- db SPRITE_MISTY
- db SPRITE_POKE_BALL
- db SPRITE_SLOWPOKE
-; 14576
-
-Group21Sprites: ; 14576
- db SPRITE_SUICUNE
- db SPRITE_SILVER_TROPHY
- db SPRITE_FAMICOM
- db SPRITE_POKEDEX
- db SPRITE_WILL
- db SPRITE_KAREN
- db SPRITE_NURSE
- db SPRITE_OLD_LINK_RECEPTIONIST
- db SPRITE_BIG_LAPRAS
- db SPRITE_BIG_ONIX
- db SPRITE_SUDOWOODO
- db SPRITE_BIG_SNORLAX
- db SPRITE_FISHER
- db SPRITE_POLIWAG
- db SPRITE_TEACHER
- db SPRITE_GRAMPS
- db SPRITE_YOUNGSTER
- db SPRITE_LASS
- db SPRITE_BIKER
- db SPRITE_SILVER
- db SPRITE_BLUE
- db SPRITE_POKE_BALL
- db SPRITE_FRUIT_TREE
-; 1458d
-
-Group18Sprites: ; 1458d
- db SPRITE_SUICUNE
- db SPRITE_SILVER_TROPHY
- db SPRITE_FAMICOM
- db SPRITE_POKEDEX
- db SPRITE_WILL
- db SPRITE_KAREN
- db SPRITE_NURSE
- db SPRITE_OLD_LINK_RECEPTIONIST
- db SPRITE_BIG_LAPRAS
- db SPRITE_BIG_ONIX
- db SPRITE_SUDOWOODO
- db SPRITE_BIG_SNORLAX
- db SPRITE_POKEFAN_M
- db SPRITE_MACHOP
- db SPRITE_GRAMPS
- db SPRITE_YOUNGSTER
- db SPRITE_FISHER
- db SPRITE_TEACHER
- db SPRITE_SUPER_NERD
- db SPRITE_BIG_SNORLAX
- db SPRITE_BIKER
- db SPRITE_POKE_BALL
- db SPRITE_FRUIT_TREE
-; 145a4
-
-Group12Sprites: ; 145a4
- db SPRITE_SUICUNE
- db SPRITE_SILVER_TROPHY
- db SPRITE_FAMICOM
- db SPRITE_POKEDEX
- db SPRITE_WILL
- db SPRITE_KAREN
- db SPRITE_NURSE
- db SPRITE_OLD_LINK_RECEPTIONIST
- db SPRITE_BIG_LAPRAS
- db SPRITE_BIG_ONIX
- db SPRITE_SUDOWOODO
- db SPRITE_BIG_SNORLAX
- db SPRITE_POKEFAN_M
- db SPRITE_MACHOP
- db SPRITE_GRAMPS
- db SPRITE_YOUNGSTER
- db SPRITE_FISHER
- db SPRITE_TEACHER
- db SPRITE_SUPER_NERD
- db SPRITE_BIG_SNORLAX
- db SPRITE_BIKER
- db SPRITE_POKE_BALL
- db SPRITE_FRUIT_TREE
-; 145bb
-
-Group17Sprites: ; 145bb
- db SPRITE_SUICUNE
- db SPRITE_SILVER_TROPHY
- db SPRITE_FAMICOM
- db SPRITE_POKEDEX
- db SPRITE_WILL
- db SPRITE_KAREN
- db SPRITE_NURSE
- db SPRITE_OLD_LINK_RECEPTIONIST
- db SPRITE_BIG_LAPRAS
- db SPRITE_BIG_ONIX
- db SPRITE_SUDOWOODO
- db SPRITE_BIG_SNORLAX
- db SPRITE_POKEFAN_M
- db SPRITE_MACHOP
- db SPRITE_GRAMPS
- db SPRITE_YOUNGSTER
- db SPRITE_FISHER
- db SPRITE_TEACHER
- db SPRITE_SUPER_NERD
- db SPRITE_BIG_SNORLAX
- db SPRITE_BIKER
- db SPRITE_POKE_BALL
- db SPRITE_FRUIT_TREE
-; 145d2
-
-Group16Sprites: ; 145d2
- db SPRITE_SUICUNE
- db SPRITE_SILVER_TROPHY
- db SPRITE_FAMICOM
- db SPRITE_POKEDEX
- db SPRITE_WILL
- db SPRITE_KAREN
- db SPRITE_NURSE
- db SPRITE_OLD_LINK_RECEPTIONIST
- db SPRITE_BIG_LAPRAS
- db SPRITE_BIG_ONIX
- db SPRITE_SUDOWOODO
- db SPRITE_BIG_SNORLAX
- db SPRITE_POKEFAN_M
- db SPRITE_BUENA
- db SPRITE_GRAMPS
- db SPRITE_YOUNGSTER
- db SPRITE_FISHER
- db SPRITE_TEACHER
- db SPRITE_SUPER_NERD
- db SPRITE_MACHOP
- db SPRITE_BIKER
- db SPRITE_POKE_BALL
- db SPRITE_BOULDER
-; 145e9
-
-Group24Sprites: ; 145e9
- db SPRITE_SUICUNE
- db SPRITE_SILVER_TROPHY
- db SPRITE_FAMICOM
- db SPRITE_POKEDEX
- db SPRITE_WILL
- db SPRITE_KAREN
- db SPRITE_NURSE
- db SPRITE_OLD_LINK_RECEPTIONIST
- db SPRITE_BIG_LAPRAS
- db SPRITE_BIG_ONIX
- db SPRITE_SUDOWOODO
- db SPRITE_BIG_SNORLAX
- db SPRITE_SILVER
- db SPRITE_TEACHER
- db SPRITE_FISHER
- db SPRITE_COOLTRAINER_M
- db SPRITE_YOUNGSTER
- db SPRITE_MONSTER
- db SPRITE_GRAMPS
- db SPRITE_BUG_CATCHER
- db SPRITE_COOLTRAINER_F
- db SPRITE_POKE_BALL
- db SPRITE_FRUIT_TREE
-; 14600
-
-Group26Sprites: ; 14600
- db SPRITE_SUICUNE
- db SPRITE_SILVER_TROPHY
- db SPRITE_FAMICOM
- db SPRITE_POKEDEX
- db SPRITE_WILL
- db SPRITE_KAREN
- db SPRITE_NURSE
- db SPRITE_OLD_LINK_RECEPTIONIST
- db SPRITE_BIG_LAPRAS
- db SPRITE_BIG_ONIX
- db SPRITE_SUDOWOODO
- db SPRITE_BIG_SNORLAX
- db SPRITE_SILVER
- db SPRITE_TEACHER
- db SPRITE_FISHER
- db SPRITE_COOLTRAINER_M
- db SPRITE_YOUNGSTER
- db SPRITE_MONSTER
- db SPRITE_GRAMPS
- db SPRITE_BUG_CATCHER
- db SPRITE_COOLTRAINER_F
- db SPRITE_POKE_BALL
- db SPRITE_FRUIT_TREE
-; 14617
-
-Group19Sprites: ; 14617
- db SPRITE_SUICUNE
- db SPRITE_SILVER_TROPHY
- db SPRITE_FAMICOM
- db SPRITE_POKEDEX
- db SPRITE_WILL
- db SPRITE_KAREN
- db SPRITE_NURSE
- db SPRITE_OLD_LINK_RECEPTIONIST
- db SPRITE_BIG_LAPRAS
- db SPRITE_BIG_ONIX
- db SPRITE_SUDOWOODO
- db SPRITE_BIG_SNORLAX
- db SPRITE_SILVER
- db SPRITE_TEACHER
- db SPRITE_FISHER
- db SPRITE_COOLTRAINER_M
- db SPRITE_YOUNGSTER
- db SPRITE_MONSTER
- db SPRITE_GRAMPS
- db SPRITE_BUG_CATCHER
- db SPRITE_COOLTRAINER_F
- db SPRITE_POKE_BALL
- db SPRITE_FRUIT_TREE
-; 1462e
-
-Group10Sprites: ; 1462e
- db SPRITE_SUICUNE
- db SPRITE_SILVER_TROPHY
- db SPRITE_FAMICOM
- db SPRITE_POKEDEX
- db SPRITE_WILL
- db SPRITE_KAREN
- db SPRITE_NURSE
- db SPRITE_OLD_LINK_RECEPTIONIST
- db SPRITE_BIG_LAPRAS
- db SPRITE_BIG_ONIX
- db SPRITE_SUDOWOODO
- db SPRITE_BIG_SNORLAX
- db SPRITE_FISHER
- db SPRITE_LASS
- db SPRITE_OFFICER
- db SPRITE_GRAMPS
- db SPRITE_YOUNGSTER
- db SPRITE_COOLTRAINER_M
- db SPRITE_BUG_CATCHER
- db SPRITE_SUPER_NERD
- db SPRITE_WEIRD_TREE
- db SPRITE_POKE_BALL
- db SPRITE_FRUIT_TREE
-; 14645
-
-Group4Sprites: ; 14645
- db SPRITE_SUICUNE
- db SPRITE_SILVER_TROPHY
- db SPRITE_FAMICOM
- db SPRITE_POKEDEX
- db SPRITE_WILL
- db SPRITE_KAREN
- db SPRITE_NURSE
- db SPRITE_OLD_LINK_RECEPTIONIST
- db SPRITE_BIG_LAPRAS
- db SPRITE_BIG_ONIX
- db SPRITE_SUDOWOODO
- db SPRITE_BIG_SNORLAX
- db SPRITE_FISHER
- db SPRITE_LASS
- db SPRITE_OFFICER
- db SPRITE_GRAMPS
- db SPRITE_YOUNGSTER
- db SPRITE_COOLTRAINER_M
- db SPRITE_BUG_CATCHER
- db SPRITE_SUPER_NERD
- db SPRITE_WEIRD_TREE
- db SPRITE_POKE_BALL
- db SPRITE_FRUIT_TREE
-; 1465c
-
-Group8Sprites: ; 1465c
- db SPRITE_SUICUNE
- db SPRITE_SILVER_TROPHY
- db SPRITE_FAMICOM
- db SPRITE_POKEDEX
- db SPRITE_WILL
- db SPRITE_KAREN
- db SPRITE_NURSE
- db SPRITE_OLD_LINK_RECEPTIONIST
- db SPRITE_KURT_OUTSIDE
- db SPRITE_BIG_ONIX
- db SPRITE_SUDOWOODO
- db SPRITE_BIG_SNORLAX
- db SPRITE_GRAMPS
- db SPRITE_YOUNGSTER
- db SPRITE_OFFICER
- db SPRITE_POKEFAN_M
- db SPRITE_BLACK_BELT
- db SPRITE_TEACHER
- db SPRITE_AZALEA_ROCKET
- db SPRITE_LASS
- db SPRITE_SILVER
- db SPRITE_FRUIT_TREE
- db SPRITE_SLOWPOKE
-; 14673
-
-Group11Sprites: ; 14673
- db SPRITE_SUICUNE
- db SPRITE_SILVER_TROPHY
- db SPRITE_POKE_BALL
- db SPRITE_POKEDEX
- db SPRITE_WILL
- db SPRITE_KAREN
- db SPRITE_NURSE
- db SPRITE_OLD_LINK_RECEPTIONIST
- db SPRITE_BIG_LAPRAS
- db SPRITE_BIG_ONIX
- db SPRITE_SUDOWOODO
- db SPRITE_BIG_SNORLAX
- db SPRITE_GRAMPS
- db SPRITE_YOUNGSTER
- db SPRITE_OFFICER
- db SPRITE_POKEFAN_M
- db SPRITE_DAYCARE_MON_1
- db SPRITE_COOLTRAINER_F
- db SPRITE_ROCKET
- db SPRITE_LASS
- db SPRITE_DAYCARE_MON_2
- db SPRITE_FRUIT_TREE
- db SPRITE_SLOWPOKE
-; 1468a
-
-Group22Sprites: ; 1468a
- db SPRITE_SUICUNE
- db SPRITE_SILVER_TROPHY
- db SPRITE_FAMICOM
- db SPRITE_POKEDEX
- db SPRITE_WILL
- db SPRITE_KAREN
- db SPRITE_NURSE
- db SPRITE_OLD_LINK_RECEPTIONIST
- db SPRITE_STANDING_YOUNGSTER
- db SPRITE_BIG_ONIX
- db SPRITE_SUDOWOODO
- db SPRITE_BIG_SNORLAX
- db SPRITE_OLIVINE_RIVAL
- db SPRITE_POKEFAN_M
- db SPRITE_LASS
- db SPRITE_BUENA
- db SPRITE_SWIMMER_GIRL
- db SPRITE_SAILOR
- db SPRITE_POKEFAN_F
- db SPRITE_SUPER_NERD
- db SPRITE_TAUROS
- db SPRITE_FRUIT_TREE
- db SPRITE_ROCK
-; 146a1
-
-Group1Sprites: ; 146a1
- db SPRITE_SUICUNE
- db SPRITE_SILVER_TROPHY
- db SPRITE_FAMICOM
- db SPRITE_POKEDEX
- db SPRITE_WILL
- db SPRITE_KAREN
- db SPRITE_NURSE
- db SPRITE_OLD_LINK_RECEPTIONIST
- db SPRITE_STANDING_YOUNGSTER
- db SPRITE_BIG_ONIX
- db SPRITE_SUDOWOODO
- db SPRITE_BIG_SNORLAX
- db SPRITE_OLIVINE_RIVAL
- db SPRITE_POKEFAN_M
- db SPRITE_LASS
- db SPRITE_BUENA
- db SPRITE_SWIMMER_GIRL
- db SPRITE_SAILOR
- db SPRITE_POKEFAN_F
- db SPRITE_SUPER_NERD
- db SPRITE_TAUROS
- db SPRITE_FRUIT_TREE
- db SPRITE_ROCK
-; 146b8
-
-Group9Sprites: ; 146b8
- db SPRITE_SUICUNE
- db SPRITE_SILVER_TROPHY
- db SPRITE_FAMICOM
- db SPRITE_POKEDEX
- db SPRITE_WILL
- db SPRITE_KAREN
- db SPRITE_NURSE
- db SPRITE_OLD_LINK_RECEPTIONIST
- db SPRITE_BIG_LAPRAS
- db SPRITE_BIG_ONIX
- db SPRITE_SUDOWOODO
- db SPRITE_BIG_SNORLAX
- db SPRITE_LANCE
- db SPRITE_GRAMPS
- db SPRITE_SUPER_NERD
- db SPRITE_COOLTRAINER_F
- db SPRITE_FISHER
- db SPRITE_COOLTRAINER_M
- db SPRITE_LASS
- db SPRITE_YOUNGSTER
- db SPRITE_GYARADOS
- db SPRITE_FRUIT_TREE
- db SPRITE_POKE_BALL
-; 146cf
-
-Group2Sprites: ; 146cf
- db SPRITE_SUICUNE
- db SPRITE_SILVER_TROPHY
- db SPRITE_FAMICOM
- db SPRITE_POKEDEX
- db SPRITE_WILL
- db SPRITE_KAREN
- db SPRITE_NURSE
- db SPRITE_OLD_LINK_RECEPTIONIST
- db SPRITE_BIG_LAPRAS
- db SPRITE_BIG_ONIX
- db SPRITE_SUDOWOODO
- db SPRITE_BIG_SNORLAX
- db SPRITE_GRAMPS
- db SPRITE_YOUNGSTER
- db SPRITE_LASS
- db SPRITE_SUPER_NERD
- db SPRITE_COOLTRAINER_M
- db SPRITE_POKEFAN_M
- db SPRITE_BLACK_BELT
- db SPRITE_COOLTRAINER_F
- db SPRITE_FISHER
- db SPRITE_FRUIT_TREE
- db SPRITE_POKE_BALL
-; 146e6
-
-Group5Sprites: ; 146e6
- db SPRITE_SUICUNE
- db SPRITE_SILVER_TROPHY
- db SPRITE_FAMICOM
- db SPRITE_POKEDEX
- db SPRITE_WILL
- db SPRITE_KAREN
- db SPRITE_NURSE
- db SPRITE_OLD_LINK_RECEPTIONIST
- db SPRITE_BIG_LAPRAS
- db SPRITE_BIG_ONIX
- db SPRITE_SUDOWOODO
- db SPRITE_BIG_SNORLAX
- db SPRITE_GRAMPS
- db SPRITE_YOUNGSTER
- db SPRITE_LASS
- db SPRITE_SUPER_NERD
- db SPRITE_COOLTRAINER_M
- db SPRITE_POKEFAN_M
- db SPRITE_BLACK_BELT
- db SPRITE_COOLTRAINER_F
- db SPRITE_FISHER
- db SPRITE_FRUIT_TREE
- db SPRITE_POKE_BALL
-; 146fd
-
-Group3Sprites: ; 146fd
- db SPRITE_SUICUNE
- db SPRITE_SILVER_TROPHY
- db SPRITE_FAMICOM
- db SPRITE_POKEDEX
- db SPRITE_WILL
- db SPRITE_KAREN
- db SPRITE_NURSE
- db SPRITE_OLD_LINK_RECEPTIONIST
- db SPRITE_GAMEBOY_KID
- db SPRITE_BIG_ONIX
- db SPRITE_SUDOWOODO
- db SPRITE_BIG_SNORLAX
- db SPRITE_LASS
- db SPRITE_POKEFAN_F
- db SPRITE_TEACHER
- db SPRITE_YOUNGSTER
- db SPRITE_GROWLITHE
- db SPRITE_POKEFAN_M
- db SPRITE_ROCKER
- db SPRITE_FISHER
- db SPRITE_SCIENTIST
- db SPRITE_POKE_BALL
- db SPRITE_BOULDER
-; 14714
-
-Group15Sprites: ; 14714
- db SPRITE_SUICUNE
- db SPRITE_SILVER_TROPHY
- db SPRITE_FAMICOM
- db SPRITE_POKEDEX
- db SPRITE_WILL
- db SPRITE_KAREN
- db SPRITE_NURSE
- db SPRITE_OLD_LINK_RECEPTIONIST
- db SPRITE_BIG_LAPRAS
- db SPRITE_BIG_ONIX
- db SPRITE_SUDOWOODO
- db SPRITE_BIG_SNORLAX
- db SPRITE_SAILOR
- db SPRITE_FISHING_GURU
- db SPRITE_GENTLEMAN
- db SPRITE_SUPER_NERD
- db SPRITE_HO_OH
- db SPRITE_TEACHER
- db SPRITE_COOLTRAINER_F
- db SPRITE_YOUNGSTER
- db SPRITE_FAIRY
- db SPRITE_POKE_BALL
- db SPRITE_ROCK
-; 1472b
-
-Group20Sprites: ; 1472b
- db SPRITE_OAK
- db SPRITE_FISHER
- db SPRITE_TEACHER
- db SPRITE_TWIN
- db SPRITE_POKEFAN_M
- db SPRITE_GRAMPS
- db SPRITE_FAIRY
- db SPRITE_SILVER
- db SPRITE_FISHING_GURU
- db SPRITE_POKE_BALL
- db SPRITE_POKEDEX
-; 14736
-
-
-SpriteHeaders: ; 14736
-INCLUDE "gfx/overworld/sprite_headers.asm"
-; 1499a
+ jr z, .zero
+ push hl
+ ld c, l
+ ld b, h
+ ld hl, $2
+ add hl, bc
+ ld [hl], $1
+ pop hl
+.zero
+ ld bc, $10
+ add hl, bc
+ dec e
+ jr nz, .loop
+ ret
+; 8ea8c (23:6a8c)
+
+Function8ea8c: ; 8ea8c
+ ld hl, wSpriteAnimationStructs
+ ld e, $6
+ ld a, [wd0e3]
+ ld d, a
+.asm_8ea95
+ ld a, [hl]
+ and a
+ jr z, .asm_8eaab
+ cp d
+ jr z, .asm_8eaa0
+ ld a, $3
+ jr .asm_8eaa2
+.asm_8eaa0
+ ld a, $2
+.asm_8eaa2
+ push hl
+ ld c, l
+ ld b, h
+ ld hl, $2
+ add hl, bc
+ ld [hl], a
+ pop hl
+.asm_8eaab
+ ld bc, $10
+ add hl, bc
+ dec e
+ jr nz, .asm_8ea95
+ ret
+
+INCLUDE "menu/mon_icons.asm"
diff --git a/engine/startmenu.asm b/engine/startmenu.asm
index 1c7768850..a40aa734e 100755
--- a/engine/startmenu.asm
+++ b/engine/startmenu.asm
@@ -422,7 +422,7 @@ StartMenu_Quit: ; 128f0
; Retire from the bug catching contest.
ld hl, .EndTheContestText
- call Function12cf5
+ call StartMenuYesNo
jr c, .DontEndContest
ld a, BANK(BugCatchingContestReturnToGateScript)
ld hl, BugCatchingContestReturnToGateScript
@@ -444,7 +444,7 @@ StartMenu_Save: ; 1290b
; Save the game.
call BufferScreen
- callba Function14a1a
+ callba SaveMenu
jr nc, .asm_12919
ld a, 0
ret
@@ -468,8 +468,8 @@ StartMenu_Status: ; 12928
; Player status.
call FadeToMenu
- callba Function25105
- call Function2b3c
+ callba TrainerCard
+ call ReturnToCallingMenu
ld a, 0
ret
; 12937
@@ -483,7 +483,7 @@ StartMenu_Pokedex: ; 12937
call FadeToMenu
callba Pokedex
- call Function2b3c
+ call ReturnToCallingMenu
.asm_12949
ld a, 0
@@ -494,8 +494,8 @@ StartMenu_Pokedex: ; 12937
StartMenu_Pokegear: ; 1294c
call FadeToMenu
- callba Function90b8d
- call Function2b3c
+ callba PokeGear
+ call ReturnToCallingMenu
ld a, 0
ret
; 1295b
@@ -507,12 +507,13 @@ StartMenu_Pack: ; 1295b
callba Pack
ld a, [wcf66]
and a
- jr nz, .asm_12970
- call Function2b3c
+ jr nz, .used_item
+ call ReturnToCallingMenu
ld a, 0
ret
-.asm_12970
- call Function2b4d
+
+.used_item
+ call ExitAllMenus
ld a, 4
ret
; 12976
@@ -532,9 +533,9 @@ StartMenu_Pokemon: ; 12976
call ClearBGPalettes
.menu
- callba Function5004f
- callba Function50405
- callba Function503e0
+ callba LoadPartyMenuGFX
+ callba InitPartyMenuWithCancel
+ callba InitPartyMenuGFX
.menunoreload
callba WritePartyMenuTilemap
@@ -556,19 +557,19 @@ StartMenu_Pokemon: ; 12976
jr z, .quit
.return
- call Function2b3c
+ call ReturnToCallingMenu
ld a, 0
ret
.quit
ld a, b
push af
- call Function2b4d
+ call ExitAllMenus
pop af
ret
; 129d5
-Function129d5: ; 129d5
+HasNoItems: ; 129d5
ld a, [NumItems]
and a
ret nz
@@ -580,15 +581,15 @@ Function129d5: ; 129d5
ret nz
ld hl, TMsHMs
ld b, NUM_TMS + NUM_HMS
-.asm_129e9
+.loop
ld a, [hli]
and a
- jr nz, .asm_129f2
+ jr nz, .done
dec b
- jr nz, .asm_129e9
+ jr nz, .loop
scf
ret
-.asm_129f2
+.done
and a
ret
@@ -663,7 +664,7 @@ UnknownText_0x12a5b: ; 0x12a5b
CantUseItem: ; 12a60
ld hl, CantUseItemText
- call Function2012
+ call MenuTextBoxWaitButton
ret
; 12a67
@@ -683,7 +684,7 @@ PartyMonItemName: ; 12a6c
CancelPokemonAction: ; 12a79
- callba Function50405
+ callba InitPartyMenuWithCancel
callba Function8ea71
ld a, 1
ret
@@ -745,10 +746,10 @@ SwitchPartyMons: ; 12aec
ld a, [CurPartyMon]
inc a
- ld [wd0e3], a
+ ld [wSwitchMon], a
callba Function8ea8c
- callba Function5042d
+ callba InitPartyMenuNoCancel
ld a, 4
ld [PartyMenuActionText], a
@@ -757,7 +758,7 @@ SwitchPartyMons: ; 12aec
hlcoord 0, 1
ld bc, 20 * 2
- ld a, [wd0e3]
+ ld a, [wSwitchMon]
dec a
call AddNTimes
ld [hl], "▷"
@@ -774,9 +775,9 @@ SwitchPartyMons: ; 12aec
xor a
ld [PartyMenuActionText], a
- callba Function5004f
- callba Function50405
- callba Function503e0
+ callba LoadPartyMenuGFX
+ callba InitPartyMenuWithCancel
+ callba InitPartyMenuGFX
ld a, 1
ret
@@ -882,7 +883,7 @@ Function12bd9: ; 12bd9
jr .asm_12c08
.asm_12bf4
- call Function12cea
+ call GiveItemToPokemon
ld hl, MadeHoldText
call MenuTextBoxBackup
call GivePartyItem
@@ -897,17 +898,17 @@ Function12bd9: ; 12bd9
ld [wd265], a
call GetItemName
ld hl, SwitchAlreadyHoldingText
- call Function12cf5
+ call StartMenuYesNo
jr c, .asm_12c4b
- call Function12cea
+ call GiveItemToPokemon
ld a, [wd265]
push af
ld a, [CurItem]
ld [wd265], a
pop af
ld [CurItem], a
- call Function12cdf
+ call ReceiveItemFromPokemon
jr nc, .asm_12c3c
ld hl, TookAndMadeHoldText
@@ -920,7 +921,7 @@ Function12bd9: ; 12bd9
.asm_12c3c
ld a, [wd265]
ld [CurItem], a
- call Function12cdf
+ call ReceiveItemFromPokemon
ld hl, ItemStorageIsFullText
call MenuTextBoxBackup
@@ -936,10 +937,10 @@ GivePartyItem: ; 12c4c
ld [hl], a
ld d, a
callba ItemIsMail
- jr nc, .asm_12c5f
- call Function12cfe
+ jr nc, .done
+ call ComposeMailMessage
-.asm_12c5f
+.done
ret
; 12c60
@@ -953,7 +954,7 @@ TakePartyItem: ; 12c60
jr z, .asm_12c8c
ld [CurItem], a
- call Function12cdf
+ call ReceiveItemFromPokemon
jr nc, .asm_12c94
callba ItemIsMail
@@ -1045,7 +1046,7 @@ GetPartyItemLocation: ; 12cd7
; 12cdf
-Function12cdf: ; 12cdf
+ReceiveItemFromPokemon: ; 12cdf
ld a, $1
ld [wItemQuantityChangeBuffer], a
ld hl, NumItems
@@ -1053,28 +1054,28 @@ Function12cdf: ; 12cdf
; 12cea
-Function12cea: ; 12cea (4:6cea)
+GiveItemToPokemon: ; 12cea (4:6cea)
ld a, $1
ld [wItemQuantityChangeBuffer], a
ld hl, NumItems
jp TossItem
-Function12cf5: ; 12cf5
+StartMenuYesNo: ; 12cf5
call MenuTextBox
call YesNoBox
jp ExitMenu
; 12cfe
-Function12cfe: ; 12cfe (4:6cfe)
- ld de, wd002
- callba Function11e75
+ComposeMailMessage: ; 12cfe (4:6cfe)
+ ld de, wTempMailMessage
+ callba _ComposeMailMessage
ld hl, PlayerName
- ld de, wd023
- ld bc, $a
+ ld de, wTempMailAuthor
+ ld bc, NAME_LENGTH - 1
call CopyBytes
ld hl, PlayerID
- ld bc, $2
+ ld bc, 2
call CopyBytes
ld a, [CurPartySpecies]
ld [de], a
@@ -1082,14 +1083,14 @@ Function12cfe: ; 12cfe (4:6cfe)
ld a, [CurItem]
ld [de], a
ld a, [CurPartyMon]
- ld hl, sPartyScratch1
- ld bc, SCRATCHMON_STRUCT_LENGTH
+ ld hl, sPartyMail
+ ld bc, MAIL_STRUCT_LENGTH
call AddNTimes
ld d, h
ld e, l
- ld hl, wd002
- ld bc, SCRATCHMON_STRUCT_LENGTH
- ld a, BANK(sPartyScratch1)
+ ld hl, wTempMail
+ ld bc, MAIL_STRUCT_LENGTH
+ ld a, BANK(sPartyMail)
call GetSRAMBank
call CopyBytes
call CloseSRAM
@@ -1127,11 +1128,11 @@ MonMailAction: ; 12d45
.take
ld hl, .sendmailtopctext
- call Function12cf5
+ call StartMenuYesNo
jr c, .RemoveMailToBag
ld a, [CurPartyMon]
ld b, a
- callba Function4456e
+ callba SendMailToPC
jr c, .MailboxFull
ld hl, .sentmailtopctext
call MenuTextBoxBackup
@@ -1144,12 +1145,12 @@ MonMailAction: ; 12d45
.RemoveMailToBag
ld hl, .mailwilllosemessagetext
- call Function12cf5
+ call StartMenuYesNo
jr c, .done
call GetPartyItemLocation
ld a, [hl]
ld [CurItem], a
- call Function12cdf
+ call ReceiveItemFromPokemon
jr nc, .BagIsFull
call GetPartyItemLocation
ld [hl], $0
@@ -1240,14 +1241,14 @@ OpenPartyStats: ; 12e00
MonMenu_Cut: ; 12e1b
callba CutFunction
- ld a, [wd0ec]
+ ld a, [wFieldMoveSucceeded]
cp $1
- jr nz, .asm_12e2d
+ jr nz, .Fail
ld b, $4
ld a, $2
ret
-.asm_12e2d
+.Fail
ld a, $3
ret
; 12e30
@@ -1255,160 +1256,161 @@ MonMenu_Cut: ; 12e1b
MonMenu_Fly: ; 12e30
callba FlyFunction
- ld a, [wd0ec]
+ ld a, [wFieldMoveSucceeded]
cp $2
- jr z, .asm_12e4c
+ jr z, .Fail
cp $0
- jr z, .asm_12e4f
+ jr z, .Error
callba MobileFn_1060b5
ld b, $4
ld a, $2
ret
-.asm_12e4c
+.Fail
ld a, $3
ret
-.asm_12e4f
+.Error
ld a, $0
ret
-.asm_12e52
+.Unused
ld a, $1
ret
; 12e55
MonMenu_Flash: ; 12e55
callba Functionc8ac
- ld a, [wd0ec]
+ ld a, [wFieldMoveSucceeded]
cp $1
- jr nz, .asm_12e67
+ jr nz, .Fail
ld b, $4
ld a, $2
ret
-.asm_12e67
+.Fail
ld a, $3
ret
; 12e6a
MonMenu_Strength: ; 12e6a
callba StrengthFunction
- ld a, [wd0ec]
+ ld a, [wFieldMoveSucceeded]
cp $1
- jr nz, .asm_12e7c
+ jr nz, .Fail
ld b, $4
ld a, $2
ret
-.asm_12e7c
+.Fail
ld a, $3
ret
; 12e7f
MonMenu_Whirlpool: ; 12e7f
callba WhirlpoolFunction
- ld a, [wd0ec]
+ ld a, [wFieldMoveSucceeded]
cp $1
- jr nz, .asm_12e91
+ jr nz, .Fail
ld b, $4
ld a, $2
ret
-.asm_12e91
+.Fail
ld a, $3
ret
; 12e94
MonMenu_Waterfall: ; 12e94
callba Functioncade
- ld a, [wd0ec]
+ ld a, [wFieldMoveSucceeded]
cp $1
- jr nz, .asm_12ea6
+ jr nz, .Fail
ld b, $4
ld a, $2
ret
-.asm_12ea6
+.Fail
ld a, $3
ret
; 12ea9
MonMenu_Teleport: ; 12ea9
callba TeleportFunction
- ld a, [wd0ec]
+ ld a, [wFieldMoveSucceeded]
and a
- jr z, .asm_12eba
+ jr z, .Fail
ld b, $4
ld a, $2
ret
-.asm_12eba
+.Fail
ld a, $3
ret
; 12ebd
MonMenu_Surf: ; 12ebd
callba SurfFunction
- ld a, [wd0ec]
+ ld a, [wFieldMoveSucceeded]
and a
- jr z, .asm_12ece
+ jr z, .Fail
ld b, $4
ld a, $2
ret
-.asm_12ece
+.Fail
ld a, $3
ret
; 12ed1
MonMenu_Dig: ; 12ed1
callba DigFunction
- ld a, [wd0ec]
+ ld a, [wFieldMoveSucceeded]
cp $1
- jr nz, .asm_12ee3
+ jr nz, .Fail
ld b, $4
ld a, $2
ret
-.asm_12ee3
+.Fail
ld a, $3
ret
; 12ee6
MonMenu_Softboiled_MilkDrink: ; 12ee6
- call Function12f05
- jr nc, .asm_12ef3
- callba Functionf3df
- jr .asm_12ef9
+ call .CheckMonHasEnoughHP
+ jr nc, .NotEnoughHP
+ callba Softboiled_MilkDrinkFunction
+ jr .finish
-.asm_12ef3
- ld hl, UnknownText_0x12f00
+.NotEnoughHP
+ ld hl, .Text_NotEnoughHP
call PrintText
-.asm_12ef9
+.finish
xor a
ld [PartyMenuActionText], a
ld a, $3
ret
; 12f00
-UnknownText_0x12f00: ; 0x12f00
+.Text_NotEnoughHP: ; 0x12f00
; Not enough HP!
text_jump UnknownText_0x1c1ce3
db "@"
; 0x12f05
-Function12f05: ; 12f05
+.CheckMonHasEnoughHP: ; 12f05
+; Need to have at least (MaxHP / 5) HP left.
ld a, MON_MAXHP
call GetPartyParamLocation
ld a, [hli]
ld [hDividend + 0], a
ld a, [hl]
ld [hDividend + 1], a
- ld a, $5
+ ld a, 5
ld [hDivisor], a
- ld b, $2
+ ld b, 2
call Divide
ld a, MON_HP + 1
call GetPartyParamLocation
@@ -1422,28 +1424,28 @@ Function12f05: ; 12f05
MonMenu_Headbutt: ; 12f26
callba HeadbuttFunction
- ld a, [wd0ec]
+ ld a, [wFieldMoveSucceeded]
cp $1
- jr nz, .asm_12f38
+ jr nz, .Fail
ld b, $4
ld a, $2
ret
-.asm_12f38
+.Fail
ld a, $3
ret
; 12f3b
MonMenu_RockSmash: ; 12f3b
callba RockSmashFunction
- ld a, [wd0ec]
+ ld a, [wFieldMoveSucceeded]
cp $1
- jr nz, .asm_12f4d
+ jr nz, .Fail
ld b, $4
ld a, $2
ret
-.asm_12f4d
+.Fail
ld a, $3
ret
; 12f50
@@ -1474,7 +1476,7 @@ Function12f5b: ; 12f5b
Function12f73: ; 12f73
call SetUpMoveScreenBG
ld de, Unknown_12fb2
- call Function1bb1
+ call InitMenu3
call Function131ef
ld hl, wcfa5
set 6, [hl]
@@ -1503,7 +1505,7 @@ Function12f9f: ; 12f9f
Function12fa0: ; 12fa0
push af
xor a
- ld [wd0e3], a
+ ld [wSwitchMon], a
ld hl, wcfa5
res 6, [hl]
call ClearSprites
@@ -1541,7 +1543,7 @@ MoveScreenLoop: ; 12fd5
call SetUpMoveScreenBG
call Function132d3
ld de, Unknown_13163
- call Function1bb1
+ call InitMenu3
.loop
call Function131ef
ld hl, wcfa5
@@ -1759,7 +1761,7 @@ SetUpMoveScreenBG: ; 13172
xor a
ld [hBGMapMode], a
callba Functionfb571
- callba InefficientlyClear121BytesAtwc300
+ callba ClearSpriteAnims
ld a, [CurPartyMon]
ld e, a
ld d, $0
@@ -1793,7 +1795,7 @@ SetUpMoveScreenBG: ; 13172
call PrintLevel
ld hl, PlayerHPPal
call SetHPPal
- ld b, $e
+ ld b, SCGB_0E
call GetSGBLayout
hlcoord 16, 0
lb bc, 1, 3
diff --git a/engine/stats_screen.asm b/engine/stats_screen.asm
new file mode 100755
index 000000000..766e05fe7
--- /dev/null
+++ b/engine/stats_screen.asm
@@ -0,0 +1,1150 @@
+Function4dc7b: ; 4dc7b (13:5c7b)
+ ld a, [wLinkMode]
+ cp LINK_MOBILE
+ jr nz, StatsScreenInit
+
+ ld a, [wBattleMode] ; wd22d (aliases: EnemyMonEnd)
+ and a
+ jr z, StatsScreenInit
+ jr Function4dc8f
+
+StatsScreenInit: ; 4dc8a
+ ld hl, StatsScreenMain
+ jr StatsScreenInit_gotaddress
+
+Function4dc8f: ; 4dc8f
+ ld hl, StatsScreenBattle
+ jr StatsScreenInit_gotaddress
+
+StatsScreenInit_gotaddress: ; 4dc94
+ ld a, [hMapAnims]
+ push af
+ xor a
+ ld [hMapAnims], a ; disable overworld tile animations
+ ld a, [wc2c6] ; whether sprite is to be mirrorred
+ push af
+ ld a, [wJumptableIndex]
+ ld b, a
+ ld a, [wcf64]
+ ld c, a
+
+ push bc
+ push hl
+ call ClearBGPalettes
+ call ClearTileMap
+ call UpdateSprites
+ callba Functionfb53e
+ pop hl
+ call _hl_
+ call ClearBGPalettes
+ call ClearTileMap
+ pop bc
+
+ ; restore old values
+ ld a, b
+ ld [wJumptableIndex], a
+ ld a, c
+ ld [wcf64], a
+ pop af
+ ld [wc2c6], a
+ pop af
+ ld [hMapAnims], a
+ ret
+; 0x4dcd2
+
+StatsScreenMain: ; 0x4dcd2
+ xor a
+ ld [wJumptableIndex], a
+ ; stupid interns
+ ld [wcf64], a
+ ld a, [wcf64]
+ and $fc
+ or $1
+ ld [wcf64], a
+.loop ; 4dce3
+ ld a, [wJumptableIndex]
+ and $7f
+ ld hl, StatsScreenPointerTable
+ rst JumpTable
+ call Function4dd3a ; check for keys?
+ ld a, [wJumptableIndex]
+ bit 7, a
+ jr z, .loop
+ ret
+; 0x4dcf7
+
+StatsScreenBattle: ; 4dcf7
+ xor a
+ ld [wJumptableIndex], a
+ ; stupid interns
+ ld [wcf64], a
+ ld a, [wcf64]
+ and $fc
+ or $1
+ ld [wcf64], a
+.loop
+ callba Function100dd2
+ ld a, [wJumptableIndex]
+ and $7f
+ ld hl, StatsScreenPointerTable
+ rst JumpTable
+ call Function4dd3a
+ callba Function100dfd
+ jr c, .exit
+ ld a, [wJumptableIndex]
+ bit 7, a
+ jr z, .loop
+
+.exit
+ ret
+; 4dd2a
+
+StatsScreenPointerTable: ; 4dd2a
+ dw MonStatsInit ; regular pokémon
+ dw EggStatsInit ; egg
+ dw StatsScreenWaitCry
+ dw Function4ddac
+ dw Function4ddc6
+ dw StatsScreenWaitCry
+ dw Function4ddd6
+ dw Function4dd6c
+; 4dd3a
+
+
+Function4dd3a: ; 4dd3a (13:5d3a)
+ ld hl, wcf64
+ bit 6, [hl]
+ jr nz, .asm_4dd49
+ bit 5, [hl]
+ jr nz, .asm_4dd56
+ call DelayFrame
+ ret
+.asm_4dd49
+ callba Functiond00b4
+ jr nc, .asm_4dd56
+ ld hl, wcf64
+ res 6, [hl]
+.asm_4dd56
+ ld hl, wcf64
+ res 5, [hl]
+ callba Function10402d
+ ret
+
+Function4dd62: ; 4dd62 (13:5d62)
+ ld a, [wJumptableIndex]
+ and $80
+ or h
+ ld [wJumptableIndex], a
+ ret
+
+Function4dd6c: ; 4dd6c (13:5d6c)
+ ld hl, wJumptableIndex
+ set 7, [hl]
+ ret
+
+MonStatsInit: ; 4dd72 (13:5d72)
+ ld hl, wcf64
+ res 6, [hl]
+ call ClearBGPalettes
+ call ClearTileMap
+ callba Function10402d
+ call Function4ddf2
+ ld a, [CurPartySpecies]
+ cp EGG
+ jr z, .asm_4dd9b
+ call Function4deea
+ ld hl, wcf64
+ set 4, [hl]
+ ld h, $4
+ call Function4dd62
+ ret
+.asm_4dd9b
+ ld h, $1
+ call Function4dd62
+ ret
+
+EggStatsInit: ; 4dda1
+ call EggStatsScreen
+ ld a, [wJumptableIndex]
+ inc a
+ ld [wJumptableIndex], a
+ ret
+; 0x4ddac
+
+
+Function4ddac: ; 4ddac (13:5dac)
+ call Function4de2c
+ jr nc, .asm_4ddb7
+ ld h, $0
+ call Function4dd62
+ ret
+.asm_4ddb7
+ bit 0, a
+ jr nz, .asm_4ddc0
+ and $c3
+ jp Function4de54
+.asm_4ddc0
+ ld h, $7
+ call Function4dd62
+ ret
+
+Function4ddc6: ; 4ddc6 (13:5dc6)
+ call Function4dfb6
+ ld hl, wcf64
+ res 4, [hl]
+ ld a, [wJumptableIndex]
+ inc a
+ ld [wJumptableIndex], a
+ ret
+
+Function4ddd6: ; 4ddd6 (13:5dd6)
+ call Function4de2c
+ jr nc, .asm_4dde1
+ ld h, $0
+ call Function4dd62
+ ret
+
+.asm_4dde1
+ and $f3
+ jp Function4de54
+
+StatsScreenWaitCry: ; 4dde6 (13:5de6)
+ call IsSFXPlaying
+ ret nc
+ ld a, [wJumptableIndex]
+ inc a
+ ld [wJumptableIndex], a
+ ret
+
+Function4ddf2: ; 4ddf2 (13:5df2)
+ ld a, [MonType]
+ cp BREEDMON
+ jr nz, .asm_4de10
+ ld a, [wd018_Mon]
+ ld [CurSpecies], a
+ call GetBaseData
+ ld hl, wd018_Mon
+ ld de, TempMon
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call CopyBytes
+ jr .asm_4de2a
+.asm_4de10
+ callba CopyPkmnToTempMon
+ ld a, [CurPartySpecies]
+ cp EGG
+ jr z, .asm_4de2a
+ ld a, [MonType]
+ cp BOXMON
+ jr c, .asm_4de2a
+ callba Function50890
+.asm_4de2a
+ and a
+ ret
+
+Function4de2c: ; 4de2c (13:5e2c)
+ call GetJoypad
+ ld a, [MonType]
+ cp BREEDMON
+ jr nz, .notbreedmon
+ push hl
+ push de
+ push bc
+ callba Functione2f95
+ pop bc
+ pop de
+ pop hl
+ ld a, [wcf73]
+ and $c0
+ jr nz, .set_carry
+ ld a, [wcf73]
+ jr .clear_flags
+
+.notbreedmon
+ ld a, [hJoyPressed]
+.clear_flags
+ and a
+ ret
+
+.set_carry
+ scf
+ ret
+
+Function4de54: ; 4de54 (13:5e54)
+ push af
+ ld a, [wcf64]
+ and $3
+ ld c, a
+ pop af
+ bit 1, a
+ jp nz, Function4dee4
+ bit 5, a
+ jr nz, .asm_4dec7
+ bit 4, a
+ jr nz, .asm_4debd
+ bit 0, a
+ jr nz, .asm_4deb8
+ bit 6, a
+ jr nz, .asm_4dea0
+ bit 7, a
+ jr nz, .asm_4de77
+ jr .asm_4dece
+.asm_4de77
+ ld a, [MonType]
+ cp BOXMON
+ jr nc, .asm_4dece
+ and a
+ ld a, [PartyCount]
+ jr z, .asm_4de87
+ ld a, [OTPartyCount]
+.asm_4de87
+ ld b, a
+ ld a, [CurPartyMon]
+ inc a
+ cp b
+ jr z, .asm_4dece
+ ld [CurPartyMon], a
+ ld b, a
+ ld a, [MonType]
+ and a
+ jr nz, .asm_4dede
+ ld a, b
+ inc a
+ ld [wd0d8], a
+ jr .asm_4dede
+.asm_4dea0
+ ld a, [CurPartyMon]
+ and a
+ jr z, .asm_4dece
+ dec a
+ ld [CurPartyMon], a
+ ld b, a
+ ld a, [MonType]
+ and a
+ jr nz, .asm_4dede
+ ld a, b
+ inc a
+ ld [wd0d8], a
+ jr .asm_4dede
+.asm_4deb8
+ ld a, c
+ cp $3
+ jr z, Function4dee4
+.asm_4debd
+ inc c
+ ld a, $3
+ cp c
+ jr nc, .asm_4decf
+ ld c, $1
+ jr .asm_4decf
+.asm_4dec7
+ dec c
+ jr nz, .asm_4decf
+ ld c, $3
+ jr .asm_4decf
+.asm_4dece
+ ret
+.asm_4decf
+ ld a, [wcf64]
+ and $fc
+ or c
+ ld [wcf64], a
+ ld h, $4
+ call Function4dd62
+ ret
+.asm_4dede
+ ld h, $0
+ call Function4dd62
+ ret
+
+Function4dee4: ; 4dee4 (13:5ee4)
+ ld h, $7
+ call Function4dd62
+ ret
+
+Function4deea: ; 4deea (13:5eea)
+ call Function4df45
+ xor a
+ ld [hBGMapMode], a
+ ld a, [CurBaseData] ; wd236 (aliases: BaseDexNo)
+ ld [wd265], a
+ ld [CurSpecies], a
+ hlcoord 8, 0
+ ld [hl], "№"
+ inc hl
+ ld [hl], "."
+ inc hl
+ hlcoord 10, 0
+ lb bc, PRINTNUM_LEADINGZEROS | 1, 3
+ ld de, wd265
+ call PrintNum
+ hlcoord 14, 0
+ call PrintLevel
+ ld hl, Unknown_4df77
+ call Function4e528
+ call Function4e505
+ hlcoord 8, 2
+ call PlaceString
+ hlcoord 18, 0
+ call Function4df66
+ hlcoord 9, 4
+ ld a, "/"
+ ld [hli], a
+ ld a, [CurBaseData] ; wd236 (aliases: BaseDexNo)
+ ld [wd265], a
+ call GetPokemonName
+ call PlaceString
+ call Function4df8f
+ call Function4df9b
+ call Function4dfa6
+ ret
+
+Function4df45: ; 4df45 (13:5f45)
+ ld hl, TempMonHP
+ ld a, [hli]
+ ld b, a
+ ld c, [hl]
+ ld hl, TempMonMaxHP
+ ld a, [hli]
+ ld d, a
+ ld e, [hl]
+ callba DrawPartyMenuHPBar
+ ld hl, wcda1
+ call SetHPPal
+ ld b, SCGB_03
+ call GetSGBLayout
+ call DelayFrame
+ ret
+
+Function4df66: ; 4df66 (13:5f66)
+ push hl
+ callba GetGender
+ pop hl
+ ret c
+ ld a, "♂"
+ jr nz, .got_gender
+ ld a, "♀"
+.got_gender
+ ld [hl], a
+ ret
+; 4df77 (13:5f77)
+
+Unknown_4df77: ; 4df77
+ dw PartyMonNicknames
+ dw OTPartyMonNicknames
+ dw sBoxMonNicknames
+ dw wd002
+; 4df7f
+
+Function4df7f: ; 4df7f
+ hlcoord 7, 0
+ ld bc, SCREEN_WIDTH
+ ld d, SCREEN_HEIGHT
+.loop
+ ld a, $31
+ ld [hl], a
+ add hl, bc
+ dec d
+ jr nz, .loop
+ ret
+; 4df8f
+
+Function4df8f: ; 4df8f (13:5f8f)
+ hlcoord 0, 7
+ ld b, SCREEN_WIDTH
+ ld a, "_"
+.loop
+ ld [hli], a
+ dec b
+ jr nz, .loop
+ ret
+
+Function4df9b: ; 4df9b (13:5f9b)
+ hlcoord 12, 6
+ ld [hl], "◀"
+ hlcoord 19, 6
+ ld [hl], "▶"
+ ret
+
+Function4dfa6: ; 4dfa6 (13:5fa6)
+ ld bc, TempMonDVs
+ callba CheckShininess
+ ret nc
+ hlcoord 19, 0
+ ld [hl], "<SHINY>"
+ ret
+
+Function4dfb6: ; 4dfb6 (13:5fb6)
+ ld a, [CurBaseData] ; wd236 (aliases: BaseDexNo)
+ ld [wd265], a
+ ld [CurSpecies], a
+ xor a
+ ld [hBGMapMode], a
+ call Function4dfda
+ call Function4e002
+ call Function4dfed
+ ld hl, wcf64
+ bit 4, [hl]
+ jr nz, .asm_4dfd6
+ call SetPalettes
+ ret
+
+.asm_4dfd6
+ call Function4e226
+ ret
+
+Function4dfda: ; 4dfda (13:5fda)
+ ld a, [wcf64]
+ and $3
+ ld c, a
+ call Function4e4cd
+ hlcoord 0, 8
+ lb bc, 10, 20
+ call ClearBox
+ ret
+
+Function4dfed: ; 4dfed (13:5fed)
+ ld a, [wcf64]
+ and $3
+ ld c, a
+ callba Function8c8a
+ call DelayFrame
+ ld hl, wcf64
+ set 5, [hl]
+ ret
+
+Function4e002: ; 4e002 (13:6002)
+ ld a, [wcf64]
+ and $3
+ dec a
+ ld hl, Jumptable_4e00d
+ rst JumpTable
+ ret
+
+Jumptable_4e00d: ; 4e00d (13:600d)
+ dw Function4e013
+ dw Function4e147
+ dw Function4e1ae
+
+
+Function4e013: ; 4e013 (13:6013)
+ hlcoord 0, 9
+ ld b, $0
+ predef DrawPlayerHP
+ hlcoord 8, 9
+ ld [hl], $41
+ ld de, String_4e119
+ hlcoord 0, 12
+ call PlaceString
+ ld a, [TempMonPokerusStatus]
+ ld b, a
+ and $f
+ jr nz, .asm_4e055
+ ld a, b
+ and $f0
+ jr z, .asm_4e03d
+ hlcoord 8, 8
+ ld [hl], $e8
+.asm_4e03d
+ ld a, [MonType]
+ cp $2
+ jr z, .asm_4e060
+ hlcoord 6, 13
+ push hl
+ ld de, TempMonStatus
+ predef PlaceStatusString
+ pop hl
+ jr nz, .asm_4e066
+ jr .asm_4e060
+.asm_4e055
+ ld de, String_4e142
+ hlcoord 1, 13
+ call PlaceString
+ jr .asm_4e066
+.asm_4e060
+ ld de, String_4e127
+ call PlaceString
+.asm_4e066
+ hlcoord 1, 15
+ predef PrintMonTypes
+ hlcoord 9, 8
+ ld de, $14
+ ld b, $a
+ ld a, $31
+.asm_4e078
+ ld [hl], a
+ add hl, de
+ dec b
+ jr nz, .asm_4e078
+ ld de, String_4e12b
+ hlcoord 10, 9
+ call PlaceString
+ hlcoord 17, 14
+ call Function4e0d3
+ hlcoord 13, 10
+ lb bc, 3, 7
+ ld de, TempMonExp
+ call PrintNum
+ call Function4e0e7
+ hlcoord 13, 13
+ lb bc, 3, 7
+ ld de, Buffer1 ; wd1ea (aliases: MagikarpLength)
+ call PrintNum
+ ld de, String_4e136
+ hlcoord 10, 12
+ call PlaceString
+ ld de, String_4e13f
+ hlcoord 14, 14
+ call PlaceString
+ hlcoord 11, 16
+ ld a, [TempMonLevel]
+ ld b, a
+ ld de, TempMonExp + 2
+ predef FillInExpBar
+ hlcoord 10, 16
+ ld [hl], $40
+ hlcoord 19, 16
+ ld [hl], $41
+ ret
+
+Function4e0d3: ; 4e0d3 (13:60d3)
+ ld a, [TempMonLevel]
+ push af
+ cp MAX_LEVEL
+ jr z, .asm_4e0df
+ inc a
+ ld [TempMonLevel], a
+.asm_4e0df
+ call PrintLevel
+ pop af
+ ld [TempMonLevel], a
+ ret
+
+Function4e0e7: ; 4e0e7 (13:60e7)
+ ld a, [TempMonLevel]
+ cp MAX_LEVEL
+ jr z, .asm_4e111
+ inc a
+ ld d, a
+ callba CalcExpAtLevel
+rept 2
+ ld hl, TempMonExp + 2
+endr
+ ld a, [$ffb6]
+ sub [hl]
+ dec hl
+ ld [wd1ec], a
+ ld a, [$ffb5]
+ sbc [hl]
+ dec hl
+ ld [Buffer2], a ; wd1eb (aliases: MovementType)
+ ld a, [hQuotient]
+ sbc [hl]
+ ld [Buffer1], a ; wd1ea (aliases: MagikarpLength)
+ ret
+.asm_4e111
+ ld hl, Buffer1 ; wd1ea (aliases: MagikarpLength)
+ xor a
+rept 2
+ ld [hli], a
+endr
+ ld [hl], a
+ ret
+; 4e119 (13:6119)
+
+String_4e119: ; 4e119
+ db "STATUS/"
+ next "TYPE/@"
+; 4e127
+
+String_4e127: ; 4e127
+ db "OK @"
+; 4e12b
+
+String_4e12b: ; 4e12b
+ db "EXP POINTS@"
+; 4e136
+
+String_4e136: ; 4e136
+ db "LEVEL UP@"
+; 4e13f
+
+String_4e13f: ; 4e13f
+ db "TO@"
+; 4e142
+
+String_4e142: ; 4e142
+ db "#RUS@"
+; 4e147
+
+Function4e147: ; 4e147 (13:6147)
+ ld de, String_4e1a0
+ hlcoord 0, 8
+ call PlaceString
+ call Function4e189
+ hlcoord 8, 8
+ call PlaceString
+ ld de, String_4e1a9
+ hlcoord 0, 10
+ call PlaceString
+ ld hl, TempMonMoves
+ ld de, wListMoves_MoveIndicesBuffer
+ ld bc, NUM_MOVES
+ call CopyBytes
+ hlcoord 8, 10
+ ld a, SCREEN_WIDTH * 2
+ ld [Buffer1], a
+ predef ListMoves
+ hlcoord 12, 11
+ ld a, $28
+ ld [Buffer1], a
+ predef Function50c50
+ ret
+
+Function4e189: ; 4e189 (13:6189)
+ ld de, String_4e1a5
+ ld a, [TempMonItem]
+ and a
+ ret z
+ ld b, a
+ callba Function28771
+ ld a, b
+ ld [wd265], a
+ call GetItemName
+ ret
+; 4e1a0 (13:61a0)
+
+String_4e1a0: ; 4e1a0
+ db "ITEM@"
+; 4e1a5
+
+String_4e1a5: ; 4e1a5
+ db "---@"
+; 4e1a9
+
+String_4e1a9: ; 4e1a9
+ db "MOVE@"
+; 4e1ae
+
+Function4e1ae: ; 4e1ae (13:61ae)
+ call Function4e1cc
+ hlcoord 10, 8
+ ld de, $14
+ ld b, $a
+ ld a, $31
+.asm_4e1bb
+ ld [hl], a
+ add hl, de
+ dec b
+ jr nz, .asm_4e1bb
+ hlcoord 11, 8
+ ld bc, $6
+ predef PrintTempMonStats
+ ret
+
+Function4e1cc: ; 4e1cc (13:61cc)
+ ld de, IDNoString
+ hlcoord 0, 9
+ call PlaceString
+ ld de, OTString
+ hlcoord 0, 12
+ call PlaceString
+ hlcoord 2, 10
+ lb bc, PRINTNUM_LEADINGZEROS | 2, 5
+ ld de, TempMonID
+ call PrintNum
+ ld hl, Unknown_4e216
+ call Function4e528
+ call Function4e505
+ callba CheckNickErrors
+ hlcoord 2, 13
+ call PlaceString
+ ld a, [TempMonCaughtGender]
+ and a
+ jr z, .asm_4e215
+ cp $7f
+ jr z, .asm_4e215
+ and $80
+ ld a, "♂"
+ jr z, .asm_4e211
+ ld a, "♀"
+.asm_4e211
+ hlcoord 9, 13
+ ld [hl], a
+.asm_4e215
+ ret
+; 4e216 (13:6216)
+
+Unknown_4e216: ; 4e216
+ dw PartyMonOT
+ dw OTPartyMonOT
+ dw sBoxMonOT
+ dw wd00d
+; 4e21e
+
+IDNoString: ; 4e21e
+ db $73, "№.@"
+
+OTString: ; 4e222
+ db "OT/@"
+; 4e226
+
+
+Function4e226: ; 4e226 (13:6226)
+ ld hl, TempMonDVs
+ predef GetUnownLetter
+ call Function4e2ad
+ jr c, .asm_4e238
+ and a
+ jr z, .asm_4e23f
+ jr .asm_4e246
+.asm_4e238
+ call Function4e271
+ call SetPalettes
+ ret
+.asm_4e23f
+ call Function4e253
+ call SetPalettes
+ ret
+.asm_4e246
+ call SetPalettes
+ call Function4e253
+ ld a, [CurPartySpecies]
+ call PlayCry2
+ ret
+
+Function4e253: ; 4e253 (13:6253)
+ ld hl, wcf64
+ set 5, [hl]
+ ld a, [CurPartySpecies]
+ cp UNOWN
+ jr z, .asm_4e266
+ hlcoord 0, 0
+ call PrepMonFrontpic
+ ret
+.asm_4e266
+ xor a
+ ld [wc2c6], a
+ hlcoord 0, 0
+ call _PrepMonFrontpic
+ ret
+
+Function4e271: ; 4e271 (13:6271)
+ ld a, [CurPartySpecies]
+ cp UNOWN
+ jr z, .asm_4e281
+ ld a, $1
+ ld [wc2c6], a
+ call Function4e289
+ ret
+.asm_4e281
+ xor a
+ ld [wc2c6], a
+ call Function4e289
+ ret
+
+Function4e289: ; 4e289 (13:6289)
+ ld a, [CurPartySpecies]
+ call IsAPokemon
+ ret c
+ call Function4e307
+ ld de, VTiles2 tile $00
+ predef FrontpicPredef
+ hlcoord 0, 0
+ ld d, $0
+ ld e, $2
+ predef LoadMonAnimation
+ ld hl, wcf64
+ set 6, [hl]
+ ret
+
+Function4e2ad: ; 4e2ad (13:62ad)
+ ld a, [MonType]
+ ld hl, .Jumptable
+ rst JumpTable
+ ret
+
+.Jumptable: ; 4e2b5 (13:62b5)
+ dw Function4e2bf
+ dw Function4e2cf
+ dw Function4e2d1
+ dw Function4e2ed
+ dw Function4e301
+
+
+Function4e2bf: ; 4e2bf (13:62bf)
+ ld a, [CurPartyMon]
+ ld hl, PartyMons ; wdcdf (aliases: PartyMon1, PartyMon1Species)
+ ld bc, PARTYMON_STRUCT_LENGTH
+ call AddNTimes
+ ld b, h
+ ld c, l
+ jr Function4e2f2
+
+Function4e2cf: ; 4e2cf (13:62cf)
+ xor a
+ ret
+
+Function4e2d1: ; 4e2d1 (13:62d1)
+ ld hl, sBoxMons
+ ld bc, PARTYMON_STRUCT_LENGTH
+ ld a, [CurPartyMon]
+ call AddNTimes
+ ld b, h
+ ld c, l
+ ld a, BANK(sBoxMons)
+ call GetSRAMBank
+ call Function4e2f2
+ push af
+ call CloseSRAM
+ pop af
+ ret
+
+Function4e2ed: ; 4e2ed (13:62ed)
+ ld bc, TempMonSpecies ; wd10e (aliases: TempMon)
+ jr Function4e2f2 ; utterly pointless
+
+Function4e2f2: ; 4e2f2 (13:62f2)
+ ld a, [CurPartySpecies]
+ cp EGG
+ jr z, .egg
+ call CheckFaintedFrzSlp
+ jr c, Function4e305
+.egg
+ xor a
+ scf
+ ret
+
+Function4e301: ; 4e301 (13:6301)
+ ld a, $1
+ and a
+ ret
+Function4e305: ; 4e305 (13:6305)
+ xor a
+ ret
+
+Function4e307: ; 4e307 (13:6307)
+ nop
+ push hl
+ push de
+ push bc
+ push af
+ call DelayFrame
+ ld a, [rVBK]
+ push af
+ ld a, $1
+ ld [rVBK], a
+ ld de, TextBoxSpaceGFX
+ lb bc, BANK(TextBoxSpaceGFX), 1
+ ld hl, VTiles2 tile $7f
+ call Get2bpp
+ pop af
+ ld [rVBK], a
+ pop af
+ pop bc
+ pop de
+ pop hl
+ ret
+; 4e32a (13:632a)
+
+Unknown_4e32a: ; 4e32a
+; A blank tile?
+ ds 16
+; 4e33a
+
+EggStatsScreen: ; 4e33a
+ xor a
+ ld [hBGMapMode], a
+ ld hl, wcda1
+ call SetHPPal
+ ld b, SCGB_03
+ call GetSGBLayout
+ call Function4df8f
+ ld de, EggString
+ hlcoord 8, 1
+ call PlaceString
+ ld de, IDNoString
+ hlcoord 8, 3
+ call PlaceString
+ ld de, OTString
+ hlcoord 8, 5
+ call PlaceString
+ ld de, FiveQMarkString
+ hlcoord 11, 3
+ call PlaceString
+ ld de, FiveQMarkString
+ hlcoord 11, 5
+ call PlaceString
+ ld a, [TempMonHappiness] ; egg status
+ ld de, EggSoonString
+ cp $6
+ jr c, .picked
+ ld de, EggCloseString
+ cp $b
+ jr c, .picked
+ ld de, EggMoreTimeString
+ cp $29
+ jr c, .picked
+ ld de, EggALotMoreTimeString
+.picked
+ hlcoord 1, 9
+ call PlaceString
+ ld hl, wcf64
+ set 5, [hl]
+ call SetPalettes ; pals
+ call DelayFrame
+ hlcoord 0, 0
+ call PrepMonFrontpic
+ callba Function10402d
+ call Function4e497
+
+ ld a, [TempMonHappiness]
+ cp 6
+ ret nc
+ ld de, SFX_2_BOOPS
+ call PlaySFX
+ ret
+; 0x4e3c0
+
+EggString: ; 4e3c0
+ db "EGG@"
+
+FiveQMarkString: ; 4e3c4
+ db "?????@"
+
+EggSoonString: ; 0x4e3ca
+ db "It's making sounds"
+ next "inside. It's going"
+ next "to hatch soon!@"
+
+EggCloseString: ; 0x4e3fd
+ db "It moves around"
+ next "inside sometimes."
+ next "It must be close"
+ next "to hatching.@"
+
+EggMoreTimeString: ; 0x4e43d
+ db "Wonder what's"
+ next "inside? It needs"
+ next "more time, though.@"
+
+EggALotMoreTimeString: ; 0x4e46e
+ db "This EGG needs a"
+ next "lot more time to"
+ next "hatch.@"
+; 0x4e497
+
+
+Function4e497: ; 4e497 (13:6497)
+ call Function4e2ad
+ ret nc
+ ld a, [TempMonHappiness]
+ ld e, $7
+ cp $6
+ jr c, .asm_4e4ab
+ ld e, $8
+ cp $b
+ jr c, .asm_4e4ab
+ ret
+.asm_4e4ab
+ push de
+ ld a, $1
+ ld [wc2c6], a
+ call Function4e307
+ ld de, VTiles2 tile $00
+ predef FrontpicPredef
+ pop de
+ hlcoord 0, 0
+ ld d, $0
+ predef LoadMonAnimation
+ ld hl, wcf64
+ set 6, [hl]
+ ret
+
+Function4e4cd: ; 4e4cd (13:64cd)
+ hlcoord 13, 5
+ ld a, $36
+ call .load_square
+ hlcoord 15, 5
+ ld a, $36
+ call .load_square
+ hlcoord 17, 5
+ ld a, $36
+ call .load_square
+ ld a, c
+ cp $2
+ ld a, $3a
+ hlcoord 13, 5
+ jr c, .load_square
+ hlcoord 15, 5
+ jr z, .load_square
+ hlcoord 17, 5
+.load_square: ; 4e4f7 (13:64f7)
+ push bc
+ ld [hli], a
+ inc a
+ ld [hld], a
+ ld bc, SCREEN_WIDTH
+ add hl, bc
+ inc a
+ ld [hli], a
+ inc a
+ ld [hl], a
+ pop bc
+ ret
+
+Function4e505: ; 4e505 (13:6505)
+ ld de, StringBuffer1
+ ld bc, PKMN_NAME_LENGTH
+ jr .okay ; uuterly pointless
+.okay
+ ld a, [MonType]
+ cp BOXMON
+ jr nz, .partymon
+ ld a, BANK(sBoxMonNicknames)
+ call GetSRAMBank
+ push de
+ call CopyBytes
+ pop de
+ call CloseSRAM
+ ret
+
+.partymon
+ push de
+ call CopyBytes
+ pop de
+ ret
+
+Function4e528: ; 4e528 (13:6528)
+ ld a, [MonType]
+ add a
+ ld c, a
+ ld b, 0
+ add hl, bc
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld a, [MonType]
+ cp $3
+ ret z
+ ld a, [CurPartyMon]
+ jp SkipNames
+
+
+CheckFaintedFrzSlp: ; 4e53f
+ ld hl, MON_HP
+ add hl, bc
+ ld a, [hli]
+ or [hl]
+ jr z, .fainted_frz_slp
+ ld hl, MON_STATUS
+ add hl, bc
+ ld a, [hl]
+ and (1 << FRZ) | SLP
+ jr nz, .fainted_frz_slp
+ and a
+ ret
+
+.fainted_frz_slp
+ scf
+ ret
+; 4e554
diff --git a/engine/time_capsule/conversion.asm b/engine/time_capsule/conversion.asm
new file mode 100755
index 000000000..10f7ab5f3
--- /dev/null
+++ b/engine/time_capsule/conversion.asm
@@ -0,0 +1,684 @@
+; These functions seem to be related to backwards compatibility
+
+Functionfb57e: ; fb57e
+ ld a, [wd003]
+ ld hl, OTPartyMon1Species
+ call GetPartyLocation
+ push hl
+ ld a, [wd003]
+ inc a
+ ld c, a
+ ld b, 0
+ ld hl, OTPartyCount
+ add hl, bc
+ ld a, [hl]
+ pop hl
+ cp EGG
+ jr z, .asm_fb59c
+ cp [hl]
+ jr nz, .asm_fb5db
+
+.asm_fb59c
+ ld b, h
+ ld c, l
+ ld hl, MON_LEVEL
+ add hl, bc
+ ld a, [hl]
+ cp 101
+ jr nc, .asm_fb5db
+ ld a, [wLinkMode]
+ cp LINK_TIMECAPSULE
+ jr nz, .asm_fb5d9
+ ld hl, OTPartySpecies
+ ld a, [wd003]
+ ld c, a
+ ld b, 0
+ add hl, bc
+ ld a, [hl]
+
+ ; Magnemite and Magneton's types changed
+ ; from Electric to Electric/Steel.
+ cp MAGNEMITE
+ jr z, .asm_fb5d9
+ cp MAGNETON
+ jr z, .asm_fb5d9
+
+ ld [CurSpecies], a
+ call GetBaseData
+ ld hl, wcbea
+rept 2
+ add hl, bc
+endr
+ ld a, [BaseType1]
+ cp [hl]
+ jr nz, .asm_fb5db
+ inc hl
+ ld a, [BaseType2]
+ cp [hl]
+ jr nz, .asm_fb5db
+
+.asm_fb5d9
+ and a
+ ret
+
+.asm_fb5db
+ scf
+ ret
+; fb5dd
+
+Functionfb5dd: ; fb5dd
+ ld a, [wd002]
+ ld d, a
+ ld a, [PartyCount]
+ ld b, a
+ ld c, $0
+.asm_fb5e7
+ ld a, c
+ cp d
+ jr z, .asm_fb5f8
+ push bc
+ ld a, c
+ ld hl, PartyMon1HP
+ call GetPartyLocation
+ pop bc
+ ld a, [hli]
+ or [hl]
+ jr nz, .asm_fb60b
+
+.asm_fb5f8
+ inc c
+ dec b
+ jr nz, .asm_fb5e7
+ ld a, [wd003]
+ ld hl, OTPartyMon1HP
+ call GetPartyLocation
+ ld a, [hli]
+ or [hl]
+ jr nz, .asm_fb60b
+ scf
+ ret
+
+.asm_fb60b
+ and a
+ ret
+; fb60d
+
+Functionfb60d: ; fb60d
+ hlcoord 4, 0
+ ld de, PlayerName
+ call PlaceString
+ ld a, $14
+ ld [bc], a
+ hlcoord 4, 8
+ ld de, wd26b
+ call PlaceString
+ ld a, $14
+ ld [bc], a
+ hlcoord 7, 1
+ ld de, PartySpecies
+ call Functionfb634
+ hlcoord 7, 9
+ ld de, OTPartySpecies
+
+Functionfb634: ; fb634
+ ld c, $0
+.asm_fb636
+ ld a, [de]
+ cp $ff
+ ret z
+ ld [wd265], a
+ push bc
+ push hl
+ push de
+ push hl
+ ld a, c
+ ld [hProduct], a
+ call GetPokemonName
+ pop hl
+ call PlaceString
+ pop de
+ inc de
+ pop hl
+ ld bc, SCREEN_WIDTH
+ add hl, bc
+ pop bc
+ inc c
+ jr .asm_fb636
+; fb656
+
+KantoMonSpecials: ; fb656
+; The original special base stat for
+; each Kanto monster from Red/Blue.
+ db 65 ; BULBASAUR
+ db 80 ; IVYSAUR
+ db 100 ; VENUSAUR
+ db 50 ; CHARMANDER
+ db 65 ; CHARMELEON
+ db 85 ; CHARIZARD
+ db 50 ; SQUIRTLE
+ db 65 ; WARTORTLE
+ db 85 ; BLASTOISE
+ db 20 ; CATERPIE
+ db 25 ; METAPOD
+ db 80 ; BUTTERFREE
+ db 20 ; WEEDLE
+ db 25 ; KAKUNA
+ db 45 ; BEEDRILL
+ db 35 ; PIDGEY
+ db 50 ; PIDGEOTTO
+ db 70 ; PIDGEOT
+ db 25 ; RATTATA
+ db 50 ; RATICATE
+ db 31 ; SPEAROW
+ db 61 ; FEAROW
+ db 40 ; EKANS
+ db 65 ; ARBOK
+ db 50 ; PIKACHU
+ db 90 ; RAICHU
+ db 30 ; SANDSHREW
+ db 55 ; SANDSLASH
+ db 40 ; NIDORAN_F
+ db 55 ; NIDORINA
+ db 75 ; NIDOQUEEN
+ db 40 ; NIDORAN_M
+ db 55 ; NIDORINO
+ db 75 ; NIDOKING
+ db 60 ; CLEFAIRY
+ db 85 ; CLEFABLE
+ db 65 ; VULPIX
+ db 100 ; NINETALES
+ db 25 ; JIGGLYPUFF
+ db 50 ; WIGGLYTUFF
+ db 40 ; ZUBAT
+ db 75 ; GOLBAT
+ db 75 ; ODDISH
+ db 85 ; GLOOM
+ db 100 ; VILEPLUME
+ db 55 ; PARAS
+ db 80 ; PARASECT
+ db 40 ; VENONAT
+ db 90 ; VENOMOTH
+ db 45 ; DIGLETT
+ db 70 ; DUGTRIO
+ db 40 ; MEOWTH
+ db 65 ; PERSIAN
+ db 50 ; PSYDUCK
+ db 80 ; GOLDUCK
+ db 35 ; MANKEY
+ db 60 ; PRIMEAPE
+ db 50 ; GROWLITHE
+ db 80 ; ARCANINE
+ db 40 ; POLIWAG
+ db 50 ; POLIWHIRL
+ db 70 ; POLIWRATH
+ db 105 ; ABRA
+ db 120 ; KADABRA
+ db 135 ; ALAKAZAM
+ db 35 ; MACHOP
+ db 50 ; MACHOKE
+ db 65 ; MACHAMP
+ db 70 ; BELLSPROUT
+ db 85 ; WEEPINBELL
+ db 100 ; VICTREEBEL
+ db 100 ; TENTACOOL
+ db 120 ; TENTACRUEL
+ db 30 ; GEODUDE
+ db 45 ; GRAVELER
+ db 55 ; GOLEM
+ db 65 ; PONYTA
+ db 80 ; RAPIDASH
+ db 40 ; SLOWPOKE
+ db 80 ; SLOWBRO
+ db 95 ; MAGNEMITE
+ db 120 ; MAGNETON
+ db 58 ; FARFETCH_D
+ db 35 ; DODUO
+ db 60 ; DODRIO
+ db 70 ; SEEL
+ db 95 ; DEWGONG
+ db 40 ; GRIMER
+ db 65 ; MUK
+ db 45 ; SHELLDER
+ db 85 ; CLOYSTER
+ db 100 ; GASTLY
+ db 115 ; HAUNTER
+ db 130 ; GENGAR
+ db 30 ; ONIX
+ db 90 ; DROWZEE
+ db 115 ; HYPNO
+ db 25 ; KRABBY
+ db 50 ; KINGLER
+ db 55 ; VOLTORB
+ db 80 ; ELECTRODE
+ db 60 ; EXEGGCUTE
+ db 125 ; EXEGGUTOR
+ db 40 ; CUBONE
+ db 50 ; MAROWAK
+ db 35 ; HITMONLEE
+ db 35 ; HITMONCHAN
+ db 60 ; LICKITUNG
+ db 60 ; KOFFING
+ db 85 ; WEEZING
+ db 30 ; RHYHORN
+ db 45 ; RHYDON
+ db 105 ; CHANSEY
+ db 100 ; TANGELA
+ db 40 ; KANGASKHAN
+ db 70 ; HORSEA
+ db 95 ; SEADRA
+ db 50 ; GOLDEEN
+ db 80 ; SEAKING
+ db 70 ; STARYU
+ db 100 ; STARMIE
+ db 100 ; MR__MIME
+ db 55 ; SCYTHER
+ db 95 ; JYNX
+ db 85 ; ELECTABUZZ
+ db 85 ; MAGMAR
+ db 55 ; PINSIR
+ db 70 ; TAUROS
+ db 20 ; MAGIKARP
+ db 100 ; GYARADOS
+ db 95 ; LAPRAS
+ db 48 ; DITTO
+ db 65 ; EEVEE
+ db 110 ; VAPOREON
+ db 110 ; JOLTEON
+ db 110 ; FLAREON
+ db 75 ; PORYGON
+ db 90 ; OMANYTE
+ db 115 ; OMASTAR
+ db 45 ; KABUTO
+ db 70 ; KABUTOPS
+ db 60 ; AERODACTYL
+ db 65 ; SNORLAX
+ db 125 ; ARTICUNO
+ db 125 ; ZAPDOS
+ db 125 ; MOLTRES
+ db 50 ; DRATINI
+ db 70 ; DRAGONAIR
+ db 100 ; DRAGONITE
+ db 154 ; MEWTWO
+ db 100 ; MEW
+; fb6ed
+
+
+INCLUDE "event/name_rater.asm"
+
+
+PlaySlowCry: ; fb841
+ ld a, [ScriptVar]
+ call LoadCryHeader
+ jr c, .done
+
+ ld hl, CryPitch
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld bc, -$140
+ add hl, bc
+ ld a, l
+ ld [CryPitch], a
+ ld a, h
+ ld [CryPitch + 1], a
+ ld hl, CryLength
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld bc, $60
+ add hl, bc
+ ld a, l
+ ld [CryLength], a
+ ld a, h
+ ld [CryLength + 1], a
+ callba _PlayCryHeader
+ call WaitSFX
+
+.done
+ ret
+; fb877
+
+NewPokedexEntry: ; fb877
+ ld a, [hMapAnims]
+ push af
+ xor a
+ ld [hMapAnims], a
+ call LowVolume
+ call ClearBGPalettes
+ call ClearTileMap
+ call UpdateSprites
+ call ClearSprites
+ ld a, [wPokedexStatus]
+ push af
+ ld a, [hSCX]
+ add $5
+ ld [hSCX], a
+ xor a
+ ld [wPokedexStatus], a
+ callba Function41a7f
+ call WaitPressAorB_BlinkCursor
+ ld a, $1
+ ld [wPokedexStatus], a
+ callba Function4424d
+ call WaitPressAorB_BlinkCursor
+ pop af
+ ld [wPokedexStatus], a
+ call MaxVolume
+ call RotateThreePalettesRight
+ ld a, [hSCX]
+ add $fb
+ ld [hSCX], a
+ call Functionfb8c8
+ pop af
+ ld [hMapAnims], a
+ ret
+; fb8c8
+
+Functionfb8c8: ; fb8c8
+ call ClearTileMap
+ call LoadFontsExtra
+ call LoadStandardFont
+ callba Function40ab2
+ call Function3200
+ callba GetEnemyMonDVs
+ ld a, [hli]
+ ld [TempMonDVs], a
+ ld a, [hl]
+ ld [TempMonDVs + 1], a
+ ld b, SCGB_1C
+ call GetSGBLayout
+ call SetPalettes
+ ret
+; fb8f1
+
+ConvertMon_2to1: ; fb8f1
+; Takes the Gen-2 Pokemon number stored in wd265, finds it in the Pokered_MonIndices table, and returns its index in wd265.
+ push bc
+ push hl
+ ld a, [wd265]
+ ld b, a
+ ld c, 0
+ ld hl, Pokered_MonIndices
+.loop
+ inc c
+ ld a, [hli]
+ cp b
+ jr nz, .loop
+ ld a, c
+ ld [wd265], a
+ pop hl
+ pop bc
+ ret
+; fb908
+
+ConvertMon_1to2: ; fb908
+; Takes the Gen-1 Pokemon number stored in wd265 and returns the corresponding value from Pokered_MonIndices in wd265.
+ push bc
+ push hl
+ ld a, [wd265]
+ dec a
+ ld hl, Pokered_MonIndices
+ ld b, 0
+ ld c, a
+ add hl, bc
+ ld a, [hl]
+ ld [wd265], a
+ pop hl
+ pop bc
+ ret
+; fb91c
+
+Pokered_MonIndices: ; fb91c
+ db RHYDON
+ db KANGASKHAN
+ db NIDORAN_M
+ db CLEFAIRY
+ db SPEAROW
+ db VOLTORB
+ db NIDOKING
+ db SLOWBRO
+ db IVYSAUR
+ db EXEGGUTOR
+ db LICKITUNG
+ db EXEGGCUTE
+ db GRIMER
+ db GENGAR
+ db NIDORAN_F
+ db NIDOQUEEN
+ db CUBONE
+ db RHYHORN
+ db LAPRAS
+ db ARCANINE
+ db MEW
+ db GYARADOS
+ db SHELLDER
+ db TENTACOOL
+ db GASTLY
+ db SCYTHER
+ db STARYU
+ db BLASTOISE
+ db PINSIR
+ db TANGELA
+ db SCIZOR
+ db SHUCKLE
+ db GROWLITHE
+ db ONIX
+ db FEAROW
+ db PIDGEY
+ db SLOWPOKE
+ db KADABRA
+ db GRAVELER
+ db CHANSEY
+ db MACHOKE
+ db MR__MIME
+ db HITMONLEE
+ db HITMONCHAN
+ db ARBOK
+ db PARASECT
+ db PSYDUCK
+ db DROWZEE
+ db GOLEM
+ db HERACROSS
+ db MAGMAR
+ db HO_OH
+ db ELECTABUZZ
+ db MAGNETON
+ db KOFFING
+ db SNEASEL
+ db MANKEY
+ db SEEL
+ db DIGLETT
+ db TAUROS
+ db TEDDIURSA
+ db URSARING
+ db SLUGMA
+ db FARFETCH_D
+ db VENONAT
+ db DRAGONITE
+ db MAGCARGO
+ db SWINUB
+ db PILOSWINE
+ db DODUO
+ db POLIWAG
+ db JYNX
+ db MOLTRES
+ db ARTICUNO
+ db ZAPDOS
+ db DITTO
+ db MEOWTH
+ db KRABBY
+ db CORSOLA
+ db REMORAID
+ db OCTILLERY
+ db VULPIX
+ db NINETALES
+ db PIKACHU
+ db RAICHU
+ db DELIBIRD
+ db MANTINE
+ db DRATINI
+ db DRAGONAIR
+ db KABUTO
+ db KABUTOPS
+ db HORSEA
+ db SEADRA
+ db SKARMORY
+ db HOUNDOUR
+ db SANDSHREW
+ db SANDSLASH
+ db OMANYTE
+ db OMASTAR
+ db JIGGLYPUFF
+ db WIGGLYTUFF
+ db EEVEE
+ db FLAREON
+ db JOLTEON
+ db VAPOREON
+ db MACHOP
+ db ZUBAT
+ db EKANS
+ db PARAS
+ db POLIWHIRL
+ db POLIWRATH
+ db WEEDLE
+ db KAKUNA
+ db BEEDRILL
+ db HOUNDOOM
+ db DODRIO
+ db PRIMEAPE
+ db DUGTRIO
+ db VENOMOTH
+ db DEWGONG
+ db KINGDRA
+ db PHANPY
+ db CATERPIE
+ db METAPOD
+ db BUTTERFREE
+ db MACHAMP
+ db DONPHAN
+ db GOLDUCK
+ db HYPNO
+ db GOLBAT
+ db MEWTWO
+ db SNORLAX
+ db MAGIKARP
+ db PORYGON2
+ db STANTLER
+ db MUK
+ db SMEARGLE
+ db KINGLER
+ db CLOYSTER
+ db TYROGUE
+ db ELECTRODE
+ db CLEFABLE
+ db WEEZING
+ db PERSIAN
+ db MAROWAK
+ db HITMONTOP
+ db HAUNTER
+ db ABRA
+ db ALAKAZAM
+ db PIDGEOTTO
+ db PIDGEOT
+ db STARMIE
+ db BULBASAUR
+ db VENUSAUR
+ db TENTACRUEL
+ db SMOOCHUM
+ db GOLDEEN
+ db SEAKING
+ db ELEKID
+ db MAGBY
+ db MILTANK
+ db BLISSEY
+ db PONYTA
+ db RAPIDASH
+ db RATTATA
+ db RATICATE
+ db NIDORINO
+ db NIDORINA
+ db GEODUDE
+ db PORYGON
+ db AERODACTYL
+ db RAIKOU
+ db MAGNEMITE
+ db ENTEI
+ db SUICUNE
+ db CHARMANDER
+ db SQUIRTLE
+ db CHARMELEON
+ db WARTORTLE
+ db CHARIZARD
+ db LARVITAR
+ db PUPITAR
+ db TYRANITAR
+ db LUGIA
+ db ODDISH
+ db GLOOM
+ db VILEPLUME
+ db BELLSPROUT
+ db WEEPINBELL
+ db VICTREEBEL
+ db CHIKORITA
+ db BAYLEEF
+ db MEGANIUM
+ db CYNDAQUIL
+ db QUILAVA
+ db TYPHLOSION
+ db TOTODILE
+ db CROCONAW
+ db FERALIGATR
+ db SENTRET
+ db FURRET
+ db HOOTHOOT
+ db NOCTOWL
+ db LEDYBA
+ db LEDIAN
+ db SPINARAK
+ db ARIADOS
+ db CROBAT
+ db CHINCHOU
+ db LANTURN
+ db PICHU
+ db CLEFFA
+ db IGGLYBUFF
+ db TOGEPI
+ db TOGETIC
+ db NATU
+ db XATU
+ db MAREEP
+ db FLAAFFY
+ db AMPHAROS
+ db BELLOSSOM
+ db MARILL
+ db AZUMARILL
+ db SUDOWOODO
+ db POLITOED
+ db HOPPIP
+ db SKIPLOOM
+ db JUMPLUFF
+ db AIPOM
+ db SUNKERN
+ db SUNFLORA
+ db YANMA
+ db WOOPER
+ db QUAGSIRE
+ db ESPEON
+ db UMBREON
+ db MURKROW
+ db SLOWKING
+ db MISDREAVUS
+ db UNOWN
+ db WOBBUFFET
+ db GIRAFARIG
+ db PINECO
+ db FORRETRESS
+ db DUNSPARCE
+ db GLIGAR
+ db STEELIX
+ db SNUBBULL
+ db GRANBULL
+ db QWILFISH
+ db WOBBUFFET
+ db WOBBUFFET
+; fba18
diff --git a/engine/timeofdaypals.asm b/engine/timeofdaypals.asm
index 6ebb2a421..368636758 100644
--- a/engine/timeofdaypals.asm
+++ b/engine/timeofdaypals.asm
@@ -39,7 +39,7 @@ _TimeOfDayPals:: ; 8c011
; save bg palette 8
- ld hl, wMapPals + 8 * 7 ; wMapPals + 7 pals
+ ld hl, UnknBGPals + 8 * 7 ; UnknBGPals + 7 pals
; save wram bank
ld a, [rSVBK]
@@ -65,12 +65,12 @@ _TimeOfDayPals:: ; 8c011
; update sgb pals
- ld b, $9
+ ld b, SCGB_09
call GetSGBLayout
; restore bg palette 8
- ld hl, Unkn2Pals - 1 ; last byte in wMapPals
+ ld hl, UnknOBPals - 1 ; last byte in UnknBGPals
; save wram bank
ld a, [rSVBK]
@@ -172,12 +172,12 @@ Function8c0c1: ; 8c0c1
push af
ld a, $5
ld [rSVBK], a
- ld hl, wMapPals
+ ld hl, UnknBGPals
ld a, [hli]
ld e, a
ld a, [hli]
ld d, a
- ld hl, wMapPals + 8
+ ld hl, UnknBGPals + 8
ld c, $6
.asm_8c0d4
ld a, e
diff --git a/engine/timeset.asm b/engine/timeset.asm
new file mode 100755
index 000000000..1f82da884
--- /dev/null
+++ b/engine/timeset.asm
@@ -0,0 +1,771 @@
+InitClock: ; 90672 (24:4672)
+; Ask the player to set the time.
+ ld a, [hInMenu]
+ push af
+ ld a, $1
+ ld [hInMenu], a
+
+ ld a, $0
+ ld [wSpriteUpdatesEnabled], a
+ ld a, $10
+ ld [MusicFade], a
+ ld a, MUSIC_NONE % $100
+ ld [MusicFadeIDLo], a
+ ld a, MUSIC_NONE / $100
+ ld [MusicFadeIDHi], a
+ ld c, 8
+ call DelayFrames
+ call RotateFourPalettesLeft
+ call ClearTileMap
+ call ClearSprites
+ ld b, SCGB_08
+ call GetSGBLayout
+ xor a
+ ld [hBGMapMode], a
+ call LoadStandardFont
+ ld de, GFX_908fb
+ ld hl, VTiles2 tile $00
+ lb bc, BANK(GFX_908fb), 1
+ call Request1bpp
+ ld de, GFX_90903
+ ld hl, VTiles2 tile $01
+ lb bc, BANK(GFX_90903), 1
+ call Request1bpp
+ ld de, GFX_9090b
+ ld hl, VTiles2 tile $02
+ lb bc, BANK(GFX_9090b), 1
+ call Request1bpp
+ call .ClearScreen
+ call WaitBGMap
+ call RotateFourPalettesRight
+ ld hl, UnknownText_0x90874
+ call PrintText
+ ld hl, wc608
+ ld bc, 50
+ xor a
+ call ByteFill
+ ld a, $a
+ ld [wInitHourBuffer], a
+
+.loop
+ ld hl, UnknownText_0x90879
+ call PrintText
+ hlcoord 3, 7
+ ld b, 2
+ ld c, 15
+ call TextBox
+ hlcoord 11, 7
+ ld [hl], $1
+ hlcoord 11, 10
+ ld [hl], $2
+ hlcoord 4, 9
+ call DisplayHourOClock
+ ld c, 10
+ call DelayFrames
+
+.SetHourLoop
+ call JoyTextDelay
+ call SetHour
+ jr nc, .SetHourLoop
+
+ ld a, [wInitHourBuffer]
+ ld [StringBuffer2 + 1], a
+ call .ClearScreen
+ ld hl, UnknownText_0x90886
+ call PrintText
+ call YesNoBox
+ jr nc, .HourIsSet
+ call .ClearScreen
+ jr .loop
+
+.HourIsSet
+ ld hl, UnknownText_0x9089a
+ call PrintText
+ hlcoord 11, 7
+ lb bc, 2, 7
+ call TextBox
+ hlcoord 15, 7
+ ld [hl], $1
+ hlcoord 15, 10
+ ld [hl], $2
+ hlcoord 12, 9
+ call DisplayMinutesWithMinString
+ ld c, 10
+ call DelayFrames
+
+.SetMinutesLoop
+ call JoyTextDelay
+ call SetMinutes
+ jr nc, .SetMinutesLoop
+
+ ld a, [BattleMonNick + 5]
+ ld [StringBuffer2 + 2], a
+ call .ClearScreen
+ ld hl, UnknownText_0x908a4
+ call PrintText
+ call YesNoBox
+ jr nc, .MinutesAreSet
+ call .ClearScreen
+ jr .HourIsSet
+
+.MinutesAreSet
+ call Function658
+ ld hl, OakText_ResponseToSetTime
+ call PrintText
+ call WaitPressAorB_BlinkCursor
+ pop af
+ ld [hInMenu], a
+ ret
+
+.ClearScreen: ; 90783 (24:4783)
+ xor a
+ ld [hBGMapMode], a
+ hlcoord 0, 0
+ ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
+ xor a
+ call ByteFill
+ ld a, $1
+ ld [hBGMapMode], a
+ ret
+
+SetHour: ; 90795 (24:4795)
+ ld a, [hJoyPressed]
+ and A_BUTTON
+ jr nz, .Confirm
+
+ ld hl, hJoyLast
+ ld a, [hl]
+ and D_UP
+ jr nz, .up
+ ld a, [hl]
+ and D_DOWN
+ jr nz, .down
+ call DelayFrame
+ and a
+ ret
+
+.down
+ ld hl, wInitHourBuffer
+ ld a, [hl]
+ and a
+ jr nz, .DecreaseThroughMidnight
+ ld a, 23 + 1
+.DecreaseThroughMidnight
+ dec a
+ ld [hl], a
+ jr .okay
+
+.up
+ ld hl, wInitHourBuffer
+ ld a, [hl]
+ cp 23
+ jr c, .AdvanceThroughMidnight
+ ld a, -1
+.AdvanceThroughMidnight
+ inc a
+ ld [hl], a
+
+.okay
+ hlcoord 4, 9
+ ld a, " "
+ ld bc, 15
+ call ByteFill
+ hlcoord 4, 9
+ call DisplayHourOClock
+ call WaitBGMap
+ and a
+ ret
+
+.Confirm
+ scf
+ ret
+
+DisplayHourOClock: ; 907de (24:47de)
+ push hl
+ ld a, [wInitHourBuffer]
+ ld c, a
+ ld e, l
+ ld d, h
+ call PrintHour
+ inc hl
+ ld de, String_oclock
+ call PlaceString
+ pop hl
+ ret
+; 907f1 (24:47f1)
+
+Function907f1: ; 907f1
+ ld h, d
+ ld l, e
+ push hl
+ call DisplayHourOClock
+ pop de
+rept 2
+ inc de
+endr
+ ld a, $9c
+ ld [de], a
+ inc de
+ push de
+ ld hl, $3
+ add hl, de
+ ld a, [de]
+ inc de
+ ld [hli], a
+ ld a, [de]
+ ld [hl], a
+ pop hl
+ call DisplayMinutesWithMinString
+rept 3
+ inc hl
+endr
+ ret
+; 90810
+
+SetMinutes: ; 90810 (24:4810)
+ ld a, [hJoyPressed]
+ and A_BUTTON
+ jr nz, .asm_90857
+ ld hl, hJoyLast
+ ld a, [hl]
+ and D_UP
+ jr nz, .asm_90835
+ ld a, [hl]
+ and D_DOWN
+ jr nz, .asm_90828
+ call DelayFrame
+ and a
+ ret
+.asm_90828
+ ld hl, BattleMonNick + 5
+ ld a, [hl]
+ and a
+ jr nz, .asm_90831
+ ld a, 59 + 1
+.asm_90831
+ dec a
+ ld [hl], a
+ jr .asm_90841
+.asm_90835
+ ld hl, BattleMonNick + 5
+ ld a, [hl]
+ cp 59
+ jr c, .asm_9083f
+ ld a, -1
+.asm_9083f
+ inc a
+ ld [hl], a
+.asm_90841
+ hlcoord 12, 9
+ ld a, " "
+ ld bc, 7
+ call ByteFill
+ hlcoord 12, 9
+ call DisplayMinutesWithMinString
+ call WaitBGMap
+ and a
+ ret
+.asm_90857
+ scf
+ ret
+
+DisplayMinutesWithMinString: ; 90859 (24:4859)
+ ld de, BattleMonNick + 5
+ call PrintTwoDigitNumberRightAlign
+ inc hl
+ ld de, String_min
+ call PlaceString
+ ret
+
+PrintTwoDigitNumberRightAlign: ; 90867 (24:4867)
+ push hl
+ ld a, " "
+ ld [hli], a
+ ld [hl], a
+ pop hl
+ lb bc, PRINTNUM_RIGHTALIGN | 1, 2
+ call PrintNum
+ ret
+; 90874 (24:4874)
+
+UnknownText_0x90874: ; 0x90874
+ ; Zzz… Hm? Wha…? You woke me up! Will you check the clock for me?
+ text_jump UnknownText_0x1bc29c
+ db "@"
+; 0x90879
+
+UnknownText_0x90879: ; 0x90879
+ ; What time is it?
+ text_jump UnknownText_0x1bc2eb
+ db "@"
+; 0x9087e
+
+String_oclock:
+ db "o'clock@"
+; 90886
+
+UnknownText_0x90886: ; 0x90886
+ ; What?@ @
+ text_jump UnknownText_0x1bc2fd
+ start_asm
+ hlcoord 1, 16
+ call DisplayHourOClock
+ ld hl, UnknownText_0x90895
+ ret
+; 90895 (24:4895)
+
+UnknownText_0x90895: ; 0x90895
+ ; ?
+ text_jump UnknownText_0x1bc305
+ db "@"
+; 0x9089a
+
+UnknownText_0x9089a: ; 0x9089a
+ ; How many minutes?
+ text_jump UnknownText_0x1bc308
+ db "@"
+; 0x9089f
+
+String_min:
+ db "min.@"
+; 908a4
+
+UnknownText_0x908a4: ; 0x908a4
+ ; Whoa!@ @
+ text_jump UnknownText_0x1bc31b
+ start_asm
+; 0x908a9
+ hlcoord 7, 14
+ call DisplayMinutesWithMinString
+ ld hl, UnknownText_0x908b3
+ ret
+; 908b3 (24:48b3)
+
+UnknownText_0x908b3: ; 0x908b3
+ ; ?
+ text_jump UnknownText_0x1bc323
+ db "@"
+; 0x908b8
+
+OakText_ResponseToSetTime: ; 0x908b8
+ start_asm
+ decoord 1, 14
+ ld a, [wInitHourBuffer]
+ ld c, a
+ call PrintHour
+ ld [hl], ":"
+ inc hl
+ ld de, BattleMonNick + 5
+ lb bc, PRINTNUM_LEADINGZEROS | 1, 2
+ call PrintNum
+ ld b, h
+ ld c, l
+ ld a, [wInitHourBuffer]
+ cp 4
+ jr c, .NITE
+ cp 11
+ jr c, .MORN
+ cp 18
+ jr c, .DAY
+.NITE
+ ld hl, .sodark
+ ret
+.MORN
+ ld hl, .overslept
+ ret
+.DAY
+ ld hl, .yikes
+ ret
+; 908ec (24:48ec)
+
+.overslept: ; 0x908ec
+ ; ! I overslept!
+ text_jump UnknownText_0x1bc326
+ db "@"
+; 0x908f1
+
+.yikes: ; 0x908f1
+ ; ! Yikes! I over- slept!
+ text_jump UnknownText_0x1bc336
+ db "@"
+; 0x908f6
+
+.sodark: ; 0x908f6
+ ; ! No wonder it's so dark!
+ text_jump UnknownText_0x1bc34f
+ db "@"
+; 0x908fb
+
+GFX_908fb: ; 908fb
+INCBIN "gfx/unknown/0908fb.2bpp"
+GFX_90903: ; 90903
+INCBIN "gfx/unknown/090903.2bpp"
+GFX_9090b: ; 9090b
+INCBIN "gfx/unknown/09090b.2bpp"
+; 90913
+
+Special_SetDayOfWeek: ; 90913
+ ld a, [hInMenu]
+ push af
+ ld a, $1
+ ld [hInMenu], a
+ ld de, GFX_90903
+ ld hl, VTiles1 tile $6f
+ lb bc, BANK(GFX_90903), 1
+ call Request1bpp
+ ld de, GFX_9090b
+ ld hl, VTiles1 tile $75
+ lb bc, BANK(GFX_9090b), 1
+ call Request1bpp
+ xor a
+ ld [wd002], a
+.asm_90936
+ hlcoord 0, 12
+ lb bc, 4, 18
+ call TextBox
+ call LoadStandardMenuDataHeader
+ ld hl, UnknownText_0x90a3f
+ call PrintText
+ hlcoord 9, 3
+ ld b, 2
+ ld c, 9
+ call TextBox
+ hlcoord 14, 3
+ ld [hl], $ef
+ hlcoord 14, 6
+ ld [hl], $f5
+ hlcoord 10, 5
+ call Function909de
+ call ApplyTilemap
+ ld c, 10
+ call DelayFrames
+.asm_9096a
+ call JoyTextDelay
+ call Function90993
+ jr nc, .asm_9096a
+ call ExitMenu
+ call UpdateSprites
+ ld hl, UnknownText_0x90a44
+ call PrintText
+ call YesNoBox
+ jr c, .asm_90936
+ ld a, [wd002]
+ ld [StringBuffer2], a
+ call Function663
+ call LoadStandardFont
+ pop af
+ ld [hInMenu], a
+ ret
+; 90993
+
+Function90993: ; 90993
+ ld a, [hJoyPressed]
+ and A_BUTTON
+ jr z, .asm_9099b
+ scf
+ ret
+
+.asm_9099b
+ ld hl, hJoyLast
+ ld a, [hl]
+ and D_UP
+ jr nz, .asm_909ba
+ ld a, [hl]
+ and D_DOWN
+ jr nz, .asm_909ad
+ call DelayFrame
+ and a
+ ret
+
+.asm_909ad
+ ld hl, wd002
+ ld a, [hl]
+ and a
+ jr nz, .asm_909b6
+ ld a, 6 + 1
+
+.asm_909b6
+ dec a
+ ld [hl], a
+ jr .asm_909c6
+
+.asm_909ba
+ ld hl, wd002
+ ld a, [hl]
+ cp 6
+ jr c, .asm_909c4
+ ld a, -1
+
+.asm_909c4
+ inc a
+ ld [hl], a
+
+.asm_909c6
+ xor a
+ ld [hBGMapMode], a
+ hlcoord 10, 4
+ ld b, $2
+ ld c, $9
+ call ClearBox
+ hlcoord 10, 5
+ call Function909de
+ call WaitBGMap
+ and a
+ ret
+; 909de
+
+Function909de: ; 909de
+ push hl
+ ld a, [wd002]
+ ld e, a
+ ld d, 0
+ ld hl, WeekdaysStrings
+rept 2
+ add hl, de
+endr
+ ld a, [hli]
+ ld d, [hl]
+ ld e, a
+ pop hl
+ call PlaceString
+ ret
+; 909f2
+
+WeekdaysStrings: ; 909f2
+ dw Sunday
+ dw Monday
+ dw Tuesday
+ dw Wednesday
+ dw Thursday
+ dw Friday
+ dw Saturday
+ dw Sunday
+
+Sunday: db " SUNDAY@"
+Monday: db " MONDAY@"
+Tuesday: db " TUESDAY@"
+Wednesday: db "WEDNESDAY@"
+Thursday: db "THURSDAY@"
+Friday: db " FRIDAY@"
+Saturday: db "SATURDAY@"
+
+
+UnknownText_0x90a3f: ; 0x90a3f
+ ; What day is it?
+ text_jump UnknownText_0x1bc369
+ db "@"
+; 0x90a44
+
+UnknownText_0x90a44: ; 0x90a44
+ start_asm
+ hlcoord 1, 14
+ call Function909de
+ ld hl, UnknownText_0x90a4f
+ ret
+; 90a4f (24:4a4f)
+
+UnknownText_0x90a4f: ; 0x90a4f
+ ; , is it?
+ text_jump UnknownText_0x1bc37a
+ db "@"
+; 0x90a54
+
+Special_InitialSetDSTFlag: ; 90a54
+ ld a, [wDST]
+ set 7, a
+ ld [wDST], a
+ hlcoord 1, 14
+ lb bc, 3, 18
+ call ClearBox
+ ld hl, UnknownText_0x90a6c
+ call PlaceWholeStringInBoxAtOnce
+ ret
+; 90a6c
+
+UnknownText_0x90a6c: ; 90a6c
+ start_asm
+ call UpdateTime
+ ld a, [hHours]
+ ld b, a
+ ld a, [hMinutes]
+ ld c, a
+ decoord 1, 14
+ callba PrintHoursMins
+ ld hl, TextJump_DSTIsThatOK
+ ret
+; 90a83 (24:4a83)
+
+TextJump_DSTIsThatOK: ; 0x90a83
+ ; DST, is that OK?
+ text_jump Text_DSTIsThatOK
+ db "@"
+; 0x90a88
+
+Special_InitialClearDSTFlag: ; 90a88
+ ld a, [wDST]
+ res 7, a
+ ld [wDST], a
+ hlcoord 1, 14
+ lb bc, 3, 18
+ call ClearBox
+ ld hl, UnknownText_0x90aa0
+ call PlaceWholeStringInBoxAtOnce
+ ret
+; 90aa0
+
+UnknownText_0x90aa0: ; 90aa0
+ start_asm
+ call UpdateTime
+ ld a, [hHours]
+ ld b, a
+ ld a, [hMinutes]
+ ld c, a
+ decoord 1, 14
+ callba PrintHoursMins
+ ld hl, UnknownText_0x90ab7
+ ret
+; 90ab7
+
+UnknownText_0x90ab7: ; 0x90ab7
+ ; , is that OK?
+ text_jump UnknownText_0x1c5ff1
+ db "@"
+; 0x90abc
+
+Function90abc: ; 90abc
+ hlcoord 1, 14
+ lb bc, 3, SCREEN_WIDTH - 2
+ call ClearBox
+ ld hl, UnknownText_0x90acc
+ call PlaceWholeStringInBoxAtOnce
+ ret
+; 90acc
+
+UnknownText_0x90acc: ; 0x90acc
+ start_asm
+
+ call UpdateTime
+
+ hlcoord 1, 14
+ ld [hl], "R"
+ inc hl
+ ld [hl], "T"
+ inc hl
+ ld [hl], " "
+ inc hl
+
+ ld de, hRTCDayLo
+ call Function90b23
+
+ hlcoord 1, 16
+ ld [hl], "D"
+ inc hl
+ ld [hl], "F"
+ inc hl
+ ld [hl], " "
+ inc hl
+
+ ld de, StartDay
+ call Function90b23
+
+ ld [hl], " "
+ inc hl
+
+ ld a, [wDST]
+ bit 7, a
+ jr z, .off
+
+ ld [hl], "O"
+ inc hl
+ ld [hl], "N"
+ inc hl
+ jr .done
+
+.off
+ ld [hl], "O"
+ inc hl
+ ld [hl], "F"
+ inc hl
+ ld [hl], "F"
+ inc hl
+
+.done
+ ld hl, UnknownText_0x90b13
+ ret
+; 90b13
+
+UnknownText_0x90b13: ; 0x90b13
+ text "<PARA>Now on DEBUG…"
+ prompt
+; 0x90b23
+
+Function90b23: ; 90b23
+ lb bc, 1, 3
+ call PrintNum
+ ld [hl], "."
+ inc hl
+ inc de
+ lb bc, PRINTNUM_LEADINGZEROS | 1, 2
+ call PrintNum
+ ld [hl], ":"
+ inc hl
+ inc de
+ lb bc, PRINTNUM_LEADINGZEROS | 1, 2
+ call PrintNum
+ ret
+; 90b3e
+
+PrintHour: ; 90b3e (24:4b3e)
+ ld l, e
+ ld h, d
+ push bc
+ call GetTimeOfDayString
+ call PlaceString
+ ld l, c
+ ld h, b
+ inc hl
+ pop bc
+ call AdjustHourForAMorPM
+ ld [wd265], a
+ ld de, wd265
+ call PrintTwoDigitNumberRightAlign
+ ret
+
+GetTimeOfDayString: ; 90b58 (24:4b58)
+ ld a, c
+ cp 4
+ jr c, .nite
+ cp 10
+ jr c, .morn
+ cp 18
+ jr c, .day
+.nite
+ ld de, .NITE
+ ret
+.morn
+ ld de, .MORN
+ ret
+.day
+ ld de, .DAY
+ ret
+; 90b71 (24:4b71)
+
+.NITE: db "NITE@"
+.MORN: db "MORN@"
+.DAY: db "DAY@"
+; 90b7f
+
+AdjustHourForAMorPM:
+; Convert the hour stored in c (0-23) to a 1-12 value
+ ld a, c
+ or a
+ jr z, .midnight
+ cp 12
+ ret c
+ ret z
+ sub 12
+ ret
+
+.midnight
+ ld a, 12
+ ret
diff --git a/engine/title.asm b/engine/title.asm
index 0fbf8b42d..0812ec0ec 100644
--- a/engine/title.asm
+++ b/engine/title.asm
@@ -31,8 +31,8 @@ _TitleScreen: ; 10ed67
; Clear screen palettes
- ld hl, VBGMap0
- ld bc, $0280
+ hlbgcoord 0, 0
+ ld bc, 20 bgrows
xor a
call ByteFill
@@ -42,8 +42,8 @@ _TitleScreen: ; 10ed67
; BG Map 1:
; line 0 (copyright)
- ld hl, VBGMap1
- ld bc, $0020 ; one row
+ hlbgcoord 0, 0, VBGMap1
+ ld bc, 1 bgrows
ld a, 7 ; palette
call ByteFill
@@ -53,41 +53,41 @@ _TitleScreen: ; 10ed67
; Apply logo gradient:
; lines 3-4
- ld hl, VBGMap0 tile $06 ; (0,3)
- ld bc, $0040 ; 2 rows
+ hlbgcoord 0, 3
+ ld bc, 2 bgrows
ld a, 2
call ByteFill
; line 5
- ld hl, VBGMap0 tile $0a ; (0,5)
- ld bc, $0020 ; 1 row
+ hlbgcoord 0, 5
+ ld bc, 1 bgrows
ld a, 3
call ByteFill
; line 6
- ld hl, VBGMap0 tile $0c ; (0,6)
- ld bc, $0020 ; 1 row
+ hlbgcoord 0, 6
+ ld bc, 1 bgrows
ld a, 4
call ByteFill
; line 7
- ld hl, VBGMap0 tile $0e ; (0,7)
- ld bc, $0020 ; 1 row
+ hlbgcoord 0, 7
+ ld bc, 1 bgrows
ld a, 5
call ByteFill
; lines 8-9
- ld hl, VBGMap0 tile $10 ; (0,8)
- ld bc, $0040 ; 2 rows
+ hlbgcoord 0, 8
+ ld bc, 2 bgrows
ld a, 6
call ByteFill
; 'CRYSTAL VERSION'
- ld hl, $9925 ; (5,9)
- ld bc, $000b ; length of version text
+ hlbgcoord 5, 9
+ ld bc, NAME_LENGTH ; length of version text
ld a, 1
call ByteFill
; Suicune gfx
- ld hl, VBGMap0 tile $18 ; (0,12)
- ld bc, $00c0 ; the rest of the screen
+ hlbgcoord 0, 12
+ ld bc, 6 bgrows ; the rest of the screen
ld a, 8
call ByteFill
@@ -109,9 +109,9 @@ _TitleScreen: ; 10ed67
; Clear screen tiles
- ld hl, VBGMap0
- ld bc, $0800
- ld a, $7f
+ hlbgcoord 0, 0
+ ld bc, 64 bgrows
+ ld a, " "
call ByteFill
; Draw Pokemon logo
@@ -122,7 +122,7 @@ _TitleScreen: ; 10ed67
call DrawTitleGraphic
; Draw copyright text
- ld hl, $9c03 ; BGMap1(3,0)
+ hlbgcoord 3, 0, VBGMap1
lb bc, 1, 13
ld d, $c
ld e, $10
@@ -144,7 +144,7 @@ _TitleScreen: ; 10ed67
; Update palette colors
ld hl, TitleScreenPalettes
- ld de, wMapPals
+ ld de, UnknBGPals
ld bc, 4 * 32
call CopyBytes
@@ -220,7 +220,7 @@ _TitleScreen: ; 10ed67
ld [hBGMapMode], a
xor a
- ld [wMapPals + 2], a
+ ld [UnknBGPals + 2], a
; Play starting sound effect
call SFXChannelsOff
@@ -231,7 +231,7 @@ _TitleScreen: ; 10ed67
; 10eea7
SuicuneFrameIterator: ; 10eea7
- ld hl, wMapPals + 2
+ ld hl, UnknBGPals + 2
ld a, [hl]
ld c, a
inc [hl]
@@ -270,7 +270,7 @@ SuicuneFrameIterator: ; 10eea7
LoadSuicuneFrame: ; 10eed2
hlcoord 6, 12
ld b, 6
-.row
+.bgrows
ld c, 8
.col
ld a, d
@@ -288,7 +288,7 @@ LoadSuicuneFrame: ; 10eed2
add d
ld d, a
dec b
- jr nz, .row
+ jr nz, .bgrows
ret
; 10eeef
@@ -298,8 +298,8 @@ DrawTitleGraphic: ; 10eeef
; b: height
; c: width
; d: tile to start drawing from
-; e: number of tiles to advance for each row
-.row
+; e: number of tiles to advance for each bgrows
+.bgrows
push de
push bc
push hl
@@ -318,7 +318,7 @@ DrawTitleGraphic: ; 10eeef
add d
ld d, a
dec b
- jr nz, .row
+ jr nz, .bgrows
ret
; 10ef06
diff --git a/engine/town_map.asm b/engine/town_map.asm
new file mode 100755
index 000000000..c821e793a
--- /dev/null
+++ b/engine/town_map.asm
@@ -0,0 +1,173 @@
+
+_TownMap: ; 9191c
+ ld hl, Options
+ ld a, [hl]
+ push af
+ set NO_TEXT_SCROLL, [hl]
+
+ ld a, [hInMenu]
+ push af
+ ld a, $1
+ ld [hInMenu], a
+
+ ld a, [VramState]
+ push af
+ xor a
+ ld [VramState], a
+
+ call ClearBGPalettes
+ call ClearTileMap
+ call ClearSprites
+ call DisableLCD
+ call Function90c4e
+ callba Function8cf53
+ ld a, 8
+ call SkipMusic
+ ld a, $e3
+ ld [rLCDC], a
+ call Function90d56
+ ld [wd002], a
+ ld [wd003], a
+ xor a
+ ld [hBGMapMode], a
+ call Function91a04
+ call Function3200
+ ld a, [wd002]
+ call Function9106a
+ ld a, [wd003]
+ call Function91098
+ ld a, c
+ ld [wd004], a
+ ld a, b
+ ld [wd005], a
+ ld b, SCGB_02
+ call GetSGBLayout
+ call SetPalettes
+ ld a, [hCGB]
+ and a
+ jr z, .sgb
+ ld a, $e4
+ call Functioncf8
+ call DelayFrame
+
+.sgb
+ ld a, [wd002]
+ cp KANTO_LANDMARK
+ jr nc, .kanto
+ ld d, KANTO_LANDMARK - 1
+ ld e, 1
+ call Function919b0
+ jr .resume
+
+.kanto
+ call Function910e8
+ call Function919b0
+
+.resume
+ pop af
+ ld [VramState], a
+ pop af
+ ld [hInMenu], a
+ pop af
+ ld [Options], a
+ call ClearBGPalettes
+ ret
+; 919b0
+
+Function919b0: ; 919b0
+.loop
+ call JoyTextDelay
+ ld hl, hJoyPressed
+ ld a, [hl]
+ and B_BUTTON
+ ret nz
+
+ ld hl, hJoyLast
+ ld a, [hl]
+ and D_UP
+ jr nz, .pressed_up
+
+ ld a, [hl]
+ and D_DOWN
+ jr nz, .pressed_down
+.loop2
+ push de
+ callba Function8cf69
+ pop de
+ call DelayFrame
+ jr .loop
+
+.pressed_up
+ ld hl, wd003
+ ld a, [hl]
+ cp d
+ jr c, .okay
+ ld a, e
+ dec a
+ ld [hl], a
+
+.okay
+ inc [hl]
+ jr .next
+
+.pressed_down
+ ld hl, wd003
+ ld a, [hl]
+ cp e
+ jr nz, .okay2
+ ld a, d
+ inc a
+ ld [hl], a
+
+.okay2
+ dec [hl]
+
+.next
+ push de
+ ld a, [wd003]
+ call Function910b4
+ ld a, [wd004]
+ ld c, a
+ ld a, [wd005]
+ ld b, a
+ ld a, [wd003]
+ call Function910d4
+ pop de
+ jr .loop2
+; 91a04
+
+Function91a04: ; 91a04
+ ld a, [wd002]
+ cp KANTO_LANDMARK
+ jr nc, .kanto
+ ld e, $0
+ jr .okay
+
+.kanto
+ ld e, $1
+
+.okay
+ callba PokegearMap
+ ld a, $7
+ ld bc, 6
+ hlcoord 1, 0
+ call ByteFill
+ hlcoord 0, 0
+ ld [hl], $6
+ hlcoord 7, 0
+ ld [hl], $17
+ hlcoord 7, 1
+ ld [hl], $16
+ hlcoord 7, 2
+ ld [hl], $26
+ ld a, $7
+ ld bc, NAME_LENGTH
+ hlcoord 8, 2
+ call ByteFill
+ hlcoord 19, 2
+ ld [hl], $17
+ ld a, [wd003]
+ call Function910b4
+ callba TownMapPals
+ ret
+; 91a53
diff --git a/engine/trade/animation.asm b/engine/trade/animation.asm
new file mode 100755
index 000000000..0aaf0cb8b
--- /dev/null
+++ b/engine/trade/animation.asm
@@ -0,0 +1,1542 @@
+TradeAnimation: ; 28f24
+ xor a
+ ld [wcf66], a
+ ld hl, wPlayerTrademonSenderName
+ ld de, wOTTrademonSenderName
+ call Function297ff
+ ld hl, wPlayerTrademonSpecies
+ ld de, wOTTrademonSpecies
+ call Function29814
+ ld de, .data_28f3f
+ jr Function28fa1
+
+.data_28f3f
+ tradeanim_setup_givemon_scroll
+ tradeanim_show_givemon_data
+ tradeanim_do_givemon_scroll
+ tradeanim_wait_80
+ tradeanim_wait_96
+ tradeanim_poof
+ tradeanim_rocking_ball
+ tradeanim_enter_link_tube
+ tradeanim_wait_anim
+ tradeanim_bulge_through_tube
+ tradeanim_wait_anim
+ tradeanim_1e
+ tradeanim_give_trademon_sfx
+ tradeanim_tube_to_ot
+ tradeanim_sent_to_ot_text
+ tradeanim_scroll_out_right
+
+ tradeanim_ot_sends_text_1
+ tradeanim_ot_bids_farewell
+ tradeanim_wait_40
+ tradeanim_scroll_out_right
+ tradeanim_get_trademon_sfx
+ tradeanim_tube_to_player
+ tradeanim_enter_link_tube
+ tradeanim_drop_ball
+ tradeanim_exit_link_tube
+ tradeanim_wait_anim
+ tradeanim_show_getmon_data
+ tradeanim_poof
+ tradeanim_wait_anim
+ tradeanim_1d
+ tradeanim_animate_frontpic
+ tradeanim_wait_80_if_ot_egg
+ tradeanim_1e
+ tradeanim_take_care_of_text
+ tradeanim_scroll_out_right
+ tradeanim_end
+
+TradeAnimationPlayer2: ; 28f63
+ xor a
+ ld [wcf66], a
+ ld hl, wOTTrademonSenderName
+ ld de, wPlayerTrademonSenderName
+ call Function297ff
+ ld hl, wOTTrademonSpecies
+ ld de, wPlayerTrademonSpecies
+ call Function29814
+ ld de, .data_28f7e
+ jr Function28fa1
+
+.data_28f7e
+ tradeanim_ot_sends_text_2
+ tradeanim_ot_bids_farewell
+ tradeanim_wait_40
+ tradeanim_scroll_out_right
+ tradeanim_get_trademon_sfx
+ tradeanim_tube_to_ot
+ tradeanim_enter_link_tube
+ tradeanim_drop_ball
+ tradeanim_exit_link_tube
+ tradeanim_wait_anim
+ tradeanim_show_getmon_data
+ tradeanim_poof
+ tradeanim_wait_anim
+ tradeanim_1d
+ tradeanim_animate_frontpic
+ tradeanim_wait_180_if_ot_egg
+ tradeanim_1e
+ tradeanim_take_care_of_text
+ tradeanim_scroll_out_right
+
+ tradeanim_setup_givemon_scroll
+ tradeanim_show_givemon_data
+ tradeanim_do_givemon_scroll
+ tradeanim_wait_40
+ tradeanim_poof
+ tradeanim_rocking_ball
+ tradeanim_enter_link_tube
+ tradeanim_wait_anim
+ tradeanim_bulge_through_tube
+ tradeanim_wait_anim
+ tradeanim_1e
+ tradeanim_give_trademon_sfx
+ tradeanim_tube_to_player
+ tradeanim_sent_to_ot_text
+ tradeanim_scroll_out_right
+ tradeanim_end
+
+Function28fa1: ; 28fa1
+ ld hl, wTradeAnimPointer
+ ld [hl], e
+ inc hl
+ ld [hl], d
+ ld a, [hMapAnims]
+ push af
+ xor a
+ ld [hMapAnims], a
+ ld hl, VramState
+ ld a, [hl]
+ push af
+ res 0, [hl]
+ ld hl, Options
+ ld a, [hl]
+ push af
+ set 4, [hl]
+ call Function28fdb
+ ld a, [wcf66]
+ and a
+ jr nz, .anim_loop
+ ld de, MUSIC_EVOLUTION
+ call PlayMusic2
+.anim_loop
+ call DoTradeAnimation
+ jr nc, .anim_loop
+ pop af
+ ld [Options], a
+ pop af
+ ld [VramState], a
+ pop af
+ ld [hMapAnims], a
+ ret
+; 28fdb
+
+Function28fdb: ; 28fdb
+ xor a
+ ld [wJumptableIndex], a
+ call ClearBGPalettes
+ call ClearSprites
+ call ClearTileMap
+ call DisableLCD
+ call LoadFontsBattleExtra
+ callab Function8cf53
+ ld a, [hCGB]
+ and a
+ jr z, .asm_2900b
+ ld a, $1
+ ld [rVBK], a
+ ld hl, VTiles0
+ ld bc, sScratch - VTiles0
+ xor a
+ call ByteFill
+ ld a, $0
+ ld [rVBK], a
+
+.asm_2900b
+ hlbgcoord 0, 0
+ ld bc, sScratch - VBGMap0
+ ld a, " "
+ call ByteFill
+ ld hl, TradeGameBoyLZ
+ ld de, VTiles2 tile $31
+ call Decompress
+ ld hl, TradeArrowGFX
+ ld de, VTiles1 tile $6d
+ ld bc, $10
+ ld a, BANK(TradeArrowGFX)
+ call FarCopyBytes
+ ld hl, TradeArrowGFX + $10
+ ld de, VTiles1 tile $6e
+ ld bc, $10
+ ld a, BANK(TradeArrowGFX)
+ call FarCopyBytes
+ xor a
+ ld [hSCX], a
+ ld [hSCY], a
+ ld a, $7
+ ld [hWX], a
+ ld a, $90
+ ld [hWY], a
+ callba Function4d7fd
+ call EnableLCD
+ call Function2982b
+ ld a, [wPlayerTrademonSpecies]
+ ld hl, wPlayerTrademonDVs
+ ld de, VTiles0
+ call Function29491
+ ld a, [wOTTrademonSpecies]
+ ld hl, wOTTrademonDVs
+ ld de, VTiles0 tile $31
+ call Function29491
+ ld a, [wPlayerTrademonSpecies]
+ ld de, wPlayerTrademonSpeciesName
+ call Function294a9
+ ld a, [wOTTrademonSpecies]
+ ld de, wOTTrademonSpeciesName
+ call Function294a9
+ call Function297ed
+ ret
+; 29082
+
+DoTradeAnimation: ; 29082
+ ld a, [wJumptableIndex]
+ bit 7, a
+ jr nz, .finished
+ call .DoTradeAnimCommand
+ callab Function8cf69
+ ld hl, wcf65
+ inc [hl]
+ call DelayFrame
+ and a
+ ret
+
+.finished
+ call LoadStandardFont
+ scf
+ ret
+; 290a0
+
+.DoTradeAnimCommand: ; 290a0
+ ld a, [wJumptableIndex]
+ ld e, a
+ ld d, 0
+ ld hl, .JumpTable
+rept 2
+ add hl, de
+endr
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp [hl]
+; 290af
+
+.JumpTable: ; 290af
+ dw TradeAnim_Next ; 00
+ dw TradeAnim_ShowGivemonData ; 01
+ dw TradeAnim_ShowGetmonData ; 02
+ dw TradeAnim_EnterLinkTube ; 03
+ dw TradeAnim_04 ; 04
+ dw TradeAnim_ExitLinkTube ; 05
+ dw TradeAnim_TubeToOT1 ; 06
+ dw TradeAnim_TubeToOT2 ; 07
+ dw TradeAnim_TubeToOT3 ; 08
+ dw TradeAnim_TubeToOT4 ; 09
+ dw TradeAnim_TubeToOT5 ; 0a
+ dw TradeAnim_TubeToOT6 ; 0b
+ dw TradeAnim_TubeToOT7 ; 0c
+ dw TradeAnim_TubeToOT8 ; 0d
+ dw TradeAnim_TubeToPlayer1 ; 0e
+ dw TradeAnim_TubeToPlayer2 ; 0f
+ dw TradeAnim_TubeToPlayer3 ; 10
+ dw TradeAnim_TubeToPlayer4 ; 11
+ dw TradeAnim_TubeToPlayer5 ; 12
+ dw TradeAnim_TubeToPlayer6 ; 13
+ dw TradeAnim_TubeToPlayer7 ; 14
+ dw TradeAnim_TubeToPlayer8 ; 15
+ dw TradeAnim_SentToOTText ; 16
+ dw TradeAnim_OTBidsFarewell ; 17
+ dw TradeAnim_TakeCareOfText ; 18
+ dw TradeAnim_OTSendsText1 ; 19
+ dw TradeAnim_OTSendsText2 ; 1a
+ dw TradeAnim_SetupGivemonScroll ; 1b
+ dw TradeAnim_DoGivemonScroll ; 1c
+ dw TradeAnim_1d ; 1d
+ dw TradeAnim_1e ; 1e
+ dw TradeAnim_ScrollOutRight ; 1f
+ dw TradeAnim_ScrollOutRight2 ; 20
+ dw TraideAnim_Wait80 ; 21
+ dw TraideAnim_Wait40 ; 22
+ dw TradeAnim_RockingBall ; 23
+ dw TradeAnim_DropBall ; 24
+ dw TradeAnim_WaitAnim ; 25
+ dw TradeAnim_WaitAnim2 ; 26
+ dw TradeAnim_Poof ; 27
+ dw TradeAnim_BulgeThroughTube ; 28
+ dw TradeAnim_GiveTrademonSFX ; 29
+ dw TradeAnim_GetTrademonSFX ; 2a
+ dw TradeAnim_End ; 2b
+ dw TradeAnim_AnimateFrontpic ; 2c
+ dw TraideAnim_Wait96 ; 2d
+ dw TraideAnim_Wait80IfOTEgg ; 2e
+ dw TraideAnim_Wait180IfOTEgg ; 2f
+; 2910f
+
+NextTradeAnim: ; 2910f
+ ld hl, wJumptableIndex
+ inc [hl]
+ ret
+; 29114
+
+TradeAnim_Next: ; 29114
+ ld hl, wTradeAnimPointer
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ ld a, [de]
+ ld [wJumptableIndex], a
+ inc de
+ ld [hl], d
+ dec hl
+ ld [hl], e
+ ret
+; 29123
+
+TradeAnim_End: ; 29123
+ ld hl, wJumptableIndex
+ set 7, [hl]
+ ret
+; 29129
+
+TradeAnim_TubeToOT1: ; 29129
+ ld a, $ed
+ call Function292f6
+ ld a, [wc74c]
+ ld [wd265], a
+ xor a
+ depixel 5, 11, 4, 0
+ ld b, $0
+ jr Function2914e
+
+TradeAnim_TubeToPlayer1: ; 2913c
+ ld a, $ee
+ call Function292f6
+ ld a, [wc74d]
+ ld [wd265], a
+ ld a, $2
+ depixel 9, 18, 4, 4
+ ld b, $4
+
+Function2914e: ; 2914e
+ push bc
+ push de
+ push bc
+ push de
+ push af
+ call DisableLCD
+ callab Function8cf53
+ hlbgcoord 20, 3
+ ld bc, $c
+ ld a, $60
+ call ByteFill
+ pop af
+ call Function29281
+ xor a
+ ld [hSCX], a
+ ld a, $7
+ ld [hWX], a
+ ld a, $70
+ ld [hWY], a
+ call EnableLCD
+ call Function2985a
+ pop de
+ ld a, SPRITE_ANIM_INDEX_11
+ call _InitSpriteAnimStruct
+ ld hl, $b
+ add hl, bc
+ pop bc
+ ld [hl], b
+ pop de
+ ld a, SPRITE_ANIM_INDEX_12
+ call _InitSpriteAnimStruct
+ ld hl, $b
+ add hl, bc
+ pop bc
+ ld [hl], b
+ call WaitBGMap
+ ld b, SCGB_1B
+ call GetSGBLayout
+ ld a, $e4
+ call DmgToCgbBGPals
+ ld a, $d0
+ call Functioncf8
+ call NextTradeAnim
+ ld a, $5c
+ ld [wcf64], a
+ ret
+; 291af
+
+TradeAnim_TubeToOT2: ; 291af
+ call Function2981d
+ ld a, [hSCX]
+ add $2
+ ld [hSCX], a
+ cp $50
+ ret nz
+ ld a, $1
+ call Function29281
+ call NextTradeAnim
+ ret
+; 291c4
+
+TradeAnim_TubeToOT3: ; 291c4
+ call Function2981d
+ ld a, [hSCX]
+ add $2
+ ld [hSCX], a
+ cp $a0
+ ret nz
+ ld a, $2
+ call Function29281
+ call NextTradeAnim
+ ret
+; 291d9
+
+TradeAnim_TubeToOT4: ; 291d9
+ call Function2981d
+ ld a, [hSCX]
+ add $2
+ ld [hSCX], a
+ and a
+ ret nz
+ call NextTradeAnim
+ ret
+; 291e8
+
+TradeAnim_TubeToPlayer3: ; 291e8
+ call Function2981d
+ ld a, [hSCX]
+ sub $2
+ ld [hSCX], a
+ cp $b0
+ ret nz
+ ld a, $1
+ call Function29281
+ call NextTradeAnim
+ ret
+; 291fd
+
+TradeAnim_TubeToPlayer4: ; 291fd
+ call Function2981d
+ ld a, [hSCX]
+ sub $2
+ ld [hSCX], a
+ cp $60
+ ret nz
+ xor a
+ call Function29281
+ call NextTradeAnim
+ ret
+; 29211
+
+TradeAnim_TubeToPlayer5: ; 29211
+ call Function2981d
+ ld a, [hSCX]
+ sub $2
+ ld [hSCX], a
+ and a
+ ret nz
+ call NextTradeAnim
+ ret
+; 29220
+
+TradeAnim_TubeToOT6:
+TradeAnim_TubeToPlayer6: ; 29220
+ ld a, $80
+ ld [wcf64], a
+ call NextTradeAnim
+ ret
+; 29229
+
+TradeAnim_TubeToOT8:
+TradeAnim_TubeToPlayer8: ; 29229
+ call ClearBGPalettes
+ call ClearTileMap
+ call ClearSprites
+ call DisableLCD
+ callab Function8cf53
+ hlbgcoord 0, 0
+ ld bc, sScratch - VBGMap0
+ ld a, " "
+ call ByteFill
+ xor a
+ ld [hSCX], a
+ ld a, $90
+ ld [hWY], a
+ call EnableLCD
+ call Function2982b
+ call WaitBGMap
+ call Function297ed
+ call TradeAnim_Next
+ ret
+; 2925d
+
+TradeAnim_TubeToOT5:
+TradeAnim_TubeToOT7:
+TradeAnim_TubeToPlayer2:
+TradeAnim_TubeToPlayer7: ; 2925d
+ call Function2981d
+ ld hl, wcf64
+ ld a, [hl]
+ and a
+ jr z, .done
+ dec [hl]
+ ret
+
+.done
+ call NextTradeAnim
+ ret
+; 2926d
+
+TradeAnim_GiveTrademonSFX: ; 2926d
+ call TradeAnim_Next
+ ld de, SFX_GIVE_TRADEMON
+ call PlaySFX
+ ret
+; 29277
+
+TradeAnim_GetTrademonSFX: ; 29277
+ call TradeAnim_Next
+ ld de, SFX_GET_TRADEMON
+ call PlaySFX
+ ret
+; 29281
+
+Function29281: ; 29281
+ and 3
+ ld e, a
+ ld d, 0
+ ld hl, Jumptable_2928f
+rept 2
+ add hl, de
+endr
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp [hl]
+; 2928f
+
+Jumptable_2928f: ; 2928f
+ dw Function29297
+ dw Function292af
+ dw Function292be
+ dw Function29297
+; 29297
+
+Function29297: ; 29297
+ call Function297cf
+ hlcoord 9, 3
+ ld [hl], $5b
+ inc hl
+ ld bc, 10
+ ld a, $60
+ call ByteFill
+ hlcoord 3, 2
+ call Function292ec
+ ret
+; 292af
+
+Function292af: ; 292af
+ call Function297cf
+ hlcoord 0, 3
+ ld bc, SCREEN_WIDTH
+ ld a, $60
+ call ByteFill
+ ret
+; 292be
+
+Function292be: ; 292be
+ call Function297cf
+ hlcoord 0, 3
+ ld bc, $11
+ ld a, $60
+ call ByteFill
+ hlcoord 17, 3
+ ld a, $5d
+ ld [hl], a
+ ld a, $61
+ ld de, SCREEN_WIDTH
+ ld c, $3
+.loop
+ add hl, de
+ ld [hl], a
+ dec c
+ jr nz, .loop
+ add hl, de
+ ld a, $5f
+ ld [hld], a
+ ld a, $5b
+ ld [hl], a
+ hlcoord 10, 6
+ call Function292ec
+ ret
+; 292ec
+
+Function292ec: ; 292ec
+ ld de, TradeGameBoyTilemap
+ lb bc, 8, 6
+ call Function297db
+ ret
+; 292f6
+
+Function292f6: ; 292f6
+ push af
+ call ClearBGPalettes
+ call WaitTop
+ ld a, VBGMap1 / $100
+ ld [hBGMapAddress + 1], a
+ call ClearTileMap
+ hlcoord 0, 0
+ ld bc, SCREEN_WIDTH
+ ld a, "─"
+ call ByteFill
+ hlcoord 0, 1
+ ld de, wLinkPlayer1Name
+ call PlaceString
+ ld hl, wLinkPlayer2Name
+ ld de, 0
+.find_name_end_loop
+ ld a, [hli]
+ cp "@"
+ jr z, .done
+ dec de
+ jr .find_name_end_loop
+
+.done
+ hlcoord 0, 4
+ add hl, de
+ ld de, wLinkPlayer2Name
+ call PlaceString
+ hlcoord 7, 2
+ ld bc, 6
+ pop af
+ call ByteFill
+ call WaitBGMap
+ call WaitTop
+ ld a, VBGMap0 / $100
+ ld [hBGMapAddress + 1], a
+ call ClearTileMap
+ ret
+; 29348
+
+TradeAnim_EnterLinkTube: ; 29348
+ call ClearTileMap
+ call WaitTop
+ ld a, $a0
+ ld [hSCX], a
+ call DelayFrame
+ hlcoord 8, 2
+ ld de, Tilemap_298f7
+ lb bc, 3, 12
+ call Function297db
+ call WaitBGMap
+ ld b, SCGB_1B
+ call GetSGBLayout
+ ld a, $e4
+ call DmgToCgbBGPals
+ ld de, $e4e4
+ call DmgToCgbObjPals
+ ld de, SFX_POTION
+ call PlaySFX
+ call NextTradeAnim
+ ret
+; 2937e
+
+TradeAnim_04: ; 2937e
+ ld a, [hSCX]
+ and a
+ jr z, .done
+ add $4
+ ld [hSCX], a
+ ret
+
+.done
+ ld c, 80
+ call DelayFrames
+ call TradeAnim_Next
+ ret
+; 29391
+
+TradeAnim_ExitLinkTube: ; 29391
+ ld a, [hSCX]
+ cp $a0
+ jr z, .asm_2939c
+ sub $4
+ ld [hSCX], a
+ ret
+
+.asm_2939c
+ call ClearTileMap
+ xor a
+ ld [hSCX], a
+ call TradeAnim_Next
+ ret
+; 293a6
+
+TradeAnim_SetupGivemonScroll: ; 293a6
+ ld a, $8f
+ ld [hWX], a
+ ld a, $88
+ ld [hSCX], a
+ ld a, $50
+ ld [hWY], a
+ call TradeAnim_Next
+ ret
+; 293b6
+
+TradeAnim_DoGivemonScroll: ; 293b6
+ ld a, [hWX]
+ cp $7
+ jr z, .done
+ sub $4
+ ld [hWX], a
+ ld a, [hSCX]
+ sub $4
+ ld [hSCX], a
+ ret
+
+.done
+ ld a, $7
+ ld [hWX], a
+ xor a
+ ld [hSCX], a
+ call TradeAnim_Next
+ ret
+; 293d2
+
+TradeAnim_1d: ; 293d2
+ ld a, $7
+ ld [hWX], a
+ ld a, $50
+ ld [hWY], a
+ call TradeAnim_Next
+ ret
+; 293de
+
+TradeAnim_1e: ; 293de
+ ld a, $7
+ ld [hWX], a
+ ld a, $90
+ ld [hWY], a
+ call TradeAnim_Next
+ ret
+; 293ea
+
+TradeAnim_ScrollOutRight: ; 293ea
+ call WaitTop
+ ld a, VBGMap1 / $100
+ ld [hBGMapAddress + 1], a
+ call WaitBGMap
+ ld a, $7
+ ld [hWX], a
+ xor a
+ ld [hWY], a
+ call DelayFrame
+ call WaitTop
+ ld a, VBGMap0 / $100
+ ld [hBGMapAddress + 1], a
+ call ClearTileMap
+ call NextTradeAnim
+ ret
+; 2940c
+
+TradeAnim_ScrollOutRight2: ; 2940c
+ ld a, [hWX]
+ cp $a1
+ jr nc, .done
+ add $4
+ ld [hWX], a
+ ret
+
+.done
+ ld a, VBGMap1 / $100
+ ld [hBGMapAddress + 1], a
+ call WaitBGMap
+ ld a, $7
+ ld [hWX], a
+ ld a, $90
+ ld [hWY], a
+ ld a, VBGMap0 / $100
+ ld [hBGMapAddress + 1], a
+ call TradeAnim_Next
+ ret
+; 2942e
+
+TradeAnim_ShowGivemonData: ; 2942e
+ call Function2951f
+ ld a, [wPlayerTrademonSpecies]
+ ld [CurPartySpecies], a
+ ld a, [wPlayerTrademonDVs]
+ ld [TempMonDVs], a
+ ld a, [wPlayerTrademonDVs + 1]
+ ld [TempMonDVs + 1], a
+ ld b, SCGB_1A
+ call GetSGBLayout
+ ld a, $e4
+ call DmgToCgbBGPals
+ call Function294bb
+
+ ld a, [wPlayerTrademonSpecies]
+ call GetCryIndex
+ jr c, .skip_cry
+ ld e, c
+ ld d, b
+ call PlayCryHeader
+.skip_cry
+
+ call TradeAnim_Next
+ ret
+; 29461
+
+TradeAnim_ShowGetmonData: ; 29461
+ call Function29549
+ ld a, [wOTTrademonSpecies]
+ ld [CurPartySpecies], a
+ ld a, [wOTTrademonDVs]
+ ld [TempMonDVs], a
+ ld a, [wOTTrademonDVs + 1]
+ ld [TempMonDVs + 1], a
+ ld b, SCGB_1A
+ call GetSGBLayout
+ ld a, $e4
+ call DmgToCgbBGPals
+ call Function294c0
+ call TradeAnim_Next
+ ret
+; 29487
+
+TradeAnim_AnimateFrontpic: ; 29487
+ callba Function4d81e
+ call TradeAnim_Next
+ ret
+; 29491
+
+Function29491: ; 29491
+ push de
+ push af
+ predef GetUnownLetter
+ pop af
+ ld [CurPartySpecies], a
+ ld [CurSpecies], a
+ call GetBaseData
+ pop de
+ predef GetFrontpic
+ ret
+; 294a9
+
+Function294a9: ; 294a9
+ push de
+ ld [wd265], a
+ call GetPokemonName
+ ld hl, StringBuffer1
+ pop de
+ ld bc, NAME_LENGTH
+ call CopyBytes
+ ret
+; 294bb
+
+Function294bb: ; 294bb
+ ld de, VTiles0
+ jr Function294c3
+
+Function294c0: ; 294c0
+ ld de, VTiles0 tile $31
+
+Function294c3: ; 294c3
+ call DelayFrame
+ ld hl, VTiles2
+ lb bc, 10, $31
+ call Request2bpp
+ call WaitTop
+ call Function297cf
+ hlcoord 7, 2
+ xor a
+ ld [hFillBox], a
+ lb bc, 7, 7
+ predef FillBox
+ call WaitBGMap
+ ret
+; 294e7
+
+TraideAnim_Wait80: ; 294e7
+ ld c, 80
+ call DelayFrames
+ call TradeAnim_Next
+ ret
+; 294f0
+
+TraideAnim_Wait40: ; 294f0
+ ld c, 40
+ call DelayFrames
+ call TradeAnim_Next
+ ret
+; 294f9
+
+TraideAnim_Wait96: ; 294f9
+ ld c, 96
+ call DelayFrames
+ call TradeAnim_Next
+ ret
+; 29502
+
+TraideAnim_Wait80IfOTEgg: ; 29502
+ call IsOTTrademonEgg
+ ret nz
+ ld c, 80
+ call DelayFrames
+ ret
+; 2950c
+
+TraideAnim_Wait180IfOTEgg: ; 2950c
+ call IsOTTrademonEgg
+ ret nz
+ ld c, 180
+ call DelayFrames
+ ret
+; 29516
+
+IsOTTrademonEgg: ; 29516
+ call TradeAnim_Next
+ ld a, [wOTTrademonSpecies]
+ cp EGG
+ ret
+; 2951f
+Function2951f: ; 2951f
+ ld de, wPlayerTrademonSpecies
+ ld a, [de]
+ cp EGG
+ jr z, Function295a1
+ call Function29573
+ ld de, wPlayerTrademonSpecies
+ call Function295e3
+ ld de, wPlayerTrademonSpeciesName
+ call Function295ef
+ ld a, [wPlayerTrademonCaughtData]
+ ld de, wPlayerTrademonOTName
+ call Function295f6
+ ld de, PlayerScreens
+ call Function29611
+ call Function295d8
+ ret
+; 29549
+
+Function29549: ; 29549
+ ld de, wOTTrademonSpecies
+ ld a, [de]
+ cp EGG
+ jr z, Function295a1
+ call Function29573
+ ld de, wOTTrademonSpecies
+ call Function295e3
+ ld de, wOTTrademonSpeciesName
+ call Function295ef
+ ld a, [wOTTrademonCaughtData]
+ ld de, wOTTrademonOTName
+ call Function295f6
+ ld de, wOTTrademonID
+ call Function29611
+ call Function295d8
+ ret
+; 29573
+
+Function29573: ; 29573
+ call WaitTop
+ call Function297cf
+ ld a, VBGMap1 / $100
+ ld [hBGMapAddress + 1], a
+ hlcoord 3, 0
+ ld b, $6
+ ld c, $d
+ call TextBox
+ hlcoord 4, 0
+ ld de, String29591
+ call PlaceString
+ ret
+; 29591
+
+String29591: ; 29591
+ db "─── №."
+ next ""
+ next "OT/"
+ next "<ID>№.@"
+; 295a1
+
+Function295a1: ; 295a1
+ call WaitTop
+ call Function297cf
+ ld a, VBGMap1 / $100
+ ld [hBGMapAddress + 1], a
+ hlcoord 3, 0
+ ld b, $6
+ ld c, $d
+ call TextBox
+ hlcoord 4, 2
+ ld de, String295c2
+ call PlaceString
+ call Function295d8
+ ret
+; 295c2
+
+String295c2: ; 295c2
+ db "EGG"
+ next "OT/?????"
+ next "<ID>№.?????@"
+; 295d8
+
+Function295d8: ; 295d8
+ call WaitBGMap
+ call WaitTop
+ ld a, VBGMap0 / $100
+ ld [hBGMapAddress + 1], a
+ ret
+; 295e3
+
+Function295e3: ; 295e3
+ hlcoord 10, 0
+ lb bc, PRINTNUM_LEADINGZEROS | 1, 3
+ call PrintNum
+ ld [hl], " "
+ ret
+; 295ef
+
+Function295ef: ; 295ef
+ hlcoord 4, 2
+ call PlaceString
+ ret
+; 295f6
+
+Function295f6: ; 295f6
+ cp 3
+ jr c, .asm_295fb
+ xor a
+
+.asm_295fb
+ push af
+ hlcoord 7, 4
+ call PlaceString
+ inc bc
+ pop af
+ ld hl, Unknown_2960e
+ ld d, 0
+ ld e, a
+ add hl, de
+ ld a, [hl]
+ ld [bc], a
+ ret
+; 2960e
+
+Unknown_2960e: ; 2960e
+ db " ", "♂", "♀"
+; 29611
+
+Function29611: ; 29611
+ hlcoord 7, 6
+ lb bc, PRINTNUM_LEADINGZEROS | 2, 5
+ call PrintNum
+ ret
+; 2961b
+
+TradeAnim_RockingBall: ; 2961b
+ depixel 10, 11, 4, 0
+ ld a, SPRITE_ANIM_INDEX_0E
+ call _InitSpriteAnimStruct
+ call TradeAnim_Next
+ ld a, $20
+ ld [wcf64], a
+ ret
+; 2962c
+
+TradeAnim_DropBall: ; 2962c
+ depixel 10, 11, 4, 0
+ ld a, SPRITE_ANIM_INDEX_0E
+ call _InitSpriteAnimStruct
+ ld hl, $b
+ add hl, bc
+ ld [hl], $1
+ ld hl, $7
+ add hl, bc
+ ld [hl], $dc
+ call TradeAnim_Next
+ ld a, $38
+ ld [wcf64], a
+ ret
+; 29649
+
+TradeAnim_Poof: ; 29649
+ depixel 10, 11, 4, 0
+ ld a, SPRITE_ANIM_INDEX_0F
+ call _InitSpriteAnimStruct
+ call TradeAnim_Next
+ ld a, $10
+ ld [wcf64], a
+ ld de, SFX_BALL_POOF
+ call PlaySFX
+ ret
+; 29660
+
+TradeAnim_BulgeThroughTube: ; 29660
+ ld a, $e4
+ call Functioncf8
+ depixel 5, 11
+ ld a, SPRITE_ANIM_INDEX_10
+ call _InitSpriteAnimStruct
+ call TradeAnim_Next
+ ld a, $40
+ ld [wcf64], a
+ ret
+; 29676
+
+Function29676: ; 29676 (a:5676)
+ ld hl, $b
+ add hl, bc
+ ld e, [hl]
+ ld d, 0
+ ld hl, Jumptable_29686
+rept 2
+ add hl, de
+endr
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp [hl]
+; 29686
+
+Jumptable_29686: ; 29686 (a:5686)
+ dw Function2969a
+ dw Function296a4
+ dw Function296af
+ dw Function296bd
+ dw Function296cf
+ dw Function296dd
+ dw Function296f2
+; 2969a
+
+Function29694: ; 29694 (a:5694)
+ ld hl, $b
+ add hl, bc
+ inc [hl]
+ ret
+
+Function2969a: ; 2969a (a:569a)
+ call Function29694
+ ld hl, $c
+ add hl, bc
+ ld [hl], $80
+ ret
+
+Function296a4: ; 296a4 (a:56a4)
+ ld hl, $c
+ add hl, bc
+ ld a, [hl]
+ dec [hl]
+ and a
+ ret nz
+ call Function29694
+
+Function296af: ; 296af (a:56af)
+ ld hl, $4
+ add hl, bc
+ ld a, [hl]
+ cp $94
+ jr nc, .asm_296ba
+ inc [hl]
+ ret
+.asm_296ba
+ call Function29694
+
+Function296bd: ; 296bd (a:56bd)
+ ld hl, $5
+ add hl, bc
+ ld a, [hl]
+ cp $4c
+ jr nc, .asm_296c8
+ inc [hl]
+ ret
+.asm_296c8
+ ld hl, $
+ add hl, bc
+ ld [hl], $0
+ ret
+
+Function296cf: ; 296cf (a:56cf)
+ ld hl, $5
+ add hl, bc
+ ld a, [hl]
+ cp $2c
+ jr z, .asm_296da
+ dec [hl]
+ ret
+.asm_296da
+ call Function29694
+
+Function296dd: ; 296dd (a:56dd)
+ ld hl, $4
+ add hl, bc
+ ld a, [hl]
+ cp $58
+ jr z, .asm_296e8
+ dec [hl]
+ ret
+.asm_296e8
+ call Function29694
+ ld hl, $c
+ add hl, bc
+ ld [hl], $80
+ ret
+
+Function296f2: ; 296f2 (a:56f2)
+ ld hl, $c
+ add hl, bc
+ ld a, [hl]
+ dec [hl]
+ and a
+ ret nz
+ ld hl, $
+ add hl, bc
+ ld [hl], $0
+ ret
+; 29701 (a:5701)
+
+TradeAnim_SentToOTText: ; 29701
+ ld a, [wLinkMode]
+ cp LINK_TIMECAPSULE
+ jr z, .time_capsule
+ ld hl, UnknownText_0x29737
+ call PrintText
+ ld c, 189
+ call DelayFrames
+ ld hl, UnknownText_0x29732
+ call PrintText
+ call Function297c9
+ ld c, 128
+ call DelayFrames
+ call TradeAnim_Next
+ ret
+
+.time_capsule
+ ld hl, UnknownText_0x29732
+ call PrintText
+ call Function297c9
+ call TradeAnim_Next
+ ret
+; 29732
+
+UnknownText_0x29732: ; 0x29732
+ ; was sent to @ .
+ text_jump UnknownText_0x1bc6e9
+ db "@"
+; 0x29737
+
+UnknownText_0x29737: ; 0x29737
+ ;
+ text_jump UnknownText_0x1bc701
+ db "@"
+; 0x2973c
+
+TradeAnim_OTBidsFarewell: ; 2973c
+ ld hl, UnknownText_0x29752
+ call PrintText
+ call Function297c9
+ ld hl, UnknownText_0x29757
+ call PrintText
+ call Function297c9
+ call TradeAnim_Next
+ ret
+; 29752
+
+UnknownText_0x29752: ; 0x29752
+ ; bids farewell to
+ text_jump UnknownText_0x1bc703
+ db "@"
+; 0x29757
+
+UnknownText_0x29757: ; 0x29757
+ ; .
+ text_jump UnknownText_0x1bc719
+ db "@"
+; 0x2975c
+
+TradeAnim_TakeCareOfText: ; 2975c
+ call WaitTop
+ hlcoord 0, 10
+ ld bc, 8 * SCREEN_WIDTH
+ ld a, " "
+ call ByteFill
+ call WaitBGMap
+ ld hl, UnknownText_0x2977a
+ call PrintText
+ call Function297c9
+ call TradeAnim_Next
+ ret
+; 2977a
+
+UnknownText_0x2977a: ; 0x2977a
+ ; Take good care of @ .
+ text_jump UnknownText_0x1bc71f
+ db "@"
+; 0x2977f
+
+TradeAnim_OTSendsText1: ; 2977f
+ ld hl, UnknownText_0x2979a
+ call PrintText
+ call Function297c9
+ ld hl, UnknownText_0x2979f
+ call PrintText
+ call Function297c9
+ ld c, 14
+ call DelayFrames
+ call TradeAnim_Next
+ ret
+; 2979a
+
+UnknownText_0x2979a: ; 0x2979a
+ ; For @ 's @ ,
+ text_jump UnknownText_0x1bc739
+ db "@"
+; 0x2979f
+
+UnknownText_0x2979f: ; 0x2979f
+ ; sends @ .
+ text_jump UnknownText_0x1bc74c
+ db "@"
+; 0x297a4
+
+TradeAnim_OTSendsText2: ; 297a4
+ ld hl, UnknownText_0x297bf
+ call PrintText
+ call Function297c9
+ ld hl, UnknownText_0x297c4
+ call PrintText
+ call Function297c9
+ ld c, 14
+ call DelayFrames
+ call TradeAnim_Next
+ ret
+; 297bf
+
+UnknownText_0x297bf: ; 0x297bf
+ ; will trade @ @
+ text_jump UnknownText_0x1bc75e
+ db "@"
+; 0x297c4
+
+UnknownText_0x297c4: ; 0x297c4
+ ; for @ 's @ .
+ text_jump UnknownText_0x1bc774
+ db "@"
+; 0x297c9
+
+Function297c9: ; 297c9
+ ld c, 80
+ call DelayFrames
+ ret
+; 297cf
+
+Function297cf: ; 297cf
+ hlcoord 0, 0
+ ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+ ld a, " "
+ call ByteFill
+ ret
+; 297db
+
+Function297db: ; 297db
+.asm_297db
+ push bc
+ push hl
+.asm_297dd
+ ld a, [de]
+ inc de
+ ld [hli], a
+ dec c
+ jr nz, .asm_297dd
+ pop hl
+ ld bc, SCREEN_WIDTH
+ add hl, bc
+ pop bc
+ dec b
+ jr nz, .asm_297db
+ ret
+; 297ed
+
+Function297ed: ; 297ed
+ ld a, [hSGB]
+ and a
+ ld a, $e4
+ jr z, .asm_297f6
+ ld a, $f0
+
+.asm_297f6
+ call Functioncf8
+ ld a, $e4
+ call DmgToCgbBGPals
+ ret
+; 297ff
+
+Function297ff: ; 297ff
+ push de
+ ld de, wLinkPlayer1Name
+ ld bc, NAME_LENGTH
+ call CopyBytes
+ pop hl
+ ld de, wLinkPlayer2Name
+ ld bc, NAME_LENGTH
+ call CopyBytes
+ ret
+; 29814
+
+Function29814: ; 29814
+ ld a, [hl]
+ ld [wc74c], a
+ ld a, [de]
+ ld [wc74d], a
+ ret
+; 2981d
+
+Function2981d: ; 2981d
+ ld a, [wcf65]
+ and $7
+ ret nz
+ ld a, [rBGP]
+ xor $3c
+ call DmgToCgbBGPals
+ ret
+; 2982b
+
+Function2982b: ; 2982b
+ call DelayFrame
+ ld de, TradeBallGFX
+ ld hl, VTiles0 tile $62
+ lb bc, BANK(TradeBallGFX), $6
+ call Request2bpp
+ ld de, TradePoofGFX
+ ld hl, VTiles0 tile $68
+ lb bc, BANK(TradePoofGFX), $c
+ call Request2bpp
+ ld de, TradeCableGFX
+ ld hl, VTiles0 tile $74
+ lb bc, BANK(TradeCableGFX), $4
+ call Request2bpp
+ xor a
+ ld hl, wc300
+ ld [hli], a
+ ld [hl], $62
+ ret
+; 2985a
+
+Function2985a: ; 2985a
+ call DelayFrame
+ ld e, $3
+ callab Function8e83f
+ ld de, TradeBubbleGFX
+ ld hl, VTiles0 tile $72
+ lb bc, BANK(TradeBubbleGFX), $4
+ call Request2bpp
+ xor a
+ ld hl, wc300
+ ld [hli], a
+ ld [hl], $62
+ ret
+; 29879
+
+TradeAnim_WaitAnim: ; 29879
+ ld hl, wcf64
+ ld a, [hl]
+ and a
+ jr z, .done
+ dec [hl]
+ ret
+
+.done
+ call TradeAnim_Next
+ ret
+; 29886
+
+TradeAnim_WaitAnim2: ; 29886
+ ld hl, wcf64
+ ld a, [hl]
+ and a
+ jr z, .done
+ dec [hl]
+ ret
+
+.done
+ call TradeAnim_Next
+ ret
+; 29893
+
+
+DebugTrade: ; 29893
+; This function is unreferenced.
+; It was meant for use in Japanese versions, so the
+; constant used for copy length was changed by accident.
+
+ ld hl, Unknown_298b5
+
+ ld a, [hli]
+ ld [wPlayerTrademonSpecies], a
+ ld de, wPlayerTrademonSenderName
+ ld c, 11 + 2 ; jp: 6 + 2
+.loop1
+ ld a, [hli]
+ ld [de], a
+ inc de
+ dec c
+ jr nz, .loop1
+
+ ld a, [hli]
+ ld [wOTTrademonSpecies], a
+ ld de, wOTTrademonSenderName
+ ld c, 11 + 2 ; jp: 6 + 2
+.loop2
+ ld a, [hli]
+ ld [de], a
+ inc de
+ dec c
+ jr nz, .loop2
+ ret
+; 298b5
+
+Unknown_298b5: ; 298b5
+ db VENUSAUR, "ゲーフり@@", $23, $01 ; GAME FREAK
+ db CHARIZARD, "クりーチャ@", $56, $04 ; Creatures Inc.
+; 298c7
+
+
+TradeGameBoyTilemap: ; 298c7
+; 6x8
+ db $31, $32, $32, $32, $32, $33
+ db $34, $35, $36, $36, $37, $38
+ db $34, $39, $3a, $3a, $3b, $38
+ db $3c, $3d, $3e, $3e, $3f, $40
+ db $41, $42, $43, $43, $44, $45
+ db $46, $47, $43, $48, $49, $4a
+ db $41, $43, $4b, $4c, $4d, $4e
+ db $4f, $50, $50, $50, $51, $52
+; 297f7
+
+Tilemap_298f7: ; 297f7
+; 12x3
+ db $43, $55, $56, $53, $53, $53, $53, $53, $53, $53, $53, $53
+ db $43, $57, $58, $54, $54, $54, $54, $54, $54, $54, $54, $54
+ db $43, $59, $5a, $43, $43, $43, $43, $43, $43, $43, $43, $43
+; 2991b
+
+TradeArrowGFX: INCBIN "gfx/trade/arrow.2bpp"
+TradeCableGFX: INCBIN "gfx/trade/cable.2bpp"
+TradeBubbleGFX: INCBIN "gfx/trade/bubble.2bpp"
+TradeGameBoyLZ: INCBIN "gfx/trade/game_boy.2bpp.lz"
+TradeBallGFX: INCBIN "gfx/trade/ball.2bpp"
+TradePoofGFX: INCBIN "gfx/trade/poof.2bpp"
diff --git a/engine/trainer_card.asm b/engine/trainer_card.asm
new file mode 100755
index 000000000..076e13fec
--- /dev/null
+++ b/engine/trainer_card.asm
@@ -0,0 +1,619 @@
+TrainerCard: ; 25105
+ ld a, [VramState]
+ push af
+ xor a
+ ld [VramState], a
+ ld hl, Options
+ ld a, [hl]
+ push af
+ set 4, [hl]
+ call Function2513b
+.asm_25117
+ call UpdateTime
+ call JoyTextDelay
+ ld a, [wJumptableIndex]
+ bit 7, a
+ jr nz, .asm_25132
+ ld a, [hJoyLast]
+ and B_BUTTON
+ jr nz, .asm_25132
+ call Function2518e
+ call DelayFrame
+ jr .asm_25117
+.asm_25132
+ pop af
+ ld [Options], a
+ pop af
+ ld [VramState], a
+ ret
+
+Function2513b: ; 2513b (9:513b)
+ call ClearBGPalettes
+ call ClearSprites
+ call ClearTileMap
+ call DisableLCD
+
+ callba Function8833e
+
+ ld hl, CardRightCornerGFX
+ ld de, VTiles2 tile $1c
+ ld bc, 1 tiles
+ ld a, BANK(CardRightCornerGFX)
+ call FarCopyBytes
+
+ ld hl, CardStatusGFX
+ ld de, VTiles2 tile $29
+ ld bc, $56 tiles
+ ld a, BANK(CardStatusGFX)
+ call FarCopyBytes
+
+ call Function25299
+
+ hlcoord 0, 8
+ ld d, $6
+ call Function253b0
+
+ call EnableLCD
+ call WaitBGMap
+ ld b, SCGB_15
+ call GetSGBLayout
+ call SetPalettes
+ call WaitBGMap
+ ld hl, wJumptableIndex
+ xor a
+rept 3
+ ld [hli], a
+endr
+ ld [hl], a
+ ret
+
+Function2518e: ; 2518e (9:518e)
+ ld a, [wJumptableIndex]
+ ld e, a
+ ld d, $0
+ ld hl, Jumptable_2519d
+rept 2
+ add hl, de
+endr
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp [hl]
+
+Jumptable_2519d: ; 2519d (9:519d)
+ dw Function251b6
+ dw Function251d7
+ dw Function251f4
+ dw Function25221
+ dw Function2524c
+ dw Function25279
+ dw Function251b0
+
+
+Function251ab: ; 251ab (9:51ab)
+ ld hl, wJumptableIndex
+ inc [hl]
+ ret
+
+Function251b0: ; 251b0 (9:51b0)
+ ld hl, wJumptableIndex
+ set 7, [hl]
+ ret
+
+Function251b6: ; 251b6 (9:51b6)
+ call ClearSprites
+ hlcoord 0, 8
+ ld d, $6
+ call Function253b0
+ call WaitBGMap
+ ld de, CardStatusGFX
+ ld hl, VTiles2 tile $29
+ lb bc, BANK(CardStatusGFX), $56
+ call Request2bpp
+ call Function2530a
+ call Function251ab
+ ret
+
+Function251d7: ; 251d7 (9:51d7)
+ call Function25415
+ ld hl, hJoyLast
+ ld a, [hl]
+ and D_RIGHT | A_BUTTON
+ jr nz, .pressed_right_a
+ ret
+
+.pressed_right_a
+ ld a, $2
+ ld [wJumptableIndex], a
+ ret
+; 251e9 (9:51e9)
+
+Function251e9: ; 251e9
+ ld a, [KantoBadges]
+ and a
+ ret z
+
+ ld a, $4
+ ld [wJumptableIndex], a
+ ret
+; 251f4
+
+Function251f4: ; 251f4 (9:51f4)
+ call ClearSprites
+ hlcoord 0, 8
+ ld d, $6
+ call Function253b0
+ call WaitBGMap
+ ld de, LeaderGFX
+ ld hl, VTiles2 tile $29
+ lb bc, BANK(LeaderGFX), $56
+ call Request2bpp
+ ld de, BadgeGFX
+ ld hl, VTiles0 tile $00
+ lb bc, BANK(BadgeGFX), $2c
+ call Request2bpp
+ call Function2536c
+ call Function251ab
+ ret
+
+Function25221: ; 25221 (9:5221)
+ ld hl, Unknown_254c9
+ call Function25438
+ ld hl, hJoyLast
+ ld a, [hl]
+ and A_BUTTON
+ jr nz, Function25246
+ ld a, [hl]
+ and D_LEFT
+ jr nz, .asm_25235
+ ret
+.asm_25235
+ ld a, $0
+ ld [wJumptableIndex], a
+ ret
+; 2523b (9:523b)
+
+Function2523b: ; 2523b
+ ld a, [KantoBadges]
+ and a
+ ret z
+ ld a, $4
+ ld [wJumptableIndex], a
+ ret
+; 25246
+
+Function25246: ; 25246
+ ld a, $6
+ ld [wJumptableIndex], a
+ ret
+
+Function2524c: ; 2524c (9:524c)
+ call ClearSprites
+ hlcoord 0, 8
+ ld d, $6
+ call Function253b0
+ call WaitBGMap
+ ld de, LeaderGFX2
+ ld hl, VTiles2 tile $29
+ lb bc, BANK(LeaderGFX2), $56
+ call Request2bpp
+ ld de, BadgeGFX2
+ ld hl, VTiles0 tile $00
+ lb bc, BANK(BadgeGFX2), $2c
+ call Request2bpp
+ call Function2536c
+ call Function251ab
+ ret
+
+Function25279: ; 25279 (9:5279)
+ ld hl, Unknown_254c9
+ call Function25438
+ ld hl, hJoyLast
+ ld a, [hl]
+ and D_LEFT
+ jr nz, .left
+ ld a, [hl]
+ and D_RIGHT
+ jr nz, .right
+ ret
+
+.left
+ ld a, $2
+ ld [wJumptableIndex], a
+ ret
+
+.right
+ ld a, $0
+ ld [wJumptableIndex], a
+ ret
+
+Function25299: ; 25299 (9:5299)
+ hlcoord 0, 0
+ ld d, $5
+ call Function253b0
+ hlcoord 2, 2
+ ld de, String_252ec
+ call PlaceString
+ hlcoord 2, 4
+ ld de, Tilemap_252f9
+ call Function253a8
+ hlcoord 7, 2
+ ld de, PlayerName
+ call PlaceString
+ hlcoord 5, 4
+ ld de, PlayerID
+ lb bc, PRINTNUM_LEADINGZEROS | 2, 5
+ call PrintNum
+ hlcoord 7, 6
+ ld de, Money
+ lb bc, PRINTNUM_MONEY | 3, 6
+ call PrintNum
+ hlcoord 1, 3
+ ld de, Tilemap_252fc
+ call Function253a8
+ hlcoord 14, 1
+ lb bc, 5, 7
+ xor a
+ ld [hFillBox], a
+ predef FillBox
+ ret
+; 252ec (9:52ec)
+
+String_252ec: ; 252ec
+ db "NAME/"
+ next ""
+ next "MONEY@"
+
+Tilemap_252f9: ; 252f9
+ db $27, $28, $ff ; ID NO
+
+Tilemap_252fc: ; 252fc
+ db $25, $25, $25, $25, $25, $25, $25, $25, $25, $25, $25, $25, $26, $ff ; ____________>
+; 2530a
+
+Function2530a: ; 2530a (9:530a)
+ hlcoord 2, 10
+ ld de, String_2534c
+ call PlaceString
+ hlcoord 10, 15
+ ld de, String_2535c
+ call PlaceString
+ ld hl, PokedexCaught
+ ld b, $20
+ call CountSetBits
+ ld de, wd265
+ hlcoord 15, 10
+ lb bc, 1, 3
+ call PrintNum
+ call Function25415
+ hlcoord 2, 8
+ ld de, Tilemap_25366
+ call Function253a8
+ ld a, [StatusFlags] ; pokedex
+ bit 0, a
+ ret nz
+ hlcoord 1, 9
+ lb bc, 2, 17
+ call ClearBox
+ ret
+; 2534c (9:534c)
+
+String_2534c: ; 2534c
+ db "#DEX"
+ next "PLAY TIME"
+ db "@"
+
+String_2535b: ; 2535b
+ db "@"
+
+String_2535c: ; 2535c
+ db " BADGES▶@"
+
+Tilemap_25366: ; 25366
+ db $29, $2a, $2b, $2c, $2d, $ff
+; 2536c
+
+Function2536c: ; 2536c (9:536c)
+ hlcoord 2, 8
+ ld de, Tilemap_253a2
+ call Function253a8
+ hlcoord 2, 10
+ ld a, $29
+ ld c, $4
+.asm_2537c
+ call Function253f4
+rept 4
+ inc hl
+endr
+ dec c
+ jr nz, .asm_2537c
+ hlcoord 2, 13
+ ld a, $51
+ ld c, $4
+.asm_2538d
+ call Function253f4
+rept 4
+ inc hl
+endr
+ dec c
+ jr nz, .asm_2538d
+ xor a
+ ld [wcf64], a
+ ld hl, Unknown_254c9
+ call Function25448
+ ret
+; 253a2 (9:53a2)
+
+Tilemap_253a2: ; 253a2
+ db $79, $7a, $7b, $7c, $7d, $ff ; "BADGES"
+; 253a8
+
+Function253a8: ; 253a8 (9:53a8)
+ ld a, [de]
+ cp $ff
+ ret z
+ ld [hli], a
+ inc de
+ jr Function253a8
+
+Function253b0: ; 253b0 (9:53b0)
+ ld e, $14
+.asm_253b2
+ ld a, $23
+ ld [hli], a
+ dec e
+ jr nz, .asm_253b2
+ ld a, $23
+ ld [hli], a
+ ld e, $11
+ ld a, $7f
+.asm_253bf
+ ld [hli], a
+ dec e
+ jr nz, .asm_253bf
+ ld a, $1c
+ ld [hli], a
+ ld a, $23
+ ld [hli], a
+.asm_253c9
+ ld a, $23
+ ld [hli], a
+ ld e, $12
+ ld a, $7f
+.asm_253d0
+ ld [hli], a
+ dec e
+ jr nz, .asm_253d0
+ ld a, $23
+ ld [hli], a
+ dec d
+ jr nz, .asm_253c9
+ ld a, $23
+ ld [hli], a
+ ld a, $24
+ ld [hli], a
+ ld e, $11
+ ld a, $7f
+.asm_253e4
+ ld [hli], a
+ dec e
+ jr nz, .asm_253e4
+ ld a, $23
+ ld [hli], a
+ ld e, $14
+.asm_253ed
+ ld a, $23
+ ld [hli], a
+ dec e
+ jr nz, .asm_253ed
+ ret
+
+Function253f4: ; 253f4 (9:53f4)
+ push de
+ push hl
+ ld [hli], a
+ inc a
+ ld [hli], a
+ inc a
+ ld [hli], a
+ inc a
+ ld [hli], a
+ inc a
+ ld de, $11
+ add hl, de
+ ld [hli], a
+ inc a
+ ld [hli], a
+ inc a
+ ld [hli], a
+ inc a
+ ld de, $11
+ add hl, de
+ ld [hli], a
+ inc a
+ ld [hli], a
+ inc a
+ ld [hli], a
+ inc a
+ pop hl
+ pop de
+ ret
+
+Function25415: ; 25415 (9:5415)
+ hlcoord 11, 12
+ ld de, GameTimeHours
+ lb bc, 2, 4
+ call PrintNum
+ inc hl
+ ld de, GameTimeMinutes
+ lb bc, PRINTNUM_LEADINGZEROS | 1, 2
+ call PrintNum
+ ld a, [hVBlankCounter]
+ and $1f
+ ret nz
+ hlcoord 15, 12
+ ld a, [hl]
+ xor $51
+ ld [hl], a
+ ret
+
+Function25438: ; 25438 (9:5438)
+ ld a, [hVBlankCounter]
+ and $7
+ ret nz
+ ld a, [wcf64]
+ inc a
+ and $7
+ ld [wcf64], a
+ jr Function25448
+
+Function25448: ; 25448 (9:5448)
+; copy flag array pointer
+ ld a, [hli]
+ ld e, a
+ ld a, [hli]
+; get flag array
+ ld d, a
+ ld a, [de]
+ ld c, a
+ ld de, Sprites
+ ld b, 8
+.loop
+ srl c
+ push bc
+ jr nc, .skip_badge
+ push hl
+ ld a, [hli] ; y
+ ld b, a
+ ld a, [hli] ; x
+ ld c, a
+ ld a, [hli] ; pal
+ ld [wcf66], a
+ ld a, [wcf64]
+ add l
+ ld l, a
+ ld a, 0
+ adc h
+ ld h, a
+ ld a, [hl]
+ ld [wcf65], a
+ call Function2547b
+ pop hl
+.skip_badge
+ ld bc, $b ; 3 + 2 * 4
+ add hl, bc
+ pop bc
+ dec b
+ jr nz, .loop
+ ret
+
+Function2547b: ; 2547b (9:547b)
+ ld a, [wcf65]
+ and $80
+ jr nz, .xflip
+ ld hl, .facing1
+ jr .loop
+.xflip
+ ld hl, .facing2
+.loop
+ ld a, [hli]
+ cp $ff
+ ret z
+ add b
+ ld [de], a
+ inc de
+
+ ld a, [hli]
+ add c
+ ld [de], a
+ inc de
+
+ ld a, [wcf65]
+ and $7f
+ add [hl]
+ ld [de], a
+ inc hl
+ inc de
+
+ ld a, [wcf66]
+ add [hl]
+ ld [de], a
+ inc hl
+ inc de
+ jr .loop
+; 254a7 (9:54a7)
+
+.facing1: ; 254a7
+ ; y, x, tile, OAM attributes
+ db 0, 0, 0, 0
+ db 0, 8, 1, 0
+ db 8, 0, 2, 0
+ db 8, 8, 3, 0
+ db -1
+
+.facing2: ; 254b8
+ db 0, 0, 1, X_FLIP
+ db 0, 8, 0, X_FLIP
+ db 8, 0, 3, X_FLIP
+ db 8, 8, 2, X_FLIP
+ db -1
+
+Unknown_254c9: ; 254c9
+; Template OAM data for each badge on the trainer card.
+; Format:
+ ; y, x, palette
+ ; cycle 1: face tile, in1 tile, in2 tile, in3 tile
+ ; cycle 2: face tile, in1 tile, in2 tile, in3 tile
+
+ dw JohtoBadges
+
+ ; Zephyrbadge
+ db $68, $18, 0
+ db $00, $20, $24, $20 | $80
+ db $00, $20, $24, $20 | $80
+
+ ; Hivebadge
+ db $68, $38, 0
+ db $04, $20, $24, $20 | $80
+ db $04, $20, $24, $20 | $80
+
+ ; Plainbadge
+ db $68, $58, 0
+ db $08, $20, $24, $20 | $80
+ db $08, $20, $24, $20 | $80
+
+ ; Fogbadge
+ db $68, $78, 0
+ db $0c, $20, $24, $20 | $80
+ db $0c, $20, $24, $20 | $80
+
+ ; Mineralbadge
+ db $80, $38, 0
+ db $10, $20, $24, $20 | $80
+ db $10, $20, $24, $20 | $80
+
+ ; Stormbadge
+ db $80, $18, 0
+ db $14, $20, $24, $20 | $80
+ db $14, $20, $24, $20 | $80
+
+ ; Glacierbadge
+ db $80, $58, 0
+ db $18, $20, $24, $20 | $80
+ db $18, $20, $24, $20 | $80
+
+ ; Risingbadge
+ ; X-flips on alternate cycles.
+ db $80, $78, 0
+ db $1c, $20, $24, $20 | $80
+ db $1c | $80, $20, $24, $20 | $80
+; 25523
+
+CardStatusGFX: INCBIN "gfx/misc/card_status.2bpp"
+
+LeaderGFX: INCBIN "gfx/misc/leaders.w24.2bpp"
+LeaderGFX2: INCBIN "gfx/misc/leaders.w24.2bpp"
+BadgeGFX: INCBIN "gfx/misc/badges.2bpp"
+BadgeGFX2: INCBIN "gfx/misc/badges.2bpp"
+
+CardRightCornerGFX: INCBIN "gfx/misc/card_right_corner.2bpp"
diff --git a/engine/variables.asm b/engine/variables.asm
new file mode 100755
index 000000000..a115e2c37
--- /dev/null
+++ b/engine/variables.asm
@@ -0,0 +1,150 @@
+_GetVarAction:: ; 80648 (20:4648)
+ ld a, c
+ cp NUM_VARS
+ jr c, .valid
+ xor a
+.valid
+ ld c, a
+ ld b, 0
+ ld hl, .VarActionTable
+rept 3
+ add hl, bc
+endr
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ inc hl
+ ld b, [hl]
+ ld a, b
+ and RETVAR_EXECUTE
+ jr nz, .call
+ ld a, b
+ and RETVAR_ADDR_DE
+ ret nz
+ ld a, [de]
+ jr .loadstringbuffer2
+
+.call
+ call _de_
+ ret
+
+.loadstringbuffer2: ; 8066c (20:466c)
+ ld de, StringBuffer2
+ ld [de], a
+ ret
+; 80671 (20:4671)
+
+.VarActionTable: ; 80671
+; $00: copy [de] to StringBuffer2
+; $40: return address in de
+; $80: call function
+ dwb StringBuffer2, RETVAR_STRBUF2
+ dwb PartyCount, RETVAR_STRBUF2
+ dwb .BattleResult, RETVAR_EXECUTE
+ dwb BattleType, RETVAR_ADDR_DE
+ dwb TimeOfDay, RETVAR_STRBUF2
+ dwb .CountCaughtMons, RETVAR_EXECUTE
+ dwb .CountSeenMons, RETVAR_EXECUTE
+ dwb .CountBadges, RETVAR_EXECUTE
+ dwb PlayerState, RETVAR_ADDR_DE
+ dwb .PlayerFacing, RETVAR_EXECUTE
+ dwb hHours, RETVAR_STRBUF2
+ dwb .DayOfWeek, RETVAR_EXECUTE
+ dwb MapGroup, RETVAR_STRBUF2
+ dwb MapNumber, RETVAR_STRBUF2
+ dwb .UnownCaught, RETVAR_EXECUTE
+ dwb wPermission, RETVAR_STRBUF2
+ dwb .BoxFreeSpace, RETVAR_EXECUTE
+ dwb wBugContestMinsRemaining, RETVAR_STRBUF2
+ dwb XCoord, RETVAR_STRBUF2
+ dwb YCoord, RETVAR_STRBUF2
+ dwb wSpecialPhoneCallID, RETVAR_STRBUF2
+ dwb wcf64, RETVAR_STRBUF2
+ dwb wKurtApricornQuantity, RETVAR_STRBUF2
+ dwb wCurrentCaller, RETVAR_ADDR_DE
+ dwb wBlueCardBalance, RETVAR_ADDR_DE
+ dwb wBuenasPassword, RETVAR_ADDR_DE
+ dwb wdc58, RETVAR_STRBUF2
+ dwb NULL, RETVAR_STRBUF2
+; 806c5
+
+.CountCaughtMons: ; 806c5
+; Caught mons.
+ ld hl, PokedexCaught
+ ld b, EndPokedexCaught - PokedexCaught
+ call CountSetBits
+ ld a, [wd265]
+ jp .loadstringbuffer2
+; 806d3
+
+.CountSeenMons: ; 806d3
+; Seen mons.
+ ld hl, PokedexSeen
+ ld b, EndPokedexSeen - PokedexSeen
+ call CountSetBits
+ ld a, [wd265]
+ jp .loadstringbuffer2
+; 806e1
+
+.CountBadges: ; 806e1
+; Number of owned badges.
+ ld hl, Badges
+ ld b, 2
+ call CountSetBits
+ ld a, [wd265]
+ jp .loadstringbuffer2
+; 806ef
+
+.PlayerFacing: ; 806ef
+; The direction the player is facing.
+ ld a, [PlayerDirection]
+ and $c
+ rrca
+ rrca
+ jp .loadstringbuffer2
+; 806f9
+
+.DayOfWeek: ; 806f9
+; The day of the week.
+ call GetWeekday
+ jp .loadstringbuffer2
+; 806ff
+
+.UnownCaught: ; 806ff
+; Number of unique Unown caught.
+ call .count
+ ld a, b
+ jp .loadstringbuffer2
+
+.count
+ ld hl, UnownDex
+ ld b, 0
+.loop
+ ld a, [hli]
+ and a
+ ret z
+ inc b
+ ld a, b
+ cp 26
+ jr c, .loop
+ ret
+; 80715
+
+.BoxFreeSpace: ; 80715
+; Remaining slots in the current box.
+ ld a, BANK(sBoxCount)
+ call GetSRAMBank
+ ld hl, sBoxCount
+ ld a, MONS_PER_BOX
+ sub [hl]
+ ld b, a
+ call CloseSRAM
+ ld a, b
+ jp .loadstringbuffer2
+; 80728
+
+.BattleResult: ; 80728
+ ld a, [wBattleResult]
+ and $3f
+ jp .loadstringbuffer2
+; 80730
diff --git a/engine/wildmons.asm b/engine/wildmons.asm
new file mode 100755
index 000000000..6f39e19dc
--- /dev/null
+++ b/engine/wildmons.asm
@@ -0,0 +1,1057 @@
+LoadWildMonData: ; 29ff8
+ call _GrassWildmonLookup
+ jr c, .copy
+ ld hl, wd25a
+ xor a
+ ld [hli], a
+ ld [hli], a
+ ld [hl], a
+ jr .done_copy
+.copy
+ inc hl
+ inc hl
+ ld de, wd25a
+ ld bc, $3
+ call CopyBytes
+.done_copy
+ call _WaterWildmonLookup
+ ld a, $0
+ jr nc, .no_copy
+ inc hl
+ inc hl
+ ld a, [hl]
+.no_copy
+ ld [wd25d], a
+ ret
+
+Function2a01f: ; 2a01f
+ hlcoord 0, 0
+ ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+ xor a
+ call ByteFill
+ ld a, e
+ and a
+ jr nz, .kanto
+ decoord 0, 0
+ ld hl, JohtoGrassWildMons
+ call Function2a052
+ ld hl, JohtoWaterWildMons
+ call Function2a06e
+ call Function2a0b7
+ call Function2a0cf
+ ret
+
+.kanto
+ decoord 0, 0
+ ld hl, KantoGrassWildMons
+ call Function2a052
+ ld hl, KantoWaterWildMons
+ jp Function2a06e
+; 2a052
+
+Function2a052: ; 2a052
+.loop
+ ld a, [hl]
+ cp $ff
+ ret z
+ push hl
+ ld a, [hli]
+ ld b, a
+ ld a, [hli]
+ ld c, a
+rept 3
+ inc hl
+endr
+ ld a, $15
+ call Function2a088
+ jr nc, .next
+ ld [de], a
+ inc de
+
+.next
+ pop hl
+ ld bc, $2f
+ add hl, bc
+ jr .loop
+; 2a06e
+
+Function2a06e: ; 2a06e
+.loop
+ ld a, [hl]
+ cp $ff
+ ret z
+ push hl
+ ld a, [hli]
+ ld b, a
+ ld a, [hli]
+ ld c, a
+ inc hl
+ ld a, $3
+ call Function2a088
+ jr nc, .next
+ ld [de], a
+ inc de
+
+.next
+ pop hl
+ ld bc, 9
+ add hl, bc
+ jr .loop
+; 2a088
+
+Function2a088: ; 2a088
+ inc hl
+.loop
+ push af
+ ld a, [wd265]
+ cp [hl]
+ jr z, .found
+rept 2
+ inc hl
+endr
+ pop af
+ dec a
+ jr nz, .loop
+ and a
+ ret
+
+.found
+ pop af
+ jp Function2a09c
+; 2a09c
+
+Function2a09c: ; 2a09c
+ push de
+ call GetWorldMapLocation
+ ld c, a
+ hlcoord 0, 0
+ ld de, SCREEN_WIDTH * SCREEN_HEIGHT
+.loop
+ ld a, [hli]
+ cp c
+ jr z, .found
+ dec de
+ ld a, e
+ or d
+ jr nz, .loop
+ ld a, c
+ pop de
+ scf
+ ret
+
+.found
+ pop de
+ and a
+ ret
+; 2a0b7
+
+Function2a0b7: ; 2a0b7
+ ld a, [wRoamMon1Species]
+ ld b, a
+ ld a, [wd265]
+ cp b
+ ret nz
+ ld a, [wRoamMon1MapGroup]
+ ld b, a
+ ld a, [wRoamMon1MapNumber]
+ ld c, a
+ call Function2a09c
+ ret nc
+ ld [de], a
+ inc de
+ ret
+; 2a0cf
+
+Function2a0cf: ; 2a0cf
+ ld a, [wRoamMon2Species]
+ ld b, a
+ ld a, [wd265]
+ cp b
+ ret nz
+ ld a, [wRoamMon2MapGroup]
+ ld b, a
+ ld a, [wRoamMon2MapNumber]
+ ld c, a
+ call Function2a09c
+ ret nc
+ ld [de], a
+ inc de
+ ret
+; 2a0e7
+
+TryWildEncounter:: ; 2a0e7
+; Try to trigger a wild encounter.
+ call .EncounterRate
+ jr nc, .no_battle
+ call ChooseWildEncounter
+ jr nz, .no_battle
+ call CheckRepelEffect
+ jr nc, .no_battle
+ xor a
+ ret
+
+.no_battle
+ xor a ; BATTLETYPE_NORMAL
+ ld [TempWildMonSpecies], a
+ ld [BattleType], a
+ ld a, 1
+ and a
+ ret
+; 2a103
+
+.EncounterRate: ; 2a103
+ call GetMapEncounterRate
+ call ApplyMusicEffectOnEncounterRate
+ call ApplyCleanseTagEffectOnEncounterRate
+ call Random
+ cp b
+ ret
+; 2a111
+
+GetMapEncounterRate: ; 2a111
+ ld hl, wd25a
+ call CheckOnWater
+ ld a, 3
+ jr z, .ok
+ ld a, [TimeOfDay]
+.ok
+ ld c, a
+ ld b, 0
+ add hl, bc
+ ld b, [hl]
+ ret
+; 2a124
+
+ApplyMusicEffectOnEncounterRate:: ; 2a124
+; Pokemon March and Ruins of Alph signal double encounter rate.
+; Pokemon Lullaby halves encounter rate.
+ ld a, [wMapMusic]
+ cp MUSIC_POKEMON_MARCH
+ jr z, .double
+ cp MUSIC_RUINS_OF_ALPH_RADIO
+ jr z, .double
+ cp MUSIC_POKEMON_LULLABY
+ ret nz
+ srl b
+ ret
+
+.double
+ sla b
+ ret
+; 2a138
+
+ApplyCleanseTagEffectOnEncounterRate:: ; 2a138
+; Cleanse Tag halves encounter rate.
+ ld hl, PartyMon1Item
+ ld de, PARTYMON_STRUCT_LENGTH
+ ld a, [PartyCount]
+ ld c, a
+.loop
+ ld a, [hl]
+ cp CLEANSE_TAG
+ jr z, .cleansetag
+ add hl, de
+ dec c
+ jr nz, .loop
+ ret
+
+.cleansetag
+ srl b
+ ret
+; 2a14f
+
+ChooseWildEncounter: ; 2a14f
+ call LoadWildMonDataPointer
+ jp nc, .nowildbattle
+ call CheckEncounterRoamMon
+ jp c, .startwildbattle
+
+rept 3
+ inc hl
+endr
+ call CheckOnWater
+ ld de, .WaterMonTable
+ jr z, .watermon
+rept 2
+ inc hl
+endr
+ ld a, [TimeOfDay]
+ ld bc, $e
+ call AddNTimes
+ ld de, .GrassMonTable
+
+.watermon
+; hl contains the pointer to the wild mon data, let's save that to the stack
+ push hl
+.randomloop
+ call Random
+ cp 100
+ jr nc, .randomloop
+ inc a ; 1 <= a <= 100
+ ld b, a
+ ld h, d
+ ld l, e
+; This next loop chooses which mon to load up.
+.prob_bracket_loop
+ ld a, [hli]
+ cp b
+ jr nc, .got_it
+ inc hl
+ jr .prob_bracket_loop
+
+.got_it
+ ld c, [hl]
+ ld b, 0
+ pop hl
+ add hl, bc ; this selects our mon
+ ld a, [hli]
+ ld b, a
+; If the Pokemon is encountered by surfing, we need to give the levels some variety.
+ call CheckOnWater
+ jr nz, .ok
+; Check if we buff the wild mon, and by how much.
+ call Random
+ cp 35 percent
+ jr c, .ok
+ inc b
+ cp 65 percent
+ jr c, .ok
+ inc b
+ cp 85 percent
+ jr c, .ok
+ inc b
+ cp 95 percent
+ jr c, .ok
+ inc b
+; Store the level
+.ok
+ ld a, b
+ ld [CurPartyLevel], a
+ ld b, [hl]
+ ; ld a, b
+ call ValidateTempWildMonSpecies
+ jr c, .nowildbattle
+
+ ld a, b ; This is in the wrong place.
+ cp UNOWN
+ jr nz, .done
+
+ ld a, [UnlockedUnowns]
+ and a
+ jr z, .nowildbattle
+
+.done
+ jr .loadwildmon
+
+.nowildbattle
+ ld a, 1
+ and a
+ ret
+
+.loadwildmon
+ ld a, b
+ ld [TempWildMonSpecies], a
+
+.startwildbattle
+ xor a
+ ret
+; 2a1cb
+
+.GrassMonTable: ; 2a1cb
+ db 30, $0 ; 30% chance
+ db 60, $2 ; 30% chance
+ db 80, $4 ; 20% chance
+ db 90, $6 ; 10% chance
+ db 95, $8 ; 5% chance
+ db 99, $a ; 4% chance
+ db 100, $c ; 1% chance
+; 2a1d9
+
+.WaterMonTable: ; 2a1d9
+ db 60, $0 ; 60% chance
+ db 90, $2 ; 30% chance
+ db 100, $4 ; 10% chance
+; 2a1df
+
+CheckRepelEffect:: ; 2a1df
+; If there is no active Repel, there's no need to be here.
+ ld a, [wRepelEffect]
+ and a
+ jr z, .encounter
+; Get the first Pokemon in your party that isn't fainted.
+ ld hl, PartyMon1HP
+ ld bc, PARTYMON_STRUCT_LENGTH - 1
+.loop
+ ld a, [hli]
+ or [hl]
+ jr nz, .ok
+ add hl, bc
+ jr .loop
+
+.ok
+; to PartyMonLevel
+rept 4
+ dec hl
+endr
+
+ ld a, [CurPartyLevel]
+ cp [hl]
+ jr nc, .encounter
+ and a
+ ret
+
+.encounter
+ scf
+ ret
+; 2a200
+
+LoadWildMonDataPointer: ; 2a200
+ call CheckOnWater
+ jr z, _WaterWildmonLookup
+
+_GrassWildmonLookup: ; 2a205
+ ld hl, SwarmGrassWildMons
+ ld bc, GRASS_WILDDATA_LENGTH
+ call _SwarmWildmonCheck
+ ret c
+ ld hl, JohtoGrassWildMons
+ ld de, KantoGrassWildMons
+ call _JohtoWildmonCheck
+ ld bc, GRASS_WILDDATA_LENGTH
+ jr _NormalWildmonOK
+
+_WaterWildmonLookup: ; 2a21d
+ ld hl, SwarmWaterWildMons
+ ld bc, WATER_WILDDATA_LENGTH
+ call _SwarmWildmonCheck
+ ret c
+ ld hl, JohtoWaterWildMons
+ ld de, KantoWaterWildMons
+ call _JohtoWildmonCheck
+ ld bc, WATER_WILDDATA_LENGTH
+ jr _NormalWildmonOK
+
+_JohtoWildmonCheck
+ call IsInJohto
+ and a
+ ret z
+ ld h, d
+ ld l, e
+ ret
+
+_SwarmWildmonCheck
+ call CopyCurrMapDE
+ push hl
+ ld hl, SwarmFlags
+ bit 2, [hl]
+ pop hl
+ jr z, .CheckYanma
+ ld a, [wdfcc]
+ cp d
+ jr nz, .CheckYanma
+ ld a, [wdfcd]
+ cp e
+ jr nz, .CheckYanma
+ call LookUpWildmonsForMapDE
+ jr nc, _NoSwarmWildmon
+ scf
+ ret
+
+.CheckYanma
+ push hl
+ ld hl, SwarmFlags
+ bit 3, [hl]
+ pop hl
+ jr z, _NoSwarmWildmon
+ ld a, [wdc5a]
+ cp d
+ jr nz, _NoSwarmWildmon
+ ld a, [wdc5b]
+ cp e
+ jr nz, _NoSwarmWildmon
+ call LookUpWildmonsForMapDE
+ jr nc, _NoSwarmWildmon
+ scf
+ ret
+
+_NoSwarmWildmon
+ and a
+ ret
+
+_NormalWildmonOK
+ call CopyCurrMapDE
+ jr LookUpWildmonsForMapDE
+; 2a27f
+
+CopyCurrMapDE: ; 2a27f
+ ld a, [MapGroup]
+ ld d, a
+ ld a, [MapNumber]
+ ld e, a
+ ret
+; 2a288
+
+LookUpWildmonsForMapDE: ; 2a288
+ push hl
+ ld a, [hl]
+ inc a
+ jr z, .nope
+ ld a, d
+ cp [hl]
+ jr nz, .next
+ inc hl
+ ld a, e
+ cp [hl]
+ jr z, .yup
+
+.next
+ pop hl
+ add hl, bc
+ jr LookUpWildmonsForMapDE
+
+.nope
+ pop hl
+ and a
+ ret
+
+.yup
+ pop hl
+ scf
+ ret
+; 2a2a0
+
+
+InitRoamMons: ; 2a2a0
+; initialize wRoamMon structs
+
+; species
+ ld a, RAIKOU
+ ld [wRoamMon1Species], a
+ ld a, ENTEI
+ ld [wRoamMon2Species], a
+; ld a, SUICUNE
+; ld [wRoamMon3Species], a
+
+; level
+ ld a, 40
+ ld [wRoamMon1Level], a
+ ld [wRoamMon2Level], a
+; ld [wRoamMon3Level], a
+
+; raikou starting map
+ ld a, GROUP_ROUTE_42
+ ld [wRoamMon1MapGroup], a
+ ld a, MAP_ROUTE_42
+ ld [wRoamMon1MapNumber], a
+
+; entei starting map
+ ld a, GROUP_ROUTE_37
+ ld [wRoamMon2MapGroup], a
+ ld a, MAP_ROUTE_37
+ ld [wRoamMon2MapNumber], a
+
+; suicune starting map
+; ld a, GROUP_ROUTE_38
+; ld [wRoamMon3MapGroup], a
+; ld a, MAP_ROUTE_38
+; ld [wRoamMon3MapNumber], a
+
+; hp
+ xor a ; generate new stats
+ ld [wRoamMon1HP], a
+ ld [wRoamMon2HP], a
+; ld [wRoamMon3HP], a
+
+ ret
+; 2a2ce
+
+
+CheckEncounterRoamMon: ; 2a2ce
+ push hl
+; Don't trigger an encounter if we're on water.
+ call CheckOnWater
+ jr z, .DontEncounterRoamMon
+; Load the current map group and number to de
+ call CopyCurrMapDE
+; Randomly select a beast.
+ call Random
+ cp 100 ; 25/64 chance
+ jr nc, .DontEncounterRoamMon
+ and %00000011 ; Of that, a 3/4 chance. Running total: 75/256, or around 29.3%.
+ jr z, .DontEncounterRoamMon
+ dec a ; 1/3 chance that it's Entei, 1/3 chance that it's Raikou
+; Compare its current location with yours
+ ld hl, wRoamMon1MapGroup
+ ld c, a
+ ld b, 0
+ ld a, 7 ; length of the RoamMon struct
+ call AddNTimes
+ ld a, d
+ cp [hl]
+ jr nz, .DontEncounterRoamMon
+ inc hl
+ ld a, e
+ cp [hl]
+ jr nz, .DontEncounterRoamMon
+; We've decided to take on a beast, so stage its information for battle.
+rept 3
+ dec hl
+endr
+ ld a, [hli]
+ ld [TempWildMonSpecies], a
+ ld a, [hl]
+ ld [CurPartyLevel], a
+ ld a, BATTLETYPE_ROAMING
+ ld [BattleType], a
+
+ pop hl
+ scf
+ ret
+
+.DontEncounterRoamMon
+ pop hl
+ and a
+ ret
+; 2a30d
+
+
+UpdateRoamMons: ; 2a30d
+ ld a, [wRoamMon1MapGroup]
+ cp GROUP_N_A
+ jr z, .SkipRaikou
+ ld b, a
+ ld a, [wRoamMon1MapNumber]
+ ld c, a
+ call .Update
+ ld a, b
+ ld [wRoamMon1MapGroup], a
+ ld a, c
+ ld [wRoamMon1MapNumber], a
+
+.SkipRaikou
+ ld a, [wRoamMon2MapGroup]
+ cp GROUP_N_A
+ jr z, .SkipEntei
+ ld b, a
+ ld a, [wRoamMon2MapNumber]
+ ld c, a
+ call .Update
+ ld a, b
+ ld [wRoamMon2MapGroup], a
+ ld a, c
+ ld [wRoamMon2MapNumber], a
+
+.SkipEntei
+ ld a, [wRoamMon3MapGroup]
+ cp GROUP_N_A
+ jr z, .SkipSuicune
+ ld b, a
+ ld a, [wRoamMon3MapNumber]
+ ld c, a
+ call .Update
+ ld a, b
+ ld [wRoamMon3MapGroup], a
+ ld a, c
+ ld [wRoamMon3MapNumber], a
+
+.SkipSuicune
+ jp _BackUpMapIndices
+; 2a355
+
+
+.Update: ; 2a355
+ ld hl, RoamMaps
+.loop
+; Are we at the end of the table?
+ ld a, [hl]
+ cp -1
+ ret z
+; Is this the correct entry?
+ ld a, b
+ cp [hl]
+ jr nz, .next
+ inc hl
+ ld a, c
+ cp [hl]
+ jr z, .yes
+; We don't have the correct entry yet, so let's continue. A 0 terminates each entry.
+.next
+ ld a, [hli]
+ and a
+ jr nz, .next
+ jr .loop
+
+; We have the correct entry now, so let's choose a random map from it.
+.yes
+ inc hl
+ ld d, h
+ ld e, l
+.update_loop
+ ld h, d
+ ld l, e
+; Choose which map to warp to.
+ call Random
+ and $1f ; 1/8n chance it moves to a completely random map, where n is the number of roaming connections from the current map.
+ jr z, JumpRoamMon
+ and 3
+ cp [hl]
+ jr nc, .update_loop ; invalid index, try again
+ inc hl
+ ld c, a
+ ld b, $0
+rept 2
+ add hl, bc
+endr
+ ld a, [wdfe7]
+ cp [hl]
+ jr nz, .done
+ inc hl
+ ld a, [wdfe6]
+ cp [hl]
+ jr z, .update_loop
+ dec hl
+
+.done
+ ld a, [hli]
+ ld b, a
+ ld c, [hl]
+ ret
+
+JumpRoamMons: ; 2a394
+ ld a, [wRoamMon1MapGroup]
+ cp GROUP_N_A
+ jr z, .SkipRaikou
+ call JumpRoamMon
+ ld a, b
+ ld [wRoamMon1MapGroup], a
+ ld a, c
+ ld [wRoamMon1MapNumber], a
+.SkipRaikou
+
+ ld a, [wRoamMon2MapGroup]
+ cp GROUP_N_A
+ jr z, .SkipEntei
+ call JumpRoamMon
+ ld a, b
+ ld [wRoamMon2MapGroup], a
+ ld a, c
+ ld [wRoamMon2MapNumber], a
+.SkipEntei
+
+ ld a, [wRoamMon3MapGroup]
+ cp GROUP_N_A
+ jr z, .SkipSuicune
+ call JumpRoamMon
+ ld a, b
+ ld [wRoamMon3MapGroup], a
+ ld a, c
+ ld [wRoamMon3MapNumber], a
+.SkipSuicune
+
+ jp _BackUpMapIndices
+
+JumpRoamMon: ; 2a3cd
+.loop
+ ld hl, RoamMaps
+.innerloop1 ; This loop is completely unnecessary.
+ call Random ; Choose a random number
+ and $f ; Take the lower nybble only. This gives a number between 0 and 15.
+ cp $10 ; If the number is greater than or equal to 16, loop back and try again.
+ jr nc, .innerloop1 ; I'm sure you can guess why this check is bogus.
+ inc a
+ ld b, a
+.innerloop2 ; Loop to get hl to the address of the chosen roam map.
+ dec b
+ jr z, .ok
+.innerloop3 ; Loop to skip the current roam map, which is terminated by a 0.
+ ld a, [hli]
+ and a
+ jr nz, .innerloop3
+ jr .innerloop2
+; Check to see if the selected map is the one the player is currently in. If so, try again.
+.ok
+ ld a, [MapGroup]
+ cp [hl]
+ jr nz, .done
+ inc hl
+ ld a, [MapNumber]
+ cp [hl]
+ jr z, .loop
+ dec hl
+; Return the map group and number in bc.
+.done
+ ld a, [hli]
+ ld b, a
+ ld c, [hl]
+ ret
+; 2a3f6
+
+_BackUpMapIndices: ; 2a3f6
+ ld a, [wdfe4]
+ ld [wdfe6], a
+ ld a, [wdfe5]
+ ld [wdfe7], a
+ ld a, [MapNumber]
+ ld [wdfe4], a
+ ld a, [MapGroup]
+ ld [wdfe5], a
+ ret
+; 2a40f
+
+RoamMaps: ; 2a40f
+; Maps that roaming monsters can be on,
+; and possible maps they can jump to.
+; Notably missing are Route 40 and
+; Route 41, which are water routes.
+ roam_map ROUTE_29, 2, ROUTE_30, ROUTE_46
+ roam_map ROUTE_30, 2, ROUTE_29, ROUTE_31
+ roam_map ROUTE_31, 3, ROUTE_30, ROUTE_32, ROUTE_36
+ roam_map ROUTE_32, 3, ROUTE_36, ROUTE_31, ROUTE_33
+ roam_map ROUTE_33, 2, ROUTE_32, ROUTE_34
+ roam_map ROUTE_34, 2, ROUTE_33, ROUTE_35
+ roam_map ROUTE_35, 2, ROUTE_34, ROUTE_36
+ roam_map ROUTE_36, 4, ROUTE_35, ROUTE_31, ROUTE_32, ROUTE_37
+ roam_map ROUTE_37, 3, ROUTE_36, ROUTE_38, ROUTE_42
+ roam_map ROUTE_38, 3, ROUTE_37, ROUTE_39, ROUTE_42
+ roam_map ROUTE_39, 1, ROUTE_38
+ roam_map ROUTE_42, 4, ROUTE_43, ROUTE_44, ROUTE_37, ROUTE_38
+ roam_map ROUTE_43, 2, ROUTE_42, ROUTE_44
+ roam_map ROUTE_44, 3, ROUTE_42, ROUTE_43, ROUTE_45
+ roam_map ROUTE_45, 2, ROUTE_44, ROUTE_46
+ roam_map ROUTE_46, 2, ROUTE_45, ROUTE_29
+ db -1
+; 2a4a0
+
+ValidateTempWildMonSpecies: ; 2a4a0
+; Due to a development oversight, this function is called with the wild Pokemon's level, not its species, in a.
+ and a
+ jr z, .nowildmon ; = 0
+ cp NUM_POKEMON + 1 ; 252
+ jr nc, .nowildmon ; >= 252
+ and a ; 1 <= Species <= 251
+ ret
+
+.nowildmon
+ scf
+ ret
+; 2a4ab
+
+RandomPhoneRareWildMon: ; 2a4ab
+; Related to the phone?
+ callba GetCallerLocation
+ ld d, b
+ ld e, c
+ ld hl, JohtoGrassWildMons
+ ld bc, GRASS_WILDDATA_LENGTH
+ call LookUpWildmonsForMapDE
+ jr c, .GetGrassmon
+ ld hl, KantoGrassWildMons
+ call LookUpWildmonsForMapDE
+ jr nc, .done
+
+.GetGrassmon
+ push hl
+ ld bc, 5 + 4 * 2 ; Location of the level of the 5th wild Pokemon in that map
+ add hl, bc
+ ld a, [TimeOfDay]
+ ld bc, 7 * 2
+ call AddNTimes
+.randloop1
+ call Random
+ and $3
+ jr z, .randloop1
+ dec a
+ ld c, a
+ ld b, $0
+rept 2
+ add hl, bc
+endr
+; We now have the pointer to one of the last (rarest) three wild Pokemon found in that area.
+ inc hl
+ ld c, [hl] ; Contains the species index of this rare Pokemon
+ pop hl
+ ld de, 5 + 0 * 2
+ add hl, de
+ inc hl ; Species index of the most common Pokemon on that route
+ ld b, 4
+.loop2
+ ld a, [hli]
+ cp c ; Compare this most common Pokemon with the rare one stored in c.
+ jr z, .done
+ inc hl
+ dec b
+ jr nz, .loop2
+; This Pokemon truly is rare.
+ push bc
+ dec c
+ ld a, c
+ call CheckSeenMon
+ pop bc
+ jr nz, .done
+; Since we haven't seen it, have the caller tell us about it.
+ ld de, StringBuffer1
+ call CopyName1
+ ld a, c
+ ld [wd265], a
+ call GetPokemonName
+ ld hl, UnknownText_0x2a51a
+ call PrintText
+ xor a
+ ld [ScriptVar], a
+ ret
+
+.done
+ ld a, $1
+ ld [ScriptVar], a
+ ret
+; 2a51a
+
+UnknownText_0x2a51a: ; 0x2a51a
+ ; I just saw some rare @ in @ . I'll call you if I see another rare #MON, OK?
+ text_jump UnknownText_0x1bd34b
+ db "@"
+; 0x2a51f
+
+RandomPhoneWildMon: ; 2a51f
+ callba GetCallerLocation
+ ld d, b
+ ld e, c
+ ld hl, JohtoGrassWildMons
+ ld bc, GRASS_WILDDATA_LENGTH
+ call LookUpWildmonsForMapDE
+ jr c, .ok
+ ld hl, KantoGrassWildMons
+ call LookUpWildmonsForMapDE
+
+.ok
+ ld bc, 5 + 0 * 2
+ add hl, bc
+ ld a, [TimeOfDay]
+ inc a
+ ld bc, 7 * 2
+.loop
+ dec a
+ jr z, .done
+ add hl, bc
+ jr .loop
+
+.done
+ call Random
+ and $3
+ ld c, a
+ ld b, $0
+rept 2
+ add hl, bc
+endr
+ inc hl
+ ld a, [hl]
+ ld [wd265], a
+ call GetPokemonName
+ ld hl, StringBuffer1
+ ld de, StringBuffer4
+ ld bc, PKMN_NAME_LENGTH
+ jp CopyBytes
+; 2a567
+
+RandomPhoneMon: ; 2a567
+; Get a random monster owned by the trainer who's calling.
+ callba GetCallerLocation
+ ld hl, TrainerGroups
+ ld a, d
+ dec a
+ ld c, a
+ ld b, 0
+rept 2
+ add hl, bc
+endr
+ ld a, BANK(TrainerGroups)
+ call GetFarHalfword
+
+.skip_trainer
+ dec e
+ jr z, .skipped
+.skip
+ ld a, BANK(Trainers)
+ call GetFarByte
+ inc hl
+ cp -1
+ jr nz, .skip
+ jr .skip_trainer
+.skipped
+
+.skip_name
+ ld a, BANK(Trainers)
+ call GetFarByte
+ inc hl
+ cp "@"
+ jr nz, .skip_name
+
+ ld a, BANK(Trainers)
+ call GetFarByte
+ inc hl
+ ld bc, 2
+ cp 0
+ jr z, .got_mon_length
+ ld bc, 2 + NUM_MOVES
+ cp 1
+ jr z, .got_mon_length
+ ld bc, 2 + 1
+ cp 2
+ jr z, .got_mon_length
+ ld bc, 2 + 1 + NUM_MOVES
+.got_mon_length
+
+ ld e, 0
+ push hl
+.count_mon
+ inc e
+ add hl, bc
+ ld a, BANK(Trainers)
+ call GetFarByte
+ cp -1
+ jr nz, .count_mon
+ pop hl
+
+.rand
+ call Random
+ and 7
+ cp e
+ jr nc, .rand
+
+ inc a
+.get_mon
+ dec a
+ jr z, .got_mon
+ add hl, bc
+ jr .get_mon
+.got_mon
+
+ inc hl ; species
+ ld a, BANK(Trainers)
+ call GetFarByte
+ ld [wd265], a
+ call GetPokemonName
+ ld hl, StringBuffer1
+ ld de, StringBuffer4
+ ld bc, PKMN_NAME_LENGTH
+ jp CopyBytes
+; 2a5e9
+
+
+JohtoGrassWildMons: ; 0x2a5e9
+INCLUDE "data/wild/johto_grass.asm"
+
+JohtoWaterWildMons: ; 0x2b11d
+INCLUDE "data/wild/johto_water.asm"
+
+KantoGrassWildMons: ; 0x2b274
+INCLUDE "data/wild/kanto_grass.asm"
+
+KantoWaterWildMons: ; 0x2b7f7
+INCLUDE "data/wild/kanto_water.asm"
+
+SwarmGrassWildMons: ; 0x2b8d0
+INCLUDE "data/wild/swarm_grass.asm"
+
+SwarmWaterWildMons: ; 0x2b92f
+INCLUDE "data/wild/swarm_water.asm"