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

MBF21 Specification v1.2 Release

Recommended Posts

Yep, as already mentioned it's way too late to request anything πŸ˜„

Β 

This won't be the end of progress though πŸ˜‰

Share this post


Link to post
3 hours ago, Redoom said:

I would like to see some colored lighting abilities, and Doom 2 Monsters for Doom 1, maybe some way to stop sliding too.

I thought Boom already had colored lighting?

Β 

And IIRC you can have Doom 2 monsters in Doom 1 if you just include sprites. The only thing you can't do is use the SSG, I think.

Share this post


Link to post
On 6/9/2021 at 12:54 PM, TheMightyHeracross said:

I thought Boom already had colored lighting?

Β 

And IIRC you can have Doom 2 monsters in Doom 1 if you just include sprites. The only thing you can't do is use the SSG, I think.

ignore

Edited by Redoom

Share this post


Link to post
5 hours ago, kraflab said:

Yep, as already mentioned it's way too late to request anything πŸ˜„

Β 

This won't be the end of progress though πŸ˜‰

Dammit. I've been away from the doom community for too long, just saw this today.

I would have requested the ability to record chat in demos as well as respawning items in coop. It annoyed me that those features weren't featured in any of the previous standards.

Share this post


Link to post

An idea I had today (Might be hard for scope of the project) - synced linedefs.

Essentially, a linedef could have a flag that makes it share its triggered status with every other linedef with the same flag, tag and type.

Β 

This would be useful for two things:

- A switch could now consist of multiple linedefs that change at once, such as curved linedef or one of those floating cubes some mappers have.

- A booby-trapped sector surrounded by multiple linedefs that makes ambushes by means other than doors won't click multiple times when you run through it. Especially if linedefs are short and numerous, like a circle.

Β 

Also silent type on sectors, so they don't produce sound when moving, no matter what. Might be mostly redundant if linedefs can have it, but could still be useful.

Share this post


Link to post

For the second, it might be simpler to port the concept of "sector actions" from ZDoom?

Share this post


Link to post
3 hours ago, TheMightyHeracross said:

I thought Boom already had colored lighting?

Β 

And IIRC you can have Doom 2 monsters in Doom 1 if you just include sprites. The only thing you can't do is use the SSG, I think.

Boom makes it possible, but in very crutchy way, so it needs to be a new feature that is just bound to linedef action that just applies a custom colormap to tagged sectors. The easier thing to implement that I'd ask is to make it possible to apply a colormap to whole the map bound to fadetable entry stored in UMAPINFO or in other lump that is read upon a map's init, like a map marker lump

Share this post


Link to post
4 hours ago, SilverMiner said:

Boom makes it possible, but in very crutchy way, so it needs to be a new feature that is just bound to linedef action that just applies a custom colormap to tagged sectors. The easier thing to implement that I'd ask is to make it possible to apply a colormap to whole the map bound to fadetable entry stored in UMAPINFO or in other lump that is read upon a map's init, like a map marker lump

This would be limited but still useful, especially in creating Hexen-style fog. Seconded.

Share this post


Link to post
9 minutes ago, punch you in the face man said:

Melee range might be bugged. I set it to 68 for a pinky and it wouldn't attack me, even going to 128 it just never tried to byte.

Guessing that you're trying to set a fixed point field,Β doom's way of storing fractional values. In that caseΒ 65536 is equal to one unit. Then 68 would beΒ 4456448. Tools can take care of that conversion for you, if you don't mind waiting for them to be ready - otherwise you can take care of the math by hand too.

Share this post


Link to post
On 5/29/2021 at 7:41 PM, Xaser said:
  • Granular control over monster infighting and projectile/splash damage susceptibility (e.g. you can make barons and knights infight, or make imps immune to cacodemons and barrels, and all sorts of funky combinations)

This is cool, now you can make proper Doom 64 style Lost Souls that A_Explode when spawn blocked without damaging the Pain Elemental or other Lost Souls.

Share this post


Link to post

I've been tinkering with the OPTIONS lump, and noticed that the description for the "monkeys" setting in the specifications is dead wrong.

It implies that it lets monsters jump down like dogs do when "dog_jumping" is on. However, it instead lets monsters use steep stairs, assuming "comp_ledgeblock" is off.

This is, to say the least, a pretty important distinction!

Share this post


Link to post

Will there be a demo wad that demonstrates MBF 21Β sector and dehacked features?

Share this post


Link to post
Just now, JXC said:

Will there be a demo wad that demonstrates MBF 21Β sector and dehacked features?

Well, there already is one, at least in terms of map stuff.

Β 

Share this post


Link to post

I thought of something that may or may not be useful: adding a bit field for generalized sectors that allows\disallows the "leaky radiation suit" random damage effect. If I'm not mistaken it's still limited to 20% damaging floors, and always on for them as well.

Share this post


Link to post

WiII you be taking more feature suggestions some day in the future? I figured I'd write down a bunch of other ideas I had in case you do, most which aren't too complex (in my perception, anyway, implementation and compat may say otherwise).

Share this post


Link to post

