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
Simon Howard 2014-01-16 04:18:22 +00:00
parent 1325800e86
commit 82d90f8e8a
22 changed files with 2006 additions and 81 deletions

8
.gitignore vendored
View File

@ -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

View File

@ -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

View File

@ -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]

View File

@ -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

1
lumps/fd1pname.lmp Symbolic link
View File

@ -0,0 +1 @@
textures/phase1/pnames.lmp

1
lumps/fd1txtr1.lmp Symbolic link
View File

@ -0,0 +1 @@
textures/phase1/texture1.lmp

1
lumps/fd1txtr2.lmp Symbolic link
View File

@ -0,0 +1 @@
textures/phase1/texture2.lmp

1
lumps/fd2pname.lmp Symbolic link
View File

@ -0,0 +1 @@
textures/phase2/pnames.lmp

1
lumps/fd2txtr1.lmp Symbolic link
View File

@ -0,0 +1 @@
textures/phase2/texture1.lmp

1
lumps/fdmpname.lmp Symbolic link
View File

@ -0,0 +1 @@
textures/freedm/pnames.lmp

1
lumps/fdmtxtr1.lmp Symbolic link
View File

@ -0,0 +1 @@
textures/freedm/texture1.lmp

36
lumps/textures/Makefile Normal file
View File

@ -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)

352
lumps/textures/build-textures Executable file
View File

@ -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"])

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

3
lumps/textures/freedm/.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
texture1.lmp
texture2.lmp
pnames.lmp

3
lumps/textures/phase1/.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
texture1.lmp
texture2.lmp
pnames.lmp

2
lumps/textures/phase2/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
texture1.lmp
pnames.lmp

View File

@ -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