Merge pull request #16 from PlagueVonKarma/post-game-letter-scene

Set up the actual beginning of the post-game
This commit is contained in:
Llinos Evans 2023-07-13 02:15:12 +01:00 committed by GitHub
commit 28be1396d1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
19 changed files with 512 additions and 46 deletions

View file

@ -3,12 +3,16 @@
; Pallet Town events ; Pallet Town events
const_def const_def
const EVENT_FOLLOWED_OAK_INTO_LAB const EVENT_FOLLOWED_OAK_INTO_LAB
const EVENT_GOT_BULBASAUR const EVENT_GOT_BULBASAUR ; Day Care Melanie
const EVENT_54F ; Charmander const EVENT_54F ; Route 24, Damien's Charmander
const EVENT_HALL_OF_FAME_DEX_RATING const EVENT_HALL_OF_FAME_DEX_RATING
const EVENT_GOT_SQUIRTLE const EVENT_GOT_SQUIRTLE ; Vermilion Officer Jenny
const EVENT_PALLET_AFTER_GETTING_POKEBALLS const EVENT_PALLET_AFTER_GETTING_POKEBALLS
const_skip 17 const EVENT_LETTER_RECEIVED
const EVENT_FUCK ; If you trigger this you're a psychopath. Used for mom and oak post-game scenes.
const EVENT_RECEIVED_CITRINE_PASS
const EVENT_BEAT_OAK_ONCE
const_skip 13
const EVENT_GOT_TOWN_MAP const EVENT_GOT_TOWN_MAP
const EVENT_ENTERED_BLUES_HOUSE const EVENT_ENTERED_BLUES_HOUSE
const EVENT_DAISY_WALKING const EVENT_DAISY_WALKING

View file

@ -103,6 +103,7 @@ DEF SAFARI_ROCK EQU $16 ; overload
const METAL_COAT ; $5C const METAL_COAT ; $5C
const MYSTERY_BOX ; $5D const MYSTERY_BOX ; $5D
const TEA ; $5E const TEA ; $5E
const SILPHLETTER ; $5F
DEF NUM_ITEMS EQU const_value - 1 DEF NUM_ITEMS EQU const_value - 1
; elevator floors use item IDs ; elevator floors use item IDs

View file

@ -254,4 +254,4 @@ CredChatot:
CredEni: CredEni:
db -3, "ENIGAMI@" db -3, "ENIGAMI@"
CredVort: CredVort:
db -4, "VORTIENE@" db -3, "VORTIENE@"

View file

@ -94,6 +94,7 @@ KeyItemFlags:
dbit FALSE ; METAL_COAT dbit FALSE ; METAL_COAT
dbit TRUE ; MYSTERY_BOX dbit TRUE ; MYSTERY_BOX
dbit TRUE ; TEA dbit TRUE ; TEA
dbit TRUE ; SILPHLETTER
dbit TRUE ; FLOOR_B2F dbit TRUE ; FLOOR_B2F
dbit TRUE ; FLOOR_B1F dbit TRUE ; FLOOR_B1F
dbit TRUE ; FLOOR_1F dbit TRUE ; FLOOR_1F

View file

@ -94,6 +94,7 @@ ItemNames::
li "METAL COAT" li "METAL COAT"
li "MYSTERY BOX" li "MYSTERY BOX"
li "TEA" li "TEA"
li "SILPH LETTER"
assert_list_length NUM_ITEMS assert_list_length NUM_ITEMS
li "B2F" li "B2F"
li "B1F" li "B1F"

View file

@ -94,6 +94,7 @@ ItemPrices::
bcd3 3000 ; METAL_COAT bcd3 3000 ; METAL_COAT
bcd3 0 ; MYSTERY_BOX bcd3 0 ; MYSTERY_BOX
bcd3 0 ; TEA bcd3 0 ; TEA
bcd3 0 ; SILPHLETTER
assert_table_length NUM_ITEMS assert_table_length NUM_ITEMS
bcd3 0 ; FLOOR_B2F bcd3 0 ; FLOOR_B2F
bcd3 0 ; FLOOR_B1F bcd3 0 ; FLOOR_B1F