As I am currently implementing the standard in GZDoom I'd like to give some feedback.

Β 

The vast majority of features was no problem, but there's one thing in here that I have to consider a major portability hassle for an open standard and that's the 3 functions for setting and checking the flags (A_JumpIfFlagsSet, A_AddFlags and A_ClearFlags.)

Β 

Here's a list of problems with this, some are only relevant for ports that changed things under the hood, others are general issues, applying to all ports:

Β 

* the set and clear functions make no checks for special flags like NOBLOCKMAP and NOSECTOR. Just flipping these will most definitely cause problems with actors not being unlinked/relinked into the proper chains.

* No checks are being done to mask out undefined/non-universal flags. It just performs a binary comparison of the flag words, requiring each port which wants to implement this feature to replicate these words bit by bit. As an example I'd use MF_SLIDE. ZDoom, for example, removed MF_SLIDE long ago as it was not used for anything useful. Another one would be MF_TRANSLUCENT or MF_TRANSLATION. Again, this is not how more advanced ports would handle translucency - it's very limiting and if a port handles this differently, having these flags among the checkable ones may be a major issue for robustness, resulting in undefined behavior of the A_Jump... function.

* The args are only 32 bit so this covers all the Heretic flags in the second flag word but only half of the MBF21 flags that would be of actual interest. It also misses several important high flags in the first flag word.

Β 

With this in mind, is there still a chance to revise these 3 functions so that they work in a truly portable fashion by only allowing to check a well-defined set of flags that other ports can easily implement without having to compromise their implementation of the underlying features - and by making sure that they can actually access all relevant flags and not miss a significant portion by not allowing to check the higher bits?

Β 

Β 

Share this post


Link to post

Super happy to see this coming to gzdoom! πŸ™‚

Β 

It's expected that a port will convert the value in dehacked into a value that makes sense internally. For instance, dsda-doom has "flags2" actually covering heretic and the mbf21 stuff, similar to how you mentioned, but the value of the flags2 field in dehacked is based on the mbf21 spec. So, the dehacked file may have "2" meaning SHORTMRANGE, but the dehacked parser converts this toΒ 0x00200000 (MF2_SHORTMRANGE) for dsda-doom when it reads the file. Depending on how a given flag is (or isn't) implemented, some may require different implementations from the basic one present in dsda-doomΒ (e.g., having flags3 internally, or needing to set values instead of flags on / off).

Β 

Completely agree about specifying the allowed flagsΒ for the first argument as well to prevent possible misuse and confusion with these fields.

Β 

Also agree we need 64 bit to cover the extra mbfΒ flags. I'd say that's an oversight in the spec and not intended. Assuming we limit the flag options based on the ones that make sense, 32 bits is probably still enough for the field in dehacked at least.

Β 

@XaserΒ and @MTropΒ what do you think?

Share this post


Link to post

Ah, ok, I missed the part where the flags are being translated. It was a bit off the path where I was looking. This already clears things up a lot.

Seeing how your checker works, I don't think you can simply go 32 bit, as you want to check the higher bits as well.

Β 

That just leaves some of the flags in the first word

Β 

22 minutes ago, kraflab said:

Also agree we need 64 bit to cover the extra mbfΒ flags. I'd say that's an oversight in the spec and not intended. Assuming we limit the flag options based on the ones that make sense, 32 bits is probably still enough for the field in dehacked at least.

Β 

No idea how you want to handle it. Currently the args array is 'long', which means the size is not consistently defined - it's 32 bit on Windows but 64 bit on Linux. If it's supposed to be 64 bit it needs to be 'long long'. Considering how your code performs the checks you definitely need 64 bit words here to do it right.

Β 

But the flag functions truncate the value to 32 bit, losing all the upper flags, even if the args were 64 bit so this definitely needs to be fixed.

Β 

Plus handling MF_NOBLOCKMAP and MF_NOSECTOR properly. AFAIK this can cause crashes if you clear these without unlinking the actor in the process.

Β 

Β 

Β 

Share this post


Link to post

Okay, I think I finally understand what's going on in d_deh. The correct mapping for the first flag variable is here: https://github.com/kraflab/dsda-doom/blob/master/prboom2/src/d_deh.c#L1875

Β 

That's 32 bits and is the standard as far as I can tell. It's a mistake in the dsda-doom implementation that the wrong bit translation array is being used for the flag-related code pointers specifically, which can just be patched. Since that's a mistake in the port, the spec itself is correct.

Share this post


Link to post

Don't know if this is right place to post, but I think I found a bug in MBF21.Β  A_JumpIfTargetInSight doesn't seem to check if target is dead or not, the monster will continue firing at the corpse.Β  I've tried Dsda-Doom and Woof both have same behavior

Share this post


Link to post

I'm not sure I'd call it a bug so much as an unintended consequence. Maybe there's a workaround for this though? I don't know enough about all the code pointers available, but maybe @XaserΒ or someone else has an idea :^)

Share this post


Link to post

I can't give much advice without knowing exactly what it is you're trying to do with the codepointer -- it does just what it says on the tin.

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
×