diff options
Diffstat (limited to 'engine/map_objects.asm')
-rw-r--r-- | engine/map_objects.asm | 3683 |
1 files changed, 3683 insertions, 0 deletions
diff --git a/engine/map_objects.asm b/engine/map_objects.asm new file mode 100644 index 000000000..983c1c700 --- /dev/null +++ b/engine/map_objects.asm @@ -0,0 +1,3683 @@ + +INCLUDE "engine/facings.asm" + +Data4273:: ; 4273 + db $00, $00, $01, $02, $00, $00 + db $06, $00, $01, $0c, $00, $00 + db $03, $00, $01, $00, $00, $00 + db $04, $00, $01, $00, $00, $00 + db $01, $00, $01, $00, $00, $00 + db $02, $00, $01, $00, $00, $00 + db $06, $00, $01, $00, $00, $00 + db $06, $01, $01, $00, $00, $00 + db $06, $02, $01, $00, $00, $00 + db $06, $03, $01, $00, $00, $00 + db $05, $00, $01, $00, $00, $00 + db $07, $00, $01, $02, $00, $00 + db $08, $00, $01, $00, $00, $00 + db $09, $00, $01, $00, $00, $00 + db $0a, $00, $01, $00, $00, $00 + db $0b, $00, $01, $00, $00, $00 + db $0c, $00, $01, $00, $00, $00 + db $0d, $00, $01, $00, $00, $00 + db $0e, $00, $01, $00, $00, $00 + db $0f, $00, $01, $02, $00, $00 + db $10, $00, $01, $02, $00, $00 + db $15, $00, $09, $2e, $01, $c0 + db $16, $00, $0a, $2e, $00, $00 + db $06, $00, $01, $0c, $00, $00 + db $06, $00, $01, $2e, $10, $00 + db $11, $00, $01, $2e, $00, $40 + db $12, $00, $01, $02, $00, $00 + db $13, $00, $00, $8e, $01, $00 + db $14, $00, $08, $8e, $02, $00 + db $17, $00, $00, $82, $00, $00 + db $19, $02, $01, $00, $00, $00 + db $18, $03, $01, $00, $00, $00 + db $11, $00, $0c, $2e, $01, $c0 + db $11, $00, $0d, $2e, $01, $c0 + db $1a, $00, $0e, $8e, $01, $00 + db $1b, $00, $0f, $8e, $02, $00 + db $03, $00, $01, $00, $00, $20 + db $00, $00, $01, $00, $00, $00 +; 4357 + + +Function4357:: ; 4357 + push bc + ld hl, OBJECT_01 + add hl, bc + ld a, [hl] + push af + ld h, b + ld l, c + ld bc, ObjectStruct2 - ObjectStruct1 + xor a + call ByteFill + pop af + cp $ff + jr z, .asm_4379 + bit 7, a + jr nz, .asm_4379 + call GetMapObject + ld hl, OBJECT_00 + add hl, bc + ld [hl], $ff + +.asm_4379 + pop bc + ret +; 437b + +Function437b: ; 437b + call Function4386 + ret c + call Function43f3 + call Function4427 + ret +; 4386 + +Function4386: ; 4386 + ld hl, OBJECT_FLAGS + add hl, bc + res 6, [hl] + ld a, [XCoord] + ld e, a + ld hl, OBJECT_MAP_X + add hl, bc + ld a, [hl] + add $1 + sub e + jr c, .asm_43b2 + cp $c + jr nc, .asm_43b2 + ld a, [YCoord] + ld e, a + ld hl, OBJECT_MAP_Y + add hl, bc + ld a, [hl] + add $1 + sub e + jr c, .asm_43b2 + cp $b + jr nc, .asm_43b2 + jr .asm_43dc + +.asm_43b2 + ld hl, OBJECT_FLAGS + add hl, bc + set 6, [hl] + ld a, [XCoord] + ld e, a + ld hl, OBJECT_20 + add hl, bc + ld a, [hl] + add $1 + sub e + jr c, .asm_43de + cp $c + jr nc, .asm_43de + ld a, [YCoord] + ld e, a + ld hl, OBJECT_21 + add hl, bc + ld a, [hl] + add $1 + sub e + jr c, .asm_43de + cp $b + jr nc, .asm_43de + +.asm_43dc + and a + ret + +.asm_43de + ld hl, OBJECT_04 + add hl, bc + bit 1, [hl] + jr nz, .asm_43eb + call Function4357 + scf + ret + +.asm_43eb + ld hl, OBJECT_FLAGS + add hl, bc + set 6, [hl] + and a + ret +; 43f3 + +Function43f3: ; 43f3 + ld hl, OBJECT_09 + add hl, bc + ld a, [hl] + and a + jr z, .asm_4409 + ld hl, OBJECT_FLAGS + add hl, bc + bit 5, [hl] + jr nz, .asm_4426 + cp $1 + jr z, .asm_4414 + jr .asm_4421 + +.asm_4409 + call Function47bc + ld hl, OBJECT_FLAGS + add hl, bc + bit 5, [hl] + jr nz, .asm_4426 + +.asm_4414 + call Function47dd + ld hl, OBJECT_09 + add hl, bc + ld a, [hl] + and a + ret z + cp $1 + ret z + +.asm_4421 + ld hl, Pointers4b45 + rst JumpTable + ret + +.asm_4426 + ret +; 4427 + +Function4427: ; 4427 + ld hl, OBJECT_04 + add hl, bc + bit 0, [hl] + jr nz, Function44a3 + + ld hl, OBJECT_FLAGS + add hl, bc + bit 6, [hl] + jr nz, Function44a3 + + bit 5, [hl] + jr nz, Function4448 + + ld de, Pointers445f + jr Function444d +; 4440 + +Function4440: ; 4440 + ld hl, OBJECT_04 + add hl, bc + bit 0, [hl] + jr nz, Function44a3 + ; fallthrough +; 4448 + +Function4448: ; 4448 + ld de, Pointers445f + 2 + jr Function444d +; 444d + +Function444d: ; 444d + ld hl, OBJECT_11 + add hl, bc + ld a, [hl] + ld l, a + ld h, 0 + add hl, hl + add hl, hl + add hl, de + ld a, [hli] + ld h, [hl] + ld l, a + call _hl_ + ret +; 445f + +Pointers445f: ; 445f + dw Function44a3 + dw Function44a3 + dw Function44b5 + dw Function44aa + dw Function44c1 + dw Function44aa + dw Function4508 + dw Function44aa + dw Function4529 + dw Function44aa + dw Function4539 + dw Function44a3 + dw Function456e + dw Function456e + dw Function457b + dw Function44a3 + dw Function4582 + dw Function4582 + dw Function4589 + dw Function4589 + dw Function4590 + dw Function45a4 + dw Function45ab + dw Function44aa + dw Function45be + dw Function45be + dw Function45c5 + dw Function45c5 + dw Function45da + dw Function44a3 + dw Function45ed + dw Function44a3 + dw Function44e4 + dw Function44aa +; 44a3 + +Function44a3: ; 44a3 + ld hl, OBJECT_FACING + add hl, bc + ld [hl], $ff + ret +; 44aa + +Function44aa: ; 44aa + call GetSpriteDirection + or $0 + ld hl, OBJECT_FACING + add hl, bc + ld [hl], a + ret +; 44b5 + +Function44b5: ; 44b5 + ld hl, OBJECT_FACING + add hl, bc + ld a, [hl] + and $1 + jr nz, Function44c1 + jp Function44aa +; 44c1 + +Function44c1: ; 44c1 + ld hl, OBJECT_04 + add hl, bc + bit 3, [hl] + jp nz, Function44aa + ld hl, OBJECT_12 + add hl, bc + ld a, [hl] + inc a + and $f + ld [hl], a + rrca + rrca + and $3 + ld d, a + call GetSpriteDirection + or $0 + or d + ld hl, OBJECT_FACING + add hl, bc + ld [hl], a + ret +; 44e4 + +Function44e4: ; 44e4 + ld hl, OBJECT_04 + add hl, bc + bit 3, [hl] + jp nz, Function44aa + ld hl, OBJECT_12 + add hl, bc + ld a, [hl] + add $2 + and $f + ld [hl], a + rrca + rrca + and $3 + ld d, a + call GetSpriteDirection + or $0 + or d + ld hl, OBJECT_FACING + add hl, bc + ld [hl], a + ret +; 4508 + +Function4508: ; 4508 + ld hl, OBJECT_04 + add hl, bc + bit 3, [hl] + jp nz, Function44aa + ld hl, OBJECT_12 + add hl, bc + inc [hl] + ld a, [hl] + rrca + rrca + rrca + and $3 + ld d, a + call GetSpriteDirection + or $0 + or d + ld hl, OBJECT_FACING + add hl, bc + ld [hl], a + ret +; 4529 + +Function4529: ; 4529 + call Function453f + ld hl, OBJECT_08 + add hl, bc + ld a, [hl] + or $0 + ld hl, OBJECT_FACING + add hl, bc + ld [hl], a + ret +; 4539 + +Function4539: ; 4539 + call Function453f + jp Function44a3 +; 453f + +Function453f: ; 453f + ld hl, OBJECT_12 + add hl, bc + ld a, [hl] + and $f0 + ld e, a + ld a, [hl] + inc a + and $f + ld d, a + cp $4 + jr c, .asm_4558 + ld d, 0 + ld a, e + add $10 + and $30 + ld e, a + +.asm_4558 + ld a, d + or e + ld [hl], a + swap e + ld d, 0 + ld hl, .Directions + add hl, de + ld a, [hl] + ld hl, OBJECT_08 + add hl, bc + ld [hl], a + ret +; 456a + +.Directions ; 456a + db $00, $0c, $04, $08 +; 456e + +Function456e: ; 456e + call GetSpriteDirection + rrca + rrca + add $10 + ld hl, OBJECT_FACING + add hl, bc + ld [hl], a + ret +; 457b + +Function457b: ; 457b + ld hl, OBJECT_FACING + add hl, bc + ld [hl], $15 + ret +; 4582 + +Function4582: ; 4582 + ld hl, OBJECT_FACING + add hl, bc + ld [hl], $14 + ret +; 4589 + +Function4589: ; 4589 + ld hl, OBJECT_FACING + add hl, bc + ld [hl], $17 + ret +; 4590 + +Function4590: ; 4590 + ld hl, OBJECT_12 + add hl, bc + ld a, [hl] + inc a + and $f + ld [hl], a + and $8 + jr z, Function45a4 + ld hl, OBJECT_FACING + add hl, bc + ld [hl], $4 + ret +; 45a4 + +Function45a4: ; 45a4 + ld hl, OBJECT_FACING + add hl, bc + ld [hl], $0 + ret +; 45ab + +Function45ab: ; 45ab + ld hl, OBJECT_12 + add hl, bc + ld a, [hl] + inc a + ld [hl], a + and $c + rrca + rrca + add $18 + ld hl, OBJECT_FACING + add hl, bc + ld [hl], a + ret +; 45be + +Function45be: ; 45be + ld hl, OBJECT_FACING + add hl, bc + ld [hl], $16 + ret +; 45c5 + +Function45c5: ; 45c5 + ld a, [VariableSprites + 3] + ld d, $17 + cp $33 + jr z, .asm_45d4 + cp $47 + jr z, .asm_45d4 + ld d, $16 + +.asm_45d4 + ld hl, OBJECT_FACING + add hl, bc + ld [hl], d + ret +; 45da + +Function45da: ; 45da + ld hl, OBJECT_12 + add hl, bc + inc [hl] + ld a, [hl] + + ld hl, OBJECT_FACING + add hl, bc + and 2 + ld a, $1c + jr z, .asm_45eb + inc a +.asm_45eb + ld [hl], a + ret +; 45ed + +Function45ed: ; 45ed + ld hl, OBJECT_12 + add hl, bc + inc [hl] + ld a, [hl] + ld hl, OBJECT_FACING + add hl, bc + and 4 + ld a, $1e + jr z, .asm_45fe + inc a + +.asm_45fe + ld [hl], a + ret +; 4600 + +Function4600: ; 4600 + + ld hl, OBJECT_MAP_X + add hl, bc + ld a, [hl] + ld hl, OBJECT_NEXT_MAP_X + add hl, bc + ld [hl], a + + ld hl, OBJECT_MAP_Y + add hl, bc + ld a, [hl] + ld hl, OBJECT_NEXT_MAP_Y + add hl, bc + ld [hl], a + + ld hl, OBJECT_STANDING_TILE + add hl, bc + ld a, [hl] + ld hl, OBJECT_NEXT_TILE + add hl, bc + ld [hl], a + + call Function4661 + ld hl, OBJECT_STANDING_TILE + add hl, bc + ld a, [hl] + + call Function4679 + ret +; 462a + +Function462a: ; 462a + + ld hl, OBJECT_NEXT_MAP_X + add hl, bc + ld a, [hl] + ld hl, OBJECT_MAP_X + add hl, bc + ld [hl], a + + ld hl, OBJECT_NEXT_MAP_Y + add hl, bc + ld a, [hl] + ld hl, OBJECT_MAP_Y + add hl, bc + ld [hl], a + + ret +; 463f + +Function463f: ; 463f + ld hl, OBJECT_FLAGS + add hl, bc + bit 3, [hl] + jr z, .asm_464f + ld hl, OBJECT_STANDING_TILE + add hl, bc + ld a, [hl] + call Function4661 + +.asm_464f + ld hl, OBJECT_STANDING_TILE + add hl, bc + ld a, [hl] + call Function4679 + ret c + ld hl, OBJECT_NEXT_TILE + add hl, bc + ld a, [hl] + call Function4679 + ret +; 4661 + +Function4661: ; 4661 + call Function188e + jr z, .asm_466b + call Function1875 + jr c, .asm_4672 + +.asm_466b + ld hl, OBJECT_FLAGS + add hl, bc + set 3, [hl] + ret + +.asm_4672 + ld hl, OBJECT_FLAGS + add hl, bc + res 3, [hl] + ret +; 4679 + +Function4679: ; 4679 + and a + ret +; 467b + +Function467b: ; 467b + xor a + ld hl, OBJECT_12 + add hl, bc + ld [hl], a + ld hl, OBJECT_27 + add hl, bc + ld [hli], a + ld [hli], a + ld [hli], a + ld [hl], a + ld hl, OBJECT_07 + add hl, bc + ld [hl], $ff + ret +; 4690 + +Function4690: ; 4690 + ld hl, OBJECT_07 + add hl, bc + ld [hl], a + ld hl, OBJECT_04 + add hl, bc + bit 2, [hl] + jr nz, .asm_46a6 + + add a + add a + and $c + ld hl, OBJECT_08 + add hl, bc + ld [hl], a + +.asm_46a6 + ; fallthrough +; 46a6 + +Function46a6: ; 46a6 + + call GetStepVector + + ld hl, OBJECT_STEP_DURATION + add hl, bc + ld [hl], a + + ld a, d + call Function4730 + ld hl, OBJECT_NEXT_MAP_X + add hl, bc + add [hl] + ld hl, OBJECT_MAP_X + add hl, bc + ld [hl], a + ld d, a + + ld a, e + call Function4730 + ld hl, OBJECT_NEXT_MAP_Y + add hl, bc + add [hl] + ld hl, OBJECT_MAP_Y + add hl, bc + ld [hl], a + ld e, a + + push bc + call Function2a3c + pop bc + + ld hl, OBJECT_STANDING_TILE + add hl, bc + ld [hl], a + + ret +; 46d7 + +Function46d7: ; 46d7 + + call GetStepVector + + ld hl, OBJECT_SPRITE_X + add hl, bc + ld a, [hl] + add d + ld [hl], a + + ld hl, OBJECT_SPRITE_Y + add hl, bc + ld a, [hl] + add e + ld [hl], a + + ret +; 46e9 + +GetStepVector: ; 46e9 +; Return (x, y, duration, speed) in (d, e, a, h). + ld hl, OBJECT_07 + add hl, bc + ld a, [hl] + and $f + add a + add a + ld l, a + ld h, 0 + ld de, StepVectors + add hl, de + ld d, [hl] + inc hl + ld e, [hl] + inc hl + ld a, [hli] + ld h, [hl] + ret +; 4700 + +StepVectors: ; 4700 +; x, y, duration, speed + ; slow + db 0, 1, 16, 1 + db 0, -1, 16, 1 + db -1, 0, 16, 1 + db 1, 0, 16, 1 + ; normal + db 0, 2, 8, 2 + db 0, -2, 8, 2 + db -2, 0, 8, 2 + db 2, 0, 8, 2 + ; fast + db 0, 4, 4, 4 + db 0, -4, 4, 4 + db -4, 0, 4, 4 + db 4, 0, 4, 4 +; 4730 + +Function4730: ; 4730 + add a + ret z + ld a, 1 + ret nc + ld a, -1 + ret +; 4738 + +Function4738: ; 4738 + ld hl, OBJECT_07 + add hl, bc + ld a, [hl] + and $3 + ld [wd151], a + call Function46d7 + ld a, [wd14e] + add d + ld [wd14e], a + ld a, [wd14f] + add e + ld [wd14f], a + ld hl, wd150 + set 5, [hl] + ret +; 4759 + +Function4759: ; 4759 + push bc + ld e, a + ld d, 0 + ld hl, OBJECT_01 + add hl, bc + ld a, [hl] + call GetMapObject + add hl, de + ld a, [hl] + pop bc + ret +; 4769 + +Function4769: ; 4769 + ld hl, OBJECT_01 + add hl, bc + ld a, [hl] + cp $ff + jr z, .asm_477d + push bc + call GetMapObject + ld hl, $0004 + add hl, bc + ld a, [hl] + pop bc + ret + +.asm_477d + ld a, $6 + ret +; 4780 + +Function4780: ; 4780 + ld hl, OBJECT_27 + add hl, bc + ld [hl], $0 + ret +; 4787 + +Function4787: ; 4787 + ld hl, OBJECT_27 + add hl, bc + inc [hl] + ret +; 478d + +Function478d: ; 478d + ld hl, OBJECT_27 + add hl, bc + dec [hl] + ret +; 4793 + +Function4793: ; 4793 + ld hl, OBJECT_27 + add hl, bc + ld a, [hl] + pop hl + rst JumpTable + ret +; 479b + +Function479b: ; 479b + ld hl, OBJECT_28 + add hl, bc + ld [hl], $0 + ret +; 47a2 + +Function47a2: ; 47a2 + ld hl, OBJECT_28 + add hl, bc + inc [hl] + ret +; 47a8 + +Function47a8: ; 47a8 + ld hl, OBJECT_28 + add hl, bc + ld a, [hl] + pop hl + rst JumpTable + ret +; 47b0 + +Function47b0: ; 47b0 + ld hl, OBJECT_28 + add hl, bc + ld a, [hl] + ret +; 47b6 + +Function47b6: ; 47b6 + ld hl, OBJECT_28 + add hl, bc + ld [hl], a + ret +; 47bc + +Function47bc: ; 47bc + ld hl, OBJECT_MAP_X + add hl, bc + ld d, [hl] + ld hl, OBJECT_MAP_Y + add hl, bc + ld e, [hl] + push bc + call Function2a3c + pop bc + ld hl, OBJECT_STANDING_TILE + add hl, bc + ld [hl], a + call Function4600 + call Function467b + ld hl, OBJECT_09 + add hl, bc + ld [hl], $1 + ret +; 47dd + +Function47dd: ; 47dd + call Function479b + call Function1a2f + ld a, [hl] + ld hl, .Pointers + rst JumpTable + ret +; 47e9 + +.Pointers ; 47e9 + dw Function4821 + dw Function4822 + dw Function482c + dw Function4838 + dw Function4842 + dw Function4851 + dw Function4869 + dw Function487c + dw Function4882 + dw Function4888 + dw Function488e + dw Function4891 + dw Function4894 + dw Function4897 + dw Function489d + dw Function48a0 + dw Function48a6 + dw Function48ac + dw Function48ff + dw Function49e5 + dw Function4a21 + dw Function4958 + dw Function496e + dw Function4abc + dw Function498d + dw Function4984 + dw Function4a46 + dw Function4a89 +; 4821 + +Function4821: ; 4821 + ret +; 4822 + +Function4822: ; 4822 + call Random + ld a, [hRandomAdd] + and 1 + jp Function4af0 +; 482c + +Function482c: ; 482c + call Random + ld a, [hRandomAdd] + and 1 + or 2 + jp Function4af0 +; 4838 + +Function4838: ; 4838 + call Random + ld a, [hRandomAdd] + and 3 + jp Function4af0 +; 4842 + +Function4842: ; 4842 + call Random + ld a, [hRandomAdd] + and $c + ld hl, OBJECT_08 + add hl, bc + ld [hl], a + jp Function4b1d +; 4851 + +Function4851: ; 4851 + ld hl, OBJECT_08 + add hl, bc + ld a, [hl] + and $c + ld d, a + call Random + ld a, [hRandomAdd] + and $c + cp d + jr nz, .asm_4865 + xor $c + +.asm_4865 + ld [hl], a + jp Function4b26 +; 4869 + +Function4869: ; 4869 + call Function462a + call Function467b + ld hl, OBJECT_11 + add hl, bc + ld [hl], $1 + ld hl, OBJECT_09 + add hl, bc + ld [hl], $5 + ret +; 487c + +Function487c: ; 487c + ld hl, Function5000 + jp Function5041 +; 4882 + +Function4882: ; 4882 + ld hl, Function5015 + jp Function5041 +; 4888 + +Function4888: ; 4888 + ld hl, Function5026 + jp Function5041 +; 488e + +Function488e: ; 488e + jp Function5037 +; 4891 + +Function4891: ; 4891 + jp Function5037 +; 4894 + +Function4894: ; 4894 + jp Function5037 +; 4897 + +Function4897: ; 4897 + ld hl, Function5000 + jp Function5041 +; 489d + +Function489d: ; 489d + jp Function5037 +; 48a0 + +Function48a0: ; 48a0 + ld hl, Function54e6 + jp Function5041 +; 48a6 + +Function48a6: ; 48a6 + ld hl, Function500e + jp Function5041 +; 48ac + +Function48ac: ; 48ac + call Function4793 + dw Function48b3 + dw Function48f8 +; 48b3 + +Function48b3: ; 48b3 + ld hl, OBJECT_STANDING_TILE + add hl, bc + ld a, [hl] + call CheckPitTile + jr z, .asm_48f5 + ld hl, OBJECT_FLAGS + add hl, bc + bit 2, [hl] + res 2, [hl] + jr z, .asm_48ee + ld hl, OBJECT_32 + add hl, bc + ld a, [hl] + and $3 + or $0 + call Function4690 + call Function6ec1 + jr c, .asm_48eb + ld de, SFX_STRENGTH + call PlaySFX + call Function5538 + call Function463f + ld hl, OBJECT_09 + add hl, bc + ld [hl], $f + ret + +.asm_48eb + call Function462a + +.asm_48ee + ld hl, OBJECT_07 + add hl, bc + ld [hl], $ff + ret + +.asm_48f5 + call Function4787 + ; fallthrough +; 48f8 + +Function48f8: ; 48f8 + ld hl, OBJECT_07 + add hl, bc + ld [hl], $ff + ret +; 48ff + +Function48ff: ; 48ff + ld hl, OBJECT_MAP_X + add hl, bc + ld d, [hl] + ld hl, OBJECT_MAP_Y + add hl, bc + ld e, [hl] + ld hl, OBJECT_32 + add hl, bc + ld a, [hl] + push bc + call Function1ae5 + ld hl, OBJECT_07 + add hl, bc + ld a, [hl] + cp $ff + jr z, .asm_494a + ld hl, OBJECT_NEXT_MAP_X + add hl, bc + ld a, [hl] + cp d + jr z, .asm_492d + jr c, .asm_4929 + ld a, $3 + jr .asm_493d + +.asm_4929 + ld a, $2 + jr .asm_493d + +.asm_492d + ld hl, OBJECT_NEXT_MAP_Y + add hl, bc + ld a, [hl] + cp e + jr z, .asm_494a + jr c, .asm_493b + ld a, $0 + jr .asm_493d + +.asm_493b + ld a, $1 + +.asm_493d + ld d, a + ld hl, OBJECT_07 + add hl, bc + ld a, [hl] + and $c + or d + pop bc + jp Function5412 + +.asm_494a + pop bc + ld hl, OBJECT_07 + add hl, bc + ld [hl], $ff + ld hl, OBJECT_11 + add hl, bc + ld [hl], $1 + ret +; 4958 + +Function4958: ; 4958 + call Function467b + ld hl, OBJECT_07 + add hl, bc + ld [hl], $ff + ld hl, OBJECT_11 + add hl, bc + ld [hl], $9 + ld hl, OBJECT_09 + add hl, bc + ld [hl], $4 + ret +; 496e + +Function496e: ; 496e + call Function467b + ld hl, OBJECT_07 + add hl, bc + ld [hl], $ff + ld hl, OBJECT_11 + add hl, bc + ld [hl], $a + ld hl, OBJECT_09 + add hl, bc + ld [hl], $4 + ret +; 4984 + +Function4984: ; 4984 + call Function4793 + dw Function4996 + dw Function499c + dw Function49b8 +; 498d + +Function498d: ; 498d + call Function4793 + dw Function4996 + dw Function499c + dw Function49c4 +; 4996 + +Function4996: ; 4996 + call Function467b + call Function4787 + ; fallthrough +; 499c + +Function499c: ; 499c + ld hl, OBJECT_11 + add hl, bc + ld [hl], $1 + ld hl, OBJECT_32 + add hl, bc + ld a, [hl] + ld a, $10 + ld hl, OBJECT_STEP_DURATION + add hl, bc + ld [hl], a + ld hl, OBJECT_09 + add hl, bc + ld [hl], $3 + call Function4787 + ret +; 49b8 + +Function49b8: ; 49b8 + ld de, .data_49c0 + call Function49d0 + jr Function4984 +; 49c0 + +.data_49c0 ; 49c0 + db $0c, $08, $00, $04 +; 49c4 + +Function49c4: ; 49c4 + ld de, .data_49cc + call Function49d0 + jr Function498d +; 49cc + +.data_49cc ; 49cc + db $08, $0c, $04, $00 +; 49d0 + +Function49d0: ; 49d0 + ld hl, OBJECT_08 + add hl, bc + ld a, [hl] + and $c + rrca + rrca + push hl + ld l, a + ld h, $0 + add hl, de + ld a, [hl] + pop hl + ld [hl], a + call Function478d + ret +; 49e5 + +Function49e5: ; 49e5 + call Function4aa8 + ld hl, OBJECT_11 + add hl, bc + ld [hl], $7 + ld hl, OBJECT_STEP_DURATION + add hl, de + ld a, [hl] + inc a + add a + add $0 + ld hl, OBJECT_STEP_DURATION + add hl, bc + ld [hl], a + ld hl, OBJECT_07 + add hl, de + ld a, [hl] + and 3 + ld d, $e + cp 0 + jr z, .asm_4a0f + cp 1 + jr z, .asm_4a0f + ld d, $c + +.asm_4a0f + ld hl, OBJECT_SPRITE_Y_OFFSET + add hl, bc + ld [hl], d + ld hl, OBJECT_SPRITE_X_OFFSET + add hl, bc + ld [hl], $0 + ld hl, OBJECT_09 + add hl, bc + ld [hl], $13 + ret +; 4a21 + +Function4a21: ; 4a21 + call Function467b + call Function4aa8 + ld hl, OBJECT_11 + add hl, bc + ld [hl], $8 + ld hl, OBJECT_STEP_DURATION + add hl, bc + ld [hl], $0 + ld hl, OBJECT_SPRITE_Y_OFFSET + add hl, bc + ld [hl], $f0 + ld hl, OBJECT_SPRITE_X_OFFSET + add hl, bc + ld [hl], $0 + ld hl, OBJECT_09 + add hl, bc + ld [hl], $13 + ret +; 4a46 + +Function4a46: ; 4a46 + call Function467b + call Function4aa8 + ld hl, OBJECT_11 + add hl, bc + ld [hl], $e + ld hl, OBJECT_STEP_DURATION + add hl, de + ld a, [hl] + inc a + add a + ld hl, OBJECT_STEP_DURATION + add hl, bc + ld [hl], a + ld hl, OBJECT_07 + add hl, de + ld a, [hl] + and 3 + ld e, a + ld d, 0 + ld hl, .data_4a81 + add hl, de + add hl, de + ld d, [hl] + inc hl + ld e, [hl] + ld hl, OBJECT_SPRITE_X_OFFSET + add hl, bc + ld [hl], d + ld hl, OBJECT_SPRITE_Y_OFFSET + add hl, bc + ld [hl], e + ld hl, OBJECT_09 + add hl, bc + ld [hl], $13 + ret +; 4a81 + +.data_4a81 ; 4a81 + ; x, y + db 0, -4 + db 0, 8 + db 6, 2 + db -6, 2 +; 4a89 + +Function4a89: ; 4a89 + call Function467b + call Function4aa8 + ld hl, OBJECT_11 + add hl, bc + ld [hl], $f + ld hl, OBJECT_STEP_DURATION + add hl, de + ld a, [hl] + add $ff + ld hl, OBJECT_STEP_DURATION + add hl, bc + ld [hl], a + ld hl, OBJECT_09 + add hl, bc + ld [hl], $13 + ret +; 4aa8 + +Function4aa8: ; 4aa8 + ld hl, OBJECT_32 + add hl, bc + ld a, [hl] + push bc + call Function1ae5 + ld d, b + ld e, c + pop bc + ld hl, OBJECT_29 + add hl, bc + ld [hl], e + inc hl + ld [hl], d + ret +; 4abc + +Function4abc: ; 4abc + call Function467b + ld hl, OBJECT_11 + add hl, bc + ld [hl], $0 + ld hl, OBJECT_32 + add hl, bc + ld a, [hl] + call Function4ade + ld hl, OBJECT_STEP_DURATION + add hl, bc + ld [hl], e + ld hl, OBJECT_30 + add hl, bc + ld [hl], a + ld hl, OBJECT_09 + add hl, bc + ld [hl], $15 + ret +; 4ade + +Function4ade: ; 4ade + ld d, a + and $3f + ld e, a + ld a, d + rlca + rlca + and $3 + ld d, a + inc d + ld a, $1 +.asm_4aeb + dec d + ret z + add a + jr .asm_4aeb +; 4af0 + +Function4af0: ; 4af0 + call Function4690 + call Function6ec1 + jr c, Function4b17 + call Function463f + ld hl, OBJECT_11 + add hl, bc + ld [hl], $2 + ld hl, wd4cf + ld a, [$ffaf] + cp [hl] + jr z, .asm_4b10 + ld hl, OBJECT_09 + add hl, bc + ld [hl], $7 + ret + +.asm_4b10 + ld hl, OBJECT_09 + add hl, bc + ld [hl], $6 + ret + +Function4b17: ; 4b17 + call Function467b + call Function462a + ; fallthrough +; 4b1d + +Function4b1d: ; 4b1d + call Random + ld a, [hRandomAdd] + and $7f + jr Function4b2d +; 4b26 + +Function4b26: ; 4b26 + call Random + ld a, [hRandomAdd] + and $1f + ; fallthrough +; 4b2d + +Function4b2d: ; 4b2d + ld hl, OBJECT_STEP_DURATION + add hl, bc + ld [hl], a + ld hl, OBJECT_07 + add hl, bc + ld [hl], $ff + ld hl, OBJECT_11 + add hl, bc + ld [hl], $1 + ld hl, OBJECT_09 + add hl, bc + ld [hl], $3 + ret +; 4b45 + +Pointers4b45: ; 4b45 + dw Function47bc + dw Function47dd + dw Function4e2b + dw Function4ddd + dw Function4e21 + dw Function4e0c + dw Function4e56 + dw Function4e47 + dw Function4b86 + dw Function4bbf + dw Function4e83 + dw Function4dff + dw Function4c18 + dw Function4c89 + dw Function4d14 + dw Function4ecd + dw Function4d7e + dw Function4daf + dw Function4dc8 + dw Function4f04 + dw Function4f33 + dw Function4f33 + dw Function4f77 + dw Function4f7a + dw Function4df0 + dw Function4f83 +; 4b79 + +Function4b79: ; 4b79 + ld hl, OBJECT_STEP_DURATION + add hl, bc + dec [hl] + ret nz + ld hl, OBJECT_09 + add hl, bc + ld [hl], $1 + ret +; 4b86 + +Function4b86: ; 4b86 + call Function47a8 + dw Function4b8d + dw Function4ba9 +; 4b8d + +Function4b8d: ; 4b8d + call Function46d7 + call UpdateJumpPosition + ld hl, OBJECT_STEP_DURATION + add hl, bc + dec [hl] + ret nz + call Function4600 + call Function46a6 + ld hl, OBJECT_FLAGS + add hl, bc + res 3, [hl] + call Function47a2 + ret +; 4ba9 + +Function4ba9: ; 4ba9 + call Function46d7 + call UpdateJumpPosition + ld hl, OBJECT_STEP_DURATION + add hl, bc + dec [hl] + ret nz + call Function4600 + ld hl, OBJECT_09 + add hl, bc + ld [hl], $1 + ret +; 4bbf + +Function4bbf: ; 4bbf + call Function47a8 + dw Function4bca + dw Function4bd2 + dw Function4bf2 + dw Function4bfd +; 4bca + +Function4bca: ; 4bca + ld hl, wd150 + set 7, [hl] + call Function47a2 +; fallthrough +; 4bd2 + +Function4bd2: ; 4bd2 + call UpdateJumpPosition + call Function4738 + ld hl, OBJECT_STEP_DURATION + add hl, bc + dec [hl] + ret nz + call Function4600 + ld hl, OBJECT_FLAGS + add hl, bc + res 3, [hl] + ld hl, wd150 + set 6, [hl] + set 4, [hl] + call Function47a2 + ret +; 4bf2 + +Function4bf2: ; 4bf2 + call Function46a6 + ld hl, wd150 + set 7, [hl] + call Function47a2 +; fallthrough +; 4bfd + +Function4bfd: ; 4bfd + call UpdateJumpPosition + call Function4738 + ld hl, OBJECT_STEP_DURATION + add hl, bc + dec [hl] + ret nz + ld hl, wd150 + set 6, [hl] + call Function4600 + ld hl, OBJECT_09 + add hl, bc + ld [hl], $1 + ret +; 4c18 + +Function4c18: ; 4c18 + call Function47a8 + dw Function4c23 + dw Function4c32 + dw Function4c42 + dw Function4c5d +; 4c23 + +Function4c23: ; 4c23 + ld hl, OBJECT_12 + add hl, bc + ld [hl], $0 + ld hl, OBJECT_STEP_DURATION + add hl, bc + ld [hl], $10 + call Function47a2 +; fallthrough +; 4c32 + +Function4c32: ; 4c32 + ld hl, OBJECT_11 + add hl, bc + ld [hl], $4 + ld hl, OBJECT_STEP_DURATION + add hl, bc + dec [hl] + ret nz + call Function47a2 + ret +; 4c42 + +Function4c42: ; 4c42 + ld hl, OBJECT_12 + add hl, bc + ld [hl], $0 + ld hl, OBJECT_31 + add hl, bc + ld [hl], $10 + ld hl, OBJECT_STEP_DURATION + add hl, bc + ld [hl], $10 + ld hl, OBJECT_FLAGS + add hl, bc + res 3, [hl] + call Function47a2 +; fallthrough +; 4c5d + +Function4c5d: ; 4c5d + ld hl, OBJECT_11 + add hl, bc + ld [hl], $4 + ld hl, OBJECT_31 + add hl, bc + inc [hl] + ld a, [hl] + ld d, $60 + call Sine + ld a, h + sub $60 + ld hl, OBJECT_SPRITE_Y_OFFSET + add hl, bc + ld [hl], a + ld hl, OBJECT_STEP_DURATION + add hl, bc + dec [hl] + ret nz + ld hl, OBJECT_12 + add hl, bc + ld [hl], $0 + ld hl, OBJECT_09 + add hl, bc + ld [hl], $1 + ret +; 4c89 + +Function4c89: ; 4c89 + call Function47a8 + dw Function4c9a + dw Function4caa + dw Function4cb3 + dw Function4cc9 + dw Function4ceb + dw Function4cf5 + dw Function4d01 +; 4c9a + +Function4c9a: ; 4c9a + ld hl, OBJECT_11 + add hl, bc + ld [hl], $0 + ld hl, OBJECT_STEP_DURATION + add hl, bc + ld [hl], $10 + call Function47a2 + ret +; 4caa + +Function4caa: ; 4caa + ld hl, OBJECT_STEP_DURATION + add hl, bc + dec [hl] + ret nz + call Function47a2 +; fallthrough +; 4cb3 + +Function4cb3: ; 4cb3 + ld hl, OBJECT_12 + add hl, bc + ld [hl], $0 + ld hl, OBJECT_31 + add hl, bc + ld [hl], $0 + ld hl, OBJECT_STEP_DURATION + add hl, bc + ld [hl], $10 + call Function47a2 + ret +; 4cc9 + +Function4cc9: ; 4cc9 + ld hl, OBJECT_11 + add hl, bc + ld [hl], $4 + ld hl, OBJECT_31 + add hl, bc + inc [hl] + ld a, [hl] + ld d, $60 + call Sine + ld a, h + sub $60 + ld hl, OBJECT_SPRITE_Y_OFFSET + add hl, bc + ld [hl], a + ld hl, OBJECT_STEP_DURATION + add hl, bc + dec [hl] + ret nz + call Function47a2 +; fallthrough +; 4ceb + +Function4ceb: ; 4ceb + ld hl, OBJECT_STEP_DURATION + add hl, bc + ld [hl], $10 + call Function47a2 + ret +; 4cf5 + +Function4cf5: ; 4cf5 + ld hl, OBJECT_11 + add hl, bc + ld [hl], $4 + ld hl, OBJECT_STEP_DURATION + add hl, bc + dec [hl] + ret nz +; 4d01 + +Function4d01: ; 4d01 + ld hl, OBJECT_12 + add hl, bc + ld [hl], $0 + ld hl, OBJECT_SPRITE_Y_OFFSET + add hl, bc + ld [hl], $0 + ld hl, OBJECT_09 + add hl, bc + ld [hl], $1 + ret +; 4d14 + +Function4d14: ; 4d14 + call Function47a8 + dw Function4d1f + dw Function4d2e + dw Function4d4f + dw Function4d6b +; 4d1f + +Function4d1f: ; 4d1f + ld hl, OBJECT_11 + add hl, bc + ld [hl], $0 + ld hl, OBJECT_STEP_DURATION + add hl, bc + ld [hl], $10 + call Function47a2 +; fallthrough +; 4d2e + +Function4d2e: ; 4d2e + ld hl, OBJECT_STEP_DURATION + add hl, bc + dec [hl] + ret nz + ld hl, OBJECT_11 + add hl, bc + ld [hl], $2 + ld hl, OBJECT_12 + add hl, bc + ld [hl], $0 + ld hl, OBJECT_31 + add hl, bc + ld [hl], $0 + ld hl, OBJECT_STEP_DURATION + add hl, bc + ld [hl], $10 + call Function47a2 +; fallthrough +; 4d4f + +Function4d4f: ; 4d4f + ld hl, OBJECT_31 + add hl, bc + inc [hl] + ld a, [hl] + ld d, $60 + call Sine + ld a, h + sub $60 + ld hl, OBJECT_SPRITE_Y_OFFSET + add hl, bc + ld [hl], a + ld hl, OBJECT_STEP_DURATION + add hl, bc + dec [hl] + ret nz + call Function47a2 +; fallthrough +; 4d6b + +Function4d6b: ; 4d6b + ld hl, OBJECT_12 + add hl, bc + ld [hl], $0 + ld hl, OBJECT_SPRITE_Y_OFFSET + add hl, bc + ld [hl], $0 + ld hl, OBJECT_09 + add hl, bc + ld [hl], $1 + ret +; 4d7e + +Function4d7e: ; 4d7e + call Function47a8 + dw Function4d85 + dw Function4d94 +; 4d85 + +Function4d85: ; 4d85 + ld hl, OBJECT_STEP_DURATION + add hl, bc + ld [hl], $8 + ld hl, OBJECT_SPRITE_Y_OFFSET + add hl, bc + ld [hl], $0 + call Function47a2 + ; fallthrough +; 4d94 + +Function4d94: ; 4d94 + ld hl, OBJECT_SPRITE_Y_OFFSET + add hl, bc + ld a, [hl] + xor 1 + ld [hl], a + ld hl, OBJECT_STEP_DURATION + add hl, bc + dec [hl] + ret nz + ld hl, OBJECT_SPRITE_Y_OFFSET + add hl, bc + ld [hl], $0 + ld hl, OBJECT_09 + add hl, bc + ld [hl], $1 + ret +; 4daf + +Function4daf: ; 4daf + call Function4db5 + jp Function4b79 +; 4db5 + +Function4db5: ; 4db5 + ld hl, OBJECT_STEP_DURATION + add hl, bc + ld a, [hl] + and $1 + ld a, $1 + jr z, .asm_4dc2 + ld a, $0 + +.asm_4dc2 + ld hl, OBJECT_11 + add hl, bc + ld [hl], a + ret +; 4dc8 + +Function4dc8: ; 4dc8 + ld hl, OBJECT_STEP_DURATION + add hl, bc + ld a, [hl] + and $1 + ld a, $4 + jr z, .asm_4dd5 + ld a, $5 + +.asm_4dd5 + ld hl, OBJECT_11 + add hl, bc + ld [hl], a + jp Function4b79 +; 4ddd + +Function4ddd: ; 4ddd + ld hl, OBJECT_07 + add hl, bc + ld [hl], $ff + ld hl, OBJECT_STEP_DURATION + add hl, bc + dec [hl] + ret nz + ld hl, OBJECT_09 + add hl, bc + ld [hl], $1 + ret +; 4df0 + +Function4df0: ; 4df0 + ld hl, OBJECT_07 + add hl, bc + ld [hl], $ff + ld hl, OBJECT_STEP_DURATION + add hl, bc + dec [hl] + ret nz + jp Function4357 +; 4dff + +Function4dff: ; 4dff + ld hl, OBJECT_STEP_DURATION + add hl, bc + dec [hl] + ret nz + ld hl, OBJECT_09 + add hl, bc + ld [hl], $1 + ret +; 4e0c + +Function4e0c: ; 4e0c + call Function47a8 + dw Function4e13 + dw Function4e21 +; 4e13 + +Function4e13: ; 4e13 + call Function4769 + call Function1a47 + ld hl, OBJECT_08 + add hl, bc + ld [hl], a + call Function47a2 + ; fallthrough +; 4e21 + +Function4e21: ; 4e21 + call Function4fb2 + ld hl, OBJECT_07 + add hl, bc + ld [hl], $ff + ret +; 4e2b + +Function4e2b: ; 4e2b + call Function4fb2 + call Function46d7 + ld hl, OBJECT_STEP_DURATION + add hl, bc + dec [hl] + ret nz + call Function4600 + ld hl, OBJECT_07 + add hl, bc + ld [hl], $ff + ld hl, OBJECT_09 + add hl, bc + ld [hl], $1 + ret +; 4e47 + +Function4e47: ; 4e47 + call Function46d7 + ld hl, OBJECT_STEP_DURATION + add hl, bc + dec [hl] + ret nz + call Function4600 + jp Function4b1d +; 4e56 + +Function4e56: ; 4e56 +; AnimateStep? + call Function47a8 + dw Function4e5d + dw Function4e65 +; 4e5d + +Function4e5d: ; 4e5d + ld hl, wd150 + set 7, [hl] + call Function47a2 + ; fallthrough +; 4e65 + +Function4e65: ; 4e65 + call Function4738 + ld hl, OBJECT_STEP_DURATION + add hl, bc + dec [hl] + ret nz + ld hl, wd150 + set 6, [hl] + call Function4600 + ld hl, OBJECT_07 + add hl, bc + ld [hl], $ff + ld hl, OBJECT_09 + add hl, bc + ld [hl], $1 + ret +; 4e83 + +Function4e83: ; 4e83 + call Function47a8 + dw Function4e8e + dw Function4ea4 + dw Function4ead + dw Function4ec0 +; 4e8e + +Function4e8e: ; 4e8e + ld hl, OBJECT_07 + add hl, bc + ld [hl], $ff + ld hl, OBJECT_12 + add hl, bc + ld a, [hl] + ld [hl], $2 + ld hl, OBJECT_STEP_DURATION + add hl, bc + ld [hl], $2 + call Function47a2 + ; fallthrough +; 4ea4 + +Function4ea4: ; 4ea4 + ld hl, OBJECT_STEP_DURATION + add hl, bc + dec [hl] + ret nz + call Function47a2 + ; fallthrough +; 4ead + +Function4ead: ; 4ead + ld hl, OBJECT_29 + add hl, bc + ld a, [hl] + ld hl, OBJECT_08 + add hl, bc + ld [hl], a + ld hl, OBJECT_STEP_DURATION + add hl, bc + ld [hl], $2 + call Function47a2 + ; fallthrough +; 4ec0 + +Function4ec0: ; 4ec0 + ld hl, OBJECT_STEP_DURATION + add hl, bc + dec [hl] + ret nz + ld hl, OBJECT_09 + add hl, bc + ld [hl], $1 + ret +; 4ecd + +Function4ecd: ; 4ecd + call Function46d7 + ld hl, OBJECT_STEP_DURATION + add hl, bc + dec [hl] + ret nz + push bc + ld hl, OBJECT_MAP_X + add hl, bc + ld d, [hl] + ld hl, OBJECT_MAP_Y + add hl, bc + ld e, [hl] + ld hl, OBJECT_01 + add hl, bc + ld a, [hl] + ld b, a + callba Function807e + pop bc + ld hl, OBJECT_FLAGS + add hl, bc + res 2, [hl] + call Function4600 + ld hl, OBJECT_07 + add hl, bc + ld [hl], $ff + ld hl, OBJECT_09 + add hl, bc + ld [hl], $1 + ret +; 4f04 + +Function4f04: ; 4f04 + ld hl, OBJECT_29 + add hl, bc + ld e, [hl] + inc hl + ld d, [hl] + ld hl, OBJECT_00 + add hl, de + ld a, [hl] + and a + jr z, .asm_4f30 + ld hl, OBJECT_SPRITE_X + add hl, de + ld a, [hl] + ld hl, OBJECT_SPRITE_X + add hl, bc + ld [hl], a + ld hl, OBJECT_SPRITE_Y + add hl, de + ld a, [hl] + ld hl, OBJECT_SPRITE_Y + add hl, bc + ld [hl], a + ld hl, OBJECT_STEP_DURATION + add hl, bc + ld a, [hl] + and a + ret z + dec [hl] + ret nz + +.asm_4f30 + jp Function4357 +; 4f33 + +Function4f33: ; 4f33 + call Function47a8 + dw Function4f3a + dw Function4f43 +; 4f3a + +Function4f3a: ; 4f3a + xor a + ld hl, OBJECT_29 + add hl, bc + ld [hl], a + call Function47a2 + ; fallthrough +; 4f43 + +Function4f43: ; 4f43 + ld hl, OBJECT_29 + add hl, bc + ld d, [hl] + ld a, [wd14f] + sub d + ld [wd14f], a + ld hl, OBJECT_STEP_DURATION + add hl, bc + dec [hl] + jr z, .asm_4f68 + ld a, [hl] + call Function4f6c + ld hl, OBJECT_29 + add hl, bc + ld [hl], a + ld d, a + ld a, [wd14f] + add d + ld [wd14f], a + ret + +.asm_4f68 + call Function4357 + ret +; 4f6c + +Function4f6c: ; 4f6c + ld hl, OBJECT_30 + add hl, bc + and 1 + ld a, [hl] + ret z + cpl + inc a + ret +; 4f77 + +Function4f77: ; 4f77 + call Function47a8 ; ???? +; 4f7a + +Function4f7a: ; 4f7a + call Function47a8 + dw Function4f83 + dw Function4f83 + dw Function4f83 +; 4f83 + +Function4f83: ; 4f83 + call Function47a8 + dw Function4f8a + dw Function4f99 +; 4f8a + +Function4f8a: ; 4f8a + ld hl, OBJECT_11 + add hl, bc + ld [hl], $10 + ld hl, OBJECT_STEP_DURATION + add hl, bc + ld [hl], $10 + call Function47a2 +; 4f99 + +Function4f99: ; 4f99 + ld hl, OBJECT_STEP_DURATION + add hl, bc + dec [hl] + ret nz + ld hl, OBJECT_SPRITE_Y_OFFSET + add hl, bc + ld [hl], $60 + ld hl, OBJECT_12 + add hl, bc + ld [hl], $0 + ld hl, OBJECT_09 + add hl, bc + ld [hl], $1 + ret +; 4fb2 + +Function4fb2: ; 4fb2 + ret +; 4fb3 + +Function4fb3: ; 4fb3 + ld hl, OBJECT_29 + add hl, bc + inc [hl] + ld a, [hl] + srl a + srl a + and 7 + ld l, a + ld h, 0 + ld de, .y + add hl, de + ld a, [hl] + ld hl, OBJECT_SPRITE_Y_OFFSET + add hl, bc + ld [hl], a + ret +; 4fcd + +.y ; 4fcd + db 0, -1, -2, -3, -4, -3, -2, -1 +; 4fd5 + +UpdateJumpPosition: ; 4fd5 + call GetStepVector + ld a, h + ld hl, OBJECT_31 + add hl, bc + ld e, [hl] + add e + ld [hl], a + nop + srl e + ld d, 0 + ld hl, .y + add hl, de + ld a, [hl] + ld hl, OBJECT_SPRITE_Y_OFFSET + add hl, bc + ld [hl], a + ret +; 4ff0 + +.y ; 4ff0 + db -4, -6, -8, -10, -11, -12, -12, -12 + db -11, -10, -9, -8, -6, -4, 0, 0 +; 5000 + +Function5000: ; 5000 + ld a, [wc2de] + ld hl, wc2df + ld [hl], a + ld a, $3e + ld [wc2de], a + ld a, [hl] + ret +; 500e + +Function500e: ; 500e + ld hl, wc2e3 + call Function1aae + ret +; 5015 + +Function5015: ; 5015 + ld hl, OBJECT_27 + add hl, bc + ld e, [hl] + inc [hl] + ld d, 0 + ld hl, wc2e2 + ld a, [hli] + ld h, [hl] + ld l, a + add hl, de + ld a, [hl] + ret +; 5026 + +Function5026: ; 5026 + ld hl, OBJECT_27 + add hl, bc + ld e, [hl] + inc [hl] + ld d, 0 + ld hl, wc2e6 + ld a, [hli] + ld h, [hl] + ld l, a + add hl, de + ld a, [hl] + ret +; 5037 + +Function5037: ; 5037 + ld hl, Function503d + jp Function5041 +; 503d + +Function503d: ; 503d + ld a, [wc2e2] + ret +; 5041 + +Function5041: ; 5041 + call Function5055 +.asm_5044 + xor a + ld [wc2ea], a + call Function505e + call Function506b + ld a, [wc2ea] + and a + jr nz, .asm_5044 + ret +; 5055 + +Function5055: ; 5055 + ld a, l + ld [wc2eb], a + ld a, h + ld [wc2ec], a + ret +; 505e + +Function505e: ; 505e + ld hl, wc2eb + ld a, [hli] + ld h, [hl] + ld l, a + jp [hl] +; 5065 + +Function5065: ; 5065 + ld a, $1 + ld [wc2ea], a + ret +; 506b + +Function506b: ; 506b + push af + call Function54b8 + pop af + ld hl, MovementPointers + rst JumpTable + ret +; 5075 + + +; 5075 +INCLUDE "engine/movement.asm" +; 54b8 + + +Function54b8: ; 54b8 + ld e, a + ld a, [wd4ce] + cp $ff + ret z + ld a, [wd4cd] + ld d, a + ld a, [$ffaf] + cp d + ret nz + ld a, e + cp $3e + ret z + cp $47 + ret z + cp $4b + ret z + cp $50 + ret z + cp $8 + ret c + push af + ld hl, wd4d0 + inc [hl] + ld e, [hl] + ld d, 0 + ld hl, wd4d1 + add hl, de + pop af + ld [hl], a + ret +; 54e6 + +Function54e6: ; 54e6 + ld hl, wd4d0 + ld a, [hl] + and a + jr z, .asm_5503 + cp $ff + jr z, .asm_5503 + dec [hl] + ld e, a + ld d, 0 + ld hl, wd4d1 + add hl, de + inc e + ld a, $ff +.asm_54fc + ld d, [hl] + ld [hld], a + ld a, d + dec e + jr nz, .asm_54fc + ret + +.asm_5503 + call Function550a + ret c + ld a, $3e + ret +; 550a + +Function550a: ; 550a + ld a, [wd4cd] + cp $ff + jr z, .asm_5520 + push bc + call Function1ae5 + ld hl, OBJECT_00 + add hl, bc + ld a, [hl] + pop bc + and a + jr z, .asm_5520 + and a + ret + +.asm_5520 + ld a, $ff + ld [wd4ce], a + ld a, $47 + scf + ret +; 5529 + +Function5529: ; 5529 + push bc + ld de, .data_5535 + call Function55b9 + call Function55ac + pop bc + ret + +.data_5535 + db $00, $05, $1b +; 5538 + +Function5538: ; 5538 + push bc + ld de, .data_5544 + call Function55b9 + call Function55ac + pop bc + ret + +.data_5544 + db $00, $05, $22 +; 5547 + +Function5547: ; 5547 + push bc + ld de, .data_5553 + call Function55b9 + call Function55ac + pop bc + ret + +.data_5553 + db $00, $05, $1c +; 5556 + +Function5556: ; 5556 + push bc + ld de, .data_5562 + call Function55b9 + call Function55ac + pop bc + ret + +.data_5562 + db $00, $06, $23 +; 5565 + +Function5565: ; 5565 + push bc + push af + ld de, .data_5576 + call Function55b9 + pop af + ld [wc2f5], a + call Function55ac + pop bc + ret + +.data_5576 + db $00, $05, $1d +; 5579 + +Function5579: ; 5579 + push bc + ld a, [$ffaf] + ld c, a + call Function5582 + pop bc + ret +; 5582 + +Function5582: ; 5582 + ld de, ObjectStructs + ld a, $d +.asm_5587 + push af + ld hl, OBJECT_04 + add hl, de + bit 7, [hl] + jr z, .asm_55a1 + ld hl, OBJECT_00 + add hl, de + ld a, [hl] + and a + jr z, .asm_55a1 + push bc + xor a + ld bc, ObjectStruct2 - ObjectStruct1 + call ByteFill + pop bc + +.asm_55a1 + ld hl, ObjectStruct2 - ObjectStruct1 + add hl, de + ld d, h + ld e, l + pop af + dec a + jr nz, .asm_5587 + ret +; 55ac + +Function55ac: ; 55ac + call Function1a13 + ret nc + ld d, h + ld e, l + callba Function8286 + ret +; 55b9 + +Function55b9: ; 55b9 + ld hl, wc2f0 + ld [hl], $ff + inc hl + ld [hl], $ff + inc hl + ld a, [de] + inc de + ld [hli], a + ld a, [de] + inc de + ld [hli], a + ld a, [de] + ld [hli], a + ld a, [$ffaf] + ld [hli], a + push hl + ld hl, OBJECT_MAP_X + add hl, bc + ld d, [hl] + ld hl, OBJECT_MAP_Y + add hl, bc + ld e, [hl] + pop hl + ld [hl], d + inc hl + ld [hl], e + inc hl + ld [hl], $ff + ret +; 55e0 + +Function55e0:: ; 55e0 + ld a, [VramState] + bit 0, a + ret z + ld bc, ObjectStructs + xor a +.asm_55ea + ld [$ffaf], a + call Function1af1 + jr z, .asm_55f4 + call Function565c + +.asm_55f4 + ld hl, ObjectStruct2 - ObjectStruct1 + add hl, bc + ld b, h + ld c, l + ld a, [$ffaf] + inc a + cp $d + jr nz, .asm_55ea + ret +; 5602 + +Function5602: ; 5602 + call Function5645 + ld a, $0 + call Function5629 + ld a, [wd459] + bit 7, a + jr z, .asm_5619 + ld a, [$ffe0] + and a + jr z, .asm_5619 + call Function5629 + +.asm_5619 + call Function5920 + ret +; 561d + +Function561d: ; 561d + call Function5645 + ld a, $0 + call Function5629 + call Function5920 + ret +; 5629 + +Function5629: ; 5629 + cp $10 + ret nc + call GetMapObject + ld hl, $0000 + add hl, bc + ld a, [hl] + cp $ff + ret z + cp $d + ret nc + call Function1ae5 + call Function1af1 + ret z + call Function5673 + ret +; 5645 + +Function5645: ; 5645 + xor a + ld bc, ObjectStructs +.asm_5649 + ld [$ffaf], a + call Function5680 + ld hl, ObjectStruct2 - ObjectStruct1 + add hl, bc + ld b, h + ld c, l + ld a, [$ffaf] + inc a + cp $d + jr nz, .asm_5649 + ret +; 565c + +Function565c: ; 565c + push bc + call Function56cd + pop bc + jr c, Function5680 + call Function56a3 + jr c, Function5680 + call Function5688 + callba Function4440 + xor a + ret +; 5673 + +Function5673: ; 5673 + call Function56a3 + jr c, Function5680 + callba Function4440 + xor a + ret +; 5680 + +Function5680: ; 5680 + ld hl, OBJECT_FACING + add hl, bc + ld [hl], $ff + scf + ret +; 5688 + +Function5688: ; 5688 + push bc + ld hl, OBJECT_MAP_X + add hl, bc + ld d, [hl] + ld hl, OBJECT_MAP_Y + add hl, bc + ld e, [hl] + call Function2a3c + pop bc + ld hl, OBJECT_STANDING_TILE + add hl, bc + ld [hl], a + callba Function463f + ret +; 56a3 + +Function56a3: ; 56a3 + ld hl, OBJECT_MAP_X + add hl, bc + ld d, [hl] + ld hl, OBJECT_MAP_Y + add hl, bc + ld e, [hl] + inc d + inc e + ld a, [XCoord] + cp d + jr z, .asm_56bc + jr nc, .asm_56cb + add $b + cp d + jr c, .asm_56cb + +.asm_56bc + ld a, [YCoord] + cp e + jr z, .asm_56c9 + jr nc, .asm_56cb + add $a + cp e + jr c, .asm_56cb + +.asm_56c9 + xor a + ret + +.asm_56cb + scf + ret +; 56cd + +Function56cd: ; 56cd + ld a, [wd14c] + ld d, a + ld hl, OBJECT_SPRITE_X_OFFSET + add hl, bc + ld a, [hl] + ld hl, OBJECT_SPRITE_X + add hl, bc + add [hl] + add d + cp $f0 + jr nc, .asm_56e5 + cp $a0 + jp nc, .asm_5768 + +.asm_56e5 + and $7 + ld d, $2 + cp $4 + jr c, .asm_56ef + ld d, $3 + +.asm_56ef + ld a, [hl] + srl a + srl a + srl a + cp $14 + jr c, .asm_56fc + sub $20 + +.asm_56fc + ld [$ffbd], a + ld a, [wd14d] + ld e, a + ld hl, OBJECT_SPRITE_Y_OFFSET + add hl, bc + ld a, [hl] + ld hl, OBJECT_SPRITE_Y + add hl, bc + add [hl] + add e + cp $f0 + jr nc, .asm_5715 + cp $90 + jr nc, .asm_5768 + +.asm_5715 + and $7 + ld e, $2 + cp $4 + jr c, .asm_571f + ld e, $3 + +.asm_571f + ld a, [hl] + srl a + srl a + srl a + cp $12 + jr c, .asm_572c + sub $20 + +.asm_572c + ld [$ffbe], a + ld hl, OBJECT_PALETTE + add hl, bc + bit 7, [hl] + jr z, .asm_573e + ld a, d + add $2 + ld d, a + ld a, e + add $2 + ld e, a + +.asm_573e + ld a, d + ld [$ffbf], a +.asm_5741 + ld a, [$ffbf] + ld d, a + ld a, [$ffbe] + add e + dec a + cp $12 + jr nc, .asm_5763 + ld b, a +.asm_574d + ld a, [$ffbd] + add d + dec a + cp $14 + jr nc, .asm_5760 + ld c, a + push bc + call GetTileCoord + pop bc + ld a, [hl] + cp $60 + jr nc, .asm_5768 + +.asm_5760 + dec d + jr nz, .asm_574d + +.asm_5763 + dec e + jr nz, .asm_5741 + and a + ret + +.asm_5768 + scf + ret +; 576a + +Function576a:: ; 576a + call Function5771 + call Function5781 + ret +; 5771 + +Function5771: ; 5771 + xor a + ld [wd14e], a + ld [wd14f], a + ld [wd150], a + ld a, $ff + ld [wd151], a + ret +; 5781 + +Function5781: ; 5781 + ld bc, ObjectStructs + xor a +.asm_5785 + ld [$ffaf], a + call Function1af1 + jr z, .asm_578f + call Function437b + +.asm_578f + ld hl, ObjectStruct2 - ObjectStruct1 + add hl, bc + ld b, h + ld c, l + ld a, [$ffaf] + inc a + cp $d + jr nz, .asm_5785 + ret +; 579d + +Function579d: ; 579d + ld a, $3e + ld [wc2de], a + ld [wc2df], a + xor a + ld [wd04e], a + ld [wd4e2], a + call Function57bc + callba Function149c6 + call c, Function57d9 + call Function57ca + ret +; 57bc + +Function57bc: ; 57bc + ld hl, wd45b + bit 7, [hl] + jr nz, .asm_57c4 + ret + +.asm_57c4 + ld a, $0 + ld [PlayerAction], a + ret +; 57ca + +Function57ca: ; 57ca + ld hl, wd45b + bit 5, [hl] + ret z + ld a, [wd45b] + and $3 + add a + add a + jr Function57db +; 57d9 + +Function57d9: ; 57d9 + ld a, $0 + ; fallthrough +; 57db + +Function57db: ; 57db + ld bc, PlayerStruct + call Function1af8 + ret +; 57e2 + +Function57e2: ; 57e2 + ld a, d + and $80 + ret z + ld bc, $0000 ; debug? + ld hl, OBJECT_08 + add hl, bc + ld a, [hl] + or d + ld [hl], a + ld a, d + swap a + and $7 + ld d, a + ld bc, PlayerStruct + ld hl, OBJECT_PALETTE + add hl, bc + ld a, [hl] + and $f8 + or d + ld [hl], a + ret +; 5803 + +Function5803:: ; 5803 + push bc + ld a, b + call Function5815 + pop bc + ret c + ld a, c + call Function582c + callba Function848a + ret +; 5815 + +Function5815: ; 5815 + call Function18de + ret c + ld a, [$ffb0] + ld [wd4cd], a + ret +; 581f + +Function581f:: ; 581f + call Function5826 + call Function5847 + ret +; 5826 + +Function5826: ; 5826 + ld a, $ff + ld [wd4cd], a + ret +; 582c + +Function582c: ; 582c + push af + call Function5847 + pop af + call Function18de + ret c + ld hl, OBJECT_03 + add hl, bc + ld [hl], $13 + ld hl, OBJECT_09 + add hl, bc + ld [hl], $0 + ld a, [$ffb0] + ld [wd4ce], a + ret +; 5847 + +Function5847: ; 5847 + ld a, [wd4ce] + cp $ff + ret z + call Function1ae5 + callba Function58e3 + ld a, $ff + ld [wd4ce], a + ret +; 585c + +Function585c:: ; 585c + ld a, c + call Function18de + ret c + push bc + call Function587a + pop bc + ld hl, OBJECT_FLAGS + add hl, bc + res 5, [hl] + xor a + ret +; 586e + +Function586e: ; 586e + call Function18de + ret c + ld hl, OBJECT_FLAGS + add hl, bc + set 5, [hl] + xor a + ret +; 587a + +Function587a: ; 587a + ld bc, ObjectStructs + xor a +.asm_587e + push af + call Function1af1 + jr z, .asm_588a + ld hl, OBJECT_FLAGS + add hl, bc + set 5, [hl] + +.asm_588a + ld hl, ObjectStruct2 - ObjectStruct1 + add hl, bc + ld b, h + ld c, l + pop af + inc a + cp $d + jr nz, .asm_587e + ret +; 5897 + +Function5897:: ; 5897 + ld a, [wd4cd] + cp $ff + ret z + push bc + call Function1ae5 + ld hl, OBJECT_01 + add hl, bc + ld a, [hl] + pop bc + cp c + ret nz + ld a, [wd4ce] + cp $ff + ret z + call Function1ae5 + ld hl, OBJECT_FLAGS + add hl, bc + res 5, [hl] + ret +; 58b9 + +Function58b9:: ; 58b9 + push bc + ld bc, ObjectStructs + xor a +.asm_58be + push af + call Function1af1 + jr z, .asm_58ca + ld hl, OBJECT_FLAGS + add hl, bc + res 5, [hl] + +.asm_58ca + ld hl, ObjectStruct2 - ObjectStruct1 + add hl, bc + ld b, h + ld c, l + pop af + inc a + cp $d + jr nz, .asm_58be + pop bc + ret +; 58d8 + +Function58d8: ; 58d8 + call Function18de + ret c + ld hl, OBJECT_FLAGS + add hl, bc + res 5, [hl] + ret +; 58e3 + +Function58e3: ; 58e3 + ld hl, OBJECT_01 + add hl, bc + ld a, [hl] + cp $ff + jp z, Function5903 + push bc + call GetMapObject + ld hl, $0004 + add hl, bc + ld a, [hl] + pop bc + ld hl, OBJECT_03 + add hl, bc + ld [hl], a + ld hl, OBJECT_09 + add hl, bc + ld [hl], $0 + ret +; 5903 + +Function5903: ; 5903 + call GetSpriteDirection + rrca + rrca + ld e, a + ld d, 0 + ld hl, .data_591c + add hl, de + ld a, [hl] + ld hl, OBJECT_03 + add hl, bc + ld [hl], a + ld hl, OBJECT_09 + add hl, bc + ld [hl], $0 + ret + +.data_591c + db 6, 7, 8, 9 +; 5920 + +Function5920:: ; 5920 + ld a, [VramState] + bit 0, a + ret z + xor a + ld [$ffbd], a + ld a, [hOAMUpdate] + push af + ld a, $1 + ld [hOAMUpdate], a + call Function5991 + call Function593a + pop af + ld [hOAMUpdate], a + ret +; 593a + +Function593a: ; 593a + ld a, [VramState] + bit 1, a + ld b, $a0 + jr z, .asm_5945 + ld b, $70 + +.asm_5945 + ld a, [$ffbd] + cp b + ret nc + ld l, a + ld h, $c4 + ld de, OBJECT_04 + ld a, b + ld c, $a0 +.asm_5952 + ld [hl], c + add hl, de + cp l + jr nz, .asm_5952 + ret +; 5958 + +Function5958: ; 5958 + push hl + push de + push bc + ld a, [wd14c] + ld d, a + ld a, [wd14d] + ld e, a + ld bc, ObjectStructs + ld a, $d + +.asm_5968 + push af + call Function1af1 + jr z, .asm_597c + + ld hl, OBJECT_SPRITE_X + add hl, bc + ld a, [hl] + add d + ld [hl], a + + ld hl, OBJECT_SPRITE_Y + add hl, bc + ld a, [hl] + add e + ld [hl], a + +.asm_597c + ld hl, ObjectStruct2 - ObjectStruct1 + add hl, bc + ld b, h + ld c, l + pop af + dec a + jr nz, .asm_5968 + + xor a + ld [wd14c], a + ld [wd14d], a + pop bc + pop de + pop hl + ret +; 5991 + +Function5991: ; 5991 + call Function59a4 + ld c, $30 + call Function59f3 + ld c, $20 + call Function59f3 + ld c, $10 + call Function59f3 + ret +; 59a4 + +Function59a4: ; 59a4 + xor a + ld hl, wc2eb + ld bc, 13 + call ByteFill + + ld d, 0 + ld bc, ObjectStructs + ld hl, wc2eb +.loop + push hl + call Function1af1 + jr z, .skip + + ld hl, OBJECT_FACING + add hl, bc + ld a, [hl] + cp -1 + jr z, .skip + +; Define the sprite priority. + ld e, $10 + ld hl, OBJECT_FLAGS + add hl, bc + bit 0, [hl] + jr nz, .add + ld e, $20 + bit 1, [hl] + jr z, .add + ld e, $30 + jr .add + +.skip + ld hl, ObjectStruct2 - ObjectStruct1 + add hl, bc + ld b, h + ld c, l + pop hl + jr .next + +.add + ld hl, ObjectStruct2 - ObjectStruct1 + add hl, bc + ld b, h + ld c, l + pop hl + ld a, d + or e + ld [hli], a + +.next + inc d + ld a, d + cp $d + jr nz, .loop + ret +; 59f3 + +Function59f3: ; 59f3 + ld hl, wc2eb +.next + ld a, [hli] + ld d, a + and $f0 + ret z + cp c + jr nz, .next + + push bc + push hl + ld a, d + and $f + call Function5ac2 + call Function5a0d + pop hl + pop bc + jr .next +; 5a0d + +Function5a0d: ; 5a0d + ld hl, OBJECT_SPRITE + add hl, bc + ld a, [hl] + and $7f + ld [$ffc1], a + + xor a + bit 7, [hl] + jr nz, .asm_5a1d + or 8 +.asm_5a1d + + ld hl, OBJECT_FLAGS + add hl, bc + ld e, [hl] + bit 7, e + jr z, .asm_5a28 + or $80 +.asm_5a28 + + bit 4, e + jr z, .asm_5a2e + or $10 +.asm_5a2e + + ld hl, OBJECT_PALETTE + add hl, bc + ld d, a + ld a, [hl] + and 7 + or d + ld d, a + + xor a + bit 3, e + jr z, .asm_5a3f + or $80 +.asm_5a3f + ld [$ffc2], a + + ld hl, OBJECT_SPRITE_X + add hl, bc + ld a, [hl] + + ld hl, OBJECT_SPRITE_X_OFFSET + add hl, bc + add [hl] + + add 8 + + ld e, a + ld a, [wd14c] + add e + ld [$ffbf], a + + ld hl, OBJECT_SPRITE_Y + add hl, bc + ld a, [hl] + + ld hl, OBJECT_SPRITE_Y_OFFSET + add hl, bc + add [hl] + + add 12 + + ld e, a + ld a, [wd14d] + add e + ld [$ffc0], a + + ld hl, OBJECT_FACING + add hl, bc + ld a, [hl] + cp -1 + jp z, .done + cp NUM_FACINGS + jp nc, .done + + ld l, a + ld h, 0 + add hl, hl + ld bc, Facings + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a + + ld a, [$ffbd] + ld c, a + ld b, Sprites / $100 + ld a, [hli] + ld [$ffbe], a + add c + cp SpritesEnd % $100 + jr nc, .full + +.addsprite + ld a, [$ffc0] + add [hl] + inc hl + + ld [bc], a + inc c + + ld a, [$ffbf] + add [hl] + inc hl + + ld [bc], a + inc c + + ld e, [hl] + inc hl + + ld a, [$ffc1] + bit 2, e + jr z, .asm_5aa3 + xor a +.asm_5aa3 + add [hl] + inc hl + + ld [bc], a + inc c + + ld a, e + bit 1, a + jr z, .asm_5aaf + ld a, [$ffc2] + or e +.asm_5aaf + and $f0 + or d + ld [bc], a + inc c + + ld a, [$ffbe] + dec a + ld [$ffbe], a + jr nz, .addsprite + + ld a, c + ld [$ffbd], a + +.done + xor a + ret + +.full + scf + ret +; 5ac2 + +Function5ac2: ; 5ac2 + ld c, a + ld b, 0 + ld hl, .Addresses + add hl, bc + add hl, bc + ld c, [hl] + inc hl + ld b, [hl] + ret +; 5ace + +.Addresses ; 5ace + dw PlayerStruct + dw ObjectStruct1 + dw ObjectStruct2 + dw ObjectStruct3 + dw ObjectStruct4 + dw ObjectStruct5 + dw ObjectStruct6 + dw ObjectStruct7 + dw ObjectStruct8 + dw ObjectStruct9 + dw ObjectStruct10 + dw ObjectStruct11 + dw ObjectStruct12 +; 5ae8 + |