diff --git a/GameFiles/FileTypes/YmapFile.cs b/GameFiles/FileTypes/YmapFile.cs index db3cb3f..06395e3 100644 --- a/GameFiles/FileTypes/YmapFile.cs +++ b/GameFiles/FileTypes/YmapFile.cs @@ -997,15 +997,15 @@ namespace CodeWalker.GameFiles ////not ideal: should transform all 8 corners! } - if (Archetype.IsMloArchetype) + if (Archetype.Type == MetaName.CMloArchetypeDef) { //transform interior entities into world space... - var mlod = Archetype.MloData; + var mloa = Archetype as MloArchetype; if (MloInstance == null) { MloInstance = new MloInstanceData(); } - MloInstance.CreateYmapEntities(this, mlod); + MloInstance.CreateYmapEntities(this, mloa); if (BSRadius == 0.0f) { diff --git a/GameFiles/FileTypes/YtypFile.cs b/GameFiles/FileTypes/YtypFile.cs index 8f78172..55f9c37 100644 --- a/GameFiles/FileTypes/YtypFile.cs +++ b/GameFiles/FileTypes/YtypFile.cs @@ -83,61 +83,65 @@ namespace CodeWalker.GameFiles for (int i = 0; i < ptrs.Length; i++) { var ptr = ptrs[i]; - int blocki = ptr.BlockID - 1; - int offset = ptr.ItemOffset * 16;//block data size... - if (blocki >= Meta.DataBlocks.Count) + var offset = ptr.Offset; + var block = Meta.GetBlock(ptr.BlockID); + if (block == null) { continue; } - var block = Meta.DataBlocks[blocki]; if ((offset < 0) || (block.Data == null) || (offset >= block.Data.Length)) { continue; } - var ba = new Archetype(); + Archetype a = null; switch (block.StructureNameHash) { case MetaName.CBaseArchetypeDef: var basearch = PsoTypes.ConvertDataRaw(block.Data, offset); - ba.Init(this, ref basearch); - ba.Extensions = MetaTypes.GetExtensions(Meta, basearch.extensions); + a = new Archetype(); + a.Init(this, ref basearch); + a.Extensions = MetaTypes.GetExtensions(Meta, basearch.extensions); break; case MetaName.CTimeArchetypeDef: var timearch = PsoTypes.ConvertDataRaw(block.Data, offset); - ba.Init(this, ref timearch); - ba.Extensions = MetaTypes.GetExtensions(Meta, timearch.BaseArchetypeDef.extensions); + var ta = new TimeArchetype(); + ta.Init(this, ref timearch); + ta.Extensions = MetaTypes.GetExtensions(Meta, timearch._BaseArchetypeDef.extensions); + a = ta; break; case MetaName.CMloArchetypeDef: var mloarch = PsoTypes.ConvertDataRaw(block.Data, offset); - ba.Init(this, ref mloarch); - ba.Extensions = MetaTypes.GetExtensions(Meta, mloarch.BaseArchetypeDef.extensions); + var ma = new MloArchetype(); + ma.Init(this, ref mloarch); + ma.Extensions = MetaTypes.GetExtensions(Meta, mloarch._BaseArchetypeDef.extensions); - MloArchetypeData mlod = new MloArchetypeData(); var mlodef = mloarch.MloArchetypeDef; - mlod.entities = MetaTypes.ConvertDataArray(Meta, MetaName.CEntityDef, mlodef.entities); - mlod.rooms = MetaTypes.ConvertDataArray(Meta, MetaName.CMloRoomDef, mlodef.rooms); - mlod.portals = MetaTypes.ConvertDataArray(Meta, MetaName.CMloPortalDef, mlodef.portals); - mlod.entitySets = MetaTypes.ConvertDataArray(Meta, MetaName.CMloEntitySet, mlodef.entitySets); - mlod.timeCycleModifiers = MetaTypes.ConvertDataArray(Meta, MetaName.CMloTimeCycleModifier, mlodef.timeCycleModifiers); - ba.MloData = mlod; + ma.entities = MetaTypes.ConvertDataArray(Meta, MetaName.CEntityDef, mlodef.entities); + ma.rooms = MetaTypes.ConvertDataArray(Meta, MetaName.CMloRoomDef, mlodef.rooms); + ma.portals = MetaTypes.ConvertDataArray(Meta, MetaName.CMloPortalDef, mlodef.portals); + ma.entitySets = MetaTypes.ConvertDataArray(Meta, MetaName.CMloEntitySet, mlodef.entitySets); + ma.timeCycleModifiers = MetaTypes.ConvertDataArray(Meta, MetaName.CMloTimeCycleModifier, mlodef.timeCycleModifiers); - if (mlod.entities != null) + if (ma.entities != null) { - //for (int e = 0; e < mlod.entities.Length; e++) + //for (int e = 0; e < ma.entities.Length; e++) //{ - // if (mlod.entities[e].extensions.Count1 > 0) + // if (ma.entities[e].extensions.Count1 > 0) // { - // var exts = MetaTypes.GetExtensions(Meta, mlod.entities[e].extensions); + // var exts = MetaTypes.GetExtensions(Meta, ma.entities[e].extensions); // if (exts != null) // { } // } //} } + a = ma; break; default: continue; } - - allarchs.Add(ba); + if (a != null) + { + allarchs.Add(a); + } } } AllArchetypes = allarchs.ToArray(); diff --git a/GameFiles/GameFileCache.cs b/GameFiles/GameFileCache.cs index fb8bd6e..d03e39b 100644 --- a/GameFiles/GameFileCache.cs +++ b/GameFiles/GameFileCache.cs @@ -2394,12 +2394,13 @@ namespace CodeWalker.GameFiles { foreach (var arch in ytyp.AllArchetypes) { - if (arch.IsTimeArchetype) + if (arch.Type == MetaName.CTimeArchetypeDef) { - var t = arch.TimeArchetype.TimeArchetypeDef.timeFlags; - sb.Append(arch.TimeArchetype.BaseArchetypeDef.name.ToString()); + var ta = arch as TimeArchetype; + var t = ta.TimeFlags; + sb.Append(arch.Name); sb.Append(","); - sb.Append(arch.TimeArchetype.BaseArchetypeDef.assetName.ToString()); + sb.Append(arch.AssetName); sb.Append(","); for (int i = 0; i < 32; i++) { diff --git a/GameFiles/MetaTypes/Meta.cs b/GameFiles/MetaTypes/Meta.cs index a6f4125..54cc321 100644 --- a/GameFiles/MetaTypes/Meta.cs +++ b/GameFiles/MetaTypes/Meta.cs @@ -882,7 +882,7 @@ namespace CodeWalker.GameFiles } } - [TC(typeof(EXP))] public struct ArrayOfUshorts3 //array of 3 bytes + [TC(typeof(EXP))] public struct ArrayOfUshorts3 //array of 3 ushorts { public ushort u0, u1, u2; public override string ToString() @@ -961,22 +961,24 @@ namespace CodeWalker.GameFiles } } - [TC(typeof(EXP))] public struct MetaPOINTER //8 bytes - pointer to data item //SectionUNKNOWN10 + [TC(typeof(EXP))] public struct MetaPOINTER //8 bytes - pointer to data item //was: SectionUNKNOWN10 { - public ushort BlockID { get; set; } //1-based ID - public ushort ItemOffset { get; set; } //byte offset / 16 + public uint Pointer { get; set; } public uint ExtraOffset { get; set; } - public MetaPOINTER(ushort blockID, ushort itemOffset, uint extra) + public int BlockIndex { get { return BlockID - 1; } } + public int BlockID { get { return (int)(Pointer & 0xFFF); } set { Pointer = (Pointer & 0xFFFFF000) + ((uint)value & 0xFFF); } } + public int Offset { get { return (int)((Pointer >> 12) & 0xFFFFF); } set { Pointer = (Pointer & 0xFFF) + (((uint)value << 12) & 0xFFFFF000); } } + + public MetaPOINTER(int blockID, int itemOffset, uint extra) { - BlockID = blockID; - ItemOffset = itemOffset; + Pointer = (((uint)itemOffset << 12) & 0xFFFFF000) + ((uint)blockID & 0xFFF); ExtraOffset = extra; } public override string ToString() { - return BlockID.ToString() + ", " + ItemOffset.ToString() + ", " + ExtraOffset.ToString(); + return BlockID.ToString() + ", " + Offset.ToString() + ", " + ExtraOffset.ToString(); } } diff --git a/GameFiles/MetaTypes/MetaBuilder.cs b/GameFiles/MetaTypes/MetaBuilder.cs index 823655c..0bf9c7e 100644 --- a/GameFiles/MetaTypes/MetaBuilder.cs +++ b/GameFiles/MetaTypes/MetaBuilder.cs @@ -47,8 +47,8 @@ namespace CodeWalker.GameFiles } int idx = block.AddItem(data); MetaBuilderPointer r = new MetaBuilderPointer(); - r.Block = block.Index + 1; - r.Offset = (idx * data.Length) / 16; + r.BlockID = block.Index + 1; + r.Offset = (idx * data.Length); r.Length = data.Length; return r; } @@ -65,11 +65,11 @@ namespace CodeWalker.GameFiles } byte[] newdata = new byte[newlen]; Buffer.BlockCopy(data, 0, newdata, 0, datalen); - int offs = block.TotalSize / 16; + int offs = block.TotalSize; int idx = block.AddItem(newdata); MetaBuilderPointer r = new MetaBuilderPointer(); - r.Block = block.Index + 1; - r.Offset = offs; //(idx * data.Length) / 16; + r.BlockID = block.Index + 1; + r.Offset = offs; //(idx * data.Length);; r.Length = items.Length; return r; } @@ -86,11 +86,11 @@ namespace CodeWalker.GameFiles } byte[] newdata = new byte[newlen]; Buffer.BlockCopy(data, 0, newdata, 0, datalen); - int offs = block.TotalSize / 16; + int offs = block.TotalSize; int idx = block.AddItem(newdata); MetaBuilderPointer r = new MetaBuilderPointer(); - r.Block = block.Index + 1; - r.Offset = offs;// (idx * data.Length) / 16;//not sure if this is correct! should also use sub-offset! + r.BlockID = block.Index + 1; + r.Offset = offs;// (idx * data.Length); r.Length = datalen; //actual length of string. return r; } @@ -98,7 +98,7 @@ namespace CodeWalker.GameFiles public MetaPOINTER AddItemPtr(MetaName type, T item) where T : struct //helper method for AddItem { var ptr = AddItem(type, item); - return new MetaPOINTER((ushort)ptr.Block, (ushort)ptr.Offset, 0); + return new MetaPOINTER(ptr.BlockID, ptr.Offset, 0); } public Array_Structure AddItemArrayPtr(MetaName type, T[] items) where T : struct //helper method for AddItemArray { @@ -207,8 +207,8 @@ namespace CodeWalker.GameFiles if (i == 0) { MetaBuilderPointer mbp = new MetaBuilderPointer(); - mbp.Block = meptr.BlockID; - mbp.Offset = meptr.ItemOffset; + mbp.BlockID = meptr.BlockID; + mbp.Offset = meptr.Offset; sa.Pointer = mbp.Pointer; } } @@ -359,15 +359,15 @@ namespace CodeWalker.GameFiles public struct MetaBuilderPointer { - public int Block { get; set; } //0-based index - public int Offset { get; set; } //(byteoffset/16) + public int BlockID { get; set; } //1-based id + public int Offset { get; set; } //byte offset public int Length { get; set; } //for temp use... public uint Pointer { get { - uint bidx = (((uint)Block) & 0xFFF); - uint offs = (((uint)Offset) & 0xFFFF) << 16; + uint bidx = (((uint)BlockID) & 0xFFF); + uint offs = (((uint)Offset) & 0xFFFFF) << 12; return bidx + offs; } } diff --git a/GameFiles/MetaTypes/MetaTypes.cs b/GameFiles/MetaTypes/MetaTypes.cs index 25f21d6..70a48ce 100644 --- a/GameFiles/MetaTypes/MetaTypes.cs +++ b/GameFiles/MetaTypes/MetaTypes.cs @@ -819,12 +819,10 @@ namespace CodeWalker.GameFiles //MetaName blocktype = 0; for (int i = 0; i < count; i++) { - var sptr = ptrs[i]; - int blocki = sptr.BlockID - 1; - int offset = sptr.ItemOffset * 16;//block data size... - if (blocki >= meta.DataBlocks.Count) - { continue; } - var block = meta.DataBlocks[blocki]; + var ptr = ptrs[i]; + var offset = ptr.Offset; + var block = meta.GetBlock(ptr.BlockID); + if (block == null) continue; //if (blocktype == 0) //{ blocktype = block.StructureNameHash; } @@ -983,11 +981,8 @@ namespace CodeWalker.GameFiles MetaPOINTER[] ptrs = new MetaPOINTER[count]; int ptrsize = Marshal.SizeOf(typeof(MetaPOINTER)); - //int itemsleft = (int)count; //large arrays get split into chunks... - uint ptr = array.Pointer; - int ptrindex = (int)(ptr & 0xFFF) - 1; - int ptroffset = (int)((ptr >> 12) & 0xFFFFF); - var ptrblock = (ptrindex < meta.DataBlocks.Count) ? meta.DataBlocks[ptrindex] : null; + int ptroffset = (int)array.PointerDataOffset; + var ptrblock = meta.GetBlock((int)array.PointerDataId); if ((ptrblock == null) || (ptrblock.Data == null) || (ptrblock.StructureNameHash != MetaName.POINTER)) { return null; } @@ -1204,7 +1199,7 @@ namespace CodeWalker.GameFiles { var extptr = extptrs[i]; MetaWrapper ext = null; - var block = GetDataBlock(meta, extptr); + var block = meta.GetBlock(extptr.BlockID); var h = block.StructureNameHash; switch (h) { @@ -1277,18 +1272,10 @@ namespace CodeWalker.GameFiles } - public static MetaDataBlock GetDataBlock(Meta meta, MetaPOINTER ptr) - { - int blocki = ptr.BlockID - 1; - if ((blocki < 0) || (blocki >= meta.DataBlocks.Count)) - { return null; } - var block = meta.DataBlocks[blocki]; - return block; - } public static int GetDataOffset(MetaDataBlock block, MetaPOINTER ptr) { if (block == null) return -1; - int offset = ptr.ItemOffset * 16;//block data size... + var offset = ptr.Offset; if (ptr.ExtraOffset != 0) { } //offset += (int)ptr.ExtraOffset; @@ -1298,13 +1285,7 @@ namespace CodeWalker.GameFiles } public static T GetData(Meta meta, MetaPOINTER ptr) where T : struct { - var block = GetDataBlock(meta, ptr); - var offset = GetDataOffset(block, ptr); - if (offset < 0) return new T(); - return ConvertData(block.Data, offset); - } - public static T GetData(MetaDataBlock block, MetaPOINTER ptr) where T : struct - { + var block = meta.GetBlock(ptr.BlockID); var offset = GetDataOffset(block, ptr); if (offset < 0) return new T(); return ConvertData(block.Data, offset); diff --git a/GameFiles/MetaTypes/MetaXml.cs b/GameFiles/MetaTypes/MetaXml.cs index 82e7c7d..6c1b0be 100644 --- a/GameFiles/MetaTypes/MetaXml.cs +++ b/GameFiles/MetaTypes/MetaXml.cs @@ -285,8 +285,8 @@ namespace CodeWalker.GameFiles for (int n = 0; n < aCount; n++) { var ptr = ptrArr[n]; - var eboffset = ptr.ItemOffset * 16; - WriteNode(sb, aind, cont, ptr.BlockID, eboffset, XmlTagMode.ItemAndType); + var offset = ptr.Offset; + WriteNode(sb, aind, cont, ptr.BlockID, offset, XmlTagMode.ItemAndType); } CloseTag(sb, indent, ename); } diff --git a/GameFiles/Resources/Archetype.cs b/GameFiles/Resources/Archetype.cs index d1ad5e6..3784961 100644 --- a/GameFiles/Resources/Archetype.cs +++ b/GameFiles/Resources/Archetype.cs @@ -11,11 +11,13 @@ namespace CodeWalker.GameFiles [TypeConverter(typeof(ExpandableObjectConverter))] public class Archetype { + public virtual MetaName Type => MetaName.CBaseArchetypeDef; + + public CBaseArchetypeDef _BaseArchetypeDef; + public CBaseArchetypeDef BaseArchetypeDef { get { return _BaseArchetypeDef; } set { _BaseArchetypeDef = value; } } + public MetaHash Hash { get; set; } public YtypFile Ytyp { get; set; } - public CBaseArchetypeDef BaseArchetype { get; set; } - public CTimeArchetypeDef TimeArchetype { get; set; } - public CMloArchetypeDef MloArchetype { get; set; } public MetaHash DrawableDict { get; set; } public MetaHash TextureDict { get; set; } public MetaHash ClipDict { get; set; } @@ -23,35 +25,31 @@ namespace CodeWalker.GameFiles public Vector3 BBMax { get; set; } public Vector3 BSCenter { get; set; } public float BSRadius { get; set; } - public bool IsTimeArchetype { get; set; } - public bool IsMloArchetype { get; set; } public float LodDist { get; set; } - public MloArchetypeData MloData { get; set; } public MetaWrapper[] Extensions { get; set; } - public TimedArchetypeTimes Times { get; set; } + + public string Name { get { - if (IsTimeArchetype) return TimeArchetype.BaseArchetypeDef.name.ToString(); - if (IsMloArchetype) return MloArchetype.BaseArchetypeDef.name.ToString(); - return BaseArchetype.name.ToString(); + return _BaseArchetypeDef.name.ToString(); } } public string AssetName { get { - if (IsTimeArchetype) return TimeArchetype.BaseArchetypeDef.assetName.ToString(); - if (IsMloArchetype) return MloArchetype.BaseArchetypeDef.assetName.ToString(); - return BaseArchetype.assetName.ToString(); + return _BaseArchetypeDef.assetName.ToString(); } } - private void InitVars(ref CBaseArchetypeDef arch) + + protected void InitVars(ref CBaseArchetypeDef arch) { + BaseArchetypeDef = arch; Hash = arch.assetName; if (Hash.Hash == 0) Hash = arch.name; DrawableDict = arch.drawableDictionary; @@ -68,57 +66,87 @@ namespace CodeWalker.GameFiles { Ytyp = ytyp; InitVars(ref arch); - BaseArchetype = arch; - IsTimeArchetype = false; - IsMloArchetype = false; - } - public void Init(YtypFile ytyp, ref CTimeArchetypeDef arch) - { - Ytyp = ytyp; - InitVars(ref arch._BaseArchetypeDef); - TimeArchetype = arch; - IsTimeArchetype = true; - IsMloArchetype = false; - Times = new TimedArchetypeTimes(arch.TimeArchetypeDef.timeFlags); - } - public void Init(YtypFile ytyp, ref CMloArchetypeDef arch) - { - Ytyp = ytyp; - InitVars(ref arch._BaseArchetypeDef); - MloArchetype = arch; - IsTimeArchetype = false; - IsMloArchetype = true; } - public bool IsActive(float hour) + public virtual bool IsActive(float hour) { - if (Times == null) return true; - //if (Times.ExtraFlag) hour -= 0.5f; - //if (hour < 0.0f) hour += 24.0f; - int h = ((int)hour) % 24; - if ((h < 0) || (h > 23)) return true; - return Times.ActiveHours[h]; + return true; } public override string ToString() { - if (IsTimeArchetype) return TimeArchetype.ToString(); - if (IsMloArchetype) return MloArchetype.ToString(); - return BaseArchetype.ToString(); + return _BaseArchetypeDef.ToString(); } } - [TypeConverter(typeof(ExpandableObjectConverter))] - public class MloArchetypeData + public class TimeArchetype : Archetype { + public override MetaName Type => MetaName.CTimeArchetypeDef; + + public CTimeArchetypeDefData _TimeArchetypeDef; + public CTimeArchetypeDefData TimeArchetypeDef { get { return _TimeArchetypeDef; } set { _TimeArchetypeDef = value; } } + + + public uint TimeFlags { get; set; } + public bool[] ActiveHours { get; set; } + public string[] ActiveHoursText { get; set; } + public bool ExtraFlag { get; set; } + + + public void Init(YtypFile ytyp, ref CTimeArchetypeDef arch) + { + Ytyp = ytyp; + InitVars(ref arch._BaseArchetypeDef); + TimeArchetypeDef = arch.TimeArchetypeDef; + + TimeFlags = _TimeArchetypeDef.timeFlags; + ActiveHours = new bool[24]; + ActiveHoursText = new string[24]; + for (int i = 0; i < 24; i++) + { + bool v = ((TimeFlags >> i) & 1) == 1; + ActiveHours[i] = v; + + int nxth = (i < 23) ? (i + 1) : 0; + string hrs = string.Format("{0:00}:00 - {1:00}:00", i, nxth); + ActiveHoursText[i] = (hrs + (v ? " - On" : " - Off")); + } + ExtraFlag = ((TimeFlags >> 24) & 1) == 1; + } + + public override bool IsActive(float hour) + { + if (ActiveHours == null) return true; + int h = ((int)hour) % 24; + if ((h < 0) || (h > 23)) return true; + return ActiveHours[h]; + } + } + + public class MloArchetype : Archetype + { + public override MetaName Type => MetaName.CMloArchetypeDef; + + public CMloArchetypeDefData _MloArchetypeDef; + public CMloArchetypeDefData MloArchetypeDef { get { return _MloArchetypeDef; } set { _MloArchetypeDef = value; } } + public CEntityDef[] entities { get; set; } public CMloRoomDef[] rooms { get; set; } public CMloPortalDef[] portals { get; set; } public CMloEntitySet[] entitySets { get; set; } public CMloTimeCycleModifier[] timeCycleModifiers { get; set; } + + public void Init(YtypFile ytyp, ref CMloArchetypeDef arch) + { + Ytyp = ytyp; + InitVars(ref arch._BaseArchetypeDef); + MloArchetypeDef = arch.MloArchetypeDef; + } } + + [TypeConverter(typeof(ExpandableObjectConverter))] public class MloInstanceData { @@ -130,16 +158,16 @@ namespace CodeWalker.GameFiles public YmapEntityDef[] Entities { get; set; } - public void CreateYmapEntities(YmapEntityDef owner, MloArchetypeData mlod) + public void CreateYmapEntities(YmapEntityDef owner, MloArchetype mloa) { Owner = owner; if (owner == null) return; - if (mlod.entities == null) return; - var ec = mlod.entities.Length; + if (mloa.entities == null) return; + var ec = mloa.entities.Length; Entities = new YmapEntityDef[ec]; for (int i = 0; i < ec; i++) { - YmapEntityDef e = new YmapEntityDef(null, i, ref mlod.entities[i]); + YmapEntityDef e = new YmapEntityDef(null, i, ref mloa.entities[i]); e.MloRefPosition = e.Position; e.MloRefOrientation = e.Orientation; e.MloParent = owner; @@ -172,31 +200,4 @@ namespace CodeWalker.GameFiles } - [TypeConverter(typeof(ExpandableObjectConverter))] - public class TimedArchetypeTimes - { - public uint TimeFlags { get; set; } - public bool[] ActiveHours { get; set; } - public string[] ActiveHoursText { get; set; } - public bool ExtraFlag { get; set; } - - public TimedArchetypeTimes(uint timeFlags) - { - TimeFlags = timeFlags; - ActiveHours = new bool[24]; - ActiveHoursText = new string[24]; - for (int i = 0; i < 24; i++) - { - bool v = ((timeFlags >> i) & 1) == 1; - ActiveHours[i] = v; - - int nxth = (i < 23) ? (i + 1) : 0; - string hrs = string.Format("{0:00}:00 - {1:00}:00", i, nxth); - ActiveHoursText[i] = (hrs + (v ? " - On" : " - Off")); - } - ExtraFlag = ((timeFlags >> 24) & 1) == 1; - } - - } - } diff --git a/WorldForm.cs b/WorldForm.cs index 1b10f2c..73158f9 100644 --- a/WorldForm.cs +++ b/WorldForm.cs @@ -2199,7 +2199,8 @@ namespace CodeWalker Archetype arch = ent.Archetype; if (arch != null) { - if (!arch.IsTimeArchetype || (rendertimedents && (rendertimedentsalways || arch.IsActive(timeofday)))) + bool timed = (arch.Type == MetaName.CTimeArchetypeDef); + if (!timed || (rendertimedents && (rendertimedentsalways || arch.IsActive(timeofday)))) { ent.CamRel = ent.Position - camera.Position; RenderArchetype(arch, ent); @@ -2232,7 +2233,8 @@ namespace CodeWalker Archetype arch = entity.Archetype; if (arch != null) { - if (!arch.IsTimeArchetype || (rendertimedents && (rendertimedentsalways || arch.IsActive(timeofday)))) + bool timed = (arch.Type == MetaName.CTimeArchetypeDef); + if (!timed || (rendertimedents && (rendertimedentsalways || arch.IsActive(timeofday)))) { bool usechild = false; entity.CamRel = entity.Position - camera.Position; @@ -2418,23 +2420,23 @@ namespace CodeWalker var arch = ent.Archetype; bool isshadowproxy = false; bool isreflproxy = false; - uint archflags = arch.BaseArchetype.flags; - if (arch.IsTimeArchetype) + uint archflags = arch._BaseArchetypeDef.flags; + if (arch.Type == MetaName.CTimeArchetypeDef) { if (!(rendertimedents && (rendertimedentsalways || arch.IsActive(timeofday)))) return false; - archflags = arch.TimeArchetype.BaseArchetypeDef.flags; + //archflags = arch._BaseArchetypeDef.flags; } - else if (arch.IsMloArchetype) - { - archflags = arch.MloArchetype.BaseArchetypeDef.flags; - } - //switch (archflags) + //else if (arch.Type == MetaName.CMloArchetypeDef) //{ - // //case 8192: //8192: is YTYP no shadow rendering - CP - // case 2048: //000000000000000000100000000000 shadow proxies... - // case 536872960: //100000000000000000100000000000 tunnel refl/shadow prox? - // isshadowproxy = true; break; + // archflags = arch._BaseArchetypeDef.flags; //} + ////switch (archflags) + ////{ + //// //case 8192: //8192: is YTYP no shadow rendering - CP + //// case 2048: //000000000000000000100000000000 shadow proxies... + //// case 536872960: //100000000000000000100000000000 tunnel refl/shadow prox? + //// isshadowproxy = true; break; + ////} if ((archflags & 2048) > 0) { isshadowproxy = true; @@ -2445,7 +2447,7 @@ namespace CodeWalker // isreflproxy = true; //} - switch (ent.CEntityDef.flags) + switch (ent._CEntityDef.flags) { case 135790592: //001000000110000000000000000000 prewater proxy (golf course) case 135790593: //001000000110000000000000000001 water refl proxy? (mike house) @@ -2503,9 +2505,6 @@ namespace CodeWalker Vector3 camrel = (entity != null) ? entity.CamRel : -camera.Position; - if (arche.IsMloArchetype) - { } - Quaternion orientation = Quaternion.Identity; Vector3 scale = Vector3.One; Vector3 bscent = camrel;