diff options
author | red031000 <rubenru09@aol.com> | 2021-03-13 17:08:05 +0000 |
---|---|---|
committer | red031000 <rubenru09@aol.com> | 2021-03-13 17:08:05 +0000 |
commit | e3c008e794c07a26445581f8ca8d1369fd703095 (patch) | |
tree | 6b7a4070cafd7f4cf2f28c5d39fe5655b883ee6f | |
parent | 8c295f4eae1623bd95a842d375de9cfe3fed8302 (diff) |
more
-rw-r--r-- | arm9/asm/scrcmd_asm.s | 529 | ||||
-rw-r--r-- | arm9/asm/unk_02038C78.s | 50 | ||||
-rw-r--r-- | arm9/global.inc | 50 | ||||
-rw-r--r-- | arm9/src/scrcmd.c | 254 | ||||
-rw-r--r-- | include/scrcmd.h | 25 | ||||
-rw-r--r-- | include/script.h | 2 |
6 files changed, 330 insertions, 580 deletions
diff --git a/arm9/asm/scrcmd_asm.s b/arm9/asm/scrcmd_asm.s index 493fea57..8b5212dd 100644 --- a/arm9/asm/scrcmd_asm.s +++ b/arm9/asm/scrcmd_asm.s @@ -15,535 +15,6 @@ UNK_021C5A0C: ; 0x021C5A0C .text - thumb_func_start FUN_02039C40 -FUN_02039C40: ; 0x02039C40 - push {r3-r7, lr} - add r7, r0, #0x0 - add r0, #0x80 - ldr r5, [r0, #0x0] - mov r1, #0x7 - add r0, r5, #0x0 - bl FUN_02039438 - add r4, r0, #0x0 - add r0, r5, #0x0 - mov r1, #0xe - bl FUN_02039438 - add r6, r0, #0x0 - add r0, r7, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - bl CreateScriptContext - str r0, [r6, #0x0] - ldrb r0, [r4, #0x0] - add r0, r0, #0x1 - strb r0, [r4, #0x0] - mov r0, #0x1 - pop {r3-r7, pc} - .balign 4 - - thumb_func_start FUN_02039C78 -FUN_02039C78: ; 0x02039C78 - push {r3-r7, lr} - str r0, [sp, #0x0] - add r0, #0x80 - ldr r5, [r0, #0x0] - mov r1, #0x5 - add r0, r5, #0x0 - bl FUN_02039438 - add r6, r0, #0x0 - add r0, r5, #0x0 - mov r1, #0x7 - bl FUN_02039438 - add r4, r0, #0x0 - add r0, r5, #0x0 - mov r1, #0xe - bl FUN_02039438 - add r7, r0, #0x0 - ldr r0, [sp, #0x0] - bl ScriptReadHalfword - add r1, r0, #0x0 - mov r0, #0x1 - strb r0, [r6, #0x0] - add r0, r5, #0x0 - bl CreateScriptContext - str r0, [r7, #0x0] - ldrb r0, [r4, #0x0] - ldr r1, _02039CC4 ; =FUN_02039CC8 - add r0, r0, #0x1 - strb r0, [r4, #0x0] - ldr r0, [sp, #0x0] - bl SetupNativeScript - mov r0, #0x1 - pop {r3-r7, pc} - .balign 4 -_02039CC4: .word FUN_02039CC8 - - thumb_func_start FUN_02039CC8 -FUN_02039CC8: ; 0x02039CC8 - push {r3, lr} - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0x5 - bl FUN_02039438 - ldrb r0, [r0, #0x0] - cmp r0, #0x0 - bne _02039CDE - mov r0, #0x1 - pop {r3, pc} -_02039CDE: - mov r0, #0x0 - pop {r3, pc} - .balign 4 - - thumb_func_start FUN_02039CE4 -FUN_02039CE4: ; 0x02039CE4 - push {r3, lr} - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0x5 - bl FUN_02039438 - mov r1, #0x0 - strb r1, [r0, #0x0] - add r0, r1, #0x0 - pop {r3, pc} - - thumb_func_start ScrCmd_goto -ScrCmd_goto: ; 0x02039CF8 - ; relative jump - push {r4, lr} - add r4, r0, #0x0 - bl ScriptReadWord - add r2, r0, #0x0 - ldr r1, [r4, #0x8] - add r0, r4, #0x0 - add r1, r1, r2 - bl ScriptJump - mov r0, #0x0 - pop {r4, pc} - - thumb_func_start FUN_02039D10 -FUN_02039D10: ; 0x02039D10 - push {r3-r7, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0xa - bl FUN_02039438 - ldr r1, [r5, #0x8] - add r6, r0, #0x0 - add r0, r1, #0x1 - str r0, [r5, #0x8] - add r0, r5, #0x0 - ldrb r4, [r1, #0x0] - bl ScriptReadWord - add r7, r0, #0x0 - ldr r0, [r6, #0x0] - bl FUN_02058448 - cmp r4, r0 - bne _02039D44 - ldr r1, [r5, #0x8] - add r0, r5, #0x0 - add r1, r1, r7 - bl ScriptJump -_02039D44: - mov r0, #0x0 - pop {r3-r7, pc} - - thumb_func_start FUN_02039D48 -FUN_02039D48: ; 0x02039D48 - push {r4-r6, lr} - add r5, r0, #0x0 - ldr r0, [r5, #0x74] - bl FUN_02046534 - ldr r1, [r5, #0x8] - add r6, r0, #0x0 - add r0, r1, #0x1 - str r0, [r5, #0x8] - ldrb r4, [r1, #0x0] - add r0, r5, #0x0 - bl ScriptReadWord - add r2, r0, #0x0 - cmp r6, r4 - bne _02039D72 - ldr r1, [r5, #0x8] - add r0, r5, #0x0 - add r1, r1, r2 - bl ScriptJump -_02039D72: - mov r0, #0x0 - pop {r4-r6, pc} - .balign 4 - - thumb_func_start FUN_02039D78 -FUN_02039D78: ; 0x02039D78 - push {r4-r6, lr} - add r5, r0, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0x9 - bl FUN_02039438 - ldr r1, [r5, #0x8] - add r6, r0, #0x0 - add r0, r1, #0x1 - str r0, [r5, #0x8] - ldrb r4, [r1, #0x0] - add r0, r5, #0x0 - bl ScriptReadWord - add r2, r0, #0x0 - ldr r0, [r6, #0x0] - cmp r0, r4 - bne _02039DA8 - ldr r1, [r5, #0x8] - add r0, r5, #0x0 - add r1, r1, r2 - bl ScriptJump -_02039DA8: - mov r0, #0x0 - pop {r4-r6, pc} - - thumb_func_start ScrCmd_call -ScrCmd_call: ; 0x02039DAC - push {r4, lr} - add r4, r0, #0x0 - bl ScriptReadWord - add r2, r0, #0x0 - ldr r1, [r4, #0x8] - add r0, r4, #0x0 - add r1, r1, r2 - bl ScriptCall - mov r0, #0x0 - pop {r4, pc} - - thumb_func_start ScrCmd_return -ScrCmd_return: ; 0x02039DC4 - push {r3, lr} - bl ScriptReturn - mov r0, #0x0 - pop {r3, pc} - .balign 4 - - thumb_func_start ScrCmd_goto_if -ScrCmd_goto_if: ; 0x02039DD0 - push {r3-r5, lr} - add r5, r0, #0x0 - ldr r2, [r5, #0x8] - add r1, r2, #0x1 - str r1, [r5, #0x8] - ldrb r4, [r2, #0x0] - bl ScriptReadWord - add r1, r0, #0x0 - lsl r0, r4, #0x1 - add r3, r4, r0 - ldr r0, _02039E00 ; =sScriptConditionTable - ldrb r2, [r5, #0x2] - add r0, r0, r3 - ldrb r0, [r2, r0] - cmp r0, #0x1 - bne _02039DFC - ldr r2, [r5, #0x8] - add r0, r5, #0x0 - add r1, r2, r1 - bl ScriptJump -_02039DFC: - mov r0, #0x0 - pop {r3-r5, pc} - .balign 4 -_02039E00: .word sScriptConditionTable - - thumb_func_start ScrCmd_call_if -ScrCmd_call_if: ; 0x02039E04 - push {r3-r5, lr} - add r5, r0, #0x0 - ldr r2, [r5, #0x8] - add r1, r2, #0x1 - str r1, [r5, #0x8] - ldrb r4, [r2, #0x0] - bl ScriptReadWord - add r1, r0, #0x0 - lsl r0, r4, #0x1 - add r3, r4, r0 - ldr r0, _02039E34 ; =sScriptConditionTable - ldrb r2, [r5, #0x2] - add r0, r0, r3 - ldrb r0, [r2, r0] - cmp r0, #0x1 - bne _02039E30 - ldr r2, [r5, #0x8] - add r0, r5, #0x0 - add r1, r2, r1 - bl ScriptCall -_02039E30: - mov r0, #0x0 - pop {r3-r5, pc} - .balign 4 -_02039E34: .word sScriptConditionTable - - thumb_func_start ScrCmd_setflag -ScrCmd_setflag: ; 0x02039E38 - push {r4, lr} - add r1, r0, #0x0 - add r1, #0x80 - ldr r4, [r1, #0x0] - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - bl FlagSet - mov r0, #0x0 - pop {r4, pc} - - thumb_func_start ScrCmd_clearflag -ScrCmd_clearflag: ; 0x02039E50 - push {r4, lr} - add r1, r0, #0x0 - add r1, #0x80 - ldr r4, [r1, #0x0] - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - bl FlagClear - mov r0, #0x0 - pop {r4, pc} - - thumb_func_start ScrCmd_checkflag -ScrCmd_checkflag: ; 0x02039E68 - push {r3-r5, lr} - add r4, r0, #0x0 - add r1, r4, #0x0 - add r1, #0x80 - ldr r5, [r1, #0x0] - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - bl FlagCheck - strb r0, [r4, #0x2] - mov r0, #0x0 - pop {r3-r5, pc} - - thumb_func_start FUN_02039E84 -FUN_02039E84: ; 0x02039E84 - push {r4-r6, lr} - add r4, r0, #0x0 - add r1, r4, #0x0 - add r1, #0x80 - ldr r5, [r1, #0x0] - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl GetVarPointer - add r6, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadHalfword - add r4, #0x80 - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl GetVarPointer - add r4, r0, #0x0 - ldrh r1, [r6, #0x0] - add r0, r5, #0x0 - bl FlagCheck - strh r0, [r4, #0x0] - mov r0, #0x0 - pop {r4-r6, pc} - - thumb_func_start FUN_02039EC0 -FUN_02039EC0: ; 0x02039EC0 - push {r3-r5, lr} - add r5, r0, #0x0 - add r1, r5, #0x0 - add r1, #0x80 - ldr r4, [r1, #0x0] - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl GetVarPointer - add r1, r0, #0x0 - ldrh r1, [r1, #0x0] - add r0, r4, #0x0 - bl FlagSet - mov r0, #0x0 - pop {r3-r5, pc} - .balign 4 - - thumb_func_start ScrCmd_settrainerflag -ScrCmd_settrainerflag: ; 0x02039EE8 - push {r3-r5, lr} - add r4, r0, #0x0 - add r1, r4, #0x0 - add r1, #0x80 - ldr r5, [r1, #0x0] - bl ScriptReadHalfword - add r4, #0x80 - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl VarGet - add r1, r0, #0x0 - add r0, r5, #0x0 - bl TrainerFlagSet - mov r0, #0x0 - pop {r3-r5, pc} - - thumb_func_start ScrCmd_cleartrainerflag -ScrCmd_cleartrainerflag: ; 0x02039F0C - push {r3-r5, lr} - add r4, r0, #0x0 - add r1, r4, #0x0 - add r1, #0x80 - ldr r5, [r1, #0x0] - bl ScriptReadHalfword - add r4, #0x80 - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl VarGet - add r1, r0, #0x0 - add r0, r5, #0x0 - bl TrainerFlagClear - mov r0, #0x0 - pop {r3-r5, pc} - - thumb_func_start ScrCmd_checktrainerflag -ScrCmd_checktrainerflag: ; 0x02039F30 - push {r3-r5, lr} - add r5, r0, #0x0 - add r1, r5, #0x0 - add r1, #0x80 - ldr r4, [r1, #0x0] - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r1, r0, #0x0 - add r0, r4, #0x0 - bl TrainerFlagCheck - strb r0, [r5, #0x2] - mov r0, #0x0 - pop {r3-r5, pc} - - thumb_func_start ScrCmd_addvar -ScrCmd_addvar: ; 0x02039F58 - push {r3-r5, lr} - add r5, r0, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl GetVarPointer - add r4, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl VarGet - ldrh r1, [r4, #0x0] - add r0, r1, r0 - strh r0, [r4, #0x0] - mov r0, #0x0 - pop {r3-r5, pc} - - thumb_func_start ScrCmd_subvar -ScrCmd_subvar: ; 0x02039F88 - push {r3-r5, lr} - add r5, r0, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl GetVarPointer - add r4, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl VarGet - ldrh r1, [r4, #0x0] - sub r0, r1, r0 - strh r0, [r4, #0x0] - mov r0, #0x0 - pop {r3-r5, pc} - - thumb_func_start ScrCmd_setvar -ScrCmd_setvar: ; 0x02039FB8 - push {r3-r5, lr} - add r4, r0, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl GetVarPointer - add r5, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadHalfword - strh r0, [r5, #0x0] - mov r0, #0x0 - pop {r3-r5, pc} - .balign 4 - - thumb_func_start ScrCmd_copyvar -ScrCmd_copyvar: ; 0x02039FDC - push {r3-r5, lr} - add r5, r0, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl GetVarPointer - add r4, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - bl GetVarPointer - ldrh r0, [r0, #0x0] - strh r0, [r4, #0x0] - mov r0, #0x0 - pop {r3-r5, pc} - .balign 4 - - thumb_func_start ScrCmd_setorcopyvar -ScrCmd_setorcopyvar: ; 0x0203A00C - push {r3-r5, lr} - add r4, r0, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl GetVarPointer - add r5, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadHalfword - add r4, #0x80 - add r1, r0, #0x0 - ldr r0, [r4, #0x0] - bl VarGet - strh r0, [r5, #0x0] - mov r0, #0x0 - pop {r3-r5, pc} - - thumb_func_start ScrCmd_message -ScrCmd_message: ; 0x0203A038 - push {r3, lr} - ldr r2, [r0, #0x8] - add r1, r2, #0x1 - str r1, [r0, #0x8] - ldrb r2, [r2, #0x0] - ldr r1, [r0, #0x78] - bl MOD05_ShowMessageInField - mov r0, #0x0 - pop {r3, pc} - thumb_func_start ScrCmd_message_from ScrCmd_message_from: ; 0x0203A04C ; message_from bank, id diff --git a/arm9/asm/unk_02038C78.s b/arm9/asm/unk_02038C78.s index 28fad682..86085965 100644 --- a/arm9/asm/unk_02038C78.s +++ b/arm9/asm/unk_02038C78.s @@ -168,31 +168,31 @@ gScriptCmdTable: ; 0x020F355C .word ScrCmd_CompareAddrToAddr .word ScrCmd_CompareVarToValue .word ScrCmd_CompareVarToVar - .word FUN_02039C40 - .word FUN_02039C78 - .word FUN_02039CE4 - .word ScrCmd_goto - .word FUN_02039D10 - .word FUN_02039D48 - .word FUN_02039D78 - .word ScrCmd_call - .word ScrCmd_return - .word ScrCmd_goto_if - .word ScrCmd_call_if - .word ScrCmd_setflag - .word ScrCmd_clearflag - .word ScrCmd_checkflag - .word FUN_02039E84 - .word FUN_02039EC0 - .word ScrCmd_settrainerflag - .word ScrCmd_cleartrainerflag - .word ScrCmd_checktrainerflag - .word ScrCmd_addvar - .word ScrCmd_subvar - .word ScrCmd_setvar - .word ScrCmd_copyvar - .word ScrCmd_setorcopyvar - .word ScrCmd_message + .word ScrCmd_RunScript + .word ScrCmd_RunScriptWait + .word ScrCmd_RestartCurrentScript + .word ScrCmd_GoTo + .word ScrCmd_ObjectGoTo + .word ScrCmd_BgGoTo + .word ScrCmd_DirectionGoTo + .word ScrCmd_Call + .word ScrCmd_Return + .word ScrCmd_GoToIf + .word ScrCmd_CallIf + .word ScrCmd_SetFlag + .word ScrCmd_ClearFlag + .word ScrCmd_CheckFlag + .word ScrCmd_CheckFlagVar + .word ScrCmd_SetFlagVar + .word ScrCmd_SetTrainerFlag + .word ScrCmd_ClearTrainerFlag + .word ScrCmd_CheckTrainerFlag + .word ScrCmd_AddVar + .word ScrCmd_SubVar + .word ScrCmd_SetVar + .word ScrCmd_CopyVar + .word ScrCmd_SetOrCopyVar + .word ScrCmd_Message .word FUN_0203A2C4 .word FUN_0203A304 .word FUN_0203A388 diff --git a/arm9/global.inc b/arm9/global.inc index c45c0a45..cec9d379 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -2719,31 +2719,31 @@ .extern ScrCmd_CompareAddrToAddr .extern ScrCmd_CompareVarToValue .extern ScrCmd_CompareVarToVar -.extern FUN_02039C40 -.extern FUN_02039C78 -.extern FUN_02039CE4 -.extern ScrCmd_goto -.extern FUN_02039D10 -.extern FUN_02039D48 -.extern FUN_02039D78 -.extern ScrCmd_call -.extern ScrCmd_return -.extern ScrCmd_goto_if -.extern ScrCmd_call_if -.extern ScrCmd_setflag -.extern ScrCmd_clearflag -.extern ScrCmd_checkflag -.extern FUN_02039E84 -.extern FUN_02039EC0 -.extern ScrCmd_settrainerflag -.extern ScrCmd_cleartrainerflag -.extern ScrCmd_checktrainerflag -.extern ScrCmd_addvar -.extern ScrCmd_subvar -.extern ScrCmd_setvar -.extern ScrCmd_copyvar -.extern ScrCmd_setorcopyvar -.extern ScrCmd_message +.extern ScrCmd_RunScript +.extern ScrCmd_RunScriptWait +.extern ScrCmd_RestartCurrentScript +.extern ScrCmd_GoTo +.extern ScrCmd_ObjectGoTo +.extern ScrCmd_BgGoTo +.extern ScrCmd_DirectionGoTo +.extern ScrCmd_Call +.extern ScrCmd_Return +.extern ScrCmd_GoToIf +.extern ScrCmd_CallIf +.extern ScrCmd_SetFlag +.extern ScrCmd_ClearFlag +.extern ScrCmd_CheckFlag +.extern ScrCmd_CheckFlagVar +.extern ScrCmd_SetFlagVar +.extern ScrCmd_SetTrainerFlag +.extern ScrCmd_ClearTrainerFlag +.extern ScrCmd_CheckTrainerFlag +.extern ScrCmd_AddVar +.extern ScrCmd_SubVar +.extern ScrCmd_SetVar +.extern ScrCmd_CopyVar +.extern ScrCmd_SetOrCopyVar +.extern ScrCmd_Message .extern ScrCmd_message_from .extern FUN_0203A098 .extern FUN_0203A0FC diff --git a/arm9/src/scrcmd.c b/arm9/src/scrcmd.c index ae25050d..91ee2f03 100644 --- a/arm9/src/scrcmd.c +++ b/arm9/src/scrcmd.c @@ -2,9 +2,23 @@ extern u16 *GetVarPointer(struct UnkStruct_0204639C* arg, u16); extern u16 VarGet(struct UnkStruct_0204639C* arg, u16 wk); +extern void *FUN_02039438(struct UnkStruct_0204639C* arg, u32 id); +extern void *CreateScriptContext(struct UnkStruct_0204639C* arg, u16 id); +extern u8 FUN_02058448(u32 param0); +extern u32 FUN_02046534(u32 param0); +extern void FlagSet(struct UnkStruct_0204639C *arg, u16 flag); +extern void FlagClear(struct UnkStruct_0204639C *arg, u16 flag); +extern u8 FlagCheck(struct UnkStruct_0204639C *arg, u16 flag); +extern void TrainerFlagSet(struct UnkStruct_0204639C *arg, u16 flag); +extern void TrainerFlagClear(struct UnkStruct_0204639C *arg, u16 flag); +extern u8 TrainerFlagCheck(struct UnkStruct_0204639C *arg, u16 flag); +extern void MOD05_ShowMessageInField(struct ScriptContext *ctx, struct MsgData *msgData, u8 id); static BOOL RunPauseTimer(struct ScriptContext* ctx); static u32 Compare(u16 a, u16 b); +static BOOL FUN_02039CC8(struct ScriptContext* ctx); + +extern u8 sScriptConditionTable[6][3]; THUMB_FUNC BOOL ScrCmd_Nop(struct ScriptContext* ctx) { @@ -180,3 +194,243 @@ THUMB_FUNC BOOL ScrCmd_CompareVarToVar(struct ScriptContext* ctx) ctx->comparisonResult = (u8)Compare(*a, *b); return FALSE; } + +THUMB_FUNC BOOL ScrCmd_RunScript(struct ScriptContext* ctx) +{ + struct UnkStruct_0204639C* unk80 = ctx->unk80; + u8 *unk1 = (u8 *)FUN_02039438(unk80, 0x7); + u32 **unk2 = (u32 **)FUN_02039438(unk80, 0xe); + u16 id = ScriptReadHalfword(ctx); + + *unk2 = CreateScriptContext(unk80, id); + *unk1 = (u8)(*unk1 + 1); + return TRUE; +} + +THUMB_FUNC BOOL ScrCmd_RunScriptWait(struct ScriptContext* ctx) +{ + struct UnkStruct_0204639C* unk80 = ctx->unk80; + u8 *unk1 = (u8 *)FUN_02039438(unk80, 0x5); + u8 *unk2 = (u8 *)FUN_02039438(unk80, 0x7); + u32 **unk3 = (u32 **)FUN_02039438(unk80, 0xe); + + u16 id = ScriptReadHalfword(ctx); + *unk1 = 1; + *unk3 = CreateScriptContext(unk80, id); + *unk2 = (u8)(*unk2 + 1); + + SetupNativeScript(ctx, FUN_02039CC8); + return TRUE; +} + +THUMB_FUNC static BOOL FUN_02039CC8(struct ScriptContext* ctx) +{ + u8* unk = FUN_02039438(ctx->unk80, 0x5); + + if (*unk == 0) + { + return TRUE; + } + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_RestartCurrentScript(struct ScriptContext* ctx) +{ + u8* unk = (u8 *)FUN_02039438(ctx->unk80, 0x5); + + *unk = 0; + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_GoTo(struct ScriptContext* ctx) +{ + s32 offset = (s32)ScriptReadWord(ctx); + ScriptJump(ctx, ctx->scriptPtr + offset); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_ObjectGoTo(struct ScriptContext* ctx) +{ + u32* unk = FUN_02039438(ctx->unk80, 0xa); + u8 id = ScriptReadByte(ctx); + s32 offset = (s32)ScriptReadWord(ctx); + if (FUN_02058448(*unk) == id) + { + ScriptJump(ctx, ctx->scriptPtr + offset); + } + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_BgGoTo(struct ScriptContext* ctx) +{ + u32 bgId = FUN_02046534(ctx->unk74); + u8 id = ScriptReadByte(ctx); + s32 offset = (s32)ScriptReadWord(ctx); + + if (bgId == id) + { + ScriptJump(ctx, ctx->scriptPtr + offset); + } + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_DirectionGoTo(struct ScriptContext* ctx) +{ + u32 *playerDirection = FUN_02039438(ctx->unk80, 0x9); + u8 dir = ScriptReadByte(ctx); + s32 offset = (s32)ScriptReadWord(ctx); + + if (*playerDirection == dir) + { + ScriptJump(ctx, ctx->scriptPtr + offset); + } + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Call(struct ScriptContext* ctx) +{ + s32 offset = (s32)ScriptReadWord(ctx); + ScriptCall(ctx, ctx->scriptPtr + offset); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Return(struct ScriptContext* ctx) +{ + ScriptReturn(ctx); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_GoToIf(struct ScriptContext* ctx) +{ + u8 compareType = ScriptReadByte(ctx); + s32 offset = (s32)ScriptReadWord(ctx); + + if (sScriptConditionTable[compareType][ctx->comparisonResult] == TRUE) + { + ScriptJump(ctx, ctx->scriptPtr + offset); + } + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_CallIf(struct ScriptContext* ctx) +{ + u8 compareType = ScriptReadByte(ctx); + s32 offset = (s32)ScriptReadWord(ctx); + + if (sScriptConditionTable[compareType][ctx->comparisonResult] == TRUE) + { + ScriptCall(ctx, ctx->scriptPtr + offset); + } + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_SetFlag(struct ScriptContext* ctx) +{ + struct UnkStruct_0204639C *unk80 = ctx->unk80; + u16 flag = ScriptReadHalfword(ctx); + FlagSet(unk80, flag); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_ClearFlag(struct ScriptContext* ctx) +{ + struct UnkStruct_0204639C *unk80 = ctx->unk80; + u16 flag = ScriptReadHalfword(ctx); + FlagClear(unk80, flag); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_CheckFlag(struct ScriptContext* ctx) +{ + struct UnkStruct_0204639C *unk80 = ctx->unk80; + u16 flag = ScriptReadHalfword(ctx); + ctx->comparisonResult = FlagCheck(unk80, flag); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_CheckFlagVar(struct ScriptContext* ctx) +{ + struct UnkStruct_0204639C *unk80 = ctx->unk80; + u16 *wk1 = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + u16 *wk2 = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + *wk2 = FlagCheck(unk80, *wk1); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_SetFlagVar(struct ScriptContext* ctx) +{ + struct UnkStruct_0204639C *unk80 = ctx->unk80; + u16 *wk = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + FlagSet(unk80, *wk); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_SetTrainerFlag(struct ScriptContext* ctx) +{ + struct UnkStruct_0204639C *unk80 = ctx->unk80; + u16 flag = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + TrainerFlagSet(unk80, flag); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_ClearTrainerFlag(struct ScriptContext* ctx) +{ + struct UnkStruct_0204639C *unk80 = ctx->unk80; + u16 flag = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + TrainerFlagClear(unk80, flag); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_CheckTrainerFlag(struct ScriptContext* ctx) +{ + struct UnkStruct_0204639C *unk80 = ctx->unk80; + u16 flag = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + ctx->comparisonResult = TrainerFlagCheck(unk80, flag); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_AddVar(struct ScriptContext* ctx) +{ + u16 *wk1 = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + u16 wk2 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + *wk1 = (u16)(*wk1 + wk2); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_SubVar(struct ScriptContext* ctx) +{ + u16 *wk1 = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + u16 wk2 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + *wk1 = (u16)(*wk1 - wk2); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_SetVar(struct ScriptContext* ctx) +{ + u16 *wk = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + *wk = ScriptReadHalfword(ctx); + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_CopyVar(struct ScriptContext* ctx) +{ + u16 *wk1 = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + u16 *wk2 = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + *wk1 = *wk2; + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_SetOrCopyVar(struct ScriptContext* ctx) +{ + u16 *wk1 = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx)); + u16 wk2 = VarGet(ctx->unk80, ScriptReadHalfword(ctx)); + *wk1 = wk2; + return FALSE; +} + +THUMB_FUNC BOOL ScrCmd_Message(struct ScriptContext* ctx) +{ + u8 id = ScriptReadByte(ctx); + MOD05_ShowMessageInField(ctx, ctx->msgData, id); + return FALSE; +} diff --git a/include/scrcmd.h b/include/scrcmd.h index 0aa3fd75..a8c7ee4f 100644 --- a/include/scrcmd.h +++ b/include/scrcmd.h @@ -25,6 +25,31 @@ BOOL ScrCmd_CompareAddrToValue(struct ScriptContext* ctx); BOOL ScrCmd_CompareAddrToAddr(struct ScriptContext* ctx); BOOL ScrCmd_CompareVarToValue(struct ScriptContext* ctx); BOOL ScrCmd_CompareVarToVar(struct ScriptContext* ctx); +BOOL ScrCmd_RunScript(struct ScriptContext* ctx); +BOOL ScrCmd_RunScriptWait(struct ScriptContext* ctx); +BOOL ScrCmd_RestartCurrentScript(struct ScriptContext* ctx); +BOOL ScrCmd_GoTo(struct ScriptContext* ctx); +BOOL ScrCmd_ObjectGoTo(struct ScriptContext* ctx); +BOOL ScrCmd_BgGoTo(struct ScriptContext* ctx); +BOOL ScrCmd_DirectionGoTo(struct ScriptContext* ctx); +BOOL ScrCmd_Call(struct ScriptContext* ctx); +BOOL ScrCmd_Return(struct ScriptContext* ctx); +BOOL ScrCmd_GoToIf(struct ScriptContext* ctx); +BOOL ScrCmd_CallIf(struct ScriptContext* ctx); +BOOL ScrCmd_SetFlag(struct ScriptContext* ctx); +BOOL ScrCmd_ClearFlag(struct ScriptContext* ctx); +BOOL ScrCmd_CheckFlag(struct ScriptContext* ctx); +BOOL ScrCmd_CheckFlagVar(struct ScriptContext* ctx); +BOOL ScrCmd_SetFlagVar(struct ScriptContext* ctx); +BOOL ScrCmd_SetTrainerFlag(struct ScriptContext* ctx); +BOOL ScrCmd_ClearTrainerFlag(struct ScriptContext* ctx); +BOOL ScrCmd_CheckTrainerFlag(struct ScriptContext* ctx); +BOOL ScrCmd_AddVar(struct ScriptContext* ctx); +BOOL ScrCmd_SubVar(struct ScriptContext* ctx); +BOOL ScrCmd_SetVar(struct ScriptContext* ctx); +BOOL ScrCmd_CopyVar(struct ScriptContext* ctx); +BOOL ScrCmd_SetOrCopyVar(struct ScriptContext* ctx); +BOOL ScrCmd_Message(struct ScriptContext* ctx); //scrcmd_18.c BOOL ScrCmd_GiveMon(struct ScriptContext* ctx); diff --git a/include/script.h b/include/script.h index c25751e4..de161889 100644 --- a/include/script.h +++ b/include/script.h @@ -22,7 +22,7 @@ struct ScriptContext u32 cmdCount;
u32 data[4];
u32 unk74;
- struct MsgData * unk78;
+ struct MsgData * msgData;
u8 *unk7C;
struct UnkStruct_0204639C * unk80;
};
|