summaryrefslogtreecommitdiff
path: root/home/map_objects.asm
diff options
context:
space:
mode:
authorlibjet <libj3t@gmail.com>2020-03-16 00:44:13 +0000
committerlibjet <libj3t@gmail.com>2020-03-16 00:44:13 +0000
commit6231351906960364a5ad2f34efefd809cceb0eb8 (patch)
tree709f2f908d9e1c2f7a882d628ff09b80de3c9e8b /home/map_objects.asm
parent4ad17cc30e6b70be19badd175558c438fc9adaf6 (diff)
Sync home/ with pokecrystal
Diffstat (limited to 'home/map_objects.asm')
-rw-r--r--home/map_objects.asm380
1 files changed, 207 insertions, 173 deletions
diff --git a/home/map_objects.asm b/home/map_objects.asm
index 874346f5..d9cebf48 100644
--- a/home/map_objects.asm
+++ b/home/map_objects.asm
@@ -1,9 +1,13 @@
-GetSpritePalette:: ; 169c
+; Functions handling map objects.
+
+GetSpritePalette::
push hl
push de
push bc
ld c, a
- farcall GetSpritePalette_
+
+ farcall _GetSpritePalette
+
ld a, c
pop bc
pop de
@@ -17,29 +21,30 @@ GetSpriteVTile::
ld c, $b
ld b, a
ldh a, [hMapObjectIndexBuffer]
- cp $0
- jr z, .asm_16c8
+ cp 0
+ jr z, .nope
ld a, b
-.asm_16ba
+.loop
cp [hl]
- jr z, .asm_16cd
+ jr z, .found
inc hl
inc hl
dec c
- jr nz, .asm_16ba
+ jr nz, .loop
ld a, [wUsedSprites + 1]
scf
- jr .asm_16d0
+ jr .done
-.asm_16c8
+.nope
ld a, [wUsedSprites + 1]
- jr .asm_16d0
+ jr .done
-.asm_16cd
+.found
inc hl
xor a
ld a, [hl]
-.asm_16d0
+
+.done
pop bc
pop hl
ret
@@ -47,17 +52,21 @@ GetSpriteVTile::
DoesSpriteHaveFacings::
push de
push hl
+
ld b, a
ldh a, [hROMBank]
push af
- ld a, BANK(DoesSpriteHaveFacings_)
+ ld a, BANK(_DoesSpriteHaveFacings)
rst Bankswitch
+
ld a, b
- call DoesSpriteHaveFacings_
+ call _DoesSpriteHaveFacings
ld c, a
+
pop de
ld a, d
rst Bankswitch
+
pop hl
pop de
ret
@@ -71,18 +80,22 @@ GetPlayerStandingTile::
CheckOnWater::
ld a, [wPlayerStandingTile]
call GetTileCollision
- sub $1
+ sub WATERTILE
ret z
and a
ret
-GetTileCollision:: ; 16fa (0:16fa)
+GetTileCollision::
+; Get the collision type of tile a.
+
push de
push hl
+
ld hl, TileCollisionTable
ld e, a
- ld d, $0
+ ld d, 0
add hl, de
+
ldh a, [hROMBank]
push af
ld a, BANK(TileCollisionTable)
@@ -90,8 +103,10 @@ GetTileCollision:: ; 16fa (0:16fa)
ld e, [hl]
pop af
rst Bankswitch
+
ld a, e
- and $f
+ and $f ; lo nybble only
+
pop hl
pop de
ret
@@ -99,228 +114,232 @@ GetTileCollision:: ; 16fa (0:16fa)
CheckGrassTile::
ld d, a
and $f0
- cp $10
- jr z, .asm_171f
- cp $20
- jr z, .asm_1725
+ cp HI_NYBBLE_TALL_GRASS
+ jr z, .grass
+ cp HI_NYBBLE_WATER
+ jr z, .water
scf
ret
-.asm_171f
+.grass
ld a, d
- and $7
+ and LO_NYBBLE_GRASS
ret z
scf
ret
-
-.asm_1725
+; For some reason, the above code is duplicated down here.
+.water
ld a, d
- and $7
+ and LO_NYBBLE_GRASS
ret z
scf
ret
CheckSuperTallGrassTile::
- cp $14
+ cp COLL_LONG_GRASS
ret z
- cp $1c
+ cp COLL_LONG_GRASS_1C
ret
CheckCutTreeTile::
- cp $12
+ cp COLL_CUT_TREE
ret z
- cp $1a
+ cp COLL_CUT_TREE_1A
ret
CheckHeadbuttTreeTile::
- cp $15
+ cp COLL_HEADBUTT_TREE
ret z
- cp $1d
+ cp COLL_HEADBUTT_TREE_1D
ret
CheckCounterTile::
- cp $90
+ cp COLL_COUNTER
ret z
- cp $98
+ cp COLL_COUNTER_98
ret
CheckPitTile::
- cp $60
+ cp COLL_PIT
ret z
- cp $68
+ cp COLL_PIT_68
ret
CheckIceTile::
- cp $23
+ cp COLL_ICE
ret z
- cp $2b
+ cp COLL_ICE_2B
ret z
scf
ret
CheckWhirlpoolTile::
nop
- cp $24
+ cp COLL_WHIRLPOOL
ret z
- cp $2c
+ cp COLL_WHIRLPOOL_2C
ret z
scf
ret
CheckWaterfallTile::
- cp $33
+ cp COLL_WATERFALL
ret z
- cp $3b
+ cp COLL_CURRENT_DOWN
ret
CheckStandingOnEntrance::
ld a, [wPlayerStandingTile]
- cp $71
+ cp COLL_DOOR
ret z
- cp $79
+ cp COLL_DOOR_79
ret z
- cp $7a
+ cp COLL_STAIRCASE
ret z
- cp $7b
+ cp COLL_CAVE
ret
-GetMapObject:: ; 176f (0:176f)
+GetMapObject::
+; Return the location of map object a in bc.
ld hl, wMapObjects
- ld bc, $10
+ ld bc, MAPOBJECT_LENGTH
call AddNTimes
ld b, h
ld c, l
ret
-CheckObjectVisibility:: ; 177b (0:177b)
- ldh [hConnectionStripLength], a
+CheckObjectVisibility::
+; Sets carry if the object is not visible on the screen.
+ ldh [hMapObjectIndexBuffer], a
call GetMapObject
- ld hl, 0
+ ld hl, MAPOBJECT_OBJECT_STRUCT_ID
add hl, bc
ld a, [hl]
- cp $ff
- jr z, .asm_1790
+ cp -1
+ jr z, .not_visible
ldh [hObjectStructIndexBuffer], a
call GetObjectStruct
and a
ret
-.asm_1790
+.not_visible
scf
ret
CheckObjectTime::
- ld hl, $6
+ ld hl, MAPOBJECT_HOUR
add hl, bc
ld a, [hl]
- cp $ff
- jr nz, .asm_17be
- ld hl, $7
+ cp -1
+ jr nz, .check_hour
+ ld hl, MAPOBJECT_TIMEOFDAY
add hl, bc
ld a, [hl]
- cp $ff
- jr z, .asm_17b9
- ld hl, .TimeOfDayValues_17bb
+ cp -1
+ jr z, .timeofday_always
+ ld hl, .TimeOfDayValues_191e
ld a, [wTimeOfDay]
add l
ld l, a
- jr nc, .asm_17af
+ jr nc, .ok
inc h
-.asm_17af
+
+.ok
ld a, [hl]
- ld hl, $7
+ ld hl, MAPOBJECT_TIMEOFDAY
add hl, bc
and [hl]
- jr nz, .asm_17b9
+ jr nz, .timeofday_always
scf
ret
-.asm_17b9
+.timeofday_always
and a
ret
-.TimeOfDayValues_17bb:
+.TimeOfDayValues_191e:
+; entries correspond to TimeOfDay values
db MORN
db DAY
db NITE
-.asm_17be
- ld hl, $6
+.check_hour
+ ld hl, MAPOBJECT_HOUR
add hl, bc
ld d, [hl]
- ld hl, $7
+ ld hl, MAPOBJECT_TIMEOFDAY
add hl, bc
ld e, [hl]
ld hl, hHours
ld a, d
cp e
- jr z, .asm_17e6
- jr c, .asm_17dc
+ jr z, .yes
+ jr c, .check_timeofday
ld a, [hl]
cp d
- jr nc, .asm_17e6
+ jr nc, .yes
cp e
- jr c, .asm_17e6
- jr z, .asm_17e6
- jr .asm_17e8
+ jr c, .yes
+ jr z, .yes
+ jr .no
-.asm_17dc
+.check_timeofday
ld a, e
cp [hl]
- jr c, .asm_17e8
+ jr c, .no
ld a, [hl]
cp d
- jr nc, .asm_17e6
- jr .asm_17e8
+ jr nc, .yes
+ jr .no
-.asm_17e6
+.yes
and a
ret
-.asm_17e8
+.no
scf
ret
-Function17ea::
+; unused
ldh [hMapObjectIndexBuffer], a
call GetMapObject
- call CopyObjectStruct_
+ call CopyObjectStruct
ret
-CopyObjectStruct::
+_CopyObjectStruct::
ldh [hMapObjectIndexBuffer], a
call UnmaskObject
- ldh a, [hConnectionStripLength]
+ ldh a, [hMapObjectIndexBuffer]
call GetMapObject
- farcall CopyObjectStruct_
+ farcall CopyObjectStruct
ret
-ApplyDeletionToMapObject:: ; 1804 (0:1804)
- ldh [hConnectionStripLength], a
+ApplyDeletionToMapObject::
+ ldh [hMapObjectIndexBuffer], a
call GetMapObject
- ld hl, 0
+ ld hl, MAPOBJECT_OBJECT_STRUCT_ID
add hl, bc
ld a, [hl]
- cp $ff
- ret z
- ld [hl], $ff
+ cp -1
+ ret z ; already hidden
+ ld [hl], -1
push af
- call DeleteOject_CheckStopFollow
+ call .CheckStopFollow
pop af
call GetObjectStruct
farcall DeleteMapObject
ret
-DeleteOject_CheckStopFollow:: ; 1822 (0:1822)
+.CheckStopFollow:
ld hl, wObjectFollow_Leader
cp [hl]
- jr z, .asm_182d
+ jr z, .ok
ld hl, wObjectFollow_Follower
cp [hl]
ret nz
-.asm_182d
+.ok
farcall StopFollow
- ld a, $ff
+ ld a, -1
ld [wObjectFollow_Leader], a
ld [wObjectFollow_Follower], a
ret
@@ -335,106 +354,113 @@ CopyPlayerObjectTemplate::
call GetMapObject
ld d, b
ld e, c
- ld a, $ff
+ ld a, -1
ld [de], a
inc de
pop hl
- ld bc, $f
+ ld bc, MAPOBJECT_LENGTH - 1
call CopyBytes
ret
-Function1855::
+Unreferenced_Function19b8:
call GetMapObject
- ld hl, 0
+ ld hl, MAPOBJECT_OBJECT_STRUCT_ID
add hl, bc
ld a, [hl]
push af
- ld [hl], $ff
+ ld [hl], -1
inc hl
- ld bc, $f
+ ld bc, MAPOBJECT_LENGTH - 1
xor a
call ByteFill
pop af
- cp $ff
+ cp -1
ret z
cp $d
ret nc
ld b, a
ld a, [wObjectFollow_Leader]
cp b
- jr nz, .asm_187b
- ld a, $ff
+ jr nz, .ok
+ ld a, -1
ld [wObjectFollow_Leader], a
-.asm_187b
+
+.ok
ld a, b
call GetObjectStruct
farcall DeleteMapObject
ret
LoadMovementDataPointer::
- ld [wMovementPerson], a
+; Load the movement data pointer for object a.
+ ld [wMovementObject], a
ldh a, [hROMBank]
- ld [wMovementDataPointerBank], a
+ ld [wMovementDataBank], a
ld a, l
- ld [wMovementDataPointerAddr], a
+ ld [wMovementDataAddress], a
ld a, h
- ld [wMovementDataPointerAddr + 1], a
- ld a, [wMovementPerson]
+ ld [wMovementDataAddress + 1], a
+ ld a, [wMovementObject]
call CheckObjectVisibility
ret c
- ld hl, $3
+
+ ld hl, OBJECT_MOVEMENTTYPE
add hl, bc
- ld [hl], $14
- ld hl, $9
+ ld [hl], SPRITEMOVEDATA_SCRIPTED
+
+ ld hl, OBJECT_STEP_TYPE
add hl, bc
- ld [hl], $0
+ ld [hl], STEP_TYPE_00
+
ld hl, wVramState
set 7, [hl]
and a
ret
FindFirstEmptyObjectStruct::
+; Returns the index of the first empty object struct in A and its address in HL, then sets carry.
+; If all object structs are occupied, A = 0 and Z is set.
+; Preserves BC and DE.
push bc
push de
ld hl, wObjectStructs
- ld de, $28
- ld c, $d
-.asm_18ba
+ ld de, OBJECT_LENGTH
+ ld c, NUM_OBJECT_STRUCTS
+.loop
ld a, [hl]
and a
- jr z, .asm_18c5
+ jr z, .break
add hl, de
dec c
- jr nz, .asm_18ba
+ jr nz, .loop
xor a
- jr .asm_18c9
+ jr .done
-.asm_18c5
- ld a, $d
+.break
+ ld a, NUM_OBJECT_STRUCTS
sub c
scf
-.asm_18c9
+
+.done
pop de
pop bc
ret
GetSpriteMovementFunction::
- ld hl, $3
+ ld hl, OBJECT_MOVEMENTTYPE
add hl, bc
ld a, [hl]
- cp $25
- jr c, .asm_18d6
+ cp NUM_SPRITEMOVEDATA
+ jr c, .ok
xor a
-.asm_18d6
- ld hl, SpriteMovementData
+
+.ok
+ ld hl, SpriteMovementData + SPRITEMOVEATTR_MOVEMENT
ld e, a
- ld d, $0
- add hl, de
- add hl, de
- add hl, de
- add hl, de
- add hl, de
+ ld d, 0
+rept NUM_SPRITEMOVEDATA_FIELDS
add hl, de
+endr
ld a, [hl]
ret
@@ -442,19 +468,16 @@ GetInitialFacing::
push bc
push de
ld e, a
- ld d, $0
- ld hl, SpriteMovementData + 1
- add hl, de
- add hl, de
- add hl, de
- add hl, de
- add hl, de
+ ld d, 0
+ ld hl, SpriteMovementData + SPRITEMOVEATTR_FACING
+rept NUM_SPRITEMOVEDATA_FIELDS
add hl, de
+endr
ld a, BANK(SpriteMovementData)
call GetFarByte
add a
add a
- and $c
+ maskbits NUM_DIRECTIONS, 2
pop de
pop bc
ret
@@ -467,78 +490,87 @@ CopySpriteMovementData::
rst Bankswitch
ld a, l
push bc
+
call .CopyData
+
pop bc
pop af
rst Bankswitch
+
ret
.CopyData:
- ld hl, $3
+ ld hl, OBJECT_MOVEMENTTYPE
add hl, de
ld [hl], a
+
push de
ld e, a
- ld d, $0
- ld hl, $4275
- add hl, de
- add hl, de
- add hl, de
- add hl, de
- add hl, de
+ ld d, 0
+ ld hl, SpriteMovementData + SPRITEMOVEATTR_FACING
+rept NUM_SPRITEMOVEDATA_FIELDS
add hl, de
+endr
ld b, h
ld c, l
pop de
+
ld a, [bc]
inc bc
rlca
rlca
- and $c
- ld hl, $8
+ maskbits NUM_DIRECTIONS, 2
+ ld hl, OBJECT_FACING
add hl, de
ld [hl], a
+
ld a, [bc]
inc bc
- ld hl, $b
+ ld hl, OBJECT_ACTION
add hl, de
ld [hl], a
+
ld a, [bc]
inc bc
- ld hl, $4
+ ld hl, OBJECT_FLAGS1
add hl, de
ld [hl], a
+
ld a, [bc]
inc bc
- ld hl, $5
+ ld hl, OBJECT_FLAGS2
add hl, de
ld [hl], a
+
ld a, [bc]
inc bc
- ld hl, $6
+ ld hl, OBJECT_PALETTE
add hl, de
ld [hl], a
ret
-GetMovementByte_::
+_GetMovementByte::
+; Switch to the movement data bank
ldh a, [hROMBank]
push af
ld a, [hli]
rst Bankswitch
+; Load the current script byte as given by OBJECT_MOVEMENT_BYTE_INDEX, and increment OBJECT_MOVEMENT_BYTE_INDEX
ld a, [hli]
ld d, [hl]
- ld hl, $1b
+ ld hl, OBJECT_MOVEMENT_BYTE_INDEX
add hl, bc
add [hl]
ld e, a
ld a, d
- adc $0
+ adc 0
ld d, a
inc [hl]
ld a, [de]
ld h, a
pop af
rst Bankswitch
+
ld a, h
ret
@@ -552,16 +584,17 @@ ResetVramState_Bit0::
res 0, [hl]
ret
-UpdateSprites:: ; 196f (0:196f)
+UpdateSprites::
ld a, [wVramState]
bit 0, a
ret z
+
farcall Function557f
- farcall UpdateSprites_
+ farcall _UpdateSprites
ret
-GetObjectStruct:: ; 1982 (0:1982)
- ld bc, $28
+GetObjectStruct::
+ ld bc, OBJECT_LENGTH
ld hl, wObjectStructs
call AddNTimes
ld b, h
@@ -569,28 +602,29 @@ GetObjectStruct:: ; 1982 (0:1982)
ret
DoesObjectHaveASprite::
- ld hl, 0
+ ld hl, OBJECT_SPRITE
add hl, bc
ld a, [hl]
and a
ret
SetSpriteDirection::
+ ; preserves other flags
push af
- ld hl, $8
+ ld hl, OBJECT_FACING
add hl, bc
ld a, [hl]
- and $f3
+ and %11110011
ld e, a
pop af
- and $c
+ maskbits NUM_DIRECTIONS, 2
or e
ld [hl], a
ret
GetSpriteDirection::
- ld hl, $8
+ ld hl, OBJECT_FACING
add hl, bc
ld a, [hl]
- and $c
+ maskbits NUM_DIRECTIONS, 2
ret