summaryrefslogtreecommitdiff
path: root/engine
diff options
context:
space:
mode:
Diffstat (limited to 'engine')
-rw-r--r--engine/diploma.asm94
-rw-r--r--engine/map_objects.asm3683
-rw-r--r--engine/map_setup.asm489
-rw-r--r--engine/map_triggers.asm91
-rw-r--r--engine/more_phone_scripts.asm10
-rw-r--r--engine/pack.asm1692
-rw-r--r--engine/phone_scripts.asm10
-rw-r--r--engine/pokedex.asm2585
-rw-r--r--engine/spawn_points.asm106
-rw-r--r--engine/specials.asm642
-rw-r--r--engine/std_scripts.asm36
11 files changed, 9410 insertions, 28 deletions
diff --git a/engine/diploma.asm b/engine/diploma.asm
new file mode 100644
index 000000000..bf6e89fa8
--- /dev/null
+++ b/engine/diploma.asm
@@ -0,0 +1,94 @@
+
+Function1dd702: ; 1dd702
+ call Function1dd709
+ call Functiona80
+ ret
+; 1dd709
+
+Function1dd709: ; 1dd709
+ call WhiteBGMap
+ call ClearTileMap
+ call ClearSprites
+ call DisableLCD
+ ld hl, LZ_1dd805
+ ld de, VTiles2
+ call Decompress
+ ld hl, Tilemap_1ddc4b
+ ld de, TileMap
+ ld bc, $0168
+ call CopyBytes
+ ld de, String_1dd760
+ hlcoord 2, 5
+ call PlaceString
+ ld de, String_1dd767
+ hlcoord 15, 5
+ call PlaceString
+ ld de, PlayerName
+ hlcoord 9, 5
+ call PlaceString
+ ld de, String_1dd768
+ hlcoord 2, 8
+ call PlaceString
+ call EnableLCD
+ call WaitBGMap
+ ld b, $8
+ call GetSGBLayout
+ call Function32f9
+ call DelayFrame
+ ret
+; 1dd760
+
+String_1dd760:
+ db "PLAYER@"
+
+String_1dd767:
+ db "@"
+
+String_1dd768:
+ db "This certifies"
+ next "that you have"
+ next "completed the"
+ next "new #DEX."
+ next "Congratulations!"
+ db "@"
+; 1dd7ae
+
+Function1dd7ae: ; 1dd7ae
+ ld hl, TileMap
+ ld bc, $0168
+ ld a, $7f
+ call ByteFill
+ ld hl, Tilemap_1dddb3
+ ld de, TileMap
+ ld bc, $0168
+ call CopyBytes
+ ld de, String_1dd7fa
+ hlcoord 8, 0
+ call PlaceString
+ ld de, String_1dd7f0
+ hlcoord 3, 15
+ call PlaceString
+ hlcoord 12, 15
+ ld de, GameTimeHours
+ ld bc, $0204
+ call PrintNum
+ ld [hl], $67
+ inc hl
+ ld de, GameTimeMinutes
+ ld bc, $8102
+ call PrintNum
+ ret
+; 1dd7f0
+
+String_1dd7f0: db "PLAY TIME@"
+String_1dd7fa: db "GAME FREAK@"
+; 1dd805
+
+LZ_1dd805: ; 1dd805
+INCBIN "gfx/unknown/1dd805.2bpp.lz"
+
+Tilemap_1ddc4b: ; 1ddc4b
+INCBIN "gfx/unknown/1ddc4b.tilemap"
+
+Tilemap_1dddb3: ; 1dddb3
+INCBIN "gfx/unknown/1dddb3.tilemap"
diff --git a/engine/map_objects.asm b/engine/map_objects.asm
new file mode 100644
index 000000000..983c1c700
--- /dev/null
+++ b/engine/map_objects.asm
@@ -0,0 +1,3683 @@
+
+INCLUDE "engine/facings.asm"
+
+Data4273:: ; 4273
+ db $00, $00, $01, $02, $00, $00
+ db $06, $00, $01, $0c, $00, $00
+ db $03, $00, $01, $00, $00, $00
+ db $04, $00, $01, $00, $00, $00
+ db $01, $00, $01, $00, $00, $00
+ db $02, $00, $01, $00, $00, $00
+ db $06, $00, $01, $00, $00, $00
+ db $06, $01, $01, $00, $00, $00
+ db $06, $02, $01, $00, $00, $00
+ db $06, $03, $01, $00, $00, $00
+ db $05, $00, $01, $00, $00, $00
+ db $07, $00, $01, $02, $00, $00
+ db $08, $00, $01, $00, $00, $00
+ db $09, $00, $01, $00, $00, $00
+ db $0a, $00, $01, $00, $00, $00
+ db $0b, $00, $01, $00, $00, $00
+ db $0c, $00, $01, $00, $00, $00
+ db $0d, $00, $01, $00, $00, $00
+ db $0e, $00, $01, $00, $00, $00
+ db $0f, $00, $01, $02, $00, $00
+ db $10, $00, $01, $02, $00, $00
+ db $15, $00, $09, $2e, $01, $c0
+ db $16, $00, $0a, $2e, $00, $00
+ db $06, $00, $01, $0c, $00, $00
+ db $06, $00, $01, $2e, $10, $00
+ db $11, $00, $01, $2e, $00, $40
+ db $12, $00, $01, $02, $00, $00
+ db $13, $00, $00, $8e, $01, $00
+ db $14, $00, $08, $8e, $02, $00
+ db $17, $00, $00, $82, $00, $00
+ db $19, $02, $01, $00, $00, $00
+ db $18, $03, $01, $00, $00, $00
+ db $11, $00, $0c, $2e, $01, $c0
+ db $11, $00, $0d, $2e, $01, $c0
+ db $1a, $00, $0e, $8e, $01, $00
+ db $1b, $00, $0f, $8e, $02, $00
+ db $03, $00, $01, $00, $00, $20
+ db $00, $00, $01, $00, $00, $00
+; 4357
+
+
+Function4357:: ; 4357
+ push bc
+ ld hl, OBJECT_01
+ add hl, bc
+ ld a, [hl]
+ push af
+ ld h, b
+ ld l, c
+ ld bc, ObjectStruct2 - ObjectStruct1
+ xor a
+ call ByteFill
+ pop af
+ cp $ff
+ jr z, .asm_4379
+ bit 7, a
+ jr nz, .asm_4379
+ call GetMapObject
+ ld hl, OBJECT_00
+ add hl, bc
+ ld [hl], $ff
+
+.asm_4379
+ pop bc
+ ret
+; 437b
+
+Function437b: ; 437b
+ call Function4386
+ ret c
+ call Function43f3
+ call Function4427
+ ret
+; 4386
+
+Function4386: ; 4386
+ ld hl, OBJECT_FLAGS
+ add hl, bc
+ res 6, [hl]
+ ld a, [XCoord]
+ ld e, a
+ ld hl, OBJECT_MAP_X
+ add hl, bc
+ ld a, [hl]
+ add $1
+ sub e
+ jr c, .asm_43b2
+ cp $c
+ jr nc, .asm_43b2
+ ld a, [YCoord]
+ ld e, a
+ ld hl, OBJECT_MAP_Y
+ add hl, bc
+ ld a, [hl]
+ add $1
+ sub e
+ jr c, .asm_43b2
+ cp $b
+ jr nc, .asm_43b2
+ jr .asm_43dc
+
+.asm_43b2
+ ld hl, OBJECT_FLAGS
+ add hl, bc
+ set 6, [hl]
+ ld a, [XCoord]
+ ld e, a
+ ld hl, OBJECT_20
+ add hl, bc
+ ld a, [hl]
+ add $1
+ sub e
+ jr c, .asm_43de
+ cp $c
+ jr nc, .asm_43de
+ ld a, [YCoord]
+ ld e, a
+ ld hl, OBJECT_21
+ add hl, bc
+ ld a, [hl]
+ add $1
+ sub e
+ jr c, .asm_43de
+ cp $b
+ jr nc, .asm_43de
+
+.asm_43dc
+ and a
+ ret
+
+.asm_43de
+ ld hl, OBJECT_04
+ add hl, bc
+ bit 1, [hl]
+ jr nz, .asm_43eb
+ call Function4357
+ scf
+ ret
+
+.asm_43eb
+ ld hl, OBJECT_FLAGS
+ add hl, bc
+ set 6, [hl]
+ and a
+ ret
+; 43f3
+
+Function43f3: ; 43f3
+ ld hl, OBJECT_09
+ add hl, bc
+ ld a, [hl]
+ and a
+ jr z, .asm_4409
+ ld hl, OBJECT_FLAGS
+ add hl, bc
+ bit 5, [hl]
+ jr nz, .asm_4426
+ cp $1
+ jr z, .asm_4414
+ jr .asm_4421
+
+.asm_4409
+ call Function47bc
+ ld hl, OBJECT_FLAGS
+ add hl, bc
+ bit 5, [hl]
+ jr nz, .asm_4426
+
+.asm_4414
+ call Function47dd
+ ld hl, OBJECT_09
+ add hl, bc
+ ld a, [hl]
+ and a
+ ret z
+ cp $1
+ ret z
+
+.asm_4421
+ ld hl, Pointers4b45
+ rst JumpTable
+ ret
+
+.asm_4426
+ ret
+; 4427
+
+Function4427: ; 4427
+ ld hl, OBJECT_04
+ add hl, bc
+ bit 0, [hl]
+ jr nz, Function44a3
+
+ ld hl, OBJECT_FLAGS
+ add hl, bc
+ bit 6, [hl]
+ jr nz, Function44a3
+
+ bit 5, [hl]
+ jr nz, Function4448
+
+ ld de, Pointers445f
+ jr Function444d
+; 4440
+
+Function4440: ; 4440
+ ld hl, OBJECT_04
+ add hl, bc
+ bit 0, [hl]
+ jr nz, Function44a3
+ ; fallthrough
+; 4448
+
+Function4448: ; 4448
+ ld de, Pointers445f + 2
+ jr Function444d
+; 444d
+
+Function444d: ; 444d
+ ld hl, OBJECT_11
+ add hl, bc
+ ld a, [hl]
+ ld l, a
+ ld h, 0
+ add hl, hl
+ add hl, hl
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ call _hl_
+ ret
+; 445f
+
+Pointers445f: ; 445f
+ dw Function44a3
+ dw Function44a3
+ dw Function44b5
+ dw Function44aa
+ dw Function44c1
+ dw Function44aa
+ dw Function4508
+ dw Function44aa
+ dw Function4529
+ dw Function44aa
+ dw Function4539
+ dw Function44a3
+ dw Function456e
+ dw Function456e
+ dw Function457b
+ dw Function44a3
+ dw Function4582
+ dw Function4582
+ dw Function4589
+ dw Function4589
+ dw Function4590
+ dw Function45a4
+ dw Function45ab
+ dw Function44aa
+ dw Function45be
+ dw Function45be
+ dw Function45c5
+ dw Function45c5
+ dw Function45da
+ dw Function44a3
+ dw Function45ed
+ dw Function44a3
+ dw Function44e4
+ dw Function44aa
+; 44a3
+
+Function44a3: ; 44a3
+ ld hl, OBJECT_FACING
+ add hl, bc
+ ld [hl], $ff
+ ret
+; 44aa
+
+Function44aa: ; 44aa
+ call GetSpriteDirection
+ or $0
+ ld hl, OBJECT_FACING
+ add hl, bc
+ ld [hl], a
+ ret
+; 44b5
+
+Function44b5: ; 44b5
+ ld hl, OBJECT_FACING
+ add hl, bc
+ ld a, [hl]
+ and $1
+ jr nz, Function44c1
+ jp Function44aa
+; 44c1
+
+Function44c1: ; 44c1
+ ld hl, OBJECT_04
+ add hl, bc
+ bit 3, [hl]
+ jp nz, Function44aa
+ ld hl, OBJECT_12
+ add hl, bc
+ ld a, [hl]
+ inc a
+ and $f
+ ld [hl], a
+ rrca
+ rrca
+ and $3
+ ld d, a
+ call GetSpriteDirection
+ or $0
+ or d
+ ld hl, OBJECT_FACING
+ add hl, bc
+ ld [hl], a
+ ret
+; 44e4
+
+Function44e4: ; 44e4
+ ld hl, OBJECT_04
+ add hl, bc
+ bit 3, [hl]
+ jp nz, Function44aa
+ ld hl, OBJECT_12
+ add hl, bc
+ ld a, [hl]
+ add $2
+ and $f
+ ld [hl], a
+ rrca
+ rrca
+ and $3
+ ld d, a
+ call GetSpriteDirection
+ or $0
+ or d
+ ld hl, OBJECT_FACING
+ add hl, bc
+ ld [hl], a
+ ret
+; 4508
+
+Function4508: ; 4508
+ ld hl, OBJECT_04
+ add hl, bc
+ bit 3, [hl]
+ jp nz, Function44aa
+ ld hl, OBJECT_12
+ add hl, bc
+ inc [hl]
+ ld a, [hl]
+ rrca
+ rrca
+ rrca
+ and $3
+ ld d, a
+ call GetSpriteDirection
+ or $0
+ or d
+ ld hl, OBJECT_FACING
+ add hl, bc
+ ld [hl], a
+ ret
+; 4529
+
+Function4529: ; 4529
+ call Function453f
+ ld hl, OBJECT_08
+ add hl, bc
+ ld a, [hl]
+ or $0
+ ld hl, OBJECT_FACING
+ add hl, bc
+ ld [hl], a
+ ret
+; 4539
+
+Function4539: ; 4539
+ call Function453f
+ jp Function44a3
+; 453f
+
+Function453f: ; 453f
+ ld hl, OBJECT_12
+ add hl, bc
+ ld a, [hl]
+ and $f0
+ ld e, a
+ ld a, [hl]
+ inc a
+ and $f
+ ld d, a
+ cp $4
+ jr c, .asm_4558
+ ld d, 0
+ ld a, e
+ add $10
+ and $30
+ ld e, a
+
+.asm_4558
+ ld a, d
+ or e
+ ld [hl], a
+ swap e
+ ld d, 0
+ ld hl, .Directions
+ add hl, de
+ ld a, [hl]
+ ld hl, OBJECT_08
+ add hl, bc
+ ld [hl], a
+ ret
+; 456a
+
+.Directions ; 456a
+ db $00, $0c, $04, $08
+; 456e
+
+Function456e: ; 456e
+ call GetSpriteDirection
+ rrca
+ rrca
+ add $10
+ ld hl, OBJECT_FACING
+ add hl, bc
+ ld [hl], a
+ ret
+; 457b
+
+Function457b: ; 457b
+ ld hl, OBJECT_FACING
+ add hl, bc
+ ld [hl], $15
+ ret
+; 4582
+
+Function4582: ; 4582
+ ld hl, OBJECT_FACING
+ add hl, bc
+ ld [hl], $14
+ ret
+; 4589
+
+Function4589: ; 4589
+ ld hl, OBJECT_FACING
+ add hl, bc
+ ld [hl], $17
+ ret
+; 4590
+
+Function4590: ; 4590
+ ld hl, OBJECT_12
+ add hl, bc
+ ld a, [hl]
+ inc a
+ and $f
+ ld [hl], a
+ and $8
+ jr z, Function45a4
+ ld hl, OBJECT_FACING
+ add hl, bc
+ ld [hl], $4
+ ret
+; 45a4
+
+Function45a4: ; 45a4
+ ld hl, OBJECT_FACING
+ add hl, bc
+ ld [hl], $0
+ ret
+; 45ab
+
+Function45ab: ; 45ab
+ ld hl, OBJECT_12
+ add hl, bc
+ ld a, [hl]
+ inc a
+ ld [hl], a
+ and $c
+ rrca
+ rrca
+ add $18
+ ld hl, OBJECT_FACING
+ add hl, bc
+ ld [hl], a
+ ret
+; 45be
+
+Function45be: ; 45be
+ ld hl, OBJECT_FACING
+ add hl, bc
+ ld [hl], $16
+ ret
+; 45c5
+
+Function45c5: ; 45c5
+ ld a, [VariableSprites + 3]
+ ld d, $17
+ cp $33
+ jr z, .asm_45d4
+ cp $47
+ jr z, .asm_45d4
+ ld d, $16
+
+.asm_45d4
+ ld hl, OBJECT_FACING
+ add hl, bc
+ ld [hl], d
+ ret
+; 45da
+
+Function45da: ; 45da
+ ld hl, OBJECT_12
+ add hl, bc
+ inc [hl]
+ ld a, [hl]
+
+ ld hl, OBJECT_FACING
+ add hl, bc
+ and 2
+ ld a, $1c
+ jr z, .asm_45eb
+ inc a
+.asm_45eb
+ ld [hl], a
+ ret
+; 45ed
+
+Function45ed: ; 45ed
+ ld hl, OBJECT_12
+ add hl, bc
+ inc [hl]
+ ld a, [hl]
+ ld hl, OBJECT_FACING
+ add hl, bc
+ and 4
+ ld a, $1e
+ jr z, .asm_45fe
+ inc a
+
+.asm_45fe
+ ld [hl], a
+ ret
+; 4600
+
+Function4600: ; 4600
+
+ ld hl, OBJECT_MAP_X
+ add hl, bc
+ ld a, [hl]
+ ld hl, OBJECT_NEXT_MAP_X
+ add hl, bc
+ ld [hl], a
+
+ ld hl, OBJECT_MAP_Y
+ add hl, bc
+ ld a, [hl]
+ ld hl, OBJECT_NEXT_MAP_Y
+ add hl, bc
+ ld [hl], a
+
+ ld hl, OBJECT_STANDING_TILE
+ add hl, bc
+ ld a, [hl]
+ ld hl, OBJECT_NEXT_TILE
+ add hl, bc
+ ld [hl], a
+
+ call Function4661
+ ld hl, OBJECT_STANDING_TILE
+ add hl, bc
+ ld a, [hl]
+
+ call Function4679
+ ret
+; 462a
+
+Function462a: ; 462a
+
+ ld hl, OBJECT_NEXT_MAP_X
+ add hl, bc
+ ld a, [hl]
+ ld hl, OBJECT_MAP_X
+ add hl, bc
+ ld [hl], a
+
+ ld hl, OBJECT_NEXT_MAP_Y
+ add hl, bc
+ ld a, [hl]
+ ld hl, OBJECT_MAP_Y
+ add hl, bc
+ ld [hl], a
+
+ ret
+; 463f
+
+Function463f: ; 463f
+ ld hl, OBJECT_FLAGS
+ add hl, bc
+ bit 3, [hl]
+ jr z, .asm_464f
+ ld hl, OBJECT_STANDING_TILE
+ add hl, bc
+ ld a, [hl]
+ call Function4661
+
+.asm_464f
+ ld hl, OBJECT_STANDING_TILE
+ add hl, bc
+ ld a, [hl]
+ call Function4679
+ ret c
+ ld hl, OBJECT_NEXT_TILE
+ add hl, bc
+ ld a, [hl]
+ call Function4679
+ ret
+; 4661
+
+Function4661: ; 4661
+ call Function188e
+ jr z, .asm_466b
+ call Function1875
+ jr c, .asm_4672
+
+.asm_466b
+ ld hl, OBJECT_FLAGS
+ add hl, bc
+ set 3, [hl]
+ ret
+
+.asm_4672
+ ld hl, OBJECT_FLAGS
+ add hl, bc
+ res 3, [hl]
+ ret
+; 4679
+
+Function4679: ; 4679
+ and a
+ ret
+; 467b
+
+Function467b: ; 467b
+ xor a
+ ld hl, OBJECT_12
+ add hl, bc
+ ld [hl], a
+ ld hl, OBJECT_27
+ add hl, bc
+ ld [hli], a
+ ld [hli], a
+ ld [hli], a
+ ld [hl], a
+ ld hl, OBJECT_07
+ add hl, bc
+ ld [hl], $ff
+ ret
+; 4690
+
+Function4690: ; 4690
+ ld hl, OBJECT_07
+ add hl, bc
+ ld [hl], a
+ ld hl, OBJECT_04
+ add hl, bc
+ bit 2, [hl]
+ jr nz, .asm_46a6
+
+ add a
+ add a
+ and $c
+ ld hl, OBJECT_08
+ add hl, bc
+ ld [hl], a
+
+.asm_46a6
+ ; fallthrough
+; 46a6
+
+Function46a6: ; 46a6
+
+ call GetStepVector
+
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ ld [hl], a
+
+ ld a, d
+ call Function4730
+ ld hl, OBJECT_NEXT_MAP_X
+ add hl, bc
+ add [hl]
+ ld hl, OBJECT_MAP_X
+ add hl, bc
+ ld [hl], a
+ ld d, a
+
+ ld a, e
+ call Function4730
+ ld hl, OBJECT_NEXT_MAP_Y
+ add hl, bc
+ add [hl]
+ ld hl, OBJECT_MAP_Y
+ add hl, bc
+ ld [hl], a
+ ld e, a
+
+ push bc
+ call Function2a3c
+ pop bc
+
+ ld hl, OBJECT_STANDING_TILE
+ add hl, bc
+ ld [hl], a
+
+ ret
+; 46d7
+
+Function46d7: ; 46d7
+
+ call GetStepVector
+
+ ld hl, OBJECT_SPRITE_X
+ add hl, bc
+ ld a, [hl]
+ add d
+ ld [hl], a
+
+ ld hl, OBJECT_SPRITE_Y
+ add hl, bc
+ ld a, [hl]
+ add e
+ ld [hl], a
+
+ ret
+; 46e9
+
+GetStepVector: ; 46e9
+; Return (x, y, duration, speed) in (d, e, a, h).
+ ld hl, OBJECT_07
+ add hl, bc
+ ld a, [hl]
+ and $f
+ add a
+ add a
+ ld l, a
+ ld h, 0
+ ld de, StepVectors
+ add hl, de
+ ld d, [hl]
+ inc hl
+ ld e, [hl]
+ inc hl
+ ld a, [hli]
+ ld h, [hl]
+ ret
+; 4700
+
+StepVectors: ; 4700
+; x, y, duration, speed
+ ; slow
+ db 0, 1, 16, 1
+ db 0, -1, 16, 1
+ db -1, 0, 16, 1
+ db 1, 0, 16, 1
+ ; normal
+ db 0, 2, 8, 2
+ db 0, -2, 8, 2
+ db -2, 0, 8, 2
+ db 2, 0, 8, 2
+ ; fast
+ db 0, 4, 4, 4
+ db 0, -4, 4, 4
+ db -4, 0, 4, 4
+ db 4, 0, 4, 4
+; 4730
+
+Function4730: ; 4730
+ add a
+ ret z
+ ld a, 1
+ ret nc
+ ld a, -1
+ ret
+; 4738
+
+Function4738: ; 4738
+ ld hl, OBJECT_07
+ add hl, bc
+ ld a, [hl]
+ and $3
+ ld [wd151], a
+ call Function46d7
+ ld a, [wd14e]
+ add d
+ ld [wd14e], a
+ ld a, [wd14f]
+ add e
+ ld [wd14f], a
+ ld hl, wd150
+ set 5, [hl]
+ ret
+; 4759
+
+Function4759: ; 4759
+ push bc
+ ld e, a
+ ld d, 0
+ ld hl, OBJECT_01
+ add hl, bc
+ ld a, [hl]
+ call GetMapObject
+ add hl, de
+ ld a, [hl]
+ pop bc
+ ret
+; 4769
+
+Function4769: ; 4769
+ ld hl, OBJECT_01
+ add hl, bc
+ ld a, [hl]
+ cp $ff
+ jr z, .asm_477d
+ push bc
+ call GetMapObject
+ ld hl, $0004
+ add hl, bc
+ ld a, [hl]
+ pop bc
+ ret
+
+.asm_477d
+ ld a, $6
+ ret
+; 4780
+
+Function4780: ; 4780
+ ld hl, OBJECT_27
+ add hl, bc
+ ld [hl], $0
+ ret
+; 4787
+
+Function4787: ; 4787
+ ld hl, OBJECT_27
+ add hl, bc
+ inc [hl]
+ ret
+; 478d
+
+Function478d: ; 478d
+ ld hl, OBJECT_27
+ add hl, bc
+ dec [hl]
+ ret
+; 4793
+
+Function4793: ; 4793
+ ld hl, OBJECT_27
+ add hl, bc
+ ld a, [hl]
+ pop hl
+ rst JumpTable
+ ret
+; 479b
+
+Function479b: ; 479b
+ ld hl, OBJECT_28
+ add hl, bc
+ ld [hl], $0
+ ret
+; 47a2
+
+Function47a2: ; 47a2
+ ld hl, OBJECT_28
+ add hl, bc
+ inc [hl]
+ ret
+; 47a8
+
+Function47a8: ; 47a8
+ ld hl, OBJECT_28
+ add hl, bc
+ ld a, [hl]
+ pop hl
+ rst JumpTable
+ ret
+; 47b0
+
+Function47b0: ; 47b0
+ ld hl, OBJECT_28
+ add hl, bc
+ ld a, [hl]
+ ret
+; 47b6
+
+Function47b6: ; 47b6
+ ld hl, OBJECT_28
+ add hl, bc
+ ld [hl], a
+ ret
+; 47bc
+
+Function47bc: ; 47bc
+ ld hl, OBJECT_MAP_X
+ add hl, bc
+ ld d, [hl]
+ ld hl, OBJECT_MAP_Y
+ add hl, bc
+ ld e, [hl]
+ push bc
+ call Function2a3c
+ pop bc
+ ld hl, OBJECT_STANDING_TILE
+ add hl, bc
+ ld [hl], a
+ call Function4600
+ call Function467b
+ ld hl, OBJECT_09
+ add hl, bc
+ ld [hl], $1
+ ret
+; 47dd
+
+Function47dd: ; 47dd
+ call Function479b
+ call Function1a2f
+ ld a, [hl]
+ ld hl, .Pointers
+ rst JumpTable
+ ret
+; 47e9
+
+.Pointers ; 47e9
+ dw Function4821
+ dw Function4822
+ dw Function482c
+ dw Function4838
+ dw Function4842
+ dw Function4851
+ dw Function4869
+ dw Function487c
+ dw Function4882
+ dw Function4888
+ dw Function488e
+ dw Function4891
+ dw Function4894
+ dw Function4897
+ dw Function489d
+ dw Function48a0
+ dw Function48a6
+ dw Function48ac
+ dw Function48ff
+ dw Function49e5
+ dw Function4a21
+ dw Function4958
+ dw Function496e
+ dw Function4abc
+ dw Function498d
+ dw Function4984
+ dw Function4a46
+ dw Function4a89
+; 4821
+
+Function4821: ; 4821
+ ret
+; 4822
+
+Function4822: ; 4822
+ call Random
+ ld a, [hRandomAdd]
+ and 1
+ jp Function4af0
+; 482c
+
+Function482c: ; 482c
+ call Random
+ ld a, [hRandomAdd]
+ and 1
+ or 2
+ jp Function4af0
+; 4838
+
+Function4838: ; 4838
+ call Random
+ ld a, [hRandomAdd]
+ and 3
+ jp Function4af0
+; 4842
+
+Function4842: ; 4842
+ call Random
+ ld a, [hRandomAdd]
+ and $c
+ ld hl, OBJECT_08
+ add hl, bc
+ ld [hl], a
+ jp Function4b1d
+; 4851
+
+Function4851: ; 4851
+ ld hl, OBJECT_08
+ add hl, bc
+ ld a, [hl]
+ and $c
+ ld d, a
+ call Random
+ ld a, [hRandomAdd]
+ and $c
+ cp d
+ jr nz, .asm_4865
+ xor $c
+
+.asm_4865
+ ld [hl], a
+ jp Function4b26
+; 4869
+
+Function4869: ; 4869
+ call Function462a
+ call Function467b
+ ld hl, OBJECT_11
+ add hl, bc
+ ld [hl], $1
+ ld hl, OBJECT_09
+ add hl, bc
+ ld [hl], $5
+ ret
+; 487c
+
+Function487c: ; 487c
+ ld hl, Function5000
+ jp Function5041
+; 4882
+
+Function4882: ; 4882
+ ld hl, Function5015
+ jp Function5041
+; 4888
+
+Function4888: ; 4888
+ ld hl, Function5026
+ jp Function5041
+; 488e
+
+Function488e: ; 488e
+ jp Function5037
+; 4891
+
+Function4891: ; 4891
+ jp Function5037
+; 4894
+
+Function4894: ; 4894
+ jp Function5037
+; 4897
+
+Function4897: ; 4897
+ ld hl, Function5000
+ jp Function5041
+; 489d
+
+Function489d: ; 489d
+ jp Function5037
+; 48a0
+
+Function48a0: ; 48a0
+ ld hl, Function54e6
+ jp Function5041
+; 48a6
+
+Function48a6: ; 48a6
+ ld hl, Function500e
+ jp Function5041
+; 48ac
+
+Function48ac: ; 48ac
+ call Function4793
+ dw Function48b3
+ dw Function48f8
+; 48b3
+
+Function48b3: ; 48b3
+ ld hl, OBJECT_STANDING_TILE
+ add hl, bc
+ ld a, [hl]
+ call CheckPitTile
+ jr z, .asm_48f5
+ ld hl, OBJECT_FLAGS
+ add hl, bc
+ bit 2, [hl]
+ res 2, [hl]
+ jr z, .asm_48ee
+ ld hl, OBJECT_32
+ add hl, bc
+ ld a, [hl]
+ and $3
+ or $0
+ call Function4690
+ call Function6ec1
+ jr c, .asm_48eb
+ ld de, SFX_STRENGTH
+ call PlaySFX
+ call Function5538
+ call Function463f
+ ld hl, OBJECT_09
+ add hl, bc
+ ld [hl], $f
+ ret
+
+.asm_48eb
+ call Function462a
+
+.asm_48ee
+ ld hl, OBJECT_07
+ add hl, bc
+ ld [hl], $ff
+ ret
+
+.asm_48f5
+ call Function4787
+ ; fallthrough
+; 48f8
+
+Function48f8: ; 48f8
+ ld hl, OBJECT_07
+ add hl, bc
+ ld [hl], $ff
+ ret
+; 48ff
+
+Function48ff: ; 48ff
+ ld hl, OBJECT_MAP_X
+ add hl, bc
+ ld d, [hl]
+ ld hl, OBJECT_MAP_Y
+ add hl, bc
+ ld e, [hl]
+ ld hl, OBJECT_32
+ add hl, bc
+ ld a, [hl]
+ push bc
+ call Function1ae5
+ ld hl, OBJECT_07
+ add hl, bc
+ ld a, [hl]
+ cp $ff
+ jr z, .asm_494a
+ ld hl, OBJECT_NEXT_MAP_X
+ add hl, bc
+ ld a, [hl]
+ cp d
+ jr z, .asm_492d
+ jr c, .asm_4929
+ ld a, $3
+ jr .asm_493d
+
+.asm_4929
+ ld a, $2
+ jr .asm_493d
+
+.asm_492d
+ ld hl, OBJECT_NEXT_MAP_Y
+ add hl, bc
+ ld a, [hl]
+ cp e
+ jr z, .asm_494a
+ jr c, .asm_493b
+ ld a, $0
+ jr .asm_493d
+
+.asm_493b
+ ld a, $1
+
+.asm_493d
+ ld d, a
+ ld hl, OBJECT_07
+ add hl, bc
+ ld a, [hl]
+ and $c
+ or d
+ pop bc
+ jp Function5412
+
+.asm_494a
+ pop bc
+ ld hl, OBJECT_07
+ add hl, bc
+ ld [hl], $ff
+ ld hl, OBJECT_11
+ add hl, bc
+ ld [hl], $1
+ ret
+; 4958
+
+Function4958: ; 4958
+ call Function467b
+ ld hl, OBJECT_07
+ add hl, bc
+ ld [hl], $ff
+ ld hl, OBJECT_11
+ add hl, bc
+ ld [hl], $9
+ ld hl, OBJECT_09
+ add hl, bc
+ ld [hl], $4
+ ret
+; 496e
+
+Function496e: ; 496e
+ call Function467b
+ ld hl, OBJECT_07
+ add hl, bc
+ ld [hl], $ff
+ ld hl, OBJECT_11
+ add hl, bc
+ ld [hl], $a
+ ld hl, OBJECT_09
+ add hl, bc
+ ld [hl], $4
+ ret
+; 4984
+
+Function4984: ; 4984
+ call Function4793
+ dw Function4996
+ dw Function499c
+ dw Function49b8
+; 498d
+
+Function498d: ; 498d
+ call Function4793
+ dw Function4996
+ dw Function499c
+ dw Function49c4
+; 4996
+
+Function4996: ; 4996
+ call Function467b
+ call Function4787
+ ; fallthrough
+; 499c
+
+Function499c: ; 499c
+ ld hl, OBJECT_11
+ add hl, bc
+ ld [hl], $1
+ ld hl, OBJECT_32
+ add hl, bc
+ ld a, [hl]
+ ld a, $10
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ ld [hl], a
+ ld hl, OBJECT_09
+ add hl, bc
+ ld [hl], $3
+ call Function4787
+ ret
+; 49b8
+
+Function49b8: ; 49b8
+ ld de, .data_49c0
+ call Function49d0
+ jr Function4984
+; 49c0
+
+.data_49c0 ; 49c0
+ db $0c, $08, $00, $04
+; 49c4
+
+Function49c4: ; 49c4
+ ld de, .data_49cc
+ call Function49d0
+ jr Function498d
+; 49cc
+
+.data_49cc ; 49cc
+ db $08, $0c, $04, $00
+; 49d0
+
+Function49d0: ; 49d0
+ ld hl, OBJECT_08
+ add hl, bc
+ ld a, [hl]
+ and $c
+ rrca
+ rrca
+ push hl
+ ld l, a
+ ld h, $0
+ add hl, de
+ ld a, [hl]
+ pop hl
+ ld [hl], a
+ call Function478d
+ ret
+; 49e5
+
+Function49e5: ; 49e5
+ call Function4aa8
+ ld hl, OBJECT_11
+ add hl, bc
+ ld [hl], $7
+ ld hl, OBJECT_STEP_DURATION
+ add hl, de
+ ld a, [hl]
+ inc a
+ add a
+ add $0
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ ld [hl], a
+ ld hl, OBJECT_07
+ add hl, de
+ ld a, [hl]
+ and 3
+ ld d, $e
+ cp 0
+ jr z, .asm_4a0f
+ cp 1
+ jr z, .asm_4a0f
+ ld d, $c
+
+.asm_4a0f
+ ld hl, OBJECT_SPRITE_Y_OFFSET
+ add hl, bc
+ ld [hl], d
+ ld hl, OBJECT_SPRITE_X_OFFSET
+ add hl, bc
+ ld [hl], $0
+ ld hl, OBJECT_09
+ add hl, bc
+ ld [hl], $13
+ ret
+; 4a21
+
+Function4a21: ; 4a21
+ call Function467b
+ call Function4aa8
+ ld hl, OBJECT_11
+ add hl, bc
+ ld [hl], $8
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ ld [hl], $0
+ ld hl, OBJECT_SPRITE_Y_OFFSET
+ add hl, bc
+ ld [hl], $f0
+ ld hl, OBJECT_SPRITE_X_OFFSET
+ add hl, bc
+ ld [hl], $0
+ ld hl, OBJECT_09
+ add hl, bc
+ ld [hl], $13
+ ret
+; 4a46
+
+Function4a46: ; 4a46
+ call Function467b
+ call Function4aa8
+ ld hl, OBJECT_11
+ add hl, bc
+ ld [hl], $e
+ ld hl, OBJECT_STEP_DURATION
+ add hl, de
+ ld a, [hl]
+ inc a
+ add a
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ ld [hl], a
+ ld hl, OBJECT_07
+ add hl, de
+ ld a, [hl]
+ and 3
+ ld e, a
+ ld d, 0
+ ld hl, .data_4a81
+ add hl, de
+ add hl, de
+ ld d, [hl]
+ inc hl
+ ld e, [hl]
+ ld hl, OBJECT_SPRITE_X_OFFSET
+ add hl, bc
+ ld [hl], d
+ ld hl, OBJECT_SPRITE_Y_OFFSET
+ add hl, bc
+ ld [hl], e
+ ld hl, OBJECT_09
+ add hl, bc
+ ld [hl], $13
+ ret
+; 4a81
+
+.data_4a81 ; 4a81
+ ; x, y
+ db 0, -4
+ db 0, 8
+ db 6, 2
+ db -6, 2
+; 4a89
+
+Function4a89: ; 4a89
+ call Function467b
+ call Function4aa8
+ ld hl, OBJECT_11
+ add hl, bc
+ ld [hl], $f
+ ld hl, OBJECT_STEP_DURATION
+ add hl, de
+ ld a, [hl]
+ add $ff
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ ld [hl], a
+ ld hl, OBJECT_09
+ add hl, bc
+ ld [hl], $13
+ ret
+; 4aa8
+
+Function4aa8: ; 4aa8
+ ld hl, OBJECT_32
+ add hl, bc
+ ld a, [hl]
+ push bc
+ call Function1ae5
+ ld d, b
+ ld e, c
+ pop bc
+ ld hl, OBJECT_29
+ add hl, bc
+ ld [hl], e
+ inc hl
+ ld [hl], d
+ ret
+; 4abc
+
+Function4abc: ; 4abc
+ call Function467b
+ ld hl, OBJECT_11
+ add hl, bc
+ ld [hl], $0
+ ld hl, OBJECT_32
+ add hl, bc
+ ld a, [hl]
+ call Function4ade
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ ld [hl], e
+ ld hl, OBJECT_30
+ add hl, bc
+ ld [hl], a
+ ld hl, OBJECT_09
+ add hl, bc
+ ld [hl], $15
+ ret
+; 4ade
+
+Function4ade: ; 4ade
+ ld d, a
+ and $3f
+ ld e, a
+ ld a, d
+ rlca
+ rlca
+ and $3
+ ld d, a
+ inc d
+ ld a, $1
+.asm_4aeb
+ dec d
+ ret z
+ add a
+ jr .asm_4aeb
+; 4af0
+
+Function4af0: ; 4af0
+ call Function4690
+ call Function6ec1
+ jr c, Function4b17
+ call Function463f
+ ld hl, OBJECT_11
+ add hl, bc
+ ld [hl], $2
+ ld hl, wd4cf
+ ld a, [$ffaf]
+ cp [hl]
+ jr z, .asm_4b10
+ ld hl, OBJECT_09
+ add hl, bc
+ ld [hl], $7
+ ret
+
+.asm_4b10
+ ld hl, OBJECT_09
+ add hl, bc
+ ld [hl], $6
+ ret
+
+Function4b17: ; 4b17
+ call Function467b
+ call Function462a
+ ; fallthrough
+; 4b1d
+
+Function4b1d: ; 4b1d
+ call Random
+ ld a, [hRandomAdd]
+ and $7f
+ jr Function4b2d
+; 4b26
+
+Function4b26: ; 4b26
+ call Random
+ ld a, [hRandomAdd]
+ and $1f
+ ; fallthrough
+; 4b2d
+
+Function4b2d: ; 4b2d
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ ld [hl], a
+ ld hl, OBJECT_07
+ add hl, bc
+ ld [hl], $ff
+ ld hl, OBJECT_11
+ add hl, bc
+ ld [hl], $1
+ ld hl, OBJECT_09
+ add hl, bc
+ ld [hl], $3
+ ret
+; 4b45
+
+Pointers4b45: ; 4b45
+ dw Function47bc
+ dw Function47dd
+ dw Function4e2b
+ dw Function4ddd
+ dw Function4e21
+ dw Function4e0c
+ dw Function4e56
+ dw Function4e47
+ dw Function4b86
+ dw Function4bbf
+ dw Function4e83
+ dw Function4dff
+ dw Function4c18
+ dw Function4c89
+ dw Function4d14
+ dw Function4ecd
+ dw Function4d7e
+ dw Function4daf
+ dw Function4dc8
+ dw Function4f04
+ dw Function4f33
+ dw Function4f33
+ dw Function4f77
+ dw Function4f7a
+ dw Function4df0
+ dw Function4f83
+; 4b79
+
+Function4b79: ; 4b79
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ dec [hl]
+ ret nz
+ ld hl, OBJECT_09
+ add hl, bc
+ ld [hl], $1
+ ret
+; 4b86
+
+Function4b86: ; 4b86
+ call Function47a8
+ dw Function4b8d
+ dw Function4ba9
+; 4b8d
+
+Function4b8d: ; 4b8d
+ call Function46d7
+ call UpdateJumpPosition
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ dec [hl]
+ ret nz
+ call Function4600
+ call Function46a6
+ ld hl, OBJECT_FLAGS
+ add hl, bc
+ res 3, [hl]
+ call Function47a2
+ ret
+; 4ba9
+
+Function4ba9: ; 4ba9
+ call Function46d7
+ call UpdateJumpPosition
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ dec [hl]
+ ret nz
+ call Function4600
+ ld hl, OBJECT_09
+ add hl, bc
+ ld [hl], $1
+ ret
+; 4bbf
+
+Function4bbf: ; 4bbf
+ call Function47a8
+ dw Function4bca
+ dw Function4bd2
+ dw Function4bf2
+ dw Function4bfd
+; 4bca
+
+Function4bca: ; 4bca
+ ld hl, wd150
+ set 7, [hl]
+ call Function47a2
+; fallthrough
+; 4bd2
+
+Function4bd2: ; 4bd2
+ call UpdateJumpPosition
+ call Function4738
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ dec [hl]
+ ret nz
+ call Function4600
+ ld hl, OBJECT_FLAGS
+ add hl, bc
+ res 3, [hl]
+ ld hl, wd150
+ set 6, [hl]
+ set 4, [hl]
+ call Function47a2
+ ret
+; 4bf2
+
+Function4bf2: ; 4bf2
+ call Function46a6
+ ld hl, wd150
+ set 7, [hl]
+ call Function47a2
+; fallthrough
+; 4bfd
+
+Function4bfd: ; 4bfd
+ call UpdateJumpPosition
+ call Function4738
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ dec [hl]
+ ret nz
+ ld hl, wd150
+ set 6, [hl]
+ call Function4600
+ ld hl, OBJECT_09
+ add hl, bc
+ ld [hl], $1
+ ret
+; 4c18
+
+Function4c18: ; 4c18
+ call Function47a8
+ dw Function4c23
+ dw Function4c32
+ dw Function4c42
+ dw Function4c5d
+; 4c23
+
+Function4c23: ; 4c23
+ ld hl, OBJECT_12
+ add hl, bc
+ ld [hl], $0
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ ld [hl], $10
+ call Function47a2
+; fallthrough
+; 4c32
+
+Function4c32: ; 4c32
+ ld hl, OBJECT_11
+ add hl, bc
+ ld [hl], $4
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ dec [hl]
+ ret nz
+ call Function47a2
+ ret
+; 4c42
+
+Function4c42: ; 4c42
+ ld hl, OBJECT_12
+ add hl, bc
+ ld [hl], $0
+ ld hl, OBJECT_31
+ add hl, bc
+ ld [hl], $10
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ ld [hl], $10
+ ld hl, OBJECT_FLAGS
+ add hl, bc
+ res 3, [hl]
+ call Function47a2
+; fallthrough
+; 4c5d
+
+Function4c5d: ; 4c5d
+ ld hl, OBJECT_11
+ add hl, bc
+ ld [hl], $4
+ ld hl, OBJECT_31
+ add hl, bc
+ inc [hl]
+ ld a, [hl]
+ ld d, $60
+ call Sine
+ ld a, h
+ sub $60
+ ld hl, OBJECT_SPRITE_Y_OFFSET
+ add hl, bc
+ ld [hl], a
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ dec [hl]
+ ret nz
+ ld hl, OBJECT_12
+ add hl, bc
+ ld [hl], $0
+ ld hl, OBJECT_09
+ add hl, bc
+ ld [hl], $1
+ ret
+; 4c89
+
+Function4c89: ; 4c89
+ call Function47a8
+ dw Function4c9a
+ dw Function4caa
+ dw Function4cb3
+ dw Function4cc9
+ dw Function4ceb
+ dw Function4cf5
+ dw Function4d01
+; 4c9a
+
+Function4c9a: ; 4c9a
+ ld hl, OBJECT_11
+ add hl, bc
+ ld [hl], $0
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ ld [hl], $10
+ call Function47a2
+ ret
+; 4caa
+
+Function4caa: ; 4caa
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ dec [hl]
+ ret nz
+ call Function47a2
+; fallthrough
+; 4cb3
+
+Function4cb3: ; 4cb3
+ ld hl, OBJECT_12
+ add hl, bc
+ ld [hl], $0
+ ld hl, OBJECT_31
+ add hl, bc
+ ld [hl], $0
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ ld [hl], $10
+ call Function47a2
+ ret
+; 4cc9
+
+Function4cc9: ; 4cc9
+ ld hl, OBJECT_11
+ add hl, bc
+ ld [hl], $4
+ ld hl, OBJECT_31
+ add hl, bc
+ inc [hl]
+ ld a, [hl]
+ ld d, $60
+ call Sine
+ ld a, h
+ sub $60
+ ld hl, OBJECT_SPRITE_Y_OFFSET
+ add hl, bc
+ ld [hl], a
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ dec [hl]
+ ret nz
+ call Function47a2
+; fallthrough
+; 4ceb
+
+Function4ceb: ; 4ceb
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ ld [hl], $10
+ call Function47a2
+ ret
+; 4cf5
+
+Function4cf5: ; 4cf5
+ ld hl, OBJECT_11
+ add hl, bc
+ ld [hl], $4
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ dec [hl]
+ ret nz
+; 4d01
+
+Function4d01: ; 4d01
+ ld hl, OBJECT_12
+ add hl, bc
+ ld [hl], $0
+ ld hl, OBJECT_SPRITE_Y_OFFSET
+ add hl, bc
+ ld [hl], $0
+ ld hl, OBJECT_09
+ add hl, bc
+ ld [hl], $1
+ ret
+; 4d14
+
+Function4d14: ; 4d14
+ call Function47a8
+ dw Function4d1f
+ dw Function4d2e
+ dw Function4d4f
+ dw Function4d6b
+; 4d1f
+
+Function4d1f: ; 4d1f
+ ld hl, OBJECT_11
+ add hl, bc
+ ld [hl], $0
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ ld [hl], $10
+ call Function47a2
+; fallthrough
+; 4d2e
+
+Function4d2e: ; 4d2e
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ dec [hl]
+ ret nz
+ ld hl, OBJECT_11
+ add hl, bc
+ ld [hl], $2
+ ld hl, OBJECT_12
+ add hl, bc
+ ld [hl], $0
+ ld hl, OBJECT_31
+ add hl, bc
+ ld [hl], $0
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ ld [hl], $10
+ call Function47a2
+; fallthrough
+; 4d4f
+
+Function4d4f: ; 4d4f
+ ld hl, OBJECT_31
+ add hl, bc
+ inc [hl]
+ ld a, [hl]
+ ld d, $60
+ call Sine
+ ld a, h
+ sub $60
+ ld hl, OBJECT_SPRITE_Y_OFFSET
+ add hl, bc
+ ld [hl], a
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ dec [hl]
+ ret nz
+ call Function47a2
+; fallthrough
+; 4d6b
+
+Function4d6b: ; 4d6b
+ ld hl, OBJECT_12
+ add hl, bc
+ ld [hl], $0
+ ld hl, OBJECT_SPRITE_Y_OFFSET
+ add hl, bc
+ ld [hl], $0
+ ld hl, OBJECT_09
+ add hl, bc
+ ld [hl], $1
+ ret
+; 4d7e
+
+Function4d7e: ; 4d7e
+ call Function47a8
+ dw Function4d85
+ dw Function4d94
+; 4d85
+
+Function4d85: ; 4d85
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ ld [hl], $8
+ ld hl, OBJECT_SPRITE_Y_OFFSET
+ add hl, bc
+ ld [hl], $0
+ call Function47a2
+ ; fallthrough
+; 4d94
+
+Function4d94: ; 4d94
+ ld hl, OBJECT_SPRITE_Y_OFFSET
+ add hl, bc
+ ld a, [hl]
+ xor 1
+ ld [hl], a
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ dec [hl]
+ ret nz
+ ld hl, OBJECT_SPRITE_Y_OFFSET
+ add hl, bc
+ ld [hl], $0
+ ld hl, OBJECT_09
+ add hl, bc
+ ld [hl], $1
+ ret
+; 4daf
+
+Function4daf: ; 4daf
+ call Function4db5
+ jp Function4b79
+; 4db5
+
+Function4db5: ; 4db5
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ ld a, [hl]
+ and $1
+ ld a, $1
+ jr z, .asm_4dc2
+ ld a, $0
+
+.asm_4dc2
+ ld hl, OBJECT_11
+ add hl, bc
+ ld [hl], a
+ ret
+; 4dc8
+
+Function4dc8: ; 4dc8
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ ld a, [hl]
+ and $1
+ ld a, $4
+ jr z, .asm_4dd5
+ ld a, $5
+
+.asm_4dd5
+ ld hl, OBJECT_11
+ add hl, bc
+ ld [hl], a
+ jp Function4b79
+; 4ddd
+
+Function4ddd: ; 4ddd
+ ld hl, OBJECT_07
+ add hl, bc
+ ld [hl], $ff
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ dec [hl]
+ ret nz
+ ld hl, OBJECT_09
+ add hl, bc
+ ld [hl], $1
+ ret
+; 4df0
+
+Function4df0: ; 4df0
+ ld hl, OBJECT_07
+ add hl, bc
+ ld [hl], $ff
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ dec [hl]
+ ret nz
+ jp Function4357
+; 4dff
+
+Function4dff: ; 4dff
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ dec [hl]
+ ret nz
+ ld hl, OBJECT_09
+ add hl, bc
+ ld [hl], $1
+ ret
+; 4e0c
+
+Function4e0c: ; 4e0c
+ call Function47a8
+ dw Function4e13
+ dw Function4e21
+; 4e13
+
+Function4e13: ; 4e13
+ call Function4769
+ call Function1a47
+ ld hl, OBJECT_08
+ add hl, bc
+ ld [hl], a
+ call Function47a2
+ ; fallthrough
+; 4e21
+
+Function4e21: ; 4e21
+ call Function4fb2
+ ld hl, OBJECT_07
+ add hl, bc
+ ld [hl], $ff
+ ret
+; 4e2b
+
+Function4e2b: ; 4e2b
+ call Function4fb2
+ call Function46d7
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ dec [hl]
+ ret nz
+ call Function4600
+ ld hl, OBJECT_07
+ add hl, bc
+ ld [hl], $ff
+ ld hl, OBJECT_09
+ add hl, bc
+ ld [hl], $1
+ ret
+; 4e47
+
+Function4e47: ; 4e47
+ call Function46d7
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ dec [hl]
+ ret nz
+ call Function4600
+ jp Function4b1d
+; 4e56
+
+Function4e56: ; 4e56
+; AnimateStep?
+ call Function47a8
+ dw Function4e5d
+ dw Function4e65
+; 4e5d
+
+Function4e5d: ; 4e5d
+ ld hl, wd150
+ set 7, [hl]
+ call Function47a2
+ ; fallthrough
+; 4e65
+
+Function4e65: ; 4e65
+ call Function4738
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ dec [hl]
+ ret nz
+ ld hl, wd150
+ set 6, [hl]
+ call Function4600
+ ld hl, OBJECT_07
+ add hl, bc
+ ld [hl], $ff
+ ld hl, OBJECT_09
+ add hl, bc
+ ld [hl], $1
+ ret
+; 4e83
+
+Function4e83: ; 4e83
+ call Function47a8
+ dw Function4e8e
+ dw Function4ea4
+ dw Function4ead
+ dw Function4ec0
+; 4e8e
+
+Function4e8e: ; 4e8e
+ ld hl, OBJECT_07
+ add hl, bc
+ ld [hl], $ff
+ ld hl, OBJECT_12
+ add hl, bc
+ ld a, [hl]
+ ld [hl], $2
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ ld [hl], $2
+ call Function47a2
+ ; fallthrough
+; 4ea4
+
+Function4ea4: ; 4ea4
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ dec [hl]
+ ret nz
+ call Function47a2
+ ; fallthrough
+; 4ead
+
+Function4ead: ; 4ead
+ ld hl, OBJECT_29
+ add hl, bc
+ ld a, [hl]
+ ld hl, OBJECT_08
+ add hl, bc
+ ld [hl], a
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ ld [hl], $2
+ call Function47a2
+ ; fallthrough
+; 4ec0
+
+Function4ec0: ; 4ec0
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ dec [hl]
+ ret nz
+ ld hl, OBJECT_09
+ add hl, bc
+ ld [hl], $1
+ ret
+; 4ecd
+
+Function4ecd: ; 4ecd
+ call Function46d7
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ dec [hl]
+ ret nz
+ push bc
+ ld hl, OBJECT_MAP_X
+ add hl, bc
+ ld d, [hl]
+ ld hl, OBJECT_MAP_Y
+ add hl, bc
+ ld e, [hl]
+ ld hl, OBJECT_01
+ add hl, bc
+ ld a, [hl]
+ ld b, a
+ callba Function807e
+ pop bc
+ ld hl, OBJECT_FLAGS
+ add hl, bc
+ res 2, [hl]
+ call Function4600
+ ld hl, OBJECT_07
+ add hl, bc
+ ld [hl], $ff
+ ld hl, OBJECT_09
+ add hl, bc
+ ld [hl], $1
+ ret
+; 4f04
+
+Function4f04: ; 4f04
+ ld hl, OBJECT_29
+ add hl, bc
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ ld hl, OBJECT_00
+ add hl, de
+ ld a, [hl]
+ and a
+ jr z, .asm_4f30
+ ld hl, OBJECT_SPRITE_X
+ add hl, de
+ ld a, [hl]
+ ld hl, OBJECT_SPRITE_X
+ add hl, bc
+ ld [hl], a
+ ld hl, OBJECT_SPRITE_Y
+ add hl, de
+ ld a, [hl]
+ ld hl, OBJECT_SPRITE_Y
+ add hl, bc
+ ld [hl], a
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ ld a, [hl]
+ and a
+ ret z
+ dec [hl]
+ ret nz
+
+.asm_4f30
+ jp Function4357
+; 4f33
+
+Function4f33: ; 4f33
+ call Function47a8
+ dw Function4f3a
+ dw Function4f43
+; 4f3a
+
+Function4f3a: ; 4f3a
+ xor a
+ ld hl, OBJECT_29
+ add hl, bc
+ ld [hl], a
+ call Function47a2
+ ; fallthrough
+; 4f43
+
+Function4f43: ; 4f43
+ ld hl, OBJECT_29
+ add hl, bc
+ ld d, [hl]
+ ld a, [wd14f]
+ sub d
+ ld [wd14f], a
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ dec [hl]
+ jr z, .asm_4f68
+ ld a, [hl]
+ call Function4f6c
+ ld hl, OBJECT_29
+ add hl, bc
+ ld [hl], a
+ ld d, a
+ ld a, [wd14f]
+ add d
+ ld [wd14f], a
+ ret
+
+.asm_4f68
+ call Function4357
+ ret
+; 4f6c
+
+Function4f6c: ; 4f6c
+ ld hl, OBJECT_30
+ add hl, bc
+ and 1
+ ld a, [hl]
+ ret z
+ cpl
+ inc a
+ ret
+; 4f77
+
+Function4f77: ; 4f77
+ call Function47a8 ; ????
+; 4f7a
+
+Function4f7a: ; 4f7a
+ call Function47a8
+ dw Function4f83
+ dw Function4f83
+ dw Function4f83
+; 4f83
+
+Function4f83: ; 4f83
+ call Function47a8
+ dw Function4f8a
+ dw Function4f99
+; 4f8a
+
+Function4f8a: ; 4f8a
+ ld hl, OBJECT_11
+ add hl, bc
+ ld [hl], $10
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ ld [hl], $10
+ call Function47a2
+; 4f99
+
+Function4f99: ; 4f99
+ ld hl, OBJECT_STEP_DURATION
+ add hl, bc
+ dec [hl]
+ ret nz
+ ld hl, OBJECT_SPRITE_Y_OFFSET
+ add hl, bc
+ ld [hl], $60
+ ld hl, OBJECT_12
+ add hl, bc
+ ld [hl], $0
+ ld hl, OBJECT_09
+ add hl, bc
+ ld [hl], $1
+ ret
+; 4fb2
+
+Function4fb2: ; 4fb2
+ ret
+; 4fb3
+
+Function4fb3: ; 4fb3
+ ld hl, OBJECT_29
+ add hl, bc
+ inc [hl]
+ ld a, [hl]
+ srl a
+ srl a
+ and 7
+ ld l, a
+ ld h, 0
+ ld de, .y
+ add hl, de
+ ld a, [hl]
+ ld hl, OBJECT_SPRITE_Y_OFFSET
+ add hl, bc
+ ld [hl], a
+ ret
+; 4fcd
+
+.y ; 4fcd
+ db 0, -1, -2, -3, -4, -3, -2, -1
+; 4fd5
+
+UpdateJumpPosition: ; 4fd5
+ call GetStepVector
+ ld a, h
+ ld hl, OBJECT_31
+ add hl, bc
+ ld e, [hl]
+ add e
+ ld [hl], a
+ nop
+ srl e
+ ld d, 0
+ ld hl, .y
+ add hl, de
+ ld a, [hl]
+ ld hl, OBJECT_SPRITE_Y_OFFSET
+ add hl, bc
+ ld [hl], a
+ ret
+; 4ff0
+
+.y ; 4ff0
+ db -4, -6, -8, -10, -11, -12, -12, -12
+ db -11, -10, -9, -8, -6, -4, 0, 0
+; 5000
+
+Function5000: ; 5000
+ ld a, [wc2de]
+ ld hl, wc2df
+ ld [hl], a
+ ld a, $3e
+ ld [wc2de], a
+ ld a, [hl]
+ ret
+; 500e
+
+Function500e: ; 500e
+ ld hl, wc2e3
+ call Function1aae
+ ret
+; 5015
+
+Function5015: ; 5015
+ ld hl, OBJECT_27
+ add hl, bc
+ ld e, [hl]
+ inc [hl]
+ ld d, 0
+ ld hl, wc2e2
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ add hl, de
+ ld a, [hl]
+ ret
+; 5026
+
+Function5026: ; 5026
+ ld hl, OBJECT_27
+ add hl, bc
+ ld e, [hl]
+ inc [hl]
+ ld d, 0
+ ld hl, wc2e6
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ add hl, de
+ ld a, [hl]
+ ret
+; 5037
+
+Function5037: ; 5037
+ ld hl, Function503d
+ jp Function5041
+; 503d
+
+Function503d: ; 503d
+ ld a, [wc2e2]
+ ret
+; 5041
+
+Function5041: ; 5041
+ call Function5055
+.asm_5044
+ xor a
+ ld [wc2ea], a
+ call Function505e
+ call Function506b
+ ld a, [wc2ea]
+ and a
+ jr nz, .asm_5044
+ ret
+; 5055
+
+Function5055: ; 5055
+ ld a, l
+ ld [wc2eb], a
+ ld a, h
+ ld [wc2ec], a
+ ret
+; 505e
+
+Function505e: ; 505e
+ ld hl, wc2eb
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp [hl]
+; 5065
+
+Function5065: ; 5065
+ ld a, $1
+ ld [wc2ea], a
+ ret
+; 506b
+
+Function506b: ; 506b
+ push af
+ call Function54b8
+ pop af
+ ld hl, MovementPointers
+ rst JumpTable
+ ret
+; 5075
+
+
+; 5075
+INCLUDE "engine/movement.asm"
+; 54b8
+
+
+Function54b8: ; 54b8
+ ld e, a
+ ld a, [wd4ce]
+ cp $ff
+ ret z
+ ld a, [wd4cd]
+ ld d, a
+ ld a, [$ffaf]
+ cp d
+ ret nz
+ ld a, e
+ cp $3e
+ ret z
+ cp $47
+ ret z
+ cp $4b
+ ret z
+ cp $50
+ ret z
+ cp $8
+ ret c
+ push af
+ ld hl, wd4d0
+ inc [hl]
+ ld e, [hl]
+ ld d, 0
+ ld hl, wd4d1
+ add hl, de
+ pop af
+ ld [hl], a
+ ret
+; 54e6
+
+Function54e6: ; 54e6
+ ld hl, wd4d0
+ ld a, [hl]
+ and a
+ jr z, .asm_5503
+ cp $ff
+ jr z, .asm_5503
+ dec [hl]
+ ld e, a
+ ld d, 0
+ ld hl, wd4d1
+ add hl, de
+ inc e
+ ld a, $ff
+.asm_54fc
+ ld d, [hl]
+ ld [hld], a
+ ld a, d
+ dec e
+ jr nz, .asm_54fc
+ ret
+
+.asm_5503
+ call Function550a
+ ret c
+ ld a, $3e
+ ret
+; 550a
+
+Function550a: ; 550a
+ ld a, [wd4cd]
+ cp $ff
+ jr z, .asm_5520
+ push bc
+ call Function1ae5
+ ld hl, OBJECT_00
+ add hl, bc
+ ld a, [hl]
+ pop bc
+ and a
+ jr z, .asm_5520
+ and a
+ ret
+
+.asm_5520
+ ld a, $ff
+ ld [wd4ce], a
+ ld a, $47
+ scf
+ ret
+; 5529
+
+Function5529: ; 5529
+ push bc
+ ld de, .data_5535
+ call Function55b9
+ call Function55ac
+ pop bc
+ ret
+
+.data_5535
+ db $00, $05, $1b
+; 5538
+
+Function5538: ; 5538
+ push bc
+ ld de, .data_5544
+ call Function55b9
+ call Function55ac
+ pop bc
+ ret
+
+.data_5544
+ db $00, $05, $22
+; 5547
+
+Function5547: ; 5547
+ push bc
+ ld de, .data_5553
+ call Function55b9
+ call Function55ac
+ pop bc
+ ret
+
+.data_5553
+ db $00, $05, $1c
+; 5556
+
+Function5556: ; 5556
+ push bc
+ ld de, .data_5562
+ call Function55b9
+ call Function55ac
+ pop bc
+ ret
+
+.data_5562
+ db $00, $06, $23
+; 5565
+
+Function5565: ; 5565
+ push bc
+ push af
+ ld de, .data_5576
+ call Function55b9
+ pop af
+ ld [wc2f5], a
+ call Function55ac
+ pop bc
+ ret
+
+.data_5576
+ db $00, $05, $1d
+; 5579
+
+Function5579: ; 5579
+ push bc
+ ld a, [$ffaf]
+ ld c, a
+ call Function5582
+ pop bc
+ ret
+; 5582
+
+Function5582: ; 5582
+ ld de, ObjectStructs
+ ld a, $d
+.asm_5587
+ push af
+ ld hl, OBJECT_04
+ add hl, de
+ bit 7, [hl]
+ jr z, .asm_55a1
+ ld hl, OBJECT_00
+ add hl, de
+ ld a, [hl]
+ and a
+ jr z, .asm_55a1
+ push bc
+ xor a
+ ld bc, ObjectStruct2 - ObjectStruct1
+ call ByteFill
+ pop bc
+
+.asm_55a1
+ ld hl, ObjectStruct2 - ObjectStruct1
+ add hl, de
+ ld d, h
+ ld e, l
+ pop af
+ dec a
+ jr nz, .asm_5587
+ ret
+; 55ac
+
+Function55ac: ; 55ac
+ call Function1a13
+ ret nc
+ ld d, h
+ ld e, l
+ callba Function8286
+ ret
+; 55b9
+
+Function55b9: ; 55b9
+ ld hl, wc2f0
+ ld [hl], $ff
+ inc hl
+ ld [hl], $ff
+ inc hl
+ ld a, [de]
+ inc de
+ ld [hli], a
+ ld a, [de]
+ inc de
+ ld [hli], a
+ ld a, [de]
+ ld [hli], a
+ ld a, [$ffaf]
+ ld [hli], a
+ push hl
+ ld hl, OBJECT_MAP_X
+ add hl, bc
+ ld d, [hl]
+ ld hl, OBJECT_MAP_Y
+ add hl, bc
+ ld e, [hl]
+ pop hl
+ ld [hl], d
+ inc hl
+ ld [hl], e
+ inc hl
+ ld [hl], $ff
+ ret
+; 55e0
+
+Function55e0:: ; 55e0
+ ld a, [VramState]
+ bit 0, a
+ ret z
+ ld bc, ObjectStructs
+ xor a
+.asm_55ea
+ ld [$ffaf], a
+ call Function1af1
+ jr z, .asm_55f4
+ call Function565c
+
+.asm_55f4
+ ld hl, ObjectStruct2 - ObjectStruct1
+ add hl, bc
+ ld b, h
+ ld c, l
+ ld a, [$ffaf]
+ inc a
+ cp $d
+ jr nz, .asm_55ea
+ ret
+; 5602
+
+Function5602: ; 5602
+ call Function5645
+ ld a, $0
+ call Function5629
+ ld a, [wd459]
+ bit 7, a
+ jr z, .asm_5619
+ ld a, [$ffe0]
+ and a
+ jr z, .asm_5619
+ call Function5629
+
+.asm_5619
+ call Function5920
+ ret
+; 561d
+
+Function561d: ; 561d
+ call Function5645
+ ld a, $0
+ call Function5629
+ call Function5920
+ ret
+; 5629
+
+Function5629: ; 5629
+ cp $10
+ ret nc
+ call GetMapObject
+ ld hl, $0000
+ add hl, bc
+ ld a, [hl]
+ cp $ff
+ ret z
+ cp $d
+ ret nc
+ call Function1ae5
+ call Function1af1
+ ret z
+ call Function5673
+ ret
+; 5645
+
+Function5645: ; 5645
+ xor a
+ ld bc, ObjectStructs
+.asm_5649
+ ld [$ffaf], a
+ call Function5680
+ ld hl, ObjectStruct2 - ObjectStruct1
+ add hl, bc
+ ld b, h
+ ld c, l
+ ld a, [$ffaf]
+ inc a
+ cp $d
+ jr nz, .asm_5649
+ ret
+; 565c
+
+Function565c: ; 565c
+ push bc
+ call Function56cd
+ pop bc
+ jr c, Function5680
+ call Function56a3
+ jr c, Function5680
+ call Function5688
+ callba Function4440
+ xor a
+ ret
+; 5673
+
+Function5673: ; 5673
+ call Function56a3
+ jr c, Function5680
+ callba Function4440
+ xor a
+ ret
+; 5680
+
+Function5680: ; 5680
+ ld hl, OBJECT_FACING
+ add hl, bc
+ ld [hl], $ff
+ scf
+ ret
+; 5688
+
+Function5688: ; 5688
+ push bc
+ ld hl, OBJECT_MAP_X
+ add hl, bc
+ ld d, [hl]
+ ld hl, OBJECT_MAP_Y
+ add hl, bc
+ ld e, [hl]
+ call Function2a3c
+ pop bc
+ ld hl, OBJECT_STANDING_TILE
+ add hl, bc
+ ld [hl], a
+ callba Function463f
+ ret
+; 56a3
+
+Function56a3: ; 56a3
+ ld hl, OBJECT_MAP_X
+ add hl, bc
+ ld d, [hl]
+ ld hl, OBJECT_MAP_Y
+ add hl, bc
+ ld e, [hl]
+ inc d
+ inc e
+ ld a, [XCoord]
+ cp d
+ jr z, .asm_56bc
+ jr nc, .asm_56cb
+ add $b
+ cp d
+ jr c, .asm_56cb
+
+.asm_56bc
+ ld a, [YCoord]
+ cp e
+ jr z, .asm_56c9
+ jr nc, .asm_56cb
+ add $a
+ cp e
+ jr c, .asm_56cb
+
+.asm_56c9
+ xor a
+ ret
+
+.asm_56cb
+ scf
+ ret
+; 56cd
+
+Function56cd: ; 56cd
+ ld a, [wd14c]
+ ld d, a
+ ld hl, OBJECT_SPRITE_X_OFFSET
+ add hl, bc
+ ld a, [hl]
+ ld hl, OBJECT_SPRITE_X
+ add hl, bc
+ add [hl]
+ add d
+ cp $f0
+ jr nc, .asm_56e5
+ cp $a0
+ jp nc, .asm_5768
+
+.asm_56e5
+ and $7
+ ld d, $2
+ cp $4
+ jr c, .asm_56ef
+ ld d, $3
+
+.asm_56ef
+ ld a, [hl]
+ srl a
+ srl a
+ srl a
+ cp $14
+ jr c, .asm_56fc
+ sub $20
+
+.asm_56fc
+ ld [$ffbd], a
+ ld a, [wd14d]
+ ld e, a
+ ld hl, OBJECT_SPRITE_Y_OFFSET
+ add hl, bc
+ ld a, [hl]
+ ld hl, OBJECT_SPRITE_Y
+ add hl, bc
+ add [hl]
+ add e
+ cp $f0
+ jr nc, .asm_5715
+ cp $90
+ jr nc, .asm_5768
+
+.asm_5715
+ and $7
+ ld e, $2
+ cp $4
+ jr c, .asm_571f
+ ld e, $3
+
+.asm_571f
+ ld a, [hl]
+ srl a
+ srl a
+ srl a
+ cp $12
+ jr c, .asm_572c
+ sub $20
+
+.asm_572c
+ ld [$ffbe], a
+ ld hl, OBJECT_PALETTE
+ add hl, bc
+ bit 7, [hl]
+ jr z, .asm_573e
+ ld a, d
+ add $2
+ ld d, a
+ ld a, e
+ add $2
+ ld e, a
+
+.asm_573e
+ ld a, d
+ ld [$ffbf], a
+.asm_5741
+ ld a, [$ffbf]
+ ld d, a
+ ld a, [$ffbe]
+ add e
+ dec a
+ cp $12
+ jr nc, .asm_5763
+ ld b, a
+.asm_574d
+ ld a, [$ffbd]
+ add d
+ dec a
+ cp $14
+ jr nc, .asm_5760
+ ld c, a
+ push bc
+ call GetTileCoord
+ pop bc
+ ld a, [hl]
+ cp $60
+ jr nc, .asm_5768
+
+.asm_5760
+ dec d
+ jr nz, .asm_574d
+
+.asm_5763
+ dec e
+ jr nz, .asm_5741
+ and a
+ ret
+
+.asm_5768
+ scf
+ ret
+; 576a
+
+Function576a:: ; 576a
+ call Function5771
+ call Function5781
+ ret
+; 5771
+
+Function5771: ; 5771
+ xor a
+ ld [wd14e], a
+ ld [wd14f], a
+ ld [wd150], a
+ ld a, $ff
+ ld [wd151], a
+ ret
+; 5781
+
+Function5781: ; 5781
+ ld bc, ObjectStructs
+ xor a
+.asm_5785
+ ld [$ffaf], a
+ call Function1af1
+ jr z, .asm_578f
+ call Function437b
+
+.asm_578f
+ ld hl, ObjectStruct2 - ObjectStruct1
+ add hl, bc
+ ld b, h
+ ld c, l
+ ld a, [$ffaf]
+ inc a
+ cp $d
+ jr nz, .asm_5785
+ ret
+; 579d
+
+Function579d: ; 579d
+ ld a, $3e
+ ld [wc2de], a
+ ld [wc2df], a
+ xor a
+ ld [wd04e], a
+ ld [wd4e2], a
+ call Function57bc
+ callba Function149c6
+ call c, Function57d9
+ call Function57ca
+ ret
+; 57bc
+
+Function57bc: ; 57bc
+ ld hl, wd45b
+ bit 7, [hl]
+ jr nz, .asm_57c4
+ ret
+
+.asm_57c4
+ ld a, $0
+ ld [PlayerAction], a
+ ret
+; 57ca
+
+Function57ca: ; 57ca
+ ld hl, wd45b
+ bit 5, [hl]
+ ret z
+ ld a, [wd45b]
+ and $3
+ add a
+ add a
+ jr Function57db
+; 57d9
+
+Function57d9: ; 57d9
+ ld a, $0
+ ; fallthrough
+; 57db
+
+Function57db: ; 57db
+ ld bc, PlayerStruct
+ call Function1af8
+ ret
+; 57e2
+
+Function57e2: ; 57e2
+ ld a, d
+ and $80
+ ret z
+ ld bc, $0000 ; debug?
+ ld hl, OBJECT_08
+ add hl, bc
+ ld a, [hl]
+ or d
+ ld [hl], a
+ ld a, d
+ swap a
+ and $7
+ ld d, a
+ ld bc, PlayerStruct
+ ld hl, OBJECT_PALETTE
+ add hl, bc
+ ld a, [hl]
+ and $f8
+ or d
+ ld [hl], a
+ ret
+; 5803
+
+Function5803:: ; 5803
+ push bc
+ ld a, b
+ call Function5815
+ pop bc
+ ret c
+ ld a, c
+ call Function582c
+ callba Function848a
+ ret
+; 5815
+
+Function5815: ; 5815
+ call Function18de
+ ret c
+ ld a, [$ffb0]
+ ld [wd4cd], a
+ ret
+; 581f
+
+Function581f:: ; 581f
+ call Function5826
+ call Function5847
+ ret
+; 5826
+
+Function5826: ; 5826
+ ld a, $ff
+ ld [wd4cd], a
+ ret
+; 582c
+
+Function582c: ; 582c
+ push af
+ call Function5847
+ pop af
+ call Function18de
+ ret c
+ ld hl, OBJECT_03
+ add hl, bc
+ ld [hl], $13
+ ld hl, OBJECT_09
+ add hl, bc
+ ld [hl], $0
+ ld a, [$ffb0]
+ ld [wd4ce], a
+ ret
+; 5847
+
+Function5847: ; 5847
+ ld a, [wd4ce]
+ cp $ff
+ ret z
+ call Function1ae5
+ callba Function58e3
+ ld a, $ff
+ ld [wd4ce], a
+ ret
+; 585c
+
+Function585c:: ; 585c
+ ld a, c
+ call Function18de
+ ret c
+ push bc
+ call Function587a
+ pop bc
+ ld hl, OBJECT_FLAGS
+ add hl, bc
+ res 5, [hl]
+ xor a
+ ret
+; 586e
+
+Function586e: ; 586e
+ call Function18de
+ ret c
+ ld hl, OBJECT_FLAGS
+ add hl, bc
+ set 5, [hl]
+ xor a
+ ret
+; 587a
+
+Function587a: ; 587a
+ ld bc, ObjectStructs
+ xor a
+.asm_587e
+ push af
+ call Function1af1
+ jr z, .asm_588a
+ ld hl, OBJECT_FLAGS
+ add hl, bc
+ set 5, [hl]
+
+.asm_588a
+ ld hl, ObjectStruct2 - ObjectStruct1
+ add hl, bc
+ ld b, h
+ ld c, l
+ pop af
+ inc a
+ cp $d
+ jr nz, .asm_587e
+ ret
+; 5897
+
+Function5897:: ; 5897
+ ld a, [wd4cd]
+ cp $ff
+ ret z
+ push bc
+ call Function1ae5
+ ld hl, OBJECT_01
+ add hl, bc
+ ld a, [hl]
+ pop bc
+ cp c
+ ret nz
+ ld a, [wd4ce]
+ cp $ff
+ ret z
+ call Function1ae5
+ ld hl, OBJECT_FLAGS
+ add hl, bc
+ res 5, [hl]
+ ret
+; 58b9
+
+Function58b9:: ; 58b9
+ push bc
+ ld bc, ObjectStructs
+ xor a
+.asm_58be
+ push af
+ call Function1af1
+ jr z, .asm_58ca
+ ld hl, OBJECT_FLAGS
+ add hl, bc
+ res 5, [hl]
+
+.asm_58ca
+ ld hl, ObjectStruct2 - ObjectStruct1
+ add hl, bc
+ ld b, h
+ ld c, l
+ pop af
+ inc a
+ cp $d
+ jr nz, .asm_58be
+ pop bc
+ ret
+; 58d8
+
+Function58d8: ; 58d8
+ call Function18de
+ ret c
+ ld hl, OBJECT_FLAGS
+ add hl, bc
+ res 5, [hl]
+ ret
+; 58e3
+
+Function58e3: ; 58e3
+ ld hl, OBJECT_01
+ add hl, bc
+ ld a, [hl]
+ cp $ff
+ jp z, Function5903
+ push bc
+ call GetMapObject
+ ld hl, $0004
+ add hl, bc
+ ld a, [hl]
+ pop bc
+ ld hl, OBJECT_03
+ add hl, bc
+ ld [hl], a
+ ld hl, OBJECT_09
+ add hl, bc
+ ld [hl], $0
+ ret
+; 5903
+
+Function5903: ; 5903
+ call GetSpriteDirection
+ rrca
+ rrca
+ ld e, a
+ ld d, 0
+ ld hl, .data_591c
+ add hl, de
+ ld a, [hl]
+ ld hl, OBJECT_03
+ add hl, bc
+ ld [hl], a
+ ld hl, OBJECT_09
+ add hl, bc
+ ld [hl], $0
+ ret
+
+.data_591c
+ db 6, 7, 8, 9
+; 5920
+
+Function5920:: ; 5920
+ ld a, [VramState]
+ bit 0, a
+ ret z
+ xor a
+ ld [$ffbd], a
+ ld a, [hOAMUpdate]
+ push af
+ ld a, $1
+ ld [hOAMUpdate], a
+ call Function5991
+ call Function593a
+ pop af
+ ld [hOAMUpdate], a
+ ret
+; 593a
+
+Function593a: ; 593a
+ ld a, [VramState]
+ bit 1, a
+ ld b, $a0
+ jr z, .asm_5945
+ ld b, $70
+
+.asm_5945
+ ld a, [$ffbd]
+ cp b
+ ret nc
+ ld l, a
+ ld h, $c4
+ ld de, OBJECT_04
+ ld a, b
+ ld c, $a0
+.asm_5952
+ ld [hl], c
+ add hl, de
+ cp l
+ jr nz, .asm_5952
+ ret
+; 5958
+
+Function5958: ; 5958
+ push hl
+ push de
+ push bc
+ ld a, [wd14c]
+ ld d, a
+ ld a, [wd14d]
+ ld e, a
+ ld bc, ObjectStructs
+ ld a, $d
+
+.asm_5968
+ push af
+ call Function1af1
+ jr z, .asm_597c
+
+ ld hl, OBJECT_SPRITE_X
+ add hl, bc
+ ld a, [hl]
+ add d
+ ld [hl], a
+
+ ld hl, OBJECT_SPRITE_Y
+ add hl, bc
+ ld a, [hl]
+ add e
+ ld [hl], a
+
+.asm_597c
+ ld hl, ObjectStruct2 - ObjectStruct1
+ add hl, bc
+ ld b, h
+ ld c, l
+ pop af
+ dec a
+ jr nz, .asm_5968
+
+ xor a
+ ld [wd14c], a
+ ld [wd14d], a
+ pop bc
+ pop de
+ pop hl
+ ret
+; 5991
+
+Function5991: ; 5991
+ call Function59a4
+ ld c, $30
+ call Function59f3
+ ld c, $20
+ call Function59f3
+ ld c, $10
+ call Function59f3
+ ret
+; 59a4
+
+Function59a4: ; 59a4
+ xor a
+ ld hl, wc2eb
+ ld bc, 13
+ call ByteFill
+
+ ld d, 0
+ ld bc, ObjectStructs
+ ld hl, wc2eb
+.loop
+ push hl
+ call Function1af1
+ jr z, .skip
+
+ ld hl, OBJECT_FACING
+ add hl, bc
+ ld a, [hl]
+ cp -1
+ jr z, .skip
+
+; Define the sprite priority.
+ ld e, $10
+ ld hl, OBJECT_FLAGS
+ add hl, bc
+ bit 0, [hl]
+ jr nz, .add
+ ld e, $20
+ bit 1, [hl]
+ jr z, .add
+ ld e, $30
+ jr .add
+
+.skip
+ ld hl, ObjectStruct2 - ObjectStruct1
+ add hl, bc
+ ld b, h
+ ld c, l
+ pop hl
+ jr .next
+
+.add
+ ld hl, ObjectStruct2 - ObjectStruct1
+ add hl, bc
+ ld b, h
+ ld c, l
+ pop hl
+ ld a, d
+ or e
+ ld [hli], a
+
+.next
+ inc d
+ ld a, d
+ cp $d
+ jr nz, .loop
+ ret
+; 59f3
+
+Function59f3: ; 59f3
+ ld hl, wc2eb
+.next
+ ld a, [hli]
+ ld d, a
+ and $f0
+ ret z
+ cp c
+ jr nz, .next
+
+ push bc
+ push hl
+ ld a, d
+ and $f
+ call Function5ac2
+ call Function5a0d
+ pop hl
+ pop bc
+ jr .next
+; 5a0d
+
+Function5a0d: ; 5a0d
+ ld hl, OBJECT_SPRITE
+ add hl, bc
+ ld a, [hl]
+ and $7f
+ ld [$ffc1], a
+
+ xor a
+ bit 7, [hl]
+ jr nz, .asm_5a1d
+ or 8
+.asm_5a1d
+
+ ld hl, OBJECT_FLAGS
+ add hl, bc
+ ld e, [hl]
+ bit 7, e
+ jr z, .asm_5a28
+ or $80
+.asm_5a28
+
+ bit 4, e
+ jr z, .asm_5a2e
+ or $10
+.asm_5a2e
+
+ ld hl, OBJECT_PALETTE
+ add hl, bc
+ ld d, a
+ ld a, [hl]
+ and 7
+ or d
+ ld d, a
+
+ xor a
+ bit 3, e
+ jr z, .asm_5a3f
+ or $80
+.asm_5a3f
+ ld [$ffc2], a
+
+ ld hl, OBJECT_SPRITE_X
+ add hl, bc
+ ld a, [hl]
+
+ ld hl, OBJECT_SPRITE_X_OFFSET
+ add hl, bc
+ add [hl]
+
+ add 8
+
+ ld e, a
+ ld a, [wd14c]
+ add e
+ ld [$ffbf], a
+
+ ld hl, OBJECT_SPRITE_Y
+ add hl, bc
+ ld a, [hl]
+
+ ld hl, OBJECT_SPRITE_Y_OFFSET
+ add hl, bc
+ add [hl]
+
+ add 12
+
+ ld e, a
+ ld a, [wd14d]
+ add e
+ ld [$ffc0], a
+
+ ld hl, OBJECT_FACING
+ add hl, bc
+ ld a, [hl]
+ cp -1
+ jp z, .done
+ cp NUM_FACINGS
+ jp nc, .done
+
+ ld l, a
+ ld h, 0
+ add hl, hl
+ ld bc, Facings
+ add hl, bc
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+
+ ld a, [$ffbd]
+ ld c, a
+ ld b, Sprites / $100
+ ld a, [hli]
+ ld [$ffbe], a
+ add c
+ cp SpritesEnd % $100
+ jr nc, .full
+
+.addsprite
+ ld a, [$ffc0]
+ add [hl]
+ inc hl
+
+ ld [bc], a
+ inc c
+
+ ld a, [$ffbf]
+ add [hl]
+ inc hl
+
+ ld [bc], a
+ inc c
+
+ ld e, [hl]
+ inc hl
+
+ ld a, [$ffc1]
+ bit 2, e
+ jr z, .asm_5aa3
+ xor a
+.asm_5aa3
+ add [hl]
+ inc hl
+
+ ld [bc], a
+ inc c
+
+ ld a, e
+ bit 1, a
+ jr z, .asm_5aaf
+ ld a, [$ffc2]
+ or e
+.asm_5aaf
+ and $f0
+ or d
+ ld [bc], a
+ inc c
+
+ ld a, [$ffbe]
+ dec a
+ ld [$ffbe], a
+ jr nz, .addsprite
+
+ ld a, c
+ ld [$ffbd], a
+
+.done
+ xor a
+ ret
+
+.full
+ scf
+ ret
+; 5ac2
+
+Function5ac2: ; 5ac2
+ ld c, a
+ ld b, 0
+ ld hl, .Addresses
+ add hl, bc
+ add hl, bc
+ ld c, [hl]
+ inc hl
+ ld b, [hl]
+ ret
+; 5ace
+
+.Addresses ; 5ace
+ dw PlayerStruct
+ dw ObjectStruct1
+ dw ObjectStruct2
+ dw ObjectStruct3
+ dw ObjectStruct4
+ dw ObjectStruct5
+ dw ObjectStruct6
+ dw ObjectStruct7
+ dw ObjectStruct8
+ dw ObjectStruct9
+ dw ObjectStruct10
+ dw ObjectStruct11
+ dw ObjectStruct12
+; 5ae8
+
diff --git a/engine/map_setup.asm b/engine/map_setup.asm
new file mode 100644
index 000000000..8c10954b3
--- /dev/null
+++ b/engine/map_setup.asm
@@ -0,0 +1,489 @@
+
+RunMapSetupScript:: ; 15363
+ ld a, [$ff9f]
+ and $f
+ dec a
+ ld c, a
+ ld b, 0
+ ld hl, MapSetupScripts
+ add hl, bc
+ add hl, bc
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ call ReadMapSetupScript
+ ret
+; 15377
+
+MapSetupScripts: ; 15377
+ dw MapSetupScript1
+ dw MapSetupScript2
+ dw MapSetupScript3
+ dw MapSetupScript4
+ dw MapSetupScript5
+ dw MapSetupScript6
+ dw MapSetupScript7
+ dw MapSetupScript8
+ dw MapSetupScript9
+ dw MapSetupScript10
+ dw MapSetupScript11
+ 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
+
+MapSetupScript12: ; 15390
+ db map_fade_out_palettes
+ db map_keep_roam
+
+MapSetupScript1: ; 15392
+ db map_lcd_off
+ db map_sound_off
+ db map_load_spawn
+ db map_attributes
+ db map_change_callback
+ db map_spawn_coord
+ db map_player_coord
+ db map_anchor_screen
+ db map_load_blocks
+ db map_buffer_screen
+ db map_load_graphics
+ db map_time_of_day
+ db map_load_objects
+ db map_lcd_on
+ db map_palettes
+ db map_face_down
+ db map_sprites
+ db map_bike_music
+ db map_max_volume
+ db map_fade_in_palettes
+ db map_animations_on
+ db map_wildmons
+ db -1
+
+MapSetupScript11: ; 153a9
+ db map_load_spawn
+ db map_attributes
+ db map_change_callback
+ db map_spawn_coord
+ db map_player_coord
+ db map_anchor_screen
+ db map_load_blocks
+ db map_buffer_screen
+ db map_lcd_off
+ db map_load_graphics
+ db map_time_of_day
+ db map_fade_out_music
+ db map_lcd_on
+ db map_load_objects
+ db map_palettes
+ db map_face_down
+ db map_sprites
+ db map_fade_music
+ db map_fade_in_palettes
+ db map_animations_on
+ db map_wildmons
+ db -1
+
+MapSetupScript7: ; 153bf
+ db map_animations_off
+ db map_load_connection
+ db map_attributes
+ db map_change_callback
+ db map_player_coord
+ db map_load_blocks
+ db map_load_tileset_header
+ db map_save_screen
+ db map_load_objects
+ db map_fade_music
+ db map_palettes
+ db map_stop_script
+ db map_keep_palettes
+ db map_wildmons
+ db map_update_roam
+ db map_animations_on
+ db -1
+
+MapSetupScript6: ; 153d0
+ db map_prolong_sprites
+
+MapSetupScript5: ; 153d1
+ db map_fade_out_palettes
+
+MapSetupScript9: ; 153d2
+ db map_load_warp
+ db map_attributes
+ db map_warp_face
+ db map_change_callback
+ db map_player_coord
+ db map_load_blocks
+ db map_buffer_screen
+ db map_lcd_off
+ db map_load_graphics
+ db map_time_of_day
+ db map_fade_out_music
+ db map_lcd_on
+ db map_load_objects
+ db map_palettes
+ db map_sprites
+ db map_fade_music
+ db map_fade_in_palettes
+ db map_animations_on
+ db map_wildmons
+ db map_update_roam
+ db -1
+
+MapSetupScript3: ; 153e7
+ db map_fade
+ db map_clear_bg_palettes
+ db map_lcd_off
+ db map_sound_off
+ db map_load_blocks
+ db map_connection_blocks
+ db map_load_graphics
+ db map_time_of_day
+ db map_lcd_on
+ db map_palettes
+ db map_sprites
+ db map_music_force
+ db map_fade_in_palettes
+ db map_animations_on
+ db map_wildmons
+ db -1
+
+MapSetupScript8: ; 153f7
+ db map_fade
+ db map_lcd_off
+ db map_sound_off
+ db map_change_callback
+ db map_load_blocks
+ db map_buffer_screen
+ db map_load_graphics
+ db map_time_of_day
+ db map_lcd_on
+ db map_palettes
+ db map_sprites
+ db map_bike_music
+ db map_fade_in_palettes
+ db map_animations_on
+ db map_wildmons
+ db map_text_scroll_off
+ db -1
+
+MapSetupScript2: ; 15408
+ db map_lcd_off
+ db map_sound_off
+ db map_attributes_2
+ db map_anchor_screen
+ db map_start_callback
+ db map_load_blocks
+ db map_connection_blocks
+ db map_buffer_screen
+ db map_load_graphics
+ db map_time_of_day
+ db map_lcd_on
+ db map_palettes
+ db map_sprites
+ db map_bike_music
+ db map_fade_in_palettes
+ db map_animations_on
+ db map_wildmons
+ db -1
+
+MapSetupScript10: ; 1541a
+ db map_load_blocks
+ db map_connection_blocks
+ db -1
+
+
+ReadMapSetupScript: ; 1541d
+.loop
+ ld a, [hli]
+ cp -1
+ ret z
+
+ push hl
+
+ ld c, a
+ ld b, 0
+ ld hl, MapSetupCommands
+ add hl, bc
+ add hl, bc
+ add hl, bc
+
+ ; bank
+ ld b, [hl]
+ inc hl
+
+ ; address
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+
+ ; Bit 7 of the bank indicates a parameter.
+ ; This is left unused.
+ bit 7, b
+ jr z, .go
+
+ pop de
+ ld a, [de]
+ ld c, a
+ inc de
+ push de
+
+.go
+ ld a, b
+ and $7f
+ rst FarCall
+
+ pop hl
+ jr .loop
+; 15440
+
+MapSetupCommands: ; 15440
+ dbw BANK(EnableLCD), EnableLCD
+ dbw BANK(DisableLCD), DisableLCD
+ dbw BANK(SoundRestart), SoundRestart
+ dbw BANK(PlayMapMusic), PlayMapMusic
+ dbw BANK(RestartMapMusic), RestartMapMusic
+ dbw BANK(FadeToMapMusic), FadeToMapMusic
+ dbw BANK(Function15574), Function15574
+ dbw BANK(EnterMapMusic), EnterMapMusic
+ dbw BANK(Function15587), Function15587
+ dbw BANK(Function3cae), Function3cae
+ dbw BANK(Function24cd), Function24cd
+ dbw BANK(Function28e3), Function28e3
+ dbw BANK(Function289d), Function289d
+ dbw BANK(Function2879), Function2879
+ dbw BANK(Function1047cf), Function1047cf
+ dbw BANK(LoadTilesetHeader), LoadTilesetHeader
+ dbw BANK(Function104750), Function104750
+ dbw BANK(Function1047eb), Function1047eb
+ dbw BANK(Function29ff8), Function29ff8
+ dbw BANK(Function1047f0), Function1047f0
+ dbw BANK(Function1045b0), Function1045b0
+ dbw BANK(Function1045c4), Function1045c4
+ dbw BANK(Function154d7), Function154d7
+ dbw BANK(LoadSpawnPoint), LoadSpawnPoint
+ dbw BANK(EnterMapConnection), EnterMapConnection
+ dbw BANK(Function1046c6), Function1046c6
+ dbw BANK(Function2309), Function2309
+ dbw BANK(Function2317), Function2317
+ dbw BANK(WhiteBGMap), WhiteBGMap
+ dbw BANK(Function8c084), Function8c084
+ dbw BANK(Function8c079), Function8c079
+ dbw BANK(Function10486d), Function10486d
+ dbw BANK(Function248a), Function248a
+ dbw BANK(Function57d9), Function57d9
+ dbw BANK(Function8029), Function8029
+ dbw BANK(Function80b8), Function80b8
+ dbw BANK(Function154eb), Function154eb
+ dbw BANK(Function154f1), Function154f1
+ dbw BANK(Function2a30d), Function2a30d
+ dbw BANK(Function2a394), Function2a394
+ dbw BANK(Function15567), Function15567
+ dbw BANK(Function154cf), Function154cf
+ dbw BANK(Function154d3), Function154d3
+ dbw BANK(Function1556d), Function1556d
+ dbw BANK(Function154ca), Function154ca
+ dbw BANK(Functionb8000), Functionb8000
+; 154ca
+
+
+Function154ca: ; 154ca
+ xor a
+ ld [wc2d7], a
+ ret
+; 154cf
+
+Function154cf: ; 154cf
+ ld a, $1
+ ld [$ffde], a
+ ret
+; 154d3
+
+Function154d3: ; 154d3
+ xor a
+ ld [$ffde], a
+ ret
+; 154d7
+
+Function154d7: ; 154d7
+ ld a, $2
+ call Function263b
+ callba Function2454f
+ callba Function8177
+ ret
+; 154ea (5:54ea)
+
+Function154ea: ; 154ea
+ ret
+; 154eb
+
+Function154eb: ; 154eb
+ ld hl, wd45b
+ set 7, [hl]
+ ret
+; 154f1
+
+Function154f1: ; 154f1
+ ld hl, wd45b
+ set 6, [hl]
+ ret
+
+Function154f7: ; 154f7
+ nop
+ call Function1550c
+ jr c, .asm_15508
+ call Function1554e
+ jr c, .asm_15508
+ call Function1551a
+ jr c, .asm_15508
+ ret
+.asm_15508
+ call Functione4a
+ ret
+
+Function1550c: ; 1550c (5:550c)
+ and a
+ ld hl, BikeFlags
+ bit 1, [hl]
+ ret z
+ ld a, $1
+ ld [PlayerState], a
+ scf
+ ret
+
+Function1551a: ; 1551a (5:551a)
+ ld a, [PlayerState]
+ cp $0
+ jr z, .asm_1554c
+ cp $2
+ jr z, .asm_1554c
+ cp $4
+ jr z, .asm_15545
+ cp $8
+ jr z, .asm_15545
+ call GetMapPermission
+ cp $3
+ jr z, .asm_1553e
+ cp $5
+ jr z, .asm_1553e
+ cp $7
+ jr z, .asm_1553e
+ jr .asm_1554c
+.asm_1553e
+ ld a, [PlayerState]
+ cp $1
+ jr nz, .asm_1554c
+.asm_15545
+ ld a, $0
+ ld [PlayerState], a
+ scf
+ ret
+.asm_1554c
+ and a
+ ret
+
+Function1554e: ; 1554e (5:554e)
+ call Function1852
+ jr nz, .asm_15565
+ ld a, [PlayerState]
+ cp $4
+ jr z, .asm_15563
+ cp $8
+ jr z, .asm_15563
+ ld a, $4
+ ld [PlayerState], a
+.asm_15563
+ scf
+ ret
+.asm_15565
+ and a
+ ret
+; 15567
+
+Function15567: ; 15567
+ ld a, 6
+ call SkipMusic
+ ret
+; 1556d
+
+Function1556d: ; 1556d
+ callba _UpdateTimePals
+ ret
+
+Function15574: ; 15574
+ ld e, 0
+ ld a, [MusicFadeIDLo]
+ ld d, 0
+ ld a, [MusicFadeIDHi]
+ ld a, $4
+ ld [MusicFade], a
+ call Function4b6
+ ret
+; 15587
+
+Function15587: ; 15587
+ ld a, [PlayerState]
+ cp $1
+ jr nz, .asm_15596
+ call VolumeOff
+ ld a, $88
+ ld [MusicFade], a
+.asm_15596
+ call Function3d2f
+ ret
+; 1559a
diff --git a/engine/map_triggers.asm b/engine/map_triggers.asm
new file mode 100644
index 000000000..56d1433ca
--- /dev/null
+++ b/engine/map_triggers.asm
@@ -0,0 +1,91 @@
+MapTriggers:: ; 4d01e
+; Map triggers
+
+trigger_def: MACRO
+; db group, map
+; dw address
+ map \1
+ dw \2
+ENDM
+
+ trigger_def POKECENTER_2F, wPokecenter2FTrigger
+ trigger_def TRADE_CENTER, wTradeCenterTrigger
+ trigger_def COLOSSEUM, wColosseumTrigger
+ trigger_def TIME_CAPSULE, wTimeCapsuleTrigger
+ trigger_def POWER_PLANT, wPowerPlantTrigger
+ trigger_def CERULEAN_GYM, wCeruleanGymTrigger
+ trigger_def ROUTE_25, wRoute25Trigger
+ trigger_def TRAINER_HOUSE_B1F, wTrainerHouseB1FTrigger
+ trigger_def VICTORY_ROAD_GATE, wVictoryRoadGateTrigger
+ trigger_def SAFFRON_TRAIN_STATION, wSaffronTrainStationTrigger
+ trigger_def ROUTE_16_GATE, wRoute16GateTrigger
+ trigger_def ROUTE_17_18_GATE, wRoute1718GateTrigger
+ trigger_def INDIGO_PLATEAU_POKECENTER_1F, wIndigoPlateauPokecenter1FTrigger
+ trigger_def WILLS_ROOM, wWillsRoomTrigger
+ trigger_def KOGAS_ROOM, wKogasRoomTrigger
+ trigger_def BRUNOS_ROOM, wBrunosRoomTrigger
+ trigger_def KARENS_ROOM, wKarensRoomTrigger
+ trigger_def LANCES_ROOM, wLancesRoomTrigger
+ trigger_def HALL_OF_FAME, wHallOfFameTrigger
+ trigger_def ROUTE_27, wRoute27Trigger
+ trigger_def NEW_BARK_TOWN, wNewBarkTownTrigger
+ trigger_def ELMS_LAB, wElmsLabTrigger
+ trigger_def KRISS_HOUSE_1F, wKrissHouse1FTrigger
+ trigger_def ROUTE_29, wRoute29Trigger
+ trigger_def CHERRYGROVE_CITY, wCherrygroveCityTrigger
+ trigger_def MR_POKEMONS_HOUSE, wMrPokemonsHouseTrigger
+ trigger_def ROUTE_32, wRoute32Trigger
+ trigger_def ROUTE_35_NATIONAL_PARK_GATE, wRoute35NationalParkGateTrigger
+ trigger_def ROUTE_36, wRoute36Trigger
+ trigger_def ROUTE_36_NATIONAL_PARK_GATE, wRoute36NationalParkGateTrigger
+ trigger_def AZALEA_TOWN, wAzaleaTownTrigger
+ trigger_def GOLDENROD_GYM, wGoldenrodGymTrigger
+ trigger_def GOLDENROD_MAGNET_TRAIN_STATION, wGoldenrodMagnetTrainStationTrigger
+ trigger_def GOLDENROD_POKECENTER_1F, wGoldenrodPokecenter1FTrigger
+ trigger_def OLIVINE_CITY, wOlivineCityTrigger
+ trigger_def ROUTE_34, wRoute34Trigger
+ trigger_def ROUTE_34_ILEX_FOREST_GATE, wRoute34IlexForestGateTrigger
+ trigger_def ECRUTEAK_HOUSE, wEcruteakHouseTrigger
+ trigger_def WISE_TRIOS_ROOM, wWiseTriosRoomTrigger
+ trigger_def ECRUTEAK_POKECENTER_1F, wEcruteakPokecenter1FTrigger
+ trigger_def ECRUTEAK_GYM, wEcruteakGymTrigger
+ trigger_def MAHOGANY_TOWN, wMahoganyTownTrigger
+ trigger_def ROUTE_42, wRoute42Trigger
+ trigger_def CIANWOOD_CITY, wCianwoodCityTrigger
+ trigger_def BATTLE_TOWER_1F, wBattleTower1FTrigger
+ trigger_def BATTLE_TOWER_BATTLE_ROOM, wBattleTowerBattleRoomTrigger
+ trigger_def BATTLE_TOWER_ELEVATOR, wBattleTowerElevatorTrigger
+ trigger_def BATTLE_TOWER_HALLWAY, wBattleTowerHallwayTrigger
+ trigger_def BATTLE_TOWER_OUTSIDE, wBattleTowerOutsideTrigger
+ trigger_def ROUTE_43_GATE, wRoute43GateTrigger
+ trigger_def MOUNT_MOON, wMountMoonTrigger
+ trigger_def SPROUT_TOWER_3F, wSproutTower3FTrigger
+ trigger_def TIN_TOWER_1F, wTinTower1FTrigger
+ trigger_def BURNED_TOWER_1F, wBurnedTower1FTrigger
+ trigger_def BURNED_TOWER_B1F, wBurnedTowerB1FTrigger
+ trigger_def RADIO_TOWER_5F, wRadioTower5FTrigger
+ trigger_def RUINS_OF_ALPH_OUTSIDE, wRuinsOfAlphOutsideTrigger
+ trigger_def RUINS_OF_ALPH_RESEARCH_CENTER, wRuinsOfAlphResearchCenterTrigger
+ trigger_def RUINS_OF_ALPH_HO_OH_CHAMBER, wRuinsOfAlphHoOhChamberTrigger
+ trigger_def RUINS_OF_ALPH_KABUTO_CHAMBER, wRuinsOfAlphKabutoChamberTrigger
+ trigger_def RUINS_OF_ALPH_OMANYTE_CHAMBER, wRuinsOfAlphOmanyteChamberTrigger
+ trigger_def RUINS_OF_ALPH_AERODACTYL_CHAMBER, wRuinsOfAlphAerodactylChamberTrigger
+ trigger_def RUINS_OF_ALPH_INNER_CHAMBER, wRuinsOfAlphInnerChamberTrigger
+ trigger_def MAHOGANY_MART_1F, wMahoganyMart1FTrigger
+ trigger_def TEAM_ROCKET_BASE_B1F, wTeamRocketBaseB1FTrigger
+ trigger_def TEAM_ROCKET_BASE_B2F, wTeamRocketBaseB2FTrigger
+ trigger_def TEAM_ROCKET_BASE_B3F, wTeamRocketBaseB3FTrigger
+ trigger_def UNDERGROUND_PATH_SWITCH_ROOM_ENTRANCES, wUndergroundPathSwitchRoomEntrancesTrigger
+ trigger_def SILVER_CAVE_ROOM_3, wSilverCaveRoom3Trigger
+ trigger_def VICTORY_ROAD, wVictoryRoadTrigger
+ trigger_def DRAGONS_DEN_B1F, wDragonsDenB1FTrigger
+ trigger_def DRAGON_SHRINE, wDragonShrineTrigger
+ trigger_def OLIVINE_PORT, wOlivinePortTrigger
+ trigger_def VERMILION_PORT, wVermilionPortTrigger
+ trigger_def FAST_SHIP_1F, wFastShip1FTrigger
+ trigger_def FAST_SHIP_B1F, wFastShipB1FTrigger
+ trigger_def MOUNT_MOON_SQUARE, wMountMoonSquareTrigger
+ trigger_def MOBILE_TRADE_ROOM_MOBILE, wMobileTradeRoomMobileTrigger
+ trigger_def MOBILE_BATTLE_ROOM, wMobileBattleRoomTrigger
+ db $ff
+; 4d15b
diff --git a/engine/more_phone_scripts.asm b/engine/more_phone_scripts.asm
index 55b5f98c3..96a9e58f2 100644
--- a/engine/more_phone_scripts.asm
+++ b/engine/more_phone_scripts.asm
@@ -1,5 +1,5 @@
UnknownScript_0xa0000:
- special $005d
+ special RandomPhoneMon
farscall UnknownScript_0xbde3f
if_equal $0, UnknownScript_0xa0013
farscall UnknownScript_0xbe51e
@@ -9,7 +9,7 @@ UnknownScript_0xa0013:
farjump UnknownScript_0xa002e
UnknownScript_0xa0017:
- special $005d
+ special RandomPhoneMon
farscall UnknownScript_0xbde3f
if_equal $0, UnknownScript_0xa002a
farscall UnknownScript_0xbe5d0
@@ -27,7 +27,7 @@ UnknownScript_0xa0036:
farjump UnknownScript_0xa0055
UnknownScript_0xa003e:
- special $005c
+ special Function2a51f
farscall UnknownScript_0xbde3f
if_equal $0, UnknownScript_0xa0051
farscall UnknownScript_0xa017a
@@ -37,7 +37,7 @@ UnknownScript_0xa0051:
farjump UnknownScript_0xa006c
UnknownScript_0xa0055:
- special $005c
+ special Function2a51f
farscall UnknownScript_0xbde3f
if_equal $0, UnknownScript_0xa0068
farscall UnknownScript_0xa0226
@@ -851,7 +851,7 @@ UnknownScript_0xa059c:
farjump UnknownScript_0xa053a
UnknownScript_0xa05a0:
- special $005b
+ special Function2a4ab
end
UnknownScript_0xa05a4:
diff --git a/engine/pack.asm b/engine/pack.asm
new file mode 100644
index 000000000..b83576148
--- /dev/null
+++ b/engine/pack.asm
@@ -0,0 +1,1692 @@
+
+Pack: ; 10000
+ ld hl, Options
+ set 4, [hl]
+ call Function1068a
+.loop
+ call Functiona57
+ ld a, [wcf63]
+ bit 7, a
+ jr nz, .done
+ call Function10026
+ call DelayFrame
+ jr .loop
+
+.done
+ ld a, [wcf65]
+ ld [wd0d6], a
+ ld hl, Options
+ res 4, [hl]
+ ret
+; 10026
+
+Function10026: ; 10026
+ ld a, [wcf63]
+ ld hl, Jumptable_10030
+ call Function1086b
+ jp [hl]
+; 10030
+
+
+Jumptable_10030: ; 10030 (4:4030)
+ dw Function10046
+ dw Function10056
+ dw Function10067
+ dw Function10186
+ dw Function10198
+ dw Function10094
+ dw Function100a6
+ dw Function100d3
+ dw Function100e8
+ dw Function10874
+ dw Function1087e
+
+
+Function10046: ; 10046 (4:4046)
+ xor a
+ ld [hBGMapMode], a ; $ff00+$d4
+ call Function10955
+ ld a, [wcf64]
+ ld [wcf63], a
+ call Function10a40
+ ret
+
+Function10056: ; 10056 (4:4056)
+ xor a
+ ld [wcf65], a
+ call Function10a36
+ call Function109bb
+ call Function1089a
+ call Function10866
+ ret
+
+Function10067: ; 10067 (4:4067)
+ ld hl, MenuDataHeader_0x10a4f
+ call Function1d3c
+ ld a, [wd0d9]
+ ld [wcf88], a
+ ld a, [wd0df]
+ ld [wd0e4], a
+ call Function350c
+ ld a, [wd0e4]
+ ld [wd0df], a
+ ld a, [wcfa9]
+ ld [wd0d9], a
+ ld b, $7
+ ld c, $3
+ call Function108d4
+ ret c
+ call Function101c5
+ ret
+
+Function10094: ; 10094 (4:4094)
+ ld a, $2
+ ld [wcf65], a
+ call Function10a36
+ call Function109bb
+ call Function1089a
+ call Function10866
+ ret
+
+Function100a6: ; 100a6 (4:40a6)
+ ld hl, MenuDataHeader_0x10a7f
+ call Function1d3c
+ ld a, [wd0da]
+ ld [wcf88], a
+ ld a, [wd0e0]
+ ld [wd0e4], a
+ call Function350c
+ ld a, [wd0e4]
+ ld [wd0e0], a
+ ld a, [wcfa9]
+ ld [wd0da], a
+ ld b, $3
+ ld c, $7
+ call Function108d4
+ ret c
+ call Function101c5
+ ret
+
+Function100d3: ; 100d3 (4:40d3)
+ ld a, $3
+ ld [wcf65], a
+ call Function10a36
+ call Function109bb
+ xor a
+ ld [hBGMapMode], a ; $ff00+$d4
+ call Function1089a
+ call Function10866
+ ret
+
+Function100e8: ; 100e8 (4:40e8)
+ callba Function2c76f
+ ld b, $5
+ ld c, $1
+ call Function108d4
+ ret c
+ callba _CheckTossableItem
+ ld a, [wd142]
+ and a
+ jr nz, .asm_1010a
+ ld hl, MenuDataHeader_0x1013b
+ ld de, Jumptable_10153
+ jr .asm_10110
+.asm_1010a
+ ld hl, MenuDataHeader_0x10124
+ ld de, Jumptable_10137
+.asm_10110
+ push de
+ call LoadMenuDataHeader
+ call Function1d81
+ call Function1c07
+ pop hl
+ ret c
+ ld a, [wcfa9]
+ dec a
+ call Function1086b
+ jp [hl]
+; 10124 (4:4124)
+
+MenuDataHeader_0x10124: ; 0x10124
+ db $40 ; flags
+ db 07, 13 ; start coords
+ db 11, 19 ; end coords
+ dw MenuData2_0x1012c
+ db 1 ; default option
+; 0x1012c
+
+MenuData2_0x1012c: ; 0x1012c
+ db $c0 ; flags
+ db 2 ; items
+ db "USE@"
+ db "QUIT@"
+; 0x10137
+
+Jumptable_10137: ; 10137
+ dw Function10159
+ dw Function10492
+; 1013b
+
+MenuDataHeader_0x1013b: ; 0x1013b
+ db $40 ; flags
+ db 05, 13 ; start coords
+ db 11, 19 ; end coords
+ dw MenuData2_0x10143
+ db 1 ; default option
+; 0x10143
+
+MenuData2_0x10143: ; 0x10143
+ db $c0 ; flags
+ db 3 ; items
+ db "USE@"
+ db "GIVE@"
+ db "QUIT@"
+; 0x10153
+
+Jumptable_10153: ; 10153
+ dw Function10159
+ dw Function103fd
+ dw Function10492
+; 10159
+
+Function10159: ; 10159
+ callba Function2c7bf
+ ret c
+ callba Function2c7fb
+ jr c, .asm_10179
+ ld hl, Options
+ ld a, [hl]
+ push af
+ res 4, [hl]
+ callba Function2c867
+ pop af
+ ld [Options], a
+.asm_10179
+ xor a
+ ld [hBGMapMode], a ; $ff00+$d4
+ call Function10955
+ call Function1089a
+ call Function10a40
+ ret
+
+Function10186: ; 10186 (4:4186)
+ ld a, $1
+ ld [wcf65], a
+ call Function10a36
+ call Function109bb
+ call Function1089a
+ call Function10866
+ ret
+
+Function10198: ; 10198 (4:4198)
+ ld hl, MenuDataHeader_0x10aaf
+ call Function1d3c
+ ld a, [wd0db]
+ ld [wcf88], a
+ ld a, [wd0e1]
+ ld [wd0e4], a
+ call Function350c
+ ld a, [wd0e4]
+ ld [wd0e1], a
+ ld a, [wcfa9]
+ ld [wd0db], a
+ ld b, $1
+ ld c, $5
+ call Function108d4
+ ret c
+ call Function101c5
+ ret
+
+Function101c5: ; 101c5 (4:41c5)
+ callba _CheckTossableItem
+ ld a, [wd142]
+ and a
+ jr nz, .asm_101f9
+ callba CheckSelectableItem
+ ld a, [wd142]
+ and a
+ jr nz, .asm_101eb
+ callba CheckItemMenu
+ ld a, [wd142]
+ and a
+ jr nz, .asm_10207
+ jr .asm_10227
+.asm_101eb
+ callba CheckItemMenu
+ ld a, [wd142]
+ and a
+ jr nz, .asm_1020f
+ jr .asm_1022f
+.asm_101f9
+ callba CheckSelectableItem
+ ld a, [wd142]
+ and a
+ jr nz, .asm_10217
+ jr .asm_1021f
+.asm_10207
+ ld hl, MenuDataHeader_0x10249
+ ld de, Jumptable_1026a
+ jr .asm_10235
+.asm_1020f
+ ld hl, MenuDataHeader_0x10274
+ ld de, Jumptable_10291
+ jr .asm_10235
+.asm_10217
+ ld hl, MenuDataHeader_0x10299
+ ld de, Jumptable_102ac
+ jr .asm_10235
+.asm_1021f
+ ld hl, MenuDataHeader_0x102b0
+ ld de, Jumptable_102c7
+ jr .asm_10235
+.asm_10227
+ ld hl, MenuDataHeader_0x102cd
+ ld de, Jumptable_102ea
+ jr .asm_10235
+.asm_1022f
+ ld hl, MenuDataHeader_0x102f2
+ ld de, Jumptable_1030b
+.asm_10235
+ push de
+ call LoadMenuDataHeader
+ call Function1d81
+ call Function1c07
+ pop hl
+ ret c
+ ld a, [wcfa9]
+ dec a
+ call Function1086b
+ jp [hl]
+; 10249 (4:4249)
+
+MenuDataHeader_0x10249: ; 0x10249
+ db $40 ; flags
+ db 01, 13 ; start coords
+ db 11, 19 ; end coords
+ dw MenuData2_0x10251
+ db 1 ; default option
+; 0x10251
+
+MenuData2_0x10251: ; 0x10251
+ db $c0 ; flags
+ db 5 ; items
+ db "USE@"
+ db "GIVE@"
+ db "TOSS@"
+ db "SEL@"
+ db "QUIT@"
+; 0x1026a
+
+Jumptable_1026a: ; 1026a
+ dw Function10311
+ dw Function103fd
+ dw Function10364
+ dw Function103c2
+ dw Function10492
+; 10274
+
+MenuDataHeader_0x10274: ; 0x10274
+ db $40 ; flags
+ db 03, 13 ; start coords
+ db 11, 19 ; end coords
+ dw MenuData2_0x1027c
+ db 1 ; default option
+; 0x1027c
+
+MenuData2_0x1027c: ; 0x1027c
+ db $c0 ; flags
+ db 4 ; items
+ db "USE@"
+ db "GIVE@"
+ db "TOSS@"
+ db "QUIT@"
+; 0x10291
+
+Jumptable_10291: ; 10291
+ dw Function10311
+ dw Function103fd
+ dw Function10364
+ dw Function10492
+; 10299
+
+MenuDataHeader_0x10299: ; 0x10299
+ db $40 ; flags
+ db 07, 13 ; start coords
+ db 11, 19 ; end coords
+ dw MenuData2_0x102a1
+ db 1 ; default option
+; 0x102a1
+
+MenuData2_0x102a1: ; 0x102a1
+ db $c0 ; flags
+ db 2 ; items
+ db "USE@"
+ db "QUIT@"
+; 0x102ac
+
+Jumptable_102ac: ; 102ac
+ dw Function10311
+ dw Function10492
+; 102b0
+
+MenuDataHeader_0x102b0: ; 0x102b0
+ db $40 ; flags
+ db 05, 13 ; start coords
+ db 11, 19 ; end coords
+ dw MenuData2_0x102b8
+ db 1 ; default option
+; 0x102b8
+
+MenuData2_0x102b8: ; 0x102b8
+ db $c0 ; flags
+ db 3 ; items
+ db "USE@"
+ db "SEL@"
+ db "QUIT@"
+; 0x102c7
+
+Jumptable_102c7: ; 102c7
+ dw Function10311
+ dw Function103c2
+ dw Function10492
+; 102cd
+
+MenuDataHeader_0x102cd: ; 0x102cd
+ db $40 ; flags
+ db 03, 13 ; start coords
+ db 11, 19 ; end coords
+ dw MenuData2_0x102d5
+ db 1 ; default option
+; 0x102d5
+
+MenuData2_0x102d5: ; 0x102d5
+ db $c0 ; flags
+ db 4 ; items
+ db "GIVE@"
+ db "TOSS@"
+ db "SEL@"
+ db "QUIT@"
+; 0x102ea
+
+Jumptable_102ea: ; 102ea
+ dw Function103fd
+ dw Function10364
+ dw Function103c2
+ dw Function10492
+; 102f2
+
+MenuDataHeader_0x102f2: ; 0x102f2
+ db $40 ; flags
+ db 05, 13 ; start coords
+ db 11, 19 ; end coords
+ dw MenuData2_0x102fa
+ db 1 ; default option
+; 0x102fa
+
+MenuData2_0x102fa: ; 0x102fa
+ db $c0 ; flags
+ db 3 ; items
+ db "GIVE@"
+ db "TOSS@"
+ db "QUIT@"
+; 0x1030b
+
+Jumptable_1030b: ; 1030b
+ dw Function103fd
+ dw Function10364
+ dw Function10492
+; 10311
+
+Function10311: ; 10311
+ callba CheckItemMenu
+ ld a, [wd142]
+ ld hl, Jumptable_1031f
+ rst JumpTable
+ ret
+; 1031f
+
+Jumptable_1031f: ; 1031f (4:431f)
+ dw Function1032d
+ dw Function1032d
+ dw Function1032d
+ dw Function1032d
+ dw Function10334
+ dw Function10338
+ dw Function10355
+; 1035c
+
+Function1032d: ; 1032d (4:432d)
+ ld hl, UnknownText_0x10af3
+ call Function10889
+ ret
+
+Function10334: ; 10334 (4:4334)
+ call DoItemEffect
+ ret
+
+Function10338: ; 10338 (4:4338)
+ ld a, [PartyCount]
+ and a
+ jr z, .asm_1034e
+ call DoItemEffect
+ xor a
+ ld [hBGMapMode], a ; $ff00+$d4
+ call Function10955
+ call Function1089a
+ call Function10a40
+ ret
+.asm_1034e
+ ld hl, UnknownText_0x10af8
+ call Function10889
+ ret
+
+Function10355: ; 10355 (4:4355)
+ call DoItemEffect
+ ld a, [wd0ec]
+ and a
+ jr z, Function1032d
+ ld a, $a
+ ld [wcf63], a
+ ret
+; 10364 (4:4364)
+
+Function10364: ; 10364
+ ld hl, UnknownText_0x10ae4
+ call Function10889
+ callba Function24fbf
+ push af
+ call Function1c07
+ pop af
+ jr c, .asm_1039c
+ call Function10a1d
+ ld hl, UnknownText_0x10ae9
+ call Function1d4f
+ call YesNoBox
+ push af
+ call Function1c07
+ pop af
+ jr c, .asm_1039c
+ ld hl, NumItems
+ ld a, [wd107]
+ call TossItem
+ call Function10a1d
+ ld hl, UnknownText_0x10aee
+ call Function10889
+
+.asm_1039c
+ ret
+; 1039d
+
+Function1039d: ; 1039d
+ ld a, [wcf65]
+ and a
+ jr z, .asm_103b2
+ dec a
+ jr z, .asm_103aa
+ dec a
+ jr z, .asm_103ba
+ ret
+
+.asm_103aa
+ xor a
+ ld [wd0db], a
+ ld [wd0e1], a
+ ret
+
+.asm_103b2
+ xor a
+ ld [wd0d9], a
+ ld [wd0df], a
+ ret
+
+.asm_103ba
+ xor a
+ ld [wd0da], a
+ ld [wd0e0], a
+ ret
+; 103c2
+
+Function103c2: ; 103c2
+ callba CheckSelectableItem
+ ld a, [wd142]
+ and a
+ jr nz, .asm_103f6
+ ld a, [wcf65]
+ rrca
+ rrca
+ and $c0
+ ld b, a
+ ld a, [wd107]
+ inc a
+ and $3f
+ or b
+ ld [WhichRegisteredItem], a
+ ld a, [CurItem]
+ ld [RegisteredItem], a
+ call Function10a1d
+ ld de, SFX_FULL_HEAL
+ call WaitPlaySFX
+ ld hl, UnknownText_0x10afd
+ call Function10889
+ ret
+
+.asm_103f6
+ ld hl, UnknownText_0x10b02
+ call Function10889
+ ret
+; 103fd
+
+Function103fd: ; 103fd
+ ld a, [PartyCount]
+ and a
+ jp z, Function10486
+ ld a, [Options]
+ push af
+ res 4, a
+ ld [Options], a
+ ld a, $8
+ ld [PartyMenuActionText], a
+ call WhiteBGMap
+ callba Function5004f
+ callba Function50405
+ callba Function503e0
+.asm_10427
+ callba WritePartyMenuTilemap
+ callba PrintPartyMenuText
+ call WaitBGMap
+ call Function32f9
+ call DelayFrame
+ callba PartyMenuSelect
+ jr c, .asm_10475
+ ld a, [CurPartySpecies]
+ cp EGG
+ jr nz, .asm_10453
+ ld hl, UnknownText_0x1048d
+ call PrintText
+ jr .asm_10427
+.asm_10453
+ ld a, [wcf63]
+ push af
+ ld a, [wcf64]
+ push af
+ call GetCurNick
+ ld hl, StringBuffer1
+ ld de, wd050
+ ld bc, PKMN_NAME_LENGTH
+ call CopyBytes
+ call Function12bd9
+ pop af
+ ld [wcf64], a
+ pop af
+ ld [wcf63], a
+.asm_10475
+ pop af
+ ld [Options], a
+ xor a
+ ld [hBGMapMode], a ; $ff00+$d4
+ call Function10955
+ call Function1089a
+ call Function10a40
+ ret
+
+Function10486: ; 10486 (4:4486)
+ ld hl, UnknownText_0x10af8
+ call Function10889
+ ret
+; 1048d (4:448d)
+
+UnknownText_0x1048d: ; 0x1048d
+ ; An EGG can't hold an item.
+ text_jump UnknownText_0x1c0b7f
+ db "@"
+; 0x10492
+
+Function10492: ; 10492
+ ret
+; 10493
+
+
+BattlePack: ; 10493
+ ld hl, Options
+ set 4, [hl]
+ call Function1068a
+.asm_1049b
+ call Functiona57
+ ld a, [wcf63]
+ bit 7, a
+ jr nz, .asm_104ad
+ call Function104b9
+ call DelayFrame
+ jr .asm_1049b
+
+.asm_104ad
+ ld a, [wcf65]
+ ld [wd0d6], a
+ ld hl, Options
+ res 4, [hl]
+ ret
+; 104b9
+
+Function104b9: ; 104b9
+ ld a, [wcf63]
+ ld hl, Jumptable_104c3
+ call Function1086b
+ jp [hl]
+; 104c3
+
+
+Jumptable_104c3: ; 104c3 (4:44c3)
+ dw Function104d9
+ dw Function104e9
+ dw Function104fa
+ dw Function10594
+ dw Function105a6
+ dw Function10527
+ dw Function10539
+ dw Function10566
+ dw Function10581
+ dw Function10874
+ dw Function1087e
+
+
+Function104d9: ; 104d9 (4:44d9)
+ xor a
+ ld [hBGMapMode], a ; $ff00+$d4
+ call Function10955
+ ld a, [wcf64]
+ ld [wcf63], a
+ call Function10a40
+ ret
+
+Function104e9: ; 104e9 (4:44e9)
+ xor a
+ ld [wcf65], a
+ call Function10a36
+ call Function109bb
+ call Function1089a
+ call Function10866
+ ret
+
+Function104fa: ; 104fa (4:44fa)
+ ld hl, MenuDataHeader_0x10a4f
+ call Function1d3c
+ ld a, [wd0d9]
+ ld [wcf88], a
+ ld a, [wd0df]
+ ld [wd0e4], a
+ call Function350c
+ ld a, [wd0e4]
+ ld [wd0df], a
+ ld a, [wcfa9]
+ ld [wd0d9], a
+ ld b, $7
+ ld c, $3
+ call Function108d4
+ ret c
+ call Function105d3
+ ret
+
+Function10527: ; 10527 (4:4527)
+ ld a, $2
+ ld [wcf65], a
+ call Function10a36
+ call Function109bb
+ call Function1089a
+ call Function10866
+ ret
+
+Function10539: ; 10539 (4:4539)
+ ld hl, MenuDataHeader_0x10a7f
+ call Function1d3c
+ ld a, [wd0da]
+ ld [wcf88], a
+ ld a, [wd0e0]
+ ld [wd0e4], a
+ call Function350c
+ ld a, [wd0e4]
+ ld [wd0e0], a
+ ld a, [wcfa9]
+ ld [wd0da], a
+ ld b, $3
+ ld c, $7
+ call Function108d4
+ ret c
+ call Function105d3
+ ret
+
+Function10566: ; 10566 (4:4566)
+ ld a, $3
+ ld [wcf65], a
+ call Function10a36
+ call Function109bb
+ xor a
+ ld [hBGMapMode], a ; $ff00+$d4
+ call Function1089a
+ ld hl, UnknownText_0x10b0c
+ call Function10889
+ call Function10866
+ ret
+
+Function10581: ; 10581 (4:4581)
+ callba Function2c76f
+ ld b, $5
+ ld c, $1
+ call Function108d4
+ ret c
+ xor a
+ call Function105dc
+ ret
+
+Function10594: ; 10594 (4:4594)
+ ld a, $1
+ ld [wcf65], a
+ call Function10a36
+ call Function109bb
+ call Function1089a
+ call Function10866
+ ret
+
+Function105a6: ; 105a6 (4:45a6)
+ ld hl, MenuDataHeader_0x10aaf
+ call Function1d3c
+ ld a, [wd0db]
+ ld [wcf88], a
+ ld a, [wd0e1]
+ ld [wd0e4], a
+ call Function350c
+ ld a, [wd0e4]
+ ld [wd0e1], a
+ ld a, [wcfa9]
+ ld [wd0db], a
+ ld b, $1
+ ld c, $5
+ call Function108d4
+ ret c
+ call Function105d3
+ ret
+
+Function105d3: ; 105d3 (4:45d3)
+ callba CheckItemContext
+ ld a, [wd142]
+
+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
+ push de
+ call LoadMenuDataHeader
+ call Function1d81
+ call Function1c07
+ pop hl
+ ret c
+ ld a, [wcfa9]
+ dec a
+ call Function1086b
+ jp [hl]
+; 10601 (4:4601)
+
+MenuDataHeader_0x10601: ; 0x10601
+ db $40 ; flags
+ db 07, 13 ; start coords
+ db 11, 19 ; end coords
+ dw MenuData2_0x10609
+ db 1 ; default option
+; 0x10609
+
+MenuData2_0x10609: ; 0x10609
+ db $c0 ; flags
+ db 2 ; items
+ db "USE@"
+ db "QUIT@"
+; 0x10614
+
+Jumptable_10614: ; 10614
+ dw Function10629
+ dw Function10689
+; 10618
+
+MenuDataHeader_0x10618: ; 0x10618
+ db $40 ; flags
+ db 09, 13 ; start coords
+ db 11, 19 ; end coords
+ dw MenuData2_0x10620
+ db 1 ; default option
+; 0x10620
+
+MenuData2_0x10620: ; 0x10620
+ db $c0 ; flags
+ db 1 ; items
+ db "QUIT@"
+; 0x10627
+
+Jumptable_10627: ; 10627
+ dw Function10689
+; 10629
+
+Function10629: ; 10629
+ callba CheckItemContext
+ ld a, [wd142]
+ ld hl, Jumptable_10637
+ rst JumpTable
+ ret
+
+Jumptable_10637: ; 10637 (4:4637)
+ dw Function10645
+ dw Function10645
+ dw Function10645
+ dw Function10645
+ dw Function1064c
+ dw Function10656
+ dw Function10671
+
+
+Function10645: ; 10645 (4:4645)
+ ld hl, UnknownText_0x10af3
+ call Function10889
+ ret
+
+Function1064c: ; 1064c (4:464c)
+ call DoItemEffect
+ ld a, [wd0ec]
+ and a
+ jr nz, asm_1066c
+ ret
+
+Function10656: ; 10656 (4:4656)
+ call DoItemEffect
+ ld a, [wd0ec]
+ and a
+ jr nz, asm_1067e
+ xor a
+ ld [hBGMapMode], a ; $ff00+$d4
+ call Function10955
+ call Function1089a
+ call Function10a40
+ ret
+asm_1066c: ; 1066c (4:466c)
+ call WhiteBGMap
+ jr asm_1067e
+
+Function10671: ; 10671 (4:4671)
+ call DoItemEffect
+ ld a, [wd0ec]
+ and a
+ jr z, Function10645
+ cp $2
+ jr z, asm_10684
+asm_1067e: ; 1067e (4:467e)
+ ld a, $a
+ ld [wcf63], a
+ ret
+asm_10684: ; 10684 (4:4684)
+ xor a
+ ld [wd0ec], a
+ ret
+; 10689 (4:4689)
+
+Function10689: ; 10689
+ ret
+; 1068a
+
+
+Function1068a: ; 1068a
+ xor a
+ ld [wcf63], a
+ ld a, [wd0d6]
+ and $3
+ ld [wcf65], a
+ inc a
+ add a
+ dec a
+ ld [wcf64], a
+ xor a
+ ld [wcf66], a
+ xor a
+ ld [wd0e3], a
+ ret
+; 106a5
+
+Function106a5: ; 106a5
+ xor a
+ ld [hBGMapMode], a
+ ld [wcf63], a
+ ld [wcf64], a
+ ld [wcf65], a
+ ld [wcf66], a
+ ld [wd0e3], a
+ call Function10955
+ call Function10a40
+ ret
+; 106be
+
+Function106be: ; 106be
+.asm_106be
+ call Function106c7
+ call Function1076f
+ jr c, .asm_106be
+ ret
+; 106c7
+
+Function106c7: ; 106c7
+ ld a, [wcf63]
+ ld hl, Jumptable_106d1
+ call Function1086b
+ jp [hl]
+; 106d1
+
+
+Jumptable_106d1: ; 106d1 (4:46d1)
+ dw Function106d9
+ dw Function1073b
+ dw Function106ff
+ dw Function10726
+
+
+Function106d9: ; 106d9 (4:46d9)
+ xor a
+ call Function10762
+ ld hl, MenuDataHeader_0x10a67
+ call Function1d3c
+ ld a, [wd0d9]
+ ld [wcf88], a
+ ld a, [wd0df]
+ ld [wd0e4], a
+ call Function350c
+ ld a, [wd0e4]
+ ld [wd0df], a
+ ld a, [wcfa9]
+ ld [wd0d9], a
+ ret
+
+Function106ff: ; 106ff (4:46ff)
+ ld a, $2
+ call Function10762
+ ld hl, MenuDataHeader_0x10a97
+ call Function1d3c
+ ld a, [wd0da]
+ ld [wcf88], a
+ ld a, [wd0e0]
+ ld [wd0e4], a
+ call Function350c
+ ld a, [wd0e4]
+ ld [wd0e0], a
+ ld a, [wcfa9]
+ ld [wd0da], a
+ ret
+
+Function10726: ; 10726 (4:4726)
+ ld a, $3
+ call Function10762
+ call Function1089a
+ callba Function2c76f
+ ld a, [CurItem]
+ ld [CurItem], a
+ ret
+
+Function1073b: ; 1073b (4:473b)
+ ld a, $1
+ call Function10762
+ ld hl, MenuDataHeader_0x10ac7
+ call Function1d3c
+ ld a, [wd0db]
+ ld [wcf88], a
+ ld a, [wd0e1]
+ ld [wd0e4], a
+ call Function350c
+ ld a, [wd0e4]
+ ld [wd0e1], a
+ ld a, [wcfa9]
+ ld [wd0db], a
+ ret
+
+Function10762: ; 10762 (4:4762)
+ ld [wcf65], a
+ call Function10a36
+ call Function109bb
+ call Function1089a
+ ret
+
+
+Function1076f: ; 1076f
+ ld hl, wcf73
+ ld a, [hl]
+ and $1
+ jr nz, .asm_10788
+ ld a, [hl]
+ and $2
+ jr nz, .asm_1078f
+ ld a, [hl]
+ and $20
+ jr nz, .asm_10795
+ ld a, [hl]
+ and $10
+ jr nz, .asm_107a8
+ scf
+ ret
+
+.asm_10788
+ ld a, $1
+ ld [wcf66], a
+ and a
+ ret
+
+.asm_1078f
+ xor a
+ ld [wcf66], a
+ and a
+ ret
+
+.asm_10795
+ ld a, [wcf63]
+ dec a
+ and $3
+ ld [wcf63], a
+ push de
+ ld de, SFX_UNKNOWN_62
+ call PlaySFX
+ pop de
+ scf
+ ret
+
+.asm_107a8
+ ld a, [wcf63]
+ inc a
+ and $3
+ ld [wcf63], a
+ push de
+ ld de, SFX_UNKNOWN_62
+ call PlaySFX
+ pop de
+ scf
+ ret
+; 107bb
+
+Function107bb: ; 107bb
+ call Function106a5
+ ld a, [InputType]
+ or a
+ jr z, .asm_107ca
+ callba Function1de28f
+
+.asm_107ca
+ call Function107d7
+ call Function1076f
+ jr c, .asm_107ca
+ xor a
+ ld [wcf66], a
+ ret
+; 107d7
+
+Function107d7: ; 107d7
+ ld a, [wcf63]
+ ld hl, Jumptable_107e1
+ call Function1086b
+ jp [hl]
+; 107e1
+
+
+Jumptable_107e1: ; 107e1 (4:47e1)
+ dw Function107e9
+ dw Function1083b
+ dw Function10807
+ dw Function10826
+
+
+Function107e9: ; 107e9 (4:47e9)
+ xor a
+ ld hl, MenuDataHeader_0x107ef
+ jr Function1085a
+; 107ef (4:47ef)
+
+MenuDataHeader_0x107ef: ; 0x107ef
+ db $40 ; flags
+ db 01, 07 ; start coords
+ db 11, 19 ; end coords
+ dw MenuData2_0x107f7
+ db 1 ; default option
+; 0x107f7
+
+MenuData2_0x107f7: ; 0x107f7
+ db $ae ; flags
+ db 5, 8 ; rows, columns
+ db 2 ; horizontal spacing
+ dbw 0, OTPartyMons
+ dbw BANK(Function24ab4), Function24ab4
+ dbw BANK(Function24ac3), Function24ac3
+ dbw BANK(Function244c3), Function244c3
+; 10807
+
+Function10807: ; 10807 (4:4807)
+ ld a, $2
+ ld hl, MenuDataHeader_0x1080e
+ jr Function1085a
+; 1080e (4:480e)
+
+MenuDataHeader_0x1080e: ; 0x1080e
+ db $40 ; flags
+ db 01, 07 ; start coords
+ db 11, 19 ; end coords
+ dw MenuData2_0x10816
+ db 1 ; default option
+; 0x10816
+
+MenuData2_0x10816: ; 0x10816
+ db $ae ; flags
+ db 5, 8 ; rows, columns
+ db 1 ; horizontal spacing
+ dbw 0, OTPartyMon1Exp + 2
+ dbw BANK(Function24ab4), Function24ab4
+ dbw BANK(Function24ac3), Function24ac3
+ dbw BANK(Function244c3), Function244c3
+; 10826
+
+Function10826: ; 10826 (4:4826)
+ ld a, $3
+ call Function10762
+ call Function1089a
+ callba Function2c76f
+ ld a, [CurItem]
+ ld [CurItem], a
+ ret
+
+Function1083b: ; 1083b (4:483b)
+ ld a, $1
+ ld hl, MenuDataHeader_0x10842
+ jr Function1085a
+; 10842 (4:4842)
+
+MenuDataHeader_0x10842: ; 0x10842
+ db $40 ; flags
+ db 01, 07 ; start coords
+ db 11, 19 ; end coords
+ dw MenuData2_0x1084a
+ db 1 ; default option
+; 0x1084a
+
+MenuData2_0x1084a: ; 0x1084a
+ db $ae ; flags
+ db 5, 8 ; rows, columns
+ db 2 ; horizontal spacing
+ dbw 0, OTPartyMon1CaughtGender
+ dbw BANK(Function24ab4), Function24ab4
+ dbw BANK(Function24ac3), Function24ac3
+ dbw BANK(Function244c3), Function244c3
+; 1085a
+
+Function1085a: ; 1085a (4:485a)
+ push hl
+ call Function10762
+ pop hl
+ call Function1d3c
+ call Function350c
+ ret
+
+Function10866: ; 10866 (4:4866)
+ ld hl, wcf63
+ inc [hl]
+ ret
+
+Function1086b: ; 1086b
+ ld e, a
+ ld d, 0
+ add hl, de
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ret
+; 10874
+
+Function10874: ; 10874 (4:4874)
+ ld hl, wcf63
+ set 7, [hl]
+ xor a
+ ld [wcf66], a
+ ret
+
+Function1087e: ; 1087e (4:487e)
+ ld hl, wcf63
+ set 7, [hl]
+ ld a, $1
+ ld [wcf66], a
+ ret
+
+Function10889: ; 10889 (4:4889)
+ ld a, [Options]
+ push af
+ set 4, a
+ ld [Options], a
+ call PrintText
+ pop af
+ ld [Options], a
+ ret
+
+Function1089a: ; 1089a (4:489a)
+ call WaitBGMap
+
+
+Function1089d: ; 1089d
+ ld a, [wcf65]
+ and $3
+ ld e, a
+ ld d, $0
+ ld a, [BattleType]
+ cp BATTLETYPE_TUTORIAL
+ jr z, .asm_108b3
+ ld a, [PlayerGender]
+ bit 0, a
+ jr nz, .asm_108c5
+
+.asm_108b3
+ ld hl, PackGFXPointers
+ add hl, de
+ add hl, de
+ ld a, [hli]
+ ld e, a
+ ld d, [hl]
+ ld hl, $9500
+ lb bc, BANK(PackGFX), 15
+ call Request2bpp
+ ret
+
+.asm_108c5
+ callba Function48e81
+ ret
+; 108cc
+
+PackGFXPointers: ; 108cc
+ dw PackGFX + $f0 * 1
+ dw PackGFX + $f0 * 3
+ dw PackGFX + $f0 * 0
+ dw PackGFX + $f0 * 2
+; 108d4
+
+Function108d4: ; 108d4 (4:48d4)
+ ld hl, wcf73
+ ld a, [wd0e3]
+ and a
+ jr nz, .asm_10931
+ ld a, [hl]
+ and $1
+ jr nz, .asm_108f8
+ ld a, [hl]
+ and $2
+ jr nz, .asm_108fa
+ ld a, [hl]
+ and $20
+ jr nz, .asm_10901
+ ld a, [hl]
+ and $10
+ jr nz, .asm_10912
+ ld a, [hl]
+ and $4
+ jr nz, .asm_10923
+ scf
+ ret
+.asm_108f8
+ and a
+ ret
+.asm_108fa
+ ld a, $9
+ ld [wcf63], a
+ scf
+ ret
+.asm_10901
+ ld a, b
+ ld [wcf63], a
+ ld [wcf64], a
+ push de
+ ld de, SFX_UNKNOWN_62
+ call PlaySFX
+ pop de
+ scf
+ ret
+.asm_10912
+ ld a, c
+ ld [wcf63], a
+ ld [wcf64], a
+ push de
+ ld de, SFX_UNKNOWN_62
+ call PlaySFX
+ pop de
+ scf
+ ret
+.asm_10923
+ callba Function2490c
+ ld hl, UnknownText_0x10b07
+ call Function10889
+ scf
+ ret
+.asm_10931
+ ld a, [hl]
+ and $5
+ jr nz, .asm_1093d
+ ld a, [hl]
+ and $2
+ jr nz, .asm_1094f
+ scf
+ ret
+.asm_1093d
+ callba Function2490c
+ ld de, SFX_SWITCH_POKEMON
+ call WaitPlaySFX
+ ld de, SFX_SWITCH_POKEMON
+ call WaitPlaySFX
+.asm_1094f
+ xor a
+ ld [wd0e3], a
+ scf
+ ret
+
+
+Function10955: ; 10955
+ call WhiteBGMap
+ call ClearTileMap
+ call ClearSprites
+ call DisableLCD
+ ld hl, PackMenuGFX
+ ld de, VTiles2
+ ld bc, $0600
+ ld a, BANK(PackMenuGFX)
+ call FarCopyBytes
+ hlcoord 0, 1
+ ld bc, $00dc
+ ld a, $24
+ call ByteFill
+ hlcoord 5, 1
+ lb bc, 11, 15
+ call ClearBox
+ ld hl, TileMap
+ ld a, $28
+ ld c, $14
+.asm_1098a
+ ld [hli], a
+ inc a
+ dec c
+ jr nz, .asm_1098a
+ call Function109bb
+ call Function109a5
+ hlcoord 0, 12
+ lb bc, 4, 18
+ call TextBox
+ call EnableLCD
+ call Function1089d
+ ret
+; 109a5
+
+Function109a5: ; 109a5
+ hlcoord 0, 3
+ ld a, $50
+ ld de, 15
+ ld b, 3
+.asm_109af
+ ld c, 5
+.asm_109b1
+ ld [hli], a
+ inc a
+ dec c
+ jr nz, .asm_109b1
+ add hl, de
+ dec b
+ jr nz, .asm_109af
+ ret
+; 109bb
+
+Function109bb: ; 109bb
+ ld a, [wcf65]
+
+ ; * 15
+ ld d, a
+ swap a
+ sub d
+
+ ld d, 0
+ ld e, a
+ ld hl, Tilemap_109e1
+ add hl, de
+ ld d, h
+ ld e, l
+ hlcoord 0, 7
+ ld c, 3
+.asm_109d0
+ ld b, 5
+.asm_109d2
+ ld a, [de]
+ inc de
+ ld [hli], a
+ dec b
+ jr nz, .asm_109d2
+ ld a, c
+ ld c, 15
+ add hl, bc
+ ld c, a
+ dec c
+ jr nz, .asm_109d0
+ ret
+; 109e1
+
+Tilemap_109e1: ; 109e1
+ db $00, $04, $04, $04, $01, $06, $07, $08, $09, $0a, $02, $05, $05, $05, $03
+ db $00, $04, $04, $04, $01, $15, $16, $17, $18, $19, $02, $05, $05, $05, $03
+ db $00, $04, $04, $04, $01, $0b, $0c, $0d, $0e, $0f, $02, $05, $05, $05, $03
+ db $00, $04, $04, $04, $01, $10, $11, $12, $13, $14, $02, $05, $05, $05, $03
+; 10a1d
+
+Function10a1d: ; 10a1d
+ ld a, [CurItem]
+ ld [wd265], a
+ call GetItemName
+ call CopyName1
+ ret
+; 10a2a
+
+Function10a2a: ; 10a2a
+ ld hl, TileMap
+ ld bc, $0168
+ ld a, $7f
+ call ByteFill
+ ret
+; 10a36
+
+Function10a36: ; 10a36 (4:4a36)
+ hlcoord 5, 2
+ ld bc, $a0f
+ call ClearBox
+ ret
+
+
+Function10a40: ; 10a40
+ call WaitBGMap
+ ld b, $14
+ call GetSGBLayout
+ call Function32f9
+ call DelayFrame
+ ret
+; 10a4f
+
+MenuDataHeader_0x10a4f: ; 0x10a4f
+ db $40 ; flags
+ db 01, 07 ; start coords
+ db 11, 19 ; end coords
+ dw MenuData2_0x10a57
+ db 1 ; default option
+; 0x10a57
+
+MenuData2_0x10a57: ; 0x10a57
+ db $ae ; flags
+ db 5, 8 ; rows, columns
+ db 2 ; horizontal spacing
+ dbw 0, NumItems
+ dbw BANK(Function24ab4), Function24ab4
+ dbw BANK(Function24ac3), Function24ac3
+ dbw BANK(Function244c3), Function244c3
+; 10a67
+
+MenuDataHeader_0x10a67: ; 0x10a67
+ db $40 ; flags
+ db 01, 07 ; start coords
+ db 11, 19 ; end coords
+ dw MenuData2_0x10a6f
+ db 1 ; default option
+; 0x10a6f
+
+MenuData2_0x10a6f: ; 0x10a6f
+ db $2e ; flags
+ db 5, 8 ; rows, columns
+ db 2 ; horizontal spacing
+ dbw 0, NumItems
+ dbw BANK(Function24ab4), Function24ab4
+ dbw BANK(Function24ac3), Function24ac3
+ dbw BANK(Function244c3), Function244c3
+; 10a7f
+
+MenuDataHeader_0x10a7f: ; 0x10a7f
+ db $40 ; flags
+ db 01, 07 ; start coords
+ db 11, 19 ; end coords
+ dw MenuData2_0x10a87
+ db 1 ; default option
+; 0x10a87
+
+MenuData2_0x10a87: ; 0x10a87
+ db $ae ; flags
+ db 5, 8 ; rows, columns
+ db 1 ; horizontal spacing
+ dbw 0, NumKeyItems
+ dbw BANK(Function24ab4), Function24ab4
+ dbw BANK(Function24ac3), Function24ac3
+ dbw BANK(Function244c3), Function244c3
+; 10a97
+
+MenuDataHeader_0x10a97: ; 0x10a97
+ db $40 ; flags
+ db 01, 07 ; start coords
+ db 11, 19 ; end coords
+ dw MenuData2_0x10a9f
+ db 1 ; default option
+; 0x10a9f
+
+MenuData2_0x10a9f: ; 0x10a9f
+ db $2e ; flags
+ db 5, 8 ; rows, columns
+ db 1 ; horizontal spacing
+ dbw 0, NumKeyItems
+ dbw BANK(Function24ab4), Function24ab4
+ dbw BANK(Function24ac3), Function24ac3
+ dbw BANK(Function244c3), Function244c3
+; 10aaf
+
+MenuDataHeader_0x10aaf: ; 0x10aaf
+ db $40 ; flags
+ db 01, 07 ; start coords
+ db 11, 19 ; end coords
+ dw MenuData2_0x10ab7
+ db 1 ; default option
+; 0x10ab7
+
+MenuData2_0x10ab7: ; 0x10ab7
+ db $ae ; flags
+ db 5, 8 ; rows, columns
+ db 2 ; horizontal spacing
+ dbw 0, NumBalls
+ dbw BANK(Function24ab4), Function24ab4
+ dbw BANK(Function24ac3), Function24ac3
+ dbw BANK(Function244c3), Function244c3
+; 10ac7
+
+MenuDataHeader_0x10ac7: ; 0x10ac7
+ db $40 ; flags
+ db 01, 07 ; start coords
+ db 11, 19 ; end coords
+ dw MenuData2_0x10acf
+ db 1 ; default option
+; 0x10acf
+
+MenuData2_0x10acf: ; 0x10acf
+ db $2e ; flags
+ db 5, 8 ; rows, columns
+ db 2 ; horizontal spacing
+ dbw 0, NumBalls
+ dbw BANK(Function24ab4), Function24ab4
+ dbw BANK(Function24ac3), Function24ac3
+ dbw BANK(Function244c3), Function244c3
+; 10adf
+
+UnknownText_0x10adf: ; 0x10adf
+ ; No items.
+ text_jump UnknownText_0x1c0b9a
+ db "@"
+; 0x10ae4
+
+UnknownText_0x10ae4: ; 0x10ae4
+ ; Throw away how many?
+ text_jump UnknownText_0x1c0ba5
+ db "@"
+; 0x10ae9
+
+UnknownText_0x10ae9: ; 0x10ae9
+ ; Throw away @ @ (S)?
+ text_jump UnknownText_0x1c0bbb
+ db "@"
+; 0x10aee
+
+UnknownText_0x10aee: ; 0x10aee
+ ; Threw away @ (S).
+ text_jump UnknownText_0x1c0bd8
+ db "@"
+; 0x10af3
+
+UnknownText_0x10af3: ; 0x10af3
+ ; OAK: ! This isn't the time to use that!
+ text_jump UnknownText_0x1c0bee
+ db "@"
+; 0x10af8
+
+UnknownText_0x10af8: ; 0x10af8
+ ; You don't have a #MON!
+ text_jump UnknownText_0x1c0c17
+ db "@"
+; 0x10afd
+
+UnknownText_0x10afd: ; 0x10afd
+ ; Registered the @ .
+ text_jump UnknownText_0x1c0c2e
+ db "@"
+; 0x10b02
+
+UnknownText_0x10b02: ; 0x10b02
+ ; You can't register that item.
+ text_jump UnknownText_0x1c0c45
+ db "@"
+; 0x10b07
+
+UnknownText_0x10b07: ; 0x10b07
+ ; Where should this be moved to?
+ text_jump UnknownText_0x1c0c63
+ db "@"
+; 0x10b0c
+
+UnknownText_0x10b0c: ; 0x10b0c
+ ;
+ text_jump UnknownText_0x1c0c83
+ db "@"
+; 0x10b11
+
+UnknownText_0x10b11: ; 0x10b11
+ ; You can't use it in a battle.
+ text_jump UnknownText_0x1c0c85
+ db "@"
+; 0x10b16
+
+PackMenuGFX:
+INCBIN "gfx/misc/pack_menu.2bpp"
+
+PackGFX:
+INCBIN "gfx/misc/pack.w40.2bpp"
+
diff --git a/engine/phone_scripts.asm b/engine/phone_scripts.asm
index 7dbb246e3..c66781cdd 100644
--- a/engine/phone_scripts.asm
+++ b/engine/phone_scripts.asm
@@ -381,7 +381,7 @@ UnknownScript_0xbd17c:
iftrue UnknownScript_0xbd1cd
UnknownScript_0xbd19b:
- special $005d
+ special RandomPhoneMon
farjump UnknownScript_0xa0908
UnknownScript_0xbd1a2:
@@ -608,7 +608,7 @@ UnknownScript_0xbd373:
iftrue UnknownScript_0xbd3c4
UnknownScript_0xbd392:
- special $005d
+ special RandomPhoneMon
farjump UnknownScript_0xa0930
UnknownScript_0xbd399:
@@ -808,7 +808,7 @@ UnknownScript_0xbd544:
pokenamemem QWILFISH, $1
displaylocation ROUTE_32, $2
writebyte $1
- special $0048
+ special Functionc3fc
farjump UnknownScript_0xa05d6
UnknownScript_0xbd55c:
@@ -827,7 +827,7 @@ UnknownScript_0xbd560:
iftrue UnknownScript_0xbd5c3
UnknownScript_0xbd57f:
- special $005d
+ special RandomPhoneMon
farjump UnknownScript_0xa0948
UnknownScript_0xbd586:
@@ -3079,7 +3079,7 @@ UnknownScript_0xbe61c:
end
UnknownScript_0xbe622:
- special $005d
+ special RandomPhoneMon
farscall UnknownScript_0xbde3f
if_equal $0, UnknownScript_0xbe636
farwritetext UnknownText_0x1b518b
diff --git a/engine/pokedex.asm b/engine/pokedex.asm
new file mode 100644
index 000000000..004836f62
--- /dev/null
+++ b/engine/pokedex.asm
@@ -0,0 +1,2585 @@
+
+Pokedex: ; 40000
+
+ ld a, [hWX]
+ ld l, a
+ ld a, [hWY]
+ ld h, a
+ push hl
+ ld a, [hSCX]
+ push af
+ ld hl, Options
+ ld a, [hl]
+ push af
+ set NO_TEXT_SCROLL, [hl]
+ ld a, [VramState]
+ push af
+ xor a
+ ld [VramState], a
+ ld a, [$ffaa]
+ push af
+ ld a, $1
+ ld [$ffaa], a
+
+ xor a
+ ld [$ffde], a
+ call InitPokedex
+ call DelayFrame
+
+.main
+ call Functiona57
+ ld a, [wcf63]
+ bit 7, a
+ jr nz, .exit
+ call Function4010b
+ call DelayFrame
+ jr .main
+
+.exit
+ ld de, SFX_READ_TEXT_2
+ call PlaySFX
+ call WaitSFX
+ call ClearSprites
+ ld a, [wc7d4]
+ ld [wd959], a
+
+ pop af
+ ld [$ffaa], a
+ pop af
+ ld [VramState], a
+ pop af
+ ld [Options], a
+ pop af
+ ld [hSCX], a
+ pop hl
+ ld a, l
+ ld [hWX], a
+ ld a, h
+ ld [hWY], a
+ ret
+; 40063
+
+InitPokedex: ; 40063
+ call WhiteBGMap
+ call ClearSprites
+ call ClearTileMap
+ call Function414b7
+
+ ld hl, wc6d0
+ ld bc, $0115
+ xor a
+ call ByteFill
+
+ xor a
+ ld [wcf63], a
+ ld [wcf64], a
+ ld [wcf65], a
+ ld [wcf66], a
+
+ call Function400a2
+
+ ld a, [wd959]
+ ld [wc7d4], a
+
+ call Function40bdc
+ call Function400b4
+ call Function400ed
+ callba Function1de247
+ call Function41af7
+ ret
+; 400a2
+
+Function400a2: ; 400a2
+ ld a, [StatusFlags]
+ bit 1, a
+ jr nz, .asm_400ae
+
+ xor a
+ ld [wc7dc], a
+ ret
+
+.asm_400ae
+ ld a, 1
+ ld [wc7dc], a
+ ret
+; 400b4
+
+Function400b4: ; 400b4
+ ld hl, wc6d0
+ ld a, [wc2d6]
+ and a
+ jr z, .asm_400ec
+ cp $fc
+ jr nc, .asm_400ec
+
+ ld b, a
+ ld a, [wc7d2]
+ cp $8
+ jr c, .asm_400db
+
+ sub $7
+ ld c, a
+.asm_400cc
+ ld a, b
+ cp [hl]
+ jr z, .asm_400ec
+ inc hl
+ ld a, [wc7d0]
+ inc a
+ ld [wc7d0], a
+ dec c
+ jr nz, .asm_400cc
+
+.asm_400db
+ ld c, $7
+.asm_400dd
+ ld a, b
+ cp [hl]
+ jr z, .asm_400ec
+ inc hl
+ ld a, [wc7d1]
+ inc a
+ ld [wc7d1], a
+ dec c
+ jr nz, .asm_400dd
+
+.asm_400ec
+ ret
+; 400ed
+
+Function400ed: ; 400ed
+ ld a, [MapGroup]
+ ld b, a
+ ld a, [MapNumber]
+ ld c, a
+ call GetWorldMapLocation
+
+ cp SPECIAL_MAP
+ jr nz, .asm_40107
+
+ ld a, [BackupMapGroup]
+ ld b, a
+ ld a, [BackupMapNumber]
+ ld c, a
+ call GetWorldMapLocation
+
+.asm_40107
+ ld [wc7e4], a
+ ret
+; 4010b
+
+Function4010b: ; 4010b
+ ld a, [wcf63]
+ ld hl, Jumptable_40115
+ call Function41432
+ jp [hl]
+; 40115
+
+
+Jumptable_40115: ; 40115 (10:4115)
+ dw Function4013c
+ dw Function401ae
+ dw Function40217
+ dw Function40258
+ dw Function402aa
+ dw Function40443
+ dw Function40471
+ dw Function4039d
+ dw Function403be
+ dw Function4050a
+ dw Function40562
+ dw Function405bd
+ dw Function405df
+ dw Function40136
+
+
+Function40131: ; 40131 (10:4131)
+ ld hl, wcf63
+ inc [hl]
+ ret
+
+Function40136: ; 40136 (10:4136)
+ ld hl, wcf63
+ set 7, [hl]
+ ret
+
+Function4013c: ; 4013c (10:413c)
+ xor a
+ ld [hBGMapMode], a ; $ff00+$d4
+ call ClearSprites
+ xor a
+ ld hl, AttrMap
+ ld bc, $168
+ call ByteFill
+ callba Function1de171
+ hlcoord 0, 17
+ ld de, Unknown_407f2
+ call Function40acd
+ ld a, $7
+ ld [wc7d3], a
+ call Function40b0f
+ call Function41aeb
+ call Function41af7
+ call Function4074c
+ ld a, $5
+ ld [hSCX], a ; $ff00+$cf
+ ld a, [wc7d4]
+ cp $1
+ ld a, $4a
+ jr z, .asm_4017b
+ ld a, $47
+
+.asm_4017b
+ ld [hWX], a ; $ff00+$d1
+ xor a
+ ld [hWY], a ; $ff00+$d2
+ call WaitBGMap
+ call Function41af7
+ ld a, $ff
+ ld [CurPartySpecies], a
+ ld a, $4
+ call Function41423
+ call Function41148
+ callba Function1de171
+ hlcoord 0, 17
+ ld de, Unknown_407f2
+ call Function40acd
+ ld a, $7
+ ld [wc7d3], a
+ call Function40b0f
+ call Function40131
+ ret
+
+Function401ae: ; 401ae (10:41ae)
+ ld hl, hJoyPressed ; $ffa7
+ ld a, [hl]
+ and B_BUTTON
+ jr nz, .b
+ ld a, [hl]
+ and A_BUTTON
+ jr nz, .a
+ ld a, [hl]
+ and SELECT
+ jr nz, .select
+ ld a, [hl]
+ and START
+ jr nz, .start
+ call Function406c5
+ ret nc
+ call Function41148
+ xor a
+ ld [hBGMapMode], a ; $ff00+$d4
+ call Function40b0f
+ call Function41ad7
+ call Function41af7
+ ret
+
+.a
+ call Function40bb1
+ call Function40bd0
+ ret z
+ ld a, $2
+ ld [wcf63], a
+ ld a, $0
+ ld [wcf64], a
+ ret
+
+.select
+ call Function41401
+ ld a, $7
+ ld [wcf63], a
+ xor a
+ ld [hSCX], a ; $ff00+$cf
+ ld a, $a7
+ ld [hWX], a ; $ff00+$d1
+ call DelayFrame
+ ret
+
+.start
+ call Function41401
+ ld a, $5
+ ld [wcf63], a
+ xor a
+ ld [hSCX], a ; $ff00+$cf
+ ld a, $a7
+ ld [hWX], a ; $ff00+$d1
+ call DelayFrame
+ ret
+
+.b
+ ld a, $d
+ ld [wcf63], a
+ ret
+
+Function40217: ; 40217 (10:4217)
+ call LowVolume
+ xor a
+ ld [wcf65], a
+ xor a
+ ld [hBGMapMode], a ; $ff00+$d4
+ call ClearSprites
+ call Function41478
+ call Function407fd
+ call Function4134f
+ call Function40bb1
+ ld [wc2d6], a
+ callba Function4424d
+ call Function40ba0
+ call WaitBGMap
+ ld a, $a7
+ ld [hWX], a ; $ff00+$d1
+ call Function40bb1
+ ld [CurPartySpecies], a
+ ld a, $4
+ call Function41423
+ ld a, [CurPartySpecies]
+ call PlayCry
+ call Function40131
+ ret
+
+Function40258: ; 40258 (10:4258)
+ ld de, Unknown_402e8
+ call Function4135a
+ ld hl, hJoyPressed ; $ffa7
+ ld a, [hl]
+ and B_BUTTON
+ jr nz, .b
+ ld a, [hl]
+ and A_BUTTON
+ jr nz, .a
+ call Function4066c
+ ret nc
+ call Function40131
+ ret
+
+.a
+ ld a, [wc7d8]
+ ld hl, Jumptable_402f2
+ call Function41432
+ jp [hl]
+
+.b
+ ld a, [LastVolume]
+ and a
+ jr z, .asm_40288
+ ld a, $77
+ ld [LastVolume], a
+
+.asm_40288
+ call MaxVolume
+ ld a, [wcf64]
+ ld [wcf63], a
+ ret
+; 40292 (10:4292)
+
+Function40292: ; 40292
+ ld a, [wcf65]
+ xor $1
+ ld [wcf65], a
+ call Function40bb1
+ ld [wc2d6], a
+ callba Function4424d
+ call WaitBGMap
+ ret
+; 402aa
+
+Function402aa: ; 402aa (10:42aa)
+ call Function41401
+ xor a
+ ld [wcf65], a
+ xor a
+ ld [hBGMapMode], a ; $ff00+$d4
+ call Function407fd
+ call Function4134f
+ call Function41478
+ call Function40bb1
+ ld [wc2d6], a
+ callba Function4424d
+ call Function40ba0
+ call Function4143b
+ call WaitBGMap
+ call Function40bb1
+ ld [CurPartySpecies], a
+ ld a, $4
+ call Function41423
+ ld a, [CurPartySpecies]
+ call PlayCry
+ ld hl, wcf63
+ dec [hl]
+ ret
+; 402e8 (10:42e8)
+
+Unknown_402e8: ; 402e8
+ dw $0430
+ dwcoord 1, 17
+ dwcoord 6, 17
+ dwcoord 11, 17
+ dwcoord 15, 17
+; 402f2
+
+Jumptable_402f2: ; 402f2
+ dw Function40292
+ dw Function402fa
+ dw Function40340
+ dw Function4034f
+; 402fa
+
+Function402fa: ; 402fa
+ call Function41401
+ xor a
+ ld [hSCX], a
+ call DelayFrame
+ ld a, $7
+ ld [hWX], a
+ ld a, $90
+ ld [hWY], a
+ call Function40bb1
+ ld a, [wc7e4]
+ ld e, a
+ predef Function91d11
+ call Function41401
+ call DelayFrame
+ xor a
+ ld [hBGMapMode], a
+ ld a, $90
+ ld [hWY], a
+ ld a, $5
+ ld [hSCX], a
+ call DelayFrame
+ call Function4038d
+ call Function4143b
+ call WaitBGMap
+ call Function40bb1
+ ld [CurPartySpecies], a
+ ld a, $4
+ call Function41423
+ ret
+; 40340
+
+Function40340: ; 40340
+ call Function40bb1
+ ld a, [wd265]
+ call GetCryIndex
+ ld e, c
+ ld d, b
+ call PlayCryHeader
+ ret
+; 4034f
+
+Function4034f: ; 4034f
+ call Function41415
+ xor a
+ ld [hSCX], a
+ ld a, [wcf65]
+ push af
+ ld a, [wcf64]
+ push af
+ ld a, [wcf63]
+ push af
+ callba Function8442c
+ pop af
+ ld [wcf63], a
+ pop af
+ ld [wcf64], a
+ pop af
+ ld [wcf65], a
+ call WhiteBGMap
+ call DisableLCD
+ call Function414fb
+ call Function4038d
+ call EnableLCD
+ call WaitBGMap
+ ld a, $5
+ ld [hSCX], a
+ call Function41427
+ ret
+; 4038d
+
+Function4038d: ; 4038d
+ call Function407fd
+ call Function40bb1
+ callba Function4424d
+ call Function40ba0
+ ret
+; 4039d
+
+Function4039d: ; 4039d (10:439d)
+ xor a
+ ld [hBGMapMode], a ; $ff00+$d4
+ call ClearSprites
+ call Function4087c
+ call Function4134f
+ ld a, [wc7d4]
+ ld [wc7d8], a
+ call Function40e5b
+ call WaitBGMap
+ ld a, $10
+ call Function41423
+ call Function40131
+ ret
+
+Function403be: ; 403be (10:43be)
+ ld a, [wc7dc]
+ and a
+ jr nz, .asm_403c9
+ ld de, Unknown_403f3
+ jr .asm_403cc
+
+.asm_403c9
+ ld de, Unknown_403fb
+.asm_403cc
+ call Function4135a
+ call c, Function40e5b
+ ld hl, hJoyPressed ; $ffa7
+ ld a, [hl]
+ and $6
+ jr nz, .asm_403ea
+ ld a, [hl]
+ and $1
+ jr nz, .asm_403e0
+ ret
+
+.asm_403e0
+ ld a, [wc7d8]
+ ld hl, Jumptable_40405
+ call Function41432
+ jp [hl]
+
+.asm_403ea
+ call Function41401
+ ld a, $0
+ ld [wcf63], a
+ ret
+; 403f3 (10:43f3)
+
+Unknown_403f3: ; 403f3
+ dw $03c0
+ dwcoord 2, 4
+ dwcoord 2, 6
+ dwcoord 2, 8
+; 403fb
+
+Unknown_403fb: ; 403fb
+ dw $04c0
+ dwcoord 2, 4
+ dwcoord 2, 6
+ dwcoord 2, 8
+ dwcoord 2, 10
+; 40405
+
+Jumptable_40405: ; 40405 (10:4405)
+ dw Function4040d
+ dw Function40411
+ dw Function40415
+ dw Function4043a
+; 4040d
+
+Function4040d: ; 4040d (10:440d)
+ ld b, $0
+ jr Function40417
+
+Function40411: ; 40411 (10:4411)
+ ld b, $1
+ jr Function40417
+
+Function40415: ; 40415 (10:4415)
+ ld b, $2
+Function40417: ; 40417 (10:4417)
+ ld a, [wc7d4]
+ cp b
+ jr z, .asm_40431
+ ld a, b
+ ld [wc7d4], a
+ call Function40bdc
+ call Function40f08
+ xor a
+ ld [wc7d0], a
+ ld [wc7d1], a
+ call Function400b4
+
+.asm_40431
+ call Function41401
+ ld a, $0
+ ld [wcf63], a
+ ret
+
+Function4043a: ; 4043a (10:443a)
+ call Function41401
+ ld a, $b
+ ld [wcf63], a
+ ret
+
+Function40443: ; 40443 (10:4443)
+ xor a
+ ld [hBGMapMode], a ; $ff00+$d4
+ call ClearSprites
+ call Function408f0
+ call Function4134f
+ ld a, $1
+ ld [wc7d5], a
+ xor a
+ ld [wc7d6], a
+ call Function40fa8
+ xor a
+ ld [wc7db], a
+ callba Function44207
+ call WaitBGMap
+ ld a, $10
+ call Function41423
+ call Function40131
+ ret
+
+Function40471: ; 40471 (10:4471)
+ ld de, Unknown_4049e
+ call Function4135a
+ call Function40f4f
+ call c, Function40fa8
+ ld hl, hJoyPressed ; $ffa7
+ ld a, [hl]
+ and START | B_BUTTON
+ jr nz, .asm_40495
+ ld a, [hl]
+ and A_BUTTON
+ jr nz, .asm_4048b
+ ret
+
+.asm_4048b
+ ld a, [wc7d8]
+ ld hl, Jumptable_404a8
+ call Function41432
+ jp [hl]
+
+.asm_40495
+ call Function41401
+ ld a, $0
+ ld [wcf63], a
+ ret
+; 4049e (10:449e)
+
+Unknown_4049e: ; 4049e
+ dw $04c0
+ dwcoord 2, 4
+ dwcoord 2, 6
+ dwcoord 2, 13
+ dwcoord 2, 15
+; 404a8
+
+Jumptable_404a8: ; 404a8
+ dw Function404b0
+ dw Function404b0
+ dw Function404b7
+ dw Function40501
+; 404b0
+
+Function404b0: ; 404b0
+ call Function40f84
+ call Function40fa8
+ ret
+; 404b7
+
+Function404b7: ; 404b7
+ call Function41086
+ callba Function441cf
+ ld a, [wc7d7]
+ and a
+ jr nz, .asm_404dc
+ call Function40bdc
+ call Function41107
+ xor a
+ ld [hBGMapMode], a
+ call Function408f0
+ call Function4134f
+ call Function40fa8
+ call WaitBGMap
+ ret
+
+.asm_404dc
+ ld [wc7d2], a
+ ld a, [wc7d0]
+ ld [wc7e0], a
+ ld a, [wc7d1]
+ ld [wc7e1], a
+ ld a, [wc2d6]
+ ld [wcf65], a
+ xor a
+ ld [wc7d0], a
+ ld [wc7d1], a
+ call Function41401
+ ld a, $9
+ ld [wcf63], a
+ ret
+; 40501
+
+Function40501: ; 40501
+ call Function41401
+ ld a, $0
+ ld [wcf63], a
+ ret
+; 4050a
+
+Function4050a: ; 4050a (10:450a)
+ xor a
+ ld [hBGMapMode], a ; $ff00+$d4
+ xor a
+ ld hl, AttrMap
+ ld bc, $168
+ call ByteFill
+ call Function41ae1
+ call Function41af7
+ callba Function1de1d1
+ call Function409cf
+ ld a, $4
+ ld [wc7d3], a
+ call Function40b0f
+ call Function41ad7
+ call Function41af7
+ call Function40962
+ ld a, $5
+ ld [hSCX], a ; $ff00+$cf
+ ld a, $4a
+ ld [hWX], a ; $ff00+$d1
+ xor a
+ ld [hWY], a ; $ff00+$d2
+ call WaitBGMap
+ call Function41af7
+ callba Function1de1d1
+ call Function409cf
+ call Function41281
+ ld a, $ff
+ ld [CurPartySpecies], a
+ ld a, $4
+ call Function41423
+ call Function40131
+ ret
+
+Function40562: ; 40562 (10:4562)
+ ld hl, hJoyPressed ; $ffa7
+ ld a, [hl]
+ and B_BUTTON
+ jr nz, .asm_40595
+ ld a, [hl]
+ and A_BUTTON
+ jr nz, .asm_40583
+ call Function406c5
+ ret nc
+ call Function41281
+ xor a
+ ld [hBGMapMode], a ; $ff00+$d4
+ call Function40b0f
+ call Function41ad7
+ call Function41af7
+ ret
+
+.asm_40583
+ call Function40bb1
+ call Function40bd0
+ ret z
+ ld a, $2
+ ld [wcf63], a
+ ld a, $9
+ ld [wcf64], a
+ ret
+
+.asm_40595
+ ld a, [wc7e0]
+ ld [wc7d0], a
+ ld a, [wc7e1]
+ ld [wc7d1], a
+ ld a, [wcf65]
+ ld [wc2d6], a
+ call Function41401
+ call ClearSprites
+ call Function40bdc
+ ld a, $5
+ ld [wcf63], a
+ xor a
+ ld [hSCX], a ; $ff00+$cf
+ ld a, $a7
+ ld [hWX], a ; $ff00+$d1
+ ret
+
+Function405bd: ; 405bd (10:45bd)
+ call Function41a2c
+ call Function409f1
+ xor a
+ ld [wc7dd], a
+ call Function41a58
+ call Function40658
+ callba Functionfba2e
+ call WaitBGMap
+ ld a, $16
+ call Function41423
+ call Function40131
+ ret
+
+Function405df: ; 405df (10:45df)
+ ld hl, hJoyPressed ; $ffa7
+ ld a, [hl]
+ and A_BUTTON | B_BUTTON
+ jr nz, .asm_405eb
+ call Function40610
+ ret
+
+.asm_405eb
+ call Function41401
+ ld a, $7
+ ld [wcf63], a
+ call DelayFrame
+ call Function41a24
+ jr nz, .asm_40603
+ callba Function1ddf26
+ jr .asm_4060f
+
+.asm_40603
+ ld hl, PokedexLZ
+ ld de, $9310
+ lb bc, BANK(PokedexLZ), $3a
+ call Functione73
+
+.asm_4060f
+ ret
+
+Function40610: ; 40610 (10:4610)
+ ld hl, $ffa9
+ ld a, [hl]
+ and D_RIGHT
+ jr nz, .right
+ ld a, [hl]
+ and D_LEFT
+ jr nz, .left
+ ret
+
+.right
+ ld a, [wc7de]
+ ld e, a
+ ld hl, wc7dd
+ ld a, [hl]
+ inc a
+ cp e
+ ret nc
+ ld a, [hl]
+ inc [hl]
+ jr .asm_40635
+
+.left
+ ld hl, wc7dd
+ ld a, [hl]
+ and a
+ ret z
+ ld a, [hl]
+ dec [hl]
+
+.asm_40635
+ push af
+ xor a
+ ld [hBGMapMode], a ; $ff00+$d4
+ pop af
+ call Function40654
+ call Function41a58
+ call Function40658
+ callba Functionfba2e
+ ld a, $1
+ ld [hBGMapMode], a ; $ff00+$d4
+ call DelayFrame
+ call DelayFrame
+ ret
+
+Function40654: ; 40654 (10:4654)
+ ld c, $7f
+ jr asm_4065d
+
+Function40658: ; 40658 (10:4658)
+ ld a, [wc7dd]
+ ld c, $5a
+asm_4065d: ; 4065d (10:465d)
+ ld e, a
+ ld d, 0
+ ld hl, Unknown_40a3e + 2
+ add hl, de
+ add hl, de
+ add hl, de
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld [hl], c
+ ret
+
+Function4066c: ; 4066c (10:466c)
+ ld a, [wc7d1]
+ ld [wc7e2], a
+ ld a, [wc7d0]
+ ld [wc7e3], a
+ ld hl, $ffa9
+ ld a, [hl]
+ and D_UP
+ jr nz, .up
+ ld a, [hl]
+ and D_DOWN
+ jr nz, .down
+ and a
+ ret
+
+.up
+ ld a, [wc7d3]
+ ld d, a
+ ld a, [wc7d2]
+ ld e, a
+ call Function406ea
+ jr nc, .asm_406b7
+ call Function40bb1
+ call Function40bd0
+ jr nz, .asm_406b5
+ jr .up
+
+.down
+ ld a, [wc7d3]
+ ld d, a
+ ld a, [wc7d2]
+ ld e, a
+ call Function406fe
+ jr nc, .asm_406b7
+ call Function40bb1
+ call Function40bd0
+ jr nz, .asm_406b5
+ jr .down
+
+.asm_406b5
+ scf
+ ret
+
+.asm_406b7
+ ld a, [wc7e2]
+ ld [wc7d1], a
+ ld a, [wc7e3]
+ ld [wc7d0], a
+ and a
+ ret
+
+Function406c5: ; 406c5 (10:46c5)
+ ld a, [wc7d3]
+ ld d, a
+ ld a, [wc7d2]
+ ld e, a
+ ld hl, $ffa9
+ ld a, [hl]
+ and D_UP
+ jr nz, Function406ea
+ ld a, [hl]
+ and D_DOWN
+ jr nz, Function406fe
+ ld a, d
+ cp e
+ jr nc, asm_4073d
+ ld a, [hl]
+ and $20
+ jr nz, asm_40716
+ ld a, [hl]
+ and $10
+ jr nz, asm_40728
+ jr asm_4073d
+
+Function406ea: ; 406ea (10:46ea)
+ ld hl, wc7d1
+ ld a, [hl]
+ and a
+ jr z, .asm_406f4
+ dec [hl]
+ jr asm_4073f
+.asm_406f4
+ ld hl, wc7d0
+ ld a, [hl]
+ and a
+ jr z, asm_4073d
+ dec [hl]
+ jr asm_4073f
+
+Function406fe: ; 406fe (10:46fe)
+ ld hl, wc7d1
+ ld a, [hl]
+ inc a
+ cp e
+ jr nc, asm_4073d
+ cp d
+ jr nc, .asm_4070c
+ inc [hl]
+ jr asm_4073f
+.asm_4070c
+ ld hl, wc7d0
+ add [hl]
+ cp e
+ jr nc, asm_4073d
+ inc [hl]
+ jr asm_4073f
+asm_40716: ; 40716 (10:4716)
+ ld hl, wc7d0
+ ld a, [hl]
+ and a
+ jr z, asm_4073d
+ cp d
+ jr nc, .asm_40724
+ xor a
+ ld [hl], a
+ jr asm_4073f
+.asm_40724
+ sub d
+ ld [hl], a
+ jr asm_4073f
+asm_40728: ; 40728 (10:4728)
+ ld hl, wc7d0
+ ld a, d
+ add a
+ add [hl]
+ jr c, .asm_40733
+ cp e
+ jr c, .asm_40738
+.asm_40733
+ ld a, e
+ sub d
+ ld [hl], a
+ jr asm_4073f
+.asm_40738
+ ld a, [hl]
+ add d
+ ld [hl], a
+ jr asm_4073f
+asm_4073d: ; 4073d (10:473d)
+ and a
+ ret
+asm_4073f: ; 4073f (10:473f)
+ scf
+ ret
+
+Function40741: ; 40741
+ push de
+ ld de, $0014
+.asm_40745
+ ld [hl], a
+ add hl, de
+ dec b
+ jr nz, .asm_40745
+ pop de
+ ret
+; 4074c
+
+
+Function4074c: ; 4074c (10:474c)
+ hlcoord 0, 17
+ ld de, Unknown_407f2
+ call Function40acd
+ ld a, $32
+ ld hl, TileMap
+ ld bc, $168
+ call ByteFill
+ ld hl, TileMap
+ lb bc, 7, 7
+ call Function40ad5
+ hlcoord 0, 9
+ ld bc, $607
+ call Function40ad5
+ hlcoord 1, 11
+ ld de, Unknown_407e1
+ call Function40acd
+ ld hl, PokedexSeen ; wdeb9 (aliases: EndPokedexSeen)
+ ld b, EndPokedexSeen - PokedexSeen
+ call CountSetBits
+ ld de, wd265
+ hlcoord 5, 12
+ ld bc, $103
+ call PrintNum
+ hlcoord 1, 14
+ ld de, Unknown_407e6
+ call Function40acd
+ ld hl, PokedexCaught
+ ld b, EndPokedexCaught - PokedexCaught
+ call CountSetBits
+ ld de, wd265
+ hlcoord 5, 15
+ ld bc, $103
+ call PrintNum
+ hlcoord 1, 17
+ ld de, Unknown_407ea
+ call Function40acd
+ hlcoord 8, 1
+ ld b, $7
+ ld a, $5a
+ call Function40741
+ hlcoord 8, 10
+ ld b, $6
+ ld a, $5a
+ call Function40741
+ hlcoord 8, 0
+ ld [hl], $59
+ hlcoord 8, 8
+ ld [hl], $53
+ hlcoord 8, 9
+ ld [hl], $54
+ hlcoord 8, 16
+ ld [hl], $5b
+ call Function40ab2
+ ret
+; 407e1 (10:47e1)
+
+Unknown_407e1: ; 407e1
+ db "SEEN", $ff
+Unknown_407e6: ; 407e6
+ db "OWN", $ff
+Unknown_407ea: ; 407ea
+ db $3b, $48, $49, $4a, $44, $45, $46, $47 ; SELECT > OPTION
+Unknown_407f2: ; 407f2
+ db $3c, $3b, $41, $42, $43, $4b, $4c, $4d, $4e, $3c, $ff ; START > SEARCH
+; 407fd
+
+Function407fd: ; 407fd
+ call Function40aa6
+ ld hl, TileMap
+ ld bc, $0f12
+ call Function40ad5
+ hlcoord 19, 0
+ ld [hl], $34
+ hlcoord 19, 1
+ ld a, $7f
+ ld b, $f
+ call Function40741
+ ld [hl], $39
+ hlcoord 1, 10
+ ld bc, $0013
+ ld a, $61
+ call ByteFill
+ hlcoord 1, 17
+ ld bc, $0012
+ ld a, $7f
+ call ByteFill
+ hlcoord 9, 7
+ ld de, Unknown_40852
+ call Function40acd
+ hlcoord 9, 9
+ ld de, Unknown_4085c
+ call Function40acd
+ hlcoord 0, 17
+ ld de, Unknown_40867
+ call Function40acd
+ call Function40ab2
+ ret
+; 4084f
+
+Unknown_4084f: ; 4084f
+ db $5c, $5d, $ff ; No.
+Unknown_40852: ; 40852
+ db "HT ?", $5e, "??", $5f, $ff ; HT ?'??"
+Unknown_4085c: ; 4085c
+ db "WT ???lb", $ff ; WT ???lb
+Unknown_40867: ; 40867
+ db $3b, " PAGE AREA CRY PRNT", $ff
+; 4087c
+
+Function4087c: ; 4087c (10:487c)
+ call Function40aa6
+ hlcoord 0, 2
+ lb bc, 8, 18
+ call Function40ad5
+ hlcoord 0, 12
+ lb bc, 4, 18
+ call Function40ad5
+ hlcoord 0, 1
+ ld de, Unknown_408b2
+ call Function40acd
+ hlcoord 3, 4
+ ld de, String_408bd
+ call PlaceString
+ ld a, [wc7dc]
+ and a
+ ret z
+ hlcoord 3, 10
+ ld de, String_408e5
+ call PlaceString
+ ret
+; 408b2 (10:48b2)
+
+Unknown_408b2: ; 408b2
+ db $3b, " OPTION ", $3c, $ff
+; 408bd
+
+String_408bd: ; 408bd
+ db "NEW #DEX MODE", $4e
+ db "OLD #DEX MODE", $4e
+ db "A to Z MODE@"
+; 408e5
+
+String_408e5: ; 408e5
+ db "UNOWN MODE@"
+; 408f0
+
+Function408f0: ; 408f0 (10:48f0)
+ call Function40aa6
+ hlcoord 0, 2
+ lb bc, 14, 18
+ call Function40ad5
+ hlcoord 0, 1
+ ld de, Unknown_4092a
+ call Function40acd
+ hlcoord 8, 4
+ ld de, Unknown_40935
+ call Function40acd
+ hlcoord 8, 6
+ ld de, Unknown_40935
+ call Function40acd
+ hlcoord 3, 4
+ ld de, String_40940
+ call PlaceString
+ hlcoord 3, 13
+ ld de, String_4094c
+ call PlaceString
+ ret
+; 4092a (10:492a)
+
+Unknown_4092a: ; 4092a
+ db $3b, " SEARCH ", $3c, $ff
+; 40925
+
+Unknown_40935: ; 40935
+ db $3d, " ", $3e, $ff
+; 40940
+
+String_40940: ; 40940
+ db "TYPE1"
+ next "TYPE2"
+ db "@"
+; 4094c
+
+String_4094c: ; 4094c
+ db "BEGIN SEARCH!!"
+ next "CANCEL"
+ db "@"
+; 40962
+
+Function40962: ; 40962 (10:4962)
+ call Function40aa6
+ ld hl, TileMap
+ lb bc, 7, 7
+ call Function40ad5
+ hlcoord 0, 11
+ lb bc, 5, 18
+ call Function40ad5
+ hlcoord 1, 12
+ ld de, String_409ae
+ call PlaceString
+ ld de, wc7d7
+ hlcoord 1, 16
+ ld bc, $103
+ call PrintNum
+ hlcoord 8, 0
+ ld [hl], $59
+ hlcoord 8, 1
+ ld b, $7
+ ld a, $5a
+ call Function40741
+ hlcoord 8, 8
+ ld [hl], $53
+ hlcoord 8, 9
+ ld [hl], $69
+ hlcoord 8, 10
+ ld [hl], $6a
+ call Function40ab2
+ ret
+; 409ae (10:49ae)
+
+String_409ae: ; 409ae
+ db "SEARCH RESULTS"
+ next " TYPE"
+ next " FOUND!"
+ db "@"
+; 409cf
+
+Function409cf: ; 409cf (10:49cf)
+ ld a, [wc7d5]
+ hlcoord 0, 14
+ call Function40fcd
+ ld a, [wc7d5]
+ ld b, a
+ ld a, [wc7d6]
+ and a
+ jr z, .asm_409f0
+ cp b
+ jr z, .asm_409f0
+ hlcoord 2, 15
+ call Function40fcd
+ hlcoord 1, 15
+ ld [hl], $f3
+.asm_409f0
+ ret
+
+Function409f1: ; 409f1 (10:49f1)
+ call Function40aa6
+ hlcoord 2, 1
+ lb bc, 10, 13
+ call Function40ad5
+ hlcoord 2, 14
+ lb bc, 1, 13
+ call Function40ad5
+ hlcoord 2, 15
+ ld [hl], $3d
+ hlcoord 16, 15
+ ld [hl], $3e
+ hlcoord 6, 5
+ call Function40ab5
+ ld de, 0
+ ld b, 0
+ ld c, 26
+.asm_40a1d
+ ld hl, UnownDex
+ add hl, de
+ ld a, [hl]
+ and a
+ jr z, .asm_40a39
+ push af
+ ld hl, Unknown_40a3e
+ add hl, de
+ add hl, de
+ add hl, de
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ pop af
+ add $3f
+ ld [hl], a
+ inc de
+ inc b
+ dec c
+ jr nz, .asm_40a1d
+.asm_40a39
+ ld a, b
+ ld [wc7de], a
+ ret
+; 40a3e (10:4a3e)
+
+Unknown_40a3e: ; 40a3e
+ dwcoord 4,11, 3,11
+ dwcoord 4,10, 3,10
+ dwcoord 4, 9, 3, 9
+ dwcoord 4, 8, 3, 8
+ dwcoord 4, 7, 3, 7
+ dwcoord 4, 6, 3, 6
+ dwcoord 4, 5, 3, 5
+ dwcoord 4, 4, 3, 4
+ dwcoord 4, 3, 3, 2
+ dwcoord 5, 3, 5, 2
+ dwcoord 6, 3, 6, 2
+ dwcoord 7, 3, 7, 2
+ dwcoord 8, 3, 8, 2
+ dwcoord 9, 3, 9, 2
+ dwcoord 10, 3, 10, 2
+ dwcoord 11, 3, 11, 2
+ dwcoord 12, 3, 12, 2
+ dwcoord 13, 3, 13, 2
+ dwcoord 14, 3, 15, 2
+ dwcoord 14, 4, 15, 4
+ dwcoord 14, 5, 15, 5
+ dwcoord 14, 6, 15, 6
+ dwcoord 14, 7, 15, 7
+ dwcoord 14, 8, 15, 8
+ dwcoord 14, 9, 15, 9
+ dwcoord 14,10, 15,10
+; 40aa6
+
+Function40aa6: ; 40aa6
+ ld hl, TileMap
+ ld a, $32
+ ld bc, $0168
+ call ByteFill
+ ret
+; 40ab2
+
+Function40ab2: ; 40ab2
+ hlcoord 1, 1
+Function40ab5: ; 40ab5
+ xor a
+ ld b, $7
+.asm_40ab8
+ ld c, $7
+ push af
+ push hl
+.asm_40abc
+ ld [hli], a
+ add $7
+ dec c
+ jr nz, .asm_40abc
+ pop hl
+ ld de, $0014
+ add hl, de
+ pop af
+ inc a
+ dec b
+ jr nz, .asm_40ab8
+ ret
+; 40acd
+
+Function40acd: ; 40acd
+.asm_40acd
+ ld a, [de]
+ cp $ff
+ ret z
+ inc de
+ ld [hli], a
+ jr .asm_40acd
+; 40ad5
+
+
+Function40ad5: ; 40ad5
+ push hl
+ ld a, $33
+ ld [hli], a
+ ld d, $34
+ call Function40b06
+ ld a, $35
+ ld [hl], a
+ pop hl
+ ld de, $0014
+ add hl, de
+.asm_40ae6
+ push hl
+ ld a, $36
+ ld [hli], a
+ ld d, $7f
+ call Function40b06
+ ld a, $37
+ ld [hl], a
+ pop hl
+ ld de, $0014
+ add hl, de
+ dec b
+ jr nz, .asm_40ae6
+ ld a, $38
+ ld [hli], a
+ ld d, $39
+ call Function40b06
+ ld a, $3a
+ ld [hl], a
+ ret
+; 40b06
+
+Function40b06: ; 40b06
+ ld e, c
+.asm_40b07
+ ld a, e
+ and a
+ ret z
+ ld a, d
+ ld [hli], a
+ dec e
+ jr .asm_40b07
+; 40b0f
+
+
+Function40b0f: ; 40b0f (10:4b0f)
+ ld a, [wc7d4]
+ cp $1
+ jr z, .asm_40b1a
+ ld c, $b
+ jr .asm_40b1c
+.asm_40b1a
+ ld c, $b
+.asm_40b1c
+ hlcoord 0, 1
+ ld a, [wc7d3]
+ add a
+ inc a
+ ld b, a
+ ld a, $7f
+ call Function413fe
+ ld a, [wc7d0]
+ ld e, a
+ ld d, $0
+ ld hl, wc6d0
+ add hl, de
+ ld e, l
+ ld d, h
+ hlcoord 0, 2
+ ld a, [wc7d3]
+.asm_40b3c
+ push af
+ ld a, [de]
+ ld [wd265], a
+ push de
+ push hl
+ call Function40b55
+ pop hl
+ ld de, $28
+ add hl, de
+ pop de
+ inc de
+ pop af
+ dec a
+ jr nz, .asm_40b3c
+ call Function4143b
+ ret
+
+Function40b55: ; 40b55 (10:4b55)
+ and a
+ ret z
+ call Function40b6a
+ call Function40b8d
+ ret c
+ call Function40b82
+ push hl
+ call GetPokemonName
+ pop hl
+ call PlaceString
+ ret
+
+Function40b6a: ; 40b6a (10:4b6a)
+ ld a, [wc7d4]
+ cp $1
+ jr z, .asm_40b72
+ ret
+.asm_40b72
+ push hl
+ ld de, -20
+ add hl, de
+ ld de, wd265
+ ld bc, $8103
+ call PrintNum
+ pop hl
+ ret
+
+Function40b82: ; 40b82 (10:4b82)
+ call Function40bc4
+ jr nz, .asm_40b89
+ inc hl
+ ret
+.asm_40b89
+ ld a, $4f
+ ld [hli], a
+ ret
+
+Function40b8d: ; 40b8d (10:4b8d)
+ call Function40bd0
+ ret nz
+ inc hl
+ ld de, String_40b9a
+ call PlaceString
+ scf
+ ret
+; 40b9a (10:4b9a)
+
+String_40b9a: ; 40b9a
+ db "-----@"
+; 40ba0
+
+Function40ba0: ; 40ba0
+ hlcoord 18, 1
+ ld a, $62
+ ld [hli], a
+ inc a
+ ld [hl], a
+ hlcoord 18, 2
+ ld a, $64
+ ld [hli], a
+ inc a
+ ld [hl], a
+ ret
+; 40bb1
+
+
+Function40bb1: ; 40bb1
+ ld a, [wc7d1]
+ ld hl, wc7d0
+ add [hl]
+ ld e, a
+ ld d, $0
+ ld hl, wc6d0
+ add hl, de
+ ld a, [hl]
+ ld [wd265], a
+ ret
+; 40bc4
+
+
+Function40bc4: ; 40bc4 (10:4bc4)
+ push de
+ push hl
+ ld a, [wd265]
+ dec a
+ call CheckCaughtMon
+ pop hl
+ pop de
+ ret
+
+
+Function40bd0: ; 40bd0
+ push de
+ push hl
+ ld a, [wd265]
+ dec a
+ call CheckSeenMon
+ pop hl
+ pop de
+ ret
+; 40bdc
+
+
+
+Function40bdc: ; 40bdc
+ ld hl, wc6d0
+ ld bc, $100
+ xor a
+ call ByteFill
+ ld a, [wc7d4]
+ ld hl, Jumptable_40bf0
+ call Function41432
+ jp [hl]
+; 40bf0
+
+
+Jumptable_40bf0: ; 40bf0 (10:4bf0)
+ dw Function40bf6
+ dw Function40c08
+ dw Function40c30
+
+
+Function40bf6: ; 40bf6 (10:4bf6)
+ ld de, NewPokedexOrder
+ ld hl, wc6d0
+ ld c, NUM_POKEMON
+.asm_40bfe
+ ld a, [de]
+ inc de
+ ld [hli], a
+ dec c
+ jr nz, .asm_40bfe
+ call Function40c18
+ ret
+
+Function40c08: ; 40c08 (10:4c08)
+ ld hl, wc6d0
+ ld a, $1
+ ld c, NUM_POKEMON
+.asm_40c0f
+ ld [hli], a
+ inc a
+ dec c
+ jr nz, .asm_40c0f
+ call Function40c18
+ ret
+
+Function40c18: ; 40c18 (10:4c18)
+ ld hl, wc7ca
+ ld d, NUM_POKEMON
+ ld e, d
+.asm_40c1e
+ ld a, [hld]
+ ld [wd265], a
+ call Function40bd0
+ jr nz, .asm_40c2b
+ dec d
+ dec e
+ jr nz, .asm_40c1e
+.asm_40c2b
+ ld a, d
+ ld [wc7d2], a
+ ret
+
+Function40c30: ; 40c30
+ xor a
+ ld [wc7d2], a
+ ld hl, wc6d0
+ ld de, AlphabeticalPokedexOrder
+ ld c, NUM_POKEMON
+.asm_40c3c
+ push bc
+ ld a, [de]
+ ld [wd265], a
+ call Function40bd0
+ jr z, .asm_40c51
+ ld a, [wd265]
+ ld [hli], a
+ ld a, [wc7d2]
+ inc a
+ ld [wc7d2], a
+
+.asm_40c51
+ inc de
+ pop bc
+ dec c
+ jr nz, .asm_40c3c
+ ld a, [wc7d2]
+ ld c, 0
+.asm_40c5b
+ cp NUM_POKEMON
+ jr z, .asm_40c64
+ ld [hl], c
+ inc hl
+ inc a
+ jr .asm_40c5b
+
+.asm_40c64
+ ret
+; 40c65
+
+AlphabeticalPokedexOrder: ; 0x40c65
+INCLUDE "data/pokedex/order_alpha.asm"
+
+NewPokedexOrder: ; 0x40d60
+INCLUDE "data/pokedex/order_new.asm"
+
+Function40e5b: ; 40e5b
+ xor a
+ ld [hBGMapMode], a
+ hlcoord 0, 12
+ ld bc, $0412
+ call Function40ad5
+ ld a, [wc7d8]
+ ld hl, Unknown_40e7d
+ call Function41432
+ ld e, l
+ ld d, h
+ hlcoord 1, 14
+ call PlaceString
+ ld a, $1
+ ld [hBGMapMode], a
+ ret
+; 40e7d
+
+Unknown_40e7d: ; 40e7d
+ dw String_40e85
+ dw String_40ea6
+ dw String_40ec6
+ dw String_40ee4
+; 40e85
+
+String_40e85: ; 40e85
+ db $e1, $e2, " are listed by", $4e
+ db "evolution type.@"
+; 40ea6
+
+String_40ea6: ; 40ea6
+ db $e1, $e2, " are listed by", $4e
+ db "official type.@"
+; 40ec6
+
+String_40ec6: ; 40ec6
+ db $e1, $e2, " are listed", $4e
+ db "alphabetically.@"
+; 40ee4
+
+String_40ee4: ; 40ee4
+ db "UNOWN are listed", $4e
+ db "in catching order.@"
+; 40f08
+
+Function40f08: ; 40f08 (10:4f08)
+ xor a
+ ld [hBGMapMode], a ; $ff00+$d4
+ hlcoord 0, 12
+ ld bc, $412
+ call Function40ad5
+ ld de, $4f32
+ hlcoord 1, 14
+ call PlaceString
+ ld a, $1
+ ld [hBGMapMode], a ; $ff00+$d4
+ ld c, $40
+ call DelayFrames
+ ld de, SFX_CHANGE_DEX_MODE
+ call PlaySFX
+ ld c, $40
+ call DelayFrames
+ ret
+; 40f32 (10:4f32)
+
+String_40f32: ; 40f32
+ db "Changing modes.", $4e, "Please wait.@"
+; 40f4f
+
+Function40f4f: ; 40f4f (10:4f4f)
+ ld a, [wc7d8]
+ cp $2
+ jr nc, .asm_40f63
+ ld hl, $ffa9
+ ld a, [hl]
+ and $20
+ jr nz, .asm_40f65
+ ld a, [hl]
+ and $10
+ jr nz, Function40f84
+.asm_40f63
+ and a
+ ret
+.asm_40f65
+ ld a, [wc7d8]
+ and a
+ jr nz, .asm_40f76
+ ld hl, wc7d5
+ ld a, [hl]
+ cp $1
+ jr z, .asm_40f80
+ dec [hl]
+ jr .asm_40f82
+.asm_40f76
+ ld hl, wc7d6
+ ld a, [hl]
+ and a
+ jr z, .asm_40f80
+ dec [hl]
+ jr .asm_40f82
+.asm_40f80
+ ld [hl], $11
+.asm_40f82
+ scf
+ ret
+; 40f84
+
+Function40f84: ; 40f84
+ ld a, [wc7d8]
+ and a
+ jr nz, .asm_40f99
+ ld hl, wc7d5
+ ld a, [hl]
+ cp $11
+ jr nc, .asm_40f95
+ inc [hl]
+ jr .asm_40fa6
+.asm_40f95
+ ld [hl], $1
+ jr .asm_40fa6
+.asm_40f99
+ ld hl, wc7d6
+ ld a, [hl]
+ cp $11
+ jr nc, .asm_40fa4
+ inc [hl]
+ jr .asm_40fa6
+.asm_40fa4
+ ld [hl], $0
+.asm_40fa6
+ scf
+ ret
+
+Function40fa8: ; 40fa8 (10:4fa8)
+ xor a
+ ld [hBGMapMode], a ; $ff00+$d4
+ hlcoord 9, 3
+ ld bc, $408
+ ld a, $7f
+ call Function413fe
+ ld a, [wc7d5]
+ hlcoord 9, 4
+ call Function40fcd
+ ld a, [wc7d6]
+ hlcoord 9, 6
+ call Function40fcd
+ ld a, $1
+ ld [hBGMapMode], a ; $ff00+$d4
+ ret
+
+Function40fcd: ; 40fcd (10:4fcd)
+ push hl
+ ld e, a
+ ld d, 0
+ ld hl, Strings_40fe4
+ add hl, de
+ add hl, de
+ add hl, de
+ add hl, de
+ add hl, de
+ add hl, de
+ add hl, de
+ add hl, de
+ add hl, de
+ ld e, l
+ ld d, h
+ pop hl
+ call PlaceString
+ ret
+; 40fe4 (10:4fe4)
+
+Strings_40fe4: ; 40fe4
+ db " ---- @"
+ db " NORMAL @"
+ db " FIRE @"
+ db " WATER @"
+ db " GRASS @"
+ db "ELECTRIC@"
+ db " ICE @"
+ db "FIGHTING@"
+ db " POISON @"
+ db " GROUND @"
+ db " FLYING @"
+ db "PSYCHIC @"
+ db " BUG @"
+ db " ROCK @"
+ db " GHOST @"
+ db " DRAGON @"
+ db " DARK @"
+ db " STEEL @"
+; 41086
+
+Function41086: ; 41086
+ ld a, [wc7d6]
+ and a
+ call nz, Function41095
+ ld a, [wc7d5]
+ and a
+ call nz, Function41095
+ ret
+; 41095
+
+Function41095: ; 41095
+ dec a
+ ld e, a
+ ld d, 0
+ ld hl, Unknown_410f6
+ add hl, de
+ ld a, [hl]
+ ld [wc7df], a
+ ld hl, wc6d0
+ ld de, wc6d0
+ ld c, NUM_POKEMON
+ xor a
+ ld [wc7d7], a
+.asm_410ad
+ push bc
+ ld a, [hl]
+ and a
+ jr z, .asm_410e0
+ ld [wd265], a
+ ld [CurSpecies], a
+ call Function40bc4
+ jr z, .asm_410e0
+ push hl
+ push de
+ call GetBaseData
+ pop de
+ pop hl
+ ld a, [wc7df]
+ ld b, a
+ ld a, [BaseType1]
+ cp b
+ jr z, .asm_410d4
+ ld a, [BaseType2]
+ cp b
+ jr nz, .asm_410e0
+
+.asm_410d4
+ ld a, [wd265]
+ ld [de], a
+ inc de
+ ld a, [wc7d7]
+ inc a
+ ld [wc7d7], a
+
+.asm_410e0
+ inc hl
+ pop bc
+ dec c
+ jr nz, .asm_410ad
+ ld l, e
+ ld h, d
+ ld a, [wc7d7]
+ ld c, 0
+.asm_410ec
+ cp NUM_POKEMON
+ jr z, .asm_410f5
+ ld [hl], c
+ inc hl
+ inc a
+ jr .asm_410ec
+
+.asm_410f5
+ ret
+; 410f6
+
+Unknown_410f6: ; 410f6
+ db NORMAL
+ db FIRE
+ db WATER
+ db GRASS
+ db ELECTRIC
+ db ICE
+ db FIGHTING
+ db POISON
+ db GROUND
+ db FLYING
+ db PSYCHIC
+ db BUG
+ db ROCK
+ db GHOST
+ db DRAGON
+ db DARK
+ db STEEL
+; 41107
+
+Function41107: ; 41107
+ xor a
+ ld [hBGMapMode], a
+ hlcoord 0, 12
+ ld bc, $0412
+ call Function40ad5
+ ld de, String_41126
+ hlcoord 1, 14
+ call PlaceString
+ ld a, $1
+ ld [hBGMapMode], a
+ ld c, $80
+ call DelayFrames
+ ret
+; 41126
+
+String_41126: ; 41126
+ db "The specified type", $4e
+ db "was not found.@"
+; 41148
+
+Function41148: ; 41148 (10:5148)
+ ld a, [wc7d4]
+ cp $1
+ jp z, Function41157
+ call Function41229
+ call Function4130e
+ ret
+
+Function41157: ; 41157 (10:5157)
+ ld hl, Unknown_41167
+ ld a, [wc7d1]
+ or a
+ jr nz, .asm_41163
+ ld hl, Unknown_411c8
+.asm_41163
+ call Function412f1
+ ret
+; 41167 (10:5167)
+
+Unknown_41167: ; 41167
+; OAM
+ db $18, $47, $30, $07
+ db $10, $47, $31, $07
+ db $10, $4f, $32, $07
+ db $10, $57, $32, $07
+ db $10, $5f, $32, $07
+ db $10, $67, $33, $07
+ db $10, $7e, $33, $27
+ db $10, $86, $32, $27
+ db $10, $8e, $32, $27
+ db $10, $96, $32, $27
+ db $10, $9e, $31, $27
+ db $18, $9e, $30, $27
+ db $20, $47, $30, $47
+ db $28, $47, $31, $47
+ db $28, $4f, $32, $47
+ db $28, $57, $32, $47
+ db $28, $5f, $32, $47
+ db $28, $67, $33, $47
+ db $28, $7e, $33, $67
+ db $28, $86, $32, $67
+ db $28, $8e, $32, $67
+ db $28, $96, $32, $67
+ db $28, $9e, $31, $67
+ db $20, $9e, $30, $67
+ db $ff
+; 411c8
+
+Unknown_411c8: ; 411c8
+; OAM
+ db $18, $47, $30, $07
+ db $10, $47, $34, $07
+ db $10, $4f, $35, $07
+ db $10, $57, $35, $07
+ db $10, $5f, $35, $07
+ db $10, $67, $36, $07
+ db $10, $7e, $36, $27
+ db $10, $86, $35, $27
+ db $10, $8e, $35, $27
+ db $10, $96, $35, $27
+ db $10, $9e, $34, $27
+ db $18, $9e, $30, $27
+ db $20, $47, $30, $47
+ db $28, $47, $31, $47
+ db $28, $4f, $32, $47
+ db $28, $57, $32, $47
+ db $28, $5f, $32, $47
+ db $28, $67, $33, $47
+ db $28, $7e, $33, $67
+ db $28, $86, $32, $67
+ db $28, $8e, $32, $67
+ db $28, $96, $32, $67
+ db $28, $9e, $31, $67
+ db $20, $9e, $30, $67
+ db $ff
+; 41229
+
+Function41229: ; 41229 (10:5229)
+ ld hl, Unknown_41230
+ call Function412f1
+ ret
+; 41230 (10:5230)
+
+Unknown_41230: ; 41230
+; OAM
+ db $1b, $47, $30, $07
+ db $13, $47, $31, $07
+ db $13, $4f, $32, $07
+ db $13, $57, $32, $07
+ db $13, $5f, $33, $07
+ db $13, $80, $33, $27
+ db $13, $88, $32, $27
+ db $13, $90, $32, $27
+ db $13, $98, $31, $27
+ db $1b, $98, $30, $27
+ db $23, $47, $30, $47
+ db $2b, $47, $31, $47
+ db $2b, $4f, $32, $47
+ db $2b, $57, $32, $47
+ db $2b, $5f, $33, $47
+ db $2b, $80, $33, $67
+ db $2b, $88, $32, $67
+ db $2b, $90, $32, $67
+ db $2b, $98, $31, $67
+ db $23, $98, $30, $67
+ db $ff
+; 41281
+
+Function41281: ; 41281 (10:5281)
+ ld a, [wc7d4]
+ cp $1
+ jp z, Function41157
+ ld hl, Unknown_41290
+ call Function412f1
+ ret
+; 41290 (10:5290)
+
+Unknown_41290: ; 41290
+; OAM
+ db $1b, $47, $30, $07
+ db $13, $47, $31, $07
+ db $13, $4f, $32, $07
+ db $13, $57, $32, $07
+ db $13, $5f, $32, $07
+ db $13, $67, $33, $07
+ db $13, $7e, $33, $27
+ db $13, $86, $32, $27
+ db $13, $8e, $32, $27
+ db $13, $96, $32, $27
+ db $13, $9e, $31, $27
+ db $1b, $9e, $30, $27
+ db $23, $47, $30, $47
+ db $2b, $47, $31, $47
+ db $2b, $4f, $32, $47
+ db $2b, $57, $32, $47
+ db $2b, $5f, $32, $47
+ db $2b, $67, $33, $47
+ db $2b, $7e, $33, $67
+ db $2b, $86, $32, $67
+ db $2b, $8e, $32, $67
+ db $2b, $96, $32, $67
+ db $2b, $9e, $31, $67
+ db $23, $9e, $30, $67
+ db $ff
+; 412f1
+
+Function412f1: ; 412f1 (10:52f1)
+ ld de, Sprites
+.asm_412f4
+ ld a, [hl]
+ cp $ff
+ ret z
+ ld a, [wc7d1]
+ and $7
+ swap a
+ add [hl]
+ inc hl
+ ld [de], a
+ inc de
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hli]
+ ld [de], a
+ inc de
+ jr .asm_412f4
+
+Function4130e: ; 4130e (10:530e)
+ push de
+ ld a, [wc7d2]
+ dec a
+ ld e, a
+ ld a, [wc7d1]
+ ld hl, wc7d0
+ add [hl]
+ cp e
+ jr z, .asm_4133f
+ ld hl, $0
+ ld bc, $79
+ call AddNTimes
+ ld e, l
+ ld d, h
+ ld b, $0
+ ld a, d
+ or e
+ jr z, .asm_41341
+ ld a, [wc7d2]
+ ld c, a
+.asm_41333
+ ld a, e
+ sub c
+ ld e, a
+ ld a, d
+ sbc $0
+ ld d, a
+ jr c, .asm_41341
+ inc b
+ jr .asm_41333
+.asm_4133f
+ ld b, $79
+.asm_41341
+ ld a, $14
+ add b
+ pop hl
+ ld [hli], a
+ ld a, $a1
+ ld [hli], a
+ ld a, $f
+ ld [hli], a
+ ld [hl], $0
+ ret
+
+Function4134f: ; 4134f (10:534f)
+ xor a
+ ld [wc7d8], a
+ ld [wc7d9], a
+ ld [wc7da], a
+ ret
+
+Function4135a: ; 4135a (10:535a)
+ ld a, [de]
+ ld b, a
+ inc de
+ ld a, [de]
+ dec a
+ ld c, a
+ inc de
+ call Function413e0
+ ld hl, hJoyPressed ; $ffa7
+ ld a, [hl]
+ and D_LEFT | D_UP
+ and b
+ jr nz, .asm_4138f
+ ld a, [hl]
+ and D_RIGHT | D_DOWN
+ and b
+ jr nz, .asm_413a0
+ ld a, [hl]
+ and SELECT
+ and b
+ jr nz, .asm_413c1
+ call Function413f5
+ jr c, .asm_413bf
+ ld hl, $ffa9
+ ld a, [hl]
+ and D_LEFT | D_UP
+ and b
+ jr nz, .asm_4138f
+ ld a, [hl]
+ and D_RIGHT | D_DOWN
+ and b
+ jr nz, .asm_413a0
+ jr .asm_413bf
+.asm_4138f
+ ld a, [wc7d8]
+ and a
+ jr z, .asm_413bf
+ call Function413d4
+ ld [hl], $7f
+ ld hl, wc7d8
+ dec [hl]
+ jr .asm_413af
+.asm_413a0
+ ld a, [wc7d8]
+ cp c
+ jr nc, .asm_413bf
+ call Function413d4
+ ld [hl], $7f
+ ld hl, wc7d8
+ inc [hl]
+.asm_413af
+ call Function413d4
+ ld [hl], $ed
+ ld a, $c
+ ld [wc7d9], a
+ xor a
+ ld [wc7da], a
+ scf
+ ret
+.asm_413bf
+ and a
+ ret
+.asm_413c1
+ call Function413d4
+ ld [hl], $7f
+ ld a, [wc7d8]
+ cp c
+ jr c, .asm_413ce
+ ld a, $ff
+.asm_413ce
+ inc a
+ ld [wc7d8], a
+ jr .asm_413af
+
+Function413d4: ; 413d4 (10:53d4)
+ ld a, [wc7d8]
+ add a
+ ld l, a
+ ld h, $0
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ret
+
+Function413e0: ; 413e0 (10:53e0)
+ ld hl, wc7da
+ ld a, [hl]
+ inc [hl]
+ and $8
+ jr z, .asm_413ef
+ call Function413d4
+ ld [hl], $7f
+ ret
+.asm_413ef
+ call Function413d4
+ ld [hl], $ed
+ ret
+
+Function413f5: ; 413f5 (10:53f5)
+ ld hl, wc7d9
+ ld a, [hl]
+ and a
+ ret z
+ dec [hl]
+ scf
+ ret
+
+Function413fe: ; 413fe (10:53fe)
+ jp Functionfb8
+
+Function41401: ; 41401 (10:5401)
+ ld a, [rSVBK] ; $ff00+$70
+ push af
+ ld a, $5
+ ld [rSVBK], a ; $ff00+$70
+ ld hl, Unkn1Pals
+ ld bc, $40
+ xor a
+ call ByteFill
+ pop af
+ ld [rSVBK], a ; $ff00+$70
+
+Function41415: ; 41415
+ ld a, $ff
+ call DmgToCgbBGPals
+ ld a, $ff
+ call Functioncf8
+ call DelayFrame
+ ret
+
+Function41423: ; 41423
+ ld b, a
+ call GetSGBLayout
+
+Function41427: ; 41427
+ ld a, $e4
+ call DmgToCgbBGPals
+ ld a, $e0
+ call Functioncf8
+ ret
+; 41432
+
+
+Function41432: ; 41432
+ ld e, a
+ ld d, 0
+ add hl, de
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ret
+; 4143b
+
+Function4143b: ; 4143b
+ call Function40bb1
+ call Function40bd0
+ jr z, .asm_4145b
+ ld a, [wdef4]
+ ld [UnownLetter], a
+ ld a, [wd265]
+ ld [CurPartySpecies], a
+ call GetBaseData
+ ld de, VTiles2
+ predef GetFrontpic
+ ret
+
+.asm_4145b
+ ld a, $0
+ call GetSRAMBank
+ callba Function1de0d7
+ ld hl, VTiles2
+ ld de, $a000
+ ld c, $31
+ ld a, [hROMBank]
+ ld b, a
+ call Get2bpp
+ call CloseSRAM
+ ret
+; 41478
+
+
+Function41478: ; 41478 (10:5478)
+ call Function40bb1
+
+Function4147b: ; 4147b
+ ld a, [wd265]
+ dec a
+ and $f8
+ srl a
+ srl a
+ srl a
+ ld e, 0
+ ld d, a
+ ld a, [wd265]
+ dec a
+ and 7
+ swap a ; * $10
+ ld l, a
+ ld h, 0
+ add hl, de
+ ld de, Footprints
+ add hl, de
+
+ push hl
+ ld e, l
+ ld d, h
+ ld hl, $9620
+ lb bc, BANK(Footprints), 2
+ call Request1bpp
+ pop hl
+
+ ; Whoever was editing footprints forgot to fix their
+ ; tile editor. Now each bottom half is 8 tiles off.
+ ld de, $80
+ add hl, de
+
+ ld e, l
+ ld d, h
+ ld hl, $9640
+ lb bc, BANK(Footprints), 2
+ call Request1bpp
+
+ ret
+; 414b7
+
+
+Function414b7: ; 414b7
+ call DisableLCD
+ ld hl, VTiles2
+ ld bc, $0310
+ xor a
+ call ByteFill
+ call Function414fb
+ call Functione5f
+ ld hl, $9600
+ ld bc, $0200
+ call Function41504
+ call Function41a24
+ jr nz, .asm_414e0
+ callba Function1ddf1c
+ jr .asm_414e9
+
+.asm_414e0
+ ld hl, PokedexLZ
+ ld de, $9310
+ call Decompress
+
+.asm_414e9
+ ld hl, PokedexSlowpokeLZ
+ ld de, VTiles0
+ call Decompress
+ ld a, 6
+ call SkipMusic
+ call EnableLCD
+ ret
+
+Function414fb: ; 414fb
+ call Functione51
+ ld hl, VTiles1
+ ld bc, $0800
+
+Function41504: ; 41504
+ ld a, [hl]
+ xor $ff
+ ld [hli], a
+ dec bc
+ ld a, b
+ or c
+ jr nz, Function41504
+ ret
+; 4150e
+
+PokedexLZ: ; 4150e
+INCBIN "gfx/unknown/04150e.2bpp.lz"
+; 416b0
+
+PokedexSlowpokeLZ: ; 416b0
+INCBIN "gfx/pokedex/slowpoke.2bpp.lz"
+
+Function41a24: ; 41a24
+ ld a, [hCGB]
+ or a
+ ret nz
+ ld a, [hSGB]
+ dec a
+ ret
+; 41a2c
+
+Function41a2c: ; 41a2c
+ ld a, $0
+ call GetSRAMBank
+ ld hl, UnownFont
+ ld de, $a188
+ ld bc, $270
+ ld a, BANK(UnownFont)
+ call FarCopyBytes
+ ld hl, $a188
+ ld bc, $1b0
+ call Function41504
+ ld de, $a188
+ ld hl, $9400
+ lb bc, BANK(Function41a2c), $1b
+ call Request2bpp
+ call CloseSRAM
+ ret
+; 41a58
+
+
+Function41a58: ; 41a58 (10:5a58)
+ ld a, [UnownLetter]
+ push af
+ ld a, [wc7dd]
+ ld e, a
+ ld d, $0
+ ld hl, EndPokedexSeen ; wded9 (aliases: UnownDex)
+ add hl, de
+ ld a, [hl]
+ ld [UnownLetter], a
+ ld a, UNOWN
+ ld [CurPartySpecies], a
+ call GetBaseData
+ ld de, $9000
+ predef GetFrontpic
+ pop af
+ ld [UnownLetter], a
+ ret
+
diff --git a/engine/spawn_points.asm b/engine/spawn_points.asm
new file mode 100644
index 000000000..ce96b0ce5
--- /dev/null
+++ b/engine/spawn_points.asm
@@ -0,0 +1,106 @@
+
+SpawnPoints: ; 0x152ab
+
+ const_def
+
+spawn: MACRO
+; name, map, y, x
+\1\@ EQUS "SPAWN_\1"
+ const \1\@
+ map \2
+ db \3, \4
+ENDM
+
+ spawn HOME, KRISS_HOUSE_2F, 3, 3
+ spawn DEBUG, VIRIDIAN_POKECENTER_1F, 5, 3
+
+ spawn PALLET, PALLET_TOWN, 5, 6
+ spawn VIRIDIAN, VIRIDIAN_CITY, 23, 26
+ spawn PEWTER, PEWTER_CITY, 13, 26
+ spawn CERULEAN, CERULEAN_CITY, 19, 22
+ spawn ROCK_TUNNEL, ROUTE_10A, 11, 2
+ spawn VERMILION, VERMILION_CITY, 9, 6
+ spawn LAVENDER, LAVENDER_TOWN, 5, 6
+ spawn SAFFRON, SAFFRON_CITY, 9, 30
+ spawn CELADON, CELADON_CITY, 29, 10
+ spawn FUCHSIA, FUCHSIA_CITY, 19, 28
+ spawn CINNABAR, CINNABAR_ISLAND, 11, 12
+ spawn INDIGO, ROUTE_23, 9, 6
+
+ spawn NEW_BARK, NEW_BARK_TOWN, 13, 6
+ spawn CHERRYGROVE, CHERRYGROVE_CITY, 29, 4
+ spawn VIOLET, VIOLET_CITY, 31, 26
+ spawn UNION_CAVE, ROUTE_32, 11, 74
+ spawn AZALEA, AZALEA_TOWN, 15, 10
+ spawn CIANWOOD, CIANWOOD_CITY, 23, 44
+ spawn GOLDENROD, GOLDENROD_CITY, 15, 28
+ spawn OLIVINE, OLIVINE_CITY, 13, 22
+ spawn ECRUTEAK, ECRUTEAK_CITY, 23, 28
+ spawn MAHOGANY, MAHOGANY_TOWN, 15, 14
+ spawn LAKE, LAKE_OF_RAGE, 21, 29
+ spawn BLACKTHORN, BLACKTHORN_CITY, 21, 30
+ spawn MT_SILVER, SILVER_CAVE_OUTSIDE, 23, 20
+ spawn FAST_SHIP, FAST_SHIP_CABINS_SW_SSW_NW, 6, 2
+
+ db -1, -1, -1, -1
+
+ const NUM_SPAWNS
+
+
+LoadSpawnPoint: ; 1531f
+ push hl
+ push de
+ ld a, [wd001]
+ cp -1
+ jr z, .asm_15341
+ ld l, a
+ ld h, 0
+ add hl, hl
+ add hl, hl
+ ld de, SpawnPoints
+ add hl, de
+ ld a, [hli]
+ ld [MapGroup], a
+ ld a, [hli]
+ ld [MapNumber], a
+ ld a, [hli]
+ ld [XCoord], a
+ ld a, [hli]
+ ld [YCoord], a
+.asm_15341
+ pop de
+ pop hl
+ ret
+; 15344
+
+
+IsSpawnPoint: ; 15344
+ ld hl, SpawnPoints
+ ld c, 0
+.asm_15349
+ ld a, [hl]
+ cp -1
+ jr z, .asm_1535f
+ cp d
+ jr nz, .asm_15356
+ inc hl
+ ld a, [hld]
+ cp e
+ jr z, .asm_15361
+
+.asm_15356
+ push bc
+ ld bc, 4
+ add hl, bc
+ pop bc
+ inc c
+ jr .asm_15349
+
+.asm_1535f
+ and a
+ ret
+
+.asm_15361
+ scf
+ ret
+; 15363
diff --git a/engine/specials.asm b/engine/specials.asm
new file mode 100644
index 000000000..0c8158502
--- /dev/null
+++ b/engine/specials.asm
@@ -0,0 +1,642 @@
+
+Special:: ; c01b
+; Run script special de.
+ ld hl, SpecialsPointers
+ add hl, de
+ add hl, de
+ add hl, de
+ ld b, [hl]
+ inc hl
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld a, b
+ rst FarCall
+ ret
+; c029
+
+SpecialsPointers:: ; c029
+ add_special Function97c28
+ add_special Function29ce8
+ add_special Function29d11
+ add_special Function29d92
+ add_special Function29e66
+ add_special Function29e82
+ add_special Function29efa
+ add_special Function29eee
+ add_special Function29c92
+ add_special Function29cf1
+ add_special Function29cfa
+ add_special Function29bfb
+ add_special Function29c7b
+ add_special Function29ec4
+ add_special Function29ed9
+ add_special Function29eaf
+ add_special Function29f47
+ add_special Functionc2f6
+ add_special Functionc309
+ add_special Function1050b9
+ add_special Functionc34a
+ add_special Function4d9e5
+ add_special Function13a12
+ add_special Function13a31
+ add_special Function135db
+ add_special Functionfbb32
+ add_special Functionfbcd2
+ add_special Functionc658
+ add_special Function1559a
+ add_special Functionc2e7
+ add_special Function166d6
+ add_special Function1672a
+ add_special Function16936
+ add_special Function2c547
+ add_special Function16218
+ add_special Function8cc04
+ add_special SpecialNameRival
+ add_special Function90913
+ add_special Functionc2c0
+ add_special Functionc2cd
+ add_special Functionc355
+ add_special Functionc360
+ add_special Functionc373
+ add_special Functionc380
+ add_special Functionc38d
+ add_special Functionc3db
+ add_special Function8c084
+ add_special Function8c092
+ add_special Function8c0b6
+ add_special Function8c079
+ add_special Function8c0ab
+ add_special Functiond91
+ add_special WhiteBGMap
+ add_special UpdateTimePals
+ add_special ClearTileMap
+ add_special Function1ad2
+ add_special Functione4a
+ add_special Functionc230
+ add_special SpecialSeenMon
+ add_special WaitSFX
+ add_special PlayMapMusic
+ add_special RestartMapMusic
+ add_special Function12324
+ 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 Function139a8
+ add_special Functionc3fc
+ add_special Function26feb
+ add_special Function27043
+ add_special SpecialGiveShuckle
+ add_special SpecialReturnShuckle
+ add_special Function73f7
+ add_special SpecialCheckPokerus
+ add_special Function24b25
+ add_special Function24b4e
+ add_special Function24ae8
+ add_special Function4d87a
+ add_special Functionc434
+ add_special Functionc422
+ add_special Function4d9d3
+ add_special Function88018
+ add_special SpecialNameRater
+ add_special Functionc2da
+ add_special Function718d
+ add_special Function71ac
+ add_special Function2a4ab
+ add_special Function2a51f
+ add_special RandomPhoneMon
+ add_special Function14209
+ add_special Functionfb841
+ add_special SpecialSnorlaxAwake
+ add_special Function7413
+ add_special Function7418
+ add_special Function741d
+ add_special Functionc472
+ add_special ProfOaksPCBoot
+ add_special SpecialGameboyCheck
+ add_special SpecialTrainerHouse
+ add_special Function16dc7
+ add_special InitRoamMons
+ add_special Functionc48f
+ add_special Functionc49f
+ add_special Functionc4ac
+ add_special Function11ac3e
+ add_special Function11b444
+ add_special Function11b5e8
+ add_special Function11b7e5
+ add_special Function11b879
+ add_special Function11b920
+ add_special Function11b93b
+ add_special Function1700b0
+ add_special Function1700ba
+ add_special Function170114
+ add_special Function170215
+ add_special Function1704e1
+ add_special Function17021d
+ add_special Function170b44
+ add_special Function11ba38
+ add_special Function170bd3
+ add_special Function117656
+ add_special Reset
+ add_special Function1011f1
+ add_special Function101220
+ add_special Function101225
+ add_special Function101231
+ add_special Function4925b
+ add_special Function8adef
+ add_special Function11c1ab
+ add_special Function170687
+ add_special Function8ae68
+ add_special Function17d224
+ add_special Function17d2b6
+ add_special Function17d2ce
+ add_special Function17f53d
+ add_special Function103612
+ add_special SpecialHoOhChamber
+ add_special Function102142
+ add_special Function4989a
+ add_special Function49bf9
+ add_special SpecialPokeSeer
+ add_special SpecialBuenasPassword
+ add_special SpecialBuenaPrize
+ add_special SpecialDratini
+ add_special Function11485
+ add_special SpecialBeastsCheck
+ add_special SpecialMonCheck
+ add_special Functionc225
+ add_special Function170bd2
+ add_special Function10366e
+ add_special Function1037eb
+ add_special Function10383c
+ add_special Function1060a2
+ add_special Function14168
+ add_special Function1037c2
+ add_special Function10630f
+ add_special Function103780
+ add_special Function10387b
+ add_special Function4ae12
+ add_special Function1047eb
+ add_special Function4a927
+ add_special Function90a54
+ add_special Function90a88
+ add_special SpecialNone
+; c224
+
+SpecialNone: ; c224
+ ret
+; c225
+
+Functionc225: ; c225
+ ld a, [ScriptVar]
+ ld d, a
+ callba Function57e2
+ ret
+; c230
+
+Functionc230: ; c230
+ ld a, [ScriptVar]
+ dec a
+ call CheckCaughtMon
+ ret nz
+ ld a, [ScriptVar]
+ dec a
+ call SetSeenAndCaughtMon
+ call FadeToMenu
+ ld a, [ScriptVar]
+ ld [wd265], a
+ callba Functionfb877
+ call Function2b4d
+ ret
+; c252
+
+SpecialSeenMon: ; c252
+ ld a, [ScriptVar]
+ dec a
+ call SetSeenMon
+ ret
+; c25a
+
+Functionc25a: ; c25a
+ ld a, [ScriptVar]
+ ld b, a
+ callba Function4dbd2
+ jr z, Functionc298
+ jr Functionc292
+
+Functionc268: ; c268
+ ld a, [ScriptVar]
+ ld b, a
+ callba Function4dbd9
+ jr z, Functionc298
+ jr Functionc292
+
+Functionc276: ; c276
+ ld a, [ScriptVar]
+ ld b, a
+ callba Function4dbe0
+ jr z, Functionc298
+ jr Functionc292
+
+Functionc284: ; c284
+ ld a, [ScriptVar]
+ ld b, a
+ callba Function4dbe6
+ jr z, Functionc298
+ jr Functionc292
+
+Functionc292: ; c292
+ ld a, $1
+ ld [ScriptVar], a
+ ret
+
+Functionc298: ; c298
+ xor a
+ ld [ScriptVar], a
+ ret
+; c29d
+
+SpecialNameRival: ; 0xc29d
+ ld b, $2 ; rival
+ ld de, RivalName
+ callba Function116b7
+ ; default to "SILVER"
+ ld hl, RivalName
+ ld de, DefaultRivalName
+ call InitName
+ ret
+; 0xc2b2
+
+DefaultRivalName: ; 0xc2b2
+ db "SILVER@"
+
+SpecialNameRater: ; c2b9
+ callba NameRater
+ ret
+; c2c0
+
+Functionc2c0: ; c2c0
+ call FadeToMenu
+ callba Function9191c
+ call Function2b4d
+ ret
+; c2cd
+
+Functionc2cd: ; c2cd
+ call FadeToMenu
+ callba Function16be4
+ call Function2b4d
+ ret
+; c2da
+
+Functionc2da: ; c2da
+ call FadeToMenu
+ callba Function3f836
+ call Function2b4d
+ ret
+; c2e7
+
+Functionc2e7: ; c2e7
+ xor a
+ ld [ScriptVar], a
+ callba Function156d9
+ ld a, c
+ ld [ScriptVar], a
+ ret
+; c2f6
+
+Functionc2f6: ; c2f6
+ ld a, $0
+ call GetSRAMBank
+ ld a, [$abe2]
+ and a
+ jr z, .asm_c302
+ inc a
+
+.asm_c302
+ ld [ScriptVar], a
+ call CloseSRAM
+ ret
+; c309
+
+Functionc309: ; c309
+ ld a, $0
+ call GetSRAMBank
+ ld a, [$abe2]
+ ld [CurItem], a
+ ld a, $1
+ ld [wd10c], a
+ ld hl, NumItems
+ call ReceiveItem
+ jr nc, .asm_c33d
+ xor a
+ ld [$abe2], a
+ call CloseSRAM
+ ld a, [CurItem]
+ ld [wd265], a
+ call GetItemName
+ ld hl, UnknownText_0xc345
+ call PrintText
+ ld a, $1
+ ld [ScriptVar], a
+ ret
+
+.asm_c33d
+ call CloseSRAM
+ xor a
+ ld [ScriptVar], a
+ ret
+; c345
+
+UnknownText_0xc345: ; 0xc345
+ ; received item
+ text_jump UnknownText_0x1bd3be
+ db "@"
+; 0xc34a
+
+Functionc34a: ; c34a
+ callba Function1369d
+ ld a, b
+ ld [ScriptVar], a
+ ret
+; c355
+
+Functionc355: ; c355
+ ld a, [ScriptVar]
+ ld e, a
+ callba Function91a53
+ ret
+; c360
+
+Functionc360: ; c360
+ call FadeToMenu
+ callba Functione1190
+ ld a, [wd0ec]
+ ld [ScriptVar], a
+ call Function2b4d
+ ret
+; c373
+
+Functionc373: ; c373
+ call Functionc3ae
+ ret c
+ ld a, BANK(Function926c7)
+ ld hl, Function926c7
+ call Functionc39a
+ ret
+; c380
+
+Functionc380: ; c380
+ call Functionc3ae
+ ret c
+ ld a, BANK(Functione00ee)
+ ld hl, Functione00ee
+ call Functionc39a
+ ret
+; c38d
+
+Functionc38d: ; c38d
+ call Functionc3ae
+ ret c
+ ld a, BANK(Functione1e5b)
+ ld hl, Functione1e5b
+ call Functionc39a
+ ret
+; c39a
+
+Functionc39a: ; c39a
+ call Function31cf
+ call FadeToMenu
+ ld hl, wd0e8
+ ld a, [hli]
+ push af
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ pop af
+ rst FarCall
+ call Function2b4d
+ ret
+; c3ae
+
+Functionc3ae: ; c3ae
+ ld hl, Coins
+ ld a, [hli]
+ or [hl]
+ jr z, .asm_c3c4
+ ld a, COIN_CASE
+ ld [CurItem], a
+ ld hl, NumItems
+ call CheckItem
+ jr nc, .asm_c3c9
+ and a
+ ret
+
+.asm_c3c4
+ ld hl, UnknownText_0xc3d1
+ jr .asm_c3cc
+
+.asm_c3c9
+ ld hl, UnknownText_0xc3d6
+
+.asm_c3cc
+ call PrintText
+ scf
+ ret
+; c3d1
+
+UnknownText_0xc3d1: ; 0xc3d1
+ ; You have no coins.
+ text_jump UnknownText_0x1bd3d7
+ db "@"
+; 0xc3d6
+
+UnknownText_0xc3d6: ; 0xc3d6
+ ; You don't have a COIN CASE.
+ text_jump UnknownText_0x1bd3eb
+ db "@"
+; 0xc3db
+
+Functionc3db: ; c3db
+ call WhiteBGMap
+ call Function2879
+ ret
+; c3e2
+
+ScriptReturnCarry: ; c3e2
+ jr c, .carry
+ xor a
+ ld [ScriptVar], a
+ ret
+.carry
+ ld a, 1
+ ld [ScriptVar], a
+ ret
+; c3ef
+
+Functionc3ef: ; c3ef
+ callba Function1150c
+ ld a, [wdc3a]
+ ld [ScriptVar], a
+ ret
+; c3fc
+
+Functionc3fc: ; c3fc
+ ld a, [ScriptVar]
+ ld [wdfce], a
+ ret
+; c403
+
+
+Functionc403:: ; c403
+ ld a, c
+ and a
+ jr nz, .asm_c410
+ ld a, d
+ ld [wdfcc], a
+ ld a, e
+ ld [wdfcd], a
+ ret
+
+.asm_c410
+ ld a, d
+ ld [wdc5a], a
+ ld a, e
+ ld [wdc5b], a
+ ret
+; c419
+
+
+SpecialCheckPokerus: ; c419
+; Check if a monster in your party has Pokerus
+ callba CheckPokerus
+ jp ScriptReturnCarry
+; c422
+
+Functionc422: ; c422
+ callba Function1152b
+ ld hl, wdc9d
+ res 0, [hl]
+ callba Function5d33
+ ret
+; c434
+
+Functionc434: ; c434
+ callba Function11542
+ jp ScriptReturnCarry
+; c43d
+
+SpecialSnorlaxAwake: ; 0xc43d
+; Check if the Poké Flute channel is playing, and if the player is standing
+; next to Snorlax.
+
+; outputs:
+; ScriptVar is 1 if the conditions are met, otherwise 0.
+
+; check background music
+ ld a, [wMapMusic]
+ cp MUSIC_POKE_FLUTE_CHANNEL
+ jr nz, .nope
+
+ ld a, [XCoord]
+ ld b, a
+ ld a, [YCoord]
+ ld c, a
+
+ ld hl, .ProximityCoords
+.loop
+ ld a, [hli]
+ cp $ff
+ jr z, .nope
+ cp b
+ jr nz, .nextcoord
+ ld a, [hli]
+ cp c
+ jr nz, .loop
+
+ ld a, $1
+ jr .done
+
+.nextcoord
+ inc hl
+ jr .loop
+
+.nope
+ xor a
+.done
+ ld [ScriptVar], a
+ ret
+
+.ProximityCoords
+ ; x, y
+ db 33, 8 ; left
+ db 34, 10 ; below
+ db 35, 10 ; below
+ db 36, 8 ; right
+ db 36, 9 ; right
+ db $ff
+
+
+Functionc472: ; c472
+ ld a, [CurPartySpecies]
+ jp PlayCry
+; c478
+
+
+SpecialGameboyCheck: ; c478
+ ld a, [hCGB]
+ and a
+ jr nz, .cgb
+
+ ld a, [hSGB]
+ and a
+ jr nz, .sgb
+
+.gb
+ xor a
+ jr .done
+.sgb
+ ld a, 1
+ jr .done
+.cgb
+ ld a, 2
+.done
+ ld [ScriptVar], a
+ ret
+
+
+Functionc48f: ; c48f
+ ld a, MUSIC_NONE % $100
+ ld [MusicFadeIDLo], a
+ ld a, MUSIC_NONE / $100
+ ld [MusicFadeIDHi], a
+ ld a, $2
+ ld [MusicFade], a
+ ret
+; c49f
+
+Functionc49f: ; c49f
+ call FadeToMenu
+ callba Function1dd702
+ call Function2b4d
+ ret
+; c4ac
+
+Functionc4ac: ; c4ac
+ call FadeToMenu
+ callba Function84688
+ call Function2b4d
+ ret
+; c4b9
+
+SpecialTrainerHouse: ; 0xc4b9
+ ld a, 0
+ call GetSRAMBank
+ ld a, [$abfd] ; XXX what is this memory location?
+ ld [ScriptVar], a
+ jp CloseSRAM
+
diff --git a/engine/std_scripts.asm b/engine/std_scripts.asm
index b6fd9f686..98602bd8a 100644
--- a/engine/std_scripts.asm
+++ b/engine/std_scripts.asm
@@ -122,16 +122,16 @@ PokeCenterNurseScript: ; bc09c
; Go ahead and heal
farwritetext UnknownText_0x1b01bd
pause 20
- special $009d
+ special Function1060a2
; Turn to the machine
spriteface $fe, $2
pause 10
- special $001b
+ special Functionc658
playmusic MUSIC_NONE
writebyte $0
- special $003e
+ special Function12324
pause 30
- special $003d
+ special RestartMapMusic
spriteface $fe, $0
pause 10
; Has Elm already phoned you about Pokerus?
@@ -141,7 +141,7 @@ PokeCenterNurseScript: ; bc09c
checkflag $000d
iftrue .done
; Check for Pokerus
- special $004e ; SPECIAL_CHECKPOKERUS
+ special SpecialCheckPokerus ; SPECIAL_CHECKPOKERUS
iftrue .pokerus
.done
; Thank you for waiting. ...
@@ -212,7 +212,7 @@ UnknownScript_0xbc17a: ; 0xbc17a
loadfont
farwritetext UnknownText_0x1b048d
closetext
- special $0026
+ special Functionc2c0
loadmovesprites
end
; 0xbc185
@@ -236,7 +236,7 @@ UnknownScript_0xbc191: ; 0xbc191
UnknownScript_0xbc195: ; 0xbc195
loadfont
writebyte $0
- special $0028
+ special Functionc355
loadmovesprites
end
; 0xbc19d
@@ -244,7 +244,7 @@ UnknownScript_0xbc195: ; 0xbc195
UnknownScript_0xbc19d: ; 0xbc19d
loadfont
writebyte $4
- special $0028
+ special Functionc355
loadmovesprites
end
; 0xbc1a5
@@ -255,7 +255,7 @@ UnknownScript_0xbc1a5: ; 0xbc1a5
UnknownScript_0xbc1a9: ; 0xbc1a9
loadfont
- special $001c
+ special Function1559a
loadmovesprites
end
; 0xbc1af
@@ -371,7 +371,7 @@ UnknownScript_0xbc242: ; 0xbc242
; 0xbc25c
UnknownScript_0xbc25c: ; 0xbc25c
- special $0034
+ special WhiteBGMap
scall UnknownScript_0xbc380
setevent $0747
clearevent $0748
@@ -389,7 +389,7 @@ UnknownScript_0xbc274: ; bc274
loadfont
farwritetext UnknownText_0x1b05bf
closetext
- special $0014
+ special Functionc34a
RAM2MEM $0
if_equal $1, UnknownScript_0xbc31e
if_equal $2, UnknownScript_0xbc332
@@ -415,9 +415,9 @@ UnknownScript_0xbc2b6:
iffalse UnknownScript_0xbc2c4
farwritetext UnknownText_0x1b06d9
closetext
- special $0017
+ special Function13a31
UnknownScript_0xbc2c4:
- special $0015
+ special Function4d9e5
if_equal $0, UnknownScript_0xbc2d4
if_equal $2, UnknownScript_0xbc2d4
farwritetext UnknownText_0x1b070d
@@ -447,7 +447,7 @@ UnknownScript_0xbc2d4:
setevent $0728
setevent $0729
setflag $0051
- special $003c
+ special PlayMapMusic
end
; 0xbc31e
@@ -692,7 +692,7 @@ UnknownScript_0xbc3db: ; 0xbc3db
; 0xbc574
UnknownScript_0xbc574: ; 0xbc574
- special $005d
+ special RandomPhoneMon
checkcode $17
if_equal $5, UnknownScript_0xbc5c9
if_equal $7, UnknownScript_0xbc5ce
@@ -816,7 +816,7 @@ UnknownScript_0xbc628: ; 0xbc628
; 0xbc62d
UnknownScript_0xbc62d: ; 0xbc62d
- special $005d
+ special RandomPhoneMon
checkcode $17
if_equal $5, UnknownScript_0xbc682
if_equal $7, UnknownScript_0xbc687
@@ -2257,7 +2257,7 @@ UnknownScript_0xbcde0: ; 0xbcde0
farwritetext UnknownText_0x1b07e3
UnknownScript_0xbcde4: ; 0xbcde4
- special $0050
+ special Function24b4e
loadmenudata MenuDataHeader_0xbce54
interpretmenu2
writebackup
@@ -2336,7 +2336,7 @@ MenuData2_0xbce5c: ; 0xbce5c
UnknownScript_0xbce7f: ; 0xbce7f
faceplayer
loadfont
- special $0059
+ special Function718d
if_less_than 50, UnknownScript_0xbce9a
if_less_than 150, UnknownScript_0xbce93
farwritetext UnknownText_0x1b092a