summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorscnorton <scnorton@biociphers.org>2017-06-02 17:51:04 -0400
committerscnorton <scnorton@biociphers.org>2017-06-02 17:51:04 -0400
commit9ee1769803b878e48bf68bb73ed842aef4afc775 (patch)
tree8675dcef3eb134d0ee099a8ff97c6b85c408c23a
parenta067876104be90ddbb54d4ffa344d54573d05293 (diff)
AddDecorationIconObjectFromFieldObject, and other functions that needed compatibility fixes with struct UnkStruct_02038900
-rwxr-xr-xasm/decoration.s125
-rw-r--r--include/decoration.h38
-rw-r--r--src/decoration.c25
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;
+ }
+}