Villager PRO Design owner overwrite

Shifted HorizonSave into VillagerEditor in place of MainSave and adjusted accordingly to give VillagerEditor better access to save file offsets etc.

Added overwrite for Villager PRO patterns to set imported ones to be made/owned by the player for consistency. (town and player ID bytes)
This commit is contained in:
Lotte
2023-11-08 15:27:42 +11:00
parent 526fb34eda
commit c1e2c3048c
2 changed files with 15 additions and 11 deletions

View File

@@ -12,11 +12,11 @@ public partial class VillagerEditor : UserControl
{
public IVillager[] Villagers;
public IVillagerOrigin Origin;
private readonly MainSave SAV;
private readonly HorizonSave SAV;
private int VillagerIndex = -1;
private bool Loading;
public VillagerEditor(IVillager[] villagers, IVillagerOrigin origin, MainSave sav, bool hasHouses)
public VillagerEditor(IVillager[] villagers, IVillagerOrigin origin, HorizonSave sav, bool hasHouses)
{
InitializeComponent();
Villagers = villagers;
@@ -132,7 +132,7 @@ private void B_LoadVillager_Click(object sender, EventArgs e)
return;
var path = ofd.FileName;
var expectLength = SAV.Offsets.VillagerSize;
var expectLength = SAV.Main.Offsets.VillagerSize;
var fi = new FileInfo(path);
if (!VillagerConverter.IsCompatible((int)fi.Length, expectLength))
{
@@ -148,7 +148,7 @@ private void B_LoadVillager_Click(object sender, EventArgs e)
return;
}
var v = SAV.Offsets.ReadVillager(data);
var v = SAV.Main.Offsets.ReadVillager(data);
var player0 = Origin;
if (!v.IsOriginatedFrom(player0))
{
@@ -203,11 +203,11 @@ private void ChangeVillager()
private void B_EditHouse_Click(object sender, EventArgs e)
{
SaveVillager(VillagerIndex);
var villagers = SAV.GetVillagers();
var houses = SAV.GetVillagerHouses();
using var editor = new VillagerHouseEditor(houses, villagers, SAV, VillagerIndex);
var villagers = SAV.Main.GetVillagers();
var houses = SAV.Main.GetVillagerHouses();
using var editor = new VillagerHouseEditor(houses, villagers, SAV.Main, VillagerIndex);
if (editor.ShowDialog() == DialogResult.OK)
SAV.SetVillagerHouses(houses);
SAV.Main.SetVillagerHouses(houses);
}
private static void ShowContextMenuBelow(ToolStripDropDown c, Control n) => c.Show(n.PointToScreen(new System.Drawing.Point(0, n.Height)));
@@ -223,9 +223,13 @@ private void B_EditVillagerRoom_Click(object sender, EventArgs e)
private void B_EditVillagerDesign_Click(object sender, EventArgs e)
{
var playerID = SAV.Players[0].Personal.GetPlayerIdentity(); // fetch ID for overwrite ownership
var townID = SAV.Players[0].Personal.GetTownIdentity(); // fetch ID for overwrite ownership
var v = Villagers[VillagerIndex];
var tmp = new[] {v.Design};
using var editor = new PatternEditorPRO(tmp);
playerID.CopyTo(tmp[0].Data, 0x54); // overwrite playerID bytes
townID.CopyTo(tmp[0].Data, 0x38); // overwrite townID bytes
if (editor.ShowDialog() == DialogResult.OK)
v.Design = tmp[0];
}
@@ -306,13 +310,13 @@ private void B_ReplaceVillager_Click(object sender, EventArgs e)
return;
}
var houses = SAV.GetVillagerHouses();
var houses = SAV.Main.GetVillagerHouses();
var houseIndex = Array.FindIndex(houses, z => z.NPC1 == index);
var exist = new VillagerInfo(v2, houses[houseIndex]);
var replace = VillagerSwap.GetReplacementVillager(exist, internalName);
var nh = new VillagerHouse1(replace.House);
SAV.SetVillagerHouse(nh, houseIndex);
SAV.Main.SetVillagerHouse(nh, houseIndex);
var nv = new Villager2(replace.Villager);
LoadVillager(Villagers[index] = nv);
System.Media.SystemSounds.Asterisk.Play();

View File

@@ -166,7 +166,7 @@ private VillagerEditor LoadVillagers()
{
var p0 = SAV.Players[0].Personal;
var villagers = SAV.Main.GetVillagers();
var v = new VillagerEditor(villagers, p0, SAV.Main, true) {Dock = DockStyle.Fill};
var v = new VillagerEditor(villagers, p0, SAV, true) {Dock = DockStyle.Fill};
Tab_Villagers.Controls.Add(v);
return v;
}