start porting mevent_server from firered
This commit is contained in:
parent
438521bf21
commit
a455d98385
9 changed files with 150 additions and 125 deletions
|
@ -5,115 +5,6 @@
|
||||||
|
|
||||||
.text
|
.text
|
||||||
|
|
||||||
thumb_func_start mevent_srv_init_wnews
|
|
||||||
mevent_srv_init_wnews: @ 801D07C
|
|
||||||
push {r4,lr}
|
|
||||||
ldr r4, =gUnknown_02022C7C
|
|
||||||
movs r0, 0x60
|
|
||||||
bl AllocZeroed
|
|
||||||
str r0, [r4]
|
|
||||||
ldr r1, =gUnknown_082F298C
|
|
||||||
movs r2, 0
|
|
||||||
movs r3, 0x1
|
|
||||||
bl mevent_srv_init_common
|
|
||||||
pop {r4}
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
.pool
|
|
||||||
thumb_func_end mevent_srv_init_wnews
|
|
||||||
|
|
||||||
thumb_func_start mevent_srv_new_wcard
|
|
||||||
mevent_srv_new_wcard: @ 801D0A0
|
|
||||||
push {r4,lr}
|
|
||||||
ldr r4, =gUnknown_02022C7C
|
|
||||||
movs r0, 0x60
|
|
||||||
bl AllocZeroed
|
|
||||||
str r0, [r4]
|
|
||||||
ldr r1, =gUnknown_082F29EC
|
|
||||||
movs r2, 0
|
|
||||||
movs r3, 0x1
|
|
||||||
bl mevent_srv_init_common
|
|
||||||
pop {r4}
|
|
||||||
pop {r0}
|
|
||||||
bx r0
|
|
||||||
.pool
|
|
||||||
thumb_func_end mevent_srv_new_wcard
|
|
||||||
|
|
||||||
thumb_func_start mevent_srv_common_do_exec
|
|
||||||
mevent_srv_common_do_exec: @ 801D0C4
|
|
||||||
push {r4-r6,lr}
|
|
||||||
adds r6, r0, 0
|
|
||||||
ldr r4, =gUnknown_02022C7C
|
|
||||||
ldr r0, [r4]
|
|
||||||
cmp r0, 0
|
|
||||||
bne _0801D0D8
|
|
||||||
movs r0, 0x3
|
|
||||||
b _0801D0F8
|
|
||||||
.pool
|
|
||||||
_0801D0D8:
|
|
||||||
bl mevent_dispatch_08145600
|
|
||||||
adds r5, r0, 0
|
|
||||||
cmp r5, 0x3
|
|
||||||
bne _0801D0F6
|
|
||||||
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]
|
|
||||||
_0801D0F6:
|
|
||||||
adds r0, r5, 0
|
|
||||||
_0801D0F8:
|
|
||||||
pop {r4-r6}
|
|
||||||
pop {r1}
|
|
||||||
bx r1
|
|
||||||
thumb_func_end mevent_srv_common_do_exec
|
|
||||||
|
|
||||||
thumb_func_start mevent_srv_init_common
|
|
||||||
mevent_srv_init_common: @ 801D100
|
|
||||||
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_801D8D8
|
|
||||||
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
|
thumb_func_start mevent_srv_free_resources
|
||||||
mevent_srv_free_resources: @ 801D158
|
mevent_srv_free_resources: @ 801D158
|
||||||
push {r4,lr}
|
push {r4,lr}
|
||||||
|
@ -517,8 +408,8 @@ _0801D464:
|
||||||
bx r1
|
bx r1
|
||||||
thumb_func_end sub_801D1F0
|
thumb_func_end sub_801D1F0
|
||||||
|
|
||||||
thumb_func_start mevent_dispatch_08145600
|
thumb_func_start mevent_srv_exec_common
|
||||||
mevent_dispatch_08145600: @ 801D46C
|
mevent_srv_exec_common: @ 801D46C
|
||||||
push {lr}
|
push {lr}
|
||||||
ldr r2, =gUnknown_082F2548
|
ldr r2, =gUnknown_082F2548
|
||||||
ldr r1, [r0, 0x8]
|
ldr r1, [r0, 0x8]
|
||||||
|
@ -529,6 +420,6 @@ mevent_dispatch_08145600: @ 801D46C
|
||||||
pop {r1}
|
pop {r1}
|
||||||
bx r1
|
bx r1
|
||||||
.pool
|
.pool
|
||||||
thumb_func_end mevent_dispatch_08145600
|
thumb_func_end mevent_srv_exec_common
|
||||||
|
|
||||||
.align 2, 0 @ don't pad with nop
|
.align 2, 0 @ don't pad with nop
|
||||||
|
|
|
@ -23,8 +23,8 @@ sub_801D8CC: @ 801D8CC
|
||||||
bx r1
|
bx r1
|
||||||
thumb_func_end sub_801D8CC
|
thumb_func_end sub_801D8CC
|
||||||
|
|
||||||
thumb_func_start sub_801D8D8
|
thumb_func_start mevent_srv_sub_init
|
||||||
sub_801D8D8: @ 801D8D8
|
mevent_srv_sub_init: @ 801D8D8
|
||||||
movs r3, 0
|
movs r3, 0
|
||||||
strb r1, [r0, 0x4]
|
strb r1, [r0, 0x4]
|
||||||
strb r2, [r0, 0x5]
|
strb r2, [r0, 0x5]
|
||||||
|
@ -43,7 +43,7 @@ sub_801D8D8: @ 801D8D8
|
||||||
str r1, [r0, 0x20]
|
str r1, [r0, 0x20]
|
||||||
bx lr
|
bx lr
|
||||||
.pool
|
.pool
|
||||||
thumb_func_end sub_801D8D8
|
thumb_func_end mevent_srv_sub_init
|
||||||
|
|
||||||
thumb_func_start sub_801D904
|
thumb_func_start sub_801D904
|
||||||
sub_801D904: @ 801D904
|
sub_801D904: @ 801D904
|
||||||
|
|
|
@ -115,7 +115,7 @@ mevent_srv_ish_init: @ 801D50C
|
||||||
adds r0, r4, 0
|
adds r0, r4, 0
|
||||||
adds r1, r6, 0
|
adds r1, r6, 0
|
||||||
mov r2, r8
|
mov r2, r8
|
||||||
bl sub_801D8D8
|
bl mevent_srv_sub_init
|
||||||
pop {r3}
|
pop {r3}
|
||||||
mov r8, r3
|
mov r8, r3
|
||||||
pop {r4-r6}
|
pop {r4-r6}
|
||||||
|
|
|
@ -242,7 +242,7 @@ gUnknown_082F292C:: @ 82F292C
|
||||||
.byte 0x00, 0x00, 0x00, 0x00
|
.byte 0x00, 0x00, 0x00, 0x00
|
||||||
|
|
||||||
.align 2
|
.align 2
|
||||||
gUnknown_082F298C:: @ 82F298C
|
s_mevent_wonder_news:: @ 82F298C
|
||||||
.byte 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
.byte 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||||
.byte 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00
|
.byte 0x00, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00
|
||||||
.byte 0x20, 0x00, 0x00, 0x00
|
.byte 0x20, 0x00, 0x00, 0x00
|
||||||
|
@ -262,7 +262,7 @@ gUnknown_082F298C:: @ 82F298C
|
||||||
.4byte gUnknown_082F2800
|
.4byte gUnknown_082F2800
|
||||||
|
|
||||||
.align 2
|
.align 2
|
||||||
gUnknown_082F29EC:: @ 82F29EC
|
s_mevent_wonder_card:: @ 82F29EC
|
||||||
.byte 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
.byte 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||||
.byte 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00
|
.byte 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00
|
||||||
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
||||||
|
|
|
@ -1,6 +1,80 @@
|
||||||
#ifndef GUARD_MEVENT_SERVER_H
|
#ifndef GUARD_MEVENT_SERVER_H
|
||||||
#define GUARD_MEVENT_SERVER_H
|
#define GUARD_MEVENT_SERVER_H
|
||||||
|
|
||||||
|
#define ME_SEND_BUF_SIZE 0x400
|
||||||
|
|
||||||
|
struct mevent_srv_sub
|
||||||
|
{
|
||||||
|
s32 seqno;
|
||||||
|
u8 sendPlayerNo;
|
||||||
|
u8 recvPlayerNo;
|
||||||
|
u16 recvIdent;
|
||||||
|
u16 recvCounter;
|
||||||
|
u16 recvCRC;
|
||||||
|
u16 recvSize;
|
||||||
|
u16 sendIdent;
|
||||||
|
u16 sendCounter;
|
||||||
|
u16 sendCRC;
|
||||||
|
u16 sendSize;
|
||||||
|
void * recvBfr;
|
||||||
|
const void * sendBfr;
|
||||||
|
u32 (*recvFunc)(struct mevent_srv_sub *);
|
||||||
|
u32 (*sendFunc)(struct mevent_srv_sub *);
|
||||||
|
};
|
||||||
|
|
||||||
|
struct send_recv_header
|
||||||
|
{
|
||||||
|
u16 ident;
|
||||||
|
u16 crc;
|
||||||
|
u16 size;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct mevent_cmd_ish
|
||||||
|
{
|
||||||
|
u32 instr;
|
||||||
|
u32 parameter;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct mevent_srv_ish
|
||||||
|
{
|
||||||
|
u32 unk_00;
|
||||||
|
u32 param;
|
||||||
|
u32 mainseqno;
|
||||||
|
u32 flag;
|
||||||
|
u32 cmdidx;
|
||||||
|
void * sendBuffer;
|
||||||
|
void * recvBuffer;
|
||||||
|
struct mevent_cmd_ish * cmdBuffer;
|
||||||
|
void * buffer;
|
||||||
|
struct mevent_srv_sub manager;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct mevent_cmd
|
||||||
|
{
|
||||||
|
u32 instr;
|
||||||
|
bool32 flag;
|
||||||
|
void * parameter;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct mevent_srv_common
|
||||||
|
{
|
||||||
|
u32 unk_00;
|
||||||
|
u32 param;
|
||||||
|
u32 mainseqno;
|
||||||
|
u32 cmdidx;
|
||||||
|
const struct mevent_cmd * cmdBuffer;
|
||||||
|
void * recvBuffer;
|
||||||
|
struct MEventBuffer_32E0_Sub * mevent_32e0;
|
||||||
|
struct MEventBuffer_3120_Sub * mevent_3120;
|
||||||
|
struct MEventStruct_Unk1442CC * mevent_unk1442cc;
|
||||||
|
void * sendBuffer1;
|
||||||
|
u32 sendBuffer1Size;
|
||||||
|
void * sendBuffer2;
|
||||||
|
u32 sendBuffer2Size;
|
||||||
|
u32 sendWord;
|
||||||
|
struct mevent_srv_sub manager;
|
||||||
|
};
|
||||||
|
|
||||||
void mevent_srv_new_wcard();
|
void mevent_srv_new_wcard();
|
||||||
void mevent_srv_init_wnews();
|
void mevent_srv_init_wnews();
|
||||||
u32 mevent_srv_common_do_exec(u16 * a0);
|
u32 mevent_srv_common_do_exec(u16 * a0);
|
||||||
|
|
6
include/mevent_server_helpers.h
Normal file
6
include/mevent_server_helpers.h
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
#ifndef GUARD_MEVENT_SERVER_HELPERS_H
|
||||||
|
#define GUARD_MEVENT_SERVER_HELPERS_H
|
||||||
|
|
||||||
|
void mevent_srv_sub_init(struct mevent_srv_sub *, u32, u32);
|
||||||
|
|
||||||
|
#endif //GUARD_MEVENT_SERVER_HELPERS_H
|
|
@ -60,6 +60,7 @@ SECTIONS {
|
||||||
src/union_room_battle.o(.text);
|
src/union_room_battle.o(.text);
|
||||||
src/mevent2.o(.text);
|
src/mevent2.o(.text);
|
||||||
src/mevent_801BAAC.o(.text);
|
src/mevent_801BAAC.o(.text);
|
||||||
|
src/mevent_server.o(.text);
|
||||||
asm/mevent_server.o(.text);
|
asm/mevent_server.o(.text);
|
||||||
asm/mevent_server_ish.o(.text);
|
asm/mevent_server_ish.o(.text);
|
||||||
asm/mevent_server_helpers.o(.text);
|
asm/mevent_server_helpers.o(.text);
|
||||||
|
@ -416,6 +417,7 @@ SECTIONS {
|
||||||
src/union_room_battle.o(.rodata);
|
src/union_room_battle.o(.rodata);
|
||||||
src/mevent2.o(.rodata);
|
src/mevent2.o(.rodata);
|
||||||
src/mevent_801BAAC.o(.rodata);
|
src/mevent_801BAAC.o(.rodata);
|
||||||
|
src/mevent_server.o(.rodata);
|
||||||
data/mevent_server.o(.rodata);
|
data/mevent_server.o(.rodata);
|
||||||
src/union_room_chat.o(.rodata);
|
src/union_room_chat.o(.rodata);
|
||||||
data/union_room_chat.o(.rodata);
|
data/union_room_chat.o(.rodata);
|
||||||
|
|
56
src/mevent_server.c
Normal file
56
src/mevent_server.c
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
#include "global.h"
|
||||||
|
#include "alloc.h"
|
||||||
|
#include "mevent.h"
|
||||||
|
#include "mevent_server.h"
|
||||||
|
#include "mevent_server_helpers.h"
|
||||||
|
|
||||||
|
EWRAM_DATA struct mevent_srv_common * s_mevent_srv_common_ptr = NULL;
|
||||||
|
EWRAM_DATA struct mevent_srv_ish * s_mevent_srv_ish_ptr = NULL;
|
||||||
|
|
||||||
|
static void mevent_srv_init_common(struct mevent_srv_common *, const void *, u32, u32);
|
||||||
|
u32 mevent_srv_exec_common(struct mevent_srv_common *);
|
||||||
|
u32 mevent_srv_free_resources(struct mevent_srv_common *);
|
||||||
|
|
||||||
|
extern const struct mevent_cmd s_mevent_wonder_news[];
|
||||||
|
extern const struct mevent_cmd s_mevent_wonder_card[];
|
||||||
|
|
||||||
|
void mevent_srv_init_wnews(void)
|
||||||
|
{
|
||||||
|
s_mevent_srv_common_ptr = AllocZeroed(sizeof(struct mevent_srv_common));
|
||||||
|
mevent_srv_init_common(s_mevent_srv_common_ptr, s_mevent_wonder_news, 0, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
void mevent_srv_new_wcard(void)
|
||||||
|
{
|
||||||
|
s_mevent_srv_common_ptr = AllocZeroed(sizeof(struct mevent_srv_common));
|
||||||
|
mevent_srv_init_common(s_mevent_srv_common_ptr, s_mevent_wonder_card, 0, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
u32 mevent_srv_common_do_exec(u16 * a0)
|
||||||
|
{
|
||||||
|
u32 result;
|
||||||
|
if (s_mevent_srv_common_ptr == NULL)
|
||||||
|
return 3;
|
||||||
|
result = mevent_srv_exec_common(s_mevent_srv_common_ptr);
|
||||||
|
if (result == 3)
|
||||||
|
{
|
||||||
|
*a0 = s_mevent_srv_common_ptr->param;
|
||||||
|
mevent_srv_free_resources(s_mevent_srv_common_ptr);
|
||||||
|
Free(s_mevent_srv_common_ptr);
|
||||||
|
s_mevent_srv_common_ptr = NULL;
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void mevent_srv_init_common(struct mevent_srv_common * svr, const void * cmdBuffer, u32 sendPlayerNo, u32 recvPlayerNo)
|
||||||
|
{
|
||||||
|
svr->unk_00 = 0;
|
||||||
|
svr->mainseqno = 0;
|
||||||
|
svr->mevent_32e0 = AllocZeroed(sizeof(struct MEventBuffer_32E0_Sub));
|
||||||
|
svr->mevent_3120 = AllocZeroed(sizeof(struct MEventBuffer_3120_Sub));
|
||||||
|
svr->recvBuffer = AllocZeroed(ME_SEND_BUF_SIZE);
|
||||||
|
svr->mevent_unk1442cc = AllocZeroed(sizeof(struct MEventStruct_Unk1442CC));
|
||||||
|
svr->cmdBuffer = cmdBuffer;
|
||||||
|
svr->cmdidx = 0;
|
||||||
|
mevent_srv_sub_init(&svr->manager, sendPlayerNo, recvPlayerNo);
|
||||||
|
}
|
|
@ -12,14 +12,10 @@
|
||||||
.include "src/union_room_battle.o"
|
.include "src/union_room_battle.o"
|
||||||
.include "src/mevent2.o"
|
.include "src/mevent2.o"
|
||||||
.include "src/mevent_801BAAC.o"
|
.include "src/mevent_801BAAC.o"
|
||||||
|
.include "src/mevent_server.o"
|
||||||
|
|
||||||
@ mevent_server
|
@ union_room_chat
|
||||||
gUnknown_02022C7C: @ 2022C7C
|
.align 2
|
||||||
.space 0x4
|
|
||||||
|
|
||||||
s_mevent_srv_ish_ptr: @ 2022C80
|
|
||||||
.space 0x4
|
|
||||||
|
|
||||||
gUnknown_02022C84: @ 2022C84
|
gUnknown_02022C84: @ 2022C84
|
||||||
.space 0x4
|
.space 0x4
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue