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

WadC 2.1 Community Map Jam!

Recommended Posts

I'm going to release WadC 2.1 in the near future (I've just put an RC1 release here) and to celebrate I'd like to kick off a community WadC map jam!

The basic idea is: anyone who wants to participate creates a space/room/whatever that obeys some simple rules/conventions so we can slot a bunch of these spaces together. The starting rules shall be:

  • your room shall fit inside a block 512x512 in size
  • the floor height will be stored in the "floor" variable
  • when your function starts, the cursor will be positioned at the bottom-left
  • of your space, so you grow upwards/rightwards from there
  • you should expect the area at the bottom 192 pixels to the right and 128 wide
  • to be an entrance to your room (basically, the middle 128px at the bottom)
  • you should expect an area 128px wide in the middle of one of your other walls
  • to be an exit from your room (you get to pick which wall). You must put the
  • cursor in that position when you end.
We will then use a basic framework to join these rooms up, perhaps randomly, and see what we end up with!

To get things started, I've created the framework and a basic demo room in this repo: <https://github.com/jmtd/wadc-community-mapjam>. There are two files:
  • jam.wl - the main file. The scaffold that will join our rooms together.
  • jon.h - my contribution - a really boring, basic room. (I'll do another; this is a basic example for beginners)
Start by copying jon.h to yourname.h and then hack away, make it more interesting!

I've deliberately kept the rules really simple, because what happens next depends a lot on who takes part. For example: what theme should we go for? How should the doors be themed? I'm assuming Doom 2, but we could target any of Doom/Doom 2/Heretic/Hexen/Strife. Should we use Boom features? We could also vary these rules too. Let's see how things go!

I've called this a "map jam" because I'm modelling this a little after the map jams from the Quake community. It doesn't matter how experienced you are as a mapper, and you don't have to worry about turning out a masterpiece. It's all an experiment and everything is welcome.

If you're curious what's new in WadC 2.1, check out the (WIP) release notes here (the stuff under "dev" applies to the next release, 2.1): https://github.com/jmtd/wadc/blob/master/doc/release_notes.adoc If you have any suggestions for bug fixes, features, etc., fire away!

Edit: a boring screenshot!
Spoiler


Edit: I should have probably included links to my work-in-progress tutorial and complete WadC reference. The other good thing to check out is the example WadC sources in the repo.

Share this post


Link to post

OK, so to keep the ball rolling (or the tumble weed) I started a room of my own. For some reason I felt like doing something castle-y. Here's what I've got after 10 or so minutes (with no clean-up, ugly code)

jon_castle { _jon_castle(get("floor"), add(160, get("floor"))) }

buttresses(f,c,count) {
    for(0, count,
        box(add(f, 128), add(f,128), 160, 32, 16)
        movestep(0,16)
        box(add(f, 128), c, 160, 32, 16)
        movestep(64,-16)
    )
}

_jon_castle(f,c) {
    !jon_castle
    unpegged
    -- RROCK19 - patchy grass
    floor("RROCK19")
    ceil("F_SKY1")
    mid("STONE2")
    movestep(0,32)
    box(f, add(f, c), 160, 448, 448)

    movestep(32,-32)
    buttresses(f,c,6)
    rotright movestep(32,32)
    movestep(32,-32)
    buttresses(f,c,6)
    rotright movestep(32,32)
    movestep(32,-32)
    buttresses(f,c,0)

    -- ?
    movestep(256,0)
    buttresses(f,c,0)

    unpegged
    ^jon_castle
    movestep(448,512)
    rotright
}
Screenshot:
Spoiler


Share this post


Link to post

Adding a link to the tutorial ( https://github.com/jmtd/wadc/blob/master/doc/tutorial.adoc ) and reference ( https://github.com/jmtd/wadc/blob/master/doc/reference.adoc ) would be pretty useful on the main post, don't you think?

I'll see if I can whip up some artsy-fartsy stuff this weekend. Been meaning to learn this for a bit, ever since I wrote a program to generate some UDMF code for a level.

Share this post


Link to post

I'd like to contribute to this but frankly I'm not sure exactly how. I can certainly provide a room wad though based on the limitations.

Share this post


Link to post
Albertoni said:

Adding a link to the tutorial ( https://github.com/jmtd/wadc/blob/master/doc/tutorial.adoc ) and reference ( https://github.com/jmtd/wadc/blob/master/doc/reference.adoc ) would be pretty useful on the main post, don't you think?


Yes. I thought I had but that must have been in an earlier draft. Thanks!

Albertoni said:

I'll see if I can whip up some artsy-fartsy stuff this weekend. Been meaning to learn this for a bit, ever since I wrote a program to generate some UDMF code for a level.


Awesome!

Voltcom9 said:

I'd like to contribute to this but frankly I'm not sure exactly how. I can certainly provide a room wad though based on the limitations.


Well, the best place to get started would be to download WadC, download the latest version of the mapjam source (ZIP archive from github) and build it.

Once you've done that, the next step would be to do some baby-step changes: just try changing some numbers in the existing thing in jon.h, maybe light levels, or ceiling height, or some texture names -- just to start exploring really.

Once you've done that we can work together to hook your room into the jam.

But basically, try to get started and don't be afraid to ask any questions.

Share this post


Link to post

A tiny bit of detailing this evening, added turrets to the corners, changed the default floor to match the walls and added a recessed patterned grass bit in the courtyard complete with tree (the exact shape is a happy accident)

code:

Spoiler

jon_castle { _jon_castle(get("floor"), add(160, get("floor"))) }

buttresses(f,c,count) {
    for(0, count,
        box(add(f, 128), add(f,128), 160, 32, 8)
        movestep(0,8)
        box(add(f, 128), c, 160, 32, 16)
        movestep(64,-8)
    )
}

_jon_castle(f,c) {
    !jon_castle
    unpegged

    floor("RROCK19") floor("MFLR8_1")
    mid("STONE2") bot("STONE2") top("STONE2")

    -- extra door corridor
    pushpop(
      movestep(0, 192)
      box(f, add(f,96), 160, 32,128)
    )

    ceil("F_SKY1")

    -- main space

    movestep(128,128)
    quad(
        left(96)   pushpop( movestep(-64,-24) buttresses(f,c,0) )
        right(256)
        rotright
        pushpop(movestep(32,-24) buttresses(f,c,0))
        straight(96)
    )
    rightsector(f,add(f, c), 160)

    -- inset floor
    pushpop(
        floor("RROCK19")
        movestep(32,0)
        quad (step(32,32) straight(200) rotright)
        innerrightsector(sub(f,16),c,160)
    )
    pushpop(movestep(128,128) burnttree thing)

    -- west wall
    pushpop(
        movestep(48,-120)
        buttresses(f,c,2)
    )
    -- north wall
    pushpop(
        move(376) rotright
        move(48)
        buttresses(f,c,2)
    )

    unpegged
    ^jon_castle
    movestep(512,512)
    rotright

    -- extra exit door corridor
    pushpop(
      movestep(-32, 192)
      box(f, add(f,96), 160, 32,128)
    )
}

screenshot:
Spoiler


In case anyone is wondering, the reason I write a separate function _jon_castle is so I can put all the get("value") or simple calculatons from say floor height + a number to make ceil height in the jon_castle function and pass the results as arguments to _jon_castle, which can just use the variables 'f', 'c', etc., making the main routine (_jon_castle) a bit cleaner to read.

Share this post


Link to post

I didn't do any further work on my samples over the weekend (it was family time) but I was thinking a little about how they could develop.

I was considering stringing a ring of the castle rooms together, a bit like in the WadC tutorial, and then making adjustments so that the turrets only appear in the outer corners (rather than in each 512x512 segment). I was also thinking that you really want to be able to get into those turrets, and onto the ramparts. I had some ideas for nice gothic windows in the walls, and for a vaulted ceiling in a chamber, perhaps in the middle.

But a castle on its own is a bit boring; I was reminded of a '94-era WAD I used to like which had a bunch of different mini-castles ringed by moats, and you had to storm one at a time to activate the drawbridge to access the others.

But putting all that aside for a moment, I'm not likely to invest a lot of time developing this in isolation; if this is going to be just me, I'd probably just can this, since I have already got a bunch of unfinished solo WadC maps to complete. I should probably post more about them on DWF, I could do with some suggestions for texturing/detailing my sewer level for example.

In the meantime, I was hacking on the WadC source a little more this week. I've finally sat down to try and squash the most annoying bug, which is where sometimes WadC is not happy to split a linedef and refuses to let you create a sector adjacent to another. This is why I often have code which draws a sector backwards, to work around it. I couldn't avoid referencing that problem in the tutorial, and it stuck out to me as an issue beginners really don't want to have to face. So I grasped the nettle and sat down to unpick WadRun.java, which is a bit of a beast. I "fixed" one problem (where it was not correctly noting which vertexes were drawn last) but that broke a few of the existing example maps, and it isn't the root of this bug anyway. More time needed!

Share this post


Link to post

Well, it's been a week of poking at WadRun.java and I've *nearly* got this sorted. I've had to do a lot of drive-by refactoring which I think improves the clarity of the code. I just need to wrap my head around splitlines a bit more, although the fix will probably be in makeline. The issue appears to only be if you draw a linedef over another, such that splitlines is triggered, but the two linedefs have opposite "directions".

EDIT: FIXEEED!! FINALLY! I'll get an 2.1-rc2 release out with this fix and corresponding tutorial and examples updates asap

Share this post


Link to post

Added hexadecimal numerical constant support and boom generalised linedef type convenience functions; some lineflag constants; made control sectors be marked as never automap; basic undo/redo support in the GUI; christ I need to release this already

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
×