From 962b8dcbe9e61cb86d25cfa321f2c1e99a0bee58 Mon Sep 17 00:00:00 2001 From: "Josh (vector_cmdr)" Date: Tue, 20 Jan 2026 14:37:59 +1100 Subject: [PATCH] Fruit + Flower Improvement Added fruits + flowers to Player Misc menu (kept field goods property manager in place still). Saving fruits pushes change to flags block for fruits so that multiple edits aren't required when changing/saving it with new UpdateFruitFlags method. Flowers added as enum class like Airport Color, but should be moved out to strings for localization later on. --- NHSE.Core/Save/Files/MainSave.cs | 41 ++ NHSE.Core/Save/Offsets/MainSaveOffsets.cs | 5 + NHSE.Core/Save/Offsets/MainSaveOffsets10.cs | 6 + NHSE.Core/Save/Offsets/MainSaveOffsets11.cs | 6 + NHSE.Core/Save/Offsets/MainSaveOffsets110.cs | 6 + NHSE.Core/Save/Offsets/MainSaveOffsets111.cs | 6 + NHSE.Core/Save/Offsets/MainSaveOffsets12.cs | 6 + NHSE.Core/Save/Offsets/MainSaveOffsets13.cs | 6 + NHSE.Core/Save/Offsets/MainSaveOffsets14.cs | 6 + NHSE.Core/Save/Offsets/MainSaveOffsets15.cs | 6 + NHSE.Core/Save/Offsets/MainSaveOffsets16.cs | 6 + NHSE.Core/Save/Offsets/MainSaveOffsets17.cs | 6 + NHSE.Core/Save/Offsets/MainSaveOffsets18.cs | 6 + NHSE.Core/Save/Offsets/MainSaveOffsets19.cs | 6 + NHSE.Core/Save/Offsets/MainSaveOffsets20.cs | 6 + NHSE.Core/Save/Offsets/MainSaveOffsets30.cs | 6 + NHSE.Core/Structures/GameLists.cs | 4 +- NHSE.Core/Structures/Misc/GSaveFg.cs | 2 +- NHSE.Core/Structures/Misc/IslandFlowers.cs | 16 + NHSE.WinForms/Editor.cs | 4 +- .../Player/MiscPlayerEditor.Designer.cs | 367 +++++++++++------- .../Subforms/Player/MiscPlayerEditor.cs | 44 ++- .../Subforms/Player/MiscPlayerEditor.resx | 54 +-- 23 files changed, 439 insertions(+), 182 deletions(-) create mode 100644 NHSE.Core/Structures/Misc/IslandFlowers.cs diff --git a/NHSE.Core/Save/Files/MainSave.cs b/NHSE.Core/Save/Files/MainSave.cs index 2d765cf..a2b63c7 100644 --- a/NHSE.Core/Save/Files/MainSave.cs +++ b/NHSE.Core/Save/Files/MainSave.cs @@ -244,6 +244,47 @@ public GSaveFg SaveFg set => value.ToBytesClass().CopyTo(Data[Offsets.SaveFg..]); } + public ushort SpecialtyFruit + { + get => ReadUInt16LittleEndian(Data[Offsets.SpecialtyFruit..]); + set => WriteUInt16LittleEndian(Data[Offsets.SpecialtyFruit..], value); + } + public ushort SisterFruit + { + get => ReadUInt16LittleEndian(Data[Offsets.SisterFruit..]); + set => WriteUInt16LittleEndian(Data[Offsets.SisterFruit..], value); + } + public IslandFlowers SpecialtyFlower { get => (IslandFlowers)Data[Offsets.SpecialtyFlower]; set => Data[Offsets.SpecialtyFlower] = (byte)value; } + public IslandFlowers SisterFlower { get => (IslandFlowers)Data[Offsets.SisterFlower]; set => Data[Offsets.SisterFlower] = (byte)value; } + public Span FruitFlags + { + get => Data.Slice(Offsets.FruitFlags, 5); + set => value.ToArray().CopyTo(Data[Offsets.FruitFlags..]); + } + public void UpdateFruitFlags() + { + var fruit = new byte[] { 00, 00, 00, 00, 00 }; + switch (SpecialtyFruit) + { + case 2213: // Apple + fruit[0] = 01; + break; + case 2287: // Cherry + fruit[4] = 01; + break; + case 2214: // Orange + fruit[1] = 01; + break; + case 2286: // Peach + fruit[3] = 01; + break; + case 2285: // Pear + fruit[2] = 01; + break; + } + FruitFlags = fruit; + } + public GSaveTime LastSaved => Data.Slice(Offsets.LastSavedTime, GSaveTime.SIZE).ToStructure(); public GSaveBulletinBoard Bulletin diff --git a/NHSE.Core/Save/Offsets/MainSaveOffsets.cs b/NHSE.Core/Save/Offsets/MainSaveOffsets.cs index 7753fb7..3451c08 100644 --- a/NHSE.Core/Save/Offsets/MainSaveOffsets.cs +++ b/NHSE.Core/Save/Offsets/MainSaveOffsets.cs @@ -32,6 +32,7 @@ public abstract class MainSaveOffsets public abstract int MainFieldStructure { get; } public abstract int EventFlagLand { get; } + public abstract int FruitFlags { get; } public abstract int FieldItem { get; } public abstract int LandMakingMap { get; } public abstract int OutsideField { get; } @@ -43,6 +44,10 @@ public abstract class MainSaveOffsets public abstract int Visitor { get; } public abstract int SaveFg { get; } + public abstract int SpecialtyFruit { get; } + public abstract int SisterFruit { get; } + public abstract int SisterFlower { get; } + public abstract int SpecialtyFlower { get; } public abstract int BulletinBoard { get; } public abstract int AirportThemeColor { get; } diff --git a/NHSE.Core/Save/Offsets/MainSaveOffsets10.cs b/NHSE.Core/Save/Offsets/MainSaveOffsets10.cs index 19d496b..d912ea6 100644 --- a/NHSE.Core/Save/Offsets/MainSaveOffsets10.cs +++ b/NHSE.Core/Save/Offsets/MainSaveOffsets10.cs @@ -24,6 +24,8 @@ public class MainSaveOffsets10 : MainSaveOffsets public override int WeatherRandSeed => GSaveWeather + 0x18; public override int EventFlagLand => GSaveLandStart + 0x200FF4; + // Flag region for the five fruit. + public override int FruitFlags => EventFlagLand + 246; // GSaveMainField public const int GSaveMainFieldStart = GSaveLandStart + 0x2017F4; @@ -41,6 +43,10 @@ public class MainSaveOffsets10 : MainSaveOffsets public override int Museum => GSaveLandStart + 0x411A80; public override int Visitor => GSaveLandStart + 0x414E84; public override int SaveFg => GSaveLandStart + 0x4150B4; + public override int SpecialtyFruit => SaveFg + 0x900; + public override int SisterFruit => SpecialtyFruit + 2; + public override int SisterFlower => SaveFg + 0x924; + public override int SpecialtyFlower => SisterFlower + 1; public override int BulletinBoard => GSaveLandStart + 0x4159F8; public override int AirportThemeColor => GSaveLandStart + 0x4F6600; #endregion diff --git a/NHSE.Core/Save/Offsets/MainSaveOffsets11.cs b/NHSE.Core/Save/Offsets/MainSaveOffsets11.cs index f954718..4cc92c6 100644 --- a/NHSE.Core/Save/Offsets/MainSaveOffsets11.cs +++ b/NHSE.Core/Save/Offsets/MainSaveOffsets11.cs @@ -24,6 +24,8 @@ public class MainSaveOffsets11 : MainSaveOffsets public override int WeatherRandSeed => GSaveWeather + 0x18; public override int EventFlagLand => GSaveLandStart + 0x20100C; + // Flag region for the five fruit. + public override int FruitFlags => EventFlagLand + 246; // GSaveMainField public const int GSaveMainFieldStart = GSaveLandStart + 0x20180C; @@ -41,6 +43,10 @@ public class MainSaveOffsets11 : MainSaveOffsets public override int Museum => GSaveLandStart + 0x412218; public override int Visitor => GSaveLandStart + 0x41561C; public override int SaveFg => GSaveLandStart + 0x41584C; + public override int SpecialtyFruit => SaveFg + 0x900; + public override int SisterFruit => SpecialtyFruit + 2; + public override int SisterFlower => SaveFg + 0x924; + public override int SpecialtyFlower => SisterFlower + 1; public override int BulletinBoard => GSaveLandStart + 0x416190; public override int AirportThemeColor => GSaveLandStart + 0x4F6D98; #endregion diff --git a/NHSE.Core/Save/Offsets/MainSaveOffsets110.cs b/NHSE.Core/Save/Offsets/MainSaveOffsets110.cs index 6340b54..492f576 100644 --- a/NHSE.Core/Save/Offsets/MainSaveOffsets110.cs +++ b/NHSE.Core/Save/Offsets/MainSaveOffsets110.cs @@ -26,6 +26,8 @@ public class MainSaveOffsets110 : MainSaveOffsets public override int WeatherRandSeed => GSaveWeather + 0x18; public override int EventFlagLand => GSaveLandStart + 0x22d9b8; + // Flag region for the five fruit. + public override int FruitFlags => EventFlagLand + 246; // GSaveMainField public const int GSaveMainFieldStart = GSaveLandStart + 0x22e1b8; @@ -43,6 +45,10 @@ public class MainSaveOffsets110 : MainSaveOffsets public override int Museum => GSaveLandStart + 0x43f1e0; public override int Visitor => GSaveLandStart + 0x4425e4; public override int SaveFg => GSaveLandStart + 0x442814; + public override int SpecialtyFruit => SaveFg + 0x900; + public override int SisterFruit => SpecialtyFruit + 2; + public override int SisterFlower => SaveFg + 0x924; + public override int SpecialtyFlower => SisterFlower + 1; public override int BulletinBoard => GSaveLandStart + 0x443158; public override int AirportThemeColor => GSaveLandStart + 0x523d60; #endregion diff --git a/NHSE.Core/Save/Offsets/MainSaveOffsets111.cs b/NHSE.Core/Save/Offsets/MainSaveOffsets111.cs index 6e43ae7..7be378a 100644 --- a/NHSE.Core/Save/Offsets/MainSaveOffsets111.cs +++ b/NHSE.Core/Save/Offsets/MainSaveOffsets111.cs @@ -27,6 +27,8 @@ public class MainSaveOffsets111 : MainSaveOffsets public override int WeatherRandSeed => GSaveWeather + 0x18; public override int EventFlagLand => GSaveLandStart + 0x22d9b8; + // Flag region for the five fruit. + public override int FruitFlags => EventFlagLand + 246; // GSaveMainField public const int GSaveMainFieldStart = GSaveLandStart + 0x22e1b8; @@ -44,6 +46,10 @@ public class MainSaveOffsets111 : MainSaveOffsets public override int Museum => GSaveLandStart + 0x43f1e0; public override int Visitor => GSaveLandStart + 0x4425e4; public override int SaveFg => GSaveLandStart + 0x442814; + public override int SpecialtyFruit => SaveFg + 0x900; + public override int SisterFruit => SpecialtyFruit + 2; + public override int SisterFlower => SaveFg + 0x924; + public override int SpecialtyFlower => SisterFlower + 1; public override int BulletinBoard => GSaveLandStart + 0x443158; public override int AirportThemeColor => GSaveLandStart + 0x523d60; #endregion diff --git a/NHSE.Core/Save/Offsets/MainSaveOffsets12.cs b/NHSE.Core/Save/Offsets/MainSaveOffsets12.cs index bf0495c..2f563f6 100644 --- a/NHSE.Core/Save/Offsets/MainSaveOffsets12.cs +++ b/NHSE.Core/Save/Offsets/MainSaveOffsets12.cs @@ -24,6 +24,8 @@ public class MainSaveOffsets12 : MainSaveOffsets public override int WeatherRandSeed => GSaveWeather + 0x18; public override int EventFlagLand => GSaveLandStart + 0x20100C; + // Flag region for the five fruit. + public override int FruitFlags => EventFlagLand + 246; // GSaveMainField public const int GSaveMainFieldStart = GSaveLandStart + 0x20180C; @@ -41,6 +43,10 @@ public class MainSaveOffsets12 : MainSaveOffsets public override int Museum => GSaveLandStart + 0x4124C4; public override int Visitor => GSaveLandStart + 0x4158C8; public override int SaveFg => GSaveLandStart + 0x415AF8; + public override int SpecialtyFruit => SaveFg + 0x900; + public override int SisterFruit => SpecialtyFruit + 2; + public override int SisterFlower => SaveFg + 0x924; + public override int SpecialtyFlower => SisterFlower + 1; public override int BulletinBoard => GSaveLandStart + 0x416440; public override int AirportThemeColor => GSaveLandStart + 0x4F7048; #endregion diff --git a/NHSE.Core/Save/Offsets/MainSaveOffsets13.cs b/NHSE.Core/Save/Offsets/MainSaveOffsets13.cs index 67a04fb..05085e7 100644 --- a/NHSE.Core/Save/Offsets/MainSaveOffsets13.cs +++ b/NHSE.Core/Save/Offsets/MainSaveOffsets13.cs @@ -24,6 +24,8 @@ public class MainSaveOffsets13 : MainSaveOffsets public override int WeatherRandSeed => GSaveWeather + 0x18; public override int EventFlagLand => GSaveLandStart + 0x20100C; + // Flag region for the five fruit. + public override int FruitFlags => EventFlagLand + 246; // GSaveMainField public const int GSaveMainFieldStart = GSaveLandStart + 0x20180C; @@ -41,6 +43,10 @@ public class MainSaveOffsets13 : MainSaveOffsets public override int Museum => GSaveLandStart + 0x4124C4; public override int Visitor => GSaveLandStart + 0x4158C8; public override int SaveFg => GSaveLandStart + 0x415AF8; + public override int SpecialtyFruit => SaveFg + 0x900; + public override int SisterFruit => SpecialtyFruit + 2; + public override int SisterFlower => SaveFg + 0x924; + public override int SpecialtyFlower => SisterFlower + 1; public override int BulletinBoard => GSaveLandStart + 0x416440; public override int AirportThemeColor => GSaveLandStart + 0x4F7048; #endregion diff --git a/NHSE.Core/Save/Offsets/MainSaveOffsets14.cs b/NHSE.Core/Save/Offsets/MainSaveOffsets14.cs index 1036468..90ec49e 100644 --- a/NHSE.Core/Save/Offsets/MainSaveOffsets14.cs +++ b/NHSE.Core/Save/Offsets/MainSaveOffsets14.cs @@ -24,6 +24,8 @@ public class MainSaveOffsets14 : MainSaveOffsets public override int WeatherRandSeed => GSaveWeather + 0x18; public override int EventFlagLand => GSaveLandStart + 0x20100C; + // Flag region for the five fruit. + public override int FruitFlags => EventFlagLand + 246; // GSaveMainField public const int GSaveMainFieldStart = GSaveLandStart + 0x20180C; @@ -41,6 +43,10 @@ public class MainSaveOffsets14 : MainSaveOffsets public override int Museum => GSaveLandStart + 0x4124C4; public override int Visitor => GSaveLandStart + 0x4158C8; public override int SaveFg => GSaveLandStart + 0x415AF8; + public override int SpecialtyFruit => SaveFg + 0x900; + public override int SisterFruit => SpecialtyFruit + 2; + public override int SisterFlower => SaveFg + 0x924; + public override int SpecialtyFlower => SisterFlower + 1; public override int BulletinBoard => GSaveLandStart + 0x416440; public override int AirportThemeColor => GSaveLandStart + 0x4F7048; #endregion diff --git a/NHSE.Core/Save/Offsets/MainSaveOffsets15.cs b/NHSE.Core/Save/Offsets/MainSaveOffsets15.cs index 0d8a50a..5c76556 100644 --- a/NHSE.Core/Save/Offsets/MainSaveOffsets15.cs +++ b/NHSE.Core/Save/Offsets/MainSaveOffsets15.cs @@ -24,6 +24,8 @@ public class MainSaveOffsets15 : MainSaveOffsets public override int WeatherRandSeed => GSaveWeather + 0x18; public override int EventFlagLand => GSaveLandStart + 0x20c40c; + // Flag region for the five fruit. + public override int FruitFlags => EventFlagLand + 246; // GSaveMainField public const int GSaveMainFieldStart = GSaveLandStart + 0x20cc0c; @@ -41,6 +43,10 @@ public class MainSaveOffsets15 : MainSaveOffsets public override int Museum => GSaveLandStart + 0x41d904; public override int Visitor => GSaveLandStart + 0x420d08; public override int SaveFg => GSaveLandStart + 0x420f38; + public override int SpecialtyFruit => SaveFg + 0x900; + public override int SisterFruit => SpecialtyFruit + 2; + public override int SisterFlower => SaveFg + 0x924; + public override int SpecialtyFlower => SisterFlower + 1; public override int BulletinBoard => GSaveLandStart + 0x421880; public override int AirportThemeColor => GSaveLandStart + 0x502488; #endregion diff --git a/NHSE.Core/Save/Offsets/MainSaveOffsets16.cs b/NHSE.Core/Save/Offsets/MainSaveOffsets16.cs index d43af7f..5730356 100644 --- a/NHSE.Core/Save/Offsets/MainSaveOffsets16.cs +++ b/NHSE.Core/Save/Offsets/MainSaveOffsets16.cs @@ -24,6 +24,8 @@ public class MainSaveOffsets16 : MainSaveOffsets public override int WeatherRandSeed => GSaveWeather + 0x18; public override int EventFlagLand => GSaveLandStart + 0x20c40c; + // Flag region for the five fruit. + public override int FruitFlags => EventFlagLand + 246; // GSaveMainField public const int GSaveMainFieldStart = GSaveLandStart + 0x20cc0c; @@ -41,6 +43,10 @@ public class MainSaveOffsets16 : MainSaveOffsets public override int Museum => GSaveLandStart + 0x41d9d4; public override int Visitor => GSaveLandStart + 0x420dd8; public override int SaveFg => GSaveLandStart + 0x421008; + public override int SpecialtyFruit => SaveFg + 0x900; + public override int SisterFruit => SpecialtyFruit + 2; + public override int SisterFlower => SaveFg + 0x924; + public override int SpecialtyFlower => SisterFlower + 1; public override int BulletinBoard => GSaveLandStart + 0x421950; public override int AirportThemeColor => GSaveLandStart + 0x502558; #endregion diff --git a/NHSE.Core/Save/Offsets/MainSaveOffsets17.cs b/NHSE.Core/Save/Offsets/MainSaveOffsets17.cs index 230a574..061c2c0 100644 --- a/NHSE.Core/Save/Offsets/MainSaveOffsets17.cs +++ b/NHSE.Core/Save/Offsets/MainSaveOffsets17.cs @@ -24,6 +24,8 @@ public class MainSaveOffsets17 : MainSaveOffsets public override int WeatherRandSeed => GSaveWeather + 0x18; public override int EventFlagLand => GSaveLandStart + 0x20a408; + // Flag region for the five fruit. + public override int FruitFlags => EventFlagLand + 246; // GSaveMainField public const int GSaveMainFieldStart = GSaveLandStart + 0x20ac08; @@ -41,6 +43,10 @@ public class MainSaveOffsets17 : MainSaveOffsets public override int Museum => GSaveLandStart + 0x41bba0; public override int Visitor => GSaveLandStart + 0x41efa4; public override int SaveFg => GSaveLandStart + 0x41f1d4; + public override int SpecialtyFruit => SaveFg + 0x900; + public override int SisterFruit => SpecialtyFruit + 2; + public override int SisterFlower => SaveFg + 0x924; + public override int SpecialtyFlower => SisterFlower + 1; public override int BulletinBoard => GSaveLandStart + 0x41fb18; public override int AirportThemeColor => GSaveLandStart + 0x500720; #endregion diff --git a/NHSE.Core/Save/Offsets/MainSaveOffsets18.cs b/NHSE.Core/Save/Offsets/MainSaveOffsets18.cs index 0229ca0..a207b6e 100644 --- a/NHSE.Core/Save/Offsets/MainSaveOffsets18.cs +++ b/NHSE.Core/Save/Offsets/MainSaveOffsets18.cs @@ -25,6 +25,8 @@ public class MainSaveOffsets18 : MainSaveOffsets public override int WeatherRandSeed => GSaveWeather + 0x18; public override int EventFlagLand => GSaveLandStart + 0x20a408; + // Flag region for the five fruit. + public override int FruitFlags => EventFlagLand + 246; // GSaveMainField public const int GSaveMainFieldStart = GSaveLandStart + 0x20ac08; @@ -42,6 +44,10 @@ public class MainSaveOffsets18 : MainSaveOffsets public override int Museum => GSaveLandStart + 0x41bba0; public override int Visitor => GSaveLandStart + 0x41efa4; public override int SaveFg => GSaveLandStart + 0x41f1d4; + public override int SpecialtyFruit => SaveFg + 0x900; + public override int SisterFruit => SpecialtyFruit + 2; + public override int SisterFlower => SaveFg + 0x924; + public override int SpecialtyFlower => SisterFlower + 1; public override int BulletinBoard => GSaveLandStart + 0x41fb18; public override int AirportThemeColor => GSaveLandStart + 0x500720; #endregion diff --git a/NHSE.Core/Save/Offsets/MainSaveOffsets19.cs b/NHSE.Core/Save/Offsets/MainSaveOffsets19.cs index 78540c2..a069a39 100644 --- a/NHSE.Core/Save/Offsets/MainSaveOffsets19.cs +++ b/NHSE.Core/Save/Offsets/MainSaveOffsets19.cs @@ -26,6 +26,8 @@ public class MainSaveOffsets19 : MainSaveOffsets public override int WeatherRandSeed => GSaveWeather + 0x18; public override int EventFlagLand => GSaveLandStart + 0x22d9a8; + // Flag region for the five fruit. + public override int FruitFlags => EventFlagLand + 246; // GSaveMainField public const int GSaveMainFieldStart = GSaveLandStart + 0x22e1a8; @@ -43,6 +45,10 @@ public class MainSaveOffsets19 : MainSaveOffsets public override int Museum => GSaveLandStart + 0x43f1d0; public override int Visitor => GSaveLandStart + 0x4425d4; public override int SaveFg => GSaveLandStart + 0x442804; + public override int SpecialtyFruit => SaveFg + 0x900; + public override int SisterFruit => SpecialtyFruit + 2; + public override int SisterFlower => SaveFg + 0x924; + public override int SpecialtyFlower => SisterFlower + 1; public override int BulletinBoard => GSaveLandStart + 0x443148; public override int AirportThemeColor => GSaveLandStart + 0x523d50; #endregion diff --git a/NHSE.Core/Save/Offsets/MainSaveOffsets20.cs b/NHSE.Core/Save/Offsets/MainSaveOffsets20.cs index b8c7c39..16885a1 100644 --- a/NHSE.Core/Save/Offsets/MainSaveOffsets20.cs +++ b/NHSE.Core/Save/Offsets/MainSaveOffsets20.cs @@ -27,6 +27,8 @@ public class MainSaveOffsets20 : MainSaveOffsets public override int WeatherRandSeed => GSaveWeather + 0x18; public override int EventFlagLand => GSaveLandStart + 0x22ebf0; + // Flag region for the five fruit. + public override int FruitFlags => EventFlagLand + 246; // GSaveMainField public const int GSaveMainFieldStart = GSaveLandStart + 0x22f3f0; @@ -44,6 +46,10 @@ public class MainSaveOffsets20 : MainSaveOffsets public override int Museum => GSaveLandStart + 0x45ec44; public override int Visitor => GSaveLandStart + 0x462048; public override int SaveFg => GSaveLandStart + 0x462278; + public override int SpecialtyFruit => SaveFg + 0x900; + public override int SisterFruit => SpecialtyFruit + 2; + public override int SisterFlower => SaveFg + 0x924; + public override int SpecialtyFlower => SisterFlower + 1; public override int BulletinBoard => GSaveLandStart + 0x462bc0; public override int AirportThemeColor => GSaveLandStart + 0x5437c8; #endregion diff --git a/NHSE.Core/Save/Offsets/MainSaveOffsets30.cs b/NHSE.Core/Save/Offsets/MainSaveOffsets30.cs index 9dfb0e9..c13d27b 100644 --- a/NHSE.Core/Save/Offsets/MainSaveOffsets30.cs +++ b/NHSE.Core/Save/Offsets/MainSaveOffsets30.cs @@ -28,6 +28,8 @@ public class MainSaveOffsets30 : MainSaveOffsets // GSaveEventFlagLand public override int EventFlagLand => GSaveLandStart + 0x22ebf0; + // Flag region for the five fruit. + public override int FruitFlags => EventFlagLand + 246; // GSaveMainField public const int GSaveMainFieldStart = GSaveLandStart + 0x22f3f0; @@ -63,6 +65,10 @@ public class MainSaveOffsets30 : MainSaveOffsets public override int Visitor => GSaveLandStart + 0x494514; // GSaveSaveFg public override int SaveFg => GSaveLandStart + 0x494760; + public override int SpecialtyFruit => SaveFg + 0x900; + public override int SisterFruit => SpecialtyFruit + 2; + public override int SisterFlower => SaveFg + 0x924; + public override int SpecialtyFlower => SisterFlower + 1; // GSaveBulletinBoard public override int BulletinBoard => GSaveLandStart + 0x4950a8; public override int AirportThemeColor => GSaveLandStart + 0x575cb0; diff --git a/NHSE.Core/Structures/GameLists.cs b/NHSE.Core/Structures/GameLists.cs index 5f68fd0..658aa1e 100644 --- a/NHSE.Core/Structures/GameLists.cs +++ b/NHSE.Core/Structures/GameLists.cs @@ -6,11 +6,11 @@ public static class GameLists { public static ReadOnlySpan Fruits => [ - 2213, // apple + 2213, // Apple 2287, // Cherry 2214, // Orange 2286, // Peach - 2285 // Pear + 2285 // Pear ]; public static ReadOnlySpan Bugs => diff --git a/NHSE.Core/Structures/Misc/GSaveFg.cs b/NHSE.Core/Structures/Misc/GSaveFg.cs index 19b1bf3..93321fc 100644 --- a/NHSE.Core/Structures/Misc/GSaveFg.cs +++ b/NHSE.Core/Structures/Misc/GSaveFg.cs @@ -17,6 +17,6 @@ public class GSaveFg [field: MarshalAs(UnmanagedType.ByValArray, SizeConst = _e88f809dCount)] public uint[] _e88f809d { get; set; } // @0x904 size 0x4, align 4 - public byte VillageFlower { get; set; } // @0x924 size 0x1, align 1 + public byte SisterFlower { get; set; } // @0x924 size 0x1, align 1 public byte SpecialityFlower { get; set; } // @0x925 size 0x1, align 1 } \ No newline at end of file diff --git a/NHSE.Core/Structures/Misc/IslandFlowers.cs b/NHSE.Core/Structures/Misc/IslandFlowers.cs new file mode 100644 index 0000000..acfd81c --- /dev/null +++ b/NHSE.Core/Structures/Misc/IslandFlowers.cs @@ -0,0 +1,16 @@ +namespace NHSE.Core; + +/// +/// Determines the island flower types (players island type and sister type). +/// +public enum IslandFlowers : byte +{ + Windflower = 0, + Hyacinth = 1, + Tulip = 2, + Rose = 3, + Cosmos = 4, + Lily = 5, + Mums = 6, + Pansy = 7, +} \ No newline at end of file diff --git a/NHSE.WinForms/Editor.cs b/NHSE.WinForms/Editor.cs index 8734ca4..5f39502 100644 --- a/NHSE.WinForms/Editor.cs +++ b/NHSE.WinForms/Editor.cs @@ -3,6 +3,7 @@ using NHSE.Sprites; using NHSE.WinForms.Properties; using System; +using System.Diagnostics; using System.Drawing; using System.Drawing.Imaging; using System.IO; @@ -278,7 +279,8 @@ private void B_EditPlayerReactions_Click(object sender, EventArgs e) private void B_EditPlayerMisc_Click(object sender, EventArgs e) { var player = SAV.Players[PlayerIndex]; - using var editor = new MiscPlayerEditor(player); + var save = SAV.Main; + using var editor = new MiscPlayerEditor(player, save); editor.ShowDialog(); } diff --git a/NHSE.WinForms/Subforms/Player/MiscPlayerEditor.Designer.cs b/NHSE.WinForms/Subforms/Player/MiscPlayerEditor.Designer.cs index 4224373..e9927db 100644 --- a/NHSE.WinForms/Subforms/Player/MiscPlayerEditor.Designer.cs +++ b/NHSE.WinForms/Subforms/Player/MiscPlayerEditor.Designer.cs @@ -28,189 +28,262 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { - this.B_Cancel = new System.Windows.Forms.Button(); - this.B_Save = new System.Windows.Forms.Button(); - this.L_Birthday = new System.Windows.Forms.Label(); - this.NUD_BirthMonth = new System.Windows.Forms.NumericUpDown(); - this.NUD_BirthDay = new System.Windows.Forms.NumericUpDown(); - this.tabControl1 = new System.Windows.Forms.TabControl(); - this.Tab_Misc = new System.Windows.Forms.TabPage(); - this.Tab_Profile = new System.Windows.Forms.TabPage(); - this.ProfileFruit = new NHSE.WinForms.RestrictedItemSelect(); - this.CAL_ProfileTimestamp = new System.Windows.Forms.DateTimePicker(); - this.CHK_ProfileMadeVillage = new System.Windows.Forms.CheckBox(); - this.L_ProfileSpecialtyFruit = new System.Windows.Forms.Label(); - this.L_ProfileTimestamp = new System.Windows.Forms.Label(); - ((System.ComponentModel.ISupportInitialize)(this.NUD_BirthMonth)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.NUD_BirthDay)).BeginInit(); - this.tabControl1.SuspendLayout(); - this.Tab_Misc.SuspendLayout(); - this.Tab_Profile.SuspendLayout(); - this.SuspendLayout(); + B_Cancel = new System.Windows.Forms.Button(); + B_Save = new System.Windows.Forms.Button(); + L_Birthday = new System.Windows.Forms.Label(); + NUD_BirthMonth = new System.Windows.Forms.NumericUpDown(); + NUD_BirthDay = new System.Windows.Forms.NumericUpDown(); + tabControl1 = new System.Windows.Forms.TabControl(); + Tab_Misc = new System.Windows.Forms.TabPage(); + Tab_Profile = new System.Windows.Forms.TabPage(); + CB_SisterFlower = new System.Windows.Forms.ComboBox(); + CB_ProfileFlower = new System.Windows.Forms.ComboBox(); + L_ProfileSisterFlower = new System.Windows.Forms.Label(); + L_ProfileSpecialtyFlower = new System.Windows.Forms.Label(); + RIS_SisterFruit = new RestrictedItemSelect(); + L_ProfileSisterFruit = new System.Windows.Forms.Label(); + RIS_ProfileFruit = new RestrictedItemSelect(); + CAL_ProfileTimestamp = new System.Windows.Forms.DateTimePicker(); + CHK_ProfileMadeVillage = new System.Windows.Forms.CheckBox(); + L_ProfileSpecialtyFruit = new System.Windows.Forms.Label(); + L_ProfileTimestamp = new System.Windows.Forms.Label(); + ((System.ComponentModel.ISupportInitialize)NUD_BirthMonth).BeginInit(); + ((System.ComponentModel.ISupportInitialize)NUD_BirthDay).BeginInit(); + tabControl1.SuspendLayout(); + Tab_Misc.SuspendLayout(); + Tab_Profile.SuspendLayout(); + SuspendLayout(); // // B_Cancel // - this.B_Cancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.B_Cancel.Location = new System.Drawing.Point(133, 181); - this.B_Cancel.Name = "B_Cancel"; - this.B_Cancel.Size = new System.Drawing.Size(72, 23); - this.B_Cancel.TabIndex = 7; - this.B_Cancel.Text = "Cancel"; - this.B_Cancel.UseVisualStyleBackColor = true; - this.B_Cancel.Click += new System.EventHandler(this.B_Cancel_Click); + B_Cancel.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right; + B_Cancel.Location = new System.Drawing.Point(211, 279); + B_Cancel.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + B_Cancel.Name = "B_Cancel"; + B_Cancel.Size = new System.Drawing.Size(84, 27); + B_Cancel.TabIndex = 7; + B_Cancel.Text = "Cancel"; + B_Cancel.UseVisualStyleBackColor = true; + B_Cancel.Click += B_Cancel_Click; // // B_Save // - this.B_Save.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.B_Save.Location = new System.Drawing.Point(211, 181); - this.B_Save.Name = "B_Save"; - this.B_Save.Size = new System.Drawing.Size(72, 23); - this.B_Save.TabIndex = 6; - this.B_Save.Text = "Save"; - this.B_Save.UseVisualStyleBackColor = true; - this.B_Save.Click += new System.EventHandler(this.B_Save_Click); + B_Save.Anchor = System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right; + B_Save.Location = new System.Drawing.Point(302, 279); + B_Save.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + B_Save.Name = "B_Save"; + B_Save.Size = new System.Drawing.Size(84, 27); + B_Save.TabIndex = 6; + B_Save.Text = "Save"; + B_Save.UseVisualStyleBackColor = true; + B_Save.Click += B_Save_Click; // // L_Birthday // - this.L_Birthday.Location = new System.Drawing.Point(6, 3); - this.L_Birthday.Name = "L_Birthday"; - this.L_Birthday.Size = new System.Drawing.Size(104, 23); - this.L_Birthday.TabIndex = 8; - this.L_Birthday.Text = "Birthday (M/D):"; - this.L_Birthday.TextAlign = System.Drawing.ContentAlignment.MiddleRight; + L_Birthday.Location = new System.Drawing.Point(7, 3); + L_Birthday.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + L_Birthday.Name = "L_Birthday"; + L_Birthday.Size = new System.Drawing.Size(121, 27); + L_Birthday.TabIndex = 8; + L_Birthday.Text = "Birthday (M/D):"; + L_Birthday.TextAlign = System.Drawing.ContentAlignment.MiddleRight; // // NUD_BirthMonth // - this.NUD_BirthMonth.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.NUD_BirthMonth.Location = new System.Drawing.Point(116, 6); - this.NUD_BirthMonth.Name = "NUD_BirthMonth"; - this.NUD_BirthMonth.Size = new System.Drawing.Size(37, 20); - this.NUD_BirthMonth.TabIndex = 9; - this.NUD_BirthMonth.Value = new decimal(new int[] { - 12, - 0, - 0, - 0}); + NUD_BirthMonth.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 0); + NUD_BirthMonth.Location = new System.Drawing.Point(135, 7); + NUD_BirthMonth.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + NUD_BirthMonth.Name = "NUD_BirthMonth"; + NUD_BirthMonth.Size = new System.Drawing.Size(43, 20); + NUD_BirthMonth.TabIndex = 9; + NUD_BirthMonth.Value = new decimal(new int[] { 12, 0, 0, 0 }); // // NUD_BirthDay // - this.NUD_BirthDay.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); - this.NUD_BirthDay.Location = new System.Drawing.Point(159, 6); - this.NUD_BirthDay.Name = "NUD_BirthDay"; - this.NUD_BirthDay.Size = new System.Drawing.Size(37, 20); - this.NUD_BirthDay.TabIndex = 10; - this.NUD_BirthDay.Value = new decimal(new int[] { - 30, - 0, - 0, - 0}); + NUD_BirthDay.Font = new System.Drawing.Font("Courier New", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, 0); + NUD_BirthDay.Location = new System.Drawing.Point(186, 7); + NUD_BirthDay.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + NUD_BirthDay.Name = "NUD_BirthDay"; + NUD_BirthDay.Size = new System.Drawing.Size(43, 20); + NUD_BirthDay.TabIndex = 10; + NUD_BirthDay.Value = new decimal(new int[] { 30, 0, 0, 0 }); // // tabControl1 // - this.tabControl1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) - | System.Windows.Forms.AnchorStyles.Left) - | System.Windows.Forms.AnchorStyles.Right))); - this.tabControl1.Controls.Add(this.Tab_Misc); - this.tabControl1.Controls.Add(this.Tab_Profile); - this.tabControl1.Location = new System.Drawing.Point(12, 12); - this.tabControl1.Name = "tabControl1"; - this.tabControl1.SelectedIndex = 0; - this.tabControl1.Size = new System.Drawing.Size(271, 163); - this.tabControl1.TabIndex = 12; + tabControl1.Anchor = System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right; + tabControl1.Controls.Add(Tab_Misc); + tabControl1.Controls.Add(Tab_Profile); + tabControl1.Location = new System.Drawing.Point(14, 14); + tabControl1.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + tabControl1.Name = "tabControl1"; + tabControl1.SelectedIndex = 0; + tabControl1.Size = new System.Drawing.Size(372, 258); + tabControl1.TabIndex = 12; // // Tab_Misc // - this.Tab_Misc.Controls.Add(this.L_Birthday); - this.Tab_Misc.Controls.Add(this.NUD_BirthDay); - this.Tab_Misc.Controls.Add(this.NUD_BirthMonth); - this.Tab_Misc.Location = new System.Drawing.Point(4, 22); - this.Tab_Misc.Name = "Tab_Misc"; - this.Tab_Misc.Padding = new System.Windows.Forms.Padding(3); - this.Tab_Misc.Size = new System.Drawing.Size(222, 112); - this.Tab_Misc.TabIndex = 0; - this.Tab_Misc.Text = "Misc"; - this.Tab_Misc.UseVisualStyleBackColor = true; + Tab_Misc.Controls.Add(L_Birthday); + Tab_Misc.Controls.Add(NUD_BirthDay); + Tab_Misc.Controls.Add(NUD_BirthMonth); + Tab_Misc.Location = new System.Drawing.Point(4, 24); + Tab_Misc.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + Tab_Misc.Name = "Tab_Misc"; + Tab_Misc.Padding = new System.Windows.Forms.Padding(4, 3, 4, 3); + Tab_Misc.Size = new System.Drawing.Size(364, 230); + Tab_Misc.TabIndex = 0; + Tab_Misc.Text = "Misc"; + Tab_Misc.UseVisualStyleBackColor = true; // // Tab_Profile // - this.Tab_Profile.Controls.Add(this.ProfileFruit); - this.Tab_Profile.Controls.Add(this.CAL_ProfileTimestamp); - this.Tab_Profile.Controls.Add(this.CHK_ProfileMadeVillage); - this.Tab_Profile.Controls.Add(this.L_ProfileSpecialtyFruit); - this.Tab_Profile.Controls.Add(this.L_ProfileTimestamp); - this.Tab_Profile.Location = new System.Drawing.Point(4, 22); - this.Tab_Profile.Name = "Tab_Profile"; - this.Tab_Profile.Padding = new System.Windows.Forms.Padding(3); - this.Tab_Profile.Size = new System.Drawing.Size(263, 137); - this.Tab_Profile.TabIndex = 1; - this.Tab_Profile.Text = "Profile"; - this.Tab_Profile.UseVisualStyleBackColor = true; + Tab_Profile.Controls.Add(CB_SisterFlower); + Tab_Profile.Controls.Add(CB_ProfileFlower); + Tab_Profile.Controls.Add(L_ProfileSisterFlower); + Tab_Profile.Controls.Add(L_ProfileSpecialtyFlower); + Tab_Profile.Controls.Add(RIS_SisterFruit); + Tab_Profile.Controls.Add(L_ProfileSisterFruit); + Tab_Profile.Controls.Add(RIS_ProfileFruit); + Tab_Profile.Controls.Add(CAL_ProfileTimestamp); + Tab_Profile.Controls.Add(CHK_ProfileMadeVillage); + Tab_Profile.Controls.Add(L_ProfileSpecialtyFruit); + Tab_Profile.Controls.Add(L_ProfileTimestamp); + Tab_Profile.Location = new System.Drawing.Point(4, 24); + Tab_Profile.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + Tab_Profile.Name = "Tab_Profile"; + Tab_Profile.Padding = new System.Windows.Forms.Padding(4, 3, 4, 3); + Tab_Profile.Size = new System.Drawing.Size(364, 230); + Tab_Profile.TabIndex = 1; + Tab_Profile.Text = "Profile"; + Tab_Profile.UseVisualStyleBackColor = true; // - // restrictedItemSelect1 + // CB_SisterFlower // - this.ProfileFruit.Location = new System.Drawing.Point(9, 61); - this.ProfileFruit.Name = "ProfileFruit"; - this.ProfileFruit.Size = new System.Drawing.Size(143, 48); - this.ProfileFruit.TabIndex = 17; - this.ProfileFruit.Value = ((ushort)(0)); + CB_SisterFlower.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + CB_SisterFlower.FormattingEnabled = true; + CB_SisterFlower.Location = new System.Drawing.Point(187, 162); + CB_SisterFlower.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + CB_SisterFlower.Name = "CB_SisterFlower"; + CB_SisterFlower.Size = new System.Drawing.Size(162, 23); + CB_SisterFlower.TabIndex = 63; + // + // CB_ProfileFlower + // + CB_ProfileFlower.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + CB_ProfileFlower.FormattingEnabled = true; + CB_ProfileFlower.Location = new System.Drawing.Point(10, 162); + CB_ProfileFlower.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + CB_ProfileFlower.Name = "CB_ProfileFlower"; + CB_ProfileFlower.Size = new System.Drawing.Size(164, 23); + CB_ProfileFlower.TabIndex = 62; + // + // L_ProfileSisterFlower + // + L_ProfileSisterFlower.AutoSize = true; + L_ProfileSisterFlower.Location = new System.Drawing.Point(184, 144); + L_ProfileSisterFlower.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + L_ProfileSisterFlower.Name = "L_ProfileSisterFlower"; + L_ProfileSisterFlower.Size = new System.Drawing.Size(81, 15); + L_ProfileSisterFlower.TabIndex = 21; + L_ProfileSisterFlower.Text = "Flower (Sister)"; + // + // L_ProfileSpecialtyFlower + // + L_ProfileSpecialtyFlower.AutoSize = true; + L_ProfileSpecialtyFlower.Location = new System.Drawing.Point(7, 144); + L_ProfileSpecialtyFlower.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + L_ProfileSpecialtyFlower.Name = "L_ProfileSpecialtyFlower"; + L_ProfileSpecialtyFlower.Size = new System.Drawing.Size(42, 15); + L_ProfileSpecialtyFlower.TabIndex = 20; + L_ProfileSpecialtyFlower.Text = "Flower"; + // + // RIS_SisterFruit + // + RIS_SisterFruit.Location = new System.Drawing.Point(187, 82); + RIS_SisterFruit.Margin = new System.Windows.Forms.Padding(5, 3, 5, 3); + RIS_SisterFruit.Name = "RIS_SisterFruit"; + RIS_SisterFruit.Size = new System.Drawing.Size(167, 55); + RIS_SisterFruit.TabIndex = 19; + // + // L_ProfileSisterFruit + // + L_ProfileSisterFruit.AutoSize = true; + L_ProfileSisterFruit.Location = new System.Drawing.Point(183, 64); + L_ProfileSisterFruit.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + L_ProfileSisterFruit.Name = "L_ProfileSisterFruit"; + L_ProfileSisterFruit.Size = new System.Drawing.Size(70, 15); + L_ProfileSisterFruit.TabIndex = 18; + L_ProfileSisterFruit.Text = "Fruit (Sister)"; + // + // RIS_ProfileFruit + // + RIS_ProfileFruit.Location = new System.Drawing.Point(10, 82); + RIS_ProfileFruit.Margin = new System.Windows.Forms.Padding(5, 3, 5, 3); + RIS_ProfileFruit.Name = "RIS_ProfileFruit"; + RIS_ProfileFruit.Size = new System.Drawing.Size(167, 55); + RIS_ProfileFruit.TabIndex = 17; // // CAL_ProfileTimestamp // - this.CAL_ProfileTimestamp.Location = new System.Drawing.Point(9, 22); - this.CAL_ProfileTimestamp.Name = "CAL_ProfileTimestamp"; - this.CAL_ProfileTimestamp.Size = new System.Drawing.Size(200, 20); - this.CAL_ProfileTimestamp.TabIndex = 16; + CAL_ProfileTimestamp.Location = new System.Drawing.Point(10, 25); + CAL_ProfileTimestamp.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + CAL_ProfileTimestamp.Name = "CAL_ProfileTimestamp"; + CAL_ProfileTimestamp.Size = new System.Drawing.Size(233, 23); + CAL_ProfileTimestamp.TabIndex = 16; // // CHK_ProfileMadeVillage // - this.CHK_ProfileMadeVillage.AutoSize = true; - this.CHK_ProfileMadeVillage.Location = new System.Drawing.Point(9, 115); - this.CHK_ProfileMadeVillage.Name = "CHK_ProfileMadeVillage"; - this.CHK_ProfileMadeVillage.Size = new System.Drawing.Size(87, 17); - this.CHK_ProfileMadeVillage.TabIndex = 15; - this.CHK_ProfileMadeVillage.Text = "Made Village"; - this.CHK_ProfileMadeVillage.UseVisualStyleBackColor = true; + CHK_ProfileMadeVillage.AutoSize = true; + CHK_ProfileMadeVillage.Location = new System.Drawing.Point(10, 203); + CHK_ProfileMadeVillage.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + CHK_ProfileMadeVillage.Name = "CHK_ProfileMadeVillage"; + CHK_ProfileMadeVillage.Size = new System.Drawing.Size(94, 19); + CHK_ProfileMadeVillage.TabIndex = 15; + CHK_ProfileMadeVillage.Text = "Made Village"; + CHK_ProfileMadeVillage.UseVisualStyleBackColor = true; // // L_ProfileSpecialtyFruit // - this.L_ProfileSpecialtyFruit.AutoSize = true; - this.L_ProfileSpecialtyFruit.Location = new System.Drawing.Point(6, 45); - this.L_ProfileSpecialtyFruit.Name = "L_ProfileSpecialtyFruit"; - this.L_ProfileSpecialtyFruit.Size = new System.Drawing.Size(27, 13); - this.L_ProfileSpecialtyFruit.TabIndex = 14; - this.L_ProfileSpecialtyFruit.Text = "Fruit"; + L_ProfileSpecialtyFruit.AutoSize = true; + L_ProfileSpecialtyFruit.Location = new System.Drawing.Point(7, 64); + L_ProfileSpecialtyFruit.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + L_ProfileSpecialtyFruit.Name = "L_ProfileSpecialtyFruit"; + L_ProfileSpecialtyFruit.Size = new System.Drawing.Size(89, 15); + L_ProfileSpecialtyFruit.TabIndex = 14; + L_ProfileSpecialtyFruit.Text = "Fruit (Specialty)"; // // L_ProfileTimestamp // - this.L_ProfileTimestamp.AutoSize = true; - this.L_ProfileTimestamp.Location = new System.Drawing.Point(6, 6); - this.L_ProfileTimestamp.Name = "L_ProfileTimestamp"; - this.L_ProfileTimestamp.Size = new System.Drawing.Size(58, 13); - this.L_ProfileTimestamp.TabIndex = 12; - this.L_ProfileTimestamp.Text = "Timestamp"; + L_ProfileTimestamp.AutoSize = true; + L_ProfileTimestamp.Location = new System.Drawing.Point(7, 7); + L_ProfileTimestamp.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); + L_ProfileTimestamp.Name = "L_ProfileTimestamp"; + L_ProfileTimestamp.Size = new System.Drawing.Size(67, 15); + L_ProfileTimestamp.TabIndex = 12; + L_ProfileTimestamp.Text = "Timestamp"; // // MiscPlayerEditor // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(295, 216); - this.Controls.Add(this.tabControl1); - this.Controls.Add(this.B_Cancel); - this.Controls.Add(this.B_Save); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; - this.Icon = global::NHSE.WinForms.Properties.Resources.icon; - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "MiscPlayerEditor"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.Text = "Misc Player Detail Editor"; - ((System.ComponentModel.ISupportInitialize)(this.NUD_BirthMonth)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.NUD_BirthDay)).EndInit(); - this.tabControl1.ResumeLayout(false); - this.Tab_Misc.ResumeLayout(false); - this.Tab_Profile.ResumeLayout(false); - this.Tab_Profile.PerformLayout(); - this.ResumeLayout(false); + AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F); + AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + ClientSize = new System.Drawing.Size(400, 319); + Controls.Add(tabControl1); + Controls.Add(B_Cancel); + Controls.Add(B_Save); + FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; + Icon = Properties.Resources.icon; + Margin = new System.Windows.Forms.Padding(4, 3, 4, 3); + MaximizeBox = false; + MinimizeBox = false; + Name = "MiscPlayerEditor"; + StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + Text = "Misc Player Detail Editor"; + ((System.ComponentModel.ISupportInitialize)NUD_BirthMonth).EndInit(); + ((System.ComponentModel.ISupportInitialize)NUD_BirthDay).EndInit(); + tabControl1.ResumeLayout(false); + Tab_Misc.ResumeLayout(false); + Tab_Profile.ResumeLayout(false); + Tab_Profile.PerformLayout(); + ResumeLayout(false); } @@ -225,9 +298,15 @@ private void InitializeComponent() private System.Windows.Forms.TabPage Tab_Misc; private System.Windows.Forms.TabPage Tab_Profile; private System.Windows.Forms.Label L_ProfileTimestamp; - private System.Windows.Forms.Label L_ProfileSpecialtyFruit; private System.Windows.Forms.CheckBox CHK_ProfileMadeVillage; private System.Windows.Forms.DateTimePicker CAL_ProfileTimestamp; - private RestrictedItemSelect ProfileFruit; + private RestrictedItemSelect RIS_ProfileFruit; + private RestrictedItemSelect RIS_SisterFruit; + private System.Windows.Forms.Label L_ProfileSpecialtyFruit; + private System.Windows.Forms.Label L_ProfileSisterFruit; + private System.Windows.Forms.Label L_ProfileSisterFlower; + private System.Windows.Forms.Label L_ProfileSpecialtyFlower; + private System.Windows.Forms.ComboBox CB_SisterFlower; + private System.Windows.Forms.ComboBox CB_ProfileFlower; } } diff --git a/NHSE.WinForms/Subforms/Player/MiscPlayerEditor.cs b/NHSE.WinForms/Subforms/Player/MiscPlayerEditor.cs index 18280da..5c55e5f 100644 --- a/NHSE.WinForms/Subforms/Player/MiscPlayerEditor.cs +++ b/NHSE.WinForms/Subforms/Player/MiscPlayerEditor.cs @@ -1,21 +1,28 @@ -using System; +using NHSE.Core; +using System; +using System.Diagnostics; +using System.Text; using System.Windows.Forms; -using NHSE.Core; namespace NHSE.WinForms; public partial class MiscPlayerEditor : Form { private readonly Player Player; + private readonly MainSave Save; - public MiscPlayerEditor(Player p) + public MiscPlayerEditor(Player p, MainSave s) { InitializeComponent(); this.TranslateInterface(GameInfo.CurrentLanguage); Player = p; + Save = s; - var fruits = ComboItemUtil.GetArray(GameLists.Fruits, GameInfo.Strings.itemlistdisplay); - ProfileFruit.Initialize(fruits); + var fruitsSpecialty = ComboItemUtil.GetArray(GameLists.Fruits, GameInfo.Strings.itemlistdisplay); + RIS_ProfileFruit.Initialize(fruitsSpecialty); + + var fruitsSister = ComboItemUtil.GetArray(GameLists.Fruits, GameInfo.Strings.itemlistdisplay); + RIS_SisterFruit.Initialize(fruitsSister); LoadPlayer(); } @@ -25,12 +32,25 @@ private void LoadPlayer() var p = Player; var pers = p.Personal; + var sav = Save; + var bd = pers.Birthday; NUD_BirthDay.Value = bd.Day; NUD_BirthMonth.Value = bd.Month; CHK_ProfileMadeVillage.Checked = pers.ProfileIsMakeVillage; - ProfileFruit.Value = pers.ProfileFruit; + + RIS_ProfileFruit.Value = pers.ProfileFruit; + RIS_SisterFruit.Value = sav.SisterFruit; + + var flowersProfile = Enum.GetNames(); + CB_ProfileFlower.Items.AddRange(flowersProfile); + CB_ProfileFlower.SelectedIndex = (int)sav.SpecialtyFlower; + + var flowersSister = Enum.GetNames(); + CB_SisterFlower.Items.AddRange(flowersSister); + CB_SisterFlower.SelectedIndex = (int)sav.SisterFlower; + CAL_ProfileTimestamp.Value = pers.ProfileTimestamp; } @@ -47,6 +67,8 @@ private void SavePlayer() var p = Player; var pers = p.Personal; + var sav = Save; + var bd = pers.Birthday; bd.Day = (byte) NUD_BirthDay.Value; bd.Month = (byte) NUD_BirthMonth.Value; @@ -54,7 +76,15 @@ private void SavePlayer() pers.Birthday = bd; pers.ProfileBirthday = bd; pers.ProfileIsMakeVillage = CHK_ProfileMadeVillage.Checked; - pers.ProfileFruit = ProfileFruit.Value; + + pers.ProfileFruit = RIS_ProfileFruit.Value; + sav.SpecialtyFruit = RIS_ProfileFruit.Value; + sav.SisterFruit = RIS_SisterFruit.Value; + sav.UpdateFruitFlags(); + + sav.SpecialtyFlower = (IslandFlowers)CB_ProfileFlower.SelectedIndex; + sav.SisterFlower = (IslandFlowers)CB_SisterFlower.SelectedIndex; + pers.ProfileTimestamp = CAL_ProfileTimestamp.Value; } } \ No newline at end of file diff --git a/NHSE.WinForms/Subforms/Player/MiscPlayerEditor.resx b/NHSE.WinForms/Subforms/Player/MiscPlayerEditor.resx index 1af7de1..8b2ff64 100644 --- a/NHSE.WinForms/Subforms/Player/MiscPlayerEditor.resx +++ b/NHSE.WinForms/Subforms/Player/MiscPlayerEditor.resx @@ -1,17 +1,17 @@  -