5 Commits
1.5.2 ... 1.5.3

Author SHA1 Message Date
Matt Nadareski
a06ff8f8b3 Bump version 2024-11-20 14:03:14 -05:00
Matt Nadareski
7269e91913 Partially add VBSP lump 40 2024-11-19 14:34:32 -05:00
Matt Nadareski
c118271565 Add VBSP lump 29 2024-11-19 14:30:54 -05:00
Matt Nadareski
71ccbc6ab1 Fix issues found during Serialization update 2024-11-19 12:47:09 -05:00
Matt Nadareski
ed5c1a7173 Use array-of-array instead of multidimensional array 2024-11-18 23:35:47 -05:00
17 changed files with 153 additions and 24 deletions

View File

@@ -34,6 +34,11 @@ namespace SabreTools.Models.BSP
/// </summary>
public VerticesLump? VerticesLump { get; set; }
/// <summary>
/// LUMP_VISIBILITY [4]
/// </summary>
public VisibilityLump? VisibilityLump { get; set; }
/// <summary>
/// LUMP_NODES [5]
/// </summary>

View File

@@ -17,6 +17,7 @@ namespace SabreTools.Models.BSP
/// Lumps
/// </summary>
/// <remarks>15 entries</remarks>
public BspLumpEntry[]? Lumps { get; set; }
[MarshalAs(UnmanagedType.ByValArray, SizeConst = Constants.BSP_HEADER_LUMPS)]
public BspLumpEntry[]? Lumps;
}
}

View File

@@ -25,7 +25,7 @@ namespace SabreTools.Models.BSP
/// <summary>
/// Start position used for orientation
/// </summary>
public Vector3D startPosition;
public Vector3D StartPosition;
/// <summary>
/// Index into LUMP_DISP_VERTS.

View File

@@ -13,6 +13,6 @@ namespace SabreTools.Models.BSP
/// Lightmap RGB values
/// </summary>
/// <remarks>Array of 3-byte values</remarks>
public byte[,]? Lightmap { get; set; }
public byte[][]? Lightmap { get; set; }
}
}

View File

@@ -41,6 +41,6 @@ namespace SabreTools.Models.BSP
/// <summary>
/// <see cref="VertexIndexCount">
/// </summary>
public int[]? VertexIndices;
public int[]? VertexIndicies;
}
}

View File

@@ -0,0 +1,43 @@
namespace SabreTools.Models.BSP
{
/// <summary>
/// The Pakfile lump (Lump 40) is a special lump that can contains
/// multiple files which are embedded into the bsp file. Usually,
/// they contain special texture (.vtf) and material (.vmt) files
/// which are used to store the reflection maps from env_cubemap
/// entities in the map; these files are built and placed in the
/// Pakfile lump when the buildcubemaps console command is executed.
/// The Pakfile can optionally contain such things as custom textures
/// and prop models used in the map, and are placed into the bsp file
/// by using the BSPZIP program (or alternate programs such as Pakrat).
/// These files are integrated into the game engine's file system
/// and will be loaded preferentially before externally located
/// files are used.
///
/// The format of the Pakfile lump is identical to that used by the
/// Zip compression utility when no compression is specified (i.e.,
/// the individual files are stored in uncompressed format). In some
/// branches, such as , LZMA compression can be used as well. If the
/// Pakfile lump is extracted and written to a file, it can therefore
/// be opened with WinZip and similar programs.
///
/// The header public/zip_uncompressed.h defines the structures
/// present in the Pakfile lump. The last element in the lump is a
/// ZIP_EndOfCentralDirRecord structure. This points to an array of
/// ZIP_FileHeader structures immediately preceeding it, one for each
/// file present in the Pak. Each of these headers then point to
/// ZIP_LocalFileHeader structures that are followed by that file's
/// data.
///
/// The Pakfile lump is usually the last element of the bsp file.
/// </summary>
/// <see href="https://developer.valvesoftware.com/wiki/BSP_(Source)"/>
public sealed class PakfileLump
{
/// <summary>
/// Pakfile data
/// </summary>
/// TODO: Split and/or decompress data?
public byte[]? Data;
}
}

