While clearing out one of my old folders of miscellaneous doom scraps I came across wallscroll.wad, a prototype for animating textures from one state to another based on a triggered action:



The way it works is outlined in this post. Each frame of the animation is stuffed into a single texture:


After hitting the switch a voodoo doll then rapidly scrolls the wall with the big texture 128 units at a time, simulating an animation.

download: wallscroll.wad

Teleport destinations are mobjs like any other, which means you can make them pushable, killable, etc, via dehacked flags. One simple thing you can do with this is boom-compatible teleporters with multiple destinations:



Download: teledest1.wad

If you walk over the teleporter it takes you to the red side. But if you hit the switch, the teleporter now takes you to the blue side instead.

When you walk over a teleport linedef the engine searches through all sectors (in ascending order) looking for one which matches the tag of the tele line and which contains a teleport destination object. The red telepad has a lower sector index than blue, so it is found first in the search. When you press the switch, the teleport destination object gets pushed off of the red telepad, so the search for a teleport destination continues onward to the blue one.

In the demo wad the destination objects are candle sprites so you can clearly see what's happening, but in practice you could blank them out with an empty graphic.

DoomBound 1

Back when Starcraft custom mapping was a thing there was a popular game type called "Bounding" that involved guiding small units through timed patterns of exploding obstacles. Think part puzzle-game, part rhythm game:



I had the terrible idea to try and create timed exploding obstacles in Doom (specifically, in boom-compatibility):


I cobbled together some dehacked, wrote very elaborate lua scripts to generate the explosion mechanics, and had a decent prototype going. It might be the most complicated voodoo-doll mechanics ever used in a map? Don't quote me on that.

Gradually my enthusiasm for the idea wore off. The explosions can feel pretty janky, and I imagined that very few people would actually be interested to play something like this (especially if I started making very challenging obstacles). Instead of having it rot on my harddrive though I figured I might as well post the tech demo: doombound01.wad (tested in prb+ complevel 9)

Some things to note:

- Each difficulty setting has different explosion patterns

- UV requires SR50

Boom's "Scroll Floor/Things" actions normally only affects objects on the ground. However, if the scrolling is applied to a sector also affected by action 242 then it pushes every object below the fake surface.

This can be used to nudge flying monsters around, or projectiles:

Here's are some vaguely-spooky maps that use the effect: wormwood_EU.zip

Happy Halloween.

Floors that instantly kill you when you land on them! Very common in zdoom mods, rather straightforward to implement in MBF, and I recently found out it's doable in Boom. Most cl2/9/11 mapsets with "you fall, you lose" mechanics use one of the following techniques:

1) -20 dmg floor: Slow and annoying.
2) Linedefs that trigger voodoo crushers or telefragging: Easily broken in multiplayer.
3) Invisible enemies that melee you to death: Infinite height problems.
4) TOUCHY enemies that explode on collision: Only works in cl11, cl11 is bad.

It turns out that false floors created by Boom action 242 block certain line of sight checks, including those used by A_Explode. If you place a constantly-exploding object in a "deep water" sector, the player will be dealt large amounts of damage if they are within range, but only if their z-position is below the fake surface!

Here's a small example wad to demonstrate the effect: rbkz.net/exp/deathfloor.wad

Here's a map I made yesterday which incorporates it: rbkz.net/doom/pwacP.wad

 

The effect is so simple that I have to assume the LoS behavior in 242-affected sectors was intentionally designed to facilitate things like this. There are probably Boom wads out there that have done this already?

Colormaps Vol. I

BLKMAP01 / BLKMAP02:

Turn a section of your map into miserably dark nightmare with this one easy trick.


GRNBRITE:

Extra spooky enemies. Originally from Fruit Salad (later repurposed for OITL and Wormwood):


Range-swaps:

Nothing special, but situationally useful.


You can apply colormaps dynamically by raising/lowering control sectors:



Here's a demo wad with all the effects described above: http://rbkz.net/exp/colormaps1.wad

Here's the lua script which applies a colormap to selected sectors: https://github.com/ribbiks/doom_lua/blob/main/make242c.lua
[edit: link updated to github]

Circularizer Lua

Coordinate transforms are simple to implement and can yield cool results when applied to doom geometry. I like curvy things so polar transforms seemed like fun:

Sunder MAP03, Circularized:




Here's the script itself: circularizer.lua
[edit: Feb 23 2021. updated link to github]

The math is simple, it just maps the bounding box of the level geometry to a ring:



This particular transform has some funny side effects, most notably that sectors at the bottom of the map get crunched together and sectors at the top are smeared and stretched all the way around the periphery of the ring.

There are many other ways to accomplish effects like this. Here's Sunder again, transformed in another way:


I leave you with this parting gift: d2_circle.wad

Multicolor pickups

For some reason the effect of picking up an item is determined by the 4-character prefix of the sprite name, not its thing id. With this you can have multiple versions of a pickup with different sprites:





Here's a minimal example that replaces the invisibility sphere with a differently colored soul sphere:

http://rbkz.net/exp/soul_color.wad

(shoutout to GrainOfSalt, who clued me into this particular effect)
Observations:
i) Projectile mobjs target the mobj that created them
ii) Revenant missiles use the mobj tracer field to track the player
iii) The archvile attack sequence uses the tracer field to place fire sprites

With that in mind:

[CODEPTR]
FRAME 318 = VileAttack


This dehacked places the VileAttack codepointer in the death frames of the revenant missile, so whenever the missile collides with something, it "attacks" its target (the revenant that fired it).

When a mobj M calls the VileAttack codepointer, the codepointer assumes that M->tracer is the fire sprite that is normally spawned during the attack sequence and changes its (x,y) coordinates to that of M->target (i.e. placing fire graphics onto the player). But if M is a revenant missile, then M->tracer is the player, and M->target is the revenant. You are the fire!

fire = actor->tracer;
fire->x = actor->target->x; fire->y = actor->target->y;

Can this be used for something cool? I don't know.

http://rbkz.net/exp/rev_tele.wad