summaryrefslogtreecommitdiff
path: root/engine/oak_speech.asm
diff options
context:
space:
mode:
Diffstat (limited to 'engine/oak_speech.asm')
-rwxr-xr-xengine/oak_speech.asm238
1 files changed, 238 insertions, 0 deletions
diff --git a/engine/oak_speech.asm b/engine/oak_speech.asm
new file mode 100755
index 00000000..a671c553
--- /dev/null
+++ b/engine/oak_speech.asm
@@ -0,0 +1,238 @@
+SetDefaultNames: ; 60ca (1:60ca)
+ ld a, [$d358]
+ push af
+ ld a, [W_OPTIONS] ; $d355
+ push af
+ ld a, [$d732]
+ push af
+ ld hl, W_PLAYERNAME ; $d158
+ ld bc, $d8a
+ xor a
+ call FillMemory
+ ld hl, wSpriteStateData1
+ ld bc, $200
+ xor a
+ call FillMemory
+ pop af
+ ld [$d732], a
+ pop af
+ ld [W_OPTIONS], a ; $d355
+ pop af
+ ld [$d358], a
+ ld a, [$d08a]
+ and a
+ call z, Func_5bff
+ ld hl, NintenText
+ ld de, W_PLAYERNAME ; $d158
+ ld bc, $b
+ call CopyData
+ ld hl, SonyText
+ ld de, W_RIVALNAME ; $d34a
+ ld bc, $b
+ jp CopyData
+
+OakSpeech: ; 6115 (1:6115)
+ ld a,$FF
+ call PlaySound ; stop music
+ ld a, BANK(Music_Routes2) ; bank of song
+ ld c,a
+ ld a, MUSIC_ROUTES2 ; song #
+ call PlayMusic ; plays music
+ call ClearScreen
+ call LoadTextBoxTilePatterns
+ call SetDefaultNames
+ ld a,$18
+ call Predef ; indirect jump to InitializePlayerData
+ ld hl,$D53A
+ ld a,POTION
+ ld [$CF91],a
+ ld a,1
+ ld [$CF96],a
+ call AddItemToInventory ; give one potion
+ ld a,[$D07C]
+ ld [$D71A],a
+ call Func_62ce
+ xor a
+ ld [$FFD7],a
+ ld a,[$D732]
+ bit 1,a ; XXX when is bit 1 set?
+ jp nz,Func_61bc ; easter egg: skip the intro
+ ld de,ProfOakPic
+ ld bc, (Bank(ProfOakPic) << 8) | $00
+ call IntroPredef3B ; displays Oak pic?
+ call FadeInIntroPic
+ ld hl,OakSpeechText1
+ call PrintText ; prints text box
+ call GBFadeOut2
+ call ClearScreen
+ ld a,NIDORINO
+ ld [$D0B5],a ; pic displayed is stored at this location
+ ld [$CF91],a
+ call GetMonHeader ; this is also related to the pic
+ FuncCoord 6, 4 ; $c3f6
+ ld hl,Coord ; position on tilemap the pic is displayed
+ call LoadFlippedFrontSpriteByMonIndex ; displays pic?
+ call MovePicLeft
+ ld hl,OakSpeechText2
+ call PrintText ; Prints text box
+ call GBFadeOut2
+ call ClearScreen
+ ld de,RedPicFront
+ ld bc,(Bank(RedPicFront) << 8) | $00
+ call IntroPredef3B ; displays player pic?
+ call MovePicLeft
+ ld hl,IntroducePlayerText
+ call PrintText
+ call LoadDefaultNamesPlayer ; brings up NewName/Red/etc menu
+ call GBFadeOut2
+ call ClearScreen
+ ld de,Rival1Pic
+ ld bc,(Bank(Rival1Pic) << 8) | $00
+ call IntroPredef3B ; displays rival pic
+ call FadeInIntroPic
+ ld hl,IntroduceRivalText
+ call PrintText
+ call LoadDefaultNamesRival
+
+Func_61bc: ; 61bc (1:61bc)
+ call GBFadeOut2
+ call ClearScreen
+ ld de,RedPicFront
+ ld bc,(Bank(RedPicFront) << 8) | $00
+ call IntroPredef3B
+ call GBFadeIn2
+ ld a,[$D72D]
+ and a
+ jr nz,.next
+ ld hl,OakSpeechText3
+ call PrintText
+.next
+ ld a,[H_LOADEDROMBANK]
+ push af
+ ld a,(SFX_02_48 - SFX_Headers_02) / 3
+ call PlaySound
+ pop af
+ ld [H_LOADEDROMBANK],a
+ ld [$2000],a
+ ld c,4
+ call DelayFrames
+ ld de,RedSprite ; $4180
+ ld hl,$8000
+ ld bc,(BANK(RedSprite) << 8) | $0C
+ call CopyVideoData
+ ld de,ShrinkPic1
+ ld bc,(BANK(ShrinkPic1) << 8) | $00
+ call IntroPredef3B
+ ld c,4
+ call DelayFrames
+ ld de,ShrinkPic2
+ ld bc,(BANK(ShrinkPic2) << 8) | $00
+ call IntroPredef3B
+ call ResetPlayerSpriteData
+ ld a,[H_LOADEDROMBANK]
+ push af
+ ld a,2
+ ld [$C0EF],a
+ ld [$C0F0],a
+ ld a,$A
+ ld [wMusicHeaderPointer],a
+ ld a,$FF
+ ld [$C0EE],a
+ call PlaySound ; stop music
+ pop af
+ ld [H_LOADEDROMBANK],a
+ ld [$2000],a
+ ld c,$14
+ call DelayFrames
+ FuncCoord 6, 5 ; $c40a
+ ld hl,Coord
+ ld b,7
+ ld c,7
+ call ClearScreenArea
+ call LoadTextBoxTilePatterns
+ ld a,1
+ ld [$CFCB],a
+ ld c,$32
+ call DelayFrames
+ call GBFadeOut2
+ jp ClearScreen
+OakSpeechText1: ; 6253 (1:6253)
+ TX_FAR _OakSpeechText1
+ db "@"
+OakSpeechText2: ; 6258 (1:6258)
+ TX_FAR _OakSpeechText2A
+ db $14 ; play NIDORINA cry from TextCommandSounds
+ TX_FAR _OakSpeechText2B
+ db "@"
+IntroducePlayerText: ; 6262 (1:6262)
+ TX_FAR _IntroducePlayerText
+ db "@"
+IntroduceRivalText: ; 6267 (1:6267)
+ TX_FAR _IntroduceRivalText
+ db "@"
+OakSpeechText3: ; 626c (1:626c)
+ TX_FAR _OakSpeechText3
+ db "@"
+
+FadeInIntroPic: ; 6271 (1:6271)
+ ld hl,IntroFadePalettes
+ ld b,6
+.next
+ ld a,[hli]
+ ld [rBGP],a
+ ld c,10
+ call DelayFrames
+ dec b
+ jr nz,.next
+ ret
+
+IntroFadePalettes: ; 6282 (1:6282)
+ db %01010100
+ db %10101000
+ db %11111100
+ db %11111000
+ db %11110100
+ db %11100100
+
+MovePicLeft: ; 6288 (1:6288)
+ ld a,119
+ ld [$FF4B],a
+ call DelayFrame
+
+ ld a,$E4
+ ld [rBGP],a
+.next
+ call DelayFrame
+ ld a,[$FF4B]
+ sub 8
+ cp $FF
+ ret z
+ ld [$FF4B],a
+ jr .next
+
+Predef3B: ; 62a1 (1:62a1)
+ call Load16BitRegisters
+IntroPredef3B: ; 62a4 (1:62a4)
+; bank of sprite given in b
+ push bc
+ ld a,b
+ call UncompressSpriteFromDE
+ ld hl,S_SPRITEBUFFER1
+ ld de,$A000
+ ld bc,$0310
+ call CopyData
+ ld de,$9000
+ call InterlaceMergeSpriteBuffers
+ pop bc
+ ld a,c
+ and a
+ FuncCoord 15, 1 ; $c3c3
+ ld hl,Coord
+ jr nz,.next
+ FuncCoord 6, 4 ; $c3f6
+ ld hl,Coord
+.next
+ xor a
+ ld [$FFE1],a
+ ld a,1
+ jp Predef