View file

@ -4,8 +4,8 @@ IndigoPlateauLobby_Object:
def_warp_events def_warp_events
warp_event 7, 11, LAST_MAP, 1 warp_event 7, 11, LAST_MAP, 1
warp_event 8, 11, LAST_MAP, 2 warp_event 8, 11, LAST_MAP, 2
;warp_event 8, 0, HALL_OF_FAME, 1 ; test post-game setup warp_event 8, 0, HALL_OF_FAME, 1 ; test post-game setup
warp_event 8, 0, LORELEIS_ROOM, 1 ;warp_event 8, 0, LORELEIS_ROOM, 1
def_bg_events def_bg_events

View file

@ -44,7 +44,7 @@ MACRO special_warp_spec
db \4 db \4
ENDM ENDM
FirstMapSpec: FirstMapSpec::
special_warp_spec REDS_HOUSE_2F, 3, 6, REDS_HOUSE_2 special_warp_spec REDS_HOUSE_2F, 3, 6, REDS_HOUSE_2
TradeCenterSpec1: TradeCenterSpec1:
special_warp_spec TRADE_CENTER, 3, 4, CLUB special_warp_spec TRADE_CENTER, 3, 4, CLUB
@ -77,6 +77,7 @@ FlyWarpDataPtr:
fly_warp_spec CELADON_UNIVERSITY_OUTSIDE, .CeladonUniversityOutside fly_warp_spec CELADON_UNIVERSITY_OUTSIDE, .CeladonUniversityOutside
fly_warp_spec ROUTE_4, .Route4 fly_warp_spec ROUTE_4, .Route4
fly_warp_spec ROUTE_10, .Route10 fly_warp_spec ROUTE_10, .Route10
fly_warp_spec REDS_HOUSE_2F, .RedsHouse2F ; This doesn't show on the Fly map, just used so the post-league warp doesn't have a stroke
.PalletTown: fly_warp PALLET_TOWN, 5, 6 .PalletTown: fly_warp PALLET_TOWN, 5, 6
.ViridianCity: fly_warp VIRIDIAN_CITY, 23, 26 .ViridianCity: fly_warp VIRIDIAN_CITY, 23, 26
@ -93,3 +94,4 @@ FlyWarpDataPtr:
.CeladonUniversityOutside: fly_warp CELADON_UNIVERSITY_OUTSIDE, 15, 26 .CeladonUniversityOutside: fly_warp CELADON_UNIVERSITY_OUTSIDE, 15, 26
.Route4: fly_warp ROUTE_4, 11, 6 .Route4: fly_warp ROUTE_4, 11, 6
.Route10: fly_warp ROUTE_10, 11, 20 .Route10: fly_warp ROUTE_10, 11, 20
.RedsHouse2F: fly_warp REDS_HOUSE_2F, 3, 6

View file

@ -358,6 +358,11 @@ _TeaDescription::
next "quenching thirst." next "quenching thirst."
prompt prompt
_SilphLetterDescription::
text "A LETTER from"
next "the SILPH CHIEF."
prompt
_HM01Description:: _HM01Description::
text "Cuts using claws," text "Cuts using claws,"
next "scythes, etc." next "scythes, etc."

View file

