Sound fix for MFA

master
1987kostya 4 years ago
parent 39ad8eed83
commit 64d996f791

@ -172,6 +172,7 @@
<Compile Include="MMFParser\EXE\Loaders\Events\Parameters\Group.cs" />
<Compile Include="MMFParser\EXE\Loaders\Events\Parameters\GroupPointer.cs" />
<Compile Include="MMFParser\EXE\Loaders\Events\Parameters\KeyParameter.cs" />
<Compile Include="MMFParser\EXE\Loaders\Events\Parameters\Program.cs" />
<Compile Include="MMFParser\EXE\Loaders\Events\Parameters\Shoot.cs" />
<Compile Include="MMFParser\EXE\Loaders\Events\Parameters\StringParam.cs" />
<Compile Include="MMFParser\EXE\Loaders\Events\Parameters\TwoShorts.cs" />

@ -29,7 +29,6 @@ namespace CTFAK.MMFParser.EXE
if (chunk.Id == 26214)
{
if(!Settings.twofiveplus) chunk.Loader = LoadModern(chunk);
//LoadChunk(chunk);
}
else
{
@ -303,7 +302,7 @@ namespace CTFAK.MMFParser.EXE
}
loader?.Read();
// chunk.ChunkData = null;
// chunk.ChunkData = null; //TODO:Do something smarter
// chunk.RawData = null;
return loader;
}

@ -17,7 +17,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks
public bool SaveImages = false;
public Dictionary<int, ImageItem> Images = new Dictionary<int, ImageItem>();
public uint NumberOfItems;
public bool PreloadOnly = true;
public bool PreloadOnly = false;
public ImageBank(ByteReader reader) : base(reader)
{
@ -132,16 +132,13 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks
public int Size;
//tranparent,add later
Color _transparent;
byte[] _colorArray;
public byte[] rawImg;
public byte[] rawAlpha;
public bool Debug = false;
public int Debug2 = 1;
private Bitmap _bitmap;
public void Read(bool load)
@ -149,7 +146,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks
Handle = Reader.ReadInt32();
if (!Debug)
{
if (Settings.Build>=290) Handle -= 1;
if (Settings.Build>291) Handle -= 1;
if (Program.CleanData.ProductVersion != Constants.Products.MMF15&&Settings.Build>=284) Handle -= 1;
}
@ -163,6 +160,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks
Handle = Reader.ReadInt32();
if (!Debug)
{
if (Settings.Build>291) Handle -= 1;
if (Exe.Instance.GameData.ProductVersion != Constants.Products.MMF15&&Settings.Build>=284) Handle -= 1;
}
@ -330,7 +328,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks
}
}
}
if (Settings.Build > 283)
if (Settings.Build > 283) // No idea, but this is not working with old games
{
if (_transparent != null)
{

@ -128,11 +128,11 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks
Checksum = Reader.ReadInt32();
References = Reader.ReadInt32();
var decompressedSize = Reader.ReadInt32();
Flags = (int)Reader.ReadUInt32(); //flags
Flags = (int)Reader.ReadUInt32();
var reserved = Reader.ReadInt32();
var nameLenght = Reader.ReadInt32();
ByteReader soundData;
if (IsCompressed) //compressed
if (IsCompressed)
{
var size = Reader.ReadInt32();
soundData = new ByteReader(Decompressor.decompress_block(Reader, size, decompressedSize));
@ -141,23 +141,14 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks
{
soundData = new ByteReader(Reader.ReadBytes(decompressedSize));
}
if (IsCompressed)
{
Name = soundData.ReadAscii(nameLenght);
}
else
{
Name = soundData.ReadWideString(nameLenght);
}
Logger.Log(Name);
this.Data = soundData.ReadBytes((int) soundData.Size());
Data = soundData.ReadBytes((int) soundData.Size());
if (Settings.DumpSounds)
{
Name = Helper.CleanInput(Name);
File.WriteAllBytes($"{Settings.SoundPath}\\{Name}.wav", Data);
// File.WriteAllBytes($"{Name}.wav", Data);
}
@ -169,11 +160,14 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks
writer.WriteUInt32((uint)Handle);
writer.WriteInt32(Checksum);
writer.WriteInt32(References);
writer.WriteInt32(Data.Length+Name.Length+8);
writer.WriteInt32(Data.Length+(Name.Length*2));
writer.WriteInt32(Flags);
writer.WriteInt32(0);
writer.WriteInt32(Name.Length);
writer.WriteUnicode(Name);
// writer.BaseStream.Position -= 4;
writer.WriteBytes(Data);

@ -209,9 +209,9 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events
newWriter.WriteUInt16(Flags);
if (Settings.Build >= 284)
{
if(isMFA)
if(isMFA)//For MFA
{
newWriter.WriteInt16((short) IsRestricted); //For MFA
newWriter.WriteInt16((short) IsRestricted);
newWriter.WriteInt16((short) RestrictCpt);
newWriter.WriteInt16((short) Identifier);
newWriter.WriteInt16((short) Undo);
@ -258,13 +258,19 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events
{
var num = cond.Num;
if (num == -42) num = -27;
// if (num == -28||num == -29||num == -30||num == -31||num == -32||num == -33||num == -34||num == -35||num == -36||num == -37||num == -38||num == -39) num = -8;
if (Settings.Build >= 290)
{
if (num == -28||num == -29||num == -30||num == -31||num == -32||num == -33||num == -34||num == -35||num == -36||num == -37||num == -38||num == -39) num = -8;
}
cond.Num = num;
}
public static void FixActions(ref Action act)
{
var num = act.Num;
// if (num == 27||num == 28||num == 29||num == 30) num = 3;
if (Settings.Build >= 290)
{
if (num == 27||num == 28||num == 29||num == 30) num = 3;
}
act.Num = num;
}

@ -179,15 +179,9 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events
var actualLoader = Helper.LoadParameter(Code,Reader);
this.Loader = actualLoader;
if (Loader!=null)
{
if (Loader!=null) Loader.Read();
else throw new Exception("Loader is null: "+Code);
Loader.Read();
}
else
{
throw new Exception("Loader is null: "+Code);
}
Reader.Seek(currentPosition+size);
}

@ -18,7 +18,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters
Size = Reader.ReadInt16();
Type = Reader.ReadInt16();
Code = Reader.ReadInt16();
Data = Reader.ReadBytes(Size-20);
Data = Reader.ReadBytes((Size-20>0?Size-20:0));
}

@ -22,7 +22,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters
Id = Reader.ReadUInt16();
Name = Reader.ReadWideString();
Password = Reader.ReadInt32();
Password = Checksum.MakeGroupChecksum("", Name);
Password = Checksum.MakeGroupChecksum("pass", Name);
Logger.Log("Password: "+Password);
}

@ -0,0 +1,29 @@
using CTFAK.Utils;
namespace CTFAK.MMFParser.EXE.Loaders.Events.Parameters
{
public class Program:ParameterCommon
{
public short Flags;
public string Filename;
public string Command;
public Program(ByteReader reader) : base(reader)
{
}
public override void Read()
{
Flags = Reader.ReadInt16();
Filename = Reader.ReadAscii(260);
Command = Reader.ReadAscii();
}
public override void Write(ByteWriter Writer)
{
Writer.WriteInt16(Flags);
Writer.WriteAscii(Filename);
Writer.WriteAscii(Command);
}
}
}

@ -95,6 +95,9 @@ namespace CTFAK.MMFParser.EXE.Loaders.Objects
case 5:
Loader=new MovementPath(Reader);
break;
case 9:
Loader = new PlatformMovement(Reader);
break;
case 14:
Loader = new ExtensionsMovement(Reader);
break;
@ -324,7 +327,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Objects
public short Speed;
public short Acceleration;
public short Deceleration;
public short Directions;
public int Directions;
public short BounceFactor;
public EightDirections(ByteReader reader) : base(reader)
@ -341,7 +344,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Objects
Acceleration = Reader.ReadInt16();
Deceleration = Reader.ReadInt16();
BounceFactor = Reader.ReadInt16();
Directions = Reader.ReadInt16();
Directions = Reader.ReadInt32();
}
public override void Write(ByteWriter Writer)
@ -350,7 +353,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Objects
Writer.WriteInt16(Acceleration);
Writer.WriteInt16(Deceleration);
Writer.WriteInt16(BounceFactor);
Writer.WriteInt16(Directions);
Writer.WriteInt32(Directions);
}
}
public class RaceMovement:MovementLoader

@ -46,10 +46,10 @@ namespace CTFAK.MMFParser.Translation
//mfa.Stamp = wtf;
//if (game.Fonts != null) mfa.Fonts = game.Fonts;
mfa.Sounds.Items.Clear();
// foreach (var item in game.Sounds.Items)
// {
// mfa.Sounds.Items.Add(item);
// }
foreach (var item in game.Sounds.Items)
{
mfa.Sounds.Items.Add(item);
}
// mfa.Music = game.Music;
mfa.Images.Items = game.Images.Images;
@ -122,7 +122,8 @@ namespace CTFAK.MMFParser.Translation
var newFrame = new MFA.Loaders.Frame(null);
newFrame.Chunks = new ChunkList(null);//MFA.MFA.emptyFrameChunks;
newFrame.Handle = indexHandles[a];
newFrame.Handle = a;
indexHandles.TryGetValue(a,out newFrame.Handle);
Message($"Translating frame: {frame.Name} - {newFrame.Handle}" );
newFrame.Name = frame.Name;
newFrame.SizeX = frame.Width;
@ -220,6 +221,7 @@ namespace CTFAK.MMFParser.Translation
newFrame.Events.Objects = new List<EventObject>();
newFrame.Events._ifMFA = true;
newFrame.Events.Version = 1028;
// if (false)
if(frame.Events != null)
{
foreach (var item in newFrame.Items)

@ -164,6 +164,11 @@ namespace CTFAK.Utils
item = new Click(reader);
}
if (code == 33)
{
item = new MMFParser.EXE.Loaders.Events.Parameters.Program(reader);
}
if (code == 55)
{
item = new Extension(reader);

Loading…
Cancel
Save