I Will Program Small Doom Utilities For You

'Sup, DoomWorld.

I wanna write some programs for y'all.

EDIT 2014-07-08: ...but not at the moment. Kinda busy with other things. Feel free to alert me about issues in existing programs, though!

UPDATE 2014-06-21: These utilities are now on Github!
https://github.com/MTrop/DoomUtils

UPDATE 2016-10-30: The library that (most of) these use is here!
https://github.com/MTrop/Doom


Why do you want to do this?

During an interview that I did for Tango and st.alfonzo, Tango mentioned (or hinted at) that there may be some demand for small utilities that do helpful Doom-related things (mostly simple, often-overlooked things). I could also use the mental exercise, so I am offering up my services to program a bunch of utilities that the Doom community could need. It would also provide me with an opportunity to be more involved. Hopefully, I'm not biting off more than I can chew, here.

Define "small."

As an example, I wrote something for Xaser for texture replacement for his Hacx 2.0 project a while back. It took a list of textures and flats and a map and replaced each texture with the new names. Stuff like that. Batch replacers, translators, convertors (both map and graphic), inspectors, simple asset browsers, or mergers (of WAD contents/map information).

Stuff outside of the scope of this exercise would be complex front-end launchers, random content generators, node builders, fully-featured editors with provided interface... you know - big things.

What will the programs be written in?

The programs will be written in Java, and will be distributed as Java (JAR only), and Win32 EXE requiring Java (I tried to make it standalone with Excelsior JET - turns out that you need even more than just the executable, so that's not feasible). I could also write some J2EE-related stuff, if somebody has an idea for something quick that I could write for the web (of course, this would not be a downloadable program).

Will you release the source code for them?

Sure, if possible (and requested). They'll probably use a lot of common code, so I'd have to take some extra time to organize it so that I can release it painlessly. The programs should be compile-able under Java 7, and I'll list the third-party libraries that each program will need, if any.

What are your credentials?

I do this junk for a living, and have been doing some Doom-related programming recently, notably this, this, and this, though that last one is PHP and not Java and technically not Doom-centric.

How do I request something?

Tell me what you would want made, and if enough people want it, I'll get started. Be sure to include:

  • Is it Console or GUI-driven (command-line or windows and junk)?
  • What would it do?
  • How would this be useful to you or others?
As always, I will set the priority in which stuff will be completed, and if it can be feasibly completed.

Don't be shy! If you are unsure about the scope of a project, just ask!

Share this post


Link to post

This post will be for programs as they are completed or made available.

Download programs below.

Source downloads contain the source code for the projects, and some documentation. It should be compiled from the "src" directory, as the rest are packages. They require other packages to compile, though - read the documentation!
Standalone Minified downloads are JARs with ONLY all of the necessary classes bundled into them. This requires Java 1.8, and is your only alternative if you don't run Windows.
Win32-L4J downloads are minified standalone (minified) EXE files made with Launch4J, so they can be run like any old program, but it STILL requires Java to run. It will send you to a download page if you don't have Java installed.

Beta Programs for Testing (only the brave need apply)

WADSort v0.9 - WAD entry sorter.
Source - Standalone JAR - Win32 L4J

COMPLETED Programs for Public Consumption

MyIdGames v1.0.0 - Doom-launching frontend that also taps into the IdGames Archive API for addt'l functionality.
Win32 L4J
DoomMerge v2.0.1 - Merges WADs together in a scripted manner.
Source - Standalone Minified JAR - Win32 L4J
DemoSpy v2.0 - Detect/view DEMO lump characteristics.
Source - Standalone Minified JAR - Win32 L4J
ThingSpy v2.0 - Output or search for thing editor numbers by map lump.
Source - Standalone Minified JAR - Win32 L4J
TexSpy v2.0 - Scans for used texture names in maps (added this myself).
Source - Standalone Minified JAR - Win32 L4J
TEXtract v2.0 - Extracts textures from texture packs. Detects animated texture names (both built-in and from ANIMATED/SWITCHES).
Source - Standalone Minified JAR - Win32 L4J
MapCount v2.0 - Map entry counter (for ZIPS, PK3s, and WADs).
Source - Standalone Minified JAR - Win32 L4J
MapSwap v2.0 - Switch map-specific entries to another map slot.
Source - Standalone Minified JAR - Win32 L4J
DoomSND v2.0 - WAV to Doom Sound Converter.
Source - Standalone Minified JAR - Win32 L4J
PalCnvrt v0.9 - Converts graphics from one palette/colormap to another, preserving "fullbright" colors.
Source - Standalone Minified JAR - Win32 L4J

Share this post


Link to post

A few requests, tell me if something is not clear. Maybe some of this stuff already exists.

1. Utility that removes unused textures and flats from the wad. Command line would be enough. I think it's pretty obvious how it would be useful.

2. Convenient map swapper. Suppose you have a wad with two maps and music lumps for them. When you open your wad in this program, you see something like this. Then you can click on MAP01, drag-and-drop it below MAP02 and that will swap their slots and, at the same time, rename the corresponding music lumps as well. (so D_RUNNIN will become D_STALKS and vice versa) That would need a GUI I guess and it would save some time for a lot of people.
edit: oh, and it could rename the CWILV graphics too.

3. SR50 checker. Looks at a demo and determines whether SR50 was used by the player. Would be useful for speedrunners.

4. Recently I added many textures and flats to my wad and then noticed that I accidentally replaced some of the iwad graphics. I'd like to have an utility that would tell me the names of these graphics.

5. WAV to Doom Format converter? I know that it's quite easy to do this in sound editing programs like Audacity but maybe you could write an utility that would do this in just one click?

Share this post


Link to post

Memfis: Slade has functionality for removing unused textures/patches/flats from a wad :)


