summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreeki <treeki@gmail.com>2011-02-05 04:52:41 +0100
committerTreeki <treeki@gmail.com>2011-02-05 04:52:41 +0100
commit27cd642d477e0c5647c61565af393f9dca8b6f66 (patch)
tree1244551c1f4d47988e9dab4f0d1645f0b6e79d1b
parentfe451ef6fb5ea07b45fdaf4218001558bb171ef0 (diff)
downloadnw4rtools-27cd642d477e0c5647c61565af393f9dca8b6f66.tar.gz
nw4rtools-27cd642d477e0c5647c61565af393f9dca8b6f66.zip
one final commit before I go to sleep, changed some debug messages, added empty
(so far) code for loading shaders, will do more tomorrow
-rw-r--r--NW4RTools/BrresReader.cs43
-rw-r--r--NW4RTools/Models/Model.cs1
-rw-r--r--NW4RTools/Models/Shader.cs10
-rw-r--r--NW4RTools/NW4RTools.csproj1
-rwxr-xr-xNW4RTools/bin/Debug/NW4RTools.dllbin28160 -> 28672 bytes
-rw-r--r--NW4RTools/bin/Debug/NW4RTools.dll.mdbbin9806 -> 10083 bytes
-rwxr-xr-xTestApp/bin/Debug/NW4RTools.dllbin28160 -> 28672 bytes
-rw-r--r--TestApp/bin/Debug/NW4RTools.dll.mdbbin9806 -> 10083 bytes
-rwxr-xr-xTestApp/bin/Debug/TestApp.exebin3584 -> 3584 bytes
-rw-r--r--TestApp/bin/Debug/TestApp.exe.mdbbin416 -> 416 bytes
10 files changed, 51 insertions, 4 deletions
diff --git a/NW4RTools/BrresReader.cs b/NW4RTools/BrresReader.cs
index 4c63926..70463d6 100644
--- a/NW4RTools/BrresReader.cs
+++ b/NW4RTools/BrresReader.cs
@@ -146,7 +146,7 @@ namespace NW4RTools {
// Load vertex data
// COMMENTED OUT TO MAKE DEUBG OUTPUT CLEARER FOR NOW
- /*
+ /*
using (var c2 = Debug.Push("Vertex Position Data"))
mdl.VtxPosData = ReadAndConvertDict<VertexPosData>(ins.At(startPos + vtxPosOffset), ConvertVtxPosData);
using (var c2 = Debug.Push("Vertex Normal Data"))
@@ -158,9 +158,12 @@ namespace NW4RTools {
*/
// Load materials
- using (var c2 = Debug.Push("Materials"))
+ using (var c2 = Debug.Push("Materials"))
mdl.Materials = ReadAndConvertDict<Material>(ins.At(startPos + materialOffset), ConvertModelMaterial);
+ using (var c2 = Debug.Push("Shaders"))
+ mdl.Shaders = ReadAndConvertDict<Shader>(ins.At(startPos + shaderOffset), ConvertModelShader);
+
return mdl;
}
}
@@ -409,12 +412,23 @@ namespace NW4RTools {
ins.Skip(1);
// Other stuff
+ // Shader offset points to an entry in the Shaders group, must fix this up later
+ // like I did with Node classes
Int32 shaderOffset = ins.ReadInt32();
+ //Debug.Send("Shader offset for {0}: {1:X} [dest {2:X}]", name, shaderOffset, startPos + shaderOffset);
+
UInt32 boundTexCount = ins.ReadUInt32();
Int32 boundTexOffset = ins.ReadInt32();
+
Int32 furOffset = ins.ReadInt32();
+ Debug.Send("Fur offset for {0}: {1:X} [dest {2:X}]", name, furOffset, startPos + furOffset);
+
Int32 unkOffset = ins.ReadInt32();
+ Debug.Send("Unknown offset for {0}: {1:X} [dest {2:X}]", name, unkOffset, startPos + unkOffset);
+
+ // Need to implement DLs...
Int32 dlOffset = ins.ReadInt32();
+ Debug.Send("DL offset for {0}: {1:X} [dest {2:X}]", name, dlOffset, startPos + dlOffset);
// ResTexObj
int ResTexObjPos = ins.Position;
@@ -493,11 +507,14 @@ namespace NW4RTools {
}
// Bound Textures
+ if (boundTexOffset != 0)
+ OffsetMap.Add(startPos + boundTexOffset, "Material Bound Textures: " + name);
+
ins.Seek(startPos + boundTexOffset);
m.BoundTextures = new List<BoundTextureInfo>((int)boundTexCount);
for (int i = 0; i < boundTexCount; i++) {
- Debug.Send("Reading {0} bound texture at {1:X}", i, ins.Position);
+ //Debug.Send("Reading {0} bound texture at {1:X}", i, ins.Position);
int bPos = ins.Position;
var bTex = new BoundTextureInfo();
@@ -508,7 +525,7 @@ namespace NW4RTools {
Int32 palOffs = ins.ReadInt32();
bTex.PaletteName = palOffs == 0 ? null : ins.At(bPos + palOffs - 4).ReadName();
- Debug.Send("<{0}> <{1}>", bTex.TextureName, bTex.PaletteName);
+ //Debug.Send("<{0}> <{1}>", bTex.TextureName, bTex.PaletteName);
// placeholder pointers, don't need these
ins.Skip(8);
@@ -531,6 +548,24 @@ namespace NW4RTools {
+ private Models.Shader ConvertModelShader(string name, InputStream ins) {
+ var s = new Models.Shader();
+
+ //Debug.Send("{0} @ {1:X}", name, ins.Position);
+ int startPos = ins.Position;
+
+ // Note: duplicate shader entries seem to be common, so OffsetMap.Add can't be used
+ // Looks like Nintendo's converter checks for them when writing and optimises them
+ // into one entry. That'll sure be fun to implement here... probably requiring
+ // messing around with IEqualityComparer or whatever it's called. I don't even know
+ // if I'm making sense or not. Too tired to look it up, it's 4:51am...
+ OffsetMap[ins.Position] = "Shader: " + name;
+
+ return s;
+ }
+
+
+
private RawStreamResDict ReadDict(InputStream ins) {
RawStreamResDict output = new RawStreamResDict();
diff --git a/NW4RTools/Models/Model.cs b/NW4RTools/Models/Model.cs
index 8fa576e..d1c170b 100644
--- a/NW4RTools/Models/Model.cs
+++ b/NW4RTools/Models/Model.cs
@@ -16,6 +16,7 @@ namespace NW4RTools.Models {
public ResDict<VertexClrData> VtxClrData;
public ResDict<VertexTexCoordData> VtxTexCoordData;
public ResDict<Material> Materials;
+ public ResDict<Shader> Shaders;
/*public ResDict Bytecode, Nodes, VtxPosData, VtsNrmData, VtxClrData, VtxTexCoordData;
public ResDict VtxFurVecData, VtxFurPosData, Materials, Shaders, Shapes;
diff --git a/NW4RTools/Models/Shader.cs b/NW4RTools/Models/Shader.cs
new file mode 100644
index 0000000..42586da
--- /dev/null
+++ b/NW4RTools/Models/Shader.cs
@@ -0,0 +1,10 @@
+using System;
+using System.Collections.Generic;
+
+namespace NW4RTools.Models {
+ public class Shader {
+ public Shader() {
+ }
+ }
+}
+
diff --git a/NW4RTools/NW4RTools.csproj b/NW4RTools/NW4RTools.csproj
index f8f89e8..9050c94 100644
--- a/NW4RTools/NW4RTools.csproj
+++ b/NW4RTools/NW4RTools.csproj
@@ -47,6 +47,7 @@
<Compile Include="Util\OrderedDictionary.cs" />
<Compile Include="Models\VertexData.cs" />
<Compile Include="Models\Material.cs" />
+ <Compile Include="Models\Shader.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ItemGroup>
diff --git a/NW4RTools/bin/Debug/NW4RTools.dll b/NW4RTools/bin/Debug/NW4RTools.dll
index 7e28e2a..1d9a2ad 100755
--- a/NW4RTools/bin/Debug/NW4RTools.dll
+++ b/NW4RTools/bin/Debug/NW4RTools.dll
Binary files differ
diff --git a/NW4RTools/bin/Debug/NW4RTools.dll.mdb b/NW4RTools/bin/Debug/NW4RTools.dll.mdb
index 8183184..e3698a2 100644
--- a/NW4RTools/bin/Debug/NW4RTools.dll.mdb
+++ b/NW4RTools/bin/Debug/NW4RTools.dll.mdb
Binary files differ
diff --git a/TestApp/bin/Debug/NW4RTools.dll b/TestApp/bin/Debug/NW4RTools.dll
index 7e28e2a..1d9a2ad 100755
--- a/TestApp/bin/Debug/NW4RTools.dll
+++ b/TestApp/bin/Debug/NW4RTools.dll
Binary files differ
diff --git a/TestApp/bin/Debug/NW4RTools.dll.mdb b/TestApp/bin/Debug/NW4RTools.dll.mdb
index 8183184..e3698a2 100644
--- a/TestApp/bin/Debug/NW4RTools.dll.mdb
+++ b/TestApp/bin/Debug/NW4RTools.dll.mdb
Binary files differ
diff --git a/TestApp/bin/Debug/TestApp.exe b/TestApp/bin/Debug/TestApp.exe
index 1e59f00..045ad0c 100755
--- a/TestApp/bin/Debug/TestApp.exe
+++ b/TestApp/bin/Debug/TestApp.exe
Binary files differ
diff --git a/TestApp/bin/Debug/TestApp.exe.mdb b/TestApp/bin/Debug/TestApp.exe.mdb
index 174701f..348a92a 100644
--- a/TestApp/bin/Debug/TestApp.exe.mdb
+++ b/TestApp/bin/Debug/TestApp.exe.mdb
Binary files differ