shithub: pokecrystal

ref: 93a129eb6dc261faccaf2b2d58daf3db204ab3ba
dir: /engine/movement.asm/

View raw version
MovementPointers: ; 5075
	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_half_step_down        ; 04
	dw Movement_half_step_up          ; 05
	dw Movement_half_step_left        ; 06
	dw Movement_half_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_38                    ; 38
	dw Movement_39                    ; 39
	dw Movement_remove_fixed_facing   ; 3a
	dw Movement_fix_facing            ; 3b
	dw Movement_show_person           ; 3c
	dw Movement_hide_person           ; 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_person         ; 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_56                    ; 56
	dw Movement_rock_smash            ; 57
	dw Movement_return_dig            ; 58
	dw Movement_59                    ; 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_59: ; 513e
	ld hl, OBJECT_STEP_TYPE
	add hl, bc
	ld [hl], STEP_TYPE_19
	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], PERSON_ACTION_SPIN
	call GetMovementByte
	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 GetMovementByte
	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], PERSON_ACTION_FISHING
	ld hl, OBJECT_STEP_TYPE
	add hl, bc
	ld [hl], STEP_TYPE_GOT_BITE
	ret
; 5196

Movement_rock_smash: ; 5196
	call GetMovementByte
	ld hl, OBJECT_STEP_DURATION
	add hl, bc
	ld [hl], a
	ld hl, OBJECT_ACTION
	add hl, bc
	ld [hl], PERSON_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], PERSON_ACTION_FISHING
	ld hl, OBJECT_STEP_TYPE
	add hl, bc
	ld [hl], STEP_TYPE_STANDING
	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, VramState
	res 7, [hl]

	ld hl, OBJECT_STEP_TYPE
	add hl, bc
	ld [hl], STEP_TYPE_STANDING
	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 GetMovementByte
	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, VramState
	res 7, [hl]
	ret
; 51fd

Movement_remove_person: ; 51fd
	call Function4357
	ld hl, wObjectFollow_Leader
	ld a, [hMapObjectIndexBuffer]
	cp [hl]
	jr nz, .not_leading
	ld [hl], -1

.not_leading
	ld hl, VramState
	res 7, [hl]
	ret
; 5210

Movement_4b: ; 5210
	ld hl, OBJECT_ACTION
	add hl, bc
	ld [hl], PERSON_ACTION_STAND

	ld hl, OBJECT_STEP_TYPE
	add hl, bc
	ld [hl], STEP_TYPE_04

	ld hl, VramState
	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 GetMovementByte
	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], PERSON_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], PERSON_ACTION_BUMP

	ld hl, OBJECT_DIRECTION_WALKING
	add hl, bc
	ld [hl], STANDING
	ret
; 5279

Movement_56: ; 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], PERSON_ACTION_0B

	ld hl, OBJECT_DIRECTION_WALKING
	add hl, bc
	ld [hl], STANDING
	ret
; 5293

Movement_38: ; 5293
	ld hl, OBJECT_FLAGS1
	add hl, bc
	res SLIDING, [hl]
	jp ContinueReadingMovement
; 529c

Movement_39: ; 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_person: ; 52b7
	ld hl, OBJECT_FLAGS1
	add hl, bc
	res INVISIBLE, [hl]
	jp ContinueReadingMovement
; 52c0

Movement_hide_person: ; 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 GetMovementByte
	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], PERSON_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_half_step_down: ; 53f0
	ld a, OW_DOWN
	jr HalfStep

Movement_half_step_up: ; 53f4
	ld a, OW_UP
	jr HalfStep

Movement_half_step_left: ; 53f8
	ld a, OW_LEFT
	jr HalfStep

Movement_half_step_right: ; 53fc
	ld a, OW_RIGHT
	jr HalfStep

HalfStep: ; 5400
	ld hl, OBJECT_29
	add hl, bc
	ld [hl], a

	ld hl, OBJECT_ACTION
	add hl, bc
	ld [hl], PERSON_ACTION_STEP

	ld hl, OBJECT_STEP_TYPE
	add hl, bc
	ld [hl], STEP_TYPE_HALF_STEP
	ret
; 5412

NormalStep: ; 5412
	call Function4690
	call Function463f
	ld hl, OBJECT_ACTION
	add hl, bc
	ld [hl], PERSON_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 Function4690
	call Function463f

	ld hl, OBJECT_ACTION
	add hl, bc
	ld [hl], PERSON_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 Function4690
	call Function463f

	ld hl, OBJECT_ACTION
	add hl, bc
	ld [hl], PERSON_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 Function4690
	ld hl, OBJECT_31
	add hl, bc
	ld [hl], $0

	ld hl, OBJECT_FLAGS2
	add hl, bc
	res 3, [hl]

	ld hl, OBJECT_ACTION
	add hl, bc
	ld [hl], PERSON_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