kep-hack/scripts/AgathasRoom.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.5 KiB
NASM

AgathasRoom_Script:
call AgathaShowOrHideExitBlock
call EnableAutoTextBoxDrawing
ld hl, AgathasRoomTrainerHeaders
ld de, AgathasRoom_ScriptPointers
ld a, [wAgathasRoomCurScript]
call ExecuteCurMapScriptInTable
ld [wAgathasRoomCurScript], a
ret
AgathaShowOrHideExitBlock:
; Blocks or clears the exit to the next room.
ld hl, wCurrentMapScriptFlags
bit 5, [hl]
res 5, [hl]
ret z
CheckEitherEventSet EVENT_BEAT_AGATHAS_ROOM_TRAINER_0, EVENT_BEAT_AGATHAS_ROOM_TRAINER_1
jr z, .blockExitToNextRoom
ld a, $e
jp .setExitBlock
.blockExitToNextRoom
ld a, $3b
.setExitBlock
ld [wNewTileBlockID], a
lb bc, 0, 2
predef_jump ReplaceTileBlock
ResetAgathaScript:
xor a
ld [wAgathasRoomCurScript], a
ret
AgathasRoom_ScriptPointers:
dw AgathaScript0
dw DisplayEnemyTrainerTextAndStartBattle
dw AgathaScript2
dw AgathaScript3
dw AgathaScript4
AgathaScript4:
ret
AgathaScriptWalkIntoRoom:
; 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 [wAgathasRoomCurScript], a
ld [wCurMapScript], a
ret
AgathaScript0:
ld hl, AgathaEntranceCoords
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_AGATHAS_ROOM
jr z, AgathaScriptWalkIntoRoom
.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 [wAgathasRoomCurScript], a
ld [wCurMapScript], a
ret
AgathaEntranceCoords:
dbmapcoord 4, 10
dbmapcoord 5, 10
dbmapcoord 4, 11
dbmapcoord 5, 11
db -1 ; end
AgathaScript3:
ld a, [wSimulatedJoypadStatesIndex]
and a
ret nz
call Delay3
xor a
ld [wJoyIgnore], a
ld [wAgathasRoomCurScript], a
ld [wCurMapScript], a
ret
AgathaScript2:
call EndTrainerBattle
ld a, [wIsInBattle]
cp $ff
jp z, ResetAgathaScript
ld a, $1
ldh [hSpriteIndexOrTextID], a
call DisplayTextID
ld a, $1
ld [wChampionsRoomCurScript], a
ret
AgathasRoom_TextPointers:
dw AgathaText1
dw AgathaDontRunAwayText
AgathasRoomTrainerHeaders:
def_trainers
AgathasRoomTrainerHeader0:
trainer EVENT_BEAT_AGATHAS_ROOM_TRAINER_0, 0, AgathaBeforeBattleText, AgathaEndBattleText, AgathaAfterBattleText
AgathasRoomTrainerHeader1:
trainer EVENT_BEAT_AGATHAS_ROOM_TRAINER_1, 0, AgathaRematchText, AgathaRematchEndBattleText, AgathaRematchAfterBattleText
db -1 ; end
AgathaText1:
text_asm
ld hl, AgathasRoomTrainerHeader0
CheckEvent EVENT_POST_GAME_ATTAINED
jr z, .skip
ld hl, AgathasRoomTrainerHeader1
.skip
call TalkToTrainer
CheckEvent EVENT_POST_GAME_ATTAINED
jr z, .skip2
ld a, [wTrainerNo]
inc a
ld [wTrainerNo], a
.skip2
jp TextScriptEnd
AgathaBeforeBattleText:
text_far _AgathaBeforeBattleText
text_end
AgathaEndBattleText:
text_far _AgathaEndBattleText
text_end
AgathaAfterBattleText:
text_far _AgathaAfterBattleText
text_end
AgathaDontRunAwayText:
text_far _AgathaDontRunAwayText
text_end
AgathaRematchText:
text_far _AgathaRematchText
text_end
AgathaRematchEndBattleText:
text_far _AgathaRematchEndBattleText
text_end
AgathaRematchAfterBattleText:
text_far _AgathaRematchAfterBattleText
text_end