Transition support(cctrans.dll only)

master
1987kostya 4 years ago
parent e33eb070b6
commit 702edad4ad

@ -41,7 +41,7 @@ namespace CTFAK.MMFParser.EXE.Loaders
"SamplesWhenNotFocused", "SamplesWhenNotFocused",
"NoMinimizeBox", "NoMinimizeBox",
"NoMaximizeBox", "NoMaximizeBox",
"NoThiccFrame", "NoThickFrame",
"DoNotCenterFrame", "DoNotCenterFrame",
"ScreensaverAutostop", "ScreensaverAutostop",
"DisableClose", "DisableClose",

@ -18,6 +18,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks
public Dictionary<int, ImageItem> Images = new Dictionary<int, ImageItem>(); public Dictionary<int, ImageItem> Images = new Dictionary<int, ImageItem>();
public uint NumberOfItems; public uint NumberOfItems;
public bool PreloadOnly = false; public bool PreloadOnly = false;
public static bool Load = true;
public ImageBank(ByteReader reader) : base(reader) public ImageBank(ByteReader reader) : base(reader)
{ {
@ -87,15 +88,11 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks
{ {
if (MainForm.BreakImages) break; if (MainForm.BreakImages) break;
{ {
var item = new ImageItem(Reader); var item = new ImageItem(Reader);
item.Read(!PreloadOnly); item.Read(!PreloadOnly);
tempImages.Add(item.Handle, item); tempImages.Add(item.Handle, item);
if (SaveImages) item.Save($"{Settings.ImagePath}\\" + item.Handle.ToString() + ".png"); if (SaveImages) item.Save($"{Settings.ImagePath}\\" + item.Handle.ToString() + ".png");
OnImageSaved?.Invoke(i, (int) NumberOfItems); OnImageSaved?.Invoke(i, (int) NumberOfItems);
} }
} }
@ -146,8 +143,8 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks
Handle = Reader.ReadInt32(); Handle = Reader.ReadInt32();
if (!Debug) if (!Debug)
{ {
// if (Settings.Build>=287) Handle -= 1; if (Settings.Build>=284) Handle -= 1;
if (Program.CleanData.ProductVersion != Constants.Products.MMF15&&Settings.Build>=284) Handle -= 1; // if (Program.CleanData.ProductVersion != Constants.Products.MMF15&&Settings.Build>=284) Handle -= 1;
} }
Position = (int) Reader.Tell(); Position = (int) Reader.Tell();
@ -157,11 +154,13 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks
} }
public override void Read() public override void Read()
{ {
// if (Settings.Build>=284) Handle -= 1;
Handle = Reader.ReadInt32(); Handle = Reader.ReadInt32();
if (!Debug) if (!Debug)
{ {
// if (Settings.Build>=287) Handle -= 1; if (Settings.Build>=284) Handle -= 1;
if (Exe.Instance.GameData.ProductVersion != Constants.Products.MMF15&&Settings.Build>=284) Handle -= 1; // if (Exe.Instance.GameData.ProductVersion != Constants.Products.MMF15&&Settings.Build>=284) Handle -= 1;
} }
Position = (int) Reader.Tell(); Position = (int) Reader.Tell();
@ -281,10 +280,11 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks
int bytesRead = 0; int bytesRead = 0;
rawImg = imageData; rawImg = imageData;
if(!ImageBank.Load)return;
// Reader.Seek((_width*3)*_height+(ImageHelper.GetPadding(_width,3)*3*_height));
if (Flags["RLE"] || Flags["RLEW"] || Flags["RLET"]) if (Flags["RLE"] || Flags["RLEW"] || Flags["RLET"])
{ {
Reader.Seek(start+Size); // Reader.Seek(start+Size);
return; return;
} }
else else

@ -127,7 +127,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks
Checksum = Reader.ReadInt32(); Checksum = Reader.ReadInt32();
References = Reader.ReadInt32(); References = Reader.ReadInt32();
var decompressedSize = Reader.ReadInt32(); var decompressedSize = Reader.ReadInt32();
Flags = (int)Reader.ReadUInt32(); Flags = (int)Reader.ReadUInt32();
var reserved = Reader.ReadInt32(); var reserved = Reader.ReadInt32();
var nameLenght = Reader.ReadInt32(); var nameLenght = Reader.ReadInt32();
ByteReader soundData; ByteReader soundData;
@ -141,15 +141,13 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks
soundData = new ByteReader(Reader.ReadBytes(decompressedSize)); soundData = new ByteReader(Reader.ReadBytes(decompressedSize));
} }
Name = soundData.ReadWideString(nameLenght); Name = soundData.ReadWideString(nameLenght);
Name = Name.Replace(" ", "");
Data = soundData.ReadBytes((int) soundData.Size()); Data = soundData.ReadBytes((int) soundData.Size());
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);
} }
} }

