From 1ad6ec72970c5156ed4fb59ac6156e03c3a46382 Mon Sep 17 00:00:00 2001 From: yrriban Date: Fri, 18 Apr 2025 02:45:34 -0400 Subject: [PATCH] Add an extract command for doom graphics in the wad. --- dcc/extract.py | 31 +++++++++++++++++++++++++++++++ setup.py | 1 + 2 files changed, 32 insertions(+) create mode 100644 dcc/extract.py diff --git a/dcc/extract.py b/dcc/extract.py new file mode 100644 index 0000000..a3ad366 --- /dev/null +++ b/dcc/extract.py @@ -0,0 +1,31 @@ +from cliff.command import Command +import dcc.config +import omg +import numpy as np +import wand.color +import wand.image + +class Extract(Command): + def get_parser(self, prog_name): + parser = super().get_parser(prog_name) + parser.add_argument('wad') + parser.add_argument('lump') + return parser + + def take_action(self, parsed_args): + wads = sorted(dcc.config.PWADS.joinpath(parsed_args.wad).glob('*.wad', case_sensitive=False), reverse=True) + + for w in wads: + try: + # TODO: handle anything other than graphics. + wad = omg.WadIO(w) + gl = omg.Graphic(wad.read(parsed_args.lump)) + # With no arguments, convert() changes a paletted image to an RGB one. + with wand.image.Image.from_array(np.array(gl.to_Image().convert())) as img: + img.transparent_color(wand.color.Color("#ff00ff"), 0.0) + img.save(filename=dcc.config.OUTPUT.joinpath(parsed_args.wad).joinpath(parsed_args.lump + ".png")) + return + except Exception as e: + print("Wad {} likely has no lump {} (exception {}).".format(w, parsed_args.lump, e)) + + print("Lump {} not found in any wad in {}".format(parsed_args.lump, parsed_args.wad)) diff --git a/setup.py b/setup.py index a6ba04d..3f83c90 100644 --- a/setup.py +++ b/setup.py @@ -28,6 +28,7 @@ setup( 'pb = dcc.pb:PB', 'ss = dcc.ss:SS', 'check = dcc.check:Check', + 'extract = dcc.extract:Extract', ], }, zip_safe=False,