@ -187,9 +187,9 @@ DebugPikachuEevee:
jr .loop jr .loop
DebugPikachuEeveeShows: DebugPikachuEeveeShows:
db HS_DAMIEN ; Charmander guy db HS_DAMIEN ; Charmander guy
db HS_VERMILION_JENNY ; Squirtle db HS_VERMILION_JENNY ; Squirtle
db -1 ; end db -1 ; end
DebugSetPokedexEntries: DebugSetPokedexEntries:
ld b, wPokedexOwnedEnd - wPokedexOwned ld b, wPokedexOwnedEnd - wPokedexOwned
@ -203,6 +203,7 @@ DebugSetPokedexEntries:
DebugItemsList: DebugItemsList:
db MASTER_BALL, 99 db MASTER_BALL, 99
db SILPHLETTER, 1
db MYSTERY_BOX, 1 db MYSTERY_BOX, 1
db CANDY_JAR, 1 db CANDY_JAR, 1
db BICYCLE, 1 db BICYCLE, 1

View file

@ -111,6 +111,7 @@ ItemUsePtrTable:
dw ItemUseEvoStone ; METAL_COAT dw ItemUseEvoStone ; METAL_COAT
dw ItemUseMysteryBox ; MYSTERY_BOX dw ItemUseMysteryBox ; MYSTERY_BOX
dw UnusableItem ; TEA dw UnusableItem ; TEA
dw ItemUseLetter ; SILPHLETTER
dw UnusableItem ; FLOOR_B2F dw UnusableItem ; FLOOR_B2F
dw UnusableItem ; FLOOR_B1F dw UnusableItem ; FLOOR_B1F
dw UnusableItem ; FLOOR_1F dw UnusableItem ; FLOOR_1F
@ -126,6 +127,16 @@ ItemUsePtrTable:
dw UnusableItem ; FLOOR_11F dw UnusableItem ; FLOOR_11F
dw UnusableItem ; FLOOR_14F dw UnusableItem ; FLOOR_14F
ItemUseLetter:
text_asm
ld hl, ChiefLetterText
call PrintText
jp TextScriptEnd
ChiefLetterText:
text_far _ChiefLetterText
text_end
ItemUseMysteryBox: ItemUseMysteryBox:
; Mystery Box can't be used in battle. ; Mystery Box can't be used in battle.
ld a, [wIsInBattle] ld a, [wIsInBattle]

View file

@ -202,6 +202,8 @@ ItemDescriptionPointers:
text_end text_end
text_far _TeaDescription text_far _TeaDescription
text_end text_end
text_far _SilphLetterDescription
text_end
text_far _HM01Description text_far _HM01Description
text_end text_end
text_far _HM02Description text_far _HM02Description

View file

@ -117,7 +117,7 @@ MainMenu:
ld a, [wCurMap] ; map ID ld a, [wCurMap] ; map ID
cp HALL_OF_FAME cp HALL_OF_FAME
jp nz, SpecialEnterMap jp nz, SpecialEnterMap
xor a ld a, REDS_HOUSE_2F
ld [wDestinationMap], a ld [wDestinationMap], a
ld hl, wd732 ld hl, wd732
set 2, [hl] ; fly warp or dungeon warp set 2, [hl] ; fly warp or dungeon warp

View file

@ -1991,7 +1991,8 @@ wPalletTownCurScript:: db
wCitrineRocketHouseCurScript:: db wCitrineRocketHouseCurScript:: db
wBluesHouseCurScript:: db wBluesHouseCurScript:: db
wViridianCityCurScript:: db wViridianCityCurScript:: db
ds 2 wRedsHouse1FCurScript:: db
ds 1
wPewterCityCurScript:: db wPewterCityCurScript:: db
wRoute3CurScript:: db wRoute3CurScript:: db
wRoute4CurScript:: db wRoute4CurScript:: db

View file

@ -43,7 +43,8 @@ HallofFameRoomScript2:
ResetEventRange INDIGO_PLATEAU_EVENTS_START, INDIGO_PLATEAU_EVENTS_END, 1 ResetEventRange INDIGO_PLATEAU_EVENTS_START, INDIGO_PLATEAU_EVENTS_END, 1
xor a xor a
ld [wHallOfFameCurScript], a ld [wHallOfFameCurScript], a
ld a, PALLET_TOWN ld hl, FirstMapSpec
ld a, [hli]
ld [wLastBlackoutMap], a ld [wLastBlackoutMap], a
farcall SaveSAVtoSRAM farcall SaveSAVtoSRAM
ld b, 5 ld b, 5

