invictius Posted January 30, 2018 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. 0 Share this post Link to post
Gez Posted January 30, 2018 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 0 Share this post Link to post
invictius Posted January 30, 2018 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. 0 Share this post Link to post
fabian Posted January 30, 2018 4 hours ago, Gez said: (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.) Yes, of course it is like that: https://github.com/fabiangreffrath/crispy-doom/blob/master/src/doom/st_stuff.c#L512 0 Share this post Link to post
Arctangent Posted January 30, 2018 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. 0 Share this post Link to post
kb1 Posted January 30, 2018 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! 0 Share this post Link to post
Danfun64 Posted March 9, 2018 (edited) How does this feature affect demo compatibility? Is it something that's turned off during netgames and/or demo recordings? 0 Share this post Link to post
kb1 Posted March 9, 2018 (edited) 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 March 9, 2018 by kb1 0 Share this post Link to post
kb1 Posted March 9, 2018 On 1/30/2018 at 1:10 PM, fabian said: Yes, of course it is like that: https://github.com/fabiangreffrath/crispy-doom/blob/master/src/doom/st_stuff.c#L512 (Sorry dbl post) Whoa, some nice cheat code there! I'm going to have to check this out in detail - good stuff! 1 Share this post Link to post
StevenC21 Posted March 9, 2018 @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)! 0 Share this post Link to post
Danfun64 Posted March 9, 2018 @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. 0 Share this post Link to post
kb1 Posted March 10, 2018 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. 1 Share this post Link to post
Danfun64 Posted March 10, 2018 It's a cheat code. Gotcha. Also, didn't realize I bumped a month old thread. Sorry! 0 Share this post Link to post