Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
142 changes: 71 additions & 71 deletions Assets/Scripts/uQuake1/BSP29map.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,13 @@ public class BSP29map
public BSPColors palette;

public BSPEntityLump entityLump;
public BSPFaceLump facesLump;
public BSPEdgeLump edgeLump;
public BSPVertexLump vertLump;
public BSPTexInfoLump texinfoLump;
public BSPMipTexLump miptexLump;
public BSPModelLump modelLump;
public BSPFaceLump facesLump;
public BSPLightMapLump lightLump;
public BSPEdgeLump edgeLump;
public BSPModelLump modelLump;

public BSP29map(string filename)
{
Expand All @@ -25,23 +25,59 @@ public BSP29map(string filename)
palette = new BSPColors();

ReadEntities();
ReadFaces();
ReadEdges();
ReadVerts();
ReadTexinfo();
ReadTextures();
ReadModels();
ReadFaces();
ReadLightMaps();
ReadEdges();
ReadModels();

BSPfile.BaseStream.Dispose();
}

private void ReadLightMaps()
private void ReadEntities()
{
lightLump = new BSPLightMapLump();
BSPfile.BaseStream.Seek(header.directory[8].Offset, SeekOrigin.Begin);
lightLump.RawMaps = new byte[header.directory[8].Length];
lightLump.RawMaps = BSPfile.ReadBytes(header.directory[8].Length);
BSPfile.BaseStream.Seek(header.directory[0].Offset, SeekOrigin.Begin);
entityLump = new BSPEntityLump(BSPfile.ReadChars(header.directory[0].Length));
}

private void ReadTextures()
{
// Read the texture lump header and the offsets for the textures
BSPfile.BaseStream.Seek(header.directory[2].Offset, SeekOrigin.Begin);
miptexLump = new BSPMipTexLump(BSPfile.ReadInt32());


for (int i = 0; i < miptexLump.tex_count; i++)
{

miptexLump.LoadOffset((int)BSPfile.ReadUInt32());
}

// Now use those offsets and create the texture objects
for (int i = 0; i < miptexLump.tex_count; i++)
{
BSPfile.BaseStream.Seek(header.directory[2].Offset + miptexLump.tex_offsets[i], SeekOrigin.Begin);
miptexLump.texture_headers[i] = new BSPMipTexture(BSPfile.ReadChars(16), (int)BSPfile.ReadUInt32(), (int)BSPfile.ReadUInt32(), (int)BSPfile.ReadUInt32());
}
// Now use those texture objects and the palette to make our Texture2D
// objects that can be used directly
for (int i = 0; i < miptexLump.tex_count; i++)
{
miptexLump.textures[i] = new Texture2D(miptexLump.texture_headers[i].width, miptexLump.texture_headers[i].height);
miptexLump.textures[i].name = miptexLump.texture_headers[i].name;
Color32[] colors = new Color32[miptexLump.texture_headers[i].PixelCount];
BSPfile.BaseStream.Seek(header.directory[2].Offset + miptexLump.tex_offsets[i] + miptexLump.texture_headers[i].offset, SeekOrigin.Begin);
for (int j = 0; j < miptexLump.texture_headers[i].PixelCount; j++)
{
int index = (int)BSPfile.ReadByte();
colors[j] = palette.colors[index];
}
miptexLump.textures[i].SetPixels32(colors);
miptexLump.textures[i].filterMode = FilterMode.Point;
miptexLump.textures[i].Apply();
}
}

private void ReadVerts()
Expand All @@ -56,29 +92,15 @@ private void ReadVerts()
}
}

private void ReadEntities()
{
BSPfile.BaseStream.Seek(header.directory[0].Offset, SeekOrigin.Begin);
entityLump = new BSPEntityLump(BSPfile.ReadChars(header.directory[0].Length));
}

private void ReadEdges()
private void ReadTexinfo()
{
edgeLump = new BSPEdgeLump();
BSPfile.BaseStream.Seek(header.directory[12].Offset, SeekOrigin.Begin);
int numEdges = header.directory[12].Length / 4;
edgeLump.edges = new BSPEdge[numEdges];
for (int i = 0; i < numEdges; i++)
{
edgeLump.edges[i] = new BSPEdge(BSPfile.ReadUInt16(), BSPfile.ReadUInt16());
}

BSPfile.BaseStream.Seek(header.directory[13].Offset, SeekOrigin.Begin);
int numLedges = header.directory[13].Length / 4;
edgeLump.ledges = new int[numLedges];
for (int i = 0; i < numLedges; i++)
texinfoLump = new BSPTexInfoLump();
BSPfile.BaseStream.Seek(header.directory[6].Offset, SeekOrigin.Begin);
int numTexinfos = header.directory[6].Length / 40;
texinfoLump.texinfo = new BSPTexInfo[numTexinfos];
for (int i = 0; i < numTexinfos; i++)
{
edgeLump.ledges[i] = BSPfile.ReadInt32();
texinfoLump.texinfo[i] = new BSPTexInfo(new Vector3(BSPfile.ReadSingle(), BSPfile.ReadSingle(), BSPfile.ReadSingle()), BSPfile.ReadSingle(), new Vector3(BSPfile.ReadSingle(), BSPfile.ReadSingle(), BSPfile.ReadSingle()), BSPfile.ReadSingle(), BSPfile.ReadInt32(), BSPfile.ReadInt32());
}
}

