Upsilandre

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. THREAD ⬇️
#Retrogaming #SNES #MarioKart https://t.co/00kuS6AoQN

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 (ou une suite?), mais à 2 joueurs, s'est vite imposée. 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. Véhicules trop rapides. Console pas assez puissante. D'où un jeu de Kart bien plus lent.
C'est cette seconde partie de l'histoire qui selon moi est erroné et qu'on retrouve systématiquement https://t.co/cTRcw68kv9

Déjà on peut y deviner cette idée commune mais fausse qu'un scrolling rapide demande beaucoup de ressources. 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 (un scrolling rapide est rarement pertinent).

C'est souvent une confusion faite avec la fluidité qui elle peut être exigeante en ressource. Mais fluidité et rapidité sont 2 choses parfaitement distinctes.
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 de proposer un mode 2 joueurs à 30fps (F-Zero et MK tournent à 60fps) ou ajouter un DSP, ce que fait d'ailleurs MK.
En effet, il est même très probable que MK demande plus de puissance que ne le ferait un 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.
Ca ressemble un peu aux traitements de vertice 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 ne compte pas ici). Ce n'est pas le cas de MK dont les concurrents sont bien plus groupés (à cause de la lenteur justement) auxquels s'ajoutent les sprites des items et ceux des obstacles. https://t.co/OQs3LH3hGs

Avec les 2 points de vue ça monte facilement à une quinzaine de sprites à projeter à 60fps dans l'espace "3D". Beaucoup plus que dans F-Zero. Le DSP de MK sert en partie à ça.
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.
La raison est plus fondamentale. C'est lié à l'implémentation du mode 7. Ce mode vidéo qui donne toute son identité à la SNES.

C'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 et on ne peut choisir ni l'adresse ni la taille de la tilemap ou du tileset. Tout est fixé de façon hardware.

Cette absence totale de flexibilité et de liberté du mode 7 rend impossible la possibilité d'afficher simultanément à l'écran (split-screen) 2 points de vue éloignés 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 1024x1024 pixels, pas plus ni moins. Et c'est exactement la taille que feront tous les circuits de MK. Là ou F-Zero a des tailles de circuit bien plus grandes et variées. Ça va de 4200x3500 à 7168x3824.

Je vous ai superposé divers circuits de MK par-dessus le dernier circuit de F-Zero, à la même échelle, pour mieux comprendre la différence de taille des circuits.
Cette unique circuit de F-Zero pourrait contenir plus de 26 circuits MK. https://t.co/J3AcCbqhcg

C'est donc ça l'unique véritable compromis technique de MK. La taille des circuits, pas la vitesse. Avoir des circuits suffisamment petit pour entrer intégralement dans la VRAM.
Et c'est cette petite taille de circuit qui va indirectement induire une faible vitesse, pas l'inverse

A la lumière de ce constat on peut sans doute reconstruire ce qu'a du être la vraie chronologie du processus créatif de MK:

Contrainte technique 2 joueurs >> Petit circuit

Petit circuit >> Faible vitesse

Faible vitesse >> Kart

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 🙂.

Et pour les mêmes raisons. 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 MK. C'est ce qui permet de pouvoir faire ce stage de Contra à 2 joueurs en split-screen 🙂. https://t.co/ErXQ2jNWJA

Si vous en voulez encore plus 🙂
J'aime bien l'idée (pour l'instant théorique) des 2 viewports dos à dos qui ne se retourne jamais mais ca serait très complexe et coûteux en ressource. Pas sûr que ce soit très viable. En tout cas pas à l'époque 😀.
https://twitter.com/LF_MrL314/status/1531663918975836162

Et pour les mêmes raisons encore, tous les circuits de Street Racer ont une taille 1024x1024 pixels = jeux de karting 🤓
C'est pas seulement pour copier Mario Kart. C'est qu'ils n'avaient pas trop le choix non plus. https://t.co/vmC4WYFvAL

PS: Vous vous êtes peut-être déjà demandé aussi pourquoi quand on joue en solo à MK ça reste en 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 ROM de 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 et chaque angle de rotation (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 (96ko) qui dans le cas de F-Zero va occuper presque 1/5ème de la petite cartouche (512ko).
MK va faire 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, qui sont la présence du DSP dans la cartouche (présent pour d'autres raisons) et celle du mode 2 joueurs, pour calculer le contenu de la table au lancement du jeu, en utilisant le DSP, et stocker la table en RAM (plutôt que dans la cartouche).

La perspective écrasée du 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 ce qui permet de faire tenir la table en RAM.

Ca 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.

Au final j'en ai fait aussi un billet de blog 🤓
https://upsilandre.over-blog.com/2022/06/debunk-de-super-mario-kart.html

Dans le billet de blog sur le debunk de Mario Kart SNES j'ai ajouté aussi un passage sur la GBA qui a aussi son mode 7, son F-Zero, son Mario Kart donc ca me semble intéressant à aborder.
https://upsilandre.over-blog.com/2022/06/debunk-de-super-mario-kart.html https://t.co/onvn4YzAa8

Tue Jun 07 12:44:11 +0000 2022