Expressions reading/writing fixes, started working on layers fixes

master
1987kostya 4 years ago
parent 40a8c4eb1c
commit ca8e4223d0

@ -629,9 +629,9 @@ namespace CTFAK.GUI
foreach (var pair in common.Animations?.AnimationDict)
{
var animNode = new ChunkNode($"Animation {pair.Key}", pair.Value);
if (pair.Value.Reader == null) continue;
objInstNode.Nodes.Add(animNode);
if (pair.Value?.DirectionDict != null)
if (pair.Value?.DirectionDict != null)
{
foreach (var dir in pair.Value?.DirectionDict)
if (pair.Value.DirectionDict.Count > 1)

@ -16,10 +16,12 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Expressions
public DataLoader Loader;
public int Unk1;
public ushort Unk2;
private int _unk;
public Expression(ByteReader reader) : base(reader) { }
public override void Write(ByteWriter Writer)
{
bool temp = false;
Writer.WriteInt16((short) ObjectType);
Writer.WriteInt16((short) Num);
if (ObjectType == 0 && Num == 0) return;
@ -35,11 +37,26 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Expressions
newWriter.WriteInt16((short) ObjectInfo);
newWriter.WriteInt16((short) ObjectInfoList);
if(Num==16||Num==19)Loader.Write(newWriter);
else
{
temp = true;
newWriter.WriteInt32(_unk);
}
}
else
{
}
//
// newWriter.WriteUInt16(0);
if (temp)
{
Writer.WriteInt16((short) ((newWriter.Size()+2)));
}
else
{
Writer.WriteInt16((short) ((newWriter.Size()+6)));
}
newWriter.WriteInt32(0);
newWriter.WriteUInt16(0);
Writer.WriteInt16((short) ((newWriter.Size())));
Writer.WriteWriter(newWriter);
}
@ -74,6 +91,10 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Expressions
{
Loader = new ExtensionExp(Reader);
}
else
{
_unk = Reader.ReadInt32();
}
}
}
else if((int)ObjectType>=2|| (int)ObjectType==-7)
@ -155,6 +176,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Expressions
public class LongExp:ExpressionLoader
{
public int Val1;
private int _unk;
public LongExp(ByteReader reader) : base(reader)
{
@ -166,13 +188,15 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Expressions
public override void Read()
{
// _unk = Reader.ReadInt32();
Value = Reader.ReadInt32();
}
public override void Write(ByteWriter Writer)
{
// Writer.WriteInt32((int) _unk);
Writer.WriteInt32((int) Value);
}
}
public class ExtensionExp:ExpressionLoader

@ -43,6 +43,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters
// Logger.Log("Writing expression: "+item.Num);
item.Write(Writer);
}
Writer.WriteInt32(0);
}

@ -20,7 +20,7 @@ namespace CTFAK.MMFParser.MFA.Loaders
{
Writer.WriteInt8(0);
}
}
}
public override void Print()
{

@ -114,13 +114,13 @@ namespace CTFAK.MMFParser.MFA.Loaders
Events.Write(Writer);
// for (int i=0;i<Layers.Count;i++)
// {
// Writer.WriteInt32(0);
// Writer.WriteInt32(0);
// Writer.WriteInt16(0);
// }
// Writer.WriteInt32(0);
for (int i = 0; i < Layers.Count-1; i++)
{
Writer.WriteColor(Layers[i].RGBCoeff);
Writer.WriteInt32(Layers[i].Unk1);
Writer.WriteInt32(Layers[i].Unk2);
}
Chunks.Write(Writer);
}
@ -156,6 +156,7 @@ namespace CTFAK.MMFParser.MFA.Loaders
StampHandle = Reader.ReadInt32();
ActiveLayer = Reader.ReadInt32();
int layersCount = Reader.ReadInt32();
Logger.Log("Layers: "+layersCount);
for (int i = 0; i < layersCount; i++)
{
var layer = new Layer(Reader);
@ -205,6 +206,12 @@ namespace CTFAK.MMFParser.MFA.Loaders
Events = new Events(Reader);
Events.Read();
for (int i=0;i<Layers.Count-1;i++)
{
Layers[i].RGBCoeff= Reader.ReadColor();
Layers[i].Unk1=Reader.ReadInt32();
Layers[i].Unk2=Reader.ReadInt32();
}
Chunks = new ChunkList(Reader);
Chunks.Read();

@ -88,7 +88,8 @@ namespace CTFAK.MMFParser.MFA.Loaders
{
Loader = new Active(Reader);
}
Loader?.Read();
else throw new NotImplementedException("Unsupported object: "+ObjectType);
Loader.Read();

@ -1,4 +1,5 @@
using System;
using System.Drawing;
using CTFAK.MMFParser.EXE;
using CTFAK.Utils;
@ -23,6 +24,10 @@ namespace CTFAK.MMFParser.MFA.Loaders
}
);
public Color RGBCoeff=Color.White;
public int Unk1=0;
public int Unk2=0;
public override void Write(ByteWriter Writer)
{

@ -149,6 +149,9 @@ namespace CTFAK.MMFParser.Translation
// newLayer.Flags.flag = 0;
newLayer.XCoefficient = layer.XCoeff;
newLayer.YCoefficient = layer.YCoeff;
newLayer.RGBCoeff=Color.Green;
newLayer.Unk1 = 0;
newLayer.Unk2 = 0;
newFrame.Layers.Add(newLayer);
break;
//

@ -33,8 +33,8 @@ namespace CTFAK
LoadableSettings.FromFile("settings.sav");
//
// MFAGenerator.WriteTestMFA();
MFAGenerator.ReadTestMFA();
Environment.Exit(0);
// MFAGenerator.ReadTestMFA();
// Environment.Exit(0);
AppDomain.CurrentDomain.FirstChanceException += (sender, eventArgs) =>
{

Loading…
Cancel
Save