More localization, Object reading refactor, image viewer refactor. Now image viewer can display counters.

master
1987kostya 4 years ago
parent f16ce17bbe
commit 24853e3da3

@ -18,6 +18,7 @@ using CTFAK.MMFParser.EXE.Loaders.Objects;
using CTFAK.MMFParser.Translation; using CTFAK.MMFParser.Translation;
using CTFAK.Utils; using CTFAK.Utils;
namespace CTFAK.GUI namespace CTFAK.GUI
{ {
public partial class MainForm : Form public partial class MainForm : Form
@ -91,6 +92,7 @@ namespace CTFAK.GUI
imagesButton.Text = Properties.GlobalStrings.dumpImages; imagesButton.Text = Properties.GlobalStrings.dumpImages;
soundsButton.Text = Properties.GlobalStrings.dumpSounds; soundsButton.Text = Properties.GlobalStrings.dumpSounds;
musicsButton.Text = Properties.GlobalStrings.dumpMusics; musicsButton.Text = Properties.GlobalStrings.dumpMusics;
dumpSortedBtn.Text = Properties.GlobalStrings.dumpSorted;
FolderBTN.Text=Properties.GlobalStrings.openFolder; FolderBTN.Text=Properties.GlobalStrings.openFolder;
@ -304,17 +306,17 @@ namespace CTFAK.GUI
InitKeyTab(); InitKeyTab();
InitPlugins(); InitPlugins();
var toLog = ""; var toLog = "";
toLog += $"Title:{Exe.Instance.GameData.Name}\n"; toLog += $"{Properties.Locale.ChunkNames.title}: {Exe.Instance.GameData.Name}\n";
toLog += $"Copyright:{Exe.Instance.GameData.Copyright}\n"; toLog += $"{Properties.Locale.ChunkNames.copyright}: {Exe.Instance.GameData.Copyright}\n";
//toLog += $"Editor Filename: {Exe.Instance.GameData.EditorFilename}\n"; //toLog += $"Editor Filename: {Exe.Instance.GameData.EditorFilename}\n";
toLog += $"Product Version: {Exe.Instance.GameData.ProductVersion}\n"; toLog += $"Product Version: {Exe.Instance.GameData.ProductVersion}\n";
toLog += $"Build: {Exe.Instance.GameData.Build}\n"; toLog += $"Build: {Exe.Instance.GameData.Build}\n";
toLog += $"Runtime Version: {Exe.Instance.GameData.RuntimeVersion}\n"; toLog += $"Runtime Version: {Exe.Instance.GameData.RuntimeVersion}\n";
toLog += $"Number Of Images: {Exe.Instance.GameData.Images?.NumberOfItems ?? 0}\n"; toLog += $"{Properties.GlobalStrings.imageCount}: {Exe.Instance.GameData.Images?.NumberOfItems ?? 0}\n";
toLog += $"Number Of Sounds: {Exe.Instance.GameData.Sounds?.NumOfItems ?? 0}\n"; toLog += $"{Properties.GlobalStrings.soundCount}: {Exe.Instance.GameData.Sounds?.NumOfItems ?? 0}\n";
toLog += $"Number Of Musics: {Exe.Instance.GameData.Music?.NumOfItems ?? 0}\n"; toLog += $"{Properties.GlobalStrings.musicCount}: {Exe.Instance.GameData.Music?.NumOfItems ?? 0}\n";
toLog += $"Unique FrameItems: {Exe.Instance.GameData.Frameitems?.NumberOfItems}\n"; toLog += $"{Properties.GlobalStrings.frameitemCount}: {Exe.Instance.GameData.Frameitems?.NumberOfItems}\n";
toLog += $"Frame Count: {Exe.Instance.GameData.Frames.Count}\n"; toLog += $"{Properties.GlobalStrings.frameCount}: {Exe.Instance.GameData.Frames.Count}\n";
toLog += $"Chunks Count: {Exe.Instance.GameData.GameChunks.Chunks.Count}\n"; toLog += $"Chunks Count: {Exe.Instance.GameData.GameChunks.Chunks.Count}\n";
if (Exe.Instance.GameData.GameChunks.GetChunk<ImageBank>() != null) if (Exe.Instance.GameData.GameChunks.GetChunk<ImageBank>() != null)
Exe.Instance.GameData.GameChunks.GetChunk<ImageBank>().OnImageSaved += UpdateImageBar; Exe.Instance.GameData.GameChunks.GetChunk<ImageBank>().OnImageSaved += UpdateImageBar;
@ -607,6 +609,8 @@ namespace CTFAK.GUI
frameNode.Nodes.Add(objInstNode); frameNode.Nodes.Add(objInstNode);
var loader = objInst.FrameItem.Properties.Loader; var loader = objInst.FrameItem.Properties.Loader;
if (loader is ObjectCommon common) if (loader is ObjectCommon common)
{
if (common.Parent.ObjectType == 2) //Active
{ {
if (common.Animations != null) if (common.Animations != null)
foreach (var pair in common.Animations.AnimationDict) foreach (var pair in common.Animations.AnimationDict)
@ -646,6 +650,23 @@ namespace CTFAK.GUI
} }
} }
} }
else if(common.Parent.ObjectType==7)//Counter
{
for (var a = 0; a < common.Counters?.Frames?.Count; a++)
{
var animFrame = common.Counters.Frames[a];
bank.Images.TryGetValue(animFrame, out var img);
if (img != null)
{
var animFrameNode = new ChunkNode(a.ToString(), img);
objInstNode.Nodes.Add(animFrameNode);
}
}
}
}
else if (loader is Backdrop backdrop) else if (loader is Backdrop backdrop)
{ {
bank.Images.TryGetValue(backdrop.Image, out var img); bank.Images.TryGetValue(backdrop.Image, out var img);

@ -137,19 +137,12 @@ namespace CTFAK.MMFParser.EXE
} }
public void BuildKey() public void BuildKey()
{ {
Settings.AppName=_chunkList.GetChunk<AppName>()?.Value??""; Settings.AppName=_chunkList.GetChunk<AppName>()?.Value??"";
Settings.Copyright = _chunkList.GetChunk<Copyright>()?.Value??""; Settings.Copyright = _chunkList.GetChunk<Copyright>()?.Value??"";
Settings.ProjectPath = _chunkList.GetChunk<EditorFilename>()?.Value??""; Settings.ProjectPath = _chunkList.GetChunk<EditorFilename>()?.Value??"";
if (Exe.Instance.GameData.ProductBuild > 284)Decryption.MakeKey(Settings.AppName,Settings.Copyright,Settings.ProjectPath); if (Exe.Instance.GameData.ProductBuild > 284)Decryption.MakeKey(Settings.AppName,Settings.Copyright,Settings.ProjectPath);
else Decryption.MakeKey(Settings.ProjectPath, Settings.AppName, Settings.Copyright); else Decryption.MakeKey(Settings.ProjectPath, Settings.AppName, Settings.Copyright);
} }
} }
@ -257,22 +250,18 @@ namespace CTFAK.MMFParser.EXE
case 13117: case 13117:
// loader = new Events(chunk);//NOT WORKING // loader = new Events(chunk);//NOT WORKING
break; break;
} }
loader?.Read(); loader?.Read();
return loader; return loader;
} }
public T GetChunk<T>() where T : ChunkLoader public T GetChunk<T>() where T : ChunkLoader
{ {
foreach (Chunk chunk in Chunks) foreach (Chunk chunk in Chunks)
{ {
if (chunk.Loader != null) if (chunk.Loader != null)
{ {
if (chunk.Loader.GetType().Name == typeof(T).Name) if (chunk.Loader.GetType() == typeof(T))
{ {
return (T) chunk.Loader; return (T) chunk.Loader;
} }
@ -288,13 +277,11 @@ namespace CTFAK.MMFParser.EXE
var chunk = Chunks[i]; var chunk = Chunks[i];
if (chunk.Loader != null) if (chunk.Loader != null)
{ {
if (chunk.Loader.GetType().Name == typeof(T).Name) if (chunk.Loader.GetType() == typeof(T))
{ {
Chunks.Remove(chunk); Chunks.Remove(chunk);
return (T) chunk.Loader; return (T) chunk.Loader;
} }
} }
} }
return null; return null;

@ -100,6 +100,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks
public override void Read() public override void Read()
{ {
} }
public SoundBase(ByteReader reader) : base(reader) public SoundBase(ByteReader reader) : base(reader)
@ -122,6 +123,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks
public override void Read() public override void Read()
{ {
base.Read();
var start = Reader.Tell(); var start = Reader.Tell();
Handle = (int) Reader.ReadUInt32(); Handle = (int) Reader.ReadUInt32();
@ -153,6 +155,7 @@ namespace CTFAK.MMFParser.EXE.Loaders.Banks
this.Data = soundData.ReadBytes((int) soundData.Size()); this.Data = soundData.ReadBytes((int) soundData.Size());
//Logger.Log("SoundHeader: "+Data.GetHex(4));
if (Settings.DumpSounds) if (Settings.DumpSounds)
{ {
Name = Helper.CleanInput(Name); Name = Helper.CleanInput(Name);

@ -6,16 +6,16 @@ namespace CTFAK.MMFParser.EXE.Loaders.Objects
{ {
public class ObjectCommon : ChunkLoader public class ObjectCommon : ChunkLoader
{ {
private short _valuesOffset; private ushort _valuesOffset;
private short _stringsOffset; private ushort _stringsOffset;
private byte[] Identifier; private byte[] Identifier;
private int _fadeinOffset; private ushort _fadeinOffset;
private int _fadeoutOffset; private ushort _fadeoutOffset;
private ushort _movementsOffset; private ushort _movementsOffset;
private short _animationsOffset; private ushort _animationsOffset;
private short _systemObjectOffset; private ushort _systemObjectOffset;
public short CounterOffset; public ushort _counterOffset;
public short ExtensionOffset; public ushort _extensionOffset;
public Animations Animations; public Animations Animations;
private long _end; private long _end;
@ -99,45 +99,48 @@ namespace CTFAK.MMFParser.EXE.Loaders.Objects
public override void Read() public override void Read()
{ {
if (Parent.ObjectType != 2) return; //if(Parent.ObjectType!=2)return;
long currentPosition = Reader.Tell(); var currentPosition = Reader.Tell();
int size = Reader.ReadInt32(); var size = Reader.ReadInt32();
bool newobj = Settings.Build >= 284; if (Settings.Build >= 284)
if (newobj)
{ {
_animationsOffset = (short) Reader.ReadUInt16(); _animationsOffset = Reader.ReadUInt16();
_movementsOffset = Reader.ReadUInt16(); _movementsOffset = Reader.ReadUInt16();
var version = Reader.ReadUInt16();
Reader.Skip(2); //TODO: Find out
_counterOffset = Reader.ReadUInt16();
_systemObjectOffset = Reader.ReadUInt16();
} }
else else
{ {
_movementsOffset = Reader.ReadUInt16(); _movementsOffset = Reader.ReadUInt16();
_animationsOffset = Reader.ReadInt16(); _animationsOffset = Reader.ReadUInt16();
var version = Reader.ReadUInt16();
_counterOffset = Reader.ReadUInt16();
_systemObjectOffset = Reader.ReadUInt16();
} }
short version = Reader.ReadInt16();
CounterOffset = (short) Reader.ReadUInt16();
_systemObjectOffset = (short) Reader.ReadUInt16();
Flags.flag = Reader.ReadUInt32(); Flags.flag = Reader.ReadUInt32();
var end = Reader.Tell() + 16; var end = Reader.Tell() + 16;
//Ignoring qualifiers
Reader.Seek(end); Reader.Seek(end);
if (newobj) if (Settings.Build == 284)
{ {
_systemObjectOffset = Reader.ReadInt16(); _systemObjectOffset = Reader.ReadUInt16();
} }
else else
{ {
ExtensionOffset = Reader.ReadInt16(); _extensionOffset = Reader.PeekUInt16();
} }
_valuesOffset = Reader.ReadInt16(); _valuesOffset = Reader.ReadUInt16();
_stringsOffset = Reader.ReadInt16(); _stringsOffset = Reader.ReadUInt16();
NewFlags.flag = Reader.ReadUInt16(); NewFlags.flag = Reader.ReadUInt32();
preferences.flag = Reader.ReadUInt16(); preferences.flag = Reader.ReadUInt32();
byte[] identifier = Reader.ReadFourCc(); Identifier = Reader.ReadBytes(4);
BackColor = Reader.ReadColor(); BackColor = Reader.ReadColor();
_fadeinOffset = Reader.ReadInt32(); _fadeinOffset = (ushort) Reader.ReadUInt32();
_fadeoutOffset = Reader.ReadInt32(); _fadeoutOffset = (ushort) Reader.ReadUInt32();
if (_movementsOffset != 0) if (_movementsOffset != 0)
{ {
@ -194,9 +197,9 @@ namespace CTFAK.MMFParser.EXE.Loaders.Objects
}*/ }*/
if (_systemObjectOffset > 0) if (_systemObjectOffset != 0)
{ {
Console.WriteLine("Reading System Object"); Logger.Log("Reading System Object: "+_systemObjectOffset);
Reader.Seek(currentPosition+_systemObjectOffset); Reader.Seek(currentPosition+_systemObjectOffset);
if (Parent.ObjectType == ((int) Constants.ObjectType.Text) || if (Parent.ObjectType == ((int) Constants.ObjectType.Text) ||
Parent.ObjectType == ((int) Constants.ObjectType.Question)) Parent.ObjectType == ((int) Constants.ObjectType.Question))
@ -207,15 +210,20 @@ namespace CTFAK.MMFParser.EXE.Loaders.Objects
Parent.ObjectType == ((int) Constants.ObjectType.Lives)|| Parent.ObjectType == ((int) Constants.ObjectType.Lives)||
Parent.ObjectType == ((int) Constants.ObjectType.Counter)) Parent.ObjectType == ((int) Constants.ObjectType.Counter))
{ {
Logger.Log("Counter: "+Parent.Name);
Counters = new Counters(Reader); Counters = new Counters(Reader);
Counters.Read(); Counters.Read();
} }
} }
// Logger.Log("anims: "+_animationsOffset);
// Logger.Log("fadeIn: "+_fadeinOffset);
// Logger.Log("fadeOut: "+_fadeoutOffset);
// Logger.Log("movements: "+_movementsOffset);
// Logger.Log("strings: "+_stringsOffset);
// Logger.Log("values: "+_valuesOffset);
// Logger.Log("sysObj: "+_systemObjectOffset);
// Console.WriteLine("SysObjOff: " + _systemObjectOffset);
// Console.WriteLine("ExtOff: " + _extensionOffset);
} }
public override void Print(bool ext) public override void Print(bool ext)

@ -1,6 +1,7 @@
using System; using System;
using System.Diagnostics; using System.Diagnostics;
using System.Drawing; using System.Drawing;
using System.Globalization;
using System.IO; using System.IO;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Threading; using System.Threading;
@ -34,10 +35,11 @@ namespace CTFAK
// Environment.Exit(0); // Environment.Exit(0);
AppDomain.CurrentDomain.FirstChanceException += (sender, eventArgs) => AppDomain.CurrentDomain.FirstChanceException += (sender, eventArgs) =>
{ {
if (eventArgs.Exception is ThreadAbortException) return;
if (eventArgs.Exception is ThreadAbortException) return;
var ex = (Exception) eventArgs.Exception;
Logger.Log("ERROR: "); Logger.Log("ERROR: ");
Logger.Log(eventArgs.Exception.ToString()); Logger.Log(ex.ToString());
}; };
Settings.UseGUI = true; Settings.UseGUI = true;

@ -79,7 +79,7 @@ namespace CTFAK.Properties.Locale {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to Additinal Frame Item. /// Looks up a localized string similar to Additional Frame Item.
/// </summary> /// </summary>
internal static string additionalFrameItem { internal static string additionalFrameItem {
get { get {
@ -88,7 +88,7 @@ namespace CTFAK.Properties.Locale {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to . /// Looks up a localized string similar to Additional Object Inst.
/// </summary> /// </summary>
internal static string additionalObjectInstance { internal static string additionalObjectInstance {
get { get {
@ -97,7 +97,7 @@ namespace CTFAK.Properties.Locale {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to . /// Looks up a localized string similar to App Doc.
/// </summary> /// </summary>
internal static string appDoc { internal static string appDoc {
get { get {
@ -124,7 +124,7 @@ namespace CTFAK.Properties.Locale {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to . /// Looks up a localized string similar to Binary Files.
/// </summary> /// </summary>
internal static string binaryFiles { internal static string binaryFiles {
get { get {
@ -133,7 +133,7 @@ namespace CTFAK.Properties.Locale {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to . /// Looks up a localized string similar to Bluray Options.
/// </summary> /// </summary>
internal static string blurayOptions { internal static string blurayOptions {
get { get {
@ -151,7 +151,7 @@ namespace CTFAK.Properties.Locale {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to . /// Looks up a localized string similar to Demo File Path.
/// </summary> /// </summary>
internal static string demoFilePath { internal static string demoFilePath {
get { get {
@ -160,7 +160,7 @@ namespace CTFAK.Properties.Locale {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to . /// Looks up a localized string similar to Demo Version.
/// </summary> /// </summary>
internal static string demoVersion { internal static string demoVersion {
get { get {
@ -169,7 +169,7 @@ namespace CTFAK.Properties.Locale {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to . /// Looks up a localized string similar to EXE Only.
/// </summary> /// </summary>
internal static string exeOnly { internal static string exeOnly {
get { get {
@ -187,7 +187,7 @@ namespace CTFAK.Properties.Locale {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to . /// Looks up a localized string similar to Extented Header.
/// </summary> /// </summary>
internal static string extHeader { internal static string extHeader {
get { get {
@ -196,7 +196,7 @@ namespace CTFAK.Properties.Locale {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to . /// Looks up a localized string similar to Extension List.
/// </summary> /// </summary>
internal static string extList { internal static string extList {
get { get {
@ -205,7 +205,7 @@ namespace CTFAK.Properties.Locale {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to . /// Looks up a localized string similar to Extra Data.
/// </summary> /// </summary>
internal static string extraData { internal static string extraData {
get { get {
@ -214,7 +214,7 @@ namespace CTFAK.Properties.Locale {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to . /// Looks up a localized string similar to Extra Path.
/// </summary> /// </summary>
internal static string extraPath { internal static string extraPath {
get { get {
@ -223,7 +223,7 @@ namespace CTFAK.Properties.Locale {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to . /// Looks up a localized string similar to Font Bank.
/// </summary> /// </summary>
internal static string fontBank { internal static string fontBank {
get { get {
@ -232,7 +232,7 @@ namespace CTFAK.Properties.Locale {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to . /// Looks up a localized string similar to Font Offsets.
/// </summary> /// </summary>
internal static string fontOffsets { internal static string fontOffsets {
get { get {
@ -520,7 +520,7 @@ namespace CTFAK.Properties.Locale {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to . /// Looks up a localized string similar to Music Bank.
/// </summary> /// </summary>
internal static string musicBank { internal static string musicBank {
get { get {
@ -529,7 +529,7 @@ namespace CTFAK.Properties.Locale {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to . /// Looks up a localized string similar to Music Offsets.
/// </summary> /// </summary>
internal static string musicOffsets { internal static string musicOffsets {
get { get {
@ -538,7 +538,7 @@ namespace CTFAK.Properties.Locale {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to . /// Looks up a localized string similar to MV Timer Base.
/// </summary> /// </summary>
internal static string mvTimerBase { internal static string mvTimerBase {
get { get {
@ -547,7 +547,7 @@ namespace CTFAK.Properties.Locale {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to . /// Looks up a localized string similar to Object Bank.
/// </summary> /// </summary>
internal static string objectBank { internal static string objectBank {
get { get {
@ -556,7 +556,7 @@ namespace CTFAK.Properties.Locale {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to . /// Looks up a localized string similar to Object Bank 2.
/// </summary> /// </summary>
internal static string objectBank2 { internal static string objectBank2 {
get { get {
@ -565,7 +565,7 @@ namespace CTFAK.Properties.Locale {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to . /// Looks up a localized string similar to Object Common.
/// </summary> /// </summary>
internal static string objectCommon { internal static string objectCommon {
get { get {
@ -574,7 +574,7 @@ namespace CTFAK.Properties.Locale {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to . /// Looks up a localized string similar to Object Effects.
/// </summary> /// </summary>
internal static string objectEffects { internal static string objectEffects {
get { get {
@ -583,7 +583,7 @@ namespace CTFAK.Properties.Locale {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to . /// Looks up a localized string similar to Object Header.
/// </summary> /// </summary>
internal static string objectHeader { internal static string objectHeader {
get { get {
@ -592,7 +592,7 @@ namespace CTFAK.Properties.Locale {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to . /// Looks up a localized string similar to Object Name.
/// </summary> /// </summary>
internal static string objectName { internal static string objectName {
get { get {
@ -601,7 +601,7 @@ namespace CTFAK.Properties.Locale {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to . /// Looks up a localized string similar to Object Unknown.
/// </summary> /// </summary>
internal static string objectUnknown { internal static string objectUnknown {
get { get {
@ -610,7 +610,7 @@ namespace CTFAK.Properties.Locale {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to . /// Looks up a localized string similar to Other Extensions.
/// </summary> /// </summary>
internal static string otherExts { internal static string otherExts {
get { get {
@ -619,7 +619,7 @@ namespace CTFAK.Properties.Locale {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to . /// Looks up a localized string similar to Output Path.
/// </summary> /// </summary>
internal static string outputPath { internal static string outputPath {
get { get {
@ -628,7 +628,7 @@ namespace CTFAK.Properties.Locale {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to . /// Looks up a localized string similar to Project Path.
/// </summary> /// </summary>
internal static string projectPath { internal static string projectPath {
get { get {
@ -637,7 +637,7 @@ namespace CTFAK.Properties.Locale {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to . /// Looks up a localized string similar to Protection.
/// </summary> /// </summary>
internal static string protection { internal static string protection {
get { get {
@ -646,7 +646,7 @@ namespace CTFAK.Properties.Locale {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to . /// Looks up a localized string similar to Random Seed.
/// </summary> /// </summary>
internal static string randomSeed { internal static string randomSeed {
get { get {
@ -655,7 +655,7 @@ namespace CTFAK.Properties.Locale {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to . /// Looks up a localized string similar to Security Number.
/// </summary> /// </summary>
internal static string secNum { internal static string secNum {
get { get {
@ -664,7 +664,7 @@ namespace CTFAK.Properties.Locale {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to . /// Looks up a localized string similar to Shaders.
/// </summary> /// </summary>
internal static string shaders { internal static string shaders {
get { get {
@ -673,7 +673,7 @@ namespace CTFAK.Properties.Locale {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to . /// Looks up a localized string similar to Sound Bank.
/// </summary> /// </summary>
internal static string soundBank { internal static string soundBank {
get { get {
@ -682,7 +682,7 @@ namespace CTFAK.Properties.Locale {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to . /// Looks up a localized string similar to Sound Offsets.
/// </summary> /// </summary>
internal static string soundOffsets { internal static string soundOffsets {
get { get {
@ -700,7 +700,7 @@ namespace CTFAK.Properties.Locale {
} }
/// <summary> /// <summary>
/// Looks up a localized string similar to . /// Looks up a localized string similar to Unknown-.
/// </summary> /// </summary>
internal static string unknown { internal static string unknown {
get { get {

@ -47,4 +47,184 @@
<data name="frameEffects" xml:space="preserve"> <data name="frameEffects" xml:space="preserve">
<value>Frame Effects</value> <value>Frame Effects</value>
</data> </data>
<data name="unknown" xml:space="preserve">
<value>Unknown-</value>
</data>
<data name="soundOffsets" xml:space="preserve">
<value>Sound Offsets</value>
</data>
<data name="additionalObjectInstance" xml:space="preserve">
<value>Additional Object Inst</value>
</data>
<data name="appDoc" xml:space="preserve">
<value>App Doc</value>
</data>
<data name="binaryFiles" xml:space="preserve">
<value>Binary Files</value>
</data>
<data name="blurayOptions" xml:space="preserve">
<value>Bluray Options</value>
</data>
<data name="demoFilePath" xml:space="preserve">
<value>Demo File Path</value>
</data>
<data name="demoVersion" xml:space="preserve">
<value>Demo Version</value>
</data>
<data name="exeOnly" xml:space="preserve">
<value>EXE Only</value>
</data>
<data name="extHeader" xml:space="preserve">
<value>Extented Header</value>
</data>
<data name="extList" xml:space="preserve">
<value>Extension List</value>
</data>
<data name="extraData" xml:space="preserve">
<value>Extra Data</value>
</data>
<data name="extraPath" xml:space="preserve">
<value>Extra Path</value>
</data>
<data name="fontBank" xml:space="preserve">
<value>Font Bank</value>
</data>
<data name="fontOffsets" xml:space="preserve">
<value>Font Offsets</value>
</data>
<data name="FrameFadeIn" xml:space="preserve">
<value>Frame Fade In</value>
</data>
<data name="frameFadeInFrame" xml:space="preserve">
<value>Frame Fade In Frame</value>
</data>
<data name="frameFadeOut" xml:space="preserve">
<value>Frame Fade Out</value>
</data>
<data name="frameFadeOutFrame" xml:space="preserve">
<value>Frame Fade Out Frame</value>
</data>
<data name="frameHandles" xml:space="preserve">
<value>Frame Handles</value>
</data>
<data name="frameHeader" xml:space="preserve">
<value>Frame Header</value>
</data>
<data name="frameIphoneOptions" xml:space="preserve">
<value>Frame IPhone Options</value>
</data>
<data name="frameLayerEffects" xml:space="preserve">
<value>Frame Layer Effects</value>
</data>
<data name="frameLayers" xml:space="preserve">
<value>Frame Layers</value>
</data>
<data name="frameObjects" xml:space="preserve">
<value>Frame Objects</value>
</data>
<data name="framePalette" xml:space="preserve">
<value>Frame Palette</value>
</data>
<data name="framePassword" xml:space="preserve">
<value>Frame Password</value>
</data>
<data name="framePlayHeader" xml:space="preserve">
<value>Frame Play Header</value>
</data>
<data name="frameVirtualRect" xml:space="preserve">
<value>Frame Virtual Rect</value>
</data>
<data name="globalEvents" xml:space="preserve">
<value>Global Events</value>
</data>
<data name="globalStringNames" xml:space="preserve">
<value>Global String Names</value>
</data>
<data name="globalStrings" xml:space="preserve">
<value>Global Strings</value>
</data>
<data name="globalValueNames" xml:space="preserve">
<value>Global Value Names</value>
</data>
<data name="globalValues" xml:space="preserve">
<value>Global Values</value>
</data>
<data name="icon" xml:space="preserve">
<value>Icon</value>
</data>
<data name="imageBank" xml:space="preserve">
<value>Image Bank</value>
</data>
<data name="imagesOffsets" xml:space="preserve">
<value>Image Offsets</value>
</data>
<data name="last" xml:space="preserve">
<value>Last</value>
</data>
<data name="menu" xml:space="preserve">
<value>Menu</value>
</data>
<data name="menuImages" xml:space="preserve">
<value>Menu Images</value>
</data>
<data name="miniHeader" xml:space="preserve">
<value>Mini Header</value>
</data>
<data name="mosaicImageTable" xml:space="preserve">
<value>Mosaic Image Table</value>
</data>
<data name="musicBank" xml:space="preserve">
<value>Music Bank</value>
</data>
<data name="musicOffsets" xml:space="preserve">
<value>Music Offsets</value>
</data>
<data name="mvTimerBase" xml:space="preserve">
<value>MV Timer Base</value>
</data>
<data name="objectBank" xml:space="preserve">
<value>Object Bank</value>
</data>
<data name="objectBank2" xml:space="preserve">
<value>Object Bank 2</value>
</data>
<data name="objectCommon" xml:space="preserve">
<value>Object Common</value>
</data>
<data name="objectEffects" xml:space="preserve">
<value>Object Effects</value>
</data>
<data name="objectHeader" xml:space="preserve">
<value>Object Header</value>
</data>
<data name="objectName" xml:space="preserve">
<value>Object Name</value>
</data>
<data name="objectUnknown" xml:space="preserve">
<value>Object Unknown</value>
</data>
<data name="otherExts" xml:space="preserve">
<value>Other Extensions</value>
</data>
<data name="outputPath" xml:space="preserve">
<value>Output Path</value>
</data>
<data name="projectPath" xml:space="preserve">
<value>Project Path</value>
</data>
<data name="protection" xml:space="preserve">
<value>Protection</value>
</data>
<data name="randomSeed" xml:space="preserve">
<value>Random Seed</value>
</data>
<data name="secNum" xml:space="preserve">
<value>Security Number</value>
</data>
<data name="shaders" xml:space="preserve">
<value>Shaders</value>
</data>
<data name="soundBank" xml:space="preserve">
<value>Sound Bank</value>
</data>
</root> </root>

@ -34,13 +34,13 @@
<value>Menu</value> <value>Menu</value>
</data> </data>
<data name="extraPath" xml:space="preserve"> <data name="extraPath" xml:space="preserve">
<value /> <value>Extra Path</value>
</data> </data>
<data name="extensions" xml:space="preserve"> <data name="extensions" xml:space="preserve">
<value>Extensions</value> <value>Extensions</value>
</data> </data>
<data name="objectBank" xml:space="preserve"> <data name="objectBank" xml:space="preserve">
<value /> <value>Object Bank</value>
</data> </data>
<data name="globalEvents" xml:space="preserve"> <data name="globalEvents" xml:space="preserve">
<value>Global Events</value> <value>Global Events</value>
@ -49,22 +49,22 @@
<value>Frame Handles</value> <value>Frame Handles</value>
</data> </data>
<data name="extraData" xml:space="preserve"> <data name="extraData" xml:space="preserve">
<value /> <value>Extra Data</value>
</data> </data>
<data name="additionalExts" xml:space="preserve"> <data name="additionalExts" xml:space="preserve">
<value>Additional Extensions</value> <value>Additional Extensions</value>
</data> </data>
<data name="projectPath" xml:space="preserve"> <data name="projectPath" xml:space="preserve">
<value /> <value>Project Path</value>
</data> </data>
<data name="outputPath" xml:space="preserve"> <data name="outputPath" xml:space="preserve">
<value /> <value>Output Path</value>
</data> </data>
<data name="appDoc" xml:space="preserve"> <data name="appDoc" xml:space="preserve">
<value /> <value>App Doc</value>
</data> </data>
<data name="otherExts" xml:space="preserve"> <data name="otherExts" xml:space="preserve">
<value /> <value>Other Extensions</value>
</data> </data>
<data name="globalValues" xml:space="preserve"> <data name="globalValues" xml:space="preserve">
<value>Global Values</value> <value>Global Values</value>
@ -73,19 +73,19 @@
<value>Global Strings</value> <value>Global Strings</value>
</data> </data>
<data name="extList" xml:space="preserve"> <data name="extList" xml:space="preserve">
<value /> <value>Extension List</value>
</data> </data>
<data name="icon" xml:space="preserve"> <data name="icon" xml:space="preserve">
<value>Icon</value> <value>Icon</value>
</data> </data>
<data name="demoVersion" xml:space="preserve"> <data name="demoVersion" xml:space="preserve">
<value /> <value>Demo Version</value>
</data> </data>
<data name="secNum" xml:space="preserve"> <data name="secNum" xml:space="preserve">
<value /> <value>Security Number</value>
</data> </data>
<data name="binaryFiles" xml:space="preserve"> <data name="binaryFiles" xml:space="preserve">
<value /> <value>Binary Files</value>
</data> </data>
<data name="menuImages" xml:space="preserve"> <data name="menuImages" xml:space="preserve">
<value>Menu Images</value> <value>Menu Images</value>
@ -103,19 +103,19 @@
<value>Global String Names</value> <value>Global String Names</value>
</data> </data>
<data name="objectBank2" xml:space="preserve"> <data name="objectBank2" xml:space="preserve">
<value /> <value>Object Bank 2</value>
</data> </data>
<data name="exeOnly" xml:space="preserve"> <data name="exeOnly" xml:space="preserve">
<value /> <value>EXE Only</value>
</data> </data>
<data name="protection" xml:space="preserve"> <data name="protection" xml:space="preserve">
<value /> <value>Protection</value>
</data> </data>
<data name="shaders" xml:space="preserve"> <data name="shaders" xml:space="preserve">
<value /> <value>Shaders</value>
</data> </data>
<data name="extHeader" xml:space="preserve"> <data name="extHeader" xml:space="preserve">
<value /> <value>Extented Header</value>
</data> </data>
<data name="frame" xml:space="preserve"> <data name="frame" xml:space="preserve">
<value>Frame</value> <value>Frame</value>
@ -154,10 +154,10 @@
<value>Frame Play Header</value> <value>Frame Play Header</value>
</data> </data>
<data name="additionalFrameItem" xml:space="preserve"> <data name="additionalFrameItem" xml:space="preserve">
<value>Additinal Frame Item</value> <value>Additional Frame Item</value>
</data> </data>
<data name="additionalObjectInstance" xml:space="preserve"> <data name="additionalObjectInstance" xml:space="preserve">
<value /> <value>Additional Object Inst</value>
</data> </data>
<data name="frameLayers" xml:space="preserve"> <data name="frameLayers" xml:space="preserve">
<value>Frame Layers</value> <value>Frame Layers</value>
@ -166,19 +166,19 @@
<value>Frame Virtual Rect</value> <value>Frame Virtual Rect</value>
</data> </data>
<data name="demoFilePath" xml:space="preserve"> <data name="demoFilePath" xml:space="preserve">
<value /> <value>Demo File Path</value>
</data> </data>
<data name="randomSeed" xml:space="preserve"> <data name="randomSeed" xml:space="preserve">
<value /> <value>Random Seed</value>
</data> </data>
<data name="frameLayerEffects" xml:space="preserve"> <data name="frameLayerEffects" xml:space="preserve">
<value>Frame Layer Effects</value> <value>Frame Layer Effects</value>
</data> </data>
<data name="blurayOptions" xml:space="preserve"> <data name="blurayOptions" xml:space="preserve">
<value /> <value>Bluray Options</value>
</data> </data>
<data name="mvTimerBase" xml:space="preserve"> <data name="mvTimerBase" xml:space="preserve">
<value /> <value>MV Timer Base</value>
</data> </data>
<data name="mosaicImageTable" xml:space="preserve"> <data name="mosaicImageTable" xml:space="preserve">
<value>Mosaic Image Table</value> <value>Mosaic Image Table</value>
@ -190,48 +190,48 @@
<value>Frame IPhone Options</value> <value>Frame IPhone Options</value>
</data> </data>
<data name="objectHeader" xml:space="preserve"> <data name="objectHeader" xml:space="preserve">
<value /> <value>Object Header</value>
</data> </data>
<data name="objectName" xml:space="preserve"> <data name="objectName" xml:space="preserve">
<value /> <value>Object Name</value>
</data> </data>
<data name="objectCommon" xml:space="preserve"> <data name="objectCommon" xml:space="preserve">
<value /> <value>Object Common</value>
</data> </data>
<data name="objectUnknown" xml:space="preserve"> <data name="objectUnknown" xml:space="preserve">
<value /> <value>Object Unknown</value>
</data> </data>
<data name="objectEffects" xml:space="preserve"> <data name="objectEffects" xml:space="preserve">
<value /> <value>Object Effects</value>
</data> </data>
<data name="imagesOffsets" xml:space="preserve"> <data name="imagesOffsets" xml:space="preserve">
<value>Image Offsets</value> <value>Image Offsets</value>
</data> </data>
<data name="fontOffsets" xml:space="preserve"> <data name="fontOffsets" xml:space="preserve">
<value /> <value>Font Offsets</value>
</data> </data>
<data name="soundOffsets" xml:space="preserve"> <data name="soundOffsets" xml:space="preserve">
<value /> <value>Sound Offsets</value>
</data> </data>
<data name="musicOffsets" xml:space="preserve"> <data name="musicOffsets" xml:space="preserve">
<value /> <value>Music Offsets</value>
</data> </data>
<data name="imageBank" xml:space="preserve"> <data name="imageBank" xml:space="preserve">
<value>Image Bank</value> <value>Image Bank</value>
</data> </data>
<data name="fontBank" xml:space="preserve"> <data name="fontBank" xml:space="preserve">
<value /> <value>Font Bank</value>
</data> </data>
<data name="soundBank" xml:space="preserve"> <data name="soundBank" xml:space="preserve">
<value /> <value>Sound Bank</value>
</data> </data>
<data name="musicBank" xml:space="preserve"> <data name="musicBank" xml:space="preserve">
<value /> <value>Music Bank</value>
</data> </data>
<data name="last" xml:space="preserve"> <data name="last" xml:space="preserve">
<value>Last</value> <value>Last</value>
</data> </data>
<data name="unknown" xml:space="preserve"> <data name="unknown" xml:space="preserve">
<value /> <value>Unknown-</value>
</data> </data>
</root> </root>

@ -24,7 +24,7 @@
<value>Автор</value> <value>Автор</value>
</data> </data>
<data name="copyright" xml:space="preserve"> <data name="copyright" xml:space="preserve">
<value>Copyright</value> <value>Копирайт</value>
</data> </data>
<data name="frameName" xml:space="preserve"> <data name="frameName" xml:space="preserve">
<value>Название Сцены</value> <value>Название Сцены</value>
@ -44,4 +44,187 @@
<data name="frameEvents" xml:space="preserve"> <data name="frameEvents" xml:space="preserve">
<value>События Сцены</value> <value>События Сцены</value>
</data> </data>
<data name="unknown" xml:space="preserve">
<value>Неизвестный-</value>
</data>
<data name="soundOffsets" xml:space="preserve">
<value>Смещения звуков</value>
</data>
<data name="additionalObjectInstance" xml:space="preserve">
<value>Дополнительный инстанс сцены помогите</value>
</data>
<data name="appDoc" xml:space="preserve">
<value>Документация</value>
</data>
<data name="binaryFiles" xml:space="preserve">
<value>Бинарные файлы</value>
</data>
<data name="blurayOptions" xml:space="preserve">
<value>Настройки Bluray</value>
</data>
<data name="demoFilePath" xml:space="preserve">
<value>Путь к демо-файлу</value>
</data>
<data name="demoVersion" xml:space="preserve">
<value>Демо</value>
</data>
<data name="exeOnly" xml:space="preserve">
<value>Только для exe</value>
</data>
<data name="extHeader" xml:space="preserve">
<value>Расширенный заголовок</value>
</data>
<data name="extList" xml:space="preserve">
<value>Список расширений</value>
</data>
<data name="extraData" xml:space="preserve">
<value>Дополнительные данные</value>
</data>
<data name="extraPath" xml:space="preserve">
<value>Дополнительный путь</value>
</data>
<data name="fontBank" xml:space="preserve">
<value>Шрифты</value>
</data>
<data name="fontOffsets" xml:space="preserve">
<value>Смещения шрифтов</value>
</data>
<data name="frameEffects" xml:space="preserve">
<value>Эффекты Сцены</value>
</data>
<data name="FrameFadeIn" xml:space="preserve">
<value>Вход Сцены</value>
</data>
<data name="frameFadeInFrame" xml:space="preserve">
<value>Кадр Входа Сцены</value>
</data>
<data name="frameFadeOut" xml:space="preserve">
<value>Выход Сцены</value>
</data>
<data name="frameFadeOutFrame" xml:space="preserve">
<value>Кадр Выхода Сцены</value>
</data>
<data name="frameHandles" xml:space="preserve">
<value>Идентификаторы Сцен</value>
</data>
<data name="frameHeader" xml:space="preserve">
<value>Заголовок Сцены</value>
</data>
<data name="frameIphoneOptions" xml:space="preserve">
<value>Настройки айфона?</value>
</data>
<data name="frameLayerEffects" xml:space="preserve">
<value>Эффекты слоев сцены</value>
</data>
<data name="frameLayers" xml:space="preserve">
<value>Слои Сцены</value>
</data>
<data name="frameObjects" xml:space="preserve">
<value>Объекты Сцены</value>
</data>
<data name="framePalette" xml:space="preserve">
<value>Палитра Сцены</value>
</data>
<data name="framePassword" xml:space="preserve">
<value>Пароль Сцены</value>
</data>
<data name="framePlayHeader" xml:space="preserve">
<value>Заголовок воспроизведения</value>
</data>
<data name="frameVirtualRect" xml:space="preserve">
<value>Виртуальный член сцены</value>
</data>
<data name="globalEvents" xml:space="preserve">
<value>Глобальные события</value>
</data>
<data name="globalStringNames" xml:space="preserve">
<value>Названия глобальных строк</value>
</data>
<data name="globalStrings" xml:space="preserve">
<value>Глобальные строки</value>
</data>
<data name="globalValueNames" xml:space="preserve">
<value>Названия глобальных чисел</value>
</data>
<data name="globalValues" xml:space="preserve">
<value>Глобальные числа</value>
</data>
<data name="icon" xml:space="preserve">
<value>Иконка</value>
</data>
<data name="imageBank" xml:space="preserve">
<value>Изображения</value>
</data>
<data name="imagesOffsets" xml:space="preserve">
<value>Смещения изображений</value>
</data>
<data name="last" xml:space="preserve">
<value>Последний чанк</value>
</data>
<data name="menu" xml:space="preserve">
<value>Меню</value>
</data>
<data name="menuImages" xml:space="preserve">
<value>Изображения меню</value>
</data>
<data name="miniHeader" xml:space="preserve">
<value>Мини заголовок</value>
</data>
<data name="mosaicImageTable" xml:space="preserve">
<value>мозайка какая-то</value>
</data>
<data name="musicBank" xml:space="preserve">
<value>Музыка</value>
</data>
<data name="musicOffsets" xml:space="preserve">
<value>Смещения музыки</value>
</data>
<data name="mvTimerBase" xml:space="preserve">
<value>База таймера</value>
</data>
<data name="objectBank" xml:space="preserve">
<value>Объекты</value>
</data>
<data name="objectBank2" xml:space="preserve">
<value>Объекты 2</value>
</data>
<data name="objectCommon" xml:space="preserve">
<value>Данные Объекта</value>
</data>
<data name="objectEffects" xml:space="preserve">
<value>Эффекты Объекта</value>
</data>
<data name="objectHeader" xml:space="preserve">
<value>Заголовок Объекта</value>
</data>
<data name="objectName" xml:space="preserve">
<value>Название Объекта</value>
</data>
<data name="objectUnknown" xml:space="preserve">
<value>Неизвестная часть объекта</value>
</data>
<data name="otherExts" xml:space="preserve">
<value>Дополнительные Расширения</value>
</data>
<data name="outputPath" xml:space="preserve">
<value>Выходной путь</value>
</data>
<data name="projectPath" xml:space="preserve">
<value>Путь проекта</value>
</data>
<data name="protection" xml:space="preserve">
<value>Защита</value>
</data>
<data name="randomSeed" xml:space="preserve">
<value>Рандомное семя</value>
</data>
<data name="secNum" xml:space="preserve">
<value>Защитное число</value>
</data>
<data name="shaders" xml:space="preserve">
<value>Шейдеры</value>
</data>
<data name="soundBank" xml:space="preserve">
<value>Звуки</value>
</data>
</root> </root>

@ -105,6 +105,24 @@ namespace CTFAK.Properties {
} }
} }
/// <summary>
/// Looks up a localized string similar to Frame Count.
/// </summary>
internal static string frameCount {
get {
return ResourceManager.GetString("frameCount", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Unique FrameItems.
/// </summary>
internal static string frameitemCount {
get {
return ResourceManager.GetString("frameitemCount", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to Copyright. /// Looks up a localized string similar to Copyright.
/// </summary> /// </summary>
@ -123,6 +141,15 @@ namespace CTFAK.Properties {
} }
} }
/// <summary>
/// Looks up a localized string similar to Number of Images.
/// </summary>
internal static string imageCount {
get {
return ResourceManager.GetString("imageCount", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to Loading. /// Looks up a localized string similar to Loading.
/// </summary> /// </summary>
@ -132,6 +159,15 @@ namespace CTFAK.Properties {
} }
} }
/// <summary>
/// Looks up a localized string similar to Number of Musics.
/// </summary>
internal static string musicCount {
get {
return ResourceManager.GetString("musicCount", resourceCulture);
}
}
/// <summary> /// <summary>
/// Looks up a localized string similar to Open Dump Folder. /// Looks up a localized string similar to Open Dump Folder.
/// </summary> /// </summary>
@ -158,5 +194,14 @@ namespace CTFAK.Properties {
return ResourceManager.GetString("selectFile", resourceCulture); return ResourceManager.GetString("selectFile", resourceCulture);
} }
} }
/// <summary>
/// Looks up a localized string similar to Number of Sounds.
/// </summary>
internal static string soundCount {
get {
return ResourceManager.GetString("soundCount", resourceCulture);
}
}
} }
} }

@ -44,4 +44,19 @@
<data name="readingFrame" xml:space="preserve"> <data name="readingFrame" xml:space="preserve">
<value>Reading Frame:</value> <value>Reading Frame:</value>
</data> </data>
<data name="imageCount" xml:space="preserve">
<value>Number of Images</value>
</data>
<data name="musicCount" xml:space="preserve">
<value>Number of Musics</value>
</data>
<data name="soundCount" xml:space="preserve">
<value>Number of Sounds</value>
</data>
<data name="frameCount" xml:space="preserve">
<value>Frame Count</value>
</data>
<data name="frameitemCount" xml:space="preserve">
<value>Unique FrameItems</value>
</data>
</root> </root>

@ -51,4 +51,19 @@
<data name="readingFrame" xml:space="preserve"> <data name="readingFrame" xml:space="preserve">
<value>Reading Frame:</value> <value>Reading Frame:</value>
</data> </data>
<data name="imageCount" xml:space="preserve">
<value>Number of Images</value>
</data>
<data name="soundCount" xml:space="preserve">
<value>Number of Sounds</value>
</data>
<data name="musicCount" xml:space="preserve">
<value>Number of Musics</value>
</data>
<data name="frameCount" xml:space="preserve">
<value>Frame Count</value>
</data>
<data name="frameitemCount" xml:space="preserve">
<value>Unique FrameItems</value>
</data>
</root> </root>

@ -21,7 +21,7 @@
<value>Сохранить Музыку</value> <value>Сохранить Музыку</value>
</data> </data>
<data name="dumpSorted" xml:space="preserve"> <data name="dumpSorted" xml:space="preserve">
<value>Сохранение с сортировкой</value> <value>Сохранить Картинки с сортировкой</value>
</data> </data>
<data name="dumpSounds" xml:space="preserve"> <data name="dumpSounds" xml:space="preserve">
<value>Сохранить звуки</value> <value>Сохранить звуки</value>
@ -44,4 +44,19 @@
<data name="readingFrame" xml:space="preserve"> <data name="readingFrame" xml:space="preserve">
<value>Чтение сцены:</value> <value>Чтение сцены:</value>
</data> </data>
<data name="imageCount" xml:space="preserve">
<value>Количество Картинок</value>
</data>
<data name="musicCount" xml:space="preserve">
<value>Количество Музыки</value>
</data>
<data name="soundCount" xml:space="preserve">
<value>Количество Звуков</value>
</data>
<data name="frameCount" xml:space="preserve">
<value>Количество Сцен</value>
</data>
<data name="frameitemCount" xml:space="preserve">
<value>Уникальных Объектов</value>
</data>
</root> </root>

@ -26,50 +26,17 @@ namespace CTFAK.Utils
public static void MakeKey(string data1, string data2, string data3) public static void MakeKey(string data1, string data2, string data3)
{ {
var russian = false; IntPtr keyPtr;
IntPtr keyPtr=new IntPtr(); var combined = "";
if (russian) combined += data1;
{ combined += data2;
combined += data3;
Logger.Log("Combined data " + combined, true, ConsoleColor.Yellow);
var fixed1 = FixString(Encoding.Unicode.GetBytes(data1)); keyPtr = Marshal.StringToHGlobalAnsi(combined);
var data1Ptr = Marshal.AllocHGlobal(fixed1.Length);
Marshal.Copy(fixed1,0,data1Ptr,fixed1.Length);
var fixed2 = FixString(Encoding.Unicode.GetBytes(data2));
var data2Ptr = Marshal.AllocHGlobal(fixed2.Length);
Marshal.Copy(fixed2,0,data2Ptr,fixed2.Length);
var fixed3 = FixString(Encoding.Unicode.GetBytes(data3));
var data3Ptr = Marshal.AllocHGlobal(fixed3.Length);
Marshal.Copy(fixed3,0,data1Ptr,fixed3.Length);
keyPtr = make_key_w(data1Ptr,data2Ptr,data3Ptr,MagicChar);
Marshal.FreeHGlobal(data1Ptr);
Marshal.FreeHGlobal(data2Ptr);
Marshal.FreeHGlobal(data3Ptr);
}
else
{
var rawKey = "";
rawKey += data1;
rawKey += data2;
rawKey += data3;
Logger.Log("Combined data " + rawKey, true, ConsoleColor.Yellow);
keyPtr = Marshal.StringToHGlobalAnsi(rawKey);
keyPtr = make_key_combined(keyPtr, MagicChar); keyPtr = make_key_combined(keyPtr, MagicChar);
}
byte[] key = new byte[256]; byte[] key = new byte[256];
Marshal.Copy(keyPtr, key, 0, 256); Marshal.Copy(keyPtr, key, 0, 256);
_decryptionKey = key; _decryptionKey = key;
Logger.Log($"First 16-Bytes of key: {_decryptionKey.GetHex(16)}", true, ConsoleColor.Yellow); Logger.Log($"First 16-Bytes of key: {_decryptionKey.GetHex(16)}", true, ConsoleColor.Yellow);
Logger.Log(Encoding.Unicode.GetString(_decryptionKey)); Logger.Log(Encoding.Unicode.GetString(_decryptionKey));
File.WriteAllBytes($"{Settings.DumpPath}\\key.bin", _decryptionKey); File.WriteAllBytes($"{Settings.DumpPath}\\key.bin", _decryptionKey);

@ -7,6 +7,13 @@ namespace CTFAK.Utils
public static class Logger public static class Logger
{ {
static StreamWriter _writer; static StreamWriter _writer;
public static void Log(object text, bool logToScreen = true, ConsoleColor color = ConsoleColor.White,
bool logToConsole = true)
{
Log(text.ToString(), logToScreen, color, logToConsole);
}
public static void Log(string text, bool logToScreen = true,ConsoleColor color = ConsoleColor.White, bool logToConsole=true) public static void Log(string text, bool logToScreen = true,ConsoleColor color = ConsoleColor.White, bool logToConsole=true)
{ {

Loading…
Cancel
Save