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

What source ports allow you to trigger all linedefs at once? (apart from crispy)

Recommended Posts

This is a feature I've always wanted for when you can't figure out how to open a certain door or get past a certain obstacle.  I'm hoping that some boom or zdoom ports have it so I'm not stuck with limiting removing crispy for frustration-free dooming.

Share this post


Link to post

I don't think such a feature would result in frustration-free play since a map can depend on the order in which switches are hit. (I suppose teleport and exit lines should be excluded from global activation, too. Otherwise it's kind of moot if you activate the exit this way, could as well just idclev away.)

 

 

Here's a simple example map. It should work in Crispy, so feel free to see what happens when you activate all linedefs at once. I figure only the first part of the bridge will raise.

inorder.zip

Share this post


Link to post
22 minutes ago, Gez said:

I don't think such a feature would result in frustration-free play since a map can depend on the order in which switches are hit. (I suppose teleport and exit lines should be excluded from global activation, too. Otherwise it's kind of moot if you activate the exit this way, could as well just idclev away.)

 

 

Here's a simple example map. It should work in Crispy, so feel free to see what happens when you activate all linedefs at once. I figure only the first part of the bridge will raise.

inorder.zip

Correct, though it certainly helped me in some iwad maps.

Share this post


Link to post

I think it should be possible to write something up in ZScript to let you do this in ZDoom-based ports, including triggering the specials of actors as well, though it is something that could easily result in unwanted teleportation and level ending due to the fact that you can't exactly check if a line / actor's special will execute a script that'll perform those actions.

Share this post


Link to post

In KBDoom I added an "open door" cheat, specifically for playing non-Coop maps in Coop, like when a player enters a room, the door closes behind the player, then the player dies. This cheat (which is transmitted to all nodes on the network) can re-open the door, without having to no-clip. Unfortunately, the concept of "open" means different things in different maps. Imagine a bridge that collapses after one player crosses it. How would a cheat fix that, short of no-clipping?

 

What you really need is a "put this portion of the map back the way it was" cheat, but that's crazy complicated!

Share this post


Link to post

How does this feature affect demo compatibility? Is it something that's turned off during netgames and/or demo recordings?

Share this post


Link to post
50 minutes ago, Danfun64 said:

How does this feature affect demo compatibility? Is it something that's turned off during netgames and/or demo recordings?

In KBDoom, cheats are optionally allowed in netgames, and are properly stored in KBDoom demo recordings. Cheats (and menu options) are propagated to all nodes, and toggles are synchronized. It's kinda cool, let me explain:

  • When a netgame starts, all options that affect demo sync are sent from Player 1 to all other nodes, ensuring that the game starts in sync.
  • Within the game, if a menu option is changed, the change is sent to all nodes. (If Player 1 is in the same menu as Player 2, and Player 2 toggles an option, Player 1 sees the menu change in real-time).
  • For noclip (and all other boolean cheats): The noclip cheat is sent to all clients. Each client knows the noclip state of all other clients. Then the following logic is performed:
// When someone types "noclip"
if (any player in the game is noclipping)
{
    Turn noclip OFF for everyone;
}

else
{
    Turn noclip ON for everyone;
}

This logic ensures that the game stays in sync for everyone, and everyone gets the same abilities at the same time, so fairness is preserved. In addition, a message pops up for everyone, letting you know that someone turned a cheat on or off. What's cool is that, if 1 player dies while everyone was noclipping, type noclip once, and everyone is at the same state. Type noclip twice, and everyone is noclipping again! So, it's consistent, and fair.

 

The KBDoom "opendoor" cheat was a 10-minute hack job, but it essentially works in a similar fashion: The cheat is sent to all nodes which sets a game-wide bool "door_hack_cheat". From that point on, the first player to try to open something hits this code:

int PTR_UseTraverse (intercept_t *in)
{
    if (door_hack_cheat)
    {
        if (in->d.line->backsector && in->d.line->backsector->ceilingheight == in->d.line->backsector->floorheight)
        {
            in->d.line->special = 31;
            in->d.line->flags |= ML_PASSUSE;
            door_hack_cheat = 0;
        }
    }
    ...
}

It's not the greatest cheat. It only does minimal checking, and it treats everything like a door! It's basically a cleaner-than-noclip way to get honest coop players past a single-shot door-like obstruction. In actual use, it seems to be helpful about 50% of the time. I'd love to work out a much-smarter cheat that can handle a wide variety of coop-unfriendly situations. Problem is, it's not so easy to know what is needed in every situation!

 

 

 

 

Edited by kb1

Share this post


Link to post

@kb1 I can't wait for the day that your source port has a public release!

 

(No sarcasm, I just think it, and you, are cool)!

Share this post


Link to post

@kb1 thanks for your answer, but when I was asking my question I meant specifically for Crispy, as that was the thread discussed in the title.

Share this post


Link to post
1 hour ago, StevenC21 said:

@kb1 I can't wait for the day that your source port has a public release!

 

(No sarcasm, I just think it, and you, are cool)!

Thanks, StevenC21! That's a very nice thing to say, and it goes far towards motivating me to tighten up and get on the ball!

 

 

1 hour ago, Danfun64 said:

@kb1 thanks for your answer, but when I was asking my question I meant specifically for Crispy, as that was the thread discussed in the title.

Oops, sorry about that. Your question was placed right below my post, and it really seemed like it was directed towards me. I guess I should have noticed that your question was over a month after my post!

 

For going off topic, I suppose I should attempt to answer:

From what I can read of the above linked Crispy st_stuff.c, you must be in single player mode for the "spechits" cheat to work, otherwise you get the HUD message "Cheater!" (which is funny - heh).

 

I don't see anything in st_stuff.c preventing its use while recording, but I'm no authority on Crispy's source. If allowed, the cheat would, of course, have to be recorded, and executed on playback, to avoid a desync.

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
×