Decomp LoadAndCompareScriptVars

This commit is contained in:
slaw-22 2025-11-22 08:16:41 +00:00
parent 23e20d9c8b
commit 77c3c59567
8 changed files with 706 additions and 7 deletions

View File

@ -1,5 +1,4 @@
#pragma once
.public CompareScriptVariables
.public DEBUG_SPECIAL_EPISODE_NUMBER
.public Debug_Print
.public Debug_Print0

View File

@ -631,7 +631,7 @@
.public UpdateScriptVarWithVar
.public CompareScriptVariablesVeneer
.public CompareScriptVarWithParam
.public sub_0204BF88
.public LoadAndCompareScriptVars
.public sub_0204C5DC
.public sub_0204C6C8
.public sub_0204C734

View File

@ -3,8 +3,8 @@
.text
arm_func_start sub_0204BF88
sub_0204BF88: ; 0x0204BF88
arm_func_start LoadAndCompareScriptVars
LoadAndCompareScriptVars: ; 0x0204BF88
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r7, r0
mov r6, r2
@ -19,7 +19,7 @@ sub_0204BF88: ; 0x0204BF88
mov r2, r5
bl CompareScriptVariables
ldmia sp!, {r3, r4, r5, r6, r7, pc}
arm_func_end sub_0204BF88
arm_func_end LoadAndCompareScriptVars
arm_func_start EventFlagResume
EventFlagResume: ; 0x0204BFC0

692
asm/main_0204BFC0.s Normal file
View File

