summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2019-01-06 07:54:57 -0500
committerPikalaxALT <pikalaxalt@gmail.com>2019-01-06 07:54:57 -0500
commitd2538cffa03a21aca4e116971a7eb8b760f98ce0 (patch)
tree06d7f0a06a7deefd84ff38ba53c458abe08e0c65
parent0eba7e0870f3f7e51b69a1f1a7e1e436a977f78b (diff)
through ScrCmd_copyvar
-rw-r--r--asm/scrcmd.s234
-rw-r--r--include/script.h2
-rw-r--r--src/scrcmd.c96
-rw-r--r--src/script.c6
4 files changed, 101 insertions, 237 deletions
diff --git a/asm/scrcmd.s b/asm/scrcmd.s
index a4eaeb55b..b1fe31de5 100644
--- a/asm/scrcmd.s
+++ b/asm/scrcmd.s
@@ -5,240 +5,6 @@
.text
- thumb_func_start ScrCmd_gotoram
-ScrCmd_gotoram: @ 806A248
- push {lr}
- ldr r1, _0806A258 @ =gUnknown_20370A4
- ldr r1, [r1]
- bl ScriptJump
- movs r0, 0
- pop {r1}
- bx r1
- .align 2, 0
-_0806A258: .4byte gUnknown_20370A4
- thumb_func_end ScrCmd_gotoram
-
- thumb_func_start ScrCmd_killscript
-ScrCmd_killscript: @ 806A25C
- push {r4,lr}
- adds r4, r0, 0
- bl ClearRamScript
- adds r0, r4, 0
- bl StopScript
- movs r0, 0x1
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end ScrCmd_killscript
-
- thumb_func_start ScrCmd_setmysteryeventstatus
-ScrCmd_setmysteryeventstatus: @ 806A274
- push {lr}
- ldr r1, [r0, 0x8]
- ldrb r2, [r1]
- adds r1, 0x1
- str r1, [r0, 0x8]
- adds r0, r2, 0
- bl SetMysteryEventScriptStatus
- movs r0, 0
- pop {r1}
- bx r1
- thumb_func_end ScrCmd_setmysteryeventstatus
-
- thumb_func_start sub_806A28C
-sub_806A28C: @ 806A28C
- push {r4,lr}
- adds r4, r0, 0
- bl sub_8069E48
- adds r2, r0, 0
- cmp r2, 0
- beq _0806A2A8
- ldr r1, _0806A2B0 @ =gUnknown_20370A4
- ldr r0, [r4, 0x8]
- str r0, [r1]
- adds r0, r4, 0
- adds r1, r2, 0
- bl ScriptJump
-_0806A2A8:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0806A2B0: .4byte gUnknown_20370A4
- thumb_func_end sub_806A28C
-
- thumb_func_start ScrCmd_loadword
-ScrCmd_loadword: @ 806A2B4
- push {r4,r5,lr}
- adds r4, r0, 0
- ldr r0, [r4, 0x8]
- ldrb r5, [r0]
- adds r0, 0x1
- str r0, [r4, 0x8]
- adds r0, r4, 0
- bl ScriptReadWord
- lsls r5, 2
- adds r4, 0x64
- adds r4, r5
- str r0, [r4]
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end ScrCmd_loadword
-
- thumb_func_start ScrCmd_loadbytefromaddr
-ScrCmd_loadbytefromaddr: @ 806A2D8
- push {r4,r5,lr}
- adds r4, r0, 0
- ldr r0, [r4, 0x8]
- ldrb r5, [r0]
- adds r0, 0x1
- str r0, [r4, 0x8]
- adds r0, r4, 0
- bl ScriptReadWord
- lsls r5, 2
- adds r4, 0x64
- adds r4, r5
- ldrb r0, [r0]
- str r0, [r4]
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end ScrCmd_loadbytefromaddr
-
- thumb_func_start ScrCmd_writebytetoaddr
-ScrCmd_writebytetoaddr: @ 806A2FC
- push {r4,lr}
- ldr r1, [r0, 0x8]
- ldrb r4, [r1]
- adds r1, 0x1
- str r1, [r0, 0x8]
- bl ScriptReadWord
- strb r4, [r0]
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end ScrCmd_writebytetoaddr
-
- thumb_func_start ScrCmd_loadbyte
-ScrCmd_loadbyte: @ 806A314
- ldr r1, [r0, 0x8]
- ldrb r3, [r1]
- adds r1, 0x1
- str r1, [r0, 0x8]
- lsls r3, 2
- adds r2, r0, 0
- adds r2, 0x64
- adds r2, r3
- ldrb r3, [r1]
- str r3, [r2]
- adds r1, 0x1
- str r1, [r0, 0x8]
- movs r0, 0
- bx lr
- thumb_func_end ScrCmd_loadbyte
-
- thumb_func_start ScrCmd_setptrbyte
-ScrCmd_setptrbyte: @ 806A330
- push {r4,r5,lr}
- adds r4, r0, 0
- ldr r0, [r4, 0x8]
- ldrb r5, [r0]
- adds r0, 0x1
- str r0, [r4, 0x8]
- adds r0, r4, 0
- bl ScriptReadWord
- lsls r5, 2
- adds r4, 0x64
- adds r4, r5
- ldr r1, [r4]
- strb r1, [r0]
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end ScrCmd_setptrbyte
-
- thumb_func_start ScrCmd_copylocal
-ScrCmd_copylocal: @ 806A354
- ldr r1, [r0, 0x8]
- ldrb r3, [r1]
- adds r1, 0x1
- str r1, [r0, 0x8]
- ldrb r2, [r1]
- adds r1, 0x1
- str r1, [r0, 0x8]
- lsls r3, 2
- adds r0, 0x64
- adds r3, r0, r3
- lsls r2, 2
- adds r0, r2
- ldr r0, [r0]
- str r0, [r3]
- movs r0, 0
- bx lr
- thumb_func_end ScrCmd_copylocal
-
- thumb_func_start ScrCmd_copybyte
-ScrCmd_copybyte: @ 806A374
- push {r4,r5,lr}
- adds r4, r0, 0
- bl ScriptReadWord
- adds r5, r0, 0
- adds r0, r4, 0
- bl ScriptReadWord
- ldrb r0, [r0]
- strb r0, [r5]
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end ScrCmd_copybyte
-
- thumb_func_start ScrCmd_setvar
-ScrCmd_setvar: @ 806A390
- push {r4,r5,lr}
- adds r5, r0, 0
- bl ScriptReadHalfword
- lsls r0, 16
- lsrs r0, 16
- bl GetVarPointer
- adds r4, r0, 0
- adds r0, r5, 0
- bl ScriptReadHalfword
- strh r0, [r4]
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end ScrCmd_setvar
-
- thumb_func_start ScrCmd_copyvar
-ScrCmd_copyvar: @ 806A3B4
- push {r4,r5,lr}
- adds r4, r0, 0
- bl ScriptReadHalfword
- lsls r0, 16
- lsrs r0, 16
- bl GetVarPointer
- adds r5, r0, 0
- adds r0, r4, 0
- bl ScriptReadHalfword
- lsls r0, 16
- lsrs r0, 16
- bl GetVarPointer
- ldrh r0, [r0]
- strh r0, [r5]
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end ScrCmd_copyvar
-
thumb_func_start ScrCmd_setorcopyvar
ScrCmd_setorcopyvar: @ 806A3E0
push {r4,r5,lr}
diff --git a/include/script.h b/include/script.h
index ebb4caa86..acd88adf3 100644
--- a/include/script.h
+++ b/include/script.h
@@ -66,4 +66,6 @@ bool32 sub_8069DFC(void);
void sub_8069EA4(u8 * script, u16 scriptSize);
u8 * sub_8069E48(void);
+extern const u8 *gRAMScriptPtr;
+
#endif // GUARD_SCRIPT_H
diff --git a/src/scrcmd.c b/src/scrcmd.c
index bb8d969c1..20f1dbc3b 100644
--- a/src/scrcmd.c
+++ b/src/scrcmd.c
@@ -1,6 +1,7 @@
#include "global.h"
#include "gba/isagbprint.h"
#include "script.h"
+#include "mystery_event_script.h"
#include "event_data.h"
extern u16 (*const gSpecials[])(void);
@@ -215,6 +216,101 @@ SCRCMD_DEF(ScrCmd_callstd_if)
return FALSE;
}
+SCRCMD_DEF(ScrCmd_gotoram)
+{
+ ScriptJump(ctx, gRAMScriptPtr);
+ return FALSE;
+}
+
+SCRCMD_DEF(ScrCmd_killscript)
+{
+ ClearRamScript();
+ StopScript(ctx);
+ return TRUE;
+}
+
+SCRCMD_DEF(ScrCmd_setmysteryeventstatus)
+{
+ SetMysteryEventScriptStatus(ScriptReadByte(ctx));
+ return FALSE;
+}
+
+SCRCMD_DEF(sub_806A28C)
+{
+ const u8 * script = sub_8069E48();
+ if (script != NULL)
+ {
+ gRAMScriptPtr = ctx->scriptPtr;
+ ScriptJump(ctx, script);
+ }
+ return FALSE;
+}
+
+SCRCMD_DEF(ScrCmd_loadword)
+{
+ u8 which = ScriptReadByte(ctx);
+ ctx->data[which] = ScriptReadWord(ctx);
+ return FALSE;
+}
+
+SCRCMD_DEF(ScrCmd_loadbytefromaddr)
+{
+ u8 which = ScriptReadByte(ctx);
+ ctx->data[which] = *(const u8 *)ScriptReadWord(ctx);
+ return FALSE;
+}
+
+SCRCMD_DEF(ScrCmd_writebytetoaddr)
+{
+ u8 value = ScriptReadByte(ctx);
+ *(u8 *)ScriptReadWord(ctx) = value;
+ return FALSE;
+}
+
+SCRCMD_DEF(ScrCmd_loadbyte)
+{
+ u8 which = ScriptReadByte(ctx);
+ ctx->data[which] = ScriptReadByte(ctx);
+ return FALSE;
+}
+
+SCRCMD_DEF(ScrCmd_setptrbyte)
+{
+ u8 which = ScriptReadByte(ctx);
+ *(u8 *)ScriptReadWord(ctx) = ctx->data[which];
+ return FALSE;
+}
+
+SCRCMD_DEF(ScrCmd_copylocal)
+{
+ u8 whichDst = ScriptReadByte(ctx);
+ u8 whichSrc = ScriptReadByte(ctx);
+ ctx->data[whichDst] = ctx->data[whichSrc];
+ return FALSE;
+}
+
+SCRCMD_DEF(ScrCmd_copybyte)
+{
+ u8 * dest = (u8 *)ScriptReadWord(ctx);
+ *dest = *(const u8 *)ScriptReadWord(ctx);
+ return FALSE;
+}
+
+SCRCMD_DEF(ScrCmd_setvar)
+{
+ u16 * varPtr = GetVarPointer(ScriptReadHalfword(ctx));
+ *varPtr = ScriptReadHalfword(ctx);
+ return FALSE;
+}
+
+SCRCMD_DEF(ScrCmd_copyvar)
+{
+ u16 * destPtr = GetVarPointer(ScriptReadHalfword(ctx));
+ u16 * srcPtr = GetVarPointer(ScriptReadHalfword(ctx));
+ *destPtr = *srcPtr;
+ return FALSE;
+}
+
u8 * const sScriptStringVars[] =
{
gStringVar1,
diff --git a/src/script.c b/src/script.c
index 59ef4e579..d7246752c 100644
--- a/src/script.c
+++ b/src/script.c
@@ -19,7 +19,7 @@ enum
};
EWRAM_DATA u8 gUnknown_20370A0 = 0;
-EWRAM_DATA u8 *gUnknown_20370A4 = NULL;
+EWRAM_DATA const u8 *gRAMScriptPtr = NULL;
// ewram bss
/*IWRAM_DATA*/ static u8 sScriptContext1Status;
@@ -485,7 +485,7 @@ bool8 InitRamScript(u8 *script, u16 scriptSize, u8 mapGroup, u8 mapNum, u8 objec
u8 *GetRamScript(u8 objectId, u8 *script)
{
struct RamScriptData *scriptData = &gSaveBlock1Ptr->ramScript.data;
- gUnknown_20370A4 = NULL;
+ gRAMScriptPtr = NULL;
if (scriptData->magic != RAM_SCRIPT_MAGIC)
return script;
if (scriptData->mapGroup != gSaveBlock1Ptr->location.mapGroup)
@@ -501,7 +501,7 @@ u8 *GetRamScript(u8 objectId, u8 *script)
}
else
{
- gUnknown_20370A4 = script;
+ gRAMScriptPtr = script;
return scriptData->script;
}
}