MMF2 Support(beta)

master
1987kostya 4 years ago
parent 0bc8e226d7
commit b38d149d6f

@ -297,6 +297,9 @@ namespace CTFAK.MMFParser.EXE
case 13117: case 13117:
loader = new Events(chunk); loader = new Events(chunk);
break; break;
case 13127:
loader= new MovementTimerBase(chunk);
break;
} }
loader?.Read(); loader?.Read();

@ -149,7 +149,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks
Handle = Reader.ReadInt32(); Handle = Reader.ReadInt32();
if (!Debug) if (!Debug)
{ {
if (Settings.Build>288) Handle -= 1; // if (Settings.Build>288) 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;
} }
@ -330,7 +330,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks
} }
} }
} }
else if (_transparent != null) /*else if (_transparent != null)
{ {
for (int i = 0; i < (_height * _width * 4)-3; i++) for (int i = 0; i < (_height * _width * 4)-3; i++)
{ {
@ -339,7 +339,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks
_colorArray[i] = _transparent.A; _colorArray[i] = _transparent.A;
} }
} }
} }*/
return; return;
} }

@ -56,6 +56,7 @@ namespace CTFAK.MMFParser.EXE.Loaders
private Transition _fadeIn; private Transition _fadeIn;
private Transition _fadeOut; private Transition _fadeOut;
private VirtualRect _virtualSize; private VirtualRect _virtualSize;
private MovementTimerBase _movementTimer;
public override void Print(bool ext) public override void Print(bool ext)
@ -93,6 +94,7 @@ namespace CTFAK.MMFParser.EXE.Loaders
_layers = Chunks.GetChunk<Layers>(); _layers = Chunks.GetChunk<Layers>();
_objects = Chunks.GetChunk<ObjectInstances>(); _objects = Chunks.GetChunk<ObjectInstances>();
_events = Chunks.GetChunk<Events.Events>(); _events = Chunks.GetChunk<Events.Events>();
_movementTimer = Chunks.GetChunk<MovementTimerBase>();
_fadeIn = Chunks.PopChunk<Transition>(); _fadeIn = Chunks.PopChunk<Transition>();
_fadeOut = Chunks.PopChunk<Transition>(); _fadeOut = Chunks.PopChunk<Transition>();
@ -106,6 +108,7 @@ namespace CTFAK.MMFParser.EXE.Loaders
public int Height => _header.Height; public int Height => _header.Height;
public int VirtWidth => _virtualSize.Right; public int VirtWidth => _virtualSize.Right;
public int VirtHeight => _virtualSize.Bottom; public int VirtHeight => _virtualSize.Bottom;
public int MovementTimer => _movementTimer.Value;
public string Name => _name?.Value ?? "UNK"; public string Name => _name?.Value ?? "UNK";
public string Password => _password.Value; public string Password => _password.Value;
public Color Background => _header.Background; public Color Background => _header.Background;
@ -355,7 +358,7 @@ namespace CTFAK.MMFParser.EXE.Loaders
YCoeff = Reader.ReadSingle(); YCoeff = Reader.ReadSingle();
NumberOfBackgrounds = Reader.ReadInt32(); NumberOfBackgrounds = Reader.ReadInt32();
BackgroudIndex = Reader.ReadInt32(); BackgroudIndex = Reader.ReadInt32();
Name = Reader.ReadWideString(); Name = Reader.ReadUniversal();
} }
public override void Print(bool ext) public override void Print(bool ext)
@ -398,4 +401,31 @@ namespace CTFAK.MMFParser.EXE.Loaders
public VirtualRect(ByteReader reader) : base(reader){} public VirtualRect(ByteReader reader) : base(reader){}
public VirtualRect(ChunkList.Chunk chunk) : base(chunk){} public VirtualRect(ChunkList.Chunk chunk) : base(chunk){}
} }
public class MovementTimerBase:ChunkLoader
{
public int Value;
public MovementTimerBase(ByteReader reader) : base(reader)
{
}
public MovementTimerBase(ChunkList.Chunk chunk) : base(chunk)
{
}
public override void Read()
{
Value = Reader.ReadInt32();
}
public override void Print(bool ext)
{
throw new NotImplementedException();
}
public override string[] GetReadableData()
{
throw new NotImplementedException();
}
}
} }

