summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/battle_script_commands.c8
-rw-r--r--src/link_rfu.c2
-rw-r--r--src/menu_specialized.c441
-rwxr-xr-xsrc/mevent2.c94
-rw-r--r--src/mevent_801BAAC.c8
-rw-r--r--src/mevent_client.c291
-rw-r--r--src/mevent_scripts.c191
-rw-r--r--src/mevent_server.c295
-rw-r--r--src/mevent_server_helpers.c211
-rw-r--r--src/mystery_gift.c56
-rw-r--r--src/naming_screen.c10
-rw-r--r--src/overworld.c2
-rw-r--r--src/pokemon.c2
-rw-r--r--src/scrcmd.c6
-rw-r--r--src/script.c6
-rw-r--r--src/util.c4
16 files changed, 1527 insertions, 100 deletions
diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c
index 0a0c34ad2..d1d8d87ac 100644
--- a/src/battle_script_commands.c
+++ b/src/battle_script_commands.c
@@ -6295,16 +6295,16 @@ static void sub_804F100(void)
{
struct StatsArray currentStats;
- GetMonLevelUpWindowStats(&gPlayerParty[gBattleStruct->expGetterMonId], &currentStats);
- DrawLevelUpWindowPg1(0xD, gBattleResources->statsBeforeLvlUp, &currentStats, 0xE, 0xD, 0xF);
+ GetMonLevelUpWindowStats(&gPlayerParty[gBattleStruct->expGetterMonId], (u16*) &currentStats);
+ DrawLevelUpWindowPg1(0xD, (u16*) gBattleResources->statsBeforeLvlUp,(u16*) &currentStats, 0xE, 0xD, 0xF);
}
static void sub_804F144(void)
{
struct StatsArray currentStats;
- GetMonLevelUpWindowStats(&gPlayerParty[gBattleStruct->expGetterMonId], &currentStats);
- DrawLevelUpWindowPg2(0xD, &currentStats, 0xE, 0xD, 0xF);
+ GetMonLevelUpWindowStats(&gPlayerParty[gBattleStruct->expGetterMonId], (u16*) &currentStats);
+ DrawLevelUpWindowPg2(0xD, (u16*) &currentStats, 0xE, 0xD, 0xF);
}
static void sub_804F17C(void)
diff --git a/src/link_rfu.c b/src/link_rfu.c
index 1e4c9c7e6..7c55df783 100644
--- a/src/link_rfu.c
+++ b/src/link_rfu.c
@@ -3674,7 +3674,7 @@ void sub_8010168(void)
gUnknown_03005000.unk_00 = sub_8010148;
}
-void sub_8010198(void)
+void LinkRfu_FatalError(void)
{
sub_800D630();
gUnknown_03005000.unk_ce4 = 1;
diff --git a/src/menu_specialized.c b/src/menu_specialized.c
index f21f4e51a..cbdef3d39 100644
--- a/src/menu_specialized.c
+++ b/src/menu_specialized.c
@@ -28,6 +28,7 @@
#include "gba/io_reg.h"
extern const struct CompressedSpriteSheet gMonFrontPicTable[];
+extern const u8 *gUnknown_08625B54[];
EWRAM_DATA static u8 sUnknown_0203CF48[3] = {0};
EWRAM_DATA static struct ListMenuItem *sUnknown_0203CF4C = NULL;
@@ -259,7 +260,7 @@ static void sub_81D1D44(u8 windowId, s32 itemId, u8 y)
u8 buffer[30];
u16 length;
- if (itemId == LIST_CANCEL)
+ if (itemId == LIST_CANCEL)
return;
StringCopy(buffer, gSaveBlock1Ptr->mail[6 + itemId].playerName);
@@ -1639,3 +1640,441 @@ static void sub_81D35E8(struct Sprite *sprite)
id = gSprites[id].data[5];
}
}
+
+
+#ifdef NONMATCHING
+void DrawLevelUpWindowPg1(u16 arg0, u16 *statStoreLocation1, u16 *statStoreLocation2, u8 arg3, u8 arg4, u8 arg5)
+{
+ u16 i;
+ s16 array[6];
+ u8 *text;
+ u8 text2;
+ s16 *statVal;
+ s32 var;
+ u8 padding;
+ s32 var3;
+ u8 color[11];
+
+ FillWindowPixelBuffer(arg0, PIXEL_FILL(arg3));
+
+ array[0] = statStoreLocation2[STAT_HP] - statStoreLocation1[STAT_HP];
+ array[1] = statStoreLocation2[STAT_ATK] - statStoreLocation1[STAT_ATK];
+ array[2] = statStoreLocation2[STAT_DEF] - statStoreLocation1[STAT_DEF];
+ array[3] = statStoreLocation2[STAT_SPATK] - statStoreLocation1[STAT_SPATK];
+ array[4] = statStoreLocation2[STAT_SPDEF] - statStoreLocation1[STAT_SPDEF];
+ array[5] = statStoreLocation2[STAT_SPEED] - statStoreLocation1[STAT_SPEED];
+
+ color[0] = arg3;
+ color[1] = arg4;
+ color[2] = arg5;
+
+ for(i = 0; i <= 5; i++)
+ {
+ AddTextPrinterParameterized3(arg0,
+ 1,
+ 0,
+ 15 * i,
+ color,
+ TEXT_SPEED_FF,
+ gUnknown_08625B54[i]);
+ statVal = &array[i];
+ text = array[i] >= 0 ? (u8 *) gText_UnkCtrlF904 : (u8 *) gText_Dash;//Plus sign for stat gain, dash for none maybe
+ StringCopy(&text2, text);
+ AddTextPrinterParameterized3(arg0,
+ 1,
+ 56,
+ 15 * i,
+ color,
+ TEXT_SPEED_FF,
+ &text2);
+ var3 = *statVal;
+ var = var3;
+
+ if(var3 < 0)
+ {
+ var = -var3;
+ }
+
+ padding = 12; //amount of padding
+
+ if(var <= 9)
+ {
+ padding = 18; //more padding for single digit numbers
+ }
+
+ if(var3 < 0)
+ {
+ var3 = -var3;
+ }
+
+ ConvertIntToDecimalStringN(&text2, var3, STR_CONV_MODE_LEFT_ALIGN, 2);
+ AddTextPrinterParameterized3(arg0,
+ 1,
+ padding + 56,
+ 15 * i,
+ color,
+ TEXT_SPEED_FF,
+ &text2);
+ }
+}
+#else
+NAKED
+void DrawLevelUpWindowPg1(u16 arg0, u16 *statStoreLocation1, u16 *statStoreLocation2, u8 arg3, u8 arg4, u8 arg5)
+{
+ asm(".syntax unified\n\
+push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x2C\n\
+ mov r8, r0\n\
+ adds r6, r1, 0\n\
+ adds r5, r2, 0\n\
+ adds r4, r3, 0\n\
+ ldr r3, [sp, 0x4C]\n\
+ ldr r0, [sp, 0x50]\n\
+ mov r9, r0\n\
+ lsls r4, 24\n\
+ lsrs r4, 24\n\
+ lsls r3, 24\n\
+ lsrs r3, 24\n\
+ mov r1, r9\n\
+ lsls r1, 24\n\
+ lsrs r1, 24\n\
+ mov r9, r1\n\
+ mov r0, r8\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r8, r0\n\
+ lsls r1, r4, 4\n\
+ orrs r1, r4\n\
+ lsls r1, 24\n\
+ lsrs r1, 24\n\
+ str r3, [sp, 0x28]\n\
+ bl FillWindowPixelBuffer\n\
+ add r2, sp, 0xC\n\
+ ldrh r0, [r5]\n\
+ ldrh r1, [r6]\n\
+ subs r0, r1\n\
+ strh r0, [r2]\n\
+ ldrh r0, [r5, 0x2]\n\
+ ldrh r1, [r6, 0x2]\n\
+ subs r0, r1\n\
+ strh r0, [r2, 0x2]\n\
+ ldrh r0, [r5, 0x4]\n\
+ ldrh r1, [r6, 0x4]\n\
+ subs r0, r1\n\
+ strh r0, [r2, 0x4]\n\
+ ldrh r0, [r5, 0x8]\n\
+ ldrh r1, [r6, 0x8]\n\
+ subs r0, r1\n\
+ strh r0, [r2, 0x6]\n\
+ ldrh r0, [r5, 0xA]\n\
+ ldrh r1, [r6, 0xA]\n\
+ subs r0, r1\n\
+ strh r0, [r2, 0x8]\n\
+ ldrh r0, [r5, 0x6]\n\
+ ldrh r1, [r6, 0x6]\n\
+ subs r0, r1\n\
+ strh r0, [r2, 0xA]\n\
+ add r0, sp, 0x24\n\
+ strb r4, [r0]\n\
+ ldr r3, [sp, 0x28]\n\
+ strb r3, [r0, 0x1]\n\
+ mov r1, r9\n\
+ strb r1, [r0, 0x2]\n\
+ movs r7, 0\n\
+ mov r10, r0\n\
+ movs r0, 0x1\n\
+ negs r0, r0\n\
+ mov r9, r0\n\
+ add r6, sp, 0x18\n\
+_081D36CA:\n\
+ lsls r0, r7, 4\n\
+ subs r0, r7\n\
+ lsls r0, 24\n\
+ lsrs r5, r0, 24\n\
+ mov r1, r10\n\
+ str r1, [sp]\n\
+ mov r0, r9\n\
+ str r0, [sp, 0x4]\n\
+ ldr r1, =gUnknown_08625B54\n\
+ lsls r0, r7, 2\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ str r0, [sp, 0x8]\n\
+ mov r0, r8\n\
+ movs r1, 0x1\n\
+ movs r2, 0\n\
+ adds r3, r5, 0\n\
+ bl AddTextPrinterParameterized3\n\
+ lsls r0, r7, 1\n\
+ mov r4, sp\n\
+ adds r4, r0\n\
+ adds r4, 0xC\n\
+ movs r1, 0\n\
+ ldrsh r0, [r4, r1]\n\
+ ldr r1, =gText_Dash\n\
+ cmp r0, 0\n\
+ blt _081D3704\n\
+ ldr r1, =gText_UnkCtrlF904\n\
+_081D3704:\n\
+ adds r0, r6, 0\n\
+ bl StringCopy\n\
+ mov r0, r10\n\
+ str r0, [sp]\n\
+ mov r1, r9\n\
+ str r1, [sp, 0x4]\n\
+ str r6, [sp, 0x8]\n\
+ mov r0, r8\n\
+ movs r1, 0x1\n\
+ movs r2, 0x38\n\
+ adds r3, r5, 0\n\
+ bl AddTextPrinterParameterized3\n\
+ movs r0, 0\n\
+ ldrsh r1, [r4, r0]\n\
+ adds r0, r1, 0\n\
+ cmp r1, 0\n\
+ bge _081D372C\n\
+ negs r0, r1\n\
+_081D372C:\n\
+ movs r4, 0xC\n\
+ cmp r0, 0x9\n\
+ bgt _081D3734\n\
+ movs r4, 0x12\n\
+_081D3734:\n\
+ cmp r1, 0\n\
+ bge _081D373A\n\
+ negs r1, r1\n\
+_081D373A:\n\
+ adds r0, r6, 0\n\
+ movs r2, 0\n\
+ movs r3, 0x2\n\
+ bl ConvertIntToDecimalStringN\n\
+ adds r2, r4, 0\n\
+ adds r2, 0x38\n\
+ mov r1, r10\n\
+ str r1, [sp]\n\
+ mov r0, r9\n\
+ str r0, [sp, 0x4]\n\
+ str r6, [sp, 0x8]\n\
+ mov r0, r8\n\
+ movs r1, 0x1\n\
+ adds r3, r5, 0\n\
+ bl AddTextPrinterParameterized3\n\
+ adds r0, r7, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r7, r0, 16\n\
+ cmp r7, 0x5\n\
+ bls _081D36CA\n\
+ add sp, 0x2C\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .pool\n\
+ .syntax divided");
+}
+#endif // NONMATCHING
+
+#ifdef NONMATCHING
+void DrawLevelUpWindowPg2(u16 arg0, u16 *statStoreLocation1, u8 arg2, u8 arg3, u8 arg4)
+{
+ s32 i;
+ s16 *var;
+ s32 numDigits;
+ u8 text;
+ s16 array[6];
+ u8 color[11];
+
+ FillWindowPixelBuffer(arg0, PIXEL_FILL(arg2));
+
+ array[0] = statStoreLocation1[STAT_HP];
+ array[1] = statStoreLocation1[STAT_ATK];
+ array[2] = statStoreLocation1[STAT_DEF];
+ array[3] = statStoreLocation1[STAT_SPATK];
+ array[4] = statStoreLocation1[STAT_SPDEF];
+ array[5] = statStoreLocation1[STAT_SPEED];
+
+ color[0] = arg2;
+ color[1] = arg3;
+ color[2] = arg4;
+
+ for(i = 0; i <= 5; i++)
+ {
+ numDigits = 3; //3 digit stat
+ if(array[i] <= 99)
+ {
+ numDigits = 1; //1 digit stat
+ if(array[i] > 9)
+ {
+ numDigits = 2; //2 digit stat
+ }
+ }
+ ConvertIntToDecimalStringN(&text, array[i], STR_CONV_MODE_LEFT_ALIGN, numDigits);
+ AddTextPrinterParameterized3(arg0,
+ 1,
+ 0,
+ 15 * i,
+ color,
+ TEXT_SPEED_FF,
+ gUnknown_08625B54[i]);
+ AddTextPrinterParameterized3(arg0,
+ 1,
+ 6 * (4 - numDigits) + 56,
+ 15 * i,
+ color,
+ TEXT_SPEED_FF,
+ &text);
+ }
+}
+#else
+NAKED
+void DrawLevelUpWindowPg2(u16 arg0, u16 *statStoreLocation1, u8 arg2, u8 arg3, u8 arg4)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x2C\n\
+ mov r8, r0\n\
+ adds r5, r1, 0\n\
+ adds r4, r2, 0\n\
+ adds r6, r3, 0\n\
+ ldr r2, [sp, 0x4C]\n\
+ lsls r4, 24\n\
+ lsrs r4, 24\n\
+ lsls r6, 24\n\
+ lsrs r6, 24\n\
+ lsls r2, 24\n\
+ lsrs r2, 24\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r8, r0\n\
+ lsls r1, r4, 4\n\
+ orrs r1, r4\n\
+ lsls r1, 24\n\
+ lsrs r1, 24\n\
+ str r2, [sp, 0x28]\n\
+ bl FillWindowPixelBuffer\n\
+ add r1, sp, 0xC\n\
+ ldrh r0, [r5]\n\
+ strh r0, [r1]\n\
+ ldrh r0, [r5, 0x2]\n\
+ strh r0, [r1, 0x2]\n\
+ ldrh r0, [r5, 0x4]\n\
+ strh r0, [r1, 0x4]\n\
+ ldrh r0, [r5, 0x8]\n\
+ strh r0, [r1, 0x6]\n\
+ ldrh r0, [r5, 0xA]\n\
+ strh r0, [r1, 0x8]\n\
+ ldrh r0, [r5, 0x6]\n\
+ strh r0, [r1, 0xA]\n\
+ add r0, sp, 0x24\n\
+ strb r4, [r0]\n\
+ strb r6, [r0, 0x1]\n\
+ ldr r2, [sp, 0x28]\n\
+ strb r2, [r0, 0x2]\n\
+ movs r6, 0\n\
+ add r1, sp, 0x18\n\
+ mov r9, r1\n\
+ mov r7, r8\n\
+ mov r10, r0\n\
+ movs r2, 0x1\n\
+ negs r2, r2\n\
+ mov r8, r2\n\
+_081D37EE:\n\
+ lsls r1, r6, 1\n\
+ mov r0, sp\n\
+ adds r0, r1\n\
+ adds r0, 0xC\n\
+ movs r2, 0\n\
+ ldrsh r0, [r0, r2]\n\
+ movs r4, 0x3\n\
+ cmp r0, 0x63\n\
+ bgt _081D3808\n\
+ movs r4, 0x1\n\
+ cmp r0, 0x9\n\
+ ble _081D3808\n\
+ movs r4, 0x2\n\
+_081D3808:\n\
+ mov r0, sp\n\
+ adds r0, r1\n\
+ adds r0, 0xC\n\
+ movs r2, 0\n\
+ ldrsh r1, [r0, r2]\n\
+ mov r0, r9\n\
+ movs r2, 0\n\
+ adds r3, r4, 0\n\
+ bl ConvertIntToDecimalStringN\n\
+ movs r0, 0x4\n\
+ subs r0, r4\n\
+ lsls r4, r0, 1\n\
+ adds r4, r0\n\
+ lsls r4, 17\n\
+ lsrs r4, 16\n\
+ lsls r5, r6, 4\n\
+ subs r5, r6\n\
+ lsls r5, 24\n\
+ lsrs r5, 24\n\
+ mov r0, r10\n\
+ str r0, [sp]\n\
+ mov r1, r8\n\
+ str r1, [sp, 0x4]\n\
+ ldr r1, =gUnknown_08625B54\n\
+ lsls r0, r6, 2\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ str r0, [sp, 0x8]\n\
+ adds r0, r7, 0\n\
+ movs r1, 0x1\n\
+ movs r2, 0\n\
+ adds r3, r5, 0\n\
+ bl AddTextPrinterParameterized3\n\
+ adds r4, 0x38\n\
+ lsls r4, 24\n\
+ lsrs r4, 24\n\
+ mov r2, r10\n\
+ str r2, [sp]\n\
+ mov r0, r8\n\
+ str r0, [sp, 0x4]\n\
+ mov r1, r9\n\
+ str r1, [sp, 0x8]\n\
+ adds r0, r7, 0\n\
+ movs r1, 0x1\n\
+ adds r2, r4, 0\n\
+ adds r3, r5, 0\n\
+ bl AddTextPrinterParameterized3\n\
+ adds r0, r6, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r6, r0, 16\n\
+ cmp r6, 0x5\n\
+ bls _081D37EE\n\
+ add sp, 0x2C\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .pool\n\
+ .syntax divided");
+}
+#endif // NONMATCHING
+
+void GetMonLevelUpWindowStats(struct Pokemon *mon, u16 *statStoreLocation)
+{
+ statStoreLocation[STAT_HP] = GetMonData(mon, MON_DATA_MAX_HP);
+ statStoreLocation[STAT_ATK] = GetMonData(mon, MON_DATA_ATK);
+ statStoreLocation[STAT_DEF] = GetMonData(mon, MON_DATA_DEF);
+ statStoreLocation[STAT_SPEED] = GetMonData(mon, MON_DATA_SPEED);
+ statStoreLocation[STAT_SPATK] = GetMonData(mon, MON_DATA_SPATK);
+ statStoreLocation[STAT_SPDEF] = GetMonData(mon, MON_DATA_SPDEF);
+}
diff --git a/src/mevent2.c b/src/mevent2.c
index 4174c4055..f36e5d06b 100755
--- a/src/mevent2.c
+++ b/src/mevent2.c
@@ -15,8 +15,8 @@ static EWRAM_DATA bool32 gUnknown_02022C70 = FALSE;
static void sub_801B180(void);
static void s_DestroyWonderNews(void);
-static bool32 sub_801B114(const struct MEventBuffer_3120_Sub *data);
-static bool32 sub_801B2CC(const struct MEventBuffer_32E0_Sub *data);
+static bool32 sub_801B114(const struct WonderNews *data);
+static bool32 sub_801B2CC(const struct WonderCard *data);
static void sub_801B330(void);
static void sub_801B368(void);
static void sub_801B9F8(void);
@@ -29,14 +29,14 @@ void sub_801AFD8(void)
sub_811F8BC();
}
-struct MEventBuffer_3120_Sub *sav1_get_mevent_buffer_0(void)
+struct WonderNews *GetSavedWonderNews(void)
{
- return &gSaveBlock1Ptr->unk_322C.buffer_000.data;
+ return &gSaveBlock1Ptr->unk_322C.wonderNews.data;
}
-struct MEventBuffer_32E0_Sub *sav1_get_mevent_buffer_1(void)
+struct WonderCard *GetSavedWonderCard(void)
{
- return &gSaveBlock1Ptr->unk_322C.buffer_1c0.data;
+ return &gSaveBlock1Ptr->unk_322C.wonderCard.data;
}
struct MEventBuffer_3430_Sub *sav1_get_mevent_buffer_2(void)
@@ -59,28 +59,28 @@ void DestroyWonderNews(void)
s_DestroyWonderNews();
}
-bool32 sub_801B078(const struct MEventBuffer_3120_Sub *src)
+bool32 sub_801B078(const struct WonderNews *src)
{
if (!sub_801B114(src))
return FALSE;
s_DestroyWonderNews();
- gSaveBlock1Ptr->unk_322C.buffer_000.data = *src;
- gSaveBlock1Ptr->unk_322C.buffer_000.crc = CalcCRC16WithTable((void *)&gSaveBlock1Ptr->unk_322C.buffer_000.data, sizeof(struct MEventBuffer_3120_Sub));
+ gSaveBlock1Ptr->unk_322C.wonderNews.data = *src;
+ gSaveBlock1Ptr->unk_322C.wonderNews.crc = CalcCRC16WithTable((void *)&gSaveBlock1Ptr->unk_322C.wonderNews.data, sizeof(struct WonderNews));
return TRUE;
}
bool32 ValidateReceivedWonderNews(void)
{
- if (CalcCRC16WithTable((void *)&gSaveBlock1Ptr->unk_322C.buffer_000.data, sizeof(struct MEventBuffer_3120_Sub)) != gSaveBlock1Ptr->unk_322C.buffer_000.crc)
+ if (CalcCRC16WithTable((void *)&gSaveBlock1Ptr->unk_322C.wonderNews.data, sizeof(struct WonderNews)) != gSaveBlock1Ptr->unk_322C.wonderNews.crc)
return FALSE;
- if (!sub_801B114(&gSaveBlock1Ptr->unk_322C.buffer_000.data))
+ if (!sub_801B114(&gSaveBlock1Ptr->unk_322C.wonderNews.data))
return FALSE;
return TRUE;
}
-static bool32 sub_801B114(const struct MEventBuffer_3120_Sub *data)
+static bool32 sub_801B114(const struct WonderNews *data)
{
if (data->unk_00 == 0)
return FALSE;
@@ -90,7 +90,7 @@ static bool32 sub_801B114(const struct MEventBuffer_3120_Sub *data)
bool32 WonderNews_Test_Unk_02(void)
{
- const struct MEventBuffer_3120_Sub *data = &gSaveBlock1Ptr->unk_322C.buffer_000.data;
+ const struct WonderNews *data = &gSaveBlock1Ptr->unk_322C.wonderNews.data;
if (data->unk_02 == 0)
return FALSE;
@@ -99,8 +99,8 @@ bool32 WonderNews_Test_Unk_02(void)
static void s_DestroyWonderNews(void)
{
- CpuFill32(0, sav1_get_mevent_buffer_0(), sizeof(gSaveBlock1Ptr->unk_322C.buffer_000.data));
- gSaveBlock1Ptr->unk_322C.buffer_000.crc = 0;
+ CpuFill32(0, GetSavedWonderNews(), sizeof(gSaveBlock1Ptr->unk_322C.wonderNews.data));
+ gSaveBlock1Ptr->unk_322C.wonderNews.crc = 0;
}
static void sub_801B180(void)
@@ -111,12 +111,12 @@ static void sub_801B180(void)
bool32 sub_801B1A4(const u8 *src)
{
- const u8 *r5 = (const u8 *)&gSaveBlock1Ptr->unk_322C.buffer_000.data;
+ const u8 *r5 = (const u8 *)&gSaveBlock1Ptr->unk_322C.wonderNews.data;
u32 i;
if (!ValidateReceivedWonderNews())
return FALSE;
- for (i = 0; i < sizeof(struct MEventBuffer_3120_Sub); i++)
+ for (i = 0; i < sizeof(struct WonderNews); i++)
{
if (r5[i] != src[i])
return FALSE;
@@ -136,35 +136,35 @@ void DestroyWonderCard(void)
ClearEReaderTrainer(&gSaveBlock2Ptr->frontier.ereaderTrainer);
}
-bool32 sub_801B21C(const struct MEventBuffer_32E0_Sub *data)
+bool32 sub_801B21C(const struct WonderCard *data)
{
struct MEventBuffer_3430_Sub *r2;
- struct MEventBuffer_32E0_Sub *r1;
+ struct WonderCard *r1;
if (!sub_801B2CC(data))
return FALSE;
DestroyWonderCard();
- memcpy(&gSaveBlock1Ptr->unk_322C.buffer_1c0.data, data, sizeof(struct MEventBuffer_32E0_Sub));
- gSaveBlock1Ptr->unk_322C.buffer_1c0.crc = CalcCRC16WithTable((void *)&gSaveBlock1Ptr->unk_322C.buffer_1c0.data, sizeof(struct MEventBuffer_32E0_Sub));
+ memcpy(&gSaveBlock1Ptr->unk_322C.wonderCard.data, data, sizeof(struct WonderCard));
+ gSaveBlock1Ptr->unk_322C.wonderCard.crc = CalcCRC16WithTable((void *)&gSaveBlock1Ptr->unk_322C.wonderCard.data, sizeof(struct WonderCard));
r2 = &gSaveBlock1Ptr->unk_322C.buffer_310.data;
- r1 = &gSaveBlock1Ptr->unk_322C.buffer_1c0.data;
+ r1 = &gSaveBlock1Ptr->unk_322C.wonderCard.data;
r2->unk_06 = r1->unk_02;
return TRUE;
}
bool32 ValidateReceivedWonderCard(void)
{
- if (gSaveBlock1Ptr->unk_322C.buffer_1c0.crc != CalcCRC16WithTable((void *)&gSaveBlock1Ptr->unk_322C.buffer_1c0.data, sizeof(struct MEventBuffer_32E0_Sub)))
+ if (gSaveBlock1Ptr->unk_322C.wonderCard.crc != CalcCRC16WithTable((void *)&gSaveBlock1Ptr->unk_322C.wonderCard.data, sizeof(struct WonderCard)))
return FALSE;
- if (!sub_801B2CC(&gSaveBlock1Ptr->unk_322C.buffer_1c0.data))
+ if (!sub_801B2CC(&gSaveBlock1Ptr->unk_322C.wonderCard.data))
return FALSE;
- if (!sub_80991F8())
+ if (!ValidateSavedRamScript())
return FALSE;
return TRUE;
}
-static bool32 sub_801B2CC(const struct MEventBuffer_32E0_Sub *data)
+static bool32 sub_801B2CC(const struct WonderCard *data)
{
if (data->unk_00 == 0)
return FALSE;
@@ -182,7 +182,7 @@ static bool32 sub_801B2CC(const struct MEventBuffer_32E0_Sub *data)
bool32 WonderCard_Test_Unk_08_6(void)
{
- const struct MEventBuffer_32E0_Sub *data = &gSaveBlock1Ptr->unk_322C.buffer_1c0.data;
+ const struct WonderCard *data = &gSaveBlock1Ptr->unk_322C.wonderCard.data;
if (data->unk_08_6 == 0)
return FALSE;
@@ -191,8 +191,8 @@ bool32 WonderCard_Test_Unk_08_6(void)
static void sub_801B330(void)
{
- CpuFill32(0, &gSaveBlock1Ptr->unk_322C.buffer_1c0.data, sizeof(struct MEventBuffer_32E0_Sub));
- gSaveBlock1Ptr->unk_322C.buffer_1c0.crc = 0;
+ CpuFill32(0, &gSaveBlock1Ptr->unk_322C.wonderCard.data, sizeof(struct WonderCard));
+ gSaveBlock1Ptr->unk_322C.wonderCard.crc = 0;
}
static void sub_801B368(void)
@@ -204,12 +204,12 @@ static void sub_801B368(void)
u16 GetWonderCardFlagID(void)
{
if (ValidateReceivedWonderCard())
- return gSaveBlock1Ptr->unk_322C.buffer_1c0.data.unk_00;
+ return gSaveBlock1Ptr->unk_322C.wonderCard.data.unk_00;
return 0;
}
-void sub_801B3C0(struct MEventBuffer_32E0_Sub *buffer)
+void WonderCard_ResetInternalReceivedFlag(struct WonderCard *buffer)
{
if (buffer->unk_08_6 == 1)
buffer->unk_08_6 = 0;
@@ -299,11 +299,11 @@ static bool32 sub_801B4A4(const u16 *data)
static int sub_801B4CC(void)
{
- struct MEventBuffer_32E0_Sub *data;
+ struct WonderCard *data;
if (!ValidateReceivedWonderCard())
return 0;
- data = &gSaveBlock1Ptr->unk_322C.buffer_1c0.data;
+ data = &gSaveBlock1Ptr->unk_322C.wonderCard.data;
if (data->unk_08_0 != 1)
return 0;
@@ -312,7 +312,7 @@ static int sub_801B4CC(void)
bool32 sub_801B508(const u16 *data)
{
- struct MEventBuffer_32E0_Sub *buffer = &gSaveBlock1Ptr->unk_322C.buffer_1c0.data;
+ struct WonderCard *buffer = &gSaveBlock1Ptr->unk_322C.wonderCard.data;
int size = buffer->unk_09;
int i;
if (!sub_801B4A4(data))
@@ -355,9 +355,9 @@ void sub_801B580(struct MEventStruct_Unk1442CC *data, bool32 a1)
if (ValidateReceivedWonderCard())
{
- data->unk_14 = sav1_get_mevent_buffer_1()->unk_00;
+ data->unk_14 = GetSavedWonderCard()->unk_00;
data->unk_20 = *sav1_get_mevent_buffer_2();
- data->unk_44 = sav1_get_mevent_buffer_1()->unk_09;
+ data->unk_44 = GetSavedWonderCard()->unk_09;
}
else
{
@@ -399,7 +399,7 @@ bool32 sub_801B6A0(const struct MEventStruct_Unk1442CC *data, bool32 a1)
return TRUE;
}
-u32 sub_801B6EC(const u16 *a0, const struct MEventStruct_Unk1442CC *a1, void *unused)
+u32 sub_801B6EC(const u16 *a0, const struct MEventStruct_Unk1442CC *a1, const void *unused)
{
if (a1->unk_14 == 0)
return 0;
@@ -410,7 +410,7 @@ u32 sub_801B6EC(const u16 *a0, const struct MEventStruct_Unk1442CC *a1, void *un
return 2;
}
-u32 sub_801B708(const u16 *a0, const struct MEventStruct_Unk1442CC *a1, void *unused)
+u32 sub_801B708(const u16 *a0, const struct MEventStruct_Unk1442CC *a1, const void *unused)
{
int r4 = a1->unk_44 - sub_801B438(&a1->unk_20, a1->unk_44);
if (r4 == 0)
@@ -422,7 +422,7 @@ u32 sub_801B708(const u16 *a0, const struct MEventStruct_Unk1442CC *a1, void *un
return 2;
}
-bool32 sub_801B748(const struct MEventStruct_Unk1442CC *a0, const u16 *a1)
+bool32 MEventStruct_Unk1442CC_CompareField_unk_16(const struct MEventStruct_Unk1442CC *a0, const u16 *a1)
{
int i;
for (i = 0; i < 4; i++)
@@ -439,7 +439,7 @@ static int sub_801B770(const struct MEventStruct_Unk1442CC *a0)
return sub_801B438(&a0->unk_20, a0->unk_44);
}
-u16 sub_801B784(const struct MEventStruct_Unk1442CC *a0, u32 command)
+u16 MEventStruct_Unk1442CC_GetValueNFrom_unk_20(const struct MEventStruct_Unk1442CC *a0, u32 command)
{
switch (command)
{
@@ -461,7 +461,7 @@ u16 sub_801B784(const struct MEventStruct_Unk1442CC *a0, u32 command)
static void sub_801B7D8(u32 command)
{
- struct MEventBuffer_32E0_Sub *data = &gSaveBlock1Ptr->unk_322C.buffer_1c0.data;
+ struct WonderCard *data = &gSaveBlock1Ptr->unk_322C.wonderCard.data;
if (data->unk_08_0 == 2)
{
u16 *dest = NULL;
@@ -495,7 +495,7 @@ u16 mevent_081445C0(u32 command)
{
case 0:
{
- struct MEventBuffer_32E0_Sub *data = &gSaveBlock1Ptr->unk_322C.buffer_1c0.data;
+ struct WonderCard *data = &gSaveBlock1Ptr->unk_322C.wonderCard.data;
if (data->unk_08_0 == 2)
{
struct MEventBuffer_3430_Sub *buffer = &gSaveBlock1Ptr->unk_322C.buffer_310.data;
@@ -505,7 +505,7 @@ u16 mevent_081445C0(u32 command)
}
case 1:
{
- struct MEventBuffer_32E0_Sub *data = &gSaveBlock1Ptr->unk_322C.buffer_1c0.data;
+ struct WonderCard *data = &gSaveBlock1Ptr->unk_322C.wonderCard.data;
if (data->unk_08_0 == 2)
{
struct MEventBuffer_3430_Sub *buffer = &gSaveBlock1Ptr->unk_322C.buffer_310.data;
@@ -515,7 +515,7 @@ u16 mevent_081445C0(u32 command)
}
case 2:
{
- struct MEventBuffer_32E0_Sub *data = &gSaveBlock1Ptr->unk_322C.buffer_1c0.data;
+ struct WonderCard *data = &gSaveBlock1Ptr->unk_322C.wonderCard.data;
if (data->unk_08_0 == 2)
{
struct MEventBuffer_3430_Sub *buffer = &gSaveBlock1Ptr->unk_322C.buffer_310.data;
@@ -525,14 +525,14 @@ u16 mevent_081445C0(u32 command)
}
case 3:
{
- struct MEventBuffer_32E0_Sub *data = &gSaveBlock1Ptr->unk_322C.buffer_1c0.data;
+ struct WonderCard *data = &gSaveBlock1Ptr->unk_322C.wonderCard.data;
if (data->unk_08_0 == 1)
return sub_801B4CC();
break;
}
case 4:
{
- struct MEventBuffer_32E0_Sub *data = &gSaveBlock1Ptr->unk_322C.buffer_1c0.data;
+ struct WonderCard *data = &gSaveBlock1Ptr->unk_322C.wonderCard.data;
if (data->unk_08_0 == 1)
return data->unk_09;
break;
@@ -557,7 +557,7 @@ bool32 sub_801B94C(u16 a0)
if (!ValidateReceivedWonderCard())
return FALSE;
- if (gSaveBlock1Ptr->unk_322C.buffer_1c0.data.unk_00 != a0)
+ if (gSaveBlock1Ptr->unk_322C.wonderCard.data.unk_00 != a0)
return FALSE;
gUnknown_02022C70 = TRUE;
diff --git a/src/mevent_801BAAC.c b/src/mevent_801BAAC.c
index 24a999f69..62240af98 100644
--- a/src/mevent_801BAAC.c
+++ b/src/mevent_801BAAC.c
@@ -35,7 +35,7 @@ struct UnkStruct_203F3C8_02DC
struct UnkStruct_203F3C8
{
- /*0000*/ struct MEventBuffer_32E0_Sub unk_0000;
+ /*0000*/ struct WonderCard unk_0000;
/*014c*/ struct MEventBuffer_3430_Sub unk_014C;
/*0170*/ const struct UnkStruct_8467FB8 * unk_0170;
/*0174*/ u8 unk_0174;
@@ -150,7 +150,7 @@ const struct UnkStruct_8467FB8 gUnknown_082F1D60[8] = {
{1, 0, 0, 7, gWonderCardBgGfx8, gWonderCardBgTilemap8, gWonderCardBgPal8}
};
-bool32 InitWonderCardResources(struct MEventBuffer_32E0_Sub * r5, struct MEventBuffer_3430_Sub * r6)
+bool32 InitWonderCardResources(struct WonderCard * r5, struct MEventBuffer_3430_Sub * r6)
{
if (r5 == NULL || r6 == NULL)
return FALSE;
@@ -465,7 +465,7 @@ void sub_801C61C(void)
struct UnkStruct_203F3CC
{
- /*0000*/ struct MEventBuffer_3120_Sub unk_0000;
+ /*0000*/ struct WonderNews unk_0000;
/*01bc*/ const struct UnkStruct_8467FB8 * unk_01BC;
/*01c0*/ u8 unk_01C0_0:1;
u8 unk_01C0_1:7;
@@ -542,7 +542,7 @@ const struct UnkStruct_8467FB8 gUnknown_082F24C8[] = {
{1, 0, 0, 0, gWonderNewsGfx8, gWonderNewsTilemap8, gWonderNewsPal8}
};
-bool32 InitWonderNewsResources(const struct MEventBuffer_3120_Sub * a0)
+bool32 InitWonderNewsResources(const struct WonderNews * a0)
{
if (a0 == NULL)
return FALSE;
diff --git a/src/mevent_client.c b/src/mevent_client.c
new file mode 100644
index 000000000..ec8908af2
--- /dev/null
+++ b/src/mevent_client.c
@@ -0,0 +1,291 @@
+#include "global.h"
+#include "alloc.h"
+#include "decompress.h"
+#include "overworld.h"
+#include "script.h"
+#include "battle_tower.h"
+#include "mevent.h"
+#include "mystery_event_script.h"
+#include "mevent_client.h"
+
+EWRAM_DATA struct mevent_client * s_mevent_client_ptr = NULL;
+
+static void mevent_client_init(struct mevent_client *, u32, u32);
+static u32 mevent_client_exec(struct mevent_client *);
+static void mevent_client_free_resources(struct mevent_client *);
+
+extern const struct mevent_client_cmd gUnknown_082F2598[];
+
+void mevent_client_do_init(u32 arg)
+{
+ s_mevent_client_ptr = AllocZeroed(sizeof(struct mevent_client));
+ mevent_client_init(s_mevent_client_ptr, 1, 0);
+ s_mevent_client_ptr->unk_4C = arg;
+}
+
+u32 mevent_client_do_exec(u16 * a0)
+{
+ u32 result;
+ if (s_mevent_client_ptr == NULL)
+ return 6;
+ result = mevent_client_exec(s_mevent_client_ptr);
+ if (result == 6)
+ {
+ *a0 = s_mevent_client_ptr->param;
+ mevent_client_free_resources(s_mevent_client_ptr);
+ Free(s_mevent_client_ptr);
+ s_mevent_client_ptr = NULL;
+ }
+ return result;
+}
+
+void mevent_client_inc_flag(void)
+{
+ s_mevent_client_ptr->flag++;
+}
+
+void * mevent_client_get_buffer(void)
+{
+ return s_mevent_client_ptr->buffer;
+}
+
+void mevent_client_set_param(u32 a0)
+{
+ s_mevent_client_ptr->param = a0;
+}
+
+static void mevent_client_init(struct mevent_client * svr, u32 sendPlayerNo, u32 recvPlayerNo)
+{
+ svr->unk_00 = 0;
+ svr->mainseqno = 0;
+ svr->flag = 0;
+ svr->sendBuffer = AllocZeroed(ME_SEND_BUF_SIZE);
+ svr->recvBuffer = AllocZeroed(ME_SEND_BUF_SIZE);
+ svr->cmdBuffer = AllocZeroed(ME_SEND_BUF_SIZE);
+ svr->buffer = AllocZeroed(0x40);
+ mevent_srv_sub_init(&svr->manager, sendPlayerNo, recvPlayerNo);
+}
+
+static void mevent_client_free_resources(struct mevent_client * svr)
+{
+ Free(svr->sendBuffer);
+ Free(svr->recvBuffer);
+ Free(svr->cmdBuffer);
+ Free(svr->buffer);
+}
+
+static void mevent_client_jmp_buffer(struct mevent_client * svr)
+{
+ memcpy(svr->cmdBuffer, svr->recvBuffer, ME_SEND_BUF_SIZE);
+ svr->cmdidx = 0;
+}
+
+static void mevent_client_send_word(struct mevent_client * svr, u32 ident, u32 word)
+{
+ CpuFill32(0, svr->sendBuffer, ME_SEND_BUF_SIZE);
+ *(u32 *)svr->sendBuffer = word;
+ mevent_srv_sub_init_send(&svr->manager, ident, svr->sendBuffer, sizeof(u32));
+}
+
+static u32 mainseq_0(struct mevent_client * svr)
+{
+ // init
+ memcpy(svr->cmdBuffer, gUnknown_082F2598, ME_SEND_BUF_SIZE);
+ svr->cmdidx = 0;
+ svr->mainseqno = 4;
+ svr->flag = 0;
+ return 0;
+}
+
+static u32 mainseq_1(struct mevent_client * svr)
+{
+ // done
+ return 6;
+}
+
+
+static u32 mainseq_2(struct mevent_client * svr)
+{
+ // do recv
+ if (mevent_srv_sub_recv(&svr->manager))
+ {
+ svr->mainseqno = 4;
+ svr->flag = 0;
+ }
+ return 1;
+}
+
+static u32 mainseq_3(struct mevent_client * svr)
+{
+ // do send
+ if (mevent_srv_sub_send(&svr->manager))
+ {
+ svr->mainseqno = 4;
+ svr->flag = 0;
+ }
+ return 1;
+}
+
+static u32 mainseq_4(struct mevent_client * svr)
+{
+ // process command
+ struct mevent_client_cmd * cmd = &svr->cmdBuffer[svr->cmdidx];
+ ++svr->cmdidx;
+ switch (cmd->instr)
+ {
+ case 0:
+ break;
+ case 1:
+ svr->param = cmd->parameter;
+ svr->mainseqno = 1;
+ svr->flag = 0;
+ break;
+ case 2:
+ mevent_srv_sub_init_recv(&svr->manager, cmd->parameter, svr->recvBuffer);
+ svr->mainseqno = 2;
+ svr->flag = 0;
+ break;
+ case 3:
+ svr->mainseqno = 3;
+ svr->flag = 0;
+ break;
+ case 20:
+ mevent_srv_sub_init_send(&svr->manager, 0x14, svr->sendBuffer, 0);
+ svr->mainseqno = 3;
+ svr->flag = 0;
+ break;
+ case 19:
+ mevent_client_send_word(svr, 0x12, GetGameStat(cmd->parameter));
+ svr->mainseqno = 3;
+ svr->flag = 0;
+ break;
+ case 6:
+ if (svr->param == 0)
+ mevent_client_jmp_buffer(svr);
+ break;
+ case 7:
+ if (svr->param == 1)
+ mevent_client_jmp_buffer(svr);
+ break;
+ case 4:
+ mevent_client_jmp_buffer(svr);
+ break;
+ case 5:
+ memcpy(svr->buffer, svr->recvBuffer, 0x40);
+ svr->mainseqno = 5;
+ svr->flag = 0;
+ return 2;
+ case 11:
+ memcpy(svr->buffer, svr->recvBuffer, 0x40);
+ svr->mainseqno = 5;
+ svr->flag = 0;
+ return 3;
+ case 12:
+ memcpy(svr->buffer, svr->recvBuffer, 0x40);
+ svr->mainseqno = 5;
+ svr->flag = 0;
+ return 5;
+ case 13:
+ svr->mainseqno = 5;
+ svr->flag = 0;
+ return 4;
+ case 8:
+ sub_801B580(svr->sendBuffer, svr->unk_4C);
+ mevent_srv_sub_init_send(&svr->manager, 0x11, svr->sendBuffer, sizeof(struct MEventStruct_Unk1442CC));
+ break;
+ case 14:
+ mevent_client_send_word(svr, 0x13, svr->param);
+ break;
+ case 10:
+ sub_801B21C(svr->recvBuffer);
+ break;
+ case 9:
+ if (!sub_801B1A4(svr->recvBuffer))
+ {
+ sub_801B078(svr->recvBuffer);
+ mevent_client_send_word(svr, 0x13, 0);
+ }
+ else
+ mevent_client_send_word(svr, 0x13, 1);
+ break;
+ case 15:
+ svr->mainseqno = 6;
+ svr->flag = 0;
+ break;
+ case 16:
+ sub_801B508(svr->recvBuffer);
+ break;
+ case 17:
+ InitRamScript_NoEventObject(svr->recvBuffer, 1000);
+ break;
+ case 18:
+ memcpy(&gSaveBlock2Ptr->frontier.ereaderTrainer, svr->recvBuffer, 0xbc);
+ ValidateEReaderTrainer();
+ break;
+ case 21:
+ memcpy(gDecompressionBuffer, svr->recvBuffer, ME_SEND_BUF_SIZE);
+ svr->mainseqno = 7;
+ svr->flag = 0;
+ break;
+ }
+
+ return 1;
+}
+
+static u32 mainseq_5(struct mevent_client * svr)
+{
+ // wait flag
+ if (svr->flag)
+ {
+ svr->mainseqno = 4;
+ svr->flag = 0;
+ }
+ return 1;
+}
+
+static u32 mainseq_6(struct mevent_client * svr)
+{
+ // ???
+ switch (svr->flag)
+ {
+ case 0:
+ sub_8153870(svr->recvBuffer);
+ ++svr->flag;
+ break;
+ case 1:
+ if (!sub_8153884(&svr->param))
+ {
+ svr->mainseqno = 4;
+ svr->flag = 0;
+ }
+ break;
+ }
+ return 1;
+}
+
+static u32 mainseq_7(struct mevent_client * svr)
+{
+ // exec arbitrary code
+ u32 (*func)(u32 *, struct SaveBlock2 *, struct SaveBlock1 *) = (void *)gDecompressionBuffer;
+ if (func(&svr->param, gSaveBlock2Ptr, gSaveBlock1Ptr) == 1)
+ {
+ svr->mainseqno = 4;
+ svr->flag = 0;
+ }
+ return 1;
+}
+
+static u32 mevent_client_exec(struct mevent_client * svr)
+{
+ u32 (*funcs[])(struct mevent_client *) = {
+ mainseq_0,
+ mainseq_1,
+ mainseq_2,
+ mainseq_3,
+ mainseq_4,
+ mainseq_5,
+ mainseq_6,
+ mainseq_7
+ };
+ return funcs[svr->mainseqno](svr);
+}
diff --git a/src/mevent_scripts.c b/src/mevent_scripts.c
new file mode 100644
index 000000000..41a5ddd51
--- /dev/null
+++ b/src/mevent_scripts.c
@@ -0,0 +1,191 @@
+#include "global.h"
+#include "mevent_client.h"
+#include "mevent_server.h"
+
+const u8 gText_CanceledReadingCard[] = _("Canceled reading\nthe Card.");
+
+
+const struct mevent_client_cmd gUnknown_082F2598[] = {
+ {.instr = 2, .parameter = 16},
+ {.instr = 4, .parameter = 0}
+};
+
+const struct mevent_client_cmd gUnknown_082F25A8[] = {
+ {.instr = 8, .parameter = 0},
+ {.instr = 3, .parameter = 0},
+ {.instr = 2, .parameter = 16},
+ {.instr = 4, .parameter = 0}
+};
+
+const struct mevent_client_cmd gUnknown_082F25C8[] = {
+ {.instr = 20, .parameter = 0},
+ {.instr = 1, .parameter = 10}
+};
+
+const struct mevent_client_cmd gUnknown_082F25D8[] = {
+ {.instr = 20, .parameter = 0},
+ {.instr = 1, .parameter = 11}
+};
+
+const struct mevent_client_cmd gUnknown_082F25E8[] = {
+ {.instr = 20, .parameter = 0},
+ {.instr = 1, .parameter = 0}
+};
+
+const struct mevent_client_cmd gUnknown_082F25F8[] = {
+ {.instr = 2, .parameter = 22},
+ {.instr = 10, .parameter = 0},
+ {.instr = 2, .parameter = 25},
+ {.instr = 17, .parameter = 0},
+ {.instr = 20, .parameter = 0},
+ {.instr = 1, .parameter = 2}
+};
+
+const struct mevent_client_cmd gUnknown_082F2628[] = {
+ {.instr = 2, .parameter = 23},
+ {.instr = 9, .parameter = 0},
+ {.instr = 3, .parameter = 0},
+ {.instr = 2, .parameter = 16},
+ {.instr = 4, .parameter = 0}
+};
+
+const struct mevent_client_cmd gUnknown_082F2650[] = {
+ {.instr = 20, .parameter = 0},
+ {.instr = 1, .parameter = 7}
+};
+
+const struct mevent_client_cmd gUnknown_082F2660[] = {
+ {.instr = 20, .parameter = 0},
+ {.instr = 1, .parameter = 3}
+};
+
+const struct mevent_client_cmd gUnknown_082F2670[] = {
+ {.instr = 13, .parameter = 0},
+ {.instr = 14, .parameter = 0},
+ {.instr = 3, .parameter = 0},
+ {.instr = 2, .parameter = 16},
+ {.instr = 4, .parameter = 0}
+};
+
+const struct mevent_client_cmd gUnknown_082F2698[] = {
+ {.instr = 20, .parameter = 0},
+ {.instr = 1, .parameter = 9}
+};
+
+const struct mevent_client_cmd gUnknown_082F26A8[] = {
+ {.instr = 20, .parameter = 0},
+ {.instr = 1, .parameter = 5}
+};
+
+const struct mevent_client_cmd gUnknown_082F26B8[] = {
+ {.instr = 2, .parameter = 21},
+ {.instr = 12, .parameter = 0},
+ {.instr = 20, .parameter = 0},
+ {.instr = 1, .parameter = 14},
+ {.instr = 2, .parameter = 21},
+ {.instr = 12, .parameter = 0},
+ {.instr = 20, .parameter = 0},
+ {.instr = 1, .parameter = 13}
+};
+
+const struct mevent_cmd gUnknown_082F26F8[] = {
+ {.instr = 18, .flag = 0x10, .parameter = gUnknown_082F25C8},
+ {.instr = 1, .flag = 0x00, .parameter = NULL},
+ {.instr = 2, .flag = 0x14, .parameter = NULL},
+ {.instr = 0, .flag = 0x0a, .parameter = NULL},
+ {.instr = 18, .flag = 0x10, .parameter = gUnknown_082F25D8},
+ {.instr = 1, .flag = 0x00, .parameter = NULL},
+ {.instr = 2, .flag = 0x14, .parameter = NULL},
+ {.instr = 0, .flag = 0x0b, .parameter = NULL},
+ {.instr = 18, .flag = 0x10, .parameter = gUnknown_082F2698},
+ {.instr = 1, .flag = 0x00, .parameter = NULL},
+ {.instr = 2, .flag = 0x14, .parameter = NULL},
+ {.instr = 0, .flag = 0x09, .parameter = NULL}
+};
+
+const struct mevent_cmd gUnknown_082F2788[] = {
+ {.instr = 18, .flag = 0x20, .parameter = gUnknown_082F26B8},
+ {.instr = 1, .flag = 0x00, .parameter = NULL},
+ {.instr = 20, .flag = 0x1b, .parameter = gText_CanceledReadingCard},
+ {.instr = 1, .flag = 0x00, .parameter = NULL},
+ {.instr = 2, .flag = 0x14, .parameter = NULL},
+ {.instr = 0, .flag = 0x09, .parameter = NULL}
+};
+
+const struct mevent_cmd gUnknown_082F27D0[] = {
+ {.instr = 18, .flag = 0x10, .parameter = gUnknown_082F2650},
+ {.instr = 1, .flag = 0x00, .parameter = NULL},
+ {.instr = 2, .flag = 0x14, .parameter = NULL},
+ {.instr = 0, .flag = 0x07, .parameter = NULL}
+};
+
+const struct mevent_cmd gUnknown_082F2800[] = {
+ {.instr = 18, .flag = 0x28, .parameter = gUnknown_082F2628},
+ {.instr = 1, .flag = 0x00, .parameter = NULL},
+ {.instr = 14, .flag = 0x00, .parameter = NULL},
+ {.instr = 1, .flag = 0x00, .parameter = NULL},
+ {.instr = 2, .flag = 0x13, .parameter = NULL},
+ {.instr = 8, .flag = 0x00, .parameter = NULL},
+ {.instr = 4, .flag = 0x01, .parameter = gUnknown_082F27D0},
+ {.instr = 18, .flag = 0x10, .parameter = gUnknown_082F2660},
+ {.instr = 1, .flag = 0x00, .parameter = NULL},
+ {.instr = 2, .flag = 0x14, .parameter = NULL},
+ {.instr = 0, .flag = 0x03, .parameter = NULL}
+};
+
+const struct mevent_cmd gUnknown_082F2884[] = {
+ {.instr = 18, .flag = 0x30, .parameter = gUnknown_082F25F8},
+ {.instr = 1, .flag = 0x00, .parameter = NULL},
+ {.instr = 13, .flag = 0x00, .parameter = NULL},
+ {.instr = 1, .flag = 0x00, .parameter = NULL},
+ {.instr = 15, .flag = 0x00, .parameter = NULL},
+ {.instr = 1, .flag = 0x00, .parameter = NULL},
+ {.instr = 2, .flag = 0x14, .parameter = NULL},
+ {.instr = 0, .flag = 0x02, .parameter = NULL}
+};
+
+const struct mevent_cmd gUnknown_082F28E4[] = {
+ {.instr = 18, .flag = 0x28, .parameter = gUnknown_082F2670},
+ {.instr = 1, .flag = 0x00, .parameter = NULL},
+ {.instr = 2, .flag = 0x13, .parameter = NULL},
+ {.instr = 8, .flag = 0x00, .parameter = NULL},
+ {.instr = 4, .flag = 0x00, .parameter = gUnknown_082F2884},
+ {.instr = 3, .flag = 0x00, .parameter = gUnknown_082F2788}
+};
+
+const struct mevent_cmd gUnknown_082F292C[] = {
+ {.instr = 18, .flag = 0x10, .parameter = gUnknown_082F26A8},
+ {.instr = 1, .flag = 0x00, .parameter = NULL},
+ {.instr = 2, .flag = 0x14, .parameter = NULL},
+ {.instr = 0, .flag = 0x05, .parameter = NULL},
+ {.instr = 18, .flag = 0x10, .parameter = gUnknown_082F25E8},
+ {.instr = 1, .flag = 0x00, .parameter = NULL},
+ {.instr = 2, .flag = 0x14, .parameter = NULL},
+ {.instr = 0, .flag = 0x00, .parameter = NULL}
+};
+
+const struct mevent_cmd s_mevent_wonder_news[] = {
+ {.instr = 27, .flag = 0x00, .parameter = NULL},
+ {.instr = 18, .flag = 0x20, .parameter = gUnknown_082F25A8},
+ {.instr = 1, .flag = 0x00, .parameter = NULL},
+ {.instr = 2, .flag = 0x11, .parameter = NULL},
+ {.instr = 5, .flag = 0x00, .parameter = NULL},
+ {.instr = 30, .flag = 0x00, .parameter = NULL},
+ {.instr = 4, .flag = 0x00, .parameter = gUnknown_082F26F8},
+ {.instr = 3, .flag = 0x00, .parameter = gUnknown_082F2800}
+};
+
+const struct mevent_cmd s_mevent_wonder_card[] = {
+ {.instr = 26, .flag = 0x00, .parameter = NULL},
+ {.instr = 28, .flag = 0x00, .parameter = NULL},
+ {.instr = 18, .flag = 0x20, .parameter = gUnknown_082F25A8},
+ {.instr = 1, .flag = 0x00, .parameter = NULL},
+ {.instr = 2, .flag = 0x11, .parameter = NULL},
+ {.instr = 5, .flag = 0x00, .parameter = NULL},
+ {.instr = 6, .flag = 0x00, .parameter = NULL},
+ {.instr = 4, .flag = 0x00, .parameter = gUnknown_082F26F8},
+ {.instr = 7, .flag = 0x00, .parameter = NULL},
+ {.instr = 4, .flag = 0x02, .parameter = gUnknown_082F28E4},
+ {.instr = 4, .flag = 0x00, .parameter = gUnknown_082F2884},
+ {.instr = 3, .flag = 0x00, .parameter = gUnknown_082F292C}
+};
diff --git a/src/mevent_server.c b/src/mevent_server.c
new file mode 100644
index 000000000..06b10dd95
--- /dev/null
+++ b/src/mevent_server.c
@@ -0,0 +1,295 @@
+#include "global.h"
+#include "alloc.h"
+#include "script.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;
+
+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 mevent_srv_exec_common(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->wonder_card = AllocZeroed(sizeof(struct WonderCard));
+ svr->wonder_news = AllocZeroed(sizeof(struct WonderNews));
+ 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);
+}
+
+static void mevent_srv_free_resources(struct mevent_srv_common * svr)
+{
+ Free(svr->wonder_card);
+ Free(svr->wonder_news);
+ Free(svr->recvBuffer);
+ Free(svr->mevent_unk1442cc);
+}
+
+void mevent_srv_common_init_send(struct mevent_srv_common * svr, u32 ident, const void * src, u32 size)
+{
+ AGB_ASSERT(size <= ME_SEND_BUF_SIZE);
+ mevent_srv_sub_init_send(&svr->manager, ident, src, size);
+}
+
+static const void * mevent_first_if_not_null_else_second(const void * a0, const void * a1)
+{
+ if (a0 != NULL)
+ return a0;
+ else
+ return a1;
+}
+
+static u32 mevent_compare_pointers(const void * a0, const void * a1)
+{
+ if (a1 < a0)
+ return 0;
+ else if (a1 == a0)
+ return 1;
+ else
+ return 2;
+}
+
+static u32 common_mainseq_0(struct mevent_srv_common * svr)
+{
+ // start
+ svr->mainseqno = 4;
+ return 0;
+}
+
+static u32 common_mainseq_1(struct mevent_srv_common * svr)
+{
+ // done
+ return 3;
+}
+
+static u32 common_mainseq_2(struct mevent_srv_common * svr)
+{
+ // do recv
+ if (mevent_srv_sub_recv(&svr->manager))
+ svr->mainseqno = 4;
+ return 1;
+}
+
+static u32 common_mainseq_3(struct mevent_srv_common * svr)
+{
+ // do send
+ if (mevent_srv_sub_send(&svr->manager))
+ svr->mainseqno = 4;
+ return 1;
+}
+
+static u32 common_mainseq_4(struct mevent_srv_common * svr)
+{
+ // process command
+ const struct mevent_cmd * cmd = &svr->cmdBuffer[svr->cmdidx];
+ const void * ptr;
+ svr->cmdidx++;
+
+ switch (cmd->instr)
+ {
+ case 0:
+ // end
+ AGB_ASSERT(cmd->parameter == NULL);
+ svr->mainseqno = 1;
+ svr->param = cmd->flag;
+ break;
+ case 1:
+ // wait_send
+ svr->mainseqno = 3;
+ break;
+ case 2:
+ // receive
+ AGB_ASSERT(cmd->parameter == NULL);
+ mevent_srv_sub_init_recv(&svr->manager, cmd->flag, svr->recvBuffer);
+ svr->mainseqno = 2;
+ break;
+ case 3:
+ // jump
+ AGB_ASSERT(cmd->flag == FALSE);
+ svr->cmdidx = 0;
+ svr->cmdBuffer = cmd->parameter;
+ break;
+ case 5:
+ // get_1442CC
+ AGB_ASSERT(cmd->flag == FALSE);
+ AGB_ASSERT(cmd->parameter == NULL);
+ memcpy(svr->mevent_unk1442cc, svr->recvBuffer, sizeof(struct MEventStruct_Unk1442CC));
+ break;
+ case 6:
+ // check_header__pass_false
+ AGB_ASSERT(cmd->flag == FALSE);
+ AGB_ASSERT(cmd->parameter == NULL);
+ svr->param = sub_801B6A0(svr->mevent_unk1442cc, FALSE);
+ break;
+ case 30:
+ // check_header__pass_true
+ AGB_ASSERT(cmd->flag == FALSE);
+ AGB_ASSERT(cmd->parameter == NULL);
+ svr->param = sub_801B6A0(svr->mevent_unk1442cc, TRUE);
+ break;
+ case 4:
+ // jump_if_eq
+ if (svr->param == cmd->flag)
+ {
+ svr->cmdidx = 0;
+ svr->cmdBuffer = cmd->parameter;
+ }
+ break;
+ case 7:
+ // check_crc
+ AGB_ASSERT(cmd->flag == FALSE);
+ ptr = mevent_first_if_not_null_else_second(cmd->parameter, svr->wonder_card);
+ svr->param = sub_801B6EC(ptr, svr->mevent_unk1442cc, ptr);
+ break;
+ case 8:
+ // read_word
+ AGB_ASSERT(cmd->flag == FALSE);
+ AGB_ASSERT(cmd->parameter == NULL);
+ svr->param = *(u32 *)svr->recvBuffer;
+ break;
+ case 9:
+ AGB_ASSERT(cmd->flag == FALSE);
+ ptr = mevent_first_if_not_null_else_second(cmd->parameter, &svr->sendWord);
+ svr->param = sub_801B708(ptr, svr->mevent_unk1442cc, ptr);
+ break;
+ case 10:
+ AGB_ASSERT(cmd->parameter == NULL);
+ svr->param = MEventStruct_Unk1442CC_GetValueNFrom_unk_20(svr->mevent_unk1442cc, cmd->flag);
+ break;
+ case 11:
+ AGB_ASSERT(cmd->flag == FALSE);
+ svr->param = MEventStruct_Unk1442CC_CompareField_unk_16(svr->mevent_unk1442cc, cmd->parameter);
+ break;
+ case 12:
+ AGB_ASSERT(cmd->flag == FALSE);
+ svr->param = mevent_compare_pointers(cmd->parameter, *(void **)svr->recvBuffer);
+ break;
+ case 14:
+ AGB_ASSERT(cmd->flag == FALSE);
+ mevent_srv_common_init_send(svr, 0x17, mevent_first_if_not_null_else_second(cmd->parameter, svr->wonder_news), sizeof(struct WonderNews));
+ break;
+ case 13:
+ AGB_ASSERT(cmd->flag == FALSE);
+ mevent_srv_common_init_send(svr, 0x16, mevent_first_if_not_null_else_second(cmd->parameter, svr->wonder_card), sizeof(struct WonderCard));
+ break;
+ case 16:
+ AGB_ASSERT(cmd->flag == FALSE);
+ mevent_srv_common_init_send(svr, 0x18, mevent_first_if_not_null_else_second(cmd->parameter, &svr->sendWord), 4);
+ break;
+ case 15:
+ if (cmd->parameter == NULL)
+ mevent_srv_common_init_send(svr, 0x19, svr->sendBuffer1, svr->sendBuffer1Size);
+ else
+ mevent_srv_common_init_send(svr, 0x19, cmd->parameter, cmd->flag);
+ break;
+ case 18:
+ if (cmd->parameter == NULL)
+ mevent_srv_common_init_send(svr, 0x10, svr->sendBuffer2, svr->sendBuffer2Size);
+ else
+ mevent_srv_common_init_send(svr, 0x10, cmd->parameter, cmd->flag);
+ break;
+ case 19:
+ AGB_ASSERT(cmd->flag == FALSE);
+ mevent_srv_common_init_send(svr, 0x1a, cmd->parameter, 188);
+ break;
+ case 20:
+ mevent_srv_common_init_send(svr, 0x15, cmd->parameter, cmd->flag);
+ break;
+ case 17:
+ mevent_srv_common_init_send(svr, 0x1c, cmd->parameter, cmd->flag);
+ break;
+ case 22:
+ AGB_ASSERT(cmd->flag == FALSE);
+ memcpy(svr->wonder_card, cmd->parameter, 332);
+ break;
+ case 23:
+ AGB_ASSERT(cmd->flag == FALSE);
+ memcpy(svr->wonder_news, cmd->parameter, 444);
+ break;
+ case 21:
+ AGB_ASSERT(cmd->flag == FALSE);
+ svr->sendWord = *(u32 *)cmd->parameter;
+ break;
+ case 24:
+ svr->sendBuffer1 = cmd->parameter;
+ svr->sendBuffer1Size = cmd->flag;
+ break;
+ case 25:
+ svr->sendBuffer2 = cmd->parameter;
+ svr->sendBuffer2Size = cmd->flag;
+ break;
+ case 26:
+ AGB_ASSERT(cmd->flag == FALSE && cmd->parameter == NULL);
+ memcpy(svr->wonder_card, GetSavedWonderCard(), 332);
+ WonderCard_ResetInternalReceivedFlag(svr->wonder_card);
+ break;
+ case 27:
+ AGB_ASSERT(cmd->flag == FALSE && cmd->parameter == NULL);
+ memcpy(svr->wonder_news, GetSavedWonderNews(), 444);
+ break;
+ case 28:
+ AGB_ASSERT(cmd->flag == FALSE && cmd->parameter == NULL);
+ svr->sendBuffer1 = GetSavedRamScriptIfValid();
+ break;
+ case 29:
+ mevent_srv_common_init_send(svr, 0x1b, cmd->parameter, cmd->flag);
+ break;
+ }
+
+ return 1;
+}
+
+static u32 (*const func_tbl[])(struct mevent_srv_common *) = {
+ common_mainseq_0,
+ common_mainseq_1,
+ common_mainseq_2,
+ common_mainseq_3,
+ common_mainseq_4
+};
+
+static u32 mevent_srv_exec_common(struct mevent_srv_common * svr)
+{
+ u32 response;
+ AGB_ASSERT(svr->mainseqno < NELEMS(func_tbl));
+ response = func_tbl[svr->mainseqno](svr);
+ AGB_ASSERT(svr->mainseqno < NELEMS(func_tbl));
+ return response;
+}
diff --git a/src/mevent_server_helpers.c b/src/mevent_server_helpers.c
new file mode 100644
index 000000000..9d47ba745
--- /dev/null
+++ b/src/mevent_server_helpers.c
@@ -0,0 +1,211 @@
+#include "global.h"
+#include "alloc.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_helpers.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 ident, const void * src, u32 size)
+{
+ svr->seqno = 0;
+ svr->sendIdent = ident;
+ 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)
+ {
+ LinkRfu_FatalError();
+ return FALSE;
+ }
+ else if (svr->recvIdent != header.ident)
+ {
+ LinkRfu_FatalError();
+ return FALSE;
+ }
+ else
+ {
+ svr->recvCounter = 0;
+ mevent_reset_recv(svr->recvPlayerNo);
+ ++svr->seqno;
+ }
+ }
+ break;
+ case 1:
+ if (mevent_has_received(svr->recvPlayerNo))
+ {
+ size_t blocksiz = svr->recvCounter * 252;
+ if (svr->recvSize - blocksiz <= 252)
+ {
+ mevent_recv_block(svr->recvPlayerNo, svr->recvBfr + blocksiz, svr->recvSize - blocksiz);
+ ++svr->recvCounter;
+ ++svr->seqno;
+ }
+ else
+ {
+ mevent_recv_block(svr->recvPlayerNo, svr->recvBfr + blocksiz, 252);
+ ++svr->recvCounter;
+ }
+ mevent_reset_recv(svr->recvPlayerNo);
+ }
+ break;
+ case 2:
+ if (CalcCRC16WithTable(svr->recvBfr, svr->recvSize) != svr->recvCRC)
+ {
+ LinkRfu_FatalError();
+ 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 (IsLinkTaskFinished())
+ {
+ 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 (IsLinkTaskFinished())
+ {
+ if (mevent_has_received(svr->sendPlayerNo))
+ {
+ size_t blocksiz;
+ mevent_reset_recv(svr->sendPlayerNo);
+ blocksiz = 252 * svr->sendCounter;
+ if (svr->sendSize - blocksiz <= 252)
+ {
+ SendBlock(0, svr->sendBfr + blocksiz, svr->sendSize - blocksiz);
+ ++svr->sendCounter;
+ ++svr->seqno;
+ }
+ else
+ {
+ SendBlock(0, svr->sendBfr + blocksiz, 252);
+ ++svr->sendCounter;
+ }
+ }
+ }
+ break;
+ case 2:
+ if (IsLinkTaskFinished())
+ {
+ if (CalcCRC16WithTable(svr->sendBfr, svr->sendSize) != svr->sendCRC)
+ LinkRfu_FatalError();
+ 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/mystery_gift.c b/src/mystery_gift.c
index c8b3a9060..ab3df9020 100644
--- a/src/mystery_gift.c
+++ b/src/mystery_gift.c
@@ -25,7 +25,7 @@
#include "mevent_801BAAC.h"
#include "save.h"
#include "link.h"
-#include "mevent_server_ish.h"
+#include "mevent_client.h"
#include "event_data.h"
#include "link_rfu.h"
#include "mevent_news.h"
@@ -815,11 +815,11 @@ static bool32 HandleLoadWonderCardOrNews(u8 * state, bool32 cardOrNews)
case 0:
if (cardOrNews == 0)
{
- InitWonderCardResources(sav1_get_mevent_buffer_1(), sav1_get_mevent_buffer_2());
+ InitWonderCardResources(GetSavedWonderCard(), sav1_get_mevent_buffer_2());
}
else
{
- InitWonderNewsResources(sav1_get_mevent_buffer_0());
+ InitWonderNewsResources(GetSavedWonderNews());
}
(*state)++;
break;
@@ -1269,7 +1269,7 @@ void task00_mystery_gift(u8 taskId)
{
ClearScreenInBg0(TRUE);
data->state = 7;
- mevent_srv_ish_do_init(data->IsCardOrNews);
+ mevent_client_do_init(data->IsCardOrNews);
}
else if (gSpecialVar_Result == 5)
{
@@ -1282,7 +1282,7 @@ void task00_mystery_gift(u8 taskId)
data->state = 8;
break;
case 8:
- switch (mevent_srv_ish_do_exec(&data->curPromptWindowId))
+ switch (mevent_client_do_exec(&data->curPromptWindowId))
{
case 6:
task_add_05_task_del_08FA224_when_no_RfuFunc();
@@ -1290,8 +1290,8 @@ void task00_mystery_gift(u8 taskId)
data->state = 13;
break;
case 5:
- memcpy(data->buffer, mevent_srv_ish_get_buffer(), 0x40);
- mevent_srv_ish_inc_flag();
+ memcpy(data->buffer, mevent_client_get_buffer(), 0x40);
+ mevent_client_inc_flag();
break;
case 3:
data->state = 10;
@@ -1306,29 +1306,29 @@ void task00_mystery_gift(u8 taskId)
}
break;
case 9:
- switch ((u32)mevent_message_print_and_prompt_yes_no(&data->textState, &data->curPromptWindowId, FALSE, mevent_srv_ish_get_buffer()))
+ switch ((u32)mevent_message_print_and_prompt_yes_no(&data->textState, &data->curPromptWindowId, FALSE, mevent_client_get_buffer()))
{
case 0:
- mevent_srv_ish_set_param(0);
- mevent_srv_ish_inc_flag();
+ mevent_client_set_param(0);
+ mevent_client_inc_flag();
data->state = 7;
break;
case 1:
- mevent_srv_ish_set_param(1);
- mevent_srv_ish_inc_flag();
+ mevent_client_set_param(1);
+ mevent_client_inc_flag();
data->state = 7;
break;
case -1u:
- mevent_srv_ish_set_param(1);
- mevent_srv_ish_inc_flag();
+ mevent_client_set_param(1);
+ mevent_client_inc_flag();
data->state = 7;
break;
}
break;
case 10:
- if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, mevent_srv_ish_get_buffer()))
+ if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, mevent_client_get_buffer()))
{
- mevent_srv_ish_inc_flag();
+ mevent_client_inc_flag();
data->state = 7;
}
break;
@@ -1342,19 +1342,19 @@ void task00_mystery_gift(u8 taskId)
}
else
{
- mevent_srv_ish_set_param(0);
- mevent_srv_ish_inc_flag();
+ mevent_client_set_param(0);
+ mevent_client_inc_flag();
data->state = 7;
}
break;
case 1:
- mevent_srv_ish_set_param(1);
- mevent_srv_ish_inc_flag();
+ mevent_client_set_param(1);
+ mevent_client_inc_flag();
data->state = 7;
break;
case -1u:
- mevent_srv_ish_set_param(1);
- mevent_srv_ish_inc_flag();
+ mevent_client_set_param(1);
+ mevent_client_inc_flag();
data->state = 7;
break;
}
@@ -1363,18 +1363,18 @@ void task00_mystery_gift(u8 taskId)
switch ((u32)mevent_message_print_and_prompt_yes_no(&data->textState, &data->curPromptWindowId, FALSE, gText_HaventReceivedCardsGift))
{
case 0:
- mevent_srv_ish_set_param(0);
- mevent_srv_ish_inc_flag();
+ mevent_client_set_param(0);
+ mevent_client_inc_flag();
data->state = 7;
break;
case 1:
- mevent_srv_ish_set_param(1);
- mevent_srv_ish_inc_flag();
+ mevent_client_set_param(1);
+ mevent_client_inc_flag();
data->state = 7;
break;
case -1u:
- mevent_srv_ish_set_param(1);
- mevent_srv_ish_inc_flag();
+ mevent_client_set_param(1);
+ mevent_client_inc_flag();
data->state = 7;
break;
}
diff --git a/src/naming_screen.c b/src/naming_screen.c
index 3b8ba037c..e43a259e7 100644
--- a/src/naming_screen.c
+++ b/src/naming_screen.c
@@ -449,7 +449,7 @@ static u8 sub_80E3274(void)
static bool8 MainState_BeginFadeIn(void)
{
sub_80E4CF8(3, gUnknown_08DD4544);
- gNamingScreenData->currentPage = 1;
+ gNamingScreenData->currentPage = PAGE_UPPER;
sub_80E4CF8(2, gUnknown_08DD46E0);
sub_80E4CF8(1, gUnknown_08DD4620);
sub_80E4DE4(gNamingScreenData->windows[1], 0);
@@ -1856,7 +1856,7 @@ static const struct NamingScreenTemplate playerNamingScreenTemplate =
.maxChars = 7,
.iconFunction = 1,
.addGenderIcon = 0,
- .initialPage = 1,
+ .initialPage = PAGE_UPPER,
.unused = 35,
.title = gText_YourName,
};
@@ -1867,7 +1867,7 @@ static const struct NamingScreenTemplate pcBoxNamingTemplate =
.maxChars = 8,
.iconFunction = 2,
.addGenderIcon = 0,
- .initialPage = 1,
+ .initialPage = PAGE_UPPER,
.unused = 19,
.title = gText_BoxName,
};
@@ -1878,7 +1878,7 @@ static const struct NamingScreenTemplate monNamingScreenTemplate =
.maxChars = 10,
.iconFunction = 3,
.addGenderIcon = 1,
- .initialPage = 1,
+ .initialPage = PAGE_UPPER,
.unused = 35,
.title = gText_PkmnsNickname,
};
@@ -1889,7 +1889,7 @@ static const struct NamingScreenTemplate wandaWordsScreenTemplate =
.maxChars = 15,
.iconFunction = 4,
.addGenderIcon = 0,
- .initialPage = 1,
+ .initialPage = PAGE_UPPER,
.unused = 11,
.title = gText_TellHimTheWords,
};
diff --git a/src/overworld.c b/src/overworld.c
index ae6efefd7..9ed147c0a 100644
--- a/src/overworld.c
+++ b/src/overworld.c
@@ -2287,7 +2287,7 @@ static void SetKeyInterceptCallback(u16 (*func)(u32))
static void CheckRfuKeepAliveTimer(void)
{
if (gWirelessCommType != 0 && ++sRfuKeepAliveTimer > 60)
- sub_8010198();
+ LinkRfu_FatalError();
}
static void ResetAllTradingStates(void)
diff --git a/src/pokemon.c b/src/pokemon.c
index 984c484a2..a75701cb0 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -5463,7 +5463,7 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem)
if (gEvolutionTable[species][i].param == heldItem)
{
heldItem = 0;
- SetMonData(mon, MON_DATA_HELD_ITEM, (u8 *)&heldItem);
+ SetMonData(mon, MON_DATA_HELD_ITEM, &heldItem);
targetSpecies = gEvolutionTable[species][i].targetSpecies;
}
break;
diff --git a/src/scrcmd.c b/src/scrcmd.c
index 314504600..125a57c01 100644
--- a/src/scrcmd.c
+++ b/src/scrcmd.c
@@ -281,7 +281,7 @@ bool8 ScrCmd_callstd_if(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_gotoram(struct ScriptContext *ctx)
+bool8 ScrCmd_returnram(struct ScriptContext *ctx)
{
ScriptJump(ctx, gUnknown_020375C0);
return FALSE;
@@ -2215,9 +2215,9 @@ bool8 ScrCmd_checkmonobedience(struct ScriptContext *ctx)
return FALSE;
}
-bool8 ScrCmd_cmdCF(struct ScriptContext *ctx)
+bool8 ScrCmd_gotoram(struct ScriptContext *ctx)
{
- const u8* v1 = sub_8099244();
+ const u8* v1 = GetSavedRamScriptIfValid();
if (v1)
{
diff --git a/src/script.c b/src/script.c
index cb06300bf..27476dba3 100644
--- a/src/script.c
+++ b/src/script.c
@@ -386,7 +386,7 @@ const u8 *GetRamScript(u8 objectId, const u8 *script)
}
}
-bool32 sub_80991F8(void)
+bool32 ValidateSavedRamScript(void)
{
struct RamScriptData *scriptData = &gSaveBlock1Ptr->ramScript.data;
if (scriptData->magic != RAM_SCRIPT_MAGIC)
@@ -402,7 +402,7 @@ bool32 sub_80991F8(void)
return TRUE;
}
-u8 *sub_8099244(void)
+u8 *GetSavedRamScriptIfValid(void)
{
struct RamScriptData *scriptData = &gSaveBlock1Ptr->ramScript.data;
if (!ValidateReceivedWonderCard())
@@ -426,7 +426,7 @@ u8 *sub_8099244(void)
}
}
-void sub_80992A0(u8 *script, u16 scriptSize)
+void InitRamScript_NoEventObject(u8 *script, u16 scriptSize)
{
if (scriptSize > sizeof(gSaveBlock1Ptr->ramScript.data.script))
scriptSize = sizeof(gSaveBlock1Ptr->ramScript.data.script);
diff --git a/src/util.c b/src/util.c
index 47112774a..8aa54857a 100644
--- a/src/util.c
+++ b/src/util.c
@@ -218,7 +218,7 @@ int CountTrailingZeroBits(u32 value)
return 0;
}
-u16 CalcCRC16(u8 *data, s32 length)
+u16 CalcCRC16(const u8 *data, s32 length)
{
u16 i, j;
u16 crc = 0x1121;
@@ -237,7 +237,7 @@ u16 CalcCRC16(u8 *data, s32 length)
return ~crc;
}
-u16 CalcCRC16WithTable(u8 *data, u32 length)
+u16 CalcCRC16WithTable(const u8 *data, u32 length)
{
u16 i;
u16 crc = 0x1121;