//--------------------------------------
//--- 010 Editor v8.0 Binary Template
//
// File: rf4s.sav / rf4_sys.sav
// Author: HenryEx
// Revision: 2020-09-22
// Purpose: Display and edit the save selection /
// system settings file in Rune Factory 4
//--------------------------------------
//-----------------------------------
// Define enums
typedef enum <ubyte> {
EASY,
NORMAL = 64,
HARD = 128
} DIFF;
// this is a simple bitflag, but classed as 4byte for padding shenanigans
typedef enum <ulong> {
Male,
Female
} GENDER;
// ItemID, 2 bytes but defined as 4 for bitfield shenanigans
typedef enum <ulong> {
Cabbage = 1,
KingCabbage,
PinkTurnip,
ColossalPink,
PinkMelon,
ConquerorMelon,
Onion,
UltraOnion,
Pumpkin,
DoomPumpkin,
Cucumber,
KaiserCucumber,
Corn,
GigantCorn,
Tomato,
TitanTomato,
Eggplant,
EmperorEggplant,
Yam,
LordlyYam,
Potato,
PrincelyPotato,
Carrot,
RoyalCarrot,
GreenPepper,
GreenPepperRex,
Spinach,
SovereignSpinach,
Turnip,
TyrantTurnip,
Radish,
NobleRadish,
Leek,
LegendaryLeek,
BokChoy,
BossBokChoy,
HotHotFruit,
GiantHotHotFruit,
BambooSprout,
GoldenCabbage,
GoldenKingCabbage,
GoldenPumpkin,
GldnDoomPumpkin,
GoldenPotato,
GoldPrincePotato,
GoldenTurnip,
GoldenTyrantTurnip,
MushroomA,
MushroomB,
MushroomC,
MushroomD,
MushroomE,
Mushroom,
MonarchMushroom,
Strawberry,
SultanStrawberry,
Pineapple,
KingPineapple,
Grapes,
Apple,
Orange,
MealyApple,
Toyherb,
UltraToyherb,
MoondropFlower,
UltraMoondropFlower,
PinkCat,
KingPinkCat,
CharmBlue,
GreatCharmBlue,
MedicinalHerb,
AntidoteGrass,
BlackGrass,
OrangeGrass,
RedGrass,
YellowGrass,
BlueGrass,
GreenGrass,
PurpleGrass,
IndigoGrass,
WhiteGrass,
Weeds,
WitheredGrass,
CherryGrass,
KingCherryGrass,
LampGrass,
KaiserLampGrass,
BlueCrystal,
BigBlueCrystal,
EmeryFlower,
GreatEmeryFlower,
Ironleaf,
SuperIronleaf,
FourLeafClover,
Great4LeafClover,
Fireflower,
BigFireflower,
GreenCrystal,
BigGreenCrystal,
NoelGrass,
LargeNoelGrass,
AutumnGrass,
BigAutumnGrass,
PomPomGrass,
KingPomPomGrass,
RedCrystal,
BigRedCrystal,
WhiteCrystal,
BigWhiteCrystal,
AyngondaiaLawn,
TheProtein,
Intelligencer,
VitalGummi,
HeartDrink,
AntidotePotion,
ParaGone,
Roundoff,
ColdMedicine,
Formuade,
LovePotion,
Invinciroid,
Leveliser,
HeavySpice,
SweetPowder,
SourDrop,
MixedHerbs,
RecoveryPotion,
HealingPotion,
MysteryPotion,
MagicalPotion,
ObjectX,
FailedDish,
DisastrousDish,
TroutSashimi,
CharSashimi,
RainbowSashimi,
SalmonSashimi,
CherrySashimi,
TaimenSashimi,
SnapperSashimi,
GlitterSashimi,
LoverSashimi,
GirellaSashimi,
SkipjackSashimi,
YellowtailSashimi,
TunaSashimi,
SardineSashimi,
NeedlefishSashimi,
PikeSashimi,
FlounderSashimi,
TurbotSashimi,
FallSashimi,
SquidSashimi,
SunsquidSashimi,
LampSquidSashimi,
BlowfishSashimi,
LobsterSashimi,
ShrimpSashimi,
FriedVeggies,
FriedRice,
CabbageCakes,
FrenchFries,
Croquettes,
Popcorn,
CornCereal,
MisoEggplant,
FriedEggs,
Omelet,
OmeletRice,
BakedApple,
CurryBread,
FrenchToast,
Donut,
FriedUdon,
Tempura,
Pancakes,
Gyoza,
Risotto,
DryCurry,
SaltedMasuTrout,
SaltedChar,
SaltedRTrout,
SaltedCSalmon,
SaltedChub,
SaltedSalmon,
SaltedTaimen,
GrilledCCarp,
GrilledGibelio,
GrilledSnapper,
GrilledGirella,
GrilledGSnapper,
GrilledLSnapper,
GrilledSkipjack,
GrilledMackerel,
GrilledYellowtail,
SaltedPondSmelt,
TunaTeriyaki,
DriedSardines,
GrilledNeedlefish,
SaltedPike,
GrilledFlounder,
GrilledTurbot,
GrilledFFlounder,
GrilledSquid,
GrilledSunsquid,
GrilledLampSquid,
GrilledBlowfish,
GrilledLobster,
GrilledShrimp,
GrilledSFlounder,
HotMilk,
HotChocolate,
GrapeLiqueur,
BoiledPumpkin,
BoiledSpinach,
BoiledEgg,
GlazedYam,
BoiledGyoza,
StrawberryJam,
AppleJam,
GrapeJam,
Marmalade,
CheeseFondue,
Udon,
CurryUdon,
TempuraUdon,
RicePorridge,
MilkPorridge,
TempuraBowl,
EggBowl,
Stew,
CurryRice,
UltimateCurry,
RoyalCurry,
RelaxTea,
GrilledMiso,
UnionStew,
RockfishStew,
CornontheCob,
BakedOnigiri,
SweetPotato,
Toast,
JamRoll,
ButterRoll,
Pizza,
SeafoodPizza,
Doria,
SeafoodDoria,
Gratin,
SeafoodGratin,
YamoftheAges,
Cookie,
ChocoCookie,
Cake,
ChocolateCake,
Cheesecake,
ApplePie,
PineappleJuice,
TomatoJuice,
GrapeJuice,
OrangeJuice,
AppleJuice,
StrawberryMilk,
FruitJuice,
FruitSmoothie,
VegetableJuice,
VeggieSmoothie,
MixedJuice,
MixedSmoothie,
Ketchup,
Butter,
GoldJuice,
PreludetoLove,
HotJuice,
SteamedBread,
CheeseBread,
MeatDumpling,
ChineseManju,
CurryManju,
SteamedGyoza,
PoundCake,
ChocolateSponge,
Flan,
PumpkinFlan,
Dumplings,
Salad,
Sandwich,
FruitSandwich,
PickledTurnip,
Pickles,
BambooRice,
RaisinBread,
IceCream,
RelaxTeaLeaves,
Onigiri,
Bread,
SalmonOnigiri,
PickleMix,
TurnipHeaven,
Rice,
Chocolate,
Wine,
ElliLeaves,
Milk_S,
Milk_M,
Milk_L,
Egg_S,
Egg_M,
Egg_L,
Mayonnaise,
Cheese,
Yogurt,
Honey,
Flour,
Oil,
CurryPowder,
RiceFlour,
MedicineBread,
MedicineBreadPlus,
CookingBread,
CookingBreadPlus,
WeaponBread,
WeaponBreadPlus,
AccessoryBread,
AccessoryBreadPlus,
FarmingBread,
FarmingBreadPlus,
Broadsword,
SteelSword,
WindSword,
AquaSword,
Defender,
AerialBlade,
BurningSword,
Sakura,
LuckBlade,
PlatinumSword,
Raventine,
Icifier,
SoulEater,
SmashBlade,
DragonSlayer,
Sunspot,
StarSaber,
GaiaSword,
Grantale,
ChaosBlade,
RuneBlade,
SteelSwordPlus,
PlatinumSwordPlus,
Cutlass,
BackScratcher,
Durendal,
Gladius,
GorgeousSword,
Spoon,
RuneLegend,
Snakesword,
Veggieblade,
Invisiblade,
PlantSword,
Claymore,
Zweihaender,
FlameSaber,
CycloneBlade,
DancingDicer,
GreatSword,
HeavenAsunder,
GrandSmasher,
BlueEyedBlade,
PoisonBlade,
SteelSlicer,
Flamberge,
ShineBlade,
EarthShade,
BioSmasher,
Punisher,
SeaCutter,
Volcanon,
SnowCrown,
MoonShadow,
ForceElement,
ZweihaenderPlus,
FlambergePlus,
Katzbalger,
BigKnife,
Katana,
Balmung,
Psycho,
Dekash,
Braveheart,
Belzebuth,
Daicone,
Caliburn,
Orochi,
Spear,
Lance,
NeedleSpear,
Halberd,
WaterSpear,
BloodLance,
WoodStaff,
PoisonSpear,
Corsesca,
SilentGrave,
FlareLance,
HeavyLance,
Iceberg,
Metus,
MonkStaff,
Overbreak,
Brionac,
FeatherLance,
Belvarose,
Bjor,
Gungnir,
LancePlus,
CorsescaPlus,
Trident,
Pitchfork,
DragonsFang,
GaeBolg,
MagicalLance,
SafetyLance,
Legion,
PoisonQueen,
PineClub,
Fivestaff,
BattleHammer,
WarHammer,
GreatHammer,
Schnabel,
GigantHammer,
Mjolnir,
SpikedHammer,
FlameHammer,
IceHammer,
SkyHammer,
GravitonHammer,
BoneHammer,
CrystalHammer,
WarHammerPlus,
GigantHammerPlus,
Hammer,
ToyHammer,
FatalCrush,
StrongStone,
Kongo,
Bat,
IronBat,
SplashStar,
BattleAxe,
PoleAxe,
Alldale,
GreatAxe,
DemonAxe,
CrescentAxe,
Executioner,
HeatAxe,
FrostAxe,
Tomahawk,
RockAxe,
DoubleEdge,
SaintAxe,
PoleAxePlus,
CrescentAxePlus,
Axe,
Lollipop,
BattleScythe,
BasiliskFang,
DevilFinger,
Rod,
Staff,
SilverStaff,
FlareStaff,
IceStaff,
LightningWand,
EarthStaff,
WizardsStaff,
MagesStaff,
RuneStaff,
MagesStaffPlus,
MagicBroom,
Basket,
MagicShot,
HellBranch,
CrimsonStaff,
BubbleStaff,
GaiaRod,
ShootingStarStaff,
CycloneRod,
StormWand,
RubyRod,
EmeraldRod,
SapphireRod,
AmethystRod,
AquamarineRod,
DiamondRod,
FriendlyRod,
LoveLoveRod,
SorcerersWand,
HellCurse,
Algernon,
GoldenTurnipStaff,
SweetPotatoStaff,
ElvishHarp,
Syringe,
ShortDagger,
SteelEdge,
WindEdge,
FrostEdge,
SteelKatana,
SonicDagger,
Salamander,
TwinBlade,
Rampage,
PlatinumEdge,
Efreet,
DeepBlizzard,
DarkInvitation,
ForceDivide,
DragoonClaw,
HeartFire,
DesertWind,
BrokenWall,
OrcusSword,
ChaosEdge,
RuneEdge,
IronEdge,
EmeraldEdge,
ThiefKnife,
DoubleScratch,
PriestSaber,
EarnestEdge,
GorgeousLx,
Acutorimass,
TwinLeeks,
TwinJustice,
LeatherGloves,
BrassKnuckles,
Kote,
BearClaws,
FistsofFire,
FistsofWater,
FistsofWind,
FistsoftheEarth,
FistsofLight,
FistsofDark,
Gloves_A,
CatPunch,
DragonClaws,
AnimalPuppets,
IronleafFists,
GolemPunch,
HandofGod,
Caestus,
BazalKatar,
Fenrir,
CheapHoe,
SturdyHoe,
SeasonedHoe,
ShinyHoe,
BlessedHoe,
CheapWaterpot,
TinWaterpot,
LionWaterpot,
RainbowWaterpot,
JoyWaterpot,
CheapSickle,
IronSickle,
QualitySickle,
SuperSickle,
LegendarySickle,
CheapHammer,
IronHammer,
SilverHammer,
GoldenHammer,
PlatinumHammer,
CheapAxe,
ChoppingAxe,
LumberAxe,
MountainAxe,
MiracleAxe,
CheapPole,
BeginnersPole,
SkilledPole,
FamousPole,
SacredPole,
SmallShield,
IronShield,
RoundShield,
PlatinumShield,
HeavyShield,
KnightShield,
RuneShield,
MagicShield,
PrismShield,
ElementShield,
ChaosShield,
TurtleShield,
BoneShield,
KiteShield,
MagicalShield,
MonkeyPlush,
Umbrella,
MagicPlantShield,
AquamarineRing,
AmethystRing,
EmeraldRing,
SapphireRing,
DiamondRing,
RubyRing,
HappyRing,
CursedRing,
FireRing,
WindRing,
WaterRing,
EarthRing,
SilverRing,
GoldRing,
PlatinumRing,
CriticalRing,
SilentRing,
ParalysisRing,
PoisonRing,
MagicRing,
CheapBracelet,
BronzeBracelet,
SilverBracelet,
GoldBracelet,
PlatinumBracelet,
AquamarineBrooch,
AmethystBrooch,
EmeraldBrooch,
SapphireBrooch,
DiamondBrooch,
RubyBrooch,
SilverPendant,
HeartPendant,
StarPendant,
SunPendant,
FieldPendant,
DewPendant,
EarthPendant,
HolyAmulet,
Charm,
LeatherBelt,
LuckyStrike,
Talisman,
ChampBelt,
Gloves_B,
WorkGloves,
Badge,
PowerGloves,
MagicCharm,
ShieldRing,
Rosary,
CourageBadge,
HerosProof,
ProofofWisdom,
HandKnitScarf,
FluffyScarf,
ArtofAttack,
ArtofDefense,
ArtofMagic,
Earrings,
WitchEarrings,
MagicEarrings,
VentisCharmA,
VentisCharmB,
AnettesNecklace,
ThrowingRing,
StayUpRing,
StrangePendant,
DolphinBrooch,
EngagementRing,
SilverHairpin,
GoldHairpin,
FancyHat,
Headband,
FeatheredHat,
BrandGlasses,
Spectacles,
IntelligentGlasses,
StrawHat,
FireproofHood,
CuteKnitting,
BlackRibbon,
OrangeRibbon,
RedRibbon,
YellowRibbon,
BlueRibbon,
GreenRibbon,
PurpleRibbon,
IndigoRibbon,
WhiteRibbon,
TurnipHeadgear,
PumpkinHeadgear,
SpringHeaddress,
SummerHeaddress,
AutumnHeaddress,
WinterHeaddress,
LolitaHeaddress,
Headdress,
CatEars,
Crown,
FourSeasons,
SilkHat,
FeatherBoots,
HeavyBoots,
LeatherBoots,
KnightBoots,
SnowBoots,
IceSkates,
PiyoSandals,
StepInBoots,
GhostBoots,
IronGeta,
StriderBoots,
SecretShoes,
WetBoots,
SneakingBoots,
FastStepBoots,
WaterShoes,
RocketWing,
SilverBoots,
GoldBoots,
BoneBoots,
FairyBoots,
FreeFarmingShoes,
Shirt,
Vest,
WoolyShirt,
MercenarysCloak,
Mail,
CottonCloth,
ChainMail,
ScaleVest,
Protector,
WindCloak,
SparklingShirt,
PlatinumMail,
LamellarVest,
ElvishCloak,
PowerProtector,
DragonCloak,
RuneVest,
RoyalGarter,
FourDragonsVest,
Brush,
Clippers,
MagnifyingGlass,
TurnipSeeds,
PotatoSeeds,
CucumberSeeds,
StrawberrySeeds,
CabbageSeeds,
MoondropSeeds,
ToyherbSeeds,
TomatoSeeds,
CornSeeds,
OnionSeeds,
PumpkinSeeds,
PineappleSeeds,
PinkCatSeeds,
EggplantSeeds,
CarrotSeeds,
YamSeeds,
SpinachSeeds,
GreenPepperSeeds,
CharmBlueSeeds,
FodderSeeds,
CherryGrassSeeds,
LampGrassSeeds,
BlueCrystalSeeds,
EmeryFlowerSeeds,
IronleafSeeds,
CloverSeeds,
FireflowerSeeds,
GreenCrystalSeeds,
NoelGrassSeeds,
AutumnGrassSeeds,
PomPomGrassSeeds,
RedCrystalSeeds,
WhiteCrystalSeeds,
PinkTurnipSeeds,
RadishSeeds,
LeekSeeds,
BokChoySeeds,
GoldCabbageSeeds,
GoldPumpkinSeeds,
GoldPotatoSeeds,
GoldTurnipSeeds,
GoldMelonSeeds,
HotHotSeeds,
AppleTreeSeeds,
OrangeTreeSeed,
GrapeTreeSeed,
ShiningSeed,
DungeonSeed,
SwordSeed,
ShieldSeed,
WettablePowder,
Greenifier,
GreenifierPlus,
FormulaA,
FormulaB,
FormulaC,
NoRotAlpha,
NoRotBeta,
Giantizer,
Minimizer,
Fodder,
Fur_S,
Fur_M,
Fur_L,
Yarn,
ScrapMetal,
Iron,
Bronze,
Silver,
Gold,
Platinum,
Orichalcum,
Diamond,
Ruby,
Emerald,
Sapphire,
Amethyst,
Aquamarine,
CheapCloth,
QualityCloth,
SilkCloth,
Arrowhead,
WarriorsProof,
Glue,
OldBandage,
Gunpowder,
EarthCrystal,
DevilHorn,
DevilBlood,
MagicPowder,
MagicCrystal,
ShoulderPiece,
GiantsNail,
GiantsGloves,
HammerPiece,
InsectCarapace,
InsectJaw,
SpidersThread,
PrettyThread,
PrettyCarapace,
RigidHorn,
ScorpionTail,
ScorpionPincer,
PantherClaw,
DragonFang,
WolfFang,
QualityFur,
BullsHorn,
BirdsFeather,
WindCrystal,
Fur,
Root,
Spore,
PoisonPowder,
PlantStem,
StrongVine,
FishFossil,
WaterCrystal,
TurtleShell,
FireCrystal,
GhostHood,
Skull,
BrokenHilt,
BrokenBox,
FairyDust,
SmallCrystal,
WoolyFurball,
LightCrystal,
DarkCrystal,
LoveCrystal,
RaccoonLeaf,
DragonBones,
RedLionFur,
BlueLionFur,
BrokenIceWall,
Ammonite,
IcyNose,
ChestHair,
ChimeraTail,
GrimoireScale,
LegendaryScale,
DragonFin,
MovingBranch,
ElectroCrystal,
MelodyBottle,
GolemTablet,
EarthwyrmScale,
FirewyrmScale,
AmbrosiasThorns,
LightningMane,
CursedDoll,
PuppetryStrings,
LeftRockShard,
RightRockShard,
CrystalSkull,
ThroneoftheEmpire,
WindDragonTooth,
RuneSphereShard,
RafflesiaPetal,
MTGUPlate,
CheapPropeller,
QualityPropeller,
RustyScrew,
ShinyScrew,
PalmClaw,
MalmClaw,
BigCrystal,
RuneCrystal,
GreenCore,
RedCore,
YellowCore,
BlueCore,
WaterDragonAsh,
FireDragonAsh,
EarthDragonAsh,
HolySpore,
WhiteStone,
InvisibleStone,
ShadeStone,
DoubleSteel,
TenFoldSteel,
RoundStone,
GlittaAugite,
LightOre,
ScrapMetalPlus,
Stick,
QualityPuffyFur,
YellowDown,
PenguinDown,
IvoryTusk,
UnbrokenIvoryTusk,
TinyGolemStone,
ParalysisPoison,
BlackBirdFeather,
Vine,
InsectHorn,
MysteriousPowder,
WetScale,
Magic,
GoldWolfFang,
BlueGiantsGlove,
ThickStick,
MagicClaw,
GlisteningBlade,
FairyElixir,
GreatHammerShard,
GolemStone,
BlackTortoiseShell,
ThunderbirdFeather,
BigGiantsNail,
YellowFeather,
QualityWornCloth,
PiratesArmor,
BladeShard,
ProofofRank,
TurnipsMiracle,
DragonScale,
GolemSpiritStone,
AncientOrcCloth,
QueensJaw,
PoisonKing,
DangerousScissors,
ChimerasClaw,
TabletofTruth,
BigBirdsComb,
BattleTurnip,
BlackScale,
BlueScale,
GlitterScale,
CrimsonScale,
LoveScale,
DragonicStone,
MasuTrout,
Squid,
Taimen,
Sardine,
Char,
Chub,
GlitterSnapper,
Skipjack,
Turbot,
Gibelio,
Salmon,
Mackerel,
Needlefish,
Pike,
Sunsquid,
Shrimp,
Snapper,
ThrobbySnapper,
RainbowTrout,
Flounder,
Blowfish,
Yellowtail,
CrucianCarp,
Tuna,
Girella,
FallFlounder,
CherrySalmon,
LampSquid,
Lobster,
PondSmelt,
SandFlounder,
Rockfish,
Can,
Boot,
RareCan,
Rock,
Branch,
Lumber,
MaterialStone,
Escape_S,
Fireball_S,
BigFire_S,
Explosion_S,
WaterLaser_S,
ParallelLaser_S,
DeltaLaser_S,
ScrewRock_S,
EarthSpike_S,
AvengerRock_S,
SonicWind_S,
DoubleSonic_S,
PenetrateSonic_S,
LightBarrier_S,
Shine_S,
Prism_S,
DarkBall_S,
DarkSnake_S,
Darkness_S,
Cure_S,
CureAll_S,
MasterCure_S,
Medipoison_S,
Mediparalyze_S,
Mediseal_S,
GreetingSpell_S,
PowerWave_S,
DashSlash_S,
RushAttack_S,
RoundBreak_S,
MindThrust_S,
Gust_S,
Storm_S,
Blitz_S,
TwinAttack_S,
RailStrike_S,
WindSlash_S,
FlashStrike_S,
NaiveBlade_S,
SteelHeart_S,
DeltaStrike_S,
Hurricane_S,
ReaperSlash_S,
Millionstrike_S,
AxelDisaster_S,
StardustUpper_S,
TornadoSwing_S,
GrandImpact_S,
GigaSwing_S,
UpperCut_S,
DoubleKick_S,
StraightPunch_S,
NekoDamashi_S,
RushPunch_S,
Cyclone_S,
RapidMove_S,
BonusConcerto_S,
StrikingMarch_S,
IronWaltz_S,
Minerals,
Liquids,
ClawsandFangs,
SticksandStems,
ClothsandSkins,
Furs,
Strings,
Shards,
PowdersandSpores,
Scales,
ShellsandBones,
Stones,
Turnip_B,
Crystals,
Jewels,
Feathers,
Jam,
Curry,
Squid_B,
BattleTurnip_B,
GoldBattleTurnip,
Bullet,
GoldenBullet,
CherryTurnip,
DisgustingFood
} ITEMID;
typedef enum <ubyte> {
Spring,
Summer,
Fall,
Winter
} MONTH;
// 5-bit enum; Traveler_29 to _31 crash (no picture)
typedef enum <ushort> {
None,
Vishnal,
Clorica,
Volkanon,
Forte,
Kiel,
Bado,
Margaret,
Dylas,
Arthur,
Porcoline,
XiaoPai,
LinFa,
Amber,
Illuminata,
Doug,
Blossom,
Dolce,
Jones,
Nancy,
Leon,
Ventuswill,
Son,
Daughter,
Barrett,
Raven,
MistressTrupin,
TravelerM1,
TravelerM2
} PTNR;
//-----------------------------------
// Define aux structures
// Placeholder
typedef struct {
} UNKNWN;
// Character and Farm names
typedef struct {
char charName[19];
char farmName1[25];
char farmName2[25];
char farmName3[25];
char farmName4[25];
char farmName5[25];
} NAMES;
// bitfield for active saves
typedef struct {
ulong slot01 : 1;
ulong slot02 : 1;
ulong slot03 : 1;
ulong slot04 : 1;
ulong slot05 : 1;
ulong slot06 : 1;
ulong slot07 : 1;
ulong slot08 : 1;
ulong slot09 : 1;
ulong slot10 : 1;
ulong slot11 : 1;
ulong slot12 : 1;
ulong slot13 : 1;
ulong slot14 : 1;
ulong slot15 : 1;
ulong slot16 : 1;
ulong slot17 : 1;
ulong slot18 : 1;
ulong slot19 : 1;
ulong slot20 : 1;
} SLOTB;
//-----------------------------------
// Define main structures for 3DS
typedef struct {
char magic[4];
uint CRC32<format=hex>;
struct {
ubyte slot1 : 1;
ubyte slot2 : 1;
ubyte slot3 : 1;
ubyte : 5;
} activeSaveSlots;
ubyte loadPos : 4 <comment="Cursor position, slots 0 - 2">;
ubyte extraOrders : 4;
} HEADER <size=28>;
typedef struct {
ubyte timeMinute;
ubyte timeHour;
ubyte currentDay;
MONTH currentMonth;
short currentYear;
DIFF difficulty;
ubyte costume;
ushort level <comment="In-game Level - 1">;
ushort location : 10;
PTNR partner : 5;
ushort UnknownB : 1;
GENDER gender : 1;
ITEMID headGear : 11;
ITEMID mainHand : 10;
ITEMID offHand : 10;
NAMES names;
} SLOT <name=ReadSaveChar, read=ReadSaveInfo, size=160>;
//-----------------------------------
// Define main structures for Switch
typedef struct {
char magic[4];
uint CRC32<format=hex>;
SLOTB activeSaveSlots;
SLOTB activeSaveSlotsNW <comment="for Newlywed Mode">;
struct {
ubyte gameCleared : 1 <comment="Unlocks Extra Orders and can change select screen character appearance">;
ubyte extraOrdersA : 1 <comment="EO 'Unlock all newlywed modes' (needs ExtraOrdersB active)">;
ubyte : 2;
ubyte extraOrdersB : 1 <comment="Unlocks EOs for enemy levels and town events">;
ubyte extraOrdersC : 1 <comment="Unlocks EO for inheriting savegames">;
ubyte : 2;
ubyte : 1;
ubyte unlockedAllNewlywed : 1 <comment="Unlocks all Newlywed Modes">;
ubyte japaneseAudio : 1;
ubyte : 5;
ubyte : 8;
ubyte : 8;
} bitflags;
ushort loadPos <comment="Load cursor position, slots 0 - 19">;
ushort loadPosNW <comment="Newlywed Mode load cursor position, slots 0 - 19">;
} SHEADER <size=1264>;
typedef struct {
ubyte timeMinute;
ubyte timeHour;
ubyte currentDay;
MONTH currentMonth;
short currentYear;
DIFF difficulty;
ubyte Unknown;
ubyte costume;
ubyte isSuperHard <comment="Extra flag; Hard + this = Hell">;
ushort UnknownA <format=hex>;
ushort level <comment="In-game Level - 1">;
ushort location : 10;
PTNR partner : 5;
ushort UnknownB : 1;
GENDER gender : 1;
ITEMID headGear : 11;
ITEMID mainHand : 10;
ITEMID offHand : 10;
NAMES names;
} SSLOT <name=ReadSaveCharS, read=ReadSaveInfoS, comment=ReadSaveCommentS, size=164>;
//--------------------------------------------
// Custom functions
// Read and display char names on save slots
string ReadSaveChar( SLOT &sslot )
{
local string s;
s += sslot.names.charName;
if( s != "" ) {
SPrintf( s, "%s, Level %d ", s, sslot.level + 1 );
// if( sslot.partner )
// s = s + "+ " + EnumToString( sslot.partner );
return s;
}
else
return "(none)";
}
// Read and display char names on save slots for Special
string ReadSaveCharS( SSLOT &sslot )
{
local string s;
s += sslot.names.charName;
if( s != "" ) {
SPrintf( s, "%s, Level %d ", s, sslot.level + 1 );
if( sslot.partner )
s = s + "+ " + EnumToString( sslot.partner );
return s;
}
else
return "(none)";
}
// Display save info for Special
string ReadSaveInfoS( SSLOT &sinfo )
{
local string s;
// Put the var value into a buffer string via SPrintf
if ( sinfo.currentDay != 0 )
SPrintf( s, "%02d:%02d, %02d. %s Y%d", sinfo.timeHour, sinfo.timeMinute, sinfo.currentDay, EnumToString( sinfo.currentMonth ), sinfo.currentYear );
return s;
}
// Display save info
string ReadSaveInfo( SLOT &sinfo )
{
local string s;
// Put the var value into a buffer string via SPrintf
if ( sinfo.currentDay != 0 )
SPrintf( s, "%02d:%02d, %02d. %s Y%d", sinfo.timeHour, sinfo.timeMinute, sinfo.currentDay, EnumToString( sinfo.currentMonth ), sinfo.currentYear );
return s;
}
// Display unknown values in comments for quick comparison
string ReadSaveCommentS( SSLOT &sinfo )
{
local string s;
if ( sinfo.currentDay != 0 ) {
s = EnumToString( sinfo.difficulty );
if( (s == "HARD") && sinfo.isSuperHard )
s = "HELL";
SPrintf( s, "%s C%d %d 0x%02X %d", s, sinfo.costume, sinfo.Unknown, sinfo.UnknownA, sinfo.UnknownB );
}
return s;
}
//-----------------------------------
// Define file itself
if (FileSize() == 0x1FC) {
HEADER header;
SLOT Save1;
SLOT Save2;
SLOT Save3;
}
else {
SHEADER header;
SSLOT saves[20];
SSLOT savesNW[20];
}
Comments