Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
Jon

WadC 3.0 released

Recommended Posts

10 hours ago, kb1 said:

Oh, please, please release a demo map!

 

I'm not quite ready for that, at least for this map, but I might have something else out soon, in the meantime here's two screenshots

Spoiler

doom00.pngScreenshot from 2018-04-27 15-13-54.png

Quote

 

You know, I would love to take something like a Mandelbrot generator, and somehow feed its output into a WadC function generator, to make some truly abstract, twisty, curvy, crazy looking levels with awesome spirals in all dimensions, with weird super detailed pillars, lifts, floor patterns, etc. Don't know how, but it'd be neat to try.

 

I don't think it's mandelbrot specifically but one of Aardappel's example maps is a fractal:

 

https://redmars.org/wadc/examples/#_fractal_wl

Share this post


Link to post
13 hours ago, kb1 said:

Oh, please, please release a demo map!

 

OK here's something you might like. Requires boom, ideally something with jumping too (I haven't tweaked the scaling of the heights to guarantee paths for traditional doom)

 

https://jmtd.net/tmp/jonhex.zip

 

1024 hexes, 529 control sectors, 4304 vertices, 5429 lines, 1655 sectors, 1 things.

 

Source in the WADCSRC lump in the WAD.

 

 

doom00.png

Share this post


Link to post

Woah, awesome examples, thanks. That first screenshot with the single curved strips - very nice. And the second one - a script did that? The concept "automation" keeps screaming to me. I'll check out the maps on the weekend.

Share this post


Link to post

It's coming up to a year since v2.2 was released, and I've tried to keep to a cadence of one release a year since 2015, but there's not much really new since last year so I don't think it's worth cutting a release yet. New so far is

  • code clean ups by Jon Rimmer, mostly internal and invisible to users
  • more robust invocation of BSP programs (so you can use zokumbsp and ajbsp if you want)
  • the cursor position can optionally be drawn in the GUI
  • bunch of deprecated stuff removed
  • a more useful RNG function
  • one more demo program (random dungeon generator using BSP algorithm, very basic)
  • fix building from source with Java ≥ 9

Most of my enthusiasm for this stuff was spent on Liquorice this year instead.

So I might hold off cutting a release, or maybe I should just put out a boring one for the Java and BSP fixes.

 

If anyone has any feature requests, now would be the time to raise them!

Share this post


Link to post

Nice work on this so far!

Been using WadC to generate some sequentially tagged/adjusted structures that would take forever to do by hand.

 

20 hours ago, Jon said:

If anyone has any feature requests, now would be the time to raise them!

 

Would like to have a way of setting the Thing Tag(tid) and Thing Height for Hexen format maps. Thing tag in particular is pretty important for hexen format maps.

 

Another thing that would be nice, would be a way to force the side that a doublesided linedef faces. Could be that I don't properly understand the logic behind it, but I feel like I have to go through trial and error, as well as build sectors in an order that perhaps isn't ideal, just to get a doublesided linedef facing the way I want.

 

Edit: Maybe the font could be different, or an option to choose one, because of the ambiguous characters:

RJPKdS4.png

Edited by Worst : added another note

Share this post


Link to post

I’ve pushed a bunch of stuff to wadc’s master branch. I’m prepping for a release in the next week or so. Possibly the last one ever as I’ve basically done what I wanted to with it (and liquorice, my Haskell reimplementation, should be where I look next really)

Share this post


Link to post
On 11/3/2018 at 8:38 AM, Worst said:

Nice work on this so far!

Been using WadC to generate some sequentially tagged/adjusted structures that would take forever to do by hand.

 

 

Would like to have a way of setting the Thing Tag(tid) and Thing Height for Hexen format maps. Thing tag in particular is pretty important for hexen format maps.

 

Another thing that would be nice, would be a way to force the side that a doublesided linedef faces. Could be that I don't properly understand the logic behind it, but I feel like I have to go through trial and error, as well as build sectors in an order that perhaps isn't ideal, just to get a doublesided linedef facing the way I want.

 

Edit: Maybe the font could be different, or an option to choose one, because of the ambiguous characters:

