summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2019-04-11 08:46:30 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2019-04-11 08:46:30 -0400
commit6eb7cc6cfae14b93feee880b23e903c336c58dcd (patch)
tree280b4749a29258f1590158aa5eea913fe4049f6c
parent35892e6b5381190269a61f3a87743086a6a44c12 (diff)
through CreateNidoranFSprite
-rw-r--r--asm/oak_speech.s370
-rw-r--r--include/decompress.h2
-rw-r--r--include/pokemon.h1
-rw-r--r--include/pokemon_3.h1
-rw-r--r--src/oak_speech.c116
5 files changed, 115 insertions, 375 deletions
diff --git a/asm/oak_speech.s b/asm/oak_speech.s
index 66eafc9d1..d3d7ffc4a 100644
--- a/asm/oak_speech.s
+++ b/asm/oak_speech.s
@@ -5,376 +5,6 @@
.text
- thumb_func_start sub_8130C64
-sub_8130C64: @ 8130C64
- push {r4,r5,lr}
- sub sp, 0x10
- ldr r0, _08130C84 @ =gMain
- movs r1, 0x87
- lsls r1, 3
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x7
- bls _08130C78
- b _08130F10
-_08130C78:
- lsls r0, 2
- ldr r1, _08130C88 @ =_08130C8C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08130C84: .4byte gMain
-_08130C88: .4byte _08130C8C
- .align 2, 0
-_08130C8C:
- .4byte _08130CAC
- .4byte _08130D18
- .4byte _08130D78
- .4byte _08130DB2
- .4byte _08130DD0
- .4byte _08130DE8
- .4byte _08130E38
- .4byte _08130EB8
-_08130CAC:
- movs r0, 0
- bl SetVBlankCallback
- add r1, sp, 0x8
- movs r0, 0
- strh r0, [r1]
- ldr r1, _08130D04 @ =0x040000d4
- add r0, sp, 0x8
- str r0, [r1]
- movs r0, 0xC0
- lsls r0, 19
- str r0, [r1, 0x4]
- ldr r0, _08130D08 @ =0x8100c000
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- movs r2, 0
- str r2, [sp, 0xC]
- add r0, sp, 0xC
- str r0, [r1]
- movs r0, 0xE0
- lsls r0, 19
- str r0, [r1, 0x4]
- ldr r0, _08130D0C @ =0x85000100
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- add r0, sp, 0x8
- strh r2, [r0]
- str r0, [r1]
- ldr r0, _08130D10 @ =0x05000002
- str r0, [r1, 0x4]
- ldr r0, _08130D14 @ =0x810001ff
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- bl ResetPaletteFade
- bl ScanlineEffect_Stop
- bl ResetSpriteData
- bl FreeAllSpritePalettes
- bl reset_temp_tile_data_buffers
- b _08130F10
- .align 2, 0
-_08130D04: .4byte 0x040000d4
-_08130D08: .4byte 0x8100c000
-_08130D0C: .4byte 0x85000100
-_08130D10: .4byte 0x05000002
-_08130D14: .4byte 0x810001ff
-_08130D18:
- movs r0, 0
- bl ResetBgsAndClearDma3BusyFlags
- ldr r1, _08130D70 @ =gUnknown_8462E58
- movs r0, 0x1
- movs r2, 0x3
- bl InitBgsFromTemplates
- ldr r4, _08130D74 @ =sOakSpeechResources
- ldr r1, [r4]
- movs r0, 0xE1
- lsls r0, 5
- adds r1, r0
- movs r0, 0x1
- bl SetBgTilemapBuffer
- ldr r1, [r4]
- movs r0, 0xC1
- lsls r0, 5
- adds r1, r0
- movs r0, 0x2
- bl SetBgTilemapBuffer
- movs r0, 0x1
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0x1
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- movs r0, 0x2
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0x2
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- b _08130F10
- .align 2, 0
-_08130D70: .4byte gUnknown_8462E58
-_08130D74: .4byte sOakSpeechResources
-_08130D78:
- movs r0, 0x40
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x44
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x48
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x4A
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x52
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0
- bl SetGpuReg
- b _08130F10
-_08130DB2:
- bl FreeAllWindowBuffers
- bl sub_80F6C6C
- bl sub_80F6C98
- ldr r0, _08130DCC @ =gUnknown_8460568
- movs r1, 0
- movs r2, 0xE0
- bl LoadPalette
- b _08130F10
- .align 2, 0
-_08130DCC: .4byte gUnknown_8460568
-_08130DD0:
- ldr r1, _08130DE4 @ =gUnknown_8460CA4
- movs r0, 0
- str r0, [sp]
- movs r0, 0x1
- movs r2, 0
- movs r3, 0
- bl decompress_and_copy_tile_data_to_vram
- b _08130F10
- .align 2, 0
-_08130DE4: .4byte gUnknown_8460CA4
-_08130DE8:
- bl free_temp_tile_data_buffers_if_possible
- lsls r0, 24
- cmp r0, 0
- beq _08130DF4
- b _08130F1E
-_08130DF4:
- movs r5, 0x1E
- str r5, [sp]
- movs r4, 0x14
- str r4, [sp, 0x4]
- movs r0, 0x1
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl FillBgTilemapBufferRect_Palette0
- ldr r1, _08130E34 @ =gUnknown_8460CE8
- movs r0, 0x1
- movs r2, 0
- movs r3, 0
- bl CopyToBgTilemapBuffer
- str r5, [sp]
- str r4, [sp, 0x4]
- movs r0, 0x2
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl FillBgTilemapBufferRect_Palette0
- movs r0, 0x1
- bl CopyBgTilemapBufferToVram
- movs r0, 0x2
- bl CopyBgTilemapBufferToVram
- b _08130F10
- .align 2, 0
-_08130E34: .4byte gUnknown_8460CE8
-_08130E38:
- ldr r0, _08130E5C @ =sub_8130464
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, _08130E60 @ =sOakSpeechResources
- ldr r0, [r0]
- ldrh r0, [r0, 0x10]
- cmp r0, 0
- bne _08130E72
- ldr r0, _08130E64 @ =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- cmp r0, 0
- bne _08130E68
- movs r0, 0
- b _08130E6A
- .align 2, 0
-_08130E5C: .4byte sub_8130464
-_08130E60: .4byte sOakSpeechResources
-_08130E64: .4byte gSaveBlock2Ptr
-_08130E68:
- movs r0, 0x1
-_08130E6A:
- movs r1, 0
- bl sub_81311F4
- b _08130E7A
-_08130E72:
- movs r0, 0x2
- movs r1, 0
- bl sub_81311F4
-_08130E7A:
- ldr r0, _08130EA8 @ =gTasks
- lsls r4, r5, 2
- adds r4, r5
- lsls r4, 3
- adds r4, r0
- ldr r0, _08130EAC @ =0x0000ffc4
- strh r0, [r4, 0xA]
- ldr r1, _08130EB0 @ =gSpriteCoordOffsetX
- ldrh r0, [r1]
- adds r0, 0x3C
- strh r0, [r1]
- ldr r1, _08130EB4 @ =0xffffc400
- movs r0, 0x2
- movs r2, 0
- bl ChangeBgX
- adds r0, r5, 0
- movs r1, 0x1
- bl sub_8130FD4
- movs r0, 0x1
- strh r0, [r4, 0x26]
- b _08130F10
- .align 2, 0
-_08130EA8: .4byte gTasks
-_08130EAC: .4byte 0x0000ffc4
-_08130EB0: .4byte gSpriteCoordOffsetX
-_08130EB4: .4byte 0xffffc400
-_08130EB8:
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- movs r1, 0x82
- lsls r1, 5
- movs r0, 0
- bl SetGpuReg
- movs r0, 0
- bl ShowBg
- movs r0, 0x1
- bl ShowBg
- movs r0, 0x2
- bl ShowBg
- movs r0, 0x1
- bl EnableInterrupts
- ldr r0, _08130F04 @ =sub_812EAFC
- bl SetVBlankCallback
- ldr r2, _08130F08 @ =gTextFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- ldr r0, _08130F0C @ =sub_812EB10
- bl SetMainCallback2
- b _08130F1E
- .align 2, 0
-_08130F04: .4byte sub_812EAFC
-_08130F08: .4byte gTextFlags
-_08130F0C: .4byte sub_812EB10
-_08130F10:
- ldr r1, _08130F28 @ =gMain
- movs r0, 0x87
- lsls r0, 3
- adds r1, r0
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
-_08130F1E:
- add sp, 0x10
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08130F28: .4byte gMain
- thumb_func_end sub_8130C64
-
- thumb_func_start sub_8130F2C
-sub_8130F2C: @ 8130F2C
- push {r4,r5,lr}
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- ldr r4, _08130FA0 @ =gUnknown_8235194
- movs r0, 0
- bl sub_8044E00
- adds r1, r0, 0
- adds r0, r4, 0
- movs r2, 0x1D
- bl DecompressPicFromTable
- ldr r0, _08130FA4 @ =gUnknown_82373F4
- bl sub_800F078
- movs r0, 0x1D
- movs r1, 0
- bl sub_803F7D4
- ldr r0, _08130FA8 @ =gMultiuseSpriteTemplate
- movs r1, 0x60
- movs r2, 0x60
- movs r3, 0x1
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- ldr r4, _08130FAC @ =gSprites
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r1, r4, 0
- adds r1, 0x1C
- adds r1, r2, r1
- ldr r3, _08130FB0 @ =SpriteCallbackDummy
- str r3, [r1]
- adds r2, r4
- ldrb r3, [r2, 0x5]
- movs r1, 0xD
- negs r1, r1
- ands r1, r3
- movs r3, 0x4
- orrs r1, r3
- strb r1, [r2, 0x5]
- adds r2, 0x3E
- ldrb r1, [r2]
- orrs r1, r3
- strb r1, [r2]
- ldr r2, _08130FB4 @ =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r2
- strh r0, [r1, 0x10]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08130FA0: .4byte gUnknown_8235194
-_08130FA4: .4byte gUnknown_82373F4
-_08130FA8: .4byte gMultiuseSpriteTemplate
-_08130FAC: .4byte gSprites
-_08130FB0: .4byte SpriteCallbackDummy
-_08130FB4: .4byte gTasks
- thumb_func_end sub_8130F2C
-
thumb_func_start sub_8130FB8
sub_8130FB8: @ 8130FB8
ldr r3, _08130FD0 @ =gSprites
diff --git a/include/decompress.h b/include/decompress.h
index 36672dcfd..c2c4f0e1c 100644
--- a/include/decompress.h
+++ b/include/decompress.h
@@ -18,6 +18,8 @@ void LoadCompressedObjectPalette(const struct CompressedSpritePalette *src);
void LoadCompressedObjectPaletteOverrideBuffer(const struct CompressedSpritePalette *a, void *buffer);
bool8 LoadCompressedObjectPaletteUsingHeap(const struct CompressedSpritePalette *src);
+bool8 sub_800F078(const struct CompressedSpritePalette *src);
+
void DecompressPicFromTable(const struct CompressedSpriteSheet *src, void* buffer, s32 species);
void DecompressPicFromTable_2(const struct CompressedSpriteSheet *src, void* buffer, s32 species);
void DecompressPicFromTable_DontHandleDeoxys(const struct CompressedSpriteSheet *src, void* buffer, s32 species);
diff --git a/include/pokemon.h b/include/pokemon.h
index f1f04c9eb..c08f37b5f 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -673,5 +673,6 @@ void BattleAnimateBackSprite(struct Sprite* sprite, u16 species);
void PlayMapChosenOrBattleBGM(u16 songId);
u8 GetMonsStateToDoubles(void);
void sub_803E0A4(struct Pokemon *mon, struct BattleTowerPokemon *src);
+void sub_803F7D4(u16 trainerSpriteId, u8 battlerPosition);
#endif // GUARD_POKEMON_H
diff --git a/include/pokemon_3.h b/include/pokemon_3.h
index d18be1403..f6226f40d 100644
--- a/include/pokemon_3.h
+++ b/include/pokemon_3.h
@@ -7,5 +7,6 @@ const u8* GetTrainerClassNameFromId(u16 trainerId);
const u8* GetTrainerNameFromId(u16 trainerId);
void sub_8044AF0(u8, u8);
void sub_8044D80(void);
+void * sub_8044E00(u8 buffId);
#endif // GUARD_POKEMON_3_H
diff --git a/src/oak_speech.c b/src/oak_speech.c
index 93bc74eec..8cdfd2bb5 100644
--- a/src/oak_speech.c
+++ b/src/oak_speech.c
@@ -1,5 +1,6 @@
#include "global.h"
#include "main.h"
+#include "decompress.h"
#include "task.h"
#include "malloc.h"
#include "gpu_regs.h"
@@ -90,8 +91,9 @@ void sub_8130B10(u8 taskId);
void sub_8130BA8(u8 taskId);
void sub_8130BF0(u8 taskId);
void sub_8130C20(u8 taskId);
-void sub_8130C64(void);
-void sub_8130F2C(u8 taskId);
+
+static void CB2_ReturnFromNamingScreen(void);
+static void CreateNidoranFSprite(u8 taskId);
void sub_8130FD4(u8 taskId, u8 state);
void sub_8131168(u8 taskId, u8 state);
void sub_81311F4(u8 arg0, u8 state);
@@ -107,6 +109,9 @@ extern const u8 gUnknown_8415D50[];
extern const u8 gUnknown_8415D93[];
extern const u8 gUnknown_8415D97[];
+extern const struct CompressedSpriteSheet gUnknown_8235194[];
+extern const struct CompressedSpritePalette gUnknown_82373F4;
+
const u8 gUnknown_845FD54[][5] = {
[SPECIES_BULBASAUR - 1] = {0x16, 0x1b, 0x30, 0x16, 0x29},
[SPECIES_IVYSAUR - 1] = {0x14, 0x1b, 0x30, 0x15, 0x2a},
@@ -1040,7 +1045,7 @@ void sub_812F7C0(u8 taskId)
LoadBgTiles(1, sOakSpeechResources->unk_0000, size, 0);
CopyToBgTilemapBuffer(1, gUnknown_8460CE8, 0, 0);
CopyBgTilemapBufferToVram(1);
- sub_8130F2C(taskId);
+ CreateNidoranFSprite(taskId);
sub_81311F4(3, 0);
sub_8130FD4(taskId, 1);
PlayBGM(292);
@@ -1374,13 +1379,13 @@ void sub_81303B4(u8 taskId)
sub_8131754(sOakSpeechResources->unk_0010, 0);
if (sOakSpeechResources->unk_0010 == 0)
{
- DoNamingScreen(0, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, sub_8130C64);
+ DoNamingScreen(0, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, CB2_ReturnFromNamingScreen);
}
else
{
sub_810F4D8(gTasks[taskId].data[13], 1);
RemoveWindow(gTasks[taskId].data[13]);
- DoNamingScreen(4, gSaveBlock1Ptr->rivalName, 0, 0, 0, sub_8130C64);
+ DoNamingScreen(4, gSaveBlock1Ptr->rivalName, 0, 0, 0, CB2_ReturnFromNamingScreen);
}
sub_8131168(taskId, 1);
FreeAllWindowBuffers();
@@ -1687,3 +1692,104 @@ void sub_8130C20(u8 taskId)
SetMainCallback2(CB2_NewGame);
DestroyTask(taskId);
}
+
+static void CB2_ReturnFromNamingScreen(void)
+{
+ u8 taskId;
+
+ switch (gMain.state)
+ {
+ case 0:
+ SetVBlankCallback(NULL);
+ DmaFill16(3, 0, VRAM, VRAM_SIZE);
+ DmaFill32(3, 0, OAM, OAM_SIZE);
+ DmaFill16(3, RGB_BLACK, PLTT + sizeof(u16), PLTT_SIZE - sizeof(u16));
+ ResetPaletteFade();
+ ScanlineEffect_Stop();
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ reset_temp_tile_data_buffers();
+ break;
+ case 1:
+ ResetBgsAndClearDma3BusyFlags(0);
+ InitBgsFromTemplates(1, gUnknown_8462E58, NELEMS(gUnknown_8462E58));
+ SetBgTilemapBuffer(1, sOakSpeechResources->bg1TilemapBuffer);
+ SetBgTilemapBuffer(2, sOakSpeechResources->bg2TilemapBuffer);
+ ChangeBgX(1, 0, 0);
+ ChangeBgY(1, 0, 0);
+ ChangeBgX(2, 0, 0);
+ ChangeBgY(2, 0, 0);
+ break;
+ case 2:
+ SetGpuReg(REG_OFFSET_WIN0H, 0);
+ SetGpuReg(REG_OFFSET_WIN0V, 0);
+ SetGpuReg(REG_OFFSET_WININ, 0);
+ SetGpuReg(REG_OFFSET_WINOUT, 0);
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+ break;
+ case 3:
+ FreeAllWindowBuffers();
+ sub_80F6C6C();
+ sub_80F6C98();
+ LoadPalette(gUnknown_8460568, 0, 0xe0);
+ break;
+ case 4:
+ decompress_and_copy_tile_data_to_vram(1, gUnknown_8460CA4, 0, 0, 0);
+ break;
+ case 5:
+ if (free_temp_tile_data_buffers_if_possible())
+ return;
+ FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 0, 30, 20);
+ CopyToBgTilemapBuffer(1, gUnknown_8460CE8, 0, 0);
+ FillBgTilemapBufferRect_Palette0(2, 0x000, 0, 0, 30, 20);
+ CopyBgTilemapBufferToVram(1);
+ CopyBgTilemapBufferToVram(2);
+ break;
+ case 6:
+ taskId = CreateTask(sub_8130464, 0);
+ if (sOakSpeechResources->unk_0010 == 0)
+ {
+ if (gSaveBlock2Ptr->playerGender == MALE)
+ sub_81311F4(MALE, 0);
+ else
+ sub_81311F4(FEMALE, 0);
+ }
+ else
+ sub_81311F4(2, 0);
+ gTasks[taskId].data[1] = -60;
+ gSpriteCoordOffsetX += 60;
+ ChangeBgX(2, -0x3C00, 0);
+ sub_8130FD4(taskId, 1);
+ gTasks[taskId].data[15] = 1;
+ break;
+ case 7:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON);
+ ShowBg(0);
+ ShowBg(1);
+ ShowBg(2);
+ EnableInterrupts(INTR_FLAG_VBLANK);
+ SetVBlankCallback(sub_812EAFC);
+ gTextFlags.flag_0 = TRUE;
+ SetMainCallback2(sub_812EB10);
+ return;
+ }
+
+ gMain.state++;
+}
+
+static void CreateNidoranFSprite(u8 taskId)
+{
+ u8 spriteId;
+
+ DecompressPicFromTable(gUnknown_8235194, sub_8044E00(0), SPECIES_NIDORAN_F);
+ sub_800F078(&gUnknown_82373F4);
+ sub_803F7D4(SPECIES_NIDORAN_F, 0);
+ spriteId = CreateSprite(&gMultiuseSpriteTemplate, 0x60, 0x60, 1);
+ gSprites[spriteId].callback = SpriteCallbackDummy;
+ gSprites[spriteId].oam.priority = 1;
+ gSprites[spriteId].invisible = TRUE;
+ gTasks[taskId].data[4] = spriteId;
+}