tm_case through sub_8131D48

This commit is contained in:
PikalaxALT
2019-04-14 15:02:59 -04:00
parent 0cb1417de4
commit ed4b353795
7 changed files with 388 additions and 753 deletions
+368
View File
@@ -0,0 +1,368 @@
#include "global.h"
#include "malloc.h"
#include "bg.h"
#include "decompress.h"
#include "gpu_regs.h"
#include "palette.h"
#include "task.h"
#include "text.h"
#include "menu.h"
#include "menu_helpers.h"
#include "list_menu.h"
#include "item.h"
#include "string_util.h"
#include "party_menu.h"
#include "data2.h"
#include "scanline_effect.h"
#include "constants/items.h"
struct UnkStruct_203B10C
{
void (* unk_00)(void);
u8 unk_04;
u8 unk_05;
u8 unk_06;
u16 unk_08;
u16 unk_0a;
};
struct UnkStruct_203B118
{
u32 unk_00;
u8 unk_04;
u8 unk_05;
u8 unk_06;
u8 unk_07;
u8 unk_08;
u8 filler_09[9];
s16 unk_12;
u8 filler_14[8];
};
struct UnkStruct_203B11C
{
struct ItemSlot bagPocket_TMHM[BAG_TMHM_COUNT];
struct ItemSlot bagPocket_KeyItems[BAG_KEYITEMS_COUNT];
u16 unk_160;
u16 unk_162;
};
EWRAM_DATA struct UnkStruct_203B10C gUnknown_203B10C = {};
EWRAM_DATA struct UnkStruct_203B118 * gUnknown_203B118 = NULL;
EWRAM_DATA struct UnkStruct_203B11C * gUnknown_203B11C = NULL;
EWRAM_DATA void * gUnknown_203B120 = NULL; // tilemap buffer
EWRAM_DATA struct ListMenuItem * gUnknown_203B124 = NULL;
EWRAM_DATA u8 (* gUnknown_203B128)[29] = NULL;
EWRAM_DATA u16 * gUnknown_203B12C = NULL;
void sub_8131894(void);
bool8 sub_81318C0(void);
void sub_8131A8C(void);
void sub_8131AB8(void);
bool8 sub_8131B20(void);
void sub_8131C10(void);
void sub_8131C50(void);
void sub_8131D48(u8 * dest, u16 itemId);
void sub_8131E18(s32 itemIndex, bool8 onInit, struct ListMenu *list);
void sub_8131E68(u8 windowId, s32 itemId, u8 y);
void sub_8132018(void);
void sub_81320BC(void);
void sub_8132120(void);
void sub_8132170(void);
void sub_81322D4(u8 taskId);
void sub_8132F20(u8 taskId);
void sub_8133244(void);
void sub_81333C4(void);
void sub_8133404(void);
u8 sub_813368C(u16 itemId);
void sub_81338A8(void);
extern const struct BgTemplate gUnknown_8463134[3];
extern const u32 gUnknown_8E845D8[];
extern const u32 gUnknown_8E84A24[];
extern const u32 gUnknown_8E84B70[];
extern const u32 gUnknown_8E84CB0[];
extern const u32 gUnknown_8E84D20[];
extern const struct CompressedSpriteSheet gUnknown_8463218;
extern const u8 gUnknown_84166DB[];
extern const u8 gUnknown_84166FF[];
extern const u8 gUnknown_8463178[];
extern const u8 gUnknown_8416226[];
extern const u8 gUnknown_846317C[];
extern const u8 gUnknown_8416703[];
void sub_81317F8(u8 a0, void (* a1)(void), u8 a2)
{
sub_8131A8C();
gUnknown_203B118 = Alloc(sizeof(struct UnkStruct_203B118));
gUnknown_203B118->unk_00 = 0;
gUnknown_203B118->unk_08 = 0xFF;
gUnknown_203B118->unk_07 = 0xFF;
if (a0 != 5)
gUnknown_203B10C.unk_04 = a0;
if (a1 != NULL)
gUnknown_203B10C.unk_00 = a1;
if (a2 != 0xFF)
gUnknown_203B10C.unk_05 = a2;
gTextFlags.flag_2 = FALSE;
SetMainCallback2(sub_8131894);
}
void sub_8131864(void)
{
RunTasks();
AnimateSprites();
BuildOamBuffer();
do_scheduled_bg_tilemap_copies_to_vram();
UpdatePaletteFade();
}
void sub_8131880(void)
{
LoadOam();
ProcessSpriteCopyRequests();
TransferPlttBuffer();
}
void sub_8131894(void)
{
while (1)
{
if (sub_80BF72C() == TRUE)
break;
if (sub_81318C0() == TRUE)
break;
if (sub_80BF708() == TRUE)
break;
}
}
bool8 sub_81318C0(void)
{
u8 taskId;
switch (gMain.state)
{
case 0:
sub_80BF768();
clear_scheduled_bg_copies_to_vram();
gMain.state++;
break;
case 1:
ScanlineEffect_Stop();
gMain.state++;
break;
case 2:
FreeAllSpritePalettes();
gMain.state++;
break;
case 3:
ResetPaletteFade();
gMain.state++;
break;
case 4:
ResetSpriteData();
gMain.state++;
break;
case 5:
ResetTasks();
gMain.state++;
break;
case 6:
sub_8131AB8();
gUnknown_203B118->unk_12 = 0;
gMain.state++;
break;
case 7:
sub_8133244();
gMain.state++;
break;
case 8:
if (sub_8131B20())
gMain.state++;
break;
case 9:
sub_809A5E4(&gUnknown_20398A4);
gMain.state++;
break;
case 10:
sub_81320BC();
sub_8132120();
sub_8132170();
gMain.state++;
break;
case 11:
sub_8133404();
gMain.state++;
break;
case 12:
sub_8131C10();
sub_8131C50();
gMain.state++;
break;
case 13:
sub_81333C4();
gMain.state++;
break;
case 14:
if (gUnknown_203B10C.unk_04 == 4)
taskId = CreateTask(sub_8132F20, 0);
else
taskId = CreateTask(sub_81322D4, 0);
gTasks[taskId].data[0] = ListMenuInit(&gUnknown_3005E70, gUnknown_203B10C.unk_0a, gUnknown_203B10C.unk_08);
gMain.state++;
break;
case 15:
sub_8132018();
gMain.state++;
break;
case 16:
gUnknown_203B118->unk_04 = sub_813368C(sub_809A798(POCKET_TM_CASE, gUnknown_203B10C.unk_0a + gUnknown_203B10C.unk_08));
gMain.state++;
break;
case 17:
BlendPalettes(0xFFFFFFFF, 16, 0);
gMain.state++;
break;
case 18:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
gMain.state++;
break;
default:
SetVBlankCallback(sub_8131880);
SetMainCallback2(sub_8131864);
return TRUE;
}
return FALSE;
}
void sub_8131A8C(void)
{
gUnknown_203B118 = NULL;
gUnknown_203B120 = NULL;
gUnknown_203B124 = NULL;
gUnknown_203B128 = NULL;
gUnknown_203B12C = NULL;
}
void sub_8131AB8(void)
{
void ** ptr;
sub_80BF7C8();
ptr = &gUnknown_203B120;
*ptr = AllocZeroed(0x800);
ResetBgsAndClearDma3BusyFlags(0);
InitBgsFromTemplates(0, gUnknown_8463134, NELEMS(gUnknown_8463134));
SetBgTilemapBuffer(2, *ptr);
schedule_bg_copy_tilemap_to_vram(1);
schedule_bg_copy_tilemap_to_vram(2);
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON);
SetGpuReg(REG_OFFSET_BLDCNT, 0);
ShowBg(0);
ShowBg(1);
ShowBg(2);
}
bool8 sub_8131B20(void)
{
switch (gUnknown_203B118->unk_12)
{
case 0:
reset_temp_tile_data_buffers();
decompress_and_copy_tile_data_to_vram(1, gUnknown_8E845D8, 0, 0, 0);
gUnknown_203B118->unk_12++;
break;
case 1:
if (free_temp_tile_data_buffers_if_possible() != TRUE)
{
LZDecompressWram(gUnknown_8E84A24, gUnknown_203B120);
gUnknown_203B118->unk_12++;
}
break;
case 2:
LZDecompressWram(gUnknown_8E84B70, GetBgTilemapBuffer(1));
gUnknown_203B118->unk_12++;
break;
case 3:
if (gSaveBlock2Ptr->playerGender == MALE)
LoadCompressedPalette(gUnknown_8E84CB0, 0, 0x80);
else
LoadCompressedPalette(gUnknown_8E84D20, 0, 0x80);
gUnknown_203B118->unk_12++;
break;
case 4:
LoadCompressedObjectPic(&gUnknown_8463218);
gUnknown_203B118->unk_12++;
break;
default:
sub_81338A8();
gUnknown_203B118->unk_12 = 0;
return TRUE;
}
return FALSE;
}
void sub_8131C10(void)
{
struct BagPocket * pocket = &gUnknown_20398A4;
gUnknown_203B124 = Alloc((pocket->capacity + 1) * sizeof(struct ListMenuItem));
gUnknown_203B128 = Alloc(gUnknown_203B118->unk_06 * 29);
}
void sub_8131C50(void)
{
struct BagPocket * pocket = &gUnknown_20398A4;
u16 i;
for (i = 0; i < gUnknown_203B118->unk_06; i++)
{
sub_8131D48(gUnknown_203B128[i], pocket->itemSlots[i].itemId);
gUnknown_203B124[i].unk_00 = gUnknown_203B128[i];
gUnknown_203B124[i].unk_04 = i;
}
gUnknown_203B124[i].unk_00 = gUnknown_84166DB;
gUnknown_203B124[i].unk_04 = -2;
gUnknown_3005E70.items = gUnknown_203B124;
gUnknown_3005E70.totalItems = gUnknown_203B118->unk_06 + 1;
gUnknown_3005E70.windowId = 0;
gUnknown_3005E70.header_X = 0;
gUnknown_3005E70.item_X = 8;
gUnknown_3005E70.cursor_X = 0;
gUnknown_3005E70.lettersSpacing = 0;
gUnknown_3005E70.itemVerticalPadding = 2;
gUnknown_3005E70.upText_Y = 2;
gUnknown_3005E70.maxShowed = gUnknown_203B118->unk_05;
gUnknown_3005E70.fontId = 2;
gUnknown_3005E70.cursorPal = 2;
gUnknown_3005E70.fillValue = 0;
gUnknown_3005E70.cursorShadowPal = 3;
gUnknown_3005E70.moveCursorFunc = sub_8131E18;
gUnknown_3005E70.itemPrintFunc = sub_8131E68;
gUnknown_3005E70.cursorKind = 0;
gUnknown_3005E70.scrollMultiple = 0;
}
void sub_8131D48(u8 * dest, u16 itemId)
{
StringCopy(gStringVar4, gUnknown_84166FF);
if (itemId >= ITEM_HM01)
{
StringAppend(gStringVar4, gUnknown_8463178);
StringAppend(gStringVar4, gUnknown_8416226);
ConvertIntToDecimalStringN(gStringVar1, itemId - ITEM_HM01 + 1, STR_CONV_MODE_LEADING_ZEROS, 1);
StringAppend(gStringVar4, gStringVar1);
}
else
{
StringAppend(gStringVar4, gUnknown_8416226);
ConvertIntToDecimalStringN(gStringVar1, itemId - ITEM_TM01 + 1, STR_CONV_MODE_LEADING_ZEROS, 2);
StringAppend(gStringVar4, gStringVar1);
}
StringAppend(gStringVar4, gUnknown_846317C);
StringAppend(gStringVar4, gUnknown_8416703);
StringAppend(gStringVar4, gMoveNames[ItemIdToBattleMoveId(itemId)]);
StringCopy(dest, gStringVar4);
}