View file

@ -1,5 +1,79 @@
RedsHouse1F_Script: RedsHouse1F_Script:
jp EnableAutoTextBoxDrawing call EnableAutoTextBoxDrawing
ld hl, RedsHouse1F_ScriptPointers
ld a, [wRedsHouse1FCurScript]
jp CallFunctionInTable
RedsHouse1F_ScriptPointers:
dw ChiefLetter1
dw ChiefLetter2
ChiefLetter1:
CheckEvent EVENT_POST_GAME_ATTAINED
jr z, .done
CheckEvent EVENT_LETTER_RECEIVED
jr nz, .done
; with the way this is being done, coords will be unnecessary.
; this will trigger the minute you enter the house.
ld a, PLAYER_DIR_DOWN
ld [wPlayerMovingDirection], a
call UpdateSprites ; idk most movement scripts use this fsr
call PlayerSeeMom ; Show a cute little emotion bubble from the player.
jr MovePlayer ; Now kick the player upstairs. If you do this any other way, the game freaks out (eg. constant emotion bubbles, rsts)
.done
ret
MovePlayer:
ld a, $ff ; Firstly...
ld [wJoyIgnore], a ; No joypad inputs. No funny business. RLE is weird as fuck without it.
ld hl, wSimulatedJoypadStatesEnd
ld de, PlayerSeeMom_RLEMovement
call DecodeRLEList
dec a
ld [wSimulatedJoypadStatesIndex], a
call StartSimulatingJoypadStates ; By this point, we're auto-moving.
ld a, $1 ; Now...
ld [wRedsHouse1FCurScript], a ; Get kicked up another flight to ChiefLetter2.
ld [wCurMapScript], a ; Safety.
ret
ChiefLetter2:
ld a, [wSimulatedJoypadStatesIndex] ; This ties up the loose ends with the RLE.
and a
ret nz
call Delay3 ; Next...
xor a ; Now...
ld [wJoyIgnore], a ; The player needs to be able to mash A.
ld a, $1 ; Load Mom's NPC ID
ldh [hSpriteIndex], a ; Slap it in the index
ld a, SPRITE_FACING_RIGHT ; Get this ready
ldh [hSpriteFacingDirection], a ; Now she'll face right, simulatiung talking to her.
call SetSpriteFacingDirectionAndDelay ; Get this all out.
call DisplayTextID ; Display her text ID, using the same thing from before.
; We did a little tomfoolery with her base text to make this work. Look below if you dare.
ld a, $0 ; Anyway, kick the player back downstairs so the script can ret z for the rest of time.
ld [wRedsHouse1FCurScript], a
ld [wCurMapScript], a ; aaand safety.
ret
PlayerSeeMom:
ld c, 10
call DelayFrames
ld [wEmotionBubbleSpriteIndex], a
xor a ; EXCLAMATION_BUBBLE
ld [wWhichEmotionBubble], a
predef EmotionBubble
ld c, 20
call DelayFrames
ret
PlayerSeeMom_RLEMovement:
db D_LEFT, 1
db D_DOWN, 3
db -1 ; end
RedsHouse1F_TextPointers: RedsHouse1F_TextPointers:
dw RedsHouse1FMomText dw RedsHouse1FMomText
@ -7,6 +81,13 @@ RedsHouse1F_TextPointers:
RedsHouse1FMomText: RedsHouse1FMomText:
text_asm text_asm
CheckEvent EVENT_POST_GAME_ATTAINED ; If the player hasn't got to the post game, we should never deal with this terribleness.
jr z, .normalProcessing ; So go to normal processing. Also if you go to debug without the post-game and letter events set up then this will loop infinitely. Please be reasonable.
CheckEvent EVENT_FUCK ; If some bozo triggers this I am going to be shocked.
jr nz, .bagWasFullButIsntNow ; No, seriously, you have to beat the Elite Four with a full bag. Ain't that a challenge?
CheckEvent EVENT_LETTER_RECEIVED ; Anyway, this was hell to debug. Let's go through the post-game together.
jr z, .letterSequence; This was all done so DisplayTextID could be used to get around a ton of bullshit.
.normalProcessing
ld a, [wd72e] ld a, [wd72e]
bit 3, a ; received a Pokémon from Oak? bit 3, a ; received a Pokémon from Oak?
jr nz, .heal jr nz, .heal
@ -15,6 +96,48 @@ RedsHouse1FMomText:
jr .done jr .done
.heal .heal
call MomHealPokemon call MomHealPokemon
jr .done
.letterSequence ; Look I know this code is cursed as fuck just bear with me
SetEvent EVENT_LETTER_RECEIVED ; Firstly, set the letter event
ld hl, MomYoureBack
call PrintText
lb bc, SILPHLETTER, 1 ; Alright, let's try to give the letter over.
call GiveItem ; Attempt is made.
jr nc, .bag_full ; If this triggers, you are a demented psychopath who needs to touch grass.
jr .LetterCanBeReceived ; If you're not weird, you can get it. Doing it this way saves a few instructions above.
.bag_full ; Psycho zone.
ld hl, MomBagFull
call PrintText
SetEvent EVENT_FUCK ; Set the funny event that I really wish I didn't need to have set up.
jr .done
.stillHavent ; Giga psycho zone. You get here if you still haven't sorted out your bag.
ld hl, MomBagStillFull
call PrintText
jr .done
.bagWasFullButIsntNow ; So now, if the weird kid has finally done their bag, we can progress.
ld hl, MomSavedIt
call PrintText
lb bc, SILPHLETTER, 1 ; We do this twice as otherwise it's a jr nightmare I don't want to debug
call GiveItem
jr nc, .stillHavent ; If they think they're smart, tough, it's a loop.
; Otherwise, fallthrough
.LetterCanBeReceived ; Jump here when getting the letter is possible.
ld hl, ReceivedChiefLetterText ; So now they get their letter.
call PrintText
ld a, [wSimulatedJoypadStatesEnd] ; ensuring that the text doesn't autoskip.
and a ; yep, here too.
call z, WaitForTextScrollButtonPress ; and here.
call EnableAutoTextBoxDrawing ; and here.
ld hl, ChiefLetterText
call PrintText
ld a, [wSimulatedJoypadStatesEnd] ; ensuring that the text doesn't autoskip. again. i tried making it a func but it got funky.
and a ; yep, here too.
call z, WaitForTextScrollButtonPress ; and here.
call EnableAutoTextBoxDrawing ; and here.
ld hl, MomAmazing
call PrintText
ResetEvent EVENT_FUCK ; Anyway, unset this and never deal with it again. This resets mom to her normal state.
; fallthrough
.done .done
jp TextScriptEnd jp TextScriptEnd
@ -70,3 +193,34 @@ StandByMeText:
TVWrongSideText: TVWrongSideText:
text_far _TVWrongSideText text_far _TVWrongSideText
text_end text_end
; Post-Game stuff here.
ChiefLetterText:
text_far _ChiefLetterText
text_end
MomYoureBack:
text_far _MomYoureBack
text_end
ReceivedChiefLetterText:
text_far _ReceivedChiefLetterText
sound_get_item_1
text_end
MomAmazing:
text_far _MomAmazing
text_end
MomBagFull:
text_far _MomBagFull
text_end
MomSavedIt:
text_far _MomSavedIt
text_end
MomBagStillFull:
text_far _MomBagStillFull
text_end

