summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorscnorton <scnorton@biociphers.org>2017-06-02 16:34:20 -0400
committerscnorton <scnorton@biociphers.org>2017-06-02 16:34:20 -0400
commita067876104be90ddbb54d4ffa344d54573d05293 (patch)
tree94b41879d231243fcd4d43abc8f2c09ad88a1fe8
parent3d82de46b836c00a617869bf6e2916eeb3cc4fef (diff)
sub_80FF6AC
-rwxr-xr-xasm/decoration.s97
-rw-r--r--include/decoration.h9
-rw-r--r--include/palette.h32
-rw-r--r--src/decoration.c48
4 files changed, 64 insertions, 122 deletions
diff --git a/asm/decoration.s b/asm/decoration.s
index 50248d7f4..38d7e32ec 100755
--- a/asm/decoration.s
+++ b/asm/decoration.s
@@ -8,103 +8,6 @@
.equiv ewram_1f000, 0x0201f000
- thumb_func_start sub_80FF6AC
-sub_80FF6AC: @ 80FF6AC
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r1, _080FF6D0 @ =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r7, r0, r1
- movs r1, 0xC
- ldrsh r0, [r7, r1]
- cmp r0, 0x1
- beq _080FF714
- cmp r0, 0x1
- bgt _080FF6D4
- cmp r0, 0
- beq _080FF6DA
- b _080FF77A
- .align 2, 0
-_080FF6D0: .4byte gTasks
-_080FF6D4:
- cmp r0, 0x2
- beq _080FF764
- b _080FF77A
-_080FF6DA:
- ldr r0, _080FF70C @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _080FF77A
- adds r0, r6, 0
- bl sub_80FF0E0
- movs r0, 0
- bl DestroyVerticalScrollIndicator
- movs r0, 0x1
- bl DestroyVerticalScrollIndicator
- ldr r0, _080FF710 @ =gUnknown_020388F7
- movs r1, 0x8
- bl sub_80F9520
- bl BuyMenuFreeMemory
- movs r0, 0x1
- strh r0, [r7, 0xC]
- b _080FF77A
- .align 2, 0
-_080FF70C: .4byte gPaletteFade
-_080FF710: .4byte gUnknown_020388F7
-_080FF714:
- ldr r4, _080FF754 @ =gPaletteFade
- ldrb r0, [r4, 0x8]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r4, 0x8]
- ldr r5, _080FF758 @ =gUnknown_02038900
- ldr r0, _080FF75C @ =gUnknown_020388F5
- ldrb r1, [r0]
- ldr r0, _080FF760 @ =gUnknown_020388D0
- ldr r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- adds r0, r5, 0
- bl AddDecorationIconObjectFromFieldObject
- adds r0, r6, 0
- bl sub_80FF960
- adds r0, r6, 0
- adds r1, r5, 0
- bl SetUpPlacingDecorationPlayerAvatar
- bl pal_fill_black
- ldrb r1, [r4, 0x8]
- movs r0, 0x7F
- ands r0, r1
- strb r0, [r4, 0x8]
- movs r0, 0x2
- strh r0, [r7, 0xC]
- b _080FF77A
- .align 2, 0
-_080FF754: .4byte gPaletteFade
-_080FF758: .4byte gUnknown_02038900
-_080FF75C: .4byte gUnknown_020388F5
-_080FF760: .4byte gUnknown_020388D0
-_080FF764:
- bl sub_807D770
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080FF77A
- movs r0, 0
- strh r0, [r7, 0x20]
- adds r0, r6, 0
- bl sub_810065C
-_080FF77A:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80FF6AC
-
thumb_func_start AddDecorationIconObjectFromFieldObject
AddDecorationIconObjectFromFieldObject: @ 80FF780
push {r4-r6,lr}
diff --git a/include/decoration.h b/include/decoration.h
index b0484c3be..afcfcae87 100644
--- a/include/decoration.h
+++ b/include/decoration.h
@@ -167,7 +167,7 @@ extern u8 ewram[];
extern struct Decoration gDecorations[0x77];
extern struct Decoration *gUnknown_02038900;
-extern u8 *(gUnknown_020388D0[]);
+extern u8 *gUnknown_020388D0;
extern u8 gUnknown_020388D4;
extern u8 gUnknown_020388D5;
@@ -199,6 +199,7 @@ extern void sub_80B3068(u8); // src/shop
extern u8 sub_8134194(u8); // src/decoration_inventory
extern bool8 sub_81341D4(void); // src/decoration_inventory
extern void sub_8134104(u8); // src/decoration_inventory
+extern bool8 sub_807D770(void);
extern void sub_80F944C(void); // src/menu_helpers
extern void sub_80F9480(u8 *, u8); // src/menu_helpers
extern void sub_80F94A4(u8, u8 *, u8, s16); // src/menu_helpers
@@ -209,8 +210,8 @@ 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 ReshowPlayerPC(u8); // src/player_pc
+extern void ReshowPlayerPC(u8); // src/player_pc
void sub_80FE2B4(void);
void Task_DecorationPCProcessMenuInput(u8);
void sub_80FE394(void);
@@ -228,6 +229,10 @@ void sub_80FECE0(u8);
void sub_80FEF50(u8);
void sub_80FF394(u16, u16, u16);
void sub_80FF6AC(u8);
+void sub_80FF960(u8);
+void sub_810065C(u8);
void sub_8109DAC(u8);
+void AddDecorationIconObjectFromFieldObject(struct Decoration **, u8);
+void SetUpPlacingDecorationPlayerAvatar(u8, struct Decoration **);
#endif // GUARD_DECORATION_H
diff --git a/include/palette.h b/include/palette.h
index 37fcb4d65..193773d24 100644
--- a/include/palette.h
+++ b/include/palette.h
@@ -16,22 +16,22 @@ enum
struct PaletteFadeControl
{
- u32 multipurpose1;
- u8 delayCounter:6;
- u16 y:5; // blend coefficient
- u16 targetY:5; // target blend coefficient
- u16 blendColor:15;
- u16 active:1;
- u16 multipurpose2:6;
- u16 yDec:1; // whether blend coefficient is decreasing
- u16 bufferTransferDisabled:1;
- u16 mode:2;
- u16 shouldResetBlendRegisters:1;
- u16 hardwareFadeFinishing:1;
- u16 softwareFadeFinishingCounter:5;
- u16 softwareFadeFinishing:1;
- u16 objPaletteToggle:1;
- u8 deltaY:4; // rate of change of blend coefficient
+ /*0x00*/ u32 multipurpose1;
+ /*0x04*/ u8 delayCounter:6;
+ /*0x05*/ u16 y:5; // blend coefficient
+ /*0x05-06*/ u16 targetY:5; // target blend coefficient
+ /*0x07*/ u16 blendColor:15;
+ /*0x07*/ u16 active:1;
+ /*0x08*/ u16 multipurpose2:6;
+ /*0x08*/ u16 yDec:1; // whether blend coefficient is decreasing
+ /*0x08*/ u16 bufferTransferDisabled:1;
+ /*0x09*/ u16 mode:2;
+ /*0x09*/ u16 shouldResetBlendRegisters:1;
+ /*0x09*/ u16 hardwareFadeFinishing:1;
+ /*0x09-0a*/ u16 softwareFadeFinishingCounter:5;
+ /*0x0a*/ u16 softwareFadeFinishing:1;
+ /*0x0a*/ u16 objPaletteToggle:1;
+ /*0x0a*/ u8 deltaY:4; // rate of change of blend coefficient
};
extern struct PaletteFadeControl gPaletteFade;
diff --git a/src/decoration.c b/src/decoration.c
index d172e1426..75f9f4b96 100644
--- a/src/decoration.c
+++ b/src/decoration.c
@@ -199,7 +199,7 @@ void sub_80FE604(u8 taskId)
if (gUnknown_020388D5)
{
sub_8134104(gUnknown_020388F6);
- *gUnknown_020388D0 = gDecorationInventories[gUnknown_020388F6].items;
+ gUnknown_020388D0 = gDecorationInventories[gUnknown_020388F6].items;
sub_80FEF50(taskId);
sub_80F944C();
sub_80F9480(gUnknown_020388F7, 8);
@@ -385,15 +385,15 @@ void sub_80FEABC(u8 taskId, u8 dummy1)
sub_8072A18(gUnknownText_Exit, 0x08, 8 * ni, 0x68, 1);
break;
}
- if ((*gUnknown_020388D0)[i])
+ if (gUnknown_020388D0[i])
{
if (ewram_1f000.isPlayerRoom == 1 && gUnknown_020388F6 != DECOCAT_DOLL && gUnknown_020388F6 != DECOCAT_CUSHION && gTasks[taskId].data[11] == 0)
{
- StringCopy(gStringVar1, gDecorations[(*gUnknown_020388D0)[i]].name);
+ StringCopy(gStringVar1, gDecorations[gUnknown_020388D0[i]].name);
sub_8072A18(gUnknown_083EC65A, 0x08, 8 * ni, 0x68, 1);
} else
{
- sub_8072A18(gDecorations[(*gUnknown_020388D0)[i]].name, 0x08, 8 * ni, 0x68, 1);
+ sub_8072A18(gDecorations[gUnknown_020388D0[i]].name, 0x08, 8 * ni, 0x68, 1);
}
for (j=0; j<16; j++)
{
@@ -429,7 +429,7 @@ void sub_80FECB8(u8 decoCat)
void sub_80FECE0(u8 decoCat)
{
- sub_8072AB0(gDecorations[(*gUnknown_020388D0)[decoCat]].description, 0x80, 0x68, 0x68, 0x30, 0x1);
+ sub_8072AB0(gDecorations[gUnknown_020388D0[decoCat]].description, 0x80, 0x68, 0x68, 0x30, 0x1);
}
void sub_80FED1C(void)
@@ -478,7 +478,7 @@ void sub_80FED90(u8 taskId)
{
for (j=0; j<gDecorationInventories[gUnknown_020388F6].size; j++)
{
- if ((*gUnknown_020388D0)[j] == gSaveBlock1.secretBases[0].decorations[i])
+ if (gUnknown_020388D0[j] == gSaveBlock1.secretBases[0].decorations[i])
{
for (k=0; k<cnt && gUnknown_020388D6[k]!=j+1; k++);
if (k == cnt)
@@ -498,7 +498,7 @@ void sub_80FED90(u8 taskId)
{
for (j=0; j<gDecorationInventories[gUnknown_020388F6].size; j++)
{
- if ((*gUnknown_020388D0)[j] == gSaveBlock1.playerRoomDecor[i] && !sub_80FED64(j + 1))
+ if (gUnknown_020388D0[j] == gSaveBlock1.playerRoomDecor[i] && !sub_80FED64(j + 1))
{
for (k=0; k<cnt && gUnknown_020388E6[k]!=j+1; k++);
if (k == cnt)
@@ -794,3 +794,37 @@ void sub_80FF5BC(u8 taskId)
DisplayItemMessageOnField(taskId, gSecretBaseText_InUseAlready, sub_80FEFF4, 0);
}
}
+
+void sub_80FF6AC(u8 taskId)
+{
+ switch (gTasks[taskId].data[2])
+ {
+ case 0:
+ if (!gPaletteFade.active)
+ {
+ sub_80FF0E0(taskId);
+ DestroyVerticalScrollIndicator(0);
+ DestroyVerticalScrollIndicator(1);
+ sub_80F9520(gUnknown_020388F7, 8);
+ BuyMenuFreeMemory();
+ gTasks[taskId].data[2] = 1;
+ }
+ break;
+ case 1:
+ gPaletteFade.bufferTransferDisabled = 1;
+ AddDecorationIconObjectFromFieldObject(&gUnknown_02038900, gUnknown_020388D0[gUnknown_020388F5]);
+ sub_80FF960(taskId);
+ SetUpPlacingDecorationPlayerAvatar(taskId, &gUnknown_02038900);
+ pal_fill_black();
+ gPaletteFade.bufferTransferDisabled = 0;
+ gTasks[taskId].data[2] = 2;
+ break;
+ case 2:
+ if (sub_807D770() == 1)
+ {
+ gTasks[taskId].data[12] = 0;
+ sub_810065C(taskId);
+ }
+ break;
+ }
+}