From 55406f92fd5cc6e97866dfb9982f15d41e8b83be Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Sat, 1 Jun 2019 16:07:06 +0800 Subject: teachy_tv and minor update to match DizzyEgg's struct def --- src/fame_checker.c | 16 ++-- src/mystery_gift_menu.c | 2 +- src/teachy_tv.c | 217 ++++++++++++++++++++++++++++++++++++++++++++++++ src/tm_case.c | 12 +-- 4 files changed, 232 insertions(+), 15 deletions(-) create mode 100644 src/teachy_tv.c (limited to 'src') diff --git a/src/fame_checker.c b/src/fame_checker.c index 795863aca..4b9feb45b 100644 --- a/src/fame_checker.c +++ b/src/fame_checker.c @@ -1341,14 +1341,14 @@ static void FC_DoMoveCursor(s32 itemIndex, bool8 onInit) u16 who; get_coro_args_x18_x1A(sFameCheckerData->listMenuTaskId, &listY, &cursorY); who = listY + cursorY; - AddTextPrinterParametrized2(FCWINDOWID_LIST, 2, 8, 14 * cursorY + 4, 0, 0, &sTextColor_Green, 0, sListMenuItems[itemIndex].unk_00); + AddTextPrinterParametrized2(FCWINDOWID_LIST, 2, 8, 14 * cursorY + 4, 0, 0, &sTextColor_Green, 0, sListMenuItems[itemIndex].name); if (!onInit) { if (listY < sFameCheckerData->listMenuTopIdx2) sFameCheckerData->listMenuDrawnSelIdx++; else if (listY > sFameCheckerData->listMenuTopIdx2 && who != sFameCheckerData->numUnlockedPersons - 1) sFameCheckerData->listMenuDrawnSelIdx--; - AddTextPrinterParametrized2(FCWINDOWID_LIST, 2, 8, 14 * sFameCheckerData->listMenuDrawnSelIdx + 4, 0, 0, &sTextColor_DkGrey, 0, sListMenuItems[sFameCheckerData->listMenuCurIdx].unk_00); + AddTextPrinterParametrized2(FCWINDOWID_LIST, 2, 8, 14 * sFameCheckerData->listMenuDrawnSelIdx + 4, 0, 0, &sTextColor_DkGrey, 0, sListMenuItems[sFameCheckerData->listMenuCurIdx].name); } sFameCheckerData->listMenuCurIdx = itemIndex; @@ -1368,20 +1368,20 @@ static u8 FC_PopulateListMenu(void) { if (sTrainerIdxs[fameCheckerIdx] < FC_NONTRAINER_START) { - sListMenuItems[nitems].unk_00 = gTrainers[sTrainerIdxs[fameCheckerIdx]].trainerName; - sListMenuItems[nitems].unk_04 = nitems; + sListMenuItems[nitems].name = gTrainers[sTrainerIdxs[fameCheckerIdx]].trainerName; + sListMenuItems[nitems].id = nitems; } else { - sListMenuItems[nitems].unk_00 = sNonTrainerNamePointers[sTrainerIdxs[fameCheckerIdx] - FC_NONTRAINER_START]; - sListMenuItems[nitems].unk_04 = nitems; + sListMenuItems[nitems].name = sNonTrainerNamePointers[sTrainerIdxs[fameCheckerIdx] - FC_NONTRAINER_START]; + sListMenuItems[nitems].id = nitems; } sFameCheckerData->unlockedPersons[nitems] = fameCheckerIdx; nitems++; } } - sListMenuItems[nitems].unk_00 = gFameCheckerText_Cancel; - sListMenuItems[nitems].unk_04 = nitems; + sListMenuItems[nitems].name = gFameCheckerText_Cancel; + sListMenuItems[nitems].id = nitems; sFameCheckerData->unlockedPersons[nitems] = 0xFF; nitems++; gFameChecker_ListMenuTemplate.totalItems = nitems; diff --git a/src/mystery_gift_menu.c b/src/mystery_gift_menu.c index 1ec4e6157..e91e97624 100644 --- a/src/mystery_gift_menu.c +++ b/src/mystery_gift_menu.c @@ -703,7 +703,7 @@ u32 MysteryGift_HandleThreeOptionMenu(u8 * unused0, u16 * unused1, u8 whichMenu) width = 0; for (i = 0; i < listMenuTemplate.totalItems; i++) { - u32 curWidth = GetStringWidth(2, listMenuTemplate.items[i].unk_00, listMenuTemplate.lettersSpacing); + u32 curWidth = GetStringWidth(2, listMenuTemplate.items[i].name, listMenuTemplate.lettersSpacing); if (curWidth > width) width = curWidth; } diff --git a/src/teachy_tv.c b/src/teachy_tv.c new file mode 100644 index 000000000..2c34b731b --- /dev/null +++ b/src/teachy_tv.c @@ -0,0 +1,217 @@ +#include "main.h" +#include "global.h" +#include "task.h" +#include "menu.h" +#include "palette.h" +#include "sprite.h" +#include "menu_helpers.h" +#include "sound.h" +#include "malloc.h" +#include "sprite.h" +#include "scanline_effect.h" +#include "bg.h" +#include "gpu_regs.h" +#include "decompress.h" +#include "window.h" +#include "list_menu.h" +#include "item.h" +#include "constants/songs.h" +#include "constants/items.h" + +typedef struct { + void (*callback)(); + u8 mode; + u8 param1; + u16 param2; + u16 param3; + u8 param4; + u8 filler; +} TeachyTv_s; + +extern TeachyTv_s gTeachyTV_StaticResources; +extern void * gUnknown_203F450; +void C2TeachyTv(); +void C2TeachyTvMainCallback(); +void VblankHandlerTeachyTv(); +void sub_815ABC4(u8 mode, void (*cb)()); +void CB2_ReturnToTeachyTV(); +extern void sub_815AC20(); +void TeachyTvCreateAndRenderRbox(); +extern void TeachyTvInitIo(); +extern u8 TeachyTvSetupObj(); +extern void TeachyTvConfigRboxAndObj(u8); +extern u8 sub_815AEE8(); +extern void sub_815AF5C(); +extern void sub_815B094(); +void TeachyTvSetupBg(); +void TeachyTvLoadGraphic(); +extern void TeachyTvTaskFunction(u8); +extern void sub_815B2C0(u8); +extern void VblankHblankHandlerSetZero(); +extern void sub_812B1E0(u16); +extern struct BgTemplate gUnknown_84792E0; +extern void *gUnknown_203F450; // tilemap pointer location +extern u8 gUnknown_8E86240; // tilemap +extern u8 gUnknown_8E86BE8; +extern u8 gUnknown_8E86D6C; +extern u8 gUnknown_8E86F98; // pal +extern struct SpritePalette gUnknown_83A5348; +extern void sub_815BD80(void *); +typedef struct Task Task; +extern struct WindowTemplate gUnknown_84792F0; + + +void C2TeachyTv() +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + do_scheduled_bg_tilemap_copies_to_vram(); + UpdatePaletteFade(); +} + +void VblankHandlerTeachyTv() +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void sub_815ABC4(u8 mode, void (*cb)()) +{ + // JZW: I'm sorry, but otherwise I can't make it match baserom + TeachyTv_s *v3 = &gTeachyTV_StaticResources; + u16 v4 = 0; + v3->mode = mode; + v3->callback = cb; + if(!mode) { + v3->param2 = v4; + v3->param3 = v4; + v3->param1 = 0; + } + if(mode == 1) + v3->mode = 0; + SetMainCallback2(C2TeachyTvMainCallback); +} + +void CB2_ReturnToTeachyTV() +{ + if(gTeachyTV_StaticResources.mode == 1) + sub_815ABC4(1,gTeachyTV_StaticResources.callback); + else + sub_815ABC4(2,gTeachyTV_StaticResources.callback); +} + +void sub_815AC20() +{ + gTeachyTV_StaticResources.mode = 1; +} + +void C2TeachyTvMainCallback() +{ + int state; + void *mallocPtr; + int taskId; + Task *taskAddr; + u8 **v4; + u32 x; + + state = gMain.state; + if ( state == 0 ) + goto section_0; + else if ( state == 1 ) + goto section_1; + else + return; + section_0: + v4 = (u8 **)&gUnknown_203F450; + (*v4) = (u8*)AllocZeroed(0x4008u); + *(u32*)gUnknown_203F450 = (u32)state; + *((u8*)gUnknown_203F450 + 0x4006) = state; + *((u8*)gUnknown_203F450 + 0x4007) = 0xFF; + VblankHblankHandlerSetZero(); + clear_scheduled_bg_copies_to_vram(); + ScanlineEffect_Stop(); + FreeAllSpritePalettes(); + ResetPaletteFade(); + ResetSpriteData(); + ResetTasks(); + TeachyTvSetupBg(); + TeachyTvLoadGraphic(); + ++gMain.state; + return; + section_1: + if( free_temp_tile_data_buffers_if_possible() == 1 ) + return; + TeachyTvCreateAndRenderRbox(); + TeachyTvInitIo(); + if ( gTeachyTV_StaticResources.mode == 2 ) + { + taskId = CreateTask(TeachyTvTaskFunction, 0); + gTasks[taskId].data[1] = TeachyTvSetupObj(); + TeachyTvConfigRboxAndObj(taskId); + } + else + { + taskId = CreateTask(sub_815B2C0, 0); + x = (u32)sub_815AEE8(); + gTasks[taskId].data[0] = (x << 24) >> 24; + gTasks[taskId].data[1] = TeachyTvSetupObj(); + sub_815AF5C(); + PlayNewMapMusic(BGM_FRLG_TEACHY_TV); + sub_815B094(); + } + schedule_bg_copy_tilemap_to_vram(0); + schedule_bg_copy_tilemap_to_vram(1u); + schedule_bg_copy_tilemap_to_vram(2u); + schedule_bg_copy_tilemap_to_vram(3u); + sub_812B1E0(9); // help system something + BlendPalettes(0xFFFFFFFF, 0x10u, 0); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10u, 0, 0); + SetVBlankCallback(VblankHandlerTeachyTv); + SetMainCallback2(C2TeachyTv); +} + +void TeachyTvSetupBg() +{ + InitBgReg(); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, &gUnknown_84792E0, 4u); + SetBgTilemapBuffer(1u, (u8 *)gUnknown_203F450 + 4); + SetBgTilemapBuffer(2u, (u8 *)gUnknown_203F450 + 0x1004); + SetBgTilemapBuffer(3u, (u8 *)gUnknown_203F450 + 0x2004); + SetGpuReg(0, 0x3040u); + ShowBg(0); + ShowBg(1u); + ShowBg(2u); + ShowBg(3u); + ChangeBgX(3u, 0x1000u, 2u); + ChangeBgY(3u, 0x2800u, 1u); + *((u8 *)gUnknown_203F450 + 0x4004) = 0; + *((u8 *)gUnknown_203F450 + 0x4005) = 3; + SetGpuReg(0x50u, 0); +} + +void TeachyTvLoadGraphic() +{ + u16 src; + src = 0; + reset_temp_tile_data_buffers(); + decompress_and_copy_tile_data_to_vram(1u, &gUnknown_8E86240, 0, 0, 0); + LZDecompressWram((u8 *)&gUnknown_8E86BE8, (*(u8 **)&gUnknown_203F450) + 4); + LZDecompressWram((u8 *)&gUnknown_8E86D6C, (*(u8 **)&gUnknown_203F450) + 0x3004); + LoadCompressedPalette(&gUnknown_8E86F98, 0, 0x80u); + LoadPalette(&src, 0, 2u); + LoadSpritePalette((struct SpritePalette *)&gUnknown_83A5348); + sub_815BD80((u8 *)gUnknown_203F450 + 0x2004); +} + +void TeachyTvCreateAndRenderRbox() +{ + InitWindows(&gUnknown_84792F0); + DeactivateAllTextPrinters(); + FillWindowPixelBuffer(0, 0xCCu); + PutWindowTilemap(0); + PutWindowTilemap(1u); + CopyWindowToVram(0, 2u); +} \ No newline at end of file diff --git a/src/tm_case.c b/src/tm_case.c index 177d3320f..80fa29c5f 100644 --- a/src/tm_case.c +++ b/src/tm_case.c @@ -321,7 +321,7 @@ static bool8 DoSetUpTMCaseUI(void) switch (gMain.state) { case 0: - sub_80BF768(); + VblankHblankHandlerSetZero(); clear_scheduled_bg_copies_to_vram(); gMain.state++; break; @@ -426,7 +426,7 @@ static void ResetBufferPointers_NoFree(void) static void LoadBGTemplates(void) { void ** ptr; - sub_80BF7C8(); + InitBgReg(); ptr = &sTilemapBuffer; *ptr = AllocZeroed(0x800); ResetBgsAndClearDma3BusyFlags(0); @@ -496,11 +496,11 @@ static void InitTMCaseListMenuItems(void) for (i = 0; i < sTMCaseDynamicResources->numTMs; i++) { GetTMNumberAndMoveString(sListMenuStringsBuffer[i], pocket->itemSlots[i].itemId); - sListMenuItemsBuffer[i].unk_00 = sListMenuStringsBuffer[i]; - sListMenuItemsBuffer[i].unk_04 = i; + sListMenuItemsBuffer[i].name = sListMenuStringsBuffer[i]; + sListMenuItemsBuffer[i].id = i; } - sListMenuItemsBuffer[i].unk_00 = gText_Close; - sListMenuItemsBuffer[i].unk_04 = -2; + sListMenuItemsBuffer[i].name = gText_Close; + sListMenuItemsBuffer[i].id = -2; gMultiuseListMenuTemplate.items = sListMenuItemsBuffer; gMultiuseListMenuTemplate.totalItems = sTMCaseDynamicResources->numTMs + 1; gMultiuseListMenuTemplate.windowId = 0; -- cgit v1.2.3 From f7a81f2aa757fedc861d94deb363e1e3c460e5d3 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Sun, 2 Jun 2019 07:01:19 +0800 Subject: sub_815AEE8 --- src/teachy_tv.c | 39 ++++++++++++++++++++++++++++++++------- src/vs_seeker.c | 37 +++++++++++++++++++------------------ 2 files changed, 51 insertions(+), 25 deletions(-) (limited to 'src') diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 2c34b731b..c20e7b419 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -22,8 +22,8 @@ typedef struct { void (*callback)(); u8 mode; u8 param1; - u16 param2; - u16 param3; + u16 scrollOffset; + u16 selectedRow; u8 param4; u8 filler; } TeachyTv_s; @@ -40,7 +40,7 @@ void TeachyTvCreateAndRenderRbox(); extern void TeachyTvInitIo(); extern u8 TeachyTvSetupObj(); extern void TeachyTvConfigRboxAndObj(u8); -extern u8 sub_815AEE8(); +u8 TeachyTvSetupWindow(); extern void sub_815AF5C(); extern void sub_815B094(); void TeachyTvSetupBg(); @@ -79,14 +79,13 @@ void VblankHandlerTeachyTv() void sub_815ABC4(u8 mode, void (*cb)()) { - // JZW: I'm sorry, but otherwise I can't make it match baserom TeachyTv_s *v3 = &gTeachyTV_StaticResources; u16 v4 = 0; v3->mode = mode; v3->callback = cb; if(!mode) { - v3->param2 = v4; - v3->param3 = v4; + v3->scrollOffset = v4; + v3->selectedRow = v4; v3->param1 = 0; } if(mode == 1) @@ -117,6 +116,7 @@ void C2TeachyTvMainCallback() u32 x; state = gMain.state; + // tried several ways to reproduce the control flow, but all failed. Now using goto if ( state == 0 ) goto section_0; else if ( state == 1 ) @@ -154,7 +154,7 @@ void C2TeachyTvMainCallback() else { taskId = CreateTask(sub_815B2C0, 0); - x = (u32)sub_815AEE8(); + x = (u32)TeachyTvSetupWindow(); gTasks[taskId].data[0] = (x << 24) >> 24; gTasks[taskId].data[1] = TeachyTvSetupObj(); sub_815AF5C(); @@ -214,4 +214,29 @@ void TeachyTvCreateAndRenderRbox() PutWindowTilemap(0); PutWindowTilemap(1u); CopyWindowToVram(0, 2u); +} + +extern struct ListMenuTemplate gUnknown_8479368; +extern struct ListMenuItem gUnknown_8479340; +extern u8 ListMenuInitInternal(struct ListMenuTemplate *, u16 scrollOffset, u16 selectedRow); +extern void TeachyTvAudioByInput(s32, bool8, struct ListMenu *); + +u8 TeachyTvSetupWindow() +{ + int hasItem; + gMultiuseListMenuTemplate = gUnknown_8479368; + gMultiuseListMenuTemplate.windowId = 1; + gMultiuseListMenuTemplate.moveCursorFunc = TeachyTvAudioByInput; + hasItem = (u8)CheckBagHasItem(ITEM_TM_CASE, 1u); + if ( !(v0 << 24) ) + { + gMultiuseListMenuTemplate.items = &gUnknown_8479340; + gMultiuseListMenuTemplate.totalItems = 5; + gMultiuseListMenuTemplate.maxShowed = 5; + gMultiuseListMenuTemplate.upText_Y = (gMultiuseListMenuTemplate.upText_Y + 8) & 0xF; + } + return ListMenuInit( + &gMultiuseListMenuTemplate, + gTeachyTV_StaticResources.scrollOffset, + gTeachyTV_StaticResources.selectedRow); } \ No newline at end of file diff --git a/src/vs_seeker.c b/src/vs_seeker.c index bd5b9c7ea..bd19d96ff 100644 --- a/src/vs_seeker.c +++ b/src/vs_seeker.c @@ -24,6 +24,8 @@ #include "unk_810c3a4.h" #include "constants/movement_commands.h" #include "vs_seeker.h" +#include "item.h" +#include "constants/items.h" typedef enum { @@ -635,6 +637,7 @@ void sub_810C444(void) #ifdef NONMATCHING bool8 sub_810C4EC(void) { + s8 mask; if (CheckBagHasItem(ITEM_VS_SEEKER, 1) == TRUE) { if ((gSaveBlock1Ptr->trainerRematchStepCounter & 0xFF) < 100) @@ -643,25 +646,23 @@ bool8 sub_810C4EC(void) if (FlagGet(0x801) == TRUE) { - u16 x; - do { - x = (gSaveBlock1Ptr->trainerRematchStepCounter >> 8) & 0xFF; - } while (0); - if (x < 100) - { - x++; - gSaveBlock1Ptr->trainerRematchStepCounter = ((u16)(x << 8)) | (gSaveBlock1Ptr->trainerRematchStepCounter & 0xFF); - } - do { - x = (gSaveBlock1Ptr->trainerRematchStepCounter >> 8) & 0xFF; - } while (0); - if (x == 100) - { - FlagClear(0x801); - sub_810C640(); - sub_810D0D0(); - return TRUE; + register u8 x,y; + x = gSaveBlock1Ptr->trainerRematchStepCounter >> 8; + if (x > 99) { + mask = -1; + goto section_1; } + y = ((u8)x + 1); + gSaveBlock1Ptr->trainerRematchStepCounter = (((gSaveBlock1Ptr->trainerRematchStepCounter) & (u8)0xFFFFFFFF) | (y << 8)); + section_1: + x = (gSaveBlock1Ptr->trainerRematchStepCounter >> 8) & mask; + if (x == 100) + { + FlagClear(0x801); + sub_810C640(); + sub_810D0D0(); + return TRUE; + } } return FALSE; -- cgit v1.2.3 From 0a13397b8586bb4147d9e35c80a3c5aebff41d5b Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Sun, 2 Jun 2019 15:25:04 +0800 Subject: some more functions --- src/fame_checker.c | 2 +- src/mevent_8145654.c | 4 +-- src/teachy_tv.c | 98 ++++++++++++++++++++++++++++++++++++++++++++++------ 3 files changed, 90 insertions(+), 14 deletions(-) (limited to 'src') diff --git a/src/fame_checker.c b/src/fame_checker.c index 4b9feb45b..aff9733e9 100644 --- a/src/fame_checker.c +++ b/src/fame_checker.c @@ -1400,7 +1400,7 @@ static void FC_PutWindowTilemapAndCopyWindowToVramMode3_2(u8 windowId) static void FC_CreateScrollIndicatorArrowPair(void) { - struct ScrollIndicatorArrowPairTemplate template = { + struct ScrollArrowsTemplate template = { 2, 40, 26, diff --git a/src/mevent_8145654.c b/src/mevent_8145654.c index af3024bff..00936f9f1 100644 --- a/src/mevent_8145654.c +++ b/src/mevent_8145654.c @@ -460,7 +460,7 @@ struct UnkStruct_203F3CC /*01cc*/ u8 filler_01CC[2]; /*01ce*/ u8 unk_01CE[41]; /*01f7*/ u8 unk_01F7[10][41]; - /*0394*/ struct ScrollIndicatorArrowPairTemplate unk_0394; + /*0394*/ struct ScrollArrowsTemplate unk_0394; /*03a4*/ u8 buffer_03A4[0x1000]; }; @@ -478,7 +478,7 @@ const struct WindowTemplate gUnknown_8468040[] = { {0, 1, 0, 28, 3, 15, 0x000}, {2, 1, 3, 28, 20, 15, 0x000} }; -const struct ScrollIndicatorArrowPairTemplate gUnknown_8468050 = { +const struct ScrollArrowsTemplate gUnknown_8468050 = { 0x02, 0xe8, 0x18, 0x03, 0xe8, 0x98, 0x0000, 0x0002, 0x1000, 0x1000, 0x0, 0x000 }; diff --git a/src/teachy_tv.c b/src/teachy_tv.c index c20e7b419..c62b6d6f1 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -15,6 +15,8 @@ #include "window.h" #include "list_menu.h" #include "item.h" +#include "menu_indicators.h" +#include "field_map_obj.h" #include "constants/songs.h" #include "constants/items.h" @@ -37,12 +39,12 @@ void sub_815ABC4(u8 mode, void (*cb)()); void CB2_ReturnToTeachyTV(); extern void sub_815AC20(); void TeachyTvCreateAndRenderRbox(); -extern void TeachyTvInitIo(); -extern u8 TeachyTvSetupObj(); +void TeachyTvInitIo(); +u8 TeachyTvSetupObjEventAndOam(); extern void TeachyTvConfigRboxAndObj(u8); u8 TeachyTvSetupWindow(); -extern void sub_815AF5C(); -extern void sub_815B094(); +void TeachyTvSetupScrollIndicatorArrowPair(); +void TeachyTvSetWindowRegs(); void TeachyTvSetupBg(); void TeachyTvLoadGraphic(); extern void TeachyTvTaskFunction(u8); @@ -148,7 +150,7 @@ void C2TeachyTvMainCallback() if ( gTeachyTV_StaticResources.mode == 2 ) { taskId = CreateTask(TeachyTvTaskFunction, 0); - gTasks[taskId].data[1] = TeachyTvSetupObj(); + gTasks[taskId].data[1] = TeachyTvSetupObjEventAndOam(); TeachyTvConfigRboxAndObj(taskId); } else @@ -156,10 +158,10 @@ void C2TeachyTvMainCallback() taskId = CreateTask(sub_815B2C0, 0); x = (u32)TeachyTvSetupWindow(); gTasks[taskId].data[0] = (x << 24) >> 24; - gTasks[taskId].data[1] = TeachyTvSetupObj(); - sub_815AF5C(); + gTasks[taskId].data[1] = TeachyTvSetupObjEventAndOam(); + TeachyTvSetupScrollIndicatorArrowPair(); PlayNewMapMusic(BGM_FRLG_TEACHY_TV); - sub_815B094(); + TeachyTvSetWindowRegs(); } schedule_bg_copy_tilemap_to_vram(0); schedule_bg_copy_tilemap_to_vram(1u); @@ -219,7 +221,7 @@ void TeachyTvCreateAndRenderRbox() extern struct ListMenuTemplate gUnknown_8479368; extern struct ListMenuItem gUnknown_8479340; extern u8 ListMenuInitInternal(struct ListMenuTemplate *, u16 scrollOffset, u16 selectedRow); -extern void TeachyTvAudioByInput(s32, bool8, struct ListMenu *); +void TeachyTvAudioByInput(s32, bool8, struct ListMenu *); u8 TeachyTvSetupWindow() { @@ -228,7 +230,7 @@ u8 TeachyTvSetupWindow() gMultiuseListMenuTemplate.windowId = 1; gMultiuseListMenuTemplate.moveCursorFunc = TeachyTvAudioByInput; hasItem = (u8)CheckBagHasItem(ITEM_TM_CASE, 1u); - if ( !(v0 << 24) ) + if ( !(hasItem << 24) ) { gMultiuseListMenuTemplate.items = &gUnknown_8479340; gMultiuseListMenuTemplate.totalItems = 5; @@ -239,4 +241,78 @@ u8 TeachyTvSetupWindow() &gMultiuseListMenuTemplate, gTeachyTV_StaticResources.scrollOffset, gTeachyTV_StaticResources.selectedRow); -} \ No newline at end of file +} + +extern const struct ScrollArrowsTemplate gUnknown_8479380; + +void TeachyTvSetupScrollIndicatorArrowPair() +{ + int hasItem; + hasItem = (u8)CheckBagHasItem(ITEM_TM_CASE, 1u); + if ( ! hasItem << 24 ) { + u8 * temp = (u8 *)gUnknown_203F450; + *((u8 *)temp + 0x4007) = 0xFF; + } + + else { + u8 *temp, res; + res = AddScrollIndicatorArrowPair( + &gUnknown_8479380, + &(gTeachyTV_StaticResources.scrollOffset)); + temp = (u8 *)gUnknown_203F450; + *((u8 *)temp + 0x4007) = res; + } +} + +void TeachyTvRemoveScrollIndicatorArrowPair() +{ + u8 *temp = ((u8*)gUnknown_203F450 + 0x4007); + if ( *temp != 0xFF ) + { + RemoveScrollIndicatorArrowPair(*temp); + *((u8*)gUnknown_203F450 + 0x4007) = 0xFF; + } +} + +void TeachyTvAudioByInput(s32 notUsed, bool8 play, struct ListMenu *notUsedAlt) +{ + if ( play != 1 ) + PlaySE(SE_SELECT); +} + +void TeachyTvInitIo() +{ + SetGpuReg(0x48u, 0x3Fu); + SetGpuReg(0x4Au, 0x1Fu); + SetGpuReg(0x50u, 0xCCu); + SetGpuReg(0x54u, 5u); +} + +u8 TeachyTvSetupObjEventAndOam() +{ + u8 temp = AddPseudoEventObject(90, SpriteCallbackDummy, 0, 0, 8); + gSprites[temp].oam.priority = 2; + gSprites[temp].invisible = 1; + return temp; +} + +void TeachyTvSetSpriteCoordsAndSwitchFrame(u8 objId, u16 x, u16 y, u8 frame) +{ + gSprites[objId].pos2.x = x; + gSprites[objId].pos2.y = y; + gSprites[objId].invisible = 0; + StartSpriteAnim(&gSprites[objId], frame); +} + +void TeachyTvSetWindowRegs() +{ + SetGpuReg(0x44u, 0xC64u); + SetGpuReg(0x40u, 0x1CD4u); +} + +void TeachyTvClearWindowRegs() +{ + SetGpuReg(0x44u, 0); + SetGpuReg(0x40u, 0); +} + -- cgit v1.2.3 From 49a1de36d38b41b0f3f7c443acc636281314b749 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Mon, 3 Jun 2019 03:19:15 +0800 Subject: sub_815B0CC and rollback of failed attempt to make it compilable --- src/teachy_tv.c | 36 ++++++++++++++++++++++++++++++++---- src/tm_case.c | 2 +- src/vs_seeker.c | 37 ++++++++++++++++++------------------- 3 files changed, 51 insertions(+), 24 deletions(-) (limited to 'src') diff --git a/src/teachy_tv.c b/src/teachy_tv.c index c62b6d6f1..60b182575 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -17,6 +17,7 @@ #include "item.h" #include "menu_indicators.h" #include "field_map_obj.h" +#include "random.h" #include "constants/songs.h" #include "constants/items.h" @@ -36,12 +37,12 @@ void C2TeachyTv(); void C2TeachyTvMainCallback(); void VblankHandlerTeachyTv(); void sub_815ABC4(u8 mode, void (*cb)()); -void CB2_ReturnToTeachyTV(); +void sub_815ABFC(); extern void sub_815AC20(); void TeachyTvCreateAndRenderRbox(); void TeachyTvInitIo(); u8 TeachyTvSetupObjEventAndOam(); -extern void TeachyTvConfigRboxAndObj(u8); +extern void TeachyTvSetupPostBattleWindowAndObj(u8); u8 TeachyTvSetupWindow(); void TeachyTvSetupScrollIndicatorArrowPair(); void TeachyTvSetWindowRegs(); @@ -95,7 +96,7 @@ void sub_815ABC4(u8 mode, void (*cb)()) SetMainCallback2(C2TeachyTvMainCallback); } -void CB2_ReturnToTeachyTV() +void sub_815ABFC() { if(gTeachyTV_StaticResources.mode == 1) sub_815ABC4(1,gTeachyTV_StaticResources.callback); @@ -151,7 +152,7 @@ void C2TeachyTvMainCallback() { taskId = CreateTask(TeachyTvTaskFunction, 0); gTasks[taskId].data[1] = TeachyTvSetupObjEventAndOam(); - TeachyTvConfigRboxAndObj(taskId); + TeachyTvSetupPostBattleWindowAndObj(taskId); } else { @@ -316,3 +317,30 @@ void TeachyTvClearWindowRegs() SetGpuReg(0x40u, 0); } +void TeachyTvBg2AnimController() +{ + u16 *tilemapBuffer; + u8 counter; + u32 offset2; + u32 offset; + u32 counter2; + + tilemapBuffer = (u16 *)GetBgTilemapBuffer(2u); + counter = 1; + do + { + offset2 = 2; + offset = 0x20 * counter; + counter2 = counter + 1; + do + { + tilemapBuffer[offset + offset2] = ((Random() & 3) << 10) + 0x301F; + offset2 = (offset2 + 1) << 0x18 >> 0x18; + } + while ( offset2 <= 0x1B ); + counter = counter2; + } + while ( counter2 << 0x18 >> 0x18 <= 0xCu ); + schedule_bg_copy_tilemap_to_vram(2u); +} + diff --git a/src/tm_case.c b/src/tm_case.c index 80fa29c5f..ce31e79c3 100644 --- a/src/tm_case.c +++ b/src/tm_case.c @@ -1147,7 +1147,7 @@ void PokeDude_InitTMCase(void) AddBagItem(ITEM_TM03, 1); AddBagItem(ITEM_TM09, 1); AddBagItem(ITEM_TM35, 1); - InitTMCase(4, CB2_ReturnToTeachyTV, 0); + InitTMCase(4, sub_815ABFC, 0); } static void Task_TMCaseDude1(u8 taskId) diff --git a/src/vs_seeker.c b/src/vs_seeker.c index bd19d96ff..bd5b9c7ea 100644 --- a/src/vs_seeker.c +++ b/src/vs_seeker.c @@ -24,8 +24,6 @@ #include "unk_810c3a4.h" #include "constants/movement_commands.h" #include "vs_seeker.h" -#include "item.h" -#include "constants/items.h" typedef enum { @@ -637,7 +635,6 @@ void sub_810C444(void) #ifdef NONMATCHING bool8 sub_810C4EC(void) { - s8 mask; if (CheckBagHasItem(ITEM_VS_SEEKER, 1) == TRUE) { if ((gSaveBlock1Ptr->trainerRematchStepCounter & 0xFF) < 100) @@ -646,23 +643,25 @@ bool8 sub_810C4EC(void) if (FlagGet(0x801) == TRUE) { - register u8 x,y; - x = gSaveBlock1Ptr->trainerRematchStepCounter >> 8; - if (x > 99) { - mask = -1; - goto section_1; + u16 x; + do { + x = (gSaveBlock1Ptr->trainerRematchStepCounter >> 8) & 0xFF; + } while (0); + if (x < 100) + { + x++; + gSaveBlock1Ptr->trainerRematchStepCounter = ((u16)(x << 8)) | (gSaveBlock1Ptr->trainerRematchStepCounter & 0xFF); + } + do { + x = (gSaveBlock1Ptr->trainerRematchStepCounter >> 8) & 0xFF; + } while (0); + if (x == 100) + { + FlagClear(0x801); + sub_810C640(); + sub_810D0D0(); + return TRUE; } - y = ((u8)x + 1); - gSaveBlock1Ptr->trainerRematchStepCounter = (((gSaveBlock1Ptr->trainerRematchStepCounter) & (u8)0xFFFFFFFF) | (y << 8)); - section_1: - x = (gSaveBlock1Ptr->trainerRematchStepCounter >> 8) & mask; - if (x == 100) - { - FlagClear(0x801); - sub_810C640(); - sub_810D0D0(); - return TRUE; - } } return FALSE; -- cgit v1.2.3 From b6a166c45960e1963bf508f83b9da1a8d6a71df4 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Tue, 4 Jun 2019 00:00:21 +0800 Subject: more symbol name fixes --- src/.fuse_hidden00001c3f00000004 | 346 +++++++++++++++++++++++++++++++++++++++ src/fame_checker.c | 6 +- src/teachy_tv.c | 10 +- src/tm_case.c | 2 +- 4 files changed, 355 insertions(+), 9 deletions(-) create mode 100644 src/.fuse_hidden00001c3f00000004 (limited to 'src') diff --git a/src/.fuse_hidden00001c3f00000004 b/src/.fuse_hidden00001c3f00000004 new file mode 100644 index 000000000..8c91f0f46 --- /dev/null +++ b/src/.fuse_hidden00001c3f00000004 @@ -0,0 +1,346 @@ +#include "main.h" +#include "global.h" +#include "task.h" +#include "menu.h" +#include "palette.h" +#include "sprite.h" +#include "menu_helpers.h" +#include "sound.h" +#include "malloc.h" +#include "sprite.h" +#include "scanline_effect.h" +#include "bg.h" +#include "gpu_regs.h" +#include "decompress.h" +#include "window.h" +#include "list_menu.h" +#include "item.h" +#include "menu_indicators.h" +#include "field_map_obj.h" +#include "random.h" +#include "constants/songs.h" +#include "constants/items.h" + +typedef struct { + void (*callback)(); + u8 mode; + u8 param1; + u16 scrollOffset; + u16 selectedRow; + u8 param4; + u8 filler; +} TeachyTv_s; + +extern TeachyTv_s gTeachyTV_StaticResources; +extern void * gUnknown_203F450; +void C2TeachyTv(); +void C2TeachyTvMainCallback(); +void VblankHandlerTeachyTv(); +void sub_815ABC4(u8 mode, void (*cb)()); +void CB2_ReturnToTeachyTV(); +extern void sub_815AC20(); +void TeachyTvCreateAndRenderRbox(); +void TeachyTvInitIo(); +u8 TeachyTvSetupObjEventAndOam(); +extern void TeachyTvConfigRboxAndObj(u8); +u8 TeachyTvSetupWindow(); +void TeachyTvSetupScrollIndicatorArrowPair(); +void TeachyTvSetWindowRegs(); +void TeachyTvSetupBg(); +void TeachyTvLoadGraphic(); +extern void TeachyTvTaskFunction(u8); +extern void sub_815B2C0(u8); +extern void VblankHblankHandlerSetZero(); +extern void sub_812B1E0(u16); +extern struct BgTemplate gUnknown_84792E0; +extern void *gUnknown_203F450; // tilemap pointer location +extern u8 gUnknown_8E86240; // tilemap +extern u8 gUnknown_8E86BE8; +extern u8 gUnknown_8E86D6C; +extern u8 gUnknown_8E86F98; // pal +extern struct SpritePalette gUnknown_83A5348; +extern void sub_815BD80(void *); +typedef struct Task Task; +extern struct WindowTemplate gUnknown_84792F0; + + +void C2TeachyTv() +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + do_scheduled_bg_tilemap_copies_to_vram(); + UpdatePaletteFade(); +} + +void VblankHandlerTeachyTv() +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void sub_815ABC4(u8 mode, void (*cb)()) +{ + TeachyTv_s *v3 = &gTeachyTV_StaticResources; + u16 v4 = 0; + v3->mode = mode; + v3->callback = cb; + if(!mode) { + v3->scrollOffset = v4; + v3->selectedRow = v4; + v3->param1 = 0; + } + if(mode == 1) + v3->mode = 0; + SetMainCallback2(C2TeachyTvMainCallback); +} + +void CB2_ReturnToTeachyTV() +{ + if(gTeachyTV_StaticResources.mode == 1) + sub_815ABC4(1,gTeachyTV_StaticResources.callback); + else + sub_815ABC4(2,gTeachyTV_StaticResources.callback); +} + +void sub_815AC20() +{ + gTeachyTV_StaticResources.mode = 1; +} + +void C2TeachyTvMainCallback() +{ + int state; + void *mallocPtr; + int taskId; + Task *taskAddr; + u8 **v4; + u32 x; + + state = gMain.state; + // tried several ways to reproduce the control flow, but all failed. Now using goto + if ( state == 0 ) + goto section_0; + else if ( state == 1 ) + goto section_1; + else + return; + section_0: + v4 = (u8 **)&gUnknown_203F450; + (*v4) = (u8*)AllocZeroed(0x4008u); + *(u32*)gUnknown_203F450 = (u32)state; + *((u8*)gUnknown_203F450 + 0x4006) = state; + *((u8*)gUnknown_203F450 + 0x4007) = 0xFF; + VblankHblankHandlerSetZero(); + clear_scheduled_bg_copies_to_vram(); + ScanlineEffect_Stop(); + FreeAllSpritePalettes(); + ResetPaletteFade(); + ResetSpriteData(); + ResetTasks(); + TeachyTvSetupBg(); + TeachyTvLoadGraphic(); + ++gMain.state; + return; + section_1: + if( free_temp_tile_data_buffers_if_possible() == 1 ) + return; + TeachyTvCreateAndRenderRbox(); + TeachyTvInitIo(); + if ( gTeachyTV_StaticResources.mode == 2 ) + { + taskId = CreateTask(TeachyTvTaskFunction, 0); + gTasks[taskId].data[1] = TeachyTvSetupObjEventAndOam(); + TeachyTvConfigRboxAndObj(taskId); + } + else + { + taskId = CreateTask(sub_815B2C0, 0); + x = (u32)TeachyTvSetupWindow(); + gTasks[taskId].data[0] = (x << 24) >> 24; + gTasks[taskId].data[1] = TeachyTvSetupObjEventAndOam(); + TeachyTvSetupScrollIndicatorArrowPair(); + PlayNewMapMusic(BGM_FRLG_TEACHY_TV); + TeachyTvSetWindowRegs(); + } + schedule_bg_copy_tilemap_to_vram(0); + schedule_bg_copy_tilemap_to_vram(1u); + schedule_bg_copy_tilemap_to_vram(2u); + schedule_bg_copy_tilemap_to_vram(3u); + sub_812B1E0(9); // help system something + BlendPalettes(0xFFFFFFFF, 0x10u, 0); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10u, 0, 0); + SetVBlankCallback(VblankHandlerTeachyTv); + SetMainCallback2(C2TeachyTv); +} + +void TeachyTvSetupBg() +{ + InitBgReg(); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, &gUnknown_84792E0, 4u); + SetBgTilemapBuffer(1u, (u8 *)gUnknown_203F450 + 4); + SetBgTilemapBuffer(2u, (u8 *)gUnknown_203F450 + 0x1004); + SetBgTilemapBuffer(3u, (u8 *)gUnknown_203F450 + 0x2004); + SetGpuReg(0, 0x3040u); + ShowBg(0); + ShowBg(1u); + ShowBg(2u); + ShowBg(3u); + ChangeBgX(3u, 0x1000u, 2u); + ChangeBgY(3u, 0x2800u, 1u); + *((u8 *)gUnknown_203F450 + 0x4004) = 0; + *((u8 *)gUnknown_203F450 + 0x4005) = 3; + SetGpuReg(0x50u, 0); +} + +void TeachyTvLoadGraphic() +{ + u16 src; + src = 0; + reset_temp_tile_data_buffers(); + decompress_and_copy_tile_data_to_vram(1u, &gUnknown_8E86240, 0, 0, 0); + LZDecompressWram((u8 *)&gUnknown_8E86BE8, (*(u8 **)&gUnknown_203F450) + 4); + LZDecompressWram((u8 *)&gUnknown_8E86D6C, (*(u8 **)&gUnknown_203F450) + 0x3004); + LoadCompressedPalette(&gUnknown_8E86F98, 0, 0x80u); + LoadPalette(&src, 0, 2u); + LoadSpritePalette((struct SpritePalette *)&gUnknown_83A5348); + sub_815BD80((u8 *)gUnknown_203F450 + 0x2004); +} + +void TeachyTvCreateAndRenderRbox() +{ + InitWindows(&gUnknown_84792F0); + DeactivateAllTextPrinters(); + FillWindowPixelBuffer(0, 0xCCu); + PutWindowTilemap(0); + PutWindowTilemap(1u); + CopyWindowToVram(0, 2u); +} + +extern struct ListMenuTemplate gUnknown_8479368; +extern struct ListMenuItem gUnknown_8479340; +extern u8 ListMenuInitInternal(struct ListMenuTemplate *, u16 scrollOffset, u16 selectedRow); +void TeachyTvAudioByInput(s32, bool8, struct ListMenu *); + +u8 TeachyTvSetupWindow() +{ + int hasItem; + gMultiuseListMenuTemplate = gUnknown_8479368; + gMultiuseListMenuTemplate.windowId = 1; + gMultiuseListMenuTemplate.moveCursorFunc = TeachyTvAudioByInput; + hasItem = (u8)CheckBagHasItem(ITEM_TM_CASE, 1u); + if ( !(hasItem << 24) ) + { + gMultiuseListMenuTemplate.items = &gUnknown_8479340; + gMultiuseListMenuTemplate.totalItems = 5; + gMultiuseListMenuTemplate.maxShowed = 5; + gMultiuseListMenuTemplate.upText_Y = (gMultiuseListMenuTemplate.upText_Y + 8) & 0xF; + } + return ListMenuInit( + &gMultiuseListMenuTemplate, + gTeachyTV_StaticResources.scrollOffset, + gTeachyTV_StaticResources.selectedRow); +} + +extern const struct ScrollArrowsTemplate gUnknown_8479380; + +void TeachyTvSetupScrollIndicatorArrowPair() +{ + int hasItem; + hasItem = (u8)CheckBagHasItem(ITEM_TM_CASE, 1u); + if ( ! hasItem << 24 ) { + u8 * temp = (u8 *)gUnknown_203F450; + *((u8 *)temp + 0x4007) = 0xFF; + } + + else { + u8 *temp, res; + res = AddScrollIndicatorArrowPair( + &gUnknown_8479380, + &(gTeachyTV_StaticResources.scrollOffset)); + temp = (u8 *)gUnknown_203F450; + *((u8 *)temp + 0x4007) = res; + } +} + +void TeachyTvRemoveScrollIndicatorArrowPair() +{ + u8 *temp = ((u8*)gUnknown_203F450 + 0x4007); + if ( *temp != 0xFF ) + { + RemoveScrollIndicatorArrowPair(*temp); + *((u8*)gUnknown_203F450 + 0x4007) = 0xFF; + } +} + +void TeachyTvAudioByInput(s32 notUsed, bool8 play, struct ListMenu *notUsedAlt) +{ + if ( play != 1 ) + PlaySE(SE_SELECT); +} + +void TeachyTvInitIo() +{ + SetGpuReg(0x48u, 0x3Fu); + SetGpuReg(0x4Au, 0x1Fu); + SetGpuReg(0x50u, 0xCCu); + SetGpuReg(0x54u, 5u); +} + +u8 TeachyTvSetupObjEventAndOam() +{ + u8 temp = AddPseudoEventObject(90, SpriteCallbackDummy, 0, 0, 8); + gSprites[temp].oam.priority = 2; + gSprites[temp].invisible = 1; + return temp; +} + +void TeachyTvSetSpriteCoordsAndSwitchFrame(u8 objId, u16 x, u16 y, u8 frame) +{ + gSprites[objId].pos2.x = x; + gSprites[objId].pos2.y = y; + gSprites[objId].invisible = 0; + StartSpriteAnim(&gSprites[objId], frame); +} + +void TeachyTvSetWindowRegs() +{ + SetGpuReg(0x44u, 0xC64u); + SetGpuReg(0x40u, 0x1CD4u); +} + +void TeachyTvClearWindowRegs() +{ + SetGpuReg(0x44u, 0); + SetGpuReg(0x40u, 0); +} + +void TeachyTvBg2AnimController() +{ + u16 *tilemapBuffer; + u8 counter; + u32 offset2; + u32 offset; + u32 counter2; + + tilemapBuffer = (u16 *)GetBgTilemapBuffer(2u); + counter = 1; + do + { + offset2 = 2; + offset = 0x20 * counter; + counter2 = counter + 1; + do + { + tilemapBuffer[offset + offset2] = ((Random() & 3) << 10) + 0x301F; + offset2 = (offset2 + 1) << 0x18 >> 0x18; + } + while ( offset2 <= 0x1B ); + counter = counter2; + } + while ( counter2 << 0x18 >> 0x18 <= 0xCu ); + schedule_bg_copy_tilemap_to_vram(2u); +} + diff --git a/src/fame_checker.c b/src/fame_checker.c index aff9733e9..b136ebfa8 100644 --- a/src/fame_checker.c +++ b/src/fame_checker.c @@ -1270,7 +1270,7 @@ static void FC_MoveCursorFunc(s32 itemIndex, bool8 onInit, struct ListMenu *list struct Task *task = &gTasks[taskId]; PlaySE(SE_SELECT); task->data[1] = 0; - get_coro_args_x18_x1A(sFameCheckerData->listMenuTaskId, &listMenuTopIdx, NULL); + ListMenuGetScrollAndRow(sFameCheckerData->listMenuTaskId, &listMenuTopIdx, NULL); sFameCheckerData->listMenuTopIdx = listMenuTopIdx; if (itemIndex != sFameCheckerData->numUnlockedPersons - 1) { @@ -1339,7 +1339,7 @@ static void FC_DoMoveCursor(s32 itemIndex, bool8 onInit) u16 listY; u16 cursorY; u16 who; - get_coro_args_x18_x1A(sFameCheckerData->listMenuTaskId, &listY, &cursorY); + ListMenuGetScrollAndRow(sFameCheckerData->listMenuTaskId, &listY, &cursorY); who = listY + cursorY; AddTextPrinterParametrized2(FCWINDOWID_LIST, 2, 8, 14 * cursorY + 4, 0, 0, &sTextColor_Green, 0, sListMenuItems[itemIndex].name); if (!onInit) @@ -1432,7 +1432,7 @@ static void FreeListMenuSelectorArrowPairResources(void) static u16 FameCheckerGetCursorY(void) { u16 listY, cursorY; - get_coro_args_x18_x1A(sFameCheckerData->listMenuTaskId, &listY, &cursorY); + ListMenuGetScrollAndRow(sFameCheckerData->listMenuTaskId, &listY, &cursorY); return listY + cursorY; } diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 60b182575..9e34cdb70 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -18,13 +18,14 @@ #include "menu_indicators.h" #include "field_map_obj.h" #include "random.h" +#include "text.h" #include "constants/songs.h" #include "constants/items.h" typedef struct { void (*callback)(); u8 mode; - u8 param1; + u8 optionChosen; u16 scrollOffset; u16 selectedRow; u8 param4; @@ -48,7 +49,7 @@ void TeachyTvSetupScrollIndicatorArrowPair(); void TeachyTvSetWindowRegs(); void TeachyTvSetupBg(); void TeachyTvLoadGraphic(); -extern void TeachyTvTaskFunction(u8); +extern void TeachyTvPostBattleFadeControl(u8); extern void sub_815B2C0(u8); extern void VblankHblankHandlerSetZero(); extern void sub_812B1E0(u16); @@ -89,7 +90,7 @@ void sub_815ABC4(u8 mode, void (*cb)()) if(!mode) { v3->scrollOffset = v4; v3->selectedRow = v4; - v3->param1 = 0; + v3->optionChosen = 0; } if(mode == 1) v3->mode = 0; @@ -112,7 +113,6 @@ void sub_815AC20() void C2TeachyTvMainCallback() { int state; - void *mallocPtr; int taskId; Task *taskAddr; u8 **v4; @@ -150,7 +150,7 @@ void C2TeachyTvMainCallback() TeachyTvInitIo(); if ( gTeachyTV_StaticResources.mode == 2 ) { - taskId = CreateTask(TeachyTvTaskFunction, 0); + taskId = CreateTask(TeachyTvPostBattleFadeControl, 0); gTasks[taskId].data[1] = TeachyTvSetupObjEventAndOam(); TeachyTvSetupPostBattleWindowAndObj(taskId); } diff --git a/src/tm_case.c b/src/tm_case.c index ce31e79c3..81e0fd371 100644 --- a/src/tm_case.c +++ b/src/tm_case.c @@ -737,7 +737,7 @@ static void Task_TMCaseMain(u8 taskId) if (sub_80BF72C() != TRUE) { input = ListMenuHandleInput(data[0]); - get_coro_args_x18_x1A(data[0], &sTMCaseStaticResources.scrollOffset, &sTMCaseStaticResources.selectedRow); + ListMenuGetScrollAndRow(data[0], &sTMCaseStaticResources.scrollOffset, &sTMCaseStaticResources.selectedRow); if (JOY_NEW(SELECT_BUTTON) && sTMCaseStaticResources.unk_05 == 1) { PlaySE(SE_SELECT); -- cgit v1.2.3 From 94091f15894ff2a0a9b2e838aba84ebdc211703c Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Tue, 4 Jun 2019 00:01:04 +0800 Subject: --amend --- src/.fuse_hidden00001c3f00000004 | 346 --------------------------------------- 1 file changed, 346 deletions(-) delete mode 100644 src/.fuse_hidden00001c3f00000004 (limited to 'src') diff --git a/src/.fuse_hidden00001c3f00000004 b/src/.fuse_hidden00001c3f00000004 deleted file mode 100644 index 8c91f0f46..000000000 --- a/src/.fuse_hidden00001c3f00000004 +++ /dev/null @@ -1,346 +0,0 @@ -#include "main.h" -#include "global.h" -#include "task.h" -#include "menu.h" -#include "palette.h" -#include "sprite.h" -#include "menu_helpers.h" -#include "sound.h" -#include "malloc.h" -#include "sprite.h" -#include "scanline_effect.h" -#include "bg.h" -#include "gpu_regs.h" -#include "decompress.h" -#include "window.h" -#include "list_menu.h" -#include "item.h" -#include "menu_indicators.h" -#include "field_map_obj.h" -#include "random.h" -#include "constants/songs.h" -#include "constants/items.h" - -typedef struct { - void (*callback)(); - u8 mode; - u8 param1; - u16 scrollOffset; - u16 selectedRow; - u8 param4; - u8 filler; -} TeachyTv_s; - -extern TeachyTv_s gTeachyTV_StaticResources; -extern void * gUnknown_203F450; -void C2TeachyTv(); -void C2TeachyTvMainCallback(); -void VblankHandlerTeachyTv(); -void sub_815ABC4(u8 mode, void (*cb)()); -void CB2_ReturnToTeachyTV(); -extern void sub_815AC20(); -void TeachyTvCreateAndRenderRbox(); -void TeachyTvInitIo(); -u8 TeachyTvSetupObjEventAndOam(); -extern void TeachyTvConfigRboxAndObj(u8); -u8 TeachyTvSetupWindow(); -void TeachyTvSetupScrollIndicatorArrowPair(); -void TeachyTvSetWindowRegs(); -void TeachyTvSetupBg(); -void TeachyTvLoadGraphic(); -extern void TeachyTvTaskFunction(u8); -extern void sub_815B2C0(u8); -extern void VblankHblankHandlerSetZero(); -extern void sub_812B1E0(u16); -extern struct BgTemplate gUnknown_84792E0; -extern void *gUnknown_203F450; // tilemap pointer location -extern u8 gUnknown_8E86240; // tilemap -extern u8 gUnknown_8E86BE8; -extern u8 gUnknown_8E86D6C; -extern u8 gUnknown_8E86F98; // pal -extern struct SpritePalette gUnknown_83A5348; -extern void sub_815BD80(void *); -typedef struct Task Task; -extern struct WindowTemplate gUnknown_84792F0; - - -void C2TeachyTv() -{ - RunTasks(); - AnimateSprites(); - BuildOamBuffer(); - do_scheduled_bg_tilemap_copies_to_vram(); - UpdatePaletteFade(); -} - -void VblankHandlerTeachyTv() -{ - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); -} - -void sub_815ABC4(u8 mode, void (*cb)()) -{ - TeachyTv_s *v3 = &gTeachyTV_StaticResources; - u16 v4 = 0; - v3->mode = mode; - v3->callback = cb; - if(!mode) { - v3->scrollOffset = v4; - v3->selectedRow = v4; - v3->param1 = 0; - } - if(mode == 1) - v3->mode = 0; - SetMainCallback2(C2TeachyTvMainCallback); -} - -void CB2_ReturnToTeachyTV() -{ - if(gTeachyTV_StaticResources.mode == 1) - sub_815ABC4(1,gTeachyTV_StaticResources.callback); - else - sub_815ABC4(2,gTeachyTV_StaticResources.callback); -} - -void sub_815AC20() -{ - gTeachyTV_StaticResources.mode = 1; -} - -void C2TeachyTvMainCallback() -{ - int state; - void *mallocPtr; - int taskId; - Task *taskAddr; - u8 **v4; - u32 x; - - state = gMain.state; - // tried several ways to reproduce the control flow, but all failed. Now using goto - if ( state == 0 ) - goto section_0; - else if ( state == 1 ) - goto section_1; - else - return; - section_0: - v4 = (u8 **)&gUnknown_203F450; - (*v4) = (u8*)AllocZeroed(0x4008u); - *(u32*)gUnknown_203F450 = (u32)state; - *((u8*)gUnknown_203F450 + 0x4006) = state; - *((u8*)gUnknown_203F450 + 0x4007) = 0xFF; - VblankHblankHandlerSetZero(); - clear_scheduled_bg_copies_to_vram(); - ScanlineEffect_Stop(); - FreeAllSpritePalettes(); - ResetPaletteFade(); - ResetSpriteData(); - ResetTasks(); - TeachyTvSetupBg(); - TeachyTvLoadGraphic(); - ++gMain.state; - return; - section_1: - if( free_temp_tile_data_buffers_if_possible() == 1 ) - return; - TeachyTvCreateAndRenderRbox(); - TeachyTvInitIo(); - if ( gTeachyTV_StaticResources.mode == 2 ) - { - taskId = CreateTask(TeachyTvTaskFunction, 0); - gTasks[taskId].data[1] = TeachyTvSetupObjEventAndOam(); - TeachyTvConfigRboxAndObj(taskId); - } - else - { - taskId = CreateTask(sub_815B2C0, 0); - x = (u32)TeachyTvSetupWindow(); - gTasks[taskId].data[0] = (x << 24) >> 24; - gTasks[taskId].data[1] = TeachyTvSetupObjEventAndOam(); - TeachyTvSetupScrollIndicatorArrowPair(); - PlayNewMapMusic(BGM_FRLG_TEACHY_TV); - TeachyTvSetWindowRegs(); - } - schedule_bg_copy_tilemap_to_vram(0); - schedule_bg_copy_tilemap_to_vram(1u); - schedule_bg_copy_tilemap_to_vram(2u); - schedule_bg_copy_tilemap_to_vram(3u); - sub_812B1E0(9); // help system something - BlendPalettes(0xFFFFFFFF, 0x10u, 0); - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10u, 0, 0); - SetVBlankCallback(VblankHandlerTeachyTv); - SetMainCallback2(C2TeachyTv); -} - -void TeachyTvSetupBg() -{ - InitBgReg(); - ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, &gUnknown_84792E0, 4u); - SetBgTilemapBuffer(1u, (u8 *)gUnknown_203F450 + 4); - SetBgTilemapBuffer(2u, (u8 *)gUnknown_203F450 + 0x1004); - SetBgTilemapBuffer(3u, (u8 *)gUnknown_203F450 + 0x2004); - SetGpuReg(0, 0x3040u); - ShowBg(0); - ShowBg(1u); - ShowBg(2u); - ShowBg(3u); - ChangeBgX(3u, 0x1000u, 2u); - ChangeBgY(3u, 0x2800u, 1u); - *((u8 *)gUnknown_203F450 + 0x4004) = 0; - *((u8 *)gUnknown_203F450 + 0x4005) = 3; - SetGpuReg(0x50u, 0); -} - -void TeachyTvLoadGraphic() -{ - u16 src; - src = 0; - reset_temp_tile_data_buffers(); - decompress_and_copy_tile_data_to_vram(1u, &gUnknown_8E86240, 0, 0, 0); - LZDecompressWram((u8 *)&gUnknown_8E86BE8, (*(u8 **)&gUnknown_203F450) + 4); - LZDecompressWram((u8 *)&gUnknown_8E86D6C, (*(u8 **)&gUnknown_203F450) + 0x3004); - LoadCompressedPalette(&gUnknown_8E86F98, 0, 0x80u); - LoadPalette(&src, 0, 2u); - LoadSpritePalette((struct SpritePalette *)&gUnknown_83A5348); - sub_815BD80((u8 *)gUnknown_203F450 + 0x2004); -} - -void TeachyTvCreateAndRenderRbox() -{ - InitWindows(&gUnknown_84792F0); - DeactivateAllTextPrinters(); - FillWindowPixelBuffer(0, 0xCCu); - PutWindowTilemap(0); - PutWindowTilemap(1u); - CopyWindowToVram(0, 2u); -} - -extern struct ListMenuTemplate gUnknown_8479368; -extern struct ListMenuItem gUnknown_8479340; -extern u8 ListMenuInitInternal(struct ListMenuTemplate *, u16 scrollOffset, u16 selectedRow); -void TeachyTvAudioByInput(s32, bool8, struct ListMenu *); - -u8 TeachyTvSetupWindow() -{ - int hasItem; - gMultiuseListMenuTemplate = gUnknown_8479368; - gMultiuseListMenuTemplate.windowId = 1; - gMultiuseListMenuTemplate.moveCursorFunc = TeachyTvAudioByInput; - hasItem = (u8)CheckBagHasItem(ITEM_TM_CASE, 1u); - if ( !(hasItem << 24) ) - { - gMultiuseListMenuTemplate.items = &gUnknown_8479340; - gMultiuseListMenuTemplate.totalItems = 5; - gMultiuseListMenuTemplate.maxShowed = 5; - gMultiuseListMenuTemplate.upText_Y = (gMultiuseListMenuTemplate.upText_Y + 8) & 0xF; - } - return ListMenuInit( - &gMultiuseListMenuTemplate, - gTeachyTV_StaticResources.scrollOffset, - gTeachyTV_StaticResources.selectedRow); -} - -extern const struct ScrollArrowsTemplate gUnknown_8479380; - -void TeachyTvSetupScrollIndicatorArrowPair() -{ - int hasItem; - hasItem = (u8)CheckBagHasItem(ITEM_TM_CASE, 1u); - if ( ! hasItem << 24 ) { - u8 * temp = (u8 *)gUnknown_203F450; - *((u8 *)temp + 0x4007) = 0xFF; - } - - else { - u8 *temp, res; - res = AddScrollIndicatorArrowPair( - &gUnknown_8479380, - &(gTeachyTV_StaticResources.scrollOffset)); - temp = (u8 *)gUnknown_203F450; - *((u8 *)temp + 0x4007) = res; - } -} - -void TeachyTvRemoveScrollIndicatorArrowPair() -{ - u8 *temp = ((u8*)gUnknown_203F450 + 0x4007); - if ( *temp != 0xFF ) - { - RemoveScrollIndicatorArrowPair(*temp); - *((u8*)gUnknown_203F450 + 0x4007) = 0xFF; - } -} - -void TeachyTvAudioByInput(s32 notUsed, bool8 play, struct ListMenu *notUsedAlt) -{ - if ( play != 1 ) - PlaySE(SE_SELECT); -} - -void TeachyTvInitIo() -{ - SetGpuReg(0x48u, 0x3Fu); - SetGpuReg(0x4Au, 0x1Fu); - SetGpuReg(0x50u, 0xCCu); - SetGpuReg(0x54u, 5u); -} - -u8 TeachyTvSetupObjEventAndOam() -{ - u8 temp = AddPseudoEventObject(90, SpriteCallbackDummy, 0, 0, 8); - gSprites[temp].oam.priority = 2; - gSprites[temp].invisible = 1; - return temp; -} - -void TeachyTvSetSpriteCoordsAndSwitchFrame(u8 objId, u16 x, u16 y, u8 frame) -{ - gSprites[objId].pos2.x = x; - gSprites[objId].pos2.y = y; - gSprites[objId].invisible = 0; - StartSpriteAnim(&gSprites[objId], frame); -} - -void TeachyTvSetWindowRegs() -{ - SetGpuReg(0x44u, 0xC64u); - SetGpuReg(0x40u, 0x1CD4u); -} - -void TeachyTvClearWindowRegs() -{ - SetGpuReg(0x44u, 0); - SetGpuReg(0x40u, 0); -} - -void TeachyTvBg2AnimController() -{ - u16 *tilemapBuffer; - u8 counter; - u32 offset2; - u32 offset; - u32 counter2; - - tilemapBuffer = (u16 *)GetBgTilemapBuffer(2u); - counter = 1; - do - { - offset2 = 2; - offset = 0x20 * counter; - counter2 = counter + 1; - do - { - tilemapBuffer[offset + offset2] = ((Random() & 3) << 10) + 0x301F; - offset2 = (offset2 + 1) << 0x18 >> 0x18; - } - while ( offset2 <= 0x1B ); - counter = counter2; - } - while ( counter2 << 0x18 >> 0x18 <= 0xCu ); - schedule_bg_copy_tilemap_to_vram(2u); -} - -- cgit v1.2.3 From f9f66ddeb428857f3e7c3d920fcce807948ef8ab Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Tue, 4 Jun 2019 06:28:00 +0800 Subject: sub_815B118 --- src/teachy_tv.c | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 750aa0dfb..48b72c995 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -43,7 +43,7 @@ extern void sub_815AC20(); void TeachyTvCreateAndRenderRbox(); void TeachyTvInitIo(); u8 TeachyTvSetupObjEventAndOam(); -extern void TeachyTvSetupPostBattleWindowAndObj(u8); +void TeachyTvSetupPostBattleWindowAndObj(u8); u8 TeachyTvSetupWindow(); void TeachyTvSetupScrollIndicatorArrowPair(); void TeachyTvSetWindowRegs(); @@ -344,3 +344,32 @@ void TeachyTvBg2AnimController() schedule_bg_copy_tilemap_to_vram(2u); } +extern void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 mode); + +void TeachyTvSetupPostBattleWindowAndObj(u8 taskId) +{ + u16 *v2 = gTasks[taskId].data; + int v1 = ((s16 *)v2)[1]; + struct Sprite *v3 = &gSprites[v1]; + int op; + + ClearWindowTilemap(1u); + TeachyTvClearWindowRegs(); + op = gTeachyTV_StaticResources.optionChosen; + if ( op >= 0 ) { + if ( op <= 3 ) + { + TeachyTvSetSpriteCoordsAndSwitchFrame(((char*)v2)[2], 0x78, 0x38, 0); + ChangeBgX(3u, 0x3000u, 1u); + ChangeBgY(3u, 0x3000u, 2u); + *((u8 *)gUnknown_203F450 + 0x4004) += 3; + *((u8 *)gUnknown_203F450 + 0x4005) -= 3; + } + else if ( op <= 5 ) + TeachyTvSetSpriteCoordsAndSwitchFrame(((char*)v2)[2], 0x78, 0x38, 0); + } + + v2[4] = 0; + v2[5] = 0; + TeachyTvGrassAnimationMain(taskId, v3->pos2.x, v3->pos2.y, 0, 1u); +} \ No newline at end of file -- cgit v1.2.3 From a9c9388cdd51216bdf5a5db125eaab0fc3163c67 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Tue, 4 Jun 2019 13:45:58 +0800 Subject: killed by large function --- src/teachy_tv.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 54 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 48b72c995..f70f1d130 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -5,6 +5,7 @@ #include "palette.h" #include "sprite.h" #include "menu_helpers.h" +#include "new_menu_helpers.h" #include "sound.h" #include "malloc.h" #include "sprite.h" @@ -14,6 +15,7 @@ #include "decompress.h" #include "window.h" #include "list_menu.h" +#include "item_menu.h" #include "item.h" #include "menu_indicators.h" #include "field_map_obj.h" @@ -50,7 +52,7 @@ void TeachyTvSetWindowRegs(); void TeachyTvSetupBg(); void TeachyTvLoadGraphic(); extern void TeachyTvPostBattleFadeControl(u8); -extern void sub_815B2C0(u8); +extern void TeachyTvOptionListController(u8); extern void VblankHblankHandlerSetZero(); extern void sub_812B1E0(u16); extern struct BgTemplate gUnknown_84792E0; @@ -63,6 +65,15 @@ extern struct SpritePalette gUnknown_83A5348; extern void sub_815BD80(void *); typedef struct Task Task; extern struct WindowTemplate gUnknown_84792F0; +extern void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId); +extern struct ListMenuTemplate gUnknown_8479368; +extern struct ListMenuItem gUnknown_8479340; +extern u8 ListMenuInitInternal(struct ListMenuTemplate *, u16 scrollOffset, u16 selectedRow); +void TeachyTvAudioByInput(s32, bool8, struct ListMenu *); +extern void sub_8055DC4(); +extern void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 mode); +extern const struct ScrollIndicatorArrowPairTemplate gUnknown_8479380; +extern void TeachyTvQuitFadeControlAndTaskDel(u8 taskId); void C2TeachyTv() @@ -156,7 +167,7 @@ void C2TeachyTvMainCallback() } else { - taskId = CreateTask(sub_815B2C0, 0); + taskId = CreateTask(TeachyTvOptionListController, 0); x = (u32)TeachyTvSetupWindow(); gTasks[taskId].data[0] = (x << 24) >> 24; gTasks[taskId].data[1] = TeachyTvSetupObjEventAndOam(); @@ -219,11 +230,6 @@ void TeachyTvCreateAndRenderRbox() CopyWindowToVram(0, 2u); } -extern struct ListMenuTemplate gUnknown_8479368; -extern struct ListMenuItem gUnknown_8479340; -extern u8 ListMenuInitInternal(struct ListMenuTemplate *, u16 scrollOffset, u16 selectedRow); -void TeachyTvAudioByInput(s32, bool8, struct ListMenu *); - u8 TeachyTvSetupWindow() { int hasItem; @@ -244,8 +250,6 @@ u8 TeachyTvSetupWindow() gTeachyTV_StaticResources.selectedRow); } -extern const struct ScrollIndicatorArrowPairTemplate gUnknown_8479380; - void TeachyTvSetupScrollIndicatorArrowPair() { int hasItem; @@ -344,8 +348,6 @@ void TeachyTvBg2AnimController() schedule_bg_copy_tilemap_to_vram(2u); } -extern void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 mode); - void TeachyTvSetupPostBattleWindowAndObj(u8 taskId) { u16 *v2 = gTasks[taskId].data; @@ -372,4 +374,44 @@ void TeachyTvSetupPostBattleWindowAndObj(u8 taskId) v2[4] = 0; v2[5] = 0; TeachyTvGrassAnimationMain(taskId, v3->pos2.x, v3->pos2.y, 0, 1u); -} \ No newline at end of file +} + +void TeachyTvInitTextPrinter(char *text) +{ + u8 spd; + gTextFlags.autoScroll = 0; + spd = GetTextSpeedSetting(); + AddTextPrinterParameterized2(0, 4u, (const u8 *)text, spd, 0, 1u, 0xCu, 3u); +} + +void TeachyTvFree() +{ + Free(gUnknown_203F450); + gUnknown_203F450 = NULL; + FreeAllWindowBuffers(); +} + +void TeachyTvQuitBeginFade(u8 taskId) +{ + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10u, 0); + gTasks[taskId].func = TeachyTvQuitFadeControlAndTaskDel; +} + +void TeachyTvQuitFadeControlAndTaskDel(u8 taskId) +{ + if ( !(gPaletteFade.active) ) + { + if ( *(u32 *)gUnknown_203F450 ) + { + SetMainCallback2(*(void (**)())gUnknown_203F450); + } + else + { + sub_8055DC4(); + SetMainCallback2((void (*)())gTeachyTV_StaticResources.callback); + } + TeachyTvFree(); + DestroyTask(taskId); + } +} + -- cgit v1.2.3 From e07151b34621ba17904871b17e2be8638b584d14 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Wed, 5 Jun 2019 08:19:12 +0800 Subject: 1 failed attempt + many more functions --- src/teachy_tv.c | 297 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 288 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/teachy_tv.c b/src/teachy_tv.c index f70f1d130..3549ec9b0 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -41,7 +41,7 @@ void C2TeachyTvMainCallback(); void VblankHandlerTeachyTv(); void sub_815ABC4(u8 mode, void (*cb)()); void sub_815ABFC(); -extern void sub_815AC20(); +void sub_815AC20(); void TeachyTvCreateAndRenderRbox(); void TeachyTvInitIo(); u8 TeachyTvSetupObjEventAndOam(); @@ -51,8 +51,8 @@ void TeachyTvSetupScrollIndicatorArrowPair(); void TeachyTvSetWindowRegs(); void TeachyTvSetupBg(); void TeachyTvLoadGraphic(); -extern void TeachyTvPostBattleFadeControl(u8); -extern void TeachyTvOptionListController(u8); +void TeachyTvPostBattleFadeControl(u8); +void TeachyTvOptionListController(u8); extern void VblankHblankHandlerSetZero(); extern void sub_812B1E0(u16); extern struct BgTemplate gUnknown_84792E0; @@ -65,7 +65,7 @@ extern struct SpritePalette gUnknown_83A5348; extern void sub_815BD80(void *); typedef struct Task Task; extern struct WindowTemplate gUnknown_84792F0; -extern void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId); +void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId); extern struct ListMenuTemplate gUnknown_8479368; extern struct ListMenuItem gUnknown_8479340; extern u8 ListMenuInitInternal(struct ListMenuTemplate *, u16 scrollOffset, u16 selectedRow); @@ -73,8 +73,15 @@ void TeachyTvAudioByInput(s32, bool8, struct ListMenu *); extern void sub_8055DC4(); extern void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 mode); extern const struct ScrollIndicatorArrowPairTemplate gUnknown_8479380; -extern void TeachyTvQuitFadeControlAndTaskDel(u8 taskId); - +void TeachyTvQuitFadeControlAndTaskDel(u8 taskId); +extern char gUnknown_841B83D; +extern bool16 sub_80BF518(u8 textPrinterId); +extern void _call_via_r1(s32 arg, void *func); +extern void (**gUnknown_8479548)(u8); +extern void TeachyTvClearBg1EndGraphicalText(); +extern void TeachyTvBackToOptionList(u8 taskId); +extern char * gUnknown_8479560; +extern char * gUnknown_8479578; void C2TeachyTv() { @@ -98,7 +105,8 @@ void sub_815ABC4(u8 mode, void (*cb)()) u16 v4 = 0; v3->mode = mode; v3->callback = cb; - if(!mode) { + if(!mode) + { v3->scrollOffset = v4; v3->selectedRow = v4; v3->optionChosen = 0; @@ -254,7 +262,8 @@ void TeachyTvSetupScrollIndicatorArrowPair() { int hasItem; hasItem = (u8)CheckBagHasItem(ITEM_TM_CASE, 1u); - if ( ! hasItem << 24 ) { + if ( ! hasItem << 24 ) + { u8 * temp = (u8 *)gUnknown_203F450; *((u8 *)temp + 0x4007) = 0xFF; } @@ -358,7 +367,8 @@ void TeachyTvSetupPostBattleWindowAndObj(u8 taskId) ClearWindowTilemap(1u); TeachyTvClearWindowRegs(); op = gTeachyTV_StaticResources.optionChosen; - if ( op >= 0 ) { + if ( op >= 0 ) + { if ( op <= 3 ) { TeachyTvSetSpriteCoordsAndSwitchFrame(((char*)v2)[2], 0x78, 0x38, 0); @@ -415,3 +425,272 @@ void TeachyTvQuitFadeControlAndTaskDel(u8 taskId) } } +#ifdef NONMATCHING +void TeachyTvOptionListController(u8 taskId) +{ + char *v2; + s32 v3; + + v2 = (char *)gTasks[taskId].data; + TeachyTvBg2AnimController(); + if ( !(gPaletteFade.active) ) + { + v3 = ListMenuHandleInput(*v2); + ListMenuGetScrollAndRow(*v2, &gTeachyTV_StaticResources.scrollOffset, &gTeachyTV_StaticResources.selectedRow); + if ( ((gMain.newKeys) & 4 && (gTeachyTV_StaticResources.callback != UseFameCheckerFromMenu)) + || (v3 == -2) ) + { + PlaySE(SE_SELECT); + TeachyTvQuitBeginFade(taskId); + } + else if ( v3 != -1 ) + { + PlaySE(SE_SELECT); + gTeachyTV_StaticResources.optionChosen = v3; + DestroyListMenu(*v2, &gTeachyTV_StaticResources.scrollOffset, &gTeachyTV_StaticResources.selectedRow); + TeachyTvClearWindowRegs(); + ClearWindowTilemap(1u); + schedule_bg_copy_tilemap_to_vram(0); + TeachyTvRemoveScrollIndicatorArrowPair(); + *((u16 *)v2 + 3) = 0; + *((u16 *)v2 + 2) = 0; + gTasks[taskId].func = TeachyTvRenderMsgAndSwitchClusterFuncs; + } + } +} + +#else +__attribute__((naked)) +void TeachyTvOptionListController(u8 taskId) +{ + asm_unified("\n\ + push {r4-r7,lr}\n\ + lsls r0, 24\n\ + lsrs r7, r0, 24\n\ + lsls r0, r7, 2\n\ + adds r0, r7\n\ + lsls r0, 3\n\ + ldr r1, _0815B31C @ =gTasks+0x8\n\ + adds r6, r0, r1\n\ + bl TeachyTvBg2AnimController\n\ + ldr r0, _0815B320 @ =gPaletteFade\n\ + ldrb r1, [r0, 0x7]\n\ + movs r0, 0x80\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _0815B37A\n\ + ldrb r0, [r6]\n\ + bl ListMenuHandleInput\n\ + adds r5, r0, 0\n\ + ldrb r0, [r6]\n\ + ldr r4, _0815B324 @ =gTeachyTV_StaticResources+6\n\ + adds r2, r4, 0x2\n\ + adds r1, r4, 0\n\ + bl ListMenuGetScrollAndRow\n\ + ldr r0, _0815B328 @ =gMain\n\ + ldrh r1, [r0, 0x2E]\n\ + movs r0, 0x4\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0815B30A\n\ + subs r0, r4, 0x6\n\ + ldr r1, [r0]\n\ + ldr r0, _0815B32C @ =UseFameCheckerFromMenu\n\ + cmp r1, r0\n\ + bne _0815B330\n\ +_0815B30A:\n\ + movs r0, 0x2\n\ + negs r0, r0\n\ + cmp r5, r0\n\ + beq _0815B330\n\ + adds r0, 0x1\n\ + cmp r5, r0\n\ + bne _0815B33E\n\ + b _0815B37A\n\ + .align 2, 0\n\ +_0815B31C: .4byte gTasks+0x8\n\ +_0815B320: .4byte gPaletteFade\n\ +_0815B324: .4byte gTeachyTV_StaticResources+6\n\ +_0815B328: .4byte gMain\n\ +_0815B32C: .4byte UseFameCheckerFromMenu\n\ +_0815B330:\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + adds r0, r7, 0\n\ + bl TeachyTvQuitBeginFade\n\ + b _0815B37A\n\ +_0815B33E:\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + ldr r2, _0815B380 @ =gTeachyTV_StaticResources\n\ + movs r4, 0\n\ + strb r5, [r2, 0x5]\n\ + ldrb r0, [r6]\n\ + adds r1, r2, 0x6\n\ + adds r2, 0x8\n\ + bl DestroyListMenu\n\ + bl TeachyTvClearWindowRegs\n\ + movs r0, 0x1\n\ + bl ClearWindowTilemap\n\ + movs r0, 0\n\ + bl schedule_bg_copy_tilemap_to_vram\n\ + bl TeachyTvRemoveScrollIndicatorArrowPair\n\ + strh r4, [r6, 0x6]\n\ + strh r4, [r6, 0x4]\n\ + ldr r1, _0815B384 @ =gTasks\n\ + lsls r0, r7, 2\n\ + adds r0, r7\n\ + lsls r0, 3\n\ + adds r0, r1\n\ + ldr r1, _0815B388 @ =TeachyTvRenderMsgAndSwitchClusterFuncs\n\ + str r1, [r0]\n\ +_0815B37A:\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_0815B380: .4byte gTeachyTV_StaticResources\n\ +_0815B384: .4byte gTasks\n\ +_0815B388: .4byte TeachyTvRenderMsgAndSwitchClusterFuncs\n\ + "); +} +#endif + +void TeachyTvClusFuncTransitionRenderBg2TeachyTvGraphicInitNpcPos(u8 taskId) +{ + u16 *data; + u32 counter; + + data = (u16 *)gTasks[taskId].data; + TeachyTvBg2AnimController(); + counter = data[2] + 1; + data[2] = counter; + if ( (s16)counter > 63 ) + { + CopyToBgTilemapBufferRect_ChangePalette(2u, (u8 *)gUnknown_203F450 + 0x3004, 0, 0, 0x20u, 0x20u, 0x11u); + TeachyTvSetSpriteCoordsAndSwitchFrame(((u8*)data)[2], 8, 0x38, 7u); + schedule_bg_copy_tilemap_to_vram(2u); + data[2] = 0; + ++data[3]; + PlayNewMapMusic(BGM_FRLG_FOLLOW_ME); + } +} + +void TeachyTvClusFuncClearBg2TeachyTvGraphic(u8 taskId) +{ + u16 *data; + u32 counter; + + data = (u16*)gTasks[taskId].data; + counter = data[2] + 1; + data[2] = counter; + if ( (s16)counter == 134 ) + { + FillBgTilemapBufferRect_Palette0(2u, 0, 2u, 1u, 0x1Au, 0xCu); + schedule_bg_copy_tilemap_to_vram(2u); + data[2] = 0; + ++data[3]; + } +} + +void TeachyTvClusFuncNpcMoveAndSetupTextPrinter(u8 taskId) +{ + s16 *data; + struct Sprite * spriteAddr; + + data = gTasks[taskId].data; + spriteAddr = &gSprites[data[1]]; + if ( data[2] != 35 ) + ++data[2]; + else { + if ( spriteAddr->pos2.x == 0x78 ) + { + StartSpriteAnim(&gSprites[data[1]], 0); + TeachyTvInitTextPrinter(&gUnknown_841B83D); + data[2] = 0; + ++data[3]; + } + else + ++spriteAddr->pos2.x; + } +} + +void TeachyTvClusFuncIdleIfTextPrinterIsActive(u8 taskId) +{ + u16* data = (u16 *)gTasks[taskId].data; + if ( !(sub_80BF518(0) << 16) ) + ++data[3]; +} + +void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId) +{ + u16 *data; + data = gTasks[taskId].data; + if ( gMain.newKeys & 2 ) + { + char *offset = ((char *)gUnknown_203F450 + 0x4006); + u32 v4 = 0; + offset[0] = 1; + TeachyTvSetSpriteCoordsAndSwitchFrame(*((char *)data + 2), 0, 0, 0); + FillWindowPixelBuffer(0, 0xCCu); + CopyWindowToVram(0, 2u); + TeachyTvClearBg1EndGraphicalText(); + data[2] = v4; + data[3] = v4; + gTasks[taskId].func = TeachyTvBackToOptionList; + } + else + { + void (***array)(u8) = &gUnknown_8479548; + void (**cluster)(u8) = array[(u8)gTeachyTV_StaticResources.optionChosen]; + _call_via_r1( + taskId, + cluster[(s16)data[3]]); + } +} + +void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen(u8 taskId) +{ + u16 *data = (u16 *)gTasks[taskId].data; + char ** texts = &gUnknown_8479560; + TeachyTvInitTextPrinter(texts[gTeachyTV_StaticResources.optionChosen]); + ++data[3]; +} + +void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen2(u8 taskId) +{ + u16 *data = (u16 *)gTasks[taskId].data; + char ** texts = &gUnknown_8479578; + TeachyTvInitTextPrinter(texts[gTeachyTV_StaticResources.optionChosen]); + ++data[3]; +} + +void TeachyTvClusFuncIdleIfTextPrinterIsActive2(u8 taskId) +{ + u16* data = (u16 *)gTasks[taskId].data; + if ( !(sub_80BF518(0) << 16) ) + ++data[3]; +} + +void TeachyTvClusFuncEraseTextWindowIfKeyPressed(u8 taskId) +{ + u16 *data; + data = (u16 *)gTasks[taskId].data; + if ( gMain.newKeys & 3 ) + { + FillWindowPixelBuffer(0, 0xCCu); + CopyWindowToVram(0, 2u); + ++data[3]; + } +} + +void TeachyTvClusFuncStartAnimNpcWalkIntoGrass(u8 taskId) +{ + u16 *data; + data = (u16 *)gTasks[taskId].data; + StartSpriteAnim(&gSprites[(s16)data[1]], 5u); + data[2] = 0; + data[4] = 0; + data[5] = 1; + ++data[3]; +} \ No newline at end of file -- cgit v1.2.3 From 82e763455c9f173c1baf1b008f87156736cf39f3 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Wed, 5 Jun 2019 11:13:47 +0800 Subject: 4 movement functions --- src/teachy_tv.c | 395 ++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 240 insertions(+), 155 deletions(-) (limited to 'src') diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 3549ec9b0..e14e61f82 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -24,6 +24,8 @@ #include "constants/songs.h" #include "constants/items.h" +typedef struct Task Task; + typedef struct { void (*callback)(); u8 mode; @@ -36,6 +38,22 @@ typedef struct { extern TeachyTv_s gTeachyTV_StaticResources; extern void * gUnknown_203F450; +extern const struct ScrollIndicatorArrowPairTemplate gUnknown_8479380; +extern char gUnknown_841B83D; +extern struct BgTemplate gUnknown_84792E0; +extern struct SpritePalette gUnknown_83A5348; +extern void (**gUnknown_8479548)(u8); +extern char * gUnknown_8479560; +extern char * gUnknown_8479578; +extern void *gUnknown_203F450; // tilemap pointer location +extern u8 gUnknown_8E86240; // tilemap +extern u8 gUnknown_8E86BE8; +extern u8 gUnknown_8E86D6C; +extern u8 gUnknown_8E86F98; // pal +extern struct ListMenuTemplate gUnknown_8479368; +extern struct ListMenuItem gUnknown_8479340; +extern struct WindowTemplate gUnknown_84792F0; + void C2TeachyTv(); void C2TeachyTvMainCallback(); void VblankHandlerTeachyTv(); @@ -53,35 +71,20 @@ void TeachyTvSetupBg(); void TeachyTvLoadGraphic(); void TeachyTvPostBattleFadeControl(u8); void TeachyTvOptionListController(u8); +void TeachyTvAudioByInput(s32, bool8, struct ListMenu *); +void TeachyTvQuitFadeControlAndTaskDel(u8 taskId); +void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId); + extern void VblankHblankHandlerSetZero(); extern void sub_812B1E0(u16); -extern struct BgTemplate gUnknown_84792E0; -extern void *gUnknown_203F450; // tilemap pointer location -extern u8 gUnknown_8E86240; // tilemap -extern u8 gUnknown_8E86BE8; -extern u8 gUnknown_8E86D6C; -extern u8 gUnknown_8E86F98; // pal -extern struct SpritePalette gUnknown_83A5348; extern void sub_815BD80(void *); -typedef struct Task Task; -extern struct WindowTemplate gUnknown_84792F0; -void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId); -extern struct ListMenuTemplate gUnknown_8479368; -extern struct ListMenuItem gUnknown_8479340; extern u8 ListMenuInitInternal(struct ListMenuTemplate *, u16 scrollOffset, u16 selectedRow); -void TeachyTvAudioByInput(s32, bool8, struct ListMenu *); extern void sub_8055DC4(); extern void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 mode); -extern const struct ScrollIndicatorArrowPairTemplate gUnknown_8479380; -void TeachyTvQuitFadeControlAndTaskDel(u8 taskId); -extern char gUnknown_841B83D; extern bool16 sub_80BF518(u8 textPrinterId); extern void _call_via_r1(s32 arg, void *func); -extern void (**gUnknown_8479548)(u8); extern void TeachyTvClearBg1EndGraphicalText(); extern void TeachyTvBackToOptionList(u8 taskId); -extern char * gUnknown_8479560; -extern char * gUnknown_8479578; void C2TeachyTv() { @@ -140,58 +143,58 @@ void C2TeachyTvMainCallback() state = gMain.state; // tried several ways to reproduce the control flow, but all failed. Now using goto if ( state == 0 ) - goto section_0; + goto RESETANDLOAD; else if ( state == 1 ) - goto section_1; + goto SETDMATOVRAM; else return; - section_0: - v4 = (u8 **)&gUnknown_203F450; - (*v4) = (u8*)AllocZeroed(0x4008u); - *(u32*)gUnknown_203F450 = (u32)state; - *((u8*)gUnknown_203F450 + 0x4006) = state; - *((u8*)gUnknown_203F450 + 0x4007) = 0xFF; - VblankHblankHandlerSetZero(); - clear_scheduled_bg_copies_to_vram(); - ScanlineEffect_Stop(); - FreeAllSpritePalettes(); - ResetPaletteFade(); - ResetSpriteData(); - ResetTasks(); - TeachyTvSetupBg(); - TeachyTvLoadGraphic(); - ++gMain.state; +RESETANDLOAD: + v4 = (u8 **)&gUnknown_203F450; + (*v4) = (u8*)AllocZeroed(0x4008u); + *(u32*)gUnknown_203F450 = (u32)state; + *((u8*)gUnknown_203F450 + 0x4006) = state; + *((u8*)gUnknown_203F450 + 0x4007) = 0xFF; + VblankHblankHandlerSetZero(); + clear_scheduled_bg_copies_to_vram(); + ScanlineEffect_Stop(); + FreeAllSpritePalettes(); + ResetPaletteFade(); + ResetSpriteData(); + ResetTasks(); + TeachyTvSetupBg(); + TeachyTvLoadGraphic(); + ++gMain.state; + return; +SETDMATOVRAM: + if( free_temp_tile_data_buffers_if_possible() == 1 ) return; - section_1: - if( free_temp_tile_data_buffers_if_possible() == 1 ) - return; - TeachyTvCreateAndRenderRbox(); - TeachyTvInitIo(); - if ( gTeachyTV_StaticResources.mode == 2 ) - { - taskId = CreateTask(TeachyTvPostBattleFadeControl, 0); - gTasks[taskId].data[1] = TeachyTvSetupObjEventAndOam(); - TeachyTvSetupPostBattleWindowAndObj(taskId); - } - else - { - taskId = CreateTask(TeachyTvOptionListController, 0); - x = (u32)TeachyTvSetupWindow(); - gTasks[taskId].data[0] = (x << 24) >> 24; - gTasks[taskId].data[1] = TeachyTvSetupObjEventAndOam(); - TeachyTvSetupScrollIndicatorArrowPair(); - PlayNewMapMusic(BGM_FRLG_TEACHY_TV); - TeachyTvSetWindowRegs(); - } - schedule_bg_copy_tilemap_to_vram(0); - schedule_bg_copy_tilemap_to_vram(1u); - schedule_bg_copy_tilemap_to_vram(2u); - schedule_bg_copy_tilemap_to_vram(3u); - sub_812B1E0(9); // help system something - BlendPalettes(0xFFFFFFFF, 0x10u, 0); - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10u, 0, 0); - SetVBlankCallback(VblankHandlerTeachyTv); - SetMainCallback2(C2TeachyTv); + TeachyTvCreateAndRenderRbox(); + TeachyTvInitIo(); + if ( gTeachyTV_StaticResources.mode == 2 ) + { + taskId = CreateTask(TeachyTvPostBattleFadeControl, 0); + gTasks[taskId].data[1] = TeachyTvSetupObjEventAndOam(); + TeachyTvSetupPostBattleWindowAndObj(taskId); + } + else + { + taskId = CreateTask(TeachyTvOptionListController, 0); + x = (u32)TeachyTvSetupWindow(); + gTasks[taskId].data[0] = (x << 24) >> 24; + gTasks[taskId].data[1] = TeachyTvSetupObjEventAndOam(); + TeachyTvSetupScrollIndicatorArrowPair(); + PlayNewMapMusic(BGM_FRLG_TEACHY_TV); + TeachyTvSetWindowRegs(); + } + schedule_bg_copy_tilemap_to_vram(0); + schedule_bg_copy_tilemap_to_vram(1u); + schedule_bg_copy_tilemap_to_vram(2u); + schedule_bg_copy_tilemap_to_vram(3u); + sub_812B1E0(9); // help system something + BlendPalettes(0xFFFFFFFF, 0x10u, 0); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10u, 0, 0); + SetVBlankCallback(VblankHandlerTeachyTv); + SetMainCallback2(C2TeachyTv); } void TeachyTvSetupBg() @@ -464,94 +467,94 @@ __attribute__((naked)) void TeachyTvOptionListController(u8 taskId) { asm_unified("\n\ - push {r4-r7,lr}\n\ - lsls r0, 24\n\ - lsrs r7, r0, 24\n\ - lsls r0, r7, 2\n\ - adds r0, r7\n\ - lsls r0, 3\n\ - ldr r1, _0815B31C @ =gTasks+0x8\n\ - adds r6, r0, r1\n\ - bl TeachyTvBg2AnimController\n\ - ldr r0, _0815B320 @ =gPaletteFade\n\ - ldrb r1, [r0, 0x7]\n\ - movs r0, 0x80\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0815B37A\n\ - ldrb r0, [r6]\n\ - bl ListMenuHandleInput\n\ - adds r5, r0, 0\n\ - ldrb r0, [r6]\n\ - ldr r4, _0815B324 @ =gTeachyTV_StaticResources+6\n\ - adds r2, r4, 0x2\n\ - adds r1, r4, 0\n\ - bl ListMenuGetScrollAndRow\n\ - ldr r0, _0815B328 @ =gMain\n\ - ldrh r1, [r0, 0x2E]\n\ - movs r0, 0x4\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0815B30A\n\ - subs r0, r4, 0x6\n\ - ldr r1, [r0]\n\ - ldr r0, _0815B32C @ =UseFameCheckerFromMenu\n\ - cmp r1, r0\n\ - bne _0815B330\n\ -_0815B30A:\n\ - movs r0, 0x2\n\ - negs r0, r0\n\ - cmp r5, r0\n\ - beq _0815B330\n\ - adds r0, 0x1\n\ - cmp r5, r0\n\ - bne _0815B33E\n\ - b _0815B37A\n\ - .align 2, 0\n\ -_0815B31C: .4byte gTasks+0x8\n\ -_0815B320: .4byte gPaletteFade\n\ -_0815B324: .4byte gTeachyTV_StaticResources+6\n\ -_0815B328: .4byte gMain\n\ -_0815B32C: .4byte UseFameCheckerFromMenu\n\ -_0815B330:\n\ - movs r0, 0x5\n\ - bl PlaySE\n\ - adds r0, r7, 0\n\ - bl TeachyTvQuitBeginFade\n\ - b _0815B37A\n\ -_0815B33E:\n\ - movs r0, 0x5\n\ - bl PlaySE\n\ - ldr r2, _0815B380 @ =gTeachyTV_StaticResources\n\ - movs r4, 0\n\ - strb r5, [r2, 0x5]\n\ - ldrb r0, [r6]\n\ - adds r1, r2, 0x6\n\ - adds r2, 0x8\n\ - bl DestroyListMenu\n\ - bl TeachyTvClearWindowRegs\n\ - movs r0, 0x1\n\ - bl ClearWindowTilemap\n\ - movs r0, 0\n\ - bl schedule_bg_copy_tilemap_to_vram\n\ - bl TeachyTvRemoveScrollIndicatorArrowPair\n\ - strh r4, [r6, 0x6]\n\ - strh r4, [r6, 0x4]\n\ - ldr r1, _0815B384 @ =gTasks\n\ - lsls r0, r7, 2\n\ - adds r0, r7\n\ - lsls r0, 3\n\ - adds r0, r1\n\ - ldr r1, _0815B388 @ =TeachyTvRenderMsgAndSwitchClusterFuncs\n\ - str r1, [r0]\n\ -_0815B37A:\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_0815B380: .4byte gTeachyTV_StaticResources\n\ -_0815B384: .4byte gTasks\n\ -_0815B388: .4byte TeachyTvRenderMsgAndSwitchClusterFuncs\n\ + push {r4-r7,lr}\n\ + lsls r0, 24\n\ + lsrs r7, r0, 24\n\ + lsls r0, r7, 2\n\ + adds r0, r7\n\ + lsls r0, 3\n\ + ldr r1, _0815B31C @ =gTasks+0x8\n\ + adds r6, r0, r1\n\ + bl TeachyTvBg2AnimController\n\ + ldr r0, _0815B320 @ =gPaletteFade\n\ + ldrb r1, [r0, 0x7]\n\ + movs r0, 0x80\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _0815B37A\n\ + ldrb r0, [r6]\n\ + bl ListMenuHandleInput\n\ + adds r5, r0, 0\n\ + ldrb r0, [r6]\n\ + ldr r4, _0815B324 @ =gTeachyTV_StaticResources+6\n\ + adds r2, r4, 0x2\n\ + adds r1, r4, 0\n\ + bl ListMenuGetScrollAndRow\n\ + ldr r0, _0815B328 @ =gMain\n\ + ldrh r1, [r0, 0x2E]\n\ + movs r0, 0x4\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0815B30A\n\ + subs r0, r4, 0x6\n\ + ldr r1, [r0]\n\ + ldr r0, _0815B32C @ =UseFameCheckerFromMenu\n\ + cmp r1, r0\n\ + bne _0815B330\n\ + _0815B30A:\n\ + movs r0, 0x2\n\ + negs r0, r0\n\ + cmp r5, r0\n\ + beq _0815B330\n\ + adds r0, 0x1\n\ + cmp r5, r0\n\ + bne _0815B33E\n\ + b _0815B37A\n\ + .align 2, 0\n\ + _0815B31C: .4byte gTasks+0x8\n\ + _0815B320: .4byte gPaletteFade\n\ + _0815B324: .4byte gTeachyTV_StaticResources+6\n\ + _0815B328: .4byte gMain\n\ + _0815B32C: .4byte UseFameCheckerFromMenu\n\ + _0815B330:\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + adds r0, r7, 0\n\ + bl TeachyTvQuitBeginFade\n\ + b _0815B37A\n\ + _0815B33E:\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + ldr r2, _0815B380 @ =gTeachyTV_StaticResources\n\ + movs r4, 0\n\ + strb r5, [r2, 0x5]\n\ + ldrb r0, [r6]\n\ + adds r1, r2, 0x6\n\ + adds r2, 0x8\n\ + bl DestroyListMenu\n\ + bl TeachyTvClearWindowRegs\n\ + movs r0, 0x1\n\ + bl ClearWindowTilemap\n\ + movs r0, 0\n\ + bl schedule_bg_copy_tilemap_to_vram\n\ + bl TeachyTvRemoveScrollIndicatorArrowPair\n\ + strh r4, [r6, 0x6]\n\ + strh r4, [r6, 0x4]\n\ + ldr r1, _0815B384 @ =gTasks\n\ + lsls r0, r7, 2\n\ + adds r0, r7\n\ + lsls r0, 3\n\ + adds r0, r1\n\ + ldr r1, _0815B388 @ =TeachyTvRenderMsgAndSwitchClusterFuncs\n\ + str r1, [r0]\n\ + _0815B37A:\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ + _0815B380: .4byte gTeachyTV_StaticResources\n\ + _0815B384: .4byte gTasks\n\ + _0815B388: .4byte TeachyTvRenderMsgAndSwitchClusterFuncs\n\ "); } #endif @@ -693,4 +696,86 @@ void TeachyTvClusFuncStartAnimNpcWalkIntoGrass(u8 taskId) data[4] = 0; data[5] = 1; ++data[3]; +} + +void TeachyTvClusFuncDudeMoveUp(u8 taskId) +{ + s16 *data; + struct Sprite *v3; + int temp; + int v4; + + data = gTasks[taskId].data; + v3 = &gSprites[data[1]]; + ChangeBgY(3u, 0x100u, 2u); + v4 = (u16)data[2] + 1; + ((u16*)data)[2] = v4; + if ( !( v4 % 16 ) ) + { + --((u8*)gUnknown_203F450)[0x4005]; + TeachyTvGrassAnimationMain(taskId, v3->pos2.x, v3->pos2.y, 0, 0); + } + if ( data[2] == 0x30 ) + { + data[2] = 0; + data[4] = -1; + data[5] = 0; + StartSpriteAnim(v3, 7u); + ++data[3]; + } +} + +void TeachyTvClusFuncDudeMoveRight(u8 taskId) +{ + u16 *data; + struct Sprite *v3; + int v4; + + data = (u16 *)gTasks[taskId].data; + v3 = &gSprites[(s16)data[1]]; + ChangeBgX(3u, 0x100u, 1u); + v4 = data[2] + 1; + data[2] = v4; + if ( !(v4 & 0xF) ) + ++((u8*)gUnknown_203F450)[0x4004]; + if ( !((((s16*)data)[2] + 8) & 0xF) ) + TeachyTvGrassAnimationMain(taskId, v3->pos2.x + 8, v3->pos2.y, 0, 0); + if ( (s16)data[2] == 0x30 ) + { + data[2] = 0; + data[4] = 0; + data[5] = 0; + StartSpriteAnim(v3, 3u); + ++data[3]; + } +} + +void TeachyTvClusFuncDudeTurnLeft(u8 taskId) +{ + s16 *data; + struct Sprite *v3; + + data = gTasks[taskId].data; + v3 = &gSprites[data[1]]; + StartSpriteAnim(v3, 6u); + ++(u16)data[3]; + data[4] = 0; + data[5] = 0; + TeachyTvGrassAnimationMain(taskId, v3->pos2.x, v3->pos2.y, 0, 0); +} + +void TeachyTvClusFuncDudeMoveLeft(u8 taskId) +{ + s16 *data; + struct Sprite *v2; + + data = gTasks[taskId].data; + v2 = &gSprites[data[1]]; + + if ( !(v2->pos2.x & 0xF) ) + TeachyTvGrassAnimationMain(taskId, v2->pos2.x - 8, v2->pos2.y, 0, 0); + if ( v2->pos2.x == 8 ) + ++(u16)data[3]; + else + --v2->pos2.x; } \ No newline at end of file -- cgit v1.2.3 From 1ffb8f667ca0408a84e79203146bc20b2b6e0412 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Wed, 5 Jun 2019 11:26:58 +0800 Subject: sub_815B908 --- src/teachy_tv.c | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/teachy_tv.c b/src/teachy_tv.c index e14e61f82..0513360cb 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -53,6 +53,7 @@ extern u8 gUnknown_8E86F98; // pal extern struct ListMenuTemplate gUnknown_8479368; extern struct ListMenuItem gUnknown_8479340; extern struct WindowTemplate gUnknown_84792F0; +extern u8 gUnknown_8479590; void C2TeachyTv(); void C2TeachyTvMainCallback(); @@ -74,6 +75,7 @@ void TeachyTvOptionListController(u8); void TeachyTvAudioByInput(s32, bool8, struct ListMenu *); void TeachyTvQuitFadeControlAndTaskDel(u8 taskId); void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId); +void TeachyTvClearBg1EndGraphicalText(); extern void VblankHblankHandlerSetZero(); extern void sub_812B1E0(u16); @@ -83,7 +85,6 @@ extern void sub_8055DC4(); extern void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 mode); extern bool16 sub_80BF518(u8 textPrinterId); extern void _call_via_r1(s32 arg, void *func); -extern void TeachyTvClearBg1EndGraphicalText(); extern void TeachyTvBackToOptionList(u8 taskId); void C2TeachyTv() @@ -778,4 +779,31 @@ void TeachyTvClusFuncDudeMoveLeft(u8 taskId) ++(u16)data[3]; else --v2->pos2.x; +} + +void TeachyTvClusFuncRenderAndRemoveBg1EndGraphic(u8 taskId) +{ + s16 *data; + int temp; + + data = gTasks[taskId].data; + if ( !data[2] ) + { + CopyToBgTilemapBufferRect_ChangePalette(1u, &gUnknown_8479590, 0x14u, 0xAu, 8u, 2u, 0x11u); + schedule_bg_copy_tilemap_to_vram(1u); + } + temp = (u16)data[2] + 1; + data[2] = temp; + if ( (s16)temp > 126 ) + { + TeachyTvClearBg1EndGraphicalText(); + (u16)data[2] = 0; + ++(u16)data[3]; + } +} + +void TeachyTvClearBg1EndGraphicalText() +{ + FillBgTilemapBufferRect_Palette0(1u, 0, 0x14u, 0xAu, 8u, 2u); + schedule_bg_copy_tilemap_to_vram(1u); } \ No newline at end of file -- cgit v1.2.3 From 66b8dafbfce85a5976f97db464c5001a4347a8fb Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Wed, 5 Jun 2019 13:25:28 +0800 Subject: small functions --- src/teachy_tv.c | 94 +++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 84 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 0513360cb..d274e18ec 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -45,15 +45,16 @@ extern struct SpritePalette gUnknown_83A5348; extern void (**gUnknown_8479548)(u8); extern char * gUnknown_8479560; extern char * gUnknown_8479578; -extern void *gUnknown_203F450; // tilemap pointer location -extern u8 gUnknown_8E86240; // tilemap +extern void *gUnknown_203F450; +extern u8 gUnknown_8E86240; extern u8 gUnknown_8E86BE8; extern u8 gUnknown_8E86D6C; -extern u8 gUnknown_8E86F98; // pal +extern u8 gUnknown_8E86F98; extern struct ListMenuTemplate gUnknown_8479368; extern struct ListMenuItem gUnknown_8479340; extern struct WindowTemplate gUnknown_84792F0; extern u8 gUnknown_8479590; +extern u8 gUnknown_8479390; void C2TeachyTv(); void C2TeachyTvMainCallback(); @@ -75,17 +76,21 @@ void TeachyTvOptionListController(u8); void TeachyTvAudioByInput(s32, bool8, struct ListMenu *); void TeachyTvQuitFadeControlAndTaskDel(u8 taskId); void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId); -void TeachyTvClearBg1EndGraphicalText(); +void TeachyTvClearBg1EndGraphicText(); +void TeachyTvBackToOptionList(u8 taskId); +void TeachyTvSetupBagItemsByOptionChosen(); +void TeachyTvPrepBattle(u8 taskId); +void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 mode); extern void VblankHblankHandlerSetZero(); extern void sub_812B1E0(u16); extern void sub_815BD80(void *); extern u8 ListMenuInitInternal(struct ListMenuTemplate *, u16 scrollOffset, u16 selectedRow); extern void sub_8055DC4(); -extern void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 mode); extern bool16 sub_80BF518(u8 textPrinterId); extern void _call_via_r1(s32 arg, void *func); -extern void TeachyTvBackToOptionList(u8 taskId); +extern void sub_810B108(u8); + void C2TeachyTv() { @@ -638,7 +643,7 @@ void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId) TeachyTvSetSpriteCoordsAndSwitchFrame(*((char *)data + 2), 0, 0, 0); FillWindowPixelBuffer(0, 0xCCu); CopyWindowToVram(0, 2u); - TeachyTvClearBg1EndGraphicalText(); + TeachyTvClearBg1EndGraphicText(); data[2] = v4; data[3] = v4; gTasks[taskId].func = TeachyTvBackToOptionList; @@ -796,14 +801,83 @@ void TeachyTvClusFuncRenderAndRemoveBg1EndGraphic(u8 taskId) data[2] = temp; if ( (s16)temp > 126 ) { - TeachyTvClearBg1EndGraphicalText(); + TeachyTvClearBg1EndGraphicText(); (u16)data[2] = 0; ++(u16)data[3]; } } -void TeachyTvClearBg1EndGraphicalText() +void TeachyTvClearBg1EndGraphicText() { FillBgTilemapBufferRect_Palette0(1u, 0, 0x14u, 0xAu, 8u, 2u); schedule_bg_copy_tilemap_to_vram(1u); -} \ No newline at end of file +} + +void TeachyTvBackToOptionList(u8 taskId) +{ + s16 *data; + s32 temp; + + data = gTasks[taskId].data; + if ( !data[2] ) + PlayNewMapMusic(BGM_FRLG_TEACHY_TV); + TeachyTvBg2AnimController(); + temp = (u16)data[2] + 1; + data[2] = temp; + if ( (s16)temp > 0x3F ) + { + data[2] = 0; + data[3] = 0; + *data = TeachyTvSetupWindow(); + gTasks[taskId].func = TeachyTvOptionListController; + PutWindowTilemap(0); + TeachyTvSetupScrollIndicatorArrowPair(); + TeachyTvSetWindowRegs(); + schedule_bg_copy_tilemap_to_vram(0); + ChangeBgX(3u, 0, 0); + ChangeBgY(3u, 0, 0); + ChangeBgX(3u, 0x1000u, 2u); + ChangeBgY(3u, 0x2800u, 1u); + ((u8*)gUnknown_203F450)[0x4004] = 0; + ((u8*)gUnknown_203F450)[0x4005] = 3; + ((u8*)gUnknown_203F450)[0x4006] = 0; + } +} + +void TeachyTvChainTaskBattleOrFadeByOptionChosen(u8 taskId) +{ + int op = gTeachyTV_StaticResources.optionChosen; + if( op < 0 ) + return; + if ( op <= 3 ) + { + TeachyTvPrepBattle(taskId); + + } + else if ( op <= 5 ) + { + *((void(**)())gUnknown_203F450) = TeachyTvSetupBagItemsByOptionChosen; + TeachyTvQuitBeginFade(taskId); + } +} + +void TeachyTvSetupBagItemsByOptionChosen() +{ + if ( gTeachyTV_StaticResources.optionChosen == 4 ) + sub_810B108(0xAu); + else + sub_810B108(9u); +} + +void TeachyTvPostBattleFadeControl(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + if ( !(gPaletteFade.active) ) + { + u8* funcIdx = &gUnknown_8479390; + int arg = funcIdx[gTeachyTV_StaticResources.optionChosen]; + data[3] = arg; + gTasks[taskId].func = TeachyTvRenderMsgAndSwitchClusterFuncs; + } +} + -- cgit v1.2.3 From 39e7cab3680376153b094c390e96f62ba9ec0539 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Wed, 5 Jun 2019 14:51:58 +0800 Subject: grass anim main function down --- src/teachy_tv.c | 45 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 43 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/teachy_tv.c b/src/teachy_tv.c index d274e18ec..56c9e25cf 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -55,6 +55,8 @@ extern struct ListMenuItem gUnknown_8479340; extern struct WindowTemplate gUnknown_84792F0; extern u8 gUnknown_8479590; extern u8 gUnknown_8479390; +extern struct SubspriteTable gUnknown_84795B8; +extern struct SpriteTemplate *gUnknown_83A0010; void C2TeachyTv(); void C2TeachyTvMainCallback(); @@ -81,10 +83,12 @@ void TeachyTvBackToOptionList(u8 taskId); void TeachyTvSetupBagItemsByOptionChosen(); void TeachyTvPrepBattle(u8 taskId); void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 mode); +void TeachyTvLoadBg3Map(void *); +u8 TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj(s16 x, s16 y); +void TeachyTvGrassAnimationObjCallback(struct Sprite *sprite); extern void VblankHblankHandlerSetZero(); extern void sub_812B1E0(u16); -extern void sub_815BD80(void *); extern u8 ListMenuInitInternal(struct ListMenuTemplate *, u16 scrollOffset, u16 selectedRow); extern void sub_8055DC4(); extern bool16 sub_80BF518(u8 textPrinterId); @@ -234,7 +238,7 @@ void TeachyTvLoadGraphic() LoadCompressedPalette(&gUnknown_8E86F98, 0, 0x80u); LoadPalette(&src, 0, 2u); LoadSpritePalette((struct SpritePalette *)&gUnknown_83A5348); - sub_815BD80((u8 *)gUnknown_203F450 + 0x2004); + TeachyTvLoadBg3Map((u8 *)gUnknown_203F450 + 0x2004); } void TeachyTvCreateAndRenderRbox() @@ -881,3 +885,40 @@ void TeachyTvPostBattleFadeControl(u8 taskId) } } +void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 mode) +{ + u8 subprio; + int res; + struct Sprite *obj; + int objId; + struct SpriteTemplate **objTemAddr; + + subprio = subpriority; + if ( ((u8*)gUnknown_203F450)[0x4006] != 1 ) + { + res = TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj( + (u32)((x << 16) - 0x100000) >> 16, + y); + if ( res << 24 ) + { + objTemAddr = &gUnknown_83A0010; + objId = CreateSprite(*(objTemAddr+4), 0, 0, subprio); + obj = gSprites + objId; + obj->pos2.x = x; + obj->pos2.y = y + 8; + obj->callback = TeachyTvGrassAnimationObjCallback; + obj->data[0] = taskId; + if ( mode == 1 ) + { + SeekSpriteAnim(obj, 4u); + obj->oam.priority = 2; + } + else + { + SetSubspriteTables(obj, &gUnknown_84795B8); + obj->subspriteTableNum = 0; + obj->subspriteMode = 1; + } + } + } +} \ No newline at end of file -- cgit v1.2.3 From a827ac6c8f37fd7a8a5f8850ab54f386dcafcc88 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Thu, 6 Jun 2019 01:40:11 +0800 Subject: map functions are coming --- src/teachy_tv.c | 134 +++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 119 insertions(+), 15 deletions(-) (limited to 'src') diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 56c9e25cf..00df2807e 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -23,17 +23,20 @@ #include "text.h" #include "constants/songs.h" #include "constants/items.h" +#include "event_data.h" +#include "load_save.h" +#include "battle_transition.h" +#include "battle_2.h" +#include "battle.h" typedef struct Task Task; - typedef struct { void (*callback)(); u8 mode; u8 optionChosen; u16 scrollOffset; u16 selectedRow; - u8 param4; - u8 filler; + u16 filler; } TeachyTv_s; extern TeachyTv_s gTeachyTV_StaticResources; @@ -57,10 +60,11 @@ extern u8 gUnknown_8479590; extern u8 gUnknown_8479390; extern struct SubspriteTable gUnknown_84795B8; extern struct SpriteTemplate *gUnknown_83A0010; +extern u8 gUnknown_84795C8; -void C2TeachyTv(); -void C2TeachyTvMainCallback(); -void VblankHandlerTeachyTv(); +void TeachyTvCallback(); +void TeachyTvMainCallback(); +void TeachyTvVblankHandler(); void sub_815ABC4(u8 mode, void (*cb)()); void sub_815ABFC(); void sub_815AC20(); @@ -86,6 +90,8 @@ void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 m void TeachyTvLoadBg3Map(void *); u8 TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj(s16 x, s16 y); void TeachyTvGrassAnimationObjCallback(struct Sprite *sprite); +void TeachyTvRestorePlayerPartyCallback(); +void TeachyTvPreBattleAnimAndSetBattleCallback(u8 taskId); extern void VblankHblankHandlerSetZero(); extern void sub_812B1E0(u16); @@ -94,9 +100,9 @@ extern void sub_8055DC4(); extern bool16 sub_80BF518(u8 textPrinterId); extern void _call_via_r1(s32 arg, void *func); extern void sub_810B108(u8); +extern void sub_8159F40(); - -void C2TeachyTv() +void TeachyTvCallback() { RunTasks(); AnimateSprites(); @@ -105,7 +111,7 @@ void C2TeachyTv() UpdatePaletteFade(); } -void VblankHandlerTeachyTv() +void TeachyTvVblankHandler() { LoadOam(); ProcessSpriteCopyRequests(); @@ -126,7 +132,7 @@ void sub_815ABC4(u8 mode, void (*cb)()) } if(mode == 1) v3->mode = 0; - SetMainCallback2(C2TeachyTvMainCallback); + SetMainCallback2(TeachyTvMainCallback); } void sub_815ABFC() @@ -142,7 +148,7 @@ void sub_815AC20() gTeachyTV_StaticResources.mode = 1; } -void C2TeachyTvMainCallback() +void TeachyTvMainCallback() { int state; int taskId; @@ -151,7 +157,6 @@ void C2TeachyTvMainCallback() u32 x; state = gMain.state; - // tried several ways to reproduce the control flow, but all failed. Now using goto if ( state == 0 ) goto RESETANDLOAD; else if ( state == 1 ) @@ -203,8 +208,8 @@ SETDMATOVRAM: sub_812B1E0(9); // help system something BlendPalettes(0xFFFFFFFF, 0x10u, 0); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10u, 0, 0); - SetVBlankCallback(VblankHandlerTeachyTv); - SetMainCallback2(C2TeachyTv); + SetVBlankCallback(TeachyTvVblankHandler); + SetMainCallback2(TeachyTvCallback); } void TeachyTvSetupBg() @@ -921,4 +926,103 @@ void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 m } } } -} \ No newline at end of file +} + +void TeachyTvGrassAnimationObjCallback(struct Sprite *sprite) +{ + u32 diff1, diff2; + s16 *data = gTasks[sprite->data[0]].data; + struct Sprite *objAddr = &gSprites[data[1]]; + if(((u8*)gUnknown_203F450)[0x4006] == 1) + DestroySprite(sprite); + else { + if(sprite->animCmdIndex == 0) + sprite->subspriteTableNum = 1; + else + sprite->subspriteTableNum = 0; + sprite->pos2.x += (u16)data[4]; + sprite->pos2.y += (u16)data[5]; + if(sprite->animEnded == 0) + return; + sprite->subpriority = 0; + diff1 = (u16)(sprite->pos2.x - objAddr->pos2.x); + diff2 = (u16)(sprite->pos2.y - objAddr->pos2.y); + diff1 = ((diff1 << 0x10)+0xF0000) >> 0x10; + if(diff1 <= 0x1E) + { + if((s16)diff2 > -0x10) + { + if((s16)diff2 <= 0x17) + return; + } + } + DestroySprite(sprite); + } +} + +u8 TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj(s16 x, s16 y) +{ + u8 * arr, *ptr; + int a, b; + if( (x < 0) || (y < 0) ) + return 0; + arr = &gUnknown_84795C8; + ptr = gUnknown_203F450; + a = ((y >> 4) + ptr[0x4005]) << 4; + b = ((x >> 4) + ptr[0x4004]); + return arr[a+b]; +} + +void TeachyTvPrepBattle(u8 taskId) +{ + s16 *data; + + taskId = taskId; + data = gTasks[taskId].data; + TeachyTvFree(); + gSpecialVar_0x8004 = gTeachyTV_StaticResources.optionChosen; + gMain.savedCallback = TeachyTvRestorePlayerPartyCallback; + SavePlayerParty(); + sub_8159F40(); + PlayMapChosenOrBattleBGM(MUS_DUMMY); + if ( !gTeachyTV_StaticResources.optionChosen ) + data[6] = 9; + else + data[6] = 8; + data[7] = 0; + gTasks[taskId].func = TeachyTvPreBattleAnimAndSetBattleCallback; +} + +void TeachyTvPreBattleAnimAndSetBattleCallback(u8 taskId) +{ + s16 *data; + int temp; + + data = gTasks[taskId].data; + switch(data[7]) + { + case 0: + sub_80D08B8(*((u8*)data + 12)); + ++data[7]; + break; + case 1: + temp = sub_80D08F8(); + if ( temp << 24 ) + { + SetMainCallback2(sub_800FD9C); + DestroyTask(taskId); + } + break; + } +} + +void TeachyTvRestorePlayerPartyCallback() +{ + LoadPlayerParty(); + if ( gUnknown_2023E8A == 3 ) + sub_815AC20(); + else + PlayNewMapMusic(BGM_FRLG_FOLLOW_ME); + sub_815ABFC(); +} + -- cgit v1.2.3 From 23a5cf1e90ef2e4422ded89f9ed4e4010ba98c6e Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Thu, 6 Jun 2019 06:38:55 +0800 Subject: 3 fails and 2 are not attempted --- src/teachy_tv.c | 603 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 602 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 00df2807e..7fd095f1f 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -8,7 +8,6 @@ #include "new_menu_helpers.h" #include "sound.h" #include "malloc.h" -#include "sprite.h" #include "scanline_effect.h" #include "bg.h" #include "gpu_regs.h" @@ -28,6 +27,7 @@ #include "battle_transition.h" #include "battle_2.h" #include "battle.h" +#include "global.fieldmap.h" typedef struct Task Task; typedef struct { @@ -92,6 +92,12 @@ u8 TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj(s16 x, s16 y); void TeachyTvGrassAnimationObjCallback(struct Sprite *sprite); void TeachyTvRestorePlayerPartyCallback(); void TeachyTvPreBattleAnimAndSetBattleCallback(u8 taskId); +void TeachyTvLoadMapTilesetToBuffer(struct Tileset *ts, u8 *dstBuffer, u16 size); +void TeachyTvPushBackNewMapPalIndexArrayEntry(struct MapData *mStruct, u16 *buf1, u8 *palIndexArray, u16 mapEntry, u16 offset); +void TeachyTvComputeMapTilesFromTilesetAndMetaTiles(u16 *metaTilesArray, u8 *blockBuf, u8 *tileset); +void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 *tileset, u8 metaTile); +u16 TeachyTvComputePalIndexArrayEntryByMetaTile(u8 *palIndexArrayBuf, u16 metaTile); +void TeachyTvLoadMapPalette(struct MapData *mStruct, u8 *palIndexArray); extern void VblankHblankHandlerSetZero(); extern void sub_812B1E0(u16); @@ -1026,3 +1032,598 @@ void TeachyTvRestorePlayerPartyCallback() sub_815ABFC(); } +NAKED +void TeachyTvLoadBg3Map(void *buffer) +{ + asm_unified("\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x1C\n\ + str r0, [sp, 0x4]\n\ + movs r0, 0\n\ + str r0, [sp, 0x10]\n\ + ldr r1, _0815BE1C @ =Route1_Layout\n\ + mov r8, r1\n\ + movs r0, 0x80\n\ + lsls r0, 4\n\ + bl AllocZeroed\n\ + adds r6, r0, 0\n\ + movs r0, 0x80\n\ + lsls r0, 8\n\ + bl AllocZeroed\n\ + str r0, [sp, 0x8]\n\ + movs r0, 0x10\n\ + bl Alloc\n\ + str r0, [sp, 0xC]\n\ + movs r1, 0xFF\n\ + movs r2, 0x10\n\ + bl memset\n\ + mov r2, r8\n\ + ldr r0, [r2, 0x10]\n\ + movs r2, 0xA0\n\ + lsls r2, 2\n\ + ldr r1, [sp, 0x8]\n\ + bl TeachyTvLoadMapTilesetToBuffer\n\ + mov r3, r8\n\ + ldr r0, [r3, 0x14]\n\ + ldr r2, [sp, 0x8]\n\ + movs r3, 0xA0\n\ + lsls r3, 7\n\ + adds r1, r2, r3\n\ + movs r2, 0xC0\n\ + lsls r2, 1\n\ + bl TeachyTvLoadMapTilesetToBuffer\n\ + movs r4, 0\n\ + _0815BDDE:\n\ + movs r2, 0\n\ + adds r0, r4, 0x6\n\ + str r0, [sp, 0x18]\n\ + lsls r1, r4, 4\n\ + mov r10, r1\n\ + lsls r3, r4, 6\n\ + mov r9, r3\n\ + adds r4, 0x1\n\ + str r4, [sp, 0x14]\n\ + _0815BDF0:\n\ + mov r1, r8\n\ + ldr r0, [r1]\n\ + ldr r3, [sp, 0x18]\n\ + muls r0, r3\n\ + ldr r1, [r1, 0xC]\n\ + adds r0, r2, r0\n\ + lsls r0, 1\n\ + adds r0, r1\n\ + ldrh r1, [r0, 0x10]\n\ + ldr r3, _0815BE20 @ =0x000003ff\n\ + adds r0, r3, 0\n\ + adds r4, r0, 0\n\ + ands r4, r1\n\ + movs r3, 0\n\ + mov r0, r10\n\ + adds r1, r0, r2\n\ + lsls r5, r2, 1\n\ + adds r7, r2, 0x1\n\ + cmp r3, r1\n\ + bge _0815BE3C\n\ + ldrh r0, [r6]\n\ + b _0815BE34\n\ + .align 2, 0\n\ + _0815BE1C: .4byte Route1_Layout\n\ + _0815BE20: .4byte 0x000003ff\n\ + _0815BE24:\n\ + adds r0, r3, 0x1\n\ + lsls r0, 16\n\ + lsrs r3, r0, 16\n\ + cmp r3, r1\n\ + bge _0815BE3C\n\ + lsls r0, r3, 1\n\ + adds r0, r6\n\ + ldrh r0, [r0]\n\ + _0815BE34:\n\ + cmp r0, 0\n\ + beq _0815BE46\n\ + cmp r0, r4\n\ + bne _0815BE24\n\ + _0815BE3C:\n\ + lsls r0, r3, 1\n\ + adds r0, r6\n\ + ldrh r0, [r0]\n\ + cmp r0, 0\n\ + bne _0815BE56\n\ + _0815BE46:\n\ + lsls r0, r3, 1\n\ + adds r0, r6\n\ + strh r4, [r0]\n\ + ldr r0, [sp, 0x10]\n\ + adds r0, 0x1\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + str r0, [sp, 0x10]\n\ + _0815BE56:\n\ + mov r2, r9\n\ + adds r1, r2, r5\n\ + lsls r1, 1\n\ + ldr r0, [sp, 0x4]\n\ + adds r1, r0, r1\n\ + str r3, [sp]\n\ + mov r0, r8\n\ + ldr r2, [sp, 0xC]\n\ + adds r3, r4, 0\n\ + bl TeachyTvPushBackNewMapPalIndexArrayEntry\n\ + lsls r0, r7, 16\n\ + lsrs r2, r0, 16\n\ + cmp r2, 0xF\n\ + bls _0815BDF0\n\ + ldr r1, [sp, 0x14]\n\ + lsls r0, r1, 16\n\ + lsrs r4, r0, 16\n\ + cmp r4, 0x8\n\ + bls _0815BDDE\n\ + ldr r2, [sp, 0x10]\n\ + lsls r0, r2, 7\n\ + bl Alloc\n\ + adds r7, r0, 0\n\ + movs r0, 0x80\n\ + bl Alloc\n\ + adds r5, r0, 0\n\ + movs r4, 0\n\ + ldr r3, [sp, 0x10]\n\ + lsls r3, 23\n\ + mov r9, r3\n\ + ldr r0, [sp, 0x10]\n\ + cmp r4, r0\n\ + bcs _0815BF00\n\ + ldr r1, _0815BECC @ =0x0000027f\n\ + mov r10, r1\n\ + _0815BEA2:\n\ + adds r0, r5, 0\n\ + movs r1, 0\n\ + movs r2, 0x80\n\ + bl memset\n\ + lsls r0, r4, 1\n\ + adds r1, r0, r6\n\ + ldrh r0, [r1]\n\ + cmp r0, r10\n\ + bhi _0815BED0\n\ + mov r2, r8\n\ + ldr r0, [r2, 0x10]\n\ + ldrh r1, [r1]\n\ + lsls r1, 4\n\ + ldr r0, [r0, 0xC]\n\ + adds r0, r1\n\ + adds r1, r5, 0\n\ + ldr r2, [sp, 0x8]\n\ + bl TeachyTvComputeMapTilesFromTilesetAndMetaTiles\n\ + b _0815BEE8\n\ + .align 2, 0\n\ + _0815BECC: .4byte 0x0000027f\n\ + _0815BED0:\n\ + mov r3, r8\n\ + ldr r0, [r3, 0x14]\n\ + ldrh r1, [r1]\n\ + ldr r2, _0815BF44 @ =0xfffffd80\n\ + adds r1, r2\n\ + lsls r1, 4\n\ + ldr r0, [r0, 0xC]\n\ + adds r0, r1\n\ + adds r1, r5, 0\n\ + ldr r2, [sp, 0x8]\n\ + bl TeachyTvComputeMapTilesFromTilesetAndMetaTiles\n\ + _0815BEE8:\n\ + lsls r1, r4, 7\n\ + adds r1, r7, r1\n\ + adds r0, r5, 0\n\ + movs r2, 0x20\n\ + bl CpuFastSet\n\ + adds r0, r4, 0x1\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ + ldr r3, [sp, 0x10]\n\ + cmp r4, r3\n\ + bcc _0815BEA2\n\ + _0815BF00:\n\ + mov r0, r9\n\ + lsrs r2, r0, 16\n\ + movs r0, 0x3\n\ + adds r1, r7, 0\n\ + movs r3, 0\n\ + bl LoadBgTiles\n\ + mov r0, r8\n\ + ldr r1, [sp, 0xC]\n\ + bl TeachyTvLoadMapPalette\n\ + adds r0, r5, 0\n\ + bl Free\n\ + adds r0, r7, 0\n\ + bl Free\n\ + ldr r0, [sp, 0xC]\n\ + bl Free\n\ + ldr r0, [sp, 0x8]\n\ + bl Free\n\ + adds r0, r6, 0\n\ + bl Free\n\ + add sp, 0x1C\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ + _0815BF44: .4byte 0xfffffd80\n\ + "); +} + +void TeachyTvLoadMapTilesetToBuffer(struct Tileset *ts, u8 *dstBuffer, u16 size) +{ + if ( ts ) + { + if ( !ts->isCompressed ) + CpuFastSet(ts->tiles, dstBuffer, 8 * size); + else + LZDecompressWram(ts->tiles, dstBuffer); + } +} + +#ifdef NONMATCHING +void TeachyTvPushBackNewMapPalIndexArrayEntry(struct MapData *mStruct, u16 *buf1, u8 *palIndexArray, u16 mapEntry, u16 offset) +{ + // weird, seems easy but no match + struct Tileset *ts; + u16 *metaTileEntryAddr; + + int temp = mapEntry; + if ( temp <= 0x27Fu ) + { + ts = mStruct->primaryTileset; + } + else + { + ts = mStruct->secondaryTileset; + temp = mapEntry - 0x280; + } + metaTileEntryAddr = &((u16*)(ts->metatiles))[8 * temp]; + buf1[0] = (TeachyTvComputePalIndexArrayEntryByMetaTile(palIndexArray, metaTileEntryAddr[0]) << 12) + 4 * offset; + buf1[1] = (TeachyTvComputePalIndexArrayEntryByMetaTile(palIndexArray, metaTileEntryAddr[1]) << 12) + 4 * offset + 1; + buf1[0x20] = (TeachyTvComputePalIndexArrayEntryByMetaTile(palIndexArray, metaTileEntryAddr[2]) << 12) + 4 * offset + 2; + buf1[0x21] = (TeachyTvComputePalIndexArrayEntryByMetaTile(palIndexArray, metaTileEntryAddr[3]) << 12) + 4 * offset + 3; +} +#else +NAKED +void TeachyTvPushBackNewMapPalIndexArrayEntry(struct MapData *mStruct, u16 *buf1, u8 *palIndexArray, u16 mapEntry, u16 offset) +{ + asm_unified("\n\ + push {r4-r7,lr}\n\ + adds r5, r0, 0\n\ + adds r7, r1, 0\n\ + adds r6, r2, 0\n\ + ldr r0, [sp, 0x14]\n\ + lsls r3, 16\n\ + lsrs r1, r3, 16\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ + ldr r0, _0815BF8C @ =0x0000027f\n\ + cmp r1, r0\n\ + bhi _0815BF90\n\ + ldr r0, [r5, 0x10]\n\ + b _0815BF96\n\ + .align 2, 0\n\ + _0815BF8C: .4byte 0x0000027f\n\ + _0815BF90:\n\ + ldr r0, [r5, 0x14]\n\ + ldr r2, _0815BFEC @ =0xfffffd80\n\ + adds r1, r2\n\ + _0815BF96:\n\ + lsls r1, 4\n\ + ldr r0, [r0, 0xC]\n\ + adds r5, r0, r1\n\ + ldrh r1, [r5]\n\ + adds r0, r6, 0\n\ + bl TeachyTvComputePalIndexArrayEntryByMetaTile\n\ + lsls r0, 12\n\ + lsls r4, 2\n\ + adds r0, r4\n\ + strh r0, [r7]\n\ + ldrh r1, [r5, 0x2]\n\ + adds r0, r6, 0\n\ + bl TeachyTvComputePalIndexArrayEntryByMetaTile\n\ + lsls r0, 12\n\ + adds r0, r4\n\ + adds r0, 0x1\n\ + strh r0, [r7, 0x2]\n\ + ldrh r1, [r5, 0x4]\n\ + adds r0, r6, 0\n\ + bl TeachyTvComputePalIndexArrayEntryByMetaTile\n\ + adds r1, r7, 0\n\ + adds r1, 0x40\n\ + lsls r0, 12\n\ + adds r0, r4\n\ + adds r0, 0x2\n\ + strh r0, [r1]\n\ + ldrh r1, [r5, 0x6]\n\ + adds r0, r6, 0\n\ + bl TeachyTvComputePalIndexArrayEntryByMetaTile\n\ + adds r1, r7, 0\n\ + adds r1, 0x42\n\ + lsls r0, 12\n\ + adds r0, r4\n\ + adds r0, 0x3\n\ + strh r0, [r1]\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ + _0815BFEC: .4byte 0xfffffd80\n\ + "); +} +#endif + +void TeachyTvComputeMapTilesFromTilesetAndMetaTiles(u16 *metaTilesArray, u8 *blockBuf, u8 *tileset) +{ + TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles( + blockBuf, + &tileset[0x20 * (*metaTilesArray & 0x3FF)], + (*metaTilesArray >> 10) & 3); + TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(blockBuf, &tileset[0x20 * (metaTilesArray[4] & 0x3FF)], (metaTilesArray[4] >> 10) & 3); + TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(blockBuf + 0x20, &tileset[0x20 * (metaTilesArray[1] & 0x3FF)], (metaTilesArray[1] >> 10) & 3); + TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(blockBuf + 0x20, &tileset[0x20 * (metaTilesArray[5] & 0x3FF)], (metaTilesArray[5] >> 10) & 3); + TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(blockBuf + 0x40, &tileset[0x20 * (metaTilesArray[2] & 0x3FF)], (metaTilesArray[2] >> 10) & 3); + TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(blockBuf + 0x40, &tileset[0x20 * (metaTilesArray[6] & 0x3FF)], (metaTilesArray[6] >> 10) & 3); + blockBuf += 0x60; + TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(blockBuf, &tileset[0x20 * (metaTilesArray[3] & 0x3FF)], (metaTilesArray[3] >> 10) & 3); + TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(blockBuf, &tileset[0x20 * (metaTilesArray[7] & 0x3FF)], (metaTilesArray[7] >> 10) & 3); +} + +NAKED +void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 *tileset, u8 metaTile) +{ + asm_unified("\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x4\n\ + mov r9, r0\n\ + adds r4, r1, 0\n\ + lsls r2, 24\n\ + lsrs r2, 24\n\ + mov r10, r2\n\ + movs r0, 0x20\n\ + bl AllocZeroed\n\ + adds r6, r0, 0\n\ + movs r0, 0x20\n\ + bl AllocZeroed\n\ + str r0, [sp]\n\ + adds r0, r4, 0\n\ + adds r1, r6, 0\n\ + movs r2, 0x8\n\ + bl CpuFastSet\n\ + movs r0, 0x1\n\ + mov r1, r10\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0815C15A\n\ + movs r5, 0\n\ + movs r7, 0xF\n\ + mov r12, r7\n\ + movs r0, 0xF0\n\ + mov r8, r0\n\ + _0815C118:\n\ + movs r3, 0\n\ + lsls r4, r5, 2\n\ + _0815C11C:\n\ + subs r0, r3, 0x3\n\ + subs r0, r4, r0\n\ + adds r0, r6, r0\n\ + ldrb r1, [r0]\n\ + adds r2, r4, r3\n\ + ldr r7, [sp]\n\ + adds r2, r7, r2\n\ + adds r0, r1, 0\n\ + mov r7, r12\n\ + ands r0, r7\n\ + lsls r0, 4\n\ + mov r7, r8\n\ + ands r1, r7\n\ + lsrs r1, 4\n\ + adds r0, r1\n\ + strb r0, [r2]\n\ + adds r0, r3, 0x1\n\ + lsls r0, 24\n\ + lsrs r3, r0, 24\n\ + cmp r3, 0x3\n\ + bls _0815C11C\n\ + adds r0, r5, 0x1\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + cmp r5, 0x7\n\ + bls _0815C118\n\ + ldr r0, [sp]\n\ + adds r1, r6, 0\n\ + movs r2, 0x8\n\ + bl CpuFastSet\n\ + _0815C15A:\n\ + movs r0, 0x2\n\ + mov r1, r10\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0815C18E\n\ + movs r5, 0\n\ + _0815C166:\n\ + lsls r0, r5, 2\n\ + ldr r7, [sp]\n\ + adds r0, r7\n\ + movs r1, 0x7\n\ + subs r1, r5\n\ + lsls r1, 2\n\ + adds r1, r6\n\ + movs r2, 0x4\n\ + bl memcpy\n\ + adds r0, r5, 0x1\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + cmp r5, 0x7\n\ + bls _0815C166\n\ + ldr r0, [sp]\n\ + adds r1, r6, 0\n\ + movs r2, 0x8\n\ + bl CpuFastSet\n\ + _0815C18E:\n\ + movs r5, 0\n\ + movs r0, 0xF0\n\ + mov r8, r0\n\ + movs r1, 0xF\n\ + mov r12, r1\n\ + _0815C198:\n\ + adds r4, r6, r5\n\ + ldrb r0, [r4]\n\ + mov r3, r8\n\ + ands r3, r0\n\ + cmp r3, 0\n\ + beq _0815C1B2\n\ + mov r7, r9\n\ + adds r2, r7, r5\n\ + ldrb r1, [r2]\n\ + mov r0, r12\n\ + ands r0, r1\n\ + adds r0, r3\n\ + strb r0, [r2]\n\ + _0815C1B2:\n\ + ldrb r0, [r4]\n\ + mov r3, r12\n\ + ands r3, r0\n\ + cmp r3, 0\n\ + beq _0815C1CA\n\ + mov r0, r9\n\ + adds r2, r0, r5\n\ + ldrb r1, [r2]\n\ + mov r0, r8\n\ + ands r0, r1\n\ + adds r0, r3\n\ + strb r0, [r2]\n\ + _0815C1CA:\n\ + adds r0, r5, 0x1\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + cmp r5, 0x1F\n\ + bls _0815C198\n\ + ldr r0, [sp]\n\ + bl Free\n\ + adds r0, r6, 0\n\ + bl Free\n\ + add sp, 0x4\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + "); +} + +u16 TeachyTvComputePalIndexArrayEntryByMetaTile(u8 *palIndexArrayBuf, u16 metaTile) +{ + u32 pal; + u32 counter; + int firstEntry; + int temp; + + pal = (u32)(metaTile << 16) >> 28; + counter = 0; + firstEntry = *palIndexArrayBuf; + if ( firstEntry != pal ) + { + if ( firstEntry == 0xFF ) + { + *palIndexArrayBuf = pal; + } + else + { + while ( 1 ) + { + counter = ((counter + 1) << 0x10) >> 0x10; + if ( counter > 0xF ) + break; + temp = palIndexArrayBuf[counter]; + if ( temp == pal ) + break; + if ( temp == 0xFF ) + { + palIndexArrayBuf[counter] = pal; + break; + } + } + } + } + return (0xF - counter) & 0xFFFF; +} + +#define NONMATCHING +#ifdef NONMATCHING +void TeachyTvLoadMapPalette(struct MapData *mStruct, u8 *palIndexArray) +{ + u8 counter, v3; + struct Tileset *ts; + + for (counter = 0; counter < 0xF && palIndexArray[counter] != 0xFF; counter++) + { + if ( palIndexArray[counter] > 6u ) + ts = mStruct->secondaryTileset; + else + ts = mStruct->primaryTileset; + LoadPalette((u8 *)ts->palettes + 0x20 * palIndexArray[counter], 0x10 * (0xF - counter), 0x20u); + } +} +#else +NAKED +void TeachyTvLoadMapPalette(struct MapData *mStruct, u8 *palIndexArray) +{ + asm_unified("\n\ + push {r4-r6,lr}\n\ + adds r6, r0, 0\n\ + adds r5, r1, 0\n\ + movs r4, 0\n\ + ldrb r0, [r5]\n\ + cmp r0, 0xFF\n\ + beq _0815C274\n\ + _0815C23E:\n\ + adds r1, r5, r4\n\ + ldrb r0, [r1]\n\ + cmp r0, 0x6\n\ + bls _0815C24A\n\ + ldr r0, [r6, 0x14]\n\ + b _0815C24C\n\ + _0815C24A:\n\ + ldr r0, [r6, 0x10]\n\ + _0815C24C:\n\ + ldrb r1, [r1]\n\ + lsls r1, 5\n\ + ldr r0, [r0, 0x8]\n\ + adds r0, r1\n\ + movs r1, 0xF\n\ + subs r1, r4\n\ + lsls r1, 20\n\ + lsrs r1, 16\n\ + movs r2, 0x20\n\ + bl LoadPalette\n\ + adds r0, r4, 0x1\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + cmp r4, 0xF\n\ + bhi _0815C274\n\ + adds r0, r5, r4\n\ + ldrb r0, [r0]\n\ + cmp r0, 0xFF\n\ + bne _0815C23E\n\ + _0815C274:\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0\n\ + "); +} +#endif \ No newline at end of file -- cgit v1.2.3 From ea4d62e57a263e40a08aecf0dc91ced2df6927c8 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Thu, 6 Jun 2019 13:44:36 +0800 Subject: 5 functions are still with naked attribute --- src/teachy_tv.c | 184 ++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 172 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 7fd095f1f..74d76602d 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -61,6 +61,7 @@ extern u8 gUnknown_8479390; extern struct SubspriteTable gUnknown_84795B8; extern struct SpriteTemplate *gUnknown_83A0010; extern u8 gUnknown_84795C8; +extern struct MapData Route1_Layout; void TeachyTvCallback(); void TeachyTvMainCallback(); @@ -484,7 +485,7 @@ void TeachyTvOptionListController(u8 taskId) } #else -__attribute__((naked)) +NAKED void TeachyTvOptionListController(u8 taskId) { asm_unified("\n\ @@ -1032,6 +1033,112 @@ void TeachyTvRestorePlayerPartyCallback() sub_815ABFC(); } +#ifdef NONMATCHING +void TeachyTvLoadBg3Map(void *buffer) +{ + u16 *mapArray; + int v2; + int v3; + int v4; + int v5; + int mapEntry; + int v7; + u16 v8; + int i; + char *MapTileBlockBuf; + void *FourMapTileBlocksTempBuf; + unsigned int j; + u16 *v13; + u8 *v14; + void *tileset; + u8 *palIndexArray; + unsigned int v17; + u32 v18; + int v19; + struct MapData * md; + + md = &Route1_Layout; + v14 = (u8 *)buffer; + v17 = 0; + mapArray = (u16 *)AllocZeroed(0x800u); + tileset = AllocZeroed(0x8000u); + palIndexArray = Alloc(0x10u); + memset(palIndexArray, 0xFFu, 0x10u); + TeachyTvLoadMapTilesetToBuffer(md->primaryTileset, (u8 *)tileset, 0x280u); + TeachyTvLoadMapTilesetToBuffer(md->secondaryTileset, (u8 *)tileset + 0x5000, 0x180u); + v2 = 0; + do + { + v3 = 0; + v19 = v2 + 6; + v4 = 16 * v2; + v5 = v2 << 6; + v18 = v2 + 1; + do + { + mapEntry = md->map[v3 + 24 * v19 + 8] & 0x3FF; + v7 = 0; + v8 = v3 + 1; + if ( v4 + v3 <= 0 ) + { +LABEL_9: + if ( mapArray[v7] ) + goto LABEL_11; + } + else + { + for ( i = *mapArray; i; i = mapArray[v7] ) + { + if ( i == mapEntry ) + goto LABEL_9; + v7 = (u16)(v7 + 1); + if ( v7 >= v4 + v3 ) + goto LABEL_9; + } + } + mapArray[v7] = mapEntry; + v17 = (u16)(v17 + 1); +LABEL_11: + TeachyTvPushBackNewMapPalIndexArrayEntry( + md, + (u16 *)&v14[2 * (v5 + 2 * v3)], + palIndexArray, + mapEntry, + v7); + v3 = v8; + } + while ( (u16)v8 <= 0xFu ); + v2 = v18; + } + while ( (u16)v18 <= 8u ); + MapTileBlockBuf = (char *)Alloc(v17 << 7); + FourMapTileBlocksTempBuf = Alloc(0x80u); + for ( j = 0; j < v17; j = (u16)j + 1 ) + { + memset(FourMapTileBlocksTempBuf, 0, 0x80u); + v13 = &mapArray[j]; + if ( *v13 <= 0x27Fu ) + TeachyTvComputeMapTilesFromTilesetAndMetaTiles( + (u16 *)(16 * *v13 + (u16*)(md->primaryTileset->metatiles)), + (u8 *)FourMapTileBlocksTempBuf, + (u8 *)tileset); + else + TeachyTvComputeMapTilesFromTilesetAndMetaTiles( + (u16 *)(16 * (*v13 - 0x280) + (u16*)(md->secondaryTileset->metatiles)), + (u8 *)FourMapTileBlocksTempBuf, + (u8 *)tileset); + + CpuFastSet(FourMapTileBlocksTempBuf, &MapTileBlockBuf[0x80 * j], 0x20u); + } + LoadBgTiles(3u, MapTileBlockBuf, (u16)v17 << 7, 0); + TeachyTvLoadMapPalette(&Route1_Layout, palIndexArray); + Free(FourMapTileBlocksTempBuf); + Free(MapTileBlockBuf); + Free(palIndexArray); + Free(tileset); + Free(mapArray); +} +#else NAKED void TeachyTvLoadBg3Map(void *buffer) { @@ -1256,6 +1363,7 @@ void TeachyTvLoadBg3Map(void *buffer) _0815BF44: .4byte 0xfffffd80\n\ "); } +#endif void TeachyTvLoadMapTilesetToBuffer(struct Tileset *ts, u8 *dstBuffer, u16 size) { @@ -1271,7 +1379,6 @@ void TeachyTvLoadMapTilesetToBuffer(struct Tileset *ts, u8 *dstBuffer, u16 size) #ifdef NONMATCHING void TeachyTvPushBackNewMapPalIndexArrayEntry(struct MapData *mStruct, u16 *buf1, u8 *palIndexArray, u16 mapEntry, u16 offset) { - // weird, seems easy but no match struct Tileset *ts; u16 *metaTileEntryAddr; @@ -1377,6 +1484,62 @@ void TeachyTvComputeMapTilesFromTilesetAndMetaTiles(u16 *metaTilesArray, u8 *blo TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(blockBuf, &tileset[0x20 * (metaTilesArray[7] & 0x3FF)], (metaTilesArray[7] >> 10) & 3); } +#ifdef NONMATCHING +void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 *tileset, u8 metaTile) +{ + u8 *buffer; + u32 counterV7; + u32 counterV8; + vu32 src; + + buffer = (u8 *)AllocZeroed(0x20u); + src = ((u32)AllocZeroed(0x20u)); + CpuFastSet(tileset, buffer, 8u); + if ( metaTile & 1 ) + { + counterV7 = 0; + do + { + counterV8 = 0; + do + { + u32 offset1 = counterV7 << 2; + u32 offset2 = counterV8 - 3; + u32 offset = offset1 - offset2; + u32 value = buffer[offset]; + u32 dstOffset = offset1 + counterV8; + *(u8*)(src + dstOffset) = ((value & 0xF) << 4) + ((value & 0xF0) >> 4); + } + while ( ++(u8)counterV8 <= 3u ); + } + while ( ++(u8)counterV7 <= 7u ); + CpuFastSet((u8*)src, buffer, 8u); + } + if ( metaTile & 2 ) + { + counterV8 = 0; + do + { + memcpy(&((u8*)src)[4 * counterV8], &buffer[4 * (7 - counterV8)], 4u); + counterV8 = (u8)(counterV8 + 1); + } + while ( counterV8 <= 7u ); + CpuFastSet((u8*)src, buffer, 8u); + } + counterV8 = 0; + do + { + if ( buffer[counterV8] & 0xF0 ) + blockBuf[counterV8] = (blockBuf[counterV8] & 0xF) + (buffer[counterV8] & 0xF0); + if ( buffer[counterV8] & 0xF ) + blockBuf[counterV8] = (blockBuf[counterV8] & 0xF0) + (buffer[counterV8] & 0xF); + counterV8 = (u8)(counterV8 + 1); + } + while ( counterV8 <= 0x1Fu ); + Free((u8*)src); + Free(buffer); +} +#else NAKED void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 *tileset, u8 metaTile) { @@ -1525,6 +1688,7 @@ void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 * bx r0\n\ "); } +#endif u16 TeachyTvComputePalIndexArrayEntryByMetaTile(u8 *palIndexArrayBuf, u16 metaTile) { @@ -1560,23 +1724,19 @@ u16 TeachyTvComputePalIndexArrayEntryByMetaTile(u8 *palIndexArrayBuf, u16 metaTi } } } - return (0xF - counter) & 0xFFFF; + return (u16)(0xF - counter); } -#define NONMATCHING #ifdef NONMATCHING void TeachyTvLoadMapPalette(struct MapData *mStruct, u8 *palIndexArray) { - u8 counter, v3; + u8 counter; struct Tileset *ts; - for (counter = 0; counter < 0xF && palIndexArray[counter] != 0xFF; counter++) + for (counter = 0; counter < 16 && palIndexArray[counter] != 0xFF; counter++) { - if ( palIndexArray[counter] > 6u ) - ts = mStruct->secondaryTileset; - else - ts = mStruct->primaryTileset; - LoadPalette((u8 *)ts->palettes + 0x20 * palIndexArray[counter], 0x10 * (0xF - counter), 0x20u); + ts = *(palIndexArray + counter) > 6u ? mStruct->secondaryTileset : mStruct->primaryTileset; + LoadPalette((u16 *)ts->palettes + 0x10 * palIndexArray[counter], 0x10 * (0xF - counter), 0x20u); } } #else @@ -1626,4 +1786,4 @@ void TeachyTvLoadMapPalette(struct MapData *mStruct, u8 *palIndexArray) bx r0\n\ "); } -#endif \ No newline at end of file +#endif -- cgit v1.2.3 From 598a2fb60f81a28a165a783a3a2e4e28960b607a Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Thu, 6 Jun 2019 14:04:39 +0800 Subject: var names --- src/teachy_tv.c | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) (limited to 'src') diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 74d76602d..0438114ac 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -29,7 +29,6 @@ #include "battle.h" #include "global.fieldmap.h" -typedef struct Task Task; typedef struct { void (*callback)(); u8 mode; @@ -127,18 +126,18 @@ void TeachyTvVblankHandler() void sub_815ABC4(u8 mode, void (*cb)()) { - TeachyTv_s *v3 = &gTeachyTV_StaticResources; + TeachyTv_s *resAddr = &gTeachyTV_StaticResources; u16 v4 = 0; - v3->mode = mode; - v3->callback = cb; + resAddr->mode = mode; + resAddr->callback = cb; if(!mode) { - v3->scrollOffset = v4; - v3->selectedRow = v4; - v3->optionChosen = 0; + resAddr->scrollOffset = v4; + resAddr->selectedRow = v4; + resAddr->optionChosen = 0; } if(mode == 1) - v3->mode = 0; + resAddr->mode = 0; SetMainCallback2(TeachyTvMainCallback); } @@ -159,8 +158,8 @@ void TeachyTvMainCallback() { int state; int taskId; - Task *taskAddr; - u8 **v4; + struct Task *taskAddr; + u8 **memBuf; u32 x; state = gMain.state; @@ -171,8 +170,8 @@ void TeachyTvMainCallback() else return; RESETANDLOAD: - v4 = (u8 **)&gUnknown_203F450; - (*v4) = (u8*)AllocZeroed(0x4008u); + memBuf = (u8 **)&gUnknown_203F450; + (*memBuf) = (u8*)AllocZeroed(0x4008u); *(u32*)gUnknown_203F450 = (u32)state; *((u8*)gUnknown_203F450 + 0x4006) = state; *((u8*)gUnknown_203F450 + 0x4007) = 0xFF; @@ -296,8 +295,8 @@ void TeachyTvSetupScrollIndicatorArrowPair() else { u8 *temp, res; res = AddScrollIndicatorArrowPair( - &gUnknown_8479380, - &(gTeachyTV_StaticResources.scrollOffset)); + &gUnknown_8479380, + &(gTeachyTV_StaticResources.scrollOffset)); temp = (u8 *)gUnknown_203F450; *((u8 *)temp + 0x4007) = res; } -- cgit v1.2.3 From 97f172fde44648e77ffcef3cf03681150b926145 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Fri, 7 Jun 2019 03:03:12 +0800 Subject: syntax --- src/teachy_tv.c | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 0438114ac..4b389a6c9 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -127,13 +127,13 @@ void TeachyTvVblankHandler() void sub_815ABC4(u8 mode, void (*cb)()) { TeachyTv_s *resAddr = &gTeachyTV_StaticResources; - u16 v4 = 0; + u16 zero = 0; resAddr->mode = mode; resAddr->callback = cb; if(!mode) { - resAddr->scrollOffset = v4; - resAddr->selectedRow = v4; + resAddr->scrollOffset = zero; + resAddr->selectedRow = zero; resAddr->optionChosen = 0; } if(mode == 1) @@ -144,9 +144,9 @@ void sub_815ABC4(u8 mode, void (*cb)()) void sub_815ABFC() { if(gTeachyTV_StaticResources.mode == 1) - sub_815ABC4(1,gTeachyTV_StaticResources.callback); + sub_815ABC4(1, gTeachyTV_StaticResources.callback); else - sub_815ABC4(2,gTeachyTV_StaticResources.callback); + sub_815ABC4(2, gTeachyTV_StaticResources.callback); } void sub_815AC20() @@ -163,7 +163,7 @@ void TeachyTvMainCallback() u32 x; state = gMain.state; - if ( state == 0 ) + if ( !state ) goto RESETANDLOAD; else if ( state == 1 ) goto SETDMATOVRAM; @@ -942,18 +942,18 @@ void TeachyTvGrassAnimationObjCallback(struct Sprite *sprite) if(((u8*)gUnknown_203F450)[0x4006] == 1) DestroySprite(sprite); else { - if(sprite->animCmdIndex == 0) + if(!sprite->animCmdIndex) sprite->subspriteTableNum = 1; else sprite->subspriteTableNum = 0; sprite->pos2.x += (u16)data[4]; sprite->pos2.y += (u16)data[5]; - if(sprite->animEnded == 0) + if(!sprite->animEnded) return; sprite->subpriority = 0; diff1 = (u16)(sprite->pos2.x - objAddr->pos2.x); diff2 = (u16)(sprite->pos2.y - objAddr->pos2.y); - diff1 = ((diff1 << 0x10)+0xF0000) >> 0x10; + diff1 = ((diff1 << 0x10) + 0xF0000) >> 0x10; if(diff1 <= 0x1E) { if((s16)diff2 > -0x10) @@ -1469,10 +1469,7 @@ void TeachyTvPushBackNewMapPalIndexArrayEntry(struct MapData *mStruct, u16 *buf1 void TeachyTvComputeMapTilesFromTilesetAndMetaTiles(u16 *metaTilesArray, u8 *blockBuf, u8 *tileset) { - TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles( - blockBuf, - &tileset[0x20 * (*metaTilesArray & 0x3FF)], - (*metaTilesArray >> 10) & 3); + TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(blockBuf, &tileset[0x20 * (*metaTilesArray & 0x3FF)], (*metaTilesArray >> 10) & 3); TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(blockBuf, &tileset[0x20 * (metaTilesArray[4] & 0x3FF)], (metaTilesArray[4] >> 10) & 3); TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(blockBuf + 0x20, &tileset[0x20 * (metaTilesArray[1] & 0x3FF)], (metaTilesArray[1] >> 10) & 3); TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(blockBuf + 0x20, &tileset[0x20 * (metaTilesArray[5] & 0x3FF)], (metaTilesArray[5] >> 10) & 3); -- cgit v1.2.3 From 5110cafe24debb3ca0e1db52a8cd1a8edeb6daac Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Fri, 7 Jun 2019 03:40:49 +0800 Subject: fix header --- src/teachy_tv.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'src') diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 4b389a6c9..8c126805a 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -28,6 +28,7 @@ #include "battle_2.h" #include "battle.h" #include "global.fieldmap.h" +#include "teachy_tv.h" typedef struct { void (*callback)(); @@ -65,9 +66,6 @@ extern struct MapData Route1_Layout; void TeachyTvCallback(); void TeachyTvMainCallback(); void TeachyTvVblankHandler(); -void sub_815ABC4(u8 mode, void (*cb)()); -void sub_815ABFC(); -void sub_815AC20(); void TeachyTvCreateAndRenderRbox(); void TeachyTvInitIo(); u8 TeachyTvSetupObjEventAndOam(); -- cgit v1.2.3 From ec5dd73767f3335098ea4f327a10d2b9405f3788 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Sun, 9 Jun 2019 04:37:34 +0800 Subject: goobye, goto! --- src/teachy_tv.c | 118 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 58 insertions(+), 60 deletions(-) (limited to 'src') diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 8c126805a..9e50d2d75 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -63,6 +63,15 @@ extern struct SpriteTemplate *gUnknown_83A0010; extern u8 gUnknown_84795C8; extern struct MapData Route1_Layout; +extern void VblankHblankHandlerSetZero(); +extern void sub_812B1E0(u16); +extern u8 ListMenuInitInternal(struct ListMenuTemplate *, u16 scrollOffset, u16 selectedRow); +extern void sub_8055DC4(); +extern bool16 sub_80BF518(u8 textPrinterId); +extern void _call_via_r1(s32 arg, void *func); +extern void sub_810B108(u8); +extern void sub_8159F40(); + void TeachyTvCallback(); void TeachyTvMainCallback(); void TeachyTvVblankHandler(); @@ -97,15 +106,6 @@ void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 * u16 TeachyTvComputePalIndexArrayEntryByMetaTile(u8 *palIndexArrayBuf, u16 metaTile); void TeachyTvLoadMapPalette(struct MapData *mStruct, u8 *palIndexArray); -extern void VblankHblankHandlerSetZero(); -extern void sub_812B1E0(u16); -extern u8 ListMenuInitInternal(struct ListMenuTemplate *, u16 scrollOffset, u16 selectedRow); -extern void sub_8055DC4(); -extern bool16 sub_80BF518(u8 textPrinterId); -extern void _call_via_r1(s32 arg, void *func); -extern void sub_810B108(u8); -extern void sub_8159F40(); - void TeachyTvCallback() { RunTasks(); @@ -161,59 +161,57 @@ void TeachyTvMainCallback() u32 x; state = gMain.state; - if ( !state ) - goto RESETANDLOAD; - else if ( state == 1 ) - goto SETDMATOVRAM; - else - return; -RESETANDLOAD: - memBuf = (u8 **)&gUnknown_203F450; - (*memBuf) = (u8*)AllocZeroed(0x4008u); - *(u32*)gUnknown_203F450 = (u32)state; - *((u8*)gUnknown_203F450 + 0x4006) = state; - *((u8*)gUnknown_203F450 + 0x4007) = 0xFF; - VblankHblankHandlerSetZero(); - clear_scheduled_bg_copies_to_vram(); - ScanlineEffect_Stop(); - FreeAllSpritePalettes(); - ResetPaletteFade(); - ResetSpriteData(); - ResetTasks(); - TeachyTvSetupBg(); - TeachyTvLoadGraphic(); - ++gMain.state; - return; -SETDMATOVRAM: - if( free_temp_tile_data_buffers_if_possible() == 1 ) - return; - TeachyTvCreateAndRenderRbox(); - TeachyTvInitIo(); - if ( gTeachyTV_StaticResources.mode == 2 ) + switch(state) { - taskId = CreateTask(TeachyTvPostBattleFadeControl, 0); - gTasks[taskId].data[1] = TeachyTvSetupObjEventAndOam(); - TeachyTvSetupPostBattleWindowAndObj(taskId); - } - else - { - taskId = CreateTask(TeachyTvOptionListController, 0); - x = (u32)TeachyTvSetupWindow(); - gTasks[taskId].data[0] = (x << 24) >> 24; - gTasks[taskId].data[1] = TeachyTvSetupObjEventAndOam(); - TeachyTvSetupScrollIndicatorArrowPair(); - PlayNewMapMusic(BGM_FRLG_TEACHY_TV); - TeachyTvSetWindowRegs(); + case 0: + memBuf = (u8 **)&gUnknown_203F450; + (*memBuf) = (u8*)AllocZeroed(0x4008u); + *(u32*)gUnknown_203F450 = (u32)state; + *((u8*)gUnknown_203F450 + 0x4006) = state; + *((u8*)gUnknown_203F450 + 0x4007) = 0xFF; + VblankHblankHandlerSetZero(); + clear_scheduled_bg_copies_to_vram(); + ScanlineEffect_Stop(); + FreeAllSpritePalettes(); + ResetPaletteFade(); + ResetSpriteData(); + ResetTasks(); + TeachyTvSetupBg(); + TeachyTvLoadGraphic(); + ++gMain.state; + break; + case 1: + if( free_temp_tile_data_buffers_if_possible() == 1 ) + return; + TeachyTvCreateAndRenderRbox(); + TeachyTvInitIo(); + if ( gTeachyTV_StaticResources.mode == 2 ) + { + taskId = CreateTask(TeachyTvPostBattleFadeControl, 0); + gTasks[taskId].data[1] = TeachyTvSetupObjEventAndOam(); + TeachyTvSetupPostBattleWindowAndObj(taskId); + } + else + { + taskId = CreateTask(TeachyTvOptionListController, 0); + x = (u32)TeachyTvSetupWindow(); + gTasks[taskId].data[0] = (x << 24) >> 24; + gTasks[taskId].data[1] = TeachyTvSetupObjEventAndOam(); + TeachyTvSetupScrollIndicatorArrowPair(); + PlayNewMapMusic(BGM_FRLG_TEACHY_TV); + TeachyTvSetWindowRegs(); + } + schedule_bg_copy_tilemap_to_vram(0); + schedule_bg_copy_tilemap_to_vram(1u); + schedule_bg_copy_tilemap_to_vram(2u); + schedule_bg_copy_tilemap_to_vram(3u); + sub_812B1E0(9); // help system something + BlendPalettes(0xFFFFFFFF, 0x10u, 0); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10u, 0, 0); + SetVBlankCallback(TeachyTvVblankHandler); + SetMainCallback2(TeachyTvCallback); + break; } - schedule_bg_copy_tilemap_to_vram(0); - schedule_bg_copy_tilemap_to_vram(1u); - schedule_bg_copy_tilemap_to_vram(2u); - schedule_bg_copy_tilemap_to_vram(3u); - sub_812B1E0(9); // help system something - BlendPalettes(0xFFFFFFFF, 0x10u, 0); - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10u, 0, 0); - SetVBlankCallback(TeachyTvVblankHandler); - SetMainCallback2(TeachyTvCallback); } void TeachyTvSetupBg() -- cgit v1.2.3 From 292b5fecab3a62fc30d8935bed6b2e91f83fbc7b Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Sun, 9 Jun 2019 04:52:52 +0800 Subject: io reg names --- src/teachy_tv.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 9e50d2d75..c4e739122 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -222,7 +222,7 @@ void TeachyTvSetupBg() SetBgTilemapBuffer(1u, (u8 *)gUnknown_203F450 + 4); SetBgTilemapBuffer(2u, (u8 *)gUnknown_203F450 + 0x1004); SetBgTilemapBuffer(3u, (u8 *)gUnknown_203F450 + 0x2004); - SetGpuReg(0, 0x3040u); + SetGpuReg(REG_OFFSET_DISPCNT, 0x3040u); ShowBg(0); ShowBg(1u); ShowBg(2u); @@ -231,7 +231,7 @@ void TeachyTvSetupBg() ChangeBgY(3u, 0x2800u, 1u); *((u8 *)gUnknown_203F450 + 0x4004) = 0; *((u8 *)gUnknown_203F450 + 0x4005) = 3; - SetGpuReg(0x50u, 0); + SetGpuReg(REG_OFFSET_BLDCNT, 0); } void TeachyTvLoadGraphic() @@ -316,10 +316,10 @@ void TeachyTvAudioByInput(s32 notUsed, bool8 play, struct ListMenu *notUsedAlt) void TeachyTvInitIo() { - SetGpuReg(0x48u, 0x3Fu); - SetGpuReg(0x4Au, 0x1Fu); - SetGpuReg(0x50u, 0xCCu); - SetGpuReg(0x54u, 5u); + SetGpuReg(REG_OFFSET_WININ, 0x3Fu); + SetGpuReg(REG_OFFSET_WINOUT, 0x1Fu); + SetGpuReg(REG_OFFSET_BLDCNT, 0xCCu); + SetGpuReg(REG_OFFSET_BLDY, 5u); } u8 TeachyTvSetupObjEventAndOam() @@ -340,14 +340,14 @@ void TeachyTvSetSpriteCoordsAndSwitchFrame(u8 objId, u16 x, u16 y, u8 frame) void TeachyTvSetWindowRegs() { - SetGpuReg(0x44u, 0xC64u); - SetGpuReg(0x40u, 0x1CD4u); + SetGpuReg(REG_OFFSET_WIN0V, 0xC64u); + SetGpuReg(REG_OFFSET_WIN0H, 0x1CD4u); } void TeachyTvClearWindowRegs() { - SetGpuReg(0x44u, 0); - SetGpuReg(0x40u, 0); + SetGpuReg(REG_OFFSET_WIN0V, 0); + SetGpuReg(REG_OFFSET_WIN0H, 0); } void TeachyTvBg2AnimController() -- cgit v1.2.3 From 5ec40a2acdc0692f6f3c9e3bbedc8433e9ba87b1 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Mon, 10 Jun 2019 02:34:06 +0800 Subject: fixed everything except struct --- src/teachy_tv.c | 381 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 190 insertions(+), 191 deletions(-) (limited to 'src') diff --git a/src/teachy_tv.c b/src/teachy_tv.c index c4e739122..feb3e3062 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -30,38 +30,38 @@ #include "global.fieldmap.h" #include "teachy_tv.h" -typedef struct { +struct TeachyTvCtrlBlk +{ void (*callback)(); u8 mode; u8 optionChosen; u16 scrollOffset; u16 selectedRow; u16 filler; -} TeachyTv_s; +}; -extern TeachyTv_s gTeachyTV_StaticResources; +extern struct TeachyTvCtrlBlk gTeachyTV_StaticResources; extern void * gUnknown_203F450; extern const struct ScrollIndicatorArrowPairTemplate gUnknown_8479380; -extern char gUnknown_841B83D; -extern struct BgTemplate gUnknown_84792E0; -extern struct SpritePalette gUnknown_83A5348; +extern const char gUnknown_841B83D; +extern const struct BgTemplate gUnknown_84792E0; +extern const struct SpritePalette gUnknown_83A5348; extern void (**gUnknown_8479548)(u8); -extern char * gUnknown_8479560; -extern char * gUnknown_8479578; -extern void *gUnknown_203F450; -extern u8 gUnknown_8E86240; -extern u8 gUnknown_8E86BE8; -extern u8 gUnknown_8E86D6C; -extern u8 gUnknown_8E86F98; -extern struct ListMenuTemplate gUnknown_8479368; -extern struct ListMenuItem gUnknown_8479340; -extern struct WindowTemplate gUnknown_84792F0; -extern u8 gUnknown_8479590; -extern u8 gUnknown_8479390; -extern struct SubspriteTable gUnknown_84795B8; -extern struct SpriteTemplate *gUnknown_83A0010; -extern u8 gUnknown_84795C8; -extern struct MapData Route1_Layout; +extern const char * const gUnknown_8479560; +extern const char * const gUnknown_8479578; +extern const u8 gUnknown_8E86240; +extern const u8 gUnknown_8E86BE8; +extern const u8 gUnknown_8E86D6C; +extern const u8 gUnknown_8E86F98; +extern const struct ListMenuTemplate gUnknown_8479368; +extern const struct ListMenuItem gUnknown_8479340; +extern const struct WindowTemplate gUnknown_84792F0; +extern const u8 gUnknown_8479590; +extern const u8 gUnknown_8479390; +extern const struct SubspriteTable gUnknown_84795B8; +extern const struct SpriteTemplate * const gUnknown_83A0010; +extern const u8 gUnknown_84795C8; +extern const struct MapData Route1_Layout; extern void VblankHblankHandlerSetZero(); extern void sub_812B1E0(u16); @@ -104,7 +104,7 @@ void TeachyTvPushBackNewMapPalIndexArrayEntry(struct MapData *mStruct, u16 *buf1 void TeachyTvComputeMapTilesFromTilesetAndMetaTiles(u16 *metaTilesArray, u8 *blockBuf, u8 *tileset); void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 *tileset, u8 metaTile); u16 TeachyTvComputePalIndexArrayEntryByMetaTile(u8 *palIndexArrayBuf, u16 metaTile); -void TeachyTvLoadMapPalette(struct MapData *mStruct, u8 *palIndexArray); +void TeachyTvLoadMapPalette(const struct MapData *const mStruct, u8 *palIndexArray); void TeachyTvCallback() { @@ -124,24 +124,24 @@ void TeachyTvVblankHandler() void sub_815ABC4(u8 mode, void (*cb)()) { - TeachyTv_s *resAddr = &gTeachyTV_StaticResources; + struct TeachyTvCtrlBlk *resAddr = &gTeachyTV_StaticResources; u16 zero = 0; resAddr->mode = mode; resAddr->callback = cb; - if(!mode) + if (!mode) { resAddr->scrollOffset = zero; resAddr->selectedRow = zero; resAddr->optionChosen = 0; } - if(mode == 1) + if (mode == 1) resAddr->mode = 0; SetMainCallback2(TeachyTvMainCallback); } void sub_815ABFC() { - if(gTeachyTV_StaticResources.mode == 1) + if (gTeachyTV_StaticResources.mode == 1) sub_815ABC4(1, gTeachyTV_StaticResources.callback); else sub_815ABC4(2, gTeachyTV_StaticResources.callback); @@ -161,11 +161,11 @@ void TeachyTvMainCallback() u32 x; state = gMain.state; - switch(state) + switch (state) { case 0: memBuf = (u8 **)&gUnknown_203F450; - (*memBuf) = (u8*)AllocZeroed(0x4008u); + (*memBuf) = (u8*)AllocZeroed(0x4008); *(u32*)gUnknown_203F450 = (u32)state; *((u8*)gUnknown_203F450 + 0x4006) = state; *((u8*)gUnknown_203F450 + 0x4007) = 0xFF; @@ -181,7 +181,7 @@ void TeachyTvMainCallback() ++gMain.state; break; case 1: - if( free_temp_tile_data_buffers_if_possible() == 1 ) + if ( free_temp_tile_data_buffers_if_possible() == 1 ) return; TeachyTvCreateAndRenderRbox(); TeachyTvInitIo(); @@ -202,12 +202,12 @@ void TeachyTvMainCallback() TeachyTvSetWindowRegs(); } schedule_bg_copy_tilemap_to_vram(0); - schedule_bg_copy_tilemap_to_vram(1u); - schedule_bg_copy_tilemap_to_vram(2u); - schedule_bg_copy_tilemap_to_vram(3u); + schedule_bg_copy_tilemap_to_vram(1); + schedule_bg_copy_tilemap_to_vram(2); + schedule_bg_copy_tilemap_to_vram(3); sub_812B1E0(9); // help system something - BlendPalettes(0xFFFFFFFF, 0x10u, 0); - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10u, 0, 0); + BlendPalettes(0xFFFFFFFF, 0x10, 0); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0); SetVBlankCallback(TeachyTvVblankHandler); SetMainCallback2(TeachyTvCallback); break; @@ -218,17 +218,17 @@ void TeachyTvSetupBg() { InitBgReg(); ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, &gUnknown_84792E0, 4u); - SetBgTilemapBuffer(1u, (u8 *)gUnknown_203F450 + 4); - SetBgTilemapBuffer(2u, (u8 *)gUnknown_203F450 + 0x1004); - SetBgTilemapBuffer(3u, (u8 *)gUnknown_203F450 + 0x2004); - SetGpuReg(REG_OFFSET_DISPCNT, 0x3040u); + InitBgsFromTemplates(0, &gUnknown_84792E0, 4); + SetBgTilemapBuffer(1, (u8 *)gUnknown_203F450 + 4); + SetBgTilemapBuffer(2, (u8 *)gUnknown_203F450 + 0x1004); + SetBgTilemapBuffer(3, (u8 *)gUnknown_203F450 + 0x2004); + SetGpuReg(REG_OFFSET_DISPCNT, 0x3040); ShowBg(0); - ShowBg(1u); - ShowBg(2u); - ShowBg(3u); - ChangeBgX(3u, 0x1000u, 2u); - ChangeBgY(3u, 0x2800u, 1u); + ShowBg(1); + ShowBg(2); + ShowBg(3); + ChangeBgX(3, 0x1000, 2); + ChangeBgY(3, 0x2800, 1); *((u8 *)gUnknown_203F450 + 0x4004) = 0; *((u8 *)gUnknown_203F450 + 0x4005) = 3; SetGpuReg(REG_OFFSET_BLDCNT, 0); @@ -239,12 +239,12 @@ void TeachyTvLoadGraphic() u16 src; src = 0; reset_temp_tile_data_buffers(); - decompress_and_copy_tile_data_to_vram(1u, &gUnknown_8E86240, 0, 0, 0); - LZDecompressWram((u8 *)&gUnknown_8E86BE8, (*(u8 **)&gUnknown_203F450) + 4); - LZDecompressWram((u8 *)&gUnknown_8E86D6C, (*(u8 **)&gUnknown_203F450) + 0x3004); - LoadCompressedPalette(&gUnknown_8E86F98, 0, 0x80u); - LoadPalette(&src, 0, 2u); - LoadSpritePalette((struct SpritePalette *)&gUnknown_83A5348); + decompress_and_copy_tile_data_to_vram(1, &gUnknown_8E86240, 0, 0, 0); + LZDecompressWram(&gUnknown_8E86BE8, (*(u8 **)&gUnknown_203F450) + 0x4); + LZDecompressWram(&gUnknown_8E86D6C, (*(u8 **)&gUnknown_203F450) + 0x3004); + LoadCompressedPalette(&gUnknown_8E86F98, 0, 0x80); + LoadPalette(&src, 0, 2); + LoadSpritePalette(&gUnknown_83A5348); TeachyTvLoadBg3Map((u8 *)gUnknown_203F450 + 0x2004); } @@ -252,10 +252,10 @@ void TeachyTvCreateAndRenderRbox() { InitWindows(&gUnknown_84792F0); DeactivateAllTextPrinters(); - FillWindowPixelBuffer(0, 0xCCu); + FillWindowPixelBuffer(0, 0xCC); PutWindowTilemap(0); - PutWindowTilemap(1u); - CopyWindowToVram(0, 2u); + PutWindowTilemap(1); + CopyWindowToVram(0, 2); } u8 TeachyTvSetupWindow() @@ -264,7 +264,7 @@ u8 TeachyTvSetupWindow() gMultiuseListMenuTemplate = gUnknown_8479368; gMultiuseListMenuTemplate.windowId = 1; gMultiuseListMenuTemplate.moveCursorFunc = TeachyTvAudioByInput; - hasItem = (u8)CheckBagHasItem(ITEM_TM_CASE, 1u); + hasItem = (u8)CheckBagHasItem(ITEM_TM_CASE, 1); if ( !(hasItem << 24) ) { gMultiuseListMenuTemplate.items = &gUnknown_8479340; @@ -281,7 +281,7 @@ u8 TeachyTvSetupWindow() void TeachyTvSetupScrollIndicatorArrowPair() { int hasItem; - hasItem = (u8)CheckBagHasItem(ITEM_TM_CASE, 1u); + hasItem = (u8)CheckBagHasItem(ITEM_TM_CASE, 1); if ( ! hasItem << 24 ) { u8 * temp = (u8 *)gUnknown_203F450; @@ -316,10 +316,10 @@ void TeachyTvAudioByInput(s32 notUsed, bool8 play, struct ListMenu *notUsedAlt) void TeachyTvInitIo() { - SetGpuReg(REG_OFFSET_WININ, 0x3Fu); - SetGpuReg(REG_OFFSET_WINOUT, 0x1Fu); - SetGpuReg(REG_OFFSET_BLDCNT, 0xCCu); - SetGpuReg(REG_OFFSET_BLDY, 5u); + SetGpuReg(REG_OFFSET_WININ, 0x3F); + SetGpuReg(REG_OFFSET_WINOUT, 0x1F); + SetGpuReg(REG_OFFSET_BLDCNT, 0xCC); + SetGpuReg(REG_OFFSET_BLDY, 5); } u8 TeachyTvSetupObjEventAndOam() @@ -340,8 +340,8 @@ void TeachyTvSetSpriteCoordsAndSwitchFrame(u8 objId, u16 x, u16 y, u8 frame) void TeachyTvSetWindowRegs() { - SetGpuReg(REG_OFFSET_WIN0V, 0xC64u); - SetGpuReg(REG_OFFSET_WIN0H, 0x1CD4u); + SetGpuReg(REG_OFFSET_WIN0V, 0xC64); + SetGpuReg(REG_OFFSET_WIN0H, 0x1CD4); } void TeachyTvClearWindowRegs() @@ -353,28 +353,26 @@ void TeachyTvClearWindowRegs() void TeachyTvBg2AnimController() { u16 *tilemapBuffer; - u8 counter; - u32 offset2; - u32 offset; - u32 counter2; + u8 i; + u32 offset, offset2, j; - tilemapBuffer = (u16 *)GetBgTilemapBuffer(2u); - counter = 1; + tilemapBuffer = (u16 *)GetBgTilemapBuffer(2); + i = 1; do { offset2 = 2; - offset = 0x20 * counter; - counter2 = counter + 1; + offset = 0x20 * i; + j = i + 1; do { tilemapBuffer[offset + offset2] = ((Random() & 3) << 10) + 0x301F; offset2 = (offset2 + 1) << 0x18 >> 0x18; } while ( offset2 <= 0x1B ); - counter = counter2; + i = j; } - while ( counter2 << 0x18 >> 0x18 <= 0xCu ); - schedule_bg_copy_tilemap_to_vram(2u); + while ( j << 0x18 >> 0x18 <= 0xC ); + schedule_bg_copy_tilemap_to_vram(2); } void TeachyTvSetupPostBattleWindowAndObj(u8 taskId) @@ -384,7 +382,7 @@ void TeachyTvSetupPostBattleWindowAndObj(u8 taskId) struct Sprite *v3 = &gSprites[v1]; int op; - ClearWindowTilemap(1u); + ClearWindowTilemap(1); TeachyTvClearWindowRegs(); op = gTeachyTV_StaticResources.optionChosen; if ( op >= 0 ) @@ -392,8 +390,8 @@ void TeachyTvSetupPostBattleWindowAndObj(u8 taskId) if ( op <= 3 ) { TeachyTvSetSpriteCoordsAndSwitchFrame(((char*)v2)[2], 0x78, 0x38, 0); - ChangeBgX(3u, 0x3000u, 1u); - ChangeBgY(3u, 0x3000u, 2u); + ChangeBgX(3, 0x3000, 1); + ChangeBgY(3, 0x3000, 2); *((u8 *)gUnknown_203F450 + 0x4004) += 3; *((u8 *)gUnknown_203F450 + 0x4005) -= 3; } @@ -403,15 +401,15 @@ void TeachyTvSetupPostBattleWindowAndObj(u8 taskId) v2[4] = 0; v2[5] = 0; - TeachyTvGrassAnimationMain(taskId, v3->pos2.x, v3->pos2.y, 0, 1u); + TeachyTvGrassAnimationMain(taskId, v3->pos2.x, v3->pos2.y, 0, 1); } -void TeachyTvInitTextPrinter(char *text) +void TeachyTvInitTextPrinter(const char *text) { u8 spd; gTextFlags.autoScroll = 0; spd = GetTextSpeedSetting(); - AddTextPrinterParameterized2(0, 4u, (const u8 *)text, spd, 0, 1u, 0xCu, 3u); + AddTextPrinterParameterized2(0, 4, (const char *)text, spd, 0, 1, 0xC, 3); } void TeachyTvFree() @@ -423,7 +421,7 @@ void TeachyTvFree() void TeachyTvQuitBeginFade(u8 taskId) { - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10u, 0); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); gTasks[taskId].func = TeachyTvQuitFadeControlAndTaskDel; } @@ -469,7 +467,7 @@ void TeachyTvOptionListController(u8 taskId) gTeachyTV_StaticResources.optionChosen = v3; DestroyListMenu(*v2, &gTeachyTV_StaticResources.scrollOffset, &gTeachyTV_StaticResources.selectedRow); TeachyTvClearWindowRegs(); - ClearWindowTilemap(1u); + ClearWindowTilemap(1); schedule_bg_copy_tilemap_to_vram(0); TeachyTvRemoveScrollIndicatorArrowPair(); *((u16 *)v2 + 3) = 0; @@ -587,9 +585,9 @@ void TeachyTvClusFuncTransitionRenderBg2TeachyTvGraphicInitNpcPos(u8 taskId) data[2] = counter; if ( (s16)counter > 63 ) { - CopyToBgTilemapBufferRect_ChangePalette(2u, (u8 *)gUnknown_203F450 + 0x3004, 0, 0, 0x20u, 0x20u, 0x11u); - TeachyTvSetSpriteCoordsAndSwitchFrame(((u8*)data)[2], 8, 0x38, 7u); - schedule_bg_copy_tilemap_to_vram(2u); + CopyToBgTilemapBufferRect_ChangePalette(2, (u8 *)gUnknown_203F450 + 0x3004, 0, 0, 0x20, 0x20, 0x11); + TeachyTvSetSpriteCoordsAndSwitchFrame(((u8*)data)[2], 8, 0x38, 7); + schedule_bg_copy_tilemap_to_vram(2); data[2] = 0; ++data[3]; PlayNewMapMusic(BGM_FRLG_FOLLOW_ME); @@ -606,8 +604,8 @@ void TeachyTvClusFuncClearBg2TeachyTvGraphic(u8 taskId) data[2] = counter; if ( (s16)counter == 134 ) { - FillBgTilemapBufferRect_Palette0(2u, 0, 2u, 1u, 0x1Au, 0xCu); - schedule_bg_copy_tilemap_to_vram(2u); + FillBgTilemapBufferRect_Palette0(2, 0, 2, 1, 0x1A, 0xC); + schedule_bg_copy_tilemap_to_vram(2); data[2] = 0; ++data[3]; } @@ -652,8 +650,8 @@ void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId) u32 v4 = 0; offset[0] = 1; TeachyTvSetSpriteCoordsAndSwitchFrame(*((char *)data + 2), 0, 0, 0); - FillWindowPixelBuffer(0, 0xCCu); - CopyWindowToVram(0, 2u); + FillWindowPixelBuffer(0, 0xCC); + CopyWindowToVram(0, 2); TeachyTvClearBg1EndGraphicText(); data[2] = v4; data[3] = v4; @@ -672,7 +670,7 @@ void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId) void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen(u8 taskId) { u16 *data = (u16 *)gTasks[taskId].data; - char ** texts = &gUnknown_8479560; + const char * const* texts = &gUnknown_8479560; TeachyTvInitTextPrinter(texts[gTeachyTV_StaticResources.optionChosen]); ++data[3]; } @@ -680,7 +678,7 @@ void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen(u8 taskId) void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen2(u8 taskId) { u16 *data = (u16 *)gTasks[taskId].data; - char ** texts = &gUnknown_8479578; + const char * const* texts = &gUnknown_8479578; TeachyTvInitTextPrinter(texts[gTeachyTV_StaticResources.optionChosen]); ++data[3]; } @@ -698,8 +696,8 @@ void TeachyTvClusFuncEraseTextWindowIfKeyPressed(u8 taskId) data = (u16 *)gTasks[taskId].data; if ( gMain.newKeys & 3 ) { - FillWindowPixelBuffer(0, 0xCCu); - CopyWindowToVram(0, 2u); + FillWindowPixelBuffer(0, 0xCC); + CopyWindowToVram(0, 2); ++data[3]; } } @@ -708,7 +706,7 @@ void TeachyTvClusFuncStartAnimNpcWalkIntoGrass(u8 taskId) { u16 *data; data = (u16 *)gTasks[taskId].data; - StartSpriteAnim(&gSprites[(s16)data[1]], 5u); + StartSpriteAnim(&gSprites[(s16)data[1]], 5); data[2] = 0; data[4] = 0; data[5] = 1; @@ -718,26 +716,26 @@ void TeachyTvClusFuncStartAnimNpcWalkIntoGrass(u8 taskId) void TeachyTvClusFuncDudeMoveUp(u8 taskId) { s16 *data; - struct Sprite *v3; + struct Sprite *obj; int temp; - int v4; + int counter; data = gTasks[taskId].data; - v3 = &gSprites[data[1]]; - ChangeBgY(3u, 0x100u, 2u); - v4 = (u16)data[2] + 1; - ((u16*)data)[2] = v4; - if ( !( v4 % 16 ) ) + obj = &gSprites[data[1]]; + ChangeBgY(3, 0x100, 2); + counter = (u16)data[2] + 1; + ((u16*)data)[2] = counter; + if ( !( counter % 16 ) ) { --((u8*)gUnknown_203F450)[0x4005]; - TeachyTvGrassAnimationMain(taskId, v3->pos2.x, v3->pos2.y, 0, 0); + TeachyTvGrassAnimationMain(taskId, obj->pos2.x, obj->pos2.y, 0, 0); } if ( data[2] == 0x30 ) { data[2] = 0; data[4] = -1; data[5] = 0; - StartSpriteAnim(v3, 7u); + StartSpriteAnim(obj, 7); ++data[3]; } } @@ -745,24 +743,24 @@ void TeachyTvClusFuncDudeMoveUp(u8 taskId) void TeachyTvClusFuncDudeMoveRight(u8 taskId) { u16 *data; - struct Sprite *v3; - int v4; + struct Sprite *obj; + int counter; data = (u16 *)gTasks[taskId].data; - v3 = &gSprites[(s16)data[1]]; - ChangeBgX(3u, 0x100u, 1u); - v4 = data[2] + 1; - data[2] = v4; - if ( !(v4 & 0xF) ) + obj = &gSprites[(s16)data[1]]; + ChangeBgX(3, 0x100, 1); + counter = data[2] + 1; + data[2] = counter; + if ( !(counter & 0xF) ) ++((u8*)gUnknown_203F450)[0x4004]; if ( !((((s16*)data)[2] + 8) & 0xF) ) - TeachyTvGrassAnimationMain(taskId, v3->pos2.x + 8, v3->pos2.y, 0, 0); + TeachyTvGrassAnimationMain(taskId, obj->pos2.x + 8, obj->pos2.y, 0, 0); if ( (s16)data[2] == 0x30 ) { data[2] = 0; data[4] = 0; data[5] = 0; - StartSpriteAnim(v3, 3u); + StartSpriteAnim(obj, 3); ++data[3]; } } @@ -774,7 +772,7 @@ void TeachyTvClusFuncDudeTurnLeft(u8 taskId) data = gTasks[taskId].data; v3 = &gSprites[data[1]]; - StartSpriteAnim(v3, 6u); + StartSpriteAnim(v3, 6); ++(u16)data[3]; data[4] = 0; data[5] = 0; @@ -805,8 +803,8 @@ void TeachyTvClusFuncRenderAndRemoveBg1EndGraphic(u8 taskId) data = gTasks[taskId].data; if ( !data[2] ) { - CopyToBgTilemapBufferRect_ChangePalette(1u, &gUnknown_8479590, 0x14u, 0xAu, 8u, 2u, 0x11u); - schedule_bg_copy_tilemap_to_vram(1u); + CopyToBgTilemapBufferRect_ChangePalette(1, &gUnknown_8479590, 0x14, 0xA, 8, 2, 0x11); + schedule_bg_copy_tilemap_to_vram(1); } temp = (u16)data[2] + 1; data[2] = temp; @@ -820,8 +818,8 @@ void TeachyTvClusFuncRenderAndRemoveBg1EndGraphic(u8 taskId) void TeachyTvClearBg1EndGraphicText() { - FillBgTilemapBufferRect_Palette0(1u, 0, 0x14u, 0xAu, 8u, 2u); - schedule_bg_copy_tilemap_to_vram(1u); + FillBgTilemapBufferRect_Palette0(1, 0, 0x14, 0xA, 8, 2); + schedule_bg_copy_tilemap_to_vram(1); } void TeachyTvBackToOptionList(u8 taskId) @@ -845,10 +843,10 @@ void TeachyTvBackToOptionList(u8 taskId) TeachyTvSetupScrollIndicatorArrowPair(); TeachyTvSetWindowRegs(); schedule_bg_copy_tilemap_to_vram(0); - ChangeBgX(3u, 0, 0); - ChangeBgY(3u, 0, 0); - ChangeBgX(3u, 0x1000u, 2u); - ChangeBgY(3u, 0x2800u, 1u); + ChangeBgX(3, 0, 0); + ChangeBgY(3, 0, 0); + ChangeBgX(3, 0x1000, 2); + ChangeBgY(3, 0x2800, 1); ((u8*)gUnknown_203F450)[0x4004] = 0; ((u8*)gUnknown_203F450)[0x4005] = 3; ((u8*)gUnknown_203F450)[0x4006] = 0; @@ -858,7 +856,7 @@ void TeachyTvBackToOptionList(u8 taskId) void TeachyTvChainTaskBattleOrFadeByOptionChosen(u8 taskId) { int op = gTeachyTV_StaticResources.optionChosen; - if( op < 0 ) + if ( op < 0 ) return; if ( op <= 3 ) { @@ -875,9 +873,9 @@ void TeachyTvChainTaskBattleOrFadeByOptionChosen(u8 taskId) void TeachyTvSetupBagItemsByOptionChosen() { if ( gTeachyTV_StaticResources.optionChosen == 4 ) - sub_810B108(0xAu); + sub_810B108(10); else - sub_810B108(9u); + sub_810B108(9); } void TeachyTvPostBattleFadeControl(u8 taskId) @@ -885,7 +883,7 @@ void TeachyTvPostBattleFadeControl(u8 taskId) s16 *data = gTasks[taskId].data; if ( !(gPaletteFade.active) ) { - u8* funcIdx = &gUnknown_8479390; + const u8* funcIdx = &gUnknown_8479390; int arg = funcIdx[gTeachyTV_StaticResources.optionChosen]; data[3] = arg; gTasks[taskId].func = TeachyTvRenderMsgAndSwitchClusterFuncs; @@ -898,7 +896,7 @@ void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 m int res; struct Sprite *obj; int objId; - struct SpriteTemplate **objTemAddr; + const struct SpriteTemplate *const *objTemAddr; subprio = subpriority; if ( ((u8*)gUnknown_203F450)[0x4006] != 1 ) @@ -917,7 +915,7 @@ void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 m obj->data[0] = taskId; if ( mode == 1 ) { - SeekSpriteAnim(obj, 4u); + SeekSpriteAnim(obj, 4); obj->oam.priority = 2; } else @@ -935,26 +933,26 @@ void TeachyTvGrassAnimationObjCallback(struct Sprite *sprite) u32 diff1, diff2; s16 *data = gTasks[sprite->data[0]].data; struct Sprite *objAddr = &gSprites[data[1]]; - if(((u8*)gUnknown_203F450)[0x4006] == 1) + if (((u8*)gUnknown_203F450)[0x4006] == 1) DestroySprite(sprite); else { - if(!sprite->animCmdIndex) + if (!sprite->animCmdIndex) sprite->subspriteTableNum = 1; else sprite->subspriteTableNum = 0; sprite->pos2.x += (u16)data[4]; sprite->pos2.y += (u16)data[5]; - if(!sprite->animEnded) + if (!sprite->animEnded) return; sprite->subpriority = 0; diff1 = (u16)(sprite->pos2.x - objAddr->pos2.x); diff2 = (u16)(sprite->pos2.y - objAddr->pos2.y); diff1 = ((diff1 << 0x10) + 0xF0000) >> 0x10; - if(diff1 <= 0x1E) + if (diff1 <= 0x1E) { - if((s16)diff2 > -0x10) + if ((s16)diff2 > -0x10) { - if((s16)diff2 <= 0x17) + if ((s16)diff2 <= 0x17) return; } } @@ -964,15 +962,16 @@ void TeachyTvGrassAnimationObjCallback(struct Sprite *sprite) u8 TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj(s16 x, s16 y) { - u8 * arr, *ptr; - int a, b; - if( (x < 0) || (y < 0) ) + const u8 * arr; + u8 *ptr; + int high, low; + if ( (x < 0) || (y < 0) ) return 0; arr = &gUnknown_84795C8; ptr = gUnknown_203F450; - a = ((y >> 4) + ptr[0x4005]) << 4; - b = ((x >> 4) + ptr[0x4004]); - return arr[a+b]; + high = ((y >> 4) + ptr[0x4005]) << 4; + low = ((x >> 4) + ptr[0x4004]); + return arr[high+low]; } void TeachyTvPrepBattle(u8 taskId) @@ -1001,7 +1000,7 @@ void TeachyTvPreBattleAnimAndSetBattleCallback(u8 taskId) int temp; data = gTasks[taskId].data; - switch(data[7]) + switch (data[7]) { case 0: sub_80D08B8(*((u8*)data + 12)); @@ -1055,12 +1054,12 @@ void TeachyTvLoadBg3Map(void *buffer) md = &Route1_Layout; v14 = (u8 *)buffer; v17 = 0; - mapArray = (u16 *)AllocZeroed(0x800u); - tileset = AllocZeroed(0x8000u); - palIndexArray = Alloc(0x10u); - memset(palIndexArray, 0xFFu, 0x10u); - TeachyTvLoadMapTilesetToBuffer(md->primaryTileset, (u8 *)tileset, 0x280u); - TeachyTvLoadMapTilesetToBuffer(md->secondaryTileset, (u8 *)tileset + 0x5000, 0x180u); + mapArray = (u16 *)AllocZeroed(0x800); + tileset = AllocZeroed(0x8000); + palIndexArray = Alloc(0x10); + memset(palIndexArray, 0xFF, 0x10); + TeachyTvLoadMapTilesetToBuffer(md->primaryTileset, (u8 *)tileset, 0x280); + TeachyTvLoadMapTilesetToBuffer(md->secondaryTileset, (u8 *)tileset + 0x5000, 0x180); v2 = 0; do { @@ -1102,17 +1101,17 @@ LABEL_11: v7); v3 = v8; } - while ( (u16)v8 <= 0xFu ); + while ( (u16)v8 <= 0xF ); v2 = v18; } - while ( (u16)v18 <= 8u ); + while ( (u16)v18 <= 8 ); MapTileBlockBuf = (char *)Alloc(v17 << 7); - FourMapTileBlocksTempBuf = Alloc(0x80u); + FourMapTileBlocksTempBuf = Alloc(0x80); for ( j = 0; j < v17; j = (u16)j + 1 ) { - memset(FourMapTileBlocksTempBuf, 0, 0x80u); + memset(FourMapTileBlocksTempBuf, 0, 0x80); v13 = &mapArray[j]; - if ( *v13 <= 0x27Fu ) + if ( *v13 <= 0x27F ) TeachyTvComputeMapTilesFromTilesetAndMetaTiles( (u16 *)(16 * *v13 + (u16*)(md->primaryTileset->metatiles)), (u8 *)FourMapTileBlocksTempBuf, @@ -1123,9 +1122,9 @@ LABEL_11: (u8 *)FourMapTileBlocksTempBuf, (u8 *)tileset); - CpuFastSet(FourMapTileBlocksTempBuf, &MapTileBlockBuf[0x80 * j], 0x20u); + CpuFastSet(FourMapTileBlocksTempBuf, &MapTileBlockBuf[0x80 * j], 0x20); } - LoadBgTiles(3u, MapTileBlockBuf, (u16)v17 << 7, 0); + LoadBgTiles(3, MapTileBlockBuf, (u16)v17 << 7, 0); TeachyTvLoadMapPalette(&Route1_Layout, palIndexArray); Free(FourMapTileBlocksTempBuf); Free(MapTileBlockBuf); @@ -1378,7 +1377,7 @@ void TeachyTvPushBackNewMapPalIndexArrayEntry(struct MapData *mStruct, u16 *buf1 u16 *metaTileEntryAddr; int temp = mapEntry; - if ( temp <= 0x27Fu ) + if ( temp <= 0x27F ) { ts = mStruct->primaryTileset; } @@ -1480,54 +1479,54 @@ void TeachyTvComputeMapTilesFromTilesetAndMetaTiles(u16 *metaTilesArray, u8 *blo void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 *tileset, u8 metaTile) { u8 *buffer; - u32 counterV7; - u32 counterV8; + u32 i; + u32 j; vu32 src; - buffer = (u8 *)AllocZeroed(0x20u); - src = ((u32)AllocZeroed(0x20u)); - CpuFastSet(tileset, buffer, 8u); + buffer = (u8 *)AllocZeroed(0x20); + src = ((u32)AllocZeroed(0x20)); + CpuFastSet(tileset, buffer, 8); if ( metaTile & 1 ) { - counterV7 = 0; + i = 0; do { - counterV8 = 0; + j = 0; do { - u32 offset1 = counterV7 << 2; - u32 offset2 = counterV8 - 3; + u32 offset1 = i << 2; + u32 offset2 = j - 3; u32 offset = offset1 - offset2; u32 value = buffer[offset]; - u32 dstOffset = offset1 + counterV8; + u32 dstOffset = offset1 + j; *(u8*)(src + dstOffset) = ((value & 0xF) << 4) + ((value & 0xF0) >> 4); } - while ( ++(u8)counterV8 <= 3u ); + while ( ++(u8)j <= 3 ); } - while ( ++(u8)counterV7 <= 7u ); - CpuFastSet((u8*)src, buffer, 8u); + while ( ++(u8)i <= 7 ); + CpuFastSet((u8*)src, buffer, 8); } if ( metaTile & 2 ) { - counterV8 = 0; + j = 0; do { - memcpy(&((u8*)src)[4 * counterV8], &buffer[4 * (7 - counterV8)], 4u); - counterV8 = (u8)(counterV8 + 1); + memcpy(&((u8*)src)[4 * j], &buffer[4 * (7 - j)], 4); + j = (u8)(j + 1); } - while ( counterV8 <= 7u ); - CpuFastSet((u8*)src, buffer, 8u); + while ( j <= 7 ); + CpuFastSet((u8*)src, buffer, 8); } - counterV8 = 0; + j = 0; do { - if ( buffer[counterV8] & 0xF0 ) - blockBuf[counterV8] = (blockBuf[counterV8] & 0xF) + (buffer[counterV8] & 0xF0); - if ( buffer[counterV8] & 0xF ) - blockBuf[counterV8] = (blockBuf[counterV8] & 0xF0) + (buffer[counterV8] & 0xF); - counterV8 = (u8)(counterV8 + 1); + if ( buffer[j] & 0xF0 ) + blockBuf[j] = (blockBuf[j] & 0xF) + (buffer[j] & 0xF0); + if ( buffer[j] & 0xF ) + blockBuf[j] = (blockBuf[j] & 0xF0) + (buffer[j] & 0xF); + j = (u8)(j + 1); } - while ( counterV8 <= 0x1Fu ); + while ( j <= 0x1F ); Free((u8*)src); Free(buffer); } @@ -1685,12 +1684,12 @@ void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 * u16 TeachyTvComputePalIndexArrayEntryByMetaTile(u8 *palIndexArrayBuf, u16 metaTile) { u32 pal; - u32 counter; + u32 i; int firstEntry; int temp; pal = (u32)(metaTile << 16) >> 28; - counter = 0; + i = 0; firstEntry = *palIndexArrayBuf; if ( firstEntry != pal ) { @@ -1702,38 +1701,38 @@ u16 TeachyTvComputePalIndexArrayEntryByMetaTile(u8 *palIndexArrayBuf, u16 metaTi { while ( 1 ) { - counter = ((counter + 1) << 0x10) >> 0x10; - if ( counter > 0xF ) + i = ((i + 1) << 0x10) >> 0x10; + if ( i > 0xF ) break; - temp = palIndexArrayBuf[counter]; + temp = palIndexArrayBuf[i]; if ( temp == pal ) break; if ( temp == 0xFF ) { - palIndexArrayBuf[counter] = pal; + palIndexArrayBuf[i] = pal; break; } } } } - return (u16)(0xF - counter); + return (u16)(0xF - i); } #ifdef NONMATCHING -void TeachyTvLoadMapPalette(struct MapData *mStruct, u8 *palIndexArray) +void TeachyTvLoadMapPalette(const struct MapData * const mStruct, u8 *palIndexArray) { - u8 counter; + u8 i; struct Tileset *ts; - for (counter = 0; counter < 16 && palIndexArray[counter] != 0xFF; counter++) + for (i = 0; i < 16 && palIndexArray[i] != 0xFF; i++) { - ts = *(palIndexArray + counter) > 6u ? mStruct->secondaryTileset : mStruct->primaryTileset; - LoadPalette((u16 *)ts->palettes + 0x10 * palIndexArray[counter], 0x10 * (0xF - counter), 0x20u); + ts = *(palIndexArray + i) > 6 ? mStruct->secondaryTileset : mStruct->primaryTileset; + LoadPalette((u16 *)ts->palettes + 0x10 * palIndexArray[i], 0x10 * (0xF - i), 0x20); } } #else NAKED -void TeachyTvLoadMapPalette(struct MapData *mStruct, u8 *palIndexArray) +void TeachyTvLoadMapPalette(const struct MapData * const mStruct, u8 *palIndexArray) { asm_unified("\n\ push {r4-r6,lr}\n\ -- cgit v1.2.3 From d0315c2f67086f67a8e0af8a7aeefd14eec1baef Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Mon, 10 Jun 2019 03:15:40 +0800 Subject: not done, still have to do the struct stuff --- src/teachy_tv.c | 39 +++++++++++++-------------------------- 1 file changed, 13 insertions(+), 26 deletions(-) (limited to 'src') diff --git a/src/teachy_tv.c b/src/teachy_tv.c index feb3e3062..499253a72 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -319,7 +319,7 @@ void TeachyTvInitIo() SetGpuReg(REG_OFFSET_WININ, 0x3F); SetGpuReg(REG_OFFSET_WINOUT, 0x1F); SetGpuReg(REG_OFFSET_BLDCNT, 0xCC); - SetGpuReg(REG_OFFSET_BLDY, 5); + SetGpuReg(REG_OFFSET_BLDY, 0x5); } u8 TeachyTvSetupObjEventAndOam() @@ -346,8 +346,8 @@ void TeachyTvSetWindowRegs() void TeachyTvClearWindowRegs() { - SetGpuReg(REG_OFFSET_WIN0V, 0); - SetGpuReg(REG_OFFSET_WIN0H, 0); + SetGpuReg(REG_OFFSET_WIN0V, 0x0); + SetGpuReg(REG_OFFSET_WIN0H, 0x0); } void TeachyTvBg2AnimController() @@ -576,14 +576,9 @@ void TeachyTvOptionListController(u8 taskId) void TeachyTvClusFuncTransitionRenderBg2TeachyTvGraphicInitNpcPos(u8 taskId) { - u16 *data; - u32 counter; - - data = (u16 *)gTasks[taskId].data; + s16 *data = gTasks[taskId].data; TeachyTvBg2AnimController(); - counter = data[2] + 1; - data[2] = counter; - if ( (s16)counter > 63 ) + if ( ++data[2] > 63 ) { CopyToBgTilemapBufferRect_ChangePalette(2, (u8 *)gUnknown_203F450 + 0x3004, 0, 0, 0x20, 0x20, 0x11); TeachyTvSetSpriteCoordsAndSwitchFrame(((u8*)data)[2], 8, 0x38, 7); @@ -596,13 +591,8 @@ void TeachyTvClusFuncTransitionRenderBg2TeachyTvGraphicInitNpcPos(u8 taskId) void TeachyTvClusFuncClearBg2TeachyTvGraphic(u8 taskId) { - u16 *data; - u32 counter; - - data = (u16*)gTasks[taskId].data; - counter = data[2] + 1; - data[2] = counter; - if ( (s16)counter == 134 ) + s16 *data = gTasks[taskId].data; + if ( ++data[2] == 134 ) { FillBgTilemapBufferRect_Palette0(2, 0, 2, 1, 0x1A, 0xC); schedule_bg_copy_tilemap_to_vram(2); @@ -730,7 +720,7 @@ void TeachyTvClusFuncDudeMoveUp(u8 taskId) --((u8*)gUnknown_203F450)[0x4005]; TeachyTvGrassAnimationMain(taskId, obj->pos2.x, obj->pos2.y, 0, 0); } - if ( data[2] == 0x30 ) + if ( data[2] == 48 ) { data[2] = 0; data[4] = -1; @@ -742,20 +732,17 @@ void TeachyTvClusFuncDudeMoveUp(u8 taskId) void TeachyTvClusFuncDudeMoveRight(u8 taskId) { - u16 *data; + s16 *data; struct Sprite *obj; - int counter; data = (u16 *)gTasks[taskId].data; obj = &gSprites[(s16)data[1]]; ChangeBgX(3, 0x100, 1); - counter = data[2] + 1; - data[2] = counter; - if ( !(counter & 0xF) ) + if ( !(++data[2] & 0xF) ) ++((u8*)gUnknown_203F450)[0x4004]; if ( !((((s16*)data)[2] + 8) & 0xF) ) TeachyTvGrassAnimationMain(taskId, obj->pos2.x + 8, obj->pos2.y, 0, 0); - if ( (s16)data[2] == 0x30 ) + if ( data[2] == 0x30 ) { data[2] = 0; data[4] = 0; @@ -843,8 +830,8 @@ void TeachyTvBackToOptionList(u8 taskId) TeachyTvSetupScrollIndicatorArrowPair(); TeachyTvSetWindowRegs(); schedule_bg_copy_tilemap_to_vram(0); - ChangeBgX(3, 0, 0); - ChangeBgY(3, 0, 0); + ChangeBgX(3, 0x0, 0); + ChangeBgY(3, 0x0, 0); ChangeBgX(3, 0x1000, 2); ChangeBgY(3, 0x2800, 1); ((u8*)gUnknown_203F450)[0x4004] = 0; -- cgit v1.2.3 From 0faa768a0971128d40980b47ad1b9e348c3b9558 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Mon, 10 Jun 2019 03:55:42 +0800 Subject: now using struct decl --- src/teachy_tv.c | 104 ++++++++++++++++++++++++++++++-------------------------- 1 file changed, 56 insertions(+), 48 deletions(-) (limited to 'src') diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 499253a72..7883fb864 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -40,8 +40,21 @@ struct TeachyTvCtrlBlk u16 filler; }; +struct TeachyTvBuf +{ + u32 state; + u8 buffer1[0x1000]; + u8 buffer2[0x1000]; + u8 buffer3[0x1000]; + u8 buffer4[0x1000]; + u8 var_4004; + u8 var_4005; + u8 var_4006; + u8 var_4007; +}; + extern struct TeachyTvCtrlBlk gTeachyTV_StaticResources; -extern void * gUnknown_203F450; +extern struct TeachyTvBuf * gUnknown_203F450; extern const struct ScrollIndicatorArrowPairTemplate gUnknown_8479380; extern const char gUnknown_841B83D; extern const struct BgTemplate gUnknown_84792E0; @@ -157,18 +170,18 @@ void TeachyTvMainCallback() int state; int taskId; struct Task *taskAddr; - u8 **memBuf; + struct TeachyTvBuf **memBuf; u32 x; state = gMain.state; switch (state) { case 0: - memBuf = (u8 **)&gUnknown_203F450; - (*memBuf) = (u8*)AllocZeroed(0x4008); - *(u32*)gUnknown_203F450 = (u32)state; - *((u8*)gUnknown_203F450 + 0x4006) = state; - *((u8*)gUnknown_203F450 + 0x4007) = 0xFF; + memBuf = &gUnknown_203F450; + (*memBuf) = (struct TeachyTvBuf *)AllocZeroed(0x4008); + gUnknown_203F450->state = (u32)state; + gUnknown_203F450->var_4006 = state; + gUnknown_203F450->var_4007 = 0xFF; VblankHblankHandlerSetZero(); clear_scheduled_bg_copies_to_vram(); ScanlineEffect_Stop(); @@ -219,9 +232,9 @@ void TeachyTvSetupBg() InitBgReg(); ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, &gUnknown_84792E0, 4); - SetBgTilemapBuffer(1, (u8 *)gUnknown_203F450 + 4); - SetBgTilemapBuffer(2, (u8 *)gUnknown_203F450 + 0x1004); - SetBgTilemapBuffer(3, (u8 *)gUnknown_203F450 + 0x2004); + SetBgTilemapBuffer(1, gUnknown_203F450->buffer1); + SetBgTilemapBuffer(2, gUnknown_203F450->buffer2); + SetBgTilemapBuffer(3, gUnknown_203F450->buffer3); SetGpuReg(REG_OFFSET_DISPCNT, 0x3040); ShowBg(0); ShowBg(1); @@ -229,8 +242,8 @@ void TeachyTvSetupBg() ShowBg(3); ChangeBgX(3, 0x1000, 2); ChangeBgY(3, 0x2800, 1); - *((u8 *)gUnknown_203F450 + 0x4004) = 0; - *((u8 *)gUnknown_203F450 + 0x4005) = 3; + gUnknown_203F450->var_4004 = 0; + gUnknown_203F450->var_4005 = 3; SetGpuReg(REG_OFFSET_BLDCNT, 0); } @@ -240,12 +253,12 @@ void TeachyTvLoadGraphic() src = 0; reset_temp_tile_data_buffers(); decompress_and_copy_tile_data_to_vram(1, &gUnknown_8E86240, 0, 0, 0); - LZDecompressWram(&gUnknown_8E86BE8, (*(u8 **)&gUnknown_203F450) + 0x4); - LZDecompressWram(&gUnknown_8E86D6C, (*(u8 **)&gUnknown_203F450) + 0x3004); + LZDecompressWram(&gUnknown_8E86BE8, gUnknown_203F450->buffer1); + LZDecompressWram(&gUnknown_8E86D6C, gUnknown_203F450->buffer4); LoadCompressedPalette(&gUnknown_8E86F98, 0, 0x80); LoadPalette(&src, 0, 2); LoadSpritePalette(&gUnknown_83A5348); - TeachyTvLoadBg3Map((u8 *)gUnknown_203F450 + 0x2004); + TeachyTvLoadBg3Map(gUnknown_203F450->buffer3); } void TeachyTvCreateAndRenderRbox() @@ -284,27 +297,26 @@ void TeachyTvSetupScrollIndicatorArrowPair() hasItem = (u8)CheckBagHasItem(ITEM_TM_CASE, 1); if ( ! hasItem << 24 ) { - u8 * temp = (u8 *)gUnknown_203F450; - *((u8 *)temp + 0x4007) = 0xFF; + struct TeachyTvBuf * temp = gUnknown_203F450; + temp->var_4007 = 0xFF; } else { - u8 *temp, res; - res = AddScrollIndicatorArrowPair( - &gUnknown_8479380, - &(gTeachyTV_StaticResources.scrollOffset)); - temp = (u8 *)gUnknown_203F450; - *((u8 *)temp + 0x4007) = res; + struct TeachyTvBuf *temp; + u8 res; + res = AddScrollIndicatorArrowPair(&gUnknown_8479380, &(gTeachyTV_StaticResources.scrollOffset)); + temp = gUnknown_203F450; + temp->var_4007 = res; } } void TeachyTvRemoveScrollIndicatorArrowPair() { - u8 *temp = ((u8*)gUnknown_203F450 + 0x4007); + u8 *temp = &(gUnknown_203F450->var_4007); if ( *temp != 0xFF ) { RemoveScrollIndicatorArrowPair(*temp); - *((u8*)gUnknown_203F450 + 0x4007) = 0xFF; + gUnknown_203F450->var_4007 = 0xFF; } } @@ -392,8 +404,8 @@ void TeachyTvSetupPostBattleWindowAndObj(u8 taskId) TeachyTvSetSpriteCoordsAndSwitchFrame(((char*)v2)[2], 0x78, 0x38, 0); ChangeBgX(3, 0x3000, 1); ChangeBgY(3, 0x3000, 2); - *((u8 *)gUnknown_203F450 + 0x4004) += 3; - *((u8 *)gUnknown_203F450 + 0x4005) -= 3; + gUnknown_203F450->var_4004 += 3; + gUnknown_203F450->var_4005 -= 3; } else if ( op <= 5 ) TeachyTvSetSpriteCoordsAndSwitchFrame(((char*)v2)[2], 0x78, 0x38, 0); @@ -429,7 +441,7 @@ void TeachyTvQuitFadeControlAndTaskDel(u8 taskId) { if ( !(gPaletteFade.active) ) { - if ( *(u32 *)gUnknown_203F450 ) + if ( gUnknown_203F450->state ) { SetMainCallback2(*(void (**)())gUnknown_203F450); } @@ -580,7 +592,7 @@ void TeachyTvClusFuncTransitionRenderBg2TeachyTvGraphicInitNpcPos(u8 taskId) TeachyTvBg2AnimController(); if ( ++data[2] > 63 ) { - CopyToBgTilemapBufferRect_ChangePalette(2, (u8 *)gUnknown_203F450 + 0x3004, 0, 0, 0x20, 0x20, 0x11); + CopyToBgTilemapBufferRect_ChangePalette(2, gUnknown_203F450->buffer4, 0, 0, 0x20, 0x20, 0x11); TeachyTvSetSpriteCoordsAndSwitchFrame(((u8*)data)[2], 8, 0x38, 7); schedule_bg_copy_tilemap_to_vram(2); data[2] = 0; @@ -636,15 +648,15 @@ void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId) data = gTasks[taskId].data; if ( gMain.newKeys & 2 ) { - char *offset = ((char *)gUnknown_203F450 + 0x4006); - u32 v4 = 0; + u8 *offset = &(gUnknown_203F450->var_4006); + u32 zero = 0; offset[0] = 1; TeachyTvSetSpriteCoordsAndSwitchFrame(*((char *)data + 2), 0, 0, 0); FillWindowPixelBuffer(0, 0xCC); CopyWindowToVram(0, 2); TeachyTvClearBg1EndGraphicText(); - data[2] = v4; - data[3] = v4; + data[2] = zero; + data[3] = zero; gTasks[taskId].func = TeachyTvBackToOptionList; } else @@ -707,17 +719,13 @@ void TeachyTvClusFuncDudeMoveUp(u8 taskId) { s16 *data; struct Sprite *obj; - int temp; - int counter; data = gTasks[taskId].data; obj = &gSprites[data[1]]; ChangeBgY(3, 0x100, 2); - counter = (u16)data[2] + 1; - ((u16*)data)[2] = counter; - if ( !( counter % 16 ) ) + if ( !( ++data[2] & 0xF ) ) { - --((u8*)gUnknown_203F450)[0x4005]; + --gUnknown_203F450->var_4005; TeachyTvGrassAnimationMain(taskId, obj->pos2.x, obj->pos2.y, 0, 0); } if ( data[2] == 48 ) @@ -739,7 +747,7 @@ void TeachyTvClusFuncDudeMoveRight(u8 taskId) obj = &gSprites[(s16)data[1]]; ChangeBgX(3, 0x100, 1); if ( !(++data[2] & 0xF) ) - ++((u8*)gUnknown_203F450)[0x4004]; + ++gUnknown_203F450->var_4004; if ( !((((s16*)data)[2] + 8) & 0xF) ) TeachyTvGrassAnimationMain(taskId, obj->pos2.x + 8, obj->pos2.y, 0, 0); if ( data[2] == 0x30 ) @@ -834,9 +842,9 @@ void TeachyTvBackToOptionList(u8 taskId) ChangeBgY(3, 0x0, 0); ChangeBgX(3, 0x1000, 2); ChangeBgY(3, 0x2800, 1); - ((u8*)gUnknown_203F450)[0x4004] = 0; - ((u8*)gUnknown_203F450)[0x4005] = 3; - ((u8*)gUnknown_203F450)[0x4006] = 0; + gUnknown_203F450->var_4004 = 0; + gUnknown_203F450->var_4005 = 3; + gUnknown_203F450->var_4006 = 0; } } @@ -886,7 +894,7 @@ void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 m const struct SpriteTemplate *const *objTemAddr; subprio = subpriority; - if ( ((u8*)gUnknown_203F450)[0x4006] != 1 ) + if ( gUnknown_203F450->var_4006 != 1 ) { res = TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj( (u32)((x << 16) - 0x100000) >> 16, @@ -920,7 +928,7 @@ void TeachyTvGrassAnimationObjCallback(struct Sprite *sprite) u32 diff1, diff2; s16 *data = gTasks[sprite->data[0]].data; struct Sprite *objAddr = &gSprites[data[1]]; - if (((u8*)gUnknown_203F450)[0x4006] == 1) + if (gUnknown_203F450->var_4006 == 1) DestroySprite(sprite); else { if (!sprite->animCmdIndex) @@ -950,14 +958,14 @@ void TeachyTvGrassAnimationObjCallback(struct Sprite *sprite) u8 TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj(s16 x, s16 y) { const u8 * arr; - u8 *ptr; + struct TeachyTvBuf *ptr; int high, low; if ( (x < 0) || (y < 0) ) return 0; arr = &gUnknown_84795C8; ptr = gUnknown_203F450; - high = ((y >> 4) + ptr[0x4005]) << 4; - low = ((x >> 4) + ptr[0x4004]); + high = ((y >> 4) + ptr->var_4005) << 4; + low = ((x >> 4) + ptr->var_4004); return arr[high+low]; } -- cgit v1.2.3 From 4dc1fc8c66cfda1892eb091fbcefa4c98b556127 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Mon, 10 Jun 2019 04:10:41 +0800 Subject: sub_815ABC4 --- src/teachy_tv.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 7883fb864..4e6787755 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -137,18 +137,18 @@ void TeachyTvVblankHandler() void sub_815ABC4(u8 mode, void (*cb)()) { - struct TeachyTvCtrlBlk *resAddr = &gTeachyTV_StaticResources; - u16 zero = 0; - resAddr->mode = mode; - resAddr->callback = cb; - if (!mode) + gTeachyTV_StaticResources.mode = mode; + gTeachyTV_StaticResources.callback = cb; + if (mode == 0) { - resAddr->scrollOffset = zero; - resAddr->selectedRow = zero; - resAddr->optionChosen = 0; + gTeachyTV_StaticResources.scrollOffset = 0; + gTeachyTV_StaticResources.selectedRow = 0; + gTeachyTV_StaticResources.optionChosen = 0; } if (mode == 1) - resAddr->mode = 0; + { + gTeachyTV_StaticResources.mode = 0; + } SetMainCallback2(TeachyTvMainCallback); } -- cgit v1.2.3 From f194f18f4c761d119b493d9d34ba2b170706f1a6 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Mon, 10 Jun 2019 05:32:23 +0800 Subject: improved --- src/teachy_tv.c | 124 +++++++++++++++++++++++++------------------------------- 1 file changed, 56 insertions(+), 68 deletions(-) (limited to 'src') diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 4e6787755..a7d5b7da0 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -171,7 +171,6 @@ void TeachyTvMainCallback() int taskId; struct Task *taskAddr; struct TeachyTvBuf **memBuf; - u32 x; state = gMain.state; switch (state) @@ -207,8 +206,7 @@ void TeachyTvMainCallback() else { taskId = CreateTask(TeachyTvOptionListController, 0); - x = (u32)TeachyTvSetupWindow(); - gTasks[taskId].data[0] = (x << 24) >> 24; + gTasks[taskId].data[0] = TeachyTvSetupWindow(); gTasks[taskId].data[1] = TeachyTvSetupObjEventAndOam(); TeachyTvSetupScrollIndicatorArrowPair(); PlayNewMapMusic(BGM_FRLG_TEACHY_TV); @@ -277,8 +275,7 @@ u8 TeachyTvSetupWindow() gMultiuseListMenuTemplate = gUnknown_8479368; gMultiuseListMenuTemplate.windowId = 1; gMultiuseListMenuTemplate.moveCursorFunc = TeachyTvAudioByInput; - hasItem = (u8)CheckBagHasItem(ITEM_TM_CASE, 1); - if ( !(hasItem << 24) ) + if (!CheckBagHasItem(ITEM_TM_CASE, 1)) { gMultiuseListMenuTemplate.items = &gUnknown_8479340; gMultiuseListMenuTemplate.totalItems = 5; @@ -294,8 +291,7 @@ u8 TeachyTvSetupWindow() void TeachyTvSetupScrollIndicatorArrowPair() { int hasItem; - hasItem = (u8)CheckBagHasItem(ITEM_TM_CASE, 1); - if ( ! hasItem << 24 ) + if (!CheckBagHasItem(ITEM_TM_CASE, 1)) { struct TeachyTvBuf * temp = gUnknown_203F450; temp->var_4007 = 0xFF; @@ -312,17 +308,16 @@ void TeachyTvSetupScrollIndicatorArrowPair() void TeachyTvRemoveScrollIndicatorArrowPair() { - u8 *temp = &(gUnknown_203F450->var_4007); - if ( *temp != 0xFF ) + if ( gUnknown_203F450->var_4007 != 0xFF ) { - RemoveScrollIndicatorArrowPair(*temp); + RemoveScrollIndicatorArrowPair(gUnknown_203F450->var_4007); gUnknown_203F450->var_4007 = 0xFF; } } void TeachyTvAudioByInput(s32 notUsed, bool8 play, struct ListMenu *notUsedAlt) { - if ( play != 1 ) + if ( play != TRUE ) PlaySE(SE_SELECT); } @@ -365,8 +360,8 @@ void TeachyTvClearWindowRegs() void TeachyTvBg2AnimController() { u16 *tilemapBuffer; - u8 i; - u32 offset, offset2, j; + u8 i, offset2; + u32 j, offset; tilemapBuffer = (u16 *)GetBgTilemapBuffer(2); i = 1; @@ -378,19 +373,19 @@ void TeachyTvBg2AnimController() do { tilemapBuffer[offset + offset2] = ((Random() & 3) << 10) + 0x301F; - offset2 = (offset2 + 1) << 0x18 >> 0x18; + offset2 = (offset2 + 1); } while ( offset2 <= 0x1B ); i = j; } - while ( j << 0x18 >> 0x18 <= 0xC ); + while ( (u8)j <= 0xC ); schedule_bg_copy_tilemap_to_vram(2); } void TeachyTvSetupPostBattleWindowAndObj(u8 taskId) { - u16 *v2 = gTasks[taskId].data; - int v1 = ((s16 *)v2)[1]; + s16 *data = gTasks[taskId].data; + int v1 = (data)[1]; struct Sprite *v3 = &gSprites[v1]; int op; @@ -401,18 +396,18 @@ void TeachyTvSetupPostBattleWindowAndObj(u8 taskId) { if ( op <= 3 ) { - TeachyTvSetSpriteCoordsAndSwitchFrame(((char*)v2)[2], 0x78, 0x38, 0); + TeachyTvSetSpriteCoordsAndSwitchFrame(((char*)data)[2], 0x78, 0x38, 0); ChangeBgX(3, 0x3000, 1); ChangeBgY(3, 0x3000, 2); gUnknown_203F450->var_4004 += 3; gUnknown_203F450->var_4005 -= 3; } else if ( op <= 5 ) - TeachyTvSetSpriteCoordsAndSwitchFrame(((char*)v2)[2], 0x78, 0x38, 0); + TeachyTvSetSpriteCoordsAndSwitchFrame(((char*)data)[2], 0x78, 0x38, 0); } - v2[4] = 0; - v2[5] = 0; + data[4] = 0; + data[5] = 0; TeachyTvGrassAnimationMain(taskId, v3->pos2.x, v3->pos2.y, 0, 1); } @@ -458,32 +453,32 @@ void TeachyTvQuitFadeControlAndTaskDel(u8 taskId) #ifdef NONMATCHING void TeachyTvOptionListController(u8 taskId) { - char *v2; - s32 v3; + s16 *data; + s32 res; - v2 = (char *)gTasks[taskId].data; + data = gTasks[taskId].data; TeachyTvBg2AnimController(); if ( !(gPaletteFade.active) ) { - v3 = ListMenuHandleInput(*v2); - ListMenuGetScrollAndRow(*v2, &gTeachyTV_StaticResources.scrollOffset, &gTeachyTV_StaticResources.selectedRow); + res = ListMenuHandleInput(*data); + ListMenuGetScrollAndRow(*data, &gTeachyTV_StaticResources.scrollOffset, &gTeachyTV_StaticResources.selectedRow); if ( ((gMain.newKeys) & 4 && (gTeachyTV_StaticResources.callback != UseFameCheckerFromMenu)) - || (v3 == -2) ) + || (res == -2) ) { PlaySE(SE_SELECT); TeachyTvQuitBeginFade(taskId); } - else if ( v3 != -1 ) + else if ( res != -1 ) { PlaySE(SE_SELECT); - gTeachyTV_StaticResources.optionChosen = v3; - DestroyListMenu(*v2, &gTeachyTV_StaticResources.scrollOffset, &gTeachyTV_StaticResources.selectedRow); + gTeachyTV_StaticResources.optionChosen = res; + DestroyListMenu(*data, &gTeachyTV_StaticResources.scrollOffset, &gTeachyTV_StaticResources.selectedRow); TeachyTvClearWindowRegs(); ClearWindowTilemap(1); schedule_bg_copy_tilemap_to_vram(0); TeachyTvRemoveScrollIndicatorArrowPair(); - *((u16 *)v2 + 3) = 0; - *((u16 *)v2 + 2) = 0; + data[3] = 0; + data[2] = 0; gTasks[taskId].func = TeachyTvRenderMsgAndSwitchClusterFuncs; } } @@ -637,14 +632,14 @@ void TeachyTvClusFuncNpcMoveAndSetupTextPrinter(u8 taskId) void TeachyTvClusFuncIdleIfTextPrinterIsActive(u8 taskId) { - u16* data = (u16 *)gTasks[taskId].data; - if ( !(sub_80BF518(0) << 16) ) + s16* data = (u16 *)gTasks[taskId].data; + if ( !sub_80BF518(0) ) ++data[3]; } void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId) { - u16 *data; + s16 *data; data = gTasks[taskId].data; if ( gMain.newKeys & 2 ) { @@ -663,15 +658,13 @@ void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId) { void (***array)(u8) = &gUnknown_8479548; void (**cluster)(u8) = array[(u8)gTeachyTV_StaticResources.optionChosen]; - _call_via_r1( - taskId, - cluster[(s16)data[3]]); + cluster[data[3]](taskId); } } void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen(u8 taskId) { - u16 *data = (u16 *)gTasks[taskId].data; + s16 *data = (u16 *)gTasks[taskId].data; const char * const* texts = &gUnknown_8479560; TeachyTvInitTextPrinter(texts[gTeachyTV_StaticResources.optionChosen]); ++data[3]; @@ -679,7 +672,7 @@ void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen(u8 taskId) void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen2(u8 taskId) { - u16 *data = (u16 *)gTasks[taskId].data; + s16 *data = (u16 *)gTasks[taskId].data; const char * const* texts = &gUnknown_8479578; TeachyTvInitTextPrinter(texts[gTeachyTV_StaticResources.optionChosen]); ++data[3]; @@ -687,16 +680,16 @@ void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen2(u8 taskId) void TeachyTvClusFuncIdleIfTextPrinterIsActive2(u8 taskId) { - u16* data = (u16 *)gTasks[taskId].data; - if ( !(sub_80BF518(0) << 16) ) + s16* data = (u16 *)gTasks[taskId].data; + if ( !sub_80BF518(0) ) ++data[3]; } void TeachyTvClusFuncEraseTextWindowIfKeyPressed(u8 taskId) { - u16 *data; + s16 *data; data = (u16 *)gTasks[taskId].data; - if ( gMain.newKeys & 3 ) + if (JOY_NEW(A_BUTTON | B_BUTTON)) { FillWindowPixelBuffer(0, 0xCC); CopyWindowToVram(0, 2); @@ -706,7 +699,7 @@ void TeachyTvClusFuncEraseTextWindowIfKeyPressed(u8 taskId) void TeachyTvClusFuncStartAnimNpcWalkIntoGrass(u8 taskId) { - u16 *data; + s16 *data; data = (u16 *)gTasks[taskId].data; StartSpriteAnim(&gSprites[(s16)data[1]], 5); data[2] = 0; @@ -748,7 +741,7 @@ void TeachyTvClusFuncDudeMoveRight(u8 taskId) ChangeBgX(3, 0x100, 1); if ( !(++data[2] & 0xF) ) ++gUnknown_203F450->var_4004; - if ( !((((s16*)data)[2] + 8) & 0xF) ) + if ( !((data[2] + 8) & 0xF) ) TeachyTvGrassAnimationMain(taskId, obj->pos2.x + 8, obj->pos2.y, 0, 0); if ( data[2] == 0x30 ) { @@ -768,7 +761,7 @@ void TeachyTvClusFuncDudeTurnLeft(u8 taskId) data = gTasks[taskId].data; v3 = &gSprites[data[1]]; StartSpriteAnim(v3, 6); - ++(u16)data[3]; + ++data[3]; data[4] = 0; data[5] = 0; TeachyTvGrassAnimationMain(taskId, v3->pos2.x, v3->pos2.y, 0, 0); @@ -785,7 +778,7 @@ void TeachyTvClusFuncDudeMoveLeft(u8 taskId) if ( !(v2->pos2.x & 0xF) ) TeachyTvGrassAnimationMain(taskId, v2->pos2.x - 8, v2->pos2.y, 0, 0); if ( v2->pos2.x == 8 ) - ++(u16)data[3]; + ++data[3]; else --v2->pos2.x; } @@ -793,7 +786,6 @@ void TeachyTvClusFuncDudeMoveLeft(u8 taskId) void TeachyTvClusFuncRenderAndRemoveBg1EndGraphic(u8 taskId) { s16 *data; - int temp; data = gTasks[taskId].data; if ( !data[2] ) @@ -801,13 +793,11 @@ void TeachyTvClusFuncRenderAndRemoveBg1EndGraphic(u8 taskId) CopyToBgTilemapBufferRect_ChangePalette(1, &gUnknown_8479590, 0x14, 0xA, 8, 2, 0x11); schedule_bg_copy_tilemap_to_vram(1); } - temp = (u16)data[2] + 1; - data[2] = temp; - if ( (s16)temp > 126 ) + if ( ++data[2] > 126 ) { TeachyTvClearBg1EndGraphicText(); - (u16)data[2] = 0; - ++(u16)data[3]; + data[2] = 0; + ++data[3]; } } @@ -820,15 +810,12 @@ void TeachyTvClearBg1EndGraphicText() void TeachyTvBackToOptionList(u8 taskId) { s16 *data; - s32 temp; data = gTasks[taskId].data; if ( !data[2] ) PlayNewMapMusic(BGM_FRLG_TEACHY_TV); TeachyTvBg2AnimController(); - temp = (u16)data[2] + 1; - data[2] = temp; - if ( (s16)temp > 0x3F ) + if ( ++data[2] > 63 ) { data[2] = 0; data[3] = 0; @@ -851,17 +838,18 @@ void TeachyTvBackToOptionList(u8 taskId) void TeachyTvChainTaskBattleOrFadeByOptionChosen(u8 taskId) { int op = gTeachyTV_StaticResources.optionChosen; - if ( op < 0 ) - return; - if ( op <= 3 ) + if ( op >= 0 ) { - TeachyTvPrepBattle(taskId); + if ( op <= 3 ) + { + TeachyTvPrepBattle(taskId); - } - else if ( op <= 5 ) - { - *((void(**)())gUnknown_203F450) = TeachyTvSetupBagItemsByOptionChosen; - TeachyTvQuitBeginFade(taskId); + } + else if ( op <= 5 ) + { + *((void(**)())gUnknown_203F450) = TeachyTvSetupBagItemsByOptionChosen; + TeachyTvQuitBeginFade(taskId); + } } } @@ -897,7 +885,7 @@ void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 m if ( gUnknown_203F450->var_4006 != 1 ) { res = TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj( - (u32)((x << 16) - 0x100000) >> 16, + x - 0x10, y); if ( res << 24 ) { -- cgit v1.2.3 From 4580b3fb33f8ee06b66d24277af21d79a545a53c Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Mon, 10 Jun 2019 05:53:49 +0800 Subject: fix TeachyTvOptionListController --- src/teachy_tv.c | 145 +++++++++++--------------------------------------------- 1 file changed, 28 insertions(+), 117 deletions(-) (limited to 'src') diff --git a/src/teachy_tv.c b/src/teachy_tv.c index a7d5b7da0..9a0d61fa0 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -450,137 +450,48 @@ void TeachyTvQuitFadeControlAndTaskDel(u8 taskId) } } -#ifdef NONMATCHING void TeachyTvOptionListController(u8 taskId) { - s16 *data; - s32 res; + s16 * data = gTasks[taskId].data; + s32 input; - data = gTasks[taskId].data; TeachyTvBg2AnimController(); - if ( !(gPaletteFade.active) ) + if (!gPaletteFade.active) { - res = ListMenuHandleInput(*data); - ListMenuGetScrollAndRow(*data, &gTeachyTV_StaticResources.scrollOffset, &gTeachyTV_StaticResources.selectedRow); - if ( ((gMain.newKeys) & 4 && (gTeachyTV_StaticResources.callback != UseFameCheckerFromMenu)) - || (res == -2) ) + input = ListMenuHandleInput(data[0]); + ListMenuGetScrollAndRow(data[0], &gTeachyTV_StaticResources.scrollOffset, &gTeachyTV_StaticResources.selectedRow); + if ((JOY_NEW(SELECT_BUTTON) && gTeachyTV_StaticResources.callback != UseFameCheckerFromMenu)) { PlaySE(SE_SELECT); TeachyTvQuitBeginFade(taskId); } - else if ( res != -1 ) + else { - PlaySE(SE_SELECT); - gTeachyTV_StaticResources.optionChosen = res; - DestroyListMenu(*data, &gTeachyTV_StaticResources.scrollOffset, &gTeachyTV_StaticResources.selectedRow); - TeachyTvClearWindowRegs(); - ClearWindowTilemap(1); - schedule_bg_copy_tilemap_to_vram(0); - TeachyTvRemoveScrollIndicatorArrowPair(); - data[3] = 0; - data[2] = 0; - gTasks[taskId].func = TeachyTvRenderMsgAndSwitchClusterFuncs; + switch (input) + { + case -1: + break; + case -2: + PlaySE(SE_SELECT); + TeachyTvQuitBeginFade(taskId); + break; + default: + PlaySE(SE_SELECT); + gTeachyTV_StaticResources.optionChosen = input; + DestroyListMenu(data[0], &gTeachyTV_StaticResources.scrollOffset, &gTeachyTV_StaticResources.selectedRow); + TeachyTvClearWindowRegs(); + ClearWindowTilemap(1); + schedule_bg_copy_tilemap_to_vram(0); + TeachyTvRemoveScrollIndicatorArrowPair(); + data[3] = 0; + data[2] = 0; + gTasks[taskId].func = TeachyTvRenderMsgAndSwitchClusterFuncs; + break; + } } } } -#else -NAKED -void TeachyTvOptionListController(u8 taskId) -{ - asm_unified("\n\ - push {r4-r7,lr}\n\ - lsls r0, 24\n\ - lsrs r7, r0, 24\n\ - lsls r0, r7, 2\n\ - adds r0, r7\n\ - lsls r0, 3\n\ - ldr r1, _0815B31C @ =gTasks+0x8\n\ - adds r6, r0, r1\n\ - bl TeachyTvBg2AnimController\n\ - ldr r0, _0815B320 @ =gPaletteFade\n\ - ldrb r1, [r0, 0x7]\n\ - movs r0, 0x80\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0815B37A\n\ - ldrb r0, [r6]\n\ - bl ListMenuHandleInput\n\ - adds r5, r0, 0\n\ - ldrb r0, [r6]\n\ - ldr r4, _0815B324 @ =gTeachyTV_StaticResources+6\n\ - adds r2, r4, 0x2\n\ - adds r1, r4, 0\n\ - bl ListMenuGetScrollAndRow\n\ - ldr r0, _0815B328 @ =gMain\n\ - ldrh r1, [r0, 0x2E]\n\ - movs r0, 0x4\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0815B30A\n\ - subs r0, r4, 0x6\n\ - ldr r1, [r0]\n\ - ldr r0, _0815B32C @ =UseFameCheckerFromMenu\n\ - cmp r1, r0\n\ - bne _0815B330\n\ - _0815B30A:\n\ - movs r0, 0x2\n\ - negs r0, r0\n\ - cmp r5, r0\n\ - beq _0815B330\n\ - adds r0, 0x1\n\ - cmp r5, r0\n\ - bne _0815B33E\n\ - b _0815B37A\n\ - .align 2, 0\n\ - _0815B31C: .4byte gTasks+0x8\n\ - _0815B320: .4byte gPaletteFade\n\ - _0815B324: .4byte gTeachyTV_StaticResources+6\n\ - _0815B328: .4byte gMain\n\ - _0815B32C: .4byte UseFameCheckerFromMenu\n\ - _0815B330:\n\ - movs r0, 0x5\n\ - bl PlaySE\n\ - adds r0, r7, 0\n\ - bl TeachyTvQuitBeginFade\n\ - b _0815B37A\n\ - _0815B33E:\n\ - movs r0, 0x5\n\ - bl PlaySE\n\ - ldr r2, _0815B380 @ =gTeachyTV_StaticResources\n\ - movs r4, 0\n\ - strb r5, [r2, 0x5]\n\ - ldrb r0, [r6]\n\ - adds r1, r2, 0x6\n\ - adds r2, 0x8\n\ - bl DestroyListMenu\n\ - bl TeachyTvClearWindowRegs\n\ - movs r0, 0x1\n\ - bl ClearWindowTilemap\n\ - movs r0, 0\n\ - bl schedule_bg_copy_tilemap_to_vram\n\ - bl TeachyTvRemoveScrollIndicatorArrowPair\n\ - strh r4, [r6, 0x6]\n\ - strh r4, [r6, 0x4]\n\ - ldr r1, _0815B384 @ =gTasks\n\ - lsls r0, r7, 2\n\ - adds r0, r7\n\ - lsls r0, 3\n\ - adds r0, r1\n\ - ldr r1, _0815B388 @ =TeachyTvRenderMsgAndSwitchClusterFuncs\n\ - str r1, [r0]\n\ - _0815B37A:\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ - _0815B380: .4byte gTeachyTV_StaticResources\n\ - _0815B384: .4byte gTasks\n\ - _0815B388: .4byte TeachyTvRenderMsgAndSwitchClusterFuncs\n\ - "); -} -#endif - void TeachyTvClusFuncTransitionRenderBg2TeachyTvGraphicInitNpcPos(u8 taskId) { s16 *data = gTasks[taskId].data; -- cgit v1.2.3 From dcbeca2beb9303e6fd18b77cd8d133ea86686ea1 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Mon, 10 Jun 2019 06:00:06 +0800 Subject: fix a type --- src/teachy_tv.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 9a0d61fa0..62d5dc4f6 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -1578,7 +1578,7 @@ void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 * u16 TeachyTvComputePalIndexArrayEntryByMetaTile(u8 *palIndexArrayBuf, u16 metaTile) { u32 pal; - u32 i; + u16 i; int firstEntry; int temp; @@ -1595,7 +1595,7 @@ u16 TeachyTvComputePalIndexArrayEntryByMetaTile(u8 *palIndexArrayBuf, u16 metaTi { while ( 1 ) { - i = ((i + 1) << 0x10) >> 0x10; + ++i; if ( i > 0xF ) break; temp = palIndexArrayBuf[i]; @@ -1609,7 +1609,7 @@ u16 TeachyTvComputePalIndexArrayEntryByMetaTile(u8 *palIndexArrayBuf, u16 metaTi } } } - return (u16)(0xF - i); + return (0xF - i); } #ifdef NONMATCHING -- cgit v1.2.3 From cce7cee9bd710f59e4078dc1e088b5e645514049 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Mon, 10 Jun 2019 07:20:37 +0800 Subject: all fixed --- src/teachy_tv.c | 96 +++++++++++++++++++++++++++------------------------------ 1 file changed, 45 insertions(+), 51 deletions(-) (limited to 'src') diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 62d5dc4f6..632cd5d4f 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -76,41 +76,41 @@ extern const struct SpriteTemplate * const gUnknown_83A0010; extern const u8 gUnknown_84795C8; extern const struct MapData Route1_Layout; -extern void VblankHblankHandlerSetZero(); +extern void VblankHblankHandlerSetZero(void); extern void sub_812B1E0(u16); extern u8 ListMenuInitInternal(struct ListMenuTemplate *, u16 scrollOffset, u16 selectedRow); -extern void sub_8055DC4(); +extern void sub_8055DC4(void); extern bool16 sub_80BF518(u8 textPrinterId); extern void _call_via_r1(s32 arg, void *func); extern void sub_810B108(u8); -extern void sub_8159F40(); - -void TeachyTvCallback(); -void TeachyTvMainCallback(); -void TeachyTvVblankHandler(); -void TeachyTvCreateAndRenderRbox(); -void TeachyTvInitIo(); -u8 TeachyTvSetupObjEventAndOam(); +extern void sub_8159F40(void); + +void TeachyTvCallback(void); +void TeachyTvMainCallback(void); +void TeachyTvVblankHandler(void); +void TeachyTvCreateAndRenderRbox(void); +void TeachyTvInitIo(void); +u8 TeachyTvSetupObjEventAndOam(void); void TeachyTvSetupPostBattleWindowAndObj(u8); -u8 TeachyTvSetupWindow(); -void TeachyTvSetupScrollIndicatorArrowPair(); -void TeachyTvSetWindowRegs(); -void TeachyTvSetupBg(); -void TeachyTvLoadGraphic(); +u8 TeachyTvSetupWindow(void); +void TeachyTvSetupScrollIndicatorArrowPair(void); +void TeachyTvSetWindowRegs(void); +void TeachyTvSetupBg(void); +void TeachyTvLoadGraphic(void); void TeachyTvPostBattleFadeControl(u8); void TeachyTvOptionListController(u8); void TeachyTvAudioByInput(s32, bool8, struct ListMenu *); void TeachyTvQuitFadeControlAndTaskDel(u8 taskId); void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId); -void TeachyTvClearBg1EndGraphicText(); +void TeachyTvClearBg1EndGraphicText(void); void TeachyTvBackToOptionList(u8 taskId); -void TeachyTvSetupBagItemsByOptionChosen(); +void TeachyTvSetupBagItemsByOptionChosen(void); void TeachyTvPrepBattle(u8 taskId); void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 mode); void TeachyTvLoadBg3Map(void *); u8 TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj(s16 x, s16 y); void TeachyTvGrassAnimationObjCallback(struct Sprite *sprite); -void TeachyTvRestorePlayerPartyCallback(); +void TeachyTvRestorePlayerPartyCallback(void); void TeachyTvPreBattleAnimAndSetBattleCallback(u8 taskId); void TeachyTvLoadMapTilesetToBuffer(struct Tileset *ts, u8 *dstBuffer, u16 size); void TeachyTvPushBackNewMapPalIndexArrayEntry(struct MapData *mStruct, u16 *buf1, u8 *palIndexArray, u16 mapEntry, u16 offset); @@ -119,7 +119,7 @@ void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 * u16 TeachyTvComputePalIndexArrayEntryByMetaTile(u8 *palIndexArrayBuf, u16 metaTile); void TeachyTvLoadMapPalette(const struct MapData *const mStruct, u8 *palIndexArray); -void TeachyTvCallback() +void TeachyTvCallback(void) { RunTasks(); AnimateSprites(); @@ -128,7 +128,7 @@ void TeachyTvCallback() UpdatePaletteFade(); } -void TeachyTvVblankHandler() +void TeachyTvVblankHandler(void) { LoadOam(); ProcessSpriteCopyRequests(); @@ -152,7 +152,7 @@ void sub_815ABC4(u8 mode, void (*cb)()) SetMainCallback2(TeachyTvMainCallback); } -void sub_815ABFC() +void sub_815ABFC(void) { if (gTeachyTV_StaticResources.mode == 1) sub_815ABC4(1, gTeachyTV_StaticResources.callback); @@ -160,26 +160,22 @@ void sub_815ABFC() sub_815ABC4(2, gTeachyTV_StaticResources.callback); } -void sub_815AC20() +void sub_815AC20(void) { gTeachyTV_StaticResources.mode = 1; } -void TeachyTvMainCallback() +void TeachyTvMainCallback(void) { - int state; - int taskId; + u8 taskId; struct Task *taskAddr; - struct TeachyTvBuf **memBuf; - state = gMain.state; - switch (state) + switch (gMain.state) { case 0: - memBuf = &gUnknown_203F450; - (*memBuf) = (struct TeachyTvBuf *)AllocZeroed(0x4008); - gUnknown_203F450->state = (u32)state; - gUnknown_203F450->var_4006 = state; + gUnknown_203F450 = AllocZeroed(sizeof(struct TeachyTvBuf)); + gUnknown_203F450->state = 0; + gUnknown_203F450->var_4006 = 0; gUnknown_203F450->var_4007 = 0xFF; VblankHblankHandlerSetZero(); clear_scheduled_bg_copies_to_vram(); @@ -193,7 +189,7 @@ void TeachyTvMainCallback() ++gMain.state; break; case 1: - if ( free_temp_tile_data_buffers_if_possible() == 1 ) + if ( free_temp_tile_data_buffers_if_possible() == TRUE ) return; TeachyTvCreateAndRenderRbox(); TeachyTvInitIo(); @@ -225,7 +221,7 @@ void TeachyTvMainCallback() } } -void TeachyTvSetupBg() +void TeachyTvSetupBg(void) { InitBgReg(); ResetBgsAndClearDma3BusyFlags(0); @@ -245,7 +241,7 @@ void TeachyTvSetupBg() SetGpuReg(REG_OFFSET_BLDCNT, 0); } -void TeachyTvLoadGraphic() +void TeachyTvLoadGraphic(void) { u16 src; src = 0; @@ -259,7 +255,7 @@ void TeachyTvLoadGraphic() TeachyTvLoadBg3Map(gUnknown_203F450->buffer3); } -void TeachyTvCreateAndRenderRbox() +void TeachyTvCreateAndRenderRbox(void) { InitWindows(&gUnknown_84792F0); DeactivateAllTextPrinters(); @@ -269,9 +265,8 @@ void TeachyTvCreateAndRenderRbox() CopyWindowToVram(0, 2); } -u8 TeachyTvSetupWindow() +u8 TeachyTvSetupWindow(void) { - int hasItem; gMultiuseListMenuTemplate = gUnknown_8479368; gMultiuseListMenuTemplate.windowId = 1; gMultiuseListMenuTemplate.moveCursorFunc = TeachyTvAudioByInput; @@ -288,9 +283,8 @@ u8 TeachyTvSetupWindow() gTeachyTV_StaticResources.selectedRow); } -void TeachyTvSetupScrollIndicatorArrowPair() +void TeachyTvSetupScrollIndicatorArrowPair(void) { - int hasItem; if (!CheckBagHasItem(ITEM_TM_CASE, 1)) { struct TeachyTvBuf * temp = gUnknown_203F450; @@ -306,7 +300,7 @@ void TeachyTvSetupScrollIndicatorArrowPair() } } -void TeachyTvRemoveScrollIndicatorArrowPair() +void TeachyTvRemoveScrollIndicatorArrowPair(void) { if ( gUnknown_203F450->var_4007 != 0xFF ) { @@ -321,7 +315,7 @@ void TeachyTvAudioByInput(s32 notUsed, bool8 play, struct ListMenu *notUsedAlt) PlaySE(SE_SELECT); } -void TeachyTvInitIo() +void TeachyTvInitIo(void) { SetGpuReg(REG_OFFSET_WININ, 0x3F); SetGpuReg(REG_OFFSET_WINOUT, 0x1F); @@ -329,7 +323,7 @@ void TeachyTvInitIo() SetGpuReg(REG_OFFSET_BLDY, 0x5); } -u8 TeachyTvSetupObjEventAndOam() +u8 TeachyTvSetupObjEventAndOam(void) { u8 temp = AddPseudoEventObject(90, SpriteCallbackDummy, 0, 0, 8); gSprites[temp].oam.priority = 2; @@ -345,25 +339,25 @@ void TeachyTvSetSpriteCoordsAndSwitchFrame(u8 objId, u16 x, u16 y, u8 frame) StartSpriteAnim(&gSprites[objId], frame); } -void TeachyTvSetWindowRegs() +void TeachyTvSetWindowRegs(void) { SetGpuReg(REG_OFFSET_WIN0V, 0xC64); SetGpuReg(REG_OFFSET_WIN0H, 0x1CD4); } -void TeachyTvClearWindowRegs() +void TeachyTvClearWindowRegs(void) { SetGpuReg(REG_OFFSET_WIN0V, 0x0); SetGpuReg(REG_OFFSET_WIN0H, 0x0); } -void TeachyTvBg2AnimController() +void TeachyTvBg2AnimController(void) { u16 *tilemapBuffer; u8 i, offset2; u32 j, offset; - tilemapBuffer = (u16 *)GetBgTilemapBuffer(2); + tilemapBuffer = GetBgTilemapBuffer(2); i = 1; do { @@ -419,7 +413,7 @@ void TeachyTvInitTextPrinter(const char *text) AddTextPrinterParameterized2(0, 4, (const char *)text, spd, 0, 1, 0xC, 3); } -void TeachyTvFree() +void TeachyTvFree(void) { Free(gUnknown_203F450); gUnknown_203F450 = NULL; @@ -712,7 +706,7 @@ void TeachyTvClusFuncRenderAndRemoveBg1EndGraphic(u8 taskId) } } -void TeachyTvClearBg1EndGraphicText() +void TeachyTvClearBg1EndGraphicText(void) { FillBgTilemapBufferRect_Palette0(1, 0, 0x14, 0xA, 8, 2); schedule_bg_copy_tilemap_to_vram(1); @@ -764,7 +758,7 @@ void TeachyTvChainTaskBattleOrFadeByOptionChosen(u8 taskId) } } -void TeachyTvSetupBagItemsByOptionChosen() +void TeachyTvSetupBagItemsByOptionChosen(void) { if ( gTeachyTV_StaticResources.optionChosen == 4 ) sub_810B108(10); @@ -911,7 +905,7 @@ void TeachyTvPreBattleAnimAndSetBattleCallback(u8 taskId) } } -void TeachyTvRestorePlayerPartyCallback() +void TeachyTvRestorePlayerPartyCallback(void) { LoadPlayerParty(); if ( gUnknown_2023E8A == 3 ) -- cgit v1.2.3 From b44bd642b889de26f944dbe8bc8c8acdf0adf273 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Mon, 10 Jun 2019 08:22:56 +0800 Subject: more fix --- src/teachy_tv.c | 205 +++++++++++++++++++++++++------------------------------- src/tm_case.c | 2 +- 2 files changed, 91 insertions(+), 116 deletions(-) (limited to 'src') diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 632cd5d4f..ddc7b6d1a 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -53,15 +53,15 @@ struct TeachyTvBuf u8 var_4007; }; -extern struct TeachyTvCtrlBlk gTeachyTV_StaticResources; +EWRAM_DATA struct TeachyTvCtrlBlk gTeachyTV_StaticResources = {0}; extern struct TeachyTvBuf * gUnknown_203F450; extern const struct ScrollIndicatorArrowPairTemplate gUnknown_8479380; -extern const char gUnknown_841B83D; +extern const u8 gUnknown_841B83D; extern const struct BgTemplate gUnknown_84792E0; extern const struct SpritePalette gUnknown_83A5348; extern void (**gUnknown_8479548)(u8); -extern const char * const gUnknown_8479560; -extern const char * const gUnknown_8479578; +extern const u8 * const gUnknown_8479560; +extern const u8 * const gUnknown_8479578; extern const u8 gUnknown_8E86240; extern const u8 gUnknown_8E86BE8; extern const u8 gUnknown_8E86D6C; @@ -76,12 +76,9 @@ extern const struct SpriteTemplate * const gUnknown_83A0010; extern const u8 gUnknown_84795C8; extern const struct MapData Route1_Layout; -extern void VblankHblankHandlerSetZero(void); extern void sub_812B1E0(u16); -extern u8 ListMenuInitInternal(struct ListMenuTemplate *, u16 scrollOffset, u16 selectedRow); extern void sub_8055DC4(void); extern bool16 sub_80BF518(u8 textPrinterId); -extern void _call_via_r1(s32 arg, void *func); extern void sub_810B108(u8); extern void sub_8159F40(void); @@ -152,7 +149,7 @@ void sub_815ABC4(u8 mode, void (*cb)()) SetMainCallback2(TeachyTvMainCallback); } -void sub_815ABFC(void) +void CB2_ReturnToTeachyTV(void) { if (gTeachyTV_StaticResources.mode == 1) sub_815ABC4(1, gTeachyTV_StaticResources.callback); @@ -189,11 +186,11 @@ void TeachyTvMainCallback(void) ++gMain.state; break; case 1: - if ( free_temp_tile_data_buffers_if_possible() == TRUE ) + if (free_temp_tile_data_buffers_if_possible() == TRUE) return; TeachyTvCreateAndRenderRbox(); TeachyTvInitIo(); - if ( gTeachyTV_StaticResources.mode == 2 ) + if (gTeachyTV_StaticResources.mode == 2) { taskId = CreateTask(TeachyTvPostBattleFadeControl, 0); gTasks[taskId].data[1] = TeachyTvSetupObjEventAndOam(); @@ -302,7 +299,7 @@ void TeachyTvSetupScrollIndicatorArrowPair(void) void TeachyTvRemoveScrollIndicatorArrowPair(void) { - if ( gUnknown_203F450->var_4007 != 0xFF ) + if (gUnknown_203F450->var_4007 != 0xFF) { RemoveScrollIndicatorArrowPair(gUnknown_203F450->var_4007); gUnknown_203F450->var_4007 = 0xFF; @@ -311,7 +308,7 @@ void TeachyTvRemoveScrollIndicatorArrowPair(void) void TeachyTvAudioByInput(s32 notUsed, bool8 play, struct ListMenu *notUsedAlt) { - if ( play != TRUE ) + if (play != TRUE) PlaySE(SE_SELECT); } @@ -353,26 +350,16 @@ void TeachyTvClearWindowRegs(void) void TeachyTvBg2AnimController(void) { - u16 *tilemapBuffer; - u8 i, offset2; - u32 j, offset; - - tilemapBuffer = GetBgTilemapBuffer(2); - i = 1; - do + u16 * tilemapBuffer = GetBgTilemapBuffer(2); + u8 i; + u8 j; + for (i = 1; i < 13; i++) { - offset2 = 2; - offset = 0x20 * i; - j = i + 1; - do + for (j = 2; j < 28; j++) { - tilemapBuffer[offset + offset2] = ((Random() & 3) << 10) + 0x301F; - offset2 = (offset2 + 1); + tilemapBuffer[32 * i + j] = ((Random() & 3) << 10) + 0x301F; } - while ( offset2 <= 0x1B ); - i = j; } - while ( (u8)j <= 0xC ); schedule_bg_copy_tilemap_to_vram(2); } @@ -386,9 +373,9 @@ void TeachyTvSetupPostBattleWindowAndObj(u8 taskId) ClearWindowTilemap(1); TeachyTvClearWindowRegs(); op = gTeachyTV_StaticResources.optionChosen; - if ( op >= 0 ) + if (op >= 0) { - if ( op <= 3 ) + if (op <= 3) { TeachyTvSetSpriteCoordsAndSwitchFrame(((char*)data)[2], 0x78, 0x38, 0); ChangeBgX(3, 0x3000, 1); @@ -396,7 +383,7 @@ void TeachyTvSetupPostBattleWindowAndObj(u8 taskId) gUnknown_203F450->var_4004 += 3; gUnknown_203F450->var_4005 -= 3; } - else if ( op <= 5 ) + else if (op <= 5) TeachyTvSetSpriteCoordsAndSwitchFrame(((char*)data)[2], 0x78, 0x38, 0); } @@ -428,9 +415,9 @@ void TeachyTvQuitBeginFade(u8 taskId) void TeachyTvQuitFadeControlAndTaskDel(u8 taskId) { - if ( !(gPaletteFade.active) ) + if (!(gPaletteFade.active)) { - if ( gUnknown_203F450->state ) + if (gUnknown_203F450->state) { SetMainCallback2(*(void (**)())gUnknown_203F450); } @@ -490,7 +477,7 @@ void TeachyTvClusFuncTransitionRenderBg2TeachyTvGraphicInitNpcPos(u8 taskId) { s16 *data = gTasks[taskId].data; TeachyTvBg2AnimController(); - if ( ++data[2] > 63 ) + if (++data[2] > 63) { CopyToBgTilemapBufferRect_ChangePalette(2, gUnknown_203F450->buffer4, 0, 0, 0x20, 0x20, 0x11); TeachyTvSetSpriteCoordsAndSwitchFrame(((u8*)data)[2], 8, 0x38, 7); @@ -504,7 +491,7 @@ void TeachyTvClusFuncTransitionRenderBg2TeachyTvGraphicInitNpcPos(u8 taskId) void TeachyTvClusFuncClearBg2TeachyTvGraphic(u8 taskId) { s16 *data = gTasks[taskId].data; - if ( ++data[2] == 134 ) + if (++data[2] == 134) { FillBgTilemapBufferRect_Palette0(2, 0, 2, 1, 0x1A, 0xC); schedule_bg_copy_tilemap_to_vram(2); @@ -520,10 +507,10 @@ void TeachyTvClusFuncNpcMoveAndSetupTextPrinter(u8 taskId) data = gTasks[taskId].data; spriteAddr = &gSprites[data[1]]; - if ( data[2] != 35 ) + if (data[2] != 35) ++data[2]; else { - if ( spriteAddr->pos2.x == 0x78 ) + if (spriteAddr->pos2.x == 0x78) { StartSpriteAnim(&gSprites[data[1]], 0); TeachyTvInitTextPrinter(&gUnknown_841B83D); @@ -538,7 +525,7 @@ void TeachyTvClusFuncNpcMoveAndSetupTextPrinter(u8 taskId) void TeachyTvClusFuncIdleIfTextPrinterIsActive(u8 taskId) { s16* data = (u16 *)gTasks[taskId].data; - if ( !sub_80BF518(0) ) + if (!sub_80BF518(0)) ++data[3]; } @@ -546,7 +533,7 @@ void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId) { s16 *data; data = gTasks[taskId].data; - if ( gMain.newKeys & 2 ) + if (JOY_NEW(B_BUTTON)) { u8 *offset = &(gUnknown_203F450->var_4006); u32 zero = 0; @@ -570,15 +557,15 @@ void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId) void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen(u8 taskId) { s16 *data = (u16 *)gTasks[taskId].data; - const char * const* texts = &gUnknown_8479560; + const u8 * const* texts = &gUnknown_8479560; TeachyTvInitTextPrinter(texts[gTeachyTV_StaticResources.optionChosen]); ++data[3]; } void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen2(u8 taskId) { - s16 *data = (u16 *)gTasks[taskId].data; - const char * const* texts = &gUnknown_8479578; + s16 *data = gTasks[taskId].data; + const u8 * const* texts = &gUnknown_8479578; TeachyTvInitTextPrinter(texts[gTeachyTV_StaticResources.optionChosen]); ++data[3]; } @@ -586,7 +573,7 @@ void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen2(u8 taskId) void TeachyTvClusFuncIdleIfTextPrinterIsActive2(u8 taskId) { s16* data = (u16 *)gTasks[taskId].data; - if ( !sub_80BF518(0) ) + if (!sub_80BF518(0)) ++data[3]; } @@ -604,8 +591,7 @@ void TeachyTvClusFuncEraseTextWindowIfKeyPressed(u8 taskId) void TeachyTvClusFuncStartAnimNpcWalkIntoGrass(u8 taskId) { - s16 *data; - data = (u16 *)gTasks[taskId].data; + s16 *data = gTasks[taskId].data; StartSpriteAnim(&gSprites[(s16)data[1]], 5); data[2] = 0; data[4] = 0; @@ -621,12 +607,12 @@ void TeachyTvClusFuncDudeMoveUp(u8 taskId) data = gTasks[taskId].data; obj = &gSprites[data[1]]; ChangeBgY(3, 0x100, 2); - if ( !( ++data[2] & 0xF ) ) + if (!(++data[2] & 0xF)) { --gUnknown_203F450->var_4005; TeachyTvGrassAnimationMain(taskId, obj->pos2.x, obj->pos2.y, 0, 0); } - if ( data[2] == 48 ) + if (data[2] == 48) { data[2] = 0; data[4] = -1; @@ -641,14 +627,14 @@ void TeachyTvClusFuncDudeMoveRight(u8 taskId) s16 *data; struct Sprite *obj; - data = (u16 *)gTasks[taskId].data; - obj = &gSprites[(s16)data[1]]; + data = gTasks[taskId].data; + obj = &gSprites[data[1]]; ChangeBgX(3, 0x100, 1); - if ( !(++data[2] & 0xF) ) + if (!(++data[2] & 0xF)) ++gUnknown_203F450->var_4004; - if ( !((data[2] + 8) & 0xF) ) + if (!((data[2] + 8) & 0xF)) TeachyTvGrassAnimationMain(taskId, obj->pos2.x + 8, obj->pos2.y, 0, 0); - if ( data[2] == 0x30 ) + if (data[2] == 0x30) { data[2] = 0; data[4] = 0; @@ -660,10 +646,8 @@ void TeachyTvClusFuncDudeMoveRight(u8 taskId) void TeachyTvClusFuncDudeTurnLeft(u8 taskId) { - s16 *data; struct Sprite *v3; - - data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; v3 = &gSprites[data[1]]; StartSpriteAnim(v3, 6); ++data[3]; @@ -680,9 +664,9 @@ void TeachyTvClusFuncDudeMoveLeft(u8 taskId) data = gTasks[taskId].data; v2 = &gSprites[data[1]]; - if ( !(v2->pos2.x & 0xF) ) + if (!(v2->pos2.x & 0xF)) TeachyTvGrassAnimationMain(taskId, v2->pos2.x - 8, v2->pos2.y, 0, 0); - if ( v2->pos2.x == 8 ) + if (v2->pos2.x == 8) ++data[3]; else --v2->pos2.x; @@ -693,12 +677,12 @@ void TeachyTvClusFuncRenderAndRemoveBg1EndGraphic(u8 taskId) s16 *data; data = gTasks[taskId].data; - if ( !data[2] ) + if (!data[2]) { CopyToBgTilemapBufferRect_ChangePalette(1, &gUnknown_8479590, 0x14, 0xA, 8, 2, 0x11); schedule_bg_copy_tilemap_to_vram(1); } - if ( ++data[2] > 126 ) + if (++data[2] > 126) { TeachyTvClearBg1EndGraphicText(); data[2] = 0; @@ -717,14 +701,14 @@ void TeachyTvBackToOptionList(u8 taskId) s16 *data; data = gTasks[taskId].data; - if ( !data[2] ) + if (data[2] == 0) PlayNewMapMusic(BGM_FRLG_TEACHY_TV); TeachyTvBg2AnimController(); - if ( ++data[2] > 63 ) + if (++data[2] > 63) { data[2] = 0; data[3] = 0; - *data = TeachyTvSetupWindow(); + data[0] = TeachyTvSetupWindow(); gTasks[taskId].func = TeachyTvOptionListController; PutWindowTilemap(0); TeachyTvSetupScrollIndicatorArrowPair(); @@ -743,14 +727,14 @@ void TeachyTvBackToOptionList(u8 taskId) void TeachyTvChainTaskBattleOrFadeByOptionChosen(u8 taskId) { int op = gTeachyTV_StaticResources.optionChosen; - if ( op >= 0 ) + if (op >= 0) { - if ( op <= 3 ) + if (op <= 3) { TeachyTvPrepBattle(taskId); } - else if ( op <= 5 ) + else if (op <= 5) { *((void(**)())gUnknown_203F450) = TeachyTvSetupBagItemsByOptionChosen; TeachyTvQuitBeginFade(taskId); @@ -760,7 +744,7 @@ void TeachyTvChainTaskBattleOrFadeByOptionChosen(u8 taskId) void TeachyTvSetupBagItemsByOptionChosen(void) { - if ( gTeachyTV_StaticResources.optionChosen == 4 ) + if (gTeachyTV_StaticResources.optionChosen == 4) sub_810B108(10); else sub_810B108(9); @@ -769,7 +753,7 @@ void TeachyTvSetupBagItemsByOptionChosen(void) void TeachyTvPostBattleFadeControl(u8 taskId) { s16 *data = gTasks[taskId].data; - if ( !(gPaletteFade.active) ) + if (!(gPaletteFade.active)) { const u8* funcIdx = &gUnknown_8479390; int arg = funcIdx[gTeachyTV_StaticResources.optionChosen]; @@ -787,12 +771,12 @@ void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 m const struct SpriteTemplate *const *objTemAddr; subprio = subpriority; - if ( gUnknown_203F450->var_4006 != 1 ) + if (gUnknown_203F450->var_4006 != 1) { res = TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj( x - 0x10, y); - if ( res << 24 ) + if (res << 24) { objTemAddr = &gUnknown_83A0010; objId = CreateSprite(*(objTemAddr+4), 0, 0, subprio); @@ -801,7 +785,7 @@ void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 m obj->pos2.y = y + 8; obj->callback = TeachyTvGrassAnimationObjCallback; obj->data[0] = taskId; - if ( mode == 1 ) + if (mode == 1) { SeekSpriteAnim(obj, 4); obj->oam.priority = 2; @@ -853,12 +837,11 @@ u8 TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj(s16 x, s16 y) const u8 * arr; struct TeachyTvBuf *ptr; int high, low; - if ( (x < 0) || (y < 0) ) + if ((x < 0) || (y < 0)) return 0; arr = &gUnknown_84795C8; - ptr = gUnknown_203F450; - high = ((y >> 4) + ptr->var_4005) << 4; - low = ((x >> 4) + ptr->var_4004); + high = ((y >> 4) + gUnknown_203F450->var_4005) << 4; + low = ((x >> 4) + gUnknown_203F450->var_4004); return arr[high+low]; } @@ -874,7 +857,7 @@ void TeachyTvPrepBattle(u8 taskId) SavePlayerParty(); sub_8159F40(); PlayMapChosenOrBattleBGM(MUS_DUMMY); - if ( !gTeachyTV_StaticResources.optionChosen ) + if (!gTeachyTV_StaticResources.optionChosen) data[6] = 9; else data[6] = 8; @@ -884,19 +867,15 @@ void TeachyTvPrepBattle(u8 taskId) void TeachyTvPreBattleAnimAndSetBattleCallback(u8 taskId) { - s16 *data; - int temp; - - data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; switch (data[7]) { case 0: - sub_80D08B8(*((u8*)data + 12)); + sub_80D08B8(data[6]); ++data[7]; break; case 1: - temp = sub_80D08F8(); - if ( temp << 24 ) + if (sub_80D08F8() << 24) { SetMainCallback2(sub_800FD9C); DestroyTask(taskId); @@ -908,11 +887,11 @@ void TeachyTvPreBattleAnimAndSetBattleCallback(u8 taskId) void TeachyTvRestorePlayerPartyCallback(void) { LoadPlayerParty(); - if ( gUnknown_2023E8A == 3 ) + if (gUnknown_2023E8A == 3) sub_815AC20(); else PlayNewMapMusic(BGM_FRLG_FOLLOW_ME); - sub_815ABFC(); + CB2_ReturnToTeachyTV(); } #ifdef NONMATCHING @@ -961,20 +940,20 @@ void TeachyTvLoadBg3Map(void *buffer) mapEntry = md->map[v3 + 24 * v19 + 8] & 0x3FF; v7 = 0; v8 = v3 + 1; - if ( v4 + v3 <= 0 ) + if (v4 + v3 <= 0) { LABEL_9: - if ( mapArray[v7] ) + if (mapArray[v7]) goto LABEL_11; } else { - for ( i = *mapArray; i; i = mapArray[v7] ) + for (i = *mapArray; i; i = mapArray[v7]) { - if ( i == mapEntry ) + if (i == mapEntry) goto LABEL_9; v7 = (u16)(v7 + 1); - if ( v7 >= v4 + v3 ) + if (v7 >= v4 + v3) goto LABEL_9; } } @@ -989,17 +968,17 @@ LABEL_11: v7); v3 = v8; } - while ( (u16)v8 <= 0xF ); + while ((u16)v8 <= 0xF); v2 = v18; } - while ( (u16)v18 <= 8 ); + while ((u16)v18 <= 8); MapTileBlockBuf = (char *)Alloc(v17 << 7); FourMapTileBlocksTempBuf = Alloc(0x80); - for ( j = 0; j < v17; j = (u16)j + 1 ) + for (j = 0; j < v17; j = (u16)j + 1) { memset(FourMapTileBlocksTempBuf, 0, 0x80); v13 = &mapArray[j]; - if ( *v13 <= 0x27F ) + if (*v13 <= 0x27F) TeachyTvComputeMapTilesFromTilesetAndMetaTiles( (u16 *)(16 * *v13 + (u16*)(md->primaryTileset->metatiles)), (u8 *)FourMapTileBlocksTempBuf, @@ -1249,9 +1228,9 @@ void TeachyTvLoadBg3Map(void *buffer) void TeachyTvLoadMapTilesetToBuffer(struct Tileset *ts, u8 *dstBuffer, u16 size) { - if ( ts ) + if (ts) { - if ( !ts->isCompressed ) + if (!ts->isCompressed) CpuFastSet(ts->tiles, dstBuffer, 8 * size); else LZDecompressWram(ts->tiles, dstBuffer); @@ -1265,7 +1244,7 @@ void TeachyTvPushBackNewMapPalIndexArrayEntry(struct MapData *mStruct, u16 *buf1 u16 *metaTileEntryAddr; int temp = mapEntry; - if ( temp <= 0x27F ) + if (temp <= 0x27F) { ts = mStruct->primaryTileset; } @@ -1374,13 +1353,11 @@ void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 * buffer = (u8 *)AllocZeroed(0x20); src = ((u32)AllocZeroed(0x20)); CpuFastSet(tileset, buffer, 8); - if ( metaTile & 1 ) + if (metaTile & 1) { - i = 0; - do + for (i=0; i<8; ++i) { - j = 0; - do + for (j=0; j<4; ++j) { u32 offset1 = i << 2; u32 offset2 = j - 3; @@ -1389,12 +1366,10 @@ void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 * u32 dstOffset = offset1 + j; *(u8*)(src + dstOffset) = ((value & 0xF) << 4) + ((value & 0xF0) >> 4); } - while ( ++(u8)j <= 3 ); } - while ( ++(u8)i <= 7 ); CpuFastSet((u8*)src, buffer, 8); } - if ( metaTile & 2 ) + if (metaTile & 2) { j = 0; do @@ -1402,19 +1377,19 @@ void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 * memcpy(&((u8*)src)[4 * j], &buffer[4 * (7 - j)], 4); j = (u8)(j + 1); } - while ( j <= 7 ); + while (j <= 7); CpuFastSet((u8*)src, buffer, 8); } j = 0; do { - if ( buffer[j] & 0xF0 ) + if (buffer[j] & 0xF0) blockBuf[j] = (blockBuf[j] & 0xF) + (buffer[j] & 0xF0); - if ( buffer[j] & 0xF ) + if (buffer[j] & 0xF) blockBuf[j] = (blockBuf[j] & 0xF0) + (buffer[j] & 0xF); j = (u8)(j + 1); } - while ( j <= 0x1F ); + while (j <= 0x1F); Free((u8*)src); Free(buffer); } @@ -1576,26 +1551,26 @@ u16 TeachyTvComputePalIndexArrayEntryByMetaTile(u8 *palIndexArrayBuf, u16 metaTi int firstEntry; int temp; - pal = (u32)(metaTile << 16) >> 28; + pal = metaTile >> 12; i = 0; firstEntry = *palIndexArrayBuf; - if ( firstEntry != pal ) + if (firstEntry != pal) { - if ( firstEntry == 0xFF ) + if (firstEntry == 0xFF) { *palIndexArrayBuf = pal; } else { - while ( 1 ) + while (1) { ++i; - if ( i > 0xF ) + if (i > 0xF) break; temp = palIndexArrayBuf[i]; - if ( temp == pal ) + if (temp == pal) break; - if ( temp == 0xFF ) + if (temp == 0xFF) { palIndexArrayBuf[i] = pal; break; diff --git a/src/tm_case.c b/src/tm_case.c index fdcc66a7e..a436269f3 100644 --- a/src/tm_case.c +++ b/src/tm_case.c @@ -1147,7 +1147,7 @@ void PokeDude_InitTMCase(void) AddBagItem(ITEM_TM03, 1); AddBagItem(ITEM_TM09, 1); AddBagItem(ITEM_TM35, 1); - InitTMCase(4, sub_815ABFC, 0); + InitTMCase(4, CB2_ReturnToTeachyTV, 0); } static void Task_TMCaseDude1(u8 taskId) -- cgit v1.2.3 From a8f6aeb05dfee07903c3ab48403121e07c8189e4 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Mon, 10 Jun 2019 08:30:52 +0800 Subject: more fixes --- src/teachy_tv.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/teachy_tv.c b/src/teachy_tv.c index ddc7b6d1a..fa5962e8e 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -502,10 +502,8 @@ void TeachyTvClusFuncClearBg2TeachyTvGraphic(u8 taskId) void TeachyTvClusFuncNpcMoveAndSetupTextPrinter(u8 taskId) { - s16 *data; struct Sprite * spriteAddr; - - data = gTasks[taskId].data; + s16 * data = gTasks[taskId].data; spriteAddr = &gSprites[data[1]]; if (data[2] != 35) ++data[2]; @@ -531,8 +529,7 @@ void TeachyTvClusFuncIdleIfTextPrinterIsActive(u8 taskId) void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId) { - s16 *data; - data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; if (JOY_NEW(B_BUTTON)) { u8 *offset = &(gUnknown_203F450->var_4006); @@ -556,7 +553,7 @@ void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId) void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen(u8 taskId) { - s16 *data = (u16 *)gTasks[taskId].data; + s16 *data = gTasks[taskId].data; const u8 * const* texts = &gUnknown_8479560; TeachyTvInitTextPrinter(texts[gTeachyTV_StaticResources.optionChosen]); ++data[3]; -- cgit v1.2.3 From f32fdd0bff856e82519b98075d96ac3c500e5a54 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Mon, 10 Jun 2019 08:33:58 +0800 Subject: consistency --- src/teachy_tv.c | 26 ++++++++------------------ 1 file changed, 8 insertions(+), 18 deletions(-) (limited to 'src') diff --git a/src/teachy_tv.c b/src/teachy_tv.c index fa5962e8e..d687ff7c8 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -240,8 +240,7 @@ void TeachyTvSetupBg(void) void TeachyTvLoadGraphic(void) { - u16 src; - src = 0; + u16 src = 0; reset_temp_tile_data_buffers(); decompress_and_copy_tile_data_to_vram(1, &gUnknown_8E86240, 0, 0, 0); LZDecompressWram(&gUnknown_8E86BE8, gUnknown_203F450->buffer1); @@ -351,8 +350,7 @@ void TeachyTvClearWindowRegs(void) void TeachyTvBg2AnimController(void) { u16 * tilemapBuffer = GetBgTilemapBuffer(2); - u8 i; - u8 j; + u8 i, j; for (i = 1; i < 13; i++) { for (j = 2; j < 28; j++) @@ -366,7 +364,7 @@ void TeachyTvBg2AnimController(void) void TeachyTvSetupPostBattleWindowAndObj(u8 taskId) { s16 *data = gTasks[taskId].data; - int v1 = (data)[1]; + int v1 = data[1]; struct Sprite *v3 = &gSprites[v1]; int op; @@ -671,9 +669,7 @@ void TeachyTvClusFuncDudeMoveLeft(u8 taskId) void TeachyTvClusFuncRenderAndRemoveBg1EndGraphic(u8 taskId) { - s16 *data; - - data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; if (!data[2]) { CopyToBgTilemapBufferRect_ChangePalette(1, &gUnknown_8479590, 0x14, 0xA, 8, 2, 0x11); @@ -695,9 +691,7 @@ void TeachyTvClearBg1EndGraphicText(void) void TeachyTvBackToOptionList(u8 taskId) { - s16 *data; - - data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; if (data[2] == 0) PlayNewMapMusic(BGM_FRLG_TEACHY_TV); TeachyTvBg2AnimController(); @@ -1239,8 +1233,8 @@ void TeachyTvPushBackNewMapPalIndexArrayEntry(struct MapData *mStruct, u16 *buf1 { struct Tileset *ts; u16 *metaTileEntryAddr; - int temp = mapEntry; + if (temp <= 0x27F) { ts = mStruct->primaryTileset; @@ -1342,12 +1336,10 @@ void TeachyTvComputeMapTilesFromTilesetAndMetaTiles(u16 *metaTilesArray, u8 *blo #ifdef NONMATCHING void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 *tileset, u8 metaTile) { - u8 *buffer; u32 i; u32 j; vu32 src; - - buffer = (u8 *)AllocZeroed(0x20); + u8* buffer = (u8 *)AllocZeroed(0x20); src = ((u32)AllocZeroed(0x20)); CpuFastSet(tileset, buffer, 8); if (metaTile & 1) @@ -1543,12 +1535,10 @@ void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 * u16 TeachyTvComputePalIndexArrayEntryByMetaTile(u8 *palIndexArrayBuf, u16 metaTile) { - u32 pal; u16 i; int firstEntry; int temp; - - pal = metaTile >> 12; + u32 pal = metaTile >> 12; i = 0; firstEntry = *palIndexArrayBuf; if (firstEntry != pal) -- cgit v1.2.3 From 1345bffa2226d6174076338ccbab0dbce04cd082 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Mon, 10 Jun 2019 08:36:36 +0800 Subject: more consistency --- src/teachy_tv.c | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) (limited to 'src') diff --git a/src/teachy_tv.c b/src/teachy_tv.c index d687ff7c8..f1d0b2749 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -289,8 +289,7 @@ void TeachyTvSetupScrollIndicatorArrowPair(void) else { struct TeachyTvBuf *temp; - u8 res; - res = AddScrollIndicatorArrowPair(&gUnknown_8479380, &(gTeachyTV_StaticResources.scrollOffset)); + u8 res = AddScrollIndicatorArrowPair(&gUnknown_8479380, &(gTeachyTV_StaticResources.scrollOffset)); temp = gUnknown_203F450; temp->var_4007 = res; } @@ -500,9 +499,8 @@ void TeachyTvClusFuncClearBg2TeachyTvGraphic(u8 taskId) void TeachyTvClusFuncNpcMoveAndSetupTextPrinter(u8 taskId) { - struct Sprite * spriteAddr; s16 * data = gTasks[taskId].data; - spriteAddr = &gSprites[data[1]]; + struct Sprite * priteAddr = &gSprites[data[1]]; if (data[2] != 35) ++data[2]; else { @@ -619,11 +617,8 @@ void TeachyTvClusFuncDudeMoveUp(u8 taskId) void TeachyTvClusFuncDudeMoveRight(u8 taskId) { - s16 *data; - struct Sprite *obj; - - data = gTasks[taskId].data; - obj = &gSprites[data[1]]; + s16 *data = gTasks[taskId].data; + struct Sprite *obj = &gSprites[data[1]]; ChangeBgX(3, 0x100, 1); if (!(++data[2] & 0xF)) ++gUnknown_203F450->var_4004; @@ -641,9 +636,9 @@ void TeachyTvClusFuncDudeMoveRight(u8 taskId) void TeachyTvClusFuncDudeTurnLeft(u8 taskId) { - struct Sprite *v3; + s16 *data = gTasks[taskId].data; - v3 = &gSprites[data[1]]; + struct Sprite *v3 = &gSprites[data[1]]; StartSpriteAnim(v3, 6); ++data[3]; data[4] = 0; @@ -653,11 +648,8 @@ void TeachyTvClusFuncDudeTurnLeft(u8 taskId) void TeachyTvClusFuncDudeMoveLeft(u8 taskId) { - s16 *data; - struct Sprite *v2; - - data = gTasks[taskId].data; - v2 = &gSprites[data[1]]; + s16 *data = gTasks[taskId].data; + struct Sprite *v2 = &gSprites[data[1]]; if (!(v2->pos2.x & 0xF)) TeachyTvGrassAnimationMain(taskId, v2->pos2.x - 8, v2->pos2.y, 0, 0); -- cgit v1.2.3 From 12191612cd7a050283e37278fac1c02a2ef3776d Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Mon, 10 Jun 2019 09:03:39 +0800 Subject: TeachyTvLoadMapPalette and fixes --- src/teachy_tv.c | 105 +++++++++++++++----------------------------------------- 1 file changed, 27 insertions(+), 78 deletions(-) (limited to 'src') diff --git a/src/teachy_tv.c b/src/teachy_tv.c index f1d0b2749..28f4fbe8e 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -29,6 +29,9 @@ #include "battle.h" #include "global.fieldmap.h" #include "teachy_tv.h" +#include "help_system.h" +#include "overworld.h" +#include "unk_8159F40.h" struct TeachyTvCtrlBlk { @@ -54,7 +57,7 @@ struct TeachyTvBuf }; EWRAM_DATA struct TeachyTvCtrlBlk gTeachyTV_StaticResources = {0}; -extern struct TeachyTvBuf * gUnknown_203F450; +EWRAM_DATA struct TeachyTvBuf * gUnknown_203F450; extern const struct ScrollIndicatorArrowPairTemplate gUnknown_8479380; extern const u8 gUnknown_841B83D; extern const struct BgTemplate gUnknown_84792E0; @@ -69,19 +72,13 @@ extern const u8 gUnknown_8E86F98; extern const struct ListMenuTemplate gUnknown_8479368; extern const struct ListMenuItem gUnknown_8479340; extern const struct WindowTemplate gUnknown_84792F0; -extern const u8 gUnknown_8479590; -extern const u8 gUnknown_8479390; +extern const u16 gUnknown_8479590[]; +extern const u8 gUnknown_8479390[]; extern const struct SubspriteTable gUnknown_84795B8; extern const struct SpriteTemplate * const gUnknown_83A0010; -extern const u8 gUnknown_84795C8; +extern const u8 gUnknown_84795C8[]; extern const struct MapData Route1_Layout; -extern void sub_812B1E0(u16); -extern void sub_8055DC4(void); -extern bool16 sub_80BF518(u8 textPrinterId); -extern void sub_810B108(u8); -extern void sub_8159F40(void); - void TeachyTvCallback(void); void TeachyTvMainCallback(void); void TeachyTvVblankHandler(void); @@ -114,7 +111,7 @@ void TeachyTvPushBackNewMapPalIndexArrayEntry(struct MapData *mStruct, u16 *buf1 void TeachyTvComputeMapTilesFromTilesetAndMetaTiles(u16 *metaTilesArray, u8 *blockBuf, u8 *tileset); void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 *tileset, u8 metaTile); u16 TeachyTvComputePalIndexArrayEntryByMetaTile(u8 *palIndexArrayBuf, u16 metaTile); -void TeachyTvLoadMapPalette(const struct MapData *const mStruct, u8 *palIndexArray); +void TeachyTvLoadMapPalette(const struct MapData * mStruct, const u8 *palIndexArray); void TeachyTvCallback(void) { @@ -288,10 +285,8 @@ void TeachyTvSetupScrollIndicatorArrowPair(void) } else { - struct TeachyTvBuf *temp; u8 res = AddScrollIndicatorArrowPair(&gUnknown_8479380, &(gTeachyTV_StaticResources.scrollOffset)); - temp = gUnknown_203F450; - temp->var_4007 = res; + gUnknown_203F450->var_4007 = res; } } @@ -500,7 +495,7 @@ void TeachyTvClusFuncClearBg2TeachyTvGraphic(u8 taskId) void TeachyTvClusFuncNpcMoveAndSetupTextPrinter(u8 taskId) { s16 * data = gTasks[taskId].data; - struct Sprite * priteAddr = &gSprites[data[1]]; + struct Sprite * spriteAddr = &gSprites[data[1]]; if (data[2] != 35) ++data[2]; else { @@ -518,7 +513,7 @@ void TeachyTvClusFuncNpcMoveAndSetupTextPrinter(u8 taskId) void TeachyTvClusFuncIdleIfTextPrinterIsActive(u8 taskId) { - s16* data = (u16 *)gTasks[taskId].data; + s16* data = gTasks[taskId].data; if (!sub_80BF518(0)) ++data[3]; } @@ -572,8 +567,7 @@ void TeachyTvClusFuncIdleIfTextPrinterIsActive2(u8 taskId) void TeachyTvClusFuncEraseTextWindowIfKeyPressed(u8 taskId) { - s16 *data; - data = (u16 *)gTasks[taskId].data; + s16 *data = (u16 *)gTasks[taskId].data; if (JOY_NEW(A_BUTTON | B_BUTTON)) { FillWindowPixelBuffer(0, 0xCC); @@ -664,7 +658,7 @@ void TeachyTvClusFuncRenderAndRemoveBg1EndGraphic(u8 taskId) s16 *data = gTasks[taskId].data; if (!data[2]) { - CopyToBgTilemapBufferRect_ChangePalette(1, &gUnknown_8479590, 0x14, 0xA, 8, 2, 0x11); + CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_8479590, 0x14, 0xA, 8, 2, 0x11); schedule_bg_copy_tilemap_to_vram(1); } if (++data[2] > 126) @@ -738,7 +732,7 @@ void TeachyTvPostBattleFadeControl(u8 taskId) s16 *data = gTasks[taskId].data; if (!(gPaletteFade.active)) { - const u8* funcIdx = &gUnknown_8479390; + const u8* funcIdx = gUnknown_8479390; int arg = funcIdx[gTeachyTV_StaticResources.optionChosen]; data[3] = arg; gTasks[taskId].func = TeachyTvRenderMsgAndSwitchClusterFuncs; @@ -756,9 +750,7 @@ void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 m subprio = subpriority; if (gUnknown_203F450->var_4006 != 1) { - res = TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj( - x - 0x10, - y); + res = TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj(x - 0x10, y); if (res << 24) { objTemAddr = &gUnknown_83A0010; @@ -822,7 +814,7 @@ u8 TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj(s16 x, s16 y) int high, low; if ((x < 0) || (y < 0)) return 0; - arr = &gUnknown_84795C8; + arr = gUnknown_84795C8; high = ((y >> 4) + gUnknown_203F450->var_4005) << 4; low = ((x >> 4) + gUnknown_203F450->var_4004); return arr[high+low]; @@ -1560,63 +1552,20 @@ u16 TeachyTvComputePalIndexArrayEntryByMetaTile(u8 *palIndexArrayBuf, u16 metaTi return (0xF - i); } -#ifdef NONMATCHING -void TeachyTvLoadMapPalette(const struct MapData * const mStruct, u8 *palIndexArray) +void TeachyTvLoadMapPalette(const struct MapData * mStruct, const u8 * palIndexArray) { u8 i; - struct Tileset *ts; + const struct Tileset * ts; + u16 * dest; - for (i = 0; i < 16 && palIndexArray[i] != 0xFF; i++) + for (i = 0; i < 16; i++) { - ts = *(palIndexArray + i) > 6 ? mStruct->secondaryTileset : mStruct->primaryTileset; - LoadPalette((u16 *)ts->palettes + 0x10 * palIndexArray[i], 0x10 * (0xF - i), 0x20); + if (palIndexArray[i] == 0xFF) + break; + if (palIndexArray[i] > 6) + dest = (u16 *)mStruct->secondaryTileset->palettes + 0x10 * palIndexArray[i]; + else + dest = (u16 *)mStruct->primaryTileset->palettes + 0x10 * palIndexArray[i]; + LoadPalette(dest, 0x10 * (15 - i), 0x20); } } -#else -NAKED -void TeachyTvLoadMapPalette(const struct MapData * const mStruct, u8 *palIndexArray) -{ - asm_unified("\n\ - push {r4-r6,lr}\n\ - adds r6, r0, 0\n\ - adds r5, r1, 0\n\ - movs r4, 0\n\ - ldrb r0, [r5]\n\ - cmp r0, 0xFF\n\ - beq _0815C274\n\ - _0815C23E:\n\ - adds r1, r5, r4\n\ - ldrb r0, [r1]\n\ - cmp r0, 0x6\n\ - bls _0815C24A\n\ - ldr r0, [r6, 0x14]\n\ - b _0815C24C\n\ - _0815C24A:\n\ - ldr r0, [r6, 0x10]\n\ - _0815C24C:\n\ - ldrb r1, [r1]\n\ - lsls r1, 5\n\ - ldr r0, [r0, 0x8]\n\ - adds r0, r1\n\ - movs r1, 0xF\n\ - subs r1, r4\n\ - lsls r1, 20\n\ - lsrs r1, 16\n\ - movs r2, 0x20\n\ - bl LoadPalette\n\ - adds r0, r4, 0x1\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - cmp r4, 0xF\n\ - bhi _0815C274\n\ - adds r0, r5, r4\n\ - ldrb r0, [r0]\n\ - cmp r0, 0xFF\n\ - bne _0815C23E\n\ - _0815C274:\n\ - pop {r4-r6}\n\ - pop {r0}\n\ - bx r0\n\ - "); -} -#endif -- cgit v1.2.3 From b9dd482ec957ea0a1ee73d1b22354fc10a143789 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Mon, 10 Jun 2019 09:17:07 +0800 Subject: fixed array decl --- src/teachy_tv.c | 54 +++++++++++++++++++++++++++--------------------------- 1 file changed, 27 insertions(+), 27 deletions(-) (limited to 'src') diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 28f4fbe8e..609c470bc 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -57,25 +57,25 @@ struct TeachyTvBuf }; EWRAM_DATA struct TeachyTvCtrlBlk gTeachyTV_StaticResources = {0}; -EWRAM_DATA struct TeachyTvBuf * gUnknown_203F450; +EWRAM_DATA struct TeachyTvBuf * gUnknown_203F450 = NULL; extern const struct ScrollIndicatorArrowPairTemplate gUnknown_8479380; -extern const u8 gUnknown_841B83D; -extern const struct BgTemplate gUnknown_84792E0; +extern const u8 gUnknown_841B83D[]; +extern const struct BgTemplate gUnknown_84792E0[]; extern const struct SpritePalette gUnknown_83A5348; -extern void (**gUnknown_8479548)(u8); -extern const u8 * const gUnknown_8479560; -extern const u8 * const gUnknown_8479578; -extern const u8 gUnknown_8E86240; -extern const u8 gUnknown_8E86BE8; -extern const u8 gUnknown_8E86D6C; -extern const u8 gUnknown_8E86F98; +extern void (**gUnknown_8479548[])(u8); +extern const u8 * const gUnknown_8479560[]; +extern const u8 * const gUnknown_8479578[]; +extern const u8 gUnknown_8E86240[]; +extern const u8 gUnknown_8E86BE8[]; +extern const u8 gUnknown_8E86D6C[]; +extern const u8 gUnknown_8E86F98[]; extern const struct ListMenuTemplate gUnknown_8479368; -extern const struct ListMenuItem gUnknown_8479340; -extern const struct WindowTemplate gUnknown_84792F0; +extern const struct ListMenuItem gUnknown_8479340[]; +extern const struct WindowTemplate gUnknown_84792F0[]; extern const u16 gUnknown_8479590[]; extern const u8 gUnknown_8479390[]; -extern const struct SubspriteTable gUnknown_84795B8; -extern const struct SpriteTemplate * const gUnknown_83A0010; +extern const struct SubspriteTable gUnknown_84795B8[]; +extern const struct SpriteTemplate * const gUnknown_83A0010[]; extern const u8 gUnknown_84795C8[]; extern const struct MapData Route1_Layout; @@ -219,7 +219,7 @@ void TeachyTvSetupBg(void) { InitBgReg(); ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, &gUnknown_84792E0, 4); + InitBgsFromTemplates(0, gUnknown_84792E0, 4); SetBgTilemapBuffer(1, gUnknown_203F450->buffer1); SetBgTilemapBuffer(2, gUnknown_203F450->buffer2); SetBgTilemapBuffer(3, gUnknown_203F450->buffer3); @@ -239,10 +239,10 @@ void TeachyTvLoadGraphic(void) { u16 src = 0; reset_temp_tile_data_buffers(); - decompress_and_copy_tile_data_to_vram(1, &gUnknown_8E86240, 0, 0, 0); - LZDecompressWram(&gUnknown_8E86BE8, gUnknown_203F450->buffer1); - LZDecompressWram(&gUnknown_8E86D6C, gUnknown_203F450->buffer4); - LoadCompressedPalette(&gUnknown_8E86F98, 0, 0x80); + decompress_and_copy_tile_data_to_vram(1, gUnknown_8E86240, 0, 0, 0); + LZDecompressWram(gUnknown_8E86BE8, gUnknown_203F450->buffer1); + LZDecompressWram(gUnknown_8E86D6C, gUnknown_203F450->buffer4); + LoadCompressedPalette(gUnknown_8E86F98, 0, 0x80); LoadPalette(&src, 0, 2); LoadSpritePalette(&gUnknown_83A5348); TeachyTvLoadBg3Map(gUnknown_203F450->buffer3); @@ -250,7 +250,7 @@ void TeachyTvLoadGraphic(void) void TeachyTvCreateAndRenderRbox(void) { - InitWindows(&gUnknown_84792F0); + InitWindows(gUnknown_84792F0); DeactivateAllTextPrinters(); FillWindowPixelBuffer(0, 0xCC); PutWindowTilemap(0); @@ -265,7 +265,7 @@ u8 TeachyTvSetupWindow(void) gMultiuseListMenuTemplate.moveCursorFunc = TeachyTvAudioByInput; if (!CheckBagHasItem(ITEM_TM_CASE, 1)) { - gMultiuseListMenuTemplate.items = &gUnknown_8479340; + gMultiuseListMenuTemplate.items = gUnknown_8479340; gMultiuseListMenuTemplate.totalItems = 5; gMultiuseListMenuTemplate.maxShowed = 5; gMultiuseListMenuTemplate.upText_Y = (gMultiuseListMenuTemplate.upText_Y + 8) & 0xF; @@ -502,7 +502,7 @@ void TeachyTvClusFuncNpcMoveAndSetupTextPrinter(u8 taskId) if (spriteAddr->pos2.x == 0x78) { StartSpriteAnim(&gSprites[data[1]], 0); - TeachyTvInitTextPrinter(&gUnknown_841B83D); + TeachyTvInitTextPrinter(gUnknown_841B83D); data[2] = 0; ++data[3]; } @@ -536,7 +536,7 @@ void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId) } else { - void (***array)(u8) = &gUnknown_8479548; + void (***array)(u8) = gUnknown_8479548; void (**cluster)(u8) = array[(u8)gTeachyTV_StaticResources.optionChosen]; cluster[data[3]](taskId); } @@ -545,7 +545,7 @@ void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId) void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen(u8 taskId) { s16 *data = gTasks[taskId].data; - const u8 * const* texts = &gUnknown_8479560; + const u8 * const* texts = gUnknown_8479560; TeachyTvInitTextPrinter(texts[gTeachyTV_StaticResources.optionChosen]); ++data[3]; } @@ -553,7 +553,7 @@ void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen(u8 taskId) void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen2(u8 taskId) { s16 *data = gTasks[taskId].data; - const u8 * const* texts = &gUnknown_8479578; + const u8 * const* texts = gUnknown_8479578; TeachyTvInitTextPrinter(texts[gTeachyTV_StaticResources.optionChosen]); ++data[3]; } @@ -753,7 +753,7 @@ void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 m res = TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj(x - 0x10, y); if (res << 24) { - objTemAddr = &gUnknown_83A0010; + objTemAddr = gUnknown_83A0010; objId = CreateSprite(*(objTemAddr+4), 0, 0, subprio); obj = gSprites + objId; obj->pos2.x = x; @@ -767,7 +767,7 @@ void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 m } else { - SetSubspriteTables(obj, &gUnknown_84795B8); + SetSubspriteTables(obj, gUnknown_84795B8); obj->subspriteTableNum = 0; obj->subspriteMode = 1; } -- cgit v1.2.3 From 35c14911478ce0b963376fc4c82cedfb5b5614a4 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Mon, 10 Jun 2019 12:44:12 +0800 Subject: sub_815C0D4 finished --- src/teachy_tv.c | 225 +++++++------------------------------------------------- 1 file changed, 28 insertions(+), 197 deletions(-) (limited to 'src') diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 609c470bc..6c0df1edc 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -472,7 +472,7 @@ void TeachyTvClusFuncTransitionRenderBg2TeachyTvGraphicInitNpcPos(u8 taskId) if (++data[2] > 63) { CopyToBgTilemapBufferRect_ChangePalette(2, gUnknown_203F450->buffer4, 0, 0, 0x20, 0x20, 0x11); - TeachyTvSetSpriteCoordsAndSwitchFrame(((u8*)data)[2], 8, 0x38, 7); + TeachyTvSetSpriteCoordsAndSwitchFrame(((u8 *)data)[2], 8, 0x38, 7); schedule_bg_copy_tilemap_to_vram(2); data[2] = 0; ++data[3]; @@ -513,7 +513,7 @@ void TeachyTvClusFuncNpcMoveAndSetupTextPrinter(u8 taskId) void TeachyTvClusFuncIdleIfTextPrinterIsActive(u8 taskId) { - s16* data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; if (!sub_80BF518(0)) ++data[3]; } @@ -560,7 +560,7 @@ void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen2(u8 taskId) void TeachyTvClusFuncIdleIfTextPrinterIsActive2(u8 taskId) { - s16* data = (u16 *)gTasks[taskId].data; + s16 *data = (u16 *)gTasks[taskId].data; if (!sub_80BF518(0)) ++data[3]; } @@ -732,7 +732,7 @@ void TeachyTvPostBattleFadeControl(u8 taskId) s16 *data = gTasks[taskId].data; if (!(gPaletteFade.active)) { - const u8* funcIdx = gUnknown_8479390; + const u8 *funcIdx = gUnknown_8479390; int arg = funcIdx[gTeachyTV_StaticResources.optionChosen]; data[3] = arg; gTasks[taskId].func = TeachyTvRenderMsgAndSwitchClusterFuncs; @@ -751,7 +751,7 @@ void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 m if (gUnknown_203F450->var_4006 != 1) { res = TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj(x - 0x10, y); - if (res << 24) + if (res) { objTemAddr = gUnknown_83A0010; objId = CreateSprite(*(objTemAddr+4), 0, 0, subprio); @@ -777,8 +777,7 @@ void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 m void TeachyTvGrassAnimationObjCallback(struct Sprite *sprite) { - u32 diff1, diff2; - s16 *data = gTasks[sprite->data[0]].data; + s16 diff1, diff2, *data = gTasks[sprite->data[0]].data; struct Sprite *objAddr = &gSprites[data[1]]; if (gUnknown_203F450->var_4006 == 1) DestroySprite(sprite); @@ -794,12 +793,12 @@ void TeachyTvGrassAnimationObjCallback(struct Sprite *sprite) sprite->subpriority = 0; diff1 = (u16)(sprite->pos2.x - objAddr->pos2.x); diff2 = (u16)(sprite->pos2.y - objAddr->pos2.y); - diff1 = ((diff1 << 0x10) + 0xF0000) >> 0x10; - if (diff1 <= 0x1E) + diff1 += 0xF; + if ((u16)diff1 <= 0x1E) { - if ((s16)diff2 > -0x10) + if (diff2 > -0x10) { - if ((s16)diff2 <= 0x17) + if (diff2 <= 0x17) return; } } @@ -850,7 +849,7 @@ void TeachyTvPreBattleAnimAndSetBattleCallback(u8 taskId) ++data[7]; break; case 1: - if (sub_80D08F8() << 24) + if (sub_80D08F8()) { SetMainCallback2(sub_800FD9C); DestroyTask(taskId); @@ -1317,205 +1316,40 @@ void TeachyTvComputeMapTilesFromTilesetAndMetaTiles(u16 *metaTilesArray, u8 *blo TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(blockBuf, &tileset[0x20 * (metaTilesArray[7] & 0x3FF)], (metaTilesArray[7] >> 10) & 3); } -#ifdef NONMATCHING void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 *tileset, u8 metaTile) { - u32 i; - u32 j; - vu32 src; - u8* buffer = (u8 *)AllocZeroed(0x20); - src = ((u32)AllocZeroed(0x20)); + u8 i, j, * src, *buffer = (u8 *)AllocZeroed(0x20); + src = AllocZeroed(0x20); CpuFastSet(tileset, buffer, 8); if (metaTile & 1) { - for (i=0; i<8; ++i) + for (i = 0; i < 8; ++i) { - for (j=0; j<4; ++j) + for (j = 0; j < 4; ++j) { - u32 offset1 = i << 2; u32 offset2 = j - 3; - u32 offset = offset1 - offset2; - u32 value = buffer[offset]; - u32 dstOffset = offset1 + j; - *(u8*)(src + dstOffset) = ((value & 0xF) << 4) + ((value & 0xF0) >> 4); + u8 value = buffer[(i << 2) - offset2]; + src[(i << 2) + j] = ((value & 0xF) << 4) + ((value & 0xF0) >> 4); } } - CpuFastSet((u8*)src, buffer, 8); + CpuFastSet(src, buffer, 8); } if (metaTile & 2) { - j = 0; - do - { - memcpy(&((u8*)src)[4 * j], &buffer[4 * (7 - j)], 4); - j = (u8)(j + 1); - } - while (j <= 7); - CpuFastSet((u8*)src, buffer, 8); + for (i = 0; i < 8; ++i) + memcpy(&src[4 * i], &buffer[4 * (7 - i)], 4); + CpuFastSet(src, buffer, 8); } - j = 0; - do + for (i = 0; i < 32; ++i) { - if (buffer[j] & 0xF0) - blockBuf[j] = (blockBuf[j] & 0xF) + (buffer[j] & 0xF0); - if (buffer[j] & 0xF) - blockBuf[j] = (blockBuf[j] & 0xF0) + (buffer[j] & 0xF); - j = (u8)(j + 1); + if (buffer[i] & 0xF0) + blockBuf[i] = (blockBuf[i] & 0xF) + (buffer[i] & 0xF0); + if (buffer[i] & 0xF) + blockBuf[i] = (blockBuf[i] & 0xF0) + (buffer[i] & 0xF); } - while (j <= 0x1F); - Free((u8*)src); + Free(src); Free(buffer); } -#else -NAKED -void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 *tileset, u8 metaTile) -{ - asm_unified("\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x4\n\ - mov r9, r0\n\ - adds r4, r1, 0\n\ - lsls r2, 24\n\ - lsrs r2, 24\n\ - mov r10, r2\n\ - movs r0, 0x20\n\ - bl AllocZeroed\n\ - adds r6, r0, 0\n\ - movs r0, 0x20\n\ - bl AllocZeroed\n\ - str r0, [sp]\n\ - adds r0, r4, 0\n\ - adds r1, r6, 0\n\ - movs r2, 0x8\n\ - bl CpuFastSet\n\ - movs r0, 0x1\n\ - mov r1, r10\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0815C15A\n\ - movs r5, 0\n\ - movs r7, 0xF\n\ - mov r12, r7\n\ - movs r0, 0xF0\n\ - mov r8, r0\n\ - _0815C118:\n\ - movs r3, 0\n\ - lsls r4, r5, 2\n\ - _0815C11C:\n\ - subs r0, r3, 0x3\n\ - subs r0, r4, r0\n\ - adds r0, r6, r0\n\ - ldrb r1, [r0]\n\ - adds r2, r4, r3\n\ - ldr r7, [sp]\n\ - adds r2, r7, r2\n\ - adds r0, r1, 0\n\ - mov r7, r12\n\ - ands r0, r7\n\ - lsls r0, 4\n\ - mov r7, r8\n\ - ands r1, r7\n\ - lsrs r1, 4\n\ - adds r0, r1\n\ - strb r0, [r2]\n\ - adds r0, r3, 0x1\n\ - lsls r0, 24\n\ - lsrs r3, r0, 24\n\ - cmp r3, 0x3\n\ - bls _0815C11C\n\ - adds r0, r5, 0x1\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - cmp r5, 0x7\n\ - bls _0815C118\n\ - ldr r0, [sp]\n\ - adds r1, r6, 0\n\ - movs r2, 0x8\n\ - bl CpuFastSet\n\ - _0815C15A:\n\ - movs r0, 0x2\n\ - mov r1, r10\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0815C18E\n\ - movs r5, 0\n\ - _0815C166:\n\ - lsls r0, r5, 2\n\ - ldr r7, [sp]\n\ - adds r0, r7\n\ - movs r1, 0x7\n\ - subs r1, r5\n\ - lsls r1, 2\n\ - adds r1, r6\n\ - movs r2, 0x4\n\ - bl memcpy\n\ - adds r0, r5, 0x1\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - cmp r5, 0x7\n\ - bls _0815C166\n\ - ldr r0, [sp]\n\ - adds r1, r6, 0\n\ - movs r2, 0x8\n\ - bl CpuFastSet\n\ - _0815C18E:\n\ - movs r5, 0\n\ - movs r0, 0xF0\n\ - mov r8, r0\n\ - movs r1, 0xF\n\ - mov r12, r1\n\ - _0815C198:\n\ - adds r4, r6, r5\n\ - ldrb r0, [r4]\n\ - mov r3, r8\n\ - ands r3, r0\n\ - cmp r3, 0\n\ - beq _0815C1B2\n\ - mov r7, r9\n\ - adds r2, r7, r5\n\ - ldrb r1, [r2]\n\ - mov r0, r12\n\ - ands r0, r1\n\ - adds r0, r3\n\ - strb r0, [r2]\n\ - _0815C1B2:\n\ - ldrb r0, [r4]\n\ - mov r3, r12\n\ - ands r3, r0\n\ - cmp r3, 0\n\ - beq _0815C1CA\n\ - mov r0, r9\n\ - adds r2, r0, r5\n\ - ldrb r1, [r2]\n\ - mov r0, r8\n\ - ands r0, r1\n\ - adds r0, r3\n\ - strb r0, [r2]\n\ - _0815C1CA:\n\ - adds r0, r5, 0x1\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - cmp r5, 0x1F\n\ - bls _0815C198\n\ - ldr r0, [sp]\n\ - bl Free\n\ - adds r0, r6, 0\n\ - bl Free\n\ - add sp, 0x4\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - "); -} -#endif u16 TeachyTvComputePalIndexArrayEntryByMetaTile(u8 *palIndexArrayBuf, u16 metaTile) { @@ -1533,11 +1367,8 @@ u16 TeachyTvComputePalIndexArrayEntryByMetaTile(u8 *palIndexArrayBuf, u16 metaTi } else { - while (1) + while (++i < 16) { - ++i; - if (i > 0xF) - break; temp = palIndexArrayBuf[i]; if (temp == pal) break; -- cgit v1.2.3 From 19f89762cf4c1d34b716428dfacd2168a979fe3c Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Mon, 10 Jun 2019 16:56:12 +0800 Subject: data decomp --- src/coins.c | 2 +- src/teachy_tv.c | 469 +++++++++++++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 433 insertions(+), 38 deletions(-) (limited to 'src') diff --git a/src/coins.c b/src/coins.c index 08646e2f9..e97928df7 100644 --- a/src/coins.c +++ b/src/coins.c @@ -3,8 +3,8 @@ #include "text.h" #include "menu.h" #include "text_window.h" +#include "strings.h" -extern const u8 gText_Coins[]; extern const u8 gUnknown_8417C2D[]; EWRAM_DATA static u8 sCoinsWindowId = 0; diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 6c0df1edc..6f1fcef3c 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -1,5 +1,4 @@ #include "main.h" -#include "global.h" #include "task.h" #include "menu.h" #include "palette.h" @@ -58,27 +57,30 @@ struct TeachyTvBuf EWRAM_DATA struct TeachyTvCtrlBlk gTeachyTV_StaticResources = {0}; EWRAM_DATA struct TeachyTvBuf * gUnknown_203F450 = NULL; -extern const struct ScrollIndicatorArrowPairTemplate gUnknown_8479380; -extern const u8 gUnknown_841B83D[]; -extern const struct BgTemplate gUnknown_84792E0[]; extern const struct SpritePalette gUnknown_83A5348; -extern void (**gUnknown_8479548[])(u8); -extern const u8 * const gUnknown_8479560[]; -extern const u8 * const gUnknown_8479578[]; +extern const struct SpriteTemplate * const gUnknown_83A0010[]; +extern const struct MapData Route1_Layout; +extern const u8 gUnknown_841B7A4[], gUnknown_841B7BC[], gUnknown_841B7D6[], gUnknown_841B7EE[], gUnknown_841B807[], gUnknown_841B81B[], gUnknown_841B836[], gUnknown_841B83D[], gUnknown_841B8BF[], gUnknown_841BB40[], gUnknown_841BE76[], gUnknown_841C23B[], gUnknown_841C459[], gUnknown_841C82A[], gUnknown_841BA41[], gUnknown_841BD10[], gUnknown_841C0AF[], gUnknown_841C384[], gUnknown_841C7B4[], gUnknown_841C994[]; extern const u8 gUnknown_8E86240[]; extern const u8 gUnknown_8E86BE8[]; extern const u8 gUnknown_8E86D6C[]; extern const u8 gUnknown_8E86F98[]; -extern const struct ListMenuTemplate gUnknown_8479368; -extern const struct ListMenuItem gUnknown_8479340[]; -extern const struct WindowTemplate gUnknown_84792F0[]; -extern const u16 gUnknown_8479590[]; -extern const u8 gUnknown_8479390[]; -extern const struct SubspriteTable gUnknown_84795B8[]; -extern const struct SpriteTemplate * const gUnknown_83A0010[]; -extern const u8 gUnknown_84795C8[]; -extern const struct MapData Route1_Layout; +void TeachyTvClusFuncTransitionRenderBg2TeachyTvGraphicInitNpcPos(u8 taskId); +void TeachyTvClusFuncClearBg2TeachyTvGraphic(u8 taskId); +void TeachyTvClusFuncNpcMoveAndSetupTextPrinter(u8 taskId); +void TeachyTvClusFuncIdleIfTextPrinterIsActive(u8 taskId); +void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen(u8 taskId); +void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen2(u8 taskId); +void TeachyTvClusFuncIdleIfTextPrinterIsActive2(u8 taskId); +void TeachyTvClusFuncEraseTextWindowIfKeyPressed(u8 taskId); +void TeachyTvClusFuncStartAnimNpcWalkIntoGrass(u8 taskId); +void TeachyTvClusFuncDudeMoveUp(u8 taskId); +void TeachyTvClusFuncDudeMoveRight(u8 taskId); +void TeachyTvClusFuncDudeTurnLeft(u8 taskId); +void TeachyTvClusFuncDudeMoveLeft(u8 taskId); +void TeachyTvClusFuncRenderAndRemoveBg1EndGraphic(u8 taskId); +void TeachyTvClusFuncTaskBattleOrFadeByOptionChosen(u8 taskId); void TeachyTvCallback(void); void TeachyTvMainCallback(void); void TeachyTvVblankHandler(void); @@ -113,6 +115,399 @@ void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 * u16 TeachyTvComputePalIndexArrayEntryByMetaTile(u8 *palIndexArrayBuf, u16 metaTile); void TeachyTvLoadMapPalette(const struct MapData * mStruct, const u8 *palIndexArray); +const struct BgTemplate gTeachyTvBgTemplateArray[] = +{ + { + .bg = 0x0, + .charBaseIndex = 0x0, + .mapBaseIndex = 0x1F, + .screenSize = 0x0, + .paletteMode = 0x0, + .priority = 0x1, + .baseTile = 0x0, + }, + { + .bg = 0x1, + .charBaseIndex = 0x0, + .mapBaseIndex = 0x1E, + .screenSize = 0x0, + .paletteMode = 0x0, + .priority = 0x0, + .baseTile = 0x0, + }, + { + .bg = 0x2, + .charBaseIndex = 0x0, + .mapBaseIndex = 0x1D, + .screenSize = 0x0, + .paletteMode = 0x0, + .priority = 0x2, + .baseTile = 0x0, + }, + { + .bg = 0x3, + .charBaseIndex = 0x2, + .mapBaseIndex = 0x1C, + .screenSize = 0x0, + .paletteMode = 0x0, + .priority = 0x3, + .baseTile = 0x0, + }, +}; + +const struct WindowTemplate gTeachyTvWindowTemplateArray[] = +{ + { + .bg = 0x1, + .tilemapLeft = 0x2, + .tilemapTop = 0xF, + .width = 0x1A, + .height = 0x4, + .paletteNum = 0x3, + .baseBlock = 0xEA, + }, + { + .bg = 0x0, + .tilemapLeft = 0x4, + .tilemapTop = 0x1, + .width = 0x16, + .height = 0xC, + .paletteNum = 0x3, + .baseBlock = 0x152, + }, + { + .bg = 0xFF, + .tilemapLeft = 0x0, + .tilemapTop = 0x0, + .width = 0x0, + .height = 0x0, + .paletteNum = 0x0, + .baseBlock = 0x0, + }, +}; + +const struct ListMenuItem gTeachyTvListMenuItemArray[] = +{ + { + .unk_00 = gUnknown_841B7A4, + .unk_04 = 0, + }, + { + .unk_00 = gUnknown_841B7BC, + .unk_04 = 1, + }, + { + .unk_00 = gUnknown_841B7D6, + .unk_04 = 2, + }, + { + .unk_00 = gUnknown_841B7EE, + .unk_04 = 3, + }, + { + .unk_00 = gUnknown_841B807, + .unk_04 = 4, + }, + { + .unk_00 = gUnknown_841B81B, + .unk_04 = 5, + }, + + { + .unk_00 = gUnknown_841B836, + .unk_04 = -2, + }, +}; + +const struct ListMenuItem gTeachyTvListMenuItemArray2[] = +{ + { + .unk_00 = gUnknown_841B7A4, + .unk_04 = 0, + }, + { + .unk_00 = gUnknown_841B7BC, + .unk_04 = 1, + }, + { + .unk_00 = gUnknown_841B7D6, + .unk_04 = 2, + }, + { + .unk_00 = gUnknown_841B7EE, + .unk_04 = 3, + }, + { + .unk_00 = gUnknown_841B836, + .unk_04 = -2, + }, +}; + +const struct ListMenuTemplate gTeachyTvListMenuTemplateArray = +{ + .items = gTeachyTvListMenuItemArray, + .moveCursorFunc = NULL, + .itemPrintFunc = NULL, + .totalItems = 0x7, + .maxShowed = 0x6, + .windowId = 0x0, + .header_X = 0x0, + .item_X = 0x8, + .cursor_X = 0x0, + .upText_Y = 0x6, + .cursorPal = 0x1, + .fillValue = 0x0, + .cursorShadowPal = 0x2, + .lettersSpacing = 0x0, + .itemVerticalPadding = 0x0, + .scrollMultiple = 0x1, + .fontId = 0x2, + .cursorKind = 0x0, +}; + +const struct ScrollIndicatorArrowPairTemplate gTeachyTvScrollIndicatorArrowPairTemplateArray = +{ + .unk_00 = 0x2, + .unk_01 = 0x78, + .unk_02 = 0xC, + .unk_03 = 0x3, + .unk_04 = 0x78, + .unk_05 = 0x64, + .unk_06 = 0x0, + .unk_08 = 0x1, + .unk_0a = 0x800, + .unk_0c = 0x800, + .unk_0e_0 = 0x0, + .unk_0e_4 = 0x0, +}; + +const u8 gTeachyTvSwitchFuncArray[] = +{ + 0xC, 0xC, 0xC, 0xC, 0x9, 0x9, 0x0, 0x0, +}; + +void (* const gTeachyTvFuncCluster0[])(u8) = +{ + TeachyTvClusFuncTransitionRenderBg2TeachyTvGraphicInitNpcPos, + TeachyTvClusFuncClearBg2TeachyTvGraphic, + TeachyTvClusFuncNpcMoveAndSetupTextPrinter, + TeachyTvClusFuncIdleIfTextPrinterIsActive, + TeachyTvClusFuncIdleIfTextPrinterIsActive2, + TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen, + TeachyTvClusFuncIdleIfTextPrinterIsActive2, + TeachyTvClusFuncEraseTextWindowIfKeyPressed, + TeachyTvClusFuncStartAnimNpcWalkIntoGrass, + TeachyTvClusFuncDudeMoveUp, + TeachyTvClusFuncDudeMoveRight, + TeachyTvClusFuncTaskBattleOrFadeByOptionChosen, + TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen2, + TeachyTvClusFuncIdleIfTextPrinterIsActive2, + TeachyTvClusFuncEraseTextWindowIfKeyPressed, + TeachyTvClusFuncDudeTurnLeft, + TeachyTvClusFuncDudeMoveLeft, + TeachyTvClusFuncRenderAndRemoveBg1EndGraphic, + TeachyTvBackToOptionList, +}; + +void (* const gTeachyTvFuncCluster1[])(u8) = +{ + TeachyTvClusFuncTransitionRenderBg2TeachyTvGraphicInitNpcPos, + TeachyTvClusFuncClearBg2TeachyTvGraphic, + TeachyTvClusFuncNpcMoveAndSetupTextPrinter, + TeachyTvClusFuncIdleIfTextPrinterIsActive, + TeachyTvClusFuncIdleIfTextPrinterIsActive2, + TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen, + TeachyTvClusFuncIdleIfTextPrinterIsActive2, + TeachyTvClusFuncEraseTextWindowIfKeyPressed, + TeachyTvClusFuncStartAnimNpcWalkIntoGrass, + TeachyTvClusFuncDudeMoveUp, + TeachyTvClusFuncDudeMoveRight, + TeachyTvClusFuncTaskBattleOrFadeByOptionChosen, + TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen2, + TeachyTvClusFuncIdleIfTextPrinterIsActive2, + TeachyTvClusFuncEraseTextWindowIfKeyPressed, + TeachyTvClusFuncDudeTurnLeft, + TeachyTvClusFuncDudeMoveLeft, + TeachyTvClusFuncRenderAndRemoveBg1EndGraphic, + TeachyTvBackToOptionList, +}; + +void (* const gTeachyTvFuncCluster2[])(u8) = +{ + TeachyTvClusFuncTransitionRenderBg2TeachyTvGraphicInitNpcPos, + TeachyTvClusFuncClearBg2TeachyTvGraphic, + TeachyTvClusFuncNpcMoveAndSetupTextPrinter, + TeachyTvClusFuncIdleIfTextPrinterIsActive, + TeachyTvClusFuncIdleIfTextPrinterIsActive2, + TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen, + TeachyTvClusFuncIdleIfTextPrinterIsActive2, + TeachyTvClusFuncEraseTextWindowIfKeyPressed, + TeachyTvClusFuncStartAnimNpcWalkIntoGrass, + TeachyTvClusFuncDudeMoveUp, + TeachyTvClusFuncDudeMoveRight, + TeachyTvClusFuncTaskBattleOrFadeByOptionChosen, + TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen2, + TeachyTvClusFuncIdleIfTextPrinterIsActive2, + TeachyTvClusFuncEraseTextWindowIfKeyPressed, + TeachyTvClusFuncDudeTurnLeft, + TeachyTvClusFuncDudeMoveLeft, + TeachyTvClusFuncRenderAndRemoveBg1EndGraphic, + TeachyTvBackToOptionList, +}; + +void (* const gTeachyTvFuncCluster3[])(u8) = +{ + TeachyTvClusFuncTransitionRenderBg2TeachyTvGraphicInitNpcPos, + TeachyTvClusFuncClearBg2TeachyTvGraphic, + TeachyTvClusFuncNpcMoveAndSetupTextPrinter, + TeachyTvClusFuncIdleIfTextPrinterIsActive, + TeachyTvClusFuncIdleIfTextPrinterIsActive2, + TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen, + TeachyTvClusFuncIdleIfTextPrinterIsActive2, + TeachyTvClusFuncEraseTextWindowIfKeyPressed, + TeachyTvClusFuncStartAnimNpcWalkIntoGrass, + TeachyTvClusFuncDudeMoveUp, + TeachyTvClusFuncDudeMoveRight, + TeachyTvClusFuncTaskBattleOrFadeByOptionChosen, + TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen2, + TeachyTvClusFuncIdleIfTextPrinterIsActive2, + TeachyTvClusFuncEraseTextWindowIfKeyPressed, + TeachyTvClusFuncDudeTurnLeft, + TeachyTvClusFuncDudeMoveLeft, + TeachyTvClusFuncRenderAndRemoveBg1EndGraphic, + TeachyTvBackToOptionList, +}; + +void (* const gTeachyTvFuncCluster4[])(u8) = +{ + TeachyTvClusFuncTransitionRenderBg2TeachyTvGraphicInitNpcPos, + TeachyTvClusFuncClearBg2TeachyTvGraphic, + TeachyTvClusFuncNpcMoveAndSetupTextPrinter, + TeachyTvClusFuncIdleIfTextPrinterIsActive, + TeachyTvClusFuncIdleIfTextPrinterIsActive2, + TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen, + TeachyTvClusFuncIdleIfTextPrinterIsActive2, + TeachyTvClusFuncEraseTextWindowIfKeyPressed, + TeachyTvClusFuncTaskBattleOrFadeByOptionChosen, + TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen2, + TeachyTvClusFuncIdleIfTextPrinterIsActive2, + TeachyTvClusFuncEraseTextWindowIfKeyPressed, + TeachyTvClusFuncDudeTurnLeft, + TeachyTvClusFuncDudeMoveLeft, + TeachyTvClusFuncRenderAndRemoveBg1EndGraphic, + TeachyTvBackToOptionList, +}; + +void (* const gTeachyTvFuncCluster5[])(u8) = +{ + TeachyTvClusFuncTransitionRenderBg2TeachyTvGraphicInitNpcPos, + TeachyTvClusFuncClearBg2TeachyTvGraphic, + TeachyTvClusFuncNpcMoveAndSetupTextPrinter, + TeachyTvClusFuncIdleIfTextPrinterIsActive, + TeachyTvClusFuncIdleIfTextPrinterIsActive2, + TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen, + TeachyTvClusFuncIdleIfTextPrinterIsActive2, + TeachyTvClusFuncEraseTextWindowIfKeyPressed, + TeachyTvClusFuncTaskBattleOrFadeByOptionChosen, + TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen2, + TeachyTvClusFuncIdleIfTextPrinterIsActive2, + TeachyTvClusFuncEraseTextWindowIfKeyPressed, + TeachyTvClusFuncDudeTurnLeft, + TeachyTvClusFuncDudeMoveLeft, + TeachyTvClusFuncRenderAndRemoveBg1EndGraphic, + TeachyTvBackToOptionList, +}; + +void (* const * const gTeachyTvFuncClusterArray[])(u8) = +{ + gTeachyTvFuncCluster0, + gTeachyTvFuncCluster1, + gTeachyTvFuncCluster2, + gTeachyTvFuncCluster3, + gTeachyTvFuncCluster4, + gTeachyTvFuncCluster5, +}; + +const u8 * const gTeachyTvTextArray1[] = +{ + gUnknown_841B8BF, + gUnknown_841BB40, + gUnknown_841BE76, + gUnknown_841C23B, + gUnknown_841C459, + gUnknown_841C82A, +}; + +const u8 * const gTeachyTvTextArray2[] = +{ + gUnknown_841BA41, + gUnknown_841BD10, + gUnknown_841C0AF, + gUnknown_841C384, + gUnknown_841C7B4, + gUnknown_841C994, +}; + +const u16 gUnknown_8479590[] = +{ + 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, + 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, +}; + +const struct Subsprite gTeachyTvSubspriteArray[] = +{ + { + .x = -0x8, + .y = -0x8, + .shape = 0x1, + .size = 0x0, + .tileOffset = 0x0, + .priority = 0x3, + }, + { + .x = -0x8, + .y = 0x0, + .shape = 0x1, + .size = 0x0, + .tileOffset = 0x2, + .priority = 0x2, + }, +}; + +const struct SubspriteTable gTeachyTvSubspriteTableArray[] = +{ + { + .subspriteCount = 0, + .subsprites = NULL, + }, + { + .subspriteCount = 2, + .subsprites = gTeachyTvSubspriteArray, + }, +}; + +const u8 gTeachyTvGrassAnimArray[] = +{ + 0, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, 1, 0, 0, +}; + void TeachyTvCallback(void) { RunTasks(); @@ -219,7 +614,7 @@ void TeachyTvSetupBg(void) { InitBgReg(); ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, gUnknown_84792E0, 4); + InitBgsFromTemplates(0, gTeachyTvBgTemplateArray, 4); SetBgTilemapBuffer(1, gUnknown_203F450->buffer1); SetBgTilemapBuffer(2, gUnknown_203F450->buffer2); SetBgTilemapBuffer(3, gUnknown_203F450->buffer3); @@ -250,7 +645,7 @@ void TeachyTvLoadGraphic(void) void TeachyTvCreateAndRenderRbox(void) { - InitWindows(gUnknown_84792F0); + InitWindows(gTeachyTvWindowTemplateArray); DeactivateAllTextPrinters(); FillWindowPixelBuffer(0, 0xCC); PutWindowTilemap(0); @@ -260,12 +655,12 @@ void TeachyTvCreateAndRenderRbox(void) u8 TeachyTvSetupWindow(void) { - gMultiuseListMenuTemplate = gUnknown_8479368; + gMultiuseListMenuTemplate = gTeachyTvListMenuTemplateArray; gMultiuseListMenuTemplate.windowId = 1; gMultiuseListMenuTemplate.moveCursorFunc = TeachyTvAudioByInput; if (!CheckBagHasItem(ITEM_TM_CASE, 1)) { - gMultiuseListMenuTemplate.items = gUnknown_8479340; + gMultiuseListMenuTemplate.items = gTeachyTvListMenuItemArray2; gMultiuseListMenuTemplate.totalItems = 5; gMultiuseListMenuTemplate.maxShowed = 5; gMultiuseListMenuTemplate.upText_Y = (gMultiuseListMenuTemplate.upText_Y + 8) & 0xF; @@ -285,7 +680,7 @@ void TeachyTvSetupScrollIndicatorArrowPair(void) } else { - u8 res = AddScrollIndicatorArrowPair(&gUnknown_8479380, &(gTeachyTV_StaticResources.scrollOffset)); + u8 res = AddScrollIndicatorArrowPair(&gTeachyTvScrollIndicatorArrowPairTemplateArray, &(gTeachyTV_StaticResources.scrollOffset)); gUnknown_203F450->var_4007 = res; } } @@ -315,10 +710,10 @@ void TeachyTvInitIo(void) u8 TeachyTvSetupObjEventAndOam(void) { - u8 temp = AddPseudoEventObject(90, SpriteCallbackDummy, 0, 0, 8); - gSprites[temp].oam.priority = 2; - gSprites[temp].invisible = 1; - return temp; + u8 objId = AddPseudoEventObject(90, SpriteCallbackDummy, 0, 0, 8); + gSprites[objId].oam.priority = 2; + gSprites[objId].invisible = 1; + return objId; } void TeachyTvSetSpriteCoordsAndSwitchFrame(u8 objId, u16 x, u16 y, u8 frame) @@ -536,8 +931,8 @@ void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId) } else { - void (***array)(u8) = gUnknown_8479548; - void (**cluster)(u8) = array[(u8)gTeachyTV_StaticResources.optionChosen]; + void (* const * const *array)(u8) = gTeachyTvFuncClusterArray; + void (* const * const cluster)(u8) = array[(u8)gTeachyTV_StaticResources.optionChosen]; cluster[data[3]](taskId); } } @@ -545,7 +940,7 @@ void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId) void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen(u8 taskId) { s16 *data = gTasks[taskId].data; - const u8 * const* texts = gUnknown_8479560; + const u8 * const* texts = gTeachyTvTextArray1; TeachyTvInitTextPrinter(texts[gTeachyTV_StaticResources.optionChosen]); ++data[3]; } @@ -553,7 +948,7 @@ void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen(u8 taskId) void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen2(u8 taskId) { s16 *data = gTasks[taskId].data; - const u8 * const* texts = gUnknown_8479578; + const u8 * const* texts = gTeachyTvTextArray2; TeachyTvInitTextPrinter(texts[gTeachyTV_StaticResources.optionChosen]); ++data[3]; } @@ -701,7 +1096,7 @@ void TeachyTvBackToOptionList(u8 taskId) } } -void TeachyTvChainTaskBattleOrFadeByOptionChosen(u8 taskId) +void TeachyTvClusFuncTaskBattleOrFadeByOptionChosen(u8 taskId) { int op = gTeachyTV_StaticResources.optionChosen; if (op >= 0) @@ -732,7 +1127,7 @@ void TeachyTvPostBattleFadeControl(u8 taskId) s16 *data = gTasks[taskId].data; if (!(gPaletteFade.active)) { - const u8 *funcIdx = gUnknown_8479390; + const u8 *funcIdx = gTeachyTvSwitchFuncArray; int arg = funcIdx[gTeachyTV_StaticResources.optionChosen]; data[3] = arg; gTasks[taskId].func = TeachyTvRenderMsgAndSwitchClusterFuncs; @@ -767,7 +1162,7 @@ void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 m } else { - SetSubspriteTables(obj, gUnknown_84795B8); + SetSubspriteTables(obj, gTeachyTvSubspriteTableArray); obj->subspriteTableNum = 0; obj->subspriteMode = 1; } @@ -813,7 +1208,7 @@ u8 TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj(s16 x, s16 y) int high, low; if ((x < 0) || (y < 0)) return 0; - arr = gUnknown_84795C8; + arr = gTeachyTvGrassAnimArray; high = ((y >> 4) + gUnknown_203F450->var_4005) << 4; low = ((x >> 4) + gUnknown_203F450->var_4004); return arr[high+low]; @@ -1230,8 +1625,8 @@ void TeachyTvPushBackNewMapPalIndexArrayEntry(struct MapData *mStruct, u16 *buf1 metaTileEntryAddr = &((u16*)(ts->metatiles))[8 * temp]; buf1[0] = (TeachyTvComputePalIndexArrayEntryByMetaTile(palIndexArray, metaTileEntryAddr[0]) << 12) + 4 * offset; buf1[1] = (TeachyTvComputePalIndexArrayEntryByMetaTile(palIndexArray, metaTileEntryAddr[1]) << 12) + 4 * offset + 1; - buf1[0x20] = (TeachyTvComputePalIndexArrayEntryByMetaTile(palIndexArray, metaTileEntryAddr[2]) << 12) + 4 * offset + 2; - buf1[0x21] = (TeachyTvComputePalIndexArrayEntryByMetaTile(palIndexArray, metaTileEntryAddr[3]) << 12) + 4 * offset + 3; + buf1[32] = (TeachyTvComputePalIndexArrayEntryByMetaTile(palIndexArray, metaTileEntryAddr[2]) << 12) + 4 * offset + 2; + buf1[33] = (TeachyTvComputePalIndexArrayEntryByMetaTile(palIndexArray, metaTileEntryAddr[3]) << 12) + 4 * offset + 3; } #else NAKED @@ -1327,8 +1722,8 @@ void TeachyTvComputeSingleMapTileBlockFromTilesetAndMetaTiles(u8 *blockBuf, u8 * { for (j = 0; j < 4; ++j) { - u32 offset2 = j - 3; - u8 value = buffer[(i << 2) - offset2]; + u32 offset = j - 3; + u8 value = buffer[(i << 2) - offset]; src[(i << 2) + j] = ((value & 0xF) << 4) + ((value & 0xF0) >> 4); } } -- cgit v1.2.3 From 20a09555eac362113abe831dd6b3973b480f56e9 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Tue, 11 Jun 2019 05:20:42 +0800 Subject: fixed lots of stuff --- src/fame_checker.c | 16 ++-- src/mystery_gift_menu.c | 2 +- src/teachy_tv.c | 242 +++++++++++++++++++++++------------------------- src/tm_case.c | 8 +- 4 files changed, 129 insertions(+), 139 deletions(-) (limited to 'src') diff --git a/src/fame_checker.c b/src/fame_checker.c index 740c9b9cf..75b61ce53 100644 --- a/src/fame_checker.c +++ b/src/fame_checker.c @@ -1341,14 +1341,14 @@ static void FC_DoMoveCursor(s32 itemIndex, bool8 onInit) u16 who; ListMenuGetScrollAndRow(sFameCheckerData->listMenuTaskId, &listY, &cursorY); who = listY + cursorY; - AddTextPrinterParameterized4(FCWINDOWID_LIST, 2, 8, 14 * cursorY + 4, 0, 0, &sTextColor_Green, 0, sListMenuItems[itemIndex].unk_00); + AddTextPrinterParameterized4(FCWINDOWID_LIST, 2, 8, 14 * cursorY + 4, 0, 0, &sTextColor_Green, 0, sListMenuItems[itemIndex].label); if (!onInit) { if (listY < sFameCheckerData->listMenuTopIdx2) sFameCheckerData->listMenuDrawnSelIdx++; else if (listY > sFameCheckerData->listMenuTopIdx2 && who != sFameCheckerData->numUnlockedPersons - 1) sFameCheckerData->listMenuDrawnSelIdx--; - AddTextPrinterParameterized4(FCWINDOWID_LIST, 2, 8, 14 * sFameCheckerData->listMenuDrawnSelIdx + 4, 0, 0, &sTextColor_DkGrey, 0, sListMenuItems[sFameCheckerData->listMenuCurIdx].unk_00); + AddTextPrinterParameterized4(FCWINDOWID_LIST, 2, 8, 14 * sFameCheckerData->listMenuDrawnSelIdx + 4, 0, 0, &sTextColor_DkGrey, 0, sListMenuItems[sFameCheckerData->listMenuCurIdx].label); } sFameCheckerData->listMenuCurIdx = itemIndex; @@ -1368,20 +1368,20 @@ static u8 FC_PopulateListMenu(void) { if (sTrainerIdxs[fameCheckerIdx] < FC_NONTRAINER_START) { - sListMenuItems[nitems].unk_00 = gTrainers[sTrainerIdxs[fameCheckerIdx]].trainerName; - sListMenuItems[nitems].unk_04 = nitems; + sListMenuItems[nitems].label = gTrainers[sTrainerIdxs[fameCheckerIdx]].trainerName; + sListMenuItems[nitems].index = nitems; } else { - sListMenuItems[nitems].unk_00 = sNonTrainerNamePointers[sTrainerIdxs[fameCheckerIdx] - FC_NONTRAINER_START]; - sListMenuItems[nitems].unk_04 = nitems; + sListMenuItems[nitems].label = sNonTrainerNamePointers[sTrainerIdxs[fameCheckerIdx] - FC_NONTRAINER_START]; + sListMenuItems[nitems].index = nitems; } sFameCheckerData->unlockedPersons[nitems] = fameCheckerIdx; nitems++; } } - sListMenuItems[nitems].unk_00 = gFameCheckerText_Cancel; - sListMenuItems[nitems].unk_04 = nitems; + sListMenuItems[nitems].label = gFameCheckerText_Cancel; + sListMenuItems[nitems].index = nitems; sFameCheckerData->unlockedPersons[nitems] = 0xFF; nitems++; gFameChecker_ListMenuTemplate.totalItems = nitems; diff --git a/src/mystery_gift_menu.c b/src/mystery_gift_menu.c index 16e01f362..9ff96eb23 100644 --- a/src/mystery_gift_menu.c +++ b/src/mystery_gift_menu.c @@ -703,7 +703,7 @@ u32 MysteryGift_HandleThreeOptionMenu(u8 * unused0, u16 * unused1, u8 whichMenu) width = 0; for (i = 0; i < listMenuTemplate.totalItems; i++) { - u32 curWidth = GetStringWidth(2, listMenuTemplate.items[i].unk_00, listMenuTemplate.lettersSpacing); + u32 curWidth = GetStringWidth(2, listMenuTemplate.items[i].label, listMenuTemplate.lettersSpacing); if (curWidth > width) width = curWidth; } diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 6f1fcef3c..368508b77 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -1,4 +1,3 @@ -#include "main.h" #include "task.h" #include "menu.h" #include "palette.h" @@ -31,6 +30,9 @@ #include "help_system.h" #include "overworld.h" #include "unk_8159F40.h" +#include "graphics.h" +#include "fieldmap.h" +#include "strings.h" struct TeachyTvCtrlBlk { @@ -57,14 +59,6 @@ struct TeachyTvBuf EWRAM_DATA struct TeachyTvCtrlBlk gTeachyTV_StaticResources = {0}; EWRAM_DATA struct TeachyTvBuf * gUnknown_203F450 = NULL; -extern const struct SpritePalette gUnknown_83A5348; -extern const struct SpriteTemplate * const gUnknown_83A0010[]; -extern const struct MapData Route1_Layout; -extern const u8 gUnknown_841B7A4[], gUnknown_841B7BC[], gUnknown_841B7D6[], gUnknown_841B7EE[], gUnknown_841B807[], gUnknown_841B81B[], gUnknown_841B836[], gUnknown_841B83D[], gUnknown_841B8BF[], gUnknown_841BB40[], gUnknown_841BE76[], gUnknown_841C23B[], gUnknown_841C459[], gUnknown_841C82A[], gUnknown_841BA41[], gUnknown_841BD10[], gUnknown_841C0AF[], gUnknown_841C384[], gUnknown_841C7B4[], gUnknown_841C994[]; -extern const u8 gUnknown_8E86240[]; -extern const u8 gUnknown_8E86BE8[]; -extern const u8 gUnknown_8E86D6C[]; -extern const u8 gUnknown_8E86F98[]; void TeachyTvClusFuncTransitionRenderBg2TeachyTvGraphicInitNpcPos(u8 taskId); void TeachyTvClusFuncClearBg2TeachyTvGraphic(u8 taskId); @@ -189,57 +183,57 @@ const struct WindowTemplate gTeachyTvWindowTemplateArray[] = const struct ListMenuItem gTeachyTvListMenuItemArray[] = { { - .unk_00 = gUnknown_841B7A4, - .unk_04 = 0, + .label = gUnknown_841B7A4, + .index = 0, }, { - .unk_00 = gUnknown_841B7BC, - .unk_04 = 1, + .label = gUnknown_841B7BC, + .index = 1, }, { - .unk_00 = gUnknown_841B7D6, - .unk_04 = 2, + .label = gUnknown_841B7D6, + .index = 2, }, { - .unk_00 = gUnknown_841B7EE, - .unk_04 = 3, + .label = gUnknown_841B7EE, + .index = 3, }, { - .unk_00 = gUnknown_841B807, - .unk_04 = 4, + .label = gUnknown_841B807, + .index = 4, }, { - .unk_00 = gUnknown_841B81B, - .unk_04 = 5, + .label = gUnknown_841B81B, + .index = 5, }, { - .unk_00 = gUnknown_841B836, - .unk_04 = -2, + .label = gUnknown_841B836, + .index = -2, }, }; const struct ListMenuItem gTeachyTvListMenuItemArray2[] = { { - .unk_00 = gUnknown_841B7A4, - .unk_04 = 0, + .label = gUnknown_841B7A4, + .index = 0, }, { - .unk_00 = gUnknown_841B7BC, - .unk_04 = 1, + .label = gUnknown_841B7BC, + .index = 1, }, { - .unk_00 = gUnknown_841B7D6, - .unk_04 = 2, + .label = gUnknown_841B7D6, + .index = 2, }, { - .unk_00 = gUnknown_841B7EE, - .unk_04 = 3, + .label = gUnknown_841B7EE, + .index = 3, }, { - .unk_00 = gUnknown_841B836, - .unk_04 = -2, + .label = gUnknown_841B836, + .index = -2, }, }; @@ -428,86 +422,6 @@ void (* const * const gTeachyTvFuncClusterArray[])(u8) = gTeachyTvFuncCluster5, }; -const u8 * const gTeachyTvTextArray1[] = -{ - gUnknown_841B8BF, - gUnknown_841BB40, - gUnknown_841BE76, - gUnknown_841C23B, - gUnknown_841C459, - gUnknown_841C82A, -}; - -const u8 * const gTeachyTvTextArray2[] = -{ - gUnknown_841BA41, - gUnknown_841BD10, - gUnknown_841C0AF, - gUnknown_841C384, - gUnknown_841C7B4, - gUnknown_841C994, -}; - -const u16 gUnknown_8479590[] = -{ - 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, - 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, -}; - -const struct Subsprite gTeachyTvSubspriteArray[] = -{ - { - .x = -0x8, - .y = -0x8, - .shape = 0x1, - .size = 0x0, - .tileOffset = 0x0, - .priority = 0x3, - }, - { - .x = -0x8, - .y = 0x0, - .shape = 0x1, - .size = 0x0, - .tileOffset = 0x2, - .priority = 0x2, - }, -}; - -const struct SubspriteTable gTeachyTvSubspriteTableArray[] = -{ - { - .subspriteCount = 0, - .subsprites = NULL, - }, - { - .subspriteCount = 2, - .subsprites = gTeachyTvSubspriteArray, - }, -}; - -const u8 gTeachyTvGrassAnimArray[] = -{ - 0, 0, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 0, 0, - 0, 0, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 0, 0, - 0, 0, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 0, 0, - 0, 0, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 0, 0, - 0, 0, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 1, 1, 1, 1, 1, 1, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 1, 1, 1, 1, 1, 1, 0, 0, -}; - void TeachyTvCallback(void) { RunTasks(); @@ -754,7 +668,7 @@ void TeachyTvSetupPostBattleWindowAndObj(u8 taskId) { s16 *data = gTasks[taskId].data; int v1 = data[1]; - struct Sprite *v3 = &gSprites[v1]; + struct Sprite *objAddr = &gSprites[v1]; int op; ClearWindowTilemap(1); @@ -776,7 +690,7 @@ void TeachyTvSetupPostBattleWindowAndObj(u8 taskId) data[4] = 0; data[5] = 0; - TeachyTvGrassAnimationMain(taskId, v3->pos2.x, v3->pos2.y, 0, 1); + TeachyTvGrassAnimationMain(taskId, objAddr->pos2.x, objAddr->pos2.y, 0, 1); } void TeachyTvInitTextPrinter(const char *text) @@ -811,7 +725,7 @@ void TeachyTvQuitFadeControlAndTaskDel(u8 taskId) else { sub_8055DC4(); - SetMainCallback2((void (*)())gTeachyTV_StaticResources.callback); + SetMainCallback2(gTeachyTV_StaticResources.callback); } TeachyTvFree(); DestroyTask(taskId); @@ -940,7 +854,15 @@ void TeachyTvRenderMsgAndSwitchClusterFuncs(u8 taskId) void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen(u8 taskId) { s16 *data = gTasks[taskId].data; - const u8 * const* texts = gTeachyTvTextArray1; + const u8 * const *texts = (const u8 *const []) + { + gUnknown_841B8BF, + gUnknown_841BB40, + gUnknown_841BE76, + gUnknown_841C23B, + gUnknown_841C459, + gUnknown_841C82A, + }; TeachyTvInitTextPrinter(texts[gTeachyTV_StaticResources.optionChosen]); ++data[3]; } @@ -948,11 +870,79 @@ void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen(u8 taskId) void TeachyTvClusFuncTextPrinterSwitchStringByOptionChosen2(u8 taskId) { s16 *data = gTasks[taskId].data; - const u8 * const* texts = gTeachyTvTextArray2; + const u8 * const *texts = (const u8 *const []) + { + gUnknown_841BA41, + gUnknown_841BD10, + gUnknown_841C0AF, + gUnknown_841C384, + gUnknown_841C7B4, + gUnknown_841C994, + }; TeachyTvInitTextPrinter(texts[gTeachyTV_StaticResources.optionChosen]); ++data[3]; } +const u16 gUnknown_8479590[] = +{ + 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, + 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, +}; + +const struct Subsprite gTeachyTvSubspriteArray[] = +{ + { + .x = -0x8, + .y = -0x8, + .shape = 0x1, + .size = 0x0, + .tileOffset = 0x0, + .priority = 0x3, + }, + { + .x = -0x8, + .y = 0x0, + .shape = 0x1, + .size = 0x0, + .tileOffset = 0x2, + .priority = 0x2, + }, +}; + +const struct SubspriteTable gTeachyTvSubspriteTableArray[] = +{ + { + .subspriteCount = 0, + .subsprites = NULL, + }, + { + .subspriteCount = 2, + .subsprites = gTeachyTvSubspriteArray, + }, +}; + +const u8 gTeachyTvGrassAnimArray[] = +{ + 0, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, 1, 0, 0, +}; + void TeachyTvClusFuncIdleIfTextPrinterIsActive2(u8 taskId) { s16 *data = (u16 *)gTasks[taskId].data; @@ -1027,25 +1017,25 @@ void TeachyTvClusFuncDudeTurnLeft(u8 taskId) { s16 *data = gTasks[taskId].data; - struct Sprite *v3 = &gSprites[data[1]]; - StartSpriteAnim(v3, 6); + struct Sprite *objAddr = &gSprites[data[1]]; + StartSpriteAnim(objAddr, 6); ++data[3]; data[4] = 0; data[5] = 0; - TeachyTvGrassAnimationMain(taskId, v3->pos2.x, v3->pos2.y, 0, 0); + TeachyTvGrassAnimationMain(taskId, objAddr->pos2.x, objAddr->pos2.y, 0, 0); } void TeachyTvClusFuncDudeMoveLeft(u8 taskId) { s16 *data = gTasks[taskId].data; - struct Sprite *v2 = &gSprites[data[1]]; + struct Sprite *objAddr = &gSprites[data[1]]; - if (!(v2->pos2.x & 0xF)) - TeachyTvGrassAnimationMain(taskId, v2->pos2.x - 8, v2->pos2.y, 0, 0); - if (v2->pos2.x == 8) + if (!(objAddr->pos2.x & 0xF)) + TeachyTvGrassAnimationMain(taskId, objAddr->pos2.x - 8, objAddr->pos2.y, 0, 0); + if (objAddr->pos2.x == 8) ++data[3]; else - --v2->pos2.x; + --objAddr->pos2.x; } void TeachyTvClusFuncRenderAndRemoveBg1EndGraphic(u8 taskId) diff --git a/src/tm_case.c b/src/tm_case.c index a436269f3..026ba95a7 100644 --- a/src/tm_case.c +++ b/src/tm_case.c @@ -496,11 +496,11 @@ static void InitTMCaseListMenuItems(void) for (i = 0; i < sTMCaseDynamicResources->numTMs; i++) { GetTMNumberAndMoveString(sListMenuStringsBuffer[i], pocket->itemSlots[i].itemId); - sListMenuItemsBuffer[i].unk_00 = sListMenuStringsBuffer[i]; - sListMenuItemsBuffer[i].unk_04 = i; + sListMenuItemsBuffer[i].label = sListMenuStringsBuffer[i]; + sListMenuItemsBuffer[i].index = i; } - sListMenuItemsBuffer[i].unk_00 = gText_Close; - sListMenuItemsBuffer[i].unk_04 = -2; + sListMenuItemsBuffer[i].label = gText_Close; + sListMenuItemsBuffer[i].index = -2; gMultiuseListMenuTemplate.items = sListMenuItemsBuffer; gMultiuseListMenuTemplate.totalItems = sTMCaseDynamicResources->numTMs + 1; gMultiuseListMenuTemplate.windowId = 0; -- cgit v1.2.3 From c28365392e7f5f3f2101f48fd8b43d22f496fd1d Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Tue, 11 Jun 2019 05:44:21 +0800 Subject: struct ScrollArrowsTemplate --- src/fame_checker.c | 7 +++---- src/mevent_8145654.c | 8 ++++---- src/teachy_tv.c | 27 +++++++++++++-------------- 3 files changed, 20 insertions(+), 22 deletions(-) (limited to 'src') diff --git a/src/fame_checker.c b/src/fame_checker.c index 75b61ce53..b2ee17c93 100644 --- a/src/fame_checker.c +++ b/src/fame_checker.c @@ -1400,7 +1400,7 @@ static void FC_PutWindowTilemapAndCopyWindowToVramMode3_2(u8 windowId) static void FC_CreateScrollIndicatorArrowPair(void) { - struct ScrollIndicatorArrowPairTemplate template = { + struct ScrollArrowsTemplate template = { 2, 40, 26, @@ -1412,13 +1412,12 @@ static void FC_CreateScrollIndicatorArrowPair(void) SPRITETAG_SCROLL_INDICATORS, 0xFFFF, 1, - 0 }; if (sFameCheckerData->numUnlockedPersons > 5) { - template.unk_06 = 0; - template.unk_08 = sFameCheckerData->numUnlockedPersons - 5; + template.fullyUpThreshold = 0; + template.fullyDownThreshold = sFameCheckerData->numUnlockedPersons - 5; sFameCheckerData->scrollIndicatorPairTaskId = AddScrollIndicatorArrowPair(&template, &sFameCheckerData->listMenuTopIdx); } } diff --git a/src/mevent_8145654.c b/src/mevent_8145654.c index 3e484bd56..034a07679 100644 --- a/src/mevent_8145654.c +++ b/src/mevent_8145654.c @@ -460,7 +460,7 @@ struct UnkStruct_203F3CC /*01cc*/ u8 filler_01CC[2]; /*01ce*/ u8 unk_01CE[41]; /*01f7*/ u8 unk_01F7[10][41]; - /*0394*/ struct ScrollIndicatorArrowPairTemplate unk_0394; + /*0394*/ struct ScrollArrowsTemplate unk_0394; /*03a4*/ u8 buffer_03A4[0x1000]; }; @@ -478,9 +478,9 @@ const struct WindowTemplate gUnknown_8468040[] = { {0, 1, 0, 28, 3, 15, 0x000}, {2, 1, 3, 28, 20, 15, 0x000} }; -const struct ScrollIndicatorArrowPairTemplate gUnknown_8468050 = { +const struct ScrollArrowsTemplate gUnknown_8468050 = { 0x02, 0xe8, 0x18, 0x03, 0xe8, 0x98, - 0x0000, 0x0002, 0x1000, 0x1000, 0x0, 0x000 + 0x0000, 0x0002, 0x1000, 0x1000, 0x0, }; const u16 gUnknown_8468060[] = INCBIN_U16("data/graphics/mevent/pal_468060.gbapal"); @@ -743,7 +743,7 @@ void sub_8146980(void) ++gUnknown_203F3CC->unk_01C4; } gUnknown_203F3CC->unk_0394 = gUnknown_8468050; - gUnknown_203F3CC->unk_0394.unk_08 = gUnknown_203F3CC->unk_01C4; + gUnknown_203F3CC->unk_0394.fullyDownThreshold = gUnknown_203F3CC->unk_01C4; } void sub_8146A30(void) diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 368508b77..c04fade26 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -259,20 +259,19 @@ const struct ListMenuTemplate gTeachyTvListMenuTemplateArray = .cursorKind = 0x0, }; -const struct ScrollIndicatorArrowPairTemplate gTeachyTvScrollIndicatorArrowPairTemplateArray = -{ - .unk_00 = 0x2, - .unk_01 = 0x78, - .unk_02 = 0xC, - .unk_03 = 0x3, - .unk_04 = 0x78, - .unk_05 = 0x64, - .unk_06 = 0x0, - .unk_08 = 0x1, - .unk_0a = 0x800, - .unk_0c = 0x800, - .unk_0e_0 = 0x0, - .unk_0e_4 = 0x0, +const struct ScrollArrowsTemplate gTeachyTvScrollIndicatorArrowPairTemplateArray = +{ + .firstArrowType = 0x2, + .firstX = 0x78, + .firstY = 0xC, + .secondArrowType = 0x3, + .secondX = 0x78, + .secondY = 0x64, + .fullyUpThreshold = 0x0, + .fullyDownThreshold = 0x1, + .tileTag = 0x800, + .palTag = 0x800, + .palNum = 0x0, }; const u8 gTeachyTvSwitchFuncArray[] = -- cgit v1.2.3 From 33530548d6bd9cb8b424a59891f26e255e4647fa Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Tue, 11 Jun 2019 06:23:09 +0800 Subject: TeachyTvPushBackNewMapPalIndexArrayEntry --- src/teachy_tv.c | 84 +-------------------------------------------------------- 1 file changed, 1 insertion(+), 83 deletions(-) (limited to 'src') diff --git a/src/teachy_tv.c b/src/teachy_tv.c index c04fade26..94e1fc409 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -1595,97 +1595,15 @@ void TeachyTvLoadMapTilesetToBuffer(struct Tileset *ts, u8 *dstBuffer, u16 size) } } -#ifdef NONMATCHING void TeachyTvPushBackNewMapPalIndexArrayEntry(struct MapData *mStruct, u16 *buf1, u8 *palIndexArray, u16 mapEntry, u16 offset) { struct Tileset *ts; - u16 *metaTileEntryAddr; - int temp = mapEntry; - - if (temp <= 0x27F) - { - ts = mStruct->primaryTileset; - } - else - { - ts = mStruct->secondaryTileset; - temp = mapEntry - 0x280; - } - metaTileEntryAddr = &((u16*)(ts->metatiles))[8 * temp]; + u16 * metaTileEntryAddr = mapEntry <= 0x27F ? &((u16*)(mStruct->primaryTileset->metatiles))[8 * mapEntry] : &((u16*)(mStruct->secondaryTileset->metatiles))[8 * (mapEntry - 0x280)]; buf1[0] = (TeachyTvComputePalIndexArrayEntryByMetaTile(palIndexArray, metaTileEntryAddr[0]) << 12) + 4 * offset; buf1[1] = (TeachyTvComputePalIndexArrayEntryByMetaTile(palIndexArray, metaTileEntryAddr[1]) << 12) + 4 * offset + 1; buf1[32] = (TeachyTvComputePalIndexArrayEntryByMetaTile(palIndexArray, metaTileEntryAddr[2]) << 12) + 4 * offset + 2; buf1[33] = (TeachyTvComputePalIndexArrayEntryByMetaTile(palIndexArray, metaTileEntryAddr[3]) << 12) + 4 * offset + 3; } -#else -NAKED -void TeachyTvPushBackNewMapPalIndexArrayEntry(struct MapData *mStruct, u16 *buf1, u8 *palIndexArray, u16 mapEntry, u16 offset) -{ - asm_unified("\n\ - push {r4-r7,lr}\n\ - adds r5, r0, 0\n\ - adds r7, r1, 0\n\ - adds r6, r2, 0\n\ - ldr r0, [sp, 0x14]\n\ - lsls r3, 16\n\ - lsrs r1, r3, 16\n\ - lsls r0, 16\n\ - lsrs r4, r0, 16\n\ - ldr r0, _0815BF8C @ =0x0000027f\n\ - cmp r1, r0\n\ - bhi _0815BF90\n\ - ldr r0, [r5, 0x10]\n\ - b _0815BF96\n\ - .align 2, 0\n\ - _0815BF8C: .4byte 0x0000027f\n\ - _0815BF90:\n\ - ldr r0, [r5, 0x14]\n\ - ldr r2, _0815BFEC @ =0xfffffd80\n\ - adds r1, r2\n\ - _0815BF96:\n\ - lsls r1, 4\n\ - ldr r0, [r0, 0xC]\n\ - adds r5, r0, r1\n\ - ldrh r1, [r5]\n\ - adds r0, r6, 0\n\ - bl TeachyTvComputePalIndexArrayEntryByMetaTile\n\ - lsls r0, 12\n\ - lsls r4, 2\n\ - adds r0, r4\n\ - strh r0, [r7]\n\ - ldrh r1, [r5, 0x2]\n\ - adds r0, r6, 0\n\ - bl TeachyTvComputePalIndexArrayEntryByMetaTile\n\ - lsls r0, 12\n\ - adds r0, r4\n\ - adds r0, 0x1\n\ - strh r0, [r7, 0x2]\n\ - ldrh r1, [r5, 0x4]\n\ - adds r0, r6, 0\n\ - bl TeachyTvComputePalIndexArrayEntryByMetaTile\n\ - adds r1, r7, 0\n\ - adds r1, 0x40\n\ - lsls r0, 12\n\ - adds r0, r4\n\ - adds r0, 0x2\n\ - strh r0, [r1]\n\ - ldrh r1, [r5, 0x6]\n\ - adds r0, r6, 0\n\ - bl TeachyTvComputePalIndexArrayEntryByMetaTile\n\ - adds r1, r7, 0\n\ - adds r1, 0x42\n\ - lsls r0, 12\n\ - adds r0, r4\n\ - adds r0, 0x3\n\ - strh r0, [r1]\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ - _0815BFEC: .4byte 0xfffffd80\n\ - "); -} -#endif void TeachyTvComputeMapTilesFromTilesetAndMetaTiles(u16 *metaTilesArray, u8 *blockBuf, u8 *tileset) { -- cgit v1.2.3 From 7d8272749feaf89f972eb0789389fd5ab7f57ae6 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Tue, 11 Jun 2019 06:24:49 +0800 Subject: quick fix --- src/teachy_tv.c | 1 - 1 file changed, 1 deletion(-) (limited to 'src') diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 94e1fc409..dd5356670 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -1597,7 +1597,6 @@ void TeachyTvLoadMapTilesetToBuffer(struct Tileset *ts, u8 *dstBuffer, u16 size) void TeachyTvPushBackNewMapPalIndexArrayEntry(struct MapData *mStruct, u16 *buf1, u8 *palIndexArray, u16 mapEntry, u16 offset) { - struct Tileset *ts; u16 * metaTileEntryAddr = mapEntry <= 0x27F ? &((u16*)(mStruct->primaryTileset->metatiles))[8 * mapEntry] : &((u16*)(mStruct->secondaryTileset->metatiles))[8 * (mapEntry - 0x280)]; buf1[0] = (TeachyTvComputePalIndexArrayEntryByMetaTile(palIndexArray, metaTileEntryAddr[0]) << 12) + 4 * offset; buf1[1] = (TeachyTvComputePalIndexArrayEntryByMetaTile(palIndexArray, metaTileEntryAddr[1]) << 12) + 4 * offset + 1; -- cgit v1.2.3 From e87ae0c76d63b9806712a74d07b87801861efc4e Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Tue, 11 Jun 2019 06:33:55 +0800 Subject: more consistency --- src/teachy_tv.c | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/teachy_tv.c b/src/teachy_tv.c index dd5356670..0b6907186 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -972,11 +972,8 @@ void TeachyTvClusFuncStartAnimNpcWalkIntoGrass(u8 taskId) void TeachyTvClusFuncDudeMoveUp(u8 taskId) { - s16 *data; - struct Sprite *obj; - - data = gTasks[taskId].data; - obj = &gSprites[data[1]]; + s16 *data = gTasks[taskId].data; + struct Sprite *obj = &gSprites[data[1]]; ChangeBgY(3, 0x100, 2); if (!(++data[2] & 0xF)) { @@ -1125,13 +1122,12 @@ void TeachyTvPostBattleFadeControl(u8 taskId) void TeachyTvGrassAnimationMain(u8 taskId, s16 x, s16 y, u8 subpriority, bool8 mode) { - u8 subprio; int res; struct Sprite *obj; int objId; const struct SpriteTemplate *const *objTemAddr; - subprio = subpriority; + u8 subprio = subpriority; if (gUnknown_203F450->var_4006 != 1) { res = TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj(x - 0x10, y); @@ -1205,10 +1201,7 @@ u8 TeachyTvGrassAnimationCheckIfNeedsToGenerateGrassObj(s16 x, s16 y) void TeachyTvPrepBattle(u8 taskId) { - s16 *data; - - taskId = taskId; - data = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; TeachyTvFree(); gSpecialVar_0x8004 = gTeachyTV_StaticResources.optionChosen; gMain.savedCallback = TeachyTvRestorePlayerPartyCallback; -- cgit v1.2.3 From 191f3f783fb9472403537d08c914c03422c1a831 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Tue, 11 Jun 2019 07:24:12 +0800 Subject: savedCallback field --- src/teachy_tv.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 0b6907186..ae1e8086a 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -46,7 +46,7 @@ struct TeachyTvCtrlBlk struct TeachyTvBuf { - u32 state; + MainCallback savedCallback; u8 buffer1[0x1000]; u8 buffer2[0x1000]; u8 buffer3[0x1000]; @@ -476,7 +476,7 @@ void TeachyTvMainCallback(void) { case 0: gUnknown_203F450 = AllocZeroed(sizeof(struct TeachyTvBuf)); - gUnknown_203F450->state = 0; + gUnknown_203F450->savedCallback = NULL; gUnknown_203F450->var_4006 = 0; gUnknown_203F450->var_4007 = 0xFF; VblankHblankHandlerSetZero(); @@ -717,9 +717,9 @@ void TeachyTvQuitFadeControlAndTaskDel(u8 taskId) { if (!(gPaletteFade.active)) { - if (gUnknown_203F450->state) + if (gUnknown_203F450->savedCallback != NULL) { - SetMainCallback2(*(void (**)())gUnknown_203F450); + SetMainCallback2(gUnknown_203F450->savedCallback); } else { @@ -1094,7 +1094,7 @@ void TeachyTvClusFuncTaskBattleOrFadeByOptionChosen(u8 taskId) } else if (op <= 5) { - *((void(**)())gUnknown_203F450) = TeachyTvSetupBagItemsByOptionChosen; + gUnknown_203F450->savedCallback = TeachyTvSetupBagItemsByOptionChosen; TeachyTvQuitBeginFade(taskId); } } -- cgit v1.2.3 From 3530d21a10332ac613a5ffbb61eb11cf9e1ffba9 Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Tue, 11 Jun 2019 07:30:51 +0800 Subject: control block callback field --- src/teachy_tv.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/teachy_tv.c b/src/teachy_tv.c index ae1e8086a..843d229ce 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -36,7 +36,7 @@ struct TeachyTvCtrlBlk { - void (*callback)(); + MainCallback callback; u8 mode; u8 optionChosen; u16 scrollOffset; -- cgit v1.2.3 From 731b5e103a535086ebf99a2c3a032a7b0e30e74f Mon Sep 17 00:00:00 2001 From: jiangzhengwenjz Date: Tue, 11 Jun 2019 07:34:22 +0800 Subject: DUMMY_WIN_TEMPLATE --- src/teachy_tv.c | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) (limited to 'src') diff --git a/src/teachy_tv.c b/src/teachy_tv.c index 843d229ce..ca2e509a7 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -169,15 +169,7 @@ const struct WindowTemplate gTeachyTvWindowTemplateArray[] = .paletteNum = 0x3, .baseBlock = 0x152, }, - { - .bg = 0xFF, - .tilemapLeft = 0x0, - .tilemapTop = 0x0, - .width = 0x0, - .height = 0x0, - .paletteNum = 0x0, - .baseBlock = 0x0, - }, + DUMMY_WIN_TEMPLATE, }; const struct ListMenuItem gTeachyTvListMenuItemArray[] = -- cgit v1.2.3