Object flags fixes, expression fixes

master
1987kostya 4 years ago
parent cf46de6746
commit ddff8b19a7

@ -1,6 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq;
using CTFAK.Utils; using CTFAK.Utils;
using static CTFAK.MMFParser.EXE.ChunkList; using static CTFAK.MMFParser.EXE.ChunkList;
@ -73,6 +74,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events
var eg = new EventGroup(Reader); var eg = new EventGroup(Reader);
eg.Read(); eg.Read();
Items.Add(eg); Items.Add(eg);
if (Reader.Tell() >= endPosition) break; if (Reader.Tell() >= endPosition) break;
} }

@ -25,6 +25,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events
ByteWriter newWriter = new ByteWriter(new MemoryStream()); ByteWriter newWriter = new ByteWriter(new MemoryStream());
Logger.Log($"{ObjectType}-{Num}-{ObjectInfo}-{ObjectInfoList}-{Flags}-{OtherFlags}-{Items.Count}-{DefType}-{Identifier}"); Logger.Log($"{ObjectType}-{Num}-{ObjectInfo}-{ObjectInfoList}-{Flags}-{OtherFlags}-{Items.Count}-{DefType}-{Identifier}");
newWriter.WriteInt16((short) ObjectType); newWriter.WriteInt16((short) ObjectType);
if (Num == -42) Num = -27;
newWriter.WriteInt16((short) Num); newWriter.WriteInt16((short) Num);
newWriter.WriteUInt16((ushort) ObjectInfo); newWriter.WriteUInt16((ushort) ObjectInfo);
newWriter.WriteInt16((short) ObjectInfoList); newWriter.WriteInt16((short) ObjectInfoList);
@ -65,7 +66,6 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events
{ {
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);
@ -109,7 +109,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events
{ {
parameter.Write(newWriter); parameter.Write(newWriter);
} }
Writer.WriteUInt16((ushort) (newWriter.BaseStream.Position)); Writer.WriteUInt16((ushort) (newWriter.BaseStream.Position+2));
Writer.WriteWriter(newWriter); Writer.WriteWriter(newWriter);
} }
@ -159,7 +159,6 @@ 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);
@ -180,7 +179,6 @@ 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)
{ {

@ -14,38 +14,34 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Expressions
public object value; public object value;
public object floatValue; public object floatValue;
public DataLoader Loader; public DataLoader Loader;
public int Unk1;
public ushort Unk2;
public Expression(ByteReader reader) : base(reader) { } public Expression(ByteReader reader) : base(reader) { }
public override void Write(ByteWriter Writer) public override void Write(ByteWriter Writer)
{ {
Writer.WriteInt16((short) ObjectType); Writer.WriteInt16((short) ObjectType);
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 newWriter = new ByteWriter(new MemoryStream());
if(ObjectType==Constants.ObjectType.System) if (ObjectType == Constants.ObjectType.System &&
(Num == 0 || Num == 3 || Num == 23 || Num == 24 || Num == 50))
{ {
Logger.Log("WRITING EXPRESSION "+Num); Loader.Write(newWriter);
if (Loader != null)
{
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)
{
Writer.WriteInt32((short) value);
}
}
} }
else if ((int) ObjectType >= 2 || (int) ObjectType == -7)
{
newWriter.WriteInt16((short) ObjectInfo);
Writer.WriteUInt16((ushort) (dataWriter.Size())); newWriter.WriteInt16((short) ObjectInfoList);
Writer.WriteWriter(dataWriter); if(Num==16||Num==19)Loader.Write(newWriter);
}
newWriter.WriteInt32(0);
newWriter.WriteUInt16(0);
Writer.WriteInt16((short) ((newWriter.Size())));
Writer.WriteWriter(newWriter);
} }
@ -57,64 +53,44 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Expressions
public override void Read() public override void Read()
{ {
var currentPosition = Reader.Tell(); var currentPosition = Reader.Tell();
ObjectType = (Constants.ObjectType) Reader.ReadInt16(); ObjectType = (Constants.ObjectType) Reader.ReadInt16();
Num = Reader.ReadInt16(); Num = Reader.ReadInt16();
if (ObjectType == 0 & Num == 0) return;
var size = Reader.ReadUInt16(); if (ObjectType == 0 && Num == 0) return;
if(ObjectType==Constants.ObjectType.System)
var size = Reader.ReadInt16();
if (ObjectType == Constants.ObjectType.System)
{ {
switch (Num) if(Num==0) Loader=new LongExp(Reader);
else if(Num==3) Loader= new StringExp(Reader);
else if (Num == 23) Loader = null;
else if (Num == 24) Loader = null;
else if (Num == 50) Loader = null;
else if((int)ObjectType>=2|| (int)ObjectType==-7)
{
ObjectInfo = Reader.ReadUInt16();
ObjectInfoList = Reader.ReadInt16();
if (Num == 16 || Num == 19)
{ {
//Long Loader = new ExtensionExp(Reader);
case 0:
{
Loader = new LongExp(Reader);
break;
}
//String
case 3:
{
Loader = new StringExp(Reader);
break;
}
//Double
case 23:
{
value = Reader.ReadDouble();
floatValue = Reader.ReadSingle();
break;
}
//GlobalString
case 24:
break;
//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 (Num == 16 || Num == 19)
{
value = Reader.ReadInt16();
}
}
break;
}
} }
Logger.Log("Reading Expression: "+Num); }
Loader?.Read();
} }
else if((int)ObjectType>=2|| (int)ObjectType==-7)
// Reader.Seek(currentPosition+size); {
ObjectInfo = Reader.ReadUInt16();
ObjectInfoList = Reader.ReadInt16();
if (Num == 16 || Num == 19)
{
Loader = new ExtensionExp(Reader);
}
}
Loader?.Read();
// Unk1 = Reader.ReadInt32();
// Unk2 = Reader.ReadUInt16();
Reader.Seek(currentPosition+size);
} }
@ -196,7 +172,28 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Expressions
public override void Write(ByteWriter Writer) public override void Write(ByteWriter Writer)
{ {
Writer.WriteInt32((int) Value); Writer.WriteInt32((int) Value);
} }
} }
public class ExtensionExp:ExpressionLoader
{
public ExtensionExp(ByteReader reader) : base(reader)
{
}
public ExtensionExp(ChunkList.Chunk chunk) : base(chunk)
{
}
public override void Read()
{
Value = Reader.ReadInt16();
}
public override void Write(ByteWriter Writer)
{
Writer.WriteInt16((short) Value);
}
}
} }

