Skip to content

Commit

Permalink
Merge pull request #2 from Eucalyptusmoon/master
Browse files Browse the repository at this point in the history
Add support for more material presets
  • Loading branch information
TheBombSquad authored Aug 3, 2024
2 parents 551dbf8 + c69a1d1 commit bdf9eb6
Show file tree
Hide file tree
Showing 4 changed files with 75 additions and 23 deletions.
29 changes: 18 additions & 11 deletions GxUtils/LibGxFormat/Gma/Gcmf.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
Expand Down Expand Up @@ -123,19 +123,26 @@ public Gcmf(ObjMtlObject modelObject, Dictionary<Bitmap, int> modelTextureMappin
modelMaterialMapping.Add(mat, Materials.Count);

GcmfMaterial NewMaterial = new GcmfMaterial(mat, modelTextureMapping, presetFolder);

Match flagPreset = Regex.Match(mat.Name, @"(?<=MATFLAG_)[^\]]*");

if (flagPreset.Success)
MatchCollection flagPresets = Regex.Matches(mat.Name, @"(?<=MATFLAG_)[^\]]*");

foreach (Match flagPreset in flagPresets)
{
switch (flagPreset.Value)
if (flagPreset.Success)
{
case "SCROLL":
NewMaterial.Flags |= 0x20000;
break;

default:
break;
switch (flagPreset.Value)
{
case "SCROLL":
NewMaterial.Flags |= 0x20000;
break;

case "MASK":
NewMaterial.Unk10 = 0x00000000;
break;

default:
break;
}
}
}

Expand Down
29 changes: 17 additions & 12 deletions GxUtils/LibGxFormat/Gma/GcmfMesh.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ public enum MeshLayer
[Flags]
public enum RenderFlag
{
UnkFlag01 = 0x01,
Unshaded = 0x01,
/// <summary>
/// All faces on this mesh are two-sided. Otherwise, faces are one-sided (only the front-facing side is shown).
///
Expand All @@ -48,11 +48,11 @@ public enum RenderFlag
/// which is what makes it to be shown on both sides.
/// </summary>
TwoSided = 0x02,
UnkFlag04 = 0x04,
UnkFlag08 = 0x08,
UnkFlag10 = 0x10,
UnkFlag20 = 0x20,
UnkFlag40 = 0x40,
NoFog = 0x04,
VertexShading = 0x08,
VertexPaint = 0x10,
ScreenBlend = 0x20,
AdditiveBlend = 0x40,
UnkFlag200 = 0x200,
}
public MeshLayer Layer { get; set; }
Expand Down Expand Up @@ -139,6 +139,11 @@ public GcmfMesh(ObjMtlMesh mesh, Dictionary<ObjMtlMaterial, int> modelMaterialMa
if (Unk10 != 0xFF) Layer = MeshLayer.Layer2;

if (mesh.Material.Unshaded) RenderFlags |= (RenderFlag)0x1;
if (mesh.Material.TwoSided) RenderFlags |= (RenderFlag)0x2;
if (mesh.Material.NoFog) RenderFlags |= (RenderFlag)0x4;
if (mesh.Material.VertexShading) RenderFlags |= (RenderFlag)0x8;
if (mesh.Material.ScreenBlend) RenderFlags |= (RenderFlag)0x20;
if (mesh.Material.AdditiveBlend) RenderFlags |= (RenderFlag)0x40;

Match meshPreset = Regex.Match(mesh.Material.Name, @"(?<=MESH_)[^\]]*");

Expand Down Expand Up @@ -312,13 +317,13 @@ internal HeaderSectionInfo LoadHeader(EndianBinaryReader input, MeshLayer newLay
Layer = newLayer;

uint renderFlagsUint = input.ReadUInt32();
if ((renderFlagsUint & ~(uint)(RenderFlag.UnkFlag01 |
if ((renderFlagsUint & ~(uint)(RenderFlag.Unshaded |
RenderFlag.TwoSided |
RenderFlag.UnkFlag04 |
RenderFlag.UnkFlag08 |
RenderFlag.UnkFlag10 |
RenderFlag.UnkFlag20 |
RenderFlag.UnkFlag40 |
RenderFlag.NoFog |
RenderFlag.VertexShading |
RenderFlag.VertexPaint |
RenderFlag.ScreenBlend |
RenderFlag.AdditiveBlend |
RenderFlag.UnkFlag200)) != 0)
{
throw new InvalidOperationException("Unknown RenderFlags set.");
Expand Down
5 changes: 5 additions & 0 deletions GxUtils/LibGxFormat/ModelLoader/ObjMtlLoader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -512,6 +512,11 @@ private void ParseMtlMaterialDeclaration()
}
materials.Add(materialName, currentLoadMaterial);
materials[materialName].Unshaded = materialName.Contains("[UNSHADED]");
materials[materialName].TwoSided = materialName.Contains("[TWOSIDED]");
materials[materialName].NoFog = materialName.Contains("[NOFOG]");
materials[materialName].VertexShading = materialName.Contains("[VERTEXSHADING]");
materials[materialName].ScreenBlend = materialName.Contains("[SCREEN]");
materials[materialName].AdditiveBlend = materialName.Contains("[ADDITIVE]");
materials[materialName].Name = materialName;
}

Expand Down
35 changes: 35 additions & 0 deletions GxUtils/LibGxFormat/ModelLoader/ObjMtlMaterial.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,36 @@ public bool Unshaded
set;
}

public bool TwoSided
{
get;
set;
}

public bool NoFog
{
get;
set;
}

public bool VertexShading
{
get;
set;
}

public bool ScreenBlend
{
get;
set;
}

public bool AdditiveBlend
{
get;
set;
}

public string Name
{
get;
Expand All @@ -43,6 +73,11 @@ public ObjMtlMaterial()
this.DiffuseTextureMap = null;
this.Transparency = 1.0f;
this.Unshaded = false;
this.TwoSided = false;
this.NoFog = false;
this.VertexShading = false;
this.ScreenBlend = false;
this.AdditiveBlend = false;
this.Name = "";
}
}
Expand Down

0 comments on commit bdf9eb6

Please sign in to comment.