summaryrefslogtreecommitdiff
path: root/src/engine/bank04.asm
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/bank04.asm')
-rw-r--r--src/engine/bank04.asm978
1 files changed, 867 insertions, 111 deletions
diff --git a/src/engine/bank04.asm b/src/engine/bank04.asm
index 7cff830..19c81b0 100644
--- a/src/engine/bank04.asm
+++ b/src/engine/bank04.asm
@@ -114,7 +114,7 @@ MasterMedalNames: ; 1030b (4:430b)
tx RockClubMapNameText
tx FightingClubMapNameText
-BoosterPack_1031b: ; 1031b (4:431b)
+GiveBoosterPack: ; 1031b (4:431b)
ld c, a
ld a, [wd291]
push af
@@ -125,20 +125,20 @@ BoosterPack_1031b: ; 1031b (4:431b)
ld [wTextBoxFrameType], a
pop bc
push bc
- ld b, $0
- ld hl, Unknown_103a5
+ ld b, 0
+ ld hl, BoosterTypes
add hl, bc
ld a, [hl]
ld c, a
add a
add a
ld c, a
- ld hl, Unknown_103c2
+ ld hl, BoosterScenesAndNameTexts
add hl, bc
ld a, [hli]
push hl
- ld bc, $0600
- call Func_130ca
+ lb bc, 6, 0
+ call LoadBoosterGfx
pop hl
ld a, [hli]
ld [wTxRam3], a
@@ -156,11 +156,11 @@ BoosterPack_1031b: ; 1031b (4:431b)
ld a, c
farcall GenerateBoosterPack
ldtx hl, ReceivedBoosterPackText
- ld a, [wd117]
- cp $1
- jr nz, .asm_10373
+ ld a, [wAnotherBoosterPack]
+ cp TRUE
+ jr nz, .first_booster
ldtx hl, AndAnotherBoosterPackText
-.asm_10373
+.first_booster
call PrintScrollableText_NoTextBoxLabel
call WaitForSongToFinish
call ResumeSong
@@ -173,18 +173,56 @@ BoosterPack_1031b: ; 1031b (4:431b)
ld [wVBlankOAMCopyToggle], a
ld a, $4
ld [wTextBoxFrameType], a
- farcall Func_7599
+ farcall OpenBoosterPack
farcall WhiteOutDMGPals
call DoFrameIfLCDEnabled
pop af
ld [wd291], a
ret
-Unknown_103a5: ; 103a5 (4:43a5)
- INCROM $103a5, $103c2
-
-Unknown_103c2: ; 103c2 (4:43c2)
- INCROM $103c2, $103d2
+BoosterTypes: ; 103a5 (4:43a5)
+ db BOOSTER_COLOSSEUM ; BOOSTER_COLOSSEUM_NEUTRAL
+ db BOOSTER_COLOSSEUM ; BOOSTER_COLOSSEUM_GRASS
+ db BOOSTER_COLOSSEUM ; BOOSTER_COLOSSEUM_FIRE
+ db BOOSTER_COLOSSEUM ; BOOSTER_COLOSSEUM_WATER
+ db BOOSTER_COLOSSEUM ; BOOSTER_COLOSSEUM_LIGHTNING
+ db BOOSTER_COLOSSEUM ; BOOSTER_COLOSSEUM_FIGHTING
+ db BOOSTER_COLOSSEUM ; BOOSTER_COLOSSEUM_TRAINER
+ db BOOSTER_EVOLUTION ; BOOSTER_EVOLUTION_NEUTRAL
+ db BOOSTER_EVOLUTION ; BOOSTER_EVOLUTION_GRASS
+ db BOOSTER_EVOLUTION ; BOOSTER_EVOLUTION_FIRE
+ db BOOSTER_EVOLUTION ; BOOSTER_EVOLUTION_WATER
+ db BOOSTER_EVOLUTION ; BOOSTER_EVOLUTION_FIGHTING
+ db BOOSTER_EVOLUTION ; BOOSTER_EVOLUTION_PSYCHIC
+ db BOOSTER_EVOLUTION ; BOOSTER_EVOLUTION_TRAINER
+ db BOOSTER_MYSTERY ; BOOSTER_MYSTERY_NEUTRAL
+ db BOOSTER_MYSTERY ; BOOSTER_MYSTERY_GRASS_COLORLESS
+ db BOOSTER_MYSTERY ; BOOSTER_MYSTERY_WATER_COLORLESS
+ db BOOSTER_MYSTERY ; BOOSTER_MYSTERY_LIGHTNING_COLORLESS
+ db BOOSTER_MYSTERY ; BOOSTER_MYSTERY_FIGHTING_COLORLESS
+ db BOOSTER_MYSTERY ; BOOSTER_MYSTERY_TRAINER_COLORLESS
+ db BOOSTER_LABORATORY ; BOOSTER_LABORATORY_NEUTRAL
+ db BOOSTER_LABORATORY ; BOOSTER_LABORATORY_GRASS
+ db BOOSTER_LABORATORY ; BOOSTER_LABORATORY_WATER
+ db BOOSTER_LABORATORY ; BOOSTER_LABORATORY_PSYCHIC
+ db BOOSTER_LABORATORY ; BOOSTER_LABORATORY_TRAINER
+ db BOOSTER_COLOSSEUM ; BOOSTER_ENERGY_LIGHTNING_FIRE
+ db BOOSTER_COLOSSEUM ; BOOSTER_ENERGY_WATER_FIGHTING
+ db BOOSTER_COLOSSEUM ; BOOSTER_ENERGY_GRASS_PSYCHIC
+ db BOOSTER_COLOSSEUM ; BOOSTER_ENERGY_RANDOM
+
+BoosterScenesAndNameTexts: ; 103c2 (4:43c2)
+ db SCENE_COLOSSEUM_BOOSTER, SCENE_COLOSSEUM_BOOSTER
+ tx ColosseumBoosterText
+
+ db SCENE_EVOLUTION_BOOSTER, SCENE_EVOLUTION_BOOSTER
+ tx EvolutionBoosterText
+
+ db SCENE_MYSTERY_BOOSTER, SCENE_MYSTERY_BOOSTER
+ tx MysteryBoosterText
+
+ db SCENE_LABORATORY_BOOSTER, SCENE_LABORATORY_BOOSTER
+ tx LaboratoryBoosterText
Func_103d2: ; 103d2 (4:43d2)
INCROM $103d2, $103d3
@@ -199,7 +237,7 @@ Duel_Init: ; 103d3 (4:43d3)
lb de, 0, 12
lb bc, 20, 6
call DrawRegularTextBox
- ld a, [wcc19]
+ ld a, [wNPCDuelDeckID]
add a
add a
ld c, a
@@ -291,7 +329,7 @@ TryGivePCPack: ; 10a70 (4:4a70)
inc hl
dec c
jr nz, .findFreeSlotLoop
- debug_ret
+ debug_nop
jr .quit
.foundFreeSlot
@@ -385,7 +423,29 @@ Unknown_10e17: ; 10e17 (4:4e17)
INCROM $10e17, $10e28
Func_10e28: ; 10e28 (4:4e28)
- INCROM $10e28, $10e55
+ push hl
+ push bc
+ push de
+ ld a, [wd33b]
+ ld [wWhichSprite], a
+ ld a, [wOverworldMapSelection]
+ ld d, $00
+ ld e, $f4
+ call Func_10ef0
+ ld a, [wd33e]
+ or a
+ jr nz, .asm_10e51
+ ld a, [wPlayerSpriteIndex]
+ ld [wWhichSprite], a
+ ld a, [wd33d]
+ ld d, $00
+ ld e, $00
+ call Func_10ef0
+.asm_10e51
+ pop de
+ pop bc
+ pop hl
+ ret
Func_10e55: ; 10e55 (4:4e55)
ld a, [wPlayerSpriteIndex]
@@ -393,7 +453,7 @@ Func_10e55: ; 10e55 (4:4e55)
ld a, [wd33e]
or a
jr nz, .asm_10e65
- call Func_10e71
+ call OverworldMap_HandleKeyPress
ret
.asm_10e65
cp $2
@@ -404,53 +464,139 @@ Func_10e55: ; 10e55 (4:4e55)
call LoadOverworldMapSelection
ret
-Func_10e71: ; 10e71 (4:4e71)
+OverworldMap_HandleKeyPress: ; 10e71 (4:4e71)
ldh a, [hKeysPressed]
and D_PAD
- jr z, .asm_10e83
+ jr z, .no_d_pad
farcall GetDirectionFromDPad
ld [wPlayerDirection], a
- call Func_10e97
- jr .asm_10e96
-.asm_10e83
+ call OverworldMap_HandleDPad
+ jr .done
+.no_d_pad
ldh a, [hKeysPressed]
and A_BUTTON
- jr z, .asm_10e96
+ jr z, .done
ld a, SFX_02
call PlaySFX
- call Func_11016
+ call Func_11016 ; load map?
call Func_11024
- jr .asm_10e96
-.asm_10e96
+ jr .done
+.done
ret
-Func_10e97: ; 10e97 (4:4e97)
+OverworldMap_HandleDPad: ; 10e97 (4:4e97)
push hl
pop hl
- ld a, [wd32e]
+ ld a, [wOverworldMapSelection]
rlca
rlca
ld c, a
ld a, [wPlayerDirection]
add c
ld c, a
- ld b, $0
- ld hl, Unknown_10ebc
+ ld b, 0
+ ld hl, OverworldMap_CursorTransitions
add hl, bc
ld a, [hl]
or a
- jr z, .asm_10eb9
- ld [wd32e], a
- call Func_10f2e
+ jr z, .no_transition
+ ld [wOverworldMapSelection], a
+ call PrintOverworldMapName ; update cursor oam?
ld a, SFX_01
call PlaySFX
-.asm_10eb9
+.no_transition
pop bc
pop hl
ret
-Unknown_10ebc: ; 10ebc (4:4ebc)
- INCROM $10ebc, $10efd
+OverworldMap_CursorTransitions: ; 10ebc (4:4ebc)
+ ; unused
+ db OWMAP_SCIENCE_CLUB ; NORTH
+ db OWMAP_SCIENCE_CLUB ; EAST
+ db OWMAP_SCIENCE_CLUB ; SOUTH
+ db OWMAP_SCIENCE_CLUB ; WEST
+
+ ; OWMAP_MASON_LABORATORY
+ db OWMAP_LIGHTNING_CLUB ; NORTH
+ db OWMAP_FIGHTING_CLUB ; EAST
+ db $00 ; SOUTH
+ db $00 ; WEST
+
+ ; OWMAP_ISHIHARAS_HOUSE
+ db $00 ; NORTH
+ db OWMAP_CHALLENGE_HALL ; EAST
+ db OWMAP_ROCK_CLUB ; SOUTH
+ db $00 ; WEST
+
+ ; OWMAP_FIGHTING_CLUB
+ db OWMAP_LIGHTNING_CLUB ; NORTH
+ db OWMAP_WATER_CLUB ; EAST
+ db $00 ; SOUTH
+ db OWMAP_MASON_LABORATORY ; WEST
+
+ ; OWMAP_ROCK_CLUB
+ db OWMAP_ISHIHARAS_HOUSE ; NORTH
+ db OWMAP_POKEMON_DOME ; EAST
+ db OWMAP_LIGHTNING_CLUB ; SOUTH
+ db $00 ; WEST
+
+ ; OWMAP_WATER_CLUB
+ db OWMAP_GRASS_CLUB ; NORTH
+ db $00 ; EAST
+ db $00 ; SOUTH
+ db OWMAP_FIGHTING_CLUB ; WEST
+
+ ; OWMAP_LIGHTNING_CLUB
+ db OWMAP_ROCK_CLUB ; NORTH
+ db OWMAP_POKEMON_DOME ; EAST
+ db OWMAP_FIGHTING_CLUB ; SOUTH
+ db OWMAP_MASON_LABORATORY ; WEST
+
+ ; OWMAP_GRASS_CLUB
+ db OWMAP_SCIENCE_CLUB ; NORTH
+ db $00 ; EAST
+ db OWMAP_WATER_CLUB ; SOUTH
+ db OWMAP_PSYCHIC_CLUB ; WEST
+
+ ; OWMAP_PSYCHIC_CLUB
+ db OWMAP_FIRE_CLUB ; NORTH
+ db OWMAP_SCIENCE_CLUB ; EAST
+ db OWMAP_GRASS_CLUB ; SOUTH
+ db OWMAP_POKEMON_DOME ; WEST
+
+ ; OWMAP_SCIENCE_CLUB
+ db OWMAP_FIRE_CLUB ; NORTH
+ db $00 ; EAST
+ db OWMAP_GRASS_CLUB ; SOUTH
+ db OWMAP_PSYCHIC_CLUB ; WEST
+
+ ; OWMAP_FIRE_CLUB
+ db $00 ; NORTH
+ db OWMAP_SCIENCE_CLUB ; EAST
+ db OWMAP_SCIENCE_CLUB ; SOUTH
+ db OWMAP_PSYCHIC_CLUB ; WEST
+
+ ; OWMAP_CHALLENGE_HALL
+ db $00 ; NORTH
+ db OWMAP_PSYCHIC_CLUB ; EAST
+ db OWMAP_POKEMON_DOME ; SOUTH
+ db OWMAP_ISHIHARAS_HOUSE ; WEST
+
+ ; OWMAP_POKEMON_DOME
+ db OWMAP_CHALLENGE_HALL ; NORTH
+ db OWMAP_PSYCHIC_CLUB ; EAST
+ db OWMAP_FIGHTING_CLUB ; SOUTH
+ db OWMAP_ROCK_CLUB ; WEST
+
+Func_10ef0: ; 10ef0 (4:4ef0)
+ call Func_10efd
+ ld c, SPRITE_ANIM_COORD_X
+ call GetSpriteAnimBufferProperty
+ ld a, d
+ ld [hli], a
+ ld a, e
+ ld [hl], a
+ ret
Func_10efd: ; 10efd (4:4efd)
push hl
@@ -475,12 +621,12 @@ Func_10efd: ; 10efd (4:4efd)
Unknown_10f14: ; 10f14 (4:4f14)
INCROM $10f14, $10f2e
-Func_10f2e: ; 10f2e (4:4f2e)
+PrintOverworldMapName: ; 10f2e (4:4f2e)
push hl
push de
lb de, 1, 1
call InitTextPrinting
- call Func_10f4a
+ call GetOverworldMapName
rlca
ld e, a
ld d, $0
@@ -494,14 +640,14 @@ Func_10f2e: ; 10f2e (4:4f2e)
pop hl
ret
-Func_10f4a: ; 10f4a (4:4f4a)
+GetOverworldMapName: ; 10f4a (4:4f4a)
push bc
- ld a, [wd32e]
- cp $2
+ ld a, [wOverworldMapSelection]
+ cp OWMAP_ISHIHARAS_HOUSE
jr nz, .asm_10f5f
ld c, a
- ld a, $1e
- farcall GetEventFlagValue
+ ld a, EVENT_ISHIHARAS_HOUSE_MENTIONED
+ farcall GetEventValue
or a
ld a, c
jr nz, .asm_10f5f
@@ -513,11 +659,11 @@ Func_10f4a: ; 10f4a (4:4f4a)
LoadOverworldMapSelection: ; 10f61 (4:4f61)
push hl
push bc
- ld a, [wd32e]
+ ld a, [wOverworldMapSelection]
rlca
rlca
ld c, a
- ld b, $0
+ ld b, 0
ld hl, OverworldMapIndexes
add hl, bc
ld a, [hli]
@@ -526,7 +672,7 @@ LoadOverworldMapSelection: ; 10f61 (4:4f61)
ld [wTempPlayerXCoord], a
ld a, [hli]
ld [wTempPlayerYCoord], a
- ld a, $0
+ ld a, NORTH
ld [wTempPlayerDirection], a
ld hl, wd0b4
set 4, [hl]
@@ -545,18 +691,18 @@ Func_10fbc: ; 10fbc (4:4fbc)
ld [hli], a
ld a, $10
ld [hl], a
- ld b, $34
+ ld b, $34 ; non-cgb volcano smoke
ld a, [wConsole]
cp CONSOLE_CGB
- jr nz, .asm_10fd8
- ld b, $37
-.asm_10fd8
+ jr nz, .not_cgb
+ ld b, $37 ; cgb volcano smoke
+.not_cgb
ld a, b
farcall StartNewSpriteAnimation
ret
Func_10fde: ; 10fde (4:4fde)
- ld a, [wd32e]
+ ld a, [wOverworldMapSelection]
ld [wd33d], a
xor a
ld [wd33e], a
@@ -564,17 +710,17 @@ Func_10fde: ; 10fde (4:4fde)
call CreateSpriteAndAnimBufferEntry
ld a, [wWhichSprite]
ld [wd33b], a
- ld b, $35
+ ld b, $35 ; blue overworld map cursor
ld a, [wConsole]
- cp $2
- jr nz, .asm_10ffe
- ld b, $38
-.asm_10ffe
+ cp CONSOLE_CGB
+ jr nz, .not_cgb
+ ld b, $38 ; red overworld map cursor
+.not_cgb
ld a, b
ld [wd33c], a
call StartNewSpriteAnimation
- ld a, $3e
- farcall GetEventFlagValue
+ ld a, EVENT_MASON_LAB_STATE
+ farcall GetEventValue
or a
jr nz, .asm_11015
ld c, SPRITE_ANIM_FLAGS
@@ -609,7 +755,7 @@ Func_11024: ; 11024 (4:5024)
ld a, [hli]
ld h, [hl]
ld l, a
- ld a, [wd32e]
+ ld a, [wOverworldMapSelection]
dec a
add a
ld c, a
@@ -625,6 +771,7 @@ Func_11024: ; 11024 (4:5024)
ld [wd341], a
ret
+; used while animating the player across the overworld map
Func_11060: ; 11060 (4:5060)
ld a, [wPlayerSpriteIndex]
ld [wWhichSprite], a
@@ -647,7 +794,7 @@ Func_11060: ; 11060 (4:5060)
jr nz, .asm_11094
ld a, [wd33d]
ld e, a
- ld a, [wd32e]
+ ld a, [wOverworldMapSelection]
cp e
jr z, .asm_110a0
ld de, $0000
@@ -856,26 +1003,29 @@ Func_11416: ; 11416 (4:5416)
Func_11430: ; 11430 (4:5430)
INCROM $11430, $1157c
-Func_1157c: ; 1157c (4:557c)
+; save the game
+; if c is 0, save the player at their current position
+; otherwise, save the player in Mason's lab
+_SaveGame: ; 1157c (4:557c)
ld a, c
or a
- jr nz, .asm_11586
- farcall Func_c228
- jr .asm_1159f
+ jr nz, .force_mason_lab
+ farcall BackupPlayerPosition
+ jr .save
-.asm_11586
+.force_mason_lab
ld a, $2
ld [wTempPlayerXCoord], a
ld a, $4
ld [wTempPlayerYCoord], a
- ld a, $2
+ ld a, SOUTH
ld [wTempPlayerDirection], a
- ld a, $1
+ ld a, MASON_LABORATORY
ld [wTempMap], a
- ld a, $1
- ld [wd32e], a
+ ld a, OWMAP_MASON_LABORATORY
+ ld [wOverworldMapSelection], a
-.asm_1159f
+.save
call Func_11238
ret
@@ -886,12 +1036,11 @@ INCLUDE "data/map_scripts.asm"
; loads a pointer into hl found on NPCHeaderPointers
GetNPCHeaderPointer: ; 1184a (4:584a)
- ; this may have been a macro
rlca
add LOW(NPCHeaderPointers)
ld l, a
ld a, HIGH(NPCHeaderPointers)
- adc $00
+ adc 0
ld h, a
ld a, [hli]
ld h, [hl]
@@ -915,10 +1064,10 @@ LoadNPCSpriteData: ; 11857 (4:5857)
pop bc
ld a, [wConsole]
cp CONSOLE_CGB
- jr nz, .asm_1187a
+ jr nz, .not_cgb
ld a, b
ld [wd3b1], a
-.asm_1187a
+.not_cgb
pop bc
pop hl
ret
@@ -936,7 +1085,7 @@ GetNPCNameAndScript: ; 1187d (4:587d)
ld a, [hli]
ld [wCurrentNPCNameTx], a
ld a, [hli]
- ld [wCurrentNPCNameTx+1], a
+ ld [wCurrentNPCNameTx + 1], a
pop hl
ret
@@ -950,16 +1099,17 @@ SetNPCDialogName: ; 11893 (4:5893)
ld a, [hli]
ld [wCurrentNPCNameTx], a
ld a, [hli]
- ld [wCurrentNPCNameTx+1], a
+ ld [wCurrentNPCNameTx + 1], a
pop bc
pop hl
ret
-Func_118a7: ; 118a7 (4:58a7)
+; set the opponent name and portrait for the NPC id in register a
+SetNPCOpponentNameAndPortrait: ; 118a7 (4:58a7)
push hl
push bc
call GetNPCHeaderPointer
- ld bc, $0007
+ ld bc, NPC_DATA_NAME_TEXT
add hl, bc
ld a, [hli]
ld [wOpponentName], a
@@ -971,39 +1121,41 @@ Func_118a7: ; 118a7 (4:58a7)
pop hl
ret
-Func_118bf: ; 118bf (4:58bf)
+; set the deck id and duel theme for the NPC id in register a
+SetNPCDeckIDAndDuelTheme: ; 118bf (4:58bf)
push hl
push bc
call GetNPCHeaderPointer
- ld bc, $000a
+ ld bc, NPC_DATA_DECK_ID
add hl, bc
ld a, [hli]
- ld [wcc19], a
+ ld [wNPCDuelDeckID], a
ld a, [hli]
ld [wDuelTheme], a
pop bc
pop hl
ret
-Func_118d3: ; 118d3 (4:58d3)
+; set the start theme for the NPC id in register a
+SetNPCMatchStartTheme: ; 118d3 (4:58d3)
push hl
push bc
push af
call GetNPCHeaderPointer
- ld bc, $000c
+ ld bc, NPC_DATA_MATCH_START_ID
add hl, bc
ld a, [hli]
ld [wMatchStartTheme], a
pop af
- cp $2
- jr nz, .asm_118f2
+ cp NPC_RONALD1
+ jr nz, .not_ronald_final_duel
ld a, [wCurMap]
cp POKEMON_DOME
- jr nz, .asm_118f2
+ jr nz, .not_ronald_final_duel
ld a, MUSIC_MATCH_START_3
ld [wMatchStartTheme], a
-.asm_118f2
+.not_ronald_final_duel
pop bc
pop hl
ret
@@ -1102,18 +1254,18 @@ OverworldScriptTable: ; 1217b (4:617b)
dw ScriptCommand_EndScript
dw ScriptCommand_EndScript
dw ScriptCommand_EndScript
- dw ScriptCommand_SetFlagValue
- dw ScriptCommand_JumpIfFlagZero1
- dw ScriptCommand_JumpIfFlagNonzero1
- dw ScriptCommand_JumpIfFlagEqual
- dw ScriptCommand_JumpIfFlagNotEqual
- dw ScriptCommand_JumpIfFlagNotLessThan
- dw ScriptCommand_JumpIfFlagLessThan
- dw ScriptCommand_MaxOutFlagValue
- dw ScriptCommand_ZeroOutFlagValue
- dw ScriptCommand_JumpIfFlagNonzero2
- dw ScriptCommand_JumpIfFlagZero2
- dw ScriptCommand_IncrementFlagValue
+ dw ScriptCommand_SetEventValue
+ dw ScriptCommand_JumpIfEventZero
+ dw ScriptCommand_JumpIfEventNonzero
+ dw ScriptCommand_JumpIfEventEqual
+ dw ScriptCommand_JumpIfEventNotEqual
+ dw ScriptCommand_JumpIfEventGreaterOrEqual
+ dw ScriptCommand_JumpIfEventLessThan
+ dw ScriptCommand_MaxOutEventValue
+ dw ScriptCommand_ZeroOutEventValue
+ dw ScriptCommand_JumpIfEventTrue
+ dw ScriptCommand_JumpIfEventFalse
+ dw ScriptCommand_IncrementEventValue
dw ScriptCommand_EndScript
dw ScriptCommand_EndScript
dw ScriptCommand_EndScript
@@ -1229,9 +1381,9 @@ MainMenu_NewGame: ; 12704 (4:6704)
ld a, MUSIC_STOP
call PlaySong
farcall Func_70000
- ld a, $9
- ld [wd111], a
- call Func_39fc
+ ld a, MUSIC_OVERWORLD
+ ld [wDefaultSong], a
+ call PlayDefaultSong
farcall Func_1d306
ld a, GAME_EVENT_OVERWORLD
ld [wGameEvent], a
@@ -1404,7 +1556,7 @@ CreateSpriteAndAnimBufferEntry: ; 1299f (4:699f)
ld [wWhichSprite], a
cp $10
jr nz, .findFirstEmptyAnimField
- debug_ret
+ debug_nop
scf
jr .quit
.foundEmptyAnimField
@@ -1859,7 +2011,7 @@ Func_12c05: ; 12c05 (4:6c05)
jr .quitSucceed
.quitFail
- debug_ret
+ debug_nop
xor a
scf
.quitSucceed
@@ -1886,14 +2038,618 @@ Func_12c4f: ; 12c4f (4:6c4f)
Func_12c5e: ; 12c5e (4:6c5e)
INCROM $12c5e, $12c7f
-Func_12c7f: ; 12c7f (4:6c7f)
- INCROM $12c7f, $12fc6
+; input:
+; a = scene ID (SCENE_* constant)
+; b = base X position of scene in tiles
+; c = base Y position of scene in tiles
+_LoadScene: ; 12c7f (4:6c7f)
+ push hl
+ push bc
+ push de
+ ld e, a
+ ld a, [wCurTilemap]
+ push af
+ ld a, [wd291]
+ push af
+ ld a, e
+ push bc
+ push af
+ ld a, b
+ add a
+ add a
+ add a
+ add $08
+ ld [wSceneBaseX], a
+ ld a, c
+ add a
+ add a
+ add a
+ add $10
+ ld [wSceneBaseY], a
+ pop af
+ add a
+ ld c, a
+ ld b, 0
+ ld hl, ScenePointers
+ add hl, bc
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld a, [hli]
+ ld [wSceneSGBPacketPtr], a
+ ld a, [hli]
+ ld [wSceneSGBPacketPtr + 1], a
+ ld a, [hli]
+ ld [wSceneSGBRoutinePtr], a
+ ld a, [hli]
+ ld [wSceneSGBRoutinePtr + 1], a
+ call LoadScene_LoadCompressedSGBPacket
+ ld a, %11100100
+ ld [wBGP], a
+ ld a, [wConsole]
+ cp CONSOLE_CGB
+ ld a, [hli]
+ jr nz, .not_cgb_1
+ ld a, [hl]
+.not_cgb_1
+ inc hl
+ push af ; palette
+ xor a
+ ld [wd4ca], a
+ ld a, [hli]
+ ld [wd4cb], a ; palette offset
+ ld [wd291], a ; palette offset
+ pop af ; palette
+ farcall Func_803c9 ; load palette
+ ld a, [wConsole]
+ cp CONSOLE_CGB
+ ld a, [hli]
+ jr nz, .not_cgb_2
+ ld a, [hl]
+.not_cgb_2
+ inc hl
+ ld [wCurTilemap], a
+ pop bc
+ push bc
+ farcall Func_8007e ; load tilemap
+ pop bc ; base x,y
+ call LoadScene_LoadSGBPacket
+ ld a, [hli]
+ ld [wd4ca], a ; tile offset
+ ld a, [hli]
+ ld [wd4cb], a ; vram0 or vram1
+ farcall LoadTilesetGfx
+.next_sprite
+ ld a, [hli]
+ or a
+ jr z, .done ; no sprite
+ ld [wSceneSprite], a
+ ld a, [wConsole]
+ cp CONSOLE_CGB
+ ld a, [hli]
+ jr nz, .not_cgb_3
+ ld a, [hl]
+.not_cgb_3
+ inc hl
+ push af ; sprite palette
+ xor a
+ ld [wd4ca], a
+ ld a, [hli]
+ ld [wd4cb], a ; palette offset
+ pop af ; sprite palette
+ farcall LoadPaletteData
+.next_animation
+ ld a, [hli]
+ or a
+ jr z, .next_sprite
+ dec hl
+ ld a, [wConsole]
+ cp CONSOLE_CGB
+ ld a, [hli]
+ jr nz, .not_cgb_4
+ ld a, [hl]
+.not_cgb_4
+ inc hl
+ ld [wSceneSpriteAnimation], a
+ ld a, [wSceneSprite]
+ farcall CreateSpriteAndAnimBufferEntry
+ ld a, [wWhichSprite]
+ ld [wSceneSpriteIndex], a
+ push hl
+ ld c, SPRITE_ANIM_COORD_X
+ call GetSpriteAnimBufferProperty
+ ld e, l
+ ld d, h
+ pop hl
+ ld a, [wSceneBaseX]
+ add [hl]
+ ld [de], a
+ inc hl
+ inc de
+ ld a, [wSceneBaseY]
+ add [hl]
+ ld [de], a
+ inc hl
+ ld a, [wSceneSpriteAnimation]
+ cp $ff
+ jr z, .no_animation
+ farcall StartSpriteAnimation
+.no_animation
+ jr .next_animation
+.done
+ pop af
+ ld [wd291], a
+ pop af
+ ld [wCurTilemap], a
+ pop de
+ pop bc
+ pop hl
+ ret
+
+ScenePointers: ; 12d6f (4:6d6f)
+ dw Scene_TitleScreen
+ dw Scene_ColosseumBooster
+ dw Scene_EvolutionBooster
+ dw Scene_MysteryBooster
+ dw Scene_LaboratoryBooster
+ dw Scene_CharizardIntro
+ dw Scene_ScytherIntro
+ dw Scene_AerodactylIntro
+ dw Scene_GradientBlackAndRed
+ dw Scene_GradientWhiteAndRed
+ dw Scene_GradientBlackAndGreen
+ dw Scene_GradientWhiteAndGreen
+ dw Scene_ColorWheel
+ dw Scene_ColorTest
+ dw Scene_GameBoyLinkConnecting
+ dw Scene_GameBoyLinkTransmitting
+ dw Scene_GameBoyLinkNotConnected
+ dw Scene_GameBoyPrinterTransmitting
+ dw Scene_GameBoyPrinterNotConnected
+ dw Scene_CardPop
+ dw Scene_CardPopError
+ dw Scene_JapaneseTitleScreen
+ dw Scene_Nintendo
+ dw Scene_Companies
+ dw Scene_JapaneseTitleScreen2
+ dw Scene_Copyright
+ dw Scene_JapaneseTitleScreen2
+ dw Scene_ColorPalette
+
+; format:
+; dw compressed sgb packet
+; dw custom sgb packet loading routine
+; db palette (non-cgb), palette (cgb), palette offset
+; db tilemap (non-cgb), tilemap (cgb), vram tile offset, vram0 or vram1
+; db sprite
+;
+; if sprite is non-zero:
+; db palette (non-cgb), palette (cgb), palette offset
+; db animation (non-cgb), animation (cgb), x offset, y offset
+; dw 0-terminator
+
+Scene_TitleScreen: ; 12da7 (4:6da7)
+ dw SGBData_TitleScreen
+ dw NULL
+ db PALETTE_25, PALETTE_25, $00
+ db TILEMAP_TITLE_SCREEN, TILEMAP_TITLE_SCREEN_CGB, $00, $00
+ db $00
+
+Scene_JapaneseTitleScreen: ; 12db3 (4:6db3)
+ dw SGBData_TitleScreen
+ dw NULL
+ db PALETTE_25, PALETTE_25, $00
+ db TILEMAP_JAPANESE_TITLE_SCREEN, TILEMAP_JAPANESE_TITLE_SCREEN_CGB, $80, $00
+ db $00
+
+Scene_ColosseumBooster: ; 12dbf (4:6dbf)
+ dw SGBData_ColosseumBooster
+ dw NULL
+ db PALETTE_108, PALETTE_101, $01
+ db TILEMAP_COLOSSEUM, TILEMAP_COLOSSEUM_CGB, $80, $00
+ db SPRITE_BOOSTER_PACK_OAM
+ db PALETTE_117, PALETTE_117, $00
+ db $ff, $bd, $00, $00
+ dw $00
+
+Scene_EvolutionBooster: ; 12dd4 (4:6dd4)
+ dw SGBData_EvolutionBooster
+ dw NULL
+ db PALETTE_108, PALETTE_102, $01
+ db TILEMAP_EVOLUTION, TILEMAP_EVOLUTION_CGB, $80, $00
+ db SPRITE_BOOSTER_PACK_OAM
+ db PALETTE_117, PALETTE_117, $00
+ db $ff, $bd, $00, $00
+ dw $00
+
+Scene_MysteryBooster: ; 12de9 (4:6de9)
+ dw SGBData_MysteryBooster
+ dw NULL
+ db PALETTE_108, PALETTE_103, $01
+ db TILEMAP_MYSTERY, TILEMAP_MYSTERY_CGB, $80, $00
+ db SPRITE_BOOSTER_PACK_OAM
+ db PALETTE_117, PALETTE_117, $00
+ db $ff, $bd, $00, $00
+ dw $00
+
+Scene_LaboratoryBooster: ; 12dfe (4:6dfe)
+ dw SGBData_LaboratoryBooster
+ dw NULL
+ db PALETTE_108, PALETTE_104, $01
+ db TILEMAP_LABORATORY, TILEMAP_LABORATORY_CGB, $80, $00
+ db SPRITE_BOOSTER_PACK_OAM
+ db PALETTE_117, PALETTE_117, $00
+ db $ff, $bd, $00, $00
+ dw $00
+
+Scene_CharizardIntro: ; 12e13 (4:6e13)
+ dw SGBData_CharizardIntro
+ dw NULL
+ db PALETTE_108, PALETTE_105, $01
+ db TILEMAP_CHARIZARD_INTRO, TILEMAP_CHARIZARD_INTRO_CGB, $80, $00
+ db $00
+
+Scene_ScytherIntro: ; 12e1f (4:6e1f)
+ dw SGBData_ScytherIntro
+ dw NULL
+ db PALETTE_108, PALETTE_106, $01
+ db TILEMAP_SCYTHER_INTRO, TILEMAP_SCYTHER_INTRO_CGB, $80, $00
+ db $00
+
+Scene_AerodactylIntro: ; 12e2b (4:6e2b)
+ dw SGBData_AerodactylIntro
+ dw NULL
+ db PALETTE_108, PALETTE_107, $01
+ db TILEMAP_AERODACTYL_INTRO, TILEMAP_AERODACTYL_INTRO_CGB, $80, $00
+ db $00
+
+Scene_GradientBlackAndRed: ; 12e37 (4:6e37)
+ dw NULL
+ dw NULL
+ db PALETTE_94, PALETTE_94, $00
+ db TILEMAP_SOLID_TILES_1, TILEMAP_SOLID_TILES_1, $01, $00
+ db $00
+
+Scene_GradientWhiteAndRed: ; 12e43 (4:6e43)
+ dw NULL
+ dw NULL
+ db PALETTE_95, PALETTE_95, $00
+ db TILEMAP_SOLID_TILES_1, TILEMAP_SOLID_TILES_1, $01, $00
+ db $00
+
+Scene_GradientBlackAndGreen: ; 12e4f (4:6e4f)
+ dw NULL
+ dw NULL
+ db PALETTE_96, PALETTE_96, $00
+ db TILEMAP_SOLID_TILES_1, TILEMAP_SOLID_TILES_1, $01, $00
+ db $00
+
+Scene_GradientWhiteAndGreen: ; 12e5b (4:6e5b)
+ dw NULL
+ dw NULL
+ db PALETTE_97, PALETTE_97, $00
+ db TILEMAP_SOLID_TILES_1, TILEMAP_SOLID_TILES_1, $01, $00
+ db $00
+
+Scene_ColorWheel: ; 12e67 (4:6e67)
+ dw NULL
+ dw NULL
+ db PALETTE_98, PALETTE_98, $00
+ db TILEMAP_SOLID_TILES_2, TILEMAP_SOLID_TILES_2, $01, $00
+ db $00
+
+Scene_ColorTest: ; 12e73 (4:6e73)
+ dw NULL
+ dw NULL
+ db PALETTE_99, PALETTE_99, $00
+ db TILEMAP_SOLID_TILES_3, TILEMAP_SOLID_TILES_3, $01, $00
+ db $00
+
+Scene_ColorPalette: ; 12e7f (4:6e7f)
+ dw NULL
+ dw NULL
+ db PALETTE_110, PALETTE_110, $00
+ db TILEMAP_SOLID_TILES_4, TILEMAP_SOLID_TILES_4, $fc, $01
+ db $00
+
+Scene_GameBoyLinkConnecting: ; 12e8b (4:6e8b)
+ dw SGBData_GameBoyLink
+ dw NULL
+ db PALETTE_111, PALETTE_111, $00
+ db TILEMAP_GAMEBOY_LINK_CONNECTING, TILEMAP_GAMEBOY_LINK_CONNECTING_CGB, $90, $00
+ db $00
+
+Scene_GameBoyLinkTransmitting: ; 12e97 (4:6e97)
+ dw SGBData_GameBoyLink
+ dw NULL
+ db PALETTE_111, PALETTE_111, $00
+ db TILEMAP_GAMEBOY_LINK, TILEMAP_GAMEBOY_LINK_CGB, $90, $00
+ db SPRITE_DUEL_52
+ db PALETTE_114, PALETTE_114, $00
+ db $b3, $b0, $50, $50
+ dw $00
+
+Scene_GameBoyLinkNotConnected: ; 12eac (4:6eac)
+ dw SGBData_GameBoyLink
+ dw NULL
+ db PALETTE_111, PALETTE_111, $00
+ db TILEMAP_GAMEBOY_LINK, TILEMAP_GAMEBOY_LINK_CGB, $90, $00
+ db SPRITE_DUEL_52
+ db PALETTE_114, PALETTE_114, $00
+ db $b4, $b1, $50, $50
+ dw $00
+
+Scene_GameBoyPrinterTransmitting: ; 12ec1 (4:6ec1)
+ dw SGBData_GameBoyPrinter
+ dw LoadScene_SetGameBoyPrinterAttrBlk
+ db PALETTE_112, PALETTE_112, $00
+ db TILEMAP_GAMEBOY_PRINTER, TILEMAP_GAMEBOY_PRINTER_CGB, $90, $00
+ db SPRITE_DUEL_53
+ db PALETTE_115, PALETTE_115, $00
+ db $b7, $b5, $50, $30
+ dw $00
+
+Scene_GameBoyPrinterNotConnected: ; 12ed6 (4:6ed6)
+ dw SGBData_GameBoyPrinter
+ dw LoadScene_SetGameBoyPrinterAttrBlk
+ db PALETTE_112, PALETTE_112, $00
+ db TILEMAP_GAMEBOY_PRINTER, TILEMAP_GAMEBOY_PRINTER_CGB, $90, $00
+ db SPRITE_DUEL_53
+ db PALETTE_115, PALETTE_115, $00
+ db $b8, $b6, $50, $30
+ dw $00
+
+Scene_CardPop: ; 12eeb (4:6eeb)
+ dw SGBData_CardPop
+ dw LoadScene_SetCardPopAttrBlk
+ db PALETTE_113, PALETTE_113, $00
+ db TILEMAP_CARD_POP, TILEMAP_CARD_POP_CGB, $80, $00
+ db SPRITE_DUEL_54
+ db PALETTE_116, PALETTE_116, $00
+ db $bb, $b9, $50, $40
+ dw $00
+
+Scene_CardPopError: ; 12f00 (4:6f00)
+ dw SGBData_CardPop
+ dw LoadScene_SetCardPopAttrBlk
+ db PALETTE_113, PALETTE_113, $00
+ db TILEMAP_CARD_POP, TILEMAP_CARD_POP_CGB, $80, $00
+ db SPRITE_DUEL_54
+ db PALETTE_116, PALETTE_116, $00
+ db $bc, $ba, $50, $40
+ dw $00
+
+Scene_Nintendo: ; 12f15 (4:6f15)
+ dw NULL
+ dw NULL
+ db PALETTE_27, PALETTE_27, $00
+ db TILEMAP_NINTENDO, TILEMAP_NINTENDO, $00, $00
+ db $00
+
+Scene_Companies: ; 12f21 (4:6f21)
+ dw NULL
+ dw NULL
+ db PALETTE_28, PALETTE_28, $00
+ db TILEMAP_COMPANIES, TILEMAP_COMPANIES, $00, $00
+ db $00
+
+Scene_Copyright: ; 12f2d (4:6f2d)
+ dw NULL
+ dw NULL
+ db PALETTE_26, PALETTE_26, $00
+ db TILEMAP_COPYRIGHT, TILEMAP_COPYRIGHT_CGB, $00, $00
+ db $00
+
+Scene_JapaneseTitleScreen2: ; 12f39 (4:6f39)
+ dw NULL
+ dw NULL
+ db PALETTE_109, PALETTE_100, $00
+ db TILEMAP_JAPANESE_TITLE_SCREEN_2, TILEMAP_JAPANESE_TITLE_SCREEN_2_CGB, $01, $00
+ db $00
+
+LoadScene_LoadCompressedSGBPacket: ; 12f45 (4:6f45)
+ ld a, [wConsole]
+ cp CONSOLE_SGB
+ ret nz
+ push hl
+ ld hl, wSceneSGBPacketPtr
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ or h
+ jr z, .skip
+ farcall Func_703cb
+.skip
+ pop hl
+ ret
+
+LoadScene_LoadSGBPacket: ; 12f5b (4:6f5b)
+ ld a, [wConsole]
+ cp CONSOLE_SGB
+ ret nz
+ push hl
+ push bc
+ push de
+ ld hl, wSceneSGBPacketPtr
+ ld a, [hli]
+ or [hl]
+ jr z, .done
+ ld hl, wSceneSGBRoutinePtr + 1
+ ld a, [hld]
+ or [hl]
+ jr z, .use_default
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ call CallHL2
+ jr .done
+.use_default
+ ld l, %001010 ; outside, border, inside palette numbers
+ ld a, [wBGMapWidth]
+ ld d, a
+ ld a, [wBGMapHeight]
+ ld e, a
+ farcall Func_70498
+.done
+ pop de
+ pop bc
+ pop hl
+ ret
+
+LoadScene_SetGameBoyPrinterAttrBlk: ; 12f8c (4:6f8c)
+ push hl
+ push bc
+ push de
+ ld hl, SGBPacket_GameBoyPrinter
+ call SendSGB
+ pop de
+ pop bc
+ pop hl
+ ret
+
+SGBPacket_GameBoyPrinter: ; 12f99 (4:6f99)
+ sgb ATTR_BLK, 1
+ db 1 ; number of data sets
+ db ATTR_BLK_CTRL_OUTSIDE | ATTR_BLK_CTRL_LINE | ATTR_BLK_CTRL_INSIDE
+ db %101111 ; Color Palette Designation
+ db 11 ; x1
+ db 0 ; y1
+ db 16 ; x2
+ db 9 ; y2
+ ds 6 ; data set 2
+ ds 2 ; data set 3
+
+LoadScene_SetCardPopAttrBlk: ; 12fa9 (4:6fa9)
+ push hl
+ push bc
+ push de
+ ld hl, SGBPacket_CardPop
+ call SendSGB
+ pop de
+ pop bc
+ pop hl
+ ret
+
+SGBPacket_CardPop: ; 12fb6 (4:6fb6)
+ sgb ATTR_BLK, 1
+ db 1 ; number of data sets
+ db ATTR_BLK_CTRL_OUTSIDE | ATTR_BLK_CTRL_LINE | ATTR_BLK_CTRL_INSIDE
+ db %101111 ; Color Palette Designation
+ db 0 ; x1
+ db 0 ; y1
+ db 19 ; x2
+ db 4 ; y3
+ ds 6 ; data set 2
+ ds 2 ; data set 3
Func_12fc6: ; 12fc6 (4:6fc6)
INCROM $12fc6, $130ca
-Func_130ca: ; 130ca (4:70ca)
- INCROM $130ca, $131b3
+LoadBoosterGfx: ; 130ca (4:70ca)
+ push hl
+ push bc
+ push de
+ ld e, a
+ ld a, [wCurTilemap]
+ push af
+ push bc
+ ld a, e
+ call _LoadScene
+ call FlushAllPalettes
+ call SetBoosterLogoOAM
+ pop bc
+ pop af
+ ld [wCurTilemap], a
+ pop de
+ pop bc
+ pop hl
+ ret
+
+SetBoosterLogoOAM: ; 130e6 (4:70e6)
+ ld a, [wConsole]
+ cp CONSOLE_CGB
+ ret nz
+ push hl
+ push bc
+ push de
+ push bc
+ xor a
+ ld [wd4cb], a
+ ld [wd4ca], a
+ ld a, SPRITE_BOOSTER_PACK_OAM
+ farcall Func_8025b
+ pop bc
+ call ZeroObjectPositions
+ ld hl, BoosterLogoOAM
+ ld c, [hl]
+ inc hl
+.oam_loop
+ push bc
+ ldh a, [hSCX]
+ ld d, a
+ ldh a, [hSCY]
+ ld e, a
+ ld a, [wSceneBaseY]
+ sub e
+ add [hl]
+ ld e, a
+ inc hl
+ ld a, [wSceneBaseX]
+ sub d
+ add [hl]
+ ld d, a
+ inc hl
+ ld a, [wd61f]
+ add [hl]
+ ld c, a
+ inc hl
+ ld b, [hl]
+ inc hl
+ call SetOneObjectAttributes
+ pop bc
+ dec c
+ jr nz, .oam_loop
+ ld hl, wVBlankOAMCopyToggle
+ inc [hl]
+ pop de
+ pop bc
+ pop hl
+ ret
+
+BoosterLogoOAM: ; 13132 (4:7132)
+ db $20
+ db $00, $00, $00, $00
+ db $00, $08, $01, $00
+ db $00, $10, $02, $00
+ db $00, $18, $03, $00
+ db $00, $20, $04, $00
+ db $00, $28, $05, $00
+ db $00, $30, $06, $00
+ db $00, $38, $07, $00
+ db $08, $00, $10, $00
+ db $08, $08, $11, $00
+ db $08, $10, $12, $00
+ db $08, $18, $13, $00
+ db $08, $20, $14, $00
+ db $08, $28, $15, $00
+ db $08, $30, $16, $00
+ db $08, $38, $17, $00
+ db $10, $00, $08, $00
+ db $10, $08, $09, $00
+ db $10, $10, $0A, $00
+ db $10, $18, $0B, $00
+ db $10, $20, $0C, $00
+ db $10, $28, $0D, $00
+ db $10, $30, $0E, $00
+ db $10, $38, $0F, $00
+ db $18, $00, $18, $00
+ db $18, $08, $19, $00
+ db $18, $10, $1A, $00
+ db $18, $18, $1B, $00
+ db $18, $20, $1C, $00
+ db $18, $28, $1D, $00
+ db $18, $30, $1E, $00
+ db $18, $38, $1F, $00
Func_131b3: ; 131b3 (4:71b3)
INCROM $131b3, $131d3