Jump to content

Reflections and Aspirations: MBF21 in 2024


Recommended Posts

First of all, thank you for your outstanding work. You and the team have made so many amazing wads possible that just wouldn't have existed without you - at least not in the way they do. Cheers to you!

 

As for requests - being able to change certain wad-wide parameters based on UMAPINFO would be awesome. I've seen a lot of people request being able to change PLAYPAL and COLORMAP lumps per UMAPINFO, but I personally think it would be just as cool to be able to have multiple sets of themed sound replacements that could be changed in this way. For instance, in a techbase, the door sound effect could be the Doom standard space sound - but what if in the next map, set in a castle, the sound would instead be replaced with groaning chains and creaking wood, like in GothicDM? Apply that to all different kinds of map geometry and you could add a lot of spice to mapsets with multiple aesthetic themes.

 

I don't think something like this would be possible in MBF21 as it currently exists, but I could be wrong.

Share this post


Link to post

Here are a few things from couple years back that I thought would be cool additions to a new standard if such a thing came to be:

  • A codepointer for checking whether a thing's hitbox is obstructed by another solid thing (A_JumpIfBlocked?). This would make it possible to have monsters whose SOLID flags are removed and then later returned (say, an enemy temporarily submerging into water or a resurrecting zombie like monster from Quake) without having the risk of them getting stuck into each other or the player. It could function similarly to the Jump functions, where the thing would jump into a specific state if it was blocked (or not blocked).
  • Support for randomized sounds, possibly similar to how the hardcoded randomizations work for sounds like POSIT and PODTH.
  • Extended RandomJump with the ability to jump to as many states as the args can handle with equal probability.
  • Some way (a flag?) for projectiles to not induce pain state on impact. This could be used for a multitude of things, like making a toxic breath monster or a flamethrower weapon not send their target into a frantic pain state loop. Could also be a controlled property, like PainChance, but as the probability of inducing it rather than being affected by it?
  • Support for a Crash state would make a lot of environmental and gore effects easier to work with.
Edited by Aurelius

Share this post


Link to post

A few map feature suggestions:

  • Set/Remove forcefield on line with tag. Force field is pretty much the most ubiquitous form of Boom's 242, making it simpler to set up, removing control sectors from equation and not seeing giant untextured walls in the editor would be nice.
  • NoiseAlert sector effect (upon entry and "automatic/periodic" versions).
  • Random teleport linedef. It would look for all TP destinations in the tagged sector rather than just use the last placed. Use cases - simple to make efficient slaughter teleporters without "tag range" salad, random map behavior without Magnolia/Wormwood 5-style hacks (creative as they are).
  • MonsterCloset sector effect - prevents any thing codepointer processing.

Here's a wonderful mock-up as to why the last 3:simple_closets.jpg.ca51aaef0d0e4c77cce3c30601e16045.jpg

Simpler and saner closet designs, easy swarm/random directions closets. Plus a way of pushing high monster count maps towards not following "wake up a billion monsters at the start" design. I like Helion's idea of simplified processing of AI in closets, but for demo compat and cross-port implementations I figure the most sane solution is to just explicitly tell the game "do not process AI here", as that's equivalent to current Boom/MBF21 mapper taking extra effort to wake up required closets per fight.

 

 

Share this post


Link to post

MBF21 has been a pretty awesome format to work in, but I've definitely run into various limitations and issues. And so I'd weigh in to some of the features that would be nice to have.

 

