commit
ee05197eba
8 changed files with 1144 additions and 4536 deletions
2021
asm/link_rfu.s
2021
asm/link_rfu.s
File diff suppressed because it is too large
Load diff
2342
asm/rom_8011DC0.s
2342
asm/rom_8011DC0.s
File diff suppressed because it is too large
Load diff
|
@ -1,3 +1,6 @@
|
|||
#ifndef GUARD_LIBRFU_H
|
||||
#define GUARD_LIBRFU_H
|
||||
|
||||
#include "main.h"
|
||||
|
||||
enum
|
||||
|
@ -81,7 +84,7 @@ struct UnkLinkRfuStruct_02022B14Substruct
|
|||
u8 playerTrainerId[2];
|
||||
};
|
||||
|
||||
struct __attribute__((packed)) UnkLinkRfuStruct_02022B14
|
||||
struct __attribute__((packed, aligned(2))) UnkLinkRfuStruct_02022B14
|
||||
{
|
||||
struct UnkLinkRfuStruct_02022B14Substruct unk_00;
|
||||
u8 unk_04[4];
|
||||
|
@ -169,13 +172,14 @@ struct RfuUnk3
|
|||
u32 unk_dc;
|
||||
};
|
||||
|
||||
struct RfuUnk5Sub {
|
||||
struct RfuUnk5Sub
|
||||
{
|
||||
u16 unk_00;
|
||||
u8 unk_02;
|
||||
u16 unk_04;
|
||||
struct UnkLinkRfuStruct_02022B14 unk_06;
|
||||
u8 fill_13[2];
|
||||
u8 unk_15[8];
|
||||
u8 fill_13[1];
|
||||
u8 playerName[PLAYER_NAME_LENGTH + 1];
|
||||
};
|
||||
|
||||
struct RfuUnk5
|
||||
|
@ -252,3 +256,5 @@ void rfu_UNI_readySendData(u8 a0);
|
|||
void rfu_UNI_clearRecvNewDataFlag(u8 a0);
|
||||
void rfu_REQ_PARENT_resumeRetransmitAndChange(void);
|
||||
void rfu_NI_setSendData(u8, u8, u8 *, u8);
|
||||
|
||||
#endif // GUARD_LIBRFU_H
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
#ifndef GUARD_LINK_RFU_H
|
||||
#define GUARD_LINK_RFU_H
|
||||
|
||||
#include "librfu.h"
|
||||
|
||||
// Exported type declarations
|
||||
|
||||
struct UnkLinkRfuStruct_02022B2C
|
||||
|
@ -32,7 +34,8 @@ struct UnkLinkRfuStruct_02022B44
|
|||
u8 fill_84[0x58];
|
||||
};
|
||||
|
||||
struct UnkRfuStruct_1 {
|
||||
struct UnkRfuStruct_1
|
||||
{
|
||||
/* 0x000 */ u8 unk_00;
|
||||
/* 0x001 */ u8 unk_01;
|
||||
/* 0x002 */ vu8 unk_02;
|
||||
|
@ -75,7 +78,8 @@ struct UnkRfuStruct_1 {
|
|||
/* 0xeb4 */ u8 filler_e64[12];
|
||||
};
|
||||
|
||||
struct UnkRfuStruct_2_Sub_6c {
|
||||
struct UnkRfuStruct_2_Sub_6c
|
||||
{
|
||||
/* 0x00 */ u16 unk_00;
|
||||
/* 0x02 */ u16 unk_02;
|
||||
/* 0x04 */ const u8 *unk_04;
|
||||
|
@ -86,7 +90,8 @@ struct UnkRfuStruct_2_Sub_6c {
|
|||
/* 0x12 */ u8 unk_12;
|
||||
};
|
||||
|
||||
struct UnkRfuStruct_2_Sub_124 {
|
||||
struct UnkRfuStruct_2_Sub_124
|
||||
{
|
||||
/* 0x000 */ u8 unk_00[32][70];
|
||||
/* 0x8c0 */ vu8 unk_8c0;
|
||||
/* 0x8c1 */ vu8 unk_8c1;
|
||||
|
@ -94,7 +99,8 @@ struct UnkRfuStruct_2_Sub_124 {
|
|||
/* 0x8c3 */ vu8 unk_8c3;
|
||||
};
|
||||
|
||||
struct UnkRfuStruct_2_Sub_9e8 {
|
||||
struct UnkRfuStruct_2_Sub_9e8
|
||||
{
|
||||
/* 0x000 */ u8 unk_00[40][14];
|
||||
/* 0x230 */ vu8 unk_230;
|
||||
/* 0x231 */ vu8 unk_231;
|
||||
|
@ -102,14 +108,16 @@ struct UnkRfuStruct_2_Sub_9e8 {
|
|||
/* 0x233 */ vu8 unk_233;
|
||||
};
|
||||
|
||||
struct UnkRfuStruct_2_Sub_c1c {
|
||||
struct UnkRfuStruct_2_Sub_c1c
|
||||
{
|
||||
/* 0x00 */ u8 unk_00[2][14];
|
||||
/* 0x1c */ vu8 unk_1c;
|
||||
/* 0x1d */ vu8 unk_1d;
|
||||
/* 0x1e */ vu8 unk_1e;
|
||||
};
|
||||
|
||||
struct UnkRfuStruct_Sub_Unused {
|
||||
struct UnkRfuStruct_Sub_Unused
|
||||
{
|
||||
/* 0x000 */ u8 unk_00[2][256];
|
||||
/* 0x200 */ vu8 unk_200;
|
||||
/* 0x201 */ vu8 unk_201;
|
||||
|
@ -117,7 +125,8 @@ struct UnkRfuStruct_Sub_Unused {
|
|||
/* 0x203 */ vu8 unk_203;
|
||||
};
|
||||
|
||||
struct UnkRfuStruct_2 {
|
||||
struct UnkRfuStruct_2
|
||||
{
|
||||
/* 0x000 */ void (*unk_00)(void);
|
||||
/* 0x004 */ u16 unk_04;
|
||||
/* 0x006 */ u8 filler_06[4];
|
||||
|
@ -149,7 +158,10 @@ struct UnkRfuStruct_2 {
|
|||
/* 0x0fe */ u16 unk_fe;
|
||||
/* 0x100 */ u16 unk_100;
|
||||
/* 0x102 */ u8 unk_102;
|
||||
/* 0x103 */ u8 filler_103[0x21];
|
||||
/* 0x103 */ u8 filler_103[0x10A - 0x103];
|
||||
/* 0x10A */ struct UnkLinkRfuStruct_02022B14 unk_10A;
|
||||
u8 filler_;
|
||||
u8 playerName[PLAYER_NAME_LENGTH + 1];
|
||||
/* 0x124 */ struct UnkRfuStruct_2_Sub_124 unk_124;
|
||||
/* 0x9e8 */ struct UnkRfuStruct_2_Sub_9e8 unk_9e8;
|
||||
/* 0xc1c */ struct UnkRfuStruct_2_Sub_c1c unk_c1c;
|
||||
|
@ -184,7 +196,8 @@ struct UnkRfuStruct_2 {
|
|||
/* 0xcee */ u8 unk_cee[4];
|
||||
}; // size = 0xcf4
|
||||
|
||||
struct UnkRfuStruct_8010A14 {
|
||||
struct UnkRfuStruct_8010A14
|
||||
{
|
||||
char unk_00[15];
|
||||
u8 unk_0f;
|
||||
u8 unk_10[4];
|
||||
|
@ -252,17 +265,18 @@ void sub_800E3A8(void);
|
|||
void sub_800ED10(void);
|
||||
void sub_800ED28(void);
|
||||
void sub_8011090(u8 a0, u32 a1, u32 a2);
|
||||
void sub_8011FC8(u8 *a0, u16 a1);
|
||||
void sub_8011FC8(const u8 *src, u16 trainerId);
|
||||
void sub_8010FA0(bool32 a0, bool32 a1);
|
||||
void sub_8010F60(void);
|
||||
void sub_8010FCC(u32 a0, u32 a1, u32 a2);
|
||||
void sub_8011C84(void);
|
||||
void sub_8012188(const u8 *a0, struct UnkLinkRfuStruct_02022B14 *arg1, u8 arg2);
|
||||
void sub_8012188(const u8 *name, struct UnkLinkRfuStruct_02022B14 *structPtr, u8 a2);
|
||||
bool32 sub_8011B90(void);
|
||||
void sub_800FE50(u16 *a0);
|
||||
bool32 sub_800E540(u16 id, u8 *name);
|
||||
void sub_8011DE0(u32 arg0);
|
||||
u8 sub_801100C(int a0);
|
||||
void sub_800EF7C(void);
|
||||
bool8 sub_800DE7C(struct UnkLinkRfuStruct_02022B14 *buff1, u8 *buff2, u8 idx);
|
||||
|
||||
#endif //GUARD_LINK_RFU_H
|
||||
|
|
|
@ -54,7 +54,6 @@ SECTIONS {
|
|||
src/string_util.o(.text);
|
||||
src/link.o(.text);
|
||||
src/link_rfu.o(.text);
|
||||
asm/link_rfu.o(.text);
|
||||
src/rom_8011DC0.o(.text);
|
||||
asm/rom_8011DC0.o(.text);
|
||||
src/rtc.o(.text);
|
||||
|
|
|
@ -246,7 +246,7 @@ void STWI_send_SystemConfigREQ(u16 unk1, u8 unk2, u8 unk3)
|
|||
if (!STWI_init(RFU_SYSTEM_CONFIG))
|
||||
{
|
||||
u8 *packetBytes;
|
||||
|
||||
|
||||
gRfuState->txParams = 1;
|
||||
|
||||
packetBytes = gRfuState->txPacket->rfuPacket8.data;
|
||||
|
@ -348,7 +348,7 @@ void STWI_send_DataTxREQ(void *in, u8 size)
|
|||
u8 txParams = (size / sizeof(u32));
|
||||
if (size & (sizeof(u32) - 1))
|
||||
txParams += 1;
|
||||
|
||||
|
||||
gRfuState->txParams = txParams;
|
||||
CpuCopy32(in, gRfuState->txPacket->rfuPacket32.data, gRfuState->txParams * sizeof(u32));
|
||||
STWI_start_Command();
|
||||
|
@ -469,11 +469,11 @@ void STWI_send_CPR_StartREQ(u16 unk0, u16 unk1, u8 unk2)
|
|||
{
|
||||
u32 *packetData;
|
||||
u32 arg1;
|
||||
|
||||
|
||||
if (!STWI_init(RFU_CPR_START))
|
||||
{
|
||||
gRfuState->txParams = 2;
|
||||
|
||||
|
||||
arg1 = unk1 | (unk0 << 16);
|
||||
packetData = gRfuState->txPacket->rfuPacket32.data;
|
||||
packetData[0] = arg1;
|
||||
|
@ -569,7 +569,7 @@ void STWI_set_timer(u8 unk)
|
|||
void STWI_stop_timer(void)
|
||||
{
|
||||
gRfuState->timerState = 0;
|
||||
|
||||
|
||||
REG_TMCNT_L(gRfuState->timerSelect) = 0;
|
||||
REG_TMCNT_H(gRfuState->timerSelect) = 0;
|
||||
}
|
||||
|
@ -612,7 +612,7 @@ u16 STWI_init(u8 request)
|
|||
gRfuState->timerActive = 0;
|
||||
gRfuState->unk_12 = 0;
|
||||
gRfuState->unk_15 = 0;
|
||||
|
||||
|
||||
REG_RCNT = 0x100;
|
||||
REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS;
|
||||
return FALSE;
|
||||
|
@ -622,22 +622,22 @@ u16 STWI_init(u8 request)
|
|||
int STWI_start_Command()
|
||||
{
|
||||
u16 imeTemp;
|
||||
|
||||
|
||||
// Yes, it matters that it's casted to a u32...
|
||||
*(u32*)gRfuState->txPacket->rfuPacket8.data = 0x99660000 | (gRfuState->txParams << 8) | gRfuState->activeCommand;
|
||||
REG_SIODATA32 = gRfuState->txPacket->rfuPacket32.command;
|
||||
|
||||
|
||||
gRfuState->unk_0 = 0;
|
||||
gRfuState->unk_5 = 1;
|
||||
|
||||
|
||||
imeTemp = REG_IME;
|
||||
REG_IME = 0;
|
||||
REG_IE |= (INTR_FLAG_TIMER0 << gRfuState->timerSelect);
|
||||
REG_IE |= INTR_FLAG_SERIAL;
|
||||
REG_IME = imeTemp;
|
||||
|
||||
|
||||
REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_MULTI_BUSY | SIO_115200_BPS;
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -654,7 +654,7 @@ int STWI_restart_Command(void)
|
|||
{
|
||||
gRfuState->unk_12 = 1;
|
||||
gRfuState->unk_2c = 0;
|
||||
|
||||
|
||||
if (gRfuState->callbackM)
|
||||
gRfuState->callbackM(gRfuState->activeCommand, gRfuState->unk_12);
|
||||
}
|
||||
|
@ -662,18 +662,18 @@ int STWI_restart_Command(void)
|
|||
{
|
||||
gRfuState->unk_12 = 1;
|
||||
gRfuState->unk_2c = 0;
|
||||
|
||||
|
||||
if (gRfuState->callbackM)
|
||||
gRfuState->callbackM(gRfuState->activeCommand, gRfuState->unk_12);
|
||||
|
||||
|
||||
gRfuState->unk_0 = 4; //TODO: what's 4
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int STWI_reset_ClockCounter()
|
||||
int STWI_reset_ClockCounter(void)
|
||||
{
|
||||
gRfuState->unk_0 = 5; //TODO: what is 5
|
||||
gRfuState->txParams = 0;
|
||||
|
@ -682,6 +682,6 @@ int STWI_reset_ClockCounter()
|
|||
REG_SIOCNT = 0;
|
||||
REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS;
|
||||
REG_SIOCNT = (SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS) + 0x7F;
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
905
src/link_rfu.c
905
src/link_rfu.c
File diff suppressed because it is too large
Load diff
|
@ -39,7 +39,7 @@ extern void HealPlayerParty(void);
|
|||
struct UnkStruct_Shared
|
||||
{
|
||||
struct UnkLinkRfuStruct_02022B14 field_0;
|
||||
u8 needingPadding[3];
|
||||
u8 needingPadding[2];
|
||||
u8 playerName[PLAYER_NAME_LENGTH + 1];
|
||||
};
|
||||
|
||||
|
@ -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);
|
||||
|
@ -265,7 +264,7 @@ void sub_801689C(struct UnkStruct_URoom *arg0);
|
|||
u8 sub_80181DC(struct UnkStruct_URoom *arg0);
|
||||
bool32 sub_80168DC(struct UnkStruct_URoom *arg0);
|
||||
bool32 sub_801704C(void);
|
||||
u32 sub_8017CF8(u32 arg1, struct UnkStruct_Main0 *arg0);
|
||||
s32 sub_8017CF8(s32 arg1, struct UnkStruct_Main0 *arg0);
|
||||
s32 sub_80179D4(struct UnkStruct_Main0 *arg0, u8 arg1, u8 arg2, u32 playerGender);
|
||||
void sub_801818C(bool32 arg0);
|
||||
void sub_801A3D0(u32 arg0, u32 arg1, struct UnkStruct_Main0 *arg2);
|
||||
|
@ -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)
|
||||
|
@ -2510,13 +2507,11 @@ void sub_80156C8(struct UnkStruct_URoom *data)
|
|||
memcpy(data->field_0, &gDecompressionBuffer[0x3F00], 0x100);
|
||||
}
|
||||
|
||||
// Cannot match, please fix later.
|
||||
/*
|
||||
void sub_80156E0(u8 taskId)
|
||||
{
|
||||
u32 id = 0;
|
||||
s32 var5 = 0;
|
||||
u32 playerGender = 0;
|
||||
s32 playerGender = 0;
|
||||
struct UnkStruct_URoom *data = gUnknown_02022C30.uRoom;
|
||||
s16 *taskData = gTasks[taskId].data;
|
||||
|
||||
|
@ -2527,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);
|
||||
|
@ -2545,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;
|
||||
|
@ -2679,7 +2674,7 @@ void sub_80156E0(u8 taskId)
|
|||
break;
|
||||
case 1:
|
||||
sub_8012188(data->field_0->arr[taskData[1]].unk.playerName, &data->field_0->arr[taskData[1]].unk.field_0, gUnknown_02022C2C);
|
||||
data->field_12 = id;
|
||||
data->field_12 = id; // Should be just 0, but won't match any other way.
|
||||
data->state = 25;
|
||||
break;
|
||||
case 2:
|
||||
|
@ -2730,6 +2725,11 @@ void sub_80156E0(u8 taskId)
|
|||
data->state = 2;
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
id = sub_80179AC(&data->field_0->arr[taskData[1]]);
|
||||
playerGender = sub_8017CF8(taskData[1], data->field_0);
|
||||
sub_8015664(6, gUnknown_082EE24C[id][playerGender]);
|
||||
break;
|
||||
case 6:
|
||||
var5 = sub_8017178(&data->textState, &data->field_1B, &data->field_1C, &gUnknown_082F021C, &gUnknown_082F0244);
|
||||
if (var5 != -1)
|
||||
|
@ -2742,16 +2742,15 @@ void sub_80156E0(u8 taskId)
|
|||
{
|
||||
data->field_98 = 0;
|
||||
playerGender = sub_8017CF8(taskData[1], data->field_0);
|
||||
switch (var5)
|
||||
if (var5 == -2 || var5 == 0x40)
|
||||
{
|
||||
case -2:
|
||||
case 0x40:
|
||||
data->field_4C[0] = 0x40;
|
||||
sub_800FE50(data->field_4C);
|
||||
StringCopy(gStringVar4, gUnknown_082EEB80[gLinkPlayers[0].gender]);
|
||||
data->state = 32;
|
||||
break;
|
||||
default:
|
||||
}
|
||||
else
|
||||
{
|
||||
gUnknown_02022C2C = var5;
|
||||
gUnknown_02022C2D = (u32)(var5) >> 8;
|
||||
if (gUnknown_02022C2C == 0x41 && !sub_8018024())
|
||||
|
@ -2764,7 +2763,6 @@ void sub_80156E0(u8 taskId)
|
|||
sub_800FE50(data->field_4C);
|
||||
data->state = 27;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2823,7 +2821,7 @@ void sub_80156E0(u8 taskId)
|
|||
}
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
|
||||
case 7:
|
||||
id = sub_80179AC(&data->field_0->arr[taskData[1]]);
|
||||
playerGender = sub_8017CF8(taskData[1], data->field_0);
|
||||
|
@ -2835,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:
|
||||
|
@ -2919,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())
|
||||
|
@ -3019,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,4 +3260,247 @@ void var_800D_set_xB(void)
|
|||
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
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
|
Loading…
Reference in a new issue