Le Reverse Engineering de Vectorman Playstation 2
Pour en apprendre davantage sur Vectorman Playstation 2 (son histoire, son développement et bien plus) et pour découvrir 11 prototypes et documents du jeu, rendez-vous sur la page d'accueil du projet de préservation lié au titre de Pseudo Interactive : Les 11 prototypes et documents de Vectorman Playstation 2 : la transition de la 2D à la 3D de notre meilleur ami le robot de SEGA
L'objectif du Reverse Engineering, pour un jeu vidéo, est d'expliquer et analyser par déduction son fonctionnement, ses mécanismes, la manière dont il a été développé et les dispositifs ou outils utilisés pour le concevoir.
Avant l'apparition d'Unreal Engine ou d'Unity, les studios de développement créent, bien souvent, leurs propres moteurs et outils (éditeur d'animation, éditeur de niveaux etc.). Des teams se servaient de logiciels génériques de haut niveau comme Lightwave (imagerie de synthèse) ou 3ds Max Biped (animation) pour en citer quelques-uns. Le Reverse a pour but de connaître les programmes dont disposaient les développeurs pour la création de leur jeu, et va savoir, pouvoir les reproduire...
Dans toutes les productions vidéoludiques, il y a beaucoup de différences entre les ambitions et le jeu final. Développer un titre, c'est aussi savoir couper, bien souvent des niveaux, des modes de jeu et des personnages. Ce n'est pas parce que quelque chose a été supprimé 8 mois avant la sortie du jeu que ça ne peut pas se trouver dans ses fichiers. Parfois, les données n'ont pas été totalement effaçées et il subsiste des traces sous la forme de script, de codes ou de textures. L'idée est d'étudier, en émettant des hypothèses, ce qui n'a pas été implanté dans le jeu mais pourtant visible dans ses fichiers.
Les résultats de la compréhension de la structure et du fonctionnement d'un jeu peuvent déboucher sur d'amusantes possibilités. Dans certains cas de figure, le titre pourra être modifié (ajout de mods) pour y incorporer de nouveaux modèles réalisés par ses fans. Des Debug Menus jusqu'ici inactifs pourront aussi être réactivés.
La Rétro-Ingénierie a également pour mission de démonter un jeu et extraire le moindre de ses fichiers afin d'obtenir ce que les programmeurs avaient sur leur envirnnement de travail avant de compiler leur titre. Pour contourner les limitations matérielles des consoles, ils rusent d'inventivité pour que le jeu tienne, par exemple, sur un disque limité en capacité (environ 1 GO pour un GD-ROM Dreamcast). Ils compartimentent des textures, des modèles, des fichiers d'animations (tout ce qui fait un jeu vidéo) dans des sortes de dossier compressés usant un format unique que seul le studio se servait, le même principe que les fichiers .zip utilisés de nos jours par les particuliers. Il est donc important de comprendre le format d'archives prioritaires adopté par l'équipe de développement afin de dégager absolument toutes les données liées au jeu.
Tous les jeux, dans un monde parfait, que ce soit en version prototypée ou finale, devraient passer par l'étape du Reverse Engineering. Comme c'est un domaine d'expertise qui demande des compétences spéciales et énormément de temps, rares sont les individus pouvant s'adonner à cette pratique. Le rétro-ingénieur, des joueurs avant tout, fonctionnent à l'affecte. Ils auront plus de facilité à travailler sur leurs jeux de cœur. Il est donc primordial de bien sélectionner les bêtas et les jeux susceptibles de receler des secrets. Les Unreleaseds sont une cible privilégiée pour ces passionnés !
Les découvertes faites pour Vectorman PS2
Lemonhaze, un des fondateurs du collectif Team Wulinshu, s'est chargé du Reverse de Vectorman Playstation 2. Ingénieur logiciel et programmeur de jeux de profession, c'était la personne idéale pour faire parler ce titre de Pseudo Interactive.
Cette page ne rentre pas dans la technique et en détail sur le travail de rétro-ingénierie entrepris par Lemon. Il en parle mieux que moi sur les articles complémentaires de son site internet consacré à l'analyse des fichiers de Vectorman Playstation 2.
Reverse Engineering Adventures #1: A Foundation : https://wulinshu.com/2023/12/30/reverse-engineering-adventures-1-a-foundation/
Vectorman: A Reverse Engineering Story : https://wulinshu.com/2023/12/30/vectorman-a-reverse-engineering-story/
Reverse Engineering Adventure #2: Compressed Data : https://wulinshu.com/2023/12/30/reverse-engineering-adventures-2-compressed-data/
Le Debug Menu inactif de certains prototypes
Le Debug Menu (son mode d'emploi est détaillé ici) des prototypes du 17 juin 2003 et du 7 mai 2003 n'était pas présent dans le menu pause du jeu comme dans les neuf autres builds de Vectorman Playstation 2. Il était tout bonnement désactivé. Un correctif a été apporté à l'exécutable des deux bêtas pour enfin accéder aux très nombreuses options de débogage de ces versions les plus récentes de VM.
DrawPathMap
ShowPackCount
DrawVrepTree
Le Debug Menu de la version finale de Cel Damage Ps2
Vectorman et Cel Damage profite du même moteur de Pseudo Interactive codé par David Wu, un talentueux programmeur décédé en 2022. Il y a des corrélations entre les deux jeux, ils possèdent la même structure. En appliquant pour Cel Damage la méthode de réactivation du Debug Menu de Vectorman, les fans du jeu en Cell Shading de PI peuvent désormais visualiser et manipuler l'état interne du soft, plus d'informations sur la page dédiée de Cel Damage : Cel Damage Playstation 2 et son Debug Menu.
Modification des armes
Vectorman PS2 peut être modé. Les statistiques et attributs des armes sont modulables. Pour ce faire, le fichier "fextract" doit être ouvert avec "notepad" puis les caractéristiques de l'équipement modifié. Pour tester l'ISO altérée du prototype du 7 mai 2003 avec un chargeur de 2147483647 munition pour le lance flamme (Incinerator) au lieu de 119 et balles illimitée, téléchargez le mod ci-dessous :
// Weapon Tuning File by Jason Hasenbuler for Vectorman
// Help notes by John Harley
//-----------------------------------------------------------------------------
// name ==============================> Name of the weapon
// firingRate ======> Number of bullets fired per second – can include decimals, higher values are more CPU intensive.
// continuousFire ======> Holding down the button does or does not fire a continuous stream of bullets at the max fire rate.
// ammunitionCost=====================> This is the cost per round of ammo in the clip. Since a round of ammo can have more than one projectile count, [ammunitionCost/projectileCount = photon cost per pellet]
// aimConeAngle ======> The spread that bullets will leave the gun at in degrees when the player is completely stable.
// projectilePid ======> The filename of the bullet that is used.
// projectileSpeed ===================> The speed of the bullet through the air in meters per second. Higher numbers are more CPU intensive and can lead to errors.
and more...
Un hypothétique portage XBOX
Un portage Xbox semble avoir été à l'étude. Aucun élément ne permet de savoir si son développement avait débuté en parallèle de la version Playstation 2. Les programmeurs avaient une configuration de contrôleur pour la Xbox et des SDKs lié à la première console de Microsoft dans les chemins d'accès.
C:\Program Files\Microsoft Xbox SDK\Xbox\Bin;C:\Program Files\Microsoft.Net\FrameworkSDK\Bin;C:
execute_psc "controls_xbox" // runs script that binds controls
Le rôle d'Excel
Certaines builds peuvent envoyer des informations sur les performances du jeu à une feuille de calcul Excel, ce qui est étonnant.
sub_249AE0(dword_3B5950, "g_ProfileWrite", "Writes profile snapshot to an excel spreadsheet", sub_1CBC40, 0LL, 0LL);
Des notes pour le code source ou pour les mises à jour du moteur de PI
Des commentaires de développeurs à l'intérieur des fichiers du jeu sur le développement du code source et sur le moteur.
---
warpers now have an actuate_priority similar to dofs.
set_pdk() requires an actuate priority.
before applying a deform you can use test_actuate(), or actuate() to check to see if you
have priviledge to actuate the warper.
// this will apply a non-exclusive actuate
// it will not prevent subsequent calls
if( warp->test_actuate(frame::ap_default) )
warp->apply_deform();
// this will apply an exclusive actuate
// it will prevent subsequent calls if the specified priority is higher
// than that of subsequant calls
if( warp->actuate(frame::ap_default) )
warp->apply_deform();
---
Nov 17, 1999
---
Changes:
Sasha's cupid is in a car
updates to FFD's to make system more general.
The following are effectsed
car warping when drivings
flatten and overinflate
dent and overinflate
Improved dent Algorithm to produce more interesting dents
(dent happens when you hit something at a moderate speed, or when hit by the boxing gloves)
Camera control tightened a little (it moves faster)
---
QA:
Lightning Cloud:
{
Timing:
What do you think of the overall timing of the weapon?
What do you think of the rate of fire?
What do you think of the speed of the projectiles?
Sound Hooks:
What do you think of the timing of the "placeholder" sounds?
What do you think of the number of sounds?
What do you think of the placeholder sounds themselves--do they at least resemble what final sounds would be?
Interaction/Relation:
What do you think of the way it works with other weapons?
How does this weapon compare with other weapons?
Gameplay/Strategy:
When you picked up the weapon for the first time, did you know what it was?
When you picked up the weapon for the first time, did you know how to use it?
When you used the weapon for the first time, was it funny?
Is the weapon fun to use?
Is there a weapon that, for you, fulfils the same purpose but is more fun? Or less fun? Which?
Art:
What do you think of the mesh and textures?
What do you think of the FX?
}
and more...
La complexité du langage de script de David Wu
Cela montre vraiment à quel point le langage de script de David Wu est complexe. Il s'agit de la mise en place de la physique d'un objet dans le jeu. C'est très complexe parce que c'est généralement quelque chose qui est codé en dur dans le moteur. Au lieu de cela, c'est dans un script, que nous pouvons tous voir et modifier.
// add a dof for warping
auto~watch.AddFunc(ed_dof,WarpDof)
// attach all verts to this dof
auto~watch.Root.SelectVertsTree()
auto~watch.warpDof.AttachSelected()
// orient s.t. X is pointing upwards, piWarps are more efficient this way
auto~watch.WarpDof.Lb.A.ZYX= 180.000 -90.000 -0.000
auto~watch.WarpDof.ffdSchema=1l // piWarp7
auto~watch.WarpDof.warpInherit=full // full warp inherit
auto~watch.teamId=16 DancingPlants
// Add a tree contact handler
auto~watch.AddFunc(dwTreeContact,treeContact)
// move it to the warp dof
auto~watch.treeContact.SetDof=warpDof
// rebuild lods and update edge rep
auto~watch.GenerateLods()
auto~watch.UpdateEdgeRep()
Des annotations drôle pour le système de sentiments (Debug Menu)
Certains prototypes possèdent une option du Debug Menu permettant de comprendre comment est réglée l'animosité des ennemis envers Vectorman, un système de sentiment en quelque sorte. Les annotations des développeurs sont cocasses. Vectorman n'aime pas être dérangé, il a besoin de son espace vital.
Textures non utilisée de Vectorman, Cel Damage et Full Auto 2
Comme souvent dans un jeu vidéo, que ce soit au format prototypé ou en version finale, des textures non utilisées n'ont pas été supprimée des fichiers du jeu. C'est le cas pour Vectorman Playstation 2 (en mauvaise qualité), Cel Damage PS2 et même Full Auto 2 PS3.
Dans le jargon, les "Splash Screens" (le nom d'un style d'écran spécifique) servent généralement à afficher, par exemple, le logo de l'application, de l'éditeur, du développeur, les informations sur les droits d'auteur et bien plus.
Le terme "Attract Mode" désigne un genre d'écran particulier utilisé initialement pour les jeux des systèmes Arcade. Ce qui se passe sur cet écran est censé attirer les gens vers les bornes d'Arcade lorsqu'ils passent à leurs côtés. Cette formulation est devenue coutumière dans l'industrie du jeu vidéo. Les "Attract Mode" peuvent être des vidéos, des scènes en 3D, des Autos-Demo et bien plus.
Les "Placeholder" sont, pour les assets graphiques, des textures utilisées provisoirement en attendant d'y insérer la bonne.
Texture de VM (Placeholder)
VM Splash Screen
VM Attract Mode
Premier nom de Cel Damage Ps2 ?
Manette PS3 de l'E3 (Full Auto 2)
Hommage à David Wu et le Team de Pseudo Interactive
Dans le prototype de Vectorman PS2 du 3 décembre 2003 (17:11:26), celui avec le "Inverted Roller Coaster", un texte défile à l'écran pendant la partie. LemonHaze a eu l'excellente idée de reformuler les énonciations en jeu afin de rendre hommage aux membres de Pseudo Interactive mais surtout à David Wu. Pour y parvenir, Lemon a dû créer un outil (avec beaucoup de code) le permettant. La tâche étant ardue, des restants du texte d'origine subsistent toujours.
Tribute to David Wu and PI Team
Changement du modèle de Vectorman PS2
Les développeurs de Pseudo Interactive envisageaient de rendre disponibles, sous la forme d'un bonus à déverrouiller, le modèle de Vectorman des builds 3.14 dans les environnements des prototypes Halo-Like. Nous avons essayé, pendant plusieurs mois, à intervertir les modèles du personnage des différentes bêtas de VM afin de réaliser le souhait de l'équipe de PI avec leur jeu. Nous y sommes parvenu mais pas dans le niveau désiré. Nous avons pu remplacé le modèle du prototype du 10 janvier 2003 par celui de la Vertical Slice (Sep 29, 2002). Qui ne voudrait pas jouer avec les premières allures de Vectorman dans le niveau présenté lors de l'E3 2003 ?
Le changement de modèle en vidéo
À savoir :
-
Lors de la finalisation des articles pour les 7 pages consacrées à Vectorman Playstation 2, nous avons pu rendre accessible le Debug Menu de Full Auto II PS3. Il était trop tard pour rajouter une huitième page à ce projet de préservation. Un article sera consacré prochainement au dernier jeu de Pseudo Interactive.
-
Le Debug Menu de Cel Damage HD (Playstation 4) est activable. La console PS4 étant trop récente, nous ne pouvons pas vous proposer son ISO modifiée.
Nous ne pouvons que remercier toute l'équipe de Pseudo Interactive (lien Mobygames de Full Auto Xbox 360) impliquée dans le projet Vectorman Playstation 2 pour avoir tenté la transition de la 2D à la 3D du plus célèbre robot de la Mega Drive. Nous ne pouvons qu'être désolé pour eux de ne pas avoir pu aller au bout de leurs envies et de leurs créations !
Les autres pages du projet de préservation consacré à Vectorman Playstation 2 :
-
L'histoire de Pseudo Interactive et plus d'informations, d'assets et d'artworks pour Vectorman PS2
-
Les premiers looks de Vectorman Playstation 2 et ses 4 prototypes
-
Le traitement Halo de Vectorman Playstation 2 et ses 5 prototypes
-
Le Reverse Engineering de Vectorman Playstation 2 et ses découvertes
-
Cel Damage Playstation 2 par Pseudo Interactive, le hack de son Debug Menu
Les projets de recherche et de Reverse Engineering entrepris sur d'autres jeux :
Remerciements :
-
à LemonHaze (de la Team Wulinshu) pour avoir fouiller les fichiers du jeu
-
à La Rétrogamerie pour la relecture du texte, les reformulations et sa correction
-
à Vince pour la correction anglaise de l'article
Prototypes semblables (Unreleased) : Agartha (DC) - Emulateur officiel Megadrive (DC) - Castlevania Resurrection (DC) - Half Life (DC) - Dalforce XOP (DC) - Flinstone (DC) - 4 x 4 Evolution PAL (DC) - Ring : L'Anneau des Nibelungen (DC) - Ecco 2 (DC) - Kyskrew (DC) - Propeller Arena (DC) - Geist Force (DC) - Scud Race Tech Demo Dreamcast - Shenmue 2 US (DC) - The Red Star (XBOX) - Heaven's Drive ( version japonaise de Burnout 1) pour PS2 - Jekyll and Hyde (DC) - The Grinch Jap (DC) - Worms Pinball (DC) - Quake 3 Arena version japonaise (DC) - Vectorman PS2
N'hésitez pas à regarder "les autres jeux annulés" que j'ai trouvés. Pour les plus curieux d'entre vous, j'ai créé une "liste de tous les unreleased de la Dreamcast".