Overblog
Editer l'article Suivre ce blog Administration + Créer mon blog
upsilandre retrogaming

DEBUNK DE SUPER MARIO KART

 

 

L'histoire de la création de Super Mario Kart SNES et sa « filiation » avec F-Zero est relativement connue. Par contre, la façon dont on raconte cette histoire est au moins partiellement fausse et debunkable sous l'angle de la technique.

 

Super Mario Kart

 

Ce qui semble acquis c'est qu'après le succès de F-Zero et son mode 7, l'idée de faire un jeu de course du même acabit (voir une suite), mais à 2 joueurs, s'est vite imposée chez Nintendo. La SNES, console à vocation familiale, manquant cruellement de jeux à 2 joueurs (même Final Fight...). 

Sauf qu'il était, semble-t-il, impossible d'avoir un équivalent 2 joueurs à F-Zero sur SNES. Les véhicules seraient trop rapides et la console pas assez puissante, d'où le choix de bifurquer vers un jeu de Kart bien plus lent…
C'est cette seconde partie de l'histoire qui me semble erronée et qu'on retrouve systématiquement dans ce récit.

  

F-Zero

 

Déjà dans cette affirmation on peut y deviner cette idée commune mais fausse qu'un scrolling rapide demande beaucoup de ressources. En réalité, la vitesse d'un scrolling ne change pas grand chose, c'est presque un détail. C'est avant tout un choix de game design (et un scrolling rapide est rarement pertinent).

Ça vient souvent aussi d'une confusion avec la notion de fluidité (le nombre d'images par seconde) qui, elle, peut être très exigeante en ressource. Mais fluidité et rapidité sont 2 choses parfaitement distinctes (et à ce titre F-Zero et Mario Kart sont tous les deux à 60fps, rien à dire).

 

De plus, un problème de puissance est rarement un mur infranchissable, il y a toujours des solutions pour contourner.  Si c'était juste un problème de puissance, il suffirait par exemple de proposer un mode 2 joueurs à 30fps, au lieu de solo à 60fps, ce qui mathématiquement devrait résoudre le problème, ou ajouter un DSP dans la cartouche pour soulager le CPU... ce que fait d'ailleurs Mario Kart.

En effet, il est même plus que probable que Mario Kart demande plus de puissance que ne le demanderait un hypothétique F-Zero à 2 joueurs.
La phase de transformation de coordonnée des sprites pour les projeter à l'écran selon le point de vue « 3D » du joueur est une étape assez lourde pour un CPU aussi faible que celui de la SNES. Ça ressemble un peu aux traitements de vertex des polygones dans les jeux 3D.

Et si dans F-Zero il y a rarement plus de 1 ou 2 sprites à l'écran (le sprite du joueur, fixe à l'écran, ne compte pas dans cette étape de calcul). Ce n'est pas le cas de Mario Kart dont les concurrents sont bien plus groupés (de ce fait, la lenteur est plutôt un inconvénient) auxquels s'ajoutent les sprites des items (banane, carapace, œuf, champignon...) et ceux des obstacles (tuyau, whomp, plante, poisson, taupe...).

Avec les deux points de vue cumulés, ça monte facilement à une quinzaine de sprites (voir plus) à projeter à 60fps dans l'espace « 3D ». Beaucoup plus que dans F-Zero. Le DSP de Mario Kart sert en partie à ça. 

Donc Super Mario Kart ne fait pas dans l'économie de puissance, au contraire, il est probablement plus exigeant que F-Zero même si on le réduisait à un jeu solo.

 

Super Mario Kart

 

Donc non, l'impossibilité de faire un F-Zero à 2 joueurs n'est pas un problème de puissance. 

C'est faux. 

Et pourtant cette impossibilité est bien réelle. Il est factuellement impossible de faire un F-Zero à 2 joueurs sur SNES mais pas pour cette raison de puissance. La raison est bien plus fondamentale qu'une histoire de puissance. C'est lié à l'implémentation du mode 7. Ce mode vidéo (le 8ème et dernier puisque les modes graphiques de la SNES vont de 0 à 7) donne toute son identité à la SNES. 

