kep-hack/scripts/ViridianGym.asm
May Evans f4f2628f8d Gym scaling base
This adds gym scaling for every leader, plus Koichi of the Fighting Dojo.

Me and Ema decided to give Koichi scaling, as he is a gym leader in everything but class. I will likely give Yujirou the same treatment once he's all set up.

The parties have not been set up, assuming Martha is working on them.

An important note: space is somewhat limited on trainers now, so the leaders will need implementing incrementally. You will most likely have to remove unnecessary trainers to make this work.
2022-12-17 20:47:39 +00:00

436 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 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