Merge pull request #215 from slaw-22/Scripting6
Some checks are pending
build / build (push) Waiting to run

Decomp more script variable functions
This commit is contained in:
AnonymousRandomPerson 2025-11-29 12:26:31 -06:00 committed by GitHub
commit 69ea6f2808
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
15 changed files with 205 additions and 270 deletions

View File

@ -1,13 +0,0 @@
#pragma once
.public DEBUG_SPECIAL_EPISODE_NUMBER
.public Debug_Print
.public EventFlagBackup
.public LoadScriptVariableRaw
.public LoadScriptVariableValue
.public LoadScriptVariableValueAtIndex
.public MemcpySimple
.public SCRIPT_VARS_VALUES
.public SaveScriptVariableValue
.public SaveScriptVariableValueAtIndex
.public ZinitScriptVariable
.public SCENARIO_CALC_DEBUG_MSG

View File

@ -479,8 +479,8 @@
.public sub_0204AB18
.public sub_0204AF98
.public sub_0204B018
.public sub_0204C6C8
.public sub_0204C918
.public IsStoryBeforePoint
.public GetDebugSpecialEpisodeNumber
.public sub_0204C978
.public sub_0204CA1C
.public sub_0204D018

View File

@ -332,8 +332,8 @@
.public sub_0204a1cc
.public sub_0204A1CC
.public sub_0204AE60
.public sub_0204C918
.public sub_0204C928
.public GetDebugSpecialEpisodeNumber
.public SetDebugSpecialEpisodeNumber
.public sub_0204C9A0
.public sub_0204C9C8
.public sub_0204CA1C

View File

@ -633,11 +633,11 @@
.public CompareScriptVarWithParam
.public LoadAndCompareScriptVars
.public LoadScriptVarValuePair
.public sub_0204C6C8
.public sub_0204C734
.public sub_0204C7AC
.public sub_0204C808
.public sub_0204C880
.public IsStoryBeforePoint
.public IsStoryBeforeOrAtPoint
.public IsStoryAtPoint
.public IsStoryAtOrAfterPoint
.public IsStoryAtOrAfterPointStrict
.public sub_0204CA48
.public sub_0204CB2C
.public sub_0204CDE8

View File

@ -1,207 +0,0 @@
.include "asm/macros.inc"
.include "main_0204C408.inc"
.text
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

