textures: Don't include sprites in pnames list.

A useful vanilla-compatible trick is that it's possible to include
sprites as patches inside texture definitions. It turns out that
both Final Doom IWADs added textures which do this, and Freedoom
inherits this as a result. We shouldn't include these sprites in the
pnames.txt that gets generated for inclusion in wadinfo.txt, since
they're already defined in wadinfo.txt under [sprites] and won't
be found under patches/ anyway.

This should help as a step towards resolving #485.
This commit is contained in:
Simon Howard 2017-09-04 13:35:45 -04:00
parent f0fba6eb53
commit 54cab94257
2 changed files with 21 additions and 7 deletions

View file

@ -12,7 +12,8 @@ phase1/texture1.lmp: textures.cfg
-output_texture1=phase1/texture1.lmp \ -output_texture1=phase1/texture1.lmp \
-output_texture2=phase1/texture2.lmp \ -output_texture2=phase1/texture2.lmp \
-output_pnames=phase1/pnames.lmp \ -output_pnames=phase1/pnames.lmp \
-output_pnames_txt=phase1/pnames.txt -output_pnames_txt=phase1/pnames.txt \
-sprites_dir=../../sprites
cp phase1/texture1.lmp ../fd1txtr1.lmp cp phase1/texture1.lmp ../fd1txtr1.lmp
cp phase1/texture2.lmp ../fd1txtr2.lmp cp phase1/texture2.lmp ../fd1txtr2.lmp
cp phase1/pnames.lmp ../fd1pname.lmp cp phase1/pnames.lmp ../fd1pname.lmp
@ -23,7 +24,8 @@ phase2/texture1.lmp: textures.cfg
-compat_pnames=doom2/pnames.txt \ -compat_pnames=doom2/pnames.txt \
-output_texture1=phase2/texture1.lmp \ -output_texture1=phase2/texture1.lmp \
-output_pnames=phase2/pnames.lmp \ -output_pnames=phase2/pnames.lmp \
-output_pnames_txt=phase2/pnames.txt -output_pnames_txt=phase2/pnames.txt \
-sprites_dir=../../sprites
cp phase2/texture1.lmp ../fd2txtr1.lmp cp phase2/texture1.lmp ../fd2txtr1.lmp
cp phase2/pnames.lmp ../fd2pname.lmp cp phase2/pnames.lmp ../fd2pname.lmp
@ -33,7 +35,8 @@ freedm/texture1.lmp: textures.cfg
-compat_pnames=doom2/pnames.txt \ -compat_pnames=doom2/pnames.txt \
-output_texture1=freedm/texture1.lmp \ -output_texture1=freedm/texture1.lmp \
-output_pnames=freedm/pnames.lmp \ -output_pnames=freedm/pnames.lmp \
-output_pnames_txt=freedm/pnames.txt -output_pnames_txt=freedm/pnames.txt \
-sprites_dir=../../sprites
cp freedm/texture1.lmp ../fdmtxtr1.lmp cp freedm/texture1.lmp ../fdmtxtr1.lmp
cp freedm/pnames.lmp ../fdmpname.lmp cp freedm/pnames.lmp ../fdmpname.lmp

View file

@ -34,6 +34,7 @@
# Freedoom IWADs cannot be built in parallel by make. # Freedoom IWADs cannot be built in parallel by make.
import collections import collections
import os.path
import re import re
import sys import sys
import struct import struct
@ -161,16 +162,22 @@ def read_names_file(filename):
result.append(line.upper()) result.append(line.upper())
return result return result
def write_names_file(names, filename): def write_names_file(names, filename, sprites_dir):
"""Write a list of names to a file. """Write a list of names to a file.
Args: Args:
names: List of names to write. names: List of names to write.
filename: Filename to write them to. filename: Filename to write them to.
sprites_dir: Path to directory containing sprites. If a file is found
in this directory matching a patch name, that patch will not be
included in the outputted list.
""" """
with open(filename, "w") as f: with open(filename, "w") as f:
for name in names: for name in names:
f.write("%s\n" % name) filename = "%s.png" % name.lower()
sprite_path = os.path.join(sprites_dir, filename)
if not os.path.exists(sprite_path):
f.write("%s\n" % name)
def load_compat_textures(textures, compat_file): def load_compat_textures(textures, compat_file):
"""Pre-populate a texture set from a compatibility file. """Pre-populate a texture set from a compatibility file.
@ -264,6 +271,9 @@ Full list of arguments:
-output_texture2: Path to the TEXTURE2 lump to generate. -output_texture2: Path to the TEXTURE2 lump to generate.
-output_pnames: Path to the PNAMES lump to generate (required). -output_pnames: Path to the PNAMES lump to generate (required).
-output_pnames_txt: Path to a text file to save a list of PNAMES. -output_pnames_txt: Path to a text file to save a list of PNAMES.
-sprites_dir: Path to the sprites directory, used to identify patches which
are actually embedded sprites. These sprites will not be included in the
outputted pnames file.
-compat_texture1: File containing compatibility list of TEXTURE1 textures -compat_texture1: File containing compatibility list of TEXTURE1 textures
-compat_texture2: File containing compatibility list of TEXTURE2 textures -compat_texture2: File containing compatibility list of TEXTURE2 textures
-compat_pnames: File containing compatibility list of PNAMES -compat_pnames: File containing compatibility list of PNAMES
@ -282,7 +292,7 @@ def parse_command_line(args):
# Parse command line: # Parse command line:
valid_args = ("compat_texture1", "compat_texture2", "compat_pnames", valid_args = ("compat_texture1", "compat_texture2", "compat_pnames",
"output_texture1", "output_texture2", "output_pnames", "output_texture1", "output_texture2", "output_pnames",
"output_pnames_txt") "output_pnames_txt", "sprites_dir")
result = {arg: None for arg in valid_args} result = {arg: None for arg in valid_args}
for arg in args: for arg in args:
@ -339,5 +349,6 @@ if args["output_texture2"]:
texture2.write_texture_lump(args["output_texture2"]) texture2.write_texture_lump(args["output_texture2"])
write_pnames_lump(pnames, args["output_pnames"]) write_pnames_lump(pnames, args["output_pnames"])
if args["output_pnames_txt"]: if args["output_pnames_txt"]:
write_names_file(sorted(pnames), args["output_pnames_txt"]) write_names_file(sorted(pnames), args["output_pnames_txt"],
args["sprites_dir"])