kep-hack/scripts/LoreleisRoom.asm
Llinos Evans 6c9265f0a2 Elite Four + Champion refights
This was an interesting thought exercise.

As you can see, this code adds a scaling function for when you reach the KEP post-game. These teams are very powerful and a strong test of the player's skills.

I did, however, remove the Legendary Pokemon from the first three's teams. They felt a little bit out there and kind of decrease the significance of the player's. Plus, we just went through hell adding conditional Hall of Fame respawns.

The Elite Four use refight text based on their LGPE appearances. It's honestly a little odd, so if it's too much, the FRLG conditional text could be used instead. I like the way Agatha's plays out, though...

Anyway, stupid hacky implementation done, please don't look at how I did the champion's trainer number.
2023-07-09 22:16:09 +01:00

174 lines
3.6 KiB
NASM

LoreleisRoom_Script:
call LoreleiShowOrHideExitBlock
call EnableAutoTextBoxDrawing
ld hl, LoreleisRoomTrainerHeaders
ld de, LoreleisRoom_ScriptPointers
ld a, [wLoreleisRoomCurScript]
call ExecuteCurMapScriptInTable
ld [wLoreleisRoomCurScript], a
ret
LoreleiShowOrHideExitBlock:
; Blocks or clears the exit to the next room.
ld hl, wCurrentMapScriptFlags
bit 5, [hl]
res 5, [hl]
ret z
ld hl, wBeatLorelei
set 1, [hl]
CheckEitherEventSet EVENT_BEAT_LORELEIS_ROOM_TRAINER_0, EVENT_BEAT_LORELEIS_ROOM_TRAINER_1
jr z, .blockExitToNextRoom
ld a, $5
jr .setExitBlock
.blockExitToNextRoom
ld a, $24
.setExitBlock
ld [wNewTileBlockID], a
lb bc, 0, 2
predef_jump ReplaceTileBlock
ResetLoreleiScript:
xor a
ld [wLoreleisRoomCurScript], a
ret
LoreleisRoom_ScriptPointers:
dw LoreleiScript0
dw DisplayEnemyTrainerTextAndStartBattle
dw LoreleiScript2
dw LoreleiScript3
dw LoreleiScript4
LoreleiScript4:
ret
LoreleiScriptWalkIntoRoom:
; Walk six steps upward.
ld hl, wSimulatedJoypadStatesEnd
ld a, D_UP
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hli], a
ld [hl], a
ld a, $6
ld [wSimulatedJoypadStatesIndex], a
call StartSimulatingJoypadStates
ld a, $3
ld [wLoreleisRoomCurScript], a
ld [wCurMapScript], a
ret
LoreleiScript0:
ld hl, LoreleiEntranceCoords
call ArePlayerCoordsInArray
jp nc, CheckFightingMapTrainers
xor a
ldh [hJoyPressed], a
ldh [hJoyHeld], a
ld [wSimulatedJoypadStatesEnd], a
ld [wSimulatedJoypadStatesIndex], a
ld a, [wCoordIndex]
cp $3 ; Is player standing one tile above the exit?
jr c, .stopPlayerFromLeaving
CheckAndSetEvent EVENT_AUTOWALKED_INTO_LORELEIS_ROOM
jr z, LoreleiScriptWalkIntoRoom
.stopPlayerFromLeaving
ld a, $2
ldh [hSpriteIndexOrTextID], a
call DisplayTextID ; "Don't run away!"
ld a, D_UP
ld [wSimulatedJoypadStatesEnd], a
ld a, $1
ld [wSimulatedJoypadStatesIndex], a
call StartSimulatingJoypadStates
ld a, $3
ld [wLoreleisRoomCurScript], a
ld [wCurMapScript], a
ret
LoreleiEntranceCoords:
dbmapcoord 4, 10
dbmapcoord 5, 10
dbmapcoord 4, 11
dbmapcoord 5, 11
db -1 ; end
LoreleiScript3:
ld a, [wSimulatedJoypadStatesIndex]
and a
ret nz
call Delay3
xor a
ld [wJoyIgnore], a
ld [wLoreleisRoomCurScript], a
ld [wCurMapScript], a
ret
LoreleiScript2:
call EndTrainerBattle
ld a, [wIsInBattle]
cp $ff
jp z, ResetLoreleiScript
ld a, $1
ldh [hSpriteIndexOrTextID], a
jp DisplayTextID
LoreleisRoom_TextPointers:
dw LoreleiText1
dw LoreleiDontRunAwayText
LoreleisRoomTrainerHeaders:
def_trainers
LoreleisRoomTrainerHeader0:
trainer EVENT_BEAT_LORELEIS_ROOM_TRAINER_0, 0, LoreleiBeforeBattleText, LoreleiEndBattleText, LoreleiAfterBattleText
LoreleisRoomTrainerHeader1:
trainer EVENT_BEAT_LORELEIS_ROOM_TRAINER_1, 0, LoreleiRematchText, LoreleiRematchEndBattleText, LoreleiRematchAfterBattleText
db -1 ; end
LoreleiText1:
text_asm
ld hl, LoreleisRoomTrainerHeader0
CheckEvent EVENT_POST_GAME_ATTAINED
jr z, .skip
ld hl, LoreleisRoomTrainerHeader1
.skip
call TalkToTrainer
CheckEvent EVENT_POST_GAME_ATTAINED
jr z, .skip2
ld a, [wTrainerNo]
inc a
ld [wTrainerNo], a
.skip2
jp TextScriptEnd
LoreleiBeforeBattleText:
text_far _LoreleiBeforeBattleText
text_end
LoreleiEndBattleText:
text_far _LoreleiEndBattleText
text_end
LoreleiAfterBattleText:
text_far _LoreleiAfterBattleText
text_end
LoreleiDontRunAwayText:
text_far _LoreleiDontRunAwayText
text_end
LoreleiRematchText:
text_far _LoreleiRematchText
text_end
LoreleiRematchEndBattleText:
text_far _LoreleiRematchEndBattleText
text_end
LoreleiRematchAfterBattleText:
text_far _LoreleiRematchAfterBattleText
text_end