diff options
Diffstat (limited to 'engine/map_objects.asm')
-rwxr-xr-x | engine/map_objects.asm | 488 |
1 files changed, 488 insertions, 0 deletions
diff --git a/engine/map_objects.asm b/engine/map_objects.asm new file mode 100755 index 00000000..ab9bac58 --- /dev/null +++ b/engine/map_objects.asm @@ -0,0 +1,488 @@ +INCLUDE "engine/facings.asm" +SpriteMovementData:: INCLUDE "data/map_objects.asm" + +DeleteMapObject:: ; 4358 (1:4358) + push bc + ld hl, $1 + add hl, bc + ld a, [hl] + push af + ld h, b + ld l, c + ld bc, $28 + xor a + call ByteFill + pop af + cp $ff + jr z, .asm_437a + bit 7, a + jr nz, .asm_437a + call GetMapObject + ld hl, $0 + add hl, bc + ld [hl], $ff +.asm_437a + pop bc + ret + +Function4442: + call .CheckObjectStillVisible + ret c + call .HandleStepType + call .HandleObjectAction + ret + +.CheckObjectStillVisible: ; 4387 (1:4387) + ld hl, $5 + add hl, bc + res 6, [hl] + ld a, [wda03] + ld e, a + ld hl, $10 + add hl, bc + ld a, [hl] + add $1 + sub e + jr c, .asm_43b3 + cp $c + jr nc, .asm_43b3 + ld a, [wda02] + ld e, a + ld hl, $11 + add hl, bc + ld a, [hl] + add $1 + sub e + jr c, .asm_43b3 + cp $b + jr nc, .asm_43b3 + jr .asm_43dd + +.asm_43b3 + ld hl, $5 + add hl, bc + set 6, [hl] + ld a, [wda03] + ld e, a + ld hl, $14 + add hl, bc + ld a, [hl] + add $1 + sub e + jr c, .asm_43df + cp $c + jr nc, .asm_43df + ld a, [wda02] + ld e, a + ld hl, $15 + add hl, bc + ld a, [hl] + add $1 + sub e + jr c, .asm_43df + cp $b + jr nc, .asm_43df +.asm_43dd + and a + ret + +.asm_43df + ld hl, $4 + add hl, bc + bit 1, [hl] + jr nz, .asm_43ec + call DeleteMapObject + scf + ret + +.asm_43ec + ld hl, $5 + add hl, bc + set 6, [hl] + and a + ret + +.HandleStepType: ; 43f4 (1:43f4) + ld hl, $9 + add hl, bc + ld a, [hl] + and a + jr z, .asm_440a + ld hl, $5 + add hl, bc + bit 5, [hl] + jr nz, .asm_4427 + cp $1 + jr z, .asm_4415 + jr .asm_4422 + +.asm_440a + call ObjectMovementReset + ld hl, $5 + add hl, bc + bit 5, [hl] + jr nz, .asm_4427 +.asm_4415 + call Function47b6 + ld hl, $9 + add hl, bc + ld a, [hl] + and a + ret z + cp $1 + ret z +.asm_4422 + ld hl, $4b1e + rst JumpTable + ret + +.asm_4427 + ret + +.HandleObjectAction: ; 4428 (1:4428) + ld hl, $4 + add hl, bc + bit 0, [hl] + jr nz, Function44a0 + ld hl, $5 + add hl, bc + bit 6, [hl] + jr nz, Function44a0 + bit 5, [hl] + jr nz, asm_4449 + ld de, Pointers4460 + jr asm_444e + +Function4441: + ld hl, $4 + add hl, bc + bit 0, [hl] + jr nz, Function44a0 +asm_4449 + ld de, Pointers4460 + 2 + jr asm_444e + +asm_444e +INCLUDE "engine/map_object_action.asm" + +CopyNextCoordsTileToStandingCoordsTile: ; 45d9 (1:45d9) + ld hl, $10 + add hl, bc + ld a, [hl] + ld hl, $12 + add hl, bc + ld [hl], a + ld hl, $11 + add hl, bc + ld a, [hl] + ld hl, $13 + add hl, bc + ld [hl], a + ld hl, $e + add hl, bc + ld a, [hl] + ld hl, $f + add hl, bc + ld [hl], a + call SetGrassPriority + ld hl, $e + add hl, bc + ld a, [hl] + call UselessAndA + ret + +Function4603: + ld hl, $12 + add hl, bc + ld a, [hl] + ld hl, $10 + add hl, bc + ld [hl], a + ld hl, $13 + add hl, bc + ld a, [hl] + ld hl, $11 + add hl, bc + ld [hl], a + ret + +UpdateGrassPriority: + ld hl, $5 + add hl, bc + bit 3, [hl] + jr z, .asm_4628 + ld hl, $e + add hl, bc + ld a, [hl] + call SetGrassPriority +.asm_4628 + ld hl, $e + add hl, bc + ld a, [hl] + call UselessAndA + ret c + ld hl, $f + add hl, bc + ld a, [hl] + call UselessAndA + ret + +SetGrassPriority: ; 463a (1:463a) + call CheckSuperTallGrassTile + jr z, .asm_4644 + call CheckGrassTile + jr c, .asm_464b +.asm_4644 + ld hl, $5 + add hl, bc + set 3, [hl] + ret + +.asm_464b + ld hl, $5 + add hl, bc + res 3, [hl] + ret + +UselessAndA: ; 4652 (1:4652) + and a + ret + +EndSpriteMovement: + xor a + ld hl, $c + add hl, bc + ld [hl], a + ld hl, $1b + add hl, bc + ld [hli], a + ld [hli], a + ld [hli], a + ld [hl], a + ld hl, $7 + add hl, bc + ld [hl], $ff + ret + +InitStep: + ld hl, $7 + add hl, bc + ld [hl], a + ld hl, $4 + add hl, bc + bit 2, [hl] + jr nz, GetNextTile + add a + add a + and $c + ld hl, $8 + add hl, bc + ld [hl], a +GetNextTile: + call GetStepVector + ld hl, $a + add hl, bc + ld [hl], a + ld a, d + call GetStepVectorSign + ld hl, $12 + add hl, bc + add [hl] + ld hl, $10 + add hl, bc + ld [hl], a + ld d, a + ld a, e + call GetStepVectorSign + ld hl, $13 + add hl, bc + add [hl] + ld hl, $11 + add hl, bc + ld [hl], a + ld e, a + push bc + call GetCoordTile + pop bc + ld hl, $e + add hl, bc + ld [hl], a + ret + +AddStepVector: ; 46b0 (1:46b0) + call GetStepVector + ld hl, $17 + add hl, bc + ld a, [hl] + add d + ld [hl], a + ld hl, $18 + add hl, bc + ld a, [hl] + add e + ld [hl], a + ret + +GetStepVector: ; 46c2 (1:46c2) + ld hl, $7 + 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 + +StepVectors: ; 46d9 +; 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 + +GetStepVectorSign: ; 4709 (1:4709) + add a + ret z + ld a, $1 + ret nc + ld a, $ff + ret + +UpdatePlayerStep: + ld hl, $7 + add hl, bc + ld a, [hl] + and $3 + ld [wPlayerStepDirection], a + call AddStepVector + ld a, [wPlayerStepVectorX] + add d + ld [wPlayerStepVectorX], a + ld a, [wPlayerStepVectorY] + add e + ld [wPlayerStepVectorY], a + ld hl, wPlayerStepFlags + set 5, [hl] + ret + +Function4732: + push bc + ld e, a + ld d, $0 + ld hl, $1 + add hl, bc + ld a, [hl] + call GetMapObject + add hl, de + ld a, [hl] + pop bc + ret + +RestoreDefaultMovement: + ld hl, $1 + add hl, bc + ld a, [hl] + cp $ff + jr z, .asm_4756 + push bc + call GetMapObject + ld hl, $4 + add hl, bc + ld a, [hl] + pop bc + ret + +.asm_4756 + ld a, $6 + ret + +ClearObjectMovementByteIndex: + ld hl, $1b + add hl, bc + ld [hl], $0 + ret + +IncrementObjectMovementByteIndex: + ld hl, $1b + add hl, bc + inc [hl] + ret + +DecrementObjectMovementByteIndex: + ld hl, $1b + add hl, bc + dec [hl] + ret + +MovementAnonymousJumptable: + ld hl, $1b + add hl, bc + ld a, [hl] + pop hl + rst JumpTable + ret + +ClearObjectStructField28: + ld hl, $1c + add hl, bc + ld [hl], $0 + ret + +IncrementObjectStructField28: + ld hl, $1c + add hl, bc + inc [hl] + ret + +Object28AnonymousJumptable: + ld hl, $1c + add hl, bc + ld a, [hl] + pop hl + rst JumpTable + ret + +GetValueObjectStructField28: + ld hl, $1c + add hl, bc + ld a, [hl] + ret + +SetValueObjectStructField28: + ld hl, $1c + add hl, bc + ld [hl], a + ret + +ObjectMovementReset: + dr $4795, $47b6 +Function47b6: + dr $47b6, $557f +Function557f:: + dr $557f, $5730 +Function5730:: + dr $5730, $5795 +StopFollow:: + dr $5795, $5896 +UpdateSprites_:: + dr $5896, $58c5 |