View file

@ -1,9 +1,37 @@
Route1_Script: Route1_Script:
jp EnableAutoTextBoxDrawing call EnableAutoTextBoxDrawing
;ld hl, Route1_ScriptPointers ld hl, Route1_ScriptPointers
ld a, [wRoute1CurScript] ld a, [wRoute1CurScript]
jp CallFunctionInTable jp CallFunctionInTable
Route1_ScriptPointers:
dw Route1Script0
dw OakVibeCheck
Route1Script0:
ret ; yeah it's just a switch-off. shush.
OakVibeCheck:
SetEvent EVENT_BEAT_OAK_ONCE ; This is set every time, but it doesn't matter, it sticks at 1 anyway.
CheckEvent EVENT_RECEIVED_CITRINE_PASS ; Before we do, has the player got the pass?
jr nz, .skip ; Yes? Now we go to auto-ret.
jr OakFirstWin ; Otherwise, move to the first win script to set that up.
.skip
ld a, $0
ld [wRoute1CurScript], a
ret
OakFirstWin:
CheckEvent EVENT_RECEIVED_CITRINE_PASS
jr nz, .skip
ld a, $3
ldh [hSpriteIndex], a
call DisplayTextID
.skip
ld a, $0
ld [wRoute1CurScript], a
ret
Route1_TextPointers: Route1_TextPointers:
dw Route1Text1 dw Route1Text1
dw Route1Text2 dw Route1Text2
@ -60,10 +88,19 @@ Route1Text3:
; text ; text
Route1OakText: Route1OakText:
text_asm text_asm
ld hl, OakBeforeBattleText CheckEvent EVENT_BEAT_OAK_ONCE ; But if they've not beaten Oak, we need something else.
jr z, .skip ; So if they have, skip the next command.
CheckEvent EVENT_RECEIVED_CITRINE_PASS ; This is used for DisplayTextID. Is checked when Oak has been beaten once.
jp z, OakReceivePass
.skip
CheckEvent EVENT_BEAT_OAK_ONCE ; I am like, 99.9% sure there's another way to do this.
ld hl, OakFirstBattleText ; Load this only if the Citrine Pass hasn't been obtained yet.
jr z, .skip2
ld hl, OakBeforeBattleText ; If he's been beaten before, load the usual prebattle text
.skip2
call PrintText call PrintText
call YesNoChoice call YesNoChoice ; Do they want in?
ld a, [wCurrentMenuItem] ld a, [wCurrentMenuItem]
and a and a
jr nz, .refused jr nz, .refused
@ -86,40 +123,80 @@ Route1OakText:
cp STARTER2 cp STARTER2
jr nz, .NotSquirtle jr nz, .NotSquirtle
ld a, $2 ; If Charmander, Venusaur ld a, $2 ; If Charmander, Venusaur
jr .done jr .battleSetup
.NotSquirtle .NotSquirtle
cp STARTER3 cp STARTER3
jr nz, .Charmander jr nz, .Charmander
ld a, $3 ; If Bulbasaur, Totartle ld a, $3 ; If Bulbasaur, Totartle
jr .done jr .battleSetup
.Charmander .Charmander
cp STARTER1 cp STARTER1
jr nz, .Pikachu jr nz, .Pikachu
ld a, $1 ; If Squirtle, Charizard ld a, $1 ; If Squirtle, Charizard
jr .done jr .battleSetup
.Pikachu .Pikachu
cp STARTER4 cp STARTER4
jr nz, .Eevee jr nz, .Eevee
ld a, $4 ; If Pikachu, all 3 ld a, $4 ; If Pikachu, all 3
jr .done jr .battleSetup
.Eevee .Eevee
ld a, $5 ; If Eevee, also all 3 ld a, $5 ; If Eevee, also all 3
jr .done jr .battleSetup
.refused .refused
ld hl, OakNo ld hl, OakNo
call PrintText call PrintText
jp TextScriptEnd jr .done
.done .battleSetup
ld [wTrainerNo], a ld [wTrainerNo], a
ld a, 1 ld a, 1
ld [wIsTrainerBattle], a ld [wIsTrainerBattle], a
ld a, $2
ld [wRoute1CurScript], a
ld hl, OakDefeatedText ld hl, OakDefeatedText
ld de, OakWonText ld de, OakWonText
call SaveEndBattleTextPointers call SaveEndBattleTextPointers
ld a, $1
ld [wRoute1CurScript], a
.done
jp TextScriptEnd
OakReceivePass:
CheckEvent EVENT_FUCK ; This is for if the player is stupid
jp nz, .tryAgain
ld hl, OakFirstWinText
call PrintText
lb bc, CITRINE_PASS, 1
call GiveItem
jr nc, .bagFull
jr .getPass
.tryAgain
ld hl, OakTryAgain
call PrintText
lb bc, CITRINE_PASS, 1
call GiveItem
jr nc, .bagStillFull
jr .getPass
.bagFull
ld hl, OakBagFull
call PrintText
SetEvent EVENT_FUCK
jr .done
.bagStillFull
ld hl, OakBagStillFull
call PrintText
jr .done
.getPass
ld hl, ReceivedCitrinePassText
call PrintText
ld a, [wSimulatedJoypadStatesEnd] ; ensuring that the text doesn't autoskip.
and a ; yep, here too.
call z, WaitForTextScrollButtonPress ; and here.
call EnableAutoTextBoxDrawing ; and here.
ld hl, OakCitrineExplain
call PrintText
SetEvent EVENT_RECEIVED_CITRINE_PASS
; fallthrough
.done
jp TextScriptEnd jp TextScriptEnd
OakBeforeBattleText: OakBeforeBattleText:
@ -141,3 +218,32 @@ OakYes:
OakNo: OakNo:
text_far _OakNo text_far _OakNo
text_end text_end
OakFirstBattleText:
text_far _OakFirstBattleText
text_end
OakFirstWinText:
text_far _OakFirstWin
text_end
ReceivedCitrinePassText:
text_far _ReceivedCitrinePassText
sound_get_item_2
text_end
OakCitrineExplain:
text_far _OakCitrineExplain
text_end
OakTryAgain:
text_far _OakTryAgain
text_end
OakBagFull:
text_far _OakBagFull
text_end
OakBagStillFull:
text_far _OakBagStillFull
text_end