@ -10,6 +10,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters
public ushort Id; public ushort Id;
public string Name; public string Name;
public int Password; public int Password;
private short _unk;
public Group(ByteReader reader) : base(reader) public Group(ByteReader reader) : base(reader)
{ {
@ -21,8 +22,9 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters
Flags = Reader.ReadUInt16(); Flags = Reader.ReadUInt16();
Id = Reader.ReadUInt16(); Id = Reader.ReadUInt16();
Name = Reader.ReadWideString(); Name = Reader.ReadWideString();
Reader.Skip(178);
Password = Reader.ReadInt32(); Password = Reader.ReadInt32();
Password = Checksum.MakeGroupChecksum("pass", Name); _unk = Reader.ReadInt16();
} }
public override void Write(ByteWriter Writer) public override void Write(ByteWriter Writer)
@ -30,7 +32,10 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters
Writer.WriteUInt16(Flags); Writer.WriteUInt16(Flags);
Writer.WriteUInt16(Id); Writer.WriteUInt16(Id);
Writer.WriteUnicode(Name,true); Writer.WriteUnicode(Name,true);
Writer.Skip(178);
Writer.WriteInt32(Password); Writer.WriteInt32(Password);
Writer.WriteInt16(_unk);
} }
public override string ToString() public override string ToString()

@ -20,6 +20,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters
{ {
Writer.WriteInt16((short) Handle); Writer.WriteInt16((short) Handle);
Writer.WriteUInt16((ushort) Flags); Writer.WriteUInt16((ushort) Flags);
Name = Name.Replace(" ", "");
Writer.WriteUnicode(Name); Writer.WriteUnicode(Name);
Writer.Skip(120); Writer.Skip(120);
Writer.WriteInt16(0); Writer.WriteInt16(0);

@ -119,6 +119,8 @@ namespace CTFAK.MMFParser.EXE.Loaders
public List<ObjectInstance> Objects => _objects?.Items ?? null; public List<ObjectInstance> Objects => _objects?.Items ?? null;
public List<Color> Palette => _palette?.Items ?? new Color[256].ToList(); public List<Color> Palette => _palette?.Items ?? new Color[256].ToList();
public Events.Events Events => _events; public Events.Events Events => _events;
public Transition FadeIn => _fadeIn;
public Transition FadeOut => _fadeOut;
public List<Layer> Layers => _layers?.Items ?? null; public List<Layer> Layers => _layers?.Items ?? null;

@ -38,19 +38,21 @@ namespace CTFAK.MMFParser.EXE.Loaders
_header = infoChunks.GetChunk<ObjectHeader>(); _header = infoChunks.GetChunk<ObjectHeader>();
_name = infoChunks.GetChunk<ObjectName>(); _name = infoChunks.GetChunk<ObjectName>();
_properties = infoChunks.GetChunk<ObjectProperties>(); _properties = infoChunks.GetChunk<ObjectProperties>();
_properties.ReadNew((int) ObjectType,this); _properties.ReadNew((int) ObjectType,this);
Logger.Log($"{Name}: {InkEffect}-{InkEffectValue}");
} }
public int Handle => _header.Handle; public int Handle => _header.Handle;
public string Name => _name.Value; public string Name => _name?.Value ?? "Unnamed Object - "+Handle;
public ObjectProperties Properties => _properties; public ObjectProperties Properties => _properties;
public Constants.ObjectType ObjectType => (Constants.ObjectType) _header.ObjectType; public Constants.ObjectType ObjectType => (Constants.ObjectType) _header.ObjectType;
public int Flags => (int) _header.Flags; public int Flags => (int) _header.Flags;
public int Reserved => (int) _header.Reserved; public int Reserved => (int) _header.Reserved;
public int InkEffect => (int) _header.InkEffect; public int InkEffect => (int) _header.InkEffect&0xffff;
public int InkEffectValue => (int) _header.InkEffectParameter; public int InkEffectValue => (int) _header.InkEffectParameter;
public bool Transparent => ByteFlag.GetFlag((uint) InkEffect, 28); public bool Transparent => ByteFlag.GetFlag((uint) _header.InkEffect, 28);
public bool Antialias => ByteFlag.GetFlag((uint) InkEffect, 29); public bool Antialias => ByteFlag.GetFlag((uint) _header.InkEffect, 29);
public ImageItem GetPreview() public ImageItem GetPreview()
@ -144,8 +146,8 @@ namespace CTFAK.MMFParser.EXE.Loaders
public Int16 ObjectType; public Int16 ObjectType;
public UInt32 Flags; public UInt32 Flags;
public UInt32 InkEffect; public UInt32 InkEffect;
public UInt32 InkEffectParameter; public Int32 InkEffectParameter;
public short Reserved; public Int16 Reserved;
public ObjectHeader(ByteReader reader) : base(reader){} public ObjectHeader(ByteReader reader) : base(reader){}
public ObjectHeader(Chunk chunk) : base(chunk){} public ObjectHeader(Chunk chunk) : base(chunk){}
@ -158,8 +160,14 @@ namespace CTFAK.MMFParser.EXE.Loaders
ObjectType = Reader.ReadInt16(); ObjectType = Reader.ReadInt16();
Flags = Reader.ReadUInt16(); Flags = Reader.ReadUInt16();
Reserved = Reader.ReadInt16(); Reserved = Reader.ReadInt16();
InkEffect = Reader.ReadByte(); InkEffect = (uint) Reader.ReadInt32();
InkEffectParameter = Reader.ReadByte(); Reader.Skip(3);
InkEffectParameter = Reader.ReadByte();
// if (InkEffect != 0) InkEffectParameter = 255;
} }
} }
} }