@ -90,6 +90,10 @@ namespace CTFAK.MMFParser.EXE.Loaders.Objects
dir.Read(); dir.Read();
DirectionDict.Add(i,dir); DirectionDict.Add(i,dir);
} }
else
{
DirectionDict.Add(i,new AnimationDirection((ByteReader) null));
}
} }
} }

@ -12,7 +12,8 @@ namespace CTFAK.MMFParser.EXE.Loaders
public override void Read() public override void Read()
{ {
Reader = new ByteReader(Chunk.ChunkData); Reader = new ByteReader(Chunk.ChunkData);
Value = Reader.ReadWideString(); Value = Reader.ReadUniversal();
Print(true);
} }
public override void Print(bool ext) public override void Print(bool ext)

@ -1,5 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics;
using System.IO; using System.IO;
using CTFAK.Utils; using CTFAK.Utils;
@ -17,16 +18,18 @@ namespace CTFAK.MMFParser.EXE
long start = exeReader.Tell(); long start = exeReader.Tell();
byte[] header = exeReader.ReadBytes(8); byte[] header = exeReader.ReadBytes(8);
exeReader.Skip(8); // exeReader.Skip(8);
uint headerSize = exeReader.ReadUInt32(); uint headerSize = exeReader.ReadUInt32();
Debug.Assert(headerSize==32);
uint dataSize = exeReader.ReadUInt32(); uint dataSize = exeReader.ReadUInt32();
exeReader.Seek((int)(start + dataSize - 32)); exeReader.Seek((int)(start + dataSize - 32));
exeReader.Skip(4); Logger.Log(exeReader.ReadAscii(4));
exeReader.Seek(start + 16); exeReader.Seek(start + 16);
uint formatVersion = exeReader.ReadUInt32(); uint formatVersion = exeReader.ReadUInt32();
exeReader.Skip(8); Debug.Assert(exeReader.ReadInt32()==0);
Debug.Assert(exeReader.ReadInt32()==0);
uint count = exeReader.ReadUInt32(); uint count = exeReader.ReadUInt32();
@ -44,7 +47,8 @@ namespace CTFAK.MMFParser.EXE
} }
header = exeReader.ReadFourCc(); header = exeReader.ReadFourCc();
Logger.Log(header.GetHex(4));
Logger.Log("PACK OFFSET: "+offset);
exeReader.Seek(offset); exeReader.Seek(offset);
for (int i = 0; i < count; i++) for (int i = 0; i < count; i++)
{ {
@ -68,7 +72,10 @@ namespace CTFAK.MMFParser.EXE
public void Read(ByteReader exeReader) public void Read(ByteReader exeReader)
{ {
UInt16 len = exeReader.ReadUInt16(); UInt16 len = exeReader.ReadUInt16();
PackFilename = exeReader.ReadWideString(len); PackFilename = exeReader.ReadUniversal(len);
Logger.Log(PackFilename);
_bingo = exeReader.ReadInt32(); _bingo = exeReader.ReadInt32();
Data = exeReader.ReadBytes(exeReader.ReadInt32()); Data = exeReader.ReadBytes(exeReader.ReadInt32());

@ -406,19 +406,11 @@ namespace CTFAK.MMFParser.Translation
newAnimation.Name = $"User Defined {j}"; newAnimation.Name = $"User Defined {j}";
var newDirections = new List<AnimationDirection>(); var newDirections = new List<AnimationDirection>();
EXE.Loaders.Objects.Animation animation = null; EXE.Loaders.Objects.Animation animation = null;
try
{
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;
}
catch
{
}
if (animation != null) if (animation != null)
{ {
if (animation.DirectionDict != null) if (animation.DirectionDict != null)

@ -32,6 +32,7 @@ namespace CTFAK
public static string ProjectPath; public static string ProjectPath;
public static int Build; public static int Build;
public static bool Unicode;
public static bool DoMFA; public static bool DoMFA;
public static bool UseGUI; public static bool UseGUI;

@ -124,6 +124,12 @@ namespace CTFAK.Utils
return str; return str;
} }
public string ReadUniversal(int len=-1)
{
if (Settings.Unicode) return ReadWideString(len);
else return ReadAscii(len);
}
public Color ReadColor() public Color ReadColor()
{ {

Loading…
Cancel
Save