// Base plugin for GfxEd8 // Copyright (C) 2004 Ian Cowburn // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; either version 2 // of the License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // $Id$ // using System; using System.IO; using GfxEdInterface; namespace GfxEdBasePlugin { /// /// Description of Output. /// internal class Output { public Output(uint max_colours, int depth, bool has_pal, bool adjust_pal) { m_maxcol=max_colours; m_depth=depth; m_haspal=has_pal; m_adjpal=adjust_pal; } public void Assembly(TextWriter str, Sprite spr) { string name=ValidName(spr.Name); str.WriteLine("; Definition for "+spr.Name); str.WriteLine(";"); if (m_haspal) { for(uint f=1;f>shift); str.Write(','); str.Write((b<<(8-shift))&0xff); col++; } str.WriteLine(); str.WriteLine(); } public void Basic(ref int line, TextWriter str, Sprite spr) { str.WriteLine((line++)+" REM Sprite " + ValidName(spr.Name)); str.WriteLine((line++)+" REM Colour"); str.Write((line++)+" DATA "); for(uint f=1;f1) { str.Write(","); } str.Write(spr.Pal(f).ToString()); } str.WriteLine(); int col=0; uint x=0; uint y=0; uint b; str.Write((line++)+" REM Sprite data"); while(GetByte(ref x, ref y, out b, spr)) { if ((col%8)==0) { str.WriteLine(); str.Write((line++)+" DATA "); } else { str.Write(','); } str.Write(b); col++; } str.WriteLine(); } public void C(TextWriter str, Sprite spr) { string name=ValidName(spr.Name); int col=0; uint x=0; uint y=0; uint b; if (m_haspal) { for(uint f=1;f0) { str.Write(','); } str.Write(b); col++; } str.WriteLine(); str.WriteLine("};"); str.WriteLine(); } private string ValidName(string s) { string n=""; foreach (char c in s) { if (Char.IsLetterOrDigit(c) || c=='_') n+=c; } if (n.Length==0) { n="empty_name"; } return n; } // ------------------------------------------------ // PRIVATE // private uint m_maxcol; private int m_depth; private bool m_haspal; private bool m_adjpal; private bool GetByte(ref uint x, ref uint y, out uint b, Sprite s) { b=0; if (x==0 && y==s.Height) { return false; } int bit=8-m_depth; while(bit>=0) { uint v=s[x,y]; b|=(v<