Skip to content

Commit ddef32e

Browse files
committed
Minor Updates
1 parent 224bb18 commit ddef32e

39 files changed

+836
-103
lines changed

DbpfLibrary/CPF/Cpf.cs

+65-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323

2424
namespace Sims2Tools.DBPF.CPF
2525
{
26-
public abstract class Cpf : DBPFResource, IDisposable
26+
public abstract class Cpf : DBPFResource, IDbpfScriptable, IDisposable
2727
{
2828
private static readonly byte[] SIGNATURE = { 0xE0, 0x50, 0xE7, 0xCB, 0x02, 0x00 };
2929

@@ -274,6 +274,70 @@ public CpfItem GetOrAddItem(string name, MetaData.DataTypes datatype)
274274
return AddItem(new CpfItem(name, datatype));
275275
}
276276

277+
#region IDBPFScriptable
278+
public bool Assert(string item, string value)
279+
{
280+
// TODO - IDBPFScriptable - Assert
281+
throw new NotImplementedException();
282+
}
283+
284+
public bool Assignment(string item, string value)
285+
{
286+
CpfItem cpfItem = GetItem(item);
287+
288+
if (cpfItem != null)
289+
{
290+
switch (cpfItem.DataType)
291+
{
292+
case MetaData.DataTypes.dtString:
293+
{
294+
cpfItem.StringValue = value;
295+
return true;
296+
}
297+
case MetaData.DataTypes.dtUInteger:
298+
{
299+
uint val;
300+
301+
if (value.StartsWith("0x"))
302+
{
303+
val = UInt32.Parse(value.Substring(2), System.Globalization.NumberStyles.HexNumber);
304+
}
305+
else
306+
{
307+
val = UInt32.Parse(value);
308+
}
309+
310+
cpfItem.UIntegerValue = val;
311+
return true;
312+
}
313+
case MetaData.DataTypes.dtInteger:
314+
{
315+
cpfItem.IntegerValue = Int32.Parse(value);
316+
return true;
317+
}
318+
case MetaData.DataTypes.dtBoolean:
319+
{
320+
// TODO - IDBPFScriptable - Assignment
321+
throw new NotImplementedException();
322+
}
323+
case MetaData.DataTypes.dtSingle:
324+
{
325+
// TODO - IDBPFScriptable - Assignment
326+
throw new NotImplementedException();
327+
}
328+
}
329+
}
330+
331+
return false;
332+
}
333+
334+
public IDbpfScriptable Indexed(int index)
335+
{
336+
// TODO - IDBPFScriptable - Indexed
337+
throw new NotImplementedException();
338+
}
339+
#endregion
340+
277341
protected XmlElement AddXml(XmlElement parent, string name)
278342
{
279343
XmlElement element = XmlHelper.CreateResElement(parent, name, this);

DbpfLibrary/DBPFScriptable.cs

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/*
2+
* Sims2Tools - a toolkit for manipulating The Sims 2 DBPF files
3+
*
4+
* William Howard - 2020-2024
5+
*
6+
* Parts of this code derived from the SimPE project - https://sourceforge.net/projects/simpe/
7+
* Parts of this code derived from the SimUnity2 project - https://github.com/LazyDuchess/SimUnity2
8+
* Parts of this code may have been decompiled with the JetBrains decompiler
9+
*
10+
* Permission granted to use this code in any way, except to claim it as your own or sell it
11+
*/
12+
13+
namespace Sims2Tools.DBPF
14+
{
15+
public interface IDbpfScriptable
16+
{
17+
bool Assert(string item, string value);
18+
19+
bool Assignment(string item, string value);
20+
21+
IDbpfScriptable Indexed(int index);
22+
}
23+
}

DbpfLibrary/DbpfLibrary.csproj

+1
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@
8181
<Compile Include="CPF\CpfItem.cs" />
8282
<Compile Include="CTSS\Ctss.cs" />
8383
<Compile Include="DBPFData.cs" />
84+
<Compile Include="DBPFScriptable.cs" />
8485
<Compile Include="Groups\GroupsFile.cs" />
8586
<Compile Include="Groups\GROP\GropItem.cs" />
8687
<Compile Include="Groups\GROP\Grop.cs" />

DbpfLibrary/OBJD/Objd.cs

+49-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
namespace Sims2Tools.DBPF.OBJD
2323
{
24-
public class Objd : DBPFResource, ISgResource, IDisposable
24+
public class Objd : DBPFResource, IDbpfScriptable, ISgResource, IDisposable
2525
{
2626
// See https://modthesims.info/wiki.php?title=List_of_Formats_by_Name
2727
public static readonly TypeTypeID TYPE = (TypeTypeID)0x4F424A44;
@@ -195,5 +195,53 @@ public SgResourceList SgNeededResources()
195195
{
196196
return new SgResourceList();
197197
}
198+
199+
public bool Assert(string item, string value)
200+
{
201+
// TODO - IDBPFScriptable - Assert
202+
throw new NotImplementedException();
203+
}
204+
205+
public bool Assignment(string item, string value)
206+
{
207+
if (item.Equals("filename"))
208+
{
209+
SetKeyName(value);
210+
return true;
211+
}
212+
else if (item.Equals("guid"))
213+
{
214+
uint guid = UInt32.Parse(value.Substring(2), System.Globalization.NumberStyles.HexNumber);
215+
SetRawData(ObjdIndex.Guid1, (ushort)(guid & 0x0000FFFF));
216+
SetRawData(ObjdIndex.Guid2, (ushort)((guid & 0xFFFF0000) >> 16));
217+
return true;
218+
}
219+
else
220+
{
221+
if (Enum.TryParse(item, out ObjdIndex objdIndex))
222+
{
223+
ushort val;
224+
if (value.StartsWith("0x"))
225+
{
226+
val = UInt16.Parse(value.Substring(2), System.Globalization.NumberStyles.HexNumber);
227+
}
228+
else
229+
{
230+
val = UInt16.Parse(value);
231+
}
232+
233+
SetRawData(objdIndex, val);
234+
return true;
235+
}
236+
237+
return false;
238+
}
239+
}
240+
241+
public IDbpfScriptable Indexed(int index)
242+
{
243+
// TODO - IDBPFScriptable - Indexed
244+
throw new NotImplementedException();
245+
}
198246
}
199247
}

DbpfLibrary/SceneGraph/IDR/Idr.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ public override void Serialize(DbpfWriter writer)
152152
writeEnd = writer.Position;
153153

154154
Debug.Assert((writeEnd - writeStart) == FileSize);
155-
if (!IsDirty) Debug.Assert((writeEnd - writeStart) == (readEnd - readStart));
155+
if (!IsDirty) Debug.Assert(((readEnd - readStart) == 0) || ((writeEnd - writeStart) == (readEnd - readStart)));
156156
#endif
157157
}
158158

DbpfLibrary/SceneGraph/RCOL/Rcol.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -397,7 +397,7 @@ public override void Serialize(DbpfWriter writer)
397397
writeEnd = writer.Position;
398398

399399
Debug.Assert((writeEnd - writeStart) == FileSize);
400-
if (!IsDirty) Debug.Assert((writeEnd - writeStart) == (readEnd - readStart));
400+
if (!IsDirty) Debug.Assert(((readEnd - readStart) == 0) || ((writeEnd - writeStart) == (readEnd - readStart)));
401401
#endif
402402
}
403403

