Le podcast est quand même vachement moins sympa à regarder…

- Gallaxys, toujours aussi pertinent

Dojobar
L'émission de radio déjantée qui revient toutes les deux semaines !

Émission s23e05 − Rétro Fighterz
Le 1 mai 2024, par Mortal

Émission s23e04 − Unicorn Overlord
Le 22 avril 2024, par Mortal






L’historique du speed-run de The Legend of Zelda: Ocarina of Time (partie 3)

Ou l’on s’amuse à casser des textures et des maychamps !

Nous avons vu la dernière fois qu’il serait bien pratique de pouvoir zapper quelques séquences supplémentaires dans le jeu, notamment les donjons de Link enfant. Pour cela, les speed-runners ont eu recours à des bogues de textures et des bogues de collisions. Mais c’est quoi exactement ces bogues ? Nous allons les détailler avec des exemples très simples.

Une sombre histoire de collision

Nous allons commencer par voir ensemble, ce que c’est que le masque de collision (hitbox en anglais). Le plus simple pour cela est de repartir vers la 2D. Dans un jeu 2D, quand on veut qu’un projectile par exemple touche un ennemi, si l’on devait calculer cela au pixel de collision près (donc dès que le pixel du projectile touche le premier pixel de l’ennemi), la console passerait son temps à faire des calculs horriblement complexes sur les sprites des projectiles et des ennemis. Sans compter le faite que ses sprites peuvent être afreusement compliqués avec des rebords, des dévers, etc.

La solution est donc relativement simple : on va masquer la réalité et faire les calculs sur des formes plus simples, comme des rectangles ou des carrés. Calculer une collision entre deux carrés, c’est beaucoup plus facile qu’entre un tas de pixels et un autre tas de pixel. Voici un exemple avec Mega Man X :

ccs-5-0-03621300-1338602299_thumb.png

En rouge, c’est la hitbox du personnage. C’est sur cette base que la console va déterminer si le joueur touche un mur, un ennemi, un projectile ennemi. Comme tu peux le voir, même si elle est câlée sur le personnage, elle ne le recouvre pas exactement. C’est pour cela que l’on peut avoir le « nez » de Mega Man dans un mur ou que de temps en temps un projectile passe sur le haut de son « crâne ». Si ça ne touche pas la zone de collision, alors ça ne touche pas le personnage. Ce que l’on voit à l’écran, ne correspond donc pas forcément à la réalité à l’intérieur de la console.

Bien évidemment, on peut appliquer le même principe pour la 3D, ci-dessous un exemple avec Counter Strike: Source :

Hitbox.jpg

Un headshot sur un personnage peut arriver si l’on tire au-dessus de sa tête !

Bonjour le carambolage !

Maintenant que l’on sait à quoi correspond les hitboxes dans un jeu et comme nous l’avons vu dans les précédentes parties, la console recalcule une image tous les 1/60ème de seconde. Cela signifie donc que ce que voit le joueur « n’existe » que tous les 1/60ème de seconde. Le reste du temps, avant que l’image qui doit être affichée soit recalculée, les textures, les masques de collisions, etc n’existent tout simplement pas ! Ça peut paraître incroyable, mais c’est bien comme ça que fonctionne la machine : tant que l’emplacement de la texture n’est pas recalculée, elle n’existe pas. Et au moment où elle est recalculée, il peut se passer pas mal de choses entre la hitbox des murs et la hitbox du personnage par exemple.

Il t’est peut-être déjà arrivé de passer à travers un mur ou de « tomber » hors de la carte dans un jeu. Et bien, c’était un problème de collision ou de texture. Soit la hitbox de ton personnage a dépassé la hitbox d’un mur, pour une raison ou pour une autre (et du coup, le jeu a calculé ta position hors de la carte) soit la texture ne représentait pas un mur et tu es donc passé au travers !

C’est en utilisant des placements et des situations difficilement prévisibles par les programmeurs, que les speed-runners ont donc réussi à zapper de nouveau une grande partie du jeu, d’abord en trouvant le moyen de récupérer la Master Sword, sans avoir le Rubis Goron et le Saphir Zora, ensuite sans même faire le premier donjon ! Dans le premier cas, il s’agit d’un bogue de texture au niveau de la porte du Temple du Temps, qui permet, dans un cas bien précis, de passer complètement à travers le mur. Dans le second, il s’agit tout simplement de faire passer hors de la carte le Kokiri qui garde la sortie de la forêt Kokiri !

Des zones et du chargement

Juste un tout petit apparté pour discuter des zones de chargement. Une zone de chargement un bloc 3D, ou une texture 2D qui va lancer un script ou une cinématique dans le jeu. Il s’agit en fait d’une collision entre la hitbox du personnage et une hitbox invisible qui indique au jeu que le joueur a bien atteint la porte du boss, l’entrée d’un village, etc. Une des techniques les plus utilisées dans le speed-run de Majora’s Mask consiste justement à toucher des zones de chargement à des endroits non-prévues par les programmeurs (par au-dessus, par en-dessous, etc).

Bref, ces différentes techniques ont permis de ramener le temps effectif de la run à un peu moins de 1h40. C’est bien. C’est même très bien. Mais on peut faire encore mieux, en manipulant directement la mémoire de la console… dans le prochain article !


Par Mortal
Le 10 septembre 2012 | Catégories : Editos

Je le couperai au montage…
Voir les articles de Mortal

A voir également
Les trucs qu'on a rédigés avec nos petits doigts potelés

Vite vu : Morbid – The Lords of Ire
Le 18 mai 2024, par Jean-Fulgence

Dojo Hebdo 580 : du 6 au 12 mai 2024
Le 12 mai 2024, par Gueseuch


Dojo Hebdo 578 : du 22 au 28 avril 2024
Le 28 avril 2024, par Gueseuch

Dojo Hebdo 577 : du 15 au 21 avril 2024
Le 21 avril 2024, par Gueseuch

Dojo Hebdo 576 : du 8 au 14 avril 2024
Le 14 avril 2024, par Gueseuch

Dojo Hebdo 575 : du 1er au 7 avril 2024
Le 7 avril 2024, par Gueseuch


Dojo Hebdo 574 : du 25 au 31 mars 2024
Le 31 mars 2024, par Gueseuch

Dojo Hebdo 573 : du 18 au 24 mars 2024
Le 24 mars 2024, par Gueseuch


Dojobar
L'émission de radio déjantée qui revient toutes les deux semaines !

Émission s23e05 − Rétro Fighterz
Le 1 mai 2024, par Mortal

Émission s23e04 − Unicorn Overlord
Le 22 avril 2024, par Mortal