Object flags fixes, expression fixes

master
1987kostya 4 years ago
parent cf46de6746
commit ddff8b19a7

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

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

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

@ -14,5 +14,12 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters
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,12 +22,13 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters
{
var expression = new Expression(Reader);
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;
}
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)
{
Writer.WriteInt16(Comparsion);
Logger.Log("ExpressionCount: "+Items.Count);
foreach (Expression item in Items)
{
Logger.Log("Writing expression: "+item.Num);
item.Write(Writer);
}
}

@ -14,7 +14,21 @@ namespace CTFAK.MMFParser.EXE.Loaders
public string Name = "ERROR";
public int Handle;
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 Antialias;
public int InkEffect;
@ -70,7 +84,8 @@ namespace CTFAK.MMFParser.EXE.Loaders
var actualLoader = (ObjectHeader)(loader);
Handle = actualLoader.Handle;
ObjectType = actualLoader.ObjectType;
Flags = actualLoader.Flags;
Flags.flag = actualLoader.Flags;
UInt32 inkEffect = actualLoader.InkEffect;
Transparent = ByteFlag.GetFlag(inkEffect, 28);
Antialias = ByteFlag.GetFlag(inkEffect, 29);
@ -87,6 +102,7 @@ namespace CTFAK.MMFParser.EXE.Loaders
{
Properties.ReadNew(ObjectType,this);
}
}
public ImageItem GetPreview()
@ -239,8 +255,8 @@ namespace CTFAK.MMFParser.EXE.Loaders
{
Handle = Reader.ReadInt16();
ObjectType = Reader.ReadInt16();
Flags = Reader.ReadUInt16();
Int16 reserved = Reader.ReadInt16();
Flags = Reader.ReadUInt16();
InkEffect = Reader.ReadUInt32();
InkEffectParameter = Reader.ReadUInt32();
}

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

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

Loading…
Cancel
Save