summaryrefslogtreecommitdiff
path: root/engine
diff options
context:
space:
mode:
authoryenatch <yenatch@gmail.com>2015-10-26 01:34:08 -0400
committeryenatch <yenatch@gmail.com>2015-10-26 01:34:08 -0400
commite638cdb74cabff705d4879568e74b8ed43da64e1 (patch)
tree02869ee6058c1b7d00d554af86e6eb6b197cd660 /engine
parentb8da3874bbc06e858b7b2d7a602fe33baa046e93 (diff)
parent0d17d4a75866d053f5e0b48c66deb2508071d98b (diff)
Merge remote-tracking branch 'origin/master' into pngs-kind-of
Conflicts: INSTALL.md
Diffstat (limited to 'engine')
-rw-r--r--engine/battle_start.asm872
-rw-r--r--engine/color.asm87
-rw-r--r--engine/credits.asm24
-rw-r--r--engine/diploma.asm4
-rw-r--r--engine/engine_flags.asm378
-rw-r--r--engine/events.asm184
-rw-r--r--engine/events_2.asm142
-rw-r--r--engine/fruit_trees.asm2
-rw-r--r--engine/map_objects.asm32
-rw-r--r--engine/map_setup.asm73
-rw-r--r--engine/more_phone_scripts.asm2
-rw-r--r--engine/pack.asm484
-rw-r--r--engine/phone.asm884
-rw-r--r--engine/phone_scripts.asm22
-rw-r--r--engine/pokedex.asm106
-rw-r--r--engine/predef.asm10
-rw-r--r--engine/radio.asm792
-rw-r--r--engine/radio2.asm404
-rw-r--r--engine/save.asm4
-rw-r--r--engine/scripting.asm104
-rw-r--r--engine/specials.asm132
-rw-r--r--engine/std_scripts.asm6
-rwxr-xr-xengine/time.asm470
-rw-r--r--engine/timeofdaypals.asm414
-rw-r--r--engine/title.asm96
25 files changed, 4389 insertions, 1339 deletions
diff --git a/engine/battle_start.asm b/engine/battle_start.asm
new file mode 100644
index 000000000..4b12bb632
--- /dev/null
+++ b/engine/battle_start.asm
@@ -0,0 +1,872 @@
+Predef_StartBattle: ; 8c20f
+ call Function8c26d
+ ld a, [rBGP]
+ ld [wcfc7], a
+ ld a, [rOBP0]
+ ld [wcfc8], a
+ ld a, [rOBP1]
+ ld [wcfc9], a
+ call DelayFrame
+ ld hl, hVBlank
+ ld a, [hl]
+ push af
+ ld [hl], $1
+
+.loop
+ ld a, [wJumptableIndex]
+ bit 7, a
+ jr nz, .done
+ call FlashyTransitionToBattle
+ call DelayFrame
+ jr .loop
+
+.done
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+
+ ld hl, Unkn1Pals
+ ld bc, $0040
+ xor a
+ call ByteFill
+
+ pop af
+ ld [rSVBK], a
+
+ ld a, %11111111
+ ld [wcfc7], a
+ call DmgToCgbBGPals
+ call DelayFrame
+ xor a
+ ld [hLCDStatCustom], a
+ ld [hLCDStatCustom + 1], a
+ ld [hLCDStatCustom + 2], a
+ ld [hSCY], a
+
+ ld a, $1
+ ld [rSVBK], a
+ pop af
+ ld [hVBlank], a
+ call DelayFrame
+ ret
+; 8c26d
+
+Function8c26d: ; 8c26d
+ ld a, [wLinkMode]
+ cp LINK_MOBILE
+ jr z, .mobile
+ callba Function6454
+ call UpdateSprites
+ call DelayFrame
+ call Function8c2a0
+ call Function8cf4f
+ jr .resume
+
+.mobile
+ call LoadTrainerBattlePokeballTiles
+
+.resume
+ ld a, SCREEN_HEIGHT_PX
+ ld [hWY], a
+ call DelayFrame
+ xor a
+ ld [hBGMapMode], a
+ ld hl, wJumptableIndex
+ xor a
+rept 2
+ ld [hli], a
+endr
+ ld [hl], a
+ call WipeLYOverrides
+ ret
+; 8c2a0
+
+Function8c2a0: ; 8c2a0
+ call LoadTrainerBattlePokeballTiles
+ ld hl, VBGMap0
+ call Function8c2cf
+ ret
+; 8c2aa
+
+LoadTrainerBattlePokeballTiles:
+; Load the tiles used in the Pokeball Graphic that fills the screen
+; at the start of every Trainer battle.
+ ld de, TrainerBattlePokeballTiles
+ ld hl, VTiles1 tile $7e
+ ld b, BANK(TrainerBattlePokeballTiles)
+ ld c, 2
+ call Request2bpp
+
+ ld a, [rVBK]
+ push af
+ ld a, $1
+ ld [rVBK], a
+
+ ld de, TrainerBattlePokeballTiles
+ ld hl, VTiles4 tile $7e
+ ld b, BANK(TrainerBattlePokeballTiles)
+ ld c, 2
+ call Request2bpp
+
+ pop af
+ ld [rVBK], a
+ ret
+; 8c2cf
+
+Function8c2cf: ; 8c2cf
+ ld a, [rSVBK]
+ push af
+ ld a, $6
+ ld [rSVBK], a
+ push hl
+ ld hl, w6_d000
+ ld bc, $28 * $10
+
+.loop
+ ld [hl], -1
+ inc hl
+ dec bc
+ ld a, c
+ or b
+ jr nz, .loop
+
+ pop hl
+ ld de, w6_d000
+ ld b, BANK(Function8c2cf) ; BANK(@)
+ ld c, $28
+ call Request2bpp
+ pop af
+ ld [rSVBK], a
+ ret
+; 8c2f4
+
+TrainerBattlePokeballTiles: ; 8c2f4
+INCBIN "gfx/overworld/trainer_battle_pokeball_tiles.2bpp"
+
+
+FlashyTransitionToBattle: ; 8c314
+ ld a, [wJumptableIndex]
+ ld e, a
+ ld d, 0
+ ld hl, .jumptable
+rept 2
+ add hl, de
+endr
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp [hl]
+; 8c323
+
+.jumptable: ; 8c323 (23:4323)
+ dw StartTrainerBattle_DetermineWhichAnimation ; 00
+
+ ; Animation 1: cave
+ dw StartTrainerBattle_LoadPokeBallGraphics ; 01
+ dw StartTrainerBattle_SetUpBGMap ; 02
+ dw StartTrainerBattle_Flash ; 03
+ dw StartTrainerBattle_Flash ; 04
+ dw StartTrainerBattle_Flash ; 05
+ dw StartTrainerBattle_NextScene ; 06
+ dw StartTrainerBattle_SetUpForWavyOutro ; 07
+ dw StartTrainerBattle_SineWave ; 08
+
+ ; Animation 2: cave, stronger
+ dw StartTrainerBattle_LoadPokeBallGraphics ; 09
+ dw StartTrainerBattle_SetUpBGMap ; 0a
+ dw StartTrainerBattle_Flash ; 0b
+ dw StartTrainerBattle_Flash ; 0c
+ dw StartTrainerBattle_Flash ; 0d
+ dw StartTrainerBattle_NextScene ; 0e
+ ; There is no setup for this one
+ dw StartTrainerBattle_ZoomToBlack ; 0f
+
+ ; Animation 3: no cave
+ dw StartTrainerBattle_LoadPokeBallGraphics ; 10
+ dw StartTrainerBattle_SetUpBGMap ; 11
+ dw StartTrainerBattle_Flash ; 12
+ dw StartTrainerBattle_Flash ; 13
+ dw StartTrainerBattle_Flash ; 14
+ dw StartTrainerBattle_NextScene ; 15
+ dw StartTrainerBattle_SetUpForSpinOutro ; 16
+ dw StartTrainerBattle_SpinToBlack ; 17
+
+ ; Animation 4: no cave, stronger
+ dw StartTrainerBattle_LoadPokeBallGraphics ; 18
+ dw StartTrainerBattle_SetUpBGMap ; 19
+ dw StartTrainerBattle_Flash ; 1a
+ dw StartTrainerBattle_Flash ; 1b
+ dw StartTrainerBattle_Flash ; 1c
+ dw StartTrainerBattle_NextScene ; 1d
+ dw StartTrainerBattle_SetUpForRandomScatterOutro ; 1e
+ dw StartTrainerBattle_SpeckleToBlack ; 1f
+
+ ; All animations jump to here.
+ dw StartTrainerBattle_Finish ; 20
+
+
+StartTrainerBattle_DetermineWhichAnimation: ; 8c365 (23:4365)
+; The screen flashes a different number of
+; times depending on the level of your lead
+; Pokemon relative to the opponent's.
+ ld de, 0
+ ld a, [BattleMonLevel]
+ add 3
+ ld hl, EnemyMonLevel
+ cp [hl]
+ jr nc, .okay
+ set 0, e
+.okay
+ ld a, [wPermission]
+ cp CAVE
+ jr z, .okay2
+ cp PERM_5
+ jr z, .okay2
+ cp DUNGEON
+ jr z, .okay2
+ set 1, e
+.okay2
+ ld hl, .StartingPoints
+ add hl, de
+ ld a, [hl]
+ ld [wJumptableIndex], a
+ ret
+; 8c38f (23:438f)
+
+.StartingPoints: ; 8c38f
+ db 1, 9
+ db 16, 24
+; 8c393
+
+StartTrainerBattle_Finish: ; 8c393 (23:4393)
+ call ClearSprites
+ ld a, $80
+ ld [wJumptableIndex], a
+ ret
+
+StartTrainerBattle_NextScene: ; 8c39c (23:439c)
+ ld hl, wJumptableIndex
+ inc [hl]
+ ret
+
+StartTrainerBattle_SetUpBGMap: ; 8c3a1 (23:43a1)
+ call StartTrainerBattle_NextScene
+ xor a
+ ld [wcf64], a
+ ld [hBGMapMode], a ; $ff00+$d4
+ ret
+
+StartTrainerBattle_Flash: ; 8c3ab (23:43ab)
+ call .DoFlashAnimation
+ ret nc
+ call StartTrainerBattle_NextScene
+ ret
+
+.DoFlashAnimation: ; 8c3b3 (23:43b3)
+ ld a, [wd847]
+ cp -1
+ jr z, .done
+ ld hl, wcf64
+ ld a, [hl]
+ inc [hl]
+ srl a
+ ld e, a
+ ld d, 0
+ ld hl, .pals
+ add hl, de
+ ld a, [hl]
+ cp %00000001
+ jr z, .done
+ ld [wcfc7], a
+ call DmgToCgbBGPals
+ and a
+ ret
+
+.done
+ xor a
+ ld [wcf64], a
+ scf
+ ret
+; 8c3db (23:43db)
+
+.pals: ; 8c3db
+ db %11111001 ; 3321
+ db %11111110 ; 3332
+ db %11111111 ; 3333
+ db %11111110 ; 3332
+ db %11111001 ; 3321
+ db %11100100 ; 3210
+ db %10010000 ; 2100
+ db %01000000 ; 1000
+ db %00000000 ; 0000
+ db %01000000 ; 1000
+ db %10010000 ; 2100
+ db %11100100 ; 3210
+ db %00000001 ; 0001
+; 8c3e8
+
+StartTrainerBattle_SetUpForWavyOutro: ; 8c3e8 (23:43e8)
+ callba Function5602
+ ld a, $5
+ ld [rSVBK], a ; $ff00+$70
+ call StartTrainerBattle_NextScene
+ ld a, $43
+ ld [hLCDStatCustom], a ; $ff00+$c6
+ xor a
+ ld [hLCDStatCustom + 1], a
+ ld a, $90
+ ld [hLCDStatCustom + 2], a
+ xor a
+ ld [wcf64], a
+ ld [wcf65], a
+ ret
+
+StartTrainerBattle_SineWave: ; 8c408 (23:4408)
+ ld a, [wcf64]
+ cp $60
+ jr nc, .end
+ call .DoSineWave
+ ret
+
+.end
+ ld a, $20
+ ld [wJumptableIndex], a
+ ret
+
+.DoSineWave: ; 8c419 (23:4419)
+ ld hl, wcf65
+ ld a, [hl]
+ inc [hl]
+ ld hl, wcf64
+ ld d, [hl]
+ add [hl]
+ ld [hl], a
+ ld a, $90
+ ld bc, wd100
+ ld e, $0
+
+.loop
+ push af
+ push de
+ ld a, e
+ call StartTrainerBattle_DrawSineWave
+ ld [bc], a
+ inc bc
+ pop de
+ ld a, e
+ add $2
+ ld e, a
+ pop af
+ dec a
+ jr nz, .loop
+ ret
+
+StartTrainerBattle_SetUpForSpinOutro: ; 8c43d (23:443d)
+ callba Function5602
+ ld a, $5
+ ld [rSVBK], a ; $ff00+$70
+ call StartTrainerBattle_NextScene
+ xor a
+ ld [wcf64], a
+ ret
+
+spintable_entry: MACRO
+ db \1
+ dw .wedge\2
+ dwcoord \3, \4
+ENDM
+
+; quadrants
+ const_def
+ const UPPER_LEFT
+ const UPPER_RIGHT
+ const LOWER_LEFT
+ const LOWER_RIGHT
+
+StartTrainerBattle_SpinToBlack: ; 8c44f (23:444f)
+ xor a
+ ld [hBGMapMode], a ; $ff00+$d4
+ ld a, [wcf64]
+ ld e, a
+ ld d, 0
+ ld hl, .spintable
+rept 5
+ add hl, de
+endr
+ ld a, [hli]
+ cp -1
+ jr z, .end
+ ld [wcf65], a
+ call .load
+ ld a, $1
+ ld [hBGMapMode], a ; $ff00+$d4
+ call DelayFrame
+ call DelayFrame
+ ld hl, wcf64
+ inc [hl]
+ ret
+
+.end
+ ld a, $1
+ ld [hBGMapMode], a ; $ff00+$d4
+ call DelayFrame
+ call DelayFrame
+ call DelayFrame
+ xor a
+ ld [hBGMapMode], a ; $ff00+$d4
+ ld a, $20
+ ld [wJumptableIndex], a
+ ret
+; 8c490 (23:4490)
+
+.spintable: ; 8c490
+ spintable_entry UPPER_LEFT, 1, 1, 6
+ spintable_entry UPPER_LEFT, 2, 0, 3
+ spintable_entry UPPER_LEFT, 3, 1, 0
+ spintable_entry UPPER_LEFT, 4, 5, 0
+ spintable_entry UPPER_LEFT, 5, 9, 0
+ spintable_entry UPPER_RIGHT, 5, 10, 0
+ spintable_entry UPPER_RIGHT, 4, 14, 0
+ spintable_entry UPPER_RIGHT, 3, 18, 0
+ spintable_entry UPPER_RIGHT, 2, 19, 3
+ spintable_entry UPPER_RIGHT, 1, 18, 6
+ spintable_entry LOWER_RIGHT, 1, 18, 11
+ spintable_entry LOWER_RIGHT, 2, 19, 14
+ spintable_entry LOWER_RIGHT, 3, 18, 17
+ spintable_entry LOWER_RIGHT, 4, 14, 17
+ spintable_entry LOWER_RIGHT, 5, 10, 17
+ spintable_entry LOWER_LEFT, 5, 9, 17
+ spintable_entry LOWER_LEFT, 4, 5, 17
+ spintable_entry LOWER_LEFT, 3, 1, 17
+ spintable_entry LOWER_LEFT, 2, 0, 14
+ spintable_entry LOWER_LEFT, 1, 1, 11
+ db -1
+; 8c4f5
+
+.load: ; 8c4f5 (23:44f5)
+ ld a, [hli]
+ ld e, a
+ ld a, [hli]
+ ld d, a
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+.loop
+ push hl
+ ld a, [de]
+ ld c, a
+ inc de
+.loop1
+ ld [hl], $ff
+ ld a, [wcf65]
+ bit 0, a
+ jr z, .leftside
+ inc hl
+ jr .okay1
+.leftside
+ dec hl
+.okay1
+ dec c
+ jr nz, .loop1
+ pop hl
+ ld a, [wcf65]
+ bit 1, a
+ ld bc, SCREEN_WIDTH
+ jr z, .upper
+ ld bc, -SCREEN_WIDTH
+.upper
+ add hl, bc
+ ld a, [de]
+ inc de
+ cp -1
+ ret z
+ and a
+ jr z, .loop
+ ld c, a
+.loop2
+ ld a, [wcf65]
+ bit 0, a
+ jr z, .leftside2
+ dec hl
+ jr .okay2
+.leftside2
+ inc hl
+.okay2
+ dec c
+ jr nz, .loop2
+ jr .loop
+; 8c538 (23:4538)
+
+.wedge1: db 2, 3, 5, 4, 9, -1
+.wedge2: db 1, 1, 2, 2, 4, 2, 4, 2, 3, -1
+.wedge3: db 2, 1, 3, 1, 4, 1, 4, 1, 4, 1, 3, 1, 2, 1, 1, 1, 1, -1
+.wedge4: db 4, 1, 4, 0, 3, 1, 3, 0, 2, 1, 2, 0, 1, -1
+.wedge5: db 4, 0, 3, 0, 3, 0, 2, 0, 2, 0, 1, 0, 1, 0, 1, -1
+; 8c578
+
+StartTrainerBattle_SetUpForRandomScatterOutro: ; 8c578 (23:4578)
+ callba Function5602
+ ld a, $5
+ ld [rSVBK], a ; $ff00+$70
+ call StartTrainerBattle_NextScene
+ ld a, $10
+ ld [wcf64], a
+ ld a, $1
+ ld [hBGMapMode], a ; $ff00+$d4
+ ret
+
+StartTrainerBattle_SpeckleToBlack: ; 8c58f (23:458f)
+ ld hl, wcf64
+ ld a, [hl]
+ and a
+ jr z, .done
+ dec [hl]
+ ld c, $c
+.loop
+ push bc
+ call .BlackOutRandomTile
+ pop bc
+ dec c
+ jr nz, .loop
+ ret
+
+.done
+ ld a, $1
+ ld [hBGMapMode], a ; $ff00+$d4
+ call DelayFrame
+ call DelayFrame
+ call DelayFrame
+ xor a
+ ld [hBGMapMode], a ; $ff00+$d4
+ ld a, $20
+ ld [wJumptableIndex], a
+ ret
+
+.BlackOutRandomTile: ; 8c5b8 (23:45b8)
+.y_loop
+ call Random
+ cp SCREEN_HEIGHT
+ jr nc, .y_loop
+ ld b, a
+
+.x_loop
+ call Random
+ cp SCREEN_WIDTH
+ jr nc, .x_loop
+ ld c, a
+
+ hlcoord 0, -1
+ ld de, SCREEN_WIDTH
+ inc b
+
+.row_loop
+ add hl, de
+ dec b
+ jr nz, .row_loop
+ add hl, bc
+
+; If the tile has already been blacked out,
+; sample a new tile
+ ld a, [hl]
+ cp $ff
+ jr z, .y_loop
+ ld [hl], $ff
+ ret
+
+StartTrainerBattle_LoadPokeBallGraphics: ; 8c5dc (23:45dc)
+ ld a, [OtherTrainerClass]
+ and a
+ jp z, .nextscene
+
+ xor a
+ ld [hBGMapMode], a ; $ff00+$d4
+ hlcoord 0, 0, AttrMap
+ ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
+ inc b
+ inc c
+ jr .enter_loop_midway
+
+.loop
+ ld a, [hl]
+ or %00000111
+ ld [hli], a
+.enter_loop_midway
+ dec c
+ jr nz, .loop
+ dec b
+ jr nz, .loop
+
+ call .loadpokeballgfx ; load a, [OtherTrainerClass] \ ld de, PokeBallTransition
+ hlcoord 2, 1
+
+ ld b, SCREEN_WIDTH - 4
+.loop2
+ push hl
+ ld c, 2
+.loop3
+ push hl
+ ld a, [de]
+ inc de
+.loop4
+; Loading is done bit by bit
+ and a
+ jr z, .done
+ sla a
+ jr nc, .no_load
+ ld [hl], $fe ; "8"
+.no_load
+ inc hl
+ jr .loop4
+
+.done
+ pop hl
+ push bc
+ ld bc, (SCREEN_WIDTH - 4) / 2
+ add hl, bc
+ pop bc
+ dec c
+ jr nz, .loop3
+
+ pop hl
+ push bc
+ ld bc, SCREEN_WIDTH
+ add hl, bc
+ pop bc
+ dec b
+ jr nz, .loop2
+
+ ld a, [hCGB] ; $ff00+$e6
+ and a
+ jr nz, .cgb
+ ld a, $1
+ ld [hBGMapMode], a ; $ff00+$d4
+ call DelayFrame
+ call DelayFrame
+ jr .nextscene
+
+.cgb
+ ld hl, .daypals
+ ld a, [TimeOfDayPal]
+ and (1 << 2) - 1
+ cp 3
+ jr nz, .daytime
+ ld hl, .nightpals
+.daytime
+ ld a, [rSVBK] ; $ff00+$70
+ push af
+ ld a, $5 ; WRAM5 = palettes
+ ld [rSVBK], a ; $ff00+$70
+ call .copypals
+ push hl
+ ld de, Unkn1Pals + 8 * 7
+ ld bc, $8
+ call CopyBytes
+ pop hl
+ ld de, BGPals + 8 * 7
+ ld bc, $8
+ call CopyBytes
+ pop af
+ ld [rSVBK], a ; $ff00+$70
+ ld a, $1
+ ld [hCGBPalUpdate], a ; $ff00+$e5
+ call DelayFrame
+ call Function8cf4f
+
+.nextscene: ; 8c673 (23:4673)
+ call StartTrainerBattle_NextScene
+ ret
+
+.copypals: ; 8c677 (23:4677)
+ ld de, Unkn1Pals + 8 * 7
+ call .copy
+ ld de, BGPals + 8 * 7
+ call .copy
+ ld de, Unkn2Pals + 8 * 6
+ call .copy
+ ld de, OBPals + 8 * 6
+ call .copy
+ ld de, Unkn2Pals + 8 * 7
+ call .copy
+ ld de, OBPals + 8 * 7
+
+.copy: ; 8c698 (23:4698)
+ push hl
+ ld bc, $8
+ call CopyBytes
+ pop hl
+ ret
+; 8c6a1 (23:46a1)
+
+.daypals: ; 8c6a1
+ RGB 31, 18, 29
+ RGB 31, 11, 15
+ RGB 31, 05, 05
+ RGB 07, 07, 07
+; 8c6a9
+
+.nightpals: ; 8c6a9
+ RGB 31, 18, 29
+ RGB 31, 05, 05
+ RGB 31, 05, 05
+ RGB 31, 05, 05
+
+.loadpokeballgfx:
+ ld a, [OtherTrainerClass]
+ ld de, PokeBallTransition
+ ret
+
+PokeBallTransition:
+ db %00000011, %11000000
+ db %00001111, %11110000
+ db %00111100, %00111100
+ db %00110000, %00001100
+ db %01100000, %00000110
+ db %01100011, %11000110
+ db %11000110, %01100011
+ db %11111100, %00111111
+ db %11111100, %00111111
+ db %11000110, %01100011
+ db %01100011, %11000110
+ db %01100000, %00000110
+ db %00110000, %00001100
+ db %00111100, %00111100
+ db %00001111, %11110000
+ db %00000011, %11000000
+
+WipeLYOverrides: ; 8c6d8
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+ ld hl, LYOverrides
+ call .wipe
+ ld hl, LYOverridesBackup
+ call .wipe
+ pop af
+ ld [rSVBK], a
+ ret
+; 8c6ef
+
+.wipe: ; 8c6ef
+ xor a
+ ld c, SCREEN_HEIGHT_PX
+.loop
+ ld [hli], a
+ dec c
+ jr nz, .loop
+ ret
+; 8c6f7
+
+
+StartTrainerBattle_DrawSineWave: ; 8c6f7 (23:46f7)
+ and (1 << 6) - 1
+ cp 1 << 5
+ jr nc, .okay
+ call .DoSineWave
+ ld a, h
+ ret
+
+.okay
+ and (1 << 5) - 1
+ call .DoSineWave
+ ld a, h
+ xor -1 ; cpl
+ inc a
+ ret
+
+.DoSineWave: ; 8c70c (23:470c)
+ ld e, a
+ ld a, d
+ ld d, 0
+ ld hl, .sinewave
+rept 2
+ add hl, de
+endr
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ ld hl, 0
+.loop
+ srl a
+ jr nc, .skip
+ add hl, de
+.skip
+ sla e
+ rl d
+ and a
+ jr nz, .loop
+ ret
+; 8c728 (23:4728)
+
+.sinewave: ; 8c728
+ sine_wave $100
+; 8c768
+
+zoombox: macro
+; width, height, start y, start x
+ db \1, \2
+ dwcoord \3, \4
+endm
+
+StartTrainerBattle_ZoomToBlack: ; 8c768 (23:4768)
+ callba Function5602
+ ld de, .boxes
+
+.loop
+ ld a, [de]
+ cp -1
+ jr z, .done
+ inc de
+ ld c, a
+ ld a, [de]
+ inc de
+ ld b, a
+ ld a, [de]
+ inc de
+ ld l, a
+ ld a, [de]
+ inc de
+ ld h, a
+ xor a
+ ld [hBGMapMode], a ; $ff00+$d4
+ call .Copy
+ call WaitBGMap
+ jr .loop
+
+.done
+ ld a, $20
+ ld [wJumptableIndex], a
+ ret
+; 8c792 (23:4792)
+
+.boxes: ; 8c792
+ zoombox 4, 2, 8, 8
+ zoombox 6, 4, 7, 7
+ zoombox 8, 6, 6, 6
+ zoombox 10, 8, 5, 5
+ zoombox 12, 10, 4, 4
+ zoombox 14, 12, 3, 3
+ zoombox 16, 14, 2, 2
+ zoombox 18, 16, 1, 1
+ zoombox 20, 18, 0, 0
+ db -1
+; 8c7b7
+
+.Copy: ; 8c7b7 (23:47b7)
+ ld a, $ff
+.row
+ push bc
+ push hl
+.col
+ ld [hli], a
+ dec c
+ jr nz, .col
+ pop hl
+ ld bc, SCREEN_WIDTH
+ add hl, bc
+ pop bc
+ dec b
+ jr nz, .row
+ ret
+; 8c7c9 (23:47c9)
diff --git a/engine/color.asm b/engine/color.asm
index 0e932f786..ed65f59df 100644
--- a/engine/color.asm
+++ b/engine/color.asm
@@ -83,7 +83,7 @@ Function8aa4: ; 8aa4
push bc
ld hl, PalPacket_9ce6
ld de, wcda9
- ld bc, $0010
+ ld bc, PalPacket_9cf6 - PalPacket_9ce6
call CopyBytes
pop bc
pop de
@@ -105,7 +105,7 @@ Function8aa4: ; 8aa4
Function8ad1: ; 8ad1
ld hl, PalPacket_9c56 + 1
- call Function9610
+ call CopyFourPalettes
call Function971a
call Function9699
ret
@@ -196,8 +196,8 @@ Function8b4d: ; 8b4d
.asm_8b5c
ld de, Unkn2Pals
ld a, $3b
- call Function9625
- jp Function9630
+ call GetAthPalletFromPalettes9df6
+ jp LoadHLPaletteIntoDE
; 8b67
Function8b67: ; 8b67
@@ -212,8 +212,8 @@ Function8b67: ; 8b67
.asm_8b76
ld de, Unkn2Pals
ld a, $3c
- call Function9625
- jp Function9630
+ call GetAthPalletFromPalettes9df6
+ jp LoadHLPaletteIntoDE
; 8b81
Function8b81: ; 8b81
@@ -309,7 +309,7 @@ Function8bec: ; 8bec
.asm_8c0b
ld b, $0
add hl, bc
- ld bc, $0604
+ lb bc, 6, 4
ld a, [EnemySafeguardCount]
and $3
call Function9663
@@ -386,7 +386,7 @@ endr
jr .asm_8c7b
.asm_8c82
- ld bc, $0208
+ lb bc, 2, 8
ld a, e
call Function9663
ret
@@ -520,7 +520,7 @@ INCLUDE "predef/cgb.asm"
Function95f0: ; 95f0
ld hl, Palette_9608
ld de, Unkn1Pals
- ld bc, $0008
+ ld bc, 8
ld a, $5
call FarCopyWRAM
call Function96a4
@@ -537,28 +537,29 @@ Palette_9608: ; 9608
; 9610
-Function9610: ; 9610
+CopyFourPalettes: ; 9610
ld de, Unkn1Pals
ld c, $4
-Function9615: ; 9615
+CopyPalettes: ; 9615
+.loop
push bc
ld a, [hli]
push hl
- call Function9625
- call Function9630
+ call GetAthPalletFromPalettes9df6
+ call LoadHLPaletteIntoDE
pop hl
inc hl
pop bc
dec c
- jr nz, Function9615
+ jr nz, .loop
ret
; 9625
-Function9625: ; 9625
+GetAthPalletFromPalettes9df6: ; 9625
ld l, a
ld h, $0
-rept 3
+rept 3 ; multiply by 8
add hl, hl
endr
ld bc, Palettes_9df6
@@ -566,18 +567,18 @@ endr
ret
; 9630
-Function9630: ; 9630
+LoadHLPaletteIntoDE: ; 9630
ld a, [rSVBK]
push af
ld a, $5
ld [rSVBK], a
ld c, $8
-.asm_9639
+.loop
ld a, [hli]
ld [de], a
inc de
dec c
- jr nz, .asm_9639
+ jr nz, .loop
pop af
ld [rSVBK], a
ret
@@ -595,12 +596,12 @@ Function9643: ; 9643
ld [de], a
inc de
ld c, $4
-.asm_9654
+.loop
ld a, [hli]
ld [de], a
inc de
dec c
- jr nz, .asm_9654
+ jr nz, .loop
xor a
ld [de], a
inc de
@@ -612,19 +613,19 @@ Function9643: ; 9643
; 9663
Function9663: ; 9663
-.asm_9663
+.row
push bc
push hl
-.asm_9665
+.col
ld [hli], a
dec c
- jr nz, .asm_9665
+ jr nz, .col
pop hl
- ld bc, $0014
+ ld bc, SCREEN_WIDTH
add hl, bc
pop bc
dec b
- jr nz, .asm_9663
+ jr nz, .row
ret
; 9673
@@ -743,7 +744,7 @@ Function96f3: ; 96f3
jr .asm_970b
.asm_9712
- ld bc, $0208
+ lb bc, 2, 8
ld a, e
call Function9663
ret
@@ -784,16 +785,16 @@ Function973a: ; 973a
Function974b: ; 974b
and a
jp nz, Function97f9
- ld a, [wd45b]
+ ld a, [wPlayerSpriteSetupFlags]
bit 2, a
- jr nz, .asm_9760
+ jr nz, .male
ld a, [PlayerGender]
and a
- jr z, .asm_9760
+ jr z, .male
ld hl, KrisPalette
ret
-.asm_9760
+.male
ld hl, PlayerPalette
ret
; 9764
@@ -876,21 +877,21 @@ Function97cc: ; 97cc
ld a, $90
ld [rOBPI], a
ld a, $1c
- call Function9625
+ call GetAthPalletFromPalettes9df6
call Function97e5
ld a, $21
- call Function9625
+ call GetAthPalletFromPalettes9df6
call Function97e5
ret
; 97e5
Function97e5: ; 97e5
ld c, $8
-.asm_97e7
+.loop
ld a, [hli]
ld [rOBPD], a
dec c
- jr nz, .asm_97e7
+ jr nz, .loop
ret
; 97ee
@@ -935,32 +936,32 @@ Function981a: ; 981a
and $7
ret z
ld b, a
-.asm_981f
+.loop
push bc
xor a
ld [rJOYP], a
ld a, $30
ld [rJOYP], a
ld b, $10
-.asm_9829
+.loop2
ld e, $8
ld a, [hli]
ld d, a
-.asm_982d
+.loop3
bit 0, d
ld a, $10
- jr nz, .asm_9835
+ jr nz, .okay
ld a, $20
-.asm_9835
+.okay
ld [rJOYP], a
ld a, $30
ld [rJOYP], a
rr d
dec e
- jr nz, .asm_982d
+ jr nz, .loop3
dec b
- jr nz, .asm_9829
+ jr nz, .loop2
ld a, $20
ld [rJOYP], a
ld a, $30
@@ -968,7 +969,7 @@ Function981a: ; 981a
call Function9a7a
pop bc
dec b
- jr nz, .asm_981f
+ jr nz, .loop
ret
; 9853
diff --git a/engine/credits.asm b/engine/credits.asm
index 449fc0ac0..5c0013e17 100644
--- a/engine/credits.asm
+++ b/engine/credits.asm
@@ -124,7 +124,7 @@ Function109847:: ; 109847
jr z, .asm_10984f
ld a, $40
.asm_10984f
- ld [wcf63], a
+ ld [wJumptableIndex], a
ld a, [rSVBK]
push af
@@ -148,17 +148,17 @@ Function109847:: ; 109847
jr nz, .asm_10986a
ld de, CreditsBorderGFX
- ld hl, $9200
+ ld hl, VTiles2 tile $20
lb bc, BANK(CreditsBorderGFX), $09
call Request2bpp
ld de, CopyrightGFX
- ld hl, $9600
+ ld hl, VTiles2 tile $60
lb bc, BANK(CopyrightGFX), $1d
call Request2bpp
ld de, TheEndGFX
- ld hl, $9400
+ ld hl, VTiles2 tile $40
lb bc, BANK(TheEndGFX), $10
call Request2bpp
@@ -193,7 +193,7 @@ Function109847:: ; 109847
ld a, $5
ld [hVBlank], a
ld a, $1
- ld [$ffaa], a
+ ld [hInMenu], a
xor a
ld [hBGMapMode], a
ld [CreditsPos], a
@@ -225,7 +225,7 @@ Function1098fd: ; 1098fd
ld a, [hJoypadDown]
and $1
ret z
- ld a, [wcf63]
+ ld a, [wJumptableIndex]
bit 7, a
ret
; 109908
@@ -234,7 +234,7 @@ Function109908: ; 109908
ld a, [hJoypadDown]
and $2
ret z
- ld a, [wcf63]
+ ld a, [wJumptableIndex]
bit 6, a
ret z
ld hl, CreditsPos
@@ -255,7 +255,7 @@ Function109908: ; 109908
; 109926
Function109926: ; 109926
- ld a, [wcf63]
+ ld a, [wJumptableIndex]
and $f
ld e, a
ld d, 0
@@ -287,12 +287,12 @@ Jumptable_109937: ; 109937 (42:5937)
Function109951: ; 109951 (42:5951)
- ld hl, wcf63
+ ld hl, wJumptableIndex
inc [hl]
ret
Function109956: ; 109956 (42:5956)
- ld hl, wcf63
+ ld hl, wJumptableIndex
ld a, [hl]
and $f0
ld [hl], a
@@ -348,7 +348,7 @@ Function1099a3: ; 1099a3 (42:59a3)
ParseCredits: ; 1099aa
- ld hl, wcf63
+ ld hl, wJumptableIndex
bit 7, [hl]
jp nz, .done
@@ -488,7 +488,7 @@ endr
.end
; Stop execution.
- ld hl, wcf63
+ ld hl, wJumptableIndex
set 7, [hl]
ld a, $20
ld [MusicFade], a
diff --git a/engine/diploma.asm b/engine/diploma.asm
index 420bff7f1..f56e4ec00 100644
--- a/engine/diploma.asm
+++ b/engine/diploma.asm
@@ -70,12 +70,12 @@ Function1dd7ae: ; 1dd7ae
call PlaceString
hlcoord 12, 15
ld de, GameTimeHours
- ld bc, $0204
+ lb bc, 2, 4
call PrintNum
ld [hl], $67
inc hl
ld de, GameTimeMinutes
- ld bc, $8102
+ lb bc, PRINTNUM_LEADINGZEROS | 1, 2
call PrintNum
ret
; 1dd7f0
diff --git a/engine/engine_flags.asm b/engine/engine_flags.asm
index ff7948708..5baa52cc4 100644
--- a/engine/engine_flags.asm
+++ b/engine/engine_flags.asm
@@ -1,198 +1,200 @@
; All locations are in WRAM bank 1.
-
+engine_flag: MACRO
+ dwb \1, 1 << \2
+ENDM
; location, bit
; pokegear
- dwb wPokegearFlags, %00000010 ; radio card ; $0
- dwb wPokegearFlags, %00000001 ; map card
- dwb wPokegearFlags, %00000100 ; phone card
- dwb wPokegearFlags, %00001000 ; expn card
- dwb wPokegearFlags, %10000000 ; on/off
-
- ; wDaycareMan, %10000000 ; daycare 1 on
- dwb wDaycareMan, %01000000 ; monster 1 and 2 are compatible
- ; wDaycareMan, %00100000 ; egg is ready
- dwb wDaycareMan, %00000001 ; monster 1 in daycare
-
- ; wDaycareLady, %10000000 = daycare 2 on
- dwb wDaycareLady, %00000001 ; monster 2 in daycare
-
- dwb wMomSavingMoney, %00000001 ; mom saving money ; $8
- dwb wMomSavingMoney, %10000000 ; dst
-
- dwb wdc39, %00000001
-
- dwb StatusFlags, %00000001 ; pokedex
- dwb StatusFlags, %00000010 ; unown dex
- dwb StatusFlags, %00001000 ; pokerus
- dwb StatusFlags, %00010000 ; rocket signal on ch20
- dwb StatusFlags, %01000000 ; credits skip
- dwb StatusFlags, %10000000 ; bug contest on ; $10
- dwb StatusFlags2, %00000100 ; bug contest timer
- dwb StatusFlags2, %00000010
- dwb StatusFlags2, %00000001 ; rockets in radio tower
- dwb StatusFlags2, %00010000 ; bike shop call enabled (1024 bike steps reqd)
- dwb StatusFlags2, %00100000 ; give pokerus; berry -> berry juice when trading?
- dwb StatusFlags2, %01000000
- dwb StatusFlags2, %10000000 ; rockets in mahogany
-
- dwb BikeFlags, %00000001 ; strength active ; $18
- dwb BikeFlags, %00000010 ; always on bike (cant surf)
- dwb BikeFlags, %00000100 ; downhill (cycling road)
-
- dwb JohtoBadges, %00000001 ; zephyrbadge
- dwb JohtoBadges, %00000010 ; hivebadge
- dwb JohtoBadges, %00000100 ; plainbadge
- dwb JohtoBadges, %00001000 ; fogbadge
- dwb JohtoBadges, %00010000 ; mineralbadge
- dwb JohtoBadges, %00100000 ; stormbadge ; $20
- dwb JohtoBadges, %01000000 ; glacierbadge
- dwb JohtoBadges, %10000000 ; risingbadge
-
- dwb KantoBadges, %00000001 ; boulderbadge
- dwb KantoBadges, %00000010 ; cascadebadge
- dwb KantoBadges, %00000100 ; thunderbadge
- dwb KantoBadges, %00001000 ; rainbowbadge
- dwb KantoBadges, %00010000 ; soulbadge
- dwb KantoBadges, %00100000 ; marshbadge ; $28
- dwb KantoBadges, %01000000 ; volcanobadge
- dwb KantoBadges, %10000000 ; earthbadge
+ engine_flag wPokegearFlags, 1 ; radio card ; $0
+ engine_flag wPokegearFlags, 0 ; map card
+ engine_flag wPokegearFlags, 2 ; phone card
+ engine_flag wPokegearFlags, 3 ; expn card
+ engine_flag wPokegearFlags, 7 ; on/off
+
+ ; wDaycareMan, 7 ; daycare 1 on
+ engine_flag wDaycareMan, 6 ; monster 1 and 2 are compatible
+ ; wDaycareMan, 5 ; egg is ready
+ engine_flag wDaycareMan, 0 ; monster 1 in daycare
+
+ ; wDaycareLady, 7 = daycare 2 on
+ engine_flag wDaycareLady, 0 ; monster 2 in daycare
+
+ engine_flag wMomSavingMoney, 0 ; mom saving money ; $8
+ engine_flag wMomSavingMoney, 7 ; dst
+
+ engine_flag wdc39, 0
+
+ engine_flag StatusFlags, 0 ; pokedex
+ engine_flag StatusFlags, 1 ; unown dex
+ engine_flag StatusFlags, 3 ; pokerus
+ engine_flag StatusFlags, 4 ; rocket signal on ch20
+ engine_flag StatusFlags, 6 ; credits skip
+ engine_flag StatusFlags, 7 ; bug contest on ; $10
+ engine_flag StatusFlags2, 2 ; bug contest timer
+ engine_flag StatusFlags2, 1
+ engine_flag StatusFlags2, 0 ; rockets in radio tower
+ engine_flag StatusFlags2, 4 ; bike shop call enabled (1024 bike steps reqd)
+ engine_flag StatusFlags2, 5 ; give pokerus
+ engine_flag StatusFlags2, 6 ; berry -> berry juice when trading?
+ engine_flag StatusFlags2, 7 ; rockets in mahogany
+
+ engine_flag BikeFlags, 0 ; strength active ; $18
+ engine_flag BikeFlags, 1 ; always on bike (cant surf)
+ engine_flag BikeFlags, 2 ; downhill (cycling road)
+
+ engine_flag JohtoBadges, 0 ; zephyrbadge
+ engine_flag JohtoBadges, 1 ; hivebadge
+ engine_flag JohtoBadges, 2 ; plainbadge
+ engine_flag JohtoBadges, 3 ; fogbadge
+ engine_flag JohtoBadges, 4 ; mineralbadge
+ engine_flag JohtoBadges, 5 ; stormbadge ; $20
+ engine_flag JohtoBadges, 6 ; glacierbadge
+ engine_flag JohtoBadges, 7 ; risingbadge
+
+ engine_flag KantoBadges, 0 ; boulderbadge
+ engine_flag KantoBadges, 1 ; cascadebadge
+ engine_flag KantoBadges, 2 ; thunderbadge
+ engine_flag KantoBadges, 3 ; rainbowbadge
+ engine_flag KantoBadges, 4 ; soulbadge
+ engine_flag KantoBadges, 5 ; marshbadge ; $28
+ engine_flag KantoBadges, 6 ; volcanobadge
+ engine_flag KantoBadges, 7 ; earthbadge
; unown sets
- dwb UnlockedUnowns, %00000001 ; 1
- dwb UnlockedUnowns, %00000010 ; 2
- dwb UnlockedUnowns, %00000100 ; 3
- dwb UnlockedUnowns, %00001000 ; 4
- dwb UnlockedUnowns, %00010000 ; 5
- dwb UnlockedUnowns, %00100000 ; 6 ; $30
- dwb UnlockedUnowns, %01000000 ; 7
- dwb UnlockedUnowns, %10000000 ; 8
+ engine_flag UnlockedUnowns, 0 ; 1
+ engine_flag UnlockedUnowns, 1 ; 2
+ engine_flag UnlockedUnowns, 2 ; 3
+ engine_flag UnlockedUnowns, 3 ; 4
+ engine_flag UnlockedUnowns, 4 ; 5
+ engine_flag UnlockedUnowns, 5 ; 6 ; $30
+ engine_flag UnlockedUnowns, 6 ; 7
+ engine_flag UnlockedUnowns, 7 ; 8
; fly
- dwb VisitedSpawns, %00000001 ; your house
- dwb VisitedSpawns, %00000010 ; viridian pokecenter
- dwb VisitedSpawns, %00000100 ; pallet
- dwb VisitedSpawns, %00001000 ; viridian
- dwb VisitedSpawns, %00010000 ; pewter
- dwb VisitedSpawns, %00100000 ; cerulean ; $38
- dwb VisitedSpawns, %01000000 ; rock tunnel
- dwb VisitedSpawns, %10000000 ; vermilion
- dwb VisitedSpawns + 1, %00000001 ; lavender
- dwb VisitedSpawns + 1, %00000010 ; saffron
- dwb VisitedSpawns + 1, %00000100 ; celadon
- dwb VisitedSpawns + 1, %00001000 ; fuchsia
- dwb VisitedSpawns + 1, %00010000 ; cinnabar
- dwb VisitedSpawns + 1, %00100000 ; indigo plateau ; $40
- dwb VisitedSpawns + 1, %01000000 ; new bark
- dwb VisitedSpawns + 1, %10000000 ; cherrygrove
- dwb VisitedSpawns + 2, %00000001 ; violet
- dwb VisitedSpawns + 2, %00000100 ; azalea
- dwb VisitedSpawns + 2, %00001000 ; cianwood
- dwb VisitedSpawns + 2, %00010000 ; goldenrod
- dwb VisitedSpawns + 2, %00100000 ; olivine
- dwb VisitedSpawns + 2, %01000000 ; ecruteak ; $48
- dwb VisitedSpawns + 2, %10000000 ; mahogany
- dwb VisitedSpawns + 3, %00000001 ; lake of rage
- dwb VisitedSpawns + 3, %00000010 ; blackthorn
- dwb VisitedSpawns + 3, %00000100 ; silver cave
- dwb VisitedSpawns + 3, %00010000 ; unused
-
- dwb wdc9d, %00000001 ; lucky number show
- dwb StatusFlags2, %00001000
-
- dwb DailyFlags, %00000001 ; kurt making balls ; $50
- dwb DailyFlags, %00000010
- dwb DailyFlags, %00000100 ; special wilddata?
- dwb DailyFlags, %00001000 ; time capsule (24h wait)
- dwb DailyFlags, %00010000 ; all fruit trees
- dwb DailyFlags, %00100000 ; shuckle given
- dwb DailyFlags, %01000000 ; goldenrod underground merchant closed
- dwb DailyFlags, %10000000 ; fought in trainer hall today
-
- dwb WeeklyFlags, %00000001 ; mt moon square clefairy ; $58
- dwb WeeklyFlags, %00000010 ; union cave lapras
- dwb WeeklyFlags, %00000100 ; goldenrod underground haircut used
- dwb WeeklyFlags, %00001000 ; goldenrod mall happiness event floor05 person07
- dwb WeeklyFlags, %00010000 ; tea in blues house
- dwb WeeklyFlags, %00100000 ; indigo plateau rival fight
- dwb WeeklyFlags, %01000000 ; move tutor
- dwb WeeklyFlags, %10000000 ; buenas password
-
- dwb SwarmFlags, %00000001 ; $60
- dwb SwarmFlags, %00000010 ; goldenrod dept store sale is on
-
- dwb GameTimerPause, %10000000 ; $62
-
- dwb PlayerGender, %00000001 ; player is female
-
- dwb wdbf3, %00000100 ; have gs ball after kurt examined it
+ engine_flag VisitedSpawns, 0 ; your house
+ engine_flag VisitedSpawns, 1 ; viridian pokecenter
+ engine_flag VisitedSpawns, 2 ; pallet
+ engine_flag VisitedSpawns, 3 ; viridian
+ engine_flag VisitedSpawns, 4 ; pewter
+ engine_flag VisitedSpawns, 5 ; cerulean ; $38
+ engine_flag VisitedSpawns, 6 ; rock tunnel
+ engine_flag VisitedSpawns, 7 ; vermilion
+ engine_flag VisitedSpawns + 1, 0 ; lavender
+ engine_flag VisitedSpawns + 1, 1 ; saffron
+ engine_flag VisitedSpawns + 1, 2 ; celadon
+ engine_flag VisitedSpawns + 1, 3 ; fuchsia
+ engine_flag VisitedSpawns + 1, 4 ; cinnabar
+ engine_flag VisitedSpawns + 1, 5 ; indigo plateau ; $40
+ engine_flag VisitedSpawns + 1, 6 ; new bark
+ engine_flag VisitedSpawns + 1, 7 ; cherrygrove
+ engine_flag VisitedSpawns + 2, 0 ; violet
+ engine_flag VisitedSpawns + 2, 2 ; azalea
+ engine_flag VisitedSpawns + 2, 3 ; cianwood
+ engine_flag VisitedSpawns + 2, 4 ; goldenrod
+ engine_flag VisitedSpawns + 2, 5 ; olivine
+ engine_flag VisitedSpawns + 2, 6 ; ecruteak ; $48
+ engine_flag VisitedSpawns + 2, 7 ; mahogany
+ engine_flag VisitedSpawns + 3, 0 ; lake of rage
+ engine_flag VisitedSpawns + 3, 1 ; blackthorn
+ engine_flag VisitedSpawns + 3, 2 ; silver cave
+ engine_flag VisitedSpawns + 3, 4 ; unused
+
+ engine_flag wLuckyNumberShowFlag, 0 ; lucky number show
+ engine_flag StatusFlags2, 3 ; ????
+
+ engine_flag DailyFlags, 0 ; kurt making balls ; $50
+ engine_flag DailyFlags, 1 ; ????
+ engine_flag DailyFlags, 2 ; special wilddata?
+ engine_flag DailyFlags, 3 ; time capsule (24h wait)
+ engine_flag DailyFlags, 4 ; all fruit trees
+ engine_flag DailyFlags, 5 ; shuckle given
+ engine_flag DailyFlags, 6 ; goldenrod underground merchant closed
+ engine_flag DailyFlags, 7 ; fought in trainer hall today
+
+ engine_flag WeeklyFlags, 0 ; mt moon square clefairy ; $58
+ engine_flag WeeklyFlags, 1 ; union cave lapras
+ engine_flag WeeklyFlags, 2 ; goldenrod underground haircut used
+ engine_flag WeeklyFlags, 3 ; goldenrod mall happiness event floor05 person07
+ engine_flag WeeklyFlags, 4 ; tea in blues house
+ engine_flag WeeklyFlags, 5 ; indigo plateau rival fight
+ engine_flag WeeklyFlags, 6 ; move tutor
+ engine_flag WeeklyFlags, 7 ; buenas password
+
+ engine_flag SwarmFlags, 0 ; $60
+ engine_flag SwarmFlags, 1 ; goldenrod dept store sale is on
+
+ engine_flag GameTimerPause, 7 ; $62
+
+ engine_flag PlayerGender, 0 ; player is female
+
+ engine_flag wCelebiEvent, 2 ; have gs ball after kurt examined it
; rematches
- dwb wDailyRematchFlags, %00000001 ; jack
- dwb wDailyRematchFlags, %00000010 ; huey
- dwb wDailyRematchFlags, %00000100 ; gaven
- dwb wDailyRematchFlags, %00001000 ; beth ; $68
- dwb wDailyRematchFlags, %00010000 ; jose
- dwb wDailyRematchFlags, %00100000 ; reena
- dwb wDailyRematchFlags, %01000000 ; joey
- dwb wDailyRematchFlags, %10000000 ; wade
- dwb wDailyRematchFlags + 1, %00000001 ; ralph
- dwb wDailyRematchFlags + 1, %00000010 ; liz
- dwb wDailyRematchFlags + 1, %00000100 ; anthony
- dwb wDailyRematchFlags + 1, %00001000 ; todd ; $70
- dwb wDailyRematchFlags + 1, %00010000 ; gina
- dwb wDailyRematchFlags + 1, %00100000 ; arnie
- dwb wDailyRematchFlags + 1, %01000000 ; alan
- dwb wDailyRematchFlags + 1, %10000000 ; dana
- dwb wDailyRematchFlags + 2, %00000001 ; chad
- dwb wDailyRematchFlags + 2, %00000010 ; tully
- dwb wDailyRematchFlags + 2, %00000100 ; brent
- dwb wDailyRematchFlags + 2, %00001000 ; tiffany ; $78
- dwb wDailyRematchFlags + 2, %00010000 ; vance
- dwb wDailyRematchFlags + 2, %00100000 ; wilton
- dwb wDailyRematchFlags + 2, %01000000 ; parry
- dwb wDailyRematchFlags + 2, %10000000 ; erin
-
- dwb wDailyPhoneItemFlags, %00000001 ; beverly has nugget
- dwb wDailyPhoneItemFlags, %00000010 ; jose has star piece
- dwb wDailyPhoneItemFlags, %00000100 ; wade has item (see bittable1 $032b-e)
- dwb wDailyPhoneItemFlags, %00001000 ; gina has leaf stone ; $80
- dwb wDailyPhoneItemFlags, %00010000 ; alan has fire stone
- dwb wDailyPhoneItemFlags, %00100000 ; liz has thunderstone
- dwb wDailyPhoneItemFlags, %01000000 ; derek has nugget
- dwb wDailyPhoneItemFlags, %10000000 ; tully has water stone
-
- dwb wDailyPhoneItemFlags + 1, %00000001 ; tiffany has pink bow
- dwb wDailyPhoneItemFlags + 1, %00000010 ; wilton has item (see bittable1 $032f-31)
-
- dwb wDailyPhoneTimeOfDayFlags, %00000001
- dwb wDailyPhoneTimeOfDayFlags, %00000010 ; $88
- dwb wDailyPhoneTimeOfDayFlags, %00000100
- dwb wDailyPhoneTimeOfDayFlags, %00001000
- dwb wDailyPhoneTimeOfDayFlags, %00010000
- dwb wDailyPhoneTimeOfDayFlags, %00100000
- dwb wDailyPhoneTimeOfDayFlags, %01000000
- dwb wDailyPhoneTimeOfDayFlags, %10000000
-
- dwb wDailyPhoneTimeOfDayFlags + 1, %00000001
- dwb wDailyPhoneTimeOfDayFlags + 1, %00000010 ; $90
- dwb wDailyPhoneTimeOfDayFlags + 1, %00000100
- dwb wDailyPhoneTimeOfDayFlags + 1, %00001000
- dwb wDailyPhoneTimeOfDayFlags + 1, %00010000
- dwb wDailyPhoneTimeOfDayFlags + 1, %00100000
- dwb wDailyPhoneTimeOfDayFlags + 1, %01000000
- dwb wDailyPhoneTimeOfDayFlags + 1, %10000000
-
- dwb wDailyPhoneTimeOfDayFlags + 2, %00000001
- dwb wDailyPhoneTimeOfDayFlags + 2, %00000010 ; $98
- dwb wDailyPhoneTimeOfDayFlags + 2, %00000100
- dwb wDailyPhoneTimeOfDayFlags + 2, %00001000
- dwb wDailyPhoneTimeOfDayFlags + 2, %00010000
- dwb wDailyPhoneTimeOfDayFlags + 2, %00100000
- dwb wDailyPhoneTimeOfDayFlags + 2, %01000000
- dwb wDailyPhoneTimeOfDayFlags + 2, %10000000
-
- dwb wd45b, %00000100 ; female player has been transformed into male
-
- dwb SwarmFlags, %00000100 ; dunsparce swarm ; $a0
- dwb SwarmFlags, %00001000 ; yanma swarm
+ engine_flag wDailyRematchFlags, 0 ; jack
+ engine_flag wDailyRematchFlags, 1 ; huey
+ engine_flag wDailyRematchFlags, 2 ; gaven
+ engine_flag wDailyRematchFlags, 3 ; beth ; $68
+ engine_flag wDailyRematchFlags, 4 ; jose
+ engine_flag wDailyRematchFlags, 5 ; reena
+ engine_flag wDailyRematchFlags, 6 ; joey
+ engine_flag wDailyRematchFlags, 7 ; wade
+ engine_flag wDailyRematchFlags + 1, 0 ; ralph
+ engine_flag wDailyRematchFlags + 1, 1 ; liz
+ engine_flag wDailyRematchFlags + 1, 2 ; anthony
+ engine_flag wDailyRematchFlags + 1, 3 ; todd ; $70
+ engine_flag wDailyRematchFlags + 1, 4 ; gina
+ engine_flag wDailyRematchFlags + 1, 5 ; arnie
+ engine_flag wDailyRematchFlags + 1, 6 ; alan
+ engine_flag wDailyRematchFlags + 1, 7 ; dana
+ engine_flag wDailyRematchFlags + 2, 0 ; chad
+ engine_flag wDailyRematchFlags + 2, 1 ; tully
+ engine_flag wDailyRematchFlags + 2, 2 ; brent
+ engine_flag wDailyRematchFlags + 2, 3 ; tiffany ; $78
+ engine_flag wDailyRematchFlags + 2, 4 ; vance
+ engine_flag wDailyRematchFlags + 2, 5 ; wilton
+ engine_flag wDailyRematchFlags + 2, 6 ; parry
+ engine_flag wDailyRematchFlags + 2, 7 ; erin
+
+ engine_flag wDailyPhoneItemFlags, 0 ; beverly has nugget
+ engine_flag wDailyPhoneItemFlags, 1 ; jose has star piece
+ engine_flag wDailyPhoneItemFlags, 2 ; wade has item (see bittable1 $032b-e)
+ engine_flag wDailyPhoneItemFlags, 3 ; gina has leaf stone ; $80
+ engine_flag wDailyPhoneItemFlags, 4 ; alan has fire stone
+ engine_flag wDailyPhoneItemFlags, 5 ; liz has thunderstone
+ engine_flag wDailyPhoneItemFlags, 6 ; derek has nugget
+ engine_flag wDailyPhoneItemFlags, 7 ; tully has water stone
+
+ engine_flag wDailyPhoneItemFlags + 1, 0 ; tiffany has pink bow
+ engine_flag wDailyPhoneItemFlags + 1, 1 ; wilton has item (see bittable1 $032f-31)
+
+ engine_flag wDailyPhoneTimeOfDayFlags, 0
+ engine_flag wDailyPhoneTimeOfDayFlags, 1 ; $88
+ engine_flag wDailyPhoneTimeOfDayFlags, 2
+ engine_flag wDailyPhoneTimeOfDayFlags, 3
+ engine_flag wDailyPhoneTimeOfDayFlags, 4
+ engine_flag wDailyPhoneTimeOfDayFlags, 5
+ engine_flag wDailyPhoneTimeOfDayFlags, 6
+ engine_flag wDailyPhoneTimeOfDayFlags, 7
+
+ engine_flag wDailyPhoneTimeOfDayFlags + 1, 0
+ engine_flag wDailyPhoneTimeOfDayFlags + 1, 1 ; $90
+ engine_flag wDailyPhoneTimeOfDayFlags + 1, 2
+ engine_flag wDailyPhoneTimeOfDayFlags + 1, 3
+ engine_flag wDailyPhoneTimeOfDayFlags + 1, 4
+ engine_flag wDailyPhoneTimeOfDayFlags + 1, 5
+ engine_flag wDailyPhoneTimeOfDayFlags + 1, 6
+ engine_flag wDailyPhoneTimeOfDayFlags + 1, 7
+
+ engine_flag wDailyPhoneTimeOfDayFlags + 2, 0
+ engine_flag wDailyPhoneTimeOfDayFlags + 2, 1 ; $98
+ engine_flag wDailyPhoneTimeOfDayFlags + 2, 2
+ engine_flag wDailyPhoneTimeOfDayFlags + 2, 3
+ engine_flag wDailyPhoneTimeOfDayFlags + 2, 4
+ engine_flag wDailyPhoneTimeOfDayFlags + 2, 5
+ engine_flag wDailyPhoneTimeOfDayFlags + 2, 6
+ engine_flag wDailyPhoneTimeOfDayFlags + 2, 7
+
+ engine_flag wPlayerSpriteSetupFlags, 2 ; female player has been transformed into male
+
+ engine_flag SwarmFlags, 2 ; dunsparce swarm ; $a0
+ engine_flag SwarmFlags, 3 ; yanma swarm
diff --git a/engine/events.asm b/engine/events.asm
index ae28e0c38..961a7f517 100644
--- a/engine/events.asm
+++ b/engine/events.asm
@@ -121,9 +121,9 @@ StartMap: ; 96724
xor a
ld [ScriptRunning], a
ld hl, MapStatus
- ld bc, $3e
+ ld bc, $3e ; 62
call ByteFill
- callba Function113e5
+ callba InitCallReceiveDelay
call ClearJoypad
; fallthrough
; 9673e
@@ -133,25 +133,25 @@ EnterMap: ; 9673e
xor a
ld [wd453], a
ld [wd454], a
- call Function968d1
+ call SetUpFiveStepWildEncounterCooldown
callba RunMapSetupScript
call ClearAllScriptFlags3
- ld a, [$ff9f]
- cp $f7
+ ld a, [hMapEntryMethod]
+ cp MAPSETUP_07
jr nz, .dontset
call SetAll_ScriptFlags3
.dontset
- ld a, [$ff9f]
- cp $f3
+ ld a, [hMapEntryMethod]
+ cp MAPSETUP_RELOADMAP
jr nz, .dontresetpoison
xor a
ld [PoisonStepCount], a
.dontresetpoison
- xor a
- ld [$ff9f], a
+ xor a ; end map entry
+ ld [hMapEntryMethod], a
ld a, 2 ; HandleMap
ld [MapStatus], a
ret
@@ -285,12 +285,12 @@ Function96812: ; 96812
PlayerEvents: ; 9681f
xor a
-
+; If there's already a player event, don't interrupt it.
ld a, [ScriptRunning]
and a
ret nz
- call Function968e4
+ call Dummy_CheckScriptFlags3Bit5 ; This is a waste of time
call CheckTrainerBattle3
jr c, .ok
@@ -298,13 +298,13 @@ PlayerEvents: ; 9681f
call CheckTileEvent
jr c, .ok
- call Function97c30
+ call RunMemScript
jr c, .ok
- call Function968ec
+ call DoMapTrigger
jr c, .ok
- call Function9693a
+ call CheckTimeEvents
jr c, .ok
call OWPlayerInput
@@ -320,7 +320,7 @@ PlayerEvents: ; 9681f
pop af
ld [ScriptRunning], a
- call Function96beb
+ call DoPlayerEvent
ld a, [ScriptRunning]
cp 4
jr z, .ok2
@@ -361,7 +361,7 @@ CheckTileEvent: ; 96874
callba CheckMovingOffEdgeOfMap
jr c, .return4
- call Function2238
+ call CheckWarpTile
jr c, .return6
.bit2
@@ -382,9 +382,9 @@ CheckTileEvent: ; 96874
call CheckBit4_ScriptFlags3
jr z, .ok
- call Function97cc0
+ call RandomEncounter
ret c
- jr .ok
+ jr .ok ; pointless
.ok
xor a
@@ -419,8 +419,8 @@ CheckTileEvent: ; 96874
; 968c7
-Function968c7:: ; 968c7
- ld hl, wd452
+CheckWildEncounterCooldown:: ; 968c7
+ ld hl, wWildEncounterCooldown
ld a, [hl]
and a
ret z
@@ -430,34 +430,34 @@ Function968c7:: ; 968c7
ret
; 968d1
-Function968d1: ; 968d1
+SetUpFiveStepWildEncounterCooldown: ; 968d1
ld a, 5
- ld [wd452], a
+ ld [wWildEncounterCooldown], a
ret
; 968d7
-Function968d7: ; 968d7
+ret_968d7: ; 968d7
ret
-; 968d8
+;968d8
-Function968d8: ; 968d8
- ld a, [wd452]
+SetMinTwoStepWildEncounterCooldown: ; 968d8
+ ld a, [wWildEncounterCooldown]
cp 2
ret nc
ld a, 2
- ld [wd452], a
+ ld [wWildEncounterCooldown], a
ret
; 968e4
-Function968e4: ; 968e4
+Dummy_CheckScriptFlags3Bit5: ; 968e4
call CheckBit5_ScriptFlags3
ret z
- call Function2f3e
+ call ret_2f3e
ret
; 968ec
-Function968ec: ; 968ec
- ld a, [wdc07]
+DoMapTrigger: ; 968ec
+ ld a, [wCurrMapTriggerCount]
and a
jr z, .nope
@@ -468,7 +468,7 @@ Function968ec: ; 968ec
ld e, a
ld d, 0
- ld hl, wdc07 + 1
+ ld hl, wCurrMapTriggerHeaderPointer
ld a, [hli]
ld h, [hl]
ld l, a
@@ -505,23 +505,23 @@ endr
ret
; 9693a
-Function9693a: ; 9693a
- ld a, [InLinkBattle]
+CheckTimeEvents: ; 9693a
+ ld a, [wLinkMode]
and a
jr nz, .nothing
ld hl, StatusFlags2
bit 2, [hl]
- jr z, .asm_96951
+ jr z, .do_daily
- callba Function114a4
- jr c, .elevator
+ callba CheckBugContestTimer
+ jr c, .end_bug_contest
xor a
ret
-.asm_96951
- callba Function11452
- callba Function114e7
+.do_daily
+ callba CheckDailyResetTimer
+ callba CheckPokerusTrick
callba CheckPhoneCall
ret c
@@ -529,7 +529,7 @@ Function9693a: ; 9693a
xor a
ret
-.elevator
+.end_bug_contest
ld a, BANK(BugCatchingContestOverScript)
ld hl, BugCatchingContestOverScript
call CallScript
@@ -537,7 +537,7 @@ Function9693a: ; 9693a
ret
; 96970
-Function96970: ; 96970
+.unused ; 96970
ld a, 8
scf
ret
@@ -582,7 +582,7 @@ CheckAPressOW: ; 96999
ret c
call TryReadSign
ret c
- call Function97c5f
+ call CheckFacingTileEvent
ret c
xor a
ret
@@ -856,7 +856,7 @@ PlayerMovement: ; 96af0
; 96b10
.seven ; 96b10
- call Function968d7 ; empty
+ call ret_968d7 ; mobile
xor a
ld c, a
ret
@@ -898,7 +898,7 @@ PlayerMovement: ; 96af0
CheckMenuOW: ; 96b30
xor a
- ld [$ffa0], a
+ ld [hMenuReturn], a
ld [$ffa1], a
ld a, [hJoyPressed]
@@ -940,9 +940,9 @@ SelectMenuScript: ; 96b5f
StartMenuCallback:
SelectMenuCallback: ; 96b66
- copybytetovar $ffa0
- if_equal %10000000, .Script
- if_equal -1, .Asm
+ copybytetovar hMenuReturn
+ if_equal HMENURETURN_SCRIPT, .Script
+ if_equal HMENURETURN_ASM, .Asm
end
; 96b72
@@ -957,75 +957,85 @@ SelectMenuCallback: ; 96b66
CountStep: ; 96b79
- ld a, [InLinkBattle]
+ ; Don't count steps in link communication rooms.
+ ld a, [wLinkMode]
and a
jr nz, .done
- callba Function90136
- jr c, .setminus1
+ ; If there is a special phone call, don't count the step.
+ callba CheckSpecialPhoneCall
+ jr c, .doscript
- call Function96bd7
- jr c, .setminus1
+ ; If Repel wore off, don't count the step.
+ call DoRepelStep
+ jr c, .doscript
+ ; Count the step for poison and total steps
ld hl, PoisonStepCount
inc [hl]
ld hl, StepCount
inc [hl]
- jr nz, .asm_96b9c
+ ; Every 256 steps, increase the happiness of all your Pokemon.
+ jr nz, .skip_happiness
callba StepHappiness
-.asm_96b9c
+.skip_happiness
+ ; Every 256 steps, offset from the happiness incrementor by 128 steps,
+ ; decrease the hatch counter of all your eggs until you reach the first
+ ; one that is ready to hatch.
ld a, [StepCount]
cp $80
- jr nz, .asm_96bab
+ jr nz, .skip_egg
- callba Function16f3e
- jr nz, .set8
+ callba DoEggStep
+ jr nz, .hatch
-.asm_96bab
+.skip_egg
+ ; Increase the EXP of (both) DayCare Pokemon by 1.
callba DaycareStep
+ ; Every four steps, deal damage to all Poisoned Pokemon
ld hl, PoisonStepCount
ld a, [hl]
cp 4
- jr c, .poisoned
+ jr c, .skip_poison
ld [hl], 0
- callba Function505da
- jr c, .setminus1
+ callba DoPoisonStep
+ jr c, .doscript
-.poisoned
- callba Function97db3
+.skip_poison
+ callba DoBikeStep
.done
xor a
ret
-.setminus1
+.doscript
ld a, -1
scf
ret
-.set8
+.hatch
ld a, 8
scf
ret
; 96bd3
-Function96bd3: ; 96bd3
+.unreferenced: ; 96bd3
ld a, 7
scf
ret
; 96bd7
-Function96bd7: ; 96bd7
- ld a, [wdca1]
+DoRepelStep: ; 96bd7
+ ld a, [wRepelEffect]
and a
ret z
dec a
- ld [wdca1], a
+ ld [wRepelEffect], a
ret nz
ld a, BANK(RepelWoreOffScript)
ld hl, RepelWoreOffScript
@@ -1034,11 +1044,11 @@ Function96bd7: ; 96bd7
ret
; 96beb
-Function96beb: ; 96beb
+DoPlayerEvent: ; 96beb
ld a, [ScriptRunning]
and a
ret z
- cp -1
+ cp -1 ; run script
ret z
cp 10
ret nc
@@ -1059,17 +1069,17 @@ endr
; 96c0c
ScriptPointers96c0c: ; 96c0c
- dbw BANK(Invalid_0x96c2d), Invalid_0x96c2d
- dbw BANK(SeenByTrainerScript), SeenByTrainerScript
- dbw BANK(TalkToTrainerScript), TalkToTrainerScript
- dbw BANK(FindItemInBallScript), FindItemInBallScript
- dbw BANK(UnknownScript_0x96c4d), UnknownScript_0x96c4d
- dbw BANK(WarpToNewMapScript), WarpToNewMapScript
- dbw BANK(FallIntoMapScript), FallIntoMapScript
- dbw BANK(UnknownScript_0x124c8), UnknownScript_0x124c8
- dbw BANK(HatchEggScript), HatchEggScript
- dbw BANK(UnknownScript_0x96c4f), UnknownScript_0x96c4f
- dbw BANK(Invalid_0x96c2d), Invalid_0x96c2d
+ dba Invalid_0x96c2d
+ dba SeenByTrainerScript
+ dba TalkToTrainerScript
+ dba FindItemInBallScript
+ dba UnknownScript_0x96c4d
+ dba WarpToNewMapScript
+ dba FallIntoMapScript
+ dba UnknownScript_0x124c8
+ dba HatchEggScript
+ dba UnknownScript_0x96c4f
+ dba Invalid_0x96c2d
; 96c2d
Invalid_0x96c2d: ; 96c2d
@@ -1087,16 +1097,16 @@ HatchEggScript: ; 96c2f
WarpToNewMapScript: ; 96c34
warpsound
- newloadmap $f5
+ newloadmap MAPSETUP_05
end
; 96c38
FallIntoMapScript: ; 96c38
- newloadmap $f6
+ newloadmap MAPSETUP_06
playsound SFX_KINESIS
applymovement PLAYER, MovementData_0x96c48
playsound SFX_STRENGTH
- scall UnknownScript_0x96c4a
+ scall LandAfterPitfallScript
end
; 96c48
@@ -1105,7 +1115,7 @@ MovementData_0x96c48: ; 96c48
step_end
; 96c4a
-UnknownScript_0x96c4a: ; 96c4a
+LandAfterPitfallScript: ; 96c4a
earthquake 16
end
; 96c4d
diff --git a/engine/events_2.asm b/engine/events_2.asm
index 019894298..966fa7d20 100644
--- a/engine/events_2.asm
+++ b/engine/events_2.asm
@@ -8,33 +8,39 @@ WarpToSpawnPoint:: ; 97c28
ret
; 97c30
-Function97c30:: ; 97c30
- ld a, [wd45c]
+RunMemScript:: ; 97c30
+; If there is no script here, we don't need to be here.
+ ld a, [wMapReentryScriptQueueFlag]
and a
ret z
- ld hl, wd45c + 2
+; Execute the script at (wMapReentryScriptBank):(wMapReentryScriptAddress).
+ ld hl, wMapReentryScriptAddress
ld a, [hli]
ld h, [hl]
ld l, a
- ld a, [wd45c + 1]
+ ld a, [wMapReentryScriptBank]
call CallScript
scf
+; Clear the buffer for the next script.
push af
xor a
- ld hl, wd45c
+ ld hl, wMapReentryScriptQueueFlag
ld bc, 8
call ByteFill
pop af
ret
; 97c4f
-Function97c4f:: ; 97c4f
- ld hl, wd45c
+LoadScriptBDE:: ; 97c4f
+; If there's already a script here, don't overwrite.
+ ld hl, wMapReentryScriptQueueFlag
ld a, [hl]
and a
ret nz
+; Set the flag
ld [hl], 1
inc hl
+; Load the script pointer b:de into (wMapReentryScriptBank):(wMapReentryScriptAddress)
ld [hl], b
inc hl
ld [hl], e
@@ -44,7 +50,7 @@ Function97c4f:: ; 97c4f
ret
; 97c5f
-Function97c5f:: ; 97c5f
+CheckFacingTileEvent:: ; 97c5f
call GetFacingTileCoord
ld [EngineBuffer1], a
ld c, a
@@ -95,92 +101,92 @@ Function97c5f:: ; 97c5f
; 97cc0
-Function97cc0:: ; 97cc0
-; Rock Smash encounter
+RandomEncounter:: ; 97cc0
+; Random encounter
- call Function968c7
- jr c, .asm_97ce2
- call Function97cfd
- jr nc, .asm_97ce2
+ call CheckWildEncounterCooldown
+ jr c, .nope
+ call CanUseSweetScent
+ jr nc, .nope
ld hl, StatusFlags2
bit 2, [hl]
- jr nz, .asm_97cdb
+ jr nz, .bug_contest
callba TryWildEncounter
- jr nz, .asm_97ce2
- jr .asm_97ce6
+ jr nz, .nope
+ jr .ok
-.asm_97cdb
- call Function97d23
- jr nc, .asm_97ce2
- jr .asm_97ced
+.bug_contest
+ call _TryWildEncounter_BugContest
+ jr nc, .nope
+ jr .ok_bug_contest
-.asm_97ce2
+.nope
ld a, 1
and a
ret
-.asm_97ce6
- ld a, BANK(RockSmashBattleScript)
- ld hl, RockSmashBattleScript
- jr .asm_97cf4
+.ok
+ ld a, BANK(WildBattleScript)
+ ld hl, WildBattleScript
+ jr .done
-.asm_97ced
+.ok_bug_contest
ld a, BANK(BugCatchingContestBattleScript)
ld hl, BugCatchingContestBattleScript
- jr .asm_97cf4
+ jr .done
-.asm_97cf4
+.done
call CallScript
scf
ret
; 97cf9
-RockSmashBattleScript: ; 97cf9
+WildBattleScript: ; 97cf9
battlecheck
startbattle
returnafterbattle
end
; 97cfd
-Function97cfd:: ; 97cfd
+CanUseSweetScent:: ; 97cfd
ld hl, StatusFlags
bit 5, [hl]
- jr nz, .asm_97d21
+ jr nz, .no
ld a, [wPermission]
cp $4
- jr z, .asm_97d17
+ jr z, .ice_check
cp $7
- jr z, .asm_97d17
+ jr z, .ice_check
callba Function149dd
- jr nc, .asm_97d21
+ jr nc, .no
-.asm_97d17
+.ice_check
ld a, [StandingTile]
call CheckIceTile
- jr z, .asm_97d21
+ jr z, .no
scf
ret
-.asm_97d21
+.no
and a
ret
; 97d23
-Function97d23: ; 97d23
+_TryWildEncounter_BugContest: ; 97d23
call TryWildEncounter_BugContest
ret nc
- call Function97d31
+ call ChooseWildEncounter_BugContest
callba CheckRepelEffect
ret
; 97d31
-Function97d31:: ; 97d31
+ChooseWildEncounter_BugContest:: ; 97d31
; Pick a random mon out of ContestMons.
-.asm_97d31
+.loop
call Random
cp 100 << 1
- jr nc, .asm_97d31
+ jr nc, .loop
srl a
ld hl, ContestMons
@@ -232,10 +238,10 @@ TryWildEncounter_BugContest: ; 97d64
ld a, [StandingTile]
call CheckSuperTallGrassTile
ld b, $66
- jr z, .asm_97d70
+ jr z, .ok
ld b, $33
-.asm_97d70
+.ok
callba ApplyMusicEffectOnEncounterRate
callba ApplyCleanseTagEffectOnEncounterRate
call Random
@@ -262,46 +268,60 @@ ContestMons: ; 97d87
db -1, VENOMOTH, 30, 40
; 97db3
-Function97db3:: ; 97db3
+DoBikeStep:: ; 97db3
nop
nop
- ; fallthrough
-; 97db5
-
-Function97db5: ; 97db5
+ ; If the bike shop owner doesn't have our number, or
+ ; if we've already gotten the call, we don't have to
+ ; be here.
ld hl, StatusFlags2
bit 4, [hl]
jr z, .NoCall
+
+ ; If we're not on the bike, we don't have to be here.
ld a, [PlayerState]
- cp 1
+ cp PLAYER_BIKE
jr nz, .NoCall
+
+ ; If we're not in an area of phone service, we don't
+ ; have to be here.
call GetMapHeaderPhoneServiceNybble
and a
jr nz, .NoCall
- ld hl, wdca1 + 1
+
+ ; Check the bike step count and check whether we've
+ ; taken 65536 of them yet.
+ ld hl, wBikeStep
ld a, [hli]
ld d, a
ld e, [hl]
- cp -1
- jr nz, .asm_97dd8
+ cp 255
+ jr nz, .increment
ld a, e
- cp -1
- jr z, .asm_97ddc
+ cp 255
+ jr z, .dont_increment
-.asm_97dd8
+.increment
inc de
ld [hl], e
dec hl
ld [hl], d
-.asm_97ddc
+.dont_increment
+ ; If we've taken at least 1024 steps, have the bike
+ ; shop owner try to call us.
ld a, d
- cp $4
+ cp 1024 >> 8
jr c, .NoCall
+
+ ; If a call has already been queued, don't overwrite
+ ; that call.
ld a, [wSpecialPhoneCallID]
and a
jr nz, .NoCall
- ld a, 6
+
+ ; Queue the call.
+ ld a, SPECIALCALL_BIKESHOP
ld [wSpecialPhoneCallID], a
xor a
ld [wSpecialPhoneCallID + 1], a
@@ -488,7 +508,7 @@ Function97eb7: ; 97eb7
; 97eb8
Function97eb8: ; 97eb8
- call Function2f3e
+ call ret_2f3e
ret
; 97ebc
diff --git a/engine/fruit_trees.asm b/engine/fruit_trees.asm
index 9404a5564..9002404fd 100644
--- a/engine/fruit_trees.asm
+++ b/engine/fruit_trees.asm
@@ -58,7 +58,7 @@ CheckFruitTree: ; 44055
; 4405f
PickedFruitTree: ; 4405f
- callba Function10609b ; empty function
+ callba MobileFn_10609b ; empty function
ld b, 1
jp GetFruitTreeFlag
; 4406a
diff --git a/engine/map_objects.asm b/engine/map_objects.asm
index 888952ab8..d73ebd142 100644
--- a/engine/map_objects.asm
+++ b/engine/map_objects.asm
@@ -1499,7 +1499,7 @@ Function4af0: ; 4af0
add hl, bc
ld [hl], 2
ld hl, wd4cf
- ld a, [$ffaf]
+ ld a, [hConnectionStripLength]
cp [hl]
jr z, .ok
ld hl, OBJECT_09
@@ -2196,7 +2196,7 @@ Function4ecd: ; 4ecd
add hl, bc
ld a, [hl]
ld b, a
- callba Function807e
+ callba CopyDECoordsToMapObject
pop bc
ld hl, OBJECT_FLAGS
add hl, bc
@@ -2508,7 +2508,7 @@ Function54b8: ; 54b8
ret z
ld a, [wd4cd]
ld d, a
- ld a, [$ffaf]
+ ld a, [hConnectionStripLength]
cp d
ret nz
ld a, e
@@ -2651,7 +2651,7 @@ Function5565: ; 5565
Function5579: ; 5579
push bc
- ld a, [$ffaf]
+ ld a, [hConnectionStripLength]
ld c, a
call Function5582
pop bc
@@ -2712,7 +2712,7 @@ Function55b9: ; 55b9
ld [hli], a
ld a, [de]
ld [hli], a
- ld a, [$ffaf]
+ ld a, [hConnectionStripLength]
ld [hli], a
push hl
ld hl, OBJECT_MAP_X
@@ -2737,7 +2737,7 @@ Function55e0:: ; 55e0
ld bc, ObjectStructs
xor a
.loop
- ld [$ffaf], a
+ ld [hConnectionStripLength], a
call GetObjectSprite
jr z, .ok
call Function565c
@@ -2747,7 +2747,7 @@ Function55e0:: ; 55e0
add hl, bc
ld b, h
ld c, l
- ld a, [$ffaf]
+ ld a, [hConnectionStripLength]
inc a
cp NUM_OBJECT_STRUCTS
jr nz, .loop
@@ -2801,13 +2801,13 @@ Function5645: ; 5645
xor a
ld bc, ObjectStructs
.loop
- ld [$ffaf], a
+ ld [hConnectionStripLength], a
call Function5680
ld hl, OBJECT_STRUCT_LENGTH
add hl, bc
ld b, h
ld c, l
- ld a, [$ffaf]
+ ld a, [hConnectionStripLength]
inc a
cp NUM_OBJECT_STRUCTS
jr nz, .loop
@@ -3032,7 +3032,7 @@ Function5781: ; 5781
ld bc, ObjectStructs
xor a
.loop
- ld [$ffaf], a
+ ld [hConnectionStripLength], a
call GetObjectSprite
jr z, .next
call Function437b
@@ -3042,7 +3042,7 @@ Function5781: ; 5781
add hl, bc
ld b, h
ld c, l
- ld a, [$ffaf]
+ ld a, [hConnectionStripLength]
inc a
cp NUM_OBJECT_STRUCTS
jr nz, .loop
@@ -3064,7 +3064,7 @@ Function579d: ; 579d
; 57bc
Function57bc: ; 57bc
- ld hl, wd45b
+ ld hl, wPlayerSpriteSetupFlags
bit 7, [hl]
jr nz, .ok
ret
@@ -3076,10 +3076,10 @@ Function57bc: ; 57bc
; 57ca
Function57ca: ; 57ca
- ld hl, wd45b
+ ld hl, wPlayerSpriteSetupFlags
bit 5, [hl]
ret z
- ld a, [wd45b]
+ ld a, [wPlayerSpriteSetupFlags]
and 3
rept 2
add a
@@ -3137,7 +3137,7 @@ Function5803:: ; 5803
Function5815: ; 5815
call Function18de
ret c
- ld a, [$ffb0]
+ ld a, [hConnectedMapWidth]
ld [wd4cd], a
ret
; 581f
@@ -3166,7 +3166,7 @@ Function582c: ; 582c
ld hl, OBJECT_09
add hl, bc
ld [hl], 0
- ld a, [$ffb0]
+ ld a, [hConnectedMapWidth]
ld [wd4ce], a
ret
; 5847
diff --git a/engine/map_setup.asm b/engine/map_setup.asm
index 9ac712872..8b1e3a7fe 100644
--- a/engine/map_setup.asm
+++ b/engine/map_setup.asm
@@ -1,6 +1,6 @@
RunMapSetupScript:: ; 15363
- ld a, [$ff9f]
+ ld a, [hMapEntryMethod]
and $f
dec a
ld c, a
@@ -31,57 +31,6 @@ MapSetupScripts: ; 15377
dw MapSetupScript12
; 1538f
-
-; Command descriptions from Condensation water's scripting compendium.
- const_def
- const map_lcd_on ; 00 = Turn LCD on
- const map_lcd_off ; 01 = Turn LCD off
- const map_sound_off ; 02 = Turn speakers off
- const map_music ; 03 = Music check for current map/ special check for bug catcher contest
- const map_start_music ; 04 = Start map music anew
- const map_fade_music ; 05 = Music check for current map / special check for Bug Contest/ music with FadeOut (old) and FadeIn
- const map_fade ; 06 = Fade out music + screen
- const map_bike_music ; 07 = If HIRO is on bike = bike music, else play map music
- const map_music_force ; 08 = Play map music
- const map_max_volume ; 09 = Turn music to highest volume
- const map_load_blocks ; 0A = Write map data to MapRAM
- const map_connection_blocks ; 0B = Compute map’s connection pars and write into MapRAM
- const map_save_screen ; 0C = Write current part of map into temporary memory
- const map_buffer_screen ; 0D = Write current part of map into read-from memory
- const map_load_graphics ; 0E = Write tileset header to ram/ load tileset/ load sprite tiles/ load special tiles
- const map_load_tileset_header ; 0F = Write tileset header to ram
- const map_time_of_day ; 10 = Compute time of day/ Update screen
- const map_palettes ; 11 = Load map palettes
- const map_wildmons ; 12 = Load probabilities for wild Pokémon battles
- const map_sprites ; 13 = Delete sprite data and draw new sprites
- const map_change_callback ; 14 = Check 2nd script header for 05 and 03 callbacks
- const map_start_callback ; 15 = Check 2nd script header for 03 callbacks
- const map_load_objects ; 16 = Analyze people data anew and check 2nd script header for 02 callbacks
- const map_load_spawn ; 17 = Writes arrival data for arrival by flying/Blackout from table 05:5319 to ram
- const map_load_connection ; 18 = Writes arrival data for entering a map by connection to ram
- const map_load_warp ; 19 = Write warp data to ram when entering warp
- const map_attributes ; 1A = Load complete map data (primary, secondary, event, script headers)
- const map_attributes_2 ; 1B = Same as 1A, but some settings aren’t loaded new from the rom, such as hide function of the people events
- const map_clear_bg_palettes ; 1C = Fill palette data with FFFF (=white)
- const map_fade_out_palettes ; 1D = All BG pallet color are converted to 0|0 (Pal0, Col0), all sprite colors to x|0 (FadeOut)
- const map_fade_in_palettes ; 1E = Palette FadeIn
- const map_anchor_screen ; 1F = Compute position of upper left-most block visible on screen
- const map_warp_face ; 20 = Position computation when HIRO leaves a warp
- const map_face_down ; 21 = Set HIRO’s facing to “down”
- const map_spawn_coord ; 22 = Prepare HIRO data for arrival by flight
- const map_player_coord ; 23 = Compute HIRO x/y data anew
- const map_prolong_sprites ; 24 = Prolong old sprites before removing them
- const map_delay_sprites ; 25 = Delay rendering new sprites
- const map_update_roam ; 26 = Compute chances to meet Raikou, Entei or Suicune
- const map_keep_roam ; 27 = Recover chances to meet Raikou, Entei or Suicune
- const map_fade_out_music ; 28 = Temporarily stop music playing
- const map_animations_on ; 29 = Activate animations
- const map_animations_off ; 2A = Deactivate animations
- const map_keep_palettes ; 2B = Recover all palettes
- const map_text_scroll_off ; 2C = Turn off text scroll (for town name overlays)
- const map_stop_script ; 2D = Deactivate code prolonging
-
-
MapSetupScript4: ; 1538f
db map_prolong_sprites
@@ -112,7 +61,7 @@ MapSetupScript1: ; 15392
db map_fade_in_palettes
db map_animations_on
db map_wildmons
- db -1
+ db map_end_setup_script
MapSetupScript11: ; 153a9
db map_load_spawn
@@ -136,7 +85,7 @@ MapSetupScript11: ; 153a9
db map_fade_in_palettes
db map_animations_on
db map_wildmons
- db -1
+ db map_end_setup_script
MapSetupScript7: ; 153bf
db map_animations_off
@@ -155,7 +104,7 @@ MapSetupScript7: ; 153bf
db map_wildmons
db map_update_roam
db map_animations_on
- db -1
+ db map_end_setup_script
MapSetupScript6: ; 153d0
db map_prolong_sprites
@@ -184,7 +133,7 @@ MapSetupScript9: ; 153d2
db map_animations_on
db map_wildmons
db map_update_roam
- db -1
+ db map_end_setup_script
MapSetupScript3: ; 153e7
db map_fade
@@ -202,7 +151,7 @@ MapSetupScript3: ; 153e7
db map_fade_in_palettes
db map_animations_on
db map_wildmons
- db -1
+ db map_end_setup_script
MapSetupScript8: ; 153f7
db map_fade
@@ -221,7 +170,7 @@ MapSetupScript8: ; 153f7
db map_animations_on
db map_wildmons
db map_text_scroll_off
- db -1
+ db map_end_setup_script
MapSetupScript2: ; 15408
db map_lcd_off
@@ -241,12 +190,12 @@ MapSetupScript2: ; 15408
db map_fade_in_palettes
db map_animations_on
db map_wildmons
- db -1
+ db map_end_setup_script
MapSetupScript10: ; 1541a
db map_load_blocks
db map_connection_blocks
- db -1
+ db map_end_setup_script
ReadMapSetupScript: ; 1541d
@@ -374,13 +323,13 @@ Function154ea: ; 154ea
; 154eb
DelayClearingOldSprites: ; 154eb
- ld hl, wd45b
+ ld hl, wPlayerSpriteSetupFlags
set 7, [hl]
ret
; 154f1
DelayLoadingNewSprites: ; 154f1
- ld hl, wd45b
+ ld hl, wPlayerSpriteSetupFlags
set 6, [hl]
ret
diff --git a/engine/more_phone_scripts.asm b/engine/more_phone_scripts.asm
index a2192514e..5bc1f1560 100644
--- a/engine/more_phone_scripts.asm
+++ b/engine/more_phone_scripts.asm
@@ -1656,5 +1656,5 @@ UnknownScript_0xa0b04:
BikeShopPhoneScript:
farwritetext UnknownText_0x174000
clearflag ENGINE_BIKE_SHOP_CALL_ENABLED
- specialphonecall ELMCALL_NONE
+ specialphonecall SPECIALCALL_NONE
end
diff --git a/engine/pack.asm b/engine/pack.asm
index 84413e1cb..ecdb35c74 100644
--- a/engine/pack.asm
+++ b/engine/pack.asm
@@ -4,8 +4,8 @@ Pack: ; 10000
set 4, [hl]
call Function1068a
.loop
- call Functiona57
- ld a, [wcf63]
+ call JoyTextDelay
+ ld a, [wJumptableIndex]
bit 7, a
jr nz, .done
call Function10026
@@ -21,7 +21,7 @@ Pack: ; 10000
; 10026
Function10026: ; 10026
- ld a, [wcf63]
+ ld a, [wJumptableIndex]
ld hl, Jumptable_10030
call Function1086b
jp [hl]
@@ -47,31 +47,31 @@ Function10046: ; 10046 (4:4046)
ld [hBGMapMode], a ; $ff00+$d4
call Function10955
ld a, [wcf64]
- ld [wcf63], a
+ ld [wJumptableIndex], a
call Function10a40
ret
Function10056: ; 10056 (4:4056)
xor a
ld [wcf65], a
- call Function10a36
- call Function109bb
- call Function1089a
+ call ClearPocketList
+ call DrawPocketName
+ call WaitBGMap_DrawPackGFX
call Function10866
ret
Function10067: ; 10067 (4:4067)
ld hl, MenuDataHeader_0x10a4f
call CopyMenuDataHeader
- ld a, [wd0d9]
- ld [wcf88], a
+ ld a, [wItemsPocketCursor]
+ ld [wPocketCursorBuffer], a
ld a, [wd0df]
ld [wd0e4], a
call Function350c
ld a, [wd0e4]
ld [wd0df], a
ld a, [wcfa9]
- ld [wd0d9], a
+ ld [wItemsPocketCursor], a
ld b, $7
ld c, $3
call Function108d4
@@ -82,24 +82,24 @@ Function10067: ; 10067 (4:4067)
Function10094: ; 10094 (4:4094)
ld a, $2
ld [wcf65], a
- call Function10a36
- call Function109bb
- call Function1089a
+ call ClearPocketList
+ call DrawPocketName
+ call WaitBGMap_DrawPackGFX
call Function10866
ret
Function100a6: ; 100a6 (4:40a6)
ld hl, MenuDataHeader_0x10a7f
call CopyMenuDataHeader
- ld a, [wd0da]
- ld [wcf88], a
+ ld a, [wKeyItemsPocketCursor]
+ ld [wPocketCursorBuffer], a
ld a, [wd0e0]
ld [wd0e4], a
call Function350c
ld a, [wd0e4]
ld [wd0e0], a
ld a, [wcfa9]
- ld [wd0da], a
+ ld [wKeyItemsPocketCursor], a
ld b, $3
ld c, $7
call Function108d4
@@ -110,11 +110,11 @@ Function100a6: ; 100a6 (4:40a6)
Function100d3: ; 100d3 (4:40d3)
ld a, $3
ld [wcf65], a
- call Function10a36
- call Function109bb
+ call ClearPocketList
+ call DrawPocketName
xor a
ld [hBGMapMode], a ; $ff00+$d4
- call Function1089a
+ call WaitBGMap_DrawPackGFX
call Function10866
ret
@@ -125,7 +125,7 @@ Function100e8: ; 100e8 (4:40e8)
call Function108d4
ret c
callba _CheckTossableItem
- ld a, [wd142]
+ ld a, [wItemAttributeParamBuffer]
and a
jr nz, .asm_1010a
ld hl, MenuDataHeader_0x1013b
@@ -205,31 +205,31 @@ Function10159: ; 10159
xor a
ld [hBGMapMode], a ; $ff00+$d4
call Function10955
- call Function1089a
+ call WaitBGMap_DrawPackGFX
call Function10a40
ret
Function10186: ; 10186 (4:4186)
ld a, $1
ld [wcf65], a
- call Function10a36
- call Function109bb
- call Function1089a
+ call ClearPocketList
+ call DrawPocketName
+ call WaitBGMap_DrawPackGFX
call Function10866
ret
Function10198: ; 10198 (4:4198)
ld hl, MenuDataHeader_0x10aaf
call CopyMenuDataHeader
- ld a, [wd0db]
- ld [wcf88], a
+ ld a, [wBallsPocketCursor]
+ ld [wPocketCursorBuffer], a
ld a, [wd0e1]
ld [wd0e4], a
call Function350c
ld a, [wd0e4]
ld [wd0e1], a
ld a, [wcfa9]
- ld [wd0db], a
+ ld [wBallsPocketCursor], a
ld b, $1
ld c, $5
call Function108d4
@@ -239,54 +239,62 @@ Function10198: ; 10198 (4:4198)
Function101c5: ; 101c5 (4:41c5)
callba _CheckTossableItem
- ld a, [wd142]
+ ld a, [wItemAttributeParamBuffer]
and a
- jr nz, .asm_101f9
+ jr nz, .tossable
callba CheckSelectableItem
- ld a, [wd142]
+ ld a, [wItemAttributeParamBuffer]
and a
- jr nz, .asm_101eb
+ jr nz, .selectable
callba CheckItemMenu
- ld a, [wd142]
+ ld a, [wItemAttributeParamBuffer]
and a
- jr nz, .asm_10207
- jr .asm_10227
-.asm_101eb
+ jr nz, .usable
+ jr .unusable
+
+.selectable
callba CheckItemMenu
- ld a, [wd142]
+ ld a, [wItemAttributeParamBuffer]
and a
- jr nz, .asm_1020f
- jr .asm_1022f
-.asm_101f9
+ jr nz, .selectable_usable
+ jr .selectable_unusable
+
+.tossable
callba CheckSelectableItem
- ld a, [wd142]
+ ld a, [wItemAttributeParamBuffer]
and a
- jr nz, .asm_10217
- jr .asm_1021f
-.asm_10207
+ jr nz, .tossable_selectable
+ jr .tossable_unselectable
+
+.usable
ld hl, MenuDataHeader_0x10249
ld de, Jumptable_1026a
- jr .asm_10235
-.asm_1020f
+ jr .build_menu
+
+.selectable_usable
ld hl, MenuDataHeader_0x10274
ld de, Jumptable_10291
- jr .asm_10235
-.asm_10217
+ jr .build_menu
+
+.tossable_selectable
ld hl, MenuDataHeader_0x10299
ld de, Jumptable_102ac
- jr .asm_10235
-.asm_1021f
+ jr .build_menu
+
+.tossable_unselectable
ld hl, MenuDataHeader_0x102b0
ld de, Jumptable_102c7
- jr .asm_10235
-.asm_10227
+ jr .build_menu
+
+.unusable
ld hl, MenuDataHeader_0x102cd
ld de, Jumptable_102ea
- jr .asm_10235
-.asm_1022f
+ jr .build_menu
+
+.selectable_unusable
ld hl, MenuDataHeader_0x102f2
ld de, Jumptable_1030b
-.asm_10235
+.build_menu
push de
call LoadMenuDataHeader
call InterpretMenu2
@@ -350,7 +358,7 @@ Jumptable_10291: ; 10291
; 10299
MenuDataHeader_0x10299: ; 0x10299
- db $40 ; flags
+ db %01000000 ; flags
db 07, 13 ; start coords
db 11, 19 ; end coords
dw MenuData2_0x102a1
@@ -370,7 +378,7 @@ Jumptable_102ac: ; 102ac
; 102b0
MenuDataHeader_0x102b0: ; 0x102b0
- db $40 ; flags
+ db %01000000 ; flags
db 05, 13 ; start coords
db 11, 19 ; end coords
dw MenuData2_0x102b8
@@ -439,54 +447,54 @@ Jumptable_1030b: ; 1030b
Function10311: ; 10311
callba CheckItemMenu
- ld a, [wd142]
- ld hl, Jumptable_1031f
+ ld a, [wItemAttributeParamBuffer]
+ ld hl, .jumptable
rst JumpTable
ret
; 1031f
-Jumptable_1031f: ; 1031f (4:431f)
- dw Function1032d
- dw Function1032d
- dw Function1032d
- dw Function1032d
- dw Function10334
- dw Function10338
- dw Function10355
+.jumptable: ; 1031f (4:431f)
+ dw .Oak
+ dw .Oak
+ dw .Oak
+ dw .Oak
+ dw .Current
+ dw .Party
+ dw .Field
; 1035c
-Function1032d: ; 1032d (4:432d)
+.Oak: ; 1032d (4:432d)
ld hl, UnknownText_0x10af3
call Function10889
ret
-Function10334: ; 10334 (4:4334)
+.Current: ; 10334 (4:4334)
call DoItemEffect
ret
-Function10338: ; 10338 (4:4338)
+.Party: ; 10338 (4:4338)
ld a, [PartyCount]
and a
- jr z, .asm_1034e
+ jr z, .NoPokemon
call DoItemEffect
xor a
ld [hBGMapMode], a ; $ff00+$d4
call Function10955
- call Function1089a
+ call WaitBGMap_DrawPackGFX
call Function10a40
ret
-.asm_1034e
+.NoPokemon
ld hl, UnknownText_0x10af8
call Function10889
ret
-Function10355: ; 10355 (4:4355)
+.Field: ; 10355 (4:4355)
call DoItemEffect
ld a, [wd0ec]
and a
- jr z, Function1032d
+ jr z, .Oak
ld a, $a
- ld [wcf63], a
+ ld [wJumptableIndex], a
ret
; 10364 (4:4364)
@@ -529,26 +537,26 @@ Function1039d: ; 1039d
.asm_103aa
xor a
- ld [wd0db], a
+ ld [wBallsPocketCursor], a
ld [wd0e1], a
ret
.asm_103b2
xor a
- ld [wd0d9], a
+ ld [wItemsPocketCursor], a
ld [wd0df], a
ret
.asm_103ba
xor a
- ld [wd0da], a
+ ld [wKeyItemsPocketCursor], a
ld [wd0e0], a
ret
; 103c2
Function103c2: ; 103c2
callba CheckSelectableItem
- ld a, [wd142]
+ ld a, [wItemAttributeParamBuffer]
and a
jr nz, .asm_103f6
ld a, [wcf65]
@@ -605,7 +613,7 @@ Function103fd: ; 103fd
call PrintText
jr .asm_10427
.asm_10453
- ld a, [wcf63]
+ ld a, [wJumptableIndex]
push af
ld a, [wcf64]
push af
@@ -618,14 +626,14 @@ Function103fd: ; 103fd
pop af
ld [wcf64], a
pop af
- ld [wcf63], a
+ ld [wJumptableIndex], a
.asm_10475
pop af
ld [Options], a
xor a
ld [hBGMapMode], a ; $ff00+$d4
call Function10955
- call Function1089a
+ call WaitBGMap_DrawPackGFX
call Function10a40
ret
@@ -651,8 +659,8 @@ BattlePack: ; 10493
set 4, [hl]
call Function1068a
.asm_1049b
- call Functiona57
- ld a, [wcf63]
+ call JoyTextDelay
+ ld a, [wJumptableIndex]
bit 7, a
jr nz, .asm_104ad
call Function104b9
@@ -668,7 +676,7 @@ BattlePack: ; 10493
; 104b9
Function104b9: ; 104b9
- ld a, [wcf63]
+ ld a, [wJumptableIndex]
ld hl, Jumptable_104c3
call Function1086b
jp [hl]
@@ -694,31 +702,31 @@ Function104d9: ; 104d9 (4:44d9)
ld [hBGMapMode], a ; $ff00+$d4
call Function10955
ld a, [wcf64]
- ld [wcf63], a
+ ld [wJumptableIndex], a
call Function10a40
ret
Function104e9: ; 104e9 (4:44e9)
xor a
ld [wcf65], a
- call Function10a36
- call Function109bb
- call Function1089a
+ call ClearPocketList
+ call DrawPocketName
+ call WaitBGMap_DrawPackGFX
call Function10866
ret
Function104fa: ; 104fa (4:44fa)
ld hl, MenuDataHeader_0x10a4f
call CopyMenuDataHeader
- ld a, [wd0d9]
- ld [wcf88], a
+ ld a, [wItemsPocketCursor]
+ ld [wPocketCursorBuffer], a
ld a, [wd0df]
ld [wd0e4], a
call Function350c
ld a, [wd0e4]
ld [wd0df], a
ld a, [wcfa9]
- ld [wd0d9], a
+ ld [wItemsPocketCursor], a
ld b, $7
ld c, $3
call Function108d4
@@ -729,24 +737,24 @@ Function104fa: ; 104fa (4:44fa)
Function10527: ; 10527 (4:4527)
ld a, $2
ld [wcf65], a
- call Function10a36
- call Function109bb
- call Function1089a
+ call ClearPocketList
+ call DrawPocketName
+ call WaitBGMap_DrawPackGFX
call Function10866
ret
Function10539: ; 10539 (4:4539)
ld hl, MenuDataHeader_0x10a7f
call CopyMenuDataHeader
- ld a, [wd0da]
- ld [wcf88], a
+ ld a, [wKeyItemsPocketCursor]
+ ld [wPocketCursorBuffer], a
ld a, [wd0e0]
ld [wd0e4], a
call Function350c
ld a, [wd0e4]
ld [wd0e0], a
ld a, [wcfa9]
- ld [wd0da], a
+ ld [wKeyItemsPocketCursor], a
ld b, $3
ld c, $7
call Function108d4
@@ -757,11 +765,11 @@ Function10539: ; 10539 (4:4539)
Function10566: ; 10566 (4:4566)
ld a, $3
ld [wcf65], a
- call Function10a36
- call Function109bb
+ call ClearPocketList
+ call DrawPocketName
xor a
ld [hBGMapMode], a ; $ff00+$d4
- call Function1089a
+ call WaitBGMap_DrawPackGFX
ld hl, UnknownText_0x10b0c
call Function10889
call Function10866
@@ -780,24 +788,24 @@ Function10581: ; 10581 (4:4581)
Function10594: ; 10594 (4:4594)
ld a, $1
ld [wcf65], a
- call Function10a36
- call Function109bb
- call Function1089a
+ call ClearPocketList
+ call DrawPocketName
+ call WaitBGMap_DrawPackGFX
call Function10866
ret
Function105a6: ; 105a6 (4:45a6)
ld hl, MenuDataHeader_0x10aaf
call CopyMenuDataHeader
- ld a, [wd0db]
- ld [wcf88], a
+ ld a, [wBallsPocketCursor]
+ ld [wPocketCursorBuffer], a
ld a, [wd0e1]
ld [wd0e4], a
call Function350c
ld a, [wd0e4]
ld [wd0e1], a
ld a, [wcfa9]
- ld [wd0db], a
+ ld [wBallsPocketCursor], a
ld b, $1
ld c, $5
call Function108d4
@@ -807,18 +815,18 @@ Function105a6: ; 105a6 (4:45a6)
Function105d3: ; 105d3 (4:45d3)
callba CheckItemContext
- ld a, [wd142]
+ ld a, [wItemAttributeParamBuffer]
Function105dc: ; 105dc (4:45dc)
and a
- jr z, .asm_105e7
- ld hl, MenuDataHeader_0x10601
- ld de, Jumptable_10614
- jr .asm_105ed
-.asm_105e7
- ld hl, MenuDataHeader_0x10618
- ld de, Jumptable_10627
-.asm_105ed
+ jr z, .NoUse
+ ld hl, .UsableMenuDataHeader
+ ld de, .UsableJumptable
+ jr .proceed
+.NoUse
+ ld hl, .UnusableMenuDataHeader
+ ld de, .UnusableJumptable
+.proceed
push de
call LoadMenuDataHeader
call InterpretMenu2
@@ -831,113 +839,115 @@ Function105dc: ; 105dc (4:45dc)
jp [hl]
; 10601 (4:4601)
-MenuDataHeader_0x10601: ; 0x10601
+.UsableMenuDataHeader: ; 0x10601
db $40 ; flags
db 07, 13 ; start coords
db 11, 19 ; end coords
- dw MenuData2_0x10609
+ dw .UsableMenuData2
db 1 ; default option
; 0x10609
-MenuData2_0x10609: ; 0x10609
+.UsableMenuData2: ; 0x10609
db $c0 ; flags
db 2 ; items
db "USE@"
db "QUIT@"
; 0x10614
-Jumptable_10614: ; 10614
- dw Function10629
- dw Function10689
+.UsableJumptable: ; 10614
+ dw .Use
+ dw .Quit
; 10618
-MenuDataHeader_0x10618: ; 0x10618
+.UnusableMenuDataHeader: ; 0x10618
db $40 ; flags
db 09, 13 ; start coords
db 11, 19 ; end coords
- dw MenuData2_0x10620
+ dw .UnusableMenuData2
db 1 ; default option
; 0x10620
-MenuData2_0x10620: ; 0x10620
+.UnusableMenuData2: ; 0x10620
db $c0 ; flags
db 1 ; items
db "QUIT@"
; 0x10627
-Jumptable_10627: ; 10627
- dw Function10689
+.UnusableJumptable: ; 10627
+ dw .Quit
; 10629
-Function10629: ; 10629
+.Use: ; 10629
callba CheckItemContext
- ld a, [wd142]
- ld hl, Jumptable_10637
+ ld a, [wItemAttributeParamBuffer]
+ ld hl, .ItemFunctionJumptable
rst JumpTable
ret
-Jumptable_10637: ; 10637 (4:4637)
- dw Function10645
- dw Function10645
- dw Function10645
- dw Function10645
- dw Function1064c
- dw Function10656
- dw Function10671
+.ItemFunctionJumptable: ; 10637 (4:4637)
+ dw .Oak
+ dw .Oak
+ dw .Oak
+ dw .Oak
+ dw .Unused
+ dw .BattleField
+ dw .BattleOnly
-Function10645: ; 10645 (4:4645)
+.Oak: ; 10645 (4:4645)
ld hl, UnknownText_0x10af3
call Function10889
ret
-Function1064c: ; 1064c (4:464c)
+.Unused: ; 1064c (4:464c)
call DoItemEffect
ld a, [wd0ec]
and a
- jr nz, asm_1066c
+ jr nz, .asm_1066c
ret
-Function10656: ; 10656 (4:4656)
+.BattleField: ; 10656 (4:4656)
call DoItemEffect
ld a, [wd0ec]
and a
- jr nz, asm_1067e
+ jr nz, .asm_1067e
xor a
ld [hBGMapMode], a ; $ff00+$d4
call Function10955
- call Function1089a
+ call WaitBGMap_DrawPackGFX
call Function10a40
ret
-asm_1066c: ; 1066c (4:466c)
+
+.asm_1066c: ; 1066c (4:466c)
call WhiteBGMap
- jr asm_1067e
+ jr .asm_1067e
-Function10671: ; 10671 (4:4671)
+.BattleOnly: ; 10671 (4:4671)
call DoItemEffect
ld a, [wd0ec]
and a
- jr z, Function10645
+ jr z, .Oak
cp $2
- jr z, asm_10684
-asm_1067e: ; 1067e (4:467e)
+ jr z, .asm_10684
+.asm_1067e: ; 1067e (4:467e)
ld a, $a
- ld [wcf63], a
+ ld [wJumptableIndex], a
ret
-asm_10684: ; 10684 (4:4684)
+
+.asm_10684: ; 10684 (4:4684)
xor a
ld [wd0ec], a
ret
; 10689 (4:4689)
-Function10689: ; 10689
+.Quit: ; 10689
ret
; 1068a
Function1068a: ; 1068a
xor a
- ld [wcf63], a
+ ld [wJumptableIndex], a
ld a, [wd0d6]
and $3
ld [wcf65], a
@@ -955,7 +965,7 @@ Function1068a: ; 1068a
Function106a5: ; 106a5
xor a
ld [hBGMapMode], a
- ld [wcf63], a
+ ld [wJumptableIndex], a
ld [wcf64], a
ld [wcf65], a
ld [wcf66], a
@@ -974,7 +984,7 @@ Function106be: ; 106be
; 106c7
Function106c7: ; 106c7
- ld a, [wcf63]
+ ld a, [wJumptableIndex]
ld hl, Jumptable_106d1
call Function1086b
jp [hl]
@@ -982,74 +992,74 @@ Function106c7: ; 106c7
Jumptable_106d1: ; 106d1 (4:46d1)
- dw Function106d9
- dw Function1073b
- dw Function106ff
- dw Function10726
+ dw .ItemsPocket
+ dw .BallsPocket
+ dw .KeyItemsPocket
+ dw .TMHMPocket
-Function106d9: ; 106d9 (4:46d9)
+.ItemsPocket: ; 106d9 (4:46d9)
xor a
- call Function10762
+ call InitPocket
ld hl, MenuDataHeader_0x10a67
call CopyMenuDataHeader
- ld a, [wd0d9]
- ld [wcf88], a
+ ld a, [wItemsPocketCursor]
+ ld [wPocketCursorBuffer], a
ld a, [wd0df]
ld [wd0e4], a
call Function350c
ld a, [wd0e4]
ld [wd0df], a
ld a, [wcfa9]
- ld [wd0d9], a
+ ld [wItemsPocketCursor], a
ret
-Function106ff: ; 106ff (4:46ff)
+.KeyItemsPocket: ; 106ff (4:46ff)
ld a, $2
- call Function10762
+ call InitPocket
ld hl, MenuDataHeader_0x10a97
call CopyMenuDataHeader
- ld a, [wd0da]
- ld [wcf88], a
+ ld a, [wKeyItemsPocketCursor]
+ ld [wPocketCursorBuffer], a
ld a, [wd0e0]
ld [wd0e4], a
call Function350c
ld a, [wd0e4]
ld [wd0e0], a
ld a, [wcfa9]
- ld [wd0da], a
+ ld [wKeyItemsPocketCursor], a
ret
-Function10726: ; 10726 (4:4726)
+.TMHMPocket: ; 10726 (4:4726)
ld a, $3
- call Function10762
- call Function1089a
+ call InitPocket
+ call WaitBGMap_DrawPackGFX
callba Function2c76f
ld a, [CurItem]
ld [CurItem], a
ret
-Function1073b: ; 1073b (4:473b)
+.BallsPocket: ; 1073b (4:473b)
ld a, $1
- call Function10762
+ call InitPocket
ld hl, MenuDataHeader_0x10ac7
call CopyMenuDataHeader
- ld a, [wd0db]
- ld [wcf88], a
+ ld a, [wBallsPocketCursor]
+ ld [wPocketCursorBuffer], a
ld a, [wd0e1]
ld [wd0e4], a
call Function350c
ld a, [wd0e4]
ld [wd0e1], a
ld a, [wcfa9]
- ld [wd0db], a
+ ld [wBallsPocketCursor], a
ret
-Function10762: ; 10762 (4:4762)
+InitPocket: ; 10762 (4:4762)
ld [wcf65], a
- call Function10a36
- call Function109bb
- call Function1089a
+ call ClearPocketList
+ call DrawPocketName
+ call WaitBGMap_DrawPackGFX
ret
@@ -1083,10 +1093,10 @@ Function1076f: ; 1076f
ret
.asm_10795
- ld a, [wcf63]
+ ld a, [wJumptableIndex]
dec a
and $3
- ld [wcf63], a
+ ld [wJumptableIndex], a
push de
ld de, SFX_UNKNOWN_62
call PlaySFX
@@ -1095,10 +1105,10 @@ Function1076f: ; 1076f
ret
.asm_107a8
- ld a, [wcf63]
+ ld a, [wJumptableIndex]
inc a
and $3
- ld [wcf63], a
+ ld [wJumptableIndex], a
push de
ld de, SFX_UNKNOWN_62
call PlaySFX
@@ -1112,7 +1122,7 @@ Function107bb: ; 107bb
ld a, [InputType]
or a
jr z, .asm_107ca
- callba Function1de28f
+ callba _DudeAutoInput_RightA
.asm_107ca
call Function107d7
@@ -1124,7 +1134,7 @@ Function107bb: ; 107bb
; 107d7
Function107d7: ; 107d7
- ld a, [wcf63]
+ ld a, [wJumptableIndex]
ld hl, Jumptable_107e1
call Function1086b
jp [hl]
@@ -1157,8 +1167,8 @@ MenuData2_0x107f7: ; 0x107f7
db 5, 8 ; rows, columns
db 2 ; horizontal spacing
dbw 0, OTPartyMons
- dbw BANK(Function24ab4), Function24ab4
- dbw BANK(Function24ac3), Function24ac3
+ dbw BANK(PlaceMenuItemName), PlaceMenuItemName
+ dbw BANK(PlaceMenuItemQuantity), PlaceMenuItemQuantity
dbw BANK(Function244c3), Function244c3
; 10807
@@ -1181,15 +1191,15 @@ MenuData2_0x10816: ; 0x10816
db 5, 8 ; rows, columns
db 1 ; horizontal spacing
dbw 0, OTPartyMon1Exp + 2
- dbw BANK(Function24ab4), Function24ab4
- dbw BANK(Function24ac3), Function24ac3
+ dbw BANK(PlaceMenuItemName), PlaceMenuItemName
+ dbw BANK(PlaceMenuItemQuantity), PlaceMenuItemQuantity
dbw BANK(Function244c3), Function244c3
; 10826
Function10826: ; 10826 (4:4826)
ld a, $3
- call Function10762
- call Function1089a
+ call InitPocket
+ call WaitBGMap_DrawPackGFX
callba Function2c76f
ld a, [CurItem]
ld [CurItem], a
@@ -1214,21 +1224,21 @@ MenuData2_0x1084a: ; 0x1084a
db 5, 8 ; rows, columns
db 2 ; horizontal spacing
dbw 0, OTPartyMon1CaughtGender
- dbw BANK(Function24ab4), Function24ab4
- dbw BANK(Function24ac3), Function24ac3
+ dbw BANK(PlaceMenuItemName), PlaceMenuItemName
+ dbw BANK(PlaceMenuItemQuantity), PlaceMenuItemQuantity
dbw BANK(Function244c3), Function244c3
; 1085a
Function1085a: ; 1085a (4:485a)
push hl
- call Function10762
+ call InitPocket
pop hl
call CopyMenuDataHeader
call Function350c
ret
Function10866: ; 10866 (4:4866)
- ld hl, wcf63
+ ld hl, wJumptableIndex
inc [hl]
ret
@@ -1245,14 +1255,14 @@ endr
; 10874
Function10874: ; 10874 (4:4874)
- ld hl, wcf63
+ ld hl, wJumptableIndex
set 7, [hl]
xor a
ld [wcf66], a
ret
Function1087e: ; 1087e (4:487e)
- ld hl, wcf63
+ ld hl, wJumptableIndex
set 7, [hl]
ld a, $1
ld [wcf66], a
@@ -1268,23 +1278,23 @@ Function10889: ; 10889 (4:4889)
ld [Options], a
ret
-Function1089a: ; 1089a (4:489a)
+WaitBGMap_DrawPackGFX: ; 1089a (4:489a)
call WaitBGMap
-Function1089d: ; 1089d
+DrawPackGFX: ; 1089d
ld a, [wcf65]
and $3
ld e, a
ld d, $0
ld a, [BattleType]
cp BATTLETYPE_TUTORIAL
- jr z, .asm_108b3
+ jr z, .male_dude
ld a, [PlayerGender]
bit 0, a
- jr nz, .asm_108c5
+ jr nz, .female
-.asm_108b3
+.male_dude
ld hl, PackGFXPointers
rept 2
add hl, de
@@ -1292,13 +1302,13 @@ endr
ld a, [hli]
ld e, a
ld d, [hl]
- ld hl, $9500
+ ld hl, VTiles2 tile $50
lb bc, BANK(PackGFX), 15
call Request2bpp
ret
-.asm_108c5
- callba Function48e81
+.female
+ callba DrawKrisPackGFX
ret
; 108cc
@@ -1336,12 +1346,12 @@ Function108d4: ; 108d4 (4:48d4)
ret
.asm_108fa
ld a, $9
- ld [wcf63], a
+ ld [wJumptableIndex], a
scf
ret
.asm_10901
ld a, b
- ld [wcf63], a
+ ld [wJumptableIndex], a
ld [wcf64], a
push de
ld de, SFX_UNKNOWN_62
@@ -1351,7 +1361,7 @@ Function108d4: ; 108d4 (4:48d4)
ret
.asm_10912
ld a, c
- ld [wcf63], a
+ ld [wJumptableIndex], a
ld [wcf64], a
push de
ld de, SFX_UNKNOWN_62
@@ -1412,13 +1422,13 @@ Function10955: ; 10955
inc a
dec c
jr nz, .asm_1098a
- call Function109bb
+ call DrawPocketName
call Function109a5
hlcoord 0, 12
lb bc, 4, 18
call TextBox
call EnableLCD
- call Function1089d
+ call DrawPackGFX
ret
; 109a5
@@ -1440,7 +1450,7 @@ Function109a5: ; 109a5
ret
; 109bb
-Function109bb: ; 109bb
+DrawPocketName: ; 109bb
ld a, [wcf65]
; * 15
@@ -1450,30 +1460,30 @@ Function109bb: ; 109bb
ld d, 0
ld e, a
- ld hl, Tilemap_109e1
+ ld hl, .tilemap
add hl, de
ld d, h
ld e, l
hlcoord 0, 7
ld c, 3
-.asm_109d0
+.row
ld b, 5
-.asm_109d2
+.col
ld a, [de]
inc de
ld [hli], a
dec b
- jr nz, .asm_109d2
+ jr nz, .col
ld a, c
- ld c, 15
+ ld c, SCREEN_WIDTH - 5
add hl, bc
ld c, a
dec c
- jr nz, .asm_109d0
+ jr nz, .row
ret
; 109e1
-Tilemap_109e1: ; 109e1
+.tilemap: ; 109e1
db $00, $04, $04, $04, $01, $06, $07, $08, $09, $0a, $02, $05, $05, $05, $03
db $00, $04, $04, $04, $01, $15, $16, $17, $18, $19, $02, $05, $05, $05, $03
db $00, $04, $04, $04, $01, $0b, $0c, $0d, $0e, $0f, $02, $05, $05, $05, $03
@@ -1491,21 +1501,21 @@ Function10a1d: ; 10a1d
Function10a2a: ; 10a2a
hlcoord 0, 0
ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
- ld a, $7f
+ ld a, " "
call ByteFill
ret
; 10a36
-Function10a36: ; 10a36 (4:4a36)
+ClearPocketList: ; 10a36 (4:4a36)
hlcoord 5, 2
- ld bc, $a0f
+ lb bc, 10, SCREEN_WIDTH - 5
call ClearBox
ret
Function10a40: ; 10a40
call WaitBGMap
- ld b, $14
+ ld b, SCREEN_WIDTH
call GetSGBLayout
call Function32f9
call DelayFrame
@@ -1525,8 +1535,8 @@ MenuData2_0x10a57: ; 0x10a57
db 5, 8 ; rows, columns
db 2 ; horizontal spacing
dbw 0, NumItems
- dbw BANK(Function24ab4), Function24ab4
- dbw BANK(Function24ac3), Function24ac3
+ dbw BANK(PlaceMenuItemName), PlaceMenuItemName
+ dbw BANK(PlaceMenuItemQuantity), PlaceMenuItemQuantity
dbw BANK(Function244c3), Function244c3
; 10a67
@@ -1543,8 +1553,8 @@ MenuData2_0x10a6f: ; 0x10a6f
db 5, 8 ; rows, columns
db 2 ; horizontal spacing
dbw 0, NumItems
- dbw BANK(Function24ab4), Function24ab4
- dbw BANK(Function24ac3), Function24ac3
+ dbw BANK(PlaceMenuItemName), PlaceMenuItemName
+ dbw BANK(PlaceMenuItemQuantity), PlaceMenuItemQuantity
dbw BANK(Function244c3), Function244c3
; 10a7f
@@ -1561,8 +1571,8 @@ MenuData2_0x10a87: ; 0x10a87
db 5, 8 ; rows, columns
db 1 ; horizontal spacing
dbw 0, NumKeyItems
- dbw BANK(Function24ab4), Function24ab4
- dbw BANK(Function24ac3), Function24ac3
+ dbw BANK(PlaceMenuItemName), PlaceMenuItemName
+ dbw BANK(PlaceMenuItemQuantity), PlaceMenuItemQuantity
dbw BANK(Function244c3), Function244c3
; 10a97
@@ -1579,8 +1589,8 @@ MenuData2_0x10a9f: ; 0x10a9f
db 5, 8 ; rows, columns
db 1 ; horizontal spacing
dbw 0, NumKeyItems
- dbw BANK(Function24ab4), Function24ab4
- dbw BANK(Function24ac3), Function24ac3
+ dbw BANK(PlaceMenuItemName), PlaceMenuItemName
+ dbw BANK(PlaceMenuItemQuantity), PlaceMenuItemQuantity
dbw BANK(Function244c3), Function244c3
; 10aaf
@@ -1597,8 +1607,8 @@ MenuData2_0x10ab7: ; 0x10ab7
db 5, 8 ; rows, columns
db 2 ; horizontal spacing
dbw 0, NumBalls
- dbw BANK(Function24ab4), Function24ab4
- dbw BANK(Function24ac3), Function24ac3
+ dbw BANK(PlaceMenuItemName), PlaceMenuItemName
+ dbw BANK(PlaceMenuItemQuantity), PlaceMenuItemQuantity
dbw BANK(Function244c3), Function244c3
; 10ac7
@@ -1615,8 +1625,8 @@ MenuData2_0x10acf: ; 0x10acf
db 5, 8 ; rows, columns
db 2 ; horizontal spacing
dbw 0, NumBalls
- dbw BANK(Function24ab4), Function24ab4
- dbw BANK(Function24ac3), Function24ac3
+ dbw BANK(PlaceMenuItemName), PlaceMenuItemName
+ dbw BANK(PlaceMenuItemQuantity), PlaceMenuItemQuantity
dbw BANK(Function244c3), Function244c3
; 10adf
diff --git a/engine/phone.asm b/engine/phone.asm
new file mode 100644
index 000000000..0ba5cf6e1
--- /dev/null
+++ b/engine/phone.asm
@@ -0,0 +1,884 @@
+AddPhoneNumber:: ; 90000
+ call _CheckCellNum
+ jr c, .cant_add
+ call Phone_FindOpenSlot
+ jr nc, .cant_add
+ ld [hl], c
+ xor a
+ ret
+
+.cant_add
+ scf
+ ret
+; 9000f
+
+
+DelCellNum:: ; 9000f
+ call _CheckCellNum
+ jr nc, .not_in_list
+ xor a
+ ld [hl], a
+ ret
+
+.not_in_list
+ scf
+ ret
+; 90019
+
+CheckCellNum:: ; 90019
+ jp _CheckCellNum ; wtf
+; 9001c
+
+_CheckCellNum: ; 9001c
+ ld hl, wPhoneList
+ ld b, CONTACT_LIST_SIZE
+.loop
+ ld a, [hli]
+ cp c
+ jr z, .got_it
+ dec b
+ jr nz, .loop
+ xor a
+ ret
+
+.got_it
+ dec hl
+ scf
+ ret
+; 9002d
+
+Phone_FindOpenSlot: ; 9002d
+ call GetRemainingSpaceInPhoneList
+ ld b, a
+ ld hl, wPhoneList
+.loop
+ ld a, [hli]
+ and a
+ jr z, .FoundOpenSpace
+ dec b
+ jr nz, .loop
+ xor a
+ ret
+
+.FoundOpenSpace
+ dec hl
+ scf
+ ret
+; 90040
+
+GetRemainingSpaceInPhoneList: ; 90040
+ xor a
+ ld [Buffer1], a
+ ld hl, PermanentNumbers
+.loop
+ ld a, [hli]
+ cp -1
+ jr z, .done
+ cp c
+ jr z, .elm_or_mom
+ push bc
+ push hl
+ ld c, a
+ call _CheckCellNum
+ jr c, .elm_or_mom_in_list
+ ld hl, Buffer1
+ inc [hl]
+
+.elm_or_mom_in_list
+ pop hl
+ pop bc
+
+.elm_or_mom
+ jr .loop
+
+.done
+ ld a, CONTACT_LIST_SIZE
+ ld hl, Buffer1
+ sub [hl]
+ ret
+; 90066
+
+PermanentNumbers: ; 90066
+ db PHONECONTACT_MOM, PHONECONTACT_ELM, -1
+; 90069
+
+
+FarPlaceString: ; 90069
+ ld a, [hROMBank]
+ push af
+ ld a, b
+ rst Bankswitch
+
+ call PlaceString
+
+ pop af
+ rst Bankswitch
+ ret
+; 90074
+
+
+CheckPhoneCall:: ; 90074 (24:4074)
+; Check if the phone is ringing in the overworld.
+
+ call CheckStandingOnEntrance
+ jr z, .no_call
+
+ call .timecheck
+ nop
+ jr nc, .no_call
+
+ call Random
+ ld b, a
+ and 50 percent
+ cp b
+ jr nz, .no_call
+
+ call GetMapHeaderPhoneServiceNybble
+ and a
+ jr nz, .no_call
+
+ call GetAvailableCallers
+ call ChooseRandomCaller
+ jr nc, .no_call
+
+ ld e, a
+ call LoadCallerScript
+ ld a, BANK(Script_ReceivePhoneCall)
+ ld hl, Script_ReceivePhoneCall
+ call CallScript
+ scf
+ ret
+
+.no_call
+ xor a
+ ret
+
+.timecheck: ; 900a6 (24:40a6)
+ callba CheckReceiveCallTimer
+ ret
+
+CheckPhoneContactTimeOfDay: ; 900ad (24:40ad)
+ push hl
+ push bc
+ push de
+ push af
+
+ callba CheckTime
+ pop af
+ and (1 << MORN) + (1 << DAY) + (1 << NITE)
+ and c
+
+ pop de
+ pop bc
+ pop hl
+ ret
+
+ChooseRandomCaller: ; 900bf (24:40bf)
+; If no one is available to call, don't return anything.
+ ld a, [EngineBuffer3]
+ and a
+ jr z, .NothingToSample
+
+; Sample a random number between 0 and 31.
+ ld c, a
+ call Random
+ ld a, [hRandomAdd] ; $ff00+$e1
+ swap a
+ and $1f
+; Compute that number modulo the number of available callers.
+ call SimpleDivide
+; Return the caller ID you just sampled.
+ ld c, a
+ ld b, 0
+ ld hl, EngineBuffer4
+ add hl, bc
+ ld a, [hl]
+ scf
+ ret
+
+.NothingToSample
+ xor a
+ ret
+
+GetAvailableCallers: ; 900de (24:40de)
+ callba CheckTime
+ ld a, c
+ ld [EngineBuffer1], a ; wd03e (aliases: MenuItemsList, CurFruitTree, CurInput)
+ ld hl, EngineBuffer3
+ ld bc, 11
+ xor a
+ call ByteFill
+ ld de, wPhoneList
+ ld a, CONTACT_LIST_SIZE
+
+.loop
+ ld [EngineBuffer2], a
+ ld a, [de]
+ and a
+ jr z, .not_good_for_call
+ ld hl, PhoneContacts + PHONE_CONTACT_SCRIPT2_TIME
+ ld bc, PHONE_TABLE_WIDTH
+ call AddNTimes
+ ld a, [EngineBuffer1] ; wd03e (aliases: MenuItemsList, CurFruitTree, CurInput)
+ and [hl]
+ jr z, .not_good_for_call
+ ld bc, PHONE_CONTACT_MAP_GROUP - PHONE_CONTACT_SCRIPT2_TIME
+ add hl, bc
+ ld a, [MapGroup]
+ cp [hl]
+ jr nz, .different_map
+ inc hl
+ ld a, [MapNumber]
+ cp [hl]
+ jr z, .not_good_for_call
+.different_map
+ ld a, [EngineBuffer3]
+ ld c, a
+ ld b, $0
+ inc a
+ ld [EngineBuffer3], a
+ ld hl, EngineBuffer4
+ add hl, bc
+ ld a, [de]
+ ld [hl], a
+.not_good_for_call
+ inc de
+ ld a, [EngineBuffer2]
+ dec a
+ jr nz, .loop
+ ret
+
+CheckSpecialPhoneCall:: ; 90136 (24:4136)
+ ld a, [wSpecialPhoneCallID]
+ and a
+ jr z, .NoPhoneCall
+
+ dec a
+ ld c, a
+ ld b, 0
+ ld hl, SpecialPhoneCallList
+ ld a, 6
+ call AddNTimes
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ call _hl_
+ jr nc, .NoPhoneCall
+
+ call .DoSpecialPhoneCall
+rept 2
+ inc hl
+endr
+ ld a, [hli]
+ ld e, a
+ push hl
+ call LoadCallerScript
+ pop hl
+ ld de, wd048
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hli]
+ ld [de], a
+ ld a, BANK(.script)
+ ld hl, .script
+ call CallScript
+ scf
+ ret
+.NoPhoneCall
+ xor a
+ ret
+; 90173 (24:4173)
+
+.script: ; 0x90173
+ pause 30
+ jump Script_ReceivePhoneCall
+; 0x90178
+
+.DoSpecialPhoneCall: ; 90178 (24:4178)
+ ld a, [wSpecialPhoneCallID]
+ dec a
+ ld c, a
+ ld b, 0
+ ld hl, SpecialPhoneCallList
+ ld a, 6
+ call AddNTimes
+ ret
+
+SpecialCallOnlyWhenOutside: ; 90188
+ ld a, [wPermission]
+ cp TOWN
+ jr z, .outside
+ cp ROUTE
+ jr z, .outside
+ xor a
+ ret
+
+.outside
+ scf
+ ret
+
+SpecialCallWhereverYouAre: ; 90197
+ scf
+ ret
+
+Function90199: ; 90199 (24:4199)
+ ; Don't do the call if you're in a link communication
+ ld a, [wLinkMode]
+ and a
+ jr nz, .OutOfArea
+ ; If you're in an area without phone service, don't do the call
+ call GetMapHeaderPhoneServiceNybble
+ and a
+ jr nz, .OutOfArea
+ ; If the person can't take a call at that time, don't do the call
+ ld a, b
+ ld [wCurrentCaller], a
+ ld hl, PhoneContacts
+ ld bc, PHONE_TABLE_WIDTH
+ call AddNTimes
+ ld d, h
+ ld e, l
+ ld hl, PHONE_CONTACT_SCRIPT1_TIME
+ add hl, de
+ ld a, [hl]
+ call CheckPhoneContactTimeOfDay
+ jr z, .OutOfArea
+ ; If we're in the same map as the person we're calling,
+ ; use the "Just talk to that person" script.
+ ld hl, PHONE_CONTACT_MAP_GROUP
+ add hl, de
+ ld a, [MapGroup]
+ cp [hl]
+ jr nz, .GetPhoneScript
+ ld hl, PHONE_CONTACT_MAP_NUMBER
+ add hl, de
+ ld a, [MapNumber]
+ cp [hl]
+ jr nz, .GetPhoneScript
+ ld b, BANK(PhoneScript_JustTalkToThem)
+ ld hl, PhoneScript_JustTalkToThem
+ jr .DoPhoneCall
+
+.GetPhoneScript
+ ld hl, PHONE_CONTACT_SCRIPT1_BANK
+ add hl, de
+ ld b, [hl]
+ ld hl, PHONE_CONTACT_SCRIPT1_ADDR_LO
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jr .DoPhoneCall
+
+.OutOfArea
+ ld b, BANK(UnknownScript_0x90209)
+ ld de, UnknownScript_0x90209
+ call ExecuteCallbackScript
+ ret
+
+.DoPhoneCall
+ ld a, b
+ ld [wd002], a
+ ld a, l
+ ld [wd003], a
+ ld a, h
+ ld [wd004], a
+ ld b, BANK(UnknownScript_0x90205)
+ ld de, UnknownScript_0x90205
+ call ExecuteCallbackScript
+ ret
+; 90205 (24:4205)
+
+UnknownScript_0x90205: ; 0x90205
+ ptcall wd002
+ return
+; 0x90209
+
+UnknownScript_0x90209: ; 0x90209
+ scall UnknownScript_0x90657
+ return
+; 0x9020d
+
+LoadCallerScript: ; 9020d (24:420d)
+ nop
+ nop
+ ld a, e
+ ld [wCurrentCaller], a
+ and a
+ jr nz, .actualcaller
+ ld a, BANK(WrongNumber)
+ ld hl, WrongNumber
+ jr .proceed
+
+.actualcaller
+ ld hl, PhoneContacts
+ ld bc, 12
+ ld a, e
+ call AddNTimes
+ ld a, BANK(PhoneContacts)
+.proceed
+ ld de, EngineBuffer2
+ ld bc, 12
+ call FarCopyBytes
+ ret
+; 90233 (24:4233)
+
+WrongNumber: ; 90233
+ db TRAINER_NONE, PHONE_00
+ dba .script
+.script:
+ writetext .text
+ end
+.text:
+ ; Huh? Sorry, wrong number!
+ text_jump UnknownText_0x1c5565
+ db "@"
+; 90241
+
+Script_ReceivePhoneCall: ; 0x90241
+ refreshscreen $0
+ callasm RingTwice_StartCall
+ ptcall wd048
+ closetext
+ callasm HangUp
+ loadmovesprites
+ callasm InitCallReceiveDelay
+ end
+; 0x90255
+
+Script_SpecialBillCall:: ; 0x90255
+ callasm Function9025c
+ jump Script_ReceivePhoneCall
+; 0x9025c
+
+Function9025c: ; 9025c
+ ld e, PHONE_BILL
+ jp LoadCallerScript
+; 90261
+
+UnknownScript_0x90261: ; 0x90261
+ callasm Function9026a
+ pause 30
+ jump Script_ReceivePhoneCall
+; 0x9026a
+
+Function9026a: ; 9026a
+ ld e, PHONE_ELM
+ jp LoadCallerScript
+; 9026f
+
+RingTwice_StartCall: ; 9026f
+ call .Ring
+ call .Ring
+ callba MobileFn_1060d3
+ ret
+; 9027c
+
+.Ring: ; 9027c (24:427c)
+ call Phone_StartRinging
+ call Phone_Wait20Frames
+ call Phone_CallerTextboxWithName
+ call Phone_Wait20Frames
+ call Phone_CallerTextbox
+ call Phone_Wait20Frames
+ call Phone_CallerTextboxWithName
+ ret
+
+Phone_CallerTextboxWithName: ; 90292 (24:4292)
+ ld a, [wCurrentCaller]
+ ld b, a
+ call Function90363
+ ret
+
+
+PhoneCall:: ; 9029a
+ ld a, b
+ ld [PhoneScriptBank], a
+ ld a, e
+ ld [PhoneCallerLo], a
+ ld a, d
+ ld [PhoneCallerHi], a
+ call Phone_FirstOfTwoRings
+ call Phone_FirstOfTwoRings
+ callba MobileFn_1060d3
+ ret
+; 902b3
+
+Phone_FirstOfTwoRings: ; 902b3
+ call Phone_StartRinging
+ call Phone_Wait20Frames
+ call Phone_CallerTextboxWithName2
+ call Phone_Wait20Frames
+ call Phone_CallerTextbox
+ call Phone_Wait20Frames
+ call Phone_CallerTextboxWithName2
+ ret
+; 902c9
+
+Phone_CallerTextboxWithName2: ; 902c9
+ call Phone_CallerTextbox
+ hlcoord 1, 2
+ ld [hl], $62
+rept 2
+ inc hl
+endr
+ ld a, [PhoneScriptBank]
+ ld b, a
+ ld a, [PhoneCallerLo]
+ ld e, a
+ ld a, [PhoneCallerHi]
+ ld d, a
+ call FarPlaceString
+ ret
+; 902e3
+
+
+Phone_NoSignal: ; 902e3 (24:42e3)
+ ld de, SFX_NO_SIGNAL
+ call PlaySFX
+ jr Phone_CallEnd
+
+HangUp:: ; 902eb
+ call HangUp_Beep
+ call HangUp_Wait20Frames
+Phone_CallEnd:
+ call HangUp_BoopOn
+ call HangUp_Wait20Frames
+ call HangUp_BoopOff
+ call HangUp_Wait20Frames
+ call HangUp_BoopOn
+ call HangUp_Wait20Frames
+ call HangUp_BoopOff
+ call HangUp_Wait20Frames
+ call HangUp_BoopOn
+ call HangUp_Wait20Frames
+ call HangUp_BoopOff
+ call HangUp_Wait20Frames
+ ret
+; 90316
+
+Function90316: ; 90316
+ ld de, SFX_SHUT_DOWN_PC
+ call PlaySFX
+ ret
+; 9031d
+
+HangUp_Beep: ; 9031d
+ ld hl, UnknownText_0x9032a
+ call PrintText
+ ld de, SFX_HANG_UP
+ call PlaySFX
+ ret
+; 9032a
+
+UnknownText_0x9032a: ; 9032a
+ text_jump UnknownText_0x1c5580
+ db "@"
+; 9032f
+
+
+HangUp_BoopOn: ; 9032f
+ ld hl, UnknownText_0x90336
+ call PrintText
+ ret
+; 90336
+
+UnknownText_0x90336: ; 0x90336
+ text_jump UnknownText_0x1c5588
+ db "@"
+; 0x9033b
+
+
+HangUp_BoopOff: ; 9033b
+ call SpeechTextBox
+ ret
+; 9033f
+
+Phone_StartRinging: ; 9033f
+ call WaitSFX
+ ld de, SFX_CALL
+ call PlaySFX
+ call Phone_CallerTextbox
+ call UpdateSprites
+ callba Function4d188
+ ret
+; 90355
+
+HangUp_Wait20Frames: ; 90355
+ jr Phone_Wait20Frames
+
+Phone_Wait20Frames
+ ld c, 20
+ call DelayFrames
+ callba Function4d188
+ ret
+; 90363
+
+
+Function90363: ; 90363 (24:4363)
+ push bc
+ call Phone_CallerTextbox
+ hlcoord 1, 1
+ ld [hl], $62
+rept 2
+ inc hl
+endr
+ ld d, h
+ ld e, l
+ pop bc
+ call Function90380
+ ret
+
+
+Phone_CallerTextbox: ; 90375
+ hlcoord 0, 0
+ ld b, 2
+ ld c, SCREEN_WIDTH - 2
+ call TextBox
+ ret
+; 90380
+
+
+Function90380: ; 90380 (24:4380)
+ ld h, d
+ ld l, e
+ ld a, b
+ call GetCallerTrainerClass
+ call GetCallerName
+ ret
+
+Function9038a: ; 9038a (24:438a)
+ ld a, c
+ call GetCallerTrainerClass
+ ld a, c
+ ret nz
+ ld a, b
+ cp $1
+ ret z
+ cp $4
+ ret z
+ ld c, $1
+ ret
+
+GetCallerTrainerClass: ; 9039a
+ push hl
+ ld hl, PhoneContacts + PHONE_CONTACT_TRAINER_CLASS
+ ld bc, PHONE_TABLE_WIDTH
+ call AddNTimes
+ ld a, [hli]
+ ld b, [hl]
+ ld c, a
+ pop hl
+ ret
+; 903a9
+
+
+GetCallerName: ; 903a9 (24:43a9)
+ ld a, c
+ and a
+ jr z, .NotTrainer
+
+ call Phone_GetTrainerName
+ push hl
+ push bc
+ call PlaceString
+ ld a, ":"
+ ld [bc], a
+ pop bc
+ pop hl
+ ld de, SCREEN_WIDTH + 3
+ add hl, de
+ call Phone_GetTrainerClassName
+ call PlaceString
+ ret
+
+.NotTrainer
+ push hl
+ ld c, b
+ ld b, 0
+ ld hl, NonTrainerCallerNames
+rept 2
+ add hl, bc
+endr
+ ld a, [hli]
+ ld e, a
+ ld d, [hl]
+ pop hl
+ call PlaceString
+ ret
+; 903d6 (24:43d6)
+
+NonTrainerCallerNames: ; 903d6
+ dw .none
+ dw .mom
+ dw .bikeshop
+ dw .bill
+ dw .elm
+ dw .buena
+
+.none: db "----------@"
+.mom: db "MOM:@"
+.bill: db "BILL:@"
+.elm: db "PROF.ELM:@"
+.bikeshop: db "BIKE SHOP:@"
+.buena: db "BUENA:", $22, " DISC JOCKEY@"
+; 90423
+
+Phone_GetTrainerName: ; 90423 (24:4423)
+ push hl
+ push bc
+ callba GetTrainerName
+ pop bc
+ pop hl
+ ret
+
+Phone_GetTrainerClassName: ; 9042e (24:442e)
+ push hl
+ push bc
+ callba GetTrainerClassName
+ pop bc
+ pop hl
+ ret
+
+GetCallerLocation: ; 90439
+ ld a, [wCurrentCaller]
+ call GetCallerTrainerClass
+ ld d, c
+ ld e, b
+ push de
+ ld a, [wCurrentCaller]
+ ld hl, PhoneContacts + PHONE_CONTACT_MAP_GROUP
+ ld bc, PHONE_TABLE_WIDTH
+ call AddNTimes
+ ld b, [hl]
+ inc hl
+ ld c, [hl]
+ push bc
+ call GetWorldMapLocation
+ ld e, a
+ callba GetLandmarkName
+ pop bc
+ pop de
+ ret
+; 9045f
+
+PhoneContacts: ; 9045f
+phone: MACRO
+ db \1, \2 ; trainer
+ map \3 ; map
+ db \4
+ dba \5 ; script 1
+ db \6
+ dba \7 ; script 2
+ENDM
+
+ phone TRAINER_NONE, PHONE_00, N_A, 0, UnusedPhoneScript, 0, UnusedPhoneScript
+ phone TRAINER_NONE, PHONECONTACT_MOM, KRISS_HOUSE_1F, 7, MomPhoneScript, 0, UnusedPhoneScript
+ phone TRAINER_NONE, PHONECONTACT_BIKESHOP, OAKS_LAB, 0, UnusedPhoneScript, 0, UnusedPhoneScript
+ phone TRAINER_NONE, PHONECONTACT_BILL, N_A, 7, BillPhoneScript1, 0, BillPhoneScript2
+ phone TRAINER_NONE, PHONECONTACT_ELM, ELMS_LAB, 7, ElmPhoneScript1, 0, ElmPhoneScript2
+ phone SCHOOLBOY, JACK1, NATIONAL_PARK, 7, JackPhoneScript1, 7, JackPhoneScript2
+ phone POKEFANF, BEVERLY1, NATIONAL_PARK, 7, BeverlyPhoneScript1, 7, BeverlyPhoneScript2
+ phone SAILOR, HUEY1, OLIVINE_LIGHTHOUSE_2F, 7, HueyPhoneScript1, 7, HueyPhoneScript2
+ phone TRAINER_NONE, PHONE_00, N_A, 0, UnusedPhoneScript, 0, UnusedPhoneScript
+ phone TRAINER_NONE, PHONE_00, N_A, 0, UnusedPhoneScript, 0, UnusedPhoneScript
+ phone TRAINER_NONE, PHONE_00, N_A, 0, UnusedPhoneScript, 0, UnusedPhoneScript
+ phone COOLTRAINERM, GAVEN3, ROUTE_26, 7, GavenPhoneScript1, 7, GavenPhoneScript2
+ phone COOLTRAINERF, BETH1, ROUTE_26, 7, BethPhoneScript1, 7, BethPhoneScript2
+ phone BIRD_KEEPER, JOSE2, ROUTE_27, 7, JosePhoneScript1, 7, JosePhoneScript2
+ phone COOLTRAINERF, REENA1, ROUTE_27, 7, ReenaPhoneScript1, 7, ReenaPhoneScript2
+ phone YOUNGSTER, JOEY1, ROUTE_30, 7, JoeyPhoneScript1, 7, JoeyPhoneScript2
+ phone BUG_CATCHER, WADE1, ROUTE_31, 7, WadePhoneScript1, 7, WadePhoneScript2
+ phone FISHER, RALPH1, ROUTE_32, 7, RalphPhoneScript1, 7, RalphPhoneScript2
+ phone PICNICKER, LIZ1, ROUTE_32, 7, LizPhoneScript1, 7, LizPhoneScript2
+ phone HIKER, ANTHONY2, ROUTE_33, 7, AnthonyPhoneScript1, 7, AnthonyPhoneScript2
+ phone CAMPER, TODD1, ROUTE_34, 7, ToddPhoneScript1, 7, ToddPhoneScript2
+ phone PICNICKER, GINA1, ROUTE_34, 7, GinaPhoneScript1, 7, GinaPhoneScript2
+ phone JUGGLER, IRWIN1, ROUTE_35, 7, IrwinPhoneScript1, 7, IrwinPhoneScript2
+ phone BUG_CATCHER, ARNIE1, ROUTE_35, 7, ArniePhoneScript1, 7, ArniePhoneScript2
+ phone SCHOOLBOY, ALAN1, ROUTE_36, 7, AlanPhoneScript1, 7, AlanPhoneScript2
+ phone TRAINER_NONE, PHONE_00, N_A, 0, UnusedPhoneScript, 0, UnusedPhoneScript
+ phone LASS, DANA1, ROUTE_38, 7, DanaPhoneScript1, 7, DanaPhoneScript2
+ phone SCHOOLBOY, CHAD1, ROUTE_38, 7, ChadPhoneScript1, 7, ChadPhoneScript2
+ phone POKEFANM, DEREK1, ROUTE_39, 7, DerekPhoneScript1, 7, DerekPhoneScript2
+ phone FISHER, TULLY1, ROUTE_42, 7, TullyPhoneScript1, 7, TullyPhoneScript2
+ phone POKEMANIAC, BRENT1, ROUTE_43, 7, BrentPhoneScript1, 7, BrentPhoneScript2
+ phone PICNICKER, TIFFANY3, ROUTE_43, 7, TiffanyPhoneScript1, 7, TiffanyPhoneScript2
+ phone BIRD_KEEPER, VANCE1, ROUTE_44, 7, VancePhoneScript1, 7, VancePhoneScript2
+ phone FISHER, WILTON1, ROUTE_44, 7, WiltonPhoneScript1, 7, WiltonPhoneScript2
+ phone BLACKBELT_T, KENJI3, ROUTE_45, 7, KenjiPhoneScript1, 7, KenjiPhoneScript2
+ phone HIKER, PARRY1, ROUTE_45, 7, ParryPhoneScript1, 7, ParryPhoneScript2
+ phone PICNICKER, ERIN1, ROUTE_46, 7, ErinPhoneScript1, 7, ErinPhoneScript2
+ phone TRAINER_NONE, PHONECONTACT_BUENA, GOLDENROD_DEPT_STORE_ROOF, 7, BuenaPhoneScript1, 7, BuenaPhoneScript2
+; 90627
+
+SpecialPhoneCallList: ; 90627
+ dw SpecialCallOnlyWhenOutside
+ db PHONE_ELM
+ dba ElmPhoneScript2
+
+ dw SpecialCallOnlyWhenOutside
+ db PHONE_ELM
+ dba ElmPhoneScript2
+
+ dw SpecialCallOnlyWhenOutside
+ db PHONE_ELM
+ dba ElmPhoneScript2
+
+ dw SpecialCallOnlyWhenOutside
+ db PHONE_ELM
+ dba ElmPhoneScript2
+
+ dw SpecialCallWhereverYouAre
+ db PHONE_ELM
+ dba ElmPhoneScript2
+
+ dw SpecialCallWhereverYouAre
+ db PHONE_OAK ; ????????
+ dba BikeShopPhoneScript ; bike shop
+
+ dw SpecialCallWhereverYouAre
+ db PHONE_MOM
+ dba MomPhoneLectureScript
+
+ dw SpecialCallOnlyWhenOutside
+ db PHONE_ELM
+ dba ElmPhoneScript2
+; 90657
+
+UnknownScript_0x90657: ; 0x90657
+ writetext UnknownText_0x9065b
+ end
+; 0x9065b
+
+UnknownText_0x9065b: ; 0x9065b
+ ; That number is out of the area.
+ text_jump UnknownText_0x1c558b
+ db "@"
+; 0x90660
+
+PhoneScript_JustTalkToThem: ; 0x90660
+ writetext UnknownText_0x90664
+ end
+; 0x90664
+
+UnknownText_0x90664: ; 0x90664
+ ; Just go talk to that person!
+ text_jump UnknownText_0x1c55ac
+ db "@"
+; 0x90669
+
+UnknownScript_0x90669: ; 0x90669
+ writetext UnknownText_0x9066d
+ end
+; 0x9066d
+
+UnknownText_0x9066d: ; 0x9066d
+ ; Thank you!
+ text_jump UnknownText_0x1c55ca
+ db "@"
+; 0x90672
diff --git a/engine/phone_scripts.asm b/engine/phone_scripts.asm
index 5be1c9a77..5d8afd028 100644
--- a/engine/phone_scripts.asm
+++ b/engine/phone_scripts.asm
@@ -141,7 +141,7 @@ MomPhoneNoGymQuestScript: ; 0xbcfac
MomPhoneLectureScript: ; 0xbcfb1
setevent EVENT_TALKED_TO_MOM_AFTER_MYSTERY_EGG_QUEST
setflag ENGINE_DST
- specialphonecall ELMCALL_NONE
+ specialphonecall SPECIALCALL_NONE
farwritetext MomPhoneLectureText
yesorno
iftrue MomPhoneSaveMoneyScript
@@ -194,7 +194,7 @@ BillPhoneScript2: ; 0xbd007
; Elm
ElmPhoneScript1: ; 0xbd00d
- checkcode VAR_POKERUS
+ checkcode VAR_SPECIALPHONECALL
if_equal $1, .pokerus
checkevent EVENT_SHOWED_TOGEPI_TO_ELM
iftrue .discovery
@@ -253,46 +253,46 @@ ElmPhoneScript1: ; 0xbd00d
.pokerus ; 0xbd079
farwritetext ElmPhonePokerusText
- specialphonecall ELMCALL_NONE
+ specialphonecall SPECIALCALL_NONE
end
ElmPhoneScript2: ; 0xbd081
- checkcode VAR_POKERUS
+ checkcode VAR_SPECIALPHONECALL
if_equal $2, .disaster
if_equal $3, .assistant
if_equal $4, .rocket
if_equal $5, .gift
if_equal $8, .gift
farwritetext ElmPhonePokerusText
- specialphonecall ELMCALL_NONE
+ specialphonecall SPECIALCALL_NONE
end
.disaster ; 0xbd09f
farwritetext ElmPhoneDisasterText
- specialphonecall ELMCALL_NONE
+ specialphonecall SPECIALCALL_NONE
setevent EVENT_ELM_CALLED_ABOUT_STOLEN_POKEMON
end
.assistant ; 0xbd0aa
farwritetext ElmPhoneEggAssistantText
- specialphonecall ELMCALL_NONE
+ specialphonecall SPECIALCALL_NONE
clearevent EVENT_ELMS_AIDE_IN_VIOLET_POKEMON_CENTER
setevent EVENT_ELMS_AIDE_IN_LAB
end
.rocket ; 0xbd0b8
farwritetext ElmPhoneRocketText
- specialphonecall ELMCALL_NONE
+ specialphonecall SPECIALCALL_NONE
end
.gift ; 0xbd0c0
farwritetext ElmPhoneGiftText
- specialphonecall ELMCALL_NONE
+ specialphonecall SPECIALCALL_NONE
end
.unused ; 0xbd0c8
farwritetext ElmPhoneUnusedText
- specialphonecall ELMCALL_NONE
+ specialphonecall SPECIALCALL_NONE
end
; bd0d0
@@ -833,7 +833,7 @@ UnknownScript_0xbd544:
pokenamemem QWILFISH, $1
displaylocation ROUTE_32, $2
writebyte $1
- special Functionc3fc
+ special Special_ActivateFishingSwarm
farjump UnknownScript_0xa05d6
UnknownScript_0xbd55c:
diff --git a/engine/pokedex.asm b/engine/pokedex.asm
index 066653777..dd58e940d 100644
--- a/engine/pokedex.asm
+++ b/engine/pokedex.asm
@@ -16,10 +16,10 @@ Pokedex: ; 40000
push af
xor a
ld [VramState], a
- ld a, [$ffaa]
+ ld a, [hInMenu]
push af
ld a, $1
- ld [$ffaa], a
+ ld [hInMenu], a
xor a
ld [$ffde], a
@@ -27,8 +27,8 @@ Pokedex: ; 40000
call DelayFrame
.main
- call Functiona57
- ld a, [wcf63]
+ call JoyTextDelay
+ ld a, [wJumptableIndex]
bit 7, a
jr nz, .exit
call Function4010b
@@ -44,7 +44,7 @@ Pokedex: ; 40000
ld [wd959], a
pop af
- ld [$ffaa], a
+ ld [hInMenu], a
pop af
ld [VramState], a
pop af
@@ -75,7 +75,7 @@ ENDC
call ByteFill
xor a
- ld [wcf63], a
+ ld [wJumptableIndex], a
ld [wcf64], a
ld [wcf65], a
ld [wcf66], a
@@ -173,7 +173,7 @@ Function400ed: ; 400ed
; 4010b
Function4010b: ; 4010b
- ld a, [wcf63]
+ ld a, [wJumptableIndex]
ld hl, Jumptable_40115
call Function41432
jp [hl]
@@ -198,12 +198,12 @@ Jumptable_40115: ; 40115 (10:4115)
Function40131: ; 40131 (10:4131)
- ld hl, wcf63
+ ld hl, wJumptableIndex
inc [hl]
ret
Function40136: ; 40136 (10:4136)
- ld hl, wcf63
+ ld hl, wJumptableIndex
set 7, [hl]
ret
@@ -217,7 +217,7 @@ Function4013c: ; 4013c (10:413c)
call ByteFill
callba Function1de171
hlcoord 0, 17
- ld de, Unknown_407f2
+ ld de, String_START_SEARCH
call Function40acd
ld a, $7
ld [wc7d3], a
@@ -246,7 +246,7 @@ Function4013c: ; 4013c (10:413c)
call Function41148
callba Function1de171
hlcoord 0, 17
- ld de, Unknown_407f2
+ ld de, String_START_SEARCH
call Function40acd
ld a, $7
ld [wc7d3], a
@@ -283,7 +283,7 @@ Function401ae: ; 401ae (10:41ae)
call Function40bd0
ret z
ld a, $2
- ld [wcf63], a
+ ld [wJumptableIndex], a
ld a, $0
ld [wcf64], a
ret
@@ -291,7 +291,7 @@ Function401ae: ; 401ae (10:41ae)
.select
call Function41401
ld a, $7
- ld [wcf63], a
+ ld [wJumptableIndex], a
xor a
ld [hSCX], a ; $ff00+$cf
ld a, $a7
@@ -302,7 +302,7 @@ Function401ae: ; 401ae (10:41ae)
.start
call Function41401
ld a, $5
- ld [wcf63], a
+ ld [wJumptableIndex], a
xor a
ld [hSCX], a ; $ff00+$cf
ld a, $a7
@@ -312,7 +312,7 @@ Function401ae: ; 401ae (10:41ae)
.b
ld a, $d
- ld [wcf63], a
+ ld [wJumptableIndex], a
ret
Function40217: ; 40217 (10:4217)
@@ -372,7 +372,7 @@ Function40258: ; 40258 (10:4258)
.asm_40288
call MaxVolume
ld a, [wcf64]
- ld [wcf63], a
+ ld [wJumptableIndex], a
ret
; 40292 (10:4292)
@@ -408,7 +408,7 @@ Function402aa: ; 402aa (10:42aa)
call Function41423
ld a, [CurPartySpecies]
call PlayCry
- ld hl, wcf63
+ ld hl, wJumptableIndex
dec [hl]
ret
; 402e8 (10:42e8)
@@ -478,11 +478,11 @@ Function4034f: ; 4034f
push af
ld a, [wcf64]
push af
- ld a, [wcf63]
+ ld a, [wJumptableIndex]
push af
callba Function8442c
pop af
- ld [wcf63], a
+ ld [wJumptableIndex], a
pop af
ld [wcf64], a
pop af
@@ -552,7 +552,7 @@ Function403be: ; 403be (10:43be)
.asm_403ea
call Function41401
ld a, $0
- ld [wcf63], a
+ ld [wJumptableIndex], a
ret
; 403f3 (10:43f3)
@@ -604,13 +604,13 @@ Function40417: ; 40417 (10:4417)
.asm_40431
call Function41401
ld a, $0
- ld [wcf63], a
+ ld [wJumptableIndex], a
ret
Function4043a: ; 4043a (10:443a)
call Function41401
ld a, $b
- ld [wcf63], a
+ ld [wJumptableIndex], a
ret
Function40443: ; 40443 (10:4443)
@@ -656,7 +656,7 @@ Function40471: ; 40471 (10:4471)
.asm_40495
call Function41401
ld a, $0
- ld [wcf63], a
+ ld [wJumptableIndex], a
ret
; 4049e (10:449e)
@@ -710,14 +710,14 @@ Function404b7: ; 404b7
ld [wc7d1], a
call Function41401
ld a, $9
- ld [wcf63], a
+ ld [wJumptableIndex], a
ret
; 40501
Function40501: ; 40501
call Function41401
ld a, $0
- ld [wcf63], a
+ ld [wJumptableIndex], a
ret
; 4050a
@@ -779,7 +779,7 @@ Function40562: ; 40562 (10:4562)
call Function40bd0
ret z
ld a, $2
- ld [wcf63], a
+ ld [wJumptableIndex], a
ld a, $9
ld [wcf64], a
ret
@@ -795,7 +795,7 @@ Function40562: ; 40562 (10:4562)
call ClearSprites
call Function40bdc
ld a, $5
- ld [wcf63], a
+ ld [wJumptableIndex], a
xor a
ld [hSCX], a ; $ff00+$cf
ld a, $a7
@@ -827,7 +827,7 @@ Function405df: ; 405df (10:45df)
.asm_405eb
call Function41401
ld a, $7
- ld [wcf63], a
+ ld [wJumptableIndex], a
call DelayFrame
call Function41a24
jr nz, .asm_40603
@@ -836,7 +836,7 @@ Function405df: ; 405df (10:45df)
.asm_40603
ld hl, PokedexLZ
- ld de, $9310
+ ld de, VTiles2 tile $31
lb bc, BANK(PokedexLZ), $3a
call Functione73
@@ -844,7 +844,7 @@ Function405df: ; 405df (10:45df)
ret
Function40610: ; 40610 (10:4610)
- ld hl, $ffa9
+ ld hl, hJoyLast
ld a, [hl]
and D_RIGHT
jr nz, .right
@@ -913,7 +913,7 @@ Function4066c: ; 4066c (10:466c)
ld [wc7e2], a
ld a, [wc7d0]
ld [wc7e3], a
- ld hl, $ffa9
+ ld hl, hJoyLast
ld a, [hl]
and D_UP
jr nz, .up
@@ -964,7 +964,7 @@ Function406c5: ; 406c5 (10:46c5)
ld d, a
ld a, [wc7d2]
ld e, a
- ld hl, $ffa9
+ ld hl, hJoyLast
ld a, [hl]
and D_UP
jr nz, Function406ea
@@ -1068,7 +1068,7 @@ Function40741: ; 40741
Function4074c: ; 4074c (10:474c)
hlcoord 0, 17
- ld de, Unknown_407f2
+ ld de, String_START_SEARCH
call Function40acd
ld a, $32
hlcoord 0, 0
@@ -1081,27 +1081,27 @@ Function4074c: ; 4074c (10:474c)
ld bc, $607
call Function40ad5
hlcoord 1, 11
- ld de, Unknown_407e1
+ ld de, String_SEEN
call Function40acd
ld hl, PokedexSeen ; wdeb9 (aliases: EndPokedexSeen)
ld b, EndPokedexSeen - PokedexSeen
call CountSetBits
ld de, wd265
hlcoord 5, 12
- ld bc, $103
+ lb bc, 1, 3
call PrintNum
hlcoord 1, 14
- ld de, Unknown_407e6
+ ld de, String_OWN
call Function40acd
ld hl, PokedexCaught
ld b, EndPokedexCaught - PokedexCaught
call CountSetBits
ld de, wd265
hlcoord 5, 15
- ld bc, $103
+ lb bc, 1, 3
call PrintNum
hlcoord 1, 17
- ld de, Unknown_407ea
+ ld de, String_SELECT_OPTION
call Function40acd
hlcoord 8, 1
ld b, $7
@@ -1123,13 +1123,13 @@ Function4074c: ; 4074c (10:474c)
ret
; 407e1 (10:47e1)
-Unknown_407e1: ; 407e1
+String_SEEN: ; 407e1
db "SEEN", $ff
-Unknown_407e6: ; 407e6
+String_OWN: ; 407e6
db "OWN", $ff
-Unknown_407ea: ; 407ea
+String_SELECT_OPTION: ; 407ea
db $3b, $48, $49, $4a, $44, $45, $46, $47 ; SELECT > OPTION
-Unknown_407f2: ; 407f2
+String_START_SEARCH: ; 407f2
db $3c, $3b, $41, $42, $43, $4b, $4c, $4d, $4e, $3c, $ff ; START > SEARCH
; 407fd
@@ -1270,7 +1270,7 @@ Function40962: ; 40962 (10:4962)
call PlaceString
ld de, wc7d7
hlcoord 1, 16
- ld bc, $103
+ lb bc, 1, 3
call PrintNum
hlcoord 8, 0
ld [hl], $59
@@ -1541,7 +1541,7 @@ Function40b6a: ; 40b6a (10:4b6a)
ld de, -20
add hl, de
ld de, wd265
- ld bc, $8103
+ lb bc, PRINTNUM_LEADINGZEROS | 1, 3
call PrintNum
pop hl
ret
@@ -1799,7 +1799,7 @@ Function40f4f: ; 40f4f (10:4f4f)
ld a, [wc7d8]
cp $2
jr nc, .asm_40f63
- ld hl, $ffa9
+ ld hl, hJoyLast
ld a, [hl]
and $20
jr nz, .asm_40f65
@@ -2274,7 +2274,7 @@ Function4135a: ; 4135a (10:535a)
jr nz, .asm_413c1
call Function413f5
jr c, .asm_413bf
- ld hl, $ffa9
+ ld hl, hJoyLast
ld a, [hl]
and D_LEFT | D_UP
and b
@@ -2360,7 +2360,7 @@ Function413f5: ; 413f5 (10:53f5)
ret
Function413fe: ; 413fe (10:53fe)
- jp Functionfb8
+ jp FillBoxWithByte
Function41401: ; 41401 (10:5401)
ld a, [rSVBK] ; $ff00+$70
@@ -2460,7 +2460,7 @@ Function4147b: ; 4147b
push hl
ld e, l
ld d, h
- ld hl, $9620
+ ld hl, VTiles2 tile $62
lb bc, BANK(Footprints), 2
call Request1bpp
pop hl
@@ -2472,7 +2472,7 @@ Function4147b: ; 4147b
ld e, l
ld d, h
- ld hl, $9640
+ ld hl, VTiles2 tile $64
lb bc, BANK(Footprints), 2
call Request1bpp
@@ -2488,7 +2488,7 @@ Function414b7: ; 414b7
call ByteFill
call Function414fb
call Functione5f
- ld hl, $9600
+ ld hl, VTiles2 tile $60
ld bc, $0200
call Function41504
call Function41a24
@@ -2498,7 +2498,7 @@ Function414b7: ; 414b7
.asm_414e0
ld hl, PokedexLZ
- ld de, $9310
+ ld de, VTiles2 tile $31
call Decompress
.asm_414e9
@@ -2554,7 +2554,7 @@ Function41a2c: ; 41a2c
ld bc, $1b0
call Function41504
ld de, sScratch + $188
- ld hl, $9400
+ ld hl, VTiles2 tile $40
lb bc, BANK(Function41a2c), $1b
call Request2bpp
call CloseSRAM
@@ -2575,7 +2575,7 @@ Function41a58: ; 41a58 (10:5a58)
ld a, UNOWN
ld [CurPartySpecies], a
call GetBaseData
- ld de, $9000
+ ld de, VTiles2 tile $00
predef GetFrontpic
pop af
ld [UnownLetter], a
diff --git a/engine/predef.asm b/engine/predef.asm
index 22e323246..748d14c49 100644
--- a/engine/predef.asm
+++ b/engine/predef.asm
@@ -36,10 +36,10 @@ PredefPointers:: ; 856b
add_predef FlagPredef
add_predef Functionc699
add_predef FillPP
- add_predef Functiond88c
+ add_predef TryAddMonToParty
add_predef Functionda96
add_predef Functiondb3f ; $8
- add_predef Functionde6e
+ add_predef SentPkmnIntoBox
add_predef GiveEgg
add_predef Functionc6e0
add_predef Functione167
@@ -82,9 +82,9 @@ PredefPointers:: ; 856b
add_predef Predef_LoadSGBLayout
add_predef Function91d11
add_predef CheckContestMon
- add_predef Function8c20f
- add_predef Function8c000
- add_predef Function8c000_2
+ add_predef Predef_StartBattle
+ add_predef Predef35
+ add_predef Predef36
add_predef PlayBattleAnim
add_predef Predef38 ; $38
add_predef Predef39
diff --git a/engine/radio.asm b/engine/radio.asm
index 3503ecc13..d833b66f5 100644
--- a/engine/radio.asm
+++ b/engine/radio.asm
@@ -38,8 +38,8 @@ RadioJumptable: ; b863a (2e:463a)
dw FernMonMusic1 ; $06
dw RocketRadio1 ; $07
dw PokeFluteRadio ; $08
- dw EvolutionRadio ; $09
- dw UnownRadio ; $0a
+ dw UnownRadio ; $09
+ dw EvolutionRadio ; $0a
; OaksPkmnTalk
dw OaksPkmnTalk2 ; $0b
dw OaksPkmnTalk3 ; $0c
@@ -49,10 +49,10 @@ RadioJumptable: ; b863a (2e:463a)
dw OaksPkmnTalk7 ; $10
dw OaksPkmnTalk8 ; $11
dw OaksPkmnTalk9 ; $12
- dw OaksPkmnTalk10 ; $13
- dw OaksPkmnTalk11 ; $14
- dw OaksPkmnTalk12 ; $15
- dw OaksPkmnTalk13 ; $16
+ dw PokedexShow2 ; $13
+ dw PokedexShow3 ; $14
+ dw PokedexShow4 ; $15
+ dw PokedexShow5 ; $16
; Ben Music
dw BenMonMusic2 ; $17
dw BenMonMusic3 ; $18
@@ -76,12 +76,13 @@ RadioJumptable: ; b863a (2e:463a)
dw LuckyNumberShow13 ; $29
dw LuckyNumberShow14 ; $2a
dw LuckyNumberShow15 ; $2b
- dw LuckyNumberShow16 ; $2c
- dw LuckyNumberShow17 ; $2d
- dw LuckyNumberShow18 ; $2e
- dw LuckyNumberShow19 ; $2f
- dw LuckyNumberShow20 ; $30
- dw LuckyNumberShow21 ; $31
+; People & Places
+ dw PeoplePlaces2 ; $2c
+ dw PeoplePlaces3 ; $2d
+ dw PeoplePlaces4 ; $2e
+ dw PeoplePlaces5 ; $2f
+ dw PeoplePlaces6 ; $30
+ dw PeoplePlaces7 ; $31
; Rocket Radio
dw RocketRadio2 ; $32
dw RocketRadio3 ; $33
@@ -93,11 +94,11 @@ RadioJumptable: ; b863a (2e:463a)
dw RocketRadio9 ; $39
dw RocketRadio10 ; $3a
; More Pokemon Channel stuff
- dw OaksPkmnTalk14 ; $3b
- dw OaksPkmnTalk15 ; $3c
- dw OaksPkmnTalk16 ; $3d
- dw OaksPkmnTalk17 ; $3e
- dw OaksPkmnTalk18 ; $3f
+ dw OaksPkmnTalk10 ; $3b
+ dw OaksPkmnTalk11 ; $3c
+ dw OaksPkmnTalk12 ; $3d
+ dw OaksPkmnTalk13 ; $3e
+ dw OaksPkmnTalk14 ; $3f
; Buenas Password
dw BuenasPassword2 ; $40
dw BuenasPassword3 ; $41
@@ -121,9 +122,9 @@ RadioJumptable: ; b863a (2e:463a)
dw BuenasPassword21 ; $53
dw RadioScroll ; $54
; More Pokemon Channel stuff
- dw OaksPkmnTalk19 ; $55
- dw OaksPkmnTalk20 ; $56
- dw OaksPkmnTalk21 ; $57
+ dw PokedexShow6 ; $55
+ dw PokedexShow7 ; $56
+ dw PokedexShow8 ; $57
PrintRadioLine: ; b86ea (2e:46ea)
@@ -144,17 +145,17 @@ PrintRadioLine: ; b86ea (2e:46ea)
.print
call PrintTextBoxText
.skip
- ld a, $54
+ ld a, RADIO_SCROLL
ld [wd002], a
- ld a, $64
+ ld a, 100
ld [wd004], a
ret
; b8718 (2e:4718)
-Functionb8718: ; b8718
+ReplacePeriodsWithSpaces: ; b8718
push hl
ld b, SCREEN_WIDTH * 2
-.greater_than_10
+.loop
ld a, [hl]
cp "."
jr nz, .next
@@ -163,7 +164,7 @@ Functionb8718: ; b8718
.next
inc hl
dec b
- jr nz, .greater_than_10
+ jr nz, .loop
pop hl
ret
; b8728
@@ -188,26 +189,27 @@ OaksPkmnTalk1: ; b8742 (2e:4742)
ld [wd006], a
call StartRadioStation
ld hl, UnknownText_0xb8820
- ld a, $b
+ ld a, OAKS_POKEMON_TALK_2
jp NextRadioLine
OaksPkmnTalk2: ; b8752 (2e:4752)
ld hl, UnknownText_0xb8825
- ld a, $c
+ ld a, OAKS_POKEMON_TALK_3
jp NextRadioLine
OaksPkmnTalk3: ; b875a (2e:475a)
ld hl, UnknownText_0xb882a
- ld a, $d
+ ld a, OAKS_POKEMON_TALK_4
jp NextRadioLine
OaksPkmnTalk4: ; b8762 (2e:4762)
-; Choose a random root, and a random Pokemon from that route.
+; Choose a random route, and a random Pokemon from that route.
call Random
and $1f
cp $f
jr nc, OaksPkmnTalk4
- ld hl, Unknown_b87f2
+ ; We now have a number between 0 and 14.
+ ld hl, .routes
ld c, a
ld b, 0
rept 2
@@ -216,14 +218,16 @@ endr
ld b, [hl]
inc hl
ld c, [hl]
+ ; bc now contains the chosen map's group and number indices.
push bc
+ ; Search the JohtoGrassWildMons array for the chosen map.
ld hl, JohtoGrassWildMons
-.greater_than_10
+.loop
ld a, BANK(JohtoGrassWildMons)
call GetFarByte
cp -1
- jr z, .done2
+ jr z, .overflow
inc hl
cp b
jr nz, .next
@@ -233,62 +237,64 @@ endr
jr z, .done
.next
dec hl
- ld de, $2f
+ ld de, WILDMON_GRASS_STRUCTURE_LENGTH
add hl, de
- jr .greater_than_10
+ jr .loop
.done
rept 4
inc hl
endr
-
-.both_bits_set
+ ; Generate a number, either 0, 1, or 2, to choose a time of day.
+.loop2
call Random
and 3
cp 3
- jr z, .both_bits_set
+ jr z, .loop2
- ld bc, $e
+ ld bc, 2 * NUM_WILDMONS_PER_AREA_TIME_OF_DAY
call AddNTimes
-.greater_than_102
+.loop3
+ ; Choose one of the middle three Pokemon.
call Random
- and 7
+ and NUM_WILDMONS_PER_AREA_TIME_OF_DAY
cp 2
- jr c, .greater_than_102
+ jr c, .loop3
cp 5
- jr nc, .greater_than_102
+ jr nc, .loop3
ld e, a
ld d, 0
rept 2
add hl, de
endr
- inc hl
+ inc hl ; skip level
ld a, BANK(JohtoGrassWildMons)
call GetFarByte
- ld [wd265], a
+ ld [wNamedObjectIndexBuffer], a
ld [CurPartySpecies], a
call GetPokemonName
ld hl, StringBuffer1
ld de, wd050
- ld bc, $b
+ ld bc, PKMN_NAME_LENGTH
call CopyBytes
-
+ ; Now that we've chosen our wild Pokemon,
+ ; let's recover the map index info and get its name.
pop bc
call GetWorldMapLocation
ld e, a
callba GetLandmarkName
ld hl, UnknownText_0xb882f
call CopyRadioTextToRAM
- ld a, $e
+ ld a, OAKS_POKEMON_TALK_5
jp PrintRadioLine
-.done2
+.overflow
pop bc
ld a, $0
jp PrintRadioLine
; b87f2 (2e:47f2)
-Unknown_b87f2: ; b87f2
+.routes: ; b87f2
map ROUTE_29
map ROUTE_46
map ROUTE_30
@@ -308,12 +314,12 @@ Unknown_b87f2: ; b87f2
OaksPkmnTalk5: ; b8810 (2e:4810)
ld hl, UnknownText_0xb8834
- ld a, $f
+ ld a, OAKS_POKEMON_TALK_6
jp NextRadioLine
OaksPkmnTalk6: ; b8818 (2e:4818)
ld hl, UnknownText_0xb8839
- ld a, $10
+ ld a, OAKS_POKEMON_TALK_7
jp NextRadioLine
; b8820 (2e:4820)
@@ -358,7 +364,7 @@ OaksPkmnTalk7: ; b883e (2e:483e)
ld [wd265], a
call GetPokemonName
ld hl, UnknownText_0xb884f
- ld a, $11
+ ld a, OAKS_POKEMON_TALK_8
jp NextRadioLine
; b884f (2e:484f)
@@ -373,127 +379,127 @@ OaksPkmnTalk8: ; b8854 (2e:4854)
and $f
ld e, a
ld d, 0
- ld hl, Unknown_b8869
+ ld hl, .Descriptors
rept 2
add hl, de
endr
ld a, [hli]
ld h, [hl]
ld l, a
- ld a, $12
+ ld a, OAKS_POKEMON_TALK_9
jp NextRadioLine
; b8869 (2e:4869)
-Unknown_b8869: ; b8869
- dw UnknownText_0xb8889
- dw UnknownText_0xb888e
- dw UnknownText_0xb8893
- dw UnknownText_0xb8898
- dw UnknownText_0xb889d
- dw UnknownText_0xb88a2
- dw UnknownText_0xb88a7
- dw UnknownText_0xb88ac
- dw UnknownText_0xb88b1
- dw UnknownText_0xb88b6
- dw UnknownText_0xb88bb
- dw UnknownText_0xb88c0
- dw UnknownText_0xb88c5
- dw UnknownText_0xb88ca
- dw UnknownText_0xb88cf
- dw UnknownText_0xb88d4
+.Descriptors: ; b8869
+ dw .sweetadorably
+ dw .wigglyslickly
+ dw .aptlynamed
+ dw .undeniablykindof
+ dw .unbearably
+ dw .wowimpressively
+ dw .almostpoisonously
+ dw .sensually
+ dw .mischievously
+ dw .topically
+ dw .addictively
+ dw .looksinwater
+ dw .evolutionmustbe
+ dw .provocatively
+ dw .flippedout
+ dw .heartmeltingly
; b8889
-UnknownText_0xb8889: ; 0xb8889
+.sweetadorably: ; 0xb8889
; sweet and adorably
text_jump UnknownText_0x1bc885
db "@"
; 0xb888e
-UnknownText_0xb888e: ; 0xb888e
+.wigglyslickly: ; 0xb888e
; wiggly and slickly
text_jump UnknownText_0x1bc89a
db "@"
; 0xb8893
-UnknownText_0xb8893: ; 0xb8893
+.aptlynamed: ; 0xb8893
; aptly named and
text_jump UnknownText_0x1bc8af
db "@"
; 0xb8898
-UnknownText_0xb8898: ; 0xb8898
+.undeniablykindof: ; 0xb8898
; undeniably kind of
text_jump UnknownText_0x1bc8c1
db "@"
; 0xb889d
-UnknownText_0xb889d: ; 0xb889d
+.unbearably: ; 0xb889d
; so, so unbearably
text_jump UnknownText_0x1bc8d6
db "@"
; 0xb88a2
-UnknownText_0xb88a2: ; 0xb88a2
+.wowimpressively: ; 0xb88a2
; wow, impressively
text_jump UnknownText_0x1bc8ea
db "@"
; 0xb88a7
-UnknownText_0xb88a7: ; 0xb88a7
+.almostpoisonously: ; 0xb88a7
; almost poisonously
text_jump UnknownText_0x1bc8fe
db "@"
; 0xb88ac
-UnknownText_0xb88ac: ; 0xb88ac
+.sensually: ; 0xb88ac
; ooh, so sensually
text_jump UnknownText_0x1bc913
db "@"
; 0xb88b1
-UnknownText_0xb88b1: ; 0xb88b1
+.mischievously: ; 0xb88b1
; so mischievously
text_jump UnknownText_0x1bc927
db "@"
; 0xb88b6
-UnknownText_0xb88b6: ; 0xb88b6
+.topically: ; 0xb88b6
; so very topically
text_jump UnknownText_0x1bc93a
db "@"
; 0xb88bb
-UnknownText_0xb88bb: ; 0xb88bb
+.addictively: ; 0xb88bb
; sure addictively
text_jump UnknownText_0x1bc94e
db "@"
; 0xb88c0
-UnknownText_0xb88c0: ; 0xb88c0
+.looksinwater: ; 0xb88c0
; looks in water is
text_jump UnknownText_0x1bc961
db "@"
; 0xb88c5
-UnknownText_0xb88c5: ; 0xb88c5
+.evolutionmustbe: ; 0xb88c5
; evolution must be
text_jump UnknownText_0x1bc975
db "@"
; 0xb88ca
-UnknownText_0xb88ca: ; 0xb88ca
+.provocatively: ; 0xb88ca
; provocatively
text_jump UnknownText_0x1bc989
db "@"
; 0xb88cf
-UnknownText_0xb88cf: ; 0xb88cf
+.flippedout: ; 0xb88cf
; so flipped out and
text_jump UnknownText_0x1bc999
db "@"
; 0xb88d4
-UnknownText_0xb88d4: ; 0xb88d4
+.heartmeltingly: ; 0xb88d4
; heart-meltingly
text_jump UnknownText_0x1bc9ae
db "@"
@@ -504,7 +510,7 @@ OaksPkmnTalk9: ; b88d9 (2e:48d9)
and $f
ld e, a
ld d, 0
- ld hl, Unknown_b88fe
+ ld hl, .Descriptors
rept 2
add hl, de
endr
@@ -514,140 +520,140 @@ endr
ld a, [wd006]
dec a
ld [wd006], a
- ld a, $d
- jr nz, .nope
+ ld a, OAKS_POKEMON_TALK_4
+ jr nz, .ok
ld a, $5
ld [wd006], a
- ld a, $3b
-.nope
+ ld a, OAKS_POKEMON_TALK_10
+.ok
jp NextRadioLine
; b88fe (2e:48fe)
-Unknown_b88fe: ; b88fe
- dw UnknownText_0xb891e
- dw UnknownText_0xb8923
- dw UnknownText_0xb8928
- dw UnknownText_0xb892d
- dw UnknownText_0xb8932
- dw UnknownText_0xb8937
- dw UnknownText_0xb893c
- dw UnknownText_0xb8941
- dw UnknownText_0xb8946
- dw UnknownText_0xb894b
- dw UnknownText_0xb8950
- dw UnknownText_0xb8955
- dw UnknownText_0xb895a
- dw UnknownText_0xb895f
- dw UnknownText_0xb8964
- dw UnknownText_0xb8969
+.Descriptors: ; b88fe
+ dw .cute
+ dw .weird
+ dw .pleasant
+ dw .boldsortof
+ dw .frightening
+ dw .suavedebonair
+ dw .powerful
+ dw .exciting
+ dw .groovy
+ dw .inspiring
+ dw .friendly
+ dw .hothothot
+ dw .stimulating
+ dw .guarded
+ dw .lovely
+ dw .speedy
; b891e
-UnknownText_0xb891e: ; 0xb891e
+.cute: ; 0xb891e
; cute.
text_jump UnknownText_0x1bc9c0
db "@"
; 0xb8923
-UnknownText_0xb8923: ; 0xb8923
+.weird: ; 0xb8923
; weird.
text_jump UnknownText_0x1bc9c8
db "@"
; 0xb8928
-UnknownText_0xb8928: ; 0xb8928
+.pleasant: ; 0xb8928
; pleasant.
text_jump UnknownText_0x1bc9d1
db "@"
; 0xb892d
-UnknownText_0xb892d: ; 0xb892d
+.boldsortof: ; 0xb892d
; bold, sort of.
text_jump UnknownText_0x1bc9dd
db "@"
; 0xb8932
-UnknownText_0xb8932: ; 0xb8932
+.frightening: ; 0xb8932
; frightening.
text_jump UnknownText_0x1bc9ee
db "@"
; 0xb8937
-UnknownText_0xb8937: ; 0xb8937
+.suavedebonair: ; 0xb8937
; suave & debonair!
text_jump UnknownText_0x1bc9fd
db "@"
; 0xb893c
-UnknownText_0xb893c: ; 0xb893c
+.powerful: ; 0xb893c
; powerful.
text_jump UnknownText_0x1bca11
db "@"
; 0xb8941
-UnknownText_0xb8941: ; 0xb8941
+.exciting: ; 0xb8941
; exciting.
text_jump UnknownText_0x1bca1d
db "@"
; 0xb8946
-UnknownText_0xb8946: ; 0xb8946
+.groovy: ; 0xb8946
; groovy!
text_jump UnknownText_0x1bca29
db "@"
; 0xb894b
-UnknownText_0xb894b: ; 0xb894b
+.inspiring: ; 0xb894b
; inspiring.
text_jump UnknownText_0x1bca33
db "@"
; 0xb8950
-UnknownText_0xb8950: ; 0xb8950
+.friendly: ; 0xb8950
; friendly.
text_jump UnknownText_0x1bca40
db "@"
; 0xb8955
-UnknownText_0xb8955: ; 0xb8955
+.hothothot: ; 0xb8955
; hot, hot, hot!
text_jump UnknownText_0x1bca4c
db "@"
; 0xb895a
-UnknownText_0xb895a: ; 0xb895a
+.stimulating: ; 0xb895a
; stimulating.
text_jump UnknownText_0x1bca5d
db "@"
; 0xb895f
-UnknownText_0xb895f: ; 0xb895f
+.guarded: ; 0xb895f
; guarded.
text_jump UnknownText_0x1bca6c
db "@"
; 0xb8964
-UnknownText_0xb8964: ; 0xb8964
+.lovely: ; 0xb8964
; lovely.
text_jump UnknownText_0x1bca77
db "@"
; 0xb8969
-UnknownText_0xb8969: ; 0xb8969
+.speedy: ; 0xb8969
; speedy.
text_jump UnknownText_0x1bca81
db "@"
; 0xb896e
-OaksPkmnTalk14: ; b896e (2e:496e)
- callba Function91868
+OaksPkmnTalk10: ; b896e (2e:496e)
+ callba RadioMusicRestartPokemonChannel
ld hl, UnknownText_0xb8993
call PrintText
call WaitBGMap
ld hl, UnknownText_0xb898e
call PrintText
- ld a, $3c
+ ld a, OAKS_POKEMON_TALK_11
ld [wd002], a
- ld a, $64
+ ld a, 100
ld [wd004], a
ret
; b898e (2e:498e)
@@ -662,74 +668,74 @@ UnknownText_0xb8993: ; 0xb8993
db "@"
; 0xb8994
-OaksPkmnTalk15: ; b8994 (2e:4994)
+OaksPkmnTalk11: ; b8994 (2e:4994)
ld hl, wd004
dec [hl]
ret nz
hlcoord 9, 14
- ld de, String_b89a4
- ld a, $3d
- jp Functionb8a00
+ ld de, .pokemon_string
+ ld a, OAKS_POKEMON_TALK_12
+ jp PlaceRadioString
; b89a4 (2e:49a4)
-String_b89a4:
+.pokemon_string:
db "#MON@"
; b89a9
-OaksPkmnTalk16: ; b89a9 (2e:49a9)
+OaksPkmnTalk12: ; b89a9 (2e:49a9)
ld hl, wd004
dec [hl]
ret nz
hlcoord 1, 16
- ld de, String_b89b9
- ld a, $3e
- jp Functionb8a00
+ ld de, .pokemon_channel_string
+ ld a, OAKS_POKEMON_TALK_13
+ jp PlaceRadioString
; b89b9 (2e:49b9)
-String_b89b9:
+.pokemon_channel_string:
db "#MON Channel@"
; b89c6
-OaksPkmnTalk17: ; b89c6 (2e:49c6)
+OaksPkmnTalk13: ; b89c6 (2e:49c6)
ld hl, wd004
dec [hl]
ret nz
hlcoord 12, 16
- ld de, String_b89d6
- ld a, $3f
- jp Functionb8a00
+ ld de, .terminator
+ ld a, OAKS_POKEMON_TALK_14
+ jp PlaceRadioString
; b89d6 (2e:49d6)
-String_b89d6:
+.terminator:
db "@"
; b89d7
-OaksPkmnTalk18: ; b89d7 (2e:49d7)
+OaksPkmnTalk14: ; b89d7 (2e:49d7)
ld hl, wd004
dec [hl]
ret nz
ld de, $1d
- callab RadioMusicNone
- ld hl, UnknownText_0xb89ff
+ callab RadioMusicRestartDE
+ ld hl, .terminator
call PrintText
- ld a, $d
+ ld a, OAKS_POKEMON_TALK_4
ld [wd003], a
xor a
ld [wd005], a
- ld a, $54
+ ld a, RADIO_SCROLL
ld [wd002], a
- ld a, $a
+ ld a, 10
ld [wd004], a
ret
; b89ff (2e:49ff)
-UnknownText_0xb89ff: ; 0xb89ff
+.terminator: ; 0xb89ff
db "@"
; 0xb8a00
-Functionb8a00: ; b8a00 (2e:4a00)
+PlaceRadioString: ; b8a00 (2e:4a00)
ld [wd002], a
- ld a, $64
+ ld a, 100
ld [wd004], a
jp PlaceString
@@ -749,7 +755,7 @@ ClearBottomLine: ; b8a17 (2e:4a17)
ld a, " "
jp ByteFill
-Functionb8a2d: ; b8a2d (2e:4a2d)
+PokedexShow_GetDexEntryBank: ; b8a2d (2e:4a2d)
push hl
push de
ld a, [CurPartySpecies]
@@ -776,26 +782,26 @@ Functionb8a2d: ; b8a2d (2e:4a2d)
PokedexShow1: ; b8a46 (2e:4a46)
call StartRadioStation
-.asm_b8a49
+.loop
call Random
cp CELEBI
- jr nc, .asm_b8a49
+ jr nc, .loop
ld c, a
push bc
ld a, c
call CheckCaughtMon
pop bc
- jr z, .asm_b8a49
+ jr z, .loop
inc c
ld a, c
ld [CurPartySpecies], a
ld [wd265], a
call GetPokemonName
ld hl, UnknownText_0xb8b30
- ld a, $13
+ ld a, POKEDEX_SHOW_2
jp NextRadioLine
-OaksPkmnTalk10: ; b8a6c (2e:4a6c)
+PokedexShow2: ; b8a6c (2e:4a6c)
ld a, [CurPartySpecies]
dec a
ld hl, PokedexDataPointerTable
@@ -806,17 +812,17 @@ rept 2
endr
ld a, BANK(PokedexDataPointerTable)
call GetFarHalfword
- call Functionb8a2d
+ call PokedexShow_GetDexEntryBank
push af
push hl
- call Functionb8af3
+ call CopyDexEntryPart1
dec hl
ld [hl], $57
ld hl, wd26b
call CopyRadioTextToRAM
pop hl
pop af
- call Functionb8b11
+ call CopyDexEntryPart2
rept 4
inc hl
endr
@@ -824,40 +830,40 @@ endr
ld [wd26b], a
ld a, h
ld [wd26c], a
- ld a, $14
+ ld a, POKEDEX_SHOW_3
jp PrintRadioLine
-OaksPkmnTalk11: ; b8aa4 (2e:4aa4)
- call Functionb8ad4
- ld a, $15
+PokedexShow3: ; b8aa4 (2e:4aa4)
+ call CopyDexEntry
+ ld a, POKEDEX_SHOW_4
jp PrintRadioLine
-OaksPkmnTalk12: ; b8aac (2e:4aac)
- call Functionb8ad4
- ld a, $16
+PokedexShow4: ; b8aac (2e:4aac)
+ call CopyDexEntry
+ ld a, POKEDEX_SHOW_5
jp PrintRadioLine
-OaksPkmnTalk13: ; b8ab4 (2e:4ab4)
- call Functionb8ad4
- ld a, $55
+PokedexShow5: ; b8ab4 (2e:4ab4)
+ call CopyDexEntry
+ ld a, POKEDEX_SHOW_6
jp PrintRadioLine
-OaksPkmnTalk19: ; b8abc (2e:4abc)
- call Functionb8ad4
- ld a, $56
+PokedexShow6: ; b8abc (2e:4abc)
+ call CopyDexEntry
+ ld a, POKEDEX_SHOW_7
jp PrintRadioLine
-OaksPkmnTalk20: ; b8ac4 (2e:4ac4)
- call Functionb8ad4
- ld a, $57
+PokedexShow7: ; b8ac4 (2e:4ac4)
+ call CopyDexEntry
+ ld a, POKEDEX_SHOW_8
jp PrintRadioLine
-OaksPkmnTalk21: ; b8acc (2e:4acc)
- call Functionb8ad4
- ld a, $1
+PokedexShow8: ; b8acc (2e:4acc)
+ call CopyDexEntry
+ ld a, POKEDEX_SHOW
jp PrintRadioLine
-Functionb8ad4: ; b8ad4 (2e:4ad4)
+CopyDexEntry: ; b8ad4 (2e:4ad4)
ld a, [wd26b]
ld l, a
ld a, [wd26c]
@@ -865,48 +871,48 @@ Functionb8ad4: ; b8ad4 (2e:4ad4)
ld a, [wd26d]
push af
push hl
- call Functionb8af3
+ call CopyDexEntryPart1
dec hl
- ld [hl], $57
+ ld [hl], "<DONE>"
ld hl, wd26b
call CopyRadioTextToRAM
pop hl
pop af
- call Functionb8b11
+ call CopyDexEntryPart2
ret
-Functionb8af3: ; b8af3 (2e:4af3)
+CopyDexEntryPart1: ; b8af3 (2e:4af3)
ld de, wd26d
- ld bc, $13
+ ld bc, SCREEN_WIDTH - 1
call FarCopyBytes
ld hl, wd26b
- ld [hl], $0
+ ld [hl], "<START>"
inc hl
- ld [hl], $4f
+ ld [hl], "<LINE>"
inc hl
-.asm_b8b05
+.loop
ld a, [hli]
- cp $50
+ cp "@"
ret z
- cp $4e
+ cp "<NEXT>"
ret z
- cp $5f
+ cp "<DEXEND>"
ret z
- jr .asm_b8b05
+ jr .loop
-Functionb8b11: ; b8b11 (2e:4b11)
+CopyDexEntryPart2: ; b8b11 (2e:4b11)
ld d, a
-.asm_b8b12
+.loop
ld a, d
call GetFarByte
inc hl
- cp $50
- jr z, .asm_b8b23
- cp $4e
- jr z, .asm_b8b23
- cp $5f
- jr nz, .asm_b8b12
-.asm_b8b23
+ cp "@"
+ jr z, .okay
+ cp "<NEXT>"
+ jr z, .okay
+ cp "<DEXEND>"
+ jr nz, .loop
+.okay
ld a, l
ld [wd26b], a
ld a, h
@@ -923,70 +929,70 @@ UnknownText_0xb8b30: ; 0xb8b30
; 0xb8b35
BenMonMusic1: ; b8b35 (2e:4b35)
- call Functionb8b90
+ call StartPokemonMusicChannel
ld hl, UnknownText_0xb8baa
- ld a, $17
+ ld a, POKEMON_MUSIC_2
jp NextRadioLine
BenMonMusic2: ; b8b40 (2e:4b40)
ld hl, UnknownText_0xb8baf
- ld a, $18
+ ld a, POKEMON_MUSIC_3
jp NextRadioLine
BenMonMusic3: ; b8b48 (2e:4b48)
ld hl, UnknownText_0xb8bb4
- ld a, $19
+ ld a, POKEMON_MUSIC_4
jp NextRadioLine
FernMonMusic1: ; b8b50 (2e:4b50)
- call Functionb8b90
+ call StartPokemonMusicChannel
ld hl, UnknownText_0xb8bb9
- ld a, $1d
+ ld a, LETS_ALL_SING_2
jp NextRadioLine
FernMonMusic2: ; b8b5b (2e:4b5b)
ld hl, UnknownText_0xb8bbe
- ld a, $19
+ ld a, POKEMON_MUSIC_4
jp NextRadioLine
BenFernMusic4: ; b8b63 (2e:4b63)
ld hl, UnknownText_0xb8bc3
- ld a, $1a
+ ld a, POKEMON_MUSIC_5
jp NextRadioLine
BenFernMusic5: ; b8b6b (2e:4b6b)
call GetWeekday
and 1
ld hl, UnknownText_0xb8bc8
- jr z, .asm_b8b78
+ jr z, .SunTueThurSun
ld hl, UnknownText_0xb8bcd
-.asm_b8b78
- ld a, $1b
+.SunTueThurSun
+ ld a, POKEMON_MUSIC_6
jp NextRadioLine
BenFernMusic6: ; b8b7d (2e:4b7d)
call GetWeekday
and 1
ld hl, UnknownText_0xb8bd2
- jr z, .asm_b8b8a
+ jr z, .SunTueThurSun
ld hl, UnknownText_0xb8bd7
-.asm_b8b8a
- ld a, $1c
+.SunTueThurSun
+ ld a, POKEMON_MUSIC_7
jp NextRadioLine
BenFernMusic7: ; b8b8f (2e:4b8f)
ret
-Functionb8b90: ; b8b90 (2e:4b90)
+StartPokemonMusicChannel: ; b8b90 (2e:4b90)
call RadioTerminator
call PrintText
ld de, MUSIC_POKEMON_MARCH
call GetWeekday
and 1
- jr z, .done
+ jr z, .SunTueThurSun
ld de, MUSIC_POKEMON_LULLABY
-.done
- callab RadioMusicNone
+.SunTueThurSun
+ callab RadioMusicRestartDE
ret
; b8baa (2e:4baa)
@@ -1052,93 +1058,93 @@ UnknownText_0xb8bd7: ; 0xb8bd7
LuckyNumberShow1: ; b8bdc (2e:4bdc)
call StartRadioStation
- callab Functionc434
- jr nc, .asm_b8bed
- callab Functionc422
-.asm_b8bed
+ callab Special_CheckLuckyNumberShowFlag
+ jr nc, .dontreset
+ callab Special_ResetLuckyNumberShowFlag
+.dontreset
ld hl, UnknownText_0xb8c7e
- ld a, $1e
+ ld a, LUCKY_NUMBER_SHOW_2
jp NextRadioLine
LuckyNumberShow2: ; b8bf5 (2e:4bf5)
ld hl, UnknownText_0xb8c83
- ld a, $1f
+ ld a, LUCKY_NUMBER_SHOW_3
jp NextRadioLine
LuckyNumberShow3: ; b8bfd (2e:4bfd)
ld hl, UnknownText_0xb8c88
- ld a, $20
+ ld a, LUCKY_NUMBER_SHOW_4
jp NextRadioLine
LuckyNumberShow4: ; b8c05 (2e:4c05)
ld hl, UnknownText_0xb8c8d
- ld a, $21
+ ld a, LUCKY_NUMBER_SHOW_5
jp NextRadioLine
LuckyNumberShow5: ; b8c0d (2e:4c0d)
ld hl, UnknownText_0xb8c92
- ld a, $22
+ ld a, LUCKY_NUMBER_SHOW_6
jp NextRadioLine
LuckyNumberShow6: ; b8c15 (2e:4c15)
ld hl, UnknownText_0xb8c97
- ld a, $23
+ ld a, LUCKY_NUMBER_SHOW_7
jp NextRadioLine
LuckyNumberShow7: ; b8c1d (2e:4c1d)
ld hl, UnknownText_0xb8c9c
- ld a, $24
+ ld a, LUCKY_NUMBER_SHOW_8
jp NextRadioLine
LuckyNumberShow8: ; b8c25 (2e:4c25)
ld hl, StringBuffer1
- ld de, wdc9f
- ld bc, $8205
+ ld de, wLuckyIDNumber
+ lb bc, PRINTNUM_LEADINGZEROS | 2, 5
call PrintNum
- ld a, $50
+ ld a, "@"
ld [StringBuffer1 + 5], a
ld hl, UnknownText_0xb8ca1
- ld a, $25
+ ld a, LUCKY_NUMBER_SHOW_9
jp NextRadioLine
LuckyNumberShow9: ; b8c3e (2e:4c3e)
ld hl, UnknownText_0xb8ca6
- ld a, $26
+ ld a, LUCKY_NUMBER_SHOW_10
jp NextRadioLine
LuckyNumberShow10: ; b8c46 (2e:4c46)
ld hl, UnknownText_0xb8c9c
- ld a, $27
+ ld a, LUCKY_NUMBER_SHOW_11
jp NextRadioLine
LuckyNumberShow11: ; b8c4e (2e:4c4e)
ld hl, UnknownText_0xb8ca1
- ld a, $28
+ ld a, LUCKY_NUMBER_SHOW_12
jp NextRadioLine
LuckyNumberShow12: ; b8c56 (2e:4c56)
ld hl, UnknownText_0xb8cab
- ld a, $29
+ ld a, LUCKY_NUMBER_SHOW_13
jp NextRadioLine
LuckyNumberShow13: ; b8c5e (2e:4c5e)
ld hl, UnknownText_0xb8cb0
call Random
and a
- ld a, $3
- jr nz, .asm_b8c6b
- ld a, $2a
-.asm_b8c6b
+ ld a, LUCKY_CHANNEL
+ jr nz, .okay
+ ld a, LUCKY_NUMBER_SHOW_14
+.okay
jp NextRadioLine
LuckyNumberShow14: ; b8c6e (2e:4c6e)
ld hl, UnknownText_0xb8cb5
- ld a, $2b
+ ld a, LUCKY_NUMBER_SHOW_15
jp NextRadioLine
LuckyNumberShow15: ; b8c76 (2e:4c76)
ld hl, UnknownText_0xb8cba
- ld a, $3
+ ld a, LUCKY_CHANNEL
jp NextRadioLine
; b8c7e (2e:4c7e)
@@ -1223,22 +1229,22 @@ UnknownText_0xb8cba: ; 0xb8cba
PeoplePlaces1: ; b8cbf (2e:4cbf)
call StartRadioStation
ld hl, UnknownText_0xb8ce3
- ld a, $2c
+ ld a, PLACES_AND_PEOPLE_2
jp NextRadioLine
-LuckyNumberShow16: ; b8cca (2e:4cca)
+PeoplePlaces2: ; b8cca (2e:4cca)
ld hl, UnknownText_0xb8ce8
- ld a, $2d
+ ld a, PLACES_AND_PEOPLE_3
jp NextRadioLine
-LuckyNumberShow17: ; b8cd2 (2e:4cd2)
+PeoplePlaces3: ; b8cd2 (2e:4cd2)
ld hl, UnknownText_0xb8ced
call Random
- cp $7b
- ld a, $2e
- jr c, .asm_b8ce0
- ld a, $30
-.asm_b8ce0
+ cp $7b ; 48 percent
+ ld a, PLACES_AND_PEOPLE_4 ; People
+ jr c, .ok
+ ld a, PLACES_AND_PEOPLE_6 ; Places
+.ok
jp NextRadioLine
; b8ce3 (2e:4ce3)
@@ -1260,46 +1266,46 @@ UnknownText_0xb8ced: ; 0xb8ced
db "@"
; 0xb8cf2
-LuckyNumberShow18: ; b8cf2 (2e:4cf2)
+PeoplePlaces4: ; People
call Random
- and " "
+ and $7f
inc a
- cp $43
- jr nc, LuckyNumberShow18
+ cp NUM_TRAINER_CLASSES - 1
+ jr nc, PeoplePlaces4
push af
- ld hl, Unknown_b8d3e
+ ld hl, .E4Names
ld a, [StatusFlags]
- bit 6, a
- jr z, .NotMet
- ld hl, Unknown_b8d43
+ bit 6, a ; ENGINE_CREDITS_SKIP
+ jr z, .ok
+ ld hl, .KantoLeaderNames
ld a, [KantoBadges]
cp %11111111
- jr nz, .NotMet
- ld hl, Unknown_b8d4b
-.NotMet
+ jr nz, .ok
+ ld hl, .MiscNames
+.ok
pop af
ld c, a
- ld de, $1
+ ld de, 1
push bc
call IsInArray
pop bc
- jr c, LuckyNumberShow18
+ jr c, PeoplePlaces4
push bc
callab GetTrainerClassName
ld de, StringBuffer1
call CopyName1
pop bc
- ld b, $1
+ ld b, 1
callab GetTrainerName
ld hl, UnknownText_0xb8d51
- ld a, $2f
+ ld a, PLACES_AND_PEOPLE_5
jp NextRadioLine
; b8d3e (2e:4d3e)
-Unknown_b8d3e: db $0b, $0d, $0e, $0f, $10
-Unknown_b8d43: db $11, $12, $13, $15, $1a, $23, $2e, $40
-Unknown_b8d4b: db $09, $0a, $0c, $2a, $3f
- db $ff
+.E4Names: db WILL, BRUNO, KAREN, KOGA, CHAMPION ; $0b, $0d, $0e, $0f, $10
+.KantoLeaderNames: db BROCK, MISTY, LT_SURGE, ERIKA, JANINE, SABRINA, BLAINE, BLUE ; $11, $12, $13, $15, $1a, $23, $2e, $40
+.MiscNames: db RIVAL1, POKEMON_PROF, CAL, RIVAL2, RED ; $09, $0a, $0c, $2a, $3f
+ db -1
; b8d51
UnknownText_0xb8d51: ; 0xb8d51
@@ -1308,12 +1314,12 @@ UnknownText_0xb8d51: ; 0xb8d51
db "@"
; 0xb8d56
-LuckyNumberShow19: ; b8d56 (2e:4d56)
+PeoplePlaces5: ; b8d56 (2e:4d56)
call Random
and $f
ld e, a
ld d, 0
- ld hl, Unknown_b8d7d
+ ld hl, .Descriptors
rept 2
add hl, de
endr
@@ -1321,138 +1327,138 @@ endr
ld h, [hl]
ld l, a
call Random
- cp $a
- ld a, $5
- jr c, .asm_b8d7a
+ cp $a ; 6.25 percent
+ ld a, PLACES_AND_PEOPLE
+ jr c, .ok
call Random
- cp $7b
- ld a, $2e
- jr c, .asm_b8d7a
- ld a, $30
-.asm_b8d7a
+ cp $7b ; 48 percent
+ ld a, PLACES_AND_PEOPLE_4 ; People
+ jr c, .ok
+ ld a, PLACES_AND_PEOPLE_6 ; Places
+.ok
jp NextRadioLine
; b8d7d (2e:4d7d)
-Unknown_b8d7d: ; b8d7d
- dw UnknownText_0xb8d9d
- dw UnknownText_0xb8da2
- dw UnknownText_0xb8da7
- dw UnknownText_0xb8dac
- dw UnknownText_0xb8db1
- dw UnknownText_0xb8db6
- dw UnknownText_0xb8dbb
- dw UnknownText_0xb8dc0
- dw UnknownText_0xb8dc5
- dw UnknownText_0xb8dca
- dw UnknownText_0xb8dcf
- dw UnknownText_0xb8dd4
- dw UnknownText_0xb8dd9
- dw UnknownText_0xb8dde
- dw UnknownText_0xb8de3
- dw UnknownText_0xb8de8
+.Descriptors: ; b8d7d
+ dw PnP_cute
+ dw PnP_lazy
+ dw PnP_happy
+ dw PnP_noisy
+ dw PnP_precocious
+ dw PnP_bold
+ dw PnP_picky
+ dw PnP_sortofok
+ dw PnP_justsoso
+ dw PnP_actuallygreat
+ dw PnP_justmytype
+ dw PnP_socool
+ dw PnP_inspiring
+ dw PnP_weird
+ dw PnP_rightforme
+ dw PnP_odd
; b8d9d
-UnknownText_0xb8d9d: ; 0xb8d9d
+PnP_cute: ; 0xb8d9d
; is cute.
text_jump UnknownText_0x1bcc80
db "@"
; 0xb8da2
-UnknownText_0xb8da2: ; 0xb8da2
+PnP_lazy: ; 0xb8da2
; is sort of lazy.
text_jump UnknownText_0x1bcc8b
db "@"
; 0xb8da7
-UnknownText_0xb8da7: ; 0xb8da7
+PnP_happy: ; 0xb8da7
; is always happy.
text_jump UnknownText_0x1bcc9e
db "@"
; 0xb8dac
-UnknownText_0xb8dac: ; 0xb8dac
+PnP_noisy: ; 0xb8dac
; is quite noisy.
text_jump UnknownText_0x1bccb1
db "@"
; 0xb8db1
-UnknownText_0xb8db1: ; 0xb8db1
+PnP_precocious: ; 0xb8db1
; is precocious.
text_jump UnknownText_0x1bccc3
db "@"
; 0xb8db6
-UnknownText_0xb8db6: ; 0xb8db6
+PnP_bold: ; 0xb8db6
; is somewhat bold.
text_jump UnknownText_0x1bccd4
db "@"
; 0xb8dbb
-UnknownText_0xb8dbb: ; 0xb8dbb
+PnP_picky: ; 0xb8dbb
; is too picky!
text_jump UnknownText_0x1bcce8
db "@"
; 0xb8dc0
-UnknownText_0xb8dc0: ; 0xb8dc0
+PnP_sortofok: ; 0xb8dc0
; is sort of OK.
text_jump UnknownText_0x1bccf8
db "@"
; 0xb8dc5
-UnknownText_0xb8dc5: ; 0xb8dc5
+PnP_justsoso: ; 0xb8dc5
; is just so-so.
text_jump UnknownText_0x1bcd09
db "@"
; 0xb8dca
-UnknownText_0xb8dca: ; 0xb8dca
+PnP_actuallygreat: ; 0xb8dca
; is actually great.
text_jump UnknownText_0x1bcd1a
db "@"
; 0xb8dcf
-UnknownText_0xb8dcf: ; 0xb8dcf
+PnP_justmytype: ; 0xb8dcf
; is just my type.
text_jump UnknownText_0x1bcd2f
db "@"
; 0xb8dd4
-UnknownText_0xb8dd4: ; 0xb8dd4
+PnP_socool: ; 0xb8dd4
; is so cool, no?
text_jump UnknownText_0x1bcd42
db "@"
; 0xb8dd9
-UnknownText_0xb8dd9: ; 0xb8dd9
+PnP_inspiring: ; 0xb8dd9
; is inspiring!
text_jump UnknownText_0x1bcd54
db "@"
; 0xb8dde
-UnknownText_0xb8dde: ; 0xb8dde
+PnP_weird: ; 0xb8dde
; is kind of weird.
text_jump UnknownText_0x1bcd64
db "@"
; 0xb8de3
-UnknownText_0xb8de3: ; 0xb8de3
+PnP_rightforme: ; 0xb8de3
; is right for me?
text_jump UnknownText_0x1bcd78
db "@"
; 0xb8de8
-UnknownText_0xb8de8: ; 0xb8de8
+PnP_odd: ; 0xb8de8
; is definitely odd!
text_jump UnknownText_0x1bcd8b
db "@"
; 0xb8ded
-LuckyNumberShow20: ; b8ded (2e:4ded)
+PeoplePlaces6: ; Places
call Random
- cp $9
- jr nc, LuckyNumberShow20
- ld hl, Unknown_b8e11
+ cp 9
+ jr nc, PeoplePlaces6
+ ld hl, .Maps
ld c, a
ld b, 0
rept 2
@@ -1465,11 +1471,11 @@ endr
ld e, a
callba GetLandmarkName
ld hl, UnknownText_0xb8e23
- ld a, $31
+ ld a, PLACES_AND_PEOPLE_7
jp NextRadioLine
; b8e11 (2e:4e11)
-Unknown_b8e11: ; b8e11
+.Maps: ; b8e11
map PALLET_TOWN
map ROUTE_22
map PEWTER_CITY
@@ -1487,12 +1493,12 @@ UnknownText_0xb8e23: ; 0xb8e23
db "@"
; 0xb8e28
-LuckyNumberShow21: ; b8e28 (2e:4e28)
+PeoplePlaces7: ; b8e28 (2e:4e28)
call Random
and $f
ld e, a
ld d, 0
- ld hl, Unknown_b8e52
+ ld hl, .Descriptors
rept 2
add hl, de
endr
@@ -1501,86 +1507,86 @@ endr
ld l, a
call CopyRadioTextToRAM
call Random
- cp $a
- ld a, $5
- jr c, .asm_b8e4f
+ cp $a ; 6.25 percent
+ ld a, PLACES_AND_PEOPLE
+ jr c, .ok
call Random
- cp $7b
- ld a, $2e
- jr c, .asm_b8e4f
- ld a, $30
-.asm_b8e4f
+ cp $7b ; 48 percent
+ ld a, PLACES_AND_PEOPLE_4 ; People
+ jr c, .ok
+ ld a, PLACES_AND_PEOPLE_6 ; Places
+.ok
jp PrintRadioLine
; b8e52 (2e:4e52)
-Unknown_b8e52: ; b8e52
- dw UnknownText_0xb8d9d
- dw UnknownText_0xb8da2
- dw UnknownText_0xb8da7
- dw UnknownText_0xb8dac
- dw UnknownText_0xb8db1
- dw UnknownText_0xb8db6
- dw UnknownText_0xb8dbb
- dw UnknownText_0xb8dc0
- dw UnknownText_0xb8dc5
- dw UnknownText_0xb8dca
- dw UnknownText_0xb8dcf
- dw UnknownText_0xb8dd4
- dw UnknownText_0xb8dd9
- dw UnknownText_0xb8dde
- dw UnknownText_0xb8de3
- dw UnknownText_0xb8de8
+.Descriptors: ; b8e52
+ dw PnP_cute
+ dw PnP_lazy
+ dw PnP_happy
+ dw PnP_noisy
+ dw PnP_precocious
+ dw PnP_bold
+ dw PnP_picky
+ dw PnP_sortofok
+ dw PnP_justsoso
+ dw PnP_actuallygreat
+ dw PnP_justmytype
+ dw PnP_socool
+ dw PnP_inspiring
+ dw PnP_weird
+ dw PnP_rightforme
+ dw PnP_odd
; b8e72
RocketRadio1: ; b8e72 (2e:4e72)
call StartRadioStation
ld hl, UnknownText_0xb8ec5
- ld a, $32
+ ld a, ROCKET_RADIO_2
jp NextRadioLine
RocketRadio2: ; b8e7d (2e:4e7d)
ld hl, UnknownText_0xb8eca
- ld a, $33
+ ld a, ROCKET_RADIO_3
jp NextRadioLine
RocketRadio3: ; b8e85 (2e:4e85)
ld hl, UnknownText_0xb8ecf
- ld a, $34
+ ld a, ROCKET_RADIO_4
jp NextRadioLine
RocketRadio4: ; b8e8d (2e:4e8d)
ld hl, UnknownText_0xb8ed4
- ld a, $35
+ ld a, ROCKET_RADIO_5
jp NextRadioLine
RocketRadio5: ; b8e95 (2e:4e95)
ld hl, UnknownText_0xb8ed9
- ld a, $36
+ ld a, ROCKET_RADIO_6
jp NextRadioLine
RocketRadio6: ; b8e9d (2e:4e9d)
ld hl, UnknownText_0xb8ede
- ld a, $37
+ ld a, ROCKET_RADIO_7
jp NextRadioLine
RocketRadio7: ; b8ea5 (2e:4ea5)
ld hl, UnknownText_0xb8ee3
- ld a, $38
+ ld a, ROCKET_RADIO_8
jp NextRadioLine
RocketRadio8: ; b8ead (2e:4ead)
ld hl, UnknownText_0xb8ee8
- ld a, $39
+ ld a, ROCKET_RADIO_9
jp NextRadioLine
RocketRadio9: ; b8eb5 (2e:4eb5)
ld hl, UnknownText_0xb8eed
- ld a, $3a
+ ld a, ROCKET_RADIO_10
jp NextRadioLine
RocketRadio10: ; b8ebd (2e:4ebd)
ld hl, UnknownText_0xb8ef2
- ld a, $7
+ ld a, ROCKET_RADIO
jp NextRadioLine
; b8ec5 (2e:4ec5)
@@ -1646,32 +1652,32 @@ UnknownText_0xb8ef2: ; 0xb8ef2
PokeFluteRadio: ; b8ef7 (2e:4ef7)
call StartRadioStation
- ld a, $1
+ ld a, 1
ld [wd005], a
ret
-EvolutionRadio: ; b8f00 (2e:4f00)
+UnownRadio: ; b8f00 (2e:4f00)
call StartRadioStation
- ld a, $1
+ ld a, 1
ld [wd005], a
ret
-UnownRadio: ; b8f09 (2e:4f09)
+EvolutionRadio: ; b8f09 (2e:4f09)
call StartRadioStation
- ld a, $1
+ ld a, 1
ld [wd005], a
ret
BuenasPassword1: ; b8f12 (2e:4f12)
; Determine if we need to be here
call BuenasPasswordCheckMidnight
- jp nc, Functionb8f22
+ jp nc, .PlayPassword
ld a, [wd005]
and a
jp z, BuenasPassword20
jp BuenasPassword8
-Functionb8f22: ; b8f22 (2e:4f22)
+.PlayPassword: ; b8f22 (2e:4f22)
call StartRadioStation
ld a, [hBGMapMode] ; $ff00+$d4
push af
@@ -1683,25 +1689,25 @@ Functionb8f22: ; b8f22 (2e:4f22)
pop af
ld [hBGMapMode], a ; $ff00+$d4
ld hl, UnknownText_0xb9182
- ld a, $40
+ ld a, BUENAS_PASSWORD_2
jp NextRadioLine
BuenasPassword2: ; b8f3f (2e:4f3f)
ld hl, UnknownText_0xb9187
- ld a, $41
+ ld a, BUENAS_PASSWORD_3
jp NextRadioLine
BuenasPassword3: ; b8f47 (2e:4f47)
call BuenasPasswordCheckMidnight
ld hl, UnknownText_0xb918c
jp c, BuenasPasswordAfterMidnight
- ld a, $42
+ ld a, BUENAS_PASSWORD_4
jp NextRadioLine
BuenasPassword4: ; b8f55 (2e:4f55)
call BuenasPasswordCheckMidnight
jp c, BuenasPassword8
- ld a, [wdc4a]
+ ld a, [wBuenasPassword]
; If we already generated the password today, we don't need to generate a new one.
ld hl, WeeklyFlags
bit 7, [hl]
@@ -1721,9 +1727,9 @@ BuenasPassword4: ; b8f55 (2e:4f55)
and $3
cp $3
jr nc, .greater_than_three
-; The high nybble of wdc4a will now contain the password group index, and the low nybble contains the actual password.
+; The high nybble of wBuenasPassword will now contain the password group index, and the low nybble contains the actual password.
add e
- ld [wdc4a], a
+ ld [wBuenasPassword], a
; Set the flag so that we don't generate a new password this week.
ld hl, WeeklyFlags
set 7, [hl]
@@ -1731,7 +1737,7 @@ BuenasPassword4: ; b8f55 (2e:4f55)
ld c, a
call GetBuenasPassword
ld hl, UnknownText_0xb9191
- ld a, $43
+ ld a, BUENAS_PASSWORD_5
jp NextRadioLine
GetBuenasPassword: ; b8f8f
@@ -1859,19 +1865,19 @@ PasswordTable: ; b8ff9
BuenasPassword5: ; b909c (2e:509c)
ld hl, UnknownText_0xb9196
- ld a, $44
+ ld a, BUENAS_PASSWORD_6
jp NextRadioLine
BuenasPassword6: ; b90a4 (2e:50a4)
ld hl, UnknownText_0xb919b
- ld a, $45
+ ld a, BUENAS_PASSWORD_7
jp NextRadioLine
BuenasPassword7: ; b90ac (2e:50ac)
call BuenasPasswordCheckMidnight
ld hl, UnknownText_0xb91a0
jr c, BuenasPasswordAfterMidnight
- ld a, $4
+ ld a, BUENAS_PASSWORD
jp NextRadioLine
BuenasPasswordAfterMidnight: ; b90b9 (2e:50b9)
@@ -1879,69 +1885,69 @@ BuenasPasswordAfterMidnight: ; b90b9 (2e:50b9)
ld hl, WeeklyFlags
res 7, [hl]
pop hl
- ld a, $46
+ ld a, BUENAS_PASSWORD_8
jp NextRadioLine
BuenasPassword8: ; b90c5 (2e:50c5)
ld hl, WeeklyFlags
res 7, [hl]
ld hl, UnknownText_0xb91d2
- ld a, $47
+ ld a, BUENAS_PASSWORD_9
jp NextRadioLine
BuenasPassword9: ; b90d2 (2e:50d2)
ld hl, UnknownText_0xb91a5
- ld a, $48
+ ld a, BUENAS_PASSWORD_10
jp NextRadioLine
BuenasPassword10: ; b90da (2e:50da)
ld hl, UnknownText_0xb91aa
- ld a, $49
+ ld a, BUENAS_PASSWORD_11
jp NextRadioLine
BuenasPassword11: ; b90e2 (2e:50e2)
ld hl, UnknownText_0xb91af
- ld a, $4a
+ ld a, BUENAS_PASSWORD_12
jp NextRadioLine
BuenasPassword12: ; b90ea (2e:50ea)
ld hl, UnknownText_0xb91b4
- ld a, $4b
+ ld a, BUENAS_PASSWORD_13
jp NextRadioLine
BuenasPassword13: ; b90f2 (2e:50f2)
ld hl, UnknownText_0xb91b9
- ld a, $4c
+ ld a, BUENAS_PASSWORD_14
jp NextRadioLine
BuenasPassword14: ; b90fa (2e:50fa)
ld hl, UnknownText_0xb91be
- ld a, $4d
+ ld a, BUENAS_PASSWORD_15
jp NextRadioLine
BuenasPassword15: ; b9102 (2e:5102)
ld hl, UnknownText_0xb91c3
- ld a, $4e
+ ld a, BUENAS_PASSWORD_16
jp NextRadioLine
BuenasPassword16: ; b910a (2e:510a)
ld hl, UnknownText_0xb91c8
- ld a, $4f
+ ld a, BUENAS_PASSWORD_17
jp NextRadioLine
BuenasPassword17: ; b9112 (2e:5112)
ld hl, UnknownText_0xb91cd
- ld a, $50
+ ld a, BUENAS_PASSWORD_18
jp NextRadioLine
BuenasPassword18: ; b911a (2e:511a)
ld hl, UnknownText_0xb91d2
- ld a, $51
+ ld a, BUENAS_PASSWORD_19
jp NextRadioLine
BuenasPassword19: ; b9122 (2e:5122)
ld hl, UnknownText_0xb91d2
- ld a, $52
+ ld a, BUENAS_PASSWORD_20
jp NextRadioLine
BuenasPassword20: ; b912a (2e:512a)
@@ -1958,7 +1964,7 @@ BuenasPassword20: ; b912a (2e:512a)
xor a
ld [wd005], a
ld hl, UnknownText_0xb91d7
- ld a, $53
+ ld a, BUENAS_PASSWORD_21
jp NextRadioLine
BuenasPassword21: ; b9152 (2e:5152)
@@ -1969,7 +1975,7 @@ BuenasPassword21: ; b9152 (2e:5152)
call BuenasPasswordCheckMidnight
jp nc, BuenasPassword1
ld hl, UnknownText_0xb91d7
- ld a, $53
+ ld a, BUENAS_PASSWORD_21
jp NextRadioLine
BuenasPasswordCheckMidnight: ; b9169 (2e:5169)
@@ -2115,7 +2121,7 @@ endr
ld e, [hl]
inc hl
ld d, [hl]
- callab RadioMusicNone
+ callab RadioMusicRestartDE
ret
; b920b (2e:520b)
diff --git a/engine/radio2.asm b/engine/radio2.asm
new file mode 100644
index 000000000..b843315d4
--- /dev/null
+++ b/engine/radio2.asm
@@ -0,0 +1,404 @@
+_UpdateRadioStation: ; 9163e (24:563e)
+ jr UpdateRadioStation
+
+Function91640: ; 91640 (24:5640)
+ push bc
+ call .TuningKnob
+ pop bc
+ ld a, [wRadioTuningKnob]
+ ld hl, $6
+ add hl, bc
+ ld [hl], a
+ ret
+
+.TuningKnob: ; 9164e (24:564e)
+ ld hl, hJoyLast
+ ld a, [hl]
+ and D_DOWN
+ jr nz, .down
+ ld a, [hl]
+ and D_UP
+ jr nz, .up
+ ret
+
+.down
+ ld hl, wRadioTuningKnob
+ ld a, [hl]
+ and a
+ ret z
+rept 2
+ dec [hl]
+endr
+ jr .update
+
+.up
+ ld hl, wRadioTuningKnob
+ ld a, [hl]
+ cp 80
+ ret nc
+rept 2
+ inc [hl]
+endr
+
+.update
+
+UpdateRadioStation: ; 9166f (24:566f)
+ ld hl, wRadioTuningKnob
+ ld d, [hl]
+ ld hl, RadioChannels
+.loop
+ ld a, [hli]
+ cp -1
+ jr z, .nostation
+ cp d
+ jr z, .foundstation
+rept 2
+ inc hl
+endr
+ jr .loop
+
+.nostation
+ call NoRadioStation
+ ret
+
+.foundstation
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld de, .returnafterstation
+ push de
+ jp [hl]
+.returnafterstation
+ ld a, [wc6d9]
+ and a
+ ret z
+ xor a
+ ld [hBGMapMode], a
+ hlcoord 2, 9
+ call PlaceString
+ ld a, $1
+ ld [hBGMapMode], a
+ ret
+; 916a1 (24:56a1)
+
+Function916a1: ; 916a1
+ ld [wc6d9], a
+ ld a, [hli]
+ ld [wc6da], a
+ ld a, [hli]
+ ld [wc6db], a
+ ret
+; 916ad
+
+
+RadioChannels:
+; frequencies and the shows that play on them.
+; frequency value given here = 4 × ingame_frequency − 2
+ dbw 16, .PkmnTalkAndPokedexShow
+ dbw 28, .PokemonMusic
+ dbw 32, .LuckyChannel
+ dbw 40, .BuenasPassword
+ dbw 52, .RuinsOfAlphRadio
+ dbw 64, .PlacesAndPeople
+ dbw 72, .LetsAllSing
+ dbw 78, .PokeFluteRadio
+ dbw 80, .EvolutionRadio
+ db $ff
+
+.PkmnTalkAndPokedexShow
+; Pokédex Show in the morning
+; Oak's Pokémon Talk in the afternoon and evening
+ call .InJohto
+ jr nc, .NoSignal
+ ld a, [TimeOfDay]
+ and a
+ jp z, LoadStation_PokedexShow
+ jp LoadStation_OaksPokemonTalk
+
+.PokemonMusic
+ call .InJohto
+ jr nc, .NoSignal
+ jp LoadStation_PokemonMusic
+
+.LuckyChannel
+ call .InJohto
+ jr nc, .NoSignal
+ jp LoadStation_LuckyChannel
+
+.BuenasPassword
+ call .InJohto
+ jr nc, .NoSignal
+ jp LoadStation_BuenasPassword
+
+.RuinsOfAlphRadio
+ ld a, [wc6d8]
+ cp RUINS_OF_ALPH
+ jr nz, .NoSignal
+ jp LoadStation_UnownRadio
+
+.PlacesAndPeople
+ call .InJohto
+ jr c, .NoSignal
+ ld a, [wPokegearFlags]
+ bit 3, a
+ jr z, .NoSignal
+ jp LoadStation_PlacesAndPeople
+
+.LetsAllSing
+ call .InJohto
+ jr c, .NoSignal
+ ld a, [wPokegearFlags]
+ bit 3, a
+ jr z, .NoSignal
+ jp LoadStation_LetsAllSing
+
+.PokeFluteRadio
+ call .InJohto
+ jr c, .NoSignal
+ ld a, [wPokegearFlags]
+ bit 3, a
+ jr z, .NoSignal
+ jp LoadStation_PokeFluteRadio
+
+.EvolutionRadio
+; This station airs in the Lake of Rage area when Rocket are still in Mahogany.
+
+ ld a, [StatusFlags]
+ bit 4, a
+ jr z, .NoSignal
+
+ ld a, [wc6d8]
+ cp MAHOGANY_TOWN
+ jr z, .ok
+ cp ROUTE_43
+ jr z, .ok
+ cp LAKE_OF_RAGE
+ jr nz, .NoSignal
+.ok
+ jp LoadStation_EvolutionRadio
+
+.NoSignal
+ call NoRadioStation
+ ret
+
+.InJohto
+; if in Johto or on the S.S. Aqua, set carry
+; otherwise clear carry
+ ld a, [wc6d8]
+ cp FAST_SHIP
+ jr z, .johto
+ cp KANTO_LANDMARK
+ jr c, .johto
+.kanto
+ and a
+ ret
+.johto
+ scf
+ ret
+
+
+
+LoadStation_OaksPokemonTalk: ; 91753 (24:5753)
+ xor a ; OAKS_POKEMON_TALK
+ ld [wd002], a
+ ld [wd005], a
+ ld a, BANK(PlayRadioShow)
+ ld hl, PlayRadioShow
+ call Radio_BackUpFarCallParams
+ ld de, OaksPkmnTalkName
+ ret
+
+LoadStation_PokedexShow: ; 91766 (24:5766)
+ ld a, POKEDEX_SHOW
+ ld [wd002], a
+ xor a
+ ld [wd005], a
+ ld a, BANK(PlayRadioShow)
+ ld hl, PlayRadioShow
+ call Radio_BackUpFarCallParams
+ ld de, PokedexShowName
+ ret
+
+LoadStation_PokemonMusic: ; 9177b (24:577b)
+ ld a, POKEMON_MUSIC
+ ld [wd002], a
+ xor a
+ ld [wd005], a
+ ld a, BANK(PlayRadioShow)
+ ld hl, PlayRadioShow
+ call Radio_BackUpFarCallParams
+ ld de, PokemonMusicName
+ ret
+
+LoadStation_LuckyChannel: ; 91790 (24:5790)
+ ld a, LUCKY_CHANNEL
+ ld [wd002], a
+ xor a
+ ld [wd005], a
+ ld a, BANK(PlayRadioShow)
+ ld hl, PlayRadioShow
+ call Radio_BackUpFarCallParams
+ ld de, LuckyChannelName
+ ret
+
+LoadStation_BuenasPassword: ; 917a5 (24:57a5)
+ ld a, BUENAS_PASSWORD
+ ld [wd002], a
+ xor a
+ ld [wd005], a
+ ld a, BANK(PlayRadioShow)
+ ld hl, PlayRadioShow
+ call Radio_BackUpFarCallParams
+ ld de, NotBuenasPasswordName
+ ld a, [StatusFlags2]
+ bit 0, a
+ ret z
+ ld de, BuenasPasswordName
+ ret
+; 917c3 (24:57c3)
+
+BuenasPasswordName: db "BUENA'S PASSWORD@"
+NotBuenasPasswordName: db "@"
+
+LoadStation_UnownRadio: ; 917d5 (24:57d5)
+ ld a, UNOWN_RADIO
+ ld [wd002], a
+ xor a
+ ld [wd005], a
+ ld a, BANK(PlayRadioShow)
+ ld hl, PlayRadioShow
+ call Radio_BackUpFarCallParams
+ ld de, UnknownStationName
+ ret
+
+LoadStation_PlacesAndPeople: ; 917ea (24:57ea)
+ ld a, PLACES_AND_PEOPLE
+ ld [wd002], a
+ xor a
+ ld [wd005], a
+ ld a, BANK(PlayRadioShow)
+ ld hl, PlayRadioShow
+ call Radio_BackUpFarCallParams
+ ld de, PlacesAndPeopleName
+ ret
+
+LoadStation_LetsAllSing: ; 917ff (24:57ff)
+ ld a, LETS_ALL_SING
+ ld [wd002], a
+ xor a
+ ld [wd005], a
+ ld a, BANK(PlayRadioShow)
+ ld hl, PlayRadioShow
+ call Radio_BackUpFarCallParams
+ ld de, LetsAllSingName
+ ret
+; 91814 (24:5814)
+
+LoadStation_RocketRadio: ; 91814
+ ld a, ROCKET_RADIO
+ ld [wd002], a
+ xor a
+ ld [wd005], a
+ ld a, BANK(PlayRadioShow)
+ ld hl, PlayRadioShow
+ call Radio_BackUpFarCallParams
+ ld de, LetsAllSingName
+ ret
+; 91829
+
+LoadStation_PokeFluteRadio: ; 91829 (24:5829)
+ ld a, POKE_FLUTE_RADIO
+ ld [wd002], a
+ xor a
+ ld [wd005], a
+ ld a, BANK(PlayRadioShow)
+ ld hl, PlayRadioShow
+ call Radio_BackUpFarCallParams
+ ld de, PokeFluteStationName
+ ret
+
+LoadStation_EvolutionRadio: ; 9183e (24:583e)
+ ld a, EVOLUTION_RADIO
+ ld [wd002], a
+ xor a
+ ld [wd005], a
+ ld a, BANK(PlayRadioShow)
+ ld hl, PlayRadioShow
+ call Radio_BackUpFarCallParams
+ ld de, UnknownStationName
+ ret
+; 91853 (24:5853)
+
+LoadStation_Dummy: ; 91853
+ ret
+
+RadioMusicRestartDE: ; 91854 (24:5854)
+ push de
+ ld a, e
+ ld [wc6dc], a
+ ld de, MUSIC_NONE
+ call PlayMusic
+ pop de
+ ld a, e
+ ld [wMapMusic], a
+ call PlayMusic
+ ret
+
+RadioMusicRestartPokemonChannel: ; 91868 (24:5868)
+ push de
+ ld a, $fe
+ ld [wc6dc], a
+ ld de, MUSIC_NONE
+ call PlayMusic
+ pop de
+ ld de, MUSIC_POKEMON_CHANNEL
+ call PlayMusic
+ ret
+
+Radio_BackUpFarCallParams: ; 9187c (24:587c)
+ ld [wc6d9], a
+ ld a, l
+ ld [wc6da], a
+ ld a, h
+ ld [wc6db], a
+ ret
+
+NoRadioStation: ; 91888 (24:5888)
+ call NoRadioMusic
+ call NoRadioName
+ xor a
+ ld [wc6d9], a
+ ld [wc6da], a
+ ld [wc6db], a
+ ld a, $1
+ ld [hBGMapMode], a ; $ff00+$d4
+ ret
+
+NoRadioMusic: ; 9189d (24:589d)
+ ld de, MUSIC_NONE
+ call PlayMusic
+ ld a, $ff
+ ld [wc6dc], a
+ ret
+
+NoRadioName: ; 918a9 (24:58a9)
+ xor a
+ ld [hBGMapMode], a ; $ff00+$d4
+ hlcoord 1, 8
+ ld bc, $312
+ call ClearBox
+ hlcoord 0, 12
+ ld bc, $412
+ call TextBox
+ ret
+; 918bf
+
+OaksPkmnTalkName: db "OAK's <PK><MN> Talk@"
+PokedexShowName: db "#DEX Show@"
+PokemonMusicName: db "#MON Music@"
+LuckyChannelName: db "Lucky Channel@"
+UnknownStationName: db "?????@"
+PlacesAndPeopleName: db "Places & People@"
+LetsAllSingName: db "Let's All Sing!@"
+PokeFluteStationName: db "# FLUTE@"
+; 9191c
diff --git a/engine/save.asm b/engine/save.asm
index 92b65398b..549991207 100644
--- a/engine/save.asm
+++ b/engine/save.asm
@@ -380,7 +380,7 @@ ErasePreviousSave: ; 14cbb
ld [sStackTop + 1], a
call CloseSRAM
ld a, $1
- ld [wd4b4], a
+ ld [wSavedAtLeastOnce], a
ret
; 14ce2
@@ -486,7 +486,7 @@ Function14d93: ; 14d93
Function14da0: ; 14da0
- ld a, [wd4b4]
+ ld a, [wSavedAtLeastOnce]
and a
ret nz
call ErasePreviousSave
diff --git a/engine/scripting.asm b/engine/scripting.asm
index 3ef1c3853..2dadafee1 100644
--- a/engine/scripting.asm
+++ b/engine/scripting.asm
@@ -529,7 +529,7 @@ Script_interpretmenu: ; 0x96f41
ld a, [ScriptBank]
ld hl, InterpretMenu
rst FarCall
- ld a, [wcf88]
+ ld a, [wPocketCursorBuffer]
jr nc, .ok
xor a
.ok
@@ -651,7 +651,7 @@ Script_specialsound: ; 0x96fe4
; script command 0x88
callba CheckItemPocket
- ld a, [wd142]
+ ld a, [wItemAttributeParamBuffer]
cp TM_HM
ld de, SFX_GET_TM
jr z, .play
@@ -665,7 +665,7 @@ Script_specialsound: ; 0x96fe4
GetPocketName: ; 96ffe
callba CheckItemPocket
- ld a, [wd142]
+ ld a, [wItemAttributeParamBuffer]
dec a
ld hl, .Pockets
and 3
@@ -1258,7 +1258,7 @@ Script_appear: ; 0x972dd
call GetScriptByte
call GetScriptPerson
call _CopyObjectStruct
- ld a, [$ffaf]
+ ld a, [hConnectionStripLength]
ld b, 0 ; clear
call ApplyEventActionAppearDisappear
ret
@@ -1276,7 +1276,7 @@ Script_disappear: ; 0x972ee
ld a, [hLastTalked]
.ok
call DeleteObjectStruct
- ld a, [$ffaf]
+ ld a, [hConnectionStripLength]
ld b, 1 ; set
call ApplyEventActionAppearDisappear
callba RefreshMapAppearDisappear
@@ -1338,12 +1338,12 @@ Script_moveperson: ; 0x97341
call GetScriptPerson
ld b, a
call GetScriptByte
- add $4
+ add 4
ld d, a
call GetScriptByte
- add $4
+ add 4
ld e, a
- callba Function807e
+ callba CopyDECoordsToMapObject
ret
; 0x9735b
@@ -1385,10 +1385,10 @@ Script_loademote: ; 0x97384
; bubble (SingleByteParam)
call GetScriptByte
- cp $ff
- jr nz, .asm_9738e ; 0x97389 $3
+ cp -1
+ jr nz, .not_var_emote ; 0x97389 $3
ld a, [ScriptVar]
-.asm_9738e
+.not_var_emote
ld c, a
callba Function1442f
ret
@@ -1417,7 +1417,7 @@ Script_showemote: ; 0x97396
; 0x973b6
ShowEmoteScript: ; 973b6
- loademote $ff
+ loademote -1
applymovement2 .Show
pause 0
applymovement2 .Hide
@@ -1448,12 +1448,12 @@ Script_earthquake: ; 0x973c7
ld [wd003], a
and $3f
ld [wd005], a
- ld b, BANK(UnknownScript_0x973e6)
- ld de, UnknownScript_0x973e6
+ ld b, BANK(.script)
+ ld de, .script
jp ScriptCall
; 0x973e6
-UnknownScript_0x973e6: ; 973e6
+.script: ; 973e6
applymovement PLAYER, wd002
end
; 973eb
@@ -1487,7 +1487,7 @@ Script_battlecheck: ; 0x973fb
Script_loadtrainerdata: ; 0x97400
; script command 0x5c
- ld a, $81
+ ld a, (1 << 7) | 1
ld [wd459], a
ld a, [WalkingDirection]
ld [OtherTrainerClass], a
@@ -1502,7 +1502,7 @@ Script_loadpokedata: ; 0x97412
; pokemon (PokemonParam)
; level (DecimalParam)
- ld a, $80
+ ld a, (1 << 7)
ld [wd459], a
call GetScriptByte
ld [TempWildMonSpecies], a
@@ -1517,7 +1517,7 @@ Script_loadtrainer: ; 0x97424
; trainer_group (TrainerGroupParam)
; trainer_id (TrainerIdParam)
- ld a, $81
+ ld a, (1 << 7) | 1
ld [wd459], a
call GetScriptByte
ld [OtherTrainerClass], a
@@ -1531,7 +1531,7 @@ Script_startbattle: ; 0x97436
call BufferScreen
predef StartBattle
- ld a, [wd0ee]
+ ld a, [wBattleResult]
and $3f
ld [ScriptVar], a
ret
@@ -1555,26 +1555,28 @@ Script_returnafterbattle: ; 0x97459
ld hl, wd459
ld d, [hl]
ld [hl], $0
- ld a, [wd0ee]
+ ld a, [wBattleResult]
and $3f
cp $1
- jr nz, .asm_97470 ; 0x97466 $8
+ jr nz, .notblackedout ; 0x97466 $8
ld b, BANK(UnknownScript_0x124c1)
ld hl, UnknownScript_0x124c1
jp ScriptJump
-.asm_97470
+
+.notblackedout
bit 0, d
- jr z, .asm_9747c ; 0x97472 $8
- callba Functionfcfec
- jr .asm_9748e ; 0x9747a $12
-.asm_9747c
- ld a, [wd0ee]
+ jr z, .was_wild ; 0x97472 $8
+ callba MomTriesToBuySomething
+ jr .done ; 0x9747a $12
+
+.was_wild
+ ld a, [wBattleResult]
bit 7, a
- jr z, .asm_9748e ; 0x97481 $b
- ld b, BANK(UnknownScript_0x90255)
- ld de, UnknownScript_0x90255
- callba Function97c4f
-.asm_9748e
+ jr z, .done ; 0x97481 $b
+ ld b, BANK(Script_SpecialBillCall)
+ ld de, Script_SpecialBillCall
+ callba LoadScriptBDE
+.done
jp Script_reloadmap
; 0x97491
@@ -1583,8 +1585,8 @@ Script_reloadmap: ; 0x97491
xor a
ld [wd459], a
- ld a, $f3
- ld [$ff9f], a
+ ld a, MAPSETUP_RELOADMAP
+ ld [hMapEntryMethod], a
ld a, $1
call LoadMapStatus
call StopScript
@@ -2202,7 +2204,7 @@ Script_name: ; 0x97716
; memory (SingleByteParam)
call GetScriptByte
- ld [wcf61], a
+ ld [wNamedObjectTypeBuffer], a
ContinueToGetName: ; 0x9771c
call GetScriptByte
@@ -2219,7 +2221,7 @@ Script_trainerclassname: ; 0x9772b
; memory (SingleByteParam)
ld a, TRAINER_NAME
- ld [wcf61], a
+ ld [wNamedObjectTypeBuffer], a
jr ContinueToGetName ; 0x97730 $ea
; 0x97732
@@ -2232,7 +2234,7 @@ Script_readmoney: ; 0x97732
call ResetStringBuffer1
call GetMoneyAccount
ld hl, StringBuffer1
- ld bc, $4306
+ lb bc, PRINTNUM_RIGHTALIGN | 3, 6
call PrintNum
ld de, StringBuffer1
jp ConvertMemToText
@@ -2246,7 +2248,7 @@ Script_readcoins: ; 0x97747
call ResetStringBuffer1
ld hl, StringBuffer1
ld de, Coins
- ld bc, $4206
+ lb bc, PRINTNUM_RIGHTALIGN | 2, 6
call PrintNum
ld de, StringBuffer1
jp ConvertMemToText
@@ -2260,7 +2262,7 @@ Script_RAM2MEM: ; 0x9775c
call ResetStringBuffer1
ld de, ScriptVar
ld hl, StringBuffer1
- ld bc, $4103
+ lb bc, PRINTNUM_RIGHTALIGN | 1, 3
call PrintNum
ld de, StringBuffer1
jp ConvertMemToText
@@ -2656,7 +2658,7 @@ Script_giveegg: ; 0x97968
; level (DecimalParam)
; if no room in the party, return 0 in ScriptVar; else, return 2
- xor a
+ xor a ; PARTYMON
ld [ScriptVar], a
ld [MonType], a
call GetScriptByte
@@ -2811,10 +2813,10 @@ Script_warpfacing: ; 0x97a0e
call GetScriptByte
and $3
ld c, a
- ld a, [wd45b]
+ ld a, [wPlayerSpriteSetupFlags]
set 5, a
or c
- ld [wd45b], a
+ ld [wPlayerSpriteSetupFlags], a
; fall through
Script_warp: ; 0x97a1d
@@ -2838,8 +2840,8 @@ Script_warp: ; 0x97a1d
ld [YCoord], a
ld a, -1
ld [wd001], a
- ld a, -15
- ld [$ff9f], a
+ ld a, MAPSETUP_WARP
+ ld [hMapEntryMethod], a
ld a, 1
call LoadMapStatus
call StopScript
@@ -2850,8 +2852,8 @@ Script_warp: ; 0x97a1d
call GetScriptByte
ld a, -1
ld [wd001], a
- ld a, -5
- ld [$ff9f], a
+ ld a, MAPSETUP_BADWARP
+ ld [hMapEntryMethod], a
ld a, 1
call LoadMapStatus
call StopScript
@@ -2966,7 +2968,7 @@ Script_reloadmappart:: ; 0x97ae3
; script command 0x7c
xor a
- ld [$ffd4], a
+ ld [hBGMapMode], a
call Function2173
call Function2914
callba Function104061
@@ -2994,7 +2996,7 @@ Script_newloadmap: ; 0x97b08
; which_method (SingleByteParam)
call GetScriptByte
- ld [$ff9f], a
+ ld [hMapEntryMethod], a
ld a, 1
call LoadMapStatus
call StopScript
@@ -3011,7 +3013,7 @@ Script_reloadandreturn: ; 0x97b16
Script_loadfont: ; 0x97b1c
; script command 0x47
- call Function2e08
+ call LoadFont
ret
; 0x97b20
@@ -3044,7 +3046,7 @@ Script_loadmovesprites: ; 0x97b2f
; script command 0x49
call Function2e20
- call Function2dcf
+ call LoadMoveSprites
ret
; 0x97b36
@@ -3198,7 +3200,7 @@ Script_halloffame: ; 0x97bd5
Script_credits: ; 0x97bf3
; script command 0xa2
- callba Function86455
+ callba RedCredits
; fallthrough
DisplayCredits:
diff --git a/engine/specials.asm b/engine/specials.asm
index 409b47434..e9fe2987f 100644
--- a/engine/specials.asm
+++ b/engine/specials.asm
@@ -39,7 +39,7 @@ SpecialsPointers:: ; c029
add_special Special_GetMysteryGiftItem
add_special Special_UnlockMysteryGift
-; Bug Catching Contest
+; Map Events
add_special BugContestJudging
add_special CheckPartyFullAfterContest
add_special CheckFirstMonFainted
@@ -83,30 +83,30 @@ SpecialsPointers:: ; c029
add_special PlayMapMusic
add_special RestartMapMusic
add_special HealMachineAnim
- add_special Function8379
- add_special Functionc25a
- add_special Functionc268
- add_special Functionc276
- add_special Functionc284
- add_special Functionc3ef
- add_special Function17421
- add_special Function17440
+ add_special Special_SurfStartStep
+ add_special Special_FindGreaterThanThatLevel
+ add_special Special_FindAtLeastThatHappy
+ add_special Special_FindThatSpecies
+ add_special Special_FindThatSpeciesYourTrainerID
+ add_special Special_CheckUnusedTwoDayTimer ; unreferenced
+ add_special Special_DayCareMon1
+ add_special Special_DayCareMon2
add_special Special_SelectRandomBugContestContestants
- add_special Functionc3fc
+ add_special Special_ActivateFishingSwarm
add_special ToggleMaptileDecorations
add_special ToggleDecorationsVisibility
add_special SpecialGiveShuckle
add_special SpecialReturnShuckle
- add_special Function73f7
+ add_special Special_BillsGrandfather
add_special SpecialCheckPokerus
- add_special Function24b25
- add_special Function24b4e
+ add_special Special_DisplayCoinCaseBalance
+ add_special Special_DisplayMoneyAndCoinBalance
add_special Function24ae8
- add_special Function4d87a
- add_special Functionc434
- add_special Functionc422
- add_special Function4d9d3
- add_special Function88018
+ add_special Special_CheckForLuckyNumberWinners
+ add_special Special_CheckLuckyNumberShowFlag
+ add_special Special_ResetLuckyNumberShowFlag
+ add_special Special_PrintTodaysLuckyNumber
+ add_special Special_SelectApricornForKurt
add_special SpecialNameRater
add_special Functionc2da
add_special GetFirstPokemonHappiness
@@ -117,9 +117,9 @@ SpecialsPointers:: ; c029
add_special RunCallback_04
add_special Functionfb841
add_special SpecialSnorlaxAwake
- add_special Function7413
- add_special Function7418
- add_special Function741d
+ add_special Special_YoungerHaircutBrother
+ add_special Special_OlderHaircutBrother
+ add_special Special_DaisyMassage
add_special Functionc472
add_special ProfOaksPCBoot
add_special SpecialGameboyCheck
@@ -142,9 +142,9 @@ SpecialsPointers:: ; c029
add_special Function170215
add_special Function1704e1
add_special Function17021d
- add_special Function170b44
+ add_special Function_LoadOpponentTrainerAndPokemonsWithOTSprite
add_special Function11ba38
- add_special Function170bd3
+ add_special SpecialCheckForBattleTowerRules
add_special Function117656
add_special Reset
add_special Function1011f1
@@ -156,20 +156,20 @@ SpecialsPointers:: ; c029
add_special Function11c1ab
add_special Function170687
add_special Special_DisplayUnownWords
- add_special Function17d224
+ add_special Special_Menu_ChallengeExplanationCancel
add_special Function17d2b6
add_special Function17d2ce
add_special Function17f53d
add_special Function103612
add_special SpecialHoOhChamber
add_special Function102142
- add_special Function4989a
+ add_special Special_CelebiShrineEvent
add_special Function49bf9
add_special SpecialPokeSeer
add_special SpecialBuenasPassword
add_special SpecialBuenaPrize
add_special SpecialDratini
- add_special Function11485
+ add_special Special_SampleKenjiBreakCountdown
add_special SpecialBeastsCheck
add_special SpecialMonCheck
add_special Functionc225
@@ -186,8 +186,8 @@ SpecialsPointers:: ; c029
add_special Function4ae12
add_special LoadMapPalettes
add_special Function4a927
- add_special Function90a54
- add_special Function90a88
+ add_special Special_InitialSetDSTFlag
+ add_special Special_InitialClearDSTFlag
add_special SpecialNone
; c224
@@ -225,40 +225,40 @@ SpecialSeenMon: ; c252
ret
; c25a
-Functionc25a: ; c25a
+Special_FindGreaterThanThatLevel: ; c25a
ld a, [ScriptVar]
ld b, a
- callba Function4dbd2
- jr z, Functionc298
- jr Functionc292
+ callba _FindGreaterThanThatLevel
+ jr z, FoundNone
+ jr FoundOne
-Functionc268: ; c268
+Special_FindAtLeastThatHappy: ; c268
ld a, [ScriptVar]
ld b, a
- callba Function4dbd9
- jr z, Functionc298
- jr Functionc292
+ callba _FindAtLeastThatHappy
+ jr z, FoundNone
+ jr FoundOne
-Functionc276: ; c276
+Special_FindThatSpecies: ; c276
ld a, [ScriptVar]
ld b, a
- callba Function4dbe0
- jr z, Functionc298
- jr Functionc292
+ callba _FindThatSpecies
+ jr z, FoundNone
+ jr FoundOne
-Functionc284: ; c284
+Special_FindThatSpeciesYourTrainerID: ; c284
ld a, [ScriptVar]
ld b, a
- callba Function4dbe6
- jr z, Functionc298
- jr Functionc292
+ callba _FindThatSpeciesYourTrainerID
+ jr z, FoundNone
+ jr FoundOne
-Functionc292: ; c292
+FoundOne: ; c292
ld a, $1
ld [ScriptVar], a
ret
-Functionc298: ; c298
+FoundNone: ; c298
xor a
ld [ScriptVar], a
ret
@@ -314,9 +314,9 @@ Special_KrissHousePC: ; c2e7
; c2f6
Special_CheckMysteryGift: ; c2f6
- ld a, BANK(s0_abe2)
+ ld a, BANK(sMysteryGiftItem)
call GetSRAMBank
- ld a, [s0_abe2]
+ ld a, [sMysteryGiftItem]
and a
jr z, .no
inc a
@@ -328,9 +328,9 @@ Special_CheckMysteryGift: ; c2f6
; c309
Special_GetMysteryGiftItem: ; c309
- ld a, BANK(s0_abe2)
+ ld a, BANK(sMysteryGiftItem)
call GetSRAMBank
- ld a, [s0_abe2]
+ ld a, [sMysteryGiftItem]
ld [CurItem], a
ld a, $1
ld [wd10c], a
@@ -338,12 +338,12 @@ Special_GetMysteryGiftItem: ; c309
call ReceiveItem
jr nc, .asm_c33d
xor a
- ld [s0_abe2], a
+ ld [sMysteryGiftItem], a
call CloseSRAM
ld a, [CurItem]
ld [wd265], a
call GetItemName
- ld hl, UnknownText_0xc345
+ ld hl, .ReceiveItemText
call PrintText
ld a, $1
ld [ScriptVar], a
@@ -356,7 +356,7 @@ Special_GetMysteryGiftItem: ; c309
ret
; c345
-UnknownText_0xc345: ; 0xc345
+.ReceiveItemText: ; 0xc345
; received item
text_jump UnknownText_0x1bd3be
db "@"
@@ -482,16 +482,16 @@ ScriptReturnCarry: ; c3e2
ret
; c3ef
-Functionc3ef: ; c3ef
- callba Function1150c
- ld a, [wdc3a]
+Special_CheckUnusedTwoDayTimer: ; c3ef
+ callba CheckUnusedTwoDayTimer
+ ld a, [wUnusedTwoDayTimer]
ld [ScriptVar], a
ret
; c3fc
-Functionc3fc: ; c3fc
+Special_ActivateFishingSwarm: ; c3fc
ld a, [ScriptVar]
- ld [wdfce], a
+ ld [wFishingSwarmFlag], a
ret
; c403
@@ -522,16 +522,16 @@ SpecialCheckPokerus: ; c419
jp ScriptReturnCarry
; c422
-Functionc422: ; c422
- callba Function1152b
- ld hl, wdc9d
+Special_ResetLuckyNumberShowFlag: ; c422
+ callba RestartLuckyNumberCountdown
+ ld hl, wLuckyNumberShowFlag
res 0, [hl]
- callba Function5d33
+ callba LoadOrRegenerateLuckyIDNumber
ret
; c434
-Functionc434: ; c434
- callba Function11542
+Special_CheckLuckyNumberShowFlag: ; c434
+ callba CheckLuckyNumberShowFlag
jp ScriptReturnCarry
; c43d
@@ -639,8 +639,8 @@ Functionc4ac: ; c4ac
; c4b9
SpecialTrainerHouse: ; 0xc4b9
- ld a, BANK(s0_abfd)
+ ld a, BANK(sMysteryGiftTrainerHouseFlag)
call GetSRAMBank
- ld a, [s0_abfd]
+ ld a, [sMysteryGiftTrainerHouseFlag]
ld [ScriptVar], a
jp CloseSRAM
diff --git a/engine/std_scripts.asm b/engine/std_scripts.asm
index 95c91b647..5c0df0355 100644
--- a/engine/std_scripts.asm
+++ b/engine/std_scripts.asm
@@ -159,7 +159,7 @@ PokeCenterNurseScript:
.pokerus_done
setflag ENGINE_POKERUS
- specialphonecall ELMCALL_POKERUS
+ specialphonecall SPECIALCALL_POKERUS
end
DifficultBookshelfScript:
@@ -297,7 +297,7 @@ RadioTowerRocketsScript:
clearevent EVENT_RADIO_TOWER_ROCKET_TAKEOVER
clearevent EVENT_USED_THE_CARD_KEY_IN_THE_RADIO_TOWER
setevent EVENT_MAHOGANY_TOWN_POKEFAN_M_BLOCKS_EAST
- specialphonecall ELMCALL_WEIRDBROADCAST
+ specialphonecall SPECIALCALL_WEIRDBROADCAST
domaptrigger MAHOGANY_TOWN, $1
end
@@ -1809,7 +1809,7 @@ CoinVendor_IntroScript: ; 0xbcde0
farwritetext CoinVendor_IntroText
CoinVendor_SellCoinsMenuScript: ; 0xbcde4
- special Function24b4e
+ special Special_DisplayMoneyAndCoinBalance
loadmenudata CoinVendor_MenuDataHeader
interpretmenu2
writebackup
diff --git a/engine/time.asm b/engine/time.asm
new file mode 100755
index 000000000..fce01ffac
--- /dev/null
+++ b/engine/time.asm
@@ -0,0 +1,470 @@
+_InitializeStartDay: ; 113d6
+ call InitializeStartDay
+ ret
+; 113da
+
+ClearDailyTimers: ; 113da
+ xor a
+ ld [wLuckyNumberDayBuffer], a
+ ld [wUnusedTwoDayTimer], a
+ ld [wDailyResetTimer], a
+ ret
+; 113e5
+
+InitCallReceiveDelay:: ; 113e5
+ xor a
+ ld [wTimeCyclesSinceLastCall], a
+
+NextCallReceiveDelay: ; 113e9
+ ld a, [wTimeCyclesSinceLastCall]
+ cp 3
+ jr c, .okay
+ ld a, 3
+
+.okay
+ ld e, a
+ ld d, 0
+ ld hl, .ReceiveCallDelays
+ add hl, de
+ ld a, [hl]
+ jp RestartReceiveCallDelay
+; 113fd
+
+.ReceiveCallDelays
+ db 20, 10, 5, 3
+; 11401
+
+CheckReceiveCallTimer: ; 11401
+ call CheckReceiveCallDelay ; check timer
+ ret nc
+ ld hl, wTimeCyclesSinceLastCall
+ ld a, [hl]
+ cp 3
+ jr nc, .ok
+ inc [hl]
+
+.ok
+ call NextCallReceiveDelay ; restart timer
+ scf
+ ret
+; 11413
+
+InitOneDayCountdown: ; 11413
+ ld a, 1
+
+InitNDaysCountdown: ; 11415
+ ld [hl], a
+ push hl
+ call UpdateTime
+ pop hl
+ inc hl
+ call CopyDayToHL
+ ret
+; 11420
+
+CheckDayDependentEventHL: ; 11420
+ inc hl
+ push hl
+ call CalcDaysSince
+ call GetDaysSince
+ pop hl
+ dec hl
+ call UpdateTimeRemaining
+ ret
+; 1142e
+
+RestartReceiveCallDelay: ; 1142e
+ ld hl, wReceiveCallDelay_MinsRemaining
+ ld [hl], a
+ call UpdateTime
+ ld hl, wReceiveCallDelay_StartTime
+ call CopyDayHourMinToHL
+ ret
+; 1143c
+
+CheckReceiveCallDelay: ; 1143c
+ ld hl, wReceiveCallDelay_StartTime
+ call CalcMinsHoursDaysSince
+ call GetMinutesSinceIfLessThan60
+ ld hl, wReceiveCallDelay_MinsRemaining
+ call UpdateTimeRemaining
+ ret
+; 1144c
+
+RestartDailyResetTimer: ; 1144c
+ ld hl, wDailyResetTimer
+ jp InitOneDayCountdown
+; 11452
+
+CheckDailyResetTimer:: ; 11452
+ ld hl, wDailyResetTimer
+ call CheckDayDependentEventHL
+ ret nc
+ xor a
+ ld hl, DailyFlags
+rept 3
+ ld [hli], a
+endr
+ ld [hl], a
+ ld hl, wDailyRematchFlags
+rept 4
+ ld [hli], a
+endr
+ ld hl, wDailyPhoneItemFlags
+rept 4
+ ld [hli], a
+endr
+ ld hl, wDailyPhoneTimeOfDayFlags
+rept 4
+ ld [hli], a
+endr
+ ld hl, wdc58
+ ld a, [hl]
+ and a
+ jr z, .RestartKenjiBreakCountdown
+ dec [hl]
+ jr nz, .DontRestartKenjiBreakCountdown
+
+.RestartKenjiBreakCountdown
+ call Special_SampleKenjiBreakCountdown
+
+.DontRestartKenjiBreakCountdown
+ jr RestartDailyResetTimer
+; 11485
+
+Special_SampleKenjiBreakCountdown: ; 11485
+; Generate a random number between 3 and 5
+ call Random
+ and 3
+ add 3
+ ld [wdc58], a
+ ret
+; 11490
+
+StartBugContestTimer: ; 11490
+ ld a, 20
+ ld [wBugContestMinsRemaining], a
+ ld a, 0
+ ld [wBugContestSecsRemaining], a
+ call UpdateTime
+ ld hl, wBugContestStartTime
+ call CopyDayHourMinSecToHL
+ ret
+; 114a4
+
+
+CheckBugContestTimer:: ; 114a4 (4:54a4)
+ ld hl, wBugContestStartTime
+ call CalcSecsMinsHoursDaysSince
+ ld a, [wDaysSince]
+ and a
+ jr nz, .timed_out
+ ld a, [wHoursSince]
+ and a
+ jr nz, .timed_out
+ ld a, [wSecondsSince]
+ ld b, a
+ ld a, [wBugContestSecsRemaining]
+ sub b
+ jr nc, .okay
+ add 60
+
+.okay
+ ld [wBugContestSecsRemaining], a
+ ld a, [wMinutesSince]
+ ld b, a
+ ld a, [wBugContestMinsRemaining]
+ sbc b
+ ld [wBugContestMinsRemaining], a
+ jr c, .timed_out
+ and a
+ ret
+
+.timed_out
+ xor a
+ ld [wBugContestMinsRemaining], a
+ ld [wBugContestSecsRemaining], a
+ scf
+ ret
+
+
+InitializeStartDay: ; 114dd
+ call UpdateTime
+ ld hl, wStartDay
+ call CopyDayToHL
+ ret
+; 114e7
+
+CheckPokerusTrick:: ; 114e7
+ ld hl, wStartDay
+ call CalcDaysSince
+ call GetDaysSince
+ and a
+ jr z, .done
+
+ ld b, a
+ callba ApplyPokerusTick
+
+.done
+ xor a
+ ret
+; 114fc
+
+SetUnusedTwoDayTimer: ; 114fc
+ ld a, 2
+ ld hl, wUnusedTwoDayTimer
+ ld [hl], a
+ call UpdateTime
+ ld hl, wUnusedTwoDayTimerStartDate
+ call CopyDayToHL
+ ret
+; 1150c
+
+CheckUnusedTwoDayTimer: ; 1150c
+ ld hl, wUnusedTwoDayTimerStartDate
+ call CalcDaysSince
+ call GetDaysSince
+ ld hl, wUnusedTwoDayTimer
+ call UpdateTimeRemaining
+ ret
+; 1151c
+
+Function1151c: ; unreferenced
+ ld hl, DailyFlags
+ set 2, [hl]
+ ret
+; 11522
+
+Function11522: ; unreferenced
+ and a
+ ld hl, DailyFlags
+ bit 2, [hl]
+ ret nz
+ scf
+ ret
+; 1152b
+
+RestartLuckyNumberCountdown: ; 1152b
+ call .GetDaysUntilNextFriday
+ ld hl, wLuckyNumberDayBuffer
+ jp InitNDaysCountdown
+; 11534
+
+.GetDaysUntilNextFriday: ; 11534
+ call GetWeekday
+ ld c, a
+ ld a, FRIDAY
+ sub c
+ jr z, .friday_saturday
+ jr nc, .earlier ; should've done "ret nc"
+
+.friday_saturday
+ add 7
+
+.earlier
+ ret
+; 11542
+
+CheckLuckyNumberShowFlag: ; 11542
+ ld hl, wLuckyNumberDayBuffer
+ jp CheckDayDependentEventHL
+; 11548
+
+DoMysteryGiftIfDayHasPassed: ; 11548
+ ld a, BANK(sMysteryGiftTimer)
+ call GetSRAMBank
+ ld hl, sMysteryGiftTimer
+ ld a, [hli]
+ ld [Buffer1], a
+ ld a, [hl]
+ ld [Buffer2], a
+ call CloseSRAM
+
+ ld hl, Buffer1
+ call CheckDayDependentEventHL
+ jr nc, .not_timed_out
+ ld hl, Buffer1
+ call InitOneDayCountdown
+ call CloseSRAM
+ callba Function1050c8
+
+.not_timed_out
+ ld a, BANK(sMysteryGiftTimer)
+ call GetSRAMBank
+ ld hl, Buffer1
+ ld a, [hli]
+ ld [sMysteryGiftTimer], a
+ ld a, [hl]
+ ld [sMysteryGiftTimer + 1], a
+ call CloseSRAM
+ ret
+; 11586
+
+UpdateTimeRemaining: ; 11586
+; If the amount of time elapsed exceeds the capacity of its
+; unit, skip this part.
+ cp -1
+ jr z, .set_carry
+ ld c, a
+ ld a, [hl] ; time remaining
+ sub c
+ jr nc, .ok
+ xor a
+
+.ok
+ ld [hl], a
+ jr z, .set_carry
+ xor a
+ ret
+
+.set_carry
+ xor a
+ ld [hl], a
+ scf
+ ret
+; 11599
+
+GetSecondsSinceIfLessThan60: ; 11599
+ ld a, [wDaysSince]
+ and a
+ jr nz, GetTimeElapsed_ExceedsUnitLimit
+ ld a, [wHoursSince]
+ and a
+ jr nz, GetTimeElapsed_ExceedsUnitLimit
+ ld a, [wMinutesSince]
+ jr nz, GetTimeElapsed_ExceedsUnitLimit
+ ld a, [wSecondsSince]
+ ret
+; 115ae
+
+GetMinutesSinceIfLessThan60: ; 115ae
+ ld a, [wDaysSince]
+ and a
+ jr nz, GetTimeElapsed_ExceedsUnitLimit
+ ld a, [wHoursSince]
+ and a
+ jr nz, GetTimeElapsed_ExceedsUnitLimit
+ ld a, [wMinutesSince]
+ ret
+; 115be
+
+GetHoursSinceIfLessThan24: ; 115be
+ ld a, [wDaysSince]
+ and a
+ jr nz, GetTimeElapsed_ExceedsUnitLimit
+ ld a, [wHoursSince]
+ ret
+; 115c8
+
+GetDaysSince: ; 115c8
+ ld a, [wDaysSince]
+ ret
+; 115cc
+
+GetTimeElapsed_ExceedsUnitLimit: ; 115cc
+ ld a, -1
+ ret
+; 115cf
+
+CalcDaysSince: ; 115cf
+ xor a
+ jr _CalcDaysSince
+; 115d2
+
+CalcHoursDaysSince: ; 115d2
+ inc hl
+ xor a
+ jr _CalcHoursDaysSince
+; 115d6
+
+CalcMinsHoursDaysSince: ; 115d6
+rept 2
+ inc hl
+endr
+ xor a
+ jr _CalcMinsHoursDaysSince
+; 115db
+
+CalcSecsMinsHoursDaysSince: ; 115db
+rept 3
+ inc hl
+endr
+ ld a, [hSeconds]
+ ld c, a
+ sub [hl]
+ jr nc, .skip
+ add 60
+.skip
+ ld [hl], c ; current seconds
+ dec hl
+ ld [wSecondsSince], a ; seconds since
+
+_CalcMinsHoursDaysSince: ; 115eb
+ ld a, [hMinutes]
+ ld c, a
+ sbc [hl]
+ jr nc, .skip
+ add 60
+.skip
+ ld [hl], c ; current minutes
+ dec hl
+ ld [wMinutesSince], a ; minutes since
+
+_CalcHoursDaysSince: ; 115f8
+ ld a, [hHours]
+ ld c, a
+ sbc [hl]
+ jr nc, .skip
+ add 24
+.skip
+ ld [hl], c ; current hours
+ dec hl
+ ld [wHoursSince], a ; hours since
+
+_CalcDaysSince:
+ ld a, [CurDay]
+ ld c, a
+ sbc [hl]
+ jr nc, .skip
+ add 20 * 7
+.skip
+ ld [hl], c ; current days
+ ld [wDaysSince], a ; days since
+ ret
+; 11613
+
+CopyDayHourMinSecToHL: ; 11613
+ ld a, [CurDay]
+ ld [hli], a
+ ld a, [hHours]
+ ld [hli], a
+ ld a, [hMinutes]
+ ld [hli], a
+ ld a, [hSeconds]
+ ld [hli], a
+ ret
+; 11621
+
+CopyDayToHL: ; 11621
+ ld a, [CurDay]
+ ld [hl], a
+ ret
+; 11626
+
+CopyDayHourToHL: ; 11626
+ ld a, [CurDay]
+ ld [hli], a
+ ld a, [hHours]
+ ld [hli], a
+ ret
+; 1162e
+
+CopyDayHourMinToHL: ; 1162e
+ ld a, [CurDay]
+ ld [hli], a
+ ld a, [hHours]
+ ld [hli], a
+ ld a, [hMinutes]
+ ld [hli], a
+ ret
+; 11639 \ No newline at end of file
diff --git a/engine/timeofdaypals.asm b/engine/timeofdaypals.asm
new file mode 100644
index 000000000..bdfcc8b05
--- /dev/null
+++ b/engine/timeofdaypals.asm
@@ -0,0 +1,414 @@
+Function8c001:: ; 8c001
+ call UpdateTime
+ ld a, [TimeOfDay]
+ ld [CurTimeOfDay], a
+ call GetTimePalette
+ ld [TimeOfDayPal], a
+ ret
+; 8c011
+
+
+_TimeOfDayPals:: ; 8c011
+; return carry if pals are changed
+
+; forced pals?
+ ld hl, wd846
+ bit 7, [hl]
+ jr nz, .dontchange
+
+; do we need to bother updating?
+ ld a, [TimeOfDay]
+ ld hl, CurTimeOfDay
+ cp [hl]
+ jr z, .dontchange
+
+; if so, the time of day has changed
+ ld a, [TimeOfDay]
+ ld [CurTimeOfDay], a
+
+; get palette id
+ call GetTimePalette
+
+; same palette as before?
+ ld hl, TimeOfDayPal
+ cp [hl]
+ jr z, .dontchange
+
+; update palette id
+ ld [TimeOfDayPal], a
+
+
+; save bg palette 8
+ ld hl, Unkn1Pals + 8 * 7 ; Unkn1Pals + 7 pals
+
+; save wram bank
+ ld a, [rSVBK]
+ ld b, a
+; wram bank 5
+ ld a, 5
+ ld [rSVBK], a
+
+; push palette
+ ld c, 4 ; NUM_PAL_COLORS
+.push
+ ld d, [hl]
+ inc hl
+ ld e, [hl]
+ inc hl
+ push de
+ dec c
+ jr nz, .push
+
+; restore wram bank
+ ld a, b
+ ld [rSVBK], a
+
+
+; update sgb pals
+ ld b, $9
+ call GetSGBLayout
+
+
+; restore bg palette 8
+ ld hl, Unkn2Pals - 1 ; last byte in Unkn1Pals
+
+; save wram bank
+ ld a, [rSVBK]
+ ld d, a
+; wram bank 5
+ ld a, 5
+ ld [rSVBK], a
+
+; pop palette
+ ld e, 4 ; NUM_PAL_COLORS
+.pop
+ pop bc
+ ld [hl], c
+ dec hl
+ ld [hl], b
+ dec hl
+ dec e
+ jr nz, .pop
+
+; restore wram bank
+ ld a, d
+ ld [rSVBK], a
+
+; update palettes
+ call _UpdateTimePals
+ call DelayFrame
+
+; successful change
+ scf
+ ret
+
+.dontchange
+; no change occurred
+ and a
+ ret
+; 8c070
+
+
+_UpdateTimePals:: ; 8c070
+ ld c, $9 ; normal
+ call GetTimePalFade
+ call DmgToCgbTimePals
+ ret
+; 8c079
+
+FadeInBGMap:: ; 8c079
+ ld c, $12
+ call GetTimePalFade
+ ld b, $4
+ call ConvertTimePalsDecHL
+ ret
+; 8c084
+
+FadeBlackBGMap:: ; 8c084
+ call Function8c0c1
+ ld c, $9
+ call GetTimePalFade
+ ld b, $4
+ call ConvertTimePalsIncHL
+ ret
+; 8c092
+
+Special_BattleTowerFade: ; 8c092
+ call Function8c0c1
+ ld c, $9
+ call GetTimePalFade
+ ld b, $4
+.asm_8c09c
+ call DmgToCgbTimePals
+rept 3
+ inc hl
+endr
+ ld c, $7
+ call DelayFrames
+ dec b
+ jr nz, .asm_8c09c
+ ret
+; 8c0ab
+
+Special_FadeInQuickly: ; 8c0ab
+ ld c, $0
+ call GetTimePalFade
+ ld b, $4
+ call ConvertTimePalsIncHL
+ ret
+; 8c0b6
+
+Special_FadeBlackQuickly: ; 8c0b6
+ ld c, $9
+ call GetTimePalFade
+ ld b, $4
+ call ConvertTimePalsDecHL
+ ret
+; 8c0c1
+
+
+Function8c0c1: ; 8c0c1
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+ ld hl, Unkn1Pals
+ ld a, [hli]
+ ld e, a
+ ld a, [hli]
+ ld d, a
+ ld hl, Unkn1Pals + 8
+ ld c, $6
+.asm_8c0d4
+ ld a, e
+ ld [hli], a
+ ld a, d
+ ld [hli], a
+rept 6
+ inc hl
+endr
+ dec c
+ jr nz, .asm_8c0d4
+ pop af
+ ld [rSVBK], a
+ ret
+; 8c0e5
+
+brightlevel: MACRO
+ db (\1 << 6) | (\2 << 4) | (\3 << 2) | \4
+ENDM
+
+Function8c0e5: ; 8c0e5
+ ld hl, .BrightnessLevels
+ ld a, [wc2d0]
+ cp $4 ; Dark cave, needs Flash
+ jr z, .DarkCave
+ and $7
+ add l
+ ld l, a
+ ld a, $0
+ adc h
+ ld h, a
+ ld a, [hl]
+ ld [wd847], a
+ ret
+.DarkCave
+ ld a, [StatusFlags]
+ bit 2, a
+ jr nz, .UsedFlash
+ ld a, $ff ; 3, 3, 3, 3
+ ld [wd847], a
+ ret
+.UsedFlash
+ ld a, $aa ; 2, 2, 2, 2
+ ld [wd847], a
+ ret
+; 8c10f (23:410f)
+
+.BrightnessLevels: ; 8c10f
+ brightlevel 3, 2, 1, 0
+ brightlevel 1, 1, 1, 1
+ brightlevel 2, 2, 2, 2
+ brightlevel 0, 0, 0, 0
+ brightlevel 3, 3, 3, 3
+ brightlevel 3, 2, 1, 0
+ brightlevel 3, 2, 1, 0
+ brightlevel 3, 2, 1, 0
+; 8c117
+
+GetTimePalette: ; 8c117
+ ld a, [TimeOfDay]
+ ld e, a
+ ld d, 0
+ ld hl, .TimePalettes
+rept 2
+ add hl, de
+endr
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp [hl]
+; 8c126
+
+.TimePalettes
+ dw .MorningPalette
+ dw .DayPalette
+ dw .NitePalette
+ dw .DarknessPalette
+
+.MorningPalette
+ ld a, [wd847]
+ and %00000011 ; 0
+ ret
+
+.DayPalette
+ ld a, [wd847]
+ and %00001100 ; 1
+ srl a
+ srl a
+ ret
+
+.NitePalette
+ ld a, [wd847]
+ and %00110000 ; 2
+ swap a
+ ret
+
+.DarknessPalette
+ ld a, [wd847]
+ and %11000000 ; 3
+ rlca
+ rlca
+ ret
+; 8c14e
+
+
+DmgToCgbTimePals: ; 8c14e
+ push hl
+ push de
+ ld a, [hli]
+ call DmgToCgbBGPals
+ ld a, [hli]
+ ld e, a
+ ld a, [hli]
+ ld d, a
+ call DmgToCgbObjPals
+ pop de
+ pop hl
+ ret
+; 8c15e
+
+ConvertTimePalsIncHL: ; 8c15e
+.loop
+ call DmgToCgbTimePals
+rept 3
+ inc hl
+endr
+ ld c, $2
+ call DelayFrames
+ dec b
+ jr nz, .loop
+ ret
+; 8c16d
+
+ConvertTimePalsDecHL: ; 8c16d
+.loop
+ call DmgToCgbTimePals
+rept 3
+ dec hl
+endr
+ ld c, $2
+ call DelayFrames
+ dec b
+ jr nz, .loop
+ ret
+; 8c17c
+
+
+GetTimePalFade: ; 8c17c
+; check cgb
+ ld a, [hCGB]
+ and a
+ jr nz, .cgb
+
+; else: dmg
+
+; index
+ ld a, [TimeOfDayPal]
+ and %11
+
+; get fade table
+ push bc
+ ld c, a
+ ld b, $0
+ ld hl, .dmgfades
+rept 2
+ add hl, bc
+endr
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ pop bc
+
+; get place in fade table
+ ld b, $0
+ add hl, bc
+ ret
+
+.cgb
+ ld hl, .cgbfade
+ ld b, $0
+ add hl, bc
+ ret
+
+.dmgfades
+ dw .morn
+ dw .day
+ dw .nite
+ dw .darkness
+
+.morn
+ db %11111111, %11111111, %11111111
+ db %11111110, %11111110, %11111110
+ db %11111001, %11100100, %11100100
+ db %11100100, %11010000, %11010000
+ db %10010000, %10000000, %10000000
+ db %01000000, %01000000, %01000000
+ db %00000000, %00000000, %00000000
+
+.day
+ db %11111111, %11111111, %11111111
+ db %11111110, %11111110, %11111110
+ db %11111001, %11100100, %11100100
+ db %11100100, %11010000, %11010000
+ db %10010000, %10000000, %10000000
+ db %01000000, %01000000, %01000000
+ db %00000000, %00000000, %00000000
+
+.nite
+ db %11111111, %11111111, %11111111
+ db %11111110, %11111110, %11111110
+ db %11111001, %11100100, %11100100
+ db %11101001, %11010000, %11010000
+ db %10010000, %10000000, %10000000
+ db %01000000, %01000000, %01000000
+ db %00000000, %00000000, %00000000
+
+.darkness
+ db %11111111, %11111111, %11111111
+ db %11111110, %11111110, %11111111
+ db %11111110, %11100100, %11111111
+ db %11111101, %11010000, %11111111
+ db %11111101, %10000000, %11111111
+ db %00000000, %01000000, %00000000
+ db %00000000, %00000000, %00000000
+
+.cgbfade
+ db %11111111, %11111111, %11111111
+ db %11111110, %11111110, %11111110
+ db %11111001, %11111001, %11111001
+ db %11100100, %11100100, %11100100
+ db %10010000, %10010000, %10010000
+ db %01000000, %01000000, %01000000
+ db %00000000, %00000000, %00000000
+; 8c20f
diff --git a/engine/title.asm b/engine/title.asm
index 2e151c389..d29c90a23 100644
--- a/engine/title.asm
+++ b/engine/title.asm
@@ -9,7 +9,7 @@ _TitleScreen: ; 10ed67
ld [hBGMapMode], a
; Reset timing variables
- ld hl, wcf63
+ ld hl, wJumptableIndex
ld [hli], a ; cf63 ; Scene?
ld [hli], a ; cf64
ld [hli], a ; cf65 ; Timer lo
@@ -53,27 +53,27 @@ _TitleScreen: ; 10ed67
; Apply logo gradient:
; lines 3-4
- ld hl, $9860 ; (0,3)
+ ld hl, VBGMap0 tile $06 ; (0,3)
ld bc, $0040 ; 2 rows
ld a, 2
call ByteFill
; line 5
- ld hl, $98a0 ; (0,5)
+ ld hl, VBGMap0 tile $0a ; (0,5)
ld bc, $0020 ; 1 row
ld a, 3
call ByteFill
; line 6
- ld hl, $98c0 ; (0,6)
+ ld hl, VBGMap0 tile $0c ; (0,6)
ld bc, $0020 ; 1 row
ld a, 4
call ByteFill
; line 7
- ld hl, $98e0 ; (0,7)
+ ld hl, VBGMap0 tile $0e ; (0,7)
ld bc, $0020 ; 1 row
ld a, 5
call ByteFill
; lines 8-9
- ld hl, $9900 ; (0,8)
+ ld hl, VBGMap0 tile $10 ; (0,8)
ld bc, $0040 ; 2 rows
ld a, 6
call ByteFill
@@ -86,7 +86,7 @@ _TitleScreen: ; 10ed67
call ByteFill
; Suicune gfx
- ld hl, $9980 ; (0,12)
+ ld hl, VBGMap0 tile $18 ; (0,12)
ld bc, $00c0 ; the rest of the screen
ld a, 8
call ByteFill
@@ -130,10 +130,10 @@ _TitleScreen: ; 10ed67
; Initialize running Suicune?
ld d, $0
- call Function10eed2
+ call LoadSuicuneFrame
; Initialize background crystal
- call Function10ef06
+ call InitializeBackground
; Save WRAM bank
ld a, [rSVBK]
@@ -145,12 +145,12 @@ _TitleScreen: ; 10ed67
; Update palette colors
ld hl, TitleScreenPalettes
ld de, Unkn1Pals
- ld bc, $0080
+ ld bc, 4 * 32
call CopyBytes
ld hl, TitleScreenPalettes
ld de, BGPals
- ld bc, $0080
+ ld bc, 4 * 32
call CopyBytes
; Restore WRAM bank
@@ -220,7 +220,7 @@ _TitleScreen: ; 10ed67
ld [hBGMapMode], a
xor a
- ld [DefaultFlypoint], a
+ ld [Unkn1Pals + 2], a
; Play starting sound effect
call SFXChannelsOff
@@ -230,25 +230,28 @@ _TitleScreen: ; 10ed67
ret
; 10eea7
-Function10eea7: ; 10eea7
- ld hl, DefaultFlypoint
+SuicuneFrameIterator: ; 10eea7
+ ld hl, Unkn1Pals + 2
ld a, [hl]
ld c, a
inc [hl]
- and $7
+
+; Only do this once every eight frames
+ and (1 << 3) - 1
ret nz
+
ld a, c
- and $18
+ and 3 << 3
sla a
swap a
ld e, a
ld d, $0
- ld hl, Unknown_10eece
+ ld hl, .Frames
add hl, de
ld d, [hl]
xor a
ld [hBGMapMode], a
- call Function10eed2
+ call LoadSuicuneFrame
ld a, $1
ld [hBGMapMode], a
ld a, $3
@@ -256,33 +259,36 @@ Function10eea7: ; 10eea7
ret
; 10eece
-Unknown_10eece: ; 10eece
- db $80, $88, $00, $08
+.Frames: ; 10eece
+ db $80 ; VTiles4 tile $00
+ db $88 ; VTiles4 tile $08
+ db $00 ; VTiles5 tile $00
+ db $08 ; VTiles5 tile $08
; 10eed2
-Function10eed2: ; 10eed2
+LoadSuicuneFrame: ; 10eed2
hlcoord 6, 12
- ld b, $6
-.asm_10eed7
- ld c, $8
-.asm_10eed9
+ ld b, 6
+.row
+ ld c, 8
+.col
ld a, d
ld [hli], a
inc d
dec c
- jr nz, .asm_10eed9
- ld a, $c
+ jr nz, .col
+ ld a, SCREEN_WIDTH - 8
add l
ld l, a
- ld a, $0
+ ld a, 0
adc h
ld h, a
- ld a, $8
+ ld a, 8
add d
ld d, a
dec b
- jr nz, .asm_10eed7
+ jr nz, .row
ret
; 10eeef
@@ -293,18 +299,18 @@ DrawTitleGraphic: ; 10eeef
; c: width
; d: tile to start drawing from
; e: number of tiles to advance for each row
-.asm_10eeef
+.row
push de
push bc
push hl
-.asm_10eef2
+.col
ld a, d
ld [hli], a
inc d
dec c
- jr nz, .asm_10eef2
+ jr nz, .col
pop hl
- ld bc, $0014
+ ld bc, SCREEN_WIDTH
add hl, bc
pop bc
pop de
@@ -312,31 +318,31 @@ DrawTitleGraphic: ; 10eeef
add d
ld d, a
dec b
- jr nz, .asm_10eeef
+ jr nz, .row
ret
; 10ef06
-Function10ef06: ; 10ef06
+InitializeBackground: ; 10ef06
ld hl, Sprites
- ld d, $de
+ ld d, -$22
ld e, $0
- ld c, $5
-.asm_10ef0f
+ ld c, 5
+.loop
push bc
- call Function10ef1c
+ call .InitColumn
pop bc
ld a, $10
add d
ld d, a
dec c
- jr nz, .asm_10ef0f
+ jr nz, .loop
ret
; 10ef1c
-Function10ef1c: ; 10ef1c
+.InitColumn: ; 10ef1c
ld c, $6
ld b, $40
-.asm_10ef20
+.loop2
ld a, d
ld [hli], a
ld a, b
@@ -351,7 +357,7 @@ endr
ld a, $80
ld [hli], a
dec c
- jr nz, .asm_10ef20
+ jr nz, .loop2
ret
; 10ef32
@@ -363,7 +369,7 @@ AnimateTitleCrystal: ; 10ef32
; y is really from the bottom of the sprite, which is two tiles high
ld hl, Sprites
ld a, [hl]
- cp 6 + 16
+ cp 6 + $10
ret z
; Move all 30 parts of the crystal down by 2