mirror of
https://github.com/pret/pmd-sky.git
synced 2026-03-21 17:25:15 -05:00
Merge pull request #221 from slaw-22/ScenarioFlagBackupAndRestore
Decomp ScenarioFlagRestore and ScenarioFlagBackup
This commit is contained in:
commit
97ccf7fce6
|
|
@ -1,6 +1,6 @@
|
|||
#pragma once
|
||||
.public _0209DFC8
|
||||
.public _0209DFE8
|
||||
.public SCENARIO_FLAG_RESUME_DEBUG_MSG
|
||||
.public SCENARIO_FLAG_BACKUP_DEBUG_MSG
|
||||
.public _0209E008
|
||||
.public _0209E010
|
||||
.public _0209E011
|
||||
|
|
@ -1,124 +1,8 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "main_0204CBE8.inc"
|
||||
.include "main_0204CD88.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start sub_0204CBE8
|
||||
sub_0204CBE8: ; 0x0204CBE8
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
||||
bl GetGameMode
|
||||
cmp r0, #1
|
||||
ldmlsia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
||||
sub r4, r0, #2
|
||||
ldr r0, _0204CCB4 ; =_0209DFC8
|
||||
mov r1, r4
|
||||
bl Debug_Print0
|
||||
mov r0, r4, lsl #0x10
|
||||
mov r2, r0, lsr #0x10
|
||||
mov r0, #0
|
||||
mov r1, #0x1a
|
||||
bl LoadScriptVariableValueAtIndex
|
||||
mov r3, r0
|
||||
mov r0, #0
|
||||
mov r2, r0
|
||||
mov r1, #2
|
||||
bl SaveScriptVariableValueAtIndex
|
||||
add r2, r4, #4
|
||||
mov r2, r2, lsl #0x10
|
||||
mov r0, #0
|
||||
mov r1, #0x1a
|
||||
mov r2, r2, lsr #0x10
|
||||
bl LoadScriptVariableValueAtIndex
|
||||
mov r3, r0
|
||||
mov r0, #0
|
||||
mov r1, #2
|
||||
mov r2, #1
|
||||
bl SaveScriptVariableValueAtIndex
|
||||
mov r8, #0
|
||||
mov sb, r4, lsl #7
|
||||
mov r7, r8
|
||||
mov r6, #0x1b
|
||||
mov r5, r8
|
||||
mov r4, #0x11
|
||||
_0204CC74:
|
||||
mov r2, sb, lsl #0x10
|
||||
mov r0, r7
|
||||
mov r1, r6
|
||||
mov r2, r2, lsr #0x10
|
||||
bl LoadScriptVariableValueAtIndex
|
||||
mov r2, r8, lsl #0x10
|
||||
mov r3, r0
|
||||
mov r0, r5
|
||||
mov r1, r4
|
||||
mov r2, r2, lsr #0x10
|
||||
bl SaveScriptVariableValueAtIndex
|
||||
add r8, r8, #1
|
||||
cmp r8, #0x80
|
||||
add sb, sb, #1
|
||||
blt _0204CC74
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
||||
.align 2, 0
|
||||
_0204CCB4: .word _0209DFC8
|
||||
arm_func_end sub_0204CBE8
|
||||
|
||||
arm_func_start ScenarioFlagBackup
|
||||
ScenarioFlagBackup: ; 0x0204CCB8
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, lr}
|
||||
bl GetGameMode
|
||||
cmp r0, #1
|
||||
ldmlsia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
||||
sub r4, r0, #2
|
||||
ldr r0, _0204CD84 ; =_0209DFE8
|
||||
mov r1, r4
|
||||
bl Debug_Print0
|
||||
mov r0, #0
|
||||
mov r2, r0
|
||||
mov r1, #2
|
||||
bl LoadScriptVariableValueAtIndex
|
||||
mov r1, r4, lsl #0x10
|
||||
mov r3, r0
|
||||
mov r2, r1, lsr #0x10
|
||||
mov r0, #0
|
||||
mov r1, #0x1a
|
||||
bl SaveScriptVariableValueAtIndex
|
||||
mov r0, #0
|
||||
mov r1, #2
|
||||
mov r2, #1
|
||||
bl LoadScriptVariableValueAtIndex
|
||||
add r2, r4, #4
|
||||
mov r2, r2, lsl #0x10
|
||||
mov r3, r0
|
||||
mov r0, #0
|
||||
mov r1, #0x1a
|
||||
mov r2, r2, lsr #0x10
|
||||
bl SaveScriptVariableValueAtIndex
|
||||
mov r8, #0
|
||||
mov sb, r4, lsl #7
|
||||
mov r7, r8
|
||||
mov r6, #0x11
|
||||
mov r5, r8
|
||||
mov r4, #0x1b
|
||||
_0204CD44:
|
||||
mov r2, r8, lsl #0x10
|
||||
mov r0, r7
|
||||
mov r1, r6
|
||||
mov r2, r2, lsr #0x10
|
||||
bl LoadScriptVariableValueAtIndex
|
||||
mov r2, sb, lsl #0x10
|
||||
mov r3, r0
|
||||
mov r0, r5
|
||||
mov r1, r4
|
||||
mov r2, r2, lsr #0x10
|
||||
bl SaveScriptVariableValueAtIndex
|
||||
add r8, r8, #1
|
||||
cmp r8, #0x80
|
||||
add sb, sb, #1
|
||||
blt _0204CD44
|
||||
ldmia sp!, {r3, r4, r5, r6, r7, r8, sb, pc}
|
||||
.align 2, 0
|
||||
_0204CD84: .word _0209DFE8
|
||||
arm_func_end ScenarioFlagBackup
|
||||
|
||||
arm_func_start InitWorldMapScriptVars
|
||||
InitWorldMapScriptVars: ; 0x0204CD88
|
||||
stmdb sp!, {r3, lr}
|
||||
|
|
@ -866,13 +866,13 @@ SCENARIO_CALC_DEBUG_MSG:
|
|||
.byte 0x41, 0x52, 0x49, 0x4F, 0x20, 0x43, 0x41, 0x4C, 0x43, 0x20, 0x5B, 0x25, 0x33, 0x64, 0x5D, 0x20
|
||||
.byte 0x25, 0x34, 0x64, 0x20, 0x25, 0x34, 0x64, 0x20, 0x2D, 0x3E, 0x20, 0x25, 0x34, 0x64, 0x20, 0x25
|
||||
.byte 0x34, 0x64, 0x00, 0x00
|
||||
.global _0209DFC8
|
||||
_0209DFC8:
|
||||
.global SCENARIO_FLAG_RESUME_DEBUG_MSG
|
||||
SCENARIO_FLAG_RESUME_DEBUG_MSG:
|
||||
.byte 0x53, 0x63, 0x65, 0x6E, 0x61, 0x72, 0x69, 0x6F, 0x46, 0x6C, 0x61, 0x67
|
||||
.byte 0x20, 0x52, 0x65, 0x73, 0x75, 0x6D, 0x65, 0x47, 0x61, 0x6D, 0x65, 0x4D, 0x6F, 0x64, 0x65, 0x20
|
||||
.byte 0x25, 0x64, 0x0A, 0x00
|
||||
.global _0209DFE8
|
||||
_0209DFE8:
|
||||
.global SCENARIO_FLAG_BACKUP_DEBUG_MSG
|
||||
SCENARIO_FLAG_BACKUP_DEBUG_MSG:
|
||||
.byte 0x53, 0x63, 0x65, 0x6E, 0x61, 0x72, 0x69, 0x6F, 0x46, 0x6C, 0x61, 0x67
|
||||
.byte 0x20, 0x42, 0x61, 0x63, 0x6B, 0x75, 0x70, 0x47, 0x61, 0x6D, 0x65, 0x4D, 0x6F, 0x64, 0x65, 0x20
|
||||
.byte 0x25, 0x64, 0x0A, 0x00
|
||||
|
|
|
|||
|
|
@ -3066,9 +3066,13 @@ enum script_var_id {
|
|||
// Used to identify a cutscene save in a Special Episode. Acts very similar to
|
||||
// COMPULSORY_SAVE_POINT.
|
||||
VAR_COMPULSORY_SAVE_POINT_SIDE = 25,
|
||||
// The backup version of SCENARIO_SELECT saved in the function ScenarioFlagBackup.
|
||||
// Backup storage for two SCENARIO_SELECT values per game mode.
|
||||
// When restoring, values for the current game mode are copied back into SCENARIO_SELECT.
|
||||
// Layout (grouped by value then mode): Value1: modes 2-5; Value2: modes 2-5.
|
||||
VAR_SCENARIO_SELECT_BACKUP = 26,
|
||||
// The backup version of SCENARIO_MAIN_BIT_FLAG saved in the function ScenarioFlagBackup.
|
||||
// Backup storage for SCENARIO_MAIN_BIT_FLAG each game mode.
|
||||
// When restoring, values for the current game mode are copied back into SCENARIO_MAIN_BIT_FLAG.
|
||||
// Layout (grouped by mode then value): Mode 2: 128 bits; Mode 3: 128 bits etc
|
||||
VAR_SCENARIO_MAIN_BIT_FLAG_BACKUP = 27,
|
||||
// The Level ID (see the version-dependent script_level_id_* enums) that the player is in in the
|
||||
// overworld.
|
||||
|
|
|
|||
7
include/scenario_flag.h
Normal file
7
include/scenario_flag.h
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
#ifndef PMDSKY_SCENARIO_FLAG_H
|
||||
#define PMDSKY_SCENARIO_FLAG_H
|
||||
|
||||
void ScenarioFlagRestore();
|
||||
void ScenarioFlagBackup();
|
||||
|
||||
#endif //PMDSKY_SCENARIO_FLAG_H
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
#ifndef PMDSKY_SCRIPTING_H
|
||||
#define PMDSKY_SCRIPTING_H
|
||||
#ifndef PMDSKY_SCRIPT_VARIABLE_H
|
||||
#define PMDSKY_SCRIPT_VARIABLE_H
|
||||
|
||||
#include "enums.h"
|
||||
#include "util.h"
|
||||
|
|
@ -54,4 +54,4 @@ bool8 RestoreScriptVariableValues(u8* src);
|
|||
void InitScenarioProgressScriptVars();
|
||||
void LoadScriptVarValuePair(enum script_var_id script_var_id, s32* val_1, s32* val_2);
|
||||
|
||||
#endif //PMDSKY_SCRIPTING_H
|
||||
#endif //PMDSKY_SCRIPT_VARIABLE_H
|
||||
|
|
|
|||
|
|
@ -15,4 +15,4 @@ void SetSpecialEpisodeOpenOld(u32 idx, u32 val);
|
|||
bool8 IsSpecialEpisodeBeaten(u32 idx);
|
||||
void SetSpecialEpisodeBeaten(u32 idx, u32 special_ep_beaten);
|
||||
|
||||
#endif //PMDSKY_SCRIPTING_H
|
||||
#endif //PMDSKY_SPECIAL_EPISODE_H
|
||||
|
|
|
|||
3
main.lsf
3
main.lsf
|
|
@ -91,7 +91,8 @@ Static main
|
|||
Object src/has_played_old_game.o
|
||||
Object src/performance_progress.o
|
||||
Object src/main_0204CB94.o
|
||||
Object asm/main_0204CBE8.o
|
||||
Object src/scenario_flag.o
|
||||
Object asm/main_0204CD88.o
|
||||
Object src/main_0204DA2C.o
|
||||
Object asm/main_0204DB08.o
|
||||
Object src/main_0204DD80.o
|
||||
|
|
|
|||
61
src/scenario_flag.c
Normal file
61
src/scenario_flag.c
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
#include "debug.h"
|
||||
#include "enums.h"
|
||||
#include "scenario_flag.h"
|
||||
#include "script_variable.h"
|
||||
|
||||
extern u32 GetGameMode();
|
||||
|
||||
extern u8 SCENARIO_FLAG_RESUME_DEBUG_MSG;
|
||||
extern u8 SCENARIO_FLAG_BACKUP_DEBUG_MSG;
|
||||
|
||||
void ScenarioFlagRestore() {
|
||||
u32 val;
|
||||
|
||||
u32 game_mode = GetGameMode();
|
||||
if (game_mode <= GAME_MODE_1) {
|
||||
return;
|
||||
}
|
||||
|
||||
u32 game_mode_adjusted = game_mode - 2;
|
||||
Debug_Print0(&SCENARIO_FLAG_RESUME_DEBUG_MSG, game_mode_adjusted);
|
||||
|
||||
val = LoadScriptVariableValueAtIndex(0, VAR_SCENARIO_SELECT_BACKUP, game_mode_adjusted);
|
||||
SaveScriptVariableValueAtIndex(0, VAR_SCENARIO_SELECT, 0, val);
|
||||
val = LoadScriptVariableValueAtIndex(0, VAR_SCENARIO_SELECT_BACKUP, game_mode_adjusted + 4);
|
||||
SaveScriptVariableValueAtIndex(0, VAR_SCENARIO_SELECT, 1, val);
|
||||
|
||||
s32 restore_idx = 0;
|
||||
s32 backup_idx = game_mode_adjusted << 7;
|
||||
do {
|
||||
val = LoadScriptVariableValueAtIndex(0, VAR_SCENARIO_MAIN_BIT_FLAG_BACKUP, backup_idx);
|
||||
SaveScriptVariableValueAtIndex(0, VAR_SCENARIO_MAIN_BIT_FLAG, restore_idx, val);
|
||||
backup_idx += 1;
|
||||
restore_idx += 1;
|
||||
} while (restore_idx < 128);
|
||||
}
|
||||
|
||||
void ScenarioFlagBackup() {
|
||||
u32 val;
|
||||
|
||||
u32 game_mode = GetGameMode();
|
||||
if (game_mode <= GAME_MODE_1) {
|
||||
return;
|
||||
}
|
||||
|
||||
u32 game_mode_adjusted = game_mode - 2;
|
||||
Debug_Print0(&SCENARIO_FLAG_BACKUP_DEBUG_MSG, game_mode_adjusted);
|
||||
|
||||
val = LoadScriptVariableValueAtIndex(0, VAR_SCENARIO_SELECT, 0);
|
||||
SaveScriptVariableValueAtIndex(0, VAR_SCENARIO_SELECT_BACKUP, game_mode_adjusted, val);
|
||||
val = LoadScriptVariableValueAtIndex(0, VAR_SCENARIO_SELECT, 1);
|
||||
SaveScriptVariableValueAtIndex(0, VAR_SCENARIO_SELECT_BACKUP, game_mode_adjusted + 4, val);
|
||||
|
||||
s32 source_idx = 0;
|
||||
s32 backup_idx = game_mode_adjusted << 7;
|
||||
do {
|
||||
val = LoadScriptVariableValueAtIndex(0, VAR_SCENARIO_MAIN_BIT_FLAG, source_idx);
|
||||
SaveScriptVariableValueAtIndex(0, VAR_SCENARIO_MAIN_BIT_FLAG_BACKUP, backup_idx, val);
|
||||
source_idx += 1;
|
||||
backup_idx += 1;
|
||||
} while (source_idx < 128);
|
||||
}
|
||||
|
|
@ -1,6 +1,9 @@
|
|||
#include "debug.h"
|
||||
#include "enums.h"
|
||||
#include "main_0200224C.h"
|
||||
#include "main_0200330C.h"
|
||||
#include "main_0200ECFC.h"
|
||||
#include "scenario_flag.h"
|
||||
#include "script_variable.h"
|
||||
#include "special_episode.h"
|
||||
#include "story_progress.h"
|
||||
|
|
@ -28,19 +31,14 @@ const struct prog_pos_info EVENT_FLAG_PROG_POS_INFO_COMPARE_SCRIPT_VARIABLES = {
|
|||
};
|
||||
|
||||
extern s32 GetPartyMembers(s32 param1);
|
||||
extern s32 GetMoneyCarried();
|
||||
extern s32 GetMoneyStored();
|
||||
extern s32 GetLanguageType();
|
||||
extern enum game_mode GetGameMode();
|
||||
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 void sub_0204CBE8();
|
||||
extern void ScenarioFlagBackup();
|
||||
void MemcpySimple(u8* dest, u8* src, s32 n);
|
||||
extern void ZinitScriptVariable(u32 param_1, u32 param_2);
|
||||
|
||||
void LoadScriptVariableRaw(struct script_var_raw* sv_raw,
|
||||
|
|
@ -514,7 +512,7 @@ void EventFlagResume()
|
|||
SaveScriptVariableValue(0, VAR_ATTENDANT1_KIND, LoadScriptVariableValueAtIndexInline(VAR_ATTENDANT1_KIND_BACKUP, idx));
|
||||
SaveScriptVariableValue(0, VAR_ATTENDANT2_KIND, LoadScriptVariableValueAtIndexInline(VAR_ATTENDANT2_KIND_BACKUP, idx));
|
||||
|
||||
sub_0204CBE8();
|
||||
ScenarioFlagRestore();
|
||||
}
|
||||
|
||||
// This inline allows EventFlagBackup to match
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user