mirror of
https://github.com/thornAvery/kep-hack.git
synced 2025-09-16 18:30:50 +12:00

This update does a good few things. Giovanni now uses his unused encounter theme in all pre-fights, which is followed by the regular evil trainer theme when you're about to fight him. This feels very correct. His team has also been minorly altered. I backported LGPE's pre-fight monologue for Giovanni in Rocket Hideout B4F. Adapted for RB's story, of course, no Cubones here. The original text is very awkward and abrupt, and it also makes the encounter theme feel much more effective in delivery. I think a lot of people can appreciate this. I also backported Jessie and James for Rocket Hideout B4F while I was at it. I had to change their event script quite a bit for it to fit, and their walking seems...awkward. Regardless, it's functional. The rest will be done with time. To make future dev door testing easier, I'm keeping all warps I've previously used in comments.
439 lines
9.5 KiB
NASM
439 lines
9.5 KiB
NASM
ViridianGym_Script:
|
|
ld hl, .CityName
|
|
ld de, .LeaderName
|
|
call LoadGymLeaderAndCityName
|
|
call EnableAutoTextBoxDrawing
|
|
ld hl, ViridianGymTrainerHeaders
|
|
ld de, ViridianGym_ScriptPointers
|
|
ld a, [wViridianGymCurScript]
|
|
call ExecuteCurMapScriptInTable
|
|
ld [wViridianGymCurScript], a
|
|
ret
|
|
|
|
.CityName:
|
|
db "VIRIDIAN CITY@"
|
|
|
|
.LeaderName:
|
|
db "GIOVANNI@"
|
|
|
|
ViridianGymResetScripts:
|
|
xor a
|
|
ld [wJoyIgnore], a
|
|
ld [wViridianGymCurScript], a
|
|
ld [wCurMapScript], a
|
|
ret
|
|
|
|
ViridianGym_ScriptPointers:
|
|
dw ViridianGymScript0
|
|
dw DisplayEnemyTrainerTextAndStartBattle
|
|
dw EndTrainerBattle
|
|
dw ViridianGymGiovanniPostBattle
|
|
dw ViridianGymScript4
|
|
|
|
ViridianGymScript0:
|
|
ld a, [wYCoord]
|
|
ld b, a
|
|
ld a, [wXCoord]
|
|
ld c, a
|
|
ld hl, ViridianGymArrowTilePlayerMovement
|
|
call DecodeArrowMovementRLE
|
|
cp $ff
|
|
jp z, CheckFightingMapTrainers
|
|
call StartSimulatingJoypadStates
|
|
ld hl, wd736
|
|
set 7, [hl]
|
|
ld a, SFX_ARROW_TILES
|
|
call PlaySound
|
|
ld a, $ff
|
|
ld [wJoyIgnore], a
|
|
ld a, $4
|
|
ld [wCurMapScript], a
|
|
ret
|
|
|
|
ViridianGymArrowTilePlayerMovement:
|
|
map_coord_movement 19, 11, ViridianGymArrowMovement1
|
|
map_coord_movement 19, 1, ViridianGymArrowMovement2
|
|
map_coord_movement 18, 2, ViridianGymArrowMovement3
|
|
map_coord_movement 10, 2, ViridianGymArrowMovement4
|
|
map_coord_movement 16, 10, ViridianGymArrowMovement5
|
|
map_coord_movement 5, 13, ViridianGymArrowMovement7
|
|
map_coord_movement 4, 14, ViridianGymArrowMovement8
|
|
map_coord_movement 0, 15, ViridianGymArrowMovement9
|
|
map_coord_movement 1, 15, ViridianGymArrowMovement10
|
|
map_coord_movement 13, 16, ViridianGymArrowMovement11
|
|
map_coord_movement 13, 17, ViridianGymArrowMovement12
|
|
db -1 ; end
|
|
|
|
ViridianGymArrowMovement1:
|
|
db D_UP, 9
|
|
db -1 ; end
|
|
|
|
ViridianGymArrowMovement2:
|
|
db D_LEFT, 8
|
|
db -1 ; end
|
|
|
|
ViridianGymArrowMovement3:
|
|
db D_DOWN, 9
|
|
db -1 ; end
|
|
|
|
ViridianGymArrowMovement4:
|
|
db D_RIGHT, 7
|
|
db -1 ; end
|
|
|
|
ViridianGymArrowMovement5:
|
|
db D_DOWN, 2
|
|
db -1 ; end
|
|
|
|
ViridianGymArrowMovement7:
|
|
db D_RIGHT, 8
|
|
db -1 ; end
|
|
|
|
ViridianGymArrowMovement8:
|
|
db D_RIGHT, 9
|
|
db -1 ; end
|
|
|
|
ViridianGymArrowMovement9:
|
|
db D_UP, 4
|
|
db -1 ; end
|
|
|
|
ViridianGymArrowMovement10:
|
|
db D_UP, 6
|
|
db -1 ; end
|
|
|
|
ViridianGymArrowMovement11:
|
|
db D_LEFT, 6
|
|
db -1 ; end
|
|
|
|
ViridianGymArrowMovement12:
|
|
db D_LEFT, 12
|
|
db -1 ; end
|
|
|
|
ViridianGymScript4:
|
|
ld a, [wSimulatedJoypadStatesIndex]
|
|
and a
|
|
jr nz, .ViridianGymLoadSpinnerArrow
|
|
xor a
|
|
ld [wJoyIgnore], a
|
|
ld hl, wd736
|
|
res 7, [hl]
|
|
ld a, $0
|
|
ld [wCurMapScript], a
|
|
ret
|
|
.ViridianGymLoadSpinnerArrow
|
|
farjp LoadSpinnerArrowTiles
|
|
|
|
ViridianGymGiovanniPostBattle:
|
|
ld a, [wIsInBattle]
|
|
cp $ff
|
|
jp z, ViridianGymResetScripts
|
|
ld a, $f0
|
|
ld [wJoyIgnore], a
|
|
; fallthrough
|
|
ViridianGymReceiveTM27:
|
|
ld a, $c
|
|
ldh [hSpriteIndexOrTextID], a
|
|
call DisplayTextID
|
|
SetEvent EVENT_BEAT_VIRIDIAN_GYM_GIOVANNI
|
|
lb bc, TM_FISSURE, 1
|
|
call GiveItem
|
|
jr nc, .BagFull
|
|
ld a, $d
|
|
ldh [hSpriteIndexOrTextID], a
|
|
call DisplayTextID
|
|
SetEvent EVENT_GOT_TM27
|
|
jr .gymVictory
|
|
.BagFull
|
|
ld a, $e
|
|
ldh [hSpriteIndexOrTextID], a
|
|
call DisplayTextID
|
|
.gymVictory
|
|
ld hl, wObtainedBadges
|
|
set BIT_EARTHBADGE, [hl]
|
|
ld hl, wBeatGymFlags
|
|
set BIT_EARTHBADGE, [hl]
|
|
|
|
; deactivate gym trainers
|
|
SetEventRange EVENT_BEAT_VIRIDIAN_GYM_TRAINER_0, EVENT_BEAT_VIRIDIAN_GYM_TRAINER_7
|
|
|
|
ld a, HS_ROUTE_22_RIVAL_2
|
|
ld [wMissableObjectIndex], a
|
|
predef ShowObject
|
|
SetEvents EVENT_2ND_ROUTE22_RIVAL_BATTLE, EVENT_ROUTE22_RIVAL_WANTS_BATTLE
|
|
jp ViridianGymResetScripts
|
|
|
|
ViridianGym_TextPointers:
|
|
dw GiovanniText
|
|
dw ViridianGymTrainerText1
|
|
dw ViridianGymTrainerText2
|
|
dw ViridianGymTrainerText3
|
|
dw ViridianGymTrainerText4
|
|
dw ViridianGymTrainerText5
|
|
dw ViridianGymTrainerText6
|
|
dw ViridianGymTrainerText7
|
|
dw ViridianGymTrainerText8
|
|
dw ViridianGymGuideText
|
|
dw PickUpItemText
|
|
dw GiovanniEarthBadgeInfoText
|
|
dw ReceivedTM27Text
|
|
dw TM27NoRoomText
|
|
|
|
ViridianGymTrainerHeaders:
|
|
def_trainers 2
|
|
ViridianGymTrainerHeader0:
|
|
trainer EVENT_BEAT_VIRIDIAN_GYM_TRAINER_0, 4, ViridianGymBattleText1, ViridianGymEndBattleText1, ViridianGymAfterBattleText1
|
|
ViridianGymTrainerHeader1:
|
|
trainer EVENT_BEAT_VIRIDIAN_GYM_TRAINER_1, 4, ViridianGymBattleText2, ViridianGymEndBattleText2, ViridianGymAfterBattleText2
|
|
ViridianGymTrainerHeader2:
|
|
trainer EVENT_BEAT_VIRIDIAN_GYM_TRAINER_2, 4, ViridianGymBattleText3, ViridianGymEndBattleText3, ViridianGymAfterBattleText3
|
|
ViridianGymTrainerHeader3:
|
|
trainer EVENT_BEAT_VIRIDIAN_GYM_TRAINER_3, 2, ViridianGymBattleText4, ViridianGymEndBattleText4, ViridianGymAfterBattleText4
|
|
ViridianGymTrainerHeader4:
|
|
trainer EVENT_BEAT_VIRIDIAN_GYM_TRAINER_4, 3, ViridianGymBattleText5, ViridianGymEndBattleText5, ViridianGymAfterBattleText5
|
|
ViridianGymTrainerHeader5:
|
|
trainer EVENT_BEAT_VIRIDIAN_GYM_TRAINER_5, 4, ViridianGymBattleText6, ViridianGymEndBattleText6, ViridianGymAfterBattleText6
|
|
ViridianGymTrainerHeader6:
|
|
trainer EVENT_BEAT_VIRIDIAN_GYM_TRAINER_6, 3, ViridianGymBattleText7, ViridianGymEndBattleText7, ViridianGymAfterBattleText7
|
|
ViridianGymTrainerHeader7:
|
|
trainer EVENT_BEAT_VIRIDIAN_GYM_TRAINER_7, 4, ViridianGymBattleText8, ViridianGymEndBattleText8, ViridianGymAfterBattleText8
|
|
db -1 ; end
|
|
|
|
GiovanniText:
|
|
text_asm
|
|
CheckEvent EVENT_BEAT_VIRIDIAN_GYM_GIOVANNI
|
|
jr z, .beforeBeat
|
|
CheckEventReuseA EVENT_GOT_TM27
|
|
jr nz, .afterBeat
|
|
call z, ViridianGymReceiveTM27
|
|
call DisableWaitingAfterTextDisplay
|
|
jr .done
|
|
.afterBeat
|
|
ld a, $1
|
|
ld [wDoNotWaitForButtonPressAfterDisplayingText], a
|
|
ld hl, GiovanniPostBattleAdviceText
|
|
call PrintText
|
|
call GBFadeOutToBlack
|
|
ld a, HS_VIRIDIAN_GYM_GIOVANNI
|
|
ld [wMissableObjectIndex], a
|
|
predef HideObject
|
|
call UpdateSprites
|
|
call Delay3
|
|
call GBFadeInFromBlack
|
|
jr .done
|
|
.beforeBeat
|
|
ld c, 0 ; BANK(Music_Sakaki)
|
|
ld a, MUSIC_SAKAKI
|
|
call PlayMusic
|
|
ld hl, GiovanniPreBattleText
|
|
call PrintText
|
|
ld hl, wd72d
|
|
set 6, [hl]
|
|
set 7, [hl]
|
|
ld hl, ReceivedEarthBadgeText
|
|
ld de, ReceivedEarthBadgeText
|
|
call SaveEndBattleTextPointers
|
|
ldh a, [hSpriteIndex]
|
|
ld [wSpriteIndex], a
|
|
call EngageMapTrainer
|
|
call InitBattleEnemyParameters ; giovanni is deliberately not scaled as he is always fought last
|
|
ld a, $8
|
|
ld [wGymLeaderNo], a
|
|
ld a, $3
|
|
ld [wViridianGymCurScript], a
|
|
.done
|
|
jp TextScriptEnd
|
|
|
|
GiovanniPreBattleText:
|
|
text_far _GiovanniPreBattleText
|
|
text_end
|
|
|
|
ReceivedEarthBadgeText:
|
|
text_far _ReceivedEarthBadgeText
|
|
sound_level_up ; probably supposed to play SFX_GET_ITEM_1 but the wrong music bank is loaded
|
|
text_end
|
|
|
|
GiovanniPostBattleAdviceText:
|
|
text_far _GiovanniPostBattleAdviceText
|
|
text_waitbutton
|
|
text_end
|
|
|
|
GiovanniEarthBadgeInfoText:
|
|
text_far _GiovanniEarthBadgeInfoText
|
|
text_end
|
|
|
|
ReceivedTM27Text:
|
|
text_far _ReceivedTM27Text
|
|
sound_get_item_1
|
|
|
|
TM27ExplanationText:
|
|
text_far _TM27ExplanationText
|
|
text_end
|
|
|
|
TM27NoRoomText:
|
|
text_far _TM27NoRoomText
|
|
text_end
|
|
|
|
ViridianGymTrainerText1:
|
|
text_asm
|
|
ld hl, ViridianGymTrainerHeader0
|
|
call TalkToTrainer
|
|
jp TextScriptEnd
|
|
|
|
ViridianGymBattleText1:
|
|
text_far _ViridianGymBattleText1
|
|
text_end
|
|
|
|
ViridianGymEndBattleText1:
|
|
text_far _ViridianGymEndBattleText1
|
|
text_end
|
|
|
|
ViridianGymAfterBattleText1:
|
|
text_far _ViridianGymAfterBattleText1
|
|
text_end
|
|
|
|
ViridianGymTrainerText2:
|
|
text_asm
|
|
ld hl, ViridianGymTrainerHeader1
|
|
call TalkToTrainer
|
|
jp TextScriptEnd
|
|
|
|
ViridianGymBattleText2:
|
|
text_far _ViridianGymBattleText2
|
|
text_end
|
|
|
|
ViridianGymEndBattleText2:
|
|
text_far _ViridianGymEndBattleText2
|
|
text_end
|
|
|
|
ViridianGymAfterBattleText2:
|
|
text_far _ViridianGymAfterBattleText2
|
|
text_end
|
|
|
|
ViridianGymTrainerText3:
|
|
text_asm
|
|
ld hl, ViridianGymTrainerHeader2
|
|
call TalkToTrainer
|
|
jp TextScriptEnd
|
|
|
|
ViridianGymBattleText3:
|
|
text_far _ViridianGymBattleText3
|
|
text_end
|
|
|
|
ViridianGymEndBattleText3:
|
|
text_far _ViridianGymEndBattleText3
|
|
text_end
|
|
|
|
ViridianGymAfterBattleText3:
|
|
text_far _ViridianGymAfterBattleText3
|
|
text_end
|
|
|
|
ViridianGymTrainerText4:
|
|
text_asm
|
|
ld hl, ViridianGymTrainerHeader3
|
|
call TalkToTrainer
|
|
jp TextScriptEnd
|
|
|
|
ViridianGymBattleText4:
|
|
text_far _ViridianGymBattleText4
|
|
text_end
|
|
|
|
ViridianGymEndBattleText4:
|
|
text_far _ViridianGymEndBattleText4
|
|
text_end
|
|
|
|
ViridianGymAfterBattleText4:
|
|
text_far _ViridianGymAfterBattleText4
|
|
text_end
|
|
|
|
ViridianGymTrainerText5:
|
|
text_asm
|
|
ld hl, ViridianGymTrainerHeader4
|
|
call TalkToTrainer
|
|
jp TextScriptEnd
|
|
|
|
ViridianGymBattleText5:
|
|
text_far _ViridianGymBattleText5
|
|
text_end
|
|
|
|
ViridianGymEndBattleText5:
|
|
text_far _ViridianGymEndBattleText5
|
|
text_end
|
|
|
|
ViridianGymAfterBattleText5:
|
|
text_far _ViridianGymAfterBattleText5
|
|
text_end
|
|
|
|
ViridianGymTrainerText6:
|
|
text_asm
|
|
ld hl, ViridianGymTrainerHeader5
|
|
call TalkToTrainer
|
|
jp TextScriptEnd
|
|
|
|
ViridianGymBattleText6:
|
|
text_far _ViridianGymBattleText6
|
|
text_end
|
|
|
|
ViridianGymEndBattleText6:
|
|
text_far _ViridianGymEndBattleText6
|
|
text_end
|
|
|
|
ViridianGymAfterBattleText6:
|
|
text_far _ViridianGymAfterBattleText6
|
|
text_end
|
|
|
|
ViridianGymTrainerText7:
|
|
text_asm
|
|
ld hl, ViridianGymTrainerHeader6
|
|
call TalkToTrainer
|
|
jp TextScriptEnd
|
|
|
|
ViridianGymBattleText7:
|
|
text_far _ViridianGymBattleText7
|
|
text_end
|
|
|
|
ViridianGymEndBattleText7:
|
|
text_far _ViridianGymEndBattleText7
|
|
text_end
|
|
|
|
ViridianGymAfterBattleText7:
|
|
text_far _ViridianGymAfterBattleText7
|
|
text_end
|
|
|
|
ViridianGymTrainerText8:
|
|
text_asm
|
|
ld hl, ViridianGymTrainerHeader7
|
|
call TalkToTrainer
|
|
jp TextScriptEnd
|
|
|
|
ViridianGymBattleText8:
|
|
text_far _ViridianGymBattleText8
|
|
text_end
|
|
|
|
ViridianGymEndBattleText8:
|
|
text_far _ViridianGymEndBattleText8
|
|
text_end
|
|
|
|
ViridianGymAfterBattleText8:
|
|
text_far _ViridianGymAfterBattleText8
|
|
text_end
|
|
|
|
ViridianGymGuideText:
|
|
text_asm
|
|
CheckEvent EVENT_BEAT_VIRIDIAN_GYM_GIOVANNI
|
|
jr nz, .afterBeat
|
|
ld hl, ViridianGymGuidePreBattleText
|
|
call PrintText
|
|
jr .done
|
|
.afterBeat
|
|
ld hl, ViridianGymGuidePostBattleText
|
|
call PrintText
|
|
.done
|
|
jp TextScriptEnd
|
|
|
|
ViridianGymGuidePreBattleText:
|
|
text_far _ViridianGymGuidePreBattleText
|
|
text_end
|
|
|
|
ViridianGymGuidePostBattleText:
|
|
text_far _ViridianGymGuidePostBattleText
|
|
text_end
|