Psych0sis on 14/3/2018 at 02:37
Hey all, I know you all might not be the biggest fans of speedrunners for the games, but we're here. We enjoy playing the games differently than the intended "pure" way, its just fun and a nice change of pace (for me, at least).
There has always been one glitch that, so far, is Thief 2 only and called "Infinite Speed Potion". If you can't tell by the name, its just getting the speed effect from the potion, but permanently for the rest of the mission. Obviously this is a huge benefit to doing the missions quickly, and so far we've only been able to pinpoint it to 2 causes. Forgive me for some very basic paraphrasing, because I'm not very tech savvy so I barely get it myself. The first reason discovered was the script "TrigFlicker", it removed the potion timer since it apparently used a global timer script. On a quicksave/quickload, if you timed it right, the timer for the flicker object would be blank and if you consumed a potion real quick, it would fill in that blank, and since the script is set to "remove" the timer after a few seconds, depending on the rate, it will remove your potion's timer, letting it last forever. Again, I don't get it too well myself, and I'm kinda probably most likely messing that phrasing up, but just know they are the reason ;p.
The most recent discovery, literally made today ((
https://www.youtube.com/watch?v=vxqBfiwcCC4)), found that the timers for doors closing can also affect it. Basically at this point, to a simpleton like me, it'd most likely seem like it can happen with any object script that makes a global timer, or something to that effect.
So now, the purpose of this thread, was to ask for two things. One, what other scripting could this be abused with? Again, I'm no expert in dromed or just anything to do with coding basically, so please be gentle. But, for me personally, the more important question is, why wont any of these work in Thief 1? We tried, and found, the TrigFlicker scripts in thief 1/gold on MULTIPLE missions, but we couldn't recreate the glitch. The man who determined both scenarios for the glitch, whose video I linked just before, stated that the scripting changed between the games. Is this basically what it boils down to? I refuse to believe this is only possible in Thief 2 only. Any knowledge from the DromEd Wizards in here would be cool, and thanks for reading my looooooooooong thread.
Unna Oertdottir on 14/3/2018 at 09:22
This is the script on the speed potion
Quote:
SpeedPotion
gen.osm 1/G/2
Derives from EatFood in Thief 1/Gand TimedPotion in Thief 2. When activated by an Avatar, the player'sspeed will be multiplied by 1.75. The multiplier is removed whendeactivated. Thief 2 uses a multiplier named Speedy. Thief 1/G willadd the meta-property M-SpeedyPlayer and send the message Speedy tothe frobber.
In T2, the script derives from Timed Potion
Quote:
<dl> <dt>TimedPotion </dt><dd style="margin-bottom: 0.5cm"> gen.osm 2 </dd></dl>Handles the activation and deactivation of potions that persist for aperiod of time. This script doesn't do anything when the potion isactivated. On <code class="western">FrobInvEnd</code>, a duplicate ofthe object is created with <code class="western">Renderer\Has Refs</code>turned off. A <code class="western">ScriptParams</code> link withdata set to <code class="western">Potion</code> is created from thefrobber to the newly created object. If the frobber already has a<code class="western">ScriptParams</code> link with data <code class="western">Potion</code>to an object that has the same <code class="western">EngineFeatures\Combine Type</code> as this object, then no new object iscreated and the already linked-to object is used. The cloned objectis then sent a <code class="western">StartPotion</code> message. Whenthe script receives <code class="western">StartPotion</code>, it willactivate the potion then set a <code class="western">Timer</code>with the name <code class="western">PreEndPotion</code>. The time isspecified in the <code class="western">Script\Timing</code> propertyas milliseconds, and defaults to 8600. The time must be at least 1000milliseconds. When the <code class="western">Timer</code> expires, anenvironmental schema with tag <code class="western">Event Deactivate</code>is played. If the original frobber was <code class="western">Player</code>,the schema is played as an ambient sound. The potion will bedeactivated 1 second later, and the cloned object destroyed. The<code class="western">Timer</code> is reset for every <code class="western">StartPotion</code>message. If, on <code class="western">BeginScript</code>, the objectis currently contained by an AI, then the meta-property <code class="western">M-QuaffHeal</code>will be added to the container.
in T1/TG it derives from EatFood
Quote:
<dl> <dt>EatFood </dt><dd style="margin-bottom: 0.5cm"> gen.osm 1/G/2 </dd></dl>On <code class="western">FrobInvEnd</code>, plays an environmentalschema with the <code class="western">Event Activate</code> tag. Ifthe object was frobbed by the player, the schema is played with theambient option.
Both are adding the script SpeedyPlayer /the metaproperty M-SpeedyPlayer
Quote:
<dl> <dt>SpeedyPlayer </dt><dd style="margin-bottom: 0.5cm"> gen.osm 1/G </dd></dl>Multiplies the player's speed by 1.75 when the message <code class="western">Speedy</code>is received. The multiplier will be removed 8.6 seconds later, aswell as the meta-property <code class="western">M-SpeedyPlayer</code>.The delay is reset each time the message is received.
According to this, the SpeedyPlayer script doesn't exist in T2 (but it's on the metaproperty M-SpeedyPlayer :confused: )
However, T2 is using a different timing on speed potions than T1/TG. Since T2 uses the <code class="western">Script\Timing</code> property, any other <code class="western">Script\Timing</code> property on doors or something might interfere - just a guess.
How does it work in T1/TG? I don't know. Maybe drinking a health potion and a speed potion (or the other way around) right after this might interfere in the timing process.
Please upload a savegame with that bug enabled. Note the T2 version (Olddark, NewDark, product version of Thief2.exe)
Psych0sis on 14/3/2018 at 17:12
Interesting, so the scripting for the buffs is different between the games at a very basic level. I'll try to see if I can create a scenario in 1/gold to get rid of the timer with various EatFood items or just some other tinkering, but from what I'm gathering in your post, if its only activated by EatFood and is it's own private timer, it might be very difficult if not impossible.
(
https://drive.google.com/file/d/1Hr-G-wd_vAw1G7vFc6henpu4f9ry3203/view?usp=sharing)
There's a saved game file on Soulforge with the glitch enabled. It's on 1.23 newdark. It's been known to work on most versions anyone of us runs, be it 1.21 or 1.23 or even 1.18 and 1.25. If you also want to just test it yourself, follow what is done in this video here ((
https://youtu.be/IJxt44DLU-8?t=9)). You just basically quicksave/quickload right as he finishes up saying "not?" and just eating a speed potion as soon as you can when you get back in. The timing is a little sensitive, so don't worry if you missed it, just try it a couple times, its not hard.
Grandmauden on 14/3/2018 at 17:40
Don't know if it'll make any difference, but I've also got a save file of Sabotage at Soulforge with the glitch active from a few years back (NewDark v1.23).
(
https://drive.google.com/file/d/12UJ_BADc4AvU8hnFuhERhOjpAKm7LQYc/view?usp=sharing) Download link
As I recall, I had just triggered the signal tower above the turret production room and taken the elevator back down. Rather than deal with the turrets any more, I chose to drink both a speed potion and an invisibility potion so I could make a break for the exit (and pick up all the items on the tables, because I'm a kleptomaniac). The invisibility potion wore off as normal, but the speed potion did not.
Unna Oertdottir on 14/3/2018 at 18:01
Thanks, Psych0sis. I loaded the savegame in DromEd.
I can't see the reason for this glitch.
I can see a ScriptParams link to a speed potion was added, Data: Potion
Which lasts forever. Did you enable it with the door trick? There's no script timing on the doors.
skacky on 14/3/2018 at 18:05
Psych0sis used the FlickerTrigger object to do it in Soulforge. There are 6 of them scattered in the mission, including one at the very start.
I looked around in TDP/Gold missions for the FlickerTrigger objects and found some in Cragscleft, Bonehoard, Assassins and The Lost City. For now nobody has been able to reproduce the Infinite Speed Potion bug in TDP/Gold.
Psych0sis on 14/3/2018 at 18:54
Quote Posted by skacky
Psych0sis used the FlickerTrigger object to do it in Soulforge. There are 6 of them scattered in the mission, including one at the very start.
I looked around in TDP/Gold missions for the FlickerTrigger objects and found some in Cragscleft, Bonehoard, Assassins and The Lost City. For now nobody has been able to reproduce the Infinite Speed Potion bug in TDP/Gold.
What he said. From what we assume, trigflickers operate on a global timer as well. This is a VERY basic impression personally, but it seems saving and loading messes with the timers in the game's code. Perhaps for a split second, the timer for the Flicker is empty, and using the speed potion fills that gap. The script then, like it's supposed to, removes a timer to "shut off" its effect, but it's empty, so it just grabs any timer out there, which in this case is the speedpotion. This is probably all wrong by the way, its a very VERY general guess I've come up with really. Feel free to tell me why I'm wrong, cause I most likely am.
Quote Posted by Grandmauden
Don't know if it'll make any difference, but I've also got a save file of Sabotage at Soulforge with the glitch active from a few years back (NewDark v1.23).
(
https://drive.google.com/file/d/12UJ_BADc4AvU8hnFuhERhOjpAKm7LQYc/view?usp=sharing) Download link
As I recall, I had just triggered the signal tower above the turret production room and taken the elevator back down. Rather than deal with the turrets any more, I chose to drink both a speed potion and an invisibility potion so I could make a break for the exit (and pick up all the items on the tables, because I'm a kleptomaniac). The invisibility potion wore off as normal, but the speed potion did not.
Yeah, this was most likely done nearby another one of these "TrigFlickers". Like skacky said, there's 6 of them in the level. It seems save/loading in general, at any point in range of them, enables the glitch. You don't even have to drink the potion as soon as you load in either, oddly enough. One guy was able to get the potion glitch after consuming it a pretty long time after his load, (
https://www.twitch.tv/videos/23054145) link, so it's still a mystery how it works. Also, for the invisibility potion, it seems the game checks visibility in its code every couple of seconds or something, drinking the potion just delays the check until another timer runs out. It's probably still theoretically possible to probably get infinite invisibility, but the check makes it a toughie.
Psych0sis on 14/3/2018 at 19:09
Also, sorry for double posting, but I was just curious if maybe someone could recreate Soulforge's first room scenario in a thief 1 FM map. Just a basic room with a trigflicker set to 4000 rate really. It probably won't work given what you said about the way the timers are started etc, but it'd probably be a really easy scenario to create, just for the sake of ruling that out completely.
Xmodule999 on 15/3/2018 at 07:50
Is possible to replicate speedpotion bug in missions Casing the Joint and Sabotage at Soulforge. Any other missions?
Psych0sis on 15/3/2018 at 10:39
Quote Posted by Xmodule999
Is possible to replicate speedpotion bug in missions Casing the Joint and Sabotage at Soulforge. Any other missions?
I'd imagine, at the bare minimum, it'd be possible on Masks, Life of the Party, Kidnapping and maybe Precious Cargo. I checked Eavesdropping and for the most part the door scripting doesn't seem to be present on any of the doors.
But I'm sure you'd manage to find a way to edit the map files like you always have and find a way to do it. "Knowledge only for me".