Jump to content

Community Project: Fluid Dynamics: A Crash Course On Doom's Liquids!


Recommended Posts

What a interesting course Mr professor, but I'm not sure if i can participate in this lesson, i have too much other stuff to follow! But i wish you and everyone wants to join this course good luck for it!

Share this post


Link to post

What an interesting subject! I would love to enroll on a class, i'll take the second seat!

Share this post


Link to post

It is good to learn, and to keep learning.

 

Taking Seat 11.

Share this post


Link to post

I'm intrigued.

 

You can slap me down into a random seat, if that's at all possible.

Share this post


Link to post

Hi, this looks like a pretty cool course!

 

However I can't help but notice that the way you are handling the liquid scripts could be done in a much more efficient and uhh easier on the students kind of way.

 

Instead of each participant slapping scripts and placing sector actions and effects by hand on each of their levels and sectors, a much less error-prone method would be to use a globally loaded ACS library as a resource. This way each mapper only needs to select the correct texture/flat, and the rest is taken care of by the ACS library.

 

I've attached a wad that does just this, feel free to use it for the project, if you like it. (or for any other purpose)

 

This ACS library approach also has the advantage that if something needs to be changed with regards to how the liquids behave, it can just be adjusted in the ACS library script, and every single map does not need to have their map scripts updated for it.

 

Also I noticed that the scripts you provided will for the most part break in multiplayer. The ACS library I made is multiplayer compatible, which I'm sure isn't the focus of this project, but having it compatible also probably doesn't hurt either way.


Edit: Also using the "Actor enters sector" and "Actor leaves sector" things, as in your example map, has the potential issue that the liquid effect gets activated even if the player is not touching the surface, for example if they are somewhere up high on a ledge, but have the middle of their hitbox on the liquid sector, thus "entering" it.

Edit2: Added a new version below that fixes an oversight in the state system and adds support for non-solid 3d floors & full sector height fluids.

Edit3: Yet another version that fixes the fireblu invisibility expiring over time.


fluidlib-v3.zip
 

On 12/14/2021 at 5:24 AM, Alfredo said:

4. Target port is GZDOOM or similar port that supports ZScript. Mapping format is UDMF.

 

Since you mention ZScript in particular, does that mean that mappers can use it outside of custom monsters?

 

Edited by Worst
improved and fixed version added

Share this post


Link to post
10 hours ago, MFG38 said:

I'm intrigued.

 

You can slap me down into a random seat, if that's at all possible.

Slapped you down in slot 29! (Rolled a dice to decide.)

4 hours ago, Worst said:

Instead of each participant slapping scripts and placing sector actions and effects by hand on each of their levels and sectors, a much less error-prone method would be to use a globally loaded ACS library as a resource. This way each mapper only needs to select the correct texture/flat, and the rest is taken care of by the ACS library.

 

I've attached a wad that does just this, feel free to use it for the project, if you like it. (or for any other purpose)

 

This is awesome! Thank you so much for compiling the scripts like this. I had heard about this method, but never actually looked into it when making these scripts a while back. This is super cool. I definitely think this is better than the way I was doing it. I'll be updating the OP to include the wad and how to use it.

 

For those looking at this post. Using the Fluidlib.wad is very easy. Simply load it as a resource when creating your map, and the fluid properties will automatically apply depending on the texture. 

 

Again. Thank you very much Worst!

 

4 hours ago, Worst said:

Since you mention ZScript in particular, does that mean that mappers can use it outside of custom monsters?

 

Not sure what you're asking about here. Do you mean using Zscript to create custom monsters?

 

Edited by Alfredo

Share this post


Link to post
13 hours ago, Alfredo said:

Slapped you down in slot 29!

 

Sounds good. A suitable slot for the idea I have. c:

Share this post


Link to post

I have made a new version of the FluidLib ACS library, which fixes a little oversight in the fluid state system, which allowed you to keep the fluid effect if you were very quick on your feet. I also realized that it didn't work in all scenarios, for example when using a non-solid 3d floor or with underwater tunnels that don't have any liquid textures in them. This new version makes such setups possible too, though they require using a custom UDMF sector text property "user_fluid" that should match the fluid name. For non-solid 3d floors it needs to be set in the control sector. For underwater, etc. the sector itself needs to use the same "user_fluid" custom UDMF sector text property.


fluidlib-v2.zip fluidlib-v3.zip

 

On 12/16/2021 at 2:45 AM, Alfredo said:

Not sure what you're asking about here. Do you mean using Zscript to create custom monsters?

 

 