Also, thanks MTrop for providing this service to the community!

Share this post


Link to post
esselfortium said:

Memfis: Slade has functionality for removing unused textures/patches/flats from a wad :)

Well, I tried it but it didn't do anything to my wad and nobody explained why. (ยด;ω;`)

Share this post


Link to post

On texture stripping routines, to be as functional as possible, they need to be aware of animations and switches (ie situations where only one texture is on a wall in a WAD file but in game the wall will have a number of textures applied in sequence). In addition, scripting with texture changes would have to be considered. I don't suppose a tool could do much about that so it would be down to the map author to keep track of textures changed in that way.

Share this post


Link to post

I have the same request I've had for years: a utility that copies the used textures from a resource wad to the project wad so you don't have to use the resource wad anymore.

Share this post


Link to post

Just on a related note here, some time ago I received mail from some bloke that wanted to do a launcher/frontend for Mocha Doom, also in Java (which made more sense, considering that Mocha Doom itself is written in Java). Haven't heard from the guy since last Xmas, though.

Share this post


Link to post

how about a program that flips maps upside down, a-la Symphony of the Night? :p reverses floor and ceiling heights, etc. if you could even make it automatically generate upside-down versions of the textures too i'd give you a million dollars

Share this post


Link to post

Simple level tweaker like TeamTNT's CLED. What that does is change one or more map object properties (coordinates, type, cross-references etc.) without having to open an interactive editor. CLED is fine, but is limited to Doom 2 and I don't know if its source code is available (even at TeamTNT's site). It also most likely requires DOSBox these days (it's a command-line tool).

Why would it be useful? Well, opening a map in a full editor may result in side effects. Doom Builder for example always rebuilds nodes, which very likely breaks demo compatibility with past versions. It also allows batch processing if it's command line.

Share this post


Link to post
Tango said:

how about a program that flips maps upside down, a-la Symphony of the Night? :p reverses floor and ceiling heights, etc. if you could even make it automatically generate upside-down versions of the textures too i'd give you a million dollars


hah, this would be hilarious. I think I'll take a crack at making this one.

Share this post


Link to post
Memfis said:

Utility that removes unused textures and flats from the wad. Command line would be enough. I think it's pretty obvious how it would be useful.


You mean from what is already added in the WAD? That may be doable, but adding/extracting from another WAD would be better (build map first with resource WAD, pull textures from resource WAD when done).

Memfis said:

Convenient map swapper. Suppose you have a wad with two maps and music lumps for them. When you open your wad in this program, you see something like this. Then you can click on MAP01, drag-and-drop it below MAP02 and that will swap their slots and, at the same time, rename the corresponding music lumps as well. (so D_RUNNIN will become D_STALKS and vice versa) That would need a GUI I guess and it would save some time for a lot of people.
edit: oh, and it could rename the CWILV graphics too.


Definitely doable, but I'm thinking of a better interface. Do you mind if lump names are renamed, or would you want the actual physical locations of the data inside the wad to change as well (former method is easier and faster). Drag/drop may not be the best method for control though, especially after the move ("is that the original MAP01, or the new one?"). I'll make it work somehow, don't worry. :)

