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

 

Il semble acquis que l'idée de concevoir un jeu de course du même acabit que F-Zero (voir une suite), mais à 2 joueurs, s'est vite imposée chez Nintendo après le succès de celui-ci et son fameux mode 7. La SNES, console à vocation familiale, manquant cruellement de jeux à 2 joueurs à cette époque (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 en partie erronée et qu'on retrouve systématiquement dans ce récit.

  

F-Zero

 

Déjà, dans cette affirmation, on peut deviner cette idée commune mais fausse qu'un scrolling rapide demande beaucoup de ressources. En réalité, la vitesse d'un scrolling a peu d'impact. 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 des jeux qui tournent parfaitement à 60 fps (les consoles de l'époque sont optimisées pour ce framerate).

 

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, en complément du solo à 60fps, ce qui mathématiquement devrait résoudre le problème tout en restant parfaitement viable. On peut aussi augmenter la taille de la cartouche pour simplifier (ou éviter) la compression des datas du circuit et donc réduire la charge sur le scrolling, ou ajouter un DSP dans la cartouche pour soulager le CPU sur d'autres taches... ce que fait d'ailleurs Mario Kart.

En effet, il est même très 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...).

En cumulant les 2 caméras simultanées, ça monte facilement à une quinzaine de sprites (voir plus) à projeter à 60 fps dans l'espace « 3D » du jeu. Vraiment beaucoup plus que dans F-Zero. A priori, le DSP de Mario Kart sert en partie à ça. 

Super Mario Kart ne fait pas dans l'économie de ressource. Au contraire, il est très certainement plus consommateur que F-Zero même si on le réduisait à un jeu solo. Ce ne sont donc pas les ressources et performances qui ont été un frein.

 

Super Mario Kart

 
 

Donc l'argument de puissance ne tient pas. L'impossibilité de faire un F-Zero à 2 joueurs n'est pas un problème de puissance.

Et pourtant cette impossibilité est bien réelle. Il est factuellement impossible de faire un F-Zero à 2 joueurs sur SNES mais pas pour des questions de performance. La raison est bien plus fondamentale et incontournable. C'est lié à l'implémentation du mode 7. Ce mode vidéo (le 8ème et dernier, les modes graphiques de la SNES vont de 0 à 7) qui concentre presque à lui seul toute l'identité de 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, un seul plan (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 l'unique tilemap et tileset qui vont composer le plan. Tout est fixé de façon hardware. Il y a beaucoup moins de flexibilité et de contrôle que sur les autres modes vidéos.

Dans un scroller 2D classique sur 16 bit il existe principalement 3 solutions pour afficher simultanément 2 points de vue distants en split-screen, 2 caméras. Mais aucune de ces 3 méthodes ne sont applicables dans le cas de F-Zero à cause de cette absence totale de flexibilité du mode 7 cumulé à l'usage de la rotation offert par ce mode. Aucune ne fonctionne
sauf si la map du circuit entre intégralement dans la VRAM de la SNES. Et c'est ce que va faire Mario Kart !

La taille fixe de la (tile)map en VRAM autorisé par le mode 7 est exactement de 1024x1024 pixels, pas plus ni moins. Et c'est donc 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 et variée (de toutes les formes). Les circuits vont de 4200x3500 à 7168x3824.  Et même si à un instant T,  il n'y a qu'une petite portion 1024x1024 du circuit en VRAM (elle ne peut pas contenir plus), F-Zero va simplement mettre à jour de façon dynamique la map en VRAM en accompagnant la position du joueur sur celle ci comme on le ferait dans n'importe quel jeu 2D classique à scrolling. Pour cette raison, F-Zero n'a donc pas de limite de 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



 

L'unique véritable compromis technique de Mario Kart est donc la taille des circuits, pas la vitesse. La nécessité d'avoir des circuits suffisamment petits pour entrer intégralement dans la VRAM est la contrainte imposée par cette double caméra en mode 7. Une contrainte 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 en général inverse cette causalité (en pointant une hypothétique contrainte de vitesse).

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. Mais 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  =  Le pilote devient l'identité du véhicule

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. 

 

