summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2019-05-20 10:15:31 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2019-05-20 10:15:31 -0400
commit68ac134c0c82db82e0b59b071d766108c3bbd9f6 (patch)
tree5fdc26c242d19f8451a6ec140297c75d0f55e372
parent8583174c801fd5ce13fa0fefbd9daa9f1e6ba193 (diff)
Finish wireless_communication_status_screen
-rw-r--r--asm/wireless_communication_status_screen.s310
-rw-r--r--include/librfu.h27
-rw-r--r--include/link_rfu.h1
-rw-r--r--include/union_room.h149
-rw-r--r--ld_script.txt1
-rw-r--r--src/wireless_communication_status_screen.c128
6 files changed, 297 insertions, 319 deletions
diff --git a/asm/wireless_communication_status_screen.s b/asm/wireless_communication_status_screen.s
deleted file mode 100644
index f0bb19614..000000000
--- a/asm/wireless_communication_status_screen.s
+++ /dev/null
@@ -1,310 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_814F65C
-sub_814F65C: @ 814F65C
- push {r4-r7,lr}
- sub sp, 0x18
- mov r12, r2
- ldr r2, [sp, 0x2C]
- ldr r4, [sp, 0x30]
- lsls r0, 24
- lsrs r7, r0, 24
- lsls r1, 24
- lsrs r5, r1, 24
- lsls r3, 24
- lsrs r6, r3, 24
- lsls r2, 24
- lsrs r3, r2, 24
- lsls r4, 24
- lsrs r0, r4, 24
- cmp r0, 0x4
- bhi _0814F6E6
- lsls r0, 2
- ldr r1, _0814F688 @ =_0814F68C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0814F688: .4byte _0814F68C
- .align 2, 0
-_0814F68C:
- .4byte _0814F6A0
- .4byte _0814F6AE
- .4byte _0814F6BC
- .4byte _0814F6CA
- .4byte _0814F6D8
-_0814F6A0:
- add r1, sp, 0x14
- movs r0, 0
- strb r0, [r1]
- movs r0, 0x2
- strb r0, [r1, 0x1]
- movs r0, 0x3
- b _0814F6E4
-_0814F6AE:
- add r1, sp, 0x14
- movs r0, 0
- strb r0, [r1]
- movs r0, 0x1
- strb r0, [r1, 0x1]
- movs r0, 0x3
- b _0814F6E4
-_0814F6BC:
- add r1, sp, 0x14
- movs r0, 0
- strb r0, [r1]
- movs r0, 0x4
- strb r0, [r1, 0x1]
- movs r0, 0x5
- b _0814F6E4
-_0814F6CA:
- add r1, sp, 0x14
- movs r0, 0
- strb r0, [r1]
- movs r0, 0x7
- strb r0, [r1, 0x1]
- movs r0, 0x6
- b _0814F6E4
-_0814F6D8:
- add r1, sp, 0x14
- movs r0, 0
- strb r0, [r1]
- movs r0, 0x1
- strb r0, [r1, 0x1]
- movs r0, 0x2
-_0814F6E4:
- strb r0, [r1, 0x2]
-_0814F6E6:
- negs r0, r5
- orrs r0, r5
- lsrs r0, 31
- str r0, [sp]
- movs r0, 0
- str r0, [sp, 0x4]
- add r0, sp, 0x14
- str r0, [sp, 0x8]
- movs r0, 0x1
- negs r0, r0
- str r0, [sp, 0xC]
- mov r0, r12
- str r0, [sp, 0x10]
- adds r0, r7, 0
- adds r1, r5, 0
- adds r2, r6, 0
- bl AddTextPrinterParametrized2
- add sp, 0x18
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_814F65C
-
- thumb_func_start sub_814F714
-sub_814F714: @ 814F714
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- mov r12, r0
- adds r7, r1, 0
- ldrb r0, [r0, 0xA]
- lsls r0, 25
- lsrs r0, 25
- mov r8, r0
- movs r4, 0
- ldr r0, _0814F78C @ =gUnknown_846FAC0
- mov r9, r0
- movs r1, 0x1
- add r1, r9
- mov r10, r1
- mov r3, r12
- adds r3, 0x4
- str r3, [sp]
-_0814F73E:
- lsls r0, r4, 1
- adds r2, r0, r4
- mov r3, r9
- adds r1, r2, r3
- adds r5, r0, 0
- adds r6, r4, 0x1
- ldrb r1, [r1]
- cmp r8, r1
- bne _0814F7A2
- mov r0, r12
- ldrb r1, [r0, 0x1A]
- movs r0, 0x3
- ands r0, r1
- cmp r0, 0x1
- bne _0814F7A2
- mov r0, r9
- adds r0, 0x2
- adds r3, r2, r0
- ldrb r0, [r3]
- cmp r0, 0
- bne _0814F790
- movs r2, 0
- movs r1, 0
- ldr r3, [sp]
-_0814F76E:
- adds r0, r3, r1
- ldrb r0, [r0]
- cmp r0, 0
- beq _0814F778
- adds r2, 0x1
-_0814F778:
- adds r1, 0x1
- cmp r1, 0x3
- ble _0814F76E
- adds r2, 0x1
- adds r0, r5, r4
- add r0, r10
- ldrb r1, [r0]
- lsls r1, 2
- adds r1, r7
- b _0814F79C
- .align 2, 0
-_0814F78C: .4byte gUnknown_846FAC0
-_0814F790:
- mov r1, r10
- adds r0, r2, r1
- ldrb r1, [r0]
- lsls r1, 2
- adds r1, r7
- ldrb r2, [r3]
-_0814F79C:
- ldr r0, [r1]
- adds r0, r2
- str r0, [r1]
-_0814F7A2:
- adds r4, r6, 0
- cmp r4, 0x16
- bls _0814F73E
- mov r0, r8
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_814F714
-
- thumb_func_start sub_814F7BC
-sub_814F7BC: @ 814F7BC
- push {r4,lr}
- movs r4, 0
- adds r3, r1, 0
- adds r2, r0, 0
-_0814F7C4:
- ldr r1, [r2]
- ldr r0, [r3]
- cmp r1, r0
- beq _0814F7D0
- movs r0, 0x1
- b _0814F7DC
-_0814F7D0:
- adds r3, 0x4
- adds r2, 0x4
- adds r4, 0x1
- cmp r4, 0x3
- ble _0814F7C4
- movs r0, 0
-_0814F7DC:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_814F7BC
-
- thumb_func_start sub_814F7E4
-sub_814F7E4: @ 814F7E4
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x10
- adds r6, r0, 0
- mov r9, r1
- adds r5, r2, 0
- lsls r4, r3, 24
- lsrs r4, 24
- movs r0, 0
- mov r8, r0
- mov r0, sp
- movs r1, 0
- movs r2, 0x10
- bl memset
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- ldr r1, _0814F84C @ =gTasks+0x8
- adds r7, r0, r1
- movs r4, 0
-_0814F812:
- lsls r1, r4, 5
- ldr r0, [r7]
- adds r0, r1
- mov r1, sp
- bl sub_814F714
- adds r1, r0, 0
- ldr r0, [r5]
- cmp r1, r0
- beq _0814F82C
- str r1, [r5]
- movs r2, 0x1
- mov r8, r2
-_0814F82C:
- adds r5, 0x4
- adds r4, 0x1
- cmp r4, 0xF
- ble _0814F812
- mov r0, sp
- mov r1, r9
- bl sub_814F7BC
- cmp r0, 0
- bne _0814F850
- mov r3, r8
- cmp r3, 0x1
- beq _0814F874
- movs r0, 0
- b _0814F876
- .align 2, 0
-_0814F84C: .4byte gTasks+0x8
-_0814F850:
- adds r1, r6, 0
- mov r0, sp
- ldm r0!, {r2-r4}
- stm r1!, {r2-r4}
- ldr r0, [r0]
- str r0, [r1]
- mov r1, r9
- mov r0, sp
- ldm r0!, {r2-r4}
- stm r1!, {r2-r4}
- ldr r0, [r0]
- str r0, [r1]
- ldr r0, [r6]
- ldr r1, [r6, 0x4]
- adds r0, r1
- ldr r1, [r6, 0x8]
- adds r0, r1
- str r0, [r6, 0xC]
-_0814F874:
- movs r0, 0x1
-_0814F876:
- add sp, 0x10
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_814F7E4
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/include/librfu.h b/include/librfu.h
index dbc8a41a6..90f69cb5a 100644
--- a/include/librfu.h
+++ b/include/librfu.h
@@ -67,6 +67,33 @@ union RfuPacket
struct RfuPacket8 rfuPacket8;
};
+struct UnkLinkRfuStruct_02022B14Substruct
+{
+ u16 unk_00_0:4;
+ u16 unk_00_4:1;
+ u16 unk_00_5:1;
+ u16 unk_00_6:1;
+ u16 unk_00_7:1;
+ u16 unk_01_0:1;
+ u16 unk_01_1:1;
+ u16 unk_01_2:4;
+ u16 unk_01_6:2;
+ u8 playerTrainerId[2];
+};
+
+struct __attribute__((packed, aligned(2))) UnkLinkRfuStruct_02022B14
+{
+ struct UnkLinkRfuStruct_02022B14Substruct unk_00;
+ u8 unk_04[4];
+ u16 species:10;
+ u16 type:6;
+ u8 unk_0a_0:7;
+ u8 unk_0a_7:1;
+ u8 playerGender:1;
+ u8 unk_0b_1:7;
+ u8 unk_0c;
+};
+
struct RfuStruct
{
vs32 unk_0;
diff --git a/include/link_rfu.h b/include/link_rfu.h
index 8d02577a5..7e0ea2068 100644
--- a/include/link_rfu.h
+++ b/include/link_rfu.h
@@ -17,5 +17,6 @@ void MEvent_CreateTask_CardOrNewsWithFriend(u8);
void MEvent_CreateTask_CardOrNewsOverWireless(u8);
void MEvent_CreateTask_Leader(u8);
void sub_80F9E2C(void * data);
+u8 sub_8116DE0(void);
#endif //GUARD_LINK_RFU_H
diff --git a/include/union_room.h b/include/union_room.h
new file mode 100644
index 000000000..2e97d87f4
--- /dev/null
+++ b/include/union_room.h
@@ -0,0 +1,149 @@
+#ifndef GUARD_UNION_ROOM_H
+#define GUARD_UNION_ROOM_H
+
+struct UnkStruct_Shared
+{
+ struct UnkLinkRfuStruct_02022B14 field_0;
+ u8 ALIGNED(4) playerName[PLAYER_NAME_LENGTH];
+};
+
+struct UnkStruct_x1C
+{
+ struct UnkStruct_Shared unk0;
+ u8 unk18:1;
+};
+
+struct UnkStruct_x20
+{
+ struct UnkStruct_Shared unk;
+ u16 field_18;
+ u8 field_1A_0:2;
+ u8 field_1A_1:1;
+ u8 field_1B;
+ u8 field_1D;
+ u8 field_1E;
+ u8 field_1F;
+};
+
+struct UnkStruct_Main0
+{
+ struct UnkStruct_x20 arr[8];
+};
+
+struct UnkStruct_Main4
+{
+ struct UnkStruct_x1C arr[5];
+};
+
+struct UnkStruct_Main8
+{
+ struct UnkStruct_x20 arr[5];
+};
+
+struct UnkStruct_Leader
+{
+ struct UnkStruct_Main0 *field_0;
+ struct UnkStruct_Main4 *field_4;
+ struct UnkStruct_Main8 *field_8;
+ u8 state;
+ u8 textState;
+ u8 field_E;
+ u8 listWindowId;
+ u8 field_10;
+ u8 field_11;
+ u8 listTaskId;
+ u8 field_13;
+ u8 field_14;
+ u8 field_15;
+ u8 field_16;
+ u8 field_17;
+ u8 field_18;
+ u8 field_19;
+ u16 field_1A;
+};
+
+struct UnkStruct_Group
+{
+ struct UnkStruct_Main0 *field_0;
+ struct UnkStruct_Main4 *field_4;
+ u8 state;
+ u8 textState;
+ u8 field_A;
+ u8 listWindowId;
+ u8 field_C;
+ u8 field_D;
+ u8 listTaskId;
+ u8 field_F;
+ u8 field_10;
+ u8 field_11;
+ u8 field_12;
+ u8 field_13;
+ u8 field_14;
+ u8 field_15;
+};
+
+struct UnkStruct_8019BA8
+{
+ u8 field_0;
+ u8 field_1;
+ s8 field_2;
+ u8 field_3;
+};
+
+struct UnkStruct_URoom
+{
+ struct UnkStruct_Main0 *field_0;
+ struct UnkStruct_Main4 *field_4;
+ struct UnkStruct_Main0 *field_8;
+ struct UnkStruct_Main4 *field_C;
+ u16 field_10;
+ u16 field_12;
+ u8 state;
+ u8 stateAfterPrint;
+ u8 textState;
+ u8 field_17;
+ u8 field_18;
+ u8 field_19;
+ u8 field_1A;
+ u8 field_1B;
+ u8 field_1C;
+ u8 field_1D;
+ u8 field_1E;
+ u8 field_1F;
+ u8 field_20;
+ u8 spriteIds[40];
+ u8 field_49;
+ u8 field_4A;
+ u16 field_4C[6];
+ u8 field_58[0x98 - 0x58];
+ u16 field_98;
+ u16 field_9A[3];
+ struct UnkStruct_8019BA8 field_A0[8];
+ u8 field_C0[12][15];
+ u8 field_174[48];
+ u8 field_1A4[200];
+};
+
+union UnkUnion_Main
+{
+ struct UnkStruct_Leader *leader;
+ struct UnkStruct_Group *group;
+ struct UnkStruct_URoom *uRoom;
+};
+
+struct TradeUnkStruct
+{
+ u16 field_0;
+ u16 type;
+ u32 playerPersonality;
+ u8 field_8;
+ u8 field_9;
+ u16 playerSpecies;
+ u16 playerLevel;
+ u16 species;
+ u16 level;
+ u16 field_12;
+ u32 personality;
+};
+
+#endif //GUARD_UNION_ROOM_H
diff --git a/ld_script.txt b/ld_script.txt
index a2f01cea2..6081171bb 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -252,7 +252,6 @@ SECTIONS {
asm/berry_crush_2.o(.text);
asm/berry_crush_3.o(.text);
src/wireless_communication_status_screen.o(.text);
- asm/wireless_communication_status_screen.o(.text);
src/braille_text.o(.text);
asm/text_window.o(.text);
src/quest_log_8150454.o(.text);
diff --git a/src/wireless_communication_status_screen.c b/src/wireless_communication_status_screen.c
index f2a802449..4907bd6e1 100644
--- a/src/wireless_communication_status_screen.c
+++ b/src/wireless_communication_status_screen.c
@@ -13,11 +13,17 @@
#include "unk_text_util.h"
#include "overworld.h"
#include "sound.h"
+#include "menu.h"
+#include "librfu.h"
+#include "link_rfu.h"
+#include "union_room.h"
#include "constants/songs.h"
struct WirelessCommunicationStatusScreenStruct
{
- u32 field_00[6][4];
+ u32 field_00[4];
+ u32 field_10[4];
+ u32 field_20[16];
u8 field_60;
u8 field_61;
u8 filler_62[0xA];
@@ -37,9 +43,8 @@ extern const u8 gUnknown_841E29E[];
void sub_814F1E4(void);
void sub_814F46C(u8 taskId);
-u8 sub_8116DE0(void);
void sub_814F65C(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 palIdx);
-bool32 sub_814F7E4(u32 * a0, u32 * a1, u32 * a2, u8 a3);
+bool32 sub_814F7E4(u32 * a0, u32 * a1, u32 * a2, u8 taskId);
const u16 gUnknown_846F4D0[][16] = {
INCBIN_U16("graphics/misc/unk_846f4d0.gbapal"),
@@ -148,8 +153,7 @@ const u8 gUnknown_846FAC0[][3] = {
{0x54, 0x02, 0x01},
{0x53, 0x02, 0x02},
{0x51, 0x02, 0x01},
- {0x52, 0x02, 0x01},
- {0x00, 0x00, 0x00}
+ {0x52, 0x02, 0x01}
};
void sub_814F19C(void)
@@ -197,7 +201,7 @@ void sub_814F1E4(void)
SetVBlankCallback(sub_814F1C0);
gUnknown_3002040->field_60 = CreateTask(sub_814F46C, 0);
gUnknown_3002040->field_61 = sub_8116DE0();
- gUnknown_3002040->field_00[1][3] = 1;
+ gUnknown_3002040->field_10[3] = 1;
ChangeBgX(0, 0, 0);
ChangeBgY(0, 0, 0);
ChangeBgX(1, 0, 0);
@@ -287,12 +291,12 @@ void sub_814F46C(u8 taskId)
gTasks[taskId].data[0]++;
break;
case 3:
- if (sub_814F7E4(gUnknown_3002040->field_00[0], gUnknown_3002040->field_00[1], gUnknown_3002040->field_00[2], gUnknown_3002040->field_61))
+ if (sub_814F7E4(gUnknown_3002040->field_00, gUnknown_3002040->field_10, gUnknown_3002040->field_20, gUnknown_3002040->field_61))
{
FillWindowPixelBuffer(2, 0x00);
for (i = 0; i < 4; i++)
{
- ConvertIntToDecimalStringN(gStringVar4, gUnknown_3002040->field_00[0][i], STR_CONV_MODE_RIGHT_ALIGN, 2);
+ ConvertIntToDecimalStringN(gStringVar4, gUnknown_3002040->field_00[i], STR_CONV_MODE_RIGHT_ALIGN, 2);
if (i != 3)
sub_814F65C(2, 3, gStringVar4, 4, 30 * i + 10, 1);
else
@@ -322,3 +326,111 @@ void sub_814F46C(u8 taskId)
break;
}
}
+
+void sub_814F65C(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 palIdx)
+{
+ struct TextColor textColor;
+ switch (palIdx)
+ {
+ case 0:
+ textColor.fgColor = 0;
+ textColor.bgColor = 2;
+ textColor.shadowColor = 3;
+ break;
+ case 1:
+ textColor.fgColor = 0;
+ textColor.bgColor = 1;
+ textColor.shadowColor = 3;
+ break;
+ case 2:
+ textColor.fgColor = 0;
+ textColor.bgColor = 4;
+ textColor.shadowColor = 5;
+ break;
+ case 3:
+ textColor.fgColor = 0;
+ textColor.bgColor = 7;
+ textColor.shadowColor = 6;
+ break;
+ case 4:
+ textColor.fgColor = 0;
+ textColor.bgColor = 1;
+ textColor.shadowColor = 2;
+ break;
+ // default: UB
+ }
+ AddTextPrinterParametrized2(windowId, fontId,x, y, fontId == 0 ? 0 : 1, 0, &textColor, -1, str);
+}
+
+u32 sub_814F714(struct UnkStruct_x20 * unk20, u32 * arg1)
+{
+ u32 r8 = unk20->unk.field_0.unk_0a_0;
+ s32 i, j, k;
+
+ for (i = 0; i < NELEMS(gUnknown_846FAC0); i++)
+ {
+ if (r8 == gUnknown_846FAC0[i][0] && unk20->field_1A_0 == 1)
+ {
+ if (gUnknown_846FAC0[i][2] == 0)
+ {
+ k = 0;
+ for (j = 0; j < 4; j++)
+ {
+ if (unk20->unk.field_0.unk_04[j] != 0) k++;
+ }
+ k++;
+ arg1[gUnknown_846FAC0[i][1]] += k;
+ }
+ else
+ {
+ arg1[gUnknown_846FAC0[i][1]] += gUnknown_846FAC0[i][2];
+ }
+ }
+ }
+
+ return r8;
+}
+
+bool32 sub_814F7BC(const u32 * ptr0, const u32 * ptr1)
+{
+ s32 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (ptr0[i] != ptr1[i])
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+bool32 sub_814F7E4(u32 * a0, u32 * a1, u32 * a2, u8 taskId)
+{
+ bool32 r8 = FALSE;
+ u32 sp0[4] = {0, 0, 0, 0};
+ struct UnkStruct_Group * group = (void *)gTasks[taskId].data;
+ s32 i;
+
+ for (i = 0; i < 16; i++)
+ {
+ u32 r1 = sub_814F714(&group->field_0->arr[i], sp0);
+ if (r1 != a2[i])
+ {
+ a2[i] = r1;
+ r8 = TRUE;
+ }
+ }
+
+ if (sub_814F7BC(sp0, a1) == FALSE)
+ {
+ if (r8 == TRUE)
+ return TRUE;
+ else
+ return FALSE;
+ }
+
+ memcpy(a0, sp0, sizeof(sp0));
+ memcpy(a1, sp0, sizeof(sp0));
+ a0[3] = a0[0] + a0[1] + a0[2];
+ return TRUE;
+}