PAGfx 0.10

This commit is contained in:
CTurt 2014-09-19 22:48:59 +01:00
parent deabaea0c7
commit 4d5b47ad7b
5 changed files with 2132 additions and 0 deletions

33
AssemblyInfo.cs Normal file
View File

@ -0,0 +1,33 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("PAGfx")]
[assembly: AssemblyDescription("PAGfx: Converts graphics to be used with PAlib")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("forum.palib.info")]
[assembly: AssemblyProduct("PAGfx")]
[assembly: AssemblyCopyright("Copyright © Mollusk 2009")]
[assembly: AssemblyTrademark("PAGfx")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("9cd2996d-bf62-4ff3-aa7c-08031e9df3e8")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
[assembly: AssemblyVersion("0.10.0.0")]
[assembly: AssemblyFileVersion("0.10.0.0")]

431
LoadINI.cs Normal file
View File

@ -0,0 +1,431 @@
using System;
using System.IO;
using System.Text;
namespace PAGfx.Common {
static class LoadINI {
// Duplicated code
static UInt16 PA_RGB(int r, int g, int b) {
return (UInt16) ((1 << 15) | r | (g << 5) | (b << 10));
}
// Ini parser structures...
public struct IniSpriteStruct {
public string Name;
public string Path; // Path to open file
public int ColorMode; // 0 pour 16 couleurs, 1 pour 256, 2 pour 16bit...
public string PaletteName;
};
public struct IniBgStruct {
public string Name;
public string Path; // Path to open file...
public int BgMode; // 8bit, 16bit, TileBg, RotBg, LargeMap
public string PaletteName;
};
public struct IniTexStruct {
public string Name;
public string Path; // Path to open file...
public int ColorMode; // 8bit, 16bit, TileBg, RotBg, LargeMap
public string PaletteName;
};
public struct TranspStruct {
public int Number; // Number (0-4)
public UInt16 Color; // Color
public string Name; // Colorname...
}
public struct IniStruct {
public string[] Lines; // Different lines
public int NLines; // Number of lines
public string[] Strings; // Strings in a line...
}
static public int NSprites = 0; // Nombre de sprites
static public int NBackgrounds = 0; // Nombre de bg
static public int NTextures = 0; // Nombre de textures
static public IniSpriteStruct[] IniSprites;
static public IniBgStruct[] IniBgs;
static public IniTexStruct[] IniTextures;
static public TranspStruct TranspColor;
static IniStruct Ini;
static public string[] SpriteModes;
static public string[] BgModes;
static public string[] TextureModes;
static public string[] TranspColorStrings;
static UInt16[] TranspColors;
static void InitTranspColor() {
// Init the color modes...
TranspColorStrings = new string[5];
TranspColorStrings[0] = "Black";
TranspColorStrings[1] = "White";
TranspColorStrings[2] = "Magenta";
TranspColorStrings[3] = "Green";
TranspColorStrings[4] = "(Custom)";
TranspColors = new UInt16[5];
TranspColors[0] = PA_RGB(0, 0, 0);
TranspColors[1] = PA_RGB(31, 31, 31);
TranspColors[2] = PA_RGB(31, 0, 31);
TranspColors[3] = PA_RGB(0, 31, 0);
TranspColors[4] = PA_RGB(0, 0, 0);
TranspColor.Number = GetTranspColor(ref TranspColor.Name, ref TranspColor.Color);
}
static Int32 ParseHex(string h) {
return Int32.Parse(h, System.Globalization.NumberStyles.HexNumber);
}
static int GetTranspColor(ref string name, ref UInt16 color) {
// Transparent color...
int Transp = 0;
for(int i = 0; i < Ini.NLines; i++) {
Ini.Strings = Ini.Lines[i].Split();
if(Ini.Strings[0] == "#TranspColor") {
//Look for the transparent color...
bool wasIt = false;
for(int j = 0; j < 4; j++)
if(Ini.Strings[1].ToLower() == TranspColorStrings[j].ToLower()){
Transp = j;
wasIt = true;
}
if(!wasIt) {
string sp = Ini.Strings[1].Trim();
if(sp.Length == 6) {
int r = ParseHex(sp.Substring(0, 2)) / 8;
int g = ParseHex(sp.Substring(2, 2)) / 8;
int b = ParseHex(sp.Substring(4, 2)) / 8;
color = PA_RGB(r, g, b);
name = sp;
Transp = 4;
}
}else{
name = TranspColorStrings[Transp];
color = TranspColors[Transp];
}
break;
}
}
return Transp;
}
static string replaceInvalidChars(string n) {
string o = "" + n[0];
if((n[0] >= '0') && (n[0] <= '9')) o = '_' + o;
for(int i = 1; i < n.Length; i++)
if("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_".IndexOf(n[i]) == -1)
o += '_';
else
o += n[i];
return o;
}
// Extracts the filename (removing all the path and the extension)
static public string ExtractName(string Path) {
return replaceInvalidChars(System.IO.Path.GetFileNameWithoutExtension(Path));
}
// Extracts the path from the ini file
static string ExtractPath() {
bool tempok = false;
while(!tempok) {
byte[] tempbyte = Encoding.ASCII.GetBytes(Ini.Strings[0]);
for(int i = 0; i < (tempbyte.Length - 1) && (!tempok); i++)
if(tempbyte[i] == '.')
tempok = true; // On cherche un fichier...
if(!tempok) {
Ini.Strings[0] += " " + Ini.Strings[1];
for(int j = 1; j < Ini.Strings.Length - 1; j++) {
Ini.Strings[j] = Ini.Strings[j + 1];
}
}
}
Console.WriteLine(Ini.Strings[0]);
return Ini.Strings[0];
}
static bool GetSpriteInfo() {
// Puts the sprite infos into the sprite structure
bool FileOk = true;
IniSprites[NSprites].Path = ExtractPath();
string PathBackup = IniSprites[NSprites].Path;
FileOk = File.Exists(IniSprites[NSprites].Path);
if(!FileOk && !Path.IsPathRooted(IniSprites[NSprites].Path)) {
IniSprites[NSprites].Path = System.AppDomain.CurrentDomain.BaseDirectory + IniSprites[NSprites].Path;
FileOk = File.Exists(IniSprites[NSprites].Path);
}
if(FileOk) {
IniSprites[NSprites].Name = ExtractName(IniSprites[NSprites].Path);
// Try to get the color mode, sets to 256Colors by default
IniSprites[NSprites].ColorMode = 1;
//Console.Write(Ini.Strings.Length);
if(Ini.Strings.Length > 1){
// Correct InfiniteMap -> UnlimitedBg
if(Ini.Strings[1].ToLower() == "infinitemap")
Ini.Strings[1] = "UnlimitedBg";
for(int i = 0; i < 5; i++)
if(Ini.Strings[1].ToLower() == SpriteModes[i].ToLower())
IniSprites[NSprites].ColorMode = i;
}
// Try to get the palette name, gives the sprite name if no palette found
if(IniSprites[NSprites].ColorMode != 2) // If not 16bit...
{
IniSprites[NSprites].PaletteName = IniSprites[NSprites].Name;
if(Ini.Strings.Length > 2)
IniSprites[NSprites].PaletteName = replaceInvalidChars(Ini.Strings[2]);
}
NSprites++;
}
if(!FileOk) {
Console.WriteLine("ERROR: File " + PathBackup + " could not be found. Please check the filename for a typo... Press any key to continue.");
Console.ReadKey();
}
return FileOk;
}
static string InitSpriteInfos() {
// Init the different sprite modes...
SpriteModes = new string[5];
SpriteModes[0] = "16colors";
SpriteModes[1] = "256colors";
SpriteModes[2] = "16bit";
SpriteModes[3] = "KeepPal";
SpriteModes[4] = "JustPal";
IniSprites = new IniSpriteStruct[10000]; // Memory alloc...
// Get the starting line for sprites...
int SpriteLine = -1;
for(int i = 0; i < Ini.NLines; i++) {
Ini.Strings = Ini.Lines[i].Split();
if(Ini.Strings[0] == "#Sprites") {
SpriteLine = i;
break;
}
}
SpriteLine++; // First sprite info
NSprites = 0;
for(int i = 0; ; i++) {
if(SpriteLine + i == Ini.NLines)
break;
Ini.Strings = Ini.Lines[SpriteLine + i].Split();
if((Ini.Strings[0].Length > 0) && (!Ini.Strings[0].StartsWith("#"))) {
if(!GetSpriteInfo())
return "Sorry, " + IniSprites[NSprites].Path + " does not exist!";
} else
break; // On a trouvé la bonne ligne !
}
return "";
}
static bool GetBgInfo() {
// Puts the sprite infos into the sprite structure
bool FileOk = true;
IniBgs[NBackgrounds].Path = ExtractPath();
string PathBackup = IniBgs[NBackgrounds].Path;
FileOk = File.Exists(IniBgs[NBackgrounds].Path);
if(!FileOk && !Path.IsPathRooted(IniBgs[NBackgrounds].Path)) {
IniBgs[NBackgrounds].Path = System.AppDomain.CurrentDomain.BaseDirectory + IniBgs[NBackgrounds].Path;
FileOk = File.Exists(IniBgs[NBackgrounds].Path);
}
if(FileOk) {
IniBgs[NBackgrounds].Name = ExtractName(IniBgs[NBackgrounds].Path);
// Try to get the color mode, sets to EasyBg by default
IniBgs[NBackgrounds].BgMode = 6; // EasyBg
if(Ini.Strings.Length > 1){
for(int i = 0; i < 10; i++){
// Correct InfiniteMap -> UnlimitedBg
if(Ini.Strings[1].ToLower() == "infinitemap")
Ini.Strings[1] = "UnlimitedBg";
if(Ini.Strings[1].ToLower() == BgModes[i].ToLower())
IniBgs[NBackgrounds].BgMode = i;
}
}
if(IniBgs[NBackgrounds].BgMode != 1) {
// Try to get the palette name, gives the sprite name if no palette found
IniBgs[NBackgrounds].PaletteName = IniBgs[NBackgrounds].Name;
if(Ini.Strings.Length > 2)
IniBgs[NBackgrounds].PaletteName = replaceInvalidChars(Ini.Strings[2]);
}
NBackgrounds++;
}
if(!FileOk) {
Console.WriteLine("ERROR: File " + PathBackup + " could not be found. Please check the filename for a typo... Press any key to continue.");
Console.ReadKey();
}
return FileOk;
}
static string InitBgInfos() {
// Init the different sprite modes...
BgModes = new string[10];
BgModes[0] = "8bit";
BgModes[1] = "16bit";
BgModes[2] = ""; // OBSOLETE (was TileBg)
BgModes[3] = "RotBg";
BgModes[4] = ""; // OBSOLETE (was LargeMap)
BgModes[5] = "UnlimitedBg";
BgModes[6] = "EasyBg";
BgModes[7] = "16cFont";
BgModes[8] = "8bitFont";
BgModes[9] = "1bitFont";
IniBgs = new IniBgStruct[10000]; // Memory alloc...
// Get the starting line for backgrounds...
int BgLine = -1;
for(int i = 0; i < Ini.NLines; i++) {
Ini.Strings = Ini.Lines[i].Split();
if(Ini.Strings[0] == "#Backgrounds") {
BgLine = i;
break;
}
}
BgLine++; // First bg info
NBackgrounds = 0;
for(int i = 0; ; i++) {
if(BgLine + i == Ini.NLines)
break;
Ini.Strings = Ini.Lines[BgLine + i].Split();
if((Ini.Strings[0].Length > 0) && (!Ini.Strings[0].StartsWith("#"))) {
if(!GetBgInfo())
return "Sorry, " + IniBgs[NBackgrounds].Path + " does not exist!";
} else
break; // On a trouvé la bonne ligne !
}
return "";
}
static bool GetTextureInfo() {
// Puts the sprite infos into the sprite structure
bool FileOk = true;
IniTextures[NTextures].Path = ExtractPath();
string PathBackup = IniTextures[NTextures].Path;
FileOk = File.Exists(IniTextures[NTextures].Path);
if(!FileOk && !Path.IsPathRooted(IniTextures[NTextures].Path)) {
IniTextures[NTextures].Path = System.AppDomain.CurrentDomain.BaseDirectory + IniTextures[NTextures].Path;
FileOk = File.Exists(IniTextures[NTextures].Path);
}
if(FileOk) {
IniTextures[NTextures].Name = ExtractName(IniTextures[NTextures].Path);
// Try to get the color mode, sets to 256Colors by default
IniTextures[NTextures].ColorMode = 1;
//Console.Write(Ini.Strings.Length);
if(Ini.Strings.Length > 1)
for(int i = 0; i < 6; i++)
if(Ini.Strings[1].ToLower() == TextureModes[i].ToLower())
IniTextures[NTextures].ColorMode = i;
// Try to get the palette name, gives the sprite name if no palette found
if(IniTextures[NTextures].ColorMode != 2) // If not 16bit...
{
IniTextures[NTextures].PaletteName = IniTextures[NTextures].Name;
if(Ini.Strings.Length > 2)
IniTextures[NTextures].PaletteName = replaceInvalidChars(Ini.Strings[2]);
}
NTextures++;
}
if(!FileOk) {
Console.WriteLine("ERROR: File " + PathBackup + " could not be found. Please check the filename for a typo... Press any key to continue.");
Console.ReadKey();
}
return FileOk;
}
static string InitTextureInfos() {
// Init the different sprite modes...
TextureModes = new string[6];
TextureModes[0] = "16colors";
TextureModes[1] = "256colors";
TextureModes[2] = "16bit";
TextureModes[3] = "4colors";
TextureModes[4] = "A3I5";
TextureModes[5] = "A5I3";
IniTextures = new IniTexStruct[10000]; // Memory alloc...
// Get the starting line for sprites...
int TextureLine = -1;
for(int i = 0; i < Ini.NLines; i++) {
Ini.Strings = Ini.Lines[i].Split();
if(Ini.Strings[0] == "#Textures") {
TextureLine = i;
break;
}
}
TextureLine++; // First sprite info
NTextures = 0;
for(int i = 0; ; i++) {
if(TextureLine + i == Ini.NLines)
break;
Ini.Strings = Ini.Lines[TextureLine + i].Split();
if((Ini.Strings[0].Length > 0) && (!Ini.Strings[0].StartsWith("#"))) {
if(!GetTextureInfo())
return "Sorry, " + IniTextures[NTextures].Path + " does not exist!";
} else
break; // On a trouvé la bonne ligne !
}
return "";
}
static string InitIni(string IniFile) {
// Open the ini file
FileStream ThisFile = null;
StreamReader Reader = null;
Ini.Lines = new string[10000]; // Ini line reader
Ini.NLines = 0;
try {
ThisFile = new FileStream(System.AppDomain.CurrentDomain.BaseDirectory + IniFile, FileMode.Open);
Reader = new StreamReader(ThisFile);
// Reads the whole ini file
while((Ini.Lines[Ini.NLines] = Reader.ReadLine()) != null) {
Ini.NLines++;
}
} catch(Exception ex) {
return "Error: " + ex.Message;
} finally {
if(Reader != null) Reader.Close();
if(ThisFile != null) ThisFile.Close();
}
return "";
}
static public string IniParse(string IniFile) {
// Extract the basic ini lines
string res = InitIni(IniFile);
if(res != "") return res;
InitTranspColor(); // TranspColor infos in the ini file...
InitSpriteInfos(); // Number of sprites, sorts the info too
InitBgInfos(); // Number of Backgrounds; sorts the info too
InitTextureInfos(); // Textures...
return "";
}
}
}

49
PAGfx.csproj Normal file
View File

@ -0,0 +1,49 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.50727</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{1CDEB84F-0CAA-46D1-8CCC-AC7948A947CA}</ProjectGuid>
<OutputType>Exe</OutputType>
<AssemblyName>PAGfx</AssemblyName>
<CodePage>1252</CodePage>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug</OutputPath>
<DefineConstants>DEBUG</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>none</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'ReleaseMono|AnyCPU' ">
<DebugType>none</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\ReleaseMono</OutputPath>
<DefineConstants>VER_MONO</DefineConstants>
<WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Drawing" />
</ItemGroup>
<ItemGroup>
<Compile Include="Program.cs" />
<Compile Include="LoadINI.cs" />
<Compile Include="AssemblyInfo.cs" />
</ItemGroup>
</Project>

BIN
PAGfx.pidb Normal file

Binary file not shown.

1619
Program.cs Normal file

File diff suppressed because it is too large Load Diff