Decompile scrcmd_8

This commit is contained in:
tgsm 2021-05-07 13:32:25 -04:00
parent 244d7c0ef3
commit 5cdb95f4e0
7 changed files with 98 additions and 243 deletions

View File

@ -1,234 +0,0 @@
.include "asm/macros.inc"
.include "global.inc"
.text
thumb_func_start FUN_02041C38
FUN_02041C38: ; 0x02041C38
push {r4-r7, lr}
sub sp, #0xc
add r4, r0, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
mov r1, #0xf
bl FUN_02039438
add r6, r0, #0x0
add r0, r4, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
ldr r0, [r0, #0xc]
bl FUN_0202881C
add r5, r0, #0x0
add r0, r4, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
ldr r7, [r0, #0xc]
add r0, r4, #0x0
bl ScriptReadHalfword
cmp r0, #0x6
bls _02041C6C
b _02041E38
_02041C6C:
add r0, r0, r0
add r0, pc
ldrh r0, [r0, #0x6]
lsl r0, r0, #0x10
asr r0, r0, #0x10
add pc, r0
_02041C78: ; jump table (using 16-bit offset)
.short _02041C86 - _02041C78 - 2; case 0
.short _02041CBC - _02041C78 - 2; case 1
.short _02041CF2 - _02041C78 - 2; case 2
.short _02041D28 - _02041C78 - 2; case 3
.short _02041D5E - _02041C78 - 2; case 4
.short _02041D94 - _02041C78 - 2; case 5
.short _02041DCE - _02041C78 - 2; case 6
_02041C86:
add r0, r4, #0x0
bl ScriptReadHalfword
add r1, r0, #0x0
add r0, r4, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
bl VarGet
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
add r1, r6, #0x0
bl FUN_02028828
strh r0, [r4, #0x0]
add sp, #0xc
mov r0, #0x0
pop {r4-r7, pc}
_02041CBC:
add r0, r4, #0x0
bl ScriptReadHalfword
add r1, r0, #0x0
add r0, r4, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
bl VarGet
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
add r1, r6, #0x0
bl FUN_02028840
strh r0, [r4, #0x0]
add sp, #0xc
mov r0, #0x0
pop {r4-r7, pc}
_02041CF2:
add r0, r4, #0x0
bl ScriptReadHalfword
add r1, r0, #0x0
add r0, r4, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
bl VarGet
add r5, r0, #0x0
add r0, r4, #0x0
bl ScriptReadHalfword
add r4, #0x80
add r1, r0, #0x0
ldr r0, [r4, #0x0]
bl VarGet
add r3, r0, #0x0
mov r0, #0x0
str r0, [sp, #0x0]
ldr r0, [r6, #0x0]
add r1, r7, #0x0
add r2, r5, #0x0
bl BufferEasyChatWord
b _02041E38
_02041D28:
add r0, r4, #0x0
bl ScriptReadHalfword
add r1, r0, #0x0
add r0, r4, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
bl VarGet
add r5, r0, #0x0
add r0, r4, #0x0
bl ScriptReadHalfword
add r4, #0x80
add r1, r0, #0x0
ldr r0, [r4, #0x0]
bl VarGet
add r3, r0, #0x0
mov r0, #0x1
str r0, [sp, #0x0]
ldr r0, [r6, #0x0]
add r1, r7, #0x0
add r2, r5, #0x0
bl BufferEasyChatWord
b _02041E38
_02041D5E:
mov r1, #0x0
add r0, r5, #0x0
add r2, r1, #0x0
bl FUN_020287A8
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
mov r2, #0x0
str r2, [sp, #0x0]
str r5, [sp, #0x4]
str r0, [sp, #0x8]
ldr r0, [r4, #0x74]
mov r1, #0x5
mov r3, #0x7
bl FUN_020385CC
add sp, #0xc
mov r0, #0x1
pop {r4-r7, pc}
_02041D94:
add r0, r4, #0x0
bl ScriptReadHalfword
add r1, r0, #0x0
add r0, r4, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
bl VarGet
add r7, r0, #0x0
add r0, r5, #0x0
mov r1, #0x1
bl FUN_02028828
add r6, r0, #0x0
add r0, r5, #0x0
add r1, r7, #0x0
mov r2, #0x1
bl FUN_02028700
cmp r6, #0x0
beq _02041DC8
add r4, #0x80
ldr r0, [r4, #0x0]
bl FUN_020612F8
_02041DC8:
add sp, #0xc
mov r0, #0x0
pop {r4-r7, pc}
_02041DCE:
mov r0, #0x40
mov r1, #0x20
bl String_ctor
add r6, r0, #0x0
add r0, r4, #0x0
add r0, #0x80
ldr r0, [r0, #0x0]
ldr r0, [r0, #0xc]
bl Sav2_PlayerData_GetProfileAddr
add r1, r6, #0x0
add r7, r0, #0x0
bl PlayerName_FlatToString
add r0, r5, #0x0
mov r1, #0x0
mov r2, #0x1
add r3, r6, #0x0
bl FUN_020287C0
add r0, r7, #0x0
bl PlayerProfile_GetTrainerGender
add r2, r0, #0x0
add r0, r5, #0x0
mov r1, #0x0
bl FUN_020287EC
add r0, r5, #0x0
mov r1, #0x0
mov r2, #0x2
bl FUN_02028810
bl MTRandom
add r2, r0, #0x0
add r0, r5, #0x0
mov r1, #0x0
bl FUN_02028788
add r0, r6, #0x0
bl String_dtor
add r0, r5, #0x0
mov r1, #0x0
mov r2, #0x1
bl FUN_02028700
add r4, #0x80
ldr r0, [r4, #0x0]
bl FUN_020612EC
_02041E38:
mov r0, #0x0
add sp, #0xc
pop {r4-r7, pc}
.balign 4

View File

@ -690,7 +690,7 @@ gScriptCmdTable: ; 0x020F355C
.word FUN_0203E81C
.word FUN_0203E848
.word FUN_0203E858
.word FUN_02041C38
.word ScrCmd_Unk021D
.word FUN_02045E1C
.word FUN_02045E20
.word FUN_02045EE0

View File

@ -3238,7 +3238,7 @@
.extern FUN_02041B9C
.extern FUN_02041BC4
.extern FUN_02041BF0
.extern FUN_02041C38
.extern ScrCmd_Unk021D
.extern FUN_02041E40
.extern FUN_02041FDC
.extern FUN_02042000

87
arm9/src/scrcmd_8.c Normal file
View File

@ -0,0 +1,87 @@
#include "scrcmd.h"
#include "math_util.h"
#include "unk_020286F8.h"
extern void* FUN_02039438(struct UnkSavStruct80*, u8 idx);
extern void FUN_020385CC(struct UnkStruct_0204639C*, u32, u32, u32, u32, u16*, u16* ret_ptr);
extern BOOL FUN_020612EC(struct UnkSavStruct80*);
extern BOOL FUN_020612F8(struct UnkSavStruct80*);
THUMB_FUNC BOOL ScrCmd_Unk021D(struct ScriptContext* ctx)
{
struct ScrStrBufs** mgr = FUN_02039438(ctx->unk80, 15);
struct UnkSaveStruct_020286F8* unk_sav_ptr = FUN_0202881C(ctx->unk80->saveBlock2);
struct SaveBlock2* sav2 = ctx->unk80->saveBlock2;
u16 unk = ScriptReadHalfword(ctx);
switch (unk)
{
case 0: {
u16 unk_var = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
*ret_ptr = (u16)FUN_02028828(unk_sav_ptr, unk_var);
return FALSE;
}
case 1: {
u16 unk_var = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
*ret_ptr = (u16)FUN_02028840(unk_sav_ptr, unk_var);
return FALSE;
}
case 2: {
u16 unk_var = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
u16 idx = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
BufferEasyChatWord(*mgr, sav2, unk_var, idx, 0);
break;
}
case 3: {
u16 unk_var = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
u16 idx = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
BufferEasyChatWord(*mgr, sav2, unk_var, idx, 1);
break;
}
case 4: {
u16* unk_str_ptr = FUN_020287A8(unk_sav_ptr, 0, 0);
u16* ret_ptr = GetVarPointer(ctx->unk80, ScriptReadHalfword(ctx));
FUN_020385CC(ctx->unk74, 5, 0, 7, 0, unk_str_ptr, ret_ptr);
return TRUE;
}
case 5: {
u16 src_idx = VarGet(ctx->unk80, ScriptReadHalfword(ctx));
BOOL unk_bool = FUN_02028828(unk_sav_ptr, 1);
FUN_02028700(unk_sav_ptr, src_idx, 1);
if (unk_bool != FALSE)
{
FUN_020612F8(ctx->unk80);
}
return FALSE;
}
case 6: {
struct String* player_name = String_ctor(64, 32);
struct PlayerData* player = Sav2_PlayerData_GetProfileAddr(ctx->unk80->saveBlock2);
PlayerName_FlatToString(player, player_name);
FUN_020287C0(unk_sav_ptr, 0, 1, player_name);
FUN_020287EC(unk_sav_ptr, 0, PlayerProfile_GetTrainerGender(player));
FUN_02028810(unk_sav_ptr, 0, 2);
FUN_02028788(unk_sav_ptr, 0, MTRandom());
String_dtor(player_name);
FUN_02028700(unk_sav_ptr, 0, 1);
FUN_020612EC(ctx->unk80);
break;
}
}
return FALSE;
}

View File

@ -75,9 +75,9 @@ void FUN_020287C0(struct UnkSaveStruct_020286F8 * ptr, u32 i, u32 j, struct Stri
CopyStringToU16Array(k, ptr[i].unk_10, 8);
}
void FUN_020287EC(struct UnkSaveStruct_020286F8 * ptr, u32 i, u8 j)
void FUN_020287EC(struct UnkSaveStruct_020286F8 * ptr, u32 i, u32 j)
{
ptr[i].unk_20 = j;
ptr[i].unk_20 = (u8)j;
}
u8 FUN_020287F8(struct UnkSaveStruct_020286F8 * ptr, u32 i)
@ -90,10 +90,9 @@ u8 FUN_02028804(struct UnkSaveStruct_020286F8 * ptr, u32 i)
return ptr[i].unk_21;
}
void FUN_02028810(struct UnkSaveStruct_020286F8 * ptr, u32 i, u8 j)
void FUN_02028810(struct UnkSaveStruct_020286F8 * ptr, u32 i, u32 j)
{
ptr[i].unk_21 = j;
ptr[i].unk_21 = (u8)j;
}
struct UnkSaveStruct_020286F8 * FUN_0202881C(struct SaveBlock2 * sav2)

View File

@ -150,6 +150,9 @@ BOOL ScrCmd_Unk02CC(struct ScriptContext* ctx);
BOOL ScrCmd_GetSealNamePlural(struct ScriptContext* ctx);
BOOL ScrCmd_CapitalizeFirstChar(struct ScriptContext* ctx);
//scrcmd_8.c
BOOL ScrCmd_Unk021D(struct ScriptContext* ctx);
//scrcmd_11.c
BOOL ScrCmd_Unk017D(struct ScriptContext* ctx);
BOOL ScrCmd_Unk017E(struct ScriptContext* ctx);

View File

@ -21,10 +21,10 @@ void FUN_02028788(struct UnkSaveStruct_020286F8 * ptr, u32 i, u32 j);
u32 FUN_020287A4(struct UnkSaveStruct_020286F8 * ptr);
u16 * FUN_020287A8(struct UnkSaveStruct_020286F8 * ptr, u32 i, u32 j);
void FUN_020287C0(struct UnkSaveStruct_020286F8 * ptr, u32 i, u32 j, struct String * k);
void FUN_020287EC(struct UnkSaveStruct_020286F8 * ptr, u32 i, u8 j);
void FUN_020287EC(struct UnkSaveStruct_020286F8 * ptr, u32 i, u32 j);
u8 FUN_020287F8(struct UnkSaveStruct_020286F8 * ptr, u32 i);
u8 FUN_02028804(struct UnkSaveStruct_020286F8 * ptr, u32 i);
void FUN_02028810(struct UnkSaveStruct_020286F8 * ptr, u32 i, u8 j);
void FUN_02028810(struct UnkSaveStruct_020286F8 * ptr, u32 i, u32 j);
struct UnkSaveStruct_020286F8 * FUN_0202881C(struct SaveBlock2 * sav2);
BOOL FUN_02028828(struct UnkSaveStruct_020286F8 * ptr, u32 i);
BOOL FUN_02028840(struct UnkSaveStruct_020286F8 * ptr, int i);