DEHACKED

  1. Pickup Item functionality - I'd like functionality for new powerups / custom powerups like Rayziik said above. It is one of the few features that currently DEHACKED has no control over. My only other comment to this is that I'd like it to use the similar DEHACKED hack of using sprite Prefixes like SOUL or PVIS, as that allows for more creative ways of using power-up actions. So my ideal way of controlling this would to be able to define the prefixes that the new powerup would use. Included could be the defining of overlay colour and/or colourmap definition per powerup. Obviously I'd expect that a new message could be created/customised upon picking up the new item.
  2. More control of Enemy Health based on "conditions" - I recently played through Heretic, and the engine has some fascinating features that just aren't currently possible with DEHACKED at the moment. One of those features is the ghost functionality and how some projectiles will go through some enemies. So the idea with this is perhaps something like this could be implemented, or certain ammo resistances could be added for certain monsters based on the projectile or monster. So say a shotgun would do more damage than a plasma gun to an enemy, cuz they have plasma shields.
  3. More control of actor's Health before and after death - This is pretty simple, but I wanted to create an enemy very similar to the Zombie in Quake. In that once you kill them, after a certain amount of time, they would get back up. But gibbing the monsters would stop it from resurrecting. However with how death is currently implemented, that makes it very difficult to do in DEHACKED. So my idea is either a codepointer that can resurrect a monster after death and/or give further control over an actor's health. What if there was a monster that could slowly regain health?
  4. Percentage of item drop - Very similar to Heretic, I'd be nice to customise a chance of item drop. Perhaps multiple item drops per enemy.
  5. Gib Health - I'm surprised this wasn't already a feature. I can use "A_JumpIfHealthBelow" but it's much more of a hassle and a waste of frames.
  6. Control when and/or if monsters get crushed or not - I ran into an issue with a project, that if a thing enters a death state, it will always get crushed (turn into a pile of crushed gibs). Since I had set the monster to add the PICKUP flag, it resulting in the game crashing when running into the crushed gibs because it didn't know what the pickup action was supposed to be. It'd be nice to have further control over when monsters are turned into gibs or not.
  7. Randomised sounds - Like Aurelius said I'd be nice to be able to use something similar to what the zombiemen use. Perhaps this could be declared as a flag in a sound block definition to also use other sounds if a specific sound is chosen. Again I can do this with "A_JumpRandom" but it's quite the hassle.
  8. Colourmap linedef actions - Similar to what ViolentBeetle said, I'd be nice to control colourmaps in a way that doesn't require using fake floors. It'd actually be really cool to have some kind of action that would affect the entire level if the player crossed it.
  9. Palette change actions - We've been talking about changing the colourmap mid-map, but it'd be really interesting if it was also possible to change the entire palette mid map as well. Maybe it could be reset to the default upon entering the Intermission screen.
  10. Player only teleport lines - It's simple, but damn am I not surprised this hasn't been added yet.


UMAPINFO

  • Scrolling skies - I've requested this before to rfomin, but I'd like to have a simple value to scroll the sky horizontally. This is a feature that's in ZDoom ports as well as in the Unity Port, but not in UMAPINFO at the moment. This could be expanded to include multiple skies in something more similar to how HeXen does it's skies with some clouds moving in front of the actual sky.


MISC

I don't know what to put this under, but I thought it'd be really cool to have further control over the other screens of Doom besides the gameplay portion.

 

What do I mean? I mean things like being able to have an animated TITLEPIC/HELP/INTERPIC, or being able to make your own custom Doom 1 like animated Intermission screen with the ability to specify coordinates for various small animated sections. Or perhaps being able to define your own Endgame screen with a scroll or no-scroll, or have a vertical scroll similar to the end of episode 3 in Heretic. Maybe add the ability to customise / have multiple pages / images / blocks in a sequence, like for the HELP and/or ENDGAME states. HeXen has multiple images / text blocks it goes through at the endgame sequence.

 

In addition, just as MBF21 has added support for multiple map exits (it would be nice to just use a tag on the exit line to determine what map to exit to...), It'd be nice to have multiple endgames, so that you could have multiple endings. If you wanna go even more in depth, perhaps certain endings could have certain conditions on what triggers them, such as what maps were completed in the playthrough.

 

Speaking of, it'd also be interesting to be able to define a custom palette just for one of these screens, similar to how at the end of Heretic episode 2's screen uses it's own custom palette.

Edited by Arsinikk

Share this post


Link to post

More flexible music changes would be great. I remember others mentioning how you can't do MUSINFO music changes with voodoo dolls, and how the frequency of music changes is capped.

Share this post


Link to post
6 minutes ago, Shepardus said:

More flexible music changes would be great. I remember others mentioning how you can't do MUSINFO music changes with voodoo dolls, and how the frequency of music changes is capped.

It'd be cool to be able to have/set a certain tic timer to determine when a music change is enacted. Then the music change could work closer to how Doom Eternal's does, in that you could set the amount of tics to the duration of a measure in the midi for a map, and then the music change could be a bit more smooth.

 

Tho having voodoo dolls able to enact music changes would also be extremely useful.

Share this post


Link to post
31 minutes ago, Shepardus said:

More flexible music changes would be great. I remember others mentioning how you can't do MUSINFO music changes with voodoo dolls, and how the frequency of music changes is capped.

 

I have no idea if MUSINFO works in conjunction with IDMUS cheat or not, but if not that is something else to consider.

