Global refactoring and cleanup

master
1987kostya 4 years ago
parent d393571dbd
commit 651556a169

@ -70,7 +70,7 @@ namespace CTFAK.GUI
var size = new Size(Exe.Instance.GameData.Header.WindowWidth,Exe.Instance.GameData.Header.WindowHeight); var size = new Size(Exe.Instance.GameData.Header.WindowWidth,Exe.Instance.GameData.Header.WindowHeight);
//scrollableControl1.Size = new Size(frame.Width,frame.Height);; //scrollableControl1.Size = new Size(frame.Width,frame.Height);;
ClientSize = size; ClientSize = size;
var list = frame.Objects.Items.OrderBy(x=>x.Handle); var list = frame.Objects.OrderBy(x=>x.Handle);
foreach (var obj in list) foreach (var obj in list)
{ {
//TODO:Layers //TODO:Layers

@ -41,7 +41,6 @@ namespace CTFAK.GUI
private bool _isAnimRunning; private bool _isAnimRunning;
private bool _isAudioPlaying;
private SoundPlayer _soundPlayer; private SoundPlayer _soundPlayer;
public Label ObjectViewerLabel; public Label ObjectViewerLabel;
public TreeNode LastSelected; public TreeNode LastSelected;
@ -616,14 +615,14 @@ namespace CTFAK.GUI
var frameNode = new ChunkNode(frame.Name, frame); var frameNode = new ChunkNode(frame.Name, frame);
objTreeView.Nodes.Add(frameNode); objTreeView.Nodes.Add(frameNode);
if (frame.Objects != null) if (frame.Objects != null)
foreach (var objInst in frame.Objects.Items) foreach (var objInst in frame.Objects)
{ {
var objInstNode = new ChunkNode(objInst.FrameItem.Name, objInst); var objInstNode = new ChunkNode(objInst.FrameItem.Name, objInst);
frameNode.Nodes.Add(objInstNode); frameNode.Nodes.Add(objInstNode);
var loader = objInst.FrameItem.Properties.Loader; var loader = objInst.FrameItem.Properties.Loader;
if (loader is ObjectCommon common) if (loader is ObjectCommon common)
{ {
if (common.Parent.ObjectType == 2) //Active if (common.Parent.ObjectType == Constants.ObjectType.Active) //Active
{ {
if (common.Animations != null) if (common.Animations != null)
foreach (var pair in common.Animations?.AnimationDict) foreach (var pair in common.Animations?.AnimationDict)
@ -667,7 +666,7 @@ namespace CTFAK.GUI
} }
} }
} }
else if(common.Parent.ObjectType==7)//Counter else if(common.Parent.ObjectType==Constants.ObjectType.Counter)//Counter
{ {
var count = common.Counters?.Frames?.Count??0; var count = common.Counters?.Frames?.Count??0;
@ -819,8 +818,8 @@ namespace CTFAK.GUI
{ {
text += $"Name: {frame.Name}\r\n"; text += $"Name: {frame.Name}\r\n";
text += $"Size: {frame.Width}x{frame.Height}\r\n"; text += $"Size: {frame.Width}x{frame.Height}\r\n";
text += $"Objects: {frame.Objects.Items.Count}\r\n"; text += $"Objects: {frame.Objects.Count}\r\n";
text += $"Layers: {frame.Layers.Items.Count}\r\n"; text += $"Layers: {frame.Layers.Count}\r\n";
text += $"Flags:\r\n"; text += $"Flags:\r\n";
foreach (var part in frame.Flags.ToString().Split(';')) foreach (var part in frame.Flags.ToString().Split(';'))
{ {
@ -843,13 +842,13 @@ namespace CTFAK.GUI
var common = ((ObjectCommon) instance.FrameItem.Properties.Loader); var common = ((ObjectCommon) instance.FrameItem.Properties.Loader);
switch (instance.FrameItem.ObjectType) switch (instance.FrameItem.ObjectType)
{ {
case 2: case Constants.ObjectType.Active:
text += $"Animations: {common.Animations?.AnimationDict.Count}"; text += $"Animations: {common.Animations?.AnimationDict.Count}";
imageViewPictureBox.Image = Exe.Instance.GameData.GameChunks.GetChunk<ImageBank>() imageViewPictureBox.Image = Exe.Instance.GameData.GameChunks.GetChunk<ImageBank>()
.FromHandle(common.Animations.AnimationDict.FirstOrDefault().Value.DirectionDict .FromHandle(common.Animations.AnimationDict.FirstOrDefault().Value.DirectionDict
.FirstOrDefault().Value.Frames.FirstOrDefault()).Bitmap; .FirstOrDefault().Value.Frames.FirstOrDefault()).Bitmap;
break; break;
case 3: case Constants.ObjectType.Text:
ObjectViewerLabel = new Label(); ObjectViewerLabel = new Label();
var content = string.Empty; var content = string.Empty;
foreach (var par in common.Text.Items) foreach (var par in common.Text.Items)
@ -864,7 +863,7 @@ namespace CTFAK.GUI
imageViewPictureBox.Controls.Add(ObjectViewerLabel); imageViewPictureBox.Controls.Add(ObjectViewerLabel);
break; break;
case 7: case Constants.ObjectType.Counter:
var handle = common.Counters?.Frames.FirstOrDefault(); var handle = common.Counters?.Frames.FirstOrDefault();
if (handle == null) imageViewPictureBox.Image = imageViewPictureBox.ErrorImage; if (handle == null) imageViewPictureBox.Image = imageViewPictureBox.ErrorImage;
else else
@ -884,7 +883,7 @@ namespace CTFAK.GUI
} }
else else
{ {
if (instance.FrameItem.ObjectType == 1) if (instance.FrameItem.ObjectType == Constants.ObjectType.Backdrop)
imageViewPictureBox.Image = Exe.Instance.GameData.GameChunks.GetChunk<ImageBank>().FromHandle(((Backdrop)instance.FrameItem.Properties.Loader).Image).Bitmap; imageViewPictureBox.Image = Exe.Instance.GameData.GameChunks.GetChunk<ImageBank>().FromHandle(((Backdrop)instance.FrameItem.Properties.Loader).Image).Bitmap;
} }

@ -132,7 +132,7 @@ namespace CTFAK.MMFParser.EXE
Logger.Log("Frames: ", true, ConsoleColor.Cyan); Logger.Log("Frames: ", true, ConsoleColor.Cyan);
foreach (var item in Frames) foreach (var item in Frames)
{ {
Logger.Log($" Frame: {item.Name,25}, Size: {item.Width,4}x{item.Height,4}, Number of objects: {item.CountOfObjs,5}", true, ConsoleColor.Cyan); Logger.Log($" Frame: {item.Name,25}, Size: {item.Width,4}x{item.Height,4}, Number of objects: {item.Objects.Count,5}", true, ConsoleColor.Cyan);
var objects = item.Chunks.GetChunk<ObjectInstances>(); var objects = item.Chunks.GetChunk<ObjectInstances>();
if (objects != null) if (objects != null)
{ {

@ -143,7 +143,6 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks
//tranparent,add later //tranparent,add later
Color _transparent; Color _transparent;
byte[] _colorArray; byte[] _colorArray;
int _indexed;
public byte[] rawImg; public byte[] rawImg;
public byte[] rawAlpha; public byte[] rawAlpha;

@ -57,6 +57,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks
var item = new SoundItem(Reader); var item = new SoundItem(Reader);
item.IsCompressed = IsCompressed; item.IsCompressed = IsCompressed;
item.Read(); item.Read();
if(!IsCompressed)Logger.Log(item.Name);
OnSoundSaved?.Invoke(i,(int) NumOfItems); OnSoundSaved?.Invoke(i,(int) NumOfItems);
Items.Add(item); Items.Add(item);
@ -67,7 +68,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks
} }
public void Write(ByteWriter writer) public void Write(ByteWriter writer)
{ {
writer.WriteInt32(NumOfItems); writer.WriteInt32(Items.Count);
foreach (var item in Items) foreach (var item in Items)
{ {
item.Write(writer); item.Write(writer);
@ -145,23 +146,23 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks
} }
if (IsCompressed) if (IsCompressed)
{ {
Name = soundData.ReadWideString(nameLenght); Name = soundData.ReadAscii(nameLenght);
} }
else else
{ {
Name = soundData.ReadAscii(nameLenght); Name = soundData.ReadWideString(nameLenght);
} }
this.Data = soundData.ReadBytes((int) soundData.Size()); this.Data = soundData.ReadBytes((int) soundData.Size());
//Logger.Log("SoundHeader: "+Data.GetHex(4));
if (Settings.DumpSounds) if (Settings.DumpSounds)
{ {
Name = Helper.CleanInput(Name); Name = Helper.CleanInput(Name);
File.WriteAllBytes($"{Settings.SoundPath}\\{Name}.wav", Data); File.WriteAllBytes($"{Settings.SoundPath}\\{Name}.wav", Data);
// File.WriteAllBytes($"{Name}.wav", Data);
} }
//Save($"{Settings.DumpPath}\\SoundBank\\{Name}.wav");
} }
@ -171,11 +172,11 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks
writer.WriteUInt32((uint)Handle); writer.WriteUInt32((uint)Handle);
writer.WriteInt32(Checksum); writer.WriteInt32(Checksum);
writer.WriteInt32(References); writer.WriteInt32(References);
writer.WriteInt32(Data.Length+Name.Length+1); writer.WriteInt32(Data.Length+Name.Length+8);
writer.WriteInt32(Flags); writer.WriteInt32(Flags);
writer.WriteInt32(0); writer.WriteInt32(0);
writer.WriteInt32(Name.Length+1); writer.WriteInt32(Name.Length);
writer.WriteAscii(Name); writer.WriteUnicode(Name);
writer.WriteBytes(Data); writer.WriteBytes(Data);

@ -215,12 +215,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events
public override string ToString() public override string ToString()
{ {
if (Loader != null) return Loader.ToString(); if (Loader != null) return Loader.ToString();
else else throw new Exception($"Unkown Parameter: {Code} ");
{
throw new NotImplementedException($"Unkown Parameter: {Code} ");
return $"UNK-{Code}";
}
} }
} }

@ -176,7 +176,6 @@ 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)
{ {
@ -188,15 +187,12 @@ 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

@ -5,7 +5,6 @@ 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()

@ -21,6 +21,8 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters
Writer.WriteInt16((short) Handle); Writer.WriteInt16((short) Handle);
Writer.WriteUInt16((ushort) Flags); Writer.WriteUInt16((ushort) Flags);
Writer.WriteUnicode(Name); Writer.WriteUnicode(Name);
Writer.Skip(120);
Writer.WriteInt16(0);
} }
public override string ToString() public override string ToString()

@ -29,11 +29,6 @@ namespace CTFAK.MMFParser.EXE.Loaders
public class Frame : ChunkLoader public class Frame : ChunkLoader
{ {
public string Name;
public string Password;
public int Width;
public int Height;
public Color Background;
public BitDict Flags=new BitDict(new string[] public BitDict Flags=new BitDict(new string[]
{ {
"XCoefficient", "XCoefficient",
@ -49,27 +44,24 @@ namespace CTFAK.MMFParser.EXE.Loaders
"ToShow" "ToShow"
}); });
public int CountOfObjs;
// int _top;
// int _bottom;
// int _left;
// int _right;
public ChunkList Chunks; public ChunkList Chunks;
public FrameHeader Header; private FrameHeader _header;
public ObjectInstances Objects; private FrameName _name;
public Layers Layers; private FramePassword _password;
public Events.Events Events; private FramePalette _palette;
public FramePalette Palette; private Layers _layers;
public Transition FadeIn; private ObjectInstances _objects;
public Transition FadeOut; private Events.Events _events;
private Transition _fadeIn;
private Transition _fadeOut;
public override void Print(bool ext) public override void Print(bool ext)
{ {
Logger.Log($"Frame: {Name}", true, ConsoleColor.Green); Logger.Log($"Frame: {_name}", true, ConsoleColor.Green);
Logger.Log($" Password: {(Password!=null ? Password : "None")}", true, ConsoleColor.Green); Logger.Log($" Password: {Password}", true, ConsoleColor.Green);
Logger.Log($" Size: {Width}x{Height}", true, ConsoleColor.Green); Logger.Log($" Size: {Width}x{Height}", true, ConsoleColor.Green);
Logger.Log($" Objects: {CountOfObjs}", true, ConsoleColor.Green); Logger.Log($" Objects: {_objects.CountOfObjects}", true, ConsoleColor.Green);
Logger.Log($"-------------------------", true, ConsoleColor.Green); Logger.Log($"-------------------------", true, ConsoleColor.Green);
} }
@ -77,88 +69,49 @@ namespace CTFAK.MMFParser.EXE.Loaders
{ {
return new string[] return new string[]
{ {
$"Name: {Name}", $"Name: {_name}",
$"Size: {Width}x{Height}", $"Size: {Width}x{Height}",
$"Objects: {CountOfObjs}" $"Objects: {_objects.CountOfObjects}"
}; };
} }
public override void Read() public override void Read()
{ {
var frameReader = new ByteReader(Chunk.ChunkData); var frameReader = new ByteReader(Chunk.ChunkData);
Chunks = new ChunkList(); Chunks = new ChunkList();
Chunks.Read(frameReader); Chunks.Read(frameReader);
var name = Chunks.GetChunk<FrameName>();
if (name != null) //Just to be sure
{
this.Name = name.Value;
Logger.Log(Properties.GlobalStrings.readingFrame+" "+Name,true,ConsoleColor.Green);
}
var password = Chunks.GetChunk<FramePassword>();
if (password != null) //Just to be sure
{
this.Password = password.Value;
}
var layers = Chunks.GetChunk<Layers>();
if (layers != null)
{
Layers = layers;
}
var events = Chunks.GetChunk<Events.Events>();
if (events != null)
{
Events = events;
}
var palette = Chunks.GetChunk<FramePalette>();
if (palette != null)
{
Palette = palette;
}
Header = Chunks.GetChunk<FrameHeader>();
Width = Header.Width;
Height = Header.Height;
Background = Header.Background;
Flags.flag = Header.Flags.flag;
Objects = Chunks.GetChunk<ObjectInstances>();
if(Objects!=null)
{
CountOfObjs = Objects.CountOfObjects;
}
FadeIn = Chunks.PopChunk<Transition>();
FadeOut = Chunks.PopChunk<Transition>();
Logger.Log(Properties.GlobalStrings.readingFrame+" "+_name,true,ConsoleColor.Green);
_header = Chunks.GetChunk<FrameHeader>();
_name = Chunks.GetChunk<FrameName>();
_password = Chunks.GetChunk<FramePassword>();
_palette = Chunks.GetChunk<FramePalette>();
_layers = Chunks.GetChunk<Layers>();
_objects = Chunks.GetChunk<ObjectInstances>();
_events = Chunks.GetChunk<Events.Events>();
_fadeIn = Chunks.PopChunk<Transition>();
_fadeOut = Chunks.PopChunk<Transition>();
Flags.flag = _header.Flags.flag;
foreach (var item in Chunks.Chunks)
{
//Directory.CreateDirectory($"{Program.DumpPath}\\CHUNKS\\FRAMES\\{this.name}");
//string path = $"{Program.DumpPath}\\CHUNKS\\FRAMES\\{this.name}\\{chunk.name}.chunk";
//File.WriteAllBytes(path, item.chunk_data);
} }
public int Width => _header.Width;
public int Height => _header.Height;
public string Name => _name.Value;
public string Password => _password.Value;
public Color Background => _header.Background;
public List<ObjectInstance> Objects => _objects.Items;
public List<Color> Palette => _palette.Items;
public Events.Events Events => _events;
public List<Layer> Layers => _layers.Items;
public Frame(ByteReader reader) : base(reader){}
public Frame(ChunkList.Chunk chunk) : base(chunk){}
}
public Frame(ByteReader reader) : base(reader)
{
}
public Frame(ChunkList.Chunk chunk) : base(chunk)
{
}
} }
public class FrameHeader : ChunkLoader public class FrameHeader : ChunkLoader

@ -10,45 +10,14 @@ namespace CTFAK.MMFParser.EXE.Loaders
public class ObjectInfo : ChunkLoader public class ObjectInfo : ChunkLoader
{ {
public List<Chunk> Chunks = new List<Chunk>(); public List<Chunk> Chunks = new List<Chunk>();
//public int Properties = 0;
public string Name = "ERROR";
public int Handle;
public int ObjectType;
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;
public int InkEffectValue;
public int ShaderId; public int ShaderId;
public int Items; public int Items;
public ObjectProperties Properties; private ObjectHeader _header;
private ObjectName _name;
public ObjectInfo(Chunk chunk) : base(chunk) private ObjectProperties _properties;
{ public ObjectInfo(Chunk chunk) : base(chunk){}
} public ObjectInfo(ByteReader reader) : base(reader){}
public override void Print(bool ext){}
public ObjectInfo(ByteReader reader) : base(reader)
{
}
public override void Print(bool ext)
{
}
public override string[] GetReadableData() public override string[] GetReadableData()
{ {
return new string[] return new string[]
@ -65,52 +34,29 @@ namespace CTFAK.MMFParser.EXE.Loaders
infoChunks.Verbose = false; infoChunks.Verbose = false;
infoChunks.Read(Reader); infoChunks.Read(Reader);
foreach (var infoChunk in infoChunks.Chunks) _header = infoChunks.GetChunk<ObjectHeader>();
{ _name = infoChunks.GetChunk<ObjectName>();
_properties = infoChunks.GetChunk<ObjectProperties>();
infoChunk.Verbose = false; _properties.ReadNew((int) ObjectType,this);
var loader = infoChunk.Loader;
if (loader is ObjectName)
{
var actualLoader = (ObjectName)(loader);
Name = actualLoader.Value;
} }
else if (loader is ObjectHeader)
{
var actualLoader = (ObjectHeader)(loader); public int Handle => _header.Handle;
Handle = actualLoader.Handle; public string Name => _name.Value;
ObjectType = actualLoader.ObjectType; public ObjectProperties Properties => _properties;
Flags.flag = actualLoader.Flags; public Constants.ObjectType ObjectType => (Constants.ObjectType) _header.ObjectType;
public int Flags => (int) _header.Flags;
public int InkEffect => (int) _header.InkEffect;
public int InkEffectValue => (int) _header.InkEffectParameter;
public bool Transparent => ByteFlag.GetFlag((uint) InkEffect, 28);
public bool Antialias => ByteFlag.GetFlag((uint) InkEffect, 29);
UInt32 inkEffect = actualLoader.InkEffect;
InkEffectValue = (int) actualLoader.InkEffectParameter;
Transparent = ByteFlag.GetFlag(inkEffect, 28);
Antialias = ByteFlag.GetFlag(inkEffect, 29);
}
else if (loader is ObjectProperties)
{
Properties = (ObjectProperties)loader;
}
}
if (Properties != null)
{
Properties.ReadNew(ObjectType,this);
}
}
public ImageItem GetPreview() public ImageItem GetPreview()
{ {
ImageItem bmp=null; ImageItem bmp=null;
var images = Exe.Instance.GameData.GameChunks.GetChunk<ImageBank>(); var images = Exe.Instance.GameData.GameChunks.GetChunk<ImageBank>();
if (ObjectType == 2) if (ObjectType == Constants.ObjectType.Active)
{ {
var anims = ((ObjectCommon) (Properties.Loader)).Animations; var anims = ((ObjectCommon) (Properties.Loader)).Animations;
@ -130,15 +76,15 @@ namespace CTFAK.MMFParser.EXE.Loaders
bmp = images.Images[firstFrameHandle]; bmp = images.Images[firstFrameHandle];
} }
} }
else if (ObjectType == 1)//Backdrop else if (ObjectType == Constants.ObjectType.Backdrop)
{ {
images.Images.TryGetValue(((Backdrop) Properties.Loader).Image, out var img); images.Images.TryGetValue(((Backdrop) Properties.Loader).Image, out var img);
bmp = img; bmp = img;
} }
else if (ObjectType==0)//QuickBackdrop else if (ObjectType==Constants.ObjectType.QuickBackdrop)
{ {
images.Images.TryGetValue(((Quickbackdrop) Properties.Loader).Image, out var img);
bmp = img;
} }
@ -151,7 +97,7 @@ namespace CTFAK.MMFParser.EXE.Loaders
var frames = Exe.Instance.GameData.Frames; var frames = Exe.Instance.GameData.Frames;
foreach (var frame in frames) foreach (var frame in frames)
{ {
foreach (ObjectInstance instance in frame.Objects.Items) foreach (ObjectInstance instance in frame.Objects)
{ {
if(instance.ObjectInfo==this.Handle)list.Add(instance); if(instance.ObjectInfo==this.Handle)list.Add(instance);
} }
@ -163,13 +109,8 @@ namespace CTFAK.MMFParser.EXE.Loaders
public class ObjectName : StringChunk public class ObjectName : StringChunk
{ {
public ObjectName(ByteReader reader) : base(reader) public ObjectName(ByteReader reader) : base(reader){}
{ public ObjectName(Chunk chunk) : base(chunk){}
}
public ObjectName(Chunk chunk) : base(chunk)
{
}
} }
public class ObjectProperties : ChunkLoader public class ObjectProperties : ChunkLoader
@ -177,53 +118,24 @@ namespace CTFAK.MMFParser.EXE.Loaders
public bool IsCommon; public bool IsCommon;
public ChunkLoader Loader; public ChunkLoader Loader;
public ObjectProperties(ByteReader reader) : base(reader) public ObjectProperties(ByteReader reader) : base(reader){}
{ public ObjectProperties(Chunk chunk) : base(chunk){}
}
public ObjectProperties(Chunk chunk) : base(chunk)
{
}
public void ReadNew(int ObjectType,ObjectInfo parent) public void ReadNew(int ObjectType,ObjectInfo parent)
{ {
if(ObjectType==0) Loader=new Quickbackdrop(Reader);
//TODO: Fix shit else if (ObjectType == 1) Loader = new Backdrop(Reader);
if(ObjectType==0)//QuickBackdrop
{
Loader=new Quickbackdrop(Reader);
}
else if (ObjectType == 1)//Backdrop
{
Loader = new Backdrop(Reader);
}
else else
{ {
IsCommon = true; IsCommon = true;
Loader = new ObjectCommon(Reader,parent); Loader = new ObjectCommon(Reader,parent);
} }
Loader?.Read();
if (Loader != null)
{
Loader.Read();
}
} }
public override void Read(){}
public override void Print(bool ext){}
public override void Read() public override string[] GetReadableData() => null;
{
}
public override void Print(bool ext)
{
throw new NotImplementedException();
}
public override string[] GetReadableData()
{
throw new NotImplementedException();
}
} }
public class ObjectHeader : ChunkLoader public class ObjectHeader : ChunkLoader
@ -234,30 +146,17 @@ namespace CTFAK.MMFParser.EXE.Loaders
public UInt32 InkEffect; public UInt32 InkEffect;
public UInt32 InkEffectParameter; public UInt32 InkEffectParameter;
public ObjectHeader(ByteReader reader) : base(reader) public ObjectHeader(ByteReader reader) : base(reader){}
{ public ObjectHeader(Chunk chunk) : base(chunk){}
} public override void Print(bool ext){}
public override string[] GetReadableData() => null;
public ObjectHeader(Chunk chunk) : base(chunk)
{
}
public override void Print(bool ext)
{
}
public override string[] GetReadableData()
{
return null;
}
public override void Read() public override void Read()
{ {
Handle = Reader.ReadInt16(); Handle = Reader.ReadInt16();
ObjectType = Reader.ReadInt16(); ObjectType = Reader.ReadInt16();
Int16 reserved = Reader.ReadInt16();
Flags = Reader.ReadUInt16(); Flags = Reader.ReadUInt16();
Int16 reserved = Reader.ReadInt16();
InkEffect = Reader.ReadUInt32(); InkEffect = Reader.ReadUInt32();
InkEffectParameter = Reader.ReadUInt32(); InkEffectParameter = Reader.ReadUInt32();
} }

@ -135,10 +135,11 @@ namespace CTFAK.MMFParser.EXE.Loaders.Objects
Color2 = Reader.ReadColor(); Color2 = Reader.ReadColor();
GradFlags = Reader.ReadInt16(); GradFlags = Reader.ReadInt16();
} }
else if(FillType==3) // else if(FillType==3)
{ // {
Image = Reader.ReadInt16(); Image = Reader.ReadInt16();
} Logger.Log("QuickbackdropIMG: "+Image);
// }
} }
public override void Print(bool ext) public override void Print(bool ext)

@ -1,4 +1,7 @@
using System.Collections.Generic; using System;
using System.Collections.Generic;
using System.IO;
using System.Web.UI.WebControls;
using CTFAK.Utils; using CTFAK.Utils;
namespace CTFAK.MMFParser.EXE.Loaders.Objects namespace CTFAK.MMFParser.EXE.Loaders.Objects
@ -79,8 +82,18 @@ namespace CTFAK.MMFParser.EXE.Loaders.Objects
case 1: case 1:
Loader = new Mouse(Reader); Loader = new Mouse(Reader);
break; break;
case 3:
Loader=new EightDirections(Reader);
break;
case 5:
Loader=new MovementPath(Reader);
break;
case 4:
Loader=new Ball(Reader);
break;
} }
if(Loader==null&&Type!=0) throw new Exception("Unsupported movement: "+Type);
Loader?.Read(); Loader?.Read();
} }
@ -125,6 +138,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Objects
public short X2; public short X2;
public short Y1; public short Y1;
public short Y2; public short Y2;
private short _unusedFlags;
public Mouse(ByteReader reader) : base(reader) public Mouse(ByteReader reader) : base(reader)
{ {
@ -140,17 +154,195 @@ namespace CTFAK.MMFParser.EXE.Loaders.Objects
X2 = Reader.ReadInt16(); X2 = Reader.ReadInt16();
Y1 = Reader.ReadInt16(); Y1 = Reader.ReadInt16();
Y2 = Reader.ReadInt16(); Y2 = Reader.ReadInt16();
var unusedFlags = Reader.ReadInt16(); _unusedFlags = Reader.ReadInt16();
} }
public override void Write(ByteWriter Writer) public override void Write(ByteWriter Writer)
{ {
Logger.Log("Writing mouse mov");
Writer.WriteInt16(X1); Writer.WriteInt16(X1);
Writer.WriteInt16(X2); Writer.WriteInt16(X2);
Writer.WriteInt16(Y1); Writer.WriteInt16(Y1);
Writer.WriteInt16(Y2); Writer.WriteInt16(Y2);
Writer.WriteInt16(0); Writer.WriteInt16(_unusedFlags);
}
}
public class MovementPath:MovementLoader
{
public short MinimumSpeed;
public short MaximumSpeed;
public byte Loop;
public byte RepositionAtEnd;
public byte ReverseAtEnd;
public List<MovementStep> Steps;
public MovementPath(ByteReader reader) : base(reader)
{
}
public MovementPath(ChunkList.Chunk chunk) : base(chunk)
{
}
public override void Read()
{
var count = Reader.ReadInt16();
MinimumSpeed = Reader.ReadInt16();
MaximumSpeed = Reader.ReadInt16();
Loop = Reader.ReadByte();
RepositionAtEnd = Reader.ReadByte();
ReverseAtEnd = Reader.ReadByte();
Reader.Skip(1);
Steps = new List<MovementStep>();
for (int i = 0; i < count; i++)
{
var currentPosition = Reader.Tell();
Reader.Skip(1);
var size = Reader.ReadByte();
var step =new MovementStep(Reader);
step.Read();
Steps.Add(step);
Reader.Seek(currentPosition + size);
}
}
public override void Write(ByteWriter Writer)
{
Writer.WriteInt16((short) Steps.Count);
Writer.WriteInt16(MinimumSpeed);
Writer.WriteInt16(MaximumSpeed);
Writer.WriteInt8(Loop);
Writer.WriteInt8(RepositionAtEnd);
Writer.WriteInt8(ReverseAtEnd);
Writer.WriteInt8(0);
foreach (MovementStep step in Steps)
{
Writer.WriteInt8(0);
var newWriter = new ByteWriter(new MemoryStream());
step.Write(newWriter);
Writer.WriteInt8((byte) (newWriter.Size()+2));
Writer.WriteWriter(newWriter);
}
}
}
public class MovementStep:MovementLoader
{
public byte Speed;
public byte Direction;
public short DestinationX;
public short DestinationY;
public short Cosinus;
public short Sinus;
public short Length;
public short Pause;
public string Name;
public MovementStep(ByteReader reader) : base(reader)
{
}
public MovementStep(ChunkList.Chunk chunk) : base(chunk)
{
}
public override void Read()
{
Speed = Reader.ReadByte();
Direction = Reader.ReadByte();
DestinationX = Reader.ReadInt16();
DestinationY = Reader.ReadInt16();
Cosinus = Reader.ReadInt16();
Sinus = Reader.ReadInt16();
Length = Reader.ReadInt16();
Pause = Reader.ReadInt16();
Name = Reader.ReadAscii();
}
public override void Write(ByteWriter Writer)
{
Writer.WriteInt8(Speed);
Writer.WriteInt8(Direction);
Writer.WriteInt16(DestinationX);
Writer.WriteInt16(DestinationY);
Writer.WriteInt16(Cosinus);
Writer.WriteInt16(Sinus);
Writer.WriteInt16(Length);
Writer.WriteInt16(Pause);
Writer.WriteAscii(Name);
}
}
public class Ball:MovementLoader
{
public short Speed;
public short Randomizer;
public short Angles;
public short Security;
public short Deceleration;
public Ball(ByteReader reader) : base(reader)
{
}
public Ball(ChunkList.Chunk chunk) : base(chunk)
{
}
public override void Read()
{
Speed = Reader.ReadInt16();
Randomizer = Reader.ReadInt16();
Angles = Reader.ReadInt16();
Security = Reader.ReadInt16();
Deceleration = Reader.ReadInt16();
}
public override void Write(ByteWriter Writer)
{
Writer.WriteInt16(Speed);
Writer.WriteInt16(Randomizer);
Writer.WriteInt16(Angles);
Writer.WriteInt16(Security);
Writer.WriteInt16(Deceleration);
}
}
public class EightDirections:MovementLoader
{
public short Speed;
public short Acceleration;
public short Deceleration;
public short Directions;
public short BounceFactor;
public EightDirections(ByteReader reader) : base(reader)
{
}
public EightDirections(ChunkList.Chunk chunk) : base(chunk)
{
}
public override void Read()
{
Speed = Reader.ReadInt16();
Acceleration = Reader.ReadInt16();
Deceleration = Reader.ReadInt16();
BounceFactor = Reader.ReadInt16();
Directions = Reader.ReadInt16();
}
public override void Write(ByteWriter Writer)
{
Writer.WriteInt16(Speed);
Writer.WriteInt16(Acceleration);
Writer.WriteInt16(Deceleration);
Writer.WriteInt16(BounceFactor);
Writer.WriteInt16(Directions);
} }
} }
} }