RJPKdS4.png

 

These are all great suggestions thanks!

Share this post


Link to post
On 11/3/2018 at 8:38 AM, Worst said:

Would like to have a way of setting the Thing Tag(tid) and Thing Height for Hexen format maps. Thing tag in particular is pretty important for hexen format maps.


I've pushed an initial implementation here, https://github.com/jmtd/wadc/tree/thingtypehexen

and I'll extended it a little with docs and tests and merge it into the main branch

 

I ended up adding tid and zpos as additional arguments to the "thingtypehexen" function which seemed the simplest approach. I was worried about backwards compatibility and considered some other things, before I realised that not a single example in the wadc source code actually used "thingtypehexen" yet. It will be interesting to see if I can write a hexen demo map that demonstrates TID working w/o also writing some ACS.

 

Except WadC *does* generate some ACS but I have no idea what it does, yet - https://github.com/jmtd/wadc/blob/52313760f967d19b206c38cd52302bad04ff6388/src/main/java/org/redmars/wadc/Wad.java#L237 - except with the new TID/zpos changes, zdoom complains that the ACS is invalid and chocolate-hexen segfaults. So I better dig into that!

 

On 11/3/2018 at 8:38 AM, Worst said:

 

Another thing that would be nice, would be a way to force the side that a doublesided linedef faces. Could be that I don't properly understand the logic behind it, but I feel like I have to go through trial and error, as well as build sectors in an order that perhaps isn't ideal, just to get a doublesided linedef facing the way I want.

 

I find this awkward and confusing myself, but I think you just need to reverse the order you draw that particular line. Or possibly the front will always belong to the first of the two sectors that is defined.

 

Share this post


Link to post
52 minutes ago, Jon said:

except with the new TID/zpos changes, zdoom complains that the ACS is invalid and chocolate-hexen segfaults.

That's weird, it doesn't look like there should be any interference. BEHAVIOR is a separate lump and this function looks like it's hardcoded to just write a blank file, just the signature and zero scripts.

Share this post


Link to post
9 hours ago, Gez said:

That's weird, it doesn't look like there should be any interference. BEHAVIOR is a separate lump and this function looks like it's hardcoded to just write a blank file, just the signature and zero scripts.

 

Yes the error is probably misleading. I can happily share my test WAD if anyone wants to investigate that side of things further. I'm going to poke at the THINGS lump I wrote, as that's the only difference, and I've probably encoded it wrong.


Edit: pretty simple bug. I've generated a thing of type 0, instead of 1 - default field initialisation discrepancy.Zdoom did indeed tell me that, I just missed the message (I was running to a conference when I stopped working on it this morning). It actually complains about an invalid ACS module in the working case, too, and non-fatally.

Share this post


Link to post

OK, the feature now works and I've merged it into the master branch. there's documentation and I've extended the Hexen test map to have a ramp of z-height increasing manas to demonstrate it.

 

I'm thinking about a possible API change, though. Doom format maps have a setthing which takes only one argument ,the thing type, and so all (or most) of the thing values are encoded in the libraries, e.g.

 

cacodemon           { setthing(3005) }

 

Thing flags are handled in a separate function. This works well in practice, because you tend to want to define a thing type and flags in different places (such as changing skill levels in a different function to where you define the monster type)

 

The hexen-style thing function thwarts this, because you need to set TID, Z-Pos and the 5 special arguments at the same time. So if you want to use any those, then you can't use the pre-defined thing names

 

-- library code
mana1            { setthing(122) }

-- user code
mana1 -- current thing type is now mana1
thing -- current thing TID and z-pos are 0

-- user code
setthinghexen(122 /* mana1 */, 0, 8, 0,0,0,0,0)
thing

This is kinda awkward. I think all but the type should be set separately. So I might split the function in two.

Share this post


Link to post
13 hours ago, Jon said:

and the 5 special arguments

Don't forget the thing special!

 

For most thing types, the arguments are only useful if you put a special on the thing.

Share this post


Link to post
2 hours ago, Gez said:

Don't forget the thing special!

 

