pokecrystal-board/engine/map_objects.asm

3719 lines
49 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-10-31 18:05:02 -07:00
; function, facing, ?, ?, ?, ?
db SPRITEMOVEFN_00, DOWN, $01, $02, $00, $00 ; 00
2015-11-06 13:42:38 -08:00
db SPRITEMOVEFN_STANDING, DOWN, $01, $0c, $00, $00 ; 01
db SPRITEMOVEFN_RANDOM_WALK_XY, DOWN, $01, $00, $00, $00 ; 02
db SPRITEMOVEFN_SLOW_RANDOM_SPIN, DOWN, $01, $00, $00, $00 ; 03
db SPRITEMOVEFN_RANDOM_WALK_Y, DOWN, $01, $00, $00, $00 ; 04
db SPRITEMOVEFN_RANDOM_WALK_X, DOWN, $01, $00, $00, $00 ; 05
db SPRITEMOVEFN_STANDING, DOWN, $01, $00, $00, $00 ; 06
db SPRITEMOVEFN_STANDING, UP, $01, $00, $00, $00 ; 07
db SPRITEMOVEFN_STANDING, LEFT, $01, $00, $00, $00 ; 08
db SPRITEMOVEFN_STANDING, RIGHT, $01, $00, $00, $00 ; 09
db SPRITEMOVEFN_FAST_RANDOM_SPIN, DOWN, $01, $00, $00, $00 ; 0a
db SPRITEMOVEFN_OBEY_DPAD, DOWN, $01, $02, $00, $00 ; 0b
2015-10-31 18:05:02 -07:00
db SPRITEMOVEFN_08, DOWN, $01, $00, $00, $00 ; 0c
db SPRITEMOVEFN_09, DOWN, $01, $00, $00, $00 ; 0d
db SPRITEMOVEFN_0A, DOWN, $01, $00, $00, $00 ; 0e
db SPRITEMOVEFN_0B, DOWN, $01, $00, $00, $00 ; 0f
db SPRITEMOVEFN_0C, DOWN, $01, $00, $00, $00 ; 10
db SPRITEMOVEFN_0D, DOWN, $01, $00, $00, $00 ; 11
db SPRITEMOVEFN_0E, DOWN, $01, $00, $00, $00 ; 12
2015-11-06 13:42:38 -08:00
db SPRITEMOVEFN_FOLLOW, DOWN, $01, $02, $00, $00 ; 13
db SPRITEMOVEFN_SCRIPTED, DOWN, $01, $02, $00, $00 ; 14
db SPRITEMOVEFN_BIG_SNORLAX, DOWN, $09, $2e, $01, $c0 ; 15
db SPRITEMOVEFN_BOUNCE, DOWN, $0a, $2e, $00, $00 ; 16
db SPRITEMOVEFN_STANDING, DOWN, $01, $0c, $00, $00 ; 17
db SPRITEMOVEFN_STANDING, DOWN, $01, $2e, $10, $00 ; 18
db SPRITEMOVEFN_STRENGTH, DOWN, $01, $2e, $00, $40 ; 19
2015-11-08 10:27:26 -08:00
db SPRITEMOVEFN_FOLLOWNOTEXACT, DOWN, $01, $02, $00, $00 ; 1a
2015-10-31 18:05:02 -07:00
db SPRITEMOVEFN_13, DOWN, $00, $8e, $01, $00 ; 1b
db SPRITEMOVEFN_14, DOWN, $08, $8e, $02, $00 ; 1c
db SPRITEMOVEFN_17, DOWN, $00, $82, $00, $00 ; 1d
2015-11-06 13:42:38 -08:00
db SPRITEMOVEFN_SPIN_COUNTERCLOCKWISE, LEFT, $01, $00, $00, $00 ; 1e
db SPRITEMOVEFN_SPIN_CLOCKWISE, RIGHT, $01, $00, $00, $00 ; 1f
db SPRITEMOVEFN_STRENGTH, DOWN, $0c, $2e, $01, $c0 ; 20
db SPRITEMOVEFN_STRENGTH, DOWN, $0d, $2e, $01, $c0 ; 21
2015-10-31 18:05:02 -07:00
db SPRITEMOVEFN_1A, DOWN, $0e, $8e, $01, $00 ; 22
db SPRITEMOVEFN_1B, DOWN, $0f, $8e, $02, $00 ; 23
2015-11-06 13:42:38 -08:00
db SPRITEMOVEFN_RANDOM_WALK_XY, DOWN, $01, $00, $00, $20 ; 24
2015-10-31 18:05:02 -07:00
db SPRITEMOVEFN_00, DOWN, $01, $00, $00, $00 ; 25
2015-02-11 14:13:22 -08:00
; 4357
Function4357:: ; 4357
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
call Function4386
ret c
call Function43f3
call Function4427
ret
; 4386
Function4386: ; 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
ld hl, OBJECT_MAP_X
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
ld hl, OBJECT_MAP_Y
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
ld hl, OBJECT_20
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
ld hl, OBJECT_21
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-02-11 14:13:22 -08:00
call Function4357
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_09
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
cp 1
jr z, .one
jr .ok
2015-02-11 14:13:22 -08:00
.zero
2015-02-11 14:13:22 -08:00
call Function47bc
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-02-11 14:13:22 -08:00
call Function47dd
ld hl, OBJECT_09
add hl, bc
ld a, [hl]
and a
ret z
cp 1
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
bit 0, [hl]
jr nz, Function44a3
ld hl, OBJECT_FLAGS2
2015-02-11 14:13:22 -08:00
add hl, bc
bit 6, [hl]
jr nz, Function44a3
bit 5, [hl]
jr nz, Function4448
ld de, Pointers445f
jr Function444d
; 4440
Function4440: ; 4440
ld hl, OBJECT_FLAGS1
2015-02-11 14:13:22 -08:00
add hl, bc
bit 0, [hl]
jr nz, Function44a3
; fallthrough
; 4448
Function4448: ; 4448
ld de, Pointers445f + 2
jr Function444d
; 444d
Function444d: ; 444d
ld hl, OBJECT_11
add hl, bc
ld a, [hl]
ld l, a
ld h, 0
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
2015-07-29 15:22:23 -07:00
dw Function44a3 ; 00
dw Function44a3 ; 01
dw Function44b5 ; 02
dw Function44aa ; 03
dw Function44c1 ; 04
dw Function44aa ; 05
dw Function4508 ; 06
dw Function44aa ; 07
dw Function4529 ; 08
dw Function44aa ; 09
dw Function4539 ; 0a
dw Function44a3 ; 0b
dw Function456e ; 0c
dw Function456e ; 0d
dw Function457b ; 0e
dw Function44a3 ; 0f
dw Function4582 ; 10
dw Function4582 ; 11
dw Function4589 ; 12
dw Function4589 ; 13
dw Function4590 ; 14
dw Function45a4 ; 15
dw Function45ab ; 16
dw Function44aa ; 17
dw Function45be ; 18
dw Function45be ; 19
dw Function45c5 ; 1a
dw Function45c5 ; 1b
dw Function45da ; 1c
dw Function44a3 ; 1d
dw Function45ed ; 1e
dw Function44a3 ; 1f
dw Function44e4 ; 20
dw Function44aa ; 21
2015-02-11 14:13:22 -08:00
; 44a3
Function44a3: ; 44a3
ld hl, OBJECT_FACING_STEP
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], -1
2015-02-11 14:13:22 -08:00
ret
; 44aa
Function44aa: ; 44aa
call GetSpriteDirection
or 0
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 Function44aa
; 44c1
Function44c1: ; 44c1
ld hl, OBJECT_FLAGS1
2015-02-11 14:13:22 -08:00
add hl, bc
bit 3, [hl]
jp nz, Function44aa
ld hl, OBJECT_12
add hl, bc
ld a, [hl]
inc a
and %00001111
2015-02-11 14:13:22 -08:00
ld [hl], a
rrca
rrca
and %00000011
2015-02-11 14:13:22 -08:00
ld d, a
call GetSpriteDirection
or 0
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
bit 3, [hl]
jp nz, Function44aa
ld hl, OBJECT_12
add hl, bc
ld a, [hl]
add 2
and %00001111
2015-02-11 14:13:22 -08:00
ld [hl], a
rrca
rrca
and %00000011
2015-02-11 14:13:22 -08:00
ld d, a
call GetSpriteDirection
or 0
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
bit 3, [hl]
jp nz, Function44aa
ld hl, OBJECT_12
add hl, bc
inc [hl]
ld a, [hl]
rrca
rrca
rrca
and %00000011
2015-02-11 14:13:22 -08:00
ld d, a
call GetSpriteDirection
or 0
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
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 Function44a3
; 453f
Function453f: ; 453f
ld hl, OBJECT_12
add hl, bc
ld a, [hl]
and %11110000
2015-02-11 14:13:22 -08:00
ld e, a
ld a, [hl]
inc a
and %00001111
2015-02-11 14:13:22 -08:00
ld d, a
cp 4
jr c, .ok
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
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 DOWN << 2, RIGHT << 2, UP << 2, LEFT << 2
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
ld [hl], $15
ret
; 4582
Function4582: ; 4582
ld hl, OBJECT_FACING_STEP
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], $14
ret
; 4589
Function4589: ; 4589
ld hl, OBJECT_FACING_STEP
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], $17
ret
; 4590
Function4590: ; 4590
ld hl, OBJECT_12
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
ld [hl], $4
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
ld hl, OBJECT_12
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
ld [hl], $16
ret
; 45c5
Function45c5: ; 45c5
ld a, [VariableSprites + SPRITE_BIG_DOLL - SPRITE_VARS]
2015-02-11 14:13:22 -08:00
ld d, $17
cp SPRITE_BIG_SNORLAX
jr z, .ok
cp SPRITE_BIG_LAPRAS
jr z, .ok
2015-02-11 14:13:22 -08:00
ld d, $16
.ok
ld hl, OBJECT_FACING_STEP
2015-02-11 14:13:22 -08:00
add hl, bc
ld [hl], d
ret
; 45da
Function45da: ; 45da
ld hl, OBJECT_12
add hl, bc
inc [hl]
ld a, [hl]
ld hl, OBJECT_FACING_STEP
2015-02-11 14:13:22 -08:00
add hl, bc
and 2
ld a, $1c
jr z, .ok
2015-02-11 14:13:22 -08:00
inc a
.ok
2015-02-11 14:13:22 -08:00
ld [hl], a
ret
; 45ed
Function45ed: ; 45ed
ld hl, OBJECT_12
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
ld a, $1e
jr z, .ok
2015-02-11 14:13:22 -08:00
inc a
.ok
2015-02-11 14:13:22 -08:00
ld [hl], a
ret
; 4600
Function4600: ; 4600
ld hl, OBJECT_MAP_X
add hl, bc
ld a, [hl]
ld hl, OBJECT_NEXT_MAP_X
add hl, bc
ld [hl], a
ld hl, OBJECT_MAP_Y
add hl, bc
ld a, [hl]
ld hl, OBJECT_NEXT_MAP_Y
add hl, bc
ld [hl], a
ld hl, OBJECT_STANDING_TILE
add hl, bc
ld a, [hl]
ld hl, OBJECT_NEXT_TILE
add hl, bc
ld [hl], a
call Function4661
ld hl, OBJECT_STANDING_TILE
add hl, bc
ld a, [hl]
call Function4679
ret
; 462a
Function462a: ; 462a
ld hl, OBJECT_NEXT_MAP_X
add hl, bc
ld a, [hl]
ld hl, OBJECT_MAP_X
add hl, bc
ld [hl], a
ld hl, OBJECT_NEXT_MAP_Y
add hl, bc
ld a, [hl]
ld hl, OBJECT_MAP_Y
add hl, bc
ld [hl], a
ret
; 463f
Function463f: ; 463f
ld hl, OBJECT_FLAGS2
2015-02-11 14:13:22 -08:00
add hl, bc
bit 3, [hl]
jr z, .ok
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_STANDING_TILE
add hl, bc
ld a, [hl]
call Function4661
.ok
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_STANDING_TILE
add hl, bc
ld a, [hl]
call Function4679
ret c
ld hl, OBJECT_NEXT_TILE
add hl, bc
ld a, [hl]
call Function4679
ret
; 4661
Function4661: ; 4661
call CheckSuperTallGrassTile
jr z, .set
2015-02-11 14:13:22 -08:00
call Function1875
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
Function4679: ; 4679
and a
ret
; 467b
Function467b: ; 467b
xor a
ld hl, OBJECT_12
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-02-11 14:13:22 -08:00
ld [hl], a
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
Function4690: ; 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
bit 2, [hl]
jr nz, .ok
2015-02-11 14:13:22 -08:00
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
.ok
2015-02-11 14:13:22 -08:00
; fallthrough
; 46a6
Function46a6: ; 46a6
call GetStepVector
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], a
ld a, d
call Function4730
ld hl, OBJECT_NEXT_MAP_X
add hl, bc
add [hl]
ld hl, OBJECT_MAP_X
add hl, bc
ld [hl], a
ld d, a
ld a, e
call Function4730
ld hl, OBJECT_NEXT_MAP_Y
add hl, bc
add [hl]
ld hl, OBJECT_MAP_Y
add hl, bc
ld [hl], a
ld e, a
push bc
call Function2a3c
pop bc
ld hl, OBJECT_STANDING_TILE
add hl, bc
ld [hl], a
ret
; 46d7
Function46d7: ; 46d7
call GetStepVector
ld hl, OBJECT_SPRITE_X
add hl, bc
ld a, [hl]
add d
ld [hl], a
ld hl, OBJECT_SPRITE_Y
add hl, bc
ld a, [hl]
add e
ld [hl], a
ret
; 46e9
GetStepVector: ; 46e9
; Return (x, y, duration, speed) in (d, e, a, h).
ld hl, OBJECT_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
Function4730: ; 4730
add a
ret z
ld a, 1
ret nc
ld a, -1
ret
; 4738
Function4738: ; 4738
ld hl, OBJECT_DIRECTION_WALKING
2015-02-11 14:13:22 -08:00
add hl, bc
ld a, [hl]
and %00000011
2015-02-11 14:13:22 -08:00
ld [wd151], a
call Function46d7
ld a, [wd14e]
add d
ld [wd14e], a
ld a, [wd14f]
add e
ld [wd14f], a
ld hl, wd150
set 5, [hl]
ret
; 4759
Function4759: ; 4759
push bc
ld e, a
ld d, 0
ld hl, OBJECT_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
ClearObjectStructField27: ; 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
IncrementObjectStructField27: ; 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
DecrementObjectStructField27: ; 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
JumptoObjectStructField27: ; 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
JumptoObjectStructField28: ; 47a8
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
Function47bc: ; 47bc
ld hl, OBJECT_MAP_X
add hl, bc
ld d, [hl]
ld hl, OBJECT_MAP_Y
add hl, bc
ld e, [hl]
push bc
call Function2a3c
pop bc
ld hl, OBJECT_STANDING_TILE
add hl, bc
ld [hl], a
call Function4600
call Function467b
ld hl, OBJECT_09
add hl, bc
ld [hl], 1
2015-02-11 14:13:22 -08:00
ret
; 47dd
Function47dd: ; 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-11-06 13:42:38 -08:00
dw .Null_00 ; 00
dw .RandomWalkY ; 01
dw .RandomWalkX ; 02
dw .RandomWalkXY ; 03
dw .RandomSpin1 ; 04
dw .RandomSpin2 ; 05
dw .Standing ; 06
dw .ObeyDPad ; 07
dw .Movement08 ; 08
dw .Movement09 ; 09
dw .Movement0a ; 0a
dw .Movement0b ; 0b
dw .Movement0c ; 0c
dw .Movement0d ; 0d
dw .Movement0e ; 0e
dw .Follow ; 0f
dw .Script ; 10
dw .Strength ; 11
2015-11-08 10:27:26 -08:00
dw .FollowNotExact ; 12
2015-11-06 13:42:38 -08:00
dw .Movement13 ; 13
dw .Movement14 ; 14
dw .MovementBigStanding ; 15
dw .MovementBouncing ; 16
dw .Movement17 ; 17
dw .MovementSpinClockwise ; 18
dw .MovementSpinCounterclockwise ; 19
dw .Movement1a ; 1a
dw .Movement1b ; 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
jp Function4b1d
; 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
jp Function4b26
; 4869
2015-11-06 13:42:38 -08:00
.Standing: ; 4869
2015-02-11 14:13:22 -08:00
call Function462a
call Function467b
ld hl, OBJECT_11
add hl, bc
ld [hl], 1
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_09
add hl, bc
ld [hl], 5
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 JumptoObjectStructField27
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
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_STANDING_TILE
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-02-11 14:13:22 -08:00
ld hl, OBJECT_32
add hl, bc
ld a, [hl]
and %00000011
or 0
2015-02-11 14:13:22 -08:00
call Function4690
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
call Function5538
call Function463f
ld hl, OBJECT_09
add hl, bc
ld [hl], $f
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
call IncrementObjectStructField27
2015-02-11 14:13:22 -08:00
; fallthrough
; 48f8
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-02-11 14:13:22 -08:00
ld hl, OBJECT_MAP_X
add hl, bc
ld d, [hl]
2015-11-11 20:38:57 -08:00
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_MAP_Y
add hl, bc
ld e, [hl]
2015-11-11 20:38:57 -08:00
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_32
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-02-11 14:13:22 -08:00
ld hl, OBJECT_NEXT_MAP_X
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-02-11 14:13:22 -08:00
ld hl, OBJECT_NEXT_MAP_Y
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-02-11 14:13:22 -08:00
ld hl, OBJECT_11
add hl, bc
ld [hl], 1
2015-02-11 14:13:22 -08:00
ret
; 4958
2015-11-06 13:42:38 -08:00
.MovementBigStanding: ; 4958
2015-02-11 14:13:22 -08:00
call Function467b
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_11
add hl, bc
ld [hl], 9
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_09
add hl, bc
ld [hl], 4
2015-02-11 14:13:22 -08:00
ret
; 496e
2015-11-06 13:42:38 -08:00
.MovementBouncing: ; 496e
2015-02-11 14:13:22 -08:00
call Function467b
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_11
add hl, bc
ld [hl], 10
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_09
add hl, bc
ld [hl], 4
2015-02-11 14:13:22 -08:00
ret
; 4984
2015-11-06 13:42:38 -08:00
.MovementSpinCounterclockwise: ; 4984
call JumptoObjectStructField27
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 JumptoObjectStructField27
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-02-11 14:13:22 -08:00
call Function467b
call IncrementObjectStructField27
2015-02-11 14:13:22 -08:00
; fallthrough
; 499c
2015-11-06 13:42:38 -08:00
.MovementSpinRepeat: ; 499c
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_11
add hl, bc
ld [hl], 1
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_32
add hl, bc
ld a, [hl]
ld a, $10
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], a
ld hl, OBJECT_09
add hl, bc
ld [hl], 3
call IncrementObjectStructField27
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 RIGHT << 2, LEFT << 2, DOWN << 2, UP << 2
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 LEFT << 2, RIGHT << 2, UP << 2, DOWN << 2
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
call DecrementObjectStructField27
2015-02-11 14:13:22 -08:00
ret
; 49e5
2015-11-06 13:42:38 -08:00
.Movement13: ; 49e5
call ._Movement13_14_1a_1b
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_11
add hl, bc
ld [hl], $7
ld hl, OBJECT_STEP_DURATION
add hl, de
ld a, [hl]
inc a
add a
add 0
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
ld d, $e
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-02-11 14:13:22 -08:00
ld d, $c
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
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_09
add hl, bc
ld [hl], $13
ret
; 4a21
2015-11-06 13:42:38 -08:00
.Movement14: ; 4a21
2015-02-11 14:13:22 -08:00
call Function467b
2015-11-06 13:42:38 -08:00
call ._Movement13_14_1a_1b
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_11
add hl, bc
ld [hl], 8
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
ld [hl], $f0
ld hl, OBJECT_SPRITE_X_OFFSET
add hl, bc
ld [hl], 0
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_09
add hl, bc
ld [hl], $13
ret
; 4a46
2015-11-06 13:42:38 -08:00
.Movement1a: ; 4a46
2015-02-11 14:13:22 -08:00
call Function467b
2015-11-06 13:42:38 -08:00
call ._Movement13_14_1a_1b
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_11
add hl, bc
ld [hl], $e
ld hl, OBJECT_STEP_DURATION
add hl, de
ld a, [hl]
inc a
add a
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], a
ld hl, OBJECT_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_09
add hl, bc
ld [hl], $13
ret
; 4a81
.data_4a81 ; 4a81
; x, y
db 0, -4
db 0, 8
db 6, 2
db -6, 2
; 4a89
2015-11-06 13:42:38 -08:00
.Movement1b: ; 4a89
2015-02-11 14:13:22 -08:00
call Function467b
2015-11-06 13:42:38 -08:00
call ._Movement13_14_1a_1b
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_11
add hl, bc
ld [hl], $f
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_09
add hl, bc
ld [hl], $13
ret
; 4aa8
2015-11-06 13:42:38 -08:00
._Movement13_14_1a_1b: ; 4aa8
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_32
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
2015-11-06 13:42:38 -08:00
.Movement17: ; 4abc
2015-02-11 14:13:22 -08:00
call Function467b
ld hl, OBJECT_11
add hl, bc
ld [hl], 0
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_32
add hl, bc
ld a, [hl]
2015-11-06 13:42:38 -08:00
call ._Movement17
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_09
add hl, bc
ld [hl], $15
ret
; 4ade
2015-11-06 13:42:38 -08:00
._Movement17: ; 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-02-11 14:13:22 -08:00
call Function4690
call Function6ec1
jr c, Function4b17
call Function463f
ld hl, OBJECT_11
add hl, bc
ld [hl], 2
2015-02-11 14:13:22 -08:00
ld hl, wd4cf
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
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_09
add hl, bc
2015-11-06 13:42:38 -08:00
ld [hl], 7
2015-02-11 14:13:22 -08:00
ret
2015-11-06 13:42:38 -08:00
.load_6
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_09
add hl, bc
ld [hl], 6
2015-02-11 14:13:22 -08:00
ret
Function4b17: ; 4b17
call Function467b
call Function462a
; fallthrough
; 4b1d
Function4b1d: ; 4b1d
call Random
ld a, [hRandomAdd]
and %01111111
2015-02-11 14:13:22 -08:00
jr Function4b2d
; 4b26
Function4b26: ; 4b26
call Random
ld a, [hRandomAdd]
and %00011111
2015-02-11 14:13:22 -08:00
; fallthrough
; 4b2d
Function4b2d: ; 4b2d
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-02-11 14:13:22 -08:00
ld hl, OBJECT_11
add hl, bc
ld [hl], 1
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_09
add hl, bc
ld [hl], 3
2015-02-11 14:13:22 -08:00
ret
; 4b45
Pointers4b45: ; 4b45
dw Function47bc
dw Function47dd
dw Function4e2b
dw Function4ddd
dw Function4e21
dw Function4e0c
dw Function4e56
dw Function4e47
dw Function4b86
dw Function4bbf
dw Function4e83
dw Function4dff
dw Function4c18
dw Function4c89
dw Function4d14
dw Function4ecd
dw Function4d7e
dw Function4daf
dw Function4dc8
dw Function4f04
dw Function4f33
dw Function4f33
dw Function4f77
dw Function4f7a
dw Function4df0
dw Function4f83
; 4b79
Function4b79: ; 4b79
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
ret nz
ld hl, OBJECT_09
add hl, bc
ld [hl], 1
2015-02-11 14:13:22 -08:00
ret
; 4b86
Function4b86: ; 4b86
call JumptoObjectStructField28
2015-02-11 14:13:22 -08:00
dw Function4b8d
dw Function4ba9
; 4b8d
Function4b8d: ; 4b8d
call Function46d7
call UpdateJumpPosition
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
ret nz
call Function4600
call Function46a6
ld hl, OBJECT_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
call Function46d7
call UpdateJumpPosition
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
ret nz
call Function4600
ld hl, OBJECT_09
add hl, bc
ld [hl], 1
2015-02-11 14:13:22 -08:00
ret
; 4bbf
Function4bbf: ; 4bbf
call JumptoObjectStructField28
2015-02-11 14:13:22 -08:00
dw Function4bca
dw Function4bd2
dw Function4bf2
dw Function4bfd
; 4bca
Function4bca: ; 4bca
ld hl, wd150
set 7, [hl]
call IncrementObjectStructField28
2015-02-11 14:13:22 -08:00
; fallthrough
; 4bd2
Function4bd2: ; 4bd2
call UpdateJumpPosition
call Function4738
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
ret nz
call Function4600
ld hl, OBJECT_FLAGS2
2015-02-11 14:13:22 -08:00
add hl, bc
res 3, [hl]
ld hl, wd150
set 6, [hl]
set 4, [hl]
call IncrementObjectStructField28
2015-02-11 14:13:22 -08:00
ret
; 4bf2
Function4bf2: ; 4bf2
call Function46a6
ld hl, wd150
set 7, [hl]
call IncrementObjectStructField28
2015-02-11 14:13:22 -08:00
; fallthrough
; 4bfd
Function4bfd: ; 4bfd
call UpdateJumpPosition
call Function4738
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
ret nz
ld hl, wd150
set 6, [hl]
call Function4600
ld hl, OBJECT_09
add hl, bc
ld [hl], 1
2015-02-11 14:13:22 -08:00
ret
; 4c18
Function4c18: ; 4c18
call JumptoObjectStructField28
2015-02-11 14:13:22 -08:00
dw Function4c23
dw Function4c32
dw Function4c42
dw Function4c5d
; 4c23
Function4c23: ; 4c23
ld hl, OBJECT_12
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
; fallthrough
; 4c32
Function4c32: ; 4c32
ld hl, OBJECT_11
add hl, bc
ld [hl], 4
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
ld hl, OBJECT_12
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
; fallthrough
; 4c5d
Function4c5d: ; 4c5d
ld hl, OBJECT_11
add hl, bc
ld [hl], 4
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
ld hl, OBJECT_12
add hl, bc
ld [hl], 0
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_09
add hl, bc
ld [hl], 1
2015-02-11 14:13:22 -08:00
ret
; 4c89
Function4c89: ; 4c89
call JumptoObjectStructField28
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
ld hl, OBJECT_11
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
; 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
; fallthrough
; 4cb3
Function4cb3: ; 4cb3
ld hl, OBJECT_12
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
ld hl, OBJECT_11
add hl, bc
ld [hl], 4
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
; fallthrough
; 4ceb
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
ld hl, OBJECT_11
add hl, bc
ld [hl], 4
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
ret nz
; 4d01
Function4d01: ; 4d01
ld hl, OBJECT_12
add hl, bc
ld [hl], 0
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_SPRITE_Y_OFFSET
add hl, bc
ld [hl], 0
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_09
add hl, bc
ld [hl], 1
2015-02-11 14:13:22 -08:00
ret
; 4d14
Function4d14: ; 4d14
call JumptoObjectStructField28
2015-02-11 14:13:22 -08:00
dw Function4d1f
dw Function4d2e
dw Function4d4f
dw Function4d6b
; 4d1f
Function4d1f: ; 4d1f
ld hl, OBJECT_11
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
; fallthrough
; 4d2e
Function4d2e: ; 4d2e
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
ret nz
ld hl, OBJECT_11
add hl, bc
ld [hl], 2
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_12
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
; fallthrough
; 4d4f
Function4d4f: ; 4d4f
ld hl, OBJECT_31
add hl, bc
inc [hl]
ld a, [hl]
ld d, $60
call Sine
ld a, h
sub $60
ld hl, OBJECT_SPRITE_Y_OFFSET
add hl, bc
ld [hl], a
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
ret nz
call IncrementObjectStructField28
2015-02-11 14:13:22 -08:00
; fallthrough
; 4d6b
Function4d6b: ; 4d6b
ld hl, OBJECT_12
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
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_09
add hl, bc
ld [hl], 1
2015-02-11 14:13:22 -08:00
ret
; 4d7e
Function4d7e: ; 4d7e
call JumptoObjectStructField28
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
; fallthrough
; 4d94
Function4d94: ; 4d94
ld hl, OBJECT_SPRITE_Y_OFFSET
add hl, bc
ld a, [hl]
xor 1
ld [hl], a
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
ret nz
ld hl, OBJECT_SPRITE_Y_OFFSET
add hl, bc
ld [hl], 0
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_09
add hl, bc
ld [hl], 1
2015-02-11 14:13:22 -08:00
ret
; 4daf
Function4daf: ; 4daf
call Function4db5
jp Function4b79
; 4db5
Function4db5: ; 4db5
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld a, [hl]
and %00000001
ld a, 1
jr z, .yes
ld a, 0
2015-02-11 14:13:22 -08:00
.yes
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_11
add hl, bc
ld [hl], a
ret
; 4dc8
Function4dc8: ; 4dc8
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld a, [hl]
and %00000001
ld a, 4
jr z, .yes
ld a, 5
2015-02-11 14:13:22 -08:00
.yes
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_11
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_09
add hl, bc
ld [hl], 1
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
jp Function4357
; 4dff
Function4dff: ; 4dff
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
ret nz
ld hl, OBJECT_09
add hl, bc
ld [hl], 1
2015-02-11 14:13:22 -08:00
ret
; 4e0c
Function4e0c: ; 4e0c
call JumptoObjectStructField28
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
2015-02-11 14:13:22 -08:00
call Function1a47
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
; fallthrough
; 4e21
Function4e21: ; 4e21
call Function4fb2
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
Function4e2b: ; 4e2b
call Function4fb2
call Function46d7
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
ret nz
call Function4600
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_09
add hl, bc
ld [hl], 1
2015-02-11 14:13:22 -08:00
ret
; 4e47
Function4e47: ; 4e47
call Function46d7
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
ret nz
call Function4600
jp Function4b1d
; 4e56
Function4e56: ; 4e56
; AnimateStep?
call JumptoObjectStructField28
2015-02-11 14:13:22 -08:00
dw Function4e5d
dw Function4e65
; 4e5d
Function4e5d: ; 4e5d
ld hl, wd150
set 7, [hl]
call IncrementObjectStructField28
2015-02-11 14:13:22 -08:00
; fallthrough
; 4e65
Function4e65: ; 4e65
call Function4738
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
ret nz
ld hl, wd150
set 6, [hl]
call Function4600
ld hl, OBJECT_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_09
add hl, bc
ld [hl], 1
2015-02-11 14:13:22 -08:00
ret
; 4e83
Function4e83: ; 4e83
call JumptoObjectStructField28
2015-02-11 14:13:22 -08:00
dw Function4e8e
dw Function4ea4
dw Function4ead
dw Function4ec0
; 4e8e
Function4e8e: ; 4e8e
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_12
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-02-11 14:13:22 -08:00
; fallthrough
; 4ea4
Function4ea4: ; 4ea4
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
ret nz
call IncrementObjectStructField28
2015-02-11 14:13:22 -08:00
; fallthrough
; 4ead
Function4ead: ; 4ead
ld hl, OBJECT_29
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
ld [hl], $2
call IncrementObjectStructField28
2015-02-11 14:13:22 -08:00
; fallthrough
; 4ec0
Function4ec0: ; 4ec0
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
ret nz
ld hl, OBJECT_09
add hl, bc
ld [hl], 1
2015-02-11 14:13:22 -08:00
ret
; 4ecd
Function4ecd: ; 4ecd
call Function46d7
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
ret nz
push bc
ld hl, OBJECT_MAP_X
add hl, bc
ld d, [hl]
ld hl, OBJECT_MAP_Y
add hl, bc
ld e, [hl]
ld hl, OBJECT_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]
call Function4600
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_09
add hl, bc
ld [hl], 1
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-02-11 14:13:22 -08:00
jp Function4357
; 4f33
Function4f33: ; 4f33
call JumptoObjectStructField28
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
; fallthrough
; 4f43
Function4f43: ; 4f43
ld hl, OBJECT_29
add hl, bc
ld d, [hl]
ld a, [wd14f]
sub d
ld [wd14f], a
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
jr z, .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, [wd14f]
add d
ld [wd14f], a
ret
.ok
2015-02-11 14:13:22 -08:00
call Function4357
ret
; 4f6c
Function4f6c: ; 4f6c
ld hl, OBJECT_30
add hl, bc
and 1
ld a, [hl]
ret z
cpl
inc a
ret
; 4f77
Function4f77: ; 4f77
call JumptoObjectStructField28 ; ????
2015-02-11 14:13:22 -08:00
; 4f7a
Function4f7a: ; 4f7a
call JumptoObjectStructField28
2015-02-11 14:13:22 -08:00
dw Function4f83
dw Function4f83
dw Function4f83
; 4f83
Function4f83: ; 4f83
call JumptoObjectStructField28
2015-02-11 14:13:22 -08:00
dw Function4f8a
dw Function4f99
; 4f8a
Function4f8a: ; 4f8a
ld hl, OBJECT_11
add hl, bc
ld [hl], $10
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], $10
call 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
ld hl, OBJECT_12
add hl, bc
ld [hl], 0
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_09
add hl, bc
ld [hl], 1
2015-02-11 14:13:22 -08:00
ret
; 4fb2
Function4fb2: ; 4fb2
ret
; 4fb3
Function4fb3: ; 4fb3
ld hl, OBJECT_29
add hl, bc
inc [hl]
ld a, [hl]
srl a
srl a
and %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?
2015-11-11 20:38:57 -08:00
; copy [wc3de] 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
Function5529: ; 5529
push bc
ld de, .data_5535
call Function55b9
call Function55ac
pop bc
ret
.data_5535
db $00, $05, $1b
; 5538
Function5538: ; 5538
push bc
ld de, .data_5544
call Function55b9
call Function55ac
pop bc
ret
.data_5544
db $00, $05, $22
; 5547
Function5547: ; 5547
push bc
ld de, .data_5553
call Function55b9
call Function55ac
pop bc
ret
.data_5553
db $00, $05, $1c
; 5556
Function5556: ; 5556
push bc
ld de, .data_5562
call Function55b9
call Function55ac
pop bc
ret
.data_5562
db $00, $06, $23
; 5565
Function5565: ; 5565
push bc
push af
ld de, .data_5576
call Function55b9
pop af
ld [wc2f5], a
call Function55ac
pop bc
ret
.data_5576
db $00, $05, $1d
; 5579
Function5579: ; 5579
push bc
2015-11-02 08:15:32 -08:00
ld a, [hMapObjectIndexBuffer]
2015-02-11 14:13:22 -08:00
ld c, a
call Function5582
pop bc
ret
; 5582
Function5582: ; 5582
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
bit 7, [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
Function55ac: ; 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
callba Function8286
ret
; 55b9
Function55b9: ; 55b9
2015-11-11 20:38:57 -08:00
; load into wc2f0:
; -1, -1, [de], [de + 1], [de + 2], [hMapObjectIndexBuffer], [MapX], [MapY], -1
2015-02-11 14:13:22 -08:00
ld hl, wc2f0
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
ld hl, OBJECT_MAP_X
add hl, bc
ld d, [hl]
ld hl, OBJECT_MAP_Y
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
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
Function5602: ; 5602
call Function5645
ld a, 0
2015-02-11 14:13:22 -08:00
call Function5629
ld a, [wd459]
bit 7, a
jr z, .ok
ld a, [hLastTalked]
2015-02-11 14:13:22 -08:00
and a
jr z, .ok
2015-02-11 14:13:22 -08:00
call Function5629
.ok
call RefreshMapAppearDisappear
2015-02-11 14:13:22 -08:00
ret
; 561d
Function561d: ; 561d
call Function5645
ld a, 0
2015-02-11 14:13:22 -08:00
call Function5629
call RefreshMapAppearDisappear
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-02-11 14:13:22 -08:00
call Function5680
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
jr c, Function5680
call Function56a3
jr c, Function5680
call Function5688
callba Function4440
xor a
ret
; 5673
Function5673: ; 5673
call Function56a3
jr c, Function5680
callba Function4440
xor a
ret
; 5680
Function5680: ; 5680
ld hl, OBJECT_FACING_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
ld hl, OBJECT_MAP_X
add hl, bc
ld d, [hl]
ld hl, OBJECT_MAP_Y
add hl, bc
ld e, [hl]
call Function2a3c
pop bc
ld hl, OBJECT_STANDING_TILE
add hl, bc
ld [hl], a
callba Function463f
ret
; 56a3
Function56a3: ; 56a3
ld hl, OBJECT_MAP_X
add hl, bc
ld d, [hl]
ld hl, OBJECT_MAP_Y
add hl, bc
ld e, [hl]
inc d
inc e
ld a, [XCoord]
cp d
jr z, .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, [wd14c]
ld d, a
ld hl, OBJECT_SPRITE_X_OFFSET
add hl, bc
ld a, [hl]
ld hl, OBJECT_SPRITE_X
add hl, bc
add [hl]
add d
cp $f0
jr nc, .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
2015-02-11 14:13:22 -08:00
ld a, [wd14d]
ld e, a
ld hl, OBJECT_SPRITE_Y_OFFSET
add hl, bc
ld a, [hl]
ld hl, OBJECT_SPRITE_Y
add hl, bc
add [hl]
add e
cp $f0
jr nc, .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
call Function5771
call Function5781
ret
; 5771
Function5771: ; 5771
xor a
ld [wd14e], a
ld [wd14f], a
ld [wd150], a
ld a, -1
2015-02-11 14:13:22 -08:00
ld [wd151], a
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-02 08:15:32 -08:00
ld [PlayerObject12], a
2015-02-11 14:13:22 -08:00
call Function57bc
callba CheckWarpCollision
call c, SpawnInFacingDown
2015-02-11 14:13:22 -08:00
call Function57ca
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
ld a, 0
2015-02-11 14:13:22 -08:00
ld [PlayerAction], a
ret
; 57ca
Function57ca: ; 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-02-11 14:13:22 -08:00
jr Function57db
; 57d9
SpawnInFacingDown: ; 57d9
ld a, 0
2015-02-11 14:13:22 -08:00
; fallthrough
; 57db
Function57db: ; 57db
ld bc, PlayerStruct
call SetSpriteDirection
2015-02-11 14:13:22 -08:00
ret
; 57e2
Function57e2: ; 57e2
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-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
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
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_09
add hl, bc
ld [hl], 0
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
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_09
add hl, bc
ld [hl], 0
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
2015-02-11 14:13:22 -08:00
ld hl, OBJECT_09
add hl, bc
ld [hl], 0
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
RefreshMapAppearDisappear:: ; 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
call Function5991
call Function593a
pop af
ld [hOAMUpdate], a
ret
; 593a
Function593a: ; 593a
ld a, [VramState]
bit 1, a
ld b, $a0
jr z, .ok
2015-02-11 14:13:22 -08:00
ld b, $70
.ok
ld a, [hUsedSpriteIndex]
2015-02-11 14:13:22 -08:00
cp b
ret nc
ld l, a
ld h, $c4
ld de, OBJECT_FLAGS1
2015-02-11 14:13:22 -08:00
ld a, b
ld c, $a0
.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, [wd14c]
ld d, a
ld a, [wd14d]
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 [wd14c], a
ld [wd14d], a
pop bc
pop de
pop hl
ret
; 5991
Function5991: ; 5991
call Function59a4
ld c, $30
call Function59f3
ld c, $20
call Function59f3
ld c, $10
call Function59f3
ret
; 59a4
Function59a4: ; 59a4
xor a
2015-11-02 08:15:32 -08:00
ld hl, wMovementPointer
2015-02-11 14:13:22 -08:00
ld bc, 13
call ByteFill
ld d, 0
ld bc, ObjectStructs
2015-11-02 08:15:32 -08:00
ld hl, wMovementPointer
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]
cp -1
jr z, .skip
; Define the sprite priority.
ld e, $10
ld hl, OBJECT_FLAGS2
2015-02-11 14:13:22 -08:00
add hl, bc
bit 0, [hl]
jr nz, .add
ld e, $20
bit 1, [hl]
jr z, .add
ld e, $30
jr .add
.skip
ld hl, 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
Function59f3: ; 59f3
2015-11-02 08:15:32 -08:00
ld hl, wMovementPointer
2015-02-11 14:13:22 -08:00
.next
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
jr nz, .next
push bc
push hl
ld a, d
2015-11-11 20:38:57 -08:00
and $f
call .GetObjectStructPointer
call .asm_5a0d
2015-02-11 14:13:22 -08:00
pop hl
pop bc
jr .next
; 5a0d
2015-11-11 20:38:57 -08:00
.asm_5a0d: ; 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, [wd14c]
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, [wd14d]
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]
cp -1
jp z, .done
cp NUM_FACINGS
jp nc, .done
ld l, a
ld h, 0
add hl, hl
ld bc, Facings
add hl, bc
ld a, [hli]
ld h, [hl]
ld l, a
ld a, [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