summaryrefslogtreecommitdiff
path: root/apps/plugins/sdl/progs/quake/wad.c
diff options
context:
space:
mode:
authorFranklin Wei <git@fwei.tk>2018-02-11 15:34:30 -0500
committerFranklin Wei <git@fwei.tk>2018-02-11 15:34:30 -0500
commit33bfba86222efb6cc5b271b3e12b6cf3f38836c5 (patch)
tree8a7f11e101af6a094b4b86d3c0b9d72793005ed3 /apps/plugins/sdl/progs/quake/wad.c
parent8dd00a02d49a99997165a4c38a967738e90ba72f (diff)
downloadrockbox-duke3d.zip
rockbox-duke3d.tar.gz
rockbox-duke3d.tar.bz2
rockbox-duke3d.tar.xz
Quake: attempt 2duke3d
Change-Id: I4285036e967d7f0722802d43cf2096c808ca5799
Diffstat (limited to 'apps/plugins/sdl/progs/quake/wad.c')
-rw-r--r--apps/plugins/sdl/progs/quake/wad.c158
1 files changed, 158 insertions, 0 deletions
diff --git a/apps/plugins/sdl/progs/quake/wad.c b/apps/plugins/sdl/progs/quake/wad.c
new file mode 100644
index 0000000..c84f72c
--- /dev/null
+++ b/apps/plugins/sdl/progs/quake/wad.c
@@ -0,0 +1,158 @@
+/*
+Copyright (C) 1996-1997 Id Software, Inc.
+
+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.
+
+*/
+// wad.c
+
+#include "quakedef.h"
+
+int wad_numlumps;
+lumpinfo_t *wad_lumps;
+byte *wad_base;
+
+void SwapPic (qpic_t *pic);
+
+/*
+==================
+W_CleanupName
+
+Lowercases name and pads with spaces and a terminating 0 to the length of
+lumpinfo_t->name.
+Used so lumpname lookups can proceed rapidly by comparing 4 chars at a time
+Space padding is so names can be printed nicely in tables.
+Can safely be performed in place.
+==================
+*/
+void W_CleanupName (char *in, char *out)
+{
+ int i;
+ int c;
+
+ for (i=0 ; i<16 ; i++ )
+ {
+ c = in[i];
+ if (!c)
+ break;
+
+ if (c >= 'A' && c <= 'Z')
+ c += ('a' - 'A');
+ out[i] = c;
+ }
+
+ for ( ; i< 16 ; i++ )
+ out[i] = 0;
+}
+
+
+
+/*
+====================
+W_LoadWadFile
+====================
+*/
+void W_LoadWadFile (char *filename)
+{
+ lumpinfo_t *lump_p;
+ wadinfo_t *header;
+ unsigned i;
+ int infotableofs;
+
+ wad_base = COM_LoadHunkFile (filename);
+ if (!wad_base)
+ Sys_Error ("W_LoadWadFile: couldn't load %s", filename);
+
+ header = (wadinfo_t *)wad_base;
+
+ if (header->identification[0] != 'W'
+ || header->identification[1] != 'A'
+ || header->identification[2] != 'D'
+ || header->identification[3] != '2')
+ Sys_Error ("Wad file %s doesn't have WAD2 id\n",filename);
+
+ wad_numlumps = LittleLong(header->numlumps);
+ infotableofs = LittleLong(header->infotableofs);
+ wad_lumps = (lumpinfo_t *)(wad_base + infotableofs);
+
+ for (i=0, lump_p = wad_lumps ; i<wad_numlumps ; i++,lump_p++)
+ {
+ lump_p->filepos = LittleLong(lump_p->filepos);
+ lump_p->size = LittleLong(lump_p->size);
+ W_CleanupName (lump_p->name, lump_p->name);
+ if (lump_p->type == TYP_QPIC)
+ SwapPic ( (qpic_t *)(wad_base + lump_p->filepos));
+ }
+}
+
+
+/*
+=============
+W_GetLumpinfo
+=============
+*/
+lumpinfo_t *W_GetLumpinfo (char *name)
+{
+ int i;
+ lumpinfo_t *lump_p;
+ char clean[16];
+
+ W_CleanupName (name, clean);
+
+ for (lump_p=wad_lumps, i=0 ; i<wad_numlumps ; i++,lump_p++)
+ {
+ if (!strcmp(clean, lump_p->name))
+ return lump_p;
+ }
+
+ Sys_Error ("W_GetLumpinfo: %s not found", name);
+ return NULL;
+}
+
+void *W_GetLumpName (char *name)
+{
+ lumpinfo_t *lump;
+
+ lump = W_GetLumpinfo (name);
+
+ return (void *)(wad_base + lump->filepos);
+}
+
+void *W_GetLumpNum (int num)
+{
+ lumpinfo_t *lump;
+
+ if (num < 0 || num > wad_numlumps)
+ Sys_Error ("W_GetLumpNum: bad number: %i", num);
+
+ lump = wad_lumps + num;
+
+ return (void *)(wad_base + lump->filepos);
+}
+
+/*
+=============================================================================
+
+automatic byte swapping
+
+=============================================================================
+*/
+
+void SwapPic (qpic_t *pic)
+{
+ pic->width = LittleLong(pic->width);
+ pic->height = LittleLong(pic->height);
+}