summaryrefslogtreecommitdiff
path: root/src/engine/bank04.asm
diff options
context:
space:
mode:
authorDaniel Harding <33dannye@gmail.com>2021-11-15 13:31:15 -0600
committerGitHub <noreply@github.com>2021-11-15 13:31:15 -0600
commitf516a91f5fa02a741631c77b9097598f466d1328 (patch)
treebac2ee5e3fad02983b061580f5c085baecb5439a /src/engine/bank04.asm
parent15e986d374fdd11ed0f412fbdc9b858d4c4b9f50 (diff)
parent1fd16cd27fcd4f432bfc09fc5b7a262798b72430 (diff)
Merge pull request #114 from ElectroDeoxys/masterHEADmaster
Some more bank splitting
Diffstat (limited to 'src/engine/bank04.asm')
-rw-r--r--src/engine/bank04.asm5584
1 files changed, 0 insertions, 5584 deletions
diff --git a/src/engine/bank04.asm b/src/engine/bank04.asm
deleted file mode 100644
index 0dfe388..0000000
--- a/src/engine/bank04.asm
+++ /dev/null
@@ -1,5584 +0,0 @@
-Func_10000: ; 10000 (4:4000)
- ld a, $0
- ld [wTileMapFill], a
- call EmptyScreen
- call LoadSymbolsFont
- lb de, $30, $7f
- call SetupText
- call Set_OBJ_8x8
- xor a
- ldh [hSCX], a
- ldh [hSCY], a
- ld a, [wLCDC]
- bit LCDC_ENABLE_F, a
- jr nz, .asm_10025
- xor a
- ldh [rSCX], a
- ldh [rSCY], a
-
-.asm_10025
- call Func_1288c
- call ZeroObjectPositions
- ld a, $1
- ld [wVBlankOAMCopyToggle], a
- ret
-
-; saves all pals to SRAM, then fills them with white.
-; after flushing, it loads back the saved pals from SRAM.
-FlashWhiteScreen: ; 10031 (4:4031)
- ldh a, [hBankSRAM]
-
- push af
- ld a, BANK("SRAM1")
- call BankswitchSRAM
- call CopyPalsToSRAMBuffer
- call DisableSRAM
- call Func_10b28
- call FlushAllPalettes
- call EnableLCD
- call DoFrameIfLCDEnabled
- call LoadPalsFromSRAMBuffer
- call FlushAllPalettes
- pop af
-
- call BankswitchSRAM
- call DisableSRAM
- ret
-
-_PauseMenu_Status: ; 10059 (4:4059)
- ld a, [wd291]
- push af
- call Func_10000
- xor a
- ld [wMedalScreenYOffset], a
- call LoadCollectedMedalTilemaps
- lb de, 0, 0
- lb bc, 20, 8
- call DrawRegularTextBox
- ld hl, StatusScreenLabels
- call Func_111b3
- ld bc, $101
- call Func_1029a
- ld bc, $c04
- call Func_1024a
- ld bc, $d06
- call Func_101cd
- call FlashWhiteScreen
- ld a, $0b
- call Func_12863
- pop af
- ld [wd291], a
- ret
-
-StatusScreenLabels: ; 10095 (4:4095)
- db 7, 2
- tx PlayerStatusNameText
-
- db 7, 4
- tx PlayerStatusAlbumText
-
- db 7, 6
- tx PlayerStatusPlayTimeText
-
- db $ff
-
-_PauseMenu_Diary: ; 100a2 (4:40a2)
- ld a, [wd291]
- push af
- call Func_10000
- lb de, 0, 0
- lb bc, 20, 12
- call DrawRegularTextBox
- ld hl, Unknown_100f7
- call Func_111b3
- ld bc, $103
- call Func_1029a
- ld bc, $c08
- call Func_1024a
- ld bc, $d0a
- call Func_101cd
- lb bc, 16, 6
- call Func_1027c
- call FlashWhiteScreen
- ldtx hl, PlayerDiarySaveQuestionText
- call YesOrNoMenuWithText_SetCursorToYes
- jr c, .asm_100ec
- farcall BackupPlayerPosition
- call SaveAndBackupData
- ld a, SFX_56
- call PlaySFX
- ldtx hl, PlayerDiarySaveConfirmText
- jr .asm_100ef
-.asm_100ec
- ldtx hl, PlayerDiarySaveCancelText
-.asm_100ef
- call PrintScrollableText_NoTextBoxLabel
- pop af
- ld [wd291], a
- ret
-
-Unknown_100f7: ; 100f7 (4:40f7)
- db 5, 1
- tx PlayerDiaryTitleText
-
- db 7, 4
- tx PlayerStatusNameText
-
- db 7, 6
- tx PlayerDiaryMedalsWonText
-
- db 7, 8
- tx PlayerStatusAlbumText
-
- db 7, 10
- tx PlayerStatusPlayTimeText
-
- db $ff
-
-LoadCollectedMedalTilemaps: ; 1010c (4:410c)
- xor a
- ld [wd291], a
- lb de, 0, 8
- ld a, [wMedalScreenYOffset]
- add e
- ld e, a
- lb bc, 20, 10
- call DrawRegularTextBox
- lb de, 6, 9
- ld a, [wMedalScreenYOffset]
- add e
- ld e, a
- call AdjustCoordinatesForBGScroll
- call InitTextPrinting
- ldtx hl, PlayerStatusMedalsTitleText
- call PrintTextNoDelay
- ld hl, MedalCoordsAndTilemaps
- ld a, EVENT_MEDAL_FLAGS
- farcall GetEventValue
- or a
- jr z, .asm_1017e
- ld c, NUM_MEDALS
-.asm_10140
- push bc
- push hl
- push af
- bit 7, a
- jr z, .asm_10157
- ld b, [hl]
- inc hl
- ld a, [wMedalScreenYOffset]
- add [hl]
- ld c, a
- inc hl
- ld a, [hli]
- ld [wCurTilemap], a
- farcall LoadTilemap_ToVRAM
-.asm_10157
- pop af
- rlca
- pop hl
- ld bc, $3
- add hl, bc
- pop bc
- dec c
- jr nz, .asm_10140
- ld a, $80
- ld [wd4ca], a
- xor a
- ld [wd4cb], a
- farcall LoadTilesetGfx
- xor a
- ld [wd4ca], a
- ld a, $01
- ld [wd4cb], a
- ld a, $76
- farcall SetBGPAndLoadedPal
-.asm_1017e
- ret
-
-MedalCoordsAndTilemaps: ; 1017f (4:417f)
-; x, y, tilemap
- db 1, 10, TILEMAP_GRASS_MEDAL
- db 6, 10, TILEMAP_SCIENCE_MEDAL
- db 11, 10, TILEMAP_FIRE_MEDAL
- db 16, 10, TILEMAP_WATER_MEDAL
- db 1, 14, TILEMAP_LIGHTNING_MEDAL
- db 6, 14, TILEMAP_PSYCHIC_MEDAL
- db 11, 14, TILEMAP_ROCK_MEDAL
- db 16, 14, TILEMAP_FIGHTING_MEDAL
-
-FlashReceivedMedal: ; 10197 (4:4197)
- xor a
- ld [wd291], a
- ld hl, MedalCoordsAndTilemaps
- ld a, [wWhichMedal]
- ld c, a
- add a
- add c
- ld c, a
- ld b, $00
- add hl, bc
- ld b, [hl]
- inc hl
- ld a, [wMedalScreenYOffset]
- add [hl]
- ld c, a
- ld a, [wMedalDisplayTimer]
- bit 4, a
- jr z, .show
-; hide
- xor a
- ld e, c
- ld d, b
- lb bc, 3, 3
- lb hl, 0, 0
- call FillRectangle
- ret
-
-.show
- inc hl
- ld a, [hl]
- ld [wCurTilemap], a
- farcall LoadTilemap_ToVRAM
- ret
-
-Func_101cd: ; 101cd (4:41cd)
- ld a, [wPlayTimeCounter + 2]
- ld [wPlayTimeHourMinutes], a
- ld a, [wPlayTimeCounter + 3]
- ld [wPlayTimeHourMinutes + 1], a
- ld a, [wPlayTimeCounter + 4]
- ld [wPlayTimeHourMinutes + 2], a
-; fallthrough
-Func_101df: ; 101df (4:41df)
- push bc
- ld a, [wPlayTimeHourMinutes + 1]
- ld l, a
- ld a, [wPlayTimeHourMinutes + 2]
- ld h, a
- call Func_10217
- pop bc
- push bc
- call BCCoordToBGMap0Address
- ld hl, wd4b4
- ld b, $03
- call SafeCopyDataHLtoDE
- ld a, [wPlayTimeHourMinutes]
- add 100
- ld l, a
- ld a, 0
- adc 0
- ld h, a
- call Func_10217
- pop bc
- ld a, b
- add $04
- ld b, a
- call BCCoordToBGMap0Address
- ld hl, wd4b4 + 1
- ld b, $02
- call SafeCopyDataHLtoDE
- ret
-
-Func_10217: ; 10217 (4:4217)
- ld de, wd4b4
- ld bc, -100
- call Func_1023b
- ld bc, -10
- call Func_1023b
- ld a, l
- add $20
- ld [de], a
- ld hl, wd4b4
- ld c, $02
-.asm_1022f
- ld a, [hl]
- cp $20
- jr nz, .asm_1023a
- ld [hl], $00
- inc hl
- dec c
- jr nz, .asm_1022f
-.asm_1023a
- ret
-
-Func_1023b: ; 1023b (4:423b)
- ld a, $1f
-.asm_1023d
- inc a
- add hl, bc
- jr c, .asm_1023d
- ld [de], a
- inc de
- ld a, l
- sub c
- ld l, a
- ld a, h
- sbc b
- ld h, a
- ret
-
-Func_1024a: ; 1024a (4:424a)
- push bc
- call GetCardAlbumProgress
- pop bc
-; fallthrough
-Func_1024f: ; 1024f (4:424f)
- push bc
- push de
- push bc
- ld l, d
- ld h, $00
- call Func_10217
- pop bc
- call BCCoordToBGMap0Address
- ld hl, wd4b4
- ld b, $03
- call SafeCopyDataHLtoDE
- pop de
- ld l, e
- ld h, $00
- call Func_10217
- pop bc
- ld a, b
- add $04
- ld b, a
- call BCCoordToBGMap0Address
- ld hl, wd4b4
- ld b, $03
- call SafeCopyDataHLtoDE
- ret
-
-Func_1027c: ; 1027c (4:427c)
- push bc
- farcall TryGiveMedalPCPacks
- ld a, EVENT_MEDAL_COUNT
- farcall GetEventValue
- ld l, a
- ld h, $00
- call Func_10217
- pop bc
- call BCCoordToBGMap0Address
- ld hl, wd4b4 + 2
- ld b, $01
- call SafeCopyDataHLtoDE
- ret
-
-Func_1029a: ; 1029a (4:429a)
- call DrawPlayerPortrait
- ret
-
-ShowMedalReceivedScreen: ; 1029e (4:429e)
- sub $8
- ld c, a
- ld [wWhichMedal], a
- ld a, [wd291]
- push af
- push bc
- call PauseSong
- ld a, MUSIC_STOP
- call PlaySong
- farcall SetMainSGBBorder
- call DisableLCD
- call Func_10000
- ld a, -6
- ld [wMedalScreenYOffset], a
- call LoadCollectedMedalTilemaps
- pop bc
- ld a, c
- add a
- ld c, a
- ld b, $0
- ld hl, MasterMedalNames
- add hl, bc
- ld a, [hli]
- ld [wTxRam2], a
- ld a, [hl]
- ld [wTxRam2 + 1], a
- call FlashWhiteScreen
- ld a, MUSIC_MEDAL
- call PlaySong
- ld a, $ff
- ld [wMedalDisplayTimer], a
-.flash_loop
- call DoFrameIfLCDEnabled
- ld a, [wMedalDisplayTimer]
- inc a
- ld [wMedalDisplayTimer], a
- and $f
- jr nz, .flash_loop
- call FlashReceivedMedal
- ld a, [wMedalDisplayTimer]
- cp $e0
- jr nz, .flash_loop
- ldtx hl, WonTheMedalText
- call PrintScrollableText_NoTextBoxLabel
- call WaitForSongToFinish
- call ResumeSong
- pop af
- ld [wd291], a
- ret
-
-MasterMedalNames: ; 1030b (4:430b)
- tx GrassClubMapNameText
- tx ScienceClubMapNameText
- tx FireClubMapNameText
- tx WaterClubMapNameText
- tx LightningClubMapNameText
- tx PsychicClubMapNameText
- tx RockClubMapNameText
- tx FightingClubMapNameText
-
-GiveBoosterPack: ; 1031b (4:431b)
- ld c, a
- ld a, [wd291]
- push af
- push bc
- call DisableLCD
- call Func_10000
- xor a
- ld [wTextBoxFrameType], a
- pop bc
- push bc
- ld b, 0
- ld hl, BoosterTypes
- add hl, bc
- ld a, [hl]
- ld c, a
- add a
- add a
- ld c, a
- ld hl, BoosterScenesAndNameTexts
- add hl, bc
- ld a, [hli]
- push hl
- lb bc, 6, 0
- call LoadBoosterGfx
- pop hl
- ld a, [hli]
- ld [wTxRam3], a
- xor a
- ld [wTxRam3 + 1], a
- ld a, [hli]
- ld [wTxRam2], a
- ld a, [hl]
- ld [wTxRam2 + 1], a
- call FlashWhiteScreen
- call PauseSong
- ld a, MUSIC_BOOSTER_PACK
- call PlaySong
- pop bc
- ld a, c
- farcall GenerateBoosterPack
- ldtx hl, ReceivedBoosterPackText
- ld a, [wAnotherBoosterPack]
- cp TRUE
- jr nz, .first_booster
- ldtx hl, AndAnotherBoosterPackText
-.first_booster
- call PrintScrollableText_NoTextBoxLabel
- call WaitForSongToFinish
- call ResumeSong
- ldtx hl, CheckedCardsInBoosterPackText
- call PrintScrollableText_NoTextBoxLabel
- call DisableLCD
- call Func_1288c
- call ZeroObjectPositions
- ld a, $1
- ld [wVBlankOAMCopyToggle], a
- ld a, $4
- ld [wTextBoxFrameType], a
- farcall OpenBoosterPack
- farcall WhiteOutDMGPals
- call DoFrameIfLCDEnabled
- pop af
- ld [wd291], a
- ret
-
-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
-
-_PauseMenu_Exit: ; 103d2 (4:43d2)
- ret
-
-Duel_Init: ; 103d3 (4:43d3)
- ld a, [wd291]
- push af
- call DisableLCD
- call Func_10000
- ld a, $4
- ld [wTextBoxFrameType], a
- lb de, 0, 12
- lb bc, 20, 6
- call DrawRegularTextBox
- ld a, [wNPCDuelDeckID]
- add a
- add a
- ld c, a
- ld b, $0
- ld hl, OpponentTitlesAndDeckNames
- add hl, bc
- ld a, [hli]
- ld [wTxRam2], a
- ld a, [hli]
- ld [wTxRam2 + 1], a
- push hl
- ld a, [wOpponentName]
- ld [wTxRam2_b], a
- ld a, [wOpponentName + 1]
- ld [wTxRam2_b + 1], a
- ld hl, OpponentTitleAndNameTextCoords
- call Func_111b3 ; LoadDuelistName
- pop hl
- ld a, [hli]
- ld [wTxRam2], a
- ld c, a
- ld a, [hli]
- ld [wTxRam2 + 1], a
- or c
- jr z, .asm_10425
- ld hl, OpponentDeckNameTextCoords
- call Func_111b3 ; LoadDeckName
-
-.asm_10425
- lb bc, 7, 3
- ld a, [wOpponentPortrait]
- call Func_3e2a ; LoadDuelistPortrait
- ld a, [wMatchStartTheme]
- call PlaySong
- call FlashWhiteScreen
- call DoFrameIfLCDEnabled
- lb bc, $2f, $1d ; cursor tile, tile behind cursor
- lb de, 18, 17 ; x, y
- call SetCursorParametersForTextBox
- call WaitForButtonAorB
- call WaitForSongToFinish
- call Func_10ab4 ; fade out
- pop af
- ld [wd291], a
- ret
-
-OpponentTitleAndNameTextCoords: ; 10451 (4:4451)
- db 1, 14
- tx OpponentTitleAndNameText
- db $ff
-
-OpponentDeckNameTextCoords: ; 10456 (4:4456)
- db 1, 16
- tx OpponentDeckNameText
- db $ff
-
-OpponentTitlesAndDeckNames: ; 1045b (4:445b)
- tx TechText
- tx SamsPracticeDeckName
-
- tx EmptyText
- dw NULL
-
- tx TechText
- tx SamsPracticeDeckName
-
- tx EmptyText
- dw NULL
-
- tx EmptyText
- dw NULL
-
- tx EmptyText
- dw NULL
-
- tx EmptyText
- dw NULL
-
- tx EmptyText
- dw NULL
-
- tx EmptyText
- dw NULL
-
- tx TechText
- tx LightningAndFireDeckName
-
- tx TechText
- tx WaterAndFightingDeckName
-
- tx TechText
- tx GrassAndPsychicDeckName
-
- tx GrandMasterText
- tx LegendaryMoltresDeckName
-
- tx GrandMasterText
- tx LegendaryZapdosDeckName
-
- tx GrandMasterText
- tx LegendaryArticunoDeckName
-
- tx GrandMasterText
- tx LegendaryDragoniteDeckName
-
- tx FightingClubMasterText
- tx FirstStrikeDeckName
-
- tx RockClubMasterText
- tx RockCrusherDeckName
-
- tx WaterClubMasterText
- tx GoGoRainDanceDeckName
-
- tx LightningClubMasterText
- tx ZappingSelfdestructDeckName
-
- tx GrassClubMasterText
- tx FlowerPowerDeckName
-
- tx PsychicClubMasterText
- tx StrangePsyshockDeckName
-
- tx ScienceClubMasterText
- tx WondersofScienceDeckName
-
- tx FireClubMasterText
- tx FireChargeDeckName
-
- tx EmptyText
- tx ImRonaldDeckName
-
- tx EmptyText
- tx PowerfulRonaldDeckName
-
- tx EmptyText
- tx InvincibleRonaldDeckName
-
- tx EmptyText
- tx LegendaryRonaldDeckName
-
- tx FightingClubMemberText
- tx MusclesforBrainsDeckName
-
- tx FightingClubMemberText
- tx HeatedBattleDeckName
-
- tx FightingClubMemberText
- tx LovetoBattleDeckName
-
- tx RockClubMemberText
- tx ExcavationDeckName
-
- tx RockClubMemberText
- tx BlisteringPokemonDeckName
-
- tx RockClubMemberText
- tx HardPokemonDeckName
-
- tx WaterClubMemberText
- tx WaterfrontPokemonDeckName
-
- tx WaterClubMemberText
- tx LonelyFriendsDeckName
-
- tx WaterClubMemberText
- tx SoundoftheWavesDeckName
-
- tx LightningClubMemberText
- tx PikachuDeckName
-
- tx LightningClubMemberText
- tx BoomBoomSelfdestructDeckName
-
- tx LightningClubMemberText
- tx PowerGeneratorDeckName
-
- tx GrassClubMemberText
- tx EtceteraDeckName
-
- tx GrassClubMemberText
- tx FlowerGardenDeckName
-
- tx GrassClubMemberText
- tx KaleidoscopeDeckName
-
- tx PsychicClubMemberText
- tx GhostDeckName
-
- tx PsychicClubMemberText
- tx NapTimeDeckName
-
- tx PsychicClubMemberText
- tx StrangePowerDeckName
-
- tx ScienceClubMemberText
- tx FlyinPokemonDeckName
-
- tx ScienceClubMemberText
- tx LovelyNidoranDeckName
-
- tx ScienceClubMemberText
- tx PoisonDeckName
-
- tx FireClubMemberText
- tx AngerDeckName
-
- tx FireClubMemberText
- tx FlamethrowerDeckName
-
- tx FireClubMemberText
- tx ReshuffleDeckName
-
- tx StrangeLifeformText
- tx ImakuniDeckName
-
-_PCMenu_Glossary: ; 1052f (4:452f)
- ld a, [wd291]
- push af
- call Func_10000
- lb de, $30, $ff
- call SetupText
- call FlashWhiteScreen
- farcall OpenGlossaryScreen
- pop af
- ld [wd291], a
- ret
-
-_PauseMenu_Config: ; 10548 (4:4548)
- ld a, [wd291]
- push af
- ld a, [wLineSeparation]
- push af
- xor a
- ld [wConfigExitSettingsCursorPos], a
- ld a, 1
- ld [wLineSeparation], a
- call Func_10000
- lb de, 0, 3
- lb bc, 20, 5
- call DrawRegularTextBox
- lb de, 0, 9
- lb bc, 20, 5
- call DrawRegularTextBox
- ld hl, Unknown_105bc
- call Func_111b3
- call Func_105cd
- ld a, 0
- call ShowRightArrowCursor
- ld a, 1
- call ShowRightArrowCursor
- xor a
- ld [wCursorBlinkTimer], a
- call FlashWhiteScreen
-.asm_10588
- call DoFrameIfLCDEnabled
- ld a, [wConfigCursorYPos]
- call Func_10649
- ld hl, wCursorBlinkTimer
- inc [hl]
- call ConfigScreenHandleDPadInput
- ldh a, [hKeysPressed]
- and B_BUTTON | START
- jr nz, .asm_105ab
- ld a, [wConfigCursorYPos]
- cp $02
- jr nz, .asm_10588
- ldh a, [hKeysPressed]
- and A_BUTTON
- jr z, .asm_10588
-.asm_105ab
- ld a, SFX_02
- call PlaySFX
- call Func_10606
- pop af
- ld [wLineSeparation], a
- pop af
- ld [wd291], a
- ret
-
-Unknown_105bc: ; 105bc (4:45bc)
- db 1, 1
- tx ConfigMenuTitleText
-
- db 1, 4
- tx ConfigMenuMessageSpeedText
-
- db 1, 10
- tx ConfigMenuDuelAnimationText
-
- db 1, 16
- tx ConfigMenuExitText
-
- db $ff
-
-Func_105cd: ; 105cd (4:45cd)
- call EnableSRAM
- ld c, $00
- ld hl, Unknown_10644
-.loop
- ld a, [sTextSpeed]
- cp [hl]
- jr nc, .match
- inc hl
- inc c
- ld a, c
- cp $04
- jr c, .loop
-.match
- ld a, c
- ld [wConfigMessageSpeedCursorPos], a
- ld a, [sSkipDelayAllowed]
- and $01
- rlca
- ld c, a
- ld a, [wAnimationsDisabled]
- and $01
- or c
- ld c, a
- ld b, $00
- ld hl, Unknown_10602
- add hl, bc
- ld a, [hl]
- ld [wConfigDuelAnimationCursorPos], a
- call DisableSRAM
- ret
-
-; indexes into Unknown_1063c
-; $00: show all
-; $01: skip some
-; $02: none
-Unknown_10602: ; 10602 (4:4602)
- db $00 ; skip delay allowed = false, animations disabled = false
- db $00 ; skip delay allowed = false, animations disabled = true (unused)
- db $01 ; skip delay allowed = true, animations disabled = false
- db $02 ; skip delay allowed = true, animations disabled = true
-
-Func_10606: ; 10606 (4:4606)
- call EnableSRAM
- ld a, [wConfigDuelAnimationCursorPos]
- and $03
- rlca
- ld c, a
- ld b, $00
- ld hl, Unknown_1063c
- add hl, bc
- ld a, [hli]
- ld [wAnimationsDisabled], a
- ld [sAnimationsDisabled], a
- ld a, [hl]
- ld [sSkipDelayAllowed], a
- call DisableSRAM
- ld a, [wConfigMessageSpeedCursorPos]
- ld c, a
- ld b, $00
- ld hl, Unknown_10644
- add hl, bc
- call EnableSRAM
- ld a, [hl]
- ld [sTextSpeed], a
- ld [wTextSpeed], a
- call DisableSRAM
- ret
-
-Unknown_1063c: ; 1063c (4:463c)
-; animation disabled, skip delay allowed
- db FALSE, FALSE ; show all
- db FALSE, TRUE ; skip some
- db TRUE, TRUE ; none
- db FALSE, FALSE ; unused
-
-; text printing delay
-Unknown_10644: ; 10644 (4:4644)
- ; slow to fast
- db 6, 4, 2, 1, 0
-
-Func_10649: ; 10649 (4:4649)
- push af
- ld a, [wCursorBlinkTimer]
- and $10
- jr z, .asm_10654
- pop af
- jr HideRightArrowCursor
-.asm_10654
- pop af
- jr ShowRightArrowCursor
-
-ShowRightArrowCursor: ; 10657 (4:4657)
- push bc
- ld c, a
- ld a, SYM_CURSOR_R
- call Func_10669
- pop bc
- ret
-
-HideRightArrowCursor: ; 10660 (4:4660)
- push bc
- ld c, a
- ld a, SYM_SPACE
- call Func_10669
- pop bc
- ret
-
-Func_10669: ; 10669 (4:4669)
- push af
- sla c
- ld b, $00
- ld hl, ConfigScreenCursorPositions
- add hl, bc
- ld a, [hli]
- ld h, [hl]
- ld l, a
-
- ld a, [hli]
- ld c, a
- ld a, [hli]
- ld b, a
- ld a, [bc]
- add a
- ld c, a
- ld b, $00
- add hl, bc
- ld a, [hli]
- ld b, a
- ld a, [hl]
- ld c, a
- pop af
- call WriteByteToBGMap0
- ret
-
-ConfigScreenCursorPositions: ; 10688 (4:4688)
- dw MessageSpeedCursorPositions
- dw DuelAnimationsCursorPositions
- dw ExitSettingsCursorPosition
-
-MessageSpeedCursorPositions: ; 1068e (4:468e)
- dw wConfigMessageSpeedCursorPos
- db 5, 6
- db 7, 6
- db 9, 6
- db 11, 6
- db 13, 6
-
-DuelAnimationsCursorPositions: ; 1069a (4:469a)
- dw wConfigDuelAnimationCursorPos
- db 1, 12
- db 7, 12
- db 15, 12
-
-ExitSettingsCursorPosition: ; 106a2 (4:46a2)
- dw wConfigExitSettingsCursorPos
- db 1, 16
-
- db 0
-
-ConfigScreenHandleDPadInput: ; 106a7 (4:46a7)
- ldh a, [hDPadHeld]
- and D_PAD
- ret z
- farcall GetDirectionFromDPad
- ld hl, ConfigScreenDPadHandlers
- jp JumpToFunctionInTable
-
-ConfigScreenDPadHandlers: ; 106b6 (4:46b6)
- dw ConfigScreenDPadUp ; up
- dw ConfigScreenDPadRight ; right
- dw ConfigScreenDPadDown ; down
- dw ConfigScreenDPadLeft ; left
-
-ConfigScreenDPadUp: ; 106be (4:46be)
- ld a, -1
- jr ConfigScreenDPadDown.up_or_down
-
-ConfigScreenDPadDown: ; 106c2 (4:46c2)
- ld a, 1
-.up_or_down
- push af
- ld a, [wConfigCursorYPos]
- cp 2
- jr z, .hide_cursor
- call ShowRightArrowCursor
- jr .skip
-.hide_cursor
-; hide "exit settings" cursor if leaving bottom row
- call HideRightArrowCursor
-.skip
- ld a, [wConfigCursorYPos]
- ld b, a
- pop af
- add b
- cp 3
- jr c, .valid
- jr z, .wrap_min
-; wrap max
- ld a, 2 ; max
- jr .valid
-.wrap_min
- xor a ; min
-.valid
- ld [wConfigCursorYPos], a
- ld c, a
- ld b, 0
- ld hl, Unknown_106ff
- add hl, bc
- ld a, [hl]
- ld [wCursorBlinkTimer], a
- ld a, [wConfigCursorYPos]
- call Func_10649
- ld a, SFX_01
- call PlaySFX
- ret
-
-Unknown_106ff: ; 106ff (4:46ff)
- db $18 ; message speed, start hidden
- db $18 ; duel animation, start hidden
- db $8 ; exit settings, start visible
-
-ConfigScreenDPadRight: ; 10702 (4:4702)
- ld a, $01
- jr ConfigScreenDPadLeft.left_or_right
-
-ConfigScreenDPadLeft: ; 10706 (4:4706)
- ld a, $ff
-.left_or_right
- push af
- ld a, [wConfigCursorYPos]
- call HideRightArrowCursor
- pop af
- call Func_1071e
- ld a, [wConfigCursorYPos]
- call ShowRightArrowCursor
- xor a
- ld [wCursorBlinkTimer], a
- ret
-
-Func_1071e: ; 1071e (4:471e)
- push af
- ld a, [wConfigCursorYPos]
- ld c, a
- add a
- add c
- ld c, a
- ld b, $00
- ld hl, Unknown_1074d
- add hl, bc
- ld a, [hli]
- ld e, a
- ld a, [hli]
- ld d, a
- ld c, [hl]
- ld a, [de]
- ld b, a
- pop af
- add b
- cp c
- jr c, .asm_10742
- jr z, .asm_10742
- cp $80
- jr c, .asm_10741
- ld a, c
- jr .asm_10742
-.asm_10741
- xor a
-.asm_10742
- ld [de], a
- ld a, c
- or a
- jr z, .asm_1074c
- ld a, SFX_01
- call PlaySFX
-.asm_1074c
- ret
-
-Unknown_1074d: ; 1074d (4:474d)
-; x pos variable, max x value
- dwb wConfigMessageSpeedCursorPos, 4
- dwb wConfigDuelAnimationCursorPos, 2
- dwb wConfigExitSettingsCursorPos, 0
-
-Func_10756: ; 10756 (4:4756)
- push hl
- push bc
- xor a
- ld [wPCPackSelection], a
- ld hl, wPCPacks
- ld c, NUM_PC_PACKS
-.asm_10761
- ld [hli], a
- dec c
- jr nz, .asm_10761
- ld a, $1
- call TryGivePCPack
- pop bc
- pop hl
- ret
-
-_PCMenu_ReadMail: ; 1076d (4:476d)
- ld a, [wd291]
- push af
- call Func_10000
- lb de, $30, $ff
- call SetupText
- lb de, 0, 0
- lb bc, 20, 12
- call DrawRegularTextBox
- lb de, 0, 12
- lb bc, 20, 6
- call DrawRegularTextBox
- ld hl, Unknown_107d2
- call Func_111b3
- call Func_10996
- xor a
- ld [wCursorBlinkTimer], a
- call FlashWhiteScreen
-.asm_1079c
- call DoFrameIfLCDEnabled
- ld a, [wPCPackSelection]
- call Func_1097c
- call Func_10a05
- ld hl, wCursorBlinkTimer
- inc [hl]
- call PCMailHandleDPadInput
- call PCMailHandleAInput
- ldh a, [hKeysPressed]
- and B_BUTTON
- jr z, .asm_1079c
- ld a, SFX_03
- call PlaySFX
- pop af
- ld [wd291], a
- ret
-
-; unreferenced?
-Unknown_107c2: ; 107c2 (4:47c2)
- db $01, $00, $00, $4a, $21, $b5, $42, $e0
- db $03, $4a, $29, $94, $52, $fF, $7f, $00
-
-Unknown_107d2: ; 107d2 (4:47d2)
- db 1, 0
- tx Text0359
-
- db 1, 14
- tx Text035a
-
- db 0, 20
- tx Text035b
-
- db $ff
-
-PCMailHandleDPadInput: ; 107df (4:47df)
- ldh a, [hDPadHeld]
- and D_PAD
- ret z
- farcall GetDirectionFromDPad
- ld [wPCLastDirectionPressed], a
- ld a, [wPCPackSelection]
- push af
- call Func_10989
-.asm_107f2
- ld a, [wPCPackSelection]
- add a
- add a
- ld c, a
- ld a, [wPCLastDirectionPressed]
- add c
- ld c, a
- ld b, $00
- ld hl, PCMailTransitionTable
- add hl, bc
- ld a, [hl]
- ld [wPCPackSelection], a
- ld c, a
- ld hl, wPCPacks
- add hl, bc
- ld a, [hl]
- or a
- jr z, .asm_107f2
- pop af
- ld c, a
- ld a, [wPCPackSelection]
- cp c
- jr z, .asm_1081d
- ld a, SFX_01
- call PlaySFX
-.asm_1081d
- call Func_10985
- xor a
- ld [wCursorBlinkTimer], a
- ret
-
-PCMailTransitionTable: ; 10825 (4:4825)
-; up, right, down, left
- db $0c, $01, $03, $02 ; mail 1
- db $0d, $02, $04, $00 ; mail 2
- db $0e, $00, $05, $01 ; mail 3
- db $00, $04, $06, $05 ; mail 4
- db $01, $05, $07, $03 ; mail 5
- db $02, $03, $08, $04 ; mail 6
- db $03, $07, $09, $08 ; mail 7
- db $04, $08, $0a, $06 ; mail 8
- db $05, $06, $0b, $07 ; mail 9
- db $06, $0a, $0c, $0b ; mail 10
- db $07, $0b, $0d, $09 ; mail 11
- db $08, $09, $0e, $0a ; mail 12
- db $09, $0d, $00, $0e ; mail 13
- db $0a, $0e, $01, $0c ; mail 14
- db $0b, $0c, $02, $0d ; mail 15
-
-PCMailHandleAInput: ; 10861 (4:4861)
- ldh a, [hKeysPressed]
- and A_BUTTON
- ret z
- ld a, SFX_02
- call PlaySFX
- call Func_10996
- call Func_10985
- ld a, [wPCPackSelection]
- ld c, a
- ld b, $00
- ld hl, wPCPacks
- add hl, bc
- ld a, [hl]
- ld [wSelectedPCPack], a
- and $7f
- ld [hl], a
- or a
- ret z
- add a
- add a
- ld c, a
- ld hl, PCMailTextPages
- add hl, bc
- ld a, [hli]
- push hl
- ld h, [hl]
- ld l, a
- ld a, [wPCPackSelection]
- call Func_109ab
- call PrintScrollableText_WithTextBoxLabel
- call TryOpenPCMailBoosterPack
- call Func_10000
- lb de, $30, $ff
- call SetupText
- lb de, 0, 0
- lb bc, 20, 12
- call DrawRegularTextBox
- ld hl, Unknown_107d2
- call Func_111b3
- call Func_10996
- call Func_10985
- call FlashWhiteScreen
- pop hl
- inc hl
- ld a, [hli]
- ld h, [hl]
- ld l, a
- or h
- jr z, .no_page_two
- ld a, [wPCPackSelection]
- call Func_109ab
- call PrintScrollableText_WithTextBoxLabel
-.no_page_two
- lb de, 0, 12
- lb bc, 20, 6
- call DrawRegularTextBox
- ld hl, Unknown_107d2
- call Func_111b3
- call DoFrameIfLCDEnabled
- ret
-
-PCMailTextPages: ; 108e0 (4:48e0)
- ; unused
- dw NULL
- dw NULL
-
- ; mail 1
- tx Text0401
- tx Text0402
-
- ; mail 2
- tx Text0403
- tx Text0404
-
- ; mail 3
- tx Text0405
- tx Text0406
-
- ; mail 4
- tx Text0407
- tx Text0408
-
- ; mail 5
- tx Text0409
- tx Text040a
-
- ; mail 6
- tx Text040b
- tx Text040c
-
- ; mail 7
- tx Text040d
- tx Text040e
-
- ; mail 8
- tx Text040f
- tx Text0410
-
- ; mail 9
- tx Text0411
- tx Text0412
-
- ; mail 10
- tx Text0413
- dw NULL
-
- ; mail 11
- tx Text0414
- dw NULL
-
- ; mail 12
- tx Text0415
- dw NULL
-
- ; mail 13
- tx Text0416
- dw NULL
-
- ; mail 14
- tx Text0417
- dw NULL
-
- ; mail 15
- tx Text0418
- dw NULL
-
-TryOpenPCMailBoosterPack: ; 10920 (4:4920)
- xor a
- ld [wAnotherBoosterPack], a
- ld a, [wSelectedPCPack]
- bit 7, a
- jr z, .booster_already_open
- and $7f
- add a
- ld c, a
- ld b, $00
- ld hl, PCMailBoosterPacks
- add hl, bc
- ld a, [hli]
- push hl
- call GiveBoosterPack
- ld a, $01
- ld [wAnotherBoosterPack], a
- pop hl
- ld a, [hl]
- or a
- jr z, .done
- call GiveBoosterPack
-.done
- call DisableLCD
- ret
-
-.booster_already_open
- call Func_10000
- lb de, $30, $ff
- call SetupText
- ldtx hl, Text0419
- call PrintScrollableText_NoTextBoxLabel
- jr .done
-
-PCMailBoosterPacks: ; 1095c (4:495c)
- db $00, $00 ; unused
- db BOOSTER_COLOSSEUM_NEUTRAL, $00 ; mail 1
- db BOOSTER_LABORATORY_PSYCHIC, $00 ; mail 2
- db BOOSTER_EVOLUTION_GRASS, $00 ; mail 3
- db BOOSTER_MYSTERY_LIGHTNING_COLORLESS, $00 ; mail 4
- db BOOSTER_EVOLUTION_FIGHTING, $00 ; mail 5
- db BOOSTER_COLOSSEUM_FIRE, $00 ; mail 6
- db BOOSTER_LABORATORY_PSYCHIC, $00 ; mail 7
- db BOOSTER_LABORATORY_PSYCHIC, $00 ; mail 8
- db BOOSTER_MYSTERY_WATER_COLORLESS, $00 ; mail 9
- db BOOSTER_COLOSSEUM_NEUTRAL, BOOSTER_EVOLUTION_NEUTRAL ; mail 10
- db BOOSTER_MYSTERY_NEUTRAL, BOOSTER_LABORATORY_NEUTRAL ; mail 11
- db BOOSTER_COLOSSEUM_TRAINER, $00 ; mail 12
- db BOOSTER_EVOLUTION_TRAINER, $00 ; mail 13
- db BOOSTER_MYSTERY_TRAINER_COLORLESS, $00 ; mail 14
- db BOOSTER_LABORATORY_TRAINER, $00 ; mail 15
-
-Func_1097c: ; 1097c (4:497c)
- ld a, [wCursorBlinkTimer]
- and $10
- jr z, Func_10985
- jr Func_10989
-Func_10985: ; 10985 (4:4985)
- ld a, SYM_CURSOR_R
- jr Func_1098d
-Func_10989: ; 10989 (4:4989)
- ld a, SYM_SPACE
- jr Func_1098d
-Func_1098d: ; 1098d (4:498d)
- push af
- call Func_10a41
- pop af
- call WriteByteToBGMap0
- ret
-
-Func_10996: ; 10996 (4:4996)
- ld e, $00
- ld hl, wPCPacks
-.asm_1099b
- ld a, [hl]
- or a
- jr z, .asm_109a3
- ld a, e
- call Func_109d7
-.asm_109a3
- inc hl
- inc e
- ld a, e
- cp $0f
- jr c, .asm_1099b
- ret
-
-Func_109ab: ; 109ab (4:49ab)
- push hl
- add a
- ld e, a
- ld d, $00
- ld hl, Unknown_109b9
- add hl, de
- ld e, [hl]
- inc hl
- ld d, [hl]
- pop hl
- ret
-
-Unknown_109b9: ; 109b9 (4:49b9)
- tx Text035d
- tx Text035e
- tx Text035f
- tx Text0360
- tx Text0361
- tx Text0362
- tx Text0363
- tx Text0364
- tx Text0365
- tx Text0366
- tx Text0367
- tx Text0368
- tx Text0369
- tx Text036a
- tx Text036b
-
-Func_109d7: ; 109d7 (4:49d7)
- push hl
- push bc
- push de
- push af
- call Func_109ab
- ld l, e
- ld h, d
- pop af
- call Func_10a2f
- ld e, c
- ld d, b
- call InitTextPrinting
- call PrintTextNoDelay
- pop de
- pop bc
- pop hl
- ret
-
-Func_109f0: ; 109f0 (4:49f0)
- push hl
- push bc
- push de
- call Func_10a2f
- ld e, c
- ld d, b
- call InitTextPrinting
- ldtx hl, Text035c
- call PrintTextNoDelay
- pop de
- pop bc
- pop hl
- ret
-
-Func_10a05: ; 10a05 (4:4a05)
- ld e, $00
- ld hl, wPCPacks
-.asm_10a0a
- ld a, [hl]
- or a
- jr z, .asm_10a27
- bit 7, a
- jr z, .asm_10a27
- ld a, [wCursorBlinkTimer]
- and $0c
- jr z, .asm_10a23
- cp $0c
- jr nz, .asm_10a27
- ld a, e
- call Func_109f0
- jr .asm_10a27
-.asm_10a23
- ld a, e
- call Func_109d7
-.asm_10a27
- inc hl
- inc e
- ld a, e
- cp $0f
- jr c, .asm_10a0a
- ret
-
-Func_10a2f: ; 10a2f (4:4a2f)
- ld c, a
- ld a, [wPCPackSelection]
- push af
- ld a, c
- ld [wPCPackSelection], a
- call Func_10a41
- inc b
- pop af
- ld [wPCPackSelection], a
- ret
-
-Func_10a41: ; 10a41 (4:4a41)
- push hl
- ld a, [wPCPackSelection]
- add a
- ld c, a
- ld b, $00
- ld hl, PCMailCoordinates
- add hl, bc
- ld a, [hli]
- ld b, a
- ld c, [hl]
- pop hl
- ret
-
-PCMailCoordinates: ; 10a52 (4:4a52)
- db 1, 2 ; mail 1
- db 7, 2 ; mail 2
- db 13, 2 ; mail 3
- db 1, 4 ; mail 4
- db 7, 4 ; mail 5
- db 13, 4 ; mail 6
- db 1, 6 ; mail 7
- db 7, 6 ; mail 8
- db 13, 6 ; mail 9
- db 1, 8 ; mail 10
- db 7, 8 ; mail 11
- db 13, 8 ; mail 12
- db 1, 10 ; mail 13
- db 7, 10 ; mail 14
- db 13, 10 ; mail 15
-
-; gives the pc pack described in a
-TryGivePCPack: ; 10a70 (4:4a70)
- push hl
- push bc
- push de
- ld b, a
- ld c, NUM_PC_PACKS
- ld hl, wPCPacks
-.searchLoop1
- ld a, [hli]
- and $7f
- cp b
- jr z, .quit
- dec c
- jr nz, .searchLoop1
- ld c, NUM_PC_PACKS
- ld hl, wPCPacks
-.findFreeSlotLoop
- ld a, [hl]
- and $7f
- jr z, .foundFreeSlot
- inc hl
- dec c
- jr nz, .findFreeSlotLoop
- debug_nop
- jr .quit
-
-.foundFreeSlot
- ld a, b
- or PACK_OPENED ; mark pack as unopened
- ld [hl], a
-
-.quit
- pop de
- pop bc
- pop hl
- ret
-
-; writes wd293 with byte depending on console
-; every entry in the list is $00
-Func_10a9b: ; 10a9b (4:4a9b)
- push hl
- ld a, [wConsole]
- add LOW(.data_10ab1)
- ld l, a
- ld a, HIGH(.data_10ab1)
- adc 0
- ld h, a
- ld a, [hl]
- ld [wd293], a
- xor a
- ld [wd317], a
- pop hl
- ret
-
-.data_10ab1
- db $00 ; CONSOLE_DMG
- db $00 ; CONSOLE_SGB
- db $00 ; CONSOLE_CGB
-
-Func_10ab4: ; 10ab4 (4:4ab4)
- ld a, [wLCDC]
- bit 7, a
- jr z, .lcd_off
- ld a, [wd293]
- ld [wd294], a
- ld [wd295], a
- ld [wd296], a
- ld de, PALRGB_WHITE
- ld hl, wTempBackgroundPalettesCGB
- ld bc, NUM_BACKGROUND_PALETTES palettes
- call FillMemoryWithDE
- call RestoreFirstColorInOBPals
- call FadeScreenToTempPals
- call DisableLCD
- ret
-
-.lcd_off
- ld a, [wd293]
- ld [wBGP], a
- ld [wOBP0], a
- ld [wOBP1], a
- ld de, PALRGB_WHITE
- ld hl, wBackgroundPalettesCGB
- ld bc, NUM_BACKGROUND_PALETTES palettes
- call FillMemoryWithDE
- call FlushAllPalettes
- ret
-
-Func_10af9: ; 10af9 (4:4af9)
- call BackupPalsAndSetWhite
- call RestoreFirstColorInOBPals
- call FlushAllPalettes
- call EnableLCD
- jp FadeScreenToTempPals
-
-BackupPalsAndSetWhite: ; 10b08 (4:4b08)
- ld a, [wBGP]
- ld [wd294], a
- ld a, [wOBP0]
- ld [wd295], a
- ld a, [wOBP1]
- ld [wd296], a
- ld hl, wBackgroundPalettesCGB
- ld de, wTempBackgroundPalettesCGB
- ld bc, NUM_BACKGROUND_PALETTES palettes + NUM_OBJECT_PALETTES palettes
- call CopyDataHLtoDE_SaveRegisters
- jr Func_10b28 ; can be fallthrough
-
-; fills wBackgroundPalettesCGB with white pal
-Func_10b28: ; 10b28 (4:4b28)
- ld a, [wd293]
- ld [wBGP], a
- ld [wOBP0], a
- ld [wOBP1], a
- ld de, PALRGB_WHITE
- ld hl, wBackgroundPalettesCGB
- ld bc, NUM_BACKGROUND_PALETTES palettes
- call FillMemoryWithDE
- ret
-
-; gets from backup OB pals the first color
-; of each pal and writes them in wObjectPalettesCGB
-RestoreFirstColorInOBPals: ; 10b41 (4:4b41)
- ld hl, wTempObjectPalettesCGB
- ld de, wObjectPalettesCGB
- ld c, NUM_OBJECT_PALETTES
-.loop_pals
- push bc
- ld a, [hli]
- ld [de], a
- inc de
- ld a, [hl]
- ld [de], a
- ld bc, CGB_PAL_SIZE - 1
- add hl, bc
- ld a, c
- add e
- ld e, a
- ld a, b
- adc d
- ld d, a
- pop bc
- dec c
- jr nz, .loop_pals
- ret
-
-FadeScreenToTempPals: ; 10b5e (4:4b5e)
- ld a, [wVBlankCounter]
- push af
- ld c, $10
-.loop
- push bc
- ld a, c
- and %11
- cp 0
- call z, Func_10b85
- call FadeBGPalIntoTemp3
- call FadeOBPalIntoTemp
- call FlushAllPalettes
- call DoFrameIfLCDEnabled
- pop bc
- dec c
- dec c
- jr nz, .loop
- pop af
- ld b, a
- ld a, [wVBlankCounter]
- sub b
- ret
-
-; does something with wBGP given wd294
-; mixes them into a single value?
-Func_10b85: ; 10b85 (4:4b85)
- push bc
- ld c, $03
- ld hl, wBGP
- ld de, wd294
-.asm_10b8e
- push bc
- ld b, [hl]
- ld a, [de]
- ld c, a
- call .Func_10b9e
- ld [hl], a
- pop bc
- inc de
- inc hl
- dec c
- jr nz, .asm_10b8e
- pop bc
- ret
-
-.Func_10b9e
- push bc
- push de
- ld e, 4
- ld d, $00
-.loop
- call .Func_10bba
- or d
- rlca
- rlca
- ld d, a
- rlc b
- rlc b
- rlc c
- rlc c
- dec e
- jr nz, .loop
- ld a, d
- pop de
- pop bc
- ret
-
-; calculates ((b & %11) << 2) | (c & %11)
-; that is, %0000xxyy, where x and y are
-; the 2 lower bits of b and c respectively
-; and outputs the entry from a table given that value
-.Func_10bba
- push hl
- push bc
- ld a, %11
- and b
- add a
- add a
- ld b, a
- ld a, %11
- and c
- or b
- ld c, a
- ld b, $00
- ld hl, .data_10bd1
- add hl, bc
- ld a, [hl]
- pop bc
- pop hl
- ret
-
-.data_10bd1
- db %00 ; b = %00 | c = %00
- db %01 ; b = %00 | c = %01
- db %01 ; b = %00 | c = %10
- db %01 ; b = %00 | c = %11
- db %00 ; b = %01 | c = %00
- db %01 ; b = %01 | c = %01
- db %10 ; b = %01 | c = %10
- db %10 ; b = %01 | c = %11
- db %01 ; b = %10 | c = %00
- db %01 ; b = %10 | c = %01
- db %10 ; b = %10 | c = %10
- db %11 ; b = %10 | c = %11
- db %10 ; b = %11 | c = %00
- db %10 ; b = %11 | c = %01
- db %10 ; b = %11 | c = %10
- db %11 ; b = %11 | c = %11
-
-FadeOBPalIntoTemp: ; 10be1 (4:4be1)
- push bc
- ld c, 4 palettes
- ld hl, wObjectPalettesCGB
- ld de, wTempObjectPalettesCGB
- jr FadePalIntoAnother
-
-FadeBGPalIntoTemp1: ; 10bec (4:4bec)
- push bc
- ld c, 2 palettes
- ld hl, wBackgroundPalettesCGB
- ld de, wTempBackgroundPalettesCGB
- jr FadePalIntoAnother
-
-FadeBGPalIntoTemp2: ; 10bf7 (4:4bf7)
- push bc
- ld c, 2 palettes
- ld hl, wBackgroundPalettesCGB + 4 palettes
- ld de, wTempBackgroundPalettesCGB + 4 palettes
- jr FadePalIntoAnother
-
-FadeBGPalIntoTemp3: ; 10c02 (4:4c02)
- push bc
- ld c, 4 palettes
- ld hl, wBackgroundPalettesCGB
- ld de, wTempBackgroundPalettesCGB
-; fallthrough
-
-; hl = input pal to modify
-; de = pal to fade into
-; c = number of colors to fade
-FadePalIntoAnother: ; 10c0b (4:4c0b)
- push bc
- ld a, [de]
- inc de
- ld c, a
- ld a, [de]
- inc de
- ld b, a
- push de
- push bc
- ld c, [hl]
- inc hl
- ld b, [hl]
- pop de
- call .GetFadedColor
- ; overwrite with new color
- ld [hld], a
- ld [hl], c
- inc hl
- inc hl
- pop de
- pop bc
- dec c
- jr nz, FadePalIntoAnother
- pop bc
- ret
-
-; fade pal bc to de
-; output resulting pal in a and c
-.GetFadedColor
- push hl
- ld a, c
- cp e
- jr nz, .unequal
- ld a, b
- cp d
- jr z, .skip
-
-.unequal
- ; red
- ld a, e
- and %11111
- ld l, a
- ld a, c
- and %11111
- call .FadeColor
- ldh [hffb6], a
-
- ; green
- ld a, e
- and %11100000
- ld l, a
- ld a, d
- and %11
- or l
- swap a
- rrca
- ld l, a
- ld a, c
- and %11100000
- ld h, a
- ld a, b
- and %11
- or h
- swap a
- rrca
- call .FadeColor
- rlca
- swap a
- ld h, a
- and %11
- ldh [hffb7], a
- ld a, %11100000
- and h
- ld h, a
- ldh a, [hffb6]
- or h
- ld h, a
-
- ; blue
- ld a, d
- and %1111100
- rrca
- rrca
- ld l, a
- ld a, b
- and %1111100
- rrca
- rrca
- call .FadeColor
- rlca
- rlca
- ld b, a
- ldh a, [hffb7]
- or b
- ld c, h
-.skip
- pop hl
- ret
-
-; compares color in a and in l
-; if a is smaller/greater than l, then
-; increase/decrease its value up to l
-; up to a maximum of 4
-; a = pal color (red, green or blue)
-; l = pal color (red, green or blue)
-.FadeColor
- cp l
- ret z ; same value
- jr c, .incr_a
-; decr a
- dec a
- cp l
- ret z
- dec a
- cp l
- ret z
- dec a
- cp l
- ret z
- dec a
- ret
-
-.incr_a
- inc a
- cp l
- ret z
- inc a
- cp l
- ret z
- inc a
- cp l
- ret z
- inc a
- ret
-
-Func_10c96: ; 10c96 (4:4c96)
- ldh a, [hBankSRAM]
- push af
- push bc
- ld a, BANK("SRAM1")
- call BankswitchSRAM
- call CopyPalsToSRAMBuffer
- call Func_10ab4
- pop bc
- ld a, c
- or a
- jr nz, .asm_10cb0
- call LoadPalsFromSRAMBuffer
- call Func_10af9
-
-.asm_10cb0
- call EnableLCD
- pop af
- call BankswitchSRAM
- call DisableSRAM
- ret
-
-; copies current BG and OP pals,
-; wBackgroundPalettesCGB and wObjectPalettesCGB
-; to sGfxBuffer2
-CopyPalsToSRAMBuffer: ; 10cbb (4:4cbb)
- ldh a, [hBankSRAM]
-
- push af
- cp BANK("SRAM1")
- jr z, .ok
- debug_nop
-.ok
- ld a, BANK("SRAM1")
- call BankswitchSRAM
- ld hl, sGfxBuffer2
- ld a, [wBGP]
- ld [hli], a
- ld a, [wOBP0]
- ld [hli], a
- ld a, [wOBP1]
- ld [hli], a
- ld e, l
- ld d, h
- ld hl, wBackgroundPalettesCGB
- ld bc, NUM_BACKGROUND_PALETTES palettes + NUM_OBJECT_PALETTES palettes
- call CopyDataHLtoDE_SaveRegisters
- pop af
-
- call BankswitchSRAM
- call DisableSRAM
- ret
-
-; loads BG and OP pals,
-; wBackgroundPalettesCGB and wObjectPalettesCGB
-; from sGfxBuffer2
-LoadPalsFromSRAMBuffer: ; 10cea (4:4cea)
- ldh a, [hBankSRAM]
-
- push af
- cp BANK("SRAM1")
- jr z, .ok
- debug_nop
-.ok
- ld a, BANK("SRAM1")
- call BankswitchSRAM
- ld hl, sGfxBuffer2
- ld a, [hli]
- ld [wBGP], a
- ld a, [hli]
- ld [wOBP0], a
- ld a, [hli]
- ld [wOBP1], a
- ld de, wBackgroundPalettesCGB
- ld bc, NUM_BACKGROUND_PALETTES palettes + NUM_OBJECT_PALETTES palettes
- call CopyDataHLtoDE_SaveRegisters
- pop af
-
- call BankswitchSRAM
- call DisableSRAM
- ret
-
-; backs up all palettes
-; and writes 4 BG pals with white pal
-Func_10d17: ; 10d17 (4:4d17)
- ld a, [wBGP]
- ld [wd294], a
- ld a, [wOBP0]
- ld [wd295], a
- ld a, [wOBP1]
- ld [wd296], a
- ld hl, wBackgroundPalettesCGB
- ld de, wTempBackgroundPalettesCGB
- ld bc, NUM_BACKGROUND_PALETTES palettes + NUM_OBJECT_PALETTES palettes
- call CopyDataHLtoDE_SaveRegisters
-
- ld a, [wd293]
- ld [wBGP], a
- ld de, PALRGB_WHITE
- ld hl, wBackgroundPalettesCGB
- ld bc, 4 palettes
- call FillMemoryWithDE
- call FlushAllPalettes
-
- ld a, $10
- ld [wd317], a
- ret
-
-Func_10d50: ; 10d50 (4:4d50)
- ld a, [wd293]
- ld [wd294], a
- ld a, [wOBP0]
- ld [wd295], a
- ld a, [wOBP1]
- ld [wd296], a
- ld de, PALRGB_WHITE
- ld hl, wTempBackgroundPalettesCGB
- ld bc, 4 palettes
- call FillMemoryWithDE
- ld a, $10
- ld [wd317], a
- ret
-
-; does stuff according to bottom 2 bits from wd317:
-; - if equal to %01, modify wBGP
-; - if bottom bit not set, fade BG pals 0 and 1
-; - if bottom bit is set, fade BG pals 4 and 5
-; and Flush Palettes
-; then decrements wd317
-; does nothing if wd317 is 0
-Func_10d74: ; 10d74 (4:4d74)
- ld a, [wd317]
- or a
- ret z
- and %11
- ld c, a
- cp $1
- call z, Func_10b85
- bit 0, c
- call z, FadeBGPalIntoTemp1
- bit 0, c
- call nz, FadeBGPalIntoTemp2
- bit 0, c
- call nz, FlushAllPalettes
- ld a, [wd317]
- dec a
- ld [wd317], a
- ret
-
-Unknown_10d98: ; 10d98 (4:4d98)
- db 12, 0 ; start menu coords
- db 8, 14 ; start menu text box dimensions
-
- db 14, 2 ; text alignment for InitTextPrinting
- tx PauseMenuOptionsText
- db $ff
-
- db 13, 2 ; cursor x, cursor y
- db 2 ; y displacement between items
- db 6 ; number of items
- db SYM_CURSOR_R ; cursor tile number
- db SYM_SPACE ; tile behind cursor
- dw NULL ; function pointer if non-0
-
-Unknown_10da9: ; 10da9 (4:4da9)
- db 10, 0 ; start menu coords
- db 10, 12 ; start menu text box dimensions
-
- db 12, 2 ; text alignment for InitTextPrinting
- tx Text0351
- db $ff
-
- db 11, 2 ; cursor x, cursor y
- db 2 ; y displacement between items
- db 5 ; number of items
- db SYM_CURSOR_R ; cursor tile number
- db SYM_SPACE ; tile behind cursor
- dw NULL ; function pointer if non-0
-
-Func_10dba: ; 10dba (4:4dba)
- ld a, 1 << AUTO_CLOSE_TEXTBOX
- farcall SetOverworldNPCFlags
- ld a, [wSelectedGiftCenterMenuItem]
- ld hl, Unknown_10e17
- farcall InitAndPrintPauseMenu
-.asm_10dca
- call DoFrameIfLCDEnabled
- call HandleMenuInput
- jr nc, .asm_10dca
- ld a, e
- ld [wSelectedGiftCenterMenuItem], a
- ldh a, [hCurMenuItem]
- cp e
- jr z, .asm_10ddd
- ld a, $4
-
-.asm_10ddd
- ld [wd10e], a
- push af
- ld hl, Unknown_10df0
- call JumpToFunctionInTable
- farcall CloseTextBox
- call DoFrameIfLCDEnabled
- pop af
- ret
-
-Unknown_10df0: ; 10df0 (4:4df0)
- dw Func_10dfb
- dw Func_10dfb
- dw Func_10dfb
- dw Func_10dfb
- dw Func_10dfa
-
-Func_10dfa: ; 10dfa (4:4dfa)
- ret
-
-Func_10dfb: ; 10dfb (4:4dfb)
- ld a, [wd10e]
- add a
- ld c, a
- ld b, $00
- ld hl, Unknown_10e0f
- add hl, bc
- ld a, [hli]
- ld [wTxRam2], a
- ld a, [hl]
- ld [wTxRam2 + 1], a
- ret
-
-Unknown_10e0f: ; 10e0f (4:4e0f)
- tx Text0355
- tx Text0356
- tx Text0357
- tx Text0358
-
-Unknown_10e17: ; 10e17 (4:4e17)
- db 4, 0 ; start menu coords
- db 16, 12 ; start menu text box dimensions
-
- db 6, 2 ; text alignment for InitTextPrinting
- tx Text0354
- db $ff
-
- db 5, 2 ; cursor x, cursor y
- db 2 ; y displacement between items
- db 5 ; number of items
- db SYM_CURSOR_R ; cursor tile number
- db SYM_SPACE ; tile behind cursor
- dw NULL ; function pointer if non-0
-
-INCLUDE "engine/overworld_map.asm"
-
-; prints $ff-terminated list of text to text box
-; given 2 bytes for text alignment and 2 bytes for text ID
-Func_111b3: ; 111b3 (4:51b3)
- ldh a, [hffb0]
- push af
- ld a, $02
- ldh [hffb0], a
-
- push hl
-.loop_text_print_1
- ld d, [hl]
- inc hl
- bit 7, d
- jr nz, .next
- inc hl
- ld a, [hli]
- push hl
- ld h, [hl]
- ld l, a
- call PrintTextNoDelay
- pop hl
- inc hl
- jr .loop_text_print_1
-
-.next
- pop hl
- pop af
- ldh [hffb0], a
-.loop_text_print_2
- ld d, [hl]
- inc hl
- bit 7, d
- ret nz
- ld e, [hl]
- inc hl
- call AdjustCoordinatesForBGScroll
- call InitTextPrinting
- ld a, [hli]
- push hl
- ld h, [hl]
- ld l, a
- call PrintTextNoDelay
- pop hl
- inc hl
- jr .loop_text_print_2
-
-InitAndPrintPauseMenu: ; 111e9 (4:51e9)
- push hl
- push bc
- push de
- push af
- ld d, [hl]
- inc hl
- ld e, [hl]
- inc hl
- ld b, [hl]
- inc hl
- ld c, [hl]
- inc hl
- push hl
- call AdjustCoordinatesForBGScroll
- farcall Func_c3ca
- call DrawRegularTextBox
- call DoFrameIfLCDEnabled
- pop hl
- call Func_111b3
- pop af
- call InitializeMenuParameters
- pop de
- pop bc
- pop hl
- ret
-
-; xors sb800
-; this has the effect of invalidating the save data checksum
-; which the game interprets as being having no save data
-InvalidateSaveData: ; 1120f (4:520f)
- push hl
- ldh a, [hBankSRAM]
-
- push af
- ld a, BANK("SRAM2")
- call BankswitchSRAM
- ld a, $08
- xor $ff
- ld [sBackupGeneralSaveData + 0], a
- ld a, $00
- xor $ff
- ld [sBackupGeneralSaveData + 1], a
- pop af
-
- call BankswitchSRAM
- call DisableSRAM
- call EnableSRAM
- bank1call DiscardSavedDuelData
- call DisableSRAM
- pop hl
- ret
-
-; saves all data to SRAM, including
-; General save data and Album/Deck data
-; and backs up in SRAM2
-SaveAndBackupData: ; 11238 (4:5238)
- push de
- ld de, sGeneralSaveData
- call SaveGeneralSaveDataFromDE
- ld de, sAlbumProgress
- call UpdateAlbumProgress
- call WriteBackupGeneralSaveData
- call WriteBackupCardAndDeckSaveData
- pop de
- ret
-
-_SaveGeneralSaveData: ; 1124d (4:524d)
- push de
- call GetReceivedLegendaryCards
- ld de, sGeneralSaveData
- call SaveGeneralSaveDataFromDE
- ld de, sAlbumProgress
- call UpdateAlbumProgress
- pop de
- ret
-
-; de = pointer to general game data in SRAM
-SaveGeneralSaveDataFromDE: ; 1125f (4:525f)
- push hl
- push bc
- call EnableSRAM
- push de
- farcall TryGiveMedalPCPacks
- ld [wMedalCount], a
- farcall OverworldMap_GetOWMapID
- ld [wCurOverworldMap], a
- pop de
- push de
- call CopyGeneralSaveDataToSRAM
- pop de
- call DisableSRAM
- pop bc
- pop hl
- ret
-
-; writes in de total num of cards collected
-; and in (de + 1) total num of cards to collect
-; also updates wTotalNumCardsCollected and wTotalNumCardsToCollect
-UpdateAlbumProgress: ; 1127f (4:527f)
- push hl
- push de
- push de
- call GetCardAlbumProgress
- call EnableSRAM
- pop hl
- ld a, d
- ld [wTotalNumCardsCollected], a
- ld [hli], a
- ld a, e
- ld [wTotalNumCardsToCollect], a
- ld [hl], a
- call DisableSRAM
- pop de
- pop hl
- ret
-
-; save values that are listed in WRAMToSRAMMapper
-; from WRAM to SRAM, and calculate its checksum
-CopyGeneralSaveDataToSRAM: ; 11299 (4:5299)
- push hl
- push bc
- push de
- push de
- ld hl, sGeneralSaveDataHeaderEnd - sGeneralSaveData
- add hl, de
- ld e, l
- ld d, h
- xor a
- ld [wGeneralSaveDataByteCount + 0], a
- ld [wGeneralSaveDataByteCount + 1], a
- ld [wGeneralSaveDataCheckSum + 0], a
- ld [wGeneralSaveDataCheckSum + 1], a
-
- ld hl, WRAMToSRAMMapper
-.loop_map
- ld a, [hli]
- ld [wTempPointer + 0], a
- ld c, a
- ld a, [hli]
- ld [wTempPointer + 1], a
- or c
- jr z, .done_copy
- ld a, [hli]
- ld c, a ; number of bytes LO
- ld a, [hli]
- ld b, a ; number of bytes HI
- ld a, [wGeneralSaveDataByteCount + 0]
- add c
- ld [wGeneralSaveDataByteCount + 0], a
- ld a, [wGeneralSaveDataByteCount + 1]
- adc b
- ld [wGeneralSaveDataByteCount + 1], a
- call .CopyBytesToSRAM
- inc hl
- inc hl
- jr .loop_map
-
-.done_copy
- pop hl
- ld a, $08
- ld [hli], a
- ld a, $00
- ld [hli], a
- ld a, [wGeneralSaveDataByteCount + 0]
- ld [hli], a
- ld a, [wGeneralSaveDataByteCount + 1]
- ld [hli], a
- ld a, [wGeneralSaveDataCheckSum + 0]
- ld [hli], a
- ld a, [wGeneralSaveDataCheckSum + 1]
- ld [hli], a
- pop de
- pop bc
- pop hl
- ret
-
-.CopyBytesToSRAM
- push hl
- ld a, [wTempPointer + 0]
- ld l, a
- ld a, [wTempPointer + 1]
- ld h, a
-.loop_bytes
- push bc
- ld a, [hli]
- ld [de], a
- inc de
- ld c, a
- ld a, [wGeneralSaveDataCheckSum + 0]
- add c
- ld [wGeneralSaveDataCheckSum + 0], a
- ld a, [wGeneralSaveDataCheckSum + 1]
- adc 0
- ld [wGeneralSaveDataCheckSum + 1], a
- pop bc
- dec bc
- ld a, c
- or b
- jr nz, .loop_bytes
- ld a, l
- ld [wTempPointer + 0], a
- ld a, h
- ld [wTempPointer + 1], a
- pop hl
- ret
-
-; returns carry if no error
-; is found in sBackupGeneralSaveData
-ValidateBackupGeneralSaveData: ; 11320 (4:5320)
- push de
- ldh a, [hBankSRAM]
- push af
- ld a, BANK(sBackupGeneralSaveData)
- call BankswitchSRAM
- ld de, sBackupGeneralSaveData
- call ValidateGeneralSaveDataFromDE
- ld de, sAlbumProgress
- call LoadAlbumProgressFromSRAM
- pop af
- call BankswitchSRAM
- call DisableSRAM
- pop de
- ld a, [wNumSRAMValidationErrors]
- cp 1
- ret
-
-; returns carry if no error
-; is found in sGeneralSaveData
-_ValidateGeneralSaveData: ; 11343 (4:5343)
- push de
- call EnableSRAM
- ld de, sGeneralSaveData
- call ValidateGeneralSaveDataFromDE
- ld de, sAlbumProgress
- call LoadAlbumProgressFromSRAM
- call DisableSRAM
- pop de
- ld a, [wNumSRAMValidationErrors]
- cp 1
- ret
-
-; validates the general game data saved in SRAM
-; de = pointer to general game data in SRAM
-ValidateGeneralSaveDataFromDE: ; 1135d (4:535d)
- push hl
- push bc
- push de
- xor a
- ld [wNumSRAMValidationErrors], a
- push de
-
- push de
- inc de
- inc de
- ld a, [de]
- inc de
- ld [wGeneralSaveDataByteCount + 0], a
- ld a, [de]
- inc de
- ld [wGeneralSaveDataByteCount + 1], a
- ld a, [de]
- inc de
- ld [wGeneralSaveDataCheckSum + 0], a
- ld a, [de]
- inc de
- ld [wGeneralSaveDataCheckSum + 1], a
- pop de
-
- ld hl, sGeneralSaveDataHeaderEnd - sGeneralSaveData
- add hl, de
- ld e, l
- ld d, h
- ld hl, WRAMToSRAMMapper
-.loop
- ld a, [hli]
- ld c, a
- ld a, [hli]
- or c
- jr z, .exit_loop
- ld a, [hli]
- ld c, a ; number of bytes LO
- ld a, [hli]
- ld b, a ; number of bytes HI
- ld a, [wGeneralSaveDataByteCount + 0]
- sub c
- ld [wGeneralSaveDataByteCount + 0], a
- ld a, [wGeneralSaveDataByteCount + 1]
- sbc b
- ld [wGeneralSaveDataByteCount + 1], a
-
-; loop all the bytes of this struct
-.loop_bytes
- push hl
- push bc
- ld a, [de]
- push af
- ld c, a
- ld a, [wGeneralSaveDataCheckSum + 0]
- sub c
- ld [wGeneralSaveDataCheckSum + 0], a
- ld a, [wGeneralSaveDataCheckSum + 1]
- sbc 0
- ld [wGeneralSaveDataCheckSum + 1], a
- pop af
-
- ; check if it's within the specified values
- cp [hl] ; min value
- jr c, .error
- inc hl
- cp [hl] ; max value
- jr z, .next_byte
- jr c, .next_byte
-.error
- ld a, [wNumSRAMValidationErrors]
- inc a
- ld [wNumSRAMValidationErrors], a
-.next_byte
- inc de
- pop bc
- pop hl
- dec bc
- ld a, c
- or b
- jr nz, .loop_bytes
- ; next mapped struct
- inc hl
- inc hl
- jr .loop
-
-.exit_loop
- pop hl
- ld a, [hli]
- sub $8
- ld c, a
- ld a, [hl]
- sub 0
- or c
- ld hl, wGeneralSaveDataByteCount
- or [hl]
- inc hl
- or [hl]
- ld hl, wGeneralSaveDataCheckSum
- or [hl]
- inc hl
- or [hl]
- jr z, .no_header_error
- ld hl, wNumSRAMValidationErrors
- inc [hl]
-.no_header_error
- pop de
- ; copy play time minutes and hours
- ld hl, (sPlayTimeCounter + 2) - sGeneralSaveData
- add hl, de
- ld a, [hli]
- ld [wPlayTimeHourMinutes + 0], a
- ld a, [hli]
- ld [wPlayTimeHourMinutes + 1], a
- ld a, [hli]
- ld [wPlayTimeHourMinutes + 2], a
-
- ; copy medal count and current overworld map
- ld hl, sGeneralSaveDataHeaderEnd - sGeneralSaveData
- add hl, de
- ld a, [hli]
- ld [wMedalCount], a
- ld a, [hl]
- ld [wCurOverworldMap], a
- pop bc
- pop hl
- ret
-
-LoadAlbumProgressFromSRAM: ; 1140a (4:540a)
- push de
- ld a, [de]
- ld [wTotalNumCardsCollected], a
- inc de
- ld a, [de]
- ld [wTotalNumCardsToCollect], a
- pop de
- ret
-
-; first copies data from backup SRAM to main SRAM
-; then loads it to WRAM from main SRAM
-LoadBackupSaveData: ; 11416 (4:5416)
- push hl
- push de
- call EnableSRAM
- bank1call DiscardSavedDuelData
- call DisableSRAM
- call LoadBackupGeneralSaveData
- call LoadBackupCardAndDeckSaveData
- ld de, sGeneralSaveData
- call LoadGeneralSaveDataFromDE
- pop de
- pop hl
- ret
-
-_LoadGeneralSaveData: ; 11430 (4:5430)
- push de
- ld de, sGeneralSaveData
- call LoadGeneralSaveDataFromDE
- pop de
- ret
-
-; de = pointer to save data
-LoadGeneralSaveDataFromDE: ; 11439 (4:5439)
- push hl
- push bc
- call EnableSRAM
- call .LoadData
- call DisableSRAM
- pop bc
- pop hl
- ret
-
-.LoadData
- push hl
- push bc
- push de
- ld a, e
- add sGeneralSaveDataHeaderEnd - sGeneralSaveData
- ld [wTempPointer + 0], a
- ld a, d
- adc 0
- ld [wTempPointer + 1], a
-
- ld hl, WRAMToSRAMMapper
-.asm_11459
- ld a, [hli]
- ld e, a
- ld d, [hl]
- or d
- jr z, .done_copy
- inc hl
- ld a, [hli]
- ld c, a
- ld a, [hli]
- ld b, a
-
-; copy bc bytes from wTempPointer to de
- push hl
- ld a, [wTempPointer + 0]
- ld l, a
- ld a, [wTempPointer + 1]
- ld h, a
-.loop_copy
- ld a, [hli]
- ld [de], a
- inc de
- dec bc
- ld a, c
- or b
- jr nz, .loop_copy
-
- ld a, l
- ld [wTempPointer + 0], a
- ld a, h
- ld [wTempPointer + 1], a
- pop hl
- inc hl
- inc hl
- jr .asm_11459
-
-.done_copy
- call EnableSRAM
- ld a, [sAnimationsDisabled]
- ld [wAnimationsDisabled], a
- ld a, [sTextSpeed]
- ld [wTextSpeed], a
- call DisableSRAM
- pop de
- pop bc
- pop hl
- ret
-
-wram_sram_map: MACRO
- dw \1 ; WRAM address
- dw \2 ; number of bytes
- db \3 ; min allowed value
- db \4 ; max allowed value
-ENDM
-
-; maps WRAM addresses to SRAM addresses in order
-; to save and subsequently retrieve them on game load
-; also works as a test in order check whether
-; the saved values is SRAM are legal, within the given value range
-WRAMToSRAMMapper: ; 11498 (4:5498)
- wram_sram_map wMedalCount, 1, $00, $ff ; sMedalCount
- wram_sram_map wCurOverworldMap, 1, $00, $ff ; sCurOverworldMap
- wram_sram_map wPlayTimeCounter + 0, 1, $00, $ff ; sPlayTimeCounter
- wram_sram_map wPlayTimeCounter + 1, 1, $00, $ff
- wram_sram_map wPlayTimeCounter + 2, 1, $00, $ff
- wram_sram_map wPlayTimeCounter + 3, 2, $00, $ff
- wram_sram_map wOverworldMapSelection, 1, $00, $ff ; sOverworldMapSelection
- wram_sram_map wTempMap, 1, $00, $ff ; sTempMap
- wram_sram_map wTempPlayerXCoord, 1, $00, $ff ; sTempPlayerXCoord
- wram_sram_map wTempPlayerYCoord, 1, $00, $ff ; sTempPlayerYCoord
- wram_sram_map wTempPlayerDirection, 1, $00, $ff ; sTempPlayerDirection
- wram_sram_map wActiveGameEvent, 1, $00, $ff ; sActiveGameEvent
- wram_sram_map wDuelResult, 1, $00, $ff ; sDuelResult
- wram_sram_map wNPCDuelist, 1, $00, $ff ; sNPCDuelist
- wram_sram_map wChallengeHallNPC, 1, $00, $ff ; sChallengeHallNPC
- wram_sram_map wd698, 4, $00, $ff ; sb818
- wram_sram_map wOWMapEvents, NUM_MAP_EVENTS, $00, $ff ; sOWMapEvents
- wram_sram_map .EmptySRAMSlot, 1, $00, $ff ; sb827
- wram_sram_map wSelectedPauseMenuItem, 1, $00, $ff ; sSelectedPauseMenuItem
- wram_sram_map wSelectedPCMenuItem, 1, $00, $ff ; sSelectedPCMenuItem
- wram_sram_map wConfigCursorYPos, 1, $00, $ff ; sConfigCursorYPos
- wram_sram_map wSelectedGiftCenterMenuItem, 1, $00, $ff ; sSelectedGiftCenterMenuItem
- wram_sram_map wPCPackSelection, 1, 0, 14 ; sPCPackSelection
- wram_sram_map wPCPacks, NUM_PC_PACKS, $00, $ff ; sPCPacks
- wram_sram_map wDefaultSong, 1, $00, $ff ; sDefaultSong
- wram_sram_map wDebugPauseAllowed, 1, $00, $ff ; sDebugPauseAllowed
- wram_sram_map wRonaldIsInMap, 1, $00, $ff ; sRonaldIsInMap
- wram_sram_map wMastersBeatenList, 10, $00, $ff ; sMastersBeatenList
- wram_sram_map wNPCDuelistDirection, 1, $00, $ff ; sNPCDuelistDirection
- wram_sram_map wMultichoiceTextboxResult_ChooseDeckToDuelAgainst, 1, $00, $ff ; sMultichoiceTextboxResult_ChooseDeckToDuelAgainst
- wram_sram_map wd10e, 1, $00, $ff ; sb84b
- wram_sram_map .EmptySRAMSlot, 15, $00, $ff ; sb84c
- wram_sram_map .EmptySRAMSlot, 16, $00, $ff ; sb85b
- wram_sram_map .EmptySRAMSlot, 16, $00, $ff ; sb86b
- wram_sram_map wEventVars, 64, $00, $ff ; sEventVars
- dw NULL
-
-; fills an empty SRAM slot with zero
-.EmptySRAMSlot: ; 1156c (4:556c)
- db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
-
-; 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, .force_mason_lab
- farcall BackupPlayerPosition
- jr .save
-
-.force_mason_lab
- ld a, $2
- ld [wTempPlayerXCoord], a
- ld a, $4
- ld [wTempPlayerYCoord], a
- ld a, SOUTH
- ld [wTempPlayerDirection], a
- ld a, MASON_LABORATORY
- ld [wTempMap], a
- ld a, OWMAP_MASON_LABORATORY
- ld [wOverworldMapSelection], a
-
-.save
- call SaveAndBackupData
- ret
-
-_AddCardToCollectionAndUpdateAlbumProgress: ; 115a3 (4:55a3)
- ld [wCardToAddToCollection], a
- push hl
- push bc
- push de
- ldh a, [hBankSRAM]
- push af
- ld a, BANK(sAlbumProgress)
- call BankswitchSRAM
- ld a, [wCardToAddToCollection]
- call AddCardToCollection
- ld de, sAlbumProgress
- call UpdateAlbumProgress
- pop af
- call BankswitchSRAM
- call DisableSRAM ; unnecessary
-
-; unintentional? runs the same write operation
-; on the same address but on the current SRAM bank
- ld a, [wCardToAddToCollection]
- call AddCardToCollection
- ld de, $b8fe
- call UpdateAlbumProgress
- pop de
- pop bc
- pop hl
- ret
-
-WriteBackupCardAndDeckSaveData: ; 115d4 (4:55d4)
- ld bc, sCardAndDeckSaveDataEnd - sCardAndDeckSaveData
- ld hl, sCardCollection
- jr WriteDataToBackup
-
-WriteBackupGeneralSaveData: ; 115dc (4:55dc)
- ld bc, sGeneralSaveDataEnd - sGeneralSaveData
- ld hl, sGeneralSaveData
-; fallthrough
-
-; bc = number of bytes to copy to backup
-; hl = pointer in SRAM of data to backup
-WriteDataToBackup: ; 115e2 (4:55e2)
- ldh a, [hBankSRAM]
- push af
-.loop
- xor a ; SRAM0
- call BankswitchSRAM
- ld a, [hl]
- push af
- ld a, BANK("SRAM2")
- call BankswitchSRAM
- pop af
- ld [hli], a
- dec bc
- ld a, b
- or c
- jr nz, .loop
- pop af
- call BankswitchSRAM
- call DisableSRAM
- ret
-
-LoadBackupCardAndDeckSaveData: ; 115ff (4:55ff)
- ld bc, sCardAndDeckSaveDataEnd - sCardAndDeckSaveData
- ld hl, sCardCollection
- jr LoadDataFromBackup
-
-LoadBackupGeneralSaveData: ; 11607 (4:5607)
- ld bc, sGeneralSaveDataEnd - sGeneralSaveData
- ld hl, sGeneralSaveData
-; fallthrough
-
-; bc = number of bytes to load from backup
-; hl = pointer in SRAM of backup data
-LoadDataFromBackup: ; 1160d (4:560d)
- ldh a, [hBankSRAM]
- push af
-
-.loop
- ld a, BANK("SRAM2")
- call BankswitchSRAM
- ld a, [hl]
- push af
- xor a
- call BankswitchSRAM
- pop af
- ld [hli], a
- dec bc
- ld a, b
- or c
- jr nz, .loop
- pop af
- call BankswitchSRAM
- call DisableSRAM
- ret
-
-INCLUDE "data/map_scripts.asm"
-
-; loads a pointer into hl found on NPCHeaderPointers
-GetNPCHeaderPointer: ; 1184a (4:584a)
- rlca
- add LOW(NPCHeaderPointers)
- ld l, a
- ld a, HIGH(NPCHeaderPointers)
- adc 0
- ld h, a
- ld a, [hli]
- ld h, [hl]
- ld l, a
- ret
-
-LoadNPCSpriteData: ; 11857 (4:5857)
- push hl
- push bc
- call GetNPCHeaderPointer
- ld a, [hli]
- ld [wTempNPC], a
- ld a, [hli]
- ld [wNPCSpriteID], a
- ld a, [hli]
- ld [wNPCAnim], a
- ld a, [hli]
- push af
- ld a, [hli]
- ld [wNPCAnimFlags], a
- pop bc
- ld a, [wConsole]
- cp CONSOLE_CGB
- jr nz, .not_cgb
- ld a, b
- ld [wNPCAnim], a
-.not_cgb
- pop bc
- pop hl
- ret
-
-; Loads Name into wCurrentNPCNameTx and gets Script ptr into bc
-GetNPCNameAndScript: ; 1187d (4:587d)
- push hl
- call GetNPCHeaderPointer
- ld bc, NPC_DATA_SCRIPT_PTR
- add hl, bc
- ld c, [hl]
- inc hl
- ld b, [hl]
- inc hl
- ld a, [hli]
- ld [wCurrentNPCNameTx], a
- ld a, [hli]
- ld [wCurrentNPCNameTx + 1], a
- pop hl
- ret
-
-; Sets Dialog Box title to the name of the npc in 'a'
-SetNPCDialogName: ; 11893 (4:5893)
- push hl
- push bc
- call GetNPCHeaderPointer
- ld bc, NPC_DATA_NAME_TEXT
- add hl, bc
- ld a, [hli]
- ld [wCurrentNPCNameTx], a
- ld a, [hli]
- ld [wCurrentNPCNameTx + 1], a
- pop bc
- pop hl
- ret
-
-; 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, NPC_DATA_NAME_TEXT
- add hl, bc
- ld a, [hli]
- ld [wOpponentName], a
- ld a, [hli]
- ld [wOpponentName + 1], a
- ld a, [hli]
- ld [wOpponentPortrait], a
- pop bc
- pop hl
- ret
-
-; 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, NPC_DATA_DECK_ID
- add hl, bc
- ld a, [hli]
- ld [wNPCDuelDeckID], a
- ld a, [hli]
- ld [wDuelTheme], a
- pop bc
- pop hl
- ret
-
-; 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, NPC_DATA_MATCH_START_ID
- add hl, bc
- ld a, [hli]
- ld [wMatchStartTheme], a
- pop af
- cp NPC_RONALD1
- jr nz, .not_ronald_final_duel
- ld a, [wCurMap]
- cp POKEMON_DOME
- jr nz, .not_ronald_final_duel
- ld a, MUSIC_MATCH_START_3
- ld [wMatchStartTheme], a
-
-.not_ronald_final_duel
- pop bc
- pop hl
- ret
-
-INCLUDE "data/npcs.asm"
-
-_GetNPCDuelConfigurations: ; 11f4e (4:5f4e)
- push hl
- push bc
- push de
- ld a, [wNPCDuelDeckID]
- ld e, a
- ld bc, 9 ; size of struct - 1
- ld hl, DeckIDDuelConfigurations
-.loop_deck_ids
- ld a, [hli]
- cp -1 ; end of list?
- jr z, .done
- cp e
- jr nz, .next_deck_id
- ld a, [hli]
- ld [wOpponentPortrait], a
- ld a, [hli]
- ld [wOpponentName], a
- ld a, [hli]
- ld [wOpponentName + 1], a
- ld a, [hl]
- ld [wNPCDuelPrizes], a
- scf
- jr .done
-.next_deck_id
- add hl, bc
- jr .loop_deck_ids
-.done
- pop de
- pop bc
- pop hl
- ret
-
-_GetChallengeMachineDuelConfigurations: ; 11f7d (4:5f7d)
- push bc
- push de
- ld a, [wNPCDuelDeckID]
- ld e, a
- ld bc, 9 ; size of struct - 1
- ld hl, DeckIDDuelConfigurations
-.loop_deck_ids
- ld a, [hli]
- cp -1 ; end of list?
- jr z, .done
- cp e
- jr nz, .next_deck_id
- push hl
- ld a, [hli]
- ld [wOpponentPortrait], a
- ld a, [hli]
- ld [wOpponentName], a
- ld a, [hli]
- ld [wOpponentName + 1], a
- inc hl
- ld a, [hli]
- ld [wDuelTheme], a
- pop hl
- dec hl
- scf
- jr .done
-.next_deck_id
- add hl, bc
- jr .loop_deck_ids
-.done
- pop de
- pop bc
- ret
-
-DeckIDDuelConfigurations: ; 11fae (4:5fae)
- db SAMS_PRACTICE_DECK_ID ; deck ID
- db SAM_PIC ; NPC portrait
- tx SamNPCName ; name text ID
- db PRIZES_2 ; number of prize cards
- db MUSIC_STOP ; theme
- dw NULL ; rank
- dw NULL ; element
-
- db SAMS_NORMAL_DECK_ID ; deck ID
- db SAM_PIC ; NPC portrait
- tx SamNPCName ; name text ID
- db PRIZES_2 ; number of prize cards
- db MUSIC_STOP ; theme
- dw NULL ; rank
- dw NULL ; element
-
- db LIGHTNING_AND_FIRE_DECK_ID ; deck ID
- db AARON_PIC ; NPC portrait
- tx AaronNPCName ; name text ID
- db PRIZES_4 ; number of prize cards
- db MUSIC_DUEL_THEME_1 ; theme
- tx TechText ; rank
- dw NULL ; element
-
- db WATER_AND_FIGHTING_DECK_ID ; deck ID
- db AARON_PIC ; NPC portrait
- tx AaronNPCName ; name text ID
- db PRIZES_4 ; number of prize cards
- db MUSIC_DUEL_THEME_1 ; theme
- tx TechText ; rank
- dw NULL ; element
-
- db GRASS_AND_PSYCHIC_DECK_ID ; deck ID
- db AARON_PIC ; NPC portrait
- tx AaronNPCName ; name text ID
- db PRIZES_4 ; number of prize cards
- db MUSIC_DUEL_THEME_1 ; theme
- tx TechText ; rank
- dw NULL ; element
-
- db LEGENDARY_MOLTRES_DECK_ID ; deck ID
- db COURTNEY_PIC ; NPC portrait
- tx CourtneyNPCName ; name text ID
- db PRIZES_6 ; number of prize cards
- db MUSIC_DUEL_THEME_3 ; theme
- tx GrandMasterText ; rank
- dw NULL ; element
-
- db LEGENDARY_ZAPDOS_DECK_ID ; deck ID
- db STEVE_PIC ; NPC portrait
- tx SteveNPCName ; name text ID
- db PRIZES_6 ; number of prize cards
- db MUSIC_DUEL_THEME_3 ; theme
- tx GrandMasterText ; rank
- dw NULL ; element
-
- db LEGENDARY_ARTICUNO_DECK_ID ; deck ID
- db JACK_PIC ; NPC portrait
- tx JackNPCName ; name text ID
- db PRIZES_6 ; number of prize cards
- db MUSIC_DUEL_THEME_3 ; theme
- tx GrandMasterText ; rank
- dw NULL ; element
-
- db LEGENDARY_DRAGONITE_DECK_ID ; deck ID
- db ROD_PIC ; NPC portrait
- tx RodNPCName ; name text ID
- db PRIZES_6 ; number of prize cards
- db MUSIC_DUEL_THEME_3 ; theme
- tx GrandMasterText ; rank
- dw NULL ; element
-
- db FIRST_STRIKE_DECK_ID ; deck ID
- db MITCH_PIC ; NPC portrait
- tx MitchNPCName ; name text ID
- db PRIZES_6 ; number of prize cards
- db MUSIC_DUEL_THEME_2 ; theme
- tx ClubMasterText ; rank
- tx ChallengeMachineFightingIconText ; element
-
- db ROCK_CRUSHER_DECK_ID ; deck ID
- db GENE_PIC ; NPC portrait
- tx GeneNPCName ; name text ID
- db PRIZES_6 ; number of prize cards
- db MUSIC_DUEL_THEME_2 ; theme
- tx ClubMasterText ; rank
- tx ChallengeMachineFightingIconText ; element
-
- db GO_GO_RAIN_DANCE_DECK_ID ; deck ID
- db AMY_PIC ; NPC portrait
- tx AmyNPCName ; name text ID
- db PRIZES_6 ; number of prize cards
- db MUSIC_DUEL_THEME_2 ; theme
- tx ClubMasterText ; rank
- tx ChallengeMachineWaterIconText ; element
-
- db ZAPPING_SELFDESTRUCT_DECK_ID ; deck ID
- db ISAAC_PIC ; NPC portrait
- tx IsaacNPCName ; name text ID
- db PRIZES_6 ; number of prize cards
- db MUSIC_DUEL_THEME_2 ; theme
- tx ClubMasterText ; rank
- tx ChallengeMachineLightningIconText ; element
-
- db FLOWER_POWER_DECK_ID ; deck ID
- db NIKKI_PIC ; NPC portrait
- tx NikkiNPCName ; name text ID
- db PRIZES_6 ; number of prize cards
- db MUSIC_DUEL_THEME_2 ; theme
- tx ClubMasterText ; rank
- tx ChallengeMachineGrassIconText ; element
-
- db STRANGE_PSYSHOCK_DECK_ID ; deck ID
- db MURRAY_PIC ; NPC portrait
- tx MurrayNPCName ; name text ID
- db PRIZES_6 ; number of prize cards
- db MUSIC_DUEL_THEME_2 ; theme
- tx ClubMasterText ; rank
- tx ChallengeMachinePsychicIconText ; element
-
- db WONDERS_OF_SCIENCE_DECK_ID ; deck ID
- db RICK_PIC ; NPC portrait
- tx RickNPCName ; name text ID
- db PRIZES_6 ; number of prize cards
- db MUSIC_DUEL_THEME_2 ; theme
- tx ClubMasterText ; rank
- tx ChallengeMachineGrassIconText ; element
-
- db FIRE_CHARGE_DECK_ID ; deck ID
- db KEN_PIC ; NPC portrait
- tx KenNPCName ; name text ID
- db PRIZES_6 ; number of prize cards
- db MUSIC_DUEL_THEME_2 ; theme
- tx ClubMasterText ; rank
- tx ChallengeMachineFireIconText ; element
-
- db IM_RONALD_DECK_ID ; deck ID
- db RONALD_PIC ; NPC portrait
- tx RonaldNPCName ; name text ID
- db PRIZES_6 ; number of prize cards
- db MUSIC_STOP ; theme
- dw NULL ; rank
- dw NULL ; element
-
- db POWERFUL_RONALD_DECK_ID ; deck ID
- db RONALD_PIC ; NPC portrait
- tx RonaldNPCName ; name text ID
- db PRIZES_6 ; number of prize cards
- db MUSIC_STOP ; theme
- dw NULL ; rank
- dw NULL ; element
-
- db INVINCIBLE_RONALD_DECK_ID ; deck ID
- db RONALD_PIC ; NPC portrait
- tx RonaldNPCName ; name text ID
- db PRIZES_4 ; number of prize cards
- db MUSIC_STOP ; theme
- dw NULL ; rank
- dw NULL ; element
-
- db LEGENDARY_RONALD_DECK_ID ; deck ID
- db RONALD_PIC ; NPC portrait
- tx RonaldNPCName ; name text ID
- db PRIZES_6 ; number of prize cards
- db MUSIC_STOP ; theme
- dw NULL ; rank
- dw NULL ; element
-
- db MUSCLES_FOR_BRAINS_DECK_ID ; deck ID
- db CHRIS_PIC ; NPC portrait
- tx ChrisNPCName ; name text ID
- db PRIZES_4 ; number of prize cards
- db MUSIC_DUEL_THEME_1 ; theme
- tx ClubMemberText ; rank
- tx ChallengeMachineFightingIconText ; element
-
- db HEATED_BATTLE_DECK_ID ; deck ID
- db MICHAEL_PIC ; NPC portrait
- tx MichaelNPCName ; name text ID
- db PRIZES_4 ; number of prize cards
- db MUSIC_DUEL_THEME_1 ; theme
- tx ClubMemberText ; rank
- tx ChallengeMachineFightingIconText ; element
-
- db LOVE_TO_BATTLE_DECK_ID ; deck ID
- db JESSICA_PIC ; NPC portrait
- tx JessicaNPCName ; name text ID
- db PRIZES_4 ; number of prize cards
- db MUSIC_DUEL_THEME_1 ; theme
- tx ClubMemberText ; rank
- tx ChallengeMachineFightingIconText ; element
-
- db EXCAVATION_DECK_ID ; deck ID
- db RYAN_PIC ; NPC portrait
- tx RyanNPCName ; name text ID
- db PRIZES_3 ; number of prize cards
- db MUSIC_DUEL_THEME_1 ; theme
- tx ClubMemberText ; rank
- tx ChallengeMachineFightingIconText ; element
-
- db BLISTERING_POKEMON_DECK_ID ; deck ID
- db ANDREW_PIC ; NPC portrait
- tx AndrewNPCName ; name text ID
- db PRIZES_4 ; number of prize cards
- db MUSIC_DUEL_THEME_1 ; theme
- tx ClubMemberText ; rank
- tx ChallengeMachineFightingIconText ; element
-
- db HARD_POKEMON_DECK_ID ; deck ID
- db MATTHEW_PIC ; NPC portrait
- tx MatthewNPCName ; name text ID
- db PRIZES_4 ; number of prize cards
- db MUSIC_DUEL_THEME_1 ; theme
- tx ClubMemberText ; rank
- tx ChallengeMachineFightingIconText ; element
-
- db WATERFRONT_POKEMON_DECK_ID ; deck ID
- db SARA_PIC ; NPC portrait
- tx SaraNPCName ; name text ID
- db PRIZES_2 ; number of prize cards
- db MUSIC_DUEL_THEME_1 ; theme
- tx ClubMemberText ; rank
- tx ChallengeMachineWaterIconText ; element
-
- db LONELY_FRIENDS_DECK_ID ; deck ID
- db AMANDA_PIC ; NPC portrait
- tx AmandaNPCName ; name text ID
- db PRIZES_3 ; number of prize cards
- db MUSIC_DUEL_THEME_1 ; theme
- tx ClubMemberText ; rank
- tx ChallengeMachineWaterIconText ; element
-
- db SOUND_OF_THE_WAVES_DECK_ID ; deck ID
- db JOSHUA_PIC ; NPC portrait
- tx JoshuaNPCName ; name text ID
- db PRIZES_4 ; number of prize cards
- db MUSIC_DUEL_THEME_1 ; theme
- tx ClubMemberText ; rank
- tx ChallengeMachineWaterIconText ; element
-
- db PIKACHU_DECK_ID ; deck ID
- db JENNIFER_PIC ; NPC portrait
- tx JenniferNPCName ; name text ID
- db PRIZES_4 ; number of prize cards
- db MUSIC_DUEL_THEME_1 ; theme
- tx ClubMemberText ; rank
- tx ChallengeMachineLightningIconText ; element
-
- db BOOM_BOOM_SELFDESTRUCT_DECK_ID ; deck ID
- db NICHOLAS_PIC ; NPC portrait
- tx NicholasNPCName ; name text ID
- db PRIZES_4 ; number of prize cards
- db MUSIC_DUEL_THEME_1 ; theme
- tx ClubMemberText ; rank
- tx ChallengeMachineLightningIconText ; element
-
- db POWER_GENERATOR_DECK_ID ; deck ID
- db BRANDON_PIC ; NPC portrait
- tx BrandonNPCName ; name text ID
- db PRIZES_4 ; number of prize cards
- db MUSIC_DUEL_THEME_1 ; theme
- tx ClubMemberText ; rank
- tx ChallengeMachineLightningIconText ; element
-
- db ETCETERA_DECK_ID ; deck ID
- db BRITTANY_PIC ; NPC portrait
- tx BrittanyNPCName ; name text ID
- db PRIZES_4 ; number of prize cards
- db MUSIC_DUEL_THEME_1 ; theme
- tx ClubMemberText ; rank
- tx ChallengeMachineGrassIconText ; element
-
- db FLOWER_GARDEN_DECK_ID ; deck ID
- db KRISTIN_PIC ; NPC portrait
- tx KristinNPCName ; name text ID
- db PRIZES_4 ; number of prize cards
- db MUSIC_DUEL_THEME_1 ; theme
- tx ClubMemberText ; rank
- tx ChallengeMachineGrassIconText ; element
-
- db KALEIDOSCOPE_DECK_ID ; deck ID
- db HEATHER_PIC ; NPC portrait
- tx HeatherNPCName ; name text ID
- db PRIZES_4 ; number of prize cards
- db MUSIC_DUEL_THEME_1 ; theme
- tx ClubMemberText ; rank
- tx ChallengeMachineGrassIconText ; element
-
- db GHOST_DECK_ID ; deck ID
- db ROBERT_PIC ; NPC portrait
- tx RobertNPCName ; name text ID
- db PRIZES_4 ; number of prize cards
- db MUSIC_DUEL_THEME_1 ; theme
- tx ClubMemberText ; rank
- tx ChallengeMachinePsychicIconText ; element
-
- db NAP_TIME_DECK_ID ; deck ID
- db DANIEL_PIC ; NPC portrait
- tx DanielNPCName ; name text ID
- db PRIZES_4 ; number of prize cards
- db MUSIC_DUEL_THEME_1 ; theme
- tx ClubMemberText ; rank
- tx ChallengeMachinePsychicIconText ; element
-
- db STRANGE_POWER_DECK_ID ; deck ID
- db STEPHANIE_PIC ; NPC portrait
- tx StephanieNPCName ; name text ID
- db PRIZES_4 ; number of prize cards
- db MUSIC_DUEL_THEME_1 ; theme
- tx ClubMemberText ; rank
- tx ChallengeMachinePsychicIconText ; element
-
- db FLYIN_POKEMON_DECK_ID ; deck ID
- db JOSEPH_PIC ; NPC portrait
- tx JosephNPCName ; name text ID
- db PRIZES_4 ; number of prize cards
- db MUSIC_DUEL_THEME_1 ; theme
- tx ClubMemberText ; rank
- tx ChallengeMachineGrassIconText ; element
-
- db LOVELY_NIDORAN_DECK_ID ; deck ID
- db DAVID_PIC ; NPC portrait
- tx DavidNPCName ; name text ID
- db PRIZES_4 ; number of prize cards
- db MUSIC_DUEL_THEME_1 ; theme
- tx ClubMemberText ; rank
- tx ChallengeMachineGrassIconText ; element
-
- db POISON_DECK_ID ; deck ID
- db ERIK_PIC ; NPC portrait
- tx ErikNPCName ; name text ID
- db PRIZES_4 ; number of prize cards
- db MUSIC_DUEL_THEME_1 ; theme
- tx ClubMemberText ; rank
- tx ChallengeMachineGrassIconText ; element
-
- db ANGER_DECK_ID ; deck ID
- db JOHN_PIC ; NPC portrait
- tx JohnNPCName ; name text ID
- db PRIZES_4 ; number of prize cards
- db MUSIC_DUEL_THEME_1 ; theme
- tx ClubMemberText ; rank
- tx ChallengeMachineFireIconText ; element
-
- db FLAMETHROWER_DECK_ID ; deck ID
- db ADAM_PIC ; NPC portrait
- tx AdamNPCName ; name text ID
- db PRIZES_4 ; number of prize cards
- db MUSIC_DUEL_THEME_1 ; theme
- tx ClubMemberText ; rank
- tx ChallengeMachineFireIconText ; element
-
- db RESHUFFLE_DECK_ID ; deck ID
- db JONATHAN_PIC ; NPC portrait
- tx JonathanNPCName ; name text ID
- db PRIZES_4 ; number of prize cards
- db MUSIC_DUEL_THEME_1 ; theme
- tx ClubMemberText ; rank
- tx ChallengeMachineFireIconText ; element
-
- db IMAKUNI_DECK_ID ; deck ID
- db IMAKUNI_PIC ; NPC portrait
- tx ImakuniNPCName ; name text ID
- db PRIZES_6 ; number of prize cards
- db MUSIC_IMAKUNI ; theme
- tx StrangeLifeformText ; rank
- dw NULL ; element
-
- db -1 ; end
-
-OverworldScriptTable: ; 1217b (4:617b)
- dw ScriptCommand_EndScript
- dw ScriptCommand_CloseAdvancedTextBox
- dw ScriptCommand_PrintNPCText
- dw ScriptCommand_PrintText
- dw ScriptCommand_AskQuestionJump
- dw ScriptCommand_StartDuel
- dw ScriptCommand_PrintVariableNPCText
- dw ScriptCommand_PrintVariableText
- dw ScriptCommand_PrintTextQuitFully
- dw ScriptCommand_UnloadActiveNPC
- dw ScriptCommand_MoveActiveNPCByDirection
- dw ScriptCommand_CloseTextBox
- dw ScriptCommand_GiveBoosterPacks
- dw ScriptCommand_JumpIfCardOwned
- dw ScriptCommand_JumpIfCardInCollection
- dw ScriptCommand_GiveCard
- dw ScriptCommand_TakeCard
- dw ScriptCommand_JumpIfAnyEnergyCardsInCollection
- dw ScriptCommand_RemoveAllEnergyCardsFromCollection
- dw ScriptCommand_JumpIfEnoughCardsOwned
- dw ScriptCommand_JumpBasedOnFightingClubPupilStatus
- dw ScriptCommand_SetActiveNPCDirection
- dw ScriptCommand_PickNextMan1RequestedCard
- dw ScriptCommand_LoadMan1RequestedCardIntoTxRamSlot
- dw ScriptCommand_JumpIfMan1RequestedCardOwned
- dw ScriptCommand_JumpIfMan1RequestedCardInCollection
- dw ScriptCommand_RemoveMan1RequestedCardFromCollection
- dw ScriptCommand_Jump
- dw ScriptCommand_TryGiveMedalPCPacks
- dw ScriptCommand_SetPlayerDirection
- dw ScriptCommand_MovePlayer
- dw ScriptCommand_ShowCardReceivedScreen
- dw ScriptCommand_SetDialogNPC
- dw ScriptCommand_SetNextNPCAndScript
- dw ScriptCommand_SetSpriteAttributes
- dw ScriptCommand_SetActiveNPCCoords
- dw ScriptCommand_DoFrames
- dw ScriptCommand_JumpIfActiveNPCCoordsMatch
- dw ScriptCommand_JumpIfPlayerCoordsMatch
- dw ScriptCommand_MoveActiveNPC
- dw ScriptCommand_GiveOneOfEachTrainerBooster
- dw ScriptCommand_JumpIfNPCLoaded
- dw ScriptCommand_ShowMedalReceivedScreen
- dw ScriptCommand_LoadCurrentMapNameIntoTxRamSlot
- dw ScriptCommand_LoadChallengeHallNPCIntoTxRamSlot
- dw ScriptCommand_StartChallengeHallDuel
- dw ScriptCommand_PrintTextForChallengeCup
- dw ScriptCommand_MoveChallengeHallNPC
- dw ScriptCommand_UnloadChallengeHallNPC
- dw ScriptCommand_SetChallengeHallNPCCoords
- dw ScriptCommand_PickChallengeHallOpponent
- dw ScriptCommand_OpenMenu
- dw ScriptCommand_PickChallengeCupPrizeCard
- dw ScriptCommand_QuitScriptFully
- dw ScriptCommand_ReplaceMapBlocks
- dw ScriptCommand_ChooseDeckToDuelAgainstMultichoice
- dw ScriptCommand_OpenDeckMachine
- dw ScriptCommand_ChooseStarterDeckMultichoice
- dw ScriptCommand_EnterMap
- dw ScriptCommand_MoveArbitraryNPC
- dw ScriptCommand_PickLegendaryCard
- dw ScriptCommand_FlashScreen
- dw ScriptCommand_SaveGame
- dw ScriptCommand_BattleCenter
- dw ScriptCommand_GiftCenter
- dw ScriptCommand_PlayCredits
- dw ScriptCommand_TryGivePCPack
- dw ScriptCommand_nop
- dw ScriptCommand_GiveStarterDeck
- dw ScriptCommand_WalkPlayerToMasonLaboratory
- dw ScriptCommand_OverrideSong
- dw ScriptCommand_SetDefaultSong
- dw ScriptCommand_PlaySong
- dw ScriptCommand_PlaySFX
- dw ScriptCommand_PauseSong
- dw ScriptCommand_ResumeSong
- dw ScriptCommand_PlayDefaultSong
- dw ScriptCommand_WaitForSongToFinish
- dw ScriptCommand_RecordMasterWin
- dw ScriptCommand_AskQuestionJumpDefaultYes
- dw ScriptCommand_ShowSamNormalMultichoice
- dw ScriptCommand_ShowSamRulesMultichoice
- dw ScriptCommand_ChallengeMachine
- dw ScriptCommand_EndScript
- dw ScriptCommand_EndScript
- dw ScriptCommand_EndScript
- dw ScriptCommand_EndScript
- dw ScriptCommand_EndScript
- 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
- dw ScriptCommand_EndScript
-
-MultichoiceTextbox_ConfigTable_ChooseDeckToDuelAgainst: ; 1224b (4:624b)
- db $04, $00 ; x, y to start drawing box
- db $10, $08 ; width, height of box
- db $06, $02 ; x, y coordinate to start printing next text
- tx LightningAndFireDeckChoiceText ; text id to print next
- db $06, $04 ; x, y coordinate to start printing next text
- tx WaterAndFightingDeckChoiceText ; text id to print next
- db $06, $06 ; x, y coordinate to start printing next text
- tx GrassAndPsychicDeckChoiceText ; text id to print next
- db $ff ; marker byte -- end text entries
- db $05, $02 ; cursor starting x, y
- db $02 ; number of tiles the cursor moves per toggle
- db $03 ; cursor max index
- db SYM_CURSOR_R ; cursor image
- db SYM_SPACE ; tile behind cursor
- dw NULL ; function pointer if non-0
-
-MultichoiceTextbox_ConfigTable_ChooseDeckStarterDeck: ; 12264 (4:6264)
- db $04, $00 ; x, y to start drawing box
- db $10, $08 ; width, height of box
- db $06, $02 ; x, y coordinate to start printing next text
- tx CharmanderAndFriendsDeckChoiceText ; text id to print next
- db $06, $04 ; x, y coordinate to start printing next text
- tx SquirtleAndFriendsDeckChoiceText ; text id to print next
- db $06, $06 ; x, y coordinate to start printing next text
- tx BulbasaurAndFriendsDeckChoiceText ; text id to print next
- db $ff ; marker byte -- end text entries
- db $05, $02 ; cursor starting x, y
- db $02 ; number of tiles the cursor moves per toggle
- db $03 ; cursor max index
- db SYM_CURSOR_R ; cursor image
- db SYM_SPACE ; tile behind cursor
- dw NULL ; function pointer if non-0
-
-SamNormalMultichoice_ConfigurationTable: ; 1227d (4:627d)
- db $0a, $00 ; x, y to start drawing box
- db $0a, $0a ; width, height of box
- db $0c, $02 ; x, y coordinate to start printing next text
- tx Text03ff ; text id to print next
- db $ff ; marker byte -- end text entries
- db $0b, $02 ; cursor starting x, y
- db $02 ; number of tiles the cursor moves per toggle
- db $04 ; cursor max index
- db SYM_CURSOR_R ; cursor image
- db SYM_SPACE ; tile behind cursor
- dw NULL ; function pointer if non-0
-
-SamRulesMultichoice_ConfigurationTable: ; 1228e (4:628e)
- db $06, $00 ; x, y to start drawing box
- db $0e, $12 ; width, height of box
- db $08, $02 ; x coordinate to start printing text
- tx Text0400 ; text id to print next
- db $ff ; marker byte -- end text entries
- db $07, $02 ; cursor starting x, y
- db $02 ; number of tiles the cursor moves per toggle
- db $08 ; cursor max index
- db SYM_CURSOR_R ; cursor image
- db SYM_SPACE ; tile behind cursor
- dw NULL ; function pointer if non-0
-
-INCLUDE "data/overworld_map/player_movement_paths.asm"
-
-; unreferenced debug menu
-Func_12661: ; 12661 (4:6661)
- xor a
- ld [wDebugMenuSelection], a
- ld [wDebugBoosterSelection], a
- ld a, $03
- ld [wDebugSGBBorder], a
-.asm_1266d
- call DisableLCD
- ld a, $00
- ld [wTileMapFill], a
- call EmptyScreen
- call LoadSymbolsFont
- lb de, $30, $7f
- call SetupText
- call Func_3ca0
- call Func_12871
- ld a, $01
- ld [wLineSeparation], a
- ld a, [wDebugMenuSelection]
- ld hl, Unknown_128f7
- call InitAndPrintPauseMenu
- call EnableLCD
-.asm_12698
- call DoFrameIfLCDEnabled
- call HandleMenuInput
- jr nc, .asm_12698
- ldh a, [hCurMenuItem]
- bit 7, a
- jr nz, .asm_12698
- ld [wDebugMenuSelection], a
- xor a
- ld [wLineSeparation], a
- call Func_126b3
- jr c, .asm_1266d
- ret
-
-Func_126b3: ; 126b3 (4:66b3)
- ldh a, [hCurMenuItem]
- ld hl, Unknown_126bb
- jp JumpToFunctionInTable
-
-Unknown_126bb: ; 126bb (4:66bb)
- dw _GameLoop
- dw DebugDuelMode
- dw MainMenu_ContinueFromDiary
- dw DebugCGBTest
- dw DebugSGBFrame
- dw DebugStandardBGCharacter
- dw DebugLookAtSprite
- dw DebugVEffect
- dw DebugCreateBoosterPack
- dw DebugCredits
- dw DebugQuit
-
-; usually, the game doesn't loop here at all, since as soon as a main menu option
-; is selected, there is no need to come back to the menu.
-; the only exception is after returning from Card Pop!
-_GameLoop: ; 126d1 (4:66d1)
- call ZeroObjectPositions
- ld hl, wVBlankOAMCopyToggle
- inc [hl]
- farcall SetIntroSGBBorder
- ld a, $ff
- ld [wLastSelectedStartMenuItem], a
-.main_menu_loop
- ld a, PLAYER_TURN
- ldh [hWhoseTurn], a
- farcall Func_c1f8
- farcall HandleTitleScreen
- ld a, [wStartMenuChoice]
- ld hl, MainMenuFunctionTable
- call JumpToFunctionInTable
- jr c, .main_menu_loop ; return to main menu
- jr _GameLoop ; virtually restart game
-
-; this is never reached
- scf
- ret
-
-MainMenuFunctionTable: ; 126fc (4:66fc)
- dw MainMenu_CardPop
- dw MainMenu_ContinueFromDiary
- dw MainMenu_NewGame
- dw MainMenu_ContinueDuel
-
-MainMenu_NewGame: ; 12704 (4:6704)
- farcall Func_c1b1
- call DisplayPlayerNamingScreen
- farcall InitSaveData
- call EnableSRAM
- ld a, [sAnimationsDisabled]
- ld [wAnimationsDisabled], a
- ld a, [sTextSpeed]
- ld [wTextSpeed], a
- call DisableSRAM
- ld a, MUSIC_STOP
- call PlaySong
- farcall SetMainSGBBorder
- ld a, MUSIC_OVERWORLD
- ld [wDefaultSong], a
- call PlayDefaultSong
- farcall DrawPlayerPortraitAndPrintNewGameText
- ld a, GAME_EVENT_OVERWORLD
- ld [wGameEvent], a
- farcall $03, ExecuteGameEvent
- or a
- ret
-
-MainMenu_ContinueFromDiary: ; 12741 (4:6741)
- ld a, MUSIC_STOP
- call PlaySong
- call ValidateBackupGeneralSaveData
- jr nc, MainMenu_NewGame
- farcall Func_c1ed
- farcall SetMainSGBBorder
- call EnableSRAM
- xor a
- ld [sPlayerInChallengeMachine], a
- call DisableSRAM
- ld a, GAME_EVENT_OVERWORLD
- ld [wGameEvent], a
- farcall $03, ExecuteGameEvent
- or a
- ret
-
-MainMenu_CardPop: ; 12768 (4:6768)
- ld a, MUSIC_CARD_POP
- call PlaySong
- bank1call DoCardPop
- farcall WhiteOutDMGPals
- call DoFrameIfLCDEnabled
- ld a, MUSIC_STOP
- call PlaySong
- scf
- ret
-
-MainMenu_ContinueDuel: ; 1277e (4:677e)
- ld a, MUSIC_STOP
- call PlaySong
- farcall ClearEvents
- farcall $04, LoadGeneralSaveData
- farcall SetMainSGBBorder
- ld a, GAME_EVENT_CONTINUE_DUEL
- ld [wGameEvent], a
- farcall $03, ExecuteGameEvent
- or a
- ret
-
-DebugLookAtSprite: ; 1279a (4:679a)
- farcall Func_80cd7
- scf
- ret
-
-DebugVEffect: ; 127a0 (4:67a0)
- farcall Func_80cd6
- scf
- ret
-
-DebugCreateBoosterPack: ; 127a6 (4:67a6)
-.go_back
- ld a, [wDebugBoosterSelection]
- ld hl, Unknown_12919
- call InitAndPrintPauseMenu
-.input_loop_1
- call DoFrameIfLCDEnabled
- call HandleMenuInput
- jr nc, .input_loop_1
- ldh a, [hCurMenuItem]
- cp e
- jr nz, .cancel
- ld [wDebugBoosterSelection], a
- add a
- ld c, a
- ld b, $00
- ld hl, Unknown_127f1
- add hl, bc
- ld a, [hli]
- ld h, [hl]
- ld l, a
- xor a
- call InitAndPrintPauseMenu
-.input_loop_2
- call DoFrameIfLCDEnabled
- call HandleMenuInput
- jr nc, .input_loop_2
- ldh a, [hCurMenuItem]
- cp e
- jr nz, .go_back
- ld a, [wDebugBoosterSelection]
- ld c, a
- ld b, $00
- ld hl, Unknown_127fb
- add hl, bc
- ld a, [hl]
- add e
- farcall GenerateBoosterPack
- farcall OpenBoosterPack
-.cancel
- scf
- ret
-
-Unknown_127f1: ; 127f1 (4:67f1)
- dw Unknown_1292a
- dw Unknown_1292a
- dw Unknown_1293b
- dw Unknown_1294c
- dw Unknown_1295d
-
-Unknown_127fb: ; 127fb (4:67fb)
- db BOOSTER_COLOSSEUM_NEUTRAL
- db BOOSTER_EVOLUTION_NEUTRAL
- db BOOSTER_MYSTERY_NEUTRAL
- db BOOSTER_LABORATORY_NEUTRAL
- db BOOSTER_ENERGY_LIGHTNING_FIRE
-
-DebugCredits: ; 12800 (4:6800)
- farcall PlayCreditsSequence
- scf
- ret
-
-DebugCGBTest: ; 12806 (4:6806)
- farcall Func_1c865
- scf
- ret
-
-DebugSGBFrame: ; 1280c (4:680c)
- call DisableLCD
- ld a, [wDebugSGBBorder]
- farcall SetSGBBorder
- ld a, [wDebugSGBBorder]
- inc a
- cp $04
- jr c, .asm_1281f
- xor a
-.asm_1281f
- ld [wDebugSGBBorder], a
- scf
- ret
-
-DebugDuelMode: ; 12824 (4:6824)
- call EnableSRAM
- ld a, [sDebugDuelMode]
- and $01
- ld [sDebugDuelMode], a
- ld hl, Unknown_12908
- call InitAndPrintPauseMenu
-.input_loop
- call DoFrameIfLCDEnabled
- call HandleMenuInput
- jr nc, .input_loop
- ldh a, [hCurMenuItem]
- cp e
- jr nz, .input_loop
- and $01
- ld [sDebugDuelMode], a
- call DisableSRAM
- scf
- ret
-
-DebugStandardBGCharacter: ; 1284c (4:684c)
- ld a, $80
- ld de, $0
- lb bc, 16, 16
- lb hl, 1, 16
- call FillRectangle
- ld a, $ff
- call Func_12863
- scf
- ret
-
-DebugQuit: ; 12861 (4:6861)
- or a
- ret
-
-Func_12863: ; 12863 (4:6863)
- push bc
- ld b, a
-.asm_12865
- push bc
- call DoFrameIfLCDEnabled
- pop bc
- ldh a, [hKeysPressed]
- and b
- jr z, .asm_12865
- pop bc
- ret
-
-Func_12871: ; 12871 (4:6871)
- call ZeroObjectPositions
- ld a, $01
- ld [wVBlankOAMCopyToggle], a
- call Set_OBJ_8x8
- call Func_1288c
- xor a
- ldh [hSCX], a
- ldh [hSCY], a
- ldh [hWX], a
- ldh [hWY], a
- call SetWindowOff
- ret
-
-Func_1288c: ; 1288c (4:688c)
- push hl
- push bc
- push de
- ld a, %11100100
- ld [wBGP], a
- ld [wOBP0], a
- ld [wOBP1], a
- ld a, 4
- ld [wTextBoxFrameType], a
- bank1call SetDefaultPalettes
- call FlushAllPalettes
- pop de
- pop bc
- pop hl
- ret
-
-DisplayPlayerNamingScreen:: ; 128a9 (4:68a9)
- ; clear the name buffer.
- ld hl, wNameBuffer ; c500: name buffer.
- ld bc, NAME_BUFFER_LENGTH
- ld a, TX_END
- call FillMemoryWithA
-
- ; get player's name
- ; from the user into hl.
- ld hl, wNameBuffer
- farcall InputPlayerName
-
- farcall WhiteOutDMGPals
- call DoFrameIfLCDEnabled
- call DisableLCD
- ld hl, wNameBuffer
- ; get the first byte of the name buffer.
- ld a, [hl]
- or a
- ; check if anything typed.
- jr nz, .no_name
- ld hl, .default_name
-.no_name
- ; set the default name.
- ld de, sPlayerName
- ld bc, NAME_BUFFER_LENGTH
- call EnableSRAM
- call CopyDataHLtoDE_SaveRegisters
- ; it seems for integrity checking.
- call UpdateRNGSources
- ld [sPlayerName+$e], a
- call UpdateRNGSources
- ld [sPlayerName+$f], a
- call DisableSRAM
- ret
-
-.default_name
- ; "MARK": default player name.
- textfw3 "MARK"
- db TX_END, TX_END, TX_END, TX_END
-
-Unknown_128f7: ; 128f7 (4:68f7)
- db 0, 0 ; start menu coords
- db 16, 18 ; start menu text box dimensions
-
- db 2, 2 ; text alignment for InitTextPrinting
- tx Text037a
- db $ff
-
- db 1, 2 ; cursor x, cursor y
- db 1 ; y displacement between items
- db 11 ; number of items
- db SYM_CURSOR_R ; cursor tile number
- db SYM_SPACE ; tile behind cursor
- dw NULL ; function pointer if non-0
-
-Unknown_12908: ; 12908 (4:6908)
- db 10, 0 ; start menu coords
- db 10, 6 ; start menu text box dimensions
-
- db 12, 2 ; text alignment for InitTextPrinting
- tx Text037b
- db $ff
-
- db 11, 2 ; cursor x, cursor y
- db 2 ; y displacement between items
- db 2 ; number of items
- db SYM_CURSOR_R ; cursor tile number
- db SYM_SPACE ; tile behind cursor
- dw NULL ; function pointer if non-0
-
-Unknown_12919: ; 12919 (4:6919)
- db 0, 0 ; start menu coords
- db 12, 12 ; start menu text box dimensions
-
- db 2, 2 ; text alignment for InitTextPrinting
- tx Text037c
- db $ff
-
- db 1, 2 ; cursor x, cursor y
- db 2 ; y displacement between items
- db 5 ; number of items
- db SYM_CURSOR_R ; cursor tile number
- db SYM_SPACE ; tile behind cursor
- dw NULL ; function pointer if non-0
-
-Unknown_1292a: ; 1292a (4:692a)
- db 12, 0 ; start menu coords
- db 4, 16 ; start menu text box dimensions
-
- db 14, 2 ; text alignment for InitTextPrinting
- tx Text037d
- db $ff
-
- db 13, 2 ; cursor x, cursor y
- db 2 ; y displacement between items
- db 7 ; number of items
- db SYM_CURSOR_R ; cursor tile number
- db SYM_SPACE ; tile behind cursor
- dw NULL ; function pointer if non-0
-
-Unknown_1293b: ; 1293b (4:693b)
- db 12, 0 ; start menu coords
- db 4, 14 ; start menu text box dimensions
-
- db 14, 2 ; text alignment for InitTextPrinting
- tx Text037e
- db $ff
-
- db 13, 2 ; cursor x, cursor y
- db 2 ; y displacement between items
- db 6 ; number of items
- db SYM_CURSOR_R ; cursor tile number
- db SYM_SPACE ; tile behind cursor
- dw NULL ; function pointer if non-0
-
-Unknown_1294c: ; 1294c (4:694c)
- db 12, 0 ; start menu coords
- db 4, 12 ; start menu text box dimensions
-
- db 14, 2 ; text alignment for InitTextPrinting
- tx Text037f
- db $ff
-
- db 13, 2 ; cursor x, cursor y
- db 2 ; y displacement between items
- db 5 ; number of items
- db SYM_CURSOR_R ; cursor tile number
- db SYM_SPACE ; tile behind cursor
- dw NULL ; function pointer if non-0
-
-Unknown_1295d: ; 1295d (4:695d)
- db 12, 0 ; start menu coords
- db 4, 10 ; start menu text box dimensions
-
- db 14, 2 ; text alignment for InitTextPrinting
- tx Text0380
- db $ff
-
- db 13, 2 ; cursor x, cursor y
- db 2 ; y displacement between items
- db 4 ; number of items
- db SYM_CURSOR_R ; cursor tile number
- db SYM_SPACE ; tile behind cursor
- dw NULL ; function pointer if non-0
-
-; disables all sprite animations
-; and clears memory related to sprites
-Func_1296e: ; 1296e (4:696e)
- push af
- ld a, [wd5d7]
- or a
- jr z, .asm_12977
- pop af
- ret
-
-.asm_12977
- pop af
- push bc
- push hl
- xor a
- ld [wWhichSprite], a
- call GetFirstSpriteAnimBufferProperty
- lb bc, 0, SPRITE_ANIM_LENGTH
-
-; disable all sprite animations
-.loop_sprites
- xor a
- ld [hl], a ; set SPRITE_ANIM_ENABLED to 0
- add hl, bc
- ld a, [wWhichSprite]
- inc a
- ld [wWhichSprite], a
- cp SPRITE_ANIM_BUFFER_CAPACITY
- jr nz, .loop_sprites
-
- call Func_12bf3
- call ZeroObjectPositions
- ld hl, wVBlankOAMCopyToggle
- inc [hl]
- pop hl
- pop bc
- ret
-
-; creates a new entry in SpriteAnimBuffer, else loads the sprite if need be
-CreateSpriteAndAnimBufferEntry: ; 1299f (4:699f)
- push af
- ld a, [wd5d7]
- or a
- jr z, .continue
- pop af
- ret
-.continue
- pop af
- push bc
- push hl
- call Func_12c05
- ld [wCurrSpriteTileID], a
- xor a
- ld [wWhichSprite], a
- call GetFirstSpriteAnimBufferProperty
- ld bc, SPRITE_ANIM_LENGTH
-.findFirstEmptyAnimField
- ld a, [hl]
- or a
- jr z, .foundEmptyAnimField
- add hl, bc
- ld a, [wWhichSprite]
- inc a
- ld [wWhichSprite], a
- cp $10
- jr nz, .findFirstEmptyAnimField
- debug_nop
- scf
- jr .quit
-.foundEmptyAnimField
- ld a, $1
- ld [hl], a
- call FillNewSpriteAnimBufferEntry
- or a
-.quit
- pop hl
- pop bc
- ret
-
-FillNewSpriteAnimBufferEntry: ; 129d9 (4:69d9)
- push hl
- push bc
- push hl
- inc hl
- ld c, SPRITE_ANIM_LENGTH - 1
- xor a
-.clearSpriteAnimBufferEntryLoop
- ld [hli], a
- dec c
- jr nz, .clearSpriteAnimBufferEntryLoop
- pop hl
- ld bc, SPRITE_ANIM_ID - 1
- add hl, bc
- ld a, [wCurrSpriteTileID]
- ld [hli], a
- ld a, $ff
- ld [hl], a
- ld bc, SPRITE_ANIM_COUNTER - SPRITE_ANIM_ID
- add hl, bc
- ld a, $ff
- ld [hl], a
- pop bc
- pop hl
- ret
-
-DisableCurSpriteAnim: ; 129fa (4:69fa)
- ld a, [wWhichSprite]
- ; fallthrough
-
-; sets SPRITE_ANIM_ENABLED to false
-; of sprite in register a
-DisableSpriteAnim: ; 129fd (4:69fd)
- push af
- ld a, [wd5d7]
- or a
- jr z, .disable
- pop af
- ret
-.disable
- pop af
- push hl
- push bc
- ld c, SPRITE_ANIM_ENABLED
- call GetSpriteAnimBufferProperty_SpriteInA
- ld [hl], FALSE
- pop bc
- pop hl
- ret
-
-GetSpriteAnimCounter: ; 12a13 (4:6a13)
- ld a, [wWhichSprite]
- push hl
- push bc
- ld c, SPRITE_ANIM_COUNTER
- call GetSpriteAnimBufferProperty_SpriteInA
- ld a, [hl]
- pop bc
- pop hl
- ret
-
-_HandleAllSpriteAnimations: ; 12a21 (4:6a21)
- push af
- ld a, [wd5d7] ; skip animating this frame if enabled
- or a
- jr z, .continue
- pop af
- ret
-.continue
- pop af
- push af
- push bc
- push de
- push hl
- call ZeroObjectPositions
- xor a
- ld [wWhichSprite], a
- call GetFirstSpriteAnimBufferProperty
-.spriteLoop
- ld a, [hl]
- or a
- jr z, .nextSprite ; skip if SPRITE_ANIM_ENABLED is 0
- call TryHandleSpriteAnimationFrame
- call LoadSpriteDataForAnimationFrame
-.nextSprite
- ld bc, SPRITE_ANIM_LENGTH
- add hl, bc
- ld a, [wWhichSprite]
- inc a
- ld [wWhichSprite], a
- cp SPRITE_ANIM_BUFFER_CAPACITY
- jr nz, .spriteLoop
- ld hl, wVBlankOAMCopyToggle
- inc [hl]
- pop hl
- pop de
- pop bc
- pop af
- ret
-
-LoadSpriteDataForAnimationFrame: ; 12a5b (4:6a5b)
- push hl
- push bc
- inc hl
- ld a, [hli]
- ld [wCurrSpriteAttributes], a
- ld a, [hli]
- ld [wCurrSpriteXPos], a
- ld a, [hli]
- ld [wCurrSpriteYPos], a
- ld a, [hl]
- ld [wCurrSpriteTileID], a
- ld bc, SPRITE_ANIM_FLAGS - SPRITE_ANIM_TILE_ID
- add hl, bc
- ld a, [hl]
- and 1 << SPRITE_ANIM_FLAG_UNSKIPPABLE
- jr nz, .quit
- ld bc, SPRITE_ANIM_FRAME_BANK - SPRITE_ANIM_FLAGS
- add hl, bc
- ld a, [hli]
- ld [wd5d6], a
- or a
- jr z, .quit
- ld a, [hli]
- ld h, [hl]
- ld l, a
- call DrawSpriteAnimationFrame
-.quit
- pop bc
- pop hl
- ret
-
-; decrements the given sprite's movement counter (2x if SPRITE_ANIM_FLAG_SPEED is set)
-; moves to the next animation frame if necessary
-TryHandleSpriteAnimationFrame: ; 12a8b (4:6a8b)
- push hl
- push bc
- push de
- push hl
- ld d, 1
- ld bc, SPRITE_ANIM_FLAGS
- add hl, bc
- bit SPRITE_ANIM_FLAG_SPEED, [hl]
- jr z, .skipSpeedIncrease
- inc d
-.skipSpeedIncrease
- pop hl
- ld bc, SPRITE_ANIM_COUNTER
- add hl, bc
- ld a, [hl]
- cp $ff
- jr z, .exit
- sub d
- ld [hl], a
- jr z, .doNextAnimationFrame
- jr nc, .exit
-.doNextAnimationFrame
- ld bc, SPRITE_ANIM_ENABLED - SPRITE_ANIM_COUNTER
- add hl, bc
- call HandleAnimationFrame
-.exit
- pop de
- pop bc
- pop hl
- ret
-
-StartNewSpriteAnimation: ; 12ab5 (4:6ab5)
- push hl
- push af
- ld c, SPRITE_ANIM_ID
- call GetSpriteAnimBufferProperty
- pop af
- cp [hl]
- pop hl
- ret z
- ; fallthrough
-
-StartSpriteAnimation: ; 12ac0 (4:6ac0)
- push hl
- call LoadSpriteAnimPointers
- call HandleAnimationFrame
- pop hl
- ret
-
-; a = sprite animation
-; c = animation counter value
-Func_12ac9: ; 12ac9 (4:6ac9)
- push bc
- ld b, a
- ld a, c
- or a
- ld a, b
- pop bc
- jr z, StartSpriteAnimation
-
- push hl
- push bc
- call LoadSpriteAnimPointers
- ld a, $ff
- call GetAnimFramePointerFromOffset
- pop bc
- ld a, c
- call SetAnimationCounterAndLoop
- pop hl
- ret
-
-; Given an animation ID, fills the current sprite's Animation Pointer and Frame Offset Pointer
-; a - Animation ID for current sprite
-LoadSpriteAnimPointers: ; 12ae2 (4:6ae2)
- push bc
- push af
- call GetFirstSpriteAnimBufferProperty
- pop af
- push hl
- ld bc, SPRITE_ANIM_ID
- add hl, bc
- ld [hli], a
- push hl
- ld l, 6 ; SpriteAnimations
- farcall GetMapDataPointer
- farcall LoadGraphicsPointerFromHL
- pop hl ; hl is animation bank
- ld a, [wTempPointerBank]
- ld [hli], a
- ld a, [wTempPointer + 0]
- ld [hli], a
- ld c, a
- ld a, [wTempPointer + 1]
- ld [hli], a
- ld b, a
- ; offset pointer = pointer + $3
- ld a, $3
- add c
- ld [hli], a
- ld a, $0
- adc b
- ld [hli], a
- pop hl
- pop bc
- ret
-
-; hl - beginning of current sprite_anim_buffer
-; Handles a full animation frame using all values in animation structure
-; (frame data offset, anim counter, X Mov, Y Mov)
-HandleAnimationFrame: ; 12b13 (4:6b13)
- push bc
- push de
- push hl
-.tryHandlingFrame
- push hl
- ld bc, SPRITE_ANIM_BANK
- add hl, bc
- ld a, [hli]
- ld [wTempPointerBank], a
-
- inc hl
- inc hl
- ld a, [hl] ; SPRITE_ANIM_FRAME_OFFSET_POINTER
- ld [wTempPointer + 0], a
- add SPRITE_FRAME_OFFSET_SIZE ; advance FRAME_OFFSET_POINTER by 1 frame, 4 bytes
- ld [hli], a
- ld a, [hl]
- ld [wTempPointer + 1], a
- adc 0
- ld [hl], a
-
- ld de, wLoadedPalData
- ld bc, SPRITE_FRAME_OFFSET_SIZE
- call CopyBankedDataToDE
- pop hl ; beginning of current sprite_anim_buffer
- ld de, wLoadedPalData
- ld a, [de]
- call GetAnimFramePointerFromOffset
- inc de
- ld a, [de]
- call SetAnimationCounterAndLoop
- jr c, .tryHandlingFrame
- inc de
- ld bc, SPRITE_ANIM_COORD_X
- add hl, bc
- push hl
- ld bc, SPRITE_ANIM_FLAGS - SPRITE_ANIM_COORD_X
- add hl, bc
- ld b, [hl]
- pop hl
- ld a, [de]
- bit SPRITE_ANIM_FLAG_X_SUBTRACT, b
- jr z, .addXOffset
- cpl
- inc a
-.addXOffset
- add [hl]
- ld [hli], a
- inc de
- ld a, [de]
- bit SPRITE_ANIM_FLAG_Y_SUBTRACT, b
- jr z, .addYOffset
- cpl
- inc a
-.addYOffset
- add [hl]
- ld [hl], a
- pop hl
- pop de
- pop bc
- ret
-
-; Calls GetAnimationFramePointer after setting up wTempPointerBank
-; and wVRAMTileOffset
-; a - frame offset from Animation Data
-; hl - beginning of Sprite Anim Buffer
-GetAnimFramePointerFromOffset: ; 12b6a (4:6b6a)
- ld [wVRAMTileOffset], a
- push hl
- push bc
- push de
- push hl
- ld bc, SPRITE_ANIM_BANK
- add hl, bc
- ld a, [hli]
- ld [wTempPointerBank], a
- ld a, [hli]
- ld [wTempPointer + 0], a
- ld a, [hli]
- ld [wTempPointer + 1], a
- pop hl
- call GetAnimationFramePointer ; calls with the original map data script pointer/bank
- pop de
- pop bc
- pop hl
- ret
-
-; Sets the animation counter for the current sprite. If the value is zero, loop the animation
-; a - new animation counter
-SetAnimationCounterAndLoop: ; 12b89 (4:6b89)
- push hl
- push bc
- ld bc, SPRITE_ANIM_COUNTER
- add hl, bc
- ld [hl], a
- or a
- jr nz, .exit
- ld bc, SPRITE_ANIM_POINTER - SPRITE_ANIM_COUNTER
- add hl, bc
- ld a, [hli]
- add $3 ; skip base bank/pointer at beginning of data structure
- ld c, a
- ld a, [hli]
- adc 0
- ld b, a
- ld a, c
- ld [hli], a
- ld a, b
- ld [hl], a
- scf
-.exit
- pop bc
- pop hl
- ret
-
-Func_12ba7: ; 12ba7 (4:6ba7)
- push hl
- push bc
- push de
- call EnableSRAM
- ld hl, wSpriteAnimBuffer
- ld de, sGeneralSaveDataEnd
- ld bc, $100
- call CopyDataHLtoDE
- ld hl, wSpriteVRAMBuffer
- ld bc, $40
- call CopyDataHLtoDE
- ld a, [wSpriteVRAMBufferSize]
- ld [de], a
- call DisableSRAM
- pop de
- pop bc
- pop hl
- ret
-
-Func_12bcd: ; 12bcd (4:6bcd)
- push hl
- push bc
- push de
- call EnableSRAM
- ld hl, sGeneralSaveDataEnd
- ld de, wSpriteAnimBuffer
- ld bc, $100
- call CopyDataHLtoDE
- ld de, wSpriteVRAMBuffer
- ld bc, $40
- call CopyDataHLtoDE
- ld a, [hl]
- ld [wSpriteVRAMBufferSize], a
- call DisableSRAM
- pop de
- pop bc
- pop hl
- ret
-
-; clears wSpriteVRAMBufferSize and wSpriteVRAMBuffer
-Func_12bf3: ; 12bf3 (4:6bf3)
- push hl
- push bc
- xor a
- ld [wSpriteVRAMBufferSize], a
- ld c, $40
- ld hl, wSpriteVRAMBuffer
-.asm_12bfe
- ld [hli], a
- dec c
- jr nz, .asm_12bfe
- pop bc
- pop hl
- ret
-
-; gets some value based on the sprite in a and wSpriteVRAMBuffer
-; loads the sprites data if it doesn't already exist
-Func_12c05: ; 12c05 (4:6c05)
- push hl
- push bc
- push de
- ld b, a
- ld d, $0
- ld a, [wSpriteVRAMBufferSize]
- ld c, a
- ld hl, wSpriteVRAMBuffer
- or a
- jr z, .tryToAddSprite
-
-.findSpriteMatchLoop
- inc hl
- ld a, [hl]
- cp b
- jr z, .foundSpriteMatch
- inc hl
- ld a, [hli]
- add [hl] ; add tile size to tile offset
- ld d, a
- inc hl
- dec c
- jr nz, .findSpriteMatchLoop
-
-.tryToAddSprite
- ld a, [wSpriteVRAMBufferSize]
- cp $10
- jr nc, .quitFail
- inc a
- ld [wSpriteVRAMBufferSize], a ; increase number of entries by 1
- inc hl
- push hl
- ld a, b
- ld [hli], a ; store sprite index
- call Func_12c4f
- push af
- ld a, d
- ld [hli], a ; store tile offset
- pop af
- ld [hl], a ; store tile size
- pop hl
-
-.foundSpriteMatch
- dec hl
- inc [hl] ; mark this entry as valid
- inc hl
- inc hl
- ld a, [hli]
- add [hl]
- cp $81
- jr nc, .quitFail ; exceeds total tile size
- ld a, d
- or a
- jr .quitSucceed
-
-.quitFail
- debug_nop
- xor a
- scf
-.quitSucceed
- pop de
- pop bc
- pop hl
- ret
-
-; input:
-; a = sprite index within the data map
-; d = tile offset in VRAM
-; output:
-; a = number of tiles in sprite
-Func_12c4f: ; 12c4f (4:6c4f)
- push af
- xor a
- ld [wd4cb], a
- ld a, d
- ld [wVRAMTileOffset], a
- pop af
- farcall Func_8025b
- ret
-
-Func_12c5e: ; 12c5e (4:6c5e)
- push hl
- push bc
- push de
- ld c, $10
- ld de, $4
- ld hl, wSpriteVRAMBuffer
-.asm_12c69
- ld a, [hl]
- or a
- jr z, .asm_12c77
- push hl
- push de
- inc hl
- ld a, [hli]
- ld d, [hl]
- call Func_12c4f
- pop de
- pop hl
-.asm_12c77
- add hl, de
- dec c
- jr nz, .asm_12c69
- pop de
- pop bc
- pop hl
- ret
-
-; 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 SetBGPAndLoadedPal ; 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 LoadTilemap_ToVRAM
- 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, SPRITE_ANIM_189, $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, SPRITE_ANIM_189, $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, SPRITE_ANIM_189, $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, SPRITE_ANIM_189, $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 SPRITE_ANIM_179, SPRITE_ANIM_176, $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 SPRITE_ANIM_180, SPRITE_ANIM_177, $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 SPRITE_ANIM_183, SPRITE_ANIM_181, $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 SPRITE_ANIM_184, SPRITE_ANIM_182, $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 SPRITE_ANIM_187, SPRITE_ANIM_185, $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 SPRITE_ANIM_188, SPRITE_ANIM_186, $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)
- ld a, [wd291]
- push af
- push de
- push bc
- ld de, wNamingScreenNamePosition
- ld a, [wCurTilemap]
- cp TILEMAP_PLAYER
- jr z, .asm_12fd9
- ld de, sTextSpeed
-.asm_12fd9
- ld a, e
- ld [wd291], a
- farcall LoadTilemap_ToVRAM
- ld a, [wd61e]
- add a
- add a
- ld c, a
- ld b, $00
- ld hl, Unknown_1301e
- add hl, bc
- ld a, [hli]
- push hl
- ld [wCurTileset], a
- ld a, d
- ld [wd4ca], a
- xor a
- ld [wd4cb], a
- farcall LoadTilesetGfx
- pop hl
- xor a
- ld [wd4ca], a
- ld a, [wd291]
- ld [wd4cb], a
- ld a, [hli]
- push hl
- farcall SetBGPAndLoadedPal
- pop hl
- ld a, [hli]
- ld h, [hl]
- ld l, a
- pop bc
- farcall Func_7041d
- pop de
- pop af
- ld [wd291], a
- ret
-
-Unknown_1301e: ; 1301e (4:701e)
- db TILESET_PLAYER, PALETTE_119
- dw SGBData_PlayerPortraitPals
-
- db TILESET_PLAYER, PALETTE_119
- dw SGBData_PlayerPortraitPals
-
- db TILESET_RONALD, PALETTE_121
- dw SGBData_RonaldPortraitPals
-
- db TILESET_SAM, PALETTE_122
- dw SGBData_SamPortraitPals
-
- db TILESET_IMAKUNI, PALETTE_123
- dw SGBData_ImakuniPortraitPals
-
- db TILESET_NIKKI, PALETTE_124
- dw SGBData_NikkiPortraitPals
-
- db TILESET_RICK, PALETTE_125
- dw SGBData_RickPortraitPals
-
- db TILESET_KEN, PALETTE_126
- dw SGBData_KenPortraitPals
-
- db TILESET_AMY, PALETTE_127
- dw SGBData_AmyPortraitPals
-
- db TILESET_ISAAC, PALETTE_128
- dw SGBData_IsaacPortraitPals
-
- db TILESET_MITCH, PALETTE_129
- dw SGBData_MitchPortraitPals
-
- db TILESET_GENE, PALETTE_130
- dw SGBData_GenePortraitPals
-
- db TILESET_MURRAY, PALETTE_131
- dw SGBData_MurrayPortraitPals
-
- db TILESET_COURTNEY, PALETTE_132
- dw SGBData_CourtneyPortraitPals
-
- db TILESET_STEVE, PALETTE_133
- dw SGBData_StevePortraitPals
-
- db TILESET_JACK, PALETTE_134
- dw SGBData_JackPortraitPals
-
- db TILESET_ROD, PALETTE_135
- dw SGBData_RodPortraitPals
-
- db TILESET_JOSEPH, PALETTE_136
- dw SGBData_JosephPortraitPals
-
- db TILESET_DAVID, PALETTE_137
- dw SGBData_DavidPortraitPals
-
- db TILESET_ERIK, PALETTE_138
- dw SGBData_ErikPortraitPals
-
- db TILESET_JOHN, PALETTE_139
- dw SGBData_JohnPortraitPals
-
- db TILESET_ADAM, PALETTE_140
- dw SGBData_AdamPortraitPals
-
- db TILESET_JONATHAN, PALETTE_141
- dw SGBData_JonathanPortraitPals
-
- db TILESET_JOSHUA, PALETTE_142
- dw SGBData_JoshuaPortraitPals
-
- db TILESET_NICHOLAS, PALETTE_143
- dw SGBData_NicholasPortraitPals
-
- db TILESET_BRANDON, PALETTE_144
- dw SGBData_BrandonPortraitPals
-
- db TILESET_MATTHEW, PALETTE_145
- dw SGBData_MatthewPortraitPals
-
- db TILESET_RYAN, PALETTE_146
- dw SGBData_RyanPortraitPals
-
- db TILESET_ANDREW, PALETTE_147
- dw SGBData_AndrewPortraitPals
-
- db TILESET_CHRIS, PALETTE_148
- dw SGBData_ChrisPortraitPals
-
- db TILESET_MICHAEL, PALETTE_149
- dw SGBData_MichaelPortraitPals
-
- db TILESET_DANIEL, PALETTE_150
- dw SGBData_DanielPortraitPals
-
- db TILESET_ROBERT, PALETTE_151
- dw SGBData_RobertPortraitPals
-
- db TILESET_BRITTANY, PALETTE_152
- dw SGBData_BrittanyPortraitPals
-
- db TILESET_KRISTIN, PALETTE_153
- dw SGBData_KristinPortraitPals
-
- db TILESET_HEATHER, PALETTE_154
- dw SGBData_HeatherPortraitPals
-
- db TILESET_SARA, PALETTE_155
- dw SGBData_SaraPortraitPals
-
- db TILESET_AMANDA, PALETTE_156
- dw SGBData_AmandaPortraitPals
-
- db TILESET_JENNIFER, PALETTE_157
- dw SGBData_JenniferPortraitPals
-
- db TILESET_JESSICA, PALETTE_158
- dw SGBData_JessicaPortraitPals
-
- db TILESET_STEPHANIE, PALETTE_159
- dw SGBData_StephaniePortraitPals
-
- db TILESET_AARON, PALETTE_160
- dw SGBData_AaronPortraitPals
-
- db TILESET_PLAYER, PALETTE_120
- dw SGBData_LinkOpponentPortraitPals
-
-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
-
-INCLUDE "engine/challenge_machine.asm"
-
-INCLUDE "data/npc_map_data.asm"
-INCLUDE "data/map_objects.asm"