Le mode 7 est un mode d'affichage de background dont l'intégration hardware est bien plus complexe que les autres et qui a demandé des sacrifices :
Il n'y a qu'un seul layer (au lieu de 2, 3 ou 4 pour les autres modes vidéo) et on ne peut choisir ni l'adresse ni la taille de la tilemap ou du tileset. Tout est fixé de façon hardware. Impossible de double-bufferiser par exemple (pour avoir un buffer par point de vue).

Cette absence totale de flexibilité et de liberté du mode 7 rend impossible la possibilité d'afficher simultanément à l'écran (en split-screen) 2 points de vue distants sur la map...  sauf si la map du circuit entre intégralement en VRAM. Et c'est ce que va faire Mario Kart !

La taille fixe de la (tile)map en VRAM qu'autorise le mode 7 est exactement de 1024x1024 pixels, pas plus ni moins. Et c'est exactement la taille que feront tous les circuits de Mario Kart. 

 

Mario Circuit 1 dans Super Mario Kart

 

En revanche, dans F-Zero, la taille des circuits est bien plus grande, variée et de toutes les formes. Les circuits vont de 4200x3500 à 7168x3824.  Et même si à un instant T,  il n'y a qu'une portion 1024x1024 du circuit en VRAM, F-Zero a cette possibilité de pouvoir mettre à jour de façon dynamique la map en VRAM en accompagnant la position du joueur comme on le ferait dans n'importe quelle jeu classique à scrolling. Pour cette raison, F-Zero n'a donc pas de limite sur la taille des circuits autre que la taille de la ROM.
F-Zero peut faire cela car il n'y a qu'un seul point de vue, qu'une seule caméra. Ce n'est plus possible avec 2 caméras distantes sur la map comme c'est le cas dans Super Mario Kart.

Sur l’image ci-dessous, j'ai superposé plusieurs circuits de Mario Kart par-dessus le dernier circuit de F-Zero, à la même échelle, pour mieux comprendre la différence de taille des circuits. Cet unique circuit de F-Zero pourrait contenir plus de 26 circuits de Super Mario Kart !

 

Image



 

C'est donc ça l'unique véritable compromis technique de Mario Kart. La taille des circuits, pas la vitesse. Avoir des circuits suffisamment petits pour entrer intégralement dans la VRAM est la contrainte imposée par cette double caméra qui définit ensuite tout le reste.
C'est la petite taille de circuit qui va indirectement induire une faible vitesse, pas l'inverse. C'est toute la différence avec le récit populaire qui retourne cette causalité dans l'autre sens.

Paradoxalement, il serait même théoriquement plus simple d'atteindre des vitesses supérieurs à F-Zero dans Mario Kart grâce à ses circuits intégralement contenus dans la VRAM qui ne nécessite donc aucune mise à jour dynamique de la tilemap. Sauf qu'en termes de game design ça n'aurait aucun sens.
Finalement, la contrainte technique impose les petits circuits tandis que le game design impose la faible vitesse.

À la lumière de ce constat, on peut alors remettre dans le bon sens ce qu'a dû être la vraie chronologie du processus créatif de Mario Kart :

  1. Contrainte technique 2 joueurs  >>  Petit circuit
  2. Petit circuit  >>  Faible vitesse
  3. Faible vitesse  >>  Kart
  4. Kart  >>  L'identité du véhicule devient le pilote 

Et la suite, vous la connaissez ou devinez. Pour identifier facilement un personnage de dos, il faut qu'il soit vraiment très reconnaissable d'où la nécessité d'aller piocher parmi les personnages déjà iconiques de Nintendo. 

  

TRIVIA 1 

Pour les mêmes raisons techniques, la taille de la map du stage 2 de Contra III (stage top/down en mode 7) fait aussi exactement 1024x1024 pixels comme les circuits de Mario Kart. C'est ce qui permet de pouvoir faire ce stage de Contra à 2 joueurs en split-screen.

 

Contra III



 

De même pour tous les circuits de Street Racer qui subissent aussi cette unique taille imposée de 1024x1024 pixels ce qui aboutit aux mêmes conséquences  >>  jeux de karting.
Ce n'est pas seulement pour copier Mario Kart. C'est aussi qu'ils n'avaient pas trop le choix.

 

Street Racer




 

TRIVIA 2

Quid de Mario Kart: Super Circuit sur Game Boy Advance ?

