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);
return loader;
case 8788:
//loader = new ObjectNames(chunk);
// loader = new ObjectNames(chunk);
break;
case 8754:
loader = new GlobalValues(chunk);

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

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

@ -37,10 +37,15 @@ namespace CTFAK.MMFParser.EXE.Loaders
_header = infoChunks.GetChunk<ObjectHeader>();
_name = infoChunks.GetChunk<ObjectName>();
_properties = infoChunks.GetChunk<ObjectProperties>();
_properties.ReadNew((int) ObjectType,this);
Logger.Log($"{Name}: {InkEffect}-{InkEffectValue}");
_properties = infoChunks.GetChunk<ObjectProperties>();
_properties.ReadNew((int) ObjectType,this);
if (Settings.Build > 284)
{
}
else
{
// if(InkEffectValue==0) _header.InkEffectParameter = 255;
}
}
public int Handle => _header.Handle;
@ -50,7 +55,7 @@ namespace CTFAK.MMFParser.EXE.Loaders
public int Flags => (int) _header.Flags;
public int Reserved => (int) _header.Reserved;
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 Antialias => ByteFlag.GetFlag((uint) _header.InkEffect, 29);
@ -146,7 +151,7 @@ namespace CTFAK.MMFParser.EXE.Loaders
public Int16 ObjectType;
public UInt32 Flags;
public UInt32 InkEffect;
public Int32 InkEffectParameter;
public byte InkEffectParameter;
public Int16 Reserved;
public ObjectHeader(ByteReader reader) : base(reader){}
@ -160,10 +165,10 @@ namespace CTFAK.MMFParser.EXE.Loaders
ObjectType = Reader.ReadInt16();
Flags = Reader.ReadUInt16();
Reserved = Reader.ReadInt16();
InkEffect = (uint) Reader.ReadInt32();
Reader.Skip(3);
InkEffectParameter = Reader.ReadByte();
InkEffect = (uint) Reader.ReadUInt32();
// Reader.Skip(3);
InkEffectParameter =(byte) Reader.ReadInt32();
// if (InkEffect != 0) InkEffectParameter = 255;

@ -135,44 +135,101 @@ namespace CTFAK.MMFParser.EXE.Loaders.Objects
{
var currentPosition = Reader.Tell();
var size = Reader.ReadInt32();
if (Settings.Build >= 284)
if (Settings.Build >= 284&&true)
{
_animationsOffset = 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;
}
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
else if (Settings.Build>=284)
{
_counterOffset = Reader.ReadUInt16();
var version = Reader.ReadUInt16();
_zeroUnk = Reader.ReadUInt16();
_movementsOffset = Reader.ReadUInt16();
_extensionOffset = Reader.ReadUInt16();
_animationsOffset = Reader.ReadUInt16();
}
_zeroUnk = 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;
}
if (_zeroUnk != 0) throw new NotImplementedException("Unknown value is not zero");
var version = Reader.ReadUInt16();
Reader.Seek(end);
_systemObjectOffset = 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;
_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
{
_movementsOffset = Reader.ReadUInt16();
_animationsOffset = Reader.ReadUInt16();
var version = Reader.ReadUInt16();
_counterOffset = Reader.ReadUInt16();
_systemObjectOffset = Reader.ReadUInt16();
_zeroUnk = 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();
Reader.Seek(end);
_extensionOffset = 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);

@ -97,8 +97,21 @@ namespace CTFAK.MMFParser.EXE
public void Dump(string path = "[DEFAULT-PATH]")
{
Logger.Log($"Dumping {PackFilename}", true, ConsoleColor.DarkBlue);
var actualPath = path=="[DEFAULT-PATH]" ? ($"{Settings.ExtensionPath}\\{PackFilename}"):path;
File.WriteAllBytes(actualPath, Data);
if (path == "[DEFAULT-PATH]")
{
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();
Product = Reader.ReadInt32();
BuildVersion = Reader.ReadInt32();
Settings.Build = BuildVersion;
// Settings.Build = BuildVersion;
LangId = Reader.ReadInt32();
Name = Helper.AutoReadUnicode(Reader);
Description = Helper.AutoReadUnicode(Reader);

@ -4,6 +4,7 @@ using System.Drawing;
using System.Linq;
using CTFAK.MMFParser.EXE;
using CTFAK.MMFParser.EXE.Loaders;
using CTFAK.MMFParser.EXE.Loaders.Banks;
using CTFAK.MMFParser.EXE.Loaders.Events;
using CTFAK.MMFParser.EXE.Loaders.Events.Parameters;
using CTFAK.MMFParser.EXE.Loaders.Objects;
@ -55,7 +56,7 @@ namespace CTFAK.MMFParser.Translation
// 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)
{
mfa.Images.Items[key].Debug = true;
@ -356,9 +357,16 @@ namespace CTFAK.MMFParser.Translation
newItem.Transparent = 1;
newItem.InkEffect = item.InkEffect;
newItem.InkEffectParameter = item.InkEffectValue;
newItem.AntiAliasing = item.Antialias? 1 : 0;;
newItem.AntiAliasing = item.Antialias? 1 : 0;
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.IconHandle = 12;
@ -408,7 +416,7 @@ namespace CTFAK.MMFParser.Translation
newObject.Strings = ConvertStrings(itemLoader.Strings);
newObject.Values = ConvertValue(itemLoader.Values);
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 newMov = new Movement(null);

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

@ -18,13 +18,15 @@ namespace CTFAK
public static string 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 SoundPath=>$"{DumpPath}\\Sounds";
public static string MusicPath=>$"{DumpPath}\\Musics";
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 Copyright;

Loading…
Cancel
Save