summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--constants/script_constants.asm11
-rwxr-xr-xengine/events/specials.asm6
-rw-r--r--engine/menus/intro_menu.asm4
-rw-r--r--engine/overworld/init_map.asm31
-rwxr-xr-xengine/overworld/map_objects.asm4
-rw-r--r--engine/overworld/map_setup.asm4
-rwxr-xr-xengine/overworld/npc_movement.asm434
-rwxr-xr-xengine/overworld/player_movement.asm775
-rwxr-xr-xengine/overworld/player_object.asm603
-rwxr-xr-xengine/overworld/player_step.asm75
-rwxr-xr-xengine/overworld/time.asm253
-rwxr-xr-xengine/overworld/variables.asm80
-rw-r--r--wram.asm31
13 files changed, 1267 insertions, 1044 deletions
diff --git a/constants/script_constants.asm b/constants/script_constants.asm
index f8673936..ec9e5dac 100644
--- a/constants/script_constants.asm
+++ b/constants/script_constants.asm
@@ -86,6 +86,17 @@ const_value SET -1
const PLAYEREVENT_JOYCHANGEFACING
NUM_PLAYER_EVENTS EQU const_value
+; PlayerMovement.pointers indexes (see engine/overworld/events.asm)
+ const_def
+ const PLAYERMOVEMENT_NORMAL
+ const PLAYERMOVEMENT_WARP
+ const PLAYERMOVEMENT_TURN
+ const PLAYERMOVEMENT_FORCE_TURN
+ const PLAYERMOVEMENT_FINISH
+ const PLAYERMOVEMENT_CONTINUE
+ const PLAYERMOVEMENT_EXIT_WATER
+ const PLAYERMOVEMENT_JUMP
+
; script data sizes (see macros/scripts/maps.asm)
SCENE_SCRIPT_SIZE EQU 4 ; scene_script
CALLBACK_SIZE EQU 3 ; callback
diff --git a/engine/events/specials.asm b/engine/events/specials.asm
index 53b8ee5b..c3d2f9ad 100755
--- a/engine/events/specials.asm
+++ b/engine/events/specials.asm
@@ -404,7 +404,7 @@ Functionc53c: ; c53c (3:453c)
ret
UnusedCheckUnusedTwoDayTimer: ; c549 (3:4549)
- farcall Function118f8
+ farcall CheckUnusedTwoDayTimer
ld a, [wUnusedTwoDayTimer]
ld [wScriptVar], a
ret
@@ -445,13 +445,13 @@ CheckPokerus: ; c588 (3:4588)
jp Functionc53c
ResetLuckyNumberShowFlag: ; c591 (3:4591)
- farcall Function11917
+ farcall RestartLuckyNumberCountdown
ClearFlag ENGINE_LUCKY_NUMBER_SHOW
farcall LoadOrRegenerateLuckyIDNumber
ret
CheckLuckyNumberShowFlag: ; c5a3 (3:45a3)
- farcall Function1192e
+ farcall _CheckLuckyNumberShowFlag
jp Functionc53c
CountUnown: ; c5ac (3:45ac)
diff --git a/engine/menus/intro_menu.asm b/engine/menus/intro_menu.asm
index e31900d5..1b19d41e 100644
--- a/engine/menus/intro_menu.asm
+++ b/engine/menus/intro_menu.asm
@@ -238,7 +238,7 @@ Function5bf7: ; 5bf7 (1:5bf7)
MainMenu_MysteryGift:
call UpdateTime
- farcall Function11934
+ farcall DoMysteryGiftIfDayHasPassed
farcall Function29dff
ret
@@ -447,7 +447,7 @@ Function5d5d: ; 5d5d (1:5d5d)
InitializeWorld: ; 5d97 (1:5d97)
call ShrinkPlayer
farcall SpawnPlayer
- farcall InitializeStartDay_
+ farcall _InitializeStartDay
ret
LoadOrRegenerateLuckyIDNumber: ; 5da7 (1:5da7)
diff --git a/engine/overworld/init_map.asm b/engine/overworld/init_map.asm
index 5771bd9e..72950ac7 100644
--- a/engine/overworld/init_map.asm
+++ b/engine/overworld/init_map.asm
@@ -1,21 +1,24 @@
-ReanchorBGMap_NoOAMUpdate:: ; 6551 (1:6551)
+ReanchorBGMap_NoOAMUpdate::
call DelayFrame
ldh a, [hOAMUpdate]
push af
+
ld a, $1
ldh [hOAMUpdate], a
ldh a, [hBGMapMode]
push af
xor a
ldh [hBGMapMode], a
- call Function656b
+
+ call .ReanchorBGMap
+
pop af
ldh [hBGMapMode], a
pop af
ldh [hOAMUpdate], a
ret
-Function656b: ; 656b (1:656b)
+.ReanchorBGMap:
xor a
ldh [hLCDCPointer], a
ldh [hBGMapMode], a
@@ -25,18 +28,18 @@ Function656b: ; 656b (1:656b)
ld a, $90
ldh [hWY], a
call OverworldTextModeSwitch
- ld a, $9c
+ ld a, HIGH(vBGMap1)
call .LoadBGMapAddrIntoHRAM
call _OpenAndCloseMenu_HDMATransferTilemapAndAttrmap
xor a
ldh [hBGMapMode], a
ldh [hWY], a
- ld a, $98
+ ld a, HIGH(vBGMap0)
call .LoadBGMapAddrIntoHRAM
call .WaitTransfer
- xor a
+ xor a ; LOW(vBGMap0)
ld [wBGMapAnchor], a
- ld a, $98
+ ld a, HIGH(vBGMap0)
ld [wBGMapAnchor + 1], a
xor a
ldh [hSCX], a
@@ -44,22 +47,22 @@ Function656b: ; 656b (1:656b)
call ApplyBGMapAnchorToObjects
ret
-.LoadBGMapAddrIntoHRAM: ; 65a5 (1:65a5)
+.LoadBGMapAddrIntoHRAM:
ldh [hBGMapAddress + 1], a
xor a
ldh [hBGMapAddress], a
ret
-.WaitTransfer: ; 65ab (1:65ab)
+.WaitTransfer:
ldh a, [hBGMapMode]
push af
xor a
ldh [hBGMapMode], a
ldh a, [hOAMUpdate]
push af
- ld a, $1
+ ld a, 1
ldh [hOAMUpdate], a
- ld a, $3
+ ld a, 3
ldh [hFF9E], a
.asm_65bc
call DelayFrame
@@ -72,17 +75,19 @@ Function656b: ; 656b (1:656b)
ldh [hBGMapMode], a
ret
-LoadFonts_NoOAMUpdate:: ; 65cb (1:65cb)
+LoadFonts_NoOAMUpdate::
ldh a, [hOAMUpdate]
push af
ld a, $1
ldh [hOAMUpdate], a
+
call .LoadGFX
+
pop af
ldh [hOAMUpdate], a
ret
-.LoadGFX: ; 65d9 (1:65d9)
+.LoadGFX:
call LoadFontsExtra
ld a, $90
ldh [hWY], a
diff --git a/engine/overworld/map_objects.asm b/engine/overworld/map_objects.asm
index 25f3720f..a03a0171 100755
--- a/engine/overworld/map_objects.asm
+++ b/engine/overworld/map_objects.asm
@@ -2407,9 +2407,9 @@ RefreshPlayerSprite::
.TryResetPlayerAction:
ld hl, wPlayerSpriteSetupFlags
- bit 7, [hl]
+ bit PLAYERSPRITESETUP_RESET_ACTION_F, [hl]
jr nz, .ok
- bit 6, [hl]
+ bit PLAYERSPRITESETUP_SKIP_RELOAD_GFX_F, [hl]
jr nz, .ok
ret
diff --git a/engine/overworld/map_setup.asm b/engine/overworld/map_setup.asm
index cf1c7d03..aec3c949 100644
--- a/engine/overworld/map_setup.asm
+++ b/engine/overworld/map_setup.asm
@@ -235,9 +235,9 @@ ApplyMapPalettes:
ret
FadeMapMusicAndPalettes:
- ld e, 0
+ ld e, LOW(MUSIC_NONE)
ld a, [wMusicFadeID]
- ld d, 0
+ ld d, HIGH(MUSIC_NONE)
ld a, [wMusicFadeID + 1]
ld a, $4
ld [wMusicFade], a
diff --git a/engine/overworld/npc_movement.asm b/engine/overworld/npc_movement.asm
index c0b88a8b..3a196508 100755
--- a/engine/overworld/npc_movement.asm
+++ b/engine/overworld/npc_movement.asm
@@ -1,102 +1,110 @@
-CanObjectMoveInDirection: ; 6fa0 (1:6fa0)
- ld hl, $6
+CanObjectMoveInDirection:
+ ld hl, OBJECT_PALETTE
add hl, bc
- bit 5, [hl]
- jr z, .asm_6fb8
- ld hl, $4
+ bit SWIMMING_F, [hl]
+ jr z, .not_swimming
+
+ ld hl, OBJECT_FLAGS1
add hl, bc
- bit 4, [hl]
+ bit NOCLIP_TILES_F, [hl] ; lost, uncomment next line to fix
+ ; jr nz, .noclip_tiles
push hl
push bc
- call Function700b
+ call WillObjectBumpIntoLand
pop bc
pop hl
ret c
- jr .asm_6fc8
+ jr .continue
-.asm_6fb8
- ld hl, $4
+.not_swimming
+ ld hl, OBJECT_FLAGS1
add hl, bc
- bit 4, [hl]
- jr nz, .asm_6fc8
+ bit NOCLIP_TILES_F, [hl]
+ jr nz, .noclip_tiles
push hl
push bc
- call Function6fe6
+ call WillObjectBumpIntoWater
pop bc
pop hl
ret c
-.asm_6fc8
- bit 6, [hl]
- jr nz, .asm_6fd4
+
+.noclip_tiles
+.continue
+ bit NOCLIP_OBJS_F, [hl]
+ jr nz, .noclip_objs
+
push hl
push bc
- call WillPersonBumpIntoSomeoneElse
+ call WillObjectBumpIntoSomeoneElse
pop bc
pop hl
ret c
-.asm_6fd4
- bit 5, [hl]
- jr nz, .asm_6fe4
+
+.noclip_objs
+ bit MOVE_ANYWHERE_F, [hl]
+ jr nz, .move_anywhere
push hl
- call HasPersonReachedMovementLimit
+ call HasObjectReachedMovementLimit
pop hl
ret c
+
push hl
- call IsPersonMovingOffEdgeOfScreen
+ call IsObjectMovingOffEdgeOfScreen
pop hl
ret c
-.asm_6fe4
+
+.move_anywhere
and a
ret
-Function6fe6: ; 6fe6 (1:6fe6)
+WillObjectBumpIntoWater:
call Function703e
ret c
- ld hl, $10
+ ld hl, OBJECT_NEXT_MAP_X
add hl, bc
ld d, [hl]
- ld hl, $11
+ ld hl, OBJECT_NEXT_MAP_Y
add hl, bc
ld e, [hl]
- ld hl, $6
+ ld hl, OBJECT_PALETTE
add hl, bc
- bit 7, [hl]
+ bit OAM_PRIORITY, [hl]
jp nz, Function7080
- ld hl, $e
+ ld hl, OBJECT_NEXT_TILE
add hl, bc
ld a, [hl]
ld d, a
call GetTileCollision
- and a
- jr z, Function701d
+ and a ; LAND_TILE
+ jr z, WillObjectBumpIntoTile
scf
ret
-Function700b: ; 700b (1:700b)
+WillObjectBumpIntoLand:
call Function703e
ret c
- ld hl, $e
+ ld hl, OBJECT_NEXT_TILE
add hl, bc
ld a, [hl]
call GetTileCollision
- cp $1
- jr z, Function701d
+ cp WATER_TILE
+ jr z, WillObjectBumpIntoTile
scf
ret
-Function701d:
- ld hl, $e
+WillObjectBumpIntoTile:
+ ld hl, OBJECT_NEXT_TILE
add hl, bc
ld a, [hl]
call Function705e
ret nc
push af
- ld hl, $7
+ ld hl, OBJECT_DIRECTION_WALKING
add hl, bc
ld a, [hl]
- and $3
+ maskbits NUM_DIRECTIONS
ld e, a
- ld d, $0
+ ld d, 0
ld hl, .data_703a
add hl, de
pop af
@@ -106,20 +114,23 @@ Function701d:
ret
.data_703a
- db 1 << DOWN, 1 << UP, 1 << RIGHT, 1 << LEFT
+ db DOWN_MASK ; DOWN
+ db UP_MASK ; UP
+ db RIGHT_MASK ; LEFT
+ db LEFT_MASK ; RIGHT
-Function703e: ; 703e (1:703e)
- ld hl, $f
+Function703e:
+ ld hl, OBJECT_STANDING_TILE
add hl, bc
ld a, [hl]
call Function705e
ret nc
push af
- ld hl, $7
+ ld hl, OBJECT_DIRECTION_WALKING
add hl, bc
- and $3
+ maskbits NUM_DIRECTIONS
ld e, a
- ld d, $0
+ ld d, 0
ld hl, .data_705a
add hl, de
pop af
@@ -129,23 +140,26 @@ Function703e: ; 703e (1:703e)
ret
.data_705a
- db 1 << UP, 1 << DOWN, 1 << LEFT, 1 << RIGHT
+ db UP_MASK ; DOWN
+ db DOWN_MASK ; UP
+ db LEFT_MASK ; LEFT
+ db RIGHT_MASK ; RIGHT
-Function705e: ; 705e (1:705e)
+Function705e:
ld d, a
and $f0
- cp $b0
- jr z, .asm_706b
- cp $c0
- jr z, .asm_706b
+ cp HI_NYBBLE_SIDE_WALLS
+ jr z, .continue
+ cp HI_NYBBLE_SIDE_BUOYS
+ jr z, .continue
xor a
ret
-.asm_706b
+.continue
ld a, d
- and $7
+ and 7
ld e, a
- ld d, $0
+ ld d, 0
ld hl, .data_7078
add hl, de
ld a, [hl]
@@ -153,216 +167,234 @@ Function705e: ; 705e (1:705e)
ret
.data_7078
- db 8, 4, 1, 2
- db 10, 6, 9, 5
-
-Function7080: ; 7080 (1:7080)
- ld hl, $7
+ db RIGHT_MASK ; COLL_RIGHT_WALL/BUOY
+ db LEFT_MASK ; COLL_LEFT_WALL/BUOY
+ db DOWN_MASK ; COLL_UP_WALL/BUOY
+ db UP_MASK ; COLL_DOWN_WALL/BUOY
+ db UP_MASK | RIGHT_MASK ; COLL_DOWN_RIGHT_WALL/BUOY
+ db UP_MASK | LEFT_MASK ; COLL_DOWN_LEFT_WALL/BUOY
+ db DOWN_MASK | RIGHT_MASK ; COLL_UP_RIGHT_WALL/BUOY
+ db DOWN_MASK | LEFT_MASK ; COLL_UP_LEFT_WALL/BUOY
+
+Function7080:
+ ld hl, OBJECT_DIRECTION_WALKING
add hl, bc
ld a, [hl]
- and $3
- jr z, .asm_7091
+ maskbits NUM_DIRECTIONS
+ jr z, .down
dec a
- jr z, .asm_7096
+ jr z, .up
dec a
- jr z, .asm_709a
- jr .asm_709e
+ jr z, .left
+ jr .right
-.asm_7091
+.down
inc e
push de
inc d
- jr .asm_70a1
+ jr .continue
-.asm_7096
+.up
push de
inc d
- jr .asm_70a1
+ jr .continue
-.asm_709a
+.left
push de
inc e
- jr .asm_70a1
+ jr .continue
-.asm_709e
+.right
inc d
push de
inc e
-.asm_70a1
+
+.continue
call GetCoordTile
call GetTileCollision
pop de
- and a
- jr nz, .asm_70b6
+ and a ; LAND_TILE
+ jr nz, .not_land
call GetCoordTile
call GetTileCollision
- and a
- jr nz, .asm_70b6
+ and a ; LAND_TILE
+ jr nz, .not_land
xor a
ret
-.asm_70b6
+.not_land
scf
ret
CheckFacingObject::
call GetFacingTileCoord
+
+; Double the distance for counter tiles.
call CheckCounterTile
jr nz, .asm_70d0
+
ld a, [wPlayerStandingMapX]
sub d
cpl
inc a
add d
ld d, a
+
ld a, [wPlayerStandingMapY]
sub e
cpl
inc a
add e
ld e, a
+
.asm_70d0
- ld bc, wObjectStructs
- ld a, $0
+ ld bc, wObjectStructs ; redundant
+ ld a, 0
ldh [hMapObjectIndexBuffer], a
- call Function7120
+ call IsNPCAtCoord
ret nc
- ld hl, $7
+ ld hl, OBJECT_DIRECTION_WALKING
add hl, bc
ld a, [hl]
- cp $ff
- jr z, .asm_70e6
+ cp STANDING
+ jr z, .standing
xor a
ret
-.asm_70e6
+.standing
scf
ret
-WillPersonBumpIntoSomeoneElse: ; 70e8 (1:70e8)
- ld hl, $10
+WillObjectBumpIntoSomeoneElse:
+ ld hl, OBJECT_NEXT_MAP_X
add hl, bc
ld d, [hl]
- ld hl, $11
+ ld hl, OBJECT_NEXT_MAP_Y
add hl, bc
ld e, [hl]
- jr Function7120
+ jr IsNPCAtCoord
Function70f4:
ldh a, [hMapObjectIndexBuffer]
call GetObjectStruct
- call Function7100
- call Function7120
+ call .CheckWillBeFacingNPC
+ call IsNPCAtCoord
ret
-Function7100: ; 7100 (1:7100)
- ld hl, $10
+.CheckWillBeFacingNPC:
+ ld hl, OBJECT_NEXT_MAP_X
add hl, bc
ld d, [hl]
- ld hl, $11
+ ld hl, OBJECT_NEXT_MAP_Y
add hl, bc
ld e, [hl]
call GetSpriteDirection
and a
- jr z, .asm_711a
- cp $4
- jr z, .asm_711c
- cp $8
- jr z, .asm_711e
+ jr z, .down
+ cp OW_UP
+ jr z, .up
+ cp OW_LEFT
+ jr z, .left
inc d
ret
-.asm_711a
+.down
inc e
ret
-.asm_711c
+.up
dec e
ret
-.asm_711e
+.left
dec d
ret
-Function7120: ; 7120 (1:7120)
- ld bc, wPlayerStruct
+IsNPCAtCoord:
+ ld bc, wObjectStructs
xor a
-.asm_7124
+.loop
ldh [hObjectStructIndexBuffer], a
call DoesObjectHaveASprite
- jr z, .asm_7172
- ld hl, $4
+ jr z, .next
+
+ ld hl, OBJECT_FLAGS1
add hl, bc
bit 7, [hl]
- jr nz, .asm_7172
- ld hl, $6
+ jr nz, .next
+
+ ld hl, OBJECT_PALETTE
add hl, bc
- bit 7, [hl]
- jr z, .asm_7142
+ bit BIG_OBJECT_F, [hl]
+ jr z, .got
+
call Function7250
- jr nc, .asm_715a
- jr .asm_7152
+ jr nc, .ok
+ jr .ok2
-.asm_7142
- ld hl, $10
+.got
+ ld hl, OBJECT_NEXT_MAP_X
add hl, bc
ld a, [hl]
cp d
- jr nz, .asm_715a
- ld hl, $11
+ jr nz, .ok
+ ld hl, OBJECT_NEXT_MAP_Y
add hl, bc
ld a, [hl]
cp e
- jr nz, .asm_715a
-.asm_7152
+ jr nz, .ok
+
+.ok2
ldh a, [hMapObjectIndexBuffer]
ld l, a
- ldh a, [hConnectedMapWidth]
+ ldh a, [hObjectStructIndexBuffer]
cp l
- jr nz, .asm_7181
-.asm_715a
- ld hl, $12
+ jr nz, .setcarry
+
+.ok
+ ld hl, OBJECT_MAP_X
add hl, bc
ld a, [hl]
cp d
- jr nz, .asm_7172
- ld hl, $13
+ jr nz, .next
+ ld hl, OBJECT_MAP_Y
add hl, bc
ld a, [hl]
cp e
- jr nz, .asm_7172
- ldh a, [hConnectionStripLength]
+ jr nz, .next
+ ldh a, [hMapObjectIndexBuffer]
ld l, a
ldh a, [hObjectStructIndexBuffer]
cp l
- jr nz, .asm_7181
-.asm_7172
- ld hl, $28
+ jr nz, .setcarry
+
+.next
+ ld hl, OBJECT_LENGTH
add hl, bc
ld b, h
ld c, l
- ldh a, [hConnectedMapWidth]
+ ldh a, [hObjectStructIndexBuffer]
inc a
- cp $d
- jr nz, .asm_7124
+ cp NUM_OBJECT_STRUCTS
+ jr nz, .loop
and a
ret
-.asm_7181
+.setcarry
scf
ret
-HasPersonReachedMovementLimit: ; 7183 (1:7183)
- ld hl, $16
+HasObjectReachedMovementLimit:
+ ld hl, OBJECT_RADIUS
add hl, bc
ld a, [hl]
and a
- jr z, .asm_71c8
+ jr z, .nope
and $f
- jr z, .asm_71a6
+ jr z, .check_y
ld e, a
ld d, a
- ld hl, $14
+ ld hl, OBJECT_INIT_X
add hl, bc
ld a, [hl]
sub d
@@ -370,23 +402,24 @@ HasPersonReachedMovementLimit: ; 7183 (1:7183)
ld a, [hl]
add e
ld e, a
- ld hl, $10
+ ld hl, OBJECT_NEXT_MAP_X
add hl, bc
ld a, [hl]
cp d
- jr z, .asm_71ca
+ jr z, .yes
cp e
- jr z, .asm_71ca
-.asm_71a6
- ld hl, $16
+ jr z, .yes
+
+.check_y
+ ld hl, OBJECT_RADIUS
add hl, bc
ld a, [hl]
swap a
and $f
- jr z, .asm_71c8
+ jr z, .nope
ld e, a
ld d, a
- ld hl, $15
+ ld hl, OBJECT_INIT_Y
add hl, bc
ld a, [hl]
sub d
@@ -394,46 +427,49 @@ HasPersonReachedMovementLimit: ; 7183 (1:7183)
ld a, [hl]
add e
ld e, a
- ld hl, $11
+ ld hl, OBJECT_NEXT_MAP_Y
add hl, bc
ld a, [hl]
cp d
- jr z, .asm_71ca
+ jr z, .yes
cp e
- jr z, .asm_71ca
-.asm_71c8
+ jr z, .yes
+
+.nope
xor a
ret
-.asm_71ca
+.yes
scf
ret
-IsPersonMovingOffEdgeOfScreen: ; 71cc (1:71cc)
- ld hl, $10
+IsObjectMovingOffEdgeOfScreen:
+ ld hl, OBJECT_NEXT_MAP_X
add hl, bc
ld a, [wXCoord]
cp [hl]
- jr z, .asm_71dd
- jr nc, .asm_71f0
+ jr z, .check_y
+ jr nc, .yes
add $9
cp [hl]
- jr c, .asm_71f0
-.asm_71dd
- ld hl, $11
+ jr c, .yes
+
+.check_y
+ ld hl, OBJECT_NEXT_MAP_Y
add hl, bc
ld a, [wYCoord]
cp [hl]
- jr z, .asm_71ee
- jr nc, .asm_71f0
+ jr z, .nope
+ jr nc, .yes
add $8
cp [hl]
- jr c, .asm_71f0
-.asm_71ee
+ jr c, .yes
+
+.nope
and a
ret
-.asm_71f0
+.yes
scf
ret
@@ -444,82 +480,82 @@ Function71f2:
ld e, a
ld bc, wObjectStructs
xor a
-.asm_71fe
- ldh [hConnectedMapWidth], a
+.loop
+ ldh [hObjectStructIndexBuffer], a
call DoesObjectHaveASprite
- jr z, .asm_723f
- ld hl, $3
+ jr z, .next
+ ld hl, OBJECT_MOVEMENTTYPE
add hl, bc
ld a, [hl]
- cp $15
- jr nz, .asm_7215
+ cp SPRITEMOVEDATA_BIGDOLLSYM
+ jr nz, .not_snorlax
call Function7250
- jr c, .asm_724e
- jr .asm_723f
+ jr c, .yes
+ jr .next
-.asm_7215
- ld hl, $11
+.not_snorlax
+ ld hl, OBJECT_NEXT_MAP_Y
add hl, bc
ld a, [hl]
cp e
- jr nz, .asm_722d
- ld hl, $10
+ jr nz, .check_current_coords
+ ld hl, OBJECT_NEXT_MAP_X
add hl, bc
ld a, [hl]
cp d
- jr nz, .asm_722d
+ jr nz, .check_current_coords
ldh a, [hObjectStructIndexBuffer]
- cp $0
- jr z, .asm_723f
- jr .asm_724e
+ cp PLAYER_OBJECT
+ jr z, .next
+ jr .yes
-.asm_722d
- ld hl, $13
+.check_current_coords
+ ld hl, OBJECT_MAP_Y
add hl, bc
ld a, [hl]
cp e
- jr nz, .asm_723f
- ld hl, $12
+ jr nz, .next
+ ld hl, OBJECT_MAP_X
add hl, bc
ld a, [hl]
cp d
- jr nz, .asm_723f
- jr .asm_724e
+ jr nz, .next
+ jr .yes
-.asm_723f
- ld hl, $28
+.next
+ ld hl, OBJECT_LENGTH
add hl, bc
ld b, h
ld c, l
- ldh a, [hConnectedMapWidth]
+ ldh a, [hObjectStructIndexBuffer]
inc a
- cp $d
- jr nz, .asm_71fe
+ cp NUM_OBJECT_STRUCTS
+ jr nz, .loop
xor a
ret
-.asm_724e
+.yes
scf
ret
-Function7250: ; 7250 (1:7250)
- ld hl, $10
+Function7250:
+ ld hl, OBJECT_NEXT_MAP_X
add hl, bc
ld a, d
sub [hl]
- jr c, .asm_726a
+ jr c, .nope
cp $2
- jr nc, .asm_726a
- ld hl, $11
+ jr nc, .nope
+ ld hl, OBJECT_NEXT_MAP_Y
add hl, bc
ld a, e
sub [hl]
- jr c, .asm_726a
+ jr c, .nope
cp $2
- jr nc, .asm_726a
+ jr nc, .nope
scf
ret
-.asm_726a
+.nope
and a
ret
diff --git a/engine/overworld/player_movement.asm b/engine/overworld/player_movement.asm
index 21dd97ca..165a8479 100755
--- a/engine/overworld/player_movement.asm
+++ b/engine/overworld/player_movement.asm
@@ -1,421 +1,475 @@
-DoPlayerMovement:: ; 10000 (4:4000)
- call Function10017
+DoPlayerMovement::
+
+ call .GetDPad
ld a, movement_step_sleep
ld [wMovementAnimation], a
xor a
ld [wWalkingIntoEdgeWarp], a
- call Function1002d
+ call .TranslateIntoMovement
ld c, a
ld a, [wMovementAnimation]
ld [wPlayerNextMovement], a
ret
-Function10017: ; 10017 (4:4017)
+.GetDPad:
+
ldh a, [hJoyDown]
ld [wCurInput], a
- CheckFlagHL ENGINE_DOWNHILL
+
+; Standing downhill instead moves down.
+
+ ld hl, wBikeFlags
+ bit BIKEFLAGS_DOWNHILL_F, [hl]
ret z
+
ld c, a
- and $f0
+ and D_PAD
ret nz
+
ld a, c
- or $80
+ or D_DOWN
ld [wCurInput], a
ret
-Function1002d: ; 1002d (4:402d)
+.TranslateIntoMovement:
ld a, [wPlayerState]
cp PLAYER_NORMAL
- jr z, .asm_10044
+ jr z, .Normal
cp PLAYER_SURF
- jr z, .asm_10060
+ jr z, .Surf
cp PLAYER_SURF_PIKA
- jr z, .asm_10060
+ jr z, .Surf
cp PLAYER_BIKE
- jr z, .asm_10044
+ jr z, .Normal
cp PLAYER_SKATE
- jr z, .asm_10074
-.asm_10044
- call Function102cb
- call Function102ec
- call Function100b7
+ jr z, .Ice
+
+.Normal:
+ call .CheckForced
+ call .GetAction
+ call .CheckTile
ret c
- call Function10147
+ call .CheckTurning
ret c
- call Function1016b
+ call .TryStep
ret c
- call Function101f3
+ call .TryJump
ret c
- call Function10226
+ call .CheckWarp
ret c
- jr .asm_1009d
+ jr .NotMoving
-.asm_10060
- call Function102cb
- call Function102ec
- call Function100b7
+.Surf:
+ call .CheckForced
+ call .GetAction
+ call .CheckTile
ret c
- call Function10147
+ call .CheckTurning
ret c
- call Function101c0
+ call .TrySurf
ret c
- jr .asm_1009d
+ jr .NotMoving
-.asm_10074
- call Function102cb
- call Function102ec
- call Function100b7
+.Ice:
+ call .CheckForced
+ call .GetAction
+ call .CheckTile
ret c
- call Function10147
+ call .CheckTurning
ret c
- call Function1016b
+ call .TryStep
ret c
- call Function101f3
+ call .TryJump
ret c
- call Function10226
+ call .CheckWarp
ret c
ld a, [wWalkingDirection]
- cp $ff
- jr z, .asm_10098
- call Function103ee
-.asm_10098
- call Function102b3
+ cp STANDING
+ jr z, .HitWall
+ call .BumpSound
+.HitWall:
+ call .StandInPlace
xor a
ret
-.asm_1009d
+.NotMoving:
ld a, [wWalkingDirection]
- cp $ff
- jr z, .asm_100b2
+ cp STANDING
+ jr z, .Standing
+
+; Walking into an edge warp won't bump.
ld a, [wWalkingIntoEdgeWarp]
and a
- jr nz, .asm_100ad
- call Function103ee
-.asm_100ad
- call Function102bf
+ jr nz, .CantMove
+ call .BumpSound
+.CantMove:
+ call ._WalkInPlace
xor a
ret
-.asm_100b2
- call Function102b3
+.Standing:
+ call .StandInPlace
xor a
ret
-Function100b7: ; 100b7 (4:40b7)
+.CheckTile:
+; Tiles such as waterfalls and warps move the player
+; in a given direction, overriding input.
+
ld a, [wPlayerStandingTile]
ld c, a
call CheckWhirlpoolTile
- jr c, .asm_100c4
- ld a, $3
+ jr c, .not_whirlpool
+ ld a, PLAYERMOVEMENT_FORCE_TURN
scf
ret
-.asm_100c4
+.not_whirlpool
and $f0
- cp $30
- jr z, .asm_100d8
- cp $40
- jr z, .asm_100ec
- cp $50
- jr z, .asm_10108
- cp $70
- jr z, .asm_10124
- jr .asm_1013c
-
-.asm_100d8
+ cp HI_NYBBLE_CURRENT
+ jr z, .water
+ cp HI_NYBBLE_WALK
+ jr z, .land1
+ cp HI_NYBBLE_WALK_ALT
+ jr z, .land2
+ cp HI_NYBBLE_WARPS
+ jr z, .warps
+ jr .no_walk
+
+.water
ld a, c
- and $3
+ maskbits NUM_DIRECTIONS
ld c, a
- ld b, $0
+ ld b, 0
ld hl, .water_table
add hl, bc
ld a, [hl]
ld [wWalkingDirection], a
- jr .asm_1013e
+ jr .continue_walk
.water_table
- db RIGHT
- db LEFT
- db UP
- db DOWN
+ db RIGHT ; COLL_WATERFALL_RIGHT
+ db LEFT ; COLL_WATERFALL_LEFT
+ db UP ; COLL_WATERFALL_UP
+ db DOWN ; COLL_WATERFALL
-.asm_100ec
+.land1
ld a, c
- and $7
+ and 7
ld c, a
- ld b, $0
+ ld b, 0
ld hl, .land1_table
add hl, bc
ld a, [hl]
- cp $ff
- jr z, .asm_1013c
+ cp STANDING
+ jr z, .no_walk
ld [wWalkingDirection], a
- jr .asm_1013e
+ jr .continue_walk
.land1_table
- db STANDING
- db RIGHT
- db LEFT
- db UP
- db DOWN
- db STANDING
- db STANDING
- db STANDING
-
-.asm_10108
+ db STANDING ; COLL_BRAKE
+ db RIGHT ; COLL_WALK_RIGHT
+ db LEFT ; COLL_WALK_LEFT
+ db UP ; COLL_WALK_UP
+ db DOWN ; COLL_WALK_DOWN
+ db STANDING ; COLL_BRAKE_45
+ db STANDING ; COLL_BRAKE_46
+ db STANDING ; COLL_BRAKE_47
+
+.land2
ld a, c
- and $7
+ and 7
ld c, a
- ld b, $0
+ ld b, 0
ld hl, .land2_table
add hl, bc
ld a, [hl]
- cp $ff
- jr z, .asm_1013c
+ cp STANDING
+ jr z, .no_walk
ld [wWalkingDirection], a
- jr .asm_1013e
+ jr .continue_walk
.land2_table
- db RIGHT
- db LEFT
- db UP
- db DOWN
- db STANDING
- db STANDING
- db STANDING
- db STANDING
-
-.asm_10124
+ db RIGHT ; COLL_WALK_RIGHT_ALT
+ db LEFT ; COLL_WALK_LEFT_ALT
+ db UP ; COLL_WALK_UP_ALT
+ db DOWN ; COLL_WALK_DOWN_ALT
+ db STANDING ; COLL_BRAKE_ALT
+ db STANDING ; COLL_BRAKE_55
+ db STANDING ; COLL_BRAKE_56
+ db STANDING ; COLL_BRAKE_57
+
+.warps
ld a, c
- cp $71
- jr z, .asm_10135
- cp $79
- jr z, .asm_10135
- cp $7a
- jr z, .asm_10135
- cp $7b
- jr nz, .asm_1013c
-.asm_10135
- ld a, $0
+ cp COLL_DOOR
+ jr z, .down
+ cp COLL_DOOR_79
+ jr z, .down
+ cp COLL_STAIRCASE
+ jr z, .down
+ cp COLL_CAVE
+ jr nz, .no_walk
+
+.down
+ ld a, DOWN
ld [wWalkingDirection], a
- jr .asm_1013e
+ jr .continue_walk
-.asm_1013c
+.no_walk
xor a
ret
-.asm_1013e
- ld a, $1
- call Function1025f
- ld a, $5
+.continue_walk
+ ld a, STEP_WALK
+ call .DoStep
+ ld a, PLAYERMOVEMENT_CONTINUE
scf
ret
-Function10147: ; 10147 (4:4147)
+.CheckTurning:
+; If the player is turning, change direction first. This also lets
+; the player change facing without moving by tapping a direction.
+
ld a, [wPlayerTurningDirection]
- cp $0
- jr nz, .asm_10169
+ cp 0
+ jr nz, .not_turning
ld a, [wWalkingDirection]
- cp $ff
- jr z, .asm_10169
+ cp STANDING
+ jr z, .not_turning
+
ld e, a
ld a, [wPlayerDirection]
rrca
rrca
- and $3
+ maskbits NUM_DIRECTIONS
cp e
- jr z, .asm_10169
- ld a, $5
- call Function1025f
- ld a, $2
+ jr z, .not_turning
+
+ ld a, STEP_TURN
+ call .DoStep
+ ld a, PLAYERMOVEMENT_TURN
scf
ret
-.asm_10169
+.not_turning
xor a
ret
-Function1016b: ; 1016b (4:416b)
+.TryStep:
+; Surfing actually calls .TrySurf directly instead of passing through here.
ld a, [wPlayerState]
- cp $4
- jr z, Function101c0
- cp $8
- jr z, Function101c0
- call Function1039e
- jr c, .asm_101be
- call Function10341
+ cp PLAYER_SURF
+ jr z, .TrySurf
+ cp PLAYER_SURF_PIKA
+ jr z, .TrySurf
+
+ call .CheckLandPerms
+ jr c, .bump
+
+ call .CheckNPC
and a
- jr z, .asm_101be
- cp $2
- jr z, .asm_101be
+ jr z, .bump
+ cp 2
+ jr z, .bump
+
ld a, [wPlayerStandingTile]
call CheckIceTile
- jr nc, .asm_101b5
- call Function103ca
- jr nz, .asm_101ae
+ jr nc, .ice
+
+; Downhill riding is slower when not moving down.
+ call .BikeCheck
+ jr nz, .walk
+
ld hl, wBikeFlags
- bit 2, [hl]
- jr z, .asm_101a7
+ bit BIKEFLAGS_DOWNHILL_F, [hl]
+ jr z, .fast
+
ld a, [wWalkingDirection]
- cp $0
- jr z, .asm_101a7
- ld a, $1
- call Function1025f
+ cp DOWN
+ jr z, .fast
+
+ ld a, STEP_WALK
+ call .DoStep
scf
ret
-.asm_101a7
- ld a, $2
- call Function1025f
+.fast
+ ld a, STEP_BIKE
+ call .DoStep
scf
ret
-.asm_101ae
- ld a, $1
- call Function1025f
+.walk
+ ld a, STEP_WALK
+ call .DoStep
scf
ret
-.asm_101b5
- ld a, $4
- call Function1025f
+.ice
+ ld a, STEP_ICE
+ call .DoStep
scf
ret
+; unused
xor a
ret
-.asm_101be
+.bump
xor a
ret
-Function101c0: ; 101c0 (4:41c0)
- call Function103b4
+.TrySurf:
+ call .CheckSurfPerms
ld [wWalkingIntoLand], a
- jr c, .asm_101f1
- call Function10341
+ jr c, .surf_bump
+
+ call .CheckNPC
ld [wWalkingIntoNPC], a
and a
- jr z, .asm_101f1
- cp $2
- jr z, .asm_101f1
+ jr z, .surf_bump
+ cp 2
+ jr z, .surf_bump
+
ld a, [wWalkingIntoLand]
and a
- jr nz, .asm_101e2
- ld a, $1
- call Function1025f
+ jr nz, .ExitWater
+
+ ld a, STEP_WALK
+ call .DoStep
scf
ret
-.asm_101e2
- call Function103f9
+.ExitWater:
+ call .GetOutOfWater
call PlayMapMusic
- ld a, $1
- call Function1025f
- ld a, $6
+ ld a, STEP_WALK
+ call .DoStep
+ ld a, PLAYERMOVEMENT_EXIT_WATER
scf
ret
-.asm_101f1
+.surf_bump
xor a
ret
-Function101f3: ; 101f3 (4:41f3)
+.TryJump:
ld a, [wPlayerStandingTile]
ld e, a
and $f0
- cp $a0
- jr nz, .asm_1021c
+ cp HI_NYBBLE_LEDGES
+ jr nz, .DontJump
+
ld a, e
- and $7
+ and 7
ld e, a
- ld d, $0
+ ld d, 0
ld hl, .data_1021e
add hl, de
ld a, [wFacingDirection]
and [hl]
- jr z, .asm_1021c
- ld de, $16
+ jr z, .DontJump
+
+ ld de, SFX_JUMP_OVER_LEDGE
call PlaySFX
- ld a, $3
- call Function1025f
- ld a, $7
+ ld a, STEP_LEDGE
+ call .DoStep
+ ld a, PLAYERMOVEMENT_JUMP
scf
ret
-.asm_1021c
+.DontJump:
xor a
ret
.data_1021e
- db FACE_RIGHT
- db FACE_LEFT
- db FACE_UP
- db FACE_DOWN
- db FACE_RIGHT | FACE_DOWN
- db FACE_DOWN | FACE_LEFT
- db FACE_UP | FACE_RIGHT
- db FACE_UP | FACE_LEFT
-
-Function10226: ; 10226 (4:4226)
+ db FACE_RIGHT ; COLL_HOP_RIGHT
+ db FACE_LEFT ; COLL_HOP_LEFT
+ db FACE_UP ; COLL_HOP_UP
+ db FACE_DOWN ; COLL_HOP_DOWN
+ db FACE_RIGHT | FACE_DOWN ; COLL_HOP_DOWN_RIGHT
+ db FACE_DOWN | FACE_LEFT ; COLL_HOP_DOWN_LEFT
+ db FACE_UP | FACE_RIGHT ; COLL_HOP_UP_RIGHT
+ db FACE_UP | FACE_LEFT ; COLL_HOP_UP_LEFT
+
+.CheckWarp:
+; Bug: Since no case is made for STANDING here, it will check
+; [.edgewarps + $ff]. This resolves to $3e at $8035a.
+; This causes wWalkingIntoEdgeWarp to be nonzero when standing on tile $3e,
+; making bumps silent.
+
ld a, [wWalkingDirection]
+ ; cp STANDING
+ ; jr z, .not_warp
ld e, a
- ld d, $0
- ld hl, .edge_warps
+ ld d, 0
+ ld hl, .EdgeWarps
add hl, de
ld a, [wPlayerStandingTile]
cp [hl]
- jr nz, .asm_10259
- ld a, $1
+ jr nz, .not_warp
+
+ ld a, TRUE
ld [wWalkingIntoEdgeWarp], a
ld a, [wWalkingDirection]
- cp $ff
- jr z, .asm_10259
+ ; This is in the wrong place.
+ cp STANDING
+ jr z, .not_warp
+
ld e, a
ld a, [wPlayerDirection]
rrca
rrca
- and $3
+ maskbits NUM_DIRECTIONS
cp e
- jr nz, .asm_10259
+ jr nz, .not_warp
call WarpCheck
- jr nc, .asm_10259
- call Function102b3
+ jr nc, .not_warp
+
+ call .StandInPlace
scf
- ld a, $1
+ ld a, PLAYERMOVEMENT_WARP
ret
-.asm_10259
- xor a
+.not_warp
+ xor a ; PLAYERMOVEMENT_NORMAL
ret
-.edge_warps
- db $70, $78, $76, $7e
+.EdgeWarps:
+ db COLL_WARP_CARPET_DOWN
+ db COLL_WARP_CARPET_UP
+ db COLL_WARP_CARPET_LEFT
+ db COLL_WARP_CARPET_RIGHT
-Function1025f: ; 1025f (4:425f)
+.DoStep:
ld e, a
- ld d, $0
+ ld d, 0
ld hl, .Steps
add hl, de
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
+
ld a, [wWalkingDirection]
ld e, a
- cp $ff
- jp z, Function102b3
+ cp STANDING
+ jp z, .StandInPlace
+
add hl, de
ld a, [hl]
ld [wMovementAnimation], a
- ld hl, $42af
+
+ ld hl, .FinishFacing
add hl, de
ld a, [hl]
ld [wPlayerTurningDirection], a
- ld a, $4
+
+ ld a, PLAYERMOVEMENT_FINISH
ret
.Steps:
+; entries correspond to STEP_* constants
dw .SlowStep
dw .NormalStep
dw .FastStep
@@ -461,41 +515,44 @@ Function1025f: ; 1025f (4:425f)
turn_step LEFT
turn_step RIGHT
.FinishFacing:
- db $80 + DOWN
- db $80 + UP
- db $80 + LEFT
- db $80 + RIGHT
+ db $80 | DOWN
+ db $80 | UP
+ db $80 | LEFT
+ db $80 | RIGHT
-Function102b3: ; 102b3 (4:42b3)
- ld a, $0
+.StandInPlace:
+ ld a, 0
ld [wPlayerTurningDirection], a
- ld a, $3e
+ ld a, movement_step_sleep
ld [wMovementAnimation], a
xor a
ret
-Function102bf: ; 102bf (4:42bf)
- ld a, $0
+._WalkInPlace:
+ ld a, 0
ld [wPlayerTurningDirection], a
- ld a, $50
+ ld a, movement_step_bump
ld [wMovementAnimation], a
xor a
ret
-Function102cb: ; 102cb (4:42cb)
+.CheckForced:
+; When sliding on ice, input is forced to remain in the same direction.
+
call CheckStandingOnIce
ret nc
+
ld a, [wPlayerTurningDirection]
-.asm_102d2
- cp $0
+ cp 0
ret z
- and $3
+
+ maskbits NUM_DIRECTIONS
ld e, a
- ld d, $0
+ ld d, 0
ld hl, .forced_dpad
add hl, de
ld a, [wCurInput]
- and $f
+ and BUTTONS
or [hl]
ld [wCurInput], a
ret
@@ -503,30 +560,29 @@ Function102cb: ; 102cb (4:42cb)
.forced_dpad
db D_DOWN, D_UP, D_LEFT, D_RIGHT
-Function102ec: ; 102ec (4:42ec)
- ld hl, .table
- ld de, .table2 - .table1
+.GetAction:
+; Poll player input and update movement info.
+
+ ld hl, .action_table
+ ld de, .action_table_1_end - .action_table_1
ld a, [wCurInput]
- bit 7, a
- jr nz, .asm_10307
- bit 6, a
- jr nz, .asm_10308
-.asm_102fc
- bit 5, a
- jr nz, .asm_10309
- bit 4, a
- jr nz, .asm_1030a
- jr .asm_1030b
-
-.asm_10307
- add hl, de
-.asm_10308
- add hl, de
-.asm_10309
- add hl, de
-.asm_1030a
- add hl, de
-.asm_1030b
+ bit D_DOWN_F, a
+ jr nz, .d_down
+ bit D_UP_F, a
+ jr nz, .d_up
+ bit D_LEFT_F, a
+ jr nz, .d_left
+ bit D_RIGHT_F, a
+ jr nz, .d_right
+; Standing
+ jr .update
+
+.d_down add hl, de
+.d_up add hl, de
+.d_left add hl, de
+.d_right add hl, de
+
+.update
ld a, [hli]
ld [wWalkingDirection], a
ld a, [hli]
@@ -539,197 +595,224 @@ Function102ec: ; 102ec (4:42ec)
ld h, [hl]
ld l, a
ld a, [hl]
- ld [wWinTextPointer], a
- ret
-
-.table
-; struct:
-; walk direction
-; facing
-; x movement
-; y movement
-; tile collision pointer
-.table1
- db STANDING, FACE_CURRENT, 0, 0
- dw wPlayerStandingTile
-.table2
- db RIGHT, FACE_RIGHT, 1, 0
- dw wTileRight
- db LEFT, FACE_LEFT, -1, 0
- dw wTileLeft
- db UP, FACE_UP, 0, -1
- dw wTileUp
- db DOWN, FACE_DOWN, 0, 1
- dw wTileDown
-
-Function10341: ; 10341 (4:4341)
+ ld [wWalkingTile], a
+ ret
+
+player_action: MACRO
+; walk direction, facing, x movement, y movement, tile collision pointer
+ db \1, \2, \3, \4
+ dw \5
+ENDM
+
+.action_table:
+.action_table_1
+ player_action STANDING, FACE_CURRENT, 0, 0, wPlayerStandingTile
+.action_table_1_end
+ player_action RIGHT, FACE_RIGHT, 1, 0, wTileRight
+ player_action LEFT, FACE_LEFT, -1, 0, wTileLeft
+ player_action UP, FACE_UP, 0, -1, wTileUp
+ player_action DOWN, FACE_DOWN, 0, 1, wTileDown
+
+.CheckNPC:
+; Returns 0 if there is an NPC in front that you can't move
+; Returns 1 if there is no NPC in front
+; Returns 2 if there is a movable NPC in front
ld a, 0
ldh [hMapObjectIndexBuffer], a
+; Load the next X coordinate into d
ld a, [wPlayerStandingMapX]
ld d, a
ld a, [wWalkingX]
add d
ld d, a
+; Load the next Y coordinate into e
ld a, [wPlayerStandingMapY]
ld e, a
ld a, [wWalkingY]
add e
ld e, a
- ld bc, wPlayerSprite
- farcall Function7120
- jr nc, .asm_10369
- call Function1036f
- jr c, .asm_1036c
+; Find an object struct with coordinates equal to d,e
+ ld bc, wObjectStructs ; redundant
+ farcall IsNPCAtCoord
+ jr nc, .is_npc
+ call .CheckStrengthBoulder
+ jr c, .no_bump
+
xor a
ret
-.asm_10369
- ld a, $1
+.is_npc
+ ld a, 1
ret
-.asm_1036c
- ld a, $2
+.no_bump
+ ld a, 2
ret
-Function1036f: ; 1036f (4:436f)
+.CheckStrengthBoulder:
ld hl, wBikeFlags
- bit 0, [hl]
- jr z, .asm_1039c
- ld hl, $7
+ bit BIKEFLAGS_STRENGTH_ACTIVE_F, [hl]
+ jr z, .not_boulder
+
+ ld hl, OBJECT_DIRECTION_WALKING
add hl, bc
ld a, [hl]
- cp $ff
- jr nz, .asm_1039c
- ld hl, $6
+ cp STANDING
+ jr nz, .not_boulder
+
+ ld hl, OBJECT_PALETTE
add hl, bc
- bit 6, [hl]
- jr z, .asm_1039c
- ld hl, $5
+ bit STRENGTH_BOULDER_F, [hl]
+ jr z, .not_boulder
+
+ ld hl, OBJECT_FLAGS2
add hl, bc
set 2, [hl]
+
ld a, [wWalkingDirection]
ld d, a
- ld hl, $20
+ ld hl, OBJECT_RANGE
add hl, bc
ld a, [hl]
- and $fc
+ and %11111100
or d
ld [hl], a
+
scf
ret
-.asm_1039c
+.not_boulder
xor a
ret
-Function1039e: ; 1039e (4:439e)
+.CheckLandPerms:
+; Return 0 if walking onto land and tile permissions allow it.
+; Otherwise, return carry.
+
ld a, [wTilePermissions]
ld d, a
ld a, [wFacingDirection]
and d
- jr nz, .asm_103b2
- ld a, [wWinTextPointer]
- call Function103d3
- jr c, .asm_103b2
+ jr nz, .NotWalkable
+
+ ld a, [wWalkingTile]
+ call .CheckWalkable
+ jr c, .NotWalkable
+
xor a
ret
-.asm_103b2
+.NotWalkable:
scf
ret
-Function103b4: ; 103b4 (4:43b4)
+.CheckSurfPerms:
+; Return 0 if moving in water, or 1 if moving onto land.
+; Otherwise, return carry.
+
ld a, [wTilePermissions]
ld d, a
ld a, [wFacingDirection]
and d
- jr nz, .asm_103c8
- ld a, [wWinTextPointer]
- call Function103da
- jr c, .asm_103c8
+ jr nz, .NotSurfable
+
+ ld a, [wWalkingTile]
+ call .CheckSurfable
+ jr c, .NotSurfable
+
and a
ret
-.asm_103c8
+.NotSurfable:
scf
ret
-Function103ca: ; 103ca (4:43ca)
+.BikeCheck:
ld a, [wPlayerState]
- cp $1
+ cp PLAYER_BIKE
ret z
- cp $2
+ cp PLAYER_SKATE
ret
-Function103d3: ; 103d3 (4:43d3)
+.CheckWalkable:
+; Return 0 if tile a is land. Otherwise, return carry.
+
call GetTileCollision
- and a
+ and a ; LAND_TILE
ret z
scf
ret
-Function103da: ; 103da (4:43da)
+.CheckSurfable:
+; Return 0 if tile a is water, or 1 if land.
+; Otherwise, return carry.
+
call GetTileCollision
- cp $1
- jr z, .asm_103e6
- and a
- jr z, .asm_103e8
- jr .asm_103ec
+ cp WATER_TILE
+ jr z, .Water
+
+; Can walk back onto land from water.
+ and a ; LAND_TILE
+ jr z, .Land
-.asm_103e6
+ jr .Neither
+
+.Water:
xor a
ret
-.asm_103e8
- ld a, $1
+.Land:
+ ld a, 1
and a
ret
-.asm_103ec
+.Neither:
scf
ret
-Function103ee: ; 103ee (4:43ee)
+.BumpSound:
call CheckSFX
ret c
- ld de, $24
+ ld de, SFX_BUMP
call PlaySFX
ret
-Function103f9: ; 103f9 (4:43f9)
+.GetOutOfWater:
push bc
- ld a, $0
+ ld a, PLAYER_NORMAL
ld [wPlayerState], a
- call ReplaceChrisSprite
+ call ReplaceChrisSprite ; UpdateSprites
pop bc
ret
CheckStandingOnIce::
ld a, [wPlayerTurningDirection]
- cp $0
- jr z, .asm_10420
+ cp 0
+ jr z, .not_ice
cp $f0
- jr z, .asm_10420
+ jr z, .not_ice
ld a, [wPlayerStandingTile]
call CheckIceTile
- jr nc, .asm_1041e
+ jr nc, .yep
ld a, [wPlayerState]
- cp $2
- jr nz, .asm_10420
-.asm_1041e
+ cp PLAYER_SKATE
+ jr nz, .not_ice
+
+.yep
scf
ret
-.asm_10420
+.not_ice
and a
ret
StopPlayerForEvent::
ld hl, wPlayerNextMovement
- ld a, $3e
+ ld a, movement_step_sleep
cp [hl]
ret z
+
ld [hl], a
- ld a, $0
+ ld a, 0
ld [wPlayerTurningDirection], a
ret
diff --git a/engine/overworld/player_object.asm b/engine/overworld/player_object.asm
index 627e3d3f..28323eba 100755
--- a/engine/overworld/player_object.asm
+++ b/engine/overworld/player_object.asm
@@ -5,38 +5,38 @@ BlankScreen:
call ClearBGPalettes
call ClearSprites
hlcoord 0, 0
- ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
+ ld bc, wTilemapEnd - wTilemap
ld a, " "
call ByteFill
- ld hl, wAttrmap
- ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
+ hlcoord 0, 0, wAttrmap
+ ld bc, wAttrmapEnd - wAttrmap
ld a, $7
call ByteFill
call WaitBGMap2
call SetPalettes
ret
-SpawnPlayer: ; 861a (2:461a)
- ld a, $ff
+SpawnPlayer:
+ ld a, -1
ld [wObjectFollow_Leader], a
ld [wObjectFollow_Follower], a
- ld a, $0
- ld hl, .PlayerObjectTemplate
+ ld a, PLAYER
+ ld hl, PlayerObjectTemplate
call CopyPlayerObjectTemplate
- ld b, $0
+ ld b, PLAYER
call PlayerSpawn_ConvertCoords
- ld a, $0
+ ld a, PLAYER_OBJECT
ldh [hObjectStructIndexBuffer], a
ld de, wObjectStructs
- ld a, $0
+ ld a, PLAYER_OBJECT
ldh [hMapObjectIndexBuffer], a
ld bc, wMapObjects
call CopyMapObjectToObjectStruct
- ld a, $0
+ ld a, PLAYER
ld [wCenteredObject], a
ret
-.PlayerObjectTemplate
+PlayerObjectTemplate:
; A dummy map object used to initialize the player object.
; Shorter than the actual amount copied by two bytes.
; Said bytes seem to be unused.
@@ -47,10 +47,10 @@ CopyDECoordsToMapObject::
ld a, b
call GetMapObject
pop de
- ld hl, $3
+ ld hl, MAPOBJECT_X_COORD
add hl, bc
ld [hl], d
- ld hl, $2
+ ld hl, MAPOBJECT_Y_COORD
add hl, bc
ld [hl], e
ret
@@ -58,10 +58,10 @@ CopyDECoordsToMapObject::
PlayerSpawn_ConvertCoords:
push bc
ld a, [wXCoord]
- add $4
+ add 4
ld d, a
ld a, [wYCoord]
- add $4
+ add 4
ld e, a
pop bc
call CopyDECoordsToMapObject
@@ -71,13 +71,14 @@ WriteObjectXY::
ld a, b
call CheckObjectVisibility
ret c
- ld hl, $10
+
+ ld hl, OBJECT_NEXT_MAP_X
add hl, bc
ld d, [hl]
- ld hl, $11
+ ld hl, OBJECT_NEXT_MAP_Y
add hl, bc
ld e, [hl]
- ldh a, [hConnectionStripLength]
+ ldh a, [hMapObjectIndexBuffer]
ld b, a
call CopyDECoordsToMapObject
and a
@@ -85,23 +86,23 @@ WriteObjectXY::
RefreshPlayerCoords:
ld a, [wXCoord]
- add $4
+ add 4
ld d, a
ld hl, wPlayerStandingMapX
sub [hl]
ld [hl], d
- ld hl, wPlayerObjectXCoord
+ ld hl, wMapObjects + MAPOBJECT_X_COORD
ld [hl], d
ld hl, wPlayerLastMapX
ld [hl], d
ld d, a
ld a, [wYCoord]
- add $4
+ add 4
ld e, a
ld hl, wPlayerStandingMapY
sub [hl]
ld [hl], e
- ld hl, wPlayerObjectYCoord
+ ld hl, wMapObjects + MAPOBJECT_Y_COORD
ld [hl], e
ld hl, wPlayerLastMapY
ld [hl], e
@@ -112,340 +113,375 @@ RefreshPlayerCoords:
ret
SpawnPlayer2:
- ld a, $1
+ ld a, 1
ld hl, .PlayerObjectTemplate
call CopyPlayerObjectTemplate
- ld b, $1
+ ld b, 1
call PlayerSpawn_ConvertCoords
ret
.PlayerObjectTemplate:
object_event -4, -4, SPRITE_CHRIS, SPRITEMOVEDATA_12, 15, 15, -1, -1, 0, OBJECTTYPE_SCRIPT, 0, 0, -1
-CopyObjectStruct:: ; 86d7 (2:46d7)
+CopyObjectStruct::
call CheckObjectMask
and a
- ret nz
- ld hl, wPlayerStructEnd
- ld a, $1
- ld de, $28
-.asm_86e4
+ ret nz ; masked
+
+ ld hl, wObjectStructs + OBJECT_LENGTH * 1
+ ld a, 1
+ ld de, OBJECT_LENGTH
+.loop
ldh [hObjectStructIndexBuffer], a
ld a, [hl]
and a
- jr z, .asm_86f4
+ jr z, .done
add hl, de
- ldh a, [hConnectedMapWidth]
+ ldh a, [hObjectStructIndexBuffer]
inc a
- cp $d
- jr nz, .asm_86e4
+ cp NUM_OBJECT_STRUCTS
+ jr nz, .loop
scf
- ret
+ ret ; overflow
-.asm_86f4
+.done
ld d, h
ld e, l
call CopyMapObjectToObjectStruct
ld a, [wVramState]
bit 7, a
ret z
- ld hl, $5
+
+ ld hl, OBJECT_FLAGS2
add hl, de
set 5, [hl]
ret
-CopyMapObjectToObjectStruct: ; 8706 (2:4706)
- call CopyMapObjectToTempObject
+CopyMapObjectToObjectStruct:
+ call .CopyMapObjectToTempObject
call CopyTempObjectToObjectStruct
ret
-CopyMapObjectToTempObject: ; 870d (2:470d)
- ldh a, [hConnectedMapWidth]
- ld hl, $0
+.CopyMapObjectToTempObject:
+ ldh a, [hObjectStructIndexBuffer]
+ ld hl, MAPOBJECT_OBJECT_STRUCT_ID
add hl, bc
ld [hl], a
+
ldh a, [hMapObjectIndexBuffer]
ld [wTempObjectCopyMapObjectIndex], a
- ld hl, $1
+
+ ld hl, MAPOBJECT_SPRITE
add hl, bc
ld a, [hl]
- ld [wce9a], a
+ ld [wTempObjectCopySprite], a
+
call GetSpriteVTile
- ld [wce9b], a
+ ld [wTempObjectCopySpriteVTile], a
+
ld a, [hl]
call GetSpritePalette
- ld [wce9c], a
- ld hl, $8
+ ld [wTempObjectCopyPalette], a
+
+ ld hl, MAPOBJECT_COLOR
add hl, bc
ld a, [hl]
and $f0
- jr z, .asm_873e
+ jr z, .skip_color_override
swap a
- and $7
- ld [wce9c], a
-.asm_873e
- ld hl, $4
+ and PALETTE_MASK
+ ld [wTempObjectCopyPalette], a
+
+.skip_color_override
+ ld hl, MAPOBJECT_MOVEMENT
add hl, bc
ld a, [hl]
- ld [wce9d], a
- ld hl, $9
+ ld [wTempObjectCopyMovement], a
+
+ ld hl, MAPOBJECT_RANGE
add hl, bc
ld a, [hl]
ld [wTempObjectCopyRange], a
- ld hl, $3
+
+ ld hl, MAPOBJECT_X_COORD
add hl, bc
ld a, [hl]
- ld [wce9f], a
- ld hl, $2
+ ld [wTempObjectCopyX], a
+
+ ld hl, MAPOBJECT_Y_COORD
add hl, bc
ld a, [hl]
- ld [wcea0], a
- ld hl, $5
+ ld [wTempObjectCopyY], a
+
+ ld hl, MAPOBJECT_RADIUS
add hl, bc
ld a, [hl]
- ld [wcea1], a
+ ld [wTempObjectCopyRadius], a
ret
InitializeVisibleSprites:
ld bc, wMap2Object
- ld a, $2
-.asm_876c
- ldh [hConnectionStripLength], a
- ld hl, $1
+ ld a, 2
+.loop
+ ldh [hMapObjectIndexBuffer], a
+ ld hl, MAPOBJECT_SPRITE
add hl, bc
ld a, [hl]
and a
- jr z, .asm_87ab
- ld hl, $0
+ jr z, .next
+
+ ld hl, MAPOBJECT_OBJECT_STRUCT_ID
add hl, bc
ld a, [hl]
- cp $ff
- jr nz, .asm_87ab
+ cp -1
+ jr nz, .next
+
ld a, [wXCoord]
ld d, a
ld a, [wYCoord]
ld e, a
- ld hl, $3
+
+ ld hl, MAPOBJECT_X_COORD
add hl, bc
ld a, [hl]
- add $1
+ add 1
sub d
- jr c, .asm_87ab
- cp $c
- jr nc, .asm_87ab
- ld hl, $2
+ jr c, .next
+
+ cp MAPOBJECT_SCREEN_WIDTH
+ jr nc, .next
+
+ ld hl, MAPOBJECT_Y_COORD
add hl, bc
ld a, [hl]
- add $1
+ add 1
sub e
- jr c, .asm_87ab
- cp $b
- jr nc, .asm_87ab
+ jr c, .next
+
+ cp MAPOBJECT_SCREEN_HEIGHT
+ jr nc, .next
+
push bc
call CopyObjectStruct
pop bc
- jp c, Function87b9
-.asm_87ab
- ld hl, $10
+ jp c, .ret
+
+.next
+ ld hl, MAPOBJECT_LENGTH
add hl, bc
ld b, h
ld c, l
ldh a, [hMapObjectIndexBuffer]
inc a
- cp $10
- jr nz, .asm_876c
+ cp NUM_OBJECTS
+ jr nz, .loop
ret
-Function87b9: ; 87b9 (2:47b9)
+.ret
ret
CheckObjectEnteringVisibleRange::
nop
ld a, [wPlayerStepDirection]
- cp $ff
+ cp STANDING
ret z
- ld hl, .Jumptable
+ ld hl, .dw
rst JumpTable
ret
-.Jumptable:
- dw Function87d5
- dw Function87ce
- dw Function8822
- dw Function8829
+.dw
+ dw .Down
+ dw .Up
+ dw .Left
+ dw .Right
-Function87ce:
+.Up:
ld a, [wYCoord]
- sub $1
- jr asm_87da
+ sub 1
+ jr .Vertical
-Function87d5:
+.Down:
ld a, [wYCoord]
- add $9
-asm_87da:
+ add 9
+.Vertical:
ld d, a
ld a, [wXCoord]
ld e, a
ld bc, wMap2Object
- ld a, $2
-.asm_87e4
- ldh [hConnectionStripLength], a
- ld hl, $1
+ ld a, 2
+.loop_v
+ ldh [hMapObjectIndexBuffer], a
+ ld hl, MAPOBJECT_SPRITE
add hl, bc
ld a, [hl]
and a
- jr z, .asm_8814
- ld hl, $2
+ jr z, .next_v
+ ld hl, MAPOBJECT_Y_COORD
add hl, bc
ld a, d
cp [hl]
- jr nz, .asm_8814
- ld hl, $0
+ jr nz, .next_v
+ ld hl, MAPOBJECT_OBJECT_STRUCT_ID
add hl, bc
ld a, [hl]
- cp $ff
- jr nz, .asm_8814
- ld hl, $3
+ cp -1
+ jr nz, .next_v
+ ld hl, MAPOBJECT_X_COORD
add hl, bc
ld a, [hl]
- add $1
+ add 1
sub e
- jr c, .asm_8814
- cp $c
- jr nc, .asm_8814
+ jr c, .next_v
+ cp MAPOBJECT_SCREEN_WIDTH
+ jr nc, .next_v
push de
push bc
call CopyObjectStruct
pop bc
pop de
-.asm_8814
- ld hl, $10
+
+.next_v
+ ld hl, MAPOBJECT_LENGTH
add hl, bc
ld b, h
ld c, l
ldh a, [hMapObjectIndexBuffer]
inc a
- cp $10
- jr nz, .asm_87e4
+ cp NUM_OBJECTS
+ jr nz, .loop_v
ret
-Function8822:
+.Left:
ld a, [wXCoord]
- sub $1
- jr asm_882e
+ sub 1
+ jr .Horizontal
-Function8829:
+.Right:
ld a, [wXCoord]
- add $a
-asm_882e:
+ add 10
+.Horizontal:
ld e, a
ld a, [wYCoord]
ld d, a
ld bc, wMap2Object
- ld a, $2
-.asm_8838
- ldh [hConnectionStripLength], a
- ld hl, $1
+ ld a, 2
+.loop_h
+ ldh [hMapObjectIndexBuffer], a
+ ld hl, MAPOBJECT_SPRITE
add hl, bc
ld a, [hl]
and a
- jr z, .asm_8868
- ld hl, $3
+ jr z, .next_h
+ ld hl, MAPOBJECT_X_COORD
add hl, bc
ld a, e
cp [hl]
- jr nz, .asm_8868
- ld hl, $0
+ jr nz, .next_h
+ ld hl, MAPOBJECT_OBJECT_STRUCT_ID
add hl, bc
ld a, [hl]
- cp $ff
- jr nz, .asm_8868
- ld hl, $2
+ cp -1
+ jr nz, .next_h
+ ld hl, MAPOBJECT_Y_COORD
add hl, bc
ld a, [hl]
- add $1
+ add 1
sub d
- jr c, .asm_8868
- cp $b
- jr nc, .asm_8868
+ jr c, .next_h
+ cp MAPOBJECT_SCREEN_HEIGHT
+ jr nc, .next_h
push de
push bc
call CopyObjectStruct
pop bc
pop de
-.asm_8868
- ld hl, $10
+
+.next_h
+ ld hl, MAPOBJECT_LENGTH
add hl, bc
ld b, h
ld c, l
- ldh a, [hConnectionStripLength]
+ ldh a, [hMapObjectIndexBuffer]
inc a
- cp $10
- jr nz, .asm_8838
+ cp NUM_OBJECTS
+ jr nz, .loop_h
ret
-CopyTempObjectToObjectStruct: ; 8876 (2:4876)
+CopyTempObjectToObjectStruct:
ld a, [wTempObjectCopyMapObjectIndex]
- ld hl, $1
+ ld hl, OBJECT_MAP_OBJECT_INDEX
add hl, de
ld [hl], a
- ld a, [wce9d]
+
+ ld a, [wTempObjectCopyMovement]
call CopySpriteMovementData
- ld a, [wce9c]
- ld hl, $6
+
+ ld a, [wTempObjectCopyPalette]
+ ld hl, OBJECT_PALETTE
add hl, de
or [hl]
ld [hl], a
- ld a, [wcea0]
- call InitTempObjectYCoord
- ld a, [wce9f]
- call InitTempObjectXCoord
- ld a, [wce9a]
- ld hl, $0
+
+ ld a, [wTempObjectCopyY]
+ call .InitYCoord
+
+ ld a, [wTempObjectCopyX]
+ call .InitXCoord
+
+ ld a, [wTempObjectCopySprite]
+ ld hl, OBJECT_SPRITE
add hl, de
ld [hl], a
- ld a, [wce9b]
- ld hl, $2
+
+ ld a, [wTempObjectCopySpriteVTile]
+ ld hl, OBJECT_SPRITE_TILE
add hl, de
ld [hl], a
- ld hl, $9
+
+ ld hl, OBJECT_STEP_TYPE
add hl, de
- ld [hl], $0
- ld hl, $d
+ ld [hl], STEP_TYPE_00
+
+ ld hl, OBJECT_FACING_STEP
add hl, de
- ld [hl], $ff
- ld a, [wcea1]
- call InitTempObjectRadius
+ ld [hl], STANDING
+
+ ld a, [wTempObjectCopyRadius]
+ call .InitRadius
+
ld a, [wTempObjectCopyRange]
- ld hl, $20
+ ld hl, OBJECT_RANGE
add hl, de
ld [hl], a
+
and a
ret
-InitTempObjectYCoord: ; 88c5 (2:48c5)
- ld hl, $15
+.InitYCoord:
+ ld hl, OBJECT_INIT_Y
add hl, de
ld [hl], a
- ld hl, $11
+
+ ld hl, OBJECT_NEXT_MAP_Y
add hl, de
ld [hl], a
+
ld hl, wYCoord
sub [hl]
and $f
swap a
ld hl, wPlayerBGMapOffsetY
sub [hl]
- ld hl, $18
+ ld hl, OBJECT_SPRITE_Y
add hl, de
ld [hl], a
ret
-InitTempObjectXCoord: ; 88e1 (2:48e1)
- ld hl, $14
+.InitXCoord:
+ ld hl, OBJECT_INIT_X
add hl, de
ld [hl], a
- ld hl, $10
+ ld hl, OBJECT_NEXT_MAP_X
add hl, de
ld [hl], a
ld hl, wXCoord
@@ -454,12 +490,12 @@ InitTempObjectXCoord: ; 88e1 (2:48e1)
swap a
ld hl, wPlayerBGMapOffsetX
sub [hl]
- ld hl, $17
+ ld hl, OBJECT_SPRITE_X
add hl, de
ld [hl], a
ret
-InitTempObjectRadius: ; 88fd (2:48fd)
+.InitRadius:
ld h, a
inc a
and $f
@@ -468,7 +504,7 @@ InitTempObjectRadius: ; 88fd (2:48fd)
add $10
and $f0
or l
- ld hl, $16
+ ld hl, OBJECT_RADIUS
add hl, de
ld [hl], a
ret
@@ -480,75 +516,84 @@ TrainerWalkToPlayer::
call AppendToMovementBuffer
ld a, [wWalkingIntoNPC]
dec a
- jr z, .asm_892b
+ jr z, .TerminateStep
ldh a, [hLastTalked]
ld b, a
ld c, PLAYER
- ld d, $1
- call GetTrainerPathToPlayer
+ ld d, 1
+ call .GetPathToPlayer
call DecrementMovementBufferCount
-.asm_892b
+
+.TerminateStep:
ld a, movement_step_end
call AppendToMovementBuffer
ret
-GetTrainerPathToPlayer: ; 8931 (2:4931)
+.GetPathToPlayer:
push de
push bc
+; get player object struct, load to de
ld a, c
call GetMapObject
- ld hl, $0
+ ld hl, MAPOBJECT_OBJECT_STRUCT_ID
add hl, bc
ld a, [hl]
call GetObjectStruct
ld d, b
ld e, c
+
+; get last talked object struct, load to bc
pop bc
ld a, b
call GetMapObject
- ld hl, $0
+ ld hl, MAPOBJECT_OBJECT_STRUCT_ID
add hl, bc
ld a, [hl]
call GetObjectStruct
- ld hl, $10
+
+; get last talked coords, load to bc
+ ld hl, OBJECT_NEXT_MAP_X
add hl, bc
ld a, [hl]
- ld hl, $11
+ ld hl, OBJECT_NEXT_MAP_Y
add hl, bc
ld c, [hl]
ld b, a
- ld hl, $10
+
+; get player coords, load to de
+ ld hl, OBJECT_NEXT_MAP_X
add hl, de
ld a, [hl]
- ld hl, $11
+ ld hl, OBJECT_NEXT_MAP_Y
add hl, de
ld e, [hl]
ld d, a
+
pop af
call ComputePathToWalkToPlayer
ret
-SurfStartStep: ; 8969 (2:4969)
+SurfStartStep:
call InitMovementBuffer
- call GetInitialSurfStep
+ call .GetMovementData
call AppendToMovementBuffer
ld a, movement_step_end
call AppendToMovementBuffer
ret
-GetInitialSurfStep: ; 8978 (2:4978)
+.GetMovementData:
ld a, [wPlayerDirection]
srl a
srl a
- and $3
+ maskbits NUM_DIRECTIONS
ld e, a
- ld d, $0
- ld hl, .Data ; $498a
+ ld d, 0
+ ld hl, .movement_data
add hl, de
ld a, [hl]
ret
-.Data
+.movement_data
slow_step DOWN
slow_step UP
slow_step LEFT
@@ -562,43 +607,48 @@ FollowNotExact::
ld e, c
pop bc
ret c
+
ld a, b
call CheckObjectVisibility
ret c
- ld hl, $10
+
+; object 2 is now in bc, object 1 is now in de
+ ld hl, OBJECT_NEXT_MAP_X
add hl, bc
ld a, [hl]
- ld hl, $11
+ ld hl, OBJECT_NEXT_MAP_Y
add hl, bc
ld c, [hl]
ld b, a
- ld hl, $10
+
+ ld hl, OBJECT_NEXT_MAP_X
add hl, de
ld a, [hl]
cp b
- jr z, .asm_89b7
- jr c, .asm_89b4
+ jr z, .same_x
+ jr c, .to_the_left
inc b
- jr .asm_89c5
+ jr .continue
-.asm_89b4
+.to_the_left
dec b
- jr .asm_89c5
+ jr .continue
-.asm_89b7
- ld hl, $11
+.same_x
+ ld hl, OBJECT_NEXT_MAP_Y
add hl, de
ld a, [hl]
cp c
- jr z, .asm_89c5
- jr c, .asm_89c4
+ jr z, .continue
+ jr c, .below
inc c
- jr .asm_89c5
+ jr .continue
-.asm_89c4
+.below
dec c
-.asm_89c5
- ld hl, $10
+
+.continue
+ ld hl, OBJECT_NEXT_MAP_X
add hl, de
ld [hl], b
ld a, b
@@ -608,10 +658,10 @@ FollowNotExact::
swap a
ld hl, wPlayerBGMapOffsetX
sub [hl]
- ld hl, $17
+ ld hl, OBJECT_SPRITE_X
add hl, de
ld [hl], a
- ld hl, $11
+ ld hl, OBJECT_NEXT_MAP_Y
add hl, de
ld [hl], c
ld a, c
@@ -621,169 +671,182 @@ FollowNotExact::
swap a
ld hl, wPlayerBGMapOffsetY
sub [hl]
- ld hl, $18
+ ld hl, OBJECT_SPRITE_Y
add hl, de
ld [hl], a
ldh a, [hObjectStructIndexBuffer]
- ld hl, $20
+ ld hl, OBJECT_RANGE
add hl, de
ld [hl], a
- ld hl, $3
+ ld hl, OBJECT_MOVEMENTTYPE
add hl, de
- ld [hl], $1a
- ld hl, $9
+ ld [hl], SPRITEMOVEDATA_FOLLOWNOTEXACT
+ ld hl, OBJECT_STEP_TYPE
add hl, de
- ld [hl], $0
+ ld [hl], STEP_TYPE_00
ret
GetRelativeFacing::
+; Determines which way map object e would have to turn to face map object d. Returns carry if it's impossible for whatever reason.
ld a, d
call GetMapObject
- ld hl, $0
+ ld hl, MAPOBJECT_OBJECT_STRUCT_ID
add hl, bc
ld a, [hl]
- cp $d
- jr nc, .asm_8a27
+ cp NUM_OBJECT_STRUCTS
+ jr nc, .carry
ld d, a
ld a, e
call GetMapObject
- ld hl, $0
+ ld hl, MAPOBJECT_OBJECT_STRUCT_ID
add hl, bc
ld a, [hl]
- cp $d
- jr nc, .asm_8a27
+ cp NUM_OBJECT_STRUCTS
+ jr nc, .carry
ld e, a
- call GetFacing_e_relativeto_d
+ call .GetFacing_e_relativeto_d
ret
-.asm_8a27
+.carry
scf
ret
-GetFacing_e_relativeto_d: ; 8a29 (2:4a29)
+.GetFacing_e_relativeto_d:
+; Determines which way object e would have to turn to face object d. Returns carry if it's impossible.
+; load the coordinates of object d into bc
ld a, d
call GetObjectStruct
- ld hl, $10
+ ld hl, OBJECT_NEXT_MAP_X
add hl, bc
ld a, [hl]
- ld hl, $11
+ ld hl, OBJECT_NEXT_MAP_Y
add hl, bc
ld c, [hl]
ld b, a
push bc
+; load the coordinates of object e into de
ld a, e
call GetObjectStruct
- ld hl, $10
+ ld hl, OBJECT_NEXT_MAP_X
add hl, bc
ld d, [hl]
- ld hl, $11
+ ld hl, OBJECT_NEXT_MAP_Y
add hl, bc
ld e, [hl]
pop bc
+; |x1 - x2|
ld a, b
sub d
- jr z, .asm_8a5c
- jr nc, .asm_8a50
+ jr z, .same_x_1
+ jr nc, .b_right_of_d_1
cpl
inc a
-.asm_8a50
+
+.b_right_of_d_1
+; |y1 - y2|
ld h, a
ld a, c
sub e
- jr z, .asm_8a6a
- jr nc, .asm_8a59
+ jr z, .same_y_1
+ jr nc, .c_below_e_1
cpl
inc a
-.asm_8a59
+
+.c_below_e_1
+; |y1 - y2| - |x1 - x2|
sub h
- jr c, .asm_8a6a
-.asm_8a5c
+ jr c, .same_y_1
+
+.same_x_1
+; compare the y coordinates
ld a, c
cp e
- jr z, .asm_8a78
- jr c, .asm_8a66
- ld d, $0
+ jr z, .same_x_and_y
+ jr c, .c_directly_below_e
+; c directly above e
+ ld d, DOWN
and a
ret
-.asm_8a66
- ld d, $1
+.c_directly_below_e
+ ld d, UP
and a
ret
-.asm_8a6a
+.same_y_1
ld a, b
cp d
- jr z, .asm_8a78
- jr c, .asm_8a74
- ld d, $3
+ jr z, .same_x_and_y
+ jr c, .b_directly_right_of_d
+; b directly left of d
+ ld d, RIGHT
and a
ret
-.asm_8a74
- ld d, $2
+.b_directly_right_of_d
+ ld d, LEFT
and a
ret
-.asm_8a78
+.same_x_and_y
scf
ret
-QueueFollowerFirstStep: ; 8a7a (2:4a7a)
- call Function8a8d
- jr c, .asm_8a87
+QueueFollowerFirstStep:
+ call .QueueFirstStep
+ jr c, .same
ld [wFollowMovementQueue], a
xor a
ld [wFollowerMovementQueueLength], a
ret
-.asm_8a87
- ld a, $ff
+.same
+ ld a, -1
ld [wFollowerMovementQueueLength], a
ret
-Function8a8d: ; 8a8d (2:4a8d)
+.QueueFirstStep:
ld a, [wObjectFollow_Leader]
call GetObjectStruct
- ld hl, $10
+ ld hl, OBJECT_NEXT_MAP_X
add hl, bc
ld d, [hl]
- ld hl, $11
+ ld hl, OBJECT_NEXT_MAP_Y
add hl, bc
ld e, [hl]
ld a, [wObjectFollow_Follower]
call GetObjectStruct
- ld hl, $10
+ ld hl, OBJECT_NEXT_MAP_X
add hl, bc
ld a, d
cp [hl]
- jr z, .asm_8ab5
- jr c, .asm_8ab1
+ jr z, .check_y
+ jr c, .left
and a
- ld a, $f
+ ld a, movement_step + RIGHT
ret
-.asm_8ab1
+.left
and a
- ld a, $e
+ ld a, movement_step + LEFT
ret
-.asm_8ab5
- ld hl, $11
+.check_y
+ ld hl, OBJECT_NEXT_MAP_Y
add hl, bc
ld a, e
cp [hl]
- jr z, .asm_8ac7
- jr c, .asm_8ac3
+ jr z, .same_xy
+ jr c, .up
and a
- ld a, $c
+ ld a, movement_step + DOWN
ret
-.asm_8ac3
+.up
and a
- ld a, $d
+ ld a, movement_step + UP
ret
-.asm_8ac7
+.same_xy
scf
ret
diff --git a/engine/overworld/player_step.asm b/engine/overworld/player_step.asm
index 2653fd2e..a290730c 100755
--- a/engine/overworld/player_step.asm
+++ b/engine/overworld/player_step.asm
@@ -2,26 +2,26 @@ _HandlePlayerStep::
ld a, [wPlayerStepFlags]
and a
ret z
- bit 7, a
- jr nz, .asm_d4b6
- bit 6, a
- jr nz, .asm_d4c0
- bit 5, a
- jr nz, .asm_d4c5
+ bit PLAYERSTEP_START_F, a
+ jr nz, .update_overworld_map
+ bit PLAYERSTEP_STOP_F, a
+ jr nz, .update_player_coords
+ bit PLAYERSTEP_CONTINUE_F, a
+ jr nz, .finish
ret
-.asm_d4b6
- ld a, $4
+.update_overworld_map
+ ld a, 4
ld [wHandlePlayerStep], a
call UpdateOverworldMap
- jr .asm_d4c5
+ jr .finish
-.asm_d4c0
- call Functiond517
- jr .asm_d4c5
+.update_player_coords
+ call UpdatePlayerCoords
+ jr .finish
-.asm_d4c5
- call Functiond4f2
+.finish
+ call HandlePlayerStep
ld a, [wPlayerStepVectorX]
ld d, a
ld a, [wPlayerStepVectorY]
@@ -47,7 +47,7 @@ ScrollScreen::
ldh [hSCY], a
ret
-Functiond4f2: ; d4f2 (3:54f2)
+HandlePlayerStep:
ld hl, wHandlePlayerStep
ld a, [hl]
and a
@@ -58,49 +58,50 @@ Functiond4f2: ; d4f2 (3:54f2)
rst JumpTable
ret
-.Jumptable
+.Jumptable:
dw GetMovementPermissions
dw BufferScreen
- dw Functiond515
- dw Functiond516
- dw Functiond515
- dw Functiond515
- dw Functiond515
- dw Functiond515
- dw Functiond515
- dw Functiond515
- dw Functiond515
+ dw .fail1
+ dw .fail2
+; The rest are never used. Ever.
+ dw .fail1
+ dw .fail1
+ dw .fail1
+ dw .fail1
+ dw .fail1
+ dw .fail1
+ dw .fail1
-Functiond515:
+.fail1
ret
-Functiond516:
+.fail2
ret
-Functiond517: ; d517 (3:5517)
+UpdatePlayerCoords:
ld a, [wPlayerStepDirection]
and a
- jr nz, .asm_d522
+ jr nz, .check_step_down
ld hl, wYCoord
inc [hl]
ret
-.asm_d522
- cp $1
- jr nz, .asm_d52b
+.check_step_down
+ cp UP
+ jr nz, .check_step_left
ld hl, wYCoord
dec [hl]
ret
-.asm_d52b
- cp $2
- jr nz, .asm_d534
+.check_step_left
+ cp LEFT
+ jr nz, .check_step_right
ld hl, wXCoord
dec [hl]
ret
-.asm_d534
- cp $3
+.check_step_right
+ cp RIGHT
ret nz
ld hl, wXCoord
inc [hl]
diff --git a/engine/overworld/time.asm b/engine/overworld/time.asm
index 5798ee20..17ddbd6a 100755
--- a/engine/overworld/time.asm
+++ b/engine/overworld/time.asm
@@ -1,5 +1,5 @@
-InitializeStartDay_: ; 117f1 (4:57f1)
- call Function118c9
+_InitializeStartDay:
+ call InitializeStartDay
ret
ClearDailyTimers:
@@ -12,38 +12,42 @@ ClearDailyTimers:
InitCallReceiveDelay::
xor a
ld [wTimeCyclesSinceLastCall], a
-Function11804:
+
+NextCallReceiveDelay:
ld a, [wTimeCyclesSinceLastCall]
- cp $3
- jr c, .asm_1180d
- ld a, $3
-.asm_1180d
+ cp 3
+ jr c, .okay
+ ld a, 3
+
+.okay
ld e, a
- ld d, $0
+ ld d, 0
ld hl, .ReceiveCallDelays
add hl, de
ld a, [hl]
- jp Function11849
+ jp RestartReceiveCallDelay
.ReceiveCallDelays:
db 20, 10, 5, 3
CheckReceiveCallTimer:
- call Function11857
+ call CheckReceiveCallDelay ; check timer
ret nc
ld hl, wTimeCyclesSinceLastCall
ld a, [hl]
- cp $3
- jr nc, .asm_11829
+ cp 3
+ jr nc, .ok
inc [hl]
-.asm_11829
- call Function11804
+
+.ok
+ call NextCallReceiveDelay ; restart timer
scf
ret
-Function1182e: ; 1182e (4:582e)
- ld a, $1
-Function11830:
+InitOneDayCountdown:
+ ld a, 1
+
+InitNDaysCountdown:
ld [hl], a
push hl
call UpdateTime
@@ -52,17 +56,17 @@ Function11830:
call CopyDayToHL
ret
-Function1183b: ; 1183b (4:583b)
+CheckDayDependentEventHL:
inc hl
push hl
call CalcDaysSince
- call Function119b4
+ call GetDaysSince
pop hl
dec hl
- call Function11972
+ call UpdateTimeRemaining
ret
-Function11849: ; 11849 (4:5849)
+RestartReceiveCallDelay:
ld hl, wReceiveCallDelay_MinsRemaining
ld [hl], a
call UpdateTime
@@ -70,32 +74,32 @@ Function11849: ; 11849 (4:5849)
call CopyDayHourMinToHL
ret
-Function11857: ; 11857 (4:5857)
+CheckReceiveCallDelay:
ld hl, wReceiveCallDelay_StartTime
call CalcMinsHoursDaysSince
- call Function1199a
+ call GetMinutesSinceIfLessThan60
ld hl, wReceiveCallDelay_MinsRemaining
- call Function11972
+ call UpdateTimeRemaining
ret
-asm_11867:
+RestartDailyResetTimer:
ld hl, wDailyResetTimer
- jp Function1182e
+ jp InitOneDayCountdown
CheckDailyResetTimer::
ld hl, wDailyResetTimer
- call Function1183b
+ call CheckDayDependentEventHL
ret nc
xor a
ld hl, wDailyFlags1
ld [hli], a
ld [hl], a
- jr asm_11867
+ jr RestartDailyResetTimer
StartBugContestTimer:
- ld a, 20
+ ld a, BUG_CONTEST_MINUTES
ld [wBugContestMinsRemaining], a
- ld a, 0
+ ld a, BUG_CONTEST_SECONDS
ld [wBugContestSecsRemaining], a
call UpdateTime
ld hl, wBugContestStartTime
@@ -107,35 +111,36 @@ CheckBugContestTimer::
call CalcSecsMinsHoursDaysSince
ld a, [wDaysSince]
and a
- jr nz, .asm_118c0
+ jr nz, .timed_out
ld a, [wHoursSince]
and a
- jr nz, .asm_118c0
- ld a, [wSecsSince]
+ jr nz, .timed_out
+ ld a, [wSecondsSince]
ld b, a
ld a, [wBugContestSecsRemaining]
sub b
- jr nc, .asm_118ae
+ jr nc, .okay
add 60
-.asm_118ae
+
+.okay
ld [wBugContestSecsRemaining], a
- ld a, [wMinsSince]
+ ld a, [wMinutesSince]
ld b, a
ld a, [wBugContestMinsRemaining]
sbc b
ld [wBugContestMinsRemaining], a
- jr c, .asm_118c0
+ jr c, .timed_out
and a
ret
-.asm_118c0
+.timed_out
xor a
ld [wBugContestMinsRemaining], a
ld [wBugContestSecsRemaining], a
scf
ret
-Function118c9: ; 118c9 (4:58c9)
+InitializeStartDay:
call UpdateTime
ld hl, wTimerEventStartDay
call CopyDayToHL
@@ -144,17 +149,17 @@ Function118c9: ; 118c9 (4:58c9)
CheckPokerusTick::
ld hl, wTimerEventStartDay
call CalcDaysSince
- call Function119b4
+ call GetDaysSince
and a
- jr z, .asm_118e6
+ jr z, .done ; not even a day has passed since game start
ld b, a
- farcall ApplyPokerusTick ; same bank
-.asm_118e6
+ farcall ApplyPokerusTick
+.done
xor a
ret
SetUnusedTwoDayTimer:
- ld a, $2
+ ld a, 2
ld hl, wUnusedTwoDayTimer
ld [hl], a
call UpdateTime
@@ -162,63 +167,69 @@ SetUnusedTwoDayTimer:
call CopyDayToHL
ret
-Function118f8: ; 118f8 (4:58f8)
+CheckUnusedTwoDayTimer:
ld hl, wUnusedTwoDayTimerStartDate
call CalcDaysSince
- call Function119b4
+ call GetDaysSince
ld hl, wUnusedTwoDayTimer
- call Function11972
+ call UpdateTimeRemaining
ret
+; unused
ld hl, wDailyFlags1
- set 2, [hl]
+ set DAILYFLAGS1_FISH_SWARM_F, [hl]
ret
+; unused
and a
ld hl, wDailyFlags1
- bit 2, [hl]
+ bit DAILYFLAGS1_FISH_SWARM_F, [hl]
ret nz
scf
ret
-Function11917: ; 11917 (4:5917)
- call Function11920
+RestartLuckyNumberCountdown:
+ call .GetDaysUntilNextFriday
ld hl, wLuckyNumberDayBuffer
- jp Function11830
+ jp InitNDaysCountdown
-Function11920: ; 11920 (4:5920)
+.GetDaysUntilNextFriday:
call GetWeekday
ld c, a
- ld a, $5
+ ld a, FRIDAY
sub c
- jr z, .asm_1192b
- jr nc, .asm_1192d
-.asm_1192b
- add $7
-.asm_1192d
+ jr z, .friday_saturday
+ jr nc, .earlier ; could have done "ret nc"
+
+.friday_saturday
+ add 7
+
+.earlier
ret
-Function1192e: ; 1192e (4:592e)
+_CheckLuckyNumberShowFlag:
ld hl, wLuckyNumberDayBuffer
- jp Function1183b
+ jp CheckDayDependentEventHL
-Function11934: ; 11934 (4:5934)
+DoMysteryGiftIfDayHasPassed:
ld a, BANK(sMysteryGiftTimer)
call OpenSRAM
ld hl, sMysteryGiftTimer
ld a, [hli]
- ld [wCurHPAnimMaxHP], a
+ ld [wBuffer1], a
ld a, [hl]
ld [wBuffer2], a
call CloseSRAM
- ld hl, wCurHPAnimMaxHP
- call Function1183b
- jr nc, .asm_1195e
- ld hl, wCurHPAnimMaxHP
- call Function1182e
+
+ ld hl, wBuffer1
+ call CheckDayDependentEventHL
+ jr nc, .not_timed_out
+ ld hl, wBuffer1
+ call InitOneDayCountdown
call CloseSRAM
farcall Function2a4f6
-.asm_1195e
+
+.not_timed_out
ld a, BANK(sMysteryGiftTimer)
call OpenSRAM
ld hl, wBuffer1
@@ -229,21 +240,24 @@ Function11934: ; 11934 (4:5934)
call CloseSRAM
ret
-Function11972: ; 11972 (4:5972)
- cp $ff
- jr z, .asm_11981
+UpdateTimeRemaining:
+; If the amount of time elapsed exceeds the capacity of its
+; unit, skip this part.
+ cp -1
+ jr z, .set_carry
ld c, a
- ld a, [hl]
+ ld a, [hl] ; time remaining
sub c
- jr nc, .asm_1197c
+ jr nc, .ok
xor a
-.asm_1197c
+
+.ok
ld [hl], a
- jr z, .asm_11981
+ jr z, .set_carry
xor a
ret
-.asm_11981
+.set_carry
xor a
ld [hl], a
scf
@@ -252,100 +266,103 @@ Function11972: ; 11972 (4:5972)
GetSecondsSinceIfLessThan60:
ld a, [wDaysSince]
and a
- jr nz, asm_119b8
+ jr nz, GetTimeElapsed_ExceedsUnitLimit
ld a, [wHoursSince]
and a
- jr nz, asm_119b8
- ld a, [wMinsSince]
- jr nz, asm_119b8
- ld a, [wSecsSince]
+ jr nz, GetTimeElapsed_ExceedsUnitLimit
+ ld a, [wMinutesSince]
+ jr nz, GetTimeElapsed_ExceedsUnitLimit
+ ld a, [wSecondsSince]
ret
-Function1199a: ; 1199a (4:599a)
+GetMinutesSinceIfLessThan60:
ld a, [wDaysSince]
and a
- jr nz, asm_119b8
+ jr nz, GetTimeElapsed_ExceedsUnitLimit
ld a, [wHoursSince]
and a
- jr nz, asm_119b8
- ld a, [wMinsSince]
+ jr nz, GetTimeElapsed_ExceedsUnitLimit
+ ld a, [wMinutesSince]
ret
GetHoursSinceIfLessThan24:
ld a, [wDaysSince]
and a
- jr nz, asm_119b8
+ jr nz, GetTimeElapsed_ExceedsUnitLimit
ld a, [wHoursSince]
ret
-Function119b4: ; 119b4 (4:59b4)
+GetDaysSince:
ld a, [wDaysSince]
ret
-asm_119b8:
- ld a, $ff
+GetTimeElapsed_ExceedsUnitLimit:
+ ld a, -1
ret
-CalcDaysSince: ; 119bb (4:59bb)
+CalcDaysSince:
xor a
- jr CalcDaysSince_
+ jr _CalcDaysSince
CalcHoursDaysSince:
inc hl
xor a
- jr CalcHoursDaysSince_
+ jr _CalcHoursDaysSince
-CalcMinsHoursDaysSince: ; 119c2 (4:59c2)
+CalcMinsHoursDaysSince:
inc hl
inc hl
xor a
- jr CalcMinsHoursDaysSince_
+ jr _CalcMinsHoursDaysSince
-CalcSecsMinsHoursDaysSince: ; 119c7 (4:59c7)
+CalcSecsMinsHoursDaysSince:
inc hl
inc hl
inc hl
ldh a, [hSeconds]
ld c, a
sub [hl]
- jr nc, .asm_119d2
+ jr nc, .skip
add 60
-.asm_119d2
- ld [hl], c
+.skip
+ ld [hl], c ; current seconds
dec hl
- ld [wSecsSince], a
-CalcMinsHoursDaysSince_:
+ ld [wSecondsSince], a ; seconds since
+
+_CalcMinsHoursDaysSince:
ldh a, [hMinutes]
ld c, a
sbc [hl]
- jr nc, .asm_119df
+ jr nc, .skip
add 60
-.asm_119df
- ld [hl], c
+.skip
+ ld [hl], c ; current minutes
dec hl
- ld [wMinsSince], a
-CalcHoursDaysSince_:
+ ld [wMinutesSince], a ; minutes since
+
+_CalcHoursDaysSince:
ldh a, [hHours]
ld c, a
sbc [hl]
- jr nc, .asm_119ec
+ jr nc, .skip
add 24
-.asm_119ec
- ld [hl], c
+.skip
+ ld [hl], c ; current hours
dec hl
- ld [wHoursSince], a
-CalcDaysSince_:
+ ld [wHoursSince], a ; hours since
+
+_CalcDaysSince:
ld a, [wCurDay]
ld c, a
sbc [hl]
- jr nc, .asm_119fa
+ jr nc, .skip
add 20 * 7
-.asm_119fa
- ld [hl], c
- ld [wDaysSince], a
+.skip
+ ld [hl], c ; current days
+ ld [wDaysSince], a ; days since
ret
-CopyDayHourMinSecToHL: ; 119ff (4:59ff)
+CopyDayHourMinSecToHL:
ld a, [wCurDay]
ld [hli], a
ldh a, [hHours]
@@ -356,7 +373,7 @@ CopyDayHourMinSecToHL: ; 119ff (4:59ff)
ld [hli], a
ret
-CopyDayToHL: ; 11a0d (4:5a0d)
+CopyDayToHL:
ld a, [wCurDay]
ld [hl], a
ret
@@ -368,7 +385,7 @@ CopyDayHourToHL:
ld [hli], a
ret
-CopyDayHourMinToHL: ; 11a1a (4:5a1a)
+CopyDayHourMinToHL:
ld a, [wCurDay]
ld [hli], a
ldh a, [hHours]
diff --git a/engine/overworld/variables.asm b/engine/overworld/variables.asm
index 6483232e..6f14c549 100755
--- a/engine/overworld/variables.asm
+++ b/engine/overworld/variables.asm
@@ -34,54 +34,58 @@ _GetVarAction::
ret
.VarActionTable:
- dwb wStringBuffer2, RETVAR_STRBUF2
- dwb wPartyCount, RETVAR_STRBUF2
- dwb .BattleResult, RETVAR_EXECUTE
- dwb wBattleType, RETVAR_ADDR_DE
- dwb wTimeOfDay, RETVAR_STRBUF2
- dwb .CountCaughtMons, RETVAR_EXECUTE
- dwb .CountSeenMons, RETVAR_EXECUTE
- dwb .CountBadges, RETVAR_EXECUTE
- dwb wPlayerState, RETVAR_ADDR_DE
- dwb .PlayerFacing, RETVAR_EXECUTE
- dwb hHours, RETVAR_STRBUF2
- dwb .DayOfWeek, RETVAR_EXECUTE
- dwb wMapGroup, RETVAR_STRBUF2
- dwb wMapNumber, RETVAR_STRBUF2
- dwb .UnownCaught, RETVAR_EXECUTE
- dwb wEnvironment, RETVAR_STRBUF2
- dwb .BoxFreeSpace, RETVAR_EXECUTE
- dwb wBugContestMinsRemaining, RETVAR_STRBUF2
- dwb wXCoord, RETVAR_STRBUF2
- dwb wYCoord, RETVAR_STRBUF2
- dwb wSpecialPhoneCallID, RETVAR_STRBUF2
- dwb NULL, RETVAR_STRBUF2
+; entries correspond to VAR_* constants
+ ; RETVAR_STRBUF2: copy [de] to wStringBuffer2
+ ; RETVAR_ADDR_DE: return address in de
+ ; RETVAR_EXECUTE: call function
+ dwb wStringBuffer2, RETVAR_STRBUF2
+ dwb wPartyCount, RETVAR_STRBUF2
+ dwb .BattleResult, RETVAR_EXECUTE
+ dwb wBattleType, RETVAR_ADDR_DE
+ dwb wTimeOfDay, RETVAR_STRBUF2
+ dwb .CountCaughtMons, RETVAR_EXECUTE
+ dwb .CountSeenMons, RETVAR_EXECUTE
+ dwb .CountBadges, RETVAR_EXECUTE
+ dwb wPlayerState, RETVAR_ADDR_DE
+ dwb .PlayerFacing, RETVAR_EXECUTE
+ dwb hHours, RETVAR_STRBUF2
+ dwb .DayOfWeek, RETVAR_EXECUTE
+ dwb wMapGroup, RETVAR_STRBUF2
+ dwb wMapNumber, RETVAR_STRBUF2
+ dwb .UnownCaught, RETVAR_EXECUTE
+ dwb wEnvironment, RETVAR_STRBUF2
+ dwb .BoxFreeSpace, RETVAR_EXECUTE
+ dwb wBugContestMinsRemaining, RETVAR_STRBUF2
+ dwb wXCoord, RETVAR_STRBUF2
+ dwb wYCoord, RETVAR_STRBUF2
+ dwb wSpecialPhoneCallID, RETVAR_STRBUF2
+ dwb NULL, RETVAR_STRBUF2
-.CountCaughtMons: ; 41cf
+.CountCaughtMons:
; Caught mons.
ld hl, wPokedexCaught
- ld b, $20
+ ld b, wEndPokedexCaught - wPokedexCaught
call CountSetBits
- ld a, [wd151]
+ ld a, [wNumSetBits]
jp .loadstringbuffer2
-.CountSeenMons: ; 41dd
+.CountSeenMons:
; Seen mons.
ld hl, wPokedexSeen
- ld b, $20
+ ld b, wEndPokedexSeen - wPokedexSeen
call CountSetBits
- ld a, [wd151]
+ ld a, [wNumSetBits]
jp .loadstringbuffer2
-.CountBadges: ; 41eb
+.CountBadges:
; Number of owned badges.
ld hl, wBadges
ld b, 2
call CountSetBits
- ld a, [wd151]
+ ld a, [wNumSetBits]
jp .loadstringbuffer2
-.PlayerFacing: ; 41f9
+.PlayerFacing:
; The direction the player is facing.
ld a, [wPlayerDirection]
and $c
@@ -89,18 +93,18 @@ _GetVarAction::
rrca
jp .loadstringbuffer2
-.DayOfWeek: ; 4203
+.DayOfWeek:
; The day of the week.
call GetWeekday
jp .loadstringbuffer2
-.UnownCaught: ; 4209
+.UnownCaught:
; Number of unique Unown caught.
- call CountUnown ; gold: c5ac | silver: c5aa
+ call CountUnown
ld a, b
jp .loadstringbuffer2
-.BoxFreeSpace: ; 4210
+.BoxFreeSpace:
; Remaining slots in the current box.
ld a, BANK(sBoxCount)
call OpenSRAM
@@ -112,8 +116,8 @@ _GetVarAction::
ld a, b
jp .loadstringbuffer2
-.BattleResult: ; 4223
+.BattleResult:
ld a, [wBattleResult]
- and $7f
+ and $ff ^ BATTLERESULT_BITMASK
jp .loadstringbuffer2
-; 422b
+
diff --git a/wram.asm b/wram.asm
index 87c4ec82..fc1dc032 100644
--- a/wram.asm
+++ b/wram.asm
@@ -1786,10 +1786,10 @@ wRequested1bpp:: ds 1 ; ce6c
wRequested1bppSource:: dw ; ce6d
wRequested1bppDest:: dw ; ce6f
-wSecsSince:: ds 1 ; ce71
-wMinsSince:: ds 1 ; ce72
-wHoursSince:: ds 1 ; ce73
-wDaysSince:: ds 1 ; ce74
+wSecondsSince:: db ; ce71
+wMinutesSince:: db ; ce72
+wHoursSince:: db ; ce73
+wDaysSince:: db ; ce74
wce75:: ds 1 ; ce75
wce76:: ds 1 ; ce76
wce77:: ds 1 ; ce77
@@ -1827,15 +1827,16 @@ wMovementPointer:: dw ; ce94
ds 3
wTempObjectCopyMapObjectIndex:: db ; ce99
-wce9a:: ds 1 ; ce9a
-wce9b:: ds 1 ; ce9b
-wce9c:: ds 1 ; ce9c
-wce9d:: ds 1 ; ce9d
+wTempObjectCopySprite:: db ; ce9a
+wTempObjectCopySpriteVTile:: db ; ce9b
+wTempObjectCopyPalette:: db ; ce9c
+wTempObjectCopyMovement:: db ; ce9d
wTempObjectCopyRange:: db ; ce9e
-wce9f:: ds 1 ; ce9f
-wcea0:: ds 1 ; cea0
-wcea1:: ds 1 ; cea1
-wcea2:: ds 1 ; cea2
+wTempObjectCopyX:: db ; ce9f
+wTempObjectCopyY:: db ; cea0
+wTempObjectCopyRadius:: db ; cea1
+
+ ds 1
wTileDown:: ds 1 ; cea3
wTileUp:: ds 1 ; cea4
@@ -2704,7 +2705,6 @@ wCmdQueue:: ds CMDQUEUE_CAPACITY * CMDQUEUE_ENTRY_SIZE ; d405
ds 40
-; TODO these should be wMapObject1 etc.
wMapObjects:: ; d445
wPlayerObject:: map_object wPlayer ; d445
wMap1Object:: map_object wMap1 ; d455
@@ -2750,7 +2750,7 @@ wd56a:: ds 1 ; d56a
wd56b:: ds 1 ; d56b
wd56c:: ds 1 ; d56c
wd56d:: ds 1 ; d56d
-wTimeOfDayPalset:: ds 1 ; d56e
+wTimeOfDayPalset:: db ; d56e
wd56f:: ds 1 ; d56f
wd570:: ds 1 ; d570
wPlayerData2End::
@@ -3373,7 +3373,10 @@ wPartyMonNicknamesEnd::
ds 22 ; equivalent to NAME_LENGTH + MON_NAME_LENGTH, possibly a reference to 7 pokemon?
wPokedexCaught:: flag_array NUM_POKEMON ; dbe4
+wEndPokedexCaught::
+
wPokedexSeen:: flag_array NUM_POKEMON ; dc04
+wEndPokedexSeen::
wUnownDex:: ds NUM_UNOWN ; dc24
wUnlockedUnowns:: ds 1 ; dc3e