summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPokeglitch <pokeglitchx@gmail.com>2018-06-25 22:43:31 -0400
committerPokeglitch <pokeglitchx@gmail.com>2018-06-25 22:43:31 -0400
commit3c966f7df4170f58f8274f444977c5a29225d9be (patch)
treef9600d107d608241fdfafe1d08dddc6a4e80ef0b
parent906ea8bdfcf024cb5011948a319764047f8fa41f (diff)
Disassembled all routines related to sprite movement/collisions. Added in constants
-rw-r--r--constants.asm1
-rw-r--r--constants/collision_constants.asm4
-rw-r--r--constants/map_object_constants.asm4
-rw-r--r--constants/metatile_constants.asm1
-rwxr-xr-xconstants/movement_constants.asm44
-rw-r--r--constants/sprite_constants.asm2
-rwxr-xr-xengine/overworld/object_collision.asm157
-rw-r--r--engine/overworld/player_movement.asm1123
-rw-r--r--engine/sprites/sprites.asm (renamed from data/sprites/sprites.asm)53
-rw-r--r--home/copy2.asm2
-rw-r--r--home/map.asm16
-rw-r--r--home/map_objects.asm26
-rw-r--r--home/tileset.asm20
-rw-r--r--hram.asm12
-rw-r--r--macros/wram.asm4
-rw-r--r--shim.sym2
-rw-r--r--wram.asm5
17 files changed, 927 insertions, 549 deletions
diff --git a/constants.asm b/constants.asm
index 9da5ddc..7043c32 100644
--- a/constants.asm
+++ b/constants.asm
@@ -38,3 +38,4 @@ INCLUDE "constants/menu_constants.asm"
INCLUDE "constants/wram_constants.asm"
INCLUDE "constants/sgb_constants.asm"
INCLUDE "constants/map_object_constants.asm"
+INCLUDE "constants/movement_constants.asm"
diff --git a/constants/collision_constants.asm b/constants/collision_constants.asm
index 580d397..ebe3856 100644
--- a/constants/collision_constants.asm
+++ b/constants/collision_constants.asm
@@ -126,3 +126,7 @@ COLLISION_JUMP_SE EQU $a4
COLLISION_JUMP_SW EQU $a5
COLLISION_JUMP_NE EQU $a6
COLLISION_JUMP_NW EQU $a7
+
+NEVER_SOLID EQU 0
+SOMETIMES_SOLID EQU 1
+ALWAYS_SOLID EQU 15
diff --git a/constants/map_object_constants.asm b/constants/map_object_constants.asm
index c9bce93..81c52a3 100644
--- a/constants/map_object_constants.asm
+++ b/constants/map_object_constants.asm
@@ -70,3 +70,7 @@ MAPOBJECTTEMPLATE_SCRIPT_POINTER rb 1 ; 9
MAPOBJECTTEMPLATE_POINTER_HI rb 1 ; a
MAPOBJECTTEMPLATE_EVENT_FLAG rw 1 ; b
MAP_OBJECT_TEMPLATE_LENGTH SET _RS
+
+PLAYER_OBJECT_INDEX EQU 1
+COMPANION_OBJECT_INDEX EQU 2
+NUM_OBJECT_STRUCTS EQU 10
diff --git a/constants/metatile_constants.asm b/constants/metatile_constants.asm
index 8d86ac5..88d54ab 100644
--- a/constants/metatile_constants.asm
+++ b/constants/metatile_constants.asm
@@ -1,4 +1,3 @@
-
; all outside tileset share certain metatiles
; this is used in overworld code when editing the map
; D - dirt
diff --git a/constants/movement_constants.asm b/constants/movement_constants.asm
new file mode 100755
index 0000000..f0c1a88
--- /dev/null
+++ b/constants/movement_constants.asm
@@ -0,0 +1,44 @@
+ const_def
+ const FACE_DOWN ; $00
+ const FACE_UP ; $01
+ const FACE_LEFT ; $02
+ const FACE_RIGHT ; $03
+ const SLOW_STEP_DOWN ; $04
+ const SLOW_STEP_UP ; $05
+ const SLOW_STEP_LEFT ; $06
+ const SLOW_STEP_RIGHT ; $07
+ const STEP_DOWN ; $08
+ const STEP_UP ; $09
+ const STEP_LEFT ; $0a
+ const STEP_RIGHT ; $0b
+ const FAST_STEP_DOWN ; $0c
+ const FAST_STEP_UP ; $0d
+ const FAST_STEP_LEFT ; $0e
+ const FAST_STEP_RIGHT ; $0f
+ const FAST_STEP_DOWN2 ; $10
+ const FAST_STEP_UP2 ; $11
+ const FAST_STEP_LEFT2 ; $12
+ const FAST_STEP_RIGHT2 ; $13
+ const SLOW_JUMP_DOWN ; $14
+ const SLOW_JUMP_UP ; $15
+ const SLOW_JUMP_LEFT ; $16
+ const SLOW_JUMP_RIGHT ; $17
+ const JUMP_DOWN ; $18
+ const JUMP_UP ; $19
+ const JUMP_LEFT ; $1a
+ const JUMP_RIGHT ; $1b
+ const FAST_JUMP_DOWN ; $1c
+ const FAST_JUMP_UP ; $1d
+ const FAST_JUMP_LEFT ; $1e
+ const FAST_JUMP_RIGHT ; $1f
+ const FAST_JUMP_DOWN2 ; $20
+ const FAST_JUMP_UP2 ; $21
+ const FAST_JUMP_LEFT2 ; $22
+ const FAST_JUMP_RIGHT2 ; $23
+ const MOVEMENT_24 ; $24
+ const MOVEMENT_25 ; $25
+ const MOVEMENT_26 ; $26
+ const MOVEMENT_27 ; $27
+ const MOVEMENT_28 ; $28
+ const MOVEMENT_29 ; $29
+ const NO_MOVEMENT ; $2a
diff --git a/constants/sprite_constants.asm b/constants/sprite_constants.asm
index 50b5d84..c53866b 100644
--- a/constants/sprite_constants.asm
+++ b/constants/sprite_constants.asm
@@ -91,3 +91,5 @@
const SPRITE_59 ; 59 duplicate SPRITE_OLD_LINK_RECEPTIONIST
const SPRITE_EGG ; 5a
const SPRITE_BOULDER ; 5b
+
+SPRITE_TILE_SIZE EQU 64
diff --git a/engine/overworld/object_collision.asm b/engine/overworld/object_collision.asm
new file mode 100755
index 0000000..a04000b
--- /dev/null
+++ b/engine/overworld/object_collision.asm
@@ -0,0 +1,157 @@
+INCLUDE "constants.asm"
+
+SECTION "GetSpritesNextTile", ROMX[$774a], BANK[$01]
+
+; Get the tile that the sprite will walk onto next
+GetSpritesNextTile: ; 01:774a
+ ld hl, OBJECT_NEXT_MAP_X
+ add hl, bc
+ ld d, [hl]
+ ld hl, OBJECT_NEXT_MAP_Y
+ add hl, bc
+ ld e, [hl]
+ push bc
+ call GetCoordTile
+ pop bc
+ ret
+
+; Sets carry flag if the object (bc) next tile is a collision
+_IsObjectCollisionTileSolid: ; 01:775a
+ call GetSpritesNextTile
+ ld e, a
+ ld d, 0
+ ld hl, CollisionTypeTable
+ add hl, de
+ ld a, BANK(CollisionTypeTable)
+ call GetFarByte
+ and ALWAYS_SOLID ; also covers SOMETIMES_SOLID
+ ret z
+ scf
+ ret
+
+
+
+SECTION "_CheckObjectCollision", ROMX[$77dd], BANK[$01]
+
+; returns the carry flag if a sprite is at coords d, e
+; will not collide with sprite index stored in hEventCollisionException
+_CheckObjectCollision: ; 01:77dd
+ ld bc, wObjectStructs
+ xor a
+.loop
+ ldh [hObjectStructIndexBuffer], a
+ ld hl, OBJECT_SPRITE
+ add hl, bc
+ ld a, [hl]
+ and a
+ jr z, .next
+ ld hl, OBJECT_NEXT_MAP_X
+ add hl, bc
+ ld a, [hl]
+ cp d
+ jr nz, .check_last_position
+ ld hl, OBJECT_NEXT_MAP_Y
+ add hl, bc
+ ld a, [hl]
+ cp e
+ jr nz, .check_last_position
+ ldh a, [hEventCollisionException]
+ ld l, a
+ ldh a, [hObjectStructIndexBuffer]
+ cp l
+ jr nz, .collision
+.check_last_position
+ ld hl, OBJECT_MAP_X
+ add hl, bc
+ ld a, [hl]
+ cp d
+ jr nz, .next
+ ld hl, OBJECT_MAP_Y
+ add hl, bc
+ ld a, [hl]
+ cp e
+ jr nz, .next
+ ldh a, [hEventCollisionException]
+ ld l, a
+ ldh a, [hObjectStructIndexBuffer]
+ cp l
+ jr nz, .collision
+.next
+ ld hl, OBJECT_LENGTH
+ add hl, bc
+ ld b, h
+ ld c, l
+ ldh a, [hObjectStructIndexBuffer]
+ inc a
+ cp NUM_OBJECT_STRUCTS
+ jr nz, .loop
+ and a
+ ret
+
+.collision
+ scf
+ ret
+
+SECTION "_CheckPlayerObjectCollision", ROMX[$7894], BANK[$01]
+
+; Sets the carry flag if the player will collide with another sprite's current or next position
+_CheckPlayerObjectCollision: ; 01:7894
+ ld a, [wPlayerNextMapX]
+ ld d, a
+ ld a, [wPlayerNextMapY]
+ ld e, a
+ ld bc, wObjectStructs
+ xor a
+
+.loop
+ ldh [hObjectStructIndexBuffer], a
+ ld hl, OBJECT_SPRITE
+ add hl, bc
+ ld a, [hl]
+ and a
+ jr z, .next
+ ld hl, OBJECT_NEXT_MAP_Y
+ add hl, bc
+ ld a, [hl]
+ cp e
+ jr nz, .check_last_position
+ ld hl, OBJECT_NEXT_MAP_X
+ add hl, bc
+ ld a, [hl]
+ cp d
+ jr nz, .check_last_position
+
+; skip the player sprite
+ ldh a, [hObjectStructIndexBuffer]
+ cp PLAYER_OBJECT_INDEX
+ jr z, .next
+ jr .collision
+
+.check_last_position
+ ld hl, OBJECT_MAP_Y
+ add hl, bc
+ ld a, [hl]
+ cp e
+ jr nz, .next
+ ld hl, OBJECT_MAP_X
+ add hl, bc
+ ld a, [hl]
+ cp d
+ jr nz, .next
+ jr .collision
+
+.next
+ ld hl, OBJECT_LENGTH
+ add hl, bc
+ ld b, h
+ ld c, l
+ ldh a, [hObjectStructIndexBuffer]
+ inc a
+ cp NUM_OBJECT_STRUCTS
+ jr nz, .loop
+ xor a
+ ret
+
+.collision
+ scf
+ ret
diff --git a/engine/overworld/player_movement.asm b/engine/overworld/player_movement.asm
index 44938aa..0fcd6e9 100644
--- a/engine/overworld/player_movement.asm
+++ b/engine/overworld/player_movement.asm
@@ -2,15 +2,15 @@ INCLUDE "constants.asm"
SECTION "Player Movement", ROMX[$4000], BANK[$3]
-OverworldMovementCheck::
+OverworldMovementCheck:: ; 03:4000
jp _OverworldMovementCheck
-UnusedOverworldMovementCheck::
- ld a, $01
+UnusedOverworldMovementCheck:: ; 03:4003
+ ld a, PLAYER_OBJECT_INDEX
ldh [hEventCollisionException], a
ld a, [wPlayerDirection]
and a
- jr z, _SetPlayerIdle ; player movement is disabled
+ jr z, SetPlayerIdle ; player movement is disabled
ldh a, [hJoyState]
ld d, a
ld hl, wce63
@@ -21,183 +21,188 @@ UnusedOverworldMovementCheck::
.skip_debug_move
ld a, [wPlayerState]
cp PLAYER_SKATE
- jp z, OldCheckMovementSkateboard
+ jp z, CheckMovementSkateboard
cp PLAYER_SURF
jp z, OldCheckMovementSurf
jp CheckMovementWalkOrBike
-_SetPlayerIdle:
- ld a, $2a
-_SetPlayerAnimation:
- ld [wcb77], a
+
+SetPlayerIdle: ; 03:402c
+ ld a, NO_MOVEMENT
+
+SetPlayerMovement: ; 03:402e
+ ld [wPlayerMovement], a
ld a, [wPlayerLastMapX]
- ld [wPlayerStandingMapX], a
+ ld [wPlayerNextMapX], a
ld a, [wPlayerLastMapY]
- ld [wPlayerStandingMapY], a
+ ld [wPlayerNextMapY], a
and a
ret
-CheckMovementWalkOrBike:
+CheckMovementWalkOrBike: ; 03:403f
call _CheckMovementWalkOrBike
- jp _SetPlayerAnimation
+ jp SetPlayerMovement
-_CheckMovementWalkOrBike:
+_CheckMovementWalkOrBike: ; 03:4045
ld a, d
- and (D_DOWN | D_UP | D_LEFT | D_RIGHT)
- jp z, .done
+ and D_PAD
+ jp z, .idle
ld a, d
bit D_DOWN_F, a
- jp nz, .moveDown
+ jp nz, .check_down
bit D_UP_F, a
- jp nz, .moveUp
+ jp nz, .check_up
bit D_LEFT_F, a
- jp nz, .moveLeft
+ jp nz, .check_left
bit D_RIGHT_F, a
- jr nz, .moveRight
-.done:
- ld a, $2a
+ jr nz, .check_right
+.idle
+ ld a, NO_MOVEMENT
ret
-.moveRight:
+
+.check_right
ld a, [wPlayerLastMapX]
inc a
- ld [wPlayerStandingMapX], a
- call _CheckPlayerObjectCollision
- jr c, .faceRight
+ ld [wPlayerNextMapX], a
+ call CheckPlayerObjectCollision
+ jr c, .face_right
call IsPlayerCollisionTileSolid
- jr nc, .canMoveRight
- jr .faceRight
-.canMoveRight
+ jr nc, .move_right
+ jr .face_right
+.move_right
ld a, [wPlayerState]
cp PLAYER_BIKE
- ld a, $0f
+ ld a, FAST_STEP_RIGHT
ret z
- ld a, $0b
+ ld a, STEP_RIGHT
ret
-.faceRight:
- ld a, $03
+.face_right
+ ld a, FACE_RIGHT
ret
-.moveLeft:
+.check_left:
ld a, [wPlayerLastMapX]
dec a
- ld [wPlayerStandingMapX], a
- call _CheckPlayerObjectCollision
- jr c, .faceLeft
+ ld [wPlayerNextMapX], a
+ call CheckPlayerObjectCollision
+ jr c, .face_left
call IsPlayerCollisionTileSolid
- jr nc, .canMoveLeft
- jr .faceLeft
-.canMoveLeft
+ jr nc, .move_left
+ jr .face_left
+.move_left
ld a, [wPlayerState]
cp PLAYER_BIKE
- ld a, $0e
+ ld a, FAST_STEP_LEFT
ret z
- ld a, $0a
+ ld a, STEP_LEFT
ret
-.faceLeft:
- ld a, $02
+.face_left
+ ld a, FACE_LEFT
ret
-.moveDown:
+.check_down
ld a, [wPlayerLastMapY]
inc a
- ld [wPlayerStandingMapY], a
- call _CheckPlayerObjectCollision
- jr c, .faceDown
+ ld [wPlayerNextMapY], a
+ call CheckPlayerObjectCollision
+ jr c, .face_down
call IsPlayerCollisionTileSolid
- jr nc, .canMoveDown
+ jr nc, .move_down
cp OLD_COLLISION_LEDGE
- jr nz, .faceDown
-.jumpDown:
- ld a, $18
+ jr nz, .face_down
+ ld a, JUMP_DOWN
ret
-.canMoveDown
+.move_down
ld a, [wPlayerState]
cp PLAYER_BIKE
- ld a, $0c
+ ld a, FAST_STEP_DOWN
ret z
- ld a, $08
+ ld a, STEP_DOWN
ret
-.faceDown:
- ld a, $00
+.face_down
+ ld a, FACE_DOWN
ret
-.moveUp:
+.check_up
ld a, [wPlayerLastMapY]
dec a
- ld [wPlayerStandingMapY], a
- call _CheckPlayerObjectCollision
- jr c, .faceUp
+ ld [wPlayerNextMapY], a
+ call CheckPlayerObjectCollision
+ jr c, .face_up
call IsPlayerCollisionTileSolid
- jr nc, .canMoveUp
- jr .faceUp
-.canMoveUp
+ jr nc, .move_up
+ jr .face_up
+.move_up
ld a, [wPlayerState]
cp PLAYER_BIKE
- ld a, $0d
+ ld a, FAST_STEP_UP
ret z
- ld a, $09
+ ld a, STEP_UP
ret
-.faceUp:
- ld a, $01
+.face_up
+ ld a, FACE_UP
ret
-CheckMovementDebug::
+CheckMovementDebug:: ; 03:40eb
ld a, d
call _CheckMovementDebug
- jp _SetPlayerAnimation
+ jp SetPlayerMovement
-_CheckMovementDebug:
+_CheckMovementDebug: ; 03:40f2
bit D_DOWN_F, a
- jr nz, .moveDown
+ jr nz, .move_down
bit D_UP_F, a
- jr nz, .moveUp
+ jr nz, .move_up
bit D_LEFT_F, a
- jr nz, .moveLeft
+ jr nz, .move_left
bit D_RIGHT_F, a
- jr nz, .moveRight
-.idle:
- ld a, $2a
+ jr nz, .move_right
+ ld a, NO_MOVEMENT
ret
-.moveDown:
+
+.move_down
ld a, [wTileDown]
- cp $ff
- ld a, $0c
+ cp -1
+ ld a, FAST_STEP_DOWN
ret nz
- ld a, $19
+ ld a, JUMP_UP
ret
-.moveUp:
+
+.move_up
ld a, [wTileUp]
- cp $ff
- ld a, $0d
+ cp -1
+ ld a, FAST_STEP_UP
ret nz
- ld a, $18
+ ld a, JUMP_DOWN
ret
-.moveLeft:
+
+.move_left
ld a, [wTileLeft]
- cp $ff
- ld a, $0e
+ cp -1
+ ld a, FAST_STEP_LEFT
ret nz
- ld a, $1b
+ ld a, JUMP_RIGHT
ret
-.moveRight:
+
+.move_right
ld a, [wTileRight]
- cp $ff
- ld a, $0f
+ cp -1
+ ld a, FAST_STEP_RIGHT
ret nz
- ld a, $1a
+ ld a, JUMP_LEFT
ret
-OldCheckMovementSkateboard::
- call _OldCheckMovementSkateboard
- jp _SetPlayerAnimation
+CheckMovementSkateboard:: ; 03:4131
+ call _CheckMovementSkateboard
+ jp SetPlayerMovement
-_OldCheckMovementSkateboard:
+_CheckMovementSkateboard: ; 03:4137
ld a, [wSkatingDirection]
- cp $ff
- jp z, .skateStand
+ cp STANDING
+ jp z, .not_moving
push de
ld e, a
ld d, $00
- ld hl, .skateMovementTable
+ ld hl, .SkateMovementTable
add hl, de
add hl, de
ld a, [hli]
@@ -205,149 +210,161 @@ _OldCheckMovementSkateboard:
ld l, a
pop de
jp hl
-.skateMovementTable:
- dw .skateDown
- dw .skateUp
- dw .skateLeft
- dw .skateRight
-.skateStand:
+.SkateMovementTable ; 03:414d
+ dw CheckSkateDown
+ dw CheckSkateUp
+ dw CheckSkateLeft
+ dw CheckSkateRight
+
+.not_moving ; 03:4155
ld a, d
- and (D_DOWN | D_UP | D_LEFT | D_RIGHT)
- jp z, .done
+ and D_PAD
+ jp z, .idle
bit D_DOWN_F, d
- jp nz, .skateDown
+ jp nz, CheckSkateDown
bit D_UP_F, d
- jp nz, .skateUp
+ jp nz, CheckSkateUp
bit D_LEFT_F, d
- jp nz, .skateLeft
+ jp nz, CheckSkateLeft
bit D_RIGHT_F, d
- jp nz, .skateRight
-.done:
- ld a, $ff
+ jp nz, CheckSkateRight
+
+.idle
+ ld a, STANDING
ld [wSkatingDirection], a
- ld a, $2a
+ ld a, NO_MOVEMENT
ret
-.skateDown:
+CheckSkateDown: ; 03:4177
ld a, [wPlayerLastMapY]
inc a
- ld [wPlayerStandingMapY], a
- ld a, $00
+ ld [wPlayerNextMapY], a
+ ld a, DOWN
ld [wSkatingDirection], a
- call _CheckPlayerObjectCollision
- jr c, .skateDownCollision
+ call CheckPlayerObjectCollision
+ jr c, .collision
call IsPlayerCollisionTileSolid
- jr nc, .canSkateDown
+ jr nc, .can_skate
cp OLD_COLLISION_LEDGE
- jr z, .skateJumpDown
+ jr z, .jump
cp (OLD_COLLISION_ROCK | COLLISION_FLAG)
- jr nz, .skateDownCollision
-.skateJumpDown:
- ld a, $1c
+ jr nz, .collision
+
+.jump
+ ld a, FAST_JUMP_DOWN
ret
-.canSkateDown:
+
+.can_skate
call OldIsTileCollisionGrass
- jr z, .skateDownSlowly
- ld a, $0c
+ jr z, .slow
+ ld a, FAST_STEP_DOWN
ret
-.skateDownSlowly:
- ld a, $08
+
+.slow
+ ld a, STEP_DOWN
ret
-.skateDownCollision:
- ld a, $ff
+
+.collision
+ ld a, STANDING
ld [wSkatingDirection], a
- ld a, $00
+ ld a, FACE_DOWN
ret
-.skateUp:
+CheckSkateUp: ; 03:41ab
ld a, [wPlayerLastMapY]
dec a
- ld [wPlayerStandingMapY], a
- ld a, $01
+ ld [wPlayerNextMapY], a
+ ld a, UP
ld [wSkatingDirection], a
- call _CheckPlayerObjectCollision
- jr c, .skateUpCollision
+ call CheckPlayerObjectCollision
+ jr c, .collision
call IsPlayerCollisionTileSolid
- jr nc, .canSkateUp
- cp $59
- jr nz, .skateUpCollision
-.skateJumpUp:
- ld a, $1d
+ jr nc, .can_skate
+ cp (OLD_COLLISION_ROCK | COLLISION_FLAG)
+ jr nz, .collision
+ ld a, FAST_JUMP_UP
ret
-.canSkateUp:
+
+.can_skate
call OldIsTileCollisionGrass
- jr z, .skateUpSlowly
- ld a, $0d
+ jr z, .slow
+ ld a, FAST_STEP_UP
ret
-.skateUpSlowly:
- ld a, $09
+
+.slow
+ ld a, STEP_UP
ret
-.skateUpCollision:
- ld a, $ff
+
+.collision
+ ld a, STANDING
ld [wSkatingDirection], a
- ld a, $01
+ ld a, FACE_UP
ret
-.skateLeft:
+CheckSkateLeft: ; 03:41db
ld a, [wPlayerLastMapX]
dec a
- ld [wPlayerStandingMapX], a
- ld a, $02
+ ld [wPlayerNextMapX], a
+ ld a, LEFT
ld [wSkatingDirection], a
- call _CheckPlayerObjectCollision
- jr c, .skateLeftCollision
+ call CheckPlayerObjectCollision
+ jr c, .collision
call IsPlayerCollisionTileSolid
- jr nc, .canSkateLeft
- cp $59
- jr nz, .skateLeftCollision
-.skateJumpLeft:
- ld a, $1e
+ jr nc, .can_skate
+ cp (OLD_COLLISION_ROCK | COLLISION_FLAG)
+ jr nz, .collision
+ ld a, FAST_JUMP_LEFT
ret
-.canSkateLeft:
+
+.can_skate
call OldIsTileCollisionGrass
- jr z, .skateLeftSlowly
- ld a, $0e
+ jr z, .slow
+ ld a, FAST_STEP_LEFT
ret
-.skateLeftSlowly:
- ld a, $0a
+
+.slow
+ ld a, STEP_LEFT
ret
-.skateLeftCollision:
- ld a, $ff
+
+.collision
+ ld a, STANDING
ld [wSkatingDirection], a
- ld a, $02
+ ld a, FACE_LEFT
ret
-.skateRight:
+CheckSkateRight: ; 03:420b
ld a, [wPlayerLastMapX]
inc a
- ld [wPlayerStandingMapX], a
- ld a, $03
+ ld [wPlayerNextMapX], a
+ ld a, RIGHT
ld [wSkatingDirection], a
- call _CheckPlayerObjectCollision
- jr c, .skateRightCollision
+ call CheckPlayerObjectCollision
+ jr c, .collision
call IsPlayerCollisionTileSolid
- jr nc, .canSkateRight
- cp $59
- jr nz, .skateRightCollision
-.skateJumpRight:
- ld a, $1f
+ jr nc, .can_skate
+ cp (OLD_COLLISION_ROCK | COLLISION_FLAG)
+ jr nz, .collision
+ ld a, FAST_JUMP_RIGHT
ret
-.canSkateRight:
+
+.can_skate
call OldIsTileCollisionGrass
- jr z, .skateRightSlowly
- ld a, $0f
+ jr z, .slow
+ ld a, FAST_STEP_RIGHT
ret
-.skateRightSlowly:
- ld a, $0b
+
+.slow
+ ld a, STEP_RIGHT
ret
-.skateRightCollision:
- ld a, $ff
+
+.collision
+ ld a, STANDING
ld [wSkatingDirection], a
- ld a, $03
+ ld a, FACE_RIGHT
ret
-OldIsTileCollisionGrass::
+OldIsTileCollisionGrass:: ; 03:423b
; Check whether collision ID in a is
; grass
; Result:
@@ -362,114 +379,109 @@ OldIsTileCollisionGrass::
cp $8b
ret
-OldCheckMovementSurf::
+OldCheckMovementSurf:: ; 03:4247
call _OldCheckMovementSurf
- jp _SetPlayerAnimation
+ jp SetPlayerMovement
-_OldCheckMovementSurf:
+_OldCheckMovementSurf: ; 03:424d
ld a, d
- and (D_DOWN | D_UP | D_LEFT | D_RIGHT)
+ and D_PAD
bit D_DOWN_F, a
- jp nz, .trySurfDown
+ jp nz, .check_down
bit D_UP_F, a
- jp nz, .trySurfUp
+ jp nz, .check_up
bit D_LEFT_F, a
- jp nz, .trySurfLeft
+ jp nz, .check_left
bit D_RIGHT_F, a
- jr nz, .trySurfRight
-.idle:
- ld a, $2a
+ jr nz, .check_right
+ ld a, NO_MOVEMENT
ret
-.trySurfDown:
+.check_down
ld a, [wPlayerLastMapY]
inc a
- ld [wPlayerStandingMapY], a
- call _CheckPlayerObjectCollision
- jr c, .faceDown
+ ld [wPlayerNextMapY], a
+ call CheckPlayerObjectCollision
+ jr c, .face_down
call IsPlayerCollisionTileSolid
- jr nc, .surfDownLand ; FIXME: This assumes cut-trees are solid, which they aren't.
- ; You can walk into them from water because of this.
+ jr nc, .exit_water_down ; FIXME: This assumes cut-trees are solid, which they aren't.
+ ; You can walk into them from water because of this.
call OldIsTileCollisionWater
- jr c, .faceDown
-.surfDown:
- ld a, $08
+ jr c, .face_down
+ ld a, STEP_DOWN
ret
-.faceDown:
- ld a, $00
+.face_down
+ ld a, FACE_DOWN
ret
-.surfDownLand:
+.exit_water_down
call SetPlayerStateWalk
- ld a, $04
+ ld a, SLOW_STEP_DOWN
ret
-.trySurfUp:
+.check_up
ld a, [wPlayerLastMapY]
dec a
- ld [wPlayerStandingMapY], a
- call _CheckPlayerObjectCollision
- jr c, .faceUp
+ ld [wPlayerNextMapY], a
+ call CheckPlayerObjectCollision
+ jr c, .face_up
call IsPlayerCollisionTileSolid
- jr nc, .surfUpLand ; FIXME: This assumes cut-trees are solid, which they aren't.
- ; You can walk into them from water because of this.
+ jr nc, .exit_water_up ; FIXME: This assumes cut-trees are solid, which they aren't.
+ ; You can walk into them from water because of this.
call OldIsTileCollisionWater
- jr c, .faceUp
-.surfUp:
- ld a, $09
+ jr c, .face_up
+ ld a, STEP_UP
ret
-.faceUp:
- ld a, $01
+.face_up
+ ld a, FACE_UP
ret
-.surfUpLand:
+.exit_water_up
call SetPlayerStateWalk
- ld a, $05
+ ld a, SLOW_STEP_UP
ret
-.trySurfLeft:
+.check_left
ld a, [wPlayerLastMapX]
dec a
- ld [wPlayerStandingMapX], a
- call _CheckPlayerObjectCollision
- jr c, .faceLeft
+ ld [wPlayerNextMapX], a
+ call CheckPlayerObjectCollision
+ jr c, .face_left
call IsPlayerCollisionTileSolid
- jr nc, .surfLeftLand ; FIXME: This assumes cut-trees are solid, which they aren't.
- ; You can walk into them from water because of this.
+ jr nc, .exit_water_left ; FIXME: This assumes cut-trees are solid, which they aren't.
+ ; You can walk into them from water because of this.
call OldIsTileCollisionWater
- jr c, .faceLeft
-.surfLeft:
- ld a, $0a
+ jr c, .face_left
+ ld a, STEP_LEFT
ret
-.faceLeft:
- ld a, $02
+.face_left
+ ld a, FACE_LEFT
ret
-.surfLeftLand
+.exit_water_left
call SetPlayerStateWalk
- ld a, $06
+ ld a, SLOW_STEP_LEFT
ret
-.trySurfRight
+.check_right
ld a, [wPlayerLastMapX]
inc a
- ld [wPlayerStandingMapX], a
- call _CheckPlayerObjectCollision
- jr c, .faceRight
+ ld [wPlayerNextMapX], a
+ call CheckPlayerObjectCollision
+ jr c, .face_right
call IsPlayerCollisionTileSolid
- jr nc, .surfRightLand ; FIXME: This assumes cut-trees are solid, which they aren't.
+ jr nc, .exit_water_right ; FIXME: This assumes cut-trees are solid, which they aren't.
; You can walk into them from water because of this.
call OldIsTileCollisionWater
- jr c, .faceRight
-.surfRight:
- ld a, $0b
+ jr c, .face_right
+ ld a, STEP_RIGHT
ret
-.faceRight:
- ld a, $03
+.face_right
+ ld a, FACE_RIGHT
ret
-.surfRightLand
+.exit_water_right
call SetPlayerStateWalk
- ld a, $07
+ ld a, SLOW_STEP_RIGHT
ret
-OldIsTileCollisionWater:: ; c2ee (3:42ee)
+OldIsTileCollisionWater:: ; 03:42ee
; Check if collision ID in a is water
; Input:
; a - collision ID
@@ -484,7 +496,7 @@ OldIsTileCollisionWater:: ; c2ee (3:42ee)
scf
ret
-SetPlayerStateWalk::
+SetPlayerStateWalk:: ; 03:42f8
push bc
ld a, PLAYER_NORMAL
ld [wPlayerState], a
@@ -492,7 +504,7 @@ SetPlayerStateWalk::
pop bc
ret
-IsPlayerCollisionTileSolid::
+IsPlayerCollisionTileSolid:: ; 03:4303
; Return whether the collision under player's feet
; is solid/sometimes solid or non-solid.
; Clobbers: a
@@ -502,64 +514,60 @@ IsPlayerCollisionTileSolid::
; c - solid/sometimes solid
push de
ld bc, wPlayerStruct
- ld hl, $775a
- ld a, $01
- call FarCall_hl
+ callab _IsObjectCollisionTileSolid
ld a, e
pop de
ret
-_CheckPlayerObjectCollision::
+CheckPlayerObjectCollision:: ; 03:4312
; Check whether player object currentl
; collides with any other object.
; Result:
; nc - no collision
; c - collision
push de
- ld hl, $7894
- ld a, $01
- call FarCall_hl
+ callab _CheckPlayerObjectCollision
pop de
ret nc
- jp _CheckCompanionObjectCollision
+ jp CheckCompanionObjectCollision
-_CheckCompanionObjectCollision::
+CheckCompanionObjectCollision:: ; 03:4320
; Marks the object struct pointed to by hl
; as having collided with player object.
-; If object struct (as identified by hEventID)
+; If object struct (as identified by hObjectStructIndexBuffer)
; is companion, cancel collision on 5th frames.
; Result:
; nc - no collision
; c - collision
- ld hl, (wPlayerFlags + 1) - wPlayerStruct
+ ld hl, OBJECT_FLAGS + 1
add hl, bc
set 1, [hl] ; mark object as having collided with player
- ldh a, [hEventID]
- cp $02
- jr z, .isCompanion
+ ldh a, [hObjectStructIndexBuffer]
+ cp COMPANION_OBJECT_INDEX
+ jr z, .is_companion
xor a
ld [wCompanionCollisionFrameCounter], a
scf
ret
-.isCompanion
+.is_companion
ld a, [wCompanionCollisionFrameCounter]
inc a
- cp $05
+ cp 5
ld [wCompanionCollisionFrameCounter], a
- jr z, .cancelCollision
+ jr z, .cancel_collision
scf
ret
-.cancelCollision
+.cancel_collision
xor a
ld [wCompanionCollisionFrameCounter], a
ret
-_OverworldMovementCheck::
- ld a, $01
+_OverworldMovementCheck:: ; 03:4344
+ ld a, PLAYER_OBJECT_INDEX
ldh [hEventCollisionException], a
ld a, [wPlayerDirection]
and a
- jp z, _SetPlayerIdle
+ jp z, SetPlayerIdle
ldh a, [hJoyState]
ld d, a
ld hl, wce63
@@ -567,28 +575,29 @@ _OverworldMovementCheck::
jr z, .skip_debug_move
bit B_BUTTON_F, d
jp nz, CheckMovementDebug
+
.skip_debug_move
- call .checkMovementRelease
- jp _SetPlayerAnimation
+ call GetPlayerMovementByState
+ jp SetPlayerMovement
-.checkMovementRelease:
+GetPlayerMovementByState: ; 03:4364
ld a, [wPlayerState]
cp PLAYER_SKATE
- jp z, OldCheckMovementSkateboard ; FIXME: OldCheckMovementSkateboard already calls _SetPlayerAnimation
+ jp z, CheckMovementSkateboard ; FIXME: CheckMovementSkateboard already calls SetPlayerMovement
; The skateboard doesn't work, because it uses the current
; coordinate as player animation.
cp PLAYER_SURF
jp z, CheckMovementSurf
jp CheckMovementWalk
-CheckMovementWalk::
+CheckMovementWalk:: ; 03:4374
ld a, [wPlayerStandingTile]
swap a
and LOW((COLLISION_TYPE_MASK >> 4) | (COLLISION_TYPE_MASK << 4))
- ld hl, .walkingCollisionTable
+ ld hl, .WalkingCollisionTable
jp CallJumptable
-.walkingCollisionTable:
+.WalkingCollisionTable ; 03:4381
dw CheckMovementWalkRegular ; regular
dw CheckMovementWalkSolid ; trees, grass, etc.
dw CheckMovementWalkSolid ; water
@@ -606,288 +615,288 @@ CheckMovementWalk::
dw CheckMovementWalkRegular ; unused
dw CheckMovementWalkRegular ; unused
-_MovementDone:
- ld a, $2a
+NoWalkMovement: ; 03:43a1
+ ld a, NO_MOVEMENT
ret
-CheckMovementWalkSolid::
+CheckMovementWalkSolid:: ; 03:43a4
jp CheckMovementWalkRegular
-CheckMovementWalkLand::
+CheckMovementWalkLand:: ; 03:43a7
ld a, [wPlayerStandingTile]
and COLLISION_SUBTYPE_MASK
- jr nz, .slowdown
+ jr nz, .force_movement
call CheckMovementWalkRegular
- call .slowMovementDown
+ call SlowDownMovementWalk
ret
-.slowdown
- ld b, $08
+
+.force_movement
+ ld b, STEP_DOWN
cp (COLLISION_LAND_S & COLLISION_SUBTYPE_MASK)
- jr z, .slowdownDone
- ld b, $09
+ jr z, .finish
+ ld b, STEP_UP
cp (COLLISION_LAND_N & COLLISION_SUBTYPE_MASK)
- jr z, .slowdownDone
- ld b, $0a
+ jr z, .finish
+ ld b, STEP_LEFT
cp (COLLISION_LAND_W & COLLISION_SUBTYPE_MASK)
- jr z, .slowdownDone
- ld b, $0b
+ jr z, .finish
+ ld b, STEP_RIGHT
cp (COLLISION_LAND_E & COLLISION_SUBTYPE_MASK)
- jr z, .slowdownDone
+ jr z, .finish
; fall-through --> map other codes to COLLISION_LAND_E
-.slowdownDone
+.finish
ld a, b
ret
-.slowMovementDown:
- ld b, $04
- cp $08
- jr z, .slowMovementDownDone
- ld b, $05
- cp $09
- jr z, .slowMovementDownDone
- ld b, $06
- cp $0a
- jr z, .slowMovementDownDone
- ld b, $07
- cp $0b
- jr z, .slowMovementDownDone
- ret
-.slowMovementDownDone
+
+SlowDownMovementWalk: ; 03:43cf
+ ld b, SLOW_STEP_DOWN
+ cp STEP_DOWN
+ jr z, .finish
+ ld b, SLOW_STEP_UP
+ cp STEP_UP
+ jr z, .finish
+ ld b, SLOW_STEP_LEFT
+ cp STEP_LEFT
+ jr z, .finish
+ ld b, SLOW_STEP_RIGHT
+ cp STEP_RIGHT
+ jr z, .finish
+ ret
+.finish
ld a, b
ret
-CheckMovementWalkLand2::
+CheckMovementWalkLand2:: ; 03:43ea
ld a, [wPlayerStandingTile]
and COLLISION_SUBTYPE_MASK
- ld b, $08
+ ld b, STEP_DOWN
cp (COLLISION_LAND2_S & COLLISION_SUBTYPE_MASK)
- jr z, .done
- ld b, $09
+ jr z, .finish
+ ld b, STEP_UP
cp (COLLISION_LAND2_N & COLLISION_SUBTYPE_MASK)
- jr z, .done
- ld b, $0a
+ jr z, .finish
+ ld b, STEP_LEFT
cp (COLLISION_LAND2_W & COLLISION_SUBTYPE_MASK)
- jr z, .done
- ld b, $0b
+ jr z, .finish
+ ld b, STEP_RIGHT
cp (COLLISION_LAND2_E & COLLISION_SUBTYPE_MASK)
- jr z, .done
+ jr z, .finish
; fall-through --> map other codes to COLLISION_LAND2_E
-.done
+.finish
ld a, b
ret
-UnusedCheckMovementWalk60::
+UnusedCheckMovementWalk60:: ; 03:4409
jp CheckMovementWalkRegular
-CheckMovementWalkWarp::
+CheckMovementWalkWarp:: ; 03:440c
ld a, [wPlayerStandingTile]
and COLLISION_SUBTYPE_MASK
- jr z, .exitWarpDpadDirection
- cp $01
- jr z, .exitWarpDownNoBoundsCheck
+ jr z, .check_dpad
+ cp 1
+ jr z, .move_down
ld a, [wPlayerStandingTile]
cp $7a
- jr z, .exitWarpDownNoBoundsCheck
+ jr z, .move_down
jp CheckMovementWalkRegular
-.exitWarpDownNoBoundsCheck
- ld a, $08
+.move_down
+ ld a, STEP_DOWN
ret
-.exitWarpDpadDirection
+
+.check_dpad
ldh a, [hJoyState]
bit D_DOWN_F, a
- jr nz, .exitWarpDown
+ jr nz, .down
bit D_UP_F, a
- jr nz, .exitWarpUp
+ jr nz, .up
bit D_LEFT_F, a
- jr nz, .exitWarpLeft
+ jr nz, .left
bit D_RIGHT_F, a
- jr nz, .exitWarpRight
- jp _MovementDone
-.exitWarpDown
+ jr nz, .right
+ jp NoWalkMovement
+
+.down
ld a, [wTileDown]
- cp $ff
+ cp -1
jp nz, CheckMovementWalkRegular
- call z, _ReportMovementOutOfBounds
-.faceDown:
- ld a, $00
+ call z, .moved_out_of_bounds
+ ld a, FACE_DOWN
ret
-.exitWarpUp
+.up
ld a, [wTileUp]
- cp $ff
+ cp -1
jp nz, CheckMovementWalkRegular
- call z, _ReportMovementOutOfBounds
-.faceUp:
- ld a, $01
+ call z, .moved_out_of_bounds
+ ld a, FACE_UP
ret
-.exitWarpLeft
+.left
ld a, [wTileLeft]
- cp $ff
+ cp -1
jp nz, CheckMovementWalkRegular
- call z, _ReportMovementOutOfBounds
-.faceLeft:
- ld a, $02
+ call z, .moved_out_of_bounds
+ ld a, FACE_LEFT
ret
-.exitWarpRight
+.right
ld a, [wTileRight]
- cp $ff
+ cp -1
jp nz, CheckMovementWalkRegular
- call z, _ReportMovementOutOfBounds
-.faceRight:
- ld a, $03
+ call z, .moved_out_of_bounds
+ ld a, FACE_RIGHT
ret
-_ReportMovementOutOfBounds::
+.moved_out_of_bounds
ret
-CheckMovementWalkMisc::
+CheckMovementWalkMisc:: ; 03:4472
jp CheckMovementWalkRegular
-CheckMovementWalkSpecial::
+CheckMovementWalkSpecial:: ; 03:4475
jp CheckMovementWalkRegular
-CheckMovementWalkRegular::
+CheckMovementWalkRegular:: ; 03:4478
ldh a, [hJoyState]
bit D_DOWN_F, a
- jp nz, TryWalkDown
+ jp nz, CheckWalkDown
bit D_UP_F, a
- jp nz, TryWalkUp
+ jp nz, CheckWalkUp
bit D_LEFT_F, a
- jp nz, TryWalkLeft
+ jp nz, CheckWalkLeft
bit D_RIGHT_F, a
- jp nz, TryWalkRight
- jp _MovementDone
+ jp nz, CheckWalkRight
+ jp NoWalkMovement
-CheckMovementWalkJump:
+CheckMovementWalkJump: ; 03:4491
ldh a, [hJoyState]
bit D_DOWN_F, a
- jr nz, .checkJumpDown
+ jr nz, .down
bit D_UP_F, a
- jr nz, .checkJumpUp
+ jr nz, .up
bit D_LEFT_F, a
- jr nz, .checkJumpLeft
+ jr nz, .left
bit D_RIGHT_F, a
- jr nz, .checkJumpRight
- jp _MovementDone
-.checkJumpDown:
+ jr nz, .right
+ jp NoWalkMovement
+
+.down
ld a, [wPlayerStandingTile]
and COLLISION_SUBTYPE_MASK
cp (COLLISION_JUMP_S & COLLISION_SUBTYPE_MASK)
- jr z, .jumpDown
+ jr z, .jump_down
cp (COLLISION_JUMP_SE & COLLISION_SUBTYPE_MASK)
- jr z, .jumpDown
+ jr z, .jump_down
cp (COLLISION_JUMP_SW & COLLISION_SUBTYPE_MASK)
- jr z, .jumpDown
- jp TryWalkDown
-.jumpDown:
- ld a, $18
+ jr z, .jump_down
+ jp CheckWalkDown
+.jump_down
+ ld a, JUMP_DOWN
ret
-.checkJumpUp:
+
+.up
ld a, [wPlayerStandingTile]
and COLLISION_SUBTYPE_MASK
cp (COLLISION_JUMP_N & COLLISION_SUBTYPE_MASK)
- jr z, .jumpUp
+ jr z, .jump_up
cp (COLLISION_JUMP_NE & COLLISION_SUBTYPE_MASK)
- jr z, .jumpUp
+ jr z, .jump_up
cp (COLLISION_JUMP_NW & COLLISION_SUBTYPE_MASK)
- jr z, .jumpUp
- jp TryWalkUp
-.jumpUp:
- ld a, $19
+ jr z, .jump_up
+ jp CheckWalkUp
+.jump_up
+ ld a, JUMP_UP
ret
-.checkJumpLeft:
+
+.left
ld a, [wPlayerStandingTile]
and COLLISION_SUBTYPE_MASK
cp (COLLISION_JUMP_W & COLLISION_SUBTYPE_MASK)
- jr z, .jumpLeft
+ jr z, .jump_left
cp (COLLISION_JUMP_SW & COLLISION_SUBTYPE_MASK)
- jr z, .jumpLeft
+ jr z, .jump_left
cp (COLLISION_JUMP_NW & COLLISION_SUBTYPE_MASK)
- jr z, .jumpLeft
- jp TryWalkLeft
-.jumpLeft:
- ld a, $1a
+ jr z, .jump_left
+ jp CheckWalkLeft
+.jump_left
+ ld a, JUMP_LEFT
ret
-.checkJumpRight
+
+.right
ld a, [wPlayerStandingTile]
and COLLISION_SUBTYPE_MASK
cp (COLLISION_JUMP_E & COLLISION_SUBTYPE_MASK)
- jr z, .jumpRight
+ jr z, .jump_right
cp (COLLISION_JUMP_SE & COLLISION_SUBTYPE_MASK)
- jr z, .jumpRight
+ jr z, .jump_right
cp (COLLISION_JUMP_NE & COLLISION_SUBTYPE_MASK)
- jr z, .jumpRight
- jp TryWalkRight
-.jumpRight
- ld a, $1b
+ jr z, .jump_right
+ jp CheckWalkRight
+.jump_right
+ ld a, JUMP_RIGHT
ret
-TryWalkDown::
+CheckWalkDown:: ; 03:4502
ld d, 0
ld e, 1
- call _CheckObjectCollision
- jr c, .faceDown
+ call CheckObjectCollision
+ jr c, .face_down
ld a, [wTileDown]
call CheckCollisionSolid
- jr c, .faceDown
-.moveDown:
- ld a, $08
+ jr c, .face_down
+ ld a, STEP_DOWN
ret
-.faceDown:
- ld a, $00
+.face_down
+ ld a, FACE_DOWN
ret
-TryWalkUp::
+CheckWalkUp:: ; 03:4519
ld d, 0
ld e, -1
- call _CheckObjectCollision
- jr c, .faceUp
+ call CheckObjectCollision
+ jr c, .face_up
ld a, [wTileUp]
call CheckCollisionSolid
- jr c, .faceUp
-.moveUp:
- ld a, $09
+ jr c, .face_up
+ ld a, STEP_UP
ret
-.faceUp:
- ld a, $01
+.face_up
+ ld a, FACE_UP
ret
-TryWalkLeft::
+CheckWalkLeft:: ; 03:4530
ld d, -1
ld e, 0
- call _CheckObjectCollision
- jr c, .faceLeft
+ call CheckObjectCollision
+ jr c, .face_left
ld a, [wTileLeft]
call CheckCollisionSolid
- jr c, .faceLeft
-.moveLeft:
- ld a, $0a
+ jr c, .face_left
+ ld a, STEP_LEFT
ret
-.faceLeft:
- ld a, $02
+.face_left
+ ld a, FACE_LEFT
ret
-TryWalkRight::
+CheckWalkRight:: ; 03:4547
ld d, 1
ld e, 0
- call _CheckObjectCollision
- jr c, .faceRight
+ call CheckObjectCollision
+ jr c, .face_right
ld a, [wTileRight]
call CheckCollisionSolid
- jr c, .faceRight
-.moveRight:
- ld a, $0b
+ jr c, .face_right
+ ld a, STEP_RIGHT
ret
-.faceRight:
- ld a, $03
+.face_right
+ ld a, FACE_RIGHT
ret
-CheckMovementSurf::
+CheckMovementSurf:: ; 03:455e
ld a, [wPlayerStandingTile]
swap a
and LOW((COLLISION_TYPE_MASK >> 4) | (COLLISION_TYPE_MASK << 4))
- ld hl, .surfCollisionTable
+ ld hl, .SurfCollisionTable
jp CallJumptable
-.surfCollisionTable
+.SurfCollisionTable ; 03:456b
dw CheckMovementSurfRegular
dw CheckMovementSurfRegular
dw CheckMovementSurfWater
@@ -905,113 +914,114 @@ CheckMovementSurf::
dw CheckMovementSurfRegular
dw CheckMovementSurfRegular
-CheckMovementSurfRegular::
+CheckMovementSurfRegular:: ; 03:458b
ldh a, [hJoyState]
bit D_DOWN_F, a
- jp nz, TrySurfDown
+ jp nz, CheckSurfDown
bit D_UP_F, a
- jp nz, TrySurfUp
+ jp nz, CheckSurfUp
bit D_LEFT_F, a
- jp nz, TrySurfLeft
+ jp nz, CheckSurfLeft
bit D_RIGHT_F, a
- jp nz, TrySurfRight
- jp _MovementDone
+ jp nz, CheckSurfRight
+ jp NoWalkMovement
-CheckMovementSurfWater::
+CheckMovementSurfWater:: ; 03:45a4
ld a, [wPlayerStandingTile]
and COLLISION_SUBTYPE_MASK
cp (COLLISION_WATERFALL & COLLISION_SUBTYPE_MASK)
jr nz, CheckMovementSurfRegular
-.waterfall:
- ld a, $0c
+; waterfall
+ ld a, FAST_STEP_DOWN
ret
-CheckMovementSurfWater2::
+CheckMovementSurfWater2:: ; 03:45b0
ld a, [wPlayerStandingTile]
and COLLISION_WATER_SUBTYPE_MASK
- ld d, $0b
- jr z, .done ; COLLISION_WATER2_E
- ld d, $0a
+ ld d, STEP_RIGHT
+ jr z, .finish ; COLLISION_WATER2_E
+ ld d, STEP_LEFT
cp (COLLISION_WATER2_W & COLLISION_WATER_SUBTYPE_MASK)
- jr z, .done
- ld d, $09
+ jr z, .finish
+ ld d, STEP_UP
cp (COLLISION_WATER2_N & COLLISION_WATER_SUBTYPE_MASK)
- jr z, .done
- ld d, $08
+ jr z, .finish
+ ld d, STEP_DOWN
cp (COLLISION_WATER2_S & COLLISION_WATER_SUBTYPE_MASK)
- jr z, .done
+ jr z, .finish
; fall-through --> no aliasing due to mask
-.done
+.finish
ld a, d
ret
-TrySurfDown:
+CheckSurfDown: ; 03:45cd
ld d, 0
ld e, 1
- call _CheckObjectCollision
- jr c, .faceDown
+ call CheckObjectCollision
+ jr c, .face_down
ld a, [wTileDown]
call CheckCollisionSometimesSolid
- jr c, .faceDown ; FIXME: This assumes cut-trees are solid, which they aren't.
+ jr c, .face_down ; FIXME: This assumes cut-trees are solid, which they aren't.
; You can walk into them from water because of this.
call nz, SurfDismount
- ld a, $08
+ ld a, STEP_DOWN
ret
-.faceDown:
- ld a, $00
+.face_down
+ ld a, FACE_DOWN
ret
-TrySurfUp:
+CheckSurfUp: ; 03:45e7
ld d, 0
ld e, -1
- call _CheckObjectCollision
- jr c, .faceUp
+ call CheckObjectCollision
+ jr c, .face_up
ld a, [wTileUp]
call CheckCollisionSometimesSolid
- jr c, .faceUp ; FIXME: This assumes cut-trees are solid, which they aren't.
+ jr c, .face_up ; FIXME: This assumes cut-trees are solid, which they aren't.
; You can walk into them from water because of this.
call nz, SurfDismount
- ld a, $09
+ ld a, STEP_UP
ret
-.faceUp:
- ld a, $01
+.face_up
+ ld a, FACE_UP
ret
-TrySurfLeft:
+CheckSurfLeft: ; 03:4601
ld d, -1
ld e, 0
- call _CheckObjectCollision
- jr c, .faceLeft
+ call CheckObjectCollision
+ jr c, .face_left
ld a, [wTileLeft]
call CheckCollisionSometimesSolid
- jr c, .faceLeft ; FIXME: This assumes cut-trees are solid, which they aren't.
+ jr c, .face_left ; FIXME: This assumes cut-trees are solid, which they aren't.
; You can walk into them from water because of this.
call nz, SurfDismount
- ld a, $0a
+ ld a, STEP_LEFT
ret
-.faceLeft:
- ld a, $02
+.face_left
+ ld a, FACE_LEFT
ret
-TrySurfRight:
+CheckSurfRight: ; 03:461b
ld d, 1
ld e, 0
- call _CheckObjectCollision
- jr c, .faceRight
+ call CheckObjectCollision
+ jr c, .face_right
ld a, [wTileRight]
call CheckCollisionSometimesSolid
- jr c, .faceRight ; FIXME: This assumes cut-trees are solid, which they aren't.
+ jr c, .face_right ; FIXME: This assumes cut-trees are solid, which they aren't.
; You can walk into them from water because of this.
call nz, SurfDismount
- ld a, $0b
+ ld a, STEP_RIGHT
ret
-.faceRight:
- ld a, $03
+.face_right
+ ld a, FACE_RIGHT
ret
-SurfDismount:
+
+SurfDismount: ; 03:4635
jp SetPlayerStateWalk
-_CheckObjectCollision::
+CheckObjectCollision:: ; 03:4638
; Check if coordinates relative
; to player collide with another object
; Clobbers:
@@ -1021,20 +1031,18 @@ _CheckObjectCollision::
; Output:
; nc - no collision
; c - collision
-; hEventID - Event ID of colliding event
- ld a, $01
+; hObjectStructIndexBuffer - Event ID of colliding event
+ ld a, PLAYER_OBJECT_INDEX
ldh [hEventCollisionException], a
- ld a, [wPlayerStandingMapX]
+ ld a, [wPlayerNextMapX]
add d
ld d, a
- ld a, [wPlayerStandingMapY]
+ ld a, [wPlayerNextMapY]
add e
ld e, a
- ld hl, $77dd
- ld a, $01
- call FarCall_hl
+ callab _CheckObjectCollision
ret nc
- jp _CheckCompanionObjectCollision
+ jp CheckCompanionObjectCollision
CheckCollisionSolid::
; Checks whether collision ID in a
@@ -1064,27 +1072,90 @@ GetCollisionType::
; 01 - sometimes solid (cut tree, water etc.)
; 0F - always solid
push de
- ld hl, .collisionTypeTable
+ ld hl, CollisionTypeTable
ld e, a
- ld d, $00
+ ld d, 0
add hl, de
ld a, [hl]
pop de
ret
-.collisionTypeTable:
-INCBIN "data/collision/collision_type_table.bin"
-
-_UnusedReturnFalse::
+CollisionTypeTable: ; 03:4664
+ db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $00
+ db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, ALWAYS_SOLID ; $04
+ db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $08
+ db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, ALWAYS_SOLID ; $0C
+ db NEVER_SOLID, NEVER_SOLID, SOMETIMES_SOLID, NEVER_SOLID ; $10
+ db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $14
+ db NEVER_SOLID, NEVER_SOLID, SOMETIMES_SOLID, NEVER_SOLID ; $18
+ db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $1C
+ db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID ; $20
+ db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, ALWAYS_SOLID ; $24
+ db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID ; $28
+ db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, ALWAYS_SOLID ; $30
+ db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID ; $34
+ db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID ; $38
+ db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID ; $3C
+ db SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID, SOMETIMES_SOLID ; $40
+ db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $44
+ db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $48
+ db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $4C
+ db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $50
+ db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $54
+ db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $58
+ db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $5C
+ db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $60
+ db NEVER_SOLID, NEVER_SOLID, ALWAYS_SOLID, NEVER_SOLID ; $64
+ db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $68
+ db NEVER_SOLID, NEVER_SOLID, ALWAYS_SOLID, NEVER_SOLID ; $6C
+ db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $70
+ db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $74
+ db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $78
+ db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $7C
+ db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $80
+ db ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID ; $84
+ db ALWAYS_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $88
+ db ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID ; $8C
+ db ALWAYS_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $90
+ db ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID ; $94
+ db ALWAYS_SOLID, ALWAYS_SOLID, NEVER_SOLID, ALWAYS_SOLID ; $98
+ db ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID, ALWAYS_SOLID ; $9C
+ db ALWAYS_SOLID, ALWAYS_SOLID, NEVER_SOLID, ALWAYS_SOLID ; $A0
+ db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $A4
+ db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $A8
+ db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $AC
+ db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $B0
+ db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $B4
+ db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $B8
+ db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $BC
+ db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $C0
+ db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $C4
+ db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $C8
+ db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $CC
+ db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $D0
+ db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $D4
+ db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $D8
+ db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $DC
+ db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $E0
+ db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $E4
+ db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $E8
+ db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $EC
+ db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $F0
+ db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $F4
+ db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $F8
+ db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, NEVER_SOLID ; $FC
+ db NEVER_SOLID, NEVER_SOLID, NEVER_SOLID, ALWAYS_SOLID ; $100
+
+_UnusedReturnFalse:: ; 03:4764
xor a
ret
-_UnusedReturnTrue::
+_UnusedReturnTrue:: ; 03:4766
xor a
scf
ret
-CheckCollisionSometimesSolid::
+CheckCollisionSometimesSolid:: ; 03:4769
; Checks whether collision ID in a
; is sometimes, always or never solid.
; Clobbers:
@@ -1098,18 +1169,58 @@ CheckCollisionSometimesSolid::
; 00 - sometimes solid
; 01 - never solid
call GetCollisionType
- cp $01
- jr z, .sometimesSolid
+ cp SOMETIMES_SOLID
+ jr z, .sometimes_solid
and a
- jr z, .solid
- jr .alwaysSolid
-.sometimesSolid:
+ jr z, .never_solid
+ jr .always_solid
+.sometimes_solid
xor a
ret
-.solid:
- ld a, $01
+.never_solid
+ ld a, 1
and a
ret
-.alwaysSolid:
+.always_solid
scf
ret
+
+
+SECTION "_RedrawPlayerSprite", ROMX[$4000], BANK[$05]
+
+_RedrawPlayerSprite: ; 05:4000
+ call GetPlayerSprite
+ ld hl, vChars0
+ call LoadOverworldSprite
+ ret
+
+GetPlayerSprite: ; 05:400a
+ ld a, [wPlayerState]
+ ld hl, PlayerSpriteTable
+ ld c, a
+.loop
+ ld a, [hli]
+ cp c
+ jr z, .match
+ inc hl
+ cp -1
+ jr nz, .loop
+ xor a
+ ld [wPlayerState], a
+ ld a, SPRITE_GOLD
+ jr .skip
+.match
+ ld a, [hl]
+.skip
+ ld [wUsedSprites], a
+ ld [wPlayerSprite], a
+ ld [wPlayerObjectSprite], a
+ ret
+
+PlayerSpriteTable: ; 03:402d
+; state, sprite
+ db PLAYER_NORMAL, SPRITE_GOLD
+ db PLAYER_BIKE, SPRITE_GOLD_BIKE
+ db PLAYER_SKATE, SPRITE_GOLD_SKATEBOARD
+ db PLAYER_SURF, SPRITE_LAPLACE
+ db -1
diff --git a/data/sprites/sprites.asm b/engine/sprites/sprites.asm
index b901b7a..a1dc401 100644
--- a/data/sprites/sprites.asm
+++ b/engine/sprites/sprites.asm
@@ -1,5 +1,58 @@
INCLUDE "constants.asm"
+SECTION "LoadOverworldSprite", ROMX[$4150], BANK[$05]
+
+LoadOverworldSprite: ; 05:4150
+ push af
+ call GetOverworldSpriteData
+ push bc
+ push hl
+ push de
+ ld a, [wcdaf]
+ bit 7, a
+ jr nz, .dont_copy
+ call Get2bpp
+.dont_copy
+ pop de
+ ld hl, SPRITE_TILE_SIZE * 3
+ add hl, de
+ ld d, h
+ ld e, l
+ pop hl
+ ld bc, vChars1 - vChars0
+ add hl, bc
+ pop bc
+ pop af
+ call IsAnimatedSprite
+ ret c
+ ld a, [wcdaf]
+ bit 6, a
+ ret nz
+ call Get2bpp
+ ret
+
+; get the data for overworld sprite in a
+; returns: gfx ptr in hl, length in c, bank in b
+GetOverworldSpriteData: ; 05:417d
+ push hl
+ dec a
+ ld l, a
+ ld h, 0
+ add hl, hl
+ add hl, hl
+ ld bc, OverworldSprites
+ add hl, bc
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ inc hl
+ ld c, [hl]
+ swap c
+ inc hl
+ ld b, [hl]
+ pop hl
+ ret
+
SECTION "OverworldSprites", ROMX[$423B], BANK[$05]
overworld_sprite: MACRO
diff --git a/home/copy2.asm b/home/copy2.asm
index 7274d8d..e74ef8b 100644
--- a/home/copy2.asm
+++ b/home/copy2.asm
@@ -3,7 +3,7 @@ INCLUDE "constants.asm"
SECTION "Video Copy functions", ROM0[$0D02]
RedrawPlayerSprite::
- jpab Function14000
+ jpab _RedrawPlayerSprite
LoadFont:: ; 00:0d0a
jpab LoadFontGraphics
diff --git a/home/map.asm b/home/map.asm
index 8c03d9f..21e41c8 100644
--- a/home/map.asm
+++ b/home/map.asm
@@ -448,8 +448,8 @@ FadeIn:: ; 23e5 ; This is not OverworldFadeIn, but I don't know what it is
ret
Function2407:: ; 00:2407
- ld a, $2a
- ld [wcb77], a
+ ld a, NO_MOVEMENT
+ ld [wPlayerMovement], a
xor a
ld [wPlayerAction], a
ld a, [wPlayerFacing]
@@ -505,7 +505,7 @@ CheckMovingOffEdgeOfMap:: ; 245e
ret
.down
- ld a, [wPlayerStandingMapY]
+ ld a, [wPlayerNextMapY]
sub 4
ld b, a
ld a, [wMapHeight]
@@ -516,7 +516,7 @@ CheckMovingOffEdgeOfMap:: ; 245e
ret
.up
- ld a, [wPlayerStandingMapY]
+ ld a, [wPlayerNextMapY]
sub 4
cp -1
jr z, .ok
@@ -524,7 +524,7 @@ CheckMovingOffEdgeOfMap:: ; 245e
ret
.left
- ld a, [wPlayerStandingMapX]
+ ld a, [wPlayerNextMapX]
sub 4
cp -1
jr z, .ok
@@ -532,7 +532,7 @@ CheckMovingOffEdgeOfMap:: ; 245e
ret
.right
- ld a, [wPlayerStandingMapX]
+ ld a, [wPlayerNextMapX]
sub 4
ld b, a
ld a, [wMapWidth]
@@ -701,10 +701,10 @@ WarpCheck:: ; 259f
ret
GetDestinationWarpPointer: ; 25b9
- ld a, [wPlayerStandingMapY]
+ ld a, [wPlayerNextMapY]
sub 4
ld d, a
- ld a, [wPlayerStandingMapX]
+ ld a, [wPlayerNextMapX]
sub 4
ld e, a
ld a, [wCurrMapWarpCount]
diff --git a/home/map_objects.asm b/home/map_objects.asm
index 70cba50..cc82ef3 100644
--- a/home/map_objects.asm
+++ b/home/map_objects.asm
@@ -334,26 +334,34 @@ Function17cb::
call Bankswitch
ret
-Function17de::
+; sets carry flag if the sprite data includes "in-motion" sprites
+IsAnimatedSprite:: ; 00:17de
push hl
push bc
ld c, a
- ld b, $ff
- ld hl, .Data
-.asm_17e6: ; 00:17e6
+ ld b, -1
+ ld hl, .NonAnimatedSprites
+.loop
ld a, [hli]
cp b
- jr z, .asm_17ee
+ jr z, .done
cp c
- jr nz, .asm_17e6
+ jr nz, .loop
scf
-.asm_17ee: ; 00:17ee
+.done
pop bc
pop hl
ret
-.Data: ; 00:17f1
- db $51, $55, $56, $57, $58, $5a, $5b, $ff
+.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
diff --git a/home/tileset.asm b/home/tileset.asm
index aabf249..4929159 100644
--- a/home/tileset.asm
+++ b/home/tileset.asm
@@ -50,7 +50,7 @@ RefreshPlayerCoords:: ; 2d74
ld a, [wXCoord]
add a, 4
ld d, a
- ld hl, wPlayerStandingMapX
+ ld hl, wPlayerNextMapX
sub [hl]
ld [hl], d
ld hl, wPlayerObjectXCoord
@@ -61,7 +61,7 @@ RefreshPlayerCoords:: ; 2d74
ld a, [wYCoord]
add a, 4
ld e, a
- ld hl, wPlayerStandingMapY
+ ld hl, wPlayerNextMapY
sub [hl]
ld [hl], e
ld hl, wPlayerObjectYCoord
@@ -211,18 +211,18 @@ SaveScreen:: ; 2df1
RefreshTiles:: ; 2e52
call .left_right
call .up_down
- ld a, [wPlayerStandingMapX]
+ ld a, [wPlayerNextMapX]
ld d, a
- ld a, [wPlayerStandingMapY]
+ ld a, [wPlayerNextMapY]
ld e, a
call GetCoordTile
ld [wPlayerStandingTile], a
ret
.up_down ; 2e67
- ld a, [wPlayerStandingMapX]
+ ld a, [wPlayerNextMapX]
ld d, a
- ld a, [wPlayerStandingMapY]
+ ld a, [wPlayerNextMapY]
ld e, a
push de
inc e
@@ -235,9 +235,9 @@ RefreshTiles:: ; 2e52
ret
.left_right ; 2e80
- ld a, [wPlayerStandingMapX]
+ ld a, [wPlayerNextMapX]
ld d, a
- ld a, [wPlayerStandingMapY]
+ ld a, [wPlayerNextMapY]
ld e, a
push de
dec d
@@ -270,10 +270,10 @@ GetFacingTileCoord:: ; 2e99
ld h, [hl]
ld l, a
- ld a, [wPlayerStandingMapX]
+ ld a, [wPlayerNextMapX]
add a, d
ld d, a
- ld a, [wPlayerStandingMapY]
+ ld a, [wPlayerNextMapY]
add a, e
ld e, a
ld a, [hl]
diff --git a/hram.asm b/hram.asm
index 9d8da3f..1803496 100644
--- a/hram.asm
+++ b/hram.asm
@@ -79,17 +79,13 @@ hSpriteHeight:: ; ffb0
NEXTU
-hConnectionStripLength:: ; ffaf
- db
-hConnectedMapWidth:: ; ffb0
- db
+hConnectionStripLength:: db ; ffaf
+hConnectedMapWidth:: db ; ffb0
NEXTU
-hMapObjectIndexBuffer:: ; ffaf
- db
-hObjectStructIndexBuffer:: ; ffb0
- db
+hMapObjectIndexBuffer:: db ; ffaf
+hObjectStructIndexBuffer:: db ; ffb0
ENDU
diff --git a/macros/wram.asm b/macros/wram.asm
index da67ba5..4433267 100644
--- a/macros/wram.asm
+++ b/macros/wram.asm
@@ -275,8 +275,8 @@ object_struct: MACRO
\1Facing:: ds 1
\1StandingTile:: ds 1 ; collision
\1LastTile:: ds 1 ; collision
-\1StandingMapX:: ds 1
-\1StandingMapY:: ds 1
+\1NextMapX:: ds 1
+\1NextMapY:: ds 1
\1LastMapX:: ds 1
\1LastMapY:: ds 1
\1ObjectInitX:: ds 1
diff --git a/shim.sym b/shim.sym
index da80057..104b756 100644
--- a/shim.sym
+++ b/shim.sym
@@ -81,8 +81,6 @@
04:640B Function1240b
04:6C58 CheckRegisteredItem
-05:4000 Function14000
-05:400A GetPlayerSprite
05:4036 RefreshSprites
05:404C CheckInteriorMap
05:405B AddIndoorSprites
diff --git a/wram.asm b/wram.asm
index 62a4a23..999dac1 100644
--- a/wram.asm
+++ b/wram.asm
@@ -252,7 +252,7 @@ wVBCopyFarSize:: ds 1 ; cb71
wVBCopyFarSrc:: ds 2 ; cb72
wVBCopyFarDst:: ds 2 ; cb74
wVBCopyFarSrcBank:: ds 1 ; cb76
-wcb77:: db ; cb77
+wPlayerMovement:: db ; cb77
wMovementObject:: db ; cb78
ptrba wMovementData ; cb79
@@ -466,7 +466,8 @@ SECTION "CD9E", WRAM0 [$CD9E]
wcd9e::
db
-SECTION "CDB0", WRAM0 [$CDB0]
+SECTION "CDAF", WRAM0 [$CDAF]
+wcdaf:: db ; cdaf
wcdb0:: ; bit 0 = has engaged NPC in dialogue (?)
db