ref: 9aef93701a6cd301a3343c58efac31528958be22
parent: a31b4586df7a659f15f5c864c469d309bf60f719
author: yenatch <yenatch@gmail.com>
date: Wed Feb 11 09:13:22 EST 2015
Split out map object code.
--- /dev/null
+++ b/engine/map_objects.asm
@@ -1,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
+
--- a/main.asm
+++ b/main.asm
@@ -56,3688 +56,7 @@
; 4049
-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
+INCLUDE "engine/map_objects.asm"
Function5ae8: ; 5ae8