summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDizzyEggg <jajkodizzy@wp.pl>2018-12-02 13:59:55 +0100
committerDizzyEggg <jajkodizzy@wp.pl>2018-12-02 13:59:55 +0100
commitd137ebc7a9e0f4f73a1379ab667d90fbce859876 (patch)
tree5d97e70492b5512872893f7824d5c1608a5bec14 /src
parente17140536a392db42c5c21b568931c0b753acfda (diff)
Some more rom 8011dc0 work
Diffstat (limited to 'src')
-rw-r--r--src/link_rfu.c2
-rw-r--r--src/rom_8011DC0.c302
2 files changed, 273 insertions, 31 deletions
diff --git a/src/link_rfu.c b/src/link_rfu.c
index 7809842f4..308ad615c 100644
--- a/src/link_rfu.c
+++ b/src/link_rfu.c
@@ -4822,7 +4822,7 @@ void sub_8011C84(void)
gUnknown_03005000.unk_67 = CreateTask(sub_800EB44, 1);
}
-u16 ReadU16(const void *ptr)
+static u16 ReadU16(const void *ptr)
{
const u8 *ptr_ = ptr;
return (ptr_[1] << 8) | (ptr_[0]);
diff --git a/src/rom_8011DC0.c b/src/rom_8011DC0.c
index 250f80c4c..a197598de 100644
--- a/src/rom_8011DC0.c
+++ b/src/rom_8011DC0.c
@@ -63,7 +63,7 @@ struct UnkStruct_x20
struct UnkStruct_Main0
{
- struct UnkStruct_x20 arr[5];
+ struct UnkStruct_x20 arr[8];
};
struct UnkStruct_Main4
@@ -153,9 +153,7 @@ struct UnkStruct_URoom
u16 field_4C[6];
u8 field_58[0x98 - 0x58];
u16 field_98;
- u16 field_9A;
- u16 field_9C;
- u16 field_9E;
+ u16 field_9A[3];
struct UnkStruct_8019BA8 field_A0[8];
};
@@ -182,17 +180,18 @@ struct TradeUnkStruct
};
extern struct TradeUnkStruct gUnknown_02022C40;
-
+extern struct UnkLinkRfuStruct_02022B14Substruct gUnknown_02022C38;
extern union UnkUnion_Main gUnknown_02022C30;
-
extern u8 gUnknown_02022C2C;
extern u8 gUnknown_02022C2D;
extern u8 gUnknown_02022C3E;
extern u16 gUnknown_02022C3C;
-extern struct UnkLinkRfuStruct_02022B14Substruct gUnknown_02022C38;
-
+extern u8 gUnknown_02022C20[];
extern u8 gFieldLinkPlayerCount;
extern u8 gUnknown_03005DB4;
+extern u8 gSelectedOrderFromParty[];
+extern struct MailStruct gUnknown_020321C0[PARTY_SIZE];
+extern u8 gUnknown_02032298[2];
// IWRAM vars
IWRAM_DATA struct UnkStruct_Leader *gUnknown_03000DA0;
@@ -212,7 +211,7 @@ void sub_8014F48(u8 taskId);
void sub_80152F4(u8 taskId);
void sub_80156E0(u8 taskId);
void sub_80175EC(struct UnkStruct_Main4 *arg0, u8 count);
-void sub_8017580(struct UnkStruct_Main0 *arg0, u8 count);
+void sub_8017580(struct UnkStruct_x20 *arg0, u8 count);
u8 sub_8016FC0(struct UnkStruct_Main4 *arg0, u32 arg1);
u8 sub_8016FF0(struct UnkStruct_Main4 *arg0, u32 arg1);
bool8 PrintOnTextbox(u8 *textState, const u8 *str);
@@ -282,7 +281,10 @@ void sub_8019E3C(void);
void sub_80173B0(void);
s32 sub_8017D04(u32 type, u32 species);
void sub_8017020(const u8 *src);
-void sub_8019BA8();
+void sub_8019BA8(void *);
+s32 sub_8017EA0(u8 *dst, u32 gender, u16 *arg2, struct UnkStruct_URoom *arg3);
+void sub_801697C(u8 taskId);
+bool8 sub_8017630(struct UnkStruct_Shared* arg0, const struct UnkStruct_Shared* arg1);
// const rom data
extern const u8 *const gUnknown_082EDB60[][5];
@@ -376,7 +378,9 @@ extern const u8 *const gUnknown_082EE82C[][4];
extern const u8 *const gUnknown_082EE24C[][2];
-extern const struct UnkStruct_Shared gUnknown_082F045C[];
+extern const struct UnkStruct_Shared gUnknown_082F045C;
+
+extern const u8 *const gUnknown_082F04D8[22];
// code
void nullsub_89(void)
@@ -484,7 +488,7 @@ void sub_8012780(u8 taskId)
data->field_0 = AllocZeroed(0xA0);
data->field_8 = AllocZeroed(0xA0);
sub_80175EC(data->field_4, 4);
- sub_8017580(data->field_0, 5);
+ sub_8017580(data->field_0->arr, 5);
sub_800DF90(&data->field_0->arr[0].unk.field_0, data->field_0->arr[0].unk.playerName);
data->field_0->arr[0].field_18 = 0;
data->field_0->arr[0].field_1A_0 = 1;
@@ -1008,7 +1012,7 @@ u8 sub_8013398(struct UnkStruct_Main0 *arg0)
ret = copiedCount;
for (; copiedCount < 5; copiedCount++)
{
- data->field_0->arr[copiedCount].unk = gUnknown_082F045C[0];
+ data->field_0->arr[copiedCount].unk = gUnknown_082F045C;
data->field_0->arr[copiedCount].field_18 = 0;
data->field_0->arr[copiedCount].field_1A_0 = 0;
data->field_0->arr[copiedCount].field_1A_1 = 0;
@@ -1068,7 +1072,7 @@ void sub_80134E8(u8 taskId)
break;
case 2:
sub_80175EC(data->field_4, 4);
- sub_8017580(data->field_0, 16);
+ sub_8017580(data->field_0->arr, 16);
data->field_11 = sub_8016FC0(data->field_4, gSpecialVar_0x8004);
data->field_C = AddWindow(&gUnknown_082F00BC);
data->listWindowId = AddWindow(&gUnknown_082F0174);
@@ -1370,7 +1374,7 @@ void sub_8013C7C(u8 taskId)
break;
case 2:
sub_80175EC(data->field_4, 4);
- sub_8017580(data->field_0, 16);
+ sub_8017580(data->field_0->arr, 16);
data->field_11 = sub_8016FC0(data->field_4, 0xFF);
data->field_F = 0;
data->state = 3;
@@ -1395,8 +1399,6 @@ void sub_8013C7C(u8 taskId)
}
}
-extern const u8 *const gUnknown_082F04D8[22];
-
bool32 sub_8013D88(u32 arg0, u32 id)
{
if (id == 0xFF)
@@ -1518,9 +1520,6 @@ u8 sub_8013F78(void)
return taskId;
}
-extern struct MailStruct gUnknown_020321C0[PARTY_SIZE];
-extern u8 gUnknown_02032298[2];
-
void sub_8013F90(u8 taskId)
{
u32 monId = sub_8018120(&gUnknown_02022C40, GetMultiplayerId());
@@ -1784,8 +1783,6 @@ void sub_801440C(u8 taskId)
ScriptContext2_Disable();
}
-extern u8 gSelectedOrderFromParty[];
-
void sub_8014790(u8 taskId)
{
s16 *data = gTasks[taskId].data;
@@ -1934,7 +1931,7 @@ void sub_8014A40(u8 taskId)
data->field_0 = AllocZeroed(0xA0);
data->field_8 = AllocZeroed(0xA0);
sub_80175EC(data->field_4, 4);
- sub_8017580(data->field_0, 5);
+ sub_8017580(data->field_0->arr, 5);
sub_800DF90(&data->field_0->arr[0].unk.field_0, data->field_0->arr[0].unk.playerName);
data->field_0->arr[0].field_18 = 0;
data->field_0->arr[0].field_1A_0 = 1;
@@ -2143,7 +2140,7 @@ void sub_8014F48(u8 taskId)
break;
case 2:
sub_80175EC(data->field_4, 4);
- sub_8017580(data->field_0, 16);
+ sub_8017580(data->field_0->arr, 16);
data->field_11 = sub_8016FC0(data->field_4, data->field_12 + 7);
winTemplate1 = gUnknown_082F0174;
@@ -2312,7 +2309,7 @@ void sub_80152F4(u8 taskId)
break;
case 2:
sub_80175EC(data->field_4, 4);
- sub_8017580(data->field_0, 16);
+ sub_8017580(data->field_0->arr, 16);
data->field_11 = sub_8016FF0(data->field_4, data->field_12 + 7);
if (data->field_13 != 0)
@@ -2525,7 +2522,7 @@ void sub_80156E0(u8 taskId)
data->field_C = AllocZeroed(0x70);
data->field_0 = AllocZeroed(0x100);
data->field_8 = AllocZeroed(0x20);
- sub_8017580(data->field_0, 8);
+ sub_8017580(data->field_0->arr, 8);
gUnknown_02022C2C = 0x40;
data->field_20 = sub_8016DF0(data->field_C, data->field_4, 9);
sub_8019BA8(data->field_A0);
@@ -2543,7 +2540,7 @@ void sub_80156E0(u8 taskId)
sub_800B488();
OpenLink();
sub_8011C84();
- sub_8017580(data->field_8, 1);
+ sub_8017580(&data->field_8->arr[0], 1);
sub_80175EC(data->field_4, 4);
sub_80175EC(data->field_C, 4);
gSpecialVar_Result = 0;
@@ -2836,7 +2833,7 @@ void sub_80156E0(u8 taskId)
data->state = 41;
sub_800ADF8();
data->field_98 = 0;
- data->field_9A = 0;
+ data->field_9A[0] = 0;
}
break;
case 41:
@@ -2920,7 +2917,7 @@ void sub_80156E0(u8 taskId)
PlaySE(SE_PINPON);
sub_800EF7C();
data->state = 12;
- data->field_9A = 0;
+ data->field_9A[0] = 0;
break;
case 12:
if (sub_8011A80())
@@ -3020,7 +3017,7 @@ void sub_80156E0(u8 taskId)
gUnknown_02022C2C = 0x40;
sub_8015664(0x25, gStringVar4);
memset(data->field_4C, 0, sizeof(data->field_4C));
- data->field_9A = 0;
+ data->field_9A[0] = 0;
data->field_98 = 0;
}
break;
@@ -3262,3 +3259,248 @@ void var_800D_set_xB(void)
if (InUnionRoom() == TRUE)
gSpecialVar_Result = 11;
}
+
+void sub_801689C(struct UnkStruct_URoom *arg0)
+{
+ if (gRecvCmds[1][1] != 0 && (gRecvCmds[1][0] & 0xFF00) == 0x2F00)
+ {
+ arg0->field_9A[0] = gRecvCmds[1][1];
+ if (gRecvCmds[1][1] == 0x44)
+ {
+ arg0->field_9A[1] = gRecvCmds[1][2];
+ arg0->field_9A[2] = gRecvCmds[1][3];
+ }
+ }
+}
+
+bool32 sub_80168DC(struct UnkStruct_URoom *arg0)
+{
+ if (arg0->field_9A[0] != 0)
+ {
+ s32 var = sub_8017EA0(gStringVar4, gLinkPlayers[1].gender, &arg0->field_9A[0], arg0);
+ if (var == 0)
+ {
+ return TRUE;
+ }
+ else if (var == 1)
+ {
+ arg0->state = 35;
+ gUnknown_02022C2C = arg0->field_9A[0];
+ return FALSE;
+ }
+ else if (var == 2)
+ {
+ arg0->state = 36;
+ sub_800AC34();
+ return FALSE;
+ }
+ }
+
+ return TRUE;
+}
+
+void sub_8016934(void)
+{
+ struct UnkStruct_URoom *ptr;
+
+ gUnknown_02022C20[0] = EOS;
+ CreateTask(sub_801697C, 0);
+ gUnknown_02022C30.uRoom = gUnknown_02022C30.uRoom; // Needed to match.
+ gUnknown_02022C30.uRoom = ptr = AllocZeroed(0x26C);
+ gUnknown_03000DA8 = gUnknown_02022C30.uRoom;
+ ptr->state = 0;
+ ptr->textState = 0;
+ ptr->field_10 = 0;
+ ptr->field_12 = 0;
+ gUnknown_02022C20[0] = EOS;
+}
+
+void sub_801697C(u8 taskId)
+{
+ s32 i;
+ u8 text[32];
+ struct UnkStruct_URoom *structPtr = gUnknown_02022C30.uRoom;
+
+ switch (structPtr->state)
+ {
+ case 0:
+ structPtr->state = 1;
+ break;
+ case 1:
+ sub_8010F84(0xC, 0, 0);
+ sub_800B488();
+ OpenLink();
+ sub_8011C84();
+ sub_80111B0(1);
+ structPtr->state = 2;
+ break;
+ case 2:
+ structPtr->field_4 = AllocZeroed(0x70);
+ sub_80175EC(structPtr->field_4, 4);
+ structPtr->field_C = AllocZeroed(0x70);
+ sub_80175EC(structPtr->field_C, 4);
+ structPtr->field_0 = AllocZeroed(0x100);
+ sub_8017580(structPtr->field_0->arr, 8);
+ structPtr->field_8 = AllocZeroed(0x20);
+ sub_8017580(&structPtr->field_8->arr[0], 1);
+ structPtr->field_20 = sub_8016DF0(structPtr->field_C, structPtr->field_4, 10);
+ structPtr->state = 3;
+ break;
+ case 3:
+ switch (sub_8016B00())
+ {
+ case 1:
+ case 2:
+ if (gUnknown_02022C20[0] == EOS)
+ {
+ for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++)
+ {
+ if (structPtr->field_0->arr[i].field_1A_0 == 1)
+ {
+ sub_8018404(text, &structPtr->field_0->arr[i]);
+ if (sub_800E540(ReadAsU16(structPtr->field_0->arr[i].unk.field_0.unk_00.playerTrainerId), text))
+ {
+ StringCopy(gUnknown_02022C20, text);
+ break;
+ }
+ }
+ }
+ }
+ break;
+ case 3:
+ break;
+ }
+ break;
+ case 4:
+ free(structPtr->field_8);
+ free(structPtr->field_0);
+ free(structPtr->field_C);
+ free(structPtr->field_4);
+ DestroyTask(structPtr->field_20);
+ free(gUnknown_02022C30.uRoom);
+ sub_800EDD4();
+ DestroyTask(taskId);
+ break;
+ }
+}
+
+bool16 sp182_move_string(void)
+{
+ if (gUnknown_02022C20[0] != EOS)
+ {
+ StringCopy(gStringVar1, gUnknown_02022C20);
+ gUnknown_02022C20[0] = EOS;
+ return TRUE;
+ }
+ else
+ {
+ return FALSE;
+ }
+}
+
+u8 sub_8016B00(void)
+{
+ s32 i;
+ u8 j;
+ struct UnkStruct_URoom *structPtr = gUnknown_02022C30.uRoom;
+ s32 r7 = 0;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (sub_8017630(&structPtr->field_C->arr[i].unk0, &gUnknown_082F045C) == TRUE)
+ {
+ structPtr->field_8->arr[0].unk = structPtr->field_C->arr[i].unk0;
+ structPtr->field_8->arr[0].field_18 = 0;
+ structPtr->field_8->arr[0].field_1A_0 = 1;
+ structPtr->field_8->arr[0].field_1B = 1;
+ return 4;
+ }
+ }
+ for (j = 0; j < 8; j++)
+ {
+ if (structPtr->field_0->arr[j].field_1A_0 != 0)
+ {
+ i = sub_80176E4(&structPtr->field_0->arr[j], &structPtr->field_4->arr[0]);
+ if (i != 0xFF)
+ {
+ if (structPtr->field_0->arr[j].field_1A_0 == 1)
+ {
+ if (sub_8017678(&structPtr->field_0->arr[j], &structPtr->field_4->arr[i]))
+ {
+ structPtr->field_0->arr[j].unk = structPtr->field_4->arr[i].unk0;
+ structPtr->field_0->arr[j].field_1B = 0x40;
+ r7 = 1;
+ }
+ else if (structPtr->field_0->arr[j].field_1B != 0)
+ {
+ structPtr->field_0->arr[j].field_1B--;
+ if (structPtr->field_0->arr[j].field_1B == 0)
+ r7 = 2;
+ }
+ }
+ else
+ {
+ structPtr->field_0->arr[j].field_1A_0 = 1;
+ structPtr->field_0->arr[j].field_1B = 0;
+ r7 = 2;
+ }
+ structPtr->field_0->arr[j].field_18 = 0;
+ }
+ else if (structPtr->field_0->arr[j].field_1A_0 != 2)
+ {
+ structPtr->field_0->arr[j].field_18++;
+ if (structPtr->field_0->arr[j].field_18 >= 600)
+ {
+ structPtr->field_0->arr[j].field_1A_0 = 2;
+ r7 = 2;
+ }
+ }
+ else if (structPtr->field_0->arr[j].field_1A_0 == 2)
+ {
+ structPtr->field_0->arr[j].field_18++;
+ if (structPtr->field_0->arr[j].field_18 >= 900)
+ {
+ sub_8017580(&structPtr->field_0->arr[j], 1);
+ }
+ }
+ }
+ }
+ for (i = 0; i < 4; i++)
+ {
+ if (sub_8017734(&structPtr->field_0->arr[0], &structPtr->field_4->arr[i].unk0, 8) != 0xFF)
+ r7 = 1;
+ }
+
+ return r7;
+}
+
+/*
+void sub_8016CA0(u8 taskId)
+{
+ s32 i, j;
+ struct UnkLinkRfuStruct_02022B14 sp0;
+ u8 text[10];
+ struct UnkStruct_Main4 *ptr = (void*) gTasks[taskId].data;
+
+ for (i = 0; i < 4; i++)
+ {
+ j = sub_800DE7C(&sp0, text, i);
+ if (!sub_8013D88(sp0.unk_0a_0, gTasks[taskId].data[4]))
+ sp0 = gUnknown_082F045C.field_0;
+ if (sp0.unk_00.unk_00_0 == 1)
+ sp0 = gUnknown_082F045C.field_0;
+
+ if (!j)
+ {
+ for (j = 0; j < i; j++)
+ {
+ if (sub_8017630())
+ }
+ }
+ else
+ {
+
+ }
+ }
+}
+*/