@ -0,0 +1,692 @@
.include "asm/macros.inc"
.include "main_0204BFC0.inc"
.text
arm_func_start EventFlagResume
EventFlagResume: ; 0x0204BFC0
stmdb sp!, {r4, lr}
bl GetGameMode
cmp r0, #1
ldmlsia sp!, {r4, pc}
sub r4, r0, #2
ldr r0, _0204C1E0 ; =_0209CF64
mov r1, r4
bl Debug_Print0
mov r0, r4, lsl #0x10
mov r2, r0, lsr #0x10
mov r0, #0
mov r1, #0x21
bl LoadScriptVariableValueAtIndex
mov r2, r0
mov r0, #0
mov r1, #0x1c
bl SaveScriptVariableValue
mov r0, r4, lsl #0x10
mov r2, r0, lsr #0x10
mov r0, #0
mov r1, #0x22
bl LoadScriptVariableValueAtIndex
mov r2, r0
mov r0, #0
mov r1, #0x1d
bl SaveScriptVariableValue
mov r0, #0
mov r1, #0x23
mov r2, r4, lsl #0x10
mov r2, r2, lsr #0x10
bl LoadScriptVariableValueAtIndex
mov r2, r0
mov r0, #0
mov r1, #0x1e
bl SaveScriptVariableValue
mov r0, #0
mov r1, #0x24
mov r2, r4, lsl #0x10
mov r2, r2, lsr #0x10
bl LoadScriptVariableValueAtIndex
mov r2, r0
mov r0, #0
mov r1, #0x1f
bl SaveScriptVariableValue
mov r0, #0
mov r1, #0x25
mov r2, r4, lsl #0x10
mov r2, r2, lsr #0x10
bl LoadScriptVariableValueAtIndex
mov r2, r0
mov r0, #0
mov r1, #0x20
bl SaveScriptVariableValue
mov r0, #0
mov r1, #0x2d
mov r2, r4, lsl #0x10
mov r2, r2, lsr #0x10
bl LoadScriptVariableValueAtIndex
mov r2, r0
mov r0, #0
mov r1, #0x27
bl SaveScriptVariableValue
mov r0, r4, lsl #0x10
mov r2, r0, lsr #0x10
mov r0, #0
mov r1, #0x2e
bl LoadScriptVariableValueAtIndex
mov r2, r0
mov r0, #0
mov r1, #0x28
bl SaveScriptVariableValue
mov r0, r4, lsl #0x10
mov r2, r0, lsr #0x10
mov r0, #0
mov r1, #0x2f
bl LoadScriptVariableValueAtIndex
mov r2, r0
mov r0, #0
mov r1, #0x29
bl SaveScriptVariableValue
mov r0, r4, lsl #0x10
mov r2, r0, lsr #0x10
mov r0, #0
mov r1, #0x30
bl LoadScriptVariableValueAtIndex
mov r2, r0
mov r0, #0
mov r1, #0x2a
bl SaveScriptVariableValue
mov r0, #0
mov r1, #0x31
mov r2, r4, lsl #0x10
mov r2, r2, lsr #0x10
bl LoadScriptVariableValueAtIndex
mov r2, r0
mov r0, #0
mov r1, #0x2b
bl SaveScriptVariableValue
mov r0, #0
mov r1, #0x32
mov r2, r4, lsl #0x10
mov r2, r2, lsr #0x10
bl LoadScriptVariableValueAtIndex
mov r2, r0
mov r0, #0
mov r1, #0x2c
bl SaveScriptVariableValue
mov r0, #0
mov r1, #0x37
mov r2, r4, lsl #0x10
mov r2, r2, lsr #0x10
bl LoadScriptVariableValueAtIndex
mov r2, r0
mov r0, #0
mov r1, #0x34
bl SaveScriptVariableValue
mov r0, #0
mov r1, #0x38
mov r2, r4, lsl #0x10
mov r2, r2, lsr #0x10
bl LoadScriptVariableValueAtIndex
mov r2, r0
mov r0, #0
mov r1, #0x35
bl SaveScriptVariableValue
mov r0, r4, lsl #0x10
mov r2, r0, lsr #0x10
mov r0, #0
mov r1, #0x39
bl LoadScriptVariableValueAtIndex
mov r2, r0
mov r0, #0
mov r1, #0x36
bl SaveScriptVariableValue
bl sub_0204CBE8
ldmia sp!, {r4, pc}
.align 2, 0
_0204C1E0: .word _0209CF64
arm_func_end EventFlagResume
arm_func_start EventFlagBackup
EventFlagBackup: ; 0x0204C1E4
stmdb sp!, {r4, lr}
bl GetGameMode
cmp r0, #1
ldmlsia sp!, {r4, pc}
sub r4, r0, #2
ldr r0, _0204C404 ; =_0209CF84
mov r1, r4
bl Debug_Print0
mov r0, #0
mov r1, #0x1c
bl LoadScriptVariableValue
mov r1, r4, lsl #0x10
mov r3, r0
mov r2, r1, lsr #0x10
mov r0, #0
mov r1, #0x21
bl SaveScriptVariableValueAtIndex
mov r0, #0
mov r1, #0x1d
bl LoadScriptVariableValue
mov r3, r0
mov r0, #0
mov r1, #0x22
mov r2, r4, lsl #0x10
mov r2, r2, lsr #0x10
bl SaveScriptVariableValueAtIndex
mov r0, #0
mov r1, #0x1e
bl LoadScriptVariableValue
mov r3, r0
mov r0, #0
mov r1, #0x23
mov r2, r4, lsl #0x10
mov r2, r2, lsr #0x10
bl SaveScriptVariableValueAtIndex
mov r0, #0
mov r1, #0x1f
bl LoadScriptVariableValue
mov r3, r0
mov r0, #0
mov r1, #0x24
mov r2, r4, lsl #0x10
mov r2, r2, lsr #0x10
bl SaveScriptVariableValueAtIndex
mov r0, #0
mov r1, #0x20
bl LoadScriptVariableValue
mov r3, r0
mov r0, #0
mov r1, #0x25
mov r2, r4, lsl #0x10
mov r2, r2, lsr #0x10
bl SaveScriptVariableValueAtIndex
mov r0, #0
mov r1, #0x27
bl LoadScriptVariableValue
mov r3, r0
mov r0, #0
mov r1, #0x2d
mov r2, r4, lsl #0x10
mov r2, r2, lsr #0x10
bl SaveScriptVariableValueAtIndex
mov r0, #0
mov r1, #0x28
bl LoadScriptVariableValue
mov r1, r4, lsl #0x10
mov r3, r0
mov r2, r1, lsr #0x10
mov r0, #0
mov r1, #0x2e
bl SaveScriptVariableValueAtIndex
mov r0, #0
mov r1, #0x29
bl LoadScriptVariableValue
mov r1, r4, lsl #0x10
mov r2, r1, lsr #0x10
mov r3, r0
mov r0, #0
mov r1, #0x2f
bl SaveScriptVariableValueAtIndex
mov r0, #0
mov r1, #0x2a
bl LoadScriptVariableValue
mov r3, r0
mov r0, #0
mov r1, #0x30
mov r2, r4, lsl #0x10
mov r2, r2, lsr #0x10
bl SaveScriptVariableValueAtIndex
mov r0, #0
mov r1, #0x2b
bl LoadScriptVariableValue
mov r3, r0
mov r0, #0
mov r1, #0x31
mov r2, r4, lsl #0x10
mov r2, r2, lsr #0x10
bl SaveScriptVariableValueAtIndex
mov r0, #0
mov r1, #0x2c
bl LoadScriptVariableValue
mov r3, r0
mov r0, #0
mov r1, #0x32
mov r2, r4, lsl #0x10
mov r2, r2, lsr #0x10
bl SaveScriptVariableValueAtIndex
mov r0, #0
mov r1, #0x34
bl LoadScriptVariableValue
mov r3, r0
mov r0, #0
mov r1, #0x37
mov r2, r4, lsl #0x10
mov r2, r2, lsr #0x10
bl SaveScriptVariableValueAtIndex
mov r0, #0
mov r1, #0x35
bl LoadScriptVariableValue
mov r3, r0
mov r0, r4, lsl #0x10
mov r2, r0, lsr #0x10
mov r0, #0
mov r1, #0x38
bl SaveScriptVariableValueAtIndex
mov r0, #0
mov r1, #0x36
bl LoadScriptVariableValue
mov r1, r4, lsl #0x10
mov r3, r0
mov r2, r1, lsr #0x10
mov r0, #0
mov r1, #0x39
bl SaveScriptVariableValueAtIndex
bl ScenarioFlagBackup
ldmia sp!, {r4, pc}
.align 2, 0
_0204C404: .word _0209CF84
arm_func_end EventFlagBackup
arm_func_start DumpScriptVariableValues
DumpScriptVariableValues: ; 0x0204C408
stmdb sp!, {r4, lr}
mov r4, r0
bl EventFlagBackup
ldr r1, _0204C42C ; =SCRIPT_VARS_VALUES
mov r0, r4
mov r2, #0x400
bl MemcpySimple
mov r0, #1
ldmia sp!, {r4, pc}
.align 2, 0
_0204C42C: .word SCRIPT_VARS_VALUES
arm_func_end DumpScriptVariableValues
arm_func_start RestoreScriptVariableValues
RestoreScriptVariableValues: ; 0x0204C430
stmdb sp!, {r4, lr}
sub sp, sp, #8
mov r1, #0
mov r4, r0
add r0, sp, #0
mov r2, r1
bl LoadScriptVariableRaw
ldr r0, _0204C484 ; =SCRIPT_VARS_VALUES
mov r1, r4
mov r2, #0x400
bl MemcpySimple
ldr r1, [sp]
ldr r0, [sp, #4]
ldrsh r1, [r1, #0xa]
ldr r0, [r0]
cmp r1, r0
moveq r0, #1
movne r0, #0
and r0, r0, #0xff
add sp, sp, #8
ldmia sp!, {r4, pc}
.align 2, 0
_0204C484: .word SCRIPT_VARS_VALUES
arm_func_end RestoreScriptVariableValues
arm_func_start InitScenarioScriptVars
InitScenarioScriptVars: ; 0x0204C488
stmdb sp!, {r4, r5, r6, r7, r8, lr}
mov r1, #0
mov r2, r1
mov r0, #2
bl SetScenarioScriptVar
mov r1, #0
mov r2, r1
mov r0, #3
bl SetScenarioScriptVar
mov r1, #0
mov r2, r1
mov r0, #4
bl SetScenarioScriptVar
mov r1, #0
mov r2, r1
mov r0, #5
bl SetScenarioScriptVar
mov r1, #0
mov r2, r1
mov r0, #6
bl SetScenarioScriptVar
mov r1, #0
mov r0, #7
mov r2, r1
bl SetScenarioScriptVar
mov r1, #0
mov r0, #8
mov r2, r1
bl SetScenarioScriptVar
mov r1, #0
mov r0, #9
mov r2, r1
bl SetScenarioScriptVar
mov r1, #0
mov r0, #0xa
mov r2, r1
bl SetScenarioScriptVar
mov r1, #0
mov r0, #0xb
mov r2, r1
bl SetScenarioScriptVar
mov r1, #0
mov r0, #0xc
mov r2, r1
bl SetScenarioScriptVar
mov r0, #0
mov r1, #0x11
bl ZinitScriptVariable
mov r0, #0
mov r1, #0x1b
bl ZinitScriptVariable
mov r8, #0
mov r6, #0x1a
mov r7, r8
mov r5, r8
mov r4, r6
_0204C568:
mov r2, r8, lsl #0x10
mov r0, r7
mov r1, r6
mov r3, r7
mov r2, r2, lsr #0x10
bl SaveScriptVariableValueAtIndex
add r0, r8, #4
mov r2, r0, lsl #0x10
mov r0, r5
mov r1, r4
mov r3, r5
mov r2, r2, lsr #0x10
bl SaveScriptVariableValueAtIndex
add r8, r8, #1
cmp r8, #4
blt _0204C568
mov r0, #0
mov r2, r0
mov r1, #0x13
bl SaveScriptVariableValue
mov r1, #0x14
sub r2, r1, #0x15
mov r0, #0
bl SaveScriptVariableValue
mov r0, #0
mov r2, r0
mov r1, #0x6f
bl SaveScriptVariableValue
ldmia sp!, {r4, r5, r6, r7, r8, pc}
arm_func_end InitScenarioScriptVars
arm_func_start sub_0204C5DC
sub_0204C5DC: ; 0x0204C5DC
stmdb sp!, {r4, r5, r6, lr}
mov r6, r0
mov r5, r1
mov r0, #0
mov r4, r2
mov r1, r6
mov r2, r0
bl LoadScriptVariableValueAtIndex
str r0, [r5]
mov r1, r6
mov r0, #0
mov r2, #1
bl LoadScriptVariableValueAtIndex
str r0, [r4]
ldmia sp!, {r4, r5, r6, pc}
arm_func_end sub_0204C5DC
arm_func_start SetScenarioScriptVar
SetScenarioScriptVar: ; 0x0204C618
stmdb sp!, {r3, r4, r5, r6, r7, r8, lr}
sub sp, sp, #0xc
mov r8, r0
mov r7, r1
mov r0, #0
mov r6, r2
mov r1, r8
mov r2, r0
bl LoadScriptVariableValueAtIndex
mov r5, r0
mov r1, r8
mov r0, #0
mov r2, #1
bl LoadScriptVariableValueAtIndex
mov r4, r0
stmia sp, {r4, r7}
ldr r1, _0204C6C4 ; =_0209DFA0
mov r0, #9
mov r2, r8
mov r3, r5
str r6, [sp, #8]
bl Debug_Print
cmp r8, #3
bne _0204C694
cmp r7, r5
cmpeq r6, r4
beq _0204C694
mov r0, #0
mov r2, r0
mov r1, #0x33
bl SaveScriptVariableValue
_0204C694:
mov r0, #0
mov r1, r8
mov r2, r0
mov r3, r7
bl SaveScriptVariableValueAtIndex
mov r1, r8
mov r3, r6
mov r0, #0
mov r2, #1
bl SaveScriptVariableValueAtIndex
add sp, sp, #0xc
ldmia sp!, {r3, r4, r5, r6, r7, r8, pc}
.align 2, 0
_0204C6C4: .word _0209DFA0
arm_func_end SetScenarioScriptVar
arm_func_start sub_0204C6C8
sub_0204C6C8: ; 0x0204C6C8
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r7, r0
mov r6, r1
mov r0, #0
mov r5, r2
mov r1, r7
mov r2, r0
bl LoadScriptVariableValueAtIndex
mov r4, r0
mov r1, r7
mov r0, #0
mov r2, #1
bl LoadScriptVariableValueAtIndex
cmp r4, #0x35
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
cmp r4, r6
movlt r0, #1
ldmltia sp!, {r3, r4, r5, r6, r7, pc}
bne _0204C72C
cmp r5, #0
blt _0204C72C
cmp r0, r5
movlt r0, #1
ldmltia sp!, {r3, r4, r5, r6, r7, pc}
_0204C72C:
mov r0, #0
ldmia sp!, {r3, r4, r5, r6, r7, pc}
arm_func_end sub_0204C6C8
arm_func_start sub_0204C734
sub_0204C734: ; 0x0204C734
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r7, r0
mov r6, r1
mov r0, #0
mov r5, r2
mov r1, r7
mov r2, r0
bl LoadScriptVariableValueAtIndex
mov r4, r0
mov r1, r7
mov r0, #0
mov r2, #1
bl LoadScriptVariableValueAtIndex
cmp r4, #0x35
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
cmp r4, r6
movlt r0, #1
ldmltia sp!, {r3, r4, r5, r6, r7, pc}
bne _0204C7A4
cmp r5, #0
blt _0204C79C
cmp r0, r5
bgt _0204C7A4
mov r0, #1
ldmia sp!, {r3, r4, r5, r6, r7, pc}
_0204C79C:
mov r0, #1
ldmia sp!, {r3, r4, r5, r6, r7, pc}
_0204C7A4:
mov r0, #0
ldmia sp!, {r3, r4, r5, r6, r7, pc}
arm_func_end sub_0204C734
arm_func_start sub_0204C7AC
sub_0204C7AC: ; 0x0204C7AC
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r7, r0
mov r6, r1
mov r0, #0
mov r5, r2
mov r1, r7
mov r2, r0
bl LoadScriptVariableValueAtIndex
mov r4, r0
mov r1, r7
mov r0, #0
mov r2, #1
bl LoadScriptVariableValueAtIndex
cmp r4, r6
bne _0204C800
cmp r5, #0
movlt r0, #1
ldmltia sp!, {r3, r4, r5, r6, r7, pc}
cmp r0, r5
moveq r0, #1
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
_0204C800:
mov r0, #0
ldmia sp!, {r3, r4, r5, r6, r7, pc}
arm_func_end sub_0204C7AC
arm_func_start sub_0204C808
sub_0204C808: ; 0x0204C808
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r7, r0
mov r6, r1
mov r0, #0
mov r5, r2
mov r1, r7
mov r2, r0
bl LoadScriptVariableValueAtIndex
mov r4, r0
mov r1, r7
mov r0, #0
mov r2, #1
bl LoadScriptVariableValueAtIndex
cmp r4, #0x35
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
cmp r4, r6
movgt r0, #1
ldmgtia sp!, {r3, r4, r5, r6, r7, pc}
bne _0204C878
cmp r5, #0
blt _0204C870
cmp r0, r5
blt _0204C878
mov r0, #1
ldmia sp!, {r3, r4, r5, r6, r7, pc}
_0204C870:
mov r0, #1
ldmia sp!, {r3, r4, r5, r6, r7, pc}
_0204C878:
mov r0, #0
ldmia sp!, {r3, r4, r5, r6, r7, pc}
arm_func_end sub_0204C808
arm_func_start sub_0204C880
sub_0204C880: ; 0x0204C880
stmdb sp!, {r3, r4, r5, r6, r7, lr}
mov r7, r0
mov r6, r1
mov r0, #0
mov r5, r2
mov r1, r7
mov r2, r0
bl LoadScriptVariableValueAtIndex
mov r4, r0
mov r1, r7
mov r0, #0
mov r2, #1
bl LoadScriptVariableValueAtIndex
cmp r4, #0x35
moveq r0, #0
ldmeqia sp!, {r3, r4, r5, r6, r7, pc}
cmp r4, r6
movgt r0, #1
ldmgtia sp!, {r3, r4, r5, r6, r7, pc}
bne _0204C8E4
cmp r5, #0
blt _0204C8E4
cmp r0, r5
movgt r0, #1
ldmgtia sp!, {r3, r4, r5, r6, r7, pc}
_0204C8E4:
mov r0, #0
ldmia sp!, {r3, r4, r5, r6, r7, pc}
arm_func_end sub_0204C880
arm_func_start GetSpecialEpisodeType
GetSpecialEpisodeType: ; 0x0204C8EC
ldr ip, _0204C8FC ; =LoadScriptVariableValue
mov r0, #0
mov r1, #0x4a
bx ip
.align 2, 0
_0204C8FC: .word LoadScriptVariableValue
arm_func_end GetSpecialEpisodeType
arm_func_start SetSpecialEpisodeType
SetSpecialEpisodeType: ; 0x0204C900
ldr ip, _0204C914 ; =SaveScriptVariableValue
mov r2, r0
mov r0, #0
mov r1, #0x4a
bx ip
.align 2, 0
_0204C914: .word SaveScriptVariableValue
arm_func_end SetSpecialEpisodeType
arm_func_start sub_0204C918
sub_0204C918: ; 0x0204C918
ldr r0, _0204C924 ; =DEBUG_SPECIAL_EPISODE_NUMBER
ldr r0, [r0]
bx lr
.align 2, 0
_0204C924: .word DEBUG_SPECIAL_EPISODE_NUMBER
arm_func_end sub_0204C918
arm_func_start sub_0204C928
sub_0204C928: ; 0x0204C928
ldr r1, _0204C934 ; =DEBUG_SPECIAL_EPISODE_NUMBER
str r0, [r1]
bx lr
.align 2, 0
_0204C934: .word DEBUG_SPECIAL_EPISODE_NUMBER
arm_func_end sub_0204C928

View File

@ -3378,7 +3378,7 @@ _022DF064:
mov r1, r1, asr #0x10
mov r3, r5
add r0, r4, #0x6c
bl sub_0204BF88
bl LoadAndCompareScriptVars
cmp r0, #0
ldrneh r0, [r6, #6]
ldrne r1, [r4, #0x14]

View File

@ -48,5 +48,6 @@ void UpdateScriptVarWithParam(union script_var_value sv_local[], const enum scri
void UpdateScriptVarWithVar(union script_var_value sv_local[], enum script_var_id sv_id_1, enum script_var_id sv_id_2, enum script_calc_operation operation);
bool8 CompareScriptVariablesVeneer(s32 param_1, s32 param_2, enum compare_operation operation);
s32 CompareScriptVarWithParam(union script_var_value sv_local[], enum script_var_id sv_id, s32 param, enum compare_operation op);
s32 LoadAndCompareScriptVars(union script_var_value sv_local[], enum script_var_id sv_id_1, enum script_var_id sv_id_2, enum compare_operation op);
#endif //PMDSKY_SCRIPTING_H

View File

@ -82,7 +82,7 @@ Static main
Object asm/main_0204B018.o
Object src/scripting.o
Object asm/main_rodata_0209CECC.o
Object asm/main_0204BF88.o
Object asm/main_0204BFC0.o
Object src/main_0204C938.o
Object asm/main_0204C94C.o
Object src/dungeon_recruitment_3.o

View File

@ -471,4 +471,11 @@ s32 CompareScriptVarWithParam(union script_var_value sv_local[], enum script_var
{
s32 value = LoadScriptVariableValue(sv_local, sv_id);
return CompareScriptVariables(value, param, op);
}
s32 sub_0204BF88(union script_var_value sv_local[], enum script_var_id sv_id_1, enum script_var_id sv_id_2, enum compare_operation op)
{
s32 value_1 = LoadScriptVariableValue(sv_local, sv_id_1);
s32 value_2 = LoadScriptVariableValue(sv_local, sv_id_2);
return CompareScriptVariables(value_1, value_2, op);
}