You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
160 lines
6.7 KiB
C#
160 lines
6.7 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using DotNetCTFDumper.MMFParser.EXE.Loaders;
|
|
using DotNetCTFDumper.MMFParser.EXE.Loaders.Banks;
|
|
using DotNetCTFDumper.Utils;
|
|
|
|
namespace DotNetCTFDumper.MMFParser.EXE
|
|
{
|
|
public class GameData
|
|
{
|
|
public int RuntimeVersion;
|
|
public int RuntimeSubversion;
|
|
public int ProductBuild;
|
|
public Constants.Products ProductVersion;
|
|
public int Build;
|
|
public ChunkList GameChunks;
|
|
|
|
public string Name;
|
|
public string Author;
|
|
public string Copyright;
|
|
public string AboutText;
|
|
public string Doc;
|
|
|
|
public string EditorFilename;
|
|
public string TargetFilename;
|
|
|
|
//public ExeOnly Exe_Only;
|
|
|
|
public AppMenu Menu;
|
|
public AppIcon Icon;
|
|
|
|
public AppHeader Header;
|
|
//public ExtentedHeader ExtHeader;
|
|
|
|
public FontBank Fonts;
|
|
public SoundBank Sounds;
|
|
public MusicBank Music;
|
|
public ImageBank Images;
|
|
|
|
public GlobalValues GValues;
|
|
public GlobalStrings GStrings;
|
|
public static FrameItems TestItems;
|
|
|
|
//public Extensions Ext;
|
|
|
|
public FrameItems Frameitems;
|
|
|
|
public List<Frame> Frames = new List<Frame>();
|
|
|
|
|
|
public void Read(ByteReader exeReader)
|
|
{
|
|
string magic = exeReader.ReadAscii(4); //Reading header
|
|
|
|
//Checking for header
|
|
if (magic == Constants.UnicodeGameHeader) Constants.IsUnicode = true;//PAMU
|
|
else if (magic == Constants.GameHeader) Constants.IsUnicode = false;//PAME
|
|
else Logger.Log("Couldn't found any known headers", true, ConsoleColor.Red);//Header not found
|
|
|
|
RuntimeVersion = exeReader.ReadUInt16();
|
|
RuntimeSubversion = exeReader.ReadUInt16();
|
|
ProductVersion = (Constants.Products)exeReader.ReadInt32();
|
|
ProductBuild = exeReader.ReadInt32();//Easy Access
|
|
Settings.Build=ProductBuild;
|
|
|
|
Build = ProductBuild;
|
|
|
|
GameChunks = new ChunkList(); //Reading game chunks
|
|
GameChunks.Read(exeReader);
|
|
|
|
//Load chunks into gamedata for easier access
|
|
//Can only be accessed from here AFTER loading all the chunks
|
|
//If you need it AT LOADING - use ChunkList.get_chunk<ChunkType>();
|
|
if (GameChunks.GetChunk<AppName>() != null) Name = GameChunks.GetChunk<AppName>().Value;
|
|
if (GameChunks.GetChunk<Copyright>() != null) Copyright = GameChunks.GetChunk<Copyright>().Value;
|
|
if (GameChunks.GetChunk<AppAuthor>()!=null) Author = GameChunks.GetChunk<AppAuthor>().Value;
|
|
if (GameChunks.GetChunk<EditorFilename>() != null) EditorFilename = GameChunks.GetChunk<EditorFilename>().Value;
|
|
if (GameChunks.GetChunk<TargetFilename>() != null) TargetFilename = GameChunks.GetChunk<TargetFilename>().Value;
|
|
if (GameChunks.GetChunk<AppMenu>() != null) Menu = GameChunks.GetChunk<AppMenu>();
|
|
if (GameChunks.GetChunk<AppHeader>() != null) Header = GameChunks.GetChunk<AppHeader>();
|
|
if (GameChunks.GetChunk<SoundBank>() != null) Sounds = GameChunks.GetChunk<SoundBank>();
|
|
if (GameChunks.GetChunk<MusicBank>() != null) Music = GameChunks.GetChunk<MusicBank>();
|
|
if (GameChunks.GetChunk<FontBank>() != null) Fonts = GameChunks.GetChunk<FontBank>();
|
|
if (GameChunks.GetChunk<ImageBank>() != null) Images = GameChunks.GetChunk<ImageBank>();
|
|
if (GameChunks.GetChunk<AppIcon>() != null) Icon = GameChunks.GetChunk<AppIcon>();
|
|
if (GameChunks.GetChunk<GlobalStrings>() != null) GStrings = GameChunks.GetChunk<GlobalStrings>();
|
|
if (GameChunks.GetChunk<GlobalValues>() != null) GValues = GameChunks.GetChunk<GlobalValues>();
|
|
if (GameChunks.GetChunk<FrameItems>() != null) Frameitems = GameChunks.GetChunk<FrameItems>();
|
|
Frames = GameChunks.Frames; //Its a list, so i have to manually parse them in chunk list.
|
|
|
|
//Print();
|
|
}
|
|
public void Print()
|
|
{
|
|
Logger.Log($"GameData Info:", true, ConsoleColor.DarkGreen);
|
|
Logger.Log($" Runtime Version: {RuntimeVersion}", true, ConsoleColor.DarkGreen);
|
|
Logger.Log($" Runtime Subversion: { RuntimeSubversion}", true, ConsoleColor.DarkGreen);
|
|
Logger.Log($" Product Version: { ((Constants.Products)ProductVersion).ToString()}", true, ConsoleColor.DarkGreen);
|
|
Logger.Log($" Product Build: {ProductBuild}", true, ConsoleColor.DarkGreen);
|
|
Logger.Log($" {(Constants.IsUnicode ? "Unicode" : "NonUnicode")} Game", true, ConsoleColor.DarkGreen);
|
|
Logger.Log($"Game Info:", true, ConsoleColor.Cyan);
|
|
Logger.Log($" Name:{Name}", true, ConsoleColor.Cyan);
|
|
Logger.Log($" Author:{Author}", true, ConsoleColor.Cyan);
|
|
Logger.Log($" Copyright:{Copyright}", true, ConsoleColor.Cyan);
|
|
Logger.Log($" Editor Filename:{EditorFilename}", true, ConsoleColor.Cyan);
|
|
Logger.Log($" Target Filename:{TargetFilename}", true, ConsoleColor.Cyan);
|
|
Logger.Log($" Screen Resolution: {Header.WindowWidth}x{Header.WindowHeight}", true, ConsoleColor.Cyan);
|
|
|
|
Logger.Log($" Frame Count:{Header.NumberOfFrames}", true, ConsoleColor.Cyan);
|
|
if (GStrings != null && GStrings.Items.Count > 0)
|
|
{
|
|
|
|
|
|
Logger.Log($" Global Strings:", true, ConsoleColor.Cyan);
|
|
foreach (var item in GStrings.Items)
|
|
{
|
|
Logger.Log($" {item}");
|
|
}
|
|
}
|
|
if (GValues != null && GValues.Items.Count > 0)
|
|
{
|
|
|
|
|
|
Logger.Log($" Global Values:", true, ConsoleColor.Cyan);
|
|
foreach (var item in GValues.Items)
|
|
{
|
|
Logger.Log($" {item.ToString()}");
|
|
}
|
|
}
|
|
if(Frames!=null&&Frames.Count>0)
|
|
{
|
|
Logger.Log("Frames: ", true, ConsoleColor.Cyan);
|
|
foreach (var item in Frames)
|
|
{
|
|
Logger.Log($" Frame: {item.Name,25}, Size: {item.Width,4}x{item.Height,4}, Number of objects: {item.CountOfObjs,5}", true, ConsoleColor.Cyan);
|
|
var objects = item.Chunks.GetChunk<ObjectInstances>();
|
|
if (objects != null)
|
|
{
|
|
foreach (var obj in objects.Items)
|
|
{
|
|
Logger.Log($" Object: {obj.Name} - {obj.Handle} - {obj.FrameItem.ObjectType}", true, ConsoleColor.Green);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
}
|