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