diff options
Diffstat (limited to 'engine')
-rw-r--r-- | engine/diploma.asm | 94 | ||||
-rw-r--r-- | engine/map_objects.asm | 3683 | ||||
-rw-r--r-- | engine/map_setup.asm | 489 | ||||
-rw-r--r-- | engine/map_triggers.asm | 91 | ||||
-rw-r--r-- | engine/more_phone_scripts.asm | 10 | ||||
-rw-r--r-- | engine/pack.asm | 1692 | ||||
-rw-r--r-- | engine/phone_scripts.asm | 10 | ||||
-rw-r--r-- | engine/pokedex.asm | 2585 | ||||
-rw-r--r-- | engine/spawn_points.asm | 106 | ||||
-rw-r--r-- | engine/specials.asm | 642 | ||||
-rw-r--r-- | engine/std_scripts.asm | 36 |
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 |