@ -12403,21 +12403,21 @@ sub_02063240: ; 0x02063240
mov r0, #3
mov r1, #0xc
mov r2, #0
bl sub_0204C6C8
bl IsStoryBeforePoint
cmp r0, #0
movne r0, #0
strneh r0, [r6, #0xa]
mov r0, #3
mov r1, #6
mov r2, #0
bl sub_0204C6C8
bl IsStoryBeforePoint
cmp r0, #0
movne r0, #0
strneh r0, [r6, #0xc]
mov r0, #3
mov r1, #8
mov r2, #0
bl sub_0204C6C8
bl IsStoryBeforePoint
cmp r0, #0
bne _020632B8
ldrb r1, [r4, #1]
@ -16146,7 +16146,7 @@ _0206617C:
bl sub_0204872C
b _02065F20
_020661B0:
bl sub_0204C918
bl GetDebugSpecialEpisodeNumber
bl SetSpecialEpisodeType
mov r0, #3
bl sub_0204B018

View File

@ -9727,7 +9727,7 @@ _02331180:
ldr r0, [r0, #8]
cmp r0, #0x20
bne _023311EC
bl sub_0204C918
bl GetDebugSpecialEpisodeNumber
b _023311F0
_023311EC:
bl GetSpecialEpisodeType
@ -10815,7 +10815,7 @@ _02332088:
b _023324F4
_02332104:
mov r0, r1
bl sub_0204C928
bl SetDebugSpecialEpisodeNumber
ldr r0, _02332508 ; =ov01_0233C178
mov r1, #4
str r1, [r0, #4]
@ -11437,7 +11437,7 @@ _02332900:
_02332910:
bl GetSpecialEpisodeType
mov r5, r0
bl sub_0204C918
bl GetDebugSpecialEpisodeNumber
mvn r1, #0
cmp r5, r1
beq _02332950
@ -11765,7 +11765,7 @@ _02332D4C:
mov r0, #4
b _02332ED4
_02332D5C:
bl sub_0204C918
bl GetDebugSpecialEpisodeNumber
bl sub_0204CA1C
cmp r0, #0
beq _02332DAC

View File

@ -3439,7 +3439,7 @@ _022DF154:
mov r2, r0
mov r0, r1, asr #0x10
mov r1, r5
bl sub_0204C6C8
bl IsStoryBeforePoint
cmp r0, #0
ldrneh r0, [r6, #6]
ldrne r1, [r4, #0x14]
@ -3459,7 +3459,7 @@ _022DF1A0:
mov r2, r0
mov r0, r1, asr #0x10
mov r1, r5
bl sub_0204C734
bl IsStoryBeforeOrAtPoint
cmp r0, #0
ldrneh r0, [r6, #6]
ldrne r1, [r4, #0x14]
@ -3479,7 +3479,7 @@ _022DF1EC:
mov r2, r0
mov r0, r1, asr #0x10
mov r1, r5
bl sub_0204C7AC
bl IsStoryAtPoint
cmp r0, #0
ldrneh r0, [r6, #6]
ldrne r1, [r4, #0x14]
@ -3499,7 +3499,7 @@ _022DF238:
mov r2, r0
mov r0, r1, asr #0x10
mov r1, r5
bl sub_0204C808
bl IsStoryAtOrAfterPoint
cmp r0, #0
ldrneh r0, [r6, #6]
ldrne r1, [r4, #0x14]
@ -3519,7 +3519,7 @@ _022DF284:
mov r2, r0
mov r0, r1, asr #0x10
mov r1, r5
bl sub_0204C880
bl IsStoryAtOrAfterPointStrict
cmp r0, #0
ldrneh r0, [r6, #6]
ldrne r1, [r4, #0x14]

View File

@ -53,6 +53,5 @@ bool8 DumpScriptVariableValues(u8* dest);
bool8 RestoreScriptVariableValues(u8* src);
void InitProgress();
void LoadScriptVarValuePair(enum script_var_id script_var_id, s32* val_1, s32* val_2);
void UpdateProgress(enum script_var_id script_var_id, s32 progress, s32 sub_progress);
#endif //PMDSKY_SCRIPTING_H

View File

@ -0,0 +1,9 @@
#ifndef PMDSKY_SPECIAL_EPISODE_H
#define PMDSKY_SPECIAL_EPISODE_H
s32 GetSpecialEpisodeType();
void SetSpecialEpisodeType(u32 type);
s32 GetDebugSpecialEpisodeNumber();
void SetDebugSpecialEpisodeNumber(s32 num);
#endif //PMDSKY_SCRIPTING_H

11
include/story_progress.h Normal file
View File

@ -0,0 +1,11 @@
#ifndef PMDSKY_STORY_PROGRESS_H
#define PMDSKY_STORY_PROGRESS_H
void UpdateProgress(enum script_var_id script_var_id, s32 chapter, s32 sub_section);
bool8 IsStoryBeforePoint(enum script_var_id script_var_id, s32 chapter, s32 sub_section);
bool8 IsStoryBeforeOrAtPoint(enum script_var_id script_var_id, s32 chapter, s32 sub_section);
s32 IsStoryAtPoint(enum script_var_id script_var_id, s32 chapter, s32 sub_section);
s32 IsStoryAtOrAfterPoint(enum script_var_id script_var_id, s32 chapter, s32 sub_section);
s32 IsStoryAtOrAfterPointStrict(enum script_var_id script_var_id, s32 chapter, s32 sub_section);
#endif //PMDSKY_STORY_PROGRESS_H

View File

@ -82,7 +82,8 @@ Static main
Object asm/main_0204B018.o
Object src/script_variable.o
Object asm/main_rodata_0209CECC.o
Object asm/main_0204C6C8.o
Object src/story_progress.o
Object src/special_episode.o
Object src/main_0204C938.o
Object asm/main_0204C94C.o
Object src/dungeon_recruitment_3.o

View File

@ -2,6 +2,8 @@
#include "enums.h"
#include "main_0200224C.h"
#include "script_variable.h"
#include "special_episode.h"
#include "story_progress.h"
#define LOCAL_SCRIPT_VAR_OFFSET 0x400
@ -24,21 +26,19 @@ const struct prog_pos_info EVENT_FLAG_PROG_POS_INFO_LINE_1044 = {
(u8*) EVENT_FLAG_FILE_NAME,
1044
};
extern const u8 SCENARIO_CALC_DEBUG_MSG;
extern s32 GetPartyMembers(s32 param1);
extern s32 GetMoneyCarried();
extern s32 GetMoneyStored();
extern s32 GetLanguageType();
extern enum game_mode GetGameMode();
extern s32 sub_0204C918();
extern s32 GetDebugSpecialEpisodeNumber();
extern s32 GetSpecialEpisodeType();
extern s32 GetNotifyNote();
extern s32 AddMoneyCarried(s32 arg0);
extern s32 SetMoneyCarried(s32 arg0);
extern s32 SetMoneyStored(s32 arg0);
extern s32 SetNotifyNote(s32 arg0);
extern s32 sub_0204C928(s32 arg0);
extern void sub_0204CBE8();
extern void ScenarioFlagBackup();
void MemcpySimple(u8* dest, u8* src, s32 n);
@ -103,7 +103,7 @@ s32 LoadScriptVariableValue(union script_var_value sv_local[], enum script_var_i
case VAR_EXECUTE_SPECIAL_EPISODE_TYPE:
switch(GetGameMode()) {
case GAME_MODE_1:
return sub_0204C918();
return GetDebugSpecialEpisodeNumber();
case GAME_MODE_SPECIAL_EPISODE:
return GetSpecialEpisodeType();
default:
@ -160,7 +160,7 @@ s32 LoadScriptVariableValueAtIndex(union script_var_value sv_local[], enum scrip
case VAR_EXECUTE_SPECIAL_EPISODE_TYPE:
switch (GetGameMode()) {
case GAME_MODE_1:
return sub_0204C918();
return GetDebugSpecialEpisodeNumber();
case GAME_MODE_SPECIAL_EPISODE:
return GetSpecialEpisodeType();
default:
@ -221,7 +221,7 @@ void SaveScriptVariableValue(union script_var_value sv_locals[], const enum scri
return;
case VAR_EXECUTE_SPECIAL_EPISODE_TYPE:
if (GetGameMode() == GAME_MODE_1) {
sub_0204C928(new_val);
SetDebugSpecialEpisodeNumber(new_val);
return;
}
return;
@ -291,7 +291,7 @@ void SaveScriptVariableValueAtIndex(union script_var_value sv_locals[], const en
return;
case VAR_EXECUTE_SPECIAL_EPISODE_TYPE:
if (GetGameMode() == GAME_MODE_1) {
sub_0204C928(new_val);
SetDebugSpecialEpisodeNumber(new_val);
return;
}
return;
@ -615,22 +615,3 @@ void LoadScriptVarValuePair(enum script_var_id script_var_id, s32* val_1, s32* v
*val_1 = LoadScriptVariableValueAtIndex(0, script_var_id, 0);
*val_2 = LoadScriptVariableValueAtIndex(0, script_var_id, 1);
}
void UpdateProgress(enum script_var_id script_var_id, s32 progress, s32 sub_progress)
{
s32 old_progress = LoadScriptVariableValueAtIndex(0, script_var_id, 0);
s32 old_sub_prog = LoadScriptVariableValueAtIndex(0, script_var_id, 1);
Debug_Print(9, &SCENARIO_CALC_DEBUG_MSG, script_var_id, old_progress, old_sub_prog,
progress, sub_progress);
// VAR_SCENARIO_MAIN stores maingame story progression
if (script_var_id == VAR_SCENARIO_MAIN) {
if ((progress!= old_progress) || (sub_progress != old_sub_prog)) {
// Reset Job Requests cleared in a single day when the maingame story progresses.
SaveScriptVariableValue(0, VAR_REQUEST_CLEAR_COUNT, 0);
}
}
SaveScriptVariableValueAtIndex(0, script_var_id, 0, progress);
SaveScriptVariableValueAtIndex(0, script_var_id, 1, sub_progress);
}

25
src/special_episode.c Normal file
View File

@ -0,0 +1,25 @@
#include "enums.h"
#include "script_variable.h"
#include "special_episode.h"
extern s32 DEBUG_SPECIAL_EPISODE_NUMBER;
s32 GetSpecialEpisodeType()
{
LoadScriptVariableValue(0, VAR_SPECIAL_EPISODE_TYPE);
}
void SetSpecialEpisodeType(u32 type)
{
SaveScriptVariableValue(0, VAR_SPECIAL_EPISODE_TYPE, type);
}
s32 GetDebugSpecialEpisodeNumber()
{
return DEBUG_SPECIAL_EPISODE_NUMBER;
}
void SetDebugSpecialEpisodeNumber(s32 num)
{
DEBUG_SPECIAL_EPISODE_NUMBER = num;
}

129
src/story_progress.c Normal file
View File

@ -0,0 +1,129 @@
#include "debug.h"
#include "enums.h"
#include "script_variable.h"
#include "story_progress.h"
extern const u8 SCENARIO_CALC_DEBUG_MSG;
void UpdateProgress(enum script_var_id script_var_id, s32 chapter, s32 sub_section)
{
s32 old_progress = LoadScriptVariableValueAtIndex(0, script_var_id, 0);
s32 old_sub_prog = LoadScriptVariableValueAtIndex(0, script_var_id, 1);
Debug_Print(9, &SCENARIO_CALC_DEBUG_MSG, script_var_id, old_progress, old_sub_prog,
chapter, sub_section);
// VAR_SCENARIO_MAIN stores maingame story progression
if (script_var_id == VAR_SCENARIO_MAIN) {
if ((chapter!= old_progress) || (sub_section != old_sub_prog)) {
// Reset Job Requests cleared in a single day when the maingame story progresses.
SaveScriptVariableValue(0, VAR_REQUEST_CLEAR_COUNT, 0);
}
}
SaveScriptVariableValueAtIndex(0, script_var_id, 0, chapter);
SaveScriptVariableValueAtIndex(0, script_var_id, 1, sub_section);
}
bool8 IsStoryBeforePoint(enum script_var_id script_var_id, s32 chapter, s32 sub_section)
{
s32 cur_chapter = LoadScriptVariableValueAtIndex(0, script_var_id, 0);
s32 cur_sub_sec = LoadScriptVariableValueAtIndex(0, script_var_id, 1);
if (cur_chapter == 0x35) {
return FALSE;
}
if (cur_chapter < chapter) {
return TRUE;
}
if ((cur_chapter == chapter) && (sub_section >= 0) && (cur_sub_sec < sub_section)) {
return TRUE;
}
return FALSE;
}
bool8 IsStoryBeforeOrAtPoint(enum script_var_id script_var_id, s32 chapter, s32 sub_section)
{
s32 cur_chapter = LoadScriptVariableValueAtIndex(0, script_var_id, 0);
s32 cur_sub_sec = LoadScriptVariableValueAtIndex(0, script_var_id, 1);
if (cur_chapter == 0x35) {
return FALSE;
}
if (cur_chapter < chapter) {
return TRUE;
}
if (cur_chapter == chapter) {
if (sub_section >= 0) {
if (cur_sub_sec <= sub_section) {
return TRUE;
}
} else {
return TRUE;
}
}
return FALSE;
}
s32 IsStoryAtPoint(enum script_var_id script_var_id, s32 chapter, s32 sub_section)
{
s32 cur_chapter = LoadScriptVariableValueAtIndex(0, script_var_id, 0);
s32 cur_sub_sec = LoadScriptVariableValueAtIndex(0, script_var_id, 1);
if (cur_chapter == chapter) {
if (sub_section < 0) {
return TRUE;
}
if (cur_sub_sec == sub_section) {
return TRUE;
}
}
return FALSE;
}
s32 IsStoryAtOrAfterPoint(enum script_var_id script_var_id, s32 chapter, s32 sub_section)
{
s32 cur_sub_sec;
s32 cur_chapter;
cur_chapter = LoadScriptVariableValueAtIndex(0, script_var_id, 0);
cur_sub_sec = LoadScriptVariableValueAtIndex(0, script_var_id, 1);
if (cur_chapter == 0x35) {
return FALSE;
}
if (cur_chapter > chapter) {
return TRUE;
}
if (cur_chapter == chapter) {
if (sub_section >= 0) {
if (cur_sub_sec >= sub_section) {
return TRUE;
}
} else {
return TRUE;
}
}
return FALSE;
}
s32 IsStoryAtOrAfterPointStrict(enum script_var_id script_var_id, s32 chapter, s32 sub_section)
{
s32 cur_chapter = LoadScriptVariableValueAtIndex(0, script_var_id, 0);
s32 cur_sub_sec = LoadScriptVariableValueAtIndex(0, script_var_id, 1);
if (cur_chapter == 0x35) {
return FALSE;
}
if (cur_chapter > chapter) {
return TRUE;
}
if ((cur_chapter == chapter) && (sub_section >= 0) && (cur_sub_sec > sub_section)) {
return TRUE;
}
return FALSE;
}