mirror of
https://github.com/thornAvery/kep-hack.git
synced 2025-09-16 18:30:50 +12:00
LGPE Beauty Event
This is basically done, but has a few glitches to iron out that I don't have time to do today. So, I'm sending this in as-is with the intent to finish (or someone else can idc) it later. I initially thought to restrict this to after Vermilion Gym but Persian is really bad and Arcanine doesn't compare to the L30 Dugtrio, so I think it's ok. Just barely balances itself out. Bugs: - GiveMonName doesn't work properly for the Vermilion Beauty after receiving the Pokemon, jank ensues. - Text scrolls immediately when receiving the Pokemon from the Vermilion Beauty.
This commit is contained in:
parent
cd8f73b99f
commit
35851ef6a9
|
@ -153,7 +153,8 @@
|
|||
const_next $150
|
||||
const_skip
|
||||
const EVENT_GOT_BIKE_VOUCHER
|
||||
const_skip 4
|
||||
const EVENT_VERMILION_BEAUTY_DONE
|
||||
const_skip 3
|
||||
const EVENT_SEEL_FAN_BOAST
|
||||
const EVENT_PIKACHU_FAN_BOAST
|
||||
const_skip 8
|
||||
|
|
|
@ -35,8 +35,8 @@ DEF PC_ITEM_CAPACITY EQU 50
|
|||
; TwoOptionMenuStrings indexes (see data/yes_no_menu_strings.asm)
|
||||
const_def
|
||||
const YES_NO_MENU ; 0
|
||||
const NORTH_WEST_MENU ; 1
|
||||
const SOUTH_EAST_MENU ; 2
|
||||
const BOY_GIRL_MENU ; 1
|
||||
const CATS_DOGS_MENU ; 2
|
||||
const WIDE_YES_NO_MENU ; 3
|
||||
const NORTH_EAST_MENU ; 4
|
||||
const TRADE_CANCEL_MENU ; 5
|
||||
|
|
|
@ -30,5 +30,6 @@ VermilionCity_Object:
|
|||
object_event 29, 9, SPRITE_MONSTER, WALK, UP_DOWN, 5 ; person
|
||||
object_event 25, 27, SPRITE_SAILOR, WALK, LEFT_RIGHT, 6 ; person
|
||||
object_event 31, 27, SPRITE_COOLTRAINER_F, WALK, LEFT_RIGHT, 14 ; person
|
||||
object_event 12, 13, SPRITE_BEAUTY, STAY, DOWN, 15 ; person
|
||||
|
||||
def_warps_to VERMILION_CITY
|
||||
|
|
|
@ -1740,7 +1740,7 @@ _OakSpeechText2B::
|
|||
prompt
|
||||
|
||||
_IntroducePlayerText::
|
||||
text "Next, what is"
|
||||
text "Now, what is"
|
||||
line "your name?"
|
||||
prompt
|
||||
|
||||
|
|
|
@ -1,16 +1,30 @@
|
|||
; The Wild Data here has been redesigned to fit the Vermilion Beauty quest.
|
||||
; Meowth and Growlithe have 19.6% chances of appearing.
|
||||
; I've limited the amount of Pokemon that can appear by proxy, making it so it's easier to get what the player wants.
|
||||
; Oh, and the water encounters are a mishmash of what's seen here over the franchise.
|
||||
Route6WildMons:
|
||||
def_grass_wildmons 15 ; encounter rate
|
||||
db 13, ODDISH
|
||||
db 13, PSYDUCK
|
||||
db 13, RATTATA
|
||||
db 13, PIDGEY
|
||||
db 15, PIDGEOTTO
|
||||
db 10, MANKEY
|
||||
db 12, MANKEY
|
||||
db 15, BELLSPROUT
|
||||
db 16, BELLSPROUT
|
||||
db 16, PSYDUCK
|
||||
db 14, JIGGLYPUFF
|
||||
db 16, MEOWTH
|
||||
db 10, MEOWTH
|
||||
db 12, MEOWTH
|
||||
db 15, GROWLITHE
|
||||
db 16, GROWLITHE
|
||||
db 16, JIGGLYPUFF
|
||||
db 14, GROWLITHE
|
||||
db 16, ABRA
|
||||
end_grass_wildmons
|
||||
|
||||
def_water_wildmons 0 ; encounter rate
|
||||
def_water_wildmons 10 ; encounter rate
|
||||
db 12, PSYDUCK
|
||||
db 12, SLOWPOKE
|
||||
db 15, PSYDUCK
|
||||
db 15, SLOWPOKE
|
||||
db 15, GOLDEEN
|
||||
db 15, WEIRDUCK
|
||||
db 15, WEIRDUCK
|
||||
db 16, SEAKING
|
||||
db 15, GOLDUCK
|
||||
db 20, GOLDUCK
|
||||
end_water_wildmons
|
||||
|
|
|
@ -9,7 +9,7 @@ TwoOptionMenuStrings:
|
|||
; width, height, blank line before first menu item?, text pointer
|
||||
two_option_menu 4, 3, FALSE, .YesNoMenu
|
||||
two_option_menu 5, 3, FALSE, .BoyGirlMenu
|
||||
two_option_menu 6, 3, FALSE, .SouthEastMenu
|
||||
two_option_menu 6, 3, TRUE, .CatsDogsMenu
|
||||
two_option_menu 6, 3, FALSE, .YesNoMenu
|
||||
two_option_menu 6, 3, FALSE, .NorthEastMenu
|
||||
two_option_menu 7, 3, FALSE, .TradeCancelMenu
|
||||
|
@ -26,13 +26,16 @@ TwoOptionMenuStrings:
|
|||
next "NO@"
|
||||
|
||||
; There is probably a better way to word this...
|
||||
; Replaced North/West
|
||||
.BoyGirlMenu:
|
||||
db "BOY"
|
||||
next "GIRL@"
|
||||
|
||||
.SouthEastMenu:
|
||||
db "SOUTH"
|
||||
next "EAST@"
|
||||
; For the Vermilion Beauty event.
|
||||
; Replaced South/East
|
||||
.CatsDogsMenu:
|
||||
db "CATS"
|
||||
next "DOGS@"
|
||||
|
||||
.NorthEastMenu:
|
||||
db "NORTH"
|
||||
|
|
|
@ -2379,6 +2379,7 @@ UseBagItem:
|
|||
ret
|
||||
|
||||
.returnAfterCapturingMon
|
||||
call VermilionBeautyCheck ; before you go, would you like to talk about our lord and saviour LGPE?
|
||||
call GBPalNormal
|
||||
xor a
|
||||
ld [wCapturedMonSpecies], a
|
||||
|
@ -7225,3 +7226,22 @@ StupidBattleTentFix:
|
|||
text "Oops! Better"
|
||||
line "luck next time!"
|
||||
prompt
|
||||
|
||||
; Vermilion Beauty functionality.
|
||||
; If we have a Meowth or Growlithe on our hands, increment the counter.
|
||||
VermilionBeautyCheck:
|
||||
ld a, [wBeautyChoice] ; Firstly, was this even started?
|
||||
jr z, .skipCounting ; Yeah? Alright, skip.
|
||||
ld a, [wBeautyCounter] ; Now to cap this at 5.
|
||||
cp 5 ; First, we check if we're at 5...
|
||||
jr z, .skipCounting ; and if so, we skip doing this at all.
|
||||
|
||||
ld a, [wCapturedMonSpecies] ; Now to check the species.
|
||||
ld hl, wBeautyChoice
|
||||
cp [hl] ; Is it our guy?
|
||||
jr nz, .skipCounting ; Fuck right off then.
|
||||
ld a, [wBeautyCounter] ; Ok, now grab the counter...
|
||||
inc a ; Increment it...
|
||||
ld [wBeautyCounter], a ; and get the FUCK out of my office!!!
|
||||
.skipCounting
|
||||
ret
|
|
@ -48,6 +48,14 @@ IF DEF(_DEBUG)
|
|||
ld a, 39
|
||||
ld [wCandyJarCount], a
|
||||
|
||||
; Test Vermilion Beauty
|
||||
; Set a to 4 to test increments.
|
||||
; Set BeautyChoice to GROWLITHE to test the other choice.
|
||||
ld a, 5
|
||||
ld [wBeautyCounter], a
|
||||
ld a, MEOWTH
|
||||
ld [wBeautyChoice], a
|
||||
|
||||
; Get all badges except Earth Badge.
|
||||
ld a, ~(1 << BIT_EARTHBADGE)
|
||||
ld [wObtainedBadges], a
|
||||
|
@ -165,15 +173,14 @@ DebugSetPokedexEntries:
|
|||
ret
|
||||
|
||||
DebugItemsList:
|
||||
db POKE_BALL, 99
|
||||
db MASTER_BALL, 99
|
||||
db MYSTERY_BOX, 1
|
||||
db CANDY_JAR, 1
|
||||
db BICYCLE, 1
|
||||
db FULL_RESTORE, 99
|
||||
db MAX_REPEL, 99
|
||||
db RARE_CANDY, 99
|
||||
db MASTER_BALL, 99
|
||||
db ULTRA_BALL, 99
|
||||
db POKE_BALL, 99 ; test ball miss text with this
|
||||
db SECRET_KEY, 1
|
||||
db CARD_KEY, 1
|
||||
db S_S_TICKET, 1
|
||||
|
|
|
@ -1 +1 @@
|
|||
CCC ! ! !1 !11111111Ckk7~|r7~17~wVwww111Cd1111111111111111C-111111111IH111CCC-111111DE111CCC !C !11 !111111Cd|~1|~11|swwwwVwCd1111111111111111Cd1
1111 !TCdVm1|~edTeCCCCd11111ed111e-T.CCCCd11111e-.CTCdC-.CCCCCCTCdCCCCTTTTTTTTTTTC-gCCCCTxxxTxxxxxxCCCkkkTkTkkkkkkkCCCCCCCCCCCCCCCCCCCCCCCCTCCCTCCCCCCCCCC
|
||||
CCC ! ! !1 !11111111Ckk7~|r7~17~wVwww111Cd1111111111111111C-111111111IH111CCC-111111DE111CCC !C !11 !111111Cd|~1|~11|swwwwVwCd1111111111111111Cd1
1111 !TCdV21|~edTeCCCCd11111ed111e-T.CCCCd11111e-.CTCdC-.CCCCCCTCdCCCCTTTTTTTTTTTC-gCCCCTxxxTxxxxxxCCCkkkTkTkkkkkkkCCCCCCCCCCCCCCCCCCCCCCCCTCCCTCCCCCCCCCC
|
|
@ -1948,12 +1948,15 @@ wBoxItems:: ds PC_ITEM_CAPACITY * 2 + 1
|
|||
; bit 7: whether the player has changed boxes before
|
||||
wCurrentBoxNum:: db
|
||||
|
||||
ds 1
|
||||
|
||||
; number of HOF teams
|
||||
wNumHoFTeams:: db
|
||||
|
||||
ds 1 ; was wUnusedD5A3, removed when putting the Mystery Box in.
|
||||
; LGPE Vermilion Beauty event-related stuff.
|
||||
; wBeautyChoice stores either MEOWTH or GROWLITHE, which the counter will increment with.
|
||||
; We use wBeautyChoice to spit out text during the cutscene too.
|
||||
; wBeautyCounter will count up to 5 and gives the player a L16 Persian or Arcanine depending on what counts up.
|
||||
wBeautyChoice:: db ; Stores the ID of the Pokemon chosen.
|
||||
wBeautyCounter:: db ; was wUnusedD5A3, removed when putting the Mystery Box in.
|
||||
|
||||
wPlayerCoins:: ds 2 ; BCD
|
||||
|
||||
|
|
|
@ -274,6 +274,7 @@ VermilionCity_TextPointers:
|
|||
dw VermilionCityText12
|
||||
dw VermilionCityText13
|
||||
dw RoingusText
|
||||
dw VermilionBeauty
|
||||
|
||||
VermilionCityText1:
|
||||
text_far _VermilionCityText1
|
||||
|
@ -459,3 +460,120 @@ EventVermillionCitySSTicket:
|
|||
PassRefuse:
|
||||
text_far _VermillionCityHarborRefuse
|
||||
text_end
|
||||
|
||||
; LGPE Beauty who gives you a Persian or Arcanine depending on the game.
|
||||
; Here, we make it a Cats vs Dogs question and change based on that.
|
||||
; The way it works is it makes the player catch the opposite Pokemon, and then get the one they picked.
|
||||
; So Meowth gets Arcanine, and Growlithe gets Persian.
|
||||
; This code is kind of schizophrenic but it does the job.
|
||||
VermilionBeauty:
|
||||
text_asm
|
||||
|
||||
CheckEvent EVENT_VERMILION_BEAUTY_DONE ; First, check if the event is actually done.
|
||||
jp nz, BeautyDone ; Yes? Alright, no need for this.
|
||||
|
||||
ld a, [wBeautyChoice] ; Next, we check if wBeautyChoice has been set. This saves an event constant.
|
||||
cp 0 ; It will never be 0 if the player has made their choice.
|
||||
jr z, .eventStart ; If it is, then the event needs to start.
|
||||
|
||||
; We need to do 2 skips here which triggers me but it works.
|
||||
; You could put the finish check before the choice check, but then it gets a little weird.
|
||||
; All it really achieves is weird architecture for like 3-4 less machine cycles.
|
||||
ld a, [wBeautyCounter] ; Alright, if you got here, then the event is in progress.
|
||||
cp 5 ; Do you have 5 of the scrunklies?
|
||||
jr z, .eventIsFinished ; Big if true.
|
||||
jr nz, .eventInProgress ; Small if false.
|
||||
|
||||
.eventStart
|
||||
ld hl, BeautyText1 ; Let's open the text.
|
||||
call PrintText
|
||||
call CatsDogsChoice
|
||||
|
||||
ld a, [wCurrentMenuItem] ; Let's load what they picked. 0 is cats, 1 is dogs.
|
||||
and a
|
||||
jr nz, .getArcanine ; Skip storing Growlithe if dogs.
|
||||
ld a, GROWLITHE ; If they picked cats, then store Growlithe.
|
||||
jr .skip ; I know this looks bad, but if it isn't here, it'd store Growlithe and then go to Meowth anyway.
|
||||
.getArcanine ; If they get here, they picked dogs, so we store Meowth.
|
||||
ld a, MEOWTH
|
||||
.skip ; Now we land here.
|
||||
ld [wBeautyChoice], a ; Finally store the choice in wBeautyChoice.
|
||||
|
||||
ld hl, BeautyText2 ; Now spit it out.
|
||||
call PrintText
|
||||
|
||||
.eventInProgress ; This is a jump point for if the event was already started.
|
||||
ld a, [wBeautyChoice]
|
||||
ld [wd11e], a
|
||||
call GetMonName
|
||||
ld hl, BeautyChoice
|
||||
call PrintText
|
||||
jr .done ; no give pokemon. bad.
|
||||
.eventIsFinished
|
||||
call SaveScreenTilesToBuffer1 ; saves us from some corruption disasters if nicknaming.
|
||||
ld a, [wBeautyChoice]
|
||||
ld [wd11e], a
|
||||
call GetMonName
|
||||
ld hl, BeautyFinish
|
||||
call PrintText
|
||||
|
||||
lb bc, PERSIAN, 16
|
||||
ld a, [wBeautyChoice] ; Let's make sure they actually need Persian.
|
||||
cp PERSIAN ; Do they?
|
||||
jr z, .skip2 ; electric boogaloo
|
||||
lb bc, ARCANINE, 16 ; ok but skip2 means arc never gets loaded in. very good sequel. disney would NEVER.
|
||||
.skip2
|
||||
call GivePokemon
|
||||
call LoadScreenTilesFromBuffer1 ; saves us from some corruption disasters if nicknaming.
|
||||
SetEvent EVENT_VERMILION_BEAUTY_DONE ; and now we can finally rest.
|
||||
.done
|
||||
jp TextScriptEnd
|
||||
|
||||
; This needs to be separate for reasons I refuse to elaborate on for fear of angering God.
|
||||
BeautyDone:
|
||||
text_asm
|
||||
ld a, [wBeautyChoice]
|
||||
ld [wd11e], a
|
||||
call GetMonName
|
||||
ld hl, BeautyExplain
|
||||
call PrintText
|
||||
jp TextScriptEnd
|
||||
|
||||
; displays cats/dogs choice
|
||||
CatsDogsChoice:
|
||||
call SaveScreenTilesToBuffer1
|
||||
call InitCatsDogsTextBoxParameters
|
||||
jr DisplayCatsDogsChoice
|
||||
|
||||
InitCatsDogsTextBoxParameters:
|
||||
ld a, $2 ; loads the value for the unused SOUTH/EAST choice, that was changed to say CATS/DOGS
|
||||
ld [wTwoOptionMenuID], a
|
||||
hlcoord 12, 8
|
||||
lb bc, 10, 13
|
||||
ret
|
||||
|
||||
DisplayCatsDogsChoice:
|
||||
ld a, $14
|
||||
ld [wTextBoxID], a
|
||||
call DisplayTextBoxID
|
||||
jp LoadScreenTilesFromBuffer1
|
||||
|
||||
BeautyText1:
|
||||
text_far _BeautyText1
|
||||
text_end
|
||||
|
||||
BeautyText2:
|
||||
text_far _BeautyText2
|
||||
text_end
|
||||
|
||||
BeautyChoice:
|
||||
text_far _BeautyChoice
|
||||
text_end
|
||||
|
||||
BeautyFinish:
|
||||
text_far _BeautyFinish
|
||||
text_end
|
||||
|
||||
BeautyExplain:
|
||||
text_far _BeautyExplain
|
||||
text_end
|
|
@ -175,3 +175,54 @@ _VermillionCityHarborRefuse::
|
|||
text "Alright! Have a"
|
||||
line "nice day!"
|
||||
done
|
||||
|
||||
_BeautyText1::
|
||||
text "Hey! Do you like"
|
||||
line "cats or dogs?"
|
||||
prompt
|
||||
|
||||
_BeautyText2::
|
||||
text "Ah! I knew it!"
|
||||
|
||||
para "Sorry, it was a"
|
||||
line "silly question..."
|
||||
prompt ; needed for text to scroll correctly - it looks and acts fine in-game, don't worry.
|
||||
|
||||
_BeautyChoice:: ; this is separate for the in-progress event.
|
||||
text "If you catch 5"
|
||||
line "@"
|
||||
text_ram wcd6d ; efficiency - means we don't need two separate texts...
|
||||
text ", I'll"
|
||||
cont "give you a great"
|
||||
cont "#MON!"
|
||||
|
||||
para "See you then!"
|
||||
done
|
||||
|
||||
_BeautyFinish::
|
||||
text "Oh! You've caught"
|
||||
line "5 "
|
||||
text_ram wcd6d
|
||||
text "!"
|
||||
prompt
|
||||
|
||||
_BeautyExplain::
|
||||
text "When "
|
||||
text_ram wcd6d
|
||||
line "evolves, it will"
|
||||
cont "look like this."
|
||||
|
||||
para "Hm? Why did I"
|
||||
line "make you catch"
|
||||
cont "the opposite"
|
||||
cont "#MON?"
|
||||
|
||||
para "Well, I wanted"
|
||||
line "to see if your"
|
||||
cont "preferences"
|
||||
cont "stayed the same."
|
||||
|
||||
para "It seems I was"
|
||||
line "wrong!"
|
||||
done
|
||||
|
||||
|
|
Loading…
Reference in a new issue