View File

@@ -0,0 +1,11 @@
namespace SabreTools.Models.BSP
{
/// <see href="https://developer.valvesoftware.com/wiki/BSP_(Source)"/>
public sealed class PhysCollideLump : Lump
{
/// <summary>
/// Models
/// </summary>
public PhysModel[]? Models { get; set; }
}
}

View File

@@ -0,0 +1,42 @@
using System.Runtime.InteropServices;
namespace SabreTools.Models.BSP
{
/// <summary>
/// The physcollide lump (Lump 29) contains physics data for the world.
/// </summary>
/// <see href="https://developer.valvesoftware.com/wiki/BSP_(Source)"/>
[StructLayout(LayoutKind.Sequential)]
public sealed class PhysModel
{
/// <summary>
/// Perhaps the index of the model to which this physics model applies?
/// </summary>
public int ModelIndex;
/// <summary>
/// Total size of the collision data sections
/// </summary>
public int DataSize;
/// <summary>
/// Size of the text section
/// </summary>
public int KeydataSize;
/// <summary>
/// Number of collision data sections
/// </summary>
public int SolidCount;
/// <summary>
/// Collision data of length <see cref="SolidCount"/>
/// </summary>
public PhysSolid[]? Solids;
/// <summary>
/// Key data of size <see cref="KeydataSize"/>
/// </summary>
public byte[]? TextData;
}
}

View File

@@ -0,0 +1,25 @@
using System.Runtime.InteropServices;
namespace SabreTools.Models.BSP
{
/// <summary>
/// The last two parts appear to be identical to the PHY file format,
/// which means their exact contents are unknown. Note that the
/// compactsurfaceheader_t structure contains the data size of each
/// collision data section (including the rest of the header)
/// </summary>
/// <see href="https://developer.valvesoftware.com/wiki/BSP_(Source)"/>
[StructLayout(LayoutKind.Sequential)]
public sealed class PhysSolid
{
/// <summary>
/// Size of the collision data
/// </summary>
public int Size;
/// <summary>
/// Collision data of length <see cref="Size"/>
/// </summary>
public byte[]? CollisionData;
}
}

View File

@@ -19,6 +19,6 @@ namespace SabreTools.Models.BSP
/// Model name
/// </summary>
/// <remarks>[dictEntries][128]</remarks>
public char[,]? Name;
public char[][]? Name;
}
}

View File

@@ -153,7 +153,7 @@ namespace SabreTools.Models.BSP
/// <summary>
/// LUMP_DISPINFO [26]
/// </summary>
public DispInfosLump? DispInfoLump { get; set; }
public DispInfosLump? DispInfosLump { get; set; }
/// <summary>
/// LUMP_ORIGINALFACES [27]
@@ -166,8 +166,10 @@ namespace SabreTools.Models.BSP
/// TODO: Find definition and implement
// public PhysDispLump? PhysDispLump { get; set; }
// TODO: Implement Lump 29
// https://developer.valvesoftware.com/wiki/BSP_(Source)#Physics
/// <summary>
/// LUMP_PHYSCOLLIDE [29]
/// </summary>
public PhysCollideLump? PhysCollideLump { get; set; }
/// <summary>
/// LUMP_VERTNORMALS [30]
@@ -190,7 +192,7 @@ namespace SabreTools.Models.BSP
/// <summary>
/// LUMP_DISP_VERTS [33]
/// </summary>
public DispVertsLump? DispVertLump { get; set; }
public DispVertsLump? DispVertsLump { get; set; }
/// <summary>
/// LUMP_DISP_LIGHTMAP_SAMPLE_POSITIONS [34]
@@ -227,8 +229,10 @@ namespace SabreTools.Models.BSP
/// TODO: Find definition and implement
// public PrimIndicesLump? PrimIndicesLump { get; set; }
// TODO: Implement Lump 40
// https://developer.valvesoftware.com/wiki/BSP_(Source)#Pakfile
/// <summary>
/// LUMP_PAKFILE [40]
/// </summary>
public PakfileLump? PakfileLump { get; set; }
/// <summary>
/// LUMP_CLIPPORTALVERTS [41]
@@ -239,7 +243,7 @@ namespace SabreTools.Models.BSP
/// <summary>
/// LUMP_CUBEMAPS [42]
/// </summary>
public CubemapsLump? CubemapLump { get; set; }
public CubemapsLump? CubemapsLump { get; set; }
/// <summary>
/// LUMP_TEXDATA_STRING_DATA [43]
@@ -304,7 +308,7 @@ namespace SabreTools.Models.BSP
/// <summary>
/// LUMP_WORLDLIGHTS_HDR [54]
/// </summary>
public WorldLightsLump? WorldLightsLump { get; set; }
public WorldLightsLump? HDRWorldLightsLump { get; set; }
/// <summary>
/// LUMP_LEAF_AMBIENT_LIGHTING_HDR [55]
@@ -353,7 +357,7 @@ namespace SabreTools.Models.BSP
// public PhysLevelLump? PhysLevelLump { get; set; }
/// <summary>
/// LUMP_DISP_MULTIBLEND [64]
/// LUMP_DISP_MULTIBLEND [63]
/// </summary>
/// TODO: Find definition and implement
// public DispMultiBlendLump? DispMultiBlendLump { get; set; }

