shithub: pokered

Download patch

ref: 87ef75c173b5d5f227912860487600b6f53d1d1f
parent: 881e0059704b9134a80d30f203f54677a7c6fb89
author: Rangi <remy.oukaour+rangi42@gmail.com>
date: Thu Jul 2 21:11:23 EDT 2020

Add engine/movie/oak_speech/ subdirectory

diff: cannot open b/engine/movie/oak_speech//null: file does not exist: 'b/engine/movie/oak_speech//null'
--- a/engine/movie/clear_save.asm
+++ /dev/null
@@ -1,23 +1,0 @@
-DoClearSaveDialogue:
-	call ClearScreen
-	call RunDefaultPaletteCommand
-	call LoadFontTilePatterns
-	call LoadTextBoxTilePatterns
-	ld hl, ClearSaveDataText
-	call PrintText
-	coord hl, 14, 7
-	lb bc, 8, 15
-	ld a, NO_YES_MENU
-	ld [wTwoOptionMenuID], a
-	ld a, TWO_OPTION_MENU
-	ld [wTextBoxID], a
-	call DisplayTextBoxID
-	ld a, [wCurrentMenuItem]
-	and a
-	jp z, Init
-	callba ClearSAV
-	jp Init
-
-ClearSaveDataText:
-	TX_FAR _ClearSaveDataText
-	db "@"
--- a/engine/movie/init_player_data.asm
+++ /dev/null
@@ -1,55 +1,0 @@
-InitPlayerData:
-InitPlayerData2:
-
-	call Random
-	ld a, [hRandomSub]
-	ld [wPlayerID], a
-
-	call Random
-	ld a, [hRandomAdd]
-	ld [wPlayerID + 1], a
-
-	ld a, $ff
-	ld [wUnusedD71B], a
-
-	ld hl, wPartyCount
-	call InitializeEmptyList
-	ld hl, wNumInBox
-	call InitializeEmptyList
-	ld hl, wNumBagItems
-	call InitializeEmptyList
-	ld hl, wNumBoxItems
-	call InitializeEmptyList
-
-START_MONEY EQU $3000
-	ld hl, wPlayerMoney + 1
-	ld a, START_MONEY / $100
-	ld [hld], a
-	xor a
-	ld [hli], a
-	inc hl
-	ld [hl], a
-
-	ld [wMonDataLocation], a
-
-	ld hl, wObtainedBadges
-	ld [hli], a
-
-	ld [hl], a
-
-	ld hl, wPlayerCoins
-	ld [hli], a
-	ld [hl], a
-
-	ld hl, wGameProgressFlags
-	ld bc, wGameProgressFlagsEnd - wGameProgressFlags
-	call FillMemory ; clear all game progress flags
-
-	jp InitializeMissableObjectsFlags
-
-InitializeEmptyList:
-	xor a ; count
-	ld [hli], a
-	dec a ; terminator
-	ld [hl], a
-	ret
--- a/engine/movie/oak_speech.asm
+++ /dev/null
@@ -1,233 +1,0 @@
-SetDefaultNames:
-	ld a, [wLetterPrintingDelayFlags]
-	push af
-	ld a, [wOptions]
-	push af
-	ld a, [wd732]
-	push af
-	ld hl, wPlayerName
-	ld bc, wBoxDataEnd - wPlayerName
-	xor a
-	call FillMemory
-	ld hl, wSpriteStateData1
-	ld bc, $200
-	xor a
-	call FillMemory
-	pop af
-	ld [wd732], a
-	pop af
-	ld [wOptions], a
-	pop af
-	ld [wLetterPrintingDelayFlags], a
-	ld a, [wOptionsInitialized]
-	and a
-	call z, InitOptions
-	ld hl, NintenText
-	ld de, wPlayerName
-	ld bc, NAME_LENGTH
-	call CopyData
-	ld hl, SonyText
-	ld de, wRivalName
-	ld bc, NAME_LENGTH
-	jp CopyData
-
-OakSpeech:
-	ld a, $FF
-	call PlaySound ; stop music
-	ld a, BANK(Music_Routes2)
-	ld c, a
-	ld a, MUSIC_ROUTES2
-	call PlayMusic
-	call ClearScreen
-	call LoadTextBoxTilePatterns
-	call SetDefaultNames
-	predef InitPlayerData2
-	ld hl, wNumBoxItems
-	ld a, POTION
-	ld [wcf91], a
-	ld a, 1
-	ld [wItemQuantity], a
-	call AddItemToInventory  ; give one potion
-	ld a, [wDefaultMap]
-	ld [wDestinationMap], a
-	call SpecialWarpIn
-	xor a
-	ld [hTilesetType], a
-	ld a, [wd732]
-	bit 1, a ; possibly a debug mode bit
-	jp nz, .skipChoosingNames
-	ld de, ProfOakPic
-	lb bc, Bank(ProfOakPic), $00
-	call IntroDisplayPicCenteredOrUpperRight
-	call FadeInIntroPic
-	ld hl, OakSpeechText1
-	call PrintText
-	call GBFadeOutToWhite
-	call ClearScreen
-	ld a, NIDORINO
-	ld [wd0b5], a
-	ld [wcf91], a
-	call GetMonHeader
-	coord hl, 6, 4
-	call LoadFlippedFrontSpriteByMonIndex
-	call MovePicLeft
-	ld hl, OakSpeechText2
-	call PrintText
-	call GBFadeOutToWhite
-	call ClearScreen
-	ld de, RedPicFront
-	lb bc, Bank(RedPicFront), $00
-	call IntroDisplayPicCenteredOrUpperRight
-	call MovePicLeft
-	ld hl, IntroducePlayerText
-	call PrintText
-	call ChoosePlayerName
-	call GBFadeOutToWhite
-	call ClearScreen
-	ld de, Rival1Pic
-	lb bc, Bank(Rival1Pic), $00
-	call IntroDisplayPicCenteredOrUpperRight
-	call FadeInIntroPic
-	ld hl, IntroduceRivalText
-	call PrintText
-	call ChooseRivalName
-.skipChoosingNames
-	call GBFadeOutToWhite
-	call ClearScreen
-	ld de, RedPicFront
-	lb bc, Bank(RedPicFront), $00
-	call IntroDisplayPicCenteredOrUpperRight
-	call GBFadeInFromWhite
-	ld a, [wd72d]
-	and a
-	jr nz, .next
-	ld hl, OakSpeechText3
-	call PrintText
-.next
-	ld a, [H_LOADEDROMBANK]
-	push af
-	ld a, SFX_SHRINK
-	call PlaySound
-	pop af
-	ld [H_LOADEDROMBANK], a
-	ld [MBC1RomBank], a
-	ld c, 4
-	call DelayFrames
-	ld de, RedSprite
-	ld hl, vSprites
-	lb bc, BANK(RedSprite), $0C
-	call CopyVideoData
-	ld de, ShrinkPic1
-	lb bc, BANK(ShrinkPic1), $00
-	call IntroDisplayPicCenteredOrUpperRight
-	ld c, 4
-	call DelayFrames
-	ld de, ShrinkPic2
-	lb bc, BANK(ShrinkPic2), $00
-	call IntroDisplayPicCenteredOrUpperRight
-	call ResetPlayerSpriteData
-	ld a, [H_LOADEDROMBANK]
-	push af
-	ld a, BANK(Music_PalletTown)
-	ld [wAudioROMBank], a
-	ld [wAudioSavedROMBank], a
-	ld a, 10
-	ld [wAudioFadeOutControl], a
-	ld a, $FF
-	ld [wNewSoundID], a
-	call PlaySound ; stop music
-	pop af
-	ld [H_LOADEDROMBANK], a
-	ld [MBC1RomBank], a
-	ld c, 20
-	call DelayFrames
-	coord hl, 6, 5
-	ld b, 7
-	ld c, 7
-	call ClearScreenArea
-	call LoadTextBoxTilePatterns
-	ld a, 1
-	ld [wUpdateSpritesEnabled], a
-	ld c, 50
-	call DelayFrames
-	call GBFadeOutToWhite
-	jp ClearScreen
-OakSpeechText1:
-	TX_FAR _OakSpeechText1
-	db "@"
-OakSpeechText2:
-	TX_FAR _OakSpeechText2A
-	TX_CRY_NIDORINA
-	TX_FAR _OakSpeechText2B
-	db "@"
-IntroducePlayerText:
-	TX_FAR _IntroducePlayerText
-	db "@"
-IntroduceRivalText:
-	TX_FAR _IntroduceRivalText
-	db "@"
-OakSpeechText3:
-	TX_FAR _OakSpeechText3
-	db "@"
-
-FadeInIntroPic:
-	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:
-	db %01010100
-	db %10101000
-	db %11111100
-	db %11111000
-	db %11110100
-	db %11100100
-
-MovePicLeft:
-	ld a, 119
-	ld [rWX], a
-	call DelayFrame
-
-	ld a, %11100100
-	ld [rBGP], a
-.next
-	call DelayFrame
-	ld a, [rWX]
-	sub 8
-	cp $FF
-	ret z
-	ld [rWX], a
-	jr .next
-
-DisplayPicCenteredOrUpperRight:
-	call GetPredefRegisters
-IntroDisplayPicCenteredOrUpperRight:
-; b = bank
-; de = address of compressed pic
-; c: 0 = centred, non-zero = upper-right
-	push bc
-	ld a, b
-	call UncompressSpriteFromDE
-	ld hl, sSpriteBuffer1
-	ld de, sSpriteBuffer0
-	ld bc, $310
-	call CopyData
-	ld de, vFrontPic
-	call InterlaceMergeSpriteBuffers
-	pop bc
-	ld a, c
-	and a
-	coord hl, 15, 1
-	jr nz, .next
-	coord hl, 6, 4
-.next
-	xor a
-	ld [hStartTileID], a
-	predef_jump CopyUncompressedPicToTilemap
--- /dev/null
+++ b/engine/movie/oak_speech/clear_save.asm
@@ -1,0 +1,23 @@
+DoClearSaveDialogue:
+	call ClearScreen
+	call RunDefaultPaletteCommand
+	call LoadFontTilePatterns
+	call LoadTextBoxTilePatterns
+	ld hl, ClearSaveDataText
+	call PrintText
+	coord hl, 14, 7
+	lb bc, 8, 15
+	ld a, NO_YES_MENU
+	ld [wTwoOptionMenuID], a
+	ld a, TWO_OPTION_MENU
+	ld [wTextBoxID], a
+	call DisplayTextBoxID
+	ld a, [wCurrentMenuItem]
+	and a
+	jp z, Init
+	callba ClearSAV
+	jp Init
+
+ClearSaveDataText:
+	TX_FAR _ClearSaveDataText
+	db "@"
--- /dev/null
+++ b/engine/movie/oak_speech/init_player_data.asm
@@ -1,0 +1,55 @@
+InitPlayerData:
+InitPlayerData2:
+
+	call Random
+	ld a, [hRandomSub]
+	ld [wPlayerID], a
+
+	call Random
+	ld a, [hRandomAdd]
+	ld [wPlayerID + 1], a
+
+	ld a, $ff
+	ld [wUnusedD71B], a
+
+	ld hl, wPartyCount
+	call InitializeEmptyList
+	ld hl, wNumInBox
+	call InitializeEmptyList
+	ld hl, wNumBagItems
+	call InitializeEmptyList
+	ld hl, wNumBoxItems
+	call InitializeEmptyList
+
+START_MONEY EQU $3000
+	ld hl, wPlayerMoney + 1
+	ld a, START_MONEY / $100
+	ld [hld], a
+	xor a
+	ld [hli], a
+	inc hl
+	ld [hl], a
+
+	ld [wMonDataLocation], a
+
+	ld hl, wObtainedBadges
+	ld [hli], a
+
+	ld [hl], a
+
+	ld hl, wPlayerCoins
+	ld [hli], a
+	ld [hl], a
+
+	ld hl, wGameProgressFlags
+	ld bc, wGameProgressFlagsEnd - wGameProgressFlags
+	call FillMemory ; clear all game progress flags
+
+	jp InitializeMissableObjectsFlags
+
+InitializeEmptyList:
+	xor a ; count
+	ld [hli], a
+	dec a ; terminator
+	ld [hl], a
+	ret
--- /dev/null
+++ b/engine/movie/oak_speech/oak_speech.asm
@@ -1,0 +1,233 @@
+SetDefaultNames:
+	ld a, [wLetterPrintingDelayFlags]
+	push af
+	ld a, [wOptions]
+	push af
+	ld a, [wd732]
+	push af
+	ld hl, wPlayerName
+	ld bc, wBoxDataEnd - wPlayerName
+	xor a
+	call FillMemory
+	ld hl, wSpriteStateData1
+	ld bc, $200
+	xor a
+	call FillMemory
+	pop af
+	ld [wd732], a
+	pop af
+	ld [wOptions], a
+	pop af
+	ld [wLetterPrintingDelayFlags], a
+	ld a, [wOptionsInitialized]
+	and a
+	call z, InitOptions
+	ld hl, NintenText
+	ld de, wPlayerName
+	ld bc, NAME_LENGTH
+	call CopyData
+	ld hl, SonyText
+	ld de, wRivalName
+	ld bc, NAME_LENGTH
+	jp CopyData
+
+OakSpeech:
+	ld a, $FF
+	call PlaySound ; stop music
+	ld a, BANK(Music_Routes2)
+	ld c, a
+	ld a, MUSIC_ROUTES2
+	call PlayMusic
+	call ClearScreen
+	call LoadTextBoxTilePatterns
+	call SetDefaultNames
+	predef InitPlayerData2
+	ld hl, wNumBoxItems
+	ld a, POTION
+	ld [wcf91], a
+	ld a, 1
+	ld [wItemQuantity], a
+	call AddItemToInventory  ; give one potion
+	ld a, [wDefaultMap]
+	ld [wDestinationMap], a
+	call SpecialWarpIn
+	xor a
+	ld [hTilesetType], a
+	ld a, [wd732]
+	bit 1, a ; possibly a debug mode bit
+	jp nz, .skipChoosingNames
+	ld de, ProfOakPic
+	lb bc, Bank(ProfOakPic), $00
+	call IntroDisplayPicCenteredOrUpperRight
+	call FadeInIntroPic
+	ld hl, OakSpeechText1
+	call PrintText
+	call GBFadeOutToWhite
+	call ClearScreen
+	ld a, NIDORINO
+	ld [wd0b5], a
+	ld [wcf91], a
+	call GetMonHeader
+	coord hl, 6, 4
+	call LoadFlippedFrontSpriteByMonIndex
+	call MovePicLeft
+	ld hl, OakSpeechText2
+	call PrintText
+	call GBFadeOutToWhite
+	call ClearScreen
+	ld de, RedPicFront
+	lb bc, Bank(RedPicFront), $00
+	call IntroDisplayPicCenteredOrUpperRight
+	call MovePicLeft
+	ld hl, IntroducePlayerText
+	call PrintText
+	call ChoosePlayerName
+	call GBFadeOutToWhite
+	call ClearScreen
+	ld de, Rival1Pic
+	lb bc, Bank(Rival1Pic), $00
+	call IntroDisplayPicCenteredOrUpperRight
+	call FadeInIntroPic
+	ld hl, IntroduceRivalText
+	call PrintText
+	call ChooseRivalName
+.skipChoosingNames
+	call GBFadeOutToWhite
+	call ClearScreen
+	ld de, RedPicFront
+	lb bc, Bank(RedPicFront), $00
+	call IntroDisplayPicCenteredOrUpperRight
+	call GBFadeInFromWhite
+	ld a, [wd72d]
+	and a
+	jr nz, .next
+	ld hl, OakSpeechText3
+	call PrintText
+.next
+	ld a, [H_LOADEDROMBANK]
+	push af
+	ld a, SFX_SHRINK
+	call PlaySound
+	pop af
+	ld [H_LOADEDROMBANK], a
+	ld [MBC1RomBank], a
+	ld c, 4
+	call DelayFrames
+	ld de, RedSprite
+	ld hl, vSprites
+	lb bc, BANK(RedSprite), $0C
+	call CopyVideoData
+	ld de, ShrinkPic1
+	lb bc, BANK(ShrinkPic1), $00
+	call IntroDisplayPicCenteredOrUpperRight
+	ld c, 4
+	call DelayFrames
+	ld de, ShrinkPic2
+	lb bc, BANK(ShrinkPic2), $00
+	call IntroDisplayPicCenteredOrUpperRight
+	call ResetPlayerSpriteData
+	ld a, [H_LOADEDROMBANK]
+	push af
+	ld a, BANK(Music_PalletTown)
+	ld [wAudioROMBank], a
+	ld [wAudioSavedROMBank], a
+	ld a, 10
+	ld [wAudioFadeOutControl], a
+	ld a, $FF
+	ld [wNewSoundID], a
+	call PlaySound ; stop music
+	pop af
+	ld [H_LOADEDROMBANK], a
+	ld [MBC1RomBank], a
+	ld c, 20
+	call DelayFrames
+	coord hl, 6, 5
+	ld b, 7
+	ld c, 7
+	call ClearScreenArea
+	call LoadTextBoxTilePatterns
+	ld a, 1
+	ld [wUpdateSpritesEnabled], a
+	ld c, 50
+	call DelayFrames
+	call GBFadeOutToWhite
+	jp ClearScreen
+OakSpeechText1:
+	TX_FAR _OakSpeechText1
+	db "@"
+OakSpeechText2:
+	TX_FAR _OakSpeechText2A
+	TX_CRY_NIDORINA
+	TX_FAR _OakSpeechText2B
+	db "@"
+IntroducePlayerText:
+	TX_FAR _IntroducePlayerText
+	db "@"
+IntroduceRivalText:
+	TX_FAR _IntroduceRivalText
+	db "@"
+OakSpeechText3:
+	TX_FAR _OakSpeechText3
+	db "@"
+
+FadeInIntroPic:
+	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:
+	db %01010100
+	db %10101000
+	db %11111100
+	db %11111000
+	db %11110100
+	db %11100100
+
+MovePicLeft:
+	ld a, 119
+	ld [rWX], a
+	call DelayFrame
+
+	ld a, %11100100
+	ld [rBGP], a
+.next
+	call DelayFrame
+	ld a, [rWX]
+	sub 8
+	cp $FF
+	ret z
+	ld [rWX], a
+	jr .next
+
+DisplayPicCenteredOrUpperRight:
+	call GetPredefRegisters
+IntroDisplayPicCenteredOrUpperRight:
+; b = bank
+; de = address of compressed pic
+; c: 0 = centred, non-zero = upper-right
+	push bc
+	ld a, b
+	call UncompressSpriteFromDE
+	ld hl, sSpriteBuffer1
+	ld de, sSpriteBuffer0
+	ld bc, $310
+	call CopyData
+	ld de, vFrontPic
+	call InterlaceMergeSpriteBuffers
+	pop bc
+	ld a, c
+	and a
+	coord hl, 15, 1
+	jr nz, .next
+	coord hl, 6, 4
+.next
+	xor a
+	ld [hStartTileID], a
+	predef_jump CopyUncompressedPicToTilemap
--- /dev/null
+++ b/engine/movie/oak_speech/oak_speech2.asm
@@ -1,0 +1,219 @@
+ChoosePlayerName:
+	call OakSpeechSlidePicRight
+	ld de, DefaultNamesPlayer
+	call DisplayIntroNameTextBox
+	ld a, [wCurrentMenuItem]
+	and a
+	jr z, .customName
+	ld hl, DefaultNamesPlayerList
+	call GetDefaultName
+	ld de, wPlayerName
+	call OakSpeechSlidePicLeft
+	jr .done
+.customName
+	ld hl, wPlayerName
+	xor a ; NAME_PLAYER_SCREEN
+	ld [wNamingScreenType], a
+	call DisplayNamingScreen
+	ld a, [wcf4b]
+	cp "@"
+	jr z, .customName
+	call ClearScreen
+	call Delay3
+	ld de, RedPicFront
+	ld b, BANK(RedPicFront)
+	call IntroDisplayPicCenteredOrUpperRight
+.done
+	ld hl, YourNameIsText
+	jp PrintText
+
+YourNameIsText:
+	TX_FAR _YourNameIsText
+	db "@"
+
+ChooseRivalName:
+	call OakSpeechSlidePicRight
+	ld de, DefaultNamesRival
+	call DisplayIntroNameTextBox
+	ld a, [wCurrentMenuItem]
+	and a
+	jr z, .customName
+	ld hl, DefaultNamesRivalList
+	call GetDefaultName
+	ld de, wRivalName
+	call OakSpeechSlidePicLeft
+	jr .done
+.customName
+	ld hl, wRivalName
+	ld a, NAME_RIVAL_SCREEN
+	ld [wNamingScreenType], a
+	call DisplayNamingScreen
+	ld a, [wcf4b]
+	cp "@"
+	jr z, .customName
+	call ClearScreen
+	call Delay3
+	ld de, Rival1Pic
+	ld b, $13
+	call IntroDisplayPicCenteredOrUpperRight
+.done
+	ld hl, HisNameIsText
+	jp PrintText
+
+HisNameIsText:
+	TX_FAR _HisNameIsText
+	db "@"
+
+OakSpeechSlidePicLeft:
+	push de
+	coord hl, 0, 0
+	lb bc, 12, 11
+	call ClearScreenArea ; clear the name list text box
+	ld c, 10
+	call DelayFrames
+	pop de
+	ld hl, wcd6d
+	ld bc, NAME_LENGTH
+	call CopyData
+	call Delay3
+	coord hl, 12, 4
+	lb de, 6, 6 * SCREEN_WIDTH + 5
+	ld a, $ff
+	jr OakSpeechSlidePicCommon
+
+OakSpeechSlidePicRight:
+	coord hl, 5, 4
+	lb de, 6, 6 * SCREEN_WIDTH + 5
+	xor a
+
+OakSpeechSlidePicCommon:
+	push hl
+	push de
+	push bc
+	ld [hSlideDirection], a
+	ld a, d
+	ld [hSlideAmount], a
+	ld a, e
+	ld [hSlidingRegionSize], a
+	ld c, a
+	ld a, [hSlideDirection]
+	and a
+	jr nz, .next
+; If sliding right, point hl to the end of the pic's tiles.
+	ld d, 0
+	add hl, de
+.next
+	ld d, h
+	ld e, l
+.loop
+	xor a
+	ld [H_AUTOBGTRANSFERENABLED], a
+	ld a, [hSlideDirection]
+	and a
+	jr nz, .slideLeft
+; sliding right
+	ld a, [hli]
+	ld [hld], a
+	dec hl
+	jr .next2
+.slideLeft
+	ld a, [hld]
+	ld [hli], a
+	inc hl
+.next2
+	dec c
+	jr nz, .loop
+	ld a, [hSlideDirection]
+	and a
+	jr z, .next3
+; If sliding left, we need to zero the last tile in the pic (there is no need
+; to take a corresponding action when sliding right because hl initially points
+; to a 0 tile in that case).
+	xor a
+	dec hl
+	ld [hl], a
+.next3
+	ld a, 1
+	ld [H_AUTOBGTRANSFERENABLED], a
+	call Delay3
+	ld a, [hSlidingRegionSize]
+	ld c, a
+	ld h, d
+	ld l, e
+	ld a, [hSlideDirection]
+	and a
+	jr nz, .slideLeft2
+	inc hl
+	jr .next4
+.slideLeft2
+	dec hl
+.next4
+	ld d, h
+	ld e, l
+	ld a, [hSlideAmount]
+	dec a
+	ld [hSlideAmount], a
+	jr nz, .loop
+	pop bc
+	pop de
+	pop hl
+	ret
+
+DisplayIntroNameTextBox:
+	push de
+	coord hl, 0, 0
+	ld b, $a
+	ld c, $9
+	call TextBoxBorder
+	coord hl, 3, 0
+	ld de, .namestring
+	call PlaceString
+	pop de
+	coord hl, 2, 2
+	call PlaceString
+	call UpdateSprites
+	xor a
+	ld [wCurrentMenuItem], a
+	ld [wLastMenuItem], a
+	inc a
+	ld [wTopMenuItemX], a
+	ld [wMenuWatchedKeys], a ; A_BUTTON
+	inc a
+	ld [wTopMenuItemY], a
+	inc a
+	ld [wMaxMenuItem], a
+	jp HandleMenuInput
+
+.namestring
+	db "NAME@"
+
+INCLUDE "text/player_names.asm"
+
+GetDefaultName:
+; a = name index
+; hl = name list
+	ld b, a
+	ld c, 0
+.loop
+	ld d, h
+	ld e, l
+.innerLoop
+	ld a, [hli]
+	cp "@"
+	jr nz, .innerLoop
+	ld a, b
+	cp c
+	jr z, .foundName
+	inc c
+	jr .loop
+.foundName
+	ld h, d
+	ld l, e
+	ld de, wcd6d
+	ld bc, $14
+	jp CopyData
+
+INCLUDE "text/player_names_list.asm"
+
+TextTerminator_6b20:
+	db "@"
--- a/engine/movie/oak_speech2.asm
+++ /dev/null
@@ -1,219 +1,0 @@
-ChoosePlayerName:
-	call OakSpeechSlidePicRight
-	ld de, DefaultNamesPlayer
-	call DisplayIntroNameTextBox
-	ld a, [wCurrentMenuItem]
-	and a
-	jr z, .customName
-	ld hl, DefaultNamesPlayerList
-	call GetDefaultName
-	ld de, wPlayerName
-	call OakSpeechSlidePicLeft
-	jr .done
-.customName
-	ld hl, wPlayerName
-	xor a ; NAME_PLAYER_SCREEN
-	ld [wNamingScreenType], a
-	call DisplayNamingScreen
-	ld a, [wcf4b]
-	cp "@"
-	jr z, .customName
-	call ClearScreen
-	call Delay3
-	ld de, RedPicFront
-	ld b, BANK(RedPicFront)
-	call IntroDisplayPicCenteredOrUpperRight
-.done
-	ld hl, YourNameIsText
-	jp PrintText
-
-YourNameIsText:
-	TX_FAR _YourNameIsText
-	db "@"
-
-ChooseRivalName:
-	call OakSpeechSlidePicRight
-	ld de, DefaultNamesRival
-	call DisplayIntroNameTextBox
-	ld a, [wCurrentMenuItem]
-	and a
-	jr z, .customName
-	ld hl, DefaultNamesRivalList
-	call GetDefaultName
-	ld de, wRivalName
-	call OakSpeechSlidePicLeft
-	jr .done
-.customName
-	ld hl, wRivalName
-	ld a, NAME_RIVAL_SCREEN
-	ld [wNamingScreenType], a
-	call DisplayNamingScreen
-	ld a, [wcf4b]
-	cp "@"
-	jr z, .customName
-	call ClearScreen
-	call Delay3
-	ld de, Rival1Pic
-	ld b, $13
-	call IntroDisplayPicCenteredOrUpperRight
-.done
-	ld hl, HisNameIsText
-	jp PrintText
-
-HisNameIsText:
-	TX_FAR _HisNameIsText
-	db "@"
-
-OakSpeechSlidePicLeft:
-	push de
-	coord hl, 0, 0
-	lb bc, 12, 11
-	call ClearScreenArea ; clear the name list text box
-	ld c, 10
-	call DelayFrames
-	pop de
-	ld hl, wcd6d
-	ld bc, NAME_LENGTH
-	call CopyData
-	call Delay3
-	coord hl, 12, 4
-	lb de, 6, 6 * SCREEN_WIDTH + 5
-	ld a, $ff
-	jr OakSpeechSlidePicCommon
-
-OakSpeechSlidePicRight:
-	coord hl, 5, 4
-	lb de, 6, 6 * SCREEN_WIDTH + 5
-	xor a
-
-OakSpeechSlidePicCommon:
-	push hl
-	push de
-	push bc
-	ld [hSlideDirection], a
-	ld a, d
-	ld [hSlideAmount], a
-	ld a, e
-	ld [hSlidingRegionSize], a
-	ld c, a
-	ld a, [hSlideDirection]
-	and a
-	jr nz, .next
-; If sliding right, point hl to the end of the pic's tiles.
-	ld d, 0
-	add hl, de
-.next
-	ld d, h
-	ld e, l
-.loop
-	xor a
-	ld [H_AUTOBGTRANSFERENABLED], a
-	ld a, [hSlideDirection]
-	and a
-	jr nz, .slideLeft
-; sliding right
-	ld a, [hli]
-	ld [hld], a
-	dec hl
-	jr .next2
-.slideLeft
-	ld a, [hld]
-	ld [hli], a
-	inc hl
-.next2
-	dec c
-	jr nz, .loop
-	ld a, [hSlideDirection]
-	and a
-	jr z, .next3
-; If sliding left, we need to zero the last tile in the pic (there is no need
-; to take a corresponding action when sliding right because hl initially points
-; to a 0 tile in that case).
-	xor a
-	dec hl
-	ld [hl], a
-.next3
-	ld a, 1
-	ld [H_AUTOBGTRANSFERENABLED], a
-	call Delay3
-	ld a, [hSlidingRegionSize]
-	ld c, a
-	ld h, d
-	ld l, e
-	ld a, [hSlideDirection]
-	and a
-	jr nz, .slideLeft2
-	inc hl
-	jr .next4
-.slideLeft2
-	dec hl
-.next4
-	ld d, h
-	ld e, l
-	ld a, [hSlideAmount]
-	dec a
-	ld [hSlideAmount], a
-	jr nz, .loop
-	pop bc
-	pop de
-	pop hl
-	ret
-
-DisplayIntroNameTextBox:
-	push de
-	coord hl, 0, 0
-	ld b, $a
-	ld c, $9
-	call TextBoxBorder
-	coord hl, 3, 0
-	ld de, .namestring
-	call PlaceString
-	pop de
-	coord hl, 2, 2
-	call PlaceString
-	call UpdateSprites
-	xor a
-	ld [wCurrentMenuItem], a
-	ld [wLastMenuItem], a
-	inc a
-	ld [wTopMenuItemX], a
-	ld [wMenuWatchedKeys], a ; A_BUTTON
-	inc a
-	ld [wTopMenuItemY], a
-	inc a
-	ld [wMaxMenuItem], a
-	jp HandleMenuInput
-
-.namestring
-	db "NAME@"
-
-INCLUDE "text/player_names.asm"
-
-GetDefaultName:
-; a = name index
-; hl = name list
-	ld b, a
-	ld c, 0
-.loop
-	ld d, h
-	ld e, l
-.innerLoop
-	ld a, [hli]
-	cp "@"
-	jr nz, .innerLoop
-	ld a, b
-	cp c
-	jr z, .foundName
-	inc c
-	jr .loop
-.foundName
-	ld h, d
-	ld l, e
-	ld de, wcd6d
-	ld bc, $14
-	jp CopyData
-
-INCLUDE "text/player_names_list.asm"
-
-TextTerminator_6b20:
-	db "@"
--- a/main.asm
+++ b/main.asm
@@ -25,11 +25,11 @@
 INCLUDE "engine/overworld/movement.asm"
 INCLUDE "engine/link/cable_club.asm"
 INCLUDE "engine/menus/main_menu.asm"
