event_data -> save_vars_flags

This commit is contained in:
red031000
2023-11-07 16:12:53 +00:00
parent 841670dec8
commit db56da1092
23 changed files with 127 additions and 129 deletions

View File

@@ -182,7 +182,7 @@ Static arm9
Object scrcmd_move_relearner.o
Object scrcmd_25.o
Object unk_02046030.o
Object event_data.o
Object save_vars_flags.o
Object task.o
Object encounter.o
Object unk_02047500.o

View File

@@ -1958,7 +1958,7 @@ _020394D0:
cmp r4, r1
bhs _020394DE
add r1, r4, #0x0
bl GetVarAddr
bl Save_VarsFlags_GetVarAddr
pop {r3-r5, pc}
_020394DE:
ldr r1, _020394EC ; =0x00007FD7
@@ -2008,7 +2008,7 @@ FlagCheck: ; 0x02039528
add r4, r1, #0x0
bl Save_VarsFlags_Get
add r1, r4, #0x0
bl CheckFlagInArray
bl Save_VarsFlags_CheckFlagInArray
pop {r4, pc}
.balign 4
@@ -2019,7 +2019,7 @@ FieldSystem_FlagSet: ; 0x0203953C
add r4, r1, #0x0
bl Save_VarsFlags_Get
add r1, r4, #0x0
bl SetFlagInArray
bl Save_VarsFlags_SetFlagInArray
pop {r4, pc}
.balign 4
@@ -2030,7 +2030,7 @@ FlagClear: ; 0x02039550
add r4, r1, #0x0
bl Save_VarsFlags_Get
add r1, r4, #0x0
bl ClearFlagInArray
bl Save_VarsFlags_ClearFlagInArray
pop {r4, pc}
.balign 4
@@ -2041,7 +2041,7 @@ ResetTempFlagsAndVars: ; 0x02039564
bl Save_VarsFlags_Get
mov r1, #0x1
add r4, r0, #0x0
bl GetFlagAddr
bl Save_VarsFlags_GetFlagAddr
mov r1, #0x0
strb r1, [r0, #0x0]
strb r1, [r0, #0x1]
@@ -2054,7 +2054,7 @@ ResetTempFlagsAndVars: ; 0x02039564
mov r1, #0x1
add r0, r4, #0x0
lsl r1, r1, #0xe
bl GetVarAddr
bl Save_VarsFlags_GetVarAddr
mov r1, #0x0
mov r2, #0x40
bl memset
@@ -2068,7 +2068,7 @@ sub_0203959C: ; 0x0203959C
bl Save_VarsFlags_Get
mov r1, #0xaa
lsl r1, r1, #0x4
bl GetFlagAddr
bl Save_VarsFlags_GetFlagAddr
mov r2, #0x18
mov r1, #0x0
_020395B0:
@@ -2163,7 +2163,7 @@ TrainerFlagCheck: ; 0x02039640
add r1, r4, r1
lsl r1, r1, #0x10
lsr r1, r1, #0x10
bl CheckFlagInArray
bl Save_VarsFlags_CheckFlagInArray
pop {r4, pc}
.balign 4
@@ -2178,7 +2178,7 @@ TrainerFieldSystem_FlagSet: ; 0x0203965C
add r1, r4, r1
lsl r1, r1, #0x10
lsr r1, r1, #0x10
bl SetFlagInArray
bl Save_VarsFlags_SetFlagInArray
pop {r4, pc}
.balign 4
@@ -2193,7 +2193,7 @@ TrainerFlagClear: ; 0x02039678
add r1, r4, r1
lsl r1, r1, #0x10
lsr r1, r1, #0x10
bl ClearFlagInArray
bl Save_VarsFlags_ClearFlagInArray
pop {r4, pc}
.balign 4

View File

@@ -18,7 +18,7 @@ sub_0205F314: ; 0x0205F314
push {r3-r5, lr}
add r5, r1, #0x0
add r4, r2, #0x0
bl GetVarAddr
bl Save_VarsFlags_GetVarAddr
mov r1, #0x1
lsl r1, r1, #0xe
cmp r5, r1
@@ -44,7 +44,7 @@ _0205F33C:
thumb_func_start sub_0205F344
sub_0205F344: ; 0x0205F344
push {r3, lr}
bl GetVarAddr
bl Save_VarsFlags_GetVarAddr
cmp r0, #0x0
bne _0205F352
mov r0, #0x0

View File

@@ -3423,11 +3423,11 @@
.extern Save_VarsFlags_sizeof
.extern Save_VarsFlags_Init
.extern Save_VarsFlags_Get
.extern CheckFlagInArray
.extern SetFlagInArray
.extern ClearFlagInArray
.extern GetFlagAddr
.extern GetVarAddr
.extern Save_VarsFlags_CheckFlagInArray
.extern Save_VarsFlags_SetFlagInArray
.extern Save_VarsFlags_ClearFlagInArray
.extern Save_VarsFlags_GetFlagAddr
.extern Save_VarsFlags_GetVarAddr
.extern FieldSystem_CreateTask
.extern TaskManager_Jump
.extern TaskManager_Call

View File

@@ -2,7 +2,7 @@
#define POKEDIAMOND_OVERLAY_52_H
#include "global.h"
#include "event_data.h"
#include "save_vars_flags.h"
#include "main.h"
#include "math_util.h"
#include "options.h"

View File

@@ -2,7 +2,7 @@
#include "encounter.h"
#include "constants/battle.h"
#include "constants/game_stats.h"
#include "event_data.h"
#include "save_vars_flags.h"
#include "field_system.h"
#include "igt.h"
#include "task.h"

View File

@@ -1,76 +0,0 @@
#include "global.h"
#include "save.h"
#include "event_data.h"
u8 UNK_021C5A14[8];
u8 * GetFlagAddr(struct SaveVarsFlags * state, u16 flag_id);
u32 Save_VarsFlags_sizeof(void)
{
return sizeof(struct SaveVarsFlags);
}
void Save_VarsFlags_Init(struct SaveVarsFlags * state)
{
memset(state, 0, sizeof(struct SaveVarsFlags));
}
struct SaveVarsFlags * Save_VarsFlags_Get(struct SaveData * save)
{
return (struct SaveVarsFlags *)SaveArray_Get(save, 4);
}
BOOL CheckFlagInArray(struct SaveVarsFlags * state, u16 flag_id)
{
u8 * ptr = GetFlagAddr(state, flag_id);
if (ptr != NULL)
{
int mask = 1 << (flag_id % 8);
if (*ptr & mask)
return TRUE;
}
return FALSE;
}
void SetFlagInArray(struct SaveVarsFlags * state, u16 flag_id)
{
u8 * ptr = GetFlagAddr(state, flag_id);
if (ptr != NULL)
{
int mask = 1 << (flag_id % 8);
*ptr |= mask;
}
}
void ClearFlagInArray(struct SaveVarsFlags * state, u16 flag_id)
{
u8 * ptr = GetFlagAddr(state, flag_id);
if (ptr != NULL)
{
int mask = 1 << (flag_id % 8);
*ptr &= 0xFF ^ mask;
}
}
u8 * GetFlagAddr(struct SaveVarsFlags * state, u16 flag_id)
{
if (flag_id == 0)
return 0;
if (flag_id < 0x4000)
{
GF_ASSERT((flag_id / 8) < 364);
return &state->flags[flag_id / 8];
}
else
{
GF_ASSERT(((flag_id - 0x4000) / 8) < 8);
return &UNK_021C5A14[(flag_id - 0x4000) / 8];
}
}
u16 * GetVarAddr(struct SaveVarsFlags * state, u16 var_id)
{
GF_ASSERT((var_id - 0x4000) < 288);
return &state->vars[var_id - 0x4000];
}

View File

@@ -3,7 +3,7 @@
#include "player_data.h"
#include "save.h"
#include "party.h"
#include "event_data.h"
#include "save_vars_flags.h"
#include "pokemon_storage_system.h"
#include "save_system_info.h"
#include "poketch.h"

View File

@@ -0,0 +1,59 @@
#include "global.h"
#include "save_vars_flags.h"
static u8 sTempFlags[NUM_TEMP_FLAGS / 8] = {0};
u32 Save_VarsFlags_sizeof(void) {
return sizeof(SaveVarsFlags);
}
void Save_VarsFlags_Init(SaveVarsFlags *varsFlags) {
memset(varsFlags, 0, sizeof(SaveVarsFlags));
}
SaveVarsFlags *Save_VarsFlags_Get(SaveData *save) {
return (SaveVarsFlags *)SaveArray_Get(save, SAVE_FLAGS);
}
BOOL Save_VarsFlags_CheckFlagInArray(SaveVarsFlags *varsFlags, u16 flagId) {
u8 *flagAddr = Save_VarsFlags_GetFlagAddr(varsFlags, flagId);
if (flagAddr != NULL) {
if (*flagAddr & (1 << (flagId % 8))) {
return TRUE;
}
}
return FALSE;
}
void Save_VarsFlags_SetFlagInArray(SaveVarsFlags *varsFlags, u16 flagId) {
u8 *flagAddr = Save_VarsFlags_GetFlagAddr(varsFlags, flagId);
if (flagAddr == NULL) {
return;
}
*flagAddr |= 1 << (flagId % 8);
}
void Save_VarsFlags_ClearFlagInArray(SaveVarsFlags *varsFlags, u16 flagId) {
u8 *flagAddr = Save_VarsFlags_GetFlagAddr(varsFlags, flagId);
if (flagAddr == NULL) {
return;
}
*flagAddr &= 0xFF ^ (1 << (flagId % 8));
}
u8 *Save_VarsFlags_GetFlagAddr(SaveVarsFlags *varsFlags, u16 flagId) {
if (flagId == 0) {
return NULL;
} else if (flagId < TEMP_FLAG_BASE) {
GF_ASSERT((flagId / 8) < (NUM_FLAGS / 8));
return &varsFlags->flags[flagId / 8];
} else {
GF_ASSERT(((flagId - TEMP_FLAG_BASE) / 8) < (NUM_TEMP_FLAGS / 8));
return &sTempFlags[(flagId - TEMP_FLAG_BASE) / 8];
}
}
u16 *Save_VarsFlags_GetVarAddr(SaveVarsFlags * varsFlags, u16 varId) {
GF_ASSERT((varId - VAR_BASE) < NUM_VARS);
return &varsFlags->vars[varId - VAR_BASE];
}

View File

@@ -1,6 +1,6 @@
#include "global.h"
#include "scrcmd.h"
#include "event_data.h"
#include "save_vars_flags.h"
#include "heap.h"
#include "pokedex.h"
#include "pokemon_storage_system.h"

View File

@@ -2,7 +2,7 @@
#include "scrcmd.h"
#include "constants/accessories.h"
#include "constants/pokemon.h"
#include "event_data.h"
#include "save_vars_flags.h"
extern void sub_0205F54C(struct SaveVarsFlags* state);
extern u16 sub_0205F55C(struct SaveVarsFlags* state);

View File

@@ -1,6 +1,6 @@
#include "global.h"
#include "scrcmd.h"
#include "event_data.h"
#include "save_vars_flags.h"
#include "pokedex.h"
extern void* sub_02034E20(void*);

View File

@@ -1,5 +1,5 @@
#include "global.h"
#include "event_data.h"
#include "save_vars_flags.h"
#include "itemtool.h"
#include "message_format.h"
#include "msgdata.h"

View File

@@ -1,5 +1,5 @@
#include "global.h"
#include "event_data.h"
#include "save_vars_flags.h"
#include "unk_02022504.h"
#include "unk_0204B0A0.h"
#include "unk_0205FA2C.h"

View File

@@ -7,17 +7,17 @@
static void _flag_set(struct SaveVarsFlags * state, u16 flag_id)
{
SetFlagInArray(state, flag_id);
Save_VarsFlags_SetFlagInArray(state, flag_id);
}
static void _flag_clear(struct SaveVarsFlags * state, u16 flag_id)
{
ClearFlagInArray(state, flag_id);
Save_VarsFlags_ClearFlagInArray(state, flag_id);
}
static BOOL _flag_check(struct SaveVarsFlags * state, u16 flag_id)
{
return CheckFlagInArray(state, flag_id);
return Save_VarsFlags_CheckFlagInArray(state, flag_id);
}
static BOOL _flag_op(struct SaveVarsFlags * state, u32 op, u32 flag_id)

View File

@@ -2,7 +2,7 @@
#include "unk_0206015C.h"
#include "constants/sndseq.h"
#include "event_data.h"
#include "save_vars_flags.h"
#include "heap.h"
#include "main.h"
#include "unk_020051F4.h"

View File

@@ -1,6 +1,6 @@
#include "global.h"
#include "heap.h"
#include "event_data.h"
#include "save_vars_flags.h"
#include "unk_02085338.h"
extern BOOL sub_0205ED0C(struct SaveVarsFlags * state);

View File

@@ -3,4 +3,9 @@
#define FLAG_SYS_SAFARI 0x967
#define NUM_FLAGS 2912
#define NUM_TEMP_FLAGS 64
#define TEMP_FLAG_BASE 0x4000
#endif //POKEDIAMOND_CONSTANTS_FLAGS_H

View File

@@ -2,6 +2,7 @@
#define POKEDIAMOND_CONSTANTS_SAVE_ARRAYS_H
#define SAVE_BAG 3
#define SAVE_FLAGS 4
#define SAVE_DAYCARE 8
#define SAVE_SAFARI_ZONE 27
#define SAVE_EASY_CHAT 34

8
include/constants/vars.h Normal file
View File

@@ -0,0 +1,8 @@
#ifndef POKEDIAMOND_CONSTANTS_VARS_H
#define POKEDIAMOND_CONSTANTS_VARS_H
#define VAR_BASE 0x4000
#define NUM_VARS 0x120
#endif //POKEDIAMOND_CONSTANTS_VARS_H

View File

@@ -1,21 +0,0 @@
#ifndef GUARD_SAVE_VARS_FLAGS_H
#define GUARD_SAVE_VARS_FLAGS_H
#include "save.h"
typedef struct SaveVarsFlags
{
u16 vars[288];
u8 flags[364];
} SaveVarsFlags;
u32 Save_VarsFlags_sizeof(void);
void Save_VarsFlags_Init(struct SaveVarsFlags * state);
struct SaveVarsFlags * Save_VarsFlags_Get(struct SaveData * save);
BOOL CheckFlagInArray(struct SaveVarsFlags * state, u16 flag_id);
void SetFlagInArray(struct SaveVarsFlags * state, u16 flag_id);
void ClearFlagInArray(struct SaveVarsFlags * state, u16 flag_id);
u8 * GetFlagAddr(struct SaveVarsFlags * state, u16 flag_id);
u16 * GetVarAddr(struct SaveVarsFlags * state, u16 var_id);
#endif //GUARD_SAVE_VARS_FLAGS_H

22
include/save_vars_flags.h Normal file
View File

@@ -0,0 +1,22 @@
#ifndef POKEDIAMOND_SAVE_VARS_FLAGS_H
#define POKEDIAMOND_SAVE_VARS_FLAGS_H
#include "save.h"
#include "constants/flags.h"
#include "constants/vars.h"
typedef struct SaveVarsFlags {
u16 vars[NUM_VARS];
u8 flags[NUM_FLAGS / 8];
} SaveVarsFlags;
u32 Save_VarsFlags_sizeof(void);
void Save_VarsFlags_Init(SaveVarsFlags *varsFlags);
SaveVarsFlags *Save_VarsFlags_Get(SaveData *saveData);
BOOL Save_VarsFlags_CheckFlagInArray(SaveVarsFlags *varsFlags, u16 flagId);
void Save_VarsFlags_SetFlagInArray(SaveVarsFlags *varsFlags, u16 flagId);
void Save_VarsFlags_ClearFlagInArray(SaveVarsFlags *varsFlags, u16 flagId);
u8 *Save_VarsFlags_GetFlagAddr(SaveVarsFlags *varsFlags, u16 flagId);
u16 *Save_VarsFlags_GetVarAddr(SaveVarsFlags *varsFlags, u16 varId);
#endif //POKEDIAMOND_SAVE_VARS_FLAGS_H

View File

@@ -1,7 +1,7 @@
#ifndef POKEDIAMOND_UNK_0205EC84_H
#define POKEDIAMOND_UNK_0205EC84_H
#include "event_data.h"
#include "save_vars_flags.h"
void sub_0205ECD4(struct SaveVarsFlags * state);
BOOL sub_0205ECE0(struct SaveVarsFlags * state);