View File

@@ -17,6 +17,6 @@ namespace SabreTools.Models.BSP
public int NumClusters { get; set; }
/// <remarks>[numclusters][2]</remarks>
public int[,]? ByteOffsets { get; set; }
public int[][]? ByteOffsets { get; set; }
}
}

View File

@@ -7,7 +7,7 @@
<NoWarn>CS0618</NoWarn>
<Nullable>enable</Nullable>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<Version>1.5.2</Version>
<Version>1.5.3</Version>
<!-- Package Properties -->
<Authors>Matt Nadareski</Authors>

View File

@@ -24,7 +24,7 @@ namespace SabreTools.Models.WAD3
public CharInfo[] FontInfo = new CharInfo[256];
/// <remarks>[width][height]</remarks>
public byte[,]? Data;
public byte[][]? Data;
/// <summary>
/// Number of colors used in the palette (always 256 for GoldSrc)
@@ -35,6 +35,6 @@ namespace SabreTools.Models.WAD3
/// The color palette for the mipmaps (always 256 * 3 = 768 for GoldSrc)
/// </summary>
/// <remarks>[ColorsUsed][3]</remarks>
public byte[,]? Palette { get; set; }
public byte[][]? Palette { get; set; }
}
}

View File

@@ -1,5 +1,3 @@
using System.Runtime.InteropServices;
namespace SabreTools.Models.WAD3
{
/// <see href="https://twhl.info/wiki/page/Specification:_WAD3"/>
@@ -9,6 +7,6 @@ namespace SabreTools.Models.WAD3
/// Raw image data. Each byte points to an index in the palette
/// </summary>
/// <remarks>[width][height]</remarks>
public byte[,]? Data { get; set; }
public byte[][]? Data { get; set; }
}
}

View File

@@ -43,6 +43,6 @@ namespace SabreTools.Models.WAD3
/// The color palette for the mipmaps (always 256 * 3 = 768 for GoldSrc)
/// </summary>
/// <remarks>[ColorsUsed][3]</remarks>
public byte[,]? Palette { get; set; }
public byte[][]? Palette { get; set; }
}
}

View File

@@ -17,7 +17,7 @@ namespace SabreTools.Models.WAD3
/// Raw image data. Each byte points to an index in the palette
/// </summary>
/// <remarks>[height][width]</remarks>
public byte[,]? Data { get; set; }
public byte[][]? Data { get; set; }
/// <summary>
/// Number of colors used in the palette (always 256 for GoldSrc)
@@ -28,6 +28,6 @@ namespace SabreTools.Models.WAD3
/// The color palette for the mipmaps (always 256 * 3 = 768 for GoldSrc)
/// </summary>
/// <remarks>[ColorsUsed][3]</remarks>
public byte[,]? Palette { get; set; }
public byte[][]? Palette { get; set; }
}
}