@ -16,7 +16,6 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters
public override void Write(ByteWriter Writer) public override void Write(ByteWriter Writer)
{ {
Value = 5;
base.Write(Writer); base.Write(Writer);
} }

@ -13,6 +13,13 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters
var bytes = Reader.ReadBytes(4); var bytes = Reader.ReadBytes(4);
Value = Color.FromArgb(bytes[0], bytes[1], bytes[2]); Value = Color.FromArgb(bytes[0], bytes[1], bytes[2]);
} }
public override void Write(ByteWriter Writer)
{
Writer.WriteInt8(Value.R);
Writer.WriteInt8(Value.G);
Writer.WriteInt8(Value.B);
Writer.WriteInt8(255);
}
} }
} }

@ -22,13 +22,14 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters
{ {
var expression = new Expression(Reader); var expression = new Expression(Reader);
expression.Read(); expression.Read();
if (expression.ObjectType == 0) Logger.Log($"Found expression {expression.ObjectType}-{expression.Num}=={((ExpressionLoader)expression.Loader)?.Value}");
if (expression.ObjectType == 0&& expression.Num==0)
{ {
break; break;
} }
else Items.Add(expression); else Items.Add(expression);
Logger.Log("Expression: "+expression.Num); // if(expression.Num==23||expression.Num==24||expression.Num==50||expression.Num==16||expression.Num==19)Logger.Log("CUMSHOT "+expression.Num);
} }
} }
@ -36,10 +37,11 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters
public override void Write(ByteWriter Writer) public override void Write(ByteWriter Writer)
{ {
Writer.WriteInt16(Comparsion); Writer.WriteInt16(Comparsion);
Logger.Log("ExpressionCount: "+Items.Count);
foreach (Expression item in Items) foreach (Expression item in Items)
{ {
Logger.Log("Writing expression: "+item.Num);
item.Write(Writer); item.Write(Writer);
} }
} }

@ -14,7 +14,21 @@ namespace CTFAK.MMFParser.EXE.Loaders
public string Name = "ERROR"; public string Name = "ERROR";
public int Handle; public int Handle;
public int ObjectType; public int ObjectType;
public UInt32 Flags; public BitDict Flags = new BitDict(new string[]
{
"UNK1",
"UNK2",
"UNK3",
"UNK4",
"UNK5",
"UNK6",
"UNK7",
"UNK8",
"UNK9",
"UNK10",
"UNK11","UNK12","UNK13","UNK14",
});
public bool Transparent; public bool Transparent;
public bool Antialias; public bool Antialias;
public int InkEffect; public int InkEffect;
@ -70,7 +84,8 @@ namespace CTFAK.MMFParser.EXE.Loaders
var actualLoader = (ObjectHeader)(loader); var actualLoader = (ObjectHeader)(loader);
Handle = actualLoader.Handle; Handle = actualLoader.Handle;
ObjectType = actualLoader.ObjectType; ObjectType = actualLoader.ObjectType;
Flags = actualLoader.Flags; Flags.flag = actualLoader.Flags;
UInt32 inkEffect = actualLoader.InkEffect; UInt32 inkEffect = actualLoader.InkEffect;
Transparent = ByteFlag.GetFlag(inkEffect, 28); Transparent = ByteFlag.GetFlag(inkEffect, 28);
Antialias = ByteFlag.GetFlag(inkEffect, 29); Antialias = ByteFlag.GetFlag(inkEffect, 29);
@ -87,6 +102,7 @@ namespace CTFAK.MMFParser.EXE.Loaders
{ {
Properties.ReadNew(ObjectType,this); Properties.ReadNew(ObjectType,this);
} }
} }
public ImageItem GetPreview() public ImageItem GetPreview()
@ -239,8 +255,8 @@ namespace CTFAK.MMFParser.EXE.Loaders
{ {
Handle = Reader.ReadInt16(); Handle = Reader.ReadInt16();
ObjectType = Reader.ReadInt16(); ObjectType = Reader.ReadInt16();
Flags = Reader.ReadUInt16();
Int16 reserved = Reader.ReadInt16(); Int16 reserved = Reader.ReadInt16();
Flags = Reader.ReadUInt16();
InkEffect = Reader.ReadUInt32(); InkEffect = Reader.ReadUInt32();
InkEffectParameter = Reader.ReadUInt32(); InkEffectParameter = Reader.ReadUInt32();
} }