Nah I actually meant the opposite of that. Since the rules don't allow custom monsters, I was basically just wondering if using ZScript was instead allowed for other purposes? If you wanna keep it simple, you can of course just not allow it in any capacity.

 

Edited by Worst
Added new version

Share this post


Link to post
17 minutes ago, Worst said:

I have made a new version of the FluidLib ACS library, which fixes a little oversight in the fluid state system, which allowed you to keep the fluid effect if you were very quick on your feet. I also realized that it didn't work in all scenarios, for example when using a non-solid 3d floor or with underwater tunnels that don't have any liquid textures in them. This new version makes such setups possible too, though they require using a custom UDMF sector text property "user_fluid" that should match the fluid name. For non-solid 3d floors it needs to be set in the control sector. For underwater, etc. the sector itself needs to use the same "user_fluid" custom UDMF sector text property.


fluidlib-v2.zip

 

I hadn't considered 3D floors for usage beyond building more complex level geometry. I'm sure someone will be happy they can apply the effects there.

 

17 minutes ago, Worst said:

Nah I actually meant the opposite of that. Since the rules don't allow custom monsters, I was basically just wondering if using ZScript was instead allowed for other purposes? If you wanna keep it simple, you can of course just not allow it in any capacity.

 

Utilizing Zscript is permitted, I use it all the time to for kill triggers and more complex fight setups. So long as you aren't violating the rules or doing something that'll cause performance issues. I don't see a problem with using Zscript. Just don't alter the existing properties of the liquids or create new ones.

Share this post


Link to post
3 minutes ago, myolden said:

Wow, this is a cool concept. Throw my name down wherever you (or a RNG of your choice) decide.

The Dice have chosen. You shall be slot 6!

Share this post


Link to post
On 12/17/2021 at 2:51 AM, Alfredo said:

Utilizing Zscript is permitted, I use it all the time to for kill triggers and more complex fight setups.

Oh that sounds interesting. I'd think that regular old ACS would be enough for kill triggers, but since I haven't used Zscript too much, it's likely that I'm just unfamiliar of its advantages in those setups.

 

Share this post


Link to post

Thanks for adding me Alfredo, and a merry christmas to you and the other mappers! I was busy with the resources yesterday, and found some interesting things about fireblu. the player does not need to be standing still in fireblu to be invis, however, there seems to be a limited time in which the player will be invis for, and after awhile, they will no longer be invisible and will have to leave and return to the sector to reactivate it. Not sure if its intentional or not but something for mappers to keep in mind probably?

 

Share this post


Link to post
8 hours ago, Womp the Cat said:

Thanks for adding me Alfredo, and a merry christmas to you and the other mappers! I was busy with the resources yesterday, and found some interesting things about fireblu. the player does not need to be standing still in fireblu to be invis, however, there seems to be a limited time in which the player will be invis for, and after awhile, they will no longer be invisible and will have to leave and return to the sector to reactivate it. Not sure if its intentional or not but something for mappers to keep in mind probably?

 

So I went back in and tested this myself and it seems that Invis is the only fluid that has a timer associated with the application of its effects. Perhaps this is because of the way the powerup is applied in the script?

 

I don't think its too huge of an issue, so long as you aren't forcing the player to remain in the fireblu for longer than the powerup's duration. I genuinely never noticed the time limit when I made a map for these fluids originally. The timer oddly enough does not apply to the Invuln slime.

Share this post


Link to post
33 minutes ago, Alfredo said:

So I went back in and tested this myself and it seems that Invis is the only fluid that has a timer associated with the application of its effects. Perhaps this is because of the way the powerup is applied in the script?

I went ahead and did some investigation on this as well. Turns out that the function being used for the invisibility effect is basically equivalent of giving the invisibility powerup to the player. I had not realized this before.

 

So basically this line of code:

SetPlayerProperty(0, ON, PROP_INVISIBILITY);

Is the same as doing the following:

GiveInventory("PowerInvisibility", 1);

And PowerInvisibility has the original built-in duration of 1 minute, so it doesn't last forever because the effect is only applied when first entering/touching the liquid.

 

44 minutes ago, Alfredo said:

I genuinely never noticed the time limit when I made a map for these fluids originally. The timer oddly enough does not apply to the Invuln slime.

If you tested with the fluidlib, then yeah it does not apply a timer, since I took a slightly different approach from your original liquids.wad, and assigned the player the invulnerability status using SetActorProperty(0, APROP_Invulnerable, ON) instead, which does not have a timer to it.

 

53 minutes ago, Alfredo said:

