summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorYamaArashi <shadow962@live.com>2016-10-21 17:15:11 -0700
committerYamaArashi <shadow962@live.com>2016-10-21 17:15:11 -0700
commita741c108cd7a2abf5d82b332261f7f6cbaf179f5 (patch)
treefbd5de713518f379e2f3e7cd68fb1d53ecd7ae48 /src
parent51661b34997465e7a89b3afbaa021dab69718531 (diff)
decompile more rom4 functions
Diffstat (limited to 'src')
-rw-r--r--src/rom4.c386
1 files changed, 383 insertions, 3 deletions
diff --git a/src/rom4.c b/src/rom4.c
index 8331e3581..8e25494c5 100644
--- a/src/rom4.c
+++ b/src/rom4.c
@@ -7,6 +7,7 @@
#include "main.h"
#include "palette.h"
#include "text.h"
+#include "link.h"
#ifdef SAPPHIRE
#define LEGENDARY_MUSIC BGM_OOAME // Heavy Rain
@@ -41,6 +42,13 @@ struct UnkInputStruct
u8 input_field_3;
};
+struct UnkStruct_8054FF8
+{
+ u8 a;
+ u8 b;
+ u8 filler[14];
+};
+
extern struct WarpData gUnknown_020297F0;
extern struct WarpData gUnknown_020297F8;
extern struct WarpData gUnknown_02029800;
@@ -49,9 +57,16 @@ extern struct UnkPlayerStruct gUnknown_02029810;
extern u16 gUnknown_02029814;
extern u8 gUnknown_02029816;
-extern void (*gUnknown_03000584)(void);
+extern u8 gUnknown_0202E85C;
+extern u8 gUnknown_0202E85D;
+extern u8 gUnknown_03000580[];
+extern u16 (*gUnknown_03000584)(u32);
+
+extern u16 word_3004858;
extern void (*gUnknown_0300485C)(void);
+extern u8 gUnknown_03004860;
+extern u8 gUnknown_03004864;
extern struct UnkTVStruct gUnknown_03004870;
@@ -120,7 +135,6 @@ void sub_8055354(void);
void c2_overworld(void);
void CB2_LoadMap2(void);
void c2_80567AC(void);
-void sub_8055390(void);
void c2_exit_to_overworld_2_link(void);
void c2_exit_to_overworld_2_local(void);
void FieldClearVBlankHBlankCallbacks(void);
@@ -137,6 +151,25 @@ void sub_8054C54(void);
void sub_8054D4C(u32 a1);
void sub_8054D90(void);
void mli4_mapscripts_and_other(void);
+void sub_8054E20(void);
+void sub_8054E34(void);
+void sub_8054E60(void);
+void sub_8054E7C(void);
+void sub_8054E98(void);
+void sub_8054EC8(void);
+void sub_8054F48(void);
+void sub_8054F70(void);
+u16 sub_805530C(u16);
+void sub_8055340(u16 *);
+u16 sub_8055390(u32);
+u16 sub_80553E4(u32);
+u16 sub_8055408(u32);
+u16 sub_8055438(u32);
+void sub_8055980(u8, s16, s16, u8);
+u8 sub_8055AE8(u8);
+void sub_8055BFC(u8, u8);
+void sub_8055E5C(u8);
+void sub_8056C50(u16, u16);
void sub_8052F5C(void)
{
@@ -1097,7 +1130,7 @@ void set_callback1(MainCallback cb)
gMain.callback1 = cb;
}
-void sub_80543DC(void (*a1)(void))
+void sub_80543DC(u16 (*a1)(u32))
{
gUnknown_03000584 = a1;
}
@@ -1687,3 +1720,350 @@ void mli4_mapscripts_and_other(void)
ResetBerryTreeSparkleFlags();
mapheader_run_first_tag4_script_list_match();
}
+
+void sub_8054E20(void)
+{
+ sub_805B710(0, 0);
+ sub_80C8080();
+}
+
+void sub_8054E34(void)
+{
+ gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_15 = 1;
+ InitCameraUpdateCallback(gPlayerAvatar.spriteId);
+}
+
+void sub_8054E60(void)
+{
+ InitCameraUpdateCallback(sub_8055AE8(gUnknown_03004860));
+}
+
+void sub_8054E7C(void)
+{
+ InitCameraUpdateCallback(sub_8055AE8(gUnknown_03004860));
+}
+
+void sub_8054E98(void)
+{
+ u16 x, y;
+ sav1_camera_get_focus_coords(&x, &y);
+ sub_8056C50(x + gUnknown_03004860, y);
+}
+
+void sub_8054EC8(void)
+{
+ u16 i;
+ u16 x, y;
+
+ sav1_camera_get_focus_coords(&x, &y);
+ x -= gUnknown_03004860;
+
+ for (i = 0; i < gUnknown_03004864; i++)
+ {
+ sub_8055980(i, i + x, y, gLinkPlayers[i].gender);
+ sub_8055E5C(i);
+ }
+
+ sub_8055340(word_3002910);
+}
+
+void sub_8054F48(void)
+{
+ u16 i;
+ for (i = 0; i < gUnknown_03004864; i++)
+ sub_8055E5C(i);
+}
+
+void sub_8054F70(void)
+{
+ int i;
+ for (i = 0; i < 4; i++)
+ gUnknown_03000580[i] = 0x80;
+}
+
+bool32 sub_8054F88(u16 a1)
+{
+ int i;
+ int count = gUnknown_03004864;
+
+ for (i = 0; i < count; i++)
+ if (gUnknown_03000580[i] != a1)
+ return FALSE;
+ return TRUE;
+}
+
+bool32 sub_8054FC0(u16 a1)
+{
+ int i;
+ int count = gUnknown_03004864;
+
+ for (i = 0; i < count; i++)
+ if (gUnknown_03000580[i] == a1)
+ return TRUE;
+ return FALSE;
+}
+
+void sub_8054FF8(u32 a1, u16 a2, struct UnkStruct_8054FF8 *a3, u16 *a4)
+{
+ u8 *script;
+
+ if (gUnknown_03000580[a1] == 0x80)
+ {
+ script = sub_8055648(a3);
+ if (script)
+ {
+ *a4 = sub_8055758(script);
+ gUnknown_03000580[a1] = 0x81;
+ if (a3->b)
+ {
+ sub_80543DC(sub_80553E4);
+ sub_8055808(script);
+ }
+ return;
+ }
+ if (sub_8054FC0(0x83) == 1)
+ {
+ gUnknown_03000580[a1] = 0x81;
+ if (a3->b)
+ {
+ sub_80543DC(sub_80553E4);
+ sub_805585C();
+ }
+ return;
+ }
+ switch (a2)
+ {
+ case 24:
+ if (sub_8055630(a3))
+ {
+ gUnknown_03000580[a1] = 0x81;
+ if (a3->b)
+ {
+ sub_80543DC(sub_80553E4);
+ sub_80557F4();
+ }
+ }
+ break;
+ case 18:
+ if (sub_8055660(a3) == 1)
+ {
+ gUnknown_03000580[a1] = 0x81;
+ if (a3->b)
+ {
+ sub_80543DC(sub_80553E4);
+ sub_8055824();
+ }
+ }
+ break;
+ case 25:
+ script = sub_805568C(a3);
+ if (script)
+ {
+ gUnknown_03000580[a1] = 0x81;
+ if (a3->b)
+ {
+ sub_80543DC(sub_80553E4);
+ sub_8055840(script);
+ }
+ }
+ break;
+ case 27:
+ if (sub_8055618(a3))
+ {
+ gUnknown_03000580[a1] = 0x81;
+ if (a3->b)
+ {
+ sub_80543DC(sub_8055408);
+ sub_80557E8();
+ }
+ }
+ break;
+ case 28:
+ if (sub_8055618(a3))
+ {
+ gUnknown_03000580[a1] = 0x81;
+ if (a3->b)
+ {
+ sub_80543DC(sub_8055438);
+ sub_80557E8();
+ }
+ }
+ break;
+ }
+ }
+
+ switch (a2)
+ {
+ case 23:
+ gUnknown_03000580[a1] = 0x83;
+ break;
+ case 22:
+ gUnknown_03000580[a1] = 0x82;
+ break;
+ case 26:
+ gUnknown_03000580[a1] = 0x80;
+ if (a3->b)
+ sub_80543DC(sub_8055390);
+ break;
+ case 29:
+ if (gUnknown_03000580[a1] == 0x82)
+ gUnknown_03000580[a1] = 0x81;
+ break;
+ }
+}
+
+void sub_8055218(u16 *a1, int a2)
+{
+ struct UnkStruct_8054FF8 st;
+ int i;
+ for (i = 0; i < 4; i++)
+ {
+ u16 v5 = a1[i];
+ u16 v8 = 0;
+ sub_80555B0(i, a2, &st);
+ sub_8054FF8(i, v5, &st, &v8);
+ if (gUnknown_03000580[i] == 0x80)
+ v8 = sub_805530C(v5);
+ sub_8055BFC(i, v8);
+ }
+}
+
+void sub_8055280(u16 a1)
+{
+ if (a1 >= 17 && a1 < 30)
+ word_3004858 = a1;
+ else
+ word_3004858 = 17;
+}
+
+u16 sub_80552B0(u32 a1)
+{
+ if (gMain.heldKeys & 0x40)
+ {
+ return 19;
+ }
+ else if (gMain.heldKeys & 0x80)
+ {
+ return 18;
+ }
+ else if (gMain.heldKeys & 0x20)
+ {
+ return 20;
+ }
+ else if (gMain.heldKeys & 0x10)
+ {
+ return 21;
+ }
+ else if (gMain.newKeys & 8)
+ {
+ return 24;
+ }
+ else if (gMain.newKeys & 1)
+ {
+ return 25;
+ }
+ else
+ {
+ return 17;
+ }
+}
+
+u16 sub_805530C(u16 a1)
+{
+ switch (a1)
+ {
+ case 21:
+ return 4;
+ case 20:
+ return 3;
+ case 19:
+ return 1;
+ case 18:
+ return 2;
+ default:
+ return 0;
+ }
+}
+
+void sub_8055340(u16 *a1)
+{
+ int i;
+ for (i = 0; i < 4; i++)
+ a1[i] = 17;
+}
+
+void sub_8055354(void)
+{
+ u8 val = gUnknown_03004860;
+ sub_8055218(word_3002910, val);
+ sub_8055280(gUnknown_03000584(val));
+ sub_8055340(word_3002910);
+}
+
+u16 sub_8055390(u32 a1)
+{
+ if (ScriptContext2_IsEnabled() == 1)
+ return 17;
+ if (gLink.recvQueue.count > 4)
+ return 27;
+ if (gLink.sendQueue.count <= 4)
+ return sub_80552B0(a1);
+ return 28;
+}
+
+u16 sub_80553E0(u32 a1)
+{
+ return 17;
+}
+
+u16 sub_80553E4(u32 a1)
+{
+ u16 retVal;
+ if (ScriptContext2_IsEnabled() == 1)
+ {
+ retVal = 17;
+ }
+ else
+ {
+ retVal = 26;
+ sub_80543DC(sub_80553E0);
+ }
+ return retVal;
+}
+
+u16 sub_8055408(u32 a1)
+{
+ u16 retVal;
+ if (gLink.recvQueue.count > 2)
+ {
+ retVal = 17;
+ }
+ else
+ {
+ retVal = 26;
+ ScriptContext2_Disable();
+ sub_80543DC(sub_80553E0);
+ }
+ return retVal;
+}
+
+u16 sub_8055438(u32 a1)
+{
+ u16 retVal;
+ if (gLink.sendQueue.count > 2)
+ {
+ retVal = 17;
+ }
+ else
+ {
+ retVal = 26;
+ ScriptContext2_Disable();
+ sub_80543DC(sub_80553E0);
+ }
+ return retVal;
+}
+
+u16 sub_8055468(u16 a1)
+{
+ return 17;
+}