@ -20,7 +20,6 @@ namespace CTFAK.MMFParser.EXE.Loaders.Objects
private int Identifier; private int Identifier;
public Animations Animations; public Animations Animations;
private long _end;
private BitDict preferences = new BitDict(new string[] private BitDict preferences = new BitDict(new string[]
{ {
@ -165,12 +164,12 @@ namespace CTFAK.MMFParser.EXE.Loaders.Objects
switch (Parent.ObjectType) switch (Parent.ObjectType)
{ {
//Text //Text
case 3: case Constants.ObjectType.Text:
Text = new Text(Reader); Text = new Text(Reader);
Text.Read(); Text.Read();
break; break;
//Counter //Counter
case 7: case Constants.ObjectType.Counter:
Counters=new Counters(Reader); Counters=new Counters(Reader);
Counters.Read(); Counters.Read();
break; break;

@ -23,9 +23,6 @@ namespace CTFAK.MMFParser.EXE.Loaders
public override void Read() public override void Read()
{ {
return;
Logger.Log("dumpingIcon"); Logger.Log("dumpingIcon");
Reader.ReadBytes(Reader.ReadInt32() - 4); Reader.ReadBytes(Reader.ReadInt32() - 4);
List<byte> colorIndexes = new List<byte>(); List<byte> colorIndexes = new List<byte>();

@ -60,19 +60,19 @@ namespace CTFAK.MMFParser.MFA.Loaders.mfachunks
Writer.AutoWriteUnicode(Extension); Writer.AutoWriteUnicode(Extension);
Writer.WriteUInt32(Identifier); Writer.WriteUInt32(Identifier);
var newWriter = new ByteWriter(new MemoryStream()); var newWriter = new ByteWriter(new MemoryStream());
if (Extension.Length==0)
{
newWriter.WriteInt16(Player); newWriter.WriteInt16(Player);
newWriter.WriteInt16(Type); newWriter.WriteInt16(Type);
newWriter.WriteInt8(MovingAtStart); newWriter.WriteInt8(MovingAtStart);
newWriter.Skip(3); newWriter.Skip(3);
newWriter.WriteInt32(DirectionAtStart); newWriter.WriteInt32(DirectionAtStart);
// newWriter.WriteBytes(extData); // newWriter.WriteBytes(extData);
}
var new2 = new ByteWriter(new MemoryStream());
Loader?.Write(new2); Loader?.Write(newWriter);
newWriter.WriteWriter(new2); newWriter.Skip(12);
newWriter.WriteInt16(0);
Writer.WriteInt32((int) newWriter.Size()); Writer.WriteInt32((int) newWriter.Size());
Writer.WriteWriter(newWriter); Writer.WriteWriter(newWriter);
@ -107,6 +107,12 @@ namespace CTFAK.MMFParser.MFA.Loaders.mfachunks
case 1: case 1:
Loader = new Mouse(new ByteReader(extData)); Loader = new Mouse(new ByteReader(extData));
break; break;
case 5:
Loader = new MovementPath(new ByteReader(extData));
break;
case 4:
Loader = new Ball(new ByteReader(extData));
break;
} }
Loader?.Read(); Loader?.Read();

@ -46,6 +46,8 @@ namespace CTFAK.MMFParser.Translation
Logger.Log("Loading images"); Logger.Log("Loading images");
Exe.Instance.GameData.GameChunks.GetChunk<ImageBank>().PreloadOnly = false; Exe.Instance.GameData.GameChunks.GetChunk<ImageBank>().PreloadOnly = false;
Exe.Instance.GameData.GameChunks.GetChunk<ImageBank>().Read(true,false); Exe.Instance.GameData.GameChunks.GetChunk<ImageBank>().Read(true,false);
// Exe.Instance.GameData.GameChunks.GetChunk<SoundBank>().Read();
Settings.DoMFA = true; Settings.DoMFA = true;
var template = new MFA.MFA(mfaReader); var template = new MFA.MFA(mfaReader);

@ -44,12 +44,12 @@ namespace CTFAK.MMFParser.Translation
//mfa.Stamp = wtf; //mfa.Stamp = wtf;
//if (game.Fonts != null) mfa.Fonts = game.Fonts; //if (game.Fonts != null) mfa.Fonts = game.Fonts;
mfa.Sounds.Items.Clear();
// mfa.Sounds = game.Sounds; // foreach (var item in game.Sounds.Items)
// foreach (var item in mfa.Sounds.Items)
// { // {
// item.IsCompressed = false; // mfa.Sounds.Items.Add(item);
// } // }
// mfa.Music = game.Music; // mfa.Music = game.Music;
mfa.Images.Items = game.Images.Images; mfa.Images.Items = game.Images.Images;
foreach (var key in mfa.Images.Items.Keys) foreach (var key in mfa.Images.Items.Keys)
@ -107,7 +107,7 @@ namespace CTFAK.MMFParser.Translation
if(frame.Palette==null|| frame.Events==null|| frame.Objects==null) continue; if(frame.Palette==null|| frame.Events==null|| frame.Objects==null) continue;
var newFrame = new MFA.Loaders.Frame(null); var newFrame = new MFA.Loaders.Frame(null);
newFrame.Handle = game.Frames.IndexOf(frame)+1; newFrame.Handle = game.Frames.IndexOf(frame);
newFrame.Name = frame.Name; newFrame.Name = frame.Name;
newFrame.SizeX = frame.Width; newFrame.SizeX = frame.Width;
newFrame.SizeY = frame.Height; newFrame.SizeY = frame.Height;
@ -130,15 +130,15 @@ namespace CTFAK.MMFParser.Translation
newFrame.Password = ""; newFrame.Password = "";
newFrame.LastViewedX = 320; newFrame.LastViewedX = 320;
newFrame.LastViewedY = 240; newFrame.LastViewedY = 240;
newFrame.Palette = frame.Palette.Items; newFrame.Palette = frame.Palette;
newFrame.StampHandle = 13; newFrame.StampHandle = 13;
newFrame.ActiveLayer = 0; newFrame.ActiveLayer = 0;
//LayerInfo //LayerInfo
var count = frame.Layers.Items.Count; var count = frame.Layers.Count;
Logger.Log($"{newFrame.Name} - {count}"); Logger.Log($"{newFrame.Name} - {count}");
for (int i=0;i<count;i++) for (int i=0;i<count;i++)
{ {
var layer = frame.Layers.Items[i]; var layer = frame.Layers[i];
var newLayer = new MFA.Loaders.Layer(null); var newLayer = new MFA.Loaders.Layer(null);
newLayer.Name = layer.Name; newLayer.Name = layer.Name;
newLayer.Flags["HideAtStart"] = layer.Flags["ToHide"]; newLayer.Flags["HideAtStart"] = layer.Flags["ToHide"];
@ -164,10 +164,10 @@ namespace CTFAK.MMFParser.Translation
if (frame.Objects != null) if (frame.Objects != null)
{ {
for (int i = 0; i < frame.Objects.Items.Count; i++) for (int i = 0; i < frame.Objects.Count; i++)
{ {
var instance = frame.Objects.Items[i]; var instance = frame.Objects[i];
FrameItem frameItem; FrameItem frameItem;
if (FrameItems.ContainsKey(instance.ObjectInfo)) if (FrameItems.ContainsKey(instance.ObjectInfo))
@ -178,7 +178,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.flag; newInstance.Flags = (uint) instance.FrameItem.Flags;
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;
@ -336,13 +336,13 @@ namespace CTFAK.MMFParser.Translation
{ {
var newItem = new FrameItem(null); var newItem = new FrameItem(null);
newItem.Name = item.Name; newItem.Name = item.Name;
newItem.ObjectType = item.ObjectType; newItem.ObjectType = (int)item.ObjectType;
newItem.Handle = item.Handle; newItem.Handle = item.Handle;
newItem.Transparent = item.Transparent ? 1 : 0; newItem.Transparent = item.Transparent ? 1 : 0;
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.flag; //32 TODO:Fix this newItem.Flags = (int) item.Flags;
newItem.IconHandle = 12; newItem.IconHandle = 12;
newItem.Chunks = new ChunkList(null); newItem.Chunks = new ChunkList(null);
@ -360,11 +360,11 @@ namespace CTFAK.MMFParser.Translation
backdrop.Color1 = backdropLoader.Shape.Color1; backdrop.Color1 = backdropLoader.Shape.Color1;
backdrop.Color2 = backdropLoader.Shape.Color2; backdrop.Color2 = backdropLoader.Shape.Color2;
backdrop.Flags = backdropLoader.Shape.GradFlags; backdrop.Flags = backdropLoader.Shape.GradFlags;
backdrop.Image = backdropLoader.Image; backdrop.Image = backdropLoader.Shape.Image;
newItem.Loader = backdrop; newItem.Loader = backdrop;
} }
else if (item.ObjectType == 1) else if (item.ObjectType == Constants.ObjectType.Backdrop)
{ {
var backdropLoader = (EXE.Loaders.Objects.Backdrop) item.Properties.Loader; var backdropLoader = (EXE.Loaders.Objects.Backdrop) item.Properties.Loader;
var backdrop = new Backdrop((ByteReader) null); var backdrop = new Backdrop((ByteReader) null);
@ -393,8 +393,9 @@ namespace CTFAK.MMFParser.Translation
var newMov = new Movement(null); var newMov = new Movement(null);
newMov.Name = $"Movement #{j}"; newMov.Name = $"Movement #{j}";
newMov.Extension = ""; newMov.Extension = "";
newMov.Identifier = 0; //(uint) mov.Type; newMov.Type = mov.Type;
if (newMov.Identifier != 0) throw new Exception("Unknown Movement: " + newMov.Identifier); newMov.Identifier = (uint) mov.Type;
newMov.Loader = mov.Loader;
newMov.Player = mov.Player; newMov.Player = mov.Player;
newMov.MovingAtStart = mov.MovingAtStart; newMov.MovingAtStart = mov.MovingAtStart;
newMov.DirectionAtStart = mov.DirectionAtStart; newMov.DirectionAtStart = mov.DirectionAtStart;
@ -403,7 +404,7 @@ namespace CTFAK.MMFParser.Translation
newObject.Behaviours = new Behaviours(null); newObject.Behaviours = new Behaviours(null);
if (item.ObjectType == 2) if (item.ObjectType == Constants.ObjectType.Active)
{ {
var active = new Active(null); var active = new Active(null);
//Shit Section //Shit Section
@ -474,7 +475,7 @@ namespace CTFAK.MMFParser.Translation
newItem.Loader = active; newItem.Loader = active;
} }
if (item.ObjectType >= 32) if ((int)item.ObjectType >= 32)
{ {
var newExt = new ExtensionObject(null); var newExt = new ExtensionObject(null);
{ {
@ -490,7 +491,7 @@ namespace CTFAK.MMFParser.Translation
Extension ext = null; Extension ext = null;
foreach (var testExt in exts.Items) foreach (var testExt in exts.Items)
{ {
if (testExt.Handle == item.ObjectType - 32) ext = testExt; if (testExt.Handle == (int)item.ObjectType - 32) ext = testExt;
} }
newExt.ExtensionType = -1; newExt.ExtensionType = -1;
@ -508,7 +509,7 @@ namespace CTFAK.MMFParser.Translation
// mfa.Extensions.Add(tuple); // mfa.Extensions.Add(tuple);
} }
else if (item.ObjectType == 3) else if (item.ObjectType == Constants.ObjectType.Text)
{ {
var text = itemLoader.Text; var text = itemLoader.Text;
var newText = new Text(null); var newText = new Text(null);
@ -539,7 +540,7 @@ namespace CTFAK.MMFParser.Translation
newItem.Loader = newText; newItem.Loader = newText;
} }
else if (item.ObjectType == 6) else if (item.ObjectType == Constants.ObjectType.Lives)
{ {
var counter = itemLoader.Counters; var counter = itemLoader.Counters;
var lives = new Lives(null); var lives = new Lives(null);
@ -562,7 +563,7 @@ namespace CTFAK.MMFParser.Translation
newItem.Loader = lives; newItem.Loader = lives;
} }
else if (item.ObjectType == 7) else if (item.ObjectType == Constants.ObjectType.Counter)
{ {
var counter = itemLoader.Counters; var counter = itemLoader.Counters;
var newCount = new Counter(null); var newCount = new Counter(null);

@ -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) =>
{ {

@ -2,6 +2,7 @@
using System.Drawing; using System.Drawing;
using System.IO; using System.IO;
using System.Text; using System.Text;
using System.Windows.Forms.VisualStyles;
namespace CTFAK.Utils namespace CTFAK.Utils
{ {
@ -135,5 +136,10 @@ namespace CTFAK.Utils
} }
public override byte[] ReadBytes(int count=-1)
{
if (count == -1) return base.ReadBytes((int) this.Size());
return base.ReadBytes(count);
}
} }
} }

@ -6,6 +6,7 @@ using System.IO;
using System.Linq; using System.Linq;
using CTFAK.GUI; using CTFAK.GUI;
using CTFAK.GUI.GUIComponents; using CTFAK.GUI.GUIComponents;
using CTFAK.MMFParser;
using CTFAK.MMFParser.EXE; using CTFAK.MMFParser.EXE;
using CTFAK.MMFParser.EXE.Loaders; using CTFAK.MMFParser.EXE.Loaders;
using CTFAK.MMFParser.EXE.Loaders.Banks; using CTFAK.MMFParser.EXE.Loaders.Banks;
@ -55,7 +56,7 @@ namespace CTFAK.Utils
public static void SaveFrame(Frame frame, ImageBank bank, string fullPath) public static void SaveFrame(Frame frame, ImageBank bank, string fullPath)
{ {
foreach (var inst in frame.Objects.Items) foreach (var inst in frame.Objects)
{ {
var path = $"{fullPath}\\{Helper.CleanInput(inst.FrameItem.Name)}"; var path = $"{fullPath}\\{Helper.CleanInput(inst.FrameItem.Name)}";
Logger.Log("Saving Object to "+path); Logger.Log("Saving Object to "+path);
@ -80,13 +81,13 @@ namespace CTFAK.Utils
Directory.CreateDirectory(fullPath); Directory.CreateDirectory(fullPath);
switch (common.Parent.ObjectType) switch (common.Parent.ObjectType)
{ {
case 2: case Constants.ObjectType.Active:
foreach (var pair in common.Animations.AnimationDict.ToArray()) foreach (var pair in common.Animations.AnimationDict.ToArray())
{ {
SaveAnimation(pair.Value,bank,fullPath+"\\Animation "+pair.Key); SaveAnimation(pair.Value,bank,fullPath+"\\Animation "+pair.Key);
} }
break; break;
case 7: case Constants.ObjectType.Counter:
if (common?.Counters?.Frames.Count == 0) return; if (common?.Counters?.Frames.Count == 0) return;
if (common?.Counters?.Frames == null) return; if (common?.Counters?.Frames == null) return;
foreach (int frame in common?.Counters?.Frames) foreach (int frame in common?.Counters?.Frames)
@ -164,7 +165,7 @@ namespace CTFAK.Utils
{ {
var currentFramePath = rootFolder + "\\" + Helper.CleanInput(frame.Name); var currentFramePath = rootFolder + "\\" + Helper.CleanInput(frame.Name);
foreach (var item in frame.Objects.Items) foreach (var item in frame.Objects)
{ {
var currentObjPath = currentFramePath + "\\" + Helper.CleanInput(item.Name); var currentObjPath = currentFramePath + "\\" + Helper.CleanInput(item.Name);
@ -206,7 +207,7 @@ namespace CTFAK.Utils
int count = 0; int count = 0;
foreach (var frame in Exe.Instance.GameData.Frames) foreach (var frame in Exe.Instance.GameData.Frames)
{ {
foreach (ObjectInstance objectInstance in frame.Objects.Items) foreach (ObjectInstance objectInstance in frame.Objects)
{ {
count += objectInstance.FrameItem.GetFrames().Count; count += objectInstance.FrameItem.GetFrames().Count;
} }
@ -224,7 +225,7 @@ namespace CTFAK.Utils
if (obj.Properties.Loader is ObjectCommon common) if (obj.Properties.Loader is ObjectCommon common)
{ {
if (obj.ObjectType == 2) if (obj.ObjectType == Constants.ObjectType.Active)
{ {
foreach (var animKey in common.Animations.AnimationDict.Keys) foreach (var animKey in common.Animations.AnimationDict.Keys)
{ {
@ -264,7 +265,7 @@ namespace CTFAK.Utils
} }
} }
} }
else if (obj.ObjectType == 7) else if (obj.ObjectType == Constants.ObjectType.Counter)
{ {
var counters = common.Counters; var counters = common.Counters;
if (counters == null) return frames; if (counters == null) return frames;

Loading…
Cancel
Save