DbpfLibrary/SceneGraph/RcolBlocks/CBoneDataExtension.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ public override void Serialize(DbpfWriter writer)
9393
writeEnd = writer.Position;
9494

9595
Debug.Assert((writeEnd - writeStart) == FileSize);
96-
if (!IsDirty) Debug.Assert((writeEnd - writeStart) == (readEnd - readStart));
96+
if (!IsDirty) Debug.Assert(((readEnd - readStart) == 0) || ((writeEnd - writeStart) == (readEnd - readStart)));
9797
#endif
9898
}
9999

DbpfLibrary/SceneGraph/RcolBlocks/CDataListExtension.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ public override void Serialize(DbpfWriter writer)
102102
writeEnd = writer.Position;
103103

104104
Debug.Assert((writeEnd - writeStart) == FileSize);
105-
if (!IsDirty) Debug.Assert((writeEnd - writeStart) == (readEnd - readStart));
105+
if (!IsDirty) Debug.Assert(((readEnd - readStart) == 0) || ((writeEnd - writeStart) == (readEnd - readStart)));
106106
#endif
107107
}
108108

DbpfLibrary/SceneGraph/RcolBlocks/CDirectionalLight.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ public override void Serialize(DbpfWriter writer)
175175
writeEnd = writer.Position;
176176

177177
Debug.Assert((writeEnd - writeStart) == GetFileSize());
178-
if (!IsDirty) Debug.Assert((writeEnd - writeStart) == (readEnd - readStart));
178+
if (!IsDirty) Debug.Assert(((readEnd - readStart) == 0) || ((writeEnd - writeStart) == (readEnd - readStart)));
179179
#endif
180180
}
181181

