Persistent Cycle Weekeventregs (#1267)

* persistent weekeventregs

* move macro

* PR Suggestions

* 2 to ALT

* PR Suggestions
This commit is contained in:
engineer124 2023-06-09 04:46:13 +10:00 committed by GitHub
parent 8c961f2b16
commit f05d1723d6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 195 additions and 84 deletions

View File

@ -68,6 +68,17 @@
#define ALIGN64(val) (((val) + 0x3F) & ~0x3F)
#define ALIGN256(val) (((val) + 0xFF) & ~0xFF)
#define BIT_FLAG_TO_SHIFT(flag) \
((flag & 0x80) ? 7 : \
(flag & 0x40) ? 6 : \
(flag & 0x20) ? 5 : \
(flag & 0x10) ? 4 : \
(flag & 0x8) ? 3 : \
(flag & 0x4) ? 2 : \
(flag & 0x2) ? 1 : \
(flag & 0x1) ? 0 : \
0)
/**
* `x` vertex x
* `y` vertex y

View File

@ -580,17 +580,6 @@ typedef union CutsceneData {
s8 b[4];
} CutsceneData;
#define BIT_FLAG_TO_SHIFT(flag) \
((flag & 0x80) ? 7 : \
(flag & 0x40) ? 6 : \
(flag & 0x20) ? 5 : \
(flag & 0x10) ? 4 : \
(flag & 0x8) ? 3 : \
(flag & 0x4) ? 2 : \
(flag & 0x2) ? 1 : \
(flag & 0x1) ? 0 : \
0)
// Do not trigger the scripted cutscene upon any spawn
#define CS_SPAWN_FLAG_NONE 0xFF
// Always trigger the scripted cutscene upon the specified spawn

View File

@ -970,7 +970,7 @@ typedef enum {
#define WEEKEVENTREG_51_40 PACK_WEEKEVENTREG_FLAG(51, 0x40)
#define WEEKEVENTREG_51_80 PACK_WEEKEVENTREG_FLAG(51, 0x80)
// ProtectedCremia
// Protected Cremia
#define WEEKEVENTREG_ESCORTED_CREMIA PACK_WEEKEVENTREG_FLAG(52, 0x01)
// Lose Milk Run minigame
#define WEEKEVENTREG_52_02 PACK_WEEKEVENTREG_FLAG(52, 0x02)

View File

@ -11,12 +11,12 @@ void func_80147414(SramContext* sramCtx, s32 fileNum, s32 arg2);
((newf)[0] != 'Z' || (newf)[1] != 'E' || (newf)[2] != 'L' || (newf)[3] != 'D' || (newf)[4] != 'A' || \
(newf)[5] != '3')
typedef struct PersistentCycleFlags {
typedef struct PersistentCycleSceneFlags {
/* 0x0 */ u32 switch0;
/* 0x4 */ u32 switch1;
/* 0x8 */ u32 chest;
/* 0xC */ u32 collectible;
} PersistentCycleFlags; // size = 0x10
} PersistentCycleSceneFlags; // size = 0x10
#define PERSISTENT_CYCLE_FLAGS_SET(switch0, switch1, chest, collectible) { switch0, switch1, chest, collectible },
#define PERSISTENT_CYCLE_FLAGS_NONE PERSISTENT_CYCLE_FLAGS_SET(0, 0, 0, 0)
@ -28,58 +28,105 @@ typedef struct PersistentCycleFlags {
/**
* Array of bitwise flags which won't be turned off on a cycle reset (will persist between cycles)
*/
PersistentCycleFlags sPersistentCycleFlags[SCENE_MAX] = {
PersistentCycleSceneFlags sPersistentCycleSceneFlags[SCENE_MAX] = {
#include "tables/scene_table.h"
};
#undef DEFINE_SCENE
#undef DEFINE_SCENE_UNSET
// TODO: figure out a way to use the WEEKEVENTREG defines here
// Each flag has 2 bits to store persistence over the three-day reset cycle
// Only 1 of these bits need to be set to persist (Values 1, 2, 3).
// Therefore, the final game does not distinguish between these two macros in use
#define PERSISTENT_WEEKEVENTREG(flag) (3 << (2 * BIT_FLAG_TO_SHIFT(flag)))
#define PERSISTENT_WEEKEVENTREG_ALT(flag) (2 << (2 * BIT_FLAG_TO_SHIFT(flag)))
// weekEventReg flags which will be not be cleared on a cycle reset
u16 D_801C66D0[ARRAY_COUNT(gSaveContext.save.saveInfo.weekEventReg)] = {
/* 0 */ 0xFFFC,
/* 1 */ 0xFFFF,
/* 2 */ 0xFFFF,
/* 3 */ 0xFFFF,
//! @note The index of the flag in this array must be the same to its index in the WeekeventReg array
//! Only the mask is read from the `PERSISTENT_` macros.
u16 sPersistentCycleWeekEventRegs[ARRAY_COUNT(gSaveContext.save.saveInfo.weekEventReg)] = {
/* 0 */
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_TERMINA_FIELD) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_IKANA_GRAVEYARD) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_ROMANI_RANCH) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_GORMAN_TRACK) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_MOUNTAIN_VILLAGE_WINTER) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_GORON_SHRINE) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_SNOWHEAD),
/* 1 */
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_SOUTHERN_SWAMP_POISONED) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_WOODFALL) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_DEKU_PALACE) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_GREAT_BAY_COAST) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_PIRATES_FORTRESS) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_ZORA_HALL) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_WATERFALL_RAPIDS) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_IKANA_CANYON),
/* 2 */
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_IKANA_CASTLE) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_STONE_TOWER) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_STONE_TOWER_INVERTED) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_EAST_CLOCK_TOWN) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_WEST_CLOCK_TOWN) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_NORTH_CLOCK_TOWN) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_WOODFALL_TEMPLE) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_SNOWHEAD_TEMPLE),
/* 3 */
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_PIRATES_FORTRESS_EXTERIOR) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_STONE_TOWER_TEMPLE) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_STONE_TOWER_TEMPLE_INVERTED) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_THE_MOON) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_MOON_DEKU_TRIAL) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_MOON_GORON_TRIAL) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_MOON_ZORA_TRIAL) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_03_80),
/* 4 */ 0,
/* 5 */ 0,
/* 6 */ 0,
/* 7 */ 0xC000,
/* 8 */ 0xC00,
/* 7 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_ENTERED_WOODFALL_TEMPLE_PRISON),
/* 8 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_DOGGY_RACETRACK_HEART_PIECE),
/* 9 */ 0,
/* 10 */ 0xC0,
/* 10 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_10_08),
/* 11 */ 0,
/* 12 */ 0x300,
/* 13 */ 0x3000,
/* 14 */ 0xC000,
/* 15 */ 0xC00,
/* 12 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_12_10),
/* 13 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_RECEIVED_OCEANSIDE_WALLET_UPGRADE),
/* 14 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_14_80),
/* 15 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_15_20),
/* 16 */ 0,
/* 17 */ 0,
/* 18 */ 0,
/* 19 */ 0,
/* 20 */ 0,
/* 21 */ 0,
/* 22 */ 0xC00C,
/* 23 */ 0xC00C,
/* 24 */ 0xC008,
/* 25 */ 3,
/* 26 */ 0x3000,
/* 22 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_22_02) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_22_80),
/* 23 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_23_02) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_23_80),
/* 24 */ PERSISTENT_WEEKEVENTREG_ALT(WEEKEVENTREG_24_02) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_24_80),
/* 25 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_25_01),
/* 26 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_26_40),
/* 27 */ 0,
/* 28 */ 0,
/* 29 */ 0,
/* 30 */ 0xFF00,
/* 31 */ 0xC3F,
/* 32 */ 0x3F,
/* 30 */
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_30_10) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_30_20) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_30_40) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_30_80),
/* 31 */
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_31_01) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_31_02) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_31_04) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_31_20),
/* 32 */
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_32_01) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_32_02) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_32_04),
/* 33 */ 0,
/* 34 */ 0,
/* 35 */ 0xCFFF,
/* 35 */
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_35_01) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_35_02) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_35_04) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_35_08) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_35_10) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_35_20) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_35_80),
/* 36 */ 0,
/* 37 */ 0,
/* 38 */ 0xC00,
/* 39 */ 0xC00,
/* 38 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_38_20),
/* 39 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_39_20),
/* 40 */ 0,
/* 41 */ 0xC0,
/* 41 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_41_08),
/* 42 */ 0,
/* 43 */ 0,
/* 44 */ 0,
@ -88,50 +135,111 @@ u16 D_801C66D0[ARRAY_COUNT(gSaveContext.save.saveInfo.weekEventReg)] = {
/* 47 */ 0,
/* 48 */ 0,
/* 49 */ 0,
/* 50 */ 0x3C,
/* 51 */ 0x20,
/* 50 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_50_02) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_50_04),
/* 51 */ PERSISTENT_WEEKEVENTREG_ALT(WEEKEVENTREG_51_04),
/* 52 */ 0,
/* 53 */ 0x300C,
/* 54 */ 0x3000,
/* 53 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_53_02) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_53_40),
/* 54 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_54_40),
/* 55 */ 0,
/* 56 */ 0xC,
/* 57 */ 0xC0,
/* 56 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_56_02),
/* 57 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_57_08),
/* 58 */ 0,
/* 59 */ 0xFF0,
/* 60 */ 0x300,
/* 59 */
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_59_04) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_59_08) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_59_10) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_59_20),
/* 60 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_60_10),
/* 61 */ 0,
/* 62 */ 0,
/* 63 */ 0xC00,
/* 63 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_63_20),
/* 64 */ 0,
/* 65 */ 0,
/* 66 */ 0xFFFF,
/* 67 */ 0xFFFF,
/* 68 */ 0xFFFF,
/* 69 */ 0xFFFF,
/* 70 */ 0xFFFF,
/* 71 */ 0xFFFF,
/* 72 */ 0xFFFF,
/* 73 */ 0xC0,
/* 66 */
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ANJU) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_KAFEI) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_CURIOSITY_SHOP_MAN) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_BOMB_SHOP_LADY) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ROMANI) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_CREMIA) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_MAYOR_DOTOUR) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_MADAME_AROMA),
/* 67 */
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_TOTO) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GORMAN) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_POSTMAN) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ROSA_SISTERS) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_TOILET_HAND) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ANJUS_GRANDMOTHER) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_KAMARO) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GROG),
/* 68 */
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_SHIRO) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GURU_GURU) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_BOMBERS) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROOM_KEY) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_PROMISED_MIDNIGHT_MEETING) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_PROMISED_TO_MEET_KAFEI) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_LETTER_TO_KAFEI),
/* 69 */
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DEPOSITED_LETTER_TO_KAFEI) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_PENDANT_OF_MEMORIES) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DELIVERED_PENDANT_OF_MEMORIES) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_ESCAPED_SAKONS_HIDEOUT) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_PROMISED_TO_HELP_WITH_THEM) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DEFENDED_AGAINST_THEM) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_MILK_BOTTLE) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_ESCORTED_CREMIA),
/* 70 */
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROMANIS_MASK) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_KEATON_MASK) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_PRIORITY_MAIL) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_DELIVERED_PRIORITY_MAIL) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_LEARNED_SECRET_CODE) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BOMBERS_NOTEBOOK) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_MAYOR_HP) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ROSA_SISTERS_HP),
/* 71 */
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_TOILET_HAND_HP) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_GRANDMA_SHORT_STORY_HP) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_GRANDMA_LONG_STORY_HP) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_POSTMAN_HP) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAFEIS_MASK) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_ALL_NIGHT_MASK) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BUNNY_HOOD) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_GAROS_MASK),
/* 72 */
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_CIRCUS_LEADERS_MASK) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_POSTMANS_HAT) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_COUPLES_MASK) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BLAST_MASK) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_KAMAROS_MASK) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_STONE_MASK) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_RECEIVED_BREMEN_MASK) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_72_80),
/* 73 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_73_08),
/* 74 */ 0,
/* 75 */ 0xC000,
/* 75 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_75_80),
/* 76 */ 0,
/* 77 */ 3,
/* 77 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_77_01),
/* 78 */ 0,
/* 79 */ 0xC000,
/* 79 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_79_80),
/* 80 */ 0,
/* 81 */ 0xC0,
/* 82 */ 0x300,
/* 81 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_81_08),
/* 82 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_82_10),
/* 83 */ 0,
/* 84 */ 0,
/* 85 */ 0,
/* 86 */ 0xC000,
/* 87 */ 0xFFF0,
/* 86 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_86_80),
/* 87 */
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_87_04) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_87_08) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_87_10) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_87_20) |
PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_87_40) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_87_80),
/* 88 */ 0,
/* 89 */ 0,
/* 90 */ 0x300,
/* 90 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_90_10),
/* 91 */ 0,
/* 92 */ 0xC000,
/* 93 */ 0xF0,
/* 92 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_92_80),
/* 93 */ PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_93_04) | PERSISTENT_WEEKEVENTREG(WEEKEVENTREG_93_08),
/* 94 */ 0,
/* 95 */ 0,
/* 96 */ 0,
@ -266,7 +374,10 @@ s32 gFlashSaveSizes[] = {
offsetof(SaveContext, fileNum), // size = 0x3CA0 - File 2 Owl Save Backup
};
u8 D_801C6890[8] = { 1 << 0, 1 << 1, 1 << 2, 1 << 3, 1 << 4, 1 << 5, 1 << 6, 1 << 7 };
// Bit Flag array in which sBitFlags8[n] is (1 << n)
u8 sBitFlags8[] = {
(1 << 0), (1 << 1), (1 << 2), (1 << 3), (1 << 4), (1 << 5), (1 << 6), (1 << 7),
};
u16 D_801F6AF0;
u8 D_801F6AF2;
@ -326,21 +437,21 @@ void Sram_SaveEndOfCycle(PlayState* play) {
sceneId = Play_GetOriginalSceneId(play->sceneId);
Play_SaveCycleSceneFlags(&play->state);
play->actorCtx.sceneFlags.chest &= sPersistentCycleFlags[sceneId].chest;
play->actorCtx.sceneFlags.switches[0] &= sPersistentCycleFlags[sceneId].switch0;
play->actorCtx.sceneFlags.switches[1] &= sPersistentCycleFlags[sceneId].switch1;
play->actorCtx.sceneFlags.collectible[0] &= sPersistentCycleFlags[sceneId].collectible;
play->actorCtx.sceneFlags.chest &= sPersistentCycleSceneFlags[sceneId].chest;
play->actorCtx.sceneFlags.switches[0] &= sPersistentCycleSceneFlags[sceneId].switch0;
play->actorCtx.sceneFlags.switches[1] &= sPersistentCycleSceneFlags[sceneId].switch1;
play->actorCtx.sceneFlags.collectible[0] &= sPersistentCycleSceneFlags[sceneId].collectible;
play->actorCtx.sceneFlags.clearedRoom = 0;
for (i = 0; i < SCENE_MAX; i++) {
gSaveContext.cycleSceneFlags[i].switch0 =
((void)0, gSaveContext.cycleSceneFlags[i].switch0) & sPersistentCycleFlags[i].switch0;
((void)0, gSaveContext.cycleSceneFlags[i].switch0) & sPersistentCycleSceneFlags[i].switch0;
gSaveContext.cycleSceneFlags[i].switch1 =
((void)0, gSaveContext.cycleSceneFlags[i].switch1) & sPersistentCycleFlags[i].switch1;
((void)0, gSaveContext.cycleSceneFlags[i].switch1) & sPersistentCycleSceneFlags[i].switch1;
gSaveContext.cycleSceneFlags[i].chest =
((void)0, gSaveContext.cycleSceneFlags[i].chest) & sPersistentCycleFlags[i].chest;
((void)0, gSaveContext.cycleSceneFlags[i].chest) & sPersistentCycleSceneFlags[i].chest;
gSaveContext.cycleSceneFlags[i].collectible =
((void)0, gSaveContext.cycleSceneFlags[i].collectible) & sPersistentCycleFlags[i].collectible;
((void)0, gSaveContext.cycleSceneFlags[i].collectible) & sPersistentCycleSceneFlags[i].collectible;
gSaveContext.cycleSceneFlags[i].clearedRoom = 0;
gSaveContext.save.saveInfo.permanentSceneFlags[i].unk_14 = 0;
gSaveContext.save.saveInfo.permanentSceneFlags[i].rooms = 0;
@ -362,15 +473,15 @@ void Sram_SaveEndOfCycle(PlayState* play) {
Inventory_DeleteItem(ITEM_MASK_FIERCE_DEITY, SLOT(ITEM_MASK_FIERCE_DEITY));
}
for (i = 0; i < ARRAY_COUNT(D_801C66D0); i++) {
u16 phi_v1_3 = D_801C66D0[i];
for (i = 0; i < ARRAY_COUNT(sPersistentCycleWeekEventRegs); i++) {
u16 isPersistentBits = sPersistentCycleWeekEventRegs[i];
for (j = 0; j < ARRAY_COUNT(D_801C6890); j++) {
if ((phi_v1_3 & 3) == 0) {
for (j = 0; j < ARRAY_COUNT(sBitFlags8); j++) {
if (!(isPersistentBits & 3)) {
gSaveContext.save.saveInfo.weekEventReg[i] =
((void)0, gSaveContext.save.saveInfo.weekEventReg[i]) & (0xFF ^ D_801C6890[j]);
((void)0, gSaveContext.save.saveInfo.weekEventReg[i]) & (0xFF ^ sBitFlags8[j]);
}
phi_v1_3 >>= 2;
isPersistentBits >>= 2;
}
}

View File

@ -1925,8 +1925,8 @@
0x801C5EB0:("D_801C5EB0","UNK_TYPE4","",0x4),
0x801C5EC4:("D_801C5EC4","UNK_TYPE2","",0x2),
0x801C5F44:("D_801C5F44","UNK_TYPE4","",0x4),
0x801C5FC0:("sPersistentCycleFlags","u32","[452]",0x710),
0x801C66D0:("D_801C66D0","UNK_TYPE2","",0x2),
0x801C5FC0:("sPersistentCycleSceneFlags","u32","[452]",0x710),
0x801C66D0:("sPersistentCycleWeekEventRegs","UNK_TYPE2","",0x2),
0x801C6798:("gSramSlotOffsets","UNK_TYPE4","",0x4),
0x801C67B0:("gAmmoItems","UNK_TYPE1","",0x1),
0x801C67C8:("gFlashSaveStartPages","s32","[10]",0x28),