textures: Rewrite Freedoom's texture build system.
Stop using deutex's built-in texture builder and generate our own texture lumps. This is essential for compatibility reasons: the entries in the texture/pnames lumps must match the order of those in the original IWADs. Failure to match ordering means that some well-known WADs (eg. DTWID) would not work with Freedoom. This fixes #1, and also means that Freedoom can now be built in parallel using make's '-j' option.master
parent
1325800e86
commit
82d90f8e8a
|
@ -7,15 +7,9 @@ lumps/cph/misc-lumps/playpal.lmp
|
|||
lumps/freedoom.lmp
|
||||
lumps/freedm.lmp
|
||||
sprites/jond/placeholder/*.gif
|
||||
textures/phase1/pnames.txt
|
||||
textures/phase1/texture1.txt
|
||||
textures/phase2/pnames.txt
|
||||
textures/phase2/texture1.txt
|
||||
textures/freedm/pnames.txt
|
||||
textures/freedm/texture1.txt
|
||||
textures/texture1.txt
|
||||
wads/*.wad
|
||||
wads/*.zip
|
||||
pnames.txt
|
||||
wad*.txt
|
||||
*.bak
|
||||
*.pyc
|
||||
|
|
43
Makefile
43
Makefile
|
@ -51,34 +51,18 @@ subdirs:
|
|||
|
||||
force:
|
||||
|
||||
# build texture1.txt for different builds
|
||||
|
||||
textures/phase1/texture1.txt: textures/combined.txt
|
||||
@mkdir -p textures/phase1
|
||||
$(CPP) -DDOOM1 -DULTDOOM < $< > $@
|
||||
textures/phase2/texture1.txt: textures/combined.txt
|
||||
@mkdir -p textures/phase2
|
||||
$(CPP) -DDOOM1 -DDOOM2 < $< > $@
|
||||
textures/freedm/texture1.txt: textures/combined.txt
|
||||
@mkdir -p textures/freedm
|
||||
$(CPP) -DFREEDM < $< > $@
|
||||
|
||||
textures/phase1/pnames.txt: textures/phase1/texture1.txt
|
||||
scripts/extract-pnames.py -a > $@
|
||||
textures/phase2/pnames.txt: textures/phase2/texture1.txt
|
||||
scripts/extract-pnames.py -a > $@
|
||||
textures/freedm/pnames.txt: textures/freedm/texture1.txt
|
||||
pnames.txt:
|
||||
scripts/extract-pnames.py -a > $@
|
||||
|
||||
# update wadinfo.txt
|
||||
|
||||
wadinfo.txt: buildcfg.txt force textures/phase2/pnames.txt
|
||||
wadinfo.txt: buildcfg.txt force pnames.txt
|
||||
$(CPP) -P -DDOOM2 < $< | scripts/wadinfo-builder.py > $@
|
||||
wadinfo_phase1.txt: buildcfg.txt force textures/phase1/pnames.txt
|
||||
wadinfo_phase1.txt: buildcfg.txt force pnames.txt
|
||||
$(CPP) -P -DDOOM1 -DULTDOOM < $< | scripts/wadinfo-builder.py -dummy > $@
|
||||
wadinfo_phase2.txt: buildcfg.txt force textures/phase2/pnames.txt
|
||||
wadinfo_phase2.txt: buildcfg.txt force pnames.txt
|
||||
$(CPP) -P -DDOOM2 < $< | scripts/wadinfo-builder.py -dummy > $@
|
||||
wadinfo_freedm.txt : buildcfg.txt force textures/freedm/pnames.txt
|
||||
wadinfo_freedm.txt : buildcfg.txt force pnames.txt
|
||||
$(CPP) -P -DFREEDM < $< | scripts/wadinfo-builder.py -dummy > $@
|
||||
|
||||
%.wad.gz: %.wad
|
||||
|
@ -96,7 +80,6 @@ wadinfo_freedm.txt : buildcfg.txt force textures/freedm/pnames.txt
|
|||
|
||||
$(FREEDM): wadinfo_freedm.txt subdirs force
|
||||
@mkdir -p $(WADS)
|
||||
ln -sf freedm/texture1.txt textures/texture1.txt
|
||||
rm -f $@
|
||||
$(DEUTEX) $(DEUTEX_ARGS) -iwad -build wadinfo_freedm.txt $@
|
||||
|
||||
|
@ -105,18 +88,16 @@ $(FREEDM): wadinfo_freedm.txt subdirs force
|
|||
|
||||
$(FREEDOOM1): wadinfo_phase1.txt subdirs force
|
||||
@mkdir -p $(WADS)
|
||||
ln -sf phase1/texture1.txt textures/texture1.txt
|
||||
rm -f $@
|
||||
$(DEUTEX) $(DEUTEX_ARGS) -iwad -textures -lumps -patch -flats -sounds -musics -graphics -sprites -levels -build wadinfo_phase1.txt $@
|
||||
$(DEUTEX) $(DEUTEX_ARGS) -iwad -lumps -patch -flats -sounds -musics -graphics -sprites -levels -build wadinfo_phase1.txt $@
|
||||
|
||||
#---------------------------------------------------------
|
||||
# phase 2 (doom2) iwad
|
||||
|
||||
$(FREEDOOM2): wadinfo_phase2.txt subdirs force
|
||||
@mkdir -p $(WADS)
|
||||
ln -sf phase2/texture1.txt textures/texture1.txt
|
||||
rm -f $@
|
||||
$(DEUTEX) $(DEUTEX_ARGS) -iwad -textures -lumps -patch -flats -sounds -musics -graphics -sprites -levels -build wadinfo_phase2.txt $@
|
||||
$(DEUTEX) $(DEUTEX_ARGS) -iwad -lumps -patch -flats -sounds -musics -graphics -sprites -levels -build wadinfo_phase2.txt $@
|
||||
|
||||
doc: BUILD-SYSTEM.asc README.asc
|
||||
asciidoc BUILD-SYSTEM.asc
|
||||
|
@ -135,14 +116,8 @@ clean:
|
|||
./wadinfo_phase2.txt ./wadinfo_freedm.txt \
|
||||
./lumps/freedoom.lmp \
|
||||
./lumps/freedm.lmp \
|
||||
./textures/phase1/pnames.txt \
|
||||
./textures/phase1/texture1.txt \
|
||||
./textures/phase2/pnames.txt \
|
||||
./textures/phase2/texture1.txt \
|
||||
./textures/freedm/pnames.txt \
|
||||
./textures/freedm/texture1.txt \
|
||||
./textures/texture1.txt
|
||||
-rmdir $(WADS) textures/phase1 textures/phase2 textures/freedm
|
||||
pnames.txt
|
||||
-rmdir $(WADS)
|
||||
|
||||
make -C lumps clean
|
||||
make -C graphics/text clean
|
||||
|
|
39
buildcfg.txt
39
buildcfg.txt
|
@ -219,9 +219,28 @@ FOGMAP
|
|||
MFADEMAP
|
||||
C_END
|
||||
|
||||
; List of definitions for TEXTURE1
|
||||
[texture1]
|
||||
TEXTURE1
|
||||
; Textures:
|
||||
|
||||
#ifndef DOOM2
|
||||
|
||||
TEXTURE1 = fd1txtr1
|
||||
TEXTURE2 = fd1txtr2
|
||||
PNAMES = fd1pname
|
||||
|
||||
#else
|
||||
#ifdef FREEDM
|
||||
|
||||
TEXTURE1 = fdmtxtr1
|
||||
PNAMES = fdmpname
|
||||
|
||||
#else
|
||||
|
||||
TEXTURE1 = fd2txtr1
|
||||
PNAMES = fd2pname
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
; List of Sounds
|
||||
[sounds]
|
||||
|
@ -2538,19 +2557,7 @@ YSKUB0 7 18
|
|||
|
||||
[patches]
|
||||
|
||||
#ifdef ULTDOOM
|
||||
#include "textures/phase1/pnames.txt"
|
||||
#endif
|
||||
|
||||
#ifdef DOOM2
|
||||
|
||||
#ifdef FREEDM
|
||||
#include "textures/freedm/pnames.txt"
|
||||
#else
|
||||
#include "textures/phase2/pnames.txt"
|
||||
#endif
|
||||
|
||||
#endif
|
||||
#include "pnames.txt"
|
||||
|
||||
[flats]
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
|
||||
all : freedoom.lmp freedm.lmp misc-lumps genmidi-lump dmxgus.lmp
|
||||
all : freedoom.lmp freedm.lmp misc-lumps genmidi-lump dmxgus.lmp \
|
||||
fd1txtr1.lmp fd2txtr1.lmp fdmtxtr1.lmp
|
||||
|
||||
misc-lumps:
|
||||
make -C cph/misc-lumps
|
||||
|
@ -10,6 +11,9 @@ genmidi-lump:
|
|||
dmxgus.lmp:
|
||||
make -C dmxgus
|
||||
|
||||
fd1txtr1.lmp fd2txtr1.lmp fdmtxtr1.lmp:
|
||||
make -C textures
|
||||
|
||||
freedoom.lmp: force
|
||||
echo $(VERSION) > freedoom.lmp
|
||||
|
||||
|
@ -22,4 +26,5 @@ clean:
|
|||
make -C cph/misc-lumps clean
|
||||
make -C genmidi clean
|
||||
make -C dmxgus clean
|
||||
make -C textures clean
|
||||
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
textures/phase1/pnames.lmp
|
|
@ -0,0 +1 @@
|
|||
textures/phase1/texture1.lmp
|
|
@ -0,0 +1 @@
|
|||
textures/phase1/texture2.lmp
|
|
@ -0,0 +1 @@
|
|||
textures/phase2/pnames.lmp
|
|
@ -0,0 +1 @@
|
|||
textures/phase2/texture1.lmp
|
|
@ -0,0 +1 @@
|
|||
textures/freedm/pnames.lmp
|
|
@ -0,0 +1 @@
|
|||
textures/freedm/texture1.lmp
|
|
@ -0,0 +1,36 @@
|
|||
|
||||
CPP=../../scripts/simplecpp
|
||||
PHASE1_OUTPUTS = phase1/texture1.lmp phase1/texture2.lmp \
|
||||
phase1/pnames.lmp
|
||||
PHASE2_OUTPUTS = phase2/texture1.lmp phase2/pnames.lmp
|
||||
FREEDM_OUTPUTS = freedm/texture1.lmp freedm/pnames.lmp
|
||||
|
||||
all: $(PHASE1_OUTPUTS) $(PHASE2_OUTPUTS) $(FREEDM_OUTPUTS)
|
||||
|
||||
$(PHASE1_OUTPUTS): textures.cfg
|
||||
$(CPP) -DDOOM1 -DULTDOOM < textures.cfg | \
|
||||
./build-textures -compat_texture1=doom1/texture1.txt \
|
||||
-compat_texture2=doom1/texture2.txt \
|
||||
-compat_pnames=doom1/pnames.txt \
|
||||
-output_texture1=phase1/texture1.lmp \
|
||||
-output_texture2=phase1/texture2.lmp \
|
||||
-output_pnames=phase1/pnames.lmp
|
||||
|
||||
$(PHASE2_OUTPUTS): textures.cfg
|
||||
$(CPP) -DDOOM1 -DDOOM2 < textures.cfg | \
|
||||
./build-textures -compat_texture1=doom2/texture1.txt \
|
||||
-compat_pnames=doom2/pnames.txt \
|
||||
-output_texture1=phase2/texture1.lmp \
|
||||
-output_pnames=phase2/pnames.lmp
|
||||
|
||||
$(FREEDM_OUTPUTS): textures.cfg
|
||||
$(CPP) -DDOOM1 -DDOOM2 -DFREEDM < textures.cfg | \
|
||||
./build-textures -compat_texture1=doom2/texture1.txt \
|
||||
-compat_pnames=doom2/pnames.txt \
|
||||
-output_texture1=freedm/texture1.lmp \
|
||||
-output_pnames=freedm/pnames.lmp
|
||||
|
||||
|
||||
clean:
|
||||
rm -f $(PHASE1_OUTPUTS) $(PHASE2_OUTPUTS) $(FREEDM_OUTPUTS)
|
||||
|
|
@ -0,0 +1,352 @@
|
|||
#!/usr/bin/env python
|
||||
#
|
||||
# Copyright (c) 2014
|
||||
# Contributors to the Freedoom project. All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are
|
||||
# met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# * Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
# * Neither the name of the freedoom project nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||
# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
||||
# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
|
||||
# OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
#
|
||||
# Texture lump builder for Freedoom
|
||||
#
|
||||
# This script builds the TEXTURE1, TEXTURE2 and PNAMES lumps for
|
||||
# Freedoom - the lumps containing the texture definitions.
|
||||
#
|
||||
# Freedoom does not use deutex's built-in texture builder for several
|
||||
# reasons:
|
||||
#
|
||||
# Firstly, Freedoom's texture lumps need to be compatible with those
|
||||
# of the original Doom WADs. There are several examples of PWADs that
|
||||
# replace only PNAMES, or only TEXTURE1. Because the TEXTURE1 format
|
||||
# is tightly coupled to the ordering of the PNAMES lump, this means
|
||||
# that these WADs will fail in Freedoom unless the ordering is
|
||||
# strictly maintained. For example, if entry #3 in PNAMES is DOOR2_4,
|
||||
# it must also be the same in Freedoom's version of PNAMES.
|
||||
#
|
||||
# Freedoom has a single configuration file where all its textures are
|
||||
# defined, but doom.wad contains two separate lumps: TEXTURE1/TEXTURE2.
|
||||
# Similarly to the first problem, it's important that the compatible
|
||||
# lumps are built with the same textures in each: some WADs replace
|
||||
# TEXTURE1 but not TEXTURE2, with the result that many textures end
|
||||
# up missing.
|
||||
#
|
||||
# Finally, deutex does not allow a filename to be specified for
|
||||
# TEXTURE entries. That is to say, you can't do this:
|
||||
#
|
||||
# [textures]
|
||||
# TEXTURE1 = fdtxtr1.txt
|
||||
#
|
||||
# This is an annoying limitation that means that the different
|
||||
# Freedoom IWADs cannot be built in parallel by make.
|
||||
|
||||
import collections
|
||||
import re
|
||||
import sys
|
||||
import struct
|
||||
|
||||
COMMENT_RE = re.compile(r"\s*;.*")
|
||||
TEXTURE_NAME_RE = re.compile(r"\s*([\w-]+)\s+(-?\d+)\s+(-?\d+)")
|
||||
PATCH_NAME_RE = re.compile(r"\s*\*\s+([\w-]+)\s+(-?\d+)\s+(-?\d+)")
|
||||
|
||||
Texture = collections.namedtuple("Texture", ["w", "h", "patches"])
|
||||
TexturePatch = collections.namedtuple("TexturePatch", ["pname", "x", "y"])
|
||||
|
||||
class TextureSet(collections.OrderedDict):
|
||||
def __init__(self, pnames):
|
||||
"""Initialize a new set of textures.
|
||||
|
||||
Args:
|
||||
pnames: List of PNAMES to use for the textures. New
|
||||
patches will be added to this list as the texture
|
||||
set is extended.
|
||||
"""
|
||||
super(TextureSet, self).__init__()
|
||||
self.pnames = pnames
|
||||
|
||||
def pname_index(self, pname):
|
||||
"""Get the index into the PNAMES list for the given patch.
|
||||
|
||||
If the patch is not in the list, it will be added to the
|
||||
list.
|
||||
|
||||
Args:
|
||||
pname: Name of the patch to look up.
|
||||
Returns:
|
||||
Index into the PNAMES list where this patch can be found.
|
||||
"""
|
||||
try:
|
||||
return self.pnames.index(pname)
|
||||
except ValueError:
|
||||
self.pnames.append(pname.upper())
|
||||
return len(self.pnames) - 1
|
||||
|
||||
def add_texture(self, name, width=0, height=0):
|
||||
"""Add a new texture to the set.
|
||||
|
||||
If a texture is already defined with the given name, the
|
||||
current definition is erased (though the ordering of
|
||||
textures is maintained).
|
||||
|
||||
Args:
|
||||
name: Name of the texture.
|
||||
width: Width of the texture in pixels.
|
||||
height: Height of the texture in pixels.
|
||||
"""
|
||||
self[name] = Texture(width, height, [])
|
||||
|
||||
def add_texture_patch(self, txname, patch, x, y):
|
||||
"""Add a patch to the given texture.
|
||||
|
||||
Args:
|
||||
txname: Name of the texture.
|
||||
patch: Name of the patch to add.
|
||||
x: X offset for the patch in pixels.
|
||||
y: Y offset for the patch in pixels.
|
||||
"""
|
||||
texture = self[txname]
|
||||
tp = TexturePatch(self.pname_index(patch), x, y)
|
||||
texture.patches.append(tp)
|
||||
|
||||
def write_texture_lump(self, filename):
|
||||
"""Build the texture lump and output to a file.
|
||||
|
||||
Args:
|
||||
filename: Path to file in which to store the resulting
|
||||
lump.
|
||||
"""
|
||||
with open(filename, "w") as out:
|
||||
# Header indicating number of textures:
|
||||
out.write(struct.pack("<l", len(self)))
|
||||
|
||||
# Offsets:
|
||||
offset = 4 + 4 * len(self)
|
||||
for _, texture in self.items():
|
||||
out.write(struct.pack("<l", offset))
|
||||
offset += 22 + 10 * len(texture.patches)
|
||||
|
||||
# Write actual texture data:
|
||||
for name, texture in self.items():
|
||||
maptexture = struct.pack("<8slhhlh",
|
||||
name, 0, texture.w, texture.h,
|
||||
0, len(texture.patches))
|
||||
out.write(maptexture)
|
||||
|
||||
# Patches:
|
||||
for patch in texture.patches:
|
||||
mappatch = struct.pack("<hhhhh",
|
||||
patch.x, patch.y, patch.pname,
|
||||
0, 0)
|
||||
out.write(mappatch)
|
||||
|
||||
|
||||
|
||||
class NamesFileError(Exception):
|
||||
pass
|
||||
|
||||
def read_names_file(filename):
|
||||
"""Read a list of names from a text file.
|
||||
|
||||
The names are a maximum of 8 characters long.
|
||||
Args:
|
||||
filename: Name of the file from which to read names.
|
||||
Returns:
|
||||
List of name strings, all in upper case.
|
||||
"""
|
||||
with open(filename) as f:
|
||||
result = []
|
||||
for line in f:
|
||||
line = COMMENT_RE.sub('', line).strip()
|
||||
if len(line) > 8:
|
||||
raise NamesFileError(
|
||||
'Invalid name in %s: %s' % (filename, line))
|
||||
if line != '':
|
||||
result.append(line.upper())
|
||||
return result
|
||||
|
||||
def load_compat_textures(textures, compat_file):
|
||||
"""Pre-populate a texture set from a compatibility file.
|
||||
|
||||
Args:
|
||||
textures: TextureSet to populate.
|
||||
compat_file: Path to text file containing list of textures. If
|
||||
None, do not do anything.
|
||||
"""
|
||||
if compat_file is None:
|
||||
return
|
||||
|
||||
for texture in read_names_file(compat_file):
|
||||
textures.add_texture(texture)
|
||||
|
||||
class TextureConfigError(Exception):
|
||||
pass
|
||||
|
||||
def parse_textures(stream):
|
||||
"""Parse texture config from the given input stream.
|
||||
|
||||
Args:
|
||||
stream: Input stream from which to read lines of input.
|
||||
Yields:
|
||||
A tuple for each parsed texture, containing:
|
||||
Texture name
|
||||
Width
|
||||
Height
|
||||
List of tuples representing each patch, where each contains:
|
||||
Patch name
|
||||
X offset
|
||||
Y offset
|
||||
"""
|
||||
current_texture = None
|
||||
current_patches = []
|
||||
linenum = 0
|
||||
for line in sys.stdin:
|
||||
line = COMMENT_RE.sub('', line).strip()
|
||||
linenum += 1
|
||||
|
||||
match = TEXTURE_NAME_RE.match(line)
|
||||
if match:
|
||||
if current_texture is not None:
|
||||
yield current_texture
|
||||
|
||||
current_patches = []
|
||||
current_texture = (
|
||||
match.group(1), # Texture name
|
||||
int(match.group(2)), # Width
|
||||
int(match.group(3)), # Height
|
||||
current_patches, # List of patches
|
||||
)
|
||||
continue
|
||||
|
||||
match = PATCH_NAME_RE.match(line)
|
||||
if match and current_texture:
|
||||
current_patches.append((
|
||||
match.group(1), # Patch name
|
||||
int(match.group(2)), # X offset
|
||||
int(match.group(3)), # Y offset
|
||||
))
|
||||
continue
|
||||
|
||||
if line != '':
|
||||
raise TextureConfigError(
|
||||
'input:%i:Invalid config line: %s' %
|
||||
(linenum, line))
|
||||
|
||||
# Last texture:
|
||||
if current_texture is not None:
|
||||
yield current_texture
|
||||
|
||||
def write_pnames_lump(pnames, filename):
|
||||
"""Write a PNAMES list to a file.
|
||||
|
||||
Args:
|
||||
pnames: List of strings containing patch names.
|
||||
filename: Output filename.
|
||||
"""
|
||||
with open(filename, "w") as out:
|
||||
out.write(struct.pack("<l", len(pnames)))
|
||||
for pname in pnames:
|
||||
out.write(struct.pack("8s", pname))
|
||||
|
||||
def usage():
|
||||
print """
|
||||
Usage: %s -output_texture1=texture1.lmp -output_pnames=pnames.lmp < config.txt
|
||||
|
||||
Full list of arguments:
|
||||
-output_texture1: Path to the TEXTURE1 lump to generate (required).
|
||||
-output_texture2: Path to the TEXTURE2 lump to generate.
|
||||
-output_pnames: Path to the PNAMES lump to generate (required).
|
||||
-compat_texture1: File containing compatibility list of TEXTURE1 textures
|
||||
-compat_texture2: File containing compatibility list of TEXTURE2 textures
|
||||
-compat_pnames: File containing compatibility list of PNAMES
|
||||
"""
|
||||
sys.exit(1)
|
||||
|
||||
def parse_command_line(args):
|
||||
"""Parse command line arguments.
|
||||
|
||||
Args:
|
||||
args: List of command line arguments to parse.
|
||||
Returns:
|
||||
Dictionary mapping from arg name to value.
|
||||
"""
|
||||
|
||||
# Parse command line:
|
||||
valid_args = ("compat_texture1", "compat_texture2", "compat_pnames",
|
||||
"output_texture1", "output_texture2", "output_pnames")
|
||||
result = {arg: None for arg in valid_args}
|
||||
|
||||
for arg in args:
|
||||
if not arg.startswith("-") or "=" not in arg:
|
||||
usage()
|
||||
name, value = arg[1:].split("=", 2)
|
||||
if name not in valid_args:
|
||||
usage()
|
||||
result[name] = value
|
||||
|
||||
# Required args:
|
||||
if not result["output_texture1"] or not result["output_pnames"]:
|
||||
usage()
|
||||
|
||||
return result
|
||||
|
||||
args = parse_command_line(sys.argv[1:])
|
||||
|
||||
# If we have a compatibility PNAMES list, populate it. Otherwise PNAMES
|
||||
# just starts from an empty list.
|
||||
if args["compat_pnames"]:
|
||||
pnames = read_names_file(args["compat_pnames"])
|
||||
else:
|
||||
pnames = []
|
||||
|
||||
# Generate basic data structures. The two texture lumps share a list
|
||||
# of PNAMES.
|
||||
texture1 = TextureSet(pnames)
|
||||
texture2 = TextureSet(pnames)
|
||||
|
||||
# If we have compatibility lists for TEXTURE1/TEXTURE2, we need to
|
||||
# populate the texture sets with them before we start parsing any real
|
||||
# configuration.
|
||||
load_compat_textures(texture1, args["compat_texture1"])
|
||||
load_compat_textures(texture2, args["compat_texture2"])
|
||||
|
||||
# Parse the config file and store the texture data.
|
||||
for texture, width, height, patches in parse_textures(sys.stdin):
|
||||
|
||||
# If this texture was predefined for TEXTURE2, put it in that lump;
|
||||
# otherwise, one way or another it's going in TEXTURE1:
|
||||
if texture in texture2:
|
||||
textures = texture2
|
||||
else:
|
||||
textures = texture1
|
||||
|
||||
textures.add_texture(texture, width, height)
|
||||
for patch, x, y in patches:
|
||||
textures.add_texture_patch(texture, patch, x, y)
|
||||
|
||||
# Write lumps to output files:
|
||||
texture1.write_texture_lump(args["output_texture1"])
|
||||
if args["output_texture2"]:
|
||||
texture2.write_texture_lump(args["output_texture2"])
|
||||
write_pnames_lump(pnames, args["output_pnames"])
|
||||
|
|
@ -0,0 +1,354 @@
|
|||
; List of patch names from doom.wad (Ultimate Doom).
|
||||
; This is included as fair use for purposes of compatibility
|
||||
; and interoperability.
|
||||
WALL00_3
|
||||
W13_1
|
||||
DOOR2_1
|
||||
DOOR2_4
|
||||
DOOR9_1
|
||||
W113_1
|
||||
W113_2
|
||||
W113_3
|
||||
WALL62_2
|
||||
PS20A0
|
||||
WALL62_1
|
||||
W111_2
|
||||
W111_3
|
||||
W112_1
|
||||
W112_3
|
||||
W112_2
|
||||
WALL02_2
|
||||
WALL02_3
|
||||
WALL02_1
|
||||
WALL00_5
|
||||
WALL00_6
|
||||
WALL00_7
|
||||
WALL00_8
|
||||
WALL03_4
|
||||
TP2_1
|
||||
STEP07
|
||||
WALL05_2
|
||||
COMP02_1
|
||||
COMP02_2
|
||||
COMP02_4
|
||||
COMP02_3
|
||||
COMP02_6
|
||||
COMP02_8
|
||||
COMP02_7
|
||||
COMP02_5
|
||||
STEP08
|
||||
COMP03_4
|
||||
TOMW2_1
|
||||
AG128_2
|
||||
TOMW2_2
|
||||
COMP04_5
|
||||
COMP04_8
|
||||
COMP03_8
|
||||
COMP04_6
|
||||
COMP04_7
|
||||
COMP04_2
|
||||
COMP03_5
|
||||
COMP04_1
|
||||
COMP03_7
|
||||
COMP03_1
|
||||
COMP03_6
|
||||
COMP01_5
|
||||
COMP01_1
|
||||
W33_8
|
||||
COMP1C_6
|
||||
COMP01_6
|
||||
COMP1B_4
|
||||
SW11_4
|
||||
SW11_5
|
||||
WALL03_1
|
||||
DOOR2_5
|
||||
W46_37
|
||||
W46_38
|
||||
TTALL1_2
|
||||
DOORTRAK
|
||||
W46_39
|
||||
DOOR3_6
|
||||
DOOR3_4
|
||||
DOOR3_5
|
||||
T14_5
|
||||
EXIT1
|
||||
EXIT2
|
||||
W33_5
|
||||
W33_7
|
||||
W32_4
|
||||
W32_1
|
||||
WALL00_1
|
||||
WALL00_2
|
||||
FLAMP
|
||||
WLITA0
|
||||
WLITB0
|
||||
WLITC0
|
||||
AGB128_1
|
||||
W13_A
|
||||
W13_8
|
||||
BLITA0
|
||||
BLITB0
|
||||
BLITC0
|
||||
WALL03_7
|
||||
NUKEDGE
|
||||
WALL04_3
|
||||
WALL04_4
|
||||
WALL04_5
|
||||
WALL04_2
|
||||
WALL04_7
|
||||
WALL57_1
|
||||
TP2_2
|
||||
AG128_1
|
||||
TSCRN2
|
||||
TSCRN3
|
||||
TSCRN4
|
||||
TSCRN5
|
||||
TSCRN6
|
||||
TSCRN8
|
||||
PLAT2_1
|
||||
W15_4
|
||||
W15_5
|
||||
SKY1
|
||||
WLA128_1
|
||||
WALL57_2
|
||||
WALL57_3
|
||||
WALL57_4
|
||||
SW12_1
|
||||
SW12_2
|
||||
SW19_3
|
||||
SW19_4
|
||||
SW11_1
|
||||
SW11_2
|
||||
SW12_4
|
||||
SW12_5
|
||||
SW17_4
|
||||
SW17_5
|
||||
SW17_6
|
||||
SW18_7
|
||||
SW19_1
|
||||
SW19_2
|
||||
STEP04
|
||||
STEP03
|
||||
STEP05
|
||||
STEP06
|
||||
STEP09
|
||||
STEP10
|
||||
WALL01_1
|
||||
WALL01_2
|
||||
WALL01_3
|
||||
WALL01_4
|
||||
WALL01_5
|
||||
WALL01_6
|
||||
WALL01_7
|
||||
WALL01_8
|
||||
WALL01_9
|
||||
WALL01_A
|
||||
WALL01_B
|
||||
WALL01_C
|
||||
W28_8
|
||||
W28_5
|
||||
W28_7
|
||||
W28_6
|
||||
SUPPORT2
|
||||
SW1S0
|
||||
SW3S0
|
||||
SW4S0
|
||||
SW3S1
|
||||
SW2S0
|
||||
W31_1
|
||||
WARNB0
|
||||
SW1S1
|
||||
SW4S1
|
||||
SW2S1
|
||||
WARNA0
|
||||
W17_1
|
||||
WALL24_1
|
||||
w94_1
|
||||
W104_1
|
||||
DOOR9_2
|
||||
WALL40_1
|
||||
WALL42_3
|
||||
DOOR11_1
|
||||
W105_1
|
||||
TP5_1
|
||||
TP5_2
|
||||
TP5_3
|
||||
TP5_4
|
||||
RP2_1
|
||||
RP2_2
|
||||
RP2_3
|
||||
RP2_4
|
||||
W107_1
|
||||
W106_1
|
||||
WALL03_3
|
||||
WALL52_1
|
||||
WALL53_1
|
||||
WALL54_1
|
||||
WALL55_1
|
||||
WALL52_2
|
||||
WALL54_2
|
||||
COMP03_2
|
||||
WALL21_1
|
||||
WALL21_5
|
||||
WALL21_3
|
||||
BCRATEL1
|
||||
BCRATER1
|
||||
GCRATEL1
|
||||
GCRATER1
|
||||
SGCRATE2
|
||||
VGCRATE1
|
||||
BCRATEM1
|
||||
GCRATEM1
|
||||
W108_2
|
||||
DOOR2_3
|
||||
W108_3
|
||||
W108_4
|
||||
W65B_1
|
||||
W65B_2
|
||||
W73A_2
|
||||
W73B_1
|
||||
W73A_1
|
||||
W74A_1
|
||||
W74A_2
|
||||
W74B_1
|
||||
WALL23_1
|
||||
WALL23_2
|
||||
WALL22_1
|
||||
DUCT1
|
||||
PS15A0
|
||||
WALL04_9
|
||||
WALL04_A
|
||||
WALL04_B
|
||||
WALL04_C
|
||||
PS18A0
|
||||
WALL58_1
|
||||
WALL58_2
|
||||
WALL58_3
|
||||
WALL30_2
|
||||
WALL30_4
|
||||
WALL48_1
|
||||
WALL48_2
|
||||
WALL48_3
|
||||
WALL48_4
|
||||
WALL59_1
|
||||
WALL59_2
|
||||
WALL59_3
|
||||
WALL59_4
|
||||
WALL30_3
|
||||
WALL69_4
|
||||
WALL70_3
|
||||
WALL71_5
|
||||
WALL72_7
|
||||
WALL69_9
|
||||
W67_2
|
||||
WALL72_5
|
||||
WALL72_3
|
||||
WALL70_4
|
||||
WALL70_2
|
||||
W67_1
|
||||
WALL70_9
|
||||
W15_6
|
||||
MWALL4_2
|
||||
MWALL5_1
|
||||
MWALL4_1
|
||||
MWALL1_1
|
||||
MWALL2_1
|
||||
MWALL3_1
|
||||
MWALL1_2
|
||||
WALL47_1
|
||||
DOOR12_1
|
||||
M1_1
|
||||
RP1_1
|
||||
RP1_2
|
||||
TP7_1
|
||||
TP7_2
|
||||
TP3_1
|
||||
TP3_2
|
||||
WALL78_1
|
||||
WALL64_2
|
||||
W64B_1
|
||||
W64B_2
|
||||
CYL1_1
|
||||
T14_3
|
||||
HELL8_2
|
||||
HELL8_4
|
||||
HELL6_1
|
||||
HELL8_3
|
||||
W102_1
|
||||
W102_2
|
||||
HELL6_2
|
||||
HELL8_1
|
||||
HELL5_1
|
||||
HELL5_2
|
||||
W92_1
|
||||
W92_2
|
||||
W98_1
|
||||
W98_2
|
||||
W99_1
|
||||
W99_2
|
||||
W101_1
|
||||
W101_2
|
||||
W103_1
|
||||
W103_2
|
||||
W109_1
|
||||
W109_2
|
||||
W110_1
|
||||
SNAK7_1
|
||||
SNAK8_1
|
||||
SPINE4_1
|
||||
SPINE3_1
|
||||
SPINE3_2
|
||||
WALL76_1
|
||||
WALL79_1
|
||||
SKY2
|
||||
SKY3
|
||||
SKY4
|
||||
SW2_2
|
||||
WALL50_1
|
||||
WALL50_2
|
||||
WALL51_1
|
||||
WALL51_2
|
||||
WALL51_3
|
||||
W108_1
|
||||
WALL25_1
|
||||
WALL49_1
|
||||
WALL49_2
|
||||
WALL49_3
|
||||
WALL49_4
|
||||
WALL63_1
|
||||
WALL63_2
|
||||
SW15_4
|
||||
SW16_4
|
||||
SW15_6
|
||||
SW16_6
|
||||
SW17_1
|
||||
SW17_2
|
||||
SW17_3
|
||||
SW18_5
|
||||
SW15_1
|
||||
SW15_3
|
||||
SW16_1
|
||||
SW16_2
|
||||
LADDER16
|
||||
RIPW15
|
||||
SW2_3
|
||||
SW2_7
|
||||
WALL47_2
|
||||
WALL42_6
|
||||
WALL42_5
|
||||
WALL42_1
|
||||
HELL6_3
|
||||
SW2_5
|
||||
WALL40_2
|
||||
SW2_8
|
||||
WALL47_5
|
||||
WALL47_4
|
||||
WALL47_3
|
||||
SW2_6
|
||||
WALL97_1
|
||||
WALL97_2
|
||||
WALL97_3
|
||||
SW2_1
|
||||
W96_1
|
||||
W96_2
|
||||
SW2_4
|
|
@ -0,0 +1,128 @@
|
|||
; List of textures in the TEXTURE1 lump from doom.wad (Ultimate Doom).
|
||||
; This is included as fair use for purposes of compatibility
|
||||
; and interoperability.
|
||||
AASTINKY
|
||||
BIGDOOR1
|
||||
BIGDOOR2
|
||||
BIGDOOR4
|
||||
BRNBIGC
|
||||
BRNBIGL
|
||||
BRNBIGR
|
||||
BRNPOIS
|
||||
BRNPOIS2
|
||||
BRNSMAL1
|
||||
BRNSMAL2
|
||||
BRNSMALC
|
||||
BRNSMALL
|
||||
BRNSMALR
|
||||
BROWN1
|
||||
BROWN144
|
||||
BROWN96
|
||||
BROWNGRN
|
||||
BROWNHUG
|
||||
BROWNPIP
|
||||
COMP2
|
||||
COMPSPAN
|
||||
COMPSTA1
|
||||
COMPSTA2
|
||||
COMPTALL
|
||||
COMPTILE
|
||||
COMPUTE1
|
||||
COMPUTE2
|
||||
COMPUTE3
|
||||
DOOR1
|
||||
DOOR3
|
||||
DOORBLU
|
||||
DOORRED
|
||||
DOORSTOP
|
||||
DOORTRAK
|
||||
DOORYEL
|
||||
EXITDOOR
|
||||
EXITSIGN
|
||||
GRAY4
|
||||
GRAY5
|
||||
GRAY7
|
||||
GRAYTALL
|
||||
LITE2
|
||||
LITE3
|
||||
LITE4
|
||||
LITE5
|
||||
LITEBLU1
|
||||
LITEBLU2
|
||||
LITEBLU3
|
||||
LITEBLU4
|
||||
METAL1
|
||||
NUKE24
|
||||
NUKEDGE1
|
||||
NUKESLAD
|
||||
PIPE2
|
||||
PLANET1
|
||||
PLAT1
|
||||
REDWALL1
|
||||
SHAWN2
|
||||
SKY1
|
||||
SLADPOIS
|
||||
SLADRIP1
|
||||
SLADRIP2
|
||||
SLADRIP3
|
||||
SLADWALL
|
||||
STARG1
|
||||
STARG3
|
||||
STARGR1
|
||||
STARTAN1
|
||||
STARTAN2
|
||||
STARTAN3
|
||||
STEP1
|
||||
STEP2
|
||||
STEP3
|
||||
STEP4
|
||||
STEP5
|
||||
STEP6
|
||||
STONE
|
||||
STONE2
|
||||
STONE3
|
||||
STONPOIS
|
||||
SUPPORT2
|
||||
SW1BRCOM
|
||||
SW1BRN1
|
||||
SW1BRN2
|
||||
SW1BRNGN
|
||||
SW1BROWN
|
||||
SW1COMM
|
||||
SW1COMP
|
||||
SW1DIRT
|
||||
SW1EXIT
|
||||
SW1GRAY
|
||||
SW1GRAY1
|
||||
SW1METAL
|
||||
SW1PIPE
|
||||
SW1SLAD
|
||||
SW1STARG
|
||||
SW1STON1
|
||||
SW1STON2
|
||||
SW1STONE
|
||||
SW1STRTN
|
||||
SW2BRCOM
|
||||
SW2BRN1
|
||||
SW2BRN2
|
||||
SW2BRNGN
|
||||
SW2BROWN
|
||||
SW2COMM
|
||||
SW2COMP
|
||||
SW2DIRT
|
||||
SW2EXIT
|
||||
SW2GRAY
|
||||
SW2GRAY1
|
||||
SW2METAL
|
||||
SW2PIPE
|
||||
SW2SLAD
|
||||
SW2STARG
|
||||
SW2STON1
|
||||
SW2STON2
|
||||
SW2STONE
|
||||
SW2STRTN
|
||||
TEKWALL1
|
||||
TEKWALL2
|
||||
TEKWALL3
|
||||
TEKWALL4
|
||||
TEKWALL5
|
|
@ -0,0 +1,165 @@
|
|||
; List of textures in the TEXTURE2 lump from doom.wad (Ultimate Doom).
|
||||
; This is included as fair use for purposes of compatibility
|
||||
; and interoperability.
|
||||
ASHWALL
|
||||
BIGDOOR3
|
||||
BIGDOOR5
|
||||
BIGDOOR6
|
||||
BIGDOOR7
|
||||
BLODGR1
|
||||
BLODGR2
|
||||
BLODGR3
|
||||
BLODGR4
|
||||
BLODRIP1
|
||||
BLODRIP2
|
||||
BLODRIP3
|
||||
BLODRIP4
|
||||
BROVINE
|
||||
BROVINE2
|
||||
BROWNWEL
|
||||
CEMENT1
|
||||
CEMENT2
|
||||
CEMENT3
|
||||
CEMENT4
|
||||
CEMENT5
|
||||
CEMENT6
|
||||
CEMPOIS
|
||||
COMPBLUE
|
||||
COMPOHSO
|
||||
COMPWERD
|
||||
CRATE1
|
||||
CRATE2
|
||||
CRATELIT
|
||||
CRATINY
|
||||
CRATWIDE
|
||||
DOORBLU2
|
||||
DOORHI
|
||||
DOORRED2
|
||||
DOORYEL2
|
||||
EXITSTON
|
||||
FIREBLU1
|
||||
FIREBLU2
|
||||
FIRELAV2
|
||||
FIRELAV3
|
||||
FIRELAVA
|
||||
FIREMAG1
|
||||
FIREMAG2
|
||||
FIREMAG3
|
||||
FIREWALA
|
||||
FIREWALB
|
||||
FIREWALL
|
||||
GRAY1
|
||||
GRAY2
|
||||
GRAYBIG
|
||||
GRAYDANG
|
||||
GRAYPOIS
|
||||
GRAYVINE
|
||||
GSTFONT1
|
||||
GSTFONT2
|
||||
GSTFONT3
|
||||
GSTGARG
|
||||
GSTLION
|
||||
GSTONE1
|
||||
GSTONE2
|
||||
GSTSATYR
|
||||
GSTVINE1
|
||||
GSTVINE2
|
||||
ICKDOOR1
|
||||
ICKWALL1
|
||||
ICKWALL2
|
||||
ICKWALL3
|
||||
ICKWALL4
|
||||
ICKWALL5
|
||||
ICKWALL6
|
||||
ICKWALL7
|
||||
LITE96
|
||||
LITEMET
|
||||
LITERED
|
||||
LITESTON
|
||||
MARBFAC2
|
||||
MARBFAC3
|
||||
MARBFACE
|
||||
MARBLE1
|
||||
MARBLE2
|
||||
MARBLE3
|
||||
MARBLOD1
|
||||
METAL
|
||||
MIDBRN1
|
||||
MIDGRATE
|
||||
MIDVINE1
|
||||
MIDVINE2
|
||||
NUKEPOIS
|
||||
PIPE1
|
||||
PIPE4
|
||||
PIPE6
|
||||
REDWALL
|
||||
ROCKRED1
|
||||
ROCKRED2
|
||||
ROCKRED3
|
||||
SHAWN1
|
||||
SHAWN3
|
||||
SKIN2
|
||||
SKINBORD
|
||||
SKINCUT
|
||||
SKINEDGE
|
||||
SKINFACE
|
||||
SKINLOW
|
||||
SKINMET1
|
||||
SKINMET2
|
||||
SKINSCAB
|
||||
SKINSYMB
|
||||
SKINTEK1
|
||||
SKINTEK2
|
||||
SKSNAKE1
|
||||
SKSNAKE2
|
||||
SKSPINE1
|
||||
SKSPINE2
|
||||
SKULWAL3
|
||||
SKULWALL
|
||||
SKY2
|
||||
SKY3
|
||||
SKY4
|
||||
SLADSKUL
|
||||
SP_DUDE1
|
||||
SP_DUDE2
|
||||
SP_DUDE3
|
||||
SP_DUDE4
|
||||
SP_DUDE5
|
||||
SP_DUDE6
|
||||
SP_FACE1
|
||||
SP_HOT1
|
||||
SP_ROCK1
|
||||
SP_ROCK2
|
||||
STARBR2
|
||||
STARG2
|
||||
STARGR2
|
||||
STEPLAD1
|
||||
STEPTOP
|
||||
STONGARG
|
||||
SUPPORT3
|
||||
SW1BLUE
|
||||
SW1CMT
|
||||
SW1GARG
|
||||
SW1GSTON
|
||||
SW1HOT
|
||||
SW1LION
|
||||
SW1SATYR
|
||||
SW1SKIN
|
||||
SW1VINE
|
||||
SW1WOOD
|
||||
SW2BLUE
|
||||
SW2CMT
|
||||
SW2GARG
|
||||
SW2GSTON
|
||||
SW2HOT
|
||||
SW2LION
|
||||
SW2SATYR
|
||||
SW2SKIN
|
||||
SW2VINE
|
||||
SW2WOOD
|
||||
WOOD1
|
||||
WOOD3
|
||||
WOOD4
|
||||
WOOD5
|
||||
WOODGARG
|
||||
WOODSKUL
|
|
@ -0,0 +1,472 @@
|
|||
; List of patch names from doom2.wad.
|
||||
; This is included as fair use for purposes of compatibility
|
||||
; and interoperability.
|
||||
BODIES
|
||||
RW22_1
|
||||
RW22_2
|
||||
RW22_3
|
||||
RW27_2
|
||||
RW27_3
|
||||
BFALL1
|
||||
BFALL2
|
||||
BFALL3
|
||||
BFALL4
|
||||
RW23_3
|
||||
RW23_4
|
||||
RW38_4
|
||||
W13_1
|
||||
DOOR2_1
|
||||
DOOR2_4
|
||||
DOOR9_2
|
||||
DOOR9_1
|
||||
WALL40_1
|
||||
WALL42_3
|
||||
DOOR11_1
|
||||
W105_1
|
||||
RW34_1
|
||||
RW34_2
|
||||
RP2_1
|
||||
RP2_2
|
||||
RP2_3
|
||||
RP2_4
|
||||
RW1_3
|
||||
RW41_1
|
||||
RW41_3
|
||||
RW41_4
|
||||
RW1_4
|
||||
RW5_1
|
||||
RW5_2
|
||||
RW5_3
|
||||
RW5_4
|
||||
RW24_1
|
||||
RW24_2
|
||||
RW24_3
|
||||
RW24_4
|
||||
RW12_3
|
||||
WALL62_2
|
||||
PS20A0
|
||||
W111_2
|
||||
W111_3
|
||||
W112_1
|
||||
W112_3
|
||||
W112_2
|
||||
RW10_1
|
||||
RW10_2
|
||||
RW10_3
|
||||
RW38_3
|
||||
W106_1
|
||||
WALL02_2
|
||||
WALL02_3
|
||||
WALL02_1
|
||||
WALL00_5
|
||||
WALL00_6
|
||||
WALL00_7
|
||||
WALL00_8
|
||||
WALL62_1
|
||||
WALL03_4
|
||||
TP2_1
|
||||
STEP07
|
||||
WALL05_2
|
||||
RW6_1
|
||||
RW1_1
|
||||
RW1_2
|
||||
RW12_2
|
||||
WALL52_1
|
||||
WALL53_1
|
||||
WALL54_1
|
||||
WALL55_1
|
||||
WALL52_2
|
||||
WALL54_2
|
||||
RW7_1
|
||||
RW11_3
|
||||
RW28_1
|
||||
COMP03_1
|
||||
COMP03_2
|
||||
COMP03_4
|
||||
TOMW2_1
|
||||
AG128_2
|
||||
TOMW2_2
|
||||
COMP04_5
|
||||
COMP04_8
|
||||
COMP03_8
|
||||
COMP04_6
|
||||
COMP04_7
|
||||
COMP04_2
|
||||
COMP03_5
|
||||
COMP04_1
|
||||
RW44_2
|
||||
RW44_4
|
||||
BCRATEL1
|
||||
BCRATER1
|
||||
GCRATEL1
|
||||
GCRATER1
|
||||
SGCRATE2
|
||||
VGCRATE1
|
||||
BCRATEM1
|
||||
GCRATEM1
|
||||
RWDM11A
|
||||
RWDM11B
|
||||
RWDM11C
|
||||
RWDM11D
|
||||
WALL03_1
|
||||
DOOR2_5
|
||||
W46_37
|
||||
W108_2
|
||||
W46_38
|
||||
W108_3
|
||||
TTALL1_2
|
||||
DOORTRAK
|
||||
W46_39
|
||||
W108_4
|
||||
DOOR3_6
|
||||
DOOR3_4
|
||||
DOOR3_5
|
||||
T14_5
|
||||
EXIT1
|
||||
EXIT2
|
||||
W28_8
|
||||
W65B_1
|
||||
W65B_2
|
||||
W73A_2
|
||||
W73B_1
|
||||
W73A_1
|
||||
W74A_1
|
||||
W74A_2
|
||||
W74B_1
|
||||
WALL23_1
|
||||
WALL23_2
|
||||
WALL22_1
|
||||
W31_1
|
||||
W33_7
|
||||
DUCT1
|
||||
W33_5
|
||||
W33_8
|
||||
W32_4
|
||||
W32_1
|
||||
WALL00_1
|
||||
WALL00_2
|
||||
WALL04_9
|
||||
WALL04_A
|
||||
WALL04_B
|
||||
WALL04_C
|
||||
PS18A0
|
||||
WALL00_3
|
||||
WALL58_1
|
||||
WALL58_2
|
||||
WALL58_3
|
||||
WALL30_2
|
||||
WALL30_4
|
||||
WALL48_1
|
||||
WALL48_2
|
||||
WALL48_3
|
||||
WALL48_4
|
||||
WALL59_1
|
||||
WALL59_2
|
||||
WALL59_3
|
||||
WALL59_4
|
||||
WALL30_3
|
||||
W107_1
|
||||
WALL69_4
|
||||
WALL71_5
|
||||
WALL72_7
|
||||
WALL69_9
|
||||
W67_2
|
||||
WALL72_5
|
||||
WALL72_3
|
||||
WALL70_4
|
||||
W67_1
|
||||
WALL70_9
|
||||
WLITA0
|
||||
WLITB0
|
||||
WLITC0
|
||||
AGB128_1
|
||||
BLITA0
|
||||
BLITB0
|
||||
BLITC0
|
||||
MWALL4_2
|
||||
MWALL5_1
|
||||
RW7_3
|
||||
MWALL4_1
|
||||
RW7_2
|
||||
MWALL1_1
|
||||
MWALL2_1
|
||||
MWALL3_1
|
||||
MWALL1_2
|
||||
WALL47_1
|
||||
WALL03_7
|
||||
RW33_1
|
||||
RW33_2
|
||||
RW33_3
|
||||
RW33_4
|
||||
RW38_1
|
||||
RW38_2
|
||||
RW43_1
|
||||
RW45_1
|
||||
DOOR12_1
|
||||
RW10_4
|
||||
M1_1
|
||||
RW47_1
|
||||
RW31_1
|
||||
RW31_2
|
||||
RW31_3
|
||||
RW31_4
|
||||
NUKEDGE
|
||||
WALL04_3
|
||||
WALL04_4
|
||||
WALL04_5
|
||||
WALL04_2
|
||||
WALL04_7
|
||||
RW16_1
|
||||
RW16_3
|
||||
RW21_5
|
||||
RW21_1
|
||||
RW21_2
|
||||
RW21_3
|
||||
RW21_4
|
||||
RW15_1
|
||||
RW15_2
|
||||
RW15_3
|
||||
RW15_4
|
||||
RW16_4
|
||||
RW19_1
|
||||
RW19_2
|
||||
RW19_3
|
||||
RW19_4
|
||||
RW16_2
|
||||
RP1_1
|
||||
RP1_2
|
||||
TP2_2
|
||||
TP7_1
|
||||
TP7_2
|
||||
TP3_1
|
||||
TP3_2
|
||||
RW28_4
|
||||
RW28_2
|
||||
RW36_2
|
||||
PLAT2_1
|
||||
WALL78_1
|
||||
RW30_1
|
||||
RW30_2
|
||||
RW30_3
|
||||
RW35_1
|
||||
RW35_2
|
||||
WALL64_2
|
||||
W64B_1
|
||||
W64B_2
|
||||
SFALL1
|
||||
SFALL2
|
||||
SFALL3
|
||||
SFALL4
|
||||
CYL1_1
|
||||
AG128_1
|
||||
T14_3
|
||||
RW32_1
|
||||
RW32_2
|
||||
RW32_3
|
||||
RW48_1
|
||||
RW48_3
|
||||
HELL8_2
|
||||
HELL8_4
|
||||
W102_1
|
||||
W102_2
|
||||
HELL6_2
|
||||
HELL8_1
|
||||
HELL5_1
|
||||
HELL5_2
|
||||
W92_1
|
||||
W92_2
|
||||
W98_1
|
||||
W98_2
|
||||
W99_1
|
||||
W99_2
|
||||
W101_1
|
||||
W101_2
|
||||
W103_1
|
||||
W103_2
|
||||
SNAK7_1
|
||||
SNAK8_1
|
||||
SPINE4_1
|
||||
SPINE3_1
|
||||
SPINE3_2
|
||||
RSKY1
|
||||
RSKY2
|
||||
RSKY3
|
||||
WLA128_1
|
||||
SW2_2
|
||||
RW47_3
|
||||
RW47_4
|
||||
WALL50_1
|
||||
WALL50_2
|
||||
WALL51_2
|
||||
WALL51_3
|
||||
BODY_1
|
||||
BODY_2
|
||||
WALL25_1
|
||||
WALL49_1
|
||||
WALL49_2
|
||||
WALL49_3
|
||||
WALL49_4
|
||||
WALL63_1
|
||||
RW46_2
|
||||
RW46_3
|
||||
RW46_4
|
||||
DOOR15_1
|
||||
DOOR15_2
|
||||
DOOR15_3
|
||||
DOOR15_4
|
||||
SW15_4
|
||||
SW16_4
|
||||
SW15_6
|
||||
SW16_6
|
||||
SW12_1
|
||||
SW12_2
|
||||
SW17_1
|
||||
SW17_2
|
||||
SW17_3
|
||||
SW18_5
|
||||
SW19_3
|
||||
SW19_4
|
||||
SW11_1
|
||||
SW11_2
|
||||
SW15_1
|
||||
SW15_3
|
||||
SW16_1
|
||||
SW16_2
|
||||
SW17_4
|
||||
SW17_5
|
||||
SW17_6
|
||||
SW18_7
|
||||
SW19_1
|
||||
SW19_2
|
||||
STEP05
|
||||
STEP04
|
||||
SW11_4
|
||||
STEP03
|
||||
STEP06
|
||||
STEP09
|
||||
STEP08
|
||||
STEP10
|
||||
LADDER16
|
||||
RIPW15
|
||||
WALL01_1
|
||||
WALL01_2
|
||||
WALL01_3
|
||||
WALL01_4
|
||||
WALL01_5
|
||||
WALL01_6
|
||||
WALL01_7
|
||||
WALL01_8
|
||||
WALL01_9
|
||||
WALL01_A
|
||||
WALL01_B
|
||||
WALL01_C
|
||||
W28_5
|
||||
W28_7
|
||||
W28_6
|
||||
RW18_1
|
||||
RW18_2
|
||||
RW18_3
|
||||
RW18_4
|
||||
RW8_1
|
||||
RW8_2
|
||||
RW8_3
|
||||
RW8_4
|
||||
SUPPORT2
|
||||
SW2_7
|
||||
SW1S0
|
||||
SW4S0
|
||||
SW3S1
|
||||
SW2S0
|
||||
WALL47_2
|
||||
WALL42_6
|
||||
WALL42_5
|
||||
SW3S0
|
||||
WALL42_1
|
||||
HELL6_3
|
||||
SW2_5
|
||||
RW48_4
|
||||
WARNB0
|
||||
SW12_4
|
||||
SW12_5
|
||||
RW37_2
|
||||
RW26_1
|
||||
WALL40_2
|
||||
RW20_1
|
||||
SW2_8
|
||||
SW1S1
|
||||
SW4S1
|
||||
SW2S1
|
||||
WALL47_5
|
||||
WALL47_4
|
||||
WALL47_3
|
||||
SW2_6
|
||||
RW48_2
|
||||
WARNA0
|
||||
RW11_2
|
||||
RW12_1
|
||||
RW12_4
|
||||
RW14_1
|
||||
RW23_2
|
||||
RW28_3
|
||||
RW36_1
|
||||
RW36_3
|
||||
RW39_2
|
||||
RW37_1
|
||||
RW37_3
|
||||
RW37_4
|
||||
RW39_1
|
||||
RW43_3
|
||||
RW43_4
|
||||
W17_1
|
||||
w94_1
|
||||
RW25_1
|
||||
RW25_2
|
||||
RW25_3
|
||||
RW25_4
|
||||
RW13_1
|
||||
RW41_2
|
||||
WALL97_1
|
||||
WALL97_2
|
||||
WALL97_3
|
||||
SW2_1
|
||||
W96_1
|
||||
W96_2
|
||||
RW9_1
|
||||
RW9_2
|
||||
RW9_3
|
||||
RW9_4
|
||||
SW2_4
|
||||
RW26_2
|
||||
RW26_3
|
||||
RW26_4
|
||||
RW23_1
|
||||
WOLF18
|
||||
WOLF10
|
||||
WOLF11
|
||||
RW20_2
|
||||
RW20_3
|
||||
RW20_4
|
||||
RW42_1
|
||||
RW42_3
|
||||
RW42_4
|
||||
WOLF1
|
||||
WOLF12
|
||||
WOLF13
|
||||
WOLF14
|
||||
WOLF17
|
||||
WOLF2
|
||||
WOLF3
|
||||
WOLF4
|
||||
WOLF5
|
||||
WOLF6
|
||||
WOLF7
|
||||
WOLF9
|
||||
RWDMON4
|
||||
RWDMON5
|
||||
RWDMON3
|
||||
RWDMON2
|
||||
RWDMON1
|
||||
RWDMON7
|
||||
RWDMON8
|
||||
RWDMON9
|
||||
RWDMON10
|
|
@ -0,0 +1,431 @@
|
|||
; List of textures in the TEXTURE1 lump from doom2.wad.
|
||||
; This is included as fair use for purposes of compatibility
|
||||
; and interoperability.
|
||||
AASHITTY
|
||||
ASHWALL2
|
||||
ASHWALL3
|
||||
ASHWALL4
|
||||
ASHWALL6
|
||||
ASHWALL7
|
||||
BFALL1
|
||||
BFALL2
|
||||
BFALL3
|
||||
BFALL4
|
||||
BIGBRIK1
|
||||
BIGBRIK2
|
||||
BIGBRIK3
|
||||
BIGDOOR1
|
||||
BIGDOOR2
|
||||
BIGDOOR3
|
||||
BIGDOOR4
|
||||
BIGDOOR5
|
||||
BIGDOOR6
|
||||
BIGDOOR7
|
||||
BLAKWAL1
|
||||
BLAKWAL2
|
||||
BLODRIP1
|
||||
BLODRIP2
|
||||
BLODRIP3
|
||||
BLODRIP4
|
||||
BRICK1
|
||||
BRICK10
|
||||
BRICK11
|
||||
BRICK12
|
||||
BRICK2
|
||||
BRICK3
|
||||
BRICK4
|
||||
BRICK5
|
||||
BRICK6
|
||||
BRICK7
|
||||
BRICK8
|
||||
BRICK9
|
||||
BRICKLIT
|
||||
BRNPOIS
|
||||
BRNSMAL1
|
||||
BRNSMAL2
|
||||
BRNSMALC
|
||||
BRNSMALL
|
||||
BRNSMALR
|
||||
BRONZE1
|
||||
BRONZE2
|
||||
BRONZE3
|
||||
BRONZE4
|
||||
BROVINE2
|
||||
BROWN1
|
||||
BROWN144
|
||||
BROWN96
|
||||
BROWNGRN
|
||||
BROWNHUG
|
||||
BROWNPIP
|
||||
BRWINDOW
|
||||
BSTONE1
|
||||
BSTONE2
|
||||
BSTONE3
|
||||
CEMENT1
|
||||
CEMENT2
|
||||
CEMENT3
|
||||
CEMENT4
|
||||
CEMENT5
|
||||
CEMENT6
|
||||
CEMENT7
|
||||
CEMENT8
|
||||
CEMENT9
|
||||
COMPBLUE
|
||||
COMPSPAN
|
||||
COMPSTA1
|
||||
COMPSTA2
|
||||
COMPTALL
|
||||
COMPWERD
|
||||
CRACKLE2
|
||||
CRACKLE4
|
||||
CRATE1
|
||||
CRATE2
|
||||
CRATE3
|
||||
CRATELIT
|
||||
CRATINY
|
||||
CRATWIDE
|
||||
DBRAIN1
|
||||
DBRAIN2
|
||||
DBRAIN3
|
||||
DBRAIN4
|
||||
DOOR1
|
||||
DOOR3
|
||||
DOORBLU
|
||||
DOORBLU2
|
||||
DOORRED
|
||||
DOORRED2
|
||||
DOORSTOP
|
||||
DOORTRAK
|
||||
DOORYEL
|
||||
DOORYEL2
|
||||
EXITDOOR
|
||||
EXITSIGN
|
||||
EXITSTON
|
||||
FIREBLU1
|
||||
FIREBLU2
|
||||
FIRELAV2
|
||||
FIRELAV3
|
||||
FIRELAVA
|
||||
FIREMAG1
|
||||
FIREMAG2
|
||||
FIREMAG3
|
||||
FIREWALA
|
||||
FIREWALB
|
||||
FIREWALL
|
||||
GRAY1
|
||||
GRAY2
|
||||
GRAY4
|
||||
GRAY5
|
||||
GRAY7
|
||||
GRAYBIG
|
||||
GRAYPOIS
|
||||
GRAYTALL
|
||||
GRAYVINE
|
||||
GSTFONT1
|
||||
GSTFONT2
|
||||
GSTFONT3
|
||||
GSTGARG
|
||||
GSTLION
|
||||
GSTONE1
|
||||
GSTONE2
|
||||
GSTSATYR
|
||||
GSTVINE1
|
||||
GSTVINE2
|
||||
ICKWALL1
|
||||
ICKWALL2
|
||||
ICKWALL3
|
||||
ICKWALL4
|
||||
ICKWALL5
|
||||
ICKWALL7
|
||||
LITE3
|
||||
LITE5
|
||||
LITEBLU1
|
||||
LITEBLU4
|
||||
MARBFAC2
|
||||
MARBFAC3
|
||||
MARBFAC4
|
||||
MARBFACE
|
||||
MARBGRAY
|
||||
MARBLE1
|
||||
MARBLE2
|
||||
MARBLE3
|
||||
MARBLOD1
|
||||
METAL
|
||||
METAL1
|
||||
METAL2
|
||||
METAL3
|
||||
METAL4
|
||||
METAL5
|
||||
METAL6
|
||||
METAL7
|
||||
MIDBARS1
|
||||
MIDBARS3
|
||||
MIDBRN1
|
||||
MIDBRONZ
|
||||
MIDGRATE
|
||||
MIDSPACE
|
||||
MODWALL1
|
||||
MODWALL2
|
||||
MODWALL3
|
||||
MODWALL4
|
||||
NUKE24
|
||||
NUKEDGE1
|
||||
NUKEPOIS
|
||||
PANBLACK
|
||||
PANBLUE
|
||||
PANBOOK
|
||||
PANBORD1
|
||||
PANBORD2
|
||||
PANCASE1
|
||||
PANCASE2
|
||||
PANEL1
|
||||
PANEL2
|
||||
PANEL3
|
||||
PANEL4
|
||||
PANEL5
|
||||
PANEL6
|
||||
PANEL7
|
||||
PANEL8
|
||||
PANEL9
|
||||
PANRED
|
||||
PIPE1
|
||||
PIPE2
|
||||
PIPE4
|
||||
PIPE6
|
||||
PIPES
|
||||
PIPEWAL1
|
||||
PIPEWAL2
|
||||
PLAT1
|
||||
REDWALL
|
||||
ROCK1
|
||||
ROCK2
|
||||
ROCK3
|
||||
ROCK4
|
||||
ROCK5
|
||||
ROCKRED1
|
||||
ROCKRED2
|
||||
ROCKRED3
|
||||
SFALL1
|
||||
SFALL2
|
||||
SFALL3
|
||||
SFALL4
|
||||
SHAWN1
|
||||
SHAWN2
|
||||
SHAWN3
|
||||
SILVER1
|
||||
SILVER2
|
||||
SILVER3
|
||||
SK_LEFT
|
||||
SK_RIGHT
|
||||
SKIN2
|
||||
SKINCUT
|
||||
SKINEDGE
|
||||
SKINFACE
|
||||
SKINLOW
|
||||
SKINMET1
|
||||
SKINMET2
|
||||
SKINSCAB
|
||||
SKINSYMB
|
||||
SKSNAKE1
|
||||
SKSNAKE2
|
||||
SKSPINE1
|
||||
SKSPINE2
|
||||
SKY1
|
||||
SKY2
|
||||
SKY3
|
||||
SLADPOIS
|
||||
SLADSKUL
|
||||
SLADWALL
|
||||
SLOPPY1
|
||||
SLOPPY2
|
||||
SP_DUDE1
|
||||
SP_DUDE2
|
||||
SP_DUDE4
|
||||
SP_DUDE5
|
||||
SP_DUDE7
|
||||
SP_DUDE8
|
||||
SP_FACE1
|
||||
SP_FACE2
|
||||
SP_HOT1
|
||||
SP_ROCK1
|
||||
SPACEW2
|
||||
SPACEW3
|
||||
SPACEW4
|
||||
SPCDOOR1
|
||||
SPCDOOR2
|
||||
SPCDOOR3
|
||||
SPCDOOR4
|
||||
STARBR2
|
||||
STARG1
|
||||
STARG2
|
||||
STARG3
|
||||
STARGR1
|
||||
STARGR2
|
||||
STARTAN2
|
||||
STARTAN3
|
||||
STEP1
|
||||
STEP2
|
||||
STEP3
|
||||
STEP4
|
||||
STEP5
|
||||
STEP6
|
||||
STEPLAD1
|
||||
STEPTOP
|
||||
STONE
|
||||
STONE2
|
||||
STONE3
|
||||
STONE4
|
||||
STONE5
|
||||
STONE6
|
||||
STONE7
|
||||
STUCCO
|
||||
STUCCO1
|
||||
STUCCO2
|
||||
STUCCO3
|
||||
SUPPORT2
|
||||
SUPPORT3
|
||||
SW1BLUE
|
||||
SW1BRCOM
|
||||
SW1BRIK
|
||||
SW1BRN1
|
||||
SW1BRN2
|
||||
SW1BRNGN
|
||||
SW1BROWN
|
||||
SW1CMT
|
||||
SW1COMM
|
||||
SW1COMP
|
||||
SW1DIRT
|
||||
SW1EXIT
|
||||
SW1GARG
|
||||
SW1GRAY
|
||||
SW1GRAY1
|
||||
SW1GSTON
|
||||
SW1HOT
|
||||
SW1LION
|
||||
SW1MARB
|
||||
SW1MET2
|
||||
SW1METAL
|
||||
SW1MOD1
|
||||
SW1PANEL
|
||||
SW1PIPE
|
||||
SW1ROCK
|
||||
SW1SATYR
|
||||
SW1SKIN
|
||||
SW1SKULL
|
||||
SW1SLAD
|
||||
SW1STARG
|
||||
SW1STON1
|
||||
SW1STON2
|
||||
SW1STON6
|
||||
SW1STONE
|
||||
SW1STRTN
|
||||
SW1TEK
|
||||
SW1VINE
|
||||
SW1WDMET
|
||||
SW1WOOD
|
||||
SW1ZIM
|
||||
SW2BLUE
|
||||
SW2BRCOM
|
||||
SW2BRIK
|
||||
SW2BRN1
|
||||
SW2BRN2
|
||||
SW2BRNGN
|
||||
SW2BROWN
|
||||
SW2CMT
|
||||
SW2COMM
|
||||
SW2COMP
|
||||
SW2DIRT
|
||||
SW2EXIT
|
||||
SW2GARG
|
||||
SW2GRAY
|
||||
SW2GRAY1
|
||||
SW2GSTON
|
||||
SW2HOT
|
||||
SW2LION
|
||||
SW2MARB
|
||||
SW2MET2
|
||||
SW2METAL
|
||||
SW2MOD1
|
||||
SW2PANEL
|
||||
SW2PIPE
|
||||
SW2ROCK
|
||||
SW2SATYR
|
||||
SW2SKIN
|
||||
SW2SKULL
|
||||
SW2SLAD
|
||||
SW2STARG
|
||||
SW2STON1
|
||||
SW2STON2
|
||||
SW2STON6
|
||||
SW2STONE
|
||||
SW2STRTN
|
||||
SW2TEK
|
||||
SW2VINE
|
||||
SW2WDMET
|
||||
SW2WOOD
|
||||
SW2ZIM
|
||||
TANROCK2
|
||||
TANROCK3
|
||||
TANROCK4
|
||||
TANROCK5
|
||||
TANROCK7
|
||||
TANROCK8
|
||||
TEKBRON1
|
||||
TEKBRON2
|
||||
TEKGREN1
|
||||
TEKGREN2
|
||||
TEKGREN3
|
||||
TEKGREN4
|
||||
TEKGREN5
|
||||
TEKLITE
|
||||
TEKLITE2
|
||||
TEKWALL1
|
||||
TEKWALL4
|
||||
TEKWALL6
|
||||
WOOD1
|
||||
WOOD10
|
||||
WOOD12
|
||||
WOOD3
|
||||
WOOD4
|
||||
WOOD5
|
||||
WOOD6
|
||||
WOOD7
|
||||
WOOD8
|
||||
WOOD9
|
||||
WOODGARG
|
||||
WOODMET1
|
||||
WOODMET2
|
||||
WOODMET3
|
||||
WOODMET4
|
||||
WOODVERT
|
||||
ZDOORB1
|
||||
ZDOORF1
|
||||
ZELDOOR
|
||||
ZIMMER1
|
||||
ZIMMER2
|
||||
ZIMMER3
|
||||
ZIMMER4
|
||||
ZIMMER5
|
||||
ZIMMER7
|
||||
ZIMMER8
|
||||
ZZWOLF1
|
||||
ZZWOLF10
|
||||
ZZWOLF11
|
||||
ZZWOLF12
|
||||
ZZWOLF13
|
||||
ZZWOLF2
|
||||
ZZWOLF3
|
||||
ZZWOLF4
|
||||
ZZWOLF5
|
||||
ZZWOLF6
|
||||
ZZWOLF7
|
||||
ZZWOLF9
|
||||
ZZZFACE1
|
||||
ZZZFACE2
|
||||
ZZZFACE3
|
||||
ZZZFACE4
|
||||
ZZZFACE5
|
||||
ZZZFACE6
|
||||
ZZZFACE7
|
||||
ZZZFACE8
|
||||
ZZZFACE9
|
|
@ -0,0 +1,3 @@
|
|||
texture1.lmp
|
||||
texture2.lmp
|
||||
pnames.lmp
|
|
@ -0,0 +1,3 @@
|
|||
texture1.lmp
|
||||
texture2.lmp
|
||||
pnames.lmp
|
|
@ -0,0 +1,2 @@
|
|||
texture1.lmp
|
||||
pnames.lmp
|
|
@ -1,27 +1,22 @@
|
|||
; Freedoom combined texture configuration file.
|
||||
;
|
||||
; Combined texture1 definition
|
||||
; This is based on a doom2 texture1 def file
|
||||
; All the textures which are in doom 1 and not doom 2
|
||||
; have been added, so essentially this should have all
|
||||
; textures across both games and be able to play levels
|
||||
; from both
|
||||
; Format of textures:
|
||||
; TextureName Width Height
|
||||
; * PatchName Xoffset Yoffset
|
||||
;
|
||||
; By Simon Howard
|
||||
; This file is passed through the simplecpp script before processing,
|
||||
; to allow specific sets of textures to be turned on or off.
|
||||
; The following #defines are understood:
|
||||
;
|
||||
; Note: some of the textures, despite existing with the
|
||||
; same name in both Doom1 and Doom2, are nonetheless
|
||||
; different textures. Where they differ, the Doom2
|
||||
; version is used. Here is a partial list of some of the
|
||||
; textures affected:
|
||||
; DOOM1 - Include textures that were available in doom.wad
|
||||
; DOOM2 - Include textures that were available in doom2.wad
|
||||
; ULTDOOM - Include doom.wad textures added in the Ultimate Doom
|
||||
; FREEDM - Include extra textures used in FreeDM
|
||||
;
|
||||
; sw[12]brcom
|
||||
; sw[12]brn1
|
||||
; sw[12]exit
|
||||
; sw[12]starg
|
||||
; sw[12]ston2
|
||||
; sw[12]stone
|
||||
; Usually we always build with -DDOOM1 -DDOOM2 regardless of the IWAD
|
||||
; being built: there's no reason not to include the full set of textures
|
||||
; from both original WADs.
|
||||
;
|
||||
; 10/3/2003: modified build to use a single file with #defines
|
||||
|
||||
#ifdef FREEDM
|
||||
#define DOOM1
|
||||
|
@ -32,10 +27,6 @@
|
|||
#undef ULTDOOM
|
||||
#endif
|
||||
|
||||
;Format of textures:
|
||||
;TextureName Width Height
|
||||
;* PatchName Xoffset Yoffset
|
||||
|
||||
; the AA* textures have to be first, some ports (glboom) rely
|
||||
; on it
|
||||
|
Loading…
Reference in New Issue