diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2018-11-30 10:27:25 -0500 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2018-11-30 10:27:25 -0500 |
commit | 80dbdacaced2e4522f29e6974474103926461161 (patch) | |
tree | 62a7ea33b98094c4771548bdd98b68bcf9eafd55 /src | |
parent | 294b150d70385a117e1324fd1e13bab25bfaabc9 (diff) |
through sub_814490C
Diffstat (limited to 'src')
-rw-r--r-- | src/mevent.c | 4 | ||||
-rw-r--r-- | src/mevent_server.c | 178 |
2 files changed, 180 insertions, 2 deletions
diff --git a/src/mevent.c b/src/mevent.c index c81712de6..b04ac5462 100644 --- a/src/mevent.c +++ b/src/mevent.c @@ -8,7 +8,7 @@ #include "task.h" #include "decompress.h" #include "link.h" -#include "link_rfu_4.h" +#include "link_rfu.h" #include "unk_815c27c.h" #include "util.h" #include "script.h" @@ -134,7 +134,7 @@ u8 sub_8143674(struct MEvent_Str_1 *a0) void sub_81436BC(void) { memset(gDecompressionBuffer, 0, 0x2000); - gUnknown_202271A = 0x5502; + gLinkType = 0x5502; sub_8009804(); SetSuppressLinkErrorMessage(TRUE); } diff --git a/src/mevent_server.c b/src/mevent_server.c index 529b4ba77..0c94980ff 100644 --- a/src/mevent_server.c +++ b/src/mevent_server.c @@ -1,2 +1,180 @@ #include "global.h" +#include "malloc.h" +#include "util.h" +#include "link.h" +#include "link_rfu.h" #include "mevent.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; + u32 unk_1C; + u32 (*unk_20)(struct mevent_srv_sub *); + u32 (*unk_24)(struct mevent_srv_sub *); +}; + +struct mevent_srv_ish +{ + u32 unk_00; + u32 unk_04; + u32 unk_08; + u32 unk_0C; + u32 unk_10; + void * unk_14; + void * unk_18; + void * unk_1C; + void * unk_20; + struct mevent_srv_sub unk_24; +}; + +EWRAM_DATA struct mevent_srv_ish * gUnknown_203F3C0 = NULL; + +u32 sub_814490C(struct mevent_srv_sub *); +u32 sub_81449E0(struct mevent_srv_sub *); + +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, u8 a1, u8 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 = 0; + srv->unk_18 = NULL; + srv->unk_24 = sub_81449E0; + srv->unk_20 = sub_814490C; +} + +void sub_8144888(struct mevent_srv_sub * srv, u16 a1, u32 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, u16 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, u16 * 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) +{ + u16 buff[4]; + switch (srv->unk_00) + { + case 0: + if (sub_81448D8(srv->unk_05)) + { + u16 * r4; + sub_81448BC(srv->unk_05, (r4 = buff), sizeof(buff)); + srv->unk_0C = r4[2]; + srv->unk_0A = r4[1]; + if (srv->unk_0C > 0x400) + { + sub_80FA190(); + return FALSE; + } + else if (srv->unk_06 != buff[0]) + { + 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; + + } + + return FALSE; +} |