diff options
Diffstat (limited to 'scripts/LancesRoom.asm')
-rwxr-xr-x | scripts/LancesRoom.asm | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/scripts/LancesRoom.asm b/scripts/LancesRoom.asm new file mode 100755 index 00000000..5e19ea7d --- /dev/null +++ b/scripts/LancesRoom.asm @@ -0,0 +1,162 @@ +LancesRoom_Script: + call LanceShowOrHideEntranceBlocks + call EnableAutoTextBoxDrawing + ld hl, LanceTrainerHeader0 + ld de, LancesRoom_ScriptPointers + ld a, [wLancesRoomCurScript] + call ExecuteCurMapScriptInTable + ld [wLancesRoomCurScript], a + ret + +LanceShowOrHideEntranceBlocks: + ld hl, wCurrentMapScriptFlags + bit 5, [hl] + res 5, [hl] + ret z + CheckEvent EVENT_LANCES_ROOM_LOCK_DOOR + jr nz, .closeEntrance + ; open entrance + ld a, $31 + ld b, $32 + jp LanceSetEntranceBlocks +.closeEntrance + ld a, $72 + ld b, $73 + +LanceSetEntranceBlocks: +; Replaces the tile blocks so the player can't leave. + push bc + ld [wNewTileBlockID], a + lb bc, 6, 2 + call LanceSetEntranceBlock + pop bc + ld a, b + ld [wNewTileBlockID], a + lb bc, 6, 3 + +LanceSetEntranceBlock: + predef_jump ReplaceTileBlock + +ResetLanceScript: + xor a + ld [wLancesRoomCurScript], a + ret + +LancesRoom_ScriptPointers: + dw LanceScript0 + dw DisplayEnemyTrainerTextAndStartBattle + dw LanceScript2 + dw LanceScript3 + dw LanceScript4 + +LanceScript4: + ret + +LanceScript0: + CheckEvent EVENT_BEAT_LANCE + ret nz + ld hl, LanceTriggerMovementCoords + call ArePlayerCoordsInArray + jp nc, CheckFightingMapTrainers + xor a + ld [hJoyHeld], a + ld a, [wCoordIndex] + cp $3 ; Is player standing next to Lance's sprite? + jr nc, .notStandingNextToLance + ld a, $1 + ld [hSpriteIndexOrTextID], a + jp DisplayTextID +.notStandingNextToLance + cp $5 ; Is player standing on the entrance staircase? + jr z, WalkToLance + CheckAndSetEvent EVENT_LANCES_ROOM_LOCK_DOOR + ret nz + ld hl, wCurrentMapScriptFlags + set 5, [hl] + ld a, SFX_GO_INSIDE + call PlaySound + jp LanceShowOrHideEntranceBlocks + +LanceTriggerMovementCoords: + db $01,$05 + db $02,$06 + db $0B,$05 + db $0B,$06 + db $10,$18 + db $FF + +LanceScript2: + call EndTrainerBattle + ld a, [wIsInBattle] + cp $ff + jp z, ResetLanceScript + ld a, $1 + ld [hSpriteIndexOrTextID], a + jp DisplayTextID + +WalkToLance: +; Moves the player down the hallway to Lance's room. + ld a, $ff + ld [wJoyIgnore], a + ld hl, wSimulatedJoypadStatesEnd + ld de, WalkToLance_RLEList + call DecodeRLEList + dec a + ld [wSimulatedJoypadStatesIndex], a + call StartSimulatingJoypadStates + ld a, $3 + ld [wLancesRoomCurScript], a + ld [wCurMapScript], a + ret + +WalkToLance_RLEList: + db D_UP, $0C + db D_LEFT, $0C + db D_DOWN, $07 + db D_LEFT, $06 + db $FF + +LanceScript3: + ld a, [wSimulatedJoypadStatesIndex] + and a + ret nz + call Delay3 + xor a + ld [wJoyIgnore], a + ld [wLancesRoomCurScript], a + ld [wCurMapScript], a + ret + +LancesRoom_TextPointers: + dw LanceText1 + +LanceTrainerHeader0: + dbEventFlagBit EVENT_BEAT_LANCES_ROOM_TRAINER_0 + db ($0 << 4) ; trainer's view range + dwEventFlagAddress EVENT_BEAT_LANCES_ROOM_TRAINER_0 + dw LanceBeforeBattleText ; TextBeforeBattle + dw LanceAfterBattleText ; TextAfterBattle + dw LanceEndBattleText ; TextEndBattle + dw LanceEndBattleText ; TextEndBattle + + db $ff + +LanceText1: + TX_ASM + ld hl, LanceTrainerHeader0 + call TalkToTrainer + jp TextScriptEnd + +LanceBeforeBattleText: + TX_FAR _LanceBeforeBattleText + db "@" + +LanceEndBattleText: + TX_FAR _LanceEndBattleText + db "@" + +LanceAfterBattleText: + TX_FAR _LanceAfterBattleText + TX_ASM + SetEvent EVENT_BEAT_LANCE + jp TextScriptEnd |