MMF2 Support(beta)

master
1987kostya 4 years ago
parent 0bc8e226d7
commit b38d149d6f

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

@ -149,7 +149,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks
Handle = Reader.ReadInt32();
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;
}
@ -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++)
{
@ -339,7 +339,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks
_colorArray[i] = _transparent.A;
}
}
}
}*/
return;
}

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

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

@ -406,19 +406,11 @@ namespace CTFAK.MMFParser.Translation
newAnimation.Name = $"User Defined {j}";
var newDirections = new List<AnimationDirection>();
EXE.Loaders.Objects.Animation animation = null;
try
{
if (animHeader.AnimationDict.ContainsKey(origAnim.Key))
{
animation = animHeader?.AnimationDict[origAnim.Key];
}
else break;
}
catch
{
}
if (animation != null)
{
if (animation.DirectionDict != null)

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

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

Loading…
Cancel
Save