diff options
| author | dannye <33dannye@gmail.com> | 2020-11-04 00:06:44 -0600 |
|---|---|---|
| committer | dannye <33dannye@gmail.com> | 2020-11-04 00:06:44 -0600 |
| commit | 5647ca687b92954dcf37a6ea6bfbc9a341c32de4 (patch) | |
| tree | dde1937a1bfdb3a835f4155e1c2eb8f1aaf86f63 /engine/overworld/auto_movement.asm | |
| parent | Merge pull request #55 from Deokishisu/patch-1 (diff) | |
| download | pokeyellow-5647ca687b92954dcf37a6ea6bfbc9a341c32de4.tar.gz pokeyellow-5647ca687b92954dcf37a6ea6bfbc9a341c32de4.tar.xz pokeyellow-5647ca687b92954dcf37a6ea6bfbc9a341c32de4.zip | |
Sync with pokered
Diffstat (limited to 'engine/overworld/auto_movement.asm')
| -rwxr-xr-x | engine/overworld/auto_movement.asm | 270 |
1 files changed, 270 insertions, 0 deletions
diff --git a/engine/overworld/auto_movement.asm b/engine/overworld/auto_movement.asm new file mode 100755 index 00000000..a68da55f --- /dev/null +++ b/engine/overworld/auto_movement.asm @@ -0,0 +1,270 @@ +PlayerStepOutFromDoor:: + ld hl, wd730 + res 1, [hl] + call IsPlayerStandingOnDoorTile + jr nc, .notStandingOnDoor + ld a, $fc + ld [wJoyIgnore], a + ld hl, wd736 + set 1, [hl] + ld a, $1 + ld [wSimulatedJoypadStatesIndex], a + ld a, D_DOWN + ld [wSimulatedJoypadStatesEnd], a + xor a + ld [wSpritePlayerStateData1ImageIndex], a + call StartSimulatingJoypadStates + ret +.notStandingOnDoor + xor a + ld [wWastedByteCD3A], a + ld [wSimulatedJoypadStatesIndex], a + ld [wSimulatedJoypadStatesEnd], a + ld hl, wd736 + res 0, [hl] + res 1, [hl] + ld hl, wd730 + res 7, [hl] + ret + +_EndNPCMovementScript:: + ld hl, wd730 + res 7, [hl] + ld hl, wd72e + res 7, [hl] + ld hl, wd736 + res 0, [hl] + res 1, [hl] + xor a + ld [wNPCMovementScriptSpriteOffset], a + ld [wNPCMovementScriptFunctionNum], a + ld [wNPCMovementScriptPointerTableNum], a + ld [wWastedByteCD3A], a + ld [wSimulatedJoypadStatesIndex], a + ld [wSimulatedJoypadStatesEnd], a + ret + +PalletMovementScriptPointerTable:: + dw PalletMovementScript_OakMoveLeft + dw PalletMovementScript_PlayerMoveLeft + dw PalletMovementScript_WaitAndWalkToLab + dw PalletMovementScript_WalkToLab + dw PalletMovementScript_Done + +PalletMovementScript_OakMoveLeft: + ld a, [wXCoord] + sub $a + ld [wNumStepsToTake], a + jr z, .playerOnLeftTile +; The player is on the right tile of the northern path out of Pallet Town and +; Prof. Oak is below. +; Make Prof. Oak step to the left. + ld b, 0 + ld c, a + ld hl, wNPCMovementDirections2 + ld a, NPC_MOVEMENT_LEFT + call FillMemory + ld [hl], $ff + ld a, [wSpriteIndex] + ldh [hSpriteIndex], a + ld de, wNPCMovementDirections2 + call MoveSprite + ld a, $1 + ld [wNPCMovementScriptFunctionNum], a + jr .done +; The player is on the left tile of the northern path out of Pallet Town and +; Prof. Oak is below. +; Prof. Oak is already where he needs to be. +.playerOnLeftTile + ld a, $3 + ld [wNPCMovementScriptFunctionNum], a +.done + ld a, BANK(Music_MuseumGuy) + ld c, a + ld a, MUSIC_MUSEUM_GUY + call PlayMusic + ld hl, wFlags_D733 + set 1, [hl] + ld a, $fc + ld [wJoyIgnore], a + ret + +PalletMovementScript_PlayerMoveLeft: + ld a, [wd730] + bit 0, a ; is an NPC being moved by a script? + ret nz ; return if Oak is still moving + ld a, [wNumStepsToTake] + ld [wSimulatedJoypadStatesIndex], a + ldh [hNPCMovementDirections2Index], a + predef ConvertNPCMovementDirectionsToJoypadMasks + call StartSimulatingJoypadStates + ld a, $2 + ld [wNPCMovementScriptFunctionNum], a + ret + +PalletMovementScript_WaitAndWalkToLab: + ld a, [wSimulatedJoypadStatesIndex] + and a ; is the player done moving left yet? + ret nz + +PalletMovementScript_WalkToLab: + xor a + ld [wOverrideSimulatedJoypadStatesMask], a + ld a, [wSpriteIndex] + swap a + ld [wNPCMovementScriptSpriteOffset], a + xor a + ld [wSpritePlayerStateData2MovementByte1], a + ld hl, wSimulatedJoypadStatesEnd + ld de, RLEList_PlayerWalkToLab + call DecodeRLEList + dec a + 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 [wNPCMovementScriptFunctionNum], a + ret + + +RLEList_ProfOakWalkToLab: + db NPC_MOVEMENT_DOWN, 6 ; differs from red + db NPC_MOVEMENT_LEFT, 1 + db NPC_MOVEMENT_DOWN, 5 + db NPC_MOVEMENT_RIGHT, 3 + db NPC_MOVEMENT_UP, 1 + db NPC_CHANGE_FACING, 1 + db -1 ; end + +RLEList_PlayerWalkToLab: + db D_UP, 2 + db D_RIGHT, 3 + db D_DOWN, 5 + db D_LEFT, 1 + db D_DOWN, 7 ; differs from red + db -1 ; end + +PalletMovementScript_Done: + ld a, [wSimulatedJoypadStatesIndex] + and a + ret nz + ld a, HS_PALLET_TOWN_OAK + ld [wMissableObjectIndex], a + predef HideObject + ld hl, wd730 + res 7, [hl] + ld hl, wd72e + res 7, [hl] + jp EndNPCMovementScript + +PewterMuseumGuyMovementScriptPointerTable:: + dw PewterMovementScript_WalkToMuseum + dw PewterMovementScript_Done + +PewterMovementScript_WalkToMuseum: + ld a, BANK(Music_MuseumGuy) + ld c, a + ld a, MUSIC_MUSEUM_GUY + call PlayMusic + ld a, [wSpriteIndex] + swap a + ld [wNPCMovementScriptSpriteOffset], a + call StartSimulatingJoypadStates + ld hl, wSimulatedJoypadStatesEnd + ld de, RLEList_PewterMuseumPlayer + call DecodeRLEList + dec a + ld [wSimulatedJoypadStatesIndex], a + xor a + ld [wWhichPewterGuy], a + call PewterGuys + ld hl, wNPCMovementDirections2 + ld de, RLEList_PewterMuseumGuy + call DecodeRLEList + ld hl, wd72e + res 7, [hl] + ld a, $1 + ld [wNPCMovementScriptFunctionNum], a + ret + +RLEList_PewterMuseumPlayer: + db NO_INPUT, 1 + db D_UP, 3 + db D_LEFT, 13 + db D_UP, 6 + db -1 ; end + +RLEList_PewterMuseumGuy: + db NPC_MOVEMENT_UP, 6 + db NPC_MOVEMENT_LEFT, 13 + db NPC_MOVEMENT_UP, 3 + db NPC_MOVEMENT_LEFT, 1 + db -1 ; end + +PewterMovementScript_Done: + ld a, [wSimulatedJoypadStatesIndex] + and a + ret nz + ld hl, wd730 + res 7, [hl] + ld hl, wd72e + res 7, [hl] + jp EndNPCMovementScript + +PewterGymGuyMovementScriptPointerTable:: + dw PewterMovementScript_WalkToGym + dw PewterMovementScript_Done + +PewterMovementScript_WalkToGym: + ld a, BANK(Music_MuseumGuy) + ld c, a + ld a, MUSIC_MUSEUM_GUY + call PlayMusic + ld a, [wSpriteIndex] + swap a + ld [wNPCMovementScriptSpriteOffset], a + xor a + ld [wSpritePlayerStateData2MovementByte1], a + ld hl, wSimulatedJoypadStatesEnd + ld de, RLEList_PewterGymPlayer + call DecodeRLEList + dec a + ld [wSimulatedJoypadStatesIndex], a + ld a, 1 + ld [wWhichPewterGuy], a + call PewterGuys + ld hl, wNPCMovementDirections2 + ld de, RLEList_PewterGymGuy + call DecodeRLEList + ld hl, wd72e + res 7, [hl] + ld hl, wd730 + set 7, [hl] + ld a, $1 + ld [wNPCMovementScriptFunctionNum], a + ret + +RLEList_PewterGymPlayer: + db NO_INPUT, 1 + db D_RIGHT, 2 + db D_DOWN, 5 + db D_LEFT, 11 + db D_UP, 5 + db D_LEFT, 15 + db -1 ; end + +RLEList_PewterGymGuy: + db NPC_MOVEMENT_DOWN, 2 + db NPC_MOVEMENT_LEFT, 15 + db NPC_MOVEMENT_UP, 5 + db NPC_MOVEMENT_LEFT, 11 + db NPC_MOVEMENT_DOWN, 5 + db NPC_MOVEMENT_RIGHT, 3 + db -1 ; end + +INCLUDE "engine/events/pewter_guys.asm" |
