No edit summary |
No edit summary |
||
Line 61: | Line 61: | ||
** 4 octets - child_offset (JOBJ) | ** 4 octets - child_offset (JOBJ) | ||
** 4 octets - next_offset (JOBJ) | ** 4 octets - next_offset (JOBJ) | ||
** 4 octets - dobj_offset (DOBJ) | |||
** float3 - rotation_xyz (taille en octets d'un float à déterminer) | ** float3 - rotation_xyz (taille en octets d'un float à déterminer) | ||
** float3 - scale_xyz | ** float3 - scale_xyz | ||
Line 66: | Line 67: | ||
** 4 octets - transform_offset (inverse transform = méthode de nombres aléatoires ? mouvement ?) | ** 4 octets - transform_offset (inverse transform = méthode de nombres aléatoires ? mouvement ?) | ||
** 4 octets - Inconnu | ** 4 octets - Inconnu | ||
Note : l'arborescence est cumulative sur les transformations pour les relations parents->enfants | |||
* DOBJ_DATA : liste chaînée qui permet de récupérer l'ensemble des materials & mesh pour le JOBJ auquel il est lié | |||
** 4 octets - Inconnu | |||
** 4 octets - next_offset - prochain DOBJ | |||
** 4 octets - mobj_offset - material ? | |||
** 4 octets - dobj_offset - mesh ? | |||
* MOBJ_DATA : Contient les textures & informations sur les couleurs des Materials | |||
** 4 octets - Inconnu | |||
** 4 octets - Flags Inconnus | |||
** 4 octets - tobj_offset - offset de texture - peut être invalide s'il n'y a pas de texture pour le material | |||
** 4 octets - material_offset - couleurs des materials ? | |||
** 8 octets - Inconnu | |||
* MATERIAL_COLORS : (material_offset) | |||
** 4 octets - Couleur Inconnue - diffuse? | |||
** 4 octets - Couleur Inconnue - ambient? | |||
** 4 octets - Couleur Inconnue - specular? | |||
** float - Inconnu | |||
** float - Inconnu | |||
* TOBJ_DATA : Informations de Textures (0x5c) | |||
** 19 * 4 octets - Inconnu [19] | |||
** 4 octets - image_offset - image header information | |||
** 4 octets - palette_offset - palette header information | |||
** 2 * 4 octets - Inconnu | |||
* Structures COLL_DATA : (données de collisions) | * Structures COLL_DATA : (données de collisions) |
Revision as of 21:07, 8 February 2022
Cette section est en cours de rédaction.
Des recherches sont encore nécessaires et certains paragraphes peuvent être faux.
Modèle Gotcha Force
Les modèles Gotcha force fonctionnent comme ceux du jeu Smash Bros investigué par sa communauté.
Les modèles sont des fichiers HSD de la library Hal SysDolphin.
Header
Le header ce compose de la position du fichier HSD puis contient une location de suite de flags et la liste des armatures.
En 0x0 on retrouve l'offset 0x100 menant au fichier HSD.
En 0x4 on retrouve l'offset 0x20 menant à la liste des flags des armatures. Flags qui sont Inconnu à ce jour. Les flags sont en u8 pouvant aller de 00 à FF.
En 0x8 on retrouve l'offset 0xC0 menant à la liste des armatures.
Les fichiers _mdl se retrouvent dans les pzz des borgs (plxxxx.pzz) en position 004 à 009 ainsi que les fichiers pl*_mdl.arc. Il s'agit d'un format de fichier relatif au fonctionnement de la lib HSD utilisé dans plusieurs jeux par Capcom. L'usage d'un script est nécessaire pour référencer les fichiers éligibles au format _mdl dans l'ensemble de l'AFS data et dans les sous fichiers des pzz.
Pour commencer, il s'agit de synthétiser les investigations de la commu Super Mario Smash Melee et de les traduire. HSDRaw, un éditeur 3D dotnet de ce format est instable sur mon Windows (segfaults même sur SSBM -> fichiers spécifiés comme bien géré dans la dernière release des sources - sans pouvoir investiguer plus) et ne permet pas d'éditer les fichiers. Par contre, il est prouvé qu'un edit des _mdl pour commencer à l'offset 0x100 (celui ou on a la taille totale du fichier en big endian) permet de visualiser le fichier sur HSDRaw et d'avoir le rendu 3D du Borg (click sur le premier dossier JOBJ - puis le JOBJ dedans et double click sur le noeud en violet.
Les offsets trouvés après le début du Data Block (DB) sont relatifs au début du DB. La table de relocs est un tableau d'offsets de 4 octets (relatif au DB) permettant de traduire en adressage absolu les offsets des structures lors du chargement mémoire. La table de reloc permet par exemple de délimiter les structures du fait qu'il est peu probable qu'un offset pointe au milieu d'une structure.
Le format dat/usd sur ssbm se découpe en plusieurs blocks :
- Header - 0x20 octets - unsigned big endian
- 4 octets - Taille totale du fichier
- 4 octets - Taille du Data block
- 4 octets - Nombre d'entrée dans la Table de relocs
- 4 octets - root0_count
- 4 octets - root1_count
- 12 octets - Pad ? à voir de manière scripté si des valeurs apparaissent à ces offsets
- Data block : (JOBJ, COLL_DATA, ?)
- Ces structures sont détaillée plus loin ci-dessous.
- Relocation Table :
- Tableau d'offsets de 4 octets - Offsets des structures dans le DB.
- Root Nodes (2) :
- Tableau de taille 8 * root0_count
- 4 octets - root_offset - relatif au DB
- 4 octets - string_table_offset - relatif à la StringTable
- Tableau de taille 8 * root1_count
- 4 octets - root_offset - relatif au DB
- 4 octets - string_table_offset - relatif à la StringTable
- Tableau de taille 8 * root0_count
- String Table :
- Suite de strings terminées par Null au nombre de root0_count + root1_count
Structures rencontrées dans le DB :
- Structures JOBJ pointées par les listes dans Root Nodes (0x40 octets)
- 4 octets - Inconnu
- 4 octets - flags
- 4 octets - child_offset (JOBJ)
- 4 octets - next_offset (JOBJ)
- 4 octets - dobj_offset (DOBJ)
- float3 - rotation_xyz (taille en octets d'un float à déterminer)
- float3 - scale_xyz
- float3 - translation_xyz
- 4 octets - transform_offset (inverse transform = méthode de nombres aléatoires ? mouvement ?)
- 4 octets - Inconnu
Note : l'arborescence est cumulative sur les transformations pour les relations parents->enfants
- DOBJ_DATA : liste chaînée qui permet de récupérer l'ensemble des materials & mesh pour le JOBJ auquel il est lié
- 4 octets - Inconnu
- 4 octets - next_offset - prochain DOBJ
- 4 octets - mobj_offset - material ?
- 4 octets - dobj_offset - mesh ?
- MOBJ_DATA : Contient les textures & informations sur les couleurs des Materials
- 4 octets - Inconnu
- 4 octets - Flags Inconnus
- 4 octets - tobj_offset - offset de texture - peut être invalide s'il n'y a pas de texture pour le material
- 4 octets - material_offset - couleurs des materials ?
- 8 octets - Inconnu
- MATERIAL_COLORS : (material_offset)
- 4 octets - Couleur Inconnue - diffuse?
- 4 octets - Couleur Inconnue - ambient?
- 4 octets - Couleur Inconnue - specular?
- float - Inconnu
- float - Inconnu
- TOBJ_DATA : Informations de Textures (0x5c)
- 19 * 4 octets - Inconnu [19]
- 4 octets - image_offset - image header information
- 4 octets - palette_offset - palette header information
- 2 * 4 octets - Inconnu
- Structures COLL_DATA : (données de collisions)
- 4 octets - vertex_offset (2 float par entrée correspondant à des données 2D probablement)
- 4 octets - vertex_count
- 4 octets - index_offset
- 4 octets - index_count
- 20 octets - tableau inconnu (x5)
- 2 octets - index_start
- 2 octets - index_count
- 4 octets - Inconnu
- 4 octets - Inconnu