For most thing types, the arguments are only useful if you put a special on the thing.

 

Hmm, thanks . It looks like we do presently ignore the thing special. I'll see about adding that to the (newly renamed) setthingargs function.

Share this post


Link to post

Hm. I added special this morning but I haven't managed to make a test WAD that actually shows it working. The bytes are being written OK, I'm fairly sure, but I've never tried to set a thing special before. I tried Thing_Damage (72) targeting TID 1 (and marking the player as TID 1) with arg1 = 10 (damage?) but the player was not injured upon hitting or killing those things. I think I'm misunderstanding how the thing action specials work.

Share this post


Link to post

72 is ThrustThing if I'm not mistaken. You probably want 73: DamageThing.

 

For a simple test, I'd suggest generating just a simple room with an ettin (or a pottery) in it, and on that thing setting special 74: Teleport_NewMap to get to MAP02. Smashing the ettin (or pottery) allows to quit the level. If the thing is a pickup, like a blue mana crystal or whatever, then picking it up allows to quit the level. If the special is some inert thing, like a barrel (can't be picked up or destroyed) then putting a special on it is largely useless.

 

There are some things that handle their special differently. The Heresiarch IIRC uses that field as the number of the script to run on death, using its arguments as script parameters.

Share this post


Link to post
2 hours ago, Gez said:

72 is ThrustThing if I'm not mistaken. You probably want 73: DamageThing.

 

For a simple test, I'd suggest generating just a simple room with an ettin (or a pottery) in it, and on that thing setting special 74: Teleport_NewMap to get to MAP02. Smashing the ettin (or pottery) allows to quit the level. If the thing is a pickup, like a blue mana crystal or whatever, then picking it up allows to quit the level. If the special is some inert thing, like a barrel (can't be picked up or destroyed) then putting a special on it is largely useless.

 

There are some things that handle their special differently. The Heresiarch IIRC uses that field as the number of the script to run on death, using its arguments as script parameters.

 

Thanks for the tip, that's given me a bit more data to work with. When I tried this the pottery spawned a centaur, but the same settings on the Wendigos (what I was testing with in the first place) still did nothing. And putting the pottery in but not setting any flags resulted in the pottery being broken at map start-up. I'm definitely writing the wrong values into something, somewhere, and this will help me chase it down.

Share this post


Link to post
2 hours ago, Jon said:

When I tried this the pottery spawned a centaur

Oh yeah I forgot potteries spawn something when destroyed. That must override the thing special dealie. And it seems teleport_newmap doesn't work right on thing specials, probably some issue with who owns the activation.

 

However, this simple example file should work: when you pick up the quart flask, you spawn a poison dart (inside you, so it hurts you), and when you kill the ettin, it spawns a combined mana pickup.

thingspecialtest.zip

Share this post


Link to post
5 hours ago, Gez said:

Oh yeah I forgot potteries spawn something when destroyed. That must override the thing special dealie. And it seems teleport_newmap doesn't work right on thing specials, probably some issue with who owns the activation.

 

However, this simple example file should work: when you pick up the quart flask, you spawn a poison dart (inside you, so it hurts you), and when you kill the ettin, it spawns a combined mana pickup.

thingspecialtest.zip

 

Thank you that's really helpful. It works in GZDoom but not Chocolate Hexen (even after substituting the empty BEHAVIOR lump for the placeholder wadc generates); but, dumping the thing values, they look quite different to what I was expecting so I've likely re-ordered the fields in the WadC output or something similar. It should at least help me to get output WADs working in GZDoom; it may be that vanilla limitations on what you can use thing special for make it much less useful (but that's fine, that's not my problem :))

 

Edit: ordering is fine, the trigger types I was trying just don't work in vanilla. The quartz flask spawn works fine and I can generate maps with WadC that do that now. Thanks!

Edited by Jon

Share this post


Link to post
On 2/3/2019 at 9:55 AM, Jon said:

I find this awkward and confusing myself, but I think you just need to reverse the order you draw that particular line. Or possibly the front will always belong to the first of the two sectors that is defined.

