Finish wireless_communication_status_screen

This commit is contained in:
PikalaxALT
2019-05-20 10:15:31 -04:00
parent 8583174c80
commit 68ac134c0c
6 changed files with 297 additions and 319 deletions
-310
View File
@@ -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.
+27
View File
@@ -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;
+1
View File
@@ -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
+149
View File
@@ -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
-1
View File
@@ -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);
+120 -8
View File
@@ -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;
}