dgamelaunch/stripgfx.c

400 lines
12 KiB
C

/* Parts taken from drawing.c, nethack source */
/* Copyright (c) NetHack Development Team 1992. */
/* NetHack may be freely redistributed. See license for details. */
#include <string.h>
#include "stripgfx.h"
#define MAXPCHARS 92
unsigned char gfx_map[256];
unsigned int state = 0;
static unsigned char no_graphics[MAXPCHARS] = {
' ', /* 0 */
/* stone */
'|', /* vwall */
'-', /* hwall */
'-', /* tlcorn */
'-', /* trcorn */
'-', /* blcorn */
'-', /* brcorn */
'-', /* crwall */
'-', /* tuwall */
'-', /* tdwall */
'|', /* 10 */
/* tlwall */
'|', /* trwall */
'.', /* ndoor */
'-', /* vodoor */
'|', /* hodoor */
'+', /* vcdoor */
'+', /* hcdoor */
'#', /* bars */
'#', /* tree */
'.', /* room */
'#', /* 20 */
/* dark corr */
'#', /* lit corr */
'<', /* upstair */
'>', /* dnstair */
'<', /* upladder */
'>', /* dnladder */
'_', /* altar */
'|', /* grave */
'\\', /* throne */
'#', /* sink */
'{', /* 30 */
/* fountain */
'}', /* pool */
'.', /* ice */
'}', /* lava */
'.', /* vodbridge */
'.', /* hodbridge */
'#', /* vcdbridge */
'#', /* hcdbridge */
' ', /* open air */
'#', /* [part of] a cloud */
'}', /* 40 */
/* under water */
'^', /* trap */
'^', /* trap */
'^', /* trap */
'^', /* trap */
'^', /* trap */
'^', /* trap */
'^', /* trap */
'^', /* trap */
'^', /* trap */
'^', /* 50 */
/* trap */
'^', /* trap */
'^', /* trap */
'^', /* trap */
'^', /* trap */
'^', /* trap */
'^', /* trap */
'^', /* trap */
'"', /* web */
'^', /* trap */
'^', /* 60 */
/* trap */
'^', /* trap */
'^', /* trap */
'|', /* vbeam */
'-', /* hbeam */
'\\', /* lslant */
'/', /* rslant */
'*', /* dig beam */
'!', /* camera flash beam */
')', /* boomerang open left */
'(', /* 70 */
/* boomerang open right */
'0', /* 4 magic shield symbols */
'#',
'@',
'*',
'/', /* swallow top left */
'-', /* swallow top center */
'\\', /* swallow top right */
'|', /* swallow middle left */
'|', /* swallow middle right */
'\\', /* 80 */
/* swallow bottom left */
'-', /* swallow bottom center */
'/', /* swallow bottom right */
'/', /* explosion top left */
'-', /* explosion top center */
'\\', /* explosion top right */
'|', /* explosion middle left */
' ', /* explosion middle center */
'|', /* explosion middle right */
'\\', /* explosion bottom left */
'-', /* 90 */
/* explosion bottom center */
'/' /* explosion bottom right */
};
static unsigned char ibm_graphics[MAXPCHARS] = {
/* 0*/ 0x00,
0xb3, /* : meta-3, vertical rule */
0xc4, /* : meta-D, horizontal rule */
0xda, /* : meta-Z, top left corner */
0xbf, /* : meta-?, top right corner */
0xc0, /* : meta-@, bottom left */
0xd9, /* : meta-Y, bottom right */
0xc5, /* : meta-E, cross */
0xc1, /* : meta-A, T up */
0xc2, /* : meta-B, T down */
/*10 */ 0xb4,
/* : meta-4, T left */
0xc3, /* : meta-C, T right */
0xfa, /* : meta-z, centered dot */
0xfe, /* : meta-~, small centered square */
0xfe, /* : meta-~, small centered square */
0x00,
0x00,
240, /* : equivalence symbol */
241, /* : plus or minus symbol */
0xfa, /* : meta-z, centered dot */
/*20 */ 0xb0,
/* : meta-0, light shading */
0xb1, /* : meta-1, medium shading */
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
/*30 */ 0xf4,
/* : meta-t, integral top half */
0xf7, /* : meta-w, approx. equals */
0xfa, /* : meta-z, centered dot */
0xf7, /* : meta-w, approx. equals */
0xfa, /* : meta-z, centered dot */
0xfa, /* : meta-z, centered dot */
0x00,
0x00,
0x00,
0x00,
/*40 */ 0xf7,
/* : meta-w, approx. equals */
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
/*50*/ 0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
/*60*/ 0x00,
0x00,
0x00,
0xb3, /* : meta-3, vertical rule */
0xc4, /* : meta-D, horizontal rule */
0x00,
0x00,
0x00,
0x00,
0x00,
/*70*/ 0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0xb3, /* : meta-3, vertical rule */
0xb3, /* : meta-3, vertical rule */
/*80*/ 0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0xb3, /* : meta-3, vertical rule */
0x00,
0xb3, /* : meta-3, vertical rule */
0x00,
/*90*/ 0x00,
0x00
};
static unsigned char dec_graphics[MAXPCHARS] = {
/* 0*/ 0x00,
0xf8, /* : meta-x, vertical rule */
0xf1, /* : meta-q, horizontal rule */
0xec, /* : meta-l, top left corner */
0xeb, /* : meta-k, top right corner */
0xed, /* : meta-m, bottom left */
0xea, /* : meta-j, bottom right */
0xee, /* : meta-n, cross */
0xf6, /* : meta-v, T up */
0xf7, /* : meta-w, T down */
/*10 */ 0xf5,
/* : meta-u, T left */
0xf4, /* : meta-t, T right */
0xfe, /* : meta-~, centered dot */
0xe1, /* : meta-a, solid block */
0xe1, /* : meta-a, solid block */
0x00,
0x00,
0xfb, /* : meta-{, small pi */
0xe7, /* : meta-g, plus-or-minus */
0xfe, /* : meta-~, centered dot */
/*20*/ 0x00,
0x00,
0x00,
0x00,
0xf9, /* : meta-y, greater-than-or-equals */
0xfa, /* : meta-z, less-than-or-equals */
0x00, /* 0xc3, \E)3: meta-C, dagger */
0x00,
0x00,
0x00,
/*30 */ 0x00,
/* 0xdb, \E)3: meta-[, integral top half */
0xe0, /* : meta-\, diamond */
0xfe, /* : meta-~, centered dot */
0xe0, /* : meta-\, diamond */
0xfe, /* : meta-~, centered dot */
0xfe, /* : meta-~, centered dot */
0x00,
0x00,
0x00,
0x00,
/*40 */ 0xe0,
/* : meta-\, diamond */
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
/*50*/ 0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0x00, /* 0xbd, \E)3: meta-=, int'l currency */
0x00,
/*60*/ 0x00,
0x00,
0x00,
0xf8, /* : meta-x, vertical rule */
0xf1, /* : meta-q, horizontal rule */
0x00,
0x00,
0x00,
0x00,
0x00,
/*70*/ 0x00,
0x00,
0x00,
0x00,
0x00,
0x00,
0xef, /* : meta-o, high horizontal line */
0x00,
0xf8, /* : meta-x, vertical rule */
0xf8, /* : meta-x, vertical rule */
/*80*/ 0x00,
0xf3, /* : meta-s, low horizontal line */
0x00,
0x00,
0xef, /* : meta-o, high horizontal line */
0x00,
0xf8, /* : meta-x, vertical rule */
0x00,
0xf8, /* : meta-x, vertical rule */
0x00,
/*90 */ 0xf3,
/* : meta-s, low horizontal line */
0x00
};
static unsigned char IBM_r_oc_syms[18] = { /* a la EPYX Rogue */
/* 0*/ '\0',
0x00,
0x18, /* weapon: up arrow */
/* 0x0a, */ 0x00,
/* armor: Vert rect with o */
/* 0x09, */ 0x00,
/* ring: circle with arrow */
/* 5 */ 0x0c,
/* amulet: "female" symbol */
0x00,
0x05, /* food: club (as in cards) */
0xad, /* potion: upside down '!' */
0x0e, /* scroll: musical note */
/*10*/ 0x00,
0xe7, /* wand: greek tau */
0x0f, /* gold: yes it's the same as gems */
0x0f, /* gems: fancy '*' */
0x00,
/*15*/ 0x00,
0x00,
0x00
};
void
populate_gfx_array (int gfxset)
{
int i;
state = 0;
memset (gfx_map, 0, 256);
if (gfxset == NO_GRAPHICS)
return;
for (i = 0; i < MAXPCHARS; i++)
{
if ((gfxset == DEC_GRAPHICS) && (dec_graphics[i])
&& !(gfx_map[dec_graphics[i]]))
gfx_map[dec_graphics[i] - 128] = no_graphics[i];
if ((gfxset == IBM_GRAPHICS) && (ibm_graphics[i]))
gfx_map[ibm_graphics[i]] = no_graphics[i];
}
if (gfxset == IBM_GRAPHICS)
state = -1;
/*
endwin();
for (i=0;i<256;i++) {
printf("%X:%X ",i,gfx_map[i]);
}
exit(1); */
}
unsigned char
strip_gfx (unsigned char inchar)
{
if ((inchar == 0x0E) && (state == 0))
{
state = 1;
return 0x00;
}
if ((inchar == 0x0F) && (state == 1))
{
state = 0;
return inchar;
}
if ((inchar == 0x1B) && (state == 1))
{
state = 0;
return inchar;
}
if (gfx_map[inchar] && (state == 1 || state == -1))
{
return gfx_map[inchar];
}
return inchar;
}