From fac126223217e198966ff15e5738cca689c29d79 Mon Sep 17 00:00:00 2001 From: "Mike A. Trethewey" Date: Sat, 28 Oct 2017 02:37:36 -0700 Subject: [PATCH] Initial commit --- .gitattributes | 2 + .gitignore | 299 +++++++++++ .vscode/launch.json | 16 + App.config | 6 + Form1.Designer.cs | 493 ++++++++++++++++++ Form1.cs | 869 +++++++++++++++++++++++++++++++ Form1.resx | 159 ++++++ ImporterForm.Designer.cs | 46 ++ ImporterForm.cs | 20 + ImporterForm.resx | 120 +++++ PaletteCreator.csproj | 102 ++++ Program.cs | 22 + Properties/AssemblyInfo.cs | 36 ++ Properties/Resources.Designer.cs | 71 +++ Properties/Resources.resx | 117 +++++ Properties/Settings.Designer.cs | 30 ++ Properties/Settings.settings | 7 + README.md | 1 + 18 files changed, 2416 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 .vscode/launch.json create mode 100644 App.config create mode 100644 Form1.Designer.cs create mode 100644 Form1.cs create mode 100644 Form1.resx create mode 100644 ImporterForm.Designer.cs create mode 100644 ImporterForm.cs create mode 100644 ImporterForm.resx create mode 100644 PaletteCreator.csproj create mode 100644 Program.cs create mode 100644 Properties/AssemblyInfo.cs create mode 100644 Properties/Resources.Designer.cs create mode 100644 Properties/Resources.resx create mode 100644 Properties/Settings.Designer.cs create mode 100644 Properties/Settings.settings create mode 100644 README.md diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..eba1110 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Auto detect text files and perform LF normalization +* text=auto \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f652b45 --- /dev/null +++ b/.gitignore @@ -0,0 +1,299 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ + +# Visual Studio 2015 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ +**/Properties/launchSettings.json + +*_i.c +*_p.c +*_i.h +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/packages/* +# except build/, which is used as an MSBuild target. +!**/packages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/packages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Typescript v1 declaration files +typings/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# JetBrains Rider +.idea/ +*.sln.iml + +# CodeRush +.cr/ + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..61913d1 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,16 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "(Windows) Launch", + "type": "cppvsdbg", + "request": "launch", + "program": "${workspaceRoot}/Release/PaletteCreator.exe", + "args": [], + "stopAtEntry": false, + "cwd": "${workspaceRoot}", + "environment": [], + "externalConsole": true + } + ] + } \ No newline at end of file diff --git a/App.config b/App.config new file mode 100644 index 0000000..88fa402 --- /dev/null +++ b/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Form1.Designer.cs b/Form1.Designer.cs new file mode 100644 index 0000000..3f68f07 --- /dev/null +++ b/Form1.Designer.cs @@ -0,0 +1,493 @@ +namespace PaletteCreator +{ + partial class Form1 + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.label1 = new System.Windows.Forms.Label(); + this.pictureBox2 = new System.Windows.Forms.PictureBox(); + this.comboBox1 = new System.Windows.Forms.ComboBox(); + this.label2 = new System.Windows.Forms.Label(); + this.button1 = new System.Windows.Forms.Button(); + this.colorDialog1 = new System.Windows.Forms.ColorDialog(); + this.button3 = new System.Windows.Forms.Button(); + this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog(); + this.openFileDialog2 = new System.Windows.Forms.OpenFileDialog(); + this.saveFileDialog1 = new System.Windows.Forms.SaveFileDialog(); + this.button4 = new System.Windows.Forms.Button(); + this.button5 = new System.Windows.Forms.Button(); + this.button6 = new System.Windows.Forms.Button(); + this.saveFileDialog2 = new System.Windows.Forms.SaveFileDialog(); + this.saveFileDialog3 = new System.Windows.Forms.SaveFileDialog(); + this.label3 = new System.Windows.Forms.Label(); + this.button7 = new System.Windows.Forms.Button(); + this.button8 = new System.Windows.Forms.Button(); + this.openFileDialog3 = new System.Windows.Forms.OpenFileDialog(); + this.openFileDialog4 = new System.Windows.Forms.OpenFileDialog(); + this.saveFileDialog4 = new System.Windows.Forms.SaveFileDialog(); + this.button2 = new System.Windows.Forms.Button(); + this.openFileDialog5 = new System.Windows.Forms.OpenFileDialog(); + this.button9 = new System.Windows.Forms.Button(); + this.saveFileDialog5 = new System.Windows.Forms.SaveFileDialog(); + this.label4 = new System.Windows.Forms.Label(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.button10 = new System.Windows.Forms.Button(); + this.label5 = new System.Windows.Forms.Label(); + this.label6 = new System.Windows.Forms.Label(); + this.label7 = new System.Windows.Forms.Label(); + this.checkBox1 = new System.Windows.Forms.CheckBox(); + this.button11 = new System.Windows.Forms.Button(); + this.openFileDialog6 = new System.Windows.Forms.OpenFileDialog(); + this.saveFileDialog6 = new System.Windows.Forms.SaveFileDialog(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(134, 9); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(85, 13); + this.label1.TabIndex = 1; + this.label1.Text = "Selected Palette"; + // + // pictureBox2 + // + this.pictureBox2.Location = new System.Drawing.Point(137, 25); + this.pictureBox2.Name = "pictureBox2"; + this.pictureBox2.Size = new System.Drawing.Size(512, 32); + this.pictureBox2.TabIndex = 2; + this.pictureBox2.TabStop = false; + this.pictureBox2.DoubleClick += new System.EventHandler(this.pictureBox2_DoubleClick); + this.pictureBox2.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.pictureBox2_MouseDoubleClick); + // + // comboBox1 + // + this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.comboBox1.FormattingEnabled = true; + this.comboBox1.Items.AddRange(new object[] { + "Green Mail", + "Blue Mail", + "Red Mail", + "Bunny"}); + this.comboBox1.Location = new System.Drawing.Point(15, 25); + this.comboBox1.MaxDropDownItems = 4; + this.comboBox1.Name = "comboBox1"; + this.comboBox1.Size = new System.Drawing.Size(121, 21); + this.comboBox1.TabIndex = 3; + this.comboBox1.SelectedIndexChanged += new System.EventHandler(this.comboBox1_SelectedIndexChanged); + this.comboBox1.SelectedValueChanged += new System.EventHandler(this.comboBox1_SelectedValueChanged); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(12, 9); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(88, 13); + this.label2.TabIndex = 4; + this.label2.Text = "Selected Armor : "; + // + // button1 + // + this.button1.Location = new System.Drawing.Point(518, 539); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(190, 29); + this.button1.TabIndex = 5; + this.button1.Text = "Export All Palettes for YY-CHR"; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // button3 + // + this.button3.Location = new System.Drawing.Point(518, 168); + this.button3.Name = "button3"; + this.button3.Size = new System.Drawing.Size(190, 53); + this.button3.TabIndex = 7; + this.button3.Text = "Load GFX and Palettes from ROM"; + this.button3.UseVisualStyleBackColor = true; + this.button3.Click += new System.EventHandler(this.button3_Click); + // + // openFileDialog1 + // + this.openFileDialog1.FileName = "openFileDialog1"; + this.openFileDialog1.Filter = "ROM file|*.sfc|All Files|*.*"; + this.openFileDialog1.RestoreDirectory = true; + this.openFileDialog1.FileOk += new System.ComponentModel.CancelEventHandler(this.openFileDialog1_FileOk); + // + // openFileDialog2 + // + this.openFileDialog2.FileName = "openFileDialog2"; + this.openFileDialog2.Filter = "Randomizer Sprite Format|*.spr"; + this.openFileDialog2.RestoreDirectory = true; + this.openFileDialog2.FileOk += new System.ComponentModel.CancelEventHandler(this.openFileDialog2_FileOk); + // + // saveFileDialog1 + // + this.saveFileDialog1.FileName = "YY-CHR Palette file|*.pal"; + this.saveFileDialog1.Filter = "Palettes Files|*.pal"; + this.saveFileDialog1.RestoreDirectory = true; + this.saveFileDialog1.FileOk += new System.ComponentModel.CancelEventHandler(this.saveFileDialog1_FileOk); + // + // button4 + // + this.button4.Location = new System.Drawing.Point(518, 469); + this.button4.Name = "button4"; + this.button4.Size = new System.Drawing.Size(190, 29); + this.button4.TabIndex = 8; + this.button4.Text = "Import All Palettes from YY-CHR .pal"; + this.button4.UseVisualStyleBackColor = true; + this.button4.Click += new System.EventHandler(this.button4_Click); + // + // button5 + // + this.button5.Location = new System.Drawing.Point(518, 575); + this.button5.Name = "button5"; + this.button5.Size = new System.Drawing.Size(190, 29); + this.button5.TabIndex = 9; + this.button5.Text = "Export As Sprite (for Randomizer)"; + this.button5.UseVisualStyleBackColor = true; + this.button5.Click += new System.EventHandler(this.button5_Click_1); + // + // button6 + // + this.button6.Location = new System.Drawing.Point(518, 286); + this.button6.Name = "button6"; + this.button6.Size = new System.Drawing.Size(190, 29); + this.button6.TabIndex = 10; + this.button6.Text = "Save full ROM"; + this.button6.UseVisualStyleBackColor = true; + this.button6.Click += new System.EventHandler(this.button6_Click); + // + // saveFileDialog2 + // + this.saveFileDialog2.Filter = "Randomizer Sprite Format|*.spr"; + this.saveFileDialog2.RestoreDirectory = true; + this.saveFileDialog2.FileOk += new System.ComponentModel.CancelEventHandler(this.saveFileDialog2_FileOk); + // + // saveFileDialog3 + // + this.saveFileDialog3.Filter = "Snes ROM|*.sfc"; + this.saveFileDialog3.RestoreDirectory = true; + this.saveFileDialog3.FileOk += new System.ComponentModel.CancelEventHandler(this.saveFileDialog3_FileOk); + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(12, 152); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(54, 13); + this.label3.TabIndex = 11; + this.label3.Text = "Preview : "; + // + // button7 + // + this.button7.Location = new System.Drawing.Point(518, 504); + this.button7.Name = "button7"; + this.button7.Size = new System.Drawing.Size(190, 29); + this.button7.TabIndex = 12; + this.button7.Text = "Save Selected Pal for Graphics Gale"; + this.button7.UseVisualStyleBackColor = true; + this.button7.Click += new System.EventHandler(this.button7_Click); + // + // button8 + // + this.button8.Location = new System.Drawing.Point(518, 434); + this.button8.Name = "button8"; + this.button8.Size = new System.Drawing.Size(190, 29); + this.button8.TabIndex = 13; + this.button8.Text = "Load Selected Pal from GG .pal"; + this.button8.UseVisualStyleBackColor = true; + this.button8.Click += new System.EventHandler(this.button8_Click); + // + // openFileDialog3 + // + this.openFileDialog3.FileName = "openFileDialog3"; + this.openFileDialog3.Filter = "Graphics Gale Palette|*.pal"; + this.openFileDialog3.RestoreDirectory = true; + this.openFileDialog3.FileOk += new System.ComponentModel.CancelEventHandler(this.openFileDialog3_FileOk); + // + // openFileDialog4 + // + this.openFileDialog4.FileName = "openFileDialog4"; + this.openFileDialog4.Filter = "YY-CHR Palette file|*.pal"; + this.openFileDialog4.RestoreDirectory = true; + this.openFileDialog4.FileOk += new System.ComponentModel.CancelEventHandler(this.openFileDialog4_FileOk); + // + // saveFileDialog4 + // + this.saveFileDialog4.Filter = "Graphics Gale palette|*.pal"; + this.saveFileDialog4.RestoreDirectory = true; + this.saveFileDialog4.FileOk += new System.ComponentModel.CancelEventHandler(this.saveFileDialog4_FileOk); + // + // button2 + // + this.button2.Location = new System.Drawing.Point(518, 227); + this.button2.Name = "button2"; + this.button2.Size = new System.Drawing.Size(190, 53); + this.button2.TabIndex = 14; + this.button2.Text = "Load GFX and Palettes from .spr"; + this.button2.UseVisualStyleBackColor = true; + this.button2.Click += new System.EventHandler(this.button2_Click_1); + // + // openFileDialog5 + // + this.openFileDialog5.FileName = "openFileDialog1"; + this.openFileDialog5.Filter = "ROM file|*.sfc|All Files|*.*"; + this.openFileDialog5.RestoreDirectory = true; + this.openFileDialog5.FileOk += new System.ComponentModel.CancelEventHandler(this.openFileDialog5_FileOk); + // + // button9 + // + this.button9.Location = new System.Drawing.Point(518, 399); + this.button9.Name = "button9"; + this.button9.Size = new System.Drawing.Size(190, 29); + this.button9.TabIndex = 15; + this.button9.Text = "Export as Png"; + this.button9.UseVisualStyleBackColor = true; + this.button9.Click += new System.EventHandler(this.button9_Click); + // + // saveFileDialog5 + // + this.saveFileDialog5.DefaultExt = "png"; + this.saveFileDialog5.Filter = "PNG Images Files|*.png"; + this.saveFileDialog5.RestoreDirectory = true; + this.saveFileDialog5.FileOk += new System.ComponentModel.CancelEventHandler(this.saveFileDialog5_FileOk); + // + // label4 + // + this.label4.AutoSize = true; + this.label4.Location = new System.Drawing.Point(517, 9); + this.label4.Name = "label4"; + this.label4.Size = new System.Drawing.Size(49, 13); + this.label4.TabIndex = 16; + this.label4.Text = "Hands \\"; + // + // pictureBox1 + // + this.pictureBox1.Location = new System.Drawing.Point(0, 168); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(512, 448); + this.pictureBox1.TabIndex = 17; + this.pictureBox1.TabStop = false; + // + // button10 + // + this.button10.Location = new System.Drawing.Point(518, 364); + this.button10.Name = "button10"; + this.button10.Size = new System.Drawing.Size(190, 29); + this.button10.TabIndex = 18; + this.button10.Text = "Import Png"; + this.button10.UseVisualStyleBackColor = true; + this.button10.Click += new System.EventHandler(this.button10_Click); + // + // label5 + // + this.label5.AutoSize = true; + this.label5.Location = new System.Drawing.Point(101, 59); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(27, 13); + this.label5.TabIndex = 19; + this.label5.Text = "Red\r\n"; + this.label5.Visible = false; + // + // label6 + // + this.label6.AutoSize = true; + this.label6.Location = new System.Drawing.Point(101, 82); + this.label6.Name = "label6"; + this.label6.Size = new System.Drawing.Size(36, 13); + this.label6.TabIndex = 20; + this.label6.Text = "Green"; + this.label6.Visible = false; + // + // label7 + // + this.label7.AutoSize = true; + this.label7.Location = new System.Drawing.Point(101, 102); + this.label7.Name = "label7"; + this.label7.Size = new System.Drawing.Size(28, 13); + this.label7.TabIndex = 21; + this.label7.Text = "Blue"; + this.label7.Visible = false; + // + // checkBox1 + // + this.checkBox1.AutoSize = true; + this.checkBox1.Location = new System.Drawing.Point(137, 127); + this.checkBox1.Name = "checkBox1"; + this.checkBox1.Size = new System.Drawing.Size(75, 17); + this.checkBox1.TabIndex = 70; + this.checkBox1.Text = "Hex Value"; + this.checkBox1.UseVisualStyleBackColor = true; + this.checkBox1.Visible = false; + this.checkBox1.CheckedChanged += new System.EventHandler(this.checkBox1_CheckedChanged); + // + // button11 + // + this.button11.Location = new System.Drawing.Point(518, 112); + this.button11.Name = "button11"; + this.button11.Size = new System.Drawing.Size(190, 53); + this.button11.TabIndex = 71; + this.button11.Text = "Load a .spr file and Patch it into a ROM"; + this.button11.UseVisualStyleBackColor = true; + this.button11.Click += new System.EventHandler(this.button11_Click); + // + // openFileDialog6 + // + this.openFileDialog6.Filter = "Randomizer Sprite Format|*.spr"; + this.openFileDialog6.FileOk += new System.ComponentModel.CancelEventHandler(this.openFileDialog6_FileOk); + // + // saveFileDialog6 + // + this.saveFileDialog6.Filter = "Snes ROM|*.sfc"; + this.saveFileDialog6.FileOk += new System.ComponentModel.CancelEventHandler(this.saveFileDialog6_FileOk); + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(720, 616); + this.Controls.Add(this.button11); + this.Controls.Add(this.checkBox1); + this.Controls.Add(this.label7); + this.Controls.Add(this.label6); + this.Controls.Add(this.label5); + this.Controls.Add(this.button10); + this.Controls.Add(this.pictureBox1); + this.Controls.Add(this.label4); + this.Controls.Add(this.button9); + this.Controls.Add(this.button2); + this.Controls.Add(this.button8); + this.Controls.Add(this.button7); + this.Controls.Add(this.label3); + this.Controls.Add(this.button6); + this.Controls.Add(this.button5); + this.Controls.Add(this.button4); + this.Controls.Add(this.button3); + this.Controls.Add(this.button1); + this.Controls.Add(this.label2); + this.Controls.Add(this.comboBox1); + this.Controls.Add(this.pictureBox2); + this.Controls.Add(this.label1); + this.Name = "Form1"; + this.Text = "Palette Creator 3.6"; + this.Load += new System.EventHandler(this.Form1_Load); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + private System.Windows.Forms.Label label1; + private System.Windows.Forms.PictureBox pictureBox2; + private System.Windows.Forms.ComboBox comboBox1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.ColorDialog colorDialog1; + private System.Windows.Forms.Button button3; + private System.Windows.Forms.OpenFileDialog openFileDialog1; + private System.Windows.Forms.OpenFileDialog openFileDialog2; + private System.Windows.Forms.SaveFileDialog saveFileDialog1; + private System.Windows.Forms.Button button4; + private System.Windows.Forms.Button button5; + private System.Windows.Forms.Button button6; + private System.Windows.Forms.SaveFileDialog saveFileDialog2; + private System.Windows.Forms.SaveFileDialog saveFileDialog3; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Button button7; + private System.Windows.Forms.Button button8; + private System.Windows.Forms.OpenFileDialog openFileDialog3; + private System.Windows.Forms.OpenFileDialog openFileDialog4; + private System.Windows.Forms.SaveFileDialog saveFileDialog4; + private System.Windows.Forms.Button button2; + private System.Windows.Forms.OpenFileDialog openFileDialog5; + private System.Windows.Forms.Button button9; + private System.Windows.Forms.SaveFileDialog saveFileDialog5; + private System.Windows.Forms.Label label4; + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.Button button10; + private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label label6; + private System.Windows.Forms.Label label7; + private System.Windows.Forms.TextBox r1; + private System.Windows.Forms.TextBox g1; + private System.Windows.Forms.TextBox b1; + private System.Windows.Forms.TextBox r2; + private System.Windows.Forms.TextBox g2; + private System.Windows.Forms.TextBox b2; + private System.Windows.Forms.TextBox b3; + private System.Windows.Forms.TextBox g3; + private System.Windows.Forms.TextBox r3; + private System.Windows.Forms.TextBox b4; + private System.Windows.Forms.TextBox g4; + private System.Windows.Forms.TextBox r4; + private System.Windows.Forms.TextBox b5; + private System.Windows.Forms.TextBox g5; + private System.Windows.Forms.TextBox r5; + private System.Windows.Forms.TextBox b6; + private System.Windows.Forms.TextBox g6; + private System.Windows.Forms.TextBox r6; + private System.Windows.Forms.TextBox b7; + private System.Windows.Forms.TextBox g7; + private System.Windows.Forms.TextBox r7; + private System.Windows.Forms.TextBox b8; + private System.Windows.Forms.TextBox g8; + private System.Windows.Forms.TextBox r8; + private System.Windows.Forms.TextBox b9; + private System.Windows.Forms.TextBox g9; + private System.Windows.Forms.TextBox r9; + private System.Windows.Forms.TextBox b10; + private System.Windows.Forms.TextBox g10; + private System.Windows.Forms.TextBox r10; + private System.Windows.Forms.TextBox b11; + private System.Windows.Forms.TextBox g11; + private System.Windows.Forms.TextBox r11; + private System.Windows.Forms.TextBox b12; + private System.Windows.Forms.TextBox g12; + private System.Windows.Forms.TextBox r12; + private System.Windows.Forms.TextBox b13; + private System.Windows.Forms.TextBox g13; + private System.Windows.Forms.TextBox r13; + private System.Windows.Forms.TextBox b14; + private System.Windows.Forms.TextBox g14; + private System.Windows.Forms.TextBox r14; + private System.Windows.Forms.TextBox b15; + private System.Windows.Forms.TextBox g15; + private System.Windows.Forms.TextBox r15; + private System.Windows.Forms.TextBox b16; + private System.Windows.Forms.TextBox g16; + private System.Windows.Forms.TextBox r16; + private System.Windows.Forms.CheckBox checkBox1; + private System.Windows.Forms.Button button11; + private System.Windows.Forms.OpenFileDialog openFileDialog6; + private System.Windows.Forms.SaveFileDialog saveFileDialog6; + } +} + diff --git a/Form1.cs b/Form1.cs new file mode 100644 index 0000000..4d1bd2a --- /dev/null +++ b/Form1.cs @@ -0,0 +1,869 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.IO; +using System.Drawing.Imaging; +using System.Runtime.InteropServices; + +namespace PaletteCreator +{ + public partial class Form1 : Form + { + public Form1() + { + InitializeComponent(); + } + Color[] palette = new Color[17]; + Color[] palette2 = new Color[17]; + Color[] palette3 = new Color[17]; + Color[] palette4 = new Color[17]; + string[] tempFolders = new string[10]; + private void Form1_Load(object sender, EventArgs e) + { + + /* if (File.Exists("folderstemp.txt")) + { + tempFolders = File.ReadAllLines("folderstemp.txt"); + openFileDialog1.InitialDirectory = tempFolders[0]; + openFileDialog2.InitialDirectory = tempFolders[1]; + openFileDialog3.InitialDirectory = tempFolders[2]; + openFileDialog4.InitialDirectory = tempFolders[3]; + openFileDialog5.InitialDirectory = tempFolders[4]; + saveFileDialog1.InitialDirectory = tempFolders[5]; + saveFileDialog2.InitialDirectory = tempFolders[6]; + saveFileDialog3.InitialDirectory = tempFolders[7]; + saveFileDialog4.InitialDirectory = tempFolders[8]; + saveFileDialog5.InitialDirectory = tempFolders[9]; + }*/ + + for (int i = 0; i < 16; i++) + { + palette[i] = Color.FromArgb(i * 15, i * 15, i * 15); + palette2[i] = Color.FromArgb(i * 15, i * 15, i * 15); + palette3[i] = Color.FromArgb(i * 15, i * 15, i * 15); + palette4[i] = Color.FromArgb(i * 15, i * 15, i * 15); + } + pictureBox1.Image = new Bitmap(512, 1024); + data = new byte[0x7000];/* + FileStream fs = new FileStream("sprites/zelda.spr", FileMode.OpenOrCreate, FileAccess.Read); + fs.Read(data, 0, 0x7000); + fs.Close();*/ + + refreshEverything(); + + comboBox1.SelectedIndex = 0; + + } + + public void refreshEverything() + { + + pictureBox2.Image = new Bitmap(512, 32); + Graphics g = Graphics.FromImage(pictureBox2.Image); + for (int i = 0; i < 16; i++) + { + if (comboBox1.SelectedIndex == 0) + g.FillRectangle(new SolidBrush(palette[i]), new Rectangle(i * 32, 0, (i * 32) + 32, 32)); + if (comboBox1.SelectedIndex == 1) + g.FillRectangle(new SolidBrush(palette2[i]), new Rectangle(i * 32, 0, (i * 32) + 32, 32)); + if (comboBox1.SelectedIndex == 2) + g.FillRectangle(new SolidBrush(palette3[i]), new Rectangle(i * 32, 0, (i * 32) + 32, 32)); + if (comboBox1.SelectedIndex == 3) + g.FillRectangle(new SolidBrush(palette4[i]), new Rectangle(i * 32, 0, (i * 32) + 32, 32)); + } + + + + for (int i = 0; i < 14; i++) + { + load4bpp(i); + updateGraphic(i); + } + //; + //updateGraphic(i); + + //Graphics gp = Graphics.FromImage(pictureBox1.Image); + //gp.Clear(Color.Black); + + + } + + byte[,] imgdata = new byte[128, 32]; + + byte[] data; + int[] positions = new int[] { 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01 }; + int hexOffset = 0x0; + public void load4bpp(int pos = 0) + { + + for (int j = 0; j < 4; j++) //4 par y + { + for (int i = 0; i < 16; i++) + { + int offset = (hexOffset + (pos * 0x800)) + ((j * 32) * 16) + (i * 32); + for (int x = 0; x < 8; x++) + { + for (int y = 0; y < 8; y++) + { + byte tmpbyte = 0; + + if ((data[offset + (x * 2)] & positions[y]) == positions[y]) + { + tmpbyte += 1; + } + if ((data[offset + (x * 2) + 1] & positions[y]) == positions[y]) + { + tmpbyte += 2; + } + + if ((data[offset + 16 + (x * 2)] & positions[y]) == positions[y]) + { + tmpbyte += 4; + } + if ((data[offset + 16 + (x * 2) + 1] & positions[y]) == positions[y]) + { + tmpbyte += 8; + } + + imgdata[y + (i * 8), x + (j * 8)] = tmpbyte; + + } + } + // pos++; + } + } + + + } + + + + + /* public void load4bpp(int pos = 0) + { + + for (int j = 0; j < 4; j++) //4 par y + { + for (int i = 0; i < 16; i++) + { + int offset = (hexOffset + (pos * 0x800)) + ((j * 32) * 16) + (i * 32); + for (int x = 0; x < 8; x++) + { + for (int y = 0; y < 8; y++) + { + byte tmpbyte = 0; + + if ((data[offset + (x * 2)] & positions[y]) == positions[y]) + { + tmpbyte += 1; + } + if ((data[offset + (x * 2) + 1] & positions[y]) == positions[y]) + { + tmpbyte += 2; + } + + if ((data[offset + 16 + (x * 2)] & positions[y]) == positions[y]) + { + tmpbyte += 4; + } + if ((data[offset + 16 + (x * 2) + 1] & positions[y]) == positions[y]) + { + tmpbyte += 8; + } + + imgdata[y + (i * 8), x + (j * 8)] = tmpbyte; + + } + } + // pos++; + } + } + + + }*/ + + + Bitmap loadedblocks = new Bitmap(128, 32); + byte[] bitmap_data = new byte[4096 * 3]; + public void updateGraphic(int pos) + { + + Graphics g = Graphics.FromImage(pictureBox1.Image); + g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.NearestNeighbor; + g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.None; + int bitmap_pos = 0; + + for (int y = 0; y < 32; y++) + { + for (int x = 0; x < 128; x++) + { + + bitmap_data[bitmap_pos] = imgdata[x, y]; + bitmap_data[bitmap_pos + 1] = imgdata[x, y]; + bitmap_data[bitmap_pos + 2] = imgdata[x, y]; + bitmap_pos += 3; + + /*if (comboBox1.SelectedIndex == 1) + { + bitmap_data[bitmap_pos] = palette2[imgdata[x, y]].B; + bitmap_data[bitmap_pos + 1] = palette2[imgdata[x, y]].G; + bitmap_data[bitmap_pos + 2] = palette2[imgdata[x, y]].R; + bitmap_pos += 3; + } + if (comboBox1.SelectedIndex == 2) + { + bitmap_data[bitmap_pos] = palette3[imgdata[x, y]].B; + bitmap_data[bitmap_pos + 1] = palette3[imgdata[x, y]].G; + bitmap_data[bitmap_pos + 2] = palette3[imgdata[x, y]].R; + bitmap_pos += 3; + } + if (comboBox1.SelectedIndex == 3) + { + bitmap_data[bitmap_pos] = palette4[imgdata[x, y]].B; + bitmap_data[bitmap_pos + 1] = palette4[imgdata[x, y]].G; + bitmap_data[bitmap_pos + 2] = palette4[imgdata[x, y]].R; + bitmap_pos += 3; + }*/ + } + } + // + Graphics gx = Graphics.FromImage(loadedblocks); + gx.Clear(Color.Black); + ProcessUsingLockbits((Bitmap)loadedblocks); + //g.FillRectangle(Brushes.Fuchsia, new Rectangle(0, pos * 32, 128, 32)); + if (pos >= 7) + { + g.DrawImage(loadedblocks, new Rectangle(255, (pos-7) * 63, 256, 64), 0, 0, 128, 32, GraphicsUnit.Pixel); + } + else + { + g.DrawImage(loadedblocks, new Rectangle(0, pos * 63, 256, 64), 0, 0, 128, 32, GraphicsUnit.Pixel); + } + + + pictureBox1.Refresh(); + } + + private void pictureBox2_DoubleClick(object sender, EventArgs e) + { + + } + + private void pictureBox2_MouseDoubleClick(object sender, MouseEventArgs e) + { + for (int i = 0; i < 16; i++) + { + if (e.X>=i*32 && e.X <= (i*32)+32) + { + if (comboBox1.SelectedIndex == 0) + { + colorDialog1.Color = palette[i]; + colorDialog1.ShowDialog(); + palette[i] = colorDialog1.Color; + } + if (comboBox1.SelectedIndex == 1) + { + colorDialog1.Color = palette2[i]; + colorDialog1.ShowDialog(); + palette2[i] = colorDialog1.Color; + } + if (comboBox1.SelectedIndex == 2) + { + colorDialog1.Color = palette3[i]; + colorDialog1.ShowDialog(); + palette3[i] = colorDialog1.Color; + } + if (comboBox1.SelectedIndex == 3) + { + colorDialog1.Color = palette4[i]; + colorDialog1.ShowDialog(); + palette4[i] = colorDialog1.Color; + } + } + } + refreshEverything(); + } + + private void button3_Click(object sender, EventArgs e) + { + if (tempFolders[0] != null) + { + openFileDialog1.InitialDirectory = tempFolders[0]; + } + + openFileDialog1.ShowDialog(); + + } + + public Color getColor(short c) + { + return Color.FromArgb(((c & 0x1F) * 8), ((c & 0x3E0) >> 5)*8, ((c & 0x7C00) >> 10) * 8); + } + byte[] ROM_DATA; + private void openFileDialog1_FileOk(object sender, CancelEventArgs e) + { + + tempFolders[0] = Path.GetDirectoryName(openFileDialog1.FileName); + FileStream fs = new FileStream(openFileDialog1.FileName, FileMode.Open, FileAccess.Read); + ROM_DATA = new byte[(int)fs.Length]; + fs.Read(ROM_DATA, 0, (int)fs.Length); + + fs.Close(); + data = new byte[0x7000]; + for (int i = 0;i<0x7000;i++) + { + data[i] = ROM_DATA[0x80000 + i]; + } + + //palettes[0] = new Palette(0x0DD308, 15); + //palettes[1] = new Palette(0x0DD326, 15); + //palettes[2] = new Palette(0x0DD344, 15); + for (int i = 0;i<15;i++) + { + palette[i+1] = getColor((short)((ROM_DATA[0x0DD308 + (i * 2)+1] << 8) + (ROM_DATA[0x0DD308 + (i * 2)]))); + palette2[i + 1] = getColor((short)((ROM_DATA[0x0DD326 + (i * 2) + 1] << 8) + (ROM_DATA[0x0DD326 + (i * 2)]))); + palette3[i + 1] = getColor((short)((ROM_DATA[0x0DD344 + (i * 2) + 1] << 8) + (ROM_DATA[0x0DD344 + (i * 2)]))); + palette4[i + 1] = getColor((short)((ROM_DATA[0x0DD362 + (i * 2) + 1] << 8) + (ROM_DATA[0x0DD362 + (i * 2)]))); + } + refreshEverything(); + + } + + private void button2_Click(object sender, EventArgs e) + { + openFileDialog2.ShowDialog(); + } + + private void openFileDialog2_FileOk(object sender, CancelEventArgs e) + { + tempFolders[1] = Path.GetDirectoryName(openFileDialog2.FileName); + ROM_DATA = new byte[2097152]; + FileStream fs = new FileStream(openFileDialog2.FileName, FileMode.Open, FileAccess.Read); + data = new byte[fs.Length]; + fs.Read(data, 0, (int)fs.Length); + + + + if (fs.Length == 0x7078) + { + for(int i = 0;i<0x7000;i++) + { + ROM_DATA[0x80000+i] = data[i]; + } + + + for (int i = 0; i < 15; i++) + { + palette[i + 1] = getColor((short)((data[0x7000 + (i * 2) + 1] << 8) + (data[0x7000 + (i * 2)]))); + } + for (int i = 0; i < 15; i++) + { + palette2[i + 1] = getColor((short)((data[0x7000 + 30 + (i * 2) + 1] << 8) + (data[0x7000 + 30 + (i * 2)]))); + } + for (int i = 0; i < 15; i++) + { + palette3[i + 1] = getColor((short)((data[0x7000 + 60 + (i * 2) + 1] << 8) + (data[0x7000 + 60 + (i * 2)]))); + } + for (int i = 0; i < 15; i++) + { + palette4[i + 1] = getColor((short)((data[0x7000 + 90 + (i * 2) + 1] << 8) + (data[0x7000 + 90 + (i * 2)]))); + } + } + else + { + //not sprite format + MessageBox.Show("Unknown file format !"); + } + + + fs.Close(); + refreshEverything(); + } + + private void button1_Click(object sender, EventArgs e) + { + if (tempFolders[5] != null) + { + saveFileDialog1.InitialDirectory = tempFolders[5]; + } + saveFileDialog1.ShowDialog(); + } + + private void saveFileDialog1_FileOk(object sender, CancelEventArgs e) + { + tempFolders[5] = Path.GetDirectoryName(saveFileDialog1.FileName); + + byte[] palette_data = new byte[0x300]; + int palette_data_i = 0; + for (int i = 0; i < 16; i++) + { + palette_data[palette_data_i] = palette[i].R; + palette_data[palette_data_i + 1] = palette[i].G; + palette_data[palette_data_i + 2] = palette[i].B; + palette_data_i += 3; + } + for (int i = 0; i < 16; i++) + { + palette_data[palette_data_i] = palette2[i].R; + palette_data[palette_data_i + 1] = palette2[i].G; + palette_data[palette_data_i + 2] = palette2[i].B; + palette_data_i += 3; + } + for (int i = 0; i < 16; i++) + { + palette_data[palette_data_i] = palette3[i].R; + palette_data[palette_data_i + 1] = palette3[i].G; + palette_data[palette_data_i + 2] = palette3[i].B; + palette_data_i += 3; + } + for (int i = 0; i < 16; i++) + { + palette_data[palette_data_i] = palette4[i].R; + palette_data[palette_data_i + 1] = palette4[i].G; + palette_data[palette_data_i + 2] = palette4[i].B; + palette_data_i += 3; + } + + FileStream fs = new FileStream(saveFileDialog1.FileName, FileMode.OpenOrCreate, FileAccess.Write); + fs.Write(palette_data, 0, 0x300); + fs.Close(); + } + + private void button4_Click(object sender, EventArgs e) + { + if (tempFolders[3] != null) + { + openFileDialog4.InitialDirectory = tempFolders[3]; + } + openFileDialog4.ShowDialog(); + } + + private void comboBox1_SelectedValueChanged(object sender, EventArgs e) + { + + } + + private void button5_Click(object sender, EventArgs e) + { + + } + + private void saveFileDialog2_FileOk(object sender, CancelEventArgs e) + { + tempFolders[6] = Path.GetDirectoryName(saveFileDialog2.FileName); + + if (ROM_DATA != null) + { + byte[] palette_data = new byte[0x78]; + int palette_data_i = 0; + for (int i = 0; i < 15; i++) + { + short s = (short)(((palette[i + 1].B / 8) << 10) | ((palette[i + 1].G / 8) << 5) | ((palette[i + 1].R / 8))); + palette_data[palette_data_i] = (byte)(s & 0x00FF); + palette_data[palette_data_i + 1] = (byte)((s >> 8) & 0x00FF); + palette_data_i += 2; + } + for (int i = 0; i < 15; i++) + { + short s = (short)(((palette2[i + 1].B / 8) << 10) | ((palette2[i + 1].G / 8) << 5) | ((palette2[i + 1].R / 8))); + palette_data[palette_data_i] = (byte)(s & 0x00FF); + palette_data[palette_data_i + 1] = (byte)((s >> 8) & 0x00FF); + palette_data_i += 2; + } + for (int i = 0; i < 15; i++) + { + short s = (short)(((palette3[i + 1].B / 8) << 10) | ((palette3[i + 1].G / 8) << 5) | ((palette3[i + 1].R / 8))); + palette_data[palette_data_i] = (byte)(s & 0x00FF); + palette_data[palette_data_i + 1] = (byte)((s >> 8) & 0x00FF); + palette_data_i += 2; + } + for (int i = 0; i < 15; i++) + { + short s = (short)(((palette4[i + 1].B / 8) << 10) | ((palette4[i + 1].G / 8) << 5) | ((palette4[i + 1].R / 8))); + palette_data[palette_data_i] = (byte)(s & 0x00FF); + palette_data[palette_data_i + 1] = (byte)((s >> 8) & 0x00FF); + palette_data_i += 2; + } + data = new byte[0x7000 + 0x78]; + for (int i = 0;i<0x7000;i++) + { + data[i] = ROM_DATA[0x80000 + i]; + } + for (int i = 0; i < 0x78; i++) + { + data[0x7000+i] = palette_data[i]; + } + + FileStream fs = new FileStream(saveFileDialog2.FileName, FileMode.OpenOrCreate, FileAccess.Write); + fs.Write(data, 0, 0x7000 + 0x78); + fs.Close(); + } + } + + private void saveFileDialog3_FileOk(object sender, CancelEventArgs e) + { + tempFolders[7] = Path.GetDirectoryName(saveFileDialog3.FileName); + if (ROM_DATA != null) + { + byte[] palette_data = new byte[0x78]; + int palette_data_i = 0; + for (int i = 0; i < 15; i++) + { + short s = (short)(((palette[i + 1].B / 8) << 10) | ((palette[i + 1].G / 8) << 5) | ((palette[i + 1].R / 8))); + palette_data[palette_data_i] = (byte)(s & 0x00FF); + palette_data[palette_data_i + 1] = (byte)((s >> 8) & 0x00FF); + palette_data_i += 2; + } + for (int i = 0; i < 15; i++) + { + short s = (short)(((palette2[i + 1].B / 8) << 10) | ((palette2[i + 1].G / 8) << 5) | ((palette2[i + 1].R / 8))); + palette_data[palette_data_i] = (byte)(s & 0x00FF); + palette_data[palette_data_i + 1] = (byte)((s >> 8) & 0x00FF); + palette_data_i += 2; + } + for (int i = 0; i < 15; i++) + { + short s = (short)(((palette3[i + 1].B / 8) << 10) | ((palette3[i + 1].G / 8) << 5) | ((palette3[i + 1].R / 8))); + palette_data[palette_data_i] = (byte)(s & 0x00FF); + palette_data[palette_data_i + 1] = (byte)((s >> 8) & 0x00FF); + palette_data_i += 2; + } + for (int i = 0; i < 15; i++) + { + short s = (short)(((palette4[i + 1].B / 8) << 10) | ((palette4[i + 1].G / 8) << 5) | ((palette4[i + 1].R / 8))); + palette_data[palette_data_i] = (byte)(s & 0x00FF); + palette_data[palette_data_i + 1] = (byte)((s >> 8) & 0x00FF); + palette_data_i += 2; + } + data = new byte[0x7000 + 0x78]; + for (int i = 0; i < 0x7000; i++) + { + //data[i] = ROM_DATA[0x80000 + i]; + } + for (int i = 0; i < 120; i++) + { + ROM_DATA[0x0DD308+i] = palette_data[i]; + } + + FileStream fs = new FileStream(saveFileDialog3.FileName, FileMode.OpenOrCreate, FileAccess.Write); + fs.Write(ROM_DATA, 0, ROM_DATA.Length); + fs.Close(); + } + } + + private void button5_Click_1(object sender, EventArgs e) + { + if (tempFolders[6] != null) + { + saveFileDialog2.InitialDirectory = tempFolders[6]; + } + saveFileDialog2.ShowDialog(); + } + + private void button6_Click(object sender, EventArgs e) + { + if (tempFolders[7] != null) + { + saveFileDialog3.InitialDirectory = tempFolders[7]; + } + saveFileDialog3.ShowDialog(); + } + + private void button8_Click(object sender, EventArgs e) + { + if (tempFolders[2] != null) + { + openFileDialog3.InitialDirectory = tempFolders[2]; + } + openFileDialog3.ShowDialog(); + } + + private void openFileDialog4_FileOk(object sender, CancelEventArgs e) + { + tempFolders[3] = Path.GetDirectoryName(openFileDialog4.FileName); + File.WriteAllLines("folderstemp.txt", tempFolders); + byte[] palette_data = new byte[0x300]; + FileStream fs = new FileStream(openFileDialog4.FileName, FileMode.OpenOrCreate, FileAccess.Read); + fs.Read(palette_data, 0, 0x300); + fs.Close(); + + + int palette_data_i = 0; + for (int i = 0; i < 16; i++) + { + palette[i] = Color.FromArgb(((palette_data[palette_data_i]/8)*8), ((palette_data[palette_data_i+1]/8)*8), ((palette_data[palette_data_i+2]/8)*8)); + palette_data_i += 3; + } + for (int i = 0; i < 16; i++) + { + palette2[i] = Color.FromArgb(((palette_data[palette_data_i]/8)*8), ((palette_data[palette_data_i + 1]/8)*8), ((palette_data[palette_data_i + 2]/8)*8)); + palette_data_i += 3; + } + for (int i = 0; i < 16; i++) + { + palette3[i] = Color.FromArgb(((palette_data[palette_data_i]/8)*8), ((palette_data[palette_data_i + 1]/8)*8), ((palette_data[palette_data_i + 2]/8)*8)); + palette_data_i += 3; + } + for (int i = 0; i < 16; i++) + { + palette4[i] = Color.FromArgb(((palette_data[palette_data_i]/8)*8), ((palette_data[palette_data_i + 1]/8)*8), ((palette_data[palette_data_i + 2]/8)*8)); + palette_data_i += 3; + } + refreshEverything(); + + } + + private void openFileDialog3_FileOk(object sender, CancelEventArgs e) + { + //Graphics Gale Palette load + tempFolders[2] = Path.GetDirectoryName(openFileDialog3.FileName); + string[] text = File.ReadAllLines(openFileDialog3.FileName); + for(int i = 3;i<19;i++) + { + string[] colorstring = text[i].Split(' '); + int R; + int G; + int B; + Int32.TryParse(colorstring[0], out R); + Int32.TryParse(colorstring[1], out G); + Int32.TryParse(colorstring[2], out B); + if (comboBox1.SelectedIndex == 0) + { + palette[i-3] = Color.FromArgb(((R/16)*16),((G / 16) * 16),((B / 16) * 16)); + } + if (comboBox1.SelectedIndex == 1) + { + palette2[i-3] = Color.FromArgb(((R / 16) * 16), ((G / 16) * 16), ((B / 16) * 16)); + } + if (comboBox1.SelectedIndex == 2) + { + palette3[i-3] = Color.FromArgb(((R / 16) * 16), ((G / 16) * 16), ((B / 16) * 16)); + } + if (comboBox1.SelectedIndex == 3) + { + palette4[i-3] = Color.FromArgb(((R / 16) * 16), ((G / 16) * 16), ((B / 16) * 16)); + } + + } + refreshEverything(); + + + } + + private void button7_Click(object sender, EventArgs e) + { + if (tempFolders[8] != null) + { + saveFileDialog4.InitialDirectory = tempFolders[8]; + } + saveFileDialog4.ShowDialog(); + } + + private void saveFileDialog4_FileOk(object sender, CancelEventArgs e) + { + tempFolders[8] = Path.GetDirectoryName(saveFileDialog4.FileName); + + string text = "JASC-PAL\n0100\n16\n"; + + for (int i = 0; i < 16; i++) + { + if (comboBox1.SelectedIndex == 0) + { + text += palette[i].R.ToString() + " " + palette[i].G.ToString() + " " + palette[i].B.ToString() + "\n"; + } + if (comboBox1.SelectedIndex == 1) + { + text += palette2[i].R.ToString() + " " + palette2[i].G.ToString() + " " + palette2[i].B.ToString() + "\n"; + } + if (comboBox1.SelectedIndex == 2) + { + text += palette3[i].R.ToString() + " " + palette3[i].G.ToString() + " " + palette3[i].B.ToString() + "\n"; + } + if (comboBox1.SelectedIndex == 3) + { + text += palette4[i].R.ToString() + " " + palette4[i].G.ToString() + " " + palette4[i].B.ToString() + "\n"; + } + + } + File.WriteAllText(saveFileDialog4.FileName, text); + } + + private void button2_Click_1(object sender, EventArgs e) + { + if (tempFolders[1] != null) + { + openFileDialog2.InitialDirectory = tempFolders[1]; + } + openFileDialog2.ShowDialog(); + + } + + private void button9_Click(object sender, EventArgs e) + { + if (tempFolders[9] != null) + { + saveFileDialog5.InitialDirectory = tempFolders[9]; + } + saveFileDialog5.ShowDialog(); + } + + private void saveFileDialog5_FileOk(object sender, CancelEventArgs e) + { + tempFolders[9] = Path.GetDirectoryName(saveFileDialog5.FileName); + Bitmap tempBitmap = new Bitmap(128, 448); + Graphics gg = Graphics.FromImage(tempBitmap); + for (int i = 0; i < 14; i++) + { + load4bpp(i); + updateGraphic(i); + gg.DrawImage(loadedblocks, new Rectangle(0, i * 32, 128, 32), 0, 0, 128, 32, GraphicsUnit.Pixel); + } + tempBitmap.Save(saveFileDialog5.FileName, System.Drawing.Imaging.ImageFormat.Png); + } + + + private void ProcessUsingLockbits(Bitmap processedBitmap) + { + BitmapData bitmapData = processedBitmap.LockBits(new Rectangle(0, 0, processedBitmap.Width, processedBitmap.Height), ImageLockMode.ReadWrite, processedBitmap.PixelFormat); + + int bytesPerPixel = Bitmap.GetPixelFormatSize(processedBitmap.PixelFormat) / 8; + int byteCount = bitmapData.Stride * processedBitmap.Height; + byte[] pixels = new byte[byteCount]; + IntPtr ptrFirstPixel = bitmapData.Scan0; + Marshal.Copy(ptrFirstPixel, pixels, 0, pixels.Length); + int heightInPixels = bitmapData.Height; + int widthInBytes = bitmapData.Width * bytesPerPixel; + int pix = 0; + for (int y = 0; y < heightInPixels; y++) + { + byte blue = 0; + int currentLine = y * bitmapData.Stride; + for (int x = 0; x < widthInBytes; x = x + bytesPerPixel) + { + // calculate new pixel value + if (selected_palette == 0) + { + pixels[currentLine + x] = palette[bitmap_data[pix]].B; + pixels[currentLine + x + 1] = palette[bitmap_data[pix+1]].G; + pixels[currentLine + x + 2] = palette[bitmap_data[pix+2]].R; + } + else if (selected_palette == 1) + { + pixels[currentLine + x] = palette2[bitmap_data[pix]].B; + pixels[currentLine + x + 1] = palette2[bitmap_data[pix + 1]].G; + pixels[currentLine + x + 2] = palette2[bitmap_data[pix + 2]].R; + } + else if (selected_palette == 2) + { + pixels[currentLine + x] = palette3[bitmap_data[pix]].B; + pixels[currentLine + x + 1] = palette3[bitmap_data[pix + 1]].G; + pixels[currentLine + x + 2] = palette3[bitmap_data[pix + 2]].R; + } + else if (selected_palette == 3) + { + pixels[currentLine + x] = palette4[bitmap_data[pix]].B; + pixels[currentLine + x + 1] = palette4[bitmap_data[pix + 1]].G; + pixels[currentLine + x + 2] = palette4[bitmap_data[pix + 2]].R; + } + + pix += 3; + //Console.Write(currentLine + ","); + /*pixels[currentLine + x] = blue; + pixels[currentLine + x + 1] = blue; + pixels[currentLine + x + 2] = blue; + blue++;*/ + } + + } + + // copy modified bytes back + Marshal.Copy(pixels, 0, ptrFirstPixel, pixels.Length); + processedBitmap.UnlockBits(bitmapData); + } + int selected_palette = 0; + private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) + { + if (comboBox1.SelectedIndex == 0) + { + label4.Text = "Hands \\"; + selected_palette = 0; + } + if (comboBox1.SelectedIndex == 1) + { + label4.Text = "Gloves \\"; + selected_palette = 1; + } + if (comboBox1.SelectedIndex == 2) + { + label4.Text = "Mitts \\"; + selected_palette = 2; + } + if (comboBox1.SelectedIndex == 3) + { + label4.Text = ""; + selected_palette = 3; + } + refreshEverything(); + } + + private void openFileDialog5_FileOk(object sender, CancelEventArgs e) + { + tempFolders[4] = Path.GetDirectoryName(openFileDialog5.FileName); + + } + + private void button10_Click(object sender, EventArgs e) + { + ImporterForm form = new ImporterForm(); + form.ShowDialog(); + } + + private void checkBox1_CheckedChanged(object sender, EventArgs e) + { + + } + + private void button11_Click(object sender, EventArgs e) + { + openFileDialog6.ShowDialog(); + } + byte[] sprite_data = new byte[0x7078]; + private void openFileDialog6_FileOk(object sender, CancelEventArgs e) + { + //filestream open .spr file + FileStream fs = new FileStream(openFileDialog6.FileName, FileMode.Open, FileAccess.Read); + fs.Read(sprite_data,0,0x7078); + fs.Close(); + saveFileDialog6.ShowDialog(); + } + byte[] rom_patch; + private void saveFileDialog6_FileOk(object sender, CancelEventArgs e) + { + //filestream save .spr file + FileStream fs = new FileStream(saveFileDialog6.FileName, FileMode.Open, FileAccess.ReadWrite); + rom_patch = new byte[fs.Length]; + fs.Read(rom_patch, 0, (int)fs.Length); + fs.Position = 0; + + for(int i = 0;i<0x7000;i++) + { + rom_patch[0x80000 + i] = sprite_data[i]; + } + for (int i = 0; i < 0x78; i++) + { + rom_patch[0x0DD308 + i] = sprite_data[i+0x7000]; + } + + fs.Write(rom_patch, 0, (int)fs.Length); + + + fs.Close(); + } + } +} diff --git a/Form1.resx b/Form1.resx new file mode 100644 index 0000000..11c8a1b --- /dev/null +++ b/Form1.resx @@ -0,0 +1,159 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 138, 17 + + + 278, 17 + + + 418, 17 + + + 554, 17 + + + 690, 17 + + + 826, 17 + + + 17, 56 + + + 157, 56 + + + 293, 56 + + + 433, 56 + + + 569, 56 + + + 709, 56 + + \ No newline at end of file diff --git a/ImporterForm.Designer.cs b/ImporterForm.Designer.cs new file mode 100644 index 0000000..19b1337 --- /dev/null +++ b/ImporterForm.Designer.cs @@ -0,0 +1,46 @@ +namespace PaletteCreator +{ + partial class ImporterForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.SuspendLayout(); + // + // ImporterForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(513, 505); + this.Name = "ImporterForm"; + this.Text = "ImporterForm"; + this.ResumeLayout(false); + + } + + #endregion + } +} \ No newline at end of file diff --git a/ImporterForm.cs b/ImporterForm.cs new file mode 100644 index 0000000..e274cf6 --- /dev/null +++ b/ImporterForm.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace PaletteCreator +{ + public partial class ImporterForm : Form + { + public ImporterForm() + { + InitializeComponent(); + } + } +} diff --git a/ImporterForm.resx b/ImporterForm.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/ImporterForm.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/PaletteCreator.csproj b/PaletteCreator.csproj new file mode 100644 index 0000000..18181fe --- /dev/null +++ b/PaletteCreator.csproj @@ -0,0 +1,102 @@ + + + + + Debug + AnyCPU + {151B95CE-E4E8-47E1-BFAC-4A35C18242D2} + WinExe + Properties + PaletteCreator + PaletteCreator + v4.5.2 + 512 + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + + Form + + + Form1.cs + + + Form + + + ImporterForm.cs + + + + + Form1.cs + + + ImporterForm.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + \ No newline at end of file diff --git a/Program.cs b/Program.cs new file mode 100644 index 0000000..e4a4fe4 --- /dev/null +++ b/Program.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace PaletteCreator +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..3a29ee3 --- /dev/null +++ b/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +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("PaletteCreator")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("PaletteCreator")] +[assembly: AssemblyCopyright("Copyright © 2017")] +[assembly: AssemblyTrademark("")] +[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("151b95ce-e4e8-47e1-bfac-4a35c18242d2")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Properties/Resources.Designer.cs b/Properties/Resources.Designer.cs new file mode 100644 index 0000000..1f687ad --- /dev/null +++ b/Properties/Resources.Designer.cs @@ -0,0 +1,71 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace PaletteCreator.Properties +{ + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources + { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() + { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager + { + get + { + if ((resourceMan == null)) + { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("PaletteCreator.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + } +} diff --git a/Properties/Resources.resx b/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Properties/Settings.Designer.cs b/Properties/Settings.Designer.cs new file mode 100644 index 0000000..c1780f9 --- /dev/null +++ b/Properties/Settings.Designer.cs @@ -0,0 +1,30 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace PaletteCreator.Properties +{ + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase + { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default + { + get + { + return defaultInstance; + } + } + } +} diff --git a/Properties/Settings.settings b/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/README.md b/README.md new file mode 100644 index 0000000..ac4b5ab --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# PaletteCreator