Share this post


Link to post

Been using mbf21 for a megawad for the past months and I love everything about the new dehacked features (+ DSDHACKED :P)
+1 to many of the suggestions in this thread (specially random teleport destinations, I NEED IT), and here are some more that Id like to see:

 

- Some random number generator for dehacked floats. For rain, Im using a couple of defined positions in different states and randomly jumping to those states. Would be nice if I could just get random numbers to set as the rain drop spawn position

 

- A function that alerts the entity and sets the player (player 1 by default, or maybe the closest one) as the target, without the player making any noise or being seen

 

- Being able to offset flat textures by sector would be amazing so that we dont have to account for the grid and change the map just to align everything. I don't know if this is a complevel thing, but its something I want when mapping

 

Edited by PBeGood

Share this post


Link to post
2 hours ago, Shepardus said:

On the subject of music changes, I'd like to be able to play a track from positions other than the beginning. Like imagine you had a "two parallel worlds" sort of map (e.g. Eviternity II MAP35), each with their own mix of the same music, and moving from one world to the other switched the music without changing the position in the track, so it'd sound like the same music is playing through the whole thing but the instrumentation changes depending on where you are.

Or instead pull a Doom 2016/Eternal where the music ramps in intensity during setpiece combat encounters and cools down to ambient once it's done.

Edited by Novaseer

Share this post


Link to post

Would a "+NOTMOVING" be possible to allow turret-based enemies to work properly? Setting their speed to 0 is fine under most circumstances but if you use a low-friction sector they start to move (cooould be a bug in WooF XD).

 

Also, are slopes and 3D floors possible?  :3

Share this post


Link to post
43 minutes ago, DynamiteKaitorn said:

Would a "+NOTMOVING" be possible to allow turret-based enemies to work properly? Setting their speed to 0 is fine under most circumstances but if you use a low-friction sector they start to move (cooould be a bug in WooF XD).

Actually now that this is mentioned, it'd be nice to be able to actually have enemies that are stuck to the ceiling.

 

If you've ever tried to make a moving or stationary enemy that's on the ceiling, you'll know that it isn't actually possible in dehacked, since during chase, the monster's z-axis will always move towards the player... Which results in the enemy floating down off the ceiling.

Share this post


Link to post

Add support for custom intermission maps ala Ultimate Doom (custom animation/"you're here!" offsets). Would be cool.
Colored lighting would be awesome too if possible.
Edit: While I'm at it, I think split doors like the ones in D64 would be nice too, I like those, better than using fast doors + lifts.

Edited by Raspoza

Share this post


Link to post

lol we're slowly supporting Strife one feature at a time c:

All I want for Christmas is gun-activated teleport specials, player-only teleports, damagedice for projectiles... and maybe a way to have a homing projectile do the vileatk without that teleporting nonsense that it does instead? 😅

Share this post


Link to post

something that allows you to enable and/or disable the monster blocking property of linedefs using voodoo closets would be really nice. i suppose it could also be like doomy__doom's forcefield idea, just one that only blocks monsters and not the player

Share this post


Link to post

It would be nice if all of the D64 feature set/thing types/action types etc were taken in by a new standard, but I think things have advanced too far for that to happen without conflicts between certain features, plus most source ports still don't support D64 other than D64-specific ones. I think D64 generalised level exits (tag = level number to go to) should at least be in a new standard; I could have sworn MBF21 had this but it doesn't. Also new weapon slots is a must have as mentioned by @Rayziik above.

 

Not sure if anything like this is possible in MBF21 already but some type of "background flags" that persist across level transitions and can be reacted to by things would be nice. Think of Quake's runes and how once you've collected one, barriers appear in the hub world. There would be a new linedef action type (or a thing flag for collectable things) for activating these flags, and there would be a new thing flag that makes a thing appear or disappear only when one of these flags are set. I'm not sure if I am using the correct terminology as I mainly do vanilla but hopefully this makes sense.

 

Ladders.

 

Linedef actions that give the player items or powerups. The items/powerups to give would have to be encoded somehow in the tag. Basically a cleaner version of using voodoo dolls to achieve the same effect. Maybe it's not worth the effort.

Edited by Individualised

Share this post


Link to post

One more thing I didn't think of yesterday. A_CheckIfAmmoDivisible codepointer for Duke Nukem style reload.

I suppose you could track shots made, but that's too much of a deviation.

 

