1 points par GN⁺ 2023-07-16 | 1 commentaires | Partager sur WhatsApp
  • Explication d’une stratégie permettant d’obtenir l’étoile Watch for Rolling Rocks dans Super Mario 64 avec 0,5 pression sur A, uniquement en conservant un A hold déjà actif avant le début, sans nouvelle entrée sur A
  • L’entrée A se divise en press, hold et release ; si l’on conserve le A appuyé depuis l’étoile précédente, cela peut compter comme 0,5 pour une étoile seule, et comme 0 entrée supplémentaire à l’échelle du run complet
  • Le cœur de la stratégie consiste à déplacer la position de home d’un Scuttlebug, à le faire monter en utilisant la frontière d’activation de la salle, puis à obtenir la hauteur de la plateforme de l’étoile grâce au misalignment et à un rebond
  • La vitesse horizontale nécessaire est produite avec du Hyper Speed Walking en combinant eau peu profonde, pente raide, gate et détection out-of-bounds ; l’accumulation de vitesse prend environ 12 heures
  • L’itinéraire de déplacement en PU est conçu pour revenir à la main map via la conversion en short des floor collisions, la syncing speed propre à chaque pente et l’alignement QPU, puis pour atteindre l’elevator et la plateforme de l’étoile

Référence pour 0,5 pression sur A

  • Une pression sur A n’est pas une entrée instantanée, mais se divise en trois étapes : press, hold et release
    • press sert à faire sauter Mario
    • hold peut être utilisé pour un petit kick, une nage sous l’eau, une chute ralentie pendant un twirl ou une chute ralentie avec la Wing Cap
    • release n’a actuellement pas d’exemple utile ou important
  • 0,5 pression sur A désigne une situation où l’on n’appuie pas de nouveau sur A et où l’on continue simplement un A déjà maintenu depuis avant
  • L’exemple d’Over the Rainbow montre ce mode de calcul
    • pour atteindre la cannon platform, il suffit seulement de maintenir A
    • le premier tir de cannon et le second tir de cannon nécessitent chacun un A press
    • si l’on considère uniquement cette étoile, cela compte comme 3 A presses
    • dans un run complet du A Button Challenge, on peut conserver le A press utilisé pour entrer dans le course afin de satisfaire le premier besoin en hold
    • ainsi, Over the Rainbow compte pour 2,5 A presses à l’échelle de l’étoile seule, et 2 A presses supplémentaires à l’échelle du run complet
  • Dans cette stratégie pour Watch for Rolling Rocks également, A est déjà enfoncé au début du niveau, et dans le run complet cette entrée est comptée comme la continuité d’un A press précédent

Transport et élévation du Scuttlebug

  • Le Scuttlebug Transportation exploite le fait que la position de home du Scuttlebug est mise à jour lorsqu’il entre en collision avec Mario
    • le Scuttlebug patrouille dans un certain rayon autour de son home
    • quand Mario entre dans ce rayon, il effectue une lunging attack
    • si le Scuttlebug heurte Mario, la position du Scuttlebug au moment de la collision devient son nouveau home
  • Le transport a des contraintes
    • le Scuttlebug ne peut pas sortir de sa native room et reste bloqué aux door
    • s’il avance contre un wall depuis une position trop en dessous de son home actuel, il peut disparaître ; il faut donc éviter cela pendant le transport
  • L’objectif est de déplacer le Scuttlebug et son home près du corner situé sous l’étoile Watch for Rolling Rocks
  • Le Scuttlebug Raising permet de faire monter le Scuttlebug à l’aide de la zone d’activation de la rolling rocks room
    • la salle et les object à l’intérieur ne sont actifs que lorsque Mario se trouve dans la rolling rocks room ou dans la petite yellow region à l’extérieur de la door
    • si Mario est ailleurs, la salle apparaît noire et les object deviennent invisibles et immobiles
    • même lorsqu’il est inactif, le Scuttlebug peut se tourner vers Mario et commencer une lunge
    • si Mario entre dans la yellow region pour activer le Scuttlebug, puis ressort au moment où le Scuttlebug atteint le sommet de sa trajectoire, celui-ci ne retombe pas et reste figé à cette hauteur
    • en répétant ce processus, on peut continuer à faire monter le Scuttlebug
  • Le rayon de détection du Scuttlebug n’est pas une sphère mais un cylinder s’étendant à l’infini vers le haut et le bas ; on peut donc continuer à provoquer des lunge quelle que soit sa hauteur
  • Dans cette stratégie, on amène le Scuttlebug à effectuer des lunge vers son home pour qu’il reste juste au-dessus du corner
    • si Mario l’active en étant dans le rayon du Scuttlebug, le Scuttlebug peut faire une lunge vers Mario et se déplacer en direction de la door
    • cette méthode est plus rapide, mais elle n’est pas utilisée ici car cette stratégie requiert une position proche du corner

