diff --git a/CTFAK/CTFAK.csproj b/CTFAK/CTFAK.csproj index 6e71e15..95ced60 100644 --- a/CTFAK/CTFAK.csproj +++ b/CTFAK/CTFAK.csproj @@ -257,6 +257,7 @@ + diff --git a/CTFAK/MMFParser/EXE/Loaders/Banks/SoundBank.cs b/CTFAK/MMFParser/EXE/Loaders/Banks/SoundBank.cs index ce2c9c9..5c1a2db 100644 --- a/CTFAK/MMFParser/EXE/Loaders/Banks/SoundBank.cs +++ b/CTFAK/MMFParser/EXE/Loaders/Banks/SoundBank.cs @@ -175,8 +175,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks writer.WriteInt32(Flags); writer.WriteInt32(0); writer.WriteInt32(Name.Length+1); - if (IsCompressed) writer.WriteUnicode(Name); - else writer.WriteAscii(Name); + writer.WriteAscii(Name); writer.WriteBytes(Data); diff --git a/CTFAK/MMFParser/EXE/Loaders/Events/EventsParts.cs b/CTFAK/MMFParser/EXE/Loaders/Events/EventsParts.cs index 08e8943..78d4970 100644 --- a/CTFAK/MMFParser/EXE/Loaders/Events/EventsParts.cs +++ b/CTFAK/MMFParser/EXE/Loaders/Events/EventsParts.cs @@ -23,6 +23,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events public override void Write(ByteWriter Writer) { ByteWriter newWriter = new ByteWriter(new MemoryStream()); + Logger.Log($"{ObjectType}-{Num}-{ObjectInfo}-{ObjectInfoList}-{Flags}-{OtherFlags}-{Items.Count}-{DefType}-{Identifier}"); newWriter.WriteInt16((short) ObjectType); newWriter.WriteInt16((short) Num); newWriter.WriteUInt16((ushort) ObjectInfo); @@ -31,7 +32,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events newWriter.WriteUInt8((sbyte) OtherFlags); newWriter.WriteUInt8((sbyte) Items.Count); newWriter.WriteInt8((byte) DefType); - newWriter.WriteInt16((short) Identifier); + newWriter.WriteUInt16((ushort) (Identifier)); foreach (Parameter parameter in Items) { parameter.Write(newWriter); @@ -59,11 +60,12 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events OtherFlags = Reader.ReadSByte(); NumberOfParameters = Reader.ReadByte(); DefType = Reader.ReadByte(); - Identifier = Reader.ReadInt16(); + Identifier = Reader.ReadUInt16(); for (int i = 0; i < NumberOfParameters; i++) { var item = new Parameter(Reader); item.Read(); + Items.Add(item); } Logger.Log(this); @@ -107,7 +109,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events { parameter.Write(newWriter); } - Writer.WriteUInt16((ushort) (newWriter.BaseStream.Position+2)); + Writer.WriteUInt16((ushort) (newWriter.BaseStream.Position)); Writer.WriteWriter(newWriter); } @@ -137,7 +139,6 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events } Logger.Log(this); - } public override string ToString() { @@ -158,6 +159,7 @@ 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); @@ -178,6 +180,7 @@ 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 c97f941..88626c0 100644 --- a/CTFAK/MMFParser/EXE/Loaders/Events/Expressions/Expression.cs +++ b/CTFAK/MMFParser/EXE/Loaders/Events/Expressions/Expression.cs @@ -13,6 +13,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Expressions public int ObjectInfoList; public object value; public object floatValue; + public DataLoader Loader; public Expression(ByteReader reader) : base(reader) { } public override void Write(ByteWriter Writer) { @@ -20,56 +21,30 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Expressions Writer.WriteInt16((short) Num); if (ObjectType == 0 && Num == 0) return; var dataWriter = new ByteWriter(new MemoryStream()); - switch (ObjectType) + if(ObjectType==Constants.ObjectType.System) { - case Constants.ObjectType.System: - switch (Num) + Logger.Log("WRITING EXPRESSION "+Num); + if (Loader != null) { - //Long - case 0: - { - dataWriter.WriteInt32((int) value); - break; - } - //String - case 3: - { - dataWriter.WriteUnicode(((string) value),true); - break; - } - //Double - case 23: + 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) { - dataWriter.WriteSingle((float) value); - dataWriter.WriteSingle((float) value); - break; + Writer.WriteInt32((short) value); } - //GlobalString - case 24: - break; - //GlobalValue - case 50: - break; - default: - { - if ((int)ObjectType >= 2 || (int)ObjectType == 7) - { - dataWriter.WriteInt16((short) ObjectInfo); - dataWriter.WriteInt16((short) ObjectInfoList); - // if self.num in extensionLoaders: - // loader = extensionLoaders[self.num] - // self.loader = self.new(loader, reader) - } - - break; - } - } - break; } - + + - Writer.WriteInt16((short) (dataWriter.Size()+6)); + Writer.WriteUInt16((ushort) (dataWriter.Size())); Writer.WriteWriter(dataWriter); } @@ -86,21 +61,20 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Expressions Num = Reader.ReadInt16(); if (ObjectType == 0 & Num == 0) return; var size = Reader.ReadUInt16(); - switch (ObjectType) + if(ObjectType==Constants.ObjectType.System) { - case Constants.ObjectType.System: - switch (Num) + switch (Num) { //Long case 0: { - value = Reader.ReadInt32(); + Loader = new LongExp(Reader); break; } //String case 3: { - value = Reader.ReadWideString(); + Loader = new StringExp(Reader); break; } //Double @@ -116,31 +90,113 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Expressions //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 self.num in extensionLoaders: - // loader = extensionLoaders[self.num] - // self.loader = self.new(loader, reader) + if (Num == 16 || Num == 19) + { + value = Reader.ReadInt16(); + } } - break; } - } - - break; + Logger.Log("Reading Expression: "+Num); + Loader?.Read(); } - Reader.Seek(currentPosition+size); + + // Reader.Seek(currentPosition+size); } public override string ToString() { - return $"Expression {ObjectType}=={Num}: {value}"; + return $"Expression {ObjectType}=={Num}: {((ExpressionLoader)Loader)?.Value}"; + } + } + public class ExpressionLoader:DataLoader + { + public object Value; + public ExpressionLoader(ByteReader reader) : base(reader) + { + } + + public ExpressionLoader(ChunkList.Chunk chunk) : base(chunk) + { + } + + public override void Read() + { + throw new NotImplementedException(); + } + + public override void Write(ByteWriter Writer) + { + throw new NotImplementedException(); + } + + public override void Print() + { + throw new NotImplementedException(); + } + } + + public class StringExp:ExpressionLoader + { + + + public StringExp(ByteReader reader) : base(reader) + { + } + + public StringExp(ChunkList.Chunk chunk) : base(chunk) + { + } + + public override void Read() + { + Value = Reader.ReadWideString(); + } + + public override void Write(ByteWriter Writer) + { + Writer.WriteUnicode((string) Value,true); + } + + public override void Print() + { + throw new NotImplementedException(); + } + } + public class LongExp:ExpressionLoader + { + public int Val1; + + public LongExp(ByteReader reader) : base(reader) + { + } + + public LongExp(ChunkList.Chunk chunk) : base(chunk) + { + } + + public override void Read() + { + Value = Reader.ReadInt32(); + } + + public override void Write(ByteWriter Writer) + { + Writer.WriteInt32((int) Value); } } } diff --git a/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/AlterableValue.cs b/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/AlterableValue.cs index c9e2005..c1f1cc8 100644 --- a/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/AlterableValue.cs +++ b/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/AlterableValue.cs @@ -5,15 +5,25 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters { class AlterableValue : Short { + public int Unk; public AlterableValue(ByteReader reader) : base(reader) { } public override void Read() { - base.Read(); + base.Read(); + + } + + public override void Write(ByteWriter Writer) + { + Value = 5; + base.Write(Writer); + } + public override string ToString() { - return $"AlterableValue{Convert.ToChar(Value).ToString().ToUpper()}"; + return $"AlterableValue{Value.ToString().ToUpper()}"; } } } diff --git a/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/Click.cs b/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/Click.cs index 4ba8503..b494917 100644 --- a/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/Click.cs +++ b/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/Click.cs @@ -13,14 +13,12 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters public override void Read() { - base.Read(); Button = Reader.ReadByte(); IsDouble = Reader.ReadByte(); } public override void Write(ByteWriter Writer) { - base.Write(Writer); Writer.WriteInt8(Button); Writer.WriteInt8(IsDouble); diff --git a/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/ExpressionParameter.cs b/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/ExpressionParameter.cs index d0b53e0..6f1eb56 100644 --- a/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/ExpressionParameter.cs +++ b/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/ExpressionParameter.cs @@ -16,15 +16,18 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters public override void Read() { - base.Read(); Comparsion = Reader.ReadInt16(); Items = new List(); while (true) { var expression = new Expression(Reader); expression.Read(); - Items.Add(expression); - if (expression.ObjectType == 0) break; + if (expression.ObjectType == 0) + { + break; + } + else Items.Add(expression); + Logger.Log("Expression: "+expression.Num); } @@ -32,12 +35,11 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters public override void Write(ByteWriter Writer) { - base.Write(Writer); - Writer.WriteInt16(Comparsion); foreach (Expression item in Items) { item.Write(Writer); + } } diff --git a/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/Group.cs b/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/Group.cs index a3b6e37..c402e4f 100644 --- a/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/Group.cs +++ b/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/Group.cs @@ -1,4 +1,5 @@ -using CTFAK.Utils; +using System; +using CTFAK.Utils; namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters { @@ -16,20 +17,23 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters public override void Read() { - base.Read(); Offset = Reader.Tell() - 24; Flags = Reader.ReadUInt16(); Id = Reader.ReadUInt16(); Name = Reader.ReadWideString(); Password = Reader.ReadInt32(); + Logger.Log("Password: "+Password); } public override void Write(ByteWriter Writer) { - base.Write(Writer); - Writer.WriteUInt16(Flags); + Writer.WriteUInt16(0); Writer.WriteUInt16(Id); - Writer.WriteAscii(Name); + Writer.WriteUnicode(Name,true); + if(true)//decrypt password + { + Password = Checksum.MakeGroupChecksum("", Name); + } Writer.WriteInt32(Password); } diff --git a/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/Int.cs b/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/Int.cs index 9c6b98b..bc38e97 100644 --- a/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/Int.cs +++ b/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/Int.cs @@ -11,6 +11,10 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters { Value = (short)Reader.ReadInt32(); } - + + public override void Write(ByteWriter Writer) + { + Writer.WriteInt32(Value); + } } } diff --git a/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/KeyParameter.cs b/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/KeyParameter.cs index e6051f0..05fba64 100644 --- a/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/KeyParameter.cs +++ b/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/KeyParameter.cs @@ -13,13 +13,11 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters public override void Read() { - base.Read(); Key = Reader.ReadInt16(); } public override void Write(ByteWriter Writer) { - base.Write(Writer); Writer.WriteInt16(Key); } diff --git a/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/ParamObject.cs b/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/ParamObject.cs index efabced..c251dd3 100644 --- a/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/ParamObject.cs +++ b/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/ParamObject.cs @@ -10,10 +10,20 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters public ParamObject(ByteReader reader) : base(reader) { } public override void Read() { + ObjectInfoList = Reader.ReadInt16(); ObjectInfo = Reader.ReadUInt16(); ObjectType = Reader.ReadInt16(); } + + public override void Write(ByteWriter Writer) + { + Writer.WriteInt16((short) ObjectInfoList); + Writer.WriteInt16((short)ObjectInfo); + Writer.WriteInt16((short)ObjectType); + + } + public override string ToString() { return $"Object {ObjectInfoList} {ObjectInfo} {ObjectType}"; diff --git a/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/ParameterCommon.cs b/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/ParameterCommon.cs index df14e06..b5b84cd 100644 --- a/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/ParameterCommon.cs +++ b/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/ParameterCommon.cs @@ -10,6 +10,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters public ParameterCommon(ByteReader reader) : base(reader) { } public override void Write(ByteWriter Writer) { + throw new NotImplementedException("Unexcepted parameter: "+this.GetType().Name); } diff --git a/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/Remark.cs b/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/Remark.cs index 961b722..04c8e2a 100644 --- a/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/Remark.cs +++ b/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/Remark.cs @@ -9,6 +9,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters public Remark(ByteReader reader) : base(reader) { } public override void Read() { + base.Read(); //TODO } diff --git a/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/Sample.cs b/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/Sample.cs index cd377ad..c6a576d 100644 --- a/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/Sample.cs +++ b/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/Sample.cs @@ -15,6 +15,14 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters Flags = Reader.ReadUInt16(); Name = Reader.ReadWideString(); } + + public override void Write(ByteWriter Writer) + { + Writer.WriteInt16((short) Handle); + Writer.WriteUInt16((ushort) Flags); + Writer.WriteUnicode(Name); + } + public override string ToString() { return $"Sample '{Name}' handle: {Handle}"; diff --git a/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/Shoot.cs b/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/Shoot.cs index 26a24a9..5d6c16a 100644 --- a/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/Shoot.cs +++ b/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/Shoot.cs @@ -15,7 +15,6 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters public override void Read() { - base.Read(); ShootPos = new Position(Reader); ShootPos.Read(); ObjectInstance = Reader.ReadUInt16(); @@ -26,7 +25,6 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters public override void Write(ByteWriter Writer) { - base.Write(Writer); ShootPos.Write(Writer); Writer.WriteUInt16(ObjectInstance); Writer.WriteUInt16(ObjectInfo); diff --git a/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/Short.cs b/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/Short.cs index 00efde0..91bc469 100644 --- a/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/Short.cs +++ b/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/Short.cs @@ -12,6 +12,12 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters Value = Reader.ReadInt16(); } + + public override void Write(ByteWriter Writer) + { + Writer.WriteInt16(Value); + } + public override string ToString() { return $"{this.GetType().Name} value: {Value}"; diff --git a/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/StringParam.cs b/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/StringParam.cs index 059c54b..4cf1f54 100644 --- a/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/StringParam.cs +++ b/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/StringParam.cs @@ -13,13 +13,11 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters public override void Read() { - base.Read(); Value = Reader.ReadAscii(); } public override void Write(ByteWriter Writer) { - base.Write(Writer); Writer.WriteAscii(Value); } diff --git a/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/Time.cs b/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/Time.cs index 1c6da8b..012562e 100644 --- a/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/Time.cs +++ b/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/Time.cs @@ -14,6 +14,13 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters Loops = Reader.ReadInt32(); } + + public override void Write(ByteWriter Writer) + { + Writer.WriteInt32(Timer); + Writer.WriteInt32(Loops); + } + public override string ToString() { diff --git a/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/TwoShorts.cs b/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/TwoShorts.cs index 9bd70ca..49a51be 100644 --- a/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/TwoShorts.cs +++ b/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/TwoShorts.cs @@ -13,14 +13,12 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters public override void Read() { - base.Read(); Value1 = Reader.ReadInt16(); Value2 = Reader.ReadInt16(); } public override void Write(ByteWriter Writer) { - base.Write(Writer); Writer.WriteInt16(Value1); Writer.WriteInt16(Value2); } diff --git a/CTFAK/MMFParser/MFA/Loaders/Events.cs b/CTFAK/MMFParser/MFA/Loaders/Events.cs index 1820356..c6bb93e 100644 --- a/CTFAK/MMFParser/MFA/Loaders/Events.cs +++ b/CTFAK/MMFParser/MFA/Loaders/Events.cs @@ -42,7 +42,7 @@ namespace CTFAK.MMFParser.MFA.Loaders public int EditorDataUnk; public uint EventDataLen; public uint CommentDataLen; - private byte[] _cache; + public byte[] _cache; public bool _ifMFA; public Events(ByteReader reader) : base(reader) diff --git a/CTFAK/MMFParser/MFA/Loaders/Frame.cs b/CTFAK/MMFParser/MFA/Loaders/Frame.cs index 14662ac..a55aad8 100644 --- a/CTFAK/MMFParser/MFA/Loaders/Frame.cs +++ b/CTFAK/MMFParser/MFA/Loaders/Frame.cs @@ -65,7 +65,7 @@ namespace CTFAK.MMFParser.MFA.Loaders Writer.AutoWriteUnicode(UnkString); Writer.WriteInt32(LastViewedX); Writer.WriteInt32(LastViewedY); - // Writer.WriteInt32(Palette.Count);//WTF HELP + Writer.WriteInt32(Palette.Count);//WTF HELP foreach (var item in Palette) { @@ -220,7 +220,8 @@ namespace CTFAK.MMFParser.MFA.Loaders Events.Read(); Chunks = new ChunkList(Reader); Chunks.Read(); - MFA.emptyEvents = Events; + if(Events.Items.Count==0)MFA.emptyEvents = Events; + MFA.emptyFrameChunks = Chunks; } } diff --git a/CTFAK/MMFParser/Translation/PAME2MFA.cs b/CTFAK/MMFParser/Translation/PAME2MFA.cs index 6f6656b..6e7e193 100644 --- a/CTFAK/MMFParser/Translation/PAME2MFA.cs +++ b/CTFAK/MMFParser/Translation/PAME2MFA.cs @@ -5,15 +5,18 @@ using System.Linq; using CTFAK.MMFParser.EXE; using CTFAK.MMFParser.EXE.Loaders; using CTFAK.MMFParser.EXE.Loaders.Events; +using CTFAK.MMFParser.EXE.Loaders.Events.Parameters; using CTFAK.MMFParser.EXE.Loaders.Objects; using CTFAK.MMFParser.MFA.Loaders; using CTFAK.MMFParser.MFA.Loaders.mfachunks; using CTFAK.Utils; +using Action = CTFAK.MMFParser.EXE.Loaders.Events.Action; using Animation = CTFAK.MMFParser.MFA.Loaders.mfachunks.Animation; using AnimationDirection = CTFAK.MMFParser.MFA.Loaders.mfachunks.AnimationDirection; using Backdrop = CTFAK.MMFParser.MFA.Loaders.mfachunks.Backdrop; using ChunkList = CTFAK.MMFParser.MFA.Loaders.ChunkList; using Counter = CTFAK.MMFParser.MFA.Loaders.mfachunks.Counter; +using Events = CTFAK.MMFParser.MFA.Loaders.Events; using Frame = CTFAK.MMFParser.EXE.Loaders.Frame; using Layer = CTFAK.MMFParser.MFA.Loaders.Layer; using Movement = CTFAK.MMFParser.MFA.Loaders.mfachunks.Movement; @@ -43,12 +46,12 @@ namespace CTFAK.MMFParser.Translation //mfa.Stamp = wtf; //if (game.Fonts != null) mfa.Fonts = game.Fonts; - //mfa.Sounds = game.Sounds; - //foreach (var item in mfa.Sounds.Items) - //{ - // item.IsCompressed = false; - //} - //mfa.Music = game.Music; + // mfa.Sounds = game.Sounds; + // foreach (var item in mfa.Sounds.Items) + // { + // item.IsCompressed = false; + // } + // mfa.Music = game.Music; mfa.Images.Items = game.Images.Images; foreach (var key in mfa.Images.Items.Keys) { @@ -319,7 +322,7 @@ namespace CTFAK.MMFParser.Translation mfa.Frames.Clear(); foreach (Frame frame in game.Frames) { - // if (frame.Name != "title") continue; + var newFrame = new MFA.Loaders.Frame(null); //FrameInfo newFrame.Handle = game.Frames.IndexOf(frame); @@ -410,54 +413,67 @@ namespace CTFAK.MMFParser.Translation newFolder.Items = new List() {(uint) newFrameItem.Handle}; newFrame.Folders.Add(newFolder); } - //EventInfo - List quailifers = new List(); - newFrame.Events = MFA.MFA.emptyEvents; + newFrame.Events = new Events((ByteReader) null);//MFA.MFA.emptyEvents; + newFrame.Events.Items = new List(); + newFrame.Events.Objects=new List(); + newFrame.Events._cache = MFA.MFA.emptyEvents._cache; newFrame.Events._ifMFA = true; newFrame.Events.Version = 1028; - foreach (var item in newFrame.Items) - { - var newObject = new EventObject((ByteReader) null); - - newObject.Handle = (uint) item.Handle; - newObject.Name = item.Name ?? ""; - newObject.TypeName = ""; - newObject.ItemType = (ushort) item.ObjectType; - newObject.ObjectType = 1; - newObject.Flags = 0; - newObject.ItemHandle = (uint) item.Handle; - newObject.InstanceHandle = 0xFFFFFFFF; - newFrame.Events.Objects.Add(newObject); - - } - - for (int i = 0; i < frame.Events.Quailifers.Length; i++) + if (frame.Name == "Frame 1") { - var item = frame.Events.Quailifers[i]; - if (quailifers.Contains(item)) + foreach (var item in newFrame.Items) { + var newObject = new EventObject((ByteReader) null); + + newObject.Handle = (uint) item.Handle; + newObject.Name = item.Name ?? ""; + newObject.TypeName = ""; + newObject.ItemType = (ushort) item.ObjectType; + newObject.ObjectType = 1; + newObject.Flags = 0; + newObject.ItemHandle = (uint) item.Handle; + newObject.InstanceHandle = 0xFFFFFFFF; + newFrame.Events.Objects.Add(newObject); } - else + foreach (EventGroup item in frame.Events.Items) { - var newObject = new EventObject((ByteReader) null); - quailifers.Add(newObject); - var newHandle = 0; - while (true) + foreach (Action itemAction in item.Actions) { - + for (int a=0;a { @@ -52,7 +52,7 @@ namespace CTFAK } if (args.Length > 1) { - ReadFile(args[1],true,false,false); + ReadFile(args[1],true,false,true); MFAGenerator.BuildMFA(); Environment.Exit(0); } diff --git a/CTFAK/Utils/Checksum.cs b/CTFAK/Utils/Checksum.cs new file mode 100644 index 0000000..44c7883 --- /dev/null +++ b/CTFAK/Utils/Checksum.cs @@ -0,0 +1,39 @@ +using System; + +namespace CTFAK.Utils +{ + public static class Checksum + { + public static int WrapSingleChar(int value) + { + value = value & 0xFF; + if (value > 127) + { + value -= 256; + } + + return value; + } + public static int MakeGroupChecksum(string pass, string name) + { + var groupWords = @"mqojhm:qskjhdsmkjsmkdjhq\x63clkcdhdlkjhd"; + var v4 = 57; + foreach (char c in name) + { + v4 += c^0x7F; + } + + var v5 = 0; + foreach (char c in groupWords) + { + v4 += WrapSingleChar(groupWords[v5] + (c & 0xC3)) ^ 0xF3; + v5++; + if (v5 > groupWords.Length) v5 = 0; + } + + return v4; + + } + + } +} \ No newline at end of file diff --git a/CTFAK/Utils/Helper.cs b/CTFAK/Utils/Helper.cs index c784ca2..083a169 100644 --- a/CTFAK/Utils/Helper.cs +++ b/CTFAK/Utils/Helper.cs @@ -107,50 +107,61 @@ namespace CTFAK.Utils { item = new Time(reader); } - - if (code == 50) - { - item = new AlterableValue(reader); - } - - if (code == 32) + if (code == 3 || code==4 ||code == 10 || code == 11 || code == 12 || code == 17 || code == 26 || code == 31 || + code == 43 || code == 57 || code == 58 || code == 60 || code == 61) { - item = new Click(reader); + item = new Short(reader); } - - if (code == 16) + if (code == 5 || code == 25 || code == 29 || code == 34 || code == 48 || code == 56) { - item=new Position(reader); + item = new Int(reader); } - - if (code == 18) + if (code == 6 || code == 7 || code == 35 || code == 36) { - item=new Shoot(reader); + item = new Sample(reader); } - if (code == 9 || code == 21) { item = new Create(reader); } - if (code == 13) { item = new Every(reader); } - + if (code == 14 || code == 44) + { + item = new KeyParameter(reader); + } + if (code == 15||code == 22||code == 23||code == 27||code == 28||code == 45||code == 46||code==52||code==53||code==54||code == 59||code == 62) + { + item = new ExpressionParameter(reader); + } + if (code == 16) + { + item=new Position(reader); + } + if (code == 18) + { + item=new Shoot(reader); + } + if (code == 19) + { + item = new Zone(reader); + } if (code == 24) { item = new Colour(reader); } + - if (code == 19) + if (code == 50) { - item = new Zone(reader); + item = new AlterableValue(reader); } - if (code == 14 || code == 44) + if (code == 32) { - item = new KeyParameter(reader); + item = new Click(reader); } if (code == 38) @@ -178,26 +189,13 @@ namespace CTFAK.Utils item = new TwoShorts(reader); } - if (code == 6 || code == 7 || code == 35 || code == 36) - { - item = new Sample(reader); - } + - if (code == 3 || code == 10 || code == 11 || code == 12 || code == 17 || code == 26 || code == 31 || - code == 43 || code == 57 || code == 58 || code == 60 || code == 61) - { - item = new Short(reader); - } + - if (code == 15||code == 22||code == 23||code == 27||code == 28||code == 45||code == 46||code == 59||code == 62) - { - item = new ExpressionParameter(reader); - } + - if (code == 5 || code == 25 || code == 29 || code == 34 || code == 48 || code == 56) - { - item = new Int(reader); - } + return item; } diff --git a/CTFAK/Utils/Logger.cs b/CTFAK/Utils/Logger.cs index a721081..66353d3 100644 --- a/CTFAK/Utils/Logger.cs +++ b/CTFAK/Utils/Logger.cs @@ -32,7 +32,7 @@ namespace CTFAK.Utils Console.WriteLine(Helper.GetCurrentTime()+text); Console.ForegroundColor = ConsoleColor.White; } - //if(logToConsole) MainConsole.Message(text); + if(logToConsole) MainConsole.Message(text);