mirror of
https://github.com/simtactics/mysimulation.git
synced 2025-03-19 08:21:22 +00:00
166 lines
5.1 KiB
C#
166 lines
5.1 KiB
C#
|
using FSO.Files.Utils;
|
|||
|
using System.IO;
|
|||
|
|
|||
|
namespace FSO.Files.Formats.IFF.Chunks
|
|||
|
{
|
|||
|
public class SIMI : IffChunk
|
|||
|
{
|
|||
|
public uint Version;
|
|||
|
public short[] GlobalData;
|
|||
|
|
|||
|
public short Unknown1;
|
|||
|
public int Unknown2;
|
|||
|
public int Unknown3;
|
|||
|
public int GUID1;
|
|||
|
public int GUID2;
|
|||
|
public int Unknown4;
|
|||
|
public int LotValue;
|
|||
|
public int ObjectsValue;
|
|||
|
public int ArchitectureValue;
|
|||
|
|
|||
|
public SIMIBudgetDay[] BudgetDays;
|
|||
|
|
|||
|
public int PurchaseValue
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
return LotValue + ObjectsValue + (ArchitectureValue * 7) / 10;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override void Read(IffFile iff, Stream stream)
|
|||
|
{
|
|||
|
using (var io = IoBuffer.FromStream(stream, ByteOrder.LITTLE_ENDIAN))
|
|||
|
{
|
|||
|
io.ReadUInt32(); //pad
|
|||
|
Version = io.ReadUInt32();
|
|||
|
string magic = io.ReadCString(4);
|
|||
|
var items = (Version > 0x3F) ? 0x40 : 0x20;
|
|||
|
|
|||
|
GlobalData = new short[38];
|
|||
|
|
|||
|
for (int i=0; i<items; i++)
|
|||
|
{
|
|||
|
var dat = io.ReadInt16();
|
|||
|
if (i < GlobalData.Length)
|
|||
|
GlobalData[i] = dat;
|
|||
|
}
|
|||
|
|
|||
|
Unknown1 = io.ReadInt16();
|
|||
|
Unknown2 = io.ReadInt32();
|
|||
|
Unknown3 = io.ReadInt32();
|
|||
|
GUID1 = io.ReadInt32();
|
|||
|
GUID2 = io.ReadInt32();
|
|||
|
Unknown4 = io.ReadInt32();
|
|||
|
LotValue = io.ReadInt32();
|
|||
|
ObjectsValue = io.ReadInt32();
|
|||
|
ArchitectureValue = io.ReadInt32();
|
|||
|
|
|||
|
//short Unknown1 (0x7E1E, 0x702B)
|
|||
|
//int Unknown2 (2 on house 1, 1 on house 66)
|
|||
|
//int Unknown3 (0)
|
|||
|
//int GUID1
|
|||
|
//int GUID2 (changes on bulldoze)
|
|||
|
//int Unknown4 (0)
|
|||
|
//int LotValue
|
|||
|
//int ObjectsValue
|
|||
|
//int ArchitectureValue
|
|||
|
|
|||
|
//the sims tracked a sim's budget over the past few days of gameplay.
|
|||
|
//this drove the budget window, which never actually came of much use to anyone ever.
|
|||
|
|
|||
|
BudgetDays = new SIMIBudgetDay[6];
|
|||
|
for (int i=0; i<6; i++)
|
|||
|
{
|
|||
|
BudgetDays[i] = new SIMIBudgetDay(io);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public override bool Write(IffFile iff, Stream stream)
|
|||
|
{
|
|||
|
using (var io = IoWriter.FromStream(stream, ByteOrder.LITTLE_ENDIAN))
|
|||
|
{
|
|||
|
io.WriteInt32(0);
|
|||
|
io.WriteInt32(0x3E);
|
|||
|
io.WriteCString("IMIS", 4);
|
|||
|
var items = (Version > 0x3E) ? 0x40 : 0x20;
|
|||
|
|
|||
|
GlobalData = new short[38];
|
|||
|
|
|||
|
for (int i = 0; i < items; i++)
|
|||
|
{
|
|||
|
if (i < GlobalData.Length)
|
|||
|
io.WriteInt16(GlobalData[i]);
|
|||
|
else
|
|||
|
io.WriteInt16(0);
|
|||
|
}
|
|||
|
|
|||
|
io.WriteInt16(Unknown1);
|
|||
|
io.WriteInt32(Unknown2);
|
|||
|
io.WriteInt32(Unknown3);
|
|||
|
io.WriteInt32(GUID1);
|
|||
|
io.WriteInt32(GUID2);
|
|||
|
io.WriteInt32(Unknown4);
|
|||
|
io.WriteInt32(LotValue);
|
|||
|
io.WriteInt32(ObjectsValue);
|
|||
|
io.WriteInt32(ArchitectureValue);
|
|||
|
|
|||
|
for (int i = 0; i < 6; i++)
|
|||
|
{
|
|||
|
BudgetDays[i].Write(io);
|
|||
|
}
|
|||
|
}
|
|||
|
return true;
|
|||
|
}
|
|||
|
|
|||
|
public class SIMIBudgetDay
|
|||
|
{
|
|||
|
public int Valid;
|
|||
|
public int MiscIncome;
|
|||
|
public int JobIncome;
|
|||
|
|
|||
|
public int ServiceExpense;
|
|||
|
public int FoodExpense;
|
|||
|
public int BillsExpense;
|
|||
|
|
|||
|
public int MiscExpense;
|
|||
|
public int HouseholdExpense;
|
|||
|
public int ArchitectureExpense;
|
|||
|
|
|||
|
public SIMIBudgetDay()
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
public SIMIBudgetDay(IoBuffer io)
|
|||
|
{
|
|||
|
Valid = io.ReadInt32();
|
|||
|
if (Valid == 0) return;
|
|||
|
MiscIncome = io.ReadInt32();
|
|||
|
JobIncome = io.ReadInt32();
|
|||
|
ServiceExpense = io.ReadInt32();
|
|||
|
FoodExpense = io.ReadInt32();
|
|||
|
BillsExpense = io.ReadInt32();
|
|||
|
MiscExpense = io.ReadInt32();
|
|||
|
HouseholdExpense = io.ReadInt32();
|
|||
|
ArchitectureExpense = io.ReadInt32();
|
|||
|
}
|
|||
|
|
|||
|
public void Write(IoWriter io)
|
|||
|
{
|
|||
|
io.WriteInt32(Valid);
|
|||
|
if (Valid == 0) return;
|
|||
|
io.WriteInt32(MiscIncome);
|
|||
|
io.WriteInt32(JobIncome);
|
|||
|
io.WriteInt32(ServiceExpense);
|
|||
|
io.WriteInt32(FoodExpense);
|
|||
|
io.WriteInt32(BillsExpense);
|
|||
|
io.WriteInt32(MiscIncome);
|
|||
|
io.WriteInt32(HouseholdExpense);
|
|||
|
io.WriteInt32(ArchitectureExpense);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|