summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xasm/decoration.s486
-rwxr-xr-xinclude/decoration.h5
-rwxr-xr-xsrc/decoration.c135
3 files changed, 140 insertions, 486 deletions
diff --git a/asm/decoration.s b/asm/decoration.s
index bcf7e99cd..4c98e4657 100755
--- a/asm/decoration.s
+++ b/asm/decoration.s
@@ -8,492 +8,6 @@
.equiv ewram_1f000, 0x0201f000
- thumb_func_start sub_8100EEC
-sub_8100EEC: @ 8100EEC
- push {r4-r6,lr}
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- movs r0, 0
- movs r1, 0
- movs r2, 0x1D
- movs r3, 0x13
- bl MenuZeroFillWindowRect
- ldr r4, _08100F70 @ =gSprites
- ldr r3, _08100F74 @ =gUnknown_020391A8
- ldrb r1, [r3]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- movs r6, 0
- strh r6, [r0, 0x3C]
- ldrb r1, [r3]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- adds r0, 0x3E
- ldrb r2, [r0]
- movs r1, 0x5
- negs r1, r1
- ands r1, r2
- strb r1, [r0]
- ldrb r1, [r3]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r4, 0
- adds r1, 0x1C
- adds r0, r1
- ldr r1, _08100F78 @ =sub_8101698
- str r1, [r0]
- ldr r2, _08100F7C @ =gUnknown_020391A9
- ldrb r1, [r2]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- movs r1, 0x88
- strh r1, [r0, 0x20]
- ldrb r1, [r2]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- movs r1, 0x48
- strh r1, [r0, 0x22]
- ldr r1, _08100F80 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- strh r6, [r0, 0x1C]
- ldr r1, _08100F84 @ =sub_8100494
- str r1, [r0]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08100F70: .4byte gSprites
-_08100F74: .4byte gUnknown_020391A8
-_08100F78: .4byte sub_8101698
-_08100F7C: .4byte gUnknown_020391A9
-_08100F80: .4byte gTasks
-_08100F84: .4byte sub_8100494
- thumb_func_end sub_8100EEC
-
- thumb_func_start sub_8100F88
-sub_8100F88: @ 8100F88
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r1, _08100FB0 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- movs r1, 0
- strh r1, [r0, 0x1C]
- bl sub_810045C
- adds r0, r4, 0
- bl sub_8101024
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08100FB0: .4byte gTasks
- thumb_func_end sub_8100F88
-
- thumb_func_start sub_8100FB4
-sub_8100FB4: @ 8100FB4
- push {r4,r5,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r1, _0810100C @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- movs r1, 0
- strh r1, [r0, 0x1C]
- bl sub_810045C
- ldr r3, _08101010 @ =gSprites
- ldr r5, _08101014 @ =gUnknown_020391A8
- ldrb r1, [r5]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- adds r0, 0x3E
- ldrb r2, [r0]
- movs r1, 0x5
- negs r1, r1
- ands r1, r2
- strb r1, [r0]
- ldrb r1, [r5]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r3, 0x1C
- adds r0, r3
- ldr r1, _08101018 @ =SpriteCallbackDummy
- str r1, [r0]
- ldr r1, _0810101C @ =gSecretBaseText_StopPuttingAwayDecor
- ldr r2, _08101020 @ =sub_810156C
- adds r0, r4, 0
- movs r3, 0
- bl DisplayItemMessageOnField
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0810100C: .4byte gTasks
-_08101010: .4byte gSprites
-_08101014: .4byte gUnknown_020391A8
-_08101018: .4byte SpriteCallbackDummy
-_0810101C: .4byte gSecretBaseText_StopPuttingAwayDecor
-_08101020: .4byte sub_810156C
- thumb_func_end sub_8100FB4
-
- thumb_func_start sub_8101024
-sub_8101024: @ 8101024
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- adds r0, r5, 0
- bl sub_8101460
- ldr r0, _08101040 @ =gUnknown_02039234
- ldrb r0, [r0]
- cmp r0, 0
- beq _0810104C
- ldr r1, _08101044 @ =gSecretBaseText_ReturnDecor
- ldr r2, _08101048 @ =sub_8101518
- b _081010B0
- .align 2, 0
-_08101040: .4byte gUnknown_02039234
-_08101044: .4byte gSecretBaseText_ReturnDecor
-_08101048: .4byte sub_8101518
-_0810104C:
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- ldr r0, _081010BC @ =gTasks + 0x8
- adds r1, r0
- movs r2, 0
- ldrsh r0, [r1, r2]
- movs r2, 0x2
- ldrsh r1, [r1, r2]
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r4, r0, 24
- adds r0, r4, 0
- bl MetatileBehavior_IsSecretBasePC
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08101082
- adds r0, r4, 0
- bl sub_805738C
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _081010D4
-_08101082:
- ldr r3, _081010C0 @ =gSprites
- ldr r4, _081010C4 @ =gUnknown_020391A8
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- adds r0, 0x3E
- ldrb r2, [r0]
- movs r1, 0x5
- negs r1, r1
- ands r1, r2
- strb r1, [r0]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r3, 0x1C
- adds r0, r3
- ldr r1, _081010C8 @ =SpriteCallbackDummy
- str r1, [r0]
- ldr r1, _081010CC @ =gSecretBaseText_StopPuttingAwayDecor
- ldr r2, _081010D0 @ =sub_810156C
-_081010B0:
- adds r0, r5, 0
- movs r3, 0
- bl DisplayItemMessageOnField
- b _081010E0
- .align 2, 0
-_081010BC: .4byte gTasks + 0x8
-_081010C0: .4byte gSprites
-_081010C4: .4byte gUnknown_020391A8
-_081010C8: .4byte SpriteCallbackDummy
-_081010CC: .4byte gSecretBaseText_StopPuttingAwayDecor
-_081010D0: .4byte sub_810156C
-_081010D4:
- ldr r1, _081010E8 @ =gSecretBaseText_NoDecor
- ldr r2, _081010EC @ =sub_81010F0
- adds r0, r5, 0
- movs r3, 0
- bl DisplayItemMessageOnField
-_081010E0:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_081010E8: .4byte gSecretBaseText_NoDecor
-_081010EC: .4byte sub_81010F0
- thumb_func_end sub_8101024
-
- thumb_func_start sub_81010F0
-sub_81010F0: @ 81010F0
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, _08101114 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _0810110A
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08101110
-_0810110A:
- adds r0, r2, 0
- bl sub_8100EEC
-_08101110:
- pop {r0}
- bx r0
- .align 2, 0
-_08101114: .4byte gMain
- thumb_func_end sub_81010F0
-
- thumb_func_start sub_8101118
-sub_8101118: @ 8101118
- push {lr}
- adds r2, r1, 0
- lsls r0, 24
- ldr r1, _08101130 @ =gDecorations
- lsrs r0, 19
- adds r0, r1
- ldrb r1, [r0, 0x12]
- cmp r1, 0
- bne _08101134
- movs r0, 0x1
- strb r0, [r2, 0x1]
- b _08101192
- .align 2, 0
-_08101130: .4byte gDecorations
-_08101134:
- cmp r1, 0x1
- bne _08101140
- movs r0, 0x2
- strb r0, [r2, 0x1]
- strb r1, [r2, 0x2]
- b _08101194
-_08101140:
- cmp r1, 0x2
- bne _0810114C
- movs r0, 0x3
- strb r0, [r2, 0x1]
- movs r0, 0x1
- b _08101192
-_0810114C:
- cmp r1, 0x3
- bne _08101154
- movs r0, 0x4
- b _0810118E
-_08101154:
- cmp r1, 0x4
- bne _0810115E
- movs r0, 0x2
- strb r0, [r2, 0x1]
- b _08101192
-_0810115E:
- cmp r1, 0x5
- bne _08101166
- movs r0, 0x1
- b _0810118E
-_08101166:
- cmp r1, 0x6
- bne _08101172
- movs r0, 0x1
- strb r0, [r2, 0x1]
- movs r0, 0x3
- b _08101192
-_08101172:
- cmp r1, 0x7
- bne _0810117E
- movs r0, 0x2
- strb r0, [r2, 0x1]
- movs r0, 0x4
- b _08101192
-_0810117E:
- cmp r1, 0x8
- bne _08101188
- movs r0, 0x3
- strb r0, [r2, 0x1]
- b _08101192
-_08101188:
- cmp r1, 0x9
- bne _08101194
- movs r0, 0x3
-_0810118E:
- strb r0, [r2, 0x1]
- movs r0, 0x2
-_08101192:
- strb r0, [r2, 0x2]
-_08101194:
- pop {r0}
- bx r0
- thumb_func_end sub_8101118
-
- thumb_func_start sub_8101198
-sub_8101198: @ 8101198
- push {r4-r6,lr}
- lsls r0, 24
- lsls r1, 24
- ldr r5, _081011F0 @ =gSprites
- ldr r6, _081011F4 @ =gUnknown_020391A8
- ldrb r3, [r6]
- lsls r2, r3, 4
- adds r2, r3
- lsls r2, 2
- adds r2, r5
- adds r2, 0x3E
- ldrb r3, [r2]
- movs r4, 0x4
- orrs r3, r4
- strb r3, [r2]
- ldrb r3, [r6]
- lsls r2, r3, 4
- adds r2, r3
- lsls r2, 2
- adds r3, r5, 0
- adds r3, 0x1C
- adds r2, r3
- ldr r3, _081011F8 @ =SpriteCallbackDummy
- str r3, [r2]
- ldr r4, _081011FC @ =gUnknown_020391A9
- ldrb r3, [r4]
- lsls r2, r3, 4
- adds r2, r3
- lsls r2, 2
- adds r2, r5
- lsrs r0, 20
- adds r0, 0x88
- strh r0, [r2, 0x20]
- ldrb r2, [r4]
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r0, r5
- lsrs r1, 20
- adds r1, 0x48
- strh r1, [r0, 0x22]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_081011F0: .4byte gSprites
-_081011F4: .4byte gUnknown_020391A8
-_081011F8: .4byte SpriteCallbackDummy
-_081011FC: .4byte gUnknown_020391A9
- thumb_func_end sub_8101198
-
- thumb_func_start sub_8101200
-sub_8101200: @ 8101200
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r6, r2, 0
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- ldr r3, _0810128C @ =gTasks
- lsls r2, r0, 2
- adds r2, r0
- lsls r2, 3
- adds r2, r3
- ldrb r0, [r2, 0x8]
- subs r0, 0x7
- lsls r0, 24
- lsrs r7, r0, 24
- ldrb r0, [r2, 0xA]
- subs r0, 0x7
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r2, _08101290 @ =ewram_1f000
- ldr r0, [r2, 0x4]
- adds r0, r1
- ldrb r0, [r0]
- lsrs r4, r0, 4
- movs r5, 0xF
- ands r5, r0
- ldr r0, [r2]
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x29
- bne _0810125A
- adds r0, r4, 0x7
- adds r1, r5, 0x7
- bl MapGridGetMetatileIdAt
- movs r1, 0xA3
- lsls r1, 2
- cmp r0, r1
- bne _0810125A
- ldrb r0, [r6, 0x2]
- subs r0, 0x1
- strb r0, [r6, 0x2]
-_0810125A:
- cmp r7, r4
- bcc _08101294
- ldrb r1, [r6, 0x1]
- adds r0, r4, r1
- cmp r7, r0
- bge _08101294
- ldrb r0, [r6, 0x2]
- subs r0, r5, r0
- cmp r8, r0
- ble _08101294
- cmp r8, r5
- bhi _08101294
- subs r0, r7, r4
- adds r0, 0x1
- subs r0, r1, r0
- lsls r0, 24
- lsrs r0, 24
- mov r2, r8
- subs r1, r5, r2
- lsls r1, 24
- lsrs r1, 24
- bl sub_8101198
- movs r0, 0x1
- b _08101296
- .align 2, 0
-_0810128C: .4byte gTasks
-_08101290: .4byte ewram_1f000
-_08101294:
- movs r0, 0
-_08101296:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_8101200
-
thumb_func_start sub_81012A0
sub_81012A0: @ 81012A0
push {r4-r7,lr}
diff --git a/include/decoration.h b/include/decoration.h
index f55d868e8..47713b960 100755
--- a/include/decoration.h
+++ b/include/decoration.h
@@ -307,7 +307,12 @@ void sub_81009C0(struct Sprite *);
bool8 sub_8100D38(u8);
void sub_8100E70(u8);
void sub_8100EEC(u8);
+void sub_8101024(u8);
void sub_81010F0(u8);
+void sub_8101460(u8);
+void sub_8101518(u8);
+void sub_810156C(u8);
+void sub_8101698(struct Sprite *);
void sub_81016C8(void);
void sub_81016F4(void);
diff --git a/src/decoration.c b/src/decoration.c
index 5f5c9eace..6b4a359e2 100755
--- a/src/decoration.c
+++ b/src/decoration.c
@@ -2212,3 +2212,138 @@ void sub_8100E70(u8 taskId)
break;
}
}
+
+void sub_8100EEC(u8 taskId)
+{
+ MenuZeroFillWindowRect(0, 0, 29, 19);
+ gSprites[gUnknown_020391A8].data7 = 0;
+ gSprites[gUnknown_020391A8].invisible = 0;
+ gSprites[gUnknown_020391A8].callback = sub_8101698;
+ gSprites[gUnknown_020391A9].pos1.x = 0x88;
+ gSprites[gUnknown_020391A9].pos1.y = 0x48;
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].func = sub_8100494;
+}
+
+void sub_8100F88(u8 taskId)
+{
+ gTasks[taskId].data[10] = 0;
+ sub_810045C();
+ sub_8101024(taskId);
+}
+
+void sub_8100FB4(u8 taskId)
+{
+ gTasks[taskId].data[10] = 0;
+ sub_810045C();
+ gSprites[gUnknown_020391A8].invisible = 0;
+ gSprites[gUnknown_020391A8].callback = SpriteCallbackDummy;
+ DisplayItemMessageOnField(taskId, gSecretBaseText_StopPuttingAwayDecor, sub_810156C, 0);
+}
+
+void sub_8101024(u8 taskId)
+{
+ u8 mtBehavior;
+ s16 *data;
+ sub_8101460(taskId);
+ if (gUnknown_02039234 != 0)
+ {
+ DisplayItemMessageOnField(taskId, gSecretBaseText_ReturnDecor, sub_8101518, 0);
+ } else
+ {
+ data = gTasks[taskId].data;
+ mtBehavior = MapGridGetMetatileBehaviorAt(data[0], data[1]);
+ if (MetatileBehavior_IsSecretBasePC(mtBehavior) == TRUE || sub_805738C(mtBehavior) == TRUE)
+ {
+ gSprites[gUnknown_020391A8].invisible = 0;
+ gSprites[gUnknown_020391A8].callback = SpriteCallbackDummy;
+ DisplayItemMessageOnField(taskId, gSecretBaseText_StopPuttingAwayDecor, sub_810156C, 0);
+ } else
+ {
+ DisplayItemMessageOnField(taskId, gSecretBaseText_NoDecor, sub_81010F0, 0);
+ }
+ }
+}
+
+void sub_81010F0(u8 taskId)
+{
+ if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON))
+ {
+ sub_8100EEC(taskId);
+ }
+}
+
+void sub_8101118(u8 decorIdx, struct UnkStruct_020391B4 *unk_020391B4)
+{
+ if (gDecorations[decorIdx].decor_field_12 == 0)
+ {
+ unk_020391B4->var01 = 1;
+ unk_020391B4->var02 = 1;
+ } else if (gDecorations[decorIdx].decor_field_12 == 1)
+ {
+ unk_020391B4->var01 = 2;
+ unk_020391B4->var02 = 1;
+ } else if (gDecorations[decorIdx].decor_field_12 == 2)
+ {
+ unk_020391B4->var01 = 3;
+ unk_020391B4->var02 = 1;
+ } else if (gDecorations[decorIdx].decor_field_12 == 3)
+ {
+ unk_020391B4->var01 = 4;
+ unk_020391B4->var02 = 2;
+ } else if (gDecorations[decorIdx].decor_field_12 == 4)
+ {
+ unk_020391B4->var01 = 2;
+ unk_020391B4->var02 = 2;
+ } else if (gDecorations[decorIdx].decor_field_12 == 5)
+ {
+ unk_020391B4->var01 = 1;
+ unk_020391B4->var02 = 2;
+ } else if (gDecorations[decorIdx].decor_field_12 == 6)
+ {
+ unk_020391B4->var01 = 1;
+ unk_020391B4->var02 = 3;
+ } else if (gDecorations[decorIdx].decor_field_12 == 7)
+ {
+ unk_020391B4->var01 = 2;
+ unk_020391B4->var02 = 4;
+ } else if (gDecorations[decorIdx].decor_field_12 == 8)
+ {
+ unk_020391B4->var01 = 3;
+ unk_020391B4->var02 = 3;
+ } else if (gDecorations[decorIdx].decor_field_12 == 9)
+ {
+ unk_020391B4->var01 = 3;
+ unk_020391B4->var02 = 2;
+ }
+}
+
+void sub_8101198(u8 x, u8 y)
+{
+ gSprites[gUnknown_020391A8].invisible = 1;
+ gSprites[gUnknown_020391A8].callback = SpriteCallbackDummy;
+ gSprites[gUnknown_020391A9].pos1.x = 0x88 + x * 16;
+ gSprites[gUnknown_020391A9].pos1.y = 0x48 + y * 16;
+}
+
+bool8 sub_8101200(u8 taskId, u8 decorIdx, struct UnkStruct_020391B4 *unk_020391B4)
+{
+ u8 x;
+ u8 y;
+ u8 xOff;
+ u8 yOff;
+ x = gTasks[taskId].data[0] - 7;
+ y = gTasks[taskId].data[1] - 7;
+ xOff = ewram_1f000.pos[decorIdx] >> 4;
+ yOff = ewram_1f000.pos[decorIdx] & 0xf;
+ if (ewram_1f000.items[decorIdx] == DECOR_SAND_ORNAMENT && MapGridGetMetatileIdAt(xOff + 7, yOff + 7) == 0x28c)
+ {
+ unk_020391B4->var02--;
+ }
+ if (x >= xOff && x < xOff + unk_020391B4->var01 && y > yOff - unk_020391B4->var02 && y <= yOff)
+ {
+ sub_8101198(unk_020391B4->var01 - (x - xOff + 1), yOff - y);
+ return TRUE;
+ }
+ return FALSE;
+}