kep-hack/scripts/ChampionsRoom.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

326 lines
5.5 KiB
NASM

ChampionsRoom_Script:
call EnableAutoTextBoxDrawing
ld hl, ChampionsRoom_ScriptPointers
ld a, [wChampionsRoomCurScript]
jp CallFunctionInTable
ResetGaryScript:
xor a
ld [wJoyIgnore], a
ld [wChampionsRoomCurScript], a
ret
ChampionsRoom_ScriptPointers:
dw GaryScript0
dw GaryScript1
dw GaryScript2
dw GaryScript3
dw GaryScript4
dw GaryScript5
dw GaryScript6
dw GaryScript7
dw GaryScript8
dw GaryScript9
dw GaryScript10
GaryScript0:
ret
GaryScript1:
ld a, $ff
ld [wJoyIgnore], a
ld hl, wSimulatedJoypadStatesEnd
ld de, GaryEntrance_RLEMovement
call DecodeRLEList
dec a
ld [wSimulatedJoypadStatesIndex], a
call StartSimulatingJoypadStates
ld a, $2
ld [wChampionsRoomCurScript], a
ret
GaryEntrance_RLEMovement:
db D_UP, 1
db D_RIGHT, 1
db D_UP, 3
db -1 ; end
GaryScript2:
ld a, [wSimulatedJoypadStatesIndex]
and a
ret nz
call Delay3
xor a
ld [wJoyIgnore], a
ld hl, wOptions
res 7, [hl] ; Turn on battle animations to make the battle feel more epic.
ld a, $1
ldh [hSpriteIndexOrTextID], a
call DisplayTextID
call Delay3
ld hl, wd72d
set 6, [hl]
set 7, [hl]
ld hl, GaryDefeatedText
ld de, GaryVictoryText
call SaveEndBattleTextPointers
ld a, OPP_RIVAL3
ld [wCurOpponent], a
; select which team to use during the encounter
ld a, [wRivalStarter]
cp STARTER2
jr nz, .NotSquirtle
ld a, $1
jr .saveTrainerId
.NotSquirtle
cp STARTER3
jr nz, .Charmander
ld a, $2
jr .saveTrainerId
.Charmander
cp STARTER1 ; changes start here
ld a, $3
jr nz, .Pikachu
jr .saveTrainerId
.Pikachu ;
cp STARTER4
jr nz, .Eevee
ld a, $5
jr .saveTrainerId
.Eevee
ld a, $4
jr .saveTrainerId
.saveTrainerId
ld [wTrainerNo], a
CheckEvent EVENT_POST_GAME_ATTAINED
jr z, .skip
ld a, [wTrainerNo]
inc a
inc a
inc a
inc a
inc a
; surely there is a better way
ld [wTrainerNo], a
.skip
ld a, 1
ld [wIsTrainerBattle], a
xor a
ldh [hJoyHeld], a
ld a, $3
ld [wChampionsRoomCurScript], a
ret
GaryScript3:
ld a, [wIsInBattle]
cp $ff
jp z, ResetGaryScript
xor a
ld [wIsTrainerBattle], a
call UpdateSprites
SetEvent EVENT_BEAT_CHAMPION_RIVAL
ld a, $f0
ld [wJoyIgnore], a
ld a, $1
ldh [hSpriteIndexOrTextID], a
call GaryScript_760c8
ld a, $1
ldh [hSpriteIndex], a
call SetSpriteMovementBytesToFF
ld a, $4
ld [wChampionsRoomCurScript], a
ret
GaryScript4:
farcall Music_Cities1AlternateTempo
ld a, $2
ldh [hSpriteIndexOrTextID], a
call GaryScript_760c8
ld a, $2
ldh [hSpriteIndex], a
call SetSpriteMovementBytesToFF
ld de, OakEntranceAfterVictoryMovement
ld a, $2
ldh [hSpriteIndex], a
call MoveSprite
ld a, HS_CHAMPIONS_ROOM_OAK
ld [wMissableObjectIndex], a
predef ShowObject
ld a, $5
ld [wChampionsRoomCurScript], a
ret
OakEntranceAfterVictoryMovement:
db NPC_MOVEMENT_UP
db NPC_MOVEMENT_UP
db NPC_MOVEMENT_UP
db NPC_MOVEMENT_UP
db NPC_MOVEMENT_UP
db -1 ; end
GaryScript5:
ld a, [wd730]
bit 0, a
ret nz
ld a, PLAYER_DIR_LEFT
ld [wPlayerMovingDirection], a
ld a, $1
ldh [hSpriteIndex], a
ld a, SPRITE_FACING_LEFT
ldh [hSpriteFacingDirection], a
call SetSpriteFacingDirectionAndDelay
ld a, $2
ldh [hSpriteIndex], a
xor a ; SPRITE_FACING_DOWN
ldh [hSpriteFacingDirection], a
call SetSpriteFacingDirectionAndDelay
ld a, $3
ldh [hSpriteIndexOrTextID], a
call GaryScript_760c8
ld a, $6
ld [wChampionsRoomCurScript], a
ret
GaryScript6:
ld a, $2
ldh [hSpriteIndex], a
ld a, SPRITE_FACING_RIGHT
ldh [hSpriteFacingDirection], a
call SetSpriteFacingDirectionAndDelay
ld a, $4
ldh [hSpriteIndexOrTextID], a
call GaryScript_760c8
ld a, $7
ld [wChampionsRoomCurScript], a
ret
GaryScript7:
ld a, $2
ldh [hSpriteIndex], a
xor a ; SPRITE_FACING_DOWN
ldh [hSpriteFacingDirection], a
call SetSpriteFacingDirectionAndDelay
ld a, $5
ldh [hSpriteIndexOrTextID], a
call GaryScript_760c8
ld de, OakExitGaryRoomMovement
ld a, $2
ldh [hSpriteIndex], a
call MoveSprite
ld a, $8
ld [wChampionsRoomCurScript], a
ret
OakExitGaryRoomMovement:
db NPC_MOVEMENT_UP
db NPC_MOVEMENT_UP
db -1 ; end
GaryScript8:
ld a, [wd730]
bit 0, a
ret nz
ld a, HS_CHAMPIONS_ROOM_OAK
ld [wMissableObjectIndex], a
predef HideObject
ld a, $9
ld [wChampionsRoomCurScript], a
ret
GaryScript9:
ld a, $ff
ld [wJoyIgnore], a
ld hl, wSimulatedJoypadStatesEnd
ld de, WalkToHallOfFame_RLEMovment
call DecodeRLEList
dec a
ld [wSimulatedJoypadStatesIndex], a
call StartSimulatingJoypadStates
ld a, $a
ld [wChampionsRoomCurScript], a
ret
WalkToHallOfFame_RLEMovment:
db D_UP, 4
db D_LEFT, 1
db -1 ; end
GaryScript10:
ld a, [wSimulatedJoypadStatesIndex]
and a
ret nz
xor a
ld [wJoyIgnore], a
ld a, $0
ld [wChampionsRoomCurScript], a
ret
GaryScript_760c8:
ld a, $f0
ld [wJoyIgnore], a
call DisplayTextID
ld a, $ff
ld [wJoyIgnore], a
ret
ChampionsRoom_TextPointers:
dw GaryText1
dw GaryText2
dw GaryText3
dw GaryText4
dw GaryText5
GaryText1:
text_asm
CheckEvent EVENT_BEAT_CHAMPION_RIVAL
ld hl, GaryChampionIntroText
jr z, .printText
ld hl, GaryText_76103
.printText
call PrintText
jp TextScriptEnd
GaryChampionIntroText:
text_far _GaryChampionIntroText
text_end
GaryDefeatedText:
text_far _GaryDefeatedText
text_end
GaryVictoryText:
text_far _GaryVictoryText
text_end
GaryText_76103:
text_far _GaryText_76103
text_end
GaryText2:
text_far _GaryText2
text_end
GaryText3:
text_asm
ld a, [wPlayerStarter]
ld [wd11e], a
call GetMonName
ld hl, GaryText_76120
call PrintText
jp TextScriptEnd
GaryText_76120:
text_far _GaryText_76120
text_end
GaryText4:
text_far _GaryText_76125
text_end
GaryText5:
text_far _GaryText_7612a
text_end