Mario Kart est surtout un parfait exemple d'une IP entièrement façonnée (game design, apparence...) par la contrainte technique. Quelque chose qui était fréquent à l'époque.

  

 

 

 

 

 

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 à 2 joueurs en split-screen, autrement ca ne serait pas possible à cause des rotations.

 

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  >>  jeu de karting.
Ce n'est pas seulement pour copier Mario Kart. C'est aussi qu'ils n'avaient pas beaucoup d'alternatives.

 

Street Racer

 

Exactement le même constat pour SD F-1 Grand Prix (et dans lequel on retrouve encore des karting).

 

SD F-1 Grand Prix
 

 

 

 

 

 

 


 

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 à l'étroit pour le level design des circuits SNES même pour un jeu de Karting.
Mais on retrouve aussi en bonus les circuits SNES toujours dans leur format historique 1024x1024.

 

Les circuits de Mario Kart Game Boy Advance



 

L'équivalent du mode 7 dans la Game Boy Advance correspond à son mode vidéo 2 et reprend les mêmes caractéristiques que sur SNES (tilemap 1024x1024, 8bpp, tileset 256 tuiles, pas de flipping…) mais avec 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 qui donne un joli effet de relief. Quelque chose d’impossible sur SNES.

 

F-Zero Climax Game Boy Advance

 

2 layers ça change tout pour le split-screen. Il est alors possible d’associer un layer à chaque caméra/joueur avec une totale indépendance. Ainsi, plus de contraintes.
Donc on peut prédire qu’avec le hardware de la Game Boy Advance dans une SNES, il aurait 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

Uchuu Race: Astro Go! Go! est un autre cas intéressant à évoquer sur SNES. C'est une sorte de jeu de course futuriste en mode 7 qui peut faire penser un peu a F-Zero, même visuellement.  

 

Uchuu Race: Astro Go! Go! SNES

 

A la grosse différence que dans celui-ci l'orientation de la caméra est verrouillée. Il n'y pas d'usage de la fonction de rotation du mode 7. Ça implique que la caméra est alignée avec la tilemap en VRAM. Si on combine ça avec une inclinaison de la caméra vers le sol qui évite ainsi de pointer l'horizon (la distance d'affichage de Astro Go Go se limite à 223 pixels dans la tilemap contre 656 pixels pour F-Zero) alors on réunit toutes les conditions qui permettent d'exploiter certains tricks de programmation (à la façon du mode split-screen de Sonic 2) pour pouvoir faire un mode 2 joueurs en split-screen avec un seul layer même en mode 7.

Mais l'absence de rotation suffit à dire que ce n'est pas un F-Zero, c'est un autre type de jeu, un autre game design, où les circuits ne sont plus vraiment des circuits. C'est plus une course d'obstacle en quasi ligne droite avec des bumps partout qui donne un aspect un peu flipper. Et malgré que tout semble calibré pour permettre un split-screen , le jeu ne le propose même pas au final.

Mais la caméra semble tellement bien calibrée pour cela que je soupçonne tout de même fortement le projet d'avoir été initié sur cette idée de faire un F-Zero à 2 joueurs en split-screen. Puis en constatant l'impossibilité technique, ils auraient commencé à modifier certains éléments (la caméra) pour rendre le split-screen possible pour ensuite dériver vers un autre type de jeu tant ces modifications changent fondamentalement le game design et finalement abandonner le split-screen. 

 

 

 

 

 

 


 

TRIVIA 4

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.

MK va profiter de 2 opportunités. La présence du DSP dans la cartouche (présent pour les raisons expliqués plus haut) ainsi que celle du mode 2 joueurs. La combinaison des 2 va permettre de 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. Et le DPS permet de calculer cette table au lancement du jeu sans que le joueur s'impatiente.

Ç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 5

Pour ceux qui se poseraient la question : Non, il n'est pas possible de swapper, mid-screen, la tilemap des circuits de Mario Kart SNES dans le but 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 ^^.

 

 

 

 

 

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