@ -134,104 +134,106 @@ namespace CTFAK.MMFParser.EXE.Loaders.Objects
else else
{ {
var currentPosition = Reader.Tell(); var currentPosition = Reader.Tell();
var size = Reader.ReadInt32(); var size = Reader.ReadInt32();
if (Settings.Build >= 284) if (Settings.Build >= 284)
{ {
_animationsOffset = Reader.ReadUInt16(); _animationsOffset = Reader.ReadUInt16();
_movementsOffset = Reader.ReadUInt16(); _movementsOffset = Reader.ReadUInt16();
} }
else else
{ {
_movementsOffset = Reader.ReadUInt16(); _movementsOffset = Reader.ReadUInt16();
_animationsOffset = Reader.ReadUInt16(); _animationsOffset = Reader.ReadUInt16();
} }
_zeroUnk = Reader.ReadUInt16();
if(_zeroUnk!=0) throw new NotImplementedException("Unknown value is not zero");
var version = Reader.ReadUInt16();
_extensionOffset = Reader.ReadUInt16();
_counterOffset = Reader.ReadUInt16();
Flags.flag = Reader.ReadUInt16();
var end = Reader.Tell()+(8+1)*2;
Reader.Skip(2);
for (int i = 0; i < 8; i++)
{
var value = Reader.ReadInt16();
_qualifiers[i]=value;
}
Reader.Seek(end);
_systemObjectOffset = Reader.ReadUInt16();
_valuesOffset = Reader.ReadUInt16();
_stringsOffset = Reader.ReadUInt16();
NewFlags.flag = Reader.ReadUInt16();
Preferences.flag = Reader.ReadUInt16();
Identifier = Reader.ReadInt32();
BackColor = Reader.ReadColor();
_fadeinOffset = Reader.ReadUInt32();
_fadeoutOffset = Reader.ReadUInt32();
if (_animationsOffset > 0)
{
Reader.Seek(currentPosition+_animationsOffset);
Animations=new Animations(Reader);
Animations.Read();
}
if (_movementsOffset > 0)
{
Reader.Seek(currentPosition+_movementsOffset);
Movements=new Movements(Reader);
Movements.Read();
}
if (_systemObjectOffset > 0) _zeroUnk = Reader.ReadUInt16();
{
Reader.Seek(currentPosition + _systemObjectOffset); if (_zeroUnk != 0) throw new NotImplementedException("Unknown value is not zero");
switch (Parent.ObjectType) var version = Reader.ReadUInt16();
_extensionOffset = Reader.ReadUInt16();
_counterOffset = Reader.ReadUInt16();
Flags.flag = Reader.ReadUInt16();
var end = Reader.Tell() + (8 + 1) * 2;
Reader.Skip(2);
for (int i = 0; i < 8; i++)
{ {
//Text var value = Reader.ReadInt16();
case Constants.ObjectType.Text: _qualifiers[i] = value;
Text = new Text(Reader); }
Text.Read();
break; Reader.Seek(end);
//Counter _systemObjectOffset = Reader.ReadUInt16();
case Constants.ObjectType.Counter:
Counters = new Counters(Reader);
Counters.Read();
break;
_valuesOffset = Reader.ReadUInt16();
_stringsOffset = Reader.ReadUInt16();
NewFlags.flag = Reader.ReadUInt16();
Preferences.flag = Reader.ReadUInt16();
Identifier = Reader.ReadInt32();
BackColor = Reader.ReadColor();
_fadeinOffset = Reader.ReadUInt32();
_fadeoutOffset = Reader.ReadUInt32();
if (_animationsOffset > 0)
{
Reader.Seek(currentPosition + _animationsOffset);
Animations = new Animations(Reader);
Animations.Read();
} }
}
if (_extensionOffset > 0) if (_movementsOffset > 0)
{
Reader.Seek(currentPosition + _extensionOffset);
var dataSize = Reader.ReadInt32() - 20;
Reader.Skip(4); //maxSize;
ExtensionVersion = Reader.ReadInt32();
ExtensionId = Reader.ReadInt32();
ExtensionPrivate = Reader.ReadInt32();
if (dataSize != 0)
{ {
ExtensionData = Reader.ReadBytes(dataSize); Reader.Seek(currentPosition + _movementsOffset);
Movements = new Movements(Reader);
Movements.Read();
}
if (_systemObjectOffset > 0)
{
Reader.Seek(currentPosition + _systemObjectOffset);
switch (Parent.ObjectType)
{
//Text
case Constants.ObjectType.Text:
Text = new Text(Reader);
Text.Read();
break;
//Counter
case Constants.ObjectType.Counter:
Counters = new Counters(Reader);
Counters.Read();
break;
}
}
if (_extensionOffset > 0)
{
Reader.Seek(currentPosition + _extensionOffset);
var dataSize = Reader.ReadInt32() - 20;
Reader.Skip(4); //maxSize;
ExtensionVersion = Reader.ReadInt32();
ExtensionId = Reader.ReadInt32();
ExtensionPrivate = Reader.ReadInt32();
if (dataSize != 0)
{
ExtensionData = Reader.ReadBytes(dataSize);
}
else ExtensionData = new byte[0];
Logger.Log($"{Parent.Name} - {ExtensionId}");
}
if (_counterOffset > 0)
{
Reader.Seek(currentPosition + _counterOffset);
Counter = new Counter(Reader);
Counter.Read();
} }
else ExtensionData=new byte[0];
Logger.Log($"{Parent.Name} - {ExtensionId}");
}
if (_counterOffset > 0)
{
Reader.Seek(currentPosition+_counterOffset);
Counter = new Counter(Reader);
Counter.Read();
}
} }
// Logger.Log("anims: "+_animationsOffset); // Logger.Log("anims: "+_animationsOffset);
// Logger.Log("fadeIn: "+_fadeinOffset); // Logger.Log("fadeIn: "+_fadeinOffset);
// Logger.Log("fadeOut: "+_fadeoutOffset); // Logger.Log("fadeOut: "+_fadeoutOffset);

