diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2019-04-11 08:46:30 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2019-04-11 08:46:30 -0400 |
commit | 6eb7cc6cfae14b93feee880b23e903c336c58dcd (patch) | |
tree | 280b4749a29258f1590158aa5eea913fe4049f6c | |
parent | 35892e6b5381190269a61f3a87743086a6a44c12 (diff) |
through CreateNidoranFSprite
-rw-r--r-- | asm/oak_speech.s | 370 | ||||
-rw-r--r-- | include/decompress.h | 2 | ||||
-rw-r--r-- | include/pokemon.h | 1 | ||||
-rw-r--r-- | include/pokemon_3.h | 1 | ||||
-rw-r--r-- | src/oak_speech.c | 116 |
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; +} |