# Tool-assisted speedrun

Un tool-assisted speedrun, ou tool-assisted superplay (TAS), est un speedrun (finir le plus rapidement possible) d'un jeu vidéo réalisé à l'aide d'un émulateur et d'outils inaccessibles à des joueurs à la manette, comme le ralenti et le réenregistrement (re-recording), qui permet de recommencer n'importe quel passage du jeu autant de fois que l'on souhaite.
Ces outils permettent de s'affranchir des limites humaines en termes de compétences et de réflexes, et d'utiliser ainsi des techniques qui seraient bien trop compliquées, voire impossibles à mettre en œuvre sans l'aide de ces outils.

## Historique
### De 1999 à 2001

Le terme tool-assisted speedrun remonte à l'époque où des speedruns du jeu Doom commencent à être réalisés, époque pendant laquelle les premiers de ces runs réalisés à l'aide d'outils apparaissent (bien qu'ils soient alors parfois appelés « built demos » ). Après qu'Andy Kempling (dit « Aurican ») a sorti une version modifiée du code source de Doom, permettant l'enregistrement de ces démos au ralenti et en plusieurs morceaux, il devient alors possible d'enregistrer des démos en tool-assisted. Quelques mois après, en juin 1999, Esko Koskimaa, Peo Sjoblom et Joonatan Donner créent le premier site permettant de partager ces démos. Ils le nomment « Tools-Assisted Speedrun ».
À l'instar de beaucoup d'autres communautés dédiées au tool-assisted speedrun, les administrateurs de ce site mettent l'accent sur le fait que ces démos sont principalement réalisées à des fins de divertissement, sans avoir a priori de caractère compétitif (même si les tentatives successives pour atteindre un temps toujours plus rapide deviennent elles-mêmes une compétition à part entière ). Le site est un succès, et est généralement mis à jour plusieurs fois par semaine grâce à l'ajout de démos enregistrées par les administrateurs du site ou proposées par ses visiteurs. Peu de temps après, Lee Kenough sort la version 2.03 de Marine's Best Friend (une version modifiée du code source de Doom), la réalisation de ces démos devient alors beaucoup plus facile, grâce à l'ajout d'une fonction de réenregistrement n'obligeant plus à repasser l'intégralité de la démo pour recommencer au point où l'on voulait.
Le site fut actif jusqu'au 10 août 2001, date à laquelle Yonathan Donner déclare qu'à partir de ce jour le site ne proposerait plus que des archives et redirige les personnes intéressées vers le site The Doomed Speed Demos Archive, qui propose alors principalement des speedruns non assistés, mais dont les administrateurs acceptent aussi la publication de tool-assisted speedrun. Bien que la popularité du site ait depuis diminué, des démos continuent à être envoyées et sont toujours réalisées grâce à PrBoom.

### Depuis 2003

En 2003, une vidéo réalisée par un joueur japonais appelé Morimoto atteint une notoriété sur Internet, car elle montre le jeu Super Mario Bros. 3 fini en 11 minutes en exécutant en outre divers acrobaties particulièrement spectaculaires et en glanant 99 vies. Elle a fait l'objet de nombreuses controverses, car peu de gens connaissent à l'époque le concept de tool-assisted speedrun, réservé alors seulement à certains jeux PC. Beaucoup se sentirent trahis en apprenant que cette vidéo a été réalisée grâce à un émulateur. Cependant, inspiré par cette vidéo, Joel Yliluoma (dit Bisqwit) a l'idée de créer le site NESvideos, consacré au tool-assisted speedrun. Le site ne comportait à ses débuts que des vidéos de jeux NES, la communauté grandissante, certains internautes réussissent à incorporer les outils nécessaires à la création de tool-assisted speedrun à des émulateurs dédiés à d'autres plates-formes. Le site est ensuite renommé TASVideos. Au mois de janvier 2011, il représente la plus large communauté anglophone dédiée au tool-assisted speedrun.
Les tool-assisted speedruns sont principalement réalisés sur des jeux officiels, mais certains l'ont aussi été pour des hacks populaires de certains jeux.
Une personnification humoristique des tool-assisted speedruns, appelée TAS-san (M. TAS), devient très populaire parmi les internautes japonais. Les tool-assisted speedruns envoyés sur des sites de partage de vidéos tels que Nico Nico Douga ou YouTube sont parfois décrits comme représentant un nouveau record mondial détenu par TAS-san, qu'on dit doué d'une mémoire et de réflexes surhumains.

## Principes

