summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorscnorton <scnorton@biociphers.org>2017-06-04 13:34:33 -0400
committerscnorton <scnorton@biociphers.org>2017-06-04 13:34:33 -0400
commitd0e72abccfe15f0d120d3f5811f893fbddde0aa6 (patch)
tree80b119dc02d8e48fcc2f5636632b7594871dc01d
parent54c74220e6f53ef0fd4fdb25f58c0196c809f840 (diff)
A couple more functions in decoration.s
-rwxr-xr-xasm/decoration.s263
-rwxr-xr-xinclude/decoration.h23
-rw-r--r--include/script.h1
-rwxr-xr-xsrc/decoration.c91
4 files changed, 111 insertions, 267 deletions
diff --git a/asm/decoration.s b/asm/decoration.s
index 612b293ed..86387e3fa 100755
--- a/asm/decoration.s
+++ b/asm/decoration.s
@@ -8,269 +8,6 @@
.equiv ewram_1f000, 0x0201f000
- thumb_func_start sub_8100930
-sub_8100930: @ 8100930
- push {r4,r5,lr}
- lsls r0, 24
- ldr r3, _08100998 @ =gUnknown_020391AC
- movs r1, 0
- strb r1, [r3]
- ldrb r2, [r3, 0x1]
- subs r1, 0x4
- ands r1, r2
- movs r4, 0xD
- negs r4, r4
- ands r1, r4
- movs r2, 0x11
- negs r2, r2
- ands r1, r2
- subs r2, 0x10
- ands r1, r2
- strb r1, [r3, 0x1]
- ldr r1, _0810099C @ =gUnknown_083EC900
- lsrs r0, 22
- adds r0, r1
- ldrb r1, [r0]
- movs r5, 0x3F
- lsls r1, 6
- strb r1, [r3, 0x1]
- ldrh r2, [r3, 0x2]
- ldr r1, _081009A0 @ =0xfffffe00
- ands r1, r2
- strh r1, [r3, 0x2]
- ldrb r2, [r3, 0x3]
- movs r1, 0x3F
- negs r1, r1
- ands r1, r2
- strb r1, [r3, 0x3]
- ldrb r0, [r0, 0x1]
- lsls r0, 6
- ands r5, r1
- orrs r5, r0
- strb r5, [r3, 0x3]
- ldrh r1, [r3, 0x4]
- ldr r0, _081009A4 @ =0xfffffc00
- ands r0, r1
- strh r0, [r3, 0x4]
- ldrb r0, [r3, 0x5]
- ands r4, r0
- movs r0, 0x4
- orrs r4, r0
- movs r0, 0xF
- ands r4, r0
- strb r4, [r3, 0x5]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08100998: .4byte gUnknown_020391AC
-_0810099C: .4byte gUnknown_083EC900
-_081009A0: .4byte 0xfffffe00
-_081009A4: .4byte 0xfffffc00
- thumb_func_end sub_8100930
-
- thumb_func_start sub_81009A8
-sub_81009A8: @ 81009A8
- movs r1, 0
- strh r1, [r0, 0x32]
- strh r1, [r0, 0x34]
- strh r1, [r0, 0x36]
- strh r1, [r0, 0x38]
- strh r1, [r0, 0x3A]
- strh r1, [r0, 0x3C]
- ldr r1, _081009BC @ =sub_81009C0
- str r1, [r0, 0x1C]
- bx lr
- .align 2, 0
-_081009BC: .4byte sub_81009C0
- thumb_func_end sub_81009A8
-
- thumb_func_start sub_81009C0
-sub_81009C0: @ 81009C0
- push {lr}
- adds r2, r0, 0
- movs r1, 0x3C
- ldrsh r0, [r2, r1]
- cmp r0, 0
- bne _081009FA
- movs r1, 0x3A
- ldrsh r0, [r2, r1]
- cmp r0, 0xE
- bgt _081009E2
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r1, [r3]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- b _081009EC
-_081009E2:
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r1, 0x4
- orrs r0, r1
-_081009EC:
- strb r0, [r3]
- ldrh r0, [r2, 0x3A]
- adds r0, 0x1
- movs r1, 0x1F
- ands r0, r1
- strh r0, [r2, 0x3A]
- b _08100A06
-_081009FA:
- adds r2, 0x3E
- ldrb r1, [r2]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
-_08100A06:
- pop {r0}
- bx r0
- thumb_func_end sub_81009C0
-
- thumb_func_start sub_8100A0C
-sub_8100A0C: @ 8100A0C
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r0, r4, 0
- bl sub_8100D38
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08100A44
- movs r0, 0x1
- movs r1, 0
- bl fade_screen
- ldr r1, _08100A3C @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- movs r1, 0
- strh r1, [r0, 0xC]
- ldr r1, _08100A40 @ =sub_8100E70
- str r1, [r0]
- b _08100A50
- .align 2, 0
-_08100A3C: .4byte gTasks
-_08100A40: .4byte sub_8100E70
-_08100A44:
- ldr r1, _08100A58 @ =gSecretBaseText_NoDecorInUse
- ldr r2, _08100A5C @ =sub_80FE428
- adds r0, r4, 0
- movs r3, 0
- bl DisplayItemMessageOnField
-_08100A50:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08100A58: .4byte gSecretBaseText_NoDecorInUse
-_08100A5C: .4byte sub_80FE428
- thumb_func_end sub_8100A0C
-
- thumb_func_start sub_8100A60
-sub_8100A60: @ 8100A60
- lsls r0, 24
- lsrs r0, 24
- ldr r3, _08100A78 @ =ewram_1f000
- ldr r1, [r3]
- adds r1, r0
- movs r2, 0
- strb r2, [r1]
- ldr r1, [r3, 0x4]
- adds r1, r0
- strb r2, [r1]
- bx lr
- .align 2, 0
-_08100A78: .4byte ewram_1f000
- thumb_func_end sub_8100A60
-
- thumb_func_start sub_8100A7C
-sub_8100A7C: @ 8100A7C
- push {r4-r6,lr}
- ldr r6, _08100A9C @ =gSpecialVar_0x8005
- movs r0, 0
- strh r0, [r6]
- ldr r2, _08100AA0 @ =gScriptResult
- strh r0, [r2]
- ldr r4, _08100AA4 @ =gSpecialVar_0x8004
- ldr r1, _08100AA8 @ =gUnknown_02039234
- ldrh r0, [r4]
- ldrb r1, [r1]
- cmp r0, r1
- bne _08100AB8
- movs r0, 0x1
- strh r0, [r2]
- b _08100B0A
- .align 2, 0
-_08100A9C: .4byte gSpecialVar_0x8005
-_08100AA0: .4byte gScriptResult
-_08100AA4: .4byte gSpecialVar_0x8004
-_08100AA8: .4byte gUnknown_02039234
-_08100AAC:
- ldr r1, _08100AB4 @ =gSpecialVar_0x8006
- ldrb r0, [r2]
- strh r0, [r1]
- b _08100B0A
- .align 2, 0
-_08100AB4: .4byte gSpecialVar_0x8006
-_08100AB8:
- ldr r3, _08100B10 @ =gDecorations
- ldr r2, _08100B14 @ =ewram_1f000
- ldr r1, _08100B18 @ =gUnknown_020391B4
- ldrh r0, [r4]
- lsls r0, 3
- adds r4, r0, r1
- ldrb r1, [r4]
- ldr r0, [r2]
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 5
- adds r0, r3
- ldrb r0, [r0, 0x11]
- cmp r0, 0x4
- bne _08100B0A
- ldrh r0, [r4, 0x4]
- strh r0, [r6]
- ldrb r0, [r4]
- bl sub_8100A60
- movs r1, 0
- ldr r0, _08100B1C @ =gMapHeader
- ldr r0, [r0, 0x4]
- ldrb r2, [r0]
- cmp r1, r2
- bcs _08100B0A
- ldr r5, [r0, 0x4]
- ldrh r4, [r6]
- adds r3, r2, 0
-_08100AF2:
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 3
- adds r2, r0, r5
- ldrh r0, [r2, 0x14]
- cmp r0, r4
- beq _08100AAC
- adds r0, r1, 0x1
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, r3
- bcc _08100AF2
-_08100B0A:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08100B10: .4byte gDecorations
-_08100B14: .4byte ewram_1f000
-_08100B18: .4byte gUnknown_020391B4
-_08100B1C: .4byte gMapHeader
- thumb_func_end sub_8100A7C
-
thumb_func_start sub_8100B20
sub_8100B20: @ 8100B20
push {r4-r6,lr}
diff --git a/include/decoration.h b/include/decoration.h
index f8086e7cc..0c9ad78fe 100755
--- a/include/decoration.h
+++ b/include/decoration.h
@@ -177,10 +177,10 @@ extern u8 ewram[];
struct UnkStruct_02038900
{
- struct Decoration *decoration;
- u16 unk_004[0x40];
- u8 unk_084[0x800];
- u16 unk_884[16];
+ /*0x000; 0x02038900*/ struct Decoration *decoration;
+ /*0x004; 0x02038904*/ u16 unk_004[0x40];
+ /*0x084; 0x02038984*/ u8 unk_084[0x800];
+ /*0x884; 0x02039184*/ u16 unk_884[16];
};
struct UnkStruct_083EC900
@@ -191,6 +191,14 @@ struct UnkStruct_083EC900
u8 unk_3;
};
+struct UnkStruct_020391B4
+{
+ u8 var00;
+ u8 pad01[3];
+ u16 var04;
+ u8 pad06[2];
+};
+
extern const struct UnkStruct_083EC900 gUnknown_083EC900[10];
extern const struct SpritePalette gUnknown_083EC954;
extern const struct SpriteTemplate gSpriteTemplate_83EC93C;
@@ -199,6 +207,7 @@ extern struct Decoration gDecorations[0x77];
extern struct UnkStruct_02038900 gUnknown_02038900;
extern u8 *gUnknown_020388D0;
extern Script gUnknown_081A2F7B;
+extern struct OamData gUnknown_020391AC;
extern u8 gUnknown_020388D4;
extern u8 gUnknown_020388D5;
@@ -209,6 +218,7 @@ extern u8 gUnknown_020388F5;
extern u8 gUnknown_020388F6;
extern u8 gUnknown_020388D6[16];
extern u8 gUnknown_020388E6[12];
+extern u16 gSpecialVar_0x8004;
extern u16 gSpecialVar_0x8005;
extern u16 gSpecialVar_0x8006;
extern u16 gSpecialVar_0x8007;
@@ -217,8 +227,10 @@ extern u16 gUnknown_020391A6;
extern u8 gUnknown_020391A8;
extern u8 gUnknown_020391A9;
extern u8 gUnknown_020391AA;
+extern u8 gUnknown_02039234;
extern void (*gUnknown_0300485C)(void);
extern void (*gUnknown_083EC96C[2][2])(u8);
+extern struct UnkStruct_020391B4 gUnknown_020391B4[16];
extern const u16 gUnknown_083EC654[3];
extern const struct DecorationInventory gDecorationInventories[];
@@ -287,6 +299,9 @@ void sub_8100874(struct UnkStruct_02038900 *);
void sub_81008BC(struct UnkStruct_02038900 *);
void sub_8100930(u8);
void sub_81009A8(struct Sprite *);
+void sub_81009C0(struct Sprite *);
+bool8 sub_8100D38(u8);
+void sub_8100E70(u8);
void sub_81016F4(void);
#endif // GUARD_DECORATION_H
diff --git a/include/script.h b/include/script.h
index 5e13e8e74..4070a838f 100644
--- a/include/script.h
+++ b/include/script.h
@@ -55,5 +55,6 @@ u32 CalculateRamScriptChecksum(void);
void ClearRamScript(void);
bool8 InitRamScript(u8 *script, u16 scriptSize, u8 mapGroup, u8 mapNum, u8 objectId);
u8 *GetRamScript(u8 objectId, u8 *script);
+u16 gScriptResult;
#endif // GUARD_SCRIPT_H
diff --git a/src/decoration.c b/src/decoration.c
index f3a9df367..7c92ca696 100755
--- a/src/decoration.c
+++ b/src/decoration.c
@@ -1979,3 +1979,94 @@ void sub_81008BC(struct UnkStruct_02038900 *unk_02038900)
unk_02038900->unk_004[gUnknown_083EC860[idx].var0[i]] = sub_810089C(unk_02038900->decoration->tiles[gUnknown_083EC860[idx].var4[i]] * 8 + gUnknown_083EC860[idx].var8[i]);
}
}
+
+void sub_8100930(u8 unk12)
+/*
+ * This function sets an OAM object not directly referenced anywhere else
+ * in the source.
+ */
+{
+ gUnknown_020391AC.y = 0;
+ gUnknown_020391AC.affineMode = 0;
+ gUnknown_020391AC.objMode = 0;
+ gUnknown_020391AC.mosaic = 0;
+ gUnknown_020391AC.bpp = 0;
+ gUnknown_020391AC.shape = gUnknown_083EC900[unk12].unk_0;
+ gUnknown_020391AC.x = 0;
+ gUnknown_020391AC.matrixNum = 0;
+ gUnknown_020391AC.size = gUnknown_083EC900[unk12].unk_1;
+ gUnknown_020391AC.tileNum = 0;
+ gUnknown_020391AC.priority = 1;
+ gUnknown_020391AC.paletteNum = 0;
+}
+
+void sub_81009A8(struct Sprite *sprite)
+{
+ sprite->data2 = 0;
+ sprite->data3 = 0;
+ sprite->data4 = 0;
+ sprite->data5 = 0;
+ sprite->data6 = 0;
+ sprite->data7 = 0;
+ sprite->callback = sub_81009C0;
+}
+
+void sub_81009C0(struct Sprite *sprite)
+{
+ if (sprite->data7 == 0)
+ {
+ if (sprite->data6 < 15)
+ {
+ sprite->invisible = 0;
+ } else
+ {
+ sprite->invisible = 1;
+ }
+ sprite->data6 = (sprite->data6 + 1) & 0x1f;
+ } else
+ {
+ sprite->invisible = 0;
+ }
+}
+
+void sub_8100A0C(u8 taskId)
+{
+ if (sub_8100D38(taskId) == 1)
+ {
+ fade_screen(1, 0);
+ gTasks[taskId].data[2] = 0;
+ gTasks[taskId].func = sub_8100E70;
+ } else
+ {
+ DisplayItemMessageOnField(taskId, gSecretBaseText_NoDecorInUse, sub_80FE428, 0);
+ }
+}
+
+void sub_8100A60(u8 a0)
+{
+ ewram_1f000.items[a0] = 0;
+ ewram_1f000.pos[a0] = 0;
+}
+
+void sub_8100A7C(void)
+{
+ u16 i;
+ gSpecialVar_0x8005 = 0;
+ gScriptResult = 0;
+ if (gSpecialVar_0x8004 == gUnknown_02039234)
+ {
+ gScriptResult = 1;
+ } else if (gDecorations[ewram_1f000.items[gUnknown_020391B4[gSpecialVar_0x8004].var00]].decor_field_11 == 4)
+ {
+ gSpecialVar_0x8005 = gUnknown_020391B4[gSpecialVar_0x8004].var04;
+ sub_8100A60(gUnknown_020391B4[gSpecialVar_0x8004].var00);
+ for (i=0; i<gMapHeader.events->mapObjectCount; i++)
+ {
+ if (gMapHeader.events->mapObjects[i].flagId == gSpecialVar_0x8005)
+ {
+ gSpecialVar_0x8006 = gMapHeader.events->mapObjects[i].localId;
+ break;
+ }
+ }
+ }
+}