kep-hack/scripts/CeladonMansionRoofHouse.asm
Llinos Evans 8cd8f1ded0 Shinjuku Jack, final Mewtwo theme
This renovates the Celadon Mansion Roof House to feature a faithful restoration of Shinjuku Jack. Notes are in the script file.

Also, LuciShrimp's Mewtwo theme is finished!
2023-07-16 17:14:43 +01:00

181 lines
4.3 KiB
NASM

; The Hiker in the Roof House is now Shinjuku Jacky. He was a famous Virtua Fighter player and the source of the famous "Jack" sprite.
; Shinjuku Jack wrote the book "Virtua Fighter Maniax", the first to feature frame data for Virtua Fighter 1 and thus a very notable resource.
; At the time, many Virtua Fighter players had "geographical names", representing their residences. Shinjuku is notably within Tokyo, near to Shibuya.
; Because Celadon City is based on Tokyo Metropolis, specifically Shinjuku and Shibuya, and there's a map called JISAN.MAP that featured N64s, I'm placing Jacky here.
; This also means you actually have to beat a trainer to get the Eevee/Pikachu, so you have to work for that massive power spike.
; It's a lot, but I hope this is the best restoration Jacky can receive.
CeladonMansionRoofHouse_Script:
call EnableAutoTextBoxDrawing
ld hl, CeladonMansionRoofHouse_ScriptPointers
ld a, [wCeladonMansionRoofHouseCurScript]
jp CallFunctionInTable
CeladonMansionRoofHouse_ScriptPointers:
dw TheRetONator
dw JackyBeat
JackyBeat:
SetEvent EVENT_BEAT_JACKY
ld a, EEVEE ; Getting the Pokemon the player needs before printing the text
ld a, [wPlayerStarter] ; Load the player's starter after Eevee loads.
cp EEVEE ; Was your starter Eevee?
jr nz, .skip ; If not, skip this.
ld a, PIKACHU ; Load in Pikachu if true
.skip
ld [wd11e], a
call GetMonName
ld a, $1 ; Load Jacky's NPC ID
ldh [hSpriteIndex], a ; Slap it in the index
call DisplayTextID
ld a, $0
ld [wCeladonMansionRoofHouseCurScript], a ; kick the player back downstairs
TheRetONator: ; fallthrough
ret
CeladonMansionRoofHouse_TextPointers:
dw CeladonMansion5Text1
dw CeladonMansion5Text2
dw JackyN64
dw JackyTVMario
dw JackyTVWaveRace
CeladonMansion5Text1:
text_asm
CheckEvent EVENT_GOT_MANSION_GIFT
jr nz, .gotGift
CheckEvent EVENT_BEAT_JACKY
jr nz, .skip
ld hl, JackyText1
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. annoying.
call YesNoChoice ; Do they want in?
ld a, [wCurrentMenuItem]
and a
jr nz, .refused
ld hl, JackyYes
call PrintText
ld c, BANK(Music_MeetMaleTrainer)
ld a, MUSIC_MEET_MALE_TRAINER
call PlayMusic
ld hl, wd72d
set 6, [hl]
set 7, [hl]
call Delay3
ld a, OPP_JACK
ld [wCurOpponent], a
ld a, 1
ld [wTrainerNo], a
ld [wIsTrainerBattle], a
ld hl, JackyLossText
ld de, JackyWinText
call SaveEndBattleTextPointers
ld a, $1
ld [wCeladonMansionRoofHouseCurScript], a
jr .done
.gotGift
ld hl, JackyGift
call PrintText
jr .done
.skip
ld hl, JackyPostBeatText
call PrintText
jr .done
.refused
ld hl, JackyNo
call PrintText
; fallthrough
.done
jp TextScriptEnd
CeladonMansion5Text2:
text_asm
CheckEvent EVENT_BEAT_JACKY
jr z, .notBeatenJacky
lb bc, EEVEE, 25
; Because Eevee is a starter, we don't want it to be rendered redundant by this.
; So when the player has one, we'll give them something else.
; I chose Pikachu, which matches how in Yellow, the Eevee matches the rival.
; It doesn't entirely make sense given RB, but I think it's ok, and gives a similar power spike.
ld a, [wPlayerStarter] ; Load the player's starter after Eevee loads.
cp EEVEE ; Was your starter Eevee?
jr nz, .skip ; If not, skip this.
lb bc, PIKACHU, 25 ; Load in Pikachu if true.
.skip ; Return to usual functioning.
call GivePokemon
jr nc, .party_full
ld a, HS_CELADON_MANSION_EEVEE_GIFT
ld [wMissableObjectIndex], a
predef HideObject
SetEvent EVENT_GOT_MANSION_GIFT
jr .party_full
.notBeatenJacky
ld hl, JackyThief
call PrintText
; fallthrough
.party_full
jp TextScriptEnd
JackyText1:
text_far _CeladonMansion5Text1
text_end
; Unused functionality for a rematch, didn't seem worth it
;JackyPreBeatText:
; text_far _JackyPreBeatText
; text_end
JackyPostBeatText:
text_far _JackyAfterBattle ; using this for now, a rematch for the sake of a rematch seems iffy.
text_end
JackyYes:
text_far _JackyYes
text_end
JackyNo:
text_far _JackyNo
text_end
JackyWinText:
text_far _JackyWinText
text_end
JackyLossText:
text_far _JackyLossText
text_end
JackyThief:
text_far _JackyThief
text_end
JackyTVMario:
text_far _JackyTVMario
text_end
JackyTVWaveRace:
text_far _JackyTVWaveRace
text_end
JackyN64:
text_far _JackyN64
text_end
JackyGift:
text_far _JackyGift
text_end