@ -36,6 +36,7 @@ namespace CTFAK.MMFParser.EXE.Loaders
ModuleFile = Reader.ReadAscii(); ModuleFile = Reader.ReadAscii();
Reader.Seek(currentPos+parameterOffset); Reader.Seek(currentPos+parameterOffset);
ParameterData = Reader.ReadBytes(parameterSize); ParameterData = Reader.ReadBytes(parameterSize);
} }

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Drawing; using System.Drawing;
using System.Drawing.Imaging; using System.Drawing.Imaging;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Web.UI.WebControls;
using CTFAK.Utils; using CTFAK.Utils;
using static CTFAK.MMFParser.EXE.ChunkList; using static CTFAK.MMFParser.EXE.ChunkList;
@ -10,7 +11,7 @@ namespace CTFAK.MMFParser.EXE.Loaders
{ {
public class AppIcon : ChunkLoader public class AppIcon : ChunkLoader
{ {
List<byte> _points; byte[] _points;
public AppIcon(ByteReader reader) : base(reader) public AppIcon(ByteReader reader) : base(reader)
@ -23,53 +24,54 @@ namespace CTFAK.MMFParser.EXE.Loaders
public override void Read() public override void Read()
{ {
return;
Reader.ReadBytes(Reader.ReadInt32() - 4); Reader.ReadBytes(Reader.ReadInt32() - 4);
List<byte> colorIndexes = new List<byte>(); List<byte> colorIndexes = new List<byte>();
for (int i = 0; i < 16 * 16; i++) for (int i = 0; i < 16 * 16; i++)
{ {
var r = Reader.ReadSByte();
var g = Reader.ReadSByte();
var b = Reader.ReadSByte(); var b = Reader.ReadSByte();
var g = Reader.ReadSByte();
var r = Reader.ReadSByte();
Reader.ReadByte(); Reader.ReadByte();
colorIndexes.Add((byte) r); colorIndexes.Add((byte) r);
colorIndexes.Add((byte) g); colorIndexes.Add((byte) g);
colorIndexes.Add((byte) b); colorIndexes.Add((byte) b);
} }
_points = new List<byte>(); var bitmap = new Bitmap(16, 16);
for (int y = 0; y < 16; y++) for (int y = 0; y < 16; y++)
{ {
var xList = new List<byte>(); var xList = new List<byte>();
for (int x = 0; x < 16; x++) for (int x = 0; x < 16; x++)
{ {
xList.Add(colorIndexes[Reader.ReadByte()]); var value = Reader.ReadByte();
bitmap.SetPixel(x, (16 - 1) - y,Color.Brown);
} }
xList.AddRange(_points);
_points = xList;
} }
bitmap.Save("penis.png");
List<byte> alpha = new List<byte>();
for (int i = 0; i < 16*16/8; i++) for (int i = 0; i < 16*16/8; i++)
{ {
List<bool> newAlphas = new List<bool>();
} var val = Reader.ReadByte();
using (var bmp = new Bitmap(16, 16, PixelFormat.Format32bppArgb)) for (int j = 0; j < 8; j++)
{ {
BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0,
bmp.Width, newAlphas.Add(ByteFlag.GetFlag(val,i));
bmp.Height), }
ImageLockMode.WriteOnly,
bmp.PixelFormat);
IntPtr pNative = bmpData.Scan0;
Marshal.Copy(_points.ToArray(), 0, pNative, _points.Count);
bmp.UnlockBits(bmpData);
bmp.Save("icon.png"); foreach (bool b in newAlphas)
{
if (b) _points[i + 3] = 0;
else _points[i + 3] = 255;
}
} }
} }

@ -1,5 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Drawing;
using System.IO; using System.IO;
using System.Windows.Forms; using System.Windows.Forms;
using System.Windows.Forms.VisualStyles; using System.Windows.Forms.VisualStyles;
@ -14,7 +15,7 @@ namespace CTFAK.MMFParser.MFA.Loaders
public List<MFAChunk> Items = new List<MFAChunk>(); public List<MFAChunk> Items = new List<MFAChunk>();
public bool Log=false; public bool Log=false;
public T GetChunk<T>() where T : MFAChunkLoader public T GetOrCreateChunk<T>() where T : MFAChunkLoader, new()
{ {
foreach (MFAChunk chunk in Items) foreach (MFAChunk chunk in Items)
{ {
@ -23,7 +24,11 @@ namespace CTFAK.MMFParser.MFA.Loaders
return (T) chunk.Loader; return (T) chunk.Loader;
} }
} }
return null; var newChunk = new MFAChunk(null);
newChunk.Id=45;
newChunk.Loader = new T();
Items.Add(newChunk);
return (T) newChunk.Loader;
} }
public bool ContainsChunk<T>() where T : MFAChunkLoader public bool ContainsChunk<T>() where T : MFAChunkLoader
@ -104,15 +109,13 @@ namespace CTFAK.MMFParser.MFA.Loaders
var size = Reader.ReadInt32(); var size = Reader.ReadInt32();
Data = Reader.ReadBytes(size); Data = Reader.ReadBytes(size);
var dataReader = new ByteReader(Data); var dataReader = new ByteReader(Data);
/*switch (Id) switch (Id)
{ {
case 33: case 33:
Loader = new FrameVirtualRect(dataReader); Loader = new FrameVirtualRect(dataReader);
break; break;
case 56:
Loader=new GlobalObject(dataReader); case 45:
break;
case 72:
Loader = new Opacity(dataReader); Loader = new Opacity(dataReader);
break; break;
default: default:
@ -120,7 +123,7 @@ namespace CTFAK.MMFParser.MFA.Loaders
// Logger.Log($"{Id} - {Data.GetHex()}"); // Logger.Log($"{Id} - {Data.GetHex()}");
break; break;
}*/ }
Loader?.Read(); Loader?.Read();
@ -151,19 +154,35 @@ namespace CTFAK.MMFParser.MFA.Loaders
public class Opacity : MFAChunkLoader public class Opacity : MFAChunkLoader
{ {
public int Value; public Color RGBCoeff;
public byte Blend;
public Opacity(ByteReader dataReader) : base(dataReader){} public Opacity(ByteReader dataReader) : base(dataReader){}
public Opacity() : base()
{
}
public override void Read() public override void Read()
{ {
Value = Reader.ReadInt32(); var b = Reader.ReadByte();
var g = Reader.ReadByte();
var r = Reader.ReadByte();
Blend = Reader.ReadByte();
RGBCoeff = Color.FromArgb(Blend,r,g,b);
var unk = Reader.ReadInt32();
} }
public override void Write(ByteWriter Writer) public override void Write(ByteWriter Writer)
{ {
Writer.WriteInt32(Value); Writer.WriteInt8(RGBCoeff.B);
Writer.WriteInt8(RGBCoeff.G);
Writer.WriteInt8(RGBCoeff.R);
Writer.WriteInt8(Blend);
Writer.WriteInt32(0);
} }
} }
@ -191,30 +210,6 @@ namespace CTFAK.MMFParser.MFA.Loaders
Writer.WriteInt32(Bottom); Writer.WriteInt32(Bottom);
} }
} }
public class GlobalObject:MFAChunkLoader
{
public byte[] Value;
public GlobalObject(ByteReader reader) : base(reader)
{
}
public override void Read()
{
Value = Reader.ReadBytes(12);
for(int i=0;i<Value.Length;i++)
{
Value[i] = 0;
}
}
public override void Write(ByteWriter Writer)
{
Writer.WriteBytes(Value);
}
}
public abstract class MFAChunkLoader public abstract class MFAChunkLoader
{ {
public ByteReader Reader; public ByteReader Reader;
@ -222,6 +217,10 @@ namespace CTFAK.MMFParser.MFA.Loaders
{ {
Reader = reader; Reader = reader;
} }
protected MFAChunkLoader(){}
public abstract void Read(); public abstract void Read();
public abstract void Write(ByteWriter Writer); public abstract void Write(ByteWriter Writer);
} }