I don't think its too huge of an issue, so long as you aren't forcing the player to remain in the fireblu for longer than the powerup's duration.

I think the invisibility effect could be made infinite by making a new powerup type in ZScript or Decorate that has an infinite value set for the Powerup.Duration property. And then adjusting the fluidlib to give this new type of invisibility powerup instead.

 

In my opinion changing the effect to be infinite would be more logical, since the player is not just grabbing a single sphere, but rather will be wading knee-deep in the liquid, so I think it would be logical for the effect to last as long as the player is in there.

 

I don't mind updating the fluid library wad, so that the invisibility effect is infinite (while in fireblu liquid). Or even instead make both the invis and invulnerability time limited like picking up the original powerups (But imo that doesn't entirely make sense in this setting). Of course, @Alfredo this is your decision to make here :)

Share this post


Link to post
4 minutes ago, Worst said:

I don't mind updating the fluid library wad, so that the invisibility effect is infinite (while in fireblu liquid). Or even instead make both the invis and invulnerability time limited like picking up the original powerups (But imo that doesn't entirely make sense in this setting). Of course, @Alfredo this is your decision to make here :)

It'd definitely make more sense for each powerup to be infinite while standing in the fluid. If you don't mind making the changes then please do so. :)

 

I'll update the OP accordingly when its ready.

 

Thank you very much!

Share this post


Link to post

Alright, here's the updated version of the FluidLib ACS library, where the invisibility effect no longer expires over time.

Spoiler

Technically it still expires because the engine doesn't support infinite durations for powerups, but the duration has been set long enough, that it would take roughly two years in-game for it to expire. It's extremely unlikely that anyone would spend two years of real time standing in the liquid without exiting the liquid or the map...


fluidlib-v3.zip

Share this post


Link to post
9 hours ago, Worst said:

Alright, here's the updated version of the FluidLib ACS library, where the invisibility effect no longer expires over time.

  Reveal hidden contents

Technically it still expires because the engine doesn't support infinite durations for powerups, but the duration has been set long enough, that it would take roughly two years in-game for it to expire. It's extremely unlikely that anyone would spend two years of real time standing in the liquid without exiting the liquid or the map...


fluidlib-v3.zip

It has been done.

 

Thanks for all the support! :)

Share this post


Link to post

Hey folks! I've gotten to a point where I could do with some external feedback and playtesting. I have added 2 skies, and a new midi to the map, it's already in slot 16. so you will have to idclev there. I've also added one basic dialogue script, but can remove it if it conflicts with the rules of the project. I have not implemented difficulties yet, because I wanted to see how others found the gameplay first. I've had alot of fun with this. thanks for the opportunity. 

 (most recent version)

 

I have only tested it in GZDoom 4.4.2. when I try to run it in Prboom or Glboom I get this error

(p_setuplevel level wad structure is incomplete. there is no ML_Nodes Lump)

 

Which I believe has to do with the nodes not building properly, but it's beyond my expertise at this point on how to fix this? it works with Gzdoom though. so Idk. 

 

 Just updating this with v3 of my map, still needs a bit of detailing, but otherwise the combat feels good, and I have now implemented all difficulty settings. 

Can't escape the painted skyv03.rar

Edited by Womp the Cat
changed the zipfile to the latest version of the map

Share this post


Link to post
5 hours ago, Womp the Cat said:

I have only tested it in GZDoom 4.4.2. when I try to run it in Prboom or Glboom I get this error

(p_setuplevel level wad structure is incomplete. there is no ML_Nodes Lump)

 

I'd wager a guess that's because you're trying to run a GZDoom map in a port that doesn't support GZDoom features.

Share this post


Link to post
1 minute ago, MFG38 said:

 

I'd wager a guess that's because you're trying to run a GZDoom map in a port that doesn't support GZDoom features.

Lol yup that would do it, sorry, i dont use prboom, but thought it would be a good idea to test on a few ports.

 also, there was some funky mid textures in the one room which I have now fixed. Can't escape the painted sky v02.zip

Share this post


Link to post
  • 1 month later...

Hi everyone. Hope you've all had a good year so far. I apologize for not posting more frequent updates. I've been a tad busy with work at the office and with other things. 

 

That aside. I have begun working on the opening map: Vile Lecture. 


Its a bit bare bones at the moment, but I should have something playable sometime later. 

 

Spoiler

unknown.png

 

unknown.png

 

Hope everyone's having fun with this concept. Can't wait to see what everyone comes up with!

 

Signups are still wide open until March 18th! If you're interested at all. Feel free to take a slot!

 

Thank you!

 

-Alfredo

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...