summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/mevent_server.s167
-rw-r--r--common_syms/mevent.txt1
-rw-r--r--data/data_8466FB8.s22
-rw-r--r--include/cereader_tool.h9
-rw-r--r--include/help_system.h2
-rw-r--r--include/mevent_server.h36
-rw-r--r--include/mystery_gift_menu.h6
-rw-r--r--ld_script.txt4
-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
-rw-r--r--sym_common.txt4
-rw-r--r--sym_ewram.txt12
14 files changed, 641 insertions, 677 deletions
diff --git a/asm/mevent_server.s b/asm/mevent_server.s
index 41c3ad7da..1bcc5deed 100644
--- a/asm/mevent_server.s
+++ b/asm/mevent_server.s
@@ -5,169 +5,6 @@
.text
- thumb_func_start sub_8144F1C
-sub_8144F1C: @ 8144F1C
- push {r4,lr}
- ldr r4, _08144F38 @ =gUnknown_203F3C4
- movs r0, 0x60
- bl AllocZeroed
- str r0, [r4]
- ldr r1, _08144F3C @ =gUnknown_8468B6C
- movs r2, 0
- movs r3, 0x1
- bl mevent_srv_init_common
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08144F38: .4byte gUnknown_203F3C4
-_08144F3C: .4byte gUnknown_8468B6C
- thumb_func_end sub_8144F1C
-
- thumb_func_start sub_8144F40
-sub_8144F40: @ 8144F40
- push {r4,lr}
- ldr r4, _08144F5C @ =gUnknown_203F3C4
- movs r0, 0x60
- bl AllocZeroed
- str r0, [r4]
- ldr r1, _08144F60 @ =gUnknown_8468BCC
- movs r2, 0
- movs r3, 0x1
- bl mevent_srv_init_common
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08144F5C: .4byte gUnknown_203F3C4
-_08144F60: .4byte gUnknown_8468BCC
- thumb_func_end sub_8144F40
-
- thumb_func_start sub_8144F64
-sub_8144F64: @ 8144F64
- push {r4-r6,lr}
- adds r6, r0, 0
- ldr r4, _08144F74 @ =gUnknown_203F3C4
- ldr r0, [r4]
- cmp r0, 0
- bne _08144F78
- movs r0, 0x3
- b _08144F98
- .align 2, 0
-_08144F74: .4byte gUnknown_203F3C4
-_08144F78:
- bl sub_8145600
- adds r5, r0, 0
- cmp r5, 0x3
- bne _08144F96
- ldr r0, [r4]
- ldr r1, [r0, 0x4]
- strh r1, [r6]
- bl mevent_srv_free_resources
- ldr r0, [r4]
- bl Free
- movs r0, 0
- str r0, [r4]
-_08144F96:
- adds r0, r5, 0
-_08144F98:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_8144F64
-
- thumb_func_start mevent_srv_init_common
-mevent_srv_init_common: @ 8144FA0
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- adds r4, r0, 0
- adds r6, r1, 0
- mov r8, r2
- mov r9, r3
- movs r5, 0
- str r5, [r4]
- str r5, [r4, 0x8]
- movs r0, 0xA6
- lsls r0, 1
- bl AllocZeroed
- str r0, [r4, 0x18]
- movs r0, 0xDE
- lsls r0, 1
- bl AllocZeroed
- str r0, [r4, 0x1C]
- movs r0, 0x80
- lsls r0, 3
- bl AllocZeroed
- str r0, [r4, 0x14]
- movs r0, 0x64
- bl AllocZeroed
- str r0, [r4, 0x20]
- str r6, [r4, 0x10]
- str r5, [r4, 0xC]
- adds r4, 0x38
- adds r0, r4, 0
- mov r1, r8
- mov r2, r9
- bl sub_814485C
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end mevent_srv_init_common
-
- thumb_func_start mevent_srv_free_resources
-mevent_srv_free_resources: @ 8144FF8
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, [r4, 0x18]
- bl Free
- ldr r0, [r4, 0x1C]
- bl Free
- ldr r0, [r4, 0x14]
- bl Free
- ldr r0, [r4, 0x20]
- bl Free
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end mevent_srv_free_resources
-
- thumb_func_start sub_814501C
-sub_814501C: @ 814501C
- push {r4-r7,lr}
- adds r5, r0, 0
- adds r6, r1, 0
- adds r7, r2, 0
- adds r4, r3, 0
- movs r0, 0x80
- lsls r0, 3
- cmp r4, r0
- bls _0814503A
- ldr r0, _08145050 @ =gUnknown_8466F80 "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c"
- ldr r1, _08145054 @ =0x00000101
- ldr r2, _08145058 @ =gUnknown_8466FB8 "size <= ME_SEND_BUF_SIZE"
- movs r3, 0x1
- bl AGBAssert
-_0814503A:
- adds r0, r5, 0
- adds r0, 0x38
- adds r1, r6, 0
- adds r2, r7, 0
- adds r3, r4, 0
- bl sub_8144888
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08145050: .4byte gUnknown_8466F80
-_08145054: .4byte 0x00000101
-_08145058: .4byte gUnknown_8466FB8
- thumb_func_end sub_814501C
-
thumb_func_start sub_814505C
sub_814505C: @ 814505C
push {lr}
@@ -871,7 +708,7 @@ sub_8145600: @ 8145600
movs r3, 0x1
bl AGBAssert
_08145616:
- ldr r1, _08145650 @ =gUnknown_8467030
+ ldr r1, _08145650 @ =func_tbl
ldr r0, [r4, 0x8]
lsls r0, 2
adds r0, r1
@@ -897,7 +734,7 @@ _0814563C:
_08145644: .4byte gUnknown_8466F80
_08145648: .4byte 0x00000222
_0814564C: .4byte gUnknown_8467044
-_08145650: .4byte gUnknown_8467030
+_08145650: .4byte func_tbl
thumb_func_end sub_8145600
.align 2, 0 @ Don't pad with nop.
diff --git a/common_syms/mevent.txt b/common_syms/mevent.txt
new file mode 100644
index 000000000..cfaf59d33
--- /dev/null
+++ b/common_syms/mevent.txt
@@ -0,0 +1 @@
+gUnknown_3005ED0
diff --git a/data/data_8466FB8.s b/data/data_8466FB8.s
index bdfdaaa6b..c34887d86 100644
--- a/data/data_8466FB8.s
+++ b/data/data_8466FB8.s
@@ -1,27 +1,7 @@
.section .rodata
.align 2
-gUnknown_8466F80:: @ 8466F80
- .asciz "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c"
-
- .align 2
-gUnknown_8466FB8:: @ 8466FB8
- .asciz "size <= ME_SEND_BUF_SIZE"
-
- .align 2
-gUnknown_8466FD4:: @ 8466FD4
- .asciz "cmd->parameter == NULL"
-
- .align 2
-gUnknown_8466FEC:: @ 8466FEC
- .asciz "cmd->flag == FALSE"
-
- .align 2
-gUnknown_8467000:: @ 8467000
- .asciz "cmd->flag == FALSE && cmd->parameter == NULL"
-
- .align 2
-gUnknown_8467030:: @ 8467030
+func_tbl:: @ 8467030
.4byte sub_8145080
.4byte sub_8145088
.4byte sub_814508C
diff --git a/include/cereader_tool.h b/include/cereader_tool.h
new file mode 100644
index 000000000..28ef526eb
--- /dev/null
+++ b/include/cereader_tool.h
@@ -0,0 +1,9 @@
+#ifndef GUARD_CEREADER_TOOL_H
+#define GUARD_CEREADER_TOOL_H
+
+#include "global.h"
+
+bool32 sub_815D794(u8 *);
+u8 sub_815D6B4(u8 *);
+
+#endif //GUARD_CEREADER_TOOL_H
diff --git a/include/help_system.h b/include/help_system.h
index 3f6a741c6..632788148 100644
--- a/include/help_system.h
+++ b/include/help_system.h
@@ -5,4 +5,6 @@
extern bool8 gUnknown_3005ECC;
+void sub_812B484(void);
+
#endif //GUARD_HELP_SYSTEM_H
diff --git a/include/mevent_server.h b/include/mevent_server.h
index 0d46d8fc5..d2d7b0687 100644
--- a/include/mevent_server.h
+++ b/include/mevent_server.h
@@ -1,4 +1,40 @@
#ifndef GUARD_MEVENT_SERVER_H
#define GUARD_MEVENT_SERVER_H
+#include "global.h"
+
+#define ME_SEND_BUF_SIZE 0x400
+
+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 send_recv_buff
+{
+ u16 unk0;
+ u16 unk2;
+ u16 unk4;
+};
+
+u32 sub_8144844(struct mevent_srv_sub * svr);
+u32 sub_8144850(struct mevent_srv_sub * svr);
+void sub_814485C(struct mevent_srv_sub * svr, u32 a1, u32 a2);
+void sub_8144888(struct mevent_srv_sub * svr, u32 a1, void * a2, u32 size);
+void sub_81448AC(struct mevent_srv_sub * svr, u32 a1, void * a2);
+
#endif //GUARD_MEVENT_SERVER_H
diff --git a/include/mystery_gift_menu.h b/include/mystery_gift_menu.h
new file mode 100644
index 000000000..17af9ce57
--- /dev/null
+++ b/include/mystery_gift_menu.h
@@ -0,0 +1,6 @@
+#ifndef GUARD_MYSTERY_GIFT_MENU_H
+#define GUARD_MYSTERY_GIFT_MENU_H
+
+void sub_81422FC(void);
+
+#endif //GUARD_MYSTERY_GIFT_MENU_H
diff --git a/ld_script.txt b/ld_script.txt
index 88ad583b6..19d8a5862 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -244,6 +244,8 @@ SECTIONS {
asm/mystery_gift_menu.o(.text);
asm/link_rfu_4.o(.text);
src/mevent.o(.text);
+ src/mevent_server_sub.o(.text);
+ src/mevent_server_ish.o(.text);
src/mevent_server.o(.text);
asm/mevent_server.o(.text);
asm/mevent_8145654.o(.text);
@@ -380,6 +382,8 @@ SECTIONS {
src/fame_checker.o(.rodata);
data/data_845FD54.o(.rodata);
src/mevent.o(.rodata);
+ src/mevent_server_sub.o(.rodata);
+ src/mevent_server_ish.o(.rodata);
src/mevent_server.o(.rodata);
data/data_8466FB8.o(.rodata);
src/menews_jisan.o(.rodata);
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;
+}
diff --git a/sym_common.txt b/sym_common.txt
index af6d7ba4f..d71702d05 100644
--- a/sym_common.txt
+++ b/sym_common.txt
@@ -329,9 +329,9 @@ gUnknown_3005EA0: @ 3005EA0
gUnknown_3005ECC: @ 3005ECC
.space 0x4
-gUnknown_3005ED0: @ 3005ED0
- .space 0x10
+ .include "mevent.o"
+ .align 4
gUnknown_3005EE0: @ 3005EE0
.space 0x10
diff --git a/sym_ewram.txt b/sym_ewram.txt
index cb35591a1..4c8d1dc78 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -1706,14 +1706,10 @@ gUnknown_203F3B0: @ 203F3B0
gUnknown_203F3B8: @ 203F3B8
.space 0x4
-gUnknown_203F3BC: @ 203F3BC
- .space 0x4
-
-gUnknown_203F3C0: @ 203F3C0
- .space 0x4
-
-gUnknown_203F3C4: @ 203F3C4
- .space 0x4
+ .include "src/mevent.o"
+ .include "src/mevent_server_sub.o"
+ .include "src/mevent_server_ish.o"
+ .include "src/mevent_server.o"
gUnknown_203F3C8: @ 203F3C8
.space 0x4