Misalignment et gain de hauteur

  • Au-dessus du corner se trouve une propriété appelée misalignment
    • dans le code du jeu, le traitement du floor collision checking et celui du wall collision checking diffèrent
    • il en résulte qu’à l’intérieur d’une zone de 1x1 unit, Mario peut ne pas être repoussé par le wall et passer sous le floor
  • Si Mario se trouve à moins de 79 units sous le floor, il est repositionné par snap au-dessus du floor
  • À la fin, la stratégie combine le rebond sur le Scuttlebug et un ground pound avec le misalignment afin d’obtenir suffisamment de hauteur pour monter sur la plateforme de Watch for Rolling Rocks

Hyper Speed Walking et déplacement dans les Parallel Universe

  • La vitesse nécessaire est produite avec le Hyper Speed Walking
    • sur une slope trop raide, Mario ne peut normalement pas rester immobile et glisse
    • sur la portion sous-marine d’une slope immergée dans une eau peu profonde, si l’on tente de courir uphill, Mario recule tout en gagnant continuellement de la vitesse, sans borne supérieure
  • En temps normal, il est difficile d’accumuler beaucoup de vitesse car Mario tombe dans l’eau ou atteint la fin de la slope, mais on peut accumuler de la vitesse sur place en utilisant une gate et l’out-of-bounds
    • le bas de la gate est traité comme un ceiling
    • si Mario tente de se déplacer trop près juste sous un ceiling, le jeu refuse ce déplacement
    • après avoir gagné un peu de vitesse, si l’on tourne l’angle de façon que la position suivante prévue traverse un wall vers l’out-of-bounds, le jeu ne place pas Mario en out-of-bounds et le laisse à sa position actuelle
    • comme l’out-of-bounds se prolonge indéfiniment, on peut accumuler de la vitesse plus longtemps qu’avec le ceiling de la gate
  • Dans cette stratégie, on ouvre la gate, on produit une partie de la vitesse avec le ceiling de la gate, puis on tourne l’angle vers l’out-of-bounds pour accumuler le reste
  • L’accumulation de vitesse prend environ 12 heures

PU, QPU et syncing speed

  • La position de Mario est un nombre en virgule flottante, mais le test de collision avec les floor triangles la convertit en short
    • la fractional portion est tronquée
    • les nombres trop grands ou trop petits sont ramenés dans l’intervalle de -32768 à 32767 via l’opérateur modulo
  • Même si la position réelle sort de cet intervalle, la position utilisée pour la détection du floor revient en boucle dans la boîte d’origine
    • même s’il n’y a pas de terrain à la position réelle de Mario, si la position utilisée pour la détection du floor se trouve au-dessus d’un terrain, le jeu considère que Mario est au sol
    • ces zones qui se comportent comme des copies de la map d’origine sont appelées Parallel Universe, ou PU
  • Dans les PU, il n’y a pas de graphismes, ni object, enemy, coin, star ou wall comme les elevator et les item block
  • Sur console N64, si la camera suit Mario dans un PU, le jeu peut crash ; cette stratégie maintient donc la camera sur la main map pour éviter le crash
  • Le jeu vérifie à chaque quarter step du déplacement de Mario s’il se trouve sur le floor
    • avec un simple déplacement en PU, il faut traverser 4 PU d’un coup pour que chaque quarter step tombe sur du terrain
    • cette distance de 4 PU est appelée QPU
  • La speed réelle et la speed de facto utilisée pour le déplacement sont différentes
    • la speed de facto correspond à une partie de la speed réelle, déterminée par la steepness de la slope
    • plus la slope est raide, plus la speed de facto est faible à speed égale
  • Une syncing speed est une speed pour laquelle la distance QPU et les quarter step tombent juste
    • la plus faible syncing speed est celle qui permet de parcourir exactement 1 QPU
    • ses multiples sont également des syncing speed et permettent de traverser plusieurs QPU d’un coup
    • chaque slope possède son propre ensemble de syncing speed
  • Dans l’exemple du déplacement en PU de Secret Aquarium, il fallait satisfaire successivement les syncing speed de plusieurs slope ; il fallait environ 12 heures pour atteindre la première syncing speed et environ 25 heures pour atteindre la seconde
  • L’itinéraire de Watch for Rolling Rocks est conçu pour fonctionner avec 12 heures d’accumulation de vitesse au lieu de 25
    • le path qui remonte depuis le lake est constitué de dizaines de floor triangles avec des slope différentes
    • parmi eux, six triangles, de T1 à T6, ont été choisis, avec une steepness strictement décroissante
    • la hauteur de ces six triangles couvre sans trou toute la distance verticale nécessaire du bas vers le haut
    • en utilisant ces triangles dans l’ordre, il a été possible d’établir un plan d’itinéraire basé uniquement sur la première syncing speed de la slope initiale