Memfis said:

SR50 checker. Looks at a demo and determines whether SR50 was used by the player. Would be useful for speedrunners.


Also very doable. This is just checking if certain keys are pressed during the DEMO, right? I'll have to add demo reading to the library first before this gets made, though.

Memfis said:

Recently I added many textures and flats to my wad and then noticed that I accidentally replaced some of the iwad graphics. I'd like to have an utility that would tell me the names of these graphics.


Very doable.

Memfis said:

WAV to Doom Format converter? I know that it's quite easy to do this in sound editing programs like Audacity but maybe you could write an utility that would do this in just one click?


Also doable, but I'm going to take some liberties with this in order to support more than WAV, though (and at no additional cost!). I'll also have to add Doom Audio support to the library, which will take time.

Nomad said:

I have the same request I've had for years: a utility that copies the used textures from a resource wad to the project wad so you don't have to use the resource wad anymore.


Very doable. I need something like this, myself.

Tango said:

how about a program that flips maps upside down, a-la Symphony of the Night? :p reverses floor and ceiling heights, etc. if you could even make it automatically generate upside-down versions of the textures too i'd give you a million dollars


Don't tempt me - I just might do this (but not before a bunch of other things). :P

printz said:

Simple level tweaker like TeamTNT's CLED.


Also doable. If no node rebuilds are your goal though, it will limit what you can change (but not by much).

Share this post


Link to post
MTrop said:

or would you want the actual physical locations of the data inside the wad to change as well

Sounds pointless to me, go with easier method. :)

Share this post


Link to post
MTrop said:

or would you want the actual physical locations of the data inside the wad to change as well (former method is easier and faster).

You don't have to change the physical location of the data, you can swap merely the positions in the WAD's directory, while keeping each lump's offset the same. You'd have to rewrite the directory anyway to rename them.

Share this post


Link to post
Gez said:

You don't have to change the physical location of the data, you can swap merely the positions in the WAD's directory, while keeping each lump's offset the same. You'd have to rewrite the directory anyway to rename them.


Whoops - sorry, I meant the physical locations of the entries.

My bad.

Moving the content would be ridiculous. :P

Share this post


Link to post

Anyway, little utility that could be useful: lump sorter.

Take a wad, puts the miscellaneous/unknown lumps first (MAPINFO, WADINFO, PLAYPAL, etc.), then the maps (sorted cleanly by ascending order, so that MAP01 is before MAP02 and E2M9 is before E3M1), then the recognized lumps (sounds, then music, then graphics, then stuff in namespaces beginning with S_START/S_END and ending with F_START/F_END), using alphabetical sorting in these subcategories.

Share this post


Link to post
MTrop said:

Don't tempt me - I just might do this (but not before a bunch of other things). :P


lawl. well when you get to it let me know, because at that point i'll have no choice but to make sotn doom!!!!!1111

Gez said:

Anyway, little utility that could be useful: lump sorter.

Take a wad, puts the miscellaneous/unknown lumps first (MAPINFO, WADINFO, PLAYPAL, etc.), then the maps (sorted cleanly by ascending order, so that MAP01 is before MAP02 and E2M9 is before E3M1), then the recognized lumps (sounds, then music, then graphics, then stuff in namespaces beginning with S_START/S_END and ending with F_START/F_END), using alphabetical sorting in these subcategories.


or even a zdoom-friendly variant that sorts all these things into appropriate folders within the wad/pk3

Share this post


Link to post

Here's something that I would like - a utility that can look inside a multi-map WAD (Doom, Hexen and UDMF) and dump to a text file all the thing edit numbers used in the WAD on a level by level basis. Then I could load the text file into a text editor and search for specific numbers to find out which maps had a particular thing on it.

eg

MAP01 
1
2
3
4
11
82
2001
2002
2003
2004
2005
2006
2007
2008
2011
2012
2014
2015
2018
2046
3001
3004

MAP02
1
2
3
4
5
9
11
13
14
17
82
2001
etc
etc




Or kind of the reverse: a util that I could use to ask a WAD about a specific thing edit number and the util would spit back a list of maps that use the edit number in question.

If you could do either of those it would be much appreciated.

Share this post


Link to post

Doom to Duke3D or Blood -converter, with the correct scale. There are wad2map, dmdkconv and b2blud which do fine but the only problem is the levels being significantly smaller. Even the skilled dukers and bloodites haven't figured it out but I think it's quite simple: make a comparsion of the 3 characters (Doomguy is the shortest, Caleb is the tallest) by measuring their height and width by pixels and make a multiplier which expands the recreated level by the character's size.

