diff options
Diffstat (limited to 'src/decoration.c')
-rw-r--r-- | src/decoration.c | 2781 |
1 files changed, 0 insertions, 2781 deletions
diff --git a/src/decoration.c b/src/decoration.c deleted file mode 100644 index 0179d36a1..000000000 --- a/src/decoration.c +++ /dev/null @@ -1,2781 +0,0 @@ - -// Includes -#include "global.h" -#include "decompress.h" -#include "malloc.h" -#include "string_util.h" -#include "international_string_util.h" -#include "script.h" -#include "task.h" -#include "main.h" -#include "palette.h" -#include "songs.h" -#include "overworld.h" -#include "fieldmap.h" -#include "metatile_behavior.h" -#include "field_weather.h" -#include "field_player_avatar.h" -#include "field_camera.h" -#include "field_screen.h" -#include "field_map_obj.h" -#include "list_menu.h" -#include "menu_helpers.h" -#include "new_menu_helpers.h" -#include "menu_indicators.h" -#include "sound.h" -#include "event_scripts.h" -#include "event_data.h" -#include "region_map.h" -#include "player_pc.h" -#include "strings.h" -#include "tv.h" -#include "secret_base.h" -#include "tilesets.h" -#include "item_icon.h" -#include "trader.h" -#include "map_object_constants.h" -#include "decoration_inventory.h" -#include "decoration.h" -#include "graphics.h" - -// Static type declarations - -#define OVERWORLD_PLACE_DECOR_SELECTOR_PAL_TAG 0xbe5 -#define OVERWORLD_PLACE_DECOR_PLAYER_PAL_TAG 0x008 - -struct DecorPCBuffer { - struct ListMenuItem items[41]; - u8 names[41][24]; - u8 unk_520; - u8 unk_521; - u8 unk_522; -}; - -struct PlaceDecorationGraphicsDataBuffer { - /*0x000; 0x0203a190*/ const struct Decoration *decoration; - /*0x004; 0x0203a194*/ u16 tiles[0x40]; - /*0x084; 0x0203a214*/ u8 image[0x800]; - /*0x884; 0x0203aa14*/ u16 palette[16]; -}; - -struct DecorRearrangementDataBuffer { - u8 idx; - u8 width; - u8 height; - u16 flagId; -}; - -// Static RAM declarations - -EWRAM_DATA u8 *gCurDecorInventoryItems = NULL; -EWRAM_DATA u8 sSecretBasePCMenuCursorPos = 0; -EWRAM_DATA u8 sCurDecorCatCount = 0; -EWRAM_DATA u8 sSecretBaseItemsIndicesBuffer[16] = {}; -EWRAM_DATA u8 sPlayerRoomItemsIndicesBuffer[12] = {}; -EWRAM_DATA u16 sSecretBasePCSelectDecorLineNo = 0; -EWRAM_DATA u16 sSecretBasePCSelectDecorPageNo = 0; -EWRAM_DATA u8 gCurDecorationIndex = 0; -EWRAM_DATA u8 sCurDecorationCategory = DECORCAT_DESK; -EWRAM_DATA u32 filler_0203a174[2] = {}; -EWRAM_DATA struct DecorPCPointers gUnknown_0203A17C = {}; -EWRAM_DATA u8 sDecorMenuWindowIndices[4] = {}; -EWRAM_DATA struct DecorPCBuffer *sDecorPCBuffer = NULL; -EWRAM_DATA struct PlaceDecorationGraphicsDataBuffer sPlaceDecorationGraphicsDataBuffer = {}; -EWRAM_DATA u16 sCurDecorMapX = 0; -EWRAM_DATA u16 sCurDecorMapY = 0; -EWRAM_DATA u8 sDecor_CameraSpriteObjectIdx1 = 0; -EWRAM_DATA u8 sDecor_CameraSpriteObjectIdx2 = 0; -EWRAM_DATA u8 sDecorationLastDirectionMoved = 0; -EWRAM_DATA struct OamData sDecorSelectorOam = {}; -EWRAM_DATA struct DecorRearrangementDataBuffer sDecorRearrangementDataBuffer[16] = {}; -EWRAM_DATA u8 sCurDecorSelectedInRearrangement = 0; - -// Static ROM declarations - -void sub_8126B80(u8 taskId); -void sub_8126C08(void); -void SecretBasePC_Decorate(u8 taskId); -void SecretBasePC_PutAway(u8 taskId); -void SecretBasePC_Toss(u8 taskId); -void sub_8126DA4(u8 taskId); -void SecretBasePC_Cancel(u8 taskId); -void SecretBasePC_PrepMenuForSelectingStoredDecors(u8 taskId); -void sub_8126DFC(u8 taskId); -void sub_8126E8C(u8 taskId); -void sub_8126F68(u8 winid, u8 decorCat, u8 x, u8 y, bool8 flag, u8 speed); -void sub_8127058(u8 *str, bool8 flag); -void sub_8127088(u8 taskId); -void sub_81270E8(u8 taskId); -void sub_8127180(u8 taskId); -void sub_812719C(u8 taskId); -void sub_81271CC(u8 taskId); -void sub_8127268(u8 taskId); -void sub_8127454(u8 *dest, u16 decorId); -void sub_8127480(u32 a0, bool8 flag, struct ListMenu *menu); -void sub_81274A0(u8 a0, s32 a1, u8 a2); -void sub_8127620(u8 taskId); -void sub_812764C(u8 taskId); -void sub_8127744(u32 a0); -void sub_81277A8(void); -bool8 sub_81277BC(u8 idx); -bool8 sub_81277E8(u8 idx); -void IdentifyOwnedDecorationsCurrentlyInUse(u8 taskId); -void sub_812759C(u8 taskId); -void sub_8127718(u8 decorCat); -void sub_8127A30(u8 taskId); -void sub_8127A8C(u8 taskId); -void sub_8127F68(u8 taskId); -void sub_8128060(u8 taskId); -void ConfigureCameraObjectForPlacingDecoration(struct PlaceDecorationGraphicsDataBuffer *data, u8 decor); -void SetUpPlacingDecorationPlayerAvatar(u8 taskId, struct PlaceDecorationGraphicsDataBuffer *data); -void sub_812826C(u8 taskId); -void sub_81283BC(u8 taskId); -void sub_8128414(u8 taskId); -void sub_8128950(u8 taskId); -void sub_81289D0(u8 taskId); -void sub_81289F0(u8 taskId); -void sub_8128AAC(u8 taskId); -void sub_8128B80(u8 taskId); -void sub_8128BA0(u8 taskId); -void sub_8128BBC(u8 taskId); -void c1_overworld_prev_quest(u8 taskId); -void sub_8128CD4(void); -void sub_8128DE0(void); -void sub_8128FD8(u8 taskId); -void sub_8129020(u8 taskId); -void sub_81292D0(struct Sprite *sprite); -void sub_81292E8(struct Sprite *sprite); -u8 gpu_pal_decompress_alloc_tag_and_upload(struct PlaceDecorationGraphicsDataBuffer *data, u8 decor); -const u8 *GetDecorationIconPicOrPalette(u16 decor, u8 mode); -bool8 sub_81299AC(u8 taskId); -void sub_8129ABC(u8 taskId); -void sub_8129B34(u8 taskId); -void sub_8129BCC(u8 taskId); -void sub_8129BF8(u8 taskId); -void sub_8129C74(u8 taskId); -void sub_8129D64(u8 taskId); -void sub_812A0E8(u8 taskId); -void sub_812A1A0(u8 taskId); -void sub_812A1C0(u8 taskId); -void sub_812A1F0(u8 taskId); -void sub_812A210(u8 taskId); -void sub_812A22C(u8 taskId); -void sub_812A25C(u8 taskId); -void sub_812A334(void); -void sub_812A36C(struct Sprite *sprite); -void sub_812A39C(void); -void sub_812A3C8(void); -void sub_812A3D4(u8 taskId); -void sub_812A458(u8 taskId); -void sub_812A478(u8 taskId); - -// .rodata - -#include "data/decoration/tiles.h" -#include "data/decoration/description.h" -#include "data/decoration/header.h" - -const u8 *const sDecorCatNames[] = { - gText_Desk, - gText_Chair, - gText_Plant, - gText_Ornament, - gText_Mat, - gText_Poster, - gText_Doll, - gText_Cushion -}; - -const struct MenuAction sSecretBasePCMenuActions[] = { - { - gText_Decorate, {.void_u8=SecretBasePC_Decorate} - }, { - gText_PutAway, {.void_u8=SecretBasePC_PutAway} - }, { - gText_Toss2, {.void_u8=SecretBasePC_Toss} - }, { - gText_Cancel, {.void_u8=SecretBasePC_Cancel} - } -}; - -const u8 *const sSecretBasePCMenuItemDescriptions[] = { - gText_PutOutSelectedDecorItem, - gText_StoreChosenDecorInPC, - gText_ThrowAwayUnwantedDecors, - gText_GoBackPrevMenu -}; - -void (*const SecretBasePC_SelectedDecorActions[][2])(u8 taskId) = { - { - sub_8127F68, sub_8127A8C - }, { - sub_812A3D4, sub_8127A8C - }, { - sub_8133DA0, sub_8127A8C - } -}; - -const struct WindowTemplate gUnknown_085A6B90[4] = { - { 0, 1, 1, 18, 8, 15, 0x0001 }, - { 0, 1, 1, 13, 18, 13, 0x0091 }, - { 0, 17, 1, 12, 2, 15, 0x017b }, - { 0, 16, 13, 13, 6, 15, 0x0193 } -}; - -const u16 gUnknown_085A6BB0[] = INCBIN_U16("graphics/decorations/unk_85a6bb0.gbapal"); - -const struct ListMenuTemplate gUnknown_085A6BD0 = { - NULL, - sub_8127480, - sub_81274A0, - 0, 0, - 0, 0, 8, 0, - 9, 2, 1, 3, FALSE, 0, FALSE, 7 -}; - -#include "data/decoration/icon.h" -#include "data/decoration/tilemaps.h" - -const struct { - u8 shape; - u8 size; - u8 x; - u8 y; -} gUnknown_085A7250[] = { - {0, 1, 0x78, 0x4e}, - {1, 2, 0x80, 0x4e}, - {1, 3, 0x90, 0x56}, - {1, 3, 0x90, 0x46}, - {0, 2, 0x80, 0x46}, - {2, 2, 0x78, 0x46}, - {2, 3, 0x80, 0x56}, - {2, 3, 0x80, 0x36}, - {0, 3, 0x90, 0x46}, - {1, 3, 0x90, 0x46} -}; - -const union AnimCmd gUnknown_085A7278[] = { - ANIMCMD_FRAME(0, 0, FALSE, FALSE), - ANIMCMD_END -}; - -const union AnimCmd *const sDecorSelectorAnims[] = { - gUnknown_085A7278 -}; - -const struct SpriteFrameImage sDecorSelectorSpriteFrameImages = { - (const u8 *)&sPlaceDecorationGraphicsDataBuffer.image, 0x800 -}; - -const struct SpriteTemplate sDecorSelectorSpriteTemplate = { - 0xffff, - OVERWORLD_PLACE_DECOR_SELECTOR_PAL_TAG, - &sDecorSelectorOam, - sDecorSelectorAnims, - &sDecorSelectorSpriteFrameImages, - gDummySpriteAffineAnimTable, - SpriteCallbackDummy -}; - -const struct SpriteTemplate sDecorWhilePlacingSpriteTemplate = { - 0x0000, - 0x0000, - &sDecorSelectorOam, - sDecorSelectorAnims, - NULL, - gDummySpriteAffineAnimTable, - SpriteCallbackDummy -}; - -const struct SpritePalette gUnknown_085A72BC = { - (const u16 *)&sPlaceDecorationGraphicsDataBuffer.palette, OVERWORLD_PLACE_DECOR_SELECTOR_PAL_TAG -}; - -const struct YesNoFuncTable gUnknown_085A72C4 = { - sub_81289F0, - sub_8128FD8 -}; - -const struct YesNoFuncTable gUnknown_085A72CC = { - sub_8128BA0, - sub_8128FD8 -}; - -const struct YesNoFuncTable gUnknown_085A72D4[] = { - { - sub_81283BC, - sub_8128414 - }, { - sub_8129BCC, - sub_8129BF8 - } -}; - -const u8 gUnknown_085A72E4[] = { - 0x04, 0x04, 0x04, 0x04, 0x00, 0x03, 0x03, 0x00 -}; - -const u8 gUnknown_085A72EC[] = { - 0x04, 0x04, 0x04, 0x04, 0x00, 0x04, 0x03, 0x00 -}; - -const u16 gUnknown_085A72F4[] = { - 0x04, 0x08, 0x10, 0x20, 0x10, 0x08, 0x10, 0x20, 0x40, 0x20 -}; - -const u16 Unknown_085A7308[] = INCBIN_U16("graphics/decorations/unk_85a7308.gbapal"); - -const u16 Unknown_085A7328[] = INCBIN_U16("graphics/decorations/unk_85a7328.gbapal"); - -const struct YesNoFuncTable gUnknown_085A7348 = { - sub_812A1C0, - sub_8129B34 -}; - -const struct YesNoFuncTable gUnknown_085A7350 = { - sub_812A210, - sub_8129B34 -}; - -const u8 Unknown_085A7358[] = INCBIN_U8("graphics/misc/decoration_unk_85a7358.4bpp"); - -const struct SpritePalette gUnknown_085A73D8 = { - Unknown_085A7308, OVERWORLD_PLACE_DECOR_PLAYER_PAL_TAG -}; - -const struct SpritePalette gUnknown_085A73E0 = { - Unknown_085A7328, OVERWORLD_PLACE_DECOR_PLAYER_PAL_TAG -}; - -const struct OamData Unknown_085A73E8 = { - .size = 1, .priority = 1 -}; - -const union AnimCmd Unknown_085A73F0[] = { - ANIMCMD_FRAME(0, 0, 0), - ANIMCMD_END -}; - -const union AnimCmd *const Unknown_085A73F8[] = { - Unknown_085A73F0 -}; - -const struct SpriteFrameImage Unknown_085A73FC = { - Unknown_085A7358, 0x80 -}; - -const struct SpriteTemplate gUnknown_085A7404 = { - 0xFFFF, - OVERWORLD_PLACE_DECOR_PLAYER_PAL_TAG, - &Unknown_085A73E8, - Unknown_085A73F8, - &Unknown_085A73FC, - gDummySpriteAffineAnimTable, - sub_812A36C -}; - -const struct YesNoFuncTable gUnknown_085A741C = { - sub_812A478, - sub_8127A30 -}; - -// .text - -void sub_8126968(void) -{ - if (sCurDecorationCategory < 8) - { - gCurDecorInventoryItems = gDecorationInventories[sCurDecorationCategory].items; - } - if (gUnknown_0203A17C.isPlayerRoom == FALSE) - { - gUnknown_0203A17C.items = gSaveBlock1Ptr->secretBases[0].decorations; - gUnknown_0203A17C.pos = gSaveBlock1Ptr->secretBases[0].decorationPos; - } - if (gUnknown_0203A17C.isPlayerRoom == TRUE) - { - gUnknown_0203A17C.items = gSaveBlock1Ptr->playerRoomDecor; - gUnknown_0203A17C.pos = gSaveBlock1Ptr->playerRoomDecorPos; - } -} - -u8 sub_81269D4(u8 idx) -{ - u8 *winidx; - struct WindowTemplate template; - - winidx = &sDecorMenuWindowIndices[idx]; - if (idx == 0) - { - template = gUnknown_085A6B90[0]; - template.width = GetMaxWidthInMenuTable(sSecretBasePCMenuActions, 4); - if (template.width > 18) - { - template.width = 18; - } - *winidx = AddWindow(&template); - } - else - { - *winidx = AddWindow(&gUnknown_085A6B90[idx]); - } - SetWindowBorderStyle(*winidx, 0, 0x214, 0xe); - schedule_bg_copy_tilemap_to_vram(0); - return *winidx; -} - -void sub_8126A58(u8 idx) -{ - sub_8198070(sDecorMenuWindowIndices[idx], FALSE); - ClearWindowTilemap(sDecorMenuWindowIndices[idx]); - RemoveWindow(sDecorMenuWindowIndices[idx]); - schedule_bg_copy_tilemap_to_vram(0); -} - -void sub_8126A88(void) -{ - u8 idx; - - idx = sub_81269D4(0); - PrintMenuTable(idx, 4, sSecretBasePCMenuActions); - InitMenuInUpperLeftCornerPlaySoundWhenAPressed(idx, 4, sSecretBasePCMenuCursorPos); -} - -void sub_8126ABC(void) -{ - sSecretBasePCMenuCursorPos = 0; - ScriptContext2_Enable(); - sub_8126A88(); - sub_8126C08(); -} - -void sub_8126AD8(u8 taskId) -{ - sub_8126ABC(); - gUnknown_0203A17C.items = gSaveBlock1Ptr->secretBases[0].decorations; - gUnknown_0203A17C.pos = gSaveBlock1Ptr->secretBases[0].decorationPos; - gUnknown_0203A17C.size = sizeof(gSaveBlock1Ptr->secretBases[0].decorations); - gUnknown_0203A17C.isPlayerRoom = FALSE; - gTasks[taskId].func = sub_8126B80; -} - -void sub_8126B2C(u8 taskId) -{ - sub_8126ABC(); - gUnknown_0203A17C.items = gSaveBlock1Ptr->playerRoomDecor; - gUnknown_0203A17C.pos = gSaveBlock1Ptr->playerRoomDecorPos; - gUnknown_0203A17C.size = sizeof(gSaveBlock1Ptr->playerRoomDecor); - gUnknown_0203A17C.isPlayerRoom = TRUE; - gTasks[taskId].func = sub_8126B80; -} - -void sub_8126B80(u8 taskId) -{ - u8 menuPos; - - if (!gPaletteFade.active) - { - menuPos = GetMenuCursorPos(); - switch (ProcessMenuInput()) - { - default: - PlaySE(SE_SELECT); - sSecretBasePCMenuActions[sSecretBasePCMenuCursorPos].func.void_u8(taskId); - break; - case -2: - sSecretBasePCMenuCursorPos = GetMenuCursorPos(); - if ((s8)menuPos != sSecretBasePCMenuCursorPos) - { - sub_8126C08(); - } - break; - case -1: - PlaySE(SE_SELECT); - SecretBasePC_Cancel(taskId); - break; - } - } -} - -void sub_8126C08(void) -{ - FillWindowPixelBuffer(0, 0x11); - AddTextPrinterParametrized(0, 1, sSecretBasePCMenuItemDescriptions[sSecretBasePCMenuCursorPos], 0, 0, 2, 1, 3); -} - -void SecretBasePC_Decorate(u8 taskId) -{ - if (CountDecorations() == 0) - { - StringExpandPlaceholders(gStringVar4, gText_NoDecorations); - DisplayItemMessageOnField(taskId, gStringVar4, sub_8126DA4); - } - else - { - gTasks[taskId].data[11] = 0; - sCurDecorationCategory = DECORCAT_DESK; - SecretBasePC_PrepMenuForSelectingStoredDecors(taskId); - } -} - -void SecretBasePC_PutAway(u8 taskId) -{ - if (!sub_81299AC(taskId)) - { - StringExpandPlaceholders(gStringVar4, gText_NoDecorationsInUse); - DisplayItemMessageOnField(taskId, gStringVar4, sub_8126DA4); - } - else - { - sub_8126A58(0); - sub_8197434(0, 0); - fade_screen(1, 0); - gTasks[taskId].data[2] = 0; - gTasks[taskId].func = sub_8129ABC; - } -} - -void SecretBasePC_Toss(u8 taskId) -{ - if (CountDecorations() == 0) - { - StringExpandPlaceholders(gStringVar4, gText_NoDecorations); - DisplayItemMessageOnField(taskId, gStringVar4, sub_8126DA4); - } - else - { - gTasks[taskId].data[11] = 1; - sCurDecorationCategory = DECORCAT_DESK; - SecretBasePC_PrepMenuForSelectingStoredDecors(taskId); - } -} - -void SecretBasePC_Cancel(u8 taskId) -{ - sub_8126A58(0); - if (!gUnknown_0203A17C.isPlayerRoom) - { - ScriptContext1_SetupScript(gUnknown_0823B4E8); - DestroyTask(taskId); - } - else - { - sub_816B060(taskId); - } -} - -void sub_8126DA4(u8 taskId) -{ - sub_8126C08(); - gTasks[taskId].func = sub_8126B80; -} - -void SecretBasePC_PrepMenuForSelectingStoredDecors(u8 taskId) -{ - LoadPalette(gUnknown_085A6BB0, 0xd0, 0x20); - sub_8197434(0, 0); - sub_8126A58(0); - sub_8126DFC(taskId); -} - -void sub_8126DFC(u8 taskId) -{ - u8 winIdx; - - winIdx = sub_81269D4(1); - sub_8126E8C(taskId); - InitMenuInUpperLeftCornerPlaySoundWhenAPressed(winIdx, 9, sCurDecorationCategory); - gTasks[taskId].func = sub_8127088; -} - -void sub_8126E44(u8 taskId) -{ - FillWindowPixelBuffer(sDecorMenuWindowIndices[1], 0x11); - sub_8126E8C(taskId); - InitMenuInUpperLeftCornerPlaySoundWhenAPressed(sDecorMenuWindowIndices[1], 9, sCurDecorationCategory); - gTasks[taskId].func = sub_8127088; -} - -void sub_8126E8C(u8 taskId) -{ - s16 *data; - u8 r5; - bool8 r8; - u8 i; - bool8 fl; - - data = gTasks[taskId].data; - r5 = sDecorMenuWindowIndices[1]; - fl = gUnknown_0203A17C.isPlayerRoom; - r8 = FALSE; - if (fl == TRUE && data[11] == 0) - { - r8 = TRUE; - } - for (i = 0; i < 8; i ++) - { - if (r8 == TRUE && i != DECORCAT_DOLL && i != DECORCAT_CUSHION) - { - sub_8126F68(r5, i, 8, i << 4, TRUE, 0xFF); - } - else - { - sub_8126F68(r5, i, 8, i << 4, FALSE, 0xFF); - } - } - PrintTextOnWindow(r5, 1, gTasks[taskId].data[11] == 2 ? gText_Exit : gText_Cancel, 8, (i << 4) + 1, 0, 0); - schedule_bg_copy_tilemap_to_vram(0); -} - -void sub_8126F68(u8 winid, u8 decorCat, u8 x, u8 y, bool8 flag, u8 speed) -{ - u8 width; - u8 *strbuf; - - width = x == 8 ? 0x68 : 0x60; - y ++; - sub_8127058(gStringVar4, flag); - strbuf = StringLength(gStringVar4) + gStringVar4; - StringCopy(strbuf, sDecorCatNames[decorCat]); - PrintTextOnWindow(winid, 1, gStringVar4, x, y, speed, NULL); - strbuf = ConvertIntToDecimalStringN(strbuf, CountDecorationCategoryN(decorCat), STR_CONV_MODE_RIGHT_ALIGN, 2); - *strbuf++ = CHAR_SLASH; - ConvertIntToDecimalStringN(strbuf, gDecorationInventories[decorCat].size, STR_CONV_MODE_RIGHT_ALIGN, 2); - x = GetStringRightAlignXOffset(1, gStringVar4, width); - PrintTextOnWindow(winid, 1, gStringVar4, x, y, speed, NULL); -} - -void sub_8127058(u8 *str, bool8 flag) -{ - StringCopy(str, gText_Color161Shadow161); - if (flag == TRUE) - { - str[2] = 0x04; // RED - str[5] = 0x05; // LIGHT_RED - } - else - { - str[2] = 0x02; // DARK_GREY - str[5] = 0x03; // LIGHT_GREY - } -} - -void sub_8127088(u8 taskId) -{ - s8 input; - - if (!gPaletteFade.active) - { - input = ProcessMenuInput(); - switch (input) - { - case -1: - case 8: - PlaySE(SE_SELECT); - sub_812719C(taskId); - break; - case -2: - break; - default: - PlaySE(SE_SELECT); - sCurDecorationCategory = input; - sub_81270E8(taskId); - break; - } - } -} - -void sub_81270E8(u8 taskId) -{ - sCurDecorCatCount = CountDecorationCategoryN(sCurDecorationCategory); - if (sCurDecorCatCount != 0) - { - CondenseDecorationCategoryN(sCurDecorationCategory); - gCurDecorInventoryItems = gDecorationInventories[sCurDecorationCategory].items; - IdentifyOwnedDecorationsCurrentlyInUse(taskId); - sSecretBasePCSelectDecorPageNo = 0; - sSecretBasePCSelectDecorLineNo = 0; - gTasks[taskId].func = sub_8127620; - } - else - { - sub_8126A58(1); - StringExpandPlaceholders(gStringVar4, gText_NoDecorations); - DisplayItemMessageOnField(taskId, gStringVar4, sub_8127180); - } -} - -void sub_8127180(u8 taskId) -{ - sub_8197434(0, 0); - sub_8126DFC(taskId); -} - -void sub_812719C(u8 taskId) -{ - if (gTasks[taskId].data[11] != 2) - { - sub_81271CC(taskId); - } - else - { - sub_8127268(taskId); - } -} - -void sub_81271CC(u8 taskId) -{ - sub_8126A58(1); - sub_8126A88(); - sub_81973C4(0, 0); - sub_8126C08(); - gTasks[taskId].func = sub_8126B80; -} - -void sub_8127208(u8 taskId) -{ - LoadPalette(gUnknown_085A6BB0, 0xd0, 0x20); - sub_8197434(0, 0); - gTasks[taskId].data[11] = 2; - sCurDecorationCategory = DECORCAT_DESK; - sub_8126DFC(taskId); -} - -void sub_8127250(u8 *dest, u8 decorCat) -{ - StringCopy(dest, sDecorCatNames[decorCat]); -} - -void sub_8127268(u8 taskId) -{ - sub_8126A58(1); - sub_8133E1C(taskId); -} - -void sub_8127284(void) -{ - sDecorPCBuffer->unk_520 = sCurDecorCatCount + 1; - if (sDecorPCBuffer->unk_520 > 8) - { - sDecorPCBuffer->unk_521 = 8; - } - else - { - sDecorPCBuffer->unk_521 = sDecorPCBuffer->unk_520; - } -} - -void sub_81272C8(void) -{ - sub_812225C(&sSecretBasePCSelectDecorPageNo, &sSecretBasePCSelectDecorLineNo, sDecorPCBuffer->unk_521, sDecorPCBuffer->unk_520); -} - -void sub_81272F8(void) -{ - sub_8122298(&sSecretBasePCSelectDecorPageNo, &sSecretBasePCSelectDecorLineNo, sDecorPCBuffer->unk_521, sDecorPCBuffer->unk_520, 8); -} - -void sub_8127330(u8 taskId) -{ - s16 *data; - u16 i; - - data = gTasks[taskId].data; - if ((sCurDecorationCategory < DECORCAT_DOLL || sCurDecorationCategory > DECORCAT_CUSHION) && gUnknown_0203A17C.isPlayerRoom == TRUE && data[11] == 0) - { - sub_8127058(gStringVar1, TRUE); - } - else - { - sub_8127058(gStringVar1, FALSE); - } - for (i = 0; i < sDecorPCBuffer->unk_520 - 1; i ++) - { - sub_8127454(sDecorPCBuffer->names[i], gCurDecorInventoryItems[i]); - sDecorPCBuffer->items[i].unk_00 = sDecorPCBuffer->names[i]; - sDecorPCBuffer->items[i].unk_04 = i; - } - StringCopy(sDecorPCBuffer->names[i], gText_Cancel); - sDecorPCBuffer->items[i].unk_00 = sDecorPCBuffer->names[i]; - sDecorPCBuffer->items[i].unk_04 = -2; - gUnknown_03006310 = gUnknown_085A6BD0; - gUnknown_03006310.unk_10 = sDecorMenuWindowIndices[1]; - gUnknown_03006310.unk_0c = sDecorPCBuffer->unk_520; - gUnknown_03006310.unk_00 = sDecorPCBuffer->items; - gUnknown_03006310.unk_0e = sDecorPCBuffer->unk_521; -} - -void sub_8127454(u8 *dest, u16 decorId) -{ - StringCopy(dest, gStringVar1); - StringAppend(dest, gDecorations[decorId].name); -} - -void sub_8127480(u32 a0, bool8 flag, struct ListMenu *menu) -{ - if (flag != TRUE) - { - PlaySE(SE_SELECT); - } - sub_8127744(a0); -} - -void sub_81274A0(u8 a0, s32 a1, u8 a2) -{ - if (a1 != -2) - { - if (sub_81277BC(a1 + 1) == TRUE) - { - blit_move_info_icon(a0, 0x18, 0x5c, a2 + 2); - } - else if (sub_81277E8(a1 + 1) == TRUE) - { - blit_move_info_icon(a0, 0x19, 0x5c, a2 + 2); - } - } -} - -void sub_8127500(void) -{ - if (sDecorPCBuffer->unk_522 == 0xFF) - { - sDecorPCBuffer->unk_522 = AddScrollIndicatorArrowPairParametrized(0x02, 0x3c, 0x0c, 0x94, sDecorPCBuffer->unk_520 - sDecorPCBuffer->unk_521, 0x6e, 0x6e, &sSecretBasePCSelectDecorPageNo); - } -} - -void sub_8127554(void) -{ - if (sDecorPCBuffer->unk_522 != 0xFF) - { - RemoveScrollIndicatorArrowPair(sDecorPCBuffer->unk_522); - sDecorPCBuffer->unk_522 = 0xFF; - } -} - -void sub_8127580(u8 taskId) -{ - sub_81269D4(1); - sub_812759C(taskId); -} - -void sub_812759C(u8 taskId) -{ - s16 *data; - - data = gTasks[taskId].data; - sub_81269D4(3); - sub_8127718(sCurDecorationCategory); - sDecorPCBuffer = calloc(1, sizeof(struct DecorPCBuffer)); - sDecorPCBuffer->unk_522 = 0xFF; - sub_8127284(); - sub_81272C8(); - sub_81272F8(); - sub_8127330(taskId); - data[13] = ListMenuInit(&gUnknown_03006310, sSecretBasePCSelectDecorPageNo, sSecretBasePCSelectDecorLineNo); - sub_8127500(); -} - -void sub_8127620(u8 taskId) -{ - sub_812759C(taskId); - gTasks[taskId].func = sub_812764C; -} - -void sub_812764C(u8 taskId) -{ - s16 *data; - s32 input; - - data = gTasks[taskId].data; - if (!gPaletteFade.active) - { - input = ListMenuHandleInput(data[13]); - get_coro_args_x18_x1A(data[13], &sSecretBasePCSelectDecorPageNo, &sSecretBasePCSelectDecorLineNo); - switch (input) - { - case -1: - break; - case -2: - PlaySE(SE_SELECT); - SecretBasePC_SelectedDecorActions[data[11]][1](taskId); - break; - default: - PlaySE(SE_SELECT); - gCurDecorationIndex = input; - sub_8127554(); - sub_81AE6C8(data[13], &sSecretBasePCSelectDecorPageNo, &sSecretBasePCSelectDecorLineNo); - sub_8126A58(1); - sub_81277A8(); - free(sDecorPCBuffer); - SecretBasePC_SelectedDecorActions[data[11]][0](taskId); - break; - } - } -} - -void sub_8127718(u8 decorCat) -{ - sub_8126F68(sub_81269D4(2), decorCat, 0, 0, 0, 0); -} - -void sub_8127744(u32 a0) -{ - u8 winidx; - const u8 *txt; - - winidx = sDecorMenuWindowIndices[3]; - FillWindowPixelBuffer(winidx, 0x11); - if (a0 >= sCurDecorCatCount) - { - txt = gText_GoBackPrevMenu; - } - else - { - txt = gDecorations[gCurDecorInventoryItems[a0]].description; - } - PrintTextOnWindow(winidx, 1, txt, 0, 1, 0, 0); -} - -void sub_81277A8(void) -{ - sub_8126A58(3); - sub_8126A58(2); -} - -bool8 sub_81277BC(u8 idx) -{ - u8 i; - - for (i = 0; i < 16; i ++) - { - if (sSecretBaseItemsIndicesBuffer[i] == idx) - { - return TRUE; - } - } - return FALSE; -} - -bool8 sub_81277E8(u8 idx) -{ - u8 i; - - for (i = 0; i < 12; i ++) - { - if (sPlayerRoomItemsIndicesBuffer[i] == idx) - { - return TRUE; - } - } - return FALSE; -} - -void IdentifyOwnedDecorationsCurrentlyInUseInternal(u8 taskId) -{ - u16 i; - u16 j; - u16 k; - u16 cnt; - - cnt = 0; - memset(sSecretBaseItemsIndicesBuffer, 0, 16); - memset(sPlayerRoomItemsIndicesBuffer, 0, 12); - for (i = 0; i < 16; i ++) - { - if (gSaveBlock1Ptr->secretBases[0].decorations[i] != DECOR_NONE) - { - for (j = 0; j < gDecorationInventories[sCurDecorationCategory].size; j ++) - { - if (gCurDecorInventoryItems[j] == gSaveBlock1Ptr->secretBases[0].decorations[i]) - { - for (k = 0; k < cnt && sSecretBaseItemsIndicesBuffer[k] != j + 1; k ++); - if (k == cnt) - { - sSecretBaseItemsIndicesBuffer[cnt] = j + 1; - cnt ++; - break; - } - } - } - } - } - cnt = 0; - for (i = 0; i < 12; i ++) - { - if (gSaveBlock1Ptr->playerRoomDecor[i] != DECOR_NONE) - { - for (j = 0; j < gDecorationInventories[sCurDecorationCategory].size; j ++) - { - if (gCurDecorInventoryItems[j] == gSaveBlock1Ptr->playerRoomDecor[i] && sub_81277BC(j + 1) != TRUE) - { - for (k = 0; k < cnt && sPlayerRoomItemsIndicesBuffer[k] != j + 1; k ++); - if (k == cnt) - { - sPlayerRoomItemsIndicesBuffer[cnt] = j + 1; - cnt ++; - break; - } - } - } - } - } -} - -void IdentifyOwnedDecorationsCurrentlyInUse(u8 taskId) -{ - IdentifyOwnedDecorationsCurrentlyInUseInternal(taskId); -} - -bool8 IsSelectedDecorInThePC(void) -{ - u16 i; - for (i = 0; i < 16; i ++) - { - if (sSecretBaseItemsIndicesBuffer[i] == sSecretBasePCSelectDecorPageNo + sSecretBasePCSelectDecorLineNo + 1) - { - return FALSE; - } - if (i < 12 && sPlayerRoomItemsIndicesBuffer[i] == sSecretBasePCSelectDecorPageNo + sSecretBasePCSelectDecorLineNo + 1) - { - return FALSE; - } - } - return TRUE; -} - -void sub_8127A14(u8 taskId) -{ - sub_81269D4(1); - sub_8127620(taskId); -} - -void sub_8127A30(u8 taskId) -{ - sub_8197434(0, 0); - gTasks[taskId].func = sub_8127A14; -} - -void sub_8127A5C(u8 taskId) -{ - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) - { - sub_8197434(0, 0); - sub_81269D4(1); - sub_8127620(taskId); - } -} - -void sub_8127A8C(u8 taskId) -{ - s16 *data; - - data = gTasks[taskId].data; - sub_8127554(); - sub_81277A8(); - sub_81AE6C8(data[13], NULL, NULL); - free(sDecorPCBuffer); - sub_8126E44(taskId); -} - -void sub_8127ACC(u8 taskId) -{ - gTasks[taskId].data[3] = gSaveBlock1Ptr->pos.x; - gTasks[taskId].data[4] = gSaveBlock1Ptr->pos.y; - PlayerGetDestCoords(&gTasks[taskId].data[0], &gTasks[taskId].data[1]); -} - -void sub_8127B04(u8 taskId) -{ - DrawWholeMapView(); - Overworld_SetWarpDestination(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1, gTasks[taskId].data[3], gTasks[taskId].data[4]); - warp_in(); -} - -u16 sub_8127B54(u8 decor, u8 a1) -{ - u16 resp; - - resp = -1; - switch (decor) - { - case DECOR_STAND: - resp = gUnknown_085A72E4[a1] << 12; - return resp; - case DECOR_SLIDE: - resp = gUnknown_085A72EC[a1] << 12; - return resp; - default: - return resp; - } -} - -void sub_8127B90(u16 mapX, u16 mapY, u8 decWidth, u8 decHeight, u16 decor) -{ - u16 i; - u16 j; - u16 behavior; - u16 flags; - u16 v0; - u16 v1; - s16 decLeft; - s16 decBottom; - - for (i = 0; i < decHeight; i ++) - { - decBottom = mapY - decHeight + 1 + i; - for (j = 0; j < decWidth; j ++) - { - decLeft = mapX + j; - behavior = GetBehaviorByMetatileId(0x200 + gDecorations[decor].tiles[i * decWidth + j]); - if (MetatileBehavior_IsMB_B9(behavior) == TRUE || (gDecorations[decor].permission != DECORPERM_PASS_FLOOR && (behavior >> 12))) - { - flags = 0xc00; - } - else - { - flags = 0x000; - } - if (gDecorations[decor].permission != DECORPERM_NA_WALL && MetatileBehavior_IsMB_B7(MapGridGetMetatileBehaviorAt(decLeft, decBottom)) == TRUE) - { - v0 = 1; - } - else - { - v0 = 0; - } - v1 = sub_8127B54(gDecorations[decor].id, i * decWidth + j); - if (v1 != 0xFFFF) - { - MapGridSetMetatileEntryAt(decLeft, decBottom, (gDecorations[decor].tiles[i * decWidth + j] + (0x200 | v0)) | flags | v1); - } - else - { - MapGridSetMetatileIdAt(decLeft, decBottom, (gDecorations[decor].tiles[i * decWidth + j] + (0x200 | v0)) | flags); - } - } - } -} - -void sub_8127D38(u16 mapX, u16 mapY, u16 decor) -{ - switch (gDecorations[decor].shape) - { - case DECORSHAPE_1x1: - sub_8127B90(mapX, mapY, 1, 1, decor); - break; - case DECORSHAPE_2x1: - sub_8127B90(mapX, mapY, 2, 1, decor); - break; - case DECORSHAPE_3x1: // unused - sub_8127B90(mapX, mapY, 3, 1, decor); - break; - case DECORSHAPE_4x2: - sub_8127B90(mapX, mapY, 4, 2, decor); - break; - case DECORSHAPE_2x2: - sub_8127B90(mapX, mapY, 2, 2, decor); - break; - case DECORSHAPE_1x2: - sub_8127B90(mapX, mapY, 1, 2, decor); - break; - case DECORSHAPE_1x3: // unused - sub_8127B90(mapX, mapY, 1, 3, decor); - break; - case DECORSHAPE_2x4: - sub_8127B90(mapX, mapY, 2, 4, decor); - break; - case DECORSHAPE_3x3: - sub_8127B90(mapX, mapY, 3, 3, decor); - break; - case DECORSHAPE_3x2: - sub_8127B90(mapX, mapY, 3, 2, decor); - break; - } -} - -void sub_8127E18(void) -{ - u8 i; - u8 j; - - for (i = 0; i < 14; i ++) - { - if (FlagGet(0xAE + i) == TRUE) - { - FlagClear(0xAE + i); - for (j = 0; j < gMapHeader.events->mapObjectCount; j ++) - { - if (gMapHeader.events->mapObjects[j].flagId == 0xAE + i) - { - break; - } - } - VarSet(0x3F20 + gMapHeader.events->mapObjects[j].graphicsId, sPlaceDecorationGraphicsDataBuffer.decoration->tiles[0]); - gSpecialVar_0x8005 = gMapHeader.events->mapObjects[j].localId; - gSpecialVar_0x8006 = sCurDecorMapX; - gSpecialVar_0x8007 = sCurDecorMapY; - show_sprite(gSpecialVar_0x8005, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); - sub_808EBA8(gSpecialVar_0x8005, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, gSpecialVar_0x8006, gSpecialVar_0x8007); - sub_808F254(gSpecialVar_0x8005, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); - break; - } - } -} - -bool8 sub_8127F38(void) -{ - u16 i; - - for (i = 0; i < gUnknown_0203A17C.size; i ++) - { - if (gUnknown_0203A17C.items[i] == DECOR_NONE) - { - return TRUE; - } - } - return FALSE; -} - -void sub_8127F68(u8 taskId) -{ - if (gUnknown_0203A17C.isPlayerRoom == TRUE && sCurDecorationCategory != DECORCAT_DOLL && sCurDecorationCategory != DECORCAT_CUSHION) - { - StringExpandPlaceholders(gStringVar4, gText_CantPlaceInRoom); - DisplayItemMessageOnField(taskId, gStringVar4, sub_8127A5C); - } - else if (IsSelectedDecorInThePC() == TRUE) - { - if (sub_8127F38() == TRUE) - { - fade_screen(1, 0); - gTasks[taskId].data[2] = 0; - gTasks[taskId].func = sub_8128060; - } - else - { - ConvertIntToDecimalStringN(gStringVar1, gUnknown_0203A17C.size, STR_CONV_MODE_RIGHT_ALIGN, 2); - if (gUnknown_0203A17C.isPlayerRoom == FALSE) { - StringExpandPlaceholders(gStringVar4, gText_NoMoreDecorations); - } - else - { - StringExpandPlaceholders(gStringVar4, gText_NoMoreDecorations2); - } - DisplayItemMessageOnField(taskId, gStringVar4, sub_8127A5C); - } - } - else - { - StringExpandPlaceholders(gStringVar4, gText_InUseAlready); - DisplayItemMessageOnField(taskId, gStringVar4, sub_8127A5C); - } -} - -void sub_8128060(u8 taskId) -{ - switch (gTasks[taskId].data[2]) - { - case 0: - if (!gPaletteFade.active) - { - sub_8127ACC(taskId); - gTasks[taskId].data[2] = 1; - } - break; - case 1: - gPaletteFade.bufferTransferDisabled = TRUE; - ConfigureCameraObjectForPlacingDecoration(&sPlaceDecorationGraphicsDataBuffer, gCurDecorInventoryItems[gCurDecorationIndex]); - sub_812826C(taskId); - SetUpPlacingDecorationPlayerAvatar(taskId, &sPlaceDecorationGraphicsDataBuffer); - pal_fill_black(); - gPaletteFade.bufferTransferDisabled = FALSE; - gTasks[taskId].data[2] = 2; - break; - case 2: - if (sub_80ABDFC() == TRUE) - { - gTasks[taskId].data[12] = 0; - sub_8128FD8(taskId); - } - break; - } -} - -void ConfigureCameraObjectForPlacingDecoration(struct PlaceDecorationGraphicsDataBuffer *data, u8 decor) -{ - sDecor_CameraSpriteObjectIdx1 = gSprites[gUnknown_03005DD0.unk4].data0; - gUnknown_03005DD0.unk4 = gpu_pal_decompress_alloc_tag_and_upload(data, decor); - gSprites[gUnknown_03005DD0.unk4].oam.priority = 1; - gSprites[gUnknown_03005DD0.unk4].callback = sub_81292D0; - gSprites[gUnknown_03005DD0.unk4].pos1.x = gUnknown_085A7250[data->decoration->shape].x; - gSprites[gUnknown_03005DD0.unk4].pos1.y = gUnknown_085A7250[data->decoration->shape].y; -} - -void SetUpPlacingDecorationPlayerAvatar(u8 taskId, struct PlaceDecorationGraphicsDataBuffer *data) -{ - u8 v0; - - v0 = 16 * (u8)gTasks[taskId].data[5] + gUnknown_085A7250[data->decoration->shape].x - 8 * ((u8)gTasks[taskId].data[5] - 1); - if (data->decoration->shape == DECORSHAPE_3x1 || data->decoration->shape == DECORSHAPE_3x3 || data->decoration->shape == DECORSHAPE_3x2) - { - v0 -= 8; - } - if (gSaveBlock2Ptr->playerGender == MALE) - { - sDecor_CameraSpriteObjectIdx2 = AddPseudoFieldObject(0xC1, SpriteCallbackDummy, v0, 0x48, 0); - } - else - { - sDecor_CameraSpriteObjectIdx2 = AddPseudoFieldObject(0xC2, SpriteCallbackDummy, v0, 0x48, 0); - } - gSprites[sDecor_CameraSpriteObjectIdx2].oam.priority = 1; - DestroySprite(&gSprites[sDecor_CameraSpriteObjectIdx1]); - sDecor_CameraSpriteObjectIdx1 = gUnknown_03005DD0.unk4; -} - -void sub_812826C(u8 taskId) -{ - switch (gDecorations[gCurDecorInventoryItems[gCurDecorationIndex]].shape) - { - case DECORSHAPE_1x1: - gTasks[taskId].data[5] = 1; - gTasks[taskId].data[6] = 1; - break; - case DECORSHAPE_2x1: - gTasks[taskId].data[5] = 2; - gTasks[taskId].data[6] = 1; - break; - case DECORSHAPE_3x1: - gTasks[taskId].data[5] = 3; - gTasks[taskId].data[6] = 1; - break; - case DECORSHAPE_4x2: - gTasks[taskId].data[5] = 4; - gTasks[taskId].data[6] = 2; - break; - case DECORSHAPE_2x2: - gTasks[taskId].data[5] = 2; - gTasks[taskId].data[6] = 2; - break; - case DECORSHAPE_1x2: - gTasks[taskId].data[5] = 1; - gTasks[taskId].data[6] = 2; - break; - case DECORSHAPE_1x3: - gTasks[taskId].data[5] = 1; - gTasks[taskId].data[6] = 3; - gTasks[taskId].data[1]++; - break; - case DECORSHAPE_2x4: - gTasks[taskId].data[5] = 2; - gTasks[taskId].data[6] = 4; - break; - case DECORSHAPE_3x3: - gTasks[taskId].data[5] = 3; - gTasks[taskId].data[6] = 3; - break; - case DECORSHAPE_3x2: - gTasks[taskId].data[5] = 3; - gTasks[taskId].data[6] = 2; - break; - } -} - -void sub_81283BC(u8 taskId) -{ - gTasks[taskId].data[10] = 0; - gSprites[sDecor_CameraSpriteObjectIdx1].data7 = 1; - gSprites[sDecor_CameraSpriteObjectIdx2].data7 = 1; - sub_8128DE0(); - sub_8128950(taskId); -} - -void sub_8128414(u8 taskId) -{ - gTasks[taskId].data[10] = 0; - gSprites[sDecor_CameraSpriteObjectIdx1].data7 = 1; - gSprites[sDecor_CameraSpriteObjectIdx2].data7 = 1; - sub_8128DE0(); - StringExpandPlaceholders(gStringVar4, gText_CancelDecorating); - DisplayItemMessageOnField(taskId, gStringVar4, sub_8128B80); -} - -bool8 sub_8128484(u8 behaviorAt, u16 behaviorBy) -{ - if (MetatileBehavior_IsMB_B3(behaviorAt) != TRUE || behaviorBy != 0) - { - return FALSE; - } - return TRUE; -} - -bool8 sub_81284AC(u8 taskId, s16 x, s16 y, u16 decor) -{ - if (x == gTasks[taskId].data[3] + 7 && y == gTasks[taskId].data[4] + 7 && decor != DECOR_NONE) - { - return FALSE; - } - return TRUE; -} - -bool8 sub_81284F4(u16 behaviorAt, const struct Decoration *decoration) -{ - if (MetatileBehavior_IsMB_B3(behaviorAt) != TRUE) - { - if (decoration->id == DECOR_SOLID_BOARD && MetatileBehavior_IsMB_C2(behaviorAt) == TRUE) - { - return TRUE; - } - if (MetatileBehavior_IsNormal(behaviorAt)) - { - return TRUE; - } - } - return FALSE; -} - -bool8 sub_812853C(u8 taskId, const struct Decoration *decoration) -{ - u8 i; - u8 j; - u8 behaviorAt; - u16 behaviorBy; - u8 mapY; - u8 mapX; - s16 curY; - s16 curX; - mapY = gTasks[taskId].data[6]; - mapX = gTasks[taskId].data[5]; - - switch (decoration->permission) - { - case DECORPERM_SOLID_FLOOR: - case DECORPERM_PASS_FLOOR: - for (i=0; i<mapY; i++) - { - curY = gTasks[taskId].data[1] - i; - for (j=0; j<mapX; j++) - { - curX = gTasks[taskId].data[0] + j; - behaviorAt = MapGridGetMetatileBehaviorAt(curX, curY); - behaviorBy = GetBehaviorByMetatileId(0x200 + decoration->tiles[(mapY - 1 - i) * mapX + j]) & 0xf000; - if (!sub_81284F4(behaviorAt, decoration)) - { - return FALSE; - } - if (!sub_81284AC(taskId, curX, curY, behaviorBy)) - { - return FALSE; - } - behaviorAt = GetFieldObjectIdByXYZ(curX, curY, 0); - if (behaviorAt != 0 && behaviorAt != 16) - { - return FALSE; - } - } - } - break; - case DECORPERM_BEHIND_FLOOR: - for (i=0; i<mapY-1; i++) - { - curY = gTasks[taskId].data[1] - i; - for (j=0; j<mapX; j++) - { - curX = gTasks[taskId].data[0] + j; - behaviorAt = MapGridGetMetatileBehaviorAt(curX, curY); - behaviorBy = GetBehaviorByMetatileId(0x200 + decoration->tiles[(mapY - 1 - i) * mapX + j]) & 0xf000; - if (!MetatileBehavior_IsNormal(behaviorAt) && !sub_8128484(behaviorAt, behaviorBy)) - { - return FALSE; - } - if (!sub_81284AC(taskId, curX, curY, behaviorBy)) - { - return FALSE; - } - if (GetFieldObjectIdByXYZ(curX, curY, 0) != 16) - { - return FALSE; - } - } - } - curY = gTasks[taskId].data[1] - mapY + 1; - for (j=0; j<mapX; j++) - { - curX = gTasks[taskId].data[0] + j; - behaviorAt = MapGridGetMetatileBehaviorAt(curX, curY); - behaviorBy = GetBehaviorByMetatileId(0x200 + decoration->tiles[j]) & 0xf000; - if (!MetatileBehavior_IsNormal(behaviorAt) && !MetatileBehavior_IsMB_B7(behaviorAt)) - { - return FALSE; - } - if (!sub_81284AC(taskId, curX, curY, behaviorBy)) - { - return FALSE; - } - behaviorAt = GetFieldObjectIdByXYZ(curX, curY, 0); - if (behaviorAt != 0 && behaviorAt != 16) - { - return FALSE; - } - } - break; - case DECORPERM_NA_WALL: - for (i=0; i<mapY; i++) - { - curY = gTasks[taskId].data[1] - i; - for (j=0; j<mapX; j++) - { - curX = gTasks[taskId].data[0] + j; - if (!MetatileBehavior_IsMB_B7(MapGridGetMetatileBehaviorAt(curX, curY))) - { - return FALSE; - } - if (MapGridGetMetatileIdAt(curX, curY + 1) == 0x28c) - { - return FALSE; - } - } - } - break; - case DECORPERM_SOLID_MAT: - curY = gTasks[taskId].data[1]; - for (j=0; j<mapX; j++) - { - curX = gTasks[taskId].data[0] + j; - behaviorAt = MapGridGetMetatileBehaviorAt(curX, curY); - if (decoration->shape == DECORSHAPE_1x2) - { - if (!MetatileBehavior_IsMB_C3(behaviorAt)) - { - return FALSE; - } - } - else if (!MetatileBehavior_IsMB_B5(behaviorAt)) - { - if (!MetatileBehavior_IsMB_C3(behaviorAt)) - { - return FALSE; - } - } - if (GetFieldObjectIdByXYZ(curX, curY, 0) != 16) - { - return FALSE; - } - } - break; - } - return TRUE; -} - -void sub_8128950(u8 taskId) -{ - if (sub_812853C(taskId, &gDecorations[gCurDecorInventoryItems[gCurDecorationIndex]]) == TRUE) - { - StringExpandPlaceholders(gStringVar4, gText_PlaceItHere); - DisplayItemMessageOnField(taskId, gStringVar4, sub_81289D0); - } - else - { - PlaySE(SE_HAZURE); - StringExpandPlaceholders(gStringVar4, gText_CantBePlacedHere); - DisplayItemMessageOnField(taskId, gStringVar4, sub_8129020); - } -} - -void sub_81289D0(u8 taskId) -{ - sub_8197930(); - sub_8121F68(taskId, &gUnknown_085A72C4); -} - -void sub_81289F0(u8 taskId) -{ - sub_8197434(0, 0); - sub_8128AAC(taskId); - if (gDecorations[gCurDecorInventoryItems[gCurDecorationIndex]].permission != DECORPERM_SOLID_MAT) - { - sub_8127D38(gTasks[taskId].data[0], gTasks[taskId].data[1], gCurDecorInventoryItems[gCurDecorationIndex]); - } - else - { - sCurDecorMapX = gTasks[taskId].data[0] - 7; - sCurDecorMapY = gTasks[taskId].data[1] - 7; - ScriptContext1_SetupScript(gUnknown_08275D1F); - } - gSprites[sDecor_CameraSpriteObjectIdx1].pos1.y += 2; - if (gMapHeader.regionMapSectionId == REGION_MAP_SECRET_BASE) - { - TV_PutSecretBaseVisitOnTheAir(); - } - sub_8128BBC(taskId); -} - -void sub_8128AAC(u8 taskId) -{ - u16 i; - - for (i = 0; i < gUnknown_0203A17C.size; i ++) - { - if (gUnknown_0203A17C.items[i] == DECOR_NONE) - { - gUnknown_0203A17C.items[i] = gCurDecorInventoryItems[gCurDecorationIndex]; - gUnknown_0203A17C.pos[i] = ((gTasks[taskId].data[0] - 7) << 4) + (gTasks[taskId].data[1] - 7); - break; - } - } - if (!gUnknown_0203A17C.isPlayerRoom) - { - for (i = 0; i < 16; i ++) - { - if (sSecretBaseItemsIndicesBuffer[i] == 0) - { - sSecretBaseItemsIndicesBuffer[i] = gCurDecorationIndex + 1; - break; - } - } - } - else - { - for (i = 0; i < 12; i ++) - { - if (sPlayerRoomItemsIndicesBuffer[i] == 0) - { - sPlayerRoomItemsIndicesBuffer[i] = gCurDecorationIndex + 1; - break; - } - } - } -} - -void sub_8128B80(u8 taskId) -{ - sub_8197930(); - sub_8121F68(taskId, &gUnknown_085A72CC); -} - -void sub_8128BA0(u8 taskId) -{ - sub_8197434(0, 0); - sub_8128BBC(taskId); -} - -void sub_8128BBC(u8 taskId) -{ - fade_screen(1, 0); - gTasks[taskId].data[2] = 0; - gTasks[taskId].func = c1_overworld_prev_quest; -} - -void c1_overworld_prev_quest(u8 taskId) -{ - switch (gTasks[taskId].data[2]) - { - case 0: - ScriptContext2_Enable(); - if (!gPaletteFade.active) - { - sub_8127B04(taskId); - gTasks[taskId].data[2] = 1; - } - break; - case 1: - sub_812A3C8(); - FreeSpritePaletteByTag(OVERWORLD_PLACE_DECOR_SELECTOR_PAL_TAG); - gFieldCallback = sub_8128CD4; - SetMainCallback2(c2_exit_to_overworld_2_switch); - DestroyTask(taskId); - break; - } -} - -void sub_8128C64(u8 taskId) -{ - s16 *data; - - data = gTasks[taskId].data; - switch (data[2]) - { - case 0: - sub_80E9578(); - data[2] ++; - break; - case 1: - ScriptContext1_SetupScript(gUnknown_08275D0C); - data[2] ++; - break; - case 2: - ScriptContext2_Enable(); - data[2] ++; - break; - case 3: - if (sub_80ABDFC() == TRUE) - { - gTasks[taskId].func = sub_812764C; - } - break; - } -} - -void sub_8128CD4(void) -{ - u8 taskId; - - ScriptContext2_Enable(); - pal_fill_black(); - taskId = CreateTask(sub_8128C64, 8); - sub_8127580(taskId); - gTasks[taskId].data[2] = 0; -} - -bool8 sub_8128D10(u8 taskId) -{ - s16 *data; - - data = gTasks[taskId].data; - if (sDecorationLastDirectionMoved == DIR_SOUTH && data[1] - data[6] - 6 < 0) - { - data[1] ++; - return FALSE; - } - if (sDecorationLastDirectionMoved == DIR_NORTH && data[1] - 7 >= gMapHeader.mapData->height) - { - data[1] --; - return FALSE; - } - if (sDecorationLastDirectionMoved == DIR_WEST && data[0] - 7 < 0) - { - data[0] ++; - return FALSE; - } - if (sDecorationLastDirectionMoved == DIR_EAST && data[0] + data[5] - 8 >= gMapHeader.mapData->width) - { - data[0] --; - return FALSE; - } - return TRUE; -} - -bool8 sub_8128DB4(void) -{ - u16 heldKeys; - - heldKeys = gMain.heldKeys & 0x0F0; - if (heldKeys != DPAD_UP && heldKeys != DPAD_DOWN && heldKeys != DPAD_LEFT && heldKeys != DPAD_RIGHT) - { - return FALSE; - } - return TRUE; -} - -void sub_8128DE0(void) -{ - sDecorationLastDirectionMoved = 0; - gSprites[sDecor_CameraSpriteObjectIdx1].data2 = 0; - gSprites[sDecor_CameraSpriteObjectIdx1].data3 = 0; -} - -void sub_8128E18(u8 taskId) -{ - s16 *data; - - data = gTasks[taskId].data; - if (!gSprites[sDecor_CameraSpriteObjectIdx1].data4) - { - if (data[10] == 1) - { - gUnknown_085A72D4[data[12]].yesFunc(taskId); - return; - } else if (data[10] == 2) - { - gUnknown_085A72D4[data[12]].noFunc(taskId); - return; - } - if ((gMain.heldKeys & 0x0F0) == DPAD_UP) - { - sDecorationLastDirectionMoved = DIR_SOUTH; - gSprites[sDecor_CameraSpriteObjectIdx1].data2 = 0; - gSprites[sDecor_CameraSpriteObjectIdx1].data3 = -2; - data[1]--; - } - if ((gMain.heldKeys & 0x0F0) == DPAD_DOWN) - { - sDecorationLastDirectionMoved = DIR_NORTH; - gSprites[sDecor_CameraSpriteObjectIdx1].data2 = 0; - gSprites[sDecor_CameraSpriteObjectIdx1].data3 = 2; - data[1]++; - } - if ((gMain.heldKeys & 0x0F0) == DPAD_LEFT) - { - sDecorationLastDirectionMoved = DIR_WEST; - gSprites[sDecor_CameraSpriteObjectIdx1].data2 = -2; - gSprites[sDecor_CameraSpriteObjectIdx1].data3 = 0; - data[0]--; - } - if ((gMain.heldKeys & 0x0F0) == DPAD_RIGHT) - { - sDecorationLastDirectionMoved = DIR_EAST; - gSprites[sDecor_CameraSpriteObjectIdx1].data2 = 2; - gSprites[sDecor_CameraSpriteObjectIdx1].data3 = 0; - data[0]++; - } - if (!sub_8128DB4() || !sub_8128D10(taskId)) - { - sub_8128DE0(); - } - } - if (sDecorationLastDirectionMoved) - { - gSprites[sDecor_CameraSpriteObjectIdx1].data4++; - gSprites[sDecor_CameraSpriteObjectIdx1].data4 &= 7; - } - if (!data[10]) - { - if (gMain.newKeys & A_BUTTON) - { - data[10] = A_BUTTON; - } - if (gMain.newKeys & B_BUTTON) - { - data[10] = B_BUTTON; - } - } -} - -void sub_8128FD8(u8 taskId) -{ - sub_8197434(0, 1); - gSprites[sDecor_CameraSpriteObjectIdx1].data7 = 0; - gTasks[taskId].data[10] = 0; - gTasks[taskId].func = sub_8128E18; -} - -void sub_8129020(u8 taskId) -{ - if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON) - { - sub_8128FD8(taskId); - } -} - -void sub_8129048(struct PlaceDecorationGraphicsDataBuffer *data) -{ - CpuFill16(0, data, sizeof(*data)); -} - -void sub_8129068(u16 *dest, u16 pal) -{ - CpuFastCopy(&((u16 *)gTilesetPointer_SecretBase->palettes)[pal << 4], dest, 32); -} - -void sub_8129088(u8 *dest, u16 tile) -{ - u8 buffer[32]; - u16 mode; - u16 i; - - mode = tile >> 10; - if (tile != 0) - { - tile &= 0x03FF; - } - CpuFastCopy(&((u8 *)gTilesetPointer_SecretBase->tiles)[tile << 5], buffer, 32); - switch (mode) - { - case 0: - CpuFastCopy(buffer, dest, 32); - break; - case 1: - for (i = 0; i < 8; i ++) - { - dest[4 * i] = (buffer[4 * (i + 1) - 1] >> 4) + ((buffer[4 * (i + 1) - 1] & 0x0F) << 4); - dest[4 * i + 1] = (buffer[4 * (i + 1) - 2] >> 4) + ((buffer[4 * (i + 1) - 2] & 0x0F) << 4); - dest[4 * i + 2] = (buffer[4 * (i + 1) - 3] >> 4) + ((buffer[4 * (i + 1) - 3] & 0x0F) << 4); - dest[4 * i + 3] = (buffer[4 * (i + 1) - 4] >> 4) + ((buffer[4 * (i + 1) - 4] & 0x0F) << 4); - } - break; - case 2: - for (i = 0; i < 8; i ++) - { - dest[4 * i] = buffer[4 * (7 - i)]; - dest[4 * i + 1] = buffer[4 * (7 - i) + 1]; - dest[4 * i + 2] = buffer[4 * (7 - i) + 2]; - dest[4 * i + 3] = buffer[4 * (7 - i) + 3]; - } - break; - case 3: - for (i = 0; i < 32; i ++) - { - dest[i] = (buffer[31 - i] >> 4) + ((buffer[31 - i] & 0x0F) << 4); - } - break; - } -} - -void sub_81291A4(struct PlaceDecorationGraphicsDataBuffer *data) -{ - u16 i; - for (i = 0; i < 64; i ++) - { - sub_8129088(&data->image[i * 32], data->tiles[i]); - } -} - -u16 sub_81291CC(u16 tile) -{ - return ((u16 *)gTilesetPointer_SecretBaseRedCave->metatiles)[tile] & 0xFFF; -} - -void sub_81291E8(struct PlaceDecorationGraphicsDataBuffer *data) -{ - u8 i; - u8 shape; - - shape = data->decoration->shape; - for (i = 0; i < gUnknown_085A71B0[shape].size; i ++) - { - data->tiles[gUnknown_085A71B0[shape].tiles[i]] = sub_81291CC(data->decoration->tiles[gUnknown_085A71B0[shape].y[i]] * 8 + gUnknown_085A71B0[shape].x[i]); - } -} - -void SetDecorSelectionBoxOamAttributes(u8 decorShape) -{ - sDecorSelectorOam.y = 0; - sDecorSelectorOam.affineMode = ST_OAM_AFFINE_OFF; - sDecorSelectorOam.objMode = ST_OAM_OBJ_NORMAL; - sDecorSelectorOam.mosaic = 0; - sDecorSelectorOam.bpp = ST_OAM_4BPP; - sDecorSelectorOam.shape = gUnknown_085A7250[decorShape].shape; - sDecorSelectorOam.x = 0; - sDecorSelectorOam.matrixNum = 0; - sDecorSelectorOam.size = gUnknown_085A7250[decorShape].size; - sDecorSelectorOam.tileNum = 0; - sDecorSelectorOam.priority = 0; - sDecorSelectorOam.paletteNum = 0; -} - -void sub_81292D0(struct Sprite *sprite) -{ - sprite->data2 = 0; - sprite->data3 = 0; - sprite->data4 = 0; - sprite->data5 = 0; - sprite->data6 = 0; - sprite->data7 = 0; - sprite->callback = sub_81292E8; -} - -void sub_81292E8(struct Sprite *sprite) -{ - if (sprite->data7 == 0) - { - if (sprite->data6 < 15) - { - sprite->invisible = FALSE; - } - else - { - sprite->invisible = TRUE; - } - sprite->data6 ++; - sprite->data6 &= 0x1F; - } - else - { - sprite->invisible = FALSE; - } -} - -u8 gpu_pal_decompress_alloc_tag_and_upload(struct PlaceDecorationGraphicsDataBuffer *data, u8 decor) -{ - sub_8129048(data); - data->decoration = &gDecorations[decor]; - if (data->decoration->permission == DECORPERM_SOLID_MAT) - { - return AddPseudoFieldObject(data->decoration->tiles[0], SpriteCallbackDummy, 0, 0, 1); - } - FreeSpritePaletteByTag(OVERWORLD_PLACE_DECOR_SELECTOR_PAL_TAG); - sub_81291E8(data); - SetDecorSelectionBoxOamAttributes(data->decoration->shape); - sub_81291A4(data); - sub_8129068(data->palette, ((u16 *)gTilesetPointer_SecretBaseRedCave->metatiles)[(data->decoration->tiles[0] * 8) + 7] >> 12); - LoadSpritePalette(&gUnknown_085A72BC); - return CreateSprite(&sDecorSelectorSpriteTemplate, 0, 0, 0); -} - -u8 AddDecorationIconObjectFromIconTable(u16 tilesTag, u16 paletteTag, u8 decor) -{ - struct SpriteSheet sheet; - struct CompressedSpritePalette palette; - struct SpriteTemplate *template; - u8 spriteId; - - if (!AllocItemIconTemporaryBuffers()) - { - return MAX_SPRITES; - } - LZDecompressWram(GetDecorationIconPicOrPalette(decor, 0), gUnknown_0203CEBC); - CopyItemIconPicTo4x4Buffer(gUnknown_0203CEBC, gUnknown_0203CEC0); - sheet.data = gUnknown_0203CEC0; - sheet.size = 0x200; - sheet.tag = tilesTag; - LoadSpriteSheet(&sheet); - palette.data = GetDecorationIconPicOrPalette(decor, 1); - palette.tag = paletteTag; - LoadCompressedObjectPalette(&palette); - template = malloc(sizeof(struct SpriteTemplate)); - *template = gUnknown_08614FF4; - template->tileTag = tilesTag; - template->paletteTag = paletteTag; - spriteId = CreateSprite(template, 0, 0, 0); - FreeItemIconTemporaryBuffers(); - free(template); - return spriteId; -} - -const u8 *GetDecorationIconPicOrPalette(u16 decor, u8 mode) -{ - if (decor > 120) - { - decor = DECOR_NONE; - } - return gUnknown_085A6BE8[decor][mode]; -} - -u8 AddDecorationIconObjectFromFieldObject(u16 tilesTag, u16 paletteTag, u8 decor) -{ - u8 spriteId; - struct SpriteSheet sheet; - struct SpritePalette palette; - struct SpriteTemplate *template; - - sub_8129048(&sPlaceDecorationGraphicsDataBuffer); - sPlaceDecorationGraphicsDataBuffer.decoration = &gDecorations[decor]; - if (sPlaceDecorationGraphicsDataBuffer.decoration->permission != DECORPERM_SOLID_MAT) - { - sub_81291E8(&sPlaceDecorationGraphicsDataBuffer); - SetDecorSelectionBoxOamAttributes(sPlaceDecorationGraphicsDataBuffer.decoration->shape); - sub_81291A4(&sPlaceDecorationGraphicsDataBuffer); - sub_8129068(sPlaceDecorationGraphicsDataBuffer.palette, ((u16 *)gTilesetPointer_SecretBaseRedCave->metatiles)[(sPlaceDecorationGraphicsDataBuffer.decoration->tiles[0] * 8) + 7] >> 12); - sheet.data = sPlaceDecorationGraphicsDataBuffer.image; - sheet.size = gUnknown_085A72F4[sPlaceDecorationGraphicsDataBuffer.decoration->shape] << 5; - sheet.tag = tilesTag; - LoadSpriteSheet(&sheet); - palette.data = sPlaceDecorationGraphicsDataBuffer.palette; - palette.tag = paletteTag; - LoadSpritePalette(&palette); - template = Alloc(sizeof(struct SpriteTemplate)); - *template = sDecorWhilePlacingSpriteTemplate; - template->tileTag = tilesTag; - template->paletteTag = paletteTag; - spriteId = CreateSprite(template, 0, 0, 0); - free(template); - } - else - { - spriteId = AddPseudoFieldObject(sPlaceDecorationGraphicsDataBuffer.decoration->tiles[0], SpriteCallbackDummy, 0, 0, 1); - } - return spriteId; -} - -u8 AddDecorationIconObject(u8 decor, s16 x, s16 y, u8 priority, u16 tilesTag, u16 paletteTag) -{ - u8 spriteId; - - if (decor > 120) - { - spriteId = AddDecorationIconObjectFromIconTable(tilesTag, paletteTag, DECOR_NONE); - if (spriteId == MAX_SPRITES) - { - return MAX_SPRITES; - } - gSprites[spriteId].pos2.x = x + 4; - gSprites[spriteId].pos2.y = y + 4; - } - else if (gUnknown_085A6BE8[decor][0] == NULL) - { - spriteId = AddDecorationIconObjectFromFieldObject(tilesTag, paletteTag, decor); - if (spriteId == MAX_SPRITES) - { - return MAX_SPRITES; - } - gSprites[spriteId].pos2.x = x; - if (decor == DECOR_SILVER_SHIELD || decor == DECOR_GOLD_SHIELD) - { - gSprites[spriteId].pos2.y = y - 4; - } - else - { - gSprites[spriteId].pos2.y = y; - } - } - else - { - spriteId = AddDecorationIconObjectFromIconTable(tilesTag, paletteTag, decor); - if (spriteId == MAX_SPRITES) - { - return MAX_SPRITES; - } - gSprites[spriteId].pos2.x = x + 4; - gSprites[spriteId].pos2.y = y + 4; - } - gSprites[spriteId].oam.priority = priority; - return spriteId; -} - -void sub_81296EC(u8 idx) -{ - gUnknown_0203A17C.items[idx] = 0; - gUnknown_0203A17C.pos[idx] = 0; -} - -void sub_8129708(void) -{ - u16 i; - - gSpecialVar_0x8005 = 0; - gScriptResult = 0; - if (gSpecialVar_0x8004 == sCurDecorSelectedInRearrangement) - { - gScriptResult = 1; - } - else if (gDecorations[gUnknown_0203A17C.items[sDecorRearrangementDataBuffer[gSpecialVar_0x8004].idx]].permission == DECORPERM_SOLID_MAT) - { - gSpecialVar_0x8005 = sDecorRearrangementDataBuffer[gSpecialVar_0x8004].flagId; - sub_81296EC(sDecorRearrangementDataBuffer[gSpecialVar_0x8004].idx); - for (i = 0; i < gMapHeader.events->mapObjectCount; i ++) - { - if (gMapHeader.events->mapObjects[i].flagId == gSpecialVar_0x8005) - { - gSpecialVar_0x8006 = gMapHeader.events->mapObjects[i].localId; - break; - } - } - } -} - -void sub_81297AC(void) -{ - u8 i; - - for (i = 0; i < gMapHeader.events->mapObjectCount; i ++) - { - if (gMapHeader.events->mapObjects[i].flagId == gSpecialVar_0x8004) - { - gSpecialVar_0x8005 = gMapHeader.events->mapObjects[i].localId; - break; - } - } -} - -void sub_81297F8(void) -{ - u8 i; - u8 y; - u8 x; - int posX; - int posY; - u8 perm; - - for (i = 0; i < sCurDecorSelectedInRearrangement; i ++) - { - perm = gDecorations[gUnknown_0203A17C.items[sDecorRearrangementDataBuffer[i].idx]].permission; - posX = gUnknown_0203A17C.pos[sDecorRearrangementDataBuffer[i].idx] >> 4; - posY = gUnknown_0203A17C.pos[sDecorRearrangementDataBuffer[i].idx] & 0x0F; - if (perm != DECORPERM_SOLID_MAT) - { - for (y = 0; y < sDecorRearrangementDataBuffer[i].height; y ++) - { - for (x = 0; x < sDecorRearrangementDataBuffer[i].width; x ++) - { - MapGridSetMetatileEntryAt(posX + 7 + x, posY + 7 - y, gMapHeader.mapData->map[posX + x + gMapHeader.mapData->width * (posY - y)] | 0x3000); - } - } - sub_81296EC(sDecorRearrangementDataBuffer[i].idx); - } - } -} - -void sub_81298EC(u8 taskId) -{ - switch (gTasks[taskId].data[2]) - { - case 0: - sub_81297F8(); - gTasks[taskId].data[2] = 1; - break; - case 1: - if (!gPaletteFade.active) { - DrawWholeMapView(); - ScriptContext1_SetupScript(gUnknown_08275D2E); - sub_8197434(0, 1); - gTasks[taskId].data[2] = 2; - } - break; - case 2: - ScriptContext2_Enable(); - IdentifyOwnedDecorationsCurrentlyInUseInternal(taskId); - pal_fill_black(); - gTasks[taskId].data[2] = 3; - break; - case 3: - if (sub_80ABDFC() == TRUE) - { - StringExpandPlaceholders(gStringVar4, gText_DecorationReturnedToPC); - DisplayItemMessageOnField(taskId, gStringVar4, sub_8129D64); - if (gMapHeader.regionMapSectionId == REGION_MAP_SECRET_BASE) - { - TV_PutSecretBaseVisitOnTheAir(); - } - } - break; - } -} - - -bool8 sub_81299AC(u8 taskId) -{ - u16 i; - - for (i = 0; i < gUnknown_0203A17C.size; i ++) - { - if (gUnknown_0203A17C.items[i] != DECOR_NONE) - { - return TRUE; - } - } - return FALSE; -} - -void SetUpPuttingAwayDecorationPlayerAvatar(void) -{ - player_get_direction_lower_nybble(); - sDecor_CameraSpriteObjectIdx1 = gSprites[gUnknown_03005DD0.unk4].data0; - sub_812A39C(); - gUnknown_03005DD0.unk4 = CreateSprite(&gUnknown_085A7404, 0x78, 0x50, 0); - if (gSaveBlock2Ptr->playerGender == MALE) - { - sDecor_CameraSpriteObjectIdx2 = AddPseudoFieldObject(0xC1, SpriteCallbackDummy, 0x88, 0x48, 0); - } - else - { - sDecor_CameraSpriteObjectIdx2 = AddPseudoFieldObject(0xC2, SpriteCallbackDummy, 0x88, 0x48, 0); - } - gSprites[sDecor_CameraSpriteObjectIdx2].oam.priority = 1; - DestroySprite(&gSprites[sDecor_CameraSpriteObjectIdx1]); - sDecor_CameraSpriteObjectIdx1 = gUnknown_03005DD0.unk4; - gSprites[sDecor_CameraSpriteObjectIdx1].oam.priority = 1; -} - -void sub_8129ABC(u8 taskId) -{ - s16 *data; - - data = gTasks[taskId].data; - switch (data[2]) - { - case 0: - if (!gPaletteFade.active) - { - sub_8127ACC(taskId); - data[2] = 1; - data[6] = 1; - data[5] = 1; - } - break; - case 1: - SetUpPuttingAwayDecorationPlayerAvatar(); - pal_fill_black(); - data[2] = 2; - break; - case 2: - if (sub_80ABDFC() == TRUE) - { - data[12] = 1; - sub_8129B34(taskId); - } - break; - } -} - -void sub_8129B34(u8 taskId) -{ - sub_8197434(0, 1); - gSprites[sDecor_CameraSpriteObjectIdx1].data7 = 0; - gSprites[sDecor_CameraSpriteObjectIdx1].invisible = FALSE; - gSprites[sDecor_CameraSpriteObjectIdx1].callback = sub_812A36C; - gSprites[sDecor_CameraSpriteObjectIdx2].pos1.x = 0x88; - gSprites[sDecor_CameraSpriteObjectIdx2].pos1.y = 0x48; - gTasks[taskId].data[10] = 0; - gTasks[taskId].func = sub_8128E18; -} - -void sub_8129BCC(u8 taskId) -{ - gTasks[taskId].data[10] = 0; - sub_8128DE0(); - sub_8129C74(taskId); -} - -void sub_8129BF8(u8 taskId) -{ - gTasks[taskId].data[10] = 0; - sub_8128DE0(); - gSprites[sDecor_CameraSpriteObjectIdx1].invisible = FALSE; - gSprites[sDecor_CameraSpriteObjectIdx1].callback = SpriteCallbackDummy; - StringExpandPlaceholders(gStringVar4, gText_StopPuttingAwayDecorations); - DisplayItemMessageOnField(taskId, gStringVar4, sub_812A1F0); -} - -void sub_8129C74(u8 taskId) -{ - s16 *data; - u8 behavior; - - sub_812A0E8(taskId); - if (sCurDecorSelectedInRearrangement != 0) - { - StringExpandPlaceholders(gStringVar4, gText_ReturnDecorationToPC); - DisplayItemMessageOnField(taskId, gStringVar4, sub_812A1A0); - } - else - { - data = gTasks[taskId].data; - behavior = MapGridGetMetatileBehaviorAt(data[0], data[1]); - if (MetatileBehavior_IsSecretBasePC(behavior) == TRUE || MetatileBehavior_IsMB_C5(behavior) == TRUE) - { - gSprites[sDecor_CameraSpriteObjectIdx1].invisible = FALSE; - gSprites[sDecor_CameraSpriteObjectIdx1].callback = SpriteCallbackDummy; - StringExpandPlaceholders(gStringVar4, gText_StopPuttingAwayDecorations); - DisplayItemMessageOnField(taskId, gStringVar4, sub_812A1F0); - } - else - { - StringExpandPlaceholders(gStringVar4, gText_NoDecorationHere); - DisplayItemMessageOnField(taskId, gStringVar4, sub_8129D64); - } - } -} - -void sub_8129D64(u8 taskId) -{ - if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON) - { - sub_8129B34(taskId); - } -} - -void sub_8129D8C(u8 decor, struct DecorRearrangementDataBuffer *data) -{ - if (gDecorations[decor].shape == DECORSHAPE_1x1) - { - data->width = 1; - data->height = 1; - } else if (gDecorations[decor].shape == DECORSHAPE_2x1) - { - data->width = 2; - data->height = 1; - } else if (gDecorations[decor].shape == DECORSHAPE_3x1) - { - data->width = 3; - data->height = 1; - } else if (gDecorations[decor].shape == DECORSHAPE_4x2) - { - data->width = 4; - data->height = 2; - } else if (gDecorations[decor].shape == DECORSHAPE_2x2) - { - data->width = 2; - data->height = 2; - } else if (gDecorations[decor].shape == DECORSHAPE_1x2) - { - data->width = 1; - data->height = 2; - } else if (gDecorations[decor].shape == DECORSHAPE_1x3) - { - data->width = 1; - data->height = 3; - } else if (gDecorations[decor].shape == DECORSHAPE_2x4) - { - data->width = 2; - data->height = 4; - } else if (gDecorations[decor].shape == DECORSHAPE_3x3) - { - data->width = 3; - data->height = 3; - } else if (gDecorations[decor].shape == DECORSHAPE_3x2) - { - data->width = 3; - data->height = 2; - } -} - -void sub_8129E0C(u8 x, u8 y) -{ - gSprites[sDecor_CameraSpriteObjectIdx1].invisible = TRUE; - gSprites[sDecor_CameraSpriteObjectIdx1].callback = SpriteCallbackDummy; - gSprites[sDecor_CameraSpriteObjectIdx2].pos1.x = (x << 4) + 0x88; - gSprites[sDecor_CameraSpriteObjectIdx2].pos1.y = (y << 4) + 0x48; -} - -bool8 sub_8129E74(u8 taskId, u8 idx, struct DecorRearrangementDataBuffer *data) -{ - u8 x; - u8 y; - u8 xOff; - u8 yOff; - u8 ht; - - x = gTasks[taskId].data[0] - 7; - y = gTasks[taskId].data[1] - 7; - xOff = gUnknown_0203A17C.pos[idx] >> 4; - yOff = gUnknown_0203A17C.pos[idx] & 0x0F; - ht = data->height; - if (gUnknown_0203A17C.items[idx] == DECOR_SAND_ORNAMENT && MapGridGetMetatileIdAt(xOff + 7, yOff + 7) == 0x28C) - { - ht --; - } - if (x >= xOff && x < xOff + data->width && y > yOff - ht && y <= yOff) - { - sub_8129E0C(data->width - (x - xOff + 1), yOff - y); - return TRUE; - } - return FALSE; -} - -void sub_8129F20(void) -{ - u8 xOff; - u8 yOff; - u16 i; - - xOff = gUnknown_0203A17C.pos[sDecorRearrangementDataBuffer[sCurDecorSelectedInRearrangement].idx] >> 4; - yOff = gUnknown_0203A17C.pos[sDecorRearrangementDataBuffer[sCurDecorSelectedInRearrangement].idx] & 0x0F; - for (i = 0; i < 0x40; i ++) - { - if (gSaveBlock1Ptr->mapObjectTemplates[i].x == xOff && gSaveBlock1Ptr->mapObjectTemplates[i].y == yOff && !FlagGet(gSaveBlock1Ptr->mapObjectTemplates[i].flagId)) - { - sDecorRearrangementDataBuffer[sCurDecorSelectedInRearrangement].flagId = gSaveBlock1Ptr->mapObjectTemplates[i].flagId; - break; - } - } -} - -bool8 sub_8129FC8(u8 taskId) -{ - u16 i; - - for (i = 0; i < gUnknown_0203A17C.size; i ++) - { - if (gUnknown_0203A17C.items[i] != 0) - { - if (gDecorations[gUnknown_0203A17C.items[i]].permission == DECORPERM_SOLID_MAT) - { - sub_8129D8C(gUnknown_0203A17C.items[i], sDecorRearrangementDataBuffer); - if (sub_8129E74(taskId, i, sDecorRearrangementDataBuffer) == TRUE) - { - sDecorRearrangementDataBuffer->idx = i; - sub_8129F20(); - sCurDecorSelectedInRearrangement = 1; - return TRUE; - } - } - } - } - return FALSE; -} - -void sub_812A040(u8 left, u8 top, u8 right, u8 bottom) -{ - u8 i; - u8 xOff; - u8 yOff; - u8 decorIdx; - - for (i = 0; i < gUnknown_0203A17C.size; i ++) - { - decorIdx = gUnknown_0203A17C.items[i]; - xOff = gUnknown_0203A17C.pos[i] >> 4; - yOff = gUnknown_0203A17C.pos[i] & 0x0F; - if (decorIdx != 0 && gDecorations[decorIdx].permission == DECORPERM_SOLID_MAT && left <= xOff && top <= yOff && right >= xOff && bottom >= yOff) - { - sDecorRearrangementDataBuffer[sCurDecorSelectedInRearrangement].idx = i; - sub_8129F20(); - sCurDecorSelectedInRearrangement++; - } - } -} - -#ifdef NONMATCHING -void sub_812A0E8(u8 taskId) -{ - u8 i; - u8 xOff; - u8 yOff; - u8 decor; - register u8 decor asm("r1"); - struct DecorRearrangementDataBuffer *data; - - sCurDecorSelectedInRearrangement = 0; - if (sub_8129FC8(taskId) != TRUE) - { - for (i = 0; i < gUnknown_0203A17C.size; i ++) - { - decor = gUnknown_0203A17C.items[i]; - if (decor != DECOR_NONE) - { - data = &sDecorRearrangementDataBuffer[0]; - sub_8129D8C(decor, data); - if (sub_8129E74(taskId, i, data) == TRUE) - { - data->idx = i; - sCurDecorSelectedInRearrangement ++; - break; - } - } - } - if (sCurDecorSelectedInRearrangement != 0) - { - xOff = gUnknown_0203A17C.pos[sDecorRearrangementDataBuffer[0].idx] >> 4; - yOff = gUnknown_0203A17C.pos[sDecorRearrangementDataBuffer[0].idx] & 0x0F; - sub_812A040(xOff, yOff - sDecorRearrangementDataBuffer[0].height + 1, xOff + sDecorRearrangementDataBuffer[0].width - 1, yOff); // Arithmetic register swap at the r2 argument: `add r2, r0, r2` instead of `add r2, r2, r0` - } - } -} -#else -__attribute__((naked)) void sub_812A0E8(u8 taskId) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tlsls r0, 24\n" - "\tlsrs r6, r0, 24\n" - "\tldr r4, =sCurDecorSelectedInRearrangement\n" - "\tmovs r0, 0\n" - "\tstrb r0, [r4]\n" - "\tadds r0, r6, 0\n" - "\tbl sub_8129FC8\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tcmp r0, 0x1\n" - "\tbeq _0812A18C\n" - "\tmovs r5, 0\n" - "\tldr r0, =gUnknown_0203A17C\n" - "\tldrb r1, [r0, 0x8]\n" - "\tcmp r5, r1\n" - "\tbcs _0812A15A\n" - "\tadds r7, r4, 0\n" - "_0812A10E:\n" - "\tldr r0, [r0]\n" - "\tadds r0, r5\n" - "\tldrb r1, [r0]\n" - "\tcmp r1, 0\n" - "\tbeq _0812A14C\n" - "\tldr r4, =sDecorRearrangementDataBuffer\n" - "\tadds r0, r1, 0\n" - "\tadds r1, r4, 0\n" - "\tbl sub_8129D8C\n" - "\tadds r0, r6, 0\n" - "\tadds r1, r5, 0\n" - "\tadds r2, r4, 0\n" - "\tbl sub_8129E74\n" - "\tlsls r0, 24\n" - "\tlsrs r0, 24\n" - "\tcmp r0, 0x1\n" - "\tbne _0812A14C\n" - "\tstrb r5, [r4]\n" - "\tldrb r0, [r7]\n" - "\tadds r0, 0x1\n" - "\tstrb r0, [r7]\n" - "\tb _0812A15A\n" - "\t.pool\n" - "_0812A14C:\n" - "\tadds r0, r5, 0x1\n" - "\tlsls r0, 24\n" - "\tlsrs r5, r0, 24\n" - "\tldr r0, =gUnknown_0203A17C\n" - "\tldrb r1, [r0, 0x8]\n" - "\tcmp r5, r1\n" - "\tbcc _0812A10E\n" - "_0812A15A:\n" - "\tldr r0, =sCurDecorSelectedInRearrangement\n" - "\tldrb r0, [r0]\n" - "\tcmp r0, 0\n" - "\tbeq _0812A18C\n" - "\tldr r0, =gUnknown_0203A17C\n" - "\tldr r2, =sDecorRearrangementDataBuffer\n" - "\tldrb r1, [r2]\n" - "\tldr r0, [r0, 0x4]\n" - "\tadds r0, r1\n" - "\tldrb r1, [r0]\n" - "\tlsrs r0, r1, 4\n" - "\tmovs r3, 0xF\n" - "\tands r3, r1\n" - "\tldrb r1, [r2, 0x2]\n" - "\tsubs r1, r3, r1\n" - "\tadds r1, 0x1\n" - "\tlsls r1, 24\n" - "\tlsrs r1, 24\n" - "\tldrb r2, [r2, 0x1]\n" - "\tadds r2, r0\n" - "\tsubs r2, 0x1\n" - "\tlsls r2, 24\n" - "\tlsrs r2, 24\n" - "\tbl sub_812A040\n" - "_0812A18C:\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.pool"); -} -#endif - -void sub_812A1A0(u8 taskId) -{ - sub_8197930(); - sub_8121F68(taskId, &gUnknown_085A7348); -} - -void sub_812A1C0(u8 taskId) -{ - fade_screen(1, 0); - gTasks[taskId].data[2] = 0; - gTasks[taskId].func = sub_81298EC; -} - -void sub_812A1F0(u8 taskId) -{ - sub_8197930(); - sub_8121F68(taskId, &gUnknown_085A7350); -} - -void sub_812A210(u8 taskId) -{ - sub_8197434(0, 0); - sub_812A22C(taskId); -} - -void sub_812A22C(u8 taskId) -{ - fade_screen(1, 0); - gTasks[taskId].data[2] = 0; - gTasks[taskId].func = sub_812A25C; -} - -void sub_812A25C(u8 taskId) -{ - switch (gTasks[taskId].data[2]) - { - case 0: - if (!gPaletteFade.active) - { - sub_8127B04(taskId); - gTasks[taskId].data[2] = 1; - } - break; - case 1: - sub_812A3C8(); - gFieldCallback = sub_812A334; - SetMainCallback2(c2_exit_to_overworld_2_switch); - DestroyTask(taskId); - break; - } -} - -void sub_812A2C4(u8 taskId) -{ - s16 *data; - - data = gTasks[taskId].data; - switch (data[2]) - { - case 0: - sub_80E9578(); - data[2] ++; - break; - case 1: - ScriptContext1_SetupScript(gUnknown_08275D0C); - data[2] ++; - break; - case 2: - ScriptContext2_Enable(); - data[2] ++; - break; - case 3: - if (sub_80ABDFC() == TRUE) - { - gTasks[taskId].func = sub_8126B80; - } - break; - } -} - -void sub_812A334(void) -{ - u8 taskId; - - pal_fill_black(); - sub_81973C4(0, 1); - sub_8126ABC(); - taskId = CreateTask(sub_812A2C4, 8); - gTasks[taskId].data[2] = 0; -} - -void sub_812A36C(struct Sprite *sprite) -{ - sprite->data0 ++; - sprite->data0 &= 0x1F; - if (sprite->data0 > 15) - { - sprite->invisible = TRUE; - } - else - { - sprite->invisible = FALSE; - } -} - -void sub_812A39C(void) -{ - if (gSaveBlock2Ptr->playerGender == MALE) - { - LoadSpritePalette(&gUnknown_085A73D8); - } - else - { - LoadSpritePalette(&gUnknown_085A73E0); - } -} - -void sub_812A3C8(void) -{ - FreeSpritePaletteByTag(OVERWORLD_PLACE_DECOR_PLAYER_PAL_TAG); -} - -void sub_812A3D4(u8 taskId) -{ - if (IsSelectedDecorInThePC() == TRUE) - { - StringCopy(gStringVar1, gDecorations[gCurDecorInventoryItems[gCurDecorationIndex]].name); - StringExpandPlaceholders(gStringVar4, gText_DecorationWillBeDiscarded); - DisplayItemMessageOnField(taskId, gStringVar4, sub_812A458); - } - else - { - StringExpandPlaceholders(gStringVar4, gText_CantThrowAwayInUse); - DisplayItemMessageOnField(taskId, gStringVar4, sub_8127A5C); - } -} - -void sub_812A458(u8 taskId) -{ - sub_8197930(); - sub_8121F68(taskId, &gUnknown_085A741C); -} - -void sub_812A478(u8 taskId) -{ - gCurDecorInventoryItems[gCurDecorationIndex] = DECOR_NONE; - sCurDecorCatCount = CountDecorationCategoryN(sCurDecorationCategory); - CondenseDecorationCategoryN(sCurDecorationCategory); - IdentifyOwnedDecorationsCurrentlyInUseInternal(taskId); - StringExpandPlaceholders(gStringVar4, gText_DecorationThrownAway); - DisplayItemMessageOnField(taskId, gStringVar4, sub_8127A5C); -} |