pokecrystal-board/engine/map_objects.asm

3683 lines
45 KiB
NASM
Raw Normal View History

2015-02-11 14:13:22 -08:00
INCLUDE "engine/facings.asm"
Data4273:: ; 4273
db $00, $00, $01, $02, $00, $00
db $06, $00, $01, $0c, $00, $00
db $03, $00, $01, $00, $00, $00
db $04, $00, $01, $00, $00, $00
db $01, $00, $01, $00, $00, $00
db $02, $00, $01, $00, $00, $00
db $06, $00, $01, $00, $00, $00
db $06, $01, $01, $00, $00, $00
db $06, $02, $01, $00, $00, $00
db $06, $03, $01, $00, $00, $00
db $05, $00, $01, $00, $00, $00
db $07, $00, $01, $02, $00, $00
db $08, $00, $01, $00, $00, $00
db $09, $00, $01, $00, $00, $00
db $0a, $00, $01, $00, $00, $00
db $0b, $00, $01, $00, $00, $00
db $0c, $00, $01, $00, $00, $00
db $0d, $00, $01, $00, $00, $00
db $0e, $00, $01, $00, $00, $00
db $0f, $00, $01, $02, $00, $00
db $10, $00, $01, $02, $00, $00
db $15, $00, $09, $2e, $01, $c0
db $16, $00, $0a, $2e, $00, $00
db $06, $00, $01, $0c, $00, $00
db $06, $00, $01, $2e, $10, $00
db $11, $00, $01, $2e, $00, $40
db $12, $00, $01, $02, $00, $00
db $13, $00, $00, $8e, $01, $00
db $14, $00, $08, $8e, $02, $00
db $17, $00, $00, $82, $00, $00
db $19, $02, $01, $00, $00, $00
db $18, $03, $01, $00, $00, $00
db $11, $00, $0c, $2e, $01, $c0
db $11, $00, $0d, $2e, $01, $c0
db $1a, $00, $0e, $8e, $01, $00
db $1b, $00, $0f, $8e, $02, $00
db $03, $00, $01, $00, $00, $20
db $00, $00, $01, $00, $00, $00
; 4357
Function4357:: ; 4357
push bc
ld hl, OBJECT_01
add hl, bc
ld a, [hl]
push af
ld h, b
ld l, c
ld bc, ObjectStruct2 - ObjectStruct1
xor a
call ByteFill
pop af
cp $ff
jr z, .asm_4379
bit 7, a
jr nz, .asm_4379
call GetMapObject
ld hl, OBJECT_00
add hl, bc
ld [hl], $ff
.asm_4379
pop bc
ret
; 437b
Function437b: ; 437b
call Function4386
ret c
call Function43f3
call Function4427
ret
; 4386
Function4386: ; 4386
ld hl, OBJECT_FLAGS
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
sub e
jr c, .asm_43b2
cp $c
jr nc, .asm_43b2
ld a, [YCoord]
ld e, a
ld hl, OBJECT_MAP_Y
add hl, bc
ld a, [hl]
add $1
sub e
jr c, .asm_43b2
cp $b
jr nc, .asm_43b2
jr .asm_43dc
.asm_43b2
ld hl, OBJECT_FLAGS
add hl, bc
set 6, [hl]
ld a, [XCoord]
ld e, a
ld hl, OBJECT_20
add hl, bc
ld a, [hl]
add $1
sub e
jr c, .asm_43de
cp $c
jr nc, .asm_43de
ld a, [YCoord]
ld e, a
ld hl, OBJECT_21
add hl, bc
ld a, [hl]
add $1
sub e
jr c, .asm_43de
cp $b
jr nc, .asm_43de
.asm_43dc
and a
ret
.asm_43de
ld hl, OBJECT_04
add hl, bc
bit 1, [hl]
jr nz, .asm_43eb
call Function4357
scf
ret
.asm_43eb
ld hl, OBJECT_FLAGS
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, .asm_4409
ld hl, OBJECT_FLAGS
add hl, bc
bit 5, [hl]
jr nz, .asm_4426
cp $1
jr z, .asm_4414
jr .asm_4421
.asm_4409
call Function47bc
ld hl, OBJECT_FLAGS
add hl, bc
bit 5, [hl]
jr nz, .asm_4426
.asm_4414
call Function47dd
ld hl, OBJECT_09
add hl, bc
ld a, [hl]
and a
ret z
cp $1
ret z
.asm_4421
ld hl, Pointers4b45
rst JumpTable
ret
.asm_4426
ret
; 4427
Function4427: ; 4427
ld hl, OBJECT_04
add hl, bc
bit 0, [hl]
jr nz, Function44a3
ld hl, OBJECT_FLAGS
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_04
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
add hl, hl
add hl, hl
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
call _hl_
ret
; 445f
Pointers445f: ; 445f
dw Function44a3
dw Function44a3
dw Function44b5
dw Function44aa
dw Function44c1
dw Function44aa
dw Function4508
dw Function44aa
dw Function4529
dw Function44aa
dw Function4539
dw Function44a3
dw Function456e
dw Function456e
dw Function457b
dw Function44a3
dw Function4582
dw Function4582
dw Function4589
dw Function4589
dw Function4590
dw Function45a4
dw Function45ab
dw Function44aa
dw Function45be
dw Function45be
dw Function45c5
dw Function45c5
dw Function45da
dw Function44a3
dw Function45ed
dw Function44a3
dw Function44e4
dw Function44aa
; 44a3
Function44a3: ; 44a3
ld hl, OBJECT_FACING
add hl, bc
ld [hl], $ff
ret
; 44aa
Function44aa: ; 44aa
call GetSpriteDirection
or $0
ld hl, OBJECT_FACING
add hl, bc
ld [hl], a
ret
; 44b5
Function44b5: ; 44b5
ld hl, OBJECT_FACING
add hl, bc
ld a, [hl]
and $1
jr nz, Function44c1
jp Function44aa
; 44c1
Function44c1: ; 44c1
ld hl, OBJECT_04
add hl, bc
bit 3, [hl]
jp nz, Function44aa
ld hl, OBJECT_12
add hl, bc
ld a, [hl]
inc a
and $f
ld [hl], a
rrca
rrca
and $3
ld d, a
call GetSpriteDirection
or $0
or d
ld hl, OBJECT_FACING
add hl, bc
ld [hl], a
ret
; 44e4
Function44e4: ; 44e4
ld hl, OBJECT_04
add hl, bc
bit 3, [hl]
jp nz, Function44aa
ld hl, OBJECT_12
add hl, bc
ld a, [hl]
add $2
and $f
ld [hl], a
rrca
rrca
and $3
ld d, a
call GetSpriteDirection
or $0
or d
ld hl, OBJECT_FACING
add hl, bc
ld [hl], a
ret
; 4508
Function4508: ; 4508
ld hl, OBJECT_04
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 $3
ld d, a
call GetSpriteDirection
or $0
or d
ld hl, OBJECT_FACING
add hl, bc
ld [hl], a
ret
; 4529
Function4529: ; 4529
call Function453f
ld hl, OBJECT_08
add hl, bc
ld a, [hl]
or $0
ld hl, OBJECT_FACING
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 $f0
ld e, a
ld a, [hl]
inc a
and $f
ld d, a
cp $4
jr c, .asm_4558
ld d, 0
ld a, e
add $10
and $30
ld e, a
.asm_4558
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_08
add hl, bc
ld [hl], a
ret
; 456a
.Directions ; 456a
db $00, $0c, $04, $08
; 456e
Function456e: ; 456e
call GetSpriteDirection
rrca
rrca
add $10
ld hl, OBJECT_FACING
add hl, bc
ld [hl], a
ret
; 457b
Function457b: ; 457b
ld hl, OBJECT_FACING
add hl, bc
ld [hl], $15
ret
; 4582
Function4582: ; 4582
ld hl, OBJECT_FACING
add hl, bc
ld [hl], $14
ret
; 4589
Function4589: ; 4589
ld hl, OBJECT_FACING
add hl, bc
ld [hl], $17
ret
; 4590
Function4590: ; 4590
ld hl, OBJECT_12
add hl, bc
ld a, [hl]
inc a
and $f
ld [hl], a
and $8
jr z, Function45a4
ld hl, OBJECT_FACING
add hl, bc
ld [hl], $4
ret
; 45a4
Function45a4: ; 45a4
ld hl, OBJECT_FACING
add hl, bc
ld [hl], $0
ret
; 45ab
Function45ab: ; 45ab
ld hl, OBJECT_12
add hl, bc
ld a, [hl]
inc a
ld [hl], a
and $c
rrca
rrca
add $18
ld hl, OBJECT_FACING
add hl, bc
ld [hl], a
ret
; 45be
Function45be: ; 45be
ld hl, OBJECT_FACING
add hl, bc
ld [hl], $16
ret
; 45c5
Function45c5: ; 45c5
ld a, [VariableSprites + 3]
ld d, $17
cp $33
jr z, .asm_45d4
cp $47
jr z, .asm_45d4
ld d, $16
.asm_45d4
ld hl, OBJECT_FACING
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
add hl, bc
and 2
ld a, $1c
jr z, .asm_45eb
inc a
.asm_45eb
ld [hl], a
ret
; 45ed
Function45ed: ; 45ed
ld hl, OBJECT_12
add hl, bc
inc [hl]
ld a, [hl]
ld hl, OBJECT_FACING
add hl, bc
and 4
ld a, $1e
jr z, .asm_45fe
inc a
.asm_45fe
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_FLAGS
add hl, bc
bit 3, [hl]
jr z, .asm_464f
ld hl, OBJECT_STANDING_TILE
add hl, bc
ld a, [hl]
call Function4661
.asm_464f
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 Function188e
jr z, .asm_466b
call Function1875
jr c, .asm_4672
.asm_466b
ld hl, OBJECT_FLAGS
add hl, bc
set 3, [hl]
ret
.asm_4672
ld hl, OBJECT_FLAGS
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
ld hl, OBJECT_27
add hl, bc
ld [hli], a
ld [hli], a
ld [hli], a
ld [hl], a
ld hl, OBJECT_07
add hl, bc
ld [hl], $ff
ret
; 4690
Function4690: ; 4690
ld hl, OBJECT_07
add hl, bc
ld [hl], a
ld hl, OBJECT_04
add hl, bc
bit 2, [hl]
jr nz, .asm_46a6
add a
add a
and $c
ld hl, OBJECT_08
add hl, bc
ld [hl], a
.asm_46a6
; 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_07
add hl, bc
ld a, [hl]
and $f
add a
add a
ld l, a
ld h, 0
ld de, StepVectors
add hl, de
ld d, [hl]
inc hl
ld e, [hl]
inc hl
ld a, [hli]
ld h, [hl]
ret
; 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_07
add hl, bc
ld a, [hl]
and $3
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_01
add hl, bc
ld a, [hl]
call GetMapObject
add hl, de
ld a, [hl]
pop bc
ret
; 4769
Function4769: ; 4769
ld hl, OBJECT_01
add hl, bc
ld a, [hl]
cp $ff
jr z, .asm_477d
push bc
call GetMapObject
ld hl, $0004
add hl, bc
ld a, [hl]
pop bc
ret
.asm_477d
ld a, $6
ret
; 4780
Function4780: ; 4780
ld hl, OBJECT_27
add hl, bc
ld [hl], $0
ret
; 4787
Function4787: ; 4787
ld hl, OBJECT_27
add hl, bc
inc [hl]
ret
; 478d
Function478d: ; 478d
ld hl, OBJECT_27
add hl, bc
dec [hl]
ret
; 4793
Function4793: ; 4793
ld hl, OBJECT_27
add hl, bc
ld a, [hl]
pop hl
rst JumpTable
ret
; 479b
Function479b: ; 479b
ld hl, OBJECT_28
add hl, bc
ld [hl], $0
ret
; 47a2
Function47a2: ; 47a2
ld hl, OBJECT_28
add hl, bc
inc [hl]
ret
; 47a8
Function47a8: ; 47a8
ld hl, OBJECT_28
add hl, bc
ld a, [hl]
pop hl
rst JumpTable
ret
; 47b0
Function47b0: ; 47b0
ld hl, OBJECT_28
add hl, bc
ld a, [hl]
ret
; 47b6
Function47b6: ; 47b6
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
ret
; 47dd
Function47dd: ; 47dd
call Function479b
call Function1a2f
ld a, [hl]
ld hl, .Pointers
rst JumpTable
ret
; 47e9
.Pointers ; 47e9
dw Function4821
dw Function4822
dw Function482c
dw Function4838
dw Function4842
dw Function4851
dw Function4869
dw Function487c
dw Function4882
dw Function4888
dw Function488e
dw Function4891
dw Function4894
dw Function4897
dw Function489d
dw Function48a0
dw Function48a6
dw Function48ac
dw Function48ff
dw Function49e5
dw Function4a21
dw Function4958
dw Function496e
dw Function4abc
dw Function498d
dw Function4984
dw Function4a46
dw Function4a89
; 4821
Function4821: ; 4821
ret
; 4822
Function4822: ; 4822
call Random
ld a, [hRandomAdd]
and 1
jp Function4af0
; 482c
Function482c: ; 482c
call Random
ld a, [hRandomAdd]
and 1
or 2
jp Function4af0
; 4838
Function4838: ; 4838
call Random
ld a, [hRandomAdd]
and 3
jp Function4af0
; 4842
Function4842: ; 4842
call Random
ld a, [hRandomAdd]
and $c
ld hl, OBJECT_08
add hl, bc
ld [hl], a
jp Function4b1d
; 4851
Function4851: ; 4851
ld hl, OBJECT_08
add hl, bc
ld a, [hl]
and $c
ld d, a
call Random
ld a, [hRandomAdd]
and $c
cp d
jr nz, .asm_4865
xor $c
.asm_4865
ld [hl], a
jp Function4b26
; 4869
Function4869: ; 4869
call Function462a
call Function467b
ld hl, OBJECT_11
add hl, bc
ld [hl], $1
ld hl, OBJECT_09
add hl, bc
ld [hl], $5
ret
; 487c
Function487c: ; 487c
ld hl, Function5000
jp Function5041
; 4882
Function4882: ; 4882
ld hl, Function5015
jp Function5041
; 4888
Function4888: ; 4888
ld hl, Function5026
jp Function5041
; 488e
Function488e: ; 488e
jp Function5037
; 4891
Function4891: ; 4891
jp Function5037
; 4894
Function4894: ; 4894
jp Function5037
; 4897
Function4897: ; 4897
ld hl, Function5000
jp Function5041
; 489d
Function489d: ; 489d
jp Function5037
; 48a0
Function48a0: ; 48a0
ld hl, Function54e6
jp Function5041
; 48a6
Function48a6: ; 48a6
ld hl, Function500e
jp Function5041
; 48ac
Function48ac: ; 48ac
call Function4793
dw Function48b3
dw Function48f8
; 48b3
Function48b3: ; 48b3
ld hl, OBJECT_STANDING_TILE
add hl, bc
ld a, [hl]
call CheckPitTile
jr z, .asm_48f5
ld hl, OBJECT_FLAGS
add hl, bc
bit 2, [hl]
res 2, [hl]
jr z, .asm_48ee
ld hl, OBJECT_32
add hl, bc
ld a, [hl]
and $3
or $0
call Function4690
call Function6ec1
jr c, .asm_48eb
ld de, SFX_STRENGTH
call PlaySFX
call Function5538
call Function463f
ld hl, OBJECT_09
add hl, bc
ld [hl], $f
ret
.asm_48eb
call Function462a
.asm_48ee
ld hl, OBJECT_07
add hl, bc
ld [hl], $ff
ret
.asm_48f5
call Function4787
; fallthrough
; 48f8
Function48f8: ; 48f8
ld hl, OBJECT_07
add hl, bc
ld [hl], $ff
ret
; 48ff
Function48ff: ; 48ff
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_32
add hl, bc
ld a, [hl]
push bc
call Function1ae5
ld hl, OBJECT_07
add hl, bc
ld a, [hl]
cp $ff
jr z, .asm_494a
ld hl, OBJECT_NEXT_MAP_X
add hl, bc
ld a, [hl]
cp d
jr z, .asm_492d
jr c, .asm_4929
ld a, $3
jr .asm_493d
.asm_4929
ld a, $2
jr .asm_493d
.asm_492d
ld hl, OBJECT_NEXT_MAP_Y
add hl, bc
ld a, [hl]
cp e
jr z, .asm_494a
jr c, .asm_493b
ld a, $0
jr .asm_493d
.asm_493b
ld a, $1
.asm_493d
ld d, a
ld hl, OBJECT_07
add hl, bc
ld a, [hl]
and $c
or d
pop bc
jp Function5412
.asm_494a
pop bc
ld hl, OBJECT_07
add hl, bc
ld [hl], $ff
ld hl, OBJECT_11
add hl, bc
ld [hl], $1
ret
; 4958
Function4958: ; 4958
call Function467b
ld hl, OBJECT_07
add hl, bc
ld [hl], $ff
ld hl, OBJECT_11
add hl, bc
ld [hl], $9
ld hl, OBJECT_09
add hl, bc
ld [hl], $4
ret
; 496e
Function496e: ; 496e
call Function467b
ld hl, OBJECT_07
add hl, bc
ld [hl], $ff
ld hl, OBJECT_11
add hl, bc
ld [hl], $a
ld hl, OBJECT_09
add hl, bc
ld [hl], $4
ret
; 4984
Function4984: ; 4984
call Function4793
dw Function4996
dw Function499c
dw Function49b8
; 498d
Function498d: ; 498d
call Function4793
dw Function4996
dw Function499c
dw Function49c4
; 4996
Function4996: ; 4996
call Function467b
call Function4787
; fallthrough
; 499c
Function499c: ; 499c
ld hl, OBJECT_11
add hl, bc
ld [hl], $1
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 Function4787
ret
; 49b8
Function49b8: ; 49b8
ld de, .data_49c0
call Function49d0
jr Function4984
; 49c0
.data_49c0 ; 49c0
db $0c, $08, $00, $04
; 49c4
Function49c4: ; 49c4
ld de, .data_49cc
call Function49d0
jr Function498d
; 49cc
.data_49cc ; 49cc
db $08, $0c, $04, $00
; 49d0
Function49d0: ; 49d0
ld hl, OBJECT_08
add hl, bc
ld a, [hl]
and $c
rrca
rrca
push hl
ld l, a
ld h, $0
add hl, de
ld a, [hl]
pop hl
ld [hl], a
call Function478d
ret
; 49e5
Function49e5: ; 49e5
call Function4aa8
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
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], a
ld hl, OBJECT_07
add hl, de
ld a, [hl]
and 3
ld d, $e
cp 0
jr z, .asm_4a0f
cp 1
jr z, .asm_4a0f
ld d, $c
.asm_4a0f
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_09
add hl, bc
ld [hl], $13
ret
; 4a21
Function4a21: ; 4a21
call Function467b
call Function4aa8
ld hl, OBJECT_11
add hl, bc
ld [hl], $8
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], $0
ld hl, OBJECT_SPRITE_Y_OFFSET
add hl, bc
ld [hl], $f0
ld hl, OBJECT_SPRITE_X_OFFSET
add hl, bc
ld [hl], $0
ld hl, OBJECT_09
add hl, bc
ld [hl], $13
ret
; 4a46
Function4a46: ; 4a46
call Function467b
call Function4aa8
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_07
add hl, de
ld a, [hl]
and 3
ld e, a
ld d, 0
ld hl, .data_4a81
add hl, de
add hl, de
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
Function4a89: ; 4a89
call Function467b
call Function4aa8
ld hl, OBJECT_11
add hl, bc
ld [hl], $f
ld hl, OBJECT_STEP_DURATION
add hl, de
ld a, [hl]
add $ff
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], a
ld hl, OBJECT_09
add hl, bc
ld [hl], $13
ret
; 4aa8
Function4aa8: ; 4aa8
ld hl, OBJECT_32
add hl, bc
ld a, [hl]
push bc
call Function1ae5
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
Function4abc: ; 4abc
call Function467b
ld hl, OBJECT_11
add hl, bc
ld [hl], $0
ld hl, OBJECT_32
add hl, bc
ld a, [hl]
call Function4ade
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
Function4ade: ; 4ade
ld d, a
and $3f
ld e, a
ld a, d
rlca
rlca
and $3
ld d, a
inc d
ld a, $1
.asm_4aeb
dec d
ret z
add a
jr .asm_4aeb
; 4af0
Function4af0: ; 4af0
call Function4690
call Function6ec1
jr c, Function4b17
call Function463f
ld hl, OBJECT_11
add hl, bc
ld [hl], $2
ld hl, wd4cf
ld a, [$ffaf]
cp [hl]
jr z, .asm_4b10
ld hl, OBJECT_09
add hl, bc
ld [hl], $7
ret
.asm_4b10
ld hl, OBJECT_09
add hl, bc
ld [hl], $6
ret
Function4b17: ; 4b17
call Function467b
call Function462a
; fallthrough
; 4b1d
Function4b1d: ; 4b1d
call Random
ld a, [hRandomAdd]
and $7f
jr Function4b2d
; 4b26
Function4b26: ; 4b26
call Random
ld a, [hRandomAdd]
and $1f
; fallthrough
; 4b2d
Function4b2d: ; 4b2d
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], a
ld hl, OBJECT_07
add hl, bc
ld [hl], $ff
ld hl, OBJECT_11
add hl, bc
ld [hl], $1
ld hl, OBJECT_09
add hl, bc
ld [hl], $3
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
ret
; 4b86
Function4b86: ; 4b86
call Function47a8
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_FLAGS
add hl, bc
res 3, [hl]
call Function47a2
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
ret
; 4bbf
Function4bbf: ; 4bbf
call Function47a8
dw Function4bca
dw Function4bd2
dw Function4bf2
dw Function4bfd
; 4bca
Function4bca: ; 4bca
ld hl, wd150
set 7, [hl]
call Function47a2
; 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_FLAGS
add hl, bc
res 3, [hl]
ld hl, wd150
set 6, [hl]
set 4, [hl]
call Function47a2
ret
; 4bf2
Function4bf2: ; 4bf2
call Function46a6
ld hl, wd150
set 7, [hl]
call Function47a2
; 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
ret
; 4c18
Function4c18: ; 4c18
call Function47a8
dw Function4c23
dw Function4c32
dw Function4c42
dw Function4c5d
; 4c23
Function4c23: ; 4c23
ld hl, OBJECT_12
add hl, bc
ld [hl], $0
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], $10
call Function47a2
; fallthrough
; 4c32
Function4c32: ; 4c32
ld hl, OBJECT_11
add hl, bc
ld [hl], $4
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
ret nz
call Function47a2
ret
; 4c42
Function4c42: ; 4c42
ld hl, OBJECT_12
add hl, bc
ld [hl], $0
ld hl, OBJECT_31
add hl, bc
ld [hl], $10
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], $10
ld hl, OBJECT_FLAGS
add hl, bc
res 3, [hl]
call Function47a2
; fallthrough
; 4c5d
Function4c5d: ; 4c5d
ld hl, OBJECT_11
add hl, bc
ld [hl], $4
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
ld hl, OBJECT_09
add hl, bc
ld [hl], $1
ret
; 4c89
Function4c89: ; 4c89
call Function47a8
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
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], $10
call Function47a2
ret
; 4caa
Function4caa: ; 4caa
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
ret nz
call Function47a2
; fallthrough
; 4cb3
Function4cb3: ; 4cb3
ld hl, OBJECT_12
add hl, bc
ld [hl], $0
ld hl, OBJECT_31
add hl, bc
ld [hl], $0
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], $10
call Function47a2
ret
; 4cc9
Function4cc9: ; 4cc9
ld hl, OBJECT_11
add hl, bc
ld [hl], $4
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 Function47a2
; fallthrough
; 4ceb
Function4ceb: ; 4ceb
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], $10
call Function47a2
ret
; 4cf5
Function4cf5: ; 4cf5
ld hl, OBJECT_11
add hl, bc
ld [hl], $4
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
ld hl, OBJECT_SPRITE_Y_OFFSET
add hl, bc
ld [hl], $0
ld hl, OBJECT_09
add hl, bc
ld [hl], $1
ret
; 4d14
Function4d14: ; 4d14
call Function47a8
dw Function4d1f
dw Function4d2e
dw Function4d4f
dw Function4d6b
; 4d1f
Function4d1f: ; 4d1f
ld hl, OBJECT_11
add hl, bc
ld [hl], $0
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], $10
call Function47a2
; 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
ld hl, OBJECT_12
add hl, bc
ld [hl], $0
ld hl, OBJECT_31
add hl, bc
ld [hl], $0
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], $10
call Function47a2
; 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 Function47a2
; fallthrough
; 4d6b
Function4d6b: ; 4d6b
ld hl, OBJECT_12
add hl, bc
ld [hl], $0
ld hl, OBJECT_SPRITE_Y_OFFSET
add hl, bc
ld [hl], $0
ld hl, OBJECT_09
add hl, bc
ld [hl], $1
ret
; 4d7e
Function4d7e: ; 4d7e
call Function47a8
dw Function4d85
dw Function4d94
; 4d85
Function4d85: ; 4d85
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], $8
ld hl, OBJECT_SPRITE_Y_OFFSET
add hl, bc
ld [hl], $0
call Function47a2
; 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
ld hl, OBJECT_09
add hl, bc
ld [hl], $1
ret
; 4daf
Function4daf: ; 4daf
call Function4db5
jp Function4b79
; 4db5
Function4db5: ; 4db5
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld a, [hl]
and $1
ld a, $1
jr z, .asm_4dc2
ld a, $0
.asm_4dc2
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 $1
ld a, $4
jr z, .asm_4dd5
ld a, $5
.asm_4dd5
ld hl, OBJECT_11
add hl, bc
ld [hl], a
jp Function4b79
; 4ddd
Function4ddd: ; 4ddd
ld hl, OBJECT_07
add hl, bc
ld [hl], $ff
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
ret nz
ld hl, OBJECT_09
add hl, bc
ld [hl], $1
ret
; 4df0
Function4df0: ; 4df0
ld hl, OBJECT_07
add hl, bc
ld [hl], $ff
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
ret
; 4e0c
Function4e0c: ; 4e0c
call Function47a8
dw Function4e13
dw Function4e21
; 4e13
Function4e13: ; 4e13
call Function4769
call Function1a47
ld hl, OBJECT_08
add hl, bc
ld [hl], a
call Function47a2
; fallthrough
; 4e21
Function4e21: ; 4e21
call Function4fb2
ld hl, OBJECT_07
add hl, bc
ld [hl], $ff
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_07
add hl, bc
ld [hl], $ff
ld hl, OBJECT_09
add hl, bc
ld [hl], $1
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 Function47a8
dw Function4e5d
dw Function4e65
; 4e5d
Function4e5d: ; 4e5d
ld hl, wd150
set 7, [hl]
call Function47a2
; 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_07
add hl, bc
ld [hl], $ff
ld hl, OBJECT_09
add hl, bc
ld [hl], $1
ret
; 4e83
Function4e83: ; 4e83
call Function47a8
dw Function4e8e
dw Function4ea4
dw Function4ead
dw Function4ec0
; 4e8e
Function4e8e: ; 4e8e
ld hl, OBJECT_07
add hl, bc
ld [hl], $ff
ld hl, OBJECT_12
add hl, bc
ld a, [hl]
ld [hl], $2
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], $2
call Function47a2
; fallthrough
; 4ea4
Function4ea4: ; 4ea4
ld hl, OBJECT_STEP_DURATION
add hl, bc
dec [hl]
ret nz
call Function47a2
; fallthrough
; 4ead
Function4ead: ; 4ead
ld hl, OBJECT_29
add hl, bc
ld a, [hl]
ld hl, OBJECT_08
add hl, bc
ld [hl], a
ld hl, OBJECT_STEP_DURATION
add hl, bc
ld [hl], $2
call Function47a2
; 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
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_01
add hl, bc
ld a, [hl]
ld b, a
callba Function807e
pop bc
ld hl, OBJECT_FLAGS
add hl, bc
res 2, [hl]
call Function4600
ld hl, OBJECT_07
add hl, bc
ld [hl], $ff
ld hl, OBJECT_09
add hl, bc
ld [hl], $1
ret
; 4f04
Function4f04: ; 4f04
ld hl, OBJECT_29
add hl, bc
ld e, [hl]
inc hl
ld d, [hl]
ld hl, OBJECT_00
add hl, de
ld a, [hl]
and a
jr z, .asm_4f30
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
.asm_4f30
jp Function4357
; 4f33
Function4f33: ; 4f33
call Function47a8
dw Function4f3a
dw Function4f43
; 4f3a
Function4f3a: ; 4f3a
xor a
ld hl, OBJECT_29
add hl, bc
ld [hl], a
call Function47a2
; 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, .asm_4f68
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
.asm_4f68
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 Function47a8 ; ????
; 4f7a
Function4f7a: ; 4f7a
call Function47a8
dw Function4f83
dw Function4f83
dw Function4f83
; 4f83
Function4f83: ; 4f83
call Function47a8
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 Function47a2
; 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
ld hl, OBJECT_09
add hl, bc
ld [hl], $1
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 7
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
Function5000: ; 5000
ld a, [wc2de]
ld hl, wc2df
ld [hl], a
ld a, $3e
ld [wc2de], a
ld a, [hl]
ret
; 500e
Function500e: ; 500e
ld hl, wc2e3
call Function1aae
ret
; 5015
Function5015: ; 5015
ld hl, OBJECT_27
add hl, bc
ld e, [hl]
inc [hl]
ld d, 0
ld hl, wc2e2
ld a, [hli]
ld h, [hl]
ld l, a
add hl, de
ld a, [hl]
ret
; 5026
Function5026: ; 5026
ld hl, OBJECT_27
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
ld hl, Function503d
jp Function5041
; 503d
Function503d: ; 503d
ld a, [wc2e2]
ret
; 5041
Function5041: ; 5041
call Function5055
.asm_5044
xor a
ld [wc2ea], a
call Function505e
call Function506b
ld a, [wc2ea]
and a
jr nz, .asm_5044
ret
; 5055
Function5055: ; 5055
ld a, l
ld [wc2eb], a
ld a, h
ld [wc2ec], a
ret
; 505e
Function505e: ; 505e
ld hl, wc2eb
ld a, [hli]
ld h, [hl]
ld l, a
jp [hl]
; 5065
Function5065: ; 5065
ld a, $1
ld [wc2ea], a
ret
; 506b
Function506b: ; 506b
push af
call Function54b8
pop af
ld hl, MovementPointers
rst JumpTable
ret
; 5075
; 5075
INCLUDE "engine/movement.asm"
; 54b8
Function54b8: ; 54b8
ld e, a
ld a, [wd4ce]
cp $ff
ret z
ld a, [wd4cd]
ld d, a
ld a, [$ffaf]
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, .asm_5503
cp $ff
jr z, .asm_5503
dec [hl]
ld e, a
ld d, 0
ld hl, wd4d1
add hl, de
inc e
ld a, $ff
.asm_54fc
ld d, [hl]
ld [hld], a
ld a, d
dec e
jr nz, .asm_54fc
ret
.asm_5503
call Function550a
ret c
ld a, $3e
ret
; 550a
Function550a: ; 550a
ld a, [wd4cd]
cp $ff
jr z, .asm_5520
push bc
call Function1ae5
ld hl, OBJECT_00
add hl, bc
ld a, [hl]
pop bc
and a
jr z, .asm_5520
and a
ret
.asm_5520
ld a, $ff
ld [wd4ce], a
ld a, $47
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
ld a, [$ffaf]
ld c, a
call Function5582
pop bc
ret
; 5582
Function5582: ; 5582
ld de, ObjectStructs
ld a, $d
.asm_5587
push af
ld hl, OBJECT_04
add hl, de
bit 7, [hl]
jr z, .asm_55a1
ld hl, OBJECT_00
add hl, de
ld a, [hl]
and a
jr z, .asm_55a1
push bc
xor a
ld bc, ObjectStruct2 - ObjectStruct1
call ByteFill
pop bc
.asm_55a1
ld hl, ObjectStruct2 - ObjectStruct1
add hl, de
ld d, h
ld e, l
pop af
dec a
jr nz, .asm_5587
ret
; 55ac
Function55ac: ; 55ac
call Function1a13
ret nc
ld d, h
ld e, l
callba Function8286
ret
; 55b9
Function55b9: ; 55b9
ld hl, wc2f0
ld [hl], $ff
inc hl
ld [hl], $ff
inc hl
ld a, [de]
inc de
ld [hli], a
ld a, [de]
inc de
ld [hli], a
ld a, [de]
ld [hli], a
ld a, [$ffaf]
ld [hli], a
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
ld [hl], d
inc hl
ld [hl], e
inc hl
ld [hl], $ff
ret
; 55e0
Function55e0:: ; 55e0
ld a, [VramState]
bit 0, a
ret z
ld bc, ObjectStructs
xor a
.asm_55ea
ld [$ffaf], a
call Function1af1
jr z, .asm_55f4
call Function565c
.asm_55f4
ld hl, ObjectStruct2 - ObjectStruct1
add hl, bc
ld b, h
ld c, l
ld a, [$ffaf]
inc a
cp $d
jr nz, .asm_55ea
ret
; 5602
Function5602: ; 5602
call Function5645
ld a, $0
call Function5629
ld a, [wd459]
bit 7, a
jr z, .asm_5619
ld a, [$ffe0]
and a
jr z, .asm_5619
call Function5629
.asm_5619
call Function5920
ret
; 561d
Function561d: ; 561d
call Function5645
ld a, $0
call Function5629
call Function5920
ret
; 5629
Function5629: ; 5629
cp $10
ret nc
call GetMapObject
ld hl, $0000
add hl, bc
ld a, [hl]
cp $ff
ret z
cp $d
ret nc
call Function1ae5
call Function1af1
ret z
call Function5673
ret
; 5645
Function5645: ; 5645
xor a
ld bc, ObjectStructs
.asm_5649
ld [$ffaf], a
call Function5680
ld hl, ObjectStruct2 - ObjectStruct1
add hl, bc
ld b, h
ld c, l
ld a, [$ffaf]
inc a
cp $d
jr nz, .asm_5649
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
add hl, bc
ld [hl], $ff
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, .asm_56bc
jr nc, .asm_56cb
add $b
cp d
jr c, .asm_56cb
.asm_56bc
ld a, [YCoord]
cp e
jr z, .asm_56c9
jr nc, .asm_56cb
add $a
cp e
jr c, .asm_56cb
.asm_56c9
xor a
ret
.asm_56cb
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, .asm_56e5
cp $a0
jp nc, .asm_5768
.asm_56e5
and $7
ld d, $2
cp $4
jr c, .asm_56ef
ld d, $3
.asm_56ef
ld a, [hl]
srl a
srl a
srl a
cp $14
jr c, .asm_56fc
sub $20
.asm_56fc
ld [$ffbd], a
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, .asm_5715
cp $90
jr nc, .asm_5768
.asm_5715
and $7
ld e, $2
cp $4
jr c, .asm_571f
ld e, $3
.asm_571f
ld a, [hl]
srl a
srl a
srl a
cp $12
jr c, .asm_572c
sub $20
.asm_572c
ld [$ffbe], a
ld hl, OBJECT_PALETTE
add hl, bc
bit 7, [hl]
jr z, .asm_573e
ld a, d
add $2
ld d, a
ld a, e
add $2
ld e, a
.asm_573e
ld a, d
ld [$ffbf], a
.asm_5741
ld a, [$ffbf]
ld d, a
ld a, [$ffbe]
add e
dec a
cp $12
jr nc, .asm_5763
ld b, a
.asm_574d
ld a, [$ffbd]
add d
dec a
cp $14
jr nc, .asm_5760
ld c, a
push bc
call GetTileCoord
pop bc
ld a, [hl]
cp $60
jr nc, .asm_5768
.asm_5760
dec d
jr nz, .asm_574d
.asm_5763
dec e
jr nz, .asm_5741
and a
ret
.asm_5768
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, $ff
ld [wd151], a
ret
; 5781
Function5781: ; 5781
ld bc, ObjectStructs
xor a
.asm_5785
ld [$ffaf], a
call Function1af1
jr z, .asm_578f
call Function437b
.asm_578f
ld hl, ObjectStruct2 - ObjectStruct1
add hl, bc
ld b, h
ld c, l
ld a, [$ffaf]
inc a
cp $d
jr nz, .asm_5785
ret
; 579d
Function579d: ; 579d
ld a, $3e
ld [wc2de], a
ld [wc2df], a
xor a
ld [wd04e], a
ld [wd4e2], a
call Function57bc
callba Function149c6
call c, Function57d9
call Function57ca
ret
; 57bc
Function57bc: ; 57bc
ld hl, wd45b
bit 7, [hl]
jr nz, .asm_57c4
ret
.asm_57c4
ld a, $0
ld [PlayerAction], a
ret
; 57ca
Function57ca: ; 57ca
ld hl, wd45b
bit 5, [hl]
ret z
ld a, [wd45b]
and $3
add a
add a
jr Function57db
; 57d9
Function57d9: ; 57d9
ld a, $0
; fallthrough
; 57db
Function57db: ; 57db
ld bc, PlayerStruct
call Function1af8
ret
; 57e2
Function57e2: ; 57e2
ld a, d
and $80
ret z
ld bc, $0000 ; debug?
ld hl, OBJECT_08
add hl, bc
ld a, [hl]
or d
ld [hl], a
ld a, d
swap a
and $7
ld d, a
ld bc, PlayerStruct
ld hl, OBJECT_PALETTE
add hl, bc
ld a, [hl]
and $f8
or d
ld [hl], a
ret
; 5803
Function5803:: ; 5803
push bc
ld a, b
call Function5815
pop bc
ret c
ld a, c
call Function582c
callba Function848a
ret
; 5815
Function5815: ; 5815
call Function18de
ret c
ld a, [$ffb0]
ld [wd4cd], a
ret
; 581f
Function581f:: ; 581f
call Function5826
call Function5847
ret
; 5826
Function5826: ; 5826
ld a, $ff
ld [wd4cd], a
ret
; 582c
Function582c: ; 582c
push af
call Function5847
pop af
call Function18de
ret c
ld hl, OBJECT_03
add hl, bc
ld [hl], $13
ld hl, OBJECT_09
add hl, bc
ld [hl], $0
ld a, [$ffb0]
ld [wd4ce], a
ret
; 5847
Function5847: ; 5847
ld a, [wd4ce]
cp $ff
ret z
call Function1ae5
callba Function58e3
ld a, $ff
ld [wd4ce], a
ret
; 585c
Function585c:: ; 585c
ld a, c
call Function18de
ret c
push bc
call Function587a
pop bc
ld hl, OBJECT_FLAGS
add hl, bc
res 5, [hl]
xor a
ret
; 586e
Function586e: ; 586e
call Function18de
ret c
ld hl, OBJECT_FLAGS
add hl, bc
set 5, [hl]
xor a
ret
; 587a
Function587a: ; 587a
ld bc, ObjectStructs
xor a
.asm_587e
push af
call Function1af1
jr z, .asm_588a
ld hl, OBJECT_FLAGS
add hl, bc
set 5, [hl]
.asm_588a
ld hl, ObjectStruct2 - ObjectStruct1
add hl, bc
ld b, h
ld c, l
pop af
inc a
cp $d
jr nz, .asm_587e
ret
; 5897
Function5897:: ; 5897
ld a, [wd4cd]
cp $ff
ret z
push bc
call Function1ae5
ld hl, OBJECT_01
add hl, bc
ld a, [hl]
pop bc
cp c
ret nz
ld a, [wd4ce]
cp $ff
ret z
call Function1ae5
ld hl, OBJECT_FLAGS
add hl, bc
res 5, [hl]
ret
; 58b9
Function58b9:: ; 58b9
push bc
ld bc, ObjectStructs
xor a
.asm_58be
push af
call Function1af1
jr z, .asm_58ca
ld hl, OBJECT_FLAGS
add hl, bc
res 5, [hl]
.asm_58ca
ld hl, ObjectStruct2 - ObjectStruct1
add hl, bc
ld b, h
ld c, l
pop af
inc a
cp $d
jr nz, .asm_58be
pop bc
ret
; 58d8
Function58d8: ; 58d8
call Function18de
ret c
ld hl, OBJECT_FLAGS
add hl, bc
res 5, [hl]
ret
; 58e3
Function58e3: ; 58e3
ld hl, OBJECT_01
add hl, bc
ld a, [hl]
cp $ff
jp z, Function5903
push bc
call GetMapObject
ld hl, $0004
add hl, bc
ld a, [hl]
pop bc
ld hl, OBJECT_03
add hl, bc
ld [hl], a
ld hl, OBJECT_09
add hl, bc
ld [hl], $0
ret
; 5903
Function5903: ; 5903
call GetSpriteDirection
rrca
rrca
ld e, a
ld d, 0
ld hl, .data_591c
add hl, de
ld a, [hl]
ld hl, OBJECT_03
add hl, bc
ld [hl], a
ld hl, OBJECT_09
add hl, bc
ld [hl], $0
ret
.data_591c
db 6, 7, 8, 9
; 5920
Function5920:: ; 5920
ld a, [VramState]
bit 0, a
ret z
xor a
ld [$ffbd], a
ld a, [hOAMUpdate]
push af
ld a, $1
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, .asm_5945
ld b, $70
.asm_5945
ld a, [$ffbd]
cp b
ret nc
ld l, a
ld h, $c4
ld de, OBJECT_04
ld a, b
ld c, $a0
.asm_5952
ld [hl], c
add hl, de
cp l
jr nz, .asm_5952
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, $d
.asm_5968
push af
call Function1af1
jr z, .asm_597c
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
.asm_597c
ld hl, ObjectStruct2 - ObjectStruct1
add hl, bc
ld b, h
ld c, l
pop af
dec a
jr nz, .asm_5968
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
ld hl, wc2eb
ld bc, 13
call ByteFill
ld d, 0
ld bc, ObjectStructs
ld hl, wc2eb
.loop
push hl
call Function1af1
jr z, .skip
ld hl, OBJECT_FACING
add hl, bc
ld a, [hl]
cp -1
jr z, .skip
; Define the sprite priority.
ld e, $10
ld hl, OBJECT_FLAGS
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, ObjectStruct2 - ObjectStruct1
add hl, bc
ld b, h
ld c, l
pop hl
jr .next
.add
ld hl, ObjectStruct2 - ObjectStruct1
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 $d
jr nz, .loop
ret
; 59f3
Function59f3: ; 59f3
ld hl, wc2eb
.next
ld a, [hli]
ld d, a
and $f0
ret z
cp c
jr nz, .next
push bc
push hl
ld a, d
and $f
call Function5ac2
call Function5a0d
pop hl
pop bc
jr .next
; 5a0d
Function5a0d: ; 5a0d
ld hl, OBJECT_SPRITE
add hl, bc
ld a, [hl]
and $7f
ld [$ffc1], a
xor a
bit 7, [hl]
jr nz, .asm_5a1d
or 8
.asm_5a1d
ld hl, OBJECT_FLAGS
add hl, bc
ld e, [hl]
bit 7, e
jr z, .asm_5a28
or $80
.asm_5a28
bit 4, e
jr z, .asm_5a2e
or $10
.asm_5a2e
ld hl, OBJECT_PALETTE
add hl, bc
ld d, a
ld a, [hl]
and 7
or d
ld d, a
xor a
bit 3, e
jr z, .asm_5a3f
or $80
.asm_5a3f
ld [$ffc2], a
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
ld [$ffbf], a
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
ld [$ffc0], a
ld hl, OBJECT_FACING
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, [$ffbd]
ld c, a
ld b, Sprites / $100
ld a, [hli]
ld [$ffbe], a
add c
cp SpritesEnd % $100
jr nc, .full
.addsprite
ld a, [$ffc0]
add [hl]
inc hl
ld [bc], a
inc c
ld a, [$ffbf]
add [hl]
inc hl
ld [bc], a
inc c
ld e, [hl]
inc hl
ld a, [$ffc1]
bit 2, e
jr z, .asm_5aa3
xor a
.asm_5aa3
add [hl]
inc hl
ld [bc], a
inc c
ld a, e
bit 1, a
jr z, .asm_5aaf
ld a, [$ffc2]
or e
.asm_5aaf
and $f0
or d
ld [bc], a
inc c
ld a, [$ffbe]
dec a
ld [$ffbe], a
jr nz, .addsprite
ld a, c
ld [$ffbd], a
.done
xor a
ret
.full
scf
ret
; 5ac2
Function5ac2: ; 5ac2
ld c, a
ld b, 0
ld hl, .Addresses
add hl, bc
add hl, bc
ld c, [hl]
inc hl
ld b, [hl]
ret
; 5ace
.Addresses ; 5ace
dw PlayerStruct
dw ObjectStruct1
dw ObjectStruct2
dw ObjectStruct3
dw ObjectStruct4
dw ObjectStruct5
dw ObjectStruct6
dw ObjectStruct7
dw ObjectStruct8
dw ObjectStruct9
dw ObjectStruct10
dw ObjectStruct11
dw ObjectStruct12
; 5ae8