diff options
author | scnorton <scnorton@biociphers.org> | 2017-06-02 17:51:04 -0400 |
---|---|---|
committer | scnorton <scnorton@biociphers.org> | 2017-06-02 17:51:04 -0400 |
commit | 9ee1769803b878e48bf68bb73ed842aef4afc775 (patch) | |
tree | 8675dcef3eb134d0ee099a8ff97c6b85c408c23a | |
parent | a067876104be90ddbb54d4ffa344d54573d05293 (diff) |
AddDecorationIconObjectFromFieldObject, and other functions that needed compatibility fixes with struct UnkStruct_02038900
-rwxr-xr-x | asm/decoration.s | 125 | ||||
-rw-r--r-- | include/decoration.h | 38 | ||||
-rw-r--r-- | src/decoration.c | 25 |
3 files changed, 57 insertions, 131 deletions
diff --git a/asm/decoration.s b/asm/decoration.s index 38d7e32ec..b09b3596f 100755 --- a/asm/decoration.s +++ b/asm/decoration.s @@ -8,131 +8,6 @@ .equiv ewram_1f000, 0x0201f000 - thumb_func_start AddDecorationIconObjectFromFieldObject -AddDecorationIconObjectFromFieldObject: @ 80FF780 - push {r4-r6,lr} - sub sp, 0x4 - adds r5, r0, 0 - lsls r4, r1, 24 - lsrs r4, 24 - bl sub_80FEF74 - bl sub_80FED1C - adds r0, r5, 0 - bl sub_81006D0 - lsls r4, 5 - ldr r0, _080FF810 @ =gDecorations - adds r4, r0 - str r4, [r5] - ldrb r0, [r4, 0x11] - cmp r0, 0x4 - beq _080FF834 - adds r0, r5, 0 - bl sub_81008BC - ldr r0, [r5] - ldrb r0, [r0, 0x12] - bl sub_8100930 - adds r0, r5, 0 - bl sub_8100874 - ldr r1, _080FF814 @ =0x00000884 - adds r0, r5, r1 - ldr r1, _080FF818 @ =gMapHeader - ldr r1, [r1] - ldr r2, [r1, 0x14] - ldr r1, [r5] - ldr r1, [r1, 0x1C] - ldrh r1, [r1] - ldr r2, [r2, 0xC] - lsls r1, 4 - adds r1, r2 - ldrh r1, [r1, 0xE] - lsrs r1, 12 - bl sub_810070C - ldr r0, _080FF81C @ =gUnknown_083EC954 - bl LoadSpritePalette - ldr r3, _080FF820 @ =gUnknown_020391A8 - ldr r2, _080FF824 @ =gSprites - ldr r4, _080FF828 @ =gUnknown_03004880 - ldr r1, [r4, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r0, [r0, 0x2E] - strb r0, [r3] - ldr r0, _080FF82C @ =gSpriteTemplate_83EC93C - ldr r3, _080FF830 @ =gUnknown_083EC900 - ldr r1, [r5] - ldrb r2, [r1, 0x12] - lsls r2, 2 - adds r2, r3 - ldrb r1, [r2, 0x2] - ldrb r2, [r2, 0x3] - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - str r0, [r4, 0x4] - b _080FF87E - .align 2, 0 -_080FF810: .4byte gDecorations -_080FF814: .4byte 0x00000884 -_080FF818: .4byte gMapHeader -_080FF81C: .4byte gUnknown_083EC954 -_080FF820: .4byte gUnknown_020391A8 -_080FF824: .4byte gSprites -_080FF828: .4byte gUnknown_03004880 -_080FF82C: .4byte gSpriteTemplate_83EC93C -_080FF830: .4byte gUnknown_083EC900 -_080FF834: - ldr r2, _080FF888 @ =gUnknown_020391A8 - ldr r6, _080FF88C @ =gSprites - ldr r5, _080FF890 @ =gUnknown_03004880 - ldr r1, [r5, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - ldrh r0, [r0, 0x2E] - strb r0, [r2] - ldr r0, [r4, 0x1C] - ldrh r0, [r0] - ldr r1, _080FF894 @ =sub_81009A8 - ldr r2, _080FF898 @ =gUnknown_083EC900 - ldrb r3, [r4, 0x12] - lsls r3, 2 - adds r3, r2 - ldrb r2, [r3, 0x2] - ldrb r3, [r3, 0x3] - movs r4, 0x1 - str r4, [sp] - bl AddPseudoFieldObject - lsls r0, 24 - lsrs r0, 24 - str r0, [r5, 0x4] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r6 - ldrb r2, [r1, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r2 - movs r2, 0x4 - orrs r0, r2 - strb r0, [r1, 0x5] -_080FF87E: - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080FF888: .4byte gUnknown_020391A8 -_080FF88C: .4byte gSprites -_080FF890: .4byte gUnknown_03004880 -_080FF894: .4byte sub_81009A8 -_080FF898: .4byte gUnknown_083EC900 - thumb_func_end AddDecorationIconObjectFromFieldObject - thumb_func_start SetUpPlacingDecorationPlayerAvatar SetUpPlacingDecorationPlayerAvatar: @ 80FF89C push {r4,lr} diff --git a/include/decoration.h b/include/decoration.h index afcfcae87..ee3b639bf 100644 --- a/include/decoration.h +++ b/include/decoration.h @@ -165,8 +165,29 @@ struct DecorationInventory extern u8 ewram[]; #define ewram_1f000 (*(struct DecoPCPointers *)(ewram + 0x1f000)) +struct UnkStruct_02038900 +{ + struct Decoration *decoration; + u8 pad_004[0x18]; + u16 *unk_01C; + u8 pad_020[0x864]; + u16 unk_884[16]; +}; + +struct UnkStruct_083EC900 +{ + u8 unk_0; + u8 unk_1; + u8 unk_2; + u8 unk_3; +}; + +extern const struct UnkStruct_083EC900 gUnknown_083EC900[10]; +extern const struct SpritePalette gUnknown_083EC954; +extern const struct SpriteTemplate gSpriteTemplate_83EC93C; + extern struct Decoration gDecorations[0x77]; -extern struct Decoration *gUnknown_02038900; +extern struct UnkStruct_02038900 gUnknown_02038900; extern u8 *gUnknown_020388D0; extern u8 gUnknown_020388D4; @@ -183,6 +204,7 @@ extern u16 gSpecialVar_0x8006; extern u16 gSpecialVar_0x8007; extern u16 gUnknown_020391A4; extern u16 gUnknown_020391A6; +extern u8 gUnknown_020391A8; extern const u16 gUnknown_083EC654[3]; extern const struct DecorationInventory gDecorationInventories[]; @@ -210,8 +232,9 @@ extern void CreateVerticalScrollIndicators(u8, u8, u8); // src/menu_helpers extern void LoadScrollIndicatorPalette(void); // src/menu_helpers extern void DisplayItemMessageOnField(u8, const u8 *, TaskFunc, u16); // src/menu_helpers extern void BuyMenuFreeMemory(void); // src/menu_helpers - +extern void sub_8109DAC(u8); // src/trader extern void ReshowPlayerPC(u8); // src/player_pc + void sub_80FE2B4(void); void Task_DecorationPCProcessMenuInput(u8); void sub_80FE394(void); @@ -230,9 +253,14 @@ void sub_80FEF50(u8); void sub_80FF394(u16, u16, u16); void sub_80FF6AC(u8); void sub_80FF960(u8); +void AddDecorationIconObjectFromFieldObject(struct UnkStruct_02038900 *, u8); +void SetUpPlacingDecorationPlayerAvatar(u8, struct UnkStruct_02038900 *); void sub_810065C(u8); -void sub_8109DAC(u8); -void AddDecorationIconObjectFromFieldObject(struct Decoration **, u8); -void SetUpPlacingDecorationPlayerAvatar(u8, struct Decoration **); +void sub_81006D0(struct UnkStruct_02038900 *); +void sub_810070C(u16 *, int); +void sub_8100874(struct UnkStruct_02038900 *); +void sub_81008BC(struct UnkStruct_02038900 *); +void sub_8100930(u8); +void sub_81009A8(struct Sprite *); #endif // GUARD_DECORATION_H diff --git a/src/decoration.c b/src/decoration.c index 75f9f4b96..7dc4448ef 100644 --- a/src/decoration.c +++ b/src/decoration.c @@ -734,7 +734,7 @@ void sub_80FF474(void) break; } } - VarSet(0x3f20 + gMapHeader.events->mapObjects[j].graphicsId, gUnknown_02038900->tiles[0]); + VarSet(0x3f20 + gMapHeader.events->mapObjects[j].graphicsId, gUnknown_02038900.decoration->tiles[0]); gSpecialVar_0x8005 = gMapHeader.events->mapObjects[j].localId; gSpecialVar_0x8006 = gUnknown_020391A4; gSpecialVar_0x8007 = gUnknown_020391A6; @@ -828,3 +828,26 @@ void sub_80FF6AC(u8 taskId) break; } } + +void AddDecorationIconObjectFromFieldObject(struct UnkStruct_02038900 * unk_02038900, u8 decoIdx) +{ + sub_80FEF74(); + sub_80FED1C(); + sub_81006D0(unk_02038900); + unk_02038900->decoration = &gDecorations[decoIdx]; + if (gDecorations[decoIdx].decor_field_11 != 4) + { + sub_81008BC(unk_02038900); + sub_8100930(unk_02038900->decoration->decor_field_12); + sub_8100874(unk_02038900); + sub_810070C(unk_02038900->unk_884, ((u16 *)gMapHeader.mapData->secondaryTileset->metatiles + 8 * unk_02038900->decoration->tiles[0])[7] >> 12); + LoadSpritePalette(&gUnknown_083EC954); + gUnknown_020391A8 = gSprites[gUnknown_03004880.unk4].data0; + gUnknown_03004880.unk4 = CreateSprite(&gSpriteTemplate_83EC93C, gUnknown_083EC900[unk_02038900->decoration->decor_field_12].unk_2, gUnknown_083EC900[unk_02038900->decoration->decor_field_12].unk_3, 0); + } else + { + gUnknown_020391A8 = gSprites[gUnknown_03004880.unk4].data0; + gUnknown_03004880.unk4 = AddPseudoFieldObject(unk_02038900->decoration->tiles[0], sub_81009A8, gUnknown_083EC900[unk_02038900->decoration->decor_field_12].unk_2, gUnknown_083EC900[unk_02038900->decoration->decor_field_12].unk_3, 1); + gSprites[gUnknown_03004880.unk4].oam.priority = 1; + } +} |