diff --git a/CTFAK/CTFAK.csproj b/CTFAK/CTFAK.csproj index 0f36bab..6e765a8 100644 --- a/CTFAK/CTFAK.csproj +++ b/CTFAK/CTFAK.csproj @@ -172,6 +172,7 @@ + diff --git a/CTFAK/MMFParser/EXE/ChunkList.cs b/CTFAK/MMFParser/EXE/ChunkList.cs index bbf21b5..0da8479 100644 --- a/CTFAK/MMFParser/EXE/ChunkList.cs +++ b/CTFAK/MMFParser/EXE/ChunkList.cs @@ -29,7 +29,6 @@ namespace CTFAK.MMFParser.EXE if (chunk.Id == 26214) { if(!Settings.twofiveplus) chunk.Loader = LoadModern(chunk); - //LoadChunk(chunk); } else { @@ -303,7 +302,7 @@ namespace CTFAK.MMFParser.EXE } loader?.Read(); - // chunk.ChunkData = null; + // chunk.ChunkData = null; //TODO:Do something smarter // chunk.RawData = null; return loader; } diff --git a/CTFAK/MMFParser/EXE/Loaders/Banks/ImageBank.cs b/CTFAK/MMFParser/EXE/Loaders/Banks/ImageBank.cs index 82e4c05..09e12fb 100644 --- a/CTFAK/MMFParser/EXE/Loaders/Banks/ImageBank.cs +++ b/CTFAK/MMFParser/EXE/Loaders/Banks/ImageBank.cs @@ -17,7 +17,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks public bool SaveImages = false; public Dictionary Images = new Dictionary(); public uint NumberOfItems; - public bool PreloadOnly = true; + public bool PreloadOnly = false; public ImageBank(ByteReader reader) : base(reader) { @@ -132,16 +132,13 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks public int Size; - //tranparent,add later Color _transparent; byte[] _colorArray; public byte[] rawImg; public byte[] rawAlpha; - public bool Debug = false; - public int Debug2 = 1; private Bitmap _bitmap; public void Read(bool load) @@ -149,7 +146,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks Handle = Reader.ReadInt32(); if (!Debug) { - if (Settings.Build>=290) Handle -= 1; + if (Settings.Build>291) Handle -= 1; if (Program.CleanData.ProductVersion != Constants.Products.MMF15&&Settings.Build>=284) Handle -= 1; } @@ -163,6 +160,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks Handle = Reader.ReadInt32(); if (!Debug) { + if (Settings.Build>291) Handle -= 1; if (Exe.Instance.GameData.ProductVersion != Constants.Products.MMF15&&Settings.Build>=284) Handle -= 1; } @@ -330,7 +328,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks } } } - if (Settings.Build > 283) + if (Settings.Build > 283) // No idea, but this is not working with old games { if (_transparent != null) { diff --git a/CTFAK/MMFParser/EXE/Loaders/Banks/SoundBank.cs b/CTFAK/MMFParser/EXE/Loaders/Banks/SoundBank.cs index e1abe49..61f8d44 100644 --- a/CTFAK/MMFParser/EXE/Loaders/Banks/SoundBank.cs +++ b/CTFAK/MMFParser/EXE/Loaders/Banks/SoundBank.cs @@ -128,11 +128,11 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks Checksum = Reader.ReadInt32(); References = Reader.ReadInt32(); var decompressedSize = Reader.ReadInt32(); - Flags = (int)Reader.ReadUInt32(); //flags + Flags = (int)Reader.ReadUInt32(); var reserved = Reader.ReadInt32(); var nameLenght = Reader.ReadInt32(); ByteReader soundData; - if (IsCompressed) //compressed + if (IsCompressed) { var size = Reader.ReadInt32(); soundData = new ByteReader(Decompressor.decompress_block(Reader, size, decompressedSize)); @@ -141,23 +141,14 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks { soundData = new ByteReader(Reader.ReadBytes(decompressedSize)); } - if (IsCompressed) - { - Name = soundData.ReadAscii(nameLenght); - - } - else - { - Name = soundData.ReadWideString(nameLenght); - } - + Name = soundData.ReadWideString(nameLenght); + Logger.Log(Name); - this.Data = soundData.ReadBytes((int) soundData.Size()); + Data = soundData.ReadBytes((int) soundData.Size()); if (Settings.DumpSounds) { Name = Helper.CleanInput(Name); File.WriteAllBytes($"{Settings.SoundPath}\\{Name}.wav", Data); - // File.WriteAllBytes($"{Name}.wav", Data); } @@ -169,11 +160,14 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks writer.WriteUInt32((uint)Handle); writer.WriteInt32(Checksum); writer.WriteInt32(References); - writer.WriteInt32(Data.Length+Name.Length+8); + writer.WriteInt32(Data.Length+(Name.Length*2)); writer.WriteInt32(Flags); writer.WriteInt32(0); writer.WriteInt32(Name.Length); writer.WriteUnicode(Name); + // writer.BaseStream.Position -= 4; + + writer.WriteBytes(Data); diff --git a/CTFAK/MMFParser/EXE/Loaders/Events/Events.cs b/CTFAK/MMFParser/EXE/Loaders/Events/Events.cs index db3e748..afe94ba 100644 --- a/CTFAK/MMFParser/EXE/Loaders/Events/Events.cs +++ b/CTFAK/MMFParser/EXE/Loaders/Events/Events.cs @@ -209,9 +209,9 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events newWriter.WriteUInt16(Flags); if (Settings.Build >= 284) { - if(isMFA) + if(isMFA)//For MFA { - newWriter.WriteInt16((short) IsRestricted); //For MFA + newWriter.WriteInt16((short) IsRestricted); newWriter.WriteInt16((short) RestrictCpt); newWriter.WriteInt16((short) Identifier); newWriter.WriteInt16((short) Undo); @@ -258,13 +258,19 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events { var num = cond.Num; if (num == -42) num = -27; - // if (num == -28||num == -29||num == -30||num == -31||num == -32||num == -33||num == -34||num == -35||num == -36||num == -37||num == -38||num == -39) num = -8; + if (Settings.Build >= 290) + { + if (num == -28||num == -29||num == -30||num == -31||num == -32||num == -33||num == -34||num == -35||num == -36||num == -37||num == -38||num == -39) num = -8; + } cond.Num = num; } public static void FixActions(ref Action act) { var num = act.Num; - // if (num == 27||num == 28||num == 29||num == 30) num = 3; + if (Settings.Build >= 290) + { + if (num == 27||num == 28||num == 29||num == 30) num = 3; + } act.Num = num; } diff --git a/CTFAK/MMFParser/EXE/Loaders/Events/EventsParts.cs b/CTFAK/MMFParser/EXE/Loaders/Events/EventsParts.cs index c559b98..6643065 100644 --- a/CTFAK/MMFParser/EXE/Loaders/Events/EventsParts.cs +++ b/CTFAK/MMFParser/EXE/Loaders/Events/EventsParts.cs @@ -179,15 +179,9 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events var actualLoader = Helper.LoadParameter(Code,Reader); this.Loader = actualLoader; - if (Loader!=null) - { - - Loader.Read(); - } - else - { - throw new Exception("Loader is null: "+Code); - } + if (Loader!=null) Loader.Read(); + else throw new Exception("Loader is null: "+Code); + Reader.Seek(currentPosition+size); } diff --git a/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/Extension.cs b/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/Extension.cs index c0eff47..6fbaf5b 100644 --- a/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/Extension.cs +++ b/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/Extension.cs @@ -18,7 +18,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters Size = Reader.ReadInt16(); Type = Reader.ReadInt16(); Code = Reader.ReadInt16(); - Data = Reader.ReadBytes(Size-20); + Data = Reader.ReadBytes((Size-20>0?Size-20:0)); } diff --git a/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/Group.cs b/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/Group.cs index c67d59e..e27ebf9 100644 --- a/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/Group.cs +++ b/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/Group.cs @@ -22,7 +22,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters Id = Reader.ReadUInt16(); Name = Reader.ReadWideString(); Password = Reader.ReadInt32(); - Password = Checksum.MakeGroupChecksum("", Name); + Password = Checksum.MakeGroupChecksum("pass", Name); Logger.Log("Password: "+Password); } diff --git a/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/Program.cs b/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/Program.cs new file mode 100644 index 0000000..588674e --- /dev/null +++ b/CTFAK/MMFParser/EXE/Loaders/Events/Parameters/Program.cs @@ -0,0 +1,29 @@ +using CTFAK.Utils; + +namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters +{ + public class Program:ParameterCommon + { + public short Flags; + public string Filename; + public string Command; + + public Program(ByteReader reader) : base(reader) + { + } + + public override void Read() + { + Flags = Reader.ReadInt16(); + Filename = Reader.ReadAscii(260); + Command = Reader.ReadAscii(); + } + + public override void Write(ByteWriter Writer) + { + Writer.WriteInt16(Flags); + Writer.WriteAscii(Filename); + Writer.WriteAscii(Command); + } + } +} \ No newline at end of file diff --git a/CTFAK/MMFParser/EXE/Loaders/Objects/Movements.cs b/CTFAK/MMFParser/EXE/Loaders/Objects/Movements.cs index 1452115..dd9dfbb 100644 --- a/CTFAK/MMFParser/EXE/Loaders/Objects/Movements.cs +++ b/CTFAK/MMFParser/EXE/Loaders/Objects/Movements.cs @@ -95,6 +95,9 @@ namespace CTFAK.MMFParser.EXE.Loaders.Objects case 5: Loader=new MovementPath(Reader); break; + case 9: + Loader = new PlatformMovement(Reader); + break; case 14: Loader = new ExtensionsMovement(Reader); break; @@ -324,7 +327,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Objects public short Speed; public short Acceleration; public short Deceleration; - public short Directions; + public int Directions; public short BounceFactor; public EightDirections(ByteReader reader) : base(reader) @@ -341,7 +344,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Objects Acceleration = Reader.ReadInt16(); Deceleration = Reader.ReadInt16(); BounceFactor = Reader.ReadInt16(); - Directions = Reader.ReadInt16(); + Directions = Reader.ReadInt32(); } public override void Write(ByteWriter Writer) @@ -350,7 +353,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Objects Writer.WriteInt16(Acceleration); Writer.WriteInt16(Deceleration); Writer.WriteInt16(BounceFactor); - Writer.WriteInt16(Directions); + Writer.WriteInt32(Directions); } } public class RaceMovement:MovementLoader diff --git a/CTFAK/MMFParser/Translation/PAME2MFA.cs b/CTFAK/MMFParser/Translation/PAME2MFA.cs index 839976c..c67bae8 100644 --- a/CTFAK/MMFParser/Translation/PAME2MFA.cs +++ b/CTFAK/MMFParser/Translation/PAME2MFA.cs @@ -46,10 +46,10 @@ namespace CTFAK.MMFParser.Translation //mfa.Stamp = wtf; //if (game.Fonts != null) mfa.Fonts = game.Fonts; mfa.Sounds.Items.Clear(); - // foreach (var item in game.Sounds.Items) - // { - // mfa.Sounds.Items.Add(item); - // } + foreach (var item in game.Sounds.Items) + { + mfa.Sounds.Items.Add(item); + } // mfa.Music = game.Music; mfa.Images.Items = game.Images.Images; @@ -122,7 +122,8 @@ namespace CTFAK.MMFParser.Translation var newFrame = new MFA.Loaders.Frame(null); newFrame.Chunks = new ChunkList(null);//MFA.MFA.emptyFrameChunks; - newFrame.Handle = indexHandles[a]; + newFrame.Handle = a; + indexHandles.TryGetValue(a,out newFrame.Handle); Message($"Translating frame: {frame.Name} - {newFrame.Handle}" ); newFrame.Name = frame.Name; newFrame.SizeX = frame.Width; @@ -213,13 +214,14 @@ namespace CTFAK.MMFParser.Translation newFolder.Items = new List() {(uint) newFrameItem.Handle}; newFrame.Folders.Add(newFolder); } - + { newFrame.Events = new Events((ByteReader) null); newFrame.Events.Items = new List(); newFrame.Events.Objects = new List(); newFrame.Events._ifMFA = true; newFrame.Events.Version = 1028; + // if (false) if(frame.Events != null) { foreach (var item in newFrame.Items) diff --git a/CTFAK/Utils/Helper.cs b/CTFAK/Utils/Helper.cs index 0596add..ca85ac4 100644 --- a/CTFAK/Utils/Helper.cs +++ b/CTFAK/Utils/Helper.cs @@ -164,6 +164,11 @@ namespace CTFAK.Utils item = new Click(reader); } + if (code == 33) + { + item = new MMFParser.EXE.Loaders.Events.Parameters.Program(reader); + } + if (code == 55) { item = new Extension(reader);