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.
This commit is contained in:
Josh (vector_cmdr) 2026-01-20 14:37:59 +11:00
parent db54e5ae1c
commit 962b8dcbe9
23 changed files with 439 additions and 182 deletions

View File

@ -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<byte> 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<GSaveTime>();
public GSaveBulletinBoard Bulletin

View File

@ -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; }

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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;

View File

@ -6,7 +6,7 @@ public static class GameLists
{
public static ReadOnlySpan<ushort> Fruits =>
[
2213, // apple
2213, // Apple
2287, // Cherry
2214, // Orange
2286, // Peach

View File

@ -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
}

View File

@ -0,0 +1,16 @@
namespace NHSE.Core;
/// <summary>
/// Determines the island flower types (players island type and sister type).
/// </summary>
public enum IslandFlowers : byte
{
Windflower = 0,
Hyacinth = 1,
Tulip = 2,
Rose = 3,
Cosmos = 4,
Lily = 5,
Mums = 6,
Pansy = 7,
}

View File

@ -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();
}

View File

@ -28,189 +28,262 @@ protected override void Dispose(bool disposing)
/// </summary>
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;
}
}

View File

@ -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<IslandFlowers>();
CB_ProfileFlower.Items.AddRange(flowersProfile);
CB_ProfileFlower.SelectedIndex = (int)sav.SpecialtyFlower;
var flowersSister = Enum.GetNames<IslandFlowers>();
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;
}
}