From ca8e4223d03aee6f9b9fb5729ce59d3ce40c8401 Mon Sep 17 00:00:00 2001 From: 1987kostya Date: Sat, 23 Jan 2021 01:03:27 +0600 Subject: [PATCH] Expressions reading/writing fixes, started working on layers fixes --- CTFAK/GUI/MainForm.cs | 2 +- .../Loaders/Events/Expressions/Expression.cs | 34 ++++++++++++++++--- .../Events/Parameters/ExpressionParameter.cs | 1 + CTFAK/MMFParser/MFA/Loaders/ChunkList.cs | 2 +- CTFAK/MMFParser/MFA/Loaders/Frame.cs | 21 ++++++++---- CTFAK/MMFParser/MFA/Loaders/FrameItem.cs | 3 +- CTFAK/MMFParser/MFA/Loaders/Layer.cs | 5 +++ CTFAK/MMFParser/Translation/PAME2MFA.cs | 3 ++ CTFAK/Program.cs | 4 +-- 9 files changed, 58 insertions(+), 17 deletions(-) diff --git a/CTFAK/GUI/MainForm.cs b/CTFAK/GUI/MainForm.cs index 0211d16..2f05e9a 100644 --- a/CTFAK/GUI/MainForm.cs +++ b/CTFAK/GUI/MainForm.cs @@ -629,9 +629,9 @@ namespace CTFAK.GUI foreach (var pair in common.Animations?.AnimationDict) { var animNode = new ChunkNode($"Animation {pair.Key}", pair.Value); + if (pair.Value.Reader == null) continue; objInstNode.Nodes.Add(animNode); if (pair.Value?.DirectionDict != null) - if (pair.Value?.DirectionDict != null) { foreach (var dir in pair.Value?.DirectionDict) if (pair.Value.DirectionDict.Count > 1) diff --git a/CTFAK/MMFParser/EXE/Loaders/Events/Expressions/Expression.cs b/CTFAK/MMFParser/EXE/Loaders/Events/Expressions/Expression.cs index bd9b628..5ccd2c0 100644 --- a/CTFAK/MMFParser/EXE/Loaders/Events/Expressions/Expression.cs +++ b/CTFAK/MMFParser/EXE/Loaders/Events/Expressions/Expression.cs @@ -16,10 +16,12 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Expressions public DataLoader Loader; public int Unk1; public ushort Unk2; + private int _unk; public Expression(ByteReader reader) : base(reader) { } public override void Write(ByteWriter Writer) { + bool temp = false; Writer.WriteInt16((short) ObjectType); Writer.WriteInt16((short) Num); if (ObjectType == 0 && Num == 0) return; @@ -35,11 +37,26 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Expressions newWriter.WriteInt16((short) ObjectInfo); newWriter.WriteInt16((short) ObjectInfoList); if(Num==16||Num==19)Loader.Write(newWriter); + else + { + temp = true; + newWriter.WriteInt32(_unk); + } + } + else + { + + } + // + // newWriter.WriteUInt16(0); + if (temp) + { + Writer.WriteInt16((short) ((newWriter.Size()+2))); + } + else + { + Writer.WriteInt16((short) ((newWriter.Size()+6))); } - newWriter.WriteInt32(0); - newWriter.WriteUInt16(0); - - Writer.WriteInt16((short) ((newWriter.Size()))); Writer.WriteWriter(newWriter); } @@ -74,6 +91,10 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Expressions { Loader = new ExtensionExp(Reader); } + else + { + _unk = Reader.ReadInt32(); + } } } else if((int)ObjectType>=2|| (int)ObjectType==-7) @@ -155,6 +176,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Expressions public class LongExp:ExpressionLoader { public int Val1; + private int _unk; public LongExp(ByteReader reader) : base(reader) { @@ -166,13 +188,15 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Expressions public override void Read() { + // _unk = Reader.ReadInt32(); Value = Reader.ReadInt32(); } public override void Write(ByteWriter Writer) { - + // Writer.WriteInt32((int) _unk); Writer.WriteInt32((int) Value); + } } public class ExtensionExp:ExpressionLoader diff --git a/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/ExpressionParameter.cs b/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/ExpressionParameter.cs index 4f17d9d..59ccbd3 100644 --- a/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/ExpressionParameter.cs +++ b/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/ExpressionParameter.cs @@ -43,6 +43,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters // Logger.Log("Writing expression: "+item.Num); item.Write(Writer); } + Writer.WriteInt32(0); } diff --git a/CTFAK/MMFParser/MFA/Loaders/ChunkList.cs b/CTFAK/MMFParser/MFA/Loaders/ChunkList.cs index 6ec2c5b..d077dfb 100644 --- a/CTFAK/MMFParser/MFA/Loaders/ChunkList.cs +++ b/CTFAK/MMFParser/MFA/Loaders/ChunkList.cs @@ -20,7 +20,7 @@ namespace CTFAK.MMFParser.MFA.Loaders { Writer.WriteInt8(0); } - } + } public override void Print() { diff --git a/CTFAK/MMFParser/MFA/Loaders/Frame.cs b/CTFAK/MMFParser/MFA/Loaders/Frame.cs index a6177c4..be60fa2 100644 --- a/CTFAK/MMFParser/MFA/Loaders/Frame.cs +++ b/CTFAK/MMFParser/MFA/Loaders/Frame.cs @@ -114,13 +114,13 @@ namespace CTFAK.MMFParser.MFA.Loaders Events.Write(Writer); - // for (int i=0;i {