aboutsummaryrefslogtreecommitdiff
path: root/backends/dc/icon.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'backends/dc/icon.cpp')
-rw-r--r--backends/dc/icon.cpp232
1 files changed, 0 insertions, 232 deletions
diff --git a/backends/dc/icon.cpp b/backends/dc/icon.cpp
deleted file mode 100644
index 66d3d6f696..0000000000
--- a/backends/dc/icon.cpp
+++ /dev/null
@@ -1,232 +0,0 @@
-/* ScummVM - Scumm Interpreter
- * Dreamcast port
- * Copyright (C) 2002-2004 Marcus Comstedt
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * $URL$
- * $Id$
- *
- */
-
-#include <ronin/ronin.h>
-#include <string.h>
-
-#include "icon.h"
-
-void Icon::create_vmicon(void *buffer)
-{
- unsigned short *pal = (unsigned short *)buffer;
- unsigned char *pix = ((unsigned char *)buffer)+32;
-
- for(int n = 0; n<16; n++) {
- int p = palette[n];
- pal[n] =
- ((p>>16)&0xf000)|
- ((p>>12)&0x0f00)|
- ((p>> 8)&0x00f0)|
- ((p>> 4)&0x000f);
- }
-
- for(int line = 0; line < 32; line++) {
- memcpy(pix, &bitmap[32/2*(31-line)], 32/2);
- pix += 32/2;
- }
-}
-
-void Icon::create_texture()
-{
- static char tt[16] = { 0, 1, 4, 5, 16, 17, 20, 21,
- 64, 65, 68, 69, 80, 81, 84, 85 };
- unsigned short *tex = (unsigned short *)ta_txalloc(512);
- unsigned short *linebase;
- unsigned char *src = bitmap+sizeof(bitmap)-17;
- for(int y=0; y<16; y++) {
- linebase = tex + (tt[y]<<1);
- for(int x=0; x<16; x++, --src)
- linebase[tt[x]] = src[16]|(src[0]<<8);
- src -= 16;
- }
- texture = tex;
-}
-
-void Icon::setPalette(int pal)
-{
- unsigned int (*hwpal)[64][16] = (unsigned int (*)[64][16])0xa05f9000;
- for(int n = 0; n<16; n++)
- (*hwpal)[pal][n] = palette[n];
-}
-
-void Icon::draw(float x1, float y1, float x2, float y2, int pal,
- unsigned int argb)
-{
- struct polygon_list mypoly;
- struct packed_colour_vertex_list myvertex;
-
- mypoly.cmd =
- TA_CMD_POLYGON|TA_CMD_POLYGON_TYPE_TRANSPARENT|TA_CMD_POLYGON_SUBLIST|
- TA_CMD_POLYGON_STRIPLENGTH_2|TA_CMD_POLYGON_PACKED_COLOUR|TA_CMD_POLYGON_TEXTURED;
- mypoly.mode1 = TA_POLYMODE1_Z_ALWAYS|TA_POLYMODE1_NO_Z_UPDATE;
- mypoly.mode2 =
- TA_POLYMODE2_BLEND_SRC_ALPHA|TA_POLYMODE2_BLEND_DST_INVALPHA|
- TA_POLYMODE2_FOG_DISABLED|TA_POLYMODE2_ENABLE_ALPHA|
- TA_POLYMODE2_TEXTURE_MODULATE_ALPHA|TA_POLYMODE2_U_SIZE_32|
- TA_POLYMODE2_V_SIZE_32;
- mypoly.texture = TA_TEXTUREMODE_CLUT4|TA_TEXTUREMODE_CLUTBANK4(pal)|
- TA_TEXTUREMODE_ADDRESS(texture);
-
- mypoly.red = mypoly.green = mypoly.blue = mypoly.alpha = 0;
-
- ta_commit_list(&mypoly);
-
- myvertex.cmd = TA_CMD_VERTEX;
- myvertex.ocolour = 0;
- myvertex.colour = argb;
- myvertex.z = 0.5;
- myvertex.u = 0.0;
- myvertex.v = 1.0;
-
- myvertex.x = x1;
- myvertex.y = y1;
- ta_commit_list(&myvertex);
-
- myvertex.x = x2;
- myvertex.v = 0.0;
- ta_commit_list(&myvertex);
-
- myvertex.x = x1;
- myvertex.y = y2;
- myvertex.u = 1.0;
- myvertex.v = 1.0;
- ta_commit_list(&myvertex);
-
- myvertex.x = x2;
- myvertex.v = 0.0;
- myvertex.cmd |= TA_CMD_VERTEX_EOS;
- ta_commit_list(&myvertex);
-}
-
-int Icon::find_unused_pixel()
-{
- int use[16];
- memset(use, 0, sizeof(use));
- for(int n=0; n<32*32/2; n++) {
- unsigned char pix = bitmap[n];
- use[pix&0xf]++;
- use[pix>>4]++;
- }
- for(int i=0; i<16; i++)
- if(!use[i])
- return i;
- return -1;
-}
-
-bool Icon::load_image2(const void *data, int len)
-{
- struct {
- int size, w, h;
- short pla, bitcnt;
- int comp, sizeimg, xres, yres, used, imp;
- } hdr;
- if(len < 40)
- return false;
- memcpy(&hdr, data, 40);
- if(hdr.size != 40 || /* hdr.sizeimg<=0 || */ hdr.w<0 || hdr.h<0 ||
- hdr.bitcnt<0 || hdr.used<0)
- return false;
- if(!hdr.used)
- hdr.used = 1<<hdr.bitcnt;
- hdr.h >>= 1;
- /* Fix incorrect sizeimg (The Dig) */
- if(hdr.sizeimg < ((hdr.w*hdr.h*(1+hdr.bitcnt)+7)>>3))
- hdr.sizeimg = ((hdr.w*hdr.h*(1+hdr.bitcnt)+7)>>3);
- if(hdr.size + (hdr.used<<2) + hdr.sizeimg > len /* ||
- hdr.sizeimg < ((hdr.w*hdr.h*(1+hdr.bitcnt)+7)>>3) */)
- return false;
- if(hdr.w != 32 || hdr.h != 32 || hdr.bitcnt != 4 || hdr.used > 16)
- return false;
- memcpy(palette, ((const char *)data)+hdr.size, hdr.used<<2);
- memcpy(bitmap, ((const char *)data)+hdr.size+(hdr.used<<2), 32*32/2);
- for(int i=0; i<16; i++)
- palette[i] |= 0xff000000;
- for(int i=hdr.used; i<16; i++)
- palette[i] = 0;
- int unused = find_unused_pixel();
- if(unused >= 0) {
- const unsigned char *mask =
- ((const unsigned char *)data)+hdr.size+(hdr.used<<2)+32*32/2;
- unsigned char *pix = bitmap;
- for(int y=0; y<32; y++)
- for(int x=0; x<32/8; x++) {
- unsigned char mbits = *mask++;
- for(int z=0; z<4; z++) {
- unsigned char pbits = *pix;
- if(mbits & 64) pbits = (pbits & ~0xf) | unused;
- if(mbits & 128) pbits = (pbits & 0xf) | (unused << 4);
- *pix++ = pbits;
- mbits <<= 2;
- }
- }
- palette[unused] = 0;
- }
- return true;
-}
-
-bool Icon::load_image1(const void *data, int len, int offs)
-{
- struct {
- char w, h, colors, rsrv;
- short pla, bitcnt;
- int bytes, offs;
- } hdr;
- if(len < offs+16)
- return false;
- memcpy(&hdr, ((const char *)data)+offs, 16);
- if(hdr.bytes > 0 && hdr.offs >= 0 && hdr.offs+hdr.bytes <= len)
- return load_image2(((const char *)data)+hdr.offs, hdr.bytes);
- else
- return false;
-}
-
-bool Icon::load(const void *data, int len, int offs)
-{
- struct { short rsrv, type, cnt; } hdr;
- memset(bitmap, 0, sizeof(bitmap));
- memset(palette, 0, sizeof(palette));
- texture = NULL;
- if(len < offs+6)
- return false;
- memcpy(&hdr, ((const char *)data)+offs, 6);
- if(hdr.type != 1 || hdr.cnt < 1 || offs+6+(hdr.cnt<<4) > len)
- return false;
- for(int i=0; i<hdr.cnt; i++)
- if(load_image1(data, len, offs+6+(i<<4)))
- return true;
- return false;
-}
-
-bool Icon::load(const char *filename)
-{
- char buf[2048];
- int fd;
- if((fd = open(filename, O_RDONLY))>=0) {
- int sz;
- sz = read(fd, buf, sizeof(buf));
- close(fd);
- if(sz>0)
- return load(buf, sz);
- }
- return false;
-}