diff options
-rw-r--r-- | asm/mystery_event_script.s | 175 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/mystery_event_script.c | 97 |
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; +} |