123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293 |
- 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 [wSpriteStateData1 + 2], 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 [wNPCMovementScriptPointerTableNum], a
- ld [wNPCMovementScriptFunctionNum], 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]
- ld [H_SPRITEINDEX], 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 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
- ld [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 [wSpriteStateData2 + $06], 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, $05
- db NPC_MOVEMENT_LEFT, $01
- db NPC_MOVEMENT_DOWN, $05
- db NPC_MOVEMENT_RIGHT, $03
- db NPC_MOVEMENT_UP, $01
- db $E0, $01 ; stand still
- db $FF
- RLEList_PlayerWalkToLab:
- db D_UP, $02
- db D_RIGHT, $03
- db D_DOWN, $05
- db D_LEFT, $01
- db D_DOWN, $06
- db $FF
- 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 [wAudioROMBank], a
- ld [wAudioSavedROMBank], a
- ld a, MUSIC_MUSEUM_GUY
- ld [wNewSoundID], a
- call PlaySound
- 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
- predef 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 0, $01
- db D_UP, $03
- db D_LEFT, $0D
- db D_UP, $06
- db $FF
- RLEList_PewterMuseumGuy:
- db NPC_MOVEMENT_UP, $06
- db NPC_MOVEMENT_LEFT, $0D
- db NPC_MOVEMENT_UP, $03
- db NPC_MOVEMENT_LEFT, $01
- db $FF
- 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 [wAudioROMBank], a
- ld [wAudioSavedROMBank], a
- ld a, MUSIC_MUSEUM_GUY
- ld [wNewSoundID], a
- call PlaySound
- ld a, [wSpriteIndex]
- swap a
- ld [wNPCMovementScriptSpriteOffset], a
- xor a
- ld [wSpriteStateData2 + $06], a
- ld hl, wSimulatedJoypadStatesEnd
- ld de, RLEList_PewterGymPlayer
- call DecodeRLEList
- dec a
- ld [wSimulatedJoypadStatesIndex], a
- ld a, 1
- ld [wWhichPewterGuy], a
- predef 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 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:
- db NPC_MOVEMENT_DOWN, $02
- db NPC_MOVEMENT_LEFT, $0F
- db NPC_MOVEMENT_UP, $05
- db NPC_MOVEMENT_LEFT, $0B
- db NPC_MOVEMENT_DOWN, $05
- db NPC_MOVEMENT_RIGHT, $03
- db $FF
- FreezeEnemyTrainerSprite:
- ld a, [wCurMap]
- cp POKEMONTOWER_7
- 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
- ld a, [hli]
- cp $ff
- jr z, .notRival
- cp b
- ret z ; the rival leaves after battling, so don't freeze him
- jr .loop
- .notRival
- ld a, [wSpriteIndex]
- ld [H_SPRITEINDEX], a
- jp SetSpriteMovementBytesToFF
- RivalIDs:
- db OPP_SONY1
- db OPP_SONY2
- db OPP_SONY3
- db $ff
|