@ -158,7 +158,7 @@ namespace CTFAK.MMFParser.MFA.Loaders
} }
else if (name == EditorPositionData) else if (name == EditorPositionData)
{ {
if(Reader.ReadUInt16()!=1)throw new NotImplementedException("Invalid chunkversion"); if(Reader.ReadUInt16()!=1)//throw new NotImplementedException("Invalid chunkversion");
X = Reader.ReadUInt32(); X = Reader.ReadUInt32();
Y = Reader.ReadUInt32(); Y = Reader.ReadUInt32();
CaretType = Reader.ReadUInt32(); CaretType = Reader.ReadUInt32();
@ -167,7 +167,7 @@ namespace CTFAK.MMFParser.MFA.Loaders
} }
else if (name == EditorLineData) else if (name == EditorLineData)
{ {
if(Reader.ReadUInt16()!=1)throw new NotImplementedException("Invalid chunkversion"); if(Reader.ReadUInt16()!=1)//throw new NotImplementedException("Invalid chunkversion");
LineY = Reader.ReadUInt32(); LineY = Reader.ReadUInt32();
LineItemType = Reader.ReadUInt32(); LineItemType = Reader.ReadUInt32();
EventLine = Reader.ReadUInt32(); EventLine = Reader.ReadUInt32();
@ -258,7 +258,7 @@ namespace CTFAK.MMFParser.MFA.Loaders
// if (X != 0) // if (X != 0)
{ {
Writer.WriteAscii(EditorPositionData); Writer.WriteAscii(EditorPositionData);
Writer.WriteInt16(1); Writer.WriteInt16(10);
Writer.WriteInt32((int) X); Writer.WriteInt32((int) X);
Writer.WriteInt32((int) Y); Writer.WriteInt32((int) Y);
Writer.WriteUInt32(CaretType); Writer.WriteUInt32(CaretType);
@ -268,7 +268,7 @@ namespace CTFAK.MMFParser.MFA.Loaders
// if (LineY != 0) // if (LineY != 0)
{ {
Writer.WriteAscii(EditorLineData); Writer.WriteAscii(EditorLineData);
Writer.WriteInt16(1); Writer.WriteInt16(10);
Writer.WriteUInt32(LineY); Writer.WriteUInt32(LineY);
Writer.WriteUInt32(LineItemType); Writer.WriteUInt32(LineItemType);
Writer.WriteUInt32(EventLine); Writer.WriteUInt32(EventLine);

@ -24,22 +24,6 @@ namespace CTFAK.MMFParser.MFA.Loaders
} }
); );
public Color RGBCoeff=Color.White;
public uint Unk1;
public uint Unk2;
public uint Unk3;
public byte Unk4;
public byte Unk5;
public byte Unk6;
public byte Unk7;
public byte Unk8;
public byte Unk9;
public byte Unk10;
public byte Unk11;
public byte Unk12;
public override void Write(ByteWriter Writer) public override void Write(ByteWriter Writer)
{ {
Writer.AutoWriteUnicode(Name); Writer.AutoWriteUnicode(Name);

@ -33,7 +33,7 @@ namespace CTFAK.MMFParser.MFA.Loaders
Flags = Reader.ReadInt32(); Flags = Reader.ReadInt32();
Color = Reader.ReadColor(); Color = Reader.ReadColor();
ParameterData = Reader.ReadBytes(Reader.ReadInt32()); ParameterData = Reader.ReadBytes(Reader.ReadInt32());
} }
public override void Write(ByteWriter Writer) public override void Write(ByteWriter Writer)

@ -23,7 +23,9 @@ namespace CTFAK.MMFParser.MFA.Loaders.mfachunks
// if(Qualifiers==null) throw new NullReferenceException("QUALIFIERS NULL"); // if(Qualifiers==null) throw new NullReferenceException("QUALIFIERS NULL");
Writer.WriteInt32((int) ObjectFlags); Writer.WriteInt32((int) ObjectFlags);
Writer.WriteInt32(NewObjectFlags); Writer.WriteInt32(NewObjectFlags);
// var col = Color.FromArgb(255,BackgroundColor.R,BackgroundColor.G,BackgroundColor.B);
Writer.WriteColor(BackgroundColor); Writer.WriteColor(BackgroundColor);
for (int i = 0; i < 8; i++) for (int i = 0; i < 8; i++)
{ {

@ -43,7 +43,6 @@ namespace CTFAK.MMFParser.Translation
mfa.Description = ""; mfa.Description = "";
mfa.Path = game.EditorFilename; mfa.Path = game.EditorFilename;
//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.Items.Clear();
if (game.Sounds != null) if (game.Sounds != null)
@ -74,10 +73,25 @@ namespace CTFAK.MMFParser.Translation
var flags = game.Header.Flags; var flags = game.Header.Flags;
var newFlags = game.Header.NewFlags; var newFlags = game.Header.NewFlags;
mfa.Extensions.Clear(); mfa.Extensions.Clear();
displaySettings["MDI"] = newFlags["MDI"];
displaySettings["MaximizedOnBoot"] = flags["Maximize"];
displaySettings["ResizeDisplay"] = flags["MDI"];
displaySettings["FullscreenAtStart"] = flags["FullscreenAtStart"];
displaySettings["AllowFullscreen"] = flags["FullscreenSwitch"];
displaySettings["Heading"] = !flags["NoHeading"];
displaySettings["HeadingWhenMaximized"] = true;
displaySettings["MenuBar"] = flags["MenuBar"]; displaySettings["MenuBar"] = flags["MenuBar"];
displaySettings["MenuOnBoot"] = !flags["MenuHidden"]; displaySettings["MenuOnBoot"] = !flags["MenuHidden"];
graphicSettings["MultiSamples"] = flags["MultiSamples"]; displaySettings["NoMinimize"] = newFlags["NoMinimizeBox"];
displaySettings["NoMaximize"] = newFlags["NoMaximizeBox"];
displaySettings["NoThickFrame"] = newFlags["NoThickFrame"];
// displaySettings["NoCenter"] = flags["MDI"];
displaySettings["DisableClose"] = newFlags["DisableClose"];
displaySettings["HiddenAtStart"] = newFlags["HiddenAtStart"];
displaySettings["MDI"] = newFlags["MDI"];
mfa.GraphicFlags = graphicSettings;
mfa.DisplayFlags = displaySettings; mfa.DisplayFlags = displaySettings;
mfa.WindowX = game.Header.WindowWidth; mfa.WindowX = game.Header.WindowWidth;
mfa.WindowY = game.Header.WindowHeight; mfa.WindowY = game.Header.WindowHeight;
@ -135,8 +149,8 @@ namespace CTFAK.MMFParser.Translation
newFrame.SizeY = frame.Height; newFrame.SizeY = frame.Height;
newFrame.Background = frame.Background; newFrame.Background = frame.Background;
newFrame.FadeIn = null; newFrame.FadeIn = frame.FadeIn!=null ? ConvertTransition(frame.FadeIn):null;
newFrame.FadeOut = null; newFrame.FadeOut = frame.FadeOut!=null ? ConvertTransition(frame.FadeOut):null;
var mfaFlags = newFrame.Flags; var mfaFlags = newFrame.Flags;
var originalFlags = frame.Flags; var originalFlags = frame.Flags;
@ -184,7 +198,6 @@ namespace CTFAK.MMFParser.Translation
for (int i = 0; i < frame.Objects.Count; i++) for (int i = 0; i < frame.Objects.Count; i++)
{ {
var instance = frame.Objects[i]; var instance = frame.Objects[i];
FrameItem frameItem; FrameItem frameItem;
@ -203,6 +216,10 @@ namespace CTFAK.MMFParser.Translation
newInstance.Layer = (uint) (instance.Layer); newInstance.Layer = (uint) (instance.Layer);
newInstances.Add(newInstance); newInstances.Add(newInstance);
} }
else
{
throw new NullReferenceException("Object");
}
} }
} }
@ -272,15 +289,17 @@ namespace CTFAK.MMFParser.Translation
public static MFA.Loaders.Transition ConvertTransition(EXE.Loaders.Transition gameTrans) public static MFA.Loaders.Transition ConvertTransition(EXE.Loaders.Transition gameTrans)
{ {
var mfaTrans = new MFA.Loaders.Transition((ByteReader) null); var mfaTrans = new MFA.Loaders.Transition((ByteReader) null)
mfaTrans.Module = gameTrans.ModuleFile; {
mfaTrans.Name = gameTrans.Name.FirstCharToUpper(); Module = "cctrans.dll",//gameTrans.ModuleFile,
mfaTrans.Id = gameTrans.Module; Name = "Transition",
mfaTrans.TransitionId = gameTrans.Name; Id = gameTrans.Module,
mfaTrans.Flags = gameTrans.Flags; TransitionId = gameTrans.Name,
mfaTrans.Color = gameTrans.Color; Flags = gameTrans.Flags,
mfaTrans.ParameterData = gameTrans.ParameterData; Color = gameTrans.Color,
mfaTrans.Duration = gameTrans.Duration; ParameterData = gameTrans.ParameterData,
Duration = gameTrans.Duration
};
return mfaTrans; return mfaTrans;
} }
@ -330,17 +349,20 @@ namespace CTFAK.MMFParser.Translation
public static FrameItem TranslateObject(ObjectInfo item) public static FrameItem TranslateObject(ObjectInfo item)
{ {
var newItem = new FrameItem(null); var newItem = new FrameItem(null);
newItem.Chunks = new ChunkList(null);
newItem.Name = item.Name; newItem.Name = item.Name;
newItem.ObjectType = (int)item.ObjectType; newItem.ObjectType = (int)item.ObjectType;
newItem.Handle = item.Handle; newItem.Handle = item.Handle;
newItem.Transparent = 1; newItem.Transparent = 1;
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 = item.Flags; newItem.Flags = item.Flags;
newItem.Chunks.GetOrCreateChunk<Opacity>().Blend = (byte) item.InkEffectValue;
newItem.Chunks.GetOrCreateChunk<Opacity>().RGBCoeff = Color.White;
newItem.IconHandle = 12; newItem.IconHandle = 12;
newItem.Chunks = MFA.MFA.defaultObjChunks;
if (item.ObjectType == 0) if (item.ObjectType == 0)
{ {
@ -376,9 +398,9 @@ namespace CTFAK.MMFParser.Translation
Logger.Log(("Translating Object: " + itemLoader.Parent.Name),false,ConsoleColor.Blue,false); Logger.Log(("Translating Object: " + itemLoader.Parent.Name),false,ConsoleColor.Blue,false);
//CommonSection //CommonSection
var newObject = new ObjectLoader(null); var newObject = new ObjectLoader(null);
newObject.ObjectFlags = (int) (itemLoader.Flags.flag); newObject.ObjectFlags = (int) (itemLoader.Flags.flag);
newObject.NewObjectFlags = (int) (itemLoader.NewFlags.flag); newObject.NewObjectFlags = (int) (itemLoader.NewFlags.flag);
newObject.BackgroundColor = itemLoader.BackColor; newObject.BackgroundColor = itemLoader.BackColor;
newObject.Qualifiers = itemLoader._qualifiers; newObject.Qualifiers = itemLoader._qualifiers;
@ -431,10 +453,11 @@ namespace CTFAK.MMFParser.Translation
var newDirections = new List<AnimationDirection>(); var newDirections = new List<AnimationDirection>();
EXE.Loaders.Objects.Animation animation = null; EXE.Loaders.Objects.Animation animation = null;
if (animHeader.AnimationDict.ContainsKey(origAnim.Key)) if (animHeader.AnimationDict.ContainsKey(origAnim.Key))
{ {
animation = animHeader?.AnimationDict[origAnim.Key]; animation = animHeader?.AnimationDict[origAnim.Key];
} }
else break; else break;
if (animation != null) if (animation != null)
{ {
if (animation.DirectionDict != null) if (animation.DirectionDict != null)

@ -9,6 +9,7 @@ using System.Web.Caching;
using System.Windows.Forms; using System.Windows.Forms;
using CTFAK.GUI; using CTFAK.GUI;
using CTFAK.MMFParser.EXE; using CTFAK.MMFParser.EXE;
using CTFAK.MMFParser.EXE.Loaders.Banks;
using CTFAK.MMFParser.Translation; using CTFAK.MMFParser.Translation;
using CTFAK.Utils; using CTFAK.Utils;
using Joveler.Compression.ZLib; using Joveler.Compression.ZLib;
@ -52,6 +53,7 @@ namespace CTFAK
if (args.Length > 0) if (args.Length > 0)
{ {
ImageBank.Load = false;
if (args[0].EndsWith(".exe")) if (args[0].EndsWith(".exe"))
{ {
ReadFile(args[0],true,false,true); ReadFile(args[0],true,false,true);

@ -18,7 +18,7 @@ namespace CTFAK.Utils
colorArray[(y * stride) + (x * 4) + 1] = data[position + 1]; colorArray[(y * stride) + (x * 4) + 1] = data[position + 1];
colorArray[(y * stride) + (x * 4) + 2] = data[position + 2]; colorArray[(y * stride) + (x * 4) + 2] = data[position + 2];
colorArray[(y * stride) + (x * 4) + 3] = 255; colorArray[(y * stride) + (x * 4) + 3] = 255;
position += 3; position += 3;
} }
position += pad * 3; position += pad * 3;

Loading…
Cancel
Save