Itinéraire final et obtention de l’étoile

  • L’itinéraire de base commence sur la slope de Hyper Speed Walking, remonte le path au-dessus du lake, emprunte 2 elevator, atteint la plateforme d’Amazing Emergency Exit, puis est lancé vers la plateforme de Watch for Rolling Rocks
  • Pendant le déplacement en PU, si la speed est légèrement inférieure à la syncing speed, le mouvement est en relative forward ; si elle est légèrement supérieure, il est en relative backward
  • Si l’angle s’écarte ne serait-ce qu’un peu d’une cardinal direction, le QPU distance amplifie fortement le mouvement latéral
  • La gestion de l’alignement QPU est essentielle
    • la grille correspondant à des multiples de 4 PU est appelée la grille QPU
    • si Mario se trouve sur cette grille, il est en état de QPU aligned
    • les autres déplacements positifs en PU nécessitent des conditions spéciales comme l’out-of-bounds ou un changement de slope
    • si Mario devient QPU misaligned, il peut être difficile de revenir sur la main map
  • Sur le lake path, sur chacun des triangles T1 à T6, la speed est d’abord abaissée près de la syncing speed de cette slope, puis Mario se déplace uphill avant de passer au triangle suivant
    • l’alignement QPU change à chaque transition entre triangles, mais l’itinéraire est conçu pour que ces écarts se compensent à la fin et que Mario redevienne QPU aligned
    • sur le sixième triangle, Mario s’approche de la main map en zigzag
  • Comme il n’y a pas d’object dans les PU, les elevator doivent être utilisés après le retour sur la main map
  • La raison pour laquelle A reste maintenu est de pouvoir appuyer sur B afin d’effectuer un petit kick
    • sans kick, Mario traverse l’elevator
    • avec un kick, Mario peut prendre l’elevator et gagner de la hauteur
  • Le dernier déplacement consiste à faire un kick sur la plateforme d’Amazing Emergency Exit, puis à tourner la direction pour être lancé vers le Scuttlebug
    • ce mouvement produit un déplacement de 10 PU vers la droite et de 3 PU vers le bas ; il faut donc se placer à l’avance 3 PU au-dessus et 10 PU à gauche afin de terminer sur la main map
    • en même temps, la position relative sur la map est aussi ajustée pour rendre possible le déplacement final
  • Le Scuttlebug s’active dès l’entrée dans la version PU de la salle, et il faut l’atteindre avant qu’il ne tombe trop bas ; l’approche finale ne laisse donc que quelques frame de marge
  • Au final, le rebond sur le Scuttlebug et le ground pound dans le misalignment donnent suffisamment de hauteur pour monter sur la plateforme de Watch for Rolling Rocks, et l’étoile est obtenue en 0,5 A presses

