// 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 MyClass.
///
public class Spectrum : IPlugin
{
public Spectrum()
{
m_pal=new Colour[2];
m_pal[0]=new Colour("Background",0x00,0x00,0x00);
m_pal[1]=new Colour("White",0xff,0xff,0xff);
m_size=new SpriteSize[2];
m_size[0]=new SpriteSize(8,8,1,1);
m_size[1]=new SpriteSize(16,16,1,1);
m_paledit=new bool[2] {false,false};
m_palcommon=new bool[2] {false,false};
m_config=new SpecConfigForm();
m_output=new Output(2,1,false,false);
}
public string Description
{
get {return "Spectrum Assembly Language (Noddybox Mono Sprites)";}
}
public string ShortName
{
get {return "Spectrum Mono Sprites";}
}
public string Author
{
get {return Global.Copyright;}
}
public string URL
{
get {return Global.URL;}
}
public uint MaxColours
{
get {return 2;}
}
public Colour[] Palette
{
get {return m_pal;}
}
public bool[] SprPalEditable
{
get {return m_paledit;}
}
public bool[] SprPalCommon
{
get {return m_palcommon;}
}
public SpriteSize[] AllowedSizes
{
get {return m_size;}
}
public string ExportExtension
{
get {return "asm";}
}
public bool Export(string path, SpriteList sprites)
{
if (m_config.Shift && (sprites.Count%8)!=0)
{
throw new Exception("Must be a multiple of 8 sprites to pre-shift");
}
TextWriter w=File.CreateText(path);
int no=0;
foreach (Sprite s in sprites)
{
if (m_config.Shift)
{
m_output.AssemblyShifted(w,s,no);
no=(no+1)&7;
}
else
{
m_output.Assembly(w,s);
}
}
no=0;
if (m_config.Mask)
{
foreach (Sprite s in sprites)
{
Sprite mask=new Sprite(s);
mask.Name+="_mask";
for(uint y=0;y0;x2--)
if (s[x2-1,y]==1)
break;
if (x10)
for(uint x=x1;x