mirror of
https://github.com/pret/pmd-sky.git
synced 2026-04-26 08:35:04 -05:00
Decomp CompareScriptVariables and make CalcScriptVariables consistent
This commit is contained in:
parent
152f7a3473
commit
4f59b29d2a
|
|
@ -1,22 +1,20 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
.public _0209CF48
|
.public CalcScriptVariables
|
||||||
.public _0209CF64
|
.public DEBUG_SPECIAL_EPISODE_NUMBER
|
||||||
.public _0209CF84
|
|
||||||
.public _0209DFA0
|
|
||||||
.public Debug_FatalError
|
|
||||||
.public Debug_Print
|
.public Debug_Print
|
||||||
.public Debug_Print0
|
.public Debug_Print0
|
||||||
.public DEBUG_SPECIAL_EPISODE_NUMBER
|
|
||||||
.public EVENT_FLAG_PROG_POS_INFO
|
|
||||||
.public CalcScriptVariables
|
|
||||||
.public GetGameMode
|
.public GetGameMode
|
||||||
.public LoadScriptVariableRaw
|
.public LoadScriptVariableRaw
|
||||||
.public LoadScriptVariableValue
|
.public LoadScriptVariableValue
|
||||||
.public LoadScriptVariableValueAtIndex
|
.public LoadScriptVariableValueAtIndex
|
||||||
.public MemcpySimple
|
.public MemcpySimple
|
||||||
|
.public SCRIPT_VARS_VALUES
|
||||||
.public SaveScriptVariableValue
|
.public SaveScriptVariableValue
|
||||||
.public SaveScriptVariableValueAtIndex
|
.public SaveScriptVariableValueAtIndex
|
||||||
.public ScenarioFlagBackup
|
.public ScenarioFlagBackup
|
||||||
.public SCRIPT_VARS_VALUES
|
|
||||||
.public sub_0204CBE8
|
|
||||||
.public ZinitScriptVariable
|
.public ZinitScriptVariable
|
||||||
|
.public _0209CF64
|
||||||
|
.public _0209CF84
|
||||||
|
.public _0209DFA0
|
||||||
|
.public CompareScriptVariables
|
||||||
|
.public sub_0204CBE8
|
||||||
|
|
@ -1,104 +1,8 @@
|
||||||
.include "asm/macros.inc"
|
.include "asm/macros.inc"
|
||||||
.include "main_0204BD98.inc"
|
.include "main_0204BECC.inc"
|
||||||
|
|
||||||
.text
|
.text
|
||||||
|
|
||||||
arm_func_start sub_0204BD98
|
|
||||||
sub_0204BD98: ; 0x0204BD98
|
|
||||||
stmdb sp!, {r3, lr}
|
|
||||||
sub sp, sp, #8
|
|
||||||
cmp r2, #0xa
|
|
||||||
addls pc, pc, r2, lsl #2
|
|
||||||
b _0204BE9C
|
|
||||||
_0204BDAC: ; jump table
|
|
||||||
b _0204BDD8 ; case 0
|
|
||||||
b _0204BDE0 ; case 1
|
|
||||||
b _0204BDE8 ; case 2
|
|
||||||
b _0204BE10 ; case 3
|
|
||||||
b _0204BE38 ; case 4
|
|
||||||
b _0204BE24 ; case 5
|
|
||||||
b _0204BE4C ; case 6
|
|
||||||
b _0204BDFC ; case 7
|
|
||||||
b _0204BE60 ; case 8
|
|
||||||
b _0204BE74 ; case 9
|
|
||||||
b _0204BE88 ; case 10
|
|
||||||
_0204BDD8:
|
|
||||||
mov r0, #1
|
|
||||||
b _0204BEBC
|
|
||||||
_0204BDE0:
|
|
||||||
mov r0, #0
|
|
||||||
b _0204BEBC
|
|
||||||
_0204BDE8:
|
|
||||||
cmp r0, r1
|
|
||||||
moveq r0, #1
|
|
||||||
movne r0, #0
|
|
||||||
and r0, r0, #0xff
|
|
||||||
b _0204BEBC
|
|
||||||
_0204BDFC:
|
|
||||||
cmp r0, r1
|
|
||||||
movne r0, #1
|
|
||||||
moveq r0, #0
|
|
||||||
and r0, r0, #0xff
|
|
||||||
b _0204BEBC
|
|
||||||
_0204BE10:
|
|
||||||
cmp r0, r1
|
|
||||||
movgt r0, #1
|
|
||||||
movle r0, #0
|
|
||||||
and r0, r0, #0xff
|
|
||||||
b _0204BEBC
|
|
||||||
_0204BE24:
|
|
||||||
cmp r0, r1
|
|
||||||
movge r0, #1
|
|
||||||
movlt r0, #0
|
|
||||||
and r0, r0, #0xff
|
|
||||||
b _0204BEBC
|
|
||||||
_0204BE38:
|
|
||||||
cmp r0, r1
|
|
||||||
movlt r0, #1
|
|
||||||
movge r0, #0
|
|
||||||
and r0, r0, #0xff
|
|
||||||
b _0204BEBC
|
|
||||||
_0204BE4C:
|
|
||||||
cmp r0, r1
|
|
||||||
movle r0, #1
|
|
||||||
movgt r0, #0
|
|
||||||
and r0, r0, #0xff
|
|
||||||
b _0204BEBC
|
|
||||||
_0204BE60:
|
|
||||||
tst r0, r1
|
|
||||||
movne r0, #1
|
|
||||||
moveq r0, #0
|
|
||||||
and r0, r0, #0xff
|
|
||||||
b _0204BEBC
|
|
||||||
_0204BE74:
|
|
||||||
teq r0, r1
|
|
||||||
movne r0, #1
|
|
||||||
moveq r0, #0
|
|
||||||
and r0, r0, #0xff
|
|
||||||
b _0204BEBC
|
|
||||||
_0204BE88:
|
|
||||||
mov r2, #1
|
|
||||||
tst r0, r2, lsl r1
|
|
||||||
moveq r2, #0
|
|
||||||
and r0, r2, #0xff
|
|
||||||
b _0204BEBC
|
|
||||||
_0204BE9C:
|
|
||||||
ldr r1, _0204BEC4 ; =EVENT_FLAG_PROG_POS_INFO
|
|
||||||
add r0, sp, #0
|
|
||||||
ldr r3, [r1, #0xc]
|
|
||||||
ldr ip, [r1, #8]
|
|
||||||
ldr r1, _0204BEC8 ; =_0209CF48
|
|
||||||
str ip, [sp]
|
|
||||||
str r3, [sp, #4]
|
|
||||||
bl Debug_FatalError
|
|
||||||
_0204BEBC:
|
|
||||||
add sp, sp, #8
|
|
||||||
ldmia sp!, {r3, pc}
|
|
||||||
.align 2, 0
|
|
||||||
_0204BEC4: .word EVENT_FLAG_PROG_POS_INFO
|
|
||||||
_0204BEC8: .word _0209CF48
|
|
||||||
arm_func_end sub_0204BD98
|
|
||||||
|
|
||||||
arm_func_start sub_0204BECC
|
arm_func_start sub_0204BECC
|
||||||
sub_0204BECC: ; 0x0204BECC
|
sub_0204BECC: ; 0x0204BECC
|
||||||
ldr ip, _0204BED4 ; =CalcScriptVariables
|
ldr ip, _0204BED4 ; =CalcScriptVariables
|
||||||
|
|
@ -150,10 +54,10 @@ sub_0204BF10: ; 0x0204BF10
|
||||||
|
|
||||||
arm_func_start sub_0204BF5C
|
arm_func_start sub_0204BF5C
|
||||||
sub_0204BF5C: ; 0x0204BF5C
|
sub_0204BF5C: ; 0x0204BF5C
|
||||||
ldr ip, _0204BF64 ; =sub_0204BD98
|
ldr ip, _0204BF64 ; =CompareScriptVariables
|
||||||
bx ip
|
bx ip
|
||||||
.align 2, 0
|
.align 2, 0
|
||||||
_0204BF64: .word sub_0204BD98
|
_0204BF64: .word CompareScriptVariables
|
||||||
arm_func_end sub_0204BF5C
|
arm_func_end sub_0204BF5C
|
||||||
|
|
||||||
arm_func_start sub_0204BF68
|
arm_func_start sub_0204BF68
|
||||||
|
|
@ -164,7 +68,7 @@ sub_0204BF68: ; 0x0204BF68
|
||||||
bl LoadScriptVariableValue
|
bl LoadScriptVariableValue
|
||||||
mov r1, r5
|
mov r1, r5
|
||||||
mov r2, r4
|
mov r2, r4
|
||||||
bl sub_0204BD98
|
bl CompareScriptVariables
|
||||||
ldmia sp!, {r3, r4, r5, pc}
|
ldmia sp!, {r3, r4, r5, pc}
|
||||||
arm_func_end sub_0204BF68
|
arm_func_end sub_0204BF68
|
||||||
|
|
||||||
|
|
@ -182,7 +86,7 @@ sub_0204BF88: ; 0x0204BF88
|
||||||
mov r1, r0
|
mov r1, r0
|
||||||
mov r0, r4
|
mov r0, r4
|
||||||
mov r2, r5
|
mov r2, r5
|
||||||
bl sub_0204BD98
|
bl CompareScriptVariables
|
||||||
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
ldmia sp!, {r3, r4, r5, r6, r7, pc}
|
||||||
arm_func_end sub_0204BF88
|
arm_func_end sub_0204BF88
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
2533
asm/main_rodata_0209CECC.s
Normal file
2533
asm/main_rodata_0209CECC.s
Normal file
File diff suppressed because it is too large
Load Diff
|
|
@ -3464,4 +3464,18 @@ enum performance_progress_flag
|
||||||
PERFORMANCE_PROGRESS_FLAG_RANDOM_MISSION = 3
|
PERFORMANCE_PROGRESS_FLAG_RANDOM_MISSION = 3
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum compare_operation { // Taken from pmd-red's FlagJudgeOperation
|
||||||
|
CMP_TRUE,
|
||||||
|
CMP_FALSE,
|
||||||
|
CMP_EQ,
|
||||||
|
CMP_GT,
|
||||||
|
CMP_LT,
|
||||||
|
CMP_GE,
|
||||||
|
CMP_LE,
|
||||||
|
CMP_NE,
|
||||||
|
CMP_AND_NONZERO,
|
||||||
|
CMP_XOR_NONZERO, // logically identical to CMP_NE
|
||||||
|
CMP_BIT_SET,
|
||||||
|
};
|
||||||
|
|
||||||
#endif //PMDSKY_ENUMS_H
|
#endif //PMDSKY_ENUMS_H
|
||||||
|
|
|
||||||
|
|
@ -42,5 +42,6 @@ void LoadScriptVariableValueString(const enum script_var_id sv_id, u8* result, u
|
||||||
void SaveScriptVariableValueBytes(const enum script_var_id sv_id, u8* result, s32 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);
|
s32 ScriptVariablesEqual(union script_var_value sv_val_ptr_local[], enum script_var_id sv_id_1, enum script_var_id sv_id_2);
|
||||||
s32 CalcScriptVariables(s32 param_1, s32 param_2, enum script_calc_operation operation);
|
s32 CalcScriptVariables(s32 param_1, s32 param_2, enum script_calc_operation operation);
|
||||||
|
bool8 CompareScriptVariables(s32 param_1, s32 param_2, enum compare_operation operation);
|
||||||
|
|
||||||
#endif //PMDSKY_SCRIPTING_H
|
#endif //PMDSKY_SCRIPTING_H
|
||||||
|
|
|
||||||
3
main.lsf
3
main.lsf
|
|
@ -81,7 +81,8 @@ Static main
|
||||||
Object src/main_0204AFF8.o
|
Object src/main_0204AFF8.o
|
||||||
Object asm/main_0204B018.o
|
Object asm/main_0204B018.o
|
||||||
Object src/scripting.o
|
Object src/scripting.o
|
||||||
Object asm/main_0204BD98.o
|
Object asm/main_rodata_0209CECC.o
|
||||||
|
Object asm/main_0204BECC.o
|
||||||
Object src/main_0204C938.o
|
Object src/main_0204C938.o
|
||||||
Object asm/main_0204C94C.o
|
Object asm/main_0204C94C.o
|
||||||
Object src/dungeon_recruitment_3.o
|
Object src/dungeon_recruitment_3.o
|
||||||
|
|
|
||||||
|
|
@ -24,15 +24,25 @@ extern s32 SetMoneyStored(s32 arg0);
|
||||||
extern s32 SetNotifyNote(s32 arg0);
|
extern s32 SetNotifyNote(s32 arg0);
|
||||||
extern s32 sub_0204C928(s32 arg0);
|
extern s32 sub_0204C928(s32 arg0);
|
||||||
|
|
||||||
const short LOCAL_SCRIPT_VAR_OFFSET = 0x400;
|
|
||||||
|
|
||||||
extern struct prog_pos_info EVENT_FLAG_PROG_POS_INFO;
|
|
||||||
extern u8 EVENT_FLAG_EXPANSION_ERROR;
|
extern u8 EVENT_FLAG_EXPANSION_ERROR;
|
||||||
|
extern u8 EVENT_FLAG_RULE_ERROR;
|
||||||
|
|
||||||
|
const u8 EVENT_FLAG_FILE_NAME[] = "event_flag.c";
|
||||||
|
const struct prog_pos_info ppi_line_1011 = {
|
||||||
|
(u8*) EVENT_FLAG_FILE_NAME,
|
||||||
|
1001
|
||||||
|
};
|
||||||
|
const struct prog_pos_info ppi_line_1044 = {
|
||||||
|
(u8*) EVENT_FLAG_FILE_NAME,
|
||||||
|
1044
|
||||||
|
};
|
||||||
|
|
||||||
void LoadScriptVariableRaw(struct script_var_raw* sv_raw,
|
void LoadScriptVariableRaw(struct script_var_raw* sv_raw,
|
||||||
union script_var_value sv_val_local[],
|
union script_var_value sv_val_local[],
|
||||||
const enum script_var_id sv_id) {
|
const enum script_var_id sv_id) {
|
||||||
|
|
||||||
|
short LOCAL_SCRIPT_VAR_OFFSET = 0x400;
|
||||||
|
|
||||||
if (sv_id < LOCAL_SCRIPT_VAR_OFFSET) {
|
if (sv_id < LOCAL_SCRIPT_VAR_OFFSET) {
|
||||||
// global script var
|
// global script var
|
||||||
sv_raw->def = &SCRIPT_VARS[sv_id];
|
sv_raw->def = &SCRIPT_VARS[sv_id];
|
||||||
|
|
@ -392,10 +402,42 @@ s32 CalcScriptVariables(s32 param_1, s32 param_2, enum script_calc_operation ope
|
||||||
case CALC_RANDOM:
|
case CALC_RANDOM:
|
||||||
return RandInt(param_2);
|
return RandInt(param_2);
|
||||||
default:
|
default:
|
||||||
// EVENT_FLAG_PROG_POS_INFO contains a pointer to the filename event_flag.c
|
struct prog_pos_info ppi = ppi_line_1011;
|
||||||
// and a line number of 1001
|
Debug_FatalError(&ppi, &EVENT_FLAG_EXPANSION_ERROR, operation);
|
||||||
struct prog_pos_info prog_pos_info = EVENT_FLAG_PROG_POS_INFO;
|
|
||||||
// EVENT_FLAG_EXPANSION_ERROR contains the string "event flag expansion error %d"
|
|
||||||
Debug_FatalError(&prog_pos_info, &EVENT_FLAG_EXPANSION_ERROR, operation);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool8 CompareScriptVariables(s32 param_1, s32 param_2, enum compare_operation operation)
|
||||||
|
{
|
||||||
|
switch (operation) {
|
||||||
|
case CMP_TRUE:
|
||||||
|
return TRUE;
|
||||||
|
case CMP_FALSE:
|
||||||
|
return FALSE;
|
||||||
|
case CMP_EQ:
|
||||||
|
return param_1 == param_2;
|
||||||
|
case CMP_NE:
|
||||||
|
return param_1 != param_2;
|
||||||
|
case CMP_GT:
|
||||||
|
return param_1 > param_2;
|
||||||
|
case CMP_GE:
|
||||||
|
return param_1 >= param_2;
|
||||||
|
case CMP_LT:
|
||||||
|
return param_1 < param_2;
|
||||||
|
case CMP_LE:
|
||||||
|
return param_1 <= param_2;
|
||||||
|
case CMP_AND_NONZERO:
|
||||||
|
return (param_1 & param_2) != 0;
|
||||||
|
case CMP_XOR_NONZERO:
|
||||||
|
return (param_1 ^ param_2) != 0;
|
||||||
|
case CMP_BIT_SET:
|
||||||
|
if(param_1 & (1 << param_2)) {
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
struct prog_pos_info ppi = ppi_line_1044;
|
||||||
|
Debug_FatalError(&ppi, &EVENT_FLAG_RULE_ERROR, operation);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user