Direction fix, new dump folder structure

master
1987kostya 4 years ago
parent 702edad4ad
commit a62f97ce21

@ -283,7 +283,7 @@ namespace CTFAK.MMFParser.EXE
loader = new ObjectProperties(chunk); loader = new ObjectProperties(chunk);
return loader; return loader;
case 8788: case 8788:
//loader = new ObjectNames(chunk); // loader = new ObjectNames(chunk);
break; break;
case 8754: case 8754:
loader = new GlobalValues(chunk); loader = new GlobalValues(chunk);

@ -4,12 +4,12 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters
{ {
class Int : Short class Int : Short
{ {
public int Value;
public Int(ByteReader reader) : base(reader) { } public Int(ByteReader reader) : base(reader) { }
public override void Read() public override void Read()
{ {
Value = (short)Reader.ReadInt32(); Value = Reader.ReadInt32();
} }
public override void Write(ByteWriter Writer) public override void Write(ByteWriter Writer)

@ -5,12 +5,12 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters
public class Position : ParameterCommon public class Position : ParameterCommon
{ {
public int ObjectInfoParent; public int ObjectInfoParent;
public ushort Flags; public short Flags;
public int X; public int X;
public int Y; public int Y;
public int Slope; public int Slope;
public int Angle; public int Angle;
public float Direction; public int Direction;
public int TypeParent; public int TypeParent;
public int ObjectInfoList; public int ObjectInfoList;
public int Layer; public int Layer;
@ -19,12 +19,12 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters
public override void Read() public override void Read()
{ {
ObjectInfoParent = Reader.ReadInt16(); ObjectInfoParent = Reader.ReadInt16();
Flags = Reader.ReadUInt16(); Flags = Reader.ReadInt16();
X = Reader.ReadInt16(); X = Reader.ReadInt16();
Y = Reader.ReadInt16(); Y = Reader.ReadInt16();
Slope = Reader.ReadInt16(); Slope = Reader.ReadInt16();
Angle = Reader.ReadInt16(); Angle = Reader.ReadInt16();
Direction = Reader.ReadSingle(); Direction = Reader.ReadInt32();
TypeParent = Reader.ReadInt16(); TypeParent = Reader.ReadInt16();
ObjectInfoList = Reader.ReadInt16(); ObjectInfoList = Reader.ReadInt16();
Layer = Reader.ReadInt16(); Layer = Reader.ReadInt16();
@ -33,12 +33,12 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters
public override void Write(ByteWriter Writer) public override void Write(ByteWriter Writer)
{ {
Writer.WriteInt16((short) ObjectInfoParent); Writer.WriteInt16((short) ObjectInfoParent);
Writer.WriteUInt16(Flags); Writer.WriteInt16(Flags);
Writer.WriteInt16((short) X); Writer.WriteInt16((short) X);
Writer.WriteInt16((short) Y); Writer.WriteInt16((short) Y);
Writer.WriteInt16((short) Slope); Writer.WriteInt16((short) Slope);
Writer.WriteInt16((short) Angle); Writer.WriteInt16((short) Angle);
Writer.WriteSingle(Direction); Writer.WriteInt32(Direction);
Writer.WriteInt16((short) TypeParent); Writer.WriteInt16((short) TypeParent);
Writer.WriteInt16((short) ObjectInfoList); Writer.WriteInt16((short) ObjectInfoList);
Writer.WriteInt16((short) Layer); Writer.WriteInt16((short) Layer);

@ -39,8 +39,13 @@ namespace CTFAK.MMFParser.EXE.Loaders
_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);
if (Settings.Build > 284)
Logger.Log($"{Name}: {InkEffect}-{InkEffectValue}"); {
}
else
{
// if(InkEffectValue==0) _header.InkEffectParameter = 255;
}
} }
public int Handle => _header.Handle; public int Handle => _header.Handle;
@ -50,7 +55,7 @@ namespace CTFAK.MMFParser.EXE.Loaders
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&0xffff; public int InkEffect => (int) _header.InkEffect&0xffff;
public int InkEffectValue => (int) _header.InkEffectParameter; public byte InkEffectValue => (byte) _header.InkEffectParameter;
public bool Transparent => ByteFlag.GetFlag((uint) _header.InkEffect, 28); public bool Transparent => ByteFlag.GetFlag((uint) _header.InkEffect, 28);
public bool Antialias => ByteFlag.GetFlag((uint) _header.InkEffect, 29); public bool Antialias => ByteFlag.GetFlag((uint) _header.InkEffect, 29);
@ -146,7 +151,7 @@ namespace CTFAK.MMFParser.EXE.Loaders
public Int16 ObjectType; public Int16 ObjectType;
public UInt32 Flags; public UInt32 Flags;
public UInt32 InkEffect; public UInt32 InkEffect;
public Int32 InkEffectParameter; public byte InkEffectParameter;
public Int16 Reserved; public Int16 Reserved;
public ObjectHeader(ByteReader reader) : base(reader){} public ObjectHeader(ByteReader reader) : base(reader){}
@ -160,9 +165,9 @@ namespace CTFAK.MMFParser.EXE.Loaders
ObjectType = Reader.ReadInt16(); ObjectType = Reader.ReadInt16();
Flags = Reader.ReadUInt16(); Flags = Reader.ReadUInt16();
Reserved = Reader.ReadInt16(); Reserved = Reader.ReadInt16();
InkEffect = (uint) Reader.ReadInt32(); InkEffect = (uint) Reader.ReadUInt32();
Reader.Skip(3); // Reader.Skip(3);
InkEffectParameter = Reader.ReadByte(); InkEffectParameter =(byte) Reader.ReadInt32();
// if (InkEffect != 0) InkEffectParameter = 255; // if (InkEffect != 0) InkEffectParameter = 255;

@ -135,26 +135,80 @@ namespace CTFAK.MMFParser.EXE.Loaders.Objects
{ {
var currentPosition = Reader.Tell(); var currentPosition = Reader.Tell();
var size = Reader.ReadInt32(); var size = Reader.ReadInt32();
if (Settings.Build >= 284) if (Settings.Build >= 284&&true)
{ {
_animationsOffset = Reader.ReadUInt16(); _animationsOffset = Reader.ReadUInt16();
_movementsOffset = Reader.ReadUInt16(); _movementsOffset = Reader.ReadUInt16();
_zeroUnk = Reader.ReadUInt16();
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;
} }
else
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();
}
else if (Settings.Build>=284)
{ {
_counterOffset = Reader.ReadUInt16();
var version = Reader.ReadUInt16();
_zeroUnk = Reader.ReadUInt16();
_movementsOffset = Reader.ReadUInt16(); _movementsOffset = Reader.ReadUInt16();
_extensionOffset = Reader.ReadUInt16();
_animationsOffset = Reader.ReadUInt16(); _animationsOffset = 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;
} }
_zeroUnk = Reader.ReadUInt16(); Reader.Seek(end);
_systemObjectOffset = Reader.ReadUInt16();
if (_zeroUnk != 0) throw new NotImplementedException("Unknown value is not zero"); _valuesOffset = Reader.ReadUInt16();
var version = 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();
_extensionOffset = Reader.ReadUInt16(); }
else
{
_movementsOffset = Reader.ReadUInt16();
_animationsOffset = Reader.ReadUInt16();
var version = Reader.ReadUInt16();
_counterOffset = Reader.ReadUInt16(); _counterOffset = Reader.ReadUInt16();
_systemObjectOffset = Reader.ReadUInt16();
_zeroUnk = Reader.ReadUInt16();
Flags.flag = Reader.ReadUInt16(); Flags.flag = Reader.ReadUInt16();
var end = Reader.Tell() + (8 + 1) * 2;
var end = Reader.Tell() + (8+1) * 2;
Reader.Skip(2); Reader.Skip(2);
for (int i = 0; i < 8; i++) for (int i = 0; i < 8; i++)
{ {
@ -163,7 +217,8 @@ namespace CTFAK.MMFParser.EXE.Loaders.Objects
} }
Reader.Seek(end); Reader.Seek(end);
_systemObjectOffset = Reader.ReadUInt16();
_extensionOffset = Reader.ReadUInt16();
_valuesOffset = Reader.ReadUInt16(); _valuesOffset = Reader.ReadUInt16();
_stringsOffset = Reader.ReadUInt16(); _stringsOffset = Reader.ReadUInt16();
@ -173,6 +228,8 @@ namespace CTFAK.MMFParser.EXE.Loaders.Objects
BackColor = Reader.ReadColor(); BackColor = Reader.ReadColor();
_fadeinOffset = Reader.ReadUInt32(); _fadeinOffset = Reader.ReadUInt32();
_fadeoutOffset = Reader.ReadUInt32(); _fadeoutOffset = Reader.ReadUInt32();
}
if (_animationsOffset > 0) if (_animationsOffset > 0)
{ {
Reader.Seek(currentPosition + _animationsOffset); Reader.Seek(currentPosition + _animationsOffset);

@ -97,8 +97,21 @@ namespace CTFAK.MMFParser.EXE
public void Dump(string path = "[DEFAULT-PATH]") public void Dump(string path = "[DEFAULT-PATH]")
{ {
Logger.Log($"Dumping {PackFilename}", true, ConsoleColor.DarkBlue); Logger.Log($"Dumping {PackFilename}", true, ConsoleColor.DarkBlue);
var actualPath = path=="[DEFAULT-PATH]" ? ($"{Settings.ExtensionPath}\\{PackFilename}"):path; if (path == "[DEFAULT-PATH]")
File.WriteAllBytes(actualPath, Data); {
switch (Path.GetExtension(PackFilename))
{
case ".exe": path = $"{Settings.EXEPath}\\{PackFilename}";
break;
case ".dll": path = $"{Settings.DLLPath}\\{PackFilename}";
break;
case ".mfx": path = $"{Settings.ExtensionPath}\\{PackFilename}";
break;
default: path = $"{Settings.DumpPath}\\PackData\\{PackFilename}";
break;
}
}
File.WriteAllBytes(path, Data);
} }
} }

@ -275,7 +275,7 @@ namespace CTFAK.MMFParser.MFA
MfaBuild = Reader.ReadInt32(); MfaBuild = Reader.ReadInt32();
Product = Reader.ReadInt32(); Product = Reader.ReadInt32();
BuildVersion = Reader.ReadInt32(); BuildVersion = Reader.ReadInt32();
Settings.Build = BuildVersion; // Settings.Build = BuildVersion;
LangId = Reader.ReadInt32(); LangId = Reader.ReadInt32();
Name = Helper.AutoReadUnicode(Reader); Name = Helper.AutoReadUnicode(Reader);
Description = Helper.AutoReadUnicode(Reader); Description = Helper.AutoReadUnicode(Reader);

@ -4,6 +4,7 @@ using System.Drawing;
using System.Linq; using System.Linq;
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.Events; using CTFAK.MMFParser.EXE.Loaders.Events;
using CTFAK.MMFParser.EXE.Loaders.Events.Parameters; using CTFAK.MMFParser.EXE.Loaders.Events.Parameters;
using CTFAK.MMFParser.EXE.Loaders.Objects; using CTFAK.MMFParser.EXE.Loaders.Objects;
@ -55,7 +56,7 @@ namespace CTFAK.MMFParser.Translation
// mfa.Music = game.Music; // mfa.Music = game.Music;
mfa.Images.Items = game.Images.Images; mfa.Images.Items = game.Images?.Images ?? new Dictionary<int, ImageItem>();
foreach (var key in mfa.Images.Items.Keys) foreach (var key in mfa.Images.Items.Keys)
{ {
mfa.Images.Items[key].Debug = true; mfa.Images.Items[key].Debug = true;
@ -356,9 +357,16 @@ namespace CTFAK.MMFParser.Translation
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; if (item.InkEffectValue == 0&&Settings.Build<=284)
{
newItem.Chunks.GetOrCreateChunk<Opacity>().Blend = 255;
}
else
{
newItem.Chunks.GetOrCreateChunk<Opacity>().Blend = item.InkEffectValue;
}
newItem.Chunks.GetOrCreateChunk<Opacity>().RGBCoeff = Color.White; newItem.Chunks.GetOrCreateChunk<Opacity>().RGBCoeff = Color.White;
newItem.IconHandle = 12; newItem.IconHandle = 12;
@ -408,7 +416,7 @@ namespace CTFAK.MMFParser.Translation
newObject.Strings = ConvertStrings(itemLoader.Strings); newObject.Strings = ConvertStrings(itemLoader.Strings);
newObject.Values = ConvertValue(itemLoader.Values); newObject.Values = ConvertValue(itemLoader.Values);
newObject.Movements = new MFA.Loaders.mfachunks.Movements(null); newObject.Movements = new MFA.Loaders.mfachunks.Movements(null);
for (int j = 0; j < itemLoader.Movements.Items.Count; j++) for (int j = 0; j < itemLoader.Movements?.Items?.Count; j++)
{ {
var mov = itemLoader.Movements.Items[j]; var mov = itemLoader.Movements.Items[j];
var newMov = new Movement(null); var newMov = new Movement(null);

@ -62,6 +62,7 @@ namespace CTFAK
} }
else else
{ {
Settings.Unicode = true;
var reader = new ByteReader(new FileStream(args[0],FileMode.Open)); var reader = new ByteReader(new FileStream(args[0],FileMode.Open));
CleanData = new GameData(); CleanData = new GameData();
CleanData.Read(reader); CleanData.Read(reader);
@ -136,6 +137,8 @@ namespace CTFAK
Directory.CreateDirectory($"{Settings.MusicPath}"); Directory.CreateDirectory($"{Settings.MusicPath}");
Directory.CreateDirectory($"{Settings.ChunkPath}"); Directory.CreateDirectory($"{Settings.ChunkPath}");
Directory.CreateDirectory($"{Settings.ExtensionPath}"); Directory.CreateDirectory($"{Settings.ExtensionPath}");
Directory.CreateDirectory($"{Settings.DLLPath}");
Directory.CreateDirectory($"{Settings.EXEPath}");
Directory.CreateDirectory($"{PluginAPI.PluginAPI.PluginPath}"); Directory.CreateDirectory($"{PluginAPI.PluginAPI.PluginPath}");
} }
public static void InitNativeLibrary() public static void InitNativeLibrary()

@ -18,13 +18,15 @@ namespace CTFAK
public static string GamePath; public static string GamePath;
public static string GameName => Path.GetFileNameWithoutExtension(GamePath); public static string GameName => Path.GetFileNameWithoutExtension(GamePath);
public static string DumpPath => $"DUMP\\{GameName}"; public static string DumpPath => $"Dumps\\{GameName}";
public static string ImagePath=>$"{DumpPath}\\Images"; public static string ImagePath=>$"{DumpPath}\\Images";
public static string SoundPath=>$"{DumpPath}\\Sounds"; public static string SoundPath=>$"{DumpPath}\\Sounds";
public static string MusicPath=>$"{DumpPath}\\Musics"; public static string MusicPath=>$"{DumpPath}\\Musics";
public static string ChunkPath=>$"{DumpPath}\\Chunks"; public static string ChunkPath=>$"{DumpPath}\\Chunks";
public static string ExtensionPath=>$"{DumpPath}\\Extensions"; public static string ExtensionPath=>$"{DumpPath}\\PackData\\Extensions";
public static string DLLPath=>$"{DumpPath}\\PackData\\DLLs";
public static string EXEPath=>$"{DumpPath}\\PackData\\Exes";
public static string AppName; public static string AppName;
public static string Copyright; public static string Copyright;

Loading…
Cancel
Save