mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2024-11-06 05:01:26 +00:00
dfbbda37af
Stupid little lump tool, converts from lmp to pcx and back. qflmp -h for help.
197 lines
11 KiB
C
197 lines
11 KiB
C
/*
|
|
lmp.h
|
|
|
|
lump file tool (definitions)
|
|
|
|
Copyright (C) 1996-1997 Id Software, Inc.
|
|
Copyright (C) 2002 Bill Currie <bill@taniwha.org>
|
|
Copyright (C) 2002,2011 Jeff Teunissen <deek@quakeforge.net>
|
|
|
|
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:
|
|
|
|
Free Software Foundation, Inc.
|
|
59 Temple Place - Suite 330
|
|
Boston, MA 02111-1307, USA
|
|
*/
|
|
#ifndef __lmp_h
|
|
#define __lmp_h
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
# include "config.h"
|
|
#endif
|
|
|
|
#include <QF/qtypes.h>
|
|
|
|
typedef enum {
|
|
mo_none = 0,
|
|
mo_export,
|
|
mo_import
|
|
} lmpmode_t;
|
|
|
|
typedef struct {
|
|
lmpmode_t mode; // see above
|
|
int verbosity; // 0=silent
|
|
char *palette; // palette file to read
|
|
qboolean raw; // don't read / write header
|
|
short width; // width of images
|
|
short height; // height " "
|
|
} options_t;
|
|
|
|
typedef struct _Color {
|
|
byte red;
|
|
byte green;
|
|
byte blue;
|
|
} __attribute__((__packed__)) Color;
|
|
|
|
typedef union _Pixel {
|
|
Color color;
|
|
byte rgb[3];
|
|
} __attribute__((__packed__)) Pixel;
|
|
|
|
Pixel quake_palette[] = {
|
|
{{0x00,0x00,0x00}},{{0x0f,0x0f,0x0f}},{{0x1f,0x1f,0x1f}},{{0x2f,0x2f,0x2f}},
|
|
{{0x3f,0x3f,0x3f}},{{0x4b,0x4b,0x4b}},{{0x5b,0x5b,0x5b}},{{0x6b,0x6b,0x6b}},
|
|
{{0x7b,0x7b,0x7b}},{{0x8b,0x8b,0x8b}},{{0x9b,0x9b,0x9b}},{{0xab,0xab,0xab}},
|
|
{{0xbb,0xbb,0xbb}},{{0xcb,0xcb,0xcb}},{{0xdb,0xdb,0xdb}},{{0xeb,0xeb,0xeb}},
|
|
{{0x0f,0x0b,0x07}},{{0x17,0x0f,0x0b}},{{0x1f,0x17,0x0b}},{{0x27,0x1b,0x0f}},
|
|
{{0x2f,0x23,0x13}},{{0x37,0x2b,0x17}},{{0x3f,0x2f,0x17}},{{0x4b,0x37,0x1b}},
|
|
{{0x53,0x3b,0x1b}},{{0x5b,0x43,0x1f}},{{0x63,0x4b,0x1f}},{{0x6b,0x53,0x1f}},
|
|
{{0x73,0x57,0x1f}},{{0x7b,0x5f,0x23}},{{0x83,0x67,0x23}},{{0x8f,0x6f,0x23}},
|
|
{{0x0b,0x0b,0x0f}},{{0x13,0x13,0x1b}},{{0x1b,0x1b,0x27}},{{0x27,0x27,0x33}},
|
|
{{0x2f,0x2f,0x3f}},{{0x37,0x37,0x4b}},{{0x3f,0x3f,0x57}},{{0x47,0x47,0x67}},
|
|
{{0x4f,0x4f,0x73}},{{0x5b,0x5b,0x7f}},{{0x63,0x63,0x8b}},{{0x6b,0x6b,0x97}},
|
|
{{0x73,0x73,0xa3}},{{0x7b,0x7b,0xaf}},{{0x83,0x83,0xbb}},{{0x8b,0x8b,0xcb}},
|
|
{{0x00,0x00,0x00}},{{0x07,0x07,0x00}},{{0x0b,0x0b,0x00}},{{0x13,0x13,0x00}},
|
|
{{0x1b,0x1b,0x00}},{{0x23,0x23,0x00}},{{0x2b,0x2b,0x07}},{{0x2f,0x2f,0x07}},
|
|
{{0x37,0x37,0x07}},{{0x3f,0x3f,0x07}},{{0x47,0x47,0x07}},{{0x4b,0x4b,0x0b}},
|
|
{{0x53,0x53,0x0b}},{{0x5b,0x5b,0x0b}},{{0x63,0x63,0x0b}},{{0x6b,0x6b,0x0f}},
|
|
{{0x07,0x00,0x00}},{{0x0f,0x00,0x00}},{{0x17,0x00,0x00}},{{0x1f,0x00,0x00}},
|
|
{{0x27,0x00,0x00}},{{0x2f,0x00,0x00}},{{0x37,0x00,0x00}},{{0x3f,0x00,0x00}},
|
|
{{0x47,0x00,0x00}},{{0x4f,0x00,0x00}},{{0x57,0x00,0x00}},{{0x5f,0x00,0x00}},
|
|
{{0x67,0x00,0x00}},{{0x6f,0x00,0x00}},{{0x77,0x00,0x00}},{{0x7f,0x00,0x00}},
|
|
{{0x13,0x13,0x00}},{{0x1b,0x1b,0x00}},{{0x23,0x23,0x00}},{{0x2f,0x2b,0x00}},
|
|
{{0x37,0x2f,0x00}},{{0x43,0x37,0x00}},{{0x4b,0x3b,0x07}},{{0x57,0x43,0x07}},
|
|
{{0x5f,0x47,0x07}},{{0x6b,0x4b,0x0b}},{{0x77,0x53,0x0f}},{{0x83,0x57,0x13}},
|
|
{{0x8b,0x5b,0x13}},{{0x97,0x5f,0x1b}},{{0xa3,0x63,0x1f}},{{0xaf,0x67,0x23}},
|
|
{{0x23,0x13,0x07}},{{0x2f,0x17,0x0b}},{{0x3b,0x1f,0x0f}},{{0x4b,0x23,0x13}},
|
|
{{0x57,0x2b,0x17}},{{0x63,0x2f,0x1f}},{{0x73,0x37,0x23}},{{0x7f,0x3b,0x2b}},
|
|
{{0x8f,0x43,0x33}},{{0x9f,0x4f,0x33}},{{0xaf,0x63,0x2f}},{{0xbf,0x77,0x2f}},
|
|
{{0xcf,0x8f,0x2b}},{{0xdf,0xab,0x27}},{{0xef,0xcb,0x1f}},{{0xff,0xf3,0x1b}},
|
|
{{0x0b,0x07,0x00}},{{0x1b,0x13,0x00}},{{0x2b,0x23,0x0f}},{{0x37,0x2b,0x13}},
|
|
{{0x47,0x33,0x1b}},{{0x53,0x37,0x23}},{{0x63,0x3f,0x2b}},{{0x6f,0x47,0x33}},
|
|
{{0x7f,0x53,0x3f}},{{0x8b,0x5f,0x47}},{{0x9b,0x6b,0x53}},{{0xa7,0x7b,0x5f}},
|
|
{{0xb7,0x87,0x6b}},{{0xc3,0x93,0x7b}},{{0xd3,0xa3,0x8b}},{{0xe3,0xb3,0x97}},
|
|
{{0xab,0x8b,0xa3}},{{0x9f,0x7f,0x97}},{{0x93,0x73,0x87}},{{0x8b,0x67,0x7b}},
|
|
{{0x7f,0x5b,0x6f}},{{0x77,0x53,0x63}},{{0x6b,0x4b,0x57}},{{0x5f,0x3f,0x4b}},
|
|
{{0x57,0x37,0x43}},{{0x4b,0x2f,0x37}},{{0x43,0x27,0x2f}},{{0x37,0x1f,0x23}},
|
|
{{0x2b,0x17,0x1b}},{{0x23,0x13,0x13}},{{0x17,0x0b,0x0b}},{{0x0f,0x07,0x07}},
|
|
{{0xbb,0x73,0x9f}},{{0xaf,0x6b,0x8f}},{{0xa3,0x5f,0x83}},{{0x97,0x57,0x77}},
|
|
{{0x8b,0x4f,0x6b}},{{0x7f,0x4b,0x5f}},{{0x73,0x43,0x53}},{{0x6b,0x3b,0x4b}},
|
|
{{0x5f,0x33,0x3f}},{{0x53,0x2b,0x37}},{{0x47,0x23,0x2b}},{{0x3b,0x1f,0x23}},
|
|
{{0x2f,0x17,0x1b}},{{0x23,0x13,0x13}},{{0x17,0x0b,0x0b}},{{0x0f,0x07,0x07}},
|
|
{{0xdb,0xc3,0xbb}},{{0xcb,0xb3,0xa7}},{{0xbf,0xa3,0x9b}},{{0xaf,0x97,0x8b}},
|
|
{{0xa3,0x87,0x7b}},{{0x97,0x7b,0x6f}},{{0x87,0x6f,0x5f}},{{0x7b,0x63,0x53}},
|
|
{{0x6b,0x57,0x47}},{{0x5f,0x4b,0x3b}},{{0x53,0x3f,0x33}},{{0x43,0x33,0x27}},
|
|
{{0x37,0x2b,0x1f}},{{0x27,0x1f,0x17}},{{0x1b,0x13,0x0f}},{{0x0f,0x0b,0x07}},
|
|
{{0x6f,0x83,0x7b}},{{0x67,0x7b,0x6f}},{{0x5f,0x73,0x67}},{{0x57,0x6b,0x5f}},
|
|
{{0x4f,0x63,0x57}},{{0x47,0x5b,0x4f}},{{0x3f,0x53,0x47}},{{0x37,0x4b,0x3f}},
|
|
{{0x2f,0x43,0x37}},{{0x2b,0x3b,0x2f}},{{0x23,0x33,0x27}},{{0x1f,0x2b,0x1f}},
|
|
{{0x17,0x23,0x17}},{{0x0f,0x1b,0x13}},{{0x0b,0x13,0x0b}},{{0x07,0x0b,0x07}},
|
|
{{0xff,0xf3,0x1b}},{{0xef,0xdf,0x17}},{{0xdb,0xcb,0x13}},{{0xcb,0xb7,0x0f}},
|
|
{{0xbb,0xa7,0x0f}},{{0xab,0x97,0x0b}},{{0x9b,0x83,0x07}},{{0x8b,0x73,0x07}},
|
|
{{0x7b,0x63,0x07}},{{0x6b,0x53,0x00}},{{0x5b,0x47,0x00}},{{0x4b,0x37,0x00}},
|
|
{{0x3b,0x2b,0x00}},{{0x2b,0x1f,0x00}},{{0x1b,0x0f,0x00}},{{0x0b,0x07,0x00}},
|
|
{{0x00,0x00,0xff}},{{0x0b,0x0b,0xef}},{{0x13,0x13,0xdf}},{{0x1b,0x1b,0xcf}},
|
|
{{0x23,0x23,0xbf}},{{0x2b,0x2b,0xaf}},{{0x2f,0x2f,0x9f}},{{0x2f,0x2f,0x8f}},
|
|
{{0x2f,0x2f,0x7f}},{{0x2f,0x2f,0x6f}},{{0x2f,0x2f,0x5f}},{{0x2b,0x2b,0x4f}},
|
|
{{0x23,0x23,0x3f}},{{0x1b,0x1b,0x2f}},{{0x13,0x13,0x1f}},{{0x0b,0x0b,0x0f}},
|
|
{{0x2b,0x00,0x00}},{{0x3b,0x00,0x00}},{{0x4b,0x07,0x00}},{{0x5f,0x07,0x00}},
|
|
{{0x6f,0x0f,0x00}},{{0x7f,0x17,0x07}},{{0x93,0x1f,0x07}},{{0xa3,0x27,0x0b}},
|
|
{{0xb7,0x33,0x0f}},{{0xc3,0x4b,0x1b}},{{0xcf,0x63,0x2b}},{{0xdb,0x7f,0x3b}},
|
|
{{0xe3,0x97,0x4f}},{{0xe7,0xab,0x5f}},{{0xef,0xbf,0x77}},{{0xf7,0xd3,0x8b}},
|
|
{{0xa7,0x7b,0x3b}},{{0xb7,0x9b,0x37}},{{0xc7,0xc3,0x37}},{{0xe7,0xe3,0x57}},
|
|
{{0x7f,0xbf,0xff}},{{0xab,0xe7,0xff}},{{0xd7,0xff,0xff}},{{0x67,0x00,0x00}},
|
|
{{0x8b,0x00,0x00}},{{0xb3,0x00,0x00}},{{0xd7,0x00,0x00}},{{0xff,0x00,0x00}},
|
|
{{0xff,0xf3,0x93}},{{0xff,0xf7,0xc7}},{{0xff,0xff,0xff}},{{0x9f,0x5b,0x53}}
|
|
};
|
|
|
|
byte default_palette[] = {
|
|
0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x1f, 0x1f, 0x1f, 0x2f, 0x2f, 0x2f,
|
|
0x3f, 0x3f, 0x3f, 0x4b, 0x4b, 0x4b, 0x5b, 0x5b, 0x5b, 0x6b, 0x6b, 0x6b,
|
|
0x7b, 0x7b, 0x7b, 0x8b, 0x8b, 0x8b, 0x9b, 0x9b, 0x9b, 0xab, 0xab, 0xab,
|
|
0xbb, 0xbb, 0xbb, 0xcb, 0xcb, 0xcb, 0xdb, 0xdb, 0xdb, 0xeb, 0xeb, 0xeb,
|
|
0x0f, 0x0b, 0x07, 0x17, 0x0f, 0x0b, 0x1f, 0x17, 0x0b, 0x27, 0x1b, 0x0f,
|
|
0x2f, 0x23, 0x13, 0x37, 0x2b, 0x17, 0x3f, 0x2f, 0x17, 0x4b, 0x37, 0x1b,
|
|
0x53, 0x3b, 0x1b, 0x5b, 0x43, 0x1f, 0x63, 0x4b, 0x1f, 0x6b, 0x53, 0x1f,
|
|
0x73, 0x57, 0x1f, 0x7b, 0x5f, 0x23, 0x83, 0x67, 0x23, 0x8f, 0x6f, 0x23,
|
|
0x0b, 0x0b, 0x0f, 0x13, 0x13, 0x1b, 0x1b, 0x1b, 0x27, 0x27, 0x27, 0x33,
|
|
0x2f, 0x2f, 0x3f, 0x37, 0x37, 0x4b, 0x3f, 0x3f, 0x57, 0x47, 0x47, 0x67,
|
|
0x4f, 0x4f, 0x73, 0x5b, 0x5b, 0x7f, 0x63, 0x63, 0x8b, 0x6b, 0x6b, 0x97,
|
|
0x73, 0x73, 0xa3, 0x7b, 0x7b, 0xaf, 0x83, 0x83, 0xbb, 0x8b, 0x8b, 0xcb,
|
|
0x00, 0x00, 0x00, 0x07, 0x07, 0x00, 0x0b, 0x0b, 0x00, 0x13, 0x13, 0x00,
|
|
0x1b, 0x1b, 0x00, 0x23, 0x23, 0x00, 0x2b, 0x2b, 0x07, 0x2f, 0x2f, 0x07,
|
|
0x37, 0x37, 0x07, 0x3f, 0x3f, 0x07, 0x47, 0x47, 0x07, 0x4b, 0x4b, 0x0b,
|
|
0x53, 0x53, 0x0b, 0x5b, 0x5b, 0x0b, 0x63, 0x63, 0x0b, 0x6b, 0x6b, 0x0f,
|
|
0x07, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x17, 0x00, 0x00, 0x1f, 0x00, 0x00,
|
|
0x27, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x37, 0x00, 0x00, 0x3f, 0x00, 0x00,
|
|
0x47, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x57, 0x00, 0x00, 0x5f, 0x00, 0x00,
|
|
0x67, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x77, 0x00, 0x00, 0x7f, 0x00, 0x00,
|
|
0x13, 0x13, 0x00, 0x1b, 0x1b, 0x00, 0x23, 0x23, 0x00, 0x2f, 0x2b, 0x00,
|
|
0x37, 0x2f, 0x00, 0x43, 0x37, 0x00, 0x4b, 0x3b, 0x07, 0x57, 0x43, 0x07,
|
|
0x5f, 0x47, 0x07, 0x6b, 0x4b, 0x0b, 0x77, 0x53, 0x0f, 0x83, 0x57, 0x13,
|
|
0x8b, 0x5b, 0x13, 0x97, 0x5f, 0x1b, 0xa3, 0x63, 0x1f, 0xaf, 0x67, 0x23,
|
|
0x23, 0x13, 0x07, 0x2f, 0x17, 0x0b, 0x3b, 0x1f, 0x0f, 0x4b, 0x23, 0x13,
|
|
0x57, 0x2b, 0x17, 0x63, 0x2f, 0x1f, 0x73, 0x37, 0x23, 0x7f, 0x3b, 0x2b,
|
|
0x8f, 0x43, 0x33, 0x9f, 0x4f, 0x33, 0xaf, 0x63, 0x2f, 0xbf, 0x77, 0x2f,
|
|
0xcf, 0x8f, 0x2b, 0xdf, 0xab, 0x27, 0xef, 0xcb, 0x1f, 0xff, 0xf3, 0x1b,
|
|
0x0b, 0x07, 0x00, 0x1b, 0x13, 0x00, 0x2b, 0x23, 0x0f, 0x37, 0x2b, 0x13,
|
|
0x47, 0x33, 0x1b, 0x53, 0x37, 0x23, 0x63, 0x3f, 0x2b, 0x6f, 0x47, 0x33,
|
|
0x7f, 0x53, 0x3f, 0x8b, 0x5f, 0x47, 0x9b, 0x6b, 0x53, 0xa7, 0x7b, 0x5f,
|
|
0xb7, 0x87, 0x6b, 0xc3, 0x93, 0x7b, 0xd3, 0xa3, 0x8b, 0xe3, 0xb3, 0x97,
|
|
0xab, 0x8b, 0xa3, 0x9f, 0x7f, 0x97, 0x93, 0x73, 0x87, 0x8b, 0x67, 0x7b,
|
|
0x7f, 0x5b, 0x6f, 0x77, 0x53, 0x63, 0x6b, 0x4b, 0x57, 0x5f, 0x3f, 0x4b,
|
|
0x57, 0x37, 0x43, 0x4b, 0x2f, 0x37, 0x43, 0x27, 0x2f, 0x37, 0x1f, 0x23,
|
|
0x2b, 0x17, 0x1b, 0x23, 0x13, 0x13, 0x17, 0x0b, 0x0b, 0x0f, 0x07, 0x07,
|
|
0xbb, 0x73, 0x9f, 0xaf, 0x6b, 0x8f, 0xa3, 0x5f, 0x83, 0x97, 0x57, 0x77,
|
|
0x8b, 0x4f, 0x6b, 0x7f, 0x4b, 0x5f, 0x73, 0x43, 0x53, 0x6b, 0x3b, 0x4b,
|
|
0x5f, 0x33, 0x3f, 0x53, 0x2b, 0x37, 0x47, 0x23, 0x2b, 0x3b, 0x1f, 0x23,
|
|
0x2f, 0x17, 0x1b, 0x23, 0x13, 0x13, 0x17, 0x0b, 0x0b, 0x0f, 0x07, 0x07,
|
|
0xdb, 0xc3, 0xbb, 0xcb, 0xb3, 0xa7, 0xbf, 0xa3, 0x9b, 0xaf, 0x97, 0x8b,
|
|
0xa3, 0x87, 0x7b, 0x97, 0x7b, 0x6f, 0x87, 0x6f, 0x5f, 0x7b, 0x63, 0x53,
|
|
0x6b, 0x57, 0x47, 0x5f, 0x4b, 0x3b, 0x53, 0x3f, 0x33, 0x43, 0x33, 0x27,
|
|
0x37, 0x2b, 0x1f, 0x27, 0x1f, 0x17, 0x1b, 0x13, 0x0f, 0x0f, 0x0b, 0x07,
|
|
0x6f, 0x83, 0x7b, 0x67, 0x7b, 0x6f, 0x5f, 0x73, 0x67, 0x57, 0x6b, 0x5f,
|
|
0x4f, 0x63, 0x57, 0x47, 0x5b, 0x4f, 0x3f, 0x53, 0x47, 0x37, 0x4b, 0x3f,
|
|
0x2f, 0x43, 0x37, 0x2b, 0x3b, 0x2f, 0x23, 0x33, 0x27, 0x1f, 0x2b, 0x1f,
|
|
0x17, 0x23, 0x17, 0x0f, 0x1b, 0x13, 0x0b, 0x13, 0x0b, 0x07, 0x0b, 0x07,
|
|
0xff, 0xf3, 0x1b, 0xef, 0xdf, 0x17, 0xdb, 0xcb, 0x13, 0xcb, 0xb7, 0x0f,
|
|
0xbb, 0xa7, 0x0f, 0xab, 0x97, 0x0b, 0x9b, 0x83, 0x07, 0x8b, 0x73, 0x07,
|
|
0x7b, 0x63, 0x07, 0x6b, 0x53, 0x00, 0x5b, 0x47, 0x00, 0x4b, 0x37, 0x00,
|
|
0x3b, 0x2b, 0x00, 0x2b, 0x1f, 0x00, 0x1b, 0x0f, 0x00, 0x0b, 0x07, 0x00,
|
|
0x00, 0x00, 0xff, 0x0b, 0x0b, 0xef, 0x13, 0x13, 0xdf, 0x1b, 0x1b, 0xcf,
|
|
0x23, 0x23, 0xbf, 0x2b, 0x2b, 0xaf, 0x2f, 0x2f, 0x9f, 0x2f, 0x2f, 0x8f,
|
|
0x2f, 0x2f, 0x7f, 0x2f, 0x2f, 0x6f, 0x2f, 0x2f, 0x5f, 0x2b, 0x2b, 0x4f,
|
|
0x23, 0x23, 0x3f, 0x1b, 0x1b, 0x2f, 0x13, 0x13, 0x1f, 0x0b, 0x0b, 0x0f,
|
|
0x2b, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x4b, 0x07, 0x00, 0x5f, 0x07, 0x00,
|
|
0x6f, 0x0f, 0x00, 0x7f, 0x17, 0x07, 0x93, 0x1f, 0x07, 0xa3, 0x27, 0x0b,
|
|
0xb7, 0x33, 0x0f, 0xc3, 0x4b, 0x1b, 0xcf, 0x63, 0x2b, 0xdb, 0x7f, 0x3b,
|
|
0xe3, 0x97, 0x4f, 0xe7, 0xab, 0x5f, 0xef, 0xbf, 0x77, 0xf7, 0xd3, 0x8b,
|
|
0xa7, 0x7b, 0x3b, 0xb7, 0x9b, 0x37, 0xc7, 0xc3, 0x37, 0xe7, 0xe3, 0x57,
|
|
0x7f, 0xbf, 0xff, 0xab, 0xe7, 0xff, 0xd7, 0xff, 0xff, 0x67, 0x00, 0x00,
|
|
0x8b, 0x00, 0x00, 0xb3, 0x00, 0x00, 0xd7, 0x00, 0x00, 0xff, 0x00, 0x00,
|
|
0xff, 0xf3, 0x93, 0xff, 0xf7, 0xc7, 0xff, 0xff, 0xff, 0x9f, 0x5b, 0x53,
|
|
};
|
|
|
|
#endif // __lmp_h
|