1 commentaires

 
GN⁺ 2023-07-16
Avis sur Hacker News
  • Je me demande si ce n’est pas la vidéo YouTube parfaite
    En arrière-plan, il y a une super bande-son de Mario et des images de gameplay, des graphiques faits maison montrent visuellement ce qui se passe, et la voix off explique ce qu’on voit à l’écran
    Elle s’appuie même sur d’autres vidéos YouTube et sur des commentaires, elle est incroyablement détaillée et érudite, et elle n’essaie rien de vendre
    On sent qu’elle a été faite par passion plutôt que pour les vues ; pour moi, c’est le sommet de YouTube

    • Les vidéos de HealthyGamerGG me font un peu le même effet
      Elles naviguent entre neurochimie/biochimie, psychologie, jeux vidéo, comportement humain, culture et religion, et même la façon dont tout cela a évolué avec le temps, avec beaucoup de détail et de savoir
      Pour moi, c’est ça le sommet de YouTube
    • Ce serait peut-être plus facile à comprendre en disant : « on commence le niveau en maintenant le bouton A enfoncé, puis on n’appuie plus jamais sur A »
    • Estimez-vous heureux de ne pas être trop sensible à la musique de fond
      Moi, j’ai du mal à la supporter
  • La profondeur des connaissances et la capacité d’analyse de pannenkoek sont vraiment stupéfiantes
    À force de regarder ses vidéos sur SM64, je suis devenu exigeant, et il est très difficile de retrouver un niveau comparable de rigueur et de qualité de production sur d’autres jeux
    Ce qui s’en est le plus approché jusqu’ici, c’est une vidéo sur la manière dont des speedrunners ont maîtrisé l’aléatoire dans une énigme de Wind Waker
    https://youtu.be/1hs451PfFzQ

    • https://www.youtube.com/watch?v=FnKWKICUqWU traite du speedrun du test Break the Target de Peach dans Smash Bros Melee, et il y a pas mal d’éléments complètement dingues, y compris la prise en compte de l’aléatoire ; ça vaut le coup d’œil
      AsumSaus a aussi beaucoup de vidéos qui dissèquent les mécaniques étranges de Melee
      Elles sont presque toutes excellentes, donc c’est difficile de choisir, mais https://www.youtube.com/watch?v=rA8kpvTBh8Q et https://www.youtube.com/watch?v=9fo0cPmj4VA sont de bons points de départ
    • Pour les jeux rétro, Retro Game Mechanics Explained est exactement la chaîne qu’il vous faut
      Elle couvre l’organisation de la mémoire, le fonctionnement de bugs involontaires, les jeux d’instructions CPU, ce qui se passe au niveau matériel, etc.
      Je la recommande vivement
      https://www.youtube.com/@RGMechEx
    • Il existe aussi une chaîne qui analyse Paper Mario 64 avec une profondeur comparable
      https://www.youtube.com/channel/UCYDnJiF0_RqSjkjvjRbG1tA
      Sa série qui fait crasher Paper Mario de toutes sortes de façons bizarres est notamment devenue un mème
      Dommage qu’elle ne soit plus active depuis 2020
    • Pour TF2, shounic (https://youtu.be/5m7V9zWlYdM) pourrait aussi vous plaire
      Les vidéos sont courtes, mais l’analyse est bonne
    • Il y a aussi quelques vidéos extrêmement impressionnantes sur les serveurs Minecraft SciCraft et ZipKrowd, qui creusent très profondément dans les mécaniques internes de Minecraft pour réaliser leurs constructions
      Je recommande vivement https://youtu.be/6sPS4yqC72I ou https://youtu.be/TM7SutJyDCk
  • C’est du porno de nerd à l’état pur, et c’est excellent
    Les explications du genre « la détection de collision du jeu prend en fait des valeurs en virgule flottante et les convertit en short » chatouillent bizarrement le cerveau
    Le fait qu’un jeu comme SM64 continue de fasciner et de captiver les gens des décennies après sa sortie en dit long
    On dirait qu’il y a de moins en moins de jeux grand public actuels qui suscitent une telle passion chez les joueurs

  • L’histoire complète du challenge du bouton A
    https://www.youtube.com/watch?v=yXbJe-rUNP8
    C’est une vidéo de plus de 5 heures, à lancer en fond ou à regarder pour passer le temps
    Le volume de connaissances et le niveau d’exploitation de bugs que ces gens montrent sont absurdes

    • Je l’ai regardée jusqu’au bout récemment, et je la recommande vivement à quiconque s’y intéresse ne serait-ce qu’un peu
      Certaines des découvertes sont vraiment folles, et c’est stupéfiant de voir à quel point beaucoup d’éléments ne tiennent qu’à un fil
      Bismuth est, de manière générale, un YouTuber de grande qualité
  • J’ai complètement éclaté de rire au passage sur « accumuler de la vitesse pendant 12 heures »
    https://youtu.be/kpk2tdsPh0A?t=640
    Le raisonnement est vraiment limpide
    J’aime le fait qu’il y ait autant de gens incroyablement intelligents sur Internet

    • Vu sous un autre angle, ça peut aussi donner une impression de gâchis
      Bien sûr, chacun est libre d’utiliser son cerveau comme il l’entend, mais se plonger à ce point dans un bug extrêmement obscur d’un jeu d’il y a environ 30 ans pour prouver qu’une prouesse impossible à exécuter réellement sans assistance d’outils est techniquement possible, ça me paraît vraiment étrange
      La vidéo d’explication est excellente, mais l’objectif sous-jacent me semble absurde
  • Si vous aimez les histoires d’univers parallèles, je recommande vivement de regarder le speedrun 1-Key de SM64 https://youtube.com/watch?v=iUt840BUOYA, puis l’explication de Bismuth https://youtube.com/watch?v=wjge1bVobN0
    C’est une prouesse technique vraiment étonnante, largement fondée sur les recherches de pannenkoek2012

    • Les termes que les joueurs ont inventés pour décrire ce qui, au fond, n’est qu’un bug du jeu, sont amusants
      Les univers parallèles et tout le cadre qui les entoure viennent entièrement du débordement d’un entier 16 bits dans le code de vérification du sol
      Mario 64 stocke normalement les positions en virgule flottante, mais les convertit en entiers 16 bits pour la détection de collision
  • Vraiment impressionnant
    Je suis toujours admiratif quand je vois des gens portés par une passion si forte qu’ils y consacrent un dévouement aussi extrême
    Il est rare que j’aie ressenti une passion capable de me faire travailler aussi dur
    Parfois, je me dis que ce serait bien que ces personnes mettent leur talent et leur énergie au service de choses vraiment importantes, comme soigner des maladies ou réaliser des percées scientifiques
    Au moins, elles pourraient avoir le sentiment que leur immense potentiel n’a pas été gâché
    Rien qu’avec l’effort investi dans cette vidéo, il y aurait probablement eu de quoi produire un bon article de recherche
    J’aimerais avoir ce niveau de motivation dans mon propre travail, mais dans l’ensemble, je suis surtout admiratif

  • J’aime cette vidéo
    Plus récemment, il a aussi fait une vidéo sur des aspects techniques précis de la N64, et attention à la virgule flottante
    https://youtu.be/nYDmBdUalgo

    • Cette vidéo pourrait presque servir de support d’introduction aux générateurs pseudo-aléatoires et à la virgule flottante IEEE dans un cours d’informatique
  • Vous auriez d’autres recommandations de vidéos terrier de lapin comme celle du post original ?
    Le sujet m’importe peu
    J’aime ce genre de vidéos qui montrent jusqu’où on peut creuser quelque chose
    Ma préférée du moment est https://youtu.be/_hjRvZYkAgA

    • J’ai récemment trouvé assez amusante cette vidéo où quelqu’un se met à décompiler un vieux jeu Lego sur PC dont je me souvenais depuis l’enfance : https://www.youtube.com/watch?v=MToTEqoVv3I
    • Marcel Vos a pas mal de vidéos YouTube sur les mécaniques de Roller Coaster Tycoon, en particulier quand elles sont poussées à l’extrême
      https://youtu.be/KVgoy_a_gWI
    • Il y a aussi une excellente vidéo sur le fait de toujours battre Pokémon avec le même ensemble d’entrées
      https://youtu.be/6gjsAA_5Agk
    • Les vidéos de speedrun de Karl Jobst sont très bonnes
  • Cette vidéo explique aussi ce qu’est une entrée A à 0,5 et pourquoi on s’en soucie
    Comme Mario 64 ne tient pas compte de l’action de relâcher le bouton, les runners ne la comptent pas séparément
    Puisqu’on peut toujours choisir de ne pas relâcher A, dans un run au nombre minimal d’entrées A, on ne relâche A que pour pouvoir appuyer de nouveau dessus
    Dans un commentaire en direct, on peut sans doute expliquer brièvement ce que “signifie” 0,5 A, mais sans cette explication, on risque fortement de se demander pourquoi c’est important

    • En ne lisant que ça, quelqu’un qui ne connaît pas bien le jeu ne comprend pas pourquoi il ne suffit pas de garder A enfoncé lors du dernier appui
      Il faut aussi expliquer que Mario se comporte différemment quand A est maintenu enfoncé que quand A ne l’est pas
    • Plus précisément, le jeu exige parfois que A soit pressé à nouveau, mais dans d’autres cas, il suffit que A soit déjà maintenu enfoncé pour qu’une action se déclenche
      Si, dans le premier cas, on appuie sur A sans le relâcher, alors le second cas peut emprunter cette entrée
    • « Mario 64 ne tient pas compte de l’action de relâcher le bouton », est-ce vraiment exact ?
      S’il tient compte de l’état maintenu, comme pour planer en l’air, alors il tient forcément aussi compte de l’état non maintenu, comme le fait d’être en l’air sans planer, non ?
      Pour passer de l’état “en train de planer en l’air” à l’état “en l’air sans planer”, il faut relâcher le bouton
      Est-ce que je comprends mal ?
      Je n’ai joué à M64 qu’environ 5 minutes, mais il est dans ma liste pour un jour, et je continue d’essayer d’y accrocher mes enfants pour me créer du temps pour y jouer aussi
    • Il tient bien compte du relâchement du bouton
      Pour sauter une deuxième fois, il faut d’abord relâcher le bouton
      Le 0,5 correspond en fait plutôt à l’idée qu’une seule entrée A se prolonge sur plusieurs niveaux
    • keydown + keyup = keypress
      Vu de l’extérieur, on se dit “c’est quoi ce 0,5, au juste ?”, mais au final ce n’est qu’une question de sémantique