summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2018-11-30 15:26:16 -0500
committerPikalaxALT <pikalaxalt@gmail.com>2018-11-30 15:26:16 -0500
commit8a8e86fa4fe0a7932f475c7aa8424ea840327e4b (patch)
tree221f1c172ae9a86591699b9cf016681d17c74ae4 /src
parentf178d06946a4debf6a0551094d3ef2f70b7b364c (diff)
split mevent_server
Diffstat (limited to 'src')
-rw-r--r--src/mevent.c9
-rw-r--r--src/mevent_server.c527
-rw-r--r--src/mevent_server_ish.c308
-rw-r--r--src/mevent_server_sub.c211
4 files changed, 574 insertions, 481 deletions
diff --git a/src/mevent.c b/src/mevent.c
index b04ac5462..9638e0327 100644
--- a/src/mevent.c
+++ b/src/mevent.c
@@ -17,6 +17,9 @@
#include "new_game.h"
#include "string_util.h"
#include "menews_jisan.h"
+#include "cereader_tool.h"
+#include "mystery_gift_menu.h"
+#include "help_system.h"
#include "mevent.h"
struct MEventTaskData1
@@ -40,14 +43,10 @@ bool32 sub_8143E64(const struct MEventBuffer_3120_Sub * src);
void sub_8143E9C(void);
void sub_8143ED0(void);
bool32 sub_8144018(const struct MEventBuffer_32E0_Sub * src);
-bool32 sub_815D794(u8 *);
-void sub_81422FC(void);
-void sub_812B484(void);
void sub_814407C(void);
void sub_81440B4(void);
void sub_8144824(u32, u32, u32 *, s32);
void sub_8144790(void);
-u8 sub_815D6B4(u8 *);
extern const u8 gUnknown_841DE52[];
extern const u8 gUnknown_841DE53[];
@@ -90,7 +89,7 @@ const u16 gUnknown_8466F00[] = {
struct MEvent_Str_1 gUnknown_3005ED0;
-bool32 gUnknown_203F3BC = FALSE;
+static EWRAM_DATA bool32 gUnknown_203F3BC = FALSE;
void sub_81435DC(struct MEvent_Str_1 *a0, size_t a1, const void * a2)
{
diff --git a/src/mevent_server.c b/src/mevent_server.c
index 251764441..027a7e994 100644
--- a/src/mevent_server.c
+++ b/src/mevent_server.c
@@ -9,517 +9,92 @@
#include "battle_tower.h"
#include "mystery_event_script.h"
#include "mevent.h"
+#include "mevent_server.h"
extern u16 gBlockRecvBuffer[][128];
-struct mevent_srv_sub
-{
- s32 unk_00;
- u8 unk_04;
- u8 unk_05;
- u16 unk_06;
- u16 unk_08;
- u16 unk_0A;
- u16 unk_0C;
- u16 unk_0E;
- u16 unk_10;
- u16 unk_12;
- u16 unk_14;
- void * unk_18;
- void * unk_1C;
- u32 (*unk_20)(struct mevent_srv_sub *);
- u32 (*unk_24)(struct mevent_srv_sub *);
-};
-
-struct mevent_srv_ish
+struct mevent_srv_common
{
u32 unk_00;
u32 unk_04;
- u32 unk_08;
+ u32 mainseqno;
u32 unk_0C;
- u32 unk_10;
+ const void * unk_10;
void * unk_14;
void * unk_18;
void * unk_1C;
void * unk_20;
- struct mevent_srv_sub unk_24;
-};
-
-struct send_recv_buff
-{
- u16 unk0;
- u16 unk2;
- u16 unk4;
+ u8 filler_24[0x14];
+ struct mevent_srv_sub unk_38;
};
-EWRAM_DATA struct mevent_srv_ish * gUnknown_203F3C0 = NULL;
-
-u32 sub_814490C(struct mevent_srv_sub *);
-u32 sub_81449E0(struct mevent_srv_sub *);
-void mevent_srv_ish_init(struct mevent_srv_ish *, u32, u32);
-u32 mevent_srv_ish_exec(struct mevent_srv_ish *);
-void sub_8144BC0(struct mevent_srv_ish *);
-
-extern u8 gUnknown_84687E0[0x400];
-
-u32 sub_8144844(struct mevent_srv_sub * srv)
-{
- return srv->unk_20(srv);
-}
-
-u32 sub_8144850(struct mevent_srv_sub * srv)
-{
- return srv->unk_24(srv);
-}
-
-void sub_814485C(struct mevent_srv_sub * srv, u32 a1, u32 a2)
-{
- srv->unk_04 = a1;
- srv->unk_05 = a2;
- srv->unk_00 = 0;
- srv->unk_12 = 0;
- srv->unk_14 = 0;
- srv->unk_10 = 0;
- srv->unk_0A = 0;
- srv->unk_0C = 0;
- srv->unk_08 = 0;
- srv->unk_1C = NULL;
- srv->unk_18 = NULL;
- srv->unk_24 = sub_81449E0;
- srv->unk_20 = sub_814490C;
-}
-
-void sub_8144888(struct mevent_srv_sub * srv, u32 a1, void * a2, u32 a3)
-{
- srv->unk_00 = 0;
- srv->unk_0E = a1;
- srv->unk_10 = 0;
- srv->unk_12 = 0;
- if (a3 != 0)
- srv->unk_14 = a3;
- else
- srv->unk_14 = 0x400;
- srv->unk_1C = a2;
-}
-
-void sub_81448AC(struct mevent_srv_sub * srv, u32 a1, void * a2)
-{
- srv->unk_00 = 0;
- srv->unk_06 = a1;
- srv->unk_08 = 0;
- srv->unk_0A = 0;
- srv->unk_0C = 0;
- srv->unk_18 = a2;
-}
-
-void sub_81448BC(u32 recv_idx, void * dest, size_t size)
-{
- memcpy(dest, gBlockRecvBuffer[recv_idx], size);
-}
-
-bool32 sub_81448D8(u32 recv_idx)
-{
- if ((GetBlockReceivedStatus() >> recv_idx) & 1)
- return TRUE;
- else
- return FALSE;
-}
-
-void sub_81448FC(u32 recv_idx)
-{
- ResetBlockReceivedFlag(recv_idx);
-}
-
-bool32 sub_814490C(struct mevent_srv_sub * srv)
-{
- struct send_recv_buff buff;
-
- switch (srv->unk_00)
- {
- case 0:
- if (sub_81448D8(srv->unk_05))
- {
- sub_81448BC(srv->unk_05, &buff, sizeof(buff));
- srv->unk_0C = buff.unk4;
- srv->unk_0A = buff.unk2;
- if (srv->unk_0C > 0x400)
- {
- sub_80FA190();
- return FALSE;
- }
- else if (srv->unk_06 != buff.unk0)
- {
- sub_80FA190();
- return FALSE;
- }
- else
- {
- srv->unk_08 = 0;
- sub_81448FC(srv->unk_05);
- ++srv->unk_00;
- }
- }
- break;
- case 1:
- if (sub_81448D8(srv->unk_05))
- {
- size_t r3 = srv->unk_08 * 252;
- if (srv->unk_0C - r3 <= 252)
- {
- sub_81448BC(srv->unk_05, srv->unk_18 + r3, srv->unk_0C - r3);
- ++srv->unk_08;
- ++srv->unk_00;
- }
- else
- {
- sub_81448BC(srv->unk_05, srv->unk_18 + r3, 252);
- ++srv->unk_08;
- }
- sub_81448FC(srv->unk_05);
- }
- break;
- case 2:
- if (CalcCRC16WithTable(srv->unk_18, srv->unk_0C) != srv->unk_0A)
- {
- sub_80FA190();
- return FALSE;
- }
- else
- {
- srv->unk_00 = 0;
- return TRUE;
- }
- break;
+EWRAM_DATA struct mevent_srv_common * gUnknown_203F3C4 = NULL;
- }
+void mevent_srv_init_common(struct mevent_srv_common *, const void *, u32, u32);
+void mevent_srv_free_resources(struct mevent_srv_common *);
+u32 sub_8145600(struct mevent_srv_common *);
- return FALSE;
-}
+extern const u8 gUnknown_8468B6C[];
+extern const u8 gUnknown_8468BCC[];
-bool32 sub_81449E0(struct mevent_srv_sub * srv)
+void sub_8144F1C(void)
{
- struct send_recv_buff buff;
-
- switch (srv->unk_00)
- {
- case 0:
- if (sub_800A4BC())
- {
- buff.unk0 = srv->unk_0E;
- buff.unk4 = srv->unk_14;
- buff.unk2 = CalcCRC16WithTable(srv->unk_1C, srv->unk_14);
- srv->unk_12 = buff.unk2;
- srv->unk_10 = 0;
- SendBlock(0, &buff, sizeof(buff));
- ++srv->unk_00;
- }
- break;
- case 1:
- if (sub_800A4BC())
- {
- if (sub_81448D8(srv->unk_04))
- {
- size_t r3;
- sub_81448FC(srv->unk_04);
- r3 = 252 * srv->unk_10;
- if (srv->unk_14 - r3 <= 252)
- {
- SendBlock(0, srv->unk_1C + r3, srv->unk_14 - r3);
- ++srv->unk_10;
- ++srv->unk_00;
- }
- else
- {
- SendBlock(0, srv->unk_1C + r3, 252);
- ++srv->unk_10;
- }
- }
- }
- break;
- case 2:
- if (sub_800A4BC())
- {
- if (CalcCRC16WithTable(srv->unk_1C, srv->unk_14) != srv->unk_12)
- sub_80FA190();
- else
- ++srv->unk_00;
- }
- break;
- case 3:
- if (sub_81448D8(srv->unk_04))
- {
- sub_81448FC(srv->unk_04);
- srv->unk_00 = 0;
- return TRUE;
- }
- break;
- }
-
- return FALSE;
+ gUnknown_203F3C4 = AllocZeroed(sizeof(struct mevent_srv_common));
+ mevent_srv_init_common(gUnknown_203F3C4, gUnknown_8468B6C, 0, 1);
}
-void sub_8144AEC(void)
+void sub_8144F40(void)
{
- gUnknown_203F3C0 = AllocZeroed(sizeof(struct mevent_srv_ish));
- mevent_srv_ish_init(gUnknown_203F3C0, 1, 0);
+ gUnknown_203F3C4 = AllocZeroed(sizeof(struct mevent_srv_common));
+ mevent_srv_init_common(gUnknown_203F3C4, gUnknown_8468BCC, 0, 1);
}
-u32 sub_8144B0C(u16 * a0)
+u32 sub_8144F64(u16 * a0)
{
u32 result;
- if (gUnknown_203F3C0 == NULL)
- return 6;
- result = mevent_srv_ish_exec(gUnknown_203F3C0);
- if (result == 6)
+ if (gUnknown_203F3C4 == NULL)
+ return 3;
+ result = sub_8145600(gUnknown_203F3C4);
+ if (result == 3)
{
- *a0 = gUnknown_203F3C0->unk_04;
- sub_8144BC0(gUnknown_203F3C0);
- Free(gUnknown_203F3C0);
- gUnknown_203F3C0 = NULL;
+ *a0 = gUnknown_203F3C4->unk_04;
+ mevent_srv_free_resources(gUnknown_203F3C4);
+ Free(gUnknown_203F3C4);
+ gUnknown_203F3C4 = NULL;
}
return result;
}
-void sub_8144B48(void)
-{
- gUnknown_203F3C0->unk_0C++;
-}
-
-void * sub_8144B58(void)
-{
- return gUnknown_203F3C0->unk_20;
-}
-
-void sub_8144B64(u32 a0)
-{
- gUnknown_203F3C0->unk_04 = a0;
-}
-
-void mevent_srv_ish_init(struct mevent_srv_ish * srv, u32 a1, u32 a2)
-{
- srv->unk_00 = 0;
- srv->unk_08 = 0;
- srv->unk_0C = 0;
- srv->unk_14 = AllocZeroed(0x400);
- srv->unk_18 = AllocZeroed(0x400);
- srv->unk_1C = AllocZeroed(0x400);
- srv->unk_20 = AllocZeroed(0x40);
- sub_814485C(&srv->unk_24, a1, a2);
-}
-
-void sub_8144BC0(struct mevent_srv_ish * srv)
-{
- Free(srv->unk_14);
- Free(srv->unk_18);
- Free(srv->unk_1C);
- Free(srv->unk_20);
-}
-
-void sub_8144BE4(struct mevent_srv_ish * srv)
-{
- memcpy(srv->unk_1C, srv->unk_18, 0x400);
- srv->unk_10 = 0;
-}
-
-void sub_8144C00(struct mevent_srv_ish * srv, u32 a1, u32 a2)
-{
- CpuFill32(0, srv->unk_14, 0x400);
- *(u32 *)srv->unk_14 = a2;
- sub_8144888(&srv->unk_24, a1, srv->unk_14, 4);
-}
-
-// funcs in array gUnknown_8466F60
-
-u32 sub_8144C34(struct mevent_srv_ish * srv)
-{
- memcpy(srv->unk_1C, gUnknown_84687E0, sizeof(gUnknown_84687E0));
- srv->unk_10 = 0;
- srv->unk_08 = 4;
- srv->unk_0C = 0;
- return 0;
-}
-
-u32 sub_8144C5C(struct mevent_srv_ish * srv)
-{
- return 6;
-}
-
-u32 sub_8144C60(struct mevent_srv_ish * srv)
+void mevent_srv_init_common(struct mevent_srv_common * svr, const void * a1, u32 a2, u32 a3)
{
- if (sub_8144844(&srv->unk_24))
- {
- srv->unk_08 = 4;
- srv->unk_0C = 0;
- }
- return 1;
-}
-
-u32 sub_8144C80(struct mevent_srv_ish * srv)
-{
- if (sub_8144850(&srv->unk_24))
- {
- srv->unk_08 = 4;
- srv->unk_0C = 0;
- }
- return 1;
-}
-
-u32 sub_8144CA0(struct mevent_srv_ish * srv)
-{
- u32 * r2 = (u32 *)srv->unk_1C + 2 * srv->unk_10;
- ++srv->unk_10;
- switch (r2[0])
- {
- case 0:
- break;
- case 1:
- srv->unk_04 = r2[1];
- srv->unk_08 = 1;
- srv->unk_0C = 0;
- break;
- case 2:
- sub_81448AC(&srv->unk_24, r2[1], srv->unk_18);
- srv->unk_08 = 2;
- srv->unk_0C = 0;
- break;
- case 3:
- srv->unk_08 = 3;
- srv->unk_0C = 0;
- break;
- case 20:
- sub_8144888(&srv->unk_24, 0x14, srv->unk_14, 0);
- srv->unk_08 = 3;
- srv->unk_0C = 0;
- break;
- case 19:
- sub_8144C00(srv, 0x12, GetGameStat(r2[1]));
- srv->unk_08 = 3;
- srv->unk_0C = 0;
- break;
- case 6:
- if (srv->unk_04 == 0)
- sub_8144BE4(srv);
- break;
- case 7:
- if (srv->unk_04 == 1)
- sub_8144BE4(srv);
- break;
- case 4:
- sub_8144BE4(srv);
- break;
- case 5:
- memcpy(srv->unk_20, srv->unk_18, 0x40);
- srv->unk_08 = 5;
- srv->unk_0C = 0;
- return 2;
- case 11:
- memcpy(srv->unk_20, srv->unk_18, 0x40);
- srv->unk_08 = 5;
- srv->unk_0C = 0;
- return 3;
- case 12:
- memcpy(srv->unk_20, srv->unk_18, 0x40);
- srv->unk_08 = 5;
- srv->unk_0C = 0;
- return 5;
- case 13:
- srv->unk_08 = 5;
- srv->unk_0C = 0;
- return 4;
- case 8:
- sub_81442CC(srv->unk_14);
- sub_8144888(&srv->unk_24, 0x11, srv->unk_14, 0x64);
- break;
- case 14:
- sub_8144C00(srv, 0x13, srv->unk_04);
- break;
- case 10:
- sub_8143F68(srv->unk_18);
- break;
- case 9:
- if (!sub_8143EF4(srv->unk_18))
- {
- sub_8143DC8(srv->unk_18);
- sub_8144C00(srv, 0x13, 0);
- }
- else
- sub_8144C00(srv, 0x13, 1);
- break;
- case 15:
- srv->unk_08 = 6;
- srv->unk_0C = 0;
- break;
- case 16:
- sub_8144254(srv->unk_18);
- break;
- case 17:
- sub_8069EA4(srv->unk_18, 1000);
- break;
- case 18:
- memcpy(gSaveBlock2Ptr->unk_4A0, srv->unk_18, 0xbc);
- sub_80E7490();
- break;
- case 21:
- memcpy(gDecompressionBuffer, srv->unk_18, 0x400);
- srv->unk_08 = 7;
- srv->unk_0C = 0;
- break;
- }
-
- return 1;
-}
-
-u32 sub_8144E6C(struct mevent_srv_ish * srv)
-{
- if (srv->unk_0C)
- {
- srv->unk_08 = 4;
- srv->unk_0C = 0;
- }
- return 1;
+ svr->unk_00 = 0;
+ svr->mainseqno = 0;
+ svr->unk_18 = AllocZeroed(332);
+ svr->unk_1C = AllocZeroed(444);
+ svr->unk_14 = AllocZeroed(ME_SEND_BUF_SIZE);
+ svr->unk_20 = AllocZeroed(100);
+ svr->unk_10 = a1;
+ svr->unk_0C = 0;
+ sub_814485C(&svr->unk_38, a2, a3);
}
-u32 sub_8144E84(struct mevent_srv_ish * srv)
+void mevent_srv_free_resources(struct mevent_srv_common * svr)
{
- switch (srv->unk_0C)
- {
- case 0:
- sub_80DA89C(srv->unk_18);
- ++srv->unk_0C;
- break;
- case 1:
- if (!sub_80DA8B0(&srv->unk_04))
- {
- srv->unk_08 = 4;
- srv->unk_0C = 0;
- }
- break;
- }
- return 1;
+ Free(svr->unk_18);
+ Free(svr->unk_1C);
+ Free(svr->unk_14);
+ Free(svr->unk_20);
}
-u32 sub_8144EBC(struct mevent_srv_ish * srv)
-{
- u32 (*func)(u32 *, struct SaveBlock2 *, struct SaveBlock1 *) = (void *)gDecompressionBuffer;
- if (func(&srv->unk_04, gSaveBlock2Ptr, gSaveBlock1Ptr) == 1)
- {
- srv->unk_08 = 4;
- srv->unk_0C = 0;
- }
- return 1;
-}
+const char gUnknown_8466F80[] = "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c";
+const char gUnknown_8466FB8[] = "size <= ME_SEND_BUF_SIZE";
+const char gUnknown_8466FD4[] = "cmd->parameter == NULL";
+const char gUnknown_8466FEC[] = "cmd->flag == FALSE";
+const char gUnknown_8467000[] = "cmd->flag == FALSE && cmd->parameter == NULL";
-u32 mevent_srv_ish_exec(struct mevent_srv_ish * srv)
+void sub_814501C(struct mevent_srv_common * svr, u32 a1, void * a2, u32 size)
{
- u32 (*funcs[])(struct mevent_srv_ish *) = {
- sub_8144C34,
- sub_8144C5C,
- sub_8144C60,
- sub_8144C80,
- sub_8144CA0,
- sub_8144E6C,
- sub_8144E84,
- sub_8144EBC
- };
- return funcs[srv->unk_08](srv);
+ // AGB_ASSERT_EX(size <= ME_SEND_BUF_SIZE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 257);
+ size <= ME_SEND_BUF_SIZE ? NULL : AGBAssert(gUnknown_8466F80, 257, gUnknown_8466FB8, 1);
+ sub_8144888(&svr->unk_38, a1, a2, size);
}
diff --git a/src/mevent_server_ish.c b/src/mevent_server_ish.c
new file mode 100644
index 000000000..7e9639303
--- /dev/null
+++ b/src/mevent_server_ish.c
@@ -0,0 +1,308 @@
+#include "global.h"
+#include "malloc.h"
+#include "decompress.h"
+#include "util.h"
+#include "link.h"
+#include "link_rfu.h"
+#include "overworld.h"
+#include "script.h"
+#include "battle_tower.h"
+#include "mystery_event_script.h"
+#include "mevent.h"
+#include "mevent_server.h"
+
+extern u16 gBlockRecvBuffer[][128];
+
+struct mevent_srv_ish
+{
+ u32 unk_00;
+ u32 unk_04;
+ u32 mainseqno;
+ u32 unk_0C;
+ u32 unk_10;
+ void * unk_14;
+ void * unk_18;
+ void * unk_1C;
+ void * unk_20;
+ struct mevent_srv_sub unk_24;
+};
+
+struct mevent_cmd
+{
+ u32 instr;
+ bool32 flag;
+ u32 parameter;
+};
+
+EWRAM_DATA struct mevent_srv_ish * gUnknown_203F3C0 = NULL;
+
+void mevent_srv_ish_init(struct mevent_srv_ish *, u32, u32);
+u32 mevent_srv_ish_exec(struct mevent_srv_ish *);
+void sub_8144BC0(struct mevent_srv_ish *);
+extern const u8 gUnknown_84687E0[];
+
+void sub_8144AEC(void)
+{
+ gUnknown_203F3C0 = AllocZeroed(sizeof(struct mevent_srv_ish));
+ mevent_srv_ish_init(gUnknown_203F3C0, 1, 0);
+}
+
+u32 sub_8144B0C(u16 * a0)
+{
+ u32 result;
+ if (gUnknown_203F3C0 == NULL)
+ return 6;
+ result = mevent_srv_ish_exec(gUnknown_203F3C0);
+ if (result == 6)
+ {
+ *a0 = gUnknown_203F3C0->unk_04;
+ sub_8144BC0(gUnknown_203F3C0);
+ Free(gUnknown_203F3C0);
+ gUnknown_203F3C0 = NULL;
+ }
+ return result;
+}
+
+void sub_8144B48(void)
+{
+ gUnknown_203F3C0->unk_0C++;
+}
+
+void * sub_8144B58(void)
+{
+ return gUnknown_203F3C0->unk_20;
+}
+
+void sub_8144B64(u32 a0)
+{
+ gUnknown_203F3C0->unk_04 = a0;
+}
+
+void mevent_srv_ish_init(struct mevent_srv_ish * svr, u32 a1, u32 a2)
+{
+ svr->unk_00 = 0;
+ svr->mainseqno = 0;
+ svr->unk_0C = 0;
+ svr->unk_14 = AllocZeroed(ME_SEND_BUF_SIZE);
+ svr->unk_18 = AllocZeroed(ME_SEND_BUF_SIZE);
+ svr->unk_1C = AllocZeroed(ME_SEND_BUF_SIZE);
+ svr->unk_20 = AllocZeroed(0x40);
+ sub_814485C(&svr->unk_24, a1, a2);
+}
+
+void sub_8144BC0(struct mevent_srv_ish * svr)
+{
+ Free(svr->unk_14);
+ Free(svr->unk_18);
+ Free(svr->unk_1C);
+ Free(svr->unk_20);
+}
+
+void sub_8144BE4(struct mevent_srv_ish * svr)
+{
+ memcpy(svr->unk_1C, svr->unk_18, ME_SEND_BUF_SIZE);
+ svr->unk_10 = 0;
+}
+
+void sub_8144C00(struct mevent_srv_ish * svr, u32 a1, u32 a2)
+{
+ CpuFill32(0, svr->unk_14, ME_SEND_BUF_SIZE);
+ *(u32 *)svr->unk_14 = a2;
+ sub_8144888(&svr->unk_24, a1, svr->unk_14, 4);
+}
+
+// funcs in array gUnknown_8466F60
+
+u32 sub_8144C34(struct mevent_srv_ish * svr)
+{
+ memcpy(svr->unk_1C, gUnknown_84687E0, ME_SEND_BUF_SIZE);
+ svr->unk_10 = 0;
+ svr->mainseqno = 4;
+ svr->unk_0C = 0;
+ return 0;
+}
+
+u32 sub_8144C5C(struct mevent_srv_ish * svr)
+{
+ return 6;
+}
+
+u32 sub_8144C60(struct mevent_srv_ish * svr)
+{
+ if (sub_8144844(&svr->unk_24))
+ {
+ svr->mainseqno = 4;
+ svr->unk_0C = 0;
+ }
+ return 1;
+}
+
+u32 sub_8144C80(struct mevent_srv_ish * svr)
+{
+ if (sub_8144850(&svr->unk_24))
+ {
+ svr->mainseqno = 4;
+ svr->unk_0C = 0;
+ }
+ return 1;
+}
+
+u32 sub_8144CA0(struct mevent_srv_ish * svr)
+{
+ u32 * r2 = (u32 *)svr->unk_1C + 2 * svr->unk_10;
+ ++svr->unk_10;
+ switch (r2[0])
+ {
+ case 0:
+ break;
+ case 1:
+ svr->unk_04 = r2[1];
+ svr->mainseqno = 1;
+ svr->unk_0C = 0;
+ break;
+ case 2:
+ sub_81448AC(&svr->unk_24, r2[1], svr->unk_18);
+ svr->mainseqno = 2;
+ svr->unk_0C = 0;
+ break;
+ case 3:
+ svr->mainseqno = 3;
+ svr->unk_0C = 0;
+ break;
+ case 20:
+ sub_8144888(&svr->unk_24, 0x14, svr->unk_14, 0);
+ svr->mainseqno = 3;
+ svr->unk_0C = 0;
+ break;
+ case 19:
+ sub_8144C00(svr, 0x12, GetGameStat(r2[1]));
+ svr->mainseqno = 3;
+ svr->unk_0C = 0;
+ break;
+ case 6:
+ if (svr->unk_04 == 0)
+ sub_8144BE4(svr);
+ break;
+ case 7:
+ if (svr->unk_04 == 1)
+ sub_8144BE4(svr);
+ break;
+ case 4:
+ sub_8144BE4(svr);
+ break;
+ case 5:
+ memcpy(svr->unk_20, svr->unk_18, 0x40);
+ svr->mainseqno = 5;
+ svr->unk_0C = 0;
+ return 2;
+ case 11:
+ memcpy(svr->unk_20, svr->unk_18, 0x40);
+ svr->mainseqno = 5;
+ svr->unk_0C = 0;
+ return 3;
+ case 12:
+ memcpy(svr->unk_20, svr->unk_18, 0x40);
+ svr->mainseqno = 5;
+ svr->unk_0C = 0;
+ return 5;
+ case 13:
+ svr->mainseqno = 5;
+ svr->unk_0C = 0;
+ return 4;
+ case 8:
+ sub_81442CC(svr->unk_14);
+ sub_8144888(&svr->unk_24, 0x11, svr->unk_14, 0x64);
+ break;
+ case 14:
+ sub_8144C00(svr, 0x13, svr->unk_04);
+ break;
+ case 10:
+ sub_8143F68(svr->unk_18);
+ break;
+ case 9:
+ if (!sub_8143EF4(svr->unk_18))
+ {
+ sub_8143DC8(svr->unk_18);
+ sub_8144C00(svr, 0x13, 0);
+ }
+ else
+ sub_8144C00(svr, 0x13, 1);
+ break;
+ case 15:
+ svr->mainseqno = 6;
+ svr->unk_0C = 0;
+ break;
+ case 16:
+ sub_8144254(svr->unk_18);
+ break;
+ case 17:
+ sub_8069EA4(svr->unk_18, 1000);
+ break;
+ case 18:
+ memcpy(gSaveBlock2Ptr->unk_4A0, svr->unk_18, 0xbc);
+ sub_80E7490();
+ break;
+ case 21:
+ memcpy(gDecompressionBuffer, svr->unk_18, ME_SEND_BUF_SIZE);
+ svr->mainseqno = 7;
+ svr->unk_0C = 0;
+ break;
+ }
+
+ return 1;
+}
+
+u32 sub_8144E6C(struct mevent_srv_ish * svr)
+{
+ if (svr->unk_0C)
+ {
+ svr->mainseqno = 4;
+ svr->unk_0C = 0;
+ }
+ return 1;
+}
+
+u32 sub_8144E84(struct mevent_srv_ish * svr)
+{
+ switch (svr->unk_0C)
+ {
+ case 0:
+ sub_80DA89C(svr->unk_18);
+ ++svr->unk_0C;
+ break;
+ case 1:
+ if (!sub_80DA8B0(&svr->unk_04))
+ {
+ svr->mainseqno = 4;
+ svr->unk_0C = 0;
+ }
+ break;
+ }
+ return 1;
+}
+
+u32 sub_8144EBC(struct mevent_srv_ish * svr)
+{
+ u32 (*func)(u32 *, struct SaveBlock2 *, struct SaveBlock1 *) = (void *)gDecompressionBuffer;
+ if (func(&svr->unk_04, gSaveBlock2Ptr, gSaveBlock1Ptr) == 1)
+ {
+ svr->mainseqno = 4;
+ svr->unk_0C = 0;
+ }
+ return 1;
+}
+
+u32 mevent_srv_ish_exec(struct mevent_srv_ish * svr)
+{
+ u32 (*funcs[])(struct mevent_srv_ish *) = {
+ sub_8144C34,
+ sub_8144C5C,
+ sub_8144C60,
+ sub_8144C80,
+ sub_8144CA0,
+ sub_8144E6C,
+ sub_8144E84,
+ sub_8144EBC
+ };
+ return funcs[svr->mainseqno](svr);
+}
diff --git a/src/mevent_server_sub.c b/src/mevent_server_sub.c
new file mode 100644
index 000000000..83b8f62ca
--- /dev/null
+++ b/src/mevent_server_sub.c
@@ -0,0 +1,211 @@
+#include "global.h"
+#include "malloc.h"
+#include "decompress.h"
+#include "util.h"
+#include "link.h"
+#include "link_rfu.h"
+#include "overworld.h"
+#include "script.h"
+#include "battle_tower.h"
+#include "mystery_event_script.h"
+#include "mevent.h"
+#include "mevent_server.h"
+
+u32 sub_814490C(struct mevent_srv_sub *);
+u32 sub_81449E0(struct mevent_srv_sub *);
+
+u32 sub_8144844(struct mevent_srv_sub * svr)
+{
+ return svr->unk_20(svr);
+}
+
+u32 sub_8144850(struct mevent_srv_sub * svr)
+{
+ return svr->unk_24(svr);
+}
+
+void sub_814485C(struct mevent_srv_sub * svr, u32 a1, u32 a2)
+{
+ svr->unk_04 = a1;
+ svr->unk_05 = a2;
+ svr->unk_00 = 0;
+ svr->unk_12 = 0;
+ svr->unk_14 = 0;
+ svr->unk_10 = 0;
+ svr->unk_0A = 0;
+ svr->unk_0C = 0;
+ svr->unk_08 = 0;
+ svr->unk_1C = NULL;
+ svr->unk_18 = NULL;
+ svr->unk_24 = sub_81449E0;
+ svr->unk_20 = sub_814490C;
+}
+
+void sub_8144888(struct mevent_srv_sub * svr, u32 a1, void * a2, u32 a3)
+{
+ svr->unk_00 = 0;
+ svr->unk_0E = a1;
+ svr->unk_10 = 0;
+ svr->unk_12 = 0;
+ if (a3 != 0)
+ svr->unk_14 = a3;
+ else
+ svr->unk_14 = ME_SEND_BUF_SIZE;
+ svr->unk_1C = a2;
+}
+
+void sub_81448AC(struct mevent_srv_sub * svr, u32 a1, void * a2)
+{
+ svr->unk_00 = 0;
+ svr->unk_06 = a1;
+ svr->unk_08 = 0;
+ svr->unk_0A = 0;
+ svr->unk_0C = 0;
+ svr->unk_18 = a2;
+}
+
+void sub_81448BC(u32 recv_idx, void * dest, size_t size)
+{
+ memcpy(dest, gBlockRecvBuffer[recv_idx], size);
+}
+
+bool32 sub_81448D8(u32 recv_idx)
+{
+ if ((GetBlockReceivedStatus() >> recv_idx) & 1)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+void sub_81448FC(u32 recv_idx)
+{
+ ResetBlockReceivedFlag(recv_idx);
+}
+
+bool32 sub_814490C(struct mevent_srv_sub * svr)
+{
+ struct send_recv_buff buff;
+
+ switch (svr->unk_00)
+ {
+ case 0:
+ if (sub_81448D8(svr->unk_05))
+ {
+ sub_81448BC(svr->unk_05, &buff, sizeof(buff));
+ svr->unk_0C = buff.unk4;
+ svr->unk_0A = buff.unk2;
+ if (svr->unk_0C > ME_SEND_BUF_SIZE)
+ {
+ sub_80FA190();
+ return FALSE;
+ }
+ else if (svr->unk_06 != buff.unk0)
+ {
+ sub_80FA190();
+ return FALSE;
+ }
+ else
+ {
+ svr->unk_08 = 0;
+ sub_81448FC(svr->unk_05);
+ ++svr->unk_00;
+ }
+ }
+ break;
+ case 1:
+ if (sub_81448D8(svr->unk_05))
+ {
+ size_t r3 = svr->unk_08 * 252;
+ if (svr->unk_0C - r3 <= 252)
+ {
+ sub_81448BC(svr->unk_05, svr->unk_18 + r3, svr->unk_0C - r3);
+ ++svr->unk_08;
+ ++svr->unk_00;
+ }
+ else
+ {
+ sub_81448BC(svr->unk_05, svr->unk_18 + r3, 252);
+ ++svr->unk_08;
+ }
+ sub_81448FC(svr->unk_05);
+ }
+ break;
+ case 2:
+ if (CalcCRC16WithTable(svr->unk_18, svr->unk_0C) != svr->unk_0A)
+ {
+ sub_80FA190();
+ return FALSE;
+ }
+ else
+ {
+ svr->unk_00 = 0;
+ return TRUE;
+ }
+ break;
+
+ }
+
+ return FALSE;
+}
+
+bool32 sub_81449E0(struct mevent_srv_sub * svr)
+{
+ struct send_recv_buff buff;
+
+ switch (svr->unk_00)
+ {
+ case 0:
+ if (sub_800A4BC())
+ {
+ buff.unk0 = svr->unk_0E;
+ buff.unk4 = svr->unk_14;
+ buff.unk2 = CalcCRC16WithTable(svr->unk_1C, svr->unk_14);
+ svr->unk_12 = buff.unk2;
+ svr->unk_10 = 0;
+ SendBlock(0, &buff, sizeof(buff));
+ ++svr->unk_00;
+ }
+ break;
+ case 1:
+ if (sub_800A4BC())
+ {
+ if (sub_81448D8(svr->unk_04))
+ {
+ size_t r3;
+ sub_81448FC(svr->unk_04);
+ r3 = 252 * svr->unk_10;
+ if (svr->unk_14 - r3 <= 252)
+ {
+ SendBlock(0, svr->unk_1C + r3, svr->unk_14 - r3);
+ ++svr->unk_10;
+ ++svr->unk_00;
+ }
+ else
+ {
+ SendBlock(0, svr->unk_1C + r3, 252);
+ ++svr->unk_10;
+ }
+ }
+ }
+ break;
+ case 2:
+ if (sub_800A4BC())
+ {
+ if (CalcCRC16WithTable(svr->unk_1C, svr->unk_14) != svr->unk_12)
+ sub_80FA190();
+ else
+ ++svr->unk_00;
+ }
+ break;
+ case 3:
+ if (sub_81448D8(svr->unk_04))
+ {
+ sub_81448FC(svr->unk_04);
+ svr->unk_00 = 0;
+ return TRUE;
+ }
+ break;
+ }
+
+ return FALSE;
+}