From ddff8b19a797cf46ecd893ce3d22fa71dc6dfdbf Mon Sep 17 00:00:00 2001 From: 1987kostya Date: Wed, 20 Jan 2021 20:56:08 +0600 Subject: [PATCH] Object flags fixes, expression fixes --- CTFAK/MMFParser/EXE/Loaders/Events/Events.cs | 2 + .../EXE/Loaders/Events/EventsParts.cs | 6 +- .../Loaders/Events/Expressions/Expression.cs | 149 +++++++++--------- .../Events/Parameters/AlterableValue.cs | 1 - .../EXE/Loaders/Events/Parameters/Colour.cs | 9 +- .../Events/Parameters/ExpressionParameter.cs | 10 +- CTFAK/MMFParser/EXE/Loaders/ObjectInfo.cs | 22 ++- CTFAK/MMFParser/MFA/Loaders/FrameItem.cs | 1 - CTFAK/MMFParser/Translation/PAME2MFA.cs | 17 +- 9 files changed, 119 insertions(+), 98 deletions(-) diff --git a/CTFAK/MMFParser/EXE/Loaders/Events/Events.cs b/CTFAK/MMFParser/EXE/Loaders/Events/Events.cs index f662841..940d575 100644 --- a/CTFAK/MMFParser/EXE/Loaders/Events/Events.cs +++ b/CTFAK/MMFParser/EXE/Loaders/Events/Events.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.IO; +using System.Linq; using CTFAK.Utils; using static CTFAK.MMFParser.EXE.ChunkList; @@ -73,6 +74,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events var eg = new EventGroup(Reader); eg.Read(); Items.Add(eg); + if (Reader.Tell() >= endPosition) break; } diff --git a/CTFAK/MMFParser/EXE/Loaders/Events/EventsParts.cs b/CTFAK/MMFParser/EXE/Loaders/Events/EventsParts.cs index 78d4970..7d2b16d 100644 --- a/CTFAK/MMFParser/EXE/Loaders/Events/EventsParts.cs +++ b/CTFAK/MMFParser/EXE/Loaders/Events/EventsParts.cs @@ -25,6 +25,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events ByteWriter newWriter = new ByteWriter(new MemoryStream()); Logger.Log($"{ObjectType}-{Num}-{ObjectInfo}-{ObjectInfoList}-{Flags}-{OtherFlags}-{Items.Count}-{DefType}-{Identifier}"); newWriter.WriteInt16((short) ObjectType); + if (Num == -42) Num = -27; newWriter.WriteInt16((short) Num); newWriter.WriteUInt16((ushort) ObjectInfo); newWriter.WriteInt16((short) ObjectInfoList); @@ -65,7 +66,6 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events { var item = new Parameter(Reader); item.Read(); - Items.Add(item); } Logger.Log(this); @@ -109,7 +109,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events { parameter.Write(newWriter); } - Writer.WriteUInt16((ushort) (newWriter.BaseStream.Position)); + Writer.WriteUInt16((ushort) (newWriter.BaseStream.Position+2)); Writer.WriteWriter(newWriter); } @@ -159,7 +159,6 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events { var newWriter = new ByteWriter(new MemoryStream()); newWriter.WriteInt16((short) Code); - Logger.Log("Writing PARAMETER: " + Loader.GetType().Name); Loader.Write(newWriter); Writer.WriteUInt16((ushort) (newWriter.BaseStream.Position+2)); Writer.WriteWriter(newWriter); @@ -180,7 +179,6 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events var actualLoader = Helper.LoadParameter(Code,Reader); - Logger.Log("Loading PARAMETER: "+actualLoader.GetType().Name); this.Loader = actualLoader; if (Loader!=null) { diff --git a/CTFAK/MMFParser/EXE/Loaders/Events/Expressions/Expression.cs b/CTFAK/MMFParser/EXE/Loaders/Events/Expressions/Expression.cs index 88626c0..317af8b 100644 --- a/CTFAK/MMFParser/EXE/Loaders/Events/Expressions/Expression.cs +++ b/CTFAK/MMFParser/EXE/Loaders/Events/Expressions/Expression.cs @@ -14,38 +14,34 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Expressions public object value; public object floatValue; public DataLoader Loader; + public int Unk1; + public ushort Unk2; public Expression(ByteReader reader) : base(reader) { } + public override void Write(ByteWriter Writer) { Writer.WriteInt16((short) ObjectType); Writer.WriteInt16((short) Num); if (ObjectType == 0 && Num == 0) return; - var dataWriter = new ByteWriter(new MemoryStream()); - if(ObjectType==Constants.ObjectType.System) + var newWriter = new ByteWriter(new MemoryStream()); + if (ObjectType == Constants.ObjectType.System && + (Num == 0 || Num == 3 || Num == 23 || Num == 24 || Num == 50)) { - Logger.Log("WRITING EXPRESSION "+Num); - if (Loader != null) - { - Loader.Write(dataWriter); - dataWriter.WriteInt32(0); - dataWriter.WriteInt16(0); - - } - else if ((int) ObjectType >= 2 || (int) ObjectType == 7) - { - Writer.WriteInt16((short) ObjectInfo); - Writer.WriteInt16((short) ObjectInfoList); - if (Num == 16 || Num == 19) - { - Writer.WriteInt32((short) value); - } - } + Loader.Write(newWriter); } - - - - Writer.WriteUInt16((ushort) (dataWriter.Size())); - Writer.WriteWriter(dataWriter); + else if ((int) ObjectType >= 2 || (int) ObjectType == -7) + { + newWriter.WriteInt16((short) ObjectInfo); + newWriter.WriteInt16((short) ObjectInfoList); + if(Num==16||Num==19)Loader.Write(newWriter); + + } + + newWriter.WriteInt32(0); + newWriter.WriteUInt16(0); + Writer.WriteInt16((short) ((newWriter.Size()))); + Writer.WriteWriter(newWriter); + } @@ -57,64 +53,44 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Expressions public override void Read() { var currentPosition = Reader.Tell(); + ObjectType = (Constants.ObjectType) Reader.ReadInt16(); Num = Reader.ReadInt16(); - if (ObjectType == 0 & Num == 0) return; - var size = Reader.ReadUInt16(); - if(ObjectType==Constants.ObjectType.System) + + if (ObjectType == 0 && Num == 0) return; + + var size = Reader.ReadInt16(); + if (ObjectType == Constants.ObjectType.System) { - switch (Num) + if(Num==0) Loader=new LongExp(Reader); + else if(Num==3) Loader= new StringExp(Reader); + else if (Num == 23) Loader = null; + else if (Num == 24) Loader = null; + else if (Num == 50) Loader = null; + else if((int)ObjectType>=2|| (int)ObjectType==-7) + { + ObjectInfo = Reader.ReadUInt16(); + ObjectInfoList = Reader.ReadInt16(); + if (Num == 16 || Num == 19) { - //Long - case 0: - { - Loader = new LongExp(Reader); - break; - } - //String - case 3: - { - Loader = new StringExp(Reader); - break; - } - //Double - case 23: - { - value = Reader.ReadDouble(); - floatValue = Reader.ReadSingle(); - break; - } - //GlobalString - case 24: - break; - //GlobalValue - case 50: - break; - case 16: - // value = Reader.ReadInt16(); - break; - case 19: - // value = Reader.ReadInt16(); - break; - default: - { - if ((int)ObjectType >= 2 || (int)ObjectType == 7) - { - ObjectInfo = Reader.ReadUInt16(); - ObjectInfoList = Reader.ReadUInt16(); - if (Num == 16 || Num == 19) - { - value = Reader.ReadInt16(); - } - } - break; - } + Loader = new ExtensionExp(Reader); } - Logger.Log("Reading Expression: "+Num); - Loader?.Read(); + } } - - // Reader.Seek(currentPosition+size); + else if((int)ObjectType>=2|| (int)ObjectType==-7) + { + ObjectInfo = Reader.ReadUInt16(); + ObjectInfoList = Reader.ReadInt16(); + if (Num == 16 || Num == 19) + { + Loader = new ExtensionExp(Reader); + } + } + Loader?.Read(); + // Unk1 = Reader.ReadInt32(); + // Unk2 = Reader.ReadUInt16(); + Reader.Seek(currentPosition+size); + } @@ -196,7 +172,28 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Expressions public override void Write(ByteWriter Writer) { + Writer.WriteInt32((int) Value); } } + public class ExtensionExp:ExpressionLoader + { + public ExtensionExp(ByteReader reader) : base(reader) + { + } + + public ExtensionExp(ChunkList.Chunk chunk) : base(chunk) + { + } + + public override void Read() + { + Value = Reader.ReadInt16(); + } + + public override void Write(ByteWriter Writer) + { + Writer.WriteInt16((short) Value); + } + } } diff --git a/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/AlterableValue.cs b/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/AlterableValue.cs index c1f1cc8..2ec8d71 100644 --- a/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/AlterableValue.cs +++ b/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/AlterableValue.cs @@ -16,7 +16,6 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters public override void Write(ByteWriter Writer) { - Value = 5; base.Write(Writer); } diff --git a/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/Colour.cs b/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/Colour.cs index 954b1f3..fb3e5c2 100644 --- a/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/Colour.cs +++ b/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/Colour.cs @@ -13,6 +13,13 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters var bytes = Reader.ReadBytes(4); Value = Color.FromArgb(bytes[0], bytes[1], bytes[2]); } - + + public override void Write(ByteWriter Writer) + { + Writer.WriteInt8(Value.R); + Writer.WriteInt8(Value.G); + Writer.WriteInt8(Value.B); + Writer.WriteInt8(255); + } } } diff --git a/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/ExpressionParameter.cs b/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/ExpressionParameter.cs index 6f1eb56..074da1e 100644 --- a/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/ExpressionParameter.cs +++ b/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/ExpressionParameter.cs @@ -22,13 +22,14 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters { var expression = new Expression(Reader); expression.Read(); - if (expression.ObjectType == 0) + Logger.Log($"Found expression {expression.ObjectType}-{expression.Num}=={((ExpressionLoader)expression.Loader)?.Value}"); + if (expression.ObjectType == 0&& expression.Num==0) { break; } else Items.Add(expression); - Logger.Log("Expression: "+expression.Num); - + // if(expression.Num==23||expression.Num==24||expression.Num==50||expression.Num==16||expression.Num==19)Logger.Log("CUMSHOT "+expression.Num); + } } @@ -36,10 +37,11 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters public override void Write(ByteWriter Writer) { Writer.WriteInt16(Comparsion); + Logger.Log("ExpressionCount: "+Items.Count); foreach (Expression item in Items) { + Logger.Log("Writing expression: "+item.Num); item.Write(Writer); - } } diff --git a/CTFAK/MMFParser/EXE/Loaders/ObjectInfo.cs b/CTFAK/MMFParser/EXE/Loaders/ObjectInfo.cs index d6d5e62..a795ba9 100644 --- a/CTFAK/MMFParser/EXE/Loaders/ObjectInfo.cs +++ b/CTFAK/MMFParser/EXE/Loaders/ObjectInfo.cs @@ -14,7 +14,21 @@ namespace CTFAK.MMFParser.EXE.Loaders public string Name = "ERROR"; public int Handle; public int ObjectType; - public UInt32 Flags; + public BitDict Flags = new BitDict(new string[] + { + "UNK1", + "UNK2", + "UNK3", + "UNK4", + "UNK5", + "UNK6", + "UNK7", + "UNK8", + "UNK9", + "UNK10", + "UNK11","UNK12","UNK13","UNK14", + + }); public bool Transparent; public bool Antialias; public int InkEffect; @@ -70,7 +84,8 @@ namespace CTFAK.MMFParser.EXE.Loaders var actualLoader = (ObjectHeader)(loader); Handle = actualLoader.Handle; ObjectType = actualLoader.ObjectType; - Flags = actualLoader.Flags; + Flags.flag = actualLoader.Flags; + UInt32 inkEffect = actualLoader.InkEffect; Transparent = ByteFlag.GetFlag(inkEffect, 28); Antialias = ByteFlag.GetFlag(inkEffect, 29); @@ -87,6 +102,7 @@ namespace CTFAK.MMFParser.EXE.Loaders { Properties.ReadNew(ObjectType,this); } + } public ImageItem GetPreview() @@ -239,8 +255,8 @@ namespace CTFAK.MMFParser.EXE.Loaders { Handle = Reader.ReadInt16(); ObjectType = Reader.ReadInt16(); - Flags = Reader.ReadUInt16(); Int16 reserved = Reader.ReadInt16(); + Flags = Reader.ReadUInt16(); InkEffect = Reader.ReadUInt32(); InkEffectParameter = Reader.ReadUInt32(); } diff --git a/CTFAK/MMFParser/MFA/Loaders/FrameItem.cs b/CTFAK/MMFParser/MFA/Loaders/FrameItem.cs index e29c838..cc61f83 100644 --- a/CTFAK/MMFParser/MFA/Loaders/FrameItem.cs +++ b/CTFAK/MMFParser/MFA/Loaders/FrameItem.cs @@ -36,7 +36,6 @@ namespace CTFAK.MMFParser.MFA.Loaders Writer.WriteInt32(IconHandle); Chunks.Write(Writer); - Logger.Log("Writing "+this.ObjectType); Loader.Write(Writer); diff --git a/CTFAK/MMFParser/Translation/PAME2MFA.cs b/CTFAK/MMFParser/Translation/PAME2MFA.cs index 6e7e193..ef60fae 100644 --- a/CTFAK/MMFParser/Translation/PAME2MFA.cs +++ b/CTFAK/MMFParser/Translation/PAME2MFA.cs @@ -100,7 +100,7 @@ namespace CTFAK.MMFParser.Translation newItem.InkEffect = item.InkEffect; newItem.InkEffectParameter = item.InkEffectValue; newItem.AntiAliasing = item.Antialias ? 1 : 0; - newItem.Flags = (int) item.Flags; //32 TODO:Fix this + newItem.Flags = (int) item.Flags.flag; //32 TODO:Fix this newItem.IconHandle = 12; newItem.Chunks = new ChunkList(null); @@ -117,7 +117,8 @@ namespace CTFAK.MMFParser.Translation } else { - var itemLoader = (ObjectCommon) item.Properties.Loader; + var itemLoader = (ObjectCommon) item?.Properties?.Loader; + if (itemLoader == null) continue; Logger.Log("Translating Object: "+itemLoader.Parent.Name); //CommonSection var newObject = new ObjectLoader(null); @@ -389,7 +390,7 @@ namespace CTFAK.MMFParser.Translation newInstance.X = instance.X; newInstance.Y = instance.Y; newInstance.Handle = instance.Handle; - newInstance.Flags = instance.FrameItem.Flags; + newInstance.Flags = instance.FrameItem.Flags.flag; newInstance.ParentType = (uint) instance.ParentType; newInstance.ItemHandle = (uint) (instance.ObjectInfo); newInstance.ParentHandle = (uint) instance.ParentHandle; @@ -422,7 +423,7 @@ namespace CTFAK.MMFParser.Translation newFrame.Events._cache = MFA.MFA.emptyEvents._cache; newFrame.Events._ifMFA = true; newFrame.Events.Version = 1028; - if (frame.Name == "Frame 1") + // if (frame.Name == "anus") { foreach (var item in newFrame.Items) { @@ -440,13 +441,13 @@ namespace CTFAK.MMFParser.Translation } foreach (EventGroup item in frame.Events.Items) { - foreach (Action itemAction in item.Actions) + /*foreach (Action itemAction in item.Actions) { for (int a=0;a