Having one or more all-purpose counters might be useful on monsters to give them more complex patters.

Share this post


Link to post

I honestly just want a port that is like DSDA but with the full DECORATE functionality for full freedom with custom monsters and objects. If I want to make a largely classically styled wad with purely prboom+ format maps but slightly more advanced custom monsters that aren't possible with the limited functions we have, I have to jump to gzdoom with all the problems and expectations that that imposes on me. Though I realize that it would probably be a monumental amount of work replicating everything that decorate has.

Share this post


Link to post
13 hours ago, Shepardus said:

On the subject of music changes, I'd like to be able to play a track from positions other than the beginning. Like imagine you had a "two parallel worlds" sort of map (e.g. Eviternity II MAP35), each with their own mix of the same music, and moving from one world to the other switched the music without changing the position in the track, so it'd sound like the same music is playing through the whole thing but the instrumentation changes depending on where you are.

 

I think a better(?) way to implement this is allowing for vertical reorchestration - that is, muting or un-muting certain MIDI channels based on actions in the game. I would have made use of this in Eviternity II MAP35 as per the example you propose, for sure. In fact I even started testing the idea using a switch between major/minor key before checking if the features existed for that very map. See below video where I had a test midi running that had the music changes baked into it:
 


On the topic of music changers - additional music changing methods would be VERY appreciated. Also adding this functionality to DeHackEd would be amazing so mappers can tie it to boss creatures or item pickups. The implementation would need some thought out consideration and defined fallback behavior etc, but for now some initial examples should help explain:

  • Actor: Player enters sector (current)
  • Actor: <Thing> sees player/voodoo
  • Actor : <thing> dies (for use in dehacked boss monsters notably)
  • Linedef: Change music when Player enters tagged sector (Much better than using potentially hundreds of things in detailed maps) ((Maybe needs multiple versions to choose which track if multiple are available.))
  • Linedef: Change music when Player crosses linedef (Useful in voodoo setups, though the above could handle that too.)

One last thing to note: please please please reduce the massive lag tied to changing music. It usually takes at least a full second to change the music, sometimes longer, and in 99.99% of use cases I can concieve, an instant music change would be better. 🙏

 

 

---------

 

 

An additional setting that'd be appreciated from my end is some way of having solid midtextures - this would make 3D bridges easier to construct, but the real reason I ask this is there's no way of having exclusively flying monsters be able to cross a linedef without also having the ability to go through the midtexture - another issue seen frequently throughout Eviternity II.

Share this post


Link to post

Some more ideas:

 

Lighting:

  • "Light stops blinking" should remove sector type 8. I don't know why it does not
  • Trigger model for setting sector light (Set lighting to same as sector in front of the line)
  • Transfer brightness to sector wholesale: Mostly useful to synchronize random blinks/flickers across the map when joining is not the option.
  • Change sector brightness based on reference sector height: Probably a low concern but can be useful for some regulations. Something like adding Sector height - 256 to brightness of the sector.

New type of lifts:

  • Floor moves to trigger height. Sector moves to height of the sector in front of trigger, regardless up or down. Additional options: Fast/Slow/Instant; Returns or not. I doubt it would be possible to fit this on top of generalized actions, but maybe a new action, or just a few numbers.

Just a minor quality of life:

  • Create fake floor. Sometimes you want deep water or invisible floor under detailed ceiling. Ceiling variant can be useful, but there's fewer cases for fake ceiling in general

Flags:

  • NORETALIATION: Prevents monster from switching target to something that isn't player or player-friendly. Works best in conjunction with DMGIGNORED, but might also be useful for docile fodder
  • INVINCIBLE: Thing can be targeted, but it doesn't lose health. Useful for things like monster raising shield.
  • Make DMGIGNORED work on projectiles. Maybe Projectile Group too, but that seems less useful.
  • NOIMPACT: Make projectile not die and not do damage on impact - this is in conjunction with my codepointer suggestions. Make it still stop when hitting obstacle, except RIP would let it fly through things.

