mirror of
https://github.com/pret/pmd-sky.git
synced 2026-03-21 17:25:15 -05:00
Merge branch 'main' into main
This commit is contained in:
commit
83703ff6c1
|
|
@ -439,7 +439,7 @@
|
|||
.public sub_0200D310
|
||||
.public sub_02025480
|
||||
.public sub_020257FC
|
||||
.public sub_0204BBB0
|
||||
.public LoadScriptVariableValueString
|
||||
.public sub_0204E530
|
||||
.public sub_0204F6F8
|
||||
.public sub_0204F77C
|
||||
|
|
|
|||
|
|
@ -19157,7 +19157,7 @@ _02023E18:
|
|||
add r1, sp, #2
|
||||
mov r0, #0x3f
|
||||
mov r2, #0xa
|
||||
bl sub_0204BBB0
|
||||
bl LoadScriptVariableValueString
|
||||
add r0, sp, #0x42
|
||||
add r1, sp, #2
|
||||
mov r2, #0xa
|
||||
|
|
@ -19169,7 +19169,7 @@ _02023E44:
|
|||
add r1, sp, #2
|
||||
mov r0, #0x41
|
||||
mov r2, #0xa
|
||||
bl sub_0204BBB0
|
||||
bl LoadScriptVariableValueString
|
||||
add r0, sp, #0x42
|
||||
add r1, sp, #2
|
||||
mov r2, #0xa
|
||||
|
|
|
|||
|
|
@ -1,144 +1,8 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "main_0204BB00.inc"
|
||||
.include "main_0204BCAC.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}
|
||||
mov r5, r1
|
||||
mov r4, r2
|
||||
bl LoadScriptVariableValueBytes
|
||||
mov r0, #0
|
||||
strb r0, [r5, r4]
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
arm_func_end sub_0204BBB0
|
||||
|
||||
arm_func_start SaveScriptVariableValueBytes
|
||||
SaveScriptVariableValueBytes: ; 0x0204BBCC
|
||||
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 _0204BC08
|
||||
_0204BBFC:
|
||||
ldrb r0, [r5], #1
|
||||
add r1, r1, #1
|
||||
strb r0, [r2], #1
|
||||
_0204BC08:
|
||||
cmp r1, r4
|
||||
blt _0204BBFC
|
||||
add sp, sp, #8
|
||||
ldmia sp!, {r3, r4, r5, pc}
|
||||
arm_func_end SaveScriptVariableValueBytes
|
||||
|
||||
arm_func_start ScriptVariablesEqual
|
||||
ScriptVariablesEqual: ; 0x0204BC18
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
||||
sub sp, sp, #0x10
|
||||
mov r8, r0
|
||||
mov r7, r1
|
||||
mov r6, r2
|
||||
add r0, sp, #8
|
||||
mov r1, r8
|
||||
mov r2, r7
|
||||
bl LoadScriptVariableRaw
|
||||
add r0, sp, #0
|
||||
mov r1, r8
|
||||
mov r2, r6
|
||||
bl LoadScriptVariableRaw
|
||||
ldr r0, [sp, #8]
|
||||
mov r5, #0
|
||||
ldrsh r4, [r0, #8]
|
||||
b _0204BC98
|
||||
_0204BC5C:
|
||||
mov r2, r5, lsl #0x10
|
||||
mov r0, r8
|
||||
mov r1, r7
|
||||
mov r2, r2, lsr #0x10
|
||||
bl LoadScriptVariableValueAtIndex
|
||||
mov r2, r5, lsl #0x10
|
||||
mov sb, r0
|
||||
mov r0, r8
|
||||
mov r1, r6
|
||||
mov r2, r2, lsr #0x10
|
||||
bl LoadScriptVariableValueAtIndex
|
||||
cmp sb, r0
|
||||
movne r0, #0
|
||||
bne _0204BCA4
|
||||
add r5, r5, #1
|
||||
_0204BC98:
|
||||
cmp r5, r4
|
||||
blt _0204BC5C
|
||||
mov r0, #1
|
||||
_0204BCA4:
|
||||
add sp, sp, #0x10
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
||||
arm_func_end ScriptVariablesEqual
|
||||
|
||||
arm_func_start sub_0204BCAC
|
||||
sub_0204BCAC: ; 0x0204BCAC
|
||||
stmdb sp!, {r3, lr}
|
||||
|
|
@ -10,7 +10,7 @@ struct script_var_def {
|
|||
// 0x4: value's offset into struct script_var_value_table, if type != VARTYPE_SPECIAL
|
||||
s16 mem_offset;
|
||||
s16 bitshift; // 0x6: bit position if type == VARTYPE_BIT
|
||||
u16 n_values; // 0x8: number of values (>1 means this variable is an array)
|
||||
s16 n_values; // 0x8: number of values (>1 means this variable is an array)
|
||||
// 0xA: 0 for every variable except VAR_VERSION, which has a default value of 1.
|
||||
s16 default_val;
|
||||
char* name; // 0xC: variable name
|
||||
|
|
@ -31,13 +31,15 @@ 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);
|
||||
s32 LoadScriptVariableValueAtIndex(union script_var_value sv_local[], enum script_var_id id, u16 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);
|
||||
void LoadScriptVariableValueString(const enum script_var_id sv_id, u8* result, u8 num_bytes);
|
||||
void SaveScriptVariableValueBytes(const enum script_var_id sv_id, u8* result, s32 num_bytes);
|
||||
s32 ScriptVariablesEqual(union script_var_value sv_val_ptr_local[], enum script_var_id sv_id_1, enum script_var_id sv_id_2);
|
||||
|
||||
#endif //PMDSKY_SCRIPTING_H
|
||||
|
|
|
|||
2
main.lsf
2
main.lsf
|
|
@ -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_0204BCAC.o
|
||||
Object src/main_0204C938.o
|
||||
Object asm/main_0204C94C.o
|
||||
Object src/dungeon_recruitment_3.o
|
||||
|
|
|
|||
|
|
@ -97,7 +97,7 @@ s32 LoadScriptVariableValue(union script_var_value sv_local[], enum script_var_i
|
|||
return 0;
|
||||
}
|
||||
|
||||
s32 LoadScriptVariableValueAtIndex(union script_var_value sv_local[], enum script_var_id id, int idx)
|
||||
s32 LoadScriptVariableValueAtIndex(union script_var_value sv_local[], enum script_var_id id, u16 idx)
|
||||
{
|
||||
struct script_var_raw result;
|
||||
LoadScriptVariableRaw(&result, sv_local, id);
|
||||
|
|
@ -287,3 +287,74 @@ 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;
|
||||
}
|
||||
}
|
||||
|
||||
void LoadScriptVariableValueString(const enum script_var_id sv_id, u8* result, u8 num_bytes)
|
||||
{
|
||||
LoadScriptVariableValueBytes(sv_id, result, num_bytes);
|
||||
result[num_bytes] = 0;
|
||||
}
|
||||
|
||||
void SaveScriptVariableValueBytes(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 = *result;
|
||||
*val_ptr = val;
|
||||
val_ptr += 1;
|
||||
result += 1;
|
||||
}
|
||||
}
|
||||
|
||||
s32 ScriptVariablesEqual(union script_var_value sv_val_ptr_local[], enum script_var_id sv_id_1, enum script_var_id sv_id_2)
|
||||
{
|
||||
struct script_var_raw script_var_raw_1, script_var_raw_2;
|
||||
|
||||
LoadScriptVariableRaw(&script_var_raw_1, sv_val_ptr_local, sv_id_1);
|
||||
LoadScriptVariableRaw(&script_var_raw_2, sv_val_ptr_local, sv_id_2);
|
||||
|
||||
s32 n_values = script_var_raw_1.def->n_values;
|
||||
|
||||
for(int idx = 0; idx < n_values; idx++) {
|
||||
if (LoadScriptVariableValueAtIndex(sv_val_ptr_local, sv_id_1, idx) !=
|
||||
LoadScriptVariableValueAtIndex(sv_val_ptr_local, sv_id_2, idx)) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user