diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mevent_server.c | 332 | ||||
-rw-r--r-- | src/mevent_server_helpers.c | 211 | ||||
-rw-r--r-- | src/mevent_server_ish.c | 305 | ||||
-rw-r--r-- | src/mevent_server_sub.c | 211 |
4 files changed, 497 insertions, 562 deletions
diff --git a/src/mevent_server.c b/src/mevent_server.c index 2242dabce..2c0dcafad 100644 --- a/src/mevent_server.c +++ b/src/mevent_server.c @@ -11,42 +11,282 @@ #include "mevent.h" #include "mevent_server.h" -extern u16 gBlockRecvBuffer[][128]; +EWRAM_DATA struct mevent_srv_ish * gUnknown_203F3C0 = NULL; +EWRAM_DATA struct mevent_srv_common * gUnknown_203F3C4 = NULL; + +static void mevent_srv_ish_init(struct mevent_srv_ish *, u32, u32); +static u32 mevent_srv_ish_exec(struct mevent_srv_ish *); +static void sub_8144BC0(struct mevent_srv_ish *); +static void mevent_srv_init_common(struct mevent_srv_common *, const void *, u32, u32); +static void mevent_srv_free_resources(struct mevent_srv_common *); +static u32 sub_8145600(struct mevent_srv_common *); -struct mevent_cmd +void sub_8144AEC(void) { - u32 instr; - bool32 flag; - void * parameter; -}; + gUnknown_203F3C0 = AllocZeroed(sizeof(struct mevent_srv_ish)); + mevent_srv_ish_init(gUnknown_203F3C0, 1, 0); +} -struct mevent_srv_common -{ - u32 unk_00; - u32 unk_04; - u32 mainseqno; - u32 cmdidx; - const struct mevent_cmd * cmdBuffer; - void * unk_14; - struct MEventBuffer_32E0_Sub * unk_18; - struct MEventBuffer_3120_Sub * unk_1C; - struct MEventStruct_Unk1442CC * unk_20; - void * unk_24; - u32 unk_28; - void * unk_2C; - u32 unk_30; - void * unk_34; - struct mevent_srv_sub unk_38; -}; +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; +} -EWRAM_DATA struct mevent_srv_common * gUnknown_203F3C4 = NULL; +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; +} + +static 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->cmdBuffer = AllocZeroed(ME_SEND_BUF_SIZE); + svr->unk_20 = AllocZeroed(0x40); + mevent_srv_sub_init(&svr->unk_24, a1, a2); +} + +static void sub_8144BC0(struct mevent_srv_ish * svr) +{ + Free(svr->unk_14); + Free(svr->unk_18); + Free(svr->cmdBuffer); + Free(svr->unk_20); +} + +static void sub_8144BE4(struct mevent_srv_ish * svr) +{ + memcpy(svr->cmdBuffer, svr->unk_18, ME_SEND_BUF_SIZE); + svr->cmdidx = 0; +} + +static 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; + mevent_srv_sub_init_send(&svr->unk_24, a1, svr->unk_14, 4); +} + +static u32 ish_mainseq_0(struct mevent_srv_ish * svr) +{ + // init + memcpy(svr->cmdBuffer, gUnknown_84687E0, ME_SEND_BUF_SIZE); + svr->cmdidx = 0; + svr->mainseqno = 4; + svr->unk_0C = 0; + return 0; +} + +static u32 ish_mainseq_1(struct mevent_srv_ish * svr) +{ + // done + return 6; +} + +static u32 ish_mainseq_2(struct mevent_srv_ish * svr) +{ + + if (mevent_srv_sub_recv(&svr->unk_24)) + { + svr->mainseqno = 4; + svr->unk_0C = 0; + } + return 1; +} + +static u32 ish_mainseq_3(struct mevent_srv_ish * svr) +{ + if (mevent_srv_sub_send(&svr->unk_24)) + { + svr->mainseqno = 4; + svr->unk_0C = 0; + } + return 1; +} + +static u32 ish_mainseq_4(struct mevent_srv_ish * svr) +{ + struct mevent_cmd_ish * cmd = &svr->cmdBuffer[svr->cmdidx]; + ++svr->cmdidx; + switch (cmd->instr) + { + case 0: + break; + case 1: + svr->unk_04 = cmd->parameter; + svr->mainseqno = 1; + svr->unk_0C = 0; + break; + case 2: + mevent_srv_sub_init_recv(&svr->unk_24, cmd->parameter, svr->unk_18); + svr->mainseqno = 2; + svr->unk_0C = 0; + break; + case 3: + svr->mainseqno = 3; + svr->unk_0C = 0; + break; + case 20: + mevent_srv_sub_init_send(&svr->unk_24, 0x14, svr->unk_14, 0); + svr->mainseqno = 3; + svr->unk_0C = 0; + break; + case 19: + sub_8144C00(svr, 0x12, GetGameStat(cmd->parameter)); + 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); + mevent_srv_sub_init_send(&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; +} + +static u32 ish_mainseq_5(struct mevent_srv_ish * svr) +{ + if (svr->unk_0C) + { + svr->mainseqno = 4; + svr->unk_0C = 0; + } + return 1; +} + +static u32 ish_mainseq_6(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; +} -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 *); +static u32 ish_mainseq_7(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; +} -extern const u8 gUnknown_8468B6C[]; -extern const u8 gUnknown_8468BCC[]; +static u32 mevent_srv_ish_exec(struct mevent_srv_ish * svr) +{ + u32 (*funcs[])(struct mevent_srv_ish *) = { + ish_mainseq_0, + ish_mainseq_1, + ish_mainseq_2, + ish_mainseq_3, + ish_mainseq_4, + ish_mainseq_5, + ish_mainseq_6, + ish_mainseq_7 + }; + return funcs[svr->mainseqno](svr); +} void sub_8144F1C(void) { @@ -76,7 +316,7 @@ u32 sub_8144F64(u16 * a0) return result; } -void mevent_srv_init_common(struct mevent_srv_common * svr, const void * a1, u32 a2, u32 a3) +static void mevent_srv_init_common(struct mevent_srv_common * svr, const void * a1, u32 a2, u32 a3) { svr->unk_00 = 0; svr->mainseqno = 0; @@ -86,10 +326,10 @@ void mevent_srv_init_common(struct mevent_srv_common * svr, const void * a1, u32 svr->unk_20 = AllocZeroed(100); svr->cmdBuffer = a1; svr->cmdidx = 0; - sub_814485C(&svr->unk_38, a2, a3); + mevent_srv_sub_init(&svr->unk_38, a2, a3); } -void mevent_srv_free_resources(struct mevent_srv_common * svr) +static void mevent_srv_free_resources(struct mevent_srv_common * svr) { Free(svr->unk_18); Free(svr->unk_1C); @@ -97,13 +337,13 @@ void mevent_srv_free_resources(struct mevent_srv_common * svr) Free(svr->unk_20); } -void sub_814501C(struct mevent_srv_common * svr, u32 a1, void * a2, u32 size) +static void sub_814501C(struct mevent_srv_common * svr, u32 a1, void * a2, u32 size) { AGB_ASSERT_EX(size <= ME_SEND_BUF_SIZE, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 257); - sub_8144888(&svr->unk_38, a1, a2, size); + mevent_srv_sub_init_send(&svr->unk_38, a1, a2, size); } -void * sub_814505C(void * a0, void * a1) +static void * sub_814505C(void * a0, void * a1) { if (a0 != NULL) return a0; @@ -111,7 +351,7 @@ void * sub_814505C(void * a0, void * a1) return a1; } -u32 sub_8145068(void * a0, void * a1) +static u32 sub_8145068(void * a0, void * a1) { if (a1 < a0) return 0; @@ -121,32 +361,32 @@ u32 sub_8145068(void * a0, void * a1) return 2; } -u32 sub_8145080(struct mevent_srv_common * svr) +static u32 sub_8145080(struct mevent_srv_common * svr) { svr->mainseqno = 4; return 0; } -u32 sub_8145088(struct mevent_srv_common * svr) +static u32 sub_8145088(struct mevent_srv_common * svr) { return 3; } -u32 sub_814508C(struct mevent_srv_common * svr) +static u32 sub_814508C(struct mevent_srv_common * svr) { - if (sub_8144844(&svr->unk_38)) + if (mevent_srv_sub_recv(&svr->unk_38)) svr->mainseqno = 4; return 1; } -u32 sub_81450A8(struct mevent_srv_common * svr) +static u32 sub_81450A8(struct mevent_srv_common * svr) { - if (sub_8144850(&svr->unk_38)) + if (mevent_srv_sub_send(&svr->unk_38)) svr->mainseqno = 4; return 1; } -u32 sub_81450C4(struct mevent_srv_common * svr) +static u32 sub_81450C4(struct mevent_srv_common * svr) { const struct mevent_cmd * cmd = &svr->cmdBuffer[svr->cmdidx]; void * ptr; @@ -164,7 +404,7 @@ u32 sub_81450C4(struct mevent_srv_common * svr) break; case 2: AGB_ASSERT_EX(cmd->parameter == NULL, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 364); - sub_81448AC(&svr->unk_38, cmd->flag, svr->unk_14); + mevent_srv_sub_init_recv(&svr->unk_38, cmd->flag, svr->unk_14); svr->mainseqno = 2; break; case 3: @@ -299,7 +539,7 @@ static u32 (*const func_tbl[])(struct mevent_srv_common *) = { sub_81450C4 }; -u32 sub_8145600(struct mevent_srv_common * svr) +static u32 sub_8145600(struct mevent_srv_common * svr) { u32 response; AGB_ASSERT_EX(svr->mainseqno < NELEMS(func_tbl), "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/mevent_server.c", 546); diff --git a/src/mevent_server_helpers.c b/src/mevent_server_helpers.c new file mode 100644 index 000000000..a5ce595b0 --- /dev/null +++ b/src/mevent_server_helpers.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" + +static u32 mevent_receive_func(struct mevent_srv_sub *); +static u32 mevent_send_func(struct mevent_srv_sub *); + +u32 mevent_srv_sub_recv(struct mevent_srv_sub * svr) +{ + return svr->recvFunc(svr); +} + +u32 mevent_srv_sub_send(struct mevent_srv_sub * svr) +{ + return svr->sendFunc(svr); +} + +void mevent_srv_sub_init(struct mevent_srv_sub * svr, u32 sendPlayerNo, u32 recvPlayerNo) +{ + svr->sendPlayerNo = sendPlayerNo; + svr->recvPlayerNo = recvPlayerNo; + svr->seqno = 0; + svr->sendCRC = 0; + svr->sendSize = 0; + svr->sendCounter = 0; + svr->recvCRC = 0; + svr->recvSize = 0; + svr->recvCounter = 0; + svr->sendBfr = NULL; + svr->recvBfr = NULL; + svr->sendFunc = mevent_send_func; + svr->recvFunc = mevent_receive_func; +} + +void mevent_srv_sub_init_send(struct mevent_srv_sub * svr, u32 a1, const void * src, u32 size) +{ + svr->seqno = 0; + svr->sendIdent = a1; + svr->sendCounter = 0; + svr->sendCRC = 0; + if (size != 0) + svr->sendSize = size; + else + svr->sendSize = ME_SEND_BUF_SIZE; + svr->sendBfr = src; +} + +void mevent_srv_sub_init_recv(struct mevent_srv_sub * svr, u32 ident, void * dest) +{ + svr->seqno = 0; + svr->recvIdent = ident; + svr->recvCounter = 0; + svr->recvCRC = 0; + svr->recvSize = 0; + svr->recvBfr = dest; +} + +static void mevent_recv_block(u32 recv_idx, void * dest, size_t size) +{ + memcpy(dest, gBlockRecvBuffer[recv_idx], size); +} + +static bool32 mevent_has_received(u32 recv_idx) +{ + if ((GetBlockReceivedStatus() >> recv_idx) & 1) + return TRUE; + else + return FALSE; +} + +static void mevent_reset_recv(u32 recv_idx) +{ + ResetBlockReceivedFlag(recv_idx); +} + +static bool32 mevent_receive_func(struct mevent_srv_sub * svr) +{ + struct send_recv_header header; + + switch (svr->seqno) + { + case 0: + if (mevent_has_received(svr->recvPlayerNo)) + { + mevent_recv_block(svr->recvPlayerNo, &header, sizeof(header)); + svr->recvSize = header.size; + svr->recvCRC = header.crc; + if (svr->recvSize > ME_SEND_BUF_SIZE) + { + sub_80FA190(); + return FALSE; + } + else if (svr->recvIdent != header.ident) + { + sub_80FA190(); + return FALSE; + } + else + { + svr->recvCounter = 0; + mevent_reset_recv(svr->recvPlayerNo); + ++svr->seqno; + } + } + break; + case 1: + if (mevent_has_received(svr->recvPlayerNo)) + { + size_t r3 = svr->recvCounter * 252; + if (svr->recvSize - r3 <= 252) + { + mevent_recv_block(svr->recvPlayerNo, svr->recvBfr + r3, svr->recvSize - r3); + ++svr->recvCounter; + ++svr->seqno; + } + else + { + mevent_recv_block(svr->recvPlayerNo, svr->recvBfr + r3, 252); + ++svr->recvCounter; + } + mevent_reset_recv(svr->recvPlayerNo); + } + break; + case 2: + if (CalcCRC16WithTable(svr->recvBfr, svr->recvSize) != svr->recvCRC) + { + sub_80FA190(); + return FALSE; + } + else + { + svr->seqno = 0; + return TRUE; + } + break; + + } + + return FALSE; +} + +static bool32 mevent_send_func(struct mevent_srv_sub * svr) +{ + struct send_recv_header header; + + switch (svr->seqno) + { + case 0: + if (sub_800A4BC()) + { + header.ident = svr->sendIdent; + header.size = svr->sendSize; + header.crc = CalcCRC16WithTable(svr->sendBfr, svr->sendSize); + svr->sendCRC = header.crc; + svr->sendCounter = 0; + SendBlock(0, &header, sizeof(header)); + ++svr->seqno; + } + break; + case 1: + if (sub_800A4BC()) + { + if (mevent_has_received(svr->sendPlayerNo)) + { + size_t r3; + mevent_reset_recv(svr->sendPlayerNo); + r3 = 252 * svr->sendCounter; + if (svr->sendSize - r3 <= 252) + { + SendBlock(0, svr->sendBfr + r3, svr->sendSize - r3); + ++svr->sendCounter; + ++svr->seqno; + } + else + { + SendBlock(0, svr->sendBfr + r3, 252); + ++svr->sendCounter; + } + } + } + break; + case 2: + if (sub_800A4BC()) + { + if (CalcCRC16WithTable(svr->sendBfr, svr->sendSize) != svr->sendCRC) + sub_80FA190(); + else + ++svr->seqno; + } + break; + case 3: + if (mevent_has_received(svr->sendPlayerNo)) + { + mevent_reset_recv(svr->sendPlayerNo); + svr->seqno = 0; + return TRUE; + } + break; + } + + return FALSE; +} diff --git a/src/mevent_server_ish.c b/src/mevent_server_ish.c deleted file mode 100644 index e544c0f42..000000000 --- a/src/mevent_server_ish.c +++ /dev/null @@ -1,305 +0,0 @@ -#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_cmd -{ - u32 instr; - u32 parameter; -}; - -struct mevent_srv_ish -{ - u32 unk_00; - u32 unk_04; - u32 mainseqno; - u32 unk_0C; - u32 cmdidx; - void * unk_14; - void * unk_18; - struct mevent_cmd * cmdBuffer; - void * unk_20; - struct mevent_srv_sub unk_24; -}; - -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->cmdBuffer = 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->cmdBuffer); - Free(svr->unk_20); -} - -void sub_8144BE4(struct mevent_srv_ish * svr) -{ - memcpy(svr->cmdBuffer, svr->unk_18, ME_SEND_BUF_SIZE); - svr->cmdidx = 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); -} - -u32 sub_8144C34(struct mevent_srv_ish * svr) -{ - memcpy(svr->cmdBuffer, gUnknown_84687E0, ME_SEND_BUF_SIZE); - svr->cmdidx = 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) -{ - struct mevent_cmd * cmd = &svr->cmdBuffer[svr->cmdidx]; - ++svr->cmdidx; - switch (cmd->instr) - { - case 0: - break; - case 1: - svr->unk_04 = cmd->parameter; - svr->mainseqno = 1; - svr->unk_0C = 0; - break; - case 2: - sub_81448AC(&svr->unk_24, cmd->parameter, 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(cmd->parameter)); - 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 deleted file mode 100644 index 83b8f62ca..000000000 --- a/src/mevent_server_sub.c +++ /dev/null @@ -1,211 +0,0 @@ -#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; -} |