summaryrefslogtreecommitdiff
path: root/engine/map_objects.asm
diff options
context:
space:
mode:
Diffstat (limited to 'engine/map_objects.asm')
-rw-r--r--engine/map_objects.asm3683
1 files changed, 3683 insertions, 0 deletions
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
+