internal static BuildList Parse(BinaryReader reader, MapParseContext context, ushort version, bool mapHasAssetList) { var result = new BuildList(); // BFME and C&C3 both used v1 for this chunk, but store the faction name differently :( // If the map file has an AssetList chunk, we assume it's C&C3. if (mapHasAssetList) { result.FactionName = reader.ReadUInt16PrefixedAsciiString(); } else { result.FactionNameProperty = AssetPropertyKey.Parse(reader, context); } var numBuildListItems = reader.ReadUInt32(); result.Items = new BuildListItem[numBuildListItems]; for (var i = 0; i < numBuildListItems; i++) { result.Items[i] = BuildListItem.Parse(reader, version, 1, mapHasAssetList); } return(result); }
internal static BuildListItem Parse(BinaryReader reader, ushort version, ushort versionThatHasUnknownBoolean, bool mapHasAssetList) { var result = new BuildListItem { BuildingName = reader.ReadUInt16PrefixedAsciiString(), Name = reader.ReadUInt16PrefixedAsciiString(), Position = reader.ReadVector3(), Angle = reader.ReadSingle(), StructureAlreadyBuilt = reader.ReadBooleanChecked() }; // BFME and C&C3 both used v1 for this chunk, but C&C3 has an extra boolean here. // If the map file has an AssetList chunk, we assume it's C&C3. if (mapHasAssetList && version >= versionThatHasUnknownBoolean) { result.Unknown1 = reader.ReadBooleanChecked(); } result.Rebuilds = reader.ReadUInt32(); result.Script = reader.ReadUInt16PrefixedAsciiString(); result.StartingHealth = reader.ReadUInt32(); // One of these unknown booleans is the "Unsellable" checkbox in Building Properties. result.Unknown2 = reader.ReadBooleanChecked(); result.Unknown3 = reader.ReadBooleanChecked(); result.Unknown4 = reader.ReadBooleanChecked(); return(result); }
internal static BuildListItem Parse(BinaryReader reader, ushort version) { var result = new BuildListItem { BuildingName = reader.ReadUInt16PrefixedAsciiString(), Name = reader.ReadUInt16PrefixedAsciiString(), Position = reader.ReadVector3(), Angle = reader.ReadSingle(), StructureAlreadyBuilt = reader.ReadBooleanChecked() }; if (version >= 6) { result.Unknown1 = reader.ReadBooleanChecked(); } result.Rebuilds = reader.ReadUInt32(); result.Script = reader.ReadUInt16PrefixedAsciiString(); result.StartingHealth = reader.ReadUInt32(); // One of these unknown booleans is the "Unsellable" checkbox in Building Properties. result.Unknown2 = reader.ReadBooleanChecked(); result.Unknown3 = reader.ReadBooleanChecked(); result.Unknown4 = reader.ReadBooleanChecked(); return(result); }
internal static Player Parse(BinaryReader reader, MapParseContext context, ushort version) { var result = new Player { Properties = AssetPropertyCollection.Parse(reader, context) }; var numBuildListItems = reader.ReadUInt32(); var buildListItems = new BuildListItem[numBuildListItems]; for (var i = 0; i < numBuildListItems; i++) { buildListItems[i] = BuildListItem.Parse(reader, version); } result.BuildList = buildListItems; return(result); }