// 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<