You've already forked Diddy-Kong-Racing
mirror of
https://github.com/izzy2lost/Diddy-Kong-Racing.git
synced 2026-03-10 11:36:09 -07:00
* Fix some AVOID_UB stuff, and some small documenting. * Fix m2ctx.py and add NON_EQUIV func_80045C48 * Minor issue cleanups * Clean up audioline_ambient_create match * Match func_80008040 as audioline_init, fix the generate ctx script, and some small warning stuff. * Minor work on func_80008174 so it can be NON_EQUIVALENT again * redefine asm abs * Hackishly fix the ctx file when generated. * Use some more constants and got rid of some start: auto stuff which is not recommended in splat anymore for BSS * Do some documenting, and slightly better matches using JFG source. * Formatting * Clean up some more audio stuff * Further cleanup and naming of things
234 lines
6.8 KiB
C
234 lines
6.8 KiB
C
#ifndef _SAVE_LAYOUT_H_
|
|
#define _SAVE_LAYOUT_H_
|
|
|
|
#include "types.h"
|
|
#include "structs.h"
|
|
#include "macros.h"
|
|
#include "PR/os_cont.h"
|
|
|
|
/**
|
|
* File contains the struct and macro definitions for the save layout for DKR.
|
|
*/
|
|
|
|
#define NUMBER_OF_SAVE_FILES 3
|
|
|
|
#define TT_COURSES \
|
|
unsigned courseAL : 1; \
|
|
unsigned courseFC : 1; \
|
|
unsigned courseJF : 1; \
|
|
unsigned courseHTV : 1; \
|
|
\
|
|
unsigned courseWB : 1; \
|
|
unsigned courseCI : 1; \
|
|
unsigned coursePL : 1; \
|
|
unsigned courseTC : 1; \
|
|
\
|
|
unsigned courseEP : 1; \
|
|
unsigned courseWC : 1; \
|
|
unsigned courseSV : 1; \
|
|
unsigned courseFV : 1; \
|
|
\
|
|
unsigned courseBC : 1; \
|
|
unsigned courseGV : 1; \
|
|
unsigned courseWP : 1; \
|
|
unsigned courseHW : 1; \
|
|
\
|
|
unsigned courseSA : 1; \
|
|
unsigned courseDMC : 1; \
|
|
unsigned courseSC : 1; \
|
|
unsigned courseSPA : 1;
|
|
|
|
#define SAVE_COURSES \
|
|
unsigned courseBluey1 : 2; \
|
|
unsigned courseFossilCanyon : 2; \
|
|
unsigned coursePirateLagoon : 2; \
|
|
unsigned courseAncientLake : 2; \
|
|
unsigned courseWalrusCove : 2; \
|
|
unsigned courseHotTopVolcano : 2; \
|
|
unsigned courseWhaleBay : 2; \
|
|
unsigned courseSnowballValley : 2; \
|
|
unsigned courseCrescentIsland : 2; \
|
|
unsigned courseFireMountain : 2; \
|
|
unsigned courseEverfrostPeak : 2; \
|
|
unsigned courseSpaceportAlpha : 2; \
|
|
unsigned courseSpacedustAlley : 2; \
|
|
unsigned courseGreenwoodVillage : 2; \
|
|
unsigned courseBoulderCanyon : 2; \
|
|
unsigned courseWindmillPlains : 2; \
|
|
unsigned courseSmokeyCastle : 2; \
|
|
unsigned courseDarkwaterBeach : 2; \
|
|
unsigned courseIciclePyramid : 2; \
|
|
unsigned courseFrostyVillage : 2; \
|
|
unsigned courseJungleFalls : 2; \
|
|
unsigned courseTreasureCaves : 2; \
|
|
unsigned courseHauntedWoods : 2; \
|
|
unsigned courseDarkmoonCaverns : 2; \
|
|
unsigned courseStarCity : 2; \
|
|
unsigned courseWizpig1 : 2; \
|
|
unsigned courseTricky1 : 2; \
|
|
unsigned courseBubbler1 : 2; \
|
|
unsigned courseSmokey1 : 2; \
|
|
unsigned courseTricky2 : 2; \
|
|
unsigned courseBluey2 : 2; \
|
|
unsigned courseBubbler2 : 2; \
|
|
unsigned courseSmokey2 : 2; \
|
|
unsigned courseWizpig2 : 2;
|
|
|
|
enum CourseRecordNames {
|
|
COURSE_FC_CAR,
|
|
COURSE_FC_HOVER,
|
|
COURSE_FC_PLANE,
|
|
COURSE_PL_HOVER,
|
|
COURSE_AL_CAR,
|
|
COURSE_AL_HOVER,
|
|
COURSE_AL_PLANE,
|
|
COURSE_WC_CAR,
|
|
COURSE_WC_HOVER,
|
|
COURSE_HTV_HOVER,
|
|
COURSE_HTV_PLANE,
|
|
COURSE_WB_HOVER,
|
|
COURSE_SV_CAR,
|
|
COURSE_SV_HOVER,
|
|
COURSE_CI_CAR,
|
|
COURSE_CI_HOVER,
|
|
COURSE_EP_CAR,
|
|
COURSE_EP_HOVER,
|
|
COURSE_EP_PLANE,
|
|
COURSE_SPA_CAR,
|
|
COURSE_SPA_HOVER,
|
|
COURSE_SPA_PLANE,
|
|
COURSE_SA_CAR,
|
|
COURSE_SA_HOVER,
|
|
COURSE_SA_PLANE,
|
|
COURSE_GV_CAR,
|
|
COURSE_GV_HOVER,
|
|
COURSE_BC_HOVER,
|
|
COURSE_WP_CAR,
|
|
COURSE_WP_HOVER,
|
|
COURSE_WP_PLANE,
|
|
COURSE_FV_CAR,
|
|
COURSE_FV_HOVER,
|
|
COURSE_FV_PLANE,
|
|
COURSE_JF_CAR,
|
|
COURSE_JF_HOVER,
|
|
COURSE_JF_PLANE,
|
|
COURSE_TC_CAR,
|
|
COURSE_TC_HOVER,
|
|
COURSE_TC_PLANE,
|
|
COURSE_HW_CAR,
|
|
COURSE_HW_HOVER,
|
|
COURSE_DMC_CAR,
|
|
COURSE_DMC_HOVER,
|
|
COURSE_SC_CAR,
|
|
COURSE_SC_HOVER,
|
|
COURSE_SC_PLANE,
|
|
|
|
COURSE_RECORD_TOTAL
|
|
};
|
|
|
|
typedef struct SaveConfig {
|
|
unsigned unlockedAdv2 : 1;
|
|
unsigned unlockedDrumstick : 1;
|
|
unsigned language : 2;
|
|
TT_COURSES
|
|
unsigned subtitles : 1;
|
|
unsigned unk0 : 31;
|
|
// unsigned checksum : 8; // For some reason, the struct becomes 12 bytes if this is there.
|
|
} SaveConfig;
|
|
|
|
typedef struct SaveFile {
|
|
unsigned checksum : 16;
|
|
SAVE_COURSES
|
|
unsigned tajFlags : 6;
|
|
|
|
unsigned trophy1 : 2;
|
|
unsigned trophy2 : 2;
|
|
unsigned trophy3 : 2;
|
|
unsigned trophy4 : 2;
|
|
unsigned trophy5 : 2;
|
|
|
|
unsigned bossWizpig1 : 1;
|
|
unsigned bossTricky1 : 1;
|
|
unsigned bossBubbler1 : 1;
|
|
unsigned bossBluey1 : 1;
|
|
unsigned bossSmokey1 : 1;
|
|
unsigned bossWizpig2 : 1;
|
|
unsigned bossTricky2 : 1;
|
|
unsigned bossBubbler2 : 1;
|
|
unsigned bossBluey2 : 1;
|
|
unsigned bossSmokey2 : 1;
|
|
unsigned bossUnused1 : 1;
|
|
unsigned bossUnused2 : 1;
|
|
|
|
unsigned balloonsTotal : 7;
|
|
unsigned balloonsWorld1 : 7; // Dino Domain
|
|
unsigned balloonsWorld2 : 7; // Sherbet Island
|
|
unsigned balloonsWorld3 : 7; // Snowflake Mountain
|
|
unsigned balloonsWorld4 : 7; // Dragon Forest
|
|
unsigned balloonsWorld5 : 7; // Future Fun Land
|
|
|
|
unsigned amuletTT : 3;
|
|
unsigned amuletWizpig : 3;
|
|
|
|
unsigned flagsWorld0 : 16; // Hub, balloons
|
|
unsigned flagsWorld1 : 16; // Dino Domain
|
|
unsigned flagsWorld2 : 16; // Sherbet Island
|
|
unsigned flagsWorld3 : 16; // Snowflake Mountain
|
|
unsigned flagsWorld4 : 16; // Dragon Forest
|
|
unsigned flagsWorld5 : 16; // Future Fun Land
|
|
|
|
unsigned keyWorld0 : 1; // Hub world, unused
|
|
unsigned keyWorld1 : 1; // Dino Domain
|
|
unsigned keyWorld2 : 1; // Snowflake Mountain
|
|
unsigned keyWorld3 : 1; // Sherbet Island
|
|
unsigned keyWorld4 : 1; // Dragon Forest
|
|
unsigned keyWorld5 : 1; // Future Fun Land, unused
|
|
unsigned keyWorld6 : 1; // Unused
|
|
unsigned keyWorld7 : 1; // Unused
|
|
|
|
unsigned sceneLighthouse : 1;
|
|
unsigned sceneTTHelp : 1;
|
|
unsigned sceneAdv2 : 1;
|
|
unsigned sceneWorld1Boss1 : 1;
|
|
unsigned sceneWorld2Boss1 : 1;
|
|
unsigned sceneWorld3Boss1 : 1;
|
|
unsigned sceneWorld4Boss1 : 1;
|
|
unsigned sceneWorld5Boss1 : 1;
|
|
unsigned sceneWorld1Boss2 : 1;
|
|
unsigned sceneWorld2Boss2 : 1;
|
|
unsigned sceneWorld3Boss2 : 1;
|
|
unsigned sceneWorld4Boss2 : 1;
|
|
unsigned sceneWorld5Boss2 : 1;
|
|
unsigned sceneWizpigFace : 1;
|
|
unsigned sceneWorld1Key : 1;
|
|
unsigned sceneWorld2Key : 1;
|
|
unsigned sceneWorld3Key : 1;
|
|
unsigned sceneWorld4Key : 1;
|
|
unsigned sceneWorld5Key : 1; // Unused
|
|
|
|
unsigned name : 15;
|
|
} SaveFile;
|
|
|
|
typedef struct CourseRecords {
|
|
u16 checksum;
|
|
u16 padding;
|
|
u32 courseTime[COURSE_RECORD_TOTAL];
|
|
} CourseRecords;
|
|
|
|
typedef struct SaveBuffer {
|
|
SaveFile gameSave[NUMBER_OF_SAVE_FILES];
|
|
SaveConfig config;
|
|
CourseRecords fastLaps;
|
|
CourseRecords courseTimes;
|
|
} SaveBuffer ALIGNED8;
|
|
|
|
// Eeprom works in 8 byte blocks, so divide by 8 for those functions.
|
|
#define BLOCK_SIZE(x) (x / sizeof(u64))
|
|
#define SAVE_START (0)
|
|
#define CONFIG_START (SAVE_START + (sizeof(SaveFile) * NUMBER_OF_SAVE_FILES))
|
|
#define FASTEST_LAPS_START (CONFIG_START + sizeof(SaveConfig))
|
|
#define COURSE_TIMES_START (FASTEST_LAPS_START + sizeof(CourseRecords))
|
|
#define SAVE_SIZE (sizeof(SaveBuffer))
|
|
|
|
#endif
|