@ -36,7 +36,6 @@ namespace CTFAK.MMFParser.MFA.Loaders
Writer.WriteInt32(IconHandle); Writer.WriteInt32(IconHandle);
Chunks.Write(Writer); Chunks.Write(Writer);
Logger.Log("Writing "+this.ObjectType);
Loader.Write(Writer); Loader.Write(Writer);

@ -100,7 +100,7 @@ namespace CTFAK.MMFParser.Translation
newItem.InkEffect = item.InkEffect; newItem.InkEffect = item.InkEffect;
newItem.InkEffectParameter = item.InkEffectValue; newItem.InkEffectParameter = item.InkEffectValue;
newItem.AntiAliasing = item.Antialias ? 1 : 0; newItem.AntiAliasing = item.Antialias ? 1 : 0;
newItem.Flags = (int) item.Flags; //32 TODO:Fix this newItem.Flags = (int) item.Flags.flag; //32 TODO:Fix this
newItem.IconHandle = 12; newItem.IconHandle = 12;
newItem.Chunks = new ChunkList(null); newItem.Chunks = new ChunkList(null);
@ -117,7 +117,8 @@ namespace CTFAK.MMFParser.Translation
} }
else else
{ {
var itemLoader = (ObjectCommon) item.Properties.Loader; var itemLoader = (ObjectCommon) item?.Properties?.Loader;
if (itemLoader == null) continue;
Logger.Log("Translating Object: "+itemLoader.Parent.Name); Logger.Log("Translating Object: "+itemLoader.Parent.Name);
//CommonSection //CommonSection
var newObject = new ObjectLoader(null); var newObject = new ObjectLoader(null);
@ -389,7 +390,7 @@ namespace CTFAK.MMFParser.Translation
newInstance.X = instance.X; newInstance.X = instance.X;
newInstance.Y = instance.Y; newInstance.Y = instance.Y;
newInstance.Handle = instance.Handle; newInstance.Handle = instance.Handle;
newInstance.Flags = instance.FrameItem.Flags; newInstance.Flags = instance.FrameItem.Flags.flag;
newInstance.ParentType = (uint) instance.ParentType; newInstance.ParentType = (uint) instance.ParentType;
newInstance.ItemHandle = (uint) (instance.ObjectInfo); newInstance.ItemHandle = (uint) (instance.ObjectInfo);
newInstance.ParentHandle = (uint) instance.ParentHandle; newInstance.ParentHandle = (uint) instance.ParentHandle;
@ -422,7 +423,7 @@ namespace CTFAK.MMFParser.Translation
newFrame.Events._cache = MFA.MFA.emptyEvents._cache; 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") // if (frame.Name == "anus")
{ {
foreach (var item in newFrame.Items) foreach (var item in newFrame.Items)
{ {
@ -440,13 +441,13 @@ namespace CTFAK.MMFParser.Translation
} }
foreach (EventGroup item in frame.Events.Items) foreach (EventGroup item in frame.Events.Items)
{ {
foreach (Action itemAction in item.Actions) /*foreach (Action itemAction in item.Actions)
{ {
for (int a=0;a<itemAction.Items.Count;a++) for (int a=0;a<itemAction.Items.Count;a++)
{ {
if (itemAction.Items[a].Loader is ExpressionParameter exp) if (itemAction.Items[a].Loader is ExpressionParameter exp)
{ {
itemAction.Items.Remove(itemAction.Items[a]); // itemAction.Items.Remove(itemAction.Items[a]);
} }
else if (itemAction.Items[a].Loader is Sample) else if (itemAction.Items[a].Loader is Sample)
@ -461,7 +462,7 @@ namespace CTFAK.MMFParser.Translation
{ {
if (itemAction.Items[a].Loader is ExpressionParameter exp) if (itemAction.Items[a].Loader is ExpressionParameter exp)
{ {
itemAction.Items.Remove(itemAction.Items[a]); // itemAction.Items.Remove(itemAction.Items[a]);
} }
else if (itemAction.Items[a].Loader is Sample) else if (itemAction.Items[a].Loader is Sample)
@ -469,7 +470,7 @@ namespace CTFAK.MMFParser.Translation
itemAction.Items.Remove(itemAction.Items[a]); itemAction.Items.Remove(itemAction.Items[a]);
} }
} }
} }*/
newFrame.Events.Items.Add(item); newFrame.Events.Items.Add(item);
} }

Loading…
Cancel
Save