diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2018-11-30 15:26:16 -0500 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2018-11-30 15:26:16 -0500 |
commit | 8a8e86fa4fe0a7932f475c7aa8424ea840327e4b (patch) | |
tree | 221f1c172ae9a86591699b9cf016681d17c74ae4 | |
parent | f178d06946a4debf6a0551094d3ef2f70b7b364c (diff) |
split mevent_server
-rw-r--r-- | asm/mevent_server.s | 167 | ||||
-rw-r--r-- | common_syms/mevent.txt | 1 | ||||
-rw-r--r-- | data/data_8466FB8.s | 22 | ||||
-rw-r--r-- | include/cereader_tool.h | 9 | ||||
-rw-r--r-- | include/help_system.h | 2 | ||||
-rw-r--r-- | include/mevent_server.h | 36 | ||||
-rw-r--r-- | include/mystery_gift_menu.h | 6 | ||||
-rw-r--r-- | ld_script.txt | 4 | ||||
-rw-r--r-- | src/mevent.c | 9 | ||||
-rw-r--r-- | src/mevent_server.c | 527 | ||||
-rw-r--r-- | src/mevent_server_ish.c | 308 | ||||
-rw-r--r-- | src/mevent_server_sub.c | 211 | ||||
-rw-r--r-- | sym_common.txt | 4 | ||||
-rw-r--r-- | sym_ewram.txt | 12 |
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 |