diff options
Diffstat (limited to 'engine/overworld/movement.asm')
-rw-r--r-- | engine/overworld/movement.asm | 864 |
1 files changed, 864 insertions, 0 deletions
diff --git a/engine/overworld/movement.asm b/engine/overworld/movement.asm new file mode 100644 index 000000000..3dbb0b83a --- /dev/null +++ b/engine/overworld/movement.asm @@ -0,0 +1,864 @@ +MovementPointers: ; 5075 +; entries correspond to macros/scripts/movement.asm enumeration + dw Movement_turn_head_down ; 00 + dw Movement_turn_head_up ; 01 + dw Movement_turn_head_left ; 02 + dw Movement_turn_head_right ; 03 + dw Movement_turn_step_down ; 04 + dw Movement_turn_step_up ; 05 + dw Movement_turn_step_left ; 06 + dw Movement_turn_step_right ; 07 + dw Movement_slow_step_down ; 08 + dw Movement_slow_step_up ; 09 + dw Movement_slow_step_left ; 0a + dw Movement_slow_step_right ; 0b + dw Movement_step_down ; 0c + dw Movement_step_up ; 0d + dw Movement_step_left ; 0e + dw Movement_step_right ; 0f + dw Movement_big_step_down ; 10 + dw Movement_big_step_up ; 11 + dw Movement_big_step_left ; 12 + dw Movement_big_step_right ; 13 + dw Movement_slow_slide_step_down ; 14 + dw Movement_slow_slide_step_up ; 15 + dw Movement_slow_slide_step_left ; 16 + dw Movement_slow_slide_step_right ; 17 + dw Movement_slide_step_down ; 18 + dw Movement_slide_step_up ; 19 + dw Movement_slide_step_left ; 1a + dw Movement_slide_step_right ; 1b + dw Movement_fast_slide_step_down ; 1c + dw Movement_fast_slide_step_up ; 1d + dw Movement_fast_slide_step_left ; 1e + dw Movement_fast_slide_step_right ; 1f + dw Movement_turn_away_down ; 20 + dw Movement_turn_away_up ; 21 + dw Movement_turn_away_left ; 22 + dw Movement_turn_away_right ; 23 + dw Movement_turn_in_down ; 24 + dw Movement_turn_in_up ; 25 + dw Movement_turn_in_left ; 26 + dw Movement_turn_in_right ; 27 + dw Movement_turn_waterfall_down ; 28 + dw Movement_turn_waterfall_up ; 29 + dw Movement_turn_waterfall_left ; 2a + dw Movement_turn_waterfall_right ; 2b + dw Movement_slow_jump_step_down ; 2c + dw Movement_slow_jump_step_up ; 2d + dw Movement_slow_jump_step_left ; 2e + dw Movement_slow_jump_step_right ; 2f + dw Movement_jump_step_down ; 30 + dw Movement_jump_step_up ; 31 + dw Movement_jump_step_left ; 32 + dw Movement_jump_step_right ; 33 + dw Movement_fast_jump_step_down ; 34 + dw Movement_fast_jump_step_up ; 35 + dw Movement_fast_jump_step_left ; 36 + dw Movement_fast_jump_step_right ; 37 + dw Movement_remove_sliding ; 38 + dw Movement_set_sliding ; 39 + dw Movement_remove_fixed_facing ; 3a + dw Movement_fix_facing ; 3b + dw Movement_show_object ; 3c + dw Movement_hide_object ; 3d + dw Movement_step_sleep_1 ; 3e + dw Movement_step_sleep_2 ; 3f + dw Movement_step_sleep_3 ; 40 + dw Movement_step_sleep_4 ; 41 + dw Movement_step_sleep_5 ; 42 + dw Movement_step_sleep_6 ; 43 + dw Movement_step_sleep_7 ; 44 + dw Movement_step_sleep_8 ; 45 + dw Movement_step_sleep ; 46 + dw Movement_step_end ; 47 + dw Movement_48 ; 48 + dw Movement_remove_object ; 49 + dw Movement_step_loop ; 4a + dw Movement_4b ; 4b + dw Movement_teleport_from ; 4c + dw Movement_teleport_to ; 4d + dw Movement_skyfall ; 4e + dw Movement_step_dig ; 4f + dw Movement_step_bump ; 50 + dw Movement_fish_got_bite ; 51 + dw Movement_fish_cast_rod ; 52 + dw Movement_hide_emote ; 53 + dw Movement_show_emote ; 54 + dw Movement_step_shake ; 55 + dw Movement_tree_shake ; 56 + dw Movement_rock_smash ; 57 + dw Movement_return_dig ; 58 + dw Movement_skyfall_top ; 59 +; 5129 + + +Movement_teleport_from: ; 5129 + ld hl, OBJECT_STEP_TYPE + add hl, bc + ld [hl], STEP_TYPE_TELEPORT_FROM + ret +; 5130 + +Movement_teleport_to: ; 5130 + ld hl, OBJECT_STEP_TYPE + add hl, bc + ld [hl], STEP_TYPE_TELEPORT_TO + ret +; 5137 + +Movement_skyfall: ; 5137 + ld hl, OBJECT_STEP_TYPE + add hl, bc + ld [hl], STEP_TYPE_SKYFALL + ret +; 513e + +Movement_skyfall_top: ; 513e + ld hl, OBJECT_STEP_TYPE + add hl, bc + ld [hl], STEP_TYPE_SKYFALL_TOP + ret +; 5145 + +Movement_step_dig: ; 5145 + call GetSpriteDirection + rlca + rlca + ld hl, OBJECT_STEP_FRAME + add hl, bc + ld [hl], a + ld hl, OBJECT_ACTION + add hl, bc + ld [hl], OBJECT_ACTION_SPIN + call JumpMovementPointer + ld hl, OBJECT_STEP_DURATION + add hl, bc + ld [hl], a + ld hl, OBJECT_STEP_TYPE + add hl, bc + ld [hl], STEP_TYPE_03 + ld hl, OBJECT_DIRECTION_WALKING + add hl, bc + ld [hl], STANDING + ret +; 516a + +Movement_return_dig: ; 516a + call GetSpriteDirection + rlca + rlca + ld hl, OBJECT_STEP_FRAME + add hl, bc + ld [hl], a + call JumpMovementPointer + ld hl, OBJECT_STEP_DURATION + add hl, bc + ld [hl], a + ld hl, OBJECT_DIRECTION_WALKING + add hl, bc + ld [hl], STANDING + ld hl, OBJECT_STEP_TYPE + add hl, bc + ld [hl], STEP_TYPE_RETURN_DIG + ret +; 5189 + +Movement_fish_got_bite: ; 5189 + ld hl, OBJECT_ACTION + add hl, bc + ld [hl], OBJECT_ACTION_FISHING + ld hl, OBJECT_STEP_TYPE + add hl, bc + ld [hl], STEP_TYPE_GOT_BITE + ret +; 5196 + +Movement_rock_smash: ; 5196 + call JumpMovementPointer + ld hl, OBJECT_STEP_DURATION + add hl, bc + ld [hl], a + ld hl, OBJECT_ACTION + add hl, bc + ld [hl], OBJECT_ACTION_STAND + ld hl, OBJECT_STEP_TYPE + add hl, bc + ld [hl], STEP_TYPE_ROCK_SMASH + ret +; 51ab + +Movement_fish_cast_rod: ; 51ab + ld hl, OBJECT_ACTION + add hl, bc + ld [hl], OBJECT_ACTION_FISHING + ld hl, OBJECT_STEP_TYPE + add hl, bc + ld [hl], STEP_TYPE_SLEEP + ret +; 51b8 + +Movement_step_loop: ; 51b8 + ld hl, OBJECT_MOVEMENT_BYTE_INDEX + add hl, bc + ld [hl], $0 + jp ContinueReadingMovement +; 51c1 + +Movement_step_end: ; 51c1 + call RestoreDefaultMovement + ld hl, OBJECT_MOVEMENTTYPE + add hl, bc + ld [hl], a + + ld hl, OBJECT_MOVEMENT_BYTE_INDEX + add hl, bc + ld [hl], $0 + + ld hl, wVramState + res 7, [hl] + + ld hl, OBJECT_STEP_TYPE + add hl, bc + ld [hl], STEP_TYPE_SLEEP + ret +; 51db + +Movement_48: ; 51db + call RestoreDefaultMovement + ld hl, OBJECT_MOVEMENTTYPE + add hl, bc + ld [hl], a + + ld hl, OBJECT_MOVEMENT_BYTE_INDEX + add hl, bc + ld [hl], $0 + + call JumpMovementPointer + ld hl, OBJECT_STEP_DURATION + add hl, bc + ld [hl], a + + ld hl, OBJECT_STEP_TYPE + add hl, bc + ld [hl], STEP_TYPE_03 + + ld hl, wVramState + res 7, [hl] + ret +; 51fd + +Movement_remove_object: ; 51fd + call DeleteMapObject + ld hl, wObjectFollow_Leader + ld a, [hMapObjectIndexBuffer] + cp [hl] + jr nz, .not_leading + ld [hl], -1 + +.not_leading + ld hl, wVramState + res 7, [hl] + ret +; 5210 + +Movement_4b: ; 5210 + ld hl, OBJECT_ACTION + add hl, bc + ld [hl], OBJECT_ACTION_STAND + + ld hl, OBJECT_STEP_TYPE + add hl, bc + ld [hl], STEP_TYPE_04 + + ld hl, wVramState + res 7, [hl] + ret +; 5222 + +Movement_step_sleep_1: ; 5222 + ld a, 1 + jr Movement_step_sleep_common + +Movement_step_sleep_2: ; 5226 + ld a, 2 + jr Movement_step_sleep_common + +Movement_step_sleep_3: ; 522a + ld a, 3 + jr Movement_step_sleep_common + +Movement_step_sleep_4: ; 522e + ld a, 4 + jr Movement_step_sleep_common + +Movement_step_sleep_5: ; 5232 + ld a, 5 + jr Movement_step_sleep_common + +Movement_step_sleep_6: ; 5236 + ld a, 6 + jr Movement_step_sleep_common + +Movement_step_sleep_7: ; 523a + ld a, 7 + jr Movement_step_sleep_common + +Movement_step_sleep_8: ; 523e + ld a, 8 + jr Movement_step_sleep_common + +Movement_step_sleep: ; 5242 +; parameters: +; duration (DecimalParam) + + call JumpMovementPointer + jr Movement_step_sleep_common + +Movement_step_sleep_common: ; 5247 + ld hl, OBJECT_STEP_DURATION + add hl, bc + ld [hl], a + + ld hl, OBJECT_STEP_TYPE + add hl, bc + ld [hl], STEP_TYPE_03 + + ld hl, OBJECT_ACTION + add hl, bc + ld [hl], OBJECT_ACTION_STAND + + ld hl, OBJECT_DIRECTION_WALKING + add hl, bc + ld [hl], STANDING + ret +; 525f + +Movement_step_bump: ; 525f + ld a, 1 + ld hl, OBJECT_STEP_DURATION + add hl, bc + ld [hl], a + + ld hl, OBJECT_STEP_TYPE + add hl, bc + ld [hl], STEP_TYPE_BUMP + + ld hl, OBJECT_ACTION + add hl, bc + ld [hl], OBJECT_ACTION_BUMP + + ld hl, OBJECT_DIRECTION_WALKING + add hl, bc + ld [hl], STANDING + ret +; 5279 + +Movement_tree_shake: ; 5279 + ld a, 24 + ld hl, OBJECT_STEP_DURATION + add hl, bc + ld [hl], a + + ld hl, OBJECT_STEP_TYPE + add hl, bc + ld [hl], STEP_TYPE_03 + + ld hl, OBJECT_ACTION + add hl, bc + ld [hl], OBJECT_ACTION_WEIRD_TREE + + ld hl, OBJECT_DIRECTION_WALKING + add hl, bc + ld [hl], STANDING + ret +; 5293 + +Movement_remove_sliding: ; 5293 + ld hl, OBJECT_FLAGS1 + add hl, bc + res SLIDING, [hl] + jp ContinueReadingMovement +; 529c + +Movement_set_sliding: ; 529c + ld hl, OBJECT_FLAGS1 + add hl, bc + set SLIDING, [hl] + jp ContinueReadingMovement +; 52a5 + +Movement_remove_fixed_facing: ; 52a5 + ld hl, OBJECT_FLAGS1 + add hl, bc + res FIXED_FACING, [hl] + jp ContinueReadingMovement +; 52ae + +Movement_fix_facing: ; 52ae + ld hl, OBJECT_FLAGS1 + add hl, bc + set FIXED_FACING, [hl] + jp ContinueReadingMovement +; 52b7 + +Movement_show_object: ; 52b7 + ld hl, OBJECT_FLAGS1 + add hl, bc + res INVISIBLE, [hl] + jp ContinueReadingMovement +; 52c0 + +Movement_hide_object: ; 52c0 + ld hl, OBJECT_FLAGS1 + add hl, bc + set INVISIBLE, [hl] + jp ContinueReadingMovement +; 52c9 + +Movement_hide_emote: ; 52c9 + call DespawnEmote + jp ContinueReadingMovement +; 52cf + +Movement_show_emote: ; 52cf + call SpawnEmote + jp ContinueReadingMovement +; 52d5 + +Movement_step_shake: ; 52d5 +; parameters: +; displacement (DecimalParam) + + call JumpMovementPointer + call ShakeScreen + jp ContinueReadingMovement +; 52de + +Movement_turn_head_down: ; 52de + ld a, OW_DOWN + jr TurnHead + +Movement_turn_head_up: ; 52e2 + ld a, OW_UP + jr TurnHead + +Movement_turn_head_left: ; 52e6 + ld a, OW_LEFT + jr TurnHead + +Movement_turn_head_right: ; 52ea + ld a, OW_RIGHT + jr TurnHead + +TurnHead: ; 52ee + ld hl, OBJECT_FACING + add hl, bc + ld [hl], a + + ld hl, OBJECT_ACTION + add hl, bc + ld [hl], OBJECT_ACTION_STAND + + ld hl, OBJECT_DIRECTION_WALKING + add hl, bc + ld [hl], STANDING + ret +; 5300 + +Movement_slow_step_down: ; 5300 + ld a, STEP_SLOW << 2 | DOWN + jp NormalStep +; 5305 + +Movement_slow_step_up: ; 5305 + ld a, STEP_SLOW << 2 | UP + jp NormalStep +; 530a + +Movement_slow_step_left: ; 530a + ld a, STEP_SLOW << 2 | LEFT + jp NormalStep +; 530f + +Movement_slow_step_right: ; 530f + ld a, STEP_SLOW << 2 | RIGHT + jp NormalStep +; 5314 + +Movement_step_down: ; 5314 + ld a, STEP_WALK << 2 | DOWN + jp NormalStep +; 5319 + +Movement_step_up: ; 5319 + ld a, STEP_WALK << 2 | UP + jp NormalStep +; 531e + +Movement_step_left: ; 531e + ld a, STEP_WALK << 2 | LEFT + jp NormalStep +; 5323 + +Movement_step_right: ; 5323 + ld a, STEP_WALK << 2 | RIGHT + jp NormalStep +; 5328 + +Movement_big_step_down: ; 5328 + ld a, STEP_BIKE << 2 | DOWN + jp NormalStep +; 532d + +Movement_big_step_up: ; 532d + ld a, STEP_BIKE << 2 | UP + jp NormalStep +; 5332 + +Movement_big_step_left: ; 5332 + ld a, STEP_BIKE << 2 | LEFT + jp NormalStep +; 5337 + +Movement_big_step_right: ; 5337 + ld a, STEP_BIKE << 2 | RIGHT + jp NormalStep +; 533c + + +Movement_turn_away_down: ; 533c + ld a, STEP_SLOW << 2 | DOWN + jp TurningStep +; 5341 + +Movement_turn_away_up: ; 5341 + ld a, STEP_SLOW << 2 | UP + jp TurningStep +; 5346 + +Movement_turn_away_left: ; 5346 + ld a, STEP_SLOW << 2 | LEFT + jp TurningStep +; 534b + +Movement_turn_away_right: ; 534b + ld a, STEP_SLOW << 2 | RIGHT + jp TurningStep +; 5350 + +Movement_turn_in_down: ; 5350 + ld a, STEP_WALK << 2 | DOWN + jp TurningStep +; 5355 + +Movement_turn_in_up: ; 5355 + ld a, STEP_WALK << 2 | UP + jp TurningStep +; 535a + +Movement_turn_in_left: ; 535a + ld a, STEP_WALK << 2 | LEFT + jp TurningStep +; 535f + +Movement_turn_in_right: ; 535f + ld a, STEP_WALK << 2 | RIGHT + jp TurningStep +; 5364 + +Movement_turn_waterfall_down: ; 5364 + ld a, STEP_BIKE << 2 | DOWN + jp TurningStep +; 5369 + +Movement_turn_waterfall_up: ; 5369 + ld a, STEP_BIKE << 2 | UP + jp TurningStep +; 536e + +Movement_turn_waterfall_left: ; 536e + ld a, STEP_BIKE << 2 | LEFT + jp TurningStep +; 5373 + +Movement_turn_waterfall_right: ; 5373 + ld a, STEP_BIKE << 2 | RIGHT + jp TurningStep +; 5378 + + +Movement_slow_slide_step_down: ; 5378 + ld a, STEP_SLOW << 2 | DOWN + jp SlideStep +; 537d + +Movement_slow_slide_step_up: ; 537d + ld a, STEP_SLOW << 2 | UP + jp SlideStep +; 5382 + +Movement_slow_slide_step_left: ; 5382 + ld a, STEP_SLOW << 2 | LEFT + jp SlideStep +; 5387 + +Movement_slow_slide_step_right: ; 5387 + ld a, STEP_SLOW << 2 | RIGHT + jp SlideStep +; 538c + +Movement_slide_step_down: ; 538c + ld a, STEP_WALK << 2 | DOWN + jp SlideStep +; 5391 + +Movement_slide_step_up: ; 5391 + ld a, STEP_WALK << 2 | UP + jp SlideStep +; 5396 + +Movement_slide_step_left: ; 5396 + ld a, STEP_WALK << 2 | LEFT + jp SlideStep +; 539b + +Movement_slide_step_right: ; 539b + ld a, STEP_WALK << 2 | RIGHT + jp SlideStep +; 53a0 + +Movement_fast_slide_step_down: ; 53a0 + ld a, STEP_BIKE << 2 | DOWN + jp SlideStep +; 53a5 + +Movement_fast_slide_step_up: ; 53a5 + ld a, STEP_BIKE << 2 | UP + jp SlideStep +; 53aa + +Movement_fast_slide_step_left: ; 53aa + ld a, STEP_BIKE << 2 | LEFT + jp SlideStep +; 53af + +Movement_fast_slide_step_right: ; 53af + ld a, STEP_BIKE << 2 | RIGHT + jp SlideStep +; 53b4 + + +Movement_slow_jump_step_down: ; 53b4 + ld a, STEP_SLOW << 2 | DOWN + jp JumpStep +; 53b9 + +Movement_slow_jump_step_up: ; 53b9 + ld a, STEP_SLOW << 2 | UP + jp JumpStep +; 53be + +Movement_slow_jump_step_left: ; 53be + ld a, STEP_SLOW << 2 | LEFT + jp JumpStep +; 53c3 + +Movement_slow_jump_step_right: ; 53c3 + ld a, STEP_SLOW << 2 | RIGHT + jp JumpStep +; 53c8 + +Movement_jump_step_down: ; 53c8 + ld a, STEP_WALK << 2 | DOWN + jp JumpStep +; 53cd + +Movement_jump_step_up: ; 53cd + ld a, STEP_WALK << 2 | UP + jp JumpStep +; 53d2 + +Movement_jump_step_left: ; 53d2 + ld a, STEP_WALK << 2 | LEFT + jp JumpStep +; 53d7 + +Movement_jump_step_right: ; 53d7 + ld a, STEP_WALK << 2 | RIGHT + jp JumpStep +; 53dc + +Movement_fast_jump_step_down: ; 53dc + ld a, STEP_BIKE << 2 | DOWN + jp JumpStep +; 53e1 + +Movement_fast_jump_step_up: ; 53e1 + ld a, STEP_BIKE << 2 | UP + jp JumpStep +; 53e6 + +Movement_fast_jump_step_left: ; 53e6 + ld a, STEP_BIKE << 2 | LEFT + jp JumpStep +; 53eb + +Movement_fast_jump_step_right: ; 53eb + ld a, STEP_BIKE << 2 | RIGHT + jp JumpStep +; 53f0 + + +Movement_turn_step_down: ; 53f0 + ld a, OW_DOWN + jr TurnStep + +Movement_turn_step_up: ; 53f4 + ld a, OW_UP + jr TurnStep + +Movement_turn_step_left: ; 53f8 + ld a, OW_LEFT + jr TurnStep + +Movement_turn_step_right: ; 53fc + ld a, OW_RIGHT + jr TurnStep + +TurnStep: ; 5400 + ld hl, OBJECT_1D ; new facing + add hl, bc + ld [hl], a + + ld hl, OBJECT_ACTION + add hl, bc + ld [hl], OBJECT_ACTION_STEP + + ld hl, OBJECT_STEP_TYPE + add hl, bc + ld [hl], STEP_TYPE_HALF_STEP + ret +; 5412 + +NormalStep: ; 5412 + call InitStep + call UpdateTallGrassFlags + ld hl, OBJECT_ACTION + add hl, bc + ld [hl], OBJECT_ACTION_STEP + + ld hl, OBJECT_NEXT_TILE + add hl, bc + ld a, [hl] + call CheckSuperTallGrassTile + jr z, .shake_grass + + call CheckGrassTile + jr c, .skip_grass + +.shake_grass + call ShakeGrass + +.skip_grass + ld hl, wCenteredObject + ld a, [hMapObjectIndexBuffer] + cp [hl] + jr z, .player + + ld hl, OBJECT_STEP_TYPE + add hl, bc + ld [hl], STEP_TYPE_NPC_WALK + ret + +.player + ld hl, OBJECT_STEP_TYPE + add hl, bc + ld [hl], STEP_TYPE_PLAYER_WALK + ret +; 5446 + +TurningStep: ; 5446 + call InitStep + call UpdateTallGrassFlags + + ld hl, OBJECT_ACTION + add hl, bc + ld [hl], OBJECT_ACTION_SPIN + + ld hl, wCenteredObject + ld a, [hMapObjectIndexBuffer] + cp [hl] + jr z, .player + + ld hl, OBJECT_STEP_TYPE + add hl, bc + ld [hl], STEP_TYPE_NPC_WALK + ret + +.player + ld hl, OBJECT_STEP_TYPE + add hl, bc + ld [hl], STEP_TYPE_PLAYER_WALK + ret +; 5468 + + +SlideStep: ; 5468 + call InitStep + call UpdateTallGrassFlags + + ld hl, OBJECT_ACTION + add hl, bc + ld [hl], OBJECT_ACTION_STAND + + ld hl, wCenteredObject + ld a, [hMapObjectIndexBuffer] + cp [hl] + jr z, .player + + ld hl, OBJECT_STEP_TYPE + add hl, bc + ld [hl], STEP_TYPE_NPC_WALK + ret + +.player + ld hl, OBJECT_STEP_TYPE + add hl, bc + ld [hl], STEP_TYPE_PLAYER_WALK + ret +; 548a + + +JumpStep: ; 548a + call InitStep + ld hl, OBJECT_1F + add hl, bc + ld [hl], $0 + + ld hl, OBJECT_FLAGS2 + add hl, bc + res OVERHEAD, [hl] + + ld hl, OBJECT_ACTION + add hl, bc + ld [hl], OBJECT_ACTION_STEP + + call SpawnShadow + + ld hl, wCenteredObject + ld a, [hMapObjectIndexBuffer] + cp [hl] + jr z, .player + + ld hl, OBJECT_STEP_TYPE + add hl, bc + ld [hl], STEP_TYPE_NPC_JUMP + ret + +.player + ld hl, OBJECT_STEP_TYPE + add hl, bc + ld [hl], STEP_TYPE_PLAYER_JUMP + ret +; 54b8 |