summaryrefslogtreecommitdiff
path: root/engine/overworld
diff options
context:
space:
mode:
Diffstat (limited to 'engine/overworld')
-rwxr-xr-xengine/overworld/cable_club_npc.asm6
-rwxr-xr-xengine/overworld/card_key.asm70
-rwxr-xr-xengine/overworld/cut.asm58
-rwxr-xr-xengine/overworld/cut2.asm14
-rwxr-xr-xengine/overworld/doors.asm15
-rwxr-xr-xengine/overworld/elevator.asm4
-rwxr-xr-xengine/overworld/emotion_bubbles.asm6
-rwxr-xr-xengine/overworld/healing_machine.asm2
-rwxr-xr-xengine/overworld/hidden_items.asm4
-rwxr-xr-xengine/overworld/hidden_objects.asm114
-rw-r--r--engine/overworld/item.asm2
-rwxr-xr-xengine/overworld/ledges.asm58
-rw-r--r--engine/overworld/movement.asm39
-rwxr-xr-xengine/overworld/npc_movement.asm169
-rw-r--r--engine/overworld/oam.asm4
-rwxr-xr-xengine/overworld/pewter_guys.asm12
-rwxr-xr-xengine/overworld/player_animations.asm348
-rwxr-xr-xengine/overworld/pokemart.asm8
-rwxr-xr-xengine/overworld/ssanne.asm54
-rwxr-xr-xengine/overworld/trainers.asm70
20 files changed, 542 insertions, 515 deletions
diff --git a/engine/overworld/cable_club_npc.asm b/engine/overworld/cable_club_npc.asm
index 9ae5b508..d071eee5 100755
--- a/engine/overworld/cable_club_npc.asm
+++ b/engine/overworld/cable_club_npc.asm
@@ -24,7 +24,7 @@ Func_71e1: ; 71e1 (1:71e1)
ld a, $ff
ld [$ffaa], a
ld a, $2
- ld [$ff01], a
+ ld [rSB], a
xor a
ld [$ffad], a
ld a, $80
@@ -34,7 +34,7 @@ Func_71e1: ; 71e1 (1:71e1)
ld [wcc47], a
jr z, .asm_7287 ; 0x720b $7a
ld a, $1
- ld [$ff01], a
+ ld [rSB], a
ld a, $81
ld [$ff02], a
call DelayFrame
@@ -148,7 +148,7 @@ Func_72d7: ; 72d7 (1:72d7)
ld a, $ff
ld [$ffaa], a
ld a, $2
- ld [$ff01], a
+ ld [rSB], a
xor a
ld [$ffad], a
ld a, $80
diff --git a/engine/overworld/card_key.asm b/engine/overworld/card_key.asm
index f48c26f4..c4df0d51 100755
--- a/engine/overworld/card_key.asm
+++ b/engine/overworld/card_key.asm
@@ -2,18 +2,18 @@ PrintCardKeyText: ; 52673 (14:6673)
ld hl, SilphCoMapList
ld a, [W_CURMAP]
ld b, a
-.asm_5267a
+.silphCoMapListLoop
ld a, [hli]
cp $ff
ret z
cp b
- jr nz, .asm_5267a
- predef Func_c586
- ld a, [wcfc6]
+ jr nz, .silphCoMapListLoop
+ predef GetTileAndCoordsInFrontOfPlayer
+ ld a, [wTileInFrontOfPlayer]
cp $18
- jr z, .asm_5269c
+ jr z, .cardKeyDoorInFrontOfPlayer
cp $24
- jr z, .asm_5269c
+ jr z, .cardKeyDoorInFrontOfPlayer
ld b, a
ld a, [W_CURMAP]
cp SILPH_CO_11F
@@ -21,41 +21,41 @@ PrintCardKeyText: ; 52673 (14:6673)
ld a, b
cp $5e
ret nz
-.asm_5269c
+.cardKeyDoorInFrontOfPlayer
ld b, CARD_KEY
call IsItemInBag
- jr z, .asm_526dc
- call Func_526fd
+ jr z, .noCardKey
+ call GetCoordsInFrontOfPlayer
push de
ld a, $1
- ld [H_DOWNARROWBLINKCNT2], a ; $ff8c
+ ld [H_DOWNARROWBLINKCNT2], a
call PrintPredefTextID
pop de
srl d
ld a, d
ld b, a
- ld [wd73f], a
+ ld [wCardKeyDoorY], a
srl e
ld a, e
ld c, a
- ld [wd740], a
- ld a, [W_CURMAP] ; W_CURMAP
+ ld [wCardKeyDoorX], a
+ ld a, [W_CURMAP]
cp SILPH_CO_11F
- jr nz, .asm_526c8
+ jr nz, .notSilphCo11F
ld a, $3
- jr .asm_526ca
-.asm_526c8
+ jr .replaceCardKeyDoorTileBlock
+.notSilphCo11F
ld a, $e
-.asm_526ca
+.replaceCardKeyDoorTileBlock
ld [wd09f], a
- predef Func_ee9e
+ predef ReplaceTileBlock
ld hl, wd126
set 5, [hl]
ld a, (SFX_1f_57 - SFX_Headers_1f) / 3
jp PlaySound
-.asm_526dc
+.noCardKey
ld a, $2
- ld [H_DOWNARROWBLINKCNT2], a ; $ff8c
+ ld [H_DOWNARROWBLINKCNT2], a
jp PrintPredefTextID
SilphCoMapList: ; 526e3 (14:66e3)
@@ -81,26 +81,32 @@ CardKeyFailText: ; 526f8 (14:66f8)
TX_FAR _CardKeyFailText
db "@"
-Func_526fd: ; 526fd (14:66fd)
- ld a, [W_YCOORD] ; wd361
+; d = Y
+; e = X
+GetCoordsInFrontOfPlayer: ; 526fd (14:66fd)
+ ld a, [W_YCOORD]
ld d, a
- ld a, [W_XCOORD] ; wd362
+ ld a, [W_XCOORD]
ld e, a
- ld a, [wSpriteStateData1 + 9]
+ ld a, [wSpriteStateData1 + 9] ; player's sprite facing direction
and a
- jr nz, .asm_5270d
+ jr nz, .notFacingDown
+; facing down
inc d
ret
-.asm_5270d
- cp $4
- jr nz, .asm_52713
+.notFacingDown
+ cp SPRITE_FACING_UP
+ jr nz, .notFacingUp
+; facing up
dec d
ret
-.asm_52713
- cp $8
- jr nz, .asm_52719
+.notFacingUp
+ cp SPRITE_FACING_LEFT
+ jr nz, .notFacingLeft
+; facing left
dec e
ret
-.asm_52719
+.notFacingLeft
+; facing right
inc e
ret
diff --git a/engine/overworld/cut.asm b/engine/overworld/cut.asm
index 29b52eb9..f57b6465 100755
--- a/engine/overworld/cut.asm
+++ b/engine/overworld/cut.asm
@@ -6,13 +6,13 @@ UsedCut: ; ef54 (3:6f54)
jr z, .asm_ef6b
cp GYM
jr nz, .asm_ef77
- ld a, [wcfc6]
+ ld a, [wTileInFrontOfPlayer]
cp $50 ; gym cut tree
jr nz, .asm_ef77
jr asm_ef82
.asm_ef6b
dec a
- ld a, [wcfc6]
+ ld a, [wTileInFrontOfPlayer]
cp $3d ; cut tree
jr z, asm_ef82
cp $52 ; grass
@@ -36,36 +36,36 @@ asm_ef82: ; ef82 (3:6f82)
set 6, [hl]
call GBPalWhiteOutWithDelay3
call ClearSprites
- call Func_3dbe
+ call RestoreScreenTilesAndReloadTilePatterns
ld a, $90
- ld [$ffb0], a
+ ld [hVBlankWY], a
call Delay3
call LoadGBPal
call LoadCurrentMapView
call SaveScreenTilesToBuffer2
call Delay3
xor a
- ld [$ffb0], a
+ ld [hVBlankWY], a
ld hl, UsedCutText
call PrintText
call LoadScreenTilesFromBuffer2
ld hl, wd730
res 6, [hl]
ld a, $ff
- ld [wcfcb], a
+ ld [wUpdateSpritesEnabled], a
call AnimateCutTree
ld de, CutTreeBlockSwaps ; $7100
call Func_f09f
- call Func_eedc
+ call RedrawMapView
callba Func_79e96
ld a, $1
- ld [wcfcb], a
+ ld [wUpdateSpritesEnabled], a
ld a, (SFX_02_56 - SFX_Headers_02) / 3
call PlaySound
ld a, $90
- ld [$ffb0], a
+ ld [hVBlankWY], a
call UpdateSprites
- jp Func_eedc
+ jp RedrawMapView
UsedCutText: ; eff2 (3:6ff2)
TX_FAR _UsedCutText
@@ -87,17 +87,17 @@ AnimateCutTree: ; eff7 (3:6ff7)
ld hl, vChars1 + $7e0
ld bc, (BANK(Overworld_GFX) << 8) + $02
call CopyVideoData
- jr asm_f055
+ jr WriteCutTreeBoulderDustAnimationOAMBlock
.asm_f020
ld hl, vChars1 + $7c0
- call LoadCutTreeOAM
+ call LoadCutTreeAnimationTilePattern
ld hl, vChars1 + $7d0
- call LoadCutTreeOAM
+ call LoadCutTreeAnimationTilePattern
ld hl, vChars1 + $7e0
- call LoadCutTreeOAM
+ call LoadCutTreeAnimationTilePattern
ld hl, vChars1 + $7f0
- call LoadCutTreeOAM
- call asm_f055
+ call LoadCutTreeAnimationTilePattern
+ call WriteCutTreeBoulderDustAnimationOAMBlock
ld hl, wOAMBuffer + $93
ld de, $4
ld a, $30
@@ -110,26 +110,27 @@ AnimateCutTree: ; eff7 (3:6ff7)
jr nz, .asm_f044
ret
-LoadCutTreeOAM: ; f04c (3:704c)
+LoadCutTreeAnimationTilePattern: ; f04c (3:704c)
ld de, AnimationTileset2 + $60 ; $474e ; tile depicting a leaf
ld bc, (BANK(AnimationTileset2) << 8) + $01
jp CopyVideoData
-asm_f055: ; f055 (3:7055)
- call Func_f068
+
+WriteCutTreeBoulderDustAnimationOAMBlock: ; f055 (3:7055)
+ call GetCutTreeBoulderDustAnimationOffsets
ld a, $9
- ld de, CutTreeOAM ; $7060
+ ld de, CutTreeBoulderDustAnimationTilesAndAttributes
jp WriteOAMBlock
-CutTreeOAM: ; f060 (3:7060)
+CutTreeBoulderDustAnimationTilesAndAttributes: ; f060 (3:7060)
db $FC,$10,$FD,$10
db $FE,$10,$FF,$10
-Func_f068: ; f068 (3:7068)
+GetCutTreeBoulderDustAnimationOffsets: ; f068 (3:7068)
ld hl, wSpriteStateData1 + 4
- ld a, [hli]
+ ld a, [hli] ; player's sprite screen Y position
ld b, a
inc hl
- ld a, [hli]
+ ld a, [hli] ; player's sprite screen X position
ld c, a ; bc holds ypos/xpos of player's sprite
inc hl
inc hl
@@ -139,9 +140,9 @@ Func_f068: ; f068 (3:7068)
ld d, $0 ; de holds direction (00: down, 02: up, 04: left, 06: right)
ld a, [wcd50]
and a
- ld hl, CutTreeAnimationOffsets ; $708f
+ ld hl, CutTreeAnimationOffsets
jr z, .asm_f084
- ld hl, CutTreeAnimationOffsets2 ; $7097
+ ld hl, BoulderDustAnimationOffsets
.asm_f084
add hl, de
ld e, [hl]
@@ -162,8 +163,7 @@ CutTreeAnimationOffsets: ; f08f (3:708f)
db -8, 20 ; player is facing left
db 24, 20 ; player is facing right
-CutTreeAnimationOffsets2: ; f097 (3:7097)
-; Not sure if these ever get used. CutTreeAnimationOffsets only seems to be used.
+BoulderDustAnimationOffsets: ; f097 (3:7097)
; Each pair represents the x and y pixels offsets from the player of where the cut tree animation should be drawn
; These offsets represent 2 blocks away from the player
db 8, 52 ; player is facing down
@@ -178,7 +178,7 @@ Func_f09f: ; f09f (3:709f)
ld c, a
ld b, $0
ld d, $0
- ld hl, wd35f
+ ld hl, wCurrentTileBlockMapViewPointer
ld a, [hli]
ld h, [hl]
ld l, a
diff --git a/engine/overworld/cut2.asm b/engine/overworld/cut2.asm
index 08f6d651..de2b9d55 100755
--- a/engine/overworld/cut2.asm
+++ b/engine/overworld/cut2.asm
@@ -9,12 +9,12 @@ Func_79e96: ; 79e96 (1e:5e96)
ld a, $1
ld [wd08a], a
ld c, $2
- call Func_79339
+ call AdjustOAMBlockXPos2
ld hl, wOAMBuffer + $99
ld a, $ff
ld [wd08a], a
ld c, $2
- call Func_79339
+ call AdjustOAMBlockXPos2
ld a, [rOBP1] ; $ff49
xor $64
ld [rOBP1], a ; $ff49
@@ -37,7 +37,7 @@ Func_79e96: ; 79e96 (1e:5e96)
ld a, $2
ld [wd08a], a
ld c, $4
- call Func_79352
+ call AdjustOAMBlockYPos2
pop bc
dec c
jr nz, .asm_79eca
@@ -49,22 +49,22 @@ Func_79eed: ; 79eed (1e:5eed)
ld a, $1
ld [wd08a], a
ld c, $1
- call Func_79339
+ call AdjustOAMBlockXPos2
ld hl, wOAMBuffer + $95
ld a, $2
ld [wd08a], a
ld c, $1
- call Func_79339
+ call AdjustOAMBlockXPos2
ld hl, wOAMBuffer + $99
ld a, $fe
ld [wd08a], a
ld c, $1
- call Func_79339
+ call AdjustOAMBlockXPos2
ld hl, wOAMBuffer + $9d
ld a, $ff
ld [wd08a], a
ld c, $1
- call Func_79339
+ call AdjustOAMBlockXPos2
ld a, [rOBP1] ; $ff49
xor $64
ld [rOBP1], a ; $ff49
diff --git a/engine/overworld/doors.asm b/engine/overworld/doors.asm
index 42ebb174..ac345af9 100755
--- a/engine/overworld/doors.asm
+++ b/engine/overworld/doors.asm
@@ -1,26 +1,27 @@
-HandleDoors: ; 1a609 (6:6609)
+; returns whether the player is standing on a door tile in carry
+IsPlayerStandingOnDoorTile: ; 1a609 (6:6609)
push de
ld hl, DoorTileIDPointers ; $662c
ld a, [W_CURMAPTILESET] ; W_CURMAPTILESET
ld de, $3
call IsInArray
pop de
- jr nc, .asm_1a62a
+ jr nc, .notStandingOnDoor
inc hl
ld a, [hli]
ld h, [hl]
ld l, a
- aCoord 8, 9
+ aCoord 8, 9 ; a = lower left background tile under player's sprite
ld b, a
-.asm_1a621
+.loop
ld a, [hli]
and a
- jr z, .asm_1a62a
+ jr z, .notStandingOnDoor
cp b
- jr nz, .asm_1a621
+ jr nz, .loop
scf
ret
-.asm_1a62a
+.notStandingOnDoor
and a
ret
diff --git a/engine/overworld/elevator.asm b/engine/overworld/elevator.asm
index 10b3b003..c2191b91 100755
--- a/engine/overworld/elevator.asm
+++ b/engine/overworld/elevator.asm
@@ -38,10 +38,10 @@ ShakeElevator: ; 7bf15 (1e:7f15)
cp $b9
jr z, .asm_7bf57
call UpdateSprites
- jp Func_2307
+ jp PlayDefaultMusic
Func_7bf64: ; 7bf64 (1e:7f64)
- ld hl, wd527
+ ld hl, wMapViewVRAMPointer + 1
ld a, [hld]
push af
ld a, [hl]
diff --git a/engine/overworld/emotion_bubbles.asm b/engine/overworld/emotion_bubbles.asm
index ae7702b4..7106063b 100755
--- a/engine/overworld/emotion_bubbles.asm
+++ b/engine/overworld/emotion_bubbles.asm
@@ -11,10 +11,10 @@ EmotionBubble: ; 17c47 (5:7c47)
ld hl, vChars1 + $780
ld bc, (BANK(EmotionBubblesPointerTable) << 8) + $04
call CopyVideoData
- ld a, [wcfcb]
+ ld a, [wUpdateSpritesEnabled]
push af
ld a, $ff
- ld [wcfcb], a
+ ld [wUpdateSpritesEnabled], a
ld a, [wd736]
bit 6, a
ld hl, wOAMBuffer + $8f
@@ -51,7 +51,7 @@ EmotionBubble: ; 17c47 (5:7c47)
ld c, $3c
call DelayFrames
pop af
- ld [wcfcb], a
+ ld [wUpdateSpritesEnabled], a
call DelayFrame
jp UpdateSprites
diff --git a/engine/overworld/healing_machine.asm b/engine/overworld/healing_machine.asm
index 9c93583d..53174630 100755
--- a/engine/overworld/healing_machine.asm
+++ b/engine/overworld/healing_machine.asm
@@ -3,7 +3,7 @@ AnimateHealingMachine: ; 70433 (1c:4433)
ld hl, vChars0 + $7c0
ld bc, (BANK(PokeCenterFlashingMonitorAndHealBall) << 8) + $03
call CopyVideoData
- ld hl, wcfcb
+ ld hl, wUpdateSpritesEnabled
ld a, [hl]
push af
ld [hl], $ff
diff --git a/engine/overworld/hidden_items.asm b/engine/overworld/hidden_items.asm
index 77bd8fe6..befe2935 100755
--- a/engine/overworld/hidden_items.asm
+++ b/engine/overworld/hidden_items.asm
@@ -12,7 +12,7 @@ HiddenItems: ; 76688 (1d:6688)
ret nz
call EnableAutoTextBoxDrawing
ld a, $1
- ld [wcc3c], a
+ ld [wDoNotWaitForButtonPressAfterDisplayingText], a
ld a, [wWhichTrade] ; item ID
ld [wd11e], a
call GetItemName
@@ -42,7 +42,7 @@ FoundHiddenItemText: ; 7675b (1d:675b)
.BagFull
call WaitForTextScrollButtonPress ; wait for button press
xor a
- ld [wcc3c], a
+ ld [wDoNotWaitForButtonPressAfterDisplayingText], a
ld hl, HiddenItemBagFullText
call PrintText
jp TextScriptEnd
diff --git a/engine/overworld/hidden_objects.asm b/engine/overworld/hidden_objects.asm
index d2114293..ae67aeed 100755
--- a/engine/overworld/hidden_objects.asm
+++ b/engine/overworld/hidden_objects.asm
@@ -1,20 +1,21 @@
Func_46981: ; 46981 (11:6981)
xor a
- ld [wd71e], a
+ ld [wWhichDungeonWarp], a
ld a, [wd72d]
bit 4, a
ret nz
call ArePlayerCoordsInArray
ret nc
- ld a, [wWhichTrade] ; wWhichTrade
- ld [wd71e], a
+ ld a, [wWhichTrade]
+ ld [wWhichDungeonWarp], a
ld hl, wd72d
set 4, [hl]
ld hl, wd732
set 4, [hl]
ret
-Func_469a0: ; 469a0 (11:69a0)
+; if a hidden object was found, stores $00 in [$ffee], else stores $ff
+CheckForHiddenObject: ; 469a0 (11:69a0)
ld hl, $ffeb
xor a
ld [hli], a
@@ -22,107 +23,110 @@ Func_469a0: ; 469a0 (11:69a0)
ld [hli], a
ld [hl], a
ld de, $0
- ld hl, HiddenObjectMaps ; $6a40
-.asm_469ae
+ ld hl, HiddenObjectMaps
+.hiddenMapLoop
ld a, [hli]
ld b, a
cp $ff
- jr z, .asm_469fc
- ld a, [W_CURMAP] ; W_CURMAP
+ jr z, .noMatch
+ ld a, [W_CURMAP]
cp b
- jr z, .asm_469be
+ jr z, .foundMatchingMap
inc de
inc de
- jr .asm_469ae
-.asm_469be
- ld hl, HiddenObjectPointers ; $6a96
+ jr .hiddenMapLoop
+.foundMatchingMap
+ ld hl, HiddenObjectPointers
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
push hl
- ld hl, wWhichTrade ; wWhichTrade
+ ld hl, wHiddenObjectFunctionArgument
xor a
ld [hli], a
ld [hli], a
ld [hl], a
pop hl
-.asm_469ce
+.hiddenObjectLoop
ld a, [hli]
cp $ff
- jr z, .asm_469fc
- ld [wTrainerScreenY], a
+ jr z, .noMatch
+ ld [wHiddenObjectY], a
ld b, a
ld a, [hli]
- ld [wTrainerScreenX], a
+ ld [wHiddenObjectX], a
ld c, a
- call Func_46a01
+ call CheckIfCoordsInFrontOfPlayerMatch
ld a, [$ffea]
and a
- jr z, .asm_469f0
+ jr z, .foundMatchingObject
inc hl
inc hl
inc hl
inc hl
push hl
- ld hl, wTrainerFacingDirection
+ ld hl, wHiddenObjectIndex
inc [hl]
pop hl
- jr .asm_469ce
-.asm_469f0
+ jr .hiddenObjectLoop
+.foundMatchingObject
ld a, [hli]
- ld [wWhichTrade], a ; wWhichTrade
+ ld [wHiddenObjectFunctionArgument], a
ld a, [hli]
- ld [wTrainerEngageDistance], a
+ ld [wHiddenObjectFunctionRomBank], a
ld a, [hli]
ld h, [hl]
ld l, a
ret
-.asm_469fc
+.noMatch
ld a, $ff
ld [$ffee], a
ret
-Func_46a01: ; 46a01 (11:6a01)
- ld a, [wSpriteStateData1 + 9]
- cp $4
- jr z, .asm_46a16
- cp $8
- jr z, .asm_46a25
- cp $c
- jr z, .asm_46a2b
- ld a, [W_YCOORD] ; wd361
+; checks if the coordinates in front of the player's sprite match Y in b and X in c
+; [$ffea] = $00 if they match, $ff if they don't match
+CheckIfCoordsInFrontOfPlayerMatch: ; 46a01 (11:6a01)
+ ld a, [wSpriteStateData1 + 9] ; player's sprite facing direction
+ cp SPRITE_FACING_UP
+ jr z, .facingUp
+ cp SPRITE_FACING_LEFT
+ jr z, .facingLeft
+ cp SPRITE_FACING_RIGHT
+ jr z, .facingRight
+; facing down
+ ld a, [W_YCOORD]
inc a
- jr .asm_46a1a
-.asm_46a16
- ld a, [W_YCOORD] ; wd361
+ jr .upDownCommon
+.facingUp
+ ld a, [W_YCOORD]
dec a
-.asm_46a1a
+.upDownCommon
cp b
- jr nz, .asm_46a3b
- ld a, [W_XCOORD] ; wd362
+ jr nz, .didNotMatch
+ ld a, [W_XCOORD]
cp c
- jr nz, .asm_46a3b
- jr .asm_46a38
-.asm_46a25
- ld a, [W_XCOORD] ; wd362
+ jr nz, .didNotMatch
+ jr .matched
+.facingLeft
+ ld a, [W_XCOORD]
dec a
- jr .asm_46a2f
-.asm_46a2b
- ld a, [W_XCOORD] ; wd362
+ jr .leftRightCommon
+.facingRight
+ ld a, [W_XCOORD]
inc a
-.asm_46a2f
+.leftRightCommon
cp c
- jr nz, .asm_46a3b
- ld a, [W_YCOORD] ; wd361
+ jr nz, .didNotMatch
+ ld a, [W_YCOORD]
cp b
- jr nz, .asm_46a3b
-.asm_46a38
+ jr nz, .didNotMatch
+.matched
xor a
- jr .asm_46a3d
-.asm_46a3b
+ jr .done
+.didNotMatch
ld a, $ff
-.asm_46a3d
+.done
ld [$ffea], a
ret
diff --git a/engine/overworld/item.asm b/engine/overworld/item.asm
index a69ec106..a49fc268 100644
--- a/engine/overworld/item.asm
+++ b/engine/overworld/item.asm
@@ -34,7 +34,7 @@ PickupItem:
ld [wcc4d], a
predef HideObject
ld a, 1
- ld [wcc3c], a
+ ld [wDoNotWaitForButtonPressAfterDisplayingText], a
ld hl, FoundItemText
jr .print
diff --git a/engine/overworld/ledges.asm b/engine/overworld/ledges.asm
index 43df82e2..b8c19181 100755
--- a/engine/overworld/ledges.asm
+++ b/engine/overworld/ledges.asm
@@ -1,54 +1,54 @@
HandleLedges: ; 1a672 (6:6672)
ld a, [wd736]
- bit 6, a
+ bit 6, a ; already jumping down ledge
ret nz
ld a, [W_CURMAPTILESET] ; W_CURMAPTILESET
and a ; OVERWORLD
ret nz
- predef Func_c586
+ predef GetTileAndCoordsInFrontOfPlayer
ld a, [wSpriteStateData1 + 9]
ld b, a
aCoord 8, 9
ld c, a
- ld a, [wcfc6]
+ ld a, [wTileInFrontOfPlayer]
ld d, a
- ld hl, LedgeTiles ; $66cf
-.asm_1a691
+ ld hl, LedgeTiles
+.loop
ld a, [hli]
cp $ff
ret z
cp b
- jr nz, .asm_1a6a4
+ jr nz, .nextLedgeTile1
ld a, [hli]
cp c
- jr nz, .asm_1a6a5
+ jr nz, .nextLedgeTile2
ld a, [hli]
cp d
- jr nz, .asm_1a6a6
+ jr nz, .nextLedgeTile3
ld a, [hl]
ld e, a
- jr .asm_1a6a9
-.asm_1a6a4
+ jr .foundMatch
+.nextLedgeTile1
inc hl
-.asm_1a6a5
+.nextLedgeTile2
inc hl
-.asm_1a6a6
+.nextLedgeTile3
inc hl
- jr .asm_1a691
-.asm_1a6a9
+ jr .loop
+.foundMatch
ld a, [hJoyHeld]
and e
ret z
ld a, $ff
ld [wJoyIgnore], a
ld hl, wd736
- set 6, [hl]
- call Func_3486
+ set 6, [hl] ; jumping down ledge
+ call StartSimulatingJoypadStates
ld a, e
- ld [wccd3], a
- ld [wccd4], a
+ ld [wSimulatedJoypadStatesEnd], a
+ ld [wSimulatedJoypadStatesEnd + 1], a
ld a, $2
- ld [wcd38], a
+ ld [wSimulatedJoypadStatesIndex], a
call LoadHoppingShadowOAM
ld a, (SFX_02_4e - SFX_Headers_02) / 3
call PlaySound
@@ -56,24 +56,24 @@ HandleLedges: ; 1a672 (6:6672)
; (player direction) (tile player standing on) (ledge tile) (input required)
LedgeTiles: ; 1a6cf (6:66cf)
- db $00,$2C,$37,$80
- db $00,$39,$36,$80
- db $00,$39,$37,$80
- db $08,$2C,$27,$20
- db $08,$39,$27,$20
- db $0C,$2C,$0D,$10
- db $0C,$2C,$1D,$10
- db $0C,$39,$0D,$10
+ db SPRITE_FACING_DOWN, $2C,$37,D_DOWN
+ db SPRITE_FACING_DOWN, $39,$36,D_DOWN
+ db SPRITE_FACING_DOWN, $39,$37,D_DOWN
+ db SPRITE_FACING_LEFT, $2C,$27,D_LEFT
+ db SPRITE_FACING_LEFT, $39,$27,D_LEFT
+ db SPRITE_FACING_RIGHT,$2C,$0D,D_RIGHT
+ db SPRITE_FACING_RIGHT,$2C,$1D,D_RIGHT
+ db SPRITE_FACING_RIGHT,$39,$0D,D_RIGHT
db $FF
LoadHoppingShadowOAM: ; 1a6f0 (6:66f0)
ld hl, vChars1 + $7f0
- ld de, LedgeHoppingShadow ; $6708
+ ld de, LedgeHoppingShadow
ld bc, (BANK(LedgeHoppingShadow) << 8) + $01
call CopyVideoDataDouble
ld a, $9
ld bc, $5448 ; b, c = y, x coordinates of shadow
- ld de, LedgeHoppingShadowOAM ; $6710
+ ld de, LedgeHoppingShadowOAM
call WriteOAMBlock
ret
diff --git a/engine/overworld/movement.asm b/engine/overworld/movement.asm
index f08a20cb..3b9cac7d 100644
--- a/engine/overworld/movement.asm
+++ b/engine/overworld/movement.asm
@@ -1,23 +1,26 @@
UpdatePlayerSprite: ; 4e31 (1:4e31)
ld a, [wSpriteStateData2]
and a
- jr z, .asm_4e41
+ jr z, .checkIfTextBoxInFrontOfSprite
cp $ff
- jr z, .asm_4e4a
+ jr z, .disableSprite
dec a
ld [wSpriteStateData2], a
- jr .asm_4e4a
-.asm_4e41
+ jr .disableSprite
+; check if a text box is in front of the sprite by checking if the lower left
+; background tile the sprite is standing on is greater than $5F, which is
+; the maximum number for map tiles
+.checkIfTextBoxInFrontOfSprite
aCoord 8, 9
ld [$ff93], a
cp $60
- jr c, .asm_4e50
-.asm_4e4a
+ jr c, .lowerLeftTileIsMapTile
+.disableSprite
ld a, $ff
ld [wSpriteStateData1 + 2], a
ret
-.asm_4e50
- call Func_4c70
+.lowerLeftTileIsMapTile
+ call DetectCollisionBetweenSprites
ld h, $c1
ld a, [wWalkCounter] ; wcfc5
and a
@@ -165,8 +168,8 @@ Func_4ed1: ; 4ed1 (1:4ed1)
ld hl, wd730
res 0, [hl]
xor a
- ld [wcd38], a
- ld [wcd3a], a
+ ld [wSimulatedJoypadStatesIndex], a
+ ld [wWastedByteCD3A], a
ret
.asm_4f4b
cp $fe
@@ -490,6 +493,8 @@ CheckSpriteAvailability: ; 50dc (1:50dc)
cp b
jr c, .spriteInvisible ; right of screen region
.skipXVisibilityTest
+; make the sprite invisible if a text box is in front of it
+; $5F is the maximum number for map tiles
call getTileSpriteStandsOn
ld d, $60
ld a, [hli]
@@ -604,16 +609,16 @@ CanWalkOntoTile: ; 516e (1:516e)
jr nc, .impassable ; don't walk off screen
push de
push bc
- call Func_4c70
+ call DetectCollisionBetweenSprites
pop bc
pop de
ld h, $c1
ld a, [H_CURRENTSPRITEOFFSET]
add $c
ld l, a
- ld a, [hl] ; c1xc (forbidden directions flags(?))
+ ld a, [hl] ; c1xc (directions in which sprite collision would occur)
and b ; check against chosen direction (1,2,4 or 8)
- jr nz, .impassable ; direction forbidden, don't go there
+ jr nz, .impassable ; collision between sprites, don't go there
ld h, $c2
ld a, [H_CURRENTSPRITEOFFSET]
add $2
@@ -716,8 +721,8 @@ Func_5236: ; 5236 (1:5236)
bit 7, [hl]
set 7, [hl]
jp z, Func_52a6
- ld hl, wcc97
- ld a, [wcd37]
+ ld hl, wNPCMovementDirections2
+ ld a, [wNPCMovementDirections2Index]
add l
ld l, a
jr nc, .asm_5251
@@ -770,13 +775,13 @@ Func_5236: ; 5236 (1:5236)
ret nz
ld a, $8
ld [wcf18], a
- ld hl, wcd37
+ ld hl, wNPCMovementDirections2Index
inc [hl]
ret
Func_52a6: ; 52a6 (1:52a6)
xor a
- ld [wcd37], a
+ ld [wNPCMovementDirections2Index], a
ld a, $8
ld [wcf18], a
jp Func_52c3
diff --git a/engine/overworld/npc_movement.asm b/engine/overworld/npc_movement.asm
index 2cf6fea9..84e39853 100755
--- a/engine/overworld/npc_movement.asm
+++ b/engine/overworld/npc_movement.asm
@@ -1,25 +1,25 @@
-Func_1a3e0: ; 1a3e0 (6:63e0)
+PlayerStepOutFromDoor: ; 1a3e0 (6:63e0)
ld hl, wd730
res 1, [hl]
- call HandleDoors
- jr nc, .asm_1a406
+ call IsPlayerStandingOnDoorTile
+ jr nc, .notStandingOnDoor
ld a, $fc
ld [wJoyIgnore], a
ld hl, wd736
set 1, [hl]
ld a, $1
- ld [wcd38], a
- ld a, $80
- ld [wccd3], a
+ ld [wSimulatedJoypadStatesIndex], a
+ ld a, D_DOWN
+ ld [wSimulatedJoypadStatesEnd], a
xor a
ld [wSpriteStateData1 + 2], a
- call Func_3486
+ call StartSimulatingJoypadStates
ret
-.asm_1a406
+.notStandingOnDoor
xor a
- ld [wcd3a], a
- ld [wcd38], a
- ld [wccd3], a
+ ld [wWastedByteCD3A], a
+ ld [wSimulatedJoypadStatesIndex], a
+ ld [wSimulatedJoypadStatesEnd], a
ld hl, wd736
res 0, [hl]
res 1, [hl]
@@ -27,7 +27,7 @@ Func_1a3e0: ; 1a3e0 (6:63e0)
res 7, [hl]
ret
-Func_1a41d: ; 1a41d (6:641d)
+_EndNPCMovementScript: ; 1a41d (6:641d)
ld hl, wd730
res 7, [hl]
ld hl, wd72e
@@ -36,15 +36,15 @@ Func_1a41d: ; 1a41d (6:641d)
res 0, [hl]
res 1, [hl]
xor a
- ld [wcf17], a
- ld [wcc57], a
- ld [wcf10], a
- ld [wcd3a], a
- ld [wcd38], a
- ld [wccd3], a
+ ld [wNPCMovementScriptSpriteOffset], a
+ ld [wNPCMovementScriptPointerTableNum], a
+ ld [wNPCMovementScriptFunctionNum], a
+ ld [wWastedByteCD3A], a
+ ld [wSimulatedJoypadStatesIndex], a
+ ld [wSimulatedJoypadStatesEnd], a
ret
-PointerTable_1a442: ; 1a442 (6:6442)
+ProfOakMovementScriptPointerTable: ; 1a442 (6:6442)
dw Func_1a44c
dw Func_1a485
dw Func_1a4a1
@@ -58,20 +58,20 @@ Func_1a44c: ; 1a44c (6:644c)
jr z, .asm_1a475
ld b, $0
ld c, a
- ld hl, wcc97
+ ld hl, wNPCMovementDirections2
ld a, $80
call FillMemory
ld [hl], $ff
- ld a, [wcf13]
+ ld a, [wSpriteIndex]
ld [H_DOWNARROWBLINKCNT2], a ; $ff8c
- ld de, wcc97
+ ld de, wNPCMovementDirections2
call MoveSprite
ld a, $1
- ld [wcf10], a
+ ld [wNPCMovementScriptFunctionNum], a
jr .asm_1a47a
.asm_1a475
ld a, $3
- ld [wcf10], a
+ ld [wNPCMovementScriptFunctionNum], a
.asm_1a47a
ld hl, W_FLAGS_D733
set 1, [hl]
@@ -84,44 +84,44 @@ Func_1a485: ; 1a485 (6:6485)
bit 0, a
ret nz
ld a, [wcca1]
- ld [wcd38], a
+ ld [wSimulatedJoypadStatesIndex], a
ld [$ff95], a
- predef Func_f9a0
- call Func_3486
+ predef ConvertNPCMovementDirectionsToJoypadMasks
+ call StartSimulatingJoypadStates
ld a, $2
- ld [wcf10], a
+ ld [wNPCMovementScriptFunctionNum], a
ret
Func_1a4a1: ; 1a4a1 (6:64a1)
- ld a, [wcd38]
+ ld a, [wSimulatedJoypadStatesIndex]
and a
ret nz
Func_1a4a6: ; 1a4a6 (6:64a6)
xor a
- ld [wcd3b], a
- ld a, [wcf13]
+ ld [wOverrideSimulatedJoypadStatesMask], a
+ ld a, [wSpriteIndex]
swap a
- ld [wcf17], a
+ ld [wNPCMovementScriptSpriteOffset], a
xor a
ld [wSpriteStateData2 + $06], a
- ld hl, wccd3
- ld de, RLEList_1a4e9
+ ld hl, wSimulatedJoypadStatesEnd
+ ld de, RLEList_PlayerWalkToLab
call DecodeRLEList
dec a
- ld [wcd38], a
- ld hl, wcc97
- ld de, RLEList_1a4dc
+ ld [wSimulatedJoypadStatesIndex], a
+ ld hl, wNPCMovementDirections2
+ ld de, RLEList_ProfOakWalkToLab
call DecodeRLEList
ld hl, wd72e
res 7, [hl]
ld hl, wd730
set 7, [hl]
ld a, $4
- ld [wcf10], a
+ ld [wNPCMovementScriptFunctionNum], a
ret
-RLEList_1a4dc: ; 1a4dc (6:64dc)
+RLEList_ProfOakWalkToLab: ; 1a4dc (6:64dc)
db $00, $05
db $80, $01
db $00, $05
@@ -130,16 +130,16 @@ RLEList_1a4dc: ; 1a4dc (6:64dc)
db $E0, $01
db $FF
-RLEList_1a4e9: ; 1a4e9 (6:64e9)
- db $40, $02
- db $10, $03
- db $80, $05
- db $20, $01
- db $80, $06
+RLEList_PlayerWalkToLab: ; 1a4e9 (6:64e9)
+ db D_UP, $02
+ db D_RIGHT, $03
+ db D_DOWN, $05
+ db D_LEFT, $01
+ db D_DOWN, $06
db $FF
Func_1a4f4: ; 1a4f4 (6:64f4)
- ld a, [wcd38]
+ ld a, [wSimulatedJoypadStatesIndex]
and a
ret nz
ld a, $0
@@ -149,11 +149,11 @@ Func_1a4f4: ; 1a4f4 (6:64f4)
res 7, [hl]
ld hl, wd72e
res 7, [hl]
- jp Func_314e
+ jp EndNPCMovementScript
-PointerTable_1a510: ; 1a510 (6:6510)
+PewterMuseumGuyMovementScriptPointerTable: ; 1a510 (6:6510)
dw Func_1a514
- dw Func_1a56b
+ dw PewterMovementScriptDone
Func_1a514: ; 1a514 (6:6514)
ld a, BANK(Music_MuseumGuy)
@@ -162,32 +162,32 @@ Func_1a514: ; 1a514 (6:6514)
ld a, MUSIC_MUSEUM_GUY
ld [wc0ee], a
call PlaySound
- ld a, [wcf13]
+ ld a, [wSpriteIndex]
swap a
- ld [wcf17], a
- call Func_3486
- ld hl, wccd3
+ ld [wNPCMovementScriptSpriteOffset], a
+ call StartSimulatingJoypadStates
+ ld hl, wSimulatedJoypadStatesEnd
ld de, RLEList_PewterMuseumPlayer
call DecodeRLEList
dec a
- ld [wcd38], a
+ ld [wSimulatedJoypadStatesIndex], a
xor a
ld [wd12f], a
predef PewterGuys
- ld hl, wcc97
+ ld hl, wNPCMovementDirections2
ld de, RLEList_PewterMuseumGuy
call DecodeRLEList
ld hl, wd72e
res 7, [hl]
ld a, $1
- ld [wcf10], a
+ ld [wNPCMovementScriptFunctionNum], a
ret
RLEList_PewterMuseumPlayer: ; 1a559 (6:6559)
- db $00, $01
- db $40, $03
- db $20, $0D
- db $40, $06
+ db 0, $01
+ db D_UP, $03
+ db D_LEFT, $0D
+ db D_UP, $06
db $FF
RLEList_PewterMuseumGuy: ; 1a562 (6:6562)
@@ -197,19 +197,19 @@ RLEList_PewterMuseumGuy: ; 1a562 (6:6562)
db $80, $01
db $FF
-Func_1a56b: ; 1a56b (6:656b)
- ld a, [wcd38]
+PewterMovementScriptDone: ; 1a56b (6:656b)
+ ld a, [wSimulatedJoypadStatesIndex]
and a
ret nz
ld hl, wd730
res 7, [hl]
ld hl, wd72e
res 7, [hl]
- jp Func_314e
+ jp EndNPCMovementScript
-PointerTable_1a57d: ; 1a57d (6:657d)
+PewterGymGuyMovementScriptPointerTable: ; 1a57d (6:657d)
dw Func_1a581
- dw Func_1a56b
+ dw PewterMovementScriptDone
Func_1a581: ; 1a581 (6:6581)
ld a, BANK(Music_MuseumGuy)
@@ -218,20 +218,20 @@ Func_1a581: ; 1a581 (6:6581)
ld a, MUSIC_MUSEUM_GUY
ld [wc0ee], a
call PlaySound
- ld a, [wcf13]
+ ld a, [wSpriteIndex]
swap a
- ld [wcf17], a
+ ld [wNPCMovementScriptSpriteOffset], a
xor a
ld [wSpriteStateData2 + $06], a
- ld hl, wccd3
+ ld hl, wSimulatedJoypadStatesEnd
ld de, RLEList_PewterGymPlayer
call DecodeRLEList
dec a
- ld [wcd38], a
+ ld [wSimulatedJoypadStatesIndex], a
ld a, $1
ld [wd12f], a
predef PewterGuys
- ld hl, wcc97
+ ld hl, wNPCMovementDirections2
ld de, RLEList_PewterGymGuy
call DecodeRLEList
ld hl, wd72e
@@ -239,16 +239,16 @@ Func_1a581: ; 1a581 (6:6581)
ld hl, wd730
set 7, [hl]
ld a, $1
- ld [wcf10], a
+ ld [wNPCMovementScriptFunctionNum], a
ret
RLEList_PewterGymPlayer: ; 1a5cd (6:65cd)
- db $00, $01
- db $10, $02
- db $80, $05
- db $20, $0B
- db $40, $05
- db $20, $0F
+ db 0, $01
+ db D_RIGHT, $02
+ db D_DOWN, $05
+ db D_LEFT, $0B
+ db D_UP, $05
+ db D_LEFT, $0F
db $FF
RLEList_PewterGymGuy: ; 1a5da (6:65da)
@@ -260,12 +260,11 @@ RLEList_PewterGymGuy: ; 1a5da (6:65da)
db $C0, $03
db $FF
-; XXX why would this function want to return on POKEMONTOWER_7?
-Func_1a5e7: ; 1a5e7 (6:65e7)
- ld a, [W_CURMAP] ; W_CURMAP
+FreezeEnemyTrainerSprite: ; 1a5e7 (6:65e7)
+ ld a, [W_CURMAP]
cp POKEMONTOWER_7
- ret z
- ld hl, RivalIDs ; $6605
+ ret z ; the Rockets on Pokemon Tower 7F leave after battling, so don't freeze them
+ ld hl, RivalIDs
ld a, [wEngagedTrainerClass]
ld b, a
.loop
@@ -273,11 +272,11 @@ Func_1a5e7: ; 1a5e7 (6:65e7)
cp $ff
jr z, .notRival
cp b
- ret z
+ ret z ; the rival leaves after battling, so don't freeze him
jr .loop
.notRival
- ld a, [wcf13]
- ld [H_DOWNARROWBLINKCNT2], a ; $ff8c
+ ld a, [wSpriteIndex]
+ ld [H_SPRITEINDEX], a
jp SetSpriteMovementBytesToFF
RivalIDs: ; 1a605 (6:6605)
diff --git a/engine/overworld/oam.asm b/engine/overworld/oam.asm
index 63495d22..b4247257 100644
--- a/engine/overworld/oam.asm
+++ b/engine/overworld/oam.asm
@@ -2,13 +2,13 @@ PrepareOAMData:
; Determine OAM data for currently visible
; sprites and write it to wOAMBuffer.
- ld a, [wcfcb]
+ ld a, [wUpdateSpritesEnabled]
dec a
jr z, .asm_4b1e
cp 0 - 1
ret nz
- ld [wcfcb], a
+ ld [wUpdateSpritesEnabled], a
jp HideSprites
.asm_4b1e
diff --git a/engine/overworld/pewter_guys.asm b/engine/overworld/pewter_guys.asm
index 2f3001fb..eb6dd5ac 100755
--- a/engine/overworld/pewter_guys.asm
+++ b/engine/overworld/pewter_guys.asm
@@ -1,8 +1,8 @@
PewterGuys: ; 37ca1 (d:7ca1)
- ld hl, wccd3
- ld a, [wcd38]
- dec a
- ld [wcd38], a
+ ld hl, wSimulatedJoypadStatesEnd
+ ld a, [wSimulatedJoypadStatesIndex]
+ dec a ; this decrement causes it to overwrite the last byte before $FF in the list
+ ld [wSimulatedJoypadStatesIndex], a
ld d, 0
ld e, a
add hl, de
@@ -37,9 +37,9 @@ PewterGuys: ; 37ca1 (d:7ca1)
ret z
ld [de], a
inc de
- ld a, [wcd38]
+ ld a, [wSimulatedJoypadStatesIndex]
inc a
- ld [wcd38], a
+ ld [wSimulatedJoypadStatesIndex], a
jr .asm_37cd2
.asm_37ce1
inc hl
diff --git a/engine/overworld/player_animations.asm b/engine/overworld/player_animations.asm
index a0d8175f..473b0d5a 100755
--- a/engine/overworld/player_animations.asm
+++ b/engine/overworld/player_animations.asm
@@ -1,66 +1,67 @@
-Func_70510: ; 70510 (1c:4510)
- call Func_706ef
+EnterMapAnim: ; 70510 (1c:4510)
+ call InitFacingDirectionBuffer
ld a, $ec
- ld [wSpriteStateData1 + 4], a
+ ld [wSpriteStateData1 + 4], a ; player's sprite Y screen position
call Delay3
push hl
- call GBFadeIn2
+ call GBFadeInFromWhite
ld hl, W_FLAGS_D733
- bit 7, [hl]
+ bit 7, [hl] ; used fly out of battle?
res 7, [hl]
- jr nz, .asm_70568
+ jr nz, .flyAnimation
ld a, (SFX_02_4c - SFX_Headers_02) / 3
call PlaySound
ld hl, wd732
- bit 4, [hl]
+ bit 4, [hl] ; used dungeon warp?
res 4, [hl]
pop hl
- jr nz, .asm_7055e
- call Func_705aa
+ jr nz, .dungeonWarpAnimation
+ call PlayerSpinWhileMovingDown
ld a, (SFX_02_4f - SFX_Headers_02) / 3
call PlaySound
- call Func_70787
+ call IsPlayerStandingOnWarpPadOrHole
ld a, b
and a
- jr nz, .asm_7055b
- ld hl, wWhichTrade ; wWhichTrade
+ jr nz, .done
+; if the player is not standing on a warp pad or hole
+ ld hl, wPlayerSpinInPlaceAnimFrameDelay
xor a
- ld [hli], a
+ ld [hli], a ; wPlayerSpinInPlaceAnimFrameDelay
inc a
- ld [hli], a
+ ld [hli], a ; wPlayerSpinInPlaceAnimFrameDelayDelta
ld a, $8
- ld [hli], a
- ld [hl], $ff
+ ld [hli], a ; wPlayerSpinInPlaceAnimFrameDelayEndValue
+ ld [hl], $ff ; wPlayerSpinInPlaceAnimSoundID
ld hl, wcd48
- call Func_70730
-.asm_70558
- call Func_2307
-.asm_7055b
- jp Func_70772
-.asm_7055e
- ld c, $32
+ call PlayerSpinInPlace
+.restoreDefaultMusic
+ call PlayDefaultMusic
+.done
+ jp RestoreFacingDirectionAndYScreenPos
+.dungeonWarpAnimation
+ ld c, 50
call DelayFrames
- call Func_705aa
- jr .asm_7055b
-.asm_70568
+ call PlayerSpinWhileMovingDown
+ jr .done
+.flyAnimation
pop hl
- ld de, BirdSprite ; $4d80
+ ld de, BirdSprite
ld hl, vNPCSprites
ld bc, (BANK(BirdSprite) << 8) + $0c
call CopyVideoData
- call Func_706d7
+ call LoadBirdSpriteGraphics
ld a, (SFX_02_50 - SFX_Headers_02) / 3
call PlaySound
- ld hl, wWhichTrade ; wWhichTrade
- xor a
- ld [hli], a
- ld a, $c
- ld [hli], a
- ld [hl], $8
+ ld hl, wFlyAnimUsingCoordList
+ xor a ; is using coord list
+ ld [hli], a ; wFlyAnimUsingCoordList
+ ld a, 12
+ ld [hli], a ; wFlyAnimCounter
+ ld [hl], $8 ; wFlyAnimBirdSpriteImageIndex (facing right)
ld de, FlyAnimationEnterScreenCoords ; $4592
- call Func_706ae
+ call DoFlyAnimation
call LoadPlayerSpriteGraphics
- jr .asm_70558
+ jr .restoreDefaultMusic
FlyAnimationEnterScreenCoords: ; 70592 (1c:4592)
; y, x pairs
@@ -79,90 +80,92 @@ FlyAnimationEnterScreenCoords: ; 70592 (1c:4592)
db $3C, $48
db $3C, $40
-Func_705aa: ; 705aa (1c:45aa)
- ld hl, wWhichTrade ; wWhichTrade
+PlayerSpinWhileMovingDown: ; 705aa (1c:45aa)
+ ld hl, wPlayerSpinWhileMovingUpOrDownAnimDeltaY
ld a, $10
- ld [hli], a
+ ld [hli], a ; wPlayerSpinWhileMovingUpOrDownAnimDeltaY
ld a, $3c
- ld [hli], a
- call Func_7077f
- ld [hl], a
- jp Func_70755
+ ld [hli], a ; wPlayerSpinWhileMovingUpOrDownAnimMaxY
+ call GetPlayerTeleportAnimFrameDelay
+ ld [hl], a ; wPlayerSpinWhileMovingUpOrDownAnimFrameDelay
+ jp PlayerSpinWhileMovingUpOrDown
_LeaveMapAnim: ; 705ba (1c:45ba)
- call Func_706ef
- call Func_70787
+ call InitFacingDirectionBuffer
+ call IsPlayerStandingOnWarpPadOrHole
ld a, b
and a
- jr z, .asm_705ef
+ jr z, .playerNotStandingOnWarpPadOrHole
dec a
- jp nz, Func_7067d
-.asm_705c8
+ jp nz, LeaveMapThroughHoleAnim
+.spinWhileMovingUp
ld a, (SFX_02_4b - SFX_Headers_02) / 3
call PlaySound
- ld hl, wWhichTrade ; wWhichTrade
- ld a, $f0
- ld [hli], a
+ ld hl, wPlayerSpinWhileMovingUpOrDownAnimDeltaY
+ ld a, -$10
+ ld [hli], a ; wPlayerSpinWhileMovingUpOrDownAnimDeltaY
ld a, $ec
- ld [hli], a
- call Func_7077f
- ld [hl], a
- call Func_70755
- call Func_70787
+ ld [hli], a ; wPlayerSpinWhileMovingUpOrDownAnimMaxY
+ call GetPlayerTeleportAnimFrameDelay
+ ld [hl], a ; wPlayerSpinWhileMovingUpOrDownAnimFrameDelay
+ call PlayerSpinWhileMovingUpOrDown
+ call IsPlayerStandingOnWarpPadOrHole
ld a, b
dec a
- jr z, .asm_705e9
- ld c, $a
+ jr z, .playerStandingOnWarpPad
+; if not standing on a warp pad, there is an extra delay
+ ld c, 10
call DelayFrames
-.asm_705e9
- call GBFadeOut2
- jp Func_70772
-.asm_705ef
+.playerStandingOnWarpPad
+ call GBFadeOutToWhite
+ jp RestoreFacingDirectionAndYScreenPos
+.playerNotStandingOnWarpPadOrHole
ld a, $4
call StopMusic
ld a, [wd732]
- bit 6, a
- jr z, .asm_70610
- ld hl, wWhichTrade ; wWhichTrade
- ld a, $10
- ld [hli], a
- ld a, $ff
- ld [hli], a
+ bit 6, a ; is the last used pokemon center the destination?
+ jr z, .flyAnimation
+; if going to the last used pokemon center
+ ld hl, wPlayerSpinInPlaceAnimFrameDelay
+ ld a, 16
+ ld [hli], a ; wPlayerSpinInPlaceAnimFrameDelay
+ ld a, -1
+ ld [hli], a ; wPlayerSpinInPlaceAnimFrameDelayDelta
xor a
- ld [hli], a
- ld [hl], $a1
+ ld [hli], a ; wPlayerSpinInPlaceAnimFrameDelayEndValue
+ ld [hl], $a1 ; wPlayerSpinInPlaceAnimSoundID
ld hl, wcd48
- call Func_70730
- jr .asm_705c8
-.asm_70610
- call Func_706d7
- ld hl, wWhichTrade ; wWhichTrade
- ld a, $ff
- ld [hli], a
- ld a, $8
- ld [hli], a
- ld [hl], $c
- call Func_706ae
+ call PlayerSpinInPlace
+ jr .spinWhileMovingUp
+.flyAnimation
+ call LoadBirdSpriteGraphics
+ ld hl, wFlyAnimUsingCoordList
+ ld a, $ff ; is not using coord list (flap in place)
+ ld [hli], a ; wFlyAnimUsingCoordList
+ ld a, 8
+ ld [hli], a ; wFlyAnimCounter
+ ld [hl], $c ; wFlyAnimBirdSpriteImageIndex
+ call DoFlyAnimation
ld a, (SFX_02_50 - SFX_Headers_02) / 3
call PlaySound
- ld hl, wWhichTrade ; wWhichTrade
- xor a
- ld [hli], a
+ ld hl, wFlyAnimUsingCoordList
+ xor a ; is using coord list
+ ld [hli], a ; wFlyAnimUsingCoordList
ld a, $c
- ld [hli], a
- ld [hl], $c
+ ld [hli], a ; wFlyAnimCounter
+ ld [hl], $c ; wFlyAnimBirdSpriteImageIndex (facing right)
ld de, FlyAnimationScreenCoords1 ; $464f
- call Func_706ae
- ld c, $28
+ call DoFlyAnimation
+ ld c, 40
call DelayFrames
- ld hl, wTrainerEngageDistance
- ld a, $b
- ld [hli], a
- ld [hl], $8
+ ld hl, wFlyAnimCounter
+ ld a, 11
+ ld [hli], a ; wFlyAnimCounter
+ ld [hl], $8 ; wFlyAnimBirdSpriteImageIndex (facing left)
ld de, FlyAnimationScreenCoords2 ; $4667
- call Func_706ae
- call GBFadeOut2
- jp Func_70772
+ call DoFlyAnimation
+ call GBFadeOutToWhite
+ jp RestoreFacingDirectionAndYScreenPos
FlyAnimationScreenCoords1: ; 7064f (1c:464f)
; y, x pairs
@@ -198,33 +201,35 @@ FlyAnimationScreenCoords2: ; 70667 (1c:4667)
db $F0, $00
-Func_7067d: ; 7067d (1c:467d)
+LeaveMapThroughHoleAnim: ; 7067d (1c:467d)
ld a, $ff
- ld [wcfcb], a
- ld a, [wOAMBuffer + $02]
- ld [wOAMBuffer + $0a], a
- ld a, [wOAMBuffer + $06]
- ld [wOAMBuffer + $0e], a
+ ld [wUpdateSpritesEnabled], a ; disable UpdateSprites
+ ; shift upper half of player's sprite down 8 pixels and hide lower half
+ ld a, [wOAMBuffer + 0 * 4 + 2]
+ ld [wOAMBuffer + 2 * 4 + 2], a
+ ld a, [wOAMBuffer + 1 * 4 + 2]
+ ld [wOAMBuffer + 3 * 4 + 2], a
ld a, $a0
- ld [wOAMBuffer], a
- ld [wOAMBuffer + $04], a
- ld c, $2
+ ld [wOAMBuffer + 0 * 4], a
+ ld [wOAMBuffer + 1 * 4], a
+ ld c, 2
call DelayFrames
+ ; hide lower half of player's sprite
ld a, $a0
- ld [wOAMBuffer + $08], a
- ld [wOAMBuffer + $0c], a
- call GBFadeOut2
+ ld [wOAMBuffer + 2 * 4], a
+ ld [wOAMBuffer + 3 * 4], a
+ call GBFadeOutToWhite
ld a, $1
- ld [wcfcb], a
- jp Func_70772
+ ld [wUpdateSpritesEnabled], a ; enable UpdateSprites
+ jp RestoreFacingDirectionAndYScreenPos
-Func_706ae: ; 706ae (1c:46ae)
- ld a, [wTrainerFacingDirection]
- xor $1
- ld [wTrainerFacingDirection], a
+DoFlyAnimation: ; 706ae (1c:46ae)
+ ld a, [wFlyAnimBirdSpriteImageIndex]
+ xor $1 ; make the bird flap its wings
+ ld [wFlyAnimBirdSpriteImageIndex], a
ld [wSpriteStateData1 + 2], a
call Delay3
- ld a, [wWhichTrade] ; wWhichTrade
+ ld a, [wFlyAnimUsingCoordList]
cp $ff
jr z, .asm_706cd
ld hl, wSpriteStateData1 + 4
@@ -236,13 +241,13 @@ Func_706ae: ; 706ae (1c:46ae)
inc de
ld [hl], a
.asm_706cd
- ld a, [wTrainerEngageDistance]
+ ld a, [wFlyAnimCounter]
dec a
- ld [wTrainerEngageDistance], a
- jr nz, Func_706ae
+ ld [wFlyAnimCounter], a
+ jr nz, DoFlyAnimation
ret
-Func_706d7: ; 706d7 (1c:46d7)
+LoadBirdSpriteGraphics: ; 706d7 (1c:46d7)
ld de, BirdSprite ; $4d80
ld hl, vNPCSprites
ld bc, (BANK(BirdSprite) << 8) + $0c
@@ -252,32 +257,32 @@ Func_706d7: ; 706d7 (1c:46d7)
ld bc, (BANK(BirdSprite) << 8) + $0c
jp CopyVideoData
-Func_706ef: ; 706ef (1c:46ef)
- ld a, [wSpriteStateData1 + 2]
+InitFacingDirectionBuffer: ; 706ef (1c:46ef)
+ ld a, [wSpriteStateData1 + 2] ; player's sprite facing direction (image index is locked to standing images)
ld [wcd50], a
- ld a, [wSpriteStateData1 + 4]
+ ld a, [wSpriteStateData1 + 4] ; player's sprite Y screen position
ld [wcd4f], a
- ld hl, PlayerSpinningFacingOrder ; $4713
+ ld hl, PlayerSpinningFacingOrder
ld de, wcd48
ld bc, $4
call CopyData
- ld a, [wSpriteStateData1 + 2]
+ ld a, [wSpriteStateData1 + 2] ; player's sprite facing direction (image index is locked to standing images)
ld hl, wcd48
-.asm_7070d
+.loop
cp [hl]
inc hl
- jr nz, .asm_7070d
+ jr nz, .loop
dec hl
ret
PlayerSpinningFacingOrder: ; 70713 (1c:4713)
; The order of the direction the player's sprite is facing when teleporting
; away. Creates a spinning effect.
- db $00, $08, $04, $0C ; down, left, up, right
+ db SPRITE_FACING_DOWN, SPRITE_FACING_LEFT, SPRITE_FACING_UP, SPRITE_FACING_RIGHT
-Func_70717: ; 70717 (1c:4717)
+SpinPlayerSprite: ; 70717 (1c:4717)
ld a, [hl]
- ld [wSpriteStateData1 + 2], a
+ ld [wSpriteStateData1 + 2], a ; player's sprite facing direction (image index is locked to standing images)
push hl
ld hl, wcd48
ld de, wcd47
@@ -288,84 +293,85 @@ Func_70717: ; 70717 (1c:4717)
pop hl
ret
-Func_70730: ; 70730 (1c:4730)
- call Func_70717
- ld a, [wWhichTrade] ; wWhichTrade
+PlayerSpinInPlace: ; 70730 (1c:4730)
+ call SpinPlayerSprite
+ ld a, [wPlayerSpinInPlaceAnimFrameDelay]
ld c, a
and $3
jr nz, .asm_70743
- ld a, [wTrainerScreenY]
+ ld a, [wPlayerSpinInPlaceAnimSoundID]
cp $ff
call nz, PlaySound
.asm_70743
- ld a, [wTrainerEngageDistance]
+ ld a, [wPlayerSpinInPlaceAnimFrameDelayDelta]
add c
- ld [wWhichTrade], a ; wWhichTrade
+ ld [wPlayerSpinInPlaceAnimFrameDelay], a
ld c, a
- ld a, [wTrainerFacingDirection]
+ ld a, [wPlayerSpinInPlaceAnimFrameDelayEndValue]
cp c
ret z
call DelayFrames
- jr Func_70730
+ jr PlayerSpinInPlace
-Func_70755: ; 70755 (1c:4755)
- call Func_70717
- ld a, [wWhichTrade] ; wWhichTrade
+PlayerSpinWhileMovingUpOrDown: ; 70755 (1c:4755)
+ call SpinPlayerSprite
+ ld a, [wPlayerSpinWhileMovingUpOrDownAnimDeltaY]
ld c, a
- ld a, [wSpriteStateData1 + 4]
+ ld a, [wSpriteStateData1 + 4] ; player's sprite Y screen position
add c
ld [wSpriteStateData1 + 4], a
ld c, a
- ld a, [wTrainerEngageDistance]
+ ld a, [wPlayerSpinWhileMovingUpOrDownAnimMaxY]
cp c
ret z
- ld a, [wTrainerFacingDirection]
+ ld a, [wPlayerSpinWhileMovingUpOrDownAnimFrameDelay]
ld c, a
call DelayFrames
- jr Func_70755
+ jr PlayerSpinWhileMovingUpOrDown
-Func_70772: ; 70772 (1c:4772)
+RestoreFacingDirectionAndYScreenPos: ; 70772 (1c:4772)
ld a, [wcd4f]
ld [wSpriteStateData1 + 4], a
ld a, [wcd50]
ld [wSpriteStateData1 + 2], a
ret
-Func_7077f: ; 7077f (1c:477f)
- ld a, [wcf1b]
+; if SGB, 2 frames, else 3 frames
+GetPlayerTeleportAnimFrameDelay: ; 7077f (1c:477f)
+ ld a, [wOnSGB]
xor $1
inc a
inc a
ret
-Func_70787: ; 70787 (1c:4787)
+IsPlayerStandingOnWarpPadOrHole: ; 70787 (1c:4787)
ld b, 0
- ld hl, DataTable_707a9 ; $47a9
- ld a, [W_CURMAPTILESET] ; W_CURMAPTILESET
+ ld hl, .warpPadAndHoleData
+ ld a, [W_CURMAPTILESET]
ld c, a
-.asm_70790
+.loop
ld a, [hli]
cp $ff
- jr z, .asm_707a4
+ jr z, .done
cp c
- jr nz, .asm_7079e
+ jr nz, .nextEntry
aCoord 8, 9
cp [hl]
- jr z, .asm_707a2
-.asm_7079e
+ jr z, .foundMatch
+.nextEntry
inc hl
inc hl
- jr .asm_70790
-.asm_707a2
+ jr .loop
+.foundMatch
inc hl
ld b, [hl]
-.asm_707a4
+.done
ld a, b
ld [wcd5b], a
ret
; format: db tileset id, tile id, value to be put in wcd5b
-DataTable_707a9: ; 707a9 (1c:47a9)
+.warpPadAndHoleData: ; 707a9 (1c:47a9)
db FACILITY, $20, 1 ; warp pad
db FACILITY, $11, 2 ; hole
db CAVERN, $22, 2 ; hole
@@ -454,7 +460,7 @@ ItsABiteText: ; 70851 (1c:4851)
db "@"
FishingRodGfxProperties: ; 70856 (1c:4856)
-; specicies how the fishing rod should be drawn on the screen
+; specifies how the fishing rod should be drawn on the screen
; first byte = screen y coordinate
; second byte = screen x coordinate
; third byte = tile number
@@ -482,21 +488,21 @@ RedFishingTiles: ; 70866 (1c:4866)
dw vNPCSprites2 + $7d0
_HandleMidJump: ; 7087e (1c:487e)
- ld a, [wd714]
+ ld a, [wPlayerJumpingYScreenCoordsIndex]
ld c, a
inc a
cp $10
- jr nc, .asm_70895
- ld [wd714], a
- ld b, $0
- ld hl, PlayerJumpingYScreenCoords ; $48ba
+ jr nc, .finishedJump
+ ld [wPlayerJumpingYScreenCoordsIndex], a
+ ld b, 0
+ ld hl, PlayerJumpingYScreenCoords
add hl, bc
ld a, [hl]
ld [wSpriteStateData1 + 4], a ; player's sprite y coordinate
ret
-.asm_70895
- ld a, [wWalkCounter] ; wcfc5
- cp $0
+.finishedJump
+ ld a, [wWalkCounter]
+ cp 0
ret nz
call UpdateSprites
call Delay3
@@ -504,11 +510,11 @@ _HandleMidJump: ; 7087e (1c:487e)
ld [hJoyHeld], a
ld [hJoyPressed], a
ld [hJoyReleased], a
- ld [wd714], a
+ ld [wPlayerJumpingYScreenCoordsIndex], a
ld hl, wd736
- res 6, [hl]
+ res 6, [hl] ; not jumping down a ledge any more
ld hl, wd730
- res 7, [hl]
+ res 7, [hl] ; not simulating joypad states any more
xor a
ld [wJoyIgnore], a
ret
diff --git a/engine/overworld/pokemart.asm b/engine/overworld/pokemart.asm
index 3b06bd2c..a27f6b0a 100755
--- a/engine/overworld/pokemart.asm
+++ b/engine/overworld/pokemart.asm
@@ -173,13 +173,13 @@ DisplayPokemartDialogue_: ; 6c20 (1:6c20)
ld [wcf0a],a
.skipSettingFlag2
ld a,(SFX_02_5a - SFX_Headers_02) / 3
- call PlaySoundWaitForCurrent ; play sound
- call WaitForSoundToFinish ; wait until sound is done playing
+ call PlaySoundWaitForCurrent
+ call WaitForSoundToFinish
ld hl,PokemartBoughtItemText
call PrintText
jp .buyMenuLoop
.returnToMainPokemartMenu
- call LoadScreenTilesFromBuffer1 ; restore save screen
+ call LoadScreenTilesFromBuffer1
ld a,$13
ld [wd125],a
call DisplayTextBoxID ; draw money text box
@@ -203,7 +203,7 @@ DisplayPokemartDialogue_: ; 6c20 (1:6c20)
ld hl,PokemartThankYouText
call PrintText
ld a,$01
- ld [wcfcb],a
+ ld [wUpdateSpritesEnabled],a
call UpdateSprites ; move sprites
ld a,[wd07e]
ld [wListScrollOffset],a
diff --git a/engine/overworld/ssanne.asm b/engine/overworld/ssanne.asm
index 8fd8f99a..f1a8ecf9 100755
--- a/engine/overworld/ssanne.asm
+++ b/engine/overworld/ssanne.asm
@@ -1,37 +1,37 @@
-Func_79f54: ; 79f54 (1e:5f54)
+AnimateBoulderDust: ; 79f54 (1e:5f54)
ld a, $1
- ld [wcd50], a
- ld a, [wcfcb]
+ ld [wcd50], a ; select the boulder dust offsets
+ ld a, [wUpdateSpritesEnabled]
push af
ld a, $ff
- ld [wcfcb], a
- ld a, $e4
- ld [rOBP1], a ; $ff49
+ ld [wUpdateSpritesEnabled], a
+ ld a, %11100100
+ ld [rOBP1], a
call LoadSmokeTileFourTimes
- callba asm_f055
- ld c, $8
-.asm_79f73
+ callba WriteCutTreeBoulderDustAnimationOAMBlock
+ ld c, 8 ; number of steps in animation
+.loop
push bc
- call Func_79f92
- ld bc, .asm_79f7e
+ call GetMoveBoulderDustFunctionPointer
+ ld bc, .returnAddress
push bc
ld c, $4
jp [hl]
-.asm_79f7e
- ld a, [rOBP1] ; $ff49
- xor $64
- ld [rOBP1], a ; $ff49
+.returnAddress
+ ld a, [rOBP1]
+ xor %01100100
+ ld [rOBP1], a
call Delay3
pop bc
dec c
- jr nz, .asm_79f73
+ jr nz, .loop
pop af
- ld [wcfcb], a
+ ld [wUpdateSpritesEnabled], a
jp LoadPlayerSpriteGraphics
-Func_79f92: ; 79f92 (1e:5f92)
- ld a, [wSpriteStateData1 + 9]
- ld hl, PointerTable_79fb0 ; $5fb0
+GetMoveBoulderDustFunctionPointer: ; 79f92 (1e:5f92)
+ ld a, [wSpriteStateData1 + 9] ; player's sprite facing direction
+ ld hl, MoveBoulderDustFunctionPointerTable
ld c, a
ld b, $0
add hl, bc
@@ -51,18 +51,22 @@ Func_79f92: ; 79f92 (1e:5f92)
pop hl
ret
-PointerTable_79fb0: ; 79fb0 (1e:5fb0)
+MoveBoulderDustFunctionPointerTable: ; 79fb0 (1e:5fb0)
+; facing down
db $FF,$00
- dw Func_79350
+ dw AdjustOAMBlockYPos
+; facing up
db $01,$00
- dw Func_79350
+ dw AdjustOAMBlockYPos
+; facing left
db $01,$01
- dw Func_79337
+ dw AdjustOAMBlockXPos
+; facing right
db $FF,$01
- dw Func_79337
+ dw AdjustOAMBlockXPos
LoadSmokeTileFourTimes: ; 79fc0 (1e:5fc0)
ld hl, vChars1 + $7c0
diff --git a/engine/overworld/trainers.asm b/engine/overworld/trainers.asm
index b05ddbf1..4aaab3ed 100755
--- a/engine/overworld/trainers.asm
+++ b/engine/overworld/trainers.asm
@@ -1,9 +1,9 @@
-Func_567f9: ; 567f9 (15:67f9)
+_GetSpritePosition1: ; 567f9 (15:67f9)
ld hl, wSpriteStateData1
ld de, $4
- ld a, [wcf13]
- ld [H_DOWNARROWBLINKCNT2], a ; $ff8c
- call Func_56903
+ ld a, [wSpriteIndex]
+ ld [H_SPRITEINDEX], a
+ call GetSpriteDataPointer
ld a, [hli]
ld [$ffeb], a
inc hl
@@ -17,50 +17,50 @@ Func_567f9: ; 567f9 (15:67f9)
ld [$ffee], a
ret
-Func_56819: ; 56819 (15:6819)
+_GetSpritePosition2: ; 56819 (15:6819)
ld hl, wSpriteStateData1
- ld de, $0004
- ld a, [wcf13]
- ld [H_DOWNARROWBLINKCNT2], a ; $ff8c
- call Func_56903
- ld a, [hli]
+ ld de, $4
+ ld a, [wSpriteIndex]
+ ld [H_SPRITEINDEX], a
+ call GetSpriteDataPointer
+ ld a, [hli] ; c1x4 (screen Y pos)
ld [wd130], a
inc hl
- ld a, [hl]
+ ld a, [hl] ; c1x6 (screen X pos)
ld [wd131], a
- ld de, $00fe
+ ld de, $104 - $6
add hl, de
- ld a, [hli]
+ ld a, [hli] ; c2x4 (map Y pos)
ld [wd132], a
- ld a, [hl]
+ ld a, [hl] ; c2x5 (map X pos)
ld [wd133], a
ret
-Func_5683d: ; 5683d (15:683d)
+_SetSpritePosition1: ; 5683d (15:683d)
ld hl, wSpriteStateData1
ld de, $4
- ld a, [wcf13]
- ld [H_DOWNARROWBLINKCNT2], a ; $ff8c
- call Func_56903
- ld a, [$ffeb]
+ ld a, [wSpriteIndex]
+ ld [H_SPRITEINDEX], a
+ call GetSpriteDataPointer
+ ld a, [$ffeb] ; c1x4 (screen Y pos)
ld [hli], a
inc hl
- ld a, [$ffec]
+ ld a, [$ffec] ; c1x6 (screen X pos)
ld [hl], a
- ld de, $fe
+ ld de, $104 - $6
add hl, de
- ld a, [$ffed]
+ ld a, [$ffed] ; c2x4 (map Y pos)
ld [hli], a
- ld a, [$ffee]
+ ld a, [$ffee] ; c2x5 (map X pos)
ld [hl], a
ret
-Func_5685d: ; 5685d (15:685d)
+_SetSpritePosition2: ; 5685d (15:685d)
ld hl, wSpriteStateData1
ld de, $0004
- ld a, [wcf13]
- ld [H_DOWNARROWBLINKCNT2], a ; $ff8c
- call Func_56903
+ ld a, [wSpriteIndex]
+ ld [H_SPRITEINDEX], a
+ call GetSpriteDataPointer
ld a, [wd130]
ld [hli], a
inc hl
@@ -75,7 +75,7 @@ Func_5685d: ; 5685d (15:685d)
ret
TrainerWalkUpToPlayer: ; 56881 (15:6881)
- ld a, [wcf13]
+ ld a, [wSpriteIndex]
swap a
ld [wTrainerSpriteOffset], a ; wWhichTrade
call ReadTrainerScreenPosition
@@ -139,18 +139,20 @@ TrainerWalkUpToPlayer: ; 56881 (15:6881)
ld b, $0
ld a, $80 ; a = direction to go to
.writeWalkScript
- ld hl, wcc97
- ld de, wcc97
+ ld hl, wNPCMovementDirections2
+ ld de, wNPCMovementDirections2
call FillMemory ; write the necessary steps to reach player
ld [hl], $ff ; write end of list sentinel
- ld a, [wcf13]
- ld [H_DOWNARROWBLINKCNT2], a ; $ff8c
+ ld a, [wSpriteIndex]
+ ld [H_SPRITEINDEX], a
jp MoveSprite_
-Func_56903: ; 56903 (15:6903)
+; input: de = offset within sprite entry
+; output: de = pointer to sprite data
+GetSpriteDataPointer: ; 56903 (15:6903)
push de
add hl, de
- ld a, [H_DOWNARROWBLINKCNT2] ; $ff8c
+ ld a, [H_SPRITEINDEX]
swap a
ld d, $0
ld e, a