From 05724d3db1208ffdb867aba5aa9441d538ba9e26 Mon Sep 17 00:00:00 2001 From: Evan Date: Sat, 16 Nov 2019 19:45:55 -0700 Subject: remove compile errors --- src/option_menu.c | 594 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 594 insertions(+) create mode 100644 src/option_menu.c (limited to 'src') diff --git a/src/option_menu.c b/src/option_menu.c new file mode 100644 index 000000000..57de35f11 --- /dev/null +++ b/src/option_menu.c @@ -0,0 +1,594 @@ +#include "global.h" +#include "gpu_regs.h" +#include "scanline_effect.h" +#include "text_window_graphics.h" +#include "menu.h" +#include "menu_helpers.h" +#include "task.h" +#include "palette.h" +#include "overworld.h" +#include "malloc.h" +#include "help_system.h" +#include "main.h" +#include "bg.h" +#include "window.h" +#include "text.h" +#include "text_window.h" +#include "string_util.h" +#include "strings.h" +#include "field_fadetransition.h" +#include "gba/m4a_internal.h" + + +// Menu items +enum +{ + MENUITEM_TEXTSPEED = 0, + MENUITEM_BATTLESCENE, + MENUITEM_BATTLESTYLE, + MENUITEM_SOUND, + MENUITEM_BUTTONMODE, + MENUITEM_FRAMETYPE, + MENUITEM_CANCEL, + MENUITEM_COUNT, +}; +// Window Ids +enum +{ + WIN_TEXT_OPTION, + WIN_OPTIONS +}; + +//This file's functions +static void sub_808835C(void); +static void sub_8088374(void); +static void sub_8088430(void); +static void sub_8088444(void); +static void sub_8088454(void); +static void sub_8088514(void); +static void sub_8088530(void); +static void sub_8088680(void); +static void sub_80886D4(void); +static bool8 sub_80886F0(void); +static void sub_8088780(u8 taskId); +static u8 sub_80888C0(void); +static void sub_80889A8(u8 selection); +static void sub_8088B00(u8 taskId); +static void sub_8088BD0(void); +static void sub_8088C0C(void); +static void sub_8088D8C(void); +static void sub_8088DE0(u8 selection); + +extern const u16 gUnknown_83CC304[]; //sOptionsMenuItemCounts +extern const struct BgTemplate gUnknown_83CC2D8[]; +extern const u8 gUnknown_83CC360[]; +extern const u16 gUnknown_83CC2E4[]; +extern const struct WindowTemplate gUnknown_83CC2B8[]; +extern const u8 gUnknown_83CC363[]; +extern const u8 gUnknown_83CC330[]; +extern const u8 gUnknown_83CC33C[]; +extern const u8 gUnknown_83CC344[]; +extern const u8 gUnknown_83CC34C[]; +extern const u8 gUnknown_83CC354[]; +extern const u8 gUnknown_8419E52[]; +extern const u8 gUnknown_8419DCC[]; +extern const u8* gUnknown_83CC314[MENUITEM_COUNT]; +extern const u8 gUnknown_8419E57[]; + +struct OptionsMenu +{ + /*0x00*/ u16 option[7]; + /*0x0E*/ u16 unkE; + /*0x10*/ u8 state3; + /*0x11*/ u8 state; + /*0x12*/ u8 state2; + /*0x13*/ u8 unk13; +}; + +EWRAM_DATA struct OptionsMenu *sOptionsMenu = {0}; + + +//CB2_InitOptionsMenu +static void sub_808835C(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + + +//VBlankCB_OptionsMenu +static void sub_8088374(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + + +//sub_8088388 +void CB2_OptionsMenuFromStartMenu(void) +{ + int i; + + if (gMain.savedCallback == NULL) + gMain.savedCallback = CB2_ReturnToStartMenu; + sOptionsMenu = AllocZeroed(sizeof(struct OptionsMenu)); + sOptionsMenu->state3 = 0; + sOptionsMenu->state2 = 0; + sOptionsMenu->state = 0; + sOptionsMenu->unkE = 0; + sOptionsMenu->option[MENUITEM_TEXTSPEED] = gSaveBlock2Ptr->optionsTextSpeed; + sOptionsMenu->option[MENUITEM_BATTLESCENE] = gSaveBlock2Ptr->optionsBattleSceneOff; + sOptionsMenu->option[MENUITEM_BATTLESTYLE] = gSaveBlock2Ptr->optionsBattleStyle; + sOptionsMenu->option[MENUITEM_SOUND] = gSaveBlock2Ptr->optionsSound; + sOptionsMenu->option[MENUITEM_BUTTONMODE] = gSaveBlock2Ptr->optionsButtonMode; + sOptionsMenu->option[MENUITEM_FRAMETYPE] = gSaveBlock2Ptr->optionsWindowFrameType; + + for (i = 0; i < MENUITEM_COUNT-2; i++) + { + if (sOptionsMenu->option[i] > gUnknown_83CC304[i]-1) + sOptionsMenu->option[i] = 0; + } + HelpSystem_SetSomeVariable2(0xD); + SetMainCallback2(sub_8088454); +} + + +//sub_8088430 +static void sub_8088430(void) +{ + SetVBlankCallback(0); + SetHBlankCallback(0); +} + + +//sub_8088444 +static void sub_8088444(void) +{ + SetVBlankCallback(sub_8088374); +} + +//sub_8088454 +static void sub_8088454(void) +{ + int i; + switch (sOptionsMenu->state) + { + case 0: + sub_8088430(); + sOptionsMenu->state++; + break; + case 1: + sub_8088530(); + sOptionsMenu->state++; + break; + case 2: + sub_80886D4(); + sOptionsMenu->state++; + break; + case 3: + if (!(sub_80886F0())); + return; + sOptionsMenu->state++; + break; + case 4: + sub_8088BD0(); + sOptionsMenu->state++; + break; + case 5: + sub_8088C0C(); + sOptionsMenu->state++; + break; + case 6: + sub_8088D8C(); + sOptionsMenu->state++; + break; + case 7: + for (i = 0; i < MENUITEM_COUNT; i++) + sub_80889A8(i); + sOptionsMenu->state++; + break; + case 8: + sub_8088DE0(sOptionsMenu->unkE); + sOptionsMenu->state++; + break; + case 9: + sub_8088680(); + sOptionsMenu->state++; + break; + default: + sub_8088514(); + return; + } +} + +//sub_8088514 +static void sub_8088514(void) +{ + CreateTask(sub_8088780, 0); + SetMainCallback2(sub_808835C); +} + + +//sub_8088530 +static void sub_8088530(void) +{ + void * dest = (void *) VRAM; + DmaClearLarge16(3, dest, VRAM_SIZE, 0x1000); + + DmaClear32(3, (void *)OAM, OAM_SIZE); + DmaClear16(3, (void *)PLTT, PLTT_SIZE); + SetGpuReg(REG_OFFSET_DISPCNT, 0); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, gUnknown_83CC2D8, 3); //3 -> ARRAY_COUNT(gUnknown_83CC2D8) + ChangeBgX(0, 0, 0); + ChangeBgY(0, 0, 0); + ChangeBgX(1, 0, 0); + ChangeBgY(1, 0, 0); + ChangeBgX(2, 0, 0); + ChangeBgY(2, 0, 0); + ChangeBgX(3, 0, 0); + ChangeBgY(3, 0, 0); + InitWindows(gUnknown_83CC2B8); + DeactivateAllTextPrinters(); + SetGpuReg(REG_OFFSET_BLDCNT, 193); + SetGpuReg(REG_OFFSET_BLDY, 2); + SetGpuReg(REG_OFFSET_WININ, 1); + SetGpuReg(REG_OFFSET_WINOUT, 27); + SetGpuReg(0, 0x3040); + ShowBg(0); + ShowBg(1); + ShowBg(2); +}; + +//sub_8088680 +static void sub_8088680(void) +{ + s32 x; + x = 0xE4 - GetStringWidth(0, gUnknown_8419E57, 0); + FillWindowPixelBuffer(WIN_OPTIONS, 0xFF); + AddTextPrinterParameterized3(2, 0, x, 0, gUnknown_83CC360, 0, gUnknown_8419E57); + PutWindowTilemap(2); + CopyWindowToVram(2, 3); +} + + +//sub_80886D4 +static void sub_80886D4(void) +{ + ResetSpriteData(); + ResetPaletteFade(); + FreeAllSpritePalettes(); + ResetTasks(); + ScanlineEffect_Stop(); +} + +//sub_80886F0 +static bool8 sub_80886F0(void) +{ + switch (sOptionsMenu->state2) + { + case 0: + LoadBgTiles(1, GetUserFrameGraphicsInfo(sOptionsMenu->option[6])->tiles, 0x120, 0x1AA); + break; + case 1: + LoadPalette(GetUserFrameGraphicsInfo(sOptionsMenu->option[6])->palette, 0x20, 0x20); + break; + case 2: + LoadPalette(gUnknown_83CC2E4, 0x10, 0x20); + LoadPalette(stdpal_get(2), 0xF0, 0x20); + break; + case 3: + sub_814FDA0(1, 0x1B3, 0x30); + break; + default: + return TRUE; + } + sOptionsMenu->state2++; + return FALSE; +} + + +//sub_8088780 +static void sub_8088780(u8 taskId) +{ + switch (sOptionsMenu->state3) + { + case 0: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK); + sub_8088444(); + sOptionsMenu->state3++; + break; + case 2: + if (sub_80BF72C) + return; + switch (sub_80888C0()) + { + case 0: + return; + case 1: + sOptionsMenu->state3++; + break; + case 2: + LoadBgTiles(1, GetUserFrameGraphicsInfo(sOptionsMenu->option[6])->tiles, 0x120, 0x1AA); + LoadPalette(GetUserFrameGraphicsInfo(sOptionsMenu->option[6])->palette, 0x20, 0x20); + sub_80889A8(sOptionsMenu->unkE); + return; + case 3: + sub_8088DE0(sOptionsMenu->unkE); + return; + case 4: + sub_80889A8(sOptionsMenu->unkE); + return; + default: + return; + } + case 3: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); + sOptionsMenu->state3++; + break; + case 1: + case 4: + if (gPaletteFade.active) + return; + sOptionsMenu->state3++; + return; + case 5: + sub_8088B00(taskId); + return; + default: + return; + } +} + + +//OptionsMenu_ProcessInput +static u8 sub_80888C0(void) +{ + u16 current, selection; + if (gMain.newAndRepeatedKeys & DPAD_RIGHT) + { + selection = 2 * sOptionsMenu->unkE; + current = sOptionsMenu->option[selection]; + + if (current == gUnknown_83CC304[selection] - 1) + sOptionsMenu->option[selection] = 0; + else + sOptionsMenu->option[selection] = current + 1; + if (sOptionsMenu->unkE == MENUITEM_FRAMETYPE) + return 2; + else + return 4; + } + else if (gMain.newAndRepeatedKeys & DPAD_LEFT) + { + selection = 2*sOptionsMenu->unkE; + current = sOptionsMenu->option[selection]; + if (current == 0) + sOptionsMenu->option[selection] = gUnknown_83CC304[selection] - 1; + else + sOptionsMenu->option[selection] = current - 1; + if (sOptionsMenu->unkE == MENUITEM_FRAMETYPE) + return 2; + else + return 4; + } + else if (gMain.newAndRepeatedKeys & DPAD_UP) + { + selection = sOptionsMenu->unkE; + if (selection == MENUITEM_TEXTSPEED) + sOptionsMenu->unkE = MENUITEM_CANCEL; + else + sOptionsMenu->unkE = selection - 1; + return 3; + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + selection = sOptionsMenu->unkE; + if (selection == MENUITEM_CANCEL) + sOptionsMenu->unkE = MENUITEM_TEXTSPEED; + else + sOptionsMenu->unkE = selection + 1; + return 3; + } + else if ((gMain.newKeys & B_BUTTON) || (gMain.newKeys & A_BUTTON)) + { + return 1; + } + else + { + return 0; + } +} + +/* +// must match with goto :( +bool sub_80888C0() +{ + int v0; // r0@2 + _WORD *v1; // r3@2 + int v2; // r4@2 + __int16 v3; // r0@3 + int v4; // r3@8 + __int16 v5; // r0@8 + int v7; // r1@14 + signed __int16 v8; // r0@15 + int v9; // r0@18 + + if (gMain.buttons4_new_and_keyrepeat & DPAD_RIGHT) + { + v0 = 2 * *(_WORD *)(sOptionsMenu + 14); + v1 = (_WORD *)(sOptionsMenu + v0); + v2 = *(_WORD *)(sOptionsMenu + v0); + if ( v2 == *(_WORD *)((char *)&sOptionsMenuItemCounts + v0) - 1 ) + v3 = 0; + else + v3 = v2 + 1; + *v1 = v3; + if ( *(_WORD *)(sOptionsMenu + 14) != 5 ) + return 4; + return 2; + } + if ( gMain.buttons4_new_and_keyrepeat & DPAD_LEFT ) + { + v4 = 2 * *(_WORD *)(sOptionsMenu + 14); + v5 = *(_WORD *)(sOptionsMenu + v4); + if ( !*(_WORD *)(sOptionsMenu + v4) ) + v5 = *(_WORD *)((char *)&sOptionsMenuItemCounts + v4); + *(_WORD *)(sOptionsMenu + v4) = v5 - 1; + if ( *(_WORD *)(sOptionsMenu + 14) != 5 ) + return 4; + return 2; + } + if ( gMain.buttons4_new_and_keyrepeat & 0x40 ) + { + v7 = sOptionsMenu; + if ( *(_WORD *)(sOptionsMenu + 14) ) + v8 = *(_WORD *)(sOptionsMenu + 14) - 1; + else + v8 = 6; + goto LABEL_21; + } + if ( gMain.buttons4_new_and_keyrepeat & 0x80 ) + { + v7 = sOptionsMenu; + v9 = *(_WORD *)(sOptionsMenu + 14); + if ( v9 == 6 ) + { + *(_WORD *)(sOptionsMenu + 14) = 0; + return 3; + } + v8 = v9 + 1; +LABEL_21: + *(_WORD *)(v7 + 14) = v8; + return 3; + } + return gMain.buttons3_new_remapped & 2 || gMain.buttons3_new_remapped & 1; +} +*/ + + +//sub_80889A8 +static void sub_80889A8(u8 selection) +{ + u8* dst; + u8* str; + u8* v8; + u8 x, y; + + x = 0x82; + memcpy(dst, gUnknown_83CC363, 3); + y = ((GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) - 1) * selection) + 2; + FillWindowPixelRect(1, 1, x, y, 0x46, GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT)); + switch (selection) + { + case MENUITEM_TEXTSPEED: + AddTextPrinterParameterized3(1, 2, x, y, dst, -1, gUnknown_83CC330); + break; + case MENUITEM_BATTLESCENE: + AddTextPrinterParameterized3(1, 2, x, y, dst, -1, gUnknown_83CC33C); + break; + case MENUITEM_BATTLESTYLE: + AddTextPrinterParameterized3(1, 2, x, y, dst, -1, gUnknown_83CC344); + break; + case MENUITEM_SOUND: + AddTextPrinterParameterized3(1, 2, x, y, dst, -1, gUnknown_83CC34C); + break; + case MENUITEM_BUTTONMODE: + AddTextPrinterParameterized3(1, 2, x, y, dst, -1, gUnknown_83CC354); + break; + case MENUITEM_FRAMETYPE: + StringCopy(str, gUnknown_8419E52); + ConvertIntToDecimalStringN(v8, sOptionsMenu->option[2*selection] + 1, 1, 2); + StringAppendN(str, v8, 3); + AddTextPrinterParameterized3(1, 2, x, y, dst, -1, str); + break; + default: + break; + } + PutWindowTilemap(1); + CopyWindowToVram(1, 3); +} + + +//sub_8088B00 +static void sub_8088B00(u8 taskId) +{ + gFieldCallback = sub_807DF64; + SetMainCallback2(gMain.savedCallback); + FreeAllWindowBuffers(); + + gSaveBlock2Ptr->optionsTextSpeed = sOptionsMenu->option[MENUITEM_TEXTSPEED] & 0x7; + gSaveBlock2Ptr->optionsBattleSceneOff = sOptionsMenu->option[MENUITEM_BATTLESCENE] & 0x1; + gSaveBlock2Ptr->optionsBattleStyle = sOptionsMenu->option[MENUITEM_BATTLESTYLE] & 0x1; + gSaveBlock2Ptr->optionsSound = sOptionsMenu->option[MENUITEM_SOUND] & 0x1; + gSaveBlock2Ptr->optionsButtonMode = sOptionsMenu->option[MENUITEM_BUTTONMODE]; + gSaveBlock2Ptr->optionsWindowFrameType = sOptionsMenu->option[MENUITEM_FRAMETYPE]; + + SetPokemonCryStereo(gSaveBlock2Ptr->optionsSound); + Free(sOptionsMenu); + sOptionsMenu = NULL; + DestroyTask(taskId); +} + + +//sub_8088BD0 +static void sub_8088BD0(void) +{ + FillWindowPixelBuffer(0, 0x11); + AddTextPrinterParameterized(WIN_TEXT_OPTION, 2, gUnknown_8419DCC, 8, 1, TEXT_SPEED_FF, NULL); + PutWindowTilemap(0); + CopyWindowToVram(0, 3); +} + + +//sub_8088C0C +static void sub_8088C0C(void) +{ + FillBgTilemapBufferRect(1, 0x1B3, 1, 2, 1, 1, 3); + FillBgTilemapBufferRect(1, 0x1B4, 2, 2, 0x1B, 1, 3); + FillBgTilemapBufferRect(1, 0x1B5, 0x1C, 2, 1, 1, 3); + FillBgTilemapBufferRect(1, 0x1B6, 1, 3, 1, 2, 3); + FillBgTilemapBufferRect(1, 0x1B8, 1, 0x1C, 1, 2, 3); + FillBgTilemapBufferRect(1, 0x1B9, 1, 5, 1, 1, 3); + FillBgTilemapBufferRect(1, 0x1BA, 2, 5, 0x1B, 1, 3); + FillBgTilemapBufferRect(1, 0x1BB, 0x1C, 5, 1, 1, 3); + FillBgTilemapBufferRect(1, 0x1AA, 1, 6, 1, 1, 2); + FillBgTilemapBufferRect(1, 0x1AB, 2, 6, 0x1A, 1, 2); + FillBgTilemapBufferRect(1, 0x1AC, 0x1C, 6, 1, 1, 2); + FillBgTilemapBufferRect(1, 0x1AD, 1, 7, 1, 0x10, 2); + FillBgTilemapBufferRect(1, 0x1AF, 0x1C, 7, 1, 0x10, 2); + FillBgTilemapBufferRect(1, 0x1B0, 1, 0x13, 1, 1, 2); + FillBgTilemapBufferRect(1, 0x1B1, 2, 0x13, 0x1A, 1, 2); + FillBgTilemapBufferRect(1, 0x1B2, 0x1C, 0x13, 1, 1, 2); + CopyBgTilemapBufferToVram(1); +} + + +//sub_8088D8C +static void sub_8088D8C(void) +{ + int i; + u8 attr; + + FillWindowPixelBuffer(1, 0x11); + + for (i = 0; i < MENUITEM_COUNT; i++) + { + attr = (((GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT))*i) + 2) - i; + AddTextPrinterParameterized(1, 2, gUnknown_83CC314[i], 8, attr, 0xFF, 0); + } +} + + +//sub_8088DE0 +static void sub_8088DE0(u8 selection) +{ + u8 attr; + attr = GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT); + SetGpuReg(0x44, ((selection * (attr - 1) + 58) << 8) | (selection * (attr - 1) + 58 + attr)); + SetGpuReg(0x40, 4320); +} + -- cgit v1.2.3 From b58554b9aebf7b8d6cebf682020a267c981bd5a0 Mon Sep 17 00:00:00 2001 From: Evan Date: Mon, 18 Nov 2019 15:21:22 -0700 Subject: matching up to sub_8088D8C --- src/menu_helpers.c | 2 +- src/option_menu.c | 657 +++++++++++++++++++++++++++++++++++++++-------------- 2 files changed, 488 insertions(+), 171 deletions(-) (limited to 'src') diff --git a/src/menu_helpers.c b/src/menu_helpers.c index 06e7bb08b..027280beb 100644 --- a/src/menu_helpers.c +++ b/src/menu_helpers.c @@ -125,7 +125,7 @@ bool8 MenuHelpers_LinkSomething(void) return FALSE; } -bool8 sub_80BF72C(void) +bool32 sub_80BF72C(void) { if (!MenuHelpers_LinkSomething()) return FALSE; diff --git a/src/option_menu.c b/src/option_menu.c index 57de35f11..c98a2ec7b 100644 --- a/src/option_menu.c +++ b/src/option_menu.c @@ -39,6 +39,65 @@ enum WIN_OPTIONS }; +/* +static const struct WindowTemplate gUnknown_83CC2B8[] = //sOptionMenuWinTemplates +{ + { + .bg = 1, + .tilemapLeft = 2, + .tilemapTop = 3, + .width = 26, + .height = 2, + .paletteNum = 1, + .baseBlock = 2 + }, + { + .bg = 0, + .tilemapLeft = 2, + .tilemapTop =7, + .width = 26, + .height = 12, + .paletteNum = 1, + .baseBlock = 0x36 + }, + DUMMY_WIN_TEMPLATE +}; +static const struct BgTemplate gUnknown_83CC2D8[] = //sOptionMenuBgTemplates +{ + { + .bg = 1, + .charBaseIndex = 1, + .mapBaseIndex = 30, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0 + }, + { + .bg = 0, + .charBaseIndex = 1, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 + } +}; + + +static const u16 gUnknown_83CC304[MENUITEM_COUNT] = {3, 2, 2, 2, 3, 10, 0}; //sOptionsMenuItemCounts +static const u8* gUnknown_83CC314[MENUITEM_COUNT] = //sOptionMenuItemsNames +{ + [MENUITEM_TEXTSPEED] = gText_TextSpeed, + [MENUITEM_BATTLESCENE] = gText_BattleScene, + [MENUITEM_BATTLESTYLE] = gText_BattleStyle, + [MENUITEM_SOUND] = gText_Sound, + [MENUITEM_BUTTONMODE] = gText_ButtonMode, + [MENUITEM_FRAMETYPE] = gText_Frame, + [MENUITEM_CANCEL] = gText_OptionMenuCancel, +}; +*/ + //This file's functions static void sub_808835C(void); static void sub_8088374(void); @@ -57,27 +116,27 @@ static void sub_8088B00(u8 taskId); static void sub_8088BD0(void); static void sub_8088C0C(void); static void sub_8088D8C(void); -static void sub_8088DE0(u8 selection); - -extern const u16 gUnknown_83CC304[]; //sOptionsMenuItemCounts -extern const struct BgTemplate gUnknown_83CC2D8[]; -extern const u8 gUnknown_83CC360[]; -extern const u16 gUnknown_83CC2E4[]; -extern const struct WindowTemplate gUnknown_83CC2B8[]; -extern const u8 gUnknown_83CC363[]; -extern const u8 gUnknown_83CC330[]; -extern const u8 gUnknown_83CC33C[]; -extern const u8 gUnknown_83CC344[]; -extern const u8 gUnknown_83CC34C[]; -extern const u8 gUnknown_83CC354[]; -extern const u8 gUnknown_8419E52[]; -extern const u8 gUnknown_8419DCC[]; +static void sub_8088DE0(u16 selection); + +extern const struct WindowTemplate gUnknown_83CC2B8[3]; +extern const struct BgTemplate gUnknown_83CC2D8[2]; +extern const u16 gUnknown_83CC2E4[0x20]; +extern const u16 gUnknown_83CC304[MENUITEM_COUNT]; //sOptionsMenuItemCounts extern const u8* gUnknown_83CC314[MENUITEM_COUNT]; +extern const u8 gUnknown_83CC330[0xC]; +extern const u8 gUnknown_83CC33C[0x8]; +extern const u8 gUnknown_83CC344[0x8]; +extern const u8 gUnknown_83CC34C[0x8]; +extern const u8 gUnknown_83CC354[0xC]; +extern const u8 gUnknown_83CC360[0x3]; +extern const u8 gUnknown_83CC363[0x3]; +extern const u8 gUnknown_8419DCC[]; +extern const u8 gUnknown_8419E52[]; extern const u8 gUnknown_8419E57[]; struct OptionsMenu { - /*0x00*/ u16 option[7]; + /*0x00*/ u16 option[7]; //0,2,4,6,8,a,c /*0x0E*/ u16 unkE; /*0x10*/ u8 state3; /*0x11*/ u8 state; @@ -110,7 +169,7 @@ static void sub_8088374(void) //sub_8088388 void CB2_OptionsMenuFromStartMenu(void) { - int i; + u8 i; if (gMain.savedCallback == NULL) gMain.savedCallback = CB2_ReturnToStartMenu; @@ -126,10 +185,10 @@ void CB2_OptionsMenuFromStartMenu(void) sOptionsMenu->option[MENUITEM_BUTTONMODE] = gSaveBlock2Ptr->optionsButtonMode; sOptionsMenu->option[MENUITEM_FRAMETYPE] = gSaveBlock2Ptr->optionsWindowFrameType; - for (i = 0; i < MENUITEM_COUNT-2; i++) + for (i = 0; i < MENUITEM_COUNT-1; i++) { - if (sOptionsMenu->option[i] > gUnknown_83CC304[i]-1) - sOptionsMenu->option[i] = 0; + if (sOptionsMenu->option[i] > (gUnknown_83CC304[i])-1) + sOptionsMenu->option[i] = 0; } HelpSystem_SetSomeVariable2(0xD); SetMainCallback2(sub_8088454); @@ -153,55 +212,46 @@ static void sub_8088444(void) //sub_8088454 static void sub_8088454(void) { - int i; - switch (sOptionsMenu->state) + u8 i, state; + state = sOptionsMenu->state; + switch (state) { case 0: sub_8088430(); - sOptionsMenu->state++; break; case 1: sub_8088530(); - sOptionsMenu->state++; break; case 2: sub_80886D4(); - sOptionsMenu->state++; break; case 3: - if (!(sub_80886F0())); + if (sub_80886F0() != TRUE) //silly matching quirk return; - sOptionsMenu->state++; break; case 4: sub_8088BD0(); - sOptionsMenu->state++; break; case 5: sub_8088C0C(); - sOptionsMenu->state++; break; case 6: sub_8088D8C(); - sOptionsMenu->state++; break; case 7: for (i = 0; i < MENUITEM_COUNT; i++) sub_80889A8(i); - sOptionsMenu->state++; break; case 8: sub_8088DE0(sOptionsMenu->unkE); - sOptionsMenu->state++; break; case 9: sub_8088680(); - sOptionsMenu->state++; break; default: sub_8088514(); - return; } + sOptionsMenu->state++; } //sub_8088514 @@ -217,12 +267,12 @@ static void sub_8088530(void) { void * dest = (void *) VRAM; DmaClearLarge16(3, dest, VRAM_SIZE, 0x1000); - + DmaClear32(3, (void *)OAM, OAM_SIZE); DmaClear16(3, (void *)PLTT, PLTT_SIZE); SetGpuReg(REG_OFFSET_DISPCNT, 0); ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, gUnknown_83CC2D8, 3); //3 -> ARRAY_COUNT(gUnknown_83CC2D8) + InitBgsFromTemplates(0, gUnknown_83CC2D8, 3); //3 -> ARRAY_COUNT(gUnknown_83CC2D8) ChangeBgX(0, 0, 0); ChangeBgY(0, 0, 0); ChangeBgX(1, 0, 0); @@ -233,10 +283,10 @@ static void sub_8088530(void) ChangeBgY(3, 0, 0); InitWindows(gUnknown_83CC2B8); DeactivateAllTextPrinters(); - SetGpuReg(REG_OFFSET_BLDCNT, 193); + SetGpuReg(REG_OFFSET_BLDCNT, 0xC1); SetGpuReg(REG_OFFSET_BLDY, 2); SetGpuReg(REG_OFFSET_WININ, 1); - SetGpuReg(REG_OFFSET_WINOUT, 27); + SetGpuReg(REG_OFFSET_WINOUT, 0x27); SetGpuReg(0, 0x3040); ShowBg(0); ShowBg(1); @@ -248,7 +298,7 @@ static void sub_8088680(void) { s32 x; x = 0xE4 - GetStringWidth(0, gUnknown_8419E57, 0); - FillWindowPixelBuffer(WIN_OPTIONS, 0xFF); + FillWindowPixelBuffer(2, 0xFF); AddTextPrinterParameterized3(2, 0, x, 0, gUnknown_83CC360, 0, gUnknown_8419E57); PutWindowTilemap(2); CopyWindowToVram(2, 3); @@ -271,10 +321,10 @@ static bool8 sub_80886F0(void) switch (sOptionsMenu->state2) { case 0: - LoadBgTiles(1, GetUserFrameGraphicsInfo(sOptionsMenu->option[6])->tiles, 0x120, 0x1AA); + LoadBgTiles(1, GetUserFrameGraphicsInfo(sOptionsMenu->option[MENUITEM_FRAMETYPE])->tiles, 0x120, 0x1AA); break; case 1: - LoadPalette(GetUserFrameGraphicsInfo(sOptionsMenu->option[6])->palette, 0x20, 0x20); + LoadPalette(GetUserFrameGraphicsInfo(sOptionsMenu->option[MENUITEM_FRAMETYPE])->palette, 0x20, 0x20); break; case 2: LoadPalette(gUnknown_83CC2E4, 0x10, 0x20); @@ -291,72 +341,228 @@ static bool8 sub_80886F0(void) } -//sub_8088780 + +// I could not get this function to match. GOTO statements weren't even compiling correctly. +#ifdef NONMATCHING static void sub_8088780(u8 taskId) { + u8 v2, v5; + struct OptionsMenu v4; + switch (sOptionsMenu->state3) { case 0: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK); + BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); sub_8088444(); sOptionsMenu->state3++; break; case 2: - if (sub_80BF72C) + if (sub_80BF72C() == TRUE) return; switch (sub_80888C0()) { - case 0: - return; case 1: sOptionsMenu->state3++; break; case 2: - LoadBgTiles(1, GetUserFrameGraphicsInfo(sOptionsMenu->option[6])->tiles, 0x120, 0x1AA); - LoadPalette(GetUserFrameGraphicsInfo(sOptionsMenu->option[6])->palette, 0x20, 0x20); + LoadBgTiles(1, GetUserFrameGraphicsInfo(sOptionsMenu->option[MENUITEM_FRAMETYPE])->tiles, 0x120, 0x1AA); + LoadPalette(GetUserFrameGraphicsInfo(sOptionsMenu->option[MENUITEM_FRAMETYPE])->palette, 0x20, 0x20); sub_80889A8(sOptionsMenu->unkE); - return; + sOptionsMenu->state3++; + break; case 3: sub_8088DE0(sOptionsMenu->unkE); - return; + break; case 4: sub_80889A8(sOptionsMenu->unkE); - return; + sOptionsMenu->state3++; + break; default: return; } case 3: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); sOptionsMenu->state3++; - break; case 1: case 4: if (gPaletteFade.active) return; sOptionsMenu->state3++; - return; case 5: sub_8088B00(taskId); - return; + break; default: return; } } - - +#else +NAKED +static void sub_8088780(u8 taskId) +{ + asm_unified("\tpush {r4,lr}\n" + "\tsub sp, 0x4\n" + "\tlsls r0, 24\n" + "\tlsrs r2, r0, 24\n" + "\tldr r1, _080887A0 @ =sOptionsMenu\n" + "\tldr r0, [r1]\n" + "\tldrb r0, [r0, 0x10]\n" + "\tadds r3, r1, 0\n" + "\tcmp r0, 0x5\n" + "\tbls _08088796\n" + "\tb _080888B6\n" + "_08088796:\n" + "\tlsls r0, 2\n" + "\tldr r1, _080887A4 @ =_080887A8\n" + "\tadds r0, r1\n" + "\tldr r0, [r0]\n" + "\tmov pc, r0\n" + "\t.align 2, 0\n" + "_080887A0: .4byte sOptionsMenu\n" + "_080887A4: .4byte _080887A8\n" + "\t.align 2, 0\n" + "_080887A8:\n" + "\t.4byte _080887C0\n" + "\t.4byte _08088894\n" + "\t.4byte _080887E0\n" + "\t.4byte _08088878\n" + "\t.4byte _08088894\n" + "\t.4byte _080888B0\n" + "_080887C0:\n" + "\tmovs r0, 0x1\n" + "\tnegs r0, r0\n" + "\tmovs r1, 0\n" + "\tstr r1, [sp]\n" + "\tmovs r2, 0x10\n" + "\tmovs r3, 0\n" + "\tbl BeginNormalPaletteFade\n" + "\tbl sub_8088444\n" + "\tldr r0, _080887DC @ =sOptionsMenu\n" + "\tldr r1, [r0]\n" + "\tb _080888A2\n" + "\t.align 2, 0\n" + "_080887DC: .4byte sOptionsMenu\n" + "_080887E0:\n" + "\tbl sub_80BF72C\n" + "\tcmp r0, 0x1\n" + "\tbeq _080888B6\n" + "\tbl sub_80888C0\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tcmp r0, 0x4\n" + "\tbhi _080888B6\n" + "\tlsls r0, 2\n" + "\tldr r1, _08088800 @ =_08088804\n" + "\tadds r0, r1\n" + "\tldr r0, [r0]\n" + "\tmov pc, r0\n" + "\t.align 2, 0\n" + "_08088800: .4byte _08088804\n" + "\t.align 2, 0\n" + "_08088804:\n" + "\t.4byte _080888B6\n" + "\t.4byte _08088818\n" + "\t.4byte _08088824\n" + "\t.4byte _08088858\n" + "\t.4byte _08088868\n" + "_08088818:\n" + "\tldr r0, _08088820 @ =sOptionsMenu\n" + "\tldr r1, [r0]\n" + "\tb _080888A2\n" + "\t.align 2, 0\n" + "_08088820: .4byte sOptionsMenu\n" + "_08088824:\n" + "\tldr r4, _08088854 @ =sOptionsMenu\n" + "\tldr r0, [r4]\n" + "\tldrb r0, [r0, 0xA]\n" + "\tbl GetUserFrameGraphicsInfo\n" + "\tldr r1, [r0]\n" + "\tmovs r2, 0x90\n" + "\tlsls r2, 1\n" + "\tmovs r3, 0xD5\n" + "\tlsls r3, 1\n" + "\tmovs r0, 0x1\n" + "\tbl LoadBgTiles\n" + "\tldr r0, [r4]\n" + "\tldrb r0, [r0, 0xA]\n" + "\tbl GetUserFrameGraphicsInfo\n" + "\tldr r0, [r0, 0x4]\n" + "\tmovs r1, 0x20\n" + "\tmovs r2, 0x20\n" + "\tbl LoadPalette\n" + "\tldr r0, [r4]\n" + "\tb _0808886C\n" + "\t.align 2, 0\n" + "_08088854: .4byte sOptionsMenu\n" + "_08088858:\n" + "\tldr r0, _08088864 @ =sOptionsMenu\n" + "\tldr r0, [r0]\n" + "\tldrh r0, [r0, 0xE]\n" + "\tbl sub_8088DE0\n" + "\tb _080888B6\n" + "\t.align 2, 0\n" + "_08088864: .4byte sOptionsMenu\n" + "_08088868:\n" + "\tldr r0, _08088874 @ =sOptionsMenu\n" + "\tldr r0, [r0]\n" + "_0808886C:\n" + "\tldrb r0, [r0, 0xE]\n" + "\tbl sub_80889A8\n" + "\tb _080888B6\n" + "\t.align 2, 0\n" + "_08088874: .4byte sOptionsMenu\n" + "_08088878:\n" + "\tmovs r0, 0x1\n" + "\tnegs r0, r0\n" + "\tmovs r1, 0\n" + "\tstr r1, [sp]\n" + "\tmovs r2, 0\n" + "\tmovs r3, 0x10\n" + "\tbl BeginNormalPaletteFade\n" + "\tldr r0, _08088890 @ =sOptionsMenu\n" + "\tldr r1, [r0]\n" + "\tb _080888A2\n" + "\t.align 2, 0\n" + "_08088890: .4byte sOptionsMenu\n" + "_08088894:\n" + "\tldr r0, _080888AC @ =gPaletteFade\n" + "\tldrb r1, [r0, 0x7]\n" + "\tmovs r0, 0x80\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbne _080888B6\n" + "\tldr r1, [r3]\n" + "_080888A2:\n" + "\tldrb r0, [r1, 0x10]\n" + "\tadds r0, 0x1\n" + "\tstrb r0, [r1, 0x10]\n" + "\tb _080888B6\n" + "\t.align 2, 0\n" + "_080888AC: .4byte gPaletteFade\n" + "_080888B0:\n" + "\tadds r0, r2, 0\n" + "\tbl sub_8088B00\n" + "_080888B6:\n" + "\tadd sp, 0x4\n" + "\tpop {r4}\n" + "\tpop {r0}\n" + "\tbx r0\n"); +} +#endif + + + //OptionsMenu_ProcessInput static u8 sub_80888C0(void) { - u16 current, selection; + u16 current; + u16* curr; if (gMain.newAndRepeatedKeys & DPAD_RIGHT) { - selection = 2 * sOptionsMenu->unkE; - current = sOptionsMenu->option[selection]; - - if (current == gUnknown_83CC304[selection] - 1) - sOptionsMenu->option[selection] = 0; + current = sOptionsMenu->option[(sOptionsMenu->unkE)]; + if (current == (gUnknown_83CC304[sOptionsMenu->unkE] - 1)) + sOptionsMenu->option[sOptionsMenu->unkE] = 0; else - sOptionsMenu->option[selection] = current + 1; + sOptionsMenu->option[sOptionsMenu->unkE] = current + 1; if (sOptionsMenu->unkE == MENUITEM_FRAMETYPE) return 2; else @@ -364,12 +570,12 @@ static u8 sub_80888C0(void) } else if (gMain.newAndRepeatedKeys & DPAD_LEFT) { - selection = 2*sOptionsMenu->unkE; - current = sOptionsMenu->option[selection]; - if (current == 0) - sOptionsMenu->option[selection] = gUnknown_83CC304[selection] - 1; + curr = &sOptionsMenu->option[sOptionsMenu->unkE]; + if (*curr == 0) + *curr = gUnknown_83CC304[sOptionsMenu->unkE] - 1; else - sOptionsMenu->option[selection] = current - 1; + --*(curr); + if (sOptionsMenu->unkE == MENUITEM_FRAMETYPE) return 2; else @@ -377,20 +583,18 @@ static u8 sub_80888C0(void) } else if (gMain.newAndRepeatedKeys & DPAD_UP) { - selection = sOptionsMenu->unkE; - if (selection == MENUITEM_TEXTSPEED) + if (sOptionsMenu->unkE == MENUITEM_TEXTSPEED) sOptionsMenu->unkE = MENUITEM_CANCEL; else - sOptionsMenu->unkE = selection - 1; + sOptionsMenu->unkE = sOptionsMenu->unkE - 1; return 3; } else if (gMain.newAndRepeatedKeys & DPAD_DOWN) { - selection = sOptionsMenu->unkE; - if (selection == MENUITEM_CANCEL) + if (sOptionsMenu->unkE == MENUITEM_CANCEL) sOptionsMenu->unkE = MENUITEM_TEXTSPEED; else - sOptionsMenu->unkE = selection + 1; + sOptionsMenu->unkE = sOptionsMenu->unkE + 1; return 3; } else if ((gMain.newKeys & B_BUTTON) || (gMain.newKeys & A_BUTTON)) @@ -403,85 +607,22 @@ static u8 sub_80888C0(void) } } -/* -// must match with goto :( -bool sub_80888C0() -{ - int v0; // r0@2 - _WORD *v1; // r3@2 - int v2; // r4@2 - __int16 v3; // r0@3 - int v4; // r3@8 - __int16 v5; // r0@8 - int v7; // r1@14 - signed __int16 v8; // r0@15 - int v9; // r0@18 - - if (gMain.buttons4_new_and_keyrepeat & DPAD_RIGHT) - { - v0 = 2 * *(_WORD *)(sOptionsMenu + 14); - v1 = (_WORD *)(sOptionsMenu + v0); - v2 = *(_WORD *)(sOptionsMenu + v0); - if ( v2 == *(_WORD *)((char *)&sOptionsMenuItemCounts + v0) - 1 ) - v3 = 0; - else - v3 = v2 + 1; - *v1 = v3; - if ( *(_WORD *)(sOptionsMenu + 14) != 5 ) - return 4; - return 2; - } - if ( gMain.buttons4_new_and_keyrepeat & DPAD_LEFT ) - { - v4 = 2 * *(_WORD *)(sOptionsMenu + 14); - v5 = *(_WORD *)(sOptionsMenu + v4); - if ( !*(_WORD *)(sOptionsMenu + v4) ) - v5 = *(_WORD *)((char *)&sOptionsMenuItemCounts + v4); - *(_WORD *)(sOptionsMenu + v4) = v5 - 1; - if ( *(_WORD *)(sOptionsMenu + 14) != 5 ) - return 4; - return 2; - } - if ( gMain.buttons4_new_and_keyrepeat & 0x40 ) - { - v7 = sOptionsMenu; - if ( *(_WORD *)(sOptionsMenu + 14) ) - v8 = *(_WORD *)(sOptionsMenu + 14) - 1; - else - v8 = 6; - goto LABEL_21; - } - if ( gMain.buttons4_new_and_keyrepeat & 0x80 ) - { - v7 = sOptionsMenu; - v9 = *(_WORD *)(sOptionsMenu + 14); - if ( v9 == 6 ) - { - *(_WORD *)(sOptionsMenu + 14) = 0; - return 3; - } - v8 = v9 + 1; -LABEL_21: - *(_WORD *)(v7 + 14) = v8; - return 3; - } - return gMain.buttons3_new_remapped & 2 || gMain.buttons3_new_remapped & 1; -} -*/ - //sub_80889A8 +#ifdef NONMATCHING // could not get it to match perfectly, no idea how they put so many vars on the stack static void sub_80889A8(u8 selection) { u8* dst; u8* str; - u8* v8; + u8* v8; u8 x, y; + u8** col; - x = 0x82; - memcpy(dst, gUnknown_83CC363, 3); + memcpy(&dst, gUnknown_83CC363, 3); y = ((GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) - 1) * selection) + 2; + x = 0x82; FillWindowPixelRect(1, 1, x, y, 0x46, GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT)); + switch (selection) { case MENUITEM_TEXTSPEED: @@ -501,7 +642,7 @@ static void sub_80889A8(u8 selection) break; case MENUITEM_FRAMETYPE: StringCopy(str, gUnknown_8419E52); - ConvertIntToDecimalStringN(v8, sOptionsMenu->option[2*selection] + 1, 1, 2); + ConvertIntToDecimalStringN(v8, sOptionsMenu->option[2*selection] + 1, 1, 2); StringAppendN(str, v8, 3); AddTextPrinterParameterized3(1, 2, x, y, dst, -1, str); break; @@ -511,6 +652,173 @@ static void sub_80889A8(u8 selection) PutWindowTilemap(1); CopyWindowToVram(1, 3); } +#else +NAKED +static void sub_80889A8(u8 selection) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r8\n" + "\tpush {r7}\n" + "\tsub sp, 0x30\n" + "\tlsls r0, 24\n" + "\tlsrs r5, r0, 24\n" + "\tadd r4, sp, 0x2C\n" + "\tldr r1, _08088A08 @ =gUnknown_83CC363\n" + "\tadds r0, r4, 0\n" + "\tmovs r2, 0x3\n" + "\tbl memcpy\n" + "\tmovs r0, 0x82\n" + "\tmov r8, r0\n" + "\tmovs r0, 0x2\n" + "\tmovs r1, 0x1\n" + "\tbl GetFontAttribute\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tsubs r0, 0x1\n" + "\tmuls r0, r5\n" + "\tadds r0, 0x2\n" + "\tlsls r0, 24\n" + "\tlsrs r7, r0, 24\n" + "\tmovs r0, 0x2\n" + "\tmovs r1, 0x1\n" + "\tbl GetFontAttribute\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tmovs r1, 0x46\n" + "\tstr r1, [sp]\n" + "\tstr r0, [sp, 0x4]\n" + "\tmovs r0, 0x1\n" + "\tmovs r1, 0x1\n" + "\tmovs r2, 0x82\n" + "\tadds r3, r7, 0\n" + "\tbl FillWindowPixelRect\n" + "\tadds r6, r4, 0\n" + "\tcmp r5, 0x5\n" + "\tbhi _08088ADE\n" + "\tlsls r0, r5, 2\n" + "\tldr r1, _08088A0C @ =_08088A10\n" + "\tadds r0, r1\n" + "\tldr r0, [r0]\n" + "\tmov pc, r0\n" + "\t.align 2, 0\n" + "_08088A08: .4byte gUnknown_83CC363\n" + "_08088A0C: .4byte _08088A10\n" + "\t.align 2, 0\n" + "_08088A10:\n" + "\t.4byte _08088A28\n" + "\t.4byte _08088A38\n" + "\t.4byte _08088A48\n" + "\t.4byte _08088A58\n" + "\t.4byte _08088A68\n" + "\t.4byte _08088A9C\n" + "_08088A28:\n" + "\tstr r6, [sp]\n" + "\tmovs r0, 0x1\n" + "\tnegs r0, r0\n" + "\tstr r0, [sp, 0x4]\n" + "\tldr r2, _08088A34 @ =gUnknown_83CC330\n" + "\tb _08088A72\n" + "\t.align 2, 0\n" + "_08088A34: .4byte gUnknown_83CC330\n" + "_08088A38:\n" + "\tstr r6, [sp]\n" + "\tmovs r0, 0x1\n" + "\tnegs r0, r0\n" + "\tstr r0, [sp, 0x4]\n" + "\tldr r2, _08088A44 @ =gUnknown_83CC33C\n" + "\tb _08088A72\n" + "\t.align 2, 0\n" + "_08088A44: .4byte gUnknown_83CC33C\n" + "_08088A48:\n" + "\tstr r6, [sp]\n" + "\tmovs r0, 0x1\n" + "\tnegs r0, r0\n" + "\tstr r0, [sp, 0x4]\n" + "\tldr r2, _08088A54 @ =gUnknown_83CC344\n" + "\tb _08088A72\n" + "\t.align 2, 0\n" + "_08088A54: .4byte gUnknown_83CC344\n" + "_08088A58:\n" + "\tstr r6, [sp]\n" + "\tmovs r0, 0x1\n" + "\tnegs r0, r0\n" + "\tstr r0, [sp, 0x4]\n" + "\tldr r2, _08088A64 @ =gUnknown_83CC34C\n" + "\tb _08088A72\n" + "\t.align 2, 0\n" + "_08088A64: .4byte gUnknown_83CC34C\n" + "_08088A68:\n" + "\tstr r6, [sp]\n" + "\tmovs r0, 0x1\n" + "\tnegs r0, r0\n" + "\tstr r0, [sp, 0x4]\n" + "\tldr r2, _08088A94 @ =gUnknown_83CC354\n" + "_08088A72:\n" + "\tldr r0, _08088A98 @ =sOptionsMenu\n" + "\tldr r0, [r0]\n" + "\tlsls r1, r5, 1\n" + "\tadds r0, r1\n" + "\tldrh r0, [r0]\n" + "\tlsls r0, 2\n" + "\tadds r0, r2\n" + "\tldr r0, [r0]\n" + "\tstr r0, [sp, 0x8]\n" + "\tmovs r0, 0x1\n" + "\tmovs r1, 0x2\n" + "\tmov r2, r8\n" + "\tadds r3, r7, 0\n" + "\tbl AddTextPrinterParameterized3\n" + "\tb _08088ADE\n" + "\t.align 2, 0\n" + "_08088A94: .4byte gUnknown_83CC354\n" + "_08088A98: .4byte sOptionsMenu\n" + "_08088A9C:\n" + "\tldr r1, _08088AF8 @ =gUnknown_8419E52\n" + "\tadd r0, sp, 0xC\n" + "\tbl StringCopy\n" + "\tadd r4, sp, 0x20\n" + "\tldr r0, _08088AFC @ =sOptionsMenu\n" + "\tldr r0, [r0]\n" + "\tlsls r1, r5, 1\n" + "\tadds r0, r1\n" + "\tldrh r1, [r0]\n" + "\tadds r1, 0x1\n" + "\tadds r0, r4, 0\n" + "\tmovs r2, 0x1\n" + "\tmovs r3, 0x2\n" + "\tbl ConvertIntToDecimalStringN\n" + "\tadd r0, sp, 0xC\n" + "\tadds r1, r4, 0\n" + "\tmovs r2, 0x3\n" + "\tbl StringAppendN\n" + "\tstr r6, [sp]\n" + "\tmovs r0, 0x1\n" + "\tnegs r0, r0\n" + "\tstr r0, [sp, 0x4]\n" + "\tadd r0, sp, 0xC\n" + "\tstr r0, [sp, 0x8]\n" + "\tmovs r0, 0x1\n" + "\tmovs r1, 0x2\n" + "\tmov r2, r8\n" + "\tadds r3, r7, 0\n" + "\tbl AddTextPrinterParameterized3\n" + "_08088ADE:\n" + "\tmovs r0, 0x1\n" + "\tbl PutWindowTilemap\n" + "\tmovs r0, 0x1\n" + "\tmovs r1, 0x3\n" + "\tbl CopyWindowToVram\n" + "\tadd sp, 0x30\n" + "\tpop {r3}\n" + "\tmov r8, r3\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_08088AF8: .4byte gUnknown_8419E52\n" + "_08088AFC: .4byte sOptionsMenu\n"); +} +#endif //sub_8088B00 @@ -520,20 +828,20 @@ static void sub_8088B00(u8 taskId) SetMainCallback2(gMain.savedCallback); FreeAllWindowBuffers(); - gSaveBlock2Ptr->optionsTextSpeed = sOptionsMenu->option[MENUITEM_TEXTSPEED] & 0x7; - gSaveBlock2Ptr->optionsBattleSceneOff = sOptionsMenu->option[MENUITEM_BATTLESCENE] & 0x1; - gSaveBlock2Ptr->optionsBattleStyle = sOptionsMenu->option[MENUITEM_BATTLESTYLE] & 0x1; - gSaveBlock2Ptr->optionsSound = sOptionsMenu->option[MENUITEM_SOUND] & 0x1; - gSaveBlock2Ptr->optionsButtonMode = sOptionsMenu->option[MENUITEM_BUTTONMODE]; - gSaveBlock2Ptr->optionsWindowFrameType = sOptionsMenu->option[MENUITEM_FRAMETYPE]; - + gSaveBlock2Ptr->optionsTextSpeed = (u8) sOptionsMenu->option[MENUITEM_TEXTSPEED]; + gSaveBlock2Ptr->optionsBattleSceneOff = (u8) sOptionsMenu->option[MENUITEM_BATTLESCENE]; + gSaveBlock2Ptr->optionsBattleStyle = (u8) sOptionsMenu->option[MENUITEM_BATTLESTYLE]; + gSaveBlock2Ptr->optionsSound = sOptionsMenu->option[MENUITEM_SOUND]; + gSaveBlock2Ptr->optionsButtonMode = (u8) sOptionsMenu->option[MENUITEM_BUTTONMODE]; + gSaveBlock2Ptr->optionsWindowFrameType = (u8) sOptionsMenu->option[MENUITEM_FRAMETYPE]; SetPokemonCryStereo(gSaveBlock2Ptr->optionsSound); - Free(sOptionsMenu); + Free(sOptionsMenu); sOptionsMenu = NULL; - DestroyTask(taskId); + DestroyTask(taskId); } - + + //sub_8088BD0 static void sub_8088BD0(void) { @@ -545,24 +853,28 @@ static void sub_8088BD0(void) //sub_8088C0C +//double check static void sub_8088C0C(void) { + u8 h; + h = 2; + FillBgTilemapBufferRect(1, 0x1B3, 1, 2, 1, 1, 3); FillBgTilemapBufferRect(1, 0x1B4, 2, 2, 0x1B, 1, 3); FillBgTilemapBufferRect(1, 0x1B5, 0x1C, 2, 1, 1, 3); - FillBgTilemapBufferRect(1, 0x1B6, 1, 3, 1, 2, 3); - FillBgTilemapBufferRect(1, 0x1B8, 1, 0x1C, 1, 2, 3); - FillBgTilemapBufferRect(1, 0x1B9, 1, 5, 1, 1, 3); + FillBgTilemapBufferRect(1, 0x1B6, 1, 3, 1, h, 3); + FillBgTilemapBufferRect(1, 0x1B8, 1, 0x1C, 1, h, 3); + FillBgTilemapBufferRect(1, 0x1B9, 1, 5, 1, 1, 3); FillBgTilemapBufferRect(1, 0x1BA, 2, 5, 0x1B, 1, 3); FillBgTilemapBufferRect(1, 0x1BB, 0x1C, 5, 1, 1, 3); - FillBgTilemapBufferRect(1, 0x1AA, 1, 6, 1, 1, 2); - FillBgTilemapBufferRect(1, 0x1AB, 2, 6, 0x1A, 1, 2); - FillBgTilemapBufferRect(1, 0x1AC, 0x1C, 6, 1, 1, 2); - FillBgTilemapBufferRect(1, 0x1AD, 1, 7, 1, 0x10, 2); - FillBgTilemapBufferRect(1, 0x1AF, 0x1C, 7, 1, 0x10, 2); - FillBgTilemapBufferRect(1, 0x1B0, 1, 0x13, 1, 1, 2); - FillBgTilemapBufferRect(1, 0x1B1, 2, 0x13, 0x1A, 1, 2); - FillBgTilemapBufferRect(1, 0x1B2, 0x1C, 0x13, 1, 1, 2); + FillBgTilemapBufferRect(1, 0x1AA, 1, 6, 1, 1, h); + FillBgTilemapBufferRect(1, 0x1AB, 2, 6, 0x1A, 1, h); + FillBgTilemapBufferRect(1, 0x1AC, 0x1C, 6, 1, 1, h); + FillBgTilemapBufferRect(1, 0x1AD, 1, 7, 1, 0x10, h); + FillBgTilemapBufferRect(1, 0x1AF, 0x1C, 7, 1, 0x10, h); + FillBgTilemapBufferRect(1, 0x1B0, 1, 0x13, 1, 1, h); + FillBgTilemapBufferRect(1, 0x1B1, 2, 0x13, 0x1A, 1, h); + FillBgTilemapBufferRect(1, 0x1B2, 0x1C, 0x13, 1, 1, h); CopyBgTilemapBufferToVram(1); } @@ -571,20 +883,25 @@ static void sub_8088C0C(void) static void sub_8088D8C(void) { int i; - u8 attr; + u8 y; FillWindowPixelBuffer(1, 0x11); for (i = 0; i < MENUITEM_COUNT; i++) { - attr = (((GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT))*i) + 2) - i; - AddTextPrinterParameterized(1, 2, gUnknown_83CC314[i], 8, attr, 0xFF, 0); + //AddTextPrinterParameterized(1, 2, gUnknown_83CC314[i], 8, (u8) ((i*(GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT))) + 2) - i, 0xFF, 0); + //gets registers right, but an lsl/lsr 0x18 after GetFontAttribute that shouldn't be there + y = i*(GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT)); + y += 2; + y -= i; + AddTextPrinterParameterized(1, 2, gUnknown_83CC314[i], 8, y, 0xFF, 0); + } } //sub_8088DE0 -static void sub_8088DE0(u8 selection) +static void sub_8088DE0(u16 selection) { u8 attr; attr = GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT); -- cgit v1.2.3 From cb5dc21a4e8fecbffcb46e34782d9db3b21ccb13 Mon Sep 17 00:00:00 2001 From: Evan Date: Mon, 18 Nov 2019 21:03:51 -0700 Subject: matching rom --- src/menu_helpers.c | 2 +- src/option_menu.c | 130 ++++++++++++++++++++++++++++------------------------- 2 files changed, 71 insertions(+), 61 deletions(-) (limited to 'src') diff --git a/src/menu_helpers.c b/src/menu_helpers.c index 027280beb..06e7bb08b 100644 --- a/src/menu_helpers.c +++ b/src/menu_helpers.c @@ -125,7 +125,7 @@ bool8 MenuHelpers_LinkSomething(void) return FALSE; } -bool32 sub_80BF72C(void) +bool8 sub_80BF72C(void) { if (!MenuHelpers_LinkSomething()) return FALSE; diff --git a/src/option_menu.c b/src/option_menu.c index c98a2ec7b..c1cde37a6 100644 --- a/src/option_menu.c +++ b/src/option_menu.c @@ -36,11 +36,10 @@ enum enum { WIN_TEXT_OPTION, - WIN_OPTIONS + WIN_OPTIONS, }; - /* -static const struct WindowTemplate gUnknown_83CC2B8[] = //sOptionMenuWinTemplates +static const struct WindowTemplate gUnknown_83CC2B8[] = //3CC2B8 -> sOptionMenuWinTemplates { { .bg = 1, @@ -49,20 +48,29 @@ static const struct WindowTemplate gUnknown_83CC2B8[] = //sOptionMenuWinTempl .width = 26, .height = 2, .paletteNum = 1, - .baseBlock = 2 + .baseBlock = 2, }, { .bg = 0, .tilemapLeft = 2, - .tilemapTop =7, + .tilemapTop = 7, .width = 26, .height = 12, .paletteNum = 1, - .baseBlock = 0x36 + .baseBlock = 0x36, }, - DUMMY_WIN_TEMPLATE + { + .bg = 2, + .tilemapLeft = 0, + .tilemapTop = 0, + .width = 30, + .height = 2, + .paletteNum = 0xF, + .baseBlock = 0x16e, + }, + DUMMY_WIN_TEMPLATE, }; -static const struct BgTemplate gUnknown_83CC2D8[] = //sOptionMenuBgTemplates +static const struct BgTemplate gUnknown_83CC2D8[] = //3CC2D8 -> sOptionMenuBgTemplates { { .bg = 1, @@ -81,12 +89,20 @@ static const struct BgTemplate gUnknown_83CC2D8[] = //sOptionMenuBgTemplates .paletteMode = 0, .priority = 1, .baseTile = 0 - } + }, + { + .bg = 2, + .charBaseIndex = 1, + .mapBaseIndex = 29, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0, + }, }; - - -static const u16 gUnknown_83CC304[MENUITEM_COUNT] = {3, 2, 2, 2, 3, 10, 0}; //sOptionsMenuItemCounts -static const u8* gUnknown_83CC314[MENUITEM_COUNT] = //sOptionMenuItemsNames +static const u16 gUnknown_83CC2E4[] = INCBIN_U16("graphics/misc/unk_83cc2e4.gbapal"); //3CC2E4 +static const u16 gUnknown_83CC304[MENUITEM_COUNT] = {3, 2, 2, 2, 3, 10, 0}; //3CC304 -> sOptionsMenuItemCounts +static const u8* gUnknown_83CC314[MENUITEM_COUNT] = //3CC314 -> sOptionMenuItemsNames { [MENUITEM_TEXTSPEED] = gText_TextSpeed, [MENUITEM_BATTLESCENE] = gText_BattleScene, @@ -96,8 +112,28 @@ static const u8* gUnknown_83CC314[MENUITEM_COUNT] = //sOptionMenuItemsNames [MENUITEM_FRAMETYPE] = gText_Frame, [MENUITEM_CANCEL] = gText_OptionMenuCancel, }; +static const u8* gUnknown_83CC330[] = {gText_TextSpeedSlow, gText_TextSpeedMid, gText_TextSpeedFast}; //3CC330 +static const u8* gUnknown_83CC33C[] = {gText_BattleSceneOn, gText_BattleSceneOff}; //3CC33C +static const u8* gUnknown_83CC344[] = {gText_BattleStyleShift, gText_BattleStyleSet}; //3CC344 +static const u8* gUnknown_83CC34C[] = {gText_SoundMono, gText_SoundStereo}; //3CC34C +static const u8* gUnknown_83CC354[] = {gText_ButtonTypeNormal, gText_ButtonTypeLR, gText_ButtonTypeLEqualsA}; //3CC354 +static const u8 gUnknown_83CC360[] = {0xF, 0x1, 0x2}; //3CC360 +static const u8 gUnknown_83CC363[] = {0, 5, 4, 0, 0}; //3CC363 */ +extern const struct WindowTemplate gUnknown_83CC2B8[3]; +extern const struct BgTemplate gUnknown_83CC2D8[3]; +extern const u16 gUnknown_83CC2E4[0x20]; +extern const u16 gUnknown_83CC304[MENUITEM_COUNT]; +extern const u8* gUnknown_83CC314[MENUITEM_COUNT]; +extern const u8* gUnknown_83CC330[12]; +extern const u8* gUnknown_83CC33C[8]; +extern const u8* gUnknown_83CC344[8]; +extern const u8* gUnknown_83CC34C[8]; +extern const u8* gUnknown_83CC354[12]; +extern const u8 gUnknown_83CC360[3]; +extern const u8 gUnknown_83CC363[3]; + //This file's functions static void sub_808835C(void); static void sub_8088374(void); @@ -118,25 +154,9 @@ static void sub_8088C0C(void); static void sub_8088D8C(void); static void sub_8088DE0(u16 selection); -extern const struct WindowTemplate gUnknown_83CC2B8[3]; -extern const struct BgTemplate gUnknown_83CC2D8[2]; -extern const u16 gUnknown_83CC2E4[0x20]; -extern const u16 gUnknown_83CC304[MENUITEM_COUNT]; //sOptionsMenuItemCounts -extern const u8* gUnknown_83CC314[MENUITEM_COUNT]; -extern const u8 gUnknown_83CC330[0xC]; -extern const u8 gUnknown_83CC33C[0x8]; -extern const u8 gUnknown_83CC344[0x8]; -extern const u8 gUnknown_83CC34C[0x8]; -extern const u8 gUnknown_83CC354[0xC]; -extern const u8 gUnknown_83CC360[0x3]; -extern const u8 gUnknown_83CC363[0x3]; -extern const u8 gUnknown_8419DCC[]; -extern const u8 gUnknown_8419E52[]; -extern const u8 gUnknown_8419E57[]; - struct OptionsMenu { - /*0x00*/ u16 option[7]; //0,2,4,6,8,a,c + /*0x00*/ u16 option[MENUITEM_COUNT]; //0,2,4,6,8,a,c /*0x0E*/ u16 unkE; /*0x10*/ u8 state3; /*0x11*/ u8 state; @@ -147,6 +167,7 @@ struct OptionsMenu EWRAM_DATA struct OptionsMenu *sOptionsMenu = {0}; + //CB2_InitOptionsMenu static void sub_808835C(void) { @@ -272,7 +293,7 @@ static void sub_8088530(void) DmaClear16(3, (void *)PLTT, PLTT_SIZE); SetGpuReg(REG_OFFSET_DISPCNT, 0); ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, gUnknown_83CC2D8, 3); //3 -> ARRAY_COUNT(gUnknown_83CC2D8) + InitBgsFromTemplates(0, gUnknown_83CC2D8, ARRAY_COUNT(gUnknown_83CC2D8)); ChangeBgX(0, 0, 0); ChangeBgY(0, 0, 0); ChangeBgX(1, 0, 0); @@ -297,9 +318,9 @@ static void sub_8088530(void) static void sub_8088680(void) { s32 x; - x = 0xE4 - GetStringWidth(0, gUnknown_8419E57, 0); + x = 0xE4 - GetStringWidth(0, gText_PickSwitchCancel, 0); FillWindowPixelBuffer(2, 0xFF); - AddTextPrinterParameterized3(2, 0, x, 0, gUnknown_83CC360, 0, gUnknown_8419E57); + AddTextPrinterParameterized3(2, 0, x, 0, gUnknown_83CC360, 0, gText_PickSwitchCancel); PutWindowTilemap(2); CopyWindowToVram(2, 3); } @@ -357,7 +378,7 @@ static void sub_8088780(u8 taskId) sOptionsMenu->state3++; break; case 2: - if (sub_80BF72C() == TRUE) + if ((bool32) sub_80BF72C() == TRUE) //cast to bool32 to remove the lsl/lsr 0x18 after func call return; switch (sub_80888C0()) { @@ -547,10 +568,8 @@ static void sub_8088780(u8 taskId) "\tpop {r0}\n" "\tbx r0\n"); } -#endif - - - +#endif + //OptionsMenu_ProcessInput static u8 sub_80888C0(void) { @@ -616,7 +635,6 @@ static void sub_80889A8(u8 selection) u8* str; u8* v8; u8 x, y; - u8** col; memcpy(&dst, gUnknown_83CC363, 3); y = ((GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) - 1) * selection) + 2; @@ -641,7 +659,7 @@ static void sub_80889A8(u8 selection) AddTextPrinterParameterized3(1, 2, x, y, dst, -1, gUnknown_83CC354); break; case MENUITEM_FRAMETYPE: - StringCopy(str, gUnknown_8419E52); + StringCopy(str, gText_FrameType); ConvertIntToDecimalStringN(v8, sOptionsMenu->option[2*selection] + 1, 1, 2); StringAppendN(str, v8, 3); AddTextPrinterParameterized3(1, 2, x, y, dst, -1, str); @@ -773,7 +791,7 @@ static void sub_80889A8(u8 selection) "_08088A94: .4byte gUnknown_83CC354\n" "_08088A98: .4byte sOptionsMenu\n" "_08088A9C:\n" - "\tldr r1, _08088AF8 @ =gUnknown_8419E52\n" + "\tldr r1, _08088AF8 @ =gText_FrameType\n" "\tadd r0, sp, 0xC\n" "\tbl StringCopy\n" "\tadd r4, sp, 0x20\n" @@ -815,7 +833,7 @@ static void sub_80889A8(u8 selection) "\tpop {r0}\n" "\tbx r0\n" "\t.align 2, 0\n" - "_08088AF8: .4byte gUnknown_8419E52\n" + "_08088AF8: .4byte gText_FrameType\n" "_08088AFC: .4byte sOptionsMenu\n"); } #endif @@ -846,14 +864,13 @@ static void sub_8088B00(u8 taskId) static void sub_8088BD0(void) { FillWindowPixelBuffer(0, 0x11); - AddTextPrinterParameterized(WIN_TEXT_OPTION, 2, gUnknown_8419DCC, 8, 1, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(WIN_TEXT_OPTION, 2, gText_MenuOptionOption, 8, 1, TEXT_SPEED_FF, NULL); PutWindowTilemap(0); CopyWindowToVram(0, 3); } //sub_8088C0C -//double check static void sub_8088C0C(void) { u8 h; @@ -863,7 +880,7 @@ static void sub_8088C0C(void) FillBgTilemapBufferRect(1, 0x1B4, 2, 2, 0x1B, 1, 3); FillBgTilemapBufferRect(1, 0x1B5, 0x1C, 2, 1, 1, 3); FillBgTilemapBufferRect(1, 0x1B6, 1, 3, 1, h, 3); - FillBgTilemapBufferRect(1, 0x1B8, 1, 0x1C, 1, h, 3); + FillBgTilemapBufferRect(1, 0x1B8, 0x1C, 3, 1, h, 3); FillBgTilemapBufferRect(1, 0x1B9, 1, 5, 1, 1, 3); FillBgTilemapBufferRect(1, 0x1BA, 2, 5, 0x1B, 1, 3); FillBgTilemapBufferRect(1, 0x1BB, 0x1C, 5, 1, 1, 3); @@ -878,24 +895,15 @@ static void sub_8088C0C(void) CopyBgTilemapBufferToVram(1); } - //sub_8088D8C static void sub_8088D8C(void) { - int i; - u8 y; + u8 i; FillWindowPixelBuffer(1, 0x11); - for (i = 0; i < MENUITEM_COUNT; i++) { - //AddTextPrinterParameterized(1, 2, gUnknown_83CC314[i], 8, (u8) ((i*(GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT))) + 2) - i, 0xFF, 0); - //gets registers right, but an lsl/lsr 0x18 after GetFontAttribute that shouldn't be there - y = i*(GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT)); - y += 2; - y -= i; - AddTextPrinterParameterized(1, 2, gUnknown_83CC314[i], 8, y, 0xFF, 0); - + AddTextPrinterParameterized(1, 2, gUnknown_83CC314[i], 8, (u8) ((i*(GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT))) + 2) - i, 0xFF, 0); } } @@ -903,9 +911,11 @@ static void sub_8088D8C(void) //sub_8088DE0 static void sub_8088DE0(u16 selection) { - u8 attr; - attr = GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT); - SetGpuReg(0x44, ((selection * (attr - 1) + 58) << 8) | (selection * (attr - 1) + 58 + attr)); - SetGpuReg(0x40, 4320); + u16 v1, v2; + + v1 = GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT); + v2 = selection * (v1 - 1) + 0x3A; + SetGpuReg(0x44, (v2 << 8) | (v2 + v1)); + SetGpuReg(0x40, 0x10E0); } -- cgit v1.2.3 From 5bb5d38d225d4ea426b6bf90778a10cb42cb84d4 Mon Sep 17 00:00:00 2001 From: Evan Date: Mon, 18 Nov 2019 21:41:45 -0700 Subject: match baserom --- src/option_menu.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/option_menu.c b/src/option_menu.c index c1cde37a6..54b0e29cb 100644 --- a/src/option_menu.c +++ b/src/option_menu.c @@ -38,8 +38,8 @@ enum WIN_TEXT_OPTION, WIN_OPTIONS, }; -/* -static const struct WindowTemplate gUnknown_83CC2B8[] = //3CC2B8 -> sOptionMenuWinTemplates + +static const struct WindowTemplate gUnknown_83CC2B8[4] = //3CC2B8 -> sOptionMenuWinTemplates { { .bg = 1, @@ -70,7 +70,7 @@ static const struct WindowTemplate gUnknown_83CC2B8[] = //3CC2B8 -> sOptionMe }, DUMMY_WIN_TEMPLATE, }; -static const struct BgTemplate gUnknown_83CC2D8[] = //3CC2D8 -> sOptionMenuBgTemplates +static const struct BgTemplate gUnknown_83CC2D8[3] = //3CC2D8 -> sOptionMenuBgTemplates { { .bg = 1, @@ -79,7 +79,7 @@ static const struct BgTemplate gUnknown_83CC2D8[] = //3CC2D8 -> sOptionMenuBg .screenSize = 0, .paletteMode = 0, .priority = 0, - .baseTile = 0 + .baseTile = 0, }, { .bg = 0, @@ -88,7 +88,7 @@ static const struct BgTemplate gUnknown_83CC2D8[] = //3CC2D8 -> sOptionMenuBg .screenSize = 0, .paletteMode = 0, .priority = 1, - .baseTile = 0 + .baseTile = 0, }, { .bg = 2, @@ -119,9 +119,10 @@ static const u8* gUnknown_83CC34C[] = {gText_SoundMono, gText_SoundStereo}; //3 static const u8* gUnknown_83CC354[] = {gText_ButtonTypeNormal, gText_ButtonTypeLR, gText_ButtonTypeLEqualsA}; //3CC354 static const u8 gUnknown_83CC360[] = {0xF, 0x1, 0x2}; //3CC360 static const u8 gUnknown_83CC363[] = {0, 5, 4, 0, 0}; //3CC363 -*/ -extern const struct WindowTemplate gUnknown_83CC2B8[3]; + +/* +extern const struct WindowTemplate gUnknown_83CC2B8[4]; extern const struct BgTemplate gUnknown_83CC2D8[3]; extern const u16 gUnknown_83CC2E4[0x20]; extern const u16 gUnknown_83CC304[MENUITEM_COUNT]; @@ -133,6 +134,7 @@ extern const u8* gUnknown_83CC34C[8]; extern const u8* gUnknown_83CC354[12]; extern const u8 gUnknown_83CC360[3]; extern const u8 gUnknown_83CC363[3]; +*/ //This file's functions static void sub_808835C(void); -- cgit v1.2.3 From 79b2bc17124bf69ce6486ff7db60798454ba538c Mon Sep 17 00:00:00 2001 From: Evan Date: Tue, 19 Nov 2019 09:46:10 -0700 Subject: update option menu const structs --- src/option_menu.c | 258 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 132 insertions(+), 126 deletions(-) (limited to 'src') diff --git a/src/option_menu.c b/src/option_menu.c index 54b0e29cb..4898ac1cd 100644 --- a/src/option_menu.c +++ b/src/option_menu.c @@ -19,7 +19,6 @@ #include "field_fadetransition.h" #include "gba/m4a_internal.h" - // Menu items enum { @@ -39,7 +38,7 @@ enum WIN_OPTIONS, }; -static const struct WindowTemplate gUnknown_83CC2B8[4] = //3CC2B8 -> sOptionMenuWinTemplates +static const struct WindowTemplate sOptionMenuWinTemplates[] = //3CC2B8 { { .bg = 1, @@ -70,7 +69,7 @@ static const struct WindowTemplate gUnknown_83CC2B8[4] = //3CC2B8 -> sOptionM }, DUMMY_WIN_TEMPLATE, }; -static const struct BgTemplate gUnknown_83CC2D8[3] = //3CC2D8 -> sOptionMenuBgTemplates +static const struct BgTemplate sOptionMenuBgTemplates[] = //3CC2D8 { { .bg = 1, @@ -100,9 +99,9 @@ static const struct BgTemplate gUnknown_83CC2D8[3] = //3CC2D8 -> sOptionMenuB .baseTile = 0, }, }; -static const u16 gUnknown_83CC2E4[] = INCBIN_U16("graphics/misc/unk_83cc2e4.gbapal"); //3CC2E4 -static const u16 gUnknown_83CC304[MENUITEM_COUNT] = {3, 2, 2, 2, 3, 10, 0}; //3CC304 -> sOptionsMenuItemCounts -static const u8* gUnknown_83CC314[MENUITEM_COUNT] = //3CC314 -> sOptionMenuItemsNames +static const u16 sOptionsMenuPalette[] = INCBIN_U16("graphics/misc/unk_83cc2e4.gbapal"); //3CC2E4 +static const u16 sOptionsMenuItemCounts[MENUITEM_COUNT] = {3, 2, 2, 2, 3, 10, 0}; //3CC304 +static const u8 *const sOptionMenuItemsNames[MENUITEM_COUNT] = //3CC314 { [MENUITEM_TEXTSPEED] = gText_TextSpeed, [MENUITEM_BATTLESCENE] = gText_BattleScene, @@ -112,29 +111,36 @@ static const u8* gUnknown_83CC314[MENUITEM_COUNT] = //3CC314 -> sOptionMenuI [MENUITEM_FRAMETYPE] = gText_Frame, [MENUITEM_CANCEL] = gText_OptionMenuCancel, }; -static const u8* gUnknown_83CC330[] = {gText_TextSpeedSlow, gText_TextSpeedMid, gText_TextSpeedFast}; //3CC330 -static const u8* gUnknown_83CC33C[] = {gText_BattleSceneOn, gText_BattleSceneOff}; //3CC33C -static const u8* gUnknown_83CC344[] = {gText_BattleStyleShift, gText_BattleStyleSet}; //3CC344 -static const u8* gUnknown_83CC34C[] = {gText_SoundMono, gText_SoundStereo}; //3CC34C -static const u8* gUnknown_83CC354[] = {gText_ButtonTypeNormal, gText_ButtonTypeLR, gText_ButtonTypeLEqualsA}; //3CC354 -static const u8 gUnknown_83CC360[] = {0xF, 0x1, 0x2}; //3CC360 -static const u8 gUnknown_83CC363[] = {0, 5, 4, 0, 0}; //3CC363 - - -/* -extern const struct WindowTemplate gUnknown_83CC2B8[4]; -extern const struct BgTemplate gUnknown_83CC2D8[3]; -extern const u16 gUnknown_83CC2E4[0x20]; -extern const u16 gUnknown_83CC304[MENUITEM_COUNT]; -extern const u8* gUnknown_83CC314[MENUITEM_COUNT]; -extern const u8* gUnknown_83CC330[12]; -extern const u8* gUnknown_83CC33C[8]; -extern const u8* gUnknown_83CC344[8]; -extern const u8* gUnknown_83CC34C[8]; -extern const u8* gUnknown_83CC354[12]; -extern const u8 gUnknown_83CC360[3]; -extern const u8 gUnknown_83CC363[3]; -*/ +static const u8 *const sTextSpeedOptions[] = //3CC330 +{ + gText_TextSpeedSlow, + gText_TextSpeedMid, + gText_TextSpeedFast +}; +static const u8 *const sBattleSceneOptions[] = //3CC33C +{ + gText_BattleSceneOn, + gText_BattleSceneOff +}; +static const u8 *const sBattleStyleOptions[] = //3CC344 +{ + gText_BattleStyleShift, + gText_BattleStyleSet +}; +static const u8 *const sSoundOptions[] = //3CC34C +{ + gText_SoundMono, + gText_SoundStereo +}; +static const u8 *const sButtonTypeOptions[] = //3CC354 +{ + gText_ButtonTypeNormal, + gText_ButtonTypeLEqualsA, + gText_ButtonTypeLR, +}; +static const u8 sOptionsMenuPickSwitchCancelTextColor[] = {TEXT_DYNAMIC_COLOR_6, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY}; //3CC360 +static const u8 sOptionsMenuTextColor[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_LIGHT_RED, TEXT_COLOR_RED}; //3CC363 + //This file's functions static void sub_808835C(void); @@ -166,7 +172,7 @@ struct OptionsMenu /*0x13*/ u8 unk13; }; -EWRAM_DATA struct OptionsMenu *sOptionsMenu = {0}; +EWRAM_DATA struct OptionsMenu *sOptionsMenuPtr = {0}; @@ -196,22 +202,22 @@ void CB2_OptionsMenuFromStartMenu(void) if (gMain.savedCallback == NULL) gMain.savedCallback = CB2_ReturnToStartMenu; - sOptionsMenu = AllocZeroed(sizeof(struct OptionsMenu)); - sOptionsMenu->state3 = 0; - sOptionsMenu->state2 = 0; - sOptionsMenu->state = 0; - sOptionsMenu->unkE = 0; - sOptionsMenu->option[MENUITEM_TEXTSPEED] = gSaveBlock2Ptr->optionsTextSpeed; - sOptionsMenu->option[MENUITEM_BATTLESCENE] = gSaveBlock2Ptr->optionsBattleSceneOff; - sOptionsMenu->option[MENUITEM_BATTLESTYLE] = gSaveBlock2Ptr->optionsBattleStyle; - sOptionsMenu->option[MENUITEM_SOUND] = gSaveBlock2Ptr->optionsSound; - sOptionsMenu->option[MENUITEM_BUTTONMODE] = gSaveBlock2Ptr->optionsButtonMode; - sOptionsMenu->option[MENUITEM_FRAMETYPE] = gSaveBlock2Ptr->optionsWindowFrameType; + sOptionsMenuPtr = AllocZeroed(sizeof(struct OptionsMenu)); + sOptionsMenuPtr->state3 = 0; + sOptionsMenuPtr->state2 = 0; + sOptionsMenuPtr->state = 0; + sOptionsMenuPtr->unkE = 0; + sOptionsMenuPtr->option[MENUITEM_TEXTSPEED] = gSaveBlock2Ptr->optionsTextSpeed; + sOptionsMenuPtr->option[MENUITEM_BATTLESCENE] = gSaveBlock2Ptr->optionsBattleSceneOff; + sOptionsMenuPtr->option[MENUITEM_BATTLESTYLE] = gSaveBlock2Ptr->optionsBattleStyle; + sOptionsMenuPtr->option[MENUITEM_SOUND] = gSaveBlock2Ptr->optionsSound; + sOptionsMenuPtr->option[MENUITEM_BUTTONMODE] = gSaveBlock2Ptr->optionsButtonMode; + sOptionsMenuPtr->option[MENUITEM_FRAMETYPE] = gSaveBlock2Ptr->optionsWindowFrameType; for (i = 0; i < MENUITEM_COUNT-1; i++) { - if (sOptionsMenu->option[i] > (gUnknown_83CC304[i])-1) - sOptionsMenu->option[i] = 0; + if (sOptionsMenuPtr->option[i] > (sOptionsMenuItemCounts[i])-1) + sOptionsMenuPtr->option[i] = 0; } HelpSystem_SetSomeVariable2(0xD); SetMainCallback2(sub_8088454); @@ -236,7 +242,7 @@ static void sub_8088444(void) static void sub_8088454(void) { u8 i, state; - state = sOptionsMenu->state; + state = sOptionsMenuPtr->state; switch (state) { case 0: @@ -266,7 +272,7 @@ static void sub_8088454(void) sub_80889A8(i); break; case 8: - sub_8088DE0(sOptionsMenu->unkE); + sub_8088DE0(sOptionsMenuPtr->unkE); break; case 9: sub_8088680(); @@ -274,7 +280,7 @@ static void sub_8088454(void) default: sub_8088514(); } - sOptionsMenu->state++; + sOptionsMenuPtr->state++; } //sub_8088514 @@ -295,7 +301,7 @@ static void sub_8088530(void) DmaClear16(3, (void *)PLTT, PLTT_SIZE); SetGpuReg(REG_OFFSET_DISPCNT, 0); ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, gUnknown_83CC2D8, ARRAY_COUNT(gUnknown_83CC2D8)); + InitBgsFromTemplates(0, sOptionMenuBgTemplates, ARRAY_COUNT(sOptionMenuBgTemplates)); ChangeBgX(0, 0, 0); ChangeBgY(0, 0, 0); ChangeBgX(1, 0, 0); @@ -304,7 +310,7 @@ static void sub_8088530(void) ChangeBgY(2, 0, 0); ChangeBgX(3, 0, 0); ChangeBgY(3, 0, 0); - InitWindows(gUnknown_83CC2B8); + InitWindows(sOptionMenuWinTemplates); DeactivateAllTextPrinters(); SetGpuReg(REG_OFFSET_BLDCNT, 0xC1); SetGpuReg(REG_OFFSET_BLDY, 2); @@ -322,7 +328,7 @@ static void sub_8088680(void) s32 x; x = 0xE4 - GetStringWidth(0, gText_PickSwitchCancel, 0); FillWindowPixelBuffer(2, 0xFF); - AddTextPrinterParameterized3(2, 0, x, 0, gUnknown_83CC360, 0, gText_PickSwitchCancel); + AddTextPrinterParameterized3(2, 0, x, 0, sOptionsMenuPickSwitchCancelTextColor, 0, gText_PickSwitchCancel); PutWindowTilemap(2); CopyWindowToVram(2, 3); } @@ -341,16 +347,16 @@ static void sub_80886D4(void) //sub_80886F0 static bool8 sub_80886F0(void) { - switch (sOptionsMenu->state2) + switch (sOptionsMenuPtr->state2) { case 0: - LoadBgTiles(1, GetUserFrameGraphicsInfo(sOptionsMenu->option[MENUITEM_FRAMETYPE])->tiles, 0x120, 0x1AA); + LoadBgTiles(1, GetUserFrameGraphicsInfo(sOptionsMenuPtr->option[MENUITEM_FRAMETYPE])->tiles, 0x120, 0x1AA); break; case 1: - LoadPalette(GetUserFrameGraphicsInfo(sOptionsMenu->option[MENUITEM_FRAMETYPE])->palette, 0x20, 0x20); + LoadPalette(GetUserFrameGraphicsInfo(sOptionsMenuPtr->option[MENUITEM_FRAMETYPE])->palette, 0x20, 0x20); break; case 2: - LoadPalette(gUnknown_83CC2E4, 0x10, 0x20); + LoadPalette(sOptionsMenuPalette, 0x10, 0x20); LoadPalette(stdpal_get(2), 0xF0, 0x20); break; case 3: @@ -359,7 +365,7 @@ static bool8 sub_80886F0(void) default: return TRUE; } - sOptionsMenu->state2++; + sOptionsMenuPtr->state2++; return FALSE; } @@ -372,12 +378,12 @@ static void sub_8088780(u8 taskId) u8 v2, v5; struct OptionsMenu v4; - switch (sOptionsMenu->state3) + switch (sOptionsMenuPtr->state3) { case 0: BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); sub_8088444(); - sOptionsMenu->state3++; + sOptionsMenuPtr->state3++; break; case 2: if ((bool32) sub_80BF72C() == TRUE) //cast to bool32 to remove the lsl/lsr 0x18 after func call @@ -385,32 +391,32 @@ static void sub_8088780(u8 taskId) switch (sub_80888C0()) { case 1: - sOptionsMenu->state3++; + sOptionsMenuPtr->state3++; break; case 2: - LoadBgTiles(1, GetUserFrameGraphicsInfo(sOptionsMenu->option[MENUITEM_FRAMETYPE])->tiles, 0x120, 0x1AA); - LoadPalette(GetUserFrameGraphicsInfo(sOptionsMenu->option[MENUITEM_FRAMETYPE])->palette, 0x20, 0x20); - sub_80889A8(sOptionsMenu->unkE); - sOptionsMenu->state3++; + LoadBgTiles(1, GetUserFrameGraphicsInfo(sOptionsMenuPtr->option[MENUITEM_FRAMETYPE])->tiles, 0x120, 0x1AA); + LoadPalette(GetUserFrameGraphicsInfo(sOptionsMenuPtr->option[MENUITEM_FRAMETYPE])->palette, 0x20, 0x20); + sub_80889A8(sOptionsMenuPtr->unkE); + sOptionsMenuPtr->state3++; break; case 3: - sub_8088DE0(sOptionsMenu->unkE); + sub_8088DE0(sOptionsMenuPtr->unkE); break; case 4: - sub_80889A8(sOptionsMenu->unkE); - sOptionsMenu->state3++; + sub_80889A8(sOptionsMenuPtr->unkE); + sOptionsMenuPtr->state3++; break; default: return; } case 3: BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); - sOptionsMenu->state3++; + sOptionsMenuPtr->state3++; case 1: case 4: if (gPaletteFade.active) return; - sOptionsMenu->state3++; + sOptionsMenuPtr->state3++; case 5: sub_8088B00(taskId); break; @@ -426,7 +432,7 @@ static void sub_8088780(u8 taskId) "\tsub sp, 0x4\n" "\tlsls r0, 24\n" "\tlsrs r2, r0, 24\n" - "\tldr r1, _080887A0 @ =sOptionsMenu\n" + "\tldr r1, _080887A0 @ =sOptionsMenuPtr\n" "\tldr r0, [r1]\n" "\tldrb r0, [r0, 0x10]\n" "\tadds r3, r1, 0\n" @@ -440,7 +446,7 @@ static void sub_8088780(u8 taskId) "\tldr r0, [r0]\n" "\tmov pc, r0\n" "\t.align 2, 0\n" - "_080887A0: .4byte sOptionsMenu\n" + "_080887A0: .4byte sOptionsMenuPtr\n" "_080887A4: .4byte _080887A8\n" "\t.align 2, 0\n" "_080887A8:\n" @@ -459,11 +465,11 @@ static void sub_8088780(u8 taskId) "\tmovs r3, 0\n" "\tbl BeginNormalPaletteFade\n" "\tbl sub_8088444\n" - "\tldr r0, _080887DC @ =sOptionsMenu\n" + "\tldr r0, _080887DC @ =sOptionsMenuPtr\n" "\tldr r1, [r0]\n" "\tb _080888A2\n" "\t.align 2, 0\n" - "_080887DC: .4byte sOptionsMenu\n" + "_080887DC: .4byte sOptionsMenuPtr\n" "_080887E0:\n" "\tbl sub_80BF72C\n" "\tcmp r0, 0x1\n" @@ -488,13 +494,13 @@ static void sub_8088780(u8 taskId) "\t.4byte _08088858\n" "\t.4byte _08088868\n" "_08088818:\n" - "\tldr r0, _08088820 @ =sOptionsMenu\n" + "\tldr r0, _08088820 @ =sOptionsMenuPtr\n" "\tldr r1, [r0]\n" "\tb _080888A2\n" "\t.align 2, 0\n" - "_08088820: .4byte sOptionsMenu\n" + "_08088820: .4byte sOptionsMenuPtr\n" "_08088824:\n" - "\tldr r4, _08088854 @ =sOptionsMenu\n" + "\tldr r4, _08088854 @ =sOptionsMenuPtr\n" "\tldr r0, [r4]\n" "\tldrb r0, [r0, 0xA]\n" "\tbl GetUserFrameGraphicsInfo\n" @@ -515,24 +521,24 @@ static void sub_8088780(u8 taskId) "\tldr r0, [r4]\n" "\tb _0808886C\n" "\t.align 2, 0\n" - "_08088854: .4byte sOptionsMenu\n" + "_08088854: .4byte sOptionsMenuPtr\n" "_08088858:\n" - "\tldr r0, _08088864 @ =sOptionsMenu\n" + "\tldr r0, _08088864 @ =sOptionsMenuPtr\n" "\tldr r0, [r0]\n" "\tldrh r0, [r0, 0xE]\n" "\tbl sub_8088DE0\n" "\tb _080888B6\n" "\t.align 2, 0\n" - "_08088864: .4byte sOptionsMenu\n" + "_08088864: .4byte sOptionsMenuPtr\n" "_08088868:\n" - "\tldr r0, _08088874 @ =sOptionsMenu\n" + "\tldr r0, _08088874 @ =sOptionsMenuPtr\n" "\tldr r0, [r0]\n" "_0808886C:\n" "\tldrb r0, [r0, 0xE]\n" "\tbl sub_80889A8\n" "\tb _080888B6\n" "\t.align 2, 0\n" - "_08088874: .4byte sOptionsMenu\n" + "_08088874: .4byte sOptionsMenuPtr\n" "_08088878:\n" "\tmovs r0, 0x1\n" "\tnegs r0, r0\n" @@ -541,11 +547,11 @@ static void sub_8088780(u8 taskId) "\tmovs r2, 0\n" "\tmovs r3, 0x10\n" "\tbl BeginNormalPaletteFade\n" - "\tldr r0, _08088890 @ =sOptionsMenu\n" + "\tldr r0, _08088890 @ =sOptionsMenuPtr\n" "\tldr r1, [r0]\n" "\tb _080888A2\n" "\t.align 2, 0\n" - "_08088890: .4byte sOptionsMenu\n" + "_08088890: .4byte sOptionsMenuPtr\n" "_08088894:\n" "\tldr r0, _080888AC @ =gPaletteFade\n" "\tldrb r1, [r0, 0x7]\n" @@ -579,43 +585,43 @@ static u8 sub_80888C0(void) u16* curr; if (gMain.newAndRepeatedKeys & DPAD_RIGHT) { - current = sOptionsMenu->option[(sOptionsMenu->unkE)]; - if (current == (gUnknown_83CC304[sOptionsMenu->unkE] - 1)) - sOptionsMenu->option[sOptionsMenu->unkE] = 0; + current = sOptionsMenuPtr->option[(sOptionsMenuPtr->unkE)]; + if (current == (sOptionsMenuItemCounts[sOptionsMenuPtr->unkE] - 1)) + sOptionsMenuPtr->option[sOptionsMenuPtr->unkE] = 0; else - sOptionsMenu->option[sOptionsMenu->unkE] = current + 1; - if (sOptionsMenu->unkE == MENUITEM_FRAMETYPE) + sOptionsMenuPtr->option[sOptionsMenuPtr->unkE] = current + 1; + if (sOptionsMenuPtr->unkE == MENUITEM_FRAMETYPE) return 2; else return 4; } else if (gMain.newAndRepeatedKeys & DPAD_LEFT) { - curr = &sOptionsMenu->option[sOptionsMenu->unkE]; + curr = &sOptionsMenuPtr->option[sOptionsMenuPtr->unkE]; if (*curr == 0) - *curr = gUnknown_83CC304[sOptionsMenu->unkE] - 1; + *curr = sOptionsMenuItemCounts[sOptionsMenuPtr->unkE] - 1; else --*(curr); - if (sOptionsMenu->unkE == MENUITEM_FRAMETYPE) + if (sOptionsMenuPtr->unkE == MENUITEM_FRAMETYPE) return 2; else return 4; } else if (gMain.newAndRepeatedKeys & DPAD_UP) { - if (sOptionsMenu->unkE == MENUITEM_TEXTSPEED) - sOptionsMenu->unkE = MENUITEM_CANCEL; + if (sOptionsMenuPtr->unkE == MENUITEM_TEXTSPEED) + sOptionsMenuPtr->unkE = MENUITEM_CANCEL; else - sOptionsMenu->unkE = sOptionsMenu->unkE - 1; + sOptionsMenuPtr->unkE = sOptionsMenuPtr->unkE - 1; return 3; } else if (gMain.newAndRepeatedKeys & DPAD_DOWN) { - if (sOptionsMenu->unkE == MENUITEM_CANCEL) - sOptionsMenu->unkE = MENUITEM_TEXTSPEED; + if (sOptionsMenuPtr->unkE == MENUITEM_CANCEL) + sOptionsMenuPtr->unkE = MENUITEM_TEXTSPEED; else - sOptionsMenu->unkE = sOptionsMenu->unkE + 1; + sOptionsMenuPtr->unkE = sOptionsMenuPtr->unkE + 1; return 3; } else if ((gMain.newKeys & B_BUTTON) || (gMain.newKeys & A_BUTTON)) @@ -638,7 +644,7 @@ static void sub_80889A8(u8 selection) u8* v8; u8 x, y; - memcpy(&dst, gUnknown_83CC363, 3); + memcpy(&dst, sOptionsMenuTextColor, 3); y = ((GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT) - 1) * selection) + 2; x = 0x82; FillWindowPixelRect(1, 1, x, y, 0x46, GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT)); @@ -646,23 +652,23 @@ static void sub_80889A8(u8 selection) switch (selection) { case MENUITEM_TEXTSPEED: - AddTextPrinterParameterized3(1, 2, x, y, dst, -1, gUnknown_83CC330); + AddTextPrinterParameterized3(1, 2, x, y, dst, -1, sTextSpeedOptions); break; case MENUITEM_BATTLESCENE: - AddTextPrinterParameterized3(1, 2, x, y, dst, -1, gUnknown_83CC33C); + AddTextPrinterParameterized3(1, 2, x, y, dst, -1, sBattleSceneOptions); break; case MENUITEM_BATTLESTYLE: - AddTextPrinterParameterized3(1, 2, x, y, dst, -1, gUnknown_83CC344); + AddTextPrinterParameterized3(1, 2, x, y, dst, -1, sBattleStyleOptions); break; case MENUITEM_SOUND: - AddTextPrinterParameterized3(1, 2, x, y, dst, -1, gUnknown_83CC34C); + AddTextPrinterParameterized3(1, 2, x, y, dst, -1, sSoundOptions); break; case MENUITEM_BUTTONMODE: - AddTextPrinterParameterized3(1, 2, x, y, dst, -1, gUnknown_83CC354); + AddTextPrinterParameterized3(1, 2, x, y, dst, -1, sButtonTypeOptions); break; case MENUITEM_FRAMETYPE: StringCopy(str, gText_FrameType); - ConvertIntToDecimalStringN(v8, sOptionsMenu->option[2*selection] + 1, 1, 2); + ConvertIntToDecimalStringN(v8, sOptionsMenuPtr->option[2*selection] + 1, 1, 2); StringAppendN(str, v8, 3); AddTextPrinterParameterized3(1, 2, x, y, dst, -1, str); break; @@ -683,7 +689,7 @@ static void sub_80889A8(u8 selection) "\tlsls r0, 24\n" "\tlsrs r5, r0, 24\n" "\tadd r4, sp, 0x2C\n" - "\tldr r1, _08088A08 @ =gUnknown_83CC363\n" + "\tldr r1, _08088A08 @ =sOptionsMenuTextColor\n" "\tadds r0, r4, 0\n" "\tmovs r2, 0x3\n" "\tbl memcpy\n" @@ -721,7 +727,7 @@ static void sub_80889A8(u8 selection) "\tldr r0, [r0]\n" "\tmov pc, r0\n" "\t.align 2, 0\n" - "_08088A08: .4byte gUnknown_83CC363\n" + "_08088A08: .4byte sOptionsMenuTextColor\n" "_08088A0C: .4byte _08088A10\n" "\t.align 2, 0\n" "_08088A10:\n" @@ -736,45 +742,45 @@ static void sub_80889A8(u8 selection) "\tmovs r0, 0x1\n" "\tnegs r0, r0\n" "\tstr r0, [sp, 0x4]\n" - "\tldr r2, _08088A34 @ =gUnknown_83CC330\n" + "\tldr r2, _08088A34 @ =sTextSpeedOptions\n" "\tb _08088A72\n" "\t.align 2, 0\n" - "_08088A34: .4byte gUnknown_83CC330\n" + "_08088A34: .4byte sTextSpeedOptions\n" "_08088A38:\n" "\tstr r6, [sp]\n" "\tmovs r0, 0x1\n" "\tnegs r0, r0\n" "\tstr r0, [sp, 0x4]\n" - "\tldr r2, _08088A44 @ =gUnknown_83CC33C\n" + "\tldr r2, _08088A44 @ =sBattleSceneOptions\n" "\tb _08088A72\n" "\t.align 2, 0\n" - "_08088A44: .4byte gUnknown_83CC33C\n" + "_08088A44: .4byte sBattleSceneOptions\n" "_08088A48:\n" "\tstr r6, [sp]\n" "\tmovs r0, 0x1\n" "\tnegs r0, r0\n" "\tstr r0, [sp, 0x4]\n" - "\tldr r2, _08088A54 @ =gUnknown_83CC344\n" + "\tldr r2, _08088A54 @ =sBattleStyleOptions\n" "\tb _08088A72\n" "\t.align 2, 0\n" - "_08088A54: .4byte gUnknown_83CC344\n" + "_08088A54: .4byte sBattleStyleOptions\n" "_08088A58:\n" "\tstr r6, [sp]\n" "\tmovs r0, 0x1\n" "\tnegs r0, r0\n" "\tstr r0, [sp, 0x4]\n" - "\tldr r2, _08088A64 @ =gUnknown_83CC34C\n" + "\tldr r2, _08088A64 @ =sSoundOptions\n" "\tb _08088A72\n" "\t.align 2, 0\n" - "_08088A64: .4byte gUnknown_83CC34C\n" + "_08088A64: .4byte sSoundOptions\n" "_08088A68:\n" "\tstr r6, [sp]\n" "\tmovs r0, 0x1\n" "\tnegs r0, r0\n" "\tstr r0, [sp, 0x4]\n" - "\tldr r2, _08088A94 @ =gUnknown_83CC354\n" + "\tldr r2, _08088A94 @ =sButtonTypeOptions\n" "_08088A72:\n" - "\tldr r0, _08088A98 @ =sOptionsMenu\n" + "\tldr r0, _08088A98 @ =sOptionsMenuPtr\n" "\tldr r0, [r0]\n" "\tlsls r1, r5, 1\n" "\tadds r0, r1\n" @@ -790,14 +796,14 @@ static void sub_80889A8(u8 selection) "\tbl AddTextPrinterParameterized3\n" "\tb _08088ADE\n" "\t.align 2, 0\n" - "_08088A94: .4byte gUnknown_83CC354\n" - "_08088A98: .4byte sOptionsMenu\n" + "_08088A94: .4byte sButtonTypeOptions\n" + "_08088A98: .4byte sOptionsMenuPtr\n" "_08088A9C:\n" "\tldr r1, _08088AF8 @ =gText_FrameType\n" "\tadd r0, sp, 0xC\n" "\tbl StringCopy\n" "\tadd r4, sp, 0x20\n" - "\tldr r0, _08088AFC @ =sOptionsMenu\n" + "\tldr r0, _08088AFC @ =sOptionsMenuPtr\n" "\tldr r0, [r0]\n" "\tlsls r1, r5, 1\n" "\tadds r0, r1\n" @@ -836,7 +842,7 @@ static void sub_80889A8(u8 selection) "\tbx r0\n" "\t.align 2, 0\n" "_08088AF8: .4byte gText_FrameType\n" - "_08088AFC: .4byte sOptionsMenu\n"); + "_08088AFC: .4byte sOptionsMenuPtr\n"); } #endif @@ -848,15 +854,15 @@ static void sub_8088B00(u8 taskId) SetMainCallback2(gMain.savedCallback); FreeAllWindowBuffers(); - gSaveBlock2Ptr->optionsTextSpeed = (u8) sOptionsMenu->option[MENUITEM_TEXTSPEED]; - gSaveBlock2Ptr->optionsBattleSceneOff = (u8) sOptionsMenu->option[MENUITEM_BATTLESCENE]; - gSaveBlock2Ptr->optionsBattleStyle = (u8) sOptionsMenu->option[MENUITEM_BATTLESTYLE]; - gSaveBlock2Ptr->optionsSound = sOptionsMenu->option[MENUITEM_SOUND]; - gSaveBlock2Ptr->optionsButtonMode = (u8) sOptionsMenu->option[MENUITEM_BUTTONMODE]; - gSaveBlock2Ptr->optionsWindowFrameType = (u8) sOptionsMenu->option[MENUITEM_FRAMETYPE]; + gSaveBlock2Ptr->optionsTextSpeed = (u8) sOptionsMenuPtr->option[MENUITEM_TEXTSPEED]; + gSaveBlock2Ptr->optionsBattleSceneOff = (u8) sOptionsMenuPtr->option[MENUITEM_BATTLESCENE]; + gSaveBlock2Ptr->optionsBattleStyle = (u8) sOptionsMenuPtr->option[MENUITEM_BATTLESTYLE]; + gSaveBlock2Ptr->optionsSound = sOptionsMenuPtr->option[MENUITEM_SOUND]; + gSaveBlock2Ptr->optionsButtonMode = (u8) sOptionsMenuPtr->option[MENUITEM_BUTTONMODE]; + gSaveBlock2Ptr->optionsWindowFrameType = (u8) sOptionsMenuPtr->option[MENUITEM_FRAMETYPE]; SetPokemonCryStereo(gSaveBlock2Ptr->optionsSound); - Free(sOptionsMenu); - sOptionsMenu = NULL; + Free(sOptionsMenuPtr); + sOptionsMenuPtr = NULL; DestroyTask(taskId); } @@ -905,7 +911,7 @@ static void sub_8088D8C(void) FillWindowPixelBuffer(1, 0x11); for (i = 0; i < MENUITEM_COUNT; i++) { - AddTextPrinterParameterized(1, 2, gUnknown_83CC314[i], 8, (u8) ((i*(GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT))) + 2) - i, 0xFF, 0); + AddTextPrinterParameterized(1, 2, sOptionMenuItemsNames[i], 8, (u8) ((i*(GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT))) + 2) - i, 0xFF, 0); } } -- cgit v1.2.3 From a50adf3a1bc7c63b53caea72d23d61899e086eac Mon Sep 17 00:00:00 2001 From: Evan Date: Tue, 19 Nov 2019 09:53:23 -0700 Subject: fix formatting on option menu --- src/option_menu.c | 70 +++++++++++++++++++++++++++---------------------------- 1 file changed, 35 insertions(+), 35 deletions(-) (limited to 'src') diff --git a/src/option_menu.c b/src/option_menu.c index 4898ac1cd..8450633f5 100644 --- a/src/option_menu.c +++ b/src/option_menu.c @@ -58,15 +58,15 @@ static const struct WindowTemplate sOptionMenuWinTemplates[] = //3CC2B8 .paletteNum = 1, .baseBlock = 0x36, }, - { - .bg = 2, - .tilemapLeft = 0, - .tilemapTop = 0, - .width = 30, - .height = 2, - .paletteNum = 0xF, - .baseBlock = 0x16e, - }, + { + .bg = 2, + .tilemapLeft = 0, + .tilemapTop = 0, + .width = 30, + .height = 2, + .paletteNum = 0xF, + .baseBlock = 0x16e, + }, DUMMY_WIN_TEMPLATE, }; static const struct BgTemplate sOptionMenuBgTemplates[] = //3CC2D8 @@ -90,16 +90,16 @@ static const struct BgTemplate sOptionMenuBgTemplates[] = //3CC2D8 .baseTile = 0, }, { - .bg = 2, - .charBaseIndex = 1, - .mapBaseIndex = 29, - .screenSize = 0, - .paletteMode = 0, - .priority = 2, - .baseTile = 0, + .bg = 2, + .charBaseIndex = 1, + .mapBaseIndex = 29, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0, }, }; -static const u16 sOptionsMenuPalette[] = INCBIN_U16("graphics/misc/unk_83cc2e4.gbapal"); //3CC2E4 +static const u16 sOptionsMenuPalette[] = INCBIN_U16("graphics/misc/unk_83cc2e4.gbapal"); //3CC2E4 static const u16 sOptionsMenuItemCounts[MENUITEM_COUNT] = {3, 2, 2, 2, 3, 10, 0}; //3CC304 static const u8 *const sOptionMenuItemsNames[MENUITEM_COUNT] = //3CC314 { @@ -111,35 +111,35 @@ static const u8 *const sOptionMenuItemsNames[MENUITEM_COUNT] = //3CC314 [MENUITEM_FRAMETYPE] = gText_Frame, [MENUITEM_CANCEL] = gText_OptionMenuCancel, }; -static const u8 *const sTextSpeedOptions[] = //3CC330 +static const u8 *const sTextSpeedOptions[] = //3CC330 { - gText_TextSpeedSlow, - gText_TextSpeedMid, - gText_TextSpeedFast + gText_TextSpeedSlow, + gText_TextSpeedMid, + gText_TextSpeedFast }; -static const u8 *const sBattleSceneOptions[] = //3CC33C +static const u8 *const sBattleSceneOptions[] = //3CC33C { - gText_BattleSceneOn, - gText_BattleSceneOff + gText_BattleSceneOn, + gText_BattleSceneOff }; static const u8 *const sBattleStyleOptions[] = //3CC344 { - gText_BattleStyleShift, - gText_BattleStyleSet + gText_BattleStyleShift, + gText_BattleStyleSet }; -static const u8 *const sSoundOptions[] = //3CC34C +static const u8 *const sSoundOptions[] = //3CC34C { - gText_SoundMono, - gText_SoundStereo + gText_SoundMono, + gText_SoundStereo }; -static const u8 *const sButtonTypeOptions[] = //3CC354 +static const u8 *const sButtonTypeOptions[] = //3CC354 { - gText_ButtonTypeNormal, - gText_ButtonTypeLEqualsA, - gText_ButtonTypeLR, + gText_ButtonTypeNormal, + gText_ButtonTypeLEqualsA, + gText_ButtonTypeLR, }; -static const u8 sOptionsMenuPickSwitchCancelTextColor[] = {TEXT_DYNAMIC_COLOR_6, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY}; //3CC360 -static const u8 sOptionsMenuTextColor[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_LIGHT_RED, TEXT_COLOR_RED}; //3CC363 +static const u8 sOptionsMenuPickSwitchCancelTextColor[] = {TEXT_DYNAMIC_COLOR_6, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY}; //3CC360 +static const u8 sOptionsMenuTextColor[] = {TEXT_COLOR_TRANSPARENT, TEXT_COLOR_LIGHT_RED, TEXT_COLOR_RED}; //3CC363 //This file's functions -- cgit v1.2.3 From 3bf1f5e65d41c19fe8a5f67e3c42a709aa86c4e4 Mon Sep 17 00:00:00 2001 From: Evan Date: Tue, 19 Nov 2019 12:57:11 -0700 Subject: start shop.c --- src/shop.c | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 src/shop.c (limited to 'src') diff --git a/src/shop.c b/src/shop.c new file mode 100644 index 000000000..25b1f2a74 --- /dev/null +++ b/src/shop.c @@ -0,0 +1,68 @@ +#include "global.h" +#include "menu.h" +#include "new_menu_helpers.h" +#include "window.h" +#include "field_specials.h" +#include "task.h" + + + +struct ShopData { + /*0x00*/ void (*callback)(void); + /*0x04*/ const u16 *itemList; + /*0x08*/ u32 itemPrice; + /*0x0C*/ u16 cursorPos; + /*0x0E*/ u16 _; + /*0x10*/ u16 itemCount; + /*0x12*/ u16 field12; + /*0x14*/ u16 field14; + /*0x16*/ u16 martType:4; // 0x1 if tm list + u16 unk16_1:5; + u16 unk16_2:7; + //INCOMPLETE +}; + + +// external defines +extern const struct WindowTemplate gUnknown_83DF0BC[]; //sShopMenuWindowTemplates +extern const struct MenuAction gUnknown_83DF09C[]; //sShopMenuActions_BuySellQuit + +extern u8 sub_809AB7C(u8 a); +extern void sub_809AC10(u8 taskId); + +EWRAM_DATA struct ShopData gShopData = {0}; +EWRAM_DATA u8 gUnknown_2039950 = 0; + + + +u8 sub_809AAB0(u8 a0) +{ + u32 v1, v2; + + //gShopData.martType = (sub_809AB7C(a0) & 0xF) | ((u8) gShopData.martType & 0xF0); + gShopData.martType = sub_809AB7C(a0); + gShopData.cursorPos = 0; + if (!(ContextNpcGetTextColor())) + { + v1 = (u16) gShopData.unk16_1; + v1 = ~(0x1F0); + //v1 = (s16) gShopData.unk16_1 & 0xFFFFFE0F; + //v1 = gShopData.unk16_1 & (u32) 0xFFFFFE0F; + //v1 &= 0xFE0F; + v2 = 0x40; + } + else + { + v1 = (u16) gShopData.unk16_1; + v1 = ~(0x1F0); + v2 = 0x50; + } + gShopData.martType = v1 | v2; + gUnknown_2039950 = AddWindow(gUnknown_83DF0BC); //sShop + SetStdWindowBorderStyle(gUnknown_2039950, 0); + PrintTextArray(gUnknown_2039950, 2, GetMenuCursorDimensionByFont(2, 0), 2, 16, 3, gUnknown_83DF09C); + Menu_InitCursor(gUnknown_2039950, 2, 0, 2, 16, 3, 0); + PutWindowTilemap(gUnknown_2039950); + CopyWindowToVram(gUnknown_2039950, 1); + return CreateTask(sub_809AC10, 8); +} -- cgit v1.2.3 From e06da7f066a75bbbcdb4000e96de7af83611ff9b Mon Sep 17 00:00:00 2001 From: Evan Date: Tue, 19 Nov 2019 17:36:21 -0700 Subject: start new func --- src/shop.c | 145 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 140 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/shop.c b/src/shop.c index 25b1f2a74..858686743 100644 --- a/src/shop.c +++ b/src/shop.c @@ -7,6 +7,7 @@ + struct ShopData { /*0x00*/ void (*callback)(void); /*0x04*/ const u16 *itemList; @@ -22,6 +23,12 @@ struct ShopData { //INCOMPLETE }; +EWRAM_DATA struct ShopData gShopData = {0}; +EWRAM_DATA u8 gUnknown_2039950 = 0; + +//Functions +static u8 sub_809AB7C(u8 a0); + // external defines extern const struct WindowTemplate gUnknown_83DF0BC[]; //sShopMenuWindowTemplates @@ -30,16 +37,17 @@ extern const struct MenuAction gUnknown_83DF09C[]; //sShopMenuActions_BuySellQui extern u8 sub_809AB7C(u8 a); extern void sub_809AC10(u8 taskId); -EWRAM_DATA struct ShopData gShopData = {0}; -EWRAM_DATA u8 gUnknown_2039950 = 0; + + +#ifdef NONMATCHING u8 sub_809AAB0(u8 a0) { u32 v1, v2; - - //gShopData.martType = (sub_809AB7C(a0) & 0xF) | ((u8) gShopData.martType & 0xF0); + u8* v3; + gShopData.martType = sub_809AB7C(a0); gShopData.cursorPos = 0; if (!(ContextNpcGetTextColor())) @@ -57,7 +65,8 @@ u8 sub_809AAB0(u8 a0) v1 = ~(0x1F0); v2 = 0x50; } - gShopData.martType = v1 | v2; + gShopData.martType = (u16) (v1 | v2); + gUnknown_2039950 = AddWindow(gUnknown_83DF0BC); //sShop SetStdWindowBorderStyle(gUnknown_2039950, 0); PrintTextArray(gUnknown_2039950, 2, GetMenuCursorDimensionByFont(2, 0), 2, 16, 3, gUnknown_83DF09C); @@ -66,3 +75,129 @@ u8 sub_809AAB0(u8 a0) CopyWindowToVram(gUnknown_2039950, 1); return CreateTask(sub_809AC10, 8); } +#else +NAKED +u8 sub_809AAB0(u8 a0) +{ + asm_unified("\tpush {r4-r6,lr}\n" + "\tsub sp, 0xC\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tbl sub_809AB7C\n" + "\tldr r4, _0809AAE8 @ =gUnknown_2039934\n" + "\tmovs r1, 0xF\n" + "\tands r1, r0\n" + "\tldrb r2, [r4, 0x16]\n" + "\tmovs r0, 0x10\n" + "\tnegs r0, r0\n" + "\tands r0, r2\n" + "\torrs r0, r1\n" + "\tstrb r0, [r4, 0x16]\n" + "\tmovs r0, 0\n" + "\tstrh r0, [r4, 0xC]\n" + "\tbl ContextNpcGetTextColor\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbne _0809AAF0\n" + "\tldrh r0, [r4, 0x16]\n" + "\tldr r1, _0809AAEC @ =0xfffffe0f\n" + "\tands r1, r0\n" + "\tmovs r0, 0x40\n" + "\tb _0809AAF8\n" + "\t.align 2, 0\n" + "_0809AAE8: .4byte gUnknown_2039934\n" + "_0809AAEC: .4byte 0xfffffe0f\n" + "_0809AAF0:\n" + "\tldrh r0, [r4, 0x16]\n" + "\tldr r1, _0809AB68 @ =0xfffffe0f\n" + "\tands r1, r0\n" + "\tmovs r0, 0x50\n" + "_0809AAF8:\n" + "\torrs r1, r0\n" + "\tstrh r1, [r4, 0x16]\n" + "\tldr r4, _0809AB6C @ =gUnknown_2039950\n" + "\tldr r0, _0809AB70 @ =gUnknown_83DF0BC\n" + "\tbl AddWindow\n" + "\tstrb r0, [r4]\n" + "\tldrb r0, [r4]\n" + "\tmovs r1, 0\n" + "\tbl SetStdWindowBorderStyle\n" + "\tmovs r0, 0x2\n" + "\tmovs r1, 0\n" + "\tbl GetMenuCursorDimensionByFont\n" + "\tadds r2, r0, 0\n" + "\tlsls r2, 24\n" + "\tlsrs r2, 24\n" + "\tldrb r0, [r4]\n" + "\tmovs r6, 0x10\n" + "\tstr r6, [sp]\n" + "\tmovs r5, 0x3\n" + "\tstr r5, [sp, 0x4]\n" + "\tldr r1, _0809AB74 @ =gUnknown_83DF09C\n" + "\tstr r1, [sp, 0x8]\n" + "\tmovs r1, 0x2\n" + "\tmovs r3, 0x2\n" + "\tbl PrintTextArray\n" + "\tldrb r0, [r4]\n" + "\tstr r6, [sp]\n" + "\tstr r5, [sp, 0x4]\n" + "\tmovs r1, 0\n" + "\tstr r1, [sp, 0x8]\n" + "\tmovs r1, 0x2\n" + "\tmovs r2, 0\n" + "\tmovs r3, 0x2\n" + "\tbl Menu_InitCursor\n" + "\tldrb r0, [r4]\n" + "\tbl PutWindowTilemap\n" + "\tldrb r0, [r4]\n" + "\tmovs r1, 0x1\n" + "\tbl CopyWindowToVram\n" + "\tldr r0, _0809AB78 @ =sub_809AC10\n" + "\tmovs r1, 0x8\n" + "\tbl CreateTask\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tadd sp, 0xC\n" + "\tpop {r4-r6}\n" + "\tpop {r1}\n" + "\tbx r1\n" + "\t.align 2, 0\n" + "_0809AB68: .4byte 0xfffffe0f\n" + "_0809AB6C: .4byte gUnknown_2039950\n" + "_0809AB70: .4byte gUnknown_83DF0BC\n" + "_0809AB74: .4byte gUnknown_83DF09C\n" + "_0809AB78: .4byte sub_809AC10\n"); +} +#endif + +static u8 sub_809AB7C(u8 a0) +{ + u16 pocket; + + if (a0 != 0) + return a0; + else if (a0 >= gShopData.itemCount) + return FALSE; + else if (gShopData.itemList[0] == 0) + return FALSE; + else + { + while (ItemId_GetPocket(gShopData.itemCount[i]) != 0) + { + if (ItemId_GetPocket(gShopData.itemCount[i] == POCKET_TM_CASE) + return 1; + + } + } + + + +} + + + + + + + + -- cgit v1.2.3 From 9e0db07ce9172b5d9da5c7e8aa98ddc809b3c0f1 Mon Sep 17 00:00:00 2001 From: Evan Date: Wed, 20 Nov 2019 15:06:09 -0700 Subject: refine ShopData --- src/shop.c | 140 +++++++------------------------------------------------------ 1 file changed, 14 insertions(+), 126 deletions(-) (limited to 'src') diff --git a/src/shop.c b/src/shop.c index 858686743..6ec6d0467 100644 --- a/src/shop.c +++ b/src/shop.c @@ -5,7 +5,10 @@ #include "field_specials.h" #include "task.h" - +// enums +// RAM symbols +// Function Declarations +// Data Definitions struct ShopData { @@ -18,16 +21,16 @@ struct ShopData { /*0x12*/ u16 field12; /*0x14*/ u16 field14; /*0x16*/ u16 martType:4; // 0x1 if tm list - u16 unk16_1:5; - u16 unk16_2:7; + u16 unk16_4:5; + u16 unk16_9:7; //INCOMPLETE }; EWRAM_DATA struct ShopData gShopData = {0}; EWRAM_DATA u8 gUnknown_2039950 = 0; -//Functions -static u8 sub_809AB7C(u8 a0); +//Function Declarations +//static u8 sub_809AB7C(u8 a0); // external defines @@ -38,34 +41,15 @@ extern u8 sub_809AB7C(u8 a); extern void sub_809AC10(u8 taskId); - - - - -#ifdef NONMATCHING +// Functions u8 sub_809AAB0(u8 a0) { - u32 v1, v2; - u8* v3; - - gShopData.martType = sub_809AB7C(a0); + gShopData.martType = sub_809AB7C(a0) & 0xF; gShopData.cursorPos = 0; if (!(ContextNpcGetTextColor())) - { - v1 = (u16) gShopData.unk16_1; - v1 = ~(0x1F0); - //v1 = (s16) gShopData.unk16_1 & 0xFFFFFE0F; - //v1 = gShopData.unk16_1 & (u32) 0xFFFFFE0F; - //v1 &= 0xFE0F; - v2 = 0x40; - } + gShopData.unk16_4 = 4; else - { - v1 = (u16) gShopData.unk16_1; - v1 = ~(0x1F0); - v2 = 0x50; - } - gShopData.martType = (u16) (v1 | v2); + gShopData.unk16_4 = 5; gUnknown_2039950 = AddWindow(gUnknown_83DF0BC); //sShop SetStdWindowBorderStyle(gUnknown_2039950, 0); @@ -75,101 +59,8 @@ u8 sub_809AAB0(u8 a0) CopyWindowToVram(gUnknown_2039950, 1); return CreateTask(sub_809AC10, 8); } -#else -NAKED -u8 sub_809AAB0(u8 a0) -{ - asm_unified("\tpush {r4-r6,lr}\n" - "\tsub sp, 0xC\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tbl sub_809AB7C\n" - "\tldr r4, _0809AAE8 @ =gUnknown_2039934\n" - "\tmovs r1, 0xF\n" - "\tands r1, r0\n" - "\tldrb r2, [r4, 0x16]\n" - "\tmovs r0, 0x10\n" - "\tnegs r0, r0\n" - "\tands r0, r2\n" - "\torrs r0, r1\n" - "\tstrb r0, [r4, 0x16]\n" - "\tmovs r0, 0\n" - "\tstrh r0, [r4, 0xC]\n" - "\tbl ContextNpcGetTextColor\n" - "\tlsls r0, 24\n" - "\tcmp r0, 0\n" - "\tbne _0809AAF0\n" - "\tldrh r0, [r4, 0x16]\n" - "\tldr r1, _0809AAEC @ =0xfffffe0f\n" - "\tands r1, r0\n" - "\tmovs r0, 0x40\n" - "\tb _0809AAF8\n" - "\t.align 2, 0\n" - "_0809AAE8: .4byte gUnknown_2039934\n" - "_0809AAEC: .4byte 0xfffffe0f\n" - "_0809AAF0:\n" - "\tldrh r0, [r4, 0x16]\n" - "\tldr r1, _0809AB68 @ =0xfffffe0f\n" - "\tands r1, r0\n" - "\tmovs r0, 0x50\n" - "_0809AAF8:\n" - "\torrs r1, r0\n" - "\tstrh r1, [r4, 0x16]\n" - "\tldr r4, _0809AB6C @ =gUnknown_2039950\n" - "\tldr r0, _0809AB70 @ =gUnknown_83DF0BC\n" - "\tbl AddWindow\n" - "\tstrb r0, [r4]\n" - "\tldrb r0, [r4]\n" - "\tmovs r1, 0\n" - "\tbl SetStdWindowBorderStyle\n" - "\tmovs r0, 0x2\n" - "\tmovs r1, 0\n" - "\tbl GetMenuCursorDimensionByFont\n" - "\tadds r2, r0, 0\n" - "\tlsls r2, 24\n" - "\tlsrs r2, 24\n" - "\tldrb r0, [r4]\n" - "\tmovs r6, 0x10\n" - "\tstr r6, [sp]\n" - "\tmovs r5, 0x3\n" - "\tstr r5, [sp, 0x4]\n" - "\tldr r1, _0809AB74 @ =gUnknown_83DF09C\n" - "\tstr r1, [sp, 0x8]\n" - "\tmovs r1, 0x2\n" - "\tmovs r3, 0x2\n" - "\tbl PrintTextArray\n" - "\tldrb r0, [r4]\n" - "\tstr r6, [sp]\n" - "\tstr r5, [sp, 0x4]\n" - "\tmovs r1, 0\n" - "\tstr r1, [sp, 0x8]\n" - "\tmovs r1, 0x2\n" - "\tmovs r2, 0\n" - "\tmovs r3, 0x2\n" - "\tbl Menu_InitCursor\n" - "\tldrb r0, [r4]\n" - "\tbl PutWindowTilemap\n" - "\tldrb r0, [r4]\n" - "\tmovs r1, 0x1\n" - "\tbl CopyWindowToVram\n" - "\tldr r0, _0809AB78 @ =sub_809AC10\n" - "\tmovs r1, 0x8\n" - "\tbl CreateTask\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tadd sp, 0xC\n" - "\tpop {r4-r6}\n" - "\tpop {r1}\n" - "\tbx r1\n" - "\t.align 2, 0\n" - "_0809AB68: .4byte 0xfffffe0f\n" - "_0809AB6C: .4byte gUnknown_2039950\n" - "_0809AB70: .4byte gUnknown_83DF0BC\n" - "_0809AB74: .4byte gUnknown_83DF09C\n" - "_0809AB78: .4byte sub_809AC10\n"); -} -#endif +/* static u8 sub_809AB7C(u8 a0) { u16 pocket; @@ -189,11 +80,8 @@ static u8 sub_809AB7C(u8 a0) } } - - - } - +*/ -- cgit v1.2.3 From 0001d360a616bbf07716dd848d32dd646a7006e5 Mon Sep 17 00:00:00 2001 From: Evan Date: Thu, 21 Nov 2019 08:19:38 -0700 Subject: function progress --- src/shop.c | 123 ++++++++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 101 insertions(+), 22 deletions(-) (limited to 'src') diff --git a/src/shop.c b/src/shop.c index 6ec6d0467..8d87eb6ae 100644 --- a/src/shop.c +++ b/src/shop.c @@ -4,6 +4,9 @@ #include "window.h" #include "field_specials.h" #include "task.h" +#include "item.h" +#include "main.h" +#include "sound.h" // enums // RAM symbols @@ -30,15 +33,24 @@ EWRAM_DATA struct ShopData gShopData = {0}; EWRAM_DATA u8 gUnknown_2039950 = 0; //Function Declarations -//static u8 sub_809AB7C(u8 a0); - +static u8 sub_809AB7C(bool32 a0); +static void sub_809AC10(u8 taskId); // external defines extern const struct WindowTemplate gUnknown_83DF0BC[]; //sShopMenuWindowTemplates extern const struct MenuAction gUnknown_83DF09C[]; //sShopMenuActions_BuySellQuit -extern u8 sub_809AB7C(u8 a); -extern void sub_809AC10(u8 taskId); +extern void sub_809ACF8(u8 taskId); + +//Data Definitions +/* +static const struct MenuAction sShopMenuActions_BuySellQuit[] = +{ + { gText_ShopBuy, {.void_u8=Task_HandleShopMenuBuy} }, + { gText_ShopSell, {.void_u8=Task_HandleShopMenuSell} }, + { gText_ShopQuit, {.void_u8=Task_HandleShopMenuQuit} } +}; +*/ // Functions @@ -60,32 +72,99 @@ u8 sub_809AAB0(u8 a0) return CreateTask(sub_809AC10, 8); } +static u8 sub_809AB7C(u32 a0) +{ + u16 retVal, i; + if (a0) + return (u8)a0; + goto MAIN; + RETURN_1: + return 1; + + MAIN: + i = 0; + if (i >= gShopData.itemCount) + goto RETURN_0; + else if (gShopData.itemList[0] == 0) + goto RETURN_0; + + while (gShopData.itemList[i] != 0) + { + if (ItemId_GetPocket(gShopData.itemList[i]) == POCKET_TM_CASE) + goto RETURN_1; + ++i; + if (i >= gShopData.itemCount) + goto RETURN_0; + else if (gShopData.itemList[i] == 0) + goto RETURN_0; + } + RETURN_0: + return 0; +} + /* -static u8 sub_809AB7C(u8 a0) +void (const u16 *list) //SetShopItemsForSale { - u16 pocket; + u16 i; + gShopData.itemList = list; + gShopData.itemCount = 0; + if (list[0] == 0) + return; - if (a0 != 0) - return a0; - else if (a0 >= gShopData.itemCount) - return FALSE; - else if (gShopData.itemList[0] == 0) - return FALSE; - else + i = 0; + while (list[i] != 0) { - while (ItemId_GetPocket(gShopData.itemCount[i]) != 0) - { - if (ItemId_GetPocket(gShopData.itemCount[i] == POCKET_TM_CASE) - return 1; - - } + gShopData.itemCount++; + if (list[i] == 0) + return; + i++; } } */ +//#ifdef NONMATCHING +// WHAT THE FUCK IS UP WITH THIS FUNCTION +void sub_809ABD8(const u16 *items) +{ + //const u16* mart = items; + u16 item; + gShopData.itemList = items; + gShopData.itemCount = 0; + + //item = items[0]; + if (items[0] == 0) + return; + do { + gShopData.itemCount++; + item = items[gShopData.itemCount]; + } while (item); +} +/* +#else +NAKED +void sub_809ABD8(const u16 *items) + asm_unified("\t +*/ +//SetShopMenuCallback +void sub_809AC04(MainCallback callback) +{ + gShopData.callback = callback; +} - - - +//Task_ShopMenu +static void sub_809AC10(u8 taskId) +{ + s8 a0 = Menu_ProcessInputNoWrapAround(); + if (a0 == -2) + return; + + if (a0 == -1) + { + PlaySE(5); + sub_809ACF8(taskId); + return; + } + //gUnknown_83DF09C.func.u8_void(Menu_GetCursorPos()); +} -- cgit v1.2.3 From 359d345913d7f5ed36c34ede5476fff946318ffd Mon Sep 17 00:00:00 2001 From: Evan Date: Thu, 21 Nov 2019 09:05:43 -0700 Subject: temp --- src/shop.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) (limited to 'src') diff --git a/src/shop.c b/src/shop.c index 8d87eb6ae..f1dda35b4 100644 --- a/src/shop.c +++ b/src/shop.c @@ -40,17 +40,20 @@ static void sub_809AC10(u8 taskId); extern const struct WindowTemplate gUnknown_83DF0BC[]; //sShopMenuWindowTemplates extern const struct MenuAction gUnknown_83DF09C[]; //sShopMenuActions_BuySellQuit +extern void sub_809AC5C(u8 taskId); +extern void sub_809AC98(u8 taskId); extern void sub_809ACF8(u8 taskId); //Data Definitions -/* static const struct MenuAction sShopMenuActions_BuySellQuit[] = { - { gText_ShopBuy, {.void_u8=Task_HandleShopMenuBuy} }, - { gText_ShopSell, {.void_u8=Task_HandleShopMenuSell} }, - { gText_ShopQuit, {.void_u8=Task_HandleShopMenuQuit} } + {gUnknown_8416738, {.void_u8 = sub_809AC5C}}, + {gUnknown_841673C, {.void_u8 = sub_809AC98}}, + {gUnknown_8416741, {.void_u8 = sub_809ACF8}} + //{ gText_ShopBuy, {.void_u8=Task_HandleShopMenuBuy} }, + //{ gText_ShopSell, {.void_u8=Task_HandleShopMenuSell} }, + //{ gText_ShopQuit, {.void_u8=Task_HandleShopMenuQuit} } }; -*/ // Functions @@ -130,14 +133,11 @@ void sub_809ABD8(const u16 *items) u16 item; gShopData.itemList = items; gShopData.itemCount = 0; - - //item = items[0]; - if (items[0] == 0) - return; - do { - gShopData.itemCount++; - item = items[gShopData.itemCount]; - } while (item); + + while (1) + { + item = items[++gShopData.itemCount]; + } } /* #else @@ -165,6 +165,6 @@ static void sub_809AC10(u8 taskId) sub_809ACF8(taskId); return; } - //gUnknown_83DF09C.func.u8_void(Menu_GetCursorPos()); + gUnknown_83DF09C.func.void_u8(Menu_GetCursorPos()); } -- cgit v1.2.3 From 2cc4db0c786e20c1ef9823d0d0a027f39dfef9f3 Mon Sep 17 00:00:00 2001 From: Evan Date: Sun, 24 Nov 2019 16:23:06 -0700 Subject: remove .s files --- src/buy_menu_helpers.c | 2 +- src/shop.c | 1987 +++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 1955 insertions(+), 34 deletions(-) (limited to 'src') diff --git a/src/buy_menu_helpers.c b/src/buy_menu_helpers.c index cf8072977..44de094b5 100644 --- a/src/buy_menu_helpers.c +++ b/src/buy_menu_helpers.c @@ -177,7 +177,7 @@ void BuyMenuDrawMoneyBox(void) PrintMoneyAmountInMoneyBoxWithBorder(0, 0xA, 0xF, GetMoney(&gSaveBlock1Ptr->money)); } -void BuyMenuPrint(u8 windowId, u8 font, const u8 *text, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, s8 speed, u8 color) +void BuyMenuPrint(u8 windowId, u8 font, const u8 *text, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 color) { AddTextPrinterParameterized4(windowId, font, x, y, letterSpacing, lineSpacing, sShopBuyMenuTextColors[color], speed, text); } diff --git a/src/shop.c b/src/shop.c index 3dd9ba102..68e82ea8e 100644 --- a/src/shop.c +++ b/src/shop.c @@ -1,72 +1,294 @@ #include "global.h" +#include "shop.h" #include "menu.h" +#include "data.h" +#include "list_menu.h" #include "new_menu_helpers.h" +#include "party_menu.h" #include "window.h" #include "field_specials.h" +#include "field_weather.h" +#include "field_camera.h" #include "task.h" +#include "text.h" #include "item.h" +#include "item_menu.h" #include "main.h" #include "sound.h" +#include "strings.h" +#include "string_util.h" +#include "overworld.h" +#include "window.h" +#include "palette.h" +#include "field_fadetransition.h" +#include "scanline_effect.h" +#include "item_menu_icons.h" +#include "bg.h" +#include "gpu_regs.h" +#include "malloc.h" +#include "decompress.h" +#include "menu_indicators.h" +#include "field_player_avatar.h" +#include "fieldmap.h" +#include "field_map_obj.h" +#include "money.h" +#include "quest_log.h" +#include "script.h" +#include "event_data.h" +#include "constants/songs.h" +#include "constants/items.h" +#include "constants/game_stat.h" + +#define t0 data[0] +#define tItemCount data[1] +#define tX data[4] +#define tItemId data[5] +#define tListTaskId data[7] + +enum +{ + MART_TYPE_REGULAR = 0, + MART_TYPE_TMHM, + MART_TYPE_DECOR, + MART_TYPE_DECOR2, +}; -// enums // RAM symbols // Function Declarations // Data Definitions - -struct ShopData { +struct ShopData +{ /*0x00*/ void (*callback)(void); /*0x04*/ const u16 *itemList; /*0x08*/ u32 itemPrice; - /*0x0C*/ u16 cursorPos; - /*0x0E*/ u16 _; + /*0x0C*/ u16 selectedRow; + /*0x0E*/ u16 scrollOffset; /*0x10*/ u16 itemCount; /*0x12*/ u16 field12; - /*0x14*/ u16 field14; + /*0x14*/ u16 maxQuantity; /*0x16*/ u16 martType:4; // 0x1 if tm list u16 unk16_4:5; - u16 unk16_9:7; + u16 itemSlot:2; + u16 unk16_11:5; + /*0x18*/ u16 unk18; //INCOMPLETE }; +struct MartHistory +{ + /*0x00*/ u32 unk0; + /*0x04*/ u16 unk4; + /*0x06*/ u16 unk6; + /*0x08*/ u8 unk8; + /*0x09*/ u8 unk9; + /*0x0A*/ u8 unkA; + /*0x0B*/ u8 unkB; + /*0x0C*/ u16 unkC; + /*0x0E*/ u8 unkE[6]; + /*0x14*/ u8 unk14; + /*0x15*/ u8 unk15; + /*0x16*/ u8 unk16; + /*0x17*/ u8 unk17; +}; /* size = 0x18 */ + + EWRAM_DATA struct ShopData gShopData = {0}; -EWRAM_DATA u8 gUnknown_2039950 = 0; +EWRAM_DATA u8 gUnknown_2039950 = 0; //sShopMenuWindowId + +EWRAM_DATA u16 (*gUnknown_2039954)[0x400] = {0}; //gShopTilemapBuffers +EWRAM_DATA u16 (*gUnknown_2039958)[0x400] = {0}; +EWRAM_DATA u16 (*gUnknown_203995C)[0x400] = {0}; +EWRAM_DATA u16 (*gUnknown_2039960)[0x400] = {0}; +/* +EWRAM_DATA struct ShopTilemapBuffers *gUnknown_2039954 = 0; //gShopTilemapBuffers +EWRAM_DATA struct ShopTilemapBuffers *gUnknown_2039958 = 0; +EWRAM_DATA struct ShopTilemapBuffers *gUnknown_203995C = 0; +EWRAM_DATA struct ShopTilemapBuffers *gUnknown_2039960 = 0; +*/ +EWRAM_DATA struct ListMenuItem *gUnknown_2039964 = {0}; +EWRAM_DATA u8 (*gUnknown_2039968)[13] = {0}; //item strings + +EWRAM_DATA s16 gUnknown_20398B4[MAP_OBJECTS_COUNT][4] = {0}; //sViewportMapObjects +EWRAM_DATA struct MartHistory gUnknown_203996C = {0}; + +EWRAM_DATA u8 gUnknown_2039984 = 0; //Function Declarations +static u8 sub_809AAB0(u8 a0); static u8 sub_809AB7C(bool32 a0); +static void sub_809ABD8(const u16 *items); +static void sub_809AC04(MainCallback callback); static void sub_809AC10(u8 taskId); +static void sub_809AC5C(u8 taskId); +static void sub_809AC98(u8 taskId); +static void sub_809ACD4(void); +static void sub_809ACF8(u8 taskId); +static void sub_809AD24(void); +static void sub_809AD40(u8 taskId); +static void sub_809AD74(void); +static void sub_809AD8C(u8 taskId); +static void sub_809ADC0(u8 taskId); //ShowShopMenuAfterExitingBuyOrSellMenu +static void sub_809ADE4(void); +static void sub_809AE00(void); +static void sub_809AE14(void); +static bool8 sub_809AF6C(void); +static void sub_809AFD0(void); //BuyMenuInitBgs +static void sub_809B080(void); +static void sub_809B10C(bool32 a0); +static void sub_809B15C(void); //BuyMenuDrawGraphics(); +static bool8 sub_809B188(void); //BuyMenuBuildListMenuTemplate +static void sub_809B300(struct ListMenuItem *list, u16 index, u8* dst); +static void sub_809B320(s32 item, bool8 onInit, struct ListMenu *list); +static void sub_809B408(u8 windowId, s32 itemId, u8 y); +static void sub_809B494(s32 item); +static void sub_809B57C(u8 listTaskId, u8 a1); +static void sub_809B59C(u8 y, u8 a1); +static void sub_809B604(void); +static void sub_809B670(void); +static void sub_809B690(void); +static void sub_809B6FC(void); +static void sub_809B73C(void); +static void sub_809B764(void); +static void sub_809B778(void); +static void sub_809B850(s16 x, s16 y, const u16 *src, u8 metatileLayerType); +static void sub_809B904(u16 *dest, s16 offset1, s16 offset2, const u16 *src); +static void sub_809B92C(void); +static void sub_809BA40(void); +static void sub_809BAFC(void); +static void sub_809BB44(u8 taskId); +static void sub_809BBC0(u8 taskId); +static void sub_809BCA0(u8 taskId); +static void sub_809BD8C(u8 taskId); +static void sub_809BE90(u8 taskId); +static void sub_809BEA4(u8 taskId); +static void sub_809BF0C(u8 taskId); +static void sub_809BF68(u8 taskId); +static void sub_809BF98(u8 taskId); +static void sub_809C004(u8 taskId); +static void sub_809C04C(u8 taskId); +static void nullsub_52(u8 taskId); +static void nullsub_53(void); +static void sub_809C138(void); -// external defines -extern const struct WindowTemplate gUnknown_83DF0BC[]; //sShopMenuWindowTemplates -extern const struct MenuAction gUnknown_83DF09C[]; //sShopMenuActions_BuySellQuit +// new file? +static void sub_809C334(u8 taskId); +static void sub_809C500(u8 taskId); +static void sub_809C640(u8 taskId); -extern void sub_809AC5C(u8 taskId); -extern void sub_809AC98(u8 taskId); -extern void sub_809ACF8(u8 taskId); +// external defines +extern u8 MapGridGetMetatileLayerTypeAt(s16 x, s16 y); +extern u16 BagGetQuantityByItemId(u16 item); //Data Definitions -static const struct MenuAction sShopMenuActions_BuySellQuit[] = -{ - {gUnknown_8416738, {.void_u8 = sub_809AC5C}}, - {gUnknown_841673C, {.void_u8 = sub_809AC98}}, - {gUnknown_8416741, {.void_u8 = sub_809ACF8}} - //{ gText_ShopBuy, {.void_u8=Task_HandleShopMenuBuy} }, - //{ gText_ShopSell, {.void_u8=Task_HandleShopMenuSell} }, - //{ gText_ShopQuit, {.void_u8=Task_HandleShopMenuQuit} } +/* +extern const struct MenuAction gUnknown_83DF09C[]; +extern const struct YesNoFuncTable gUnknown_83DF0B4[]; +extern const struct WindowTemplate gUnknown_83DF0BC[]; +extern const struct BgTemplate gUnknown_83DF0C4[]; +extern const u16 gUnknown_83DF0D4[]; +extern const u16 gUnknown_83DF0DA[]; +extern const u16 gUnknown_83DF0E0[]; +extern const u16 gUnknown_83DF0E6[]; +extern const u16 gUnknown_83DF0EC[]; +extern const u16 gUnknown_83DF0F2[]; +extern const u16 gUnknown_83DF0F8[]; +*/ + +//graphics +extern const u32 gUnknown_8E85DC8[]; //gBuyMenuFrame_Gfx[]; +extern const u32 gUnknown_8E85EFC[]; //gBuyMenuFrame_Tilemap +extern const u32 gUnknown_8E86038[]; //gBuyMenuFrame_TmHmTilemap +extern const u32 gUnknown_8E86170[]; //gBuyMenuFrame_Pal + + +static const struct MenuAction gUnknown_83DF09C[] = // sShopMenuActions_BuySellQuit +{ + {gText_ShopBuy, {.void_u8 = sub_809AC5C}}, + {gText_ShopSell, {.void_u8 = sub_809AC98}}, + {gText_ShopQuit, {.void_u8 = sub_809ACF8}} +}; + +static const struct YesNoFuncTable gUnknown_83DF0B4[] = //sShopMenuActions_BuyQuit +{ + sub_809BEA4, //Task_HandleShopMenuBuy, + sub_809BF98 //Task_HandleShopMenuQuit +}; + +static const struct WindowTemplate gUnknown_83DF0BC[] = //sShopMenuWindowTemplates +{ + { + .bg = 0, + .tilemapLeft = 2, + .tilemapTop = 1, + .width = 12, + .height = 6, + .paletteNum = 15, + .baseBlock = 8 + } +}; + +static const struct BgTemplate gUnknown_83DF0C4[] = //sShopBuyMenuBgTemplates +{ + { + .bg = 0, + .charBaseIndex = 2, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0 + }, + { + .bg = 1, + .charBaseIndex = 0, + .mapBaseIndex = 30, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 + }, + { + .bg = 2, + .charBaseIndex = 0, + .mapBaseIndex = 29, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0 + }, + { + .bg = 3, + .charBaseIndex = 0, + .mapBaseIndex = 28, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0 + } }; +static const u16 gUnknown_83DF0D4[] = {0x0308, 0x030a, 0x02d0}; +static const u16 gUnknown_83DF0DA[] = {0x0309, 0x030b, 0x02d1}; +static const u16 gUnknown_83DF0E0[] = {0x0310, 0x0312, 0x02d8}; +static const u16 gUnknown_83DF0E6[] = {0x0311, 0x0313, 0x02d9}; +static const u16 gUnknown_83DF0EC[] = {0x02e3, 0x0316, 0x0314}; +static const u16 gUnknown_83DF0F2[] = {0x02e4, 0x0317, 0x0315}; +static const u16 gUnknown_83DF0F8[] = {0x02eb, 0x031e, 0x031c}; + // Functions -u8 sub_809AAB0(u8 a0) +// CreateShopMenu +static u8 sub_809AAB0(u8 a0) { gShopData.martType = sub_809AB7C(a0) & 0xF; - gShopData.cursorPos = 0; + gShopData.selectedRow = 0; if (!(ContextNpcGetTextColor())) gShopData.unk16_4 = 4; else gShopData.unk16_4 = 5; - gUnknown_2039950 = AddWindow(gUnknown_83DF0BC); //sShop + gUnknown_2039950 = AddWindow(gUnknown_83DF0BC); //sShopMenuWindowTemplates SetStdWindowBorderStyle(gUnknown_2039950, 0); PrintTextArray(gUnknown_2039950, 2, GetMenuCursorDimensionByFont(2, 0), 2, 16, 3, gUnknown_83DF09C); Menu_InitCursor(gUnknown_2039950, 2, 0, 2, 16, 3, 0); @@ -106,7 +328,7 @@ static u8 sub_809AB7C(u32 a0) } //SetShopItemsForSale -void sub_809ABD8(const u16 *items) //I really don't know what GameFreak was thinking here.. +static void sub_809ABD8(const u16 *items) //I really don't know what GameFreak was thinking here.. { struct ShopData *mart; //u16 i; @@ -127,7 +349,7 @@ void sub_809ABD8(const u16 *items) //I really don't know what GameFreak was thin } //SetShopMenuCallback -void sub_809AC04(MainCallback callback) +static void sub_809AC04(MainCallback callback) { gShopData.callback = callback; } @@ -135,16 +357,1715 @@ void sub_809AC04(MainCallback callback) //Task_ShopMenu static void sub_809AC10(u8 taskId) { - s8 a0 = Menu_ProcessInputNoWrapAround(); - if (a0 == -2) - return; + s8 input = Menu_ProcessInputNoWrapAround(); - if (a0 == -1) + switch (input) { - PlaySE(5); + case MENU_NOTHING_CHOSEN: + break; + case MENU_B_PRESSED: + PlaySE(SE_SELECT); sub_809ACF8(taskId); + break; + default: + gUnknown_83DF09C[Menu_GetCursorPos()].func.void_u8(taskId); + break; + } +} + +//Task_HandleShopMenuBuy +static void sub_809AC5C(u8 taskId) +{ + SetWordTaskArg(taskId, 0xE, (u32)sub_809AE14); + fade_screen(1, 0); + gTasks[taskId].func = sub_809AD40; +} + +//Task_HandleShopMenuSell +static void sub_809AC98(u8 taskId) +{ + SetWordTaskArg(taskId, 0xE, (u32)sub_809ACD4); + fade_screen(1, 0); + gTasks[taskId].func = sub_809AD40; +} + +//CB2_GoToSellMenu +static void sub_809ACD4(void) +{ + sub_8107DB4(2, POCKET_POKE_BALLS, CB2_ReturnToField); + gFieldCallback = sub_809AD74; +} + +//Task_HandleShopMenuQuit +static void sub_809ACF8(u8 taskId) +{ + sub_809AD24(); + sub_809C138(); + DestroyTask(taskId); + if (gShopData.callback != 0) + gShopData.callback(); +} + +static void sub_809AD24(void) +{ + ClearStdWindowAndFrameToTransparent(gUnknown_2039950, 2); + RemoveWindow(gUnknown_2039950); +} + +//Task_GoToBuyOrSellMenu +static void sub_809AD40(u8 taskId) +{ + if (gPaletteFade.active) return; + SetMainCallback2((void *)GetWordTaskArg(taskId, 0xE)); + FreeAllWindowBuffers(); + DestroyTask(taskId); +} + +//MapPostLoadHook_ReturnToShopMenu +static void sub_809AD74(void) +{ + sub_807DC00(); + CreateTask(sub_809AD8C, 8); +} + +//Task_ReturnToShopMenu +static void sub_809AD8C(u8 taskId) +{ + if (field_weather_is_fade_finished() != TRUE) + return; + DisplayItemMessageOnField(taskId, sub_809B56C(), gText_CanIHelpWithAnythingElse, sub_809ADC0); +} + +//ShowShopMenuAfterExitingBuyOrSellMenu +static void sub_809ADC0(u8 taskId) +{ + sub_809AAB0(gShopData.martType); + DestroyTask(taskId); +} + +//CB2_BuyMenu +static void sub_809ADE4(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); + DoScheduledBgTilemapCopiesToVram(); +} + +//VBlankCB_BuyMenu +static void sub_809AE00(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +//CB2_InitBuyMenu +static void sub_809AE14(void) +{ + u8 taskId; + switch (gMain.state) + { + case 0: + SetVBlankHBlankCallbacksToNull(); + CpuFastFill(0, (void *)OAM, 0x400); + ScanlineEffect_Stop(); + ResetTempTileDataBuffers(); + FreeAllSpritePalettes(); + ResetPaletteFade(); + ResetSpriteData(); + ResetTasks(); + ClearScheduledBgCopiesToVram(); + ResetItemMenuIconState(); + if ((!(sub_809AF6C())) || (!(sub_809B188()))) + return; + sub_809AFD0(); + FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 0x20, 0x20); + FillBgTilemapBufferRect_Palette0(1, 0, 0, 0, 0x20, 0x20); + FillBgTilemapBufferRect_Palette0(2, 0, 0, 0, 0x20, 0x20); + FillBgTilemapBufferRect_Palette0(3, 0, 0, 0, 0x20, 0x20); + BuyMenuInitWindows(gShopData.martType); + sub_809B080(); + gMain.state++; + break; + case 1: + if (FreeTempTileDataBuffersIfPossible()) + return; + gMain.state++; + break; + default: + gShopData.selectedRow = 0; + gShopData.scrollOffset = 0; + sub_809B15C(); //BuyMenuDrawGraphics(); + sub_809B690(); //BuyMenuAddScrollIndicatorArrows(); + taskId = CreateTask(sub_809BBC0, 8); + gTasks[taskId].tListTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0); + BlendPalettes(0xFFFFFFFF, 0x10, RGB_BLACK); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK); + SetVBlankCallback(sub_809AE00); + SetMainCallback2(sub_809ADE4); + break; } - //gUnknown_83DF09C.func.void_u8(Menu_GetCursorPos()); } +//InitShopData +static bool8 sub_809AF6C(void) +{ + gUnknown_2039954 = Alloc(sizeof(*gUnknown_2039954)); + if (gUnknown_2039954 == 0) + goto CANCEL; + gUnknown_2039958 = Alloc(sizeof(*gUnknown_2039958)); + if (gUnknown_2039958 == 0) + goto CANCEL; + gUnknown_203995C = Alloc(sizeof(*gUnknown_203995C)); + if (gUnknown_203995C == 0) + goto CANCEL; + gUnknown_2039960 = Alloc(sizeof(*gUnknown_2039960)); + if (gUnknown_2039960 == 0) + goto CANCEL; + return TRUE; + + CANCEL: + sub_809B604(); + sub_809B670(); + return FALSE; +} + +#ifdef NONMATCHING +//BuyMenuInitBgs +// this matches but adjusts offsets const for some reason... +static void sub_809AFD0(void) +{ + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, gUnknown_83DF0C4, 4); //NELEMS(gUnknown_83DF0C4)); + SetBgTilemapBuffer(1, gUnknown_2039958); + SetBgTilemapBuffer(2, gUnknown_2039960); + SetBgTilemapBuffer(3, gUnknown_203995C); + SetGpuReg(0x10, 0); + SetGpuReg(0x12, 0); + SetGpuReg(0x14, 0); + SetGpuReg(0x16, 0); + SetGpuReg(0x18, 0); + SetGpuReg(0x1A, 0); + SetGpuReg(0x1C, 0); + SetGpuReg(0x1E, 0); + SetGpuReg(0x50, 0); + SetGpuReg(0, 0x1040); + ShowBg(0); + ShowBg(1); + ShowBg(2); +} +#else +NAKED +static void sub_809AFD0(void) +{ + asm_unified("\tpush {lr}\n" + "\tmovs r0, 0\n" + "\tbl ResetBgsAndClearDma3BusyFlags\n" + "\tldr r1, _0809B070 @ =gUnknown_83DF0C4\n" + "\tmovs r0, 0\n" + "\tmovs r2, 0x4\n" + "\tbl InitBgsFromTemplates\n" + "\tldr r0, _0809B074 @ =gUnknown_2039958\n" + "\tldr r1, [r0]\n" + "\tmovs r0, 0x1\n" + "\tbl SetBgTilemapBuffer\n" + "\tldr r0, _0809B078 @ =gUnknown_2039960\n" + "\tldr r1, [r0]\n" + "\tmovs r0, 0x2\n" + "\tbl SetBgTilemapBuffer\n" + "\tldr r0, _0809B07C @ =gUnknown_203995C\n" + "\tldr r1, [r0]\n" + "\tmovs r0, 0x3\n" + "\tbl SetBgTilemapBuffer\n" + "\tmovs r0, 0x10\n" + "\tmovs r1, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r0, 0x12\n" + "\tmovs r1, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r0, 0x14\n" + "\tmovs r1, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r0, 0x16\n" + "\tmovs r1, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r0, 0x18\n" + "\tmovs r1, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r0, 0x1A\n" + "\tmovs r1, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r0, 0x1C\n" + "\tmovs r1, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r0, 0x1E\n" + "\tmovs r1, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r0, 0x50\n" + "\tmovs r1, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r1, 0x82\n" + "\tlsls r1, 5\n" + "\tmovs r0, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r0, 0\n" + "\tbl ShowBg\n" + "\tmovs r0, 0x1\n" + "\tbl ShowBg\n" + "\tmovs r0, 0x2\n" + "\tbl ShowBg\n" + "\tmovs r0, 0x3\n" + "\tbl ShowBg\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_0809B070: .4byte gUnknown_83DF0C4\n" + "_0809B074: .4byte gUnknown_2039958\n" + "_0809B078: .4byte gUnknown_2039960\n" + "_0809B07C: .4byte gUnknown_203995C\n"); +} +#endif + +//BuyMenuDecompressBgGraphics +static void sub_809B080(void) +{ + void* pal; + DecompressAndCopyTileDataToVram(1, gUnknown_8E85DC8, 0x480, 0x3DC, 0); + if ((gShopData.martType) != MART_TYPE_TMHM) + LZDecompressWram(gUnknown_8E85EFC, gUnknown_2039954); //gBuyMenuFrame_Tilemap + else + LZDecompressWram(gUnknown_8E86038, gUnknown_2039954); //gBuyMenuFrame_TmHmTilemap + pal = Alloc(0x40); + LZDecompressWram(gUnknown_8E86170, pal); + LoadPalette(pal, 0xB0, 0x20); + LoadPalette(pal + 0x20, 0x60, 0x20); + Free(pal); +} + +static void sub_809B10C(bool32 a0) +{ + u8 v; + if (a0 == FALSE) + v = 0xB; + else + v = 6; + if ((gShopData.martType) != MART_TYPE_TMHM) + SetBgRectPal(1, 0, 0xE, 0x1E, 6, v); + else + SetBgRectPal(1, 0, 0xC, 0x1E, 8, v); + ScheduleBgCopyTilemapToVram(1); +} + +//BuyMenuDrawGraphics +static void sub_809B15C(void) +{ + sub_809B764(); + sub_809BAFC(); + BuyMenuDrawMoneyBox(); + ScheduleBgCopyTilemapToVram(0); + ScheduleBgCopyTilemapToVram(1); + ScheduleBgCopyTilemapToVram(2); + ScheduleBgCopyTilemapToVram(3); +} + +//BuyMenuBuildListMenuTemplate +static bool8 sub_809B188(void) +{ + u16 i; + u16 v; + struct ListMenuItem **list = &gUnknown_2039964; + struct ShopData *mart = &gShopData; + *list = Alloc((gShopData.itemCount + 1) * sizeof(*gUnknown_2039964)); + if (gUnknown_2039964 == 0) + goto FREE_MEMORY; + + gUnknown_2039968 = Alloc((gShopData.itemCount + 1) * sizeof(*gUnknown_2039968)); + if (gUnknown_2039968 == 0) + { + FREE_MEMORY: + sub_809B604(); + sub_809B670(); + return FALSE; + } + + i = 0; + if (i >= mart->itemCount) + goto ADD_CANCEL; + + for (i = 0; i < mart->itemCount; i++) + { + sub_809B300(&gUnknown_2039964[i], mart->itemList[i], gUnknown_2039968[i]); //PokeMartWriteNameAndIdAt(u16 a0, u16 a1, u8* a2) + } + + ADD_CANCEL: + StringCopy(gUnknown_2039968[i], gFameCheckerText_Cancel); + gUnknown_2039964[i].label = gUnknown_2039968[i]; + gUnknown_2039964[i].index = -2; + gMultiuseListMenuTemplate.items = gUnknown_2039964; + gMultiuseListMenuTemplate.totalItems = gShopData.itemCount + 1; + gMultiuseListMenuTemplate.windowId = 4; + gMultiuseListMenuTemplate.header_X = 0; + gMultiuseListMenuTemplate.item_X = 9; + gMultiuseListMenuTemplate.cursor_X = 1; + gMultiuseListMenuTemplate.lettersSpacing = 0; + gMultiuseListMenuTemplate.itemVerticalPadding = 2; + gMultiuseListMenuTemplate.upText_Y = 2; + gMultiuseListMenuTemplate.fontId = 2; + gMultiuseListMenuTemplate.fillValue = 0; + gMultiuseListMenuTemplate.cursorPal = GetFontAttribute(2, 5); + gMultiuseListMenuTemplate.cursorShadowPal = GetFontAttribute(2, 7); + gMultiuseListMenuTemplate.moveCursorFunc = sub_809B320; + gMultiuseListMenuTemplate.itemPrintFunc = sub_809B408; + gMultiuseListMenuTemplate.scrollMultiple = 0; + gMultiuseListMenuTemplate.cursorKind = 0; + + if (gShopData.martType == MART_TYPE_TMHM) + v = 5; + else + v = 6; + + if ((gShopData.itemCount + 1) > v) + gMultiuseListMenuTemplate.maxShowed = v; + else + gMultiuseListMenuTemplate.maxShowed = gShopData.itemCount + 1; + + gShopData.field12 = gMultiuseListMenuTemplate.maxShowed; + return TRUE; +} + +//PokeMartWriteNameAndIdAt +static void sub_809B300(struct ListMenuItem *list, u16 index, u8* dst) +{ + CopyItemName(index, dst); + list->label = dst; + list->index = index; +} + +//BuyMenuPrintItemDescriptionAndShowItemIcon +static void sub_809B320(s32 item, bool8 onInit, struct ListMenu *list) +{ + const u8 *description; + + if (onInit != TRUE) + PlaySE(SE_SELECT); + + if (item != INDEX_CANCEL) + description = ItemId_GetDescription(item); + else + description = gText_QuitShopping; + + FillWindowPixelBuffer(5, PIXEL_FILL(0)); + if (gShopData.martType != 1) + { + DestroyItemMenuIcon(gShopData.itemSlot ^ 1); + if (item != INDEX_CANCEL) + CreateItemMenuIcon(item, gShopData.itemSlot); + else + CreateItemMenuIcon(ITEM_N_A, gShopData.itemSlot); + gShopData.itemSlot ^= 1; + BuyMenuPrint(5, 2, description, 0, 3, 2, 1, 0, 0); + } + else //TM Mart + { + FillWindowPixelBuffer(6, PIXEL_FILL(0)); + sub_809B494(item); + BuyMenuPrint(5, 2, description, 2, 3, 1, 0, 0, 0); + } +} + +//BuyMenuPrintPriceInList +#ifdef NONMATCHING //this function was written very strangely.. +static void sub_809B408(u8 windowId, s32 item, u8 y) +{ + u32 len; + u8* loc; + + if (item != INDEX_CANCEL) + { + ConvertIntToDecimalStringN(gStringVar1, itemid_get_market_price(item), 0, NUM_CHARS_PRICE); + + //len = StringLength(gStringVar1); + len = 4 - StringLength(gStringVar1); + //len = NUM_CHARS_PRICE - len; + loc = gStringVar4; + + while (len != 0) + { + loc[4-len] = 0; + *loc++; + len--; + } + StringExpandPlaceholders(loc, gText_PokedollarVar1); + BuyMenuPrint(windowId, 1, gStringVar4, 0x69, y, 0, 0, TEXT_SPEED_FF, 1); + } +} +#else +NAKED +static void sub_809B408(u8 windowId, s32 item, u8 y) +{ + asm_unified("\tpush {r4-r6,lr}\n" + "\tsub sp, 0x14\n" + "\tlsls r0, 24\n" + "\tlsrs r6, r0, 24\n" + "\tlsls r2, 24\n" + "\tlsrs r5, r2, 24\n" + "\tmovs r0, 0x2\n" + "\tnegs r0, r0\n" + "\tcmp r1, r0\n" + "\tbeq _0809B480\n" + "\tldr r4, _0809B488 @ =gStringVar1\n" + "\tlsls r0, r1, 16\n" + "\tlsrs r0, 16\n" + "\tbl itemid_get_market_price\n" + "\tadds r1, r0, 0\n" + "\tlsls r1, 16\n" + "\tlsrs r1, 16\n" + "\tadds r0, r4, 0\n" + "\tmovs r2, 0\n" + "\tmovs r3, 0x4\n" + "\tbl ConvertIntToDecimalStringN\n" + "\tadds r0, r4, 0\n" + "\tbl StringLength\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tmovs r1, 0x4\n" + "\tsubs r1, r0\n" + "\tldr r2, _0809B48C @ =gStringVar4\n" + "\tadds r0, r1, 0\n" + "\tsubs r1, 0x1\n" + "\tcmp r0, 0\n" + "\tbeq _0809B45C\n" + "\tmovs r3, 0\n" + "_0809B450:\n" + "\tstrb r3, [r2]\n" + "\tadds r2, 0x1\n" + "\tadds r0, r1, 0\n" + "\tsubs r1, 0x1\n" + "\tcmp r0, 0\n" + "\tbne _0809B450\n" + "_0809B45C:\n" + "\tldr r1, _0809B490 @ =gText_PokedollarVar1\n" + "\tadds r0, r2, 0\n" + "\tbl StringExpandPlaceholders\n" + "\tldr r2, _0809B48C @ =gStringVar4\n" + "\tstr r5, [sp]\n" + "\tmovs r0, 0\n" + "\tstr r0, [sp, 0x4]\n" + "\tstr r0, [sp, 0x8]\n" + "\tmovs r0, 0xFF\n" + "\tstr r0, [sp, 0xC]\n" + "\tmovs r0, 0x1\n" + "\tstr r0, [sp, 0x10]\n" + "\tadds r0, r6, 0\n" + "\tmovs r1, 0\n" + "\tmovs r3, 0x69\n" + "\tbl BuyMenuPrint\n" + "_0809B480:\n" + "\tadd sp, 0x14\n" + "\tpop {r4-r6}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t_0809B488: .4byte gStringVar1\n" + "\t_0809B48C: .4byte gStringVar4\n" + "\t_0809B490: .4byte gText_PokedollarVar1\n"); +} +#endif + + +/*=================================== +MATCHED/TESTED UP UNTIL HERE +===================================*/ + +//LoadTmHmNameInMart +static void sub_809B494(s32 item) +{ + if (item != INDEX_CANCEL) + { + ConvertIntToDecimalStringN(gStringVar1, item - ITEM_DEVON_SCOPE, 2, 2); + StringCopy(gStringVar4, gOtherText_UnkF9_08_Clear_01); + StringAppend(gStringVar4, gStringVar1); + BuyMenuPrint(6, 0, gStringVar4, 0, 0, 0, 0, TEXT_SPEED_FF, 1); + StringCopy(gStringVar4, gMoveNames[ItemIdToBattleMoveId(item)]); + BuyMenuPrint(6, 2, gStringVar4, 0, 0x10, 0, 0, 0, 1); + } + else + { + BuyMenuPrint(6, 0, gText_ThreeHyphens, 0, 0, 0, 0, TEXT_SPEED_FF, 1); + BuyMenuPrint(6, 2, gText_SevenHyphens, 0, 0x10, 0, 0, 0, 1); + } +} + +//GetMartUnk16_4 +u8 sub_809B56C(void) +{ + return gShopData.unk16_4; +} + +//BuyMenuPrintCursor +static void sub_809B57C(u8 listTaskId, u8 a1) +{ + sub_809B59C(ListMenuGetYCoordForPrintingArrowCursor(listTaskId), a1); +} + +static void sub_809B59C(u8 y, u8 a1) +{ + if (a1 == 0xFF) + { + FillWindowPixelRect(4, 0, 1, y, GetFontAttribute(2, FONTATTR_MAX_LETTER_WIDTH), GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT)); + CopyWindowToVram(4, 2); + } + else + { + BuyMenuPrint(4, 2, gFameCheckerText_ListMenuCursor, 1, y, 0, 0, 0, a1); + } +} + +//BuyMenuFreeMemory +static void sub_809B604(void) +{ + if (gUnknown_2039954 != 0) + Free(gUnknown_2039954); + + if (gUnknown_2039958 != 0) + Free(gUnknown_2039958); + + if (gUnknown_203995C != 0) + Free(gUnknown_203995C); + + if (gUnknown_2039960 != 0) + Free(gUnknown_2039960); + + if (gUnknown_2039964 != 0) + Free(gUnknown_2039964); + + if (gUnknown_2039968 != 0) + Free(gUnknown_2039968); + + FreeAllWindowBuffers(); +} + +//SetShopExitCallback +static void sub_809B670(void) +{ + gFieldCallback = sub_809AD74; + SetMainCallback2(CB2_ReturnToField); +} + + +//BuyMenuAddScrollIndicatorArrows +static void sub_809B690(void) +{ + if (gShopData.martType != MART_TYPE_TMHM) + { + gShopData.unk16_11 = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 160, 8, 104, + (gShopData.itemCount - gShopData.field12) + 1, 110, 110, &gShopData.scrollOffset); + } + else + { + gShopData.unk16_11 = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 160, 8, 88, + (gShopData.itemCount - gShopData.field12) + 1, 110, 110, &gShopData.scrollOffset); + } +} + +//BuyQuantityAddScrollIndicatorArrows +static void sub_809B6FC(void) +{ + gShopData.unk18 = 1; + gShopData.unk16_11 = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 0x98, 0x48, 0x68, 2, 0x6E, 0x6E, &gShopData.unk18); +} + +//BuyMenuRemoveScrollIndicatorArrows +static void sub_809B73C(void) +{ + if ((gShopData.unk16_11) == 0x1F) + return; + + RemoveScrollIndicatorArrowPair(gShopData.unk16_11); + gShopData.unk16_11 = 0x1F; +} + +static void sub_809B764(void) +{ + sub_809B92C(); + sub_809BA40(); + sub_809B778(); +} + +//BuyMenuDrawMapBg +static void sub_809B778(void) +{ + s16 i; + s16 j; + s16 x; + s16 y; + const struct MapData *mapData; + u16 metatile; + u8 metatileLayerType; + + mapData = gMapHeader.mapData; + GetXYCoordsOneStepInFrontOfPlayer(&x, &y); + x -= 2; + y -= 3; + + for (j = 0; j < 10; j++) + { + for (i = 0; i < 5; i++) + { + metatile = MapGridGetMetatileIdAt(x + i, y + j); + metatileLayerType = MapGridGetMetatileLayerTypeAt(x + i, y + j); + + if (metatile < NUM_METATILES_IN_PRIMARY) + { + sub_809B850(i, j, (u16*)mapData->primaryTileset->metatiles + metatile * 8, metatileLayerType); + } + else + { + sub_809B850(i, j, (u16*)mapData->secondaryTileset->metatiles + ((metatile - NUM_METATILES_IN_PRIMARY) * 8), metatileLayerType); + } + } + } +} + +//BuyMenuDrawMapMetatile +static void sub_809B850(s16 x, s16 y, const u16 *src, u8 metatileLayerType) +{ + u16 offset1 = x * 2; + u16 offset2 = ((y << 0x16) + 0x400000) >> 0x10; + + switch (metatileLayerType) + { + case 0: + sub_809B904(*gUnknown_2039960, offset1, offset2, src); + sub_809B904(*gUnknown_2039958, offset1, offset2, src + 4); + break; + case 1: + sub_809B904(*gUnknown_203995C, offset1, offset2, src); + sub_809B904(*gUnknown_2039960, offset1, offset2, src + 4); + break; + case 2: + sub_809B904(*gUnknown_203995C, offset1, offset2, src); + sub_809B904(*gUnknown_2039958, offset1, offset2, src + 4); + break; + } +} + +//BuyMenuDrawMapMetatileLayer +static void sub_809B904(u16 *dest, s16 offset1, s16 offset2, const u16 *src) +{ + // This function draws a whole 2x2 metatile. + dest[offset1 + offset2] = src[0]; // top left + dest[offset1 + offset2 + 1] = src[1]; // top right + dest[offset1 + offset2 + 32] = src[2]; // bottom left + dest[offset1 + offset2 + 33] = src[3]; // bottom right +} + + +// BuyMenuCollectEventObjectData(void) +#ifdef NONMATCHING +static void sub_809B92C(void) +{ + s16 facingX; + s16 facingY; + u8 y; + u8 x; + u8 num = 0; + u8 z; + + GetXYCoordsOneStepInFrontOfPlayer(&facingX, &facingY); + z = PlayerGetZCoord(); + + for (y = 0; y < MAP_OBJECTS_COUNT; y++) + gUnknown_20398B4[y].eventObjId = MAP_OBJECTS_COUNT; + + for (y = 0; y < 5; y++) + { + for (x = 0; x < 7; x++) + { + u8 eventObjId = GetFieldObjectIdByXYZ(facingX - 4 + x, facingY - 2 + y, z); + if (eventObjId != MAP_OBJECTS_COUNT) + { + gUnknown_20398B4[num].eventObjId = eventObjId; + gUnknown_20398B4[num].x = x; + gUnknown_20398B4[num].y = y; + //gUnknown_20398B4[num].layerType = MapGridGetMetatileLayerTypeAt(facingX - 4 + x, facingY - 2 + y); + + switch (gMapObjects[eventObjId].facingDirection) + { + case DIR_SOUTH: + gUnknown_20398B4[num].animNum = 0; + break; + case DIR_NORTH: + gUnknown_20398B4[num].animNum = 1; + break; + case DIR_WEST: + gUnknown_20398B4[num].animNum = 2; + break; + case DIR_EAST: + default: + gUnknown_20398B4[num].animNum = 3; + break; + } + num++; + } + } + } +} +#else +NAKED +static void sub_809B92C(void) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r10\n" + "\tmov r6, r9\n" + "\tmov r5, r8\n" + "\tpush {r5-r7}\n" + "\tsub sp, 0x8\n" + "\tmovs r0, 0\n" + "\tmov r9, r0\n" + "\tmov r4, sp\n" + "\tadds r4, 0x2\n" + "\tmov r0, sp\n" + "\tadds r1, r4, 0\n" + "\tbl GetXYCoordsOneStepInFrontOfPlayer\n" + "\tbl PlayerGetZCoord\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tstr r0, [sp, 0x4]\n" + "\tmovs r5, 0\n" + "\tldr r2, _0809B9DC @ =gUnknown_20398B4\n" + "\tmovs r1, 0x10\n" + "_0809B958:\n" + "\tlsls r0, r5, 3\n" + "\tadds r0, r2\n" + "\tstrh r1, [r0]\n" + "\tadds r0, r5, 0x1\n" + "\tlsls r0, 24\n" + "\tlsrs r5, r0, 24\n" + "\tcmp r5, 0xF\n" + "\tbls _0809B958\n" + "\tmovs r5, 0\n" + "\tldr r6, _0809B9E0 @ =gUnknown_20398BA\n" + "\tsubs r1, r6, 0x6\n" + "\tmov r8, r1\n" + "_0809B970:\n" + "\tmovs r4, 0\n" + "\tadds r2, r5, 0x1\n" + "\tmov r10, r2\n" + "_0809B976:\n" + "\tmov r1, sp\n" + "\tldr r3, _0809B9E4 @ =0x0000fffd\n" + "\tadds r0, r3, 0\n" + "\tldrh r1, [r1]\n" + "\tadds r0, r1\n" + "\tadds r0, r4\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tldr r2, _0809B9E8 @ =0x0000fffe\n" + "\tadds r1, r2, 0\n" + "\tmov r3, sp\n" + "\tldrh r3, [r3, 0x2]\n" + "\tadds r1, r3\n" + "\tadds r1, r5\n" + "\tlsls r1, 16\n" + "\tlsrs r1, 16\n" + "\tldr r2, [sp, 0x4]\n" + "\tbl GetFieldObjectIdByXYZ\n" + "\tlsls r0, 24\n" + "\tlsrs r3, r0, 24\n" + "\tcmp r3, 0x10\n" + "\tbeq _0809BA1C\n" + "\tmov r0, r9\n" + "\tlsls r2, r0, 3\n" + "\tmov r1, r8\n" + "\tadds r0, r2, r1\n" + "\tmovs r7, 0\n" + "\tstrh r3, [r0]\n" + "\tmov r0, r8\n" + "\tadds r0, 0x2\n" + "\tadds r0, r2, r0\n" + "\tstrh r4, [r0]\n" + "\tldr r1, _0809B9EC @ =gUnknown_20398B8\n" + "\tadds r0, r2, r1\n" + "\tstrh r5, [r0]\n" + "\tldr r1, _0809B9F0 @ =gMapObjects\n" + "\tlsls r0, r3, 3\n" + "\tadds r0, r3\n" + "\tlsls r0, 2\n" + "\tadds r0, r1\n" + "\tldrb r0, [r0, 0x18]\n" + "\tlsls r0, 28\n" + "\tlsrs r0, 28\n" + "\tcmp r0, 0x2\n" + "\tbeq _0809BA00\n" + "\tcmp r0, 0x2\n" + "\tbgt _0809B9F4\n" + "\tcmp r0, 0x1\n" + "\tbeq _0809B9FA\n" + "\tb _0809BA0C\n" + "\t.align 2, 0\n" + "_0809B9DC: .4byte gUnknown_20398B4\n" + "_0809B9E0: .4byte gUnknown_20398BA\n" + "_0809B9E4: .4byte 0x0000fffd\n" + "_0809B9E8: .4byte 0x0000fffe\n" + "_0809B9EC: .4byte gUnknown_20398B8\n" + "_0809B9F0: .4byte gMapObjects\n" + "_0809B9F4:\n" + "\tcmp r0, 0x3\n" + "\tbeq _0809BA06\n" + "\tb _0809BA0C\n" + "_0809B9FA:\n" + "\tadds r0, r2, r6\n" + "\tstrh r7, [r0]\n" + "\tb _0809BA12\n" + "_0809BA00:\n" + "\tadds r1, r2, r6\n" + "\tmovs r0, 0x1\n" + "\tb _0809BA10\n" + "_0809BA06:\n" + "\tadds r1, r2, r6\n" + "\tmovs r0, 0x2\n" + "\tb _0809BA10\n" + "_0809BA0C:\n" + "\tadds r1, r2, r6\n" + "\tmovs r0, 0x3\n" + "_0809BA10:\n" + "\tstrh r0, [r1]\n" + "_0809BA12:\n" + "\tmov r0, r9\n" + "\tadds r0, 0x1\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tmov r9, r0\n" + "_0809BA1C:\n" + "\tadds r0, r4, 0x1\n" + "\tlsls r0, 24\n" + "\tlsrs r4, r0, 24\n" + "\tcmp r4, 0x6\n" + "\tbls _0809B976\n" + "\tmov r2, r10\n" + "\tlsls r0, r2, 24\n" + "\tlsrs r5, r0, 24\n" + "\tcmp r5, 0x4\n" + "\tbls _0809B970\n" + "\tadd sp, 0x8\n" + "\tpop {r3-r5}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tmov r10, r5\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n"); +} +#endif + +//BuyMenuDrawEventObjects +static void sub_809BA40(void) +{ + u8 i; + u8 spriteId; + const struct MapObjectGraphicsInfo *graphicsInfo; + + for (i = 0; i < MAP_OBJECTS_COUNT; i++) + { + if (gUnknown_20398B4[i][EVENT_OBJ_ID] == MAP_OBJECTS_COUNT) + continue; + + graphicsInfo = GetFieldObjectGraphicsInfo(gMapObjects[gUnknown_20398B4[i][EVENT_OBJ_ID]].graphicsId); + spriteId = AddPseudoEventObject( + gMapObjects[gUnknown_20398B4[i][EVENT_OBJ_ID]].graphicsId, + SpriteCallbackDummy, + (((u16)gUnknown_20398B4[i][X_COORD] << 0x14) + 0xFFF80000) >> 0x10, + (u16)gUnknown_20398B4[i][Y_COORD] * 16 + 48 - graphicsInfo->height / 2, + 2); + StartSpriteAnim(&gSprites[spriteId], gUnknown_20398B4[i][ANIM_NUM]); + } +} + +static void sub_809BAFC(void) +{ + s16 i; + + u16 *dst = *gUnknown_2039958; + u16 *src = *gUnknown_2039954; + + for (i = 0; i < 0x400; i++) + { + if (src[i] == 0) + continue; + dst[i] = src[i] + 0xb3dc; + } +} + +//BuyMenuPrintItemQuantityAndPrice +static void sub_809BB44(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + FillWindowPixelBuffer(3, PIXEL_FILL(1)); + PrintMoneyAmount(3, 0x36, 0xA, gShopData.itemPrice, TEXT_SPEED_FF); + ConvertIntToDecimalStringN(gStringVar1, tItemCount, STR_CONV_MODE_LEADING_ZEROS, 2); + StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); + BuyMenuPrint(3, 0, gStringVar4, 2, 0xA, 0, 0, 0, 1); +} + +//Task_BuyMenu +static void sub_809BBC0(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + if (!gPaletteFade.active) + { + s32 itemId = ListMenu_ProcessInput(tListTaskId); + ListMenuGetScrollAndRow(tListTaskId, &gShopData.scrollOffset, &gShopData.selectedRow); + switch (itemId) + { + case LIST_NOTHING_CHOSEN: + break; + case LIST_CANCEL: + PlaySE(SE_SELECT); + sub_809C004(taskId); + break; + default: + PlaySE(SE_SELECT); + tItemId = itemId; + ClearWindowTilemap(5); + sub_809B73C(); + sub_809B57C(tListTaskId, 2); + sub_809B10C(1); + gShopData.itemPrice = itemid_get_market_price(itemId); + if (!IsEnoughMoney(&gSaveBlock1Ptr->money, gShopData.itemPrice)) + { + BuyMenuDisplayMessage(taskId, gText_YouDontHaveMoney, sub_809BF98); + } + else + { + CopyItemName(itemId, gStringVar1); + BuyMenuDisplayMessage(taskId, gText_Var1CertainlyHowMany, sub_809BCA0); + } + } + } +} + +//Task_BuyHowManyDialogueInit +static void sub_809BCA0(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + u16 quantityInBag = BagGetQuantityByItemId(tItemId); + u16 maxQuantity; + + BuyMenuQuantityBoxThinBorder(1, 0); + ConvertIntToDecimalStringN(gStringVar1, quantityInBag, STR_CONV_MODE_RIGHT_ALIGN, 3); + StringExpandPlaceholders(gStringVar4, gText_InBagVar1); + BuyMenuPrint(1, 2, gStringVar4, 0, 2, 0, 0, 0, 1); + tItemCount = 1; + BuyMenuQuantityBoxNormalBorder(3, 0); + sub_809BB44(taskId); + ScheduleBgCopyTilemapToVram(0); + maxQuantity = GetMoney(&gSaveBlock1Ptr->money) / itemid_get_market_price(tItemId); + if (maxQuantity > 99) + gShopData.maxQuantity = (u8)99; + else + gShopData.maxQuantity = (u8)maxQuantity; + + if (maxQuantity != 1) + sub_809B6FC(); + + gTasks[taskId].func = sub_809BD8C; +} + +//Task_BuyHowManyDialogueHandleInput +static void sub_809BD8C(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + + if (AdjustQuantityAccordingToDPadInput(&tItemCount, gShopData.maxQuantity) == TRUE) + { + gShopData.itemPrice = itemid_get_market_price(tItemId) * tItemCount; + sub_809BB44(taskId); + } + else + { + if (JOY_NEW(A_BUTTON)) + { + PlaySE(SE_SELECT); + sub_809B73C(); + ClearStdWindowAndFrameToTransparent(3, 0); + ClearStdWindowAndFrameToTransparent(1, 0); + ClearWindowTilemap(3); + ClearWindowTilemap(1); + PutWindowTilemap(4); + CopyItemName(tItemId, gStringVar1); + ConvertIntToDecimalStringN(gStringVar2, tItemCount, STR_CONV_MODE_LEFT_ALIGN, 2); + ConvertIntToDecimalStringN(gStringVar3, gShopData.itemPrice, STR_CONV_MODE_LEFT_ALIGN, 8); + BuyMenuDisplayMessage(taskId, gText_Var1AndYouWantedVar2, sub_809BE90); + } + else if (JOY_NEW(B_BUTTON)) + { + PlaySE(SE_SELECT); + sub_809B73C(); + ClearStdWindowAndFrameToTransparent(3, 0); + ClearStdWindowAndFrameToTransparent(1, 0); + ClearWindowTilemap(3); + ClearWindowTilemap(1); + sub_809BF98(taskId); + } + } +} + +//CreateBuyMenuConfirmPurchaseWindow +static void sub_809BE90(u8 taskId) +{ + BuyMenuConfirmPurchase(taskId, gUnknown_83DF0B4); //sShopBuyMenuYesNoWindowTemplates +} + +//BuyMenuTryMakePurchase +static void sub_809BEA4(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + PutWindowTilemap(4); + if (AddBagItem(tItemId, tItemCount) == TRUE) + { + BuyMenuDisplayMessage(taskId, gText_HereYouGoThankYou, sub_809BF0C); + nullsub_52(taskId); + sub_809C09C(tItemId, tItemCount, 1); + } + else + { + BuyMenuDisplayMessage(taskId, gText_NoMoreRoomForThis, sub_809BF98); + } +} + +//BuyMenuSubtractMoney +static void sub_809BF0C(u8 taskId) +{ + IncrementGameStat(GAME_STAT_SHOPPED); + RemoveMoney(&gSaveBlock1Ptr->money, gShopData.itemPrice); + PlaySE(SE_SHOP); + PrintMoneyAmountInMoneyBox(0, GetMoney(&gSaveBlock1Ptr->money), 0); + gTasks[taskId].func = sub_809BF68; +} + +//Task_ReturnToItemListAfterItemPurchase +static void sub_809BF68(u8 taskId) +{ + if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) + { + PlaySE(SE_SELECT); + sub_809BF98(taskId); + } +} + +//BuyMenuReturnToItemList +static void sub_809BF98(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + ClearDialogWindowAndFrameToTransparent(2, 0); + sub_809B57C(tListTaskId, 1); + sub_809B10C(0); + PutWindowTilemap(4); + PutWindowTilemap(5); + if (gShopData.martType == MART_TYPE_TMHM) + PutWindowTilemap(6); + + ScheduleBgCopyTilemapToVram(0); + sub_809B690(); + gTasks[taskId].func = sub_809BBC0; +} + +//ExitBuyMenu +static void sub_809C004(u8 taskId) +{ + gFieldCallback = sub_809AD74; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + gTasks[taskId].func = sub_809C04C; +} + +//Task_ExitBuyMenu +static void sub_809C04C(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + if (!gPaletteFade.active) + { + DestroyListMenuTask(tListTaskId, 0, 0); + sub_809B604(); + SetMainCallback2(CB2_ReturnToField); + DestroyTask(taskId); + } +} + +static void nullsub_52(u8 taskId) +{ +} + +static void nullsub_53(void) +{ +} + +#ifdef NONMATCHING +void sub_809C09C(u16 item, u16 quantity, u8 a2) +{ + struct Purchase *tmp; + + if (gUnknown_203996C.unkA == a2) + { + tmp = &gUnknown_203996C; + } + else + { + if (gUnknown_203996C.unk16 == a2) + { + tmp = &gUnknown_203996C + 12; + } + else + { + tmp = &gUnknown_203996C + 12; + if (gUnknown_203996C.unkA == 0) + { + tmp = &gUnknown_203996C; + gUnknown_203996C.unkA = a2; + } + } + } + if (tmp->unk4 != 0) + { + gUnknown_203996C.unk9 = 1; + } + + gUnknown_203996C.unk4 = item; + if (gUnknown_203996C.unk6 <= 998) + { + gUnknown_203996C.unk6 += item; + if (item > 999) + gUnknown_203996C.unk6 = 999; + } + if (gUnknown_203996C.unk0 < 999998) + { + gUnknown_203996C.unk0 += ((s16)itemid_get_market_price(item) >> (quantity-1))*quantity; + if (gUnknown_203996C.unk0 > 999999) + gUnknown_203996C.unk0 = 999999; + } +} +#else +NAKED +void sub_809C09C(u16 item, u16 quantity, u8 a2) +{ + asm_unified("\tpush {r4-r6,lr}\n" + "\tlsls r0, 16\n" + "\tlsrs r3, r0, 16\n" + "\tlsls r1, 16\n" + "\tlsrs r6, r1, 16\n" + "\tlsls r2, 24\n" + "\tlsrs r5, r2, 24\n" + "\tldr r1, _0809C0B8 @ =gUnknown_203996C\n" + "\tldrb r2, [r1, 0xA]\n" + "\tcmp r2, r5\n" + "\tbne _0809C0BC\n" + "\tadds r4, r1, 0\n" + "\tb _0809C0D4\n" + "\t.align 2, 0\n" + "_0809C0B8: .4byte gUnknown_203996C\n" + "_0809C0BC:\n" + "\tldrb r0, [r1, 0x16]\n" + "\tcmp r0, r5\n" + "\tbne _0809C0C8\n" + "\tadds r4, r1, 0\n" + "\tadds r4, 0xC\n" + "\tb _0809C0D4\n" + "_0809C0C8:\n" + "\tadds r4, r1, 0\n" + "\tadds r4, 0xC\n" + "\tcmp r2, 0\n" + "\tbne _0809C0D2\n" + "\tadds r4, r1, 0\n" + "_0809C0D2:\n" + "\tstrb r5, [r4, 0xA]\n" + "_0809C0D4:\n" + "\tldrh r0, [r4, 0x4]\n" + "\tcmp r0, 0\n" + "\tbeq _0809C0DE\n" + "\tmovs r0, 0x1\n" + "\tstrb r0, [r4, 0x9]\n" + "_0809C0DE:\n" + "\tstrh r3, [r4, 0x4]\n" + "\tldrh r1, [r4, 0x6]\n" + "\tldr r0, _0809C128 @ =0x000003e6\n" + "\tcmp r1, r0\n" + "\tbhi _0809C0F8\n" + "\tadds r0, r6, r1\n" + "\tstrh r0, [r4, 0x6]\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tldr r1, _0809C12C @ =0x000003e7\n" + "\tcmp r0, r1\n" + "\tbls _0809C0F8\n" + "\tstrh r1, [r4, 0x6]\n" + "_0809C0F8:\n" + "\tldr r1, [r4]\n" + "\tldr r0, _0809C130 @ =0x000f423e\n" + "\tcmp r1, r0\n" + "\tbhi _0809C120\n" + "\tadds r0, r3, 0\n" + "\tbl itemid_get_market_price\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tsubs r1, r5, 0x1\n" + "\tasrs r0, r1\n" + "\tadds r1, r0, 0\n" + "\tmuls r1, r6\n" + "\tldr r0, [r4]\n" + "\tadds r0, r1\n" + "\tstr r0, [r4]\n" + "\tldr r1, _0809C134 @ =0x000f423f\n" + "\tcmp r0, r1\n" + "\tbls _0809C120\n" + "\tstr r1, [r4]\n" + "_0809C120:\n" + "\tpop {r4-r6}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_0809C128: .4byte 0x000003e6\n" + "_0809C12C: .4byte 0x000003e7\n" + "_0809C130: .4byte 0x000f423e\n" + "_0809C134: .4byte 0x000f423f\n"); +} +#endif + +//RecordQuestLogItemPurchase +static void sub_809C138(void) +{ + struct MartHistory *history = &gUnknown_203996C; + u16 v; + + v = history->unkA; + if (v != 0) + sub_8113550(v + 0x24, (const u16*)history); + v = history->unk16; + if (v != 0) + { + v += 0x24; + sub_8113550(v, (const u16*)&history->unkC); + } +} + +void CreatePokemartMenu(const u16 *itemsForSale) +{ + sub_809ABD8(itemsForSale); + sub_809AAB0(MART_TYPE_REGULAR); + sub_809AC04(EnableBothScriptContexts); + nullsub_53(); + memset(&gUnknown_203996C, 0, sizeof(struct MartHistory)); + gUnknown_203996C.unk8 = gMapHeader.regionMapSectionId; + gUnknown_203996C.unk14 = gMapHeader.regionMapSectionId; +} + +void CreateDecorationShop1Menu(const u16 *itemsForSale) +{ + sub_809ABD8(itemsForSale); + sub_809AAB0(MART_TYPE_DECOR); + sub_809AC04(EnableBothScriptContexts); +} + +void CreateDecorationShop2Menu(const u16 *itemsForSale) +{ + sub_809ABD8(itemsForSale); + sub_809AAB0(MART_TYPE_DECOR2); + sub_809AC04(EnableBothScriptContexts); +} + + + + +///////////////////////the following functions belong??//////////////////////////// + +#ifdef NONMATCHING +void sub_809C1D8(u8 taskId, const u16* a1, u16 a2) +{ + +} +#else +NAKED +void sub_809C1D8(u8 taskId, const u16* a1, u16 a2) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r10\n" + "\tmov r6, r9\n" + "\tmov r5, r8\n" + "\tpush {r5-r7}\n" + "\tsub sp, 0x10\n" + "\tmov r9, r1\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tlsls r2, 16\n" + "\tlsrs r2, 16\n" + "\tmov r10, r2\n" + "\tldr r2, _0809C26C @ =gTasks\n" + "\tlsls r1, r0, 2\n" + "\tadds r1, r0\n" + "\tlsls r1, 3\n" + "\tadds r1, r2\n" + "\tldrh r0, [r1, 0x10]\n" + "\tsubs r0, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r5, r0, 16\n" + "\tldrh r0, [r1, 0x12]\n" + "\tsubs r0, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r3, r0, 16\n" + "\tldrh r4, [r1, 0xA]\n" + "\tmovs r2, 0xC\n" + "\tldrsh r0, [r1, r2]\n" + "\tcmp r0, 0\n" + "\tbne _0809C29C\n" + "\tmovs r2, 0\n" + "\tlsls r5, 16\n" + "\tstr r5, [sp, 0xC]\n" + "\tlsls r0, r3, 16\n" + "\tlsls r1, r4, 16\n" + "\tasrs r0, 16\n" + "\tstr r0, [sp]\n" + "\tasrs r1, 16\n" + "\tstr r1, [sp, 0x4]\n" + "\tlsls r0, r1, 1\n" + "\tmov r1, r9\n" + "\tadds r7, r0, r1\n" + "_0809C22C:\n" + "\tmovs r4, 0\n" + "\tlsls r2, 16\n" + "\tmov r8, r2\n" + "\tasrs r0, r2, 16\n" + "\tldr r2, [sp]\n" + "\tadds r6, r2, r0\n" + "_0809C238:\n" + "\tldr r0, [sp, 0xC]\n" + "\tasrs r1, r0, 16\n" + "\tlsls r4, 16\n" + "\tasrs r0, r4, 16\n" + "\tadds r5, r1, r0\n" + "\tadds r0, r5, 0\n" + "\tadds r1, r6, 0\n" + "\tbl MapGridGetMetatileIdAt\n" + "\tmovs r2, 0\n" + "\tldrsh r1, [r7, r2]\n" + "\tlsls r0, 16\n" + "\tasrs r0, 16\n" + "\tcmp r1, r0\n" + "\tbne _0809C280\n" + "\tldr r0, [sp, 0x4]\n" + "\tcmp r0, 0x2\n" + "\tbeq _0809C270\n" + "\tldrh r0, [r7, 0x2]\n" + "\tmov r2, r10\n" + "\torrs r2, r0\n" + "\tadds r0, r5, 0\n" + "\tadds r1, r6, 0\n" + "\tbl MapGridSetMetatileIdAt\n" + "\tb _0809C280\n" + "\t.align 2, 0\n" + "_0809C26C: .4byte gTasks\n" + "_0809C270:\n" + "\tmov r1, r9\n" + "\tldrh r0, [r1]\n" + "\tmov r2, r10\n" + "\torrs r2, r0\n" + "\tadds r0, r5, 0\n" + "\tadds r1, r6, 0\n" + "\tbl MapGridSetMetatileIdAt\n" + "_0809C280:\n" + "\tmovs r2, 0x80\n" + "\tlsls r2, 9\n" + "\tadds r0, r4, r2\n" + "\tlsrs r4, r0, 16\n" + "\tasrs r0, 16\n" + "\tcmp r0, 0x2\n" + "\tble _0809C238\n" + "\tadds r0, r2, 0\n" + "\tadd r0, r8\n" + "\tlsrs r2, r0, 16\n" + "\tasrs r0, 16\n" + "\tcmp r0, 0x2\n" + "\tble _0809C22C\n" + "\tb _0809C324\n" + "_0809C29C:\n" + "\tmovs r2, 0\n" + "\tlsls r5, 16\n" + "\tstr r5, [sp, 0xC]\n" + "\tlsls r0, r3, 16\n" + "\tlsls r1, r4, 16\n" + "\tasrs r0, 16\n" + "\tstr r0, [sp, 0x8]\n" + "\tasrs r7, r1, 16\n" + "_0809C2AC:\n" + "\tmovs r4, 0\n" + "\tlsls r2, 16\n" + "\tmov r8, r2\n" + "\tasrs r0, r2, 16\n" + "\tldr r1, [sp, 0x8]\n" + "\tadds r6, r1, r0\n" + "_0809C2B8:\n" + "\tldr r2, [sp, 0xC]\n" + "\tasrs r1, r2, 16\n" + "\tlsls r4, 16\n" + "\tasrs r0, r4, 16\n" + "\tadds r5, r1, r0\n" + "\tadds r0, r5, 0\n" + "\tadds r1, r6, 0\n" + "\tbl MapGridGetMetatileIdAt\n" + "\tmovs r1, 0x2\n" + "\tsubs r1, r7\n" + "\tlsls r1, 1\n" + "\tadd r1, r9\n" + "\tmovs r2, 0\n" + "\tldrsh r1, [r1, r2]\n" + "\tlsls r0, 16\n" + "\tasrs r0, 16\n" + "\tcmp r1, r0\n" + "\tbne _0809C30A\n" + "\tcmp r7, 0x2\n" + "\tbeq _0809C2FA\n" + "\tmovs r0, 0x1\n" + "\tsubs r0, r7\n" + "\tlsls r0, 1\n" + "\tadd r0, r9\n" + "\tldrh r0, [r0]\n" + "\tmov r2, r10\n" + "\torrs r2, r0\n" + "\tadds r0, r5, 0\n" + "\tadds r1, r6, 0\n" + "\tbl MapGridSetMetatileIdAt\n" + "\tb _0809C30A\n" + "_0809C2FA:\n" + "\tmov r1, r9\n" + "\tldrh r0, [r1, 0x4]\n" + "\tmov r2, r10\n" + "\torrs r2, r0\n" + "\tadds r0, r5, 0\n" + "\tadds r1, r6, 0\n" + "\tbl MapGridSetMetatileIdAt\n" + "_0809C30A:\n" + "\tmovs r2, 0x80\n" + "\tlsls r2, 9\n" + "\tadds r0, r4, r2\n" + "\tlsrs r4, r0, 16\n" + "\tasrs r0, 16\n" + "\tcmp r0, 0x2\n" + "\tble _0809C2B8\n" + "\tadds r0, r2, 0\n" + "\tadd r0, r8\n" + "\tlsrs r2, r0, 16\n" + "\tasrs r0, 16\n" + "\tcmp r0, 0x2\n" + "\tble _0809C2AC\n" + "_0809C324:\n" + "\tadd sp, 0x10\n" + "\tpop {r3-r5}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tmov r10, r5\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n"); +} +#endif + +static void sub_809C334(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + u16 v1; + + data[3] = 1; + switch (data[0]) + { + case 0: + sub_809C1D8(taskId, gUnknown_83DF0D4, 0); + break; + case 1: + sub_809C1D8(taskId, gUnknown_83DF0DA, 0); + break; + case 2: + sub_809C1D8(taskId, gUnknown_83DF0E0, 0xC00); + break; + case 3: + sub_809C1D8(taskId, gUnknown_83DF0E6, 0); + break; + case 4: + sub_809C1D8(taskId, gUnknown_83DF0EC, 0xC00); + break; + case 5: + sub_809C1D8(taskId, gUnknown_83DF0F2, 0); + break; + case 6: + sub_809C1D8(taskId, gUnknown_83DF0F8, 0); + default: + break; + } + data[0] = (data[0] + 1) & 7; + v1 = data[0] & 7; + //ldrh r5, [r4] instead mov r5, r0 somehow + if (v1 == 0) + { + DrawWholeMapView(); + data[1] = (data[1] + 1) % 3; + data[3] = v1; + } +} + +static u8 sub_809C3FC(u16 a0) +{ + u8 taskId; + s16 *data; + + taskId = CreateTask(sub_809C334, 0); + data = gTasks[taskId].data; + PlayerGetDestCoords(&tX, &tItemId); + t0 = 0; + tItemCount = 0; + data[2] = a0; + sub_809C334(taskId); + return taskId; +} + +void sub_809C448(u8 a0) +{ + u8 taskId; + + taskId = sub_809C3FC(a0); + gUnknown_2039984 = taskId; +} + +void sub_809C460(void) +{ + DestroyTask(gUnknown_2039984); +} + +bool8 sub_809C474(void) +{ + if (gTasks[gUnknown_2039984].data[3] == 0) + { + if (gTasks[gUnknown_2039984].data[1] != 2) + return TRUE; + return FALSE; + } + else + { + return TRUE; + } +} + +// special 0x1b5 - creates a tile animaiton one block left two-four up the player +void sub_809C4A8(void) +{ + u8 taskId; + s16 *data; + + taskId = CreateTask(sub_809C500, 0); + + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = 0; + + data = gTasks[taskId].data; + PlayerGetDestCoords(&data[2], &data[3]); + if (gSpecialVar_0x8004 == 0) + { + gTasks[taskId].data[2] += 6; + gTasks[taskId].data[3] -= 5; + } + else + { + gTasks[taskId].data[2]--; + gTasks[taskId].data[3] -= 5; + } +} + +static void sub_809C500(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + if (data[0] == 0) + { + if ((data[1] & 1) == 0) + { + MapGridSetMetatileIdAt(data[2], data[3], 0xEB5); + MapGridSetMetatileIdAt(data[2], data[3] + 2, 0xEB7); + } + else + { + MapGridSetMetatileIdAt(data[2], data[3], 0xEB6); + MapGridSetMetatileIdAt(data[2], data[3] + 2, 0xEB8); + } + CurrentMapDrawMetatileAt(data[2], data[3]); + CurrentMapDrawMetatileAt(data[2], data[3] + 2); + } + + data[0]++; + if (data[0] != 0x10) + return; + data[0] = 0; + + data[0] == 0; + data[1]++; + if (data[1] != 0xD) + return; + + MapGridSetMetatileIdAt(data[2], data[3], 0xE8A); + MapGridSetMetatileIdAt(data[2], data[3] + 2, 0xE96); + CurrentMapDrawMetatileAt(data[2], data[3]); + CurrentMapDrawMetatileAt(data[2], data[3] + 2); + DestroyTask(taskId); +} + +// special 0x1B7 - creates a tile animation two-six blocks right from the top-left corner of the screen +void sub_809C5FC(void) +{ + u8 taskId; + s16 *data; + + taskId = CreateTask(sub_809C640, 0); + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = 0; + + data = gTasks[taskId].data; + PlayerGetDestCoords(&data[2], &data[3]); + gTasks[taskId].data[2] += 4; + gTasks[taskId].data[3] -= 5; +} + +static void sub_809C640(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + if (data[0] == 0) + { + if (data[1] != 0) + { + MapGridSetMetatileIdAt(data[2], data[3], 0xE85); + MapGridSetMetatileIdAt(data[2], data[3] + 1, 0xEB4); + CurrentMapDrawMetatileAt(data[2], data[3]); + CurrentMapDrawMetatileAt(data[2], data[3] + 1); + if (data[1] == 4) + { + DestroyTask(taskId); + return; + } + data[2]--; + } + MapGridSetMetatileIdAt(data[2], data[3], 0xEB9); + MapGridSetMetatileIdAt(data[2], data[3] + 1, 0xEBA); + CurrentMapDrawMetatileAt(data[2], data[3]); + CurrentMapDrawMetatileAt(data[2], data[3] + 1); + } + data[0]++; + if (data[0] == 4) + { + data[0] = 0; + data[1]++; + } +} -- cgit v1.2.3 From 697fabb98aef399d6178051df6a33418b59aa962 Mon Sep 17 00:00:00 2001 From: Evan Date: Sun, 24 Nov 2019 16:27:26 -0700 Subject: format fix --- src/shop.c | 2304 ++++++++++++++++++++++++++++++------------------------------ 1 file changed, 1152 insertions(+), 1152 deletions(-) (limited to 'src') diff --git a/src/shop.c b/src/shop.c index 68e82ea8e..923c7dc45 100644 --- a/src/shop.c +++ b/src/shop.c @@ -47,10 +47,10 @@ enum { - MART_TYPE_REGULAR = 0, - MART_TYPE_TMHM, - MART_TYPE_DECOR, - MART_TYPE_DECOR2, + MART_TYPE_REGULAR = 0, + MART_TYPE_TMHM, + MART_TYPE_DECOR, + MART_TYPE_DECOR2, }; // RAM symbols @@ -59,57 +59,57 @@ enum struct ShopData { - /*0x00*/ void (*callback)(void); - /*0x04*/ const u16 *itemList; - /*0x08*/ u32 itemPrice; - /*0x0C*/ u16 selectedRow; - /*0x0E*/ u16 scrollOffset; - /*0x10*/ u16 itemCount; - /*0x12*/ u16 field12; - /*0x14*/ u16 maxQuantity; - /*0x16*/ u16 martType:4; // 0x1 if tm list + /*0x00*/ void (*callback)(void); + /*0x04*/ const u16 *itemList; + /*0x08*/ u32 itemPrice; + /*0x0C*/ u16 selectedRow; + /*0x0E*/ u16 scrollOffset; + /*0x10*/ u16 itemCount; + /*0x12*/ u16 field12; + /*0x14*/ u16 maxQuantity; + /*0x16*/ u16 martType:4; // 0x1 if tm list u16 unk16_4:5; u16 itemSlot:2; - u16 unk16_11:5; - /*0x18*/ u16 unk18; - //INCOMPLETE + u16 unk16_11:5; + /*0x18*/ u16 unk18; + //INCOMPLETE }; struct MartHistory { - /*0x00*/ u32 unk0; + /*0x00*/ u32 unk0; /*0x04*/ u16 unk4; /*0x06*/ u16 unk6; /*0x08*/ u8 unk8; /*0x09*/ u8 unk9; - /*0x0A*/ u8 unkA; - /*0x0B*/ u8 unkB; + /*0x0A*/ u8 unkA; + /*0x0B*/ u8 unkB; /*0x0C*/ u16 unkC; /*0x0E*/ u8 unkE[6]; - /*0x14*/ u8 unk14; - /*0x15*/ u8 unk15; - /*0x16*/ u8 unk16; - /*0x17*/ u8 unk17; + /*0x14*/ u8 unk14; + /*0x15*/ u8 unk15; + /*0x16*/ u8 unk16; + /*0x17*/ u8 unk17; }; /* size = 0x18 */ EWRAM_DATA struct ShopData gShopData = {0}; -EWRAM_DATA u8 gUnknown_2039950 = 0; //sShopMenuWindowId +EWRAM_DATA u8 gUnknown_2039950 = 0; //sShopMenuWindowId -EWRAM_DATA u16 (*gUnknown_2039954)[0x400] = {0}; //gShopTilemapBuffers +EWRAM_DATA u16 (*gUnknown_2039954)[0x400] = {0}; //gShopTilemapBuffers EWRAM_DATA u16 (*gUnknown_2039958)[0x400] = {0}; EWRAM_DATA u16 (*gUnknown_203995C)[0x400] = {0}; EWRAM_DATA u16 (*gUnknown_2039960)[0x400] = {0}; /* -EWRAM_DATA struct ShopTilemapBuffers *gUnknown_2039954 = 0; //gShopTilemapBuffers +EWRAM_DATA struct ShopTilemapBuffers *gUnknown_2039954 = 0; //gShopTilemapBuffers EWRAM_DATA struct ShopTilemapBuffers *gUnknown_2039958 = 0; EWRAM_DATA struct ShopTilemapBuffers *gUnknown_203995C = 0; EWRAM_DATA struct ShopTilemapBuffers *gUnknown_2039960 = 0; */ EWRAM_DATA struct ListMenuItem *gUnknown_2039964 = {0}; -EWRAM_DATA u8 (*gUnknown_2039968)[13] = {0}; //item strings +EWRAM_DATA u8 (*gUnknown_2039968)[13] = {0}; //item strings -EWRAM_DATA s16 gUnknown_20398B4[MAP_OBJECTS_COUNT][4] = {0}; //sViewportMapObjects +EWRAM_DATA s16 gUnknown_20398B4[MAP_OBJECTS_COUNT][4] = {0}; //sViewportMapObjects EWRAM_DATA struct MartHistory gUnknown_203996C = {0}; EWRAM_DATA u8 gUnknown_2039984 = 0; @@ -128,16 +128,16 @@ static void sub_809AD24(void); static void sub_809AD40(u8 taskId); static void sub_809AD74(void); static void sub_809AD8C(u8 taskId); -static void sub_809ADC0(u8 taskId); //ShowShopMenuAfterExitingBuyOrSellMenu +static void sub_809ADC0(u8 taskId); //ShowShopMenuAfterExitingBuyOrSellMenu static void sub_809ADE4(void); static void sub_809AE00(void); static void sub_809AE14(void); static bool8 sub_809AF6C(void); -static void sub_809AFD0(void); //BuyMenuInitBgs +static void sub_809AFD0(void); //BuyMenuInitBgs static void sub_809B080(void); static void sub_809B10C(bool32 a0); -static void sub_809B15C(void); //BuyMenuDrawGraphics(); -static bool8 sub_809B188(void); //BuyMenuBuildListMenuTemplate +static void sub_809B15C(void); //BuyMenuDrawGraphics(); +static bool8 sub_809B188(void); //BuyMenuBuildListMenuTemplate static void sub_809B300(struct ListMenuItem *list, u16 index, u8* dst); static void sub_809B320(s32 item, bool8 onInit, struct ListMenu *list); static void sub_809B408(u8 windowId, s32 itemId, u8 y); @@ -196,75 +196,75 @@ extern const u16 gUnknown_83DF0F8[]; */ //graphics -extern const u32 gUnknown_8E85DC8[]; //gBuyMenuFrame_Gfx[]; -extern const u32 gUnknown_8E85EFC[]; //gBuyMenuFrame_Tilemap -extern const u32 gUnknown_8E86038[]; //gBuyMenuFrame_TmHmTilemap -extern const u32 gUnknown_8E86170[]; //gBuyMenuFrame_Pal +extern const u32 gUnknown_8E85DC8[]; //gBuyMenuFrame_Gfx[]; +extern const u32 gUnknown_8E85EFC[]; //gBuyMenuFrame_Tilemap +extern const u32 gUnknown_8E86038[]; //gBuyMenuFrame_TmHmTilemap +extern const u32 gUnknown_8E86170[]; //gBuyMenuFrame_Pal -static const struct MenuAction gUnknown_83DF09C[] = // sShopMenuActions_BuySellQuit +static const struct MenuAction gUnknown_83DF09C[] = // sShopMenuActions_BuySellQuit { - {gText_ShopBuy, {.void_u8 = sub_809AC5C}}, - {gText_ShopSell, {.void_u8 = sub_809AC98}}, - {gText_ShopQuit, {.void_u8 = sub_809ACF8}} + {gText_ShopBuy, {.void_u8 = sub_809AC5C}}, + {gText_ShopSell, {.void_u8 = sub_809AC98}}, + {gText_ShopQuit, {.void_u8 = sub_809ACF8}} }; -static const struct YesNoFuncTable gUnknown_83DF0B4[] = //sShopMenuActions_BuyQuit +static const struct YesNoFuncTable gUnknown_83DF0B4[] = //sShopMenuActions_BuyQuit { - sub_809BEA4, //Task_HandleShopMenuBuy, - sub_809BF98 //Task_HandleShopMenuQuit + sub_809BEA4, //Task_HandleShopMenuBuy, + sub_809BF98 //Task_HandleShopMenuQuit }; -static const struct WindowTemplate gUnknown_83DF0BC[] = //sShopMenuWindowTemplates +static const struct WindowTemplate gUnknown_83DF0BC[] = //sShopMenuWindowTemplates { { - .bg = 0, - .tilemapLeft = 2, - .tilemapTop = 1, - .width = 12, - .height = 6, - .paletteNum = 15, - .baseBlock = 8 - } -}; - -static const struct BgTemplate gUnknown_83DF0C4[] = //sShopBuyMenuBgTemplates + .bg = 0, + .tilemapLeft = 2, + .tilemapTop = 1, + .width = 12, + .height = 6, + .paletteNum = 15, + .baseBlock = 8 + } +}; + +static const struct BgTemplate gUnknown_83DF0C4[] = //sShopBuyMenuBgTemplates { { - .bg = 0, - .charBaseIndex = 2, - .mapBaseIndex = 31, - .screenSize = 0, - .paletteMode = 0, - .priority = 0, - .baseTile = 0 + .bg = 0, + .charBaseIndex = 2, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0 }, { - .bg = 1, - .charBaseIndex = 0, - .mapBaseIndex = 30, - .screenSize = 0, - .paletteMode = 0, - .priority = 1, - .baseTile = 0 + .bg = 1, + .charBaseIndex = 0, + .mapBaseIndex = 30, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 }, { - .bg = 2, - .charBaseIndex = 0, - .mapBaseIndex = 29, - .screenSize = 0, - .paletteMode = 0, - .priority = 2, - .baseTile = 0 + .bg = 2, + .charBaseIndex = 0, + .mapBaseIndex = 29, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0 }, { - .bg = 3, - .charBaseIndex = 0, - .mapBaseIndex = 28, - .screenSize = 0, - .paletteMode = 0, - .priority = 3, - .baseTile = 0 + .bg = 3, + .charBaseIndex = 0, + .mapBaseIndex = 28, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0 } }; @@ -281,32 +281,32 @@ static const u16 gUnknown_83DF0F8[] = {0x02eb, 0x031e, 0x031c}; // CreateShopMenu static u8 sub_809AAB0(u8 a0) { - gShopData.martType = sub_809AB7C(a0) & 0xF; - gShopData.selectedRow = 0; - if (!(ContextNpcGetTextColor())) - gShopData.unk16_4 = 4; - else - gShopData.unk16_4 = 5; - - gUnknown_2039950 = AddWindow(gUnknown_83DF0BC); //sShopMenuWindowTemplates - SetStdWindowBorderStyle(gUnknown_2039950, 0); - PrintTextArray(gUnknown_2039950, 2, GetMenuCursorDimensionByFont(2, 0), 2, 16, 3, gUnknown_83DF09C); - Menu_InitCursor(gUnknown_2039950, 2, 0, 2, 16, 3, 0); - PutWindowTilemap(gUnknown_2039950); - CopyWindowToVram(gUnknown_2039950, 1); - return CreateTask(sub_809AC10, 8); + gShopData.martType = sub_809AB7C(a0) & 0xF; + gShopData.selectedRow = 0; + if (!(ContextNpcGetTextColor())) + gShopData.unk16_4 = 4; + else + gShopData.unk16_4 = 5; + + gUnknown_2039950 = AddWindow(gUnknown_83DF0BC); //sShopMenuWindowTemplates + SetStdWindowBorderStyle(gUnknown_2039950, 0); + PrintTextArray(gUnknown_2039950, 2, GetMenuCursorDimensionByFont(2, 0), 2, 16, 3, gUnknown_83DF09C); + Menu_InitCursor(gUnknown_2039950, 2, 0, 2, 16, 3, 0); + PutWindowTilemap(gUnknown_2039950); + CopyWindowToVram(gUnknown_2039950, 1); + return CreateTask(sub_809AC10, 8); } static u8 sub_809AB7C(u32 a0) -{ - u16 retVal, i; - if (a0) +{ + u16 retVal, i; + if (a0) return (u8)a0; goto MAIN; RETURN_1: return 1; - MAIN: + MAIN: i = 0; if (i >= gShopData.itemCount) goto RETURN_0; @@ -345,192 +345,192 @@ static void sub_809ABD8(const u16 *items) //I really don't know what GameFreak w ++gShopData.itemCount; //i = gShopData.itemCount; //} while (mart->itemList[i]); - } while (mart->itemList[gShopData.itemCount]); + } while (mart->itemList[gShopData.itemCount]); } //SetShopMenuCallback static void sub_809AC04(MainCallback callback) { - gShopData.callback = callback; + gShopData.callback = callback; } //Task_ShopMenu static void sub_809AC10(u8 taskId) { - s8 input = Menu_ProcessInputNoWrapAround(); - - switch (input) - { - case MENU_NOTHING_CHOSEN: - break; - case MENU_B_PRESSED: - PlaySE(SE_SELECT); - sub_809ACF8(taskId); - break; - default: - gUnknown_83DF09C[Menu_GetCursorPos()].func.void_u8(taskId); - break; - } + s8 input = Menu_ProcessInputNoWrapAround(); + + switch (input) + { + case MENU_NOTHING_CHOSEN: + break; + case MENU_B_PRESSED: + PlaySE(SE_SELECT); + sub_809ACF8(taskId); + break; + default: + gUnknown_83DF09C[Menu_GetCursorPos()].func.void_u8(taskId); + break; + } } //Task_HandleShopMenuBuy static void sub_809AC5C(u8 taskId) { - SetWordTaskArg(taskId, 0xE, (u32)sub_809AE14); - fade_screen(1, 0); - gTasks[taskId].func = sub_809AD40; + SetWordTaskArg(taskId, 0xE, (u32)sub_809AE14); + fade_screen(1, 0); + gTasks[taskId].func = sub_809AD40; } //Task_HandleShopMenuSell static void sub_809AC98(u8 taskId) { - SetWordTaskArg(taskId, 0xE, (u32)sub_809ACD4); - fade_screen(1, 0); - gTasks[taskId].func = sub_809AD40; + SetWordTaskArg(taskId, 0xE, (u32)sub_809ACD4); + fade_screen(1, 0); + gTasks[taskId].func = sub_809AD40; } //CB2_GoToSellMenu static void sub_809ACD4(void) { - sub_8107DB4(2, POCKET_POKE_BALLS, CB2_ReturnToField); - gFieldCallback = sub_809AD74; + sub_8107DB4(2, POCKET_POKE_BALLS, CB2_ReturnToField); + gFieldCallback = sub_809AD74; } //Task_HandleShopMenuQuit static void sub_809ACF8(u8 taskId) { - sub_809AD24(); - sub_809C138(); - DestroyTask(taskId); - if (gShopData.callback != 0) - gShopData.callback(); + sub_809AD24(); + sub_809C138(); + DestroyTask(taskId); + if (gShopData.callback != 0) + gShopData.callback(); } static void sub_809AD24(void) { - ClearStdWindowAndFrameToTransparent(gUnknown_2039950, 2); - RemoveWindow(gUnknown_2039950); + ClearStdWindowAndFrameToTransparent(gUnknown_2039950, 2); + RemoveWindow(gUnknown_2039950); } //Task_GoToBuyOrSellMenu static void sub_809AD40(u8 taskId) { - if (gPaletteFade.active) - return; - SetMainCallback2((void *)GetWordTaskArg(taskId, 0xE)); - FreeAllWindowBuffers(); - DestroyTask(taskId); + if (gPaletteFade.active) + return; + SetMainCallback2((void *)GetWordTaskArg(taskId, 0xE)); + FreeAllWindowBuffers(); + DestroyTask(taskId); } //MapPostLoadHook_ReturnToShopMenu static void sub_809AD74(void) { - sub_807DC00(); - CreateTask(sub_809AD8C, 8); + sub_807DC00(); + CreateTask(sub_809AD8C, 8); } //Task_ReturnToShopMenu static void sub_809AD8C(u8 taskId) { - if (field_weather_is_fade_finished() != TRUE) - return; - DisplayItemMessageOnField(taskId, sub_809B56C(), gText_CanIHelpWithAnythingElse, sub_809ADC0); + if (field_weather_is_fade_finished() != TRUE) + return; + DisplayItemMessageOnField(taskId, sub_809B56C(), gText_CanIHelpWithAnythingElse, sub_809ADC0); } //ShowShopMenuAfterExitingBuyOrSellMenu static void sub_809ADC0(u8 taskId) { - sub_809AAB0(gShopData.martType); - DestroyTask(taskId); + sub_809AAB0(gShopData.martType); + DestroyTask(taskId); } //CB2_BuyMenu static void sub_809ADE4(void) { - RunTasks(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); - DoScheduledBgTilemapCopiesToVram(); + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); + DoScheduledBgTilemapCopiesToVram(); } //VBlankCB_BuyMenu static void sub_809AE00(void) { - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); } //CB2_InitBuyMenu static void sub_809AE14(void) { - u8 taskId; - switch (gMain.state) - { - case 0: - SetVBlankHBlankCallbacksToNull(); - CpuFastFill(0, (void *)OAM, 0x400); - ScanlineEffect_Stop(); - ResetTempTileDataBuffers(); - FreeAllSpritePalettes(); - ResetPaletteFade(); - ResetSpriteData(); - ResetTasks(); - ClearScheduledBgCopiesToVram(); - ResetItemMenuIconState(); - if ((!(sub_809AF6C())) || (!(sub_809B188()))) - return; - sub_809AFD0(); + u8 taskId; + switch (gMain.state) + { + case 0: + SetVBlankHBlankCallbacksToNull(); + CpuFastFill(0, (void *)OAM, 0x400); + ScanlineEffect_Stop(); + ResetTempTileDataBuffers(); + FreeAllSpritePalettes(); + ResetPaletteFade(); + ResetSpriteData(); + ResetTasks(); + ClearScheduledBgCopiesToVram(); + ResetItemMenuIconState(); + if ((!(sub_809AF6C())) || (!(sub_809B188()))) + return; + sub_809AFD0(); FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 0x20, 0x20); FillBgTilemapBufferRect_Palette0(1, 0, 0, 0, 0x20, 0x20); FillBgTilemapBufferRect_Palette0(2, 0, 0, 0, 0x20, 0x20); FillBgTilemapBufferRect_Palette0(3, 0, 0, 0, 0x20, 0x20); - BuyMenuInitWindows(gShopData.martType); - sub_809B080(); - gMain.state++; - break; - case 1: - if (FreeTempTileDataBuffersIfPossible()) - return; - gMain.state++; - break; - default: - gShopData.selectedRow = 0; - gShopData.scrollOffset = 0; - sub_809B15C(); //BuyMenuDrawGraphics(); - sub_809B690(); //BuyMenuAddScrollIndicatorArrows(); - taskId = CreateTask(sub_809BBC0, 8); - gTasks[taskId].tListTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0); - BlendPalettes(0xFFFFFFFF, 0x10, RGB_BLACK); + BuyMenuInitWindows(gShopData.martType); + sub_809B080(); + gMain.state++; + break; + case 1: + if (FreeTempTileDataBuffersIfPossible()) + return; + gMain.state++; + break; + default: + gShopData.selectedRow = 0; + gShopData.scrollOffset = 0; + sub_809B15C(); //BuyMenuDrawGraphics(); + sub_809B690(); //BuyMenuAddScrollIndicatorArrows(); + taskId = CreateTask(sub_809BBC0, 8); + gTasks[taskId].tListTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0); + BlendPalettes(0xFFFFFFFF, 0x10, RGB_BLACK); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK); SetVBlankCallback(sub_809AE00); SetMainCallback2(sub_809ADE4); - break; - } + break; + } } //InitShopData static bool8 sub_809AF6C(void) { - gUnknown_2039954 = Alloc(sizeof(*gUnknown_2039954)); - if (gUnknown_2039954 == 0) - goto CANCEL; - gUnknown_2039958 = Alloc(sizeof(*gUnknown_2039958)); - if (gUnknown_2039958 == 0) - goto CANCEL; - gUnknown_203995C = Alloc(sizeof(*gUnknown_203995C)); - if (gUnknown_203995C == 0) - goto CANCEL; - gUnknown_2039960 = Alloc(sizeof(*gUnknown_2039960)); - if (gUnknown_2039960 == 0) - goto CANCEL; - return TRUE; - - CANCEL: - sub_809B604(); - sub_809B670(); - return FALSE; + gUnknown_2039954 = Alloc(sizeof(*gUnknown_2039954)); + if (gUnknown_2039954 == 0) + goto CANCEL; + gUnknown_2039958 = Alloc(sizeof(*gUnknown_2039958)); + if (gUnknown_2039958 == 0) + goto CANCEL; + gUnknown_203995C = Alloc(sizeof(*gUnknown_203995C)); + if (gUnknown_203995C == 0) + goto CANCEL; + gUnknown_2039960 = Alloc(sizeof(*gUnknown_2039960)); + if (gUnknown_2039960 == 0) + goto CANCEL; + return TRUE; + + CANCEL: + sub_809B604(); + sub_809B670(); + return FALSE; } #ifdef NONMATCHING @@ -538,137 +538,137 @@ static bool8 sub_809AF6C(void) // this matches but adjusts offsets const for some reason... static void sub_809AFD0(void) { - ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, gUnknown_83DF0C4, 4); //NELEMS(gUnknown_83DF0C4)); - SetBgTilemapBuffer(1, gUnknown_2039958); - SetBgTilemapBuffer(2, gUnknown_2039960); - SetBgTilemapBuffer(3, gUnknown_203995C); - SetGpuReg(0x10, 0); - SetGpuReg(0x12, 0); - SetGpuReg(0x14, 0); - SetGpuReg(0x16, 0); - SetGpuReg(0x18, 0); - SetGpuReg(0x1A, 0); - SetGpuReg(0x1C, 0); - SetGpuReg(0x1E, 0); - SetGpuReg(0x50, 0); - SetGpuReg(0, 0x1040); - ShowBg(0); - ShowBg(1); - ShowBg(2); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, gUnknown_83DF0C4, 4); //NELEMS(gUnknown_83DF0C4)); + SetBgTilemapBuffer(1, gUnknown_2039958); + SetBgTilemapBuffer(2, gUnknown_2039960); + SetBgTilemapBuffer(3, gUnknown_203995C); + SetGpuReg(0x10, 0); + SetGpuReg(0x12, 0); + SetGpuReg(0x14, 0); + SetGpuReg(0x16, 0); + SetGpuReg(0x18, 0); + SetGpuReg(0x1A, 0); + SetGpuReg(0x1C, 0); + SetGpuReg(0x1E, 0); + SetGpuReg(0x50, 0); + SetGpuReg(0, 0x1040); + ShowBg(0); + ShowBg(1); + ShowBg(2); } #else NAKED static void sub_809AFD0(void) { - asm_unified("\tpush {lr}\n" - "\tmovs r0, 0\n" - "\tbl ResetBgsAndClearDma3BusyFlags\n" - "\tldr r1, _0809B070 @ =gUnknown_83DF0C4\n" - "\tmovs r0, 0\n" - "\tmovs r2, 0x4\n" - "\tbl InitBgsFromTemplates\n" - "\tldr r0, _0809B074 @ =gUnknown_2039958\n" - "\tldr r1, [r0]\n" - "\tmovs r0, 0x1\n" - "\tbl SetBgTilemapBuffer\n" - "\tldr r0, _0809B078 @ =gUnknown_2039960\n" - "\tldr r1, [r0]\n" - "\tmovs r0, 0x2\n" - "\tbl SetBgTilemapBuffer\n" - "\tldr r0, _0809B07C @ =gUnknown_203995C\n" - "\tldr r1, [r0]\n" - "\tmovs r0, 0x3\n" - "\tbl SetBgTilemapBuffer\n" - "\tmovs r0, 0x10\n" - "\tmovs r1, 0\n" - "\tbl SetGpuReg\n" - "\tmovs r0, 0x12\n" - "\tmovs r1, 0\n" - "\tbl SetGpuReg\n" - "\tmovs r0, 0x14\n" - "\tmovs r1, 0\n" - "\tbl SetGpuReg\n" - "\tmovs r0, 0x16\n" - "\tmovs r1, 0\n" - "\tbl SetGpuReg\n" - "\tmovs r0, 0x18\n" - "\tmovs r1, 0\n" - "\tbl SetGpuReg\n" - "\tmovs r0, 0x1A\n" - "\tmovs r1, 0\n" - "\tbl SetGpuReg\n" - "\tmovs r0, 0x1C\n" - "\tmovs r1, 0\n" - "\tbl SetGpuReg\n" - "\tmovs r0, 0x1E\n" - "\tmovs r1, 0\n" - "\tbl SetGpuReg\n" - "\tmovs r0, 0x50\n" - "\tmovs r1, 0\n" - "\tbl SetGpuReg\n" - "\tmovs r1, 0x82\n" - "\tlsls r1, 5\n" - "\tmovs r0, 0\n" - "\tbl SetGpuReg\n" - "\tmovs r0, 0\n" - "\tbl ShowBg\n" - "\tmovs r0, 0x1\n" - "\tbl ShowBg\n" - "\tmovs r0, 0x2\n" - "\tbl ShowBg\n" - "\tmovs r0, 0x3\n" - "\tbl ShowBg\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" - "_0809B070: .4byte gUnknown_83DF0C4\n" - "_0809B074: .4byte gUnknown_2039958\n" - "_0809B078: .4byte gUnknown_2039960\n" - "_0809B07C: .4byte gUnknown_203995C\n"); + asm_unified("\tpush {lr}\n" + "\tmovs r0, 0\n" + "\tbl ResetBgsAndClearDma3BusyFlags\n" + "\tldr r1, _0809B070 @ =gUnknown_83DF0C4\n" + "\tmovs r0, 0\n" + "\tmovs r2, 0x4\n" + "\tbl InitBgsFromTemplates\n" + "\tldr r0, _0809B074 @ =gUnknown_2039958\n" + "\tldr r1, [r0]\n" + "\tmovs r0, 0x1\n" + "\tbl SetBgTilemapBuffer\n" + "\tldr r0, _0809B078 @ =gUnknown_2039960\n" + "\tldr r1, [r0]\n" + "\tmovs r0, 0x2\n" + "\tbl SetBgTilemapBuffer\n" + "\tldr r0, _0809B07C @ =gUnknown_203995C\n" + "\tldr r1, [r0]\n" + "\tmovs r0, 0x3\n" + "\tbl SetBgTilemapBuffer\n" + "\tmovs r0, 0x10\n" + "\tmovs r1, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r0, 0x12\n" + "\tmovs r1, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r0, 0x14\n" + "\tmovs r1, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r0, 0x16\n" + "\tmovs r1, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r0, 0x18\n" + "\tmovs r1, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r0, 0x1A\n" + "\tmovs r1, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r0, 0x1C\n" + "\tmovs r1, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r0, 0x1E\n" + "\tmovs r1, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r0, 0x50\n" + "\tmovs r1, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r1, 0x82\n" + "\tlsls r1, 5\n" + "\tmovs r0, 0\n" + "\tbl SetGpuReg\n" + "\tmovs r0, 0\n" + "\tbl ShowBg\n" + "\tmovs r0, 0x1\n" + "\tbl ShowBg\n" + "\tmovs r0, 0x2\n" + "\tbl ShowBg\n" + "\tmovs r0, 0x3\n" + "\tbl ShowBg\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_0809B070: .4byte gUnknown_83DF0C4\n" + "_0809B074: .4byte gUnknown_2039958\n" + "_0809B078: .4byte gUnknown_2039960\n" + "_0809B07C: .4byte gUnknown_203995C\n"); } #endif //BuyMenuDecompressBgGraphics static void sub_809B080(void) { - void* pal; - DecompressAndCopyTileDataToVram(1, gUnknown_8E85DC8, 0x480, 0x3DC, 0); - if ((gShopData.martType) != MART_TYPE_TMHM) - LZDecompressWram(gUnknown_8E85EFC, gUnknown_2039954); //gBuyMenuFrame_Tilemap - else - LZDecompressWram(gUnknown_8E86038, gUnknown_2039954); //gBuyMenuFrame_TmHmTilemap - pal = Alloc(0x40); - LZDecompressWram(gUnknown_8E86170, pal); - LoadPalette(pal, 0xB0, 0x20); - LoadPalette(pal + 0x20, 0x60, 0x20); - Free(pal); + void* pal; + DecompressAndCopyTileDataToVram(1, gUnknown_8E85DC8, 0x480, 0x3DC, 0); + if ((gShopData.martType) != MART_TYPE_TMHM) + LZDecompressWram(gUnknown_8E85EFC, gUnknown_2039954); //gBuyMenuFrame_Tilemap + else + LZDecompressWram(gUnknown_8E86038, gUnknown_2039954); //gBuyMenuFrame_TmHmTilemap + pal = Alloc(0x40); + LZDecompressWram(gUnknown_8E86170, pal); + LoadPalette(pal, 0xB0, 0x20); + LoadPalette(pal + 0x20, 0x60, 0x20); + Free(pal); } static void sub_809B10C(bool32 a0) { - u8 v; - if (a0 == FALSE) - v = 0xB; - else - v = 6; - if ((gShopData.martType) != MART_TYPE_TMHM) - SetBgRectPal(1, 0, 0xE, 0x1E, 6, v); - else - SetBgRectPal(1, 0, 0xC, 0x1E, 8, v); - ScheduleBgCopyTilemapToVram(1); + u8 v; + if (a0 == FALSE) + v = 0xB; + else + v = 6; + if ((gShopData.martType) != MART_TYPE_TMHM) + SetBgRectPal(1, 0, 0xE, 0x1E, 6, v); + else + SetBgRectPal(1, 0, 0xC, 0x1E, 8, v); + ScheduleBgCopyTilemapToVram(1); } //BuyMenuDrawGraphics static void sub_809B15C(void) { - sub_809B764(); - sub_809BAFC(); - BuyMenuDrawMoneyBox(); - ScheduleBgCopyTilemapToVram(0); - ScheduleBgCopyTilemapToVram(1); - ScheduleBgCopyTilemapToVram(2); - ScheduleBgCopyTilemapToVram(3); + sub_809B764(); + sub_809BAFC(); + BuyMenuDrawMoneyBox(); + ScheduleBgCopyTilemapToVram(0); + ScheduleBgCopyTilemapToVram(1); + ScheduleBgCopyTilemapToVram(2); + ScheduleBgCopyTilemapToVram(3); } //BuyMenuBuildListMenuTemplate @@ -680,197 +680,197 @@ static bool8 sub_809B188(void) struct ShopData *mart = &gShopData; *list = Alloc((gShopData.itemCount + 1) * sizeof(*gUnknown_2039964)); if (gUnknown_2039964 == 0) - goto FREE_MEMORY; - + goto FREE_MEMORY; + gUnknown_2039968 = Alloc((gShopData.itemCount + 1) * sizeof(*gUnknown_2039968)); if (gUnknown_2039968 == 0) - { - FREE_MEMORY: - sub_809B604(); - sub_809B670(); - return FALSE; - } - + { + FREE_MEMORY: + sub_809B604(); + sub_809B670(); + return FALSE; + } + i = 0; if (i >= mart->itemCount) goto ADD_CANCEL; - - for (i = 0; i < mart->itemCount; i++) - { - sub_809B300(&gUnknown_2039964[i], mart->itemList[i], gUnknown_2039968[i]); //PokeMartWriteNameAndIdAt(u16 a0, u16 a1, u8* a2) - } - + + for (i = 0; i < mart->itemCount; i++) + { + sub_809B300(&gUnknown_2039964[i], mart->itemList[i], gUnknown_2039968[i]); //PokeMartWriteNameAndIdAt(u16 a0, u16 a1, u8* a2) + } + ADD_CANCEL: - StringCopy(gUnknown_2039968[i], gFameCheckerText_Cancel); - gUnknown_2039964[i].label = gUnknown_2039968[i]; + StringCopy(gUnknown_2039968[i], gFameCheckerText_Cancel); + gUnknown_2039964[i].label = gUnknown_2039968[i]; gUnknown_2039964[i].index = -2; gMultiuseListMenuTemplate.items = gUnknown_2039964; gMultiuseListMenuTemplate.totalItems = gShopData.itemCount + 1; - gMultiuseListMenuTemplate.windowId = 4; - gMultiuseListMenuTemplate.header_X = 0; - gMultiuseListMenuTemplate.item_X = 9; - gMultiuseListMenuTemplate.cursor_X = 1; - gMultiuseListMenuTemplate.lettersSpacing = 0; + gMultiuseListMenuTemplate.windowId = 4; + gMultiuseListMenuTemplate.header_X = 0; + gMultiuseListMenuTemplate.item_X = 9; + gMultiuseListMenuTemplate.cursor_X = 1; + gMultiuseListMenuTemplate.lettersSpacing = 0; gMultiuseListMenuTemplate.itemVerticalPadding = 2; - gMultiuseListMenuTemplate.upText_Y = 2; - gMultiuseListMenuTemplate.fontId = 2; + gMultiuseListMenuTemplate.upText_Y = 2; + gMultiuseListMenuTemplate.fontId = 2; gMultiuseListMenuTemplate.fillValue = 0; - gMultiuseListMenuTemplate.cursorPal = GetFontAttribute(2, 5); - gMultiuseListMenuTemplate.cursorShadowPal = GetFontAttribute(2, 7); - gMultiuseListMenuTemplate.moveCursorFunc = sub_809B320; - gMultiuseListMenuTemplate.itemPrintFunc = sub_809B408; - gMultiuseListMenuTemplate.scrollMultiple = 0; - gMultiuseListMenuTemplate.cursorKind = 0; - - if (gShopData.martType == MART_TYPE_TMHM) - v = 5; + gMultiuseListMenuTemplate.cursorPal = GetFontAttribute(2, 5); + gMultiuseListMenuTemplate.cursorShadowPal = GetFontAttribute(2, 7); + gMultiuseListMenuTemplate.moveCursorFunc = sub_809B320; + gMultiuseListMenuTemplate.itemPrintFunc = sub_809B408; + gMultiuseListMenuTemplate.scrollMultiple = 0; + gMultiuseListMenuTemplate.cursorKind = 0; + + if (gShopData.martType == MART_TYPE_TMHM) + v = 5; else v = 6; - - if ((gShopData.itemCount + 1) > v) - gMultiuseListMenuTemplate.maxShowed = v; - else - gMultiuseListMenuTemplate.maxShowed = gShopData.itemCount + 1; - - gShopData.field12 = gMultiuseListMenuTemplate.maxShowed; + + if ((gShopData.itemCount + 1) > v) + gMultiuseListMenuTemplate.maxShowed = v; + else + gMultiuseListMenuTemplate.maxShowed = gShopData.itemCount + 1; + + gShopData.field12 = gMultiuseListMenuTemplate.maxShowed; return TRUE; } //PokeMartWriteNameAndIdAt static void sub_809B300(struct ListMenuItem *list, u16 index, u8* dst) { - CopyItemName(index, dst); - list->label = dst; - list->index = index; + CopyItemName(index, dst); + list->label = dst; + list->index = index; } //BuyMenuPrintItemDescriptionAndShowItemIcon static void sub_809B320(s32 item, bool8 onInit, struct ListMenu *list) { const u8 *description; - + if (onInit != TRUE) PlaySE(SE_SELECT); if (item != INDEX_CANCEL) - description = ItemId_GetDescription(item); + description = ItemId_GetDescription(item); else description = gText_QuitShopping; - + FillWindowPixelBuffer(5, PIXEL_FILL(0)); - if (gShopData.martType != 1) - { - DestroyItemMenuIcon(gShopData.itemSlot ^ 1); - if (item != INDEX_CANCEL) - CreateItemMenuIcon(item, gShopData.itemSlot); - else - CreateItemMenuIcon(ITEM_N_A, gShopData.itemSlot); - gShopData.itemSlot ^= 1; - BuyMenuPrint(5, 2, description, 0, 3, 2, 1, 0, 0); - } - else //TM Mart - { - FillWindowPixelBuffer(6, PIXEL_FILL(0)); - sub_809B494(item); - BuyMenuPrint(5, 2, description, 2, 3, 1, 0, 0, 0); - } + if (gShopData.martType != 1) + { + DestroyItemMenuIcon(gShopData.itemSlot ^ 1); + if (item != INDEX_CANCEL) + CreateItemMenuIcon(item, gShopData.itemSlot); + else + CreateItemMenuIcon(ITEM_N_A, gShopData.itemSlot); + gShopData.itemSlot ^= 1; + BuyMenuPrint(5, 2, description, 0, 3, 2, 1, 0, 0); + } + else //TM Mart + { + FillWindowPixelBuffer(6, PIXEL_FILL(0)); + sub_809B494(item); + BuyMenuPrint(5, 2, description, 2, 3, 1, 0, 0, 0); + } } //BuyMenuPrintPriceInList -#ifdef NONMATCHING //this function was written very strangely.. +#ifdef NONMATCHING //this function was written very strangely.. static void sub_809B408(u8 windowId, s32 item, u8 y) { - u32 len; + u32 len; u8* loc; if (item != INDEX_CANCEL) { ConvertIntToDecimalStringN(gStringVar1, itemid_get_market_price(item), 0, NUM_CHARS_PRICE); - - //len = StringLength(gStringVar1); - len = 4 - StringLength(gStringVar1); + + //len = StringLength(gStringVar1); + len = 4 - StringLength(gStringVar1); //len = NUM_CHARS_PRICE - len; loc = gStringVar4; while (len != 0) - { - loc[4-len] = 0; + { + loc[4-len] = 0; *loc++; - len--; - } - StringExpandPlaceholders(loc, gText_PokedollarVar1); + len--; + } + StringExpandPlaceholders(loc, gText_PokedollarVar1); BuyMenuPrint(windowId, 1, gStringVar4, 0x69, y, 0, 0, TEXT_SPEED_FF, 1); - } + } } #else NAKED static void sub_809B408(u8 windowId, s32 item, u8 y) { - asm_unified("\tpush {r4-r6,lr}\n" - "\tsub sp, 0x14\n" - "\tlsls r0, 24\n" - "\tlsrs r6, r0, 24\n" - "\tlsls r2, 24\n" - "\tlsrs r5, r2, 24\n" - "\tmovs r0, 0x2\n" - "\tnegs r0, r0\n" - "\tcmp r1, r0\n" - "\tbeq _0809B480\n" - "\tldr r4, _0809B488 @ =gStringVar1\n" - "\tlsls r0, r1, 16\n" - "\tlsrs r0, 16\n" - "\tbl itemid_get_market_price\n" - "\tadds r1, r0, 0\n" - "\tlsls r1, 16\n" - "\tlsrs r1, 16\n" - "\tadds r0, r4, 0\n" - "\tmovs r2, 0\n" - "\tmovs r3, 0x4\n" - "\tbl ConvertIntToDecimalStringN\n" - "\tadds r0, r4, 0\n" - "\tbl StringLength\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tmovs r1, 0x4\n" - "\tsubs r1, r0\n" - "\tldr r2, _0809B48C @ =gStringVar4\n" - "\tadds r0, r1, 0\n" - "\tsubs r1, 0x1\n" - "\tcmp r0, 0\n" - "\tbeq _0809B45C\n" - "\tmovs r3, 0\n" - "_0809B450:\n" - "\tstrb r3, [r2]\n" - "\tadds r2, 0x1\n" - "\tadds r0, r1, 0\n" - "\tsubs r1, 0x1\n" - "\tcmp r0, 0\n" - "\tbne _0809B450\n" - "_0809B45C:\n" - "\tldr r1, _0809B490 @ =gText_PokedollarVar1\n" - "\tadds r0, r2, 0\n" - "\tbl StringExpandPlaceholders\n" - "\tldr r2, _0809B48C @ =gStringVar4\n" - "\tstr r5, [sp]\n" - "\tmovs r0, 0\n" - "\tstr r0, [sp, 0x4]\n" - "\tstr r0, [sp, 0x8]\n" - "\tmovs r0, 0xFF\n" - "\tstr r0, [sp, 0xC]\n" - "\tmovs r0, 0x1\n" - "\tstr r0, [sp, 0x10]\n" - "\tadds r0, r6, 0\n" - "\tmovs r1, 0\n" - "\tmovs r3, 0x69\n" - "\tbl BuyMenuPrint\n" - "_0809B480:\n" - "\tadd sp, 0x14\n" - "\tpop {r4-r6}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t_0809B488: .4byte gStringVar1\n" - "\t_0809B48C: .4byte gStringVar4\n" - "\t_0809B490: .4byte gText_PokedollarVar1\n"); + asm_unified("\tpush {r4-r6,lr}\n" + "\tsub sp, 0x14\n" + "\tlsls r0, 24\n" + "\tlsrs r6, r0, 24\n" + "\tlsls r2, 24\n" + "\tlsrs r5, r2, 24\n" + "\tmovs r0, 0x2\n" + "\tnegs r0, r0\n" + "\tcmp r1, r0\n" + "\tbeq _0809B480\n" + "\tldr r4, _0809B488 @ =gStringVar1\n" + "\tlsls r0, r1, 16\n" + "\tlsrs r0, 16\n" + "\tbl itemid_get_market_price\n" + "\tadds r1, r0, 0\n" + "\tlsls r1, 16\n" + "\tlsrs r1, 16\n" + "\tadds r0, r4, 0\n" + "\tmovs r2, 0\n" + "\tmovs r3, 0x4\n" + "\tbl ConvertIntToDecimalStringN\n" + "\tadds r0, r4, 0\n" + "\tbl StringLength\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tmovs r1, 0x4\n" + "\tsubs r1, r0\n" + "\tldr r2, _0809B48C @ =gStringVar4\n" + "\tadds r0, r1, 0\n" + "\tsubs r1, 0x1\n" + "\tcmp r0, 0\n" + "\tbeq _0809B45C\n" + "\tmovs r3, 0\n" + "_0809B450:\n" + "\tstrb r3, [r2]\n" + "\tadds r2, 0x1\n" + "\tadds r0, r1, 0\n" + "\tsubs r1, 0x1\n" + "\tcmp r0, 0\n" + "\tbne _0809B450\n" + "_0809B45C:\n" + "\tldr r1, _0809B490 @ =gText_PokedollarVar1\n" + "\tadds r0, r2, 0\n" + "\tbl StringExpandPlaceholders\n" + "\tldr r2, _0809B48C @ =gStringVar4\n" + "\tstr r5, [sp]\n" + "\tmovs r0, 0\n" + "\tstr r0, [sp, 0x4]\n" + "\tstr r0, [sp, 0x8]\n" + "\tmovs r0, 0xFF\n" + "\tstr r0, [sp, 0xC]\n" + "\tmovs r0, 0x1\n" + "\tstr r0, [sp, 0x10]\n" + "\tadds r0, r6, 0\n" + "\tmovs r1, 0\n" + "\tmovs r3, 0x69\n" + "\tbl BuyMenuPrint\n" + "_0809B480:\n" + "\tadd sp, 0x14\n" + "\tpop {r4-r6}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t_0809B488: .4byte gStringVar1\n" + "\t_0809B48C: .4byte gStringVar4\n" + "\t_0809B490: .4byte gText_PokedollarVar1\n"); } #endif @@ -883,16 +883,16 @@ MATCHED/TESTED UP UNTIL HERE static void sub_809B494(s32 item) { if (item != INDEX_CANCEL) - { - ConvertIntToDecimalStringN(gStringVar1, item - ITEM_DEVON_SCOPE, 2, 2); + { + ConvertIntToDecimalStringN(gStringVar1, item - ITEM_DEVON_SCOPE, 2, 2); StringCopy(gStringVar4, gOtherText_UnkF9_08_Clear_01); StringAppend(gStringVar4, gStringVar1); BuyMenuPrint(6, 0, gStringVar4, 0, 0, 0, 0, TEXT_SPEED_FF, 1); StringCopy(gStringVar4, gMoveNames[ItemIdToBattleMoveId(item)]); BuyMenuPrint(6, 2, gStringVar4, 0, 0x10, 0, 0, 0, 1); } - else - { + else + { BuyMenuPrint(6, 0, gText_ThreeHyphens, 0, 0, 0, 0, TEXT_SPEED_FF, 1); BuyMenuPrint(6, 2, gText_SevenHyphens, 0, 0x10, 0, 0, 0, 1); } @@ -901,102 +901,102 @@ static void sub_809B494(s32 item) //GetMartUnk16_4 u8 sub_809B56C(void) { - return gShopData.unk16_4; + return gShopData.unk16_4; } //BuyMenuPrintCursor static void sub_809B57C(u8 listTaskId, u8 a1) { - sub_809B59C(ListMenuGetYCoordForPrintingArrowCursor(listTaskId), a1); + sub_809B59C(ListMenuGetYCoordForPrintingArrowCursor(listTaskId), a1); } static void sub_809B59C(u8 y, u8 a1) { - if (a1 == 0xFF) - { - FillWindowPixelRect(4, 0, 1, y, GetFontAttribute(2, FONTATTR_MAX_LETTER_WIDTH), GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT)); - CopyWindowToVram(4, 2); - } - else - { - BuyMenuPrint(4, 2, gFameCheckerText_ListMenuCursor, 1, y, 0, 0, 0, a1); - } + if (a1 == 0xFF) + { + FillWindowPixelRect(4, 0, 1, y, GetFontAttribute(2, FONTATTR_MAX_LETTER_WIDTH), GetFontAttribute(2, FONTATTR_MAX_LETTER_HEIGHT)); + CopyWindowToVram(4, 2); + } + else + { + BuyMenuPrint(4, 2, gFameCheckerText_ListMenuCursor, 1, y, 0, 0, 0, a1); + } } //BuyMenuFreeMemory static void sub_809B604(void) { - if (gUnknown_2039954 != 0) - Free(gUnknown_2039954); - - if (gUnknown_2039958 != 0) - Free(gUnknown_2039958); - - if (gUnknown_203995C != 0) - Free(gUnknown_203995C); - - if (gUnknown_2039960 != 0) - Free(gUnknown_2039960); - - if (gUnknown_2039964 != 0) - Free(gUnknown_2039964); - - if (gUnknown_2039968 != 0) - Free(gUnknown_2039968); - - FreeAllWindowBuffers(); + if (gUnknown_2039954 != 0) + Free(gUnknown_2039954); + + if (gUnknown_2039958 != 0) + Free(gUnknown_2039958); + + if (gUnknown_203995C != 0) + Free(gUnknown_203995C); + + if (gUnknown_2039960 != 0) + Free(gUnknown_2039960); + + if (gUnknown_2039964 != 0) + Free(gUnknown_2039964); + + if (gUnknown_2039968 != 0) + Free(gUnknown_2039968); + + FreeAllWindowBuffers(); } //SetShopExitCallback static void sub_809B670(void) { - gFieldCallback = sub_809AD74; - SetMainCallback2(CB2_ReturnToField); + gFieldCallback = sub_809AD74; + SetMainCallback2(CB2_ReturnToField); } //BuyMenuAddScrollIndicatorArrows static void sub_809B690(void) { - if (gShopData.martType != MART_TYPE_TMHM) - { - gShopData.unk16_11 = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 160, 8, 104, - (gShopData.itemCount - gShopData.field12) + 1, 110, 110, &gShopData.scrollOffset); - } - else - { - gShopData.unk16_11 = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 160, 8, 88, - (gShopData.itemCount - gShopData.field12) + 1, 110, 110, &gShopData.scrollOffset); - } + if (gShopData.martType != MART_TYPE_TMHM) + { + gShopData.unk16_11 = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 160, 8, 104, + (gShopData.itemCount - gShopData.field12) + 1, 110, 110, &gShopData.scrollOffset); + } + else + { + gShopData.unk16_11 = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 160, 8, 88, + (gShopData.itemCount - gShopData.field12) + 1, 110, 110, &gShopData.scrollOffset); + } } //BuyQuantityAddScrollIndicatorArrows static void sub_809B6FC(void) { - gShopData.unk18 = 1; - gShopData.unk16_11 = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 0x98, 0x48, 0x68, 2, 0x6E, 0x6E, &gShopData.unk18); + gShopData.unk18 = 1; + gShopData.unk16_11 = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 0x98, 0x48, 0x68, 2, 0x6E, 0x6E, &gShopData.unk18); } //BuyMenuRemoveScrollIndicatorArrows static void sub_809B73C(void) { - if ((gShopData.unk16_11) == 0x1F) - return; - - RemoveScrollIndicatorArrowPair(gShopData.unk16_11); + if ((gShopData.unk16_11) == 0x1F) + return; + + RemoveScrollIndicatorArrowPair(gShopData.unk16_11); gShopData.unk16_11 = 0x1F; } static void sub_809B764(void) { - sub_809B92C(); - sub_809BA40(); - sub_809B778(); + sub_809B92C(); + sub_809BA40(); + sub_809B778(); } //BuyMenuDrawMapBg static void sub_809B778(void) -{ +{ s16 i; s16 j; s16 x; @@ -1072,14 +1072,14 @@ static void sub_809B92C(void) u8 y; u8 x; u8 num = 0; - u8 z; + u8 z; GetXYCoordsOneStepInFrontOfPlayer(&facingX, &facingY); - z = PlayerGetZCoord(); - + z = PlayerGetZCoord(); + for (y = 0; y < MAP_OBJECTS_COUNT; y++) gUnknown_20398B4[y].eventObjId = MAP_OBJECTS_COUNT; - + for (y = 0; y < 5; y++) { for (x = 0; x < 7; x++) @@ -1117,147 +1117,147 @@ static void sub_809B92C(void) NAKED static void sub_809B92C(void) { - asm_unified("\tpush {r4-r7,lr}\n" - "\tmov r7, r10\n" - "\tmov r6, r9\n" - "\tmov r5, r8\n" - "\tpush {r5-r7}\n" - "\tsub sp, 0x8\n" - "\tmovs r0, 0\n" - "\tmov r9, r0\n" - "\tmov r4, sp\n" - "\tadds r4, 0x2\n" - "\tmov r0, sp\n" - "\tadds r1, r4, 0\n" - "\tbl GetXYCoordsOneStepInFrontOfPlayer\n" - "\tbl PlayerGetZCoord\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tstr r0, [sp, 0x4]\n" - "\tmovs r5, 0\n" - "\tldr r2, _0809B9DC @ =gUnknown_20398B4\n" - "\tmovs r1, 0x10\n" - "_0809B958:\n" - "\tlsls r0, r5, 3\n" - "\tadds r0, r2\n" - "\tstrh r1, [r0]\n" - "\tadds r0, r5, 0x1\n" - "\tlsls r0, 24\n" - "\tlsrs r5, r0, 24\n" - "\tcmp r5, 0xF\n" - "\tbls _0809B958\n" - "\tmovs r5, 0\n" - "\tldr r6, _0809B9E0 @ =gUnknown_20398BA\n" - "\tsubs r1, r6, 0x6\n" - "\tmov r8, r1\n" - "_0809B970:\n" - "\tmovs r4, 0\n" - "\tadds r2, r5, 0x1\n" - "\tmov r10, r2\n" - "_0809B976:\n" - "\tmov r1, sp\n" - "\tldr r3, _0809B9E4 @ =0x0000fffd\n" - "\tadds r0, r3, 0\n" - "\tldrh r1, [r1]\n" - "\tadds r0, r1\n" - "\tadds r0, r4\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tldr r2, _0809B9E8 @ =0x0000fffe\n" - "\tadds r1, r2, 0\n" - "\tmov r3, sp\n" - "\tldrh r3, [r3, 0x2]\n" - "\tadds r1, r3\n" - "\tadds r1, r5\n" - "\tlsls r1, 16\n" - "\tlsrs r1, 16\n" - "\tldr r2, [sp, 0x4]\n" - "\tbl GetFieldObjectIdByXYZ\n" - "\tlsls r0, 24\n" - "\tlsrs r3, r0, 24\n" - "\tcmp r3, 0x10\n" - "\tbeq _0809BA1C\n" - "\tmov r0, r9\n" - "\tlsls r2, r0, 3\n" - "\tmov r1, r8\n" - "\tadds r0, r2, r1\n" - "\tmovs r7, 0\n" - "\tstrh r3, [r0]\n" - "\tmov r0, r8\n" - "\tadds r0, 0x2\n" - "\tadds r0, r2, r0\n" - "\tstrh r4, [r0]\n" - "\tldr r1, _0809B9EC @ =gUnknown_20398B8\n" - "\tadds r0, r2, r1\n" - "\tstrh r5, [r0]\n" - "\tldr r1, _0809B9F0 @ =gMapObjects\n" - "\tlsls r0, r3, 3\n" - "\tadds r0, r3\n" - "\tlsls r0, 2\n" - "\tadds r0, r1\n" - "\tldrb r0, [r0, 0x18]\n" - "\tlsls r0, 28\n" - "\tlsrs r0, 28\n" - "\tcmp r0, 0x2\n" - "\tbeq _0809BA00\n" - "\tcmp r0, 0x2\n" - "\tbgt _0809B9F4\n" - "\tcmp r0, 0x1\n" - "\tbeq _0809B9FA\n" - "\tb _0809BA0C\n" - "\t.align 2, 0\n" - "_0809B9DC: .4byte gUnknown_20398B4\n" - "_0809B9E0: .4byte gUnknown_20398BA\n" - "_0809B9E4: .4byte 0x0000fffd\n" - "_0809B9E8: .4byte 0x0000fffe\n" - "_0809B9EC: .4byte gUnknown_20398B8\n" - "_0809B9F0: .4byte gMapObjects\n" - "_0809B9F4:\n" - "\tcmp r0, 0x3\n" - "\tbeq _0809BA06\n" - "\tb _0809BA0C\n" - "_0809B9FA:\n" - "\tadds r0, r2, r6\n" - "\tstrh r7, [r0]\n" - "\tb _0809BA12\n" - "_0809BA00:\n" - "\tadds r1, r2, r6\n" - "\tmovs r0, 0x1\n" - "\tb _0809BA10\n" - "_0809BA06:\n" - "\tadds r1, r2, r6\n" - "\tmovs r0, 0x2\n" - "\tb _0809BA10\n" - "_0809BA0C:\n" - "\tadds r1, r2, r6\n" - "\tmovs r0, 0x3\n" - "_0809BA10:\n" - "\tstrh r0, [r1]\n" - "_0809BA12:\n" - "\tmov r0, r9\n" - "\tadds r0, 0x1\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tmov r9, r0\n" - "_0809BA1C:\n" - "\tadds r0, r4, 0x1\n" - "\tlsls r0, 24\n" - "\tlsrs r4, r0, 24\n" - "\tcmp r4, 0x6\n" - "\tbls _0809B976\n" - "\tmov r2, r10\n" - "\tlsls r0, r2, 24\n" - "\tlsrs r5, r0, 24\n" - "\tcmp r5, 0x4\n" - "\tbls _0809B970\n" - "\tadd sp, 0x8\n" - "\tpop {r3-r5}\n" - "\tmov r8, r3\n" - "\tmov r9, r4\n" - "\tmov r10, r5\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0\n"); + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r10\n" + "\tmov r6, r9\n" + "\tmov r5, r8\n" + "\tpush {r5-r7}\n" + "\tsub sp, 0x8\n" + "\tmovs r0, 0\n" + "\tmov r9, r0\n" + "\tmov r4, sp\n" + "\tadds r4, 0x2\n" + "\tmov r0, sp\n" + "\tadds r1, r4, 0\n" + "\tbl GetXYCoordsOneStepInFrontOfPlayer\n" + "\tbl PlayerGetZCoord\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tstr r0, [sp, 0x4]\n" + "\tmovs r5, 0\n" + "\tldr r2, _0809B9DC @ =gUnknown_20398B4\n" + "\tmovs r1, 0x10\n" + "_0809B958:\n" + "\tlsls r0, r5, 3\n" + "\tadds r0, r2\n" + "\tstrh r1, [r0]\n" + "\tadds r0, r5, 0x1\n" + "\tlsls r0, 24\n" + "\tlsrs r5, r0, 24\n" + "\tcmp r5, 0xF\n" + "\tbls _0809B958\n" + "\tmovs r5, 0\n" + "\tldr r6, _0809B9E0 @ =gUnknown_20398BA\n" + "\tsubs r1, r6, 0x6\n" + "\tmov r8, r1\n" + "_0809B970:\n" + "\tmovs r4, 0\n" + "\tadds r2, r5, 0x1\n" + "\tmov r10, r2\n" + "_0809B976:\n" + "\tmov r1, sp\n" + "\tldr r3, _0809B9E4 @ =0x0000fffd\n" + "\tadds r0, r3, 0\n" + "\tldrh r1, [r1]\n" + "\tadds r0, r1\n" + "\tadds r0, r4\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tldr r2, _0809B9E8 @ =0x0000fffe\n" + "\tadds r1, r2, 0\n" + "\tmov r3, sp\n" + "\tldrh r3, [r3, 0x2]\n" + "\tadds r1, r3\n" + "\tadds r1, r5\n" + "\tlsls r1, 16\n" + "\tlsrs r1, 16\n" + "\tldr r2, [sp, 0x4]\n" + "\tbl GetFieldObjectIdByXYZ\n" + "\tlsls r0, 24\n" + "\tlsrs r3, r0, 24\n" + "\tcmp r3, 0x10\n" + "\tbeq _0809BA1C\n" + "\tmov r0, r9\n" + "\tlsls r2, r0, 3\n" + "\tmov r1, r8\n" + "\tadds r0, r2, r1\n" + "\tmovs r7, 0\n" + "\tstrh r3, [r0]\n" + "\tmov r0, r8\n" + "\tadds r0, 0x2\n" + "\tadds r0, r2, r0\n" + "\tstrh r4, [r0]\n" + "\tldr r1, _0809B9EC @ =gUnknown_20398B8\n" + "\tadds r0, r2, r1\n" + "\tstrh r5, [r0]\n" + "\tldr r1, _0809B9F0 @ =gMapObjects\n" + "\tlsls r0, r3, 3\n" + "\tadds r0, r3\n" + "\tlsls r0, 2\n" + "\tadds r0, r1\n" + "\tldrb r0, [r0, 0x18]\n" + "\tlsls r0, 28\n" + "\tlsrs r0, 28\n" + "\tcmp r0, 0x2\n" + "\tbeq _0809BA00\n" + "\tcmp r0, 0x2\n" + "\tbgt _0809B9F4\n" + "\tcmp r0, 0x1\n" + "\tbeq _0809B9FA\n" + "\tb _0809BA0C\n" + "\t.align 2, 0\n" + "_0809B9DC: .4byte gUnknown_20398B4\n" + "_0809B9E0: .4byte gUnknown_20398BA\n" + "_0809B9E4: .4byte 0x0000fffd\n" + "_0809B9E8: .4byte 0x0000fffe\n" + "_0809B9EC: .4byte gUnknown_20398B8\n" + "_0809B9F0: .4byte gMapObjects\n" + "_0809B9F4:\n" + "\tcmp r0, 0x3\n" + "\tbeq _0809BA06\n" + "\tb _0809BA0C\n" + "_0809B9FA:\n" + "\tadds r0, r2, r6\n" + "\tstrh r7, [r0]\n" + "\tb _0809BA12\n" + "_0809BA00:\n" + "\tadds r1, r2, r6\n" + "\tmovs r0, 0x1\n" + "\tb _0809BA10\n" + "_0809BA06:\n" + "\tadds r1, r2, r6\n" + "\tmovs r0, 0x2\n" + "\tb _0809BA10\n" + "_0809BA0C:\n" + "\tadds r1, r2, r6\n" + "\tmovs r0, 0x3\n" + "_0809BA10:\n" + "\tstrh r0, [r1]\n" + "_0809BA12:\n" + "\tmov r0, r9\n" + "\tadds r0, 0x1\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tmov r9, r0\n" + "_0809BA1C:\n" + "\tadds r0, r4, 0x1\n" + "\tlsls r0, 24\n" + "\tlsrs r4, r0, 24\n" + "\tcmp r4, 0x6\n" + "\tbls _0809B976\n" + "\tmov r2, r10\n" + "\tlsls r0, r2, 24\n" + "\tlsrs r5, r0, 24\n" + "\tcmp r5, 0x4\n" + "\tbls _0809B970\n" + "\tadd sp, 0x8\n" + "\tpop {r3-r5}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tmov r10, r5\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n"); } #endif @@ -1273,7 +1273,7 @@ static void sub_809BA40(void) if (gUnknown_20398B4[i][EVENT_OBJ_ID] == MAP_OBJECTS_COUNT) continue; - graphicsInfo = GetFieldObjectGraphicsInfo(gMapObjects[gUnknown_20398B4[i][EVENT_OBJ_ID]].graphicsId); + graphicsInfo = GetFieldObjectGraphicsInfo(gMapObjects[gUnknown_20398B4[i][EVENT_OBJ_ID]].graphicsId); spriteId = AddPseudoEventObject( gMapObjects[gUnknown_20398B4[i][EVENT_OBJ_ID]].graphicsId, SpriteCallbackDummy, @@ -1286,7 +1286,7 @@ static void sub_809BA40(void) static void sub_809BAFC(void) { - s16 i; + s16 i; u16 *dst = *gUnknown_2039958; u16 *src = *gUnknown_2039954; @@ -1294,7 +1294,7 @@ static void sub_809BAFC(void) for (i = 0; i < 0x400; i++) { if (src[i] == 0) - continue; + continue; dst[i] = src[i] + 0xb3dc; } } @@ -1302,13 +1302,13 @@ static void sub_809BAFC(void) //BuyMenuPrintItemQuantityAndPrice static void sub_809BB44(u8 taskId) { - s16 *data = gTasks[taskId].data; - - FillWindowPixelBuffer(3, PIXEL_FILL(1)); - PrintMoneyAmount(3, 0x36, 0xA, gShopData.itemPrice, TEXT_SPEED_FF); - ConvertIntToDecimalStringN(gStringVar1, tItemCount, STR_CONV_MODE_LEADING_ZEROS, 2); - StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); - BuyMenuPrint(3, 0, gStringVar4, 2, 0xA, 0, 0, 0, 1); + s16 *data = gTasks[taskId].data; + + FillWindowPixelBuffer(3, PIXEL_FILL(1)); + PrintMoneyAmount(3, 0x36, 0xA, gShopData.itemPrice, TEXT_SPEED_FF); + ConvertIntToDecimalStringN(gStringVar1, tItemCount, STR_CONV_MODE_LEADING_ZEROS, 2); + StringExpandPlaceholders(gStringVar4, gText_TimesStrVar1); + BuyMenuPrint(3, 0, gStringVar4, 2, 0xA, 0, 0, 0, 1); } //Task_BuyMenu @@ -1320,33 +1320,33 @@ static void sub_809BBC0(u8 taskId) { s32 itemId = ListMenu_ProcessInput(tListTaskId); ListMenuGetScrollAndRow(tListTaskId, &gShopData.scrollOffset, &gShopData.selectedRow); - switch (itemId) - { + switch (itemId) + { case LIST_NOTHING_CHOSEN: break; - case LIST_CANCEL: + case LIST_CANCEL: PlaySE(SE_SELECT); sub_809C004(taskId); - break; - default: + break; + default: PlaySE(SE_SELECT); tItemId = itemId; ClearWindowTilemap(5); sub_809B73C(); - sub_809B57C(tListTaskId, 2); - sub_809B10C(1); - gShopData.itemPrice = itemid_get_market_price(itemId); - if (!IsEnoughMoney(&gSaveBlock1Ptr->money, gShopData.itemPrice)) - { - BuyMenuDisplayMessage(taskId, gText_YouDontHaveMoney, sub_809BF98); - } - else - { - CopyItemName(itemId, gStringVar1); - BuyMenuDisplayMessage(taskId, gText_Var1CertainlyHowMany, sub_809BCA0); - } - } - } + sub_809B57C(tListTaskId, 2); + sub_809B10C(1); + gShopData.itemPrice = itemid_get_market_price(itemId); + if (!IsEnoughMoney(&gSaveBlock1Ptr->money, gShopData.itemPrice)) + { + BuyMenuDisplayMessage(taskId, gText_YouDontHaveMoney, sub_809BF98); + } + else + { + CopyItemName(itemId, gStringVar1); + BuyMenuDisplayMessage(taskId, gText_Var1CertainlyHowMany, sub_809BCA0); + } + } + } } //Task_BuyHowManyDialogueInit @@ -1356,25 +1356,25 @@ static void sub_809BCA0(u8 taskId) u16 quantityInBag = BagGetQuantityByItemId(tItemId); u16 maxQuantity; - - BuyMenuQuantityBoxThinBorder(1, 0); - ConvertIntToDecimalStringN(gStringVar1, quantityInBag, STR_CONV_MODE_RIGHT_ALIGN, 3); - StringExpandPlaceholders(gStringVar4, gText_InBagVar1); - BuyMenuPrint(1, 2, gStringVar4, 0, 2, 0, 0, 0, 1); - tItemCount = 1; - BuyMenuQuantityBoxNormalBorder(3, 0); - sub_809BB44(taskId); - ScheduleBgCopyTilemapToVram(0); - maxQuantity = GetMoney(&gSaveBlock1Ptr->money) / itemid_get_market_price(tItemId); + + BuyMenuQuantityBoxThinBorder(1, 0); + ConvertIntToDecimalStringN(gStringVar1, quantityInBag, STR_CONV_MODE_RIGHT_ALIGN, 3); + StringExpandPlaceholders(gStringVar4, gText_InBagVar1); + BuyMenuPrint(1, 2, gStringVar4, 0, 2, 0, 0, 0, 1); + tItemCount = 1; + BuyMenuQuantityBoxNormalBorder(3, 0); + sub_809BB44(taskId); + ScheduleBgCopyTilemapToVram(0); + maxQuantity = GetMoney(&gSaveBlock1Ptr->money) / itemid_get_market_price(tItemId); if (maxQuantity > 99) gShopData.maxQuantity = (u8)99; else gShopData.maxQuantity = (u8)maxQuantity; - - if (maxQuantity != 1) - sub_809B6FC(); - - gTasks[taskId].func = sub_809BD8C; + + if (maxQuantity != 1) + sub_809B6FC(); + + gTasks[taskId].func = sub_809BD8C; } //Task_BuyHowManyDialogueHandleInput @@ -1393,7 +1393,7 @@ static void sub_809BD8C(u8 taskId) if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); - sub_809B73C(); + sub_809B73C(); ClearStdWindowAndFrameToTransparent(3, 0); ClearStdWindowAndFrameToTransparent(1, 0); ClearWindowTilemap(3); @@ -1405,9 +1405,9 @@ static void sub_809BD8C(u8 taskId) BuyMenuDisplayMessage(taskId, gText_Var1AndYouWantedVar2, sub_809BE90); } else if (JOY_NEW(B_BUTTON)) - { - PlaySE(SE_SELECT); - sub_809B73C(); + { + PlaySE(SE_SELECT); + sub_809B73C(); ClearStdWindowAndFrameToTransparent(3, 0); ClearStdWindowAndFrameToTransparent(1, 0); ClearWindowTilemap(3); @@ -1420,7 +1420,7 @@ static void sub_809BD8C(u8 taskId) //CreateBuyMenuConfirmPurchaseWindow static void sub_809BE90(u8 taskId) { - BuyMenuConfirmPurchase(taskId, gUnknown_83DF0B4); //sShopBuyMenuYesNoWindowTemplates + BuyMenuConfirmPurchase(taskId, gUnknown_83DF0B4); //sShopBuyMenuYesNoWindowTemplates } //BuyMenuTryMakePurchase @@ -1429,26 +1429,26 @@ static void sub_809BEA4(u8 taskId) s16 *data = gTasks[taskId].data; PutWindowTilemap(4); - if (AddBagItem(tItemId, tItemCount) == TRUE) - { - BuyMenuDisplayMessage(taskId, gText_HereYouGoThankYou, sub_809BF0C); - nullsub_52(taskId); - sub_809C09C(tItemId, tItemCount, 1); - } - else - { - BuyMenuDisplayMessage(taskId, gText_NoMoreRoomForThis, sub_809BF98); - } + if (AddBagItem(tItemId, tItemCount) == TRUE) + { + BuyMenuDisplayMessage(taskId, gText_HereYouGoThankYou, sub_809BF0C); + nullsub_52(taskId); + sub_809C09C(tItemId, tItemCount, 1); + } + else + { + BuyMenuDisplayMessage(taskId, gText_NoMoreRoomForThis, sub_809BF98); + } } //BuyMenuSubtractMoney static void sub_809BF0C(u8 taskId) { - IncrementGameStat(GAME_STAT_SHOPPED); - RemoveMoney(&gSaveBlock1Ptr->money, gShopData.itemPrice); - PlaySE(SE_SHOP); - PrintMoneyAmountInMoneyBox(0, GetMoney(&gSaveBlock1Ptr->money), 0); - gTasks[taskId].func = sub_809BF68; + IncrementGameStat(GAME_STAT_SHOPPED); + RemoveMoney(&gSaveBlock1Ptr->money, gShopData.itemPrice); + PlaySE(SE_SHOP); + PrintMoneyAmountInMoneyBox(0, GetMoney(&gSaveBlock1Ptr->money), 0); + gTasks[taskId].func = sub_809BF68; } //Task_ReturnToItemListAfterItemPurchase @@ -1457,7 +1457,7 @@ static void sub_809BF68(u8 taskId) if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - sub_809BF98(taskId); + sub_809BF98(taskId); } } @@ -1468,21 +1468,21 @@ static void sub_809BF98(u8 taskId) ClearDialogWindowAndFrameToTransparent(2, 0); sub_809B57C(tListTaskId, 1); - sub_809B10C(0); + sub_809B10C(0); PutWindowTilemap(4); PutWindowTilemap(5); - if (gShopData.martType == MART_TYPE_TMHM) - PutWindowTilemap(6); - - ScheduleBgCopyTilemapToVram(0); - sub_809B690(); - gTasks[taskId].func = sub_809BBC0; + if (gShopData.martType == MART_TYPE_TMHM) + PutWindowTilemap(6); + + ScheduleBgCopyTilemapToVram(0); + sub_809B690(); + gTasks[taskId].func = sub_809BBC0; } //ExitBuyMenu static void sub_809C004(u8 taskId) { - gFieldCallback = sub_809AD74; + gFieldCallback = sub_809AD74; BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); gTasks[taskId].func = sub_809C04C; } @@ -1491,14 +1491,14 @@ static void sub_809C004(u8 taskId) static void sub_809C04C(u8 taskId) { s16 *data = gTasks[taskId].data; - - if (!gPaletteFade.active) - { + + if (!gPaletteFade.active) + { DestroyListMenuTask(tListTaskId, 0, 0); - sub_809B604(); - SetMainCallback2(CB2_ReturnToField); - DestroyTask(taskId); - } + sub_809B604(); + SetMainCallback2(CB2_ReturnToField); + DestroyTask(taskId); + } } static void nullsub_52(u8 taskId) @@ -1512,15 +1512,15 @@ static void nullsub_53(void) #ifdef NONMATCHING void sub_809C09C(u16 item, u16 quantity, u8 a2) { - struct Purchase *tmp; - - if (gUnknown_203996C.unkA == a2) - { - tmp = &gUnknown_203996C; - } - else - { - if (gUnknown_203996C.unk16 == a2) + struct Purchase *tmp; + + if (gUnknown_203996C.unkA == a2) + { + tmp = &gUnknown_203996C; + } + else + { + if (gUnknown_203996C.unk16 == a2) { tmp = &gUnknown_203996C + 12; } @@ -1533,7 +1533,7 @@ void sub_809C09C(u16 item, u16 quantity, u8 a2) gUnknown_203996C.unkA = a2; } } - } + } if (tmp->unk4 != 0) { gUnknown_203996C.unk9 = 1; @@ -1551,133 +1551,133 @@ void sub_809C09C(u16 item, u16 quantity, u8 a2) gUnknown_203996C.unk0 += ((s16)itemid_get_market_price(item) >> (quantity-1))*quantity; if (gUnknown_203996C.unk0 > 999999) gUnknown_203996C.unk0 = 999999; - } + } } #else NAKED void sub_809C09C(u16 item, u16 quantity, u8 a2) { - asm_unified("\tpush {r4-r6,lr}\n" - "\tlsls r0, 16\n" - "\tlsrs r3, r0, 16\n" - "\tlsls r1, 16\n" - "\tlsrs r6, r1, 16\n" - "\tlsls r2, 24\n" - "\tlsrs r5, r2, 24\n" - "\tldr r1, _0809C0B8 @ =gUnknown_203996C\n" - "\tldrb r2, [r1, 0xA]\n" - "\tcmp r2, r5\n" - "\tbne _0809C0BC\n" - "\tadds r4, r1, 0\n" - "\tb _0809C0D4\n" - "\t.align 2, 0\n" - "_0809C0B8: .4byte gUnknown_203996C\n" - "_0809C0BC:\n" - "\tldrb r0, [r1, 0x16]\n" - "\tcmp r0, r5\n" - "\tbne _0809C0C8\n" - "\tadds r4, r1, 0\n" - "\tadds r4, 0xC\n" - "\tb _0809C0D4\n" - "_0809C0C8:\n" - "\tadds r4, r1, 0\n" - "\tadds r4, 0xC\n" - "\tcmp r2, 0\n" - "\tbne _0809C0D2\n" - "\tadds r4, r1, 0\n" - "_0809C0D2:\n" - "\tstrb r5, [r4, 0xA]\n" - "_0809C0D4:\n" - "\tldrh r0, [r4, 0x4]\n" - "\tcmp r0, 0\n" - "\tbeq _0809C0DE\n" - "\tmovs r0, 0x1\n" - "\tstrb r0, [r4, 0x9]\n" - "_0809C0DE:\n" - "\tstrh r3, [r4, 0x4]\n" - "\tldrh r1, [r4, 0x6]\n" - "\tldr r0, _0809C128 @ =0x000003e6\n" - "\tcmp r1, r0\n" - "\tbhi _0809C0F8\n" - "\tadds r0, r6, r1\n" - "\tstrh r0, [r4, 0x6]\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tldr r1, _0809C12C @ =0x000003e7\n" - "\tcmp r0, r1\n" - "\tbls _0809C0F8\n" - "\tstrh r1, [r4, 0x6]\n" - "_0809C0F8:\n" - "\tldr r1, [r4]\n" - "\tldr r0, _0809C130 @ =0x000f423e\n" - "\tcmp r1, r0\n" - "\tbhi _0809C120\n" - "\tadds r0, r3, 0\n" - "\tbl itemid_get_market_price\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tsubs r1, r5, 0x1\n" - "\tasrs r0, r1\n" - "\tadds r1, r0, 0\n" - "\tmuls r1, r6\n" - "\tldr r0, [r4]\n" - "\tadds r0, r1\n" - "\tstr r0, [r4]\n" - "\tldr r1, _0809C134 @ =0x000f423f\n" - "\tcmp r0, r1\n" - "\tbls _0809C120\n" - "\tstr r1, [r4]\n" - "_0809C120:\n" - "\tpop {r4-r6}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" - "_0809C128: .4byte 0x000003e6\n" - "_0809C12C: .4byte 0x000003e7\n" - "_0809C130: .4byte 0x000f423e\n" - "_0809C134: .4byte 0x000f423f\n"); + asm_unified("\tpush {r4-r6,lr}\n" + "\tlsls r0, 16\n" + "\tlsrs r3, r0, 16\n" + "\tlsls r1, 16\n" + "\tlsrs r6, r1, 16\n" + "\tlsls r2, 24\n" + "\tlsrs r5, r2, 24\n" + "\tldr r1, _0809C0B8 @ =gUnknown_203996C\n" + "\tldrb r2, [r1, 0xA]\n" + "\tcmp r2, r5\n" + "\tbne _0809C0BC\n" + "\tadds r4, r1, 0\n" + "\tb _0809C0D4\n" + "\t.align 2, 0\n" + "_0809C0B8: .4byte gUnknown_203996C\n" + "_0809C0BC:\n" + "\tldrb r0, [r1, 0x16]\n" + "\tcmp r0, r5\n" + "\tbne _0809C0C8\n" + "\tadds r4, r1, 0\n" + "\tadds r4, 0xC\n" + "\tb _0809C0D4\n" + "_0809C0C8:\n" + "\tadds r4, r1, 0\n" + "\tadds r4, 0xC\n" + "\tcmp r2, 0\n" + "\tbne _0809C0D2\n" + "\tadds r4, r1, 0\n" + "_0809C0D2:\n" + "\tstrb r5, [r4, 0xA]\n" + "_0809C0D4:\n" + "\tldrh r0, [r4, 0x4]\n" + "\tcmp r0, 0\n" + "\tbeq _0809C0DE\n" + "\tmovs r0, 0x1\n" + "\tstrb r0, [r4, 0x9]\n" + "_0809C0DE:\n" + "\tstrh r3, [r4, 0x4]\n" + "\tldrh r1, [r4, 0x6]\n" + "\tldr r0, _0809C128 @ =0x000003e6\n" + "\tcmp r1, r0\n" + "\tbhi _0809C0F8\n" + "\tadds r0, r6, r1\n" + "\tstrh r0, [r4, 0x6]\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tldr r1, _0809C12C @ =0x000003e7\n" + "\tcmp r0, r1\n" + "\tbls _0809C0F8\n" + "\tstrh r1, [r4, 0x6]\n" + "_0809C0F8:\n" + "\tldr r1, [r4]\n" + "\tldr r0, _0809C130 @ =0x000f423e\n" + "\tcmp r1, r0\n" + "\tbhi _0809C120\n" + "\tadds r0, r3, 0\n" + "\tbl itemid_get_market_price\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tsubs r1, r5, 0x1\n" + "\tasrs r0, r1\n" + "\tadds r1, r0, 0\n" + "\tmuls r1, r6\n" + "\tldr r0, [r4]\n" + "\tadds r0, r1\n" + "\tstr r0, [r4]\n" + "\tldr r1, _0809C134 @ =0x000f423f\n" + "\tcmp r0, r1\n" + "\tbls _0809C120\n" + "\tstr r1, [r4]\n" + "_0809C120:\n" + "\tpop {r4-r6}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_0809C128: .4byte 0x000003e6\n" + "_0809C12C: .4byte 0x000003e7\n" + "_0809C130: .4byte 0x000f423e\n" + "_0809C134: .4byte 0x000f423f\n"); } #endif //RecordQuestLogItemPurchase static void sub_809C138(void) { - struct MartHistory *history = &gUnknown_203996C; - u16 v; + struct MartHistory *history = &gUnknown_203996C; + u16 v; v = history->unkA; - if (v != 0) - sub_8113550(v + 0x24, (const u16*)history); + if (v != 0) + sub_8113550(v + 0x24, (const u16*)history); v = history->unk16; - if (v != 0) + if (v != 0) { v += 0x24; - sub_8113550(v, (const u16*)&history->unkC); + sub_8113550(v, (const u16*)&history->unkC); } } void CreatePokemartMenu(const u16 *itemsForSale) { - sub_809ABD8(itemsForSale); - sub_809AAB0(MART_TYPE_REGULAR); - sub_809AC04(EnableBothScriptContexts); - nullsub_53(); + sub_809ABD8(itemsForSale); + sub_809AAB0(MART_TYPE_REGULAR); + sub_809AC04(EnableBothScriptContexts); + nullsub_53(); memset(&gUnknown_203996C, 0, sizeof(struct MartHistory)); - gUnknown_203996C.unk8 = gMapHeader.regionMapSectionId; - gUnknown_203996C.unk14 = gMapHeader.regionMapSectionId; + gUnknown_203996C.unk8 = gMapHeader.regionMapSectionId; + gUnknown_203996C.unk14 = gMapHeader.regionMapSectionId; } void CreateDecorationShop1Menu(const u16 *itemsForSale) { sub_809ABD8(itemsForSale); - sub_809AAB0(MART_TYPE_DECOR); + sub_809AAB0(MART_TYPE_DECOR); sub_809AC04(EnableBothScriptContexts); } void CreateDecorationShop2Menu(const u16 *itemsForSale) { sub_809ABD8(itemsForSale); - sub_809AAB0(MART_TYPE_DECOR2); + sub_809AAB0(MART_TYPE_DECOR2); sub_809AC04(EnableBothScriptContexts); } @@ -1689,383 +1689,383 @@ void CreateDecorationShop2Menu(const u16 *itemsForSale) #ifdef NONMATCHING void sub_809C1D8(u8 taskId, const u16* a1, u16 a2) { - + } #else NAKED void sub_809C1D8(u8 taskId, const u16* a1, u16 a2) { - asm_unified("\tpush {r4-r7,lr}\n" - "\tmov r7, r10\n" - "\tmov r6, r9\n" - "\tmov r5, r8\n" - "\tpush {r5-r7}\n" - "\tsub sp, 0x10\n" - "\tmov r9, r1\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tlsls r2, 16\n" - "\tlsrs r2, 16\n" - "\tmov r10, r2\n" - "\tldr r2, _0809C26C @ =gTasks\n" - "\tlsls r1, r0, 2\n" - "\tadds r1, r0\n" - "\tlsls r1, 3\n" - "\tadds r1, r2\n" - "\tldrh r0, [r1, 0x10]\n" - "\tsubs r0, 0x1\n" - "\tlsls r0, 16\n" - "\tlsrs r5, r0, 16\n" - "\tldrh r0, [r1, 0x12]\n" - "\tsubs r0, 0x1\n" - "\tlsls r0, 16\n" - "\tlsrs r3, r0, 16\n" - "\tldrh r4, [r1, 0xA]\n" - "\tmovs r2, 0xC\n" - "\tldrsh r0, [r1, r2]\n" - "\tcmp r0, 0\n" - "\tbne _0809C29C\n" - "\tmovs r2, 0\n" - "\tlsls r5, 16\n" - "\tstr r5, [sp, 0xC]\n" - "\tlsls r0, r3, 16\n" - "\tlsls r1, r4, 16\n" - "\tasrs r0, 16\n" - "\tstr r0, [sp]\n" - "\tasrs r1, 16\n" - "\tstr r1, [sp, 0x4]\n" - "\tlsls r0, r1, 1\n" - "\tmov r1, r9\n" - "\tadds r7, r0, r1\n" - "_0809C22C:\n" - "\tmovs r4, 0\n" - "\tlsls r2, 16\n" - "\tmov r8, r2\n" - "\tasrs r0, r2, 16\n" - "\tldr r2, [sp]\n" - "\tadds r6, r2, r0\n" - "_0809C238:\n" - "\tldr r0, [sp, 0xC]\n" - "\tasrs r1, r0, 16\n" - "\tlsls r4, 16\n" - "\tasrs r0, r4, 16\n" - "\tadds r5, r1, r0\n" - "\tadds r0, r5, 0\n" - "\tadds r1, r6, 0\n" - "\tbl MapGridGetMetatileIdAt\n" - "\tmovs r2, 0\n" - "\tldrsh r1, [r7, r2]\n" - "\tlsls r0, 16\n" - "\tasrs r0, 16\n" - "\tcmp r1, r0\n" - "\tbne _0809C280\n" - "\tldr r0, [sp, 0x4]\n" - "\tcmp r0, 0x2\n" - "\tbeq _0809C270\n" - "\tldrh r0, [r7, 0x2]\n" - "\tmov r2, r10\n" - "\torrs r2, r0\n" - "\tadds r0, r5, 0\n" - "\tadds r1, r6, 0\n" - "\tbl MapGridSetMetatileIdAt\n" - "\tb _0809C280\n" - "\t.align 2, 0\n" - "_0809C26C: .4byte gTasks\n" - "_0809C270:\n" - "\tmov r1, r9\n" - "\tldrh r0, [r1]\n" - "\tmov r2, r10\n" - "\torrs r2, r0\n" - "\tadds r0, r5, 0\n" - "\tadds r1, r6, 0\n" - "\tbl MapGridSetMetatileIdAt\n" - "_0809C280:\n" - "\tmovs r2, 0x80\n" - "\tlsls r2, 9\n" - "\tadds r0, r4, r2\n" - "\tlsrs r4, r0, 16\n" - "\tasrs r0, 16\n" - "\tcmp r0, 0x2\n" - "\tble _0809C238\n" - "\tadds r0, r2, 0\n" - "\tadd r0, r8\n" - "\tlsrs r2, r0, 16\n" - "\tasrs r0, 16\n" - "\tcmp r0, 0x2\n" - "\tble _0809C22C\n" - "\tb _0809C324\n" - "_0809C29C:\n" - "\tmovs r2, 0\n" - "\tlsls r5, 16\n" - "\tstr r5, [sp, 0xC]\n" - "\tlsls r0, r3, 16\n" - "\tlsls r1, r4, 16\n" - "\tasrs r0, 16\n" - "\tstr r0, [sp, 0x8]\n" - "\tasrs r7, r1, 16\n" - "_0809C2AC:\n" - "\tmovs r4, 0\n" - "\tlsls r2, 16\n" - "\tmov r8, r2\n" - "\tasrs r0, r2, 16\n" - "\tldr r1, [sp, 0x8]\n" - "\tadds r6, r1, r0\n" - "_0809C2B8:\n" - "\tldr r2, [sp, 0xC]\n" - "\tasrs r1, r2, 16\n" - "\tlsls r4, 16\n" - "\tasrs r0, r4, 16\n" - "\tadds r5, r1, r0\n" - "\tadds r0, r5, 0\n" - "\tadds r1, r6, 0\n" - "\tbl MapGridGetMetatileIdAt\n" - "\tmovs r1, 0x2\n" - "\tsubs r1, r7\n" - "\tlsls r1, 1\n" - "\tadd r1, r9\n" - "\tmovs r2, 0\n" - "\tldrsh r1, [r1, r2]\n" - "\tlsls r0, 16\n" - "\tasrs r0, 16\n" - "\tcmp r1, r0\n" - "\tbne _0809C30A\n" - "\tcmp r7, 0x2\n" - "\tbeq _0809C2FA\n" - "\tmovs r0, 0x1\n" - "\tsubs r0, r7\n" - "\tlsls r0, 1\n" - "\tadd r0, r9\n" - "\tldrh r0, [r0]\n" - "\tmov r2, r10\n" - "\torrs r2, r0\n" - "\tadds r0, r5, 0\n" - "\tadds r1, r6, 0\n" - "\tbl MapGridSetMetatileIdAt\n" - "\tb _0809C30A\n" - "_0809C2FA:\n" - "\tmov r1, r9\n" - "\tldrh r0, [r1, 0x4]\n" - "\tmov r2, r10\n" - "\torrs r2, r0\n" - "\tadds r0, r5, 0\n" - "\tadds r1, r6, 0\n" - "\tbl MapGridSetMetatileIdAt\n" - "_0809C30A:\n" - "\tmovs r2, 0x80\n" - "\tlsls r2, 9\n" - "\tadds r0, r4, r2\n" - "\tlsrs r4, r0, 16\n" - "\tasrs r0, 16\n" - "\tcmp r0, 0x2\n" - "\tble _0809C2B8\n" - "\tadds r0, r2, 0\n" - "\tadd r0, r8\n" - "\tlsrs r2, r0, 16\n" - "\tasrs r0, 16\n" - "\tcmp r0, 0x2\n" - "\tble _0809C2AC\n" - "_0809C324:\n" - "\tadd sp, 0x10\n" - "\tpop {r3-r5}\n" - "\tmov r8, r3\n" - "\tmov r9, r4\n" - "\tmov r10, r5\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0\n"); + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r10\n" + "\tmov r6, r9\n" + "\tmov r5, r8\n" + "\tpush {r5-r7}\n" + "\tsub sp, 0x10\n" + "\tmov r9, r1\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tlsls r2, 16\n" + "\tlsrs r2, 16\n" + "\tmov r10, r2\n" + "\tldr r2, _0809C26C @ =gTasks\n" + "\tlsls r1, r0, 2\n" + "\tadds r1, r0\n" + "\tlsls r1, 3\n" + "\tadds r1, r2\n" + "\tldrh r0, [r1, 0x10]\n" + "\tsubs r0, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r5, r0, 16\n" + "\tldrh r0, [r1, 0x12]\n" + "\tsubs r0, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r3, r0, 16\n" + "\tldrh r4, [r1, 0xA]\n" + "\tmovs r2, 0xC\n" + "\tldrsh r0, [r1, r2]\n" + "\tcmp r0, 0\n" + "\tbne _0809C29C\n" + "\tmovs r2, 0\n" + "\tlsls r5, 16\n" + "\tstr r5, [sp, 0xC]\n" + "\tlsls r0, r3, 16\n" + "\tlsls r1, r4, 16\n" + "\tasrs r0, 16\n" + "\tstr r0, [sp]\n" + "\tasrs r1, 16\n" + "\tstr r1, [sp, 0x4]\n" + "\tlsls r0, r1, 1\n" + "\tmov r1, r9\n" + "\tadds r7, r0, r1\n" + "_0809C22C:\n" + "\tmovs r4, 0\n" + "\tlsls r2, 16\n" + "\tmov r8, r2\n" + "\tasrs r0, r2, 16\n" + "\tldr r2, [sp]\n" + "\tadds r6, r2, r0\n" + "_0809C238:\n" + "\tldr r0, [sp, 0xC]\n" + "\tasrs r1, r0, 16\n" + "\tlsls r4, 16\n" + "\tasrs r0, r4, 16\n" + "\tadds r5, r1, r0\n" + "\tadds r0, r5, 0\n" + "\tadds r1, r6, 0\n" + "\tbl MapGridGetMetatileIdAt\n" + "\tmovs r2, 0\n" + "\tldrsh r1, [r7, r2]\n" + "\tlsls r0, 16\n" + "\tasrs r0, 16\n" + "\tcmp r1, r0\n" + "\tbne _0809C280\n" + "\tldr r0, [sp, 0x4]\n" + "\tcmp r0, 0x2\n" + "\tbeq _0809C270\n" + "\tldrh r0, [r7, 0x2]\n" + "\tmov r2, r10\n" + "\torrs r2, r0\n" + "\tadds r0, r5, 0\n" + "\tadds r1, r6, 0\n" + "\tbl MapGridSetMetatileIdAt\n" + "\tb _0809C280\n" + "\t.align 2, 0\n" + "_0809C26C: .4byte gTasks\n" + "_0809C270:\n" + "\tmov r1, r9\n" + "\tldrh r0, [r1]\n" + "\tmov r2, r10\n" + "\torrs r2, r0\n" + "\tadds r0, r5, 0\n" + "\tadds r1, r6, 0\n" + "\tbl MapGridSetMetatileIdAt\n" + "_0809C280:\n" + "\tmovs r2, 0x80\n" + "\tlsls r2, 9\n" + "\tadds r0, r4, r2\n" + "\tlsrs r4, r0, 16\n" + "\tasrs r0, 16\n" + "\tcmp r0, 0x2\n" + "\tble _0809C238\n" + "\tadds r0, r2, 0\n" + "\tadd r0, r8\n" + "\tlsrs r2, r0, 16\n" + "\tasrs r0, 16\n" + "\tcmp r0, 0x2\n" + "\tble _0809C22C\n" + "\tb _0809C324\n" + "_0809C29C:\n" + "\tmovs r2, 0\n" + "\tlsls r5, 16\n" + "\tstr r5, [sp, 0xC]\n" + "\tlsls r0, r3, 16\n" + "\tlsls r1, r4, 16\n" + "\tasrs r0, 16\n" + "\tstr r0, [sp, 0x8]\n" + "\tasrs r7, r1, 16\n" + "_0809C2AC:\n" + "\tmovs r4, 0\n" + "\tlsls r2, 16\n" + "\tmov r8, r2\n" + "\tasrs r0, r2, 16\n" + "\tldr r1, [sp, 0x8]\n" + "\tadds r6, r1, r0\n" + "_0809C2B8:\n" + "\tldr r2, [sp, 0xC]\n" + "\tasrs r1, r2, 16\n" + "\tlsls r4, 16\n" + "\tasrs r0, r4, 16\n" + "\tadds r5, r1, r0\n" + "\tadds r0, r5, 0\n" + "\tadds r1, r6, 0\n" + "\tbl MapGridGetMetatileIdAt\n" + "\tmovs r1, 0x2\n" + "\tsubs r1, r7\n" + "\tlsls r1, 1\n" + "\tadd r1, r9\n" + "\tmovs r2, 0\n" + "\tldrsh r1, [r1, r2]\n" + "\tlsls r0, 16\n" + "\tasrs r0, 16\n" + "\tcmp r1, r0\n" + "\tbne _0809C30A\n" + "\tcmp r7, 0x2\n" + "\tbeq _0809C2FA\n" + "\tmovs r0, 0x1\n" + "\tsubs r0, r7\n" + "\tlsls r0, 1\n" + "\tadd r0, r9\n" + "\tldrh r0, [r0]\n" + "\tmov r2, r10\n" + "\torrs r2, r0\n" + "\tadds r0, r5, 0\n" + "\tadds r1, r6, 0\n" + "\tbl MapGridSetMetatileIdAt\n" + "\tb _0809C30A\n" + "_0809C2FA:\n" + "\tmov r1, r9\n" + "\tldrh r0, [r1, 0x4]\n" + "\tmov r2, r10\n" + "\torrs r2, r0\n" + "\tadds r0, r5, 0\n" + "\tadds r1, r6, 0\n" + "\tbl MapGridSetMetatileIdAt\n" + "_0809C30A:\n" + "\tmovs r2, 0x80\n" + "\tlsls r2, 9\n" + "\tadds r0, r4, r2\n" + "\tlsrs r4, r0, 16\n" + "\tasrs r0, 16\n" + "\tcmp r0, 0x2\n" + "\tble _0809C2B8\n" + "\tadds r0, r2, 0\n" + "\tadd r0, r8\n" + "\tlsrs r2, r0, 16\n" + "\tasrs r0, 16\n" + "\tcmp r0, 0x2\n" + "\tble _0809C2AC\n" + "_0809C324:\n" + "\tadd sp, 0x10\n" + "\tpop {r3-r5}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tmov r10, r5\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n"); } #endif static void sub_809C334(u8 taskId) { - s16 *data = gTasks[taskId].data; - u16 v1; - - data[3] = 1; - switch (data[0]) - { - case 0: - sub_809C1D8(taskId, gUnknown_83DF0D4, 0); - break; - case 1: - sub_809C1D8(taskId, gUnknown_83DF0DA, 0); - break; - case 2: - sub_809C1D8(taskId, gUnknown_83DF0E0, 0xC00); - break; - case 3: - sub_809C1D8(taskId, gUnknown_83DF0E6, 0); - break; - case 4: - sub_809C1D8(taskId, gUnknown_83DF0EC, 0xC00); - break; - case 5: - sub_809C1D8(taskId, gUnknown_83DF0F2, 0); - break; - case 6: - sub_809C1D8(taskId, gUnknown_83DF0F8, 0); + s16 *data = gTasks[taskId].data; + u16 v1; + + data[3] = 1; + switch (data[0]) + { + case 0: + sub_809C1D8(taskId, gUnknown_83DF0D4, 0); + break; + case 1: + sub_809C1D8(taskId, gUnknown_83DF0DA, 0); + break; + case 2: + sub_809C1D8(taskId, gUnknown_83DF0E0, 0xC00); + break; + case 3: + sub_809C1D8(taskId, gUnknown_83DF0E6, 0); + break; + case 4: + sub_809C1D8(taskId, gUnknown_83DF0EC, 0xC00); + break; + case 5: + sub_809C1D8(taskId, gUnknown_83DF0F2, 0); + break; + case 6: + sub_809C1D8(taskId, gUnknown_83DF0F8, 0); default: break; - } - data[0] = (data[0] + 1) & 7; - v1 = data[0] & 7; - //ldrh r5, [r4] instead mov r5, r0 somehow - if (v1 == 0) - { - DrawWholeMapView(); - data[1] = (data[1] + 1) % 3; - data[3] = v1; - } + } + data[0] = (data[0] + 1) & 7; + v1 = data[0] & 7; + //ldrh r5, [r4] instead mov r5, r0 somehow + if (v1 == 0) + { + DrawWholeMapView(); + data[1] = (data[1] + 1) % 3; + data[3] = v1; + } } static u8 sub_809C3FC(u16 a0) { - u8 taskId; + u8 taskId; s16 *data; taskId = CreateTask(sub_809C334, 0); data = gTasks[taskId].data; - PlayerGetDestCoords(&tX, &tItemId); + PlayerGetDestCoords(&tX, &tItemId); t0 = 0; tItemCount = 0; data[2] = a0; - sub_809C334(taskId); - return taskId; + sub_809C334(taskId); + return taskId; } void sub_809C448(u8 a0) { - u8 taskId; - - taskId = sub_809C3FC(a0); - gUnknown_2039984 = taskId; + u8 taskId; + + taskId = sub_809C3FC(a0); + gUnknown_2039984 = taskId; } void sub_809C460(void) { - DestroyTask(gUnknown_2039984); + DestroyTask(gUnknown_2039984); } bool8 sub_809C474(void) -{ - if (gTasks[gUnknown_2039984].data[3] == 0) - { - if (gTasks[gUnknown_2039984].data[1] != 2) - return TRUE; - return FALSE; - } - else - { - return TRUE; - } +{ + if (gTasks[gUnknown_2039984].data[3] == 0) + { + if (gTasks[gUnknown_2039984].data[1] != 2) + return TRUE; + return FALSE; + } + else + { + return TRUE; + } } // special 0x1b5 - creates a tile animaiton one block left two-four up the player void sub_809C4A8(void) { - u8 taskId; + u8 taskId; s16 *data; - - taskId = CreateTask(sub_809C500, 0); + + taskId = CreateTask(sub_809C500, 0); gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = 0; + gTasks[taskId].data[1] = 0; data = gTasks[taskId].data; - PlayerGetDestCoords(&data[2], &data[3]); - if (gSpecialVar_0x8004 == 0) + PlayerGetDestCoords(&data[2], &data[3]); + if (gSpecialVar_0x8004 == 0) { - gTasks[taskId].data[2] += 6; + gTasks[taskId].data[2] += 6; gTasks[taskId].data[3] -= 5; } else { - gTasks[taskId].data[2]--; + gTasks[taskId].data[2]--; gTasks[taskId].data[3] -= 5; } } static void sub_809C500(u8 taskId) { - s16 *data = gTasks[taskId].data; - - if (data[0] == 0) - { - if ((data[1] & 1) == 0) - { - MapGridSetMetatileIdAt(data[2], data[3], 0xEB5); - MapGridSetMetatileIdAt(data[2], data[3] + 2, 0xEB7); - } - else - { - MapGridSetMetatileIdAt(data[2], data[3], 0xEB6); - MapGridSetMetatileIdAt(data[2], data[3] + 2, 0xEB8); - } - CurrentMapDrawMetatileAt(data[2], data[3]); - CurrentMapDrawMetatileAt(data[2], data[3] + 2); - } - - data[0]++; - if (data[0] != 0x10) - return; - data[0] = 0; - - data[0] == 0; - data[1]++; - if (data[1] != 0xD) - return; - - MapGridSetMetatileIdAt(data[2], data[3], 0xE8A); - MapGridSetMetatileIdAt(data[2], data[3] + 2, 0xE96); - CurrentMapDrawMetatileAt(data[2], data[3]); - CurrentMapDrawMetatileAt(data[2], data[3] + 2); - DestroyTask(taskId); + s16 *data = gTasks[taskId].data; + + if (data[0] == 0) + { + if ((data[1] & 1) == 0) + { + MapGridSetMetatileIdAt(data[2], data[3], 0xEB5); + MapGridSetMetatileIdAt(data[2], data[3] + 2, 0xEB7); + } + else + { + MapGridSetMetatileIdAt(data[2], data[3], 0xEB6); + MapGridSetMetatileIdAt(data[2], data[3] + 2, 0xEB8); + } + CurrentMapDrawMetatileAt(data[2], data[3]); + CurrentMapDrawMetatileAt(data[2], data[3] + 2); + } + + data[0]++; + if (data[0] != 0x10) + return; + data[0] = 0; + + data[0] == 0; + data[1]++; + if (data[1] != 0xD) + return; + + MapGridSetMetatileIdAt(data[2], data[3], 0xE8A); + MapGridSetMetatileIdAt(data[2], data[3] + 2, 0xE96); + CurrentMapDrawMetatileAt(data[2], data[3]); + CurrentMapDrawMetatileAt(data[2], data[3] + 2); + DestroyTask(taskId); } // special 0x1B7 - creates a tile animation two-six blocks right from the top-left corner of the screen void sub_809C5FC(void) { - u8 taskId; - s16 *data; - - taskId = CreateTask(sub_809C640, 0); + u8 taskId; + s16 *data; + + taskId = CreateTask(sub_809C640, 0); gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = 0; + gTasks[taskId].data[1] = 0; data = gTasks[taskId].data; - PlayerGetDestCoords(&data[2], &data[3]); - gTasks[taskId].data[2] += 4; - gTasks[taskId].data[3] -= 5; + PlayerGetDestCoords(&data[2], &data[3]); + gTasks[taskId].data[2] += 4; + gTasks[taskId].data[3] -= 5; } static void sub_809C640(u8 taskId) { - s16 *data = gTasks[taskId].data; - - if (data[0] == 0) - { - if (data[1] != 0) - { - MapGridSetMetatileIdAt(data[2], data[3], 0xE85); - MapGridSetMetatileIdAt(data[2], data[3] + 1, 0xEB4); - CurrentMapDrawMetatileAt(data[2], data[3]); - CurrentMapDrawMetatileAt(data[2], data[3] + 1); - if (data[1] == 4) - { - DestroyTask(taskId); - return; - } - data[2]--; - } - MapGridSetMetatileIdAt(data[2], data[3], 0xEB9); - MapGridSetMetatileIdAt(data[2], data[3] + 1, 0xEBA); - CurrentMapDrawMetatileAt(data[2], data[3]); - CurrentMapDrawMetatileAt(data[2], data[3] + 1); - } - data[0]++; - if (data[0] == 4) - { - data[0] = 0; - data[1]++; - } + s16 *data = gTasks[taskId].data; + + if (data[0] == 0) + { + if (data[1] != 0) + { + MapGridSetMetatileIdAt(data[2], data[3], 0xE85); + MapGridSetMetatileIdAt(data[2], data[3] + 1, 0xEB4); + CurrentMapDrawMetatileAt(data[2], data[3]); + CurrentMapDrawMetatileAt(data[2], data[3] + 1); + if (data[1] == 4) + { + DestroyTask(taskId); + return; + } + data[2]--; + } + MapGridSetMetatileIdAt(data[2], data[3], 0xEB9); + MapGridSetMetatileIdAt(data[2], data[3] + 1, 0xEBA); + CurrentMapDrawMetatileAt(data[2], data[3]); + CurrentMapDrawMetatileAt(data[2], data[3] + 1); + } + data[0]++; + if (data[0] == 4) + { + data[0] = 0; + data[1]++; + } } -- cgit v1.2.3 From 3f92af3651452e873339d721903340003a86c526 Mon Sep 17 00:00:00 2001 From: Evan Date: Sun, 24 Nov 2019 16:57:31 -0700 Subject: fix mart history struct --- src/shop.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/shop.c b/src/shop.c index 923c7dc45..43b1361a1 100644 --- a/src/shop.c +++ b/src/shop.c @@ -1512,7 +1512,7 @@ static void nullsub_53(void) #ifdef NONMATCHING void sub_809C09C(u16 item, u16 quantity, u8 a2) { - struct Purchase *tmp; + struct MartHistory *tmp; if (gUnknown_203996C.unkA == a2) { -- cgit v1.2.3 From 10ee4b2cf6c380a2e1b4d1d02bbec3b3682257b1 Mon Sep 17 00:00:00 2001 From: Evan Date: Sun, 24 Nov 2019 17:01:54 -0700 Subject: remove sea cottage funcs --- src/shop.c | 389 ------------------------------------------------------------- 1 file changed, 389 deletions(-) (limited to 'src') diff --git a/src/shop.c b/src/shop.c index 43b1361a1..0a96b7eb3 100644 --- a/src/shop.c +++ b/src/shop.c @@ -1680,392 +1680,3 @@ void CreateDecorationShop2Menu(const u16 *itemsForSale) sub_809AAB0(MART_TYPE_DECOR2); sub_809AC04(EnableBothScriptContexts); } - - - - -///////////////////////the following functions belong??//////////////////////////// - -#ifdef NONMATCHING -void sub_809C1D8(u8 taskId, const u16* a1, u16 a2) -{ - -} -#else -NAKED -void sub_809C1D8(u8 taskId, const u16* a1, u16 a2) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tmov r7, r10\n" - "\tmov r6, r9\n" - "\tmov r5, r8\n" - "\tpush {r5-r7}\n" - "\tsub sp, 0x10\n" - "\tmov r9, r1\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tlsls r2, 16\n" - "\tlsrs r2, 16\n" - "\tmov r10, r2\n" - "\tldr r2, _0809C26C @ =gTasks\n" - "\tlsls r1, r0, 2\n" - "\tadds r1, r0\n" - "\tlsls r1, 3\n" - "\tadds r1, r2\n" - "\tldrh r0, [r1, 0x10]\n" - "\tsubs r0, 0x1\n" - "\tlsls r0, 16\n" - "\tlsrs r5, r0, 16\n" - "\tldrh r0, [r1, 0x12]\n" - "\tsubs r0, 0x1\n" - "\tlsls r0, 16\n" - "\tlsrs r3, r0, 16\n" - "\tldrh r4, [r1, 0xA]\n" - "\tmovs r2, 0xC\n" - "\tldrsh r0, [r1, r2]\n" - "\tcmp r0, 0\n" - "\tbne _0809C29C\n" - "\tmovs r2, 0\n" - "\tlsls r5, 16\n" - "\tstr r5, [sp, 0xC]\n" - "\tlsls r0, r3, 16\n" - "\tlsls r1, r4, 16\n" - "\tasrs r0, 16\n" - "\tstr r0, [sp]\n" - "\tasrs r1, 16\n" - "\tstr r1, [sp, 0x4]\n" - "\tlsls r0, r1, 1\n" - "\tmov r1, r9\n" - "\tadds r7, r0, r1\n" - "_0809C22C:\n" - "\tmovs r4, 0\n" - "\tlsls r2, 16\n" - "\tmov r8, r2\n" - "\tasrs r0, r2, 16\n" - "\tldr r2, [sp]\n" - "\tadds r6, r2, r0\n" - "_0809C238:\n" - "\tldr r0, [sp, 0xC]\n" - "\tasrs r1, r0, 16\n" - "\tlsls r4, 16\n" - "\tasrs r0, r4, 16\n" - "\tadds r5, r1, r0\n" - "\tadds r0, r5, 0\n" - "\tadds r1, r6, 0\n" - "\tbl MapGridGetMetatileIdAt\n" - "\tmovs r2, 0\n" - "\tldrsh r1, [r7, r2]\n" - "\tlsls r0, 16\n" - "\tasrs r0, 16\n" - "\tcmp r1, r0\n" - "\tbne _0809C280\n" - "\tldr r0, [sp, 0x4]\n" - "\tcmp r0, 0x2\n" - "\tbeq _0809C270\n" - "\tldrh r0, [r7, 0x2]\n" - "\tmov r2, r10\n" - "\torrs r2, r0\n" - "\tadds r0, r5, 0\n" - "\tadds r1, r6, 0\n" - "\tbl MapGridSetMetatileIdAt\n" - "\tb _0809C280\n" - "\t.align 2, 0\n" - "_0809C26C: .4byte gTasks\n" - "_0809C270:\n" - "\tmov r1, r9\n" - "\tldrh r0, [r1]\n" - "\tmov r2, r10\n" - "\torrs r2, r0\n" - "\tadds r0, r5, 0\n" - "\tadds r1, r6, 0\n" - "\tbl MapGridSetMetatileIdAt\n" - "_0809C280:\n" - "\tmovs r2, 0x80\n" - "\tlsls r2, 9\n" - "\tadds r0, r4, r2\n" - "\tlsrs r4, r0, 16\n" - "\tasrs r0, 16\n" - "\tcmp r0, 0x2\n" - "\tble _0809C238\n" - "\tadds r0, r2, 0\n" - "\tadd r0, r8\n" - "\tlsrs r2, r0, 16\n" - "\tasrs r0, 16\n" - "\tcmp r0, 0x2\n" - "\tble _0809C22C\n" - "\tb _0809C324\n" - "_0809C29C:\n" - "\tmovs r2, 0\n" - "\tlsls r5, 16\n" - "\tstr r5, [sp, 0xC]\n" - "\tlsls r0, r3, 16\n" - "\tlsls r1, r4, 16\n" - "\tasrs r0, 16\n" - "\tstr r0, [sp, 0x8]\n" - "\tasrs r7, r1, 16\n" - "_0809C2AC:\n" - "\tmovs r4, 0\n" - "\tlsls r2, 16\n" - "\tmov r8, r2\n" - "\tasrs r0, r2, 16\n" - "\tldr r1, [sp, 0x8]\n" - "\tadds r6, r1, r0\n" - "_0809C2B8:\n" - "\tldr r2, [sp, 0xC]\n" - "\tasrs r1, r2, 16\n" - "\tlsls r4, 16\n" - "\tasrs r0, r4, 16\n" - "\tadds r5, r1, r0\n" - "\tadds r0, r5, 0\n" - "\tadds r1, r6, 0\n" - "\tbl MapGridGetMetatileIdAt\n" - "\tmovs r1, 0x2\n" - "\tsubs r1, r7\n" - "\tlsls r1, 1\n" - "\tadd r1, r9\n" - "\tmovs r2, 0\n" - "\tldrsh r1, [r1, r2]\n" - "\tlsls r0, 16\n" - "\tasrs r0, 16\n" - "\tcmp r1, r0\n" - "\tbne _0809C30A\n" - "\tcmp r7, 0x2\n" - "\tbeq _0809C2FA\n" - "\tmovs r0, 0x1\n" - "\tsubs r0, r7\n" - "\tlsls r0, 1\n" - "\tadd r0, r9\n" - "\tldrh r0, [r0]\n" - "\tmov r2, r10\n" - "\torrs r2, r0\n" - "\tadds r0, r5, 0\n" - "\tadds r1, r6, 0\n" - "\tbl MapGridSetMetatileIdAt\n" - "\tb _0809C30A\n" - "_0809C2FA:\n" - "\tmov r1, r9\n" - "\tldrh r0, [r1, 0x4]\n" - "\tmov r2, r10\n" - "\torrs r2, r0\n" - "\tadds r0, r5, 0\n" - "\tadds r1, r6, 0\n" - "\tbl MapGridSetMetatileIdAt\n" - "_0809C30A:\n" - "\tmovs r2, 0x80\n" - "\tlsls r2, 9\n" - "\tadds r0, r4, r2\n" - "\tlsrs r4, r0, 16\n" - "\tasrs r0, 16\n" - "\tcmp r0, 0x2\n" - "\tble _0809C2B8\n" - "\tadds r0, r2, 0\n" - "\tadd r0, r8\n" - "\tlsrs r2, r0, 16\n" - "\tasrs r0, 16\n" - "\tcmp r0, 0x2\n" - "\tble _0809C2AC\n" - "_0809C324:\n" - "\tadd sp, 0x10\n" - "\tpop {r3-r5}\n" - "\tmov r8, r3\n" - "\tmov r9, r4\n" - "\tmov r10, r5\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0\n"); -} -#endif - -static void sub_809C334(u8 taskId) -{ - s16 *data = gTasks[taskId].data; - u16 v1; - - data[3] = 1; - switch (data[0]) - { - case 0: - sub_809C1D8(taskId, gUnknown_83DF0D4, 0); - break; - case 1: - sub_809C1D8(taskId, gUnknown_83DF0DA, 0); - break; - case 2: - sub_809C1D8(taskId, gUnknown_83DF0E0, 0xC00); - break; - case 3: - sub_809C1D8(taskId, gUnknown_83DF0E6, 0); - break; - case 4: - sub_809C1D8(taskId, gUnknown_83DF0EC, 0xC00); - break; - case 5: - sub_809C1D8(taskId, gUnknown_83DF0F2, 0); - break; - case 6: - sub_809C1D8(taskId, gUnknown_83DF0F8, 0); - default: - break; - } - data[0] = (data[0] + 1) & 7; - v1 = data[0] & 7; - //ldrh r5, [r4] instead mov r5, r0 somehow - if (v1 == 0) - { - DrawWholeMapView(); - data[1] = (data[1] + 1) % 3; - data[3] = v1; - } -} - -static u8 sub_809C3FC(u16 a0) -{ - u8 taskId; - s16 *data; - - taskId = CreateTask(sub_809C334, 0); - data = gTasks[taskId].data; - PlayerGetDestCoords(&tX, &tItemId); - t0 = 0; - tItemCount = 0; - data[2] = a0; - sub_809C334(taskId); - return taskId; -} - -void sub_809C448(u8 a0) -{ - u8 taskId; - - taskId = sub_809C3FC(a0); - gUnknown_2039984 = taskId; -} - -void sub_809C460(void) -{ - DestroyTask(gUnknown_2039984); -} - -bool8 sub_809C474(void) -{ - if (gTasks[gUnknown_2039984].data[3] == 0) - { - if (gTasks[gUnknown_2039984].data[1] != 2) - return TRUE; - return FALSE; - } - else - { - return TRUE; - } -} - -// special 0x1b5 - creates a tile animaiton one block left two-four up the player -void sub_809C4A8(void) -{ - u8 taskId; - s16 *data; - - taskId = CreateTask(sub_809C500, 0); - - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = 0; - - data = gTasks[taskId].data; - PlayerGetDestCoords(&data[2], &data[3]); - if (gSpecialVar_0x8004 == 0) - { - gTasks[taskId].data[2] += 6; - gTasks[taskId].data[3] -= 5; - } - else - { - gTasks[taskId].data[2]--; - gTasks[taskId].data[3] -= 5; - } -} - -static void sub_809C500(u8 taskId) -{ - s16 *data = gTasks[taskId].data; - - if (data[0] == 0) - { - if ((data[1] & 1) == 0) - { - MapGridSetMetatileIdAt(data[2], data[3], 0xEB5); - MapGridSetMetatileIdAt(data[2], data[3] + 2, 0xEB7); - } - else - { - MapGridSetMetatileIdAt(data[2], data[3], 0xEB6); - MapGridSetMetatileIdAt(data[2], data[3] + 2, 0xEB8); - } - CurrentMapDrawMetatileAt(data[2], data[3]); - CurrentMapDrawMetatileAt(data[2], data[3] + 2); - } - - data[0]++; - if (data[0] != 0x10) - return; - data[0] = 0; - - data[0] == 0; - data[1]++; - if (data[1] != 0xD) - return; - - MapGridSetMetatileIdAt(data[2], data[3], 0xE8A); - MapGridSetMetatileIdAt(data[2], data[3] + 2, 0xE96); - CurrentMapDrawMetatileAt(data[2], data[3]); - CurrentMapDrawMetatileAt(data[2], data[3] + 2); - DestroyTask(taskId); -} - -// special 0x1B7 - creates a tile animation two-six blocks right from the top-left corner of the screen -void sub_809C5FC(void) -{ - u8 taskId; - s16 *data; - - taskId = CreateTask(sub_809C640, 0); - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = 0; - - data = gTasks[taskId].data; - PlayerGetDestCoords(&data[2], &data[3]); - gTasks[taskId].data[2] += 4; - gTasks[taskId].data[3] -= 5; -} - -static void sub_809C640(u8 taskId) -{ - s16 *data = gTasks[taskId].data; - - if (data[0] == 0) - { - if (data[1] != 0) - { - MapGridSetMetatileIdAt(data[2], data[3], 0xE85); - MapGridSetMetatileIdAt(data[2], data[3] + 1, 0xEB4); - CurrentMapDrawMetatileAt(data[2], data[3]); - CurrentMapDrawMetatileAt(data[2], data[3] + 1); - if (data[1] == 4) - { - DestroyTask(taskId); - return; - } - data[2]--; - } - MapGridSetMetatileIdAt(data[2], data[3], 0xEB9); - MapGridSetMetatileIdAt(data[2], data[3] + 1, 0xEBA); - CurrentMapDrawMetatileAt(data[2], data[3]); - CurrentMapDrawMetatileAt(data[2], data[3] + 1); - } - data[0]++; - if (data[0] == 4) - { - data[0] = 0; - data[1]++; - } -} -- cgit v1.2.3 From e6a882cc920077f7e555714983a8835fbbe3e4bd Mon Sep 17 00:00:00 2001 From: Evan Date: Sun, 24 Nov 2019 17:22:02 -0700 Subject: separate sea cottage anim functions --- src/sea_cottage_special_anim.c | 417 +++++++++++++++++++++++++++++++++++++++++ src/shop.c | 24 +-- 2 files changed, 418 insertions(+), 23 deletions(-) create mode 100644 src/sea_cottage_special_anim.c (limited to 'src') diff --git a/src/sea_cottage_special_anim.c b/src/sea_cottage_special_anim.c new file mode 100644 index 000000000..e9b05a0fc --- /dev/null +++ b/src/sea_cottage_special_anim.c @@ -0,0 +1,417 @@ +#include "global.h" +#include "event_data.h" +#include "task.h" +#include "menu.h" +#include "field_player_avatar.h" +#include "fieldmap.h" +#include "field_map_obj.h" +#include "field_camera.h" + +// Defines +#define t0 data[0] +#define tX data[4] +#define tListTaskId data[7] + +// RAM +EWRAM_DATA u8 gUnknown_2039984 = 0; + + +// Function Declarations +static void sub_809C334(u8 taskId); +static void sub_809C500(u8 taskId); +static void sub_809C640(u8 taskId); + +// Data Definitions +static const u16 gUnknown_83DF0D4[] = {0x0308, 0x030a, 0x02d0}; +static const u16 gUnknown_83DF0DA[] = {0x0309, 0x030b, 0x02d1}; +static const u16 gUnknown_83DF0E0[] = {0x0310, 0x0312, 0x02d8}; +static const u16 gUnknown_83DF0E6[] = {0x0311, 0x0313, 0x02d9}; +static const u16 gUnknown_83DF0EC[] = {0x02e3, 0x0316, 0x0314}; +static const u16 gUnknown_83DF0F2[] = {0x02e4, 0x0317, 0x0315}; +static const u16 gUnknown_83DF0F8[] = {0x02eb, 0x031e, 0x031c}; + + +// Functions +#ifdef NONMATCHING +void sub_809C1D8(u8 taskId, const u16* a1, u16 a2) +{ + +} +#else +NAKED +void sub_809C1D8(u8 taskId, const u16* a1, u16 a2) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r10\n" + "\tmov r6, r9\n" + "\tmov r5, r8\n" + "\tpush {r5-r7}\n" + "\tsub sp, 0x10\n" + "\tmov r9, r1\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tlsls r2, 16\n" + "\tlsrs r2, 16\n" + "\tmov r10, r2\n" + "\tldr r2, _0809C26C @ =gTasks\n" + "\tlsls r1, r0, 2\n" + "\tadds r1, r0\n" + "\tlsls r1, 3\n" + "\tadds r1, r2\n" + "\tldrh r0, [r1, 0x10]\n" + "\tsubs r0, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r5, r0, 16\n" + "\tldrh r0, [r1, 0x12]\n" + "\tsubs r0, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r3, r0, 16\n" + "\tldrh r4, [r1, 0xA]\n" + "\tmovs r2, 0xC\n" + "\tldrsh r0, [r1, r2]\n" + "\tcmp r0, 0\n" + "\tbne _0809C29C\n" + "\tmovs r2, 0\n" + "\tlsls r5, 16\n" + "\tstr r5, [sp, 0xC]\n" + "\tlsls r0, r3, 16\n" + "\tlsls r1, r4, 16\n" + "\tasrs r0, 16\n" + "\tstr r0, [sp]\n" + "\tasrs r1, 16\n" + "\tstr r1, [sp, 0x4]\n" + "\tlsls r0, r1, 1\n" + "\tmov r1, r9\n" + "\tadds r7, r0, r1\n" + "_0809C22C:\n" + "\tmovs r4, 0\n" + "\tlsls r2, 16\n" + "\tmov r8, r2\n" + "\tasrs r0, r2, 16\n" + "\tldr r2, [sp]\n" + "\tadds r6, r2, r0\n" + "_0809C238:\n" + "\tldr r0, [sp, 0xC]\n" + "\tasrs r1, r0, 16\n" + "\tlsls r4, 16\n" + "\tasrs r0, r4, 16\n" + "\tadds r5, r1, r0\n" + "\tadds r0, r5, 0\n" + "\tadds r1, r6, 0\n" + "\tbl MapGridGetMetatileIdAt\n" + "\tmovs r2, 0\n" + "\tldrsh r1, [r7, r2]\n" + "\tlsls r0, 16\n" + "\tasrs r0, 16\n" + "\tcmp r1, r0\n" + "\tbne _0809C280\n" + "\tldr r0, [sp, 0x4]\n" + "\tcmp r0, 0x2\n" + "\tbeq _0809C270\n" + "\tldrh r0, [r7, 0x2]\n" + "\tmov r2, r10\n" + "\torrs r2, r0\n" + "\tadds r0, r5, 0\n" + "\tadds r1, r6, 0\n" + "\tbl MapGridSetMetatileIdAt\n" + "\tb _0809C280\n" + "\t.align 2, 0\n" + "_0809C26C: .4byte gTasks\n" + "_0809C270:\n" + "\tmov r1, r9\n" + "\tldrh r0, [r1]\n" + "\tmov r2, r10\n" + "\torrs r2, r0\n" + "\tadds r0, r5, 0\n" + "\tadds r1, r6, 0\n" + "\tbl MapGridSetMetatileIdAt\n" + "_0809C280:\n" + "\tmovs r2, 0x80\n" + "\tlsls r2, 9\n" + "\tadds r0, r4, r2\n" + "\tlsrs r4, r0, 16\n" + "\tasrs r0, 16\n" + "\tcmp r0, 0x2\n" + "\tble _0809C238\n" + "\tadds r0, r2, 0\n" + "\tadd r0, r8\n" + "\tlsrs r2, r0, 16\n" + "\tasrs r0, 16\n" + "\tcmp r0, 0x2\n" + "\tble _0809C22C\n" + "\tb _0809C324\n" + "_0809C29C:\n" + "\tmovs r2, 0\n" + "\tlsls r5, 16\n" + "\tstr r5, [sp, 0xC]\n" + "\tlsls r0, r3, 16\n" + "\tlsls r1, r4, 16\n" + "\tasrs r0, 16\n" + "\tstr r0, [sp, 0x8]\n" + "\tasrs r7, r1, 16\n" + "_0809C2AC:\n" + "\tmovs r4, 0\n" + "\tlsls r2, 16\n" + "\tmov r8, r2\n" + "\tasrs r0, r2, 16\n" + "\tldr r1, [sp, 0x8]\n" + "\tadds r6, r1, r0\n" + "_0809C2B8:\n" + "\tldr r2, [sp, 0xC]\n" + "\tasrs r1, r2, 16\n" + "\tlsls r4, 16\n" + "\tasrs r0, r4, 16\n" + "\tadds r5, r1, r0\n" + "\tadds r0, r5, 0\n" + "\tadds r1, r6, 0\n" + "\tbl MapGridGetMetatileIdAt\n" + "\tmovs r1, 0x2\n" + "\tsubs r1, r7\n" + "\tlsls r1, 1\n" + "\tadd r1, r9\n" + "\tmovs r2, 0\n" + "\tldrsh r1, [r1, r2]\n" + "\tlsls r0, 16\n" + "\tasrs r0, 16\n" + "\tcmp r1, r0\n" + "\tbne _0809C30A\n" + "\tcmp r7, 0x2\n" + "\tbeq _0809C2FA\n" + "\tmovs r0, 0x1\n" + "\tsubs r0, r7\n" + "\tlsls r0, 1\n" + "\tadd r0, r9\n" + "\tldrh r0, [r0]\n" + "\tmov r2, r10\n" + "\torrs r2, r0\n" + "\tadds r0, r5, 0\n" + "\tadds r1, r6, 0\n" + "\tbl MapGridSetMetatileIdAt\n" + "\tb _0809C30A\n" + "_0809C2FA:\n" + "\tmov r1, r9\n" + "\tldrh r0, [r1, 0x4]\n" + "\tmov r2, r10\n" + "\torrs r2, r0\n" + "\tadds r0, r5, 0\n" + "\tadds r1, r6, 0\n" + "\tbl MapGridSetMetatileIdAt\n" + "_0809C30A:\n" + "\tmovs r2, 0x80\n" + "\tlsls r2, 9\n" + "\tadds r0, r4, r2\n" + "\tlsrs r4, r0, 16\n" + "\tasrs r0, 16\n" + "\tcmp r0, 0x2\n" + "\tble _0809C2B8\n" + "\tadds r0, r2, 0\n" + "\tadd r0, r8\n" + "\tlsrs r2, r0, 16\n" + "\tasrs r0, 16\n" + "\tcmp r0, 0x2\n" + "\tble _0809C2AC\n" + "_0809C324:\n" + "\tadd sp, 0x10\n" + "\tpop {r3-r5}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tmov r10, r5\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n"); +} +#endif + +static void sub_809C334(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + u16 v1; + + data[3] = 1; + switch (data[0]) + { + case 0: + sub_809C1D8(taskId, gUnknown_83DF0D4, 0); + break; + case 1: + sub_809C1D8(taskId, gUnknown_83DF0DA, 0); + break; + case 2: + sub_809C1D8(taskId, gUnknown_83DF0E0, 0xC00); + break; + case 3: + sub_809C1D8(taskId, gUnknown_83DF0E6, 0); + break; + case 4: + sub_809C1D8(taskId, gUnknown_83DF0EC, 0xC00); + break; + case 5: + sub_809C1D8(taskId, gUnknown_83DF0F2, 0); + break; + case 6: + sub_809C1D8(taskId, gUnknown_83DF0F8, 0); + default: + break; + } + data[0] = (data[0] + 1) & 7; + v1 = data[0] & 7; + //ldrh r5, [r4] instead mov r5, r0 somehow + if (v1 == 0) + { + DrawWholeMapView(); + data[1] = (data[1] + 1) % 3; + data[3] = v1; + } +} + +static u8 sub_809C3FC(u16 a0) +{ + u8 taskId; + s16 *data; + + taskId = CreateTask(sub_809C334, 0); + data = gTasks[taskId].data; + PlayerGetDestCoords(&tX, &data[5]); + t0 = 0; + data[1] = 0; + data[2] = a0; + sub_809C334(taskId); + return taskId; +} + +void sub_809C448(u8 a0) +{ + u8 taskId; + + taskId = sub_809C3FC(a0); + gUnknown_2039984 = taskId; +} + +void sub_809C460(void) +{ + DestroyTask(gUnknown_2039984); +} + +bool8 sub_809C474(void) +{ + if (gTasks[gUnknown_2039984].data[3] == 0) + { + if (gTasks[gUnknown_2039984].data[1] != 2) + return TRUE; + return FALSE; + } + else + { + return TRUE; + } +} + +// special 0x1b5 - creates a tile animaiton one block left two-four up the player +void sub_809C4A8(void) +{ + u8 taskId; + s16 *data; + + taskId = CreateTask(sub_809C500, 0); + + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = 0; + + data = gTasks[taskId].data; + PlayerGetDestCoords(&data[2], &data[3]); + if (gSpecialVar_0x8004 == 0) + { + gTasks[taskId].data[2] += 6; + gTasks[taskId].data[3] -= 5; + } + else + { + gTasks[taskId].data[2]--; + gTasks[taskId].data[3] -= 5; + } +} + +static void sub_809C500(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + if (data[0] == 0) + { + if ((data[1] & 1) == 0) + { + MapGridSetMetatileIdAt(data[2], data[3], 0xEB5); + MapGridSetMetatileIdAt(data[2], data[3] + 2, 0xEB7); + } + else + { + MapGridSetMetatileIdAt(data[2], data[3], 0xEB6); + MapGridSetMetatileIdAt(data[2], data[3] + 2, 0xEB8); + } + CurrentMapDrawMetatileAt(data[2], data[3]); + CurrentMapDrawMetatileAt(data[2], data[3] + 2); + } + + data[0]++; + if (data[0] != 0x10) + return; + data[0] = 0; + + data[0] == 0; + data[1]++; + if (data[1] != 0xD) + return; + + MapGridSetMetatileIdAt(data[2], data[3], 0xE8A); + MapGridSetMetatileIdAt(data[2], data[3] + 2, 0xE96); + CurrentMapDrawMetatileAt(data[2], data[3]); + CurrentMapDrawMetatileAt(data[2], data[3] + 2); + DestroyTask(taskId); +} + +// special 0x1B7 - creates a tile animation two-six blocks right from the top-left corner of the screen +void sub_809C5FC(void) +{ + u8 taskId; + s16 *data; + + taskId = CreateTask(sub_809C640, 0); + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = 0; + + data = gTasks[taskId].data; + PlayerGetDestCoords(&data[2], &data[3]); + gTasks[taskId].data[2] += 4; + gTasks[taskId].data[3] -= 5; +} + +static void sub_809C640(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + if (data[0] == 0) + { + if (data[1] != 0) + { + MapGridSetMetatileIdAt(data[2], data[3], 0xE85); + MapGridSetMetatileIdAt(data[2], data[3] + 1, 0xEB4); + CurrentMapDrawMetatileAt(data[2], data[3]); + CurrentMapDrawMetatileAt(data[2], data[3] + 1); + if (data[1] == 4) + { + DestroyTask(taskId); + return; + } + data[2]--; + } + MapGridSetMetatileIdAt(data[2], data[3], 0xEB9); + MapGridSetMetatileIdAt(data[2], data[3] + 1, 0xEBA); + CurrentMapDrawMetatileAt(data[2], data[3]); + CurrentMapDrawMetatileAt(data[2], data[3] + 1); + } + data[0]++; + if (data[0] == 4) + { + data[0] = 0; + data[1]++; + } +} diff --git a/src/shop.c b/src/shop.c index 0a96b7eb3..55fe7311a 100644 --- a/src/shop.c +++ b/src/shop.c @@ -34,7 +34,6 @@ #include "money.h" #include "quest_log.h" #include "script.h" -#include "event_data.h" #include "constants/songs.h" #include "constants/items.h" #include "constants/game_stat.h" @@ -112,8 +111,6 @@ EWRAM_DATA u8 (*gUnknown_2039968)[13] = {0}; //item strings EWRAM_DATA s16 gUnknown_20398B4[MAP_OBJECTS_COUNT][4] = {0}; //sViewportMapObjects EWRAM_DATA struct MartHistory gUnknown_203996C = {0}; -EWRAM_DATA u8 gUnknown_2039984 = 0; - //Function Declarations static u8 sub_809AAB0(u8 a0); static u8 sub_809AB7C(bool32 a0); @@ -171,11 +168,6 @@ static void nullsub_52(u8 taskId); static void nullsub_53(void); static void sub_809C138(void); -// new file? -static void sub_809C334(u8 taskId); -static void sub_809C500(u8 taskId); -static void sub_809C640(u8 taskId); - // external defines extern u8 MapGridGetMetatileLayerTypeAt(s16 x, s16 y); extern u16 BagGetQuantityByItemId(u16 item); @@ -186,13 +178,6 @@ extern const struct MenuAction gUnknown_83DF09C[]; extern const struct YesNoFuncTable gUnknown_83DF0B4[]; extern const struct WindowTemplate gUnknown_83DF0BC[]; extern const struct BgTemplate gUnknown_83DF0C4[]; -extern const u16 gUnknown_83DF0D4[]; -extern const u16 gUnknown_83DF0DA[]; -extern const u16 gUnknown_83DF0E0[]; -extern const u16 gUnknown_83DF0E6[]; -extern const u16 gUnknown_83DF0EC[]; -extern const u16 gUnknown_83DF0F2[]; -extern const u16 gUnknown_83DF0F8[]; */ //graphics @@ -268,14 +253,6 @@ static const struct BgTemplate gUnknown_83DF0C4[] = //sShopBuyMenuBgTemplate } }; -static const u16 gUnknown_83DF0D4[] = {0x0308, 0x030a, 0x02d0}; -static const u16 gUnknown_83DF0DA[] = {0x0309, 0x030b, 0x02d1}; -static const u16 gUnknown_83DF0E0[] = {0x0310, 0x0312, 0x02d8}; -static const u16 gUnknown_83DF0E6[] = {0x0311, 0x0313, 0x02d9}; -static const u16 gUnknown_83DF0EC[] = {0x02e3, 0x0316, 0x0314}; -static const u16 gUnknown_83DF0F2[] = {0x02e4, 0x0317, 0x0315}; -static const u16 gUnknown_83DF0F8[] = {0x02eb, 0x031e, 0x031c}; - // Functions // CreateShopMenu @@ -1680,3 +1657,4 @@ void CreateDecorationShop2Menu(const u16 *itemsForSale) sub_809AAB0(MART_TYPE_DECOR2); sub_809AC04(EnableBothScriptContexts); } + -- cgit v1.2.3 From 30994831130ec41feea5229b787fe76db792d1b1 Mon Sep 17 00:00:00 2001 From: Evan Date: Sun, 24 Nov 2019 22:04:51 -0700 Subject: match BuyMenuCollectEventObjectData --- src/shop.c | 271 ++++++------------------------------------------------------- 1 file changed, 25 insertions(+), 246 deletions(-) (limited to 'src') diff --git a/src/shop.c b/src/shop.c index 55fe7311a..340dcf811 100644 --- a/src/shop.c +++ b/src/shop.c @@ -213,7 +213,7 @@ static const struct WindowTemplate gUnknown_83DF0BC[] = //sShopMenuWindowTem } }; -static const struct BgTemplate gUnknown_83DF0C4[] = //sShopBuyMenuBgTemplates +static const struct BgTemplate gUnknown_83DF0C4[4] = //sShopBuyMenuBgTemplates { { .bg = 0, @@ -510,13 +510,11 @@ static bool8 sub_809AF6C(void) return FALSE; } -#ifdef NONMATCHING //BuyMenuInitBgs -// this matches but adjusts offsets const for some reason... static void sub_809AFD0(void) { ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, gUnknown_83DF0C4, 4); //NELEMS(gUnknown_83DF0C4)); + InitBgsFromTemplates(0, gUnknown_83DF0C4, NELEMS(gUnknown_83DF0C4)); SetBgTilemapBuffer(1, gUnknown_2039958); SetBgTilemapBuffer(2, gUnknown_2039960); SetBgTilemapBuffer(3, gUnknown_203995C); @@ -532,79 +530,9 @@ static void sub_809AFD0(void) SetGpuReg(0, 0x1040); ShowBg(0); ShowBg(1); - ShowBg(2); + ShowBg(2); + ShowBg(3); } -#else -NAKED -static void sub_809AFD0(void) -{ - asm_unified("\tpush {lr}\n" - "\tmovs r0, 0\n" - "\tbl ResetBgsAndClearDma3BusyFlags\n" - "\tldr r1, _0809B070 @ =gUnknown_83DF0C4\n" - "\tmovs r0, 0\n" - "\tmovs r2, 0x4\n" - "\tbl InitBgsFromTemplates\n" - "\tldr r0, _0809B074 @ =gUnknown_2039958\n" - "\tldr r1, [r0]\n" - "\tmovs r0, 0x1\n" - "\tbl SetBgTilemapBuffer\n" - "\tldr r0, _0809B078 @ =gUnknown_2039960\n" - "\tldr r1, [r0]\n" - "\tmovs r0, 0x2\n" - "\tbl SetBgTilemapBuffer\n" - "\tldr r0, _0809B07C @ =gUnknown_203995C\n" - "\tldr r1, [r0]\n" - "\tmovs r0, 0x3\n" - "\tbl SetBgTilemapBuffer\n" - "\tmovs r0, 0x10\n" - "\tmovs r1, 0\n" - "\tbl SetGpuReg\n" - "\tmovs r0, 0x12\n" - "\tmovs r1, 0\n" - "\tbl SetGpuReg\n" - "\tmovs r0, 0x14\n" - "\tmovs r1, 0\n" - "\tbl SetGpuReg\n" - "\tmovs r0, 0x16\n" - "\tmovs r1, 0\n" - "\tbl SetGpuReg\n" - "\tmovs r0, 0x18\n" - "\tmovs r1, 0\n" - "\tbl SetGpuReg\n" - "\tmovs r0, 0x1A\n" - "\tmovs r1, 0\n" - "\tbl SetGpuReg\n" - "\tmovs r0, 0x1C\n" - "\tmovs r1, 0\n" - "\tbl SetGpuReg\n" - "\tmovs r0, 0x1E\n" - "\tmovs r1, 0\n" - "\tbl SetGpuReg\n" - "\tmovs r0, 0x50\n" - "\tmovs r1, 0\n" - "\tbl SetGpuReg\n" - "\tmovs r1, 0x82\n" - "\tlsls r1, 5\n" - "\tmovs r0, 0\n" - "\tbl SetGpuReg\n" - "\tmovs r0, 0\n" - "\tbl ShowBg\n" - "\tmovs r0, 0x1\n" - "\tbl ShowBg\n" - "\tmovs r0, 0x2\n" - "\tbl ShowBg\n" - "\tmovs r0, 0x3\n" - "\tbl ShowBg\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" - "_0809B070: .4byte gUnknown_83DF0C4\n" - "_0809B074: .4byte gUnknown_2039958\n" - "_0809B078: .4byte gUnknown_2039960\n" - "_0809B07C: .4byte gUnknown_203995C\n"); -} -#endif //BuyMenuDecompressBgGraphics static void sub_809B080(void) @@ -757,23 +685,23 @@ static void sub_809B320(s32 item, bool8 onInit, struct ListMenu *list) #ifdef NONMATCHING //this function was written very strangely.. static void sub_809B408(u8 windowId, s32 item, u8 y) { - u32 len; - u8* loc; + u32 len, x; + u8 *loc; if (item != INDEX_CANCEL) { - ConvertIntToDecimalStringN(gStringVar1, itemid_get_market_price(item), 0, NUM_CHARS_PRICE); - - //len = StringLength(gStringVar1); + ConvertIntToDecimalStringN(gStringVar1, itemid_get_market_price(item), 0, 4); len = 4 - StringLength(gStringVar1); - //len = NUM_CHARS_PRICE - len; loc = gStringVar4; - - while (len != 0) + x = len - 1; + if (x > 0) { - loc[4-len] = 0; - *loc++; - len--; + while (len != 0) + { + *loc = 0; + loc++; + len--; + } } StringExpandPlaceholders(loc, gText_PokedollarVar1); BuyMenuPrint(windowId, 1, gStringVar4, 0x69, y, 0, 0, TEXT_SPEED_FF, 1); @@ -1040,8 +968,7 @@ static void sub_809B904(u16 *dest, s16 offset1, s16 offset2, const u16 *src) } -// BuyMenuCollectEventObjectData(void) -#ifdef NONMATCHING +// BuyMenuCollectEventObjectData static void sub_809B92C(void) { s16 facingX; @@ -1055,34 +982,33 @@ static void sub_809B92C(void) z = PlayerGetZCoord(); for (y = 0; y < MAP_OBJECTS_COUNT; y++) - gUnknown_20398B4[y].eventObjId = MAP_OBJECTS_COUNT; + gUnknown_20398B4[y][EVENT_OBJ_ID] = MAP_OBJECTS_COUNT; for (y = 0; y < 5; y++) { for (x = 0; x < 7; x++) { - u8 eventObjId = GetFieldObjectIdByXYZ(facingX - 4 + x, facingY - 2 + y, z); + u8 eventObjId = GetFieldObjectIdByXYZ(facingX - 3 + x, facingY - 2 + y, z); if (eventObjId != MAP_OBJECTS_COUNT) { - gUnknown_20398B4[num].eventObjId = eventObjId; - gUnknown_20398B4[num].x = x; - gUnknown_20398B4[num].y = y; - //gUnknown_20398B4[num].layerType = MapGridGetMetatileLayerTypeAt(facingX - 4 + x, facingY - 2 + y); + gUnknown_20398B4[num][EVENT_OBJ_ID] = eventObjId; + gUnknown_20398B4[num][X_COORD] = x; + gUnknown_20398B4[num][Y_COORD] = y; switch (gMapObjects[eventObjId].facingDirection) { case DIR_SOUTH: - gUnknown_20398B4[num].animNum = 0; + gUnknown_20398B4[num][ANIM_NUM] = 0; break; case DIR_NORTH: - gUnknown_20398B4[num].animNum = 1; + gUnknown_20398B4[num][ANIM_NUM] = 1; break; case DIR_WEST: - gUnknown_20398B4[num].animNum = 2; + gUnknown_20398B4[num][ANIM_NUM] = 2; break; case DIR_EAST: default: - gUnknown_20398B4[num].animNum = 3; + gUnknown_20398B4[num][ANIM_NUM] = 3; break; } num++; @@ -1090,153 +1016,6 @@ static void sub_809B92C(void) } } } -#else -NAKED -static void sub_809B92C(void) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tmov r7, r10\n" - "\tmov r6, r9\n" - "\tmov r5, r8\n" - "\tpush {r5-r7}\n" - "\tsub sp, 0x8\n" - "\tmovs r0, 0\n" - "\tmov r9, r0\n" - "\tmov r4, sp\n" - "\tadds r4, 0x2\n" - "\tmov r0, sp\n" - "\tadds r1, r4, 0\n" - "\tbl GetXYCoordsOneStepInFrontOfPlayer\n" - "\tbl PlayerGetZCoord\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tstr r0, [sp, 0x4]\n" - "\tmovs r5, 0\n" - "\tldr r2, _0809B9DC @ =gUnknown_20398B4\n" - "\tmovs r1, 0x10\n" - "_0809B958:\n" - "\tlsls r0, r5, 3\n" - "\tadds r0, r2\n" - "\tstrh r1, [r0]\n" - "\tadds r0, r5, 0x1\n" - "\tlsls r0, 24\n" - "\tlsrs r5, r0, 24\n" - "\tcmp r5, 0xF\n" - "\tbls _0809B958\n" - "\tmovs r5, 0\n" - "\tldr r6, _0809B9E0 @ =gUnknown_20398BA\n" - "\tsubs r1, r6, 0x6\n" - "\tmov r8, r1\n" - "_0809B970:\n" - "\tmovs r4, 0\n" - "\tadds r2, r5, 0x1\n" - "\tmov r10, r2\n" - "_0809B976:\n" - "\tmov r1, sp\n" - "\tldr r3, _0809B9E4 @ =0x0000fffd\n" - "\tadds r0, r3, 0\n" - "\tldrh r1, [r1]\n" - "\tadds r0, r1\n" - "\tadds r0, r4\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tldr r2, _0809B9E8 @ =0x0000fffe\n" - "\tadds r1, r2, 0\n" - "\tmov r3, sp\n" - "\tldrh r3, [r3, 0x2]\n" - "\tadds r1, r3\n" - "\tadds r1, r5\n" - "\tlsls r1, 16\n" - "\tlsrs r1, 16\n" - "\tldr r2, [sp, 0x4]\n" - "\tbl GetFieldObjectIdByXYZ\n" - "\tlsls r0, 24\n" - "\tlsrs r3, r0, 24\n" - "\tcmp r3, 0x10\n" - "\tbeq _0809BA1C\n" - "\tmov r0, r9\n" - "\tlsls r2, r0, 3\n" - "\tmov r1, r8\n" - "\tadds r0, r2, r1\n" - "\tmovs r7, 0\n" - "\tstrh r3, [r0]\n" - "\tmov r0, r8\n" - "\tadds r0, 0x2\n" - "\tadds r0, r2, r0\n" - "\tstrh r4, [r0]\n" - "\tldr r1, _0809B9EC @ =gUnknown_20398B8\n" - "\tadds r0, r2, r1\n" - "\tstrh r5, [r0]\n" - "\tldr r1, _0809B9F0 @ =gMapObjects\n" - "\tlsls r0, r3, 3\n" - "\tadds r0, r3\n" - "\tlsls r0, 2\n" - "\tadds r0, r1\n" - "\tldrb r0, [r0, 0x18]\n" - "\tlsls r0, 28\n" - "\tlsrs r0, 28\n" - "\tcmp r0, 0x2\n" - "\tbeq _0809BA00\n" - "\tcmp r0, 0x2\n" - "\tbgt _0809B9F4\n" - "\tcmp r0, 0x1\n" - "\tbeq _0809B9FA\n" - "\tb _0809BA0C\n" - "\t.align 2, 0\n" - "_0809B9DC: .4byte gUnknown_20398B4\n" - "_0809B9E0: .4byte gUnknown_20398BA\n" - "_0809B9E4: .4byte 0x0000fffd\n" - "_0809B9E8: .4byte 0x0000fffe\n" - "_0809B9EC: .4byte gUnknown_20398B8\n" - "_0809B9F0: .4byte gMapObjects\n" - "_0809B9F4:\n" - "\tcmp r0, 0x3\n" - "\tbeq _0809BA06\n" - "\tb _0809BA0C\n" - "_0809B9FA:\n" - "\tadds r0, r2, r6\n" - "\tstrh r7, [r0]\n" - "\tb _0809BA12\n" - "_0809BA00:\n" - "\tadds r1, r2, r6\n" - "\tmovs r0, 0x1\n" - "\tb _0809BA10\n" - "_0809BA06:\n" - "\tadds r1, r2, r6\n" - "\tmovs r0, 0x2\n" - "\tb _0809BA10\n" - "_0809BA0C:\n" - "\tadds r1, r2, r6\n" - "\tmovs r0, 0x3\n" - "_0809BA10:\n" - "\tstrh r0, [r1]\n" - "_0809BA12:\n" - "\tmov r0, r9\n" - "\tadds r0, 0x1\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tmov r9, r0\n" - "_0809BA1C:\n" - "\tadds r0, r4, 0x1\n" - "\tlsls r0, 24\n" - "\tlsrs r4, r0, 24\n" - "\tcmp r4, 0x6\n" - "\tbls _0809B976\n" - "\tmov r2, r10\n" - "\tlsls r0, r2, 24\n" - "\tlsrs r5, r0, 24\n" - "\tcmp r5, 0x4\n" - "\tbls _0809B970\n" - "\tadd sp, 0x8\n" - "\tpop {r3-r5}\n" - "\tmov r8, r3\n" - "\tmov r9, r4\n" - "\tmov r10, r5\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0\n"); -} -#endif //BuyMenuDrawEventObjects static void sub_809BA40(void) -- cgit v1.2.3 From c73f061cc68468c3227be98fd49cba9514bbd567 Mon Sep 17 00:00:00 2001 From: Evan Date: Mon, 25 Nov 2019 15:04:38 -0700 Subject: update ewram --- src/berry_pouch.c | 2 +- src/buy_menu_helpers.c | 2 +- src/sea_cottage_special_anim.c | 24 +- src/shop.c | 643 +++++++++++++++++++---------------------- src/tm_case.c | 2 +- 5 files changed, 317 insertions(+), 356 deletions(-) (limited to 'src') diff --git a/src/berry_pouch.c b/src/berry_pouch.c index b8b66c0bc..0ecf43b45 100644 --- a/src/berry_pouch.c +++ b/src/berry_pouch.c @@ -1384,7 +1384,7 @@ static void Task_SellBerries_PlaySfxAndRemoveBerries(u8 taskId) PlaySE(SE_SHOP); RemoveBagItem(gSpecialVar_ItemId, data[8]); AddMoney(&gSaveBlock1Ptr->money, itemid_get_market_price(gSpecialVar_ItemId) / 2 * data[8]); - sub_809C09C(gSpecialVar_ItemId, data[8], 2); + RecordItemPurchase(gSpecialVar_ItemId, data[8], 2); DestroyListMenuTask(data[0], &sStaticCnt.listMenuScrollOffset, &sStaticCnt.listMenuSelectedRow); SortAndCountBerries(); SanitizeListMenuSelectionParams(); diff --git a/src/buy_menu_helpers.c b/src/buy_menu_helpers.c index 44de094b5..1fd160576 100644 --- a/src/buy_menu_helpers.c +++ b/src/buy_menu_helpers.c @@ -184,7 +184,7 @@ void BuyMenuPrint(u8 windowId, u8 font, const u8 *text, u8 x, u8 y, u8 letterSpa void BuyMenuDisplayMessage(u8 taskId, const u8 *text, TaskFunc callback) { - DisplayMessageAndContinueTask(taskId, 2, 0x13, 0xE, sub_809B56C(), GetTextSpeedSetting(), text, callback); + DisplayMessageAndContinueTask(taskId, 2, 0x13, 0xE, GetMartUnk16_4(), GetTextSpeedSetting(), text, callback); ScheduleBgCopyTilemapToVram(0); } diff --git a/src/sea_cottage_special_anim.c b/src/sea_cottage_special_anim.c index e9b05a0fc..67fc70209 100644 --- a/src/sea_cottage_special_anim.c +++ b/src/sea_cottage_special_anim.c @@ -35,7 +35,29 @@ static const u16 gUnknown_83DF0F8[] = {0x02eb, 0x031e, 0x031c}; #ifdef NONMATCHING void sub_809C1D8(u8 taskId, const u16* a1, u16 a2) { - + s16 v1, v2, v3; + s16 i, j; + + v1 = gTasks[taskId].data[5] - 1; + v2 = gTasks[taskId].data[6] - 1; + v3 = gTasks[taskId].data[2]; + + if (gTasks[taskId].data[3] == 0) + { + for (i = 0; i < 3; i++) + { + for (j = 0; j < 3; j++) + { + MapGridGetMetatileIdAt(v1 + j, v2 + i); + if () + { + + } + + MapGridSetMetatileIdAt + } + } + } } #else NAKED diff --git a/src/shop.c b/src/shop.c index 340dcf811..d0b3994a2 100644 --- a/src/shop.c +++ b/src/shop.c @@ -44,6 +44,7 @@ #define tItemId data[5] #define tListTaskId data[7] +// mart types enum { MART_TYPE_REGULAR = 0, @@ -52,9 +53,14 @@ enum MART_TYPE_DECOR2, }; -// RAM symbols -// Function Declarations -// Data Definitions +// shop view window NPC info enum +enum +{ + EVENT_OBJ_ID, + X_COORD, + Y_COORD, + ANIM_NUM +}; struct ShopData { @@ -71,7 +77,6 @@ struct ShopData u16 itemSlot:2; u16 unk16_11:5; /*0x18*/ u16 unk18; - //INCOMPLETE }; struct MartHistory @@ -92,81 +97,73 @@ struct MartHistory }; /* size = 0x18 */ +EWRAM_DATA s16 sViewportMapObjects[MAP_OBJECTS_COUNT][4] = {0}; EWRAM_DATA struct ShopData gShopData = {0}; -EWRAM_DATA u8 gUnknown_2039950 = 0; //sShopMenuWindowId - -EWRAM_DATA u16 (*gUnknown_2039954)[0x400] = {0}; //gShopTilemapBuffers -EWRAM_DATA u16 (*gUnknown_2039958)[0x400] = {0}; -EWRAM_DATA u16 (*gUnknown_203995C)[0x400] = {0}; -EWRAM_DATA u16 (*gUnknown_2039960)[0x400] = {0}; -/* -EWRAM_DATA struct ShopTilemapBuffers *gUnknown_2039954 = 0; //gShopTilemapBuffers -EWRAM_DATA struct ShopTilemapBuffers *gUnknown_2039958 = 0; -EWRAM_DATA struct ShopTilemapBuffers *gUnknown_203995C = 0; -EWRAM_DATA struct ShopTilemapBuffers *gUnknown_2039960 = 0; -*/ -EWRAM_DATA struct ListMenuItem *gUnknown_2039964 = {0}; -EWRAM_DATA u8 (*gUnknown_2039968)[13] = {0}; //item strings - -EWRAM_DATA s16 gUnknown_20398B4[MAP_OBJECTS_COUNT][4] = {0}; //sViewportMapObjects -EWRAM_DATA struct MartHistory gUnknown_203996C = {0}; +EWRAM_DATA u8 sShopMenuWindowId = 0; +EWRAM_DATA u16 (*gShopTilemapBuffer1)[0x400] = {0}; +EWRAM_DATA u16 (*gShopTilemapBuffer2)[0x400] = {0}; +EWRAM_DATA u16 (*gShopTilemapBuffer3)[0x400] = {0}; +EWRAM_DATA u16 (*gShopTilemapBuffer4)[0x400] = {0}; +EWRAM_DATA struct ListMenuItem *sShopMenuListMenu = {0}; +EWRAM_DATA u8 (*sShopMenuItemStrings)[13] = {0}; +EWRAM_DATA struct MartHistory gShopMenuHistory = {0}; //Function Declarations -static u8 sub_809AAB0(u8 a0); -static u8 sub_809AB7C(bool32 a0); -static void sub_809ABD8(const u16 *items); -static void sub_809AC04(MainCallback callback); -static void sub_809AC10(u8 taskId); -static void sub_809AC5C(u8 taskId); -static void sub_809AC98(u8 taskId); -static void sub_809ACD4(void); -static void sub_809ACF8(u8 taskId); -static void sub_809AD24(void); -static void sub_809AD40(u8 taskId); -static void sub_809AD74(void); -static void sub_809AD8C(u8 taskId); -static void sub_809ADC0(u8 taskId); //ShowShopMenuAfterExitingBuyOrSellMenu -static void sub_809ADE4(void); -static void sub_809AE00(void); -static void sub_809AE14(void); -static bool8 sub_809AF6C(void); -static void sub_809AFD0(void); //BuyMenuInitBgs -static void sub_809B080(void); +static u8 CreateShopMenu(u8 a0); +static u8 GetMartTypeFromItemList(bool32 a0); +static void SetShopItemsForSale(const u16 *items); +static void SetShopMenuCallback(MainCallback callback); +static void Task_ShopMenu(u8 taskId); +static void Task_HandleShopMenuBuy(u8 taskId); +static void Task_HandleShopMenuSell(u8 taskId); +static void CB2_GoToSellMenu(void); +static void Task_HandleShopMenuQuit(u8 taskId); +static void ClearShopMenuWindow(void); +static void Task_GoToBuyOrSellMenu(u8 taskId); +static void MapPostLoadHook_ReturnToShopMenu(void); +static void Task_ReturnToShopMenu(u8 taskId); +static void ShowShopMenuAfterExitingBuyOrSellMenu(u8 taskId); +static void CB2_BuyMenu(void); +static void VBlankCB_BuyMenu(void); +static void CB2_InitBuyMenu(void); +static bool8 InitShopData(void); +static void BuyMenuInitBgs(void); +static void BuyMenuDecompressBgGraphics(void); static void sub_809B10C(bool32 a0); -static void sub_809B15C(void); //BuyMenuDrawGraphics(); -static bool8 sub_809B188(void); //BuyMenuBuildListMenuTemplate -static void sub_809B300(struct ListMenuItem *list, u16 index, u8* dst); -static void sub_809B320(s32 item, bool8 onInit, struct ListMenu *list); -static void sub_809B408(u8 windowId, s32 itemId, u8 y); -static void sub_809B494(s32 item); -static void sub_809B57C(u8 listTaskId, u8 a1); -static void sub_809B59C(u8 y, u8 a1); -static void sub_809B604(void); -static void sub_809B670(void); -static void sub_809B690(void); -static void sub_809B6FC(void); -static void sub_809B73C(void); +static void BuyMenuDrawGraphics(void); +static bool8 BuyMenuBuildListMenuTemplate(void); +static void PokeMartWriteNameAndIdAt(struct ListMenuItem *list, u16 index, u8* dst); +static void BuyMenuPrintItemDescriptionAndShowItemIcon(s32 item, bool8 onInit, struct ListMenu *list); +static void BuyMenuPrintPriceInList(u8 windowId, s32 itemId, u8 y); +static void LoadTmHmNameInMart(s32 item); +static void BuyMenuPrintCursor(u8 listTaskId, u8 a1); +static void BuyMenuPrintCursorAtYPosition(u8 y, u8 a1); +static void BuyMenuFreeMemory(void); +static void SetShopExitCallback(void); +static void BuyMenuAddScrollIndicatorArrows(void); +static void BuyQuantityAddScrollIndicatorArrows(void); +static void BuyMenuRemoveScrollIndicatorArrows(void); static void sub_809B764(void); -static void sub_809B778(void); -static void sub_809B850(s16 x, s16 y, const u16 *src, u8 metatileLayerType); -static void sub_809B904(u16 *dest, s16 offset1, s16 offset2, const u16 *src); -static void sub_809B92C(void); -static void sub_809BA40(void); -static void sub_809BAFC(void); -static void sub_809BB44(u8 taskId); -static void sub_809BBC0(u8 taskId); -static void sub_809BCA0(u8 taskId); -static void sub_809BD8C(u8 taskId); -static void sub_809BE90(u8 taskId); -static void sub_809BEA4(u8 taskId); -static void sub_809BF0C(u8 taskId); -static void sub_809BF68(u8 taskId); -static void sub_809BF98(u8 taskId); -static void sub_809C004(u8 taskId); -static void sub_809C04C(u8 taskId); +static void BuyMenuDrawMapBg(void); +static void BuyMenuDrawMapMetatile(s16 x, s16 y, const u16 *src, u8 metatileLayerType); +static void BuyMenuDrawMapMetatileLayer(u16 *dest, s16 offset1, s16 offset2, const u16 *src); +static void BuyMenuCollectEventObjectData(void); +static void BuyMenuDrawEventObjects(void); +static void BuyMenuCopyTilemapData(void); +static void BuyMenuPrintItemQuantityAndPrice(u8 taskId); +static void Task_BuyMenu(u8 taskId); +static void Task_BuyHowManyDialogueInit(u8 taskId); +static void Task_BuyHowManyDialogueHandleInput(u8 taskId); +static void CreateBuyMenuConfirmPurchaseWindow(u8 taskId); +static void BuyMenuTryMakePurchase(u8 taskId); +static void BuyMenuSubtractMoney(u8 taskId); +static void Task_ReturnToItemListAfterItemPurchase(u8 taskId); +static void BuyMenuReturnToItemList(u8 taskId); +static void ExitBuyMenu(u8 taskId); +static void Task_ExitBuyMenu(u8 taskId); static void nullsub_52(u8 taskId); static void nullsub_53(void); -static void sub_809C138(void); +static void RecordQuestLogItemPurchase(void); // external defines extern u8 MapGridGetMetatileLayerTypeAt(s16 x, s16 y); @@ -189,15 +186,15 @@ extern const u32 gUnknown_8E86170[]; //gBuyMenuFrame_Pal static const struct MenuAction gUnknown_83DF09C[] = // sShopMenuActions_BuySellQuit { - {gText_ShopBuy, {.void_u8 = sub_809AC5C}}, - {gText_ShopSell, {.void_u8 = sub_809AC98}}, - {gText_ShopQuit, {.void_u8 = sub_809ACF8}} + {gText_ShopBuy, {.void_u8 = Task_HandleShopMenuBuy}}, + {gText_ShopSell, {.void_u8 = Task_HandleShopMenuSell}}, + {gText_ShopQuit, {.void_u8 = Task_HandleShopMenuQuit}} }; static const struct YesNoFuncTable gUnknown_83DF0B4[] = //sShopMenuActions_BuyQuit { - sub_809BEA4, //Task_HandleShopMenuBuy, - sub_809BF98 //Task_HandleShopMenuQuit + BuyMenuTryMakePurchase, //Task_HandleShopMenuBuy, + BuyMenuReturnToItemList //Task_HandleShopMenuQuit }; static const struct WindowTemplate gUnknown_83DF0BC[] = //sShopMenuWindowTemplates @@ -255,26 +252,25 @@ static const struct BgTemplate gUnknown_83DF0C4[4] = //sShopBuyMenuBgTemplat // Functions -// CreateShopMenu -static u8 sub_809AAB0(u8 a0) +static u8 CreateShopMenu(u8 a0) { - gShopData.martType = sub_809AB7C(a0) & 0xF; + gShopData.martType = GetMartTypeFromItemList(a0) & 0xF; gShopData.selectedRow = 0; if (!(ContextNpcGetTextColor())) gShopData.unk16_4 = 4; else gShopData.unk16_4 = 5; - gUnknown_2039950 = AddWindow(gUnknown_83DF0BC); //sShopMenuWindowTemplates - SetStdWindowBorderStyle(gUnknown_2039950, 0); - PrintTextArray(gUnknown_2039950, 2, GetMenuCursorDimensionByFont(2, 0), 2, 16, 3, gUnknown_83DF09C); - Menu_InitCursor(gUnknown_2039950, 2, 0, 2, 16, 3, 0); - PutWindowTilemap(gUnknown_2039950); - CopyWindowToVram(gUnknown_2039950, 1); - return CreateTask(sub_809AC10, 8); + sShopMenuWindowId = AddWindow(gUnknown_83DF0BC); //sShopMenuWindowTemplates + SetStdWindowBorderStyle(sShopMenuWindowId, 0); + PrintTextArray(sShopMenuWindowId, 2, GetMenuCursorDimensionByFont(2, 0), 2, 16, 3, gUnknown_83DF09C); + Menu_InitCursor(sShopMenuWindowId, 2, 0, 2, 16, 3, 0); + PutWindowTilemap(sShopMenuWindowId); + CopyWindowToVram(sShopMenuWindowId, 1); + return CreateTask(Task_ShopMenu, 8); } -static u8 sub_809AB7C(u32 a0) +static u8 GetMartTypeFromItemList(u32 a0) { u16 retVal, i; if (a0) @@ -304,35 +300,27 @@ static u8 sub_809AB7C(u32 a0) return 0; } -//SetShopItemsForSale -static void sub_809ABD8(const u16 *items) //I really don't know what GameFreak was thinking here.. +static void SetShopItemsForSale(const u16 *items) { struct ShopData *mart; - //u16 i; mart = &gShopData; mart->itemList = items; mart->itemCount = 0; - - //i = 0; if (mart->itemList[0] == 0) return; do { ++gShopData.itemCount; - //i = gShopData.itemCount; - //} while (mart->itemList[i]); } while (mart->itemList[gShopData.itemCount]); } -//SetShopMenuCallback -static void sub_809AC04(MainCallback callback) +static void SetShopMenuCallback(MainCallback callback) { gShopData.callback = callback; } -//Task_ShopMenu -static void sub_809AC10(u8 taskId) +static void Task_ShopMenu(u8 taskId) { s8 input = Menu_ProcessInputNoWrapAround(); @@ -342,7 +330,7 @@ static void sub_809AC10(u8 taskId) break; case MENU_B_PRESSED: PlaySE(SE_SELECT); - sub_809ACF8(taskId); + Task_HandleShopMenuQuit(taskId); break; default: gUnknown_83DF09C[Menu_GetCursorPos()].func.void_u8(taskId); @@ -350,47 +338,42 @@ static void sub_809AC10(u8 taskId) } } -//Task_HandleShopMenuBuy -static void sub_809AC5C(u8 taskId) +static void Task_HandleShopMenuBuy(u8 taskId) { - SetWordTaskArg(taskId, 0xE, (u32)sub_809AE14); + SetWordTaskArg(taskId, 0xE, (u32)CB2_InitBuyMenu); fade_screen(1, 0); - gTasks[taskId].func = sub_809AD40; + gTasks[taskId].func = Task_GoToBuyOrSellMenu; } -//Task_HandleShopMenuSell -static void sub_809AC98(u8 taskId) +static void Task_HandleShopMenuSell(u8 taskId) { - SetWordTaskArg(taskId, 0xE, (u32)sub_809ACD4); + SetWordTaskArg(taskId, 0xE, (u32)CB2_GoToSellMenu); fade_screen(1, 0); - gTasks[taskId].func = sub_809AD40; + gTasks[taskId].func = Task_GoToBuyOrSellMenu; } -//CB2_GoToSellMenu -static void sub_809ACD4(void) +static void CB2_GoToSellMenu(void) { sub_8107DB4(2, POCKET_POKE_BALLS, CB2_ReturnToField); - gFieldCallback = sub_809AD74; + gFieldCallback = MapPostLoadHook_ReturnToShopMenu; } -//Task_HandleShopMenuQuit -static void sub_809ACF8(u8 taskId) +static void Task_HandleShopMenuQuit(u8 taskId) { - sub_809AD24(); - sub_809C138(); + ClearShopMenuWindow(); + RecordQuestLogItemPurchase(); DestroyTask(taskId); if (gShopData.callback != 0) gShopData.callback(); } -static void sub_809AD24(void) +static void ClearShopMenuWindow(void) { - ClearStdWindowAndFrameToTransparent(gUnknown_2039950, 2); - RemoveWindow(gUnknown_2039950); + ClearStdWindowAndFrameToTransparent(sShopMenuWindowId, 2); + RemoveWindow(sShopMenuWindowId); } -//Task_GoToBuyOrSellMenu -static void sub_809AD40(u8 taskId) +static void Task_GoToBuyOrSellMenu(u8 taskId) { if (gPaletteFade.active) return; @@ -399,30 +382,26 @@ static void sub_809AD40(u8 taskId) DestroyTask(taskId); } -//MapPostLoadHook_ReturnToShopMenu -static void sub_809AD74(void) +static void MapPostLoadHook_ReturnToShopMenu(void) { sub_807DC00(); - CreateTask(sub_809AD8C, 8); + CreateTask(Task_ReturnToShopMenu, 8); } -//Task_ReturnToShopMenu -static void sub_809AD8C(u8 taskId) +static void Task_ReturnToShopMenu(u8 taskId) { if (field_weather_is_fade_finished() != TRUE) return; - DisplayItemMessageOnField(taskId, sub_809B56C(), gText_CanIHelpWithAnythingElse, sub_809ADC0); + DisplayItemMessageOnField(taskId, GetMartUnk16_4(), gText_CanIHelpWithAnythingElse, ShowShopMenuAfterExitingBuyOrSellMenu); } -//ShowShopMenuAfterExitingBuyOrSellMenu -static void sub_809ADC0(u8 taskId) +static void ShowShopMenuAfterExitingBuyOrSellMenu(u8 taskId) { - sub_809AAB0(gShopData.martType); + CreateShopMenu(gShopData.martType); DestroyTask(taskId); } -//CB2_BuyMenu -static void sub_809ADE4(void) +static void CB2_BuyMenu(void) { RunTasks(); AnimateSprites(); @@ -431,16 +410,14 @@ static void sub_809ADE4(void) DoScheduledBgTilemapCopiesToVram(); } -//VBlankCB_BuyMenu -static void sub_809AE00(void) +static void VBlankCB_BuyMenu(void) { LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); } -//CB2_InitBuyMenu -static void sub_809AE14(void) +static void CB2_InitBuyMenu(void) { u8 taskId; switch (gMain.state) @@ -456,15 +433,15 @@ static void sub_809AE14(void) ResetTasks(); ClearScheduledBgCopiesToVram(); ResetItemMenuIconState(); - if ((!(sub_809AF6C())) || (!(sub_809B188()))) + if ((!(InitShopData())) || (!(BuyMenuBuildListMenuTemplate()))) return; - sub_809AFD0(); + BuyMenuInitBgs(); FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 0x20, 0x20); FillBgTilemapBufferRect_Palette0(1, 0, 0, 0, 0x20, 0x20); FillBgTilemapBufferRect_Palette0(2, 0, 0, 0, 0x20, 0x20); FillBgTilemapBufferRect_Palette0(3, 0, 0, 0, 0x20, 0x20); BuyMenuInitWindows(gShopData.martType); - sub_809B080(); + BuyMenuDecompressBgGraphics(); gMain.state++; break; case 1: @@ -475,49 +452,47 @@ static void sub_809AE14(void) default: gShopData.selectedRow = 0; gShopData.scrollOffset = 0; - sub_809B15C(); //BuyMenuDrawGraphics(); - sub_809B690(); //BuyMenuAddScrollIndicatorArrows(); - taskId = CreateTask(sub_809BBC0, 8); + BuyMenuDrawGraphics(); + BuyMenuAddScrollIndicatorArrows(); + taskId = CreateTask(Task_BuyMenu, 8); gTasks[taskId].tListTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0); BlendPalettes(0xFFFFFFFF, 0x10, RGB_BLACK); BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK); - SetVBlankCallback(sub_809AE00); - SetMainCallback2(sub_809ADE4); + SetVBlankCallback(VBlankCB_BuyMenu); + SetMainCallback2(CB2_BuyMenu); break; } } -//InitShopData -static bool8 sub_809AF6C(void) +static bool8 InitShopData(void) { - gUnknown_2039954 = Alloc(sizeof(*gUnknown_2039954)); - if (gUnknown_2039954 == 0) + gShopTilemapBuffer1 = Alloc(sizeof(*gShopTilemapBuffer1)); + if (gShopTilemapBuffer1 == 0) goto CANCEL; - gUnknown_2039958 = Alloc(sizeof(*gUnknown_2039958)); - if (gUnknown_2039958 == 0) + gShopTilemapBuffer2 = Alloc(sizeof(*gShopTilemapBuffer2)); + if (gShopTilemapBuffer2 == 0) goto CANCEL; - gUnknown_203995C = Alloc(sizeof(*gUnknown_203995C)); - if (gUnknown_203995C == 0) + gShopTilemapBuffer3 = Alloc(sizeof(*gShopTilemapBuffer3)); + if (gShopTilemapBuffer3 == 0) goto CANCEL; - gUnknown_2039960 = Alloc(sizeof(*gUnknown_2039960)); - if (gUnknown_2039960 == 0) + gShopTilemapBuffer4 = Alloc(sizeof(*gShopTilemapBuffer4)); + if (gShopTilemapBuffer4 == 0) goto CANCEL; return TRUE; CANCEL: - sub_809B604(); - sub_809B670(); + BuyMenuFreeMemory(); + SetShopExitCallback(); return FALSE; } -//BuyMenuInitBgs -static void sub_809AFD0(void) +static void BuyMenuInitBgs(void) { ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, gUnknown_83DF0C4, NELEMS(gUnknown_83DF0C4)); - SetBgTilemapBuffer(1, gUnknown_2039958); - SetBgTilemapBuffer(2, gUnknown_2039960); - SetBgTilemapBuffer(3, gUnknown_203995C); + SetBgTilemapBuffer(1, gShopTilemapBuffer2); + SetBgTilemapBuffer(2, gShopTilemapBuffer4); + SetBgTilemapBuffer(3, gShopTilemapBuffer3); SetGpuReg(0x10, 0); SetGpuReg(0x12, 0); SetGpuReg(0x14, 0); @@ -531,18 +506,17 @@ static void sub_809AFD0(void) ShowBg(0); ShowBg(1); ShowBg(2); - ShowBg(3); + ShowBg(3); } -//BuyMenuDecompressBgGraphics -static void sub_809B080(void) +static void BuyMenuDecompressBgGraphics(void) { void* pal; DecompressAndCopyTileDataToVram(1, gUnknown_8E85DC8, 0x480, 0x3DC, 0); if ((gShopData.martType) != MART_TYPE_TMHM) - LZDecompressWram(gUnknown_8E85EFC, gUnknown_2039954); //gBuyMenuFrame_Tilemap + LZDecompressWram(gUnknown_8E85EFC, gShopTilemapBuffer1); //gBuyMenuFrame_Tilemap else - LZDecompressWram(gUnknown_8E86038, gUnknown_2039954); //gBuyMenuFrame_TmHmTilemap + LZDecompressWram(gUnknown_8E86038, gShopTilemapBuffer1); //gBuyMenuFrame_TmHmTilemap pal = Alloc(0x40); LZDecompressWram(gUnknown_8E86170, pal); LoadPalette(pal, 0xB0, 0x20); @@ -564,11 +538,10 @@ static void sub_809B10C(bool32 a0) ScheduleBgCopyTilemapToVram(1); } -//BuyMenuDrawGraphics -static void sub_809B15C(void) +static void BuyMenuDrawGraphics(void) { sub_809B764(); - sub_809BAFC(); + BuyMenuCopyTilemapData(); BuyMenuDrawMoneyBox(); ScheduleBgCopyTilemapToVram(0); ScheduleBgCopyTilemapToVram(1); @@ -576,23 +549,22 @@ static void sub_809B15C(void) ScheduleBgCopyTilemapToVram(3); } -//BuyMenuBuildListMenuTemplate -static bool8 sub_809B188(void) +static bool8 BuyMenuBuildListMenuTemplate(void) { u16 i; u16 v; - struct ListMenuItem **list = &gUnknown_2039964; + struct ListMenuItem **list = &sShopMenuListMenu; struct ShopData *mart = &gShopData; - *list = Alloc((gShopData.itemCount + 1) * sizeof(*gUnknown_2039964)); - if (gUnknown_2039964 == 0) + *list = Alloc((gShopData.itemCount + 1) * sizeof(*sShopMenuListMenu)); + if (sShopMenuListMenu == 0) goto FREE_MEMORY; - gUnknown_2039968 = Alloc((gShopData.itemCount + 1) * sizeof(*gUnknown_2039968)); - if (gUnknown_2039968 == 0) + sShopMenuItemStrings = Alloc((gShopData.itemCount + 1) * sizeof(*sShopMenuItemStrings)); + if (sShopMenuItemStrings == 0) { FREE_MEMORY: - sub_809B604(); - sub_809B670(); + BuyMenuFreeMemory(); + SetShopExitCallback(); return FALSE; } @@ -602,14 +574,14 @@ static bool8 sub_809B188(void) for (i = 0; i < mart->itemCount; i++) { - sub_809B300(&gUnknown_2039964[i], mart->itemList[i], gUnknown_2039968[i]); //PokeMartWriteNameAndIdAt(u16 a0, u16 a1, u8* a2) + PokeMartWriteNameAndIdAt(&sShopMenuListMenu[i], mart->itemList[i], sShopMenuItemStrings[i]); //PokeMartWriteNameAndIdAt(u16 a0, u16 a1, u8* a2) } ADD_CANCEL: - StringCopy(gUnknown_2039968[i], gFameCheckerText_Cancel); - gUnknown_2039964[i].label = gUnknown_2039968[i]; - gUnknown_2039964[i].index = -2; - gMultiuseListMenuTemplate.items = gUnknown_2039964; + StringCopy(sShopMenuItemStrings[i], gFameCheckerText_Cancel); + sShopMenuListMenu[i].label = sShopMenuItemStrings[i]; + sShopMenuListMenu[i].index = -2; + gMultiuseListMenuTemplate.items = sShopMenuListMenu; gMultiuseListMenuTemplate.totalItems = gShopData.itemCount + 1; gMultiuseListMenuTemplate.windowId = 4; gMultiuseListMenuTemplate.header_X = 0; @@ -622,8 +594,8 @@ static bool8 sub_809B188(void) gMultiuseListMenuTemplate.fillValue = 0; gMultiuseListMenuTemplate.cursorPal = GetFontAttribute(2, 5); gMultiuseListMenuTemplate.cursorShadowPal = GetFontAttribute(2, 7); - gMultiuseListMenuTemplate.moveCursorFunc = sub_809B320; - gMultiuseListMenuTemplate.itemPrintFunc = sub_809B408; + gMultiuseListMenuTemplate.moveCursorFunc = BuyMenuPrintItemDescriptionAndShowItemIcon; + gMultiuseListMenuTemplate.itemPrintFunc = BuyMenuPrintPriceInList; gMultiuseListMenuTemplate.scrollMultiple = 0; gMultiuseListMenuTemplate.cursorKind = 0; @@ -641,16 +613,14 @@ static bool8 sub_809B188(void) return TRUE; } -//PokeMartWriteNameAndIdAt -static void sub_809B300(struct ListMenuItem *list, u16 index, u8* dst) +static void PokeMartWriteNameAndIdAt(struct ListMenuItem *list, u16 index, u8* dst) { CopyItemName(index, dst); list->label = dst; list->index = index; } -//BuyMenuPrintItemDescriptionAndShowItemIcon -static void sub_809B320(s32 item, bool8 onInit, struct ListMenu *list) +static void BuyMenuPrintItemDescriptionAndShowItemIcon(s32 item, bool8 onInit, struct ListMenu *list) { const u8 *description; @@ -676,14 +646,13 @@ static void sub_809B320(s32 item, bool8 onInit, struct ListMenu *list) else //TM Mart { FillWindowPixelBuffer(6, PIXEL_FILL(0)); - sub_809B494(item); + LoadTmHmNameInMart(item); BuyMenuPrint(5, 2, description, 2, 3, 1, 0, 0, 0); } } -//BuyMenuPrintPriceInList -#ifdef NONMATCHING //this function was written very strangely.. -static void sub_809B408(u8 windowId, s32 item, u8 y) +#ifdef NONMATCHING +static void BuyMenuPrintPriceInList(u8 windowId, s32 item, u8 y) { u32 len, x; u8 *loc; @@ -709,7 +678,7 @@ static void sub_809B408(u8 windowId, s32 item, u8 y) } #else NAKED -static void sub_809B408(u8 windowId, s32 item, u8 y) +static void BuyMenuPrintPriceInList(u8 windowId, s32 item, u8 y) { asm_unified("\tpush {r4-r6,lr}\n" "\tsub sp, 0x14\n" @@ -779,13 +748,7 @@ static void sub_809B408(u8 windowId, s32 item, u8 y) } #endif - -/*=================================== -MATCHED/TESTED UP UNTIL HERE -===================================*/ - -//LoadTmHmNameInMart -static void sub_809B494(s32 item) +static void LoadTmHmNameInMart(s32 item) { if (item != INDEX_CANCEL) { @@ -803,19 +766,17 @@ static void sub_809B494(s32 item) } } -//GetMartUnk16_4 -u8 sub_809B56C(void) +u8 GetMartUnk16_4(void) { return gShopData.unk16_4; } -//BuyMenuPrintCursor -static void sub_809B57C(u8 listTaskId, u8 a1) +static void BuyMenuPrintCursor(u8 listTaskId, u8 a1) { - sub_809B59C(ListMenuGetYCoordForPrintingArrowCursor(listTaskId), a1); + BuyMenuPrintCursorAtYPosition(ListMenuGetYCoordForPrintingArrowCursor(listTaskId), a1); } -static void sub_809B59C(u8 y, u8 a1) +static void BuyMenuPrintCursorAtYPosition(u8 y, u8 a1) { if (a1 == 0xFF) { @@ -828,40 +789,37 @@ static void sub_809B59C(u8 y, u8 a1) } } -//BuyMenuFreeMemory -static void sub_809B604(void) +static void BuyMenuFreeMemory(void) { - if (gUnknown_2039954 != 0) - Free(gUnknown_2039954); + if (gShopTilemapBuffer1 != 0) + Free(gShopTilemapBuffer1); - if (gUnknown_2039958 != 0) - Free(gUnknown_2039958); + if (gShopTilemapBuffer2 != 0) + Free(gShopTilemapBuffer2); - if (gUnknown_203995C != 0) - Free(gUnknown_203995C); + if (gShopTilemapBuffer3 != 0) + Free(gShopTilemapBuffer3); - if (gUnknown_2039960 != 0) - Free(gUnknown_2039960); + if (gShopTilemapBuffer4 != 0) + Free(gShopTilemapBuffer4); - if (gUnknown_2039964 != 0) - Free(gUnknown_2039964); + if (sShopMenuListMenu != 0) + Free(sShopMenuListMenu); - if (gUnknown_2039968 != 0) - Free(gUnknown_2039968); + if (sShopMenuItemStrings != 0) + Free(sShopMenuItemStrings); FreeAllWindowBuffers(); } -//SetShopExitCallback -static void sub_809B670(void) +static void SetShopExitCallback(void) { - gFieldCallback = sub_809AD74; + gFieldCallback = MapPostLoadHook_ReturnToShopMenu; SetMainCallback2(CB2_ReturnToField); } -//BuyMenuAddScrollIndicatorArrows -static void sub_809B690(void) +static void BuyMenuAddScrollIndicatorArrows(void) { if (gShopData.martType != MART_TYPE_TMHM) { @@ -875,15 +833,13 @@ static void sub_809B690(void) } } -//BuyQuantityAddScrollIndicatorArrows -static void sub_809B6FC(void) +static void BuyQuantityAddScrollIndicatorArrows(void) { gShopData.unk18 = 1; gShopData.unk16_11 = AddScrollIndicatorArrowPairParameterized(SCROLL_ARROW_UP, 0x98, 0x48, 0x68, 2, 0x6E, 0x6E, &gShopData.unk18); } -//BuyMenuRemoveScrollIndicatorArrows -static void sub_809B73C(void) +static void BuyMenuRemoveScrollIndicatorArrows(void) { if ((gShopData.unk16_11) == 0x1F) return; @@ -894,13 +850,12 @@ static void sub_809B73C(void) static void sub_809B764(void) { - sub_809B92C(); - sub_809BA40(); - sub_809B778(); + BuyMenuCollectEventObjectData(); + BuyMenuDrawEventObjects(); + BuyMenuDrawMapBg(); } -//BuyMenuDrawMapBg -static void sub_809B778(void) +static void BuyMenuDrawMapBg(void) { s16 i; s16 j; @@ -924,18 +879,17 @@ static void sub_809B778(void) if (metatile < NUM_METATILES_IN_PRIMARY) { - sub_809B850(i, j, (u16*)mapData->primaryTileset->metatiles + metatile * 8, metatileLayerType); + BuyMenuDrawMapMetatile(i, j, (u16*)mapData->primaryTileset->metatiles + metatile * 8, metatileLayerType); } else { - sub_809B850(i, j, (u16*)mapData->secondaryTileset->metatiles + ((metatile - NUM_METATILES_IN_PRIMARY) * 8), metatileLayerType); + BuyMenuDrawMapMetatile(i, j, (u16*)mapData->secondaryTileset->metatiles + ((metatile - NUM_METATILES_IN_PRIMARY) * 8), metatileLayerType); } } } } -//BuyMenuDrawMapMetatile -static void sub_809B850(s16 x, s16 y, const u16 *src, u8 metatileLayerType) +static void BuyMenuDrawMapMetatile(s16 x, s16 y, const u16 *src, u8 metatileLayerType) { u16 offset1 = x * 2; u16 offset2 = ((y << 0x16) + 0x400000) >> 0x10; @@ -943,22 +897,21 @@ static void sub_809B850(s16 x, s16 y, const u16 *src, u8 metatileLayerType) switch (metatileLayerType) { case 0: - sub_809B904(*gUnknown_2039960, offset1, offset2, src); - sub_809B904(*gUnknown_2039958, offset1, offset2, src + 4); + BuyMenuDrawMapMetatileLayer(*gShopTilemapBuffer4, offset1, offset2, src); + BuyMenuDrawMapMetatileLayer(*gShopTilemapBuffer2, offset1, offset2, src + 4); break; case 1: - sub_809B904(*gUnknown_203995C, offset1, offset2, src); - sub_809B904(*gUnknown_2039960, offset1, offset2, src + 4); + BuyMenuDrawMapMetatileLayer(*gShopTilemapBuffer3, offset1, offset2, src); + BuyMenuDrawMapMetatileLayer(*gShopTilemapBuffer4, offset1, offset2, src + 4); break; case 2: - sub_809B904(*gUnknown_203995C, offset1, offset2, src); - sub_809B904(*gUnknown_2039958, offset1, offset2, src + 4); + BuyMenuDrawMapMetatileLayer(*gShopTilemapBuffer3, offset1, offset2, src); + BuyMenuDrawMapMetatileLayer(*gShopTilemapBuffer2, offset1, offset2, src + 4); break; } } -//BuyMenuDrawMapMetatileLayer -static void sub_809B904(u16 *dest, s16 offset1, s16 offset2, const u16 *src) +static void BuyMenuDrawMapMetatileLayer(u16 *dest, s16 offset1, s16 offset2, const u16 *src) { // This function draws a whole 2x2 metatile. dest[offset1 + offset2] = src[0]; // top left @@ -967,9 +920,7 @@ static void sub_809B904(u16 *dest, s16 offset1, s16 offset2, const u16 *src) dest[offset1 + offset2 + 33] = src[3]; // bottom right } - -// BuyMenuCollectEventObjectData -static void sub_809B92C(void) +static void BuyMenuCollectEventObjectData(void) { s16 facingX; s16 facingY; @@ -982,7 +933,7 @@ static void sub_809B92C(void) z = PlayerGetZCoord(); for (y = 0; y < MAP_OBJECTS_COUNT; y++) - gUnknown_20398B4[y][EVENT_OBJ_ID] = MAP_OBJECTS_COUNT; + sViewportMapObjects[y][EVENT_OBJ_ID] = MAP_OBJECTS_COUNT; for (y = 0; y < 5; y++) { @@ -991,24 +942,24 @@ static void sub_809B92C(void) u8 eventObjId = GetFieldObjectIdByXYZ(facingX - 3 + x, facingY - 2 + y, z); if (eventObjId != MAP_OBJECTS_COUNT) { - gUnknown_20398B4[num][EVENT_OBJ_ID] = eventObjId; - gUnknown_20398B4[num][X_COORD] = x; - gUnknown_20398B4[num][Y_COORD] = y; + sViewportMapObjects[num][EVENT_OBJ_ID] = eventObjId; + sViewportMapObjects[num][X_COORD] = x; + sViewportMapObjects[num][Y_COORD] = y; switch (gMapObjects[eventObjId].facingDirection) { case DIR_SOUTH: - gUnknown_20398B4[num][ANIM_NUM] = 0; + sViewportMapObjects[num][ANIM_NUM] = 0; break; case DIR_NORTH: - gUnknown_20398B4[num][ANIM_NUM] = 1; + sViewportMapObjects[num][ANIM_NUM] = 1; break; case DIR_WEST: - gUnknown_20398B4[num][ANIM_NUM] = 2; + sViewportMapObjects[num][ANIM_NUM] = 2; break; case DIR_EAST: default: - gUnknown_20398B4[num][ANIM_NUM] = 3; + sViewportMapObjects[num][ANIM_NUM] = 3; break; } num++; @@ -1017,8 +968,7 @@ static void sub_809B92C(void) } } -//BuyMenuDrawEventObjects -static void sub_809BA40(void) +static void BuyMenuDrawEventObjects(void) { u8 i; u8 spriteId; @@ -1026,26 +976,26 @@ static void sub_809BA40(void) for (i = 0; i < MAP_OBJECTS_COUNT; i++) { - if (gUnknown_20398B4[i][EVENT_OBJ_ID] == MAP_OBJECTS_COUNT) + if (sViewportMapObjects[i][EVENT_OBJ_ID] == MAP_OBJECTS_COUNT) continue; - graphicsInfo = GetFieldObjectGraphicsInfo(gMapObjects[gUnknown_20398B4[i][EVENT_OBJ_ID]].graphicsId); + graphicsInfo = GetFieldObjectGraphicsInfo(gMapObjects[sViewportMapObjects[i][EVENT_OBJ_ID]].graphicsId); spriteId = AddPseudoEventObject( - gMapObjects[gUnknown_20398B4[i][EVENT_OBJ_ID]].graphicsId, + gMapObjects[sViewportMapObjects[i][EVENT_OBJ_ID]].graphicsId, SpriteCallbackDummy, - (((u16)gUnknown_20398B4[i][X_COORD] << 0x14) + 0xFFF80000) >> 0x10, - (u16)gUnknown_20398B4[i][Y_COORD] * 16 + 48 - graphicsInfo->height / 2, + (((u16)sViewportMapObjects[i][X_COORD] << 0x14) + 0xFFF80000) >> 0x10, + (u16)sViewportMapObjects[i][Y_COORD] * 16 + 48 - graphicsInfo->height / 2, 2); - StartSpriteAnim(&gSprites[spriteId], gUnknown_20398B4[i][ANIM_NUM]); + StartSpriteAnim(&gSprites[spriteId], sViewportMapObjects[i][ANIM_NUM]); } } -static void sub_809BAFC(void) +static void BuyMenuCopyTilemapData(void) { s16 i; - u16 *dst = *gUnknown_2039958; - u16 *src = *gUnknown_2039954; + u16 *dst = *gShopTilemapBuffer2; + u16 *src = *gShopTilemapBuffer1; for (i = 0; i < 0x400; i++) { @@ -1055,8 +1005,7 @@ static void sub_809BAFC(void) } } -//BuyMenuPrintItemQuantityAndPrice -static void sub_809BB44(u8 taskId) +static void BuyMenuPrintItemQuantityAndPrice(u8 taskId) { s16 *data = gTasks[taskId].data; @@ -1067,8 +1016,7 @@ static void sub_809BB44(u8 taskId) BuyMenuPrint(3, 0, gStringVar4, 2, 0xA, 0, 0, 0, 1); } -//Task_BuyMenu -static void sub_809BBC0(u8 taskId) +static void Task_BuyMenu(u8 taskId) { s16 *data = gTasks[taskId].data; @@ -1082,31 +1030,30 @@ static void sub_809BBC0(u8 taskId) break; case LIST_CANCEL: PlaySE(SE_SELECT); - sub_809C004(taskId); + ExitBuyMenu(taskId); break; default: PlaySE(SE_SELECT); tItemId = itemId; ClearWindowTilemap(5); - sub_809B73C(); - sub_809B57C(tListTaskId, 2); + BuyMenuRemoveScrollIndicatorArrows(); + BuyMenuPrintCursor(tListTaskId, 2); sub_809B10C(1); gShopData.itemPrice = itemid_get_market_price(itemId); if (!IsEnoughMoney(&gSaveBlock1Ptr->money, gShopData.itemPrice)) { - BuyMenuDisplayMessage(taskId, gText_YouDontHaveMoney, sub_809BF98); + BuyMenuDisplayMessage(taskId, gText_YouDontHaveMoney, BuyMenuReturnToItemList); } else { CopyItemName(itemId, gStringVar1); - BuyMenuDisplayMessage(taskId, gText_Var1CertainlyHowMany, sub_809BCA0); + BuyMenuDisplayMessage(taskId, gText_Var1CertainlyHowMany, Task_BuyHowManyDialogueInit); } } } } -//Task_BuyHowManyDialogueInit -static void sub_809BCA0(u8 taskId) +static void Task_BuyHowManyDialogueInit(u8 taskId) { s16 *data = gTasks[taskId].data; @@ -1119,7 +1066,7 @@ static void sub_809BCA0(u8 taskId) BuyMenuPrint(1, 2, gStringVar4, 0, 2, 0, 0, 0, 1); tItemCount = 1; BuyMenuQuantityBoxNormalBorder(3, 0); - sub_809BB44(taskId); + BuyMenuPrintItemQuantityAndPrice(taskId); ScheduleBgCopyTilemapToVram(0); maxQuantity = GetMoney(&gSaveBlock1Ptr->money) / itemid_get_market_price(tItemId); if (maxQuantity > 99) @@ -1128,28 +1075,26 @@ static void sub_809BCA0(u8 taskId) gShopData.maxQuantity = (u8)maxQuantity; if (maxQuantity != 1) - sub_809B6FC(); + BuyQuantityAddScrollIndicatorArrows(); - gTasks[taskId].func = sub_809BD8C; + gTasks[taskId].func = Task_BuyHowManyDialogueHandleInput; } -//Task_BuyHowManyDialogueHandleInput -static void sub_809BD8C(u8 taskId) +static void Task_BuyHowManyDialogueHandleInput(u8 taskId) { s16 *data = gTasks[taskId].data; - if (AdjustQuantityAccordingToDPadInput(&tItemCount, gShopData.maxQuantity) == TRUE) { gShopData.itemPrice = itemid_get_market_price(tItemId) * tItemCount; - sub_809BB44(taskId); + BuyMenuPrintItemQuantityAndPrice(taskId); } else { if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); - sub_809B73C(); + BuyMenuRemoveScrollIndicatorArrows(); ClearStdWindowAndFrameToTransparent(3, 0); ClearStdWindowAndFrameToTransparent(1, 0); ClearWindowTilemap(3); @@ -1158,72 +1103,67 @@ static void sub_809BD8C(u8 taskId) CopyItemName(tItemId, gStringVar1); ConvertIntToDecimalStringN(gStringVar2, tItemCount, STR_CONV_MODE_LEFT_ALIGN, 2); ConvertIntToDecimalStringN(gStringVar3, gShopData.itemPrice, STR_CONV_MODE_LEFT_ALIGN, 8); - BuyMenuDisplayMessage(taskId, gText_Var1AndYouWantedVar2, sub_809BE90); + BuyMenuDisplayMessage(taskId, gText_Var1AndYouWantedVar2, CreateBuyMenuConfirmPurchaseWindow); } else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - sub_809B73C(); + BuyMenuRemoveScrollIndicatorArrows(); ClearStdWindowAndFrameToTransparent(3, 0); ClearStdWindowAndFrameToTransparent(1, 0); ClearWindowTilemap(3); ClearWindowTilemap(1); - sub_809BF98(taskId); + BuyMenuReturnToItemList(taskId); } } } -//CreateBuyMenuConfirmPurchaseWindow -static void sub_809BE90(u8 taskId) +static void CreateBuyMenuConfirmPurchaseWindow(u8 taskId) { - BuyMenuConfirmPurchase(taskId, gUnknown_83DF0B4); //sShopBuyMenuYesNoWindowTemplates + BuyMenuConfirmPurchase(taskId, gUnknown_83DF0B4); } -//BuyMenuTryMakePurchase -static void sub_809BEA4(u8 taskId) +static void BuyMenuTryMakePurchase(u8 taskId) { s16 *data = gTasks[taskId].data; PutWindowTilemap(4); if (AddBagItem(tItemId, tItemCount) == TRUE) { - BuyMenuDisplayMessage(taskId, gText_HereYouGoThankYou, sub_809BF0C); + BuyMenuDisplayMessage(taskId, gText_HereYouGoThankYou, BuyMenuSubtractMoney); nullsub_52(taskId); - sub_809C09C(tItemId, tItemCount, 1); + RecordItemPurchase(tItemId, tItemCount, 1); } else { - BuyMenuDisplayMessage(taskId, gText_NoMoreRoomForThis, sub_809BF98); + BuyMenuDisplayMessage(taskId, gText_NoMoreRoomForThis, BuyMenuReturnToItemList); } } -//BuyMenuSubtractMoney -static void sub_809BF0C(u8 taskId) +static void BuyMenuSubtractMoney(u8 taskId) { IncrementGameStat(GAME_STAT_SHOPPED); RemoveMoney(&gSaveBlock1Ptr->money, gShopData.itemPrice); PlaySE(SE_SHOP); PrintMoneyAmountInMoneyBox(0, GetMoney(&gSaveBlock1Ptr->money), 0); - gTasks[taskId].func = sub_809BF68; + gTasks[taskId].func = Task_ReturnToItemListAfterItemPurchase; } -//Task_ReturnToItemListAfterItemPurchase -static void sub_809BF68(u8 taskId) +static void Task_ReturnToItemListAfterItemPurchase(u8 taskId) { if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - sub_809BF98(taskId); + BuyMenuReturnToItemList(taskId); } } -//BuyMenuReturnToItemList -static void sub_809BF98(u8 taskId) +static void BuyMenuReturnToItemList(u8 taskId) { s16 *data = gTasks[taskId].data; ClearDialogWindowAndFrameToTransparent(2, 0); - sub_809B57C(tListTaskId, 1); + BuyMenuPrintCursor(tListTaskId, 1); sub_809B10C(0); PutWindowTilemap(4); PutWindowTilemap(5); @@ -1231,27 +1171,25 @@ static void sub_809BF98(u8 taskId) PutWindowTilemap(6); ScheduleBgCopyTilemapToVram(0); - sub_809B690(); - gTasks[taskId].func = sub_809BBC0; + BuyMenuAddScrollIndicatorArrows(); + gTasks[taskId].func = Task_BuyMenu; } -//ExitBuyMenu -static void sub_809C004(u8 taskId) +static void ExitBuyMenu(u8 taskId) { - gFieldCallback = sub_809AD74; + gFieldCallback = MapPostLoadHook_ReturnToShopMenu; BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); - gTasks[taskId].func = sub_809C04C; + gTasks[taskId].func = Task_ExitBuyMenu; } -//Task_ExitBuyMenu -static void sub_809C04C(u8 taskId) +static void Task_ExitBuyMenu(u8 taskId) { s16 *data = gTasks[taskId].data; if (!gPaletteFade.active) { DestroyListMenuTask(tListTaskId, 0, 0); - sub_809B604(); + BuyMenuFreeMemory(); SetMainCallback2(CB2_ReturnToField); DestroyTask(taskId); } @@ -1266,52 +1204,54 @@ static void nullsub_53(void) } #ifdef NONMATCHING -void sub_809C09C(u16 item, u16 quantity, u8 a2) +void RecordItemPurchase(u16 item, u16 quantity, u8 a2) { struct MartHistory *tmp; - if (gUnknown_203996C.unkA == a2) + if (gShopMenuHistory.unkA == a2) { - tmp = &gUnknown_203996C; + tmp = &gShopMenuHistory; } else { - if (gUnknown_203996C.unk16 == a2) + if (gShopMenuHistory.unk16 == a2) { - tmp = &gUnknown_203996C + 12; + tmp = &gShopMenuHistory + 12; } else { - tmp = &gUnknown_203996C + 12; - if (gUnknown_203996C.unkA == 0) + tmp = &gShopMenuHistory + 12; + if (gShopMenuHistory.unkA == 0) { - tmp = &gUnknown_203996C; - gUnknown_203996C.unkA = a2; + tmp = &gShopMenuHistory; + gShopMenuHistory.unkA = a2; } } } + if (tmp->unk4 != 0) { - gUnknown_203996C.unk9 = 1; + gShopMenuHistory.unk9 = 1; } - gUnknown_203996C.unk4 = item; - if (gUnknown_203996C.unk6 <= 998) + gShopMenuHistory.unk4 = item; + if (gShopMenuHistory.unk6 <= 998) { - gUnknown_203996C.unk6 += item; + gShopMenuHistory.unk6 += item; if (item > 999) - gUnknown_203996C.unk6 = 999; + gShopMenuHistory.unk6 = 999; } - if (gUnknown_203996C.unk0 < 999998) + + if (gShopMenuHistory.unk0 < 999998) { - gUnknown_203996C.unk0 += ((s16)itemid_get_market_price(item) >> (quantity-1))*quantity; - if (gUnknown_203996C.unk0 > 999999) - gUnknown_203996C.unk0 = 999999; + gShopMenuHistory.unk0 += ((s16)itemid_get_market_price(item) >> (quantity-1))*quantity; + if (gShopMenuHistory.unk0 > 999999) + gShopMenuHistory.unk0 = 999999; } } #else NAKED -void sub_809C09C(u16 item, u16 quantity, u8 a2) +void RecordItemPurchase(u16 item, u16 quantity, u8 a2) { asm_unified("\tpush {r4-r6,lr}\n" "\tlsls r0, 16\n" @@ -1320,14 +1260,14 @@ void sub_809C09C(u16 item, u16 quantity, u8 a2) "\tlsrs r6, r1, 16\n" "\tlsls r2, 24\n" "\tlsrs r5, r2, 24\n" - "\tldr r1, _0809C0B8 @ =gUnknown_203996C\n" + "\tldr r1, _0809C0B8 @ =gShopMenuHistory\n" "\tldrb r2, [r1, 0xA]\n" "\tcmp r2, r5\n" "\tbne _0809C0BC\n" "\tadds r4, r1, 0\n" "\tb _0809C0D4\n" "\t.align 2, 0\n" - "_0809C0B8: .4byte gUnknown_203996C\n" + "_0809C0B8: .4byte gShopMenuHistory\n" "_0809C0BC:\n" "\tldrb r0, [r1, 0x16]\n" "\tcmp r0, r5\n" @@ -1395,10 +1335,9 @@ void sub_809C09C(u16 item, u16 quantity, u8 a2) } #endif -//RecordQuestLogItemPurchase -static void sub_809C138(void) +static void RecordQuestLogItemPurchase(void) { - struct MartHistory *history = &gUnknown_203996C; + struct MartHistory *history = &gShopMenuHistory; u16 v; v = history->unkA; @@ -1414,26 +1353,26 @@ static void sub_809C138(void) void CreatePokemartMenu(const u16 *itemsForSale) { - sub_809ABD8(itemsForSale); - sub_809AAB0(MART_TYPE_REGULAR); - sub_809AC04(EnableBothScriptContexts); + SetShopItemsForSale(itemsForSale); + CreateShopMenu(MART_TYPE_REGULAR); + SetShopMenuCallback(EnableBothScriptContexts); nullsub_53(); - memset(&gUnknown_203996C, 0, sizeof(struct MartHistory)); - gUnknown_203996C.unk8 = gMapHeader.regionMapSectionId; - gUnknown_203996C.unk14 = gMapHeader.regionMapSectionId; + memset(&gShopMenuHistory, 0, sizeof(struct MartHistory)); + gShopMenuHistory.unk8 = gMapHeader.regionMapSectionId; + gShopMenuHistory.unk14 = gMapHeader.regionMapSectionId; } void CreateDecorationShop1Menu(const u16 *itemsForSale) { - sub_809ABD8(itemsForSale); - sub_809AAB0(MART_TYPE_DECOR); - sub_809AC04(EnableBothScriptContexts); + SetShopItemsForSale(itemsForSale); + CreateShopMenu(MART_TYPE_DECOR); + SetShopMenuCallback(EnableBothScriptContexts); } void CreateDecorationShop2Menu(const u16 *itemsForSale) { - sub_809ABD8(itemsForSale); - sub_809AAB0(MART_TYPE_DECOR2); - sub_809AC04(EnableBothScriptContexts); + SetShopItemsForSale(itemsForSale); + CreateShopMenu(MART_TYPE_DECOR2); + SetShopMenuCallback(EnableBothScriptContexts); } diff --git a/src/tm_case.c b/src/tm_case.c index 25fe9a72c..9e5d32db9 100644 --- a/src/tm_case.c +++ b/src/tm_case.c @@ -1107,7 +1107,7 @@ static void Task_DoSaleOfTMs(u8 taskId) PlaySE(SE_SHOP); RemoveBagItem(gSpecialVar_ItemId, data[8]); AddMoney(&gSaveBlock1Ptr->money, itemid_get_market_price(gSpecialVar_ItemId) / 2 * data[8]); - sub_809C09C(gSpecialVar_ItemId, data[8], 2); + RecordItemPurchase(gSpecialVar_ItemId, data[8], 2); DestroyListMenuTask(data[0], &sTMCaseStaticResources.scrollOffset, &sTMCaseStaticResources.selectedRow); TMCaseSetup_GetTMCount(); TMCaseSetup_InitListMenuPositions(); -- cgit v1.2.3 From d1142b4290e8688a0d42bfc1b95b9d90b1721459 Mon Sep 17 00:00:00 2001 From: Evan Date: Tue, 26 Nov 2019 11:47:12 -0700 Subject: extract graphics data --- src/sea_cottage_special_anim.c | 86 ++++++++++++++++++++---------------- src/shop.c | 98 +++++++++++++++++++----------------------- 2 files changed, 94 insertions(+), 90 deletions(-) (limited to 'src') diff --git a/src/sea_cottage_special_anim.c b/src/sea_cottage_special_anim.c index 67fc70209..542329893 100644 --- a/src/sea_cottage_special_anim.c +++ b/src/sea_cottage_special_anim.c @@ -7,21 +7,18 @@ #include "field_map_obj.h" #include "field_camera.h" -// Defines #define t0 data[0] #define tX data[4] +#define tY data[5] #define tListTaskId data[7] -// RAM EWRAM_DATA u8 gUnknown_2039984 = 0; - -// Function Declarations +static void sub_809C1D8(u8 taskId, const u16* a1, u16 a2); static void sub_809C334(u8 taskId); static void sub_809C500(u8 taskId); static void sub_809C640(u8 taskId); -// Data Definitions static const u16 gUnknown_83DF0D4[] = {0x0308, 0x030a, 0x02d0}; static const u16 gUnknown_83DF0DA[] = {0x0309, 0x030b, 0x02d1}; static const u16 gUnknown_83DF0E0[] = {0x0310, 0x0312, 0x02d8}; @@ -30,34 +27,52 @@ static const u16 gUnknown_83DF0EC[] = {0x02e3, 0x0316, 0x0314}; static const u16 gUnknown_83DF0F2[] = {0x02e4, 0x0317, 0x0315}; static const u16 gUnknown_83DF0F8[] = {0x02eb, 0x031e, 0x031c}; - // Functions #ifdef NONMATCHING -void sub_809C1D8(u8 taskId, const u16* a1, u16 a2) +// Couldn't get the registers to match. Hard to know where to fix since I'm unsure what the variables are for. +static void sub_809C1D8(u8 taskId, const u16* a1, u16 a2) { s16 v1, v2, v3; - s16 i, j; - - v1 = gTasks[taskId].data[5] - 1; - v2 = gTasks[taskId].data[6] - 1; - v3 = gTasks[taskId].data[2]; - - if (gTasks[taskId].data[3] == 0) - { - for (i = 0; i < 3; i++) - { - for (j = 0; j < 3; j++) - { - MapGridGetMetatileIdAt(v1 + j, v2 + i); - if () - { - - } - - MapGridSetMetatileIdAt - } - } - } + s16 i, j; + const s16* v4; + + v1 = gTasks[taskId].data[4] - 1; + v2 = gTasks[taskId].data[5] - 1; + v3 = gTasks[taskId].data[1]; + + if (gTasks[taskId].data[2] == 0) + { + for (i = 0; i < 3; i++) + { + for (j = 0; j < 3; j++) + { + v4 = &a1[v3]; + if (MapGridGetMetatileIdAt(v1 + j, v2 + i) == v4[0]) + { + if (v3 != 2) + MapGridSetMetatileIdAt(v1 + j, v2 + i, a2 | v4[1]); + else + MapGridSetMetatileIdAt(v1 + j, v2 + i, a2 | v4[0]); + } + } + } + } + else + { + for (i = 0; i < 3; i++) + { + for (j = 0; j < 3; j++) + { + if (a1[2 - v3] == MapGridGetMetatileIdAt(v1 + j, v2 + i)) + { + if (v3 != 2) + MapGridSetMetatileIdAt(v1 + j, v2 + i, a2 | a1[1 - v3]); + else + MapGridSetMetatileIdAt(v1 + j, v2 + i, a2 | a1[2]); + } + } + } + } } #else NAKED @@ -275,9 +290,9 @@ static void sub_809C334(u8 taskId) default: break; } + data[0] = (data[0] + 1) & 7; v1 = data[0] & 7; - //ldrh r5, [r4] instead mov r5, r0 somehow if (v1 == 0) { DrawWholeMapView(); @@ -293,7 +308,7 @@ static u8 sub_809C3FC(u16 a0) taskId = CreateTask(sub_809C334, 0); data = gTasks[taskId].data; - PlayerGetDestCoords(&tX, &data[5]); + PlayerGetDestCoords(&tX, &tY); t0 = 0; data[1] = 0; data[2] = a0; @@ -335,10 +350,8 @@ void sub_809C4A8(void) s16 *data; taskId = CreateTask(sub_809C500, 0); - gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = 0; - data = gTasks[taskId].data; PlayerGetDestCoords(&data[2], &data[3]); if (gSpecialVar_0x8004 == 0) @@ -376,9 +389,8 @@ static void sub_809C500(u8 taskId) data[0]++; if (data[0] != 0x10) return; - data[0] = 0; - data[0] == 0; + data[0] = 0; data[1]++; if (data[1] != 0xD) return; @@ -399,7 +411,6 @@ void sub_809C5FC(void) taskId = CreateTask(sub_809C640, 0); gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = 0; - data = gTasks[taskId].data; PlayerGetDestCoords(&data[2], &data[3]); gTasks[taskId].data[2] += 4; @@ -423,6 +434,7 @@ static void sub_809C640(u8 taskId) DestroyTask(taskId); return; } + data[2]--; } MapGridSetMetatileIdAt(data[2], data[3], 0xEB9); @@ -430,6 +442,7 @@ static void sub_809C640(u8 taskId) CurrentMapDrawMetatileAt(data[2], data[3]); CurrentMapDrawMetatileAt(data[2], data[3] + 1); } + data[0]++; if (data[0] == 4) { @@ -437,3 +450,4 @@ static void sub_809C640(u8 taskId) data[1]++; } } + diff --git a/src/shop.c b/src/shop.c index d0b3994a2..a0a8b8eca 100644 --- a/src/shop.c +++ b/src/shop.c @@ -2,6 +2,8 @@ #include "shop.h" #include "menu.h" #include "data.h" +#include "graphics.h" +#include "strings.h" #include "list_menu.h" #include "new_menu_helpers.h" #include "party_menu.h" @@ -15,7 +17,6 @@ #include "item_menu.h" #include "main.h" #include "sound.h" -#include "strings.h" #include "string_util.h" #include "overworld.h" #include "window.h" @@ -38,9 +39,7 @@ #include "constants/items.h" #include "constants/game_stat.h" -#define t0 data[0] #define tItemCount data[1] -#define tX data[4] #define tItemId data[5] #define tListTaskId data[7] @@ -96,7 +95,6 @@ struct MartHistory /*0x17*/ u8 unk17; }; /* size = 0x18 */ - EWRAM_DATA s16 sViewportMapObjects[MAP_OBJECTS_COUNT][4] = {0}; EWRAM_DATA struct ShopData gShopData = {0}; EWRAM_DATA u8 sShopMenuWindowId = 0; @@ -165,39 +163,23 @@ static void nullsub_52(u8 taskId); static void nullsub_53(void); static void RecordQuestLogItemPurchase(void); -// external defines extern u8 MapGridGetMetatileLayerTypeAt(s16 x, s16 y); extern u16 BagGetQuantityByItemId(u16 item); -//Data Definitions -/* -extern const struct MenuAction gUnknown_83DF09C[]; -extern const struct YesNoFuncTable gUnknown_83DF0B4[]; -extern const struct WindowTemplate gUnknown_83DF0BC[]; -extern const struct BgTemplate gUnknown_83DF0C4[]; -*/ - -//graphics -extern const u32 gUnknown_8E85DC8[]; //gBuyMenuFrame_Gfx[]; -extern const u32 gUnknown_8E85EFC[]; //gBuyMenuFrame_Tilemap -extern const u32 gUnknown_8E86038[]; //gBuyMenuFrame_TmHmTilemap -extern const u32 gUnknown_8E86170[]; //gBuyMenuFrame_Pal - - -static const struct MenuAction gUnknown_83DF09C[] = // sShopMenuActions_BuySellQuit +static const struct MenuAction sShopMenuActions_BuySellQuit[] = { {gText_ShopBuy, {.void_u8 = Task_HandleShopMenuBuy}}, {gText_ShopSell, {.void_u8 = Task_HandleShopMenuSell}}, {gText_ShopQuit, {.void_u8 = Task_HandleShopMenuQuit}} }; -static const struct YesNoFuncTable gUnknown_83DF0B4[] = //sShopMenuActions_BuyQuit +static const struct YesNoFuncTable sShopMenuActions_BuyQuit[] = { - BuyMenuTryMakePurchase, //Task_HandleShopMenuBuy, - BuyMenuReturnToItemList //Task_HandleShopMenuQuit + BuyMenuTryMakePurchase, + BuyMenuReturnToItemList }; -static const struct WindowTemplate gUnknown_83DF0BC[] = //sShopMenuWindowTemplates +static const struct WindowTemplate sShopMenuWindowTemplates[] = { { .bg = 0, @@ -210,7 +192,7 @@ static const struct WindowTemplate gUnknown_83DF0BC[] = //sShopMenuWindowTem } }; -static const struct BgTemplate gUnknown_83DF0C4[4] = //sShopBuyMenuBgTemplates +static const struct BgTemplate sShopBuyMenuBgTemplates[4] = { { .bg = 0, @@ -250,7 +232,6 @@ static const struct BgTemplate gUnknown_83DF0C4[4] = //sShopBuyMenuBgTemplat } }; - // Functions static u8 CreateShopMenu(u8 a0) { @@ -261,9 +242,9 @@ static u8 CreateShopMenu(u8 a0) else gShopData.unk16_4 = 5; - sShopMenuWindowId = AddWindow(gUnknown_83DF0BC); //sShopMenuWindowTemplates + sShopMenuWindowId = AddWindow(sShopMenuWindowTemplates); SetStdWindowBorderStyle(sShopMenuWindowId, 0); - PrintTextArray(sShopMenuWindowId, 2, GetMenuCursorDimensionByFont(2, 0), 2, 16, 3, gUnknown_83DF09C); + PrintTextArray(sShopMenuWindowId, 2, GetMenuCursorDimensionByFont(2, 0), 2, 16, 3, sShopMenuActions_BuySellQuit); Menu_InitCursor(sShopMenuWindowId, 2, 0, 2, 16, 3, 0); PutWindowTilemap(sShopMenuWindowId); CopyWindowToVram(sShopMenuWindowId, 1); @@ -272,10 +253,12 @@ static u8 CreateShopMenu(u8 a0) static u8 GetMartTypeFromItemList(u32 a0) { - u16 retVal, i; + u16 i; + if (a0) return (u8)a0; goto MAIN; + RETURN_1: return 1; @@ -296,6 +279,7 @@ static u8 GetMartTypeFromItemList(u32 a0) else if (gShopData.itemList[i] == 0) goto RETURN_0; } + RETURN_0: return 0; } @@ -333,7 +317,7 @@ static void Task_ShopMenu(u8 taskId) Task_HandleShopMenuQuit(taskId); break; default: - gUnknown_83DF09C[Menu_GetCursorPos()].func.void_u8(taskId); + sShopMenuActions_BuySellQuit[Menu_GetCursorPos()].func.void_u8(taskId); break; } } @@ -377,6 +361,7 @@ static void Task_GoToBuyOrSellMenu(u8 taskId) { if (gPaletteFade.active) return; + SetMainCallback2((void *)GetWordTaskArg(taskId, 0xE)); FreeAllWindowBuffers(); DestroyTask(taskId); @@ -392,6 +377,7 @@ static void Task_ReturnToShopMenu(u8 taskId) { if (field_weather_is_fade_finished() != TRUE) return; + DisplayItemMessageOnField(taskId, GetMartUnk16_4(), gText_CanIHelpWithAnythingElse, ShowShopMenuAfterExitingBuyOrSellMenu); } @@ -420,6 +406,7 @@ static void VBlankCB_BuyMenu(void) static void CB2_InitBuyMenu(void) { u8 taskId; + switch (gMain.state) { case 0: @@ -469,12 +456,15 @@ static bool8 InitShopData(void) gShopTilemapBuffer1 = Alloc(sizeof(*gShopTilemapBuffer1)); if (gShopTilemapBuffer1 == 0) goto CANCEL; + gShopTilemapBuffer2 = Alloc(sizeof(*gShopTilemapBuffer2)); if (gShopTilemapBuffer2 == 0) goto CANCEL; + gShopTilemapBuffer3 = Alloc(sizeof(*gShopTilemapBuffer3)); if (gShopTilemapBuffer3 == 0) goto CANCEL; + gShopTilemapBuffer4 = Alloc(sizeof(*gShopTilemapBuffer4)); if (gShopTilemapBuffer4 == 0) goto CANCEL; @@ -489,7 +479,7 @@ static bool8 InitShopData(void) static void BuyMenuInitBgs(void) { ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, gUnknown_83DF0C4, NELEMS(gUnknown_83DF0C4)); + InitBgsFromTemplates(0, sShopBuyMenuBgTemplates, NELEMS(sShopBuyMenuBgTemplates)); SetBgTilemapBuffer(1, gShopTilemapBuffer2); SetBgTilemapBuffer(2, gShopTilemapBuffer4); SetBgTilemapBuffer(3, gShopTilemapBuffer3); @@ -512,13 +502,15 @@ static void BuyMenuInitBgs(void) static void BuyMenuDecompressBgGraphics(void) { void* pal; - DecompressAndCopyTileDataToVram(1, gUnknown_8E85DC8, 0x480, 0x3DC, 0); + + DecompressAndCopyTileDataToVram(1, gBuyMenuFrame_Gfx, 0x480, 0x3DC, 0); if ((gShopData.martType) != MART_TYPE_TMHM) - LZDecompressWram(gUnknown_8E85EFC, gShopTilemapBuffer1); //gBuyMenuFrame_Tilemap + LZDecompressWram(gBuyMenuFrame_Tilemap, gShopTilemapBuffer1); else - LZDecompressWram(gUnknown_8E86038, gShopTilemapBuffer1); //gBuyMenuFrame_TmHmTilemap + LZDecompressWram(gBuyMenuFrame_TmHmTilemap, gShopTilemapBuffer1); + pal = Alloc(0x40); - LZDecompressWram(gUnknown_8E86170, pal); + LZDecompressWram(gBuyMenuFrame_Pal, pal); LoadPalette(pal, 0xB0, 0x20); LoadPalette(pal + 0x20, 0x60, 0x20); Free(pal); @@ -527,14 +519,17 @@ static void BuyMenuDecompressBgGraphics(void) static void sub_809B10C(bool32 a0) { u8 v; + if (a0 == FALSE) v = 0xB; else v = 6; + if ((gShopData.martType) != MART_TYPE_TMHM) SetBgRectPal(1, 0, 0xE, 0x1E, 6, v); else SetBgRectPal(1, 0, 0xC, 0x1E, 8, v); + ScheduleBgCopyTilemapToVram(1); } @@ -551,10 +546,10 @@ static void BuyMenuDrawGraphics(void) static bool8 BuyMenuBuildListMenuTemplate(void) { - u16 i; - u16 v; + u16 i, v; struct ListMenuItem **list = &sShopMenuListMenu; struct ShopData *mart = &gShopData; + *list = Alloc((gShopData.itemCount + 1) * sizeof(*sShopMenuListMenu)); if (sShopMenuListMenu == 0) goto FREE_MEMORY; @@ -574,7 +569,7 @@ static bool8 BuyMenuBuildListMenuTemplate(void) for (i = 0; i < mart->itemCount; i++) { - PokeMartWriteNameAndIdAt(&sShopMenuListMenu[i], mart->itemList[i], sShopMenuItemStrings[i]); //PokeMartWriteNameAndIdAt(u16 a0, u16 a1, u8* a2) + PokeMartWriteNameAndIdAt(&sShopMenuListMenu[i], mart->itemList[i], sShopMenuItemStrings[i]); } ADD_CANCEL: @@ -640,6 +635,7 @@ static void BuyMenuPrintItemDescriptionAndShowItemIcon(s32 item, bool8 onInit, s CreateItemMenuIcon(item, gShopData.itemSlot); else CreateItemMenuIcon(ITEM_N_A, gShopData.itemSlot); + gShopData.itemSlot ^= 1; BuyMenuPrint(5, 2, description, 0, 3, 2, 1, 0, 0); } @@ -652,6 +648,7 @@ static void BuyMenuPrintItemDescriptionAndShowItemIcon(s32 item, bool8 onInit, s } #ifdef NONMATCHING +// As simple as this seems, I could not get the while loop to use the correct registers. It should pad the front of gStringVar4 with 0 based on the length of gStringVar1. static void BuyMenuPrintPriceInList(u8 windowId, s32 item, u8 y) { u32 len, x; @@ -857,10 +854,7 @@ static void sub_809B764(void) static void BuyMenuDrawMapBg(void) { - s16 i; - s16 j; - s16 x; - s16 y; + s16 i, j, x, y; const struct MapData *mapData; u16 metatile; u8 metatileLayerType; @@ -913,7 +907,6 @@ static void BuyMenuDrawMapMetatile(s16 x, s16 y, const u16 *src, u8 metatileLaye static void BuyMenuDrawMapMetatileLayer(u16 *dest, s16 offset1, s16 offset2, const u16 *src) { - // This function draws a whole 2x2 metatile. dest[offset1 + offset2] = src[0]; // top left dest[offset1 + offset2 + 1] = src[1]; // top right dest[offset1 + offset2 + 32] = src[2]; // bottom left @@ -922,12 +915,9 @@ static void BuyMenuDrawMapMetatileLayer(u16 *dest, s16 offset1, s16 offset2, con static void BuyMenuCollectEventObjectData(void) { - s16 facingX; - s16 facingY; - u8 y; - u8 x; + s16 facingX, facingY; + u8 x, y, z; u8 num = 0; - u8 z; GetXYCoordsOneStepInFrontOfPlayer(&facingX, &facingY); z = PlayerGetZCoord(); @@ -970,8 +960,7 @@ static void BuyMenuCollectEventObjectData(void) static void BuyMenuDrawEventObjects(void) { - u8 i; - u8 spriteId; + u8 i, spriteId; const struct MapObjectGraphicsInfo *graphicsInfo; for (i = 0; i < MAP_OBJECTS_COUNT; i++) @@ -993,7 +982,6 @@ static void BuyMenuDrawEventObjects(void) static void BuyMenuCopyTilemapData(void) { s16 i; - u16 *dst = *gShopTilemapBuffer2; u16 *src = *gShopTilemapBuffer1; @@ -1049,6 +1037,7 @@ static void Task_BuyMenu(u8 taskId) CopyItemName(itemId, gStringVar1); BuyMenuDisplayMessage(taskId, gText_Var1CertainlyHowMany, Task_BuyHowManyDialogueInit); } + break; } } } @@ -1056,7 +1045,6 @@ static void Task_BuyMenu(u8 taskId) static void Task_BuyHowManyDialogueInit(u8 taskId) { s16 *data = gTasks[taskId].data; - u16 quantityInBag = BagGetQuantityByItemId(tItemId); u16 maxQuantity; @@ -1120,7 +1108,7 @@ static void Task_BuyHowManyDialogueHandleInput(u8 taskId) static void CreateBuyMenuConfirmPurchaseWindow(u8 taskId) { - BuyMenuConfirmPurchase(taskId, gUnknown_83DF0B4); + BuyMenuConfirmPurchase(taskId, sShopMenuActions_BuyQuit); } static void BuyMenuTryMakePurchase(u8 taskId) @@ -1204,6 +1192,7 @@ static void nullsub_53(void) } #ifdef NONMATCHING +// couldn't get registers to match. It should store an address into r4 (what tmp wants to be), and load/store from there, eg. ldrh r0, [r4,#4]. Which indicates an array inside the MartHistory struct, except data sizes are not consistent. void RecordItemPurchase(u16 item, u16 quantity, u8 a2) { struct MartHistory *tmp; @@ -1343,6 +1332,7 @@ static void RecordQuestLogItemPurchase(void) v = history->unkA; if (v != 0) sub_8113550(v + 0x24, (const u16*)history); + v = history->unk16; if (v != 0) { -- cgit v1.2.3 From dd6239fe266d5972fdc36348f3d72148cc8f94fb Mon Sep 17 00:00:00 2001 From: Evan Date: Tue, 26 Nov 2019 12:36:27 -0700 Subject: init branch --- src/pokeball.c | 1 + 1 file changed, 1 insertion(+) create mode 100644 src/pokeball.c (limited to 'src') diff --git a/src/pokeball.c b/src/pokeball.c new file mode 100644 index 000000000..dc4f98a6e --- /dev/null +++ b/src/pokeball.c @@ -0,0 +1 @@ +#include "global.h" -- cgit v1.2.3 From 5ad5764d4edd275b7ce818570b70bf7679546539 Mon Sep 17 00:00:00 2001 From: Evan Date: Tue, 26 Nov 2019 14:02:20 -0700 Subject: fix return type --- src/shop.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/shop.c b/src/shop.c index a8294fd72..b15d6a716 100644 --- a/src/shop.c +++ b/src/shop.c @@ -108,7 +108,7 @@ EWRAM_DATA struct MartHistory gShopMenuHistory = {0}; //Function Declarations static u8 CreateShopMenu(u8 a0); -static u8 GetMartTypeFromItemList(bool32 a0); +static bool8 GetMartTypeFromItemList(bool32 a0); static void SetShopItemsForSale(const u16 *items); static void SetShopMenuCallback(MainCallback callback); static void Task_ShopMenu(u8 taskId); -- cgit v1.2.3 From 4b33546727007829bb80121790ff377f4e9739b9 Mon Sep 17 00:00:00 2001 From: Evan Date: Tue, 26 Nov 2019 16:54:55 -0700 Subject: DoPokeballSendOutAnimation --- src/pokeball.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'src') diff --git a/src/pokeball.c b/src/pokeball.c index dc4f98a6e..e9d50599b 100644 --- a/src/pokeball.c +++ b/src/pokeball.c @@ -1 +1,13 @@ #include "global.h" +#include "pokeball.h" +#include "battle.h" + + +u8 DoPokeballSendOutAnimation(u16 a0, u8 a1) +{ + gDoingBattleAnim = 1; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive = TRUE; + CreateTask(sub_804A9A0, 5); + + return 0; +} -- cgit v1.2.3 From f4b6a8195a0b5145b58afa81e87a457bda140c11 Mon Sep 17 00:00:00 2001 From: Evan Date: Tue, 26 Nov 2019 17:05:02 -0700 Subject: match BuyMenuPrintPriceInList --- src/shop.c | 91 ++++---------------------------------------------------------- 1 file changed, 5 insertions(+), 86 deletions(-) (limited to 'src') diff --git a/src/shop.c b/src/shop.c index b15d6a716..982202da2 100644 --- a/src/shop.c +++ b/src/shop.c @@ -643,103 +643,22 @@ static void BuyMenuPrintItemDescriptionAndShowItemIcon(s32 item, bool8 onInit, s } } -#ifdef NONMATCHING -// As simple as this seems, I could not get the while loop to use the correct registers. It should pad the front of gStringVar4 with 0 based on the length of gStringVar1. static void BuyMenuPrintPriceInList(u8 windowId, s32 item, u8 y) { - u32 len, x; + s32 x; u8 *loc; if (item != INDEX_CANCEL) { ConvertIntToDecimalStringN(gStringVar1, itemid_get_market_price(item), 0, 4); - len = 4 - StringLength(gStringVar1); + x = 4 - StringLength(gStringVar1); loc = gStringVar4; - x = len - 1; - if (x > 0) - { - while (len != 0) - { - *loc = 0; - loc++; - len--; - } - } + while (x-- != 0) + *loc++ = 0; StringExpandPlaceholders(loc, gText_PokedollarVar1); - BuyMenuPrint(windowId, 1, gStringVar4, 0x69, y, 0, 0, TEXT_SPEED_FF, 1); + BuyMenuPrint(windowId, 0, gStringVar4, 0x69, y, 0, 0, TEXT_SPEED_FF, 1); } } -#else -NAKED -static void BuyMenuPrintPriceInList(u8 windowId, s32 item, u8 y) -{ - asm_unified("\tpush {r4-r6,lr}\n" - "\tsub sp, 0x14\n" - "\tlsls r0, 24\n" - "\tlsrs r6, r0, 24\n" - "\tlsls r2, 24\n" - "\tlsrs r5, r2, 24\n" - "\tmovs r0, 0x2\n" - "\tnegs r0, r0\n" - "\tcmp r1, r0\n" - "\tbeq _0809B480\n" - "\tldr r4, _0809B488 @ =gStringVar1\n" - "\tlsls r0, r1, 16\n" - "\tlsrs r0, 16\n" - "\tbl itemid_get_market_price\n" - "\tadds r1, r0, 0\n" - "\tlsls r1, 16\n" - "\tlsrs r1, 16\n" - "\tadds r0, r4, 0\n" - "\tmovs r2, 0\n" - "\tmovs r3, 0x4\n" - "\tbl ConvertIntToDecimalStringN\n" - "\tadds r0, r4, 0\n" - "\tbl StringLength\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tmovs r1, 0x4\n" - "\tsubs r1, r0\n" - "\tldr r2, _0809B48C @ =gStringVar4\n" - "\tadds r0, r1, 0\n" - "\tsubs r1, 0x1\n" - "\tcmp r0, 0\n" - "\tbeq _0809B45C\n" - "\tmovs r3, 0\n" - "_0809B450:\n" - "\tstrb r3, [r2]\n" - "\tadds r2, 0x1\n" - "\tadds r0, r1, 0\n" - "\tsubs r1, 0x1\n" - "\tcmp r0, 0\n" - "\tbne _0809B450\n" - "_0809B45C:\n" - "\tldr r1, _0809B490 @ =gText_PokedollarVar1\n" - "\tadds r0, r2, 0\n" - "\tbl StringExpandPlaceholders\n" - "\tldr r2, _0809B48C @ =gStringVar4\n" - "\tstr r5, [sp]\n" - "\tmovs r0, 0\n" - "\tstr r0, [sp, 0x4]\n" - "\tstr r0, [sp, 0x8]\n" - "\tmovs r0, 0xFF\n" - "\tstr r0, [sp, 0xC]\n" - "\tmovs r0, 0x1\n" - "\tstr r0, [sp, 0x10]\n" - "\tadds r0, r6, 0\n" - "\tmovs r1, 0\n" - "\tmovs r3, 0x69\n" - "\tbl BuyMenuPrint\n" - "_0809B480:\n" - "\tadd sp, 0x14\n" - "\tpop {r4-r6}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t_0809B488: .4byte gStringVar1\n" - "\t_0809B48C: .4byte gStringVar4\n" - "\t_0809B490: .4byte gText_PokedollarVar1\n"); -} -#endif static void LoadTmHmNameInMart(s32 item) { -- cgit v1.2.3 From cba5ebbd5af599736f84a8ef0142382f5a96f4af Mon Sep 17 00:00:00 2001 From: Evan Date: Wed, 27 Nov 2019 07:14:33 -0700 Subject: remove pokeball.s --- src/pokeball.c | 1300 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 1294 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/pokeball.c b/src/pokeball.c index e9d50599b..cbba77bb2 100644 --- a/src/pokeball.c +++ b/src/pokeball.c @@ -1,13 +1,1301 @@ #include "global.h" -#include "pokeball.h" #include "battle.h" +#include "battle_anim.h" +#include "decompress.h" +#include "graphics.h" +#include "main.h" +#include "m4a.h" +#include "pokeball.h" +#include "pokemon.h" +#include "sound.h" +#include "sprite.h" +#include "task.h" +#include "trig.h" +#include "util.h" +#include "link.h" +#include "battle_gfx_sfx_util.h" +#include "constants/songs.h" +#include "constants/species.h" + +#define tFrames data[0] +#define tPan data[1] +#define tThrowId data[2] +#define tBattler data[3] +#define tOpponentBattler data[4] + +#define sBattler data[6] + +// Function Declarations +static void Task_DoPokeballSendOutAnim(u8 taskId); +//static void SpriteCB_TestBallThrow(struct Sprite *sprite); +static void sub_804AC88(struct Sprite *sprite); +static void sub_804AC94(struct Sprite *sprite); +static void sub_804AD00(struct Sprite *sprite); +static void sub_804AD98(struct Sprite *sprite); +static void sub_804ADEC(struct Sprite *sprite); +static void sub_804AEE4(struct Sprite *sprite); +static void sub_804AF24(struct Sprite *sprite); +static void Task_PlayCryWhenReleasedFromBall(u8 taskId); +static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite); +static void sub_804B484(struct Sprite *sprite); +static void HandleBallAnimEnd(struct Sprite *sprite); +static void sub_804B5C8(struct Sprite *sprite); +static void SpriteCB_PlayerMonSendOut_1(struct Sprite *sprite); +static void SpriteCB_PlayerMonSendOut_2(struct Sprite *sprite); +static void SpriteCB_ReleaseMon2FromBall(struct Sprite *sprite); +static void SpriteCB_OpponentMonSendOut(struct Sprite *sprite); +static u8 LaunchBallStarsTaskForPokeball(u8 x, u8 y, u8 kindOfStars, u8 d); +static u8 LaunchBallFadeMonTaskForPokeball(bool8 unFadeLater, u8 battlerId, u32 arg2); +static void sub_804B9E8(struct Sprite *sprite); +static void sub_804BAA4(struct Sprite *sprite); +static void sub_804BC50(struct Sprite *sprite); +static void sub_804BCF8(struct Sprite *sprite); +static void sub_804BD6C(struct Sprite *sprite); +static void DestroySpriteAndFreeResources2(struct Sprite *sprite); +static void sub_804BE24(struct Sprite *sprite); +static void sub_804BE48(struct Sprite *sprite); +static void SpriteCB_HitAnimHealthoxEffect(struct Sprite *sprite); +static u16 GetBattlerPokeballItemId(u8 battlerId); + +// Data +extern const struct SpriteTemplate gUnknown_82606F4[]; + +extern const struct CompressedSpriteSheet gBallSpriteSheets[POKEBALL_COUNT]; +extern const struct CompressedSpritePalette gBallSpritePalettes[POKEBALL_COUNT]; + +// Functions +u8 DoPokeballSendOutAnimation(s16 pan, u8 kindOfThrow) +{ + u8 taskId; + + gDoingBattleAnim = TRUE; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive = 1; + taskId = CreateTask(Task_DoPokeballSendOutAnim, 5); + gTasks[taskId].tPan = pan; + gTasks[taskId].tThrowId = kindOfThrow; + gTasks[taskId].tBattler = gActiveBattler; + return 0; +} + +#ifdef NONMATCHING +static void Task_DoPokeballSendOutAnim(u8 taskId) +{ + u16 throwCaseId; + u8 battlerId; + u16 itemId, ballId; + u8 ballSpriteId; + bool8 notSendOut = FALSE; + u8 gender; + + if (gTasks[taskId].tFrames == 0) + { + gTasks[taskId].tFrames++; + return; + } + + throwCaseId = gTasks[taskId].tThrowId; + battlerId = gTasks[taskId].tBattler; + + if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) + itemId = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_POKEBALL); + else + itemId = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_POKEBALL); + + ballId = ItemIdToBallId(itemId); + LoadBallGfx(ballId); + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + gender = gLinkPlayers[GetBattlerMultiplayerId(battlerId)].gender; + else + gender = gSaveBlock2Ptr->playerGender; + + ballSpriteId = CreateSprite(&gUnknown_82606F4[ballId], 32, 80, 29); + gSprites[ballSpriteId].data[0] = 0x80; + gSprites[ballSpriteId].data[1] = 0; + gSprites[ballSpriteId].data[7] = throwCaseId; + + switch (throwCaseId) + { + case POKEBALL_PLAYER_SENDOUT: + if (gBattleTypeFlags & BATTLE_TYPE_POKEDUDE) + { + gSprites[ballSpriteId].pos1.x = 32; + gSprites[ballSpriteId].pos1.y = 64; + } + else + { + gender == gender; + gSprites[ballSpriteId].pos1.x = 48; + gSprites[ballSpriteId].pos1.y = 70; + } + + gBattlerTarget = battlerId; + gSprites[ballSpriteId].callback = SpriteCB_PlayerMonSendOut_1; + break; + case POKEBALL_OPPONENT_SENDOUT: + gSprites[ballSpriteId].pos1.x = GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X); + gSprites[ballSpriteId].pos1.y = GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y) + 24; + gBattlerTarget = battlerId; + gSprites[ballSpriteId].data[0] = 0; + gSprites[ballSpriteId].callback = SpriteCB_OpponentMonSendOut; + break; + default: + gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); + notSendOut = TRUE; + break; + } + gSprites[ballSpriteId].sBattler = gBattlerTarget; + if (!notSendOut) + { + DestroyTask(taskId); + return; + } -u8 DoPokeballSendOutAnimation(u16 a0, u8 a1) + // this will perform an unused ball throw animation + gSprites[ballSpriteId].data[0] = 0x22; + gSprites[ballSpriteId].data[2] = GetBattlerSpriteCoord(gBattlerTarget, BATTLER_COORD_X); + gSprites[ballSpriteId].data[4] = GetBattlerSpriteCoord(gBattlerTarget, BATTLER_COORD_Y) - 16; + gSprites[ballSpriteId].data[5] = -40; + InitAnimArcTranslation(&gSprites[ballSpriteId]); + gSprites[ballSpriteId].oam.affineParam = taskId; + gTasks[taskId].tOpponentBattler = gBattlerTarget; + gTasks[taskId].func = TaskDummy; + PlaySE(SE_NAGERU); +} +#else +NAKED +static void Task_DoPokeballSendOutAnim(u8 taskId) { - gDoingBattleAnim = 1; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive = TRUE; - CreateTask(sub_804A9A0, 5); + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r10\n" + "\tmov r6, r9\n" + "\tmov r5, r8\n" + "\tpush {r5-r7}\n" + "\tsub sp, 0x8\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tstr r0, [sp]\n" + "\tmovs r0, 0\n" + "\tstr r0, [sp, 0x4]\n" + "\tldr r1, _0804A9D4 @ =gTasks\n" + "\tldr r2, [sp]\n" + "\tlsls r0, r2, 2\n" + "\tadds r0, r2\n" + "\tlsls r0, 3\n" + "\tadds r1, r0, r1\n" + "\tldrh r2, [r1, 0x8]\n" + "\tmovs r3, 0x8\n" + "\tldrsh r0, [r1, r3]\n" + "\tcmp r0, 0\n" + "\tbne _0804A9D8\n" + "\tadds r0, r2, 0x1\n" + "\tstrh r0, [r1, 0x8]\n" + "\tb _0804ABB8\n" + "\t.align 2, 0\n" + "_0804A9D4: .4byte gTasks\n" + "_0804A9D8:\n" + "\tldrh r0, [r1, 0xC]\n" + "\tmov r9, r0\n" + "\tldrb r6, [r1, 0xE]\n" + "\tadds r0, r6, 0\n" + "\tbl GetBattlerSide\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbeq _0804AA04\n" + "\tldr r1, _0804A9FC @ =gBattlerPartyIndexes\n" + "\tlsls r0, r6, 1\n" + "\tadds r0, r1\n" + "\tldrh r1, [r0]\n" + "\tmovs r0, 0x64\n" + "\tmuls r0, r1\n" + "\tldr r1, _0804AA00 @ =gEnemyParty\n" + "\tb _0804AA12\n" + "\t.align 2, 0\n" + "_0804A9FC: .4byte gBattlerPartyIndexes\n" + "_0804AA00: .4byte gEnemyParty\n" + "_0804AA04:\n" + "\tldr r1, _0804AA50 @ =gBattlerPartyIndexes\n" + "\tlsls r0, r6, 1\n" + "\tadds r0, r1\n" + "\tldrh r1, [r0]\n" + "\tmovs r0, 0x64\n" + "\tmuls r0, r1\n" + "\tldr r1, _0804AA54 @ =gPlayerParty\n" + "_0804AA12:\n" + "\tadds r0, r1\n" + "\tmovs r1, 0x26\n" + "\tbl GetMonData\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tbl ItemIdToBallId\n" + "\tlsls r0, 24\n" + "\tlsrs r5, r0, 24\n" + "\tadds r0, r5, 0\n" + "\tbl LoadBallGfx\n" + "\tldr r0, _0804AA58 @ =gBattleTypeFlags\n" + "\tldr r0, [r0]\n" + "\tmovs r1, 0x2\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _0804AA60\n" + "\tldr r4, _0804AA5C @ =gLinkPlayers\n" + "\tadds r0, r6, 0\n" + "\tbl GetBattlerMultiplayerId\n" + "\tlsls r1, r0, 3\n" + "\tsubs r1, r0\n" + "\tlsls r1, 2\n" + "\tadds r1, r4\n" + "\tldrb r1, [r1, 0x13]\n" + "\tmov r10, r1\n" + "\tb _0804AA68\n" + "\t.align 2, 0\n" + "_0804AA50: .4byte gBattlerPartyIndexes\n" + "_0804AA54: .4byte gPlayerParty\n" + "_0804AA58: .4byte gBattleTypeFlags\n" + "_0804AA5C: .4byte gLinkPlayers\n" + "_0804AA60:\n" + "\tldr r0, _0804AAB8 @ =gSaveBlock2Ptr\n" + "\tldr r0, [r0]\n" + "\tldrb r0, [r0, 0x8]\n" + "\tmov r10, r0\n" + "_0804AA68:\n" + "\tlsls r0, r5, 1\n" + "\tadds r0, r5\n" + "\tlsls r0, 3\n" + "\tldr r1, _0804AABC @ =gUnknown_82606F4\n" + "\tadds r0, r1\n" + "\tmovs r1, 0x20\n" + "\tmovs r2, 0x50\n" + "\tmovs r3, 0x1D\n" + "\tbl CreateSprite\n" + "\tlsls r0, 24\n" + "\tlsrs r7, r0, 24\n" + "\tlsls r5, r7, 4\n" + "\tadds r0, r5, r7\n" + "\tlsls r0, 2\n" + "\tmov r8, r0\n" + "\tldr r4, _0804AAC0 @ =gSprites\n" + "\tadd r4, r8\n" + "\tmovs r0, 0x80\n" + "\tstrh r0, [r4, 0x2E]\n" + "\tmovs r1, 0\n" + "\tstrh r1, [r4, 0x30]\n" + "\tmov r2, r9\n" + "\tstrh r2, [r4, 0x3C]\n" + "\tmov r3, r9\n" + "\tcmp r3, 0xFE\n" + "\tbeq _0804AAF8\n" + "\tcmp r3, 0xFF\n" + "\tbne _0804AB38\n" + "\tldr r0, _0804AAC4 @ =gBattleTypeFlags\n" + "\tldr r0, [r0]\n" + "\tmovs r1, 0x80\n" + "\tlsls r1, 9\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _0804AAC8\n" + "\tmovs r5, 0x20\n" + "\tmovs r4, 0x40\n" + "\tb _0804AACE\n" + "\t.align 2, 0\n" + "_0804AAB8: .4byte gSaveBlock2Ptr\n" + "_0804AABC: .4byte gUnknown_82606F4\n" + "_0804AAC0: .4byte gSprites\n" + "_0804AAC4: .4byte gBattleTypeFlags\n" + "_0804AAC8:\n" + "\tmov r0, r10\n" + "\tmovs r5, 0x30\n" + "\tmovs r4, 0x46\n" + "_0804AACE:\n" + "\tldr r0, _0804AAEC @ =gBattlerTarget\n" + "\tstrb r6, [r0]\n" + "\tldr r2, _0804AAF0 @ =gSprites\n" + "\tlsls r3, r7, 4\n" + "\tadds r1, r3, r7\n" + "\tlsls r1, 2\n" + "\tadds r0, r1, r2\n" + "\tstrh r5, [r0, 0x20]\n" + "\tstrh r4, [r0, 0x22]\n" + "\tadds r2, 0x1C\n" + "\tadds r1, r2\n" + "\tldr r0, _0804AAF4 @ =SpriteCB_PlayerMonSendOut_1\n" + "\tstr r0, [r1]\n" + "\tb _0804AB48\n" + "\t.align 2, 0\n" + "_0804AAEC: .4byte gBattlerTarget\n" + "_0804AAF0: .4byte gSprites\n" + "_0804AAF4: .4byte SpriteCB_PlayerMonSendOut_1\n" + "_0804AAF8:\n" + "\tadds r0, r6, 0\n" + "\tmovs r1, 0\n" + "\tbl GetBattlerSpriteCoord\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tstrh r0, [r4, 0x20]\n" + "\tadds r0, r6, 0\n" + "\tmovs r1, 0x1\n" + "\tbl GetBattlerSpriteCoord\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tadds r0, 0x18\n" + "\tstrh r0, [r4, 0x22]\n" + "\tldr r0, _0804AB2C @ =gBattlerTarget\n" + "\tstrb r6, [r0]\n" + "\tmovs r1, 0\n" + "\tstrh r1, [r4, 0x2E]\n" + "\tldr r0, _0804AB30 @ =gSprites\n" + "\tadds r0, 0x1C\n" + "\tadd r0, r8\n" + "\tldr r1, _0804AB34 @ =SpriteCB_OpponentMonSendOut\n" + "\tstr r1, [r0]\n" + "\tb _0804AB46\n" + "\t.align 2, 0\n" + "_0804AB2C: .4byte gBattlerTarget\n" + "_0804AB30: .4byte gSprites\n" + "_0804AB34: .4byte SpriteCB_OpponentMonSendOut\n" + "_0804AB38:\n" + "\tmovs r0, 0x1\n" + "\tbl GetBattlerAtPosition\n" + "\tldr r1, _0804AB64 @ =gBattlerTarget\n" + "\tstrb r0, [r1]\n" + "\tmovs r2, 0x1\n" + "\tstr r2, [sp, 0x4]\n" + "_0804AB46:\n" + "\tadds r3, r5, 0\n" + "_0804AB48:\n" + "\tldr r0, _0804AB68 @ =gSprites\n" + "\tadds r1, r3, r7\n" + "\tlsls r1, 2\n" + "\tadds r4, r1, r0\n" + "\tldr r5, _0804AB64 @ =gBattlerTarget\n" + "\tldrb r0, [r5]\n" + "\tstrh r0, [r4, 0x3A]\n" + "\tldr r3, [sp, 0x4]\n" + "\tcmp r3, 0\n" + "\tbne _0804AB6C\n" + "\tldr r0, [sp]\n" + "\tbl DestroyTask\n" + "\tb _0804ABB8\n" + "\t.align 2, 0\n" + "_0804AB64: .4byte gBattlerTarget\n" + "_0804AB68: .4byte gSprites\n" + "_0804AB6C:\n" + "\tmovs r0, 0x22\n" + "\tstrh r0, [r4, 0x2E]\n" + "\tldrb r0, [r5]\n" + "\tmovs r1, 0\n" + "\tbl GetBattlerSpriteCoord\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tstrh r0, [r4, 0x32]\n" + "\tldrb r0, [r5]\n" + "\tmovs r1, 0x1\n" + "\tbl GetBattlerSpriteCoord\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tsubs r0, 0x10\n" + "\tstrh r0, [r4, 0x36]\n" + "\tldr r0, _0804ABC8 @ =0x0000ffd8\n" + "\tstrh r0, [r4, 0x38]\n" + "\tadds r0, r4, 0\n" + "\tbl InitAnimArcTranslation\n" + "\tmov r0, sp\n" + "\tldrh r0, [r0]\n" + "\tstrh r0, [r4, 0x6]\n" + "\tldr r1, _0804ABCC @ =gTasks\n" + "\tldr r2, [sp]\n" + "\tlsls r0, r2, 2\n" + "\tadds r0, r2\n" + "\tlsls r0, 3\n" + "\tadds r0, r1\n" + "\tldrb r1, [r5]\n" + "\tstrh r1, [r0, 0x10]\n" + "\tldr r1, _0804ABD0 @ =TaskDummy\n" + "\tstr r1, [r0]\n" + "\tmovs r0, 0x36\n" + "\tbl PlaySE\n" + "_0804ABB8:\n" + "\tadd sp, 0x8\n" + "\tpop {r3-r5}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tmov r10, r5\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_0804ABC8: .4byte 0x0000ffd8\n" + "_0804ABCC: .4byte gTasks\n" + "_0804ABD0: .4byte TaskDummy\n"); +} +#endif - return 0; +//static +void SpriteCB_TestBallThrow(struct Sprite *sprite) +{ + if (TranslateAnimHorizontalArc(sprite)) + { + u16 ballId; + u8 taskId = sprite->oam.affineParam; + u8 opponentBattler = gTasks[taskId].tOpponentBattler; + u8 noOfShakes = gTasks[taskId].tThrowId; + + StartSpriteAnim(sprite, 1); + sprite->affineAnimPaused = 1; + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data[5] = 0; + ballId = ItemIdToBallId(GetBattlerPokeballItemId(opponentBattler)); + LaunchBallStarsTask(sprite->pos1.x, sprite->pos1.y - 5, 1, 0x1C, ballId); + sprite->data[0] = LaunchBallFadeMonTask(FALSE, opponentBattler, 14, ballId); + sprite->sBattler = opponentBattler; + sprite->data[7] = noOfShakes; + DestroyTask(taskId); + sprite->callback = sub_804AC88; + } } + +#undef tFrames +#undef tPan +#undef tThrowId +#undef tBattler +#undef tOpponentBattler + +static void sub_804AC88(struct Sprite *sprite) +{ + sprite->callback = sub_804AC94; +} + +static void sub_804AC94(struct Sprite *sprite) +{ + if (++sprite->data[5] == 10) + { + sprite->data[5] = 0; + sprite->callback = sub_804AD00; + StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[sprite->sBattler]], 2); + AnimateSprite(&gSprites[gBattlerSpriteIds[sprite->sBattler]]); + gSprites[gBattlerSpriteIds[sprite->sBattler]].data[1] = 0; + } +} + +static void sub_804AD00(struct Sprite *sprite) +{ + sprite->data[5]++; + if (sprite->data[5] == 11) + PlaySE(SE_SUIKOMU); + if (gSprites[gBattlerSpriteIds[sprite->sBattler]].affineAnimEnded) + { + StartSpriteAnim(sprite, 2); + gSprites[gBattlerSpriteIds[sprite->sBattler]].invisible = TRUE; + sprite->data[5] = 0; + sprite->callback = sub_804AD98; + } + else + { + gSprites[gBattlerSpriteIds[sprite->sBattler]].data[1] += 0x60; + gSprites[gBattlerSpriteIds[sprite->sBattler]].pos2.y = -gSprites[gBattlerSpriteIds[sprite->sBattler]].data[1] >> 8; + } +} + +static void sub_804AD98(struct Sprite *sprite) +{ + if (sprite->animEnded) + { + sprite->data[5]++; + if (sprite->data[5] == 1) + { + sprite->data[3] = 0; + sprite->data[4] = 32; + sprite->data[5] = 0; + sprite->pos1.y += Cos(0, 32); + sprite->pos2.y = -Cos(0, sprite->data[4]); + sprite->callback = sub_804ADEC; + } + } +} + +static void sub_804ADEC(struct Sprite *sprite) +{ + bool8 r5 = FALSE; + + switch (sprite->data[3] & 0xFF) + { + case 0: + sprite->pos2.y = -Cos(sprite->data[5], sprite->data[4]); + sprite->data[5] += 4 + (sprite->data[3] >> 8); + if (sprite->data[5] >= 64) + { + sprite->data[4] -= 10; + sprite->data[3] += 0x101; + if (sprite->data[3] >> 8 == 4) + r5 = TRUE; + switch (sprite->data[3] >> 8) + { + case 1: + PlaySE(SE_KON); + break; + case 2: + PlaySE(SE_KON2); + break; + case 3: + PlaySE(SE_KON3); + break; + default: + PlaySE(SE_KON4); + break; + } + } + break; + case 1: + sprite->pos2.y = -Cos(sprite->data[5], sprite->data[4]); + sprite->data[5] -= 4 + (sprite->data[3] >> 8); + if (sprite->data[5] <= 0) + { + sprite->data[5] = 0; + sprite->data[3] &= 0xFF00; + } + break; + } + if (r5) + { + sprite->data[3] = 0; + sprite->pos1.y += Cos(64, 32); + sprite->pos2.y = 0; + if (sprite->data[7] == 0) + { + sprite->callback = SpriteCB_ReleaseMonFromBall; + } + else + { + sprite->callback = sub_804AEE4; + sprite->data[4] = 1; + sprite->data[5] = 0; + } + } +} + +static void sub_804AEE4(struct Sprite *sprite) +{ + sprite->data[3]++; + if (sprite->data[3] == 31) + { + sprite->data[3] = 0; + sprite->affineAnimPaused = TRUE; + StartSpriteAffineAnim(sprite, 1); + sprite->callback = sub_804AF24; + PlaySE(SE_BOWA); + } +} + +static void sub_804AF24(struct Sprite *sprite) +{ + switch (sprite->data[3] & 0xFF) + { + case 0: + case 2: + sprite->pos2.x += sprite->data[4]; + sprite->data[5] += sprite->data[4]; + sprite->affineAnimPaused = FALSE; + if (sprite->data[5] > 3 || sprite->data[5] < -3) + { + sprite->data[3]++; + sprite->data[5] = 0; + } + break; + case 1: + sprite->data[5]++; + if (sprite->data[5] == 1) + { + sprite->data[5] = 0; + sprite->data[4] = -sprite->data[4]; + sprite->data[3]++; + sprite->affineAnimPaused = FALSE; + if (sprite->data[4] < 0) + ChangeSpriteAffineAnim(sprite, 2); + else + ChangeSpriteAffineAnim(sprite, 1); + } + else + { + sprite->affineAnimPaused = TRUE; + } + break; + case 3: + sprite->data[3] += 0x100; + if (sprite->data[3] >> 8 == sprite->data[7]) + { + sprite->callback = SpriteCB_ReleaseMonFromBall; + } + else + { + if (sprite->data[7] == 4 && sprite->data[3] >> 8 == 3) + { + sprite->callback = sub_804B484; + sprite->affineAnimPaused = TRUE; + } + else + { + sprite->data[3]++; + sprite->affineAnimPaused = TRUE; + } + } + break; + case 4: + default: + sprite->data[5]++; + if (sprite->data[5] == 31) + { + sprite->data[5] = 0; + sprite->data[3] &= 0xFF00; + StartSpriteAffineAnim(sprite, 3); + if (sprite->data[4] < 0) + StartSpriteAffineAnim(sprite, 2); + else + StartSpriteAffineAnim(sprite, 1); + PlaySE(SE_BOWA); + } + break; + } +} + +#define tCryTaskSpecies data[0] +#define tCryTaskPan data[1] +#define tCryTaskWantedCry data[2] +#define tCryTaskBattler data[3] +#define tCryTaskMonSpriteId data[4] +#define tCryTaskMonPtr1 data[5] +#define tCryTaskMonPtr2 data[6] +#define tCryTaskFrames data[10] +#define tCryTaskState data[15] + +static void Task_PlayCryWhenReleasedFromBall(u8 taskId) +{ + u8 wantedCry = gTasks[taskId].tCryTaskWantedCry; + s8 pan = gTasks[taskId].tCryTaskPan; + u16 species = gTasks[taskId].tCryTaskSpecies; + u8 battlerId = gTasks[taskId].tCryTaskBattler; + u8 monSpriteId = gTasks[taskId].tCryTaskMonSpriteId; + struct Pokemon *mon = (void*)(u32)((gTasks[taskId].tCryTaskMonPtr1 << 0x10) | (u16)(gTasks[taskId].tCryTaskMonPtr2)); + + switch (gTasks[taskId].tCryTaskState) + { + case 0: + default: + if (gSprites[monSpriteId].affineAnimEnded) + gTasks[taskId].tCryTaskState = wantedCry + 1; + break; + case 1: + if (ShouldPlayNormalPokeCry(mon) == TRUE) + PlayCry3(species, pan, 0); + else + PlayCry3(species, pan, 11); + gBattleSpritesDataPtr->healthBoxesData[battlerId].field_1_x40 = 0; + DestroyTask(taskId); + break; + case 2: + StopCryAndClearCrySongs(); + gTasks[taskId].tCryTaskFrames = 3; + gTasks[taskId].tCryTaskState = 20; + break; + case 20: + if (gTasks[taskId].tCryTaskFrames == 0) + { + if (ShouldPlayNormalPokeCry(mon) == TRUE) + PlayCry4(species, pan, 1); + else + PlayCry4(species, pan, 12); + + gBattleSpritesDataPtr->healthBoxesData[battlerId].field_1_x40 = 0; + DestroyTask(taskId); + } + else + { + gTasks[taskId].tCryTaskFrames--; + } + break; + case 3: + gTasks[taskId].tCryTaskFrames = 6; + gTasks[taskId].tCryTaskState = 30; + break; + case 30: + if (gTasks[taskId].tCryTaskFrames != 0) + { + gTasks[taskId].tCryTaskFrames--; + break; + } + gTasks[taskId].tCryTaskState++; + // fall through + case 31: + if (!IsCryPlayingOrClearCrySongs()) + { + StopCryAndClearCrySongs(); + gTasks[taskId].tCryTaskFrames = 3; + gTasks[taskId].tCryTaskState++; + } + break; + case 32: + if (gTasks[taskId].tCryTaskFrames != 0) + { + gTasks[taskId].tCryTaskFrames--; + break; + } + if (ShouldPlayNormalPokeCry(mon) == TRUE) + PlayCry4(species, pan, 0); + else + PlayCry4(species, pan, 11); + + gBattleSpritesDataPtr->healthBoxesData[battlerId].field_1_x40 = 0; + DestroyTask(taskId); + break; + } +} + +static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite) +{ + u8 battlerId = sprite->sBattler; + u32 ballId; + + StartSpriteAnim(sprite, 1); + ballId = ItemIdToBallId(GetBattlerPokeballItemId(battlerId)); + LaunchBallStarsTask(sprite->pos1.x, sprite->pos1.y - 5, 1, 0x1C, ballId); + sprite->data[0] = LaunchBallFadeMonTask(1, sprite->sBattler, 14, ballId); + sprite->callback = HandleBallAnimEnd; + + if (gMain.inBattle) + { + struct Pokemon *mon; + u16 species; + s8 pan; + u16 wantedCryCase; + u8 taskId; + + if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) + { + mon = &gEnemyParty[gBattlerPartyIndexes[battlerId]]; + pan = 25; + } + else + { + mon = &gPlayerParty[gBattlerPartyIndexes[battlerId]]; + pan = -25; + } + + species = GetMonData(mon, MON_DATA_SPECIES); + if ((battlerId == GetBattlerAtPosition(B_POSITION_PLAYER_LEFT) || battlerId == GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)) + && IsDoubleBattle() && gBattleSpritesDataPtr->animationData->field_9_x1) + { + if (gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_LINK) + { + if (IsBGMPlaying()) + m4aMPlayStop(&gMPlayInfo_BGM); + } + else + { + m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 128); + } + } + + if (!IsDoubleBattle() || !gBattleSpritesDataPtr->animationData->field_9_x1) + wantedCryCase = 0; + else if (battlerId == GetBattlerAtPosition(B_POSITION_PLAYER_LEFT) || battlerId == GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)) + wantedCryCase = 1; + else + wantedCryCase = 2; + + gBattleSpritesDataPtr->healthBoxesData[battlerId].field_1_x40 = 1; + + taskId = CreateTask(Task_PlayCryWhenReleasedFromBall, 3); + gTasks[taskId].tCryTaskSpecies = species; + gTasks[taskId].tCryTaskPan = pan; + gTasks[taskId].tCryTaskWantedCry = wantedCryCase; + gTasks[taskId].tCryTaskBattler = battlerId; + gTasks[taskId].tCryTaskMonSpriteId = gBattlerSpriteIds[sprite->sBattler]; + gTasks[taskId].tCryTaskMonPtr1 = (u32)(mon) >> 0x10; + gTasks[taskId].tCryTaskMonPtr2 = (u32)(mon); + gTasks[taskId].tCryTaskState = 0; + } + + StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[sprite->sBattler]], 1); + +/* + if (GetBattlerSide(sprite->sBattler) == B_SIDE_OPPONENT) + gSprites[gBattlerSpriteIds[sprite->sBattler]].callback = sub_8039B58; + else + gSprites[gBattlerSpriteIds[sprite->sBattler]].callback = sub_8039E44; +*/ + + AnimateSprite(&gSprites[gBattlerSpriteIds[sprite->sBattler]]); + gSprites[gBattlerSpriteIds[sprite->sBattler]].data[1] = 0x1000; +} + +#undef tCryTaskSpecies +#undef tCryTaskPan +#undef tCryTaskWantedCry +#undef tCryTaskBattler +#undef tCryTaskMonSpriteId +#undef tCryTaskMonPtr1 +#undef tCryTaskMonPtr2 +#undef tCryTaskFrames +#undef tCryTaskState + +static void sub_804B484(struct Sprite *sprite) +{ + sprite->animPaused = TRUE; + sprite->callback = sub_804B5C8; + sprite->data[3] = 0; + sprite->data[4] = 0; + sprite->data[5] = 0; +} + +static void HandleBallAnimEnd(struct Sprite *sprite) +{ + bool8 affineAnimEnded = FALSE; + u8 battlerId = sprite->sBattler; + + gSprites[gBattlerSpriteIds[battlerId]].invisible = FALSE; + if (sprite->animEnded) + sprite->invisible = TRUE; + if (gSprites[gBattlerSpriteIds[battlerId]].affineAnimEnded) + { + StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[battlerId]], 0); + affineAnimEnded = TRUE; + } + else + { + gSprites[gBattlerSpriteIds[battlerId]].data[1] -= 288; + gSprites[gBattlerSpriteIds[battlerId]].pos2.y = gSprites[gBattlerSpriteIds[battlerId]].data[1] >> 8; + } + if (sprite->animEnded && affineAnimEnded) + { + s32 i, doneBattlers; + + gSprites[gBattlerSpriteIds[battlerId]].pos2.y = 0; + gDoingBattleAnim = FALSE; + gBattleSpritesDataPtr->healthBoxesData[battlerId].ballAnimActive = 0; + FreeSpriteOamMatrix(sprite); + DestroySprite(sprite); + + for (doneBattlers = 0, i = 0; i < MAX_BATTLERS_COUNT; i++) + { + if (gBattleSpritesDataPtr->healthBoxesData[i].ballAnimActive == 0) + doneBattlers++; + } + if (doneBattlers == MAX_BATTLERS_COUNT) + { + for (i = 0; i < POKEBALL_COUNT; i++) + FreeBallGfx(i); + } + } +} + +static void sub_804B5C8(struct Sprite *sprite) +{ + u8 battlerId = sprite->sBattler; + + sprite->data[4]++; + if (sprite->data[4] == 40) + { + return; + } + else if (sprite->data[4] == 95) + { + gDoingBattleAnim = FALSE; + m4aMPlayAllStop(); + PlaySE(MUS_FANFA5); + } + else if (sprite->data[4] == 315) + { + FreeOamMatrix(gSprites[gBattlerSpriteIds[sprite->sBattler]].oam.matrixNum); + DestroySprite(&gSprites[gBattlerSpriteIds[sprite->sBattler]]); + DestroySpriteAndFreeResources(sprite); + if (gMain.inBattle) + gBattleSpritesDataPtr->healthBoxesData[battlerId].ballAnimActive = 0; + } +} + +static void SpriteCB_PlayerMonSendOut_1(struct Sprite *sprite) +{ + sprite->data[0] = 25; + sprite->data[2] = GetBattlerSpriteCoord(sprite->sBattler, 2); + sprite->data[4] = GetBattlerSpriteCoord(sprite->sBattler, 3) + 24; + sprite->data[5] = -30; + sprite->oam.affineParam = sprite->sBattler; + InitAnimArcTranslation(sprite); + sprite->callback = SpriteCB_PlayerMonSendOut_2; +} + +#define HIBYTE(x) (((x) >> 8) & 0xFF) + +static void SpriteCB_PlayerMonSendOut_2(struct Sprite *sprite) +{ + u32 r6; + u32 r7; + + if (HIBYTE(sprite->data[7]) >= 35 && HIBYTE(sprite->data[7]) < 80) + { + s16 r4; + + if ((sprite->oam.affineParam & 0xFF00) == 0) + { + r6 = sprite->data[1] & 1; + r7 = sprite->data[2] & 1; + sprite->data[1] = ((sprite->data[1] / 3) & ~1) | r6; + sprite->data[2] = ((sprite->data[2] / 3) & ~1) | r7; + StartSpriteAffineAnim(sprite, 4); + } + r4 = sprite->data[0]; + AnimTranslateLinear(sprite); + sprite->data[7] += sprite->sBattler / 3; + sprite->pos2.y += Sin(HIBYTE(sprite->data[7]), sprite->data[5]); + sprite->oam.affineParam += 0x100; + if ((sprite->oam.affineParam >> 8) % 3 != 0) + sprite->data[0] = r4; + else + sprite->data[0] = r4 - 1; + if (HIBYTE(sprite->data[7]) >= 80) + { + r6 = sprite->data[1] & 1; + r7 = sprite->data[2] & 1; + sprite->data[1] = ((sprite->data[1] * 3) & ~1) | r6; + sprite->data[2] = ((sprite->data[2] * 3) & ~1) | r7; + } + } + else + { + if (TranslateAnimHorizontalArc(sprite)) + { + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + sprite->sBattler = sprite->oam.affineParam & 0xFF; + sprite->data[0] = 0; + + if (IsDoubleBattle() && gBattleSpritesDataPtr->animationData->field_9_x1 + && sprite->sBattler == GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT)) + sprite->callback = SpriteCB_ReleaseMon2FromBall; + else + sprite->callback = SpriteCB_ReleaseMonFromBall; + + StartSpriteAffineAnim(sprite, 0); + } + } +} + +static void SpriteCB_ReleaseMon2FromBall(struct Sprite *sprite) +{ + if (sprite->data[0]++ > 24) + { + sprite->data[0] = 0; + sprite->callback = SpriteCB_ReleaseMonFromBall; + } +} + +static void SpriteCB_OpponentMonSendOut(struct Sprite *sprite) +{ + sprite->data[0]++; + if (sprite->data[0] > 15) + { + sprite->data[0] = 0; + if (IsDoubleBattle() && gBattleSpritesDataPtr->animationData->field_9_x1 + && sprite->sBattler == GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT)) + sprite->callback = SpriteCB_ReleaseMon2FromBall; + else + sprite->callback = SpriteCB_ReleaseMonFromBall; + } +} + +#undef sBattler + +static u8 LaunchBallStarsTaskForPokeball(u8 x, u8 y, u8 kindOfStars, u8 d) +{ + return LaunchBallStarsTask(x, y, kindOfStars, d, BALL_POKE); +} + +static u8 LaunchBallFadeMonTaskForPokeball(bool8 unFadeLater, u8 battlerId, u32 arg2) +{ + return LaunchBallFadeMonTask(unFadeLater, battlerId, arg2, BALL_POKE); +} + +void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 battlerId, u8 x, u8 y, u8 oamPriority, u8 subpriortiy, u8 g, u32 h) +{ + u8 spriteId; + + LoadCompressedSpriteSheetUsingHeap(&gBallSpriteSheets[0]); + LoadCompressedSpritePaletteUsingHeap(&gBallSpritePalettes[0]); + spriteId = CreateSprite(&gBallSpriteTemplates[0], x, y, subpriortiy); + + gSprites[spriteId].data[0] = monSpriteId; + gSprites[spriteId].data[5] = gSprites[monSpriteId].pos1.x; + gSprites[spriteId].data[6] = gSprites[monSpriteId].pos1.y; + + gSprites[monSpriteId].pos1.x = x; + gSprites[monSpriteId].pos1.y = y; + //gSprites[monSpriteId].data[7] = species; + + gSprites[spriteId].data[1] = g; + gSprites[spriteId].data[2] = battlerId; + gSprites[spriteId].data[3] = h; + gSprites[spriteId].data[4] = h >> 0x10; + gSprites[spriteId].oam.priority = oamPriority; + gSprites[spriteId].callback = sub_804B9E8; + + gSprites[monSpriteId].invisible = TRUE; +} + +static void sub_804B9E8(struct Sprite *sprite) +{ + if (sprite->data[1] == 0) + { + u8 r5; + u8 r7 = sprite->data[0]; + u8 battlerId = sprite->data[2]; + u32 r4 = (u16)sprite->data[3] | ((u16)sprite->data[4] << 16); + + if (sprite->subpriority != 0) + r5 = sprite->subpriority - 1; + else + r5 = 0; + + StartSpriteAnim(sprite, 1); + LaunchBallStarsTaskForPokeball(sprite->pos1.x, sprite->pos1.y - 5, sprite->oam.priority, r5); + sprite->data[1] = LaunchBallFadeMonTaskForPokeball(1, battlerId, r4); + sprite->callback = sub_804BAA4; + gSprites[r7].invisible = FALSE; + StartSpriteAffineAnim(&gSprites[r7], 1); + AnimateSprite(&gSprites[r7]); + gSprites[r7].data[1] = 0x1000; + sprite->data[7] = 0; + } + else + { + sprite->data[1]--; + } +} + +static void sub_804BAA4(struct Sprite *sprite) +{ + bool8 r12 = FALSE; + bool8 r6 = FALSE; + u8 monSpriteId = sprite->data[0]; + u16 var1; + u16 var2; + + if (sprite->animEnded) + sprite->invisible = TRUE; + if (gSprites[monSpriteId].affineAnimEnded) + { + StartSpriteAffineAnim(&gSprites[monSpriteId], 0); + r12 = TRUE; + } + var1 = (sprite->data[5] - sprite->pos1.x) * sprite->data[7] / 128 + sprite->pos1.x; + var2 = (sprite->data[6] - sprite->pos1.y) * sprite->data[7] / 128 + sprite->pos1.y; + gSprites[monSpriteId].pos1.x = var1; + gSprites[monSpriteId].pos1.y = var2; + if (sprite->data[7] < 128) + { + s16 sine = -(gSineTable[(u8)sprite->data[7]] / 8); + + sprite->data[7] += 4; + gSprites[monSpriteId].pos2.x = sine; + gSprites[monSpriteId].pos2.y = sine; + } + else + { + gSprites[monSpriteId].pos1.x = sprite->data[5]; + gSprites[monSpriteId].pos1.y = sprite->data[6]; + gSprites[monSpriteId].pos2.x = 0; + gSprites[monSpriteId].pos2.y = 0; + r6 = TRUE; + } + if (sprite->animEnded && r12 && r6) + { + if (gSprites[monSpriteId].data[7] == SPECIES_EGG) + DoMonFrontSpriteAnimation(&gSprites[monSpriteId], gSprites[monSpriteId].data[7], TRUE, 0); + else + DoMonFrontSpriteAnimation(&gSprites[monSpriteId], gSprites[monSpriteId].data[7], FALSE, 0); + + DestroySpriteAndFreeResources(sprite); + } +} + +u8 CreateTradePokeballSprite(u8 a, u8 b, u8 x, u8 y, u8 oamPriority, u8 subPriority, u8 g, u32 h) +{ + u8 spriteId; + + LoadCompressedSpriteSheetUsingHeap(&gBallSpriteSheets[0]); + LoadCompressedSpritePaletteUsingHeap(&gBallSpritePalettes[0]); + spriteId = CreateSprite(&gBallSpriteTemplates[0], x, y, subPriority); + gSprites[spriteId].data[0] = a; + gSprites[spriteId].data[1] = g; + gSprites[spriteId].data[2] = b; + gSprites[spriteId].data[3] = h; + gSprites[spriteId].data[4] = h >> 16; + gSprites[spriteId].oam.priority = oamPriority; + gSprites[spriteId].callback = sub_804BC50; + return spriteId; +} + +static void sub_804BC50(struct Sprite *sprite) +{ + if (sprite->data[1] == 0) + { + u8 r6; + u8 r7 = sprite->data[0]; + u8 r8 = sprite->data[2]; + u32 r5 = (u16)sprite->data[3] | ((u16)sprite->data[4] << 16); + + if (sprite->subpriority != 0) + r6 = sprite->subpriority - 1; + else + r6 = 0; + + StartSpriteAnim(sprite, 1); + LaunchBallStarsTaskForPokeball(sprite->pos1.x, sprite->pos1.y - 5, sprite->oam.priority, r6); + sprite->data[1] = LaunchBallFadeMonTaskForPokeball(1, r8, r5); + sprite->callback = sub_804BCF8; + StartSpriteAffineAnim(&gSprites[r7], 2); + AnimateSprite(&gSprites[r7]); + gSprites[r7].data[1] = 0; + } + else + { + sprite->data[1]--; + } +} + +static void sub_804BCF8(struct Sprite *sprite) +{ + u8 r1; + + sprite->data[5]++; + if (sprite->data[5] == 11) + PlaySE(SE_SUIKOMU); + r1 = sprite->data[0]; + if (gSprites[r1].affineAnimEnded) + { + StartSpriteAnim(sprite, 2); + gSprites[r1].invisible = TRUE; + sprite->data[5] = 0; + sprite->callback = sub_804BD6C; + } + else + { + gSprites[r1].data[1] += 96; + gSprites[r1].pos2.y = -gSprites[r1].data[1] >> 8; + } +} + +static void sub_804BD6C(struct Sprite *sprite) +{ + if (sprite->animEnded) + sprite->callback = SpriteCallbackDummy; +} + +static void DestroySpriteAndFreeResources2(struct Sprite *sprite) +{ + DestroySpriteAndFreeResources(sprite); +} + +void sub_804BD94(u8 battlerId) +{ + struct Sprite *healthboxSprite = &gSprites[gHealthboxSpriteIds[battlerId]]; + + healthboxSprite->data[0] = 5; + healthboxSprite->data[1] = 0; + healthboxSprite->pos2.x = 0x73; + healthboxSprite->pos2.y = 0; + healthboxSprite->callback = sub_804BE48; + if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) + { + healthboxSprite->data[0] = -healthboxSprite->data[0]; + healthboxSprite->data[1] = -healthboxSprite->data[1]; + healthboxSprite->pos2.x = -healthboxSprite->pos2.x; + healthboxSprite->pos2.y = -healthboxSprite->pos2.y; + } + gSprites[healthboxSprite->data[5]].callback(&gSprites[healthboxSprite->data[5]]); + if (GetBattlerPosition(battlerId) == B_POSITION_PLAYER_RIGHT) + healthboxSprite->callback = sub_804BE24; +} + +static void sub_804BE24(struct Sprite *sprite) +{ + sprite->data[1]++; + if (sprite->data[1] == 20) + { + sprite->data[1] = 0; + sprite->callback = sub_804BE48; + } +} + +static void sub_804BE48(struct Sprite *sprite) +{ + sprite->pos2.x -= sprite->data[0]; + sprite->pos2.y -= sprite->data[1]; + if (sprite->pos2.x == 0 && sprite->pos2.y == 0) + sprite->callback = SpriteCallbackDummy; +} + +void DoHitAnimHealthboxEffect(u8 battlerId) +{ + u8 spriteId; + + spriteId = CreateInvisibleSpriteWithCallback(SpriteCB_HitAnimHealthoxEffect); + gSprites[spriteId].data[0] = 1; + gSprites[spriteId].data[1] = gHealthboxSpriteIds[battlerId]; + gSprites[spriteId].callback = SpriteCB_HitAnimHealthoxEffect; +} + +static void SpriteCB_HitAnimHealthoxEffect(struct Sprite *sprite) +{ + u8 r1 = sprite->data[1]; + + gSprites[r1].pos2.y = sprite->data[0]; + sprite->data[0] = -sprite->data[0]; + sprite->data[2]++; + if (sprite->data[2] == 21) + { + gSprites[r1].pos2.x = 0; + gSprites[r1].pos2.y = 0; + DestroySprite(sprite); + } +} + +void LoadBallGfx(u8 ballId) +{ + u16 var; + + if (GetSpriteTileStartByTag(gBallSpriteSheets[ballId].tag) == 0xFFFF) + { + LoadCompressedSpriteSheetUsingHeap(&gBallSpriteSheets[ballId]); + LoadCompressedSpritePaletteUsingHeap(&gBallSpritePalettes[ballId]); + } + switch (ballId) + { + case BALL_DIVE: + case BALL_LUXURY: + case BALL_PREMIER: + break; + default: + var = GetSpriteTileStartByTag(gBallSpriteSheets[ballId].tag); + LZDecompressVram(gOpenPokeballGfx, (void *)(VRAM + 0x10100 + var * 32)); + break; + } +} + +void FreeBallGfx(u8 ballId) +{ + FreeSpriteTilesByTag(gBallSpriteSheets[ballId].tag); + FreeSpritePaletteByTag(gBallSpritePalettes[ballId].tag); +} + +static u16 GetBattlerPokeballItemId(u8 battlerId) +{ + if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) + return GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_POKEBALL); + else + return GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_POKEBALL); +} + -- cgit v1.2.3 From d81a67ea2d4486827e0cb2c066a8d7ae4682ec27 Mon Sep 17 00:00:00 2001 From: Evan Date: Thu, 28 Nov 2019 11:04:49 -0500 Subject: fix nonmatchings --- src/sea_cottage_special_anim.c | 229 +++------------------------------- src/shop.c | 272 ++++++++++++----------------------------- 2 files changed, 96 insertions(+), 405 deletions(-) (limited to 'src') diff --git a/src/sea_cottage_special_anim.c b/src/sea_cottage_special_anim.c index bd69a120a..18a8da234 100644 --- a/src/sea_cottage_special_anim.c +++ b/src/sea_cottage_special_anim.c @@ -7,14 +7,9 @@ #include "field_map_obj.h" #include "field_camera.h" -#define t0 data[0] -#define tX data[4] -#define tY data[5] -#define tListTaskId data[7] - static EWRAM_DATA u8 gUnknown_2039984 = 0; -static void sub_809C1D8(u8 taskId, const u16* a1, u16 a2); +static void sub_809C1D8(u8 taskId, const s16 *a1, u16 a2); static void sub_809C334(u8 taskId); static void sub_809C500(u8 taskId); static void sub_809C640(u8 taskId); @@ -28,17 +23,14 @@ static const u16 gUnknown_83DF0F2[] = {0x02e4, 0x0317, 0x0315}; static const u16 gUnknown_83DF0F8[] = {0x02eb, 0x031e, 0x031c}; // Functions -#ifdef NONMATCHING -// Couldn't get the registers to match. Hard to know where to fix since I'm unsure what the variables are for. -static void sub_809C1D8(u8 taskId, const u16* a1, u16 a2) +static void sub_809C1D8(u8 taskId, const s16 *a1, u16 a2) { - s16 v1, v2, v3; + s16 r5, r3, r4; s16 i, j; - const s16* v4; - v1 = gTasks[taskId].data[4] - 1; - v2 = gTasks[taskId].data[5] - 1; - v3 = gTasks[taskId].data[1]; + r5 = gTasks[taskId].data[4] - 1; + r3 = gTasks[taskId].data[5] - 1; + r4 = gTasks[taskId].data[1]; if (gTasks[taskId].data[2] == 0) { @@ -46,13 +38,14 @@ static void sub_809C1D8(u8 taskId, const u16* a1, u16 a2) { for (j = 0; j < 3; j++) { - v4 = &a1[v3]; - if (MapGridGetMetatileIdAt(v1 + j, v2 + i) == v4[0]) + s32 id = MapGridGetMetatileIdAt(r5 + j, r3 + i); + + if (a1[r4] == (s16)id) { - if (v3 != 2) - MapGridSetMetatileIdAt(v1 + j, v2 + i, a2 | v4[1]); + if (r4 != 2) + MapGridSetMetatileIdAt(r5 + j, r3 + i, a2 | a1[r4 + 1]); else - MapGridSetMetatileIdAt(v1 + j, v2 + i, a2 | v4[0]); + MapGridSetMetatileIdAt(r5 + j, r3 + i, a2 | a1[0]); } } } @@ -63,201 +56,19 @@ static void sub_809C1D8(u8 taskId, const u16* a1, u16 a2) { for (j = 0; j < 3; j++) { - if (a1[2 - v3] == MapGridGetMetatileIdAt(v1 + j, v2 + i)) + s32 id = MapGridGetMetatileIdAt(r5 + j, r3 + i); + + if (a1[2 - r4] == (s16)id) { - if (v3 != 2) - MapGridSetMetatileIdAt(v1 + j, v2 + i, a2 | a1[1 - v3]); + if (r4 != 2) + MapGridSetMetatileIdAt(r5 + j, r3 + i, a2 | a1[1 - r4]); else - MapGridSetMetatileIdAt(v1 + j, v2 + i, a2 | a1[2]); + MapGridSetMetatileIdAt(r5 + j, r3 + i, a2 | a1[2]); } } } } } -#else -NAKED -void sub_809C1D8(u8 taskId, const u16* a1, u16 a2) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tmov r7, r10\n" - "\tmov r6, r9\n" - "\tmov r5, r8\n" - "\tpush {r5-r7}\n" - "\tsub sp, 0x10\n" - "\tmov r9, r1\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tlsls r2, 16\n" - "\tlsrs r2, 16\n" - "\tmov r10, r2\n" - "\tldr r2, _0809C26C @ =gTasks\n" - "\tlsls r1, r0, 2\n" - "\tadds r1, r0\n" - "\tlsls r1, 3\n" - "\tadds r1, r2\n" - "\tldrh r0, [r1, 0x10]\n" - "\tsubs r0, 0x1\n" - "\tlsls r0, 16\n" - "\tlsrs r5, r0, 16\n" - "\tldrh r0, [r1, 0x12]\n" - "\tsubs r0, 0x1\n" - "\tlsls r0, 16\n" - "\tlsrs r3, r0, 16\n" - "\tldrh r4, [r1, 0xA]\n" - "\tmovs r2, 0xC\n" - "\tldrsh r0, [r1, r2]\n" - "\tcmp r0, 0\n" - "\tbne _0809C29C\n" - "\tmovs r2, 0\n" - "\tlsls r5, 16\n" - "\tstr r5, [sp, 0xC]\n" - "\tlsls r0, r3, 16\n" - "\tlsls r1, r4, 16\n" - "\tasrs r0, 16\n" - "\tstr r0, [sp]\n" - "\tasrs r1, 16\n" - "\tstr r1, [sp, 0x4]\n" - "\tlsls r0, r1, 1\n" - "\tmov r1, r9\n" - "\tadds r7, r0, r1\n" - "_0809C22C:\n" - "\tmovs r4, 0\n" - "\tlsls r2, 16\n" - "\tmov r8, r2\n" - "\tasrs r0, r2, 16\n" - "\tldr r2, [sp]\n" - "\tadds r6, r2, r0\n" - "_0809C238:\n" - "\tldr r0, [sp, 0xC]\n" - "\tasrs r1, r0, 16\n" - "\tlsls r4, 16\n" - "\tasrs r0, r4, 16\n" - "\tadds r5, r1, r0\n" - "\tadds r0, r5, 0\n" - "\tadds r1, r6, 0\n" - "\tbl MapGridGetMetatileIdAt\n" - "\tmovs r2, 0\n" - "\tldrsh r1, [r7, r2]\n" - "\tlsls r0, 16\n" - "\tasrs r0, 16\n" - "\tcmp r1, r0\n" - "\tbne _0809C280\n" - "\tldr r0, [sp, 0x4]\n" - "\tcmp r0, 0x2\n" - "\tbeq _0809C270\n" - "\tldrh r0, [r7, 0x2]\n" - "\tmov r2, r10\n" - "\torrs r2, r0\n" - "\tadds r0, r5, 0\n" - "\tadds r1, r6, 0\n" - "\tbl MapGridSetMetatileIdAt\n" - "\tb _0809C280\n" - "\t.align 2, 0\n" - "_0809C26C: .4byte gTasks\n" - "_0809C270:\n" - "\tmov r1, r9\n" - "\tldrh r0, [r1]\n" - "\tmov r2, r10\n" - "\torrs r2, r0\n" - "\tadds r0, r5, 0\n" - "\tadds r1, r6, 0\n" - "\tbl MapGridSetMetatileIdAt\n" - "_0809C280:\n" - "\tmovs r2, 0x80\n" - "\tlsls r2, 9\n" - "\tadds r0, r4, r2\n" - "\tlsrs r4, r0, 16\n" - "\tasrs r0, 16\n" - "\tcmp r0, 0x2\n" - "\tble _0809C238\n" - "\tadds r0, r2, 0\n" - "\tadd r0, r8\n" - "\tlsrs r2, r0, 16\n" - "\tasrs r0, 16\n" - "\tcmp r0, 0x2\n" - "\tble _0809C22C\n" - "\tb _0809C324\n" - "_0809C29C:\n" - "\tmovs r2, 0\n" - "\tlsls r5, 16\n" - "\tstr r5, [sp, 0xC]\n" - "\tlsls r0, r3, 16\n" - "\tlsls r1, r4, 16\n" - "\tasrs r0, 16\n" - "\tstr r0, [sp, 0x8]\n" - "\tasrs r7, r1, 16\n" - "_0809C2AC:\n" - "\tmovs r4, 0\n" - "\tlsls r2, 16\n" - "\tmov r8, r2\n" - "\tasrs r0, r2, 16\n" - "\tldr r1, [sp, 0x8]\n" - "\tadds r6, r1, r0\n" - "_0809C2B8:\n" - "\tldr r2, [sp, 0xC]\n" - "\tasrs r1, r2, 16\n" - "\tlsls r4, 16\n" - "\tasrs r0, r4, 16\n" - "\tadds r5, r1, r0\n" - "\tadds r0, r5, 0\n" - "\tadds r1, r6, 0\n" - "\tbl MapGridGetMetatileIdAt\n" - "\tmovs r1, 0x2\n" - "\tsubs r1, r7\n" - "\tlsls r1, 1\n" - "\tadd r1, r9\n" - "\tmovs r2, 0\n" - "\tldrsh r1, [r1, r2]\n" - "\tlsls r0, 16\n" - "\tasrs r0, 16\n" - "\tcmp r1, r0\n" - "\tbne _0809C30A\n" - "\tcmp r7, 0x2\n" - "\tbeq _0809C2FA\n" - "\tmovs r0, 0x1\n" - "\tsubs r0, r7\n" - "\tlsls r0, 1\n" - "\tadd r0, r9\n" - "\tldrh r0, [r0]\n" - "\tmov r2, r10\n" - "\torrs r2, r0\n" - "\tadds r0, r5, 0\n" - "\tadds r1, r6, 0\n" - "\tbl MapGridSetMetatileIdAt\n" - "\tb _0809C30A\n" - "_0809C2FA:\n" - "\tmov r1, r9\n" - "\tldrh r0, [r1, 0x4]\n" - "\tmov r2, r10\n" - "\torrs r2, r0\n" - "\tadds r0, r5, 0\n" - "\tadds r1, r6, 0\n" - "\tbl MapGridSetMetatileIdAt\n" - "_0809C30A:\n" - "\tmovs r2, 0x80\n" - "\tlsls r2, 9\n" - "\tadds r0, r4, r2\n" - "\tlsrs r4, r0, 16\n" - "\tasrs r0, 16\n" - "\tcmp r0, 0x2\n" - "\tble _0809C2B8\n" - "\tadds r0, r2, 0\n" - "\tadd r0, r8\n" - "\tlsrs r2, r0, 16\n" - "\tasrs r0, 16\n" - "\tcmp r0, 0x2\n" - "\tble _0809C2AC\n" - "_0809C324:\n" - "\tadd sp, 0x10\n" - "\tpop {r3-r5}\n" - "\tmov r8, r3\n" - "\tmov r9, r4\n" - "\tmov r10, r5\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0\n"); -} -#endif static void sub_809C334(u8 taskId) { @@ -308,8 +119,8 @@ static u8 sub_809C3FC(u16 a0) taskId = CreateTask(sub_809C334, 0); data = gTasks[taskId].data; - PlayerGetDestCoords(&tX, &tY); - t0 = 0; + PlayerGetDestCoords(&data[4], &data[5]); + data[0] = 0; data[1] = 0; data[2] = a0; sub_809C334(taskId); diff --git a/src/shop.c b/src/shop.c index 982202da2..a80cc76d7 100644 --- a/src/shop.c +++ b/src/shop.c @@ -87,13 +87,7 @@ struct MartHistory /*0x09*/ u8 unk9; /*0x0A*/ u8 unkA; /*0x0B*/ u8 unkB; - /*0x0C*/ u16 unkC; - /*0x0E*/ u8 unkE[6]; - /*0x14*/ u8 unk14; - /*0x15*/ u8 unk15; - /*0x16*/ u8 unk16; - /*0x17*/ u8 unk17; -}; /* size = 0x18 */ +}; /* size = 12 */ static EWRAM_DATA s16 sViewportMapObjects[MAP_OBJECTS_COUNT][4] = {0}; EWRAM_DATA struct ShopData gShopData = {0}; @@ -104,11 +98,11 @@ EWRAM_DATA u16 (*gShopTilemapBuffer3)[0x400] = {0}; EWRAM_DATA u16 (*gShopTilemapBuffer4)[0x400] = {0}; EWRAM_DATA struct ListMenuItem *sShopMenuListMenu = {0}; static EWRAM_DATA u8 (*sShopMenuItemStrings)[13] = {0}; -EWRAM_DATA struct MartHistory gShopMenuHistory = {0}; +EWRAM_DATA struct MartHistory gShopMenuHistory[2] = {0}; //Function Declarations static u8 CreateShopMenu(u8 a0); -static bool8 GetMartTypeFromItemList(bool32 a0); +static u8 GetMartTypeFromItemList(u32 a0); static void SetShopItemsForSale(const u16 *items); static void SetShopMenuCallback(MainCallback callback); static void Task_ShopMenu(u8 taskId); @@ -230,7 +224,7 @@ static const struct BgTemplate sShopBuyMenuBgTemplates[4] = // Functions static u8 CreateShopMenu(u8 a0) { - gShopData.martType = GetMartTypeFromItemList(a0) & 0xF; + gShopData.martType = GetMartTypeFromItemList(a0); gShopData.selectedRow = 0; if (ContextNpcGetTextColor() == 0) gShopData.unk16_4 = 4; @@ -246,56 +240,35 @@ static u8 CreateShopMenu(u8 a0) return CreateTask(Task_ShopMenu, 8); } -static bool8 GetMartTypeFromItemList(bool32 a0) +static u8 GetMartTypeFromItemList(u32 a0) { u16 i; if (a0) - return (u8)a0; - goto MAIN; + return a0; - RETURN_1: - return 1; - - MAIN: - i = 0; - if (i >= gShopData.itemCount) - goto RETURN_0; - else if (gShopData.itemList[0] == 0) - goto RETURN_0; - - while (gShopData.itemList[i] != 0) - { + for (i = 0; i < gShopData.itemCount && gShopData.itemList[i] != 0; i++) + { if (ItemId_GetPocket(gShopData.itemList[i]) == POCKET_TM_CASE) - goto RETURN_1; - ++i; - if (i >= gShopData.itemCount) - goto RETURN_0; - else if (gShopData.itemList[i] == 0) - goto RETURN_0; + return 1; } - - RETURN_0: - return 0; + return 0; } static void SetShopItemsForSale(const u16 *items) { - struct ShopData *mart; - - mart = &gShopData; - mart->itemList = items; - mart->itemCount = 0; - if (mart->itemList[0] == 0) + gShopData.itemList = items; + gShopData.itemCount = 0; + if (gShopData.itemList[0] == 0) return; - do + while (gShopData.itemList[gShopData.itemCount]) { ++gShopData.itemCount; - } while (mart->itemList[gShopData.itemCount]); + } } -static void SetShopMenuCallback(MainCallback callback) +static void SetShopMenuCallback(void (*callback)(void)) { gShopData.callback = callback; } @@ -416,7 +389,7 @@ static void CB2_InitBuyMenu(void) ResetTasks(); ClearScheduledBgCopiesToVram(); ResetItemMenuIconState(); - if ((!(InitShopData())) || (!(BuyMenuBuildListMenuTemplate()))) + if (!(InitShopData()) || !(BuyMenuBuildListMenuTemplate())) return; BuyMenuInitBgs(); FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 0x20, 0x20); @@ -449,27 +422,39 @@ static void CB2_InitBuyMenu(void) static bool8 InitShopData(void) { - gShopTilemapBuffer1 = Alloc(sizeof(*gShopTilemapBuffer1)); + gShopTilemapBuffer1 = Alloc(sizeof(*gShopTilemapBuffer1)); if (gShopTilemapBuffer1 == NULL) - goto CANCEL; + { + BuyMenuFreeMemory(); + SetShopExitCallback(); + return FALSE; + } gShopTilemapBuffer2 = Alloc(sizeof(*gShopTilemapBuffer2)); if (gShopTilemapBuffer2 == NULL) - goto CANCEL; + { + BuyMenuFreeMemory(); + SetShopExitCallback(); + return FALSE; + } gShopTilemapBuffer3 = Alloc(sizeof(*gShopTilemapBuffer3)); if (gShopTilemapBuffer3 == NULL) - goto CANCEL; + { + BuyMenuFreeMemory(); + SetShopExitCallback(); + return FALSE; + } gShopTilemapBuffer4 = Alloc(sizeof(*gShopTilemapBuffer4)); if (gShopTilemapBuffer4 == NULL) - goto CANCEL; + { + BuyMenuFreeMemory(); + SetShopExitCallback(); + return FALSE; + } + return TRUE; - - CANCEL: - BuyMenuFreeMemory(); - SetShopExitCallback(); - return FALSE; } static void BuyMenuInitBgs(void) @@ -540,35 +525,25 @@ static void BuyMenuDrawGraphics(void) ScheduleBgCopyTilemapToVram(3); } -static bool8 BuyMenuBuildListMenuTemplate(void) +bool8 BuyMenuBuildListMenuTemplate(void) { u16 i, v; - struct ListMenuItem **list = &sShopMenuListMenu; - struct ShopData *mart = &gShopData; - - *list = Alloc((gShopData.itemCount + 1) * sizeof(*sShopMenuListMenu)); - if (sShopMenuListMenu == NULL) - goto FREE_MEMORY; - sShopMenuItemStrings = Alloc((gShopData.itemCount + 1) * sizeof(*sShopMenuItemStrings)); - if (sShopMenuItemStrings == NULL) + sShopMenuListMenu = Alloc((gShopData.itemCount + 1) * sizeof(*sShopMenuListMenu)); + if (sShopMenuListMenu == NULL + || (sShopMenuItemStrings = Alloc((gShopData.itemCount + 1) * sizeof(*sShopMenuItemStrings))) == NULL) { - FREE_MEMORY: BuyMenuFreeMemory(); SetShopExitCallback(); return FALSE; } i = 0; - if (i >= mart->itemCount) - goto ADD_CANCEL; - for (i = 0; i < mart->itemCount; i++) + for (i = 0; i < gShopData.itemCount; i++) { - PokeMartWriteNameAndIdAt(&sShopMenuListMenu[i], mart->itemList[i], sShopMenuItemStrings[i]); + PokeMartWriteNameAndIdAt(&sShopMenuListMenu[i], gShopData.itemList[i], sShopMenuItemStrings[i]); } - - ADD_CANCEL: StringCopy(sShopMenuItemStrings[i], gFameCheckerText_Cancel); sShopMenuListMenu[i].label = sShopMenuItemStrings[i]; sShopMenuListMenu[i].index = -2; @@ -801,7 +776,7 @@ static void BuyMenuDrawMapBg(void) static void BuyMenuDrawMapMetatile(s16 x, s16 y, const u16 *src, u8 metatileLayerType) { u16 offset1 = x * 2; - u16 offset2 = ((y << 0x16) + 0x400000) >> 0x10; + u16 offset2 = (y * 64) + 64; switch (metatileLayerType) { @@ -1091,7 +1066,7 @@ static void Task_ExitBuyMenu(u8 taskId) if (!gPaletteFade.active) { - DestroyListMenuTask(tListTaskId, 0, 0); + DestroyListMenuTask(tListTaskId, NULL, NULL); BuyMenuFreeMemory(); SetMainCallback2(CB2_ReturnToField); DestroyTask(taskId); @@ -1106,154 +1081,59 @@ static void nullsub_53(void) { } -#ifdef NONMATCHING -// couldn't get registers to match. It should store an address into r4 (what tmp wants to be), and load/store from there, eg. ldrh r0, [r4,#4]. Which indicates an array inside the MartHistory struct, except data sizes are not consistent. void RecordItemPurchase(u16 item, u16 quantity, u8 a2) { - struct MartHistory *tmp; + struct MartHistory *history; - if (gShopMenuHistory.unkA == a2) + if (gShopMenuHistory[0].unkA == a2) + { + history = &gShopMenuHistory[0]; + } + else if (gShopMenuHistory[1].unkA == a2) { - tmp = &gShopMenuHistory; + history = &gShopMenuHistory[1]; } else { - if (gShopMenuHistory.unk16 == a2) - { - tmp = &gShopMenuHistory + 12; - } + if (gShopMenuHistory[0].unkA == 0) + history = &gShopMenuHistory[0]; else - { - tmp = &gShopMenuHistory + 12; - if (gShopMenuHistory.unkA == 0) - { - tmp = &gShopMenuHistory; - gShopMenuHistory.unkA = a2; - } - } + history = &gShopMenuHistory[1]; + history->unkA = a2; } - if (tmp->unk4 != 0) + if (history->unk4 != 0) { - gShopMenuHistory.unk9 = 1; + history->unk9 = 1; } - gShopMenuHistory.unk4 = item; - if (gShopMenuHistory.unk6 <= 998) + history->unk4 = item; + if (history->unk6 < 999) { - gShopMenuHistory.unk6 += item; - if (item > 999) - gShopMenuHistory.unk6 = 999; + history->unk6 += quantity; + if (history->unk6 > 999) + history->unk6 = 999; } - if (gShopMenuHistory.unk0 < 999998) + if (history->unk0 < 999999) { - gShopMenuHistory.unk0 += ((s16)itemid_get_market_price(item) >> (quantity-1))*quantity; - if (gShopMenuHistory.unk0 > 999999) - gShopMenuHistory.unk0 = 999999; + history->unk0 += (itemid_get_market_price(item) >> (a2 - 1)) * quantity; + if (history->unk0 > 999999) + history->unk0 = 999999; } } -#else -NAKED -void RecordItemPurchase(u16 item, u16 quantity, u8 a2) -{ - asm_unified("\tpush {r4-r6,lr}\n" - "\tlsls r0, 16\n" - "\tlsrs r3, r0, 16\n" - "\tlsls r1, 16\n" - "\tlsrs r6, r1, 16\n" - "\tlsls r2, 24\n" - "\tlsrs r5, r2, 24\n" - "\tldr r1, _0809C0B8 @ =gShopMenuHistory\n" - "\tldrb r2, [r1, 0xA]\n" - "\tcmp r2, r5\n" - "\tbne _0809C0BC\n" - "\tadds r4, r1, 0\n" - "\tb _0809C0D4\n" - "\t.align 2, 0\n" - "_0809C0B8: .4byte gShopMenuHistory\n" - "_0809C0BC:\n" - "\tldrb r0, [r1, 0x16]\n" - "\tcmp r0, r5\n" - "\tbne _0809C0C8\n" - "\tadds r4, r1, 0\n" - "\tadds r4, 0xC\n" - "\tb _0809C0D4\n" - "_0809C0C8:\n" - "\tadds r4, r1, 0\n" - "\tadds r4, 0xC\n" - "\tcmp r2, 0\n" - "\tbne _0809C0D2\n" - "\tadds r4, r1, 0\n" - "_0809C0D2:\n" - "\tstrb r5, [r4, 0xA]\n" - "_0809C0D4:\n" - "\tldrh r0, [r4, 0x4]\n" - "\tcmp r0, 0\n" - "\tbeq _0809C0DE\n" - "\tmovs r0, 0x1\n" - "\tstrb r0, [r4, 0x9]\n" - "_0809C0DE:\n" - "\tstrh r3, [r4, 0x4]\n" - "\tldrh r1, [r4, 0x6]\n" - "\tldr r0, _0809C128 @ =0x000003e6\n" - "\tcmp r1, r0\n" - "\tbhi _0809C0F8\n" - "\tadds r0, r6, r1\n" - "\tstrh r0, [r4, 0x6]\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tldr r1, _0809C12C @ =0x000003e7\n" - "\tcmp r0, r1\n" - "\tbls _0809C0F8\n" - "\tstrh r1, [r4, 0x6]\n" - "_0809C0F8:\n" - "\tldr r1, [r4]\n" - "\tldr r0, _0809C130 @ =0x000f423e\n" - "\tcmp r1, r0\n" - "\tbhi _0809C120\n" - "\tadds r0, r3, 0\n" - "\tbl itemid_get_market_price\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tsubs r1, r5, 0x1\n" - "\tasrs r0, r1\n" - "\tadds r1, r0, 0\n" - "\tmuls r1, r6\n" - "\tldr r0, [r4]\n" - "\tadds r0, r1\n" - "\tstr r0, [r4]\n" - "\tldr r1, _0809C134 @ =0x000f423f\n" - "\tcmp r0, r1\n" - "\tbls _0809C120\n" - "\tstr r1, [r4]\n" - "_0809C120:\n" - "\tpop {r4-r6}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" - "_0809C128: .4byte 0x000003e6\n" - "_0809C12C: .4byte 0x000003e7\n" - "_0809C130: .4byte 0x000f423e\n" - "_0809C134: .4byte 0x000f423f\n"); -} -#endif static void RecordQuestLogItemPurchase(void) { - struct MartHistory *history = &gShopMenuHistory; u16 v; - v = history->unkA; + v = gShopMenuHistory[0].unkA; if (v != 0) - sub_8113550(v + 0x24, (const u16*)history); + sub_8113550(v + 0x24, (const u16 *)&gShopMenuHistory[0]); - v = history->unk16; + v = gShopMenuHistory[1].unkA; if (v != 0) - { - v += 0x24; - sub_8113550(v, (const u16*)&history->unkC); - } + sub_8113550(v + 0x24, (const u16 *)&gShopMenuHistory[1]); } void CreatePokemartMenu(const u16 *itemsForSale) @@ -1262,9 +1142,9 @@ void CreatePokemartMenu(const u16 *itemsForSale) CreateShopMenu(MART_TYPE_REGULAR); SetShopMenuCallback(EnableBothScriptContexts); nullsub_53(); - memset(&gShopMenuHistory, 0, sizeof(struct MartHistory)); - gShopMenuHistory.unk8 = gMapHeader.regionMapSectionId; - gShopMenuHistory.unk14 = gMapHeader.regionMapSectionId; + memset(&gShopMenuHistory, 0, sizeof(gShopMenuHistory)); + gShopMenuHistory[0].unk8 = gMapHeader.regionMapSectionId; + gShopMenuHistory[1].unk8 = gMapHeader.regionMapSectionId; } void CreateDecorationShop1Menu(const u16 *itemsForSale) -- cgit v1.2.3 From 52013cf052e9398987f76cf115ca08091e16288d Mon Sep 17 00:00:00 2001 From: Evan Date: Thu, 28 Nov 2019 11:13:26 -0500 Subject: remove errors --- src/pokeball.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/pokeball.c b/src/pokeball.c index cbba77bb2..0626b4714 100644 --- a/src/pokeball.c +++ b/src/pokeball.c @@ -27,7 +27,7 @@ // Function Declarations static void Task_DoPokeballSendOutAnim(u8 taskId); -//static void SpriteCB_TestBallThrow(struct Sprite *sprite); +static void SpriteCB_TestBallThrow(struct Sprite *sprite); static void sub_804AC88(struct Sprite *sprite); static void sub_804AC94(struct Sprite *sprite); static void sub_804AD00(struct Sprite *sprite); @@ -62,6 +62,7 @@ extern const struct SpriteTemplate gUnknown_82606F4[]; extern const struct CompressedSpriteSheet gBallSpriteSheets[POKEBALL_COUNT]; extern const struct CompressedSpritePalette gBallSpritePalettes[POKEBALL_COUNT]; +extern const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT]; // Functions u8 DoPokeballSendOutAnimation(s16 pan, u8 kindOfThrow) @@ -430,8 +431,7 @@ static void Task_DoPokeballSendOutAnim(u8 taskId) } #endif -//static -void SpriteCB_TestBallThrow(struct Sprite *sprite) +static void SpriteCB_TestBallThrow(struct Sprite *sprite) { if (TranslateAnimHorizontalArc(sprite)) { @@ -1112,11 +1112,12 @@ static void sub_804BAA4(struct Sprite *sprite) } if (sprite->animEnded && r12 && r6) { - if (gSprites[monSpriteId].data[7] == SPECIES_EGG) + /* + if (gSprites[monSpriteId].data[7] == SPECIES_EGG) DoMonFrontSpriteAnimation(&gSprites[monSpriteId], gSprites[monSpriteId].data[7], TRUE, 0); else DoMonFrontSpriteAnimation(&gSprites[monSpriteId], gSprites[monSpriteId].data[7], FALSE, 0); - + */ DestroySpriteAndFreeResources(sprite); } } -- cgit v1.2.3 From fe6db41f2b4b31d47c3b7e5eaa2e970379f224b1 Mon Sep 17 00:00:00 2001 From: Evan Date: Thu, 28 Nov 2019 11:15:24 -0500 Subject: fix formatting --- src/shop.c | 48 ++++++++++++++++++++++++------------------------ 1 file changed, 24 insertions(+), 24 deletions(-) (limited to 'src') diff --git a/src/shop.c b/src/shop.c index a80cc76d7..4a0ac7fb1 100644 --- a/src/shop.c +++ b/src/shop.c @@ -248,11 +248,11 @@ static u8 GetMartTypeFromItemList(u32 a0) return a0; for (i = 0; i < gShopData.itemCount && gShopData.itemList[i] != 0; i++) - { + { if (ItemId_GetPocket(gShopData.itemList[i]) == POCKET_TM_CASE) return 1; } - return 0; + return 0; } static void SetShopItemsForSale(const u16 *items) @@ -422,38 +422,38 @@ static void CB2_InitBuyMenu(void) static bool8 InitShopData(void) { - gShopTilemapBuffer1 = Alloc(sizeof(*gShopTilemapBuffer1)); + gShopTilemapBuffer1 = Alloc(sizeof(*gShopTilemapBuffer1)); if (gShopTilemapBuffer1 == NULL) - { - BuyMenuFreeMemory(); - SetShopExitCallback(); - return FALSE; - } + { + BuyMenuFreeMemory(); + SetShopExitCallback(); + return FALSE; + } gShopTilemapBuffer2 = Alloc(sizeof(*gShopTilemapBuffer2)); if (gShopTilemapBuffer2 == NULL) - { - BuyMenuFreeMemory(); - SetShopExitCallback(); - return FALSE; - } + { + BuyMenuFreeMemory(); + SetShopExitCallback(); + return FALSE; + } gShopTilemapBuffer3 = Alloc(sizeof(*gShopTilemapBuffer3)); if (gShopTilemapBuffer3 == NULL) - { - BuyMenuFreeMemory(); - SetShopExitCallback(); - return FALSE; - } + { + BuyMenuFreeMemory(); + SetShopExitCallback(); + return FALSE; + } gShopTilemapBuffer4 = Alloc(sizeof(*gShopTilemapBuffer4)); if (gShopTilemapBuffer4 == NULL) - { - BuyMenuFreeMemory(); - SetShopExitCallback(); - return FALSE; - } - + { + BuyMenuFreeMemory(); + SetShopExitCallback(); + return FALSE; + } + return TRUE; } -- cgit v1.2.3 From b62688270824fc245ce99822ac3b8c46732a71b8 Mon Sep 17 00:00:00 2001 From: Evan Date: Sat, 30 Nov 2019 10:50:58 -0500 Subject: all matching except Task_DoPokeballSendOutAnim --- src/pokeball.c | 907 ++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 574 insertions(+), 333 deletions(-) (limited to 'src') diff --git a/src/pokeball.c b/src/pokeball.c index 0626b4714..171e1beb9 100644 --- a/src/pokeball.c +++ b/src/pokeball.c @@ -25,6 +25,19 @@ #define sBattler data[6] +#define GFX_TAG_POKE_BALL 55000 +#define GFX_TAG_GREAT_BALL 55001 +#define GFX_TAG_SAFARI_BALL 55002 +#define GFX_TAG_ULTRA_BALL 55003 +#define GFX_TAG_MASTER_BALL 55004 +#define GFX_TAG_NET_BALL 55005 +#define GFX_TAG_DIVE_BALL 55006 +#define GFX_TAG_NEST_BALL 55007 +#define GFX_TAG_REPEAT_BALL 55008 +#define GFX_TAG_TIMER_BALL 55009 +#define GFX_TAG_LUXURY_BALL 55010 +#define GFX_TAG_PREMIER_BALL 55011 + // Function Declarations static void Task_DoPokeballSendOutAnim(u8 taskId); static void SpriteCB_TestBallThrow(struct Sprite *sprite); @@ -51,24 +64,272 @@ static void sub_804BAA4(struct Sprite *sprite); static void sub_804BC50(struct Sprite *sprite); static void sub_804BCF8(struct Sprite *sprite); static void sub_804BD6C(struct Sprite *sprite); -static void DestroySpriteAndFreeResources2(struct Sprite *sprite); static void sub_804BE24(struct Sprite *sprite); static void sub_804BE48(struct Sprite *sprite); static void SpriteCB_HitAnimHealthoxEffect(struct Sprite *sprite); static u16 GetBattlerPokeballItemId(u8 battlerId); // Data -extern const struct SpriteTemplate gUnknown_82606F4[]; +const struct CompressedSpriteSheet gBallSpriteSheets[POKEBALL_COUNT] = +{ + {gInterfaceGfx_PokeBall, 384, GFX_TAG_POKE_BALL}, + {gInterfaceGfx_GreatBall, 384, GFX_TAG_GREAT_BALL}, + {gInterfaceGfx_SafariBall, 384, GFX_TAG_SAFARI_BALL}, + {gInterfaceGfx_UltraBall, 384, GFX_TAG_ULTRA_BALL}, + {gInterfaceGfx_MasterBall, 384, GFX_TAG_MASTER_BALL}, + {gInterfaceGfx_NetBall, 384, GFX_TAG_NET_BALL}, + {gInterfaceGfx_DiveBall, 384, GFX_TAG_DIVE_BALL}, + {gInterfaceGfx_NestBall, 384, GFX_TAG_NEST_BALL}, + {gInterfaceGfx_RepeatBall, 384, GFX_TAG_REPEAT_BALL}, + {gInterfaceGfx_TimerBall, 384, GFX_TAG_TIMER_BALL}, + {gInterfaceGfx_LuxuryBall, 384, GFX_TAG_LUXURY_BALL}, + {gInterfaceGfx_PremierBall, 384, GFX_TAG_PREMIER_BALL}, +}; + +const struct CompressedSpritePalette gBallSpritePalettes[POKEBALL_COUNT] = +{ + {gInterfacePal_PokeBall, GFX_TAG_POKE_BALL}, + {gInterfacePal_GreatBall, GFX_TAG_GREAT_BALL}, + {gInterfacePal_SafariBall, GFX_TAG_SAFARI_BALL}, + {gInterfacePal_UltraBall, GFX_TAG_ULTRA_BALL}, + {gInterfacePal_MasterBall, GFX_TAG_MASTER_BALL}, + {gInterfacePal_NetBall, GFX_TAG_NET_BALL}, + {gInterfacePal_DiveBall, GFX_TAG_DIVE_BALL}, + {gInterfacePal_NestBall, GFX_TAG_NEST_BALL}, + {gInterfacePal_RepeatBall, GFX_TAG_REPEAT_BALL}, + {gInterfacePal_TimerBall, GFX_TAG_TIMER_BALL}, + {gInterfacePal_LuxuryBall, GFX_TAG_LUXURY_BALL}, + {gInterfacePal_PremierBall, GFX_TAG_PREMIER_BALL}, +}; + +static const struct OamData sBallOamData = +{ + .y = 0, + .affineMode = 3, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = SPRITE_SHAPE(16x16), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(16x16), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd sBallAnimSeq3[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd sBallAnimSeq5[] = +{ + ANIMCMD_FRAME(4, 1), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd sBallAnimSeq4[] = +{ + ANIMCMD_FRAME(8, 5), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd sBallAnimSeq6[] = +{ + ANIMCMD_FRAME(12, 1), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd sBallAnimSeq0[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd sBallAnimSeq1[] = +{ + ANIMCMD_FRAME(4, 5), + ANIMCMD_FRAME(8, 5), + ANIMCMD_END, +}; -extern const struct CompressedSpriteSheet gBallSpriteSheets[POKEBALL_COUNT]; -extern const struct CompressedSpritePalette gBallSpritePalettes[POKEBALL_COUNT]; -extern const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT]; +static const union AnimCmd sBallAnimSeq2[] = +{ + ANIMCMD_FRAME(4, 5), + ANIMCMD_FRAME(0, 5), + ANIMCMD_END, +}; + +static const union AnimCmd *const sBallAnimSequences[] = +{ + sBallAnimSeq0, + sBallAnimSeq1, + sBallAnimSeq2, + sBallAnimSeq3, + sBallAnimSeq4, + sBallAnimSeq5, + sBallAnimSeq6, +}; + +static const union AffineAnimCmd sBallAffineAnimSeq0[] = +{ + AFFINEANIMCMD_FRAME(0, 0, 0, 1), + AFFINEANIMCMD_JUMP(0), +}; + +static const union AffineAnimCmd sBallAffineAnimSeq1[] = +{ + AFFINEANIMCMD_FRAME(0, 0, -3, 1), + AFFINEANIMCMD_JUMP(0), +}; + +static const union AffineAnimCmd sBallAffineAnimSeq2[] = +{ + AFFINEANIMCMD_FRAME(0, 0, 3, 1), + AFFINEANIMCMD_JUMP(0), +}; + +static const union AffineAnimCmd sBallAffineAnimSeq3[] = +{ + AFFINEANIMCMD_FRAME(256, 256, 0, 0), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd sBallAffineAnimSeq4[] = +{ + AFFINEANIMCMD_FRAME(0, 0, 25, 1), + AFFINEANIMCMD_JUMP(0), +}; + +static const union AffineAnimCmd *const sBallAffineAnimSequences[] = +{ + sBallAffineAnimSeq0, + sBallAffineAnimSeq1, + sBallAffineAnimSeq2, + sBallAffineAnimSeq3, + sBallAffineAnimSeq4, +}; + +const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] = +{ + { + .tileTag = GFX_TAG_POKE_BALL, + .paletteTag = GFX_TAG_POKE_BALL, + .oam = &sBallOamData, + .anims = sBallAnimSequences, + .images = NULL, + .affineAnims = sBallAffineAnimSequences, + .callback = SpriteCB_TestBallThrow, + }, + { + .tileTag = GFX_TAG_GREAT_BALL, + .paletteTag = GFX_TAG_GREAT_BALL, + .oam = &sBallOamData, + .anims = sBallAnimSequences, + .images = NULL, + .affineAnims = sBallAffineAnimSequences, + .callback = SpriteCB_TestBallThrow, + }, + { + .tileTag = GFX_TAG_SAFARI_BALL, + .paletteTag = GFX_TAG_SAFARI_BALL, + .oam = &sBallOamData, + .anims = sBallAnimSequences, + .images = NULL, + .affineAnims = sBallAffineAnimSequences, + .callback = SpriteCB_TestBallThrow, + }, + { + .tileTag = GFX_TAG_ULTRA_BALL, + .paletteTag = GFX_TAG_ULTRA_BALL, + .oam = &sBallOamData, + .anims = sBallAnimSequences, + .images = NULL, + .affineAnims = sBallAffineAnimSequences, + .callback = SpriteCB_TestBallThrow, + }, + { + .tileTag = GFX_TAG_MASTER_BALL, + .paletteTag = GFX_TAG_MASTER_BALL, + .oam = &sBallOamData, + .anims = sBallAnimSequences, + .images = NULL, + .affineAnims = sBallAffineAnimSequences, + .callback = SpriteCB_TestBallThrow, + }, + { + .tileTag = GFX_TAG_NET_BALL, + .paletteTag = GFX_TAG_NET_BALL, + .oam = &sBallOamData, + .anims = sBallAnimSequences, + .images = NULL, + .affineAnims = sBallAffineAnimSequences, + .callback = SpriteCB_TestBallThrow, + }, + { + .tileTag = GFX_TAG_DIVE_BALL, + .paletteTag = GFX_TAG_DIVE_BALL, + .oam = &sBallOamData, + .anims = sBallAnimSequences, + .images = NULL, + .affineAnims = sBallAffineAnimSequences, + .callback = SpriteCB_TestBallThrow, + }, + { + .tileTag = GFX_TAG_NEST_BALL, + .paletteTag = GFX_TAG_NEST_BALL, + .oam = &sBallOamData, + .anims = sBallAnimSequences, + .images = NULL, + .affineAnims = sBallAffineAnimSequences, + .callback = SpriteCB_TestBallThrow, + }, + { + .tileTag = GFX_TAG_REPEAT_BALL, + .paletteTag = GFX_TAG_REPEAT_BALL, + .oam = &sBallOamData, + .anims = sBallAnimSequences, + .images = NULL, + .affineAnims = sBallAffineAnimSequences, + .callback = SpriteCB_TestBallThrow, + }, + { + .tileTag = GFX_TAG_TIMER_BALL, + .paletteTag = GFX_TAG_TIMER_BALL, + .oam = &sBallOamData, + .anims = sBallAnimSequences, + .images = NULL, + .affineAnims = sBallAffineAnimSequences, + .callback = SpriteCB_TestBallThrow, + }, + { + .tileTag = GFX_TAG_LUXURY_BALL, + .paletteTag = GFX_TAG_LUXURY_BALL, + .oam = &sBallOamData, + .anims = sBallAnimSequences, + .images = NULL, + .affineAnims = sBallAffineAnimSequences, + .callback = SpriteCB_TestBallThrow, + }, + { + .tileTag = GFX_TAG_PREMIER_BALL, + .paletteTag = GFX_TAG_PREMIER_BALL, + .oam = &sBallOamData, + .anims = sBallAnimSequences, + .images = NULL, + .affineAnims = sBallAffineAnimSequences, + .callback = SpriteCB_TestBallThrow, + }, +}; // Functions u8 DoPokeballSendOutAnimation(s16 pan, u8 kindOfThrow) { u8 taskId; - + gDoingBattleAnim = TRUE; gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive = 1; taskId = CreateTask(Task_DoPokeballSendOutAnim, 5); @@ -79,6 +340,7 @@ u8 DoPokeballSendOutAnimation(s16 pan, u8 kindOfThrow) } #ifdef NONMATCHING +//gender is an unused variable that still manages to show up in the assembly, can't get temporary variables to make it work. static void Task_DoPokeballSendOutAnim(u8 taskId) { u16 throwCaseId; @@ -86,7 +348,7 @@ static void Task_DoPokeballSendOutAnim(u8 taskId) u16 itemId, ballId; u8 ballSpriteId; bool8 notSendOut = FALSE; - u8 gender; + u8 gender, temp; if (gTasks[taskId].tFrames == 0) { @@ -104,12 +366,14 @@ static void Task_DoPokeballSendOutAnim(u8 taskId) ballId = ItemIdToBallId(itemId); LoadBallGfx(ballId); - if (gBattleTypeFlags & BATTLE_TYPE_LINK) - gender = gLinkPlayers[GetBattlerMultiplayerId(battlerId)].gender; - else - gender = gSaveBlock2Ptr->playerGender; - - ballSpriteId = CreateSprite(&gUnknown_82606F4[ballId], 32, 80, 29); + + // r10 is set to gender byte here and loaded into a temporary variable to be immediately overwritten by an unused variable.. + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + gender = gLinkPlayers[GetBattlerMultiplayerId(battlerId)].gender; + else + gender = gSaveBlock2Ptr->playerGender; + + ballSpriteId = CreateSprite(&gBallSpriteTemplates[ballId], 32, 80, 29); gSprites[ballSpriteId].data[0] = 0x80; gSprites[ballSpriteId].data[1] = 0; gSprites[ballSpriteId].data[7] = throwCaseId; @@ -117,19 +381,19 @@ static void Task_DoPokeballSendOutAnim(u8 taskId) switch (throwCaseId) { case POKEBALL_PLAYER_SENDOUT: - if (gBattleTypeFlags & BATTLE_TYPE_POKEDUDE) - { - gSprites[ballSpriteId].pos1.x = 32; - gSprites[ballSpriteId].pos1.y = 64; - } - else - { - gender == gender; - gSprites[ballSpriteId].pos1.x = 48; - gSprites[ballSpriteId].pos1.y = 70; - } - - gBattlerTarget = battlerId; + if (gBattleTypeFlags & BATTLE_TYPE_POKEDUDE) + { + gSprites[ballSpriteId].pos1.x = 32; + gSprites[ballSpriteId].pos1.y = 64; + } + else + { + temp = gender; //mov r0, r10 (r10 = gender), but this is never actually used + gSprites[ballSpriteId].pos1.x = 48; + gSprites[ballSpriteId].pos1.y = 70; + } + + gBattlerTarget = battlerId; gSprites[ballSpriteId].callback = SpriteCB_PlayerMonSendOut_1; break; case POKEBALL_OPPONENT_SENDOUT: @@ -153,7 +417,7 @@ static void Task_DoPokeballSendOutAnim(u8 taskId) } // this will perform an unused ball throw animation - gSprites[ballSpriteId].data[0] = 0x22; + gSprites[ballSpriteId].data[0] = 34; gSprites[ballSpriteId].data[2] = GetBattlerSpriteCoord(gBattlerTarget, BATTLER_COORD_X); gSprites[ballSpriteId].data[4] = GetBattlerSpriteCoord(gBattlerTarget, BATTLER_COORD_Y) - 16; gSprites[ballSpriteId].data[5] = -40; @@ -167,267 +431,267 @@ static void Task_DoPokeballSendOutAnim(u8 taskId) NAKED static void Task_DoPokeballSendOutAnim(u8 taskId) { - asm_unified("\tpush {r4-r7,lr}\n" - "\tmov r7, r10\n" - "\tmov r6, r9\n" - "\tmov r5, r8\n" - "\tpush {r5-r7}\n" - "\tsub sp, 0x8\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tstr r0, [sp]\n" - "\tmovs r0, 0\n" - "\tstr r0, [sp, 0x4]\n" - "\tldr r1, _0804A9D4 @ =gTasks\n" - "\tldr r2, [sp]\n" - "\tlsls r0, r2, 2\n" - "\tadds r0, r2\n" - "\tlsls r0, 3\n" - "\tadds r1, r0, r1\n" - "\tldrh r2, [r1, 0x8]\n" - "\tmovs r3, 0x8\n" - "\tldrsh r0, [r1, r3]\n" - "\tcmp r0, 0\n" - "\tbne _0804A9D8\n" - "\tadds r0, r2, 0x1\n" - "\tstrh r0, [r1, 0x8]\n" - "\tb _0804ABB8\n" - "\t.align 2, 0\n" - "_0804A9D4: .4byte gTasks\n" - "_0804A9D8:\n" - "\tldrh r0, [r1, 0xC]\n" - "\tmov r9, r0\n" - "\tldrb r6, [r1, 0xE]\n" - "\tadds r0, r6, 0\n" - "\tbl GetBattlerSide\n" - "\tlsls r0, 24\n" - "\tcmp r0, 0\n" - "\tbeq _0804AA04\n" - "\tldr r1, _0804A9FC @ =gBattlerPartyIndexes\n" - "\tlsls r0, r6, 1\n" - "\tadds r0, r1\n" - "\tldrh r1, [r0]\n" - "\tmovs r0, 0x64\n" - "\tmuls r0, r1\n" - "\tldr r1, _0804AA00 @ =gEnemyParty\n" - "\tb _0804AA12\n" - "\t.align 2, 0\n" - "_0804A9FC: .4byte gBattlerPartyIndexes\n" - "_0804AA00: .4byte gEnemyParty\n" - "_0804AA04:\n" - "\tldr r1, _0804AA50 @ =gBattlerPartyIndexes\n" - "\tlsls r0, r6, 1\n" - "\tadds r0, r1\n" - "\tldrh r1, [r0]\n" - "\tmovs r0, 0x64\n" - "\tmuls r0, r1\n" - "\tldr r1, _0804AA54 @ =gPlayerParty\n" - "_0804AA12:\n" - "\tadds r0, r1\n" - "\tmovs r1, 0x26\n" - "\tbl GetMonData\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tbl ItemIdToBallId\n" - "\tlsls r0, 24\n" - "\tlsrs r5, r0, 24\n" - "\tadds r0, r5, 0\n" - "\tbl LoadBallGfx\n" - "\tldr r0, _0804AA58 @ =gBattleTypeFlags\n" - "\tldr r0, [r0]\n" - "\tmovs r1, 0x2\n" - "\tands r0, r1\n" - "\tcmp r0, 0\n" - "\tbeq _0804AA60\n" - "\tldr r4, _0804AA5C @ =gLinkPlayers\n" - "\tadds r0, r6, 0\n" - "\tbl GetBattlerMultiplayerId\n" - "\tlsls r1, r0, 3\n" - "\tsubs r1, r0\n" - "\tlsls r1, 2\n" - "\tadds r1, r4\n" - "\tldrb r1, [r1, 0x13]\n" - "\tmov r10, r1\n" - "\tb _0804AA68\n" - "\t.align 2, 0\n" - "_0804AA50: .4byte gBattlerPartyIndexes\n" - "_0804AA54: .4byte gPlayerParty\n" - "_0804AA58: .4byte gBattleTypeFlags\n" - "_0804AA5C: .4byte gLinkPlayers\n" - "_0804AA60:\n" - "\tldr r0, _0804AAB8 @ =gSaveBlock2Ptr\n" - "\tldr r0, [r0]\n" - "\tldrb r0, [r0, 0x8]\n" - "\tmov r10, r0\n" - "_0804AA68:\n" - "\tlsls r0, r5, 1\n" - "\tadds r0, r5\n" - "\tlsls r0, 3\n" - "\tldr r1, _0804AABC @ =gUnknown_82606F4\n" - "\tadds r0, r1\n" - "\tmovs r1, 0x20\n" - "\tmovs r2, 0x50\n" - "\tmovs r3, 0x1D\n" - "\tbl CreateSprite\n" - "\tlsls r0, 24\n" - "\tlsrs r7, r0, 24\n" - "\tlsls r5, r7, 4\n" - "\tadds r0, r5, r7\n" - "\tlsls r0, 2\n" - "\tmov r8, r0\n" - "\tldr r4, _0804AAC0 @ =gSprites\n" - "\tadd r4, r8\n" - "\tmovs r0, 0x80\n" - "\tstrh r0, [r4, 0x2E]\n" - "\tmovs r1, 0\n" - "\tstrh r1, [r4, 0x30]\n" - "\tmov r2, r9\n" - "\tstrh r2, [r4, 0x3C]\n" - "\tmov r3, r9\n" - "\tcmp r3, 0xFE\n" - "\tbeq _0804AAF8\n" - "\tcmp r3, 0xFF\n" - "\tbne _0804AB38\n" - "\tldr r0, _0804AAC4 @ =gBattleTypeFlags\n" - "\tldr r0, [r0]\n" - "\tmovs r1, 0x80\n" - "\tlsls r1, 9\n" - "\tands r0, r1\n" - "\tcmp r0, 0\n" - "\tbeq _0804AAC8\n" - "\tmovs r5, 0x20\n" - "\tmovs r4, 0x40\n" - "\tb _0804AACE\n" - "\t.align 2, 0\n" - "_0804AAB8: .4byte gSaveBlock2Ptr\n" - "_0804AABC: .4byte gUnknown_82606F4\n" - "_0804AAC0: .4byte gSprites\n" - "_0804AAC4: .4byte gBattleTypeFlags\n" - "_0804AAC8:\n" - "\tmov r0, r10\n" - "\tmovs r5, 0x30\n" - "\tmovs r4, 0x46\n" - "_0804AACE:\n" - "\tldr r0, _0804AAEC @ =gBattlerTarget\n" - "\tstrb r6, [r0]\n" - "\tldr r2, _0804AAF0 @ =gSprites\n" - "\tlsls r3, r7, 4\n" - "\tadds r1, r3, r7\n" - "\tlsls r1, 2\n" - "\tadds r0, r1, r2\n" - "\tstrh r5, [r0, 0x20]\n" - "\tstrh r4, [r0, 0x22]\n" - "\tadds r2, 0x1C\n" - "\tadds r1, r2\n" - "\tldr r0, _0804AAF4 @ =SpriteCB_PlayerMonSendOut_1\n" - "\tstr r0, [r1]\n" - "\tb _0804AB48\n" - "\t.align 2, 0\n" - "_0804AAEC: .4byte gBattlerTarget\n" - "_0804AAF0: .4byte gSprites\n" - "_0804AAF4: .4byte SpriteCB_PlayerMonSendOut_1\n" - "_0804AAF8:\n" - "\tadds r0, r6, 0\n" - "\tmovs r1, 0\n" - "\tbl GetBattlerSpriteCoord\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tstrh r0, [r4, 0x20]\n" - "\tadds r0, r6, 0\n" - "\tmovs r1, 0x1\n" - "\tbl GetBattlerSpriteCoord\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tadds r0, 0x18\n" - "\tstrh r0, [r4, 0x22]\n" - "\tldr r0, _0804AB2C @ =gBattlerTarget\n" - "\tstrb r6, [r0]\n" - "\tmovs r1, 0\n" - "\tstrh r1, [r4, 0x2E]\n" - "\tldr r0, _0804AB30 @ =gSprites\n" - "\tadds r0, 0x1C\n" - "\tadd r0, r8\n" - "\tldr r1, _0804AB34 @ =SpriteCB_OpponentMonSendOut\n" - "\tstr r1, [r0]\n" - "\tb _0804AB46\n" - "\t.align 2, 0\n" - "_0804AB2C: .4byte gBattlerTarget\n" - "_0804AB30: .4byte gSprites\n" - "_0804AB34: .4byte SpriteCB_OpponentMonSendOut\n" - "_0804AB38:\n" - "\tmovs r0, 0x1\n" - "\tbl GetBattlerAtPosition\n" - "\tldr r1, _0804AB64 @ =gBattlerTarget\n" - "\tstrb r0, [r1]\n" - "\tmovs r2, 0x1\n" - "\tstr r2, [sp, 0x4]\n" - "_0804AB46:\n" - "\tadds r3, r5, 0\n" - "_0804AB48:\n" - "\tldr r0, _0804AB68 @ =gSprites\n" - "\tadds r1, r3, r7\n" - "\tlsls r1, 2\n" - "\tadds r4, r1, r0\n" - "\tldr r5, _0804AB64 @ =gBattlerTarget\n" - "\tldrb r0, [r5]\n" - "\tstrh r0, [r4, 0x3A]\n" - "\tldr r3, [sp, 0x4]\n" - "\tcmp r3, 0\n" - "\tbne _0804AB6C\n" - "\tldr r0, [sp]\n" - "\tbl DestroyTask\n" - "\tb _0804ABB8\n" - "\t.align 2, 0\n" - "_0804AB64: .4byte gBattlerTarget\n" - "_0804AB68: .4byte gSprites\n" - "_0804AB6C:\n" - "\tmovs r0, 0x22\n" - "\tstrh r0, [r4, 0x2E]\n" - "\tldrb r0, [r5]\n" - "\tmovs r1, 0\n" - "\tbl GetBattlerSpriteCoord\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tstrh r0, [r4, 0x32]\n" - "\tldrb r0, [r5]\n" - "\tmovs r1, 0x1\n" - "\tbl GetBattlerSpriteCoord\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tsubs r0, 0x10\n" - "\tstrh r0, [r4, 0x36]\n" - "\tldr r0, _0804ABC8 @ =0x0000ffd8\n" - "\tstrh r0, [r4, 0x38]\n" - "\tadds r0, r4, 0\n" - "\tbl InitAnimArcTranslation\n" - "\tmov r0, sp\n" - "\tldrh r0, [r0]\n" - "\tstrh r0, [r4, 0x6]\n" - "\tldr r1, _0804ABCC @ =gTasks\n" - "\tldr r2, [sp]\n" - "\tlsls r0, r2, 2\n" - "\tadds r0, r2\n" - "\tlsls r0, 3\n" - "\tadds r0, r1\n" - "\tldrb r1, [r5]\n" - "\tstrh r1, [r0, 0x10]\n" - "\tldr r1, _0804ABD0 @ =TaskDummy\n" - "\tstr r1, [r0]\n" - "\tmovs r0, 0x36\n" - "\tbl PlaySE\n" - "_0804ABB8:\n" - "\tadd sp, 0x8\n" - "\tpop {r3-r5}\n" - "\tmov r8, r3\n" - "\tmov r9, r4\n" - "\tmov r10, r5\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" - "_0804ABC8: .4byte 0x0000ffd8\n" - "_0804ABCC: .4byte gTasks\n" - "_0804ABD0: .4byte TaskDummy\n"); + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r10\n" + "\tmov r6, r9\n" + "\tmov r5, r8\n" + "\tpush {r5-r7}\n" + "\tsub sp, 0x8\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tstr r0, [sp]\n" + "\tmovs r0, 0\n" + "\tstr r0, [sp, 0x4]\n" + "\tldr r1, _0804A9D4 @ =gTasks\n" + "\tldr r2, [sp]\n" + "\tlsls r0, r2, 2\n" + "\tadds r0, r2\n" + "\tlsls r0, 3\n" + "\tadds r1, r0, r1\n" + "\tldrh r2, [r1, 0x8]\n" + "\tmovs r3, 0x8\n" + "\tldrsh r0, [r1, r3]\n" + "\tcmp r0, 0\n" + "\tbne _0804A9D8\n" + "\tadds r0, r2, 0x1\n" + "\tstrh r0, [r1, 0x8]\n" + "\tb _0804ABB8\n" + "\t.align 2, 0\n" + "_0804A9D4: .4byte gTasks\n" + "_0804A9D8:\n" + "\tldrh r0, [r1, 0xC]\n" + "\tmov r9, r0\n" + "\tldrb r6, [r1, 0xE]\n" + "\tadds r0, r6, 0\n" + "\tbl GetBattlerSide\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbeq _0804AA04\n" + "\tldr r1, _0804A9FC @ =gBattlerPartyIndexes\n" + "\tlsls r0, r6, 1\n" + "\tadds r0, r1\n" + "\tldrh r1, [r0]\n" + "\tmovs r0, 0x64\n" + "\tmuls r0, r1\n" + "\tldr r1, _0804AA00 @ =gEnemyParty\n" + "\tb _0804AA12\n" + "\t.align 2, 0\n" + "_0804A9FC: .4byte gBattlerPartyIndexes\n" + "_0804AA00: .4byte gEnemyParty\n" + "_0804AA04:\n" + "\tldr r1, _0804AA50 @ =gBattlerPartyIndexes\n" + "\tlsls r0, r6, 1\n" + "\tadds r0, r1\n" + "\tldrh r1, [r0]\n" + "\tmovs r0, 0x64\n" + "\tmuls r0, r1\n" + "\tldr r1, _0804AA54 @ =gPlayerParty\n" + "_0804AA12:\n" + "\tadds r0, r1\n" + "\tmovs r1, 0x26\n" + "\tbl GetMonData\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tbl ItemIdToBallId\n" + "\tlsls r0, 24\n" + "\tlsrs r5, r0, 24\n" + "\tadds r0, r5, 0\n" + "\tbl LoadBallGfx\n" + "\tldr r0, _0804AA58 @ =gBattleTypeFlags\n" + "\tldr r0, [r0]\n" + "\tmovs r1, 0x2\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _0804AA60\n" + "\tldr r4, _0804AA5C @ =gLinkPlayers\n" + "\tadds r0, r6, 0\n" + "\tbl GetBattlerMultiplayerId\n" + "\tlsls r1, r0, 3\n" + "\tsubs r1, r0\n" + "\tlsls r1, 2\n" + "\tadds r1, r4\n" + "\tldrb r1, [r1, 0x13]\n" + "\tmov r10, r1\n" + "\tb _0804AA68\n" + "\t.align 2, 0\n" + "_0804AA50: .4byte gBattlerPartyIndexes\n" + "_0804AA54: .4byte gPlayerParty\n" + "_0804AA58: .4byte gBattleTypeFlags\n" + "_0804AA5C: .4byte gLinkPlayers\n" + "_0804AA60:\n" + "\tldr r0, _0804AAB8 @ =gSaveBlock2Ptr\n" + "\tldr r0, [r0]\n" + "\tldrb r0, [r0, 0x8]\n" + "\tmov r10, r0\n" + "_0804AA68:\n" + "\tlsls r0, r5, 1\n" + "\tadds r0, r5\n" + "\tlsls r0, 3\n" + "\tldr r1, _0804AABC @ =gBallSpriteTemplates\n" + "\tadds r0, r1\n" + "\tmovs r1, 0x20\n" + "\tmovs r2, 0x50\n" + "\tmovs r3, 0x1D\n" + "\tbl CreateSprite\n" + "\tlsls r0, 24\n" + "\tlsrs r7, r0, 24\n" + "\tlsls r5, r7, 4\n" + "\tadds r0, r5, r7\n" + "\tlsls r0, 2\n" + "\tmov r8, r0\n" + "\tldr r4, _0804AAC0 @ =gSprites\n" + "\tadd r4, r8\n" + "\tmovs r0, 0x80\n" + "\tstrh r0, [r4, 0x2E]\n" + "\tmovs r1, 0\n" + "\tstrh r1, [r4, 0x30]\n" + "\tmov r2, r9\n" + "\tstrh r2, [r4, 0x3C]\n" + "\tmov r3, r9\n" + "\tcmp r3, 0xFE\n" + "\tbeq _0804AAF8\n" + "\tcmp r3, 0xFF\n" + "\tbne _0804AB38\n" + "\tldr r0, _0804AAC4 @ =gBattleTypeFlags\n" + "\tldr r0, [r0]\n" + "\tmovs r1, 0x80\n" + "\tlsls r1, 9\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _0804AAC8\n" + "\tmovs r5, 0x20\n" + "\tmovs r4, 0x40\n" + "\tb _0804AACE\n" + "\t.align 2, 0\n" + "_0804AAB8: .4byte gSaveBlock2Ptr\n" + "_0804AABC: .4byte gBallSpriteTemplates\n" + "_0804AAC0: .4byte gSprites\n" + "_0804AAC4: .4byte gBattleTypeFlags\n" + "_0804AAC8:\n" + "\tmov r0, r10\n" + "\tmovs r5, 0x30\n" + "\tmovs r4, 0x46\n" + "_0804AACE:\n" + "\tldr r0, _0804AAEC @ =gBattlerTarget\n" + "\tstrb r6, [r0]\n" + "\tldr r2, _0804AAF0 @ =gSprites\n" + "\tlsls r3, r7, 4\n" + "\tadds r1, r3, r7\n" + "\tlsls r1, 2\n" + "\tadds r0, r1, r2\n" + "\tstrh r5, [r0, 0x20]\n" + "\tstrh r4, [r0, 0x22]\n" + "\tadds r2, 0x1C\n" + "\tadds r1, r2\n" + "\tldr r0, _0804AAF4 @ =SpriteCB_PlayerMonSendOut_1\n" + "\tstr r0, [r1]\n" + "\tb _0804AB48\n" + "\t.align 2, 0\n" + "_0804AAEC: .4byte gBattlerTarget\n" + "_0804AAF0: .4byte gSprites\n" + "_0804AAF4: .4byte SpriteCB_PlayerMonSendOut_1\n" + "_0804AAF8:\n" + "\tadds r0, r6, 0\n" + "\tmovs r1, 0\n" + "\tbl GetBattlerSpriteCoord\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tstrh r0, [r4, 0x20]\n" + "\tadds r0, r6, 0\n" + "\tmovs r1, 0x1\n" + "\tbl GetBattlerSpriteCoord\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tadds r0, 0x18\n" + "\tstrh r0, [r4, 0x22]\n" + "\tldr r0, _0804AB2C @ =gBattlerTarget\n" + "\tstrb r6, [r0]\n" + "\tmovs r1, 0\n" + "\tstrh r1, [r4, 0x2E]\n" + "\tldr r0, _0804AB30 @ =gSprites\n" + "\tadds r0, 0x1C\n" + "\tadd r0, r8\n" + "\tldr r1, _0804AB34 @ =SpriteCB_OpponentMonSendOut\n" + "\tstr r1, [r0]\n" + "\tb _0804AB46\n" + "\t.align 2, 0\n" + "_0804AB2C: .4byte gBattlerTarget\n" + "_0804AB30: .4byte gSprites\n" + "_0804AB34: .4byte SpriteCB_OpponentMonSendOut\n" + "_0804AB38:\n" + "\tmovs r0, 0x1\n" + "\tbl GetBattlerAtPosition\n" + "\tldr r1, _0804AB64 @ =gBattlerTarget\n" + "\tstrb r0, [r1]\n" + "\tmovs r2, 0x1\n" + "\tstr r2, [sp, 0x4]\n" + "_0804AB46:\n" + "\tadds r3, r5, 0\n" + "_0804AB48:\n" + "\tldr r0, _0804AB68 @ =gSprites\n" + "\tadds r1, r3, r7\n" + "\tlsls r1, 2\n" + "\tadds r4, r1, r0\n" + "\tldr r5, _0804AB64 @ =gBattlerTarget\n" + "\tldrb r0, [r5]\n" + "\tstrh r0, [r4, 0x3A]\n" + "\tldr r3, [sp, 0x4]\n" + "\tcmp r3, 0\n" + "\tbne _0804AB6C\n" + "\tldr r0, [sp]\n" + "\tbl DestroyTask\n" + "\tb _0804ABB8\n" + "\t.align 2, 0\n" + "_0804AB64: .4byte gBattlerTarget\n" + "_0804AB68: .4byte gSprites\n" + "_0804AB6C:\n" + "\tmovs r0, 0x22\n" + "\tstrh r0, [r4, 0x2E]\n" + "\tldrb r0, [r5]\n" + "\tmovs r1, 0\n" + "\tbl GetBattlerSpriteCoord\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tstrh r0, [r4, 0x32]\n" + "\tldrb r0, [r5]\n" + "\tmovs r1, 0x1\n" + "\tbl GetBattlerSpriteCoord\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tsubs r0, 0x10\n" + "\tstrh r0, [r4, 0x36]\n" + "\tldr r0, _0804ABC8 @ =0x0000ffd8\n" + "\tstrh r0, [r4, 0x38]\n" + "\tadds r0, r4, 0\n" + "\tbl InitAnimArcTranslation\n" + "\tmov r0, sp\n" + "\tldrh r0, [r0]\n" + "\tstrh r0, [r4, 0x6]\n" + "\tldr r1, _0804ABCC @ =gTasks\n" + "\tldr r2, [sp]\n" + "\tlsls r0, r2, 2\n" + "\tadds r0, r2\n" + "\tlsls r0, 3\n" + "\tadds r0, r1\n" + "\tldrb r1, [r5]\n" + "\tstrh r1, [r0, 0x10]\n" + "\tldr r1, _0804ABD0 @ =TaskDummy\n" + "\tstr r1, [r0]\n" + "\tmovs r0, 0x36\n" + "\tbl PlaySE\n" + "_0804ABB8:\n" + "\tadd sp, 0x8\n" + "\tpop {r3-r5}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tmov r10, r5\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_0804ABC8: .4byte 0x0000ffd8\n" + "_0804ABCC: .4byte gTasks\n" + "_0804ABD0: .4byte TaskDummy\n"); } #endif @@ -485,6 +749,7 @@ static void sub_804AD00(struct Sprite *sprite) sprite->data[5]++; if (sprite->data[5] == 11) PlaySE(SE_SUIKOMU); + if (gSprites[gBattlerSpriteIds[sprite->sBattler]].affineAnimEnded) { StartSpriteAnim(sprite, 2); @@ -654,6 +919,7 @@ static void sub_804AF24(struct Sprite *sprite) StartSpriteAffineAnim(sprite, 2); else StartSpriteAffineAnim(sprite, 1); + PlaySE(SE_BOWA); } break; @@ -663,35 +929,33 @@ static void sub_804AF24(struct Sprite *sprite) #define tCryTaskSpecies data[0] #define tCryTaskPan data[1] #define tCryTaskWantedCry data[2] -#define tCryTaskBattler data[3] -#define tCryTaskMonSpriteId data[4] -#define tCryTaskMonPtr1 data[5] -#define tCryTaskMonPtr2 data[6] +#define tCryTaskMonPtr1 data[3] +#define tCryTaskMonPtr2 data[4] #define tCryTaskFrames data[10] #define tCryTaskState data[15] static void Task_PlayCryWhenReleasedFromBall(u8 taskId) { - u8 wantedCry = gTasks[taskId].tCryTaskWantedCry; + u8 state2 = gTasks[taskId].data[2]; s8 pan = gTasks[taskId].tCryTaskPan; u16 species = gTasks[taskId].tCryTaskSpecies; - u8 battlerId = gTasks[taskId].tCryTaskBattler; - u8 monSpriteId = gTasks[taskId].tCryTaskMonSpriteId; - struct Pokemon *mon = (void*)(u32)((gTasks[taskId].tCryTaskMonPtr1 << 0x10) | (u16)(gTasks[taskId].tCryTaskMonPtr2)); + struct Pokemon *mon = (void*)(u32)((u32)(gTasks[taskId].tCryTaskMonPtr1 << 0x10) | ((u16)gTasks[taskId].tCryTaskMonPtr2)); switch (gTasks[taskId].tCryTaskState) { case 0: default: - if (gSprites[monSpriteId].affineAnimEnded) - gTasks[taskId].tCryTaskState = wantedCry + 1; + if (gTasks[taskId].data[8] < 3) + gTasks[taskId].data[8]++; + else + gTasks[taskId].tCryTaskState = state2 + 1; break; case 1: if (ShouldPlayNormalPokeCry(mon) == TRUE) PlayCry3(species, pan, 0); else PlayCry3(species, pan, 11); - gBattleSpritesDataPtr->healthBoxesData[battlerId].field_1_x40 = 0; + DestroyTask(taskId); break; case 2: @@ -707,7 +971,6 @@ static void Task_PlayCryWhenReleasedFromBall(u8 taskId) else PlayCry4(species, pan, 12); - gBattleSpritesDataPtr->healthBoxesData[battlerId].field_1_x40 = 0; DestroyTask(taskId); } else @@ -726,7 +989,6 @@ static void Task_PlayCryWhenReleasedFromBall(u8 taskId) break; } gTasks[taskId].tCryTaskState++; - // fall through case 31: if (!IsCryPlayingOrClearCrySongs()) { @@ -741,12 +1003,12 @@ static void Task_PlayCryWhenReleasedFromBall(u8 taskId) gTasks[taskId].tCryTaskFrames--; break; } + if (ShouldPlayNormalPokeCry(mon) == TRUE) PlayCry4(species, pan, 0); else PlayCry4(species, pan, 11); - gBattleSpritesDataPtr->healthBoxesData[battlerId].field_1_x40 = 0; DestroyTask(taskId); break; } @@ -786,7 +1048,7 @@ static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite) if ((battlerId == GetBattlerAtPosition(B_POSITION_PLAYER_LEFT) || battlerId == GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)) && IsDoubleBattle() && gBattleSpritesDataPtr->animationData->field_9_x1) { - if (gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_LINK) + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) { if (IsBGMPlaying()) m4aMPlayStop(&gMPlayInfo_BGM); @@ -803,29 +1065,17 @@ static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite) wantedCryCase = 1; else wantedCryCase = 2; - - gBattleSpritesDataPtr->healthBoxesData[battlerId].field_1_x40 = 1; - + taskId = CreateTask(Task_PlayCryWhenReleasedFromBall, 3); gTasks[taskId].tCryTaskSpecies = species; gTasks[taskId].tCryTaskPan = pan; gTasks[taskId].tCryTaskWantedCry = wantedCryCase; - gTasks[taskId].tCryTaskBattler = battlerId; - gTasks[taskId].tCryTaskMonSpriteId = gBattlerSpriteIds[sprite->sBattler]; gTasks[taskId].tCryTaskMonPtr1 = (u32)(mon) >> 0x10; gTasks[taskId].tCryTaskMonPtr2 = (u32)(mon); gTasks[taskId].tCryTaskState = 0; } StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[sprite->sBattler]], 1); - -/* - if (GetBattlerSide(sprite->sBattler) == B_SIDE_OPPONENT) - gSprites[gBattlerSpriteIds[sprite->sBattler]].callback = sub_8039B58; - else - gSprites[gBattlerSpriteIds[sprite->sBattler]].callback = sub_8039E44; -*/ - AnimateSprite(&gSprites[gBattlerSpriteIds[sprite->sBattler]]); gSprites[gBattlerSpriteIds[sprite->sBattler]].data[1] = 0x1000; } @@ -833,8 +1083,6 @@ static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite) #undef tCryTaskSpecies #undef tCryTaskPan #undef tCryTaskWantedCry -#undef tCryTaskBattler -#undef tCryTaskMonSpriteId #undef tCryTaskMonPtr1 #undef tCryTaskMonPtr2 #undef tCryTaskFrames @@ -903,7 +1151,7 @@ static void sub_804B5C8(struct Sprite *sprite) { gDoingBattleAnim = FALSE; m4aMPlayAllStop(); - PlaySE(MUS_FANFA5); + PlaySE(MUS_FAN6); } else if (sprite->data[4] == 315) { @@ -1026,22 +1274,17 @@ void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 battlerId, u8 x, u8 y, LoadCompressedSpriteSheetUsingHeap(&gBallSpriteSheets[0]); LoadCompressedSpritePaletteUsingHeap(&gBallSpritePalettes[0]); spriteId = CreateSprite(&gBallSpriteTemplates[0], x, y, subpriortiy); - gSprites[spriteId].data[0] = monSpriteId; gSprites[spriteId].data[5] = gSprites[monSpriteId].pos1.x; gSprites[spriteId].data[6] = gSprites[monSpriteId].pos1.y; - gSprites[monSpriteId].pos1.x = x; gSprites[monSpriteId].pos1.y = y; - //gSprites[monSpriteId].data[7] = species; - gSprites[spriteId].data[1] = g; gSprites[spriteId].data[2] = battlerId; gSprites[spriteId].data[3] = h; gSprites[spriteId].data[4] = h >> 0x10; gSprites[spriteId].oam.priority = oamPriority; gSprites[spriteId].callback = sub_804B9E8; - gSprites[monSpriteId].invisible = TRUE; } @@ -1085,11 +1328,13 @@ static void sub_804BAA4(struct Sprite *sprite) if (sprite->animEnded) sprite->invisible = TRUE; + if (gSprites[monSpriteId].affineAnimEnded) { StartSpriteAffineAnim(&gSprites[monSpriteId], 0); r12 = TRUE; } + var1 = (sprite->data[5] - sprite->pos1.x) * sprite->data[7] / 128 + sprite->pos1.x; var2 = (sprite->data[6] - sprite->pos1.y) * sprite->data[7] / 128 + sprite->pos1.y; gSprites[monSpriteId].pos1.x = var1; @@ -1110,16 +1355,9 @@ static void sub_804BAA4(struct Sprite *sprite) gSprites[monSpriteId].pos2.y = 0; r6 = TRUE; } + if (sprite->animEnded && r12 && r6) - { - /* - if (gSprites[monSpriteId].data[7] == SPECIES_EGG) - DoMonFrontSpriteAnimation(&gSprites[monSpriteId], gSprites[monSpriteId].data[7], TRUE, 0); - else - DoMonFrontSpriteAnimation(&gSprites[monSpriteId], gSprites[monSpriteId].data[7], FALSE, 0); - */ DestroySpriteAndFreeResources(sprite); - } } u8 CreateTradePokeballSprite(u8 a, u8 b, u8 x, u8 y, u8 oamPriority, u8 subPriority, u8 g, u32 h) @@ -1174,6 +1412,7 @@ static void sub_804BCF8(struct Sprite *sprite) sprite->data[5]++; if (sprite->data[5] == 11) PlaySE(SE_SUIKOMU); + r1 = sprite->data[0]; if (gSprites[r1].affineAnimEnded) { @@ -1195,7 +1434,7 @@ static void sub_804BD6C(struct Sprite *sprite) sprite->callback = SpriteCallbackDummy; } -static void DestroySpriteAndFreeResources2(struct Sprite *sprite) +void DestroySpriteAndFreeResources2(struct Sprite *sprite) { DestroySpriteAndFreeResources(sprite); } @@ -1216,6 +1455,7 @@ void sub_804BD94(u8 battlerId) healthboxSprite->pos2.x = -healthboxSprite->pos2.x; healthboxSprite->pos2.y = -healthboxSprite->pos2.y; } + gSprites[healthboxSprite->data[5]].callback(&gSprites[healthboxSprite->data[5]]); if (GetBattlerPosition(battlerId) == B_POSITION_PLAYER_RIGHT) healthboxSprite->callback = sub_804BE24; @@ -1273,6 +1513,7 @@ void LoadBallGfx(u8 ballId) LoadCompressedSpriteSheetUsingHeap(&gBallSpriteSheets[ballId]); LoadCompressedSpritePaletteUsingHeap(&gBallSpritePalettes[ballId]); } + switch (ballId) { case BALL_DIVE: -- cgit v1.2.3 From 8d0618778125e8260021652d369584d82a8cdf39 Mon Sep 17 00:00:00 2001 From: Evan Date: Sat, 30 Nov 2019 10:54:19 -0500 Subject: small typos fix --- src/shop.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/shop.c b/src/shop.c index 4a0ac7fb1..12f3f3263 100644 --- a/src/shop.c +++ b/src/shop.c @@ -537,9 +537,7 @@ bool8 BuyMenuBuildListMenuTemplate(void) SetShopExitCallback(); return FALSE; } - - i = 0; - + for (i = 0; i < gShopData.itemCount; i++) { PokeMartWriteNameAndIdAt(&sShopMenuListMenu[i], gShopData.itemList[i], sShopMenuItemStrings[i]); @@ -776,7 +774,7 @@ static void BuyMenuDrawMapBg(void) static void BuyMenuDrawMapMetatile(s16 x, s16 y, const u16 *src, u8 metatileLayerType) { u16 offset1 = x * 2; - u16 offset2 = (y * 64) + 64; + u16 offset2 = y * 64 + 64; switch (metatileLayerType) { -- cgit v1.2.3 From 8cdc65a8e4cc03b96f8e73e7079634db2143c491 Mon Sep 17 00:00:00 2001 From: Evan Date: Sat, 30 Nov 2019 15:19:34 -0500 Subject: minor fixes --- src/pokeball.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/pokeball.c b/src/pokeball.c index 171e1beb9..20dc7bfe5 100644 --- a/src/pokeball.c +++ b/src/pokeball.c @@ -705,7 +705,7 @@ static void SpriteCB_TestBallThrow(struct Sprite *sprite) u8 noOfShakes = gTasks[taskId].tThrowId; StartSpriteAnim(sprite, 1); - sprite->affineAnimPaused = 1; + sprite->affineAnimPaused = TRUE; sprite->pos1.x += sprite->pos2.x; sprite->pos1.y += sprite->pos2.y; sprite->pos2.x = 0; @@ -1216,8 +1216,7 @@ static void SpriteCB_PlayerMonSendOut_2(struct Sprite *sprite) { sprite->pos1.x += sprite->pos2.x; sprite->pos1.y += sprite->pos2.y; - sprite->pos2.y = 0; - sprite->pos2.x = 0; + sprite->pos2.y = sprite->pos2.x = 0; sprite->sBattler = sprite->oam.affineParam & 0xFF; sprite->data[0] = 0; -- cgit v1.2.3 From d5537b8db98dfbbbaf2910e1fe6e1cf7e3901583 Mon Sep 17 00:00:00 2001 From: Evan Date: Sat, 30 Nov 2019 15:28:51 -0500 Subject: fix build error format fix small update all matching remove unused var --- src/pokeball.c | 287 ++------------------------------------------------------- 1 file changed, 10 insertions(+), 277 deletions(-) (limited to 'src') diff --git a/src/pokeball.c b/src/pokeball.c index 20dc7bfe5..5a5a573dd 100644 --- a/src/pokeball.c +++ b/src/pokeball.c @@ -339,8 +339,6 @@ u8 DoPokeballSendOutAnimation(s16 pan, u8 kindOfThrow) return 0; } -#ifdef NONMATCHING -//gender is an unused variable that still manages to show up in the assembly, can't get temporary variables to make it work. static void Task_DoPokeballSendOutAnim(u8 taskId) { u16 throwCaseId; @@ -348,7 +346,8 @@ static void Task_DoPokeballSendOutAnim(u8 taskId) u16 itemId, ballId; u8 ballSpriteId; bool8 notSendOut = FALSE; - u8 gender, temp; + s16 x, y; + u32 gender; if (gTasks[taskId].tFrames == 0) { @@ -367,7 +366,6 @@ static void Task_DoPokeballSendOutAnim(u8 taskId) ballId = ItemIdToBallId(itemId); LoadBallGfx(ballId); - // r10 is set to gender byte here and loaded into a temporary variable to be immediately overwritten by an unused variable.. if (gBattleTypeFlags & BATTLE_TYPE_LINK) gender = gLinkPlayers[GetBattlerMultiplayerId(battlerId)].gender; else @@ -383,17 +381,19 @@ static void Task_DoPokeballSendOutAnim(u8 taskId) case POKEBALL_PLAYER_SENDOUT: if (gBattleTypeFlags & BATTLE_TYPE_POKEDUDE) { - gSprites[ballSpriteId].pos1.x = 32; - gSprites[ballSpriteId].pos1.y = 64; + x = 32; + y = 64; } else { - temp = gender; //mov r0, r10 (r10 = gender), but this is never actually used - gSprites[ballSpriteId].pos1.x = 48; - gSprites[ballSpriteId].pos1.y = 70; + gender = !!gender; // something unknown got optimized out + x = 48; + y = 70; } gBattlerTarget = battlerId; + gSprites[ballSpriteId].pos1.x = x; + gSprites[ballSpriteId].pos1.y = y; gSprites[ballSpriteId].callback = SpriteCB_PlayerMonSendOut_1; break; case POKEBALL_OPPONENT_SENDOUT: @@ -427,273 +427,6 @@ static void Task_DoPokeballSendOutAnim(u8 taskId) gTasks[taskId].func = TaskDummy; PlaySE(SE_NAGERU); } -#else -NAKED -static void Task_DoPokeballSendOutAnim(u8 taskId) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tmov r7, r10\n" - "\tmov r6, r9\n" - "\tmov r5, r8\n" - "\tpush {r5-r7}\n" - "\tsub sp, 0x8\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tstr r0, [sp]\n" - "\tmovs r0, 0\n" - "\tstr r0, [sp, 0x4]\n" - "\tldr r1, _0804A9D4 @ =gTasks\n" - "\tldr r2, [sp]\n" - "\tlsls r0, r2, 2\n" - "\tadds r0, r2\n" - "\tlsls r0, 3\n" - "\tadds r1, r0, r1\n" - "\tldrh r2, [r1, 0x8]\n" - "\tmovs r3, 0x8\n" - "\tldrsh r0, [r1, r3]\n" - "\tcmp r0, 0\n" - "\tbne _0804A9D8\n" - "\tadds r0, r2, 0x1\n" - "\tstrh r0, [r1, 0x8]\n" - "\tb _0804ABB8\n" - "\t.align 2, 0\n" - "_0804A9D4: .4byte gTasks\n" - "_0804A9D8:\n" - "\tldrh r0, [r1, 0xC]\n" - "\tmov r9, r0\n" - "\tldrb r6, [r1, 0xE]\n" - "\tadds r0, r6, 0\n" - "\tbl GetBattlerSide\n" - "\tlsls r0, 24\n" - "\tcmp r0, 0\n" - "\tbeq _0804AA04\n" - "\tldr r1, _0804A9FC @ =gBattlerPartyIndexes\n" - "\tlsls r0, r6, 1\n" - "\tadds r0, r1\n" - "\tldrh r1, [r0]\n" - "\tmovs r0, 0x64\n" - "\tmuls r0, r1\n" - "\tldr r1, _0804AA00 @ =gEnemyParty\n" - "\tb _0804AA12\n" - "\t.align 2, 0\n" - "_0804A9FC: .4byte gBattlerPartyIndexes\n" - "_0804AA00: .4byte gEnemyParty\n" - "_0804AA04:\n" - "\tldr r1, _0804AA50 @ =gBattlerPartyIndexes\n" - "\tlsls r0, r6, 1\n" - "\tadds r0, r1\n" - "\tldrh r1, [r0]\n" - "\tmovs r0, 0x64\n" - "\tmuls r0, r1\n" - "\tldr r1, _0804AA54 @ =gPlayerParty\n" - "_0804AA12:\n" - "\tadds r0, r1\n" - "\tmovs r1, 0x26\n" - "\tbl GetMonData\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tbl ItemIdToBallId\n" - "\tlsls r0, 24\n" - "\tlsrs r5, r0, 24\n" - "\tadds r0, r5, 0\n" - "\tbl LoadBallGfx\n" - "\tldr r0, _0804AA58 @ =gBattleTypeFlags\n" - "\tldr r0, [r0]\n" - "\tmovs r1, 0x2\n" - "\tands r0, r1\n" - "\tcmp r0, 0\n" - "\tbeq _0804AA60\n" - "\tldr r4, _0804AA5C @ =gLinkPlayers\n" - "\tadds r0, r6, 0\n" - "\tbl GetBattlerMultiplayerId\n" - "\tlsls r1, r0, 3\n" - "\tsubs r1, r0\n" - "\tlsls r1, 2\n" - "\tadds r1, r4\n" - "\tldrb r1, [r1, 0x13]\n" - "\tmov r10, r1\n" - "\tb _0804AA68\n" - "\t.align 2, 0\n" - "_0804AA50: .4byte gBattlerPartyIndexes\n" - "_0804AA54: .4byte gPlayerParty\n" - "_0804AA58: .4byte gBattleTypeFlags\n" - "_0804AA5C: .4byte gLinkPlayers\n" - "_0804AA60:\n" - "\tldr r0, _0804AAB8 @ =gSaveBlock2Ptr\n" - "\tldr r0, [r0]\n" - "\tldrb r0, [r0, 0x8]\n" - "\tmov r10, r0\n" - "_0804AA68:\n" - "\tlsls r0, r5, 1\n" - "\tadds r0, r5\n" - "\tlsls r0, 3\n" - "\tldr r1, _0804AABC @ =gBallSpriteTemplates\n" - "\tadds r0, r1\n" - "\tmovs r1, 0x20\n" - "\tmovs r2, 0x50\n" - "\tmovs r3, 0x1D\n" - "\tbl CreateSprite\n" - "\tlsls r0, 24\n" - "\tlsrs r7, r0, 24\n" - "\tlsls r5, r7, 4\n" - "\tadds r0, r5, r7\n" - "\tlsls r0, 2\n" - "\tmov r8, r0\n" - "\tldr r4, _0804AAC0 @ =gSprites\n" - "\tadd r4, r8\n" - "\tmovs r0, 0x80\n" - "\tstrh r0, [r4, 0x2E]\n" - "\tmovs r1, 0\n" - "\tstrh r1, [r4, 0x30]\n" - "\tmov r2, r9\n" - "\tstrh r2, [r4, 0x3C]\n" - "\tmov r3, r9\n" - "\tcmp r3, 0xFE\n" - "\tbeq _0804AAF8\n" - "\tcmp r3, 0xFF\n" - "\tbne _0804AB38\n" - "\tldr r0, _0804AAC4 @ =gBattleTypeFlags\n" - "\tldr r0, [r0]\n" - "\tmovs r1, 0x80\n" - "\tlsls r1, 9\n" - "\tands r0, r1\n" - "\tcmp r0, 0\n" - "\tbeq _0804AAC8\n" - "\tmovs r5, 0x20\n" - "\tmovs r4, 0x40\n" - "\tb _0804AACE\n" - "\t.align 2, 0\n" - "_0804AAB8: .4byte gSaveBlock2Ptr\n" - "_0804AABC: .4byte gBallSpriteTemplates\n" - "_0804AAC0: .4byte gSprites\n" - "_0804AAC4: .4byte gBattleTypeFlags\n" - "_0804AAC8:\n" - "\tmov r0, r10\n" - "\tmovs r5, 0x30\n" - "\tmovs r4, 0x46\n" - "_0804AACE:\n" - "\tldr r0, _0804AAEC @ =gBattlerTarget\n" - "\tstrb r6, [r0]\n" - "\tldr r2, _0804AAF0 @ =gSprites\n" - "\tlsls r3, r7, 4\n" - "\tadds r1, r3, r7\n" - "\tlsls r1, 2\n" - "\tadds r0, r1, r2\n" - "\tstrh r5, [r0, 0x20]\n" - "\tstrh r4, [r0, 0x22]\n" - "\tadds r2, 0x1C\n" - "\tadds r1, r2\n" - "\tldr r0, _0804AAF4 @ =SpriteCB_PlayerMonSendOut_1\n" - "\tstr r0, [r1]\n" - "\tb _0804AB48\n" - "\t.align 2, 0\n" - "_0804AAEC: .4byte gBattlerTarget\n" - "_0804AAF0: .4byte gSprites\n" - "_0804AAF4: .4byte SpriteCB_PlayerMonSendOut_1\n" - "_0804AAF8:\n" - "\tadds r0, r6, 0\n" - "\tmovs r1, 0\n" - "\tbl GetBattlerSpriteCoord\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tstrh r0, [r4, 0x20]\n" - "\tadds r0, r6, 0\n" - "\tmovs r1, 0x1\n" - "\tbl GetBattlerSpriteCoord\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tadds r0, 0x18\n" - "\tstrh r0, [r4, 0x22]\n" - "\tldr r0, _0804AB2C @ =gBattlerTarget\n" - "\tstrb r6, [r0]\n" - "\tmovs r1, 0\n" - "\tstrh r1, [r4, 0x2E]\n" - "\tldr r0, _0804AB30 @ =gSprites\n" - "\tadds r0, 0x1C\n" - "\tadd r0, r8\n" - "\tldr r1, _0804AB34 @ =SpriteCB_OpponentMonSendOut\n" - "\tstr r1, [r0]\n" - "\tb _0804AB46\n" - "\t.align 2, 0\n" - "_0804AB2C: .4byte gBattlerTarget\n" - "_0804AB30: .4byte gSprites\n" - "_0804AB34: .4byte SpriteCB_OpponentMonSendOut\n" - "_0804AB38:\n" - "\tmovs r0, 0x1\n" - "\tbl GetBattlerAtPosition\n" - "\tldr r1, _0804AB64 @ =gBattlerTarget\n" - "\tstrb r0, [r1]\n" - "\tmovs r2, 0x1\n" - "\tstr r2, [sp, 0x4]\n" - "_0804AB46:\n" - "\tadds r3, r5, 0\n" - "_0804AB48:\n" - "\tldr r0, _0804AB68 @ =gSprites\n" - "\tadds r1, r3, r7\n" - "\tlsls r1, 2\n" - "\tadds r4, r1, r0\n" - "\tldr r5, _0804AB64 @ =gBattlerTarget\n" - "\tldrb r0, [r5]\n" - "\tstrh r0, [r4, 0x3A]\n" - "\tldr r3, [sp, 0x4]\n" - "\tcmp r3, 0\n" - "\tbne _0804AB6C\n" - "\tldr r0, [sp]\n" - "\tbl DestroyTask\n" - "\tb _0804ABB8\n" - "\t.align 2, 0\n" - "_0804AB64: .4byte gBattlerTarget\n" - "_0804AB68: .4byte gSprites\n" - "_0804AB6C:\n" - "\tmovs r0, 0x22\n" - "\tstrh r0, [r4, 0x2E]\n" - "\tldrb r0, [r5]\n" - "\tmovs r1, 0\n" - "\tbl GetBattlerSpriteCoord\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tstrh r0, [r4, 0x32]\n" - "\tldrb r0, [r5]\n" - "\tmovs r1, 0x1\n" - "\tbl GetBattlerSpriteCoord\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tsubs r0, 0x10\n" - "\tstrh r0, [r4, 0x36]\n" - "\tldr r0, _0804ABC8 @ =0x0000ffd8\n" - "\tstrh r0, [r4, 0x38]\n" - "\tadds r0, r4, 0\n" - "\tbl InitAnimArcTranslation\n" - "\tmov r0, sp\n" - "\tldrh r0, [r0]\n" - "\tstrh r0, [r4, 0x6]\n" - "\tldr r1, _0804ABCC @ =gTasks\n" - "\tldr r2, [sp]\n" - "\tlsls r0, r2, 2\n" - "\tadds r0, r2\n" - "\tlsls r0, 3\n" - "\tadds r0, r1\n" - "\tldrb r1, [r5]\n" - "\tstrh r1, [r0, 0x10]\n" - "\tldr r1, _0804ABD0 @ =TaskDummy\n" - "\tstr r1, [r0]\n" - "\tmovs r0, 0x36\n" - "\tbl PlaySE\n" - "_0804ABB8:\n" - "\tadd sp, 0x8\n" - "\tpop {r3-r5}\n" - "\tmov r8, r3\n" - "\tmov r9, r4\n" - "\tmov r10, r5\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" - "_0804ABC8: .4byte 0x0000ffd8\n" - "_0804ABCC: .4byte gTasks\n" - "_0804ABD0: .4byte TaskDummy\n"); -} -#endif static void SpriteCB_TestBallThrow(struct Sprite *sprite) { @@ -1216,7 +949,7 @@ static void SpriteCB_PlayerMonSendOut_2(struct Sprite *sprite) { sprite->pos1.x += sprite->pos2.x; sprite->pos1.y += sprite->pos2.y; - sprite->pos2.y = sprite->pos2.x = 0; + sprite->pos2.x = sprite->pos2.y = 0; sprite->sBattler = sprite->oam.affineParam & 0xFF; sprite->data[0] = 0; -- cgit v1.2.3 From cf4b9de30fc09c01f818b329c982308a9fc895f6 Mon Sep 17 00:00:00 2001 From: Evan Date: Tue, 3 Dec 2019 18:46:19 -0700 Subject: update sBallOamData --- src/pokeball.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/pokeball.c b/src/pokeball.c index 5a5a573dd..2785d0af9 100644 --- a/src/pokeball.c +++ b/src/pokeball.c @@ -105,9 +105,9 @@ const struct CompressedSpritePalette gBallSpritePalettes[POKEBALL_COUNT] = static const struct OamData sBallOamData = { .y = 0, - .affineMode = 3, - .objMode = 0, - .mosaic = 0, + .affineMode = ST_OAM_AFFINE_DOUBLE, + .objMode = ST_OAM_OBJ_NORMAL, + .mosaic = ST_OAM_4BPP, .bpp = 0, .shape = SPRITE_SHAPE(16x16), .x = 0, -- cgit v1.2.3 From 2dacf6c1bf329ff7321bf52e3591b5920c281b5d Mon Sep 17 00:00:00 2001 From: Evan Date: Tue, 3 Dec 2019 19:52:24 -0700 Subject: fix sBallOamData --- src/pokeball.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/pokeball.c b/src/pokeball.c index 2785d0af9..395150a2e 100644 --- a/src/pokeball.c +++ b/src/pokeball.c @@ -107,8 +107,8 @@ static const struct OamData sBallOamData = .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = ST_OAM_4BPP, - .bpp = 0, + .mosaic = FALSE, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x16), .x = 0, .matrixNum = 0, -- cgit v1.2.3 From 11a52655f307788f042e34c1bcf345d2b2de61b8 Mon Sep 17 00:00:00 2001 From: Evan Date: Wed, 4 Dec 2019 07:53:12 -0700 Subject: text fixes --- src/pokeball.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/pokeball.c b/src/pokeball.c index 395150a2e..aeaba08ab 100644 --- a/src/pokeball.c +++ b/src/pokeball.c @@ -331,7 +331,7 @@ u8 DoPokeballSendOutAnimation(s16 pan, u8 kindOfThrow) u8 taskId; gDoingBattleAnim = TRUE; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive = 1; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive = TRUE; taskId = CreateTask(Task_DoPokeballSendOutAnim, 5); gTasks[taskId].tPan = pan; gTasks[taskId].tThrowId = kindOfThrow; @@ -854,13 +854,13 @@ static void HandleBallAnimEnd(struct Sprite *sprite) gSprites[gBattlerSpriteIds[battlerId]].pos2.y = 0; gDoingBattleAnim = FALSE; - gBattleSpritesDataPtr->healthBoxesData[battlerId].ballAnimActive = 0; + gBattleSpritesDataPtr->healthBoxesData[battlerId].ballAnimActive = FALSE; FreeSpriteOamMatrix(sprite); DestroySprite(sprite); for (doneBattlers = 0, i = 0; i < MAX_BATTLERS_COUNT; i++) { - if (gBattleSpritesDataPtr->healthBoxesData[i].ballAnimActive == 0) + if (!gBattleSpritesDataPtr->healthBoxesData[i].ballAnimActive) doneBattlers++; } if (doneBattlers == MAX_BATTLERS_COUNT) @@ -892,7 +892,7 @@ static void sub_804B5C8(struct Sprite *sprite) DestroySprite(&gSprites[gBattlerSpriteIds[sprite->sBattler]]); DestroySpriteAndFreeResources(sprite); if (gMain.inBattle) - gBattleSpritesDataPtr->healthBoxesData[battlerId].ballAnimActive = 0; + gBattleSpritesDataPtr->healthBoxesData[battlerId].ballAnimActive = FALSE; } } @@ -1240,7 +1240,7 @@ void LoadBallGfx(u8 ballId) { u16 var; - if (GetSpriteTileStartByTag(gBallSpriteSheets[ballId].tag) == 0xFFFF) + if (GetSpriteTileStartByTag(gBallSpriteSheets[ballId].tag) == SPRITE_INVALID_TAG) { LoadCompressedSpriteSheetUsingHeap(&gBallSpriteSheets[ballId]); LoadCompressedSpritePaletteUsingHeap(&gBallSpritePalettes[ballId]); -- cgit v1.2.3