; 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:
;joenote - This script will always run after the battle with Jacky. 
;Notice how there is no check to see if the player actually lost.
;Let's go ahead and add that real quick.
	ld a, [wIsInBattle]	;if wIsInBattle is -1, then the battle was lost
	inc a	;if A holds -1, it will increment to 0 and set the z flag (but not the c flag, dec and inc cannot affect it).
	jr z, .resetMapScript	;Kick out if the player lost.
	
	CheckEvent EVENT_BEAT_JACKY
	jr nz, .resetMapScript	;Kick out if the player already beat Jacky before and got the prize.

	SetEvent EVENT_BEAT_JACKY
;	ld a, EEVEE ; Getting the Pokemon the player needs before printing the text
;joenote - the above line is overwritten by the very next line.
	ld a, [wPlayerStarter] ; Load the player's starter after Eevee loads.
	cp EEVEE ; Was your starter Eevee?
	ld a, EEVEE ; joenote - you can load EEVEE into A at this line,
				;			because the LD instruction does not alter the flag bits
	jr nz, .skip ; If not, skip this.
	ld a, PIKACHU ; Load in Pikachu if true
.skip
;joenote - If the player's starter was EEVEE, then PIKACHU goes into wd11e.
;			But if it wasn't EEVEE, then the player's starter would have gone into wd11e. 
;			With the above alteration, EEVEE is goes into wd11e instead of the starter.
	ld [wd11e], a
	call GetMonName
	ld a, $1 ; Load Jacky's NPC ID
	ldh [hSpriteIndex], a ; Slap it in the index
	call DisplayTextID
.resetMapScript	;joenote - adding this label so we can jump to it
	ld a, $0
	ld [wCeladonMansionRoofHouseCurScript], a ; kick the player back downstairs
	ld [wCurMapScript], a	;joenote - really, really need to also reset the current map script
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
	ld [wCurMapScript], a	;joenote - really, really need to also set the current map script
;joenote - remember that, win or lose, the next map update after the battle 
;			will run index number 1 in the map script list which is JackyBeat
	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