-INCLUDE "engine/movie/oak_speech.asm"
+INCLUDE "engine/movie/oak_speech/oak_speech.asm"
 INCLUDE "engine/overworld/special_warps.asm"
 INCLUDE "engine/debug/debug_party.asm"
 INCLUDE "engine/menus/naming_screen.asm"
-INCLUDE "engine/movie/oak_speech2.asm"
+INCLUDE "engine/movie/oak_speech/oak_speech2.asm"
 INCLUDE "engine/items/subtract_paid_money.asm"
 INCLUDE "engine/menus/swap_items.asm"
 INCLUDE "engine/events/pokemart.asm"
@@ -70,7 +70,7 @@
 INCLUDE "engine/flag_action.asm"
 INCLUDE "engine/events/heal_party.asm"
 INCLUDE "engine/math/bcd.asm"
-INCLUDE "engine/movie/init_player_data.asm"
+INCLUDE "engine/movie/oak_speech/init_player_data.asm"
 INCLUDE "engine/items/get_bag_item_quantity.asm"
 INCLUDE "engine/overworld/pathfinding.asm"
 INCLUDE "engine/gfx/hp_bar.asm"
@@ -150,7 +150,7 @@
 SECTION "bank7_1", ROMX
 
 INCLUDE "text/monster_names.asm"
-INCLUDE "engine/movie/clear_save.asm"
+INCLUDE "engine/movie/oak_speech/clear_save.asm"
 INCLUDE "engine/events/elevator.asm"