Codepointers:

  • A_KillProjectiles(Type): Finds all missiles that have this thing as target (As in, sent by it), stop them and send them to death state, as if they hit something. Mostly useful for clearing projectiles on death, but might have other use cases. Optionally thing type can be specified.
  • A_SendProjectilesToState(Type): Send owned projectiles to See, Pain, Missile or Melee state, depending on arguments or different codepointer variant. Use case: synchronizing various projectile mechanics to their originator animation.
  • A_CountProjectiles(Frame, Number, Type): Count how many projectiles are in flight that have Target of this thing. Jump to state if equal or more than number. Optionally, specific type can be specified. Use case: Monster that spawns dormant projectiles over time than trigger them, in conjunction with A_SendProjectilesToState
  • A_SetFlagOnTarget, A_RemoveFlagOnTarget: Meant to be used on projectiles, there are a few instances when I'd like to track if a projectile is still in flight on monster.
  • Variants as player's weapon pointers. Can be used for something like pipe bomb from Duke3D.
  • A_WeaponReadyAlt(Frame, Frame): Weapon ready, but specifies different frames for firing or switching away. Both can be disabled separately. Useful for something like "You planted a bomb and now holding detonator"
  • Do something about ground monsters breaking and jumping up and down when shot while using SkullAttack
Edited by ViolentBeetle

Share this post


Link to post

+1 for a "fake colored lighting" sector effect. Have it work exactly like normal lighting (doesn't affect sky, or things in front of/behind the sector, etc) but using a custom COLORMAP instead. You can get close with existing COLORMAP/TRANMAP functionality but that comes with its own quirks and wrinkles.

 

Specifying PLAYPAL in UMAPINFO would also be awesome - you could run a "bring your own palette" CP, for example. Not sure what the best way to handle that would be r/e level transitions, though.

Share this post


Link to post

Small request, but an optimization for tons of enemies walking over teleport lines because my most recent map, Frost, has a giant lagspike during the finale because of all the imps walking over teleport lines!

Share this post


Link to post
1 hour ago, Blast_Brothers said:

Specifying PLAYPAL in UMAPINFO would also be awesome - you could run a "bring your own palette" CP, for example. Not sure what the best way to handle that would be r/e level transitions, though. 

This seems very limited because it'll wreck HUD if you do anything significant.

Share this post


Link to post
37 minutes ago, ViolentBeetle said:

This seems very limited because it'll wreck HUD if you do anything significant.

 

There's a lot you could potentially do without completely wrecking the HUD, though. If I want one level at midday and one at sunset, then the HUD would be a little more reddish in the second one, but I think that's fine. And if that's not fine, then the spec could ignore palette changes on the HUD and just use the default one all the time.

 

EDIT: Besides, the default statusbar uses red, gray, and tan/brown (for Doomguy). So you could mess with the green/yellow/blue/etc ranges with no consequences.

Edited by Blast_Brothers

Share this post


Link to post

The main thing I'd love to see is a companion to bossaction in UMAPINFO, which instead of applying to particular thing types applies to all creatures that start in a sector with a particular tag (obviously this would require the engine to track the tag). This would allow things like proper wave-style combat (instead of using a voodoo conveyor with an estimated timer), or forcing the player to clear an area before they can proceed. I'll call it tagaction for now, but I'm sure there's a better name.

 

tagaction = tag1, linespecial, tag2

 

There are a few existing ZDoom lumps that I think could be adapted as crossport standards - I'm surprised a couple of them haven't been already:

 

ANIMDEFS
SNDINFO, along with ThingTypes 14001 to 14064 (for Doom format) and 14065 (for UDMF)
TERRAIN (the terrain block could be expanded to allow some or all of Rayziik's Sector Type suggestions i.e., protection negating friction, bouncy floors, healing, and damaging all things)
TEXTURES

 

Eternity's 3D middle textures would also be a useful standard. They're already supported by GZDoom.

 

Re: the PLAYPAL/HUD discussion, an obvious solution would be to allow UMAPINFO to change the HUD as well.

Edited by NiGHTMARE

Share this post


Link to post

Lot of good suggestions here. Here are some more:

 

  • Line exit specials that brings you to any chosen map, possibly based off of the tag given to a specific line (this one has already been mentioned, but I really want this to be added).
  • Thing state frame action (or possibly its own state category?) that jumps to a specific frame when a player uses the use button on a thing
  • GZDoom/Eternity Engine style line portal action (good luck implementing this one without setting most low-end computers on fire)
  • More of a UMAPINFO feature than a MBF21 one, but fuck it: the ability to exit a map without the stats screen popping up!

Share this post


Link to post

It'd be nice to have the ability to generate HUD text popups using a line special. These could be indexed as lines into a MTEXTDEF lump or something similar.

 

Also +1 to the "exit to a specific map" idea.

Share this post


Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...