mirror of
https://github.com/thornAvery/kep-hack.git
synced 2025-09-17 02:40:50 +12:00

This commit adds a large fundamental change to KEP, that being Gym Rematches. This is achieved alongside a rework to the script that makes those post-game-gating NPCs shift around. If you add a new one, just add its constant to the lists you'll see in the Hall of Fame script. It also fixes a few bugs: - Fixed a bug where Cinnabar Gym loaded a fleet of Blaines. This occurred due to the way he is coded at base, and a misunderstanding I had when implementing his scaling. This is now fixed by standardising his gym script instead, while letting the gym trainers still use the old one. - Fixed a bug where the Up-Grade NPC would not appear after beating Silph Co. 11F. However, Giovanni currently seems to have trouble with his text. This floor needs some re-coding anyway, given we need to add Jessie and James to it. And some misc. changes: - Changed the first Moon Stone in Mt. Moon to a Poison Stone for the Nidoking speedrunners - Debug Mode now has a line of code to set up the post-game easily - Changed Surge's initial battle text to Yellow's - Added Sabrina's more accurate LGPE initial battle text, referring to the spoon she bent by accident
274 lines
5.8 KiB
NASM
274 lines
5.8 KiB
NASM
PewterGym_Script:
|
|
ld hl, wCurrentMapScriptFlags
|
|
bit 6, [hl]
|
|
res 6, [hl]
|
|
call nz, .LoadNames
|
|
call EnableAutoTextBoxDrawing
|
|
ld hl, PewterGymTrainerHeaders
|
|
ld de, PewterGym_ScriptPointers
|
|
ld a, [wPewterGymCurScript]
|
|
call ExecuteCurMapScriptInTable
|
|
ld [wPewterGymCurScript], a
|
|
ret
|
|
|
|
.LoadNames:
|
|
ld hl, .CityName
|
|
ld de, .LeaderName
|
|
jp LoadGymLeaderAndCityName
|
|
|
|
.CityName:
|
|
db "PEWTER CITY@"
|
|
|
|
.LeaderName:
|
|
db "BROCK@"
|
|
|
|
PewterGymResetScripts:
|
|
xor a
|
|
ld [wJoyIgnore], a
|
|
ld [wPewterGymCurScript], a
|
|
ld [wCurMapScript], a
|
|
ret
|
|
|
|
PewterGym_ScriptPointers:
|
|
dw CheckFightingMapTrainers
|
|
dw DisplayEnemyTrainerTextAndStartBattle
|
|
dw EndTrainerBattle
|
|
dw PewterGymBrockPostBattle
|
|
|
|
PewterGymBrockPostBattle:
|
|
ld a, [wIsInBattle]
|
|
cp $ff
|
|
jp z, PewterGymResetScripts
|
|
ld a, $f0
|
|
ld [wJoyIgnore], a
|
|
; fallthrough
|
|
PewterGymScriptReceiveTM34:
|
|
ld a, $4
|
|
ldh [hSpriteIndexOrTextID], a
|
|
call DisplayTextID
|
|
SetEvent EVENT_BEAT_BROCK
|
|
lb bc, TM_BIDE, 1
|
|
call GiveItem
|
|
jr nc, .BagFull
|
|
ld a, $5
|
|
ldh [hSpriteIndexOrTextID], a
|
|
call DisplayTextID
|
|
SetEvent EVENT_GOT_TM34
|
|
jr .gymVictory
|
|
.BagFull
|
|
ld a, $6
|
|
ldh [hSpriteIndexOrTextID], a
|
|
call DisplayTextID
|
|
.gymVictory
|
|
ld hl, wObtainedBadges
|
|
set BIT_BOULDERBADGE, [hl]
|
|
ld hl, wBeatGymFlags
|
|
set BIT_BOULDERBADGE, [hl]
|
|
|
|
ld a, HS_GYM_GUY
|
|
ld [wMissableObjectIndex], a
|
|
predef HideObject
|
|
ld a, HS_ROUTE_22_RIVAL_1
|
|
ld [wMissableObjectIndex], a
|
|
predef HideObject
|
|
|
|
ResetEvents EVENT_1ST_ROUTE22_RIVAL_BATTLE, EVENT_ROUTE22_RIVAL_WANTS_BATTLE
|
|
|
|
; deactivate gym trainers
|
|
SetEvent EVENT_BEAT_PEWTER_GYM_TRAINER_0
|
|
|
|
jp PewterGymResetScripts
|
|
|
|
PewterGym_TextPointers:
|
|
dw BrockText
|
|
dw PewterGymTrainerText1
|
|
dw PewterGymGuideText
|
|
dw BeforeReceivedTM34Text
|
|
dw ReceivedTM34Text
|
|
dw TM34NoRoomText
|
|
|
|
PewterGymTrainerHeaders:
|
|
def_trainers 2
|
|
PewterGymTrainerHeader0:
|
|
trainer EVENT_BEAT_PEWTER_GYM_TRAINER_0, 5, PewterGymBattleText1, PewterGymEndBattleText1, PewterGymAfterBattleText1
|
|
db -1 ; end
|
|
|
|
BrockText:
|
|
text_asm
|
|
CheckEvent EVENT_POST_GAME_ATTAINED ; No need to view previous stuff, technically you can skip Bide this way but I think that's hilarious
|
|
jr nz, .rematchMode
|
|
CheckEvent EVENT_BEAT_BROCK
|
|
jr z, .beforeBeat
|
|
CheckEventReuseA EVENT_GOT_TM34
|
|
jr nz, .afterBeat
|
|
call z, PewterGymScriptReceiveTM34
|
|
call DisableWaitingAfterTextDisplay
|
|
jp .done ; needed due to the rematch script length.
|
|
.rematchMode ; Rematch functionality. Just loads pre-battle text and his trainer.
|
|
ld hl, BrockRematchPreBattleText
|
|
call PrintText
|
|
ld c, BANK(Music_MeetMaleTrainer)
|
|
ld a, MUSIC_MEET_MALE_TRAINER
|
|
call PlayMusic
|
|
set 6, [hl]
|
|
set 7, [hl]
|
|
ldh a, [hSpriteIndex]
|
|
ld [wSpriteIndex], a
|
|
ld hl, BrockRematchDefeatedText
|
|
ld de, BrockRematchDefeatedText
|
|
call SaveEndBattleTextPointers
|
|
call EngageMapTrainer
|
|
ld a, OPP_BROCK
|
|
ld [wCurOpponent], a
|
|
ld a, 9
|
|
ld [wTrainerNo], a
|
|
ld a, 1
|
|
ld [wIsTrainerBattle], a
|
|
ld a, $1
|
|
ld [wGymLeaderNo], a
|
|
jr .done
|
|
.afterBeat
|
|
ld hl, BrockPostBattleAdviceText
|
|
call PrintText
|
|
jr .done
|
|
.beforeBeat
|
|
ld hl, BrockPreBattleText
|
|
call PrintText
|
|
ld hl, wd72d
|
|
set 6, [hl]
|
|
set 7, [hl]
|
|
ld hl, ReceivedBoulderBadgeText
|
|
ld de, ReceivedBoulderBadgeText
|
|
call SaveEndBattleTextPointers
|
|
ldh a, [hSpriteIndex]
|
|
ld [wSpriteIndex], a
|
|
call EngageMapTrainer
|
|
; call InitBattleEnemyParameters ; put this back if you mess up
|
|
|
|
; gym scaling spaghetti code begins here - remove initial parameters as we're making our own
|
|
ld a, OPP_BROCK
|
|
ld [wCurOpponent], a
|
|
|
|
ld hl, wObtainedBadges ; Picking the team based on badge count. Need +1 so it loads the right team: remember, you're fighting for the badge! Thanks to Chatot4444 for the help.
|
|
ld b, 1
|
|
call CountSetBits
|
|
ld a, [wNumSetBits]
|
|
inc a
|
|
|
|
ld [wTrainerNo], a
|
|
ld a, 1
|
|
ld [wIsTrainerBattle], a
|
|
|
|
;ends here
|
|
|
|
ld a, $1
|
|
ld [wGymLeaderNo], a
|
|
xor a
|
|
ldh [hJoyHeld], a
|
|
ld a, $3
|
|
ld [wPewterGymCurScript], a
|
|
ld [wCurMapScript], a
|
|
.done
|
|
jp TextScriptEnd
|
|
|
|
BrockPreBattleText:
|
|
text_far _BrockPreBattleText
|
|
text_end
|
|
|
|
BrockPostBattleAdviceText:
|
|
text_far _BrockPostBattleAdviceText
|
|
text_end
|
|
|
|
BeforeReceivedTM34Text:
|
|
text_far _BeforeReceivedTM34Text
|
|
text_end
|
|
|
|
ReceivedTM34Text:
|
|
text_far _ReceivedTM34Text
|
|
sound_get_item_1
|
|
text_far _TM34ExplanationText
|
|
text_end
|
|
|
|
TM34NoRoomText:
|
|
text_far _TM34NoRoomText
|
|
text_end
|
|
|
|
ReceivedBoulderBadgeText:
|
|
text_far _ReceivedBoulderBadgeText
|
|
sound_level_up ; probably supposed to play SFX_GET_ITEM_1 but the wrong music bank is loaded
|
|
text_far _BrockBoulerBadgeInfoText ; Text to tell that the flash technique can be used
|
|
text_end
|
|
|
|
PewterGymTrainerText1:
|
|
text_asm
|
|
ld hl, PewterGymTrainerHeader0
|
|
call TalkToTrainer
|
|
jp TextScriptEnd
|
|
|
|
PewterGymBattleText1:
|
|
text_far _PewterGymBattleText1
|
|
text_end
|
|
|
|
PewterGymEndBattleText1:
|
|
text_far _PewterGymEndBattleText1
|
|
text_end
|
|
|
|
PewterGymAfterBattleText1:
|
|
text_far _PewterGymAfterBattleText1
|
|
text_end
|
|
|
|
PewterGymGuideText:
|
|
text_asm
|
|
ld a, [wBeatGymFlags]
|
|
bit BIT_BOULDERBADGE, a
|
|
jr nz, .afterBeat
|
|
ld hl, PewterGymGuidePreAdviceText
|
|
call PrintText
|
|
call YesNoChoice
|
|
ld a, [wCurrentMenuItem]
|
|
and a
|
|
jr nz, .PewterGymGuideBeginAdviceText
|
|
ld hl, PewterGymGuideBeginAdviceText
|
|
call PrintText
|
|
jr .PewterGymGuideAdviceText
|
|
.PewterGymGuideBeginAdviceText
|
|
ld hl, PewterGymText_5c524
|
|
call PrintText
|
|
.PewterGymGuideAdviceText
|
|
ld hl, PewterGymGuideAdviceText
|
|
call PrintText
|
|
jr .done
|
|
.afterBeat
|
|
ld hl, PewterGymGuidePostBattleText
|
|
call PrintText
|
|
.done
|
|
jp TextScriptEnd
|
|
|
|
PewterGymGuidePreAdviceText:
|
|
text_far _PewterGymGuidePreAdviceText
|
|
text_end
|
|
|
|
PewterGymGuideBeginAdviceText:
|
|
text_far _PewterGymGuideBeginAdviceText
|
|
text_end
|
|
|
|
PewterGymGuideAdviceText:
|
|
text_far _PewterGymGuideAdviceText
|
|
text_end
|
|
|
|
PewterGymText_5c524:
|
|
text_far _PewterGymText_5c524
|
|
text_end
|
|
|
|
PewterGymGuidePostBattleText:
|
|
text_far _PewterGymGuidePostBattleText
|
|
text_end
|
|
|
|
BrockRematchPreBattleText:
|
|
text_far _BrockRematchPreBattleText
|
|
text_end
|
|
|
|
BrockRematchDefeatedText:
|
|
text_far _BrockRematchDefeatedText
|
|
text_end
|