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