So last night, I was having a lot of difficulty sleeping, when a completely insane idea for a kind of custom/scripted puzzle came to me.
To begin to explain, I want to refer you to
The Mushroom Engine. It's basically like playing Mario, but reversed in time, so you start out after beating bowser and need to regress time backwards screen by screen, un-killing every enemy and un-collecting every coin.
So, yes, the idea I had was basically to replicate that concept in DROD. I think we could call it "
Death Of Rooms Deadly"
, or DORD for short. In DORD, Beethro begins at the top of the exit stairs of the level, and in each room he must un-kill all of the monsters to un-open all of the green and blue doors (and un-close the ones that started open), and eventually make his way backwards to the level entrance tile. The threat clock goes backwards, and everything walks backwards because it's un-walking. And if at any point something un-happens that isn't valid, such as a roach having nowhere to "
go backwards"
to and nothing blocking it from moving forward, Beethro has failed and must re-un-do things from the next turn backwards again. I'm thinking you could indicate where each monster needs to be un-killed by putting a "
ghost"
of the monster there, which revives when Beethro's sword is on it and starts un-moving like its respective monster. Maybe the premise is that Beethro is mentally retracing his steps because he dropped his wallet in that last dungeon somewhere.
Of course, the reason I'm writing a thread about this instead of trying to actually script it is because it's probably a monumentally hard task. One of the main issues is ambiguity: For example, if a roach is sliding against a wall this turn, did it move diagonally next to the wall on the previous turn or was it also sliding on the wall
that turn? Or, if Beethro un-presses an orb that's supposed to open a door, was that door closed before or already open. My inclination to handle this problem is to assume that Beethro did everything "
efficiently"
. So: He wouldn't have pressed that orb unless the door was still shut; the roach is always sliding along the wall unless it's perpendicular to Beethro or has nowhere to have come from to keep sliding.
Let's just have a think about how possible a few things are for this concept:
Click here to view the secret text
×Roach: Maybe posssible?
There are definitely some things to figure out, but it's not hard for me to imagine that someone with a good understanding of how roaches move could script something that acts like a roach going backwards, resolving various ambiguities along the way. I think the toughest thing to script here (and maybe in general) would be figuring out whether a roach had a valid place to come from on the previous turn when Beethro un-moves, to determine whether the situation is valid to rewind from.
Roach Queen: Hard
In addition to needing to figure out how a queen will "un-run-away" from Beethro, you also need to code something which, whenever the backwards threat clock reads 5, checks each valid spawnable tile around the queen for a roach so it can be unborn into an egg and then unspawned from the queen when the clock reads 0/30.
Orbs/pressure plates/doors/arrows: Possible with restrictions
Toggle behavior is really simple since toggling is the same forward as backward. It should also be really easy to script things so that a displayed "Open" or "Close" connection un-does that, "Closing" or "Opening" the door or arrows respectively. However, cracked orbs and single-use plates are a problem, and on-off plates have some processing order weirdness that I'm not sure how you would deal with. But regular orbs and multi-use plates should be easy enough, overall. And..probably don't connect more than one thing to a given door or arrow, unless they're all set to "toggle", to avoid confusion. Finally, if Beethro tries to un-open or un-close a door that he already un-opened or un-closed, that's a failed backstep and needs to be redone.
Brain: Trivial/ULTRA-IMPOSSIBLE
If you just want brains in the room with no other monsters, this is probably the easiest thing to code. But you can pretty much forget about making brained roaches and stuff un-move, I think.
Wraithw--HA HA HA are you kidding me?!
I can't even imagine trying to implement their weird "check for fellow wraithwings" behavior backwards in time. Maybe if there's only one in the room, though.
Snakes: Ultra super nightmare impossible
Even assuming that you manage to crib DF's code for the Hydras to get custom snakes that look like real snakes but move backwards, how do you even begin to run snake movement behavior in reverse? Much less make these things "un-shrink" under the right conditions. Every red snake would need to be taken out of "ghost mode" by blocking it in, I guess, which requires some checking to figure out...ugh.
Tarstuff: Nope/Maybe
I don't know how you would do "un-cutting" tarstuff or "un-growing" it, but if all you want is tarstuff babies, that seems easy enough. Just adapt the roach code for mud and tar, and modify it some for gel to imitate un-doing the usually "stuck on diagonals" behavior.
Rock Golems: Maybe Possible?
Same thing as gel babies above as far as movement goes. And instead of a ghost, these should have a thing that looks like a rock pile that you need to un-kill. There might also be rock-pile ghosts that need to somehow be un-exploded, but then you come to an ambiguity problem where it's not clear whether the explosion destroyed an already-dead golem or a live one. Also I don't know how you "unexplode" a bomb in the first place.
Constructs: I dunno...
Similar to rock golems in implementing their "corpses"; require a whole new movement ruleset; plus you need to somehow make them imitate revival behavior in reverse time. I guess if a construct pile is around on turn 30 and the room has been un-cleared, then the player must un-stab it during the next 30 turns so that it can have revived...or something like that. Thinking about it threatens to make my head hurt.
Slayer: OH PLEASE NO
Decoys/Clones/Mimics: Very hard/plausible/Unsure
If it's not pre-placed, then you need some way for Beethro to "un-drink" a potion ghost into an actual potion. Then you need all the monsters to respect the potion as an obstacle in their "un-movement". A pre-placed clone seems the most likely doable thing, along with a designated tile that the clone must have "started" on. Decoys sound like a nightmare to code since everything has to properly react to their presence; I'm not exactly sure how you would make mimics work either.
So...Overall, I think the idea
could work with some very clever scripting and a fairly limited toolset. But I don't feel like trying to make it work myself, because there's definitely some madness incumbent in trying to script it.
____________________________
109th Skywatcher
Here are some links to Things!
Click here to view the secret text
[Last edited by Xindaris at 04-10-2021 05:13 PM]