mirror of
https://github.com/kwsch/NHSE.git
synced 2026-04-24 23:27:14 -05:00
Pattern Edit Fix + New Icon + JP Strings (#634)
Added fix for two parts of pattern import problems: 1. PlayerID and TownID bytes need to be added to the pattern data from the personal.dat offsets to set them as owned and editable correctly. Added these code to get and force overwrite to fix. 2. Flags exist in main.dat for if the player has edited the pattern slot and if not, the name will not be updated correctly. Added offsets for these and added code to flag them as edited on import to fix. Added a new icon that supports up to 256px and is "distinct". Added translations to MessageStrings_jp.txt.
This commit is contained in:
parent
fd6a6c0860
commit
11e9fafaed
|
|
@ -1,5 +1,5 @@
|
|||
MsgBackupCreateLocation=NHSE can perform automatic backups if you create a folder with the name '{0}' in the same folder as the executable.
|
||||
MsgBackupCreateQuestion=Would you NHSE to automatically keep a backup of your save data?
|
||||
MsgBackupCreateQuestion=Would you like NHSE to automatically keep a backup of your save data?
|
||||
MsgDataSizeMismatchImport=The size of the imported file (0x{0:X}) does not match the required size (0x{1:X}).
|
||||
MsgDataSizeMismatchRAM=Read size (0x{0:X}) != Write size (0x{1:X}).
|
||||
MsgDataDidNotOriginateFromHost_0=Imported data did not originate from Villager0 ({0})'s data.
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
MsgBackupCreateLocation=NHSE can perform automatic backups if you create a folder with the name '{0}' in the same folder as the executable.
|
||||
MsgBackupCreateQuestion=Would you NHSE to automatically keep a backup of your save data?
|
||||
MsgBackupCreateQuestion=Would you like NHSE to automatically keep a backup of your save data?
|
||||
MsgDataSizeMismatchImport=The size of the imported file (0x{0:X}) does not match the required size (0x{1:X}).
|
||||
MsgDataSizeMismatchRAM=Read size (0x{0:X}) != Write size (0x{1:X}).
|
||||
MsgDataDidNotOriginateFromHost_0=Imported data did not originate from Villager0 ({0})'s data.
|
||||
|
|
|
|||
|
|
@ -1,40 +1,40 @@
|
|||
MsgBackupCreateLocation=NHSE can perform automatic backups if you create a folder with the name '{0}' in the same folder as the executable.
|
||||
MsgBackupCreateQuestion=Would you NHSE to automatically keep a backup of your save data?
|
||||
MsgDataSizeMismatchImport=The size of the imported file (0x{0:X}) does not match the required size (0x{1:X}).
|
||||
MsgDataSizeMismatchRAM=Read size (0x{0:X}) != Write size (0x{1:X}).
|
||||
MsgDataDidNotOriginateFromHost_0=Imported data did not originate from Villager0 ({0})'s data.
|
||||
MsgAskUpdateValues=Update values?
|
||||
MsgAskContinue=Continue?
|
||||
MsgAskWriteAnyway=Write anyway?
|
||||
MsgAskExportResultToClipboard=Export results to clipboard?
|
||||
MsgAskExportResultsWithFileIndex=Export results with file index at the front of the file name?
|
||||
MsgCanceling=Canceling:
|
||||
MsgInvalidHexValue=Bad hex value.
|
||||
MsgImportDirectoryDoesNotExist=Directory does not exist!
|
||||
MsgNoPictureLoaded=No picture loaded.
|
||||
MsgSaveDataImportFail=Unable to open the folder that contains the save file.
|
||||
MsgSaveDataImportSuggest=Try moving it to another location and opening from there.
|
||||
MsgSaveDataExportSuccess=Saved all save data!
|
||||
MsgSaveDataExportFail=Unable to save files to their original location.
|
||||
MsgSaveDataHashesValid=Hashes are valid.
|
||||
MsgSaveDataSizeMismatch=Save file sizes appear to be incorrect.
|
||||
MsgMoveOut=Are you trying to make the Villager move out?
|
||||
MsgMoveOutSuggest=If so, set the Event Flag (024 - ForceMoveOut) to 1 so that the Villager is removed by the game.
|
||||
MsgMoveOutAll=This will check the 'Moving Out' box for all Villagers.
|
||||
MsgFieldItemRemoveAsk=Are you sure you want to remove {0}?
|
||||
MsgFieldItemRemoveNone=Nothing removed (none found).
|
||||
MsgFieldItemRemoveCount=Removed {0} from the map.
|
||||
MsgFieldItemModifyAsk=Are you sure you want to {0}?
|
||||
MsgFieldItemModifyNone=Nothing modified (none found).
|
||||
MsgFieldItemModifyCount=Modified {0} tiles on the map.
|
||||
MsgFieldItemUnsupportedLayer2Tile=Unsupported Layer2 items detected.
|
||||
MsgFieldItemNoNHI=No .nhi file selected to import!
|
||||
MsgSysBotInfo=This SysBot reads and writes RAM directly to your game when called to Read/Write.
|
||||
MsgSysBotRequired=Using this functionality requires the sys-botbase sysmodule running on the console. Your console must be on the same network as the PC running this program.
|
||||
MsgTerrainSetElevation0=Set the elevation of all tiles on the map to 0?
|
||||
MsgTerrainSetAll=Set the tile from the Tile Editor to all tiles on the map?
|
||||
MsgTerrainSetAllSkipExterior=Do you want to skip the tiles in exterior acres (beach/rocks)?
|
||||
MsgVillagerFriendshipMax=Do you want to set all Villager Friendship memories to 255?
|
||||
MsgVillagerReplaceNoText=Clipboard: No text found! Expected internal villager name.
|
||||
MsgVillagerReplaceOutdatedSaveFormat=Save file is not up to date with latest villager format. Please update in-game.
|
||||
MsgVillagerReplaceUnknownName=Clipboard: {0} is not a valid internal villager name.
|
||||
MsgBackupCreateLocation=実行可能ファイルと同じフォルダー内に '{0}' という名前のフォルダーを作成すると、NHSE は自動バックアップを実行できます。
|
||||
MsgBackupCreateQuestion=NHSE がセーブ データのバックアップを自動的に保存することを希望しますか?
|
||||
MsgDataSizeMismatchImport=インポートされたファイル (0x{0:X}) のサイズが必要なサイズ (0x{1:X}) と一致しません。
|
||||
MsgDataSizeMismatchRAM=読み取りサイズ (0x{0:X}) は書き込みサイズ (0x{1:X}) と等しくありません。
|
||||
MsgDataDidNotOriginateFromHost_0=インポートされたデータは Villager0 ({0}) のデータからのものではありませんでした。
|
||||
MsgAskUpdateValues=値を更新しますか?
|
||||
MsgAskContinue=続く?
|
||||
MsgAskWriteAnyway=とにかく書いてください?
|
||||
MsgAskExportResultToClipboard=結果をクリップボードにエクスポートしますか?
|
||||
MsgAskExportResultsWithFileIndex=ファイル名の前にファイルインデックスを付けて結果をエクスポートしますか?
|
||||
MsgCanceling=ドタキャン:
|
||||
MsgInvalidHexValue=不正な 16 進値.
|
||||
MsgImportDirectoryDoesNotExist=ディレクトリが存在しません!
|
||||
MsgNoPictureLoaded=画像が読み込まれていません。
|
||||
MsgSaveDataImportFail=保存ファイルが含まれるフォルダーを開けません。
|
||||
MsgSaveDataImportSuggest=ファイルを別の場所に移動し、そこから開いてみてください。
|
||||
MsgSaveDataExportSuccess=セーブデータを全て保存しました!
|
||||
MsgSaveDataExportFail=ファイルを元の場所に保存できません。
|
||||
MsgSaveDataHashesValid=ハッシュは有効です。
|
||||
MsgSaveDataSizeMismatch=保存ファイルのサイズが間違っているようです。
|
||||
MsgMoveOut=村人を退去させようとしているのでしょうか?
|
||||
MsgMoveOutSuggest=その場合は、イベント フラグ (024 - ForceMoveOut) を 1 に設定して、村人がゲームによって削除されるようにします。
|
||||
MsgMoveOutAll=これにより、すべての村人に対して「引っ越し」ボックスがチェックされます。
|
||||
MsgFieldItemRemoveAsk={0} を削除してもよろしいですか?
|
||||
MsgFieldItemRemoveNone=何も削除されませんでした (何も見つかりませんでした)。
|
||||
MsgFieldItemRemoveCount={0} をマップから削除しました。
|
||||
MsgFieldItemModifyAsk=本当に {0} してもよろしいですか?
|
||||
MsgFieldItemModifyNone=何も変更されていません (何も見つかりませんでした)。
|
||||
MsgFieldItemModifyCount=マップ上の {0} 個のタイルを変更しました。
|
||||
MsgFieldItemUnsupportedLayer2Tile=サポートされていない項目がレイヤー2 で検出されました。
|
||||
MsgFieldItemNoNHI=インポートする「.nhi」ファイルが選択されていません!
|
||||
MsgSysBotInfo=このシスボットは、読み取り/書き込みが呼び出されると、ゲームに対して RAM を直接読み書きします。
|
||||
MsgSysBotRequired=この機能を使用するには、コンソール上で「sys-botbase」システムモジュールが実行されている必要があります。 本体は、このプログラムを実行している PC と同じネットワーク上にある必要があります。
|
||||
MsgTerrainSetElevation0=マップ上のすべてのタイルの標高を 0 に設定しますか?
|
||||
MsgTerrainSetAll=タイル エディタからタイルをマップ上のすべてのタイルに設定しますか?
|
||||
MsgTerrainSetAllSkipExterior=外側のエーカー (ビーチ/岩) のタイルをスキップしますか?
|
||||
MsgVillagerFriendshipMax=村人との友情の思い出をすべて 255 に設定しますか?
|
||||
MsgVillagerReplaceNoText=クリップボード: テキストが見つかりません! 予期される内部村人の名前。
|
||||
MsgVillagerReplaceOutdatedSaveFormat=保存ファイルは最新の村人形式ではありません。 ゲーム内でアップデートしてください。
|
||||
MsgVillagerReplaceUnknownName=クリップボード: {0} は有効な内部村民名ではありません。
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
MsgBackupCreateLocation=NHSE can perform automatic backups if you create a folder with the name '{0}' in the same folder as the executable.
|
||||
MsgBackupCreateQuestion=Would you NHSE to automatically keep a backup of your save data?
|
||||
MsgBackupCreateQuestion=Would you like NHSE to automatically keep a backup of your save data?
|
||||
MsgDataSizeMismatchImport=The size of the imported file (0x{0:X}) does not match the required size (0x{1:X}).
|
||||
MsgDataSizeMismatchRAM=Read size (0x{0:X}) != Write size (0x{1:X}).
|
||||
MsgDataDidNotOriginateFromHost_0=Imported data did not originate from Villager0 ({0})'s data.
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
MsgBackupCreateLocation=NHSE can perform automatic backups if you create a folder with the name '{0}' in the same folder as the executable.
|
||||
MsgBackupCreateQuestion=Would you NHSE to automatically keep a backup of your save data?
|
||||
MsgBackupCreateQuestion=Would you like NHSE to automatically keep a backup of your save data?
|
||||
MsgDataSizeMismatchImport=The size of the imported file (0x{0:X}) does not match the required size (0x{1:X}).
|
||||
MsgDataSizeMismatchRAM=Read size (0x{0:X}) != Write size (0x{1:X}).
|
||||
MsgDataDidNotOriginateFromHost_0=Imported data did not originate from Villager0 ({0})'s data.
|
||||
|
|
|
|||
|
|
@ -50,9 +50,9 @@ public void SetVillagerHouses(IReadOnlyList<IVillagerHouse> villagers)
|
|||
}
|
||||
|
||||
public DesignPattern GetDesign(int index) => Offsets.ReadPattern(Data, index);
|
||||
public void SetDesign(DesignPattern value, int index) => Offsets.WritePattern(value, Data, index);
|
||||
public void SetDesign(DesignPattern value, int index, byte[] playerID, byte[] townID) => Offsets.WritePattern(value, Data, index, playerID, townID);
|
||||
public DesignPatternPRO GetDesignPRO(int index) => Offsets.ReadPatternPRO(Data, index);
|
||||
public void SetDesignPRO(DesignPatternPRO value, int index) => Offsets.WritePatternPRO(value, Data, index);
|
||||
public void SetDesignPRO(DesignPatternPRO value, int index, byte[] playerID, byte[] townID) => Offsets.WritePatternPRO(value, Data, index, playerID, townID);
|
||||
|
||||
public IReadOnlyList<Item> RecycleBin
|
||||
{
|
||||
|
|
@ -91,11 +91,11 @@ public DesignPattern[] GetDesigns()
|
|||
return result;
|
||||
}
|
||||
|
||||
public void SetDesigns(IReadOnlyList<DesignPattern> value)
|
||||
public void SetDesigns(IReadOnlyList<DesignPattern> value, byte[] playerID, byte[] townID)
|
||||
{
|
||||
var count = Math.Min(Offsets.PatternCount, value.Count);
|
||||
for (int i = 0; i < count; i++)
|
||||
SetDesign(value[i], i);
|
||||
SetDesign(value[i], i, playerID, townID);
|
||||
}
|
||||
|
||||
public DesignPatternPRO[] GetDesignsPRO()
|
||||
|
|
@ -106,11 +106,11 @@ public DesignPatternPRO[] GetDesignsPRO()
|
|||
return result;
|
||||
}
|
||||
|
||||
public void SetDesignsPRO(IReadOnlyList<DesignPatternPRO> value)
|
||||
public void SetDesignsPRO(IReadOnlyList<DesignPatternPRO> value, byte[] playerID, byte[] townID)
|
||||
{
|
||||
var count = Math.Min(Offsets.PatternCount, value.Count);
|
||||
for (int i = 0; i < count; i++)
|
||||
SetDesignPRO(value[i], i);
|
||||
SetDesignPRO(value[i], i, playerID, townID);
|
||||
}
|
||||
|
||||
public DesignPattern FlagMyDesign
|
||||
|
|
|
|||
|
|
@ -23,6 +23,9 @@ public abstract class MainSaveOffsets
|
|||
public abstract int PatternFlag { get; }
|
||||
public abstract int PatternTailor { get; }
|
||||
|
||||
public abstract int PatternsEditFlagStart { get; }
|
||||
public abstract int PatternsProEditFlagStart { get; }
|
||||
|
||||
public abstract int WeatherArea { get; }
|
||||
public abstract int WeatherRandSeed { get; }
|
||||
|
||||
|
|
@ -107,11 +110,15 @@ public static DesignPattern ReadPatternAtOffset(byte[] data, int offset)
|
|||
return new DesignPattern(v);
|
||||
}
|
||||
|
||||
public void WritePattern(DesignPattern p, byte[] data, int index)
|
||||
public void WritePattern(DesignPattern p, byte[] data, int index, byte[] playerID, byte[] townID)
|
||||
{
|
||||
if ((uint)index >= PatternCount)
|
||||
throw new ArgumentOutOfRangeException(nameof(index));
|
||||
playerID.CopyTo(p.Data, 0x54); // overwrite playerID bytes so player owns
|
||||
townID.CopyTo(p.Data, 0x38); // overwrite townID bytes so player owns
|
||||
p.Data.CopyTo(data, LandMyDesign + (index * DesignPattern.SIZE));
|
||||
byte[] editedflag = new byte[] { 0x00 };
|
||||
editedflag.CopyTo(data, PatternsEditFlagStart + index); // set edited flag for name import to work
|
||||
}
|
||||
|
||||
public DesignPatternPRO ReadPatternPRO(byte[] data, int index)
|
||||
|
|
@ -128,11 +135,15 @@ public static DesignPatternPRO ReadPatternPROAtOffset(byte[] data, int ofs)
|
|||
return new DesignPatternPRO(v);
|
||||
}
|
||||
|
||||
public void WritePatternPRO(DesignPatternPRO p, byte[] data, int index)
|
||||
public void WritePatternPRO(DesignPatternPRO p, byte[] data, int index, byte[] playerID, byte[] townID)
|
||||
{
|
||||
if ((uint)index >= PatternCount)
|
||||
throw new ArgumentOutOfRangeException(nameof(index));
|
||||
playerID.CopyTo(p.Data, 0x54); // overwrite playerID bytes so player owns
|
||||
townID.CopyTo(p.Data, 0x38); // overwrite townID bytes so player owns
|
||||
p.Data.CopyTo(data, PatternsPRO + (index * DesignPatternPRO.SIZE));
|
||||
byte[] editedflag = new byte[] { 0x00 };
|
||||
editedflag.CopyTo(data, PatternsProEditFlagStart + index);
|
||||
}
|
||||
|
||||
public IVillager ReadVillager(byte[] data, int index)
|
||||
|
|
|
|||
|
|
@ -14,6 +14,9 @@ public class MainSaveOffsets10 : MainSaveOffsets
|
|||
public override int PatternFlag => PatternsPRO + (PatternCount * DesignPatternPRO.SIZE);
|
||||
public override int PatternTailor => PatternFlag + DesignPattern.SIZE;
|
||||
|
||||
public override int PatternsEditFlagStart => GSaveLandStart + 0x8BE150; // x100, HasPlayerEdited?
|
||||
public override int PatternsProEditFlagStart => PatternsEditFlagStart + 0x64; // x100, HasPlayerEdited?
|
||||
|
||||
public const int GSaveWeather = GSaveLandStart + 0x1D6FB0;
|
||||
public override int WeatherArea => GSaveWeather + 0x14; // Hemisphere
|
||||
public override int WeatherRandSeed => GSaveWeather + 0x18;
|
||||
|
|
|
|||
|
|
@ -14,6 +14,9 @@ public class MainSaveOffsets11 : MainSaveOffsets
|
|||
public override int PatternFlag => PatternsPRO + (PatternCount * DesignPatternPRO.SIZE);
|
||||
public override int PatternTailor => PatternFlag + DesignPattern.SIZE;
|
||||
|
||||
public override int PatternsEditFlagStart => GSaveLandStart + 0x8BE150; // x100, HasPlayerEdited?
|
||||
public override int PatternsProEditFlagStart => PatternsEditFlagStart + 0x64; // x100, HasPlayerEdited?
|
||||
|
||||
public const int GSaveWeather = GSaveLandStart + 0x1D6F98;
|
||||
public override int WeatherArea => GSaveWeather + 0x14; // Hemisphere
|
||||
public override int WeatherRandSeed => GSaveWeather + 0x18;
|
||||
|
|
|
|||
|
|
@ -16,6 +16,9 @@ public class MainSaveOffsets110 : MainSaveOffsets
|
|||
public override int PatternFlag => PatternsPRO + (PatternCount2 * DesignPatternPRO.SIZE);
|
||||
public override int PatternTailor => PatternFlag + DesignPattern.SIZE;
|
||||
|
||||
public override int PatternsEditFlagStart => GSaveLandStart + 0x8BE150; // x100, HasPlayerEdited?
|
||||
public override int PatternsProEditFlagStart => PatternsEditFlagStart + 0x64; // x100, HasPlayerEdited?
|
||||
|
||||
public const int GSaveWeather = GSaveLandStart + 0x1e23c0;
|
||||
public override int WeatherArea => GSaveWeather + 0x14; // Hemisphere
|
||||
public override int WeatherRandSeed => GSaveWeather + 0x18;
|
||||
|
|
|
|||
|
|
@ -17,6 +17,9 @@ public class MainSaveOffsets111 : MainSaveOffsets
|
|||
public override int PatternFlag => PatternsPRO + (PatternCount2 * DesignPatternPRO.SIZE);
|
||||
public override int PatternTailor => PatternFlag + DesignPattern.SIZE;
|
||||
|
||||
public override int PatternsEditFlagStart => GSaveLandStart + 0x8BE150; // x100, HasPlayerEdited?
|
||||
public override int PatternsProEditFlagStart => PatternsEditFlagStart + 0x64; // x100, HasPlayerEdited?
|
||||
|
||||
public const int GSaveWeather = GSaveLandStart + 0x1e23c0;
|
||||
public override int WeatherArea => GSaveWeather + 0x14; // Hemisphere
|
||||
public override int WeatherRandSeed => GSaveWeather + 0x18;
|
||||
|
|
|
|||
|
|
@ -14,6 +14,9 @@ public class MainSaveOffsets12 : MainSaveOffsets
|
|||
public override int PatternFlag => PatternsPRO + (PatternCount * DesignPatternPRO.SIZE);
|
||||
public override int PatternTailor => PatternFlag + DesignPattern.SIZE;
|
||||
|
||||
public override int PatternsEditFlagStart => GSaveLandStart + 0x8BE150; // x100, HasPlayerEdited?
|
||||
public override int PatternsProEditFlagStart => PatternsEditFlagStart + 0x64; // x100, HasPlayerEdited?
|
||||
|
||||
public const int GSaveWeather = GSaveLandStart + 0x1D6FB0;
|
||||
public override int WeatherArea => GSaveWeather + 0x14; // Hemisphere
|
||||
public override int WeatherRandSeed => GSaveWeather + 0x18;
|
||||
|
|
|
|||
|
|
@ -14,6 +14,9 @@ public class MainSaveOffsets13 : MainSaveOffsets
|
|||
public override int PatternFlag => PatternsPRO + (PatternCount * DesignPatternPRO.SIZE);
|
||||
public override int PatternTailor => PatternFlag + DesignPattern.SIZE;
|
||||
|
||||
public override int PatternsEditFlagStart => GSaveLandStart + 0x8BE150; // x100, HasPlayerEdited?
|
||||
public override int PatternsProEditFlagStart => PatternsEditFlagStart + 0x64; // x100, HasPlayerEdited?
|
||||
|
||||
public const int GSaveWeather = GSaveLandStart + 0x1D6FB0;
|
||||
public override int WeatherArea => GSaveWeather + 0x14; // Hemisphere
|
||||
public override int WeatherRandSeed => GSaveWeather + 0x18;
|
||||
|
|
|
|||
|
|
@ -14,6 +14,9 @@ public class MainSaveOffsets14 : MainSaveOffsets
|
|||
public override int PatternFlag => PatternsPRO + (PatternCount * DesignPatternPRO.SIZE);
|
||||
public override int PatternTailor => PatternFlag + DesignPattern.SIZE;
|
||||
|
||||
public override int PatternsEditFlagStart => GSaveLandStart + 0x8BE150; // x100, HasPlayerEdited?
|
||||
public override int PatternsProEditFlagStart => PatternsEditFlagStart + 0x64; // x100, HasPlayerEdited?
|
||||
|
||||
public const int GSaveWeather = GSaveLandStart + 0x1D6FB0;
|
||||
public override int WeatherArea => GSaveWeather + 0x14; // Hemisphere
|
||||
public override int WeatherRandSeed => GSaveWeather + 0x18;
|
||||
|
|
|
|||
|
|
@ -14,6 +14,9 @@ public class MainSaveOffsets15 : MainSaveOffsets
|
|||
public override int PatternFlag => PatternsPRO + (PatternCount * DesignPatternPRO.SIZE);
|
||||
public override int PatternTailor => PatternFlag + DesignPattern.SIZE;
|
||||
|
||||
public override int PatternsEditFlagStart => GSaveLandStart + 0x8BE150; // x100, HasPlayerEdited?
|
||||
public override int PatternsProEditFlagStart => PatternsEditFlagStart + 0x64; // x100, HasPlayerEdited?
|
||||
|
||||
public const int GSaveWeather = GSaveLandStart + 0x1e23B0;
|
||||
public override int WeatherArea => GSaveWeather + 0x14; // Hemisphere
|
||||
public override int WeatherRandSeed => GSaveWeather + 0x18;
|
||||
|
|
|
|||
|
|
@ -14,6 +14,9 @@ public class MainSaveOffsets16 : MainSaveOffsets
|
|||
public override int PatternFlag => PatternsPRO + (PatternCount * DesignPatternPRO.SIZE);
|
||||
public override int PatternTailor => PatternFlag + DesignPattern.SIZE;
|
||||
|
||||
public override int PatternsEditFlagStart => GSaveLandStart + 0x8BE150; // x100, HasPlayerEdited?
|
||||
public override int PatternsProEditFlagStart => PatternsEditFlagStart + 0x64; // x100, HasPlayerEdited?
|
||||
|
||||
public const int GSaveWeather = GSaveLandStart + 0x1e23B0;
|
||||
public override int WeatherArea => GSaveWeather + 0x14; // Hemisphere
|
||||
public override int WeatherRandSeed => GSaveWeather + 0x18;
|
||||
|
|
|
|||
|
|
@ -14,6 +14,9 @@ public class MainSaveOffsets17 : MainSaveOffsets
|
|||
public override int PatternFlag => PatternsPRO + (PatternCount * DesignPatternPRO.SIZE);
|
||||
public override int PatternTailor => PatternFlag + DesignPattern.SIZE;
|
||||
|
||||
public override int PatternsEditFlagStart => GSaveLandStart + 0x8BE150; // x100, HasPlayerEdited?
|
||||
public override int PatternsProEditFlagStart => PatternsEditFlagStart + 0x64; // x100, HasPlayerEdited?
|
||||
|
||||
public const int GSaveWeather = GSaveLandStart + 0x1e23B0;
|
||||
public override int WeatherArea => GSaveWeather + 0x14; // Hemisphere
|
||||
public override int WeatherRandSeed => GSaveWeather + 0x18;
|
||||
|
|
|
|||
|
|
@ -15,6 +15,9 @@ public class MainSaveOffsets18 : MainSaveOffsets
|
|||
public override int PatternFlag => PatternsPRO + (PatternCount * DesignPatternPRO.SIZE);
|
||||
public override int PatternTailor => PatternFlag + DesignPattern.SIZE;
|
||||
|
||||
public override int PatternsEditFlagStart => GSaveLandStart + 0x8BE150; // x100, HasPlayerEdited?
|
||||
public override int PatternsProEditFlagStart => PatternsEditFlagStart + 0x64; // x100, HasPlayerEdited?
|
||||
|
||||
public const int GSaveWeather = GSaveLandStart + 0x1e23B0;
|
||||
public override int WeatherArea => GSaveWeather + 0x14; // Hemisphere
|
||||
public override int WeatherRandSeed => GSaveWeather + 0x18;
|
||||
|
|
|
|||
|
|
@ -16,6 +16,9 @@ public class MainSaveOffsets19 : MainSaveOffsets
|
|||
public override int PatternFlag => PatternsPRO + (PatternCount2 * DesignPatternPRO.SIZE);
|
||||
public override int PatternTailor => PatternFlag + DesignPattern.SIZE;
|
||||
|
||||
public override int PatternsEditFlagStart => GSaveLandStart + 0x8BE150; // x100, HasPlayerEdited?
|
||||
public override int PatternsProEditFlagStart => PatternsEditFlagStart + 0x64; // x100, HasPlayerEdited?
|
||||
|
||||
public const int GSaveWeather = GSaveLandStart + 0x1e23B0;
|
||||
public override int WeatherArea => GSaveWeather + 0x14; // Hemisphere
|
||||
public override int WeatherRandSeed => GSaveWeather + 0x18;
|
||||
|
|
|
|||
|
|
@ -17,6 +17,9 @@ public class MainSaveOffsets20 : MainSaveOffsets
|
|||
public override int PatternFlag => PatternsPRO + (PatternCount2 * DesignPatternPRO.SIZE);
|
||||
public override int PatternTailor => PatternFlag + DesignPattern.SIZE;
|
||||
|
||||
public override int PatternsEditFlagStart => GSaveLandStart + 0x8BE150; // x100, HasPlayerEdited?
|
||||
public override int PatternsProEditFlagStart => PatternsEditFlagStart + 0x64; // x100, HasPlayerEdited?
|
||||
|
||||
public const int GSaveWeather = GSaveLandStart + 0x1e35f0;
|
||||
public override int WeatherArea => GSaveWeather + 0x14; // Hemisphere
|
||||
public override int WeatherRandSeed => GSaveWeather + 0x18;
|
||||
|
|
|
|||
|
|
@ -445,18 +445,22 @@ private void B_EditLandFlags_Click(object sender, EventArgs e)
|
|||
|
||||
private void B_EditPatterns_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 patterns = SAV.Main.GetDesigns();
|
||||
using var editor = new PatternEditor(patterns);
|
||||
if (editor.ShowDialog() == DialogResult.OK)
|
||||
SAV.Main.SetDesigns(patterns);
|
||||
SAV.Main.SetDesigns(patterns, playerID, townID);
|
||||
}
|
||||
|
||||
private void B_EditPRODesigns_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 patterns = SAV.Main.GetDesignsPRO();
|
||||
using var editor = new PatternEditorPRO(patterns);
|
||||
if (editor.ShowDialog() == DialogResult.OK)
|
||||
SAV.Main.SetDesignsPRO(patterns);
|
||||
SAV.Main.SetDesignsPRO(patterns, playerID, townID);
|
||||
}
|
||||
|
||||
private void B_EditPatternFlag_Click(object sender, EventArgs e)
|
||||
|
|
|
|||
Binary file not shown.
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 109 KiB |
Loading…
Reference in New Issue
Block a user