summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcus Huderle <huderlem@gmail.com>2017-07-09 19:41:39 -0700
committerMarcus Huderle <huderlem@gmail.com>2017-07-09 19:41:39 -0700
commit43cf288a358c84cee0b119eaedfec6d839a5a8d1 (patch)
treecb2d1ab7bdf225c54bbbd0d0e96973bfc92f759a
parent50240b834c959de010d50d296ccdd4f07fd83a32 (diff)
More main.asm cleanup
-rwxr-xr-xdata/sgb.asm160
-rw-r--r--engine/pinball_game.asm4
-rw-r--r--engine/pinball_game/ball_loss/ball_loss.asm10
-rw-r--r--engine/pinball_game/ball_loss/ball_loss_blue_field.asm8
-rw-r--r--engine/pinball_game/ball_loss/ball_loss_red_field.asm8
-rwxr-xr-xengine/pinball_game/draw_num_party_mons_icon.asm36
-rwxr-xr-xengine/pinball_game/draw_pikachu_saver_icon.asm11
-rw-r--r--engine/pinball_game/draw_sprites/draw_sprites.asm28
-rwxr-xr-xengine/pinball_game/evolution_mode.asm916
-rwxr-xr-xengine/pinball_game/map_move.asm729
-rw-r--r--main.asm1895
11 files changed, 1905 insertions, 1900 deletions
diff --git a/data/sgb.asm b/data/sgb.asm
new file mode 100755
index 0000000..16c65ca
--- /dev/null
+++ b/data/sgb.asm
@@ -0,0 +1,160 @@
+Data_38000:
+ db $89, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+
+Data_38010:
+ db $89, $01, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+
+Data_38020:
+ db $51, $10, $00, $10, $00, $10, $00, $10, $00, $80, $00, $00, $00, $00, $00, $00
+
+Data_38030:
+ db $a9, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+
+ db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+
+Data_3809a:
+ db $00, $00, $00
+ db $40, $40, $40
+ db $90, $90, $90
+ db $e4, $e4, $e4
+
+Data_380a6:
+ db $59, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+ RGB 31, 31, 31
+
+ RGB 30, 31, 29
+ RGB 28, 28, 25
+ RGB 27, 26, 24
+ RGB 24, 24, 24
+
+ RGB 23, 23, 23
+ RGB 23, 23, 23
+ RGB 23, 23, 23
+ RGB 23, 23, 23
+
+ RGB 23, 23, 23
+ RGB 23, 23, 23
+ RGB 23, 23, 23
+ RGB 23, 23, 23
+
+ RGB 23, 23, 23
+ RGB 23, 23, 23
+ RGB 23, 23, 23
+ RGB 23, 23, 23
+
+ RGB 30, 31, 27
+ RGB 25, 26, 20
+ RGB 23, 21, 18
+ RGB 17, 17, 17
+
+ RGB 15, 15, 15
+ RGB 15, 15, 15
+ RGB 15, 15, 15
+ RGB 15, 15, 15
+
+ RGB 15, 15, 15
+ RGB 15, 15, 15
+ RGB 15, 15, 15
+ RGB 15, 15, 15
+
+ RGB 15, 15, 15
+ RGB 15, 15, 15
+ RGB 15, 15, 15
+ RGB 15, 15, 15
+
+ RGB 29, 31, 25
+ RGB 22, 24, 15
+ RGB 19, 16, 12
+ RGB 10, 10, 10
+
+ RGB 7, 7, 7
+ RGB 7, 7, 7
+ RGB 7, 7, 7
+ RGB 7, 7, 7
+
+ RGB 7, 7, 7
+ RGB 7, 7, 7
+ RGB 7, 7, 7
+ RGB 7, 7, 7
+
+ RGB 7, 7, 7
+ RGB 7, 7, 7
+ RGB 7, 7, 7
+ RGB 7, 7, 7
+
+ RGB 29, 31, 23
+ RGB 20, 22, 10
+ RGB 15, 12, 6
+ RGB 3, 3, 4
+
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+ RGB 0, 0, 0
+
+Data_38156:
+ db $99, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ INCBIN "gfx/sgb_border.interleave.2bpp"
+
+Data_39166:
+ db $99, $01, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ INCBIN "gfx/sgb_border_blank.2bpp"
+
+Data_3a176:
+ db $a1, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+ INCBIN "gfx/tilemaps/sgb_border.map"
+
+Data_3a9e6:
+ db $79, $5d, $08, $00, $0b, $8c, $d0, $f4, $60, $00, $00, $00, $00, $00, $00, $00
+Data_3a9f6:
+ db $79, $52, $08, $00, $0b, $a9, $e7, $9f, $01, $c0, $7e, $e8, $e8, $e8, $e8, $e0
+Data_3aa06:
+ db $79, $47, $08, $00, $0b, $c4, $d0, $16, $a5, $cb, $c9, $05, $d0, $10, $a2, $28
+Data_3aa16:
+ db $79, $3c, $08, $00, $0b, $f0, $12, $a5, $c9, $c9, $c8, $d0, $1c, $a5, $ca, $c9
+Data_3aa26:
+ db $79, $31, $08, $00, $0b, $0c, $a5, $ca, $c9, $7e, $d0, $06, $a5, $cb, $c9, $7e
+Data_3aa36:
+ db $79, $26, $08, $00, $0b, $39, $cd, $48, $0c, $d0, $34, $a5, $c9, $c9, $80, $d0
+Data_3aa46:
+ db $79, $1b, $08, $00, $0b, $ea, $ea, $ea, $ea, $ea, $a9, $01, $cd, $4f, $0c, $d0
+Data_3aa56:
+ db $79, $10, $08, $00, $0b, $4c, $20, $08, $ea, $ea, $ea, $ea, $ea, $60, $ea, $ea
+Data_3aa66:
+ db $b9, $01, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+Data_3aa76:
+ db $b9, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
diff --git a/engine/pinball_game.asm b/engine/pinball_game.asm
index 670457c..3adce56 100644
--- a/engine/pinball_game.asm
+++ b/engine/pinball_game.asm
@@ -153,8 +153,8 @@ GameScreenFunction_HandleBallPhysics: ; 0xd909
callba HideScoreIfBallLow
callba Func_8645
call Func_dba9
- call Func_dc7c
- call Func_dcb4
+ call DrawNumPartyMonsIcon
+ call DrawPikachuSaverLightningBoltIcon
.asm_d9e9
ld a, [wTimerActive]
and a
diff --git a/engine/pinball_game/ball_loss/ball_loss.asm b/engine/pinball_game/ball_loss/ball_loss.asm
index 06b0cda..0a3d8d9 100644
--- a/engine/pinball_game/ball_loss/ball_loss.asm
+++ b/engine/pinball_game/ball_loss/ball_loss.asm
@@ -32,3 +32,13 @@ CallTable_dc4d: ; 0xdc4d
dw HandleBallLossSeelBonus
; STAGE_SEEL_BONUS
dw HandleBallLossSeelBonus
+
+ShowBallLossText: ; 0xdc6d
+; Input: de = pointer to scrolling text header
+ push de
+ call FillBottomMessageBufferWithBlackTile
+ call Func_30db
+ ld hl, wScrollingText3
+ pop de
+ call LoadScrollingText
+ ret
diff --git a/engine/pinball_game/ball_loss/ball_loss_blue_field.asm b/engine/pinball_game/ball_loss/ball_loss_blue_field.asm
index 0d241fb..a6aee69 100644
--- a/engine/pinball_game/ball_loss/ball_loss_blue_field.asm
+++ b/engine/pinball_game/ball_loss/ball_loss_blue_field.asm
@@ -10,7 +10,7 @@ HandleBallLossBlueField: ; 0xde4f
ld [wNumTimesBallSavedTextWillDisplay], a
push af
ld de, BallSavedText
- call Func_dc6d
+ call ShowBallLossText
pop af
jr nz, .skip_save_text
ld a, $1
@@ -43,7 +43,7 @@ HandleBallLossBlueField: ; 0xde4f
ld a, $1
ld [wd49c], a ; Extra Ball
ld de, EndOfBallBonusText
- call Func_dc6d
+ call ShowBallLossText
ret
.noExtraBall
@@ -54,12 +54,12 @@ HandleBallLossBlueField: ; 0xde4f
inc a
ld [wd49d], a
ld de, EndOfBallBonusText
- call Func_dc6d
+ call ShowBallLossText
ret
.gameOver
ld de, EndOfBallBonusText
- call Func_dc6d
+ call ShowBallLossText
ld a, $1
ld [wGameOver], a
ret
diff --git a/engine/pinball_game/ball_loss/ball_loss_red_field.asm b/engine/pinball_game/ball_loss/ball_loss_red_field.asm
index fc9895e..03b2252 100644
--- a/engine/pinball_game/ball_loss/ball_loss_red_field.asm
+++ b/engine/pinball_game/ball_loss/ball_loss_red_field.asm
@@ -10,7 +10,7 @@ HandleBallLossRedField: ; 0xdd76
ld [wNumTimesBallSavedTextWillDisplay], a
push af
ld de, BallSavedText
- call Func_dc6d
+ call ShowBallLossText
pop af
jr nz, .skip_save_text
ld a, $1
@@ -43,7 +43,7 @@ HandleBallLossRedField: ; 0xdd76
ld a, $1
ld [wd49c], a
ld de, EndOfBallBonusText
- call Func_dc6d
+ call ShowBallLossText
ret
.asm_dddd
@@ -54,12 +54,12 @@ HandleBallLossRedField: ; 0xdd76
inc a
ld [wd49d], a
ld de, EndOfBallBonusText
- call Func_dc6d
+ call ShowBallLossText
ret
.gameOver
ld de, EndOfBallBonusText
- call Func_dc6d
+ call ShowBallLossText
ld a, $1
ld [wGameOver], a
ret
diff --git a/engine/pinball_game/draw_num_party_mons_icon.asm b/engine/pinball_game/draw_num_party_mons_icon.asm
new file mode 100755
index 0000000..66ad891
--- /dev/null
+++ b/engine/pinball_game/draw_num_party_mons_icon.asm
@@ -0,0 +1,36 @@
+DrawNumPartyMonsIcon: ; 0xdc7c
+; Draws the number of party Pokemon on the left side of the score bar on the bottom of the screen.
+ ld hl, wBottomMessageBuffer + $40
+ ld a, $83
+ ld [hli], a
+ ld a, $81
+ ld [hli], a
+ ld a, $81
+ ld [hl], a
+ ld a, [wNumPartyMons]
+ call ConvertHexByteToDecWord
+ ld hl, wBottomMessageBuffer + $41
+ ld c, $1
+ ld a, d
+ call .drawDigit
+ ld a, e
+ swap a
+ call .drawDigit
+ ld a, e
+ ld c, $0
+.drawDigit
+ and $f
+ jr nz, .asm_dca7
+ ld a, c
+ and a
+ ret nz
+.asm_dca7
+ ld c, $0
+ add $86
+ ld [hli], a
+ ret
+
+UnusedData_dcad:
+; BCD powers of 2
+; unused
+ db $01, $02, $04, $08, $16, $32, $64
diff --git a/engine/pinball_game/draw_pikachu_saver_icon.asm b/engine/pinball_game/draw_pikachu_saver_icon.asm
new file mode 100755
index 0000000..2b915c4
--- /dev/null
+++ b/engine/pinball_game/draw_pikachu_saver_icon.asm
@@ -0,0 +1,11 @@
+DrawPikachuSaverLightningBoltIcon: ; 0xdcb4
+; Draws the lightning bolt icon when Pikachu saver has been fully charged.
+; The ligntning bolt is drawn in the score bar at the bottom of the screen.
+ ld a, [wPikachuSaverCharge]
+ cp MAX_PIKACHU_SAVER_CHARGE
+ ld a, $81
+ jr nz, .drawIcon
+ ld a, $84
+.drawIcon
+ ld [wBottomMessageBuffer + $46], a
+ ret
diff --git a/engine/pinball_game/draw_sprites/draw_sprites.asm b/engine/pinball_game/draw_sprites/draw_sprites.asm
index e9dc693..f526080 100644
--- a/engine/pinball_game/draw_sprites/draw_sprites.asm
+++ b/engine/pinball_game/draw_sprites/draw_sprites.asm
@@ -19,3 +19,31 @@ CallTable_84bd: ; 0x84bd
padded_dab DrawSpritesDiglettBonus ; STAGE_DIGLETT_BONUS
padded_dab DrawSpritesSeelBonus ; STAGE_SEEL_BONUS
padded_dab DrawSpritesSeelBonus ; STAGE_SEEL_BONUS
+
+UnusedFunc_84fd:
+; unused
+ ld a, [hGameBoyColorFlag]
+ and a
+ jr z, .not_cgb
+ ld a, $1
+ ld [rVBK], a
+ xor a
+ call .FillAttrsOrBGMap
+ xor a
+ ld [rVBK], a
+.not_cgb
+ ld a, $81
+ call .FillAttrsOrBGMap
+ ld de, wBottomMessageBuffer + $47
+ call Func_8524
+ ret
+
+.FillAttrsOrBGMap: ; 8519 (2:4519)
+ hlCoord 0, 0, vBGWin
+ ld b, $20
+.loop
+ ld [hli], a
+ ld [hli], a
+ dec b
+ jr nz, .loop
+ ret
diff --git a/engine/pinball_game/evolution_mode.asm b/engine/pinball_game/evolution_mode.asm
new file mode 100755
index 0000000..8cc2523
--- /dev/null
+++ b/engine/pinball_game/evolution_mode.asm
@@ -0,0 +1,916 @@
+Func_10a95: ; 0x19a95
+ ld a, [wCurrentStage]
+ call CallInFollowingTable
+PointerTable_10a9b: ; 0x10a9b
+ padded_dab Func_20581 ; STAGE_RED_FIELD_TOP
+ padded_dab Func_20581 ; STAGE_RED_FIELD_BOTTOM
+ padded_dab Func_20581
+ padded_dab Func_20581
+ padded_dab Func_20bae ; STAGE_BLUE_FIELD_TOP
+ padded_dab Func_20bae ; STAGE_BLUE_FIELD_BOTTOM
+
+StartEvolutionMode: ; 0x10ab3
+ ld a, [wInSpecialMode]
+ and a
+ ret nz
+ ld a, [wCurrentStage]
+ rst JumpTable ; calls JumpToFuncInTable
+StartEvolutionMode_CallTable: ; 0x10abc
+ dw StartEvolutionMode_RedField ; STAGE_RED_FIELD_TOP
+ dw StartEvolutionMode_RedField ; STAGE_RED_FIELD_BOTTOM
+ dw StartEvolutionMode_UnusedField
+ dw StartEvolutionMode_UnusedField
+ dw StartEvolutionMode_BlueField ; STAGE_BLUE_FIELD_TOP
+ dw StartEvolutionMode_BlueField ; STAGE_BLUE_FIELD_BOTTOM
+
+ConcludeEvolutionMode: ; 0x10ac8
+ xor a
+ ld [wd5ca], a
+ call FillBottomMessageBufferWithBlackTile
+ xor a
+ ld [wInSpecialMode], a
+ ld [wWildMonIsHittable], a
+ ld [wd5b6], a
+ ld [wNumMonHits], a
+ ld [wd551], a
+ ld [wd554], a
+ call ClearWildMonCollisionMask
+ callba StopTimer
+ ld a, [wCurrentStage]
+ rst JumpTable ; calls JumpToFuncInTable
+ConcludeEvolutionMode_CallTable: ; 0x10af3
+ dw ConcludeEvolutionMode_RedField ; STAGE_RED_FIELD_TOP
+ dw ConcludeEvolutionMode_RedField ; STAGE_RED_FIELD_BOTTOM
+ dw DoNothing_11060
+ dw DoNothing_11060
+ dw ConcludeEvolutionMode_BlueField ; STAGE_BLUE_FIELD_TOP
+ dw ConcludeEvolutionMode_BlueField ; STAGE_BLUE_FIELD_TOP
+
+LoadRedFieldTopGraphics: ; 0x10aff
+ ld a, [wCurrentStage]
+ res 0, a
+ ld c, a
+ ld b, $0
+ srl c
+ sla a
+ sla a
+ sla a
+ sub c
+ ld c, a
+ ld hl, VideoData_10b2a
+ add hl, bc
+ ld a, [hli]
+ ld c, a
+ ld a, [hli]
+ ld b, a
+ ld a, [hli]
+ push af
+ push bc
+ ld a, [hli]
+ ld e, a
+ ld a, [hli]
+ ld d, a
+ ld a, [hli]
+ ld c, a
+ ld a, [hli]
+ ld b, a
+ pop hl
+ pop af
+ call LoadVRAMData
+ ret
+
+VideoData_10b2a: ; 0x10b2a
+ dab StageRedFieldTopGfx3
+ dw $8900
+ dw $E0
+ dab StageRedFieldTopGfx3
+ dw $8900
+ dw $E0
+ dab StageRedFieldTopGfx3
+ dw $8900
+ dw $E0
+
+Func_10b3f: ; 0x10b3f
+ call FillBottomMessageBufferWithBlackTile
+ call Func_30db
+ ld hl, wScrollingText1
+ ld a, [wCurrentEvolutionType]
+ cp EVO_EXPERIENCE
+ ld de, StartTrainingText
+ jr z, .asm_10b55
+ ld de, FindItemsText
+.asm_10b55
+ call LoadScrollingText
+ ret
+
+InitEvolutionSelectionMenu: ; 0x10b59
+; Initializes the list menu, which the player uses to select which pokemon to evolve.
+ xor a
+ ld [wDrawBottomMessageBox], a
+ ld hl, wBottomMessageText
+ ld a, $81
+ ld b, $30
+.clearLoop
+ ld [hli], a ; load spaces into bottom text. repeat 192 times
+ ld [hli], a
+ ld [hli], a
+ ld [hli], a
+ dec b
+ jr nz, .clearLoop
+ ld hl, wPartyMons
+ call LoadMonNamesIntoEvolutionSelectionList
+ ld a, BANK(InGameMenuSymbolsGfx)
+ ld hl, InGameMenuSymbolsGfx + $50
+ ld de, vTilesSH tile $08
+ ld bc, $0030
+ call LoadVRAMData
+ ld a, $0
+ ld hl, wBottomMessageText
+ deCoord 0, 0, vBGWin
+ ld bc, $00c0
+ call LoadVRAMData
+ ret
+
+LoadMonNamesIntoEvolutionSelectionList: ; 0x10b8e
+; Loads 6 pokemon names into the list that allows the player to select which pokemon to evolve.
+; Input: hl = pointer to a list of pokemon ids. (an offset of wPartyMons)
+ ld a, [wNumPartyMons]
+ ld c, $0
+ ld b, a
+.loop
+ ld a, [hli]
+ call LoadMonNameIntoEvolutionSelectionList
+ inc c
+ ld a, c
+ cp $6
+ jr z, .done
+ dec b
+ jr nz, .loop
+.done
+ ret
+
+LoadMonNameIntoEvolutionSelectionList: ; 0x10ba2
+; Loads a single pokemon name into the list of pokemon to evolve.
+; Input: c = index of the list
+; a = pokemon id
+ push bc
+ push hl
+ swap c ;c* 32, does wird things if c starts >15
+ sla c
+ ld b, $0
+ ld hl, wBottomMessageText
+ add hl, bc ;goes down text as many times as new c
+ ld d, h
+ ld e, l
+ ld c, a ;c now equals paerty mon, HL stored in de
+ ld b, $0
+ sla c
+ rl b
+ sla c
+ rl b
+ sla c
+ rl b
+ sla c
+ rl b ;multiplies party mon by 16, then jumps to correct name in the table
+ ld hl, PokemonNames ;names are 16 chars long
+ add hl, bc
+ ld a, $81
+ ld [de], a
+ inc de
+ ld a, $81
+ ld [de], a
+ inc de
+ ld a, $81
+ ld [de], a
+ inc de
+ ld a, $81
+ ld [de], a ; loaded 4 spaces into de
+ inc de
+ call LoadMonNameIntoBottomMessageBufferList
+.loadBlankCharacterLoop
+ ld a, e
+ and $1f
+ cp $14
+ jr nc, .done
+ ld a, $81
+ ld [de], a
+ inc de
+ jr .loadBlankCharacterLoop
+
+.done
+ pop hl
+ pop bc
+ ret
+
+SelectPokemonToEvolveMenu: ; 0x10bea
+; Drivers the menu that allows the player to select a pokemon to evolve.
+ xor a
+ ld [wCurSelectedPartyMon], a
+ ld [wCurSelectedPartyMonScrollOffset], a
+ ld [wPartySelectionCursorCounter], a
+.loop
+ call MoveEvolutionSelectionCursor
+ call ClearPersistentJoypadStates
+ call UpdateEvolutionSelectionList
+ rst AdvanceFrame
+ ld a, [wNewlyPressedButtonsPersistent]
+ bit BIT_A_BUTTON, a
+ jr z, .loop
+ lb de, $00, $01
+ call PlaySoundEffect
+ ret
+
+MoveEvolutionSelectionCursor: ; 0x10c0c
+ ld a, [wPressedButtonsPersistent]
+ ld b, a
+ ld a, [wNumPartyMons]
+ ld c, a
+ ld a, [wCurSelectedPartyMon]
+ bit BIT_D_UP, b
+ jr z, .didntPressUp
+ and a
+ ret z
+ ; move the cursor up
+ dec a
+ ld [wCurSelectedPartyMon], a
+ lb de, $00, $03
+ call PlaySoundEffect
+ ret
+
+.didntPressUp
+ bit BIT_D_DOWN, b
+ ret z
+ inc a
+ cp c
+ ret z
+ ; move the cursor down
+ ld [wCurSelectedPartyMon], a
+ lb de, $00, $03
+ call PlaySoundEffect
+ ret
+
+UpdateEvolutionSelectionList: ; 0x10c38
+ ld a, [wCurSelectedPartyMon]
+ ld hl, wCurSelectedPartyMonScrollOffset
+ sub [hl]
+ jr nc, .asm_10c45
+ dec [hl]
+ xor a
+ jr .asm_10c4c
+
+.asm_10c45
+ cp $6
+ jr c, .asm_10c4c
+ inc [hl]
+ ld a, $5
+.asm_10c4c
+ ld c, a
+ push bc
+ ld a, [hl]
+ ld c, a
+ ld b, $0
+ ld hl, wPartyMons
+ add hl, bc
+ call LoadMonNamesIntoEvolutionSelectionList
+ ld a, [hJoypadState]
+ and a
+ ld a, [wPartySelectionCursorCounter]
+ jr z, .asm_10c62
+ xor a
+.asm_10c62
+ inc a
+ ld [wPartySelectionCursorCounter], a
+ bit 3, a
+ pop bc
+ jr nz, .asm_10c78
+ swap c
+ sla c
+ ld b, $0
+ ld hl, wBottomMessageText + $03
+ add hl, bc
+ ld a, $88
+ ld [hl], a
+.asm_10c78
+ ld a, [wCurSelectedPartyMonScrollOffset]
+ and a
+ jr z, .asm_10c83
+ ld a, $8a
+ ld [wBottomMessageText + $11], a
+.asm_10c83
+ ld a, [wCurSelectedPartyMonScrollOffset]
+ add $7
+ jr z, .asm_10c96
+ ld c, a
+ ld a, [wNumPartyMons]
+ cp c
+ jr c, .asm_10c96
+ ld a, $89
+ ld [wBottomMessageText + $b1], a
+.asm_10c96
+ ld a, $0
+ ld hl, wBottomMessageText
+ deCoord 0, 0, vBGWin
+ ld bc, $00c0
+ call LoadVRAMData
+ ret
+
+PlaceEvolutionInParty: ; 0x10ca5
+ ld a, [wCurSelectedPartyMon]
+ ld c, a
+ ld b, $0
+ ld hl, wPartyMons
+ add hl, bc
+ ld a, [wCurrentEvolutionMon]
+ cp $ff
+ ret z
+ ld [hl], a
+ ret
+
+SelectPokemonToEvolve: ; 0x10cb7
+ call FillBottomMessageBufferWithBlackTile
+ call InitEvolutionSelectionMenu
+ ld a, $60
+ ld [hWY], a
+ dec a
+ ld [hLYC], a
+ ld a, $fd
+ ld [hLCDCMask], a
+ call SelectPokemonToEvolveMenu
+ ld a, $86
+ ld [hWY], a
+ ld a, $83
+ ld [hLYC], a
+ ld [hLastLYC], a
+ ld a, $ff
+ ld [hLCDCMask], a
+ ld a, [hGameBoyColorFlag]
+ and a
+ jr nz, .gameboyColor
+ ld a, BANK(StageRedFieldTopStatusBarSymbolsGfx_GameBoy)
+ ld hl, StageRedFieldTopStatusBarSymbolsGfx_GameBoy + $80
+ ld de, vTilesSH tile $08
+ ld bc, $0030
+ call LoadVRAMData
+ jr .asm_10cfc
+
+.gameboyColor
+ ld a, BANK(StageRedFieldTopStatusBarSymbolsGfx_GameBoyColor)
+ ld hl, StageRedFieldTopStatusBarSymbolsGfx_GameBoyColor + $80
+ ld de, vTilesSH tile $08
+ ld bc, $0030
+ call LoadVRAMData
+.asm_10cfc
+ call FillBottomMessageBufferWithBlackTile
+ ld a, SPECIAL_MODE_CATCHEM
+ ld [wDrawBottomMessageBox], a
+ ld [wInSpecialMode], a
+ ld [wSpecialMode], a
+ xor a
+ ld [wd54d], a
+ ld a, [wCurSelectedPartyMon]
+ ld c, a
+ ld b, $0
+ ld hl, wPartyMons
+ add hl, bc
+ ld a, [hl]
+ ld [wCurrentCatchEmMon], a
+ ret
+
+InitEvolutionModeForMon: ; 0x10d1d
+ ld hl, wd586
+ ld b, $18
+.asm_10d22
+ ld a, $1
+ ld [hli], a
+ xor a
+ ld [hli], a
+ dec b
+ jr nz, .asm_10d22
+ ld a, [wCurrentCatchEmMon]
+ ld c, a
+ ld b, $0
+ ld hl, Data_1298b
+ add hl, bc
+ ld a, [hl]
+ add $2
+ ld [wd555], a
+ xor a
+ ld hl, wd566
+ ld b, $13
+.asm_10d40
+ ld [hli], a
+ dec b
+ jr nz, .asm_10d40
+ ld a, [wCurrentCatchEmMon]
+ ld c, a
+ ld b, $0
+ sla c
+ rl b
+ ld hl, CatchEmTimerData
+ add hl, bc
+ ld a, [hli]
+ ld c, a
+ ld a, [hl]
+ ld b, a
+ callba StartTimer
+ ld a, [wCurrentCatchEmMon]
+ ld c, a
+ ld b, $0
+ sla c ; multiply mon id by 6
+ rl b
+ add c
+ ld c, a
+ jr nc, .noCarry
+ inc b
+.noCarry
+ sla c
+ rl b
+ ld hl, MonEvolutions
+ add hl, bc
+ push hl
+ ld bc, $03ff
+.countMonEvolutionsLoop
+ ld a, [hli]
+ and a
+ jr z, .noEvolution
+ inc c
+.noEvolution
+ inc hl
+ dec b
+ jr nz, .countMonEvolutionsLoop
+ ld a, c
+ cp $ff
+ jr nz, .asm_10d8a
+ xor a
+.asm_10d8a
+ call Func_a21
+ sla a
+ ld c, a
+ pop hl
+ add hl, bc ; hl points to one of three entries in mon's evolution data
+ ld a, [hli] ; a = mon id of evolution
+ dec a
+ ld [wCurrentEvolutionMon], a
+ ld a, [hl] ; a = evoluion type id
+ ld [wCurrentEvolutionType], a
+ xor a
+ ld [wd554], a
+ ld [wd556], a
+ ld [wd557], a
+ ld hl, wd55c
+ ld a, $1
+ ld b, $3
+.asm_10dac
+ ld [hli], a
+ dec b
+ jr nz, .asm_10dac
+ xor a
+ ld b, $7
+.asm_10db3
+ ld [hli], a
+ dec b
+ jr nz, .asm_10db3
+ ld de, wd55c
+ ld a, [wd555]
+ ld c, a
+ inc a
+ ld b, a
+.asm_10dc0
+ push bc
+ ld a, c
+ call Func_a21
+ ld c, a
+ ld b, $0
+ ld hl, wd55c
+ add hl, bc
+ ld c, [hl]
+ ld a, [de]
+ ld [hl], a
+ ld a, c
+ ld [de], a
+ pop bc
+ inc de
+ dec b
+ jr nz, .asm_10dc0
+ callba InitBallSaverForCatchEmMode
+ call Func_10b3f
+ call Func_3579
+ ld a, [wCurrentStage]
+ bit 0, a
+ jr z, .asm_10e09
+ ld a, BANK(StageRedFieldBottomBaseGameBoyColorGfx)
+ ld hl, StageRedFieldBottomBaseGameBoyColorGfx + $300
+ ld de, vTilesSH tile $2e
+ ld bc, $0020
+ call LoadOrCopyVRAMData
+ ld a, $0
+ ld hl, CatchBarTiles
+ deCoord 6, 8, vBGMap
+ ld bc, (CatchBarTilesEnd - CatchBarTiles)
+ call LoadOrCopyVRAMData
+.asm_10e09
+ ret
+
+Func_10e0a: ; 0x10e0a
+ ld a, [wCurrentEvolutionMon]
+ cp $ff
+ jp z, Func_10e8b
+ ld c, a
+ ld b, $0
+ sla c
+ rl b
+ sla c
+ rl b
+ sla c
+ rl b
+ sla c
+ rl b
+ ld hl, PokemonNames + 1
+ add hl, bc
+ ld de, ItEvolvedIntoAnText ; "It evolved into an"
+ ld bc, Data_2b34
+ ld a, [hl]
+ ; check if mon's name starts with a vowel, so it can print "an", instead of "a"
+ cp "A"
+ jr z, .nameStartsWithVowel
+ cp "I"
+ jr z, .nameStartsWithVowel
+ cp "U"
+ jr z, .nameStartsWithVowel
+ cp "E"
+ jr z, .nameStartsWithVowel
+ cp "O"
+ jr z, .nameStartsWithVowel
+ ld de, ItEvolvedIntoAText ; "It evolved into a"
+ ld bc, Data_2b1c
+.nameStartsWithVowel
+ push hl
+ push bc
+ push de
+ call FillBottomMessageBufferWithBlackTile
+ call Func_30db
+ ld hl, wScrollingText1
+ pop de
+ call LoadScrollingText
+ ld hl, wScrollingText2
+ pop de
+ call LoadScrollingText
+ pop hl
+ ld de, wBottomMessageText + $20
+ ld b, $0
+.asm_10e67
+ ld a, [hli]
+ and a
+ jr z, .asm_10e70
+ ld [de], a
+ inc de
+ inc b
+ jr .asm_10e67
+
+.asm_10e70
+ ld a, $20
+ ld [de], a
+ inc de
+ xor a
+ ld [de], a
+ ld a, [wScrollingText2ScrollStepsRemaining]
+ add b
+ ld [wScrollingText2ScrollStepsRemaining], a
+ ld a, $14
+ sub b
+ srl a
+ ld b, a
+ ld a, [wScrollingText2StopOffset]
+ add b
+ ld [wScrollingText2StopOffset], a
+ ret
+
+Func_10e8b: ; 0x10e8b
+ ld bc, OneMillionPoints
+ callba AddBigBCD6FromQueue
+ ld bc, $0100
+ ld de, $0000
+ push bc
+ push de
+ call FillBottomMessageBufferWithBlackTile
+ call Func_30db
+ ld hl, wScrollingText2
+ ld de, Data_2b6b
+ call Func_32cc
+ pop de
+ pop bc
+ ld hl, wScrollingText1
+ ld de, EvolutionSpecialBonusText
+ call LoadScrollingText
+ ret
+
+StartEvolutionMode_RedField: ; 0x10ebb
+ ld a, [wNumPartyMons]
+ and a
+ ret z
+ call SelectPokemonToEvolve
+ call InitEvolutionModeForMon
+ ld a, [wd555]
+ sub $2
+ ld c, a
+ sla c
+ ld hl, IndicatorStatesPointerTable_10f3b
+ add hl, bc
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld de, wIndicatorStates
+ ld b, $13
+.loop
+ ld a, [hli]
+ ld [de], a
+ inc de
+ dec b
+ jr nz, .loop
+ xor a
+ ld [wLeftAlleyCount], a
+ call Func_107b0
+ ld a, $2
+ ld [wd7ad], a
+ ld de, $0002
+ call PlaySong
+ call SetPokemonSeenFlag
+ ld a, [wCurrentStage]
+ bit 0, a
+ jr nz, .asm_10f0b
+ ld a, BANK(EvolutionTrinketsGfx)
+ ld hl, EvolutionTrinketsGfx
+ ld de, vTilesSH tile $10
+ ld bc, $00e0
+ call LoadOrCopyVRAMData
+ ret
+
+.asm_10f0b
+ ld a, BANK(EvolutionTrinketsGfx)
+ ld hl, EvolutionTrinketsGfx
+ ld de, vTilesOB tile $20
+ ld bc, $00e0
+ call LoadOrCopyVRAMData
+ callba Func_14135
+ callba Func_10184
+ ld a, [hGameBoyColorFlag]
+ and a
+ callba nz, Func_102bc
+ ret
+
+IndicatorStatesPointerTable_10f3b: ; 0x10f3b
+ dw IndicatorStates_10f4b
+ dw IndicatorStates_10f5e
+ dw IndicatorStates_10f71
+ dw IndicatorStates_10f84
+ dw IndicatorStates_10f97
+ dw IndicatorStates_10faa
+ dw IndicatorStates_10fbd
+ dw IndicatorStates_10fd0
+
+IndicatorStates_10f4b: ; 0x10f4b
+ db $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $00, $00, $01, $01, $00, $00, $00, $00
+
+IndicatorStates_10f5e: ; 0x10f5e
+ db $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $01, $00, $01, $01, $00, $00, $00, $00
+
+IndicatorStates_10f71: ; 0x10f71
+ db $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $01, $01, $01, $01, $00, $00, $00, $00
+
+IndicatorStates_10f84: ; 0x10f84
+ db $00, $00, $00, $00, $00, $00, $00, $00, $01, $01, $00, $01, $01, $01, $01, $00, $00, $00, $00
+
+IndicatorStates_10f97: ; 0x10f97
+ db $00, $00, $00, $80, $00, $00, $00, $00, $01, $01, $01, $01, $01, $01, $01, $00, $00, $00, $00
+
+IndicatorStates_10faa: ; 0x10faa
+ db $00, $00, $80, $80, $00, $00, $00, $00, $01, $01, $01, $01, $01, $01, $01, $00, $00, $00, $00
+
+IndicatorStates_10fbd: ; 0x10fbd
+ db $00, $00, $80, $80, $00, $00, $00, $01, $01, $01, $01, $01, $01, $01, $01, $00, $00, $00, $00
+
+IndicatorStates_10fd0: ; 0x10fd0
+ db $00, $00, $80, $80, $00, $00, $01, $01, $01, $01, $01, $01, $01, $01, $01, $00, $00, $00, $00
+
+ConcludeEvolutionMode_RedField: ; 0x10fe3
+ call ResetIndicatorStates
+ call Func_107c2
+ call SetLeftAndRightAlleyArrowIndicatorStates_RedField
+ call Func_107e9
+ ld a, [wCurrentStage]
+ bit 0, a
+ jp z, LoadRedFieldTopGraphics
+ callba Func_14135
+ callba LoadSlotCaveCoverGraphics_RedField
+ callba LoadMapBillboardTileData
+ ld a, BANK(StageSharedBonusSlotGlowGfx)
+ ld hl, StageSharedBonusSlotGlowGfx + $60
+ ld de, vTilesOB tile $20
+ ld bc, $00e0
+ call LoadVRAMData
+ ld a, [hGameBoyColorFlag]
+ and a
+ jr z, .asm_11036
+ ld a, BANK(StageRedFieldBottomOBJPalette7)
+ ld hl, StageRedFieldBottomOBJPalette7
+ ld de, $0078
+ ld bc, $0008
+ call Func_7dc
+.asm_11036
+ ld hl, BlankSaverSpaceTileDataRedField
+ ld a, BANK(BlankSaverSpaceTileDataRedField)
+ call Func_10aa
+ ld a, [wPreviousNumPokeballs]
+ callba LoadPokeballsGraphics_RedField
+ ld hl, CaughtPokeballTileDataPointers
+ ld a, BANK(CaughtPokeballTileDataPointers)
+ call Func_10aa
+ ret
+
+StartEvolutionMode_UnusedField: ; 0x11054
+ ld a, [wNumPartyMons]
+ and a
+ ret z
+ call SelectPokemonToEvolve
+ call InitEvolutionModeForMon
+ ret
+
+DoNothing_11060: ; 0x11060
+ ret
+
+StartEvolutionMode_BlueField: ; 0x11061
+ ld a, [wNumPartyMons]
+ and a
+ ret z
+ call SelectPokemonToEvolve
+ call InitEvolutionModeForMon
+ ld a, $1
+ ld [wd643], a
+ ld a, [wd555]
+ sub $2
+ ld c, a
+ sla c
+ ld hl, IndicatorStatesPointerTable_110ed
+ add hl, bc
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld de, wIndicatorStates
+ ld b, $13
+.asm_11085
+ ld a, [hli]
+ ld [de], a
+ inc de
+ dec b
+ jr nz, .asm_11085
+ xor a
+ ld [wLeftAlleyCount], a
+ callba CloseSlotCave
+ ld a, $2
+ ld [wd7ad], a
+ ld de, $0002
+ call PlaySong
+ call SetPokemonSeenFlag
+ ld a, [wCurrentStage]
+ bit 0, a
+ jr nz, .asm_110bd
+ ld a, BANK(EvolutionTrinketsGfx)
+ ld hl, EvolutionTrinketsGfx
+ ld de, vTilesOB tile $60
+ ld bc, $00e0
+ call LoadOrCopyVRAMData
+ ret
+
+.asm_110bd
+ ld a, BANK(EvolutionTrinketsGfx)
+ ld hl, EvolutionTrinketsGfx
+ ld de, vTilesOB tile $20
+ ld bc, $00e0
+ call LoadOrCopyVRAMData
+ callba Func_1c2cb
+ callba Func_10184
+ ld a, [hGameBoyColorFlag]
+ and a
+ callba nz, Func_102bc
+ ret
+
+IndicatorStatesPointerTable_110ed: ; 0x110ed
+ dw IndicatorStates_110fd
+ dw IndicatorStates_11110
+ dw IndicatorStates_11123
+ dw IndicatorStates_11136
+ dw IndicatorStates_11149
+ dw IndicatorStates_1115c
+ dw IndicatorStates_1116f
+ dw IndicatorStates_11182
+
+IndicatorStates_110fd: ; 0x110fd
+ db $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $00, $00, $01, $01, $00, $00, $00, $00
+
+IndicatorStates_11110: ; 0x11110
+ db $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $01, $00, $01, $01, $00, $00, $00, $00
+
+IndicatorStates_11123: ; 0x11123
+ db $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $01, $01, $01, $01, $00, $00, $00, $00
+
+IndicatorStates_11136: ; 0x11136
+ db $00, $00, $80, $00, $00, $00, $00, $00, $01, $01, $00, $01, $01, $01, $01, $00, $00, $00, $00
+
+IndicatorStates_11149: ; 0x11149
+ db $00, $00, $80, $80, $00, $00, $00, $00, $01, $01, $01, $01, $01, $01, $01, $00, $00, $00, $00
+
+IndicatorStates_1115c: ; 0x1115c
+ db $00, $00, $80, $80, $00, $00, $00, $00, $01, $01, $01, $01, $01, $01, $01, $00, $00, $00, $00
+
+IndicatorStates_1116f: ; 0x1116f
+ db $80, $00, $80, $80, $00, $00, $00, $01, $01, $01, $01, $01, $01, $01, $01, $00, $00, $00, $00
+
+IndicatorStates_11182: ; 0x11182
+ db $80, $00, $80, $80, $00, $00, $01, $01, $01, $01, $01, $01, $01, $01, $01, $00, $00, $00, $00
+
+ConcludeEvolutionMode_BlueField: ; 0x11195
+ xor a
+ ld [wd643], a
+ call ResetIndicatorStates
+ call Func_107c2
+ callba SetLeftAndRightAlleyArrowIndicatorStates_BlueField
+ ld a, [wCurrentStage]
+ bit 0, a
+ jp z, LoadBlueFieldTopGraphics
+ callba Func_1c2cb
+ callba LoadSlotCaveCoverGraphics_BlueField
+ callba LoadMapBillboardTileData
+ ld a, Bank(StageSharedBonusSlotGlowGfx)
+ ld hl, StageSharedBonusSlotGlowGfx + $60
+ ld de, vTilesOB tile $20
+ ld bc, $00e0
+ call LoadVRAMData
+ ld a, [hGameBoyColorFlag]
+ and a
+ jr z, .asm_111f0
+ ld a, BANK(StageBlueFieldBottomOBJPalette7)
+ ld hl, StageBlueFieldBottomOBJPalette7
+ ld de, $0078
+ ld bc, $0008
+ call Func_7dc
+.asm_111f0
+ ld hl, BlankSaverSpaceTileDataBlueField
+ ld a, BANK(BlankSaverSpaceTileDataBlueField)
+ call Func_10aa
+ ld a, [wPreviousNumPokeballs]
+ callba LoadPokeballsGraphics_RedField
+ ld hl, Data_10a88
+ ld a, BANK(Data_10a88)
+ call Func_10aa
+ ret
+
+LoadBlueFieldTopGraphics: ; 0x1120e
+ ld a, [wCurrentStage]
+ sub $4
+ res 0, a
+ ld c, a
+ ld b, $0
+ srl c
+ sla a
+ sla a
+ sla a
+ sub c
+ ld c, a
+ ld hl, VRAMData_1123b
+ add hl, bc
+ ld a, [hli]
+ ld c, a
+ ld a, [hli]
+ ld b, a
+ ld a, [hli]
+ push af
+ push bc
+ ld a, [hli]
+ ld e, a
+ ld a, [hli]
+ ld d, a
+ ld a, [hli]
+ ld c, a
+ ld a, [hli]
+ ld b, a
+ pop hl
+ pop af
+ call LoadVRAMData
+ ret
+
+VRAMData_1123b: ; 0x1123b
+; This doesn't seem very useful...
+ dab StageBlueFieldTopGfx3
+ dw $8600, $E0
+ dab StageBlueFieldTopGfx3
+ dw $8600, $E0
+ dab StageBlueFieldTopGfx3
+ dw $8600, $E0
+ dab StageBlueFieldTopGfx3
+ dw $8600, $E0
+ dab StageBlueFieldTopGfx3
+ dw $8600, $E0
+ dab StageBlueFieldTopGfx3
+ dw $8600, $E0
+ dab StageBlueFieldTopGfx3
+ dw $8600, $E0
diff --git a/engine/pinball_game/map_move.asm b/engine/pinball_game/map_move.asm
new file mode 100755
index 0000000..68d2f50
--- /dev/null
+++ b/engine/pinball_game/map_move.asm
@@ -0,0 +1,729 @@
+Func_301ce: ; 0x301ce
+ ld a, [wCurrentStage]
+ call CallInFollowingTable
+PointerTable_301d4: ; 0x301d4
+ padded_dab Func_314ae ; STAGE_RED_FIELD_TOP
+ padded_dab Func_314ae ; STAGE_RED_FIELD_BOTTOM
+ padded_dab Func_314ae
+ padded_dab Func_314ae
+ padded_dab Func_3161b ; STAGE_BLUE_FIELD_TOP
+ padded_dab Func_3161b ; STAGE_BLUE_FIELD_BOTTOM
+
+StartMapMoveMode: ; 0x301ec
+ ld a, [wInSpecialMode]
+ and a
+ ret nz
+ ld a, $1
+ ld [wInSpecialMode], a
+ ld a, SPECIAL_MODE_MAP_MOVE
+ ld [wSpecialMode], a
+ xor a
+ ld [wd54d], a
+ ld bc, $0030 ; 30 seconds
+ callba StartTimer
+ ld a, [wCurrentStage]
+ bit 0, a
+ jr z, .asm_3021b
+ ld a, [wMapMoveDirection]
+ add $12
+ call LoadBillboardTileData
+.asm_3021b
+ ld a, [wCurrentStage]
+ rst JumpTable ; calls JumpToFuncInTable
+CallTable_3021f: ; 0x3021f
+ dw Func_311b4 ; STAGE_RED_FIELD_TOP
+ dw Func_311b4 ; STAGE_RED_FIELD_BOTTOM
+ dw DoNothing_31324
+ dw DoNothing_31324
+ dw Func_31326 ; STAGE_BLUE_FIELD_TOP
+ dw Func_31326 ; STAGE_BLUE_FIELD_BOTTOM
+
+Func_3022b: ; 0x3022b
+ xor a
+ ld [wd5ca], a ;turn text off
+ call FillBottomMessageBufferWithBlackTile ;clear text
+ xor a
+ ld [wInSpecialMode], a
+ ld [wSpecialMode], a ;no longer in special modes
+ callba StopTimer
+ ld a, [wCurrentStage]
+ rst JumpTable ; calls JumpToFuncInTable
+CallTable_30247: ; 0x30247
+ dw Func_31234 ; STAGE_RED_FIELD_TOP
+ dw Func_31234 ; STAGE_RED_FIELD_BOTTOM
+ dw DoNothing_31325
+ dw DoNothing_31325
+ dw Func_313c3 ; STAGE_BLUE_FIELD_TOP
+ dw Func_313c3 ; STAGE_BLUE_FIELD_TOP
+
+INCLUDE "engine/pinball_game/billboard_tiledata.asm"
+
+LoadScrollingMapNameText: ; 0x3118f
+; Loads the scrolling message that displays the current map's name.
+; Input: bc = pointer to prefix scrolling text
+ push bc
+ call FillBottomMessageBufferWithBlackTile
+ call Func_30db
+ ld a, [wCurrentMap]
+ sla a
+ ld c, a
+ ld b, $0
+ ld hl, MapNames
+ add hl, bc
+ ld a, [hli]
+ ld e, a
+ ld a, [hli]
+ ld d, a
+ ld hl, wScrollingText2
+ call LoadScrollingText
+ pop de
+ ld hl, wScrollingText1
+ call LoadScrollingText
+ ret
+
+Func_311b4: ; 0x311b4
+ ld a, [wMapMoveDirection]
+ and a
+ jr nz, .asm_311ce
+ ld a, $80
+ ld [wIndicatorStates], a
+ ld [wIndicatorStates + 2], a
+ xor a
+ ld [wIndicatorStates + 1], a
+ ld [wIndicatorStates + 3], a
+ ld [wIndicatorStates + 4], a
+ jr .asm_311e2
+
+.asm_311ce
+ ld a, $80
+ ld [wIndicatorStates + 1], a
+ ld [wIndicatorStates + 3], a
+ xor a
+ ld [wIndicatorStates], a
+ ld [wIndicatorStates + 2], a
+ ld [wIndicatorStates + 4], a
+ jr .asm_311e2
+
+.asm_311e2
+ ld a, $2
+ callba LoadDiglettGraphics
+ ld a, $5
+ callba LoadDiglettGraphics
+ ld a, $6a
+ ld [wStageCollisionMap + $f0], a
+ ld a, $6b
+ ld [wStageCollisionMap + $110], a
+ ld a, $66
+ ld [wStageCollisionMap + $e3], a
+ ld a, $67
+ ld [wStageCollisionMap + $103], a
+ callba Func_107b0
+ ld a, $4
+ ld [wd7ad], a
+ ld de, $0003
+ call PlaySong
+ ld a, [wCurrentStage]
+ bit 0, a
+ ret z
+ callba Func_14135
+ ret
+
+Func_31234: ; 0x31234
+ callba ResetIndicatorStates
+ callba Func_107c2
+ callba SetLeftAndRightAlleyArrowIndicatorStates_RedField
+ callba Func_107e9
+ ld a, [wCurrentStage]
+ bit 0, a
+ ret z
+ callba Func_14135
+ callba LoadSlotCaveCoverGraphics_RedField
+ callba LoadMapBillboardTileData
+ ret
+
+ChooseNextMap_RedField: ; 0x31282
+; Picks the next map to perform a map move.
+; Also records which maps have been visited.
+ ld a, [wNumMapMoves]
+ inc a
+ cp $6
+ jr c, .dontReset
+ ld a, $ff
+ ld [wVisitedMaps], a
+ ld [wVisitedMaps + 1], a
+ ld [wVisitedMaps + 2], a
+ ld [wVisitedMaps + 3], a
+ ld [wVisitedMaps + 4], a
+ ld [wVisitedMaps + 5], a
+ xor a
+.dontReset
+ ld [wNumMapMoves], a
+ cp $3
+ jr c, .chooseMapFromArea1
+ cp $5
+ jr c, .chooseMapFromArea2
+ ld a, INDIGO_PLATEAU
+ ld [wCurrentMap], a
+ ld [wVisitedMaps + 5], a
+ ret
+
+.chooseMapFromArea1
+ call GenRandom
+ and $7
+ cp $7
+ jr nc, .chooseMapFromArea1
+ ld c, a
+ ld b, $0
+ ld hl, FirstMapMoveSet_RedField
+ add hl, bc
+ ld c, [hl]
+ ld hl, wVisitedMaps
+ ld a, [wNumMapMoves]
+ and a
+ jr z, .asm_312d4
+ ld b, a
+.asm_312cd
+ ld a, [hli]
+ cp c
+ jr z, .chooseMapFromArea1
+ dec b
+ jr nz, .asm_312cd
+.asm_312d4
+ ld a, c
+ ld [wCurrentMap], a
+ ld a, [wNumMapMoves]
+ ld c, a
+ ld b, $0
+ ld hl, wVisitedMaps
+ add hl, bc
+ ld a, [wCurrentMap]
+ ld [hl], a
+ ret
+
+.chooseMapFromArea2
+ call GenRandom
+ and $3
+ ld c, a
+ ld b, $0
+ ld hl, SecondMapMoveSet_RedField
+ add hl, bc
+ ld c, [hl]
+ ld hl, wVisitedMaps + 3
+ ld a, [wNumMapMoves]
+ sub $3
+ jr z, .asm_31306
+ ld b, a
+.asm_312ff
+ ld a, [hli]
+ cp c
+ jr z, .chooseMapFromArea2
+ dec b
+ jr nz, .asm_312ff
+.asm_31306
+ ld a, c
+ ld [wCurrentMap], a
+ ld a, [wNumMapMoves]
+ ld c, a
+ ld b, $0
+ ld hl, wVisitedMaps
+ add hl, bc
+ ld a, [wCurrentMap]
+ ld [hl], a
+ ret
+
+FirstMapMoveSet_RedField:
+ db PALLET_TOWN
+ db VIRIDIAN_FOREST
+ db PEWTER_CITY
+ db CERULEAN_CITY
+ db VERMILION_SEASIDE
+ db ROCK_MOUNTAIN
+ db LAVENDER_TOWN
+
+SecondMapMoveSet_RedField:
+ db CYCLING_ROAD
+ db SAFARI_ZONE
+ db SEAFOAM_ISLANDS
+ db CINNABAR_ISLAND
+
+DoNothing_31324: ; 0x31324
+ ret
+
+DoNothing_31325: ; 0x31325
+ ret
+
+Func_31326: ; 0x31326
+ ld a, [wMapMoveDirection]
+ and a
+ jr nz, .asm_3134c
+ ld a, $80
+ ld [wIndicatorStates], a
+ ld [wIndicatorStates + 2], a
+ xor a
+ ld [wIndicatorStates + 1], a
+ ld [wIndicatorStates + 3], a
+ ld [wIndicatorStates + 4], a
+ ld a, $3
+ callba LoadPsyduckOrPoliwagGraphics
+ jr .asm_31382
+
+.asm_3134c
+ ld a, $80
+ ld [wIndicatorStates + 1], a
+ ld [wIndicatorStates + 3], a
+ xor a
+ ld [wIndicatorStates], a
+ ld [wIndicatorStates + 2], a
+ ld [wIndicatorStates + 4], a
+ ld a, $1
+ callba LoadPsyduckOrPoliwagGraphics
+ ld a, $6
+ callba LoadPsyduckOrPoliwagGraphics
+ ld a, $7
+ callba LoadPsyduckOrPoliwagNumberGraphics
+.asm_31382
+ ld a, [wCurrentStage]
+ bit 0, a
+ jr z, .asm_3139d
+ ld a, $54
+ ld [wStageCollisionMap + $e3], a
+ ld a, $55
+ ld [wStageCollisionMap + $103], a
+ ld a, $52
+ ld [wStageCollisionMap + $f0], a
+ ld a, $53
+ ld [wStageCollisionMap + $110], a
+.asm_3139d
+ ld a, $1
+ ld [wd644], a
+ callba CloseSlotCave
+ ld de, $0003
+ call PlaySong
+ ld a, [wCurrentStage]
+ bit 0, a
+ ret z
+ callba Func_1c2cb
+ ret
+
+Func_313c3: ; 0x313c3
+ callba ResetIndicatorStates
+ callba Func_107c2
+ callba SetLeftAndRightAlleyArrowIndicatorStates_BlueField
+ ld a, $0
+ ld [wd644], a
+ ld a, [wCurrentStage]
+ bit 0, a
+ ret z
+ callba Func_1c2cb
+ callba LoadSlotCaveCoverGraphics_BlueField
+ callba LoadMapBillboardTileData
+ ret
+
+ChooseNextMap_BlueField: ; 0x3140b
+; Picks the next map to perform a map move.
+; Also records which maps have been visited.
+ ld a, [wNumMapMoves]
+ inc a
+ cp $6
+ jr c, .dontReset
+ ld a, $ff
+ ld [wVisitedMaps], a
+ ld [wVisitedMaps + 1], a
+ ld [wVisitedMaps + 2], a
+ ld [wVisitedMaps + 3], a
+ ld [wVisitedMaps + 4], a
+ ld [wVisitedMaps + 5], a
+ xor a
+.dontReset
+ ld [wNumMapMoves], a
+ cp $3
+ jr c, .chooseMapFromArea1
+ cp $5
+ jr c, .chooseMapFromArea2
+ ld a, INDIGO_PLATEAU
+ ld [wCurrentMap], a
+ ld [wVisitedMaps + 5], a
+ ret
+
+.chooseMapFromArea1
+ call GenRandom
+ and $7
+ cp $7
+ jr nc, .chooseMapFromArea1
+ ld c, a
+ ld b, $0
+ ld hl, FirstMapMoveSet_BlueField
+ add hl, bc
+ ld c, [hl]
+ ld hl, wVisitedMaps
+ ld a, [wNumMapMoves]
+ and a
+ jr z, .asm_3145e
+ ld b, a
+.asm_31457
+ ld a, [hli]
+ cp c
+ jr z, .chooseMapFromArea1
+ dec b
+ jr nz, .asm_31457
+.asm_3145e
+ ld a, c
+ ld [wCurrentMap], a
+ ld a, [wNumMapMoves]
+ ld c, a
+ ld b, $0
+ ld hl, wVisitedMaps
+ add hl, bc
+ ld a, [wCurrentMap]
+ ld [hl], a
+ ret
+
+.chooseMapFromArea2
+ call GenRandom
+ and $3
+ ld c, a
+ ld b, $0
+ ld hl, SecondMapMoveSet_BlueField
+ add hl, bc
+ ld c, [hl]
+ ld hl, wVisitedMaps + 3
+ ld a, [wNumMapMoves]
+ sub $3
+ jr z, .asm_31490
+ ld b, a
+.asm_31489
+ ld a, [hli]
+ cp c
+ jr z, .chooseMapFromArea2
+ dec b
+ jr nz, .asm_31489
+.asm_31490
+ ld a, c
+ ld [wCurrentMap], a
+ ld a, [wNumMapMoves]
+ ld c, a
+ ld b, $0
+ ld hl, wVisitedMaps
+ add hl, bc
+ ld a, [wCurrentMap]
+ ld [hl], a
+ ret
+
+FirstMapMoveSet_BlueField:
+ db VIRIDIAN_CITY
+ db VIRIDIAN_FOREST
+ db MT_MOON
+ db CERULEAN_CITY
+ db VERMILION_STREETS
+ db ROCK_MOUNTAIN
+ db CELADON_CITY
+
+SecondMapMoveSet_BlueField:
+ db FUCHSIA_CITY
+ db SAFARI_ZONE
+ db SAFFRON_CITY
+ db CINNABAR_ISLAND
+
+Func_314ae: ; 0x314ae
+ ld a, [wTimerActive]
+ and a
+ ld a, [wd54c]
+ jr z, .asm_314d0
+ cp $1
+ jp z, Func_31591
+ cp $3
+ jp z, Func_31591
+ cp $2
+ jp z, Func_315b3
+ cp $5
+ jp z, Func_315b3
+ cp $d
+ jp z, Func_315d5
+.asm_314d0
+ cp $0
+ jr z, .asm_314d6
+ scf
+ ret
+
+.asm_314d6
+ call Func_3151f
+ ld a, [wd54d]
+ call CallInFollowingTable
+PointerTable_314df: ; 0xd13df
+ padded_dab Func_314ef
+ padded_dab Func_314f1
+ padded_dab Func_314f3
+ padded_dab Func_31505
+
+Func_314ef: ; 0x314ef
+ scf
+ ret
+
+Func_314f1: ; 0x314f1
+ scf
+ ret
+
+Func_314f3: ; 0x314f3
+ callba Func_3022b
+ ld de, $0001
+ call PlaySong
+ scf
+ ret
+
+Func_31505: ; 0x31505
+ ld a, [wd5ca]
+ and a
+ ret nz
+ call FillBottomMessageBufferWithBlackTile
+ callba Func_3022b
+ ld de, $0001
+ call PlaySong
+ scf
+ ret
+
+Func_3151f: ; 0x3151f
+ ld a, $50
+ ld [wd4ef], a
+ ld [wd4f1], a
+ callba Func_107f8
+ ld a, [wd57e]
+ and a
+ ret z
+ xor a
+ ld [wd57e], a
+ ld a, $3
+ ld [wd54d], a
+ xor a
+ ld [wSlotIsOpen], a
+ ld [wIndicatorStates], a
+ ld [wIndicatorStates + 1], a
+ ld [wIndicatorStates + 2], a
+ ld [wIndicatorStates + 3], a
+ ld [wIndicatorStates + 4], a
+ ld a, [wCurrentStage]
+ bit 0, a
+ jr z, .asm_31577
+ callba Func_14135
+ callba LoadSlotCaveCoverGraphics_RedField
+ callba LoadMapBillboardTileData
+.asm_31577
+ callba StopTimer
+ call FillBottomMessageBufferWithBlackTile
+ call Func_30db
+ ld hl, wScrollingText1
+ ld de, MapMoveFailedText
+ call LoadScrollingText
+ ret
+
+Func_31591: ; 0x31591
+ ld a, [wMapMoveDirection]
+ and a
+ jr nz, .asm_315b1
+ ld a, [wIndicatorStates]
+ and a
+ jr z, .asm_315b1
+ xor a
+ ld [wIndicatorStates], a
+ ld [wIndicatorStates + 2], a
+ ld a, $80
+ ld [wIndicatorStates + 4], a
+ ld a, $1
+ ld [wSlotIsOpen], a
+ ld [wd54d], a
+.asm_315b1
+ scf
+ ret
+
+Func_315b3: ; 0x315b3
+ ld a, [wMapMoveDirection]
+ and a
+ jr z, .asm_315d3
+ ld a, [wIndicatorStates + 1]
+ and a
+ jr z, .asm_315d3
+ xor a
+ ld [wIndicatorStates + 1], a
+ ld [wIndicatorStates + 3], a
+ ld a, $80
+ ld [wIndicatorStates + 4], a
+ ld a, $1
+ ld [wSlotIsOpen], a
+ ld [wd54d], a
+.asm_315d3
+ scf
+ ret
+
+Func_315d5: ; 0x315d5
+ ld de, $0000
+ call PlaySong
+ rst AdvanceFrame
+ callba ChooseNextMap_RedField
+ callba LoadMapBillboardTileData
+ lb de, $25, $25
+ call PlaySoundEffect
+ ld bc, ArrivedAtMapText
+ callba LoadScrollingMapNameText
+.asm_31603
+ callba Func_33e3
+ rst AdvanceFrame
+ ld a, [wd5ca]
+ and a
+ jr nz, .asm_31603
+ ld a, $2
+ ld [wd54d], a
+ scf
+ ret
+
+Func_3161b: ; 0x3161b
+ ld a, [wTimerActive]
+ and a
+ ld a, [wd54c]
+ jr z, .asm_3163d
+ cp $1
+ jp z, Func_31708
+ cp $f
+ jp z, Func_31708
+ cp $2
+ jp z, Func_3172a
+ cp $e
+ jp z, Func_3172a
+ cp $d
+ jp z, Func_3174c
+.asm_3163d
+ cp $0
+ jr z, .asm_31643
+ scf
+ ret
+
+.asm_31643
+ call Func_3168c
+ ld a, [wd54d]
+ call CallInFollowingTable
+PointerTable_3164c: ; 0x3164c
+ padded_dab Func_3165c
+ padded_dab Func_3165e
+ padded_dab Func_31660
+ padded_dab Func_31672
+
+Func_3165c: ; 0x3165c
+ scf
+ ret
+
+Func_3165e: ; 0x3165e
+ scf
+ ret
+
+Func_31660: ; 0x31660
+ callba Func_3022b
+ ld de, $0001
+ call PlaySong
+ scf
+ ret
+
+Func_31672: ; 0x31672
+ ld a, [wd5ca] ;if text is off
+ and a
+ ret nz
+ call FillBottomMessageBufferWithBlackTile
+ callba Func_3022b
+ ld de, $0001
+ call PlaySong
+ scf
+ ret
+
+Func_3168c: ; 0x3168c
+ ld a, $50
+ ld [wLeftMapMoveDiglettAnimationCounter], a
+ ld [wRightMapMoveDiglettFrame], a
+ ld a, $3
+ ld [wd645], a
+ ld a, $1
+ ld [wd646], a
+ callba Func_107f8
+ ld a, [wd57e]
+ and a
+ ret z
+ xor a
+ ld [wd57e], a
+ ld a, $3
+ ld [wd54d], a
+ xor a
+ ld [wSlotIsOpen], a
+ ld [wIndicatorStates], a
+ ld [wIndicatorStates + 1], a
+ ld [wIndicatorStates + 2], a
+ ld [wIndicatorStates + 3], a
+ ld [wIndicatorStates + 4], a
+ ld a, [wCurrentStage]
+ bit 0, a
+ jr z, .asm_316ee
+ callba Func_1c2cb
+ callba LoadSlotCaveCoverGraphics_BlueField
+ callba LoadMapBillboardTileData
+.asm_316ee
+ callba StopTimer
+ call FillBottomMessageBufferWithBlackTile
+ call Func_30db
+ ld hl, wScrollingText1
+ ld de, MapMoveFailedText
+ call LoadScrollingText
+ ret
+
+Func_31708: ; 0x31708
+ ld a, [wMapMoveDirection]
+ and a
+ jr nz, .asm_31728
+ ld a, [wIndicatorStates]
+ and a
+ jr z, .asm_31728
+ xor a
+ ld [wIndicatorStates], a
+ ld [wIndicatorStates + 2], a
+ ld a, $80
+ ld [wIndicatorStates + 4], a
+ ld a, $1
+ ld [wSlotIsOpen], a
+ ld [wd54d], a
+.asm_31728
+ scf
+ ret
+
+Func_3172a: ; 0x3172a
+ ld a, [wMapMoveDirection]
+ and a
+ jr z, .asm_3174a
+ ld a, [wIndicatorStates + 1]
+ and a
+ jr z, .asm_3174a
+ xor a
+ ld [wIndicatorStates + 1], a
+ ld [wIndicatorStates + 3], a
+ ld a, $80
+ ld [wIndicatorStates + 4], a
+ ld a, $1
+ ld [wSlotIsOpen], a
+ ld [wd54d], a
+.asm_3174a
+ scf
+ ret
+
+Func_3174c: ; 0x3174c
+ ld de, $0000
+ call PlaySong
+ rst AdvanceFrame
+ callba ChooseNextMap_BlueField
+ callba LoadMapBillboardTileData
+ lb de, $25, $25
+ call PlaySoundEffect
+ ld bc, ArrivedAtMapText
+ callba LoadScrollingMapNameText
+.asm_3177a
+ callba Func_33e3
+ rst AdvanceFrame
+ ld a, [wd5ca]
+ and a
+ jr nz, .asm_3177a
+ ld a, $2
+ ld [wd54d], a
+ scf
+ ret
diff --git a/main.asm b/main.asm
index 2a045fd..8bc7f82 100644
--- a/main.asm
+++ b/main.asm
@@ -17,35 +17,6 @@ INCLUDE "engine/pinball_game/stage_init/init_stages.asm"
INCLUDE "engine/pinball_game/ball_init/ball_init.asm"
INCLUDE "engine/pinball_game/load_stage_data/load_stage_data.asm"
INCLUDE "engine/pinball_game/draw_sprites/draw_sprites.asm"
-
-Func_84fd:
-; unused?
- ld a, [hGameBoyColorFlag]
- and a
- jr z, .not_cgb
- ld a, $1
- ld [rVBK], a
- xor a
- call .FillAttrsOrBGMap
- xor a
- ld [rVBK], a
-.not_cgb
- ld a, $81
- call .FillAttrsOrBGMap
- ld de, wBottomMessageBuffer + $47
- call Func_8524
- ret
-
-.FillAttrsOrBGMap: ; 8519 (2:4519)
- hlCoord 0, 0, vBGWin
- ld b, $20
-.loop
- ld [hli], a
- ld [hli], a
- dec b
- jr nz, .loop
- ret
-
INCLUDE "engine/pinball_game/score.asm"
INCLUDE "engine/pinball_game/timer.asm"
INCLUDE "engine/pinball_game/menu.asm"
@@ -113,61 +84,8 @@ INCLUDE "engine/pinball_game.asm"
INCLUDE "engine/pinball_game/ball_saver/ball_saver_20.asm"
INCLUDE "engine/pinball_game/ball_saver/ball_saver_catchem_mode.asm"
INCLUDE "engine/pinball_game/ball_loss/ball_loss.asm"
-
-Func_dc6d: ; 0xdc6d
- push de
- call FillBottomMessageBufferWithBlackTile
- call Func_30db
- ld hl, wScrollingText3
- pop de
- call LoadScrollingText
- ret
-
-Func_dc7c: ; 0xdc7c
- ld hl, wBottomMessageBuffer + $40
- ld a, $83
- ld [hli], a
- ld a, $81
- ld [hli], a
- ld a, $81
- ld [hl], a
- ld a, [wNumPartyMons]
- call ConvertHexByteToDecWord
- ld hl, wBottomMessageBuffer + $41
- ld c, $1
- ld a, d
- call .asm_dca0
- ld a, e
- swap a
- call .asm_dca0
- ld a, e
- ld c, $0
-.asm_dca0
- and $f
- jr nz, .asm_dca7
- ld a, c
- and a
- ret nz
-.asm_dca7
- ld c, $0
- add $86
- ld [hli], a
- ret
-
-Data_dcad:
-; BCD powers of 2
- db $01, $02, $04, $08, $16, $32, $64
-
-Func_dcb4: ; 0xdcb4
- ld a, [wPikachuSaverCharge]
- cp MAX_PIKACHU_SAVER_CHARGE
- ld a, $81
- jr nz, .asm_dcbf
- ld a, $84
-.asm_dcbf
- ld [wBottomMessageBuffer + $46], a
- ret
-
+INCLUDE "engine/pinball_game/draw_num_party_mons_icon.asm"
+INCLUDE "engine/pinball_game/draw_pikachu_saver_icon.asm"
INCLUDE "engine/pinball_game/ball_gfx.asm"
INCLUDE "engine/pinball_game/ball_loss/ball_loss_red_field.asm"
INCLUDE "engine/pinball_game/ball_loss/ball_loss_blue_field.asm"
@@ -211,923 +129,7 @@ CallTable_10027: ; 0x10027
padded_dab Func_202bc ; STAGE_BLUE_FIELD_BOTTOM
INCLUDE "engine/pinball_game/catchem_mode.asm"
-
-Func_10a95: ; 0x19a95
- ld a, [wCurrentStage]
- call CallInFollowingTable
-PointerTable_10a9b: ; 0x10a9b
- padded_dab Func_20581 ; STAGE_RED_FIELD_TOP
- padded_dab Func_20581 ; STAGE_RED_FIELD_BOTTOM
- padded_dab Func_20581
- padded_dab Func_20581
- padded_dab Func_20bae ; STAGE_BLUE_FIELD_TOP
- padded_dab Func_20bae ; STAGE_BLUE_FIELD_BOTTOM
-
-StartEvolutionMode: ; 0x10ab3
- ld a, [wInSpecialMode]
- and a
- ret nz
- ld a, [wCurrentStage]
- rst JumpTable ; calls JumpToFuncInTable
-StartEvolutionMode_CallTable: ; 0x10abc
- dw StartEvolutionMode_RedField ; STAGE_RED_FIELD_TOP
- dw StartEvolutionMode_RedField ; STAGE_RED_FIELD_BOTTOM
- dw StartEvolutionMode_UnusedField
- dw StartEvolutionMode_UnusedField
- dw StartEvolutionMode_BlueField ; STAGE_BLUE_FIELD_TOP
- dw StartEvolutionMode_BlueField ; STAGE_BLUE_FIELD_BOTTOM
-
-ConcludeEvolutionMode: ; 0x10ac8
- xor a
- ld [wd5ca], a
- call FillBottomMessageBufferWithBlackTile
- xor a
- ld [wInSpecialMode], a
- ld [wWildMonIsHittable], a
- ld [wd5b6], a
- ld [wNumMonHits], a
- ld [wd551], a
- ld [wd554], a
- call ClearWildMonCollisionMask
- callba StopTimer
- ld a, [wCurrentStage]
- rst JumpTable ; calls JumpToFuncInTable
-ConcludeEvolutionMode_CallTable: ; 0x10af3
- dw ConcludeEvolutionMode_RedField ; STAGE_RED_FIELD_TOP
- dw ConcludeEvolutionMode_RedField ; STAGE_RED_FIELD_BOTTOM
- dw DoNothing_11060
- dw DoNothing_11060
- dw ConcludeEvolutionMode_BlueField ; STAGE_BLUE_FIELD_TOP
- dw ConcludeEvolutionMode_BlueField ; STAGE_BLUE_FIELD_TOP
-
-Func_10aff: ; 0x10aff
- ld a, [wCurrentStage]
- res 0, a
- ld c, a
- ld b, $0
- srl c
- sla a
- sla a
- sla a
- sub c
- ld c, a
- ld hl, VideoData_10b2a
- add hl, bc
- ld a, [hli]
- ld c, a
- ld a, [hli]
- ld b, a
- ld a, [hli]
- push af
- push bc
- ld a, [hli]
- ld e, a
- ld a, [hli]
- ld d, a
- ld a, [hli]
- ld c, a
- ld a, [hli]
- ld b, a
- pop hl
- pop af
- call LoadVRAMData
- ret
-
-VideoData_10b2a: ; 0x10b2a
- dab StageRedFieldTopGfx3
- dw $8900
- dw $E0
- dab StageRedFieldTopGfx3
- dw $8900
- dw $E0
- dab StageRedFieldTopGfx3
- dw $8900
- dw $E0
-
-Func_10b3f: ; 0x10b3f
- call FillBottomMessageBufferWithBlackTile
- call Func_30db
- ld hl, wScrollingText1
- ld a, [wCurrentEvolutionType]
- cp EVO_EXPERIENCE
- ld de, StartTrainingText
- jr z, .asm_10b55
- ld de, FindItemsText
-.asm_10b55
- call LoadScrollingText
- ret
-
-InitEvolutionSelectionMenu: ; 0x10b59
-; Initializes the list menu, which the player uses to select which pokemon to evolve.
- xor a
- ld [wDrawBottomMessageBox], a
- ld hl, wBottomMessageText
- ld a, $81
- ld b, $30
-.clearLoop
- ld [hli], a ; load spaces into bottom text. repeat 192 times
- ld [hli], a
- ld [hli], a
- ld [hli], a
- dec b
- jr nz, .clearLoop
- ld hl, wPartyMons
- call LoadMonNamesIntoEvolutionSelectionList
- ld a, BANK(InGameMenuSymbolsGfx)
- ld hl, InGameMenuSymbolsGfx + $50
- ld de, vTilesSH tile $08
- ld bc, $0030
- call LoadVRAMData
- ld a, $0
- ld hl, wBottomMessageText
- deCoord 0, 0, vBGWin
- ld bc, $00c0
- call LoadVRAMData
- ret
-
-LoadMonNamesIntoEvolutionSelectionList: ; 0x10b8e
-; Loads 6 pokemon names into the list that allows the player to select which pokemon to evolve.
-; Input: hl = pointer to a list of pokemon ids. (an offset of wPartyMons)
- ld a, [wNumPartyMons]
- ld c, $0
- ld b, a
-.loop
- ld a, [hli]
- call LoadMonNameIntoEvolutionSelectionList
- inc c
- ld a, c
- cp $6
- jr z, .done
- dec b
- jr nz, .loop
-.done
- ret
-
-LoadMonNameIntoEvolutionSelectionList: ; 0x10ba2
-; Loads a single pokemon name into the list of pokemon to evolve.
-; Input: c = index of the list
-; a = pokemon id
- push bc
- push hl
- swap c ;c* 32, does wird things if c starts >15
- sla c
- ld b, $0
- ld hl, wBottomMessageText
- add hl, bc ;goes down text as many times as new c
- ld d, h
- ld e, l
- ld c, a ;c now equals paerty mon, HL stored in de
- ld b, $0
- sla c
- rl b
- sla c
- rl b
- sla c
- rl b
- sla c
- rl b ;multiplies party mon by 16, then jumps to correct name in the table
- ld hl, PokemonNames ;names are 16 chars long
- add hl, bc
- ld a, $81
- ld [de], a
- inc de
- ld a, $81
- ld [de], a
- inc de
- ld a, $81
- ld [de], a
- inc de
- ld a, $81
- ld [de], a ; loaded 4 spaces into de
- inc de
- call LoadMonNameIntoBottomMessageBufferList
-.loadBlankCharacterLoop
- ld a, e
- and $1f
- cp $14
- jr nc, .done
- ld a, $81
- ld [de], a
- inc de
- jr .loadBlankCharacterLoop
-
-.done
- pop hl
- pop bc
- ret
-
-SelectPokemonToEvolveMenu: ; 0x10bea
-; Drivers the menu that allows the player to select a pokemon to evolve.
- xor a
- ld [wCurSelectedPartyMon], a
- ld [wCurSelectedPartyMonScrollOffset], a
- ld [wPartySelectionCursorCounter], a
-.loop
- call MoveEvolutionSelectionCursor
- call ClearPersistentJoypadStates
- call UpdateEvolutionSelectionList
- rst AdvanceFrame
- ld a, [wNewlyPressedButtonsPersistent]
- bit BIT_A_BUTTON, a
- jr z, .loop
- lb de, $00, $01
- call PlaySoundEffect
- ret
-
-MoveEvolutionSelectionCursor: ; 0x10c0c
- ld a, [wPressedButtonsPersistent]
- ld b, a
- ld a, [wNumPartyMons]
- ld c, a
- ld a, [wCurSelectedPartyMon]
- bit BIT_D_UP, b
- jr z, .didntPressUp
- and a
- ret z
- ; move the cursor up
- dec a
- ld [wCurSelectedPartyMon], a
- lb de, $00, $03
- call PlaySoundEffect
- ret
-
-.didntPressUp
- bit BIT_D_DOWN, b
- ret z
- inc a
- cp c
- ret z
- ; move the cursor down
- ld [wCurSelectedPartyMon], a
- lb de, $00, $03
- call PlaySoundEffect
- ret
-
-UpdateEvolutionSelectionList: ; 0x10c38
- ld a, [wCurSelectedPartyMon]
- ld hl, wCurSelectedPartyMonScrollOffset
- sub [hl]
- jr nc, .asm_10c45
- dec [hl]
- xor a
- jr .asm_10c4c
-
-.asm_10c45
- cp $6
- jr c, .asm_10c4c
- inc [hl]
- ld a, $5
-.asm_10c4c
- ld c, a
- push bc
- ld a, [hl]
- ld c, a
- ld b, $0
- ld hl, wPartyMons
- add hl, bc
- call LoadMonNamesIntoEvolutionSelectionList
- ld a, [hJoypadState]
- and a
- ld a, [wPartySelectionCursorCounter]
- jr z, .asm_10c62
- xor a
-.asm_10c62
- inc a
- ld [wPartySelectionCursorCounter], a
- bit 3, a
- pop bc
- jr nz, .asm_10c78
- swap c
- sla c
- ld b, $0
- ld hl, wBottomMessageText + $03
- add hl, bc
- ld a, $88
- ld [hl], a
-.asm_10c78
- ld a, [wCurSelectedPartyMonScrollOffset]
- and a
- jr z, .asm_10c83
- ld a, $8a
- ld [wBottomMessageText + $11], a
-.asm_10c83
- ld a, [wCurSelectedPartyMonScrollOffset]
- add $7
- jr z, .asm_10c96
- ld c, a
- ld a, [wNumPartyMons]
- cp c
- jr c, .asm_10c96
- ld a, $89
- ld [wBottomMessageText + $b1], a
-.asm_10c96
- ld a, $0
- ld hl, wBottomMessageText
- deCoord 0, 0, vBGWin
- ld bc, $00c0
- call LoadVRAMData
- ret
-
-PlaceEvolutionInParty: ; 0x10ca5
- ld a, [wCurSelectedPartyMon]
- ld c, a
- ld b, $0
- ld hl, wPartyMons
- add hl, bc
- ld a, [wCurrentEvolutionMon]
- cp $ff
- ret z
- ld [hl], a
- ret
-
-SelectPokemonToEvolve: ; 0x10cb7
- call FillBottomMessageBufferWithBlackTile
- call InitEvolutionSelectionMenu
- ld a, $60
- ld [hWY], a
- dec a
- ld [hLYC], a
- ld a, $fd
- ld [hLCDCMask], a
- call SelectPokemonToEvolveMenu
- ld a, $86
- ld [hWY], a
- ld a, $83
- ld [hLYC], a
- ld [hLastLYC], a
- ld a, $ff
- ld [hLCDCMask], a
- ld a, [hGameBoyColorFlag]
- and a
- jr nz, .gameboyColor
- ld a, BANK(StageRedFieldTopStatusBarSymbolsGfx_GameBoy)
- ld hl, StageRedFieldTopStatusBarSymbolsGfx_GameBoy + $80
- ld de, vTilesSH tile $08
- ld bc, $0030
- call LoadVRAMData
- jr .asm_10cfc
-
-.gameboyColor
- ld a, BANK(StageRedFieldTopStatusBarSymbolsGfx_GameBoyColor)
- ld hl, StageRedFieldTopStatusBarSymbolsGfx_GameBoyColor + $80
- ld de, vTilesSH tile $08
- ld bc, $0030
- call LoadVRAMData
-.asm_10cfc
- call FillBottomMessageBufferWithBlackTile
- ld a, SPECIAL_MODE_CATCHEM
- ld [wDrawBottomMessageBox], a
- ld [wInSpecialMode], a
- ld [wSpecialMode], a
- xor a
- ld [wd54d], a
- ld a, [wCurSelectedPartyMon]
- ld c, a
- ld b, $0
- ld hl, wPartyMons
- add hl, bc
- ld a, [hl]
- ld [wCurrentCatchEmMon], a
- ret
-
-InitEvolutionModeForMon: ; 0x10d1d
- ld hl, wd586
- ld b, $18
-.asm_10d22
- ld a, $1
- ld [hli], a
- xor a
- ld [hli], a
- dec b
- jr nz, .asm_10d22
- ld a, [wCurrentCatchEmMon]
- ld c, a
- ld b, $0
- ld hl, Data_1298b
- add hl, bc
- ld a, [hl]
- add $2
- ld [wd555], a
- xor a
- ld hl, wd566
- ld b, $13
-.asm_10d40
- ld [hli], a
- dec b
- jr nz, .asm_10d40
- ld a, [wCurrentCatchEmMon]
- ld c, a
- ld b, $0
- sla c
- rl b
- ld hl, CatchEmTimerData
- add hl, bc
- ld a, [hli]
- ld c, a
- ld a, [hl]
- ld b, a
- callba StartTimer
- ld a, [wCurrentCatchEmMon]
- ld c, a
- ld b, $0
- sla c ; multiply mon id by 6
- rl b
- add c
- ld c, a
- jr nc, .noCarry
- inc b
-.noCarry
- sla c
- rl b
- ld hl, MonEvolutions
- add hl, bc
- push hl
- ld bc, $03ff
-.countMonEvolutionsLoop
- ld a, [hli]
- and a
- jr z, .noEvolution
- inc c
-.noEvolution
- inc hl
- dec b
- jr nz, .countMonEvolutionsLoop
- ld a, c
- cp $ff
- jr nz, .asm_10d8a
- xor a
-.asm_10d8a
- call Func_a21
- sla a
- ld c, a
- pop hl
- add hl, bc ; hl points to one of three entries in mon's evolution data
- ld a, [hli] ; a = mon id of evolution
- dec a
- ld [wCurrentEvolutionMon], a
- ld a, [hl] ; a = evoluion type id
- ld [wCurrentEvolutionType], a
- xor a
- ld [wd554], a
- ld [wd556], a
- ld [wd557], a
- ld hl, wd55c
- ld a, $1
- ld b, $3
-.asm_10dac
- ld [hli], a
- dec b
- jr nz, .asm_10dac
- xor a
- ld b, $7
-.asm_10db3
- ld [hli], a
- dec b
- jr nz, .asm_10db3
- ld de, wd55c
- ld a, [wd555]
- ld c, a
- inc a
- ld b, a
-.asm_10dc0
- push bc
- ld a, c
- call Func_a21
- ld c, a
- ld b, $0
- ld hl, wd55c
- add hl, bc
- ld c, [hl]
- ld a, [de]
- ld [hl], a
- ld a, c
- ld [de], a
- pop bc
- inc de
- dec b
- jr nz, .asm_10dc0
- callba InitBallSaverForCatchEmMode
- call Func_10b3f
- call Func_3579
- ld a, [wCurrentStage]
- bit 0, a
- jr z, .asm_10e09
- ld a, BANK(StageRedFieldBottomBaseGameBoyColorGfx)
- ld hl, StageRedFieldBottomBaseGameBoyColorGfx + $300
- ld de, vTilesSH tile $2e
- ld bc, $0020
- call LoadOrCopyVRAMData
- ld a, $0
- ld hl, CatchBarTiles
- deCoord 6, 8, vBGMap
- ld bc, (CatchBarTilesEnd - CatchBarTiles)
- call LoadOrCopyVRAMData
-.asm_10e09
- ret
-
-Func_10e0a: ; 0x10e0a
- ld a, [wCurrentEvolutionMon]
- cp $ff
- jp z, Func_10e8b
- ld c, a
- ld b, $0
- sla c
- rl b
- sla c
- rl b
- sla c
- rl b
- sla c
- rl b
- ld hl, PokemonNames + 1
- add hl, bc
- ld de, ItEvolvedIntoAnText ; "It evolved into an"
- ld bc, Data_2b34
- ld a, [hl]
- ; check if mon's name starts with a vowel, so it can print "an", instead of "a"
- cp "A"
- jr z, .nameStartsWithVowel
- cp "I"
- jr z, .nameStartsWithVowel
- cp "U"
- jr z, .nameStartsWithVowel
- cp "E"
- jr z, .nameStartsWithVowel
- cp "O"
- jr z, .nameStartsWithVowel
- ld de, ItEvolvedIntoAText ; "It evolved into a"
- ld bc, Data_2b1c
-.nameStartsWithVowel
- push hl
- push bc
- push de
- call FillBottomMessageBufferWithBlackTile
- call Func_30db
- ld hl, wScrollingText1
- pop de
- call LoadScrollingText
- ld hl, wScrollingText2
- pop de
- call LoadScrollingText
- pop hl
- ld de, wBottomMessageText + $20
- ld b, $0
-.asm_10e67
- ld a, [hli]
- and a
- jr z, .asm_10e70
- ld [de], a
- inc de
- inc b
- jr .asm_10e67
-
-.asm_10e70
- ld a, $20
- ld [de], a
- inc de
- xor a
- ld [de], a
- ld a, [wScrollingText2ScrollStepsRemaining]
- add b
- ld [wScrollingText2ScrollStepsRemaining], a
- ld a, $14
- sub b
- srl a
- ld b, a
- ld a, [wScrollingText2StopOffset]
- add b
- ld [wScrollingText2StopOffset], a
- ret
-
-Func_10e8b: ; 0x10e8b
- ld bc, OneMillionPoints
- callba AddBigBCD6FromQueue
- ld bc, $0100
- ld de, $0000
- push bc
- push de
- call FillBottomMessageBufferWithBlackTile
- call Func_30db
- ld hl, wScrollingText2
- ld de, Data_2b6b
- call Func_32cc
- pop de
- pop bc
- ld hl, wScrollingText1
- ld de, EvolutionSpecialBonusText
- call LoadScrollingText
- ret
-
-StartEvolutionMode_RedField: ; 0x10ebb
- ld a, [wNumPartyMons]
- and a
- ret z
- call SelectPokemonToEvolve
- call InitEvolutionModeForMon
- ld a, [wd555]
- sub $2
- ld c, a
- sla c
- ld hl, IndicatorStatesPointerTable_10f3b
- add hl, bc
- ld a, [hli]
- ld h, [hl]
- ld l, a
- ld de, wIndicatorStates
- ld b, $13
-.loop
- ld a, [hli]
- ld [de], a
- inc de
- dec b
- jr nz, .loop
- xor a
- ld [wLeftAlleyCount], a
- call Func_107b0
- ld a, $2
- ld [wd7ad], a
- ld de, $0002
- call PlaySong
- call SetPokemonSeenFlag
- ld a, [wCurrentStage]
- bit 0, a
- jr nz, .asm_10f0b
- ld a, BANK(EvolutionTrinketsGfx)
- ld hl, EvolutionTrinketsGfx
- ld de, vTilesSH tile $10
- ld bc, $00e0
- call LoadOrCopyVRAMData
- ret
-
-.asm_10f0b
- ld a, BANK(EvolutionTrinketsGfx)
- ld hl, EvolutionTrinketsGfx
- ld de, vTilesOB tile $20
- ld bc, $00e0
- call LoadOrCopyVRAMData
- callba Func_14135
- callba Func_10184
- ld a, [hGameBoyColorFlag]
- and a
- callba nz, Func_102bc
- ret
-
-IndicatorStatesPointerTable_10f3b: ; 0x10f3b
- dw IndicatorStates_10f4b
- dw IndicatorStates_10f5e
- dw IndicatorStates_10f71
- dw IndicatorStates_10f84
- dw IndicatorStates_10f97
- dw IndicatorStates_10faa
- dw IndicatorStates_10fbd
- dw IndicatorStates_10fd0
-
-IndicatorStates_10f4b: ; 0x10f4b
- db $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $00, $00, $01, $01, $00, $00, $00, $00
-
-IndicatorStates_10f5e: ; 0x10f5e
- db $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $01, $00, $01, $01, $00, $00, $00, $00
-
-IndicatorStates_10f71: ; 0x10f71
- db $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $01, $01, $01, $01, $00, $00, $00, $00
-
-IndicatorStates_10f84: ; 0x10f84
- db $00, $00, $00, $00, $00, $00, $00, $00, $01, $01, $00, $01, $01, $01, $01, $00, $00, $00, $00
-
-IndicatorStates_10f97: ; 0x10f97
- db $00, $00, $00, $80, $00, $00, $00, $00, $01, $01, $01, $01, $01, $01, $01, $00, $00, $00, $00
-
-IndicatorStates_10faa: ; 0x10faa
- db $00, $00, $80, $80, $00, $00, $00, $00, $01, $01, $01, $01, $01, $01, $01, $00, $00, $00, $00
-
-IndicatorStates_10fbd: ; 0x10fbd
- db $00, $00, $80, $80, $00, $00, $00, $01, $01, $01, $01, $01, $01, $01, $01, $00, $00, $00, $00
-
-IndicatorStates_10fd0: ; 0x10fd0
- db $00, $00, $80, $80, $00, $00, $01, $01, $01, $01, $01, $01, $01, $01, $01, $00, $00, $00, $00
-
-ConcludeEvolutionMode_RedField: ; 0x10fe3
- call ResetIndicatorStates
- call Func_107c2
- call SetLeftAndRightAlleyArrowIndicatorStates_RedField
- call Func_107e9
- ld a, [wCurrentStage]
- bit 0, a
- jp z, Func_10aff
- callba Func_14135
- callba LoadSlotCaveCoverGraphics_RedField
- callba LoadMapBillboardTileData
- ld a, BANK(StageSharedBonusSlotGlowGfx)
- ld hl, StageSharedBonusSlotGlowGfx + $60
- ld de, vTilesOB tile $20
- ld bc, $00e0
- call LoadVRAMData
- ld a, [hGameBoyColorFlag]
- and a
- jr z, .asm_11036
- ld a, BANK(StageRedFieldBottomOBJPalette7)
- ld hl, StageRedFieldBottomOBJPalette7
- ld de, $0078
- ld bc, $0008
- call Func_7dc
-.asm_11036
- ld hl, BlankSaverSpaceTileDataRedField
- ld a, BANK(BlankSaverSpaceTileDataRedField)
- call Func_10aa
- ld a, [wPreviousNumPokeballs]
- callba LoadPokeballsGraphics_RedField
- ld hl, CaughtPokeballTileDataPointers
- ld a, BANK(CaughtPokeballTileDataPointers)
- call Func_10aa
- ret
-
-StartEvolutionMode_UnusedField: ; 0x11054
- ld a, [wNumPartyMons]
- and a
- ret z
- call SelectPokemonToEvolve
- call InitEvolutionModeForMon
- ret
-
-DoNothing_11060: ; 0x11060
- ret
-
-StartEvolutionMode_BlueField: ; 0x11061
- ld a, [wNumPartyMons]
- and a
- ret z
- call SelectPokemonToEvolve
- call InitEvolutionModeForMon
- ld a, $1
- ld [wd643], a
- ld a, [wd555]
- sub $2
- ld c, a
- sla c
- ld hl, IndicatorStatesPointerTable_110ed
- add hl, bc
- ld a, [hli]
- ld h, [hl]
- ld l, a
- ld de, wIndicatorStates
- ld b, $13
-.asm_11085
- ld a, [hli]
- ld [de], a
- inc de
- dec b
- jr nz, .asm_11085
- xor a
- ld [wLeftAlleyCount], a
- callba CloseSlotCave
- ld a, $2
- ld [wd7ad], a
- ld de, $0002
- call PlaySong
- call SetPokemonSeenFlag
- ld a, [wCurrentStage]
- bit 0, a
- jr nz, .asm_110bd
- ld a, BANK(EvolutionTrinketsGfx)
- ld hl, EvolutionTrinketsGfx
- ld de, vTilesOB tile $60
- ld bc, $00e0
- call LoadOrCopyVRAMData
- ret
-
-.asm_110bd
- ld a, BANK(EvolutionTrinketsGfx)
- ld hl, EvolutionTrinketsGfx
- ld de, vTilesOB tile $20
- ld bc, $00e0
- call LoadOrCopyVRAMData
- callba Func_1c2cb
- callba Func_10184
- ld a, [hGameBoyColorFlag]
- and a
- callba nz, Func_102bc
- ret
-
-IndicatorStatesPointerTable_110ed: ; 0x110ed
- dw IndicatorStates_110fd
- dw IndicatorStates_11110
- dw IndicatorStates_11123
- dw IndicatorStates_11136
- dw IndicatorStates_11149
- dw IndicatorStates_1115c
- dw IndicatorStates_1116f
- dw IndicatorStates_11182
-
-IndicatorStates_110fd: ; 0x110fd
- db $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $00, $00, $01, $01, $00, $00, $00, $00
-
-IndicatorStates_11110: ; 0x11110
- db $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $01, $00, $01, $01, $00, $00, $00, $00
-
-IndicatorStates_11123: ; 0x11123
- db $00, $00, $00, $00, $00, $00, $00, $00, $00, $01, $00, $01, $01, $01, $01, $00, $00, $00, $00
-
-IndicatorStates_11136: ; 0x11136
- db $00, $00, $80, $00, $00, $00, $00, $00, $01, $01, $00, $01, $01, $01, $01, $00, $00, $00, $00
-
-IndicatorStates_11149: ; 0x11149
- db $00, $00, $80, $80, $00, $00, $00, $00, $01, $01, $01, $01, $01, $01, $01, $00, $00, $00, $00
-
-IndicatorStates_1115c: ; 0x1115c
- db $00, $00, $80, $80, $00, $00, $00, $00, $01, $01, $01, $01, $01, $01, $01, $00, $00, $00, $00
-
-IndicatorStates_1116f: ; 0x1116f
- db $80, $00, $80, $80, $00, $00, $00, $01, $01, $01, $01, $01, $01, $01, $01, $00, $00, $00, $00
-
-IndicatorStates_11182: ; 0x11182
- db $80, $00, $80, $80, $00, $00, $01, $01, $01, $01, $01, $01, $01, $01, $01, $00, $00, $00, $00
-
-ConcludeEvolutionMode_BlueField: ; 0x11195
- xor a
- ld [wd643], a
- call ResetIndicatorStates
- call Func_107c2
- callba SetLeftAndRightAlleyArrowIndicatorStates_BlueField
- ld a, [wCurrentStage]
- bit 0, a
- jp z, Func_1120e
- callba Func_1c2cb
- callba LoadSlotCaveCoverGraphics_BlueField
- callba LoadMapBillboardTileData
- ld a, Bank(StageSharedBonusSlotGlowGfx)
- ld hl, StageSharedBonusSlotGlowGfx + $60
- ld de, vTilesOB tile $20
- ld bc, $00e0
- call LoadVRAMData
- ld a, [hGameBoyColorFlag]
- and a
- jr z, .asm_111f0
- ld a, BANK(StageBlueFieldBottomOBJPalette7)
- ld hl, StageBlueFieldBottomOBJPalette7
- ld de, $0078
- ld bc, $0008
- call Func_7dc
-.asm_111f0
- ld hl, BlankSaverSpaceTileDataBlueField
- ld a, BANK(BlankSaverSpaceTileDataBlueField)
- call Func_10aa
- ld a, [wPreviousNumPokeballs]
- callba LoadPokeballsGraphics_RedField
- ld hl, Data_10a88
- ld a, BANK(Data_10a88)
- call Func_10aa
- ret
-
-Func_1120e: ; 0x1120e
- ld a, [wCurrentStage]
- sub $4
- res 0, a
- ld c, a
- ld b, $0
- srl c
- sla a
- sla a
- sla a
- sub c
- ld c, a
- ld hl, VRAMData_1123b
- add hl, bc
- ld a, [hli]
- ld c, a
- ld a, [hli]
- ld b, a
- ld a, [hli]
- push af
- push bc
- ld a, [hli]
- ld e, a
- ld a, [hli]
- ld d, a
- ld a, [hli]
- ld c, a
- ld a, [hli]
- ld b, a
- pop hl
- pop af
- call LoadVRAMData
- ret
-
-VRAMData_1123b: ; 0x1123b
- dab StageBlueFieldTopGfx3
- dw $8600, $E0
- dab StageBlueFieldTopGfx3
- dw $8600, $E0
- dab StageBlueFieldTopGfx3
- dw $8600, $E0
- dab StageBlueFieldTopGfx3
- dw $8600, $E0
- dab StageBlueFieldTopGfx3
- dw $8600, $E0
- dab StageBlueFieldTopGfx3
- dw $8600, $E0
- dab StageBlueFieldTopGfx3
- dw $8600, $E0
-
+INCLUDE "engine/pinball_game/evolution_mode.asm"
INCLUDE "data/wild_mons.asm"
INCLUDE "data/evolution_line_starts.asm"
INCLUDE "data/evolution_lines.asm"
@@ -1457,736 +459,7 @@ INCLUDE "engine/pinball_game/stage_init/init_red_field.asm"
INCLUDE "engine/pinball_game/ball_init/ball_init_red_field.asm"
INCLUDE "engine/pinball_game/bonus_multiplier.asm"
INCLUDE "engine/pinball_game/extra_ball.asm"
-
-Func_301ce: ; 0x301ce
- ld a, [wCurrentStage]
- call CallInFollowingTable
-PointerTable_301d4: ; 0x301d4
- padded_dab Func_314ae ; STAGE_RED_FIELD_TOP
- padded_dab Func_314ae ; STAGE_RED_FIELD_BOTTOM
- padded_dab Func_314ae
- padded_dab Func_314ae
- padded_dab Func_3161b ; STAGE_BLUE_FIELD_TOP
- padded_dab Func_3161b ; STAGE_BLUE_FIELD_BOTTOM
-
-StartMapMoveMode: ; 0x301ec
- ld a, [wInSpecialMode]
- and a
- ret nz
- ld a, $1
- ld [wInSpecialMode], a
- ld a, SPECIAL_MODE_MAP_MOVE
- ld [wSpecialMode], a
- xor a
- ld [wd54d], a
- ld bc, $0030 ; 30 seconds
- callba StartTimer
- ld a, [wCurrentStage]
- bit 0, a
- jr z, .asm_3021b
- ld a, [wMapMoveDirection]
- add $12
- call LoadBillboardTileData
-.asm_3021b
- ld a, [wCurrentStage]
- rst JumpTable ; calls JumpToFuncInTable
-CallTable_3021f: ; 0x3021f
- dw Func_311b4 ; STAGE_RED_FIELD_TOP
- dw Func_311b4 ; STAGE_RED_FIELD_BOTTOM
- dw DoNothing_31324
- dw DoNothing_31324
- dw Func_31326 ; STAGE_BLUE_FIELD_TOP
- dw Func_31326 ; STAGE_BLUE_FIELD_BOTTOM
-
-Func_3022b: ; 0x3022b
- xor a
- ld [wd5ca], a ;turn text off
- call FillBottomMessageBufferWithBlackTile ;clear text
- xor a
- ld [wInSpecialMode], a
- ld [wSpecialMode], a ;no longer in special modes
- callba StopTimer
- ld a, [wCurrentStage]
- rst JumpTable ; calls JumpToFuncInTable
-CallTable_30247: ; 0x30247
- dw Func_31234 ; STAGE_RED_FIELD_TOP
- dw Func_31234 ; STAGE_RED_FIELD_BOTTOM
- dw DoNothing_31325
- dw DoNothing_31325
- dw Func_313c3 ; STAGE_BLUE_FIELD_TOP
- dw Func_313c3 ; STAGE_BLUE_FIELD_TOP
-
-INCLUDE "engine/pinball_game/billboard_tiledata.asm"
-
-LoadScrollingMapNameText: ; 0x3118f
-; Loads the scrolling message that displays the current map's name.
-; Input: bc = pointer to prefix scrolling text
- push bc
- call FillBottomMessageBufferWithBlackTile
- call Func_30db
- ld a, [wCurrentMap]
- sla a
- ld c, a
- ld b, $0
- ld hl, MapNames
- add hl, bc
- ld a, [hli]
- ld e, a
- ld a, [hli]
- ld d, a
- ld hl, wScrollingText2
- call LoadScrollingText
- pop de
- ld hl, wScrollingText1
- call LoadScrollingText
- ret
-
-Func_311b4: ; 0x311b4
- ld a, [wMapMoveDirection]
- and a
- jr nz, .asm_311ce
- ld a, $80
- ld [wIndicatorStates], a
- ld [wIndicatorStates + 2], a
- xor a
- ld [wIndicatorStates + 1], a
- ld [wIndicatorStates + 3], a
- ld [wIndicatorStates + 4], a
- jr .asm_311e2
-
-.asm_311ce
- ld a, $80
- ld [wIndicatorStates + 1], a
- ld [wIndicatorStates + 3], a
- xor a
- ld [wIndicatorStates], a
- ld [wIndicatorStates + 2], a
- ld [wIndicatorStates + 4], a
- jr .asm_311e2
-
-.asm_311e2
- ld a, $2
- callba LoadDiglettGraphics
- ld a, $5
- callba LoadDiglettGraphics
- ld a, $6a
- ld [wStageCollisionMap + $f0], a
- ld a, $6b
- ld [wStageCollisionMap + $110], a
- ld a, $66
- ld [wStageCollisionMap + $e3], a
- ld a, $67
- ld [wStageCollisionMap + $103], a
- callba Func_107b0
- ld a, $4
- ld [wd7ad], a
- ld de, $0003
- call PlaySong
- ld a, [wCurrentStage]
- bit 0, a
- ret z
- callba Func_14135
- ret
-
-Func_31234: ; 0x31234
- callba ResetIndicatorStates
- callba Func_107c2
- callba SetLeftAndRightAlleyArrowIndicatorStates_RedField
- callba Func_107e9
- ld a, [wCurrentStage]
- bit 0, a
- ret z
- callba Func_14135
- callba LoadSlotCaveCoverGraphics_RedField
- callba LoadMapBillboardTileData
- ret
-
-ChooseNextMap_RedField: ; 0x31282
-; Picks the next map to perform a map move.
-; Also records which maps have been visited.
- ld a, [wNumMapMoves]
- inc a
- cp $6
- jr c, .dontReset
- ld a, $ff
- ld [wVisitedMaps], a
- ld [wVisitedMaps + 1], a
- ld [wVisitedMaps + 2], a
- ld [wVisitedMaps + 3], a
- ld [wVisitedMaps + 4], a
- ld [wVisitedMaps + 5], a
- xor a
-.dontReset
- ld [wNumMapMoves], a
- cp $3
- jr c, .chooseMapFromArea1
- cp $5
- jr c, .chooseMapFromArea2
- ld a, INDIGO_PLATEAU
- ld [wCurrentMap], a
- ld [wVisitedMaps + 5], a
- ret
-
-.chooseMapFromArea1
- call GenRandom
- and $7
- cp $7
- jr nc, .chooseMapFromArea1
- ld c, a
- ld b, $0
- ld hl, FirstMapMoveSet_RedField
- add hl, bc
- ld c, [hl]
- ld hl, wVisitedMaps
- ld a, [wNumMapMoves]
- and a
- jr z, .asm_312d4
- ld b, a
-.asm_312cd
- ld a, [hli]
- cp c
- jr z, .chooseMapFromArea1
- dec b
- jr nz, .asm_312cd
-.asm_312d4
- ld a, c
- ld [wCurrentMap], a
- ld a, [wNumMapMoves]
- ld c, a
- ld b, $0
- ld hl, wVisitedMaps
- add hl, bc
- ld a, [wCurrentMap]
- ld [hl], a
- ret
-
-.chooseMapFromArea2
- call GenRandom
- and $3
- ld c, a
- ld b, $0
- ld hl, SecondMapMoveSet_RedField
- add hl, bc
- ld c, [hl]
- ld hl, wVisitedMaps + 3
- ld a, [wNumMapMoves]
- sub $3
- jr z, .asm_31306
- ld b, a
-.asm_312ff
- ld a, [hli]
- cp c
- jr z, .chooseMapFromArea2
- dec b
- jr nz, .asm_312ff
-.asm_31306
- ld a, c
- ld [wCurrentMap], a
- ld a, [wNumMapMoves]
- ld c, a
- ld b, $0
- ld hl, wVisitedMaps
- add hl, bc
- ld a, [wCurrentMap]
- ld [hl], a
- ret
-
-FirstMapMoveSet_RedField:
- db PALLET_TOWN
- db VIRIDIAN_FOREST
- db PEWTER_CITY
- db CERULEAN_CITY
- db VERMILION_SEASIDE
- db ROCK_MOUNTAIN
- db LAVENDER_TOWN
-
-SecondMapMoveSet_RedField:
- db CYCLING_ROAD
- db SAFARI_ZONE
- db SEAFOAM_ISLANDS
- db CINNABAR_ISLAND
-
-DoNothing_31324: ; 0x31324
- ret
-
-DoNothing_31325: ; 0x31325
- ret
-
-Func_31326: ; 0x31326
- ld a, [wMapMoveDirection]
- and a
- jr nz, .asm_3134c
- ld a, $80
- ld [wIndicatorStates], a
- ld [wIndicatorStates + 2], a
- xor a
- ld [wIndicatorStates + 1], a
- ld [wIndicatorStates + 3], a
- ld [wIndicatorStates + 4], a
- ld a, $3
- callba LoadPsyduckOrPoliwagGraphics
- jr .asm_31382
-
-.asm_3134c
- ld a, $80
- ld [wIndicatorStates + 1], a
- ld [wIndicatorStates + 3], a
- xor a
- ld [wIndicatorStates], a
- ld [wIndicatorStates + 2], a
- ld [wIndicatorStates + 4], a
- ld a, $1
- callba LoadPsyduckOrPoliwagGraphics
- ld a, $6
- callba LoadPsyduckOrPoliwagGraphics
- ld a, $7
- callba LoadPsyduckOrPoliwagNumberGraphics
-.asm_31382
- ld a, [wCurrentStage]
- bit 0, a
- jr z, .asm_3139d
- ld a, $54
- ld [wStageCollisionMap + $e3], a
- ld a, $55
- ld [wStageCollisionMap + $103], a
- ld a, $52
- ld [wStageCollisionMap + $f0], a
- ld a, $53
- ld [wStageCollisionMap + $110], a
-.asm_3139d
- ld a, $1
- ld [wd644], a
- callba CloseSlotCave
- ld de, $0003
- call PlaySong
- ld a, [wCurrentStage]
- bit 0, a
- ret z
- callba Func_1c2cb
- ret
-
-Func_313c3: ; 0x313c3
- callba ResetIndicatorStates
- callba Func_107c2
- callba SetLeftAndRightAlleyArrowIndicatorStates_BlueField
- ld a, $0
- ld [wd644], a
- ld a, [wCurrentStage]
- bit 0, a
- ret z
- callba Func_1c2cb
- callba LoadSlotCaveCoverGraphics_BlueField
- callba LoadMapBillboardTileData
- ret
-
-ChooseNextMap_BlueField: ; 0x3140b
-; Picks the next map to perform a map move.
-; Also records which maps have been visited.
- ld a, [wNumMapMoves]
- inc a
- cp $6
- jr c, .dontReset
- ld a, $ff
- ld [wVisitedMaps], a
- ld [wVisitedMaps + 1], a
- ld [wVisitedMaps + 2], a
- ld [wVisitedMaps + 3], a
- ld [wVisitedMaps + 4], a
- ld [wVisitedMaps + 5], a
- xor a
-.dontReset
- ld [wNumMapMoves], a
- cp $3
- jr c, .chooseMapFromArea1
- cp $5
- jr c, .chooseMapFromArea2
- ld a, INDIGO_PLATEAU
- ld [wCurrentMap], a
- ld [wVisitedMaps + 5], a
- ret
-
-.chooseMapFromArea1
- call GenRandom
- and $7
- cp $7
- jr nc, .chooseMapFromArea1
- ld c, a
- ld b, $0
- ld hl, FirstMapMoveSet_BlueField
- add hl, bc
- ld c, [hl]
- ld hl, wVisitedMaps
- ld a, [wNumMapMoves]
- and a
- jr z, .asm_3145e
- ld b, a
-.asm_31457
- ld a, [hli]
- cp c
- jr z, .chooseMapFromArea1
- dec b
- jr nz, .asm_31457
-.asm_3145e
- ld a, c
- ld [wCurrentMap], a
- ld a, [wNumMapMoves]
- ld c, a
- ld b, $0
- ld hl, wVisitedMaps
- add hl, bc
- ld a, [wCurrentMap]
- ld [hl], a
- ret
-
-.chooseMapFromArea2
- call GenRandom
- and $3
- ld c, a
- ld b, $0
- ld hl, SecondMapMoveSet_BlueField
- add hl, bc
- ld c, [hl]
- ld hl, wVisitedMaps + 3
- ld a, [wNumMapMoves]
- sub $3
- jr z, .asm_31490
- ld b, a
-.asm_31489
- ld a, [hli]
- cp c
- jr z, .chooseMapFromArea2
- dec b
- jr nz, .asm_31489
-.asm_31490
- ld a, c
- ld [wCurrentMap], a
- ld a, [wNumMapMoves]
- ld c, a
- ld b, $0
- ld hl, wVisitedMaps
- add hl, bc
- ld a, [wCurrentMap]
- ld [hl], a
- ret
-
-FirstMapMoveSet_BlueField:
- db VIRIDIAN_CITY
- db VIRIDIAN_FOREST
- db MT_MOON
- db CERULEAN_CITY
- db VERMILION_STREETS
- db ROCK_MOUNTAIN
- db CELADON_CITY
-
-SecondMapMoveSet_BlueField:
- db FUCHSIA_CITY
- db SAFARI_ZONE
- db SAFFRON_CITY
- db CINNABAR_ISLAND
-
-Func_314ae: ; 0x314ae
- ld a, [wTimerActive]
- and a
- ld a, [wd54c]
- jr z, .asm_314d0
- cp $1
- jp z, Func_31591
- cp $3
- jp z, Func_31591
- cp $2
- jp z, Func_315b3
- cp $5
- jp z, Func_315b3
- cp $d
- jp z, Func_315d5
-.asm_314d0
- cp $0
- jr z, .asm_314d6
- scf
- ret
-
-.asm_314d6
- call Func_3151f
- ld a, [wd54d]
- call CallInFollowingTable
-PointerTable_314df: ; 0xd13df
- padded_dab Func_314ef
- padded_dab Func_314f1
- padded_dab Func_314f3
- padded_dab Func_31505
-
-Func_314ef: ; 0x314ef
- scf
- ret
-
-Func_314f1: ; 0x314f1
- scf
- ret
-
-Func_314f3: ; 0x314f3
- callba Func_3022b
- ld de, $0001
- call PlaySong
- scf
- ret
-
-Func_31505: ; 0x31505
- ld a, [wd5ca]
- and a
- ret nz
- call FillBottomMessageBufferWithBlackTile
- callba Func_3022b
- ld de, $0001
- call PlaySong
- scf
- ret
-
-Func_3151f: ; 0x3151f
- ld a, $50
- ld [wd4ef], a
- ld [wd4f1], a
- callba Func_107f8
- ld a, [wd57e]
- and a
- ret z
- xor a
- ld [wd57e], a
- ld a, $3
- ld [wd54d], a
- xor a
- ld [wSlotIsOpen], a
- ld [wIndicatorStates], a
- ld [wIndicatorStates + 1], a
- ld [wIndicatorStates + 2], a
- ld [wIndicatorStates + 3], a
- ld [wIndicatorStates + 4], a
- ld a, [wCurrentStage]
- bit 0, a
- jr z, .asm_31577
- callba Func_14135
- callba LoadSlotCaveCoverGraphics_RedField
- callba LoadMapBillboardTileData
-.asm_31577
- callba StopTimer
- call FillBottomMessageBufferWithBlackTile
- call Func_30db
- ld hl, wScrollingText1
- ld de, MapMoveFailedText
- call LoadScrollingText
- ret
-
-Func_31591: ; 0x31591
- ld a, [wMapMoveDirection]
- and a
- jr nz, .asm_315b1
- ld a, [wIndicatorStates]
- and a
- jr z, .asm_315b1
- xor a
- ld [wIndicatorStates], a
- ld [wIndicatorStates + 2], a
- ld a, $80
- ld [wIndicatorStates + 4], a
- ld a, $1
- ld [wSlotIsOpen], a
- ld [wd54d], a
-.asm_315b1
- scf
- ret
-
-Func_315b3: ; 0x315b3
- ld a, [wMapMoveDirection]
- and a
- jr z, .asm_315d3
- ld a, [wIndicatorStates + 1]
- and a
- jr z, .asm_315d3
- xor a
- ld [wIndicatorStates + 1], a
- ld [wIndicatorStates + 3], a
- ld a, $80
- ld [wIndicatorStates + 4], a
- ld a, $1
- ld [wSlotIsOpen], a
- ld [wd54d], a
-.asm_315d3
- scf
- ret
-
-Func_315d5: ; 0x315d5
- ld de, $0000
- call PlaySong
- rst AdvanceFrame
- callba ChooseNextMap_RedField
- callba LoadMapBillboardTileData
- lb de, $25, $25
- call PlaySoundEffect
- ld bc, ArrivedAtMapText
- callba LoadScrollingMapNameText
-.asm_31603
- callba Func_33e3
- rst AdvanceFrame
- ld a, [wd5ca]
- and a
- jr nz, .asm_31603
- ld a, $2
- ld [wd54d], a
- scf
- ret
-
-Func_3161b: ; 0x3161b
- ld a, [wTimerActive]
- and a
- ld a, [wd54c]
- jr z, .asm_3163d
- cp $1
- jp z, Func_31708
- cp $f
- jp z, Func_31708
- cp $2
- jp z, Func_3172a
- cp $e
- jp z, Func_3172a
- cp $d
- jp z, Func_3174c
-.asm_3163d
- cp $0
- jr z, .asm_31643
- scf
- ret
-
-.asm_31643
- call Func_3168c
- ld a, [wd54d]
- call CallInFollowingTable
-PointerTable_3164c: ; 0x3164c
- padded_dab Func_3165c
- padded_dab Func_3165e
- padded_dab Func_31660
- padded_dab Func_31672
-
-Func_3165c: ; 0x3165c
- scf
- ret
-
-Func_3165e: ; 0x3165e
- scf
- ret
-
-Func_31660: ; 0x31660
- callba Func_3022b
- ld de, $0001
- call PlaySong
- scf
- ret
-
-Func_31672: ; 0x31672
- ld a, [wd5ca] ;if text is off
- and a
- ret nz
- call FillBottomMessageBufferWithBlackTile
- callba Func_3022b
- ld de, $0001
- call PlaySong
- scf
- ret
-
-Func_3168c: ; 0x3168c
- ld a, $50
- ld [wLeftMapMoveDiglettAnimationCounter], a
- ld [wRightMapMoveDiglettFrame], a
- ld a, $3
- ld [wd645], a
- ld a, $1
- ld [wd646], a
- callba Func_107f8
- ld a, [wd57e]
- and a
- ret z
- xor a
- ld [wd57e], a
- ld a, $3
- ld [wd54d], a
- xor a
- ld [wSlotIsOpen], a
- ld [wIndicatorStates], a
- ld [wIndicatorStates + 1], a
- ld [wIndicatorStates + 2], a
- ld [wIndicatorStates + 3], a
- ld [wIndicatorStates + 4], a
- ld a, [wCurrentStage]
- bit 0, a
- jr z, .asm_316ee
- callba Func_1c2cb
- callba LoadSlotCaveCoverGraphics_BlueField
- callba LoadMapBillboardTileData
-.asm_316ee
- callba StopTimer
- call FillBottomMessageBufferWithBlackTile
- call Func_30db
- ld hl, wScrollingText1
- ld de, MapMoveFailedText
- call LoadScrollingText
- ret
-
-Func_31708: ; 0x31708
- ld a, [wMapMoveDirection]
- and a
- jr nz, .asm_31728
- ld a, [wIndicatorStates]
- and a
- jr z, .asm_31728
- xor a
- ld [wIndicatorStates], a
- ld [wIndicatorStates + 2], a
- ld a, $80
- ld [wIndicatorStates + 4], a
- ld a, $1
- ld [wSlotIsOpen], a
- ld [wd54d], a
-.asm_31728
- scf
- ret
-
-Func_3172a: ; 0x3172a
- ld a, [wMapMoveDirection]
- and a
- jr z, .asm_3174a
- ld a, [wIndicatorStates + 1]
- and a
- jr z, .asm_3174a
- xor a
- ld [wIndicatorStates + 1], a
- ld [wIndicatorStates + 3], a
- ld a, $80
- ld [wIndicatorStates + 4], a
- ld a, $1
- ld [wSlotIsOpen], a
- ld [wd54d], a
-.asm_3174a
- scf
- ret
-
-Func_3174c: ; 0x3174c
- ld de, $0000
- call PlaySong
- rst AdvanceFrame
- callba ChooseNextMap_BlueField
- callba LoadMapBillboardTileData
- lb de, $25, $25
- call PlaySoundEffect
- ld bc, ArrivedAtMapText
- callba LoadScrollingMapNameText
-.asm_3177a
- callba Func_33e3
- rst AdvanceFrame
- ld a, [wd5ca]
- and a
- jr nz, .asm_3177a
- ld a, $2
- ld [wd54d], a
- scf
- ret
+INCLUDE "engine/pinball_game/map_move.asm"
SECTION "bankd", ROMX
@@ -2201,166 +474,8 @@ StageSeelBonusCollisionMasks: ; 0x37f00
INCBIN "data/collision/masks/seel_bonus.masks"
SECTION "banke", ROMX
-Data_38000:
- db $89, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
-
-Data_38010:
- db $89, $01, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
-
-Data_38020:
- db $51, $10, $00, $10, $00, $10, $00, $10, $00, $80, $00, $00, $00, $00, $00, $00
-
-Data_38030:
- db $a9, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
-
- db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
- db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
- db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
- db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
- db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
- db $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
-
-Data_3809a:
- db $00, $00, $00
- db $40, $40, $40
- db $90, $90, $90
- db $e4, $e4, $e4
-
-Data_380a6:
- db $59, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
-
- RGB 31, 31, 31
- RGB 31, 31, 31
- RGB 31, 31, 31
- RGB 31, 31, 31
-
- RGB 31, 31, 31
- RGB 31, 31, 31
- RGB 31, 31, 31
- RGB 31, 31, 31
-
- RGB 31, 31, 31
- RGB 31, 31, 31
- RGB 31, 31, 31
- RGB 31, 31, 31
-
- RGB 31, 31, 31
- RGB 31, 31, 31
- RGB 31, 31, 31
- RGB 31, 31, 31
-
- RGB 30, 31, 29
- RGB 28, 28, 25
- RGB 27, 26, 24
- RGB 24, 24, 24
-
- RGB 23, 23, 23
- RGB 23, 23, 23
- RGB 23, 23, 23
- RGB 23, 23, 23
-
- RGB 23, 23, 23
- RGB 23, 23, 23
- RGB 23, 23, 23
- RGB 23, 23, 23
-
- RGB 23, 23, 23
- RGB 23, 23, 23
- RGB 23, 23, 23
- RGB 23, 23, 23
-
- RGB 30, 31, 27
- RGB 25, 26, 20
- RGB 23, 21, 18
- RGB 17, 17, 17
-
- RGB 15, 15, 15
- RGB 15, 15, 15
- RGB 15, 15, 15
- RGB 15, 15, 15
-
- RGB 15, 15, 15
- RGB 15, 15, 15
- RGB 15, 15, 15
- RGB 15, 15, 15
-
- RGB 15, 15, 15
- RGB 15, 15, 15
- RGB 15, 15, 15
- RGB 15, 15, 15
-
- RGB 29, 31, 25
- RGB 22, 24, 15
- RGB 19, 16, 12
- RGB 10, 10, 10
-
- RGB 7, 7, 7
- RGB 7, 7, 7
- RGB 7, 7, 7
- RGB 7, 7, 7
-
- RGB 7, 7, 7
- RGB 7, 7, 7
- RGB 7, 7, 7
- RGB 7, 7, 7
-
- RGB 7, 7, 7
- RGB 7, 7, 7
- RGB 7, 7, 7
- RGB 7, 7, 7
-
- RGB 29, 31, 23
- RGB 20, 22, 10
- RGB 15, 12, 6
- RGB 3, 3, 4
-
- RGB 0, 0, 0
- RGB 0, 0, 0
- RGB 0, 0, 0
- RGB 0, 0, 0
-
- RGB 0, 0, 0
- RGB 0, 0, 0
- RGB 0, 0, 0
- RGB 0, 0, 0
-
- RGB 0, 0, 0
- RGB 0, 0, 0
- RGB 0, 0, 0
- RGB 0, 0, 0
-Data_38156:
- db $99, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
- INCBIN "gfx/sgb_border.interleave.2bpp"
-
-Data_39166:
- db $99, $01, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
- INCBIN "gfx/sgb_border_blank.2bpp"
-
-Data_3a176:
- db $a1, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
- INCBIN "gfx/tilemaps/sgb_border.map"
-
-Data_3a9e6:
- db $79, $5d, $08, $00, $0b, $8c, $d0, $f4, $60, $00, $00, $00, $00, $00, $00, $00
-Data_3a9f6:
- db $79, $52, $08, $00, $0b, $a9, $e7, $9f, $01, $c0, $7e, $e8, $e8, $e8, $e8, $e0
-Data_3aa06:
- db $79, $47, $08, $00, $0b, $c4, $d0, $16, $a5, $cb, $c9, $05, $d0, $10, $a2, $28
-Data_3aa16:
- db $79, $3c, $08, $00, $0b, $f0, $12, $a5, $c9, $c9, $c8, $d0, $1c, $a5, $ca, $c9
-Data_3aa26:
- db $79, $31, $08, $00, $0b, $0c, $a5, $ca, $c9, $7e, $d0, $06, $a5, $cb, $c9, $7e
-Data_3aa36:
- db $79, $26, $08, $00, $0b, $39, $cd, $48, $0c, $d0, $34, $a5, $c9, $c9, $80, $d0
-Data_3aa46:
- db $79, $1b, $08, $00, $0b, $ea, $ea, $ea, $ea, $ea, $a9, $01, $cd, $4f, $0c, $d0
-Data_3aa56:
- db $79, $10, $08, $00, $0b, $4c, $20, $08, $ea, $ea, $ea, $ea, $ea, $60, $ea, $ea
-Data_3aa66:
- db $b9, $01, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
-Data_3aa76:
- db $b9, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
+INCLUDE "data/sgb.asm"
SECTION "bankf", ROMX