diff --git a/CodeWalker.Core/GameFiles/FileTypes/YtypFile.cs b/CodeWalker.Core/GameFiles/FileTypes/YtypFile.cs index f9d548e..08a312c 100644 --- a/CodeWalker.Core/GameFiles/FileTypes/YtypFile.cs +++ b/CodeWalker.Core/GameFiles/FileTypes/YtypFile.cs @@ -241,7 +241,121 @@ namespace CodeWalker.GameFiles } + public void AddArchetype(Archetype arch) + { + List allArchs = new List(); + if (AllArchetypes != null) + allArchs.AddRange(AllArchetypes); + + allArchs.Add(arch); + + AllArchetypes = allArchs.ToArray(); + } + + public void RemoveArchetype(Archetype arch) + { + List allArchs = new List(); + + if (AllArchetypes != null) + allArchs.AddRange(AllArchetypes); + + if (allArchs.Contains(arch)) + allArchs.Remove(arch); + + AllArchetypes = allArchs.ToArray(); + } + + public byte[] Save() + { + MetaBuilder mb = new MetaBuilder(); + + var mdb = mb.EnsureBlock(MetaName.CMapTypes); + + CMapTypes mapTypes = CMapTypes; + + if((AllArchetypes != null) && (AllArchetypes.Length > 0)) + { + MetaPOINTER[] archPtrs = new MetaPOINTER[AllArchetypes.Length]; + + for(int i=0; i 0)) + { + MetaPOINTER[] cetPtrs = new MetaPOINTER[CompositeEntityTypes.Length] ; + + for (int i = 0; i < cetPtrs.Length; i++) + { + var cet = CompositeEntityTypes[i]; + cetPtrs[i] = mb.AddItemPtr(MetaName.CCompositeEntityType, cet); + } + + mapTypes.compositeEntityTypes = mb.AddItemArrayPtr(MetaName.CCompositeEntityType, cetPtrs); + } + + mb.AddItem(MetaName.CMapTypes, mapTypes); + + mb.AddStructureInfo(MetaName.CMapTypes); + mb.AddStructureInfo(MetaName.CBaseArchetypeDef); + mb.AddStructureInfo(MetaName.CMloArchetypeDef); + mb.AddStructureInfo(MetaName.CTimeArchetypeDef); + mb.AddStructureInfo(MetaName.CMloRoomDef); + mb.AddStructureInfo(MetaName.CMloPortalDef); + mb.AddStructureInfo(MetaName.CMloEntitySet); + mb.AddStructureInfo(MetaName.CCompositeEntityType); + + mb.AddEnumInfo((MetaName)1991964615); + mb.AddEnumInfo((MetaName)1294270217); + mb.AddEnumInfo((MetaName)1264241711); + mb.AddEnumInfo((MetaName)648413703); + mb.AddEnumInfo((MetaName)3573596290); + mb.AddEnumInfo((MetaName)700327466); + mb.AddEnumInfo((MetaName)193194928); + mb.AddEnumInfo((MetaName)2266515059); + + Meta = mb.GetMeta(); + + byte[] data = ResourceBuilder.Build(Meta, 2); //ymap is version 2... + + return data; + + } } diff --git a/CodeWalker.Core/GameFiles/MetaTypes/Archetype.cs b/CodeWalker.Core/GameFiles/MetaTypes/Archetype.cs index d048d17..f9392c7 100644 --- a/CodeWalker.Core/GameFiles/MetaTypes/Archetype.cs +++ b/CodeWalker.Core/GameFiles/MetaTypes/Archetype.cs @@ -128,6 +128,9 @@ namespace CodeWalker.GameFiles { public override MetaName Type => MetaName.CMloArchetypeDef; + public CMloArchetypeDef _BaseMloArchetypeDef; + public CMloArchetypeDef BaseMloArchetypeDef { get { return _BaseMloArchetypeDef; } set { _BaseMloArchetypeDef = value; } } + public CMloArchetypeDefData _MloArchetypeDef; public CMloArchetypeDefData MloArchetypeDef { get { return _MloArchetypeDef; } set { _MloArchetypeDef = value; } } @@ -141,6 +144,7 @@ namespace CodeWalker.GameFiles { Ytyp = ytyp; InitVars(ref arch._BaseArchetypeDef); + BaseMloArchetypeDef = arch; MloArchetypeDef = arch.MloArchetypeDef; }