summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorred031000 <rubenru09@aol.com>2021-03-18 16:00:46 +0000
committerred031000 <rubenru09@aol.com>2021-03-18 16:00:46 +0000
commit777bb376069caa8ef66a7ac753d9d2d0250af052 (patch)
tree286c31e40390a7fbbd310d2d7754d4d92575c4e3
parent8b699fd13008875cf59601d6a8c9d55bd3f8ae08 (diff)
fix main scrcmd struct
-rw-r--r--arm9/asm/scrcmd_asm.s66
-rw-r--r--arm9/asm/unk_02038C78.s2
-rw-r--r--arm9/global.inc2
-rw-r--r--arm9/src/scrcmd.c67
-rw-r--r--arm9/src/scrcmd_18_c.c12
-rw-r--r--include/scrcmd.h1
-rw-r--r--include/script.h27
7 files changed, 79 insertions, 98 deletions
diff --git a/arm9/asm/scrcmd_asm.s b/arm9/asm/scrcmd_asm.s
index 3c73d00c..19159d18 100644
--- a/arm9/asm/scrcmd_asm.s
+++ b/arm9/asm/scrcmd_asm.s
@@ -15,72 +15,6 @@ UNK_021C5A0C: ; 0x021C5A0C
.text
- thumb_func_start FUN_0203A188
-FUN_0203A188: ; 0x0203A188
- push {r4-r6, lr}
- sub sp, #0x8
- add r5, r0, #0x0
- ldr r2, [r5, #0x8]
- add r1, r2, #0x1
- str r1, [r5, #0x8]
- add r1, r5, #0x0
- add r1, #0x80
- ldr r1, [r1, #0x0]
- ldrb r3, [r2, #0x0]
- add r1, #0xa8
- ldr r2, [r1, #0x0]
- cmp r2, #0x0
- bne _0203A1AA
- add sp, #0x8
- mov r0, #0x0
- pop {r4-r6, pc}
-_0203A1AA:
- lsl r1, r3, #0x4
- add r1, r3, r1
- add r2, #0x90
- lsl r1, r1, #0x4
- add r4, r2, r1
- ldrh r1, [r2, r1]
- ldr r2, _0203A204 ; =0x0000FFFF
- cmp r1, r2
- bne _0203A1E2
- ldr r2, _0203A208 ; =0x0000022B
- mov r0, #0x1
- mov r1, #0x1a
- mov r3, #0x20
- bl NewMsgDataFromNarc
- add r6, r0, #0x0
- mov r0, #0x0
- str r0, [sp, #0x0]
- ldrh r2, [r4, #0x2]
- add r0, r5, #0x0
- add r1, r6, #0x0
- mov r3, #0x1
- bl MOD05_021E2BD0
- add r0, r6, #0x0
- bl DestroyMsgData
- b _0203A1F4
-_0203A1E2:
- mov r2, #0x6
- ldrsh r2, [r4, r2]
- str r2, [sp, #0x0]
- mov r2, #0x1
- str r2, [sp, #0x4]
- ldrh r2, [r4, #0x2]
- ldrh r3, [r4, #0x4]
- bl MOD05_021E2C58
-_0203A1F4:
- ldr r1, _0203A20C ; =FUN_0203A2F0
- add r0, r5, #0x0
- bl SetupNativeScript
- mov r0, #0x1
- add sp, #0x8
- pop {r4-r6, pc}
- nop
-_0203A204: .word 0x0000FFFF
-_0203A208: .word 0x0000022B
-_0203A20C: .word FUN_0203A2F0
-
thumb_func_start FUN_0203A210
FUN_0203A210: ; 0x0203A210
push {r3-r7, lr}
diff --git a/arm9/asm/unk_02038C78.s b/arm9/asm/unk_02038C78.s
index 2bada91e..7011ab90 100644
--- a/arm9/asm/unk_02038C78.s
+++ b/arm9/asm/unk_02038C78.s
@@ -659,7 +659,7 @@ gScriptCmdTable: ; 0x020F355C
.word ScrCmd_MessageFrom2
.word ScrCmd_Unk01FC
.word ScrCmd_Unk01FD
- .word FUN_0203A188
+ .word ScrCmd_Unk01FE
.word FUN_0203A210
.word FUN_0203C7F4
.word FUN_0203C820
diff --git a/arm9/global.inc b/arm9/global.inc
index c0bd9b5f..82e4a51b 100644
--- a/arm9/global.inc
+++ b/arm9/global.inc
@@ -2748,7 +2748,7 @@
.extern ScrCmd_MessageFrom2
.extern ScrCmd_Unk01FC
.extern ScrCmd_Unk01FD
-.extern FUN_0203A188
+.extern ScrCmd_Unk01FE
.extern FUN_0203A210
.extern FUN_0203A288
.extern FUN_0203A2C4
diff --git a/arm9/src/scrcmd.c b/arm9/src/scrcmd.c
index 82a14a7c..86f5069a 100644
--- a/arm9/src/scrcmd.c
+++ b/arm9/src/scrcmd.c
@@ -1,17 +1,17 @@
#include "scrcmd.h"
+#include "unk_0204639C.h"
-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 u16 *GetVarPointer(struct UnkSavStruct80* arg, u16);
+extern u16 VarGet(struct UnkSavStruct80* arg, u16 wk);
+extern void *FUN_02039438(struct UnkSavStruct80* arg, u32 id);
+extern void *CreateScriptContext(struct UnkSavStruct80* 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 FlagSet(struct UnkSavStruct80 *arg, u16 flag);
+extern void FlagClear(struct UnkSavStruct80 *arg, u16 flag);
+extern u8 FlagCheck(struct UnkSavStruct80 *arg, u16 flag);
+extern void TrainerFlagSet(struct UnkSavStruct80 *arg, u16 flag);
+extern void TrainerFlagClear(struct UnkSavStruct80 *arg, u16 flag);
+extern u8 TrainerFlagCheck(struct UnkSavStruct80 *arg, u16 flag);
extern void MOD05_ShowMessageInField(struct ScriptContext *ctx, struct MsgData *msgData, u16 id);
extern void MOD05_021E2BD0(struct ScriptContext *ctx, struct MsgData *msgData, u16 msgId, u32 param4, void *param5);
extern BOOL FUN_0203A2F0(struct ScriptContext *ctx);
@@ -43,7 +43,7 @@ THUMB_FUNC BOOL ScrCmd_End(struct ScriptContext* ctx)
THUMB_FUNC BOOL ScrCmd_Wait(struct ScriptContext* ctx)
{
- struct UnkStruct_0204639C* arg = ctx->unk80;
+ struct UnkSavStruct80* arg = ctx->unk80;
u16 num = ScriptReadHalfword(ctx);
u16 wk = ScriptReadHalfword(ctx);
u16* VarPointer = GetVarPointer(arg, wk);
@@ -200,7 +200,7 @@ THUMB_FUNC BOOL ScrCmd_CompareVarToVar(struct ScriptContext* ctx)
THUMB_FUNC BOOL ScrCmd_RunScript(struct ScriptContext* ctx)
{
- struct UnkStruct_0204639C* unk80 = ctx->unk80;
+ struct UnkSavStruct80* unk80 = ctx->unk80;
u8 *unk1 = (u8 *)FUN_02039438(unk80, 0x7);
u32 **unk2 = (u32 **)FUN_02039438(unk80, 0xe);
u16 id = ScriptReadHalfword(ctx);
@@ -212,7 +212,7 @@ THUMB_FUNC BOOL ScrCmd_RunScript(struct ScriptContext* ctx)
THUMB_FUNC BOOL ScrCmd_RunScriptWait(struct ScriptContext* ctx)
{
- struct UnkStruct_0204639C* unk80 = ctx->unk80;
+ struct UnkSavStruct80* unk80 = ctx->unk80;
u8 *unk1 = (u8 *)FUN_02039438(unk80, 0x5);
u8 *unk2 = (u8 *)FUN_02039438(unk80, 0x7);
u32 **unk3 = (u32 **)FUN_02039438(unk80, 0xe);
@@ -329,7 +329,7 @@ THUMB_FUNC BOOL ScrCmd_CallIf(struct ScriptContext* ctx)
THUMB_FUNC BOOL ScrCmd_SetFlag(struct ScriptContext* ctx)
{
- struct UnkStruct_0204639C *unk80 = ctx->unk80;
+ struct UnkSavStruct80 *unk80 = ctx->unk80;
u16 flag = ScriptReadHalfword(ctx);
FlagSet(unk80, flag);
return FALSE;
@@ -337,7 +337,7 @@ THUMB_FUNC BOOL ScrCmd_SetFlag(struct ScriptContext* ctx)
THUMB_FUNC BOOL ScrCmd_ClearFlag(struct ScriptContext* ctx)
{
- struct UnkStruct_0204639C *unk80 = ctx->unk80;
+ struct UnkSavStruct80 *unk80 = ctx->unk80;
u16 flag = ScriptReadHalfword(ctx);
FlagClear(unk80, flag);
return FALSE;
@@ -345,7 +345,7 @@ THUMB_FUNC BOOL ScrCmd_ClearFlag(struct ScriptContext* ctx)
THUMB_FUNC BOOL ScrCmd_CheckFlag(struct ScriptContext* ctx)
{
- struct UnkStruct_0204639C *unk80 = ctx->unk80;
+ struct UnkSavStruct80 *unk80 = ctx->unk80;
u16 flag = ScriptReadHalfword(ctx);
ctx->comparisonResult = FlagCheck(unk80, flag);
return FALSE;
@@ -353,7 +353,7 @@ THUMB_FUNC BOOL ScrCmd_CheckFlag(struct ScriptContext* ctx)
THUMB_FUNC BOOL ScrCmd_CheckFlagVar(struct ScriptContext* ctx)
{
- struct UnkStruct_0204639C *unk80 = ctx->unk80;
+ struct UnkSavStruct80 *unk80 = ctx->unk80;
u16 *wk1 = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
u16 *wk2 = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
*wk2 = FlagCheck(unk80, *wk1);
@@ -362,7 +362,7 @@ THUMB_FUNC BOOL ScrCmd_CheckFlagVar(struct ScriptContext* ctx)
THUMB_FUNC BOOL ScrCmd_SetFlagVar(struct ScriptContext* ctx)
{
- struct UnkStruct_0204639C *unk80 = ctx->unk80;
+ struct UnkSavStruct80 *unk80 = ctx->unk80;
u16 *wk = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
FlagSet(unk80, *wk);
return FALSE;
@@ -370,7 +370,7 @@ THUMB_FUNC BOOL ScrCmd_SetFlagVar(struct ScriptContext* ctx)
THUMB_FUNC BOOL ScrCmd_SetTrainerFlag(struct ScriptContext* ctx)
{
- struct UnkStruct_0204639C *unk80 = ctx->unk80;
+ struct UnkSavStruct80 *unk80 = ctx->unk80;
u16 flag = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
TrainerFlagSet(unk80, flag);
return FALSE;
@@ -378,7 +378,7 @@ THUMB_FUNC BOOL ScrCmd_SetTrainerFlag(struct ScriptContext* ctx)
THUMB_FUNC BOOL ScrCmd_ClearTrainerFlag(struct ScriptContext* ctx)
{
- struct UnkStruct_0204639C *unk80 = ctx->unk80;
+ struct UnkSavStruct80 *unk80 = ctx->unk80;
u16 flag = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
TrainerFlagClear(unk80, flag);
return FALSE;
@@ -386,7 +386,7 @@ THUMB_FUNC BOOL ScrCmd_ClearTrainerFlag(struct ScriptContext* ctx)
THUMB_FUNC BOOL ScrCmd_CheckTrainerFlag(struct ScriptContext* ctx)
{
- struct UnkStruct_0204639C *unk80 = ctx->unk80;
+ struct UnkSavStruct80 *unk80 = ctx->unk80;
u16 flag = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
ctx->comparisonResult = TrainerFlagCheck(unk80, flag);
return FALSE;
@@ -482,3 +482,26 @@ THUMB_FUNC BOOL ScrCmd_Unk01FD(struct ScriptContext* ctx)
return TRUE;
}
+THUMB_FUNC BOOL ScrCmd_Unk01FE(struct ScriptContext* ctx)
+{
+ u8 id = ScriptReadByte(ctx);
+
+ if (ctx->unk80->unkA8 == NULL)
+ {
+ return FALSE;
+ }
+
+ u16 *unkArr = ctx->unk80->unkA8->unk90[id].unk0;
+ if (unkArr[0] == 0xFFFF)
+ {
+ struct MsgData *msgdata = NewMsgDataFromNarc(1, NARC_MSGDATA_MSG, 0x22b, 32);
+ MOD05_021E2BD0(ctx, msgdata, unkArr[1], 1, NULL);
+ DestroyMsgData(msgdata);
+ }
+ else
+ {
+ MOD05_021E2C58(ctx, unkArr[0], unkArr[1], unkArr[2], (s16)unkArr[3], 1);
+ }
+ SetupNativeScript(ctx, FUN_0203A2F0);
+ return TRUE;
+}
diff --git a/arm9/src/scrcmd_18_c.c b/arm9/src/scrcmd_18_c.c
index 510e181f..633ad71c 100644
--- a/arm9/src/scrcmd_18_c.c
+++ b/arm9/src/scrcmd_18_c.c
@@ -6,19 +6,19 @@
#include "map_header.h"
#include "scrcmd.h"
-extern u16 VarGet(struct UnkStruct_0204639C* arg, u16 wk);
-extern u16 *GetVarPointer(struct UnkStruct_0204639C* arg, u16);
+extern u16 VarGet(struct UnkSavStruct80* arg, u16 wk);
+extern u16 *GetVarPointer(struct UnkSavStruct80* arg, u16);
extern BOOL GiveMon(u32 heap_id, struct SaveBlock2 * sav2, u16 species, u8 level, u16 item, u32 mapSec, u8 encounterType);
THUMB_FUNC BOOL ScrCmd_GiveMon(struct ScriptContext* ctx)
{
- u32 mapSec = FUN_02034824(*(ctx->unk80->unk1C));
- struct UnkStruct_0204639C *savePtr = ctx->unk80;
+ u32 mapSec = FUN_02034824(*(ctx->unk80->mapId));
+ struct UnkSavStruct80 *savePtr = ctx->unk80;
u16 species = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
u16 level = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
u16 item = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
u16 * varPtr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
- struct PlayerParty * party = SavArray_PlayerParty_get((struct SaveBlock2 *) savePtr->unkC);
- *varPtr = (u16)GiveMon(11, (struct SaveBlock2 *) savePtr->unkC, species, (u8)level, item, mapSec, 12);
+ struct PlayerParty * party = SavArray_PlayerParty_get(savePtr->saveBlock2);
+ *varPtr = (u16)GiveMon(11, savePtr->saveBlock2, species, (u8)level, item, mapSec, 12);
return FALSE;
}
diff --git a/include/scrcmd.h b/include/scrcmd.h
index ece18d9a..16a58556 100644
--- a/include/scrcmd.h
+++ b/include/scrcmd.h
@@ -54,6 +54,7 @@ BOOL ScrCmd_MessageFrom(struct ScriptContext* ctx);
BOOL ScrCmd_MessageFrom2(struct ScriptContext* ctx);
BOOL ScrCmd_Unk01FC(struct ScriptContext* ctx);
BOOL ScrCmd_Unk01FD(struct ScriptContext* ctx);
+BOOL ScrCmd_Unk01FE(struct ScriptContext* ctx);
//scrcmd_18.c
BOOL ScrCmd_GiveMon(struct ScriptContext* ctx);
diff --git a/include/script.h b/include/script.h
index de161889..5da251b5 100644
--- a/include/script.h
+++ b/include/script.h
@@ -10,6 +10,29 @@ struct ScriptContext;
typedef u8 (*ScrCmdFunc)(struct ScriptContext *);
typedef u8 Script[];
+
+struct UnkStruct_020464D4
+{
+ u16 unk0[4];
+ u8 padding[0x108];
+};
+
+struct UnkStruct_02046444
+{
+ u8 padding[0x90];
+ struct UnkStruct_020464D4 unk90[1]; //todo find size
+};
+
+struct UnkSavStruct80
+{
+ u8 padding[0xC];
+ struct SaveBlock2 *saveBlock2;
+ u8 padding2[0xC];
+ u32 *mapId;
+ u8 padding3[0x88];
+ struct UnkStruct_02046444 * unkA8;
+};
+
struct ScriptContext
{
u8 stackDepth;
@@ -21,10 +44,10 @@ struct ScriptContext
ScrCmdFunc *cmdTable;
u32 cmdCount;
u32 data[4];
- u32 unk74;
+ struct UnkStruct_0204639C * unk74;
struct MsgData * msgData;
u8 *unk7C;
- struct UnkStruct_0204639C * unk80;
+ struct UnkSavStruct80 * unk80;
};
#define ScriptReadByte(ctx) (*(ctx->scriptPtr++))