Before I go into my schpeel, I'm going to lay down some assumptions.
1. Let us assume that the game must be a video game, as real life board games and sports are obviously impossible to TAS.
2. Let us assume the following definition of a TAS-proof game: "A game for which it is true that no TAS of the game that could ever possibly be made would fulfill the requirements of entertainment and accuracy for acceptance on tasvideos.org." Let us also assume that such a game must not be mangled in such a way as to detract from normal gameplay.
3. Let us assume that money is no object, because your programmers are going to be working overtime hell for the next few months.
4. Let us assume that every system can be emulated with TASing tools, including PC, and thus one's choice of console cannot be used as a method of making the game TAS-proof.
To further tie our hands behind our backs, let's say that we're not going to use annoyances like excessive unskippable cutscenes, lots of long waits in the level design, the character having to stop to do almost any action, and so on.
Under these conditions, a TAS-proof game could be produced. There are some basic ways TASers gain time. There are also some basic ways to prevent them from working.
The first step is to prevent sequence breaking. This is easy. Just figure out what items, what triggers, etc. the player should minimally have by the time he should be going through X door. If he doesn't have all of them, X door is locked. Make sure there's a door between every two rooms. Simple as that.
However, that might not be enough. For example, lets say our game has a room in it that has only one entrance, which leads into a pit. When you first go in, you'll find the Sword of Über Manliness, but cannot get any further because the edges of the pit are unscalable. However, once you get the Boots of Scalability, you must come back to the room to climb those cliffs and get to the top which reveals the Gas Mask of Winningness. The player needs the Gas Mask of Winningness to survive the final boss's initial Nacho Cheese Breath attack which would otherwise cause instant death, but what if a TASer can find a way to scale those cliffs without the Boots? Easy. If he tries to collect the Gas Mask without the Boots, trigger a cutscene in which the Gas Mask dances away into the shadows saying something like "You can't catch me without the boots that enable you to climb up walls" or something like that. And remember: you should assume that the player can do anything. Always.
Now, tighten up your code. And I don't mean make it glitchless; that's impossible. But there are some basic ideals you can adhere to to at least prevent the huge timesavers.
- No assumptions. Ever. This should be self-explanatory.
- Don't make variables bigger than they need to be, and I mean really really tight. If there's no way for the character's speed to go over ten (in whatever units you're storing it as) you don't need any more than four bits, plus one more for direction; use the other three for something else. It may lead to obfuscated code, but keep in mind, you're aiming to make TAS-proof code. TAS-proof will more often than not equal obfuscated.
- Don't make pseudo-random AIs. Enemies should not jump out of the player's way on cue. Bosses should go for the throat and nothing less. If that makes them predictable, fine; it should still impede a TASer's progress.
- Find a way to make an RNG that is based only remotely on player entropy. For example, the frame at which you collect the Seed of Infernal Bliss could be stored in memory and used as a variable in the RNG from that point forward. The number of times a certain boss used a certain attack, the number of steps a generic monster took before it was slaughtered, the number of sprites onscreen at frame 1337 of level 6... make luck-manipulation hell incarnate for the TASer.
These cover the majority of cases; beyond that extensive beta-testing is needed, as always.
This should work. Obviously no one would ever bother doing it, but it should work.[/b]