View file

@ -35,3 +35,98 @@ _StandByMeText::
_TVWrongSideText:: _TVWrongSideText::
text "Oops, wrong side." text "Oops, wrong side."
done done
_MomYoureBack::
text "MOM: <PLAYER>!"
line "Good morning!"
para "I'm so proud of"
line "you, dear! You've"
cont "grown so much!"
para "Oh! I nearly"
line "forgot..."
para "I received this"
line "letter from SILPH"
cont "CO. What does it"
cont "say?"
prompt
; I want the letter text to play when we use the letter, so it's gonna be like this.
_ReceivedChiefLetterText::
text "<PLAYER> received"
line "the @"
text_ram wStringBuffer
text "!@"
text_end
_ChiefLetterText::
text "Dear <PLAYER>!"
line "You are cordially"
cont "invited to my"
cont "greatest event!"
para "I call it...the"
line "SILPH GAUNTLET!"
para "I have called the"
line "greatest TRAINERs"
cont "in all of KANTO!"
para "Stronger than even" ; A sneaky trick - we can fit 18 characters, they just mess up the arrow.
line "the ELITE FOUR!" ; Thus, the para avoids the visual artefacting.
para "You will come to"
line "SILPH CO., yes?"
para "See you then!"
line " - CHIEF"
prompt
_MomAmazing::
text "Oh! Isn't this"
line "amazing, sweetie?"
para "I'm sure you'll do"
line "great!"
para "By the way, PROF."
line "OAK was looking"
cont "for you. He said"
cont "he would be on"
cont "ROUTE 1."
para "I wonder why..."
done
_MomBagFull::
text "Oh, your BAG is"
line "full! You must"
cont "have had such an"
cont "adventure!"
para "Go upstairs and"
line "sort it out. I" ; Made me smile making this GSC mom reference.
cont "kept your room"
cont "tidy!"
done
_MomSavedIt::
text "Did you sort out"
line "your BAG?"
para "You're just like"
line "when you were"
cont "ready to go!"
para "Anyway, here's the"
line "the LETTER. What"
cont "does it say?"
prompt
_MomBagStillFull::
text "Silly! It's still"
line "full! Go on, sort"
cont "it out!"
done

