summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/mystery_event_script.s175
-rw-r--r--ld_script.txt1
-rw-r--r--src/mystery_event_script.c97
3 files changed, 98 insertions, 175 deletions
diff --git a/asm/mystery_event_script.s b/asm/mystery_event_script.s
index 4b8717bac..d182ebd87 100644
--- a/asm/mystery_event_script.s
+++ b/asm/mystery_event_script.s
@@ -6,181 +6,6 @@
.text
- thumb_func_start sub_8126098
-sub_8126098: @ 8126098
- push {r4,lr}
- adds r4, r3, 0
- lsls r0, 16
- lsrs r0, 16
- lsls r2, 16
- lsrs r2, 16
- movs r3, 0x2
- ands r0, r3
- cmp r0, 0
- beq _081260C6
- ands r1, r3
- cmp r1, 0
- beq _081260C6
- movs r0, 0x4
- ands r2, r0
- cmp r2, 0
- beq _081260C6
- movs r0, 0x80
- .ifdef SAPPHIRE
- lsls r0, 1 @ unknown difference
- .endif
- ands r0, r4
- cmp r0, 0
- beq _081260C6
- movs r0, 0x1
- b _081260C8
-_081260C6:
- movs r0, 0
-_081260C8:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8126098
-
- thumb_func_start sub_81260D0
-sub_81260D0: @ 81260D0
- push {lr}
- ldr r0, _081260E4 @ =gStringVar4
- ldr r1, _081260E8 @ =gOtherText_DataCannotUseVersion
- bl StringExpandPlaceholders
- movs r0, 0x3
- bl sub_8126160
- pop {r0}
- bx r0
- .align 2, 0
-_081260E4: .4byte gStringVar4
-_081260E8: .4byte gOtherText_DataCannotUseVersion
- thumb_func_end sub_81260D0
-
- thumb_func_start sub_81260EC
-sub_81260EC: @ 81260EC
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- ldr r1, _08126114 @ =gScriptFuncs
- ldr r2, _08126118 @ =gScriptFuncs_End
- bl InitScriptContext
- adds r0, r4, 0
- adds r1, r5, 0
- bl SetupBytecodeScript
- str r5, [r4, 0x64]
- movs r0, 0
- str r0, [r4, 0x68]
- str r0, [r4, 0x6C]
- str r0, [r4, 0x70]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08126114: .4byte gScriptFuncs
-_08126118: .4byte gScriptFuncs_End
- thumb_func_end sub_81260EC
-
- thumb_func_start sub_812611C
-sub_812611C: @ 812611C
- push {r4,lr}
- adds r4, r0, 0
- bl RunScript
- lsls r0, 24
- cmp r0, 0
- beq _08126134
- ldr r0, [r4, 0x70]
- cmp r0, 0
- beq _08126134
- movs r0, 0x1
- b _08126136
-_08126134:
- movs r0, 0
-_08126136:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_812611C
-
- thumb_func_start sub_812613C
-sub_812613C: @ 812613C
- push {r4,lr}
- adds r1, r0, 0
- ldr r4, _0812615C @ =gUnknown_02039288
- adds r0, r4, 0
- bl sub_81260EC
-_08126148:
- adds r0, r4, 0
- bl sub_812611C
- cmp r0, 0
- bne _08126148
- ldr r0, [r4, 0x6C]
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0812615C: .4byte gUnknown_02039288
- thumb_func_end sub_812613C
-
- thumb_func_start sub_8126160
-sub_8126160: @ 8126160
- ldr r1, _08126168 @ =gUnknown_02039288
- str r0, [r1, 0x6C]
- bx lr
- .align 2, 0
-_08126168: .4byte gUnknown_02039288
- thumb_func_end sub_8126160
-
- thumb_func_start sub_812616C
-sub_812616C: @ 812616C
- push {r4,lr}
- adds r4, r0, 0
- movs r3, 0
- movs r2, 0
- cmp r3, r1
- bcs _08126184
-_08126178:
- adds r0, r4, r2
- ldrb r0, [r0]
- adds r3, r0
- adds r2, 0x1
- cmp r2, r1
- bcc _08126178
-_08126184:
- adds r0, r3, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_812616C
-
- thumb_func_start sub_812618C
-sub_812618C: @ 812618C
- adds r2, r0, 0
- ldrb r0, [r2]
- ldrb r1, [r2, 0x1]
- lsls r1, 8
- orrs r0, r1
- ldrb r1, [r2, 0x2]
- lsls r1, 16
- orrs r0, r1
- ldrb r1, [r2, 0x3]
- lsls r1, 24
- orrs r0, r1
- bx lr
- thumb_func_end sub_812618C
-
- thumb_func_start sub_81261A4
-sub_81261A4: @ 81261A4
- strb r1, [r0]
- lsrs r2, r1, 8
- strb r2, [r0, 0x1]
- lsrs r2, r1, 16
- strb r2, [r0, 0x2]
- lsrs r1, 24
- strb r1, [r0, 0x3]
- bx lr
- thumb_func_end sub_81261A4
-
thumb_func_start unref_sub_81261B4
unref_sub_81261B4: @ 81261B4
push {r4-r7,lr}
diff --git a/ld_script.txt b/ld_script.txt
index 73d164ffd..c44f946ad 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -186,6 +186,7 @@ SECTIONS {
asm/cable_car_util.o(.text);
asm/unused_8124F94.o(.text);
src/save.o(.text);
+ src/mystery_event_script.o(.text);
asm/mystery_event_script.o(.text);
asm/field_effect_helpers.o(.text);
asm/contest_ai.o(.text);
diff --git a/src/mystery_event_script.c b/src/mystery_event_script.c
new file mode 100644
index 000000000..4aa3784d7
--- /dev/null
+++ b/src/mystery_event_script.c
@@ -0,0 +1,97 @@
+#include "global.h"
+#include "script.h"
+#include "string_util.h"
+
+#ifdef SAPPHIRE
+#define UNK_MASK 0x100
+#else
+#define UNK_MASK 0x80
+#endif
+
+extern struct ScriptContext gUnknown_02039288;
+
+extern ScrCmdFunc gScriptFuncs[];
+extern ScrCmdFunc gScriptFuncs_End[];
+
+extern u8 gOtherText_DataCannotUseVersion[];
+
+void sub_8126160(u32 val);
+
+bool32 sub_8126098(u16 a1, u32 a2, u16 a3, u32 a4)
+{
+ if (!(a1 & 0x2))
+ return FALSE;
+
+ if (!(a2 & 0x2))
+ return FALSE;
+
+ if (!(a3 & 0x4))
+ return FALSE;
+
+ if (!(a4 & UNK_MASK))
+ return FALSE;
+
+ return TRUE;
+}
+
+void sub_81260D0(void)
+{
+ StringExpandPlaceholders(gStringVar4, gOtherText_DataCannotUseVersion);
+ sub_8126160(3);
+}
+
+void sub_81260EC(struct ScriptContext *ctx, u8 *ptr)
+{
+ InitScriptContext(ctx, gScriptFuncs, gScriptFuncs_End);
+ SetupBytecodeScript(ctx, ptr);
+ ctx->data[0] = (u32)ptr;
+ ctx->data[1] = 0;
+ ctx->data[2] = 0;
+ ctx->data[3] = 0;
+}
+
+bool32 sub_812611C(struct ScriptContext *ctx)
+{
+ if (RunScript(ctx) && ctx->data[3])
+ return TRUE;
+ else
+ return FALSE;
+}
+
+u32 sub_812613C(u8 *ptr)
+{
+ struct ScriptContext *ctx = &gUnknown_02039288;
+ sub_81260EC(ctx, ptr);
+ while (sub_812611C(ctx))
+ ;
+ return ctx->data[2];
+}
+
+void sub_8126160(u32 val)
+{
+ gUnknown_02039288.data[2] = val;
+}
+
+int sub_812616C(u8 *a1, int a2)
+{
+ unsigned int i;
+ int sum = 0;
+
+ for (i = 0; i < a2; i++)
+ sum += a1[i];
+
+ return sum;
+}
+
+u32 sub_812618C(u8 *ptr)
+{
+ return ptr[0] | (ptr[1] << 8) | (ptr[2] << 16) | (ptr[3] << 24);
+}
+
+void sub_81261A4(u8 *ptr, u32 val)
+{
+ ptr[0] = val;
+ ptr[1] = val >> 8;
+ ptr[2] = val >> 16;
+ ptr[3] = val >> 24;
+}