mirror of
https://github.com/pret/pokegold.git
synced 2026-05-19 10:20:46 -05:00
650 lines
8.2 KiB
NASM
Executable File
650 lines
8.2 KiB
NASM
Executable File
INCLUDE "engine/facings.asm"
|
|
SpriteMovementData:: INCLUDE "data/map_objects.asm"
|
|
|
|
DeleteMapObject:: ; 4358 (1:4358)
|
|
push bc
|
|
ld hl, $1
|
|
add hl, bc
|
|
ld a, [hl]
|
|
push af
|
|
ld h, b
|
|
ld l, c
|
|
ld bc, $28
|
|
xor a
|
|
call ByteFill
|
|
pop af
|
|
cp $ff
|
|
jr z, .asm_437a
|
|
bit 7, a
|
|
jr nz, .asm_437a
|
|
call GetMapObject
|
|
ld hl, $0
|
|
add hl, bc
|
|
ld [hl], $ff
|
|
.asm_437a
|
|
pop bc
|
|
ret
|
|
|
|
Function4442:
|
|
call .CheckObjectStillVisible
|
|
ret c
|
|
call .HandleStepType
|
|
call .HandleObjectAction
|
|
ret
|
|
|
|
.CheckObjectStillVisible: ; 4387 (1:4387)
|
|
ld hl, $5
|
|
add hl, bc
|
|
res 6, [hl]
|
|
ld a, [wda03]
|
|
ld e, a
|
|
ld hl, $10
|
|
add hl, bc
|
|
ld a, [hl]
|
|
add $1
|
|
sub e
|
|
jr c, .asm_43b3
|
|
cp $c
|
|
jr nc, .asm_43b3
|
|
ld a, [wda02]
|
|
ld e, a
|
|
ld hl, $11
|
|
add hl, bc
|
|
ld a, [hl]
|
|
add $1
|
|
sub e
|
|
jr c, .asm_43b3
|
|
cp $b
|
|
jr nc, .asm_43b3
|
|
jr .asm_43dd
|
|
|
|
.asm_43b3
|
|
ld hl, $5
|
|
add hl, bc
|
|
set 6, [hl]
|
|
ld a, [wda03]
|
|
ld e, a
|
|
ld hl, $14
|
|
add hl, bc
|
|
ld a, [hl]
|
|
add $1
|
|
sub e
|
|
jr c, .asm_43df
|
|
cp $c
|
|
jr nc, .asm_43df
|
|
ld a, [wda02]
|
|
ld e, a
|
|
ld hl, $15
|
|
add hl, bc
|
|
ld a, [hl]
|
|
add $1
|
|
sub e
|
|
jr c, .asm_43df
|
|
cp $b
|
|
jr nc, .asm_43df
|
|
.asm_43dd
|
|
and a
|
|
ret
|
|
|
|
.asm_43df
|
|
ld hl, $4
|
|
add hl, bc
|
|
bit 1, [hl]
|
|
jr nz, .asm_43ec
|
|
call DeleteMapObject
|
|
scf
|
|
ret
|
|
|
|
.asm_43ec
|
|
ld hl, $5
|
|
add hl, bc
|
|
set 6, [hl]
|
|
and a
|
|
ret
|
|
|
|
.HandleStepType: ; 43f4 (1:43f4)
|
|
ld hl, $9
|
|
add hl, bc
|
|
ld a, [hl]
|
|
and a
|
|
jr z, .asm_440a
|
|
ld hl, $5
|
|
add hl, bc
|
|
bit 5, [hl]
|
|
jr nz, .asm_4427
|
|
cp $1
|
|
jr z, .asm_4415
|
|
jr .asm_4422
|
|
|
|
.asm_440a
|
|
call ObjectMovementReset
|
|
ld hl, $5
|
|
add hl, bc
|
|
bit 5, [hl]
|
|
jr nz, .asm_4427
|
|
.asm_4415
|
|
call MapObjectMovementPattern
|
|
ld hl, $9
|
|
add hl, bc
|
|
ld a, [hl]
|
|
and a
|
|
ret z
|
|
cp $1
|
|
ret z
|
|
.asm_4422
|
|
ld hl, StepTypesJumptable
|
|
rst JumpTable
|
|
ret
|
|
|
|
.asm_4427
|
|
ret
|
|
|
|
.HandleObjectAction: ; 4428 (1:4428)
|
|
ld hl, $4
|
|
add hl, bc
|
|
bit 0, [hl]
|
|
jr nz, Function44a0
|
|
ld hl, $5
|
|
add hl, bc
|
|
bit 6, [hl]
|
|
jr nz, Function44a0
|
|
bit 5, [hl]
|
|
jr nz, asm_4449
|
|
ld de, Pointers4460
|
|
jr asm_444e
|
|
|
|
Function4441:
|
|
ld hl, $4
|
|
add hl, bc
|
|
bit 0, [hl]
|
|
jr nz, Function44a0
|
|
asm_4449
|
|
ld de, Pointers4460 + 2
|
|
jr asm_444e
|
|
|
|
asm_444e
|
|
INCLUDE "engine/map_object_action.asm"
|
|
|
|
CopyNextCoordsTileToStandingCoordsTile: ; 45d9 (1:45d9)
|
|
ld hl, $10
|
|
add hl, bc
|
|
ld a, [hl]
|
|
ld hl, $12
|
|
add hl, bc
|
|
ld [hl], a
|
|
ld hl, $11
|
|
add hl, bc
|
|
ld a, [hl]
|
|
ld hl, $13
|
|
add hl, bc
|
|
ld [hl], a
|
|
ld hl, $e
|
|
add hl, bc
|
|
ld a, [hl]
|
|
ld hl, $f
|
|
add hl, bc
|
|
ld [hl], a
|
|
call SetGrassPriority
|
|
ld hl, $e
|
|
add hl, bc
|
|
ld a, [hl]
|
|
call UselessAndA
|
|
ret
|
|
|
|
Function4603:
|
|
ld hl, $12
|
|
add hl, bc
|
|
ld a, [hl]
|
|
ld hl, $10
|
|
add hl, bc
|
|
ld [hl], a
|
|
ld hl, $13
|
|
add hl, bc
|
|
ld a, [hl]
|
|
ld hl, $11
|
|
add hl, bc
|
|
ld [hl], a
|
|
ret
|
|
|
|
UpdateGrassPriority:
|
|
ld hl, $5
|
|
add hl, bc
|
|
bit 3, [hl]
|
|
jr z, .asm_4628
|
|
ld hl, $e
|
|
add hl, bc
|
|
ld a, [hl]
|
|
call SetGrassPriority
|
|
.asm_4628
|
|
ld hl, $e
|
|
add hl, bc
|
|
ld a, [hl]
|
|
call UselessAndA
|
|
ret c
|
|
ld hl, $f
|
|
add hl, bc
|
|
ld a, [hl]
|
|
call UselessAndA
|
|
ret
|
|
|
|
SetGrassPriority: ; 463a (1:463a)
|
|
call CheckSuperTallGrassTile
|
|
jr z, .asm_4644
|
|
call CheckGrassTile
|
|
jr c, .asm_464b
|
|
.asm_4644
|
|
ld hl, $5
|
|
add hl, bc
|
|
set 3, [hl]
|
|
ret
|
|
|
|
.asm_464b
|
|
ld hl, $5
|
|
add hl, bc
|
|
res 3, [hl]
|
|
ret
|
|
|
|
UselessAndA: ; 4652 (1:4652)
|
|
and a
|
|
ret
|
|
|
|
EndSpriteMovement:
|
|
xor a
|
|
ld hl, $c
|
|
add hl, bc
|
|
ld [hl], a
|
|
ld hl, $1b
|
|
add hl, bc
|
|
ld [hli], a
|
|
ld [hli], a
|
|
ld [hli], a
|
|
ld [hl], a
|
|
ld hl, $7
|
|
add hl, bc
|
|
ld [hl], $ff
|
|
ret
|
|
|
|
InitStep:
|
|
ld hl, $7
|
|
add hl, bc
|
|
ld [hl], a
|
|
ld hl, $4
|
|
add hl, bc
|
|
bit 2, [hl]
|
|
jr nz, GetNextTile
|
|
add a
|
|
add a
|
|
and $c
|
|
ld hl, $8
|
|
add hl, bc
|
|
ld [hl], a
|
|
GetNextTile:
|
|
call GetStepVector
|
|
ld hl, $a
|
|
add hl, bc
|
|
ld [hl], a
|
|
ld a, d
|
|
call GetStepVectorSign
|
|
ld hl, $12
|
|
add hl, bc
|
|
add [hl]
|
|
ld hl, $10
|
|
add hl, bc
|
|
ld [hl], a
|
|
ld d, a
|
|
ld a, e
|
|
call GetStepVectorSign
|
|
ld hl, $13
|
|
add hl, bc
|
|
add [hl]
|
|
ld hl, $11
|
|
add hl, bc
|
|
ld [hl], a
|
|
ld e, a
|
|
push bc
|
|
call GetCoordTile
|
|
pop bc
|
|
ld hl, $e
|
|
add hl, bc
|
|
ld [hl], a
|
|
ret
|
|
|
|
AddStepVector: ; 46b0 (1:46b0)
|
|
call GetStepVector
|
|
ld hl, $17
|
|
add hl, bc
|
|
ld a, [hl]
|
|
add d
|
|
ld [hl], a
|
|
ld hl, $18
|
|
add hl, bc
|
|
ld a, [hl]
|
|
add e
|
|
ld [hl], a
|
|
ret
|
|
|
|
GetStepVector: ; 46c2 (1:46c2)
|
|
ld hl, $7
|
|
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
|
|
|
|
StepVectors: ; 46d9
|
|
; 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
|
|
|
|
GetStepVectorSign: ; 4709 (1:4709)
|
|
add a
|
|
ret z
|
|
ld a, $1
|
|
ret nc
|
|
ld a, $ff
|
|
ret
|
|
|
|
UpdatePlayerStep:
|
|
ld hl, $7
|
|
add hl, bc
|
|
ld a, [hl]
|
|
and $3
|
|
ld [wPlayerStepDirection], a
|
|
call AddStepVector
|
|
ld a, [wPlayerStepVectorX]
|
|
add d
|
|
ld [wPlayerStepVectorX], a
|
|
ld a, [wPlayerStepVectorY]
|
|
add e
|
|
ld [wPlayerStepVectorY], a
|
|
ld hl, wPlayerStepFlags
|
|
set 5, [hl]
|
|
ret
|
|
|
|
Function4732:
|
|
push bc
|
|
ld e, a
|
|
ld d, $0
|
|
ld hl, $1
|
|
add hl, bc
|
|
ld a, [hl]
|
|
call GetMapObject
|
|
add hl, de
|
|
ld a, [hl]
|
|
pop bc
|
|
ret
|
|
|
|
INCLUDE "engine/movement_pattern.asm"
|
|
INCLUDE "engine/step_types.asm"
|
|
INCLUDE "engine/movement.asm"
|
|
|
|
Function5429: ; 5429 (1:5429)
|
|
call InitStep
|
|
ld hl, $1f
|
|
add hl, bc
|
|
ld [hl], $0
|
|
ld hl, $5
|
|
add hl, bc
|
|
res 3, [hl]
|
|
ld hl, $b
|
|
add hl, bc
|
|
ld [hl], $2
|
|
call Function54c8
|
|
ld hl, wCenteredObject
|
|
ld a, [hMapObjectIndexBuffer]
|
|
cp [hl]
|
|
jr z, .asm_5450
|
|
ld hl, $9
|
|
add hl, bc
|
|
ld [hl], $8
|
|
ret
|
|
|
|
.asm_5450
|
|
ld hl, $9
|
|
add hl, bc
|
|
ld [hl], $9
|
|
ret
|
|
Function5457: ; 5457 (1:5457)
|
|
ld e, a
|
|
ld a, [wObjectFollow_Follower]
|
|
cp $ff
|
|
ret z
|
|
ld a, [wObjectFollow_Leader]
|
|
ld d, a
|
|
ld a, [hMapObjectIndexBuffer]
|
|
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, wFollowerMovementQueueLength
|
|
inc [hl]
|
|
ld e, [hl]
|
|
ld d, $0
|
|
ld hl, wFollowMovementQueue
|
|
add hl, de
|
|
pop af
|
|
ld [hl], a
|
|
ret
|
|
|
|
GetFollowerNextMovementByte:
|
|
ld hl, wFollowerMovementQueueLength
|
|
ld a, [hl]
|
|
and a
|
|
jr z, .asm_54a2
|
|
cp $ff
|
|
jr z, .asm_54a2
|
|
dec [hl]
|
|
ld e, a
|
|
ld d, $0
|
|
ld hl, wFollowMovementQueue
|
|
add hl, de
|
|
inc e
|
|
ld a, $ff
|
|
.asm_549b
|
|
ld d, [hl]
|
|
ld [hld], a
|
|
ld a, d
|
|
dec e
|
|
jr nz, .asm_549b
|
|
ret
|
|
|
|
.asm_54a2
|
|
call Function54a9
|
|
ret c
|
|
ld a, $3e
|
|
ret
|
|
|
|
Function54a9: ; 54a9 (1:54a9)
|
|
ld a, [wObjectFollow_Leader]
|
|
cp $ff
|
|
jr z, .asm_54bf
|
|
push bc
|
|
call GetObjectStruct
|
|
ld hl, $0
|
|
add hl, bc
|
|
ld a, [hl]
|
|
pop bc
|
|
and a
|
|
jr z, .asm_54bf
|
|
and a
|
|
ret
|
|
|
|
.asm_54bf
|
|
ld a, $ff
|
|
ld [wObjectFollow_Follower], a
|
|
ld a, $47
|
|
scf
|
|
ret
|
|
|
|
Function54c8: ; 54c8 (1:54c8)
|
|
push bc
|
|
ld de, .data
|
|
call Function5558
|
|
call Function554b
|
|
pop bc
|
|
ret
|
|
|
|
.data db $fc, PAL_OW_SILVER, SPRITEMOVEDATA_SHADOW
|
|
|
|
Function54d7: ; 54d7 (1:54d7)
|
|
push bc
|
|
ld de, .data
|
|
call Function5558
|
|
call Function554b
|
|
pop bc
|
|
ret
|
|
|
|
.data db $fe, PAL_OW_SILVER, SPRITEMOVEDATA_BOULDERDUST
|
|
|
|
Function54e6: ; 54e6 (1:54e6)
|
|
push bc
|
|
ld de, .data
|
|
call Function5558
|
|
call Function554b
|
|
pop bc
|
|
ret
|
|
|
|
.data db $f8, PAL_OW_SILVER, SPRITEMOVEDATA_EMOTE
|
|
|
|
Function54f5: ; 54f5 (1:54f5)
|
|
push bc
|
|
ld de, .data
|
|
call Function5558
|
|
call Function554b
|
|
pop bc
|
|
ret
|
|
|
|
.data db $fe, PAL_OW_TREE, SPRITEMOVEDATA_GRASS
|
|
|
|
Function5504: ; 5504 (1:5504)
|
|
push bc
|
|
push af
|
|
ld de, .data
|
|
call Function5558
|
|
pop af
|
|
ld [wce9e], a
|
|
call Function554b
|
|
pop bc
|
|
ret
|
|
|
|
.data db $00, PAL_OW_SILVER, SPRITEMOVEDATA_SCREENSHAKE
|
|
|
|
Function5518: ; 5518 (1:5518)
|
|
push bc
|
|
ld a, [hMapObjectIndexBuffer]
|
|
ld c, a
|
|
call Function5521
|
|
pop bc
|
|
ret
|
|
|
|
Function5521: ; 5521 (1:5521)
|
|
ld de, wPlayerStruct
|
|
ld a, $d
|
|
.asm_5526
|
|
push af
|
|
ld hl, $4
|
|
add hl, de
|
|
bit 7, [hl]
|
|
jr z, .asm_5540
|
|
ld hl, $0
|
|
add hl, de
|
|
ld a, [hl]
|
|
and a
|
|
jr z, .asm_5540
|
|
push bc
|
|
xor a
|
|
ld bc, $28
|
|
call ByteFill
|
|
pop bc
|
|
.asm_5540
|
|
ld hl, $28
|
|
add hl, de
|
|
ld d, h
|
|
ld e, l
|
|
pop af
|
|
dec a
|
|
jr nz, .asm_5526
|
|
ret
|
|
|
|
Function554b: ; 554b (1:554b)
|
|
call FindFirstEmptyObjectStruct
|
|
ret nc
|
|
ld d, h
|
|
ld e, l
|
|
callba CopyTempObjectToObjectStruct
|
|
ret
|
|
|
|
Function5558: ; 5558 (1:5558)
|
|
ld hl, wce99
|
|
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, [hMapObjectIndexBuffer]
|
|
ld [hli], a
|
|
push hl
|
|
ld hl, $10
|
|
add hl, bc
|
|
ld d, [hl]
|
|
ld hl, $11
|
|
add hl, bc
|
|
ld e, [hl]
|
|
pop hl
|
|
ld [hl], d
|
|
inc hl
|
|
ld [hl], e
|
|
inc hl
|
|
ld [hl], $ff
|
|
ret
|
|
|
|
Function557f::
|
|
dr $557f, $5730
|
|
Function5730::
|
|
dr $5730, $5795
|
|
StopFollow::
|
|
dr $5795, $5896
|
|
UpdateSprites_::
|
|
dr $5896, $58c5
|