summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2019-01-05 23:13:12 -0500
committerPikalaxALT <pikalaxalt@gmail.com>2019-01-05 23:13:12 -0500
commit0eba7e0870f3f7e51b69a1f1a7e1e436a977f78b (patch)
tree14da862b82c3b69eb229122876c40d8891db263e
parent103789770b635610ee1c04ed923fdcc7298f878e (diff)
Start porting scrcmd from emerald
-rw-r--r--asm/scrcmd.s546
-rw-r--r--data/data_835B488.s18
-rw-r--r--data/event_scripts.s2
-rw-r--r--data/script_cmd_table.inc12
-rw-r--r--ld_script.txt3
-rw-r--r--src/scrcmd.c223
-rw-r--r--sym_ewram.txt24
7 files changed, 266 insertions, 562 deletions
diff --git a/asm/scrcmd.s b/asm/scrcmd.s
index e8ffcf3ab..a4eaeb55b 100644
--- a/asm/scrcmd.s
+++ b/asm/scrcmd.s
@@ -5,492 +5,6 @@
.text
- thumb_func_start sub_8069ED0
-sub_8069ED0: @ 8069ED0
- movs r0, 0
- bx lr
- thumb_func_end sub_8069ED0
-
- thumb_func_start sub_8069ED4
-sub_8069ED4: @ 8069ED4
- movs r0, 0
- bx lr
- thumb_func_end sub_8069ED4
-
- thumb_func_start ScrCmd_end
-ScrCmd_end: @ 8069ED8
- push {lr}
- bl StopScript
- movs r0, 0
- pop {r1}
- bx r1
- thumb_func_end ScrCmd_end
-
- thumb_func_start ScrCmd_gotonative
-ScrCmd_gotonative: @ 8069EE4
- push {r4,lr}
- adds r4, r0, 0
- bl ScriptReadWord
- adds r1, r0, 0
- adds r0, r4, 0
- bl SetupNativeScript
- movs r0, 0x1
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end ScrCmd_gotonative
-
- thumb_func_start sub_8069EFC
-sub_8069EFC: @ 8069EFC
- push {lr}
- bl ScriptReadHalfword
- lsls r0, 16
- lsrs r0, 14
- ldr r1, _08069F18 @ =gSpecials
- adds r1, r0, r1
- ldr r0, _08069F1C @ =gStdScripts
- cmp r1, r0
- bcs _08069F20
- ldr r0, [r1]
- bl _call_via_r0
- b _08069F2C
- .align 2, 0
-_08069F18: .4byte gSpecials
-_08069F1C: .4byte gStdScripts
-_08069F20:
- ldr r0, _08069F34 @ =gUnknown_83A725C "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/scrcmd.c"
- ldr r2, _08069F38 @ =gUnknown_83A7290 "0"
- movs r1, 0xF1
- movs r3, 0x1
- bl AGBAssert
-_08069F2C:
- movs r0, 0
- pop {r1}
- bx r1
- .align 2, 0
-_08069F34: .4byte gUnknown_83A725C
-_08069F38: .4byte gUnknown_83A7290
- thumb_func_end sub_8069EFC
-
- thumb_func_start sub_8069F3C
-sub_8069F3C: @ 8069F3C
- 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, 14
- ldr r1, _08069F6C @ =gSpecials
- adds r1, r0, r1
- ldr r0, _08069F70 @ =gStdScripts
- cmp r1, r0
- bcs _08069F74
- ldr r0, [r1]
- bl _call_via_r0
- strh r0, [r5]
- b _08069F80
- .align 2, 0
-_08069F6C: .4byte gSpecials
-_08069F70: .4byte gStdScripts
-_08069F74:
- ldr r0, _08069F88 @ =gUnknown_83A725C "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/scrcmd.c"
- ldr r1, _08069F8C @ =0x00000107
- ldr r2, _08069F90 @ =gUnknown_83A7290 "0"
- movs r3, 0x1
- bl AGBAssert
-_08069F80:
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_08069F88: .4byte gUnknown_83A725C
-_08069F8C: .4byte 0x00000107
-_08069F90: .4byte gUnknown_83A7290
- thumb_func_end sub_8069F3C
-
- thumb_func_start ScrCmd_callnative
-ScrCmd_callnative: @ 8069F94
- push {lr}
- bl ScriptReadWord
- bl _call_via_r0
- movs r0, 0
- pop {r1}
- bx r1
- thumb_func_end ScrCmd_callnative
-
- thumb_func_start sub_8069FA4
-sub_8069FA4: @ 8069FA4
- push {lr}
- bl ScriptContext1_Stop
- movs r0, 0x1
- pop {r1}
- bx r1
- thumb_func_end sub_8069FA4
-
- thumb_func_start ScrCmd_goto
-ScrCmd_goto: @ 8069FB0
- push {r4,lr}
- adds r4, r0, 0
- bl ScriptReadWord
- adds r1, r0, 0
- adds r0, r4, 0
- bl ScriptJump
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end ScrCmd_goto
-
- thumb_func_start ScrCmd_return
-ScrCmd_return: @ 8069FC8
- push {lr}
- bl ScriptReturn
- movs r0, 0
- pop {r1}
- bx r1
- thumb_func_end ScrCmd_return
-
- thumb_func_start ScrCmd_call
-ScrCmd_call: @ 8069FD4
- push {r4,lr}
- adds r4, r0, 0
- bl ScriptReadWord
- adds r1, r0, 0
- adds r0, r4, 0
- bl ScriptCall
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end ScrCmd_call
-
- thumb_func_start ScrCmd_goto_if
-ScrCmd_goto_if: @ 8069FEC
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r0, [r5, 0x8]
- ldrb r4, [r0]
- adds r0, 0x1
- str r0, [r5, 0x8]
- adds r0, r5, 0
- bl ScriptReadWord
- adds r2, r0, 0
- ldr r1, _0806A024 @ =gUnknown_83A7248
- lsls r0, r4, 1
- adds r0, r4
- ldrb r3, [r5, 0x2]
- adds r0, r3
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _0806A01A
- adds r0, r5, 0
- adds r1, r2, 0
- bl ScriptJump
-_0806A01A:
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0806A024: .4byte gUnknown_83A7248
- thumb_func_end ScrCmd_goto_if
-
- thumb_func_start ScrCmd_call_if
-ScrCmd_call_if: @ 806A028
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r0, [r5, 0x8]
- ldrb r4, [r0]
- adds r0, 0x1
- str r0, [r5, 0x8]
- adds r0, r5, 0
- bl ScriptReadWord
- adds r2, r0, 0
- ldr r1, _0806A060 @ =gUnknown_83A7248
- lsls r0, r4, 1
- adds r0, r4
- ldrb r3, [r5, 0x2]
- adds r0, r3
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _0806A056
- adds r0, r5, 0
- adds r1, r2, 0
- bl ScriptCall
-_0806A056:
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0806A060: .4byte gUnknown_83A7248
- thumb_func_end ScrCmd_call_if
-
- thumb_func_start ScrCmd_setvaddress
-ScrCmd_setvaddress: @ 806A064
- push {r4,lr}
- ldr r4, [r0, 0x8]
- subs r4, 0x1
- bl ScriptReadWord
- ldr r1, _0806A07C @ =gUnknown_20370A8
- subs r0, r4
- str r0, [r1]
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0806A07C: .4byte gUnknown_20370A8
- thumb_func_end ScrCmd_setvaddress
-
- thumb_func_start ScrCmd_vgoto
-ScrCmd_vgoto: @ 806A080
- push {r4,lr}
- adds r4, r0, 0
- bl ScriptReadWord
- adds r1, r0, 0
- ldr r0, _0806A0A0 @ =gUnknown_20370A8
- ldr r0, [r0]
- subs r1, r0
- adds r0, r4, 0
- bl ScriptJump
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0806A0A0: .4byte gUnknown_20370A8
- thumb_func_end ScrCmd_vgoto
-
- thumb_func_start ScrCmd_vcall
-ScrCmd_vcall: @ 806A0A4
- push {r4,lr}
- adds r4, r0, 0
- bl ScriptReadWord
- adds r1, r0, 0
- ldr r0, _0806A0C4 @ =gUnknown_20370A8
- ldr r0, [r0]
- subs r1, r0
- adds r0, r4, 0
- bl ScriptCall
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0806A0C4: .4byte gUnknown_20370A8
- thumb_func_end ScrCmd_vcall
-
- thumb_func_start ScrCmd_vgoto_if
-ScrCmd_vgoto_if: @ 806A0C8
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r0, [r5, 0x8]
- ldrb r4, [r0]
- adds r0, 0x1
- str r0, [r5, 0x8]
- adds r0, r5, 0
- bl ScriptReadWord
- ldr r1, _0806A104 @ =gUnknown_20370A8
- ldr r1, [r1]
- subs r2, r0, r1
- ldr r1, _0806A108 @ =gUnknown_83A7248
- lsls r0, r4, 1
- adds r0, r4
- ldrb r3, [r5, 0x2]
- adds r0, r3
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _0806A0FA
- adds r0, r5, 0
- adds r1, r2, 0
- bl ScriptJump
-_0806A0FA:
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0806A104: .4byte gUnknown_20370A8
-_0806A108: .4byte gUnknown_83A7248
- thumb_func_end ScrCmd_vgoto_if
-
- thumb_func_start ScrCmd_vcall_if
-ScrCmd_vcall_if: @ 806A10C
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r0, [r5, 0x8]
- ldrb r4, [r0]
- adds r0, 0x1
- str r0, [r5, 0x8]
- adds r0, r5, 0
- bl ScriptReadWord
- ldr r1, _0806A148 @ =gUnknown_20370A8
- ldr r1, [r1]
- subs r2, r0, r1
- ldr r1, _0806A14C @ =gUnknown_83A7248
- lsls r0, r4, 1
- adds r0, r4
- ldrb r3, [r5, 0x2]
- adds r0, r3
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _0806A13E
- adds r0, r5, 0
- adds r1, r2, 0
- bl ScriptCall
-_0806A13E:
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0806A148: .4byte gUnknown_20370A8
-_0806A14C: .4byte gUnknown_83A7248
- thumb_func_end ScrCmd_vcall_if
-
- thumb_func_start ScrCmd_gotostd
-ScrCmd_gotostd: @ 806A150
- push {lr}
- adds r2, r0, 0
- ldr r0, [r2, 0x8]
- ldrb r1, [r0]
- adds r0, 0x1
- str r0, [r2, 0x8]
- lsls r1, 2
- ldr r0, _0806A178 @ =gStdScripts
- adds r1, r0
- ldr r0, _0806A17C @ =gUnknown_8160478
- cmp r1, r0
- bcs _0806A170
- ldr r1, [r1]
- adds r0, r2, 0
- bl ScriptJump
-_0806A170:
- movs r0, 0
- pop {r1}
- bx r1
- .align 2, 0
-_0806A178: .4byte gStdScripts
-_0806A17C: .4byte gUnknown_8160478
- thumb_func_end ScrCmd_gotostd
-
- thumb_func_start ScrCmd_callstd
-ScrCmd_callstd: @ 806A180
- push {lr}
- adds r2, r0, 0
- ldr r0, [r2, 0x8]
- ldrb r1, [r0]
- adds r0, 0x1
- str r0, [r2, 0x8]
- lsls r1, 2
- ldr r0, _0806A1A8 @ =gStdScripts
- adds r1, r0
- ldr r0, _0806A1AC @ =gUnknown_8160478
- cmp r1, r0
- bcs _0806A1A0
- ldr r1, [r1]
- adds r0, r2, 0
- bl ScriptCall
-_0806A1A0:
- movs r0, 0
- pop {r1}
- bx r1
- .align 2, 0
-_0806A1A8: .4byte gStdScripts
-_0806A1AC: .4byte gUnknown_8160478
- thumb_func_end ScrCmd_callstd
-
- thumb_func_start ScrCmd_gotostd_if
-ScrCmd_gotostd_if: @ 806A1B0
- push {r4,lr}
- adds r3, r0, 0
- ldr r0, [r3, 0x8]
- ldrb r2, [r0]
- adds r0, 0x1
- str r0, [r3, 0x8]
- ldrb r4, [r0]
- adds r0, 0x1
- str r0, [r3, 0x8]
- ldr r1, _0806A1F0 @ =gUnknown_83A7248
- lsls r0, r2, 1
- adds r0, r2
- ldrb r2, [r3, 0x2]
- adds r0, r2
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _0806A1E8
- lsls r0, r4, 2
- ldr r1, _0806A1F4 @ =gStdScripts
- adds r1, r0, r1
- ldr r0, _0806A1F8 @ =gUnknown_8160478
- cmp r1, r0
- bcs _0806A1E8
- ldr r1, [r1]
- adds r0, r3, 0
- bl ScriptJump
-_0806A1E8:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0806A1F0: .4byte gUnknown_83A7248
-_0806A1F4: .4byte gStdScripts
-_0806A1F8: .4byte gUnknown_8160478
- thumb_func_end ScrCmd_gotostd_if
-
- thumb_func_start ScrCmd_callstd_if
-ScrCmd_callstd_if: @ 806A1FC
- push {r4,lr}
- adds r3, r0, 0
- ldr r0, [r3, 0x8]
- ldrb r2, [r0]
- adds r0, 0x1
- str r0, [r3, 0x8]
- ldrb r4, [r0]
- adds r0, 0x1
- str r0, [r3, 0x8]
- ldr r1, _0806A23C @ =gUnknown_83A7248
- lsls r0, r2, 1
- adds r0, r2
- ldrb r2, [r3, 0x2]
- adds r0, r2
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _0806A234
- lsls r0, r4, 2
- ldr r1, _0806A240 @ =gStdScripts
- adds r1, r0, r1
- ldr r0, _0806A244 @ =gUnknown_8160478
- cmp r1, r0
- bcs _0806A234
- ldr r1, [r1]
- adds r0, r3, 0
- bl ScriptCall
-_0806A234:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0806A23C: .4byte gUnknown_83A7248
-_0806A240: .4byte gStdScripts
-_0806A244: .4byte gUnknown_8160478
- thumb_func_end ScrCmd_callstd_if
-
thumb_func_start ScrCmd_gotoram
ScrCmd_gotoram: @ 806A248
push {lr}
@@ -3992,7 +3506,7 @@ _0806BC68: .4byte gSpecialVar_0x8004
ScrCmd_vmessage: @ 806BC6C
push {lr}
bl ScriptReadWord
- ldr r1, _0806BC84 @ =gUnknown_20370A8
+ ldr r1, _0806BC84 @ =gVScriptOffset
ldr r1, [r1]
subs r0, r1
bl ShowFieldMessage
@@ -4000,7 +3514,7 @@ ScrCmd_vmessage: @ 806BC6C
pop {r1}
bx r1
.align 2, 0
-_0806BC84: .4byte gUnknown_20370A8
+_0806BC84: .4byte gVScriptOffset
thumb_func_end ScrCmd_vmessage
thumb_func_start ScrCmd_bufferspeciesname
@@ -4016,7 +3530,7 @@ ScrCmd_bufferspeciesname: @ 806BC88
bl VarGet
lsls r0, 16
lsrs r0, 16
- ldr r1, _0806BCC0 @ =gUnknown_83A7294
+ ldr r1, _0806BCC0 @ =sScriptStringVars
lsls r4, 2
adds r4, r1
ldr r2, [r4]
@@ -4031,7 +3545,7 @@ ScrCmd_bufferspeciesname: @ 806BC88
pop {r1}
bx r1
.align 2, 0
-_0806BCC0: .4byte gUnknown_83A7294
+_0806BCC0: .4byte sScriptStringVars
_0806BCC4: .4byte gSpeciesNames
thumb_func_end ScrCmd_bufferspeciesname
@@ -4042,7 +3556,7 @@ ScrCmd_bufferleadmonspeciesname: @ 806BCC8
ldrb r2, [r1]
adds r1, 0x1
str r1, [r0, 0x8]
- ldr r0, _0806BD08 @ =gUnknown_83A7294
+ ldr r0, _0806BD08 @ =sScriptStringVars
lsls r2, 2
adds r2, r0
ldr r4, [r2]
@@ -4067,7 +3581,7 @@ ScrCmd_bufferleadmonspeciesname: @ 806BCC8
pop {r1}
bx r1
.align 2, 0
-_0806BD08: .4byte gUnknown_83A7294
+_0806BD08: .4byte sScriptStringVars
_0806BD0C: .4byte gPlayerParty
_0806BD10: .4byte gSpeciesNames
thumb_func_end ScrCmd_bufferleadmonspeciesname
@@ -4089,7 +3603,7 @@ ScrCmd_bufferpartymonnick: @ 806BD14
muls r0, r1
ldr r1, _0806BD54 @ =gPlayerParty
adds r0, r1
- ldr r1, _0806BD58 @ =gUnknown_83A7294
+ ldr r1, _0806BD58 @ =sScriptStringVars
lsls r4, 2
adds r4, r1
ldr r4, [r4]
@@ -4104,7 +3618,7 @@ ScrCmd_bufferpartymonnick: @ 806BD14
bx r1
.align 2, 0
_0806BD54: .4byte gPlayerParty
-_0806BD58: .4byte gUnknown_83A7294
+_0806BD58: .4byte sScriptStringVars
thumb_func_end ScrCmd_bufferpartymonnick
thumb_func_start ScrCmd_bufferitemname
@@ -4120,7 +3634,7 @@ ScrCmd_bufferitemname: @ 806BD5C
bl VarGet
lsls r0, 16
lsrs r0, 16
- ldr r1, _0806BD8C @ =gUnknown_83A7294
+ ldr r1, _0806BD8C @ =sScriptStringVars
lsls r4, 2
adds r4, r1
ldr r1, [r4]
@@ -4130,7 +3644,7 @@ ScrCmd_bufferitemname: @ 806BD5C
pop {r1}
bx r1
.align 2, 0
-_0806BD8C: .4byte gUnknown_83A7294
+_0806BD8C: .4byte sScriptStringVars
thumb_func_end ScrCmd_bufferitemname
thumb_func_start sub_806BD90
@@ -4155,7 +3669,7 @@ sub_806BD90: @ 806BD90
bl VarGet
lsls r0, 16
lsrs r6, r0, 16
- ldr r1, _0806BDE4 @ =gUnknown_83A7294
+ ldr r1, _0806BDE4 @ =sScriptStringVars
lsls r0, r7, 2
adds r0, r1
ldr r4, [r0]
@@ -4171,7 +3685,7 @@ sub_806BD90: @ 806BD90
bl StringAppend
b _0806BE22
.align 2, 0
-_0806BDE4: .4byte gUnknown_83A7294
+_0806BDE4: .4byte sScriptStringVars
_0806BDE8: .4byte gUnknown_83A72A0
_0806BDEC:
adds r0, r5, 0
@@ -4182,7 +3696,7 @@ _0806BDEC:
bhi _0806BE22
cmp r6, 0x1
bls _0806BE22
- ldr r0, _0806BE2C @ =gUnknown_83A7294
+ ldr r0, _0806BE2C @ =sScriptStringVars
lsls r1, r7, 2
adds r1, r0
ldr r4, [r1]
@@ -4205,7 +3719,7 @@ _0806BE22:
pop {r1}
bx r1
.align 2, 0
-_0806BE2C: .4byte gUnknown_83A7294
+_0806BE2C: .4byte sScriptStringVars
_0806BE30: .4byte gUnknown_83A72A2
thumb_func_end sub_806BD90
@@ -4237,7 +3751,7 @@ ScrCmd_buffermovename: @ 806BE50
bl VarGet
lsls r0, 16
lsrs r0, 16
- ldr r1, _0806BE88 @ =gUnknown_83A7294
+ ldr r1, _0806BE88 @ =sScriptStringVars
lsls r4, 2
adds r4, r1
ldr r2, [r4]
@@ -4252,7 +3766,7 @@ ScrCmd_buffermovename: @ 806BE50
pop {r1}
bx r1
.align 2, 0
-_0806BE88: .4byte gUnknown_83A7294
+_0806BE88: .4byte sScriptStringVars
_0806BE8C: .4byte gMoveNames
thumb_func_end ScrCmd_buffermovename
@@ -4275,7 +3789,7 @@ ScrCmd_buffernumberstring: @ 806BE90
adds r3, r0, 0
lsls r3, 24
lsrs r3, 24
- ldr r0, _0806BED0 @ =gUnknown_83A7294
+ ldr r0, _0806BED0 @ =sScriptStringVars
lsls r5, 2
adds r5, r0
ldr r0, [r5]
@@ -4287,7 +3801,7 @@ ScrCmd_buffernumberstring: @ 806BE90
pop {r1}
bx r1
.align 2, 0
-_0806BED0: .4byte gUnknown_83A7294
+_0806BED0: .4byte sScriptStringVars
thumb_func_end ScrCmd_buffernumberstring
thumb_func_start ScrCmd_bufferstdstring
@@ -4302,7 +3816,7 @@ ScrCmd_bufferstdstring: @ 806BED4
lsrs r0, 16
bl VarGet
lsls r0, 16
- ldr r1, _0806BF0C @ =gUnknown_83A7294
+ ldr r1, _0806BF0C @ =sScriptStringVars
lsls r4, 2
adds r4, r1
ldr r2, [r4]
@@ -4317,7 +3831,7 @@ ScrCmd_bufferstdstring: @ 806BED4
pop {r1}
bx r1
.align 2, 0
-_0806BF0C: .4byte gUnknown_83A7294
+_0806BF0C: .4byte sScriptStringVars
_0806BF10: .4byte gUnknown_83E06B8
thumb_func_end ScrCmd_bufferstdstring
@@ -4330,7 +3844,7 @@ ScrCmd_bufferstring: @ 806BF14
str r1, [r0, 0x8]
bl ScriptReadWord
adds r1, r0, 0
- ldr r0, _0806BF38 @ =gUnknown_83A7294
+ ldr r0, _0806BF38 @ =sScriptStringVars
lsls r4, 2
adds r4, r0
ldr r0, [r4]
@@ -4340,7 +3854,7 @@ ScrCmd_bufferstring: @ 806BF14
pop {r1}
bx r1
.align 2, 0
-_0806BF38: .4byte gUnknown_83A7294
+_0806BF38: .4byte sScriptStringVars
thumb_func_end ScrCmd_bufferstring
thumb_func_start ScrCmd_vloadword
@@ -4348,7 +3862,7 @@ ScrCmd_vloadword: @ 806BF3C
push {lr}
bl ScriptReadWord
adds r1, r0, 0
- ldr r0, _0806BF58 @ =gUnknown_20370A8
+ ldr r0, _0806BF58 @ =gVScriptOffset
ldr r0, [r0]
subs r1, r0
ldr r0, _0806BF5C @ =gStringVar4
@@ -4357,7 +3871,7 @@ ScrCmd_vloadword: @ 806BF3C
pop {r1}
bx r1
.align 2, 0
-_0806BF58: .4byte gUnknown_20370A8
+_0806BF58: .4byte gVScriptOffset
_0806BF5C: .4byte gStringVar4
thumb_func_end ScrCmd_vloadword
@@ -4370,10 +3884,10 @@ ScrCmd_vbufferstring: @ 806BF60
str r1, [r0, 0x8]
bl ScriptReadWord
adds r1, r0, 0
- ldr r0, _0806BF8C @ =gUnknown_20370A8
+ ldr r0, _0806BF8C @ =gVScriptOffset
ldr r0, [r0]
subs r1, r0
- ldr r0, _0806BF90 @ =gUnknown_83A7294
+ ldr r0, _0806BF90 @ =sScriptStringVars
lsls r4, 2
adds r4, r0
ldr r0, [r4]
@@ -4383,8 +3897,8 @@ ScrCmd_vbufferstring: @ 806BF60
pop {r1}
bx r1
.align 2, 0
-_0806BF8C: .4byte gUnknown_20370A8
-_0806BF90: .4byte gUnknown_83A7294
+_0806BF8C: .4byte gVScriptOffset
+_0806BF90: .4byte sScriptStringVars
thumb_func_end ScrCmd_vbufferstring
thumb_func_start ScrCmd_bufferboxname
@@ -4398,7 +3912,7 @@ ScrCmd_bufferboxname: @ 806BF94
lsls r0, 16
lsrs r0, 16
bl VarGet
- ldr r1, _0806BFCC @ =gUnknown_83A7294
+ ldr r1, _0806BFCC @ =sScriptStringVars
lsls r4, 2
adds r4, r1
ldr r4, [r4]
@@ -4413,7 +3927,7 @@ ScrCmd_bufferboxname: @ 806BF94
pop {r1}
bx r1
.align 2, 0
-_0806BFCC: .4byte gUnknown_83A7294
+_0806BFCC: .4byte sScriptStringVars
thumb_func_end ScrCmd_bufferboxname
thumb_func_start ScrCmd_givemon
diff --git a/data/data_835B488.s b/data/data_835B488.s
index 8d2183672..6e387a536 100644
--- a/data/data_835B488.s
+++ b/data/data_835B488.s
@@ -657,23 +657,7 @@ gUnknown_83A720C:: @ 83A720C
gUnknown_83A7240:: @ 83A7240
.asciz "0"
- .align 2
-gNullScriptPtr:: @ 83A7244
- .incbin "baserom.gba", 0x3A7244, 0x4
-
-gUnknown_83A7248:: @ 83A7248
- .incbin "baserom.gba", 0x3A7248, 0x14
-
-gUnknown_83A725C:: @ 83A725C
- .asciz "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/scrcmd.c"
-
- .align 2
-gUnknown_83A7290:: @ 83A7290
- .asciz "0"
-
- .align 2
-gUnknown_83A7294:: @ 83A7294
- .incbin "baserom.gba", 0x3A7294, 0xC
+ .section .rodata.83A72A0
gUnknown_83A72A0:: @ 83A72A0
.incbin "baserom.gba", 0x3A72A0, 0x2
diff --git a/data/event_scripts.s b/data/event_scripts.s
index 9baa201e5..23f6ad5a9 100644
--- a/data/event_scripts.s
+++ b/data/event_scripts.s
@@ -40,7 +40,7 @@ gStdScripts:: @ 8160450
.4byte gStdScript_81A676C
.4byte gStdScript_81A8E58
.4byte gStdScript_81A4E66
-gStdScripts_End::
+gStdScriptsEnd::
gUnknown_8160478:: @ 8160478
.incbin "baserom.gba", 0x160478, 0x886C
diff --git a/data/script_cmd_table.inc b/data/script_cmd_table.inc
index 29850d685..aee959808 100644
--- a/data/script_cmd_table.inc
+++ b/data/script_cmd_table.inc
@@ -1,8 +1,8 @@
.align 2
gScriptCmdTable:: @ 815F9B4
- .4byte sub_8069ED0
- .4byte sub_8069ED4
+ .4byte ScrCmd_nop
+ .4byte ScrCmd_nop1
.4byte ScrCmd_end
.4byte ScrCmd_return
.4byte ScrCmd_call
@@ -38,9 +38,9 @@ gScriptCmdTable:: @ 815F9B4
.4byte ScrCmd_compare_var_to_var
.4byte ScrCmd_callnative
.4byte ScrCmd_gotonative
- .4byte sub_8069EFC
- .4byte sub_8069F3C
- .4byte sub_8069FA4
+ .4byte ScrCmd_special
+ .4byte ScrCmd_specialvar
+ .4byte ScrCmd_waitstate
.4byte ScrCmd_delay
.4byte ScrCmd_setflag
.4byte ScrCmd_clearflag
@@ -216,4 +216,4 @@ gScriptCmdTable:: @ 815F9B4
.4byte sub_806BD90
gScriptCmdTableEnd:: @ 815FD08
- .4byte sub_8069ED0
+ .4byte ScrCmd_nop
diff --git a/ld_script.txt b/ld_script.txt
index 8d188156b..cdec8f7c6 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -103,6 +103,7 @@ SECTIONS {
asm/map_obj_lock.o(.text);
asm/text_window_graphics.o(.text);
src/script.o(.text);
+ src/scrcmd.o(.text);
asm/scrcmd.o(.text);
asm/field_control_avatar.o(.text);
asm/event_data.o(.text);
@@ -370,6 +371,8 @@ SECTIONS {
src/metatile_behavior.o(.rodata);
data/metatile_behavior.o(.rodata);
data/data_835B488.o(.rodata);
+ src/scrcmd.o(.rodata);
+ data/data_835B488.o(.rodata.83A72A0);
src/battle_ai_script_commands.o(.rodata);
data/data_83F5738.o(.rodata);
src/save.o(.rodata);
diff --git a/src/scrcmd.c b/src/scrcmd.c
new file mode 100644
index 000000000..bb8d969c1
--- /dev/null
+++ b/src/scrcmd.c
@@ -0,0 +1,223 @@
+#include "global.h"
+#include "gba/isagbprint.h"
+#include "script.h"
+#include "event_data.h"
+
+extern u16 (*const gSpecials[])(void);
+extern u16 (*const gSpecialsEnd[])(void);
+extern const u8 *const gStdScripts[];
+extern const u8 *const gStdScriptsEnd[];
+
+EWRAM_DATA ptrdiff_t gVScriptOffset = 0;
+EWRAM_DATA u8 gUnknown_20370AC = 0;
+EWRAM_DATA u16 gUnknown_20370AE = 0;
+EWRAM_DATA u16 gUnknown_20370B0 = 0;
+EWRAM_DATA u16 gUnknown_20370B2 = 0;
+EWRAM_DATA u16 gUnknown_20370B4 = 0;
+EWRAM_DATA u16 gUnknown_20370B6 = 0;
+
+// This is defined in here so the optimizer can't see its value when compiling
+// script.c.
+void * const gNullScriptPtr = NULL;
+
+const u8 sScriptConditionTable[6][3] =
+ {
+// < = >
+ 1, 0, 0, // <
+ 0, 1, 0, // =
+ 0, 0, 1, // >
+ 1, 1, 0, // <=
+ 0, 1, 1, // >=
+ 1, 0, 1, // !=
+ };
+
+
+
+#define SCRCMD_DEF(name) bool8 name(struct ScriptContext *ctx)
+
+SCRCMD_DEF(ScrCmd_nop)
+{
+ return FALSE;
+}
+
+SCRCMD_DEF(ScrCmd_nop1)
+{
+ return FALSE;
+}
+
+SCRCMD_DEF(ScrCmd_end)
+{
+ StopScript(ctx);
+ return FALSE;
+}
+
+SCRCMD_DEF(ScrCmd_gotonative)
+{
+ bool8 (*func)(void) = (bool8 (*)(void))ScriptReadWord(ctx);
+ SetupNativeScript(ctx, func);
+ return TRUE;
+}
+
+SCRCMD_DEF(ScrCmd_special)
+{
+ u16 (*const *specialPtr)(void) = gSpecials + ScriptReadHalfword(ctx);
+ if (specialPtr < gSpecialsEnd)
+ (*specialPtr)();
+ else
+ AGB_ASSERT_EX(0, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/scrcmd.c", 241);
+ return FALSE;
+}
+
+SCRCMD_DEF(ScrCmd_specialvar)
+{
+ u16 * varPtr = GetVarPointer(ScriptReadHalfword(ctx));
+ u16 (*const *specialPtr)(void) = gSpecials + ScriptReadHalfword(ctx);
+ if (specialPtr < gSpecialsEnd)
+ *varPtr = (*specialPtr)();
+ else
+ AGB_ASSERT_EX(0, "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/scrcmd.c", 263);
+ return FALSE;
+}
+
+SCRCMD_DEF(ScrCmd_callnative)
+{
+ void (*func )(void) = ((void (*)(void))ScriptReadWord(ctx));
+ func();
+ return FALSE;
+}
+
+SCRCMD_DEF(ScrCmd_waitstate)
+{
+ ScriptContext1_Stop();
+ return TRUE;
+}
+
+SCRCMD_DEF(ScrCmd_goto)
+{
+ const u8 * scrptr = (const u8 *)ScriptReadWord(ctx);
+ ScriptJump(ctx, scrptr);
+ return FALSE;
+}
+
+SCRCMD_DEF(ScrCmd_return)
+{
+ ScriptReturn(ctx);
+ return FALSE;
+}
+
+SCRCMD_DEF(ScrCmd_call)
+{
+ const u8 * scrptr = (const u8 *)ScriptReadWord(ctx);
+ ScriptCall(ctx, scrptr);
+ return FALSE;
+}
+
+SCRCMD_DEF(ScrCmd_goto_if)
+{
+ u8 condition = ScriptReadByte(ctx);
+ const u8 * scrptr = (const u8 *)ScriptReadWord(ctx);
+ if (sScriptConditionTable[condition][ctx->comparisonResult] == 1)
+ ScriptJump(ctx, scrptr);
+ return FALSE;
+}
+
+SCRCMD_DEF(ScrCmd_call_if)
+{
+ u8 condition = ScriptReadByte(ctx);
+ const u8 * scrptr = (const u8 *)ScriptReadWord(ctx);
+ if (sScriptConditionTable[condition][ctx->comparisonResult] == 1)
+ ScriptCall(ctx, scrptr);
+ return FALSE;
+}
+
+SCRCMD_DEF(ScrCmd_setvaddress)
+{
+ u32 addr1 = (u32)ctx->scriptPtr - 1;
+ u32 addr2 = ScriptReadWord(ctx);
+
+ gVScriptOffset = addr2 - addr1;
+ return FALSE;
+}
+
+SCRCMD_DEF(ScrCmd_vgoto)
+{
+ const u8 * scrptr = (const u8 *)ScriptReadWord(ctx);
+ ScriptJump(ctx, scrptr - gVScriptOffset);
+ return FALSE;
+}
+
+SCRCMD_DEF(ScrCmd_vcall)
+{
+ const u8 * scrptr = (const u8 *)ScriptReadWord(ctx);
+ ScriptCall(ctx, scrptr - gVScriptOffset);
+ return FALSE;
+}
+
+SCRCMD_DEF(ScrCmd_vgoto_if)
+{
+ u8 condition = ScriptReadByte(ctx);
+ const u8 * scrptr = (const u8 *)ScriptReadWord(ctx) - gVScriptOffset;
+ if (sScriptConditionTable[condition][ctx->comparisonResult] == 1)
+ ScriptJump(ctx, scrptr);
+ return FALSE;
+}
+
+SCRCMD_DEF(ScrCmd_vcall_if)
+{
+ u8 condition = ScriptReadByte(ctx);
+ const u8 * scrptr = (const u8 *)ScriptReadWord(ctx) - gVScriptOffset;
+ if (sScriptConditionTable[condition][ctx->comparisonResult] == 1)
+ ScriptCall(ctx, scrptr);
+ return FALSE;
+}
+
+SCRCMD_DEF(ScrCmd_gotostd)
+{
+ u8 stdIdx = ScriptReadByte(ctx);
+ const u8 *const * script = gStdScripts + stdIdx;
+ if (script < gStdScriptsEnd)
+ ScriptJump(ctx, *script);
+ return FALSE;
+}
+
+SCRCMD_DEF(ScrCmd_callstd)
+{
+ u8 stdIdx = ScriptReadByte(ctx);
+ const u8 *const * script = gStdScripts + stdIdx;
+ if (script < gStdScriptsEnd)
+ ScriptCall(ctx, *script);
+ return FALSE;
+}
+
+SCRCMD_DEF(ScrCmd_gotostd_if)
+{
+ u8 condition = ScriptReadByte(ctx);
+ u8 stdIdx = ScriptReadByte(ctx);
+ if (sScriptConditionTable[condition][ctx->comparisonResult] == 1)
+ {
+ const u8 *const * script = gStdScripts + stdIdx;
+ if (script < gStdScriptsEnd)
+ ScriptJump(ctx, *script);
+ }
+ return FALSE;
+}
+
+SCRCMD_DEF(ScrCmd_callstd_if)
+{
+ u8 condition = ScriptReadByte(ctx);
+ u8 stdIdx = ScriptReadByte(ctx);
+ if (sScriptConditionTable[condition][ctx->comparisonResult] == 1)
+ {
+ const u8 *const * script = gStdScripts + stdIdx;
+ if (script < gStdScriptsEnd)
+ ScriptCall(ctx, *script);
+ }
+ return FALSE;
+}
+
+u8 * const sScriptStringVars[] =
+{
+ gStringVar1,
+ gStringVar2,
+ gStringVar3,
+};
diff --git a/sym_ewram.txt b/sym_ewram.txt
index f8e0df713..fbb152faa 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -633,29 +633,9 @@ gUnknown_203709C: @ 203709C
.space 0x4
.include "src/script.o"
+ .include "src/scrcmd.o"
- .align 2
-gUnknown_20370A8: @ 20370A8
- .space 0x4
-
-gUnknown_20370AC: @ 20370AC
- .space 0x2
-
-gUnknown_20370AE: @ 20370AE
- .space 0x2
-
-gUnknown_20370B0: @ 20370B0
- .space 0x2
-
-gUnknown_20370B2: @ 20370B2
- .space 0x2
-
-gUnknown_20370B4: @ 20370B4
- .space 0x2
-
-gUnknown_20370B6: @ 20370B6
- .space 0x2
-
+ .align 2
gSpecialVar_0x8000: @ 20370B8
.space 0x2