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

Questions About TASing With DSDA-Doom

Recommended Posts

Forgive the ignorance but I'm new to TASing and am looking for some advice on a few random things with the DSDA-Doom TAS tools. I get the gist of using Build Mode and some aspects of the bruteforcing tools, but can't quite figure out what I should be looking into to accomplish what I want. Here's a few things I'm curious about:

 

1. Is there a way to bruteforce damage dealt TO the player? I see there are trackers and such for damage dealt BY the player, but not the reverse. I have a window of about 1-5 seconds in which I need to prevent damage to the player, or minimise it as much as possible.

 

2. Related to the above, what is the "RNG Index" value mentioned in the bruteforcing tool guide, and could I use this to manipulate enemy AI behaviour? I assume that it explains why no matter what sort of movement I make, the enemy wakeup time is always on the same tic; this only seems to change if I restart the demo from scratch.

 

3. Are you able to use the build mode to edit previously made (non-TAS) demos? When I open up one and enter build mode, nothing is altered and key states can't be restored because it's in playback mode or whatever. The TAS I want to make in question would be way easier to make if I can just manipulate the last few seconds of a demo I already recorded, but I can't figure out any way to edit the tics.

 

From what I understand XDRE bruteforcing tools should be able to accomplish what I want, however, as far as I read XDRE doesn't support -complevel 21 and that is the complevel I'm working with. I only have an ancillary understanding of Doom's nuts and bolts so sorry if all of this is obvious, I'm just hitting a bit of a wall. Any thread or other places with good info on using DSDA-Doom specifically for TASing would also be super helpful.

Share this post


Link to post
On 6/10/2023 at 2:47 AM, grapes said:

1. Is there a way to bruteforce damage dealt TO the player? I see there are trackers and such for damage dealt BY the player, but not the reverse. I have a window of about 1-5 seconds in which I need to prevent damage to the player, or minimise it as much as possible.

 

Currently there unfortunately is not. Kraflab has mentioned that adding a brute force check for whether the player possesses health at or exceeding a certain amount may be possible in the future, but this isn't currently implemented.

However, depending on the specifics of your circumstances brute forcing is probably not an advisable approach for trying to get an outcome spanning such a long time. Really it's impossible to say without knowing more about what you're doing, but as you add more and more inputs across more and more frames the amount of input combinations that need to be calculated just exponentially explodes. A few weeks ago I did a brute force across just 8 frames with reasonably small input ranges for each frame and that ended up having a little over 58 billion input combinations that needed to be tested. Even splitting up that brute force range across 32 individual brute forces ran in parallel it ended up taking almost 4 straight days, so it'd take roughly 4 months if you just ran that as the one brute force. That was for just 0.23 seconds of gameplay so brute forcing anything significant enough to realistically affect RNG across such a large amount of time probably isn't practical. Again it's hard to say without knowing exactly what you're doing but IMO it's a safe bet that, unfortunately, testing stuff out manually would be the way to go.

 

On 6/10/2023 at 2:47 AM, grapes said:

2. Related to the above, what is the "RNG Index" value mentioned in the bruteforcing tool guide, and could I use this to manipulate enemy AI behaviour? I assume that it explains why no matter what sort of movement I make, the enemy wakeup time is always on the same tic; this only seems to change if I restart the demo from scratch.


As a general primer on this you probably can't do better than watching decinos excellent video on the topic :) 

Knowing what the RNG Index is and being aware of how the game deals with RNG can be definitely useful, but attempting to manipulate the index to match a certain value isn't able to get enemies to do certain things, unfortunately. Lets say you're at 10.74 seconds, and the RNG index will equal 100 when gameplay reaches 11.00 seconds. There are many different things that could have happened between 10.74 and 11.00 seconds while still having the RNG index equal 100 at 11.00 seconds, and so there is a wide variance of things that could happen at or after 11.00 seconds. For example a shotgunner could be stunned, or walking, or shooting, or dead and the RNG index could still be 100 depending on what led up to that point, so getting an exact RNG index has fairly limited significance or usefulness.

As decinos video shows the game engine itself DOES think in terms of "I need something 'random' to happen, I'll look up the RNG index to choose what to do" so in this way it is deterministic of in-game outcomes, but we simply can't interact with the game in such a way as to reliably reproduce desired outcomes based on manipulating RNG to certain values. While "I want the RNG index to match X so Y outcome occurs on tic Z" would not be useful and so it isn't correct to think in terms of "X index = Y outcome", it's useful to be mindful of the fact that the RNG index is affecting everything all the time and everything is affecting it all the time, so you have a lot of options in terms of how to alter the games RNG, it'll just generally take a lot of manual work to work out how to get what you want to happen. 

There are exceptions to this regarding matching the index at the end of a map so it *starts* at certain values on the next map but that's a little outside the scope of your question. 

 

On 6/10/2023 at 2:47 AM, grapes said:

3. Are you able to use the build mode to edit previously made (non-TAS) demos? When I open up one and enter build mode, nothing is altered and key states can't be restored because it's in playback mode or whatever. The TAS I want to make in question would be way easier to make if I can just manipulate the last few seconds of a demo I already recorded, but I can't figure out any way to edit the tics.


I finally have good news for you, there is :) launch the game with "dsda-doom.exe -iwad doom2.wad -file YourWad.wad -complevel 2 -tas -recordfromto PreviouslyMadeDemo.lmp NewDemo.lmp". When the first demo finishes being played through, you take control and PreviouslyMakeDemo.lmp + whatever you do from that point gets turned into NewDemo.lmp.

You can also launch with the "-build" parameter to start the game up in build mode, but that means you'll need to skip through the existing tics of PreviouslyMadeDemo.lmp with the advance frame button. Instead, you can just hit the toggle build mode button at any point when the game is running. You can also launch with the "-skipsec x" parameter with x being the number of seconds to skip ahead if you don't feel like sitting through watching all of the first demo file.

Share this post


Link to post

Absolute legend. Thank you so much for taking all the time to pick over my queries! Brilliant information, all very useful even in the "bad news" cases. I kind of figured as much for point 1, and realised that I can get what I want done simply by (reasonable) trial and error of input combos instead. The RNG table stuff all makes sense and I did double check decino's vid on the subject when first poking around with the TAS tools. Mainly I was trying to find out whether you could manipulate the index number to essentially cancel a shot being taken at a certain point or just any way to manipulate the table to reduce or skip damage entirely. Specifically stopping several chaingunners from starting their barrage is/was my main goal, but, I think there are better ways to achieve it based on what you've said above.

 

The best bit of info was in fact giving me that string for manipulating a pre-existing demo! I loaded up my demo and manipulated only the last 4 seconds of it, and bam, I got an exit. Played around a little more and managed to shave a few tics off too, but just being able to mess around with the previous run was an absolute godsend for what I wanted. I've just posted my best exit in the TAS demos thread.

 

There's definitely more for me to learn about using the tools, but I accomplished what I wanted and feel fairly satisfied with that. I've got a better grip on things than I did before, so hopefully that should be enough for my various silly little demo ideas. Thanks again!

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

×