Post subject: Making a TAS-proof game
Joined: 8/28/2006
Posts: 50
Let's say you were a developer of a game and you wanted to make it difficult to make a TAS of the game. How would you do it? Assume that you're making a longer game like an RPG or Metroid. I think the most evil thing you can do, particularly in RPGs, is initialize a stream cipher at startup with the controller entropy during the title screen, and never add entropy again. Have that be the source of random numbers for some important feature, such as the encountered monsters in an area. Save the cipher state to the save file. Although memory is the obvious problem, you could initialize several stream ciphers at once, one for each type of random number generated. This prevents manipulation by having the same random number interpreted in a different context - otherwise a TAS maker could do something dumb to "waste" that number so as to set up a good round next. Another big one is to extensively debug the movement systems at a frame level. This would have stopped a lot of the Super Metroid tricks, and skipping Celes in FF6. I would also add assertions to the game that display an error message and freeze the game if a sequence break is detected. Preventing all possible sequence breaks is difficult, so you might as well nullify the ones that occur. (Of course, this is only true if sequence breaking is not intended to be allowed.)
Joined: 8/27/2006
Posts: 883
Error message is not a good thing, but you could try to stop gamer, but good luck, that would require so much time that it's not worth it.
Player (206)
Joined: 5/29/2004
Posts: 5712
If you could actually somehow detect a sequence break, then it wouldn't be a sequence break anymore, because the game would simply stop the player or throw the player backwards back onto sequence. No need to freeze the game for something that might have happened by accident anyway. I bet the programming for it would bog the game down and be full of holes anyway, though. "Should the player be able to get there from here? Okay, how about there from here? Okay, how about there?" And then the player gets frustrated when the sequence break detector goes overboard, prevents a legal move, and possibly even traps the player.
put yourself in my rocketpack if that poochie is one outrageous dude
Editor, Active player (297)
Joined: 3/8/2004
Posts: 7469
Location: Arzareth
Myria wrote:
Let's say you were a developer of a game and you wanted to make it difficult to make a TAS of the game.
Create a myriad of options that are difficult to compare. Lots of routes, lots of items that affect everything, and randomness that is tied to at least last 5 minutes of action instead of last 5 seconds or last 5 frames. The randomness tends to annoy though, but a myriad of options may make a challenge that requires significant resources to beat.
Former player
Joined: 3/8/2004
Posts: 706
I'd make my game boring as hell so that nobody would bother TASing it in the first place.
Post subject: Re: Making a TAS-proof game
Senior Moderator
Joined: 8/4/2005
Posts: 5777
Location: Away
Bisqwit wrote:
Create a myriad of options that are difficult to compare. Lots of routes, lots of items that affect everything, and randomness that is tied to at least last 5 minutes of action instead of last 5 seconds or last 5 frames.
King's Bounty. >_>
Warp wrote:
Edit: I think I understand now: It's my avatar, isn't it? It makes me look angry.
Player (206)
Joined: 5/29/2004
Posts: 5712
Oh, there's a good thought: Don't put the ending of the game temptingly close to the beginning (potentially or otherwise).
put yourself in my rocketpack if that poochie is one outrageous dude
Editor, Active player (297)
Joined: 3/8/2004
Posts: 7469
Location: Arzareth
Deviance wrote:
I'd make my game boring as hell so that nobody would bother TASing it in the first place.
Or playing, for that matter…
Post subject: Re: Making a TAS-proof game
Joined: 10/3/2005
Posts: 1332
moozooh wrote:
King's Bounty. >_>
The Peace Keepers comes to mind. It's a side-scrolling beat-em-up that takes about 20 minutes to get through, give or take a few minutes depending on which of the dozen or so splits in the path the player takes. It could become extremely time consuming to run each path for comparison. All I can think of that Myria didn't already suggest is to make the game that has no winning outcomes, like a tic-tac-toe AI who intentionally draws every round. Edit: or better, something that simply doesn't end, like Galaga. Or maybe if the game penalizes the player for playing too well? Detecting and somehow deterring frame-perfect input, for example. Or reaching the end of level 1 in less than X seconds makes level 2 proportionately harder.
Post subject: Re: Making a TAS-proof game
Player (95)
Joined: 6/25/2005
Posts: 122
Myria wrote:
Let's say you were a developer of a game and you wanted to make it difficult to make a TAS of the game. How would you do it?
MMORPG. No save states, no server source code, lots of other people running around, lots of items, did I mention no save states, people pestering you with questions like "How I mine for fish?"...
Post subject: Re: Making a TAS-proof game
nesrocks
He/Him
Player (246)
Joined: 5/1/2004
Posts: 4096
Location: Rio, Brazil
Bisqwit wrote:
Myria wrote:
Let's say you were a developer of a game and you wanted to make it difficult to make a TAS of the game.
Create a myriad of options that are difficult to compare. Lots of routes, lots of items that affect everything, and randomness that is tied to at least last 5 minutes of action instead of last 5 seconds or last 5 frames. The randomness tends to annoy though, but a myriad of options may make a challenge that requires significant resources to beat.
This would only increase the innacuracy of the TAS, but yeah.
Joined: 4/11/2006
Posts: 487
Location: North of Russia :[
- Include 10 hours of non-skippable dialogues - Make it boring and repetitive - Make it *glitchless* That's all ^_____^ EDIT: Forum kept breaking code I wrote, so I just deleted it -_____________________________-
Tub
Joined: 6/25/2005
Posts: 1377
First, deliberately add some tricks that can only be pulled off with 30Hz auto fire, pixel precision, a 1/100th chance or other TAS tools. next, write a few detectors for these tricks. If the player uses auto fire for more than 4 frames, set an unsuspicious variable somewhere in memory. If the player fires a shot at the first possible frame, or hits a boss at the first possible frame, increase some hard-to-find and possibly obfuscated counter. And at the end of the game, if the player used more of those tricks than humanly possible, just add a subtle crash to prevent the TASer from reaching the ending.. and let him figure out what went wrong.
m00
Post subject: Re: Making a TAS-proof game
Joined: 6/12/2006
Posts: 368
Myria wrote:
I think the most evil thing you can do, particularly in RPGs, is initialize a stream cipher at startup with the controller entropy during the title screen, and never add entropy again. Have that be the source of random numbers for some important feature, such as the encountered monsters in an area. Save the cipher state to the save file.
How is that different from the current situation (if it would work/is possible)? As long as everything works into a formula there won't be any deviation in the outcome. If it can be proven that humans or anything are capable of being truly random, (would need a time machine..) I'd say this is UNPOSSIBLE!
Player (88)
Joined: 1/15/2006
Posts: 333
Location: Bangkok, Thailand
Perhaps a good place to start would be to make a list of all the qualities that would be desirable to make a TAS, and then eliminate them. An easilly manipulatable PRNG. For example, one in which a single frame difference of input/delay causes completely different results. One would need to carefully design it so that small variances in time or input have absolutely no affect on the outcome. Be sure to give many occurrances a true 0% possibility if certain criteria are not met. Alternate, obviously shorter paths which require near-super human ability to perform. Do away with all of them. Don't make 'impossible' jumps that are one or two pixels away from obtainable just to frustrate players, because someone will figure out a way over it that you didn't expect. Game physics which break at 60Hz input, causing glitches, such as being able to walk through walls. If you know that the possibility of a certain glitch might exist (such as a player getting stuck between to bricks in Mario Bros.), make sure it does something which will impede the players progress. To use Mario Bros. as an example again, the game should have shoved the character _backwards_ instead of forwards. Imagine the Rockman run if zipping had forced the character the other way. The glitch would have been pretty worthless. Assumptions about controller input, such as left+right/up+down. Treat every combination of key inputs as valid, and make sure your code handles each reasonably. Knock-back. Always make knock-back reverse the direction of motion (and not the direction the character is facing). In addition, ensure that total velocity is never increased, and never produce a knock-back which forces the character in a vertical direction. Limiting number of 'bullets' to a certain number on the screen. This is always a bad idea, because it allows players to stand right next to an enemy and turbo fire at 30Hz. Instead, limit shots to a certain number per second, like 3 or 5. Additionally, never have a stun affect for any difficult enemy, such as a boss. Invulnerability of any sort. If you do want to have invulnerability, perhaps only make it against the enemy which actually damaged the character, and not all enemies/obsticles. Make sure you collision detection is decent too. If you need to estimate for performance reasons, make sure the hit box is larger than the character, rather than smaller. I think that'd pretty much cover it. Although I'm very much the opinion that every game should be made with speedrunning/TASing in mind. For one, it increases the replayability enormously.
print reduce(lambda x,p:p/2*x/p+2*10**1000,range(6643,1,-2))
Joined: 4/11/2006
Posts: 487
Location: North of Russia :[
Invulnerability of any sort. If you do want to have invulnerability, perhaps only make it against the enemy which actually damaged the character, and not all enemies/obsticles. Make sure you collision detection is decent too. If you need to estimate for performance reasons, make sure the hit box is larger than the character, rather than smaller.
It harms normal playing experience.
Tub
Joined: 6/25/2005
Posts: 1377
on the topic of a fixed seed for the PRNG that is saved: having predictable and unchangeable randomness once the game is started will be abused by unassisted speedrunners or even regular gamers. Memorisation replaces reflex. Don't do that. on the other hand, there are games with a fixed PRNG where randomness can still be manipulated: by polling more or less random values from the PRNG. Like creating dust-sprites in Mega Man X. adding another sadistic idea to my last post, in the spirit of "torture them until they give up": if the game detects that 'start' was pressed within the first two possible frames on the title screen, change an internal luck value so that nothing good will happen. No rare drops, less easy encounters, lower random damage values for yourself and higher for the enemys etc.
m00
Former player
Joined: 10/1/2006
Posts: 1102
Location: boot_camp
Or if it detects frame advance or slowdown the game automatically freezes your character so he can't move.
Borg Collective wrote:
Negotiation is irrelevant. Self-determination is irrelevant. You will be assimilated.
upthorn
He/Him
Emulator Coder, Active player (391)
Joined: 3/24/2006
Posts: 1802
The only way to make a game TAS proof is to make it so that TASing offers no advantage. Toribash is a good example of this -- the game is normally played in frame advance, replays can be paused and modified at any point. TASing has nothing additional to offer. All other kinds of suggestions that you get will simply make the game more frustrating or time-consuming to TAS properly, because once the TASer figures out the gimmick that's making his life difficult, he'll be able to work around it. And since dedicated TASers are often willing to disassemble games and follow the assembly code to discover the mechanisms behind things, you can assume that any method you choose will be transparent.
How fleeting are all human passions compared with the massive continuity of ducks.
JXQ
Experienced player (761)
Joined: 5/6/2005
Posts: 3132
A chess game with a takeback feature seems "TAS-proof" to me.
primorial#soup wrote:
I think that'd pretty much cover it. Although I'm very much the opinion that every game should be made with speedrunning/TASing in mind. For one, it increases the replayability enormously.
This quote interests me. I totally agree for regular speedrunning, but not for TASing. I think human error is more than enough to provide some nice exploits in games. Trying to replicate this intentionally would make the whole thing seem...cheap? I guess.
<Swordless> Go hug a tree, you vegetarian (I bet you really are one)
Post subject: Re: Making a TAS-proof game
Joined: 5/29/2006
Posts: 138
A lot of the suggestions made so far, particularly primorial#soup's list, don't seem to make a game TAS-proof to me. Making the game glitchless, lacking in short paths, etc doesn't make a game hard to TAS it just makes it so that a TAS is easy to do - a speedrun would be capable of being extremely close to the TAS. My definition of a TAS-Proof game would be one that makes it incredibly hard to find the 'perfect' route from beginning to end - even with all the TAS tools available, you'll never know if you made all the perfect decisions. One example that sounds good to me is a game something like Dynasty Warriors 2+ but even more random. Imagine trying to find a perfect way to manipulate tens to hundreds of enemies at once to get the quickest outcome. Even this actual game seems near impossible to TAS. Setting out to create an un-TAS-able game could even be more so.
Tub
Joined: 6/25/2005
Posts: 1377
laughing_gas wrote:
Or if it detects frame advance or slowdown the game automatically freezes your character so he can't move.
instant notification of the TASer (by freezing etc) would make it pretty easy to detect the TAS-Protection, making it easy to circumvent. "Oh, he froze again? Let's load a save state and try this a bit slower.." if TASing is detected, it shouldn't lead to immediate visible changes. Lower the players luck, or wait a couple of minutes before screwing the player.
m00
SXL
Joined: 2/7/2005
Posts: 571
sorry, had to reply that Tub's post looks a bit sadistic. you're a funny, yet a bit scary guy :°)
I never sleep, 'cause sleep is the cousin of death - NAS
Joined: 5/2/2006
Posts: 1020
Location: Boulder, CO
You could make Lemmings. Strategy that is reasonably openeded, yet really hard to optimize, then throw unbelievable lag on top of it, and you really have a headache.
Has never colored a dinosaur.
Joined: 8/27/2006
Posts: 883
Make your game on a computer.