DbpfLibrary/SceneGraph/RcolBlocks/CGeometryDataContainer.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ public override void Serialize(DbpfWriter writer)
197197
writeEnd = writer.Position;
198198

199199
Debug.Assert((writeEnd - writeStart) == FileSize);
200-
if (!IsDirty) Debug.Assert((writeEnd - writeStart) == (readEnd - readStart));
200+
if (!IsDirty) Debug.Assert(((readEnd - readStart) == 0) || ((writeEnd - writeStart) == (readEnd - readStart)));
201201
#endif
202202
}
203203

DbpfLibrary/SceneGraph/RcolBlocks/CGeometryNode.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ public override void Serialize(DbpfWriter writer)
164164
writeEnd = writer.Position;
165165

166166
Debug.Assert((writeEnd - writeStart) == FileSize);
167-
if (!IsDirty) Debug.Assert((writeEnd - writeStart) == (readEnd - readStart));
167+
if (!IsDirty) Debug.Assert(((readEnd - readStart) == 0) || ((writeEnd - writeStart) == (readEnd - readStart)));
168168
#endif
169169
}
170170

DbpfLibrary/SceneGraph/RcolBlocks/CImageData.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ public override void Serialize(DbpfWriter writer)
199199
writeEnd = writer.Position;
200200

201201
Debug.Assert((writeEnd - writeStart) == FileSize);
202-
if (!IsDirty) Debug.Assert((writeEnd - writeStart) == (readEnd - readStart));
202+
if (!IsDirty) Debug.Assert(((readEnd - readStart) == 0) || ((writeEnd - writeStart) == (readEnd - readStart)));
203203
#endif
204204
}
205205

DbpfLibrary/SceneGraph/RcolBlocks/CLevelInfo.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -212,15 +212,15 @@ public override void Serialize(DbpfWriter writer)
212212
writeEnd = writer.Position;
213213

214214
Debug.Assert((writeEnd - writeStart) == FileSize);
215-
if (!IsDirty) Debug.Assert((writeEnd - writeStart) == (readEnd - readStart));
215+
if (!IsDirty) Debug.Assert(((readEnd - readStart) == 0) || ((writeEnd - writeStart) == (readEnd - readStart)));
216216
#endif
217217
#endif
218218

219219
#if DEBUG
220220
writeEnd = writer.Position;
221221

222222
Debug.Assert((writeEnd - writeStart) == FileSize);
223-
if (!IsDirty) Debug.Assert((writeEnd - writeStart) == (readEnd - readStart));
223+
if (!IsDirty) Debug.Assert(((readEnd - readStart) == 0) || ((writeEnd - writeStart) == (readEnd - readStart)));
224224
#endif
225225
}
226226

DbpfLibrary/SceneGraph/RcolBlocks/CLightRefNode.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ public override void Serialize(DbpfWriter writer)
157157
writeEnd = writer.Position;
158158

159159
Debug.Assert((writeEnd - writeStart) == FileSize);
160-
if (!IsDirty) Debug.Assert((writeEnd - writeStart) == (readEnd - readStart));
160+
if (!IsDirty) Debug.Assert(((readEnd - readStart) == 0) || ((writeEnd - writeStart) == (readEnd - readStart)));
161161
#endif
162162
}
163163

DbpfLibrary/SceneGraph/RcolBlocks/CMaterialDefinition.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ public override void Serialize(DbpfWriter writer)
281281
writeEnd = writer.Position;
282282

283283
Debug.Assert((writeEnd - writeStart) == FileSize);
284-
if (!IsDirty) Debug.Assert((writeEnd - writeStart) == (readEnd - readStart));
284+
if (!IsDirty) Debug.Assert(((readEnd - readStart) == 0) || ((writeEnd - writeStart) == (readEnd - readStart)));
285285
#endif
286286
}
287287

DbpfLibrary/SceneGraph/RcolBlocks/CObjectGraphNode.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ public override void Serialize(DbpfWriter writer)
168168
writeEnd = writer.Position;
169169

170170
Debug.Assert((writeEnd - writeStart) == FileSize);
171-
if (!IsDirty) Debug.Assert((writeEnd - writeStart) == (readEnd - readStart));
171+
if (!IsDirty) Debug.Assert(((readEnd - readStart) == 0) || ((writeEnd - writeStart) == (readEnd - readStart)));
172172
#endif
173173
}
174174