Share this post


Link to post
Enjay said:

Here's something that I would like - a utility that can look inside a multi-map WAD (Doom, Hexen and UDMF) and dump to a text file all the thing edit numbers used in the WAD on a level by level basis. Then I could load the text file into a text editor and search for specific numbers to find out which maps had a particular thing on it.


Very doable. I'll put it on the list.

ASD said:

Doom to Duke3D or Blood -converter, with the correct scale. There are wad2map, dmdkconv and b2blud which do fine but the only problem is the levels being significantly smaller. Even the skilled dukers and bloodites haven't figured it out but I think it's quite simple: make a comparsion of the 3 characters (Doomguy is the shortest, Caleb is the tallest) by measuring their height and width by pixels and make a multiplier which expands the recreated level by the character's size.


Unless it is for adjusting Doom map data and Doom map data only, this is not going to be done. I lack the knowledge and resources for doing anything with Build Engine map data.

Share this post


Link to post

What would be nice is a console-based wad unpacker/merger (merging would merge DECORATEs/KEYCONFs/SNDINFOs etc. as well as rename files if needed [so if there's a RIFLA1 it would rename to RIFMA1, something like that]).
It'd be useful because sometimes you need to unpack a whole WAD so that you can reuse certain resources, and merging wads would allow you to have all your resources in wads that you can just merge to add them. There's more uses than that, but those are just some examples.

Share this post


Link to post
Marrub said:

What would be nice is a console-based wad unpacker/merger (merging would merge DECORATEs/KEYCONFs/SNDINFOs etc. as well as rename files if needed [so if there's a RIFLA1 it would rename to RIFMA1, something like that]).
It'd be useful because sometimes you need to unpack a whole WAD so that you can reuse certain resources, and merging wads would allow you to have all your resources in wads that you can just merge to add them. There's more uses than that, but those are just some examples.


A merger/unpacker is very doable, but merging special data in a data-aware way may be more trouble than it's worth, especially if duplicates exist. Concatenating data together may not always be preferable in some circumstances.

I actually have a merger written somewhere, I should probably release it. I used it to put together a bunch of my WADs.

Share this post


Link to post

Just a question here, about the BlackRook WAD management libraries: I recall that one of the reasons I decided against using them in Mocha Doom in 2011, was that they lacked (at the time) the functionality of marshalling/unmarhalling Doom data into single objects/structs, handling the automatic instantiation and reading of array-like structures (e.g. read a SSECTORS lump into an array of SSECTORS objects, and also auto-create and auto-instantiate it) or at least that there were certain limitations for operations such as searching single lumps by name/number, and/or that one had to read all lumps in a WAD in one go (?) and not on a single-lump, per-need basis, which meant that they couldn't be used with a source port using Doom's interspersed lump-reading style, and certain critical parts like the level-loader would have to be rewritten, rather than following vanilla code closely). In other words, their main problem (for me) was that they would impose a different programming model than what I had in mind, which would require far too many changes to the adapted source code.

Have these points changed in the latest version, as it seems that some or all of those operations are now possible (from a superficial browsing of the current API, at least)?

Share this post


Link to post
MTrop said:

A merger/unpacker is very doable, but merging special data in a data-aware way may be more trouble than it's worth, especially if duplicates exist. Concatenating data together may not always be preferable in some circumstances.

Maybe make an option [such as -s] for merging special data, so that if you know what's in it you merge, if not then don't.

Share this post


Link to post
Marrub said:

What would be nice is a console-based wad unpacker/merger

Anything like this?

Share this post


Link to post
MTrop said:

Very doable. I'll put it on the list.


Much appreciated. Support for all map formats?

Share this post


Link to post
Tango said:

how about a program that flips maps upside down, a-la Symphony of the Night? :p reverses floor and ceiling heights, etc. if you could even make it automatically generate upside-down versions of the textures too i'd give you a million dollars


I think gggmork made something like this didn't he?

Share this post


Link to post
Enjay said:

Much appreciated. Support for all map formats?


How does Doom, ZDoom/Hexen, and UDMF sound? ;)

Share this post


Link to post
40oz said:

I think gggmork made something like this didn't he?


if he did i'd really like to see it :D


gggpenis, where are you

Share this post


Link to post

could you make like an image viewer program that you can run with wads to look at overhead automap views of maps?

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now