pokered/scripts/PewterGym.asm
vulcandth d001ced41b
Add macros, constants, and labels for map scripts and text (#367)
This introduces `def_script_pointers`, `def_text_pointers`, and `object_const_def` macros, and applies them to all maps. Most other map labels have also been identified.
2023-07-13 21:27:56 -04:00

225 lines
5.3 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:
def_script_pointers
dw_const CheckFightingMapTrainers, SCRIPT_PEWTERGYM_DEFAULT
dw_const DisplayEnemyTrainerTextAndStartBattle, SCRIPT_PEWTERGYM_START_BATTLE
dw_const EndTrainerBattle, SCRIPT_PEWTERGYM_END_BATTLE
dw_const PewterGymBrockPostBattle, SCRIPT_PEWTERGYM_BROCK_POST_BATTLE
PewterGymBrockPostBattle:
ld a, [wIsInBattle]
cp $ff
jp z, PewterGymResetScripts
ld a, D_RIGHT | D_LEFT | D_UP | D_DOWN
ld [wJoyIgnore], a
; fallthrough
PewterGymScriptReceiveTM34:
ld a, TEXT_PEWTERGYM_BROCK_WAIT_TAKE_THIS
ldh [hSpriteIndexOrTextID], a
call DisplayTextID
SetEvent EVENT_BEAT_BROCK
lb bc, TM_BIDE, 1
call GiveItem
jr nc, .BagFull
ld a, TEXT_PEWTERGYM_RECEIVED_TM34
ldh [hSpriteIndexOrTextID], a
call DisplayTextID
SetEvent EVENT_GOT_TM34
jr .gymVictory
.BagFull
ld a, TEXT_PEWTERGYM_TM34_NO_ROOM
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:
def_text_pointers
dw_const PewterGymBrockText, TEXT_PEWTERGYM_BROCK
dw_const PewterGymCooltrainerMText, TEXT_PEWTERGYM_COOLTRAINER_M
dw_const PewterGymGuideText, TEXT_PEWTERGYM_GYM_GUIDE
dw_const PewterGymBrockWaitTakeThisText, TEXT_PEWTERGYM_BROCK_WAIT_TAKE_THIS
dw_const PewterGymReceivedTM34Text, TEXT_PEWTERGYM_RECEIVED_TM34
dw_const PewterGymTM34NoRoomText, TEXT_PEWTERGYM_TM34_NO_ROOM
PewterGymTrainerHeaders:
def_trainers 2
PewterGymTrainerHeader0:
trainer EVENT_BEAT_PEWTER_GYM_TRAINER_0, 5, PewterGymCooltrainerMBattleText, PewterGymCooltrainerMEndBattleText, PewterGymCooltrainerMAfterBattleText
db -1 ; end
PewterGymBrockText:
text_asm
CheckEvent EVENT_BEAT_BROCK
jr z, .beforeBeat
CheckEventReuseA EVENT_GOT_TM34
jr nz, .afterBeat
call z, PewterGymScriptReceiveTM34
call DisableWaitingAfterTextDisplay
jr .done
.afterBeat
ld hl, .PostBattleAdviceText
call PrintText
jr .done
.beforeBeat
ld hl, .PreBattleText
call PrintText
ld hl, wd72d
set 6, [hl]
set 7, [hl]
ld hl, PewterGymBrockReceivedBoulderBadgeText
ld de, PewterGymBrockReceivedBoulderBadgeText
call SaveEndBattleTextPointers
ldh a, [hSpriteIndex]
ld [wSpriteIndex], a
call EngageMapTrainer
call InitBattleEnemyParameters
ld a, $1
ld [wGymLeaderNo], a
xor a
ldh [hJoyHeld], a
ld a, SCRIPT_PEWTERGYM_BROCK_POST_BATTLE
ld [wPewterGymCurScript], a
ld [wCurMapScript], a
.done
jp TextScriptEnd
.PreBattleText:
text_far _PewterGymBrockPreBattleText
text_end
.PostBattleAdviceText:
text_far _PewterGymBrockPostBattleAdviceText
text_end
PewterGymBrockWaitTakeThisText:
text_far _PewterGymBrockWaitTakeThisText
text_end
PewterGymReceivedTM34Text:
text_far _PewterGymReceivedTM34Text
sound_get_item_1
text_far _TM34ExplanationText
text_end
PewterGymTM34NoRoomText:
text_far _PewterGymTM34NoRoomText
text_end
PewterGymBrockReceivedBoulderBadgeText:
text_far _PewterGymBrockReceivedBoulderBadgeText
sound_level_up ; probably supposed to play SFX_GET_ITEM_1 but the wrong music bank is loaded
text_far _PewterGymBrockBoulderBadgeInfoText ; Text to tell that the flash technique can be used
text_end
PewterGymCooltrainerMText:
text_asm
ld hl, PewterGymTrainerHeader0
call TalkToTrainer
jp TextScriptEnd
PewterGymCooltrainerMBattleText:
text_far _PewterGymCooltrainerMBattleText
text_end
PewterGymCooltrainerMEndBattleText:
text_far _PewterGymCooltrainerMEndBattleText
text_end
PewterGymCooltrainerMAfterBattleText:
text_far _PewterGymCooltrainerMAfterBattleText
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, PewterGymGuideFreeServiceText
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
PewterGymGuideFreeServiceText:
text_far _PewterGymGuideFreeServiceText
text_end
PewterGymGuidePostBattleText:
text_far _PewterGymGuidePostBattleText
text_end