Skip to content

Commit 5c1e587

Browse files
committed
- Added more docs about the mounts/peds
- Props/trees (.wft) etc can now be imported!
1 parent fd82133 commit 5c1e587

15 files changed

+1118
-39
lines changed

RSC6/Rsc6Bounds.cs

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -778,13 +778,13 @@ public override void Write(MetaNodeWriter writer)
778778
}
779779
}
780780

781-
[TC(typeof(EXP))] public class Rsc6BoundCurvedGeometry : Rsc6BoundGeometry
781+
[TC(typeof(EXP))] public class Rsc6BoundCurvedGeometry : Rsc6BoundGeometry //rage::phBoundCurvedGeometry
782782
{
783783
//Represents a physics bound with generalized vertex locations and polygons, including curved polygons and curved edges
784784

785785
public override ulong BlockLength => base.BlockLength + 32;
786-
public Rsc6Ptr<Rsc6BoundCurvedFace> CurvedFaces { get; set; } //m_CurvedFaces, phCurvedFace
787-
public Rsc6Ptr<Rsc6BoundCurvedEdge> CurvedEdges { get; set; } //m_CurvedEdges, phCurvedEdge
786+
public Rsc6RawLst<Rsc6BoundCurvedFace> CurvedFaces { get; set; } //m_CurvedFaces, phCurvedFace
787+
public Rsc6RawLst<Rsc6BoundCurvedEdge> CurvedEdges { get; set; } //m_CurvedEdges, phCurvedEdge
788788
public Rsc6RawArr<byte> CurvedFaceMatIndexList { get; set; } //m_CurvedFaceMatIndexLists, list of index numbers into this bound's list of material ids, one for each polygon
789789
public int NumCurvedFaces { get; set; } //m_NumCurvedFaces
790790
public int NumCurvedEdges { get; set; } //m_NumCurvedEdges
@@ -799,22 +799,25 @@ public Rsc6BoundCurvedGeometry(Rsc6BoundsType type = Rsc6BoundsType.CurvedGeomet
799799
public override void Read(Rsc6DataReader reader)
800800
{
801801
base.Read(reader); //phBoundGeometry
802-
CurvedFaces = reader.ReadPtr<Rsc6BoundCurvedFace>();
803-
CurvedEdges = reader.ReadPtr<Rsc6BoundCurvedEdge>();
802+
CurvedFaces = reader.ReadRawLstPtr<Rsc6BoundCurvedFace>();
803+
CurvedEdges = reader.ReadRawLstPtr<Rsc6BoundCurvedEdge>();
804804
CurvedFaceMatIndexList = reader.ReadRawArrPtr<byte>();
805805
NumCurvedFaces = reader.ReadInt32();
806806
NumCurvedEdges = reader.ReadInt32();
807807
Unknown_14h = reader.ReadUInt32();
808808
Unknown_18h = reader.ReadUInt32();
809809
Unknown_1Ch = reader.ReadUInt32();
810+
811+
CurvedFaces = reader.ReadRawLstItems(CurvedFaces, (uint)NumCurvedFaces);
812+
CurvedEdges = reader.ReadRawLstItems(CurvedEdges, (uint)NumCurvedEdges);
810813
CurvedFaceMatIndexList = reader.ReadRawArrItems(CurvedFaceMatIndexList, 6);
811814
}
812815

813816
public override void Write(Rsc6DataWriter writer)
814817
{
815818
base.Write(writer); //phBoundGeometry
816-
writer.WritePtr(CurvedFaces);
817-
writer.WritePtr(CurvedEdges);
819+
writer.WriteRawLst(CurvedFaces);
820+
writer.WriteRawLst(CurvedEdges);
818821
writer.WriteRawArr(CurvedFaceMatIndexList);
819822
writer.WriteInt32(NumCurvedFaces);
820823
writer.WriteInt32(NumCurvedEdges);
@@ -826,32 +829,29 @@ public override void Write(Rsc6DataWriter writer)
826829
public override void Read(MetaNodeReader reader)
827830
{
828831
base.Read(reader);
829-
CurvedFaces = new(reader.ReadNode<Rsc6BoundCurvedFace>("CurvedFaces"));
830-
CurvedEdges = new(reader.ReadNode<Rsc6BoundCurvedEdge>("CurvedEdges"));
832+
CurvedFaces = new(reader.ReadNodeArray<Rsc6BoundCurvedFace>("CurvedFaces"));
833+
CurvedEdges = new(reader.ReadNodeArray<Rsc6BoundCurvedEdge>("CurvedEdges"));
831834
CurvedFaceMatIndexList = new(reader.ReadByteArray("CurvedFaceMatIndexList"));
832-
NumCurvedFaces = reader.ReadInt32("NumCurvedFaces");
833-
NumCurvedEdges = reader.ReadInt32("NumCurvedEdges");
835+
NumCurvedFaces = CurvedFaces.Items?.Length ?? 0;
836+
NumCurvedEdges = CurvedEdges.Items?.Length ?? 0;
834837
}
835838

836839
public override void Write(MetaNodeWriter writer)
837840
{
838841
base.Write(writer);
839-
writer.WriteNode("CurvedFaces", CurvedFaces.Item);
840-
writer.WriteNode("CurvedEdges", CurvedEdges.Item);
842+
writer.WriteNodeArray("CurvedFaces", CurvedFaces.Items);
843+
writer.WriteNodeArray("CurvedEdges", CurvedEdges.Items);
841844
writer.WriteByteArray("CurvedFaceMatIndexList", CurvedFaceMatIndexList.Items);
842-
writer.WriteInt32("NumCurvedFaces", NumCurvedFaces);
843-
writer.WriteInt32("NumCurvedEdges", NumCurvedEdges);
844845
}
845846
}
846847

847-
[TC(typeof(EXP))] public class Rsc6BoundCurvedFace : IRsc6Block, MetaNode
848+
[TC(typeof(EXP))] public class Rsc6BoundCurvedFace : IRsc6Block, MetaNode //phCurvedFace
848849
{
849850
//Curved face for a curved geometry bound
850851

851852
public ulong FilePosition { get; set; }
852853
public ulong BlockLength => 96;
853854
public bool IsPhysical => false;
854-
855855
public Rsc6BoundPolyTriangle Polygons { get; set; }
856856
public Vector4 CurvatureCenter { get; set; } //m_CurvatureCenter, the center of curvature of the face
857857
public Vector4 UnitNormal { get; set; } //m_UnitNormal, the unit-length normal vector
@@ -876,8 +876,8 @@ public void Read(Rsc6DataReader reader)
876876
OuterRadius = reader.ReadSingle();
877877
InnerRadius = reader.ReadSingle();
878878
MinCosine = reader.ReadSingle();
879-
CurvedEdgeIndices = reader.ReadArray<ushort>(4);
880-
CurvedEdgePolyIndices = reader.ReadArray<ushort>(4);
879+
CurvedEdgeIndices = reader.ReadUInt16Arr(4);
880+
CurvedEdgePolyIndices = reader.ReadUInt16Arr(4);
881881
NumCurvedEdges = reader.ReadInt32();
882882
FourthVertex = reader.ReadUInt16();
883883
IsCircularFace = reader.ReadBoolean();
@@ -895,8 +895,8 @@ public void Write(Rsc6DataWriter writer)
895895
writer.WriteSingle(OuterRadius);
896896
writer.WriteSingle(InnerRadius);
897897
writer.WriteSingle(MinCosine);
898-
writer.WriteArray(CurvedEdgeIndices);
899-
writer.WriteArray(CurvedEdgePolyIndices);
898+
writer.WriteUInt16Array(CurvedEdgeIndices);
899+
writer.WriteUInt16Array(CurvedEdgePolyIndices);
900900
writer.WriteInt32(NumCurvedEdges);
901901
writer.WriteUInt16(FourthVertex);
902902
writer.WriteBoolean(IsCircularFace);
@@ -916,6 +916,7 @@ public void Read(MetaNodeReader reader)
916916
MinCosine = reader.ReadSingle("MinCosine");
917917
CurvedEdgeIndices = reader.ReadUInt16Array("CurvedEdgeIndices");
918918
CurvedEdgePolyIndices = reader.ReadUInt16Array("CurvedEdgePolyIndices");
919+
NumCurvedEdges = reader.ReadInt32("NumCurvedEdges");
919920
FourthVertex = reader.ReadUInt16("FourthVertex");
920921
IsCircularFace = reader.ReadBool("IsCircularFace");
921922
}
@@ -936,7 +937,7 @@ public void Write(MetaNodeWriter writer)
936937
}
937938
}
938939

