Decomp LoadScriptVariableValueSum and LoadScriptVariableValueBytes

This commit is contained in:
slaw-22
2025-10-28 15:50:08 +00:00
parent 8b5b6f84c8
commit d9b62fde05
5 changed files with 36 additions and 62 deletions

View File

@@ -7,6 +7,7 @@
.public LoadScriptVariableRaw
.public LoadScriptVariableValue
.public LoadScriptVariableValueAtIndex
.public LoadScriptVariableValueBytes
.public MemcpySimple
.public RandInt
.public SCRIPT_VARS_VALUES

View File

@@ -1,64 +1,8 @@
.include "asm/macros.inc"
.include "main_0204BB00.inc"
.include "main_0204BBB0.inc"
.text
arm_func_start LoadScriptVariableValueSum
LoadScriptVariableValueSum: ; 0x0204BB00
stmdb sp!, {r3, r4, r5, r6, r7, lr}
sub sp, sp, #8
mov r6, r1
mov r4, #0
mov r7, r0
add r0, sp, #0
mov r1, r4
mov r2, r6
bl LoadScriptVariableRaw
mov r5, r4
b _0204BB48
_0204BB2C:
mov r2, r5, lsl #0x10
mov r0, r7
mov r1, r6
mov r2, r2, lsr #0x10
bl LoadScriptVariableValueAtIndex
add r4, r4, r0
add r5, r5, #1
_0204BB48:
ldr r0, [sp]
ldrsh r0, [r0, #8]
cmp r5, r0
blt _0204BB2C
mov r0, r4
add sp, sp, #8
ldmia sp!, {r3, r4, r5, r6, r7, pc}
arm_func_end LoadScriptVariableValueSum
arm_func_start LoadScriptVariableValueBytes
LoadScriptVariableValueBytes: ; 0x0204BB64
stmdb sp!, {r3, r4, r5, lr}
sub sp, sp, #8
mov r3, r0
mov r5, r1
mov r4, r2
add r0, sp, #0
mov r2, r3
mov r1, #0
bl LoadScriptVariableRaw
ldr r2, [sp, #4]
mov r1, #0
b _0204BBA0
_0204BB94:
ldrb r0, [r2], #1
add r1, r1, #1
strb r0, [r5], #1
_0204BBA0:
cmp r1, r4
blt _0204BB94
add sp, sp, #8
ldmia sp!, {r3, r4, r5, pc}
arm_func_end LoadScriptVariableValueBytes
arm_func_start sub_0204BBB0
sub_0204BBB0: ; 0x0204BBB0
stmdb sp!, {r3, r4, r5, lr}

View File

@@ -31,13 +31,12 @@ struct script_var_raw {
extern const short LOCAL_SCRIPT_VAR_OFFSET;
void LoadScriptVariableRaw(struct script_var_raw* sv_raw,
union script_var_value sv_val_local[],
const enum script_var_id sv_id);
void LoadScriptVariableRaw(struct script_var_raw* sv_raw, union script_var_value sv_val_local[], const enum script_var_id sv_id);
s32 LoadScriptVariableValue(union script_var_value sv_local[], enum script_var_id sv_id);
s32 LoadScriptVariableValueAtIndex(union script_var_value sv_local[], enum script_var_id id, int idx);
void SaveScriptVariableValue(union script_var_value sv_locals[], const enum script_var_id script_var_id, u32 new_val);
void SaveScriptVariableValueAtIndex(union script_var_value sv_locals[], const enum script_var_id script_var_id, int idx, s32 new_val);
s32 LoadScriptVariableValueSum(union script_var_value sv_local[], const enum script_var_id sv_id);
void LoadScriptVariableValueBytes(const enum script_var_id sv_id, u8* result, s32 num_bytes);
#endif //PMDSKY_SCRIPTING_H

View File

@@ -81,7 +81,7 @@ Static main
Object src/main_0204AFF8.o
Object asm/main_0204B018.o
Object src/scripting.o
Object asm/main_0204BB00.o
Object asm/main_0204BBB0.o
Object src/main_0204C938.o
Object asm/main_0204C94C.o
Object src/dungeon_recruitment_3.o

View File

@@ -287,3 +287,33 @@ void SaveScriptVariableValueAtIndex(union script_var_value sv_locals[], const en
return;
}
s32 LoadScriptVariableValueSum(union script_var_value sv_local[], const enum script_var_id sv_id)
{
struct script_var_raw script_var_raw;
s32 total = 0;
LoadScriptVariableRaw(&script_var_raw, 0, sv_id);
for(s32 idx = 0; idx < (s16) script_var_raw.def->n_values; idx++) {
total += LoadScriptVariableValueAtIndex(sv_local, sv_id, (u16) idx);
}
return total;
}
void LoadScriptVariableValueBytes(const enum script_var_id sv_id, u8* result, s32 num_bytes)
{
struct script_var_raw sv_raw;
LoadScriptVariableRaw(&sv_raw, 0, sv_id);
s32 i = 0;
u8* val_ptr = (u8*) sv_raw.value;
for(i = 0; i < num_bytes; i++) {
u8 val = *val_ptr;
*result = val;
val_ptr += 1;
result += 1;
}
}