Yeah, I figured eventually that I needed to draw it in reverse, so I came up with a function like this:

neg(x) { sub(0,x) }

flipstep(x,y) --draw a linedef flipped
{
  movestep(x, y)
  step(neg(x), neg(y))
  movestep(x, y)
}

 

Another thing I wish I could do in WadC would be setting different textures & offsets on the backside of a linedef.

For example, the following code currently does not set a different texture and offset on the side of the linedef that faces the 2nd sector.

#"standard.h"

main {
  wall("MARBFAC4")
  right(128) 
  right(128)
  yoff(-48) right(128)
  yoff(0)   right(128)
  rightsector(0, 128, 144)
  
  movestep(-128,0)

  wall("GSTONE1")
  yoff(11) right(128)
  yoff(0)  right(128)
  right(128)
  right(128)
  rightsector(-64, 64, 144)
}

 

Also I've noticed that the one-sided linedefs that WadC generates, do not have the impassable flag set by default. In GZDoom Builder this makes them visually indistinguishable from doublesided linedefs. They do look different in SLADE though, so I guess this may vary from editor to editor.

Share this post


Link to post
13 hours ago, Worst said:

Yeah, I figured eventually that I needed to draw it in reverse, so I came up with a function like this:

 

neg and flipstep look very useful. I've never thought to implement them before. Thanks!

 

13 hours ago, Worst said:

Another thing I wish I could do in WadC would be setting different textures & offsets on the backside of a linedef.

For example, the following code currently does not set a different texture and offset on the side of the linedef that faces the 2nd sector.

 

Hmm yes that's right, it would be a lot of work to fix, though, I think. If someone wanted to work out a design and solve the conceptual problems I wouldn't say no to implementing it, but I don't relish that.

 

13 hours ago, Worst said:

Also I've noticed that the one-sided linedefs that WadC generates, do not have the impassable flag set by default. In GZDoom Builder this makes them visually indistinguishable from doublesided linedefs. They do look different in SLADE though, so I guess this may vary from editor to editor.

 

That's right, they don't. GZDB is a popular enough editor that I could change that if it would make working with WadC output easier. I think that would be quite a simple change.

Share this post


Link to post

I've built a WadC 3.0 RC1 distribution and it's available here

https://redmars.org/wadc/wadc-3.0-bin.zip

or just the JAR https://redmars.org/wadc/wadc-3.0.jar

 

The changelog is roughly "Dev" here: https://github.com/jmtd/wadc/blob/master/doc/release_notes.adoc#dev


I'm hoping to release this very soon so some things I was going to don't make the cut. In particular visually representing thing angles in the 2D view is driving me mad and quite boring so I might give up on it. I might still try some of the suggestions from this thread however, such as the impassable flag defaults.


I added in keyboard shortcuts to make the font bigger/smaller but I've stopped short of a proper font chooser as I don't want to introduce an additional dependency at this stage (would stop me uploading straight into Debian). However that could come for 3.1. At the moment WadC forces the text to the font name "Monospaced", so you can probably change what real font that maps to underneath Java, somehow.

 

OK the linedef change was easy, that's in master now, so there'll be an RC2 at some point.

Edited by Jon

Share this post


Link to post

OK I released V3. Promo to follow. Here's an ani GIF of the the blockmap-based random dungeon generator being refreshed

 

 

Peek 2019-02-21 11-48.gif

Share this post


Link to post

Edited first post to reflect release of V3, only finally acknowledging it now

Share this post


Link to post

Just wanted to say that WadC is unbelievably amazing, and can build incredible maps! Jon, you're a genius! Bravo!

Share this post


Link to post
5 hours ago, kb1 said:

Just wanted to say that WadC is unbelievably amazing, and can build incredible maps! Jon, you're a genius! Bravo!

 

That's very kind, thank you.

Share this post


Link to post
On 3/19/2019 at 5:58 AM, Jon said:

 

That's very kind, thank you.

You're very welcome! There's something fascinating about building level geometry using formulas and programs. I think we have yet to see results that have done much more than just scratch the surface of what's possible.

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
×