Créer un tool-assisted speedrun consiste à trouver l'enchaînement idéal des boutons à presser afin de remplir un critère donné – en général, finir le jeu le plus vite possible. Aucune restriction n'est imposée quant aux outils utilisés, mais le résultat final doit obligatoirement consister en une série de boutons à presser qui, si on l'appliquait à une console de jeu, permettrait d'atteindre l'objectif que l'on s'est fixé. Le moyen le plus simple permettant d'acquérir une telle séquence est d'enregistrer les boutons que l'on presse lorsque l'on joue au jeu voulu sur un émulateur, en sauvegardant et en chargeant à maintes reprises l'état de l'émulateur, et donc du jeu, afin de tester plusieurs possibilités et de garder seulement la meilleure. Dans le but d'être plus précis, le jeu tourne au ralenti. À l'origine, le jeu était seulement ralenti à un faible pourcentage (par exemple 5 %) de la vitesse normale. Cependant, grâce à plusieurs avancées dans le domaine, l'avance image par image est maintenant bien plus utilisée. Un tool-assisted speedrun réalisé sans cette technique aura dès lors beaucoup de chance d'être critiqué pour son aspect bâclé.
Le réenregistrement permet en outre l'utilisation d'une autre technique, la manipulation de la chance, qui exploite le fait que les boutons pressés par le joueur ont une influence directe sur la génération pseudo-aléatoire des variables utilisées dans le jeu. De cette façon, on peut forcer la réalisation de certains évènements. En faisant une sauvegarde d'état avant un événement donné, on peut en effet tester l'influence d'une petite variation des boutons pressés sur l'accomplissement ou non d'un certain résultat. La manipulation de la chance permet par exemple d'obtenir la pièce idéale au moment voulu dans Tetris, ou un objet rare après avoir tué un ennemi. Selon le jeu et l'évènement souhaité, ce processus peut demander beaucoup de temps, du fait qu'il oblige à tester de très nombreuses possibilités, et peut ainsi représenter une part non négligeable du temps passé à réaliser un tool-assisted speedrun.
Une technique assez rarement employée est la recherche par force brute (en laissant un algorithme jouer au jeu) pour tester toutes les possibilités. En théorie, ce processus permettrait de trouver l'enchaînement idéal de boutons à presser pour n'importe quel jeu, mais comme le nombre de possibilités à tester croît exponentiellement avec la longueur de la séquence de jeu à réaliser, cette technique n'est utilisée que pour optimiser quelques petites portions d'un speedrun. Un algorithme heuristique peut aussi être utilisé dans ce but. Bien que ce procédé ne fournisse pas une solution parfaite, il peut se révéler particulièrement efficace pour résoudre certains jeux de puzzle.
Une autre technique assez peu utilisée est le désassemblage du jeu lui-même. En analysant la structure interne du jeu, il est possible d'arriver à manipuler la chance sans avoir à procéder par tâtonnements, ou de découvrir des bugs cachés dans le moteur du jeu. Une technique associée et plus communément utilisée consiste à surveiller certaines adresses mémoire qui sont liées à certains paramètres ou évènements afin de voir quand et pourquoi elles changent, et d'utiliser cela à son avantage.
Toutes ces techniques impliquent une certaine interaction avec le jeu dans des proportions qui seraient impossibles sans émulateur, mais le résultat final (le speedrun consistant en l'enchaînement des boutons pressés) ne dépend plus d'une quelconque manipulation de la machine utilisée : tout est théoriquement faisable à la manette. Dès lors, les outils utilisés dans la réalisation de tool-assisted speedruns sont foncièrement différents de toutes les manipulations rendues possibles par des outils tels que l'Action Replay, par exemple, car de telles manipulations sont impossibles à retranscrire comme une série de boutons à presser dans le jeu.

### Émulateurs utilisés

Le tool-assisted speedrun repose sur le fait qu'une même séquence de boutons pressés devra toujours produire le même résultat, quel que soit le moment où on l'exécute. En d'autres termes, l'émulation doit être déterministe relativement à une séquence donnée. Si ce n'est pas le cas, un speedrun qui a été optimal à une première lecture risque de ne même pas finir le jeu lors d'une deuxième lecture. Cette perte de synchronisation apparaît lorsque l'état à une date donnée de la machine émulée, lors de la lecture du speedrun, ne correspond pas exactement à l'état où la machine était, à la même date, lors de la production du speedrun. Une désynchronisation peut aussi être due à l'utilisation de sauvegardes d'état incomplètes, qui ne permettent pas de restaurer la machine émulée au même état que lorsque la sauvegarde d'état a été créée.
Les problèmes dus à l'émulation, tels que l'absence de déterminisme ou la création de sauvegardes d'état incomplètes, sont seulement découvertes lorsque l'on utilise l'émulateur sous les strictes conditions d'avance image par image nécessaires à la réalisation d'un tool-assisted speedrun. Les développeurs d'émulateurs n'accordent en effet que très peu d'importance aux problèmes rencontrés par ceux qui réalisent des tool-assisted speedrun, car ces problèmes n'ont en général aucun effet lorsque l'on joue normalement à l'émulateur. Par conséquent, la communauté du site TASVideos a dû modifier de très nombreux émulateurs afin de les rendre aptes à la production de tool-assisted speedruns. Si un TAS a été créé sur un tel émulateur (souvent caractérisé par le suffixe -rr, ou -rerecording), alors sa lecture sur une version non modifiée de l'émulateur aura de grandes chances de conduire à une désynchronisation.
Liste des émulateurs comportant les outils spécifiques au tool-assisted speedrun :
| Consoles | Emulateurs |
| Multi-systèmes | BizHawk |
| NES | Famtasia, FCE Ultra, FCEUX, VirtuaNES, Nintendulator |
| Super Nintendo | Snes9x, ZSNES, lsnes |
| Virtual Boy | VBjin |
| Nintendo 64 | Mupen64-rr |
| Game Boy, Game Boy Color, Game Boy Advance | VBA-ReRecording, lsnes (cœur GB&GBC) |
| Nintendo DS | DeSmuME |
| GameCube, Wii | Dolphin |
| PlayStation | PCSX-rr, PSXjin (ces deux-çi étant obsolètes), BizHawk, PCSX-Redux |
| Master System | vbsms+, Dega |
| Mega Drive | Gens |
| Saturn | Yabause |
| Arcade, Neo Geo | Final Burn Alpha |
| PC-Engine | Pcejin, Mednafen |
| DOS | JPC-rr |
| Windows | Hourglass |
| MSX | OpenMSX |

### Buts

Les tool-assisted speedruns sont réalisés pour de multiples raisons, dont voici les principales :
* trouver les limites théoriques d'un jeu : les tool-assisted speedrunners sont intéressés de savoir quel est le temps minimal pour finir un jeu si l'on y joue à la perfection ;
* créer un état du jeu qui permet d'intégrer son propre code dedans tout en jouant (on parle de ACE, arbitrary code execution).

## Lexique

* Frame advance : jouer image par image (frame en anglais) pour avoir une précision maximale et atteindre la perfection.
* Manipulation de la chance : analyser le comportement d'un élément pseudo-aléatoire du jeu pour faire apparaître le pattern voulu en manipulant les paramètres du système de jeux. Utilisé dans combat de boss notamment.
* Glitch : exploitation d'un bug.
* Hex editing : édition manuelle d'un fichier représentant les entrées faites sur la manette.
* Rerecord : sauvegarder n'importe quand l'ensemble des paramètres au lieu d'utiliser les points de sauvegarde normaux.
* Take damage : prendre volontairement un dommage ou perdre des points de vie si cela permet de gagner du temps. Ce qui va à l'encontre d'un jeu « normal ».
* Boost damage : de nombreux jeux ont un mécanisme de répulsion lorsque le joueur prend un dommage. L'idée est d'exploiter cette capacité d'éjection qui, dans certains cas, permet une accélération supérieure aux capacités du personnage ou offre des capacités de déplacement ponctuelles au-delà des lois physiques du jeu.
* Hitbox : zone dans laquelle les coups portés réalisent des dégâts. La hitbox ne correspond pas toujours à l'apparence graphique des ennemis ou du joueur, ce qui permet des optimisations de trajectoire.
* Lag : forcer la console a réaliser beaucoup de calculs, afin de ralentir la vitesse du jeu.
* Bunny hopping : gagner de la vitesse en sautant souvent, ou en sautant à des moments précis.
* Rocket jump : utiliser un bazooka pour que la poussée générée par l'explosion accélère le personnage au-delà des vitesses permises par le moteur du jeu, ou pour sauter au-delà de la normale.
* Run any percent : arriver à la fin du jeu le plus vite possible par tous les moyens, même si le jeu n'est pas réellement terminé dans sa totalité.
* Run no damage : arriver à la fin du jeu sans avoir pris aucun dommage.