View file

@ -49,17 +49,19 @@ _Route1Text3::
cont "VIRIDIAN CITY" cont "VIRIDIAN CITY"
done done
_OakBeforeBattleText:: _OakFirstBattleText::
text "OAK: Oh, my!" text "OAK: Ah, yes!"
line "<PLAYER>!"
para "It seems you" para "Good to see you!"
line "caught me during"
cont "during my lunch"
cont "hour!"
para "<PLAYER>, you" para "The last time we"
line "have truly come" line "met here, you"
cont "into your own!" cont "didn't even have"
cont "your first"
cont "#MON..."
para "Anyway! <PLAYER>!"
para "Your #MON" para "Your #MON"
line "LEAGUE challenge" line "LEAGUE challenge"
@ -71,7 +73,18 @@ _OakBeforeBattleText::
para "How about we" para "How about we"
line "spar a bit?" line "spar a bit?"
cont "What say you?" cont "What say you?"
done
_OakBeforeBattleText::
text "OAK: Oh, my!"
para "It seems you"
line "caught me during"
cont "during my lunch"
cont "hour!"
para "Did you come for"
line "a rematch?"
done done
_OakDefeatedText:: _OakDefeatedText::
@ -82,19 +95,86 @@ _OakDefeatedText::
prompt prompt
_OakWonText:: _OakWonText::
text "Back in my day," text "I still"
line "I was a serious" line "have it!"
cont "TRAINER!"
prompt prompt
_OakYes:: _OakYes::
text "Back in my day," text "Back in my day,"
line "I was a serious" line "I was a serious"
cont "TRAINER! Prepare" cont "TRAINER! Prepare"
cont "yourself, <PLAYER>!" cont "yourself!"
prompt prompt
_OakNo:: _OakNo::
text "Maybe another" text "Another time,"
line "time!" line "then?"
done
_OakFirstWin::
text "OAK: I thought you"
line "would fight more"
cont "like AGATHA, but I"
cont "see myself in"
cont "you..."
para "It reminds me of"
line "the old days..."
para "But, now is not"
line "the time for"
cont "that."
para "<PLAYER>!"
line "I have a gift for"
cont "you."
prompt
_ReceivedCitrinePassText::
text "<PLAYER> received"
line "the @"
text_ram wStringBuffer
text "!@"
text_end
_OakCitrineExplain::
text "This is a ticket"
line "to CITRINE CITY."
para "It's a place where"
line "the best TRAINERs"
cont "go to become far"
cont "stronger."
para "Some strange BIRD"
line "#MON will come"
cont "to roost there,"
cont "but they are so"
cont "fast and vicious,"
cont "few can even get"
cont "close to them..."
para "Perhaps you can"
line "make history once"
cont "again!"
done
_OakTryAgain::
text "OAK: Ok! Have you"
line "made room in your"
cont "BAG?"
prompt
_OakBagFull::
text "Ah! Your BAG is"
line "full. Go back to"
cont "your house and"
cont "make room!"
done
_OakBagStillFull::
text "Ohoho, not so"
line "fast! It's still"
cont "full. Your PC can"
cont "store items, yes?"
done done