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);