From 1d5429389420b7a6c4041cefed8adbb40a673ba8 Mon Sep 17 00:00:00 2001 From: Akashi Akira Date: Tue, 9 May 2023 16:25:13 +0100 Subject: [PATCH 01/11] ScrCmd_GetPlayerPosition --- arm9/asm/scrcmd_asm.s | 31 ------------------------------- arm9/asm/unk_02038C78.s | 2 +- arm9/global.inc | 2 +- arm9/src/scrcmd.c | 15 +++++++++++++++ include/scrcmd.h | 1 + 5 files changed, 18 insertions(+), 33 deletions(-) diff --git a/arm9/asm/scrcmd_asm.s b/arm9/asm/scrcmd_asm.s index 2b480006a..04fe65ac6 100644 --- a/arm9/asm/scrcmd_asm.s +++ b/arm9/asm/scrcmd_asm.s @@ -14,37 +14,6 @@ UNK_021C5A0C: ; 0x021C5A0C .text - thumb_func_start ScrCmd_Unk0069 -ScrCmd_Unk0069: ; 0x0203B574 - 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 - ldr r0, [r5, #0x38] - bl GetPlayerXCoord - strh r0, [r6, #0x0] - ldr r0, [r5, #0x38] - bl GetPlayerYCoord - strh r0, [r4, #0x0] - mov r0, #0x0 - pop {r4-r6, pc} - .balign 4 - thumb_func_start ScrCmd_Unk006A ScrCmd_Unk006A: ; 0x0203B5B8 push {r4-r6, lr} diff --git a/arm9/asm/unk_02038C78.s b/arm9/asm/unk_02038C78.s index ae4b3e86a..eb205bc17 100644 --- a/arm9/asm/unk_02038C78.s +++ b/arm9/asm/unk_02038C78.s @@ -254,7 +254,7 @@ gScriptCmdTable: ; 0x020F355C .word ScrCmd_LockCamera .word ScrCmd_ReleaseCamera .word ScrCmd_FacePlayer - .word ScrCmd_Unk0069 + .word ScrCmd_GetPlayerPosition .word ScrCmd_Unk006A .word ScrCmd_Unk006B .word ScrCmd_Unk006C diff --git a/arm9/global.inc b/arm9/global.inc index ca11b5908..4217797c5 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -2799,7 +2799,7 @@ .extern ScrCmd_LockCamera .extern ScrCmd_ReleaseCamera .extern ScrCmd_FacePlayer -.extern ScrCmd_Unk0069 +.extern ScrCmd_GetPlayerPosition .extern ScrCmd_Unk006A .extern ScrCmd_Unk01BD .extern ScrCmd_Unk006B diff --git a/arm9/src/scrcmd.c b/arm9/src/scrcmd.c index 07806a214..869035a1e 100644 --- a/arm9/src/scrcmd.c +++ b/arm9/src/scrcmd.c @@ -80,6 +80,8 @@ extern void FUN_02057654(struct Vecx32 *target); extern u32 PlayerAvatar_GetFacingDirection(struct PlayerAvatar *playerAvatar); extern u32 FUN_02059E74(u32 direction); extern void MOD05_021F1EC0(struct Vecx32 *param0, u32 param1); +extern u16 GetPlayerXCoord(struct PlayerAvatar *playerAvatar); +extern u16 GetPlayerYCoord(struct PlayerAvatar *playerAvatar); extern u8 UNK_021C5A0C[4]; @@ -1670,3 +1672,16 @@ THUMB_FUNC BOOL ScrCmd_FacePlayer(struct ScriptContext *ctx) //0068 MOD05_021F1EC0(*unk1, unk0); return FALSE; } + +THUMB_FUNC BOOL ScrCmd_GetPlayerPosition(struct ScriptContext *ctx) +{ + struct FieldSystem *fieldSystem = ctx->fieldSystem; + + u16 *xVar = GetVarPointer(ctx->fieldSystem, ScriptReadHalfword(ctx)); + u16 *yVar = GetVarPointer(ctx->fieldSystem, ScriptReadHalfword(ctx)); + + *xVar = GetPlayerXCoord(fieldSystem->playerAvatar); + *yVar = GetPlayerYCoord(fieldSystem->playerAvatar); + + return FALSE; +} diff --git a/include/scrcmd.h b/include/scrcmd.h index ee734e5ba..9abe19e22 100644 --- a/include/scrcmd.h +++ b/include/scrcmd.h @@ -126,6 +126,7 @@ BOOL ScrCmd_RemoveOverworldEvent(struct ScriptContext *ctx); BOOL ScrCmd_LockCamera(struct ScriptContext *ctx); BOOL ScrCmd_ReleaseCamera(struct ScriptContext *ctx); BOOL ScrCmd_FacePlayer(struct ScriptContext *ctx); +BOOL ScrCmd_GetPlayerPosition(struct ScriptContext *ctx); // scrcmd_mart.c BOOL ScrCmd_NormalMart(struct ScriptContext * ctx); From 9e2159e9415e7d46584442031dfd8c2b808fdeaa Mon Sep 17 00:00:00 2001 From: Akashi Akira Date: Tue, 9 May 2023 17:06:42 +0100 Subject: [PATCH 02/11] ScrCmd_GetOverworldEventPosition --- arm9/asm/scrcmd_asm.s | 42 ----------------------------------------- arm9/asm/unk_02038C78.s | 2 +- arm9/global.inc | 2 +- arm9/src/scrcmd.c | 18 ++++++++++++++++-- include/scrcmd.h | 1 + 5 files changed, 19 insertions(+), 46 deletions(-) diff --git a/arm9/asm/scrcmd_asm.s b/arm9/asm/scrcmd_asm.s index 04fe65ac6..57fe64fb7 100644 --- a/arm9/asm/scrcmd_asm.s +++ b/arm9/asm/scrcmd_asm.s @@ -14,48 +14,6 @@ UNK_021C5A0C: ; 0x021C5A0C .text - thumb_func_start ScrCmd_Unk006A -ScrCmd_Unk006A: ; 0x0203B5B8 - 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 VarGet - add r1, r0, #0x0 - ldr r0, [r5, #0x34] - bl FUN_02058060 - add r5, r0, #0x0 - add r0, r4, #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 - add r0, r5, #0x0 - bl FUN_02058B2C - strh r0, [r6, #0x0] - add r0, r5, #0x0 - bl FUN_02058B4C - strh r0, [r4, #0x0] - mov r0, #0x0 - pop {r4-r6, pc} - .balign 4 - thumb_func_start ScrCmd_Unk01BD ScrCmd_Unk01BD: ; 0x0203B618 push {r3-r5, lr} diff --git a/arm9/asm/unk_02038C78.s b/arm9/asm/unk_02038C78.s index eb205bc17..a7b89db43 100644 --- a/arm9/asm/unk_02038C78.s +++ b/arm9/asm/unk_02038C78.s @@ -255,7 +255,7 @@ gScriptCmdTable: ; 0x020F355C .word ScrCmd_ReleaseCamera .word ScrCmd_FacePlayer .word ScrCmd_GetPlayerPosition - .word ScrCmd_Unk006A + .word ScrCmd_GetOverworldEventPosition .word ScrCmd_Unk006B .word ScrCmd_Unk006C .word ScrCmd_Unk006D diff --git a/arm9/global.inc b/arm9/global.inc index 4217797c5..bfcf865aa 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -2800,7 +2800,7 @@ .extern ScrCmd_ReleaseCamera .extern ScrCmd_FacePlayer .extern ScrCmd_GetPlayerPosition -.extern ScrCmd_Unk006A +.extern ScrCmd_GetOverworldEventPosition .extern ScrCmd_Unk01BD .extern ScrCmd_Unk006B .extern ScrCmd_Unk006C diff --git a/arm9/src/scrcmd.c b/arm9/src/scrcmd.c index 869035a1e..688daa375 100644 --- a/arm9/src/scrcmd.c +++ b/arm9/src/scrcmd.c @@ -55,7 +55,7 @@ extern u32 FUN_0205AEA4(struct Vecx32 *param0, const void *ptr); extern u32 FUN_02058B2C(struct Vecx32 *param0); extern u32 FUN_02058B4C(struct Vecx32 *param0); extern struct Vecx32 *FUN_020580B4(u32 param0, u32 param1); -extern struct Vecx32 *FUN_02058060(u32 param0, u32 param1); +extern struct Vecx32 *FUN_02058060(u32 param0, u32 eventId); extern BOOL FUN_0205AEF0(u32 param0); extern void FUN_0205AEFC(u32 param0); extern void FUN_02058780(u32 param0); @@ -1673,7 +1673,7 @@ THUMB_FUNC BOOL ScrCmd_FacePlayer(struct ScriptContext *ctx) //0068 return FALSE; } -THUMB_FUNC BOOL ScrCmd_GetPlayerPosition(struct ScriptContext *ctx) +THUMB_FUNC BOOL ScrCmd_GetPlayerPosition(struct ScriptContext *ctx) //0069 { struct FieldSystem *fieldSystem = ctx->fieldSystem; @@ -1685,3 +1685,17 @@ THUMB_FUNC BOOL ScrCmd_GetPlayerPosition(struct ScriptContext *ctx) return FALSE; } + +THUMB_FUNC BOOL ScrCmd_GetOverworldEventPosition(struct ScriptContext *ctx) //006A +{ + struct FieldSystem *fieldSystem = ctx->fieldSystem; + u32 eventId = VarGet(ctx->fieldSystem, ScriptReadHalfword(ctx)); + struct Vecx32 *position = FUN_02058060(fieldSystem->unk34, eventId); + + u16 *xVar = GetVarPointer(ctx->fieldSystem, ScriptReadHalfword(ctx)); + u16 *yVar = GetVarPointer(ctx->fieldSystem, ScriptReadHalfword(ctx)); + + *xVar = FUN_02058B2C(position); + *yVar = FUN_02058B4C(position); + return FALSE; +} diff --git a/include/scrcmd.h b/include/scrcmd.h index 9abe19e22..37d34592f 100644 --- a/include/scrcmd.h +++ b/include/scrcmd.h @@ -127,6 +127,7 @@ BOOL ScrCmd_LockCamera(struct ScriptContext *ctx); BOOL ScrCmd_ReleaseCamera(struct ScriptContext *ctx); BOOL ScrCmd_FacePlayer(struct ScriptContext *ctx); BOOL ScrCmd_GetPlayerPosition(struct ScriptContext *ctx); +BOOL ScrCmd_GetOverworldEventPosition(struct ScriptContext *ctx); // scrcmd_mart.c BOOL ScrCmd_NormalMart(struct ScriptContext * ctx); From 1bea4e32caf852c055ab5e191fafe872d704cc01 Mon Sep 17 00:00:00 2001 From: Akashi Akira Date: Tue, 9 May 2023 19:13:16 +0100 Subject: [PATCH 03/11] ScrCmd_GetPlayerDirection --- arm9/asm/scrcmd_asm.s | 20 -------------------- arm9/asm/unk_02038C78.s | 2 +- arm9/global.inc | 2 +- arm9/src/scrcmd.c | 8 ++++++++ include/scrcmd.h | 1 + 5 files changed, 11 insertions(+), 22 deletions(-) diff --git a/arm9/asm/scrcmd_asm.s b/arm9/asm/scrcmd_asm.s index 57fe64fb7..84b2b5cec 100644 --- a/arm9/asm/scrcmd_asm.s +++ b/arm9/asm/scrcmd_asm.s @@ -14,26 +14,6 @@ UNK_021C5A0C: ; 0x021C5A0C .text - thumb_func_start ScrCmd_Unk01BD -ScrCmd_Unk01BD: ; 0x0203B618 - 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 r5, #0x80 - add r4, r0, #0x0 - ldr r0, [r5, #0x0] - ldr r0, [r0, #0x38] - bl PlayerAvatar_GetFacingDirection - strh r0, [r4, #0x0] - mov r0, #0x0 - pop {r3-r5, pc} - .balign 4 - thumb_func_start ScrCmd_Unk006B ScrCmd_Unk006B: ; 0x0203B640 push {r4-r7, lr} diff --git a/arm9/asm/unk_02038C78.s b/arm9/asm/unk_02038C78.s index a7b89db43..a529750ae 100644 --- a/arm9/asm/unk_02038C78.s +++ b/arm9/asm/unk_02038C78.s @@ -594,7 +594,7 @@ gScriptCmdTable: ; 0x020F355C .word ScrCmd_AddPartyMonFriendship .word ScrCmd_SubtractPartyMonFriendship .word ScrCmd_Unk01BC - .word ScrCmd_Unk01BD + .word ScrCmd_GetPlayerDirection .word ScrCmd_Unk01BE .word ScrCmd_Unk01BF .word ScrCmd_CheckPartyForSpecies diff --git a/arm9/global.inc b/arm9/global.inc index bfcf865aa..69ab204ab 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -2801,7 +2801,7 @@ .extern ScrCmd_FacePlayer .extern ScrCmd_GetPlayerPosition .extern ScrCmd_GetOverworldEventPosition -.extern ScrCmd_Unk01BD +.extern ScrCmd_GetPlayerDirection .extern ScrCmd_Unk006B .extern ScrCmd_Unk006C .extern ScrCmd_Unk006D diff --git a/arm9/src/scrcmd.c b/arm9/src/scrcmd.c index 688daa375..613bfb583 100644 --- a/arm9/src/scrcmd.c +++ b/arm9/src/scrcmd.c @@ -1699,3 +1699,11 @@ THUMB_FUNC BOOL ScrCmd_GetOverworldEventPosition(struct ScriptContext *ctx) //00 *yVar = FUN_02058B4C(position); return FALSE; } + +THUMB_FUNC BOOL ScrCmd_GetPlayerDirection(struct ScriptContext *ctx) //01BD +{ + u16 *directionVar = GetVarPointer(ctx->fieldSystem, ScriptReadHalfword(ctx)); + + *directionVar = (u16)PlayerAvatar_GetFacingDirection(ctx->fieldSystem->playerAvatar); + return FALSE; +} diff --git a/include/scrcmd.h b/include/scrcmd.h index 37d34592f..1c87cb0ec 100644 --- a/include/scrcmd.h +++ b/include/scrcmd.h @@ -128,6 +128,7 @@ BOOL ScrCmd_ReleaseCamera(struct ScriptContext *ctx); BOOL ScrCmd_FacePlayer(struct ScriptContext *ctx); BOOL ScrCmd_GetPlayerPosition(struct ScriptContext *ctx); BOOL ScrCmd_GetOverworldEventPosition(struct ScriptContext *ctx); +BOOL ScrCmd_GetPlayerDirection(struct ScriptContext *ctx); // scrcmd_mart.c BOOL ScrCmd_NormalMart(struct ScriptContext * ctx); From d429d9496c73ce6fcfb5390382b59dfe05dbad93 Mon Sep 17 00:00:00 2001 From: Akashi Akira Date: Tue, 9 May 2023 20:16:20 +0100 Subject: [PATCH 04/11] ScrCmd_Unk006C --- arm9/asm/scrcmd_asm.s | 99 ---------------------------------------- arm9/src/scrcmd.c | 29 +++++++++--- include/nitro/FX_types.h | 8 ++-- include/scrcmd.h | 1 + 4 files changed, 28 insertions(+), 109 deletions(-) diff --git a/arm9/asm/scrcmd_asm.s b/arm9/asm/scrcmd_asm.s index 84b2b5cec..b2eff2f4f 100644 --- a/arm9/asm/scrcmd_asm.s +++ b/arm9/asm/scrcmd_asm.s @@ -14,105 +14,6 @@ UNK_021C5A0C: ; 0x021C5A0C .text - thumb_func_start ScrCmd_Unk006B -ScrCmd_Unk006B: ; 0x0203B640 - push {r4-r7, lr} - sub sp, #0xc - add r5, r0, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r7, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r6, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r4, r0, #0x0 - cmp r7, #0x0 - beq _0203B696 - lsl r0, r7, #0xc - bl _fflt - add r1, r0, #0x0 - mov r0, #0x3f - lsl r0, r0, #0x18 - bl _fadd - b _0203B6A4 -_0203B696: - lsl r0, r7, #0xc - bl _fflt - mov r1, #0x3f - lsl r1, r1, #0x18 - bl _fsub -_0203B6A4: - bl _ffix - str r0, [sp, #0x0] - cmp r6, #0x0 - beq _0203B6C0 - lsl r0, r6, #0xc - bl _fflt - add r1, r0, #0x0 - mov r0, #0x3f - lsl r0, r0, #0x18 - bl _fadd - b _0203B6CE -_0203B6C0: - lsl r0, r6, #0xc - bl _fflt - mov r1, #0x3f - lsl r1, r1, #0x18 - bl _fsub -_0203B6CE: - bl _ffix - str r0, [sp, #0x4] - cmp r4, #0x0 - beq _0203B6EA - lsl r0, r4, #0xc - bl _fflt - add r1, r0, #0x0 - mov r0, #0x3f - lsl r0, r0, #0x18 - bl _fadd - b _0203B6F8 -_0203B6EA: - lsl r0, r4, #0xc - bl _fflt - mov r1, #0x3f - lsl r1, r1, #0x18 - bl _fsub -_0203B6F8: - bl _ffix - str r0, [sp, #0x8] - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0x38] - bl FUN_020553A0 - add r1, sp, #0x0 - bl FUN_02058BB4 - add r5, #0x80 - ldr r1, [r5, #0x0] - add r0, sp, #0x0 - ldr r1, [r1, #0x20] - bl Camera_OffsetLookAtPosAndTarget - mov r0, #0x0 - add sp, #0xc - pop {r4-r7, pc} - .balign 4 - thumb_func_start ScrCmd_Unk006C ScrCmd_Unk006C: ; 0x0203B724 push {r4, lr} diff --git a/arm9/src/scrcmd.c b/arm9/src/scrcmd.c index 613bfb583..cc7823b8d 100644 --- a/arm9/src/scrcmd.c +++ b/arm9/src/scrcmd.c @@ -82,6 +82,7 @@ extern u32 FUN_02059E74(u32 direction); extern void MOD05_021F1EC0(struct Vecx32 *param0, u32 param1); extern u16 GetPlayerXCoord(struct PlayerAvatar *playerAvatar); extern u16 GetPlayerYCoord(struct PlayerAvatar *playerAvatar); +extern void FUN_02058BB4(struct Vecx32 *param0, struct Vecx32 *param1); extern u8 UNK_021C5A0C[4]; @@ -1406,20 +1407,20 @@ THUMB_FUNC BOOL ScrCmd_Unk02A1(struct ScriptContext *ctx) //02A1 return FALSE; } -THUMB_FUNC static struct Vecx32 *FUN_0203B120(struct FieldSystem *arg, u16 param1) +THUMB_FUNC static struct Vecx32 *FUN_0203B120(struct FieldSystem *fieldSystem, u16 param1) { if (param1 == 242) { - return FUN_020580B4(arg->unk34, 48); + return FUN_020580B4(fieldSystem->unk34, 48); } else if (param1 == 241) { - struct Vecx32 **res = (struct Vecx32 **)FUN_02039438(arg, 11); + struct Vecx32 **res = (struct Vecx32 **)FUN_02039438(fieldSystem, 11); return *res; } else { - return FUN_02058060(arg->unk34, param1); + return FUN_02058060(fieldSystem->unk34, param1); } } @@ -1435,7 +1436,7 @@ THUMB_FUNC static BOOL FUN_0203B158(struct ScriptContext *ctx) return *unk == 0 ? TRUE : FALSE; } -THUMB_FUNC static void FUN_0203B174(struct FieldSystem *arg, u32 param1, void *param2) +THUMB_FUNC static void FUN_0203B174(struct FieldSystem *fieldSystem, u32 param1, void *param2) { UnkStruct_0203B174 *unkStruct = (UnkStruct_0203B174 *)AllocFromHeap(4, sizeof(UnkStruct_0203B174)); if (unkStruct == NULL) @@ -1443,7 +1444,7 @@ THUMB_FUNC static void FUN_0203B174(struct FieldSystem *arg, u32 param1, void *p GF_AssertFail(); return; } - unkStruct->fieldSystem = arg; + unkStruct->fieldSystem = fieldSystem; unkStruct->Unk04 = param1; unkStruct->Unk08 = param2; unkStruct->Unk00 = FUN_0200CA44((void (*)(u32, void *))FUN_0203B1A8, unkStruct, 0); @@ -1707,3 +1708,19 @@ THUMB_FUNC BOOL ScrCmd_GetPlayerDirection(struct ScriptContext *ctx) //01BD *directionVar = (u16)PlayerAvatar_GetFacingDirection(ctx->fieldSystem->playerAvatar); return FALSE; } + +THUMB_FUNC BOOL ScrCmd_Unk006B(struct ScriptContext *ctx) //006B - todo: CheckPersonPosition? +{ + u16 x = VarGet(ctx->fieldSystem, ScriptReadHalfword(ctx)); + u16 y = VarGet(ctx->fieldSystem, ScriptReadHalfword(ctx)); + u16 z = VarGet(ctx->fieldSystem, ScriptReadHalfword(ctx)); + + struct Vecx32 vector; + vector.x = FX32_CONST(x); + vector.y = FX32_CONST(y); + vector.z = FX32_CONST(z); + + FUN_02058BB4(FUN_020553A0(ctx->fieldSystem->playerAvatar), &vector); + Camera_OffsetLookAtPosAndTarget(&vector, ctx->fieldSystem->cameraWork); + return FALSE; +} diff --git a/include/nitro/FX_types.h b/include/nitro/FX_types.h index 3c48b6c69..a4cd98a3b 100644 --- a/include/nitro/FX_types.h +++ b/include/nitro/FX_types.h @@ -60,11 +60,11 @@ typedef s64 fx64c; #define FX_FX16_TO_F32(x) ((f32)((x) / (f32)(1 << FX16_SHIFT))) #define FX_F32_TO_FX16(x) ((fx16)(((x) > 0) ? \ - (fx16)((x) * (1 << FX16_INT_SHIFT) + 0.5f ) : \ - (fx16)((x) * (1 << FX16_INT_SHIFT) - 0.5f ))) + ((x) * (1 << FX16_INT_SHIFT) + 0.5f ) : \ + ((x) * (1 << FX16_INT_SHIFT) - 0.5f ))) #define FX_F32_TO_FX32(x) ((fx32)(((x) > 0) ? \ - (fx32)((x) * (1 << FX32_INT_SHIFT) + 0.5f ) : \ - (fx32)((x) * (1 << FX32_INT_SHIFT) - 0.5f ))) + ((x) * (1 << FX32_INT_SHIFT) + 0.5f ) : \ + ((x) * (1 << FX32_INT_SHIFT) - 0.5f ))) #define FX16_CONST(x) FX_F32_TO_FX16(x) #define FX32_CONST(x) FX_F32_TO_FX32(x) diff --git a/include/scrcmd.h b/include/scrcmd.h index 1c87cb0ec..dfaa8a3a0 100644 --- a/include/scrcmd.h +++ b/include/scrcmd.h @@ -129,6 +129,7 @@ BOOL ScrCmd_FacePlayer(struct ScriptContext *ctx); BOOL ScrCmd_GetPlayerPosition(struct ScriptContext *ctx); BOOL ScrCmd_GetOverworldEventPosition(struct ScriptContext *ctx); BOOL ScrCmd_GetPlayerDirection(struct ScriptContext *ctx); +BOOL ScrCmd_Unk006B(struct ScriptContext *ctx); // scrcmd_mart.c BOOL ScrCmd_NormalMart(struct ScriptContext * ctx); From e4b7d795ea4f068f1dd00b0be130e7b789fe01a7 Mon Sep 17 00:00:00 2001 From: Akashi Akira Date: Tue, 9 May 2023 20:37:05 +0100 Subject: [PATCH 05/11] ScrCmd_KeepOverworldEvent --- arm9/asm/scrcmd_asm.s | 25 ------------------------- arm9/asm/unk_02038C78.s | 2 +- arm9/global.inc | 2 +- arm9/src/scrcmd.c | 17 +++++++++++++---- include/scrcmd.h | 1 + 5 files changed, 16 insertions(+), 31 deletions(-) diff --git a/arm9/asm/scrcmd_asm.s b/arm9/asm/scrcmd_asm.s index b2eff2f4f..48746d4e8 100644 --- a/arm9/asm/scrcmd_asm.s +++ b/arm9/asm/scrcmd_asm.s @@ -14,31 +14,6 @@ UNK_021C5A0C: ; 0x021C5A0C .text - thumb_func_start ScrCmd_Unk006C -ScrCmd_Unk006C: ; 0x0203B724 - push {r4, lr} - add r4, r0, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0x34] - bl FUN_02058060 - ldr r2, [r4, #0x8] - add r1, r2, #0x1 - str r1, [r4, #0x8] - ldrb r1, [r2, #0x0] - bl FUN_02058994 - mov r0, #0x0 - pop {r4, pc} - .balign 4 - thumb_func_start ScrCmd_Unk006D ScrCmd_Unk006D: ; 0x0203B758 push {r3-r5, lr} diff --git a/arm9/asm/unk_02038C78.s b/arm9/asm/unk_02038C78.s index a529750ae..825dfd3ad 100644 --- a/arm9/asm/unk_02038C78.s +++ b/arm9/asm/unk_02038C78.s @@ -257,7 +257,7 @@ gScriptCmdTable: ; 0x020F355C .word ScrCmd_GetPlayerPosition .word ScrCmd_GetOverworldEventPosition .word ScrCmd_Unk006B - .word ScrCmd_Unk006C + .word ScrCmd_KeepOverworldEvent .word ScrCmd_Unk006D .word ScrCmd_Unk006E .word ScrCmd_GiveMoney diff --git a/arm9/global.inc b/arm9/global.inc index 69ab204ab..52b82a7ac 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -2803,7 +2803,7 @@ .extern ScrCmd_GetOverworldEventPosition .extern ScrCmd_GetPlayerDirection .extern ScrCmd_Unk006B -.extern ScrCmd_Unk006C +.extern ScrCmd_KeepOverworldEvent .extern ScrCmd_Unk006D .extern ScrCmd_Unk02AD .extern ScrCmd_Unk006E diff --git a/arm9/src/scrcmd.c b/arm9/src/scrcmd.c index cc7823b8d..7b7792c02 100644 --- a/arm9/src/scrcmd.c +++ b/arm9/src/scrcmd.c @@ -83,6 +83,7 @@ extern void MOD05_021F1EC0(struct Vecx32 *param0, u32 param1); extern u16 GetPlayerXCoord(struct PlayerAvatar *playerAvatar); extern u16 GetPlayerYCoord(struct PlayerAvatar *playerAvatar); extern void FUN_02058BB4(struct Vecx32 *param0, struct Vecx32 *param1); +extern void FUN_02058994(struct Vecx32 *vector, u8 value); extern u8 UNK_021C5A0C[4]; @@ -1407,20 +1408,20 @@ THUMB_FUNC BOOL ScrCmd_Unk02A1(struct ScriptContext *ctx) //02A1 return FALSE; } -THUMB_FUNC static struct Vecx32 *FUN_0203B120(struct FieldSystem *fieldSystem, u16 param1) +THUMB_FUNC static struct Vecx32 *FUN_0203B120(struct FieldSystem *fieldSystem, u16 eventId) { - if (param1 == 242) + if (eventId == 242) { return FUN_020580B4(fieldSystem->unk34, 48); } - else if (param1 == 241) + else if (eventId == 241) { struct Vecx32 **res = (struct Vecx32 **)FUN_02039438(fieldSystem, 11); return *res; } else { - return FUN_02058060(fieldSystem->unk34, param1); + return FUN_02058060(fieldSystem->unk34, eventId); } } @@ -1724,3 +1725,11 @@ THUMB_FUNC BOOL ScrCmd_Unk006B(struct ScriptContext *ctx) //006B - todo: CheckPe Camera_OffsetLookAtPosAndTarget(&vector, ctx->fieldSystem->cameraWork); return FALSE; } + +THUMB_FUNC BOOL ScrCmd_KeepOverworldEvent(struct ScriptContext *ctx) //006C +{ + u16 eventId = VarGet(ctx->fieldSystem, ScriptReadHalfword(ctx)); + struct Vecx32 *vector = FUN_02058060(ctx->fieldSystem->unk34, eventId); + FUN_02058994(vector, ScriptReadByte(ctx)); + return FALSE; +} diff --git a/include/scrcmd.h b/include/scrcmd.h index dfaa8a3a0..8e908b0de 100644 --- a/include/scrcmd.h +++ b/include/scrcmd.h @@ -130,6 +130,7 @@ BOOL ScrCmd_GetPlayerPosition(struct ScriptContext *ctx); BOOL ScrCmd_GetOverworldEventPosition(struct ScriptContext *ctx); BOOL ScrCmd_GetPlayerDirection(struct ScriptContext *ctx); BOOL ScrCmd_Unk006B(struct ScriptContext *ctx); +BOOL ScrCmd_KeepOverworldEvent(struct ScriptContext *ctx); // scrcmd_mart.c BOOL ScrCmd_NormalMart(struct ScriptContext * ctx); From 44e5af3161aa80524789739519d8c385e4b394d3 Mon Sep 17 00:00:00 2001 From: Akashi Akira Date: Tue, 9 May 2023 20:56:36 +0100 Subject: [PATCH 06/11] ScrCmd_SetOverworldEventMovement --- arm9/asm/scrcmd_asm.s | 26 -------------------------- arm9/asm/unk_02038C78.s | 2 +- arm9/global.inc | 2 +- arm9/src/scrcmd.c | 12 +++++++++++- include/scrcmd.h | 1 + 5 files changed, 14 insertions(+), 29 deletions(-) diff --git a/arm9/asm/scrcmd_asm.s b/arm9/asm/scrcmd_asm.s index 48746d4e8..95f566508 100644 --- a/arm9/asm/scrcmd_asm.s +++ b/arm9/asm/scrcmd_asm.s @@ -14,32 +14,6 @@ UNK_021C5A0C: ; 0x021C5A0C .text - thumb_func_start ScrCmd_Unk006D -ScrCmd_Unk006D: ; 0x0203B758 - 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 VarGet - add r1, r0, #0x0 - add r0, r4, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - ldr r0, [r0, #0x34] - bl FUN_02058060 - add r5, r0, #0x0 - add r0, r4, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - bl FUN_02058E90 - mov r0, #0x0 - pop {r3-r5, pc} - .balign 4 - thumb_func_start ScrCmd_Unk02AD ScrCmd_Unk02AD: ; 0x0203B790 push {r3-r5, lr} diff --git a/arm9/asm/unk_02038C78.s b/arm9/asm/unk_02038C78.s index 825dfd3ad..9564de959 100644 --- a/arm9/asm/unk_02038C78.s +++ b/arm9/asm/unk_02038C78.s @@ -258,7 +258,7 @@ gScriptCmdTable: ; 0x020F355C .word ScrCmd_GetOverworldEventPosition .word ScrCmd_Unk006B .word ScrCmd_KeepOverworldEvent - .word ScrCmd_Unk006D + .word ScrCmd_SetOverworldEventMovement .word ScrCmd_Unk006E .word ScrCmd_GiveMoney .word ScrCmd_TakeMoneyImmediate diff --git a/arm9/global.inc b/arm9/global.inc index 52b82a7ac..d61823af7 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -2804,7 +2804,7 @@ .extern ScrCmd_GetPlayerDirection .extern ScrCmd_Unk006B .extern ScrCmd_KeepOverworldEvent -.extern ScrCmd_Unk006D +.extern ScrCmd_SetOverworldEventMovement .extern ScrCmd_Unk02AD .extern ScrCmd_Unk006E .extern ScrCmd_Unk02AB diff --git a/arm9/src/scrcmd.c b/arm9/src/scrcmd.c index 7b7792c02..8e23c9488 100644 --- a/arm9/src/scrcmd.c +++ b/arm9/src/scrcmd.c @@ -84,6 +84,7 @@ extern u16 GetPlayerXCoord(struct PlayerAvatar *playerAvatar); extern u16 GetPlayerYCoord(struct PlayerAvatar *playerAvatar); extern void FUN_02058BB4(struct Vecx32 *param0, struct Vecx32 *param1); extern void FUN_02058994(struct Vecx32 *vector, u8 value); +extern void FUN_02058E90(struct Vecx32 *vector, u16 movement); extern u8 UNK_021C5A0C[4]; @@ -104,7 +105,7 @@ static BOOL FUN_0203AA0C(struct ScriptContext *ctx); static BOOL FUN_0203AB00(struct ScriptContext *ctx); static BOOL FUN_0203AD2C(struct ScriptContext *ctx); static BOOL FUN_0203AD78(struct ScriptContext *ctx); -static struct Vecx32 *FUN_0203B120(struct FieldSystem *fieldSystem, u16 param1); +static struct Vecx32 *FUN_0203B120(struct FieldSystem *fieldSystem, u16 eventId); static BOOL FUN_0203B158(struct ScriptContext *ctx); static void FUN_0203B174(struct FieldSystem *fieldSystem, u32 param1, void *param2); static void FUN_0203B1A8(u32 param0, UnkStruct_0203B174 *param1); @@ -1733,3 +1734,12 @@ THUMB_FUNC BOOL ScrCmd_KeepOverworldEvent(struct ScriptContext *ctx) //006C FUN_02058994(vector, ScriptReadByte(ctx)); return FALSE; } + +THUMB_FUNC BOOL ScrCmd_SetOverworldEventMovement(struct ScriptContext *ctx) //006D +{ + u16 eventId = VarGet(ctx->fieldSystem, ScriptReadHalfword(ctx)); + struct Vecx32 *vector = FUN_02058060(ctx->fieldSystem->unk34, eventId); + u16 movement = ScriptReadHalfword(ctx); + FUN_02058E90(vector, movement); + return FALSE; +} diff --git a/include/scrcmd.h b/include/scrcmd.h index 8e908b0de..397b9f9c2 100644 --- a/include/scrcmd.h +++ b/include/scrcmd.h @@ -131,6 +131,7 @@ BOOL ScrCmd_GetOverworldEventPosition(struct ScriptContext *ctx); BOOL ScrCmd_GetPlayerDirection(struct ScriptContext *ctx); BOOL ScrCmd_Unk006B(struct ScriptContext *ctx); BOOL ScrCmd_KeepOverworldEvent(struct ScriptContext *ctx); +BOOL ScrCmd_SetOverworldEventMovement(struct ScriptContext *ctx); // scrcmd_mart.c BOOL ScrCmd_NormalMart(struct ScriptContext * ctx); From 34cef7582723771a1221f315715ba7578bb3438f Mon Sep 17 00:00:00 2001 From: Akashi Akira Date: Tue, 9 May 2023 21:07:59 +0100 Subject: [PATCH 07/11] ScrCmd_GetOverworldEventMovement --- arm9/asm/scrcmd_asm.s | 34 ---------------------------------- arm9/asm/unk_02038C78.s | 2 +- arm9/global.inc | 2 +- arm9/src/scrcmd.c | 15 +++++++++++++++ include/scrcmd.h | 1 + 5 files changed, 18 insertions(+), 36 deletions(-) diff --git a/arm9/asm/scrcmd_asm.s b/arm9/asm/scrcmd_asm.s index 95f566508..a06b9248f 100644 --- a/arm9/asm/scrcmd_asm.s +++ b/arm9/asm/scrcmd_asm.s @@ -14,40 +14,6 @@ UNK_021C5A0C: ; 0x021C5A0C .text - thumb_func_start ScrCmd_Unk02AD -ScrCmd_Unk02AD: ; 0x0203B790 - 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 - mov r0, #0x0 - strh r0, [r4, #0x0] - add r0, r5, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r5, #0x80 - add r1, r0, #0x0 - ldr r0, [r5, #0x0] - ldr r0, [r0, #0x34] - bl FUN_02058060 - cmp r0, #0x0 - beq _0203B7D2 - bl FUN_02058480 - strh r0, [r4, #0x0] -_0203B7D2: - mov r0, #0x0 - pop {r3-r5, pc} - .balign 4 - thumb_func_start ScrCmd_Unk006E ScrCmd_Unk006E: ; 0x0203B7D8 push {r3, lr} diff --git a/arm9/asm/unk_02038C78.s b/arm9/asm/unk_02038C78.s index 9564de959..06f4b1ca0 100644 --- a/arm9/asm/unk_02038C78.s +++ b/arm9/asm/unk_02038C78.s @@ -834,7 +834,7 @@ gScriptCmdTable: ; 0x020F355C .word ScrCmd_Unk02AA .word ScrCmd_Unk02AB .word ScrCmd_Unk02AC - .word ScrCmd_Unk02AD + .word ScrCmd_GetOverworldEventMovement .word ScrCmd_Unk02AE .word ScrCmd_Unk02AF .word ScrCmd_Unk02B0 diff --git a/arm9/global.inc b/arm9/global.inc index d61823af7..626ee034f 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -2805,7 +2805,7 @@ .extern ScrCmd_Unk006B .extern ScrCmd_KeepOverworldEvent .extern ScrCmd_SetOverworldEventMovement -.extern ScrCmd_Unk02AD +.extern ScrCmd_GetOverworldEventMovement .extern ScrCmd_Unk006E .extern ScrCmd_Unk02AB .extern ScrCmd_Unk0093 diff --git a/arm9/src/scrcmd.c b/arm9/src/scrcmd.c index 8e23c9488..1e9e8c1d1 100644 --- a/arm9/src/scrcmd.c +++ b/arm9/src/scrcmd.c @@ -85,6 +85,7 @@ extern u16 GetPlayerYCoord(struct PlayerAvatar *playerAvatar); extern void FUN_02058BB4(struct Vecx32 *param0, struct Vecx32 *param1); extern void FUN_02058994(struct Vecx32 *vector, u8 value); extern void FUN_02058E90(struct Vecx32 *vector, u16 movement); +extern u16 FUN_02058480(struct Vecx32 *vector); extern u8 UNK_021C5A0C[4]; @@ -1743,3 +1744,17 @@ THUMB_FUNC BOOL ScrCmd_SetOverworldEventMovement(struct ScriptContext *ctx) //00 FUN_02058E90(vector, movement); return FALSE; } + +THUMB_FUNC BOOL ScrCmd_GetOverworldEventMovement(struct ScriptContext *ctx) //02AD +{ + u16 *variable = GetVarPointer(ctx->fieldSystem, ScriptReadHalfword(ctx)); + *variable = 0; + u16 eventId = VarGet(ctx->fieldSystem, ScriptReadHalfword(ctx)); + + struct Vecx32 *vector = FUN_02058060(ctx->fieldSystem->unk34, eventId); + if (vector != NULL) + { + *variable = FUN_02058480(vector); + } + return FALSE; +} diff --git a/include/scrcmd.h b/include/scrcmd.h index 397b9f9c2..443153177 100644 --- a/include/scrcmd.h +++ b/include/scrcmd.h @@ -132,6 +132,7 @@ BOOL ScrCmd_GetPlayerDirection(struct ScriptContext *ctx); BOOL ScrCmd_Unk006B(struct ScriptContext *ctx); BOOL ScrCmd_KeepOverworldEvent(struct ScriptContext *ctx); BOOL ScrCmd_SetOverworldEventMovement(struct ScriptContext *ctx); +BOOL ScrCmd_GetOverworldEventMovement(struct ScriptContext *ctx); // scrcmd_mart.c BOOL ScrCmd_NormalMart(struct ScriptContext * ctx); From fdd3c3700179dad9caafb99f5d7221d7d07ae1d6 Mon Sep 17 00:00:00 2001 From: Akashi Akira Date: Tue, 9 May 2023 21:56:37 +0100 Subject: [PATCH 08/11] ScrCmd_OverworldEventStopFollowing --- arm9/asm/scrcmd_asm.s | 13 ------------- arm9/asm/unk_02038C78.s | 2 +- arm9/global.inc | 2 +- arm9/src/scrcmd.c | 8 ++++++++ include/scrcmd.h | 1 + 5 files changed, 11 insertions(+), 15 deletions(-) diff --git a/arm9/asm/scrcmd_asm.s b/arm9/asm/scrcmd_asm.s index a06b9248f..665641757 100644 --- a/arm9/asm/scrcmd_asm.s +++ b/arm9/asm/scrcmd_asm.s @@ -14,19 +14,6 @@ UNK_021C5A0C: ; 0x021C5A0C .text - thumb_func_start ScrCmd_Unk006E -ScrCmd_Unk006E: ; 0x0203B7D8 - push {r3, lr} - add r0, #0x80 - ldr r0, [r0, #0x0] - mov r1, #0x30 - ldr r0, [r0, #0x34] - bl FUN_020580B4 - mov r1, #0xfe - bl FUN_02058EB0 - mov r0, #0x0 - pop {r3, pc} - thumb_func_start ScrCmd_Unk02AB ScrCmd_Unk02AB: ; 0x0203B7F0 push {r3-r5, lr} diff --git a/arm9/asm/unk_02038C78.s b/arm9/asm/unk_02038C78.s index 06f4b1ca0..0da225102 100644 --- a/arm9/asm/unk_02038C78.s +++ b/arm9/asm/unk_02038C78.s @@ -259,7 +259,7 @@ gScriptCmdTable: ; 0x020F355C .word ScrCmd_Unk006B .word ScrCmd_KeepOverworldEvent .word ScrCmd_SetOverworldEventMovement - .word ScrCmd_Unk006E + .word ScrCmd_OverworldEventStopFollowing .word ScrCmd_GiveMoney .word ScrCmd_TakeMoneyImmediate .word ScrCmd_HasEnoughMoneyImmediate diff --git a/arm9/global.inc b/arm9/global.inc index 626ee034f..698b6f736 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -2806,7 +2806,7 @@ .extern ScrCmd_KeepOverworldEvent .extern ScrCmd_SetOverworldEventMovement .extern ScrCmd_GetOverworldEventMovement -.extern ScrCmd_Unk006E +.extern ScrCmd_OverworldEventStopFollowing .extern ScrCmd_Unk02AB .extern ScrCmd_Unk0093 .extern ScrCmd_Unk0094 diff --git a/arm9/src/scrcmd.c b/arm9/src/scrcmd.c index 1e9e8c1d1..6244e13e6 100644 --- a/arm9/src/scrcmd.c +++ b/arm9/src/scrcmd.c @@ -86,6 +86,7 @@ extern void FUN_02058BB4(struct Vecx32 *param0, struct Vecx32 *param1); extern void FUN_02058994(struct Vecx32 *vector, u8 value); extern void FUN_02058E90(struct Vecx32 *vector, u16 movement); extern u16 FUN_02058480(struct Vecx32 *vector); +extern void FUN_02058EB0(struct Vecx32 *vector, u32 param1); extern u8 UNK_021C5A0C[4]; @@ -1758,3 +1759,10 @@ THUMB_FUNC BOOL ScrCmd_GetOverworldEventMovement(struct ScriptContext *ctx) //02 } return FALSE; } + +THUMB_FUNC BOOL ScrCmd_OverworldEventStopFollowing(struct ScriptContext *ctx) //006E +{ + struct Vecx32 *vector = FUN_020580B4(ctx->fieldSystem->unk34, 0x30); + FUN_02058EB0(vector, 0xFE); + return FALSE; +} diff --git a/include/scrcmd.h b/include/scrcmd.h index 443153177..3aafcd303 100644 --- a/include/scrcmd.h +++ b/include/scrcmd.h @@ -133,6 +133,7 @@ BOOL ScrCmd_Unk006B(struct ScriptContext *ctx); BOOL ScrCmd_KeepOverworldEvent(struct ScriptContext *ctx); BOOL ScrCmd_SetOverworldEventMovement(struct ScriptContext *ctx); BOOL ScrCmd_GetOverworldEventMovement(struct ScriptContext *ctx); +BOOL ScrCmd_OverworldEventStopFollowing(struct ScriptContext *ctx); // scrcmd_mart.c BOOL ScrCmd_NormalMart(struct ScriptContext * ctx); From bbd54b4957e5e0d3993f92e594be874ac20b9c39 Mon Sep 17 00:00:00 2001 From: Akashi Akira Date: Tue, 9 May 2023 22:43:55 +0100 Subject: [PATCH 09/11] ScrCmd_Unk02AB --- arm9/asm/scrcmd_asm.s | 21 --------------------- arm9/src/scrcmd.c | 10 ++++++++++ include/scrcmd.h | 1 + 3 files changed, 11 insertions(+), 21 deletions(-) diff --git a/arm9/asm/scrcmd_asm.s b/arm9/asm/scrcmd_asm.s index 665641757..9375d54be 100644 --- a/arm9/asm/scrcmd_asm.s +++ b/arm9/asm/scrcmd_asm.s @@ -14,27 +14,6 @@ UNK_021C5A0C: ; 0x021C5A0C .text - thumb_func_start ScrCmd_Unk02AB -ScrCmd_Unk02AB: ; 0x0203B7F0 - 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 r5, #0x80 - add r4, r0, #0x0 - ldr r0, [r5, #0x0] - ldr r0, [r0, #0xc] - bl Sav2_SealCase_get - bl FUN_02029E0C - strh r0, [r4, #0x0] - mov r0, #0x0 - pop {r3-r5, pc} - .balign 4 - thumb_func_start ScrCmd_Unk0093 ScrCmd_Unk0093: ; 0x0203B81C push {r4-r6, lr} diff --git a/arm9/src/scrcmd.c b/arm9/src/scrcmd.c index 6244e13e6..c4e3b3c73 100644 --- a/arm9/src/scrcmd.c +++ b/arm9/src/scrcmd.c @@ -6,6 +6,7 @@ #include "options.h" #include "player_data.h" #include "render_window.h" +#include "seal.h" #include "task.h" #include "text.h" #include "text_02054590.h" @@ -87,6 +88,7 @@ extern void FUN_02058994(struct Vecx32 *vector, u8 value); extern void FUN_02058E90(struct Vecx32 *vector, u16 movement); extern u16 FUN_02058480(struct Vecx32 *vector); extern void FUN_02058EB0(struct Vecx32 *vector, u32 param1); +extern u16 FUN_02029E0C(struct SealCase *sealCase); extern u8 UNK_021C5A0C[4]; @@ -1766,3 +1768,11 @@ THUMB_FUNC BOOL ScrCmd_OverworldEventStopFollowing(struct ScriptContext *ctx) // FUN_02058EB0(vector, 0xFE); return FALSE; } + +THUMB_FUNC BOOL ScrCmd_Unk02AB(struct ScriptContext *ctx) //02AB +{ + u16 *unk0 = GetVarPointer(ctx->fieldSystem, ScriptReadHalfword(ctx)); + struct SealCase *sealCase = Sav2_SealCase_get(ctx->fieldSystem->saveBlock2); + *unk0 = FUN_02029E0C(sealCase); + return FALSE; +} diff --git a/include/scrcmd.h b/include/scrcmd.h index 3aafcd303..c630e3fdd 100644 --- a/include/scrcmd.h +++ b/include/scrcmd.h @@ -134,6 +134,7 @@ BOOL ScrCmd_KeepOverworldEvent(struct ScriptContext *ctx); BOOL ScrCmd_SetOverworldEventMovement(struct ScriptContext *ctx); BOOL ScrCmd_GetOverworldEventMovement(struct ScriptContext *ctx); BOOL ScrCmd_OverworldEventStopFollowing(struct ScriptContext *ctx); +BOOL ScrCmd_Unk02AB(struct ScriptContext *ctx); // scrcmd_mart.c BOOL ScrCmd_NormalMart(struct ScriptContext * ctx); From 70ac17f19bee2f73bf9eabea0422b1435b44e9d5 Mon Sep 17 00:00:00 2001 From: Akashi Akira Date: Tue, 9 May 2023 23:21:18 +0100 Subject: [PATCH 10/11] ScrCmd_GetSealCountFromId --- arm9/asm/scrcmd_asm.s | 29 ----------------------------- arm9/asm/unk_02038C78.s | 2 +- arm9/global.inc | 2 +- arm9/src/scrcmd.c | 10 ++++++++++ include/scrcmd.h | 1 + 5 files changed, 13 insertions(+), 31 deletions(-) diff --git a/arm9/asm/scrcmd_asm.s b/arm9/asm/scrcmd_asm.s index 9375d54be..7e9810b94 100644 --- a/arm9/asm/scrcmd_asm.s +++ b/arm9/asm/scrcmd_asm.s @@ -14,35 +14,6 @@ UNK_021C5A0C: ; 0x021C5A0C .text - thumb_func_start ScrCmd_Unk0093 -ScrCmd_Unk0093: ; 0x0203B81C - push {r4-r6, lr} - add r5, r0, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r6, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl GetVarPointer - add r5, #0x80 - add r4, r0, #0x0 - ldr r0, [r5, #0x0] - ldr r0, [r0, #0xc] - bl Sav2_SealCase_get - add r1, r6, #0x0 - bl FUN_02029E2C - strh r0, [r4, #0x0] - mov r0, #0x0 - pop {r4-r6, pc} - thumb_func_start ScrCmd_Unk0094 ScrCmd_Unk0094: ; 0x0203B85C push {r4-r6, lr} diff --git a/arm9/asm/unk_02038C78.s b/arm9/asm/unk_02038C78.s index 0da225102..df71bc6aa 100644 --- a/arm9/asm/unk_02038C78.s +++ b/arm9/asm/unk_02038C78.s @@ -296,7 +296,7 @@ gScriptCmdTable: ; 0x020F355C .word ScrCmd_TakeUndergroundSphere .word ScrCmd_HasSpaceForSphere .word ScrCmd_GetSphereCount - .word ScrCmd_Unk0093 + .word ScrCmd_GetSealCountFromId .word ScrCmd_Unk0094 .word ScrCmd_Unk0095 .word ScrCmd_GiveMon diff --git a/arm9/global.inc b/arm9/global.inc index 698b6f736..ff85c4e0d 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -2808,7 +2808,7 @@ .extern ScrCmd_GetOverworldEventMovement .extern ScrCmd_OverworldEventStopFollowing .extern ScrCmd_Unk02AB -.extern ScrCmd_Unk0093 +.extern ScrCmd_GetSealCountFromId .extern ScrCmd_Unk0094 .extern ScrCmd_Unk0095 .extern ScrCmd_Unk0191 diff --git a/arm9/src/scrcmd.c b/arm9/src/scrcmd.c index c4e3b3c73..7b81bb36e 100644 --- a/arm9/src/scrcmd.c +++ b/arm9/src/scrcmd.c @@ -89,6 +89,7 @@ extern void FUN_02058E90(struct Vecx32 *vector, u16 movement); extern u16 FUN_02058480(struct Vecx32 *vector); extern void FUN_02058EB0(struct Vecx32 *vector, u32 param1); extern u16 FUN_02029E0C(struct SealCase *sealCase); +extern u16 FUN_02029E2C(struct SealCase *sealCase, u16 sealId); extern u8 UNK_021C5A0C[4]; @@ -1776,3 +1777,12 @@ THUMB_FUNC BOOL ScrCmd_Unk02AB(struct ScriptContext *ctx) //02AB *unk0 = FUN_02029E0C(sealCase); return FALSE; } + +THUMB_FUNC BOOL ScrCmd_GetSealCountFromId(struct ScriptContext *ctx) //0093 +{ + u16 sealId = VarGet(ctx->fieldSystem, ScriptReadHalfword(ctx)); + u16 *variable = GetVarPointer(ctx->fieldSystem, ScriptReadHalfword(ctx)); + struct SealCase *sealCase = Sav2_SealCase_get(ctx->fieldSystem->saveBlock2); + *variable = FUN_02029E2C(sealCase, sealId); + return FALSE; +} diff --git a/include/scrcmd.h b/include/scrcmd.h index c630e3fdd..3295f86ca 100644 --- a/include/scrcmd.h +++ b/include/scrcmd.h @@ -135,6 +135,7 @@ BOOL ScrCmd_SetOverworldEventMovement(struct ScriptContext *ctx); BOOL ScrCmd_GetOverworldEventMovement(struct ScriptContext *ctx); BOOL ScrCmd_OverworldEventStopFollowing(struct ScriptContext *ctx); BOOL ScrCmd_Unk02AB(struct ScriptContext *ctx); +BOOL ScrCmd_GetSealCountFromId(struct ScriptContext *ctx); // scrcmd_mart.c BOOL ScrCmd_NormalMart(struct ScriptContext * ctx); From d73071d36f4a7b9128281cf805c248620b112f28 Mon Sep 17 00:00:00 2001 From: Akashi Akira Date: Wed, 10 May 2023 02:29:41 +0100 Subject: [PATCH 11/11] ScrCmd_GiveSeals --- arm9/asm/scrcmd_asm.s | 31 ------------------------------- arm9/asm/unk_02038C78.s | 2 +- arm9/global.inc | 2 +- arm9/src/scrcmd.c | 11 +++++++++++ include/scrcmd.h | 1 + 5 files changed, 14 insertions(+), 33 deletions(-) diff --git a/arm9/asm/scrcmd_asm.s b/arm9/asm/scrcmd_asm.s index 7e9810b94..e8bae1f52 100644 --- a/arm9/asm/scrcmd_asm.s +++ b/arm9/asm/scrcmd_asm.s @@ -14,37 +14,6 @@ UNK_021C5A0C: ; 0x021C5A0C .text - thumb_func_start ScrCmd_Unk0094 -ScrCmd_Unk0094: ; 0x0203B85C - push {r4-r6, lr} - add r5, r0, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r6, r0, #0x0 - add r0, r5, #0x0 - bl ScriptReadHalfword - add r1, r0, #0x0 - add r0, r5, #0x0 - add r0, #0x80 - ldr r0, [r0, #0x0] - bl VarGet - add r5, #0x80 - add r4, r0, #0x0 - ldr r0, [r5, #0x0] - ldr r0, [r0, #0xc] - bl Sav2_SealCase_get - lsl r2, r4, #0x10 - add r1, r6, #0x0 - asr r2, r2, #0x10 - bl FUN_02029D44 - mov r0, #0x0 - pop {r4-r6, pc} - .balign 4 - thumb_func_start ScrCmd_Unk0095 ScrCmd_Unk0095: ; 0x0203B8A0 push {r4-r6, lr} diff --git a/arm9/asm/unk_02038C78.s b/arm9/asm/unk_02038C78.s index df71bc6aa..cbb7bc3bd 100644 --- a/arm9/asm/unk_02038C78.s +++ b/arm9/asm/unk_02038C78.s @@ -297,7 +297,7 @@ gScriptCmdTable: ; 0x020F355C .word ScrCmd_HasSpaceForSphere .word ScrCmd_GetSphereCount .word ScrCmd_GetSealCountFromId - .word ScrCmd_Unk0094 + .word ScrCmd_GiveSeals .word ScrCmd_Unk0095 .word ScrCmd_GiveMon .word ScrCmd_GiveEgg diff --git a/arm9/global.inc b/arm9/global.inc index ff85c4e0d..b2b091c3a 100644 --- a/arm9/global.inc +++ b/arm9/global.inc @@ -2809,7 +2809,7 @@ .extern ScrCmd_OverworldEventStopFollowing .extern ScrCmd_Unk02AB .extern ScrCmd_GetSealCountFromId -.extern ScrCmd_Unk0094 +.extern ScrCmd_GiveSeals .extern ScrCmd_Unk0095 .extern ScrCmd_Unk0191 .extern ScrCmd_Unk02A5 diff --git a/arm9/src/scrcmd.c b/arm9/src/scrcmd.c index 7b81bb36e..5a454c138 100644 --- a/arm9/src/scrcmd.c +++ b/arm9/src/scrcmd.c @@ -90,6 +90,7 @@ extern u16 FUN_02058480(struct Vecx32 *vector); extern void FUN_02058EB0(struct Vecx32 *vector, u32 param1); extern u16 FUN_02029E0C(struct SealCase *sealCase); extern u16 FUN_02029E2C(struct SealCase *sealCase, u16 sealId); +extern void FUN_02029D44(struct SealCase *sealCase, u16 sealId, s16 amount); extern u8 UNK_021C5A0C[4]; @@ -1786,3 +1787,13 @@ THUMB_FUNC BOOL ScrCmd_GetSealCountFromId(struct ScriptContext *ctx) //0093 *variable = FUN_02029E2C(sealCase, sealId); return FALSE; } + +THUMB_FUNC BOOL ScrCmd_GiveSeals(struct ScriptContext *ctx) //0094 +{ + u16 sealId = VarGet(ctx->fieldSystem, ScriptReadHalfword(ctx)); + u32 amount = VarGet(ctx->fieldSystem, ScriptReadHalfword(ctx)); + + struct SealCase *sealCase = Sav2_SealCase_get(ctx->fieldSystem->saveBlock2); + FUN_02029D44(sealCase, sealId, (s16)amount); + return FALSE; +} diff --git a/include/scrcmd.h b/include/scrcmd.h index 3295f86ca..dbe8b5173 100644 --- a/include/scrcmd.h +++ b/include/scrcmd.h @@ -136,6 +136,7 @@ BOOL ScrCmd_GetOverworldEventMovement(struct ScriptContext *ctx); BOOL ScrCmd_OverworldEventStopFollowing(struct ScriptContext *ctx); BOOL ScrCmd_Unk02AB(struct ScriptContext *ctx); BOOL ScrCmd_GetSealCountFromId(struct ScriptContext *ctx); +BOOL ScrCmd_GiveSeals(struct ScriptContext *ctx); // scrcmd_mart.c BOOL ScrCmd_NormalMart(struct ScriptContext * ctx);