pokecrystal-board/engine/map_objects.asm

3677 lines
56 KiB
NASM
Raw Normal View History

2015-02-11 14:13:22 -08:00
INCLUDE "engine/facings.asm"
2015-11-06 13:42:38 -08:00
SpriteMovementData:: ; 4273
2015-11-15 21:52:53 -08:00
sprite_movement_data: macro
db \1, \2, \3, \4, \5
dn \6, 0
endm
; function, facing, action, flags1, flags2, palette flags
2015-11-16 08:53:26 -08:00
sprite_movement_data SPRITEMOVEFN_00, DOWN, PERSON_ACTION_STAND, $02, $00, %0000 ; 00
sprite_movement_data SPRITEMOVEFN_STANDING, DOWN, PERSON_ACTION_STAND, $0c, $00, %0000 ; 01
sprite_movement_data SPRITEMOVEFN_RANDOM_WALK_XY, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 02
sprite_movement_data SPRITEMOVEFN_SLOW_RANDOM_SPIN, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 03
sprite_movement_data SPRITEMOVEFN_RANDOM_WALK_Y, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 04
sprite_movement_data SPRITEMOVEFN_RANDOM_WALK_X, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 05
sprite_movement_data SPRITEMOVEFN_STANDING, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 06
sprite_movement_data SPRITEMOVEFN_STANDING, UP, PERSON_ACTION_STAND, $00, $00, %0000 ; 07
sprite_movement_data SPRITEMOVEFN_STANDING, LEFT, PERSON_ACTION_STAND, $00, $00, %0000 ; 08
sprite_movement_data SPRITEMOVEFN_STANDING, RIGHT, PERSON_ACTION_STAND, $00, $00, %0000 ; 09
sprite_movement_data SPRITEMOVEFN_FAST_RANDOM_SPIN, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 0a
sprite_movement_data SPRITEMOVEFN_OBEY_DPAD, DOWN, PERSON_ACTION_STAND, $02, $00, %0000 ; 0b
sprite_movement_data SPRITEMOVEFN_08, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 0c
sprite_movement_data SPRITEMOVEFN_09, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 0d
sprite_movement_data SPRITEMOVEFN_0A, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 0e
sprite_movement_data SPRITEMOVEFN_0B, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 0f
sprite_movement_data SPRITEMOVEFN_0C, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 10
sprite_movement_data SPRITEMOVEFN_0D, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 11
sprite_movement_data SPRITEMOVEFN_0E, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 12
sprite_movement_data SPRITEMOVEFN_FOLLOW, DOWN, PERSON_ACTION_STAND, $02, $00, %0000 ; 13
sprite_movement_data SPRITEMOVEFN_SCRIPTED, DOWN, PERSON_ACTION_STAND, $02, $00, %0000 ; 14
2015-11-15 21:52:53 -08:00
sprite_movement_data SPRITEMOVEFN_BIG_SNORLAX, DOWN, PERSON_ACTION_09, $2e, $01, %1100 ; 15
sprite_movement_data SPRITEMOVEFN_BOUNCE, DOWN, PERSON_ACTION_0A, $2e, $00, %0000 ; 16
2015-11-16 08:53:26 -08:00
sprite_movement_data SPRITEMOVEFN_STANDING, DOWN, PERSON_ACTION_STAND, $0c, $00, %0000 ; 17
sprite_movement_data SPRITEMOVEFN_STANDING, DOWN, PERSON_ACTION_STAND, $2e, $10, %0000 ; 18
sprite_movement_data SPRITEMOVEFN_STRENGTH, DOWN, PERSON_ACTION_STAND, $2e, $00, %0100 ; 19
sprite_movement_data SPRITEMOVEFN_FOLLOWNOTEXACT, DOWN, PERSON_ACTION_STAND, $02, $00, %0000 ; 1a
2015-11-15 21:52:53 -08:00
sprite_movement_data SPRITEMOVEFN_SHADOW, DOWN, PERSON_ACTION_00, $8e, $01, %0000 ; 1b
2015-11-16 08:53:26 -08:00
sprite_movement_data SPRITEMOVEFN_EMOTE, DOWN, PERSON_ACTION_EMOTE, $8e, $02, %0000 ; 1c
2015-11-15 21:52:53 -08:00
sprite_movement_data SPRITEMOVEFN_SCREENSHAKE, DOWN, PERSON_ACTION_00, $82, $00, %0000 ; 1d
2015-11-16 08:53:26 -08:00
sprite_movement_data SPRITEMOVEFN_SPIN_COUNTERCLOCKWISE, LEFT, PERSON_ACTION_STAND, $00, $00, %0000 ; 1e
sprite_movement_data SPRITEMOVEFN_SPIN_CLOCKWISE, RIGHT, PERSON_ACTION_STAND, $00, $00, %0000 ; 1f
2015-11-15 21:52:53 -08:00
sprite_movement_data SPRITEMOVEFN_STRENGTH, DOWN, PERSON_ACTION_0C, $2e, $01, %1100 ; 20
sprite_movement_data SPRITEMOVEFN_STRENGTH, DOWN, PERSON_ACTION_0D, $2e, $01, %1100 ; 21
sprite_movement_data SPRITEMOVEFN_BOULDERDUST, DOWN, PERSON_ACTION_0E, $8e, $01, %0000 ; 22
sprite_movement_data SPRITEMOVEFN_GRASS, DOWN, PERSON_ACTION_0F, $8e, $02, %0000 ; 23
2015-11-16 08:53:26 -08:00
sprite_movement_data SPRITEMOVEFN_RANDOM_WALK_XY, DOWN, PERSON_ACTION_STAND, $00, $00, %0010 ; 24
sprite_movement_data SPRITEMOVEFN_00, DOWN, PERSON_ACTION_STAND, $00, $00, %0000 ; 25
2015-02-11 14:13:22 -08:00
; 4357
2015-12-17 12:14:51 -08:00
DeleteMapObject:: ; 4357
2015-02-11 14:13:22 -08:00
push bc
ld hl, OBJECT_MAP_OBJECT_INDEX
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
push af
ld h, b
ld l, c
ld bc, OBJECT_STRUCT_LENGTH
2015-02-11 14:13:22 -08:00
xor a
call ByteFill
pop af
cp -1
jr z, .ok
2015-02-11 14:13:22 -08:00
bit 7, a
jr nz, .ok
2015-02-11 14:13:22 -08:00
call GetMapObject
ld hl, OBJECT_SPRITE
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], -1
2015-02-11 14:13:22 -08:00
.ok
2015-02-11 14:13:22 -08:00
pop bc
ret
; 437b
Function437b: ; 437b
2015-12-17 12:14:51 -08:00
call .CheckObjectStillVisible
2015-02-11 14:13:22 -08:00
ret c
call Function43f3
call Function4427
ret
; 4386
2015-12-17 12:14:51 -08:00
.CheckObjectStillVisible: ; 4386
ld hl, OBJECT_FLAGS2
2015-02-11 14:13:22 -08:00
add hl, bc
res 6, [hl]
ld a, [XCoord]
ld e, a
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_NEXT_MAP_X
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
add 1
2015-02-11 14:13:22 -08:00
sub e
jr c, .ok
cp MAPOBJECT_SCREEN_WIDTH
jr nc, .ok
2015-02-11 14:13:22 -08:00
ld a, [YCoord]
ld e, a
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_NEXT_MAP_Y
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
add 1
2015-02-11 14:13:22 -08:00
sub e
jr c, .ok
cp MAPOBJECT_SCREEN_HEIGHT
jr nc, .ok
jr .yes
2015-02-11 14:13:22 -08:00
.ok
ld hl, OBJECT_FLAGS2
2015-02-11 14:13:22 -08:00
add hl, bc
set 6, [hl]
ld a, [XCoord]
ld e, a
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_INIT_X
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
add 1
2015-02-11 14:13:22 -08:00
sub e
jr c, .ok2
cp MAPOBJECT_SCREEN_WIDTH
jr nc, .ok2
2015-02-11 14:13:22 -08:00
ld a, [YCoord]
ld e, a
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_INIT_Y
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
add 1
2015-02-11 14:13:22 -08:00
sub e
jr c, .ok2
cp MAPOBJECT_SCREEN_HEIGHT
jr nc, .ok2
2015-02-11 14:13:22 -08:00
.yes
2015-02-11 14:13:22 -08:00
and a
ret
.ok2
ld hl, OBJECT_FLAGS1
2015-02-11 14:13:22 -08:00
add hl, bc
bit 1, [hl]
jr nz, .yes2
2015-12-17 12:14:51 -08:00
call DeleteMapObject
2015-02-11 14:13:22 -08:00
scf
ret
.yes2
ld hl, OBJECT_FLAGS2
2015-02-11 14:13:22 -08:00
add hl, bc
set 6, [hl]
and a
ret
; 43f3
Function43f3: ; 43f3
ld hl, OBJECT_STEP_TYPE
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
and a
jr z, .zero
ld hl, OBJECT_FLAGS2
2015-02-11 14:13:22 -08:00
add hl, bc
bit 5, [hl]
2015-10-31 18:05:02 -07:00
jr nz, .bit5
2015-12-17 12:14:51 -08:00
cp STEP_TYPE_SLEEP
jr z, .one
jr .ok
2015-02-11 14:13:22 -08:00
.zero
2015-12-17 12:14:51 -08:00
call ObjectMovementReset
ld hl, OBJECT_FLAGS2
2015-02-11 14:13:22 -08:00
add hl, bc
bit 5, [hl]
2015-10-31 18:05:02 -07:00
jr nz, .bit5
2015-02-11 14:13:22 -08:00
.one
2015-12-17 12:14:51 -08:00
call MapObjectMovementPattern
ld hl, OBJECT_STEP_TYPE
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
and a
ret z
2015-12-17 12:14:51 -08:00
cp STEP_TYPE_SLEEP
2015-02-11 14:13:22 -08:00
ret z
.ok
2015-02-11 14:13:22 -08:00
ld hl, Pointers4b45
rst JumpTable
ret
2015-10-31 18:05:02 -07:00
.bit5
2015-02-11 14:13:22 -08:00
ret
; 4427
Function4427: ; 4427
ld hl, OBJECT_FLAGS1
2015-02-11 14:13:22 -08:00
add hl, bc
2015-11-15 18:28:15 -08:00
bit INVISIBLE, [hl]
jr nz, SetFacingStanding
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_FLAGS2
2015-02-11 14:13:22 -08:00
add hl, bc
bit 6, [hl]
jr nz, SetFacingStanding
2015-02-11 14:13:22 -08:00
bit 5, [hl]
jr nz, Function4448
ld de, Pointers445f
jr Function444d
; 4440
Function4440: ; 4440
ld hl, OBJECT_FLAGS1
2015-02-11 14:13:22 -08:00
add hl, bc
2015-11-15 18:28:15 -08:00
bit INVISIBLE, [hl]
jr nz, SetFacingStanding
2015-02-11 14:13:22 -08:00
Function4448: ; 4448
ld de, Pointers445f + 2
jr Function444d
; 444d
Function444d: ; 444d
2015-11-14 11:41:47 -08:00
; call [4 * ObjectStructs[ObjInd, OBJECT_ACTION] + de]
ld hl, OBJECT_ACTION
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
ld l, a
ld h, 0
rept 2
add hl,hl
endr
2015-02-11 14:13:22 -08:00
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
call _hl_
ret
; 445f
Pointers445f: ; 445f
dw SetFacingStanding, SetFacingStanding ; 00
2015-11-16 08:53:26 -08:00
dw Function44b5, SetFacingCurrent ; 01 standing?
dw Function44c1, SetFacingCurrent ; 02 walking?
dw Function4508, SetFacingCurrent ; 03 bumping?
dw Function4529, SetFacingCurrent ; 04
dw Function4539, SetFacingStanding ; 05
dw Function456e, Function456e ; 06
dw Function457b, SetFacingStanding ; 07
dw Function4582, Function4582 ; 08
dw Function4589, Function4589 ; 09
dw Function4590, Function45a4 ; 0a
dw Function45ab, SetFacingCurrent ; 0c
dw Function45be, Function45be ; 0b
dw Function45c5, Function45c5 ; 0d
dw Function45da, SetFacingStanding ; 0e
dw Function45ed, SetFacingStanding ; 0f
dw Function44e4, SetFacingCurrent ; 10
2015-02-11 14:13:22 -08:00
; 44a3
SetFacingStanding: ; 44a3
ld hl, OBJECT_FACING_STEP
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], STANDING
2015-02-11 14:13:22 -08:00
ret
; 44aa
SetFacingCurrent: ; 44aa
2015-02-11 14:13:22 -08:00
call GetSpriteDirection
2015-11-14 11:41:47 -08:00
or 0 ; useless
ld hl, OBJECT_FACING_STEP
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], a
ret
; 44b5
Function44b5: ; 44b5
ld hl, OBJECT_FACING_STEP
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
and 1
2015-02-11 14:13:22 -08:00
jr nz, Function44c1
jp SetFacingCurrent
2015-02-11 14:13:22 -08:00
; 44c1
Function44c1: ; 44c1
ld hl, OBJECT_FLAGS1
2015-02-11 14:13:22 -08:00
add hl, bc
2015-11-15 18:28:15 -08:00
bit SLIDING, [hl]
jp nz, SetFacingCurrent
2015-11-15 18:28:15 -08:00
ld hl, OBJECT_STEP_FRAME
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
inc a
and %00001111
2015-02-11 14:13:22 -08:00
ld [hl], a
2015-02-11 14:13:22 -08:00
rrca
rrca
and %00000011
2015-02-11 14:13:22 -08:00
ld d, a
2015-11-15 18:28:15 -08:00
2015-02-11 14:13:22 -08:00
call GetSpriteDirection
or 0 ; useless
2015-02-11 14:13:22 -08:00
or d
ld hl, OBJECT_FACING_STEP
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], a
ret
; 44e4
Function44e4: ; 44e4
ld hl, OBJECT_FLAGS1
2015-02-11 14:13:22 -08:00
add hl, bc
2015-11-15 18:28:15 -08:00
bit SLIDING, [hl]
jp nz, SetFacingCurrent
2015-11-15 18:28:15 -08:00
ld hl, OBJECT_STEP_FRAME
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
add 2
and %00001111
2015-02-11 14:13:22 -08:00
ld [hl], a
2015-11-15 18:28:15 -08:00
2015-02-11 14:13:22 -08:00
rrca
rrca
and %00000011
2015-02-11 14:13:22 -08:00
ld d, a
2015-11-15 18:28:15 -08:00
2015-02-11 14:13:22 -08:00
call GetSpriteDirection
or 0 ; useless
2015-02-11 14:13:22 -08:00
or d
ld hl, OBJECT_FACING_STEP
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], a
ret
; 4508
Function4508: ; 4508
ld hl, OBJECT_FLAGS1
2015-02-11 14:13:22 -08:00
add hl, bc
2015-11-15 18:28:15 -08:00
bit SLIDING, [hl]
jp nz, SetFacingCurrent
2015-11-15 18:28:15 -08:00
ld hl, OBJECT_STEP_FRAME
2015-02-11 14:13:22 -08:00
add hl, bc
inc [hl]
2015-11-15 18:28:15 -08:00
2015-02-11 14:13:22 -08:00
ld a, [hl]
rrca
rrca
rrca
and %00000011
2015-02-11 14:13:22 -08:00
ld d, a
2015-11-15 18:28:15 -08:00
2015-02-11 14:13:22 -08:00
call GetSpriteDirection
or 0 ; useless
2015-02-11 14:13:22 -08:00
or d
ld hl, OBJECT_FACING_STEP
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], a
ret
; 4529
Function4529: ; 4529
call Function453f
ld hl, OBJECT_FACING
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
or 0 ; useless
ld hl, OBJECT_FACING_STEP
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], a
ret
; 4539
Function4539: ; 4539
call Function453f
jp SetFacingStanding
2015-02-11 14:13:22 -08:00
; 453f
Function453f: ; 453f
2015-11-15 18:28:15 -08:00
ld hl, OBJECT_STEP_FRAME
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
and %11110000
2015-02-11 14:13:22 -08:00
ld e, a
2015-11-15 18:28:15 -08:00
2015-02-11 14:13:22 -08:00
ld a, [hl]
inc a
and %00001111
2015-02-11 14:13:22 -08:00
ld d, a
cp 4
jr c, .ok
2015-11-15 18:28:15 -08:00
2015-02-11 14:13:22 -08:00
ld d, 0
ld a, e
add $10
and %00110000
2015-02-11 14:13:22 -08:00
ld e, a
.ok
2015-02-11 14:13:22 -08:00
ld a, d
or e
ld [hl], a
2015-11-15 18:28:15 -08:00
2015-02-11 14:13:22 -08:00
swap e
ld d, 0
ld hl, .Directions
add hl, de
ld a, [hl]
ld hl, OBJECT_FACING
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], a
ret
; 456a
.Directions ; 456a
db OW_DOWN, OW_RIGHT, OW_UP, OW_LEFT
2015-02-11 14:13:22 -08:00
; 456e
Function456e: ; 456e
call GetSpriteDirection
rrca
rrca
add $10
ld hl, OBJECT_FACING_STEP
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], a
ret
; 457b
Function457b: ; 457b
ld hl, OBJECT_FACING_STEP
2015-02-11 14:13:22 -08:00
add hl, bc
2015-11-15 18:28:15 -08:00
ld [hl], FACING_15
2015-02-11 14:13:22 -08:00
ret
; 4582
2015-11-16 08:53:26 -08:00
Function4582: ; 4582 emote
ld hl, OBJECT_FACING_STEP
2015-02-11 14:13:22 -08:00
add hl, bc
2015-11-16 08:53:26 -08:00
ld [hl], FACING_EMOTE
2015-02-11 14:13:22 -08:00
ret
; 4589
Function4589: ; 4589
ld hl, OBJECT_FACING_STEP
2015-02-11 14:13:22 -08:00
add hl, bc
2015-11-15 18:28:15 -08:00
ld [hl], FACING_17
2015-02-11 14:13:22 -08:00
ret
; 4590
Function4590: ; 4590
2015-11-15 18:28:15 -08:00
ld hl, OBJECT_STEP_FRAME
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
inc a
and %00001111
2015-02-11 14:13:22 -08:00
ld [hl], a
and %00001000
2015-02-11 14:13:22 -08:00
jr z, Function45a4
ld hl, OBJECT_FACING_STEP
2015-02-11 14:13:22 -08:00
add hl, bc
2015-11-15 18:28:15 -08:00
ld [hl], FACING_04
2015-02-11 14:13:22 -08:00
ret
; 45a4
Function45a4: ; 45a4
ld hl, OBJECT_FACING_STEP
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], 0
2015-02-11 14:13:22 -08:00
ret
; 45ab
Function45ab: ; 45ab
2015-11-15 18:28:15 -08:00
ld hl, OBJECT_STEP_FRAME
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
inc a
ld [hl], a
and %00001100
2015-02-11 14:13:22 -08:00
rrca
rrca
add $18
ld hl, OBJECT_FACING_STEP
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], a
ret
; 45be
Function45be: ; 45be
ld hl, OBJECT_FACING_STEP
2015-02-11 14:13:22 -08:00
add hl, bc
2015-11-15 18:28:15 -08:00
ld [hl], FACING_16
2015-02-11 14:13:22 -08:00
ret
; 45c5
Function45c5: ; 45c5
ld a, [VariableSprites + SPRITE_BIG_DOLL - SPRITE_VARS]
2015-11-15 18:28:15 -08:00
ld d, FACING_17
cp SPRITE_BIG_SNORLAX
jr z, .ok
cp SPRITE_BIG_LAPRAS
jr z, .ok
2015-11-15 18:28:15 -08:00
ld d, FACING_16
2015-02-11 14:13:22 -08:00
.ok
ld hl, OBJECT_FACING_STEP
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], d
ret
; 45da
Function45da: ; 45da
2015-11-15 18:28:15 -08:00
ld hl, OBJECT_STEP_FRAME
2015-02-11 14:13:22 -08:00
add hl, bc
inc [hl]
ld a, [hl]
ld hl, OBJECT_FACING_STEP
2015-02-11 14:13:22 -08:00
add hl, bc
and 2
2015-11-15 18:28:15 -08:00
ld a, FACING_1C
jr z, .ok
2015-11-15 18:28:15 -08:00
inc a ; FACING_1D
.ok
2015-02-11 14:13:22 -08:00
ld [hl], a
ret
; 45ed
Function45ed: ; 45ed
2015-11-15 18:28:15 -08:00
ld hl, OBJECT_STEP_FRAME
2015-02-11 14:13:22 -08:00
add hl, bc
inc [hl]
ld a, [hl]
ld hl, OBJECT_FACING_STEP
2015-02-11 14:13:22 -08:00
add hl, bc
and 4
2015-11-15 18:28:15 -08:00
ld a, FACING_1E
jr z, .ok
2015-11-15 18:28:15 -08:00
inc a ; FACING_1F
2015-02-11 14:13:22 -08:00
.ok
2015-02-11 14:13:22 -08:00
ld [hl], a
ret
; 4600
2015-12-17 12:14:51 -08:00
CopyNextCoordsTileToStandingCoordsTile: ; 4600
2015-02-11 14:13:22 -08:00
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_NEXT_MAP_X
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_MAP_X
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], a
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_NEXT_MAP_Y
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_MAP_Y
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], a
ld hl, OBJECT_NEXT_TILE
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
ld hl, OBJECT_STANDING_TILE
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], a
call SetTallGrassFlags
ld hl, OBJECT_NEXT_TILE
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
call UselessAndA
2015-02-11 14:13:22 -08:00
ret
; 462a
Function462a: ; 462a
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_MAP_X
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_NEXT_MAP_X
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], a
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_MAP_Y
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_NEXT_MAP_Y
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], a
ret
; 463f
2015-12-17 12:14:51 -08:00
UpdateTallGrassFlags: ; 463f
ld hl, OBJECT_FLAGS2
2015-02-11 14:13:22 -08:00
add hl, bc
bit 3, [hl] ; is current tile grass?
jr z, .ok
ld hl, OBJECT_NEXT_TILE
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
call SetTallGrassFlags
2015-02-11 14:13:22 -08:00
.ok
ld hl, OBJECT_NEXT_TILE
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
call UselessAndA
ret c ; never happens
ld hl, OBJECT_STANDING_TILE
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
call UselessAndA
2015-02-11 14:13:22 -08:00
ret
; 4661
SetTallGrassFlags: ; 4661
call CheckSuperTallGrassTile
jr z, .set
call CheckGrassTile
jr c, .reset
2015-02-11 14:13:22 -08:00
.set
ld hl, OBJECT_FLAGS2
2015-02-11 14:13:22 -08:00
add hl, bc
set 3, [hl]
ret
.reset
ld hl, OBJECT_FLAGS2
2015-02-11 14:13:22 -08:00
add hl, bc
res 3, [hl]
ret
; 4679
UselessAndA: ; 4679
2015-02-11 14:13:22 -08:00
and a
ret
; 467b
2015-12-17 12:14:51 -08:00
EndSpriteMovement: ; 467b
2015-02-11 14:13:22 -08:00
xor a
2015-11-15 18:28:15 -08:00
ld hl, OBJECT_STEP_FRAME
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], a
2015-11-11 20:38:57 -08:00
ld hl, OBJECT_MOVEMENT_BYTE_INDEX
2015-02-11 14:13:22 -08:00
add hl, bc
2015-07-20 19:18:18 -07:00
rept 3
2015-02-11 14:13:22 -08:00
ld [hli], a
2015-07-20 19:18:18 -07:00
endr
2015-11-14 11:41:47 -08:00
ld [hl], a ; OBJECT_30
ld hl, OBJECT_DIRECTION_WALKING
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], STANDING
2015-02-11 14:13:22 -08:00
ret
; 4690
2015-12-17 12:14:51 -08:00
InitStep: ; 4690
ld hl, OBJECT_DIRECTION_WALKING
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], a
ld hl, OBJECT_FLAGS1
2015-02-11 14:13:22 -08:00
add hl, bc
2015-11-14 11:41:47 -08:00
bit FIXED_FACING, [hl]
jr nz, GetNextTile
2015-07-20 19:18:18 -07:00
rept 2
2015-02-11 14:13:22 -08:00
add a
2015-07-20 19:18:18 -07:00
endr
and %00001100
ld hl, OBJECT_FACING
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], a
GetNextTile: ; 46a6
2015-02-11 14:13:22 -08:00
call GetStepVector
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], a
ld a, d
2015-11-14 11:41:47 -08:00
call GetStepVectorSign
ld hl, OBJECT_MAP_X
2015-02-11 14:13:22 -08:00
add hl, bc
add [hl]
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_NEXT_MAP_X
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], a
ld d, a
ld a, e
2015-11-14 11:41:47 -08:00
call GetStepVectorSign
ld hl, OBJECT_MAP_Y
2015-02-11 14:13:22 -08:00
add hl, bc
add [hl]
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_NEXT_MAP_Y
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], a
ld e, a
push bc
2015-11-12 21:49:27 -08:00
call GetCoordTile
2015-02-11 14:13:22 -08:00
pop bc
ld hl, OBJECT_NEXT_TILE
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], a
ret
; 46d7
2015-11-14 11:41:47 -08:00
AddStepVector: ; 46d7
2015-02-11 14:13:22 -08:00
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_DIRECTION_WALKING
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
and %00001111
2015-07-20 19:18:18 -07:00
rept 2
2015-02-11 14:13:22 -08:00
add a
2015-07-20 19:18:18 -07:00
endr
2015-02-11 14:13:22 -08:00
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
2015-11-14 11:41:47 -08:00
GetStepVectorSign: ; 4730
2015-02-11 14:13:22 -08:00
add a
2015-11-14 11:41:47 -08:00
ret z ; 0 or 128
2015-02-11 14:13:22 -08:00
ld a, 1
2015-11-14 11:41:47 -08:00
ret nc ; 1 - 127
2015-02-11 14:13:22 -08:00
ld a, -1
2015-11-14 11:41:47 -08:00
ret ; 129 - 255
2015-02-11 14:13:22 -08:00
; 4738
2015-12-17 12:14:51 -08:00
UpdatePlayerStep: ; 4738
ld hl, OBJECT_DIRECTION_WALKING
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
and %00000011
ld [wPlayerStepDirection], a
2015-11-14 11:41:47 -08:00
call AddStepVector
ld a, [wPlayerStepVectorX]
2015-02-11 14:13:22 -08:00
add d
ld [wPlayerStepVectorX], a
ld a, [wPlayerStepVectorY]
2015-02-11 14:13:22 -08:00
add e
ld [wPlayerStepVectorY], a
ld hl, wPlayerStepFlags
2015-02-11 14:13:22 -08:00
set 5, [hl]
ret
; 4759
Function4759: ; 4759
push bc
ld e, a
ld d, 0
ld hl, OBJECT_MAP_OBJECT_INDEX
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
call GetMapObject
add hl, de
ld a, [hl]
pop bc
ret
; 4769
2015-11-02 08:15:32 -08:00
RestoreDefaultMovement: ; 4769
ld hl, OBJECT_MAP_OBJECT_INDEX
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
cp -1
jr z, .ok
2015-02-11 14:13:22 -08:00
push bc
call GetMapObject
2015-07-29 15:22:23 -07:00
ld hl, MAPOBJECT_MOVEMENT
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
pop bc
ret
.ok
ld a, 6
2015-02-11 14:13:22 -08:00
ret
; 4780
2015-11-14 11:41:47 -08:00
ClearObjectMovementByteIndex: ; 4780
2015-11-11 20:38:57 -08:00
ld hl, OBJECT_MOVEMENT_BYTE_INDEX
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], 0
2015-02-11 14:13:22 -08:00
ret
; 4787
2015-11-14 11:41:47 -08:00
IncrementObjectMovementByteIndex: ; 4787
2015-11-11 20:38:57 -08:00
ld hl, OBJECT_MOVEMENT_BYTE_INDEX
2015-02-11 14:13:22 -08:00
add hl, bc
inc [hl]
ret
; 478d
2015-11-14 11:41:47 -08:00
DecrementObjectMovementByteIndex: ; 478d
2015-11-11 20:38:57 -08:00
ld hl, OBJECT_MOVEMENT_BYTE_INDEX
2015-02-11 14:13:22 -08:00
add hl, bc
dec [hl]
ret
; 4793
MovementAnonymousJumptable: ; 4793
2015-11-11 20:38:57 -08:00
ld hl, OBJECT_MOVEMENT_BYTE_INDEX
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
pop hl
rst JumpTable
ret
; 479b
ClearObjectStructField28: ; 479b
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_28
add hl, bc
ld [hl], 0
2015-02-11 14:13:22 -08:00
ret
; 47a2
IncrementObjectStructField28: ; 47a2
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_28
add hl, bc
inc [hl]
ret
; 47a8
2015-11-14 11:41:47 -08:00
Object28AnonymousJumptable: ; 47a8
; anonymous jumptable
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_28
add hl, bc
ld a, [hl]
pop hl
rst JumpTable
ret
; 47b0
GetValueObjectStructField28: ; 47b0
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_28
add hl, bc
ld a, [hl]
ret
; 47b6
SetValueObjectStructField28: ; 47b6
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_28
add hl, bc
ld [hl], a
ret
; 47bc
2015-12-17 12:14:51 -08:00
ObjectMovementReset: ; 47bc
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_NEXT_MAP_X
2015-02-11 14:13:22 -08:00
add hl, bc
ld d, [hl]
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_NEXT_MAP_Y
2015-02-11 14:13:22 -08:00
add hl, bc
ld e, [hl]
push bc
2015-11-12 21:49:27 -08:00
call GetCoordTile
2015-02-11 14:13:22 -08:00
pop bc
ld hl, OBJECT_NEXT_TILE
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], a
2015-12-17 12:14:51 -08:00
call CopyNextCoordsTileToStandingCoordsTile
call EndSpriteMovement
ld hl, OBJECT_STEP_TYPE
2015-02-11 14:13:22 -08:00
add hl, bc
2015-12-17 12:14:51 -08:00
ld [hl], STEP_TYPE_SLEEP
2015-02-11 14:13:22 -08:00
ret
; 47dd
2015-12-17 12:14:51 -08:00
MapObjectMovementPattern: ; 47dd
call ClearObjectStructField28
2015-11-06 13:42:38 -08:00
call GetSpriteMovementFunction
2015-02-11 14:13:22 -08:00
ld a, [hl]
ld hl, .Pointers
rst JumpTable
ret
; 47e9
.Pointers ; 47e9
2015-12-17 12:14:51 -08:00
jumptable_start
jumptable .Null_00 ; 00
jumptable .RandomWalkY ; 01
jumptable .RandomWalkX ; 02
jumptable .RandomWalkXY ; 03
jumptable .RandomSpin1 ; 04
jumptable .RandomSpin2 ; 05
jumptable .Standing ; 06
jumptable .ObeyDPad ; 07
jumptable .Movement08 ; 08
jumptable .Movement09 ; 09
jumptable .Movement0a ; 0a
jumptable .Movement0b ; 0b
jumptable .Movement0c ; 0c
jumptable .Movement0d ; 0d
jumptable .Movement0e ; 0e
jumptable .Follow ; 0f
jumptable .Script ; 10
jumptable .Strength ; 11
jumptable .FollowNotExact ; 12
jumptable .MovementShadow ; 13
jumptable .MovementEmote ; 14
jumptable .MovementBigStanding ; 15
jumptable .MovementBouncing ; 16
jumptable .MovementScreenShake ; 17
jumptable .MovementSpinClockwise ; 18
jumptable .MovementSpinCounterclockwise ; 19
jumptable .MovementBoulderDust ; 1a
jumptable .MovementShakingGrass ; 1b
2015-02-11 14:13:22 -08:00
; 4821
2015-11-06 13:42:38 -08:00
.Null_00: ; 4821
2015-02-11 14:13:22 -08:00
ret
; 4822
2015-11-06 13:42:38 -08:00
.RandomWalkY: ; 4822
2015-02-11 14:13:22 -08:00
call Random
ld a, [hRandomAdd]
and %00000001
2015-11-06 13:42:38 -08:00
jp .RandomWalkContinue
2015-02-11 14:13:22 -08:00
; 482c
2015-11-06 13:42:38 -08:00
.RandomWalkX: ; 482c
2015-02-11 14:13:22 -08:00
call Random
ld a, [hRandomAdd]
and %00000001
or %00000010
2015-11-06 13:42:38 -08:00
jp .RandomWalkContinue
2015-02-11 14:13:22 -08:00
; 4838
2015-11-06 13:42:38 -08:00
.RandomWalkXY: ; 4838
2015-02-11 14:13:22 -08:00
call Random
ld a, [hRandomAdd]
and %00000011
2015-11-06 13:42:38 -08:00
jp .RandomWalkContinue
2015-02-11 14:13:22 -08:00
; 4842
2015-11-06 13:42:38 -08:00
.RandomSpin1: ; 4842
2015-02-11 14:13:22 -08:00
call Random
ld a, [hRandomAdd]
and %00001100
ld hl, OBJECT_FACING
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], a
2015-11-14 11:41:47 -08:00
jp RandomStepDuration_Slow
2015-02-11 14:13:22 -08:00
; 4851
2015-11-06 13:42:38 -08:00
.RandomSpin2: ; 4851
ld hl, OBJECT_FACING
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
and %00001100
2015-02-11 14:13:22 -08:00
ld d, a
call Random
ld a, [hRandomAdd]
and %00001100
2015-02-11 14:13:22 -08:00
cp d
jr nz, .keep
xor %00001100
2015-02-11 14:13:22 -08:00
.keep
2015-02-11 14:13:22 -08:00
ld [hl], a
2015-11-14 11:41:47 -08:00
jp RandomStepDuration_Fast
2015-02-11 14:13:22 -08:00
; 4869
2015-11-06 13:42:38 -08:00
.Standing: ; 4869
2015-02-11 14:13:22 -08:00
call Function462a
2015-12-17 12:14:51 -08:00
call EndSpriteMovement
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_ACTION
2015-02-11 14:13:22 -08:00
add hl, bc
2015-11-16 08:53:26 -08:00
ld [hl], PERSON_ACTION_STAND
ld hl, OBJECT_STEP_TYPE
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], STEP_TYPE_05
2015-02-11 14:13:22 -08:00
ret
; 487c
2015-11-06 13:42:38 -08:00
.ObeyDPad: ; 487c
2015-02-11 14:13:22 -08:00
ld hl, Function5000
2015-11-11 20:38:57 -08:00
jp HandleMovementData
2015-02-11 14:13:22 -08:00
; 4882
2015-11-06 13:42:38 -08:00
.Movement08: ; 4882
2015-02-11 14:13:22 -08:00
ld hl, Function5015
2015-11-11 20:38:57 -08:00
jp HandleMovementData
2015-02-11 14:13:22 -08:00
; 4888
2015-11-06 13:42:38 -08:00
.Movement09: ; 4888
2015-02-11 14:13:22 -08:00
ld hl, Function5026
2015-11-11 20:38:57 -08:00
jp HandleMovementData
2015-02-11 14:13:22 -08:00
; 488e
2015-11-06 13:42:38 -08:00
.Movement0a: ; 488e
2015-02-11 14:13:22 -08:00
jp Function5037
; 4891
2015-11-06 13:42:38 -08:00
.Movement0b: ; 4891
2015-02-11 14:13:22 -08:00
jp Function5037
; 4894
2015-11-06 13:42:38 -08:00
.Movement0c: ; 4894
2015-02-11 14:13:22 -08:00
jp Function5037
; 4897
2015-11-06 13:42:38 -08:00
.Movement0d: ; 4897
2015-02-11 14:13:22 -08:00
ld hl, Function5000
2015-11-11 20:38:57 -08:00
jp HandleMovementData
2015-02-11 14:13:22 -08:00
; 489d
2015-11-06 13:42:38 -08:00
.Movement0e: ; 489d
2015-02-11 14:13:22 -08:00
jp Function5037
; 48a0
2015-11-06 13:42:38 -08:00
.Follow: ; 48a0
2015-02-11 14:13:22 -08:00
ld hl, Function54e6
2015-11-11 20:38:57 -08:00
jp HandleMovementData
2015-02-11 14:13:22 -08:00
; 48a6
2015-11-06 13:42:38 -08:00
.Script: ; 48a6
ld hl, Function500e
2015-11-11 20:38:57 -08:00
jp HandleMovementData
2015-02-11 14:13:22 -08:00
; 48ac
2015-11-06 13:42:38 -08:00
.Strength: ; 48ac
call MovementAnonymousJumptable
2015-11-06 13:42:38 -08:00
dw .Strength_Start
dw .Strength_Stop
2015-02-11 14:13:22 -08:00
; 48b3
2015-11-06 13:42:38 -08:00
.Strength_Start: ; 48b3
ld hl, OBJECT_NEXT_TILE
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
call CheckPitTile
jr z, .on_pit
2015-11-06 13:42:38 -08:00
ld hl, OBJECT_FLAGS2
2015-02-11 14:13:22 -08:00
add hl, bc
bit 2, [hl]
res 2, [hl]
jr z, .ok
2015-11-06 13:42:38 -08:00
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_RANGE
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
and %00000011
or 0
2015-12-17 12:14:51 -08:00
call InitStep
2015-02-11 14:13:22 -08:00
call Function6ec1
jr c, .ok2
2015-11-06 13:42:38 -08:00
2015-02-11 14:13:22 -08:00
ld de, SFX_STRENGTH
call PlaySFX
2015-11-14 11:41:47 -08:00
call SpawnStrengthBoulderDust
2015-12-17 12:14:51 -08:00
call UpdateTallGrassFlags
ld hl, OBJECT_STEP_TYPE
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], STEP_TYPE_0F
2015-02-11 14:13:22 -08:00
ret
.ok2
2015-02-11 14:13:22 -08:00
call Function462a
.ok
ld hl, OBJECT_DIRECTION_WALKING
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], STANDING
2015-02-11 14:13:22 -08:00
ret
.on_pit
2015-11-14 11:41:47 -08:00
call IncrementObjectMovementByteIndex
2015-02-11 14:13:22 -08:00
2015-11-06 13:42:38 -08:00
.Strength_Stop: ; 48f8
ld hl, OBJECT_DIRECTION_WALKING
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], STANDING
2015-02-11 14:13:22 -08:00
ret
; 48ff
2015-11-08 10:27:26 -08:00
.FollowNotExact: ; 48ff
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_NEXT_MAP_X
2015-02-11 14:13:22 -08:00
add hl, bc
ld d, [hl]
2015-11-11 20:38:57 -08:00
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_NEXT_MAP_Y
2015-02-11 14:13:22 -08:00
add hl, bc
ld e, [hl]
2015-11-11 20:38:57 -08:00
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_RANGE
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
2015-11-11 20:38:57 -08:00
2015-02-11 14:13:22 -08:00
push bc
call GetObjectStruct
ld hl, OBJECT_DIRECTION_WALKING
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
cp STANDING
jr z, .standing
2015-11-11 20:38:57 -08:00
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_MAP_X
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
cp d
jr z, .equal
jr c, .less
ld a, 3
jr .done
2015-02-11 14:13:22 -08:00
.less
ld a, 2
jr .done
2015-02-11 14:13:22 -08:00
.equal
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_MAP_Y
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
cp e
jr z, .standing
jr c, .less2
ld a, 0
jr .done
2015-02-11 14:13:22 -08:00
.less2
ld a, 1
2015-02-11 14:13:22 -08:00
.done
2015-02-11 14:13:22 -08:00
ld d, a
ld hl, OBJECT_DIRECTION_WALKING
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
and %00001100
2015-02-11 14:13:22 -08:00
or d
pop bc
jp NormalStep
2015-02-11 14:13:22 -08:00
.standing
2015-02-11 14:13:22 -08:00
pop bc
ld hl, OBJECT_DIRECTION_WALKING
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], STANDING
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_ACTION
2015-02-11 14:13:22 -08:00
add hl, bc
2015-11-16 08:53:26 -08:00
ld [hl], PERSON_ACTION_STAND
2015-02-11 14:13:22 -08:00
ret
; 4958
2015-11-06 13:42:38 -08:00
.MovementBigStanding: ; 4958
2015-12-17 12:14:51 -08:00
call EndSpriteMovement
ld hl, OBJECT_DIRECTION_WALKING
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], STANDING
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_ACTION
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], PERSON_ACTION_09
ld hl, OBJECT_STEP_TYPE
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], STEP_TYPE_04
2015-02-11 14:13:22 -08:00
ret
; 496e
2015-11-06 13:42:38 -08:00
.MovementBouncing: ; 496e
2015-12-17 12:14:51 -08:00
call EndSpriteMovement
ld hl, OBJECT_DIRECTION_WALKING
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], STANDING
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_ACTION
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], PERSON_ACTION_0A
ld hl, OBJECT_STEP_TYPE
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], STEP_TYPE_04
2015-02-11 14:13:22 -08:00
ret
; 4984
2015-11-06 13:42:38 -08:00
.MovementSpinCounterclockwise: ; 4984
call MovementAnonymousJumptable
2015-11-06 13:42:38 -08:00
dw .MovementSpinInit
dw .MovementSpinRepeat
dw .MovementSpinTurnLeft
2015-02-11 14:13:22 -08:00
; 498d
2015-11-06 13:42:38 -08:00
.MovementSpinClockwise: ; 498d
call MovementAnonymousJumptable
2015-11-06 13:42:38 -08:00
dw .MovementSpinInit
dw .MovementSpinRepeat
dw .MovementSpinTurnRight
2015-02-11 14:13:22 -08:00
; 4996
2015-11-06 13:42:38 -08:00
.MovementSpinInit: ; 4996
2015-12-17 12:14:51 -08:00
call EndSpriteMovement
2015-11-14 11:41:47 -08:00
call IncrementObjectMovementByteIndex
2015-11-06 13:42:38 -08:00
.MovementSpinRepeat: ; 499c
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_ACTION
2015-02-11 14:13:22 -08:00
add hl, bc
2015-11-16 08:53:26 -08:00
ld [hl], PERSON_ACTION_STAND
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_RANGE
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
ld a, $10
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], a
ld hl, OBJECT_STEP_TYPE
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], STEP_TYPE_03
2015-11-14 11:41:47 -08:00
call IncrementObjectMovementByteIndex
2015-02-11 14:13:22 -08:00
ret
; 49b8
2015-11-06 13:42:38 -08:00
.MovementSpinTurnLeft: ; 49b8
ld de, .DirectionData_Counterclockwise
call .MovementSpinNextFacing
jr .MovementSpinCounterclockwise
2015-02-11 14:13:22 -08:00
; 49c0
2015-11-06 13:42:38 -08:00
.DirectionData_Counterclockwise ; 49c0
db OW_RIGHT, OW_LEFT, OW_DOWN, OW_UP
2015-02-11 14:13:22 -08:00
; 49c4
2015-11-06 13:42:38 -08:00
.MovementSpinTurnRight: ; 49c4
ld de, .DirectionData_Clockwise
call .MovementSpinNextFacing
jr .MovementSpinClockwise
2015-02-11 14:13:22 -08:00
; 49cc
2015-11-06 13:42:38 -08:00
.DirectionData_Clockwise ; 49cc
db OW_LEFT, OW_RIGHT, OW_UP, OW_DOWN
2015-02-11 14:13:22 -08:00
; 49d0
2015-11-06 13:42:38 -08:00
.MovementSpinNextFacing: ; 49d0
ld hl, OBJECT_FACING
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
and %00001100
2015-02-11 14:13:22 -08:00
rrca
rrca
push hl
ld l, a
ld h, 0
2015-02-11 14:13:22 -08:00
add hl, de
ld a, [hl]
pop hl
ld [hl], a
2015-11-14 11:41:47 -08:00
call DecrementObjectMovementByteIndex
2015-02-11 14:13:22 -08:00
ret
; 49e5
.MovementShadow: ; 49e5
2015-11-15 18:28:15 -08:00
call ._MovementShadow_Grass_Emote_BoulderDust
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_ACTION
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], PERSON_ACTION_07
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_STEP_DURATION
add hl, de
ld a, [hl]
inc a
add a
add 0
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], a
ld hl, OBJECT_DIRECTION_WALKING
2015-02-11 14:13:22 -08:00
add hl, de
ld a, [hl]
and 3
2015-12-17 12:14:51 -08:00
ld d, 1 * 8 + 6
cp DOWN
2015-11-06 13:42:38 -08:00
jr z, .ok_13
cp UP
2015-11-06 13:42:38 -08:00
jr z, .ok_13
2015-12-17 12:14:51 -08:00
ld d, 1 * 8 + 4
2015-02-11 14:13:22 -08:00
2015-11-06 13:42:38 -08:00
.ok_13
2015-02-11 14:13:22 -08:00
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_STEP_TYPE
2015-02-11 14:13:22 -08:00
add hl, bc
2015-12-17 12:14:51 -08:00
ld [hl], STEP_TYPE_TRACKING_OBJECT
2015-02-11 14:13:22 -08:00
ret
; 4a21
.MovementEmote: ; 4a21
2015-12-17 12:14:51 -08:00
call EndSpriteMovement
2015-11-15 18:28:15 -08:00
call ._MovementShadow_Grass_Emote_BoulderDust
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_ACTION
2015-02-11 14:13:22 -08:00
add hl, bc
2015-11-16 08:53:26 -08:00
ld [hl], PERSON_ACTION_EMOTE
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], 0
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_SPRITE_Y_OFFSET
add hl, bc
2015-12-17 12:14:51 -08:00
ld [hl], -2 * 8
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_SPRITE_X_OFFSET
add hl, bc
ld [hl], 0
ld hl, OBJECT_STEP_TYPE
2015-02-11 14:13:22 -08:00
add hl, bc
2015-12-17 12:14:51 -08:00
ld [hl], STEP_TYPE_TRACKING_OBJECT
2015-02-11 14:13:22 -08:00
ret
; 4a46
.MovementBoulderDust: ; 4a46
2015-12-17 12:14:51 -08:00
call EndSpriteMovement
2015-11-15 18:28:15 -08:00
call ._MovementShadow_Grass_Emote_BoulderDust
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_ACTION
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], PERSON_ACTION_0E
2015-02-11 14:13:22 -08:00
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_DIRECTION_WALKING
2015-02-11 14:13:22 -08:00
add hl, de
ld a, [hl]
and %00000011
2015-02-11 14:13:22 -08:00
ld e, a
ld d, 0
ld hl, .data_4a81
rept 2
add hl,de
endr
2015-02-11 14:13:22 -08:00
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_STEP_TYPE
2015-02-11 14:13:22 -08:00
add hl, bc
2015-12-17 12:14:51 -08:00
ld [hl], STEP_TYPE_TRACKING_OBJECT
2015-02-11 14:13:22 -08:00
ret
; 4a81
.data_4a81 ; 4a81
; x, y
db 0, -4
db 0, 8
db 6, 2
db -6, 2
; 4a89
.MovementShakingGrass: ; 4a89
2015-12-17 12:14:51 -08:00
call EndSpriteMovement
2015-11-15 18:28:15 -08:00
call ._MovementShadow_Grass_Emote_BoulderDust
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_ACTION
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], PERSON_ACTION_0F
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_STEP_DURATION
add hl, de
ld a, [hl]
add -1
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], a
ld hl, OBJECT_STEP_TYPE
2015-02-11 14:13:22 -08:00
add hl, bc
2015-12-17 12:14:51 -08:00
ld [hl], STEP_TYPE_TRACKING_OBJECT
2015-02-11 14:13:22 -08:00
ret
; 4aa8
2015-11-15 18:28:15 -08:00
._MovementShadow_Grass_Emote_BoulderDust: ; 4aa8
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_RANGE
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
push bc
call GetObjectStruct
2015-02-11 14:13:22 -08:00
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
.MovementScreenShake: ; 4abc
2015-12-17 12:14:51 -08:00
call EndSpriteMovement
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_ACTION
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], PERSON_ACTION_00
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_RANGE
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
call ._MovementScreenShake
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], e
ld hl, OBJECT_30
add hl, bc
ld [hl], a
ld hl, OBJECT_STEP_TYPE
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], STEP_TYPE_15
2015-02-11 14:13:22 -08:00
ret
; 4ade
._MovementScreenShake: ; 4ade
2015-02-11 14:13:22 -08:00
ld d, a
and %00111111
2015-02-11 14:13:22 -08:00
ld e, a
ld a, d
rlca
rlca
and %00000011
2015-02-11 14:13:22 -08:00
ld d, a
inc d
ld a, 1
.loop
2015-02-11 14:13:22 -08:00
dec d
ret z
add a
jr .loop
2015-02-11 14:13:22 -08:00
; 4af0
2015-11-06 13:42:38 -08:00
.RandomWalkContinue: ; 4af0
2015-12-17 12:14:51 -08:00
call InitStep
call Function6ec1 ; check whether the object can move in that direction
jr c, .NewDuration
2015-12-17 12:14:51 -08:00
call UpdateTallGrassFlags
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_ACTION
2015-02-11 14:13:22 -08:00
add hl, bc
2015-11-16 08:53:26 -08:00
ld [hl], PERSON_ACTION_STEP
2015-11-16 08:53:26 -08:00
ld hl, wCenteredObject
2015-11-02 08:15:32 -08:00
ld a, [hMapObjectIndexBuffer]
2015-02-11 14:13:22 -08:00
cp [hl]
2015-11-06 13:42:38 -08:00
jr z, .load_6
ld hl, OBJECT_STEP_TYPE
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], STEP_TYPE_07
2015-02-11 14:13:22 -08:00
ret
2015-11-06 13:42:38 -08:00
.load_6
ld hl, OBJECT_STEP_TYPE
2015-02-11 14:13:22 -08:00
add hl, bc
2015-11-16 08:53:26 -08:00
ld [hl], STEP_TYPE_PLAYER_WALK
2015-02-11 14:13:22 -08:00
ret
.NewDuration: ; 4b17
2015-12-17 12:14:51 -08:00
call EndSpriteMovement
2015-02-11 14:13:22 -08:00
call Function462a
2015-11-14 11:41:47 -08:00
RandomStepDuration_Slow: ; 4b1d
2015-02-11 14:13:22 -08:00
call Random
ld a, [hRandomAdd]
and %01111111
2015-11-14 11:41:47 -08:00
jr SetRandomStepDuration
2015-02-11 14:13:22 -08:00
; 4b26
2015-11-14 11:41:47 -08:00
RandomStepDuration_Fast: ; 4b26
2015-02-11 14:13:22 -08:00
call Random
ld a, [hRandomAdd]
and %00011111
2015-11-14 11:41:47 -08:00
SetRandomStepDuration: ; 4b2d
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], a
ld hl, OBJECT_DIRECTION_WALKING
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], STANDING
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_ACTION
2015-02-11 14:13:22 -08:00
add hl, bc
2015-11-16 08:53:26 -08:00
ld [hl], PERSON_ACTION_STAND
ld hl, OBJECT_STEP_TYPE
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], STEP_TYPE_03
2015-02-11 14:13:22 -08:00
ret
; 4b45
Pointers4b45: ; 4b45
; These pointers use OBJECT_STEP_TYPE. See constants/sprite_constants.asm
2015-12-17 12:14:51 -08:00
jumptable_start
jumptable ObjectMovementReset ; 00
jumptable MapObjectMovementPattern ; 01
jumptable NPCStep ; 02 npc walk
jumptable Function4ddd ; 03
jumptable Function4e21 ; 04
jumptable Function4e0c ; 05
jumptable PlayerStep ; 06 player walk
jumptable Function4e47 ; 07
jumptable NPCJump ; 08 npc jump step
jumptable PlayerJump ; 09 player jump step
jumptable PlayerOrNPCHalfStep ; 0a half step
jumptable Function4dff ; 0b
jumptable TeleportFrom ; 0c teleport from
jumptable TeleportTo ; 0d teleport to
jumptable Skyfall ; 0e skyfall
jumptable Function4ecd ; 0f
jumptable GotBiteStep ; 10
jumptable RockSmashStep ; 11
jumptable ReturnDigStep ; 12
jumptable Function4f04 ; 13
jumptable Function4f33 ; 14
jumptable Function4f33 ; 15
jumptable Function4f77 ; 16
jumptable Function4f7a ; 17
jumptable Function4df0 ; 18
jumptable SkyfallTop ; 19
2015-02-11 14:13:22 -08:00
; 4b79
Function4b79: ; 4b79
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
ret nz
ld hl, OBJECT_STEP_TYPE
2015-02-11 14:13:22 -08:00
add hl, bc
2015-12-17 12:14:51 -08:00
ld [hl], STEP_TYPE_SLEEP
2015-02-11 14:13:22 -08:00
ret
; 4b86
2015-12-17 12:14:51 -08:00
NPCJump: ; 4b86
2015-11-14 11:41:47 -08:00
call Object28AnonymousJumptable
; anonymous jumptable
2015-02-11 14:13:22 -08:00
dw Function4b8d
dw Function4ba9
; 4b8d
Function4b8d: ; 4b8d
2015-11-14 11:41:47 -08:00
call AddStepVector
2015-02-11 14:13:22 -08:00
call UpdateJumpPosition
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
ret nz
2015-12-17 12:14:51 -08:00
call CopyNextCoordsTileToStandingCoordsTile
call GetNextTile
ld hl, OBJECT_FLAGS2
2015-02-11 14:13:22 -08:00
add hl, bc
res 3, [hl]
call IncrementObjectStructField28
2015-02-11 14:13:22 -08:00
ret
; 4ba9
Function4ba9: ; 4ba9
2015-11-14 11:41:47 -08:00
call AddStepVector
2015-02-11 14:13:22 -08:00
call UpdateJumpPosition
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
ret nz
2015-12-17 12:14:51 -08:00
call CopyNextCoordsTileToStandingCoordsTile
ld hl, OBJECT_STEP_TYPE
2015-02-11 14:13:22 -08:00
add hl, bc
2015-12-17 12:14:51 -08:00
ld [hl], STEP_TYPE_SLEEP
2015-02-11 14:13:22 -08:00
ret
; 4bbf
2015-12-17 12:14:51 -08:00
PlayerJump: ; 4bbf
2015-11-14 11:41:47 -08:00
call Object28AnonymousJumptable
; anonymous jumptable
2015-12-17 12:14:51 -08:00
dw .initjump
dw .stepjump
dw .initland
dw .stepland
2015-02-11 14:13:22 -08:00
; 4bca
2015-12-17 12:14:51 -08:00
.initjump: ; 4bca
ld hl, wPlayerStepFlags
2015-02-11 14:13:22 -08:00
set 7, [hl]
call IncrementObjectStructField28
2015-12-17 12:14:51 -08:00
.stepjump: ; 4bd2
2015-02-11 14:13:22 -08:00
call UpdateJumpPosition
2015-12-17 12:14:51 -08:00
call UpdatePlayerStep
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
ret nz
2015-12-17 12:14:51 -08:00
call CopyNextCoordsTileToStandingCoordsTile
ld hl, OBJECT_FLAGS2
2015-02-11 14:13:22 -08:00
add hl, bc
res 3, [hl]
ld hl, wPlayerStepFlags
2015-02-11 14:13:22 -08:00
set 6, [hl]
set 4, [hl]
call IncrementObjectStructField28
2015-02-11 14:13:22 -08:00
ret
; 4bf2
2015-12-17 12:14:51 -08:00
.initland: ; 4bf2
call GetNextTile
ld hl, wPlayerStepFlags
2015-02-11 14:13:22 -08:00
set 7, [hl]
call IncrementObjectStructField28
2015-12-17 12:14:51 -08:00
.stepland: ; 4bfd
2015-02-11 14:13:22 -08:00
call UpdateJumpPosition
2015-12-17 12:14:51 -08:00
call UpdatePlayerStep
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
ret nz
ld hl, wPlayerStepFlags
2015-02-11 14:13:22 -08:00
set 6, [hl]
2015-12-17 12:14:51 -08:00
call CopyNextCoordsTileToStandingCoordsTile
ld hl, OBJECT_STEP_TYPE
2015-02-11 14:13:22 -08:00
add hl, bc
2015-12-17 12:14:51 -08:00
ld [hl], STEP_TYPE_SLEEP
2015-02-11 14:13:22 -08:00
ret
; 4c18
2015-12-17 12:14:51 -08:00
TeleportFrom: ; 4c18
2015-11-14 11:41:47 -08:00
call Object28AnonymousJumptable
; anonymous jumptable
2015-02-11 14:13:22 -08:00
dw Function4c23
dw Function4c32
dw Function4c42
dw Function4c5d
; 4c23
Function4c23: ; 4c23
2015-11-15 18:28:15 -08:00
ld hl, OBJECT_STEP_FRAME
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], 0
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], $10
call IncrementObjectStructField28
2015-02-11 14:13:22 -08:00
Function4c32: ; 4c32
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_ACTION
2015-02-11 14:13:22 -08:00
add hl, bc
2015-11-16 08:53:26 -08:00
ld [hl], PERSON_ACTION_SPIN
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
ret nz
call IncrementObjectStructField28
2015-02-11 14:13:22 -08:00
ret
; 4c42
Function4c42: ; 4c42
2015-11-15 18:28:15 -08:00
ld hl, OBJECT_STEP_FRAME
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], 0
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_31
add hl, bc
ld [hl], $10
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], $10
ld hl, OBJECT_FLAGS2
2015-02-11 14:13:22 -08:00
add hl, bc
res 3, [hl]
call IncrementObjectStructField28
2015-02-11 14:13:22 -08:00
Function4c5d: ; 4c5d
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_ACTION
2015-02-11 14:13:22 -08:00
add hl, bc
2015-11-16 08:53:26 -08:00
ld [hl], PERSON_ACTION_SPIN
2015-02-11 14:13:22 -08:00
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
2015-11-15 18:28:15 -08:00
ld hl, OBJECT_STEP_FRAME
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], 0
ld hl, OBJECT_STEP_TYPE
2015-02-11 14:13:22 -08:00
add hl, bc
2015-12-17 12:14:51 -08:00
ld [hl], STEP_TYPE_SLEEP
2015-02-11 14:13:22 -08:00
ret
; 4c89
2015-12-17 12:14:51 -08:00
TeleportTo: ; 4c89
2015-11-14 11:41:47 -08:00
call Object28AnonymousJumptable
; anonymous jumptable
2015-02-11 14:13:22 -08:00
dw Function4c9a
dw Function4caa
dw Function4cb3
dw Function4cc9
dw Function4ceb
dw Function4cf5
dw Function4d01
; 4c9a
Function4c9a: ; 4c9a
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_ACTION
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], PERSON_ACTION_00
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], $10
call IncrementObjectStructField28
2015-02-11 14:13:22 -08:00
ret
; 4caa
Function4caa: ; 4caa
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
ret nz
call IncrementObjectStructField28
2015-02-11 14:13:22 -08:00
Function4cb3: ; 4cb3
2015-11-15 18:28:15 -08:00
ld hl, OBJECT_STEP_FRAME
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], 0
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_31
add hl, bc
ld [hl], 0
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], $10
call IncrementObjectStructField28
2015-02-11 14:13:22 -08:00
ret
; 4cc9
Function4cc9: ; 4cc9
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_ACTION
2015-02-11 14:13:22 -08:00
add hl, bc
2015-11-16 08:53:26 -08:00
ld [hl], PERSON_ACTION_SPIN
2015-02-11 14:13:22 -08:00
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 IncrementObjectStructField28
2015-02-11 14:13:22 -08:00
Function4ceb: ; 4ceb
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], $10
call IncrementObjectStructField28
2015-02-11 14:13:22 -08:00
ret
; 4cf5
Function4cf5: ; 4cf5
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_ACTION
2015-02-11 14:13:22 -08:00
add hl, bc
2015-11-16 08:53:26 -08:00
ld [hl], PERSON_ACTION_SPIN
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
ret nz
Function4d01: ; 4d01
2015-11-15 18:28:15 -08:00
ld hl, OBJECT_STEP_FRAME
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], 0
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_SPRITE_Y_OFFSET
add hl, bc
ld [hl], 0
ld hl, OBJECT_STEP_TYPE
2015-02-11 14:13:22 -08:00
add hl, bc
2015-12-17 12:14:51 -08:00
ld [hl], STEP_TYPE_SLEEP
2015-02-11 14:13:22 -08:00
ret
; 4d14
2015-12-17 12:14:51 -08:00
Skyfall: ; 4d14
2015-11-14 11:41:47 -08:00
call Object28AnonymousJumptable
; anonymous jumptable
2015-02-11 14:13:22 -08:00
dw Function4d1f
dw Function4d2e
dw Function4d4f
dw Function4d6b
; 4d1f
Function4d1f: ; 4d1f
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_ACTION
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], PERSON_ACTION_00
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], $10
call IncrementObjectStructField28
2015-02-11 14:13:22 -08:00
Function4d2e: ; 4d2e
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
ret nz
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_ACTION
2015-02-11 14:13:22 -08:00
add hl, bc
2015-11-16 08:53:26 -08:00
ld [hl], PERSON_ACTION_STEP
2015-11-15 18:28:15 -08:00
ld hl, OBJECT_STEP_FRAME
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], 0
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_31
add hl, bc
ld [hl], 0
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], $10
call IncrementObjectStructField28
2015-02-11 14:13:22 -08:00
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 IncrementObjectStructField28
2015-02-11 14:13:22 -08:00
Function4d6b: ; 4d6b
2015-11-15 18:28:15 -08:00
ld hl, OBJECT_STEP_FRAME
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], 0
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_SPRITE_Y_OFFSET
add hl, bc
ld [hl], 0
ld hl, OBJECT_STEP_TYPE
2015-02-11 14:13:22 -08:00
add hl, bc
2015-12-17 12:14:51 -08:00
ld [hl], STEP_TYPE_SLEEP
2015-02-11 14:13:22 -08:00
ret
; 4d7e
2015-12-17 12:14:51 -08:00
GotBiteStep: ; 4d7e
2015-11-14 11:41:47 -08:00
call Object28AnonymousJumptable
; anonymous jumptable
2015-02-11 14:13:22 -08:00
dw Function4d85
dw Function4d94
; 4d85
Function4d85: ; 4d85
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], 8
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_SPRITE_Y_OFFSET
add hl, bc
ld [hl], 0
call IncrementObjectStructField28
2015-02-11 14:13:22 -08:00
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_STEP_TYPE
2015-02-11 14:13:22 -08:00
add hl, bc
2015-12-17 12:14:51 -08:00
ld [hl], STEP_TYPE_SLEEP
2015-02-11 14:13:22 -08:00
ret
; 4daf
2015-12-17 12:14:51 -08:00
RockSmashStep: ; 4daf
2015-02-11 14:13:22 -08:00
call Function4db5
jp Function4b79
; 4db5
Function4db5: ; 4db5
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld a, [hl]
and %00000001
2015-11-16 08:53:26 -08:00
ld a, PERSON_ACTION_STAND
jr z, .yes
ld a, PERSON_ACTION_00
2015-02-11 14:13:22 -08:00
.yes
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_ACTION
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], a
ret
; 4dc8
2015-12-17 12:14:51 -08:00
ReturnDigStep: ; 4dc8
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld a, [hl]
and %00000001
2015-11-16 08:53:26 -08:00
ld a, PERSON_ACTION_SPIN
jr z, .yes
2015-11-16 08:53:26 -08:00
ld a, PERSON_ACTION_SPIN_FLICKER
2015-02-11 14:13:22 -08:00
.yes
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_ACTION
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], a
jp Function4b79
; 4ddd
Function4ddd: ; 4ddd
ld hl, OBJECT_DIRECTION_WALKING
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], STANDING
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
ret nz
ld hl, OBJECT_STEP_TYPE
2015-02-11 14:13:22 -08:00
add hl, bc
2015-12-17 12:14:51 -08:00
ld [hl], STEP_TYPE_SLEEP
2015-02-11 14:13:22 -08:00
ret
; 4df0
Function4df0: ; 4df0
ld hl, OBJECT_DIRECTION_WALKING
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], STANDING
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
ret nz
2015-12-17 12:14:51 -08:00
jp DeleteMapObject
2015-02-11 14:13:22 -08:00
; 4dff
Function4dff: ; 4dff
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
ret nz
ld hl, OBJECT_STEP_TYPE
2015-02-11 14:13:22 -08:00
add hl, bc
2015-12-17 12:14:51 -08:00
ld [hl], STEP_TYPE_SLEEP
2015-02-11 14:13:22 -08:00
ret
; 4e0c
Function4e0c: ; 4e0c
2015-11-14 11:41:47 -08:00
call Object28AnonymousJumptable
; anonymous jumptable
2015-02-11 14:13:22 -08:00
dw Function4e13
dw Function4e21
; 4e13
Function4e13: ; 4e13
2015-11-02 08:15:32 -08:00
call RestoreDefaultMovement
call GetInitialFacing
ld hl, OBJECT_FACING
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], a
call IncrementObjectStructField28
2015-02-11 14:13:22 -08:00
Function4e21: ; 4e21
2015-12-17 12:14:51 -08:00
call MobileFn_4fb2
ld hl, OBJECT_DIRECTION_WALKING
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], STANDING
2015-02-11 14:13:22 -08:00
ret
; 4e2b
2015-12-17 12:14:51 -08:00
NPCStep: ; 4e2b
call MobileFn_4fb2
2015-11-14 11:41:47 -08:00
call AddStepVector
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
ret nz
2015-12-17 12:14:51 -08:00
call CopyNextCoordsTileToStandingCoordsTile
ld hl, OBJECT_DIRECTION_WALKING
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], STANDING
ld hl, OBJECT_STEP_TYPE
2015-02-11 14:13:22 -08:00
add hl, bc
2015-12-17 12:14:51 -08:00
ld [hl], STEP_TYPE_SLEEP
2015-02-11 14:13:22 -08:00
ret
; 4e47
Function4e47: ; 4e47
2015-11-14 11:41:47 -08:00
call AddStepVector
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
ret nz
2015-12-17 12:14:51 -08:00
call CopyNextCoordsTileToStandingCoordsTile
2015-11-14 11:41:47 -08:00
jp RandomStepDuration_Slow
2015-02-11 14:13:22 -08:00
; 4e56
2015-12-17 12:14:51 -08:00
PlayerStep: ; 4e56
2015-02-11 14:13:22 -08:00
; AnimateStep?
2015-11-14 11:41:47 -08:00
call Object28AnonymousJumptable
; anonymous jumptable
2015-12-17 12:14:51 -08:00
dw .init
dw .step
2015-02-11 14:13:22 -08:00
; 4e5d
2015-12-17 12:14:51 -08:00
.init: ; 4e5d
ld hl, wPlayerStepFlags
2015-02-11 14:13:22 -08:00
set 7, [hl]
call IncrementObjectStructField28
2015-12-17 12:14:51 -08:00
.step: ; 4e65
call UpdatePlayerStep
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
ret nz
2015-11-14 11:41:47 -08:00
ld hl, wPlayerStepFlags
2015-02-11 14:13:22 -08:00
set 6, [hl]
2015-12-17 12:14:51 -08:00
call CopyNextCoordsTileToStandingCoordsTile
ld hl, OBJECT_DIRECTION_WALKING
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], STANDING
ld hl, OBJECT_STEP_TYPE
2015-02-11 14:13:22 -08:00
add hl, bc
2015-12-17 12:14:51 -08:00
ld [hl], STEP_TYPE_SLEEP
2015-02-11 14:13:22 -08:00
ret
; 4e83
2015-12-17 12:14:51 -08:00
PlayerOrNPCHalfStep: ; 4e83
2015-11-14 11:41:47 -08:00
call Object28AnonymousJumptable
; anonymous jumptable
2015-12-17 12:14:51 -08:00
dw .init1
dw .step1
dw .init2
dw .step2
2015-02-11 14:13:22 -08:00
; 4e8e
2015-12-17 12:14:51 -08:00
.init1: ; 4e8e
ld hl, OBJECT_DIRECTION_WALKING
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], STANDING
2015-11-15 18:28:15 -08:00
ld hl, OBJECT_STEP_FRAME
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
ld [hl], 2
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], 2
call IncrementObjectStructField28
2015-12-17 12:14:51 -08:00
.step1: ; 4ea4
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
ret nz
call IncrementObjectStructField28
2015-12-17 12:14:51 -08:00
.init2: ; 4ead
ld hl, OBJECT_29 ; new facing
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
ld hl, OBJECT_FACING
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], a
ld hl, OBJECT_STEP_DURATION
add hl, bc
2015-12-17 12:14:51 -08:00
ld [hl], 2
call IncrementObjectStructField28
2015-12-17 12:14:51 -08:00
.step2: ; 4ec0
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
ret nz
ld hl, OBJECT_STEP_TYPE
2015-02-11 14:13:22 -08:00
add hl, bc
2015-12-17 12:14:51 -08:00
ld [hl], STEP_TYPE_SLEEP
2015-02-11 14:13:22 -08:00
ret
; 4ecd
Function4ecd: ; 4ecd
2015-11-14 11:41:47 -08:00
call AddStepVector
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
ret nz
push bc
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_NEXT_MAP_X
2015-02-11 14:13:22 -08:00
add hl, bc
ld d, [hl]
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_NEXT_MAP_Y
2015-02-11 14:13:22 -08:00
add hl, bc
ld e, [hl]
ld hl, OBJECT_MAP_OBJECT_INDEX
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
ld b, a
2015-10-24 07:34:19 -07:00
callba CopyDECoordsToMapObject
2015-02-11 14:13:22 -08:00
pop bc
ld hl, OBJECT_FLAGS2
2015-02-11 14:13:22 -08:00
add hl, bc
res 2, [hl]
2015-12-17 12:14:51 -08:00
call CopyNextCoordsTileToStandingCoordsTile
ld hl, OBJECT_DIRECTION_WALKING
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], STANDING
ld hl, OBJECT_STEP_TYPE
2015-02-11 14:13:22 -08:00
add hl, bc
2015-12-17 12:14:51 -08:00
ld [hl], STEP_TYPE_SLEEP
2015-02-11 14:13:22 -08:00
ret
; 4f04
Function4f04: ; 4f04
ld hl, OBJECT_29
add hl, bc
ld e, [hl]
inc hl
ld d, [hl]
ld hl, OBJECT_SPRITE
2015-02-11 14:13:22 -08:00
add hl, de
ld a, [hl]
and a
jr z, .nope
2015-02-11 14:13:22 -08:00
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
.nope
2015-12-17 12:14:51 -08:00
jp DeleteMapObject
2015-02-11 14:13:22 -08:00
; 4f33
Function4f33: ; 4f33
2015-11-14 11:41:47 -08:00
call Object28AnonymousJumptable
; anonymous jumptable
2015-02-11 14:13:22 -08:00
dw Function4f3a
dw Function4f43
; 4f3a
Function4f3a: ; 4f3a
xor a
ld hl, OBJECT_29
add hl, bc
ld [hl], a
call IncrementObjectStructField28
2015-02-11 14:13:22 -08:00
Function4f43: ; 4f43
ld hl, OBJECT_29
add hl, bc
ld d, [hl]
ld a, [wPlayerStepVectorY]
2015-02-11 14:13:22 -08:00
sub d
ld [wPlayerStepVectorY], a
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
jr z, .ok
2015-02-11 14:13:22 -08:00
ld a, [hl]
call Function4f6c
ld hl, OBJECT_29
add hl, bc
ld [hl], a
ld d, a
ld a, [wPlayerStepVectorY]
2015-02-11 14:13:22 -08:00
add d
ld [wPlayerStepVectorY], a
2015-02-11 14:13:22 -08:00
ret
.ok
2015-12-17 12:14:51 -08:00
call DeleteMapObject
2015-02-11 14:13:22 -08:00
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
2015-11-14 11:41:47 -08:00
call Object28AnonymousJumptable ; ????
2015-02-11 14:13:22 -08:00
; 4f7a
Function4f7a: ; 4f7a
2015-11-14 11:41:47 -08:00
call Object28AnonymousJumptable
; anonymous jumptable
2015-12-17 12:14:51 -08:00
dw SkyfallTop
dw SkyfallTop
dw SkyfallTop
2015-02-11 14:13:22 -08:00
; 4f83
2015-12-17 12:14:51 -08:00
SkyfallTop: ; 4f83
2015-11-14 11:41:47 -08:00
call Object28AnonymousJumptable
; anonymous jumptable
2015-02-11 14:13:22 -08:00
dw Function4f8a
dw Function4f99
; 4f8a
Function4f8a: ; 4f8a
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_ACTION
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], PERSON_ACTION_10
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], 16
call IncrementObjectStructField28
2015-02-11 14:13:22 -08:00
; 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
2015-11-15 18:28:15 -08:00
ld hl, OBJECT_STEP_FRAME
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], 0
ld hl, OBJECT_STEP_TYPE
2015-02-11 14:13:22 -08:00
add hl, bc
2015-12-17 12:14:51 -08:00
ld [hl], STEP_TYPE_SLEEP
2015-02-11 14:13:22 -08:00
ret
; 4fb2
2015-12-17 12:14:51 -08:00
MobileFn_4fb2: mobile
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_29
add hl, bc
inc [hl]
ld a, [hl]
srl a
srl a
and %00000111
2015-02-11 14:13:22 -08:00
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
2015-11-02 08:15:32 -08:00
Function5000: ; unscripted?
; copy [wc2de] to [wc2df]
2015-02-11 14:13:22 -08:00
ld a, [wc2de]
ld hl, wc2df
ld [hl], a
2015-11-11 20:38:57 -08:00
; load [wc2de] with movement_step_sleep_1
ld a, movement_step_sleep_1
2015-02-11 14:13:22 -08:00
ld [wc2de], a
2015-11-11 20:38:57 -08:00
; recover the previous value of [wc2de]
2015-02-11 14:13:22 -08:00
ld a, [hl]
ret
; 500e
2015-11-02 08:15:32 -08:00
Function500e: ; scripted
ld hl, wMovementDataPointer
2015-02-11 14:13:22 -08:00
call Function1aae
ret
; 5015
Function5015: ; 5015
2015-11-11 20:38:57 -08:00
ld hl, OBJECT_MOVEMENT_BYTE_INDEX
2015-02-11 14:13:22 -08:00
add hl, bc
ld e, [hl]
inc [hl]
ld d, 0
2015-11-02 08:15:32 -08:00
ld hl, wMovementPerson
2015-02-11 14:13:22 -08:00
ld a, [hli]
ld h, [hl]
ld l, a
add hl, de
ld a, [hl]
ret
; 5026
Function5026: ; 5026
2015-11-11 20:38:57 -08:00
ld hl, OBJECT_MOVEMENT_BYTE_INDEX
2015-02-11 14:13:22 -08:00
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
2015-11-11 20:38:57 -08:00
ld hl, GetMovementPerson
jp HandleMovementData
2015-02-11 14:13:22 -08:00
; 503d
2015-11-11 20:38:57 -08:00
GetMovementPerson: ; 503d
2015-11-02 08:15:32 -08:00
ld a, [wMovementPerson]
2015-02-11 14:13:22 -08:00
ret
; 5041
2015-11-11 20:38:57 -08:00
HandleMovementData: ; 5041
call CopyMovementPointer
.loop
2015-02-11 14:13:22 -08:00
xor a
ld [wc2ea], a
call GetMovementByte
call DoMovementFunction
2015-02-11 14:13:22 -08:00
ld a, [wc2ea]
and a
jr nz, .loop
2015-02-11 14:13:22 -08:00
ret
; 5055
CopyMovementPointer: ; 5055
2015-02-11 14:13:22 -08:00
ld a, l
2015-11-02 08:15:32 -08:00
ld [wMovementPointer], a
2015-02-11 14:13:22 -08:00
ld a, h
2015-11-02 08:15:32 -08:00
ld [wMovementPointer + 1], a
2015-02-11 14:13:22 -08:00
ret
; 505e
GetMovementByte: ; 505e
2015-11-02 08:15:32 -08:00
ld hl, wMovementPointer
2015-02-11 14:13:22 -08:00
ld a, [hli]
ld h, [hl]
ld l, a
jp [hl]
; 5065
2015-11-11 20:38:57 -08:00
ContinueReadingMovement: ; 5065
ld a, 1
2015-02-11 14:13:22 -08:00
ld [wc2ea], a
ret
; 506b
DoMovementFunction: ; 506b
2015-02-11 14:13:22 -08:00
push af
2015-11-02 08:15:32 -08:00
call ApplyMovementToFollower
2015-02-11 14:13:22 -08:00
pop af
ld hl, MovementPointers
rst JumpTable
ret
; 5075
; 5075
INCLUDE "engine/movement.asm"
; 54b8
2015-11-02 08:15:32 -08:00
ApplyMovementToFollower: ; 54b8
2015-02-11 14:13:22 -08:00
ld e, a
2015-11-02 08:15:32 -08:00
ld a, [wObjectFollow_Follower]
cp -1
2015-02-11 14:13:22 -08:00
ret z
2015-11-02 08:15:32 -08:00
ld a, [wObjectFollow_Leader]
2015-02-11 14:13:22 -08:00
ld d, a
2015-11-02 08:15:32 -08:00
ld a, [hMapObjectIndexBuffer]
2015-02-11 14:13:22 -08:00
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, .done
cp -1
jr z, .done
2015-02-11 14:13:22 -08:00
dec [hl]
ld e, a
ld d, 0
ld hl, wd4d1
add hl, de
inc e
ld a, -1
.loop
2015-02-11 14:13:22 -08:00
ld d, [hl]
ld [hld], a
ld a, d
dec e
jr nz, .loop
2015-02-11 14:13:22 -08:00
ret
.done
2015-02-11 14:13:22 -08:00
call Function550a
ret c
2015-11-11 20:38:57 -08:00
ld a, movement_step_sleep_1
2015-02-11 14:13:22 -08:00
ret
; 550a
Function550a: ; 550a
2015-11-02 08:15:32 -08:00
ld a, [wObjectFollow_Leader]
cp -1
jr z, .nope
2015-02-11 14:13:22 -08:00
push bc
call GetObjectStruct
ld hl, OBJECT_SPRITE
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
pop bc
and a
jr z, .nope
2015-02-11 14:13:22 -08:00
and a
ret
.nope
2015-02-11 14:13:22 -08:00
ld a, $ff
2015-11-02 08:15:32 -08:00
ld [wObjectFollow_Follower], a
2015-11-11 20:38:57 -08:00
ld a, movement_step_end
2015-02-11 14:13:22 -08:00
scf
ret
; 5529
2015-11-14 11:41:47 -08:00
SpawnShadow: ; 5529
2015-02-11 14:13:22 -08:00
push bc
2015-11-14 11:41:47 -08:00
ld de, .ShadowObject
call CopyTempObjectData
call InitTempObject
2015-02-11 14:13:22 -08:00
pop bc
ret
2015-11-14 11:41:47 -08:00
.ShadowObject
; vtile, palette, movement
db $00, PAL_OW_SILVER, SPRITEMOVEDATA_SHADOW
2015-02-11 14:13:22 -08:00
; 5538
2015-11-14 11:41:47 -08:00
SpawnStrengthBoulderDust: ; 5538
2015-02-11 14:13:22 -08:00
push bc
2015-11-14 11:41:47 -08:00
ld de, .BoulderDustObject
call CopyTempObjectData
call InitTempObject
2015-02-11 14:13:22 -08:00
pop bc
ret
2015-11-14 11:41:47 -08:00
.BoulderDustObject
db $00, PAL_OW_SILVER, SPRITEMOVEDATA_BOULDERDUST
2015-02-11 14:13:22 -08:00
; 5547
2015-11-14 11:41:47 -08:00
SpawnEmote: ; 5547
2015-02-11 14:13:22 -08:00
push bc
2015-11-14 11:41:47 -08:00
ld de, .EmoteObject
call CopyTempObjectData
call InitTempObject
2015-02-11 14:13:22 -08:00
pop bc
ret
2015-11-14 11:41:47 -08:00
.EmoteObject
db $00, PAL_OW_SILVER, SPRITEMOVEDATA_EMOTE
2015-02-11 14:13:22 -08:00
; 5556
2015-11-14 11:41:47 -08:00
ShakeGrass: ; 5556
2015-02-11 14:13:22 -08:00
push bc
ld de, .data_5562
2015-11-14 11:41:47 -08:00
call CopyTempObjectData
call InitTempObject
2015-02-11 14:13:22 -08:00
pop bc
ret
.data_5562
2015-11-14 11:41:47 -08:00
db $00, PAL_OW_TREE, SPRITEMOVEDATA_GRASS
2015-02-11 14:13:22 -08:00
; 5565
2015-11-14 11:41:47 -08:00
ShakeScreen: ; 5565
2015-02-11 14:13:22 -08:00
push bc
push af
2015-11-14 11:41:47 -08:00
ld de, .ScreenShakeObject
call CopyTempObjectData
2015-02-11 14:13:22 -08:00
pop af
2015-11-14 11:41:47 -08:00
ld [wTempObjectCopyRange], a
call InitTempObject
2015-02-11 14:13:22 -08:00
pop bc
ret
2015-11-14 11:41:47 -08:00
.ScreenShakeObject
db $00, PAL_OW_SILVER, SPRITEMOVEDATA_SCREENSHAKE
2015-02-11 14:13:22 -08:00
; 5579
2015-11-14 11:41:47 -08:00
DespawnEmote: ; 5579
2015-02-11 14:13:22 -08:00
push bc
2015-11-02 08:15:32 -08:00
ld a, [hMapObjectIndexBuffer]
2015-02-11 14:13:22 -08:00
ld c, a
2015-11-14 11:41:47 -08:00
call .DeleteEmote
2015-02-11 14:13:22 -08:00
pop bc
ret
; 5582
2015-11-14 11:41:47 -08:00
.DeleteEmote: ; 5582
2015-02-11 14:13:22 -08:00
ld de, ObjectStructs
2015-07-26 00:11:33 -07:00
ld a, NUM_OBJECT_STRUCTS
.loop
2015-02-11 14:13:22 -08:00
push af
ld hl, OBJECT_FLAGS1
2015-02-11 14:13:22 -08:00
add hl, de
2015-11-15 18:28:15 -08:00
bit EMOTE_OBJECT, [hl]
jr z, .next
ld hl, OBJECT_SPRITE
2015-02-11 14:13:22 -08:00
add hl, de
ld a, [hl]
and a
jr z, .next
2015-02-11 14:13:22 -08:00
push bc
xor a
ld bc, OBJECT_STRUCT_LENGTH
2015-02-11 14:13:22 -08:00
call ByteFill
pop bc
.next
ld hl, OBJECT_STRUCT_LENGTH
2015-02-11 14:13:22 -08:00
add hl, de
ld d, h
ld e, l
pop af
dec a
jr nz, .loop
2015-02-11 14:13:22 -08:00
ret
; 55ac
2015-11-14 11:41:47 -08:00
InitTempObject: ; 55ac
2015-10-31 18:05:02 -07:00
call FindFirstEmptyObjectStruct
2015-02-11 14:13:22 -08:00
ret nc
2015-11-11 20:38:57 -08:00
2015-02-11 14:13:22 -08:00
ld d, h
ld e, l
2015-11-14 11:41:47 -08:00
callba CopyTempObjectToObjectStruct
2015-02-11 14:13:22 -08:00
ret
; 55b9
2015-11-14 11:41:47 -08:00
CopyTempObjectData: ; 55b9
; load into wTempObjectCopy:
; -1, -1, [de], [de + 1], [de + 2], [hMapObjectIndexBuffer], [NextMapX], [NextMapY], -1
; This spawns the object at the same place as whichever object is loaded into bc.
ld hl, wTempObjectCopyMapObjectIndex
ld [hl], -1
2015-02-11 14:13:22 -08:00
inc hl
ld [hl], -1
2015-02-11 14:13:22 -08:00
inc hl
2015-11-11 20:38:57 -08:00
2015-02-11 14:13:22 -08:00
ld a, [de]
inc de
ld [hli], a
ld a, [de]
inc de
ld [hli], a
ld a, [de]
ld [hli], a
2015-11-11 20:38:57 -08:00
2015-11-02 08:15:32 -08:00
ld a, [hMapObjectIndexBuffer]
2015-02-11 14:13:22 -08:00
ld [hli], a
2015-11-11 20:38:57 -08:00
2015-02-11 14:13:22 -08:00
push hl
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_NEXT_MAP_X
2015-02-11 14:13:22 -08:00
add hl, bc
ld d, [hl]
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_NEXT_MAP_Y
2015-02-11 14:13:22 -08:00
add hl, bc
ld e, [hl]
pop hl
2015-11-11 20:38:57 -08:00
2015-02-11 14:13:22 -08:00
ld [hl], d
inc hl
ld [hl], e
inc hl
ld [hl], -1
2015-02-11 14:13:22 -08:00
ret
; 55e0
Function55e0:: ; 55e0
ld a, [VramState]
bit 0, a
ret z
2015-11-15 21:52:53 -08:00
2015-02-11 14:13:22 -08:00
ld bc, ObjectStructs
xor a
.loop
2015-11-02 08:15:32 -08:00
ld [hMapObjectIndexBuffer], a
call GetObjectSprite
jr z, .ok
2015-02-11 14:13:22 -08:00
call Function565c
.ok
ld hl, OBJECT_STRUCT_LENGTH
2015-02-11 14:13:22 -08:00
add hl, bc
ld b, h
ld c, l
2015-11-02 08:15:32 -08:00
ld a, [hMapObjectIndexBuffer]
2015-02-11 14:13:22 -08:00
inc a
cp NUM_OBJECT_STRUCTS
jr nz, .loop
2015-02-11 14:13:22 -08:00
ret
; 5602
2015-11-16 08:53:26 -08:00
Function5602: ; 5602, called at battle start
call Function5645 ; clear sprites
ld a, PLAYER
call Function5629 ; respawn player
2015-11-25 07:16:29 -08:00
ld a, [wBattleScriptFlags]
2015-02-11 14:13:22 -08:00
bit 7, a
jr z, .ok
2015-11-16 08:53:26 -08:00
ld a, [hLastTalked]
2015-02-11 14:13:22 -08:00
and a
jr z, .ok
2015-11-16 08:53:26 -08:00
call Function5629 ; respawn opponent
2015-02-11 14:13:22 -08:00
.ok
2015-11-15 18:28:15 -08:00
call _UpdateSprites
2015-02-11 14:13:22 -08:00
ret
; 561d
Function561d: ; 561d
2015-11-16 08:53:26 -08:00
call Function5645 ; clear sprites
ld a, PLAYER
call Function5629 ; respawn player
2015-11-15 18:28:15 -08:00
call _UpdateSprites
2015-02-11 14:13:22 -08:00
ret
; 5629
Function5629: ; 5629
2015-07-26 00:11:33 -07:00
cp NUM_OBJECTS
2015-02-11 14:13:22 -08:00
ret nc
2015-11-11 20:38:57 -08:00
2015-02-11 14:13:22 -08:00
call GetMapObject
ld hl, MAPOBJECT_OBJECT_STRUCT_ID
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
cp -1
2015-02-11 14:13:22 -08:00
ret z
2015-11-11 20:38:57 -08:00
2015-07-26 00:11:33 -07:00
cp NUM_OBJECT_STRUCTS
2015-02-11 14:13:22 -08:00
ret nc
2015-11-11 20:38:57 -08:00
call GetObjectStruct
call GetObjectSprite
2015-02-11 14:13:22 -08:00
ret z
2015-11-11 20:38:57 -08:00
2015-02-11 14:13:22 -08:00
call Function5673
ret
; 5645
Function5645: ; 5645
xor a
ld bc, ObjectStructs
.loop
2015-11-02 08:15:32 -08:00
ld [hMapObjectIndexBuffer], a
2015-11-16 08:53:26 -08:00
call SetFacing_Standing
ld hl, OBJECT_STRUCT_LENGTH
2015-02-11 14:13:22 -08:00
add hl, bc
ld b, h
ld c, l
2015-11-02 08:15:32 -08:00
ld a, [hMapObjectIndexBuffer]
2015-02-11 14:13:22 -08:00
inc a
cp NUM_OBJECT_STRUCTS
jr nz, .loop
2015-02-11 14:13:22 -08:00
ret
; 565c
Function565c: ; 565c
push bc
call Function56cd
pop bc
2015-11-16 08:53:26 -08:00
jr c, SetFacing_Standing
2015-02-11 14:13:22 -08:00
call Function56a3
2015-11-16 08:53:26 -08:00
jr c, SetFacing_Standing
2015-02-11 14:13:22 -08:00
call Function5688
callba Function4440
xor a
ret
; 5673
Function5673: ; 5673
call Function56a3
2015-11-16 08:53:26 -08:00
jr c, SetFacing_Standing
callba Function4440 ; no need to farcall
2015-02-11 14:13:22 -08:00
xor a
ret
; 5680
2015-11-16 08:53:26 -08:00
SetFacing_Standing: ; 5680
ld hl, OBJECT_FACING_STEP
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], STANDING
2015-02-11 14:13:22 -08:00
scf
ret
; 5688
Function5688: ; 5688
push bc
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_NEXT_MAP_X
2015-02-11 14:13:22 -08:00
add hl, bc
ld d, [hl]
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_NEXT_MAP_Y
2015-02-11 14:13:22 -08:00
add hl, bc
ld e, [hl]
2015-11-12 21:49:27 -08:00
call GetCoordTile
2015-02-11 14:13:22 -08:00
pop bc
ld hl, OBJECT_NEXT_TILE
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], a
2015-12-17 12:14:51 -08:00
callba UpdateTallGrassFlags ; no need to farcall
2015-02-11 14:13:22 -08:00
ret
; 56a3
Function56a3: ; 56a3
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_NEXT_MAP_X
2015-02-11 14:13:22 -08:00
add hl, bc
ld d, [hl]
2015-11-14 11:41:47 -08:00
ld hl, OBJECT_NEXT_MAP_Y
2015-02-11 14:13:22 -08:00
add hl, bc
ld e, [hl]
inc d
inc e
ld a, [XCoord]
cp d
jr z, .equal_x
jr nc, .nope
2015-02-11 14:13:22 -08:00
add $b
cp d
jr c, .nope
2015-02-11 14:13:22 -08:00
.equal_x
2015-02-11 14:13:22 -08:00
ld a, [YCoord]
cp e
jr z, .equal_y
jr nc, .nope
2015-02-11 14:13:22 -08:00
add $a
cp e
jr c, .nope
2015-02-11 14:13:22 -08:00
.equal_y
2015-02-11 14:13:22 -08:00
xor a
ret
.nope
2015-02-11 14:13:22 -08:00
scf
ret
; 56cd
Function56cd: ; 56cd
ld a, [wFollowNotExactPersonX]
2015-02-11 14:13:22 -08:00
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, .ok1
2015-02-11 14:13:22 -08:00
cp $a0
jp nc, .nope
2015-02-11 14:13:22 -08:00
.ok1
and %00000111
ld d, 2
cp 4
jr c, .ok2
ld d, 3
2015-02-11 14:13:22 -08:00
.ok2
2015-02-11 14:13:22 -08:00
ld a, [hl]
srl a
srl a
srl a
cp SCREEN_WIDTH
jr c, .ok3
2015-02-11 14:13:22 -08:00
sub $20
.ok3
ld [hUsedSpriteIndex], a
ld a, [wFollowNotExactPersonY]
2015-02-11 14:13:22 -08:00
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, .ok4
2015-02-11 14:13:22 -08:00
cp $90
jr nc, .nope
2015-02-11 14:13:22 -08:00
.ok4
and %00000111
ld e, 2
cp 4
jr c, .ok5
ld e, 3
2015-02-11 14:13:22 -08:00
.ok5
2015-02-11 14:13:22 -08:00
ld a, [hl]
srl a
srl a
srl a
cp $12
jr c, .ok6
2015-02-11 14:13:22 -08:00
sub $20
.ok6
ld [hUsedSpriteTile], a
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_PALETTE
add hl, bc
bit 7, [hl]
jr z, .ok7
2015-02-11 14:13:22 -08:00
ld a, d
add 2
2015-02-11 14:13:22 -08:00
ld d, a
ld a, e
add 2
2015-02-11 14:13:22 -08:00
ld e, a
.ok7
2015-02-11 14:13:22 -08:00
ld a, d
2015-11-11 20:38:57 -08:00
ld [hFFBF], a
.loop
2015-11-11 20:38:57 -08:00
ld a, [hFFBF]
2015-02-11 14:13:22 -08:00
ld d, a
ld a, [hUsedSpriteTile]
2015-02-11 14:13:22 -08:00
add e
dec a
cp $12
jr nc, .ok9
2015-02-11 14:13:22 -08:00
ld b, a
.next
ld a, [hUsedSpriteIndex]
2015-02-11 14:13:22 -08:00
add d
dec a
cp $14
jr nc, .ok8
2015-02-11 14:13:22 -08:00
ld c, a
push bc
call Coord2Tile
2015-02-11 14:13:22 -08:00
pop bc
ld a, [hl]
cp $60
jr nc, .nope
2015-02-11 14:13:22 -08:00
.ok8
2015-02-11 14:13:22 -08:00
dec d
jr nz, .next
2015-02-11 14:13:22 -08:00
.ok9
2015-02-11 14:13:22 -08:00
dec e
jr nz, .loop
2015-02-11 14:13:22 -08:00
and a
ret
.nope
2015-02-11 14:13:22 -08:00
scf
ret
; 576a
Function576a:: ; 576a
2015-12-17 12:14:51 -08:00
call .ResetStepVector
2015-02-11 14:13:22 -08:00
call Function5781
ret
; 5771
2015-12-17 12:14:51 -08:00
.ResetStepVector: ; 5771
2015-02-11 14:13:22 -08:00
xor a
ld [wPlayerStepVectorX], a
ld [wPlayerStepVectorY], a
ld [wPlayerStepFlags], a
ld a, -1
ld [wPlayerStepDirection], a
2015-02-11 14:13:22 -08:00
ret
; 5781
Function5781: ; 5781
ld bc, ObjectStructs
xor a
.loop
2015-11-02 08:15:32 -08:00
ld [hMapObjectIndexBuffer], a
call GetObjectSprite
jr z, .next
2015-02-11 14:13:22 -08:00
call Function437b
.next
ld hl, OBJECT_STRUCT_LENGTH
2015-02-11 14:13:22 -08:00
add hl, bc
ld b, h
ld c, l
2015-11-02 08:15:32 -08:00
ld a, [hMapObjectIndexBuffer]
2015-02-11 14:13:22 -08:00
inc a
cp NUM_OBJECT_STRUCTS
jr nz, .loop
2015-02-11 14:13:22 -08:00
ret
; 579d
Function579d: ; 579d
ld a, $3e
ld [wc2de], a
ld [wc2df], a
xor a
ld [wd04e], a
2015-11-15 18:28:15 -08:00
ld [PlayerObjectStepFrame], a
2015-02-11 14:13:22 -08:00
call Function57bc
2015-12-14 08:12:18 -08:00
callba CheckWarpFacingDown
call c, SpawnInFacingDown
2015-11-15 18:28:15 -08:00
call SpawnInCustomFacing
2015-02-11 14:13:22 -08:00
ret
; 57bc
Function57bc: ; 57bc
2015-10-24 07:34:19 -07:00
ld hl, wPlayerSpriteSetupFlags
2015-02-11 14:13:22 -08:00
bit 7, [hl]
jr nz, .ok
2015-02-11 14:13:22 -08:00
ret
.ok
2015-11-16 13:01:45 -08:00
ld a, PERSON_ACTION_00
2015-02-11 14:13:22 -08:00
ld [PlayerAction], a
ret
; 57ca
2015-11-15 18:28:15 -08:00
SpawnInCustomFacing: ; 57ca
2015-10-24 07:34:19 -07:00
ld hl, wPlayerSpriteSetupFlags
2015-02-11 14:13:22 -08:00
bit 5, [hl]
ret z
2015-10-24 07:34:19 -07:00
ld a, [wPlayerSpriteSetupFlags]
and 3
2015-07-20 19:18:18 -07:00
rept 2
2015-02-11 14:13:22 -08:00
add a
2015-07-20 19:18:18 -07:00
endr
2015-11-15 18:28:15 -08:00
jr ContinueSpawnFacing
2015-02-11 14:13:22 -08:00
; 57d9
SpawnInFacingDown: ; 57d9
ld a, 0
2015-11-15 18:28:15 -08:00
ContinueSpawnFacing: ; 57db
2015-02-11 14:13:22 -08:00
ld bc, PlayerStruct
call SetSpriteDirection
2015-02-11 14:13:22 -08:00
ret
; 57e2
2015-11-17 09:29:37 -08:00
SetPlayerPalette: ; 57e2
2015-02-11 14:13:22 -08:00
ld a, d
2015-11-02 08:15:32 -08:00
and %10000000
2015-02-11 14:13:22 -08:00
ret z
2015-11-17 09:29:37 -08:00
2015-11-02 11:37:02 -08:00
ld bc, 0 ; debug?
ld hl, OBJECT_FACING
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
or d
ld [hl], a
2015-11-17 09:29:37 -08:00
2015-02-11 14:13:22 -08:00
ld a, d
swap a
and %00000111
2015-02-11 14:13:22 -08:00
ld d, a
ld bc, PlayerStruct
ld hl, OBJECT_PALETTE
add hl, bc
ld a, [hl]
and %11111000
2015-02-11 14:13:22 -08:00
or d
ld [hl], a
ret
; 5803
2015-11-02 08:15:32 -08:00
StartFollow:: ; 5803
2015-02-11 14:13:22 -08:00
push bc
ld a, b
2015-11-02 08:15:32 -08:00
call SetLeaderIfVisible
2015-02-11 14:13:22 -08:00
pop bc
ret c
ld a, c
2015-11-02 08:15:32 -08:00
call SetFollowerIfVisible
2015-02-11 14:13:22 -08:00
callba Function848a
ret
; 5815
2015-11-02 08:15:32 -08:00
SetLeaderIfVisible: ; 5815
call CheckObjectVisibility
2015-02-11 14:13:22 -08:00
ret c
2015-11-02 08:15:32 -08:00
ld a, [hObjectStructIndexBuffer]
ld [wObjectFollow_Leader], a
2015-02-11 14:13:22 -08:00
ret
; 581f
2015-11-02 08:15:32 -08:00
StopFollow:: ; 581f
call ResetLeader
call ResetFollower
2015-02-11 14:13:22 -08:00
ret
; 5826
2015-11-02 08:15:32 -08:00
ResetLeader: ; 5826
ld a, -1
2015-11-02 08:15:32 -08:00
ld [wObjectFollow_Leader], a
2015-02-11 14:13:22 -08:00
ret
; 582c
2015-11-02 08:15:32 -08:00
SetFollowerIfVisible: ; 582c
2015-02-11 14:13:22 -08:00
push af
2015-11-02 08:15:32 -08:00
call ResetFollower
2015-02-11 14:13:22 -08:00
pop af
2015-11-02 08:15:32 -08:00
call CheckObjectVisibility
2015-02-11 14:13:22 -08:00
ret c
2015-11-02 08:15:32 -08:00
ld hl, OBJECT_MOVEMENTTYPE
2015-02-11 14:13:22 -08:00
add hl, bc
2015-11-06 13:42:38 -08:00
ld [hl], SPRITEMOVEDATA_FOLLOWING
ld hl, OBJECT_STEP_TYPE
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], STEP_TYPE_00
2015-11-02 08:15:32 -08:00
ld a, [hObjectStructIndexBuffer]
ld [wObjectFollow_Follower], a
2015-02-11 14:13:22 -08:00
ret
; 5847
2015-11-02 08:15:32 -08:00
ResetFollower: ; 5847
ld a, [wObjectFollow_Follower]
cp -1
2015-02-11 14:13:22 -08:00
ret z
call GetObjectStruct
2015-11-11 20:38:57 -08:00
callba Function58e3 ; no need to bankswitch
ld a, -1
2015-11-02 08:15:32 -08:00
ld [wObjectFollow_Follower], a
2015-02-11 14:13:22 -08:00
ret
; 585c
SetFlagsForMovement_1:: ; 585c
2015-02-11 14:13:22 -08:00
ld a, c
2015-11-02 08:15:32 -08:00
call CheckObjectVisibility
2015-02-11 14:13:22 -08:00
ret c
push bc
call Function587a
pop bc
ld hl, OBJECT_FLAGS2
2015-02-11 14:13:22 -08:00
add hl, bc
res 5, [hl]
xor a
ret
; 586e
Function586e: ; 586e
2015-11-02 08:15:32 -08:00
call CheckObjectVisibility
2015-02-11 14:13:22 -08:00
ret c
ld hl, OBJECT_FLAGS2
2015-02-11 14:13:22 -08:00
add hl, bc
set 5, [hl]
xor a
ret
; 587a
Function587a: ; 587a
ld bc, ObjectStructs
xor a
.loop
2015-02-11 14:13:22 -08:00
push af
call GetObjectSprite
jr z, .next
ld hl, OBJECT_FLAGS2
2015-02-11 14:13:22 -08:00
add hl, bc
set 5, [hl]
.next
ld hl, OBJECT_STRUCT_LENGTH
2015-02-11 14:13:22 -08:00
add hl, bc
ld b, h
ld c, l
pop af
inc a
cp NUM_OBJECT_STRUCTS
jr nz, .loop
2015-02-11 14:13:22 -08:00
ret
; 5897
_SetFlagsForMovement_2:: ; 5897
2015-11-02 08:15:32 -08:00
ld a, [wObjectFollow_Leader]
cp -1
2015-02-11 14:13:22 -08:00
ret z
push bc
call GetObjectStruct
ld hl, OBJECT_MAP_OBJECT_INDEX
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
pop bc
cp c
ret nz
2015-11-02 08:15:32 -08:00
ld a, [wObjectFollow_Follower]
cp -1
2015-02-11 14:13:22 -08:00
ret z
call GetObjectStruct
ld hl, OBJECT_FLAGS2
2015-02-11 14:13:22 -08:00
add hl, bc
res 5, [hl]
ret
; 58b9
Function58b9:: ; 58b9
push bc
ld bc, ObjectStructs
xor a
.loop
2015-02-11 14:13:22 -08:00
push af
call GetObjectSprite
jr z, .next
ld hl, OBJECT_FLAGS2
2015-02-11 14:13:22 -08:00
add hl, bc
res 5, [hl]
.next
ld hl, OBJECT_STRUCT_LENGTH
2015-02-11 14:13:22 -08:00
add hl, bc
ld b, h
ld c, l
pop af
inc a
cp NUM_OBJECT_STRUCTS
jr nz, .loop
2015-02-11 14:13:22 -08:00
pop bc
ret
; 58d8
Function58d8: ; 58d8
2015-11-02 08:15:32 -08:00
call CheckObjectVisibility
2015-02-11 14:13:22 -08:00
ret c
ld hl, OBJECT_FLAGS2
2015-02-11 14:13:22 -08:00
add hl, bc
res 5, [hl]
ret
; 58e3
Function58e3: ; 58e3
ld hl, OBJECT_MAP_OBJECT_INDEX
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
cp -1
2015-11-11 20:38:57 -08:00
jp z, Function5903 ; a jr would have been appropriate here
2015-02-11 14:13:22 -08:00
push bc
call GetMapObject
2015-07-29 15:22:23 -07:00
ld hl, MAPOBJECT_MOVEMENT
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
pop bc
2015-11-11 20:38:57 -08:00
2015-11-02 08:15:32 -08:00
ld hl, OBJECT_MOVEMENTTYPE
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], a
2015-11-11 20:38:57 -08:00
ld hl, OBJECT_STEP_TYPE
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], STEP_TYPE_00
2015-02-11 14:13:22 -08:00
ret
; 5903
Function5903: ; 5903
call GetSpriteDirection
rrca
rrca
ld e, a
ld d, 0
2015-10-31 18:05:02 -07:00
ld hl, .standing_movefns
2015-02-11 14:13:22 -08:00
add hl, de
ld a, [hl]
2015-11-02 08:15:32 -08:00
ld hl, OBJECT_MOVEMENTTYPE
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], a
2015-11-11 20:38:57 -08:00
ld hl, OBJECT_STEP_TYPE
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], STEP_TYPE_00
2015-02-11 14:13:22 -08:00
ret
2015-10-31 18:05:02 -07:00
.standing_movefns
db SPRITEMOVEDATA_STANDING_DOWN
db SPRITEMOVEDATA_STANDING_UP
db SPRITEMOVEDATA_STANDING_LEFT
db SPRITEMOVEDATA_STANDING_RIGHT
2015-02-11 14:13:22 -08:00
; 5920
2015-11-15 18:28:15 -08:00
_UpdateSprites:: ; 5920
2015-02-11 14:13:22 -08:00
ld a, [VramState]
bit 0, a
ret z
xor a
ld [hUsedSpriteIndex], a
2015-02-11 14:13:22 -08:00
ld a, [hOAMUpdate]
push af
ld a, 1
2015-02-11 14:13:22 -08:00
ld [hOAMUpdate], a
2015-11-15 18:28:15 -08:00
call InitSprites
call .fill
2015-02-11 14:13:22 -08:00
pop af
ld [hOAMUpdate], a
ret
; 593a
2015-11-15 18:28:15 -08:00
.fill: ; 593a
2015-02-11 14:13:22 -08:00
ld a, [VramState]
bit 1, a
2015-11-15 18:28:15 -08:00
ld b, SpritesEnd % $100
jr z, .ok
2015-11-15 18:28:15 -08:00
ld b, 28 * 4
2015-02-11 14:13:22 -08:00
.ok
ld a, [hUsedSpriteIndex]
2015-02-11 14:13:22 -08:00
cp b
ret nc
ld l, a
2015-11-15 18:28:15 -08:00
ld h, Sprites / $100
ld de, 4
2015-02-11 14:13:22 -08:00
ld a, b
2015-11-15 18:28:15 -08:00
ld c, SCREEN_HEIGHT_PX + 16
.loop
2015-02-11 14:13:22 -08:00
ld [hl], c
add hl, de
cp l
jr nz, .loop
2015-02-11 14:13:22 -08:00
ret
; 5958
Function5958: ; 5958
push hl
push de
push bc
ld a, [wFollowNotExactPersonX]
2015-02-11 14:13:22 -08:00
ld d, a
ld a, [wFollowNotExactPersonY]
2015-02-11 14:13:22 -08:00
ld e, a
ld bc, ObjectStructs
ld a, NUM_OBJECT_STRUCTS
2015-02-11 14:13:22 -08:00
.loop
2015-02-11 14:13:22 -08:00
push af
call GetObjectSprite
jr z, .skip
2015-02-11 14:13:22 -08:00
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
.skip
ld hl, OBJECT_STRUCT_LENGTH
2015-02-11 14:13:22 -08:00
add hl, bc
ld b, h
ld c, l
pop af
dec a
jr nz, .loop
2015-02-11 14:13:22 -08:00
xor a
ld [wFollowNotExactPersonX], a
ld [wFollowNotExactPersonY], a
2015-02-11 14:13:22 -08:00
pop bc
pop de
pop hl
ret
; 5991
2015-11-15 18:28:15 -08:00
InitSprites: ; 5991
PRIORITY_LOW EQU $10
PRIORITY_NORM EQU $20
PRIORITY_HIGH EQU $30
call .DeterminePriorities
ld c, PRIORITY_HIGH
call .InitSpritesByPriority
ld c, PRIORITY_NORM
call .InitSpritesByPriority
ld c, PRIORITY_LOW
call .InitSpritesByPriority
2015-02-11 14:13:22 -08:00
ret
; 59a4
2015-11-15 18:28:15 -08:00
.DeterminePriorities: ; 59a4
2015-02-11 14:13:22 -08:00
xor a
2015-11-15 18:28:15 -08:00
ld hl, wc2eb
ld bc, NUM_OBJECT_STRUCTS
2015-02-11 14:13:22 -08:00
call ByteFill
ld d, 0
ld bc, ObjectStructs
2015-11-15 18:28:15 -08:00
ld hl, wc2eb
2015-02-11 14:13:22 -08:00
.loop
push hl
call GetObjectSprite
2015-02-11 14:13:22 -08:00
jr z, .skip
ld hl, OBJECT_FACING_STEP
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
2015-11-15 18:28:15 -08:00
cp STANDING
2015-02-11 14:13:22 -08:00
jr z, .skip
; Define the sprite priority.
2015-11-15 18:28:15 -08:00
ld e, PRIORITY_LOW
ld hl, OBJECT_FLAGS2
2015-02-11 14:13:22 -08:00
add hl, bc
bit 0, [hl]
jr nz, .add
2015-11-15 18:28:15 -08:00
ld e, PRIORITY_NORM
2015-02-11 14:13:22 -08:00
bit 1, [hl]
jr z, .add
2015-11-15 18:28:15 -08:00
ld e, PRIORITY_HIGH
2015-02-11 14:13:22 -08:00
jr .add
.skip
ld hl, OBJECT_STRUCT_LENGTH
2015-02-11 14:13:22 -08:00
add hl, bc
ld b, h
ld c, l
pop hl
jr .next
.add
ld hl, OBJECT_STRUCT_LENGTH
2015-02-11 14:13:22 -08:00
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 NUM_OBJECT_STRUCTS
2015-02-11 14:13:22 -08:00
jr nz, .loop
ret
; 59f3
2015-11-15 18:28:15 -08:00
.InitSpritesByPriority: ; 59f3
2015-11-02 08:15:32 -08:00
ld hl, wMovementPointer
2015-11-15 18:28:15 -08:00
.next_sprite
2015-02-11 14:13:22 -08:00
ld a, [hli]
ld d, a
2015-11-11 20:38:57 -08:00
and $f0
2015-02-11 14:13:22 -08:00
ret z
cp c
2015-11-15 18:28:15 -08:00
jr nz, .next_sprite
2015-02-11 14:13:22 -08:00
push bc
push hl
ld a, d
2015-11-11 20:38:57 -08:00
and $f
call .GetObjectStructPointer
2015-11-15 18:28:15 -08:00
call .InitSprite
2015-02-11 14:13:22 -08:00
pop hl
pop bc
2015-11-15 18:28:15 -08:00
jr .next_sprite
2015-02-11 14:13:22 -08:00
; 5a0d
2015-11-15 18:28:15 -08:00
.InitSprite: ; 5a0d
ld hl, OBJECT_SPRITE_TILE
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
and %01111111
2015-11-11 20:38:57 -08:00
ld [hFFC1], a
2015-02-11 14:13:22 -08:00
xor a
bit 7, [hl]
jr nz, .skip1
or %00001000
.skip1
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_FLAGS2
2015-02-11 14:13:22 -08:00
add hl, bc
ld e, [hl]
bit 7, e
jr z, .skip2
or %10000000
.skip2
2015-02-11 14:13:22 -08:00
bit 4, e
jr z, .skip3
or %00010000
.skip3
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_PALETTE
add hl, bc
ld d, a
ld a, [hl]
and %00000111
2015-02-11 14:13:22 -08:00
or d
ld d, a
xor a
bit 3, e
jr z, .skip4
or %10000000
.skip4
2015-11-11 20:38:57 -08:00
ld [hFFC2], a
2015-02-11 14:13:22 -08:00
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, [wFollowNotExactPersonX]
2015-02-11 14:13:22 -08:00
add e
2015-11-11 20:38:57 -08:00
ld [hFFBF], a
2015-02-11 14:13:22 -08:00
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, [wFollowNotExactPersonY]
2015-02-11 14:13:22 -08:00
add e
2015-11-11 20:38:57 -08:00
ld [hFFC0], a
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_FACING_STEP
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
2015-11-14 11:41:47 -08:00
cp STANDING
2015-02-11 14:13:22 -08:00
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, [hUsedSpriteIndex]
2015-02-11 14:13:22 -08:00
ld c, a
ld b, Sprites / $100
ld a, [hli]
ld [hUsedSpriteTile], a
2015-02-11 14:13:22 -08:00
add c
cp SpritesEnd % $100
jr nc, .full
.addsprite
2015-11-11 20:38:57 -08:00
ld a, [hFFC0]
2015-02-11 14:13:22 -08:00
add [hl]
inc hl
ld [bc], a
inc c
2015-11-11 20:38:57 -08:00
ld a, [hFFBF]
2015-02-11 14:13:22 -08:00
add [hl]
inc hl
ld [bc], a
inc c
ld e, [hl]
inc hl
2015-11-11 20:38:57 -08:00
ld a, [hFFC1]
2015-02-11 14:13:22 -08:00
bit 2, e
jr z, .nope1
2015-02-11 14:13:22 -08:00
xor a
.nope1
2015-02-11 14:13:22 -08:00
add [hl]
inc hl
ld [bc], a
inc c
ld a, e
bit 1, a
jr z, .nope2
2015-11-11 20:38:57 -08:00
ld a, [hFFC2]
2015-02-11 14:13:22 -08:00
or e
.nope2
and %11110000
2015-02-11 14:13:22 -08:00
or d
ld [bc], a
inc c
ld a, [hUsedSpriteTile]
2015-02-11 14:13:22 -08:00
dec a
ld [hUsedSpriteTile], a
2015-02-11 14:13:22 -08:00
jr nz, .addsprite
ld a, c
ld [hUsedSpriteIndex], a
2015-02-11 14:13:22 -08:00
.done
xor a
ret
.full
scf
ret
; 5ac2
2015-11-11 20:38:57 -08:00
.GetObjectStructPointer: ; 5ac2
2015-02-11 14:13:22 -08:00
ld c, a
ld b, 0
ld hl, .Addresses
rept 2
add hl,bc
endr
2015-02-11 14:13:22 -08:00
ld c, [hl]
inc hl
ld b, [hl]
ret
; 5ace
.Addresses ; 5ace
dw PlayerStruct
2015-11-02 08:15:32 -08:00
dw Object1Struct
dw Object2Struct
dw Object3Struct
dw Object4Struct
dw Object5Struct
dw Object6Struct
dw Object7Struct
dw Object8Struct
dw Object9Struct
dw Object10Struct
dw Object11Struct
dw Object12Struct
2015-02-11 14:13:22 -08:00
; 5ae8