939-
[TC(typeof(EXP))] public class Rsc6BoundCurvedEdge : IRsc6Block, MetaNode
940+
[TC(typeof(EXP))] public class Rsc6BoundCurvedEdge : IRsc6Block, MetaNode //phCurvedEdge
940941
{
941942
public ulong FilePosition { get; set; }
942943
public ulong BlockLength => 48;
@@ -953,7 +954,7 @@ public void Read(Rsc6DataReader reader)
953954
CurvatureCenter = reader.ReadVector4();
954955
PlaneNormal = reader.ReadVector4();
955956
Radius = reader.ReadSingle();
956-
VertexIndices = reader.ReadArray<int>(2);
957+
VertexIndices = reader.ReadInt32Arr(2);
957958
Unknown_2Ch = reader.ReadUInt32();
958959
}
959960

RSC6/Rsc6Data.cs

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,17 @@ public ushort[] ReadUInt16Arr(int count)
235235
return array;
236236
}
237237

238+
public int[] ReadInt32Arr(int count)
239+
{
240+
var array = new int[count];
241+
for (int i = 0; i < count; i++)
242+
{
243+
array[i] = BufferUtil.ReadInt(Data, GetDataOffset());
244+
Position += 4;
245+
}
246+
return array;
247+
}
248+
238249
public uint[] ReadUInt32Arr(int count)
239250
{
240251
var array = new uint[count];
@@ -281,19 +292,6 @@ public uint[] ReadUInt32Arr(int count)
281292
return ptr;
282293
}
283294

284-
public Rsc6PtrUnmanaged<T> ReadPtr<T>() where T : unmanaged
285-
{
286-
var ptr = new Rsc6PtrUnmanaged<T>();
287-
ptr.ReadPtr(this);
288-
return ptr;
289-
}
290-
291-
public Rsc6PtrUnmanaged<T> ReadItem<T>(Rsc6PtrUnmanaged<T> ptr) where T : unmanaged
292-
{
293-
ptr.ReadItem(this);
294-
return ptr;
295-
}
296-
297295
public Rsc6PtrUnmanaged<T> ReadPtrUnmanaged<T>() where T : unmanaged
298296
{
299297
var ptr = new Rsc6PtrUnmanaged<T>();
@@ -731,6 +729,14 @@ public void WriteHalf4(Half4 value)
731729
this.WriteBytes(buffer);
732730
}
733731

732+
public void WriteUInt16Array(ushort[] arr)
733+
{
734+
for (int i = 0; i < arr.Length; i++)
735+
{
736+
this.WriteUInt16(arr[i]);
737+
}
738+
}
739+
734740
public void WriteInt32Array(int[] arr)
735741
{
736742
for (int i = 0; i < arr.Length; i++)

0 commit comments

Comments
 (0)