C'est effectivement intéressant d'aller voir de ce côté.
Le multi-joueur sur console portable se faisant par link et pas en split-screen, ça permet d'avoir un épisode Mario Kart fullscreen et sans contrainte de taille de circuit. Et effectivement on remarque une certaine libération.

Les circuits n'ont plus de taille fixe, leurs tailles et formes varient un peu selon les besoins et surtout ils sont globalement plus grands que ceux sur SNES. Ils flirtent souvent avec les 2000x2000 soit 4 fois la surface d'un circuit SNES. On peut alors deviner qu’ils se sentaient sans doute un peu à l'étroit pour le level design des circuits SNES.
Mais on retrouve aussi en bonus les circuits SNES toujours dans leur format historique 1024x1024.

 

Les circuits de Mario Kart Game Boy Advance



 

Mais si le mode 7 de la Game Boy Advance (qui correspond à son mode 2) reprend les mêmes caractéristiques que sur SNES (tilemap 1024x1024, 8bpp, tileset 256 tuiles, pas de flipping…), il a aussi une différence majeure. Il propose 2 layers au lieu d’un seul !
On peut le constater notamment sur les F-Zero Game Boy Advance. Un layer pour le circuit et le second pour la ville en dessous. Quelque chose d’impossible sur SNES.

F-Zero Climax Game Boy Advance

 

Et 2 layers ça change tout pour le split-screen. Il est alors tout à fait possible d’associer un layer à chaque joueur avec une totale indépendance. Ainsi, plus de contrainte.

Avec le hardware de la Game Boy Advance, il aurait donc tout à fait été possible de faire du split-screen sur F-Zero SNES ou d’avoir des circuits sans contrainte de taille sur Super Mario Kart SNES.

 



 

TRIVIA 3

Vous vous êtes peut-être déjà demandé aussi pourquoi lorsqu'on joue en solo à Mario Kart on reste sur un affichage split-screen plutôt que de proposer une expérience fullscreen comme F-Zero ? C'est lié à un choix technique plutôt judicieux pour économiser la taille de la ROM dans la cartouche.

Il faut savoir que pour produire cet effet 3D de perspective il faut modifier 4 paramètres du mode 7 a chaque scanline (grâce au HDMA). Des paramètres qui sont différents pour chaque ligne du sol et chaque angle de rotation du joueur (128 angles) et qui serait trop coûteux à calculer à la volée.

Pour cette raison tous ces paramètres sont précalculés dans une énorme table qui dans le cas de F-Zero va occuper presque 1/5ème de la petite cartouche (96ko sur 512ko). Mario Kart, qui doit aussi se contenter d'une toute petite cartouche 512ko, va profiter d'un autre choix pour éviter de stocker cette table en ROM et de gâcher le peu de place disponible.

Il va profiter de 2 opportunités que sont la présence du DSP dans la cartouche (présent pour les raisons expliqués plus haut) et celle du mode 2 joueurs, pour calculer le contenu de la table au lancement du jeu en utilisant le DSP, et stocker cette table en RAM (plutôt que dans la cartouche).

En effet, la perspective écrasée du circuit en mode 2 joueurs split-screen s'étend sur 2 fois moins de scanline qu'en fullscreen et permet donc de produire l'effet de perspective avec une table 2 fois plus petite (réutilisé pour le second joueur). C'est cela qui permet de faire tenir la table en RAM.

Ça ne serait pas vraiment possible ou raisonnable avec une table complète fullscreen comme celle de F-Zero qui remplirait les 3/4 de la RAM. Et sans la présence d'une table "complète" pas possible de proposer un mode solo fullscreen.

  

 

 

TRIVIA 4

Pour ceux qui se poseraient la question : Non, on ne peut pas swapper mid-screen la tilemap des circuits de Mario Kart SNES afin de s'affranchir des contraintes que j’ai évoquées.
Mettre à jour l’intégralité de la tilemap du mode 7 demande une bonne centaine de scanline, ça prend vraiment du temps, ça ferait une sacré bande noire en plein milieu de l'écran ^^.

 

 

TRIVIA 5

J'avais aussi fait une vidéo sur le sujet il y a de nombreuses années si vous en voulez encore.

Partager cet article
Repost0
Pour être informé des derniers articles, inscrivez vous :
Commenter cet article