Expand All @@ -97,53 +119,31 @@ private void ReadFaces()
}
}

private void ReadTexinfo()
private void ReadLightMaps()
{
texinfoLump = new BSPTexInfoLump();
BSPfile.BaseStream.Seek(header.directory[6].Offset, SeekOrigin.Begin);
int numTexinfos = header.directory[6].Length / 40;
texinfoLump.texinfo = new BSPTexInfo[numTexinfos];
for (int i = 0; i < numTexinfos; i++)
{
texinfoLump.texinfo[i] = new BSPTexInfo(new Vector3(BSPfile.ReadSingle(), BSPfile.ReadSingle(), BSPfile.ReadSingle()), BSPfile.ReadSingle(), new Vector3(BSPfile.ReadSingle(), BSPfile.ReadSingle(), BSPfile.ReadSingle()), BSPfile.ReadSingle(), BSPfile.ReadInt32(), BSPfile.ReadInt32());
}
lightLump = new BSPLightMapLump();
BSPfile.BaseStream.Seek(header.directory[8].Offset, SeekOrigin.Begin);
lightLump.RawMaps = new byte[header.directory[8].Length];
lightLump.RawMaps = BSPfile.ReadBytes(header.directory[8].Length);
}

private void ReadTextures()
private void ReadEdges()
{
// Read the texture lump header and the offsets for the textures
BSPfile.BaseStream.Seek(header.directory[2].Offset, SeekOrigin.Begin);
miptexLump = new BSPMipTexLump(BSPfile.ReadInt32());


for (int i = 0; i < miptexLump.tex_count; i++)
edgeLump = new BSPEdgeLump();
BSPfile.BaseStream.Seek(header.directory[12].Offset, SeekOrigin.Begin);
int numEdges = header.directory[12].Length / 4;
edgeLump.edges = new BSPEdge[numEdges];
for (int i = 0; i < numEdges; i++)
{

miptexLump.LoadOffset((int)BSPfile.ReadUInt32());
edgeLump.edges[i] = new BSPEdge(BSPfile.ReadUInt16(), BSPfile.ReadUInt16());
}

// Now use those offsets and create the texture objects
for (int i = 0; i < miptexLump.tex_count; i++)
{
BSPfile.BaseStream.Seek(header.directory[2].Offset + miptexLump.tex_offsets[i], SeekOrigin.Begin);
miptexLump.texture_headers[i] = new BSPMipTexture(BSPfile.ReadChars(16), (int)BSPfile.ReadUInt32(), (int)BSPfile.ReadUInt32(), (int)BSPfile.ReadUInt32());
}
// Now use those texture objects and the palette to make our Texture2D
// objects that can be used directly
for (int i = 0; i < miptexLump.tex_count; i++)
BSPfile.BaseStream.Seek(header.directory[13].Offset, SeekOrigin.Begin);
int numLedges = header.directory[13].Length / 4;
edgeLump.ledges = new int[numLedges];
for (int i = 0; i < numLedges; i++)
{
miptexLump.textures[i] = new Texture2D(miptexLump.texture_headers[i].width, miptexLump.texture_headers[i].height);
miptexLump.textures[i].name = miptexLump.texture_headers[i].name;
Color32[] colors = new Color32[miptexLump.texture_headers[i].PixelCount];
BSPfile.BaseStream.Seek(header.directory[2].Offset + miptexLump.tex_offsets[i] + miptexLump.texture_headers[i].offset, SeekOrigin.Begin);
for (int j = 0; j < miptexLump.texture_headers[i].PixelCount; j++)
{
int index = (int)BSPfile.ReadByte();
colors[j] = palette.colors[index];
}
miptexLump.textures[i].SetPixels32(colors);
miptexLump.textures[i].filterMode = FilterMode.Point;
miptexLump.textures[i].Apply();
edgeLump.ledges[i] = BSPfile.ReadInt32();
}
}

Expand Down