====================
--- README ---------
====================
this is a source-dump of my QuakeTools project. it is an entry to a
greater project of documenting quakes ans quakeIIs file-internals and
a library to create, modify and show all of their files.
take a look in the doc-dir.
NOTE: nearly 90% of the code is strict ANSI-C, the rest of 10%
are 3 nested functions, and some trigraphs flowing around.
people who wants to give their pennies to this project are welcome.
current features in short:
read/writes/displays picture formats:
ppm/pgm/png/jpg
read/writes 3d formats:
tddd/3DS
read/writes/displays/extract/list/delete/replace/update quake formats:
wad/(bsp/vis/lit/prt/h?/map)/pak/(qc/dat)/mip/lmp
read/display only quake formats:
bsps of quakeII
write only quake formats:
mdl/spr
others:
can compress wads
can do fs-dithering
can do smoothing
uses high quality mipmap-scaling
build in script-system with recursion-capabilities
can load pictures directly into bsps
uses less memory
error robust
can parse entire directories and perform the default actions to every file
and subdirectory
can extract bsp/pak recursively
can extract/display wads out of maps
display:
animateable lights
possiblity to visualise the process of qbsp and light/rad
transparent water
mirrors
splitted in system-independend and system-dependend parts
rudimenal game-capabilities
wire/flat/8bit/16bit/24bit/32bit graphics-driver
multiple displays/cameras
executables:
qbsp (replacement, mid-level)
light (replacement, mid-level)
rad (replacement, mid-level)
vis (replacement, mid-level)
qview (replacement, mid-level)
ppmdiff (low-level)
qcc (replacement, mid-level)
qtools (superior to all mid-level programs, high-level)
NOTE: some of these features exists only rudimental and are not really
functional (mdlgen, sprgen, texmake)
NOTE: i really need feedback!! up to now i got only one bugreport (non-crashing)
and one comment of a linux-user.
the optimal case is if an amiga-clan (AmigaMercenaries, GoiGoi ...) or one
of the unix-clans (linux and irix) adopt the whole project for excessive
testing.
REQUEST: if there is someone out there who can program the parts for a X-display
you are welcome to put your creative minds into this project.
CONFUSED: i've send a message to the authors of the linux/amiga-port of quest
but didn't recieve an answer. i propose to join great parts of the
quest- and qtools-project.
====================
--- CAPABILITIES ---
====================
same capabilities as
-bspinfo (bspinfo, bspinfo3)
-light (light, HexenII, Hipnotic, arghlite)
-lightdis
-mapread
-mipidx
-qbsp (nearly every derivate)
-qcc (qcc, advqcc, unqcc, preqcc, proqcc)
-qdtool
-qeu
-qmap (qmap, exdawn, squake, worldoffantasy)
-qube
-rad3
-readmap
-vis (vis, HexenII, yavis, rvis)
-vispatch
coming soon
-EarthQuake
-pcx2wad
-pcx2wal
-qbsp (HexenII)
-qcc (HexenII)
coming late
-modelgen
-qmv
-qname
-sprgen
-texmake
maybe coming after 2000
-lmp2mpeg
-lmpc
-meddle
-edquake/ice/qed/qstudio/quest
====================
--- CHANGES --------
====================
11.09.98
-fixed wait for completed window-refresh libqsys/m68k/amigaos/amigaos.c
19.10.98
-fixed NAME-chunk not written correct libqtools/TDDD.c
20.10.98
-fixed removed extra reallocation libqtools/TDDD.c
-fixed removed "else" out of boundary compares libqtools/TDDD.c, libqbuild/brush.c, libqdisplay/cache.c
-fixed realloc clears now libqtools/misc.c
19.11.98
-fixed handling of conchars.<ext>/conback.<ext> to
raw-files libqtools/graphics.c, libqtools/wad.c, libqtools/script.c
*miscs completely re-structured TDDD libTDDD*, libqtools/TDDD.*
21.11.98
+added teleporter-transparency libqdisplay/surface.c, libqdisplay/tables.*
26.11.98
+added checks and compilation of liblists configure, liblists/Makefile*
+added --wide-view parameter libqdisplay/display.c, include/libqdisplay.h
*miscs moved parts needed by qsys from qtools to qsys libqtools/misc.*, libqsys/generic.*
*miscs make the amigaos-driver handle unlimited
displays, and implement resource-tracking
with liblists libqsys/m68k/amigaos.*
28.11.98
-fixed SwapFoat to SwapFloat libqsys/generic.h
-fixed m68k-dependend assembler-parts libTDDD/TDDD.h
*miscs moved parts needed by qsys from qtools to qsys
and make them replaceable by system-drivers libqtools/misc.*, libqsys/generic*
30.11.98
+added you can now save or view textures from maps
to raw mipmaps or wads (test.map -o test.wad) libqtools/bsp.*, libqtools/scripts.c
-fixed memory-eraser in qcc libqbuild/qcc.c
*miscs remove most of the static variable in qc libqbuild/qcc.c
*miscs completely rework of memorymanager *
*miscs change indentation of unqcc libqbuild/qcc.c
01.12.98
-fixed additional handling of conchars.<ext>/
conback.<ext> to raw-files and view libqtools/graphics.c, libqtools/wad.c, libqtools/script.c
23.12.98
+added Disastry's light modification libqbuild/light.c, libqtools/map.*
-fixed some misbehaviours in/for Write/ExtractMiptex libqbuild/writebsp.c, libqtools/script.c, libqtools/bsp.c
29.12.98
+added model and sprite compiler libq*/mdl*, libq*/spr*, libqbuild/qcc*, libqtools/memory.*
-fixed bug in unqcc with strings longer than 128/256
bytes, and a missing break resulting in extra-
ordinary longer processtime libqbuild/qcc.c
-fixed does compile on alpha/mips again *
*miscs changed some of the defines and strings to
support later configurability libq*/*
*miscs speedup qcc a LOT libqbuild/qcc.c
30.12.98
+added animateable displayable textures, skies and
warps ("+0...", "+0sky...", "+0*...") libqdisplay/surface.* libqdisplay/cache.* libqtools/bsp.* libqtools/mip.h
-fixed some bugs, don't remember *
*miscs added a hole lot statics
*miscs removed some of the global variables libqbuild/*
?quest again corrupted display-code
?quest sometimes the bsp to map converter can't find
the texture names and give "unknown"
01.01.99
+added first steps to implement mirrors libqtools/mip.h, libqdisplay/surface.*
+added --complete-search libqbuild/writebsp.*, util/qtools.c
+added animations from 0-9, A-Z are possible
now you can make little films libqbuild/writebsp.c, libqdisplay/cache.c
-fixed default texture if -1 found libqdisplay/cache.c
-fixed optimized and fixed bsp-texture-loader libqtools/bsp.c
-fixed nearly all compares are lowercase now, except
some rare cases of importing 3d-party maps libq*/*
*miscs HappyNewYear guys :^)
*miscs new source version 0.3 released
Version 0.3:
====================
--- TODO -----------
====================
allready done:
possibly use cpp as preprocessor for quakec (do not open the source-file
directly, instead open a pipe, into that cpp pipes (alternativly use
tempfile instead))
implement --wide-view, that displays the textures not only as is, but in
all mipmap-states and simple lighting too.
partially done:
support for quake2 (some things have been done for this)
loading/saving of models
ilbm/gif/pcx/bmp-support (but, I'm not the man to programm that crap
, some has been done, but not everything)
alias-lists for texture-names: we expand an array of texturenames and its
aliases "alias\0texturename\0texturepath", so life is easy if you change your
texturenames on your harddrive or want to replace the standard-textures with
your own. and it is faster than searching through all your directories all
the time.
rejected:
an idea to patch a pre-processed pak-file that the bsp-files shares
textures: first we create a wad, that contains all the textures that are
in the bsps (not in one, in all). than we create the bsps without adding
the textures and build the pak-file. now we post-process the bsps directly
in the pak-file (the bsps offsets to the textures exists but are -1) that
the offsets point into the location of the texture in the wad-file in the
pak-file.
-> Quake does not load the whole PAK, and the offsets are only valid for
the mipmap area, not even for the bsp-area
future ideas:
use zlib instead of own compression algorithm? (already in, but only
used for png)
make-like timestamp-updating?
lot of dokumentation (the whole source)
support for the extensions of bsp/worldcraft/... like prefabs etc.
if there are '/' in the mipmaps-name, we try to load wals instead of wads
(minor change, based upon the dir-keyword) [so it is possible to compile
quakeII-maps for quakeI
redefine some of the unused fields in structs for fast viewers (eg. a
fullcolor-field in miptexs, or a group-id in wads)
specify "lightcolors" in map-files for colored lights (quakeI and
quakeII), the lightmaps for colored light are saved after the normal
lightmaps, so we get get red-lightmap at "lightdatasize/4", green at
"lightdatasize/4 * 2", blue at "lightdatasize/4 * 3", that way it is
completely comatible to quake (dont forget to add lightofs)
a basic idea to enhance the bsp-format: after the bspheader we have room
for everything we want. the standard-header has offsets into the file, so
quake nor any other program that READ the file, expects that eg. the
entity-lump lies after the header. now we build a crc-sum, or something
other union like a magic number. we put that directly after the header.
now if we look for an enhanced bsp-file we check that number and voila
we put everything what we want into the bsp-file.
some ideas for extensions:
- write the texture-strings into a lump and save them, but don't load the
textures, so we have the same capability as quakeII for quakeI, but it
doesn't work for quakeI.exe, 'cause quakeI misses the texture-lump
- we can save the precalculated values from qview into a special lump
- we can save the colored light-tables into a special lump instead after
the original lightmaps
- ...
make the subdivision configureable in libqdisplay, at 0 the results must
be amazing
implement hooks into light/rad that execute if new lightmap has been
created (could be used for visualisation of lights/rads behaviour)
maybe give light/rad the possibility to calculate only specific triangles
or intervals of triangles (could be used for recalculating all triangles
that are visible in a bsp-display, and render them again)
make submodels to be displayed by DisplayBSP
make anim-textures to be displayed by DisplayBSP
try to replace all Error by eprintf and clean cleanup
implement '$'-commands into qcc
remove all map-specific stuff out of bspmemory and vice versa
thats only texinfo, so go through mapmemory all the time, and save
them to the bspmemory at FinishBSP, must be set before SubdivideFace!
(->SolidBSP) and before vis/light/rad but they are no problem
check for alloca in configure
entities are the only map-resources in light/rad, maybe simplify them
allow the "bsps", "_bsps" keyword in maps to load textures directly out of
bsps in addition to wads and dirs
... (too much)
suggestions are welcome!
|