DbpfLibrary/SceneGraph/RcolBlocks/CResourceNode.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ public override void Serialize(DbpfWriter writer)
221221
writeEnd = writer.Position;
222222

223223
Debug.Assert((writeEnd - writeStart) == FileSize);
224-
if (!IsDirty) Debug.Assert((writeEnd - writeStart) == (readEnd - readStart));
224+
if (!IsDirty) Debug.Assert(((readEnd - readStart) == 0) || ((writeEnd - writeStart) == (readEnd - readStart)));
225225
#endif
226226
}
227227

DbpfLibrary/SceneGraph/RcolBlocks/CShape.cs

+16-2
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ internal void Serialize(DbpfWriter writer)
185185
writeEnd = writer.Position;
186186

187187
Debug.Assert((writeEnd - writeStart) == FileSize);
188-
if (!parent.IsDirty) Debug.Assert((writeEnd - writeStart) == (readEnd - readStart));
188+
if (!parent.IsDirty) Debug.Assert(((readEnd - readStart) == 0) || ((writeEnd - writeStart) == (readEnd - readStart)));
189189
#endif
190190
}
191191

@@ -303,6 +303,20 @@ public void UpdatePart(int index, string filename)
303303
_isDirty = true;
304304
}
305305

306+
public void DeleteSubset(string subsetName)
307+
{
308+
foreach (ShapePart part in parts)
309+
{
310+
if (part.Subset.Equals(subsetName))
311+
{
312+
parts.Remove(part);
313+
314+
_isDirty = true;
315+
return;
316+
}
317+
}
318+
}
319+
306320
public void RenameSubset(string oldName, string newName)
307321
{
308322
foreach (ShapePart part in parts)
@@ -486,7 +500,7 @@ public override void Serialize(DbpfWriter writer)
486500
writeEnd = writer.Position;
487501

488502
Debug.Assert((writeEnd - writeStart) == FileSize);
489-
if (!IsDirty) Debug.Assert((writeEnd - writeStart) == (readEnd - readStart));
503+
if (!IsDirty) Debug.Assert(((readEnd - readStart) == 0) || ((writeEnd - writeStart) == (readEnd - readStart)));
490504
#endif
491505
}
492506

DbpfLibrary/SceneGraph/RcolBlocks/CShapeRefNode.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,7 @@ public override void Serialize(DbpfWriter writer)
322322
writeEnd = writer.Position;
323323

324324
Debug.Assert((writeEnd - writeStart) == FileSize);
325-
if (!IsDirty) Debug.Assert((writeEnd - writeStart) == (readEnd - readStart));
325+
if (!IsDirty) Debug.Assert(((readEnd - readStart) == 0) || ((writeEnd - writeStart) == (readEnd - readStart)));
326326
#endif
327327
}
328328

DbpfLibrary/SceneGraph/RcolBlocks/CTransformNode.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ public override void Serialize(DbpfWriter writer)
195195
writeEnd = writer.Position;
196196

197197
Debug.Assert((writeEnd - writeStart) == FileSize);
198-
if (!IsDirty) Debug.Assert((writeEnd - writeStart) == (readEnd - readStart));
198+
if (!IsDirty) Debug.Assert(((readEnd - readStart) == 0) || ((writeEnd - writeStart) == (readEnd - readStart)));
199199
#endif
200200
}
201201

DbpfLibrary/SceneGraph/RcolBlocks/CViewerRefNode.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ public override void Serialize(DbpfWriter writer)
164164
writeEnd = writer.Position;
165165

166166
Debug.Assert((writeEnd - writeStart) == FileSize);
167-
if (!IsDirty) Debug.Assert((writeEnd - writeStart) == (readEnd - readStart));
167+
if (!IsDirty) Debug.Assert(((readEnd - readStart) == 0) || ((writeEnd - writeStart) == (readEnd - readStart)));
168168
#endif
169169
}
170170

DbpfLibrary/SceneGraph/RcolBlocks/CViewerRefNodeRecursive.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ public override void Serialize(DbpfWriter writer)
180180
writeEnd = writer.Position;
181181

182182
Debug.Assert((writeEnd - writeStart) == FileSize);
183-
if (!IsDirty) Debug.Assert((writeEnd - writeStart) == (readEnd - readStart));
183+
if (!IsDirty) Debug.Assert(((readEnd - readStart) == 0) || ((writeEnd - writeStart) == (readEnd - readStart)));
184184
#endif
185185
}
186186

0 commit comments

Comments
 (0)