Events reader updates

master
1987kostya 4 years ago
parent 876ee58a29
commit cf46de6746

@ -257,6 +257,7 @@
<Compile Include="Utils\BitDict.cs" /> <Compile Include="Utils\BitDict.cs" />
<Compile Include="Utils\ByteFlag.cs" /> <Compile Include="Utils\ByteFlag.cs" />
<Compile Include="Utils\ByteWriter.cs" /> <Compile Include="Utils\ByteWriter.cs" />
<Compile Include="Utils\Checksum.cs" />
<Compile Include="Utils\Helper.cs" /> <Compile Include="Utils\Helper.cs" />
<Compile Include="Program.cs" /> <Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />

@ -175,8 +175,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks
writer.WriteInt32(Flags); writer.WriteInt32(Flags);
writer.WriteInt32(0); writer.WriteInt32(0);
writer.WriteInt32(Name.Length+1); writer.WriteInt32(Name.Length+1);
if (IsCompressed) writer.WriteUnicode(Name); writer.WriteAscii(Name);
else writer.WriteAscii(Name);
writer.WriteBytes(Data); writer.WriteBytes(Data);

@ -23,6 +23,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events
public override void Write(ByteWriter Writer) public override void Write(ByteWriter Writer)
{ {
ByteWriter newWriter = new ByteWriter(new MemoryStream()); 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) ObjectType);
newWriter.WriteInt16((short) Num); newWriter.WriteInt16((short) Num);
newWriter.WriteUInt16((ushort) ObjectInfo); newWriter.WriteUInt16((ushort) ObjectInfo);
@ -31,7 +32,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events
newWriter.WriteUInt8((sbyte) OtherFlags); newWriter.WriteUInt8((sbyte) OtherFlags);
newWriter.WriteUInt8((sbyte) Items.Count); newWriter.WriteUInt8((sbyte) Items.Count);
newWriter.WriteInt8((byte) DefType); newWriter.WriteInt8((byte) DefType);
newWriter.WriteInt16((short) Identifier); newWriter.WriteUInt16((ushort) (Identifier));
foreach (Parameter parameter in Items) foreach (Parameter parameter in Items)
{ {
parameter.Write(newWriter); parameter.Write(newWriter);
@ -59,11 +60,12 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events
OtherFlags = Reader.ReadSByte(); OtherFlags = Reader.ReadSByte();
NumberOfParameters = Reader.ReadByte(); NumberOfParameters = Reader.ReadByte();
DefType = Reader.ReadByte(); DefType = Reader.ReadByte();
Identifier = Reader.ReadInt16(); Identifier = Reader.ReadUInt16();
for (int i = 0; i < NumberOfParameters; i++) for (int i = 0; i < NumberOfParameters; i++)
{ {
var item = new Parameter(Reader); var item = new Parameter(Reader);
item.Read(); item.Read();
Items.Add(item); Items.Add(item);
} }
Logger.Log(this); Logger.Log(this);
@ -107,7 +109,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events
{ {
parameter.Write(newWriter); parameter.Write(newWriter);
} }
Writer.WriteUInt16((ushort) (newWriter.BaseStream.Position+2)); Writer.WriteUInt16((ushort) (newWriter.BaseStream.Position));
Writer.WriteWriter(newWriter); Writer.WriteWriter(newWriter);
} }
@ -137,7 +139,6 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events
} }
Logger.Log(this); Logger.Log(this);
} }
public override string ToString() public override string ToString()
{ {
@ -158,6 +159,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events
{ {
var newWriter = new ByteWriter(new MemoryStream()); var newWriter = new ByteWriter(new MemoryStream());
newWriter.WriteInt16((short) Code); newWriter.WriteInt16((short) Code);
Logger.Log("Writing PARAMETER: " + Loader.GetType().Name);
Loader.Write(newWriter); Loader.Write(newWriter);
Writer.WriteUInt16((ushort) (newWriter.BaseStream.Position+2)); Writer.WriteUInt16((ushort) (newWriter.BaseStream.Position+2));
Writer.WriteWriter(newWriter); Writer.WriteWriter(newWriter);
@ -178,6 +180,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events
var actualLoader = Helper.LoadParameter(Code,Reader); var actualLoader = Helper.LoadParameter(Code,Reader);
Logger.Log("Loading PARAMETER: "+actualLoader.GetType().Name);
this.Loader = actualLoader; this.Loader = actualLoader;
if (Loader!=null) if (Loader!=null)
{ {

@ -13,6 +13,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Expressions
public int ObjectInfoList; public int ObjectInfoList;
public object value; public object value;
public object floatValue; public object floatValue;
public DataLoader Loader;
public Expression(ByteReader reader) : base(reader) { } public Expression(ByteReader reader) : base(reader) { }
public override void Write(ByteWriter Writer) public override void Write(ByteWriter Writer)
{ {
@ -20,56 +21,30 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Expressions
Writer.WriteInt16((short) Num); Writer.WriteInt16((short) Num);
if (ObjectType == 0 && Num == 0) return; if (ObjectType == 0 && Num == 0) return;
var dataWriter = new ByteWriter(new MemoryStream()); var dataWriter = new ByteWriter(new MemoryStream());
switch (ObjectType) if(ObjectType==Constants.ObjectType.System)
{ {
case Constants.ObjectType.System: Logger.Log("WRITING EXPRESSION "+Num);
switch (Num) if (Loader != null)
{
//Long
case 0:
{ {
dataWriter.WriteInt32((int) value); Loader.Write(dataWriter);
break; dataWriter.WriteInt32(0);
dataWriter.WriteInt16(0);
} }
//String else if ((int) ObjectType >= 2 || (int) ObjectType == 7)
case 3:
{ {
dataWriter.WriteUnicode(((string) value),true); Writer.WriteInt16((short) ObjectInfo);
break; Writer.WriteInt16((short) ObjectInfoList);
} if (Num == 16 || Num == 19)
//Double
case 23:
{ {
dataWriter.WriteSingle((float) value); Writer.WriteInt32((short) value);
dataWriter.WriteSingle((float) value);
break;
} }
//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); Writer.WriteWriter(dataWriter);
} }
@ -86,21 +61,20 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Expressions
Num = Reader.ReadInt16(); Num = Reader.ReadInt16();
if (ObjectType == 0 & Num == 0) return; if (ObjectType == 0 & Num == 0) return;
var size = Reader.ReadUInt16(); var size = Reader.ReadUInt16();
switch (ObjectType) if(ObjectType==Constants.ObjectType.System)
{ {
case Constants.ObjectType.System:
switch (Num) switch (Num)
{ {
//Long //Long
case 0: case 0:
{ {
value = Reader.ReadInt32(); Loader = new LongExp(Reader);
break; break;
} }
//String //String
case 3: case 3:
{ {
value = Reader.ReadWideString(); Loader = new StringExp(Reader);
break; break;
} }
//Double //Double
@ -116,31 +90,113 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Expressions
//GlobalValue //GlobalValue
case 50: case 50:
break; break;
case 16:
// value = Reader.ReadInt16();
break;
case 19:
// value = Reader.ReadInt16();
break;
default: default:
{ {
if ((int)ObjectType >= 2 || (int)ObjectType == 7) if ((int)ObjectType >= 2 || (int)ObjectType == 7)
{ {
ObjectInfo = Reader.ReadUInt16(); ObjectInfo = Reader.ReadUInt16();
ObjectInfoList = Reader.ReadUInt16(); ObjectInfoList = Reader.ReadUInt16();
// if self.num in extensionLoaders: if (Num == 16 || Num == 19)
// loader = extensionLoaders[self.num] {
// self.loader = self.new(loader, reader) value = Reader.ReadInt16();
}
} }
break; break;
} }
}
Logger.Log("Reading Expression: "+Num);
Loader?.Read();
}
// Reader.Seek(currentPosition+size);
} }
break; public override string ToString()
{
return $"Expression {ObjectType}=={Num}: {((ExpressionLoader)Loader)?.Value}";
}
}
public class ExpressionLoader:DataLoader
{
public object Value;
public ExpressionLoader(ByteReader reader) : base(reader)
{
} }
Reader.Seek(currentPosition+size);
public ExpressionLoader(ChunkList.Chunk chunk) : base(chunk)
{
} }
public override string ToString() 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)
{ {
return $"Expression {ObjectType}=={Num}: {value}"; Writer.WriteInt32((int) Value);
} }
} }
} }

@ -5,15 +5,25 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters
{ {
class AlterableValue : Short class AlterableValue : Short
{ {
public int Unk;
public AlterableValue(ByteReader reader) : base(reader) { } public AlterableValue(ByteReader reader) : base(reader) { }
public override void Read() public override void Read()
{ {
base.Read(); base.Read();
}
public override void Write(ByteWriter Writer)
{
Value = 5;
base.Write(Writer);
} }
public override string ToString() public override string ToString()
{ {
return $"AlterableValue{Convert.ToChar(Value).ToString().ToUpper()}"; return $"AlterableValue{Value.ToString().ToUpper()}";
} }
} }
} }

@ -13,14 +13,12 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters
public override void Read() public override void Read()
{ {
base.Read();
Button = Reader.ReadByte(); Button = Reader.ReadByte();
IsDouble = Reader.ReadByte(); IsDouble = Reader.ReadByte();
} }
public override void Write(ByteWriter Writer) public override void Write(ByteWriter Writer)
{ {
base.Write(Writer);
Writer.WriteInt8(Button); Writer.WriteInt8(Button);
Writer.WriteInt8(IsDouble); Writer.WriteInt8(IsDouble);

@ -16,15 +16,18 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters
public override void Read() public override void Read()
{ {
base.Read();
Comparsion = Reader.ReadInt16(); Comparsion = Reader.ReadInt16();
Items = new List<Expression>(); Items = new List<Expression>();
while (true) while (true)
{ {
var expression = new Expression(Reader); var expression = new Expression(Reader);
expression.Read(); expression.Read();
Items.Add(expression); if (expression.ObjectType == 0)
if (expression.ObjectType == 0) break; {
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) public override void Write(ByteWriter Writer)
{ {
base.Write(Writer);
Writer.WriteInt16(Comparsion); Writer.WriteInt16(Comparsion);
foreach (Expression item in Items) foreach (Expression item in Items)
{ {
item.Write(Writer); item.Write(Writer);
} }
} }

@ -1,4 +1,5 @@
using CTFAK.Utils; using System;
using CTFAK.Utils;
namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters
{ {
@ -16,20 +17,23 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters
public override void Read() public override void Read()
{ {
base.Read();
Offset = Reader.Tell() - 24; Offset = Reader.Tell() - 24;
Flags = Reader.ReadUInt16(); Flags = Reader.ReadUInt16();
Id = Reader.ReadUInt16(); Id = Reader.ReadUInt16();
Name = Reader.ReadWideString(); Name = Reader.ReadWideString();
Password = Reader.ReadInt32(); Password = Reader.ReadInt32();
Logger.Log("Password: "+Password);
} }
public override void Write(ByteWriter Writer) public override void Write(ByteWriter Writer)
{ {
base.Write(Writer); Writer.WriteUInt16(0);
Writer.WriteUInt16(Flags);
Writer.WriteUInt16(Id); Writer.WriteUInt16(Id);
Writer.WriteAscii(Name); Writer.WriteUnicode(Name,true);
if(true)//decrypt password
{
Password = Checksum.MakeGroupChecksum("", Name);
}
Writer.WriteInt32(Password); Writer.WriteInt32(Password);
} }

@ -12,5 +12,9 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters
Value = (short)Reader.ReadInt32(); Value = (short)Reader.ReadInt32();
} }
public override void Write(ByteWriter Writer)
{
Writer.WriteInt32(Value);
}
} }
} }

@ -13,13 +13,11 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters
public override void Read() public override void Read()
{ {
base.Read();
Key = Reader.ReadInt16(); Key = Reader.ReadInt16();
} }
public override void Write(ByteWriter Writer) public override void Write(ByteWriter Writer)
{ {
base.Write(Writer);
Writer.WriteInt16(Key); Writer.WriteInt16(Key);
} }

@ -10,10 +10,20 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters
public ParamObject(ByteReader reader) : base(reader) { } public ParamObject(ByteReader reader) : base(reader) { }
public override void Read() public override void Read()
{ {
ObjectInfoList = Reader.ReadInt16(); ObjectInfoList = Reader.ReadInt16();
ObjectInfo = Reader.ReadUInt16(); ObjectInfo = Reader.ReadUInt16();
ObjectType = Reader.ReadInt16(); 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() public override string ToString()
{ {
return $"Object {ObjectInfoList} {ObjectInfo} {ObjectType}"; return $"Object {ObjectInfoList} {ObjectInfo} {ObjectType}";

@ -10,6 +10,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters
public ParameterCommon(ByteReader reader) : base(reader) { } public ParameterCommon(ByteReader reader) : base(reader) { }
public override void Write(ByteWriter Writer) public override void Write(ByteWriter Writer)
{ {
throw new NotImplementedException("Unexcepted parameter: "+this.GetType().Name);
} }

@ -9,6 +9,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters
public Remark(ByteReader reader) : base(reader) { } public Remark(ByteReader reader) : base(reader) { }
public override void Read() public override void Read()
{ {
base.Read();
//TODO //TODO
} }

@ -15,6 +15,14 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters
Flags = Reader.ReadUInt16(); Flags = Reader.ReadUInt16();
Name = Reader.ReadWideString(); Name = Reader.ReadWideString();
} }
public override void Write(ByteWriter Writer)
{
Writer.WriteInt16((short) Handle);
Writer.WriteUInt16((ushort) Flags);
Writer.WriteUnicode(Name);
}
public override string ToString() public override string ToString()
{ {
return $"Sample '{Name}' handle: {Handle}"; return $"Sample '{Name}' handle: {Handle}";

@ -15,7 +15,6 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters
public override void Read() public override void Read()
{ {
base.Read();
ShootPos = new Position(Reader); ShootPos = new Position(Reader);
ShootPos.Read(); ShootPos.Read();
ObjectInstance = Reader.ReadUInt16(); ObjectInstance = Reader.ReadUInt16();
@ -26,7 +25,6 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters
public override void Write(ByteWriter Writer) public override void Write(ByteWriter Writer)
{ {
base.Write(Writer);
ShootPos.Write(Writer); ShootPos.Write(Writer);
Writer.WriteUInt16(ObjectInstance); Writer.WriteUInt16(ObjectInstance);
Writer.WriteUInt16(ObjectInfo); Writer.WriteUInt16(ObjectInfo);

@ -12,6 +12,12 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters
Value = Reader.ReadInt16(); Value = Reader.ReadInt16();
} }
public override void Write(ByteWriter Writer)
{
Writer.WriteInt16(Value);
}
public override string ToString() public override string ToString()
{ {
return $"{this.GetType().Name} value: {Value}"; return $"{this.GetType().Name} value: {Value}";

@ -13,13 +13,11 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters
public override void Read() public override void Read()
{ {
base.Read();
Value = Reader.ReadAscii(); Value = Reader.ReadAscii();
} }
public override void Write(ByteWriter Writer) public override void Write(ByteWriter Writer)
{ {
base.Write(Writer);
Writer.WriteAscii(Value); Writer.WriteAscii(Value);
} }

@ -14,6 +14,13 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters
Loops = Reader.ReadInt32(); Loops = Reader.ReadInt32();
} }
public override void Write(ByteWriter Writer)
{
Writer.WriteInt32(Timer);
Writer.WriteInt32(Loops);
}
public override string ToString() public override string ToString()
{ {

@ -13,14 +13,12 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters
public override void Read() public override void Read()
{ {
base.Read();
Value1 = Reader.ReadInt16(); Value1 = Reader.ReadInt16();
Value2 = Reader.ReadInt16(); Value2 = Reader.ReadInt16();
} }
public override void Write(ByteWriter Writer) public override void Write(ByteWriter Writer)
{ {
base.Write(Writer);
Writer.WriteInt16(Value1); Writer.WriteInt16(Value1);
Writer.WriteInt16(Value2); Writer.WriteInt16(Value2);
} }

@ -42,7 +42,7 @@ namespace CTFAK.MMFParser.MFA.Loaders
public int EditorDataUnk; public int EditorDataUnk;
public uint EventDataLen; public uint EventDataLen;
public uint CommentDataLen; public uint CommentDataLen;
private byte[] _cache; public byte[] _cache;
public bool _ifMFA; public bool _ifMFA;
public Events(ByteReader reader) : base(reader) public Events(ByteReader reader) : base(reader)

@ -65,7 +65,7 @@ namespace CTFAK.MMFParser.MFA.Loaders
Writer.AutoWriteUnicode(UnkString); Writer.AutoWriteUnicode(UnkString);
Writer.WriteInt32(LastViewedX); Writer.WriteInt32(LastViewedX);
Writer.WriteInt32(LastViewedY); Writer.WriteInt32(LastViewedY);
// Writer.WriteInt32(Palette.Count);//WTF HELP Writer.WriteInt32(Palette.Count);//WTF HELP
foreach (var item in Palette) foreach (var item in Palette)
{ {
@ -220,7 +220,8 @@ namespace CTFAK.MMFParser.MFA.Loaders
Events.Read(); Events.Read();
Chunks = new ChunkList(Reader); Chunks = new ChunkList(Reader);
Chunks.Read(); Chunks.Read();
MFA.emptyEvents = Events; if(Events.Items.Count==0)MFA.emptyEvents = Events;
MFA.emptyFrameChunks = Chunks; MFA.emptyFrameChunks = Chunks;
} }
} }

@ -5,15 +5,18 @@ using System.Linq;
using CTFAK.MMFParser.EXE; using CTFAK.MMFParser.EXE;
using CTFAK.MMFParser.EXE.Loaders; using CTFAK.MMFParser.EXE.Loaders;
using CTFAK.MMFParser.EXE.Loaders.Events; using CTFAK.MMFParser.EXE.Loaders.Events;
using CTFAK.MMFParser.EXE.Loaders.Events.Parameters;
using CTFAK.MMFParser.EXE.Loaders.Objects; using CTFAK.MMFParser.EXE.Loaders.Objects;
using CTFAK.MMFParser.MFA.Loaders; using CTFAK.MMFParser.MFA.Loaders;
using CTFAK.MMFParser.MFA.Loaders.mfachunks; using CTFAK.MMFParser.MFA.Loaders.mfachunks;
using CTFAK.Utils; using CTFAK.Utils;
using Action = CTFAK.MMFParser.EXE.Loaders.Events.Action;
using Animation = CTFAK.MMFParser.MFA.Loaders.mfachunks.Animation; using Animation = CTFAK.MMFParser.MFA.Loaders.mfachunks.Animation;
using AnimationDirection = CTFAK.MMFParser.MFA.Loaders.mfachunks.AnimationDirection; using AnimationDirection = CTFAK.MMFParser.MFA.Loaders.mfachunks.AnimationDirection;
using Backdrop = CTFAK.MMFParser.MFA.Loaders.mfachunks.Backdrop; using Backdrop = CTFAK.MMFParser.MFA.Loaders.mfachunks.Backdrop;
using ChunkList = CTFAK.MMFParser.MFA.Loaders.ChunkList; using ChunkList = CTFAK.MMFParser.MFA.Loaders.ChunkList;
using Counter = CTFAK.MMFParser.MFA.Loaders.mfachunks.Counter; using Counter = CTFAK.MMFParser.MFA.Loaders.mfachunks.Counter;
using Events = CTFAK.MMFParser.MFA.Loaders.Events;
using Frame = CTFAK.MMFParser.EXE.Loaders.Frame; using Frame = CTFAK.MMFParser.EXE.Loaders.Frame;
using Layer = CTFAK.MMFParser.MFA.Loaders.Layer; using Layer = CTFAK.MMFParser.MFA.Loaders.Layer;
using Movement = CTFAK.MMFParser.MFA.Loaders.mfachunks.Movement; using Movement = CTFAK.MMFParser.MFA.Loaders.mfachunks.Movement;
@ -319,7 +322,7 @@ namespace CTFAK.MMFParser.Translation
mfa.Frames.Clear(); mfa.Frames.Clear();
foreach (Frame frame in game.Frames) foreach (Frame frame in game.Frames)
{ {
// if (frame.Name != "title") continue;
var newFrame = new MFA.Loaders.Frame(null); var newFrame = new MFA.Loaders.Frame(null);
//FrameInfo //FrameInfo
newFrame.Handle = game.Frames.IndexOf(frame); newFrame.Handle = game.Frames.IndexOf(frame);
@ -410,14 +413,17 @@ namespace CTFAK.MMFParser.Translation
newFolder.Items = new List<uint>() {(uint) newFrameItem.Handle}; newFolder.Items = new List<uint>() {(uint) newFrameItem.Handle};
newFrame.Folders.Add(newFolder); newFrame.Folders.Add(newFolder);
} }
//EventInfo
List<DataLoader> quailifers = new List<DataLoader>(); newFrame.Events = new Events((ByteReader) null);//MFA.MFA.emptyEvents;
newFrame.Events = MFA.MFA.emptyEvents; newFrame.Events.Items = new List<EventGroup>();
newFrame.Events.Objects=new List<EventObject>();
newFrame.Events._cache = MFA.MFA.emptyEvents._cache;
newFrame.Events._ifMFA = true; newFrame.Events._ifMFA = true;
newFrame.Events.Version = 1028; newFrame.Events.Version = 1028;
if (frame.Name == "Frame 1")
{
foreach (var item in newFrame.Items) foreach (var item in newFrame.Items)
{ {
var newObject = new EventObject((ByteReader) null); var newObject = new EventObject((ByteReader) null);
@ -431,33 +437,43 @@ namespace CTFAK.MMFParser.Translation
newObject.ItemHandle = (uint) item.Handle; newObject.ItemHandle = (uint) item.Handle;
newObject.InstanceHandle = 0xFFFFFFFF; newObject.InstanceHandle = 0xFFFFFFFF;
newFrame.Events.Objects.Add(newObject); newFrame.Events.Objects.Add(newObject);
} }
foreach (EventGroup item in frame.Events.Items)
for (int i = 0; i < frame.Events.Quailifers.Length; i++)
{ {
var item = frame.Events.Quailifers[i]; foreach (Action itemAction in item.Actions)
if (quailifers.Contains(item))
{ {
} for (int a=0;a<itemAction.Items.Count;a++)
else
{ {
var newObject = new EventObject((ByteReader) null); if (itemAction.Items[a].Loader is ExpressionParameter exp)
quailifers.Add(newObject);
var newHandle = 0;
while (true)
{ {
itemAction.Items.Remove(itemAction.Items[a]);
} }
else if (itemAction.Items[a].Loader is Sample)
{
itemAction.Items.Remove(itemAction.Items[a]);
} }
} }
}
foreach (Condition itemAction in item.Conditions)
{
for (int a=0;a<itemAction.Items.Count;a++)
{
if (itemAction.Items[a].Loader is ExpressionParameter exp)
{
itemAction.Items.Remove(itemAction.Items[a]);
}
else if (itemAction.Items[a].Loader is Sample)
{
itemAction.Items.Remove(itemAction.Items[a]);
}
}
}
newFrame.Events.Items.Add(item);
}
}
newFrame.Chunks = new ChunkList(null); newFrame.Chunks = new ChunkList(null);
mfa.Frames.Add(newFrame); mfa.Frames.Add(newFrame);

@ -33,8 +33,8 @@ namespace CTFAK
LoadableSettings.FromFile("settings.sav"); LoadableSettings.FromFile("settings.sav");
// //
MFAGenerator.ReadTestMFA(); // MFAGenerator.ReadTestMFA();
Environment.Exit(0); // Environment.Exit(0);
AppDomain.CurrentDomain.FirstChanceException += (sender, eventArgs) => AppDomain.CurrentDomain.FirstChanceException += (sender, eventArgs) =>
{ {
@ -52,7 +52,7 @@ namespace CTFAK
} }
if (args.Length > 1) if (args.Length > 1)
{ {
ReadFile(args[1],true,false,false); ReadFile(args[1],true,false,true);
MFAGenerator.BuildMFA(); MFAGenerator.BuildMFA();
Environment.Exit(0); Environment.Exit(0);
} }

@ -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;
}
}
}

@ -107,50 +107,61 @@ namespace CTFAK.Utils
{ {
item = new Time(reader); item = new Time(reader);
} }
if (code == 3 || code==4 ||code == 10 || code == 11 || code == 12 || code == 17 || code == 26 || code == 31 ||
if (code == 50) code == 43 || code == 57 || code == 58 || code == 60 || code == 61)
{
item = new AlterableValue(reader);
}
if (code == 32)
{ {
item = new Click(reader); item = new Short(reader);
} }
if (code == 5 || code == 25 || code == 29 || code == 34 || code == 48 || code == 56)
if (code == 16)
{ {
item=new Position(reader); item = new Int(reader);
} }
if (code == 6 || code == 7 || code == 35 || code == 36)
if (code == 18)
{ {
item=new Shoot(reader); item = new Sample(reader);
} }
if (code == 9 || code == 21) if (code == 9 || code == 21)
{ {
item = new Create(reader); item = new Create(reader);
} }
if (code == 13) if (code == 13)
{ {
item = new Every(reader); 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) if (code == 24)
{ {
item = new Colour(reader); 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) if (code == 38)
@ -178,26 +189,13 @@ namespace CTFAK.Utils
item = new TwoShorts(reader); 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; return item;
} }

@ -32,7 +32,7 @@ namespace CTFAK.Utils
Console.WriteLine(Helper.GetCurrentTime()+text); Console.WriteLine(Helper.GetCurrentTime()+text);
Console.ForegroundColor = ConsoleColor.White; Console.ForegroundColor = ConsoleColor.White;
} }
//if(logToConsole) MainConsole.Message(text); if(logToConsole) MainConsole.Message(text);

Loading…
Cancel
Save