mirror of
https://github.com/pret/pokegold-spaceworld.git
synced 2026-04-25 15:39:32 -05:00
- Indent with single tabs, not spaces - Colons after labels - Capitalize BANK, HIGH, and LOW - dbw BANK(X), X -> dba X
689 lines
9.4 KiB
NASM
689 lines
9.4 KiB
NASM
include "constants.asm"
|
|
|
|
SECTION "home/map_objects.asm", ROM0
|
|
|
|
Function15b5:: ; 15b5
|
|
callab Function8000
|
|
ret
|
|
|
|
GetMapObject:: ; 00:15be
|
|
ld hl, wMapObjects
|
|
ld bc, MAP_OBJECT_LENGTH
|
|
call AddNTimes
|
|
ld b, h
|
|
ld c, l
|
|
ret
|
|
|
|
GetMapObjectAttrPtr:: ; 15ca
|
|
call GetMapObject
|
|
ld d, $0
|
|
add hl, de
|
|
ret
|
|
|
|
Function15d1:: ; 15d1
|
|
ldh [hMapObjectIndexBuffer], a
|
|
call GetMapObject
|
|
call Function40eb
|
|
ret
|
|
|
|
Function15da::
|
|
ldh [hMapObjectIndexBuffer], a
|
|
callab Function8131
|
|
ldh a, [hMapObjectIndexBuffer]
|
|
call GetMapObject
|
|
call Function40eb
|
|
ret
|
|
|
|
Function15ed::
|
|
ldh [hMapObjectIndexBuffer], a
|
|
call GetMapObject
|
|
ld a, $0
|
|
ldh [hObjectStructIndexBuffer], a
|
|
ld de, wObjectStructs
|
|
callab Function813d
|
|
ret
|
|
|
|
Function1602::
|
|
ldh [hMapObjectIndexBuffer], a
|
|
call GetMapObject
|
|
ld a, $2
|
|
ldh [hObjectStructIndexBuffer], a
|
|
ld de, wObject1Struct
|
|
callab Function813d
|
|
ret
|
|
|
|
Function1617:: ; 00:1617
|
|
ldh [hMapObjectIndexBuffer], a
|
|
call GetMapObject
|
|
ld hl, MAPOBJECT_OBJECT_STRUCT_ID
|
|
add hl, bc
|
|
ld a, [hl]
|
|
cp $ff
|
|
ret z
|
|
ld [hl], $ff
|
|
push af
|
|
ld d, a
|
|
ld a, [wObjectFollow_Leader]
|
|
cp d
|
|
jr nz, .asm_1633
|
|
ld a, $ff
|
|
ld [wObjectFollow_Leader], a
|
|
.asm_1633: ; 00:1633
|
|
ld a, [wObjectFollow_Follower]
|
|
cp d
|
|
jr nz, .asm_163e
|
|
ld a, $0
|
|
ld [wObjectFollow_Follower], a
|
|
.asm_163e: ; 00:163e
|
|
pop af
|
|
call GetObjectStruct
|
|
ld bc, OBJECT_LENGTH
|
|
xor a
|
|
call ByteFill
|
|
ret
|
|
|
|
Function164a::
|
|
call Function1617
|
|
callab Function8125
|
|
ret
|
|
|
|
Function1656::
|
|
push hl
|
|
call GetMapObject
|
|
ld d, b
|
|
ld e, c
|
|
ld a, $ff
|
|
ld [de], a
|
|
inc de
|
|
pop hl
|
|
ld bc, MAP_OBJECT_TEMPLATE_LENGTH
|
|
call CopyBytes
|
|
ret
|
|
|
|
Function1668::
|
|
call GetMapObject
|
|
ld a, [wXCoord]
|
|
add $4
|
|
ld hl, MAPOBJECT_X_COORD
|
|
add hl, bc
|
|
ld [hl], a
|
|
ld a, [wYCoord]
|
|
add $4
|
|
ld hl, MAPOBJECT_Y_COORD
|
|
add hl, bc
|
|
ld [hl], a
|
|
ret
|
|
|
|
Function1680::
|
|
call CheckObjectVisibility
|
|
ret c
|
|
ld hl, OBJECT_NEXT_MAP_X
|
|
add hl, bc
|
|
ld d, [hl]
|
|
ld hl, OBJECT_NEXT_MAP_Y
|
|
add hl, bc
|
|
ld e, [hl]
|
|
ldh a, [hMapObjectIndexBuffer]
|
|
call GetMapObject
|
|
ld hl, MAPOBJECT_X_COORD
|
|
add hl, bc
|
|
ld [hl], d
|
|
ld hl, MAPOBJECT_Y_COORD
|
|
add hl, bc
|
|
ld [hl], e
|
|
and a
|
|
ret
|
|
|
|
Function169f::
|
|
call GetMapObject
|
|
ld hl, MAPOBJECT_OBJECT_STRUCT_ID
|
|
add hl, bc
|
|
ld a, [hl]
|
|
push af
|
|
ld [hl], $ff
|
|
inc hl
|
|
ld bc, MAP_OBJECT_LENGTH - 1
|
|
xor a
|
|
call ByteFill
|
|
pop af
|
|
cp $ff
|
|
ret z
|
|
cp $a
|
|
ret nc
|
|
ld b, a
|
|
ld a, [wObjectFollow_Leader]
|
|
cp b
|
|
jr nz, .asm_16c5
|
|
ld a, $ff
|
|
ld [wObjectFollow_Leader], a
|
|
.asm_16c5: ; 00:16c5
|
|
ld a, b
|
|
call GetObjectStruct
|
|
ld bc, OBJECT_LENGTH
|
|
xor a
|
|
call ByteFill
|
|
ret
|
|
|
|
LoadMovementDataPointer::
|
|
ld [wMovementObject], a
|
|
ldh a, [hROMBank]
|
|
ld [wMovementDataBank], a
|
|
ld a, l
|
|
ld [wMovementDataAddr], a
|
|
ld a, h
|
|
ld [wMovementDataAddr + 1], a
|
|
ld a, [wMovementObject]
|
|
call CheckObjectVisibility
|
|
ret c
|
|
ld hl, $3
|
|
add hl, bc
|
|
ld [hl], $19
|
|
ld hl, $8
|
|
add hl, bc
|
|
ld [hl], $0
|
|
ld hl, wVramState
|
|
set 7, [hl]
|
|
and a
|
|
ret
|
|
|
|
Function16fb::
|
|
ld [wMovementObject], a
|
|
ldh a, [hROMBank]
|
|
ld [wMovementDataBank], a
|
|
ld a, l
|
|
ld [wMovementDataAddr], a
|
|
ld a, h
|
|
ld [wMovementDataAddr + 1], a
|
|
ld a, [wMovementObject]
|
|
call CheckObjectVisibility
|
|
jr c, .asm_171f
|
|
ld hl, OBJECT_MOVEMENTTYPE
|
|
add hl, bc
|
|
ld [hl], $19
|
|
ld hl, OBJECT_FACING
|
|
add hl, bc
|
|
ld [hl], $0
|
|
.asm_171f: ; 00:171f
|
|
ret
|
|
|
|
CheckObjectVisibility:: ; 00:1720
|
|
ldh [hMapObjectIndexBuffer], a
|
|
call GetMapObject
|
|
ld hl, MAPOBJECT_OBJECT_STRUCT_ID
|
|
add hl, bc
|
|
ld a, [hl]
|
|
cp $ff
|
|
jr z, .asm_1735
|
|
ldh [hObjectStructIndexBuffer], a
|
|
call GetObjectStruct
|
|
and a
|
|
ret
|
|
|
|
.asm_1735: ; 00:1735
|
|
scf
|
|
ret
|
|
|
|
PushToCmdQueue:: ; 1737
|
|
push de
|
|
call GetCmdQueueEmptySlot
|
|
pop de
|
|
ret c
|
|
ld b, h
|
|
ld c, l
|
|
ld a, [de]
|
|
inc de
|
|
ld hl, $1
|
|
add hl, bc
|
|
ld [hl], a
|
|
ld a, [de]
|
|
inc de
|
|
ld hl, $2
|
|
add hl, bc
|
|
ld [hl], a
|
|
ld a, [de]
|
|
inc de
|
|
ld hl, $3
|
|
add hl, bc
|
|
ld [hl], a
|
|
ld a, [de]
|
|
inc de
|
|
ld hl, $d
|
|
add hl, bc
|
|
ld [hl], a
|
|
ld a, [de]
|
|
inc de
|
|
ld hl, $e
|
|
add hl, bc
|
|
ld [hl], a
|
|
ld a, [de]
|
|
inc de
|
|
ld hl, $f
|
|
add hl, bc
|
|
ld [hl], a
|
|
ldh a, [hMapObjectIndexBuffer]
|
|
inc a
|
|
ld hl, $0
|
|
add hl, bc
|
|
ld [hl], a
|
|
push bc
|
|
dec a
|
|
call GetObjectStruct
|
|
ld d, b
|
|
ld e, c
|
|
pop bc
|
|
ld hl, $18
|
|
add hl, de
|
|
ld a, [hl]
|
|
ld hl, $4
|
|
add hl, bc
|
|
ld [hl], a
|
|
ld hl, $19
|
|
add hl, de
|
|
ld a, [hl]
|
|
ld hl, $5
|
|
add hl, bc
|
|
ld [hl], a
|
|
ret
|
|
|
|
GetCmdQueueEmptySlot:: ; 00:178e
|
|
ld hl, wCmdQueue
|
|
ld de, CMDQUEUE_ENTRY_SIZE
|
|
ld a, 1
|
|
.asm_1796: ; 00:1796
|
|
ldh [hObjectStructIndexBuffer], a
|
|
ld a, [hl]
|
|
and a
|
|
jr z, .asm_17a6
|
|
add hl, de
|
|
ldh a, [hObjectStructIndexBuffer]
|
|
inc a
|
|
cp 4 + 1
|
|
jr nz, .asm_1796
|
|
scf
|
|
ret
|
|
|
|
.asm_17a6: ; 00:17a6
|
|
xor a
|
|
ret
|
|
|
|
UpdateSprites:: ; 00:17a8
|
|
ld a, [wVramState]
|
|
bit 0, a
|
|
ret z
|
|
callab Function5007
|
|
callab _UpdateSprites
|
|
ret
|
|
|
|
GetObjectStruct:: ; 00:17bf
|
|
; Puts the start of the a'th object struct into bc
|
|
ld bc, $28
|
|
ld hl, wObjectStructs
|
|
call AddNTimes
|
|
ld b, h
|
|
ld c, l
|
|
ret
|
|
|
|
Function17cb::
|
|
add $10
|
|
|
|
Function17cd::
|
|
ld e, a
|
|
ldh a, [hROMBank]
|
|
push af
|
|
ld a, BANK(Function862e)
|
|
call Bankswitch
|
|
call Function862e
|
|
pop af
|
|
call Bankswitch
|
|
ret
|
|
|
|
; sets carry flag if the sprite data includes "in-motion" sprites
|
|
IsAnimatedSprite:: ; 00:17de
|
|
push hl
|
|
push bc
|
|
ld c, a
|
|
ld b, -1
|
|
ld hl, .NonAnimatedSprites
|
|
.loop
|
|
ld a, [hli]
|
|
cp b
|
|
jr z, .done
|
|
cp c
|
|
jr nz, .loop
|
|
scf
|
|
.done
|
|
pop bc
|
|
pop hl
|
|
ret
|
|
|
|
.NonAnimatedSprites: ; 00:17f1
|
|
db SPRITE_KABIGON
|
|
db SPRITE_POKE_BALL
|
|
db SPRITE_POKEDEX
|
|
db SPRITE_PAPER
|
|
db SPRITE_OLD_LINK_RECEPTIONIST
|
|
db SPRITE_EGG
|
|
db SPRITE_BOULDER
|
|
db -1
|
|
|
|
Function17f9::
|
|
call GetMapObject
|
|
ld hl, $0
|
|
add hl, bc
|
|
ld a, [hl]
|
|
cp $ff
|
|
ret z
|
|
call GetObjectStruct
|
|
push bc
|
|
call Function1828
|
|
pop bc
|
|
ld hl, $5
|
|
add hl, bc
|
|
res 5, [hl]
|
|
ret
|
|
|
|
Function1813::
|
|
call GetMapObject
|
|
ld hl, $0
|
|
add hl, bc
|
|
ld a, [hl]
|
|
cp $ff
|
|
ret z
|
|
call GetObjectStruct
|
|
ld hl, $5
|
|
add hl, bc
|
|
set 5, [hl]
|
|
ret
|
|
|
|
Function1828:: ; 00:1828
|
|
ld bc, wObjectStructs
|
|
xor a
|
|
.asm_182c: ; 00:182c
|
|
push af
|
|
ld hl, OBJECT_SPRITE
|
|
add hl, bc
|
|
ld a, [hl]
|
|
and a
|
|
jr z, .asm_183b
|
|
ld hl, OBJECT_FLAGS + 1
|
|
add hl, bc
|
|
set 5, [hl]
|
|
.asm_183b: ; 00:183b
|
|
ld hl, OBJECT_LENGTH
|
|
add hl, bc
|
|
ld b, h
|
|
ld c, l
|
|
pop af
|
|
inc a
|
|
cp 10
|
|
jr nz, .asm_182c
|
|
ret
|
|
|
|
Function1848::
|
|
push bc
|
|
ld bc, wObjectStructs
|
|
xor a
|
|
.asm_184d: ; 00:184d
|
|
push af
|
|
ld hl, OBJECT_SPRITE
|
|
add hl, bc
|
|
ld a, [hl]
|
|
and a
|
|
jr z, .asm_185c
|
|
ld hl, OBJECT_FLAGS + 1
|
|
add hl, bc
|
|
res 5, [hl]
|
|
.asm_185c: ; 00:185c
|
|
ld hl, OBJECT_LENGTH
|
|
add hl, bc
|
|
ld b, h
|
|
ld c, l
|
|
pop af
|
|
inc a
|
|
cp 10
|
|
jr nz, .asm_184d
|
|
pop bc
|
|
ret
|
|
|
|
Function186a::
|
|
call GetMapObject
|
|
ld hl, $0
|
|
add hl, bc
|
|
ld a, [hl]
|
|
cp $ff
|
|
ret z
|
|
call GetObjectStruct
|
|
ld hl, OBJECT_FLAGS + 1
|
|
add hl, bc
|
|
res 5, [hl]
|
|
ret
|
|
|
|
Function187f::
|
|
xor a
|
|
.asm_1880: ; 00:1880
|
|
push af
|
|
push hl
|
|
ld b, a
|
|
ldh a, [hROMBank]
|
|
push af
|
|
ld c, [hl]
|
|
inc hl
|
|
ld a, [hli]
|
|
ld h, [hl]
|
|
ld l, a
|
|
ld a, c
|
|
call Bankswitch
|
|
ld a, b
|
|
call ._hl_
|
|
pop af
|
|
call Bankswitch
|
|
pop hl
|
|
pop af
|
|
inc a
|
|
cp 16
|
|
jr nz, .asm_1880
|
|
ret
|
|
|
|
._hl_: ; 00:189f
|
|
jp hl
|
|
|
|
Function18a0::
|
|
ld a, [wcb70]
|
|
and a
|
|
ret z
|
|
ldh a, [hROMBank]
|
|
push af
|
|
ld a, BANK(Function83e8)
|
|
call Bankswitch
|
|
call Function83e8
|
|
pop af
|
|
call Bankswitch
|
|
ret
|
|
|
|
Function18b4::
|
|
ld bc, wPlayerStruct
|
|
ld hl, OBJECT_FLAGS
|
|
add hl, bc
|
|
set 3, [hl]
|
|
set 2, [hl]
|
|
set 1, [hl]
|
|
ld hl, OBJECT_FLAGS + 1
|
|
add hl, bc
|
|
set 5, [hl]
|
|
call Function18e5
|
|
ret
|
|
|
|
Function18cc::
|
|
ld hl, wPlayerFlags
|
|
res 3, [hl]
|
|
res 2, [hl]
|
|
res 1, [hl]
|
|
ld hl, wPlayerFlags + 1
|
|
res 5, [hl]
|
|
ld hl, wPlayerMovementType
|
|
ld [hl], $10
|
|
ld hl, wPlayerDirection
|
|
ld [hl], $0
|
|
ret
|
|
|
|
Function18e5:: ; 00:18e5
|
|
ld hl, OBJECT_DIRECTION_WALKING
|
|
add hl, bc
|
|
ld a, [hl]
|
|
srl a
|
|
srl a
|
|
and $3
|
|
ld e, a
|
|
ld d, $0
|
|
ld hl, .Data
|
|
add hl, de
|
|
ld a, [hl]
|
|
ld hl, OBJECT_MOVEMENTTYPE
|
|
add hl, bc
|
|
ld [hl], a
|
|
ld hl, OBJECT_FACING
|
|
add hl, bc
|
|
ld [hl], $0
|
|
ret
|
|
|
|
.Data:
|
|
db $05, $06, $07, $08
|
|
|
|
Function1908::
|
|
call CheckObjectVisibility
|
|
ret c
|
|
push bc
|
|
call Function191d
|
|
pop bc
|
|
ld hl, OBJECT_FLAGS
|
|
add hl, bc
|
|
set 7, [hl]
|
|
ldh a, [hObjectStructIndexBuffer]
|
|
ld [wCenteredObject], a
|
|
ret
|
|
|
|
Function191d:: ; 00:191d
|
|
ld a, [wCenteredObject]
|
|
cp $ff
|
|
ret z
|
|
call GetObjectStruct
|
|
ld hl, OBJECT_FLAGS
|
|
add hl, bc
|
|
res 7, [hl]
|
|
ld a, $ff
|
|
ld [wCenteredObject], a
|
|
ret
|
|
|
|
; 1932
|
|
|
|
StartFollow::
|
|
push bc
|
|
ld a, b
|
|
call SetLeaderIfVisible
|
|
pop bc
|
|
ld a, c
|
|
call SetFollowerIfVisible
|
|
callab QueueFollowerFirstStep
|
|
ret
|
|
|
|
SetLeaderIfVisible:: ; 00:1945
|
|
call CheckObjectVisibility
|
|
ret c
|
|
ldh a, [hObjectStructIndexBuffer]
|
|
ld [wObjectFollow_Leader], a
|
|
ret
|
|
|
|
ResetLeader::
|
|
xor a
|
|
ld [wObjectFollow_Leader], a
|
|
ret
|
|
|
|
SetFollowerIfVisible:: ; 00:1954
|
|
push af
|
|
call ResetFollower
|
|
pop af
|
|
call CheckObjectVisibility
|
|
ret c
|
|
ld hl, OBJECT_MOVEMENTTYPE
|
|
add hl, bc
|
|
ld [hl], $18
|
|
ld hl, OBJECT_FACING
|
|
add hl, bc
|
|
ld [hl], $0
|
|
ldh a, [hObjectStructIndexBuffer]
|
|
ld [wObjectFollow_Follower], a
|
|
ret
|
|
|
|
ResetFollower:: ; 00:196f
|
|
ld a, [wObjectFollow_Follower]
|
|
and a
|
|
ret z
|
|
cp $ff
|
|
ret z
|
|
call GetObjectStruct
|
|
call Function18e5
|
|
ret
|
|
|
|
Function197e::
|
|
call CheckObjectVisibility
|
|
ret c
|
|
ld hl, OBJECT_FLAGS + 1
|
|
add hl, bc
|
|
res 0, [hl]
|
|
ret
|
|
|
|
Function1989::
|
|
call CheckObjectVisibility
|
|
ret c
|
|
ld hl, OBJECT_FLAGS + 1
|
|
add hl, bc
|
|
set 0, [hl]
|
|
ret
|
|
|
|
Function1994::
|
|
call CheckObjectVisibility
|
|
ret c
|
|
ld hl, OBJECT_FLAGS + 1
|
|
add hl, bc
|
|
res 4, [hl]
|
|
ret
|
|
|
|
Function199f::
|
|
call CheckObjectVisibility
|
|
ret c
|
|
ld hl, OBJECT_FLAGS + 1
|
|
add hl, bc
|
|
set 4, [hl]
|
|
ret
|
|
|
|
Function19aa::
|
|
call CheckObjectVisibility
|
|
ret c
|
|
ld hl, OBJECT_FLAGS + 1
|
|
add hl, bc
|
|
set 7, [hl]
|
|
ret
|
|
|
|
Function19b5::
|
|
call CheckObjectVisibility
|
|
ret c
|
|
ld hl, OBJECT_FLAGS + 1
|
|
add hl, bc
|
|
res 7, [hl]
|
|
ret
|
|
|
|
SetObjectFacing:: ; 19C0
|
|
; a is NPC number, d is direction
|
|
push de
|
|
call CheckObjectVisibility
|
|
pop de
|
|
ret c
|
|
ld a, d
|
|
add a
|
|
add a
|
|
and $c
|
|
ld hl, OBJECT_DIRECTION_WALKING
|
|
add hl, bc
|
|
ld [hl], a
|
|
ret
|