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) foreach (var pair in common.Animations?.AnimationDict)
{ {
var animNode = new ChunkNode($"Animation {pair.Key}", pair.Value); var animNode = new ChunkNode($"Animation {pair.Key}", pair.Value);
if (pair.Value.Reader == null) continue;
objInstNode.Nodes.Add(animNode); objInstNode.Nodes.Add(animNode);
if (pair.Value?.DirectionDict != null) if (pair.Value?.DirectionDict != null)
if (pair.Value?.DirectionDict != null)
{ {
foreach (var dir in pair.Value?.DirectionDict) foreach (var dir in pair.Value?.DirectionDict)
if (pair.Value.DirectionDict.Count > 1) if (pair.Value.DirectionDict.Count > 1)

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

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

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

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

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

@ -1,4 +1,5 @@
using System; using System;
using System.Drawing;
using CTFAK.MMFParser.EXE; using CTFAK.MMFParser.EXE;
using CTFAK.Utils; 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) public override void Write(ByteWriter Writer)
{ {

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

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

Loading…
Cancel
Save