<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.re.virtualworld.fr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Algoflash</id>
	<title>Virtual World R.E. - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.re.virtualworld.fr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Algoflash"/>
	<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php/Special:Contributions/Algoflash"/>
	<updated>2026-04-12T16:53:54Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=Models&amp;diff=1535</id>
		<title>Models</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=Models&amp;diff=1535"/>
		<updated>2023-10-07T13:52:28Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: /* Affected files */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
{{Research | 2| Researches on headers / bodies structures are partially achieved. }}&lt;br /&gt;
&lt;br /&gt;
== Gotcha Force Models ==&lt;br /&gt;
&lt;br /&gt;
Gotcha Force models work as those from the game Super Smash Bros Melee (SSBM) investigated by its [https://smashboards.com/threads/melee-dat-format.292603/ community].&lt;br /&gt;
&lt;br /&gt;
A model is a file format that organizes objects and resources serialized to be used by the &#039;&#039;&#039;H&#039;&#039;&#039;al &#039;&#039;&#039;S&#039;&#039;&#039;ys&#039;&#039;&#039;D&#039;&#039;&#039;olphin (&#039;&#039;&#039;HSD&#039;&#039;&#039;) library. The HSD library is used in several Capcom games. These are graphic materials structured in a hierarchical way. Some pictures present in the models seem to indicate the use of [https://learn.foundry.com/modo/901/content/help/pages/shading_lighting/shader_items/matcap.html matcap] technic. This library uses Dolphin SDK functions like GX / MTX and so on.&lt;br /&gt;
&lt;br /&gt;
=== Affected files ===&lt;br /&gt;
All files in the AFS having &#039;&#039;&#039;_mdl&#039;&#039;&#039; in their names are models described in this page. We notice also [[ARZ (Gotcha Force)|.arz]] which are compressed models. collision.arc and tdc00.arc to tdc09.arc are also models.&lt;br /&gt;
&lt;br /&gt;
Les fichiers modèles se retrouvent aussi dans les pzz des borgs (plxxxx.pzz) en position 004 à 009.&lt;br /&gt;
&lt;br /&gt;
=== HSDRaw ===&lt;br /&gt;
HSDRaw, un éditeur 3D dotnet de ce format est instable sur mon Windows (algoflash). Il est cependant prouvé qu&#039;un edit des _mdl pour commencer à l&#039;offset 0x100 - après le préambule - permet de visualiser le fichier sur HSDRaw et d&#039;avoir le rendu 3D du Borg (click sur le premier dossier JOBJ - puis le JOBJ dedans et double click sur le nœud en violet). Cela devrait aussi permettre d&#039;éditer certaines propriétés ?&lt;br /&gt;
&lt;br /&gt;
== Structure générale ==&lt;br /&gt;
Le format des modèles se découpe en plusieurs blocks. Le préambule fait 0x100 octets au tout début du fichier. Il est souvent absent. Toutes les valeurs sont en unsigned big endian, et le pad est en Nulls bytes (\x00). 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&#039;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&#039;il est peu probable qu&#039;un offset pointe au milieu d&#039;une structure.&lt;br /&gt;
&lt;br /&gt;
L&#039;ensemble des fichiers répondant à ce format on un seul root_node de type SObj (Scene data).&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Préambule&#039;&#039;&#039; : (0x100 octets / 0 octets) ===&lt;br /&gt;
* 4 octets - hsd_header_offset=0x100 (toujours)&lt;br /&gt;
* 4 octets - bones_flags_table_offset=0x20 (toujours) - offset de la liste des flags des armatures&lt;br /&gt;
* 4 octets - bones_table_offset=0xC0 (toujours) - offset de la liste des armatures&lt;br /&gt;
* 20 octets - Pad - (toujours)&lt;br /&gt;
* 4 octets [32] - Inconnu (flags des armatures ?) 1 octet par flag ?&lt;br /&gt;
* 32 octets - Pad - (toujours)&lt;br /&gt;
* 32 octets - armatures ?&lt;br /&gt;
* 32 octets - Pad - (toujours)&lt;br /&gt;
=== &#039;&#039;&#039;HSD Header&#039;&#039;&#039; - (0x20 octets) ===&lt;br /&gt;
* 4 octets - Taille totale du fichier&lt;br /&gt;
* 4 octets - Taille du Data block&lt;br /&gt;
* 4 octets - Nombre d&#039;entrée dans la Table de relocs&lt;br /&gt;
* 4 octets - root0_count&lt;br /&gt;
* 4 octets - root1_count&lt;br /&gt;
* 12 octets - Pad - (toujours)&lt;br /&gt;
=== &#039;&#039;&#039;Data block&#039;&#039;&#039; : ===&lt;br /&gt;
* JOBJ, etc. -&amp;gt; Ces structures sont détaillée plus loin ci-dessous.&lt;br /&gt;
=== &#039;&#039;&#039;Relocation Table&#039;&#039;&#039; : ===&lt;br /&gt;
* Tableau d&#039;offsets de 4 octets - Offsets des structures dans le DB.&lt;br /&gt;
=== &#039;&#039;&#039;Root Nodes (2)&#039;&#039;&#039; : ===&lt;br /&gt;
* Tableau de taille 8 * root0_count&lt;br /&gt;
** 4 octets - root_offset - relatif au DB&lt;br /&gt;
** 4 octets - string_table_offset - relatif à la StringTable&lt;br /&gt;
* Tableau de taille 8 * root1_count&lt;br /&gt;
** 4 octets - root_offset - relatif au DB&lt;br /&gt;
** 4 octets - string_table_offset - relatif à la StringTable&lt;br /&gt;
=== &#039;&#039;&#039;String Table&#039;&#039;&#039; : ===&lt;br /&gt;
* Suite de strings terminées par Null au nombre de root0_count + root1_count&lt;br /&gt;
&lt;br /&gt;
== Structures rencontrées dans le DB ==&lt;br /&gt;
Note : l&#039;arborescence est cumulative sur les transformations pour les relations parents-&amp;gt;enfants&lt;br /&gt;
&lt;br /&gt;
Les Noeuds Racine qui ont pour nom &amp;quot;scene_data&amp;quot; pointent sur un SObj :&lt;br /&gt;
=== &#039;&#039;&#039;SObj&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
* 4 octets - JObjDescs_offsets_list_offset&lt;br /&gt;
* 4 octets - Cameras_list_offset&lt;br /&gt;
* 4 octets - Lights_list_offset&lt;br /&gt;
* 4 octets - Fog&lt;br /&gt;
&lt;br /&gt;
&amp;quot;scene_data&amp;quot; == nom du nœud racine&lt;br /&gt;
JObjDescs_offsets_list_offset, cameras.. pointent sur une liste d&#039;offsets terminée par 4 octets à 0x00.&lt;br /&gt;
lights_list_offset pointe sur des couples (4 octets - LObj_offset ; 4 octets - light_anim_pointer_offset)&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;JObjDesc&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
* 4 octets - root_joint_offset - JObj&lt;br /&gt;
* 4 octets - joint_animations_offset - ?&lt;br /&gt;
* 4 octets - material_animations_offset - ?&lt;br /&gt;
* 4 octets - shape_animations_offset - ?&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;CObj&#039;&#039;&#039; : (0x38 octets) ===&lt;br /&gt;
* 4 octets - flags&lt;br /&gt;
* 4 octets - projection_type - ProjectionTypeEnum&lt;br /&gt;
* 2 octets - viewport_left&lt;br /&gt;
* 2 octets - viewport_right&lt;br /&gt;
* 2 octets - viewport_top&lt;br /&gt;
* 2 octets - viewport_bottom&lt;br /&gt;
* 4 octets - proj_width&lt;br /&gt;
* 4 octets - proj_height&lt;br /&gt;
* 4 octets - eye_offset - WObj&lt;br /&gt;
* 4 octets - target_offset - WObj&lt;br /&gt;
* 4 octets - roll&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - float - near_clip&lt;br /&gt;
* 4 octets - float - far_clip&lt;br /&gt;
* 4 octets - float - field_of_view&lt;br /&gt;
* 4 octets - float - aspect&lt;br /&gt;
Camera object. Note : pour frustrum ou ortho, la structure est différente.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ProjectionTypeEnum&#039;&#039;&#039;:&lt;br /&gt;
** PERSPECTIVE = 1&lt;br /&gt;
** FRUSTRUM = 2&lt;br /&gt;
** ORTHO = 3&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;WObj&#039;&#039;&#039;: (0x14 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - float - v1&lt;br /&gt;
* 4 octets - float - v2&lt;br /&gt;
* 4 octets - float - v3&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
eye / target&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;LObj&#039;&#039;&#039; : (0x1c octets) ===&lt;br /&gt;
* 4 octets - class_name&lt;br /&gt;
* 4 octets - next_offset&lt;br /&gt;
* 2 octets - flags - LObjFlagsEnum&lt;br /&gt;
* 2 octets - attenuation_flags - LObjAttenuationFlagsEnum&lt;br /&gt;
* 1 octet - color_r&lt;br /&gt;
* 1 octet - color_g&lt;br /&gt;
* 1 octet - color_b&lt;br /&gt;
* 1 octet - color_alpha&lt;br /&gt;
* 4 octets - lobj_point_offset - position&lt;br /&gt;
* 4 octets - infinite_data&lt;br /&gt;
* 4 octets - point_spot_data&lt;br /&gt;
light&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;LObjFlagsEnum&#039;&#039;&#039; :&lt;br /&gt;
** LOBJ_AMBIANT = 00 00&lt;br /&gt;
** LOBJ_INFINITE = 00 01&lt;br /&gt;
** LOBJ_POINT = 00 02&lt;br /&gt;
** LOBJ_SPOT = 00 03&lt;br /&gt;
** LOBJ_DIFFUSE = 00 04&lt;br /&gt;
** LOBJ_SPECULAR = 00 08&lt;br /&gt;
** LOBJ_ALPHA = 00 10&lt;br /&gt;
** LOBJ_HIDDEN = 00 20&lt;br /&gt;
** LOBJ_RAW_PARAM = 00 40&lt;br /&gt;
** LOBJ_DIFF_DIRTY = 00 80&lt;br /&gt;
** LOBJ_SPEC_DIRTY = 01 00&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;LObjAttenuationFlagsEnum&#039;&#039;&#039; :&lt;br /&gt;
** LOBJ_LIGHT_ATTN_NONE = 00 00&lt;br /&gt;
** LOBJ_LIGHT_ATTN = 00 01&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;LObjPoint&#039;&#039;&#039; : (0x14 octets) ===&lt;br /&gt;
* 4 octets - class_name&lt;br /&gt;
* 4 octets - float - x&lt;br /&gt;
* 4 octets - float - y&lt;br /&gt;
* 4 octets - float - z&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;LightAnimPointer&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
** 4 octets - next_offset - (LightAnimPointer)&lt;br /&gt;
** 4 octets - light_anim - ?&lt;br /&gt;
** 4 octets - position_anim - ?&lt;br /&gt;
** 4 octets - interst_anim - ?&lt;br /&gt;
Bugs dans HSDRaw - à tester&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;JObj&#039;&#039;&#039; : (0x40 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - flags&lt;br /&gt;
* 4 octets - child_offset (JObj)&lt;br /&gt;
* 4 octets - next_offset (JObj)&lt;br /&gt;
* 4 octets - dobj_offset (DObj)&lt;br /&gt;
* 4 octets [3] - float3 - rotation_xyz&lt;br /&gt;
* 4 octets [3] - float3 - scale_xyz&lt;br /&gt;
* 4 octets [3] - float3 - translation_xyz&lt;br /&gt;
* 4 octets - inverse_world_transform_offset (inverse world transform = Matrice de 4x3)&lt;br /&gt;
* 4 octets - robj_offset&lt;br /&gt;
&lt;br /&gt;
Pointé par les listes dans Root Node scene_data.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;JObjFlagsEnum&#039;&#039;&#039; : (peuvent se cumuler)&lt;br /&gt;
** NULL = 00 00 00 00&lt;br /&gt;
** SKELETON = 00 00 00 01&lt;br /&gt;
** SKELETON_ROOT = 00 00 00 02&lt;br /&gt;
** ENVELOPE_MODEL = 00 00 00 04&lt;br /&gt;
** CLASSICAL_SCALING = 00 00 00 08&lt;br /&gt;
** HIDDEN = 00 00 00 10&lt;br /&gt;
** PTCL = 00 00 00 20&lt;br /&gt;
** MTX_DIRTY = 00 00 00 40&lt;br /&gt;
** LIGHTING = 00 00 00 80&lt;br /&gt;
** TEXGEN = 00 00 01 00&lt;br /&gt;
** BILLBOARD = 00 00 02 00&lt;br /&gt;
** VBILLBOARD = 00 00 04 00&lt;br /&gt;
** HBILLBOARD = 00 00 06 00&lt;br /&gt;
** RBILLBOARD = 00 00 08 00&lt;br /&gt;
** INSTANCE = 00 00 10 00&lt;br /&gt;
** PBILLBOARD = 00 00 20 00&lt;br /&gt;
** SPLINE = 00 00 40 00&lt;br /&gt;
** FLIP_IK = 00 00 80 00&lt;br /&gt;
** SPECULAR = 00 01 00 00&lt;br /&gt;
** USE_QUATERNION = 00 02 00 00&lt;br /&gt;
** OPA = 00 04 00 00&lt;br /&gt;
** XLU = 00 08 00 00&lt;br /&gt;
** TEXEDGE = 00 10 00 00&lt;br /&gt;
** JOINT1 = 00 20 00 00&lt;br /&gt;
** JOINT2 = 00 40 00 00&lt;br /&gt;
** EFFECTOR = 00 60 00 00&lt;br /&gt;
** USER_DEFINED_MTX = 00 80 00 00&lt;br /&gt;
** MTX_INDEPEND_PARENT = 01 00 00 00&lt;br /&gt;
** MTX_INDEPEND_SRT = 02 00 00 00&lt;br /&gt;
** MTX_SCALE_COMPENSATE = 04 00 00 00&lt;br /&gt;
** ROOT_OPA = 10 00 00 00&lt;br /&gt;
** ROOT_XLU = 20 00 00 00&lt;br /&gt;
** ROOT_TEXEDGE = 40 00 00 00&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;InverseWorldTransform&#039;&#039;&#039; : (0x30 octets) ===&lt;br /&gt;
* 4 octets - float - M11&lt;br /&gt;
* 4 octets - float - M12&lt;br /&gt;
* 4 octets - float - M13&lt;br /&gt;
* 4 octets - float - M14&lt;br /&gt;
* 4 octets - float - M21&lt;br /&gt;
* 4 octets - float - M22&lt;br /&gt;
* 4 octets - float - M23&lt;br /&gt;
* 4 octets - float - M24&lt;br /&gt;
* 4 octets - float - M31&lt;br /&gt;
* 4 octets - float - M32&lt;br /&gt;
* 4 octets - float - M33&lt;br /&gt;
* 4 octets - float - M34&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;DObj&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - next_offset - prochain DOBJ&lt;br /&gt;
* 4 octets - mobj_offset - material offset&lt;br /&gt;
* 4 octets - pobj_offset - mesh offset&lt;br /&gt;
Liste chaînée qui permet de récupérer l&#039;ensemble des materials &amp;amp; mesh pour le JObj auquel il est lié.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;MObj&#039;&#039;&#039; : (0x18 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - render_flags - RenderFlagsEnum&lt;br /&gt;
* 4 octets - tobj_offset - offset de texture - peut être invalide s&#039;il n&#039;y a pas de texture pour le material&lt;br /&gt;
* 4 octets - material_offset - couleurs des materials ?&lt;br /&gt;
* 8 octets - PEDesc ?&lt;br /&gt;
&lt;br /&gt;
Contient les textures &amp;amp; informations sur les couleurs des Materials.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;RenderFlagsEnum&#039;&#039;&#039; : (se cumulent)&lt;br /&gt;
** USER = 80 00 00 00&lt;br /&gt;
** CONSTANT = 00 00 00 01&lt;br /&gt;
** VERTEX = 00 00 00 02&lt;br /&gt;
** BOTH = 00 00 00 03&lt;br /&gt;
** DIFFUSE = 00 00 00 04&lt;br /&gt;
** SPECULAR = 00 00 00 08&lt;br /&gt;
** TEX0 = 00 00 00 10&lt;br /&gt;
** TEX1 = 00 00 00 20&lt;br /&gt;
** TEX2 = 00 00 00 40&lt;br /&gt;
** TEX3 = 00 00 00 80&lt;br /&gt;
** TEX4 = 00 00 01 00&lt;br /&gt;
** TEX5 = 00 00 02 00&lt;br /&gt;
** TEX6 = 00 00 04 00&lt;br /&gt;
** TEX7 = 00 00 08 00&lt;br /&gt;
** TOON = 00 00 10 00&lt;br /&gt;
** ALPHA_MAT = 00 00 20 00&lt;br /&gt;
** ALPHA_VTX = 00 00 40 00&lt;br /&gt;
** ALPHA_BOTH = 00 00 60 00&lt;br /&gt;
** ZOFST = 01 00 00 00&lt;br /&gt;
** EFFECT = 02 00 00 00&lt;br /&gt;
** SHADOW = 04 00 00 00&lt;br /&gt;
** ZMODE_ALWAYS = 08 00 00 00&lt;br /&gt;
** DF_ALL = 10 00 00 00&lt;br /&gt;
** NO_ZUPDATE = 20 00 00 00&lt;br /&gt;
** XLU = 40 00 00 00&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;TObj&#039;&#039;&#039; : (0x5c octets) ===&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - tex_map_id - TexMapIdEnum&lt;br /&gt;
* 4 octets - gx_tex_gen_src - GXTexGenSrcEnum&lt;br /&gt;
* 4 octets - float - rx&lt;br /&gt;
* 4 octets - float - ry&lt;br /&gt;
* 4 octets - float - rz&lt;br /&gt;
* 4 octets - float - sx&lt;br /&gt;
* 4 octets - float - sy&lt;br /&gt;
* 4 octets - float - sz&lt;br /&gt;
* 4 octets - float - tx&lt;br /&gt;
* 4 octets - float - ty&lt;br /&gt;
* 4 octets - float - tz&lt;br /&gt;
* 4 octets - wrap_s - WrapEnum&lt;br /&gt;
* 4 octets - wrap_t - WrapEnum&lt;br /&gt;
* 1 octet - w_scale&lt;br /&gt;
* 1 octet - h_scale&lt;br /&gt;
* 2 octets - ?&lt;br /&gt;
* 1 octets - bump_map - (False = 00 ; True = 01)&lt;br /&gt;
* 4 bits - alpha_operation - AlphaOperationEnum&lt;br /&gt;
* 4 bits - color_operation - ColorOperationEnum&lt;br /&gt;
* 1 octet - shadow_lightmap - (False = 00 ; True = 01) (2 octets avec une Enum lightmap limite)&lt;br /&gt;
* 1 bit - ext_lightmap - (False = 0 ; True = 1)&lt;br /&gt;
* 1 bit - ambiant_lightmap - (False = 0 ; True = 1) &lt;br /&gt;
* 1 bit - specular_lightmap - (False = 0 ; True = 1)&lt;br /&gt;
* 1 bit - diffuse_lightmap (False = 0 ; True = 1)&lt;br /&gt;
* 4 bits - coord_type - CoordTypeEnum&lt;br /&gt;
* 4 octets - float - blending - utilisé quand color_operation ou alpha_operation == BLEND&lt;br /&gt;
* 4 octets - mag_filter - MagFilterEnum&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
Informations de Textures. Le TObj contient des informations sur les paramètres d&#039;environnement de textures utilisés pour le rendu graphique ainsi que les offset de l&#039;image et des données de la palette utilisés pour cette texture. Le plus important ici, c&#039;est l&#039;offset d&#039;image et la palette/tlut - si l&#039;image n&#039;est pas indexée (RGBA, CMPR, etc.) alors la structure de description palette/tlut n&#039;est pas utilisée.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;TexMapIdEnum&#039;&#039;&#039; :&lt;br /&gt;
** GX_TEXMAP0 = 00 00 00 00&lt;br /&gt;
** GX_TEXMAP1 = 00 00 00 01&lt;br /&gt;
** GX_TEXMAP2 = 00 00 00 02&lt;br /&gt;
** GX_TEXMAP3 = 00 00 00 03&lt;br /&gt;
** GX_TEXMAP4 = 00 00 00 04&lt;br /&gt;
** GX_TEXMAP5 = 00 00 00 05&lt;br /&gt;
** GX_TEXMAP6 = 00 00 00 06&lt;br /&gt;
** GX_TEXMAP7 = 00 00 00 07&lt;br /&gt;
** GX_MAX_TEXMAP = 00 00 00 08&lt;br /&gt;
** GX_TEXMAP_NULL = 00 00 00 09&lt;br /&gt;
** GX_TEXMAP_DISABLE = 00 00 00 0A&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;GXTexGenSrcEnum&#039;&#039;&#039; :&lt;br /&gt;
** GX_TG_POS = 00 00 00 00&lt;br /&gt;
** GX_TG_NRM = 00 00 00 01&lt;br /&gt;
** GX_TG_BINRM = 00 00 00 02&lt;br /&gt;
** GX_TG_TANGENT = 00 00 00 03&lt;br /&gt;
** GX_TG_TEX0 = 00 00 00 04&lt;br /&gt;
** GX_TG_TEX1 = 00 00 00 05&lt;br /&gt;
** GX_TG_TEX2 = 00 00 00 06&lt;br /&gt;
** GX_TG_TEX3 = 00 00 00 07&lt;br /&gt;
** GX_TG_TEX4 = 00 00 00 08&lt;br /&gt;
** GX_TG_TEX5 = 00 00 00 09&lt;br /&gt;
** GX_TG_TEX6 = 00 00 00 0A&lt;br /&gt;
** GX_TG_TEX7 = 00 00 00 0B&lt;br /&gt;
** GX_TG_TEXCOORD0 = 00 00 00 0C&lt;br /&gt;
** GX_TG_TEXCOORD1 = 00 00 00 0D&lt;br /&gt;
** GX_TG_TEXCOORD2 = 00 00 00 0E&lt;br /&gt;
** GX_TG_TEXCOORD3 = 00 00 00 0F&lt;br /&gt;
** GX_TG_TEXCOORD4 = 00 00 00 10&lt;br /&gt;
** GX_TG_TEXCOORD5 = 00 00 00 11&lt;br /&gt;
** GX_TG_TEXCOORD6 = 00 00 00 12&lt;br /&gt;
** GX_TG_COLOR0 = 00 00 00 13&lt;br /&gt;
** GX_TG_COLOR1 = 00 00 00 14&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;AlphaOperationEnum&#039;&#039;&#039;:&lt;br /&gt;
** NONE = 0X&lt;br /&gt;
** ALPHAMASK = 1X&lt;br /&gt;
** BLEND = 2X&lt;br /&gt;
** MODULATE = 3X&lt;br /&gt;
** REPLACE = 4X&lt;br /&gt;
** PASS = 5X&lt;br /&gt;
** ADD = 6X&lt;br /&gt;
** SUB = 7X&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ColorOperationEnum&#039;&#039;&#039;:&lt;br /&gt;
** NONE = X0&lt;br /&gt;
** ALPHA_MASK = X1&lt;br /&gt;
** RGB_MASK = X2&lt;br /&gt;
** BLEND = X3&lt;br /&gt;
** MODULATE = X4&lt;br /&gt;
** REPLACE = X5&lt;br /&gt;
** PASS = X6&lt;br /&gt;
** ADD = X7&lt;br /&gt;
** SUB = X8&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;CoordTypeEnum&#039;&#039;&#039;:&lt;br /&gt;
** UV = X0&lt;br /&gt;
** REFLECTION = X1&lt;br /&gt;
** HILIGHT = X2&lt;br /&gt;
** SHADOW = X3&lt;br /&gt;
** TOON = X4&lt;br /&gt;
** GRADATION = X5&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MagFilterEnum&#039;&#039;&#039;:&lt;br /&gt;
** GX_NEAR = 00 00 00 00&lt;br /&gt;
** GX_LINEAR = 00 00 00 01&lt;br /&gt;
** GX_NEAR_MIP_NEAR = 00 00 00 02&lt;br /&gt;
** GX_LIN_MIP_NEAR = 00 00 00 03&lt;br /&gt;
** GX_NEAR_MIP_LIN = 00 00 00 04&lt;br /&gt;
** GX_LIN_MIP_LIN = 00 00 00 05&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;WrapEnum&#039;&#039;&#039;:&lt;br /&gt;
** CLAMP = 00 00 00 00&lt;br /&gt;
** REPEAT = 00 00 00 01&lt;br /&gt;
** MIRROR = 00 00 00 02&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Material&#039;&#039;&#039; : (0x14 octets) ===&lt;br /&gt;
* 1 octets - AMB_R - (ambient)&lt;br /&gt;
* 1 octets - AMB_G&lt;br /&gt;
* 1 octets - AMB_B&lt;br /&gt;
* 1 octets - AMB_A&lt;br /&gt;
* 1 octets - DIF_R - (diffuse)&lt;br /&gt;
* 1 octets - DIF_G&lt;br /&gt;
* 1 octets - DIF_B&lt;br /&gt;
* 1 octets - DIF_A&lt;br /&gt;
* 1 octets - SPC_R - (specular)&lt;br /&gt;
* 1 octets - SPC_G&lt;br /&gt;
* 1 octets - SPC_B&lt;br /&gt;
* 1 octets - SPC_A&lt;br /&gt;
* 4 octets - float - alpha&lt;br /&gt;
* 4 octets - float - shininess&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;PObj&#039;&#039;&#039; : (0x18 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - next_offset - pobj&lt;br /&gt;
* 4 octets - vertex_attr_list_offset&lt;br /&gt;
* 2 octets - Flags - PObjFlagsEnum&lt;br /&gt;
* 2 octets - display_list_size - number of 0x20 (32) byte blocks occupied by display list data&lt;br /&gt;
* 4 octets - display_list_offset&lt;br /&gt;
* 4 octets - weight_list_offset - ? verifier qu&#039;on retrouve bien le tableau d&#039;envelope_weights à cet offset&lt;br /&gt;
&lt;br /&gt;
Comme l&#039;indique next_offset, il s&#039;agit d&#039;une liste de meshs à afficher pour un material donné référencé par un dobj. PObj contient les offsets de vertex attributes / display list / joint weight list ce qui suffit et permet d’interpréter et traiter les coordonnées de vertices, normals &amp;amp; textures.&lt;br /&gt;
&lt;br /&gt;
Les attributs vertex sont les plus important - les parametres specifiés contrôlent tout : du format, de la taille des données de chaque vertex, normal et coordonnées de textures et comment ces valeurs sont dimensionnées (scaled) par rapport à la présence et la taille de chaque valeur d&#039;index qui apparaît dans la display list information.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PObjFlagsEnum&#039;&#039;&#039; :&lt;br /&gt;
** Inconnu0 = 00 01&lt;br /&gt;
** Inconnu1 = 00 02&lt;br /&gt;
** ANIM = 00 08&lt;br /&gt;
** SHAPE_ANIM = 10 00&lt;br /&gt;
** ENVELOPE = 20 00&lt;br /&gt;
** CULLBACK = 40 00&lt;br /&gt;
** CULLFRONT = 80 00&lt;br /&gt;
&lt;br /&gt;
=== EnvelopeWeights : (0x? octets) ===&lt;br /&gt;
* 4 octets - envelope_count&lt;br /&gt;
* [envelope_count]:&lt;br /&gt;
** 4 octets - float - weight&lt;br /&gt;
** 4 octets - pad ?&lt;br /&gt;
* 4 octets - jobj_list_offset&lt;br /&gt;
&lt;br /&gt;
=== not verified yet ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;IMAGE_HEADER&#039;&#039;&#039; :&lt;br /&gt;
** 4 octets - image_offset - image data&lt;br /&gt;
** 2 octets - width&lt;br /&gt;
** 2 octets - height&lt;br /&gt;
** 4 octets - image_format&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PALETTE_HEADER&#039;&#039;&#039; : (0x10)&lt;br /&gt;
** 4 octets - palette_offset - palette data&lt;br /&gt;
** 4 octets - palette_format&lt;br /&gt;
** 4 octets - Inconnu&lt;br /&gt;
** 2 octets - color_count&lt;br /&gt;
** 2 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
image_offset et palette_offset sont souvent partagés par plusieurs textures - savoir ça permet de retrouver toutes les informations sur les images des textures (largeur, hauteur, format), ainsi que le format et le nombre de couleurs de la palette/tlut.&lt;br /&gt;
&lt;br /&gt;
Le format d&#039;image ne détermine pas le nombre total de couleurs de la palette qu&#039;elle utilisent. Par exemple, une image indexée sur 8 bits aurait un maximum de 256 couleurs mais seulement 136 ou 221 couleurs sont actuellement utilisées. De la sorte, la palette n&#039;utilisera pas la taille totale qu&#039;elle devrait utiliser.&lt;br /&gt;
&lt;br /&gt;
Les images suivent la structure généralement utilisée par la GameCube :&lt;br /&gt;
&lt;br /&gt;
IMAGE FORMATS :&lt;br /&gt;
* case 0: //i4&lt;br /&gt;
* case 1: //i8&lt;br /&gt;
* case 2: //i4a4&lt;br /&gt;
* case 3: //i8a8&lt;br /&gt;
* case 4: //r5g6b5&lt;br /&gt;
* case 5: //rgb5a3&lt;br /&gt;
* case 6: //r8g8b8a8&lt;br /&gt;
* case 8: //index4&lt;br /&gt;
* case 9: //index8&lt;br /&gt;
* case 0xa: //index14x2&lt;br /&gt;
* case 0xe: //s3tc1&lt;br /&gt;
&lt;br /&gt;
Les formats indexés utilisent aussi les informations de palettes/tlut et les données peuvent apparaître en plusieurs formats :&lt;br /&gt;
&lt;br /&gt;
PALETTE FORMATS :&lt;br /&gt;
* case 0: //ia8&lt;br /&gt;
* case 1: //r5g6b5&lt;br /&gt;
* case 2: //rgb5a3&lt;br /&gt;
&lt;br /&gt;
---&amp;gt; &amp;quot;Joint Data - Accessing Geometry, Mesh, and Vertex Attributes&amp;quot; https://smashboards.com/threads/melee-dat-format.292603/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
trad a revoir à partir de là, il faut investiguer le rendu 3D sur GameCube pour mieux comprendre&lt;br /&gt;
&lt;br /&gt;
// déclaration d&#039;un vertex et attribute information&lt;br /&gt;
// attr, type, cnt, data_type, flags?, file_offset&lt;br /&gt;
* ATTR_DATA&lt;br /&gt;
** 4 octets - GXAttr     vtx_attr_offset - attr&lt;br /&gt;
** 4 octets - GXAttrType vtx_attr_type   - index_type&lt;br /&gt;
** 4 octets - GXCompCnt  comp_cnt        - cnt&lt;br /&gt;
** 4 octets - GXCompType comp_type       - data_type	&lt;br /&gt;
** 1 octets - scale&lt;br /&gt;
** 1 octets - Inconnu&lt;br /&gt;
** 2 octets - vtx_stride&lt;br /&gt;
** 2 octets - data_offset&lt;br /&gt;
&lt;br /&gt;
vertex_attr_offset pointe sur une liste d&#039;attributs de vertex. Leur nombre n&#039;est pas donné. Les données dans cette structure suivent les informations et les types conçus par l&#039;architecture GameCube/WII et son API. La liste est terminée par une valeur spécifique de vtx_attr qui signale la fin de cette liste. Avec un accès à la doku SDK, il serait fortement conseillé de lire la section à propos des &amp;quot;vertex attributes and other specifications&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
La valeur de vtx_attr determine le type de donnée que cet attribut désigne et peut indiquer un nombre de types natifs utilisés utilisés pour passer les données entre les interfaces logicielles et matérielles.&lt;br /&gt;
&lt;br /&gt;
Les valeures possibles sont les suivantes :&lt;br /&gt;
* enum GXAttr (4 octets)&lt;br /&gt;
** GX_VA_PNMTXIDX = 0,    // position/normal matrix index&lt;br /&gt;
** GX_VA_TEX0MTXIDX,      // texture 0 matrix index&lt;br /&gt;
** GX_VA_TEX1MTXIDX,      // texture 1 matrix index&lt;br /&gt;
** GX_VA_TEX2MTXIDX,      // texture 2 matrix index&lt;br /&gt;
** GX_VA_TEX3MTXIDX,      // texture 3 matrix index&lt;br /&gt;
** GX_VA_TEX4MTXIDX,      // texture 4 matrix index&lt;br /&gt;
** GX_VA_TEX5MTXIDX,      // texture 5 matrix index&lt;br /&gt;
** GX_VA_TEX6MTXIDX,      // texture 6 matrix index&lt;br /&gt;
** GX_VA_TEX7MTXIDX,      // texture 7 matrix index&lt;br /&gt;
** GX_VA_POS      = 9,    // position&lt;br /&gt;
** GX_VA_NRM,             // normal&lt;br /&gt;
** GX_VA_CLR0,            // color 0&lt;br /&gt;
** GX_VA_CLR1,            // color 1&lt;br /&gt;
** GX_VA_TEX0,            // input texture coordinate 0&lt;br /&gt;
** GX_VA_TEX1,            // input texture coordinate 1&lt;br /&gt;
** GX_VA_TEX2,            // input texture coordinate 2&lt;br /&gt;
** GX_VA_TEX3,            // input texture coordinate 3&lt;br /&gt;
** GX_VA_TEX4,            // input texture coordinate 4&lt;br /&gt;
** GX_VA_TEX5,            // input texture coordinate 5&lt;br /&gt;
** GX_VA_TEX6,            // input texture coordinate 6&lt;br /&gt;
** GX_VA_TEX7,            // input texture coordinate 7&lt;br /&gt;
&lt;br /&gt;
** GX_POS_MTX_ARRAY,      // position matrix array pointer&lt;br /&gt;
** GX_NRM_MTX_ARRAY,      // normal matrix array pointer&lt;br /&gt;
** GX_TEX_MTX_ARRAY,      // texture matrix array pointer&lt;br /&gt;
** GX_LIGHT_ARRAY,        // light parameter array pointer&lt;br /&gt;
** GX_VA_NBT,             // normal, bi-normal, tangent &lt;br /&gt;
** GX_VA_MAX_ATTR,        // maximum number of vertex attributes&lt;br /&gt;
&lt;br /&gt;
** GX_VA_NULL     = 0xff  // NULL attribute (to mark end of lists)&lt;br /&gt;
&lt;br /&gt;
Toutes les données nécessaires pour représenter un mesh peuvent être spécifiées et indexées d&#039;une manière ou d&#039;une autre. De même, GX_VA_TEX0MTXIDX, GX_VA_CLR0, et autres sont aussi possibles - les valeurs les plus fréquentes dans les données SSBM sont : GX_VA_PNMTXIDX, GX_VA_POS, GX_VA_NRM, et GX_VA_TEX0. Which is to be expected as joint matrices, vertex positions/normals, and texture coordinates respectively are probably the most basic of elements needed to display a texture mesh, whether static or animated.&lt;br /&gt;
&lt;br /&gt;
When the value of vtx_attr == GX_VA_NULL (0xFF), the end of the vertex attribute array has been reached.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The vtx_attr_type values is actually associated with how the value is indexed, and can thus also determine the size of the index value within the display list data.&lt;br /&gt;
&lt;br /&gt;
* 4 octets - enum GXAttrType&lt;br /&gt;
** GX_NONE    = 0,&lt;br /&gt;
** GX_DIRECT,&lt;br /&gt;
** GX_INDEX8,&lt;br /&gt;
** GX_INDEX16&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Structures COLL_DATA : (données de collisions)&lt;br /&gt;
** 4 octets - vertex_offset (2 float par entrée correspondant à des données 2D probablement)&lt;br /&gt;
** 4 octets - vertex_count&lt;br /&gt;
** 4 octets - index_offset&lt;br /&gt;
** 4 octets - index_count&lt;br /&gt;
** 4 octets [5] - tableau inconnu&lt;br /&gt;
*** 2 octets - index_start&lt;br /&gt;
*** 2 octets - index_count&lt;br /&gt;
** 4 octets - Inconnu&lt;br /&gt;
** 4 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
[[Category:Implementations]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=Models&amp;diff=1534</id>
		<title>Models</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=Models&amp;diff=1534"/>
		<updated>2023-10-07T13:52:07Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: /* Fichiers concernés */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
{{Research | 2| Researches on headers / bodies structures are partially achieved. }}&lt;br /&gt;
&lt;br /&gt;
== Gotcha Force Models ==&lt;br /&gt;
&lt;br /&gt;
Gotcha Force models work as those from the game Super Smash Bros Melee (SSBM) investigated by its [https://smashboards.com/threads/melee-dat-format.292603/ community].&lt;br /&gt;
&lt;br /&gt;
A model is a file format that organizes objects and resources serialized to be used by the &#039;&#039;&#039;H&#039;&#039;&#039;al &#039;&#039;&#039;S&#039;&#039;&#039;ys&#039;&#039;&#039;D&#039;&#039;&#039;olphin (&#039;&#039;&#039;HSD&#039;&#039;&#039;) library. The HSD library is used in several Capcom games. These are graphic materials structured in a hierarchical way. Some pictures present in the models seem to indicate the use of [https://learn.foundry.com/modo/901/content/help/pages/shading_lighting/shader_items/matcap.html matcap] technic. This library uses Dolphin SDK functions like GX / MTX and so on.&lt;br /&gt;
&lt;br /&gt;
=== Affected files ===&lt;br /&gt;
All files in the AFS having &#039;&#039;&#039;_mdl&#039;&#039;&#039; in theirs names are models described in this page. We notice also [[ARZ (Gotcha Force)|.arz]] which are compressed models. collision.arc and tdc00.arc to tdc09.arc are also models.&lt;br /&gt;
&lt;br /&gt;
Les fichiers modèles se retrouvent aussi dans les pzz des borgs (plxxxx.pzz) en position 004 à 009.&lt;br /&gt;
&lt;br /&gt;
=== HSDRaw ===&lt;br /&gt;
HSDRaw, un éditeur 3D dotnet de ce format est instable sur mon Windows (algoflash). Il est cependant prouvé qu&#039;un edit des _mdl pour commencer à l&#039;offset 0x100 - après le préambule - permet de visualiser le fichier sur HSDRaw et d&#039;avoir le rendu 3D du Borg (click sur le premier dossier JOBJ - puis le JOBJ dedans et double click sur le nœud en violet). Cela devrait aussi permettre d&#039;éditer certaines propriétés ?&lt;br /&gt;
&lt;br /&gt;
== Structure générale ==&lt;br /&gt;
Le format des modèles se découpe en plusieurs blocks. Le préambule fait 0x100 octets au tout début du fichier. Il est souvent absent. Toutes les valeurs sont en unsigned big endian, et le pad est en Nulls bytes (\x00). 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&#039;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&#039;il est peu probable qu&#039;un offset pointe au milieu d&#039;une structure.&lt;br /&gt;
&lt;br /&gt;
L&#039;ensemble des fichiers répondant à ce format on un seul root_node de type SObj (Scene data).&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Préambule&#039;&#039;&#039; : (0x100 octets / 0 octets) ===&lt;br /&gt;
* 4 octets - hsd_header_offset=0x100 (toujours)&lt;br /&gt;
* 4 octets - bones_flags_table_offset=0x20 (toujours) - offset de la liste des flags des armatures&lt;br /&gt;
* 4 octets - bones_table_offset=0xC0 (toujours) - offset de la liste des armatures&lt;br /&gt;
* 20 octets - Pad - (toujours)&lt;br /&gt;
* 4 octets [32] - Inconnu (flags des armatures ?) 1 octet par flag ?&lt;br /&gt;
* 32 octets - Pad - (toujours)&lt;br /&gt;
* 32 octets - armatures ?&lt;br /&gt;
* 32 octets - Pad - (toujours)&lt;br /&gt;
=== &#039;&#039;&#039;HSD Header&#039;&#039;&#039; - (0x20 octets) ===&lt;br /&gt;
* 4 octets - Taille totale du fichier&lt;br /&gt;
* 4 octets - Taille du Data block&lt;br /&gt;
* 4 octets - Nombre d&#039;entrée dans la Table de relocs&lt;br /&gt;
* 4 octets - root0_count&lt;br /&gt;
* 4 octets - root1_count&lt;br /&gt;
* 12 octets - Pad - (toujours)&lt;br /&gt;
=== &#039;&#039;&#039;Data block&#039;&#039;&#039; : ===&lt;br /&gt;
* JOBJ, etc. -&amp;gt; Ces structures sont détaillée plus loin ci-dessous.&lt;br /&gt;
=== &#039;&#039;&#039;Relocation Table&#039;&#039;&#039; : ===&lt;br /&gt;
* Tableau d&#039;offsets de 4 octets - Offsets des structures dans le DB.&lt;br /&gt;
=== &#039;&#039;&#039;Root Nodes (2)&#039;&#039;&#039; : ===&lt;br /&gt;
* Tableau de taille 8 * root0_count&lt;br /&gt;
** 4 octets - root_offset - relatif au DB&lt;br /&gt;
** 4 octets - string_table_offset - relatif à la StringTable&lt;br /&gt;
* Tableau de taille 8 * root1_count&lt;br /&gt;
** 4 octets - root_offset - relatif au DB&lt;br /&gt;
** 4 octets - string_table_offset - relatif à la StringTable&lt;br /&gt;
=== &#039;&#039;&#039;String Table&#039;&#039;&#039; : ===&lt;br /&gt;
* Suite de strings terminées par Null au nombre de root0_count + root1_count&lt;br /&gt;
&lt;br /&gt;
== Structures rencontrées dans le DB ==&lt;br /&gt;
Note : l&#039;arborescence est cumulative sur les transformations pour les relations parents-&amp;gt;enfants&lt;br /&gt;
&lt;br /&gt;
Les Noeuds Racine qui ont pour nom &amp;quot;scene_data&amp;quot; pointent sur un SObj :&lt;br /&gt;
=== &#039;&#039;&#039;SObj&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
* 4 octets - JObjDescs_offsets_list_offset&lt;br /&gt;
* 4 octets - Cameras_list_offset&lt;br /&gt;
* 4 octets - Lights_list_offset&lt;br /&gt;
* 4 octets - Fog&lt;br /&gt;
&lt;br /&gt;
&amp;quot;scene_data&amp;quot; == nom du nœud racine&lt;br /&gt;
JObjDescs_offsets_list_offset, cameras.. pointent sur une liste d&#039;offsets terminée par 4 octets à 0x00.&lt;br /&gt;
lights_list_offset pointe sur des couples (4 octets - LObj_offset ; 4 octets - light_anim_pointer_offset)&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;JObjDesc&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
* 4 octets - root_joint_offset - JObj&lt;br /&gt;
* 4 octets - joint_animations_offset - ?&lt;br /&gt;
* 4 octets - material_animations_offset - ?&lt;br /&gt;
* 4 octets - shape_animations_offset - ?&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;CObj&#039;&#039;&#039; : (0x38 octets) ===&lt;br /&gt;
* 4 octets - flags&lt;br /&gt;
* 4 octets - projection_type - ProjectionTypeEnum&lt;br /&gt;
* 2 octets - viewport_left&lt;br /&gt;
* 2 octets - viewport_right&lt;br /&gt;
* 2 octets - viewport_top&lt;br /&gt;
* 2 octets - viewport_bottom&lt;br /&gt;
* 4 octets - proj_width&lt;br /&gt;
* 4 octets - proj_height&lt;br /&gt;
* 4 octets - eye_offset - WObj&lt;br /&gt;
* 4 octets - target_offset - WObj&lt;br /&gt;
* 4 octets - roll&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - float - near_clip&lt;br /&gt;
* 4 octets - float - far_clip&lt;br /&gt;
* 4 octets - float - field_of_view&lt;br /&gt;
* 4 octets - float - aspect&lt;br /&gt;
Camera object. Note : pour frustrum ou ortho, la structure est différente.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ProjectionTypeEnum&#039;&#039;&#039;:&lt;br /&gt;
** PERSPECTIVE = 1&lt;br /&gt;
** FRUSTRUM = 2&lt;br /&gt;
** ORTHO = 3&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;WObj&#039;&#039;&#039;: (0x14 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - float - v1&lt;br /&gt;
* 4 octets - float - v2&lt;br /&gt;
* 4 octets - float - v3&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
eye / target&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;LObj&#039;&#039;&#039; : (0x1c octets) ===&lt;br /&gt;
* 4 octets - class_name&lt;br /&gt;
* 4 octets - next_offset&lt;br /&gt;
* 2 octets - flags - LObjFlagsEnum&lt;br /&gt;
* 2 octets - attenuation_flags - LObjAttenuationFlagsEnum&lt;br /&gt;
* 1 octet - color_r&lt;br /&gt;
* 1 octet - color_g&lt;br /&gt;
* 1 octet - color_b&lt;br /&gt;
* 1 octet - color_alpha&lt;br /&gt;
* 4 octets - lobj_point_offset - position&lt;br /&gt;
* 4 octets - infinite_data&lt;br /&gt;
* 4 octets - point_spot_data&lt;br /&gt;
light&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;LObjFlagsEnum&#039;&#039;&#039; :&lt;br /&gt;
** LOBJ_AMBIANT = 00 00&lt;br /&gt;
** LOBJ_INFINITE = 00 01&lt;br /&gt;
** LOBJ_POINT = 00 02&lt;br /&gt;
** LOBJ_SPOT = 00 03&lt;br /&gt;
** LOBJ_DIFFUSE = 00 04&lt;br /&gt;
** LOBJ_SPECULAR = 00 08&lt;br /&gt;
** LOBJ_ALPHA = 00 10&lt;br /&gt;
** LOBJ_HIDDEN = 00 20&lt;br /&gt;
** LOBJ_RAW_PARAM = 00 40&lt;br /&gt;
** LOBJ_DIFF_DIRTY = 00 80&lt;br /&gt;
** LOBJ_SPEC_DIRTY = 01 00&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;LObjAttenuationFlagsEnum&#039;&#039;&#039; :&lt;br /&gt;
** LOBJ_LIGHT_ATTN_NONE = 00 00&lt;br /&gt;
** LOBJ_LIGHT_ATTN = 00 01&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;LObjPoint&#039;&#039;&#039; : (0x14 octets) ===&lt;br /&gt;
* 4 octets - class_name&lt;br /&gt;
* 4 octets - float - x&lt;br /&gt;
* 4 octets - float - y&lt;br /&gt;
* 4 octets - float - z&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;LightAnimPointer&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
** 4 octets - next_offset - (LightAnimPointer)&lt;br /&gt;
** 4 octets - light_anim - ?&lt;br /&gt;
** 4 octets - position_anim - ?&lt;br /&gt;
** 4 octets - interst_anim - ?&lt;br /&gt;
Bugs dans HSDRaw - à tester&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;JObj&#039;&#039;&#039; : (0x40 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - flags&lt;br /&gt;
* 4 octets - child_offset (JObj)&lt;br /&gt;
* 4 octets - next_offset (JObj)&lt;br /&gt;
* 4 octets - dobj_offset (DObj)&lt;br /&gt;
* 4 octets [3] - float3 - rotation_xyz&lt;br /&gt;
* 4 octets [3] - float3 - scale_xyz&lt;br /&gt;
* 4 octets [3] - float3 - translation_xyz&lt;br /&gt;
* 4 octets - inverse_world_transform_offset (inverse world transform = Matrice de 4x3)&lt;br /&gt;
* 4 octets - robj_offset&lt;br /&gt;
&lt;br /&gt;
Pointé par les listes dans Root Node scene_data.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;JObjFlagsEnum&#039;&#039;&#039; : (peuvent se cumuler)&lt;br /&gt;
** NULL = 00 00 00 00&lt;br /&gt;
** SKELETON = 00 00 00 01&lt;br /&gt;
** SKELETON_ROOT = 00 00 00 02&lt;br /&gt;
** ENVELOPE_MODEL = 00 00 00 04&lt;br /&gt;
** CLASSICAL_SCALING = 00 00 00 08&lt;br /&gt;
** HIDDEN = 00 00 00 10&lt;br /&gt;
** PTCL = 00 00 00 20&lt;br /&gt;
** MTX_DIRTY = 00 00 00 40&lt;br /&gt;
** LIGHTING = 00 00 00 80&lt;br /&gt;
** TEXGEN = 00 00 01 00&lt;br /&gt;
** BILLBOARD = 00 00 02 00&lt;br /&gt;
** VBILLBOARD = 00 00 04 00&lt;br /&gt;
** HBILLBOARD = 00 00 06 00&lt;br /&gt;
** RBILLBOARD = 00 00 08 00&lt;br /&gt;
** INSTANCE = 00 00 10 00&lt;br /&gt;
** PBILLBOARD = 00 00 20 00&lt;br /&gt;
** SPLINE = 00 00 40 00&lt;br /&gt;
** FLIP_IK = 00 00 80 00&lt;br /&gt;
** SPECULAR = 00 01 00 00&lt;br /&gt;
** USE_QUATERNION = 00 02 00 00&lt;br /&gt;
** OPA = 00 04 00 00&lt;br /&gt;
** XLU = 00 08 00 00&lt;br /&gt;
** TEXEDGE = 00 10 00 00&lt;br /&gt;
** JOINT1 = 00 20 00 00&lt;br /&gt;
** JOINT2 = 00 40 00 00&lt;br /&gt;
** EFFECTOR = 00 60 00 00&lt;br /&gt;
** USER_DEFINED_MTX = 00 80 00 00&lt;br /&gt;
** MTX_INDEPEND_PARENT = 01 00 00 00&lt;br /&gt;
** MTX_INDEPEND_SRT = 02 00 00 00&lt;br /&gt;
** MTX_SCALE_COMPENSATE = 04 00 00 00&lt;br /&gt;
** ROOT_OPA = 10 00 00 00&lt;br /&gt;
** ROOT_XLU = 20 00 00 00&lt;br /&gt;
** ROOT_TEXEDGE = 40 00 00 00&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;InverseWorldTransform&#039;&#039;&#039; : (0x30 octets) ===&lt;br /&gt;
* 4 octets - float - M11&lt;br /&gt;
* 4 octets - float - M12&lt;br /&gt;
* 4 octets - float - M13&lt;br /&gt;
* 4 octets - float - M14&lt;br /&gt;
* 4 octets - float - M21&lt;br /&gt;
* 4 octets - float - M22&lt;br /&gt;
* 4 octets - float - M23&lt;br /&gt;
* 4 octets - float - M24&lt;br /&gt;
* 4 octets - float - M31&lt;br /&gt;
* 4 octets - float - M32&lt;br /&gt;
* 4 octets - float - M33&lt;br /&gt;
* 4 octets - float - M34&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;DObj&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - next_offset - prochain DOBJ&lt;br /&gt;
* 4 octets - mobj_offset - material offset&lt;br /&gt;
* 4 octets - pobj_offset - mesh offset&lt;br /&gt;
Liste chaînée qui permet de récupérer l&#039;ensemble des materials &amp;amp; mesh pour le JObj auquel il est lié.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;MObj&#039;&#039;&#039; : (0x18 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - render_flags - RenderFlagsEnum&lt;br /&gt;
* 4 octets - tobj_offset - offset de texture - peut être invalide s&#039;il n&#039;y a pas de texture pour le material&lt;br /&gt;
* 4 octets - material_offset - couleurs des materials ?&lt;br /&gt;
* 8 octets - PEDesc ?&lt;br /&gt;
&lt;br /&gt;
Contient les textures &amp;amp; informations sur les couleurs des Materials.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;RenderFlagsEnum&#039;&#039;&#039; : (se cumulent)&lt;br /&gt;
** USER = 80 00 00 00&lt;br /&gt;
** CONSTANT = 00 00 00 01&lt;br /&gt;
** VERTEX = 00 00 00 02&lt;br /&gt;
** BOTH = 00 00 00 03&lt;br /&gt;
** DIFFUSE = 00 00 00 04&lt;br /&gt;
** SPECULAR = 00 00 00 08&lt;br /&gt;
** TEX0 = 00 00 00 10&lt;br /&gt;
** TEX1 = 00 00 00 20&lt;br /&gt;
** TEX2 = 00 00 00 40&lt;br /&gt;
** TEX3 = 00 00 00 80&lt;br /&gt;
** TEX4 = 00 00 01 00&lt;br /&gt;
** TEX5 = 00 00 02 00&lt;br /&gt;
** TEX6 = 00 00 04 00&lt;br /&gt;
** TEX7 = 00 00 08 00&lt;br /&gt;
** TOON = 00 00 10 00&lt;br /&gt;
** ALPHA_MAT = 00 00 20 00&lt;br /&gt;
** ALPHA_VTX = 00 00 40 00&lt;br /&gt;
** ALPHA_BOTH = 00 00 60 00&lt;br /&gt;
** ZOFST = 01 00 00 00&lt;br /&gt;
** EFFECT = 02 00 00 00&lt;br /&gt;
** SHADOW = 04 00 00 00&lt;br /&gt;
** ZMODE_ALWAYS = 08 00 00 00&lt;br /&gt;
** DF_ALL = 10 00 00 00&lt;br /&gt;
** NO_ZUPDATE = 20 00 00 00&lt;br /&gt;
** XLU = 40 00 00 00&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;TObj&#039;&#039;&#039; : (0x5c octets) ===&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - tex_map_id - TexMapIdEnum&lt;br /&gt;
* 4 octets - gx_tex_gen_src - GXTexGenSrcEnum&lt;br /&gt;
* 4 octets - float - rx&lt;br /&gt;
* 4 octets - float - ry&lt;br /&gt;
* 4 octets - float - rz&lt;br /&gt;
* 4 octets - float - sx&lt;br /&gt;
* 4 octets - float - sy&lt;br /&gt;
* 4 octets - float - sz&lt;br /&gt;
* 4 octets - float - tx&lt;br /&gt;
* 4 octets - float - ty&lt;br /&gt;
* 4 octets - float - tz&lt;br /&gt;
* 4 octets - wrap_s - WrapEnum&lt;br /&gt;
* 4 octets - wrap_t - WrapEnum&lt;br /&gt;
* 1 octet - w_scale&lt;br /&gt;
* 1 octet - h_scale&lt;br /&gt;
* 2 octets - ?&lt;br /&gt;
* 1 octets - bump_map - (False = 00 ; True = 01)&lt;br /&gt;
* 4 bits - alpha_operation - AlphaOperationEnum&lt;br /&gt;
* 4 bits - color_operation - ColorOperationEnum&lt;br /&gt;
* 1 octet - shadow_lightmap - (False = 00 ; True = 01) (2 octets avec une Enum lightmap limite)&lt;br /&gt;
* 1 bit - ext_lightmap - (False = 0 ; True = 1)&lt;br /&gt;
* 1 bit - ambiant_lightmap - (False = 0 ; True = 1) &lt;br /&gt;
* 1 bit - specular_lightmap - (False = 0 ; True = 1)&lt;br /&gt;
* 1 bit - diffuse_lightmap (False = 0 ; True = 1)&lt;br /&gt;
* 4 bits - coord_type - CoordTypeEnum&lt;br /&gt;
* 4 octets - float - blending - utilisé quand color_operation ou alpha_operation == BLEND&lt;br /&gt;
* 4 octets - mag_filter - MagFilterEnum&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
Informations de Textures. Le TObj contient des informations sur les paramètres d&#039;environnement de textures utilisés pour le rendu graphique ainsi que les offset de l&#039;image et des données de la palette utilisés pour cette texture. Le plus important ici, c&#039;est l&#039;offset d&#039;image et la palette/tlut - si l&#039;image n&#039;est pas indexée (RGBA, CMPR, etc.) alors la structure de description palette/tlut n&#039;est pas utilisée.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;TexMapIdEnum&#039;&#039;&#039; :&lt;br /&gt;
** GX_TEXMAP0 = 00 00 00 00&lt;br /&gt;
** GX_TEXMAP1 = 00 00 00 01&lt;br /&gt;
** GX_TEXMAP2 = 00 00 00 02&lt;br /&gt;
** GX_TEXMAP3 = 00 00 00 03&lt;br /&gt;
** GX_TEXMAP4 = 00 00 00 04&lt;br /&gt;
** GX_TEXMAP5 = 00 00 00 05&lt;br /&gt;
** GX_TEXMAP6 = 00 00 00 06&lt;br /&gt;
** GX_TEXMAP7 = 00 00 00 07&lt;br /&gt;
** GX_MAX_TEXMAP = 00 00 00 08&lt;br /&gt;
** GX_TEXMAP_NULL = 00 00 00 09&lt;br /&gt;
** GX_TEXMAP_DISABLE = 00 00 00 0A&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;GXTexGenSrcEnum&#039;&#039;&#039; :&lt;br /&gt;
** GX_TG_POS = 00 00 00 00&lt;br /&gt;
** GX_TG_NRM = 00 00 00 01&lt;br /&gt;
** GX_TG_BINRM = 00 00 00 02&lt;br /&gt;
** GX_TG_TANGENT = 00 00 00 03&lt;br /&gt;
** GX_TG_TEX0 = 00 00 00 04&lt;br /&gt;
** GX_TG_TEX1 = 00 00 00 05&lt;br /&gt;
** GX_TG_TEX2 = 00 00 00 06&lt;br /&gt;
** GX_TG_TEX3 = 00 00 00 07&lt;br /&gt;
** GX_TG_TEX4 = 00 00 00 08&lt;br /&gt;
** GX_TG_TEX5 = 00 00 00 09&lt;br /&gt;
** GX_TG_TEX6 = 00 00 00 0A&lt;br /&gt;
** GX_TG_TEX7 = 00 00 00 0B&lt;br /&gt;
** GX_TG_TEXCOORD0 = 00 00 00 0C&lt;br /&gt;
** GX_TG_TEXCOORD1 = 00 00 00 0D&lt;br /&gt;
** GX_TG_TEXCOORD2 = 00 00 00 0E&lt;br /&gt;
** GX_TG_TEXCOORD3 = 00 00 00 0F&lt;br /&gt;
** GX_TG_TEXCOORD4 = 00 00 00 10&lt;br /&gt;
** GX_TG_TEXCOORD5 = 00 00 00 11&lt;br /&gt;
** GX_TG_TEXCOORD6 = 00 00 00 12&lt;br /&gt;
** GX_TG_COLOR0 = 00 00 00 13&lt;br /&gt;
** GX_TG_COLOR1 = 00 00 00 14&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;AlphaOperationEnum&#039;&#039;&#039;:&lt;br /&gt;
** NONE = 0X&lt;br /&gt;
** ALPHAMASK = 1X&lt;br /&gt;
** BLEND = 2X&lt;br /&gt;
** MODULATE = 3X&lt;br /&gt;
** REPLACE = 4X&lt;br /&gt;
** PASS = 5X&lt;br /&gt;
** ADD = 6X&lt;br /&gt;
** SUB = 7X&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ColorOperationEnum&#039;&#039;&#039;:&lt;br /&gt;
** NONE = X0&lt;br /&gt;
** ALPHA_MASK = X1&lt;br /&gt;
** RGB_MASK = X2&lt;br /&gt;
** BLEND = X3&lt;br /&gt;
** MODULATE = X4&lt;br /&gt;
** REPLACE = X5&lt;br /&gt;
** PASS = X6&lt;br /&gt;
** ADD = X7&lt;br /&gt;
** SUB = X8&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;CoordTypeEnum&#039;&#039;&#039;:&lt;br /&gt;
** UV = X0&lt;br /&gt;
** REFLECTION = X1&lt;br /&gt;
** HILIGHT = X2&lt;br /&gt;
** SHADOW = X3&lt;br /&gt;
** TOON = X4&lt;br /&gt;
** GRADATION = X5&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MagFilterEnum&#039;&#039;&#039;:&lt;br /&gt;
** GX_NEAR = 00 00 00 00&lt;br /&gt;
** GX_LINEAR = 00 00 00 01&lt;br /&gt;
** GX_NEAR_MIP_NEAR = 00 00 00 02&lt;br /&gt;
** GX_LIN_MIP_NEAR = 00 00 00 03&lt;br /&gt;
** GX_NEAR_MIP_LIN = 00 00 00 04&lt;br /&gt;
** GX_LIN_MIP_LIN = 00 00 00 05&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;WrapEnum&#039;&#039;&#039;:&lt;br /&gt;
** CLAMP = 00 00 00 00&lt;br /&gt;
** REPEAT = 00 00 00 01&lt;br /&gt;
** MIRROR = 00 00 00 02&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Material&#039;&#039;&#039; : (0x14 octets) ===&lt;br /&gt;
* 1 octets - AMB_R - (ambient)&lt;br /&gt;
* 1 octets - AMB_G&lt;br /&gt;
* 1 octets - AMB_B&lt;br /&gt;
* 1 octets - AMB_A&lt;br /&gt;
* 1 octets - DIF_R - (diffuse)&lt;br /&gt;
* 1 octets - DIF_G&lt;br /&gt;
* 1 octets - DIF_B&lt;br /&gt;
* 1 octets - DIF_A&lt;br /&gt;
* 1 octets - SPC_R - (specular)&lt;br /&gt;
* 1 octets - SPC_G&lt;br /&gt;
* 1 octets - SPC_B&lt;br /&gt;
* 1 octets - SPC_A&lt;br /&gt;
* 4 octets - float - alpha&lt;br /&gt;
* 4 octets - float - shininess&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;PObj&#039;&#039;&#039; : (0x18 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - next_offset - pobj&lt;br /&gt;
* 4 octets - vertex_attr_list_offset&lt;br /&gt;
* 2 octets - Flags - PObjFlagsEnum&lt;br /&gt;
* 2 octets - display_list_size - number of 0x20 (32) byte blocks occupied by display list data&lt;br /&gt;
* 4 octets - display_list_offset&lt;br /&gt;
* 4 octets - weight_list_offset - ? verifier qu&#039;on retrouve bien le tableau d&#039;envelope_weights à cet offset&lt;br /&gt;
&lt;br /&gt;
Comme l&#039;indique next_offset, il s&#039;agit d&#039;une liste de meshs à afficher pour un material donné référencé par un dobj. PObj contient les offsets de vertex attributes / display list / joint weight list ce qui suffit et permet d’interpréter et traiter les coordonnées de vertices, normals &amp;amp; textures.&lt;br /&gt;
&lt;br /&gt;
Les attributs vertex sont les plus important - les parametres specifiés contrôlent tout : du format, de la taille des données de chaque vertex, normal et coordonnées de textures et comment ces valeurs sont dimensionnées (scaled) par rapport à la présence et la taille de chaque valeur d&#039;index qui apparaît dans la display list information.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PObjFlagsEnum&#039;&#039;&#039; :&lt;br /&gt;
** Inconnu0 = 00 01&lt;br /&gt;
** Inconnu1 = 00 02&lt;br /&gt;
** ANIM = 00 08&lt;br /&gt;
** SHAPE_ANIM = 10 00&lt;br /&gt;
** ENVELOPE = 20 00&lt;br /&gt;
** CULLBACK = 40 00&lt;br /&gt;
** CULLFRONT = 80 00&lt;br /&gt;
&lt;br /&gt;
=== EnvelopeWeights : (0x? octets) ===&lt;br /&gt;
* 4 octets - envelope_count&lt;br /&gt;
* [envelope_count]:&lt;br /&gt;
** 4 octets - float - weight&lt;br /&gt;
** 4 octets - pad ?&lt;br /&gt;
* 4 octets - jobj_list_offset&lt;br /&gt;
&lt;br /&gt;
=== not verified yet ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;IMAGE_HEADER&#039;&#039;&#039; :&lt;br /&gt;
** 4 octets - image_offset - image data&lt;br /&gt;
** 2 octets - width&lt;br /&gt;
** 2 octets - height&lt;br /&gt;
** 4 octets - image_format&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PALETTE_HEADER&#039;&#039;&#039; : (0x10)&lt;br /&gt;
** 4 octets - palette_offset - palette data&lt;br /&gt;
** 4 octets - palette_format&lt;br /&gt;
** 4 octets - Inconnu&lt;br /&gt;
** 2 octets - color_count&lt;br /&gt;
** 2 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
image_offset et palette_offset sont souvent partagés par plusieurs textures - savoir ça permet de retrouver toutes les informations sur les images des textures (largeur, hauteur, format), ainsi que le format et le nombre de couleurs de la palette/tlut.&lt;br /&gt;
&lt;br /&gt;
Le format d&#039;image ne détermine pas le nombre total de couleurs de la palette qu&#039;elle utilisent. Par exemple, une image indexée sur 8 bits aurait un maximum de 256 couleurs mais seulement 136 ou 221 couleurs sont actuellement utilisées. De la sorte, la palette n&#039;utilisera pas la taille totale qu&#039;elle devrait utiliser.&lt;br /&gt;
&lt;br /&gt;
Les images suivent la structure généralement utilisée par la GameCube :&lt;br /&gt;
&lt;br /&gt;
IMAGE FORMATS :&lt;br /&gt;
* case 0: //i4&lt;br /&gt;
* case 1: //i8&lt;br /&gt;
* case 2: //i4a4&lt;br /&gt;
* case 3: //i8a8&lt;br /&gt;
* case 4: //r5g6b5&lt;br /&gt;
* case 5: //rgb5a3&lt;br /&gt;
* case 6: //r8g8b8a8&lt;br /&gt;
* case 8: //index4&lt;br /&gt;
* case 9: //index8&lt;br /&gt;
* case 0xa: //index14x2&lt;br /&gt;
* case 0xe: //s3tc1&lt;br /&gt;
&lt;br /&gt;
Les formats indexés utilisent aussi les informations de palettes/tlut et les données peuvent apparaître en plusieurs formats :&lt;br /&gt;
&lt;br /&gt;
PALETTE FORMATS :&lt;br /&gt;
* case 0: //ia8&lt;br /&gt;
* case 1: //r5g6b5&lt;br /&gt;
* case 2: //rgb5a3&lt;br /&gt;
&lt;br /&gt;
---&amp;gt; &amp;quot;Joint Data - Accessing Geometry, Mesh, and Vertex Attributes&amp;quot; https://smashboards.com/threads/melee-dat-format.292603/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
trad a revoir à partir de là, il faut investiguer le rendu 3D sur GameCube pour mieux comprendre&lt;br /&gt;
&lt;br /&gt;
// déclaration d&#039;un vertex et attribute information&lt;br /&gt;
// attr, type, cnt, data_type, flags?, file_offset&lt;br /&gt;
* ATTR_DATA&lt;br /&gt;
** 4 octets - GXAttr     vtx_attr_offset - attr&lt;br /&gt;
** 4 octets - GXAttrType vtx_attr_type   - index_type&lt;br /&gt;
** 4 octets - GXCompCnt  comp_cnt        - cnt&lt;br /&gt;
** 4 octets - GXCompType comp_type       - data_type	&lt;br /&gt;
** 1 octets - scale&lt;br /&gt;
** 1 octets - Inconnu&lt;br /&gt;
** 2 octets - vtx_stride&lt;br /&gt;
** 2 octets - data_offset&lt;br /&gt;
&lt;br /&gt;
vertex_attr_offset pointe sur une liste d&#039;attributs de vertex. Leur nombre n&#039;est pas donné. Les données dans cette structure suivent les informations et les types conçus par l&#039;architecture GameCube/WII et son API. La liste est terminée par une valeur spécifique de vtx_attr qui signale la fin de cette liste. Avec un accès à la doku SDK, il serait fortement conseillé de lire la section à propos des &amp;quot;vertex attributes and other specifications&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
La valeur de vtx_attr determine le type de donnée que cet attribut désigne et peut indiquer un nombre de types natifs utilisés utilisés pour passer les données entre les interfaces logicielles et matérielles.&lt;br /&gt;
&lt;br /&gt;
Les valeures possibles sont les suivantes :&lt;br /&gt;
* enum GXAttr (4 octets)&lt;br /&gt;
** GX_VA_PNMTXIDX = 0,    // position/normal matrix index&lt;br /&gt;
** GX_VA_TEX0MTXIDX,      // texture 0 matrix index&lt;br /&gt;
** GX_VA_TEX1MTXIDX,      // texture 1 matrix index&lt;br /&gt;
** GX_VA_TEX2MTXIDX,      // texture 2 matrix index&lt;br /&gt;
** GX_VA_TEX3MTXIDX,      // texture 3 matrix index&lt;br /&gt;
** GX_VA_TEX4MTXIDX,      // texture 4 matrix index&lt;br /&gt;
** GX_VA_TEX5MTXIDX,      // texture 5 matrix index&lt;br /&gt;
** GX_VA_TEX6MTXIDX,      // texture 6 matrix index&lt;br /&gt;
** GX_VA_TEX7MTXIDX,      // texture 7 matrix index&lt;br /&gt;
** GX_VA_POS      = 9,    // position&lt;br /&gt;
** GX_VA_NRM,             // normal&lt;br /&gt;
** GX_VA_CLR0,            // color 0&lt;br /&gt;
** GX_VA_CLR1,            // color 1&lt;br /&gt;
** GX_VA_TEX0,            // input texture coordinate 0&lt;br /&gt;
** GX_VA_TEX1,            // input texture coordinate 1&lt;br /&gt;
** GX_VA_TEX2,            // input texture coordinate 2&lt;br /&gt;
** GX_VA_TEX3,            // input texture coordinate 3&lt;br /&gt;
** GX_VA_TEX4,            // input texture coordinate 4&lt;br /&gt;
** GX_VA_TEX5,            // input texture coordinate 5&lt;br /&gt;
** GX_VA_TEX6,            // input texture coordinate 6&lt;br /&gt;
** GX_VA_TEX7,            // input texture coordinate 7&lt;br /&gt;
&lt;br /&gt;
** GX_POS_MTX_ARRAY,      // position matrix array pointer&lt;br /&gt;
** GX_NRM_MTX_ARRAY,      // normal matrix array pointer&lt;br /&gt;
** GX_TEX_MTX_ARRAY,      // texture matrix array pointer&lt;br /&gt;
** GX_LIGHT_ARRAY,        // light parameter array pointer&lt;br /&gt;
** GX_VA_NBT,             // normal, bi-normal, tangent &lt;br /&gt;
** GX_VA_MAX_ATTR,        // maximum number of vertex attributes&lt;br /&gt;
&lt;br /&gt;
** GX_VA_NULL     = 0xff  // NULL attribute (to mark end of lists)&lt;br /&gt;
&lt;br /&gt;
Toutes les données nécessaires pour représenter un mesh peuvent être spécifiées et indexées d&#039;une manière ou d&#039;une autre. De même, GX_VA_TEX0MTXIDX, GX_VA_CLR0, et autres sont aussi possibles - les valeurs les plus fréquentes dans les données SSBM sont : GX_VA_PNMTXIDX, GX_VA_POS, GX_VA_NRM, et GX_VA_TEX0. Which is to be expected as joint matrices, vertex positions/normals, and texture coordinates respectively are probably the most basic of elements needed to display a texture mesh, whether static or animated.&lt;br /&gt;
&lt;br /&gt;
When the value of vtx_attr == GX_VA_NULL (0xFF), the end of the vertex attribute array has been reached.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The vtx_attr_type values is actually associated with how the value is indexed, and can thus also determine the size of the index value within the display list data.&lt;br /&gt;
&lt;br /&gt;
* 4 octets - enum GXAttrType&lt;br /&gt;
** GX_NONE    = 0,&lt;br /&gt;
** GX_DIRECT,&lt;br /&gt;
** GX_INDEX8,&lt;br /&gt;
** GX_INDEX16&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Structures COLL_DATA : (données de collisions)&lt;br /&gt;
** 4 octets - vertex_offset (2 float par entrée correspondant à des données 2D probablement)&lt;br /&gt;
** 4 octets - vertex_count&lt;br /&gt;
** 4 octets - index_offset&lt;br /&gt;
** 4 octets - index_count&lt;br /&gt;
** 4 octets [5] - tableau inconnu&lt;br /&gt;
*** 2 octets - index_start&lt;br /&gt;
*** 2 octets - index_count&lt;br /&gt;
** 4 octets - Inconnu&lt;br /&gt;
** 4 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
[[Category:Implementations]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=Models&amp;diff=1533</id>
		<title>Models</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=Models&amp;diff=1533"/>
		<updated>2023-10-07T13:44:51Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: /* Gotcha Force Models */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
{{Research | 2| Researches on headers / bodies structures are partially achieved. }}&lt;br /&gt;
&lt;br /&gt;
== Gotcha Force Models ==&lt;br /&gt;
&lt;br /&gt;
Gotcha Force models work as those from the game Super Smash Bros Melee (SSBM) investigated by its [https://smashboards.com/threads/melee-dat-format.292603/ community].&lt;br /&gt;
&lt;br /&gt;
A model is a file format that organizes objects and resources serialized to be used by the &#039;&#039;&#039;H&#039;&#039;&#039;al &#039;&#039;&#039;S&#039;&#039;&#039;ys&#039;&#039;&#039;D&#039;&#039;&#039;olphin (&#039;&#039;&#039;HSD&#039;&#039;&#039;) library. The HSD library is used in several Capcom games. These are graphic materials structured in a hierarchical way. Some pictures present in the models seem to indicate the use of [https://learn.foundry.com/modo/901/content/help/pages/shading_lighting/shader_items/matcap.html matcap] technic. This library uses Dolphin SDK functions like GX / MTX and so on.&lt;br /&gt;
&lt;br /&gt;
=== Fichiers concernés ===&lt;br /&gt;
L&#039;ensemble des fichiers ayant dans leur titre &#039;&#039;&#039;_mdl&#039;&#039;&#039; sont des fichiers modèles correspondant au format décrit dans cette page. On notera les fichiers [[ARZ (Gotcha Force)|.arz]] qui sont des modèles compressés. Le fichier collision.arc et les fichiers tdc00.arc à tdc09.arc sont aussi des modèles.&lt;br /&gt;
&lt;br /&gt;
Les fichiers modèles se retrouvent aussi dans les pzz des borgs (plxxxx.pzz) en position 004 à 009.&lt;br /&gt;
&lt;br /&gt;
=== HSDRaw ===&lt;br /&gt;
HSDRaw, un éditeur 3D dotnet de ce format est instable sur mon Windows (algoflash). Il est cependant prouvé qu&#039;un edit des _mdl pour commencer à l&#039;offset 0x100 - après le préambule - permet de visualiser le fichier sur HSDRaw et d&#039;avoir le rendu 3D du Borg (click sur le premier dossier JOBJ - puis le JOBJ dedans et double click sur le nœud en violet). Cela devrait aussi permettre d&#039;éditer certaines propriétés ?&lt;br /&gt;
&lt;br /&gt;
== Structure générale ==&lt;br /&gt;
Le format des modèles se découpe en plusieurs blocks. Le préambule fait 0x100 octets au tout début du fichier. Il est souvent absent. Toutes les valeurs sont en unsigned big endian, et le pad est en Nulls bytes (\x00). 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&#039;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&#039;il est peu probable qu&#039;un offset pointe au milieu d&#039;une structure.&lt;br /&gt;
&lt;br /&gt;
L&#039;ensemble des fichiers répondant à ce format on un seul root_node de type SObj (Scene data).&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Préambule&#039;&#039;&#039; : (0x100 octets / 0 octets) ===&lt;br /&gt;
* 4 octets - hsd_header_offset=0x100 (toujours)&lt;br /&gt;
* 4 octets - bones_flags_table_offset=0x20 (toujours) - offset de la liste des flags des armatures&lt;br /&gt;
* 4 octets - bones_table_offset=0xC0 (toujours) - offset de la liste des armatures&lt;br /&gt;
* 20 octets - Pad - (toujours)&lt;br /&gt;
* 4 octets [32] - Inconnu (flags des armatures ?) 1 octet par flag ?&lt;br /&gt;
* 32 octets - Pad - (toujours)&lt;br /&gt;
* 32 octets - armatures ?&lt;br /&gt;
* 32 octets - Pad - (toujours)&lt;br /&gt;
=== &#039;&#039;&#039;HSD Header&#039;&#039;&#039; - (0x20 octets) ===&lt;br /&gt;
* 4 octets - Taille totale du fichier&lt;br /&gt;
* 4 octets - Taille du Data block&lt;br /&gt;
* 4 octets - Nombre d&#039;entrée dans la Table de relocs&lt;br /&gt;
* 4 octets - root0_count&lt;br /&gt;
* 4 octets - root1_count&lt;br /&gt;
* 12 octets - Pad - (toujours)&lt;br /&gt;
=== &#039;&#039;&#039;Data block&#039;&#039;&#039; : ===&lt;br /&gt;
* JOBJ, etc. -&amp;gt; Ces structures sont détaillée plus loin ci-dessous.&lt;br /&gt;
=== &#039;&#039;&#039;Relocation Table&#039;&#039;&#039; : ===&lt;br /&gt;
* Tableau d&#039;offsets de 4 octets - Offsets des structures dans le DB.&lt;br /&gt;
=== &#039;&#039;&#039;Root Nodes (2)&#039;&#039;&#039; : ===&lt;br /&gt;
* Tableau de taille 8 * root0_count&lt;br /&gt;
** 4 octets - root_offset - relatif au DB&lt;br /&gt;
** 4 octets - string_table_offset - relatif à la StringTable&lt;br /&gt;
* Tableau de taille 8 * root1_count&lt;br /&gt;
** 4 octets - root_offset - relatif au DB&lt;br /&gt;
** 4 octets - string_table_offset - relatif à la StringTable&lt;br /&gt;
=== &#039;&#039;&#039;String Table&#039;&#039;&#039; : ===&lt;br /&gt;
* Suite de strings terminées par Null au nombre de root0_count + root1_count&lt;br /&gt;
&lt;br /&gt;
== Structures rencontrées dans le DB ==&lt;br /&gt;
Note : l&#039;arborescence est cumulative sur les transformations pour les relations parents-&amp;gt;enfants&lt;br /&gt;
&lt;br /&gt;
Les Noeuds Racine qui ont pour nom &amp;quot;scene_data&amp;quot; pointent sur un SObj :&lt;br /&gt;
=== &#039;&#039;&#039;SObj&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
* 4 octets - JObjDescs_offsets_list_offset&lt;br /&gt;
* 4 octets - Cameras_list_offset&lt;br /&gt;
* 4 octets - Lights_list_offset&lt;br /&gt;
* 4 octets - Fog&lt;br /&gt;
&lt;br /&gt;
&amp;quot;scene_data&amp;quot; == nom du nœud racine&lt;br /&gt;
JObjDescs_offsets_list_offset, cameras.. pointent sur une liste d&#039;offsets terminée par 4 octets à 0x00.&lt;br /&gt;
lights_list_offset pointe sur des couples (4 octets - LObj_offset ; 4 octets - light_anim_pointer_offset)&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;JObjDesc&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
* 4 octets - root_joint_offset - JObj&lt;br /&gt;
* 4 octets - joint_animations_offset - ?&lt;br /&gt;
* 4 octets - material_animations_offset - ?&lt;br /&gt;
* 4 octets - shape_animations_offset - ?&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;CObj&#039;&#039;&#039; : (0x38 octets) ===&lt;br /&gt;
* 4 octets - flags&lt;br /&gt;
* 4 octets - projection_type - ProjectionTypeEnum&lt;br /&gt;
* 2 octets - viewport_left&lt;br /&gt;
* 2 octets - viewport_right&lt;br /&gt;
* 2 octets - viewport_top&lt;br /&gt;
* 2 octets - viewport_bottom&lt;br /&gt;
* 4 octets - proj_width&lt;br /&gt;
* 4 octets - proj_height&lt;br /&gt;
* 4 octets - eye_offset - WObj&lt;br /&gt;
* 4 octets - target_offset - WObj&lt;br /&gt;
* 4 octets - roll&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - float - near_clip&lt;br /&gt;
* 4 octets - float - far_clip&lt;br /&gt;
* 4 octets - float - field_of_view&lt;br /&gt;
* 4 octets - float - aspect&lt;br /&gt;
Camera object. Note : pour frustrum ou ortho, la structure est différente.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ProjectionTypeEnum&#039;&#039;&#039;:&lt;br /&gt;
** PERSPECTIVE = 1&lt;br /&gt;
** FRUSTRUM = 2&lt;br /&gt;
** ORTHO = 3&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;WObj&#039;&#039;&#039;: (0x14 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - float - v1&lt;br /&gt;
* 4 octets - float - v2&lt;br /&gt;
* 4 octets - float - v3&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
eye / target&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;LObj&#039;&#039;&#039; : (0x1c octets) ===&lt;br /&gt;
* 4 octets - class_name&lt;br /&gt;
* 4 octets - next_offset&lt;br /&gt;
* 2 octets - flags - LObjFlagsEnum&lt;br /&gt;
* 2 octets - attenuation_flags - LObjAttenuationFlagsEnum&lt;br /&gt;
* 1 octet - color_r&lt;br /&gt;
* 1 octet - color_g&lt;br /&gt;
* 1 octet - color_b&lt;br /&gt;
* 1 octet - color_alpha&lt;br /&gt;
* 4 octets - lobj_point_offset - position&lt;br /&gt;
* 4 octets - infinite_data&lt;br /&gt;
* 4 octets - point_spot_data&lt;br /&gt;
light&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;LObjFlagsEnum&#039;&#039;&#039; :&lt;br /&gt;
** LOBJ_AMBIANT = 00 00&lt;br /&gt;
** LOBJ_INFINITE = 00 01&lt;br /&gt;
** LOBJ_POINT = 00 02&lt;br /&gt;
** LOBJ_SPOT = 00 03&lt;br /&gt;
** LOBJ_DIFFUSE = 00 04&lt;br /&gt;
** LOBJ_SPECULAR = 00 08&lt;br /&gt;
** LOBJ_ALPHA = 00 10&lt;br /&gt;
** LOBJ_HIDDEN = 00 20&lt;br /&gt;
** LOBJ_RAW_PARAM = 00 40&lt;br /&gt;
** LOBJ_DIFF_DIRTY = 00 80&lt;br /&gt;
** LOBJ_SPEC_DIRTY = 01 00&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;LObjAttenuationFlagsEnum&#039;&#039;&#039; :&lt;br /&gt;
** LOBJ_LIGHT_ATTN_NONE = 00 00&lt;br /&gt;
** LOBJ_LIGHT_ATTN = 00 01&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;LObjPoint&#039;&#039;&#039; : (0x14 octets) ===&lt;br /&gt;
* 4 octets - class_name&lt;br /&gt;
* 4 octets - float - x&lt;br /&gt;
* 4 octets - float - y&lt;br /&gt;
* 4 octets - float - z&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;LightAnimPointer&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
** 4 octets - next_offset - (LightAnimPointer)&lt;br /&gt;
** 4 octets - light_anim - ?&lt;br /&gt;
** 4 octets - position_anim - ?&lt;br /&gt;
** 4 octets - interst_anim - ?&lt;br /&gt;
Bugs dans HSDRaw - à tester&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;JObj&#039;&#039;&#039; : (0x40 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - flags&lt;br /&gt;
* 4 octets - child_offset (JObj)&lt;br /&gt;
* 4 octets - next_offset (JObj)&lt;br /&gt;
* 4 octets - dobj_offset (DObj)&lt;br /&gt;
* 4 octets [3] - float3 - rotation_xyz&lt;br /&gt;
* 4 octets [3] - float3 - scale_xyz&lt;br /&gt;
* 4 octets [3] - float3 - translation_xyz&lt;br /&gt;
* 4 octets - inverse_world_transform_offset (inverse world transform = Matrice de 4x3)&lt;br /&gt;
* 4 octets - robj_offset&lt;br /&gt;
&lt;br /&gt;
Pointé par les listes dans Root Node scene_data.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;JObjFlagsEnum&#039;&#039;&#039; : (peuvent se cumuler)&lt;br /&gt;
** NULL = 00 00 00 00&lt;br /&gt;
** SKELETON = 00 00 00 01&lt;br /&gt;
** SKELETON_ROOT = 00 00 00 02&lt;br /&gt;
** ENVELOPE_MODEL = 00 00 00 04&lt;br /&gt;
** CLASSICAL_SCALING = 00 00 00 08&lt;br /&gt;
** HIDDEN = 00 00 00 10&lt;br /&gt;
** PTCL = 00 00 00 20&lt;br /&gt;
** MTX_DIRTY = 00 00 00 40&lt;br /&gt;
** LIGHTING = 00 00 00 80&lt;br /&gt;
** TEXGEN = 00 00 01 00&lt;br /&gt;
** BILLBOARD = 00 00 02 00&lt;br /&gt;
** VBILLBOARD = 00 00 04 00&lt;br /&gt;
** HBILLBOARD = 00 00 06 00&lt;br /&gt;
** RBILLBOARD = 00 00 08 00&lt;br /&gt;
** INSTANCE = 00 00 10 00&lt;br /&gt;
** PBILLBOARD = 00 00 20 00&lt;br /&gt;
** SPLINE = 00 00 40 00&lt;br /&gt;
** FLIP_IK = 00 00 80 00&lt;br /&gt;
** SPECULAR = 00 01 00 00&lt;br /&gt;
** USE_QUATERNION = 00 02 00 00&lt;br /&gt;
** OPA = 00 04 00 00&lt;br /&gt;
** XLU = 00 08 00 00&lt;br /&gt;
** TEXEDGE = 00 10 00 00&lt;br /&gt;
** JOINT1 = 00 20 00 00&lt;br /&gt;
** JOINT2 = 00 40 00 00&lt;br /&gt;
** EFFECTOR = 00 60 00 00&lt;br /&gt;
** USER_DEFINED_MTX = 00 80 00 00&lt;br /&gt;
** MTX_INDEPEND_PARENT = 01 00 00 00&lt;br /&gt;
** MTX_INDEPEND_SRT = 02 00 00 00&lt;br /&gt;
** MTX_SCALE_COMPENSATE = 04 00 00 00&lt;br /&gt;
** ROOT_OPA = 10 00 00 00&lt;br /&gt;
** ROOT_XLU = 20 00 00 00&lt;br /&gt;
** ROOT_TEXEDGE = 40 00 00 00&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;InverseWorldTransform&#039;&#039;&#039; : (0x30 octets) ===&lt;br /&gt;
* 4 octets - float - M11&lt;br /&gt;
* 4 octets - float - M12&lt;br /&gt;
* 4 octets - float - M13&lt;br /&gt;
* 4 octets - float - M14&lt;br /&gt;
* 4 octets - float - M21&lt;br /&gt;
* 4 octets - float - M22&lt;br /&gt;
* 4 octets - float - M23&lt;br /&gt;
* 4 octets - float - M24&lt;br /&gt;
* 4 octets - float - M31&lt;br /&gt;
* 4 octets - float - M32&lt;br /&gt;
* 4 octets - float - M33&lt;br /&gt;
* 4 octets - float - M34&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;DObj&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - next_offset - prochain DOBJ&lt;br /&gt;
* 4 octets - mobj_offset - material offset&lt;br /&gt;
* 4 octets - pobj_offset - mesh offset&lt;br /&gt;
Liste chaînée qui permet de récupérer l&#039;ensemble des materials &amp;amp; mesh pour le JObj auquel il est lié.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;MObj&#039;&#039;&#039; : (0x18 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - render_flags - RenderFlagsEnum&lt;br /&gt;
* 4 octets - tobj_offset - offset de texture - peut être invalide s&#039;il n&#039;y a pas de texture pour le material&lt;br /&gt;
* 4 octets - material_offset - couleurs des materials ?&lt;br /&gt;
* 8 octets - PEDesc ?&lt;br /&gt;
&lt;br /&gt;
Contient les textures &amp;amp; informations sur les couleurs des Materials.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;RenderFlagsEnum&#039;&#039;&#039; : (se cumulent)&lt;br /&gt;
** USER = 80 00 00 00&lt;br /&gt;
** CONSTANT = 00 00 00 01&lt;br /&gt;
** VERTEX = 00 00 00 02&lt;br /&gt;
** BOTH = 00 00 00 03&lt;br /&gt;
** DIFFUSE = 00 00 00 04&lt;br /&gt;
** SPECULAR = 00 00 00 08&lt;br /&gt;
** TEX0 = 00 00 00 10&lt;br /&gt;
** TEX1 = 00 00 00 20&lt;br /&gt;
** TEX2 = 00 00 00 40&lt;br /&gt;
** TEX3 = 00 00 00 80&lt;br /&gt;
** TEX4 = 00 00 01 00&lt;br /&gt;
** TEX5 = 00 00 02 00&lt;br /&gt;
** TEX6 = 00 00 04 00&lt;br /&gt;
** TEX7 = 00 00 08 00&lt;br /&gt;
** TOON = 00 00 10 00&lt;br /&gt;
** ALPHA_MAT = 00 00 20 00&lt;br /&gt;
** ALPHA_VTX = 00 00 40 00&lt;br /&gt;
** ALPHA_BOTH = 00 00 60 00&lt;br /&gt;
** ZOFST = 01 00 00 00&lt;br /&gt;
** EFFECT = 02 00 00 00&lt;br /&gt;
** SHADOW = 04 00 00 00&lt;br /&gt;
** ZMODE_ALWAYS = 08 00 00 00&lt;br /&gt;
** DF_ALL = 10 00 00 00&lt;br /&gt;
** NO_ZUPDATE = 20 00 00 00&lt;br /&gt;
** XLU = 40 00 00 00&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;TObj&#039;&#039;&#039; : (0x5c octets) ===&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - tex_map_id - TexMapIdEnum&lt;br /&gt;
* 4 octets - gx_tex_gen_src - GXTexGenSrcEnum&lt;br /&gt;
* 4 octets - float - rx&lt;br /&gt;
* 4 octets - float - ry&lt;br /&gt;
* 4 octets - float - rz&lt;br /&gt;
* 4 octets - float - sx&lt;br /&gt;
* 4 octets - float - sy&lt;br /&gt;
* 4 octets - float - sz&lt;br /&gt;
* 4 octets - float - tx&lt;br /&gt;
* 4 octets - float - ty&lt;br /&gt;
* 4 octets - float - tz&lt;br /&gt;
* 4 octets - wrap_s - WrapEnum&lt;br /&gt;
* 4 octets - wrap_t - WrapEnum&lt;br /&gt;
* 1 octet - w_scale&lt;br /&gt;
* 1 octet - h_scale&lt;br /&gt;
* 2 octets - ?&lt;br /&gt;
* 1 octets - bump_map - (False = 00 ; True = 01)&lt;br /&gt;
* 4 bits - alpha_operation - AlphaOperationEnum&lt;br /&gt;
* 4 bits - color_operation - ColorOperationEnum&lt;br /&gt;
* 1 octet - shadow_lightmap - (False = 00 ; True = 01) (2 octets avec une Enum lightmap limite)&lt;br /&gt;
* 1 bit - ext_lightmap - (False = 0 ; True = 1)&lt;br /&gt;
* 1 bit - ambiant_lightmap - (False = 0 ; True = 1) &lt;br /&gt;
* 1 bit - specular_lightmap - (False = 0 ; True = 1)&lt;br /&gt;
* 1 bit - diffuse_lightmap (False = 0 ; True = 1)&lt;br /&gt;
* 4 bits - coord_type - CoordTypeEnum&lt;br /&gt;
* 4 octets - float - blending - utilisé quand color_operation ou alpha_operation == BLEND&lt;br /&gt;
* 4 octets - mag_filter - MagFilterEnum&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
Informations de Textures. Le TObj contient des informations sur les paramètres d&#039;environnement de textures utilisés pour le rendu graphique ainsi que les offset de l&#039;image et des données de la palette utilisés pour cette texture. Le plus important ici, c&#039;est l&#039;offset d&#039;image et la palette/tlut - si l&#039;image n&#039;est pas indexée (RGBA, CMPR, etc.) alors la structure de description palette/tlut n&#039;est pas utilisée.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;TexMapIdEnum&#039;&#039;&#039; :&lt;br /&gt;
** GX_TEXMAP0 = 00 00 00 00&lt;br /&gt;
** GX_TEXMAP1 = 00 00 00 01&lt;br /&gt;
** GX_TEXMAP2 = 00 00 00 02&lt;br /&gt;
** GX_TEXMAP3 = 00 00 00 03&lt;br /&gt;
** GX_TEXMAP4 = 00 00 00 04&lt;br /&gt;
** GX_TEXMAP5 = 00 00 00 05&lt;br /&gt;
** GX_TEXMAP6 = 00 00 00 06&lt;br /&gt;
** GX_TEXMAP7 = 00 00 00 07&lt;br /&gt;
** GX_MAX_TEXMAP = 00 00 00 08&lt;br /&gt;
** GX_TEXMAP_NULL = 00 00 00 09&lt;br /&gt;
** GX_TEXMAP_DISABLE = 00 00 00 0A&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;GXTexGenSrcEnum&#039;&#039;&#039; :&lt;br /&gt;
** GX_TG_POS = 00 00 00 00&lt;br /&gt;
** GX_TG_NRM = 00 00 00 01&lt;br /&gt;
** GX_TG_BINRM = 00 00 00 02&lt;br /&gt;
** GX_TG_TANGENT = 00 00 00 03&lt;br /&gt;
** GX_TG_TEX0 = 00 00 00 04&lt;br /&gt;
** GX_TG_TEX1 = 00 00 00 05&lt;br /&gt;
** GX_TG_TEX2 = 00 00 00 06&lt;br /&gt;
** GX_TG_TEX3 = 00 00 00 07&lt;br /&gt;
** GX_TG_TEX4 = 00 00 00 08&lt;br /&gt;
** GX_TG_TEX5 = 00 00 00 09&lt;br /&gt;
** GX_TG_TEX6 = 00 00 00 0A&lt;br /&gt;
** GX_TG_TEX7 = 00 00 00 0B&lt;br /&gt;
** GX_TG_TEXCOORD0 = 00 00 00 0C&lt;br /&gt;
** GX_TG_TEXCOORD1 = 00 00 00 0D&lt;br /&gt;
** GX_TG_TEXCOORD2 = 00 00 00 0E&lt;br /&gt;
** GX_TG_TEXCOORD3 = 00 00 00 0F&lt;br /&gt;
** GX_TG_TEXCOORD4 = 00 00 00 10&lt;br /&gt;
** GX_TG_TEXCOORD5 = 00 00 00 11&lt;br /&gt;
** GX_TG_TEXCOORD6 = 00 00 00 12&lt;br /&gt;
** GX_TG_COLOR0 = 00 00 00 13&lt;br /&gt;
** GX_TG_COLOR1 = 00 00 00 14&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;AlphaOperationEnum&#039;&#039;&#039;:&lt;br /&gt;
** NONE = 0X&lt;br /&gt;
** ALPHAMASK = 1X&lt;br /&gt;
** BLEND = 2X&lt;br /&gt;
** MODULATE = 3X&lt;br /&gt;
** REPLACE = 4X&lt;br /&gt;
** PASS = 5X&lt;br /&gt;
** ADD = 6X&lt;br /&gt;
** SUB = 7X&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ColorOperationEnum&#039;&#039;&#039;:&lt;br /&gt;
** NONE = X0&lt;br /&gt;
** ALPHA_MASK = X1&lt;br /&gt;
** RGB_MASK = X2&lt;br /&gt;
** BLEND = X3&lt;br /&gt;
** MODULATE = X4&lt;br /&gt;
** REPLACE = X5&lt;br /&gt;
** PASS = X6&lt;br /&gt;
** ADD = X7&lt;br /&gt;
** SUB = X8&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;CoordTypeEnum&#039;&#039;&#039;:&lt;br /&gt;
** UV = X0&lt;br /&gt;
** REFLECTION = X1&lt;br /&gt;
** HILIGHT = X2&lt;br /&gt;
** SHADOW = X3&lt;br /&gt;
** TOON = X4&lt;br /&gt;
** GRADATION = X5&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MagFilterEnum&#039;&#039;&#039;:&lt;br /&gt;
** GX_NEAR = 00 00 00 00&lt;br /&gt;
** GX_LINEAR = 00 00 00 01&lt;br /&gt;
** GX_NEAR_MIP_NEAR = 00 00 00 02&lt;br /&gt;
** GX_LIN_MIP_NEAR = 00 00 00 03&lt;br /&gt;
** GX_NEAR_MIP_LIN = 00 00 00 04&lt;br /&gt;
** GX_LIN_MIP_LIN = 00 00 00 05&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;WrapEnum&#039;&#039;&#039;:&lt;br /&gt;
** CLAMP = 00 00 00 00&lt;br /&gt;
** REPEAT = 00 00 00 01&lt;br /&gt;
** MIRROR = 00 00 00 02&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Material&#039;&#039;&#039; : (0x14 octets) ===&lt;br /&gt;
* 1 octets - AMB_R - (ambient)&lt;br /&gt;
* 1 octets - AMB_G&lt;br /&gt;
* 1 octets - AMB_B&lt;br /&gt;
* 1 octets - AMB_A&lt;br /&gt;
* 1 octets - DIF_R - (diffuse)&lt;br /&gt;
* 1 octets - DIF_G&lt;br /&gt;
* 1 octets - DIF_B&lt;br /&gt;
* 1 octets - DIF_A&lt;br /&gt;
* 1 octets - SPC_R - (specular)&lt;br /&gt;
* 1 octets - SPC_G&lt;br /&gt;
* 1 octets - SPC_B&lt;br /&gt;
* 1 octets - SPC_A&lt;br /&gt;
* 4 octets - float - alpha&lt;br /&gt;
* 4 octets - float - shininess&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;PObj&#039;&#039;&#039; : (0x18 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - next_offset - pobj&lt;br /&gt;
* 4 octets - vertex_attr_list_offset&lt;br /&gt;
* 2 octets - Flags - PObjFlagsEnum&lt;br /&gt;
* 2 octets - display_list_size - number of 0x20 (32) byte blocks occupied by display list data&lt;br /&gt;
* 4 octets - display_list_offset&lt;br /&gt;
* 4 octets - weight_list_offset - ? verifier qu&#039;on retrouve bien le tableau d&#039;envelope_weights à cet offset&lt;br /&gt;
&lt;br /&gt;
Comme l&#039;indique next_offset, il s&#039;agit d&#039;une liste de meshs à afficher pour un material donné référencé par un dobj. PObj contient les offsets de vertex attributes / display list / joint weight list ce qui suffit et permet d’interpréter et traiter les coordonnées de vertices, normals &amp;amp; textures.&lt;br /&gt;
&lt;br /&gt;
Les attributs vertex sont les plus important - les parametres specifiés contrôlent tout : du format, de la taille des données de chaque vertex, normal et coordonnées de textures et comment ces valeurs sont dimensionnées (scaled) par rapport à la présence et la taille de chaque valeur d&#039;index qui apparaît dans la display list information.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PObjFlagsEnum&#039;&#039;&#039; :&lt;br /&gt;
** Inconnu0 = 00 01&lt;br /&gt;
** Inconnu1 = 00 02&lt;br /&gt;
** ANIM = 00 08&lt;br /&gt;
** SHAPE_ANIM = 10 00&lt;br /&gt;
** ENVELOPE = 20 00&lt;br /&gt;
** CULLBACK = 40 00&lt;br /&gt;
** CULLFRONT = 80 00&lt;br /&gt;
&lt;br /&gt;
=== EnvelopeWeights : (0x? octets) ===&lt;br /&gt;
* 4 octets - envelope_count&lt;br /&gt;
* [envelope_count]:&lt;br /&gt;
** 4 octets - float - weight&lt;br /&gt;
** 4 octets - pad ?&lt;br /&gt;
* 4 octets - jobj_list_offset&lt;br /&gt;
&lt;br /&gt;
=== not verified yet ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;IMAGE_HEADER&#039;&#039;&#039; :&lt;br /&gt;
** 4 octets - image_offset - image data&lt;br /&gt;
** 2 octets - width&lt;br /&gt;
** 2 octets - height&lt;br /&gt;
** 4 octets - image_format&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PALETTE_HEADER&#039;&#039;&#039; : (0x10)&lt;br /&gt;
** 4 octets - palette_offset - palette data&lt;br /&gt;
** 4 octets - palette_format&lt;br /&gt;
** 4 octets - Inconnu&lt;br /&gt;
** 2 octets - color_count&lt;br /&gt;
** 2 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
image_offset et palette_offset sont souvent partagés par plusieurs textures - savoir ça permet de retrouver toutes les informations sur les images des textures (largeur, hauteur, format), ainsi que le format et le nombre de couleurs de la palette/tlut.&lt;br /&gt;
&lt;br /&gt;
Le format d&#039;image ne détermine pas le nombre total de couleurs de la palette qu&#039;elle utilisent. Par exemple, une image indexée sur 8 bits aurait un maximum de 256 couleurs mais seulement 136 ou 221 couleurs sont actuellement utilisées. De la sorte, la palette n&#039;utilisera pas la taille totale qu&#039;elle devrait utiliser.&lt;br /&gt;
&lt;br /&gt;
Les images suivent la structure généralement utilisée par la GameCube :&lt;br /&gt;
&lt;br /&gt;
IMAGE FORMATS :&lt;br /&gt;
* case 0: //i4&lt;br /&gt;
* case 1: //i8&lt;br /&gt;
* case 2: //i4a4&lt;br /&gt;
* case 3: //i8a8&lt;br /&gt;
* case 4: //r5g6b5&lt;br /&gt;
* case 5: //rgb5a3&lt;br /&gt;
* case 6: //r8g8b8a8&lt;br /&gt;
* case 8: //index4&lt;br /&gt;
* case 9: //index8&lt;br /&gt;
* case 0xa: //index14x2&lt;br /&gt;
* case 0xe: //s3tc1&lt;br /&gt;
&lt;br /&gt;
Les formats indexés utilisent aussi les informations de palettes/tlut et les données peuvent apparaître en plusieurs formats :&lt;br /&gt;
&lt;br /&gt;
PALETTE FORMATS :&lt;br /&gt;
* case 0: //ia8&lt;br /&gt;
* case 1: //r5g6b5&lt;br /&gt;
* case 2: //rgb5a3&lt;br /&gt;
&lt;br /&gt;
---&amp;gt; &amp;quot;Joint Data - Accessing Geometry, Mesh, and Vertex Attributes&amp;quot; https://smashboards.com/threads/melee-dat-format.292603/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
trad a revoir à partir de là, il faut investiguer le rendu 3D sur GameCube pour mieux comprendre&lt;br /&gt;
&lt;br /&gt;
// déclaration d&#039;un vertex et attribute information&lt;br /&gt;
// attr, type, cnt, data_type, flags?, file_offset&lt;br /&gt;
* ATTR_DATA&lt;br /&gt;
** 4 octets - GXAttr     vtx_attr_offset - attr&lt;br /&gt;
** 4 octets - GXAttrType vtx_attr_type   - index_type&lt;br /&gt;
** 4 octets - GXCompCnt  comp_cnt        - cnt&lt;br /&gt;
** 4 octets - GXCompType comp_type       - data_type	&lt;br /&gt;
** 1 octets - scale&lt;br /&gt;
** 1 octets - Inconnu&lt;br /&gt;
** 2 octets - vtx_stride&lt;br /&gt;
** 2 octets - data_offset&lt;br /&gt;
&lt;br /&gt;
vertex_attr_offset pointe sur une liste d&#039;attributs de vertex. Leur nombre n&#039;est pas donné. Les données dans cette structure suivent les informations et les types conçus par l&#039;architecture GameCube/WII et son API. La liste est terminée par une valeur spécifique de vtx_attr qui signale la fin de cette liste. Avec un accès à la doku SDK, il serait fortement conseillé de lire la section à propos des &amp;quot;vertex attributes and other specifications&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
La valeur de vtx_attr determine le type de donnée que cet attribut désigne et peut indiquer un nombre de types natifs utilisés utilisés pour passer les données entre les interfaces logicielles et matérielles.&lt;br /&gt;
&lt;br /&gt;
Les valeures possibles sont les suivantes :&lt;br /&gt;
* enum GXAttr (4 octets)&lt;br /&gt;
** GX_VA_PNMTXIDX = 0,    // position/normal matrix index&lt;br /&gt;
** GX_VA_TEX0MTXIDX,      // texture 0 matrix index&lt;br /&gt;
** GX_VA_TEX1MTXIDX,      // texture 1 matrix index&lt;br /&gt;
** GX_VA_TEX2MTXIDX,      // texture 2 matrix index&lt;br /&gt;
** GX_VA_TEX3MTXIDX,      // texture 3 matrix index&lt;br /&gt;
** GX_VA_TEX4MTXIDX,      // texture 4 matrix index&lt;br /&gt;
** GX_VA_TEX5MTXIDX,      // texture 5 matrix index&lt;br /&gt;
** GX_VA_TEX6MTXIDX,      // texture 6 matrix index&lt;br /&gt;
** GX_VA_TEX7MTXIDX,      // texture 7 matrix index&lt;br /&gt;
** GX_VA_POS      = 9,    // position&lt;br /&gt;
** GX_VA_NRM,             // normal&lt;br /&gt;
** GX_VA_CLR0,            // color 0&lt;br /&gt;
** GX_VA_CLR1,            // color 1&lt;br /&gt;
** GX_VA_TEX0,            // input texture coordinate 0&lt;br /&gt;
** GX_VA_TEX1,            // input texture coordinate 1&lt;br /&gt;
** GX_VA_TEX2,            // input texture coordinate 2&lt;br /&gt;
** GX_VA_TEX3,            // input texture coordinate 3&lt;br /&gt;
** GX_VA_TEX4,            // input texture coordinate 4&lt;br /&gt;
** GX_VA_TEX5,            // input texture coordinate 5&lt;br /&gt;
** GX_VA_TEX6,            // input texture coordinate 6&lt;br /&gt;
** GX_VA_TEX7,            // input texture coordinate 7&lt;br /&gt;
&lt;br /&gt;
** GX_POS_MTX_ARRAY,      // position matrix array pointer&lt;br /&gt;
** GX_NRM_MTX_ARRAY,      // normal matrix array pointer&lt;br /&gt;
** GX_TEX_MTX_ARRAY,      // texture matrix array pointer&lt;br /&gt;
** GX_LIGHT_ARRAY,        // light parameter array pointer&lt;br /&gt;
** GX_VA_NBT,             // normal, bi-normal, tangent &lt;br /&gt;
** GX_VA_MAX_ATTR,        // maximum number of vertex attributes&lt;br /&gt;
&lt;br /&gt;
** GX_VA_NULL     = 0xff  // NULL attribute (to mark end of lists)&lt;br /&gt;
&lt;br /&gt;
Toutes les données nécessaires pour représenter un mesh peuvent être spécifiées et indexées d&#039;une manière ou d&#039;une autre. De même, GX_VA_TEX0MTXIDX, GX_VA_CLR0, et autres sont aussi possibles - les valeurs les plus fréquentes dans les données SSBM sont : GX_VA_PNMTXIDX, GX_VA_POS, GX_VA_NRM, et GX_VA_TEX0. Which is to be expected as joint matrices, vertex positions/normals, and texture coordinates respectively are probably the most basic of elements needed to display a texture mesh, whether static or animated.&lt;br /&gt;
&lt;br /&gt;
When the value of vtx_attr == GX_VA_NULL (0xFF), the end of the vertex attribute array has been reached.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The vtx_attr_type values is actually associated with how the value is indexed, and can thus also determine the size of the index value within the display list data.&lt;br /&gt;
&lt;br /&gt;
* 4 octets - enum GXAttrType&lt;br /&gt;
** GX_NONE    = 0,&lt;br /&gt;
** GX_DIRECT,&lt;br /&gt;
** GX_INDEX8,&lt;br /&gt;
** GX_INDEX16&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Structures COLL_DATA : (données de collisions)&lt;br /&gt;
** 4 octets - vertex_offset (2 float par entrée correspondant à des données 2D probablement)&lt;br /&gt;
** 4 octets - vertex_count&lt;br /&gt;
** 4 octets - index_offset&lt;br /&gt;
** 4 octets - index_count&lt;br /&gt;
** 4 octets [5] - tableau inconnu&lt;br /&gt;
*** 2 octets - index_start&lt;br /&gt;
*** 2 octets - index_count&lt;br /&gt;
** 4 octets - Inconnu&lt;br /&gt;
** 4 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
[[Category:Implementations]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=Models&amp;diff=1532</id>
		<title>Models</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=Models&amp;diff=1532"/>
		<updated>2023-10-07T13:44:29Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: /* Gotcha Force Models */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
{{Research | 2| Researches on headers / bodies structures are partially achieved. }}&lt;br /&gt;
&lt;br /&gt;
== Gotcha Force Models ==&lt;br /&gt;
&lt;br /&gt;
Gotcha Force models work as those from the game Super Smash Bros Melee (SSBM) investigated by its [https://smashboards.com/threads/melee-dat-format.292603/ community].&lt;br /&gt;
&lt;br /&gt;
A model is a file format that organizes objects and resources serialized to be used by the &#039;&#039;&#039;H&#039;&#039;&#039;al &#039;&#039;&#039;S&#039;&#039;&#039;ys&#039;&#039;&#039;D&#039;&#039;&#039;olphin (&#039;&#039;&#039;HSD&#039;&#039;&#039;) library. The HSD library is used in several Capcom games. These are graphic materials structured in a hierarchical way. Some pictures present in the models seem to indicate the use of [https://learn.foundry.com/modo/901/content/help/pages/shading_lighting/shader_items/matcap.html matcap] technic. This library use Dolphin SDK functions like GX / MTX and so on.&lt;br /&gt;
&lt;br /&gt;
=== Fichiers concernés ===&lt;br /&gt;
L&#039;ensemble des fichiers ayant dans leur titre &#039;&#039;&#039;_mdl&#039;&#039;&#039; sont des fichiers modèles correspondant au format décrit dans cette page. On notera les fichiers [[ARZ (Gotcha Force)|.arz]] qui sont des modèles compressés. Le fichier collision.arc et les fichiers tdc00.arc à tdc09.arc sont aussi des modèles.&lt;br /&gt;
&lt;br /&gt;
Les fichiers modèles se retrouvent aussi dans les pzz des borgs (plxxxx.pzz) en position 004 à 009.&lt;br /&gt;
&lt;br /&gt;
=== HSDRaw ===&lt;br /&gt;
HSDRaw, un éditeur 3D dotnet de ce format est instable sur mon Windows (algoflash). Il est cependant prouvé qu&#039;un edit des _mdl pour commencer à l&#039;offset 0x100 - après le préambule - permet de visualiser le fichier sur HSDRaw et d&#039;avoir le rendu 3D du Borg (click sur le premier dossier JOBJ - puis le JOBJ dedans et double click sur le nœud en violet). Cela devrait aussi permettre d&#039;éditer certaines propriétés ?&lt;br /&gt;
&lt;br /&gt;
== Structure générale ==&lt;br /&gt;
Le format des modèles se découpe en plusieurs blocks. Le préambule fait 0x100 octets au tout début du fichier. Il est souvent absent. Toutes les valeurs sont en unsigned big endian, et le pad est en Nulls bytes (\x00). 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&#039;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&#039;il est peu probable qu&#039;un offset pointe au milieu d&#039;une structure.&lt;br /&gt;
&lt;br /&gt;
L&#039;ensemble des fichiers répondant à ce format on un seul root_node de type SObj (Scene data).&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Préambule&#039;&#039;&#039; : (0x100 octets / 0 octets) ===&lt;br /&gt;
* 4 octets - hsd_header_offset=0x100 (toujours)&lt;br /&gt;
* 4 octets - bones_flags_table_offset=0x20 (toujours) - offset de la liste des flags des armatures&lt;br /&gt;
* 4 octets - bones_table_offset=0xC0 (toujours) - offset de la liste des armatures&lt;br /&gt;
* 20 octets - Pad - (toujours)&lt;br /&gt;
* 4 octets [32] - Inconnu (flags des armatures ?) 1 octet par flag ?&lt;br /&gt;
* 32 octets - Pad - (toujours)&lt;br /&gt;
* 32 octets - armatures ?&lt;br /&gt;
* 32 octets - Pad - (toujours)&lt;br /&gt;
=== &#039;&#039;&#039;HSD Header&#039;&#039;&#039; - (0x20 octets) ===&lt;br /&gt;
* 4 octets - Taille totale du fichier&lt;br /&gt;
* 4 octets - Taille du Data block&lt;br /&gt;
* 4 octets - Nombre d&#039;entrée dans la Table de relocs&lt;br /&gt;
* 4 octets - root0_count&lt;br /&gt;
* 4 octets - root1_count&lt;br /&gt;
* 12 octets - Pad - (toujours)&lt;br /&gt;
=== &#039;&#039;&#039;Data block&#039;&#039;&#039; : ===&lt;br /&gt;
* JOBJ, etc. -&amp;gt; Ces structures sont détaillée plus loin ci-dessous.&lt;br /&gt;
=== &#039;&#039;&#039;Relocation Table&#039;&#039;&#039; : ===&lt;br /&gt;
* Tableau d&#039;offsets de 4 octets - Offsets des structures dans le DB.&lt;br /&gt;
=== &#039;&#039;&#039;Root Nodes (2)&#039;&#039;&#039; : ===&lt;br /&gt;
* Tableau de taille 8 * root0_count&lt;br /&gt;
** 4 octets - root_offset - relatif au DB&lt;br /&gt;
** 4 octets - string_table_offset - relatif à la StringTable&lt;br /&gt;
* Tableau de taille 8 * root1_count&lt;br /&gt;
** 4 octets - root_offset - relatif au DB&lt;br /&gt;
** 4 octets - string_table_offset - relatif à la StringTable&lt;br /&gt;
=== &#039;&#039;&#039;String Table&#039;&#039;&#039; : ===&lt;br /&gt;
* Suite de strings terminées par Null au nombre de root0_count + root1_count&lt;br /&gt;
&lt;br /&gt;
== Structures rencontrées dans le DB ==&lt;br /&gt;
Note : l&#039;arborescence est cumulative sur les transformations pour les relations parents-&amp;gt;enfants&lt;br /&gt;
&lt;br /&gt;
Les Noeuds Racine qui ont pour nom &amp;quot;scene_data&amp;quot; pointent sur un SObj :&lt;br /&gt;
=== &#039;&#039;&#039;SObj&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
* 4 octets - JObjDescs_offsets_list_offset&lt;br /&gt;
* 4 octets - Cameras_list_offset&lt;br /&gt;
* 4 octets - Lights_list_offset&lt;br /&gt;
* 4 octets - Fog&lt;br /&gt;
&lt;br /&gt;
&amp;quot;scene_data&amp;quot; == nom du nœud racine&lt;br /&gt;
JObjDescs_offsets_list_offset, cameras.. pointent sur une liste d&#039;offsets terminée par 4 octets à 0x00.&lt;br /&gt;
lights_list_offset pointe sur des couples (4 octets - LObj_offset ; 4 octets - light_anim_pointer_offset)&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;JObjDesc&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
* 4 octets - root_joint_offset - JObj&lt;br /&gt;
* 4 octets - joint_animations_offset - ?&lt;br /&gt;
* 4 octets - material_animations_offset - ?&lt;br /&gt;
* 4 octets - shape_animations_offset - ?&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;CObj&#039;&#039;&#039; : (0x38 octets) ===&lt;br /&gt;
* 4 octets - flags&lt;br /&gt;
* 4 octets - projection_type - ProjectionTypeEnum&lt;br /&gt;
* 2 octets - viewport_left&lt;br /&gt;
* 2 octets - viewport_right&lt;br /&gt;
* 2 octets - viewport_top&lt;br /&gt;
* 2 octets - viewport_bottom&lt;br /&gt;
* 4 octets - proj_width&lt;br /&gt;
* 4 octets - proj_height&lt;br /&gt;
* 4 octets - eye_offset - WObj&lt;br /&gt;
* 4 octets - target_offset - WObj&lt;br /&gt;
* 4 octets - roll&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - float - near_clip&lt;br /&gt;
* 4 octets - float - far_clip&lt;br /&gt;
* 4 octets - float - field_of_view&lt;br /&gt;
* 4 octets - float - aspect&lt;br /&gt;
Camera object. Note : pour frustrum ou ortho, la structure est différente.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ProjectionTypeEnum&#039;&#039;&#039;:&lt;br /&gt;
** PERSPECTIVE = 1&lt;br /&gt;
** FRUSTRUM = 2&lt;br /&gt;
** ORTHO = 3&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;WObj&#039;&#039;&#039;: (0x14 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - float - v1&lt;br /&gt;
* 4 octets - float - v2&lt;br /&gt;
* 4 octets - float - v3&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
eye / target&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;LObj&#039;&#039;&#039; : (0x1c octets) ===&lt;br /&gt;
* 4 octets - class_name&lt;br /&gt;
* 4 octets - next_offset&lt;br /&gt;
* 2 octets - flags - LObjFlagsEnum&lt;br /&gt;
* 2 octets - attenuation_flags - LObjAttenuationFlagsEnum&lt;br /&gt;
* 1 octet - color_r&lt;br /&gt;
* 1 octet - color_g&lt;br /&gt;
* 1 octet - color_b&lt;br /&gt;
* 1 octet - color_alpha&lt;br /&gt;
* 4 octets - lobj_point_offset - position&lt;br /&gt;
* 4 octets - infinite_data&lt;br /&gt;
* 4 octets - point_spot_data&lt;br /&gt;
light&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;LObjFlagsEnum&#039;&#039;&#039; :&lt;br /&gt;
** LOBJ_AMBIANT = 00 00&lt;br /&gt;
** LOBJ_INFINITE = 00 01&lt;br /&gt;
** LOBJ_POINT = 00 02&lt;br /&gt;
** LOBJ_SPOT = 00 03&lt;br /&gt;
** LOBJ_DIFFUSE = 00 04&lt;br /&gt;
** LOBJ_SPECULAR = 00 08&lt;br /&gt;
** LOBJ_ALPHA = 00 10&lt;br /&gt;
** LOBJ_HIDDEN = 00 20&lt;br /&gt;
** LOBJ_RAW_PARAM = 00 40&lt;br /&gt;
** LOBJ_DIFF_DIRTY = 00 80&lt;br /&gt;
** LOBJ_SPEC_DIRTY = 01 00&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;LObjAttenuationFlagsEnum&#039;&#039;&#039; :&lt;br /&gt;
** LOBJ_LIGHT_ATTN_NONE = 00 00&lt;br /&gt;
** LOBJ_LIGHT_ATTN = 00 01&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;LObjPoint&#039;&#039;&#039; : (0x14 octets) ===&lt;br /&gt;
* 4 octets - class_name&lt;br /&gt;
* 4 octets - float - x&lt;br /&gt;
* 4 octets - float - y&lt;br /&gt;
* 4 octets - float - z&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;LightAnimPointer&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
** 4 octets - next_offset - (LightAnimPointer)&lt;br /&gt;
** 4 octets - light_anim - ?&lt;br /&gt;
** 4 octets - position_anim - ?&lt;br /&gt;
** 4 octets - interst_anim - ?&lt;br /&gt;
Bugs dans HSDRaw - à tester&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;JObj&#039;&#039;&#039; : (0x40 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - flags&lt;br /&gt;
* 4 octets - child_offset (JObj)&lt;br /&gt;
* 4 octets - next_offset (JObj)&lt;br /&gt;
* 4 octets - dobj_offset (DObj)&lt;br /&gt;
* 4 octets [3] - float3 - rotation_xyz&lt;br /&gt;
* 4 octets [3] - float3 - scale_xyz&lt;br /&gt;
* 4 octets [3] - float3 - translation_xyz&lt;br /&gt;
* 4 octets - inverse_world_transform_offset (inverse world transform = Matrice de 4x3)&lt;br /&gt;
* 4 octets - robj_offset&lt;br /&gt;
&lt;br /&gt;
Pointé par les listes dans Root Node scene_data.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;JObjFlagsEnum&#039;&#039;&#039; : (peuvent se cumuler)&lt;br /&gt;
** NULL = 00 00 00 00&lt;br /&gt;
** SKELETON = 00 00 00 01&lt;br /&gt;
** SKELETON_ROOT = 00 00 00 02&lt;br /&gt;
** ENVELOPE_MODEL = 00 00 00 04&lt;br /&gt;
** CLASSICAL_SCALING = 00 00 00 08&lt;br /&gt;
** HIDDEN = 00 00 00 10&lt;br /&gt;
** PTCL = 00 00 00 20&lt;br /&gt;
** MTX_DIRTY = 00 00 00 40&lt;br /&gt;
** LIGHTING = 00 00 00 80&lt;br /&gt;
** TEXGEN = 00 00 01 00&lt;br /&gt;
** BILLBOARD = 00 00 02 00&lt;br /&gt;
** VBILLBOARD = 00 00 04 00&lt;br /&gt;
** HBILLBOARD = 00 00 06 00&lt;br /&gt;
** RBILLBOARD = 00 00 08 00&lt;br /&gt;
** INSTANCE = 00 00 10 00&lt;br /&gt;
** PBILLBOARD = 00 00 20 00&lt;br /&gt;
** SPLINE = 00 00 40 00&lt;br /&gt;
** FLIP_IK = 00 00 80 00&lt;br /&gt;
** SPECULAR = 00 01 00 00&lt;br /&gt;
** USE_QUATERNION = 00 02 00 00&lt;br /&gt;
** OPA = 00 04 00 00&lt;br /&gt;
** XLU = 00 08 00 00&lt;br /&gt;
** TEXEDGE = 00 10 00 00&lt;br /&gt;
** JOINT1 = 00 20 00 00&lt;br /&gt;
** JOINT2 = 00 40 00 00&lt;br /&gt;
** EFFECTOR = 00 60 00 00&lt;br /&gt;
** USER_DEFINED_MTX = 00 80 00 00&lt;br /&gt;
** MTX_INDEPEND_PARENT = 01 00 00 00&lt;br /&gt;
** MTX_INDEPEND_SRT = 02 00 00 00&lt;br /&gt;
** MTX_SCALE_COMPENSATE = 04 00 00 00&lt;br /&gt;
** ROOT_OPA = 10 00 00 00&lt;br /&gt;
** ROOT_XLU = 20 00 00 00&lt;br /&gt;
** ROOT_TEXEDGE = 40 00 00 00&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;InverseWorldTransform&#039;&#039;&#039; : (0x30 octets) ===&lt;br /&gt;
* 4 octets - float - M11&lt;br /&gt;
* 4 octets - float - M12&lt;br /&gt;
* 4 octets - float - M13&lt;br /&gt;
* 4 octets - float - M14&lt;br /&gt;
* 4 octets - float - M21&lt;br /&gt;
* 4 octets - float - M22&lt;br /&gt;
* 4 octets - float - M23&lt;br /&gt;
* 4 octets - float - M24&lt;br /&gt;
* 4 octets - float - M31&lt;br /&gt;
* 4 octets - float - M32&lt;br /&gt;
* 4 octets - float - M33&lt;br /&gt;
* 4 octets - float - M34&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;DObj&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - next_offset - prochain DOBJ&lt;br /&gt;
* 4 octets - mobj_offset - material offset&lt;br /&gt;
* 4 octets - pobj_offset - mesh offset&lt;br /&gt;
Liste chaînée qui permet de récupérer l&#039;ensemble des materials &amp;amp; mesh pour le JObj auquel il est lié.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;MObj&#039;&#039;&#039; : (0x18 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - render_flags - RenderFlagsEnum&lt;br /&gt;
* 4 octets - tobj_offset - offset de texture - peut être invalide s&#039;il n&#039;y a pas de texture pour le material&lt;br /&gt;
* 4 octets - material_offset - couleurs des materials ?&lt;br /&gt;
* 8 octets - PEDesc ?&lt;br /&gt;
&lt;br /&gt;
Contient les textures &amp;amp; informations sur les couleurs des Materials.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;RenderFlagsEnum&#039;&#039;&#039; : (se cumulent)&lt;br /&gt;
** USER = 80 00 00 00&lt;br /&gt;
** CONSTANT = 00 00 00 01&lt;br /&gt;
** VERTEX = 00 00 00 02&lt;br /&gt;
** BOTH = 00 00 00 03&lt;br /&gt;
** DIFFUSE = 00 00 00 04&lt;br /&gt;
** SPECULAR = 00 00 00 08&lt;br /&gt;
** TEX0 = 00 00 00 10&lt;br /&gt;
** TEX1 = 00 00 00 20&lt;br /&gt;
** TEX2 = 00 00 00 40&lt;br /&gt;
** TEX3 = 00 00 00 80&lt;br /&gt;
** TEX4 = 00 00 01 00&lt;br /&gt;
** TEX5 = 00 00 02 00&lt;br /&gt;
** TEX6 = 00 00 04 00&lt;br /&gt;
** TEX7 = 00 00 08 00&lt;br /&gt;
** TOON = 00 00 10 00&lt;br /&gt;
** ALPHA_MAT = 00 00 20 00&lt;br /&gt;
** ALPHA_VTX = 00 00 40 00&lt;br /&gt;
** ALPHA_BOTH = 00 00 60 00&lt;br /&gt;
** ZOFST = 01 00 00 00&lt;br /&gt;
** EFFECT = 02 00 00 00&lt;br /&gt;
** SHADOW = 04 00 00 00&lt;br /&gt;
** ZMODE_ALWAYS = 08 00 00 00&lt;br /&gt;
** DF_ALL = 10 00 00 00&lt;br /&gt;
** NO_ZUPDATE = 20 00 00 00&lt;br /&gt;
** XLU = 40 00 00 00&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;TObj&#039;&#039;&#039; : (0x5c octets) ===&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - tex_map_id - TexMapIdEnum&lt;br /&gt;
* 4 octets - gx_tex_gen_src - GXTexGenSrcEnum&lt;br /&gt;
* 4 octets - float - rx&lt;br /&gt;
* 4 octets - float - ry&lt;br /&gt;
* 4 octets - float - rz&lt;br /&gt;
* 4 octets - float - sx&lt;br /&gt;
* 4 octets - float - sy&lt;br /&gt;
* 4 octets - float - sz&lt;br /&gt;
* 4 octets - float - tx&lt;br /&gt;
* 4 octets - float - ty&lt;br /&gt;
* 4 octets - float - tz&lt;br /&gt;
* 4 octets - wrap_s - WrapEnum&lt;br /&gt;
* 4 octets - wrap_t - WrapEnum&lt;br /&gt;
* 1 octet - w_scale&lt;br /&gt;
* 1 octet - h_scale&lt;br /&gt;
* 2 octets - ?&lt;br /&gt;
* 1 octets - bump_map - (False = 00 ; True = 01)&lt;br /&gt;
* 4 bits - alpha_operation - AlphaOperationEnum&lt;br /&gt;
* 4 bits - color_operation - ColorOperationEnum&lt;br /&gt;
* 1 octet - shadow_lightmap - (False = 00 ; True = 01) (2 octets avec une Enum lightmap limite)&lt;br /&gt;
* 1 bit - ext_lightmap - (False = 0 ; True = 1)&lt;br /&gt;
* 1 bit - ambiant_lightmap - (False = 0 ; True = 1) &lt;br /&gt;
* 1 bit - specular_lightmap - (False = 0 ; True = 1)&lt;br /&gt;
* 1 bit - diffuse_lightmap (False = 0 ; True = 1)&lt;br /&gt;
* 4 bits - coord_type - CoordTypeEnum&lt;br /&gt;
* 4 octets - float - blending - utilisé quand color_operation ou alpha_operation == BLEND&lt;br /&gt;
* 4 octets - mag_filter - MagFilterEnum&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
Informations de Textures. Le TObj contient des informations sur les paramètres d&#039;environnement de textures utilisés pour le rendu graphique ainsi que les offset de l&#039;image et des données de la palette utilisés pour cette texture. Le plus important ici, c&#039;est l&#039;offset d&#039;image et la palette/tlut - si l&#039;image n&#039;est pas indexée (RGBA, CMPR, etc.) alors la structure de description palette/tlut n&#039;est pas utilisée.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;TexMapIdEnum&#039;&#039;&#039; :&lt;br /&gt;
** GX_TEXMAP0 = 00 00 00 00&lt;br /&gt;
** GX_TEXMAP1 = 00 00 00 01&lt;br /&gt;
** GX_TEXMAP2 = 00 00 00 02&lt;br /&gt;
** GX_TEXMAP3 = 00 00 00 03&lt;br /&gt;
** GX_TEXMAP4 = 00 00 00 04&lt;br /&gt;
** GX_TEXMAP5 = 00 00 00 05&lt;br /&gt;
** GX_TEXMAP6 = 00 00 00 06&lt;br /&gt;
** GX_TEXMAP7 = 00 00 00 07&lt;br /&gt;
** GX_MAX_TEXMAP = 00 00 00 08&lt;br /&gt;
** GX_TEXMAP_NULL = 00 00 00 09&lt;br /&gt;
** GX_TEXMAP_DISABLE = 00 00 00 0A&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;GXTexGenSrcEnum&#039;&#039;&#039; :&lt;br /&gt;
** GX_TG_POS = 00 00 00 00&lt;br /&gt;
** GX_TG_NRM = 00 00 00 01&lt;br /&gt;
** GX_TG_BINRM = 00 00 00 02&lt;br /&gt;
** GX_TG_TANGENT = 00 00 00 03&lt;br /&gt;
** GX_TG_TEX0 = 00 00 00 04&lt;br /&gt;
** GX_TG_TEX1 = 00 00 00 05&lt;br /&gt;
** GX_TG_TEX2 = 00 00 00 06&lt;br /&gt;
** GX_TG_TEX3 = 00 00 00 07&lt;br /&gt;
** GX_TG_TEX4 = 00 00 00 08&lt;br /&gt;
** GX_TG_TEX5 = 00 00 00 09&lt;br /&gt;
** GX_TG_TEX6 = 00 00 00 0A&lt;br /&gt;
** GX_TG_TEX7 = 00 00 00 0B&lt;br /&gt;
** GX_TG_TEXCOORD0 = 00 00 00 0C&lt;br /&gt;
** GX_TG_TEXCOORD1 = 00 00 00 0D&lt;br /&gt;
** GX_TG_TEXCOORD2 = 00 00 00 0E&lt;br /&gt;
** GX_TG_TEXCOORD3 = 00 00 00 0F&lt;br /&gt;
** GX_TG_TEXCOORD4 = 00 00 00 10&lt;br /&gt;
** GX_TG_TEXCOORD5 = 00 00 00 11&lt;br /&gt;
** GX_TG_TEXCOORD6 = 00 00 00 12&lt;br /&gt;
** GX_TG_COLOR0 = 00 00 00 13&lt;br /&gt;
** GX_TG_COLOR1 = 00 00 00 14&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;AlphaOperationEnum&#039;&#039;&#039;:&lt;br /&gt;
** NONE = 0X&lt;br /&gt;
** ALPHAMASK = 1X&lt;br /&gt;
** BLEND = 2X&lt;br /&gt;
** MODULATE = 3X&lt;br /&gt;
** REPLACE = 4X&lt;br /&gt;
** PASS = 5X&lt;br /&gt;
** ADD = 6X&lt;br /&gt;
** SUB = 7X&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ColorOperationEnum&#039;&#039;&#039;:&lt;br /&gt;
** NONE = X0&lt;br /&gt;
** ALPHA_MASK = X1&lt;br /&gt;
** RGB_MASK = X2&lt;br /&gt;
** BLEND = X3&lt;br /&gt;
** MODULATE = X4&lt;br /&gt;
** REPLACE = X5&lt;br /&gt;
** PASS = X6&lt;br /&gt;
** ADD = X7&lt;br /&gt;
** SUB = X8&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;CoordTypeEnum&#039;&#039;&#039;:&lt;br /&gt;
** UV = X0&lt;br /&gt;
** REFLECTION = X1&lt;br /&gt;
** HILIGHT = X2&lt;br /&gt;
** SHADOW = X3&lt;br /&gt;
** TOON = X4&lt;br /&gt;
** GRADATION = X5&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MagFilterEnum&#039;&#039;&#039;:&lt;br /&gt;
** GX_NEAR = 00 00 00 00&lt;br /&gt;
** GX_LINEAR = 00 00 00 01&lt;br /&gt;
** GX_NEAR_MIP_NEAR = 00 00 00 02&lt;br /&gt;
** GX_LIN_MIP_NEAR = 00 00 00 03&lt;br /&gt;
** GX_NEAR_MIP_LIN = 00 00 00 04&lt;br /&gt;
** GX_LIN_MIP_LIN = 00 00 00 05&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;WrapEnum&#039;&#039;&#039;:&lt;br /&gt;
** CLAMP = 00 00 00 00&lt;br /&gt;
** REPEAT = 00 00 00 01&lt;br /&gt;
** MIRROR = 00 00 00 02&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Material&#039;&#039;&#039; : (0x14 octets) ===&lt;br /&gt;
* 1 octets - AMB_R - (ambient)&lt;br /&gt;
* 1 octets - AMB_G&lt;br /&gt;
* 1 octets - AMB_B&lt;br /&gt;
* 1 octets - AMB_A&lt;br /&gt;
* 1 octets - DIF_R - (diffuse)&lt;br /&gt;
* 1 octets - DIF_G&lt;br /&gt;
* 1 octets - DIF_B&lt;br /&gt;
* 1 octets - DIF_A&lt;br /&gt;
* 1 octets - SPC_R - (specular)&lt;br /&gt;
* 1 octets - SPC_G&lt;br /&gt;
* 1 octets - SPC_B&lt;br /&gt;
* 1 octets - SPC_A&lt;br /&gt;
* 4 octets - float - alpha&lt;br /&gt;
* 4 octets - float - shininess&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;PObj&#039;&#039;&#039; : (0x18 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - next_offset - pobj&lt;br /&gt;
* 4 octets - vertex_attr_list_offset&lt;br /&gt;
* 2 octets - Flags - PObjFlagsEnum&lt;br /&gt;
* 2 octets - display_list_size - number of 0x20 (32) byte blocks occupied by display list data&lt;br /&gt;
* 4 octets - display_list_offset&lt;br /&gt;
* 4 octets - weight_list_offset - ? verifier qu&#039;on retrouve bien le tableau d&#039;envelope_weights à cet offset&lt;br /&gt;
&lt;br /&gt;
Comme l&#039;indique next_offset, il s&#039;agit d&#039;une liste de meshs à afficher pour un material donné référencé par un dobj. PObj contient les offsets de vertex attributes / display list / joint weight list ce qui suffit et permet d’interpréter et traiter les coordonnées de vertices, normals &amp;amp; textures.&lt;br /&gt;
&lt;br /&gt;
Les attributs vertex sont les plus important - les parametres specifiés contrôlent tout : du format, de la taille des données de chaque vertex, normal et coordonnées de textures et comment ces valeurs sont dimensionnées (scaled) par rapport à la présence et la taille de chaque valeur d&#039;index qui apparaît dans la display list information.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PObjFlagsEnum&#039;&#039;&#039; :&lt;br /&gt;
** Inconnu0 = 00 01&lt;br /&gt;
** Inconnu1 = 00 02&lt;br /&gt;
** ANIM = 00 08&lt;br /&gt;
** SHAPE_ANIM = 10 00&lt;br /&gt;
** ENVELOPE = 20 00&lt;br /&gt;
** CULLBACK = 40 00&lt;br /&gt;
** CULLFRONT = 80 00&lt;br /&gt;
&lt;br /&gt;
=== EnvelopeWeights : (0x? octets) ===&lt;br /&gt;
* 4 octets - envelope_count&lt;br /&gt;
* [envelope_count]:&lt;br /&gt;
** 4 octets - float - weight&lt;br /&gt;
** 4 octets - pad ?&lt;br /&gt;
* 4 octets - jobj_list_offset&lt;br /&gt;
&lt;br /&gt;
=== not verified yet ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;IMAGE_HEADER&#039;&#039;&#039; :&lt;br /&gt;
** 4 octets - image_offset - image data&lt;br /&gt;
** 2 octets - width&lt;br /&gt;
** 2 octets - height&lt;br /&gt;
** 4 octets - image_format&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PALETTE_HEADER&#039;&#039;&#039; : (0x10)&lt;br /&gt;
** 4 octets - palette_offset - palette data&lt;br /&gt;
** 4 octets - palette_format&lt;br /&gt;
** 4 octets - Inconnu&lt;br /&gt;
** 2 octets - color_count&lt;br /&gt;
** 2 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
image_offset et palette_offset sont souvent partagés par plusieurs textures - savoir ça permet de retrouver toutes les informations sur les images des textures (largeur, hauteur, format), ainsi que le format et le nombre de couleurs de la palette/tlut.&lt;br /&gt;
&lt;br /&gt;
Le format d&#039;image ne détermine pas le nombre total de couleurs de la palette qu&#039;elle utilisent. Par exemple, une image indexée sur 8 bits aurait un maximum de 256 couleurs mais seulement 136 ou 221 couleurs sont actuellement utilisées. De la sorte, la palette n&#039;utilisera pas la taille totale qu&#039;elle devrait utiliser.&lt;br /&gt;
&lt;br /&gt;
Les images suivent la structure généralement utilisée par la GameCube :&lt;br /&gt;
&lt;br /&gt;
IMAGE FORMATS :&lt;br /&gt;
* case 0: //i4&lt;br /&gt;
* case 1: //i8&lt;br /&gt;
* case 2: //i4a4&lt;br /&gt;
* case 3: //i8a8&lt;br /&gt;
* case 4: //r5g6b5&lt;br /&gt;
* case 5: //rgb5a3&lt;br /&gt;
* case 6: //r8g8b8a8&lt;br /&gt;
* case 8: //index4&lt;br /&gt;
* case 9: //index8&lt;br /&gt;
* case 0xa: //index14x2&lt;br /&gt;
* case 0xe: //s3tc1&lt;br /&gt;
&lt;br /&gt;
Les formats indexés utilisent aussi les informations de palettes/tlut et les données peuvent apparaître en plusieurs formats :&lt;br /&gt;
&lt;br /&gt;
PALETTE FORMATS :&lt;br /&gt;
* case 0: //ia8&lt;br /&gt;
* case 1: //r5g6b5&lt;br /&gt;
* case 2: //rgb5a3&lt;br /&gt;
&lt;br /&gt;
---&amp;gt; &amp;quot;Joint Data - Accessing Geometry, Mesh, and Vertex Attributes&amp;quot; https://smashboards.com/threads/melee-dat-format.292603/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
trad a revoir à partir de là, il faut investiguer le rendu 3D sur GameCube pour mieux comprendre&lt;br /&gt;
&lt;br /&gt;
// déclaration d&#039;un vertex et attribute information&lt;br /&gt;
// attr, type, cnt, data_type, flags?, file_offset&lt;br /&gt;
* ATTR_DATA&lt;br /&gt;
** 4 octets - GXAttr     vtx_attr_offset - attr&lt;br /&gt;
** 4 octets - GXAttrType vtx_attr_type   - index_type&lt;br /&gt;
** 4 octets - GXCompCnt  comp_cnt        - cnt&lt;br /&gt;
** 4 octets - GXCompType comp_type       - data_type	&lt;br /&gt;
** 1 octets - scale&lt;br /&gt;
** 1 octets - Inconnu&lt;br /&gt;
** 2 octets - vtx_stride&lt;br /&gt;
** 2 octets - data_offset&lt;br /&gt;
&lt;br /&gt;
vertex_attr_offset pointe sur une liste d&#039;attributs de vertex. Leur nombre n&#039;est pas donné. Les données dans cette structure suivent les informations et les types conçus par l&#039;architecture GameCube/WII et son API. La liste est terminée par une valeur spécifique de vtx_attr qui signale la fin de cette liste. Avec un accès à la doku SDK, il serait fortement conseillé de lire la section à propos des &amp;quot;vertex attributes and other specifications&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
La valeur de vtx_attr determine le type de donnée que cet attribut désigne et peut indiquer un nombre de types natifs utilisés utilisés pour passer les données entre les interfaces logicielles et matérielles.&lt;br /&gt;
&lt;br /&gt;
Les valeures possibles sont les suivantes :&lt;br /&gt;
* enum GXAttr (4 octets)&lt;br /&gt;
** GX_VA_PNMTXIDX = 0,    // position/normal matrix index&lt;br /&gt;
** GX_VA_TEX0MTXIDX,      // texture 0 matrix index&lt;br /&gt;
** GX_VA_TEX1MTXIDX,      // texture 1 matrix index&lt;br /&gt;
** GX_VA_TEX2MTXIDX,      // texture 2 matrix index&lt;br /&gt;
** GX_VA_TEX3MTXIDX,      // texture 3 matrix index&lt;br /&gt;
** GX_VA_TEX4MTXIDX,      // texture 4 matrix index&lt;br /&gt;
** GX_VA_TEX5MTXIDX,      // texture 5 matrix index&lt;br /&gt;
** GX_VA_TEX6MTXIDX,      // texture 6 matrix index&lt;br /&gt;
** GX_VA_TEX7MTXIDX,      // texture 7 matrix index&lt;br /&gt;
** GX_VA_POS      = 9,    // position&lt;br /&gt;
** GX_VA_NRM,             // normal&lt;br /&gt;
** GX_VA_CLR0,            // color 0&lt;br /&gt;
** GX_VA_CLR1,            // color 1&lt;br /&gt;
** GX_VA_TEX0,            // input texture coordinate 0&lt;br /&gt;
** GX_VA_TEX1,            // input texture coordinate 1&lt;br /&gt;
** GX_VA_TEX2,            // input texture coordinate 2&lt;br /&gt;
** GX_VA_TEX3,            // input texture coordinate 3&lt;br /&gt;
** GX_VA_TEX4,            // input texture coordinate 4&lt;br /&gt;
** GX_VA_TEX5,            // input texture coordinate 5&lt;br /&gt;
** GX_VA_TEX6,            // input texture coordinate 6&lt;br /&gt;
** GX_VA_TEX7,            // input texture coordinate 7&lt;br /&gt;
&lt;br /&gt;
** GX_POS_MTX_ARRAY,      // position matrix array pointer&lt;br /&gt;
** GX_NRM_MTX_ARRAY,      // normal matrix array pointer&lt;br /&gt;
** GX_TEX_MTX_ARRAY,      // texture matrix array pointer&lt;br /&gt;
** GX_LIGHT_ARRAY,        // light parameter array pointer&lt;br /&gt;
** GX_VA_NBT,             // normal, bi-normal, tangent &lt;br /&gt;
** GX_VA_MAX_ATTR,        // maximum number of vertex attributes&lt;br /&gt;
&lt;br /&gt;
** GX_VA_NULL     = 0xff  // NULL attribute (to mark end of lists)&lt;br /&gt;
&lt;br /&gt;
Toutes les données nécessaires pour représenter un mesh peuvent être spécifiées et indexées d&#039;une manière ou d&#039;une autre. De même, GX_VA_TEX0MTXIDX, GX_VA_CLR0, et autres sont aussi possibles - les valeurs les plus fréquentes dans les données SSBM sont : GX_VA_PNMTXIDX, GX_VA_POS, GX_VA_NRM, et GX_VA_TEX0. Which is to be expected as joint matrices, vertex positions/normals, and texture coordinates respectively are probably the most basic of elements needed to display a texture mesh, whether static or animated.&lt;br /&gt;
&lt;br /&gt;
When the value of vtx_attr == GX_VA_NULL (0xFF), the end of the vertex attribute array has been reached.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The vtx_attr_type values is actually associated with how the value is indexed, and can thus also determine the size of the index value within the display list data.&lt;br /&gt;
&lt;br /&gt;
* 4 octets - enum GXAttrType&lt;br /&gt;
** GX_NONE    = 0,&lt;br /&gt;
** GX_DIRECT,&lt;br /&gt;
** GX_INDEX8,&lt;br /&gt;
** GX_INDEX16&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Structures COLL_DATA : (données de collisions)&lt;br /&gt;
** 4 octets - vertex_offset (2 float par entrée correspondant à des données 2D probablement)&lt;br /&gt;
** 4 octets - vertex_count&lt;br /&gt;
** 4 octets - index_offset&lt;br /&gt;
** 4 octets - index_count&lt;br /&gt;
** 4 octets [5] - tableau inconnu&lt;br /&gt;
*** 2 octets - index_start&lt;br /&gt;
*** 2 octets - index_count&lt;br /&gt;
** 4 octets - Inconnu&lt;br /&gt;
** 4 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
[[Category:Implementations]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=Models&amp;diff=1531</id>
		<title>Models</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=Models&amp;diff=1531"/>
		<updated>2023-10-07T13:39:17Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: /* Gotcha Force Models */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
{{Research | 2| Researches on headers / bodies structures are partially achieved. }}&lt;br /&gt;
&lt;br /&gt;
== Gotcha Force Models ==&lt;br /&gt;
&lt;br /&gt;
Gotcha Force models work as those from the game Super Smash Bros Melee (SSBM) investigated by its [https://smashboards.com/threads/melee-dat-format.292603/ community].&lt;br /&gt;
&lt;br /&gt;
A model is a file format that organizes objects and resources serialized to be used by the &#039;&#039;&#039;H&#039;&#039;&#039;al &#039;&#039;&#039;S&#039;&#039;&#039;ys&#039;&#039;&#039;D&#039;&#039;&#039;olphin (&#039;&#039;&#039;HSD&#039;&#039;&#039;) library. The HSD library is used in several Capcom games. These are graphic materials structured in a hierarchical way. Some pictures present in the models seems to indicate the use of [https://learn.foundry.com/modo/901/content/help/pages/shading_lighting/shader_items/matcap.html matcap] technic.&lt;br /&gt;
Par ailleurs, la librairie prendrait ses sources sur le SDK Dolphin, tel que GX ou encore MTX.&lt;br /&gt;
&lt;br /&gt;
=== Fichiers concernés ===&lt;br /&gt;
L&#039;ensemble des fichiers ayant dans leur titre &#039;&#039;&#039;_mdl&#039;&#039;&#039; sont des fichiers modèles correspondant au format décrit dans cette page. On notera les fichiers [[ARZ (Gotcha Force)|.arz]] qui sont des modèles compressés. Le fichier collision.arc et les fichiers tdc00.arc à tdc09.arc sont aussi des modèles.&lt;br /&gt;
&lt;br /&gt;
Les fichiers modèles se retrouvent aussi dans les pzz des borgs (plxxxx.pzz) en position 004 à 009.&lt;br /&gt;
&lt;br /&gt;
=== HSDRaw ===&lt;br /&gt;
HSDRaw, un éditeur 3D dotnet de ce format est instable sur mon Windows (algoflash). Il est cependant prouvé qu&#039;un edit des _mdl pour commencer à l&#039;offset 0x100 - après le préambule - permet de visualiser le fichier sur HSDRaw et d&#039;avoir le rendu 3D du Borg (click sur le premier dossier JOBJ - puis le JOBJ dedans et double click sur le nœud en violet). Cela devrait aussi permettre d&#039;éditer certaines propriétés ?&lt;br /&gt;
&lt;br /&gt;
== Structure générale ==&lt;br /&gt;
Le format des modèles se découpe en plusieurs blocks. Le préambule fait 0x100 octets au tout début du fichier. Il est souvent absent. Toutes les valeurs sont en unsigned big endian, et le pad est en Nulls bytes (\x00). 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&#039;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&#039;il est peu probable qu&#039;un offset pointe au milieu d&#039;une structure.&lt;br /&gt;
&lt;br /&gt;
L&#039;ensemble des fichiers répondant à ce format on un seul root_node de type SObj (Scene data).&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Préambule&#039;&#039;&#039; : (0x100 octets / 0 octets) ===&lt;br /&gt;
* 4 octets - hsd_header_offset=0x100 (toujours)&lt;br /&gt;
* 4 octets - bones_flags_table_offset=0x20 (toujours) - offset de la liste des flags des armatures&lt;br /&gt;
* 4 octets - bones_table_offset=0xC0 (toujours) - offset de la liste des armatures&lt;br /&gt;
* 20 octets - Pad - (toujours)&lt;br /&gt;
* 4 octets [32] - Inconnu (flags des armatures ?) 1 octet par flag ?&lt;br /&gt;
* 32 octets - Pad - (toujours)&lt;br /&gt;
* 32 octets - armatures ?&lt;br /&gt;
* 32 octets - Pad - (toujours)&lt;br /&gt;
=== &#039;&#039;&#039;HSD Header&#039;&#039;&#039; - (0x20 octets) ===&lt;br /&gt;
* 4 octets - Taille totale du fichier&lt;br /&gt;
* 4 octets - Taille du Data block&lt;br /&gt;
* 4 octets - Nombre d&#039;entrée dans la Table de relocs&lt;br /&gt;
* 4 octets - root0_count&lt;br /&gt;
* 4 octets - root1_count&lt;br /&gt;
* 12 octets - Pad - (toujours)&lt;br /&gt;
=== &#039;&#039;&#039;Data block&#039;&#039;&#039; : ===&lt;br /&gt;
* JOBJ, etc. -&amp;gt; Ces structures sont détaillée plus loin ci-dessous.&lt;br /&gt;
=== &#039;&#039;&#039;Relocation Table&#039;&#039;&#039; : ===&lt;br /&gt;
* Tableau d&#039;offsets de 4 octets - Offsets des structures dans le DB.&lt;br /&gt;
=== &#039;&#039;&#039;Root Nodes (2)&#039;&#039;&#039; : ===&lt;br /&gt;
* Tableau de taille 8 * root0_count&lt;br /&gt;
** 4 octets - root_offset - relatif au DB&lt;br /&gt;
** 4 octets - string_table_offset - relatif à la StringTable&lt;br /&gt;
* Tableau de taille 8 * root1_count&lt;br /&gt;
** 4 octets - root_offset - relatif au DB&lt;br /&gt;
** 4 octets - string_table_offset - relatif à la StringTable&lt;br /&gt;
=== &#039;&#039;&#039;String Table&#039;&#039;&#039; : ===&lt;br /&gt;
* Suite de strings terminées par Null au nombre de root0_count + root1_count&lt;br /&gt;
&lt;br /&gt;
== Structures rencontrées dans le DB ==&lt;br /&gt;
Note : l&#039;arborescence est cumulative sur les transformations pour les relations parents-&amp;gt;enfants&lt;br /&gt;
&lt;br /&gt;
Les Noeuds Racine qui ont pour nom &amp;quot;scene_data&amp;quot; pointent sur un SObj :&lt;br /&gt;
=== &#039;&#039;&#039;SObj&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
* 4 octets - JObjDescs_offsets_list_offset&lt;br /&gt;
* 4 octets - Cameras_list_offset&lt;br /&gt;
* 4 octets - Lights_list_offset&lt;br /&gt;
* 4 octets - Fog&lt;br /&gt;
&lt;br /&gt;
&amp;quot;scene_data&amp;quot; == nom du nœud racine&lt;br /&gt;
JObjDescs_offsets_list_offset, cameras.. pointent sur une liste d&#039;offsets terminée par 4 octets à 0x00.&lt;br /&gt;
lights_list_offset pointe sur des couples (4 octets - LObj_offset ; 4 octets - light_anim_pointer_offset)&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;JObjDesc&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
* 4 octets - root_joint_offset - JObj&lt;br /&gt;
* 4 octets - joint_animations_offset - ?&lt;br /&gt;
* 4 octets - material_animations_offset - ?&lt;br /&gt;
* 4 octets - shape_animations_offset - ?&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;CObj&#039;&#039;&#039; : (0x38 octets) ===&lt;br /&gt;
* 4 octets - flags&lt;br /&gt;
* 4 octets - projection_type - ProjectionTypeEnum&lt;br /&gt;
* 2 octets - viewport_left&lt;br /&gt;
* 2 octets - viewport_right&lt;br /&gt;
* 2 octets - viewport_top&lt;br /&gt;
* 2 octets - viewport_bottom&lt;br /&gt;
* 4 octets - proj_width&lt;br /&gt;
* 4 octets - proj_height&lt;br /&gt;
* 4 octets - eye_offset - WObj&lt;br /&gt;
* 4 octets - target_offset - WObj&lt;br /&gt;
* 4 octets - roll&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - float - near_clip&lt;br /&gt;
* 4 octets - float - far_clip&lt;br /&gt;
* 4 octets - float - field_of_view&lt;br /&gt;
* 4 octets - float - aspect&lt;br /&gt;
Camera object. Note : pour frustrum ou ortho, la structure est différente.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ProjectionTypeEnum&#039;&#039;&#039;:&lt;br /&gt;
** PERSPECTIVE = 1&lt;br /&gt;
** FRUSTRUM = 2&lt;br /&gt;
** ORTHO = 3&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;WObj&#039;&#039;&#039;: (0x14 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - float - v1&lt;br /&gt;
* 4 octets - float - v2&lt;br /&gt;
* 4 octets - float - v3&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
eye / target&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;LObj&#039;&#039;&#039; : (0x1c octets) ===&lt;br /&gt;
* 4 octets - class_name&lt;br /&gt;
* 4 octets - next_offset&lt;br /&gt;
* 2 octets - flags - LObjFlagsEnum&lt;br /&gt;
* 2 octets - attenuation_flags - LObjAttenuationFlagsEnum&lt;br /&gt;
* 1 octet - color_r&lt;br /&gt;
* 1 octet - color_g&lt;br /&gt;
* 1 octet - color_b&lt;br /&gt;
* 1 octet - color_alpha&lt;br /&gt;
* 4 octets - lobj_point_offset - position&lt;br /&gt;
* 4 octets - infinite_data&lt;br /&gt;
* 4 octets - point_spot_data&lt;br /&gt;
light&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;LObjFlagsEnum&#039;&#039;&#039; :&lt;br /&gt;
** LOBJ_AMBIANT = 00 00&lt;br /&gt;
** LOBJ_INFINITE = 00 01&lt;br /&gt;
** LOBJ_POINT = 00 02&lt;br /&gt;
** LOBJ_SPOT = 00 03&lt;br /&gt;
** LOBJ_DIFFUSE = 00 04&lt;br /&gt;
** LOBJ_SPECULAR = 00 08&lt;br /&gt;
** LOBJ_ALPHA = 00 10&lt;br /&gt;
** LOBJ_HIDDEN = 00 20&lt;br /&gt;
** LOBJ_RAW_PARAM = 00 40&lt;br /&gt;
** LOBJ_DIFF_DIRTY = 00 80&lt;br /&gt;
** LOBJ_SPEC_DIRTY = 01 00&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;LObjAttenuationFlagsEnum&#039;&#039;&#039; :&lt;br /&gt;
** LOBJ_LIGHT_ATTN_NONE = 00 00&lt;br /&gt;
** LOBJ_LIGHT_ATTN = 00 01&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;LObjPoint&#039;&#039;&#039; : (0x14 octets) ===&lt;br /&gt;
* 4 octets - class_name&lt;br /&gt;
* 4 octets - float - x&lt;br /&gt;
* 4 octets - float - y&lt;br /&gt;
* 4 octets - float - z&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;LightAnimPointer&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
** 4 octets - next_offset - (LightAnimPointer)&lt;br /&gt;
** 4 octets - light_anim - ?&lt;br /&gt;
** 4 octets - position_anim - ?&lt;br /&gt;
** 4 octets - interst_anim - ?&lt;br /&gt;
Bugs dans HSDRaw - à tester&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;JObj&#039;&#039;&#039; : (0x40 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - flags&lt;br /&gt;
* 4 octets - child_offset (JObj)&lt;br /&gt;
* 4 octets - next_offset (JObj)&lt;br /&gt;
* 4 octets - dobj_offset (DObj)&lt;br /&gt;
* 4 octets [3] - float3 - rotation_xyz&lt;br /&gt;
* 4 octets [3] - float3 - scale_xyz&lt;br /&gt;
* 4 octets [3] - float3 - translation_xyz&lt;br /&gt;
* 4 octets - inverse_world_transform_offset (inverse world transform = Matrice de 4x3)&lt;br /&gt;
* 4 octets - robj_offset&lt;br /&gt;
&lt;br /&gt;
Pointé par les listes dans Root Node scene_data.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;JObjFlagsEnum&#039;&#039;&#039; : (peuvent se cumuler)&lt;br /&gt;
** NULL = 00 00 00 00&lt;br /&gt;
** SKELETON = 00 00 00 01&lt;br /&gt;
** SKELETON_ROOT = 00 00 00 02&lt;br /&gt;
** ENVELOPE_MODEL = 00 00 00 04&lt;br /&gt;
** CLASSICAL_SCALING = 00 00 00 08&lt;br /&gt;
** HIDDEN = 00 00 00 10&lt;br /&gt;
** PTCL = 00 00 00 20&lt;br /&gt;
** MTX_DIRTY = 00 00 00 40&lt;br /&gt;
** LIGHTING = 00 00 00 80&lt;br /&gt;
** TEXGEN = 00 00 01 00&lt;br /&gt;
** BILLBOARD = 00 00 02 00&lt;br /&gt;
** VBILLBOARD = 00 00 04 00&lt;br /&gt;
** HBILLBOARD = 00 00 06 00&lt;br /&gt;
** RBILLBOARD = 00 00 08 00&lt;br /&gt;
** INSTANCE = 00 00 10 00&lt;br /&gt;
** PBILLBOARD = 00 00 20 00&lt;br /&gt;
** SPLINE = 00 00 40 00&lt;br /&gt;
** FLIP_IK = 00 00 80 00&lt;br /&gt;
** SPECULAR = 00 01 00 00&lt;br /&gt;
** USE_QUATERNION = 00 02 00 00&lt;br /&gt;
** OPA = 00 04 00 00&lt;br /&gt;
** XLU = 00 08 00 00&lt;br /&gt;
** TEXEDGE = 00 10 00 00&lt;br /&gt;
** JOINT1 = 00 20 00 00&lt;br /&gt;
** JOINT2 = 00 40 00 00&lt;br /&gt;
** EFFECTOR = 00 60 00 00&lt;br /&gt;
** USER_DEFINED_MTX = 00 80 00 00&lt;br /&gt;
** MTX_INDEPEND_PARENT = 01 00 00 00&lt;br /&gt;
** MTX_INDEPEND_SRT = 02 00 00 00&lt;br /&gt;
** MTX_SCALE_COMPENSATE = 04 00 00 00&lt;br /&gt;
** ROOT_OPA = 10 00 00 00&lt;br /&gt;
** ROOT_XLU = 20 00 00 00&lt;br /&gt;
** ROOT_TEXEDGE = 40 00 00 00&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;InverseWorldTransform&#039;&#039;&#039; : (0x30 octets) ===&lt;br /&gt;
* 4 octets - float - M11&lt;br /&gt;
* 4 octets - float - M12&lt;br /&gt;
* 4 octets - float - M13&lt;br /&gt;
* 4 octets - float - M14&lt;br /&gt;
* 4 octets - float - M21&lt;br /&gt;
* 4 octets - float - M22&lt;br /&gt;
* 4 octets - float - M23&lt;br /&gt;
* 4 octets - float - M24&lt;br /&gt;
* 4 octets - float - M31&lt;br /&gt;
* 4 octets - float - M32&lt;br /&gt;
* 4 octets - float - M33&lt;br /&gt;
* 4 octets - float - M34&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;DObj&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - next_offset - prochain DOBJ&lt;br /&gt;
* 4 octets - mobj_offset - material offset&lt;br /&gt;
* 4 octets - pobj_offset - mesh offset&lt;br /&gt;
Liste chaînée qui permet de récupérer l&#039;ensemble des materials &amp;amp; mesh pour le JObj auquel il est lié.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;MObj&#039;&#039;&#039; : (0x18 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - render_flags - RenderFlagsEnum&lt;br /&gt;
* 4 octets - tobj_offset - offset de texture - peut être invalide s&#039;il n&#039;y a pas de texture pour le material&lt;br /&gt;
* 4 octets - material_offset - couleurs des materials ?&lt;br /&gt;
* 8 octets - PEDesc ?&lt;br /&gt;
&lt;br /&gt;
Contient les textures &amp;amp; informations sur les couleurs des Materials.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;RenderFlagsEnum&#039;&#039;&#039; : (se cumulent)&lt;br /&gt;
** USER = 80 00 00 00&lt;br /&gt;
** CONSTANT = 00 00 00 01&lt;br /&gt;
** VERTEX = 00 00 00 02&lt;br /&gt;
** BOTH = 00 00 00 03&lt;br /&gt;
** DIFFUSE = 00 00 00 04&lt;br /&gt;
** SPECULAR = 00 00 00 08&lt;br /&gt;
** TEX0 = 00 00 00 10&lt;br /&gt;
** TEX1 = 00 00 00 20&lt;br /&gt;
** TEX2 = 00 00 00 40&lt;br /&gt;
** TEX3 = 00 00 00 80&lt;br /&gt;
** TEX4 = 00 00 01 00&lt;br /&gt;
** TEX5 = 00 00 02 00&lt;br /&gt;
** TEX6 = 00 00 04 00&lt;br /&gt;
** TEX7 = 00 00 08 00&lt;br /&gt;
** TOON = 00 00 10 00&lt;br /&gt;
** ALPHA_MAT = 00 00 20 00&lt;br /&gt;
** ALPHA_VTX = 00 00 40 00&lt;br /&gt;
** ALPHA_BOTH = 00 00 60 00&lt;br /&gt;
** ZOFST = 01 00 00 00&lt;br /&gt;
** EFFECT = 02 00 00 00&lt;br /&gt;
** SHADOW = 04 00 00 00&lt;br /&gt;
** ZMODE_ALWAYS = 08 00 00 00&lt;br /&gt;
** DF_ALL = 10 00 00 00&lt;br /&gt;
** NO_ZUPDATE = 20 00 00 00&lt;br /&gt;
** XLU = 40 00 00 00&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;TObj&#039;&#039;&#039; : (0x5c octets) ===&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - tex_map_id - TexMapIdEnum&lt;br /&gt;
* 4 octets - gx_tex_gen_src - GXTexGenSrcEnum&lt;br /&gt;
* 4 octets - float - rx&lt;br /&gt;
* 4 octets - float - ry&lt;br /&gt;
* 4 octets - float - rz&lt;br /&gt;
* 4 octets - float - sx&lt;br /&gt;
* 4 octets - float - sy&lt;br /&gt;
* 4 octets - float - sz&lt;br /&gt;
* 4 octets - float - tx&lt;br /&gt;
* 4 octets - float - ty&lt;br /&gt;
* 4 octets - float - tz&lt;br /&gt;
* 4 octets - wrap_s - WrapEnum&lt;br /&gt;
* 4 octets - wrap_t - WrapEnum&lt;br /&gt;
* 1 octet - w_scale&lt;br /&gt;
* 1 octet - h_scale&lt;br /&gt;
* 2 octets - ?&lt;br /&gt;
* 1 octets - bump_map - (False = 00 ; True = 01)&lt;br /&gt;
* 4 bits - alpha_operation - AlphaOperationEnum&lt;br /&gt;
* 4 bits - color_operation - ColorOperationEnum&lt;br /&gt;
* 1 octet - shadow_lightmap - (False = 00 ; True = 01) (2 octets avec une Enum lightmap limite)&lt;br /&gt;
* 1 bit - ext_lightmap - (False = 0 ; True = 1)&lt;br /&gt;
* 1 bit - ambiant_lightmap - (False = 0 ; True = 1) &lt;br /&gt;
* 1 bit - specular_lightmap - (False = 0 ; True = 1)&lt;br /&gt;
* 1 bit - diffuse_lightmap (False = 0 ; True = 1)&lt;br /&gt;
* 4 bits - coord_type - CoordTypeEnum&lt;br /&gt;
* 4 octets - float - blending - utilisé quand color_operation ou alpha_operation == BLEND&lt;br /&gt;
* 4 octets - mag_filter - MagFilterEnum&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
Informations de Textures. Le TObj contient des informations sur les paramètres d&#039;environnement de textures utilisés pour le rendu graphique ainsi que les offset de l&#039;image et des données de la palette utilisés pour cette texture. Le plus important ici, c&#039;est l&#039;offset d&#039;image et la palette/tlut - si l&#039;image n&#039;est pas indexée (RGBA, CMPR, etc.) alors la structure de description palette/tlut n&#039;est pas utilisée.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;TexMapIdEnum&#039;&#039;&#039; :&lt;br /&gt;
** GX_TEXMAP0 = 00 00 00 00&lt;br /&gt;
** GX_TEXMAP1 = 00 00 00 01&lt;br /&gt;
** GX_TEXMAP2 = 00 00 00 02&lt;br /&gt;
** GX_TEXMAP3 = 00 00 00 03&lt;br /&gt;
** GX_TEXMAP4 = 00 00 00 04&lt;br /&gt;
** GX_TEXMAP5 = 00 00 00 05&lt;br /&gt;
** GX_TEXMAP6 = 00 00 00 06&lt;br /&gt;
** GX_TEXMAP7 = 00 00 00 07&lt;br /&gt;
** GX_MAX_TEXMAP = 00 00 00 08&lt;br /&gt;
** GX_TEXMAP_NULL = 00 00 00 09&lt;br /&gt;
** GX_TEXMAP_DISABLE = 00 00 00 0A&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;GXTexGenSrcEnum&#039;&#039;&#039; :&lt;br /&gt;
** GX_TG_POS = 00 00 00 00&lt;br /&gt;
** GX_TG_NRM = 00 00 00 01&lt;br /&gt;
** GX_TG_BINRM = 00 00 00 02&lt;br /&gt;
** GX_TG_TANGENT = 00 00 00 03&lt;br /&gt;
** GX_TG_TEX0 = 00 00 00 04&lt;br /&gt;
** GX_TG_TEX1 = 00 00 00 05&lt;br /&gt;
** GX_TG_TEX2 = 00 00 00 06&lt;br /&gt;
** GX_TG_TEX3 = 00 00 00 07&lt;br /&gt;
** GX_TG_TEX4 = 00 00 00 08&lt;br /&gt;
** GX_TG_TEX5 = 00 00 00 09&lt;br /&gt;
** GX_TG_TEX6 = 00 00 00 0A&lt;br /&gt;
** GX_TG_TEX7 = 00 00 00 0B&lt;br /&gt;
** GX_TG_TEXCOORD0 = 00 00 00 0C&lt;br /&gt;
** GX_TG_TEXCOORD1 = 00 00 00 0D&lt;br /&gt;
** GX_TG_TEXCOORD2 = 00 00 00 0E&lt;br /&gt;
** GX_TG_TEXCOORD3 = 00 00 00 0F&lt;br /&gt;
** GX_TG_TEXCOORD4 = 00 00 00 10&lt;br /&gt;
** GX_TG_TEXCOORD5 = 00 00 00 11&lt;br /&gt;
** GX_TG_TEXCOORD6 = 00 00 00 12&lt;br /&gt;
** GX_TG_COLOR0 = 00 00 00 13&lt;br /&gt;
** GX_TG_COLOR1 = 00 00 00 14&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;AlphaOperationEnum&#039;&#039;&#039;:&lt;br /&gt;
** NONE = 0X&lt;br /&gt;
** ALPHAMASK = 1X&lt;br /&gt;
** BLEND = 2X&lt;br /&gt;
** MODULATE = 3X&lt;br /&gt;
** REPLACE = 4X&lt;br /&gt;
** PASS = 5X&lt;br /&gt;
** ADD = 6X&lt;br /&gt;
** SUB = 7X&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ColorOperationEnum&#039;&#039;&#039;:&lt;br /&gt;
** NONE = X0&lt;br /&gt;
** ALPHA_MASK = X1&lt;br /&gt;
** RGB_MASK = X2&lt;br /&gt;
** BLEND = X3&lt;br /&gt;
** MODULATE = X4&lt;br /&gt;
** REPLACE = X5&lt;br /&gt;
** PASS = X6&lt;br /&gt;
** ADD = X7&lt;br /&gt;
** SUB = X8&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;CoordTypeEnum&#039;&#039;&#039;:&lt;br /&gt;
** UV = X0&lt;br /&gt;
** REFLECTION = X1&lt;br /&gt;
** HILIGHT = X2&lt;br /&gt;
** SHADOW = X3&lt;br /&gt;
** TOON = X4&lt;br /&gt;
** GRADATION = X5&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MagFilterEnum&#039;&#039;&#039;:&lt;br /&gt;
** GX_NEAR = 00 00 00 00&lt;br /&gt;
** GX_LINEAR = 00 00 00 01&lt;br /&gt;
** GX_NEAR_MIP_NEAR = 00 00 00 02&lt;br /&gt;
** GX_LIN_MIP_NEAR = 00 00 00 03&lt;br /&gt;
** GX_NEAR_MIP_LIN = 00 00 00 04&lt;br /&gt;
** GX_LIN_MIP_LIN = 00 00 00 05&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;WrapEnum&#039;&#039;&#039;:&lt;br /&gt;
** CLAMP = 00 00 00 00&lt;br /&gt;
** REPEAT = 00 00 00 01&lt;br /&gt;
** MIRROR = 00 00 00 02&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Material&#039;&#039;&#039; : (0x14 octets) ===&lt;br /&gt;
* 1 octets - AMB_R - (ambient)&lt;br /&gt;
* 1 octets - AMB_G&lt;br /&gt;
* 1 octets - AMB_B&lt;br /&gt;
* 1 octets - AMB_A&lt;br /&gt;
* 1 octets - DIF_R - (diffuse)&lt;br /&gt;
* 1 octets - DIF_G&lt;br /&gt;
* 1 octets - DIF_B&lt;br /&gt;
* 1 octets - DIF_A&lt;br /&gt;
* 1 octets - SPC_R - (specular)&lt;br /&gt;
* 1 octets - SPC_G&lt;br /&gt;
* 1 octets - SPC_B&lt;br /&gt;
* 1 octets - SPC_A&lt;br /&gt;
* 4 octets - float - alpha&lt;br /&gt;
* 4 octets - float - shininess&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;PObj&#039;&#039;&#039; : (0x18 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - next_offset - pobj&lt;br /&gt;
* 4 octets - vertex_attr_list_offset&lt;br /&gt;
* 2 octets - Flags - PObjFlagsEnum&lt;br /&gt;
* 2 octets - display_list_size - number of 0x20 (32) byte blocks occupied by display list data&lt;br /&gt;
* 4 octets - display_list_offset&lt;br /&gt;
* 4 octets - weight_list_offset - ? verifier qu&#039;on retrouve bien le tableau d&#039;envelope_weights à cet offset&lt;br /&gt;
&lt;br /&gt;
Comme l&#039;indique next_offset, il s&#039;agit d&#039;une liste de meshs à afficher pour un material donné référencé par un dobj. PObj contient les offsets de vertex attributes / display list / joint weight list ce qui suffit et permet d’interpréter et traiter les coordonnées de vertices, normals &amp;amp; textures.&lt;br /&gt;
&lt;br /&gt;
Les attributs vertex sont les plus important - les parametres specifiés contrôlent tout : du format, de la taille des données de chaque vertex, normal et coordonnées de textures et comment ces valeurs sont dimensionnées (scaled) par rapport à la présence et la taille de chaque valeur d&#039;index qui apparaît dans la display list information.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PObjFlagsEnum&#039;&#039;&#039; :&lt;br /&gt;
** Inconnu0 = 00 01&lt;br /&gt;
** Inconnu1 = 00 02&lt;br /&gt;
** ANIM = 00 08&lt;br /&gt;
** SHAPE_ANIM = 10 00&lt;br /&gt;
** ENVELOPE = 20 00&lt;br /&gt;
** CULLBACK = 40 00&lt;br /&gt;
** CULLFRONT = 80 00&lt;br /&gt;
&lt;br /&gt;
=== EnvelopeWeights : (0x? octets) ===&lt;br /&gt;
* 4 octets - envelope_count&lt;br /&gt;
* [envelope_count]:&lt;br /&gt;
** 4 octets - float - weight&lt;br /&gt;
** 4 octets - pad ?&lt;br /&gt;
* 4 octets - jobj_list_offset&lt;br /&gt;
&lt;br /&gt;
=== not verified yet ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;IMAGE_HEADER&#039;&#039;&#039; :&lt;br /&gt;
** 4 octets - image_offset - image data&lt;br /&gt;
** 2 octets - width&lt;br /&gt;
** 2 octets - height&lt;br /&gt;
** 4 octets - image_format&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PALETTE_HEADER&#039;&#039;&#039; : (0x10)&lt;br /&gt;
** 4 octets - palette_offset - palette data&lt;br /&gt;
** 4 octets - palette_format&lt;br /&gt;
** 4 octets - Inconnu&lt;br /&gt;
** 2 octets - color_count&lt;br /&gt;
** 2 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
image_offset et palette_offset sont souvent partagés par plusieurs textures - savoir ça permet de retrouver toutes les informations sur les images des textures (largeur, hauteur, format), ainsi que le format et le nombre de couleurs de la palette/tlut.&lt;br /&gt;
&lt;br /&gt;
Le format d&#039;image ne détermine pas le nombre total de couleurs de la palette qu&#039;elle utilisent. Par exemple, une image indexée sur 8 bits aurait un maximum de 256 couleurs mais seulement 136 ou 221 couleurs sont actuellement utilisées. De la sorte, la palette n&#039;utilisera pas la taille totale qu&#039;elle devrait utiliser.&lt;br /&gt;
&lt;br /&gt;
Les images suivent la structure généralement utilisée par la GameCube :&lt;br /&gt;
&lt;br /&gt;
IMAGE FORMATS :&lt;br /&gt;
* case 0: //i4&lt;br /&gt;
* case 1: //i8&lt;br /&gt;
* case 2: //i4a4&lt;br /&gt;
* case 3: //i8a8&lt;br /&gt;
* case 4: //r5g6b5&lt;br /&gt;
* case 5: //rgb5a3&lt;br /&gt;
* case 6: //r8g8b8a8&lt;br /&gt;
* case 8: //index4&lt;br /&gt;
* case 9: //index8&lt;br /&gt;
* case 0xa: //index14x2&lt;br /&gt;
* case 0xe: //s3tc1&lt;br /&gt;
&lt;br /&gt;
Les formats indexés utilisent aussi les informations de palettes/tlut et les données peuvent apparaître en plusieurs formats :&lt;br /&gt;
&lt;br /&gt;
PALETTE FORMATS :&lt;br /&gt;
* case 0: //ia8&lt;br /&gt;
* case 1: //r5g6b5&lt;br /&gt;
* case 2: //rgb5a3&lt;br /&gt;
&lt;br /&gt;
---&amp;gt; &amp;quot;Joint Data - Accessing Geometry, Mesh, and Vertex Attributes&amp;quot; https://smashboards.com/threads/melee-dat-format.292603/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
trad a revoir à partir de là, il faut investiguer le rendu 3D sur GameCube pour mieux comprendre&lt;br /&gt;
&lt;br /&gt;
// déclaration d&#039;un vertex et attribute information&lt;br /&gt;
// attr, type, cnt, data_type, flags?, file_offset&lt;br /&gt;
* ATTR_DATA&lt;br /&gt;
** 4 octets - GXAttr     vtx_attr_offset - attr&lt;br /&gt;
** 4 octets - GXAttrType vtx_attr_type   - index_type&lt;br /&gt;
** 4 octets - GXCompCnt  comp_cnt        - cnt&lt;br /&gt;
** 4 octets - GXCompType comp_type       - data_type	&lt;br /&gt;
** 1 octets - scale&lt;br /&gt;
** 1 octets - Inconnu&lt;br /&gt;
** 2 octets - vtx_stride&lt;br /&gt;
** 2 octets - data_offset&lt;br /&gt;
&lt;br /&gt;
vertex_attr_offset pointe sur une liste d&#039;attributs de vertex. Leur nombre n&#039;est pas donné. Les données dans cette structure suivent les informations et les types conçus par l&#039;architecture GameCube/WII et son API. La liste est terminée par une valeur spécifique de vtx_attr qui signale la fin de cette liste. Avec un accès à la doku SDK, il serait fortement conseillé de lire la section à propos des &amp;quot;vertex attributes and other specifications&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
La valeur de vtx_attr determine le type de donnée que cet attribut désigne et peut indiquer un nombre de types natifs utilisés utilisés pour passer les données entre les interfaces logicielles et matérielles.&lt;br /&gt;
&lt;br /&gt;
Les valeures possibles sont les suivantes :&lt;br /&gt;
* enum GXAttr (4 octets)&lt;br /&gt;
** GX_VA_PNMTXIDX = 0,    // position/normal matrix index&lt;br /&gt;
** GX_VA_TEX0MTXIDX,      // texture 0 matrix index&lt;br /&gt;
** GX_VA_TEX1MTXIDX,      // texture 1 matrix index&lt;br /&gt;
** GX_VA_TEX2MTXIDX,      // texture 2 matrix index&lt;br /&gt;
** GX_VA_TEX3MTXIDX,      // texture 3 matrix index&lt;br /&gt;
** GX_VA_TEX4MTXIDX,      // texture 4 matrix index&lt;br /&gt;
** GX_VA_TEX5MTXIDX,      // texture 5 matrix index&lt;br /&gt;
** GX_VA_TEX6MTXIDX,      // texture 6 matrix index&lt;br /&gt;
** GX_VA_TEX7MTXIDX,      // texture 7 matrix index&lt;br /&gt;
** GX_VA_POS      = 9,    // position&lt;br /&gt;
** GX_VA_NRM,             // normal&lt;br /&gt;
** GX_VA_CLR0,            // color 0&lt;br /&gt;
** GX_VA_CLR1,            // color 1&lt;br /&gt;
** GX_VA_TEX0,            // input texture coordinate 0&lt;br /&gt;
** GX_VA_TEX1,            // input texture coordinate 1&lt;br /&gt;
** GX_VA_TEX2,            // input texture coordinate 2&lt;br /&gt;
** GX_VA_TEX3,            // input texture coordinate 3&lt;br /&gt;
** GX_VA_TEX4,            // input texture coordinate 4&lt;br /&gt;
** GX_VA_TEX5,            // input texture coordinate 5&lt;br /&gt;
** GX_VA_TEX6,            // input texture coordinate 6&lt;br /&gt;
** GX_VA_TEX7,            // input texture coordinate 7&lt;br /&gt;
&lt;br /&gt;
** GX_POS_MTX_ARRAY,      // position matrix array pointer&lt;br /&gt;
** GX_NRM_MTX_ARRAY,      // normal matrix array pointer&lt;br /&gt;
** GX_TEX_MTX_ARRAY,      // texture matrix array pointer&lt;br /&gt;
** GX_LIGHT_ARRAY,        // light parameter array pointer&lt;br /&gt;
** GX_VA_NBT,             // normal, bi-normal, tangent &lt;br /&gt;
** GX_VA_MAX_ATTR,        // maximum number of vertex attributes&lt;br /&gt;
&lt;br /&gt;
** GX_VA_NULL     = 0xff  // NULL attribute (to mark end of lists)&lt;br /&gt;
&lt;br /&gt;
Toutes les données nécessaires pour représenter un mesh peuvent être spécifiées et indexées d&#039;une manière ou d&#039;une autre. De même, GX_VA_TEX0MTXIDX, GX_VA_CLR0, et autres sont aussi possibles - les valeurs les plus fréquentes dans les données SSBM sont : GX_VA_PNMTXIDX, GX_VA_POS, GX_VA_NRM, et GX_VA_TEX0. Which is to be expected as joint matrices, vertex positions/normals, and texture coordinates respectively are probably the most basic of elements needed to display a texture mesh, whether static or animated.&lt;br /&gt;
&lt;br /&gt;
When the value of vtx_attr == GX_VA_NULL (0xFF), the end of the vertex attribute array has been reached.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The vtx_attr_type values is actually associated with how the value is indexed, and can thus also determine the size of the index value within the display list data.&lt;br /&gt;
&lt;br /&gt;
* 4 octets - enum GXAttrType&lt;br /&gt;
** GX_NONE    = 0,&lt;br /&gt;
** GX_DIRECT,&lt;br /&gt;
** GX_INDEX8,&lt;br /&gt;
** GX_INDEX16&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Structures COLL_DATA : (données de collisions)&lt;br /&gt;
** 4 octets - vertex_offset (2 float par entrée correspondant à des données 2D probablement)&lt;br /&gt;
** 4 octets - vertex_count&lt;br /&gt;
** 4 octets - index_offset&lt;br /&gt;
** 4 octets - index_count&lt;br /&gt;
** 4 octets [5] - tableau inconnu&lt;br /&gt;
*** 2 octets - index_start&lt;br /&gt;
*** 2 octets - index_count&lt;br /&gt;
** 4 octets - Inconnu&lt;br /&gt;
** 4 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
[[Category:Implementations]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=Models&amp;diff=1530</id>
		<title>Models</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=Models&amp;diff=1530"/>
		<updated>2023-10-07T13:36:26Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: /* Gotcha Force Models */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
{{Research | 2| Researches on headers / bodies structures are partially achieved. }}&lt;br /&gt;
&lt;br /&gt;
== Gotcha Force Models ==&lt;br /&gt;
&lt;br /&gt;
Gotcha Force models work as those from the game Super Smash Bros Melee (SSBM) investigated by its [https://smashboards.com/threads/melee-dat-format.292603/ community].&lt;br /&gt;
&lt;br /&gt;
A model is a file format that organizes objects and resources serialized to be used by the &#039;&#039;&#039;H&#039;&#039;&#039;al &#039;&#039;&#039;S&#039;&#039;&#039;ys&#039;&#039;&#039;D&#039;&#039;&#039;olphin (&#039;&#039;&#039;HSD&#039;&#039;&#039;) library. The HSD library is used in several Capcom games. These are graphic materials structured in a hierarchical way.&lt;br /&gt;
&lt;br /&gt;
Ce sont des ressources graphiques structurées de manière hiérarchique. La présence de certaines images dans les modèles montrent à priori l&#039;utilisation de la technique [https://learn.foundry.com/modo/901/content/help/pages/shading_lighting/shader_items/matcap.html matcap].&lt;br /&gt;
Par ailleurs, la librairie prendrait ses sources sur le SDK Dolphin, tel que GX ou encore MTX.&lt;br /&gt;
&lt;br /&gt;
=== Fichiers concernés ===&lt;br /&gt;
L&#039;ensemble des fichiers ayant dans leur titre &#039;&#039;&#039;_mdl&#039;&#039;&#039; sont des fichiers modèles correspondant au format décrit dans cette page. On notera les fichiers [[ARZ (Gotcha Force)|.arz]] qui sont des modèles compressés. Le fichier collision.arc et les fichiers tdc00.arc à tdc09.arc sont aussi des modèles.&lt;br /&gt;
&lt;br /&gt;
Les fichiers modèles se retrouvent aussi dans les pzz des borgs (plxxxx.pzz) en position 004 à 009.&lt;br /&gt;
&lt;br /&gt;
=== HSDRaw ===&lt;br /&gt;
HSDRaw, un éditeur 3D dotnet de ce format est instable sur mon Windows (algoflash). Il est cependant prouvé qu&#039;un edit des _mdl pour commencer à l&#039;offset 0x100 - après le préambule - permet de visualiser le fichier sur HSDRaw et d&#039;avoir le rendu 3D du Borg (click sur le premier dossier JOBJ - puis le JOBJ dedans et double click sur le nœud en violet). Cela devrait aussi permettre d&#039;éditer certaines propriétés ?&lt;br /&gt;
&lt;br /&gt;
== Structure générale ==&lt;br /&gt;
Le format des modèles se découpe en plusieurs blocks. Le préambule fait 0x100 octets au tout début du fichier. Il est souvent absent. Toutes les valeurs sont en unsigned big endian, et le pad est en Nulls bytes (\x00). 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&#039;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&#039;il est peu probable qu&#039;un offset pointe au milieu d&#039;une structure.&lt;br /&gt;
&lt;br /&gt;
L&#039;ensemble des fichiers répondant à ce format on un seul root_node de type SObj (Scene data).&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Préambule&#039;&#039;&#039; : (0x100 octets / 0 octets) ===&lt;br /&gt;
* 4 octets - hsd_header_offset=0x100 (toujours)&lt;br /&gt;
* 4 octets - bones_flags_table_offset=0x20 (toujours) - offset de la liste des flags des armatures&lt;br /&gt;
* 4 octets - bones_table_offset=0xC0 (toujours) - offset de la liste des armatures&lt;br /&gt;
* 20 octets - Pad - (toujours)&lt;br /&gt;
* 4 octets [32] - Inconnu (flags des armatures ?) 1 octet par flag ?&lt;br /&gt;
* 32 octets - Pad - (toujours)&lt;br /&gt;
* 32 octets - armatures ?&lt;br /&gt;
* 32 octets - Pad - (toujours)&lt;br /&gt;
=== &#039;&#039;&#039;HSD Header&#039;&#039;&#039; - (0x20 octets) ===&lt;br /&gt;
* 4 octets - Taille totale du fichier&lt;br /&gt;
* 4 octets - Taille du Data block&lt;br /&gt;
* 4 octets - Nombre d&#039;entrée dans la Table de relocs&lt;br /&gt;
* 4 octets - root0_count&lt;br /&gt;
* 4 octets - root1_count&lt;br /&gt;
* 12 octets - Pad - (toujours)&lt;br /&gt;
=== &#039;&#039;&#039;Data block&#039;&#039;&#039; : ===&lt;br /&gt;
* JOBJ, etc. -&amp;gt; Ces structures sont détaillée plus loin ci-dessous.&lt;br /&gt;
=== &#039;&#039;&#039;Relocation Table&#039;&#039;&#039; : ===&lt;br /&gt;
* Tableau d&#039;offsets de 4 octets - Offsets des structures dans le DB.&lt;br /&gt;
=== &#039;&#039;&#039;Root Nodes (2)&#039;&#039;&#039; : ===&lt;br /&gt;
* Tableau de taille 8 * root0_count&lt;br /&gt;
** 4 octets - root_offset - relatif au DB&lt;br /&gt;
** 4 octets - string_table_offset - relatif à la StringTable&lt;br /&gt;
* Tableau de taille 8 * root1_count&lt;br /&gt;
** 4 octets - root_offset - relatif au DB&lt;br /&gt;
** 4 octets - string_table_offset - relatif à la StringTable&lt;br /&gt;
=== &#039;&#039;&#039;String Table&#039;&#039;&#039; : ===&lt;br /&gt;
* Suite de strings terminées par Null au nombre de root0_count + root1_count&lt;br /&gt;
&lt;br /&gt;
== Structures rencontrées dans le DB ==&lt;br /&gt;
Note : l&#039;arborescence est cumulative sur les transformations pour les relations parents-&amp;gt;enfants&lt;br /&gt;
&lt;br /&gt;
Les Noeuds Racine qui ont pour nom &amp;quot;scene_data&amp;quot; pointent sur un SObj :&lt;br /&gt;
=== &#039;&#039;&#039;SObj&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
* 4 octets - JObjDescs_offsets_list_offset&lt;br /&gt;
* 4 octets - Cameras_list_offset&lt;br /&gt;
* 4 octets - Lights_list_offset&lt;br /&gt;
* 4 octets - Fog&lt;br /&gt;
&lt;br /&gt;
&amp;quot;scene_data&amp;quot; == nom du nœud racine&lt;br /&gt;
JObjDescs_offsets_list_offset, cameras.. pointent sur une liste d&#039;offsets terminée par 4 octets à 0x00.&lt;br /&gt;
lights_list_offset pointe sur des couples (4 octets - LObj_offset ; 4 octets - light_anim_pointer_offset)&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;JObjDesc&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
* 4 octets - root_joint_offset - JObj&lt;br /&gt;
* 4 octets - joint_animations_offset - ?&lt;br /&gt;
* 4 octets - material_animations_offset - ?&lt;br /&gt;
* 4 octets - shape_animations_offset - ?&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;CObj&#039;&#039;&#039; : (0x38 octets) ===&lt;br /&gt;
* 4 octets - flags&lt;br /&gt;
* 4 octets - projection_type - ProjectionTypeEnum&lt;br /&gt;
* 2 octets - viewport_left&lt;br /&gt;
* 2 octets - viewport_right&lt;br /&gt;
* 2 octets - viewport_top&lt;br /&gt;
* 2 octets - viewport_bottom&lt;br /&gt;
* 4 octets - proj_width&lt;br /&gt;
* 4 octets - proj_height&lt;br /&gt;
* 4 octets - eye_offset - WObj&lt;br /&gt;
* 4 octets - target_offset - WObj&lt;br /&gt;
* 4 octets - roll&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - float - near_clip&lt;br /&gt;
* 4 octets - float - far_clip&lt;br /&gt;
* 4 octets - float - field_of_view&lt;br /&gt;
* 4 octets - float - aspect&lt;br /&gt;
Camera object. Note : pour frustrum ou ortho, la structure est différente.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ProjectionTypeEnum&#039;&#039;&#039;:&lt;br /&gt;
** PERSPECTIVE = 1&lt;br /&gt;
** FRUSTRUM = 2&lt;br /&gt;
** ORTHO = 3&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;WObj&#039;&#039;&#039;: (0x14 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - float - v1&lt;br /&gt;
* 4 octets - float - v2&lt;br /&gt;
* 4 octets - float - v3&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
eye / target&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;LObj&#039;&#039;&#039; : (0x1c octets) ===&lt;br /&gt;
* 4 octets - class_name&lt;br /&gt;
* 4 octets - next_offset&lt;br /&gt;
* 2 octets - flags - LObjFlagsEnum&lt;br /&gt;
* 2 octets - attenuation_flags - LObjAttenuationFlagsEnum&lt;br /&gt;
* 1 octet - color_r&lt;br /&gt;
* 1 octet - color_g&lt;br /&gt;
* 1 octet - color_b&lt;br /&gt;
* 1 octet - color_alpha&lt;br /&gt;
* 4 octets - lobj_point_offset - position&lt;br /&gt;
* 4 octets - infinite_data&lt;br /&gt;
* 4 octets - point_spot_data&lt;br /&gt;
light&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;LObjFlagsEnum&#039;&#039;&#039; :&lt;br /&gt;
** LOBJ_AMBIANT = 00 00&lt;br /&gt;
** LOBJ_INFINITE = 00 01&lt;br /&gt;
** LOBJ_POINT = 00 02&lt;br /&gt;
** LOBJ_SPOT = 00 03&lt;br /&gt;
** LOBJ_DIFFUSE = 00 04&lt;br /&gt;
** LOBJ_SPECULAR = 00 08&lt;br /&gt;
** LOBJ_ALPHA = 00 10&lt;br /&gt;
** LOBJ_HIDDEN = 00 20&lt;br /&gt;
** LOBJ_RAW_PARAM = 00 40&lt;br /&gt;
** LOBJ_DIFF_DIRTY = 00 80&lt;br /&gt;
** LOBJ_SPEC_DIRTY = 01 00&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;LObjAttenuationFlagsEnum&#039;&#039;&#039; :&lt;br /&gt;
** LOBJ_LIGHT_ATTN_NONE = 00 00&lt;br /&gt;
** LOBJ_LIGHT_ATTN = 00 01&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;LObjPoint&#039;&#039;&#039; : (0x14 octets) ===&lt;br /&gt;
* 4 octets - class_name&lt;br /&gt;
* 4 octets - float - x&lt;br /&gt;
* 4 octets - float - y&lt;br /&gt;
* 4 octets - float - z&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;LightAnimPointer&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
** 4 octets - next_offset - (LightAnimPointer)&lt;br /&gt;
** 4 octets - light_anim - ?&lt;br /&gt;
** 4 octets - position_anim - ?&lt;br /&gt;
** 4 octets - interst_anim - ?&lt;br /&gt;
Bugs dans HSDRaw - à tester&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;JObj&#039;&#039;&#039; : (0x40 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - flags&lt;br /&gt;
* 4 octets - child_offset (JObj)&lt;br /&gt;
* 4 octets - next_offset (JObj)&lt;br /&gt;
* 4 octets - dobj_offset (DObj)&lt;br /&gt;
* 4 octets [3] - float3 - rotation_xyz&lt;br /&gt;
* 4 octets [3] - float3 - scale_xyz&lt;br /&gt;
* 4 octets [3] - float3 - translation_xyz&lt;br /&gt;
* 4 octets - inverse_world_transform_offset (inverse world transform = Matrice de 4x3)&lt;br /&gt;
* 4 octets - robj_offset&lt;br /&gt;
&lt;br /&gt;
Pointé par les listes dans Root Node scene_data.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;JObjFlagsEnum&#039;&#039;&#039; : (peuvent se cumuler)&lt;br /&gt;
** NULL = 00 00 00 00&lt;br /&gt;
** SKELETON = 00 00 00 01&lt;br /&gt;
** SKELETON_ROOT = 00 00 00 02&lt;br /&gt;
** ENVELOPE_MODEL = 00 00 00 04&lt;br /&gt;
** CLASSICAL_SCALING = 00 00 00 08&lt;br /&gt;
** HIDDEN = 00 00 00 10&lt;br /&gt;
** PTCL = 00 00 00 20&lt;br /&gt;
** MTX_DIRTY = 00 00 00 40&lt;br /&gt;
** LIGHTING = 00 00 00 80&lt;br /&gt;
** TEXGEN = 00 00 01 00&lt;br /&gt;
** BILLBOARD = 00 00 02 00&lt;br /&gt;
** VBILLBOARD = 00 00 04 00&lt;br /&gt;
** HBILLBOARD = 00 00 06 00&lt;br /&gt;
** RBILLBOARD = 00 00 08 00&lt;br /&gt;
** INSTANCE = 00 00 10 00&lt;br /&gt;
** PBILLBOARD = 00 00 20 00&lt;br /&gt;
** SPLINE = 00 00 40 00&lt;br /&gt;
** FLIP_IK = 00 00 80 00&lt;br /&gt;
** SPECULAR = 00 01 00 00&lt;br /&gt;
** USE_QUATERNION = 00 02 00 00&lt;br /&gt;
** OPA = 00 04 00 00&lt;br /&gt;
** XLU = 00 08 00 00&lt;br /&gt;
** TEXEDGE = 00 10 00 00&lt;br /&gt;
** JOINT1 = 00 20 00 00&lt;br /&gt;
** JOINT2 = 00 40 00 00&lt;br /&gt;
** EFFECTOR = 00 60 00 00&lt;br /&gt;
** USER_DEFINED_MTX = 00 80 00 00&lt;br /&gt;
** MTX_INDEPEND_PARENT = 01 00 00 00&lt;br /&gt;
** MTX_INDEPEND_SRT = 02 00 00 00&lt;br /&gt;
** MTX_SCALE_COMPENSATE = 04 00 00 00&lt;br /&gt;
** ROOT_OPA = 10 00 00 00&lt;br /&gt;
** ROOT_XLU = 20 00 00 00&lt;br /&gt;
** ROOT_TEXEDGE = 40 00 00 00&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;InverseWorldTransform&#039;&#039;&#039; : (0x30 octets) ===&lt;br /&gt;
* 4 octets - float - M11&lt;br /&gt;
* 4 octets - float - M12&lt;br /&gt;
* 4 octets - float - M13&lt;br /&gt;
* 4 octets - float - M14&lt;br /&gt;
* 4 octets - float - M21&lt;br /&gt;
* 4 octets - float - M22&lt;br /&gt;
* 4 octets - float - M23&lt;br /&gt;
* 4 octets - float - M24&lt;br /&gt;
* 4 octets - float - M31&lt;br /&gt;
* 4 octets - float - M32&lt;br /&gt;
* 4 octets - float - M33&lt;br /&gt;
* 4 octets - float - M34&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;DObj&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - next_offset - prochain DOBJ&lt;br /&gt;
* 4 octets - mobj_offset - material offset&lt;br /&gt;
* 4 octets - pobj_offset - mesh offset&lt;br /&gt;
Liste chaînée qui permet de récupérer l&#039;ensemble des materials &amp;amp; mesh pour le JObj auquel il est lié.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;MObj&#039;&#039;&#039; : (0x18 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - render_flags - RenderFlagsEnum&lt;br /&gt;
* 4 octets - tobj_offset - offset de texture - peut être invalide s&#039;il n&#039;y a pas de texture pour le material&lt;br /&gt;
* 4 octets - material_offset - couleurs des materials ?&lt;br /&gt;
* 8 octets - PEDesc ?&lt;br /&gt;
&lt;br /&gt;
Contient les textures &amp;amp; informations sur les couleurs des Materials.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;RenderFlagsEnum&#039;&#039;&#039; : (se cumulent)&lt;br /&gt;
** USER = 80 00 00 00&lt;br /&gt;
** CONSTANT = 00 00 00 01&lt;br /&gt;
** VERTEX = 00 00 00 02&lt;br /&gt;
** BOTH = 00 00 00 03&lt;br /&gt;
** DIFFUSE = 00 00 00 04&lt;br /&gt;
** SPECULAR = 00 00 00 08&lt;br /&gt;
** TEX0 = 00 00 00 10&lt;br /&gt;
** TEX1 = 00 00 00 20&lt;br /&gt;
** TEX2 = 00 00 00 40&lt;br /&gt;
** TEX3 = 00 00 00 80&lt;br /&gt;
** TEX4 = 00 00 01 00&lt;br /&gt;
** TEX5 = 00 00 02 00&lt;br /&gt;
** TEX6 = 00 00 04 00&lt;br /&gt;
** TEX7 = 00 00 08 00&lt;br /&gt;
** TOON = 00 00 10 00&lt;br /&gt;
** ALPHA_MAT = 00 00 20 00&lt;br /&gt;
** ALPHA_VTX = 00 00 40 00&lt;br /&gt;
** ALPHA_BOTH = 00 00 60 00&lt;br /&gt;
** ZOFST = 01 00 00 00&lt;br /&gt;
** EFFECT = 02 00 00 00&lt;br /&gt;
** SHADOW = 04 00 00 00&lt;br /&gt;
** ZMODE_ALWAYS = 08 00 00 00&lt;br /&gt;
** DF_ALL = 10 00 00 00&lt;br /&gt;
** NO_ZUPDATE = 20 00 00 00&lt;br /&gt;
** XLU = 40 00 00 00&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;TObj&#039;&#039;&#039; : (0x5c octets) ===&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - tex_map_id - TexMapIdEnum&lt;br /&gt;
* 4 octets - gx_tex_gen_src - GXTexGenSrcEnum&lt;br /&gt;
* 4 octets - float - rx&lt;br /&gt;
* 4 octets - float - ry&lt;br /&gt;
* 4 octets - float - rz&lt;br /&gt;
* 4 octets - float - sx&lt;br /&gt;
* 4 octets - float - sy&lt;br /&gt;
* 4 octets - float - sz&lt;br /&gt;
* 4 octets - float - tx&lt;br /&gt;
* 4 octets - float - ty&lt;br /&gt;
* 4 octets - float - tz&lt;br /&gt;
* 4 octets - wrap_s - WrapEnum&lt;br /&gt;
* 4 octets - wrap_t - WrapEnum&lt;br /&gt;
* 1 octet - w_scale&lt;br /&gt;
* 1 octet - h_scale&lt;br /&gt;
* 2 octets - ?&lt;br /&gt;
* 1 octets - bump_map - (False = 00 ; True = 01)&lt;br /&gt;
* 4 bits - alpha_operation - AlphaOperationEnum&lt;br /&gt;
* 4 bits - color_operation - ColorOperationEnum&lt;br /&gt;
* 1 octet - shadow_lightmap - (False = 00 ; True = 01) (2 octets avec une Enum lightmap limite)&lt;br /&gt;
* 1 bit - ext_lightmap - (False = 0 ; True = 1)&lt;br /&gt;
* 1 bit - ambiant_lightmap - (False = 0 ; True = 1) &lt;br /&gt;
* 1 bit - specular_lightmap - (False = 0 ; True = 1)&lt;br /&gt;
* 1 bit - diffuse_lightmap (False = 0 ; True = 1)&lt;br /&gt;
* 4 bits - coord_type - CoordTypeEnum&lt;br /&gt;
* 4 octets - float - blending - utilisé quand color_operation ou alpha_operation == BLEND&lt;br /&gt;
* 4 octets - mag_filter - MagFilterEnum&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
Informations de Textures. Le TObj contient des informations sur les paramètres d&#039;environnement de textures utilisés pour le rendu graphique ainsi que les offset de l&#039;image et des données de la palette utilisés pour cette texture. Le plus important ici, c&#039;est l&#039;offset d&#039;image et la palette/tlut - si l&#039;image n&#039;est pas indexée (RGBA, CMPR, etc.) alors la structure de description palette/tlut n&#039;est pas utilisée.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;TexMapIdEnum&#039;&#039;&#039; :&lt;br /&gt;
** GX_TEXMAP0 = 00 00 00 00&lt;br /&gt;
** GX_TEXMAP1 = 00 00 00 01&lt;br /&gt;
** GX_TEXMAP2 = 00 00 00 02&lt;br /&gt;
** GX_TEXMAP3 = 00 00 00 03&lt;br /&gt;
** GX_TEXMAP4 = 00 00 00 04&lt;br /&gt;
** GX_TEXMAP5 = 00 00 00 05&lt;br /&gt;
** GX_TEXMAP6 = 00 00 00 06&lt;br /&gt;
** GX_TEXMAP7 = 00 00 00 07&lt;br /&gt;
** GX_MAX_TEXMAP = 00 00 00 08&lt;br /&gt;
** GX_TEXMAP_NULL = 00 00 00 09&lt;br /&gt;
** GX_TEXMAP_DISABLE = 00 00 00 0A&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;GXTexGenSrcEnum&#039;&#039;&#039; :&lt;br /&gt;
** GX_TG_POS = 00 00 00 00&lt;br /&gt;
** GX_TG_NRM = 00 00 00 01&lt;br /&gt;
** GX_TG_BINRM = 00 00 00 02&lt;br /&gt;
** GX_TG_TANGENT = 00 00 00 03&lt;br /&gt;
** GX_TG_TEX0 = 00 00 00 04&lt;br /&gt;
** GX_TG_TEX1 = 00 00 00 05&lt;br /&gt;
** GX_TG_TEX2 = 00 00 00 06&lt;br /&gt;
** GX_TG_TEX3 = 00 00 00 07&lt;br /&gt;
** GX_TG_TEX4 = 00 00 00 08&lt;br /&gt;
** GX_TG_TEX5 = 00 00 00 09&lt;br /&gt;
** GX_TG_TEX6 = 00 00 00 0A&lt;br /&gt;
** GX_TG_TEX7 = 00 00 00 0B&lt;br /&gt;
** GX_TG_TEXCOORD0 = 00 00 00 0C&lt;br /&gt;
** GX_TG_TEXCOORD1 = 00 00 00 0D&lt;br /&gt;
** GX_TG_TEXCOORD2 = 00 00 00 0E&lt;br /&gt;
** GX_TG_TEXCOORD3 = 00 00 00 0F&lt;br /&gt;
** GX_TG_TEXCOORD4 = 00 00 00 10&lt;br /&gt;
** GX_TG_TEXCOORD5 = 00 00 00 11&lt;br /&gt;
** GX_TG_TEXCOORD6 = 00 00 00 12&lt;br /&gt;
** GX_TG_COLOR0 = 00 00 00 13&lt;br /&gt;
** GX_TG_COLOR1 = 00 00 00 14&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;AlphaOperationEnum&#039;&#039;&#039;:&lt;br /&gt;
** NONE = 0X&lt;br /&gt;
** ALPHAMASK = 1X&lt;br /&gt;
** BLEND = 2X&lt;br /&gt;
** MODULATE = 3X&lt;br /&gt;
** REPLACE = 4X&lt;br /&gt;
** PASS = 5X&lt;br /&gt;
** ADD = 6X&lt;br /&gt;
** SUB = 7X&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ColorOperationEnum&#039;&#039;&#039;:&lt;br /&gt;
** NONE = X0&lt;br /&gt;
** ALPHA_MASK = X1&lt;br /&gt;
** RGB_MASK = X2&lt;br /&gt;
** BLEND = X3&lt;br /&gt;
** MODULATE = X4&lt;br /&gt;
** REPLACE = X5&lt;br /&gt;
** PASS = X6&lt;br /&gt;
** ADD = X7&lt;br /&gt;
** SUB = X8&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;CoordTypeEnum&#039;&#039;&#039;:&lt;br /&gt;
** UV = X0&lt;br /&gt;
** REFLECTION = X1&lt;br /&gt;
** HILIGHT = X2&lt;br /&gt;
** SHADOW = X3&lt;br /&gt;
** TOON = X4&lt;br /&gt;
** GRADATION = X5&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MagFilterEnum&#039;&#039;&#039;:&lt;br /&gt;
** GX_NEAR = 00 00 00 00&lt;br /&gt;
** GX_LINEAR = 00 00 00 01&lt;br /&gt;
** GX_NEAR_MIP_NEAR = 00 00 00 02&lt;br /&gt;
** GX_LIN_MIP_NEAR = 00 00 00 03&lt;br /&gt;
** GX_NEAR_MIP_LIN = 00 00 00 04&lt;br /&gt;
** GX_LIN_MIP_LIN = 00 00 00 05&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;WrapEnum&#039;&#039;&#039;:&lt;br /&gt;
** CLAMP = 00 00 00 00&lt;br /&gt;
** REPEAT = 00 00 00 01&lt;br /&gt;
** MIRROR = 00 00 00 02&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Material&#039;&#039;&#039; : (0x14 octets) ===&lt;br /&gt;
* 1 octets - AMB_R - (ambient)&lt;br /&gt;
* 1 octets - AMB_G&lt;br /&gt;
* 1 octets - AMB_B&lt;br /&gt;
* 1 octets - AMB_A&lt;br /&gt;
* 1 octets - DIF_R - (diffuse)&lt;br /&gt;
* 1 octets - DIF_G&lt;br /&gt;
* 1 octets - DIF_B&lt;br /&gt;
* 1 octets - DIF_A&lt;br /&gt;
* 1 octets - SPC_R - (specular)&lt;br /&gt;
* 1 octets - SPC_G&lt;br /&gt;
* 1 octets - SPC_B&lt;br /&gt;
* 1 octets - SPC_A&lt;br /&gt;
* 4 octets - float - alpha&lt;br /&gt;
* 4 octets - float - shininess&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;PObj&#039;&#039;&#039; : (0x18 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - next_offset - pobj&lt;br /&gt;
* 4 octets - vertex_attr_list_offset&lt;br /&gt;
* 2 octets - Flags - PObjFlagsEnum&lt;br /&gt;
* 2 octets - display_list_size - number of 0x20 (32) byte blocks occupied by display list data&lt;br /&gt;
* 4 octets - display_list_offset&lt;br /&gt;
* 4 octets - weight_list_offset - ? verifier qu&#039;on retrouve bien le tableau d&#039;envelope_weights à cet offset&lt;br /&gt;
&lt;br /&gt;
Comme l&#039;indique next_offset, il s&#039;agit d&#039;une liste de meshs à afficher pour un material donné référencé par un dobj. PObj contient les offsets de vertex attributes / display list / joint weight list ce qui suffit et permet d’interpréter et traiter les coordonnées de vertices, normals &amp;amp; textures.&lt;br /&gt;
&lt;br /&gt;
Les attributs vertex sont les plus important - les parametres specifiés contrôlent tout : du format, de la taille des données de chaque vertex, normal et coordonnées de textures et comment ces valeurs sont dimensionnées (scaled) par rapport à la présence et la taille de chaque valeur d&#039;index qui apparaît dans la display list information.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PObjFlagsEnum&#039;&#039;&#039; :&lt;br /&gt;
** Inconnu0 = 00 01&lt;br /&gt;
** Inconnu1 = 00 02&lt;br /&gt;
** ANIM = 00 08&lt;br /&gt;
** SHAPE_ANIM = 10 00&lt;br /&gt;
** ENVELOPE = 20 00&lt;br /&gt;
** CULLBACK = 40 00&lt;br /&gt;
** CULLFRONT = 80 00&lt;br /&gt;
&lt;br /&gt;
=== EnvelopeWeights : (0x? octets) ===&lt;br /&gt;
* 4 octets - envelope_count&lt;br /&gt;
* [envelope_count]:&lt;br /&gt;
** 4 octets - float - weight&lt;br /&gt;
** 4 octets - pad ?&lt;br /&gt;
* 4 octets - jobj_list_offset&lt;br /&gt;
&lt;br /&gt;
=== not verified yet ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;IMAGE_HEADER&#039;&#039;&#039; :&lt;br /&gt;
** 4 octets - image_offset - image data&lt;br /&gt;
** 2 octets - width&lt;br /&gt;
** 2 octets - height&lt;br /&gt;
** 4 octets - image_format&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PALETTE_HEADER&#039;&#039;&#039; : (0x10)&lt;br /&gt;
** 4 octets - palette_offset - palette data&lt;br /&gt;
** 4 octets - palette_format&lt;br /&gt;
** 4 octets - Inconnu&lt;br /&gt;
** 2 octets - color_count&lt;br /&gt;
** 2 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
image_offset et palette_offset sont souvent partagés par plusieurs textures - savoir ça permet de retrouver toutes les informations sur les images des textures (largeur, hauteur, format), ainsi que le format et le nombre de couleurs de la palette/tlut.&lt;br /&gt;
&lt;br /&gt;
Le format d&#039;image ne détermine pas le nombre total de couleurs de la palette qu&#039;elle utilisent. Par exemple, une image indexée sur 8 bits aurait un maximum de 256 couleurs mais seulement 136 ou 221 couleurs sont actuellement utilisées. De la sorte, la palette n&#039;utilisera pas la taille totale qu&#039;elle devrait utiliser.&lt;br /&gt;
&lt;br /&gt;
Les images suivent la structure généralement utilisée par la GameCube :&lt;br /&gt;
&lt;br /&gt;
IMAGE FORMATS :&lt;br /&gt;
* case 0: //i4&lt;br /&gt;
* case 1: //i8&lt;br /&gt;
* case 2: //i4a4&lt;br /&gt;
* case 3: //i8a8&lt;br /&gt;
* case 4: //r5g6b5&lt;br /&gt;
* case 5: //rgb5a3&lt;br /&gt;
* case 6: //r8g8b8a8&lt;br /&gt;
* case 8: //index4&lt;br /&gt;
* case 9: //index8&lt;br /&gt;
* case 0xa: //index14x2&lt;br /&gt;
* case 0xe: //s3tc1&lt;br /&gt;
&lt;br /&gt;
Les formats indexés utilisent aussi les informations de palettes/tlut et les données peuvent apparaître en plusieurs formats :&lt;br /&gt;
&lt;br /&gt;
PALETTE FORMATS :&lt;br /&gt;
* case 0: //ia8&lt;br /&gt;
* case 1: //r5g6b5&lt;br /&gt;
* case 2: //rgb5a3&lt;br /&gt;
&lt;br /&gt;
---&amp;gt; &amp;quot;Joint Data - Accessing Geometry, Mesh, and Vertex Attributes&amp;quot; https://smashboards.com/threads/melee-dat-format.292603/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
trad a revoir à partir de là, il faut investiguer le rendu 3D sur GameCube pour mieux comprendre&lt;br /&gt;
&lt;br /&gt;
// déclaration d&#039;un vertex et attribute information&lt;br /&gt;
// attr, type, cnt, data_type, flags?, file_offset&lt;br /&gt;
* ATTR_DATA&lt;br /&gt;
** 4 octets - GXAttr     vtx_attr_offset - attr&lt;br /&gt;
** 4 octets - GXAttrType vtx_attr_type   - index_type&lt;br /&gt;
** 4 octets - GXCompCnt  comp_cnt        - cnt&lt;br /&gt;
** 4 octets - GXCompType comp_type       - data_type	&lt;br /&gt;
** 1 octets - scale&lt;br /&gt;
** 1 octets - Inconnu&lt;br /&gt;
** 2 octets - vtx_stride&lt;br /&gt;
** 2 octets - data_offset&lt;br /&gt;
&lt;br /&gt;
vertex_attr_offset pointe sur une liste d&#039;attributs de vertex. Leur nombre n&#039;est pas donné. Les données dans cette structure suivent les informations et les types conçus par l&#039;architecture GameCube/WII et son API. La liste est terminée par une valeur spécifique de vtx_attr qui signale la fin de cette liste. Avec un accès à la doku SDK, il serait fortement conseillé de lire la section à propos des &amp;quot;vertex attributes and other specifications&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
La valeur de vtx_attr determine le type de donnée que cet attribut désigne et peut indiquer un nombre de types natifs utilisés utilisés pour passer les données entre les interfaces logicielles et matérielles.&lt;br /&gt;
&lt;br /&gt;
Les valeures possibles sont les suivantes :&lt;br /&gt;
* enum GXAttr (4 octets)&lt;br /&gt;
** GX_VA_PNMTXIDX = 0,    // position/normal matrix index&lt;br /&gt;
** GX_VA_TEX0MTXIDX,      // texture 0 matrix index&lt;br /&gt;
** GX_VA_TEX1MTXIDX,      // texture 1 matrix index&lt;br /&gt;
** GX_VA_TEX2MTXIDX,      // texture 2 matrix index&lt;br /&gt;
** GX_VA_TEX3MTXIDX,      // texture 3 matrix index&lt;br /&gt;
** GX_VA_TEX4MTXIDX,      // texture 4 matrix index&lt;br /&gt;
** GX_VA_TEX5MTXIDX,      // texture 5 matrix index&lt;br /&gt;
** GX_VA_TEX6MTXIDX,      // texture 6 matrix index&lt;br /&gt;
** GX_VA_TEX7MTXIDX,      // texture 7 matrix index&lt;br /&gt;
** GX_VA_POS      = 9,    // position&lt;br /&gt;
** GX_VA_NRM,             // normal&lt;br /&gt;
** GX_VA_CLR0,            // color 0&lt;br /&gt;
** GX_VA_CLR1,            // color 1&lt;br /&gt;
** GX_VA_TEX0,            // input texture coordinate 0&lt;br /&gt;
** GX_VA_TEX1,            // input texture coordinate 1&lt;br /&gt;
** GX_VA_TEX2,            // input texture coordinate 2&lt;br /&gt;
** GX_VA_TEX3,            // input texture coordinate 3&lt;br /&gt;
** GX_VA_TEX4,            // input texture coordinate 4&lt;br /&gt;
** GX_VA_TEX5,            // input texture coordinate 5&lt;br /&gt;
** GX_VA_TEX6,            // input texture coordinate 6&lt;br /&gt;
** GX_VA_TEX7,            // input texture coordinate 7&lt;br /&gt;
&lt;br /&gt;
** GX_POS_MTX_ARRAY,      // position matrix array pointer&lt;br /&gt;
** GX_NRM_MTX_ARRAY,      // normal matrix array pointer&lt;br /&gt;
** GX_TEX_MTX_ARRAY,      // texture matrix array pointer&lt;br /&gt;
** GX_LIGHT_ARRAY,        // light parameter array pointer&lt;br /&gt;
** GX_VA_NBT,             // normal, bi-normal, tangent &lt;br /&gt;
** GX_VA_MAX_ATTR,        // maximum number of vertex attributes&lt;br /&gt;
&lt;br /&gt;
** GX_VA_NULL     = 0xff  // NULL attribute (to mark end of lists)&lt;br /&gt;
&lt;br /&gt;
Toutes les données nécessaires pour représenter un mesh peuvent être spécifiées et indexées d&#039;une manière ou d&#039;une autre. De même, GX_VA_TEX0MTXIDX, GX_VA_CLR0, et autres sont aussi possibles - les valeurs les plus fréquentes dans les données SSBM sont : GX_VA_PNMTXIDX, GX_VA_POS, GX_VA_NRM, et GX_VA_TEX0. Which is to be expected as joint matrices, vertex positions/normals, and texture coordinates respectively are probably the most basic of elements needed to display a texture mesh, whether static or animated.&lt;br /&gt;
&lt;br /&gt;
When the value of vtx_attr == GX_VA_NULL (0xFF), the end of the vertex attribute array has been reached.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The vtx_attr_type values is actually associated with how the value is indexed, and can thus also determine the size of the index value within the display list data.&lt;br /&gt;
&lt;br /&gt;
* 4 octets - enum GXAttrType&lt;br /&gt;
** GX_NONE    = 0,&lt;br /&gt;
** GX_DIRECT,&lt;br /&gt;
** GX_INDEX8,&lt;br /&gt;
** GX_INDEX16&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Structures COLL_DATA : (données de collisions)&lt;br /&gt;
** 4 octets - vertex_offset (2 float par entrée correspondant à des données 2D probablement)&lt;br /&gt;
** 4 octets - vertex_count&lt;br /&gt;
** 4 octets - index_offset&lt;br /&gt;
** 4 octets - index_count&lt;br /&gt;
** 4 octets [5] - tableau inconnu&lt;br /&gt;
*** 2 octets - index_start&lt;br /&gt;
*** 2 octets - index_count&lt;br /&gt;
** 4 octets - Inconnu&lt;br /&gt;
** 4 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
[[Category:Implementations]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=Models&amp;diff=1529</id>
		<title>Models</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=Models&amp;diff=1529"/>
		<updated>2023-10-07T13:36:09Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: /* Gotcha Force Models */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
{{Research | 2| Researches on headers / bodies structures are partially achieved. }}&lt;br /&gt;
&lt;br /&gt;
== Gotcha Force Models ==&lt;br /&gt;
&lt;br /&gt;
Gotcha Force models work as those from the game Super Smash Bros Melee (SSBM) investigated by its [https://smashboards.com/threads/melee-dat-format.292603/ community].&lt;br /&gt;
&lt;br /&gt;
A model is a file format that organizes objects and resources serialized to be used by the &#039;&#039;&#039;H&#039;&#039;&#039;al &#039;&#039;&#039;S&#039;&#039;&#039;ys&#039;&#039;&#039;D&#039;&#039;&#039;olphin (&#039;&#039;&#039;HSD&#039;&#039;&#039;) library. The HSD library is used in several Capcom games. These are graphics materials structured in an hierarchical way.&lt;br /&gt;
&lt;br /&gt;
Ce sont des ressources graphiques structurées de manière hiérarchique. La présence de certaines images dans les modèles montrent à priori l&#039;utilisation de la technique [https://learn.foundry.com/modo/901/content/help/pages/shading_lighting/shader_items/matcap.html matcap].&lt;br /&gt;
Par ailleurs, la librairie prendrait ses sources sur le SDK Dolphin, tel que GX ou encore MTX.&lt;br /&gt;
&lt;br /&gt;
=== Fichiers concernés ===&lt;br /&gt;
L&#039;ensemble des fichiers ayant dans leur titre &#039;&#039;&#039;_mdl&#039;&#039;&#039; sont des fichiers modèles correspondant au format décrit dans cette page. On notera les fichiers [[ARZ (Gotcha Force)|.arz]] qui sont des modèles compressés. Le fichier collision.arc et les fichiers tdc00.arc à tdc09.arc sont aussi des modèles.&lt;br /&gt;
&lt;br /&gt;
Les fichiers modèles se retrouvent aussi dans les pzz des borgs (plxxxx.pzz) en position 004 à 009.&lt;br /&gt;
&lt;br /&gt;
=== HSDRaw ===&lt;br /&gt;
HSDRaw, un éditeur 3D dotnet de ce format est instable sur mon Windows (algoflash). Il est cependant prouvé qu&#039;un edit des _mdl pour commencer à l&#039;offset 0x100 - après le préambule - permet de visualiser le fichier sur HSDRaw et d&#039;avoir le rendu 3D du Borg (click sur le premier dossier JOBJ - puis le JOBJ dedans et double click sur le nœud en violet). Cela devrait aussi permettre d&#039;éditer certaines propriétés ?&lt;br /&gt;
&lt;br /&gt;
== Structure générale ==&lt;br /&gt;
Le format des modèles se découpe en plusieurs blocks. Le préambule fait 0x100 octets au tout début du fichier. Il est souvent absent. Toutes les valeurs sont en unsigned big endian, et le pad est en Nulls bytes (\x00). 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&#039;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&#039;il est peu probable qu&#039;un offset pointe au milieu d&#039;une structure.&lt;br /&gt;
&lt;br /&gt;
L&#039;ensemble des fichiers répondant à ce format on un seul root_node de type SObj (Scene data).&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Préambule&#039;&#039;&#039; : (0x100 octets / 0 octets) ===&lt;br /&gt;
* 4 octets - hsd_header_offset=0x100 (toujours)&lt;br /&gt;
* 4 octets - bones_flags_table_offset=0x20 (toujours) - offset de la liste des flags des armatures&lt;br /&gt;
* 4 octets - bones_table_offset=0xC0 (toujours) - offset de la liste des armatures&lt;br /&gt;
* 20 octets - Pad - (toujours)&lt;br /&gt;
* 4 octets [32] - Inconnu (flags des armatures ?) 1 octet par flag ?&lt;br /&gt;
* 32 octets - Pad - (toujours)&lt;br /&gt;
* 32 octets - armatures ?&lt;br /&gt;
* 32 octets - Pad - (toujours)&lt;br /&gt;
=== &#039;&#039;&#039;HSD Header&#039;&#039;&#039; - (0x20 octets) ===&lt;br /&gt;
* 4 octets - Taille totale du fichier&lt;br /&gt;
* 4 octets - Taille du Data block&lt;br /&gt;
* 4 octets - Nombre d&#039;entrée dans la Table de relocs&lt;br /&gt;
* 4 octets - root0_count&lt;br /&gt;
* 4 octets - root1_count&lt;br /&gt;
* 12 octets - Pad - (toujours)&lt;br /&gt;
=== &#039;&#039;&#039;Data block&#039;&#039;&#039; : ===&lt;br /&gt;
* JOBJ, etc. -&amp;gt; Ces structures sont détaillée plus loin ci-dessous.&lt;br /&gt;
=== &#039;&#039;&#039;Relocation Table&#039;&#039;&#039; : ===&lt;br /&gt;
* Tableau d&#039;offsets de 4 octets - Offsets des structures dans le DB.&lt;br /&gt;
=== &#039;&#039;&#039;Root Nodes (2)&#039;&#039;&#039; : ===&lt;br /&gt;
* Tableau de taille 8 * root0_count&lt;br /&gt;
** 4 octets - root_offset - relatif au DB&lt;br /&gt;
** 4 octets - string_table_offset - relatif à la StringTable&lt;br /&gt;
* Tableau de taille 8 * root1_count&lt;br /&gt;
** 4 octets - root_offset - relatif au DB&lt;br /&gt;
** 4 octets - string_table_offset - relatif à la StringTable&lt;br /&gt;
=== &#039;&#039;&#039;String Table&#039;&#039;&#039; : ===&lt;br /&gt;
* Suite de strings terminées par Null au nombre de root0_count + root1_count&lt;br /&gt;
&lt;br /&gt;
== Structures rencontrées dans le DB ==&lt;br /&gt;
Note : l&#039;arborescence est cumulative sur les transformations pour les relations parents-&amp;gt;enfants&lt;br /&gt;
&lt;br /&gt;
Les Noeuds Racine qui ont pour nom &amp;quot;scene_data&amp;quot; pointent sur un SObj :&lt;br /&gt;
=== &#039;&#039;&#039;SObj&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
* 4 octets - JObjDescs_offsets_list_offset&lt;br /&gt;
* 4 octets - Cameras_list_offset&lt;br /&gt;
* 4 octets - Lights_list_offset&lt;br /&gt;
* 4 octets - Fog&lt;br /&gt;
&lt;br /&gt;
&amp;quot;scene_data&amp;quot; == nom du nœud racine&lt;br /&gt;
JObjDescs_offsets_list_offset, cameras.. pointent sur une liste d&#039;offsets terminée par 4 octets à 0x00.&lt;br /&gt;
lights_list_offset pointe sur des couples (4 octets - LObj_offset ; 4 octets - light_anim_pointer_offset)&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;JObjDesc&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
* 4 octets - root_joint_offset - JObj&lt;br /&gt;
* 4 octets - joint_animations_offset - ?&lt;br /&gt;
* 4 octets - material_animations_offset - ?&lt;br /&gt;
* 4 octets - shape_animations_offset - ?&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;CObj&#039;&#039;&#039; : (0x38 octets) ===&lt;br /&gt;
* 4 octets - flags&lt;br /&gt;
* 4 octets - projection_type - ProjectionTypeEnum&lt;br /&gt;
* 2 octets - viewport_left&lt;br /&gt;
* 2 octets - viewport_right&lt;br /&gt;
* 2 octets - viewport_top&lt;br /&gt;
* 2 octets - viewport_bottom&lt;br /&gt;
* 4 octets - proj_width&lt;br /&gt;
* 4 octets - proj_height&lt;br /&gt;
* 4 octets - eye_offset - WObj&lt;br /&gt;
* 4 octets - target_offset - WObj&lt;br /&gt;
* 4 octets - roll&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - float - near_clip&lt;br /&gt;
* 4 octets - float - far_clip&lt;br /&gt;
* 4 octets - float - field_of_view&lt;br /&gt;
* 4 octets - float - aspect&lt;br /&gt;
Camera object. Note : pour frustrum ou ortho, la structure est différente.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ProjectionTypeEnum&#039;&#039;&#039;:&lt;br /&gt;
** PERSPECTIVE = 1&lt;br /&gt;
** FRUSTRUM = 2&lt;br /&gt;
** ORTHO = 3&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;WObj&#039;&#039;&#039;: (0x14 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - float - v1&lt;br /&gt;
* 4 octets - float - v2&lt;br /&gt;
* 4 octets - float - v3&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
eye / target&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;LObj&#039;&#039;&#039; : (0x1c octets) ===&lt;br /&gt;
* 4 octets - class_name&lt;br /&gt;
* 4 octets - next_offset&lt;br /&gt;
* 2 octets - flags - LObjFlagsEnum&lt;br /&gt;
* 2 octets - attenuation_flags - LObjAttenuationFlagsEnum&lt;br /&gt;
* 1 octet - color_r&lt;br /&gt;
* 1 octet - color_g&lt;br /&gt;
* 1 octet - color_b&lt;br /&gt;
* 1 octet - color_alpha&lt;br /&gt;
* 4 octets - lobj_point_offset - position&lt;br /&gt;
* 4 octets - infinite_data&lt;br /&gt;
* 4 octets - point_spot_data&lt;br /&gt;
light&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;LObjFlagsEnum&#039;&#039;&#039; :&lt;br /&gt;
** LOBJ_AMBIANT = 00 00&lt;br /&gt;
** LOBJ_INFINITE = 00 01&lt;br /&gt;
** LOBJ_POINT = 00 02&lt;br /&gt;
** LOBJ_SPOT = 00 03&lt;br /&gt;
** LOBJ_DIFFUSE = 00 04&lt;br /&gt;
** LOBJ_SPECULAR = 00 08&lt;br /&gt;
** LOBJ_ALPHA = 00 10&lt;br /&gt;
** LOBJ_HIDDEN = 00 20&lt;br /&gt;
** LOBJ_RAW_PARAM = 00 40&lt;br /&gt;
** LOBJ_DIFF_DIRTY = 00 80&lt;br /&gt;
** LOBJ_SPEC_DIRTY = 01 00&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;LObjAttenuationFlagsEnum&#039;&#039;&#039; :&lt;br /&gt;
** LOBJ_LIGHT_ATTN_NONE = 00 00&lt;br /&gt;
** LOBJ_LIGHT_ATTN = 00 01&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;LObjPoint&#039;&#039;&#039; : (0x14 octets) ===&lt;br /&gt;
* 4 octets - class_name&lt;br /&gt;
* 4 octets - float - x&lt;br /&gt;
* 4 octets - float - y&lt;br /&gt;
* 4 octets - float - z&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;LightAnimPointer&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
** 4 octets - next_offset - (LightAnimPointer)&lt;br /&gt;
** 4 octets - light_anim - ?&lt;br /&gt;
** 4 octets - position_anim - ?&lt;br /&gt;
** 4 octets - interst_anim - ?&lt;br /&gt;
Bugs dans HSDRaw - à tester&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;JObj&#039;&#039;&#039; : (0x40 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - flags&lt;br /&gt;
* 4 octets - child_offset (JObj)&lt;br /&gt;
* 4 octets - next_offset (JObj)&lt;br /&gt;
* 4 octets - dobj_offset (DObj)&lt;br /&gt;
* 4 octets [3] - float3 - rotation_xyz&lt;br /&gt;
* 4 octets [3] - float3 - scale_xyz&lt;br /&gt;
* 4 octets [3] - float3 - translation_xyz&lt;br /&gt;
* 4 octets - inverse_world_transform_offset (inverse world transform = Matrice de 4x3)&lt;br /&gt;
* 4 octets - robj_offset&lt;br /&gt;
&lt;br /&gt;
Pointé par les listes dans Root Node scene_data.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;JObjFlagsEnum&#039;&#039;&#039; : (peuvent se cumuler)&lt;br /&gt;
** NULL = 00 00 00 00&lt;br /&gt;
** SKELETON = 00 00 00 01&lt;br /&gt;
** SKELETON_ROOT = 00 00 00 02&lt;br /&gt;
** ENVELOPE_MODEL = 00 00 00 04&lt;br /&gt;
** CLASSICAL_SCALING = 00 00 00 08&lt;br /&gt;
** HIDDEN = 00 00 00 10&lt;br /&gt;
** PTCL = 00 00 00 20&lt;br /&gt;
** MTX_DIRTY = 00 00 00 40&lt;br /&gt;
** LIGHTING = 00 00 00 80&lt;br /&gt;
** TEXGEN = 00 00 01 00&lt;br /&gt;
** BILLBOARD = 00 00 02 00&lt;br /&gt;
** VBILLBOARD = 00 00 04 00&lt;br /&gt;
** HBILLBOARD = 00 00 06 00&lt;br /&gt;
** RBILLBOARD = 00 00 08 00&lt;br /&gt;
** INSTANCE = 00 00 10 00&lt;br /&gt;
** PBILLBOARD = 00 00 20 00&lt;br /&gt;
** SPLINE = 00 00 40 00&lt;br /&gt;
** FLIP_IK = 00 00 80 00&lt;br /&gt;
** SPECULAR = 00 01 00 00&lt;br /&gt;
** USE_QUATERNION = 00 02 00 00&lt;br /&gt;
** OPA = 00 04 00 00&lt;br /&gt;
** XLU = 00 08 00 00&lt;br /&gt;
** TEXEDGE = 00 10 00 00&lt;br /&gt;
** JOINT1 = 00 20 00 00&lt;br /&gt;
** JOINT2 = 00 40 00 00&lt;br /&gt;
** EFFECTOR = 00 60 00 00&lt;br /&gt;
** USER_DEFINED_MTX = 00 80 00 00&lt;br /&gt;
** MTX_INDEPEND_PARENT = 01 00 00 00&lt;br /&gt;
** MTX_INDEPEND_SRT = 02 00 00 00&lt;br /&gt;
** MTX_SCALE_COMPENSATE = 04 00 00 00&lt;br /&gt;
** ROOT_OPA = 10 00 00 00&lt;br /&gt;
** ROOT_XLU = 20 00 00 00&lt;br /&gt;
** ROOT_TEXEDGE = 40 00 00 00&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;InverseWorldTransform&#039;&#039;&#039; : (0x30 octets) ===&lt;br /&gt;
* 4 octets - float - M11&lt;br /&gt;
* 4 octets - float - M12&lt;br /&gt;
* 4 octets - float - M13&lt;br /&gt;
* 4 octets - float - M14&lt;br /&gt;
* 4 octets - float - M21&lt;br /&gt;
* 4 octets - float - M22&lt;br /&gt;
* 4 octets - float - M23&lt;br /&gt;
* 4 octets - float - M24&lt;br /&gt;
* 4 octets - float - M31&lt;br /&gt;
* 4 octets - float - M32&lt;br /&gt;
* 4 octets - float - M33&lt;br /&gt;
* 4 octets - float - M34&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;DObj&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - next_offset - prochain DOBJ&lt;br /&gt;
* 4 octets - mobj_offset - material offset&lt;br /&gt;
* 4 octets - pobj_offset - mesh offset&lt;br /&gt;
Liste chaînée qui permet de récupérer l&#039;ensemble des materials &amp;amp; mesh pour le JObj auquel il est lié.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;MObj&#039;&#039;&#039; : (0x18 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - render_flags - RenderFlagsEnum&lt;br /&gt;
* 4 octets - tobj_offset - offset de texture - peut être invalide s&#039;il n&#039;y a pas de texture pour le material&lt;br /&gt;
* 4 octets - material_offset - couleurs des materials ?&lt;br /&gt;
* 8 octets - PEDesc ?&lt;br /&gt;
&lt;br /&gt;
Contient les textures &amp;amp; informations sur les couleurs des Materials.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;RenderFlagsEnum&#039;&#039;&#039; : (se cumulent)&lt;br /&gt;
** USER = 80 00 00 00&lt;br /&gt;
** CONSTANT = 00 00 00 01&lt;br /&gt;
** VERTEX = 00 00 00 02&lt;br /&gt;
** BOTH = 00 00 00 03&lt;br /&gt;
** DIFFUSE = 00 00 00 04&lt;br /&gt;
** SPECULAR = 00 00 00 08&lt;br /&gt;
** TEX0 = 00 00 00 10&lt;br /&gt;
** TEX1 = 00 00 00 20&lt;br /&gt;
** TEX2 = 00 00 00 40&lt;br /&gt;
** TEX3 = 00 00 00 80&lt;br /&gt;
** TEX4 = 00 00 01 00&lt;br /&gt;
** TEX5 = 00 00 02 00&lt;br /&gt;
** TEX6 = 00 00 04 00&lt;br /&gt;
** TEX7 = 00 00 08 00&lt;br /&gt;
** TOON = 00 00 10 00&lt;br /&gt;
** ALPHA_MAT = 00 00 20 00&lt;br /&gt;
** ALPHA_VTX = 00 00 40 00&lt;br /&gt;
** ALPHA_BOTH = 00 00 60 00&lt;br /&gt;
** ZOFST = 01 00 00 00&lt;br /&gt;
** EFFECT = 02 00 00 00&lt;br /&gt;
** SHADOW = 04 00 00 00&lt;br /&gt;
** ZMODE_ALWAYS = 08 00 00 00&lt;br /&gt;
** DF_ALL = 10 00 00 00&lt;br /&gt;
** NO_ZUPDATE = 20 00 00 00&lt;br /&gt;
** XLU = 40 00 00 00&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;TObj&#039;&#039;&#039; : (0x5c octets) ===&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - tex_map_id - TexMapIdEnum&lt;br /&gt;
* 4 octets - gx_tex_gen_src - GXTexGenSrcEnum&lt;br /&gt;
* 4 octets - float - rx&lt;br /&gt;
* 4 octets - float - ry&lt;br /&gt;
* 4 octets - float - rz&lt;br /&gt;
* 4 octets - float - sx&lt;br /&gt;
* 4 octets - float - sy&lt;br /&gt;
* 4 octets - float - sz&lt;br /&gt;
* 4 octets - float - tx&lt;br /&gt;
* 4 octets - float - ty&lt;br /&gt;
* 4 octets - float - tz&lt;br /&gt;
* 4 octets - wrap_s - WrapEnum&lt;br /&gt;
* 4 octets - wrap_t - WrapEnum&lt;br /&gt;
* 1 octet - w_scale&lt;br /&gt;
* 1 octet - h_scale&lt;br /&gt;
* 2 octets - ?&lt;br /&gt;
* 1 octets - bump_map - (False = 00 ; True = 01)&lt;br /&gt;
* 4 bits - alpha_operation - AlphaOperationEnum&lt;br /&gt;
* 4 bits - color_operation - ColorOperationEnum&lt;br /&gt;
* 1 octet - shadow_lightmap - (False = 00 ; True = 01) (2 octets avec une Enum lightmap limite)&lt;br /&gt;
* 1 bit - ext_lightmap - (False = 0 ; True = 1)&lt;br /&gt;
* 1 bit - ambiant_lightmap - (False = 0 ; True = 1) &lt;br /&gt;
* 1 bit - specular_lightmap - (False = 0 ; True = 1)&lt;br /&gt;
* 1 bit - diffuse_lightmap (False = 0 ; True = 1)&lt;br /&gt;
* 4 bits - coord_type - CoordTypeEnum&lt;br /&gt;
* 4 octets - float - blending - utilisé quand color_operation ou alpha_operation == BLEND&lt;br /&gt;
* 4 octets - mag_filter - MagFilterEnum&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
Informations de Textures. Le TObj contient des informations sur les paramètres d&#039;environnement de textures utilisés pour le rendu graphique ainsi que les offset de l&#039;image et des données de la palette utilisés pour cette texture. Le plus important ici, c&#039;est l&#039;offset d&#039;image et la palette/tlut - si l&#039;image n&#039;est pas indexée (RGBA, CMPR, etc.) alors la structure de description palette/tlut n&#039;est pas utilisée.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;TexMapIdEnum&#039;&#039;&#039; :&lt;br /&gt;
** GX_TEXMAP0 = 00 00 00 00&lt;br /&gt;
** GX_TEXMAP1 = 00 00 00 01&lt;br /&gt;
** GX_TEXMAP2 = 00 00 00 02&lt;br /&gt;
** GX_TEXMAP3 = 00 00 00 03&lt;br /&gt;
** GX_TEXMAP4 = 00 00 00 04&lt;br /&gt;
** GX_TEXMAP5 = 00 00 00 05&lt;br /&gt;
** GX_TEXMAP6 = 00 00 00 06&lt;br /&gt;
** GX_TEXMAP7 = 00 00 00 07&lt;br /&gt;
** GX_MAX_TEXMAP = 00 00 00 08&lt;br /&gt;
** GX_TEXMAP_NULL = 00 00 00 09&lt;br /&gt;
** GX_TEXMAP_DISABLE = 00 00 00 0A&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;GXTexGenSrcEnum&#039;&#039;&#039; :&lt;br /&gt;
** GX_TG_POS = 00 00 00 00&lt;br /&gt;
** GX_TG_NRM = 00 00 00 01&lt;br /&gt;
** GX_TG_BINRM = 00 00 00 02&lt;br /&gt;
** GX_TG_TANGENT = 00 00 00 03&lt;br /&gt;
** GX_TG_TEX0 = 00 00 00 04&lt;br /&gt;
** GX_TG_TEX1 = 00 00 00 05&lt;br /&gt;
** GX_TG_TEX2 = 00 00 00 06&lt;br /&gt;
** GX_TG_TEX3 = 00 00 00 07&lt;br /&gt;
** GX_TG_TEX4 = 00 00 00 08&lt;br /&gt;
** GX_TG_TEX5 = 00 00 00 09&lt;br /&gt;
** GX_TG_TEX6 = 00 00 00 0A&lt;br /&gt;
** GX_TG_TEX7 = 00 00 00 0B&lt;br /&gt;
** GX_TG_TEXCOORD0 = 00 00 00 0C&lt;br /&gt;
** GX_TG_TEXCOORD1 = 00 00 00 0D&lt;br /&gt;
** GX_TG_TEXCOORD2 = 00 00 00 0E&lt;br /&gt;
** GX_TG_TEXCOORD3 = 00 00 00 0F&lt;br /&gt;
** GX_TG_TEXCOORD4 = 00 00 00 10&lt;br /&gt;
** GX_TG_TEXCOORD5 = 00 00 00 11&lt;br /&gt;
** GX_TG_TEXCOORD6 = 00 00 00 12&lt;br /&gt;
** GX_TG_COLOR0 = 00 00 00 13&lt;br /&gt;
** GX_TG_COLOR1 = 00 00 00 14&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;AlphaOperationEnum&#039;&#039;&#039;:&lt;br /&gt;
** NONE = 0X&lt;br /&gt;
** ALPHAMASK = 1X&lt;br /&gt;
** BLEND = 2X&lt;br /&gt;
** MODULATE = 3X&lt;br /&gt;
** REPLACE = 4X&lt;br /&gt;
** PASS = 5X&lt;br /&gt;
** ADD = 6X&lt;br /&gt;
** SUB = 7X&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ColorOperationEnum&#039;&#039;&#039;:&lt;br /&gt;
** NONE = X0&lt;br /&gt;
** ALPHA_MASK = X1&lt;br /&gt;
** RGB_MASK = X2&lt;br /&gt;
** BLEND = X3&lt;br /&gt;
** MODULATE = X4&lt;br /&gt;
** REPLACE = X5&lt;br /&gt;
** PASS = X6&lt;br /&gt;
** ADD = X7&lt;br /&gt;
** SUB = X8&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;CoordTypeEnum&#039;&#039;&#039;:&lt;br /&gt;
** UV = X0&lt;br /&gt;
** REFLECTION = X1&lt;br /&gt;
** HILIGHT = X2&lt;br /&gt;
** SHADOW = X3&lt;br /&gt;
** TOON = X4&lt;br /&gt;
** GRADATION = X5&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MagFilterEnum&#039;&#039;&#039;:&lt;br /&gt;
** GX_NEAR = 00 00 00 00&lt;br /&gt;
** GX_LINEAR = 00 00 00 01&lt;br /&gt;
** GX_NEAR_MIP_NEAR = 00 00 00 02&lt;br /&gt;
** GX_LIN_MIP_NEAR = 00 00 00 03&lt;br /&gt;
** GX_NEAR_MIP_LIN = 00 00 00 04&lt;br /&gt;
** GX_LIN_MIP_LIN = 00 00 00 05&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;WrapEnum&#039;&#039;&#039;:&lt;br /&gt;
** CLAMP = 00 00 00 00&lt;br /&gt;
** REPEAT = 00 00 00 01&lt;br /&gt;
** MIRROR = 00 00 00 02&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Material&#039;&#039;&#039; : (0x14 octets) ===&lt;br /&gt;
* 1 octets - AMB_R - (ambient)&lt;br /&gt;
* 1 octets - AMB_G&lt;br /&gt;
* 1 octets - AMB_B&lt;br /&gt;
* 1 octets - AMB_A&lt;br /&gt;
* 1 octets - DIF_R - (diffuse)&lt;br /&gt;
* 1 octets - DIF_G&lt;br /&gt;
* 1 octets - DIF_B&lt;br /&gt;
* 1 octets - DIF_A&lt;br /&gt;
* 1 octets - SPC_R - (specular)&lt;br /&gt;
* 1 octets - SPC_G&lt;br /&gt;
* 1 octets - SPC_B&lt;br /&gt;
* 1 octets - SPC_A&lt;br /&gt;
* 4 octets - float - alpha&lt;br /&gt;
* 4 octets - float - shininess&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;PObj&#039;&#039;&#039; : (0x18 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - next_offset - pobj&lt;br /&gt;
* 4 octets - vertex_attr_list_offset&lt;br /&gt;
* 2 octets - Flags - PObjFlagsEnum&lt;br /&gt;
* 2 octets - display_list_size - number of 0x20 (32) byte blocks occupied by display list data&lt;br /&gt;
* 4 octets - display_list_offset&lt;br /&gt;
* 4 octets - weight_list_offset - ? verifier qu&#039;on retrouve bien le tableau d&#039;envelope_weights à cet offset&lt;br /&gt;
&lt;br /&gt;
Comme l&#039;indique next_offset, il s&#039;agit d&#039;une liste de meshs à afficher pour un material donné référencé par un dobj. PObj contient les offsets de vertex attributes / display list / joint weight list ce qui suffit et permet d’interpréter et traiter les coordonnées de vertices, normals &amp;amp; textures.&lt;br /&gt;
&lt;br /&gt;
Les attributs vertex sont les plus important - les parametres specifiés contrôlent tout : du format, de la taille des données de chaque vertex, normal et coordonnées de textures et comment ces valeurs sont dimensionnées (scaled) par rapport à la présence et la taille de chaque valeur d&#039;index qui apparaît dans la display list information.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PObjFlagsEnum&#039;&#039;&#039; :&lt;br /&gt;
** Inconnu0 = 00 01&lt;br /&gt;
** Inconnu1 = 00 02&lt;br /&gt;
** ANIM = 00 08&lt;br /&gt;
** SHAPE_ANIM = 10 00&lt;br /&gt;
** ENVELOPE = 20 00&lt;br /&gt;
** CULLBACK = 40 00&lt;br /&gt;
** CULLFRONT = 80 00&lt;br /&gt;
&lt;br /&gt;
=== EnvelopeWeights : (0x? octets) ===&lt;br /&gt;
* 4 octets - envelope_count&lt;br /&gt;
* [envelope_count]:&lt;br /&gt;
** 4 octets - float - weight&lt;br /&gt;
** 4 octets - pad ?&lt;br /&gt;
* 4 octets - jobj_list_offset&lt;br /&gt;
&lt;br /&gt;
=== not verified yet ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;IMAGE_HEADER&#039;&#039;&#039; :&lt;br /&gt;
** 4 octets - image_offset - image data&lt;br /&gt;
** 2 octets - width&lt;br /&gt;
** 2 octets - height&lt;br /&gt;
** 4 octets - image_format&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PALETTE_HEADER&#039;&#039;&#039; : (0x10)&lt;br /&gt;
** 4 octets - palette_offset - palette data&lt;br /&gt;
** 4 octets - palette_format&lt;br /&gt;
** 4 octets - Inconnu&lt;br /&gt;
** 2 octets - color_count&lt;br /&gt;
** 2 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
image_offset et palette_offset sont souvent partagés par plusieurs textures - savoir ça permet de retrouver toutes les informations sur les images des textures (largeur, hauteur, format), ainsi que le format et le nombre de couleurs de la palette/tlut.&lt;br /&gt;
&lt;br /&gt;
Le format d&#039;image ne détermine pas le nombre total de couleurs de la palette qu&#039;elle utilisent. Par exemple, une image indexée sur 8 bits aurait un maximum de 256 couleurs mais seulement 136 ou 221 couleurs sont actuellement utilisées. De la sorte, la palette n&#039;utilisera pas la taille totale qu&#039;elle devrait utiliser.&lt;br /&gt;
&lt;br /&gt;
Les images suivent la structure généralement utilisée par la GameCube :&lt;br /&gt;
&lt;br /&gt;
IMAGE FORMATS :&lt;br /&gt;
* case 0: //i4&lt;br /&gt;
* case 1: //i8&lt;br /&gt;
* case 2: //i4a4&lt;br /&gt;
* case 3: //i8a8&lt;br /&gt;
* case 4: //r5g6b5&lt;br /&gt;
* case 5: //rgb5a3&lt;br /&gt;
* case 6: //r8g8b8a8&lt;br /&gt;
* case 8: //index4&lt;br /&gt;
* case 9: //index8&lt;br /&gt;
* case 0xa: //index14x2&lt;br /&gt;
* case 0xe: //s3tc1&lt;br /&gt;
&lt;br /&gt;
Les formats indexés utilisent aussi les informations de palettes/tlut et les données peuvent apparaître en plusieurs formats :&lt;br /&gt;
&lt;br /&gt;
PALETTE FORMATS :&lt;br /&gt;
* case 0: //ia8&lt;br /&gt;
* case 1: //r5g6b5&lt;br /&gt;
* case 2: //rgb5a3&lt;br /&gt;
&lt;br /&gt;
---&amp;gt; &amp;quot;Joint Data - Accessing Geometry, Mesh, and Vertex Attributes&amp;quot; https://smashboards.com/threads/melee-dat-format.292603/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
trad a revoir à partir de là, il faut investiguer le rendu 3D sur GameCube pour mieux comprendre&lt;br /&gt;
&lt;br /&gt;
// déclaration d&#039;un vertex et attribute information&lt;br /&gt;
// attr, type, cnt, data_type, flags?, file_offset&lt;br /&gt;
* ATTR_DATA&lt;br /&gt;
** 4 octets - GXAttr     vtx_attr_offset - attr&lt;br /&gt;
** 4 octets - GXAttrType vtx_attr_type   - index_type&lt;br /&gt;
** 4 octets - GXCompCnt  comp_cnt        - cnt&lt;br /&gt;
** 4 octets - GXCompType comp_type       - data_type	&lt;br /&gt;
** 1 octets - scale&lt;br /&gt;
** 1 octets - Inconnu&lt;br /&gt;
** 2 octets - vtx_stride&lt;br /&gt;
** 2 octets - data_offset&lt;br /&gt;
&lt;br /&gt;
vertex_attr_offset pointe sur une liste d&#039;attributs de vertex. Leur nombre n&#039;est pas donné. Les données dans cette structure suivent les informations et les types conçus par l&#039;architecture GameCube/WII et son API. La liste est terminée par une valeur spécifique de vtx_attr qui signale la fin de cette liste. Avec un accès à la doku SDK, il serait fortement conseillé de lire la section à propos des &amp;quot;vertex attributes and other specifications&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
La valeur de vtx_attr determine le type de donnée que cet attribut désigne et peut indiquer un nombre de types natifs utilisés utilisés pour passer les données entre les interfaces logicielles et matérielles.&lt;br /&gt;
&lt;br /&gt;
Les valeures possibles sont les suivantes :&lt;br /&gt;
* enum GXAttr (4 octets)&lt;br /&gt;
** GX_VA_PNMTXIDX = 0,    // position/normal matrix index&lt;br /&gt;
** GX_VA_TEX0MTXIDX,      // texture 0 matrix index&lt;br /&gt;
** GX_VA_TEX1MTXIDX,      // texture 1 matrix index&lt;br /&gt;
** GX_VA_TEX2MTXIDX,      // texture 2 matrix index&lt;br /&gt;
** GX_VA_TEX3MTXIDX,      // texture 3 matrix index&lt;br /&gt;
** GX_VA_TEX4MTXIDX,      // texture 4 matrix index&lt;br /&gt;
** GX_VA_TEX5MTXIDX,      // texture 5 matrix index&lt;br /&gt;
** GX_VA_TEX6MTXIDX,      // texture 6 matrix index&lt;br /&gt;
** GX_VA_TEX7MTXIDX,      // texture 7 matrix index&lt;br /&gt;
** GX_VA_POS      = 9,    // position&lt;br /&gt;
** GX_VA_NRM,             // normal&lt;br /&gt;
** GX_VA_CLR0,            // color 0&lt;br /&gt;
** GX_VA_CLR1,            // color 1&lt;br /&gt;
** GX_VA_TEX0,            // input texture coordinate 0&lt;br /&gt;
** GX_VA_TEX1,            // input texture coordinate 1&lt;br /&gt;
** GX_VA_TEX2,            // input texture coordinate 2&lt;br /&gt;
** GX_VA_TEX3,            // input texture coordinate 3&lt;br /&gt;
** GX_VA_TEX4,            // input texture coordinate 4&lt;br /&gt;
** GX_VA_TEX5,            // input texture coordinate 5&lt;br /&gt;
** GX_VA_TEX6,            // input texture coordinate 6&lt;br /&gt;
** GX_VA_TEX7,            // input texture coordinate 7&lt;br /&gt;
&lt;br /&gt;
** GX_POS_MTX_ARRAY,      // position matrix array pointer&lt;br /&gt;
** GX_NRM_MTX_ARRAY,      // normal matrix array pointer&lt;br /&gt;
** GX_TEX_MTX_ARRAY,      // texture matrix array pointer&lt;br /&gt;
** GX_LIGHT_ARRAY,        // light parameter array pointer&lt;br /&gt;
** GX_VA_NBT,             // normal, bi-normal, tangent &lt;br /&gt;
** GX_VA_MAX_ATTR,        // maximum number of vertex attributes&lt;br /&gt;
&lt;br /&gt;
** GX_VA_NULL     = 0xff  // NULL attribute (to mark end of lists)&lt;br /&gt;
&lt;br /&gt;
Toutes les données nécessaires pour représenter un mesh peuvent être spécifiées et indexées d&#039;une manière ou d&#039;une autre. De même, GX_VA_TEX0MTXIDX, GX_VA_CLR0, et autres sont aussi possibles - les valeurs les plus fréquentes dans les données SSBM sont : GX_VA_PNMTXIDX, GX_VA_POS, GX_VA_NRM, et GX_VA_TEX0. Which is to be expected as joint matrices, vertex positions/normals, and texture coordinates respectively are probably the most basic of elements needed to display a texture mesh, whether static or animated.&lt;br /&gt;
&lt;br /&gt;
When the value of vtx_attr == GX_VA_NULL (0xFF), the end of the vertex attribute array has been reached.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The vtx_attr_type values is actually associated with how the value is indexed, and can thus also determine the size of the index value within the display list data.&lt;br /&gt;
&lt;br /&gt;
* 4 octets - enum GXAttrType&lt;br /&gt;
** GX_NONE    = 0,&lt;br /&gt;
** GX_DIRECT,&lt;br /&gt;
** GX_INDEX8,&lt;br /&gt;
** GX_INDEX16&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Structures COLL_DATA : (données de collisions)&lt;br /&gt;
** 4 octets - vertex_offset (2 float par entrée correspondant à des données 2D probablement)&lt;br /&gt;
** 4 octets - vertex_count&lt;br /&gt;
** 4 octets - index_offset&lt;br /&gt;
** 4 octets - index_count&lt;br /&gt;
** 4 octets [5] - tableau inconnu&lt;br /&gt;
*** 2 octets - index_start&lt;br /&gt;
*** 2 octets - index_count&lt;br /&gt;
** 4 octets - Inconnu&lt;br /&gt;
** 4 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
[[Category:Implementations]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=Models&amp;diff=1528</id>
		<title>Models</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=Models&amp;diff=1528"/>
		<updated>2023-10-07T13:35:50Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: /* Gotcha Force Models */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
{{Research | 2| Researches on headers / bodies structures are partially achieved. }}&lt;br /&gt;
&lt;br /&gt;
== Gotcha Force Models ==&lt;br /&gt;
&lt;br /&gt;
Gotcha Force models work as those from the game Super Smash Bros Melee (SSBM) investigated by its [https://smashboards.com/threads/melee-dat-format.292603/ community].&lt;br /&gt;
&lt;br /&gt;
A model is a file format that organizes objects and resources serialized to be used by the &#039;&#039;&#039;H&#039;&#039;&#039;al &#039;&#039;&#039;S&#039;&#039;&#039;ys&#039;&#039;&#039;D&#039;&#039;&#039;olphin (&#039;&#039;&#039;HSD&#039;&#039;&#039;) library. The HSD library is used in several Capcom games. These are graphic materials structured in a hierarchical way.&lt;br /&gt;
&lt;br /&gt;
Ce sont des ressources graphiques structurées de manière hiérarchique. La présence de certaines images dans les modèles montrent à priori l&#039;utilisation de la technique [https://learn.foundry.com/modo/901/content/help/pages/shading_lighting/shader_items/matcap.html matcap].&lt;br /&gt;
Par ailleurs, la librairie prendrait ses sources sur le SDK Dolphin, tel que GX ou encore MTX.&lt;br /&gt;
&lt;br /&gt;
=== Fichiers concernés ===&lt;br /&gt;
L&#039;ensemble des fichiers ayant dans leur titre &#039;&#039;&#039;_mdl&#039;&#039;&#039; sont des fichiers modèles correspondant au format décrit dans cette page. On notera les fichiers [[ARZ (Gotcha Force)|.arz]] qui sont des modèles compressés. Le fichier collision.arc et les fichiers tdc00.arc à tdc09.arc sont aussi des modèles.&lt;br /&gt;
&lt;br /&gt;
Les fichiers modèles se retrouvent aussi dans les pzz des borgs (plxxxx.pzz) en position 004 à 009.&lt;br /&gt;
&lt;br /&gt;
=== HSDRaw ===&lt;br /&gt;
HSDRaw, un éditeur 3D dotnet de ce format est instable sur mon Windows (algoflash). Il est cependant prouvé qu&#039;un edit des _mdl pour commencer à l&#039;offset 0x100 - après le préambule - permet de visualiser le fichier sur HSDRaw et d&#039;avoir le rendu 3D du Borg (click sur le premier dossier JOBJ - puis le JOBJ dedans et double click sur le nœud en violet). Cela devrait aussi permettre d&#039;éditer certaines propriétés ?&lt;br /&gt;
&lt;br /&gt;
== Structure générale ==&lt;br /&gt;
Le format des modèles se découpe en plusieurs blocks. Le préambule fait 0x100 octets au tout début du fichier. Il est souvent absent. Toutes les valeurs sont en unsigned big endian, et le pad est en Nulls bytes (\x00). 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&#039;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&#039;il est peu probable qu&#039;un offset pointe au milieu d&#039;une structure.&lt;br /&gt;
&lt;br /&gt;
L&#039;ensemble des fichiers répondant à ce format on un seul root_node de type SObj (Scene data).&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Préambule&#039;&#039;&#039; : (0x100 octets / 0 octets) ===&lt;br /&gt;
* 4 octets - hsd_header_offset=0x100 (toujours)&lt;br /&gt;
* 4 octets - bones_flags_table_offset=0x20 (toujours) - offset de la liste des flags des armatures&lt;br /&gt;
* 4 octets - bones_table_offset=0xC0 (toujours) - offset de la liste des armatures&lt;br /&gt;
* 20 octets - Pad - (toujours)&lt;br /&gt;
* 4 octets [32] - Inconnu (flags des armatures ?) 1 octet par flag ?&lt;br /&gt;
* 32 octets - Pad - (toujours)&lt;br /&gt;
* 32 octets - armatures ?&lt;br /&gt;
* 32 octets - Pad - (toujours)&lt;br /&gt;
=== &#039;&#039;&#039;HSD Header&#039;&#039;&#039; - (0x20 octets) ===&lt;br /&gt;
* 4 octets - Taille totale du fichier&lt;br /&gt;
* 4 octets - Taille du Data block&lt;br /&gt;
* 4 octets - Nombre d&#039;entrée dans la Table de relocs&lt;br /&gt;
* 4 octets - root0_count&lt;br /&gt;
* 4 octets - root1_count&lt;br /&gt;
* 12 octets - Pad - (toujours)&lt;br /&gt;
=== &#039;&#039;&#039;Data block&#039;&#039;&#039; : ===&lt;br /&gt;
* JOBJ, etc. -&amp;gt; Ces structures sont détaillée plus loin ci-dessous.&lt;br /&gt;
=== &#039;&#039;&#039;Relocation Table&#039;&#039;&#039; : ===&lt;br /&gt;
* Tableau d&#039;offsets de 4 octets - Offsets des structures dans le DB.&lt;br /&gt;
=== &#039;&#039;&#039;Root Nodes (2)&#039;&#039;&#039; : ===&lt;br /&gt;
* Tableau de taille 8 * root0_count&lt;br /&gt;
** 4 octets - root_offset - relatif au DB&lt;br /&gt;
** 4 octets - string_table_offset - relatif à la StringTable&lt;br /&gt;
* Tableau de taille 8 * root1_count&lt;br /&gt;
** 4 octets - root_offset - relatif au DB&lt;br /&gt;
** 4 octets - string_table_offset - relatif à la StringTable&lt;br /&gt;
=== &#039;&#039;&#039;String Table&#039;&#039;&#039; : ===&lt;br /&gt;
* Suite de strings terminées par Null au nombre de root0_count + root1_count&lt;br /&gt;
&lt;br /&gt;
== Structures rencontrées dans le DB ==&lt;br /&gt;
Note : l&#039;arborescence est cumulative sur les transformations pour les relations parents-&amp;gt;enfants&lt;br /&gt;
&lt;br /&gt;
Les Noeuds Racine qui ont pour nom &amp;quot;scene_data&amp;quot; pointent sur un SObj :&lt;br /&gt;
=== &#039;&#039;&#039;SObj&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
* 4 octets - JObjDescs_offsets_list_offset&lt;br /&gt;
* 4 octets - Cameras_list_offset&lt;br /&gt;
* 4 octets - Lights_list_offset&lt;br /&gt;
* 4 octets - Fog&lt;br /&gt;
&lt;br /&gt;
&amp;quot;scene_data&amp;quot; == nom du nœud racine&lt;br /&gt;
JObjDescs_offsets_list_offset, cameras.. pointent sur une liste d&#039;offsets terminée par 4 octets à 0x00.&lt;br /&gt;
lights_list_offset pointe sur des couples (4 octets - LObj_offset ; 4 octets - light_anim_pointer_offset)&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;JObjDesc&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
* 4 octets - root_joint_offset - JObj&lt;br /&gt;
* 4 octets - joint_animations_offset - ?&lt;br /&gt;
* 4 octets - material_animations_offset - ?&lt;br /&gt;
* 4 octets - shape_animations_offset - ?&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;CObj&#039;&#039;&#039; : (0x38 octets) ===&lt;br /&gt;
* 4 octets - flags&lt;br /&gt;
* 4 octets - projection_type - ProjectionTypeEnum&lt;br /&gt;
* 2 octets - viewport_left&lt;br /&gt;
* 2 octets - viewport_right&lt;br /&gt;
* 2 octets - viewport_top&lt;br /&gt;
* 2 octets - viewport_bottom&lt;br /&gt;
* 4 octets - proj_width&lt;br /&gt;
* 4 octets - proj_height&lt;br /&gt;
* 4 octets - eye_offset - WObj&lt;br /&gt;
* 4 octets - target_offset - WObj&lt;br /&gt;
* 4 octets - roll&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - float - near_clip&lt;br /&gt;
* 4 octets - float - far_clip&lt;br /&gt;
* 4 octets - float - field_of_view&lt;br /&gt;
* 4 octets - float - aspect&lt;br /&gt;
Camera object. Note : pour frustrum ou ortho, la structure est différente.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ProjectionTypeEnum&#039;&#039;&#039;:&lt;br /&gt;
** PERSPECTIVE = 1&lt;br /&gt;
** FRUSTRUM = 2&lt;br /&gt;
** ORTHO = 3&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;WObj&#039;&#039;&#039;: (0x14 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - float - v1&lt;br /&gt;
* 4 octets - float - v2&lt;br /&gt;
* 4 octets - float - v3&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
eye / target&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;LObj&#039;&#039;&#039; : (0x1c octets) ===&lt;br /&gt;
* 4 octets - class_name&lt;br /&gt;
* 4 octets - next_offset&lt;br /&gt;
* 2 octets - flags - LObjFlagsEnum&lt;br /&gt;
* 2 octets - attenuation_flags - LObjAttenuationFlagsEnum&lt;br /&gt;
* 1 octet - color_r&lt;br /&gt;
* 1 octet - color_g&lt;br /&gt;
* 1 octet - color_b&lt;br /&gt;
* 1 octet - color_alpha&lt;br /&gt;
* 4 octets - lobj_point_offset - position&lt;br /&gt;
* 4 octets - infinite_data&lt;br /&gt;
* 4 octets - point_spot_data&lt;br /&gt;
light&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;LObjFlagsEnum&#039;&#039;&#039; :&lt;br /&gt;
** LOBJ_AMBIANT = 00 00&lt;br /&gt;
** LOBJ_INFINITE = 00 01&lt;br /&gt;
** LOBJ_POINT = 00 02&lt;br /&gt;
** LOBJ_SPOT = 00 03&lt;br /&gt;
** LOBJ_DIFFUSE = 00 04&lt;br /&gt;
** LOBJ_SPECULAR = 00 08&lt;br /&gt;
** LOBJ_ALPHA = 00 10&lt;br /&gt;
** LOBJ_HIDDEN = 00 20&lt;br /&gt;
** LOBJ_RAW_PARAM = 00 40&lt;br /&gt;
** LOBJ_DIFF_DIRTY = 00 80&lt;br /&gt;
** LOBJ_SPEC_DIRTY = 01 00&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;LObjAttenuationFlagsEnum&#039;&#039;&#039; :&lt;br /&gt;
** LOBJ_LIGHT_ATTN_NONE = 00 00&lt;br /&gt;
** LOBJ_LIGHT_ATTN = 00 01&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;LObjPoint&#039;&#039;&#039; : (0x14 octets) ===&lt;br /&gt;
* 4 octets - class_name&lt;br /&gt;
* 4 octets - float - x&lt;br /&gt;
* 4 octets - float - y&lt;br /&gt;
* 4 octets - float - z&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;LightAnimPointer&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
** 4 octets - next_offset - (LightAnimPointer)&lt;br /&gt;
** 4 octets - light_anim - ?&lt;br /&gt;
** 4 octets - position_anim - ?&lt;br /&gt;
** 4 octets - interst_anim - ?&lt;br /&gt;
Bugs dans HSDRaw - à tester&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;JObj&#039;&#039;&#039; : (0x40 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - flags&lt;br /&gt;
* 4 octets - child_offset (JObj)&lt;br /&gt;
* 4 octets - next_offset (JObj)&lt;br /&gt;
* 4 octets - dobj_offset (DObj)&lt;br /&gt;
* 4 octets [3] - float3 - rotation_xyz&lt;br /&gt;
* 4 octets [3] - float3 - scale_xyz&lt;br /&gt;
* 4 octets [3] - float3 - translation_xyz&lt;br /&gt;
* 4 octets - inverse_world_transform_offset (inverse world transform = Matrice de 4x3)&lt;br /&gt;
* 4 octets - robj_offset&lt;br /&gt;
&lt;br /&gt;
Pointé par les listes dans Root Node scene_data.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;JObjFlagsEnum&#039;&#039;&#039; : (peuvent se cumuler)&lt;br /&gt;
** NULL = 00 00 00 00&lt;br /&gt;
** SKELETON = 00 00 00 01&lt;br /&gt;
** SKELETON_ROOT = 00 00 00 02&lt;br /&gt;
** ENVELOPE_MODEL = 00 00 00 04&lt;br /&gt;
** CLASSICAL_SCALING = 00 00 00 08&lt;br /&gt;
** HIDDEN = 00 00 00 10&lt;br /&gt;
** PTCL = 00 00 00 20&lt;br /&gt;
** MTX_DIRTY = 00 00 00 40&lt;br /&gt;
** LIGHTING = 00 00 00 80&lt;br /&gt;
** TEXGEN = 00 00 01 00&lt;br /&gt;
** BILLBOARD = 00 00 02 00&lt;br /&gt;
** VBILLBOARD = 00 00 04 00&lt;br /&gt;
** HBILLBOARD = 00 00 06 00&lt;br /&gt;
** RBILLBOARD = 00 00 08 00&lt;br /&gt;
** INSTANCE = 00 00 10 00&lt;br /&gt;
** PBILLBOARD = 00 00 20 00&lt;br /&gt;
** SPLINE = 00 00 40 00&lt;br /&gt;
** FLIP_IK = 00 00 80 00&lt;br /&gt;
** SPECULAR = 00 01 00 00&lt;br /&gt;
** USE_QUATERNION = 00 02 00 00&lt;br /&gt;
** OPA = 00 04 00 00&lt;br /&gt;
** XLU = 00 08 00 00&lt;br /&gt;
** TEXEDGE = 00 10 00 00&lt;br /&gt;
** JOINT1 = 00 20 00 00&lt;br /&gt;
** JOINT2 = 00 40 00 00&lt;br /&gt;
** EFFECTOR = 00 60 00 00&lt;br /&gt;
** USER_DEFINED_MTX = 00 80 00 00&lt;br /&gt;
** MTX_INDEPEND_PARENT = 01 00 00 00&lt;br /&gt;
** MTX_INDEPEND_SRT = 02 00 00 00&lt;br /&gt;
** MTX_SCALE_COMPENSATE = 04 00 00 00&lt;br /&gt;
** ROOT_OPA = 10 00 00 00&lt;br /&gt;
** ROOT_XLU = 20 00 00 00&lt;br /&gt;
** ROOT_TEXEDGE = 40 00 00 00&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;InverseWorldTransform&#039;&#039;&#039; : (0x30 octets) ===&lt;br /&gt;
* 4 octets - float - M11&lt;br /&gt;
* 4 octets - float - M12&lt;br /&gt;
* 4 octets - float - M13&lt;br /&gt;
* 4 octets - float - M14&lt;br /&gt;
* 4 octets - float - M21&lt;br /&gt;
* 4 octets - float - M22&lt;br /&gt;
* 4 octets - float - M23&lt;br /&gt;
* 4 octets - float - M24&lt;br /&gt;
* 4 octets - float - M31&lt;br /&gt;
* 4 octets - float - M32&lt;br /&gt;
* 4 octets - float - M33&lt;br /&gt;
* 4 octets - float - M34&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;DObj&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - next_offset - prochain DOBJ&lt;br /&gt;
* 4 octets - mobj_offset - material offset&lt;br /&gt;
* 4 octets - pobj_offset - mesh offset&lt;br /&gt;
Liste chaînée qui permet de récupérer l&#039;ensemble des materials &amp;amp; mesh pour le JObj auquel il est lié.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;MObj&#039;&#039;&#039; : (0x18 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - render_flags - RenderFlagsEnum&lt;br /&gt;
* 4 octets - tobj_offset - offset de texture - peut être invalide s&#039;il n&#039;y a pas de texture pour le material&lt;br /&gt;
* 4 octets - material_offset - couleurs des materials ?&lt;br /&gt;
* 8 octets - PEDesc ?&lt;br /&gt;
&lt;br /&gt;
Contient les textures &amp;amp; informations sur les couleurs des Materials.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;RenderFlagsEnum&#039;&#039;&#039; : (se cumulent)&lt;br /&gt;
** USER = 80 00 00 00&lt;br /&gt;
** CONSTANT = 00 00 00 01&lt;br /&gt;
** VERTEX = 00 00 00 02&lt;br /&gt;
** BOTH = 00 00 00 03&lt;br /&gt;
** DIFFUSE = 00 00 00 04&lt;br /&gt;
** SPECULAR = 00 00 00 08&lt;br /&gt;
** TEX0 = 00 00 00 10&lt;br /&gt;
** TEX1 = 00 00 00 20&lt;br /&gt;
** TEX2 = 00 00 00 40&lt;br /&gt;
** TEX3 = 00 00 00 80&lt;br /&gt;
** TEX4 = 00 00 01 00&lt;br /&gt;
** TEX5 = 00 00 02 00&lt;br /&gt;
** TEX6 = 00 00 04 00&lt;br /&gt;
** TEX7 = 00 00 08 00&lt;br /&gt;
** TOON = 00 00 10 00&lt;br /&gt;
** ALPHA_MAT = 00 00 20 00&lt;br /&gt;
** ALPHA_VTX = 00 00 40 00&lt;br /&gt;
** ALPHA_BOTH = 00 00 60 00&lt;br /&gt;
** ZOFST = 01 00 00 00&lt;br /&gt;
** EFFECT = 02 00 00 00&lt;br /&gt;
** SHADOW = 04 00 00 00&lt;br /&gt;
** ZMODE_ALWAYS = 08 00 00 00&lt;br /&gt;
** DF_ALL = 10 00 00 00&lt;br /&gt;
** NO_ZUPDATE = 20 00 00 00&lt;br /&gt;
** XLU = 40 00 00 00&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;TObj&#039;&#039;&#039; : (0x5c octets) ===&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - tex_map_id - TexMapIdEnum&lt;br /&gt;
* 4 octets - gx_tex_gen_src - GXTexGenSrcEnum&lt;br /&gt;
* 4 octets - float - rx&lt;br /&gt;
* 4 octets - float - ry&lt;br /&gt;
* 4 octets - float - rz&lt;br /&gt;
* 4 octets - float - sx&lt;br /&gt;
* 4 octets - float - sy&lt;br /&gt;
* 4 octets - float - sz&lt;br /&gt;
* 4 octets - float - tx&lt;br /&gt;
* 4 octets - float - ty&lt;br /&gt;
* 4 octets - float - tz&lt;br /&gt;
* 4 octets - wrap_s - WrapEnum&lt;br /&gt;
* 4 octets - wrap_t - WrapEnum&lt;br /&gt;
* 1 octet - w_scale&lt;br /&gt;
* 1 octet - h_scale&lt;br /&gt;
* 2 octets - ?&lt;br /&gt;
* 1 octets - bump_map - (False = 00 ; True = 01)&lt;br /&gt;
* 4 bits - alpha_operation - AlphaOperationEnum&lt;br /&gt;
* 4 bits - color_operation - ColorOperationEnum&lt;br /&gt;
* 1 octet - shadow_lightmap - (False = 00 ; True = 01) (2 octets avec une Enum lightmap limite)&lt;br /&gt;
* 1 bit - ext_lightmap - (False = 0 ; True = 1)&lt;br /&gt;
* 1 bit - ambiant_lightmap - (False = 0 ; True = 1) &lt;br /&gt;
* 1 bit - specular_lightmap - (False = 0 ; True = 1)&lt;br /&gt;
* 1 bit - diffuse_lightmap (False = 0 ; True = 1)&lt;br /&gt;
* 4 bits - coord_type - CoordTypeEnum&lt;br /&gt;
* 4 octets - float - blending - utilisé quand color_operation ou alpha_operation == BLEND&lt;br /&gt;
* 4 octets - mag_filter - MagFilterEnum&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
Informations de Textures. Le TObj contient des informations sur les paramètres d&#039;environnement de textures utilisés pour le rendu graphique ainsi que les offset de l&#039;image et des données de la palette utilisés pour cette texture. Le plus important ici, c&#039;est l&#039;offset d&#039;image et la palette/tlut - si l&#039;image n&#039;est pas indexée (RGBA, CMPR, etc.) alors la structure de description palette/tlut n&#039;est pas utilisée.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;TexMapIdEnum&#039;&#039;&#039; :&lt;br /&gt;
** GX_TEXMAP0 = 00 00 00 00&lt;br /&gt;
** GX_TEXMAP1 = 00 00 00 01&lt;br /&gt;
** GX_TEXMAP2 = 00 00 00 02&lt;br /&gt;
** GX_TEXMAP3 = 00 00 00 03&lt;br /&gt;
** GX_TEXMAP4 = 00 00 00 04&lt;br /&gt;
** GX_TEXMAP5 = 00 00 00 05&lt;br /&gt;
** GX_TEXMAP6 = 00 00 00 06&lt;br /&gt;
** GX_TEXMAP7 = 00 00 00 07&lt;br /&gt;
** GX_MAX_TEXMAP = 00 00 00 08&lt;br /&gt;
** GX_TEXMAP_NULL = 00 00 00 09&lt;br /&gt;
** GX_TEXMAP_DISABLE = 00 00 00 0A&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;GXTexGenSrcEnum&#039;&#039;&#039; :&lt;br /&gt;
** GX_TG_POS = 00 00 00 00&lt;br /&gt;
** GX_TG_NRM = 00 00 00 01&lt;br /&gt;
** GX_TG_BINRM = 00 00 00 02&lt;br /&gt;
** GX_TG_TANGENT = 00 00 00 03&lt;br /&gt;
** GX_TG_TEX0 = 00 00 00 04&lt;br /&gt;
** GX_TG_TEX1 = 00 00 00 05&lt;br /&gt;
** GX_TG_TEX2 = 00 00 00 06&lt;br /&gt;
** GX_TG_TEX3 = 00 00 00 07&lt;br /&gt;
** GX_TG_TEX4 = 00 00 00 08&lt;br /&gt;
** GX_TG_TEX5 = 00 00 00 09&lt;br /&gt;
** GX_TG_TEX6 = 00 00 00 0A&lt;br /&gt;
** GX_TG_TEX7 = 00 00 00 0B&lt;br /&gt;
** GX_TG_TEXCOORD0 = 00 00 00 0C&lt;br /&gt;
** GX_TG_TEXCOORD1 = 00 00 00 0D&lt;br /&gt;
** GX_TG_TEXCOORD2 = 00 00 00 0E&lt;br /&gt;
** GX_TG_TEXCOORD3 = 00 00 00 0F&lt;br /&gt;
** GX_TG_TEXCOORD4 = 00 00 00 10&lt;br /&gt;
** GX_TG_TEXCOORD5 = 00 00 00 11&lt;br /&gt;
** GX_TG_TEXCOORD6 = 00 00 00 12&lt;br /&gt;
** GX_TG_COLOR0 = 00 00 00 13&lt;br /&gt;
** GX_TG_COLOR1 = 00 00 00 14&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;AlphaOperationEnum&#039;&#039;&#039;:&lt;br /&gt;
** NONE = 0X&lt;br /&gt;
** ALPHAMASK = 1X&lt;br /&gt;
** BLEND = 2X&lt;br /&gt;
** MODULATE = 3X&lt;br /&gt;
** REPLACE = 4X&lt;br /&gt;
** PASS = 5X&lt;br /&gt;
** ADD = 6X&lt;br /&gt;
** SUB = 7X&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ColorOperationEnum&#039;&#039;&#039;:&lt;br /&gt;
** NONE = X0&lt;br /&gt;
** ALPHA_MASK = X1&lt;br /&gt;
** RGB_MASK = X2&lt;br /&gt;
** BLEND = X3&lt;br /&gt;
** MODULATE = X4&lt;br /&gt;
** REPLACE = X5&lt;br /&gt;
** PASS = X6&lt;br /&gt;
** ADD = X7&lt;br /&gt;
** SUB = X8&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;CoordTypeEnum&#039;&#039;&#039;:&lt;br /&gt;
** UV = X0&lt;br /&gt;
** REFLECTION = X1&lt;br /&gt;
** HILIGHT = X2&lt;br /&gt;
** SHADOW = X3&lt;br /&gt;
** TOON = X4&lt;br /&gt;
** GRADATION = X5&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MagFilterEnum&#039;&#039;&#039;:&lt;br /&gt;
** GX_NEAR = 00 00 00 00&lt;br /&gt;
** GX_LINEAR = 00 00 00 01&lt;br /&gt;
** GX_NEAR_MIP_NEAR = 00 00 00 02&lt;br /&gt;
** GX_LIN_MIP_NEAR = 00 00 00 03&lt;br /&gt;
** GX_NEAR_MIP_LIN = 00 00 00 04&lt;br /&gt;
** GX_LIN_MIP_LIN = 00 00 00 05&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;WrapEnum&#039;&#039;&#039;:&lt;br /&gt;
** CLAMP = 00 00 00 00&lt;br /&gt;
** REPEAT = 00 00 00 01&lt;br /&gt;
** MIRROR = 00 00 00 02&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Material&#039;&#039;&#039; : (0x14 octets) ===&lt;br /&gt;
* 1 octets - AMB_R - (ambient)&lt;br /&gt;
* 1 octets - AMB_G&lt;br /&gt;
* 1 octets - AMB_B&lt;br /&gt;
* 1 octets - AMB_A&lt;br /&gt;
* 1 octets - DIF_R - (diffuse)&lt;br /&gt;
* 1 octets - DIF_G&lt;br /&gt;
* 1 octets - DIF_B&lt;br /&gt;
* 1 octets - DIF_A&lt;br /&gt;
* 1 octets - SPC_R - (specular)&lt;br /&gt;
* 1 octets - SPC_G&lt;br /&gt;
* 1 octets - SPC_B&lt;br /&gt;
* 1 octets - SPC_A&lt;br /&gt;
* 4 octets - float - alpha&lt;br /&gt;
* 4 octets - float - shininess&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;PObj&#039;&#039;&#039; : (0x18 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - next_offset - pobj&lt;br /&gt;
* 4 octets - vertex_attr_list_offset&lt;br /&gt;
* 2 octets - Flags - PObjFlagsEnum&lt;br /&gt;
* 2 octets - display_list_size - number of 0x20 (32) byte blocks occupied by display list data&lt;br /&gt;
* 4 octets - display_list_offset&lt;br /&gt;
* 4 octets - weight_list_offset - ? verifier qu&#039;on retrouve bien le tableau d&#039;envelope_weights à cet offset&lt;br /&gt;
&lt;br /&gt;
Comme l&#039;indique next_offset, il s&#039;agit d&#039;une liste de meshs à afficher pour un material donné référencé par un dobj. PObj contient les offsets de vertex attributes / display list / joint weight list ce qui suffit et permet d’interpréter et traiter les coordonnées de vertices, normals &amp;amp; textures.&lt;br /&gt;
&lt;br /&gt;
Les attributs vertex sont les plus important - les parametres specifiés contrôlent tout : du format, de la taille des données de chaque vertex, normal et coordonnées de textures et comment ces valeurs sont dimensionnées (scaled) par rapport à la présence et la taille de chaque valeur d&#039;index qui apparaît dans la display list information.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PObjFlagsEnum&#039;&#039;&#039; :&lt;br /&gt;
** Inconnu0 = 00 01&lt;br /&gt;
** Inconnu1 = 00 02&lt;br /&gt;
** ANIM = 00 08&lt;br /&gt;
** SHAPE_ANIM = 10 00&lt;br /&gt;
** ENVELOPE = 20 00&lt;br /&gt;
** CULLBACK = 40 00&lt;br /&gt;
** CULLFRONT = 80 00&lt;br /&gt;
&lt;br /&gt;
=== EnvelopeWeights : (0x? octets) ===&lt;br /&gt;
* 4 octets - envelope_count&lt;br /&gt;
* [envelope_count]:&lt;br /&gt;
** 4 octets - float - weight&lt;br /&gt;
** 4 octets - pad ?&lt;br /&gt;
* 4 octets - jobj_list_offset&lt;br /&gt;
&lt;br /&gt;
=== not verified yet ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;IMAGE_HEADER&#039;&#039;&#039; :&lt;br /&gt;
** 4 octets - image_offset - image data&lt;br /&gt;
** 2 octets - width&lt;br /&gt;
** 2 octets - height&lt;br /&gt;
** 4 octets - image_format&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PALETTE_HEADER&#039;&#039;&#039; : (0x10)&lt;br /&gt;
** 4 octets - palette_offset - palette data&lt;br /&gt;
** 4 octets - palette_format&lt;br /&gt;
** 4 octets - Inconnu&lt;br /&gt;
** 2 octets - color_count&lt;br /&gt;
** 2 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
image_offset et palette_offset sont souvent partagés par plusieurs textures - savoir ça permet de retrouver toutes les informations sur les images des textures (largeur, hauteur, format), ainsi que le format et le nombre de couleurs de la palette/tlut.&lt;br /&gt;
&lt;br /&gt;
Le format d&#039;image ne détermine pas le nombre total de couleurs de la palette qu&#039;elle utilisent. Par exemple, une image indexée sur 8 bits aurait un maximum de 256 couleurs mais seulement 136 ou 221 couleurs sont actuellement utilisées. De la sorte, la palette n&#039;utilisera pas la taille totale qu&#039;elle devrait utiliser.&lt;br /&gt;
&lt;br /&gt;
Les images suivent la structure généralement utilisée par la GameCube :&lt;br /&gt;
&lt;br /&gt;
IMAGE FORMATS :&lt;br /&gt;
* case 0: //i4&lt;br /&gt;
* case 1: //i8&lt;br /&gt;
* case 2: //i4a4&lt;br /&gt;
* case 3: //i8a8&lt;br /&gt;
* case 4: //r5g6b5&lt;br /&gt;
* case 5: //rgb5a3&lt;br /&gt;
* case 6: //r8g8b8a8&lt;br /&gt;
* case 8: //index4&lt;br /&gt;
* case 9: //index8&lt;br /&gt;
* case 0xa: //index14x2&lt;br /&gt;
* case 0xe: //s3tc1&lt;br /&gt;
&lt;br /&gt;
Les formats indexés utilisent aussi les informations de palettes/tlut et les données peuvent apparaître en plusieurs formats :&lt;br /&gt;
&lt;br /&gt;
PALETTE FORMATS :&lt;br /&gt;
* case 0: //ia8&lt;br /&gt;
* case 1: //r5g6b5&lt;br /&gt;
* case 2: //rgb5a3&lt;br /&gt;
&lt;br /&gt;
---&amp;gt; &amp;quot;Joint Data - Accessing Geometry, Mesh, and Vertex Attributes&amp;quot; https://smashboards.com/threads/melee-dat-format.292603/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
trad a revoir à partir de là, il faut investiguer le rendu 3D sur GameCube pour mieux comprendre&lt;br /&gt;
&lt;br /&gt;
// déclaration d&#039;un vertex et attribute information&lt;br /&gt;
// attr, type, cnt, data_type, flags?, file_offset&lt;br /&gt;
* ATTR_DATA&lt;br /&gt;
** 4 octets - GXAttr     vtx_attr_offset - attr&lt;br /&gt;
** 4 octets - GXAttrType vtx_attr_type   - index_type&lt;br /&gt;
** 4 octets - GXCompCnt  comp_cnt        - cnt&lt;br /&gt;
** 4 octets - GXCompType comp_type       - data_type	&lt;br /&gt;
** 1 octets - scale&lt;br /&gt;
** 1 octets - Inconnu&lt;br /&gt;
** 2 octets - vtx_stride&lt;br /&gt;
** 2 octets - data_offset&lt;br /&gt;
&lt;br /&gt;
vertex_attr_offset pointe sur une liste d&#039;attributs de vertex. Leur nombre n&#039;est pas donné. Les données dans cette structure suivent les informations et les types conçus par l&#039;architecture GameCube/WII et son API. La liste est terminée par une valeur spécifique de vtx_attr qui signale la fin de cette liste. Avec un accès à la doku SDK, il serait fortement conseillé de lire la section à propos des &amp;quot;vertex attributes and other specifications&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
La valeur de vtx_attr determine le type de donnée que cet attribut désigne et peut indiquer un nombre de types natifs utilisés utilisés pour passer les données entre les interfaces logicielles et matérielles.&lt;br /&gt;
&lt;br /&gt;
Les valeures possibles sont les suivantes :&lt;br /&gt;
* enum GXAttr (4 octets)&lt;br /&gt;
** GX_VA_PNMTXIDX = 0,    // position/normal matrix index&lt;br /&gt;
** GX_VA_TEX0MTXIDX,      // texture 0 matrix index&lt;br /&gt;
** GX_VA_TEX1MTXIDX,      // texture 1 matrix index&lt;br /&gt;
** GX_VA_TEX2MTXIDX,      // texture 2 matrix index&lt;br /&gt;
** GX_VA_TEX3MTXIDX,      // texture 3 matrix index&lt;br /&gt;
** GX_VA_TEX4MTXIDX,      // texture 4 matrix index&lt;br /&gt;
** GX_VA_TEX5MTXIDX,      // texture 5 matrix index&lt;br /&gt;
** GX_VA_TEX6MTXIDX,      // texture 6 matrix index&lt;br /&gt;
** GX_VA_TEX7MTXIDX,      // texture 7 matrix index&lt;br /&gt;
** GX_VA_POS      = 9,    // position&lt;br /&gt;
** GX_VA_NRM,             // normal&lt;br /&gt;
** GX_VA_CLR0,            // color 0&lt;br /&gt;
** GX_VA_CLR1,            // color 1&lt;br /&gt;
** GX_VA_TEX0,            // input texture coordinate 0&lt;br /&gt;
** GX_VA_TEX1,            // input texture coordinate 1&lt;br /&gt;
** GX_VA_TEX2,            // input texture coordinate 2&lt;br /&gt;
** GX_VA_TEX3,            // input texture coordinate 3&lt;br /&gt;
** GX_VA_TEX4,            // input texture coordinate 4&lt;br /&gt;
** GX_VA_TEX5,            // input texture coordinate 5&lt;br /&gt;
** GX_VA_TEX6,            // input texture coordinate 6&lt;br /&gt;
** GX_VA_TEX7,            // input texture coordinate 7&lt;br /&gt;
&lt;br /&gt;
** GX_POS_MTX_ARRAY,      // position matrix array pointer&lt;br /&gt;
** GX_NRM_MTX_ARRAY,      // normal matrix array pointer&lt;br /&gt;
** GX_TEX_MTX_ARRAY,      // texture matrix array pointer&lt;br /&gt;
** GX_LIGHT_ARRAY,        // light parameter array pointer&lt;br /&gt;
** GX_VA_NBT,             // normal, bi-normal, tangent &lt;br /&gt;
** GX_VA_MAX_ATTR,        // maximum number of vertex attributes&lt;br /&gt;
&lt;br /&gt;
** GX_VA_NULL     = 0xff  // NULL attribute (to mark end of lists)&lt;br /&gt;
&lt;br /&gt;
Toutes les données nécessaires pour représenter un mesh peuvent être spécifiées et indexées d&#039;une manière ou d&#039;une autre. De même, GX_VA_TEX0MTXIDX, GX_VA_CLR0, et autres sont aussi possibles - les valeurs les plus fréquentes dans les données SSBM sont : GX_VA_PNMTXIDX, GX_VA_POS, GX_VA_NRM, et GX_VA_TEX0. Which is to be expected as joint matrices, vertex positions/normals, and texture coordinates respectively are probably the most basic of elements needed to display a texture mesh, whether static or animated.&lt;br /&gt;
&lt;br /&gt;
When the value of vtx_attr == GX_VA_NULL (0xFF), the end of the vertex attribute array has been reached.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The vtx_attr_type values is actually associated with how the value is indexed, and can thus also determine the size of the index value within the display list data.&lt;br /&gt;
&lt;br /&gt;
* 4 octets - enum GXAttrType&lt;br /&gt;
** GX_NONE    = 0,&lt;br /&gt;
** GX_DIRECT,&lt;br /&gt;
** GX_INDEX8,&lt;br /&gt;
** GX_INDEX16&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Structures COLL_DATA : (données de collisions)&lt;br /&gt;
** 4 octets - vertex_offset (2 float par entrée correspondant à des données 2D probablement)&lt;br /&gt;
** 4 octets - vertex_count&lt;br /&gt;
** 4 octets - index_offset&lt;br /&gt;
** 4 octets - index_count&lt;br /&gt;
** 4 octets [5] - tableau inconnu&lt;br /&gt;
*** 2 octets - index_start&lt;br /&gt;
*** 2 octets - index_count&lt;br /&gt;
** 4 octets - Inconnu&lt;br /&gt;
** 4 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
[[Category:Implementations]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=Models&amp;diff=1527</id>
		<title>Models</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=Models&amp;diff=1527"/>
		<updated>2023-10-07T13:34:45Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: /* Gotcha Force Models */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
{{Research | 2| Researches on headers / bodies structures are partially achieved. }}&lt;br /&gt;
&lt;br /&gt;
== Gotcha Force Models ==&lt;br /&gt;
&lt;br /&gt;
Gotcha Force models work as those from the game Super Smash Bros Melee (SSBM) investigated by its [https://smashboards.com/threads/melee-dat-format.292603/ community].&lt;br /&gt;
&lt;br /&gt;
A model is a file format that organizes objects and resources serialized to be used by the &#039;&#039;&#039;H&#039;&#039;&#039;al &#039;&#039;&#039;S&#039;&#039;&#039;ys&#039;&#039;&#039;D&#039;&#039;&#039;olphin (&#039;&#039;&#039;HSD&#039;&#039;&#039;) library. The HSD library is used in several Capcom games.&lt;br /&gt;
&lt;br /&gt;
Ce sont des ressources graphiques structurées de manière hiérarchique. La présence de certaines images dans les modèles montrent à priori l&#039;utilisation de la technique [https://learn.foundry.com/modo/901/content/help/pages/shading_lighting/shader_items/matcap.html matcap].&lt;br /&gt;
Par ailleurs, la librairie prendrait ses sources sur le SDK Dolphin, tel que GX ou encore MTX.&lt;br /&gt;
&lt;br /&gt;
=== Fichiers concernés ===&lt;br /&gt;
L&#039;ensemble des fichiers ayant dans leur titre &#039;&#039;&#039;_mdl&#039;&#039;&#039; sont des fichiers modèles correspondant au format décrit dans cette page. On notera les fichiers [[ARZ (Gotcha Force)|.arz]] qui sont des modèles compressés. Le fichier collision.arc et les fichiers tdc00.arc à tdc09.arc sont aussi des modèles.&lt;br /&gt;
&lt;br /&gt;
Les fichiers modèles se retrouvent aussi dans les pzz des borgs (plxxxx.pzz) en position 004 à 009.&lt;br /&gt;
&lt;br /&gt;
=== HSDRaw ===&lt;br /&gt;
HSDRaw, un éditeur 3D dotnet de ce format est instable sur mon Windows (algoflash). Il est cependant prouvé qu&#039;un edit des _mdl pour commencer à l&#039;offset 0x100 - après le préambule - permet de visualiser le fichier sur HSDRaw et d&#039;avoir le rendu 3D du Borg (click sur le premier dossier JOBJ - puis le JOBJ dedans et double click sur le nœud en violet). Cela devrait aussi permettre d&#039;éditer certaines propriétés ?&lt;br /&gt;
&lt;br /&gt;
== Structure générale ==&lt;br /&gt;
Le format des modèles se découpe en plusieurs blocks. Le préambule fait 0x100 octets au tout début du fichier. Il est souvent absent. Toutes les valeurs sont en unsigned big endian, et le pad est en Nulls bytes (\x00). 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&#039;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&#039;il est peu probable qu&#039;un offset pointe au milieu d&#039;une structure.&lt;br /&gt;
&lt;br /&gt;
L&#039;ensemble des fichiers répondant à ce format on un seul root_node de type SObj (Scene data).&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Préambule&#039;&#039;&#039; : (0x100 octets / 0 octets) ===&lt;br /&gt;
* 4 octets - hsd_header_offset=0x100 (toujours)&lt;br /&gt;
* 4 octets - bones_flags_table_offset=0x20 (toujours) - offset de la liste des flags des armatures&lt;br /&gt;
* 4 octets - bones_table_offset=0xC0 (toujours) - offset de la liste des armatures&lt;br /&gt;
* 20 octets - Pad - (toujours)&lt;br /&gt;
* 4 octets [32] - Inconnu (flags des armatures ?) 1 octet par flag ?&lt;br /&gt;
* 32 octets - Pad - (toujours)&lt;br /&gt;
* 32 octets - armatures ?&lt;br /&gt;
* 32 octets - Pad - (toujours)&lt;br /&gt;
=== &#039;&#039;&#039;HSD Header&#039;&#039;&#039; - (0x20 octets) ===&lt;br /&gt;
* 4 octets - Taille totale du fichier&lt;br /&gt;
* 4 octets - Taille du Data block&lt;br /&gt;
* 4 octets - Nombre d&#039;entrée dans la Table de relocs&lt;br /&gt;
* 4 octets - root0_count&lt;br /&gt;
* 4 octets - root1_count&lt;br /&gt;
* 12 octets - Pad - (toujours)&lt;br /&gt;
=== &#039;&#039;&#039;Data block&#039;&#039;&#039; : ===&lt;br /&gt;
* JOBJ, etc. -&amp;gt; Ces structures sont détaillée plus loin ci-dessous.&lt;br /&gt;
=== &#039;&#039;&#039;Relocation Table&#039;&#039;&#039; : ===&lt;br /&gt;
* Tableau d&#039;offsets de 4 octets - Offsets des structures dans le DB.&lt;br /&gt;
=== &#039;&#039;&#039;Root Nodes (2)&#039;&#039;&#039; : ===&lt;br /&gt;
* Tableau de taille 8 * root0_count&lt;br /&gt;
** 4 octets - root_offset - relatif au DB&lt;br /&gt;
** 4 octets - string_table_offset - relatif à la StringTable&lt;br /&gt;
* Tableau de taille 8 * root1_count&lt;br /&gt;
** 4 octets - root_offset - relatif au DB&lt;br /&gt;
** 4 octets - string_table_offset - relatif à la StringTable&lt;br /&gt;
=== &#039;&#039;&#039;String Table&#039;&#039;&#039; : ===&lt;br /&gt;
* Suite de strings terminées par Null au nombre de root0_count + root1_count&lt;br /&gt;
&lt;br /&gt;
== Structures rencontrées dans le DB ==&lt;br /&gt;
Note : l&#039;arborescence est cumulative sur les transformations pour les relations parents-&amp;gt;enfants&lt;br /&gt;
&lt;br /&gt;
Les Noeuds Racine qui ont pour nom &amp;quot;scene_data&amp;quot; pointent sur un SObj :&lt;br /&gt;
=== &#039;&#039;&#039;SObj&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
* 4 octets - JObjDescs_offsets_list_offset&lt;br /&gt;
* 4 octets - Cameras_list_offset&lt;br /&gt;
* 4 octets - Lights_list_offset&lt;br /&gt;
* 4 octets - Fog&lt;br /&gt;
&lt;br /&gt;
&amp;quot;scene_data&amp;quot; == nom du nœud racine&lt;br /&gt;
JObjDescs_offsets_list_offset, cameras.. pointent sur une liste d&#039;offsets terminée par 4 octets à 0x00.&lt;br /&gt;
lights_list_offset pointe sur des couples (4 octets - LObj_offset ; 4 octets - light_anim_pointer_offset)&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;JObjDesc&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
* 4 octets - root_joint_offset - JObj&lt;br /&gt;
* 4 octets - joint_animations_offset - ?&lt;br /&gt;
* 4 octets - material_animations_offset - ?&lt;br /&gt;
* 4 octets - shape_animations_offset - ?&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;CObj&#039;&#039;&#039; : (0x38 octets) ===&lt;br /&gt;
* 4 octets - flags&lt;br /&gt;
* 4 octets - projection_type - ProjectionTypeEnum&lt;br /&gt;
* 2 octets - viewport_left&lt;br /&gt;
* 2 octets - viewport_right&lt;br /&gt;
* 2 octets - viewport_top&lt;br /&gt;
* 2 octets - viewport_bottom&lt;br /&gt;
* 4 octets - proj_width&lt;br /&gt;
* 4 octets - proj_height&lt;br /&gt;
* 4 octets - eye_offset - WObj&lt;br /&gt;
* 4 octets - target_offset - WObj&lt;br /&gt;
* 4 octets - roll&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - float - near_clip&lt;br /&gt;
* 4 octets - float - far_clip&lt;br /&gt;
* 4 octets - float - field_of_view&lt;br /&gt;
* 4 octets - float - aspect&lt;br /&gt;
Camera object. Note : pour frustrum ou ortho, la structure est différente.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ProjectionTypeEnum&#039;&#039;&#039;:&lt;br /&gt;
** PERSPECTIVE = 1&lt;br /&gt;
** FRUSTRUM = 2&lt;br /&gt;
** ORTHO = 3&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;WObj&#039;&#039;&#039;: (0x14 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - float - v1&lt;br /&gt;
* 4 octets - float - v2&lt;br /&gt;
* 4 octets - float - v3&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
eye / target&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;LObj&#039;&#039;&#039; : (0x1c octets) ===&lt;br /&gt;
* 4 octets - class_name&lt;br /&gt;
* 4 octets - next_offset&lt;br /&gt;
* 2 octets - flags - LObjFlagsEnum&lt;br /&gt;
* 2 octets - attenuation_flags - LObjAttenuationFlagsEnum&lt;br /&gt;
* 1 octet - color_r&lt;br /&gt;
* 1 octet - color_g&lt;br /&gt;
* 1 octet - color_b&lt;br /&gt;
* 1 octet - color_alpha&lt;br /&gt;
* 4 octets - lobj_point_offset - position&lt;br /&gt;
* 4 octets - infinite_data&lt;br /&gt;
* 4 octets - point_spot_data&lt;br /&gt;
light&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;LObjFlagsEnum&#039;&#039;&#039; :&lt;br /&gt;
** LOBJ_AMBIANT = 00 00&lt;br /&gt;
** LOBJ_INFINITE = 00 01&lt;br /&gt;
** LOBJ_POINT = 00 02&lt;br /&gt;
** LOBJ_SPOT = 00 03&lt;br /&gt;
** LOBJ_DIFFUSE = 00 04&lt;br /&gt;
** LOBJ_SPECULAR = 00 08&lt;br /&gt;
** LOBJ_ALPHA = 00 10&lt;br /&gt;
** LOBJ_HIDDEN = 00 20&lt;br /&gt;
** LOBJ_RAW_PARAM = 00 40&lt;br /&gt;
** LOBJ_DIFF_DIRTY = 00 80&lt;br /&gt;
** LOBJ_SPEC_DIRTY = 01 00&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;LObjAttenuationFlagsEnum&#039;&#039;&#039; :&lt;br /&gt;
** LOBJ_LIGHT_ATTN_NONE = 00 00&lt;br /&gt;
** LOBJ_LIGHT_ATTN = 00 01&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;LObjPoint&#039;&#039;&#039; : (0x14 octets) ===&lt;br /&gt;
* 4 octets - class_name&lt;br /&gt;
* 4 octets - float - x&lt;br /&gt;
* 4 octets - float - y&lt;br /&gt;
* 4 octets - float - z&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;LightAnimPointer&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
** 4 octets - next_offset - (LightAnimPointer)&lt;br /&gt;
** 4 octets - light_anim - ?&lt;br /&gt;
** 4 octets - position_anim - ?&lt;br /&gt;
** 4 octets - interst_anim - ?&lt;br /&gt;
Bugs dans HSDRaw - à tester&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;JObj&#039;&#039;&#039; : (0x40 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - flags&lt;br /&gt;
* 4 octets - child_offset (JObj)&lt;br /&gt;
* 4 octets - next_offset (JObj)&lt;br /&gt;
* 4 octets - dobj_offset (DObj)&lt;br /&gt;
* 4 octets [3] - float3 - rotation_xyz&lt;br /&gt;
* 4 octets [3] - float3 - scale_xyz&lt;br /&gt;
* 4 octets [3] - float3 - translation_xyz&lt;br /&gt;
* 4 octets - inverse_world_transform_offset (inverse world transform = Matrice de 4x3)&lt;br /&gt;
* 4 octets - robj_offset&lt;br /&gt;
&lt;br /&gt;
Pointé par les listes dans Root Node scene_data.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;JObjFlagsEnum&#039;&#039;&#039; : (peuvent se cumuler)&lt;br /&gt;
** NULL = 00 00 00 00&lt;br /&gt;
** SKELETON = 00 00 00 01&lt;br /&gt;
** SKELETON_ROOT = 00 00 00 02&lt;br /&gt;
** ENVELOPE_MODEL = 00 00 00 04&lt;br /&gt;
** CLASSICAL_SCALING = 00 00 00 08&lt;br /&gt;
** HIDDEN = 00 00 00 10&lt;br /&gt;
** PTCL = 00 00 00 20&lt;br /&gt;
** MTX_DIRTY = 00 00 00 40&lt;br /&gt;
** LIGHTING = 00 00 00 80&lt;br /&gt;
** TEXGEN = 00 00 01 00&lt;br /&gt;
** BILLBOARD = 00 00 02 00&lt;br /&gt;
** VBILLBOARD = 00 00 04 00&lt;br /&gt;
** HBILLBOARD = 00 00 06 00&lt;br /&gt;
** RBILLBOARD = 00 00 08 00&lt;br /&gt;
** INSTANCE = 00 00 10 00&lt;br /&gt;
** PBILLBOARD = 00 00 20 00&lt;br /&gt;
** SPLINE = 00 00 40 00&lt;br /&gt;
** FLIP_IK = 00 00 80 00&lt;br /&gt;
** SPECULAR = 00 01 00 00&lt;br /&gt;
** USE_QUATERNION = 00 02 00 00&lt;br /&gt;
** OPA = 00 04 00 00&lt;br /&gt;
** XLU = 00 08 00 00&lt;br /&gt;
** TEXEDGE = 00 10 00 00&lt;br /&gt;
** JOINT1 = 00 20 00 00&lt;br /&gt;
** JOINT2 = 00 40 00 00&lt;br /&gt;
** EFFECTOR = 00 60 00 00&lt;br /&gt;
** USER_DEFINED_MTX = 00 80 00 00&lt;br /&gt;
** MTX_INDEPEND_PARENT = 01 00 00 00&lt;br /&gt;
** MTX_INDEPEND_SRT = 02 00 00 00&lt;br /&gt;
** MTX_SCALE_COMPENSATE = 04 00 00 00&lt;br /&gt;
** ROOT_OPA = 10 00 00 00&lt;br /&gt;
** ROOT_XLU = 20 00 00 00&lt;br /&gt;
** ROOT_TEXEDGE = 40 00 00 00&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;InverseWorldTransform&#039;&#039;&#039; : (0x30 octets) ===&lt;br /&gt;
* 4 octets - float - M11&lt;br /&gt;
* 4 octets - float - M12&lt;br /&gt;
* 4 octets - float - M13&lt;br /&gt;
* 4 octets - float - M14&lt;br /&gt;
* 4 octets - float - M21&lt;br /&gt;
* 4 octets - float - M22&lt;br /&gt;
* 4 octets - float - M23&lt;br /&gt;
* 4 octets - float - M24&lt;br /&gt;
* 4 octets - float - M31&lt;br /&gt;
* 4 octets - float - M32&lt;br /&gt;
* 4 octets - float - M33&lt;br /&gt;
* 4 octets - float - M34&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;DObj&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - next_offset - prochain DOBJ&lt;br /&gt;
* 4 octets - mobj_offset - material offset&lt;br /&gt;
* 4 octets - pobj_offset - mesh offset&lt;br /&gt;
Liste chaînée qui permet de récupérer l&#039;ensemble des materials &amp;amp; mesh pour le JObj auquel il est lié.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;MObj&#039;&#039;&#039; : (0x18 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - render_flags - RenderFlagsEnum&lt;br /&gt;
* 4 octets - tobj_offset - offset de texture - peut être invalide s&#039;il n&#039;y a pas de texture pour le material&lt;br /&gt;
* 4 octets - material_offset - couleurs des materials ?&lt;br /&gt;
* 8 octets - PEDesc ?&lt;br /&gt;
&lt;br /&gt;
Contient les textures &amp;amp; informations sur les couleurs des Materials.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;RenderFlagsEnum&#039;&#039;&#039; : (se cumulent)&lt;br /&gt;
** USER = 80 00 00 00&lt;br /&gt;
** CONSTANT = 00 00 00 01&lt;br /&gt;
** VERTEX = 00 00 00 02&lt;br /&gt;
** BOTH = 00 00 00 03&lt;br /&gt;
** DIFFUSE = 00 00 00 04&lt;br /&gt;
** SPECULAR = 00 00 00 08&lt;br /&gt;
** TEX0 = 00 00 00 10&lt;br /&gt;
** TEX1 = 00 00 00 20&lt;br /&gt;
** TEX2 = 00 00 00 40&lt;br /&gt;
** TEX3 = 00 00 00 80&lt;br /&gt;
** TEX4 = 00 00 01 00&lt;br /&gt;
** TEX5 = 00 00 02 00&lt;br /&gt;
** TEX6 = 00 00 04 00&lt;br /&gt;
** TEX7 = 00 00 08 00&lt;br /&gt;
** TOON = 00 00 10 00&lt;br /&gt;
** ALPHA_MAT = 00 00 20 00&lt;br /&gt;
** ALPHA_VTX = 00 00 40 00&lt;br /&gt;
** ALPHA_BOTH = 00 00 60 00&lt;br /&gt;
** ZOFST = 01 00 00 00&lt;br /&gt;
** EFFECT = 02 00 00 00&lt;br /&gt;
** SHADOW = 04 00 00 00&lt;br /&gt;
** ZMODE_ALWAYS = 08 00 00 00&lt;br /&gt;
** DF_ALL = 10 00 00 00&lt;br /&gt;
** NO_ZUPDATE = 20 00 00 00&lt;br /&gt;
** XLU = 40 00 00 00&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;TObj&#039;&#039;&#039; : (0x5c octets) ===&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - tex_map_id - TexMapIdEnum&lt;br /&gt;
* 4 octets - gx_tex_gen_src - GXTexGenSrcEnum&lt;br /&gt;
* 4 octets - float - rx&lt;br /&gt;
* 4 octets - float - ry&lt;br /&gt;
* 4 octets - float - rz&lt;br /&gt;
* 4 octets - float - sx&lt;br /&gt;
* 4 octets - float - sy&lt;br /&gt;
* 4 octets - float - sz&lt;br /&gt;
* 4 octets - float - tx&lt;br /&gt;
* 4 octets - float - ty&lt;br /&gt;
* 4 octets - float - tz&lt;br /&gt;
* 4 octets - wrap_s - WrapEnum&lt;br /&gt;
* 4 octets - wrap_t - WrapEnum&lt;br /&gt;
* 1 octet - w_scale&lt;br /&gt;
* 1 octet - h_scale&lt;br /&gt;
* 2 octets - ?&lt;br /&gt;
* 1 octets - bump_map - (False = 00 ; True = 01)&lt;br /&gt;
* 4 bits - alpha_operation - AlphaOperationEnum&lt;br /&gt;
* 4 bits - color_operation - ColorOperationEnum&lt;br /&gt;
* 1 octet - shadow_lightmap - (False = 00 ; True = 01) (2 octets avec une Enum lightmap limite)&lt;br /&gt;
* 1 bit - ext_lightmap - (False = 0 ; True = 1)&lt;br /&gt;
* 1 bit - ambiant_lightmap - (False = 0 ; True = 1) &lt;br /&gt;
* 1 bit - specular_lightmap - (False = 0 ; True = 1)&lt;br /&gt;
* 1 bit - diffuse_lightmap (False = 0 ; True = 1)&lt;br /&gt;
* 4 bits - coord_type - CoordTypeEnum&lt;br /&gt;
* 4 octets - float - blending - utilisé quand color_operation ou alpha_operation == BLEND&lt;br /&gt;
* 4 octets - mag_filter - MagFilterEnum&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
Informations de Textures. Le TObj contient des informations sur les paramètres d&#039;environnement de textures utilisés pour le rendu graphique ainsi que les offset de l&#039;image et des données de la palette utilisés pour cette texture. Le plus important ici, c&#039;est l&#039;offset d&#039;image et la palette/tlut - si l&#039;image n&#039;est pas indexée (RGBA, CMPR, etc.) alors la structure de description palette/tlut n&#039;est pas utilisée.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;TexMapIdEnum&#039;&#039;&#039; :&lt;br /&gt;
** GX_TEXMAP0 = 00 00 00 00&lt;br /&gt;
** GX_TEXMAP1 = 00 00 00 01&lt;br /&gt;
** GX_TEXMAP2 = 00 00 00 02&lt;br /&gt;
** GX_TEXMAP3 = 00 00 00 03&lt;br /&gt;
** GX_TEXMAP4 = 00 00 00 04&lt;br /&gt;
** GX_TEXMAP5 = 00 00 00 05&lt;br /&gt;
** GX_TEXMAP6 = 00 00 00 06&lt;br /&gt;
** GX_TEXMAP7 = 00 00 00 07&lt;br /&gt;
** GX_MAX_TEXMAP = 00 00 00 08&lt;br /&gt;
** GX_TEXMAP_NULL = 00 00 00 09&lt;br /&gt;
** GX_TEXMAP_DISABLE = 00 00 00 0A&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;GXTexGenSrcEnum&#039;&#039;&#039; :&lt;br /&gt;
** GX_TG_POS = 00 00 00 00&lt;br /&gt;
** GX_TG_NRM = 00 00 00 01&lt;br /&gt;
** GX_TG_BINRM = 00 00 00 02&lt;br /&gt;
** GX_TG_TANGENT = 00 00 00 03&lt;br /&gt;
** GX_TG_TEX0 = 00 00 00 04&lt;br /&gt;
** GX_TG_TEX1 = 00 00 00 05&lt;br /&gt;
** GX_TG_TEX2 = 00 00 00 06&lt;br /&gt;
** GX_TG_TEX3 = 00 00 00 07&lt;br /&gt;
** GX_TG_TEX4 = 00 00 00 08&lt;br /&gt;
** GX_TG_TEX5 = 00 00 00 09&lt;br /&gt;
** GX_TG_TEX6 = 00 00 00 0A&lt;br /&gt;
** GX_TG_TEX7 = 00 00 00 0B&lt;br /&gt;
** GX_TG_TEXCOORD0 = 00 00 00 0C&lt;br /&gt;
** GX_TG_TEXCOORD1 = 00 00 00 0D&lt;br /&gt;
** GX_TG_TEXCOORD2 = 00 00 00 0E&lt;br /&gt;
** GX_TG_TEXCOORD3 = 00 00 00 0F&lt;br /&gt;
** GX_TG_TEXCOORD4 = 00 00 00 10&lt;br /&gt;
** GX_TG_TEXCOORD5 = 00 00 00 11&lt;br /&gt;
** GX_TG_TEXCOORD6 = 00 00 00 12&lt;br /&gt;
** GX_TG_COLOR0 = 00 00 00 13&lt;br /&gt;
** GX_TG_COLOR1 = 00 00 00 14&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;AlphaOperationEnum&#039;&#039;&#039;:&lt;br /&gt;
** NONE = 0X&lt;br /&gt;
** ALPHAMASK = 1X&lt;br /&gt;
** BLEND = 2X&lt;br /&gt;
** MODULATE = 3X&lt;br /&gt;
** REPLACE = 4X&lt;br /&gt;
** PASS = 5X&lt;br /&gt;
** ADD = 6X&lt;br /&gt;
** SUB = 7X&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ColorOperationEnum&#039;&#039;&#039;:&lt;br /&gt;
** NONE = X0&lt;br /&gt;
** ALPHA_MASK = X1&lt;br /&gt;
** RGB_MASK = X2&lt;br /&gt;
** BLEND = X3&lt;br /&gt;
** MODULATE = X4&lt;br /&gt;
** REPLACE = X5&lt;br /&gt;
** PASS = X6&lt;br /&gt;
** ADD = X7&lt;br /&gt;
** SUB = X8&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;CoordTypeEnum&#039;&#039;&#039;:&lt;br /&gt;
** UV = X0&lt;br /&gt;
** REFLECTION = X1&lt;br /&gt;
** HILIGHT = X2&lt;br /&gt;
** SHADOW = X3&lt;br /&gt;
** TOON = X4&lt;br /&gt;
** GRADATION = X5&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MagFilterEnum&#039;&#039;&#039;:&lt;br /&gt;
** GX_NEAR = 00 00 00 00&lt;br /&gt;
** GX_LINEAR = 00 00 00 01&lt;br /&gt;
** GX_NEAR_MIP_NEAR = 00 00 00 02&lt;br /&gt;
** GX_LIN_MIP_NEAR = 00 00 00 03&lt;br /&gt;
** GX_NEAR_MIP_LIN = 00 00 00 04&lt;br /&gt;
** GX_LIN_MIP_LIN = 00 00 00 05&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;WrapEnum&#039;&#039;&#039;:&lt;br /&gt;
** CLAMP = 00 00 00 00&lt;br /&gt;
** REPEAT = 00 00 00 01&lt;br /&gt;
** MIRROR = 00 00 00 02&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Material&#039;&#039;&#039; : (0x14 octets) ===&lt;br /&gt;
* 1 octets - AMB_R - (ambient)&lt;br /&gt;
* 1 octets - AMB_G&lt;br /&gt;
* 1 octets - AMB_B&lt;br /&gt;
* 1 octets - AMB_A&lt;br /&gt;
* 1 octets - DIF_R - (diffuse)&lt;br /&gt;
* 1 octets - DIF_G&lt;br /&gt;
* 1 octets - DIF_B&lt;br /&gt;
* 1 octets - DIF_A&lt;br /&gt;
* 1 octets - SPC_R - (specular)&lt;br /&gt;
* 1 octets - SPC_G&lt;br /&gt;
* 1 octets - SPC_B&lt;br /&gt;
* 1 octets - SPC_A&lt;br /&gt;
* 4 octets - float - alpha&lt;br /&gt;
* 4 octets - float - shininess&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;PObj&#039;&#039;&#039; : (0x18 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - next_offset - pobj&lt;br /&gt;
* 4 octets - vertex_attr_list_offset&lt;br /&gt;
* 2 octets - Flags - PObjFlagsEnum&lt;br /&gt;
* 2 octets - display_list_size - number of 0x20 (32) byte blocks occupied by display list data&lt;br /&gt;
* 4 octets - display_list_offset&lt;br /&gt;
* 4 octets - weight_list_offset - ? verifier qu&#039;on retrouve bien le tableau d&#039;envelope_weights à cet offset&lt;br /&gt;
&lt;br /&gt;
Comme l&#039;indique next_offset, il s&#039;agit d&#039;une liste de meshs à afficher pour un material donné référencé par un dobj. PObj contient les offsets de vertex attributes / display list / joint weight list ce qui suffit et permet d’interpréter et traiter les coordonnées de vertices, normals &amp;amp; textures.&lt;br /&gt;
&lt;br /&gt;
Les attributs vertex sont les plus important - les parametres specifiés contrôlent tout : du format, de la taille des données de chaque vertex, normal et coordonnées de textures et comment ces valeurs sont dimensionnées (scaled) par rapport à la présence et la taille de chaque valeur d&#039;index qui apparaît dans la display list information.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PObjFlagsEnum&#039;&#039;&#039; :&lt;br /&gt;
** Inconnu0 = 00 01&lt;br /&gt;
** Inconnu1 = 00 02&lt;br /&gt;
** ANIM = 00 08&lt;br /&gt;
** SHAPE_ANIM = 10 00&lt;br /&gt;
** ENVELOPE = 20 00&lt;br /&gt;
** CULLBACK = 40 00&lt;br /&gt;
** CULLFRONT = 80 00&lt;br /&gt;
&lt;br /&gt;
=== EnvelopeWeights : (0x? octets) ===&lt;br /&gt;
* 4 octets - envelope_count&lt;br /&gt;
* [envelope_count]:&lt;br /&gt;
** 4 octets - float - weight&lt;br /&gt;
** 4 octets - pad ?&lt;br /&gt;
* 4 octets - jobj_list_offset&lt;br /&gt;
&lt;br /&gt;
=== not verified yet ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;IMAGE_HEADER&#039;&#039;&#039; :&lt;br /&gt;
** 4 octets - image_offset - image data&lt;br /&gt;
** 2 octets - width&lt;br /&gt;
** 2 octets - height&lt;br /&gt;
** 4 octets - image_format&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PALETTE_HEADER&#039;&#039;&#039; : (0x10)&lt;br /&gt;
** 4 octets - palette_offset - palette data&lt;br /&gt;
** 4 octets - palette_format&lt;br /&gt;
** 4 octets - Inconnu&lt;br /&gt;
** 2 octets - color_count&lt;br /&gt;
** 2 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
image_offset et palette_offset sont souvent partagés par plusieurs textures - savoir ça permet de retrouver toutes les informations sur les images des textures (largeur, hauteur, format), ainsi que le format et le nombre de couleurs de la palette/tlut.&lt;br /&gt;
&lt;br /&gt;
Le format d&#039;image ne détermine pas le nombre total de couleurs de la palette qu&#039;elle utilisent. Par exemple, une image indexée sur 8 bits aurait un maximum de 256 couleurs mais seulement 136 ou 221 couleurs sont actuellement utilisées. De la sorte, la palette n&#039;utilisera pas la taille totale qu&#039;elle devrait utiliser.&lt;br /&gt;
&lt;br /&gt;
Les images suivent la structure généralement utilisée par la GameCube :&lt;br /&gt;
&lt;br /&gt;
IMAGE FORMATS :&lt;br /&gt;
* case 0: //i4&lt;br /&gt;
* case 1: //i8&lt;br /&gt;
* case 2: //i4a4&lt;br /&gt;
* case 3: //i8a8&lt;br /&gt;
* case 4: //r5g6b5&lt;br /&gt;
* case 5: //rgb5a3&lt;br /&gt;
* case 6: //r8g8b8a8&lt;br /&gt;
* case 8: //index4&lt;br /&gt;
* case 9: //index8&lt;br /&gt;
* case 0xa: //index14x2&lt;br /&gt;
* case 0xe: //s3tc1&lt;br /&gt;
&lt;br /&gt;
Les formats indexés utilisent aussi les informations de palettes/tlut et les données peuvent apparaître en plusieurs formats :&lt;br /&gt;
&lt;br /&gt;
PALETTE FORMATS :&lt;br /&gt;
* case 0: //ia8&lt;br /&gt;
* case 1: //r5g6b5&lt;br /&gt;
* case 2: //rgb5a3&lt;br /&gt;
&lt;br /&gt;
---&amp;gt; &amp;quot;Joint Data - Accessing Geometry, Mesh, and Vertex Attributes&amp;quot; https://smashboards.com/threads/melee-dat-format.292603/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
trad a revoir à partir de là, il faut investiguer le rendu 3D sur GameCube pour mieux comprendre&lt;br /&gt;
&lt;br /&gt;
// déclaration d&#039;un vertex et attribute information&lt;br /&gt;
// attr, type, cnt, data_type, flags?, file_offset&lt;br /&gt;
* ATTR_DATA&lt;br /&gt;
** 4 octets - GXAttr     vtx_attr_offset - attr&lt;br /&gt;
** 4 octets - GXAttrType vtx_attr_type   - index_type&lt;br /&gt;
** 4 octets - GXCompCnt  comp_cnt        - cnt&lt;br /&gt;
** 4 octets - GXCompType comp_type       - data_type	&lt;br /&gt;
** 1 octets - scale&lt;br /&gt;
** 1 octets - Inconnu&lt;br /&gt;
** 2 octets - vtx_stride&lt;br /&gt;
** 2 octets - data_offset&lt;br /&gt;
&lt;br /&gt;
vertex_attr_offset pointe sur une liste d&#039;attributs de vertex. Leur nombre n&#039;est pas donné. Les données dans cette structure suivent les informations et les types conçus par l&#039;architecture GameCube/WII et son API. La liste est terminée par une valeur spécifique de vtx_attr qui signale la fin de cette liste. Avec un accès à la doku SDK, il serait fortement conseillé de lire la section à propos des &amp;quot;vertex attributes and other specifications&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
La valeur de vtx_attr determine le type de donnée que cet attribut désigne et peut indiquer un nombre de types natifs utilisés utilisés pour passer les données entre les interfaces logicielles et matérielles.&lt;br /&gt;
&lt;br /&gt;
Les valeures possibles sont les suivantes :&lt;br /&gt;
* enum GXAttr (4 octets)&lt;br /&gt;
** GX_VA_PNMTXIDX = 0,    // position/normal matrix index&lt;br /&gt;
** GX_VA_TEX0MTXIDX,      // texture 0 matrix index&lt;br /&gt;
** GX_VA_TEX1MTXIDX,      // texture 1 matrix index&lt;br /&gt;
** GX_VA_TEX2MTXIDX,      // texture 2 matrix index&lt;br /&gt;
** GX_VA_TEX3MTXIDX,      // texture 3 matrix index&lt;br /&gt;
** GX_VA_TEX4MTXIDX,      // texture 4 matrix index&lt;br /&gt;
** GX_VA_TEX5MTXIDX,      // texture 5 matrix index&lt;br /&gt;
** GX_VA_TEX6MTXIDX,      // texture 6 matrix index&lt;br /&gt;
** GX_VA_TEX7MTXIDX,      // texture 7 matrix index&lt;br /&gt;
** GX_VA_POS      = 9,    // position&lt;br /&gt;
** GX_VA_NRM,             // normal&lt;br /&gt;
** GX_VA_CLR0,            // color 0&lt;br /&gt;
** GX_VA_CLR1,            // color 1&lt;br /&gt;
** GX_VA_TEX0,            // input texture coordinate 0&lt;br /&gt;
** GX_VA_TEX1,            // input texture coordinate 1&lt;br /&gt;
** GX_VA_TEX2,            // input texture coordinate 2&lt;br /&gt;
** GX_VA_TEX3,            // input texture coordinate 3&lt;br /&gt;
** GX_VA_TEX4,            // input texture coordinate 4&lt;br /&gt;
** GX_VA_TEX5,            // input texture coordinate 5&lt;br /&gt;
** GX_VA_TEX6,            // input texture coordinate 6&lt;br /&gt;
** GX_VA_TEX7,            // input texture coordinate 7&lt;br /&gt;
&lt;br /&gt;
** GX_POS_MTX_ARRAY,      // position matrix array pointer&lt;br /&gt;
** GX_NRM_MTX_ARRAY,      // normal matrix array pointer&lt;br /&gt;
** GX_TEX_MTX_ARRAY,      // texture matrix array pointer&lt;br /&gt;
** GX_LIGHT_ARRAY,        // light parameter array pointer&lt;br /&gt;
** GX_VA_NBT,             // normal, bi-normal, tangent &lt;br /&gt;
** GX_VA_MAX_ATTR,        // maximum number of vertex attributes&lt;br /&gt;
&lt;br /&gt;
** GX_VA_NULL     = 0xff  // NULL attribute (to mark end of lists)&lt;br /&gt;
&lt;br /&gt;
Toutes les données nécessaires pour représenter un mesh peuvent être spécifiées et indexées d&#039;une manière ou d&#039;une autre. De même, GX_VA_TEX0MTXIDX, GX_VA_CLR0, et autres sont aussi possibles - les valeurs les plus fréquentes dans les données SSBM sont : GX_VA_PNMTXIDX, GX_VA_POS, GX_VA_NRM, et GX_VA_TEX0. Which is to be expected as joint matrices, vertex positions/normals, and texture coordinates respectively are probably the most basic of elements needed to display a texture mesh, whether static or animated.&lt;br /&gt;
&lt;br /&gt;
When the value of vtx_attr == GX_VA_NULL (0xFF), the end of the vertex attribute array has been reached.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The vtx_attr_type values is actually associated with how the value is indexed, and can thus also determine the size of the index value within the display list data.&lt;br /&gt;
&lt;br /&gt;
* 4 octets - enum GXAttrType&lt;br /&gt;
** GX_NONE    = 0,&lt;br /&gt;
** GX_DIRECT,&lt;br /&gt;
** GX_INDEX8,&lt;br /&gt;
** GX_INDEX16&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Structures COLL_DATA : (données de collisions)&lt;br /&gt;
** 4 octets - vertex_offset (2 float par entrée correspondant à des données 2D probablement)&lt;br /&gt;
** 4 octets - vertex_count&lt;br /&gt;
** 4 octets - index_offset&lt;br /&gt;
** 4 octets - index_count&lt;br /&gt;
** 4 octets [5] - tableau inconnu&lt;br /&gt;
*** 2 octets - index_start&lt;br /&gt;
*** 2 octets - index_count&lt;br /&gt;
** 4 octets - Inconnu&lt;br /&gt;
** 4 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
[[Category:Implementations]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=Models&amp;diff=1526</id>
		<title>Models</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=Models&amp;diff=1526"/>
		<updated>2023-10-07T13:34:28Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: /* Gotcha Force Models */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
{{Research | 2| Researches on headers / bodies structures are partially achieved. }}&lt;br /&gt;
&lt;br /&gt;
== Gotcha Force Models ==&lt;br /&gt;
&lt;br /&gt;
Gotcha Force models work as those from the game Super Smash Bros Melee (SSBM) investigated by its [https://smashboards.com/threads/melee-dat-format.292603/ community].&lt;br /&gt;
&lt;br /&gt;
A model is a file format that organizes objects and ressources serialized to be used by the &#039;&#039;&#039;H&#039;&#039;&#039;al &#039;&#039;&#039;S&#039;&#039;&#039;ys&#039;&#039;&#039;D&#039;&#039;&#039;olphin (&#039;&#039;&#039;HSD&#039;&#039;&#039;) library. The HSD library is used in several Capcom games.&lt;br /&gt;
&lt;br /&gt;
Ce sont des ressources graphiques structurées de manière hiérarchique. La présence de certaines images dans les modèles montrent à priori l&#039;utilisation de la technique [https://learn.foundry.com/modo/901/content/help/pages/shading_lighting/shader_items/matcap.html matcap].&lt;br /&gt;
Par ailleurs, la librairie prendrait ses sources sur le SDK Dolphin, tel que GX ou encore MTX.&lt;br /&gt;
&lt;br /&gt;
=== Fichiers concernés ===&lt;br /&gt;
L&#039;ensemble des fichiers ayant dans leur titre &#039;&#039;&#039;_mdl&#039;&#039;&#039; sont des fichiers modèles correspondant au format décrit dans cette page. On notera les fichiers [[ARZ (Gotcha Force)|.arz]] qui sont des modèles compressés. Le fichier collision.arc et les fichiers tdc00.arc à tdc09.arc sont aussi des modèles.&lt;br /&gt;
&lt;br /&gt;
Les fichiers modèles se retrouvent aussi dans les pzz des borgs (plxxxx.pzz) en position 004 à 009.&lt;br /&gt;
&lt;br /&gt;
=== HSDRaw ===&lt;br /&gt;
HSDRaw, un éditeur 3D dotnet de ce format est instable sur mon Windows (algoflash). Il est cependant prouvé qu&#039;un edit des _mdl pour commencer à l&#039;offset 0x100 - après le préambule - permet de visualiser le fichier sur HSDRaw et d&#039;avoir le rendu 3D du Borg (click sur le premier dossier JOBJ - puis le JOBJ dedans et double click sur le nœud en violet). Cela devrait aussi permettre d&#039;éditer certaines propriétés ?&lt;br /&gt;
&lt;br /&gt;
== Structure générale ==&lt;br /&gt;
Le format des modèles se découpe en plusieurs blocks. Le préambule fait 0x100 octets au tout début du fichier. Il est souvent absent. Toutes les valeurs sont en unsigned big endian, et le pad est en Nulls bytes (\x00). 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&#039;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&#039;il est peu probable qu&#039;un offset pointe au milieu d&#039;une structure.&lt;br /&gt;
&lt;br /&gt;
L&#039;ensemble des fichiers répondant à ce format on un seul root_node de type SObj (Scene data).&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Préambule&#039;&#039;&#039; : (0x100 octets / 0 octets) ===&lt;br /&gt;
* 4 octets - hsd_header_offset=0x100 (toujours)&lt;br /&gt;
* 4 octets - bones_flags_table_offset=0x20 (toujours) - offset de la liste des flags des armatures&lt;br /&gt;
* 4 octets - bones_table_offset=0xC0 (toujours) - offset de la liste des armatures&lt;br /&gt;
* 20 octets - Pad - (toujours)&lt;br /&gt;
* 4 octets [32] - Inconnu (flags des armatures ?) 1 octet par flag ?&lt;br /&gt;
* 32 octets - Pad - (toujours)&lt;br /&gt;
* 32 octets - armatures ?&lt;br /&gt;
* 32 octets - Pad - (toujours)&lt;br /&gt;
=== &#039;&#039;&#039;HSD Header&#039;&#039;&#039; - (0x20 octets) ===&lt;br /&gt;
* 4 octets - Taille totale du fichier&lt;br /&gt;
* 4 octets - Taille du Data block&lt;br /&gt;
* 4 octets - Nombre d&#039;entrée dans la Table de relocs&lt;br /&gt;
* 4 octets - root0_count&lt;br /&gt;
* 4 octets - root1_count&lt;br /&gt;
* 12 octets - Pad - (toujours)&lt;br /&gt;
=== &#039;&#039;&#039;Data block&#039;&#039;&#039; : ===&lt;br /&gt;
* JOBJ, etc. -&amp;gt; Ces structures sont détaillée plus loin ci-dessous.&lt;br /&gt;
=== &#039;&#039;&#039;Relocation Table&#039;&#039;&#039; : ===&lt;br /&gt;
* Tableau d&#039;offsets de 4 octets - Offsets des structures dans le DB.&lt;br /&gt;
=== &#039;&#039;&#039;Root Nodes (2)&#039;&#039;&#039; : ===&lt;br /&gt;
* Tableau de taille 8 * root0_count&lt;br /&gt;
** 4 octets - root_offset - relatif au DB&lt;br /&gt;
** 4 octets - string_table_offset - relatif à la StringTable&lt;br /&gt;
* Tableau de taille 8 * root1_count&lt;br /&gt;
** 4 octets - root_offset - relatif au DB&lt;br /&gt;
** 4 octets - string_table_offset - relatif à la StringTable&lt;br /&gt;
=== &#039;&#039;&#039;String Table&#039;&#039;&#039; : ===&lt;br /&gt;
* Suite de strings terminées par Null au nombre de root0_count + root1_count&lt;br /&gt;
&lt;br /&gt;
== Structures rencontrées dans le DB ==&lt;br /&gt;
Note : l&#039;arborescence est cumulative sur les transformations pour les relations parents-&amp;gt;enfants&lt;br /&gt;
&lt;br /&gt;
Les Noeuds Racine qui ont pour nom &amp;quot;scene_data&amp;quot; pointent sur un SObj :&lt;br /&gt;
=== &#039;&#039;&#039;SObj&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
* 4 octets - JObjDescs_offsets_list_offset&lt;br /&gt;
* 4 octets - Cameras_list_offset&lt;br /&gt;
* 4 octets - Lights_list_offset&lt;br /&gt;
* 4 octets - Fog&lt;br /&gt;
&lt;br /&gt;
&amp;quot;scene_data&amp;quot; == nom du nœud racine&lt;br /&gt;
JObjDescs_offsets_list_offset, cameras.. pointent sur une liste d&#039;offsets terminée par 4 octets à 0x00.&lt;br /&gt;
lights_list_offset pointe sur des couples (4 octets - LObj_offset ; 4 octets - light_anim_pointer_offset)&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;JObjDesc&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
* 4 octets - root_joint_offset - JObj&lt;br /&gt;
* 4 octets - joint_animations_offset - ?&lt;br /&gt;
* 4 octets - material_animations_offset - ?&lt;br /&gt;
* 4 octets - shape_animations_offset - ?&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;CObj&#039;&#039;&#039; : (0x38 octets) ===&lt;br /&gt;
* 4 octets - flags&lt;br /&gt;
* 4 octets - projection_type - ProjectionTypeEnum&lt;br /&gt;
* 2 octets - viewport_left&lt;br /&gt;
* 2 octets - viewport_right&lt;br /&gt;
* 2 octets - viewport_top&lt;br /&gt;
* 2 octets - viewport_bottom&lt;br /&gt;
* 4 octets - proj_width&lt;br /&gt;
* 4 octets - proj_height&lt;br /&gt;
* 4 octets - eye_offset - WObj&lt;br /&gt;
* 4 octets - target_offset - WObj&lt;br /&gt;
* 4 octets - roll&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - float - near_clip&lt;br /&gt;
* 4 octets - float - far_clip&lt;br /&gt;
* 4 octets - float - field_of_view&lt;br /&gt;
* 4 octets - float - aspect&lt;br /&gt;
Camera object. Note : pour frustrum ou ortho, la structure est différente.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ProjectionTypeEnum&#039;&#039;&#039;:&lt;br /&gt;
** PERSPECTIVE = 1&lt;br /&gt;
** FRUSTRUM = 2&lt;br /&gt;
** ORTHO = 3&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;WObj&#039;&#039;&#039;: (0x14 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - float - v1&lt;br /&gt;
* 4 octets - float - v2&lt;br /&gt;
* 4 octets - float - v3&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
eye / target&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;LObj&#039;&#039;&#039; : (0x1c octets) ===&lt;br /&gt;
* 4 octets - class_name&lt;br /&gt;
* 4 octets - next_offset&lt;br /&gt;
* 2 octets - flags - LObjFlagsEnum&lt;br /&gt;
* 2 octets - attenuation_flags - LObjAttenuationFlagsEnum&lt;br /&gt;
* 1 octet - color_r&lt;br /&gt;
* 1 octet - color_g&lt;br /&gt;
* 1 octet - color_b&lt;br /&gt;
* 1 octet - color_alpha&lt;br /&gt;
* 4 octets - lobj_point_offset - position&lt;br /&gt;
* 4 octets - infinite_data&lt;br /&gt;
* 4 octets - point_spot_data&lt;br /&gt;
light&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;LObjFlagsEnum&#039;&#039;&#039; :&lt;br /&gt;
** LOBJ_AMBIANT = 00 00&lt;br /&gt;
** LOBJ_INFINITE = 00 01&lt;br /&gt;
** LOBJ_POINT = 00 02&lt;br /&gt;
** LOBJ_SPOT = 00 03&lt;br /&gt;
** LOBJ_DIFFUSE = 00 04&lt;br /&gt;
** LOBJ_SPECULAR = 00 08&lt;br /&gt;
** LOBJ_ALPHA = 00 10&lt;br /&gt;
** LOBJ_HIDDEN = 00 20&lt;br /&gt;
** LOBJ_RAW_PARAM = 00 40&lt;br /&gt;
** LOBJ_DIFF_DIRTY = 00 80&lt;br /&gt;
** LOBJ_SPEC_DIRTY = 01 00&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;LObjAttenuationFlagsEnum&#039;&#039;&#039; :&lt;br /&gt;
** LOBJ_LIGHT_ATTN_NONE = 00 00&lt;br /&gt;
** LOBJ_LIGHT_ATTN = 00 01&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;LObjPoint&#039;&#039;&#039; : (0x14 octets) ===&lt;br /&gt;
* 4 octets - class_name&lt;br /&gt;
* 4 octets - float - x&lt;br /&gt;
* 4 octets - float - y&lt;br /&gt;
* 4 octets - float - z&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;LightAnimPointer&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
** 4 octets - next_offset - (LightAnimPointer)&lt;br /&gt;
** 4 octets - light_anim - ?&lt;br /&gt;
** 4 octets - position_anim - ?&lt;br /&gt;
** 4 octets - interst_anim - ?&lt;br /&gt;
Bugs dans HSDRaw - à tester&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;JObj&#039;&#039;&#039; : (0x40 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - flags&lt;br /&gt;
* 4 octets - child_offset (JObj)&lt;br /&gt;
* 4 octets - next_offset (JObj)&lt;br /&gt;
* 4 octets - dobj_offset (DObj)&lt;br /&gt;
* 4 octets [3] - float3 - rotation_xyz&lt;br /&gt;
* 4 octets [3] - float3 - scale_xyz&lt;br /&gt;
* 4 octets [3] - float3 - translation_xyz&lt;br /&gt;
* 4 octets - inverse_world_transform_offset (inverse world transform = Matrice de 4x3)&lt;br /&gt;
* 4 octets - robj_offset&lt;br /&gt;
&lt;br /&gt;
Pointé par les listes dans Root Node scene_data.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;JObjFlagsEnum&#039;&#039;&#039; : (peuvent se cumuler)&lt;br /&gt;
** NULL = 00 00 00 00&lt;br /&gt;
** SKELETON = 00 00 00 01&lt;br /&gt;
** SKELETON_ROOT = 00 00 00 02&lt;br /&gt;
** ENVELOPE_MODEL = 00 00 00 04&lt;br /&gt;
** CLASSICAL_SCALING = 00 00 00 08&lt;br /&gt;
** HIDDEN = 00 00 00 10&lt;br /&gt;
** PTCL = 00 00 00 20&lt;br /&gt;
** MTX_DIRTY = 00 00 00 40&lt;br /&gt;
** LIGHTING = 00 00 00 80&lt;br /&gt;
** TEXGEN = 00 00 01 00&lt;br /&gt;
** BILLBOARD = 00 00 02 00&lt;br /&gt;
** VBILLBOARD = 00 00 04 00&lt;br /&gt;
** HBILLBOARD = 00 00 06 00&lt;br /&gt;
** RBILLBOARD = 00 00 08 00&lt;br /&gt;
** INSTANCE = 00 00 10 00&lt;br /&gt;
** PBILLBOARD = 00 00 20 00&lt;br /&gt;
** SPLINE = 00 00 40 00&lt;br /&gt;
** FLIP_IK = 00 00 80 00&lt;br /&gt;
** SPECULAR = 00 01 00 00&lt;br /&gt;
** USE_QUATERNION = 00 02 00 00&lt;br /&gt;
** OPA = 00 04 00 00&lt;br /&gt;
** XLU = 00 08 00 00&lt;br /&gt;
** TEXEDGE = 00 10 00 00&lt;br /&gt;
** JOINT1 = 00 20 00 00&lt;br /&gt;
** JOINT2 = 00 40 00 00&lt;br /&gt;
** EFFECTOR = 00 60 00 00&lt;br /&gt;
** USER_DEFINED_MTX = 00 80 00 00&lt;br /&gt;
** MTX_INDEPEND_PARENT = 01 00 00 00&lt;br /&gt;
** MTX_INDEPEND_SRT = 02 00 00 00&lt;br /&gt;
** MTX_SCALE_COMPENSATE = 04 00 00 00&lt;br /&gt;
** ROOT_OPA = 10 00 00 00&lt;br /&gt;
** ROOT_XLU = 20 00 00 00&lt;br /&gt;
** ROOT_TEXEDGE = 40 00 00 00&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;InverseWorldTransform&#039;&#039;&#039; : (0x30 octets) ===&lt;br /&gt;
* 4 octets - float - M11&lt;br /&gt;
* 4 octets - float - M12&lt;br /&gt;
* 4 octets - float - M13&lt;br /&gt;
* 4 octets - float - M14&lt;br /&gt;
* 4 octets - float - M21&lt;br /&gt;
* 4 octets - float - M22&lt;br /&gt;
* 4 octets - float - M23&lt;br /&gt;
* 4 octets - float - M24&lt;br /&gt;
* 4 octets - float - M31&lt;br /&gt;
* 4 octets - float - M32&lt;br /&gt;
* 4 octets - float - M33&lt;br /&gt;
* 4 octets - float - M34&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;DObj&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - next_offset - prochain DOBJ&lt;br /&gt;
* 4 octets - mobj_offset - material offset&lt;br /&gt;
* 4 octets - pobj_offset - mesh offset&lt;br /&gt;
Liste chaînée qui permet de récupérer l&#039;ensemble des materials &amp;amp; mesh pour le JObj auquel il est lié.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;MObj&#039;&#039;&#039; : (0x18 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - render_flags - RenderFlagsEnum&lt;br /&gt;
* 4 octets - tobj_offset - offset de texture - peut être invalide s&#039;il n&#039;y a pas de texture pour le material&lt;br /&gt;
* 4 octets - material_offset - couleurs des materials ?&lt;br /&gt;
* 8 octets - PEDesc ?&lt;br /&gt;
&lt;br /&gt;
Contient les textures &amp;amp; informations sur les couleurs des Materials.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;RenderFlagsEnum&#039;&#039;&#039; : (se cumulent)&lt;br /&gt;
** USER = 80 00 00 00&lt;br /&gt;
** CONSTANT = 00 00 00 01&lt;br /&gt;
** VERTEX = 00 00 00 02&lt;br /&gt;
** BOTH = 00 00 00 03&lt;br /&gt;
** DIFFUSE = 00 00 00 04&lt;br /&gt;
** SPECULAR = 00 00 00 08&lt;br /&gt;
** TEX0 = 00 00 00 10&lt;br /&gt;
** TEX1 = 00 00 00 20&lt;br /&gt;
** TEX2 = 00 00 00 40&lt;br /&gt;
** TEX3 = 00 00 00 80&lt;br /&gt;
** TEX4 = 00 00 01 00&lt;br /&gt;
** TEX5 = 00 00 02 00&lt;br /&gt;
** TEX6 = 00 00 04 00&lt;br /&gt;
** TEX7 = 00 00 08 00&lt;br /&gt;
** TOON = 00 00 10 00&lt;br /&gt;
** ALPHA_MAT = 00 00 20 00&lt;br /&gt;
** ALPHA_VTX = 00 00 40 00&lt;br /&gt;
** ALPHA_BOTH = 00 00 60 00&lt;br /&gt;
** ZOFST = 01 00 00 00&lt;br /&gt;
** EFFECT = 02 00 00 00&lt;br /&gt;
** SHADOW = 04 00 00 00&lt;br /&gt;
** ZMODE_ALWAYS = 08 00 00 00&lt;br /&gt;
** DF_ALL = 10 00 00 00&lt;br /&gt;
** NO_ZUPDATE = 20 00 00 00&lt;br /&gt;
** XLU = 40 00 00 00&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;TObj&#039;&#039;&#039; : (0x5c octets) ===&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - tex_map_id - TexMapIdEnum&lt;br /&gt;
* 4 octets - gx_tex_gen_src - GXTexGenSrcEnum&lt;br /&gt;
* 4 octets - float - rx&lt;br /&gt;
* 4 octets - float - ry&lt;br /&gt;
* 4 octets - float - rz&lt;br /&gt;
* 4 octets - float - sx&lt;br /&gt;
* 4 octets - float - sy&lt;br /&gt;
* 4 octets - float - sz&lt;br /&gt;
* 4 octets - float - tx&lt;br /&gt;
* 4 octets - float - ty&lt;br /&gt;
* 4 octets - float - tz&lt;br /&gt;
* 4 octets - wrap_s - WrapEnum&lt;br /&gt;
* 4 octets - wrap_t - WrapEnum&lt;br /&gt;
* 1 octet - w_scale&lt;br /&gt;
* 1 octet - h_scale&lt;br /&gt;
* 2 octets - ?&lt;br /&gt;
* 1 octets - bump_map - (False = 00 ; True = 01)&lt;br /&gt;
* 4 bits - alpha_operation - AlphaOperationEnum&lt;br /&gt;
* 4 bits - color_operation - ColorOperationEnum&lt;br /&gt;
* 1 octet - shadow_lightmap - (False = 00 ; True = 01) (2 octets avec une Enum lightmap limite)&lt;br /&gt;
* 1 bit - ext_lightmap - (False = 0 ; True = 1)&lt;br /&gt;
* 1 bit - ambiant_lightmap - (False = 0 ; True = 1) &lt;br /&gt;
* 1 bit - specular_lightmap - (False = 0 ; True = 1)&lt;br /&gt;
* 1 bit - diffuse_lightmap (False = 0 ; True = 1)&lt;br /&gt;
* 4 bits - coord_type - CoordTypeEnum&lt;br /&gt;
* 4 octets - float - blending - utilisé quand color_operation ou alpha_operation == BLEND&lt;br /&gt;
* 4 octets - mag_filter - MagFilterEnum&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
Informations de Textures. Le TObj contient des informations sur les paramètres d&#039;environnement de textures utilisés pour le rendu graphique ainsi que les offset de l&#039;image et des données de la palette utilisés pour cette texture. Le plus important ici, c&#039;est l&#039;offset d&#039;image et la palette/tlut - si l&#039;image n&#039;est pas indexée (RGBA, CMPR, etc.) alors la structure de description palette/tlut n&#039;est pas utilisée.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;TexMapIdEnum&#039;&#039;&#039; :&lt;br /&gt;
** GX_TEXMAP0 = 00 00 00 00&lt;br /&gt;
** GX_TEXMAP1 = 00 00 00 01&lt;br /&gt;
** GX_TEXMAP2 = 00 00 00 02&lt;br /&gt;
** GX_TEXMAP3 = 00 00 00 03&lt;br /&gt;
** GX_TEXMAP4 = 00 00 00 04&lt;br /&gt;
** GX_TEXMAP5 = 00 00 00 05&lt;br /&gt;
** GX_TEXMAP6 = 00 00 00 06&lt;br /&gt;
** GX_TEXMAP7 = 00 00 00 07&lt;br /&gt;
** GX_MAX_TEXMAP = 00 00 00 08&lt;br /&gt;
** GX_TEXMAP_NULL = 00 00 00 09&lt;br /&gt;
** GX_TEXMAP_DISABLE = 00 00 00 0A&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;GXTexGenSrcEnum&#039;&#039;&#039; :&lt;br /&gt;
** GX_TG_POS = 00 00 00 00&lt;br /&gt;
** GX_TG_NRM = 00 00 00 01&lt;br /&gt;
** GX_TG_BINRM = 00 00 00 02&lt;br /&gt;
** GX_TG_TANGENT = 00 00 00 03&lt;br /&gt;
** GX_TG_TEX0 = 00 00 00 04&lt;br /&gt;
** GX_TG_TEX1 = 00 00 00 05&lt;br /&gt;
** GX_TG_TEX2 = 00 00 00 06&lt;br /&gt;
** GX_TG_TEX3 = 00 00 00 07&lt;br /&gt;
** GX_TG_TEX4 = 00 00 00 08&lt;br /&gt;
** GX_TG_TEX5 = 00 00 00 09&lt;br /&gt;
** GX_TG_TEX6 = 00 00 00 0A&lt;br /&gt;
** GX_TG_TEX7 = 00 00 00 0B&lt;br /&gt;
** GX_TG_TEXCOORD0 = 00 00 00 0C&lt;br /&gt;
** GX_TG_TEXCOORD1 = 00 00 00 0D&lt;br /&gt;
** GX_TG_TEXCOORD2 = 00 00 00 0E&lt;br /&gt;
** GX_TG_TEXCOORD3 = 00 00 00 0F&lt;br /&gt;
** GX_TG_TEXCOORD4 = 00 00 00 10&lt;br /&gt;
** GX_TG_TEXCOORD5 = 00 00 00 11&lt;br /&gt;
** GX_TG_TEXCOORD6 = 00 00 00 12&lt;br /&gt;
** GX_TG_COLOR0 = 00 00 00 13&lt;br /&gt;
** GX_TG_COLOR1 = 00 00 00 14&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;AlphaOperationEnum&#039;&#039;&#039;:&lt;br /&gt;
** NONE = 0X&lt;br /&gt;
** ALPHAMASK = 1X&lt;br /&gt;
** BLEND = 2X&lt;br /&gt;
** MODULATE = 3X&lt;br /&gt;
** REPLACE = 4X&lt;br /&gt;
** PASS = 5X&lt;br /&gt;
** ADD = 6X&lt;br /&gt;
** SUB = 7X&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ColorOperationEnum&#039;&#039;&#039;:&lt;br /&gt;
** NONE = X0&lt;br /&gt;
** ALPHA_MASK = X1&lt;br /&gt;
** RGB_MASK = X2&lt;br /&gt;
** BLEND = X3&lt;br /&gt;
** MODULATE = X4&lt;br /&gt;
** REPLACE = X5&lt;br /&gt;
** PASS = X6&lt;br /&gt;
** ADD = X7&lt;br /&gt;
** SUB = X8&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;CoordTypeEnum&#039;&#039;&#039;:&lt;br /&gt;
** UV = X0&lt;br /&gt;
** REFLECTION = X1&lt;br /&gt;
** HILIGHT = X2&lt;br /&gt;
** SHADOW = X3&lt;br /&gt;
** TOON = X4&lt;br /&gt;
** GRADATION = X5&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MagFilterEnum&#039;&#039;&#039;:&lt;br /&gt;
** GX_NEAR = 00 00 00 00&lt;br /&gt;
** GX_LINEAR = 00 00 00 01&lt;br /&gt;
** GX_NEAR_MIP_NEAR = 00 00 00 02&lt;br /&gt;
** GX_LIN_MIP_NEAR = 00 00 00 03&lt;br /&gt;
** GX_NEAR_MIP_LIN = 00 00 00 04&lt;br /&gt;
** GX_LIN_MIP_LIN = 00 00 00 05&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;WrapEnum&#039;&#039;&#039;:&lt;br /&gt;
** CLAMP = 00 00 00 00&lt;br /&gt;
** REPEAT = 00 00 00 01&lt;br /&gt;
** MIRROR = 00 00 00 02&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Material&#039;&#039;&#039; : (0x14 octets) ===&lt;br /&gt;
* 1 octets - AMB_R - (ambient)&lt;br /&gt;
* 1 octets - AMB_G&lt;br /&gt;
* 1 octets - AMB_B&lt;br /&gt;
* 1 octets - AMB_A&lt;br /&gt;
* 1 octets - DIF_R - (diffuse)&lt;br /&gt;
* 1 octets - DIF_G&lt;br /&gt;
* 1 octets - DIF_B&lt;br /&gt;
* 1 octets - DIF_A&lt;br /&gt;
* 1 octets - SPC_R - (specular)&lt;br /&gt;
* 1 octets - SPC_G&lt;br /&gt;
* 1 octets - SPC_B&lt;br /&gt;
* 1 octets - SPC_A&lt;br /&gt;
* 4 octets - float - alpha&lt;br /&gt;
* 4 octets - float - shininess&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;PObj&#039;&#039;&#039; : (0x18 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - next_offset - pobj&lt;br /&gt;
* 4 octets - vertex_attr_list_offset&lt;br /&gt;
* 2 octets - Flags - PObjFlagsEnum&lt;br /&gt;
* 2 octets - display_list_size - number of 0x20 (32) byte blocks occupied by display list data&lt;br /&gt;
* 4 octets - display_list_offset&lt;br /&gt;
* 4 octets - weight_list_offset - ? verifier qu&#039;on retrouve bien le tableau d&#039;envelope_weights à cet offset&lt;br /&gt;
&lt;br /&gt;
Comme l&#039;indique next_offset, il s&#039;agit d&#039;une liste de meshs à afficher pour un material donné référencé par un dobj. PObj contient les offsets de vertex attributes / display list / joint weight list ce qui suffit et permet d’interpréter et traiter les coordonnées de vertices, normals &amp;amp; textures.&lt;br /&gt;
&lt;br /&gt;
Les attributs vertex sont les plus important - les parametres specifiés contrôlent tout : du format, de la taille des données de chaque vertex, normal et coordonnées de textures et comment ces valeurs sont dimensionnées (scaled) par rapport à la présence et la taille de chaque valeur d&#039;index qui apparaît dans la display list information.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PObjFlagsEnum&#039;&#039;&#039; :&lt;br /&gt;
** Inconnu0 = 00 01&lt;br /&gt;
** Inconnu1 = 00 02&lt;br /&gt;
** ANIM = 00 08&lt;br /&gt;
** SHAPE_ANIM = 10 00&lt;br /&gt;
** ENVELOPE = 20 00&lt;br /&gt;
** CULLBACK = 40 00&lt;br /&gt;
** CULLFRONT = 80 00&lt;br /&gt;
&lt;br /&gt;
=== EnvelopeWeights : (0x? octets) ===&lt;br /&gt;
* 4 octets - envelope_count&lt;br /&gt;
* [envelope_count]:&lt;br /&gt;
** 4 octets - float - weight&lt;br /&gt;
** 4 octets - pad ?&lt;br /&gt;
* 4 octets - jobj_list_offset&lt;br /&gt;
&lt;br /&gt;
=== not verified yet ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;IMAGE_HEADER&#039;&#039;&#039; :&lt;br /&gt;
** 4 octets - image_offset - image data&lt;br /&gt;
** 2 octets - width&lt;br /&gt;
** 2 octets - height&lt;br /&gt;
** 4 octets - image_format&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PALETTE_HEADER&#039;&#039;&#039; : (0x10)&lt;br /&gt;
** 4 octets - palette_offset - palette data&lt;br /&gt;
** 4 octets - palette_format&lt;br /&gt;
** 4 octets - Inconnu&lt;br /&gt;
** 2 octets - color_count&lt;br /&gt;
** 2 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
image_offset et palette_offset sont souvent partagés par plusieurs textures - savoir ça permet de retrouver toutes les informations sur les images des textures (largeur, hauteur, format), ainsi que le format et le nombre de couleurs de la palette/tlut.&lt;br /&gt;
&lt;br /&gt;
Le format d&#039;image ne détermine pas le nombre total de couleurs de la palette qu&#039;elle utilisent. Par exemple, une image indexée sur 8 bits aurait un maximum de 256 couleurs mais seulement 136 ou 221 couleurs sont actuellement utilisées. De la sorte, la palette n&#039;utilisera pas la taille totale qu&#039;elle devrait utiliser.&lt;br /&gt;
&lt;br /&gt;
Les images suivent la structure généralement utilisée par la GameCube :&lt;br /&gt;
&lt;br /&gt;
IMAGE FORMATS :&lt;br /&gt;
* case 0: //i4&lt;br /&gt;
* case 1: //i8&lt;br /&gt;
* case 2: //i4a4&lt;br /&gt;
* case 3: //i8a8&lt;br /&gt;
* case 4: //r5g6b5&lt;br /&gt;
* case 5: //rgb5a3&lt;br /&gt;
* case 6: //r8g8b8a8&lt;br /&gt;
* case 8: //index4&lt;br /&gt;
* case 9: //index8&lt;br /&gt;
* case 0xa: //index14x2&lt;br /&gt;
* case 0xe: //s3tc1&lt;br /&gt;
&lt;br /&gt;
Les formats indexés utilisent aussi les informations de palettes/tlut et les données peuvent apparaître en plusieurs formats :&lt;br /&gt;
&lt;br /&gt;
PALETTE FORMATS :&lt;br /&gt;
* case 0: //ia8&lt;br /&gt;
* case 1: //r5g6b5&lt;br /&gt;
* case 2: //rgb5a3&lt;br /&gt;
&lt;br /&gt;
---&amp;gt; &amp;quot;Joint Data - Accessing Geometry, Mesh, and Vertex Attributes&amp;quot; https://smashboards.com/threads/melee-dat-format.292603/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
trad a revoir à partir de là, il faut investiguer le rendu 3D sur GameCube pour mieux comprendre&lt;br /&gt;
&lt;br /&gt;
// déclaration d&#039;un vertex et attribute information&lt;br /&gt;
// attr, type, cnt, data_type, flags?, file_offset&lt;br /&gt;
* ATTR_DATA&lt;br /&gt;
** 4 octets - GXAttr     vtx_attr_offset - attr&lt;br /&gt;
** 4 octets - GXAttrType vtx_attr_type   - index_type&lt;br /&gt;
** 4 octets - GXCompCnt  comp_cnt        - cnt&lt;br /&gt;
** 4 octets - GXCompType comp_type       - data_type	&lt;br /&gt;
** 1 octets - scale&lt;br /&gt;
** 1 octets - Inconnu&lt;br /&gt;
** 2 octets - vtx_stride&lt;br /&gt;
** 2 octets - data_offset&lt;br /&gt;
&lt;br /&gt;
vertex_attr_offset pointe sur une liste d&#039;attributs de vertex. Leur nombre n&#039;est pas donné. Les données dans cette structure suivent les informations et les types conçus par l&#039;architecture GameCube/WII et son API. La liste est terminée par une valeur spécifique de vtx_attr qui signale la fin de cette liste. Avec un accès à la doku SDK, il serait fortement conseillé de lire la section à propos des &amp;quot;vertex attributes and other specifications&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
La valeur de vtx_attr determine le type de donnée que cet attribut désigne et peut indiquer un nombre de types natifs utilisés utilisés pour passer les données entre les interfaces logicielles et matérielles.&lt;br /&gt;
&lt;br /&gt;
Les valeures possibles sont les suivantes :&lt;br /&gt;
* enum GXAttr (4 octets)&lt;br /&gt;
** GX_VA_PNMTXIDX = 0,    // position/normal matrix index&lt;br /&gt;
** GX_VA_TEX0MTXIDX,      // texture 0 matrix index&lt;br /&gt;
** GX_VA_TEX1MTXIDX,      // texture 1 matrix index&lt;br /&gt;
** GX_VA_TEX2MTXIDX,      // texture 2 matrix index&lt;br /&gt;
** GX_VA_TEX3MTXIDX,      // texture 3 matrix index&lt;br /&gt;
** GX_VA_TEX4MTXIDX,      // texture 4 matrix index&lt;br /&gt;
** GX_VA_TEX5MTXIDX,      // texture 5 matrix index&lt;br /&gt;
** GX_VA_TEX6MTXIDX,      // texture 6 matrix index&lt;br /&gt;
** GX_VA_TEX7MTXIDX,      // texture 7 matrix index&lt;br /&gt;
** GX_VA_POS      = 9,    // position&lt;br /&gt;
** GX_VA_NRM,             // normal&lt;br /&gt;
** GX_VA_CLR0,            // color 0&lt;br /&gt;
** GX_VA_CLR1,            // color 1&lt;br /&gt;
** GX_VA_TEX0,            // input texture coordinate 0&lt;br /&gt;
** GX_VA_TEX1,            // input texture coordinate 1&lt;br /&gt;
** GX_VA_TEX2,            // input texture coordinate 2&lt;br /&gt;
** GX_VA_TEX3,            // input texture coordinate 3&lt;br /&gt;
** GX_VA_TEX4,            // input texture coordinate 4&lt;br /&gt;
** GX_VA_TEX5,            // input texture coordinate 5&lt;br /&gt;
** GX_VA_TEX6,            // input texture coordinate 6&lt;br /&gt;
** GX_VA_TEX7,            // input texture coordinate 7&lt;br /&gt;
&lt;br /&gt;
** GX_POS_MTX_ARRAY,      // position matrix array pointer&lt;br /&gt;
** GX_NRM_MTX_ARRAY,      // normal matrix array pointer&lt;br /&gt;
** GX_TEX_MTX_ARRAY,      // texture matrix array pointer&lt;br /&gt;
** GX_LIGHT_ARRAY,        // light parameter array pointer&lt;br /&gt;
** GX_VA_NBT,             // normal, bi-normal, tangent &lt;br /&gt;
** GX_VA_MAX_ATTR,        // maximum number of vertex attributes&lt;br /&gt;
&lt;br /&gt;
** GX_VA_NULL     = 0xff  // NULL attribute (to mark end of lists)&lt;br /&gt;
&lt;br /&gt;
Toutes les données nécessaires pour représenter un mesh peuvent être spécifiées et indexées d&#039;une manière ou d&#039;une autre. De même, GX_VA_TEX0MTXIDX, GX_VA_CLR0, et autres sont aussi possibles - les valeurs les plus fréquentes dans les données SSBM sont : GX_VA_PNMTXIDX, GX_VA_POS, GX_VA_NRM, et GX_VA_TEX0. Which is to be expected as joint matrices, vertex positions/normals, and texture coordinates respectively are probably the most basic of elements needed to display a texture mesh, whether static or animated.&lt;br /&gt;
&lt;br /&gt;
When the value of vtx_attr == GX_VA_NULL (0xFF), the end of the vertex attribute array has been reached.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The vtx_attr_type values is actually associated with how the value is indexed, and can thus also determine the size of the index value within the display list data.&lt;br /&gt;
&lt;br /&gt;
* 4 octets - enum GXAttrType&lt;br /&gt;
** GX_NONE    = 0,&lt;br /&gt;
** GX_DIRECT,&lt;br /&gt;
** GX_INDEX8,&lt;br /&gt;
** GX_INDEX16&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Structures COLL_DATA : (données de collisions)&lt;br /&gt;
** 4 octets - vertex_offset (2 float par entrée correspondant à des données 2D probablement)&lt;br /&gt;
** 4 octets - vertex_count&lt;br /&gt;
** 4 octets - index_offset&lt;br /&gt;
** 4 octets - index_count&lt;br /&gt;
** 4 octets [5] - tableau inconnu&lt;br /&gt;
*** 2 octets - index_start&lt;br /&gt;
*** 2 octets - index_count&lt;br /&gt;
** 4 octets - Inconnu&lt;br /&gt;
** 4 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
[[Category:Implementations]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=Models&amp;diff=1525</id>
		<title>Models</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=Models&amp;diff=1525"/>
		<updated>2023-10-07T13:33:56Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: /* Gotcha Force Models */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
{{Research | 2| Researches on headers / bodies structures are partially achieved. }}&lt;br /&gt;
&lt;br /&gt;
== Gotcha Force Models ==&lt;br /&gt;
&lt;br /&gt;
Gotcha Force models work as those from the game Super Smash Bros Melee (SSBM) investigated by its [https://smashboards.com/threads/melee-dat-format.292603/ community].&lt;br /&gt;
&lt;br /&gt;
A model is a file format organizating objects and ressources serialized to be used by the &#039;&#039;&#039;H&#039;&#039;&#039;al &#039;&#039;&#039;S&#039;&#039;&#039;ys&#039;&#039;&#039;D&#039;&#039;&#039;olphin (&#039;&#039;&#039;HSD&#039;&#039;&#039;) library. The HSD library is used in several Capcom games.&lt;br /&gt;
&lt;br /&gt;
Ce sont des ressources graphiques structurées de manière hiérarchique. La présence de certaines images dans les modèles montrent à priori l&#039;utilisation de la technique [https://learn.foundry.com/modo/901/content/help/pages/shading_lighting/shader_items/matcap.html matcap].&lt;br /&gt;
Par ailleurs, la librairie prendrait ses sources sur le SDK Dolphin, tel que GX ou encore MTX.&lt;br /&gt;
&lt;br /&gt;
=== Fichiers concernés ===&lt;br /&gt;
L&#039;ensemble des fichiers ayant dans leur titre &#039;&#039;&#039;_mdl&#039;&#039;&#039; sont des fichiers modèles correspondant au format décrit dans cette page. On notera les fichiers [[ARZ (Gotcha Force)|.arz]] qui sont des modèles compressés. Le fichier collision.arc et les fichiers tdc00.arc à tdc09.arc sont aussi des modèles.&lt;br /&gt;
&lt;br /&gt;
Les fichiers modèles se retrouvent aussi dans les pzz des borgs (plxxxx.pzz) en position 004 à 009.&lt;br /&gt;
&lt;br /&gt;
=== HSDRaw ===&lt;br /&gt;
HSDRaw, un éditeur 3D dotnet de ce format est instable sur mon Windows (algoflash). Il est cependant prouvé qu&#039;un edit des _mdl pour commencer à l&#039;offset 0x100 - après le préambule - permet de visualiser le fichier sur HSDRaw et d&#039;avoir le rendu 3D du Borg (click sur le premier dossier JOBJ - puis le JOBJ dedans et double click sur le nœud en violet). Cela devrait aussi permettre d&#039;éditer certaines propriétés ?&lt;br /&gt;
&lt;br /&gt;
== Structure générale ==&lt;br /&gt;
Le format des modèles se découpe en plusieurs blocks. Le préambule fait 0x100 octets au tout début du fichier. Il est souvent absent. Toutes les valeurs sont en unsigned big endian, et le pad est en Nulls bytes (\x00). 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&#039;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&#039;il est peu probable qu&#039;un offset pointe au milieu d&#039;une structure.&lt;br /&gt;
&lt;br /&gt;
L&#039;ensemble des fichiers répondant à ce format on un seul root_node de type SObj (Scene data).&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Préambule&#039;&#039;&#039; : (0x100 octets / 0 octets) ===&lt;br /&gt;
* 4 octets - hsd_header_offset=0x100 (toujours)&lt;br /&gt;
* 4 octets - bones_flags_table_offset=0x20 (toujours) - offset de la liste des flags des armatures&lt;br /&gt;
* 4 octets - bones_table_offset=0xC0 (toujours) - offset de la liste des armatures&lt;br /&gt;
* 20 octets - Pad - (toujours)&lt;br /&gt;
* 4 octets [32] - Inconnu (flags des armatures ?) 1 octet par flag ?&lt;br /&gt;
* 32 octets - Pad - (toujours)&lt;br /&gt;
* 32 octets - armatures ?&lt;br /&gt;
* 32 octets - Pad - (toujours)&lt;br /&gt;
=== &#039;&#039;&#039;HSD Header&#039;&#039;&#039; - (0x20 octets) ===&lt;br /&gt;
* 4 octets - Taille totale du fichier&lt;br /&gt;
* 4 octets - Taille du Data block&lt;br /&gt;
* 4 octets - Nombre d&#039;entrée dans la Table de relocs&lt;br /&gt;
* 4 octets - root0_count&lt;br /&gt;
* 4 octets - root1_count&lt;br /&gt;
* 12 octets - Pad - (toujours)&lt;br /&gt;
=== &#039;&#039;&#039;Data block&#039;&#039;&#039; : ===&lt;br /&gt;
* JOBJ, etc. -&amp;gt; Ces structures sont détaillée plus loin ci-dessous.&lt;br /&gt;
=== &#039;&#039;&#039;Relocation Table&#039;&#039;&#039; : ===&lt;br /&gt;
* Tableau d&#039;offsets de 4 octets - Offsets des structures dans le DB.&lt;br /&gt;
=== &#039;&#039;&#039;Root Nodes (2)&#039;&#039;&#039; : ===&lt;br /&gt;
* Tableau de taille 8 * root0_count&lt;br /&gt;
** 4 octets - root_offset - relatif au DB&lt;br /&gt;
** 4 octets - string_table_offset - relatif à la StringTable&lt;br /&gt;
* Tableau de taille 8 * root1_count&lt;br /&gt;
** 4 octets - root_offset - relatif au DB&lt;br /&gt;
** 4 octets - string_table_offset - relatif à la StringTable&lt;br /&gt;
=== &#039;&#039;&#039;String Table&#039;&#039;&#039; : ===&lt;br /&gt;
* Suite de strings terminées par Null au nombre de root0_count + root1_count&lt;br /&gt;
&lt;br /&gt;
== Structures rencontrées dans le DB ==&lt;br /&gt;
Note : l&#039;arborescence est cumulative sur les transformations pour les relations parents-&amp;gt;enfants&lt;br /&gt;
&lt;br /&gt;
Les Noeuds Racine qui ont pour nom &amp;quot;scene_data&amp;quot; pointent sur un SObj :&lt;br /&gt;
=== &#039;&#039;&#039;SObj&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
* 4 octets - JObjDescs_offsets_list_offset&lt;br /&gt;
* 4 octets - Cameras_list_offset&lt;br /&gt;
* 4 octets - Lights_list_offset&lt;br /&gt;
* 4 octets - Fog&lt;br /&gt;
&lt;br /&gt;
&amp;quot;scene_data&amp;quot; == nom du nœud racine&lt;br /&gt;
JObjDescs_offsets_list_offset, cameras.. pointent sur une liste d&#039;offsets terminée par 4 octets à 0x00.&lt;br /&gt;
lights_list_offset pointe sur des couples (4 octets - LObj_offset ; 4 octets - light_anim_pointer_offset)&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;JObjDesc&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
* 4 octets - root_joint_offset - JObj&lt;br /&gt;
* 4 octets - joint_animations_offset - ?&lt;br /&gt;
* 4 octets - material_animations_offset - ?&lt;br /&gt;
* 4 octets - shape_animations_offset - ?&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;CObj&#039;&#039;&#039; : (0x38 octets) ===&lt;br /&gt;
* 4 octets - flags&lt;br /&gt;
* 4 octets - projection_type - ProjectionTypeEnum&lt;br /&gt;
* 2 octets - viewport_left&lt;br /&gt;
* 2 octets - viewport_right&lt;br /&gt;
* 2 octets - viewport_top&lt;br /&gt;
* 2 octets - viewport_bottom&lt;br /&gt;
* 4 octets - proj_width&lt;br /&gt;
* 4 octets - proj_height&lt;br /&gt;
* 4 octets - eye_offset - WObj&lt;br /&gt;
* 4 octets - target_offset - WObj&lt;br /&gt;
* 4 octets - roll&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - float - near_clip&lt;br /&gt;
* 4 octets - float - far_clip&lt;br /&gt;
* 4 octets - float - field_of_view&lt;br /&gt;
* 4 octets - float - aspect&lt;br /&gt;
Camera object. Note : pour frustrum ou ortho, la structure est différente.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ProjectionTypeEnum&#039;&#039;&#039;:&lt;br /&gt;
** PERSPECTIVE = 1&lt;br /&gt;
** FRUSTRUM = 2&lt;br /&gt;
** ORTHO = 3&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;WObj&#039;&#039;&#039;: (0x14 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - float - v1&lt;br /&gt;
* 4 octets - float - v2&lt;br /&gt;
* 4 octets - float - v3&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
eye / target&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;LObj&#039;&#039;&#039; : (0x1c octets) ===&lt;br /&gt;
* 4 octets - class_name&lt;br /&gt;
* 4 octets - next_offset&lt;br /&gt;
* 2 octets - flags - LObjFlagsEnum&lt;br /&gt;
* 2 octets - attenuation_flags - LObjAttenuationFlagsEnum&lt;br /&gt;
* 1 octet - color_r&lt;br /&gt;
* 1 octet - color_g&lt;br /&gt;
* 1 octet - color_b&lt;br /&gt;
* 1 octet - color_alpha&lt;br /&gt;
* 4 octets - lobj_point_offset - position&lt;br /&gt;
* 4 octets - infinite_data&lt;br /&gt;
* 4 octets - point_spot_data&lt;br /&gt;
light&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;LObjFlagsEnum&#039;&#039;&#039; :&lt;br /&gt;
** LOBJ_AMBIANT = 00 00&lt;br /&gt;
** LOBJ_INFINITE = 00 01&lt;br /&gt;
** LOBJ_POINT = 00 02&lt;br /&gt;
** LOBJ_SPOT = 00 03&lt;br /&gt;
** LOBJ_DIFFUSE = 00 04&lt;br /&gt;
** LOBJ_SPECULAR = 00 08&lt;br /&gt;
** LOBJ_ALPHA = 00 10&lt;br /&gt;
** LOBJ_HIDDEN = 00 20&lt;br /&gt;
** LOBJ_RAW_PARAM = 00 40&lt;br /&gt;
** LOBJ_DIFF_DIRTY = 00 80&lt;br /&gt;
** LOBJ_SPEC_DIRTY = 01 00&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;LObjAttenuationFlagsEnum&#039;&#039;&#039; :&lt;br /&gt;
** LOBJ_LIGHT_ATTN_NONE = 00 00&lt;br /&gt;
** LOBJ_LIGHT_ATTN = 00 01&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;LObjPoint&#039;&#039;&#039; : (0x14 octets) ===&lt;br /&gt;
* 4 octets - class_name&lt;br /&gt;
* 4 octets - float - x&lt;br /&gt;
* 4 octets - float - y&lt;br /&gt;
* 4 octets - float - z&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;LightAnimPointer&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
** 4 octets - next_offset - (LightAnimPointer)&lt;br /&gt;
** 4 octets - light_anim - ?&lt;br /&gt;
** 4 octets - position_anim - ?&lt;br /&gt;
** 4 octets - interst_anim - ?&lt;br /&gt;
Bugs dans HSDRaw - à tester&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;JObj&#039;&#039;&#039; : (0x40 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - flags&lt;br /&gt;
* 4 octets - child_offset (JObj)&lt;br /&gt;
* 4 octets - next_offset (JObj)&lt;br /&gt;
* 4 octets - dobj_offset (DObj)&lt;br /&gt;
* 4 octets [3] - float3 - rotation_xyz&lt;br /&gt;
* 4 octets [3] - float3 - scale_xyz&lt;br /&gt;
* 4 octets [3] - float3 - translation_xyz&lt;br /&gt;
* 4 octets - inverse_world_transform_offset (inverse world transform = Matrice de 4x3)&lt;br /&gt;
* 4 octets - robj_offset&lt;br /&gt;
&lt;br /&gt;
Pointé par les listes dans Root Node scene_data.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;JObjFlagsEnum&#039;&#039;&#039; : (peuvent se cumuler)&lt;br /&gt;
** NULL = 00 00 00 00&lt;br /&gt;
** SKELETON = 00 00 00 01&lt;br /&gt;
** SKELETON_ROOT = 00 00 00 02&lt;br /&gt;
** ENVELOPE_MODEL = 00 00 00 04&lt;br /&gt;
** CLASSICAL_SCALING = 00 00 00 08&lt;br /&gt;
** HIDDEN = 00 00 00 10&lt;br /&gt;
** PTCL = 00 00 00 20&lt;br /&gt;
** MTX_DIRTY = 00 00 00 40&lt;br /&gt;
** LIGHTING = 00 00 00 80&lt;br /&gt;
** TEXGEN = 00 00 01 00&lt;br /&gt;
** BILLBOARD = 00 00 02 00&lt;br /&gt;
** VBILLBOARD = 00 00 04 00&lt;br /&gt;
** HBILLBOARD = 00 00 06 00&lt;br /&gt;
** RBILLBOARD = 00 00 08 00&lt;br /&gt;
** INSTANCE = 00 00 10 00&lt;br /&gt;
** PBILLBOARD = 00 00 20 00&lt;br /&gt;
** SPLINE = 00 00 40 00&lt;br /&gt;
** FLIP_IK = 00 00 80 00&lt;br /&gt;
** SPECULAR = 00 01 00 00&lt;br /&gt;
** USE_QUATERNION = 00 02 00 00&lt;br /&gt;
** OPA = 00 04 00 00&lt;br /&gt;
** XLU = 00 08 00 00&lt;br /&gt;
** TEXEDGE = 00 10 00 00&lt;br /&gt;
** JOINT1 = 00 20 00 00&lt;br /&gt;
** JOINT2 = 00 40 00 00&lt;br /&gt;
** EFFECTOR = 00 60 00 00&lt;br /&gt;
** USER_DEFINED_MTX = 00 80 00 00&lt;br /&gt;
** MTX_INDEPEND_PARENT = 01 00 00 00&lt;br /&gt;
** MTX_INDEPEND_SRT = 02 00 00 00&lt;br /&gt;
** MTX_SCALE_COMPENSATE = 04 00 00 00&lt;br /&gt;
** ROOT_OPA = 10 00 00 00&lt;br /&gt;
** ROOT_XLU = 20 00 00 00&lt;br /&gt;
** ROOT_TEXEDGE = 40 00 00 00&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;InverseWorldTransform&#039;&#039;&#039; : (0x30 octets) ===&lt;br /&gt;
* 4 octets - float - M11&lt;br /&gt;
* 4 octets - float - M12&lt;br /&gt;
* 4 octets - float - M13&lt;br /&gt;
* 4 octets - float - M14&lt;br /&gt;
* 4 octets - float - M21&lt;br /&gt;
* 4 octets - float - M22&lt;br /&gt;
* 4 octets - float - M23&lt;br /&gt;
* 4 octets - float - M24&lt;br /&gt;
* 4 octets - float - M31&lt;br /&gt;
* 4 octets - float - M32&lt;br /&gt;
* 4 octets - float - M33&lt;br /&gt;
* 4 octets - float - M34&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;DObj&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - next_offset - prochain DOBJ&lt;br /&gt;
* 4 octets - mobj_offset - material offset&lt;br /&gt;
* 4 octets - pobj_offset - mesh offset&lt;br /&gt;
Liste chaînée qui permet de récupérer l&#039;ensemble des materials &amp;amp; mesh pour le JObj auquel il est lié.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;MObj&#039;&#039;&#039; : (0x18 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - render_flags - RenderFlagsEnum&lt;br /&gt;
* 4 octets - tobj_offset - offset de texture - peut être invalide s&#039;il n&#039;y a pas de texture pour le material&lt;br /&gt;
* 4 octets - material_offset - couleurs des materials ?&lt;br /&gt;
* 8 octets - PEDesc ?&lt;br /&gt;
&lt;br /&gt;
Contient les textures &amp;amp; informations sur les couleurs des Materials.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;RenderFlagsEnum&#039;&#039;&#039; : (se cumulent)&lt;br /&gt;
** USER = 80 00 00 00&lt;br /&gt;
** CONSTANT = 00 00 00 01&lt;br /&gt;
** VERTEX = 00 00 00 02&lt;br /&gt;
** BOTH = 00 00 00 03&lt;br /&gt;
** DIFFUSE = 00 00 00 04&lt;br /&gt;
** SPECULAR = 00 00 00 08&lt;br /&gt;
** TEX0 = 00 00 00 10&lt;br /&gt;
** TEX1 = 00 00 00 20&lt;br /&gt;
** TEX2 = 00 00 00 40&lt;br /&gt;
** TEX3 = 00 00 00 80&lt;br /&gt;
** TEX4 = 00 00 01 00&lt;br /&gt;
** TEX5 = 00 00 02 00&lt;br /&gt;
** TEX6 = 00 00 04 00&lt;br /&gt;
** TEX7 = 00 00 08 00&lt;br /&gt;
** TOON = 00 00 10 00&lt;br /&gt;
** ALPHA_MAT = 00 00 20 00&lt;br /&gt;
** ALPHA_VTX = 00 00 40 00&lt;br /&gt;
** ALPHA_BOTH = 00 00 60 00&lt;br /&gt;
** ZOFST = 01 00 00 00&lt;br /&gt;
** EFFECT = 02 00 00 00&lt;br /&gt;
** SHADOW = 04 00 00 00&lt;br /&gt;
** ZMODE_ALWAYS = 08 00 00 00&lt;br /&gt;
** DF_ALL = 10 00 00 00&lt;br /&gt;
** NO_ZUPDATE = 20 00 00 00&lt;br /&gt;
** XLU = 40 00 00 00&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;TObj&#039;&#039;&#039; : (0x5c octets) ===&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - tex_map_id - TexMapIdEnum&lt;br /&gt;
* 4 octets - gx_tex_gen_src - GXTexGenSrcEnum&lt;br /&gt;
* 4 octets - float - rx&lt;br /&gt;
* 4 octets - float - ry&lt;br /&gt;
* 4 octets - float - rz&lt;br /&gt;
* 4 octets - float - sx&lt;br /&gt;
* 4 octets - float - sy&lt;br /&gt;
* 4 octets - float - sz&lt;br /&gt;
* 4 octets - float - tx&lt;br /&gt;
* 4 octets - float - ty&lt;br /&gt;
* 4 octets - float - tz&lt;br /&gt;
* 4 octets - wrap_s - WrapEnum&lt;br /&gt;
* 4 octets - wrap_t - WrapEnum&lt;br /&gt;
* 1 octet - w_scale&lt;br /&gt;
* 1 octet - h_scale&lt;br /&gt;
* 2 octets - ?&lt;br /&gt;
* 1 octets - bump_map - (False = 00 ; True = 01)&lt;br /&gt;
* 4 bits - alpha_operation - AlphaOperationEnum&lt;br /&gt;
* 4 bits - color_operation - ColorOperationEnum&lt;br /&gt;
* 1 octet - shadow_lightmap - (False = 00 ; True = 01) (2 octets avec une Enum lightmap limite)&lt;br /&gt;
* 1 bit - ext_lightmap - (False = 0 ; True = 1)&lt;br /&gt;
* 1 bit - ambiant_lightmap - (False = 0 ; True = 1) &lt;br /&gt;
* 1 bit - specular_lightmap - (False = 0 ; True = 1)&lt;br /&gt;
* 1 bit - diffuse_lightmap (False = 0 ; True = 1)&lt;br /&gt;
* 4 bits - coord_type - CoordTypeEnum&lt;br /&gt;
* 4 octets - float - blending - utilisé quand color_operation ou alpha_operation == BLEND&lt;br /&gt;
* 4 octets - mag_filter - MagFilterEnum&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
Informations de Textures. Le TObj contient des informations sur les paramètres d&#039;environnement de textures utilisés pour le rendu graphique ainsi que les offset de l&#039;image et des données de la palette utilisés pour cette texture. Le plus important ici, c&#039;est l&#039;offset d&#039;image et la palette/tlut - si l&#039;image n&#039;est pas indexée (RGBA, CMPR, etc.) alors la structure de description palette/tlut n&#039;est pas utilisée.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;TexMapIdEnum&#039;&#039;&#039; :&lt;br /&gt;
** GX_TEXMAP0 = 00 00 00 00&lt;br /&gt;
** GX_TEXMAP1 = 00 00 00 01&lt;br /&gt;
** GX_TEXMAP2 = 00 00 00 02&lt;br /&gt;
** GX_TEXMAP3 = 00 00 00 03&lt;br /&gt;
** GX_TEXMAP4 = 00 00 00 04&lt;br /&gt;
** GX_TEXMAP5 = 00 00 00 05&lt;br /&gt;
** GX_TEXMAP6 = 00 00 00 06&lt;br /&gt;
** GX_TEXMAP7 = 00 00 00 07&lt;br /&gt;
** GX_MAX_TEXMAP = 00 00 00 08&lt;br /&gt;
** GX_TEXMAP_NULL = 00 00 00 09&lt;br /&gt;
** GX_TEXMAP_DISABLE = 00 00 00 0A&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;GXTexGenSrcEnum&#039;&#039;&#039; :&lt;br /&gt;
** GX_TG_POS = 00 00 00 00&lt;br /&gt;
** GX_TG_NRM = 00 00 00 01&lt;br /&gt;
** GX_TG_BINRM = 00 00 00 02&lt;br /&gt;
** GX_TG_TANGENT = 00 00 00 03&lt;br /&gt;
** GX_TG_TEX0 = 00 00 00 04&lt;br /&gt;
** GX_TG_TEX1 = 00 00 00 05&lt;br /&gt;
** GX_TG_TEX2 = 00 00 00 06&lt;br /&gt;
** GX_TG_TEX3 = 00 00 00 07&lt;br /&gt;
** GX_TG_TEX4 = 00 00 00 08&lt;br /&gt;
** GX_TG_TEX5 = 00 00 00 09&lt;br /&gt;
** GX_TG_TEX6 = 00 00 00 0A&lt;br /&gt;
** GX_TG_TEX7 = 00 00 00 0B&lt;br /&gt;
** GX_TG_TEXCOORD0 = 00 00 00 0C&lt;br /&gt;
** GX_TG_TEXCOORD1 = 00 00 00 0D&lt;br /&gt;
** GX_TG_TEXCOORD2 = 00 00 00 0E&lt;br /&gt;
** GX_TG_TEXCOORD3 = 00 00 00 0F&lt;br /&gt;
** GX_TG_TEXCOORD4 = 00 00 00 10&lt;br /&gt;
** GX_TG_TEXCOORD5 = 00 00 00 11&lt;br /&gt;
** GX_TG_TEXCOORD6 = 00 00 00 12&lt;br /&gt;
** GX_TG_COLOR0 = 00 00 00 13&lt;br /&gt;
** GX_TG_COLOR1 = 00 00 00 14&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;AlphaOperationEnum&#039;&#039;&#039;:&lt;br /&gt;
** NONE = 0X&lt;br /&gt;
** ALPHAMASK = 1X&lt;br /&gt;
** BLEND = 2X&lt;br /&gt;
** MODULATE = 3X&lt;br /&gt;
** REPLACE = 4X&lt;br /&gt;
** PASS = 5X&lt;br /&gt;
** ADD = 6X&lt;br /&gt;
** SUB = 7X&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ColorOperationEnum&#039;&#039;&#039;:&lt;br /&gt;
** NONE = X0&lt;br /&gt;
** ALPHA_MASK = X1&lt;br /&gt;
** RGB_MASK = X2&lt;br /&gt;
** BLEND = X3&lt;br /&gt;
** MODULATE = X4&lt;br /&gt;
** REPLACE = X5&lt;br /&gt;
** PASS = X6&lt;br /&gt;
** ADD = X7&lt;br /&gt;
** SUB = X8&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;CoordTypeEnum&#039;&#039;&#039;:&lt;br /&gt;
** UV = X0&lt;br /&gt;
** REFLECTION = X1&lt;br /&gt;
** HILIGHT = X2&lt;br /&gt;
** SHADOW = X3&lt;br /&gt;
** TOON = X4&lt;br /&gt;
** GRADATION = X5&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MagFilterEnum&#039;&#039;&#039;:&lt;br /&gt;
** GX_NEAR = 00 00 00 00&lt;br /&gt;
** GX_LINEAR = 00 00 00 01&lt;br /&gt;
** GX_NEAR_MIP_NEAR = 00 00 00 02&lt;br /&gt;
** GX_LIN_MIP_NEAR = 00 00 00 03&lt;br /&gt;
** GX_NEAR_MIP_LIN = 00 00 00 04&lt;br /&gt;
** GX_LIN_MIP_LIN = 00 00 00 05&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;WrapEnum&#039;&#039;&#039;:&lt;br /&gt;
** CLAMP = 00 00 00 00&lt;br /&gt;
** REPEAT = 00 00 00 01&lt;br /&gt;
** MIRROR = 00 00 00 02&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Material&#039;&#039;&#039; : (0x14 octets) ===&lt;br /&gt;
* 1 octets - AMB_R - (ambient)&lt;br /&gt;
* 1 octets - AMB_G&lt;br /&gt;
* 1 octets - AMB_B&lt;br /&gt;
* 1 octets - AMB_A&lt;br /&gt;
* 1 octets - DIF_R - (diffuse)&lt;br /&gt;
* 1 octets - DIF_G&lt;br /&gt;
* 1 octets - DIF_B&lt;br /&gt;
* 1 octets - DIF_A&lt;br /&gt;
* 1 octets - SPC_R - (specular)&lt;br /&gt;
* 1 octets - SPC_G&lt;br /&gt;
* 1 octets - SPC_B&lt;br /&gt;
* 1 octets - SPC_A&lt;br /&gt;
* 4 octets - float - alpha&lt;br /&gt;
* 4 octets - float - shininess&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;PObj&#039;&#039;&#039; : (0x18 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - next_offset - pobj&lt;br /&gt;
* 4 octets - vertex_attr_list_offset&lt;br /&gt;
* 2 octets - Flags - PObjFlagsEnum&lt;br /&gt;
* 2 octets - display_list_size - number of 0x20 (32) byte blocks occupied by display list data&lt;br /&gt;
* 4 octets - display_list_offset&lt;br /&gt;
* 4 octets - weight_list_offset - ? verifier qu&#039;on retrouve bien le tableau d&#039;envelope_weights à cet offset&lt;br /&gt;
&lt;br /&gt;
Comme l&#039;indique next_offset, il s&#039;agit d&#039;une liste de meshs à afficher pour un material donné référencé par un dobj. PObj contient les offsets de vertex attributes / display list / joint weight list ce qui suffit et permet d’interpréter et traiter les coordonnées de vertices, normals &amp;amp; textures.&lt;br /&gt;
&lt;br /&gt;
Les attributs vertex sont les plus important - les parametres specifiés contrôlent tout : du format, de la taille des données de chaque vertex, normal et coordonnées de textures et comment ces valeurs sont dimensionnées (scaled) par rapport à la présence et la taille de chaque valeur d&#039;index qui apparaît dans la display list information.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PObjFlagsEnum&#039;&#039;&#039; :&lt;br /&gt;
** Inconnu0 = 00 01&lt;br /&gt;
** Inconnu1 = 00 02&lt;br /&gt;
** ANIM = 00 08&lt;br /&gt;
** SHAPE_ANIM = 10 00&lt;br /&gt;
** ENVELOPE = 20 00&lt;br /&gt;
** CULLBACK = 40 00&lt;br /&gt;
** CULLFRONT = 80 00&lt;br /&gt;
&lt;br /&gt;
=== EnvelopeWeights : (0x? octets) ===&lt;br /&gt;
* 4 octets - envelope_count&lt;br /&gt;
* [envelope_count]:&lt;br /&gt;
** 4 octets - float - weight&lt;br /&gt;
** 4 octets - pad ?&lt;br /&gt;
* 4 octets - jobj_list_offset&lt;br /&gt;
&lt;br /&gt;
=== not verified yet ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;IMAGE_HEADER&#039;&#039;&#039; :&lt;br /&gt;
** 4 octets - image_offset - image data&lt;br /&gt;
** 2 octets - width&lt;br /&gt;
** 2 octets - height&lt;br /&gt;
** 4 octets - image_format&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PALETTE_HEADER&#039;&#039;&#039; : (0x10)&lt;br /&gt;
** 4 octets - palette_offset - palette data&lt;br /&gt;
** 4 octets - palette_format&lt;br /&gt;
** 4 octets - Inconnu&lt;br /&gt;
** 2 octets - color_count&lt;br /&gt;
** 2 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
image_offset et palette_offset sont souvent partagés par plusieurs textures - savoir ça permet de retrouver toutes les informations sur les images des textures (largeur, hauteur, format), ainsi que le format et le nombre de couleurs de la palette/tlut.&lt;br /&gt;
&lt;br /&gt;
Le format d&#039;image ne détermine pas le nombre total de couleurs de la palette qu&#039;elle utilisent. Par exemple, une image indexée sur 8 bits aurait un maximum de 256 couleurs mais seulement 136 ou 221 couleurs sont actuellement utilisées. De la sorte, la palette n&#039;utilisera pas la taille totale qu&#039;elle devrait utiliser.&lt;br /&gt;
&lt;br /&gt;
Les images suivent la structure généralement utilisée par la GameCube :&lt;br /&gt;
&lt;br /&gt;
IMAGE FORMATS :&lt;br /&gt;
* case 0: //i4&lt;br /&gt;
* case 1: //i8&lt;br /&gt;
* case 2: //i4a4&lt;br /&gt;
* case 3: //i8a8&lt;br /&gt;
* case 4: //r5g6b5&lt;br /&gt;
* case 5: //rgb5a3&lt;br /&gt;
* case 6: //r8g8b8a8&lt;br /&gt;
* case 8: //index4&lt;br /&gt;
* case 9: //index8&lt;br /&gt;
* case 0xa: //index14x2&lt;br /&gt;
* case 0xe: //s3tc1&lt;br /&gt;
&lt;br /&gt;
Les formats indexés utilisent aussi les informations de palettes/tlut et les données peuvent apparaître en plusieurs formats :&lt;br /&gt;
&lt;br /&gt;
PALETTE FORMATS :&lt;br /&gt;
* case 0: //ia8&lt;br /&gt;
* case 1: //r5g6b5&lt;br /&gt;
* case 2: //rgb5a3&lt;br /&gt;
&lt;br /&gt;
---&amp;gt; &amp;quot;Joint Data - Accessing Geometry, Mesh, and Vertex Attributes&amp;quot; https://smashboards.com/threads/melee-dat-format.292603/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
trad a revoir à partir de là, il faut investiguer le rendu 3D sur GameCube pour mieux comprendre&lt;br /&gt;
&lt;br /&gt;
// déclaration d&#039;un vertex et attribute information&lt;br /&gt;
// attr, type, cnt, data_type, flags?, file_offset&lt;br /&gt;
* ATTR_DATA&lt;br /&gt;
** 4 octets - GXAttr     vtx_attr_offset - attr&lt;br /&gt;
** 4 octets - GXAttrType vtx_attr_type   - index_type&lt;br /&gt;
** 4 octets - GXCompCnt  comp_cnt        - cnt&lt;br /&gt;
** 4 octets - GXCompType comp_type       - data_type	&lt;br /&gt;
** 1 octets - scale&lt;br /&gt;
** 1 octets - Inconnu&lt;br /&gt;
** 2 octets - vtx_stride&lt;br /&gt;
** 2 octets - data_offset&lt;br /&gt;
&lt;br /&gt;
vertex_attr_offset pointe sur une liste d&#039;attributs de vertex. Leur nombre n&#039;est pas donné. Les données dans cette structure suivent les informations et les types conçus par l&#039;architecture GameCube/WII et son API. La liste est terminée par une valeur spécifique de vtx_attr qui signale la fin de cette liste. Avec un accès à la doku SDK, il serait fortement conseillé de lire la section à propos des &amp;quot;vertex attributes and other specifications&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
La valeur de vtx_attr determine le type de donnée que cet attribut désigne et peut indiquer un nombre de types natifs utilisés utilisés pour passer les données entre les interfaces logicielles et matérielles.&lt;br /&gt;
&lt;br /&gt;
Les valeures possibles sont les suivantes :&lt;br /&gt;
* enum GXAttr (4 octets)&lt;br /&gt;
** GX_VA_PNMTXIDX = 0,    // position/normal matrix index&lt;br /&gt;
** GX_VA_TEX0MTXIDX,      // texture 0 matrix index&lt;br /&gt;
** GX_VA_TEX1MTXIDX,      // texture 1 matrix index&lt;br /&gt;
** GX_VA_TEX2MTXIDX,      // texture 2 matrix index&lt;br /&gt;
** GX_VA_TEX3MTXIDX,      // texture 3 matrix index&lt;br /&gt;
** GX_VA_TEX4MTXIDX,      // texture 4 matrix index&lt;br /&gt;
** GX_VA_TEX5MTXIDX,      // texture 5 matrix index&lt;br /&gt;
** GX_VA_TEX6MTXIDX,      // texture 6 matrix index&lt;br /&gt;
** GX_VA_TEX7MTXIDX,      // texture 7 matrix index&lt;br /&gt;
** GX_VA_POS      = 9,    // position&lt;br /&gt;
** GX_VA_NRM,             // normal&lt;br /&gt;
** GX_VA_CLR0,            // color 0&lt;br /&gt;
** GX_VA_CLR1,            // color 1&lt;br /&gt;
** GX_VA_TEX0,            // input texture coordinate 0&lt;br /&gt;
** GX_VA_TEX1,            // input texture coordinate 1&lt;br /&gt;
** GX_VA_TEX2,            // input texture coordinate 2&lt;br /&gt;
** GX_VA_TEX3,            // input texture coordinate 3&lt;br /&gt;
** GX_VA_TEX4,            // input texture coordinate 4&lt;br /&gt;
** GX_VA_TEX5,            // input texture coordinate 5&lt;br /&gt;
** GX_VA_TEX6,            // input texture coordinate 6&lt;br /&gt;
** GX_VA_TEX7,            // input texture coordinate 7&lt;br /&gt;
&lt;br /&gt;
** GX_POS_MTX_ARRAY,      // position matrix array pointer&lt;br /&gt;
** GX_NRM_MTX_ARRAY,      // normal matrix array pointer&lt;br /&gt;
** GX_TEX_MTX_ARRAY,      // texture matrix array pointer&lt;br /&gt;
** GX_LIGHT_ARRAY,        // light parameter array pointer&lt;br /&gt;
** GX_VA_NBT,             // normal, bi-normal, tangent &lt;br /&gt;
** GX_VA_MAX_ATTR,        // maximum number of vertex attributes&lt;br /&gt;
&lt;br /&gt;
** GX_VA_NULL     = 0xff  // NULL attribute (to mark end of lists)&lt;br /&gt;
&lt;br /&gt;
Toutes les données nécessaires pour représenter un mesh peuvent être spécifiées et indexées d&#039;une manière ou d&#039;une autre. De même, GX_VA_TEX0MTXIDX, GX_VA_CLR0, et autres sont aussi possibles - les valeurs les plus fréquentes dans les données SSBM sont : GX_VA_PNMTXIDX, GX_VA_POS, GX_VA_NRM, et GX_VA_TEX0. Which is to be expected as joint matrices, vertex positions/normals, and texture coordinates respectively are probably the most basic of elements needed to display a texture mesh, whether static or animated.&lt;br /&gt;
&lt;br /&gt;
When the value of vtx_attr == GX_VA_NULL (0xFF), the end of the vertex attribute array has been reached.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The vtx_attr_type values is actually associated with how the value is indexed, and can thus also determine the size of the index value within the display list data.&lt;br /&gt;
&lt;br /&gt;
* 4 octets - enum GXAttrType&lt;br /&gt;
** GX_NONE    = 0,&lt;br /&gt;
** GX_DIRECT,&lt;br /&gt;
** GX_INDEX8,&lt;br /&gt;
** GX_INDEX16&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Structures COLL_DATA : (données de collisions)&lt;br /&gt;
** 4 octets - vertex_offset (2 float par entrée correspondant à des données 2D probablement)&lt;br /&gt;
** 4 octets - vertex_count&lt;br /&gt;
** 4 octets - index_offset&lt;br /&gt;
** 4 octets - index_count&lt;br /&gt;
** 4 octets [5] - tableau inconnu&lt;br /&gt;
*** 2 octets - index_start&lt;br /&gt;
*** 2 octets - index_count&lt;br /&gt;
** 4 octets - Inconnu&lt;br /&gt;
** 4 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
[[Category:Implementations]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=Models&amp;diff=1524</id>
		<title>Models</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=Models&amp;diff=1524"/>
		<updated>2023-10-07T13:29:46Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: /* Gotcha Force Models */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
{{Research | 2| Researches on headers / bodies structures are partially achieved. }}&lt;br /&gt;
&lt;br /&gt;
== Gotcha Force Models ==&lt;br /&gt;
&lt;br /&gt;
Gotcha Force models work as those from the game Super Smash Bros Melee (SSBM) investigated by its [https://smashboards.com/threads/melee-dat-format.292603/ community].&lt;br /&gt;
&lt;br /&gt;
Un modèle est un format de fichier organisant des objets et des ressources sérialisés pour être utilisés par la librairie &#039;&#039;&#039;H&#039;&#039;&#039;al &#039;&#039;&#039;S&#039;&#039;&#039;ys&#039;&#039;&#039;D&#039;&#039;&#039;olphin (&#039;&#039;&#039;HSD&#039;&#039;&#039;), une librairie utilisée dans plusieurs jeux par Capcom. Ce sont des ressources graphiques structurées de manière hiérarchique. La présence de certaines images dans les modèles montrent à priori l&#039;utilisation de la technique [https://learn.foundry.com/modo/901/content/help/pages/shading_lighting/shader_items/matcap.html matcap].&lt;br /&gt;
Par ailleurs, la librairie prendrait ses sources sur le SDK Dolphin, tel que GX ou encore MTX.&lt;br /&gt;
&lt;br /&gt;
=== Fichiers concernés ===&lt;br /&gt;
L&#039;ensemble des fichiers ayant dans leur titre &#039;&#039;&#039;_mdl&#039;&#039;&#039; sont des fichiers modèles correspondant au format décrit dans cette page. On notera les fichiers [[ARZ (Gotcha Force)|.arz]] qui sont des modèles compressés. Le fichier collision.arc et les fichiers tdc00.arc à tdc09.arc sont aussi des modèles.&lt;br /&gt;
&lt;br /&gt;
Les fichiers modèles se retrouvent aussi dans les pzz des borgs (plxxxx.pzz) en position 004 à 009.&lt;br /&gt;
&lt;br /&gt;
=== HSDRaw ===&lt;br /&gt;
HSDRaw, un éditeur 3D dotnet de ce format est instable sur mon Windows (algoflash). Il est cependant prouvé qu&#039;un edit des _mdl pour commencer à l&#039;offset 0x100 - après le préambule - permet de visualiser le fichier sur HSDRaw et d&#039;avoir le rendu 3D du Borg (click sur le premier dossier JOBJ - puis le JOBJ dedans et double click sur le nœud en violet). Cela devrait aussi permettre d&#039;éditer certaines propriétés ?&lt;br /&gt;
&lt;br /&gt;
== Structure générale ==&lt;br /&gt;
Le format des modèles se découpe en plusieurs blocks. Le préambule fait 0x100 octets au tout début du fichier. Il est souvent absent. Toutes les valeurs sont en unsigned big endian, et le pad est en Nulls bytes (\x00). 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&#039;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&#039;il est peu probable qu&#039;un offset pointe au milieu d&#039;une structure.&lt;br /&gt;
&lt;br /&gt;
L&#039;ensemble des fichiers répondant à ce format on un seul root_node de type SObj (Scene data).&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Préambule&#039;&#039;&#039; : (0x100 octets / 0 octets) ===&lt;br /&gt;
* 4 octets - hsd_header_offset=0x100 (toujours)&lt;br /&gt;
* 4 octets - bones_flags_table_offset=0x20 (toujours) - offset de la liste des flags des armatures&lt;br /&gt;
* 4 octets - bones_table_offset=0xC0 (toujours) - offset de la liste des armatures&lt;br /&gt;
* 20 octets - Pad - (toujours)&lt;br /&gt;
* 4 octets [32] - Inconnu (flags des armatures ?) 1 octet par flag ?&lt;br /&gt;
* 32 octets - Pad - (toujours)&lt;br /&gt;
* 32 octets - armatures ?&lt;br /&gt;
* 32 octets - Pad - (toujours)&lt;br /&gt;
=== &#039;&#039;&#039;HSD Header&#039;&#039;&#039; - (0x20 octets) ===&lt;br /&gt;
* 4 octets - Taille totale du fichier&lt;br /&gt;
* 4 octets - Taille du Data block&lt;br /&gt;
* 4 octets - Nombre d&#039;entrée dans la Table de relocs&lt;br /&gt;
* 4 octets - root0_count&lt;br /&gt;
* 4 octets - root1_count&lt;br /&gt;
* 12 octets - Pad - (toujours)&lt;br /&gt;
=== &#039;&#039;&#039;Data block&#039;&#039;&#039; : ===&lt;br /&gt;
* JOBJ, etc. -&amp;gt; Ces structures sont détaillée plus loin ci-dessous.&lt;br /&gt;
=== &#039;&#039;&#039;Relocation Table&#039;&#039;&#039; : ===&lt;br /&gt;
* Tableau d&#039;offsets de 4 octets - Offsets des structures dans le DB.&lt;br /&gt;
=== &#039;&#039;&#039;Root Nodes (2)&#039;&#039;&#039; : ===&lt;br /&gt;
* Tableau de taille 8 * root0_count&lt;br /&gt;
** 4 octets - root_offset - relatif au DB&lt;br /&gt;
** 4 octets - string_table_offset - relatif à la StringTable&lt;br /&gt;
* Tableau de taille 8 * root1_count&lt;br /&gt;
** 4 octets - root_offset - relatif au DB&lt;br /&gt;
** 4 octets - string_table_offset - relatif à la StringTable&lt;br /&gt;
=== &#039;&#039;&#039;String Table&#039;&#039;&#039; : ===&lt;br /&gt;
* Suite de strings terminées par Null au nombre de root0_count + root1_count&lt;br /&gt;
&lt;br /&gt;
== Structures rencontrées dans le DB ==&lt;br /&gt;
Note : l&#039;arborescence est cumulative sur les transformations pour les relations parents-&amp;gt;enfants&lt;br /&gt;
&lt;br /&gt;
Les Noeuds Racine qui ont pour nom &amp;quot;scene_data&amp;quot; pointent sur un SObj :&lt;br /&gt;
=== &#039;&#039;&#039;SObj&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
* 4 octets - JObjDescs_offsets_list_offset&lt;br /&gt;
* 4 octets - Cameras_list_offset&lt;br /&gt;
* 4 octets - Lights_list_offset&lt;br /&gt;
* 4 octets - Fog&lt;br /&gt;
&lt;br /&gt;
&amp;quot;scene_data&amp;quot; == nom du nœud racine&lt;br /&gt;
JObjDescs_offsets_list_offset, cameras.. pointent sur une liste d&#039;offsets terminée par 4 octets à 0x00.&lt;br /&gt;
lights_list_offset pointe sur des couples (4 octets - LObj_offset ; 4 octets - light_anim_pointer_offset)&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;JObjDesc&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
* 4 octets - root_joint_offset - JObj&lt;br /&gt;
* 4 octets - joint_animations_offset - ?&lt;br /&gt;
* 4 octets - material_animations_offset - ?&lt;br /&gt;
* 4 octets - shape_animations_offset - ?&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;CObj&#039;&#039;&#039; : (0x38 octets) ===&lt;br /&gt;
* 4 octets - flags&lt;br /&gt;
* 4 octets - projection_type - ProjectionTypeEnum&lt;br /&gt;
* 2 octets - viewport_left&lt;br /&gt;
* 2 octets - viewport_right&lt;br /&gt;
* 2 octets - viewport_top&lt;br /&gt;
* 2 octets - viewport_bottom&lt;br /&gt;
* 4 octets - proj_width&lt;br /&gt;
* 4 octets - proj_height&lt;br /&gt;
* 4 octets - eye_offset - WObj&lt;br /&gt;
* 4 octets - target_offset - WObj&lt;br /&gt;
* 4 octets - roll&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - float - near_clip&lt;br /&gt;
* 4 octets - float - far_clip&lt;br /&gt;
* 4 octets - float - field_of_view&lt;br /&gt;
* 4 octets - float - aspect&lt;br /&gt;
Camera object. Note : pour frustrum ou ortho, la structure est différente.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ProjectionTypeEnum&#039;&#039;&#039;:&lt;br /&gt;
** PERSPECTIVE = 1&lt;br /&gt;
** FRUSTRUM = 2&lt;br /&gt;
** ORTHO = 3&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;WObj&#039;&#039;&#039;: (0x14 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - float - v1&lt;br /&gt;
* 4 octets - float - v2&lt;br /&gt;
* 4 octets - float - v3&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
eye / target&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;LObj&#039;&#039;&#039; : (0x1c octets) ===&lt;br /&gt;
* 4 octets - class_name&lt;br /&gt;
* 4 octets - next_offset&lt;br /&gt;
* 2 octets - flags - LObjFlagsEnum&lt;br /&gt;
* 2 octets - attenuation_flags - LObjAttenuationFlagsEnum&lt;br /&gt;
* 1 octet - color_r&lt;br /&gt;
* 1 octet - color_g&lt;br /&gt;
* 1 octet - color_b&lt;br /&gt;
* 1 octet - color_alpha&lt;br /&gt;
* 4 octets - lobj_point_offset - position&lt;br /&gt;
* 4 octets - infinite_data&lt;br /&gt;
* 4 octets - point_spot_data&lt;br /&gt;
light&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;LObjFlagsEnum&#039;&#039;&#039; :&lt;br /&gt;
** LOBJ_AMBIANT = 00 00&lt;br /&gt;
** LOBJ_INFINITE = 00 01&lt;br /&gt;
** LOBJ_POINT = 00 02&lt;br /&gt;
** LOBJ_SPOT = 00 03&lt;br /&gt;
** LOBJ_DIFFUSE = 00 04&lt;br /&gt;
** LOBJ_SPECULAR = 00 08&lt;br /&gt;
** LOBJ_ALPHA = 00 10&lt;br /&gt;
** LOBJ_HIDDEN = 00 20&lt;br /&gt;
** LOBJ_RAW_PARAM = 00 40&lt;br /&gt;
** LOBJ_DIFF_DIRTY = 00 80&lt;br /&gt;
** LOBJ_SPEC_DIRTY = 01 00&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;LObjAttenuationFlagsEnum&#039;&#039;&#039; :&lt;br /&gt;
** LOBJ_LIGHT_ATTN_NONE = 00 00&lt;br /&gt;
** LOBJ_LIGHT_ATTN = 00 01&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;LObjPoint&#039;&#039;&#039; : (0x14 octets) ===&lt;br /&gt;
* 4 octets - class_name&lt;br /&gt;
* 4 octets - float - x&lt;br /&gt;
* 4 octets - float - y&lt;br /&gt;
* 4 octets - float - z&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;LightAnimPointer&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
** 4 octets - next_offset - (LightAnimPointer)&lt;br /&gt;
** 4 octets - light_anim - ?&lt;br /&gt;
** 4 octets - position_anim - ?&lt;br /&gt;
** 4 octets - interst_anim - ?&lt;br /&gt;
Bugs dans HSDRaw - à tester&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;JObj&#039;&#039;&#039; : (0x40 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - flags&lt;br /&gt;
* 4 octets - child_offset (JObj)&lt;br /&gt;
* 4 octets - next_offset (JObj)&lt;br /&gt;
* 4 octets - dobj_offset (DObj)&lt;br /&gt;
* 4 octets [3] - float3 - rotation_xyz&lt;br /&gt;
* 4 octets [3] - float3 - scale_xyz&lt;br /&gt;
* 4 octets [3] - float3 - translation_xyz&lt;br /&gt;
* 4 octets - inverse_world_transform_offset (inverse world transform = Matrice de 4x3)&lt;br /&gt;
* 4 octets - robj_offset&lt;br /&gt;
&lt;br /&gt;
Pointé par les listes dans Root Node scene_data.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;JObjFlagsEnum&#039;&#039;&#039; : (peuvent se cumuler)&lt;br /&gt;
** NULL = 00 00 00 00&lt;br /&gt;
** SKELETON = 00 00 00 01&lt;br /&gt;
** SKELETON_ROOT = 00 00 00 02&lt;br /&gt;
** ENVELOPE_MODEL = 00 00 00 04&lt;br /&gt;
** CLASSICAL_SCALING = 00 00 00 08&lt;br /&gt;
** HIDDEN = 00 00 00 10&lt;br /&gt;
** PTCL = 00 00 00 20&lt;br /&gt;
** MTX_DIRTY = 00 00 00 40&lt;br /&gt;
** LIGHTING = 00 00 00 80&lt;br /&gt;
** TEXGEN = 00 00 01 00&lt;br /&gt;
** BILLBOARD = 00 00 02 00&lt;br /&gt;
** VBILLBOARD = 00 00 04 00&lt;br /&gt;
** HBILLBOARD = 00 00 06 00&lt;br /&gt;
** RBILLBOARD = 00 00 08 00&lt;br /&gt;
** INSTANCE = 00 00 10 00&lt;br /&gt;
** PBILLBOARD = 00 00 20 00&lt;br /&gt;
** SPLINE = 00 00 40 00&lt;br /&gt;
** FLIP_IK = 00 00 80 00&lt;br /&gt;
** SPECULAR = 00 01 00 00&lt;br /&gt;
** USE_QUATERNION = 00 02 00 00&lt;br /&gt;
** OPA = 00 04 00 00&lt;br /&gt;
** XLU = 00 08 00 00&lt;br /&gt;
** TEXEDGE = 00 10 00 00&lt;br /&gt;
** JOINT1 = 00 20 00 00&lt;br /&gt;
** JOINT2 = 00 40 00 00&lt;br /&gt;
** EFFECTOR = 00 60 00 00&lt;br /&gt;
** USER_DEFINED_MTX = 00 80 00 00&lt;br /&gt;
** MTX_INDEPEND_PARENT = 01 00 00 00&lt;br /&gt;
** MTX_INDEPEND_SRT = 02 00 00 00&lt;br /&gt;
** MTX_SCALE_COMPENSATE = 04 00 00 00&lt;br /&gt;
** ROOT_OPA = 10 00 00 00&lt;br /&gt;
** ROOT_XLU = 20 00 00 00&lt;br /&gt;
** ROOT_TEXEDGE = 40 00 00 00&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;InverseWorldTransform&#039;&#039;&#039; : (0x30 octets) ===&lt;br /&gt;
* 4 octets - float - M11&lt;br /&gt;
* 4 octets - float - M12&lt;br /&gt;
* 4 octets - float - M13&lt;br /&gt;
* 4 octets - float - M14&lt;br /&gt;
* 4 octets - float - M21&lt;br /&gt;
* 4 octets - float - M22&lt;br /&gt;
* 4 octets - float - M23&lt;br /&gt;
* 4 octets - float - M24&lt;br /&gt;
* 4 octets - float - M31&lt;br /&gt;
* 4 octets - float - M32&lt;br /&gt;
* 4 octets - float - M33&lt;br /&gt;
* 4 octets - float - M34&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;DObj&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - next_offset - prochain DOBJ&lt;br /&gt;
* 4 octets - mobj_offset - material offset&lt;br /&gt;
* 4 octets - pobj_offset - mesh offset&lt;br /&gt;
Liste chaînée qui permet de récupérer l&#039;ensemble des materials &amp;amp; mesh pour le JObj auquel il est lié.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;MObj&#039;&#039;&#039; : (0x18 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - render_flags - RenderFlagsEnum&lt;br /&gt;
* 4 octets - tobj_offset - offset de texture - peut être invalide s&#039;il n&#039;y a pas de texture pour le material&lt;br /&gt;
* 4 octets - material_offset - couleurs des materials ?&lt;br /&gt;
* 8 octets - PEDesc ?&lt;br /&gt;
&lt;br /&gt;
Contient les textures &amp;amp; informations sur les couleurs des Materials.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;RenderFlagsEnum&#039;&#039;&#039; : (se cumulent)&lt;br /&gt;
** USER = 80 00 00 00&lt;br /&gt;
** CONSTANT = 00 00 00 01&lt;br /&gt;
** VERTEX = 00 00 00 02&lt;br /&gt;
** BOTH = 00 00 00 03&lt;br /&gt;
** DIFFUSE = 00 00 00 04&lt;br /&gt;
** SPECULAR = 00 00 00 08&lt;br /&gt;
** TEX0 = 00 00 00 10&lt;br /&gt;
** TEX1 = 00 00 00 20&lt;br /&gt;
** TEX2 = 00 00 00 40&lt;br /&gt;
** TEX3 = 00 00 00 80&lt;br /&gt;
** TEX4 = 00 00 01 00&lt;br /&gt;
** TEX5 = 00 00 02 00&lt;br /&gt;
** TEX6 = 00 00 04 00&lt;br /&gt;
** TEX7 = 00 00 08 00&lt;br /&gt;
** TOON = 00 00 10 00&lt;br /&gt;
** ALPHA_MAT = 00 00 20 00&lt;br /&gt;
** ALPHA_VTX = 00 00 40 00&lt;br /&gt;
** ALPHA_BOTH = 00 00 60 00&lt;br /&gt;
** ZOFST = 01 00 00 00&lt;br /&gt;
** EFFECT = 02 00 00 00&lt;br /&gt;
** SHADOW = 04 00 00 00&lt;br /&gt;
** ZMODE_ALWAYS = 08 00 00 00&lt;br /&gt;
** DF_ALL = 10 00 00 00&lt;br /&gt;
** NO_ZUPDATE = 20 00 00 00&lt;br /&gt;
** XLU = 40 00 00 00&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;TObj&#039;&#039;&#039; : (0x5c octets) ===&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - tex_map_id - TexMapIdEnum&lt;br /&gt;
* 4 octets - gx_tex_gen_src - GXTexGenSrcEnum&lt;br /&gt;
* 4 octets - float - rx&lt;br /&gt;
* 4 octets - float - ry&lt;br /&gt;
* 4 octets - float - rz&lt;br /&gt;
* 4 octets - float - sx&lt;br /&gt;
* 4 octets - float - sy&lt;br /&gt;
* 4 octets - float - sz&lt;br /&gt;
* 4 octets - float - tx&lt;br /&gt;
* 4 octets - float - ty&lt;br /&gt;
* 4 octets - float - tz&lt;br /&gt;
* 4 octets - wrap_s - WrapEnum&lt;br /&gt;
* 4 octets - wrap_t - WrapEnum&lt;br /&gt;
* 1 octet - w_scale&lt;br /&gt;
* 1 octet - h_scale&lt;br /&gt;
* 2 octets - ?&lt;br /&gt;
* 1 octets - bump_map - (False = 00 ; True = 01)&lt;br /&gt;
* 4 bits - alpha_operation - AlphaOperationEnum&lt;br /&gt;
* 4 bits - color_operation - ColorOperationEnum&lt;br /&gt;
* 1 octet - shadow_lightmap - (False = 00 ; True = 01) (2 octets avec une Enum lightmap limite)&lt;br /&gt;
* 1 bit - ext_lightmap - (False = 0 ; True = 1)&lt;br /&gt;
* 1 bit - ambiant_lightmap - (False = 0 ; True = 1) &lt;br /&gt;
* 1 bit - specular_lightmap - (False = 0 ; True = 1)&lt;br /&gt;
* 1 bit - diffuse_lightmap (False = 0 ; True = 1)&lt;br /&gt;
* 4 bits - coord_type - CoordTypeEnum&lt;br /&gt;
* 4 octets - float - blending - utilisé quand color_operation ou alpha_operation == BLEND&lt;br /&gt;
* 4 octets - mag_filter - MagFilterEnum&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
Informations de Textures. Le TObj contient des informations sur les paramètres d&#039;environnement de textures utilisés pour le rendu graphique ainsi que les offset de l&#039;image et des données de la palette utilisés pour cette texture. Le plus important ici, c&#039;est l&#039;offset d&#039;image et la palette/tlut - si l&#039;image n&#039;est pas indexée (RGBA, CMPR, etc.) alors la structure de description palette/tlut n&#039;est pas utilisée.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;TexMapIdEnum&#039;&#039;&#039; :&lt;br /&gt;
** GX_TEXMAP0 = 00 00 00 00&lt;br /&gt;
** GX_TEXMAP1 = 00 00 00 01&lt;br /&gt;
** GX_TEXMAP2 = 00 00 00 02&lt;br /&gt;
** GX_TEXMAP3 = 00 00 00 03&lt;br /&gt;
** GX_TEXMAP4 = 00 00 00 04&lt;br /&gt;
** GX_TEXMAP5 = 00 00 00 05&lt;br /&gt;
** GX_TEXMAP6 = 00 00 00 06&lt;br /&gt;
** GX_TEXMAP7 = 00 00 00 07&lt;br /&gt;
** GX_MAX_TEXMAP = 00 00 00 08&lt;br /&gt;
** GX_TEXMAP_NULL = 00 00 00 09&lt;br /&gt;
** GX_TEXMAP_DISABLE = 00 00 00 0A&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;GXTexGenSrcEnum&#039;&#039;&#039; :&lt;br /&gt;
** GX_TG_POS = 00 00 00 00&lt;br /&gt;
** GX_TG_NRM = 00 00 00 01&lt;br /&gt;
** GX_TG_BINRM = 00 00 00 02&lt;br /&gt;
** GX_TG_TANGENT = 00 00 00 03&lt;br /&gt;
** GX_TG_TEX0 = 00 00 00 04&lt;br /&gt;
** GX_TG_TEX1 = 00 00 00 05&lt;br /&gt;
** GX_TG_TEX2 = 00 00 00 06&lt;br /&gt;
** GX_TG_TEX3 = 00 00 00 07&lt;br /&gt;
** GX_TG_TEX4 = 00 00 00 08&lt;br /&gt;
** GX_TG_TEX5 = 00 00 00 09&lt;br /&gt;
** GX_TG_TEX6 = 00 00 00 0A&lt;br /&gt;
** GX_TG_TEX7 = 00 00 00 0B&lt;br /&gt;
** GX_TG_TEXCOORD0 = 00 00 00 0C&lt;br /&gt;
** GX_TG_TEXCOORD1 = 00 00 00 0D&lt;br /&gt;
** GX_TG_TEXCOORD2 = 00 00 00 0E&lt;br /&gt;
** GX_TG_TEXCOORD3 = 00 00 00 0F&lt;br /&gt;
** GX_TG_TEXCOORD4 = 00 00 00 10&lt;br /&gt;
** GX_TG_TEXCOORD5 = 00 00 00 11&lt;br /&gt;
** GX_TG_TEXCOORD6 = 00 00 00 12&lt;br /&gt;
** GX_TG_COLOR0 = 00 00 00 13&lt;br /&gt;
** GX_TG_COLOR1 = 00 00 00 14&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;AlphaOperationEnum&#039;&#039;&#039;:&lt;br /&gt;
** NONE = 0X&lt;br /&gt;
** ALPHAMASK = 1X&lt;br /&gt;
** BLEND = 2X&lt;br /&gt;
** MODULATE = 3X&lt;br /&gt;
** REPLACE = 4X&lt;br /&gt;
** PASS = 5X&lt;br /&gt;
** ADD = 6X&lt;br /&gt;
** SUB = 7X&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ColorOperationEnum&#039;&#039;&#039;:&lt;br /&gt;
** NONE = X0&lt;br /&gt;
** ALPHA_MASK = X1&lt;br /&gt;
** RGB_MASK = X2&lt;br /&gt;
** BLEND = X3&lt;br /&gt;
** MODULATE = X4&lt;br /&gt;
** REPLACE = X5&lt;br /&gt;
** PASS = X6&lt;br /&gt;
** ADD = X7&lt;br /&gt;
** SUB = X8&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;CoordTypeEnum&#039;&#039;&#039;:&lt;br /&gt;
** UV = X0&lt;br /&gt;
** REFLECTION = X1&lt;br /&gt;
** HILIGHT = X2&lt;br /&gt;
** SHADOW = X3&lt;br /&gt;
** TOON = X4&lt;br /&gt;
** GRADATION = X5&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MagFilterEnum&#039;&#039;&#039;:&lt;br /&gt;
** GX_NEAR = 00 00 00 00&lt;br /&gt;
** GX_LINEAR = 00 00 00 01&lt;br /&gt;
** GX_NEAR_MIP_NEAR = 00 00 00 02&lt;br /&gt;
** GX_LIN_MIP_NEAR = 00 00 00 03&lt;br /&gt;
** GX_NEAR_MIP_LIN = 00 00 00 04&lt;br /&gt;
** GX_LIN_MIP_LIN = 00 00 00 05&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;WrapEnum&#039;&#039;&#039;:&lt;br /&gt;
** CLAMP = 00 00 00 00&lt;br /&gt;
** REPEAT = 00 00 00 01&lt;br /&gt;
** MIRROR = 00 00 00 02&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Material&#039;&#039;&#039; : (0x14 octets) ===&lt;br /&gt;
* 1 octets - AMB_R - (ambient)&lt;br /&gt;
* 1 octets - AMB_G&lt;br /&gt;
* 1 octets - AMB_B&lt;br /&gt;
* 1 octets - AMB_A&lt;br /&gt;
* 1 octets - DIF_R - (diffuse)&lt;br /&gt;
* 1 octets - DIF_G&lt;br /&gt;
* 1 octets - DIF_B&lt;br /&gt;
* 1 octets - DIF_A&lt;br /&gt;
* 1 octets - SPC_R - (specular)&lt;br /&gt;
* 1 octets - SPC_G&lt;br /&gt;
* 1 octets - SPC_B&lt;br /&gt;
* 1 octets - SPC_A&lt;br /&gt;
* 4 octets - float - alpha&lt;br /&gt;
* 4 octets - float - shininess&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;PObj&#039;&#039;&#039; : (0x18 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - next_offset - pobj&lt;br /&gt;
* 4 octets - vertex_attr_list_offset&lt;br /&gt;
* 2 octets - Flags - PObjFlagsEnum&lt;br /&gt;
* 2 octets - display_list_size - number of 0x20 (32) byte blocks occupied by display list data&lt;br /&gt;
* 4 octets - display_list_offset&lt;br /&gt;
* 4 octets - weight_list_offset - ? verifier qu&#039;on retrouve bien le tableau d&#039;envelope_weights à cet offset&lt;br /&gt;
&lt;br /&gt;
Comme l&#039;indique next_offset, il s&#039;agit d&#039;une liste de meshs à afficher pour un material donné référencé par un dobj. PObj contient les offsets de vertex attributes / display list / joint weight list ce qui suffit et permet d’interpréter et traiter les coordonnées de vertices, normals &amp;amp; textures.&lt;br /&gt;
&lt;br /&gt;
Les attributs vertex sont les plus important - les parametres specifiés contrôlent tout : du format, de la taille des données de chaque vertex, normal et coordonnées de textures et comment ces valeurs sont dimensionnées (scaled) par rapport à la présence et la taille de chaque valeur d&#039;index qui apparaît dans la display list information.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PObjFlagsEnum&#039;&#039;&#039; :&lt;br /&gt;
** Inconnu0 = 00 01&lt;br /&gt;
** Inconnu1 = 00 02&lt;br /&gt;
** ANIM = 00 08&lt;br /&gt;
** SHAPE_ANIM = 10 00&lt;br /&gt;
** ENVELOPE = 20 00&lt;br /&gt;
** CULLBACK = 40 00&lt;br /&gt;
** CULLFRONT = 80 00&lt;br /&gt;
&lt;br /&gt;
=== EnvelopeWeights : (0x? octets) ===&lt;br /&gt;
* 4 octets - envelope_count&lt;br /&gt;
* [envelope_count]:&lt;br /&gt;
** 4 octets - float - weight&lt;br /&gt;
** 4 octets - pad ?&lt;br /&gt;
* 4 octets - jobj_list_offset&lt;br /&gt;
&lt;br /&gt;
=== not verified yet ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;IMAGE_HEADER&#039;&#039;&#039; :&lt;br /&gt;
** 4 octets - image_offset - image data&lt;br /&gt;
** 2 octets - width&lt;br /&gt;
** 2 octets - height&lt;br /&gt;
** 4 octets - image_format&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PALETTE_HEADER&#039;&#039;&#039; : (0x10)&lt;br /&gt;
** 4 octets - palette_offset - palette data&lt;br /&gt;
** 4 octets - palette_format&lt;br /&gt;
** 4 octets - Inconnu&lt;br /&gt;
** 2 octets - color_count&lt;br /&gt;
** 2 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
image_offset et palette_offset sont souvent partagés par plusieurs textures - savoir ça permet de retrouver toutes les informations sur les images des textures (largeur, hauteur, format), ainsi que le format et le nombre de couleurs de la palette/tlut.&lt;br /&gt;
&lt;br /&gt;
Le format d&#039;image ne détermine pas le nombre total de couleurs de la palette qu&#039;elle utilisent. Par exemple, une image indexée sur 8 bits aurait un maximum de 256 couleurs mais seulement 136 ou 221 couleurs sont actuellement utilisées. De la sorte, la palette n&#039;utilisera pas la taille totale qu&#039;elle devrait utiliser.&lt;br /&gt;
&lt;br /&gt;
Les images suivent la structure généralement utilisée par la GameCube :&lt;br /&gt;
&lt;br /&gt;
IMAGE FORMATS :&lt;br /&gt;
* case 0: //i4&lt;br /&gt;
* case 1: //i8&lt;br /&gt;
* case 2: //i4a4&lt;br /&gt;
* case 3: //i8a8&lt;br /&gt;
* case 4: //r5g6b5&lt;br /&gt;
* case 5: //rgb5a3&lt;br /&gt;
* case 6: //r8g8b8a8&lt;br /&gt;
* case 8: //index4&lt;br /&gt;
* case 9: //index8&lt;br /&gt;
* case 0xa: //index14x2&lt;br /&gt;
* case 0xe: //s3tc1&lt;br /&gt;
&lt;br /&gt;
Les formats indexés utilisent aussi les informations de palettes/tlut et les données peuvent apparaître en plusieurs formats :&lt;br /&gt;
&lt;br /&gt;
PALETTE FORMATS :&lt;br /&gt;
* case 0: //ia8&lt;br /&gt;
* case 1: //r5g6b5&lt;br /&gt;
* case 2: //rgb5a3&lt;br /&gt;
&lt;br /&gt;
---&amp;gt; &amp;quot;Joint Data - Accessing Geometry, Mesh, and Vertex Attributes&amp;quot; https://smashboards.com/threads/melee-dat-format.292603/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
trad a revoir à partir de là, il faut investiguer le rendu 3D sur GameCube pour mieux comprendre&lt;br /&gt;
&lt;br /&gt;
// déclaration d&#039;un vertex et attribute information&lt;br /&gt;
// attr, type, cnt, data_type, flags?, file_offset&lt;br /&gt;
* ATTR_DATA&lt;br /&gt;
** 4 octets - GXAttr     vtx_attr_offset - attr&lt;br /&gt;
** 4 octets - GXAttrType vtx_attr_type   - index_type&lt;br /&gt;
** 4 octets - GXCompCnt  comp_cnt        - cnt&lt;br /&gt;
** 4 octets - GXCompType comp_type       - data_type	&lt;br /&gt;
** 1 octets - scale&lt;br /&gt;
** 1 octets - Inconnu&lt;br /&gt;
** 2 octets - vtx_stride&lt;br /&gt;
** 2 octets - data_offset&lt;br /&gt;
&lt;br /&gt;
vertex_attr_offset pointe sur une liste d&#039;attributs de vertex. Leur nombre n&#039;est pas donné. Les données dans cette structure suivent les informations et les types conçus par l&#039;architecture GameCube/WII et son API. La liste est terminée par une valeur spécifique de vtx_attr qui signale la fin de cette liste. Avec un accès à la doku SDK, il serait fortement conseillé de lire la section à propos des &amp;quot;vertex attributes and other specifications&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
La valeur de vtx_attr determine le type de donnée que cet attribut désigne et peut indiquer un nombre de types natifs utilisés utilisés pour passer les données entre les interfaces logicielles et matérielles.&lt;br /&gt;
&lt;br /&gt;
Les valeures possibles sont les suivantes :&lt;br /&gt;
* enum GXAttr (4 octets)&lt;br /&gt;
** GX_VA_PNMTXIDX = 0,    // position/normal matrix index&lt;br /&gt;
** GX_VA_TEX0MTXIDX,      // texture 0 matrix index&lt;br /&gt;
** GX_VA_TEX1MTXIDX,      // texture 1 matrix index&lt;br /&gt;
** GX_VA_TEX2MTXIDX,      // texture 2 matrix index&lt;br /&gt;
** GX_VA_TEX3MTXIDX,      // texture 3 matrix index&lt;br /&gt;
** GX_VA_TEX4MTXIDX,      // texture 4 matrix index&lt;br /&gt;
** GX_VA_TEX5MTXIDX,      // texture 5 matrix index&lt;br /&gt;
** GX_VA_TEX6MTXIDX,      // texture 6 matrix index&lt;br /&gt;
** GX_VA_TEX7MTXIDX,      // texture 7 matrix index&lt;br /&gt;
** GX_VA_POS      = 9,    // position&lt;br /&gt;
** GX_VA_NRM,             // normal&lt;br /&gt;
** GX_VA_CLR0,            // color 0&lt;br /&gt;
** GX_VA_CLR1,            // color 1&lt;br /&gt;
** GX_VA_TEX0,            // input texture coordinate 0&lt;br /&gt;
** GX_VA_TEX1,            // input texture coordinate 1&lt;br /&gt;
** GX_VA_TEX2,            // input texture coordinate 2&lt;br /&gt;
** GX_VA_TEX3,            // input texture coordinate 3&lt;br /&gt;
** GX_VA_TEX4,            // input texture coordinate 4&lt;br /&gt;
** GX_VA_TEX5,            // input texture coordinate 5&lt;br /&gt;
** GX_VA_TEX6,            // input texture coordinate 6&lt;br /&gt;
** GX_VA_TEX7,            // input texture coordinate 7&lt;br /&gt;
&lt;br /&gt;
** GX_POS_MTX_ARRAY,      // position matrix array pointer&lt;br /&gt;
** GX_NRM_MTX_ARRAY,      // normal matrix array pointer&lt;br /&gt;
** GX_TEX_MTX_ARRAY,      // texture matrix array pointer&lt;br /&gt;
** GX_LIGHT_ARRAY,        // light parameter array pointer&lt;br /&gt;
** GX_VA_NBT,             // normal, bi-normal, tangent &lt;br /&gt;
** GX_VA_MAX_ATTR,        // maximum number of vertex attributes&lt;br /&gt;
&lt;br /&gt;
** GX_VA_NULL     = 0xff  // NULL attribute (to mark end of lists)&lt;br /&gt;
&lt;br /&gt;
Toutes les données nécessaires pour représenter un mesh peuvent être spécifiées et indexées d&#039;une manière ou d&#039;une autre. De même, GX_VA_TEX0MTXIDX, GX_VA_CLR0, et autres sont aussi possibles - les valeurs les plus fréquentes dans les données SSBM sont : GX_VA_PNMTXIDX, GX_VA_POS, GX_VA_NRM, et GX_VA_TEX0. Which is to be expected as joint matrices, vertex positions/normals, and texture coordinates respectively are probably the most basic of elements needed to display a texture mesh, whether static or animated.&lt;br /&gt;
&lt;br /&gt;
When the value of vtx_attr == GX_VA_NULL (0xFF), the end of the vertex attribute array has been reached.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The vtx_attr_type values is actually associated with how the value is indexed, and can thus also determine the size of the index value within the display list data.&lt;br /&gt;
&lt;br /&gt;
* 4 octets - enum GXAttrType&lt;br /&gt;
** GX_NONE    = 0,&lt;br /&gt;
** GX_DIRECT,&lt;br /&gt;
** GX_INDEX8,&lt;br /&gt;
** GX_INDEX16&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Structures COLL_DATA : (données de collisions)&lt;br /&gt;
** 4 octets - vertex_offset (2 float par entrée correspondant à des données 2D probablement)&lt;br /&gt;
** 4 octets - vertex_count&lt;br /&gt;
** 4 octets - index_offset&lt;br /&gt;
** 4 octets - index_count&lt;br /&gt;
** 4 octets [5] - tableau inconnu&lt;br /&gt;
*** 2 octets - index_start&lt;br /&gt;
*** 2 octets - index_count&lt;br /&gt;
** 4 octets - Inconnu&lt;br /&gt;
** 4 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
[[Category:Implementations]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=Models&amp;diff=1523</id>
		<title>Models</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=Models&amp;diff=1523"/>
		<updated>2023-10-07T13:28:52Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
{{Research | 2| Researches on headers / bodies structures are partially achieved. }}&lt;br /&gt;
&lt;br /&gt;
== Gotcha Force Models ==&lt;br /&gt;
&lt;br /&gt;
Gotcha Force models work as in the game Super Smash Bros Melee (SSBM) investigated by its [https://smashboards.com/threads/melee-dat-format.292603/ community].&lt;br /&gt;
&lt;br /&gt;
Un modèle est un format de fichier organisant des objets et des ressources sérialisés pour être utilisés par la librairie &#039;&#039;&#039;H&#039;&#039;&#039;al &#039;&#039;&#039;S&#039;&#039;&#039;ys&#039;&#039;&#039;D&#039;&#039;&#039;olphin (&#039;&#039;&#039;HSD&#039;&#039;&#039;), une librairie utilisée dans plusieurs jeux par Capcom. Ce sont des ressources graphiques structurées de manière hiérarchique. La présence de certaines images dans les modèles montrent à priori l&#039;utilisation de la technique [https://learn.foundry.com/modo/901/content/help/pages/shading_lighting/shader_items/matcap.html matcap].&lt;br /&gt;
Par ailleurs, la librairie prendrait ses sources sur le SDK Dolphin, tel que GX ou encore MTX.&lt;br /&gt;
&lt;br /&gt;
=== Fichiers concernés ===&lt;br /&gt;
L&#039;ensemble des fichiers ayant dans leur titre &#039;&#039;&#039;_mdl&#039;&#039;&#039; sont des fichiers modèles correspondant au format décrit dans cette page. On notera les fichiers [[ARZ (Gotcha Force)|.arz]] qui sont des modèles compressés. Le fichier collision.arc et les fichiers tdc00.arc à tdc09.arc sont aussi des modèles.&lt;br /&gt;
&lt;br /&gt;
Les fichiers modèles se retrouvent aussi dans les pzz des borgs (plxxxx.pzz) en position 004 à 009.&lt;br /&gt;
&lt;br /&gt;
=== HSDRaw ===&lt;br /&gt;
HSDRaw, un éditeur 3D dotnet de ce format est instable sur mon Windows (algoflash). Il est cependant prouvé qu&#039;un edit des _mdl pour commencer à l&#039;offset 0x100 - après le préambule - permet de visualiser le fichier sur HSDRaw et d&#039;avoir le rendu 3D du Borg (click sur le premier dossier JOBJ - puis le JOBJ dedans et double click sur le nœud en violet). Cela devrait aussi permettre d&#039;éditer certaines propriétés ?&lt;br /&gt;
&lt;br /&gt;
== Structure générale ==&lt;br /&gt;
Le format des modèles se découpe en plusieurs blocks. Le préambule fait 0x100 octets au tout début du fichier. Il est souvent absent. Toutes les valeurs sont en unsigned big endian, et le pad est en Nulls bytes (\x00). 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&#039;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&#039;il est peu probable qu&#039;un offset pointe au milieu d&#039;une structure.&lt;br /&gt;
&lt;br /&gt;
L&#039;ensemble des fichiers répondant à ce format on un seul root_node de type SObj (Scene data).&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Préambule&#039;&#039;&#039; : (0x100 octets / 0 octets) ===&lt;br /&gt;
* 4 octets - hsd_header_offset=0x100 (toujours)&lt;br /&gt;
* 4 octets - bones_flags_table_offset=0x20 (toujours) - offset de la liste des flags des armatures&lt;br /&gt;
* 4 octets - bones_table_offset=0xC0 (toujours) - offset de la liste des armatures&lt;br /&gt;
* 20 octets - Pad - (toujours)&lt;br /&gt;
* 4 octets [32] - Inconnu (flags des armatures ?) 1 octet par flag ?&lt;br /&gt;
* 32 octets - Pad - (toujours)&lt;br /&gt;
* 32 octets - armatures ?&lt;br /&gt;
* 32 octets - Pad - (toujours)&lt;br /&gt;
=== &#039;&#039;&#039;HSD Header&#039;&#039;&#039; - (0x20 octets) ===&lt;br /&gt;
* 4 octets - Taille totale du fichier&lt;br /&gt;
* 4 octets - Taille du Data block&lt;br /&gt;
* 4 octets - Nombre d&#039;entrée dans la Table de relocs&lt;br /&gt;
* 4 octets - root0_count&lt;br /&gt;
* 4 octets - root1_count&lt;br /&gt;
* 12 octets - Pad - (toujours)&lt;br /&gt;
=== &#039;&#039;&#039;Data block&#039;&#039;&#039; : ===&lt;br /&gt;
* JOBJ, etc. -&amp;gt; Ces structures sont détaillée plus loin ci-dessous.&lt;br /&gt;
=== &#039;&#039;&#039;Relocation Table&#039;&#039;&#039; : ===&lt;br /&gt;
* Tableau d&#039;offsets de 4 octets - Offsets des structures dans le DB.&lt;br /&gt;
=== &#039;&#039;&#039;Root Nodes (2)&#039;&#039;&#039; : ===&lt;br /&gt;
* Tableau de taille 8 * root0_count&lt;br /&gt;
** 4 octets - root_offset - relatif au DB&lt;br /&gt;
** 4 octets - string_table_offset - relatif à la StringTable&lt;br /&gt;
* Tableau de taille 8 * root1_count&lt;br /&gt;
** 4 octets - root_offset - relatif au DB&lt;br /&gt;
** 4 octets - string_table_offset - relatif à la StringTable&lt;br /&gt;
=== &#039;&#039;&#039;String Table&#039;&#039;&#039; : ===&lt;br /&gt;
* Suite de strings terminées par Null au nombre de root0_count + root1_count&lt;br /&gt;
&lt;br /&gt;
== Structures rencontrées dans le DB ==&lt;br /&gt;
Note : l&#039;arborescence est cumulative sur les transformations pour les relations parents-&amp;gt;enfants&lt;br /&gt;
&lt;br /&gt;
Les Noeuds Racine qui ont pour nom &amp;quot;scene_data&amp;quot; pointent sur un SObj :&lt;br /&gt;
=== &#039;&#039;&#039;SObj&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
* 4 octets - JObjDescs_offsets_list_offset&lt;br /&gt;
* 4 octets - Cameras_list_offset&lt;br /&gt;
* 4 octets - Lights_list_offset&lt;br /&gt;
* 4 octets - Fog&lt;br /&gt;
&lt;br /&gt;
&amp;quot;scene_data&amp;quot; == nom du nœud racine&lt;br /&gt;
JObjDescs_offsets_list_offset, cameras.. pointent sur une liste d&#039;offsets terminée par 4 octets à 0x00.&lt;br /&gt;
lights_list_offset pointe sur des couples (4 octets - LObj_offset ; 4 octets - light_anim_pointer_offset)&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;JObjDesc&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
* 4 octets - root_joint_offset - JObj&lt;br /&gt;
* 4 octets - joint_animations_offset - ?&lt;br /&gt;
* 4 octets - material_animations_offset - ?&lt;br /&gt;
* 4 octets - shape_animations_offset - ?&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;CObj&#039;&#039;&#039; : (0x38 octets) ===&lt;br /&gt;
* 4 octets - flags&lt;br /&gt;
* 4 octets - projection_type - ProjectionTypeEnum&lt;br /&gt;
* 2 octets - viewport_left&lt;br /&gt;
* 2 octets - viewport_right&lt;br /&gt;
* 2 octets - viewport_top&lt;br /&gt;
* 2 octets - viewport_bottom&lt;br /&gt;
* 4 octets - proj_width&lt;br /&gt;
* 4 octets - proj_height&lt;br /&gt;
* 4 octets - eye_offset - WObj&lt;br /&gt;
* 4 octets - target_offset - WObj&lt;br /&gt;
* 4 octets - roll&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - float - near_clip&lt;br /&gt;
* 4 octets - float - far_clip&lt;br /&gt;
* 4 octets - float - field_of_view&lt;br /&gt;
* 4 octets - float - aspect&lt;br /&gt;
Camera object. Note : pour frustrum ou ortho, la structure est différente.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ProjectionTypeEnum&#039;&#039;&#039;:&lt;br /&gt;
** PERSPECTIVE = 1&lt;br /&gt;
** FRUSTRUM = 2&lt;br /&gt;
** ORTHO = 3&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;WObj&#039;&#039;&#039;: (0x14 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - float - v1&lt;br /&gt;
* 4 octets - float - v2&lt;br /&gt;
* 4 octets - float - v3&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
eye / target&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;LObj&#039;&#039;&#039; : (0x1c octets) ===&lt;br /&gt;
* 4 octets - class_name&lt;br /&gt;
* 4 octets - next_offset&lt;br /&gt;
* 2 octets - flags - LObjFlagsEnum&lt;br /&gt;
* 2 octets - attenuation_flags - LObjAttenuationFlagsEnum&lt;br /&gt;
* 1 octet - color_r&lt;br /&gt;
* 1 octet - color_g&lt;br /&gt;
* 1 octet - color_b&lt;br /&gt;
* 1 octet - color_alpha&lt;br /&gt;
* 4 octets - lobj_point_offset - position&lt;br /&gt;
* 4 octets - infinite_data&lt;br /&gt;
* 4 octets - point_spot_data&lt;br /&gt;
light&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;LObjFlagsEnum&#039;&#039;&#039; :&lt;br /&gt;
** LOBJ_AMBIANT = 00 00&lt;br /&gt;
** LOBJ_INFINITE = 00 01&lt;br /&gt;
** LOBJ_POINT = 00 02&lt;br /&gt;
** LOBJ_SPOT = 00 03&lt;br /&gt;
** LOBJ_DIFFUSE = 00 04&lt;br /&gt;
** LOBJ_SPECULAR = 00 08&lt;br /&gt;
** LOBJ_ALPHA = 00 10&lt;br /&gt;
** LOBJ_HIDDEN = 00 20&lt;br /&gt;
** LOBJ_RAW_PARAM = 00 40&lt;br /&gt;
** LOBJ_DIFF_DIRTY = 00 80&lt;br /&gt;
** LOBJ_SPEC_DIRTY = 01 00&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;LObjAttenuationFlagsEnum&#039;&#039;&#039; :&lt;br /&gt;
** LOBJ_LIGHT_ATTN_NONE = 00 00&lt;br /&gt;
** LOBJ_LIGHT_ATTN = 00 01&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;LObjPoint&#039;&#039;&#039; : (0x14 octets) ===&lt;br /&gt;
* 4 octets - class_name&lt;br /&gt;
* 4 octets - float - x&lt;br /&gt;
* 4 octets - float - y&lt;br /&gt;
* 4 octets - float - z&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;LightAnimPointer&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
** 4 octets - next_offset - (LightAnimPointer)&lt;br /&gt;
** 4 octets - light_anim - ?&lt;br /&gt;
** 4 octets - position_anim - ?&lt;br /&gt;
** 4 octets - interst_anim - ?&lt;br /&gt;
Bugs dans HSDRaw - à tester&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;JObj&#039;&#039;&#039; : (0x40 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - flags&lt;br /&gt;
* 4 octets - child_offset (JObj)&lt;br /&gt;
* 4 octets - next_offset (JObj)&lt;br /&gt;
* 4 octets - dobj_offset (DObj)&lt;br /&gt;
* 4 octets [3] - float3 - rotation_xyz&lt;br /&gt;
* 4 octets [3] - float3 - scale_xyz&lt;br /&gt;
* 4 octets [3] - float3 - translation_xyz&lt;br /&gt;
* 4 octets - inverse_world_transform_offset (inverse world transform = Matrice de 4x3)&lt;br /&gt;
* 4 octets - robj_offset&lt;br /&gt;
&lt;br /&gt;
Pointé par les listes dans Root Node scene_data.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;JObjFlagsEnum&#039;&#039;&#039; : (peuvent se cumuler)&lt;br /&gt;
** NULL = 00 00 00 00&lt;br /&gt;
** SKELETON = 00 00 00 01&lt;br /&gt;
** SKELETON_ROOT = 00 00 00 02&lt;br /&gt;
** ENVELOPE_MODEL = 00 00 00 04&lt;br /&gt;
** CLASSICAL_SCALING = 00 00 00 08&lt;br /&gt;
** HIDDEN = 00 00 00 10&lt;br /&gt;
** PTCL = 00 00 00 20&lt;br /&gt;
** MTX_DIRTY = 00 00 00 40&lt;br /&gt;
** LIGHTING = 00 00 00 80&lt;br /&gt;
** TEXGEN = 00 00 01 00&lt;br /&gt;
** BILLBOARD = 00 00 02 00&lt;br /&gt;
** VBILLBOARD = 00 00 04 00&lt;br /&gt;
** HBILLBOARD = 00 00 06 00&lt;br /&gt;
** RBILLBOARD = 00 00 08 00&lt;br /&gt;
** INSTANCE = 00 00 10 00&lt;br /&gt;
** PBILLBOARD = 00 00 20 00&lt;br /&gt;
** SPLINE = 00 00 40 00&lt;br /&gt;
** FLIP_IK = 00 00 80 00&lt;br /&gt;
** SPECULAR = 00 01 00 00&lt;br /&gt;
** USE_QUATERNION = 00 02 00 00&lt;br /&gt;
** OPA = 00 04 00 00&lt;br /&gt;
** XLU = 00 08 00 00&lt;br /&gt;
** TEXEDGE = 00 10 00 00&lt;br /&gt;
** JOINT1 = 00 20 00 00&lt;br /&gt;
** JOINT2 = 00 40 00 00&lt;br /&gt;
** EFFECTOR = 00 60 00 00&lt;br /&gt;
** USER_DEFINED_MTX = 00 80 00 00&lt;br /&gt;
** MTX_INDEPEND_PARENT = 01 00 00 00&lt;br /&gt;
** MTX_INDEPEND_SRT = 02 00 00 00&lt;br /&gt;
** MTX_SCALE_COMPENSATE = 04 00 00 00&lt;br /&gt;
** ROOT_OPA = 10 00 00 00&lt;br /&gt;
** ROOT_XLU = 20 00 00 00&lt;br /&gt;
** ROOT_TEXEDGE = 40 00 00 00&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;InverseWorldTransform&#039;&#039;&#039; : (0x30 octets) ===&lt;br /&gt;
* 4 octets - float - M11&lt;br /&gt;
* 4 octets - float - M12&lt;br /&gt;
* 4 octets - float - M13&lt;br /&gt;
* 4 octets - float - M14&lt;br /&gt;
* 4 octets - float - M21&lt;br /&gt;
* 4 octets - float - M22&lt;br /&gt;
* 4 octets - float - M23&lt;br /&gt;
* 4 octets - float - M24&lt;br /&gt;
* 4 octets - float - M31&lt;br /&gt;
* 4 octets - float - M32&lt;br /&gt;
* 4 octets - float - M33&lt;br /&gt;
* 4 octets - float - M34&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;DObj&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - next_offset - prochain DOBJ&lt;br /&gt;
* 4 octets - mobj_offset - material offset&lt;br /&gt;
* 4 octets - pobj_offset - mesh offset&lt;br /&gt;
Liste chaînée qui permet de récupérer l&#039;ensemble des materials &amp;amp; mesh pour le JObj auquel il est lié.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;MObj&#039;&#039;&#039; : (0x18 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - render_flags - RenderFlagsEnum&lt;br /&gt;
* 4 octets - tobj_offset - offset de texture - peut être invalide s&#039;il n&#039;y a pas de texture pour le material&lt;br /&gt;
* 4 octets - material_offset - couleurs des materials ?&lt;br /&gt;
* 8 octets - PEDesc ?&lt;br /&gt;
&lt;br /&gt;
Contient les textures &amp;amp; informations sur les couleurs des Materials.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;RenderFlagsEnum&#039;&#039;&#039; : (se cumulent)&lt;br /&gt;
** USER = 80 00 00 00&lt;br /&gt;
** CONSTANT = 00 00 00 01&lt;br /&gt;
** VERTEX = 00 00 00 02&lt;br /&gt;
** BOTH = 00 00 00 03&lt;br /&gt;
** DIFFUSE = 00 00 00 04&lt;br /&gt;
** SPECULAR = 00 00 00 08&lt;br /&gt;
** TEX0 = 00 00 00 10&lt;br /&gt;
** TEX1 = 00 00 00 20&lt;br /&gt;
** TEX2 = 00 00 00 40&lt;br /&gt;
** TEX3 = 00 00 00 80&lt;br /&gt;
** TEX4 = 00 00 01 00&lt;br /&gt;
** TEX5 = 00 00 02 00&lt;br /&gt;
** TEX6 = 00 00 04 00&lt;br /&gt;
** TEX7 = 00 00 08 00&lt;br /&gt;
** TOON = 00 00 10 00&lt;br /&gt;
** ALPHA_MAT = 00 00 20 00&lt;br /&gt;
** ALPHA_VTX = 00 00 40 00&lt;br /&gt;
** ALPHA_BOTH = 00 00 60 00&lt;br /&gt;
** ZOFST = 01 00 00 00&lt;br /&gt;
** EFFECT = 02 00 00 00&lt;br /&gt;
** SHADOW = 04 00 00 00&lt;br /&gt;
** ZMODE_ALWAYS = 08 00 00 00&lt;br /&gt;
** DF_ALL = 10 00 00 00&lt;br /&gt;
** NO_ZUPDATE = 20 00 00 00&lt;br /&gt;
** XLU = 40 00 00 00&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;TObj&#039;&#039;&#039; : (0x5c octets) ===&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - tex_map_id - TexMapIdEnum&lt;br /&gt;
* 4 octets - gx_tex_gen_src - GXTexGenSrcEnum&lt;br /&gt;
* 4 octets - float - rx&lt;br /&gt;
* 4 octets - float - ry&lt;br /&gt;
* 4 octets - float - rz&lt;br /&gt;
* 4 octets - float - sx&lt;br /&gt;
* 4 octets - float - sy&lt;br /&gt;
* 4 octets - float - sz&lt;br /&gt;
* 4 octets - float - tx&lt;br /&gt;
* 4 octets - float - ty&lt;br /&gt;
* 4 octets - float - tz&lt;br /&gt;
* 4 octets - wrap_s - WrapEnum&lt;br /&gt;
* 4 octets - wrap_t - WrapEnum&lt;br /&gt;
* 1 octet - w_scale&lt;br /&gt;
* 1 octet - h_scale&lt;br /&gt;
* 2 octets - ?&lt;br /&gt;
* 1 octets - bump_map - (False = 00 ; True = 01)&lt;br /&gt;
* 4 bits - alpha_operation - AlphaOperationEnum&lt;br /&gt;
* 4 bits - color_operation - ColorOperationEnum&lt;br /&gt;
* 1 octet - shadow_lightmap - (False = 00 ; True = 01) (2 octets avec une Enum lightmap limite)&lt;br /&gt;
* 1 bit - ext_lightmap - (False = 0 ; True = 1)&lt;br /&gt;
* 1 bit - ambiant_lightmap - (False = 0 ; True = 1) &lt;br /&gt;
* 1 bit - specular_lightmap - (False = 0 ; True = 1)&lt;br /&gt;
* 1 bit - diffuse_lightmap (False = 0 ; True = 1)&lt;br /&gt;
* 4 bits - coord_type - CoordTypeEnum&lt;br /&gt;
* 4 octets - float - blending - utilisé quand color_operation ou alpha_operation == BLEND&lt;br /&gt;
* 4 octets - mag_filter - MagFilterEnum&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
Informations de Textures. Le TObj contient des informations sur les paramètres d&#039;environnement de textures utilisés pour le rendu graphique ainsi que les offset de l&#039;image et des données de la palette utilisés pour cette texture. Le plus important ici, c&#039;est l&#039;offset d&#039;image et la palette/tlut - si l&#039;image n&#039;est pas indexée (RGBA, CMPR, etc.) alors la structure de description palette/tlut n&#039;est pas utilisée.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;TexMapIdEnum&#039;&#039;&#039; :&lt;br /&gt;
** GX_TEXMAP0 = 00 00 00 00&lt;br /&gt;
** GX_TEXMAP1 = 00 00 00 01&lt;br /&gt;
** GX_TEXMAP2 = 00 00 00 02&lt;br /&gt;
** GX_TEXMAP3 = 00 00 00 03&lt;br /&gt;
** GX_TEXMAP4 = 00 00 00 04&lt;br /&gt;
** GX_TEXMAP5 = 00 00 00 05&lt;br /&gt;
** GX_TEXMAP6 = 00 00 00 06&lt;br /&gt;
** GX_TEXMAP7 = 00 00 00 07&lt;br /&gt;
** GX_MAX_TEXMAP = 00 00 00 08&lt;br /&gt;
** GX_TEXMAP_NULL = 00 00 00 09&lt;br /&gt;
** GX_TEXMAP_DISABLE = 00 00 00 0A&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;GXTexGenSrcEnum&#039;&#039;&#039; :&lt;br /&gt;
** GX_TG_POS = 00 00 00 00&lt;br /&gt;
** GX_TG_NRM = 00 00 00 01&lt;br /&gt;
** GX_TG_BINRM = 00 00 00 02&lt;br /&gt;
** GX_TG_TANGENT = 00 00 00 03&lt;br /&gt;
** GX_TG_TEX0 = 00 00 00 04&lt;br /&gt;
** GX_TG_TEX1 = 00 00 00 05&lt;br /&gt;
** GX_TG_TEX2 = 00 00 00 06&lt;br /&gt;
** GX_TG_TEX3 = 00 00 00 07&lt;br /&gt;
** GX_TG_TEX4 = 00 00 00 08&lt;br /&gt;
** GX_TG_TEX5 = 00 00 00 09&lt;br /&gt;
** GX_TG_TEX6 = 00 00 00 0A&lt;br /&gt;
** GX_TG_TEX7 = 00 00 00 0B&lt;br /&gt;
** GX_TG_TEXCOORD0 = 00 00 00 0C&lt;br /&gt;
** GX_TG_TEXCOORD1 = 00 00 00 0D&lt;br /&gt;
** GX_TG_TEXCOORD2 = 00 00 00 0E&lt;br /&gt;
** GX_TG_TEXCOORD3 = 00 00 00 0F&lt;br /&gt;
** GX_TG_TEXCOORD4 = 00 00 00 10&lt;br /&gt;
** GX_TG_TEXCOORD5 = 00 00 00 11&lt;br /&gt;
** GX_TG_TEXCOORD6 = 00 00 00 12&lt;br /&gt;
** GX_TG_COLOR0 = 00 00 00 13&lt;br /&gt;
** GX_TG_COLOR1 = 00 00 00 14&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;AlphaOperationEnum&#039;&#039;&#039;:&lt;br /&gt;
** NONE = 0X&lt;br /&gt;
** ALPHAMASK = 1X&lt;br /&gt;
** BLEND = 2X&lt;br /&gt;
** MODULATE = 3X&lt;br /&gt;
** REPLACE = 4X&lt;br /&gt;
** PASS = 5X&lt;br /&gt;
** ADD = 6X&lt;br /&gt;
** SUB = 7X&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ColorOperationEnum&#039;&#039;&#039;:&lt;br /&gt;
** NONE = X0&lt;br /&gt;
** ALPHA_MASK = X1&lt;br /&gt;
** RGB_MASK = X2&lt;br /&gt;
** BLEND = X3&lt;br /&gt;
** MODULATE = X4&lt;br /&gt;
** REPLACE = X5&lt;br /&gt;
** PASS = X6&lt;br /&gt;
** ADD = X7&lt;br /&gt;
** SUB = X8&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;CoordTypeEnum&#039;&#039;&#039;:&lt;br /&gt;
** UV = X0&lt;br /&gt;
** REFLECTION = X1&lt;br /&gt;
** HILIGHT = X2&lt;br /&gt;
** SHADOW = X3&lt;br /&gt;
** TOON = X4&lt;br /&gt;
** GRADATION = X5&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MagFilterEnum&#039;&#039;&#039;:&lt;br /&gt;
** GX_NEAR = 00 00 00 00&lt;br /&gt;
** GX_LINEAR = 00 00 00 01&lt;br /&gt;
** GX_NEAR_MIP_NEAR = 00 00 00 02&lt;br /&gt;
** GX_LIN_MIP_NEAR = 00 00 00 03&lt;br /&gt;
** GX_NEAR_MIP_LIN = 00 00 00 04&lt;br /&gt;
** GX_LIN_MIP_LIN = 00 00 00 05&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;WrapEnum&#039;&#039;&#039;:&lt;br /&gt;
** CLAMP = 00 00 00 00&lt;br /&gt;
** REPEAT = 00 00 00 01&lt;br /&gt;
** MIRROR = 00 00 00 02&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Material&#039;&#039;&#039; : (0x14 octets) ===&lt;br /&gt;
* 1 octets - AMB_R - (ambient)&lt;br /&gt;
* 1 octets - AMB_G&lt;br /&gt;
* 1 octets - AMB_B&lt;br /&gt;
* 1 octets - AMB_A&lt;br /&gt;
* 1 octets - DIF_R - (diffuse)&lt;br /&gt;
* 1 octets - DIF_G&lt;br /&gt;
* 1 octets - DIF_B&lt;br /&gt;
* 1 octets - DIF_A&lt;br /&gt;
* 1 octets - SPC_R - (specular)&lt;br /&gt;
* 1 octets - SPC_G&lt;br /&gt;
* 1 octets - SPC_B&lt;br /&gt;
* 1 octets - SPC_A&lt;br /&gt;
* 4 octets - float - alpha&lt;br /&gt;
* 4 octets - float - shininess&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;PObj&#039;&#039;&#039; : (0x18 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - next_offset - pobj&lt;br /&gt;
* 4 octets - vertex_attr_list_offset&lt;br /&gt;
* 2 octets - Flags - PObjFlagsEnum&lt;br /&gt;
* 2 octets - display_list_size - number of 0x20 (32) byte blocks occupied by display list data&lt;br /&gt;
* 4 octets - display_list_offset&lt;br /&gt;
* 4 octets - weight_list_offset - ? verifier qu&#039;on retrouve bien le tableau d&#039;envelope_weights à cet offset&lt;br /&gt;
&lt;br /&gt;
Comme l&#039;indique next_offset, il s&#039;agit d&#039;une liste de meshs à afficher pour un material donné référencé par un dobj. PObj contient les offsets de vertex attributes / display list / joint weight list ce qui suffit et permet d’interpréter et traiter les coordonnées de vertices, normals &amp;amp; textures.&lt;br /&gt;
&lt;br /&gt;
Les attributs vertex sont les plus important - les parametres specifiés contrôlent tout : du format, de la taille des données de chaque vertex, normal et coordonnées de textures et comment ces valeurs sont dimensionnées (scaled) par rapport à la présence et la taille de chaque valeur d&#039;index qui apparaît dans la display list information.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PObjFlagsEnum&#039;&#039;&#039; :&lt;br /&gt;
** Inconnu0 = 00 01&lt;br /&gt;
** Inconnu1 = 00 02&lt;br /&gt;
** ANIM = 00 08&lt;br /&gt;
** SHAPE_ANIM = 10 00&lt;br /&gt;
** ENVELOPE = 20 00&lt;br /&gt;
** CULLBACK = 40 00&lt;br /&gt;
** CULLFRONT = 80 00&lt;br /&gt;
&lt;br /&gt;
=== EnvelopeWeights : (0x? octets) ===&lt;br /&gt;
* 4 octets - envelope_count&lt;br /&gt;
* [envelope_count]:&lt;br /&gt;
** 4 octets - float - weight&lt;br /&gt;
** 4 octets - pad ?&lt;br /&gt;
* 4 octets - jobj_list_offset&lt;br /&gt;
&lt;br /&gt;
=== not verified yet ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;IMAGE_HEADER&#039;&#039;&#039; :&lt;br /&gt;
** 4 octets - image_offset - image data&lt;br /&gt;
** 2 octets - width&lt;br /&gt;
** 2 octets - height&lt;br /&gt;
** 4 octets - image_format&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PALETTE_HEADER&#039;&#039;&#039; : (0x10)&lt;br /&gt;
** 4 octets - palette_offset - palette data&lt;br /&gt;
** 4 octets - palette_format&lt;br /&gt;
** 4 octets - Inconnu&lt;br /&gt;
** 2 octets - color_count&lt;br /&gt;
** 2 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
image_offset et palette_offset sont souvent partagés par plusieurs textures - savoir ça permet de retrouver toutes les informations sur les images des textures (largeur, hauteur, format), ainsi que le format et le nombre de couleurs de la palette/tlut.&lt;br /&gt;
&lt;br /&gt;
Le format d&#039;image ne détermine pas le nombre total de couleurs de la palette qu&#039;elle utilisent. Par exemple, une image indexée sur 8 bits aurait un maximum de 256 couleurs mais seulement 136 ou 221 couleurs sont actuellement utilisées. De la sorte, la palette n&#039;utilisera pas la taille totale qu&#039;elle devrait utiliser.&lt;br /&gt;
&lt;br /&gt;
Les images suivent la structure généralement utilisée par la GameCube :&lt;br /&gt;
&lt;br /&gt;
IMAGE FORMATS :&lt;br /&gt;
* case 0: //i4&lt;br /&gt;
* case 1: //i8&lt;br /&gt;
* case 2: //i4a4&lt;br /&gt;
* case 3: //i8a8&lt;br /&gt;
* case 4: //r5g6b5&lt;br /&gt;
* case 5: //rgb5a3&lt;br /&gt;
* case 6: //r8g8b8a8&lt;br /&gt;
* case 8: //index4&lt;br /&gt;
* case 9: //index8&lt;br /&gt;
* case 0xa: //index14x2&lt;br /&gt;
* case 0xe: //s3tc1&lt;br /&gt;
&lt;br /&gt;
Les formats indexés utilisent aussi les informations de palettes/tlut et les données peuvent apparaître en plusieurs formats :&lt;br /&gt;
&lt;br /&gt;
PALETTE FORMATS :&lt;br /&gt;
* case 0: //ia8&lt;br /&gt;
* case 1: //r5g6b5&lt;br /&gt;
* case 2: //rgb5a3&lt;br /&gt;
&lt;br /&gt;
---&amp;gt; &amp;quot;Joint Data - Accessing Geometry, Mesh, and Vertex Attributes&amp;quot; https://smashboards.com/threads/melee-dat-format.292603/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
trad a revoir à partir de là, il faut investiguer le rendu 3D sur GameCube pour mieux comprendre&lt;br /&gt;
&lt;br /&gt;
// déclaration d&#039;un vertex et attribute information&lt;br /&gt;
// attr, type, cnt, data_type, flags?, file_offset&lt;br /&gt;
* ATTR_DATA&lt;br /&gt;
** 4 octets - GXAttr     vtx_attr_offset - attr&lt;br /&gt;
** 4 octets - GXAttrType vtx_attr_type   - index_type&lt;br /&gt;
** 4 octets - GXCompCnt  comp_cnt        - cnt&lt;br /&gt;
** 4 octets - GXCompType comp_type       - data_type	&lt;br /&gt;
** 1 octets - scale&lt;br /&gt;
** 1 octets - Inconnu&lt;br /&gt;
** 2 octets - vtx_stride&lt;br /&gt;
** 2 octets - data_offset&lt;br /&gt;
&lt;br /&gt;
vertex_attr_offset pointe sur une liste d&#039;attributs de vertex. Leur nombre n&#039;est pas donné. Les données dans cette structure suivent les informations et les types conçus par l&#039;architecture GameCube/WII et son API. La liste est terminée par une valeur spécifique de vtx_attr qui signale la fin de cette liste. Avec un accès à la doku SDK, il serait fortement conseillé de lire la section à propos des &amp;quot;vertex attributes and other specifications&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
La valeur de vtx_attr determine le type de donnée que cet attribut désigne et peut indiquer un nombre de types natifs utilisés utilisés pour passer les données entre les interfaces logicielles et matérielles.&lt;br /&gt;
&lt;br /&gt;
Les valeures possibles sont les suivantes :&lt;br /&gt;
* enum GXAttr (4 octets)&lt;br /&gt;
** GX_VA_PNMTXIDX = 0,    // position/normal matrix index&lt;br /&gt;
** GX_VA_TEX0MTXIDX,      // texture 0 matrix index&lt;br /&gt;
** GX_VA_TEX1MTXIDX,      // texture 1 matrix index&lt;br /&gt;
** GX_VA_TEX2MTXIDX,      // texture 2 matrix index&lt;br /&gt;
** GX_VA_TEX3MTXIDX,      // texture 3 matrix index&lt;br /&gt;
** GX_VA_TEX4MTXIDX,      // texture 4 matrix index&lt;br /&gt;
** GX_VA_TEX5MTXIDX,      // texture 5 matrix index&lt;br /&gt;
** GX_VA_TEX6MTXIDX,      // texture 6 matrix index&lt;br /&gt;
** GX_VA_TEX7MTXIDX,      // texture 7 matrix index&lt;br /&gt;
** GX_VA_POS      = 9,    // position&lt;br /&gt;
** GX_VA_NRM,             // normal&lt;br /&gt;
** GX_VA_CLR0,            // color 0&lt;br /&gt;
** GX_VA_CLR1,            // color 1&lt;br /&gt;
** GX_VA_TEX0,            // input texture coordinate 0&lt;br /&gt;
** GX_VA_TEX1,            // input texture coordinate 1&lt;br /&gt;
** GX_VA_TEX2,            // input texture coordinate 2&lt;br /&gt;
** GX_VA_TEX3,            // input texture coordinate 3&lt;br /&gt;
** GX_VA_TEX4,            // input texture coordinate 4&lt;br /&gt;
** GX_VA_TEX5,            // input texture coordinate 5&lt;br /&gt;
** GX_VA_TEX6,            // input texture coordinate 6&lt;br /&gt;
** GX_VA_TEX7,            // input texture coordinate 7&lt;br /&gt;
&lt;br /&gt;
** GX_POS_MTX_ARRAY,      // position matrix array pointer&lt;br /&gt;
** GX_NRM_MTX_ARRAY,      // normal matrix array pointer&lt;br /&gt;
** GX_TEX_MTX_ARRAY,      // texture matrix array pointer&lt;br /&gt;
** GX_LIGHT_ARRAY,        // light parameter array pointer&lt;br /&gt;
** GX_VA_NBT,             // normal, bi-normal, tangent &lt;br /&gt;
** GX_VA_MAX_ATTR,        // maximum number of vertex attributes&lt;br /&gt;
&lt;br /&gt;
** GX_VA_NULL     = 0xff  // NULL attribute (to mark end of lists)&lt;br /&gt;
&lt;br /&gt;
Toutes les données nécessaires pour représenter un mesh peuvent être spécifiées et indexées d&#039;une manière ou d&#039;une autre. De même, GX_VA_TEX0MTXIDX, GX_VA_CLR0, et autres sont aussi possibles - les valeurs les plus fréquentes dans les données SSBM sont : GX_VA_PNMTXIDX, GX_VA_POS, GX_VA_NRM, et GX_VA_TEX0. Which is to be expected as joint matrices, vertex positions/normals, and texture coordinates respectively are probably the most basic of elements needed to display a texture mesh, whether static or animated.&lt;br /&gt;
&lt;br /&gt;
When the value of vtx_attr == GX_VA_NULL (0xFF), the end of the vertex attribute array has been reached.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The vtx_attr_type values is actually associated with how the value is indexed, and can thus also determine the size of the index value within the display list data.&lt;br /&gt;
&lt;br /&gt;
* 4 octets - enum GXAttrType&lt;br /&gt;
** GX_NONE    = 0,&lt;br /&gt;
** GX_DIRECT,&lt;br /&gt;
** GX_INDEX8,&lt;br /&gt;
** GX_INDEX16&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Structures COLL_DATA : (données de collisions)&lt;br /&gt;
** 4 octets - vertex_offset (2 float par entrée correspondant à des données 2D probablement)&lt;br /&gt;
** 4 octets - vertex_count&lt;br /&gt;
** 4 octets - index_offset&lt;br /&gt;
** 4 octets - index_count&lt;br /&gt;
** 4 octets [5] - tableau inconnu&lt;br /&gt;
*** 2 octets - index_start&lt;br /&gt;
*** 2 octets - index_count&lt;br /&gt;
** 4 octets - Inconnu&lt;br /&gt;
** 4 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
[[Category:Implementations]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=Models&amp;diff=1522</id>
		<title>Models</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=Models&amp;diff=1522"/>
		<updated>2023-10-07T13:17:38Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
{{Research | 2| Researches on headers / bodies structures are partially achieved. }}&lt;br /&gt;
&lt;br /&gt;
== Modèles Gotcha Force ==&lt;br /&gt;
&lt;br /&gt;
Les modèles Gotcha Force fonctionnent comme ceux du jeu Super Smash Bros Melee (SSBM) investigué par sa [https://smashboards.com/threads/melee-dat-format.292603/ communauté].&lt;br /&gt;
&lt;br /&gt;
Un modèle est un format de fichier organisant des objets et des ressources sérialisés pour être utilisés par la librairie &#039;&#039;&#039;H&#039;&#039;&#039;al &#039;&#039;&#039;S&#039;&#039;&#039;ys&#039;&#039;&#039;D&#039;&#039;&#039;olphin (&#039;&#039;&#039;HSD&#039;&#039;&#039;), une librairie utilisée dans plusieurs jeux par Capcom. Ce sont des ressources graphiques structurées de manière hiérarchique. La présence de certaines images dans les modèles montrent à priori l&#039;utilisation de la technique [https://learn.foundry.com/modo/901/content/help/pages/shading_lighting/shader_items/matcap.html matcap].&lt;br /&gt;
Par ailleurs, la librairie prendrait ses sources sur le SDK Dolphin, tel que GX ou encore MTX.&lt;br /&gt;
&lt;br /&gt;
=== Fichiers concernés ===&lt;br /&gt;
L&#039;ensemble des fichiers ayant dans leur titre &#039;&#039;&#039;_mdl&#039;&#039;&#039; sont des fichiers modèles correspondant au format décrit dans cette page. On notera les fichiers [[ARZ (Gotcha Force)|.arz]] qui sont des modèles compressés. Le fichier collision.arc et les fichiers tdc00.arc à tdc09.arc sont aussi des modèles.&lt;br /&gt;
&lt;br /&gt;
Les fichiers modèles se retrouvent aussi dans les pzz des borgs (plxxxx.pzz) en position 004 à 009.&lt;br /&gt;
&lt;br /&gt;
=== HSDRaw ===&lt;br /&gt;
HSDRaw, un éditeur 3D dotnet de ce format est instable sur mon Windows (algoflash). Il est cependant prouvé qu&#039;un edit des _mdl pour commencer à l&#039;offset 0x100 - après le préambule - permet de visualiser le fichier sur HSDRaw et d&#039;avoir le rendu 3D du Borg (click sur le premier dossier JOBJ - puis le JOBJ dedans et double click sur le nœud en violet). Cela devrait aussi permettre d&#039;éditer certaines propriétés ?&lt;br /&gt;
&lt;br /&gt;
== Structure générale ==&lt;br /&gt;
Le format des modèles se découpe en plusieurs blocks. Le préambule fait 0x100 octets au tout début du fichier. Il est souvent absent. Toutes les valeurs sont en unsigned big endian, et le pad est en Nulls bytes (\x00). 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&#039;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&#039;il est peu probable qu&#039;un offset pointe au milieu d&#039;une structure.&lt;br /&gt;
&lt;br /&gt;
L&#039;ensemble des fichiers répondant à ce format on un seul root_node de type SObj (Scene data).&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Préambule&#039;&#039;&#039; : (0x100 octets / 0 octets) ===&lt;br /&gt;
* 4 octets - hsd_header_offset=0x100 (toujours)&lt;br /&gt;
* 4 octets - bones_flags_table_offset=0x20 (toujours) - offset de la liste des flags des armatures&lt;br /&gt;
* 4 octets - bones_table_offset=0xC0 (toujours) - offset de la liste des armatures&lt;br /&gt;
* 20 octets - Pad - (toujours)&lt;br /&gt;
* 4 octets [32] - Inconnu (flags des armatures ?) 1 octet par flag ?&lt;br /&gt;
* 32 octets - Pad - (toujours)&lt;br /&gt;
* 32 octets - armatures ?&lt;br /&gt;
* 32 octets - Pad - (toujours)&lt;br /&gt;
=== &#039;&#039;&#039;HSD Header&#039;&#039;&#039; - (0x20 octets) ===&lt;br /&gt;
* 4 octets - Taille totale du fichier&lt;br /&gt;
* 4 octets - Taille du Data block&lt;br /&gt;
* 4 octets - Nombre d&#039;entrée dans la Table de relocs&lt;br /&gt;
* 4 octets - root0_count&lt;br /&gt;
* 4 octets - root1_count&lt;br /&gt;
* 12 octets - Pad - (toujours)&lt;br /&gt;
=== &#039;&#039;&#039;Data block&#039;&#039;&#039; : ===&lt;br /&gt;
* JOBJ, etc. -&amp;gt; Ces structures sont détaillée plus loin ci-dessous.&lt;br /&gt;
=== &#039;&#039;&#039;Relocation Table&#039;&#039;&#039; : ===&lt;br /&gt;
* Tableau d&#039;offsets de 4 octets - Offsets des structures dans le DB.&lt;br /&gt;
=== &#039;&#039;&#039;Root Nodes (2)&#039;&#039;&#039; : ===&lt;br /&gt;
* Tableau de taille 8 * root0_count&lt;br /&gt;
** 4 octets - root_offset - relatif au DB&lt;br /&gt;
** 4 octets - string_table_offset - relatif à la StringTable&lt;br /&gt;
* Tableau de taille 8 * root1_count&lt;br /&gt;
** 4 octets - root_offset - relatif au DB&lt;br /&gt;
** 4 octets - string_table_offset - relatif à la StringTable&lt;br /&gt;
=== &#039;&#039;&#039;String Table&#039;&#039;&#039; : ===&lt;br /&gt;
* Suite de strings terminées par Null au nombre de root0_count + root1_count&lt;br /&gt;
&lt;br /&gt;
== Structures rencontrées dans le DB ==&lt;br /&gt;
Note : l&#039;arborescence est cumulative sur les transformations pour les relations parents-&amp;gt;enfants&lt;br /&gt;
&lt;br /&gt;
Les Noeuds Racine qui ont pour nom &amp;quot;scene_data&amp;quot; pointent sur un SObj :&lt;br /&gt;
=== &#039;&#039;&#039;SObj&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
* 4 octets - JObjDescs_offsets_list_offset&lt;br /&gt;
* 4 octets - Cameras_list_offset&lt;br /&gt;
* 4 octets - Lights_list_offset&lt;br /&gt;
* 4 octets - Fog&lt;br /&gt;
&lt;br /&gt;
&amp;quot;scene_data&amp;quot; == nom du nœud racine&lt;br /&gt;
JObjDescs_offsets_list_offset, cameras.. pointent sur une liste d&#039;offsets terminée par 4 octets à 0x00.&lt;br /&gt;
lights_list_offset pointe sur des couples (4 octets - LObj_offset ; 4 octets - light_anim_pointer_offset)&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;JObjDesc&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
* 4 octets - root_joint_offset - JObj&lt;br /&gt;
* 4 octets - joint_animations_offset - ?&lt;br /&gt;
* 4 octets - material_animations_offset - ?&lt;br /&gt;
* 4 octets - shape_animations_offset - ?&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;CObj&#039;&#039;&#039; : (0x38 octets) ===&lt;br /&gt;
* 4 octets - flags&lt;br /&gt;
* 4 octets - projection_type - ProjectionTypeEnum&lt;br /&gt;
* 2 octets - viewport_left&lt;br /&gt;
* 2 octets - viewport_right&lt;br /&gt;
* 2 octets - viewport_top&lt;br /&gt;
* 2 octets - viewport_bottom&lt;br /&gt;
* 4 octets - proj_width&lt;br /&gt;
* 4 octets - proj_height&lt;br /&gt;
* 4 octets - eye_offset - WObj&lt;br /&gt;
* 4 octets - target_offset - WObj&lt;br /&gt;
* 4 octets - roll&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - float - near_clip&lt;br /&gt;
* 4 octets - float - far_clip&lt;br /&gt;
* 4 octets - float - field_of_view&lt;br /&gt;
* 4 octets - float - aspect&lt;br /&gt;
Camera object. Note : pour frustrum ou ortho, la structure est différente.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ProjectionTypeEnum&#039;&#039;&#039;:&lt;br /&gt;
** PERSPECTIVE = 1&lt;br /&gt;
** FRUSTRUM = 2&lt;br /&gt;
** ORTHO = 3&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;WObj&#039;&#039;&#039;: (0x14 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - float - v1&lt;br /&gt;
* 4 octets - float - v2&lt;br /&gt;
* 4 octets - float - v3&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
eye / target&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;LObj&#039;&#039;&#039; : (0x1c octets) ===&lt;br /&gt;
* 4 octets - class_name&lt;br /&gt;
* 4 octets - next_offset&lt;br /&gt;
* 2 octets - flags - LObjFlagsEnum&lt;br /&gt;
* 2 octets - attenuation_flags - LObjAttenuationFlagsEnum&lt;br /&gt;
* 1 octet - color_r&lt;br /&gt;
* 1 octet - color_g&lt;br /&gt;
* 1 octet - color_b&lt;br /&gt;
* 1 octet - color_alpha&lt;br /&gt;
* 4 octets - lobj_point_offset - position&lt;br /&gt;
* 4 octets - infinite_data&lt;br /&gt;
* 4 octets - point_spot_data&lt;br /&gt;
light&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;LObjFlagsEnum&#039;&#039;&#039; :&lt;br /&gt;
** LOBJ_AMBIANT = 00 00&lt;br /&gt;
** LOBJ_INFINITE = 00 01&lt;br /&gt;
** LOBJ_POINT = 00 02&lt;br /&gt;
** LOBJ_SPOT = 00 03&lt;br /&gt;
** LOBJ_DIFFUSE = 00 04&lt;br /&gt;
** LOBJ_SPECULAR = 00 08&lt;br /&gt;
** LOBJ_ALPHA = 00 10&lt;br /&gt;
** LOBJ_HIDDEN = 00 20&lt;br /&gt;
** LOBJ_RAW_PARAM = 00 40&lt;br /&gt;
** LOBJ_DIFF_DIRTY = 00 80&lt;br /&gt;
** LOBJ_SPEC_DIRTY = 01 00&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;LObjAttenuationFlagsEnum&#039;&#039;&#039; :&lt;br /&gt;
** LOBJ_LIGHT_ATTN_NONE = 00 00&lt;br /&gt;
** LOBJ_LIGHT_ATTN = 00 01&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;LObjPoint&#039;&#039;&#039; : (0x14 octets) ===&lt;br /&gt;
* 4 octets - class_name&lt;br /&gt;
* 4 octets - float - x&lt;br /&gt;
* 4 octets - float - y&lt;br /&gt;
* 4 octets - float - z&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;LightAnimPointer&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
** 4 octets - next_offset - (LightAnimPointer)&lt;br /&gt;
** 4 octets - light_anim - ?&lt;br /&gt;
** 4 octets - position_anim - ?&lt;br /&gt;
** 4 octets - interst_anim - ?&lt;br /&gt;
Bugs dans HSDRaw - à tester&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;JObj&#039;&#039;&#039; : (0x40 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - flags&lt;br /&gt;
* 4 octets - child_offset (JObj)&lt;br /&gt;
* 4 octets - next_offset (JObj)&lt;br /&gt;
* 4 octets - dobj_offset (DObj)&lt;br /&gt;
* 4 octets [3] - float3 - rotation_xyz&lt;br /&gt;
* 4 octets [3] - float3 - scale_xyz&lt;br /&gt;
* 4 octets [3] - float3 - translation_xyz&lt;br /&gt;
* 4 octets - inverse_world_transform_offset (inverse world transform = Matrice de 4x3)&lt;br /&gt;
* 4 octets - robj_offset&lt;br /&gt;
&lt;br /&gt;
Pointé par les listes dans Root Node scene_data.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;JObjFlagsEnum&#039;&#039;&#039; : (peuvent se cumuler)&lt;br /&gt;
** NULL = 00 00 00 00&lt;br /&gt;
** SKELETON = 00 00 00 01&lt;br /&gt;
** SKELETON_ROOT = 00 00 00 02&lt;br /&gt;
** ENVELOPE_MODEL = 00 00 00 04&lt;br /&gt;
** CLASSICAL_SCALING = 00 00 00 08&lt;br /&gt;
** HIDDEN = 00 00 00 10&lt;br /&gt;
** PTCL = 00 00 00 20&lt;br /&gt;
** MTX_DIRTY = 00 00 00 40&lt;br /&gt;
** LIGHTING = 00 00 00 80&lt;br /&gt;
** TEXGEN = 00 00 01 00&lt;br /&gt;
** BILLBOARD = 00 00 02 00&lt;br /&gt;
** VBILLBOARD = 00 00 04 00&lt;br /&gt;
** HBILLBOARD = 00 00 06 00&lt;br /&gt;
** RBILLBOARD = 00 00 08 00&lt;br /&gt;
** INSTANCE = 00 00 10 00&lt;br /&gt;
** PBILLBOARD = 00 00 20 00&lt;br /&gt;
** SPLINE = 00 00 40 00&lt;br /&gt;
** FLIP_IK = 00 00 80 00&lt;br /&gt;
** SPECULAR = 00 01 00 00&lt;br /&gt;
** USE_QUATERNION = 00 02 00 00&lt;br /&gt;
** OPA = 00 04 00 00&lt;br /&gt;
** XLU = 00 08 00 00&lt;br /&gt;
** TEXEDGE = 00 10 00 00&lt;br /&gt;
** JOINT1 = 00 20 00 00&lt;br /&gt;
** JOINT2 = 00 40 00 00&lt;br /&gt;
** EFFECTOR = 00 60 00 00&lt;br /&gt;
** USER_DEFINED_MTX = 00 80 00 00&lt;br /&gt;
** MTX_INDEPEND_PARENT = 01 00 00 00&lt;br /&gt;
** MTX_INDEPEND_SRT = 02 00 00 00&lt;br /&gt;
** MTX_SCALE_COMPENSATE = 04 00 00 00&lt;br /&gt;
** ROOT_OPA = 10 00 00 00&lt;br /&gt;
** ROOT_XLU = 20 00 00 00&lt;br /&gt;
** ROOT_TEXEDGE = 40 00 00 00&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;InverseWorldTransform&#039;&#039;&#039; : (0x30 octets) ===&lt;br /&gt;
* 4 octets - float - M11&lt;br /&gt;
* 4 octets - float - M12&lt;br /&gt;
* 4 octets - float - M13&lt;br /&gt;
* 4 octets - float - M14&lt;br /&gt;
* 4 octets - float - M21&lt;br /&gt;
* 4 octets - float - M22&lt;br /&gt;
* 4 octets - float - M23&lt;br /&gt;
* 4 octets - float - M24&lt;br /&gt;
* 4 octets - float - M31&lt;br /&gt;
* 4 octets - float - M32&lt;br /&gt;
* 4 octets - float - M33&lt;br /&gt;
* 4 octets - float - M34&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;DObj&#039;&#039;&#039; : (0x10 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - next_offset - prochain DOBJ&lt;br /&gt;
* 4 octets - mobj_offset - material offset&lt;br /&gt;
* 4 octets - pobj_offset - mesh offset&lt;br /&gt;
Liste chaînée qui permet de récupérer l&#039;ensemble des materials &amp;amp; mesh pour le JObj auquel il est lié.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;MObj&#039;&#039;&#039; : (0x18 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - render_flags - RenderFlagsEnum&lt;br /&gt;
* 4 octets - tobj_offset - offset de texture - peut être invalide s&#039;il n&#039;y a pas de texture pour le material&lt;br /&gt;
* 4 octets - material_offset - couleurs des materials ?&lt;br /&gt;
* 8 octets - PEDesc ?&lt;br /&gt;
&lt;br /&gt;
Contient les textures &amp;amp; informations sur les couleurs des Materials.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;RenderFlagsEnum&#039;&#039;&#039; : (se cumulent)&lt;br /&gt;
** USER = 80 00 00 00&lt;br /&gt;
** CONSTANT = 00 00 00 01&lt;br /&gt;
** VERTEX = 00 00 00 02&lt;br /&gt;
** BOTH = 00 00 00 03&lt;br /&gt;
** DIFFUSE = 00 00 00 04&lt;br /&gt;
** SPECULAR = 00 00 00 08&lt;br /&gt;
** TEX0 = 00 00 00 10&lt;br /&gt;
** TEX1 = 00 00 00 20&lt;br /&gt;
** TEX2 = 00 00 00 40&lt;br /&gt;
** TEX3 = 00 00 00 80&lt;br /&gt;
** TEX4 = 00 00 01 00&lt;br /&gt;
** TEX5 = 00 00 02 00&lt;br /&gt;
** TEX6 = 00 00 04 00&lt;br /&gt;
** TEX7 = 00 00 08 00&lt;br /&gt;
** TOON = 00 00 10 00&lt;br /&gt;
** ALPHA_MAT = 00 00 20 00&lt;br /&gt;
** ALPHA_VTX = 00 00 40 00&lt;br /&gt;
** ALPHA_BOTH = 00 00 60 00&lt;br /&gt;
** ZOFST = 01 00 00 00&lt;br /&gt;
** EFFECT = 02 00 00 00&lt;br /&gt;
** SHADOW = 04 00 00 00&lt;br /&gt;
** ZMODE_ALWAYS = 08 00 00 00&lt;br /&gt;
** DF_ALL = 10 00 00 00&lt;br /&gt;
** NO_ZUPDATE = 20 00 00 00&lt;br /&gt;
** XLU = 40 00 00 00&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;TObj&#039;&#039;&#039; : (0x5c octets) ===&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - tex_map_id - TexMapIdEnum&lt;br /&gt;
* 4 octets - gx_tex_gen_src - GXTexGenSrcEnum&lt;br /&gt;
* 4 octets - float - rx&lt;br /&gt;
* 4 octets - float - ry&lt;br /&gt;
* 4 octets - float - rz&lt;br /&gt;
* 4 octets - float - sx&lt;br /&gt;
* 4 octets - float - sy&lt;br /&gt;
* 4 octets - float - sz&lt;br /&gt;
* 4 octets - float - tx&lt;br /&gt;
* 4 octets - float - ty&lt;br /&gt;
* 4 octets - float - tz&lt;br /&gt;
* 4 octets - wrap_s - WrapEnum&lt;br /&gt;
* 4 octets - wrap_t - WrapEnum&lt;br /&gt;
* 1 octet - w_scale&lt;br /&gt;
* 1 octet - h_scale&lt;br /&gt;
* 2 octets - ?&lt;br /&gt;
* 1 octets - bump_map - (False = 00 ; True = 01)&lt;br /&gt;
* 4 bits - alpha_operation - AlphaOperationEnum&lt;br /&gt;
* 4 bits - color_operation - ColorOperationEnum&lt;br /&gt;
* 1 octet - shadow_lightmap - (False = 00 ; True = 01) (2 octets avec une Enum lightmap limite)&lt;br /&gt;
* 1 bit - ext_lightmap - (False = 0 ; True = 1)&lt;br /&gt;
* 1 bit - ambiant_lightmap - (False = 0 ; True = 1) &lt;br /&gt;
* 1 bit - specular_lightmap - (False = 0 ; True = 1)&lt;br /&gt;
* 1 bit - diffuse_lightmap (False = 0 ; True = 1)&lt;br /&gt;
* 4 bits - coord_type - CoordTypeEnum&lt;br /&gt;
* 4 octets - float - blending - utilisé quand color_operation ou alpha_operation == BLEND&lt;br /&gt;
* 4 octets - mag_filter - MagFilterEnum&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
* 4 octets - ?&lt;br /&gt;
Informations de Textures. Le TObj contient des informations sur les paramètres d&#039;environnement de textures utilisés pour le rendu graphique ainsi que les offset de l&#039;image et des données de la palette utilisés pour cette texture. Le plus important ici, c&#039;est l&#039;offset d&#039;image et la palette/tlut - si l&#039;image n&#039;est pas indexée (RGBA, CMPR, etc.) alors la structure de description palette/tlut n&#039;est pas utilisée.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;TexMapIdEnum&#039;&#039;&#039; :&lt;br /&gt;
** GX_TEXMAP0 = 00 00 00 00&lt;br /&gt;
** GX_TEXMAP1 = 00 00 00 01&lt;br /&gt;
** GX_TEXMAP2 = 00 00 00 02&lt;br /&gt;
** GX_TEXMAP3 = 00 00 00 03&lt;br /&gt;
** GX_TEXMAP4 = 00 00 00 04&lt;br /&gt;
** GX_TEXMAP5 = 00 00 00 05&lt;br /&gt;
** GX_TEXMAP6 = 00 00 00 06&lt;br /&gt;
** GX_TEXMAP7 = 00 00 00 07&lt;br /&gt;
** GX_MAX_TEXMAP = 00 00 00 08&lt;br /&gt;
** GX_TEXMAP_NULL = 00 00 00 09&lt;br /&gt;
** GX_TEXMAP_DISABLE = 00 00 00 0A&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;GXTexGenSrcEnum&#039;&#039;&#039; :&lt;br /&gt;
** GX_TG_POS = 00 00 00 00&lt;br /&gt;
** GX_TG_NRM = 00 00 00 01&lt;br /&gt;
** GX_TG_BINRM = 00 00 00 02&lt;br /&gt;
** GX_TG_TANGENT = 00 00 00 03&lt;br /&gt;
** GX_TG_TEX0 = 00 00 00 04&lt;br /&gt;
** GX_TG_TEX1 = 00 00 00 05&lt;br /&gt;
** GX_TG_TEX2 = 00 00 00 06&lt;br /&gt;
** GX_TG_TEX3 = 00 00 00 07&lt;br /&gt;
** GX_TG_TEX4 = 00 00 00 08&lt;br /&gt;
** GX_TG_TEX5 = 00 00 00 09&lt;br /&gt;
** GX_TG_TEX6 = 00 00 00 0A&lt;br /&gt;
** GX_TG_TEX7 = 00 00 00 0B&lt;br /&gt;
** GX_TG_TEXCOORD0 = 00 00 00 0C&lt;br /&gt;
** GX_TG_TEXCOORD1 = 00 00 00 0D&lt;br /&gt;
** GX_TG_TEXCOORD2 = 00 00 00 0E&lt;br /&gt;
** GX_TG_TEXCOORD3 = 00 00 00 0F&lt;br /&gt;
** GX_TG_TEXCOORD4 = 00 00 00 10&lt;br /&gt;
** GX_TG_TEXCOORD5 = 00 00 00 11&lt;br /&gt;
** GX_TG_TEXCOORD6 = 00 00 00 12&lt;br /&gt;
** GX_TG_COLOR0 = 00 00 00 13&lt;br /&gt;
** GX_TG_COLOR1 = 00 00 00 14&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;AlphaOperationEnum&#039;&#039;&#039;:&lt;br /&gt;
** NONE = 0X&lt;br /&gt;
** ALPHAMASK = 1X&lt;br /&gt;
** BLEND = 2X&lt;br /&gt;
** MODULATE = 3X&lt;br /&gt;
** REPLACE = 4X&lt;br /&gt;
** PASS = 5X&lt;br /&gt;
** ADD = 6X&lt;br /&gt;
** SUB = 7X&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ColorOperationEnum&#039;&#039;&#039;:&lt;br /&gt;
** NONE = X0&lt;br /&gt;
** ALPHA_MASK = X1&lt;br /&gt;
** RGB_MASK = X2&lt;br /&gt;
** BLEND = X3&lt;br /&gt;
** MODULATE = X4&lt;br /&gt;
** REPLACE = X5&lt;br /&gt;
** PASS = X6&lt;br /&gt;
** ADD = X7&lt;br /&gt;
** SUB = X8&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;CoordTypeEnum&#039;&#039;&#039;:&lt;br /&gt;
** UV = X0&lt;br /&gt;
** REFLECTION = X1&lt;br /&gt;
** HILIGHT = X2&lt;br /&gt;
** SHADOW = X3&lt;br /&gt;
** TOON = X4&lt;br /&gt;
** GRADATION = X5&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MagFilterEnum&#039;&#039;&#039;:&lt;br /&gt;
** GX_NEAR = 00 00 00 00&lt;br /&gt;
** GX_LINEAR = 00 00 00 01&lt;br /&gt;
** GX_NEAR_MIP_NEAR = 00 00 00 02&lt;br /&gt;
** GX_LIN_MIP_NEAR = 00 00 00 03&lt;br /&gt;
** GX_NEAR_MIP_LIN = 00 00 00 04&lt;br /&gt;
** GX_LIN_MIP_LIN = 00 00 00 05&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;WrapEnum&#039;&#039;&#039;:&lt;br /&gt;
** CLAMP = 00 00 00 00&lt;br /&gt;
** REPEAT = 00 00 00 01&lt;br /&gt;
** MIRROR = 00 00 00 02&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Material&#039;&#039;&#039; : (0x14 octets) ===&lt;br /&gt;
* 1 octets - AMB_R - (ambient)&lt;br /&gt;
* 1 octets - AMB_G&lt;br /&gt;
* 1 octets - AMB_B&lt;br /&gt;
* 1 octets - AMB_A&lt;br /&gt;
* 1 octets - DIF_R - (diffuse)&lt;br /&gt;
* 1 octets - DIF_G&lt;br /&gt;
* 1 octets - DIF_B&lt;br /&gt;
* 1 octets - DIF_A&lt;br /&gt;
* 1 octets - SPC_R - (specular)&lt;br /&gt;
* 1 octets - SPC_G&lt;br /&gt;
* 1 octets - SPC_B&lt;br /&gt;
* 1 octets - SPC_A&lt;br /&gt;
* 4 octets - float - alpha&lt;br /&gt;
* 4 octets - float - shininess&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;PObj&#039;&#039;&#039; : (0x18 octets) ===&lt;br /&gt;
* 4 octets - Inconnu&lt;br /&gt;
* 4 octets - next_offset - pobj&lt;br /&gt;
* 4 octets - vertex_attr_list_offset&lt;br /&gt;
* 2 octets - Flags - PObjFlagsEnum&lt;br /&gt;
* 2 octets - display_list_size - number of 0x20 (32) byte blocks occupied by display list data&lt;br /&gt;
* 4 octets - display_list_offset&lt;br /&gt;
* 4 octets - weight_list_offset - ? verifier qu&#039;on retrouve bien le tableau d&#039;envelope_weights à cet offset&lt;br /&gt;
&lt;br /&gt;
Comme l&#039;indique next_offset, il s&#039;agit d&#039;une liste de meshs à afficher pour un material donné référencé par un dobj. PObj contient les offsets de vertex attributes / display list / joint weight list ce qui suffit et permet d’interpréter et traiter les coordonnées de vertices, normals &amp;amp; textures.&lt;br /&gt;
&lt;br /&gt;
Les attributs vertex sont les plus important - les parametres specifiés contrôlent tout : du format, de la taille des données de chaque vertex, normal et coordonnées de textures et comment ces valeurs sont dimensionnées (scaled) par rapport à la présence et la taille de chaque valeur d&#039;index qui apparaît dans la display list information.&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PObjFlagsEnum&#039;&#039;&#039; :&lt;br /&gt;
** Inconnu0 = 00 01&lt;br /&gt;
** Inconnu1 = 00 02&lt;br /&gt;
** ANIM = 00 08&lt;br /&gt;
** SHAPE_ANIM = 10 00&lt;br /&gt;
** ENVELOPE = 20 00&lt;br /&gt;
** CULLBACK = 40 00&lt;br /&gt;
** CULLFRONT = 80 00&lt;br /&gt;
&lt;br /&gt;
=== EnvelopeWeights : (0x? octets) ===&lt;br /&gt;
* 4 octets - envelope_count&lt;br /&gt;
* [envelope_count]:&lt;br /&gt;
** 4 octets - float - weight&lt;br /&gt;
** 4 octets - pad ?&lt;br /&gt;
* 4 octets - jobj_list_offset&lt;br /&gt;
&lt;br /&gt;
=== not verified yet ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;IMAGE_HEADER&#039;&#039;&#039; :&lt;br /&gt;
** 4 octets - image_offset - image data&lt;br /&gt;
** 2 octets - width&lt;br /&gt;
** 2 octets - height&lt;br /&gt;
** 4 octets - image_format&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;PALETTE_HEADER&#039;&#039;&#039; : (0x10)&lt;br /&gt;
** 4 octets - palette_offset - palette data&lt;br /&gt;
** 4 octets - palette_format&lt;br /&gt;
** 4 octets - Inconnu&lt;br /&gt;
** 2 octets - color_count&lt;br /&gt;
** 2 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
image_offset et palette_offset sont souvent partagés par plusieurs textures - savoir ça permet de retrouver toutes les informations sur les images des textures (largeur, hauteur, format), ainsi que le format et le nombre de couleurs de la palette/tlut.&lt;br /&gt;
&lt;br /&gt;
Le format d&#039;image ne détermine pas le nombre total de couleurs de la palette qu&#039;elle utilisent. Par exemple, une image indexée sur 8 bits aurait un maximum de 256 couleurs mais seulement 136 ou 221 couleurs sont actuellement utilisées. De la sorte, la palette n&#039;utilisera pas la taille totale qu&#039;elle devrait utiliser.&lt;br /&gt;
&lt;br /&gt;
Les images suivent la structure généralement utilisée par la GameCube :&lt;br /&gt;
&lt;br /&gt;
IMAGE FORMATS :&lt;br /&gt;
* case 0: //i4&lt;br /&gt;
* case 1: //i8&lt;br /&gt;
* case 2: //i4a4&lt;br /&gt;
* case 3: //i8a8&lt;br /&gt;
* case 4: //r5g6b5&lt;br /&gt;
* case 5: //rgb5a3&lt;br /&gt;
* case 6: //r8g8b8a8&lt;br /&gt;
* case 8: //index4&lt;br /&gt;
* case 9: //index8&lt;br /&gt;
* case 0xa: //index14x2&lt;br /&gt;
* case 0xe: //s3tc1&lt;br /&gt;
&lt;br /&gt;
Les formats indexés utilisent aussi les informations de palettes/tlut et les données peuvent apparaître en plusieurs formats :&lt;br /&gt;
&lt;br /&gt;
PALETTE FORMATS :&lt;br /&gt;
* case 0: //ia8&lt;br /&gt;
* case 1: //r5g6b5&lt;br /&gt;
* case 2: //rgb5a3&lt;br /&gt;
&lt;br /&gt;
---&amp;gt; &amp;quot;Joint Data - Accessing Geometry, Mesh, and Vertex Attributes&amp;quot; https://smashboards.com/threads/melee-dat-format.292603/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
trad a revoir à partir de là, il faut investiguer le rendu 3D sur GameCube pour mieux comprendre&lt;br /&gt;
&lt;br /&gt;
// déclaration d&#039;un vertex et attribute information&lt;br /&gt;
// attr, type, cnt, data_type, flags?, file_offset&lt;br /&gt;
* ATTR_DATA&lt;br /&gt;
** 4 octets - GXAttr     vtx_attr_offset - attr&lt;br /&gt;
** 4 octets - GXAttrType vtx_attr_type   - index_type&lt;br /&gt;
** 4 octets - GXCompCnt  comp_cnt        - cnt&lt;br /&gt;
** 4 octets - GXCompType comp_type       - data_type	&lt;br /&gt;
** 1 octets - scale&lt;br /&gt;
** 1 octets - Inconnu&lt;br /&gt;
** 2 octets - vtx_stride&lt;br /&gt;
** 2 octets - data_offset&lt;br /&gt;
&lt;br /&gt;
vertex_attr_offset pointe sur une liste d&#039;attributs de vertex. Leur nombre n&#039;est pas donné. Les données dans cette structure suivent les informations et les types conçus par l&#039;architecture GameCube/WII et son API. La liste est terminée par une valeur spécifique de vtx_attr qui signale la fin de cette liste. Avec un accès à la doku SDK, il serait fortement conseillé de lire la section à propos des &amp;quot;vertex attributes and other specifications&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
La valeur de vtx_attr determine le type de donnée que cet attribut désigne et peut indiquer un nombre de types natifs utilisés utilisés pour passer les données entre les interfaces logicielles et matérielles.&lt;br /&gt;
&lt;br /&gt;
Les valeures possibles sont les suivantes :&lt;br /&gt;
* enum GXAttr (4 octets)&lt;br /&gt;
** GX_VA_PNMTXIDX = 0,    // position/normal matrix index&lt;br /&gt;
** GX_VA_TEX0MTXIDX,      // texture 0 matrix index&lt;br /&gt;
** GX_VA_TEX1MTXIDX,      // texture 1 matrix index&lt;br /&gt;
** GX_VA_TEX2MTXIDX,      // texture 2 matrix index&lt;br /&gt;
** GX_VA_TEX3MTXIDX,      // texture 3 matrix index&lt;br /&gt;
** GX_VA_TEX4MTXIDX,      // texture 4 matrix index&lt;br /&gt;
** GX_VA_TEX5MTXIDX,      // texture 5 matrix index&lt;br /&gt;
** GX_VA_TEX6MTXIDX,      // texture 6 matrix index&lt;br /&gt;
** GX_VA_TEX7MTXIDX,      // texture 7 matrix index&lt;br /&gt;
** GX_VA_POS      = 9,    // position&lt;br /&gt;
** GX_VA_NRM,             // normal&lt;br /&gt;
** GX_VA_CLR0,            // color 0&lt;br /&gt;
** GX_VA_CLR1,            // color 1&lt;br /&gt;
** GX_VA_TEX0,            // input texture coordinate 0&lt;br /&gt;
** GX_VA_TEX1,            // input texture coordinate 1&lt;br /&gt;
** GX_VA_TEX2,            // input texture coordinate 2&lt;br /&gt;
** GX_VA_TEX3,            // input texture coordinate 3&lt;br /&gt;
** GX_VA_TEX4,            // input texture coordinate 4&lt;br /&gt;
** GX_VA_TEX5,            // input texture coordinate 5&lt;br /&gt;
** GX_VA_TEX6,            // input texture coordinate 6&lt;br /&gt;
** GX_VA_TEX7,            // input texture coordinate 7&lt;br /&gt;
&lt;br /&gt;
** GX_POS_MTX_ARRAY,      // position matrix array pointer&lt;br /&gt;
** GX_NRM_MTX_ARRAY,      // normal matrix array pointer&lt;br /&gt;
** GX_TEX_MTX_ARRAY,      // texture matrix array pointer&lt;br /&gt;
** GX_LIGHT_ARRAY,        // light parameter array pointer&lt;br /&gt;
** GX_VA_NBT,             // normal, bi-normal, tangent &lt;br /&gt;
** GX_VA_MAX_ATTR,        // maximum number of vertex attributes&lt;br /&gt;
&lt;br /&gt;
** GX_VA_NULL     = 0xff  // NULL attribute (to mark end of lists)&lt;br /&gt;
&lt;br /&gt;
Toutes les données nécessaires pour représenter un mesh peuvent être spécifiées et indexées d&#039;une manière ou d&#039;une autre. De même, GX_VA_TEX0MTXIDX, GX_VA_CLR0, et autres sont aussi possibles - les valeurs les plus fréquentes dans les données SSBM sont : GX_VA_PNMTXIDX, GX_VA_POS, GX_VA_NRM, et GX_VA_TEX0. Which is to be expected as joint matrices, vertex positions/normals, and texture coordinates respectively are probably the most basic of elements needed to display a texture mesh, whether static or animated.&lt;br /&gt;
&lt;br /&gt;
When the value of vtx_attr == GX_VA_NULL (0xFF), the end of the vertex attribute array has been reached.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The vtx_attr_type values is actually associated with how the value is indexed, and can thus also determine the size of the index value within the display list data.&lt;br /&gt;
&lt;br /&gt;
* 4 octets - enum GXAttrType&lt;br /&gt;
** GX_NONE    = 0,&lt;br /&gt;
** GX_DIRECT,&lt;br /&gt;
** GX_INDEX8,&lt;br /&gt;
** GX_INDEX16&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Structures COLL_DATA : (données de collisions)&lt;br /&gt;
** 4 octets - vertex_offset (2 float par entrée correspondant à des données 2D probablement)&lt;br /&gt;
** 4 octets - vertex_count&lt;br /&gt;
** 4 octets - index_offset&lt;br /&gt;
** 4 octets - index_count&lt;br /&gt;
** 4 octets [5] - tableau inconnu&lt;br /&gt;
*** 2 octets - index_start&lt;br /&gt;
*** 2 octets - index_count&lt;br /&gt;
** 4 octets - Inconnu&lt;br /&gt;
** 4 octets - Inconnu&lt;br /&gt;
&lt;br /&gt;
[[Category:Implementations]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=Implementations&amp;diff=1521</id>
		<title>Implementations</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=Implementations&amp;diff=1521"/>
		<updated>2023-10-07T13:13:17Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: /* Borgs GET system */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: center;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;This section is a work in progress.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15); text-align: center;&amp;quot;&amp;gt;Research is still needed and some paragraphs may be wrong.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Implementation of the game elements ==&lt;br /&gt;
&lt;br /&gt;
=== Borg ===&lt;br /&gt;
==== GUI elements ====&lt;br /&gt;
==== Borgs GET system ====&lt;br /&gt;
CrystalPixel who found the values.&lt;br /&gt;
&lt;br /&gt;
During a fight in Story Mode, when fighting an enemy borg for a given colour you have two values:&lt;br /&gt;
* The GET value&lt;br /&gt;
* The GET counter&lt;br /&gt;
&lt;br /&gt;
When you eliminate the enemy borg of a given colour, you have its GET counter which increments by a random value between 1 and 16. When the GET counter is greater than or equal to the GET value, we get the borg / Data Crystal at the end of the battle. Then the GET counter of this borg / colour combination is reset to 0. If one leaves or loses the battle, all GET counters are reset to the value they had before the battle started.&lt;br /&gt;
&lt;br /&gt;
For a large number of borgs it is then impossible to get them without having fought a certain amount. For example, Gold Death Borg Alpha has a GET value of 40. In two battles, for example, you can only get 36 in the best case.&lt;br /&gt;
&lt;br /&gt;
1 borg has a GET value of -1:&lt;br /&gt;
* Galactic Emperor&lt;br /&gt;
&lt;br /&gt;
The rest has no GET value:&lt;br /&gt;
* Cyber Death Dragon (Fusion Borg)&lt;br /&gt;
* Machine Dragon&lt;br /&gt;
* Cyber Machine Seiryu (Fusion Borg)&lt;br /&gt;
* Cyber Machine Suzaku (Fusion Borg)&lt;br /&gt;
* Cyber Machine Byakko (Fusion Borg)&lt;br /&gt;
* Cyber Machine Genbu (Fusion Borg)&lt;br /&gt;
* G Red (One of the borg we have)&lt;br /&gt;
* Neo G Red (One of the borgs we have)&lt;br /&gt;
* G Black (It is obtained in a special event)&lt;br /&gt;
&lt;br /&gt;
By changing the GET value to a positive value, you can get the borgs in the scenario: Galactic Emperor for example.&lt;br /&gt;
&lt;br /&gt;
The list of GET values for the EU version is available on [https://github.com/Virtual-World-RE/NeoGF/blob/main/data/eu_borgs_GET_values.csv github].&lt;br /&gt;
&lt;br /&gt;
==== Files and operation ====&lt;br /&gt;
Borgs are implemented with a set of files, each with a specific function. These files are duplicated in the pzz of the borg and in the afs_data. The different _mdl define the different colours of the Borg. It seems that they are used with additional values in other files (the displays are not always correct when exchanging positions in the iso). The main _mdl is loaded from the pzz (collection or story menu). &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;One theory would be that part of the duplicate files would be used to load enemies and the other part allies.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For each borg we have:&amp;lt;br&amp;gt;&lt;br /&gt;
 plxxxx.pzz&lt;br /&gt;
 ├─ 000 file [[Borg - data file|plxxxxdata.bin]]  -&amp;gt; always present&lt;br /&gt;
 ├─ 001?                     -&amp;gt; often not present&lt;br /&gt;
 ├─ 002 file plxxxxhit.bin   -&amp;gt; always present&lt;br /&gt;
 ├─ 003 file [[Motions|plxxxxmot.bin]]   -&amp;gt; often not present&lt;br /&gt;
 ├─ 004 file [[Models|plxxxx_mdl.arc]]  -&amp;gt; always present&lt;br /&gt;
 ├─ 005 file [[Models|plxxxxb_mdl.arc]] -&amp;gt; always present -&amp;gt; blue model&lt;br /&gt;
 ├─ 006 file [[Models|plxxxxg_mdl.arc]] -&amp;gt; always present&lt;br /&gt;
 ├─ 007 file [[Models|plxxxxs_mdl.arc]] -&amp;gt; always present -&amp;gt; silver model&lt;br /&gt;
 ├─ 008 file [[Models|plxxxxc_mdl.arc]] -&amp;gt; always present&lt;br /&gt;
 ├─ 009 file [[Models|plxxxxk_mdl.arc]] -&amp;gt; always present -&amp;gt; black model&lt;br /&gt;
 ├─ 010 [[TPL (File format)|TPL]] -&amp;gt; name of the borg in Japanese&lt;br /&gt;
 ├─ 011 [[TPL (File format)|TPL]] -&amp;gt; name of the borg in Japanese (small format)&lt;br /&gt;
 ├─ 012 [[TPL (File format)|TPL]] -&amp;gt; borg name in the language of the game&lt;br /&gt;
 └─ 013 file mnxxxx.tpl -&amp;gt; [[TPL (File format)|TPL]] -&amp;gt; name of the borg in the game language (small format)&lt;br /&gt;
 [[Borg - data file|plxxxxdata.bin]] -&amp;gt; file can be named data2 or data3 (only one of the three is present), sometimes missing from the afs_data&lt;br /&gt;
 plxxxxhit.bin   -&amp;gt; always present in the afs_data and pzz&lt;br /&gt;
 [[Motions|plxxxxmot.bin]]   -&amp;gt; often absent from the afs_data&lt;br /&gt;
 [[Models|plxxxx_mdl.arc]]  -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxb_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxg_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxs_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxc_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxk_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 mnxxxx.tpl&lt;br /&gt;
&lt;br /&gt;
Position 002: for borg pl0507 and pl0513, file 2 and hit differ (USA/NTSC version)&lt;br /&gt;
&lt;br /&gt;
Position 003: for the borg pl0009, file 3 and the word differ (USA/NTSC version) (MOT - &#039;&#039;Mot&#039;&#039;&#039;ion) - It can be observed that for these files, there are references that could make one think of &#039;&#039;plxxxx_xx_animjoint&#039;&#039;.  The investigation conducted by the [https://smashboards.com/threads/melee-dat-format.292603/ Smash Bros Brawl] community shows a similar file structure. This is another version of HSD (the basic structures are the same).&lt;br /&gt;
&lt;br /&gt;
Position 004 to 009: contain &#039;&#039;&#039;scene_data&#039;&#039;&#039; at the end of the data section, and are &#039;&#039;&#039;&#039;&amp;quot;Scene&amp;quot;&#039;&#039; files (HSDLib) which contain lights, cameras, vertices, bones in the manner of a .blend.&lt;br /&gt;
&lt;br /&gt;
Position 004 to 008: files with values corresponding to 3D. In particular, we can cite &#039;&#039;&#039;pl0300.pzz&#039;&#039;&#039; where they have a header &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;with flags&amp;lt;/span&amp;gt; as well as an adjustable padding if need be to have more elements &#039;&#039;&#039;For example for &#039;&#039;&#039;pl0629.pzz&#039;&#039;&#039; the amount &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;of flags&amp;lt;/span&amp;gt; in the headers is more consistent.&#039;&#039; The origin &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;of the flags&amp;lt;/span&amp;gt; and values in the header is currently unknown but these header fields &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;might constitute a list of available meshes in the file.&amp;lt;/span&amp;gt; The software used to read the files in position 004 to 009 in plxxxx.pzz are 3D Model Researcher and HSDRawLibrary.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Unimplemented borgs&#039;&#039;&#039;: pl0803 - pl080b - pl0f07&amp;lt;br&amp;gt;&lt;br /&gt;
Only the pl0803hit.bin and pl080bhit.bin files remain, and none of their associated files (notably, no associated pzz), which indicates that they are remnants of unimplemented borgs... Also the pzz pl0f07 has no hit file, no 4 internal TPLs (but 4 empty files instead) and just its pl0f07_mdl.arc file, which indicates that this borg is not implemented either (USA/NTSC version).&lt;br /&gt;
&lt;br /&gt;
The 2 dpxxxx.pzz files are similar files to plxxxx.pzz but without the final TPL files. Their usefulness is still to be determined.&lt;br /&gt;
&lt;br /&gt;
Files dpxxxx.pzz (2)&lt;br /&gt;
 ├─ 000 -&amp;gt; [[Borg - data file|plxxxxdata.bin]] from afs_data&lt;br /&gt;
 ├─ 001 -&amp;gt; empty file&lt;br /&gt;
 ├─ 002 -&amp;gt; plxxxxhit.bin from the afs_data&lt;br /&gt;
 ├─ 003 -&amp;gt; [[Motions|plxxxxmot.bin]] from the afs_data&lt;br /&gt;
 ├─ 004 -&amp;gt; [[Models|plxxxx_mdl.arc]] of the afs_data&lt;br /&gt;
 ├─ 005 -&amp;gt; [[Models|plxxxxb_mdl.arc]] of the afs_data&lt;br /&gt;
 ├─ 006 -&amp;gt; [[Models|plxxxxg_mdl.arc]] of the afs_data&lt;br /&gt;
 ├─ 007 -&amp;gt; [[Models|plxxxxs_mdl.arc]] of the afs_data&lt;br /&gt;
 ├─ 008 -&amp;gt; [[Models|plxxxxc_mdl.arc]] of the afs_data&lt;br /&gt;
 └─ 009 -&amp;gt; [[Models|plxxxxk_mdl.arc]] of the afs_data&lt;br /&gt;
&lt;br /&gt;
==== Memory backups ====&lt;br /&gt;
&lt;br /&gt;
=== Data Crystals ===&lt;br /&gt;
The itxxxx_mdl.arz, once unpacked with pzztool.py are the templates for the data crystals.&lt;br /&gt;
&lt;br /&gt;
==== Graphical interface elements ====&lt;br /&gt;
&lt;br /&gt;
unitall_mdl.arc contains all the borg thumbnails used in the force creation/modification menu as well as in the post-combat scene showing which team/borgs VS team/borgs, and in the data crystals.&lt;br /&gt;
&lt;br /&gt;
==== Files and operation ====&lt;br /&gt;
==== Memory saves ====&lt;br /&gt;
&lt;br /&gt;
[[Category:Implementations]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=Implementations&amp;diff=1520</id>
		<title>Implementations</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=Implementations&amp;diff=1520"/>
		<updated>2023-10-07T13:12:47Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: /* Borgs GET system */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: center;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;This section is a work in progress.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15); text-align: center;&amp;quot;&amp;gt;Research is still needed and some paragraphs may be wrong.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Implementation of the game elements ==&lt;br /&gt;
&lt;br /&gt;
=== Borg ===&lt;br /&gt;
==== GUI elements ====&lt;br /&gt;
==== Borgs GET system ====&lt;br /&gt;
CrystalPixel who found the values.&lt;br /&gt;
&lt;br /&gt;
During a fight in Story Mode, when fighting an enemy borg for a given colour you have two values:&lt;br /&gt;
* The GET value&lt;br /&gt;
* The GET counter&lt;br /&gt;
&lt;br /&gt;
When you eliminate the enemy borg of a given colour, you have its GET counter which increments by a random value between 1 and 16. When the GET counter is greater than or equal to the GET value, we get the borg / Data Crystal at the end of the battle. Then the GET counter of this borg / colour combination is reset to 0. If one leaves or loses the battle, all GET counters are reset to the value they had before the battle started.&lt;br /&gt;
&lt;br /&gt;
For a large number of borgs it is then impossible to get them without having fought a certain amount. For example, Gold Death Borg Alpha has a GET value of 40. In two battles, for example, you can only get 36 in the best case.&lt;br /&gt;
&lt;br /&gt;
1 borg has a GET value of -1:&lt;br /&gt;
* Galactic Emperor&lt;br /&gt;
&lt;br /&gt;
The rest has no GET value:&lt;br /&gt;
* Cyber Death Dragon (Fusion Borg)&lt;br /&gt;
* Machine Dragon&lt;br /&gt;
* Cyber Machine Seiryu (Fusion Borg)&lt;br /&gt;
* Cyber Machine Suzaku (Fusion Borg)&lt;br /&gt;
* Cyber Machine Byakko (Fusion Borg)&lt;br /&gt;
* Cyber Machine Genbu (Fusion Borg)&lt;br /&gt;
* G Red (One of the borg we have)&lt;br /&gt;
* Neo G Red (One of the borgs we have)&lt;br /&gt;
* G Black (It is obtained in a special event)&lt;br /&gt;
&lt;br /&gt;
By changing the GET value to a positive value, you can get the borgs in the scenario: Galactic Emperor for example.&lt;br /&gt;
&lt;br /&gt;
The list of GET values for the EU version is available at [https://github.com/Virtual-World-RE/NeoGF/blob/main/data/eu_borgs_GET_values.csv github].&lt;br /&gt;
&lt;br /&gt;
==== Files and operation ====&lt;br /&gt;
Borgs are implemented with a set of files, each with a specific function. These files are duplicated in the pzz of the borg and in the afs_data. The different _mdl define the different colours of the Borg. It seems that they are used with additional values in other files (the displays are not always correct when exchanging positions in the iso). The main _mdl is loaded from the pzz (collection or story menu). &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;One theory would be that part of the duplicate files would be used to load enemies and the other part allies.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For each borg we have:&amp;lt;br&amp;gt;&lt;br /&gt;
 plxxxx.pzz&lt;br /&gt;
 ├─ 000 file [[Borg - data file|plxxxxdata.bin]]  -&amp;gt; always present&lt;br /&gt;
 ├─ 001?                     -&amp;gt; often not present&lt;br /&gt;
 ├─ 002 file plxxxxhit.bin   -&amp;gt; always present&lt;br /&gt;
 ├─ 003 file [[Motions|plxxxxmot.bin]]   -&amp;gt; often not present&lt;br /&gt;
 ├─ 004 file [[Models|plxxxx_mdl.arc]]  -&amp;gt; always present&lt;br /&gt;
 ├─ 005 file [[Models|plxxxxb_mdl.arc]] -&amp;gt; always present -&amp;gt; blue model&lt;br /&gt;
 ├─ 006 file [[Models|plxxxxg_mdl.arc]] -&amp;gt; always present&lt;br /&gt;
 ├─ 007 file [[Models|plxxxxs_mdl.arc]] -&amp;gt; always present -&amp;gt; silver model&lt;br /&gt;
 ├─ 008 file [[Models|plxxxxc_mdl.arc]] -&amp;gt; always present&lt;br /&gt;
 ├─ 009 file [[Models|plxxxxk_mdl.arc]] -&amp;gt; always present -&amp;gt; black model&lt;br /&gt;
 ├─ 010 [[TPL (File format)|TPL]] -&amp;gt; name of the borg in Japanese&lt;br /&gt;
 ├─ 011 [[TPL (File format)|TPL]] -&amp;gt; name of the borg in Japanese (small format)&lt;br /&gt;
 ├─ 012 [[TPL (File format)|TPL]] -&amp;gt; borg name in the language of the game&lt;br /&gt;
 └─ 013 file mnxxxx.tpl -&amp;gt; [[TPL (File format)|TPL]] -&amp;gt; name of the borg in the game language (small format)&lt;br /&gt;
 [[Borg - data file|plxxxxdata.bin]] -&amp;gt; file can be named data2 or data3 (only one of the three is present), sometimes missing from the afs_data&lt;br /&gt;
 plxxxxhit.bin   -&amp;gt; always present in the afs_data and pzz&lt;br /&gt;
 [[Motions|plxxxxmot.bin]]   -&amp;gt; often absent from the afs_data&lt;br /&gt;
 [[Models|plxxxx_mdl.arc]]  -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxb_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxg_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxs_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxc_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxk_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 mnxxxx.tpl&lt;br /&gt;
&lt;br /&gt;
Position 002: for borg pl0507 and pl0513, file 2 and hit differ (USA/NTSC version)&lt;br /&gt;
&lt;br /&gt;
Position 003: for the borg pl0009, file 3 and the word differ (USA/NTSC version) (MOT - &#039;&#039;Mot&#039;&#039;&#039;ion) - It can be observed that for these files, there are references that could make one think of &#039;&#039;plxxxx_xx_animjoint&#039;&#039;.  The investigation conducted by the [https://smashboards.com/threads/melee-dat-format.292603/ Smash Bros Brawl] community shows a similar file structure. This is another version of HSD (the basic structures are the same).&lt;br /&gt;
&lt;br /&gt;
Position 004 to 009: contain &#039;&#039;&#039;scene_data&#039;&#039;&#039; at the end of the data section, and are &#039;&#039;&#039;&#039;&amp;quot;Scene&amp;quot;&#039;&#039; files (HSDLib) which contain lights, cameras, vertices, bones in the manner of a .blend.&lt;br /&gt;
&lt;br /&gt;
Position 004 to 008: files with values corresponding to 3D. In particular, we can cite &#039;&#039;&#039;pl0300.pzz&#039;&#039;&#039; where they have a header &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;with flags&amp;lt;/span&amp;gt; as well as an adjustable padding if need be to have more elements &#039;&#039;&#039;For example for &#039;&#039;&#039;pl0629.pzz&#039;&#039;&#039; the amount &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;of flags&amp;lt;/span&amp;gt; in the headers is more consistent.&#039;&#039; The origin &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;of the flags&amp;lt;/span&amp;gt; and values in the header is currently unknown but these header fields &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;might constitute a list of available meshes in the file.&amp;lt;/span&amp;gt; The software used to read the files in position 004 to 009 in plxxxx.pzz are 3D Model Researcher and HSDRawLibrary.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Unimplemented borgs&#039;&#039;&#039;: pl0803 - pl080b - pl0f07&amp;lt;br&amp;gt;&lt;br /&gt;
Only the pl0803hit.bin and pl080bhit.bin files remain, and none of their associated files (notably, no associated pzz), which indicates that they are remnants of unimplemented borgs... Also the pzz pl0f07 has no hit file, no 4 internal TPLs (but 4 empty files instead) and just its pl0f07_mdl.arc file, which indicates that this borg is not implemented either (USA/NTSC version).&lt;br /&gt;
&lt;br /&gt;
The 2 dpxxxx.pzz files are similar files to plxxxx.pzz but without the final TPL files. Their usefulness is still to be determined.&lt;br /&gt;
&lt;br /&gt;
Files dpxxxx.pzz (2)&lt;br /&gt;
 ├─ 000 -&amp;gt; [[Borg - data file|plxxxxdata.bin]] from afs_data&lt;br /&gt;
 ├─ 001 -&amp;gt; empty file&lt;br /&gt;
 ├─ 002 -&amp;gt; plxxxxhit.bin from the afs_data&lt;br /&gt;
 ├─ 003 -&amp;gt; [[Motions|plxxxxmot.bin]] from the afs_data&lt;br /&gt;
 ├─ 004 -&amp;gt; [[Models|plxxxx_mdl.arc]] of the afs_data&lt;br /&gt;
 ├─ 005 -&amp;gt; [[Models|plxxxxb_mdl.arc]] of the afs_data&lt;br /&gt;
 ├─ 006 -&amp;gt; [[Models|plxxxxg_mdl.arc]] of the afs_data&lt;br /&gt;
 ├─ 007 -&amp;gt; [[Models|plxxxxs_mdl.arc]] of the afs_data&lt;br /&gt;
 ├─ 008 -&amp;gt; [[Models|plxxxxc_mdl.arc]] of the afs_data&lt;br /&gt;
 └─ 009 -&amp;gt; [[Models|plxxxxk_mdl.arc]] of the afs_data&lt;br /&gt;
&lt;br /&gt;
==== Memory backups ====&lt;br /&gt;
&lt;br /&gt;
=== Data Crystals ===&lt;br /&gt;
The itxxxx_mdl.arz, once unpacked with pzztool.py are the templates for the data crystals.&lt;br /&gt;
&lt;br /&gt;
==== Graphical interface elements ====&lt;br /&gt;
&lt;br /&gt;
unitall_mdl.arc contains all the borg thumbnails used in the force creation/modification menu as well as in the post-combat scene showing which team/borgs VS team/borgs, and in the data crystals.&lt;br /&gt;
&lt;br /&gt;
==== Files and operation ====&lt;br /&gt;
==== Memory saves ====&lt;br /&gt;
&lt;br /&gt;
[[Category:Implementations]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=Implementations&amp;diff=1519</id>
		<title>Implementations</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=Implementations&amp;diff=1519"/>
		<updated>2023-10-07T13:11:35Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: /* Files and operation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: center;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;This section is a work in progress.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15); text-align: center;&amp;quot;&amp;gt;Research is still needed and some paragraphs may be wrong.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Implementation of the game elements ==&lt;br /&gt;
&lt;br /&gt;
=== Borg ===&lt;br /&gt;
==== GUI elements ====&lt;br /&gt;
==== Borgs GET system ====&lt;br /&gt;
CrystalPixel who found the values.&lt;br /&gt;
&lt;br /&gt;
During a fight in Story Mode, when fighting an enemy borg for a given colour you have two values:&lt;br /&gt;
* The GET value&lt;br /&gt;
* The GET counter&lt;br /&gt;
&lt;br /&gt;
When you eliminate the enemy borg of a given colour, you have its GET counter which increments by a random value between 1 and 16. When the GET counter is greater than or equal to the GET value, we get the borg / Data Crystal at the end of the battle. Then the GET counter of this borg / colour combination is reset to 0. If one leaves or loses the battle, all GET counters are reset to the value they had before the battle started.&lt;br /&gt;
&lt;br /&gt;
For a large number of borgs it is then impossible to get them without having fought a certain amount. For example, Gold Death Borg Alpha has a GET value of 40. In two battles, for example, you can only get 36 in the best case.&lt;br /&gt;
&lt;br /&gt;
1 borg has a GET value of -1:&lt;br /&gt;
* Galactic Emperor&lt;br /&gt;
&lt;br /&gt;
The rest have no GET value:&lt;br /&gt;
* Cyber Death Dragon (Fusion Borg)&lt;br /&gt;
* Machine Dragon&lt;br /&gt;
* Cyber Machine Seiryu (Fusion Borg)&lt;br /&gt;
* Cyber Machine Suzaku (Fusion Borg)&lt;br /&gt;
* Cyber Machine Byakko (Fusion Borg)&lt;br /&gt;
* Cyber Machine Genbu (Fusion Borg)&lt;br /&gt;
* G Red (One of the borg we have)&lt;br /&gt;
* Neo G Red (One of the borgs we have)&lt;br /&gt;
* G Black (It is obtained in a special event)&lt;br /&gt;
&lt;br /&gt;
By changing the GET value to a positive value, you can get the borgs in the scenario: Galactic Emperor for example.&lt;br /&gt;
&lt;br /&gt;
The list of GET values for the EU version is available at [https://github.com/Virtual-World-RE/NeoGF/blob/main/data/eu_borgs_GET_values.csv github].&lt;br /&gt;
&lt;br /&gt;
==== Files and operation ====&lt;br /&gt;
Borgs are implemented with a set of files, each with a specific function. These files are duplicated in the pzz of the borg and in the afs_data. The different _mdl define the different colours of the Borg. It seems that they are used with additional values in other files (the displays are not always correct when exchanging positions in the iso). The main _mdl is loaded from the pzz (collection or story menu). &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;One theory would be that part of the duplicate files would be used to load enemies and the other part allies.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For each borg we have:&amp;lt;br&amp;gt;&lt;br /&gt;
 plxxxx.pzz&lt;br /&gt;
 ├─ 000 file [[Borg - data file|plxxxxdata.bin]]  -&amp;gt; always present&lt;br /&gt;
 ├─ 001?                     -&amp;gt; often not present&lt;br /&gt;
 ├─ 002 file plxxxxhit.bin   -&amp;gt; always present&lt;br /&gt;
 ├─ 003 file [[Motions|plxxxxmot.bin]]   -&amp;gt; often not present&lt;br /&gt;
 ├─ 004 file [[Models|plxxxx_mdl.arc]]  -&amp;gt; always present&lt;br /&gt;
 ├─ 005 file [[Models|plxxxxb_mdl.arc]] -&amp;gt; always present -&amp;gt; blue model&lt;br /&gt;
 ├─ 006 file [[Models|plxxxxg_mdl.arc]] -&amp;gt; always present&lt;br /&gt;
 ├─ 007 file [[Models|plxxxxs_mdl.arc]] -&amp;gt; always present -&amp;gt; silver model&lt;br /&gt;
 ├─ 008 file [[Models|plxxxxc_mdl.arc]] -&amp;gt; always present&lt;br /&gt;
 ├─ 009 file [[Models|plxxxxk_mdl.arc]] -&amp;gt; always present -&amp;gt; black model&lt;br /&gt;
 ├─ 010 [[TPL (File format)|TPL]] -&amp;gt; name of the borg in Japanese&lt;br /&gt;
 ├─ 011 [[TPL (File format)|TPL]] -&amp;gt; name of the borg in Japanese (small format)&lt;br /&gt;
 ├─ 012 [[TPL (File format)|TPL]] -&amp;gt; borg name in the language of the game&lt;br /&gt;
 └─ 013 file mnxxxx.tpl -&amp;gt; [[TPL (File format)|TPL]] -&amp;gt; name of the borg in the game language (small format)&lt;br /&gt;
 [[Borg - data file|plxxxxdata.bin]] -&amp;gt; file can be named data2 or data3 (only one of the three is present), sometimes missing from the afs_data&lt;br /&gt;
 plxxxxhit.bin   -&amp;gt; always present in the afs_data and pzz&lt;br /&gt;
 [[Motions|plxxxxmot.bin]]   -&amp;gt; often absent from the afs_data&lt;br /&gt;
 [[Models|plxxxx_mdl.arc]]  -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxb_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxg_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxs_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxc_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxk_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 mnxxxx.tpl&lt;br /&gt;
&lt;br /&gt;
Position 002: for borg pl0507 and pl0513, file 2 and hit differ (USA/NTSC version)&lt;br /&gt;
&lt;br /&gt;
Position 003: for the borg pl0009, file 3 and the word differ (USA/NTSC version) (MOT - &#039;&#039;Mot&#039;&#039;&#039;ion) - It can be observed that for these files, there are references that could make one think of &#039;&#039;plxxxx_xx_animjoint&#039;&#039;.  The investigation conducted by the [https://smashboards.com/threads/melee-dat-format.292603/ Smash Bros Brawl] community shows a similar file structure. This is another version of HSD (the basic structures are the same).&lt;br /&gt;
&lt;br /&gt;
Position 004 to 009: contain &#039;&#039;&#039;scene_data&#039;&#039;&#039; at the end of the data section, and are &#039;&#039;&#039;&#039;&amp;quot;Scene&amp;quot;&#039;&#039; files (HSDLib) which contain lights, cameras, vertices, bones in the manner of a .blend.&lt;br /&gt;
&lt;br /&gt;
Position 004 to 008: files with values corresponding to 3D. In particular, we can cite &#039;&#039;&#039;pl0300.pzz&#039;&#039;&#039; where they have a header &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;with flags&amp;lt;/span&amp;gt; as well as an adjustable padding if need be to have more elements &#039;&#039;&#039;For example for &#039;&#039;&#039;pl0629.pzz&#039;&#039;&#039; the amount &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;of flags&amp;lt;/span&amp;gt; in the headers is more consistent.&#039;&#039; The origin &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;of the flags&amp;lt;/span&amp;gt; and values in the header is currently unknown but these header fields &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;might constitute a list of available meshes in the file.&amp;lt;/span&amp;gt; The software used to read the files in position 004 to 009 in plxxxx.pzz are 3D Model Researcher and HSDRawLibrary.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Unimplemented borgs&#039;&#039;&#039;: pl0803 - pl080b - pl0f07&amp;lt;br&amp;gt;&lt;br /&gt;
Only the pl0803hit.bin and pl080bhit.bin files remain, and none of their associated files (notably, no associated pzz), which indicates that they are remnants of unimplemented borgs... Also the pzz pl0f07 has no hit file, no 4 internal TPLs (but 4 empty files instead) and just its pl0f07_mdl.arc file, which indicates that this borg is not implemented either (USA/NTSC version).&lt;br /&gt;
&lt;br /&gt;
The 2 dpxxxx.pzz files are similar files to plxxxx.pzz but without the final TPL files. Their usefulness is still to be determined.&lt;br /&gt;
&lt;br /&gt;
Files dpxxxx.pzz (2)&lt;br /&gt;
 ├─ 000 -&amp;gt; [[Borg - data file|plxxxxdata.bin]] from afs_data&lt;br /&gt;
 ├─ 001 -&amp;gt; empty file&lt;br /&gt;
 ├─ 002 -&amp;gt; plxxxxhit.bin from the afs_data&lt;br /&gt;
 ├─ 003 -&amp;gt; [[Motions|plxxxxmot.bin]] from the afs_data&lt;br /&gt;
 ├─ 004 -&amp;gt; [[Models|plxxxx_mdl.arc]] of the afs_data&lt;br /&gt;
 ├─ 005 -&amp;gt; [[Models|plxxxxb_mdl.arc]] of the afs_data&lt;br /&gt;
 ├─ 006 -&amp;gt; [[Models|plxxxxg_mdl.arc]] of the afs_data&lt;br /&gt;
 ├─ 007 -&amp;gt; [[Models|plxxxxs_mdl.arc]] of the afs_data&lt;br /&gt;
 ├─ 008 -&amp;gt; [[Models|plxxxxc_mdl.arc]] of the afs_data&lt;br /&gt;
 └─ 009 -&amp;gt; [[Models|plxxxxk_mdl.arc]] of the afs_data&lt;br /&gt;
&lt;br /&gt;
==== Memory backups ====&lt;br /&gt;
&lt;br /&gt;
=== Data Crystals ===&lt;br /&gt;
The itxxxx_mdl.arz, once unpacked with pzztool.py are the templates for the data crystals.&lt;br /&gt;
&lt;br /&gt;
==== Graphical interface elements ====&lt;br /&gt;
&lt;br /&gt;
unitall_mdl.arc contains all the borg thumbnails used in the force creation/modification menu as well as in the post-combat scene showing which team/borgs VS team/borgs, and in the data crystals.&lt;br /&gt;
&lt;br /&gt;
==== Files and operation ====&lt;br /&gt;
==== Memory saves ====&lt;br /&gt;
&lt;br /&gt;
[[Category:Implementations]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=Implementations&amp;diff=1518</id>
		<title>Implementations</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=Implementations&amp;diff=1518"/>
		<updated>2023-10-07T13:11:28Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: /* Files and operation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: center;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;This section is a work in progress.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15); text-align: center;&amp;quot;&amp;gt;Research is still needed and some paragraphs may be wrong.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Implementation of the game elements ==&lt;br /&gt;
&lt;br /&gt;
=== Borg ===&lt;br /&gt;
==== GUI elements ====&lt;br /&gt;
==== Borgs GET system ====&lt;br /&gt;
CrystalPixel who found the values.&lt;br /&gt;
&lt;br /&gt;
During a fight in Story Mode, when fighting an enemy borg for a given colour you have two values:&lt;br /&gt;
* The GET value&lt;br /&gt;
* The GET counter&lt;br /&gt;
&lt;br /&gt;
When you eliminate the enemy borg of a given colour, you have its GET counter which increments by a random value between 1 and 16. When the GET counter is greater than or equal to the GET value, we get the borg / Data Crystal at the end of the battle. Then the GET counter of this borg / colour combination is reset to 0. If one leaves or loses the battle, all GET counters are reset to the value they had before the battle started.&lt;br /&gt;
&lt;br /&gt;
For a large number of borgs it is then impossible to get them without having fought a certain amount. For example, Gold Death Borg Alpha has a GET value of 40. In two battles, for example, you can only get 36 in the best case.&lt;br /&gt;
&lt;br /&gt;
1 borg has a GET value of -1:&lt;br /&gt;
* Galactic Emperor&lt;br /&gt;
&lt;br /&gt;
The rest have no GET value:&lt;br /&gt;
* Cyber Death Dragon (Fusion Borg)&lt;br /&gt;
* Machine Dragon&lt;br /&gt;
* Cyber Machine Seiryu (Fusion Borg)&lt;br /&gt;
* Cyber Machine Suzaku (Fusion Borg)&lt;br /&gt;
* Cyber Machine Byakko (Fusion Borg)&lt;br /&gt;
* Cyber Machine Genbu (Fusion Borg)&lt;br /&gt;
* G Red (One of the borg we have)&lt;br /&gt;
* Neo G Red (One of the borgs we have)&lt;br /&gt;
* G Black (It is obtained in a special event)&lt;br /&gt;
&lt;br /&gt;
By changing the GET value to a positive value, you can get the borgs in the scenario: Galactic Emperor for example.&lt;br /&gt;
&lt;br /&gt;
The list of GET values for the EU version is available at [https://github.com/Virtual-World-RE/NeoGF/blob/main/data/eu_borgs_GET_values.csv github].&lt;br /&gt;
&lt;br /&gt;
==== Files and operation ====&lt;br /&gt;
Borgs are implemented with a set of files, each with a specific function. These files are duplicated in the pzz of the borg and in the afs_data. The different _mdl define the different colours of the Borg. It seems that they are used with additional values in other files (the displays are not always correct when exchanging positions in the iso). The main _mdl is loaded from the pzz (collection or story menu). &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;One theory would be that part of the duplicate files would be used to load enemies and the other part allies.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For each borg we have:&amp;lt;br&amp;gt;&lt;br /&gt;
 plxxxx.pzz&lt;br /&gt;
 ├─ 000 file [[Borg - data file|plxxxxdata.bin]]  -&amp;gt; always present&lt;br /&gt;
 ├─ 001?                     -&amp;gt; often not present&lt;br /&gt;
 ├─ 002 file plxxxxhit.bin   -&amp;gt; always present&lt;br /&gt;
 ├─ 003 file [[Motions|plxxxxmot.bin]]   -&amp;gt; often not present&lt;br /&gt;
 ├─ 004 file [[Models|plxxxx_mdl.arc]]  -&amp;gt; always present&lt;br /&gt;
 ├─ 005 file [[Models|plxxxxb_mdl.arc]] -&amp;gt; always present -&amp;gt; blue model&lt;br /&gt;
 ├─ 006 file [[Models|plxxxxg_mdl.arc]] -&amp;gt; always present&lt;br /&gt;
 ├─ 007 file [[Models|plxxxxs_mdl.arc]] -&amp;gt; always present -&amp;gt; silver model&lt;br /&gt;
 ├─ 008 file [[Models|plxxxxc_mdl.arc]] -&amp;gt; always present&lt;br /&gt;
 ├─ 009 file [[Models|plxxxxk_mdl.arc]] -&amp;gt; always present -&amp;gt; black model&lt;br /&gt;
 ├─ 010 [[TPL (File format)|TPL]] -&amp;gt; name of the borg in Japanese&lt;br /&gt;
 ├─ 011 [[TPL (File format)|TPL]] -&amp;gt; name of the borg in Japanese (small format)&lt;br /&gt;
 ├─ 012 [[TPL (File format)|TPL]] -&amp;gt; borg name in the language of the game&lt;br /&gt;
 └─ 013 file mnxxxx.tpl -&amp;gt; [[TPL (File format)|TPL]] -&amp;gt; name of the borg in the game language (small format)&lt;br /&gt;
 [[Borg - data file|plxxxxdata.bin]] -&amp;gt; file can be named data2 or data3 (only one of the three is present), sometimes missing from the afs_data&lt;br /&gt;
 plxxxxhit.bin  -&amp;gt; always present in the afs_data and pzz&lt;br /&gt;
 [[Motions|plxxxxmot.bin]]   -&amp;gt; often absent from the afs_data&lt;br /&gt;
 [[Models|plxxxx_mdl.arc]]  -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxb_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxg_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxs_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxc_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxk_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 mnxxxx.tpl&lt;br /&gt;
&lt;br /&gt;
Position 002: for borg pl0507 and pl0513, file 2 and hit differ (USA/NTSC version)&lt;br /&gt;
&lt;br /&gt;
Position 003: for the borg pl0009, file 3 and the word differ (USA/NTSC version) (MOT - &#039;&#039;Mot&#039;&#039;&#039;ion) - It can be observed that for these files, there are references that could make one think of &#039;&#039;plxxxx_xx_animjoint&#039;&#039;.  The investigation conducted by the [https://smashboards.com/threads/melee-dat-format.292603/ Smash Bros Brawl] community shows a similar file structure. This is another version of HSD (the basic structures are the same).&lt;br /&gt;
&lt;br /&gt;
Position 004 to 009: contain &#039;&#039;&#039;scene_data&#039;&#039;&#039; at the end of the data section, and are &#039;&#039;&#039;&#039;&amp;quot;Scene&amp;quot;&#039;&#039; files (HSDLib) which contain lights, cameras, vertices, bones in the manner of a .blend.&lt;br /&gt;
&lt;br /&gt;
Position 004 to 008: files with values corresponding to 3D. In particular, we can cite &#039;&#039;&#039;pl0300.pzz&#039;&#039;&#039; where they have a header &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;with flags&amp;lt;/span&amp;gt; as well as an adjustable padding if need be to have more elements &#039;&#039;&#039;For example for &#039;&#039;&#039;pl0629.pzz&#039;&#039;&#039; the amount &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;of flags&amp;lt;/span&amp;gt; in the headers is more consistent.&#039;&#039; The origin &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;of the flags&amp;lt;/span&amp;gt; and values in the header is currently unknown but these header fields &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;might constitute a list of available meshes in the file.&amp;lt;/span&amp;gt; The software used to read the files in position 004 to 009 in plxxxx.pzz are 3D Model Researcher and HSDRawLibrary.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Unimplemented borgs&#039;&#039;&#039;: pl0803 - pl080b - pl0f07&amp;lt;br&amp;gt;&lt;br /&gt;
Only the pl0803hit.bin and pl080bhit.bin files remain, and none of their associated files (notably, no associated pzz), which indicates that they are remnants of unimplemented borgs... Also the pzz pl0f07 has no hit file, no 4 internal TPLs (but 4 empty files instead) and just its pl0f07_mdl.arc file, which indicates that this borg is not implemented either (USA/NTSC version).&lt;br /&gt;
&lt;br /&gt;
The 2 dpxxxx.pzz files are similar files to plxxxx.pzz but without the final TPL files. Their usefulness is still to be determined.&lt;br /&gt;
&lt;br /&gt;
Files dpxxxx.pzz (2)&lt;br /&gt;
 ├─ 000 -&amp;gt; [[Borg - data file|plxxxxdata.bin]] from afs_data&lt;br /&gt;
 ├─ 001 -&amp;gt; empty file&lt;br /&gt;
 ├─ 002 -&amp;gt; plxxxxhit.bin from the afs_data&lt;br /&gt;
 ├─ 003 -&amp;gt; [[Motions|plxxxxmot.bin]] from the afs_data&lt;br /&gt;
 ├─ 004 -&amp;gt; [[Models|plxxxx_mdl.arc]] of the afs_data&lt;br /&gt;
 ├─ 005 -&amp;gt; [[Models|plxxxxb_mdl.arc]] of the afs_data&lt;br /&gt;
 ├─ 006 -&amp;gt; [[Models|plxxxxg_mdl.arc]] of the afs_data&lt;br /&gt;
 ├─ 007 -&amp;gt; [[Models|plxxxxs_mdl.arc]] of the afs_data&lt;br /&gt;
 ├─ 008 -&amp;gt; [[Models|plxxxxc_mdl.arc]] of the afs_data&lt;br /&gt;
 └─ 009 -&amp;gt; [[Models|plxxxxk_mdl.arc]] of the afs_data&lt;br /&gt;
&lt;br /&gt;
==== Memory backups ====&lt;br /&gt;
&lt;br /&gt;
=== Data Crystals ===&lt;br /&gt;
The itxxxx_mdl.arz, once unpacked with pzztool.py are the templates for the data crystals.&lt;br /&gt;
&lt;br /&gt;
==== Graphical interface elements ====&lt;br /&gt;
&lt;br /&gt;
unitall_mdl.arc contains all the borg thumbnails used in the force creation/modification menu as well as in the post-combat scene showing which team/borgs VS team/borgs, and in the data crystals.&lt;br /&gt;
&lt;br /&gt;
==== Files and operation ====&lt;br /&gt;
==== Memory saves ====&lt;br /&gt;
&lt;br /&gt;
[[Category:Implementations]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=Implementations&amp;diff=1517</id>
		<title>Implementations</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=Implementations&amp;diff=1517"/>
		<updated>2023-10-07T13:11:17Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: /* Files and operation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: center;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;This section is a work in progress.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15); text-align: center;&amp;quot;&amp;gt;Research is still needed and some paragraphs may be wrong.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Implementation of the game elements ==&lt;br /&gt;
&lt;br /&gt;
=== Borg ===&lt;br /&gt;
==== GUI elements ====&lt;br /&gt;
==== Borgs GET system ====&lt;br /&gt;
CrystalPixel who found the values.&lt;br /&gt;
&lt;br /&gt;
During a fight in Story Mode, when fighting an enemy borg for a given colour you have two values:&lt;br /&gt;
* The GET value&lt;br /&gt;
* The GET counter&lt;br /&gt;
&lt;br /&gt;
When you eliminate the enemy borg of a given colour, you have its GET counter which increments by a random value between 1 and 16. When the GET counter is greater than or equal to the GET value, we get the borg / Data Crystal at the end of the battle. Then the GET counter of this borg / colour combination is reset to 0. If one leaves or loses the battle, all GET counters are reset to the value they had before the battle started.&lt;br /&gt;
&lt;br /&gt;
For a large number of borgs it is then impossible to get them without having fought a certain amount. For example, Gold Death Borg Alpha has a GET value of 40. In two battles, for example, you can only get 36 in the best case.&lt;br /&gt;
&lt;br /&gt;
1 borg has a GET value of -1:&lt;br /&gt;
* Galactic Emperor&lt;br /&gt;
&lt;br /&gt;
The rest have no GET value:&lt;br /&gt;
* Cyber Death Dragon (Fusion Borg)&lt;br /&gt;
* Machine Dragon&lt;br /&gt;
* Cyber Machine Seiryu (Fusion Borg)&lt;br /&gt;
* Cyber Machine Suzaku (Fusion Borg)&lt;br /&gt;
* Cyber Machine Byakko (Fusion Borg)&lt;br /&gt;
* Cyber Machine Genbu (Fusion Borg)&lt;br /&gt;
* G Red (One of the borg we have)&lt;br /&gt;
* Neo G Red (One of the borgs we have)&lt;br /&gt;
* G Black (It is obtained in a special event)&lt;br /&gt;
&lt;br /&gt;
By changing the GET value to a positive value, you can get the borgs in the scenario: Galactic Emperor for example.&lt;br /&gt;
&lt;br /&gt;
The list of GET values for the EU version is available at [https://github.com/Virtual-World-RE/NeoGF/blob/main/data/eu_borgs_GET_values.csv github].&lt;br /&gt;
&lt;br /&gt;
==== Files and operation ====&lt;br /&gt;
Borgs are implemented with a set of files, each with a specific function. These files are duplicated in the pzz of the borg and in the afs_data. The different _mdl define the different colours of the Borg. It seems that they are used with additional values in other files (the displays are not always correct when exchanging positions in the iso). The main _mdl is loaded from the pzz (collection or story menu). &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;One theory would be that part of the duplicate files would be used to load enemies and the other part allies.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For each borg we have:&amp;lt;br&amp;gt;&lt;br /&gt;
 plxxxx.pzz&lt;br /&gt;
 ├─ 000 file [[Borg - data file|plxxxxdata.bin]]  -&amp;gt; always present&lt;br /&gt;
 ├─ 001?                     -&amp;gt; often not present&lt;br /&gt;
 ├─ 002 file plxxxxhit.bin   -&amp;gt; always present&lt;br /&gt;
 ├─ 003 file [[Motions|plxxxxmot.bin]]   -&amp;gt; often not present&lt;br /&gt;
 ├─ 004 file [[Models|plxxxx_mdl.arc]]  -&amp;gt; always present&lt;br /&gt;
 ├─ 005 file [[Models|plxxxxb_mdl.arc]] -&amp;gt; always present -&amp;gt; blue model&lt;br /&gt;
 ├─ 006 file [[Models|plxxxxg_mdl.arc]] -&amp;gt; always present&lt;br /&gt;
 ├─ 007 file [[Models|plxxxxs_mdl.arc]] -&amp;gt; always present -&amp;gt; silver model&lt;br /&gt;
 ├─ 008 file [[Models|plxxxxc_mdl.arc]] -&amp;gt; always present&lt;br /&gt;
 ├─ 009 file [[Models|plxxxxk_mdl.arc]] -&amp;gt; always present -&amp;gt; black model&lt;br /&gt;
 ├─ 010 [[TPL (File format)|TPL]] -&amp;gt; name of the borg in Japanese&lt;br /&gt;
 ├─ 011 [[TPL (File format)|TPL]] -&amp;gt; name of the borg in Japanese (small format)&lt;br /&gt;
 ├─ 012 [[TPL (File format)|TPL]] -&amp;gt; borg name in the language of the game&lt;br /&gt;
 └─ 013 file mnxxxx.tpl -&amp;gt; [[TPL (File format)|TPL]] -&amp;gt; name of the borg in the game language (small format)&lt;br /&gt;
 [[Borg - data file|plxxxxdata.bin]] -&amp;gt; file can be named data2 or data3 (only one of the three is present), sometimes missing from the afs_data&lt;br /&gt;
 plxxxxhit.bin -&amp;gt; always present in the afs_data and pzz&lt;br /&gt;
 [[Motions|plxxxxmot.bin]]   -&amp;gt; often absent from the afs_data&lt;br /&gt;
 [[Models|plxxxx_mdl.arc]]  -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxb_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxg_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxs_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxc_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxk_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 mnxxxx.tpl&lt;br /&gt;
&lt;br /&gt;
Position 002: for borg pl0507 and pl0513, file 2 and hit differ (USA/NTSC version)&lt;br /&gt;
&lt;br /&gt;
Position 003: for the borg pl0009, file 3 and the word differ (USA/NTSC version) (MOT - &#039;&#039;Mot&#039;&#039;&#039;ion) - It can be observed that for these files, there are references that could make one think of &#039;&#039;plxxxx_xx_animjoint&#039;&#039;.  The investigation conducted by the [https://smashboards.com/threads/melee-dat-format.292603/ Smash Bros Brawl] community shows a similar file structure. This is another version of HSD (the basic structures are the same).&lt;br /&gt;
&lt;br /&gt;
Position 004 to 009: contain &#039;&#039;&#039;scene_data&#039;&#039;&#039; at the end of the data section, and are &#039;&#039;&#039;&#039;&amp;quot;Scene&amp;quot;&#039;&#039; files (HSDLib) which contain lights, cameras, vertices, bones in the manner of a .blend.&lt;br /&gt;
&lt;br /&gt;
Position 004 to 008: files with values corresponding to 3D. In particular, we can cite &#039;&#039;&#039;pl0300.pzz&#039;&#039;&#039; where they have a header &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;with flags&amp;lt;/span&amp;gt; as well as an adjustable padding if need be to have more elements &#039;&#039;&#039;For example for &#039;&#039;&#039;pl0629.pzz&#039;&#039;&#039; the amount &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;of flags&amp;lt;/span&amp;gt; in the headers is more consistent.&#039;&#039; The origin &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;of the flags&amp;lt;/span&amp;gt; and values in the header is currently unknown but these header fields &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;might constitute a list of available meshes in the file.&amp;lt;/span&amp;gt; The software used to read the files in position 004 to 009 in plxxxx.pzz are 3D Model Researcher and HSDRawLibrary.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Unimplemented borgs&#039;&#039;&#039;: pl0803 - pl080b - pl0f07&amp;lt;br&amp;gt;&lt;br /&gt;
Only the pl0803hit.bin and pl080bhit.bin files remain, and none of their associated files (notably, no associated pzz), which indicates that they are remnants of unimplemented borgs... Also the pzz pl0f07 has no hit file, no 4 internal TPLs (but 4 empty files instead) and just its pl0f07_mdl.arc file, which indicates that this borg is not implemented either (USA/NTSC version).&lt;br /&gt;
&lt;br /&gt;
The 2 dpxxxx.pzz files are similar files to plxxxx.pzz but without the final TPL files. Their usefulness is still to be determined.&lt;br /&gt;
&lt;br /&gt;
Files dpxxxx.pzz (2)&lt;br /&gt;
 ├─ 000 -&amp;gt; [[Borg - data file|plxxxxdata.bin]] from afs_data&lt;br /&gt;
 ├─ 001 -&amp;gt; empty file&lt;br /&gt;
 ├─ 002 -&amp;gt; plxxxxhit.bin from the afs_data&lt;br /&gt;
 ├─ 003 -&amp;gt; [[Motions|plxxxxmot.bin]] from the afs_data&lt;br /&gt;
 ├─ 004 -&amp;gt; [[Models|plxxxx_mdl.arc]] of the afs_data&lt;br /&gt;
 ├─ 005 -&amp;gt; [[Models|plxxxxb_mdl.arc]] of the afs_data&lt;br /&gt;
 ├─ 006 -&amp;gt; [[Models|plxxxxg_mdl.arc]] of the afs_data&lt;br /&gt;
 ├─ 007 -&amp;gt; [[Models|plxxxxs_mdl.arc]] of the afs_data&lt;br /&gt;
 ├─ 008 -&amp;gt; [[Models|plxxxxc_mdl.arc]] of the afs_data&lt;br /&gt;
 └─ 009 -&amp;gt; [[Models|plxxxxk_mdl.arc]] of the afs_data&lt;br /&gt;
&lt;br /&gt;
==== Memory backups ====&lt;br /&gt;
&lt;br /&gt;
=== Data Crystals ===&lt;br /&gt;
The itxxxx_mdl.arz, once unpacked with pzztool.py are the templates for the data crystals.&lt;br /&gt;
&lt;br /&gt;
==== Graphical interface elements ====&lt;br /&gt;
&lt;br /&gt;
unitall_mdl.arc contains all the borg thumbnails used in the force creation/modification menu as well as in the post-combat scene showing which team/borgs VS team/borgs, and in the data crystals.&lt;br /&gt;
&lt;br /&gt;
==== Files and operation ====&lt;br /&gt;
==== Memory saves ====&lt;br /&gt;
&lt;br /&gt;
[[Category:Implementations]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=Implementations&amp;diff=1516</id>
		<title>Implementations</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=Implementations&amp;diff=1516"/>
		<updated>2023-10-07T13:11:08Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: /* Files and operation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: center;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;This section is a work in progress.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15); text-align: center;&amp;quot;&amp;gt;Research is still needed and some paragraphs may be wrong.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Implementation of the game elements ==&lt;br /&gt;
&lt;br /&gt;
=== Borg ===&lt;br /&gt;
==== GUI elements ====&lt;br /&gt;
==== Borgs GET system ====&lt;br /&gt;
CrystalPixel who found the values.&lt;br /&gt;
&lt;br /&gt;
During a fight in Story Mode, when fighting an enemy borg for a given colour you have two values:&lt;br /&gt;
* The GET value&lt;br /&gt;
* The GET counter&lt;br /&gt;
&lt;br /&gt;
When you eliminate the enemy borg of a given colour, you have its GET counter which increments by a random value between 1 and 16. When the GET counter is greater than or equal to the GET value, we get the borg / Data Crystal at the end of the battle. Then the GET counter of this borg / colour combination is reset to 0. If one leaves or loses the battle, all GET counters are reset to the value they had before the battle started.&lt;br /&gt;
&lt;br /&gt;
For a large number of borgs it is then impossible to get them without having fought a certain amount. For example, Gold Death Borg Alpha has a GET value of 40. In two battles, for example, you can only get 36 in the best case.&lt;br /&gt;
&lt;br /&gt;
1 borg has a GET value of -1:&lt;br /&gt;
* Galactic Emperor&lt;br /&gt;
&lt;br /&gt;
The rest have no GET value:&lt;br /&gt;
* Cyber Death Dragon (Fusion Borg)&lt;br /&gt;
* Machine Dragon&lt;br /&gt;
* Cyber Machine Seiryu (Fusion Borg)&lt;br /&gt;
* Cyber Machine Suzaku (Fusion Borg)&lt;br /&gt;
* Cyber Machine Byakko (Fusion Borg)&lt;br /&gt;
* Cyber Machine Genbu (Fusion Borg)&lt;br /&gt;
* G Red (One of the borg we have)&lt;br /&gt;
* Neo G Red (One of the borgs we have)&lt;br /&gt;
* G Black (It is obtained in a special event)&lt;br /&gt;
&lt;br /&gt;
By changing the GET value to a positive value, you can get the borgs in the scenario: Galactic Emperor for example.&lt;br /&gt;
&lt;br /&gt;
The list of GET values for the EU version is available at [https://github.com/Virtual-World-RE/NeoGF/blob/main/data/eu_borgs_GET_values.csv github].&lt;br /&gt;
&lt;br /&gt;
==== Files and operation ====&lt;br /&gt;
Borgs are implemented with a set of files, each with a specific function. These files are duplicated in the pzz of the borg and in the afs_data. The different _mdl define the different colours of the Borg. It seems that they are used with additional values in other files (the displays are not always correct when exchanging positions in the iso). The main _mdl is loaded from the pzz (collection or story menu). &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;One theory would be that part of the duplicate files would be used to load enemies and the other part allies.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For each borg we have:&amp;lt;br&amp;gt;&lt;br /&gt;
 plxxxx.pzz&lt;br /&gt;
 ├─ 000 file [[Borg - data file|plxxxxdata.bin]]  -&amp;gt; always present&lt;br /&gt;
 ├─ 001?                      -&amp;gt; often not present&lt;br /&gt;
 ├─ 002 file plxxxxhit.bin   -&amp;gt; always present&lt;br /&gt;
 ├─ 003 file [[Motions|plxxxxmot.bin]]   -&amp;gt; often not present&lt;br /&gt;
 ├─ 004 file [[Models|plxxxx_mdl.arc]]  -&amp;gt; always present&lt;br /&gt;
 ├─ 005 file [[Models|plxxxxb_mdl.arc]] -&amp;gt; always present -&amp;gt; blue model&lt;br /&gt;
 ├─ 006 file [[Models|plxxxxg_mdl.arc]] -&amp;gt; always present&lt;br /&gt;
 ├─ 007 file [[Models|plxxxxs_mdl.arc]] -&amp;gt; always present -&amp;gt; silver model&lt;br /&gt;
 ├─ 008 file [[Models|plxxxxc_mdl.arc]] -&amp;gt; always present&lt;br /&gt;
 ├─ 009 file [[Models|plxxxxk_mdl.arc]] -&amp;gt; always present -&amp;gt; black model&lt;br /&gt;
 ├─ 010 [[TPL (File format)|TPL]] -&amp;gt; name of the borg in Japanese&lt;br /&gt;
 ├─ 011 [[TPL (File format)|TPL]] -&amp;gt; name of the borg in Japanese (small format)&lt;br /&gt;
 ├─ 012 [[TPL (File format)|TPL]] -&amp;gt; borg name in the language of the game&lt;br /&gt;
 └─ 013 file mnxxxx.tpl -&amp;gt; [[TPL (File format)|TPL]] -&amp;gt; name of the borg in the game language (small format)&lt;br /&gt;
 [[Borg - data file|plxxxxdata.bin]] -&amp;gt; file can be named data2 or data3 (only one of the three is present), sometimes missing from the afs_data&lt;br /&gt;
 plxxxxhit.bin -&amp;gt; always present in the afs_data and pzz&lt;br /&gt;
 [[Motions|plxxxxmot.bin]]   -&amp;gt; often absent from the afs_data&lt;br /&gt;
 [[Models|plxxxx_mdl.arc]]  -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxb_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxg_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxs_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxc_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxk_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 mnxxxx.tpl&lt;br /&gt;
&lt;br /&gt;
Position 002: for borg pl0507 and pl0513, file 2 and hit differ (USA/NTSC version)&lt;br /&gt;
&lt;br /&gt;
Position 003: for the borg pl0009, file 3 and the word differ (USA/NTSC version) (MOT - &#039;&#039;Mot&#039;&#039;&#039;ion) - It can be observed that for these files, there are references that could make one think of &#039;&#039;plxxxx_xx_animjoint&#039;&#039;.  The investigation conducted by the [https://smashboards.com/threads/melee-dat-format.292603/ Smash Bros Brawl] community shows a similar file structure. This is another version of HSD (the basic structures are the same).&lt;br /&gt;
&lt;br /&gt;
Position 004 to 009: contain &#039;&#039;&#039;scene_data&#039;&#039;&#039; at the end of the data section, and are &#039;&#039;&#039;&#039;&amp;quot;Scene&amp;quot;&#039;&#039; files (HSDLib) which contain lights, cameras, vertices, bones in the manner of a .blend.&lt;br /&gt;
&lt;br /&gt;
Position 004 to 008: files with values corresponding to 3D. In particular, we can cite &#039;&#039;&#039;pl0300.pzz&#039;&#039;&#039; where they have a header &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;with flags&amp;lt;/span&amp;gt; as well as an adjustable padding if need be to have more elements &#039;&#039;&#039;For example for &#039;&#039;&#039;pl0629.pzz&#039;&#039;&#039; the amount &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;of flags&amp;lt;/span&amp;gt; in the headers is more consistent.&#039;&#039; The origin &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;of the flags&amp;lt;/span&amp;gt; and values in the header is currently unknown but these header fields &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;might constitute a list of available meshes in the file.&amp;lt;/span&amp;gt; The software used to read the files in position 004 to 009 in plxxxx.pzz are 3D Model Researcher and HSDRawLibrary.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Unimplemented borgs&#039;&#039;&#039;: pl0803 - pl080b - pl0f07&amp;lt;br&amp;gt;&lt;br /&gt;
Only the pl0803hit.bin and pl080bhit.bin files remain, and none of their associated files (notably, no associated pzz), which indicates that they are remnants of unimplemented borgs... Also the pzz pl0f07 has no hit file, no 4 internal TPLs (but 4 empty files instead) and just its pl0f07_mdl.arc file, which indicates that this borg is not implemented either (USA/NTSC version).&lt;br /&gt;
&lt;br /&gt;
The 2 dpxxxx.pzz files are similar files to plxxxx.pzz but without the final TPL files. Their usefulness is still to be determined.&lt;br /&gt;
&lt;br /&gt;
Files dpxxxx.pzz (2)&lt;br /&gt;
 ├─ 000 -&amp;gt; [[Borg - data file|plxxxxdata.bin]] from afs_data&lt;br /&gt;
 ├─ 001 -&amp;gt; empty file&lt;br /&gt;
 ├─ 002 -&amp;gt; plxxxxhit.bin from the afs_data&lt;br /&gt;
 ├─ 003 -&amp;gt; [[Motions|plxxxxmot.bin]] from the afs_data&lt;br /&gt;
 ├─ 004 -&amp;gt; [[Models|plxxxx_mdl.arc]] of the afs_data&lt;br /&gt;
 ├─ 005 -&amp;gt; [[Models|plxxxxb_mdl.arc]] of the afs_data&lt;br /&gt;
 ├─ 006 -&amp;gt; [[Models|plxxxxg_mdl.arc]] of the afs_data&lt;br /&gt;
 ├─ 007 -&amp;gt; [[Models|plxxxxs_mdl.arc]] of the afs_data&lt;br /&gt;
 ├─ 008 -&amp;gt; [[Models|plxxxxc_mdl.arc]] of the afs_data&lt;br /&gt;
 └─ 009 -&amp;gt; [[Models|plxxxxk_mdl.arc]] of the afs_data&lt;br /&gt;
&lt;br /&gt;
==== Memory backups ====&lt;br /&gt;
&lt;br /&gt;
=== Data Crystals ===&lt;br /&gt;
The itxxxx_mdl.arz, once unpacked with pzztool.py are the templates for the data crystals.&lt;br /&gt;
&lt;br /&gt;
==== Graphical interface elements ====&lt;br /&gt;
&lt;br /&gt;
unitall_mdl.arc contains all the borg thumbnails used in the force creation/modification menu as well as in the post-combat scene showing which team/borgs VS team/borgs, and in the data crystals.&lt;br /&gt;
&lt;br /&gt;
==== Files and operation ====&lt;br /&gt;
==== Memory saves ====&lt;br /&gt;
&lt;br /&gt;
[[Category:Implementations]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=Implementations&amp;diff=1515</id>
		<title>Implementations</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=Implementations&amp;diff=1515"/>
		<updated>2023-10-07T13:10:48Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: /* Files and operation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: center;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;This section is a work in progress.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15); text-align: center;&amp;quot;&amp;gt;Research is still needed and some paragraphs may be wrong.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Implementation of the game elements ==&lt;br /&gt;
&lt;br /&gt;
=== Borg ===&lt;br /&gt;
==== GUI elements ====&lt;br /&gt;
==== Borgs GET system ====&lt;br /&gt;
CrystalPixel who found the values.&lt;br /&gt;
&lt;br /&gt;
During a fight in Story Mode, when fighting an enemy borg for a given colour you have two values:&lt;br /&gt;
* The GET value&lt;br /&gt;
* The GET counter&lt;br /&gt;
&lt;br /&gt;
When you eliminate the enemy borg of a given colour, you have its GET counter which increments by a random value between 1 and 16. When the GET counter is greater than or equal to the GET value, we get the borg / Data Crystal at the end of the battle. Then the GET counter of this borg / colour combination is reset to 0. If one leaves or loses the battle, all GET counters are reset to the value they had before the battle started.&lt;br /&gt;
&lt;br /&gt;
For a large number of borgs it is then impossible to get them without having fought a certain amount. For example, Gold Death Borg Alpha has a GET value of 40. In two battles, for example, you can only get 36 in the best case.&lt;br /&gt;
&lt;br /&gt;
1 borg has a GET value of -1:&lt;br /&gt;
* Galactic Emperor&lt;br /&gt;
&lt;br /&gt;
The rest have no GET value:&lt;br /&gt;
* Cyber Death Dragon (Fusion Borg)&lt;br /&gt;
* Machine Dragon&lt;br /&gt;
* Cyber Machine Seiryu (Fusion Borg)&lt;br /&gt;
* Cyber Machine Suzaku (Fusion Borg)&lt;br /&gt;
* Cyber Machine Byakko (Fusion Borg)&lt;br /&gt;
* Cyber Machine Genbu (Fusion Borg)&lt;br /&gt;
* G Red (One of the borg we have)&lt;br /&gt;
* Neo G Red (One of the borgs we have)&lt;br /&gt;
* G Black (It is obtained in a special event)&lt;br /&gt;
&lt;br /&gt;
By changing the GET value to a positive value, you can get the borgs in the scenario: Galactic Emperor for example.&lt;br /&gt;
&lt;br /&gt;
The list of GET values for the EU version is available at [https://github.com/Virtual-World-RE/NeoGF/blob/main/data/eu_borgs_GET_values.csv github].&lt;br /&gt;
&lt;br /&gt;
==== Files and operation ====&lt;br /&gt;
Borgs are implemented with a set of files, each with a specific function. These files are duplicated in the pzz of the borg and in the afs_data. The different _mdl define the different colours of the Borg. It seems that they are used with additional values in other files (the displays are not always correct when exchanging positions in the iso). The main _mdl is loaded from the pzz (collection or story menu). &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;One theory would be that part of the duplicate files would be used to load enemies and the other part allies.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For each borg we have:&amp;lt;br&amp;gt;&lt;br /&gt;
 plxxxx.pzz&lt;br /&gt;
 ├─ 000 file [[Borg - data file|plxxxxdata.bin]]  -&amp;gt; always present&lt;br /&gt;
 ├─ 001?                       -&amp;gt; often not present&lt;br /&gt;
 ├─ 002 file plxxxxhit.bin  -&amp;gt; always present&lt;br /&gt;
 ├─ 003 file [[Motions|plxxxxmot.bin]]    -&amp;gt; often not present&lt;br /&gt;
 ├─ 004 file [[Models|plxxxx_mdl.arc]]  -&amp;gt; always present&lt;br /&gt;
 ├─ 005 file [[Models|plxxxxb_mdl.arc]] -&amp;gt; always present -&amp;gt; blue model&lt;br /&gt;
 ├─ 006 file [[Models|plxxxxg_mdl.arc]] -&amp;gt; always present&lt;br /&gt;
 ├─ 007 file [[Models|plxxxxs_mdl.arc]] -&amp;gt; always present -&amp;gt; silver model&lt;br /&gt;
 ├─ 008 file [[Models|plxxxxc_mdl.arc]] -&amp;gt; always present&lt;br /&gt;
 ├─ 009 file [[Models|plxxxxk_mdl.arc]] -&amp;gt; always present -&amp;gt; black model&lt;br /&gt;
 ├─ 010 [[TPL (File format)|TPL]] -&amp;gt; name of the borg in Japanese&lt;br /&gt;
 ├─ 011 [[TPL (File format)|TPL]] -&amp;gt; name of the borg in Japanese (small format)&lt;br /&gt;
 ├─ 012 [[TPL (File format)|TPL]] -&amp;gt; borg name in the language of the game&lt;br /&gt;
 └─ 013 file mnxxxx.tpl -&amp;gt; [[TPL (File format)|TPL]] -&amp;gt; name of the borg in the game language (small format)&lt;br /&gt;
 [[Borg - data file|plxxxxdata.bin]] -&amp;gt; file can be named data2 or data3 (only one of the three is present), sometimes missing from the afs_data&lt;br /&gt;
 plxxxxhit.bin -&amp;gt; always present in the afs_data and pzz&lt;br /&gt;
 [[Motions|plxxxxmot.bin]]   -&amp;gt; often absent from the afs_data&lt;br /&gt;
 [[Models|plxxxx_mdl.arc]]  -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxb_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxg_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxs_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxc_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxk_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 mnxxxx.tpl&lt;br /&gt;
&lt;br /&gt;
Position 002: for borg pl0507 and pl0513, file 2 and hit differ (USA/NTSC version)&lt;br /&gt;
&lt;br /&gt;
Position 003: for the borg pl0009, file 3 and the word differ (USA/NTSC version) (MOT - &#039;&#039;Mot&#039;&#039;&#039;ion) - It can be observed that for these files, there are references that could make one think of &#039;&#039;plxxxx_xx_animjoint&#039;&#039;.  The investigation conducted by the [https://smashboards.com/threads/melee-dat-format.292603/ Smash Bros Brawl] community shows a similar file structure. This is another version of HSD (the basic structures are the same).&lt;br /&gt;
&lt;br /&gt;
Position 004 to 009: contain &#039;&#039;&#039;scene_data&#039;&#039;&#039; at the end of the data section, and are &#039;&#039;&#039;&#039;&amp;quot;Scene&amp;quot;&#039;&#039; files (HSDLib) which contain lights, cameras, vertices, bones in the manner of a .blend.&lt;br /&gt;
&lt;br /&gt;
Position 004 to 008: files with values corresponding to 3D. In particular, we can cite &#039;&#039;&#039;pl0300.pzz&#039;&#039;&#039; where they have a header &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;with flags&amp;lt;/span&amp;gt; as well as an adjustable padding if need be to have more elements &#039;&#039;&#039;For example for &#039;&#039;&#039;pl0629.pzz&#039;&#039;&#039; the amount &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;of flags&amp;lt;/span&amp;gt; in the headers is more consistent.&#039;&#039; The origin &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;of the flags&amp;lt;/span&amp;gt; and values in the header is currently unknown but these header fields &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;might constitute a list of available meshes in the file.&amp;lt;/span&amp;gt; The software used to read the files in position 004 to 009 in plxxxx.pzz are 3D Model Researcher and HSDRawLibrary.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Unimplemented borgs&#039;&#039;&#039;: pl0803 - pl080b - pl0f07&amp;lt;br&amp;gt;&lt;br /&gt;
Only the pl0803hit.bin and pl080bhit.bin files remain, and none of their associated files (notably, no associated pzz), which indicates that they are remnants of unimplemented borgs... Also the pzz pl0f07 has no hit file, no 4 internal TPLs (but 4 empty files instead) and just its pl0f07_mdl.arc file, which indicates that this borg is not implemented either (USA/NTSC version).&lt;br /&gt;
&lt;br /&gt;
The 2 dpxxxx.pzz files are similar files to plxxxx.pzz but without the final TPL files. Their usefulness is still to be determined.&lt;br /&gt;
&lt;br /&gt;
Files dpxxxx.pzz (2)&lt;br /&gt;
 ├─ 000 -&amp;gt; [[Borg - data file|plxxxxdata.bin]] from afs_data&lt;br /&gt;
 ├─ 001 -&amp;gt; empty file&lt;br /&gt;
 ├─ 002 -&amp;gt; plxxxxhit.bin from the afs_data&lt;br /&gt;
 ├─ 003 -&amp;gt; [[Motions|plxxxxmot.bin]] from the afs_data&lt;br /&gt;
 ├─ 004 -&amp;gt; [[Models|plxxxx_mdl.arc]] of the afs_data&lt;br /&gt;
 ├─ 005 -&amp;gt; [[Models|plxxxxb_mdl.arc]] of the afs_data&lt;br /&gt;
 ├─ 006 -&amp;gt; [[Models|plxxxxg_mdl.arc]] of the afs_data&lt;br /&gt;
 ├─ 007 -&amp;gt; [[Models|plxxxxs_mdl.arc]] of the afs_data&lt;br /&gt;
 ├─ 008 -&amp;gt; [[Models|plxxxxc_mdl.arc]] of the afs_data&lt;br /&gt;
 └─ 009 -&amp;gt; [[Models|plxxxxk_mdl.arc]] of the afs_data&lt;br /&gt;
&lt;br /&gt;
==== Memory backups ====&lt;br /&gt;
&lt;br /&gt;
=== Data Crystals ===&lt;br /&gt;
The itxxxx_mdl.arz, once unpacked with pzztool.py are the templates for the data crystals.&lt;br /&gt;
&lt;br /&gt;
==== Graphical interface elements ====&lt;br /&gt;
&lt;br /&gt;
unitall_mdl.arc contains all the borg thumbnails used in the force creation/modification menu as well as in the post-combat scene showing which team/borgs VS team/borgs, and in the data crystals.&lt;br /&gt;
&lt;br /&gt;
==== Files and operation ====&lt;br /&gt;
==== Memory saves ====&lt;br /&gt;
&lt;br /&gt;
[[Category:Implementations]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=Implementations&amp;diff=1514</id>
		<title>Implementations</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=Implementations&amp;diff=1514"/>
		<updated>2023-10-07T13:10:30Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: /* Files and operation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: center;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;This section is a work in progress.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15); text-align: center;&amp;quot;&amp;gt;Research is still needed and some paragraphs may be wrong.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Implementation of the game elements ==&lt;br /&gt;
&lt;br /&gt;
=== Borg ===&lt;br /&gt;
==== GUI elements ====&lt;br /&gt;
==== Borgs GET system ====&lt;br /&gt;
CrystalPixel who found the values.&lt;br /&gt;
&lt;br /&gt;
During a fight in Story Mode, when fighting an enemy borg for a given colour you have two values:&lt;br /&gt;
* The GET value&lt;br /&gt;
* The GET counter&lt;br /&gt;
&lt;br /&gt;
When you eliminate the enemy borg of a given colour, you have its GET counter which increments by a random value between 1 and 16. When the GET counter is greater than or equal to the GET value, we get the borg / Data Crystal at the end of the battle. Then the GET counter of this borg / colour combination is reset to 0. If one leaves or loses the battle, all GET counters are reset to the value they had before the battle started.&lt;br /&gt;
&lt;br /&gt;
For a large number of borgs it is then impossible to get them without having fought a certain amount. For example, Gold Death Borg Alpha has a GET value of 40. In two battles, for example, you can only get 36 in the best case.&lt;br /&gt;
&lt;br /&gt;
1 borg has a GET value of -1:&lt;br /&gt;
* Galactic Emperor&lt;br /&gt;
&lt;br /&gt;
The rest have no GET value:&lt;br /&gt;
* Cyber Death Dragon (Fusion Borg)&lt;br /&gt;
* Machine Dragon&lt;br /&gt;
* Cyber Machine Seiryu (Fusion Borg)&lt;br /&gt;
* Cyber Machine Suzaku (Fusion Borg)&lt;br /&gt;
* Cyber Machine Byakko (Fusion Borg)&lt;br /&gt;
* Cyber Machine Genbu (Fusion Borg)&lt;br /&gt;
* G Red (One of the borg we have)&lt;br /&gt;
* Neo G Red (One of the borgs we have)&lt;br /&gt;
* G Black (It is obtained in a special event)&lt;br /&gt;
&lt;br /&gt;
By changing the GET value to a positive value, you can get the borgs in the scenario: Galactic Emperor for example.&lt;br /&gt;
&lt;br /&gt;
The list of GET values for the EU version is available at [https://github.com/Virtual-World-RE/NeoGF/blob/main/data/eu_borgs_GET_values.csv github].&lt;br /&gt;
&lt;br /&gt;
==== Files and operation ====&lt;br /&gt;
Borgs are implemented with a set of files, each with a specific function. These files are duplicated in the pzz of the borg and in the afs_data. The different _mdl define the different colours of the Borg. It seems that they are used with additional values in other files (the displays are not always correct when exchanging positions in the iso). The main _mdl is loaded from the pzz (collection or story menu). &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;One theory would be that part of the duplicate files would be used to load enemies and the other part allies.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For each borg we have:&amp;lt;br&amp;gt;&lt;br /&gt;
 plxxxx.pzz&lt;br /&gt;
 ├─ 000 file [[Borg - data file|plxxxxdata.bin]]  -&amp;gt; always present&lt;br /&gt;
 ├─ 001?                       -&amp;gt; often not present&lt;br /&gt;
 ├─ 002 file plxxxxhit.bin -&amp;gt; always present&lt;br /&gt;
 ├─ 003 file [[Motions|plxxxxmot.bin]]    -&amp;gt; often not present&lt;br /&gt;
 ├─ 004 file [[Models|plxxxx_mdl.arc]]   -&amp;gt; always present&lt;br /&gt;
 ├─ 005 file [[Models|plxxxxb_mdl.arc]] -&amp;gt; always present -&amp;gt; blue model&lt;br /&gt;
 ├─ 006 file [[Models|plxxxxg_mdl.arc]] -&amp;gt; always present&lt;br /&gt;
 ├─ 007 file [[Models|plxxxxs_mdl.arc]] -&amp;gt; always present -&amp;gt; silver model&lt;br /&gt;
 ├─ 008 file [[Models|plxxxxc_mdl.arc]] -&amp;gt; always present&lt;br /&gt;
 ├─ 009 file [[Models|plxxxxk_mdl.arc]] -&amp;gt; always present -&amp;gt; black model&lt;br /&gt;
 ├─ 010 [[TPL (File format)|TPL]] -&amp;gt; name of the borg in Japanese&lt;br /&gt;
 ├─ 011 [[TPL (File format)|TPL]] -&amp;gt; name of the borg in Japanese (small format)&lt;br /&gt;
 ├─ 012 [[TPL (File format)|TPL]] -&amp;gt; borg name in the language of the game&lt;br /&gt;
 └─ 013 file mnxxxx.tpl -&amp;gt; [[TPL (File format)|TPL]] -&amp;gt; name of the borg in the game language (small format)&lt;br /&gt;
 [[Borg - data file|plxxxxdata.bin]] -&amp;gt; file can be named data2 or data3 (only one of the three is present), sometimes missing from the afs_data&lt;br /&gt;
 plxxxxhit.bin -&amp;gt; always present in the afs_data and pzz&lt;br /&gt;
 [[Motions|plxxxxmot.bin]]   -&amp;gt; often absent from the afs_data&lt;br /&gt;
 [[Models|plxxxx_mdl.arc]]  -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxb_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxg_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxs_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxc_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxk_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 mnxxxx.tpl&lt;br /&gt;
&lt;br /&gt;
Position 002: for borg pl0507 and pl0513, file 2 and hit differ (USA/NTSC version)&lt;br /&gt;
&lt;br /&gt;
Position 003: for the borg pl0009, file 3 and the word differ (USA/NTSC version) (MOT - &#039;&#039;Mot&#039;&#039;&#039;ion) - It can be observed that for these files, there are references that could make one think of &#039;&#039;plxxxx_xx_animjoint&#039;&#039;.  The investigation conducted by the [https://smashboards.com/threads/melee-dat-format.292603/ Smash Bros Brawl] community shows a similar file structure. This is another version of HSD (the basic structures are the same).&lt;br /&gt;
&lt;br /&gt;
Position 004 to 009: contain &#039;&#039;&#039;scene_data&#039;&#039;&#039; at the end of the data section, and are &#039;&#039;&#039;&#039;&amp;quot;Scene&amp;quot;&#039;&#039; files (HSDLib) which contain lights, cameras, vertices, bones in the manner of a .blend.&lt;br /&gt;
&lt;br /&gt;
Position 004 to 008: files with values corresponding to 3D. In particular, we can cite &#039;&#039;&#039;pl0300.pzz&#039;&#039;&#039; where they have a header &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;with flags&amp;lt;/span&amp;gt; as well as an adjustable padding if need be to have more elements &#039;&#039;&#039;For example for &#039;&#039;&#039;pl0629.pzz&#039;&#039;&#039; the amount &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;of flags&amp;lt;/span&amp;gt; in the headers is more consistent.&#039;&#039; The origin &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;of the flags&amp;lt;/span&amp;gt; and values in the header is currently unknown but these header fields &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;might constitute a list of available meshes in the file.&amp;lt;/span&amp;gt; The software used to read the files in position 004 to 009 in plxxxx.pzz are 3D Model Researcher and HSDRawLibrary.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Unimplemented borgs&#039;&#039;&#039;: pl0803 - pl080b - pl0f07&amp;lt;br&amp;gt;&lt;br /&gt;
Only the pl0803hit.bin and pl080bhit.bin files remain, and none of their associated files (notably, no associated pzz), which indicates that they are remnants of unimplemented borgs... Also the pzz pl0f07 has no hit file, no 4 internal TPLs (but 4 empty files instead) and just its pl0f07_mdl.arc file, which indicates that this borg is not implemented either (USA/NTSC version).&lt;br /&gt;
&lt;br /&gt;
The 2 dpxxxx.pzz files are similar files to plxxxx.pzz but without the final TPL files. Their usefulness is still to be determined.&lt;br /&gt;
&lt;br /&gt;
Files dpxxxx.pzz (2)&lt;br /&gt;
 ├─ 000 -&amp;gt; [[Borg - data file|plxxxxdata.bin]] from afs_data&lt;br /&gt;
 ├─ 001 -&amp;gt; empty file&lt;br /&gt;
 ├─ 002 -&amp;gt; plxxxxhit.bin from the afs_data&lt;br /&gt;
 ├─ 003 -&amp;gt; [[Motions|plxxxxmot.bin]] from the afs_data&lt;br /&gt;
 ├─ 004 -&amp;gt; [[Models|plxxxx_mdl.arc]] of the afs_data&lt;br /&gt;
 ├─ 005 -&amp;gt; [[Models|plxxxxb_mdl.arc]] of the afs_data&lt;br /&gt;
 ├─ 006 -&amp;gt; [[Models|plxxxxg_mdl.arc]] of the afs_data&lt;br /&gt;
 ├─ 007 -&amp;gt; [[Models|plxxxxs_mdl.arc]] of the afs_data&lt;br /&gt;
 ├─ 008 -&amp;gt; [[Models|plxxxxc_mdl.arc]] of the afs_data&lt;br /&gt;
 └─ 009 -&amp;gt; [[Models|plxxxxk_mdl.arc]] of the afs_data&lt;br /&gt;
&lt;br /&gt;
==== Memory backups ====&lt;br /&gt;
&lt;br /&gt;
=== Data Crystals ===&lt;br /&gt;
The itxxxx_mdl.arz, once unpacked with pzztool.py are the templates for the data crystals.&lt;br /&gt;
&lt;br /&gt;
==== Graphical interface elements ====&lt;br /&gt;
&lt;br /&gt;
unitall_mdl.arc contains all the borg thumbnails used in the force creation/modification menu as well as in the post-combat scene showing which team/borgs VS team/borgs, and in the data crystals.&lt;br /&gt;
&lt;br /&gt;
==== Files and operation ====&lt;br /&gt;
==== Memory saves ====&lt;br /&gt;
&lt;br /&gt;
[[Category:Implementations]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=Implementations&amp;diff=1513</id>
		<title>Implementations</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=Implementations&amp;diff=1513"/>
		<updated>2023-10-07T13:10:19Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: /* Files and operation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: center;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;This section is a work in progress.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15); text-align: center;&amp;quot;&amp;gt;Research is still needed and some paragraphs may be wrong.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Implementation of the game elements ==&lt;br /&gt;
&lt;br /&gt;
=== Borg ===&lt;br /&gt;
==== GUI elements ====&lt;br /&gt;
==== Borgs GET system ====&lt;br /&gt;
CrystalPixel who found the values.&lt;br /&gt;
&lt;br /&gt;
During a fight in Story Mode, when fighting an enemy borg for a given colour you have two values:&lt;br /&gt;
* The GET value&lt;br /&gt;
* The GET counter&lt;br /&gt;
&lt;br /&gt;
When you eliminate the enemy borg of a given colour, you have its GET counter which increments by a random value between 1 and 16. When the GET counter is greater than or equal to the GET value, we get the borg / Data Crystal at the end of the battle. Then the GET counter of this borg / colour combination is reset to 0. If one leaves or loses the battle, all GET counters are reset to the value they had before the battle started.&lt;br /&gt;
&lt;br /&gt;
For a large number of borgs it is then impossible to get them without having fought a certain amount. For example, Gold Death Borg Alpha has a GET value of 40. In two battles, for example, you can only get 36 in the best case.&lt;br /&gt;
&lt;br /&gt;
1 borg has a GET value of -1:&lt;br /&gt;
* Galactic Emperor&lt;br /&gt;
&lt;br /&gt;
The rest have no GET value:&lt;br /&gt;
* Cyber Death Dragon (Fusion Borg)&lt;br /&gt;
* Machine Dragon&lt;br /&gt;
* Cyber Machine Seiryu (Fusion Borg)&lt;br /&gt;
* Cyber Machine Suzaku (Fusion Borg)&lt;br /&gt;
* Cyber Machine Byakko (Fusion Borg)&lt;br /&gt;
* Cyber Machine Genbu (Fusion Borg)&lt;br /&gt;
* G Red (One of the borg we have)&lt;br /&gt;
* Neo G Red (One of the borgs we have)&lt;br /&gt;
* G Black (It is obtained in a special event)&lt;br /&gt;
&lt;br /&gt;
By changing the GET value to a positive value, you can get the borgs in the scenario: Galactic Emperor for example.&lt;br /&gt;
&lt;br /&gt;
The list of GET values for the EU version is available at [https://github.com/Virtual-World-RE/NeoGF/blob/main/data/eu_borgs_GET_values.csv github].&lt;br /&gt;
&lt;br /&gt;
==== Files and operation ====&lt;br /&gt;
Borgs are implemented with a set of files, each with a specific function. These files are duplicated in the pzz of the borg and in the afs_data. The different _mdl define the different colours of the Borg. It seems that they are used with additional values in other files (the displays are not always correct when exchanging positions in the iso). The main _mdl is loaded from the pzz (collection or story menu). &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;One theory would be that part of the duplicate files would be used to load enemies and the other part allies.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For each borg we have:&amp;lt;br&amp;gt;&lt;br /&gt;
 plxxxx.pzz&lt;br /&gt;
 ├─ 000 file [[Borg - data file|plxxxxdata.bin]]  -&amp;gt; always present&lt;br /&gt;
 ├─ 001?                       -&amp;gt; often not present&lt;br /&gt;
 ├─ 002 file plxxxxhit.bin -&amp;gt; always present&lt;br /&gt;
 ├─ 003 file [[Motions|plxxxxmot.bin]]  -&amp;gt; often not present&lt;br /&gt;
 ├─ 004 file [[Models|plxxxx_mdl.arc]]  -&amp;gt; always present&lt;br /&gt;
 ├─ 005 file [[Models|plxxxxb_mdl.arc]] -&amp;gt; always present -&amp;gt; blue model&lt;br /&gt;
 ├─ 006 file [[Models|plxxxxg_mdl.arc]] -&amp;gt; always present&lt;br /&gt;
 ├─ 007 file [[Models|plxxxxs_mdl.arc]] -&amp;gt; always present -&amp;gt; silver model&lt;br /&gt;
 ├─ 008 file [[Models|plxxxxc_mdl.arc]] -&amp;gt; always present&lt;br /&gt;
 ├─ 009 file [[Models|plxxxxk_mdl.arc]] -&amp;gt; always present -&amp;gt; black model&lt;br /&gt;
 ├─ 010 [[TPL (File format)|TPL]] -&amp;gt; name of the borg in Japanese&lt;br /&gt;
 ├─ 011 [[TPL (File format)|TPL]] -&amp;gt; name of the borg in Japanese (small format)&lt;br /&gt;
 ├─ 012 [[TPL (File format)|TPL]] -&amp;gt; borg name in the language of the game&lt;br /&gt;
 └─ 013 file mnxxxx.tpl -&amp;gt; [[TPL (File format)|TPL]] -&amp;gt; name of the borg in the game language (small format)&lt;br /&gt;
 [[Borg - data file|plxxxxdata.bin]] -&amp;gt; file can be named data2 or data3 (only one of the three is present), sometimes missing from the afs_data&lt;br /&gt;
 plxxxxhit.bin -&amp;gt; always present in the afs_data and pzz&lt;br /&gt;
 [[Motions|plxxxxmot.bin]]   -&amp;gt; often absent from the afs_data&lt;br /&gt;
 [[Models|plxxxx_mdl.arc]]  -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxb_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxg_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxs_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxc_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxk_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 mnxxxx.tpl&lt;br /&gt;
&lt;br /&gt;
Position 002: for borg pl0507 and pl0513, file 2 and hit differ (USA/NTSC version)&lt;br /&gt;
&lt;br /&gt;
Position 003: for the borg pl0009, file 3 and the word differ (USA/NTSC version) (MOT - &#039;&#039;Mot&#039;&#039;&#039;ion) - It can be observed that for these files, there are references that could make one think of &#039;&#039;plxxxx_xx_animjoint&#039;&#039;.  The investigation conducted by the [https://smashboards.com/threads/melee-dat-format.292603/ Smash Bros Brawl] community shows a similar file structure. This is another version of HSD (the basic structures are the same).&lt;br /&gt;
&lt;br /&gt;
Position 004 to 009: contain &#039;&#039;&#039;scene_data&#039;&#039;&#039; at the end of the data section, and are &#039;&#039;&#039;&#039;&amp;quot;Scene&amp;quot;&#039;&#039; files (HSDLib) which contain lights, cameras, vertices, bones in the manner of a .blend.&lt;br /&gt;
&lt;br /&gt;
Position 004 to 008: files with values corresponding to 3D. In particular, we can cite &#039;&#039;&#039;pl0300.pzz&#039;&#039;&#039; where they have a header &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;with flags&amp;lt;/span&amp;gt; as well as an adjustable padding if need be to have more elements &#039;&#039;&#039;For example for &#039;&#039;&#039;pl0629.pzz&#039;&#039;&#039; the amount &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;of flags&amp;lt;/span&amp;gt; in the headers is more consistent.&#039;&#039; The origin &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;of the flags&amp;lt;/span&amp;gt; and values in the header is currently unknown but these header fields &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;might constitute a list of available meshes in the file.&amp;lt;/span&amp;gt; The software used to read the files in position 004 to 009 in plxxxx.pzz are 3D Model Researcher and HSDRawLibrary.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Unimplemented borgs&#039;&#039;&#039;: pl0803 - pl080b - pl0f07&amp;lt;br&amp;gt;&lt;br /&gt;
Only the pl0803hit.bin and pl080bhit.bin files remain, and none of their associated files (notably, no associated pzz), which indicates that they are remnants of unimplemented borgs... Also the pzz pl0f07 has no hit file, no 4 internal TPLs (but 4 empty files instead) and just its pl0f07_mdl.arc file, which indicates that this borg is not implemented either (USA/NTSC version).&lt;br /&gt;
&lt;br /&gt;
The 2 dpxxxx.pzz files are similar files to plxxxx.pzz but without the final TPL files. Their usefulness is still to be determined.&lt;br /&gt;
&lt;br /&gt;
Files dpxxxx.pzz (2)&lt;br /&gt;
 ├─ 000 -&amp;gt; [[Borg - data file|plxxxxdata.bin]] from afs_data&lt;br /&gt;
 ├─ 001 -&amp;gt; empty file&lt;br /&gt;
 ├─ 002 -&amp;gt; plxxxxhit.bin from the afs_data&lt;br /&gt;
 ├─ 003 -&amp;gt; [[Motions|plxxxxmot.bin]] from the afs_data&lt;br /&gt;
 ├─ 004 -&amp;gt; [[Models|plxxxx_mdl.arc]] of the afs_data&lt;br /&gt;
 ├─ 005 -&amp;gt; [[Models|plxxxxb_mdl.arc]] of the afs_data&lt;br /&gt;
 ├─ 006 -&amp;gt; [[Models|plxxxxg_mdl.arc]] of the afs_data&lt;br /&gt;
 ├─ 007 -&amp;gt; [[Models|plxxxxs_mdl.arc]] of the afs_data&lt;br /&gt;
 ├─ 008 -&amp;gt; [[Models|plxxxxc_mdl.arc]] of the afs_data&lt;br /&gt;
 └─ 009 -&amp;gt; [[Models|plxxxxk_mdl.arc]] of the afs_data&lt;br /&gt;
&lt;br /&gt;
==== Memory backups ====&lt;br /&gt;
&lt;br /&gt;
=== Data Crystals ===&lt;br /&gt;
The itxxxx_mdl.arz, once unpacked with pzztool.py are the templates for the data crystals.&lt;br /&gt;
&lt;br /&gt;
==== Graphical interface elements ====&lt;br /&gt;
&lt;br /&gt;
unitall_mdl.arc contains all the borg thumbnails used in the force creation/modification menu as well as in the post-combat scene showing which team/borgs VS team/borgs, and in the data crystals.&lt;br /&gt;
&lt;br /&gt;
==== Files and operation ====&lt;br /&gt;
==== Memory saves ====&lt;br /&gt;
&lt;br /&gt;
[[Category:Implementations]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=Implementations&amp;diff=1512</id>
		<title>Implementations</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=Implementations&amp;diff=1512"/>
		<updated>2023-10-07T13:09:59Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: /* Files and operation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: center;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;This section is a work in progress.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15); text-align: center;&amp;quot;&amp;gt;Research is still needed and some paragraphs may be wrong.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Implementation of the game elements ==&lt;br /&gt;
&lt;br /&gt;
=== Borg ===&lt;br /&gt;
==== GUI elements ====&lt;br /&gt;
==== Borgs GET system ====&lt;br /&gt;
CrystalPixel who found the values.&lt;br /&gt;
&lt;br /&gt;
During a fight in Story Mode, when fighting an enemy borg for a given colour you have two values:&lt;br /&gt;
* The GET value&lt;br /&gt;
* The GET counter&lt;br /&gt;
&lt;br /&gt;
When you eliminate the enemy borg of a given colour, you have its GET counter which increments by a random value between 1 and 16. When the GET counter is greater than or equal to the GET value, we get the borg / Data Crystal at the end of the battle. Then the GET counter of this borg / colour combination is reset to 0. If one leaves or loses the battle, all GET counters are reset to the value they had before the battle started.&lt;br /&gt;
&lt;br /&gt;
For a large number of borgs it is then impossible to get them without having fought a certain amount. For example, Gold Death Borg Alpha has a GET value of 40. In two battles, for example, you can only get 36 in the best case.&lt;br /&gt;
&lt;br /&gt;
1 borg has a GET value of -1:&lt;br /&gt;
* Galactic Emperor&lt;br /&gt;
&lt;br /&gt;
The rest have no GET value:&lt;br /&gt;
* Cyber Death Dragon (Fusion Borg)&lt;br /&gt;
* Machine Dragon&lt;br /&gt;
* Cyber Machine Seiryu (Fusion Borg)&lt;br /&gt;
* Cyber Machine Suzaku (Fusion Borg)&lt;br /&gt;
* Cyber Machine Byakko (Fusion Borg)&lt;br /&gt;
* Cyber Machine Genbu (Fusion Borg)&lt;br /&gt;
* G Red (One of the borg we have)&lt;br /&gt;
* Neo G Red (One of the borgs we have)&lt;br /&gt;
* G Black (It is obtained in a special event)&lt;br /&gt;
&lt;br /&gt;
By changing the GET value to a positive value, you can get the borgs in the scenario: Galactic Emperor for example.&lt;br /&gt;
&lt;br /&gt;
The list of GET values for the EU version is available at [https://github.com/Virtual-World-RE/NeoGF/blob/main/data/eu_borgs_GET_values.csv github].&lt;br /&gt;
&lt;br /&gt;
==== Files and operation ====&lt;br /&gt;
Borgs are implemented with a set of files, each with a specific function. These files are duplicated in the pzz of the borg and in the afs_data. The different _mdl define the different colours of the Borg. It seems that they are used with additional values in other files (the displays are not always correct when exchanging positions in the iso). The main _mdl is loaded from the pzz (collection or story menu). &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;One theory would be that part of the duplicate files would be used to load enemies and the other part allies.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For each borg we have:&amp;lt;br&amp;gt;&lt;br /&gt;
 plxxxx.pzz&lt;br /&gt;
 ├─ 000 file [[Borg - data file|plxxxxdata.bin]]  -&amp;gt; always present&lt;br /&gt;
 ├─ 001 ?                       -&amp;gt; often not present&lt;br /&gt;
 ├─ 002 file plxxxxhit.bin -&amp;gt; always present&lt;br /&gt;
 ├─ 003 file [[Motions|plxxxxmot.bin]]  -&amp;gt; often not present&lt;br /&gt;
 ├─ 004 file [[Models|plxxxx_mdl.arc]]  -&amp;gt; always present&lt;br /&gt;
 ├─ 005 file [[Models|plxxxxb_mdl.arc]] -&amp;gt; always present -&amp;gt; blue model&lt;br /&gt;
 ├─ 006 file [[Models|plxxxxg_mdl.arc]] -&amp;gt; always present&lt;br /&gt;
 ├─ 007 file [[Models|plxxxxs_mdl.arc]] -&amp;gt; always present -&amp;gt; silver model&lt;br /&gt;
 ├─ 008 file [[Models|plxxxxc_mdl.arc]] -&amp;gt; always present&lt;br /&gt;
 ├─ 009 file [[Models|plxxxxk_mdl.arc]] -&amp;gt; always present -&amp;gt; black model&lt;br /&gt;
 ├─ 010 [[TPL (File format)|TPL]] -&amp;gt; name of the borg in Japanese&lt;br /&gt;
 ├─ 011 [[TPL (File format)|TPL]] -&amp;gt; name of the borg in Japanese (small format)&lt;br /&gt;
 ├─ 012 [[TPL (File format)|TPL]] -&amp;gt; borg name in the language of the game&lt;br /&gt;
 └─ 013 file mnxxxx.tpl -&amp;gt; [[TPL (File format)|TPL]] -&amp;gt; name of the borg in the game language (small format)&lt;br /&gt;
 [[Borg - data file|plxxxxdata.bin]] -&amp;gt; file can be named data2 or data3 (only one of the three is present), sometimes missing from the afs_data&lt;br /&gt;
 plxxxxhit.bin -&amp;gt; always present in the afs_data and pzz&lt;br /&gt;
 [[Motions|plxxxxmot.bin]]   -&amp;gt; often absent from the afs_data&lt;br /&gt;
 [[Models|plxxxx_mdl.arc]]  -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxb_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxg_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxs_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxc_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxk_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 mnxxxx.tpl&lt;br /&gt;
&lt;br /&gt;
Position 002: for borg pl0507 and pl0513, file 2 and hit differ (USA/NTSC version)&lt;br /&gt;
&lt;br /&gt;
Position 003: for the borg pl0009, file 3 and the word differ (USA/NTSC version) (MOT - &#039;&#039;Mot&#039;&#039;&#039;ion) - It can be observed that for these files, there are references that could make one think of &#039;&#039;plxxxx_xx_animjoint&#039;&#039;.  The investigation conducted by the [https://smashboards.com/threads/melee-dat-format.292603/ Smash Bros Brawl] community shows a similar file structure. This is another version of HSD (the basic structures are the same).&lt;br /&gt;
&lt;br /&gt;
Position 004 to 009: contain &#039;&#039;&#039;scene_data&#039;&#039;&#039; at the end of the data section, and are &#039;&#039;&#039;&#039;&amp;quot;Scene&amp;quot;&#039;&#039; files (HSDLib) which contain lights, cameras, vertices, bones in the manner of a .blend.&lt;br /&gt;
&lt;br /&gt;
Position 004 to 008: files with values corresponding to 3D. In particular, we can cite &#039;&#039;&#039;pl0300.pzz&#039;&#039;&#039; where they have a header &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;with flags&amp;lt;/span&amp;gt; as well as an adjustable padding if need be to have more elements &#039;&#039;&#039;For example for &#039;&#039;&#039;pl0629.pzz&#039;&#039;&#039; the amount &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;of flags&amp;lt;/span&amp;gt; in the headers is more consistent.&#039;&#039; The origin &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;of the flags&amp;lt;/span&amp;gt; and values in the header is currently unknown but these header fields &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;might constitute a list of available meshes in the file.&amp;lt;/span&amp;gt; The software used to read the files in position 004 to 009 in plxxxx.pzz are 3D Model Researcher and HSDRawLibrary.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Unimplemented borgs&#039;&#039;&#039;: pl0803 - pl080b - pl0f07&amp;lt;br&amp;gt;&lt;br /&gt;
Only the pl0803hit.bin and pl080bhit.bin files remain, and none of their associated files (notably, no associated pzz), which indicates that they are remnants of unimplemented borgs... Also the pzz pl0f07 has no hit file, no 4 internal TPLs (but 4 empty files instead) and just its pl0f07_mdl.arc file, which indicates that this borg is not implemented either (USA/NTSC version).&lt;br /&gt;
&lt;br /&gt;
The 2 dpxxxx.pzz files are similar files to plxxxx.pzz but without the final TPL files. Their usefulness is still to be determined.&lt;br /&gt;
&lt;br /&gt;
Files dpxxxx.pzz (2)&lt;br /&gt;
 ├─ 000 -&amp;gt; [[Borg - data file|plxxxxdata.bin]] from afs_data&lt;br /&gt;
 ├─ 001 -&amp;gt; empty file&lt;br /&gt;
 ├─ 002 -&amp;gt; plxxxxhit.bin from the afs_data&lt;br /&gt;
 ├─ 003 -&amp;gt; [[Motions|plxxxxmot.bin]] from the afs_data&lt;br /&gt;
 ├─ 004 -&amp;gt; [[Models|plxxxx_mdl.arc]] of the afs_data&lt;br /&gt;
 ├─ 005 -&amp;gt; [[Models|plxxxxb_mdl.arc]] of the afs_data&lt;br /&gt;
 ├─ 006 -&amp;gt; [[Models|plxxxxg_mdl.arc]] of the afs_data&lt;br /&gt;
 ├─ 007 -&amp;gt; [[Models|plxxxxs_mdl.arc]] of the afs_data&lt;br /&gt;
 ├─ 008 -&amp;gt; [[Models|plxxxxc_mdl.arc]] of the afs_data&lt;br /&gt;
 └─ 009 -&amp;gt; [[Models|plxxxxk_mdl.arc]] of the afs_data&lt;br /&gt;
&lt;br /&gt;
==== Memory backups ====&lt;br /&gt;
&lt;br /&gt;
=== Data Crystals ===&lt;br /&gt;
The itxxxx_mdl.arz, once unpacked with pzztool.py are the templates for the data crystals.&lt;br /&gt;
&lt;br /&gt;
==== Graphical interface elements ====&lt;br /&gt;
&lt;br /&gt;
unitall_mdl.arc contains all the borg thumbnails used in the force creation/modification menu as well as in the post-combat scene showing which team/borgs VS team/borgs, and in the data crystals.&lt;br /&gt;
&lt;br /&gt;
==== Files and operation ====&lt;br /&gt;
==== Memory saves ====&lt;br /&gt;
&lt;br /&gt;
[[Category:Implementations]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=Implementations&amp;diff=1511</id>
		<title>Implementations</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=Implementations&amp;diff=1511"/>
		<updated>2023-10-07T13:09:44Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: /* Borgs GET system */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: center;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;This section is a work in progress.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15); text-align: center;&amp;quot;&amp;gt;Research is still needed and some paragraphs may be wrong.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Implementation of the game elements ==&lt;br /&gt;
&lt;br /&gt;
=== Borg ===&lt;br /&gt;
==== GUI elements ====&lt;br /&gt;
==== Borgs GET system ====&lt;br /&gt;
CrystalPixel who found the values.&lt;br /&gt;
&lt;br /&gt;
During a fight in Story Mode, when fighting an enemy borg for a given colour you have two values:&lt;br /&gt;
* The GET value&lt;br /&gt;
* The GET counter&lt;br /&gt;
&lt;br /&gt;
When you eliminate the enemy borg of a given colour, you have its GET counter which increments by a random value between 1 and 16. When the GET counter is greater than or equal to the GET value, we get the borg / Data Crystal at the end of the battle. Then the GET counter of this borg / colour combination is reset to 0. If one leaves or loses the battle, all GET counters are reset to the value they had before the battle started.&lt;br /&gt;
&lt;br /&gt;
For a large number of borgs it is then impossible to get them without having fought a certain amount. For example, Gold Death Borg Alpha has a GET value of 40. In two battles, for example, you can only get 36 in the best case.&lt;br /&gt;
&lt;br /&gt;
1 borg has a GET value of -1:&lt;br /&gt;
* Galactic Emperor&lt;br /&gt;
&lt;br /&gt;
The rest have no GET value:&lt;br /&gt;
* Cyber Death Dragon (Fusion Borg)&lt;br /&gt;
* Machine Dragon&lt;br /&gt;
* Cyber Machine Seiryu (Fusion Borg)&lt;br /&gt;
* Cyber Machine Suzaku (Fusion Borg)&lt;br /&gt;
* Cyber Machine Byakko (Fusion Borg)&lt;br /&gt;
* Cyber Machine Genbu (Fusion Borg)&lt;br /&gt;
* G Red (One of the borg we have)&lt;br /&gt;
* Neo G Red (One of the borgs we have)&lt;br /&gt;
* G Black (It is obtained in a special event)&lt;br /&gt;
&lt;br /&gt;
By changing the GET value to a positive value, you can get the borgs in the scenario: Galactic Emperor for example.&lt;br /&gt;
&lt;br /&gt;
The list of GET values for the EU version is available at [https://github.com/Virtual-World-RE/NeoGF/blob/main/data/eu_borgs_GET_values.csv github].&lt;br /&gt;
&lt;br /&gt;
==== Files and operation ====&lt;br /&gt;
Borgs are implemented with a set of files, each with a specific function. These files are duplicated in the pzz of the borg and in the afs_data. The different _mdl define the different colours of the Borg. It seems that they are used with additional values in other files (the displays are not always correct when exchanging positions in the iso). The main _mdl is loaded from the pzz (collection or story menu). &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;One theory would be that part of the duplicate files would be used to load enemies and the other part allies.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For each borg we have:&amp;lt;br&amp;gt;&lt;br /&gt;
 plxxxx.pzz&lt;br /&gt;
 ├─ 000 file [[Borg - data file|plxxxxdata.bin]]  -&amp;gt; always present&lt;br /&gt;
 ├─ 001 ?                       -&amp;gt; often not present&lt;br /&gt;
 ├─ 002 file plxxxxhit.bin -&amp;gt; always present&lt;br /&gt;
 ├─ 003 file [[Motions|plxxxxmot.bin]]  -&amp;gt; often not present&lt;br /&gt;
 ├─ 004 file [[Models|plxxxx_mdl.arc]]  -&amp;gt; always present&lt;br /&gt;
 ├─ 005 file [[Models|plxxxxb_mdl.arc]] -&amp;gt; always present -&amp;gt; blue model&lt;br /&gt;
 ├─ 006 file [[Models|plxxxxg_mdl.arc]] -&amp;gt; always present&lt;br /&gt;
 ├─ 007 file [[Models|plxxxxs_mdl.arc]] -&amp;gt; always present -&amp;gt; silver model&lt;br /&gt;
 ├─ 008 file [[Models|plxxxxc_mdl.arc]] -&amp;gt; always present&lt;br /&gt;
 ├─ 009 file [[Models|plxxxxk_mdl.arc]] -&amp;gt; always present -&amp;gt; black model&lt;br /&gt;
 ├─ 010 [[TPL (File format)|TPL]] -&amp;gt; name of the borg in Japanese&lt;br /&gt;
 ├─ 011 [[TPL (File format)|TPL]] -&amp;gt; name of the borg in Japanese (small format)&lt;br /&gt;
 ├─ 012 [[TPL (File format)|TPL]] -&amp;gt; borg name in the language of the game&lt;br /&gt;
 └─ 013 file mnxxxx.tpl -&amp;gt; [[TPL (File format)|TPL]] -&amp;gt; name of the borg in the game language (small format)&lt;br /&gt;
 [[Borg - data file|plxxxxdata.bin]] -&amp;gt; file can be named data2 or data3 (only one of the three is present), sometimes missing from the afs_data&lt;br /&gt;
 plxxxxhit.bin -&amp;gt; always present in the afs_data and pzz&lt;br /&gt;
 [[Motions|plxxxxmot.bin]]   -&amp;gt; often absent from the afs_data&lt;br /&gt;
 [[Models|plxxxx_mdl.arc]]  -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxb_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxg_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxs_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxc_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 [[Models|plxxxxk_mdl.arc]] -&amp;gt; sometimes missing from afs_data&lt;br /&gt;
 mnxxxx.tpl&lt;br /&gt;
&lt;br /&gt;
Position 002 : for borg pl0507 and pl0513, file 2 and hit differ (USA/NTSC version)&lt;br /&gt;
&lt;br /&gt;
Position 003: for the borg pl0009, file 3 and the word differ (USA/NTSC version) (MOT - &#039;&#039;Mot&#039;&#039;&#039;ion) - It can be observed that for these files, there are references that could make one think of &#039;&#039;plxxxx_xx_animjoint&#039;&#039;.  The investigation conducted by the [https://smashboards.com/threads/melee-dat-format.292603/ Smash Bros Brawl] community shows a similar file structure. This is another version of HSD (the basic structures are the same).&lt;br /&gt;
&lt;br /&gt;
Position 004 to 009: contain &#039;&#039;&#039;scene_data&#039;&#039;&#039; at the end of the data section, and are &#039;&#039;&#039;&#039;&amp;quot;Scene&amp;quot;&#039;&#039; files (HSDLib) which contain lights, cameras, vertices, bones in the manner of a .blend.&lt;br /&gt;
&lt;br /&gt;
Position 004 to 008 : files with values corresponding to 3D. In particular, we can cite &#039;&#039;&#039;pl0300.pzz&#039;&#039;&#039; where they have a header &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;with flags&amp;lt;/span&amp;gt; as well as an adjustable padding if need be to have more elements &#039;&#039;&#039;For example for &#039;&#039;&#039;pl0629.pzz&#039;&#039;&#039; the amount &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;of flags&amp;lt;/span&amp;gt; in the headers is more consistent.&#039;&#039; The origin &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;of the flags&amp;lt;/span&amp;gt; and values in the header is currently unknown but these header fields &amp;lt;span style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;might constitute a list of available meshes in the file.&amp;lt;/span&amp;gt; The software used to read the files in position 004 to 009 in plxxxx.pzz are 3D Model Researcher and HSDRawLibrary.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Unimplemented borgs&#039;&#039;&#039;: pl0803 - pl080b - pl0f07&amp;lt;br&amp;gt;&lt;br /&gt;
Only the pl0803hit.bin and pl080bhit.bin files remain, and none of their associated files (notably, no associated pzz), which indicates that they are remnants of unimplemented borgs... Also the pzz pl0f07 has no hit file, no 4 internal TPLs (but 4 empty files instead) and just its pl0f07_mdl.arc file, which indicates that this borg is not implemented either (USA/NTSC version).&lt;br /&gt;
&lt;br /&gt;
The 2 dpxxxx.pzz files are similar files to plxxxx.pzz but without the final TPL files. Their usefulness is still to be determined.&lt;br /&gt;
&lt;br /&gt;
Files dpxxxx.pzz (2)&lt;br /&gt;
 ├─ 000 -&amp;gt; [[Borg - data file|plxxxxdata.bin]] from afs_data&lt;br /&gt;
 ├─ 001 -&amp;gt; empty file&lt;br /&gt;
 ├─ 002 -&amp;gt; plxxxxhit.bin from the afs_data&lt;br /&gt;
 ├─ 003 -&amp;gt; [[Motions|plxxxxmot.bin]] from the afs_data&lt;br /&gt;
 ├─ 004 -&amp;gt; [[Models|plxxxx_mdl.arc]] of the afs_data&lt;br /&gt;
 ├─ 005 -&amp;gt; [[Models|plxxxxb_mdl.arc]] of the afs_data&lt;br /&gt;
 ├─ 006 -&amp;gt; [[Models|plxxxxg_mdl.arc]] of the afs_data&lt;br /&gt;
 ├─ 007 -&amp;gt; [[Models|plxxxxs_mdl.arc]] of the afs_data&lt;br /&gt;
 ├─ 008 -&amp;gt; [[Models|plxxxxc_mdl.arc]] of the afs_data&lt;br /&gt;
 └─ 009 -&amp;gt; [[Models|plxxxxk_mdl.arc]] of the afs_data&lt;br /&gt;
&lt;br /&gt;
==== Memory backups ====&lt;br /&gt;
&lt;br /&gt;
=== Data Crystals ===&lt;br /&gt;
The itxxxx_mdl.arz, once unpacked with pzztool.py are the templates for the data crystals.&lt;br /&gt;
&lt;br /&gt;
==== Graphical interface elements ====&lt;br /&gt;
&lt;br /&gt;
unitall_mdl.arc contains all the borg thumbnails used in the force creation/modification menu as well as in the post-combat scene showing which team/borgs VS team/borgs, and in the data crystals.&lt;br /&gt;
&lt;br /&gt;
==== Files and operation ====&lt;br /&gt;
==== Memory saves ====&lt;br /&gt;
&lt;br /&gt;
[[Category:Implementations]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=AFS_(Gotcha_Force)&amp;diff=1510</id>
		<title>AFS (Gotcha Force)</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=AFS_(Gotcha_Force)&amp;diff=1510"/>
		<updated>2023-10-07T13:06:46Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This article is about Gotcha Force AFS file format and ongoing researches on it. See [[AFS (File format)]] for AFS file format description.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Research | 2| Researches on headers / bodies structures are partially achieved. }}&lt;br /&gt;
&lt;br /&gt;
Files packed in the Gotcha Force AFSs are loaded using their index in the suite of (offset / length) in the Table Of Content. We verify that by running the game after removing empty spaces at the end of the TOC which represent several empty blocks changing every offsets of files packed into it. Also removing Filename Directory of the game and running it starts the game without bugs.&lt;br /&gt;
&lt;br /&gt;
---------------------------------&lt;br /&gt;
Researches:&lt;br /&gt;
The assembly code unpacking the afs could be found by diffs of a collection of dols parsing the AFS with the same structures, by studying offsets rather than bits:&lt;br /&gt;
* FD present ?&lt;br /&gt;
* ?&lt;br /&gt;
We could build a csv with dol names with presence or not of AFS with errors tolerances.&lt;br /&gt;
&lt;br /&gt;
[[Category:File format]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=AFS_(Gotcha_Force)&amp;diff=1509</id>
		<title>AFS (Gotcha Force)</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=AFS_(Gotcha_Force)&amp;diff=1509"/>
		<updated>2023-10-07T13:06:22Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This article is about Gotcha Force AFS file format and ongoing researches on it. See [[AFS (File format)]] for AFS file format description.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Research | 2| Researches on headers / bodies structures are partially achieved. }}&lt;br /&gt;
&lt;br /&gt;
Files packed in the Gotcha Force AFSs are loaded using their index in the suite of (offset / length) in the Table Of Content. We verify that by running the game after removing empty spaces at the end of the TOC which represent several empty blocks changing every offsets of files packed into it. Also removing Filename Directory of the game and running it starts the game without bugs.&lt;br /&gt;
&lt;br /&gt;
---------------------------------&lt;br /&gt;
Researches:&lt;br /&gt;
The assembly code unpacking the afs could be found by diffs of a collection of dols parsing the AFS with the same structures, by studying offsets rather than bits:&lt;br /&gt;
* FD present ?&lt;br /&gt;
* ?&lt;br /&gt;
We could build a csv with dol names with presence or not of AFS with errors tolerences.&lt;br /&gt;
&lt;br /&gt;
[[Category:File format]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=AFS_(Gotcha_Force)&amp;diff=1508</id>
		<title>AFS (Gotcha Force)</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=AFS_(Gotcha_Force)&amp;diff=1508"/>
		<updated>2023-10-07T13:05:27Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This article is about Gotcha Force AFS file format and ongoing researches on it. See [[AFS (File format)]] for AFS file format description.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Research | 2| Researches on headers / bodies structures are partially achieved. }}&lt;br /&gt;
&lt;br /&gt;
Files packed in the Gotcha Force AFSs are loaded using their index in the suite of (offset / length) in the Table Of Content. We verify that by running the game after removing empty spaces at the end of the TOC which represent several empty blocks changing every offsets of files packed into it. Also removing Filename Directory of the game and running it starts the game without bugs.&lt;br /&gt;
&lt;br /&gt;
---------------------------------&lt;br /&gt;
Researches:&lt;br /&gt;
The assembly code unpacking the afs could be find by diffs of a collection of dols parsing the AFS with the same structures, by studiying offsets rather than bits:&lt;br /&gt;
* FD present ?&lt;br /&gt;
* ?&lt;br /&gt;
We could build a csv with dol names with presence or not of AFS with errors tolerences.&lt;br /&gt;
&lt;br /&gt;
[[Category:File format]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=DOL_(Gotcha_Force)&amp;diff=1507</id>
		<title>DOL (Gotcha Force)</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=DOL_(Gotcha_Force)&amp;diff=1507"/>
		<updated>2023-10-07T13:04:10Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: /* Strings JAP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This article is about Gotcha Force DOL file format and ongoing researches on it. See [[DOL (File format)]] for DOL file format description.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Research | 3| Research on how functions works and how the dol works is nedded. }}&lt;br /&gt;
&lt;br /&gt;
== Memory map ==&lt;br /&gt;
The dol file is mapped in memory and the free available space remaining is next used to create the Arena containing Heaps. For instance we found Warehouse variables in the EU dol mapped in the interval [80593190:80598044[.&lt;br /&gt;
&lt;br /&gt;
So patching the dol is hard because we have to find unused free space in the memory. The [https://www.gc-forever.com/wiki/index.php?title=Apploader apploader reverse engineering] shows that max dol mapping addresses in memory are:&lt;br /&gt;
* 0x80700000  // production boards&lt;br /&gt;
* 0x81200000  // development boards&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;&lt;br /&gt;
In production we can override MetroTRK memory areas or even override apploader trailer before the bootrom/IPL area. Further investigations have to be done on the [[GCM (File format)|iso/GCM]] sys to see how debug memory is mapped in debug mode (apploader vars used in the apploader).&lt;br /&gt;
* Is it possible to know where exactly MetroTRK is mapped?&lt;br /&gt;
* Is there any other libs/datas unused in dol?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* It&#039;s perfectly possible and tested to patch the apploader trailer and raise the trailer size with [[GCM (File format)|GCM/iso]] patch. It gives us 0x100000 bytes available.&lt;br /&gt;
&lt;br /&gt;
The dol entry_point call the __init_registers procedure which will set the reserved following General Purpose Registers:&lt;br /&gt;
* R1 (stack)&lt;br /&gt;
* R2 (_SDA2_BASE_) - This is the read only _SDA2_.&lt;br /&gt;
* R13 (_SDA_BASE_) - This is the read / write _SDA_.&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;mall &#039;&#039;&#039;D&#039;&#039;&#039;ata &#039;&#039;&#039;A&#039;&#039;&#039;nchors are used with a signed short offset (-0x8000 à +0x7fff).&lt;br /&gt;
* -0x8000(R13) = address of .sdata followed by .sbss&lt;br /&gt;
* -0x8000(R2) = address of .sdata2 followed by .sbss2&lt;br /&gt;
* R1 = often the .sbss2 end address + 0x10000&lt;br /&gt;
&lt;br /&gt;
So often only a part of available SDA negative offsets are used for R2 and R13 using -0x8000 at start.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== USA: ===&lt;br /&gt;
Entry point: 80003154&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
 | Section | Offset   | Address  | Length   | Used  |&lt;br /&gt;
 |---------|----------|----------|----------|-------|&lt;br /&gt;
 | text0   | 00000100 | 80003100 | 000024e0 | True  |&lt;br /&gt;
 | text1   | 000025e0 | 800055e0 | 002aab80 | True  |&lt;br /&gt;
 | text2   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text3   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text4   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text5   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text6   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data7   | 002ad160 | 802b0160 | 00000020 | True  |&lt;br /&gt;
 | data8   | 002ad180 | 802b0180 | 00000020 | True  |&lt;br /&gt;
 | data9   | 002ad1a0 | 802b01a0 | 0000acc0 | True  |&lt;br /&gt;
 | data10  | 002b7e60 | 802bae60 | 000f42c0 | True  |&lt;br /&gt;
 | data11  | 003ac120 | 804335a0 | 00002b20 | True  |&lt;br /&gt;
 | data12  | 003aec40 | 80436a20 | 00006ae0 | True  |&lt;br /&gt;
 | data13  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data14  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data15  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data16  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data17  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
* bss: address:803af140 length:0008e3e8&lt;br /&gt;
* R1 = 8044d528&lt;br /&gt;
* R2 = 8043ea20&lt;br /&gt;
* R13 = 8043b5a0&lt;br /&gt;
&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
 | Section     | beg_addr | end_addr | length   |&lt;br /&gt;
 |-------------|----------|----------|----------|&lt;br /&gt;
 | system      | 80000000 | 80003100 | 00003100 |&lt;br /&gt;
 | .text0      | 80003100 | 800055e0 | 000024e0 |&lt;br /&gt;
 | .text1      | 800055e0 | 802b0160 | 002aab80 |&lt;br /&gt;
 | .ctors      | 802b0160 | 802b0180 | 00000020 |&lt;br /&gt;
 | .dtors      | 802b0180 | 802b01a0 | 00000020 |&lt;br /&gt;
 | .rodata     | 802b01a0 | 802bae60 | 0000acc0 |&lt;br /&gt;
 | .data       | 802bae60 | 803af120 | 000f42c0 |&lt;br /&gt;
 | empty       | 803af120 | 803af140 | 00000020 |&lt;br /&gt;
 | .bss        | 803af140 | 804335a0 | 00084460 |&lt;br /&gt;
 | .sdata      | 804335a0 | 804360c0 | 00002b20 |&lt;br /&gt;
 | .sbss       | 804360c0 | 80436a20 | 00000960 |&lt;br /&gt;
 | .sdata2     | 80436a20 | 8043d500 | 00006ae0 |&lt;br /&gt;
 | .sbss2      | 8043d500 | 8043d528 | 00000028 |&lt;br /&gt;
 | stack       | 8043d528 | 8044d528 | 00010000 |&lt;br /&gt;
 | empty       | 8044d528 | 8044d540 | 00000018 |&lt;br /&gt;
 | ArenaLo     | 8044d540 |          |          |&lt;br /&gt;
 | apploader   | 81200000 |        ? |        ? |&lt;br /&gt;
 | Bootrom/IPL | 81300000 |        ? |        ? |&lt;br /&gt;
 | ArenaHi     |          | 817fffa0 |          |&lt;br /&gt;
 | FST         | 817fffa0 | 81800000 | 00500000 |&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== EU: ===&lt;br /&gt;
Entry point: 80003154&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
 | Section | Offset   | Address  | Length   | Used  |&lt;br /&gt;
 |---------|----------|----------|----------|-------|&lt;br /&gt;
 | text0   | 00000100 | 80003100 | 000024e0 | True  |&lt;br /&gt;
 | text1   | 000025e0 | 800055e0 | 002ac800 | True  |&lt;br /&gt;
 | text2   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text3   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text4   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text5   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text6   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data7   | 002aede0 | 802b1de0 | 00000020 | True  |&lt;br /&gt;
 | data8   | 002aee00 | 802b1e00 | 00000020 | True  |&lt;br /&gt;
 | data9   | 002aee20 | 802b1e20 | 0000f060 | True  |&lt;br /&gt;
 | data10  | 002bde80 | 802c0e80 | 000f5d40 | True  |&lt;br /&gt;
 | data11  | 003b3bc0 | 8043cbe0 | 00002b20 | True  |&lt;br /&gt;
 | data12  | 003b66e0 | 80440080 | 00006d20 | True  |&lt;br /&gt;
 | data13  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data14  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data15  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data16  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data17  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
* bss: address:803b6bc0 length:00090208&lt;br /&gt;
* R1 = 80456dc8&lt;br /&gt;
* R2 = 80448080&lt;br /&gt;
* R13 = 80444be0&lt;br /&gt;
&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
 | Section     | beg_addr | end_addr | length   |&lt;br /&gt;
 |-------------|----------|----------|----------|&lt;br /&gt;
 | system      | 80000000 | 80003100 | 00003100 |&lt;br /&gt;
 | .text0      | 80003100 | 800055e0 | 000024e0 |&lt;br /&gt;
 | .text1      | 800055e0 | 802b1de0 | 002ac800 |&lt;br /&gt;
 | .ctors      | 802b1de0 | 802b1e00 | 00000020 |&lt;br /&gt;
 | .dtors      | 802b1e00 | 802b1e20 | 00000020 |&lt;br /&gt;
 | .rodata     | 802b1e20 | 802c0e80 | 0000f060 |&lt;br /&gt;
 | .data       | 802c0e80 | 803b6bc0 | 000f5d40 |&lt;br /&gt;
 | .bss        | 803b6bc0 | 8043cbe0 | 00086020 |&lt;br /&gt;
 | .sdata      | 8043cbe0 | 8043f700 | 00002b20 |&lt;br /&gt;
 | .sbss       | 8043f700 | 80440080 | 00000980 |&lt;br /&gt;
 | .sdata2     | 80440080 | 80446da0 | 00006d20 |&lt;br /&gt;
 | .sbss2      | 80446da0 | 80446dc8 | 00000028 |&lt;br /&gt;
 | stack       | 80446dc8 | 80456dc8 | 00010000 |&lt;br /&gt;
 | empty       | 80456dc8 | 80456de0 | 00000018 |&lt;br /&gt;
 | ArenaLo     | 80456de0 |          |          |&lt;br /&gt;
 | apploader   | 81200000 |        ? |        ? |&lt;br /&gt;
 | Bootrom/IPL | 81300000 |        ? |        ? |&lt;br /&gt;
 | ArenaHi     |          | 817fff40 |          |&lt;br /&gt;
 | FST         | 817fff40 | 81800000 | 000000C0 |&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
80593A00 -&amp;gt; 80598040 Wharehouse&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== JAP: ===&lt;br /&gt;
Entry point: 80003154&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
 | Section | Offset   | Address  | Length   | Used  |&lt;br /&gt;
 |---------|----------|----------|----------|-------|&lt;br /&gt;
 | text0   | 00000100 | 80003100 | 000024e0 | True  |&lt;br /&gt;
 | text1   | 000025e0 | 800055e0 | 002aab20 | True  |&lt;br /&gt;
 | text2   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text3   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text4   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text5   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text6   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data7   | 002ad100 | 802b0100 | 00000020 | True  |&lt;br /&gt;
 | data8   | 002ad120 | 802b0120 | 00000020 | True  |&lt;br /&gt;
 | data9   | 002ad140 | 802b0140 | 0000a2e0 | True  |&lt;br /&gt;
 | data10  | 002b7420 | 802ba420 | 000f3e60 | True  |&lt;br /&gt;
 | data11  | 003ab280 | 804326e0 | 00002b00 | True  |&lt;br /&gt;
 | data12  | 003add80 | 80435b40 | 00006b60 | True  |&lt;br /&gt;
 | data13  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data14  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data15  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data16  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data17  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
* bss: address:803ae280 length:0008e448&lt;br /&gt;
* R1 = 8044c6c8&lt;br /&gt;
* R2 = 8043db40&lt;br /&gt;
* R13 = 8043a6e0 &lt;br /&gt;
&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
 | Section     | beg_addr | end_addr | length   |&lt;br /&gt;
 |-------------|----------|----------|----------|&lt;br /&gt;
 | system      | 80000000 | 80003100 | 00003100 |&lt;br /&gt;
 | .text0      | 80003100 | 800055e0 | 000024e0 |&lt;br /&gt;
 | .text1      | 800055e0 | 802b0100 | 002aab20 |&lt;br /&gt;
 | .ctors      | 802b0100 | 802b0120 | 00000020 |&lt;br /&gt;
 | .dtors      | 802b0120 | 802b0140 | 00000020 |&lt;br /&gt;
 | .rodata     | 802b0140 | 802ba420 | 0000a2e0 |&lt;br /&gt;
 | .data       | 802ba420 | 803ae280 | 000f3e60 |&lt;br /&gt;
 | .bss        | 803ae280 | 804326e0 | 00084460 |&lt;br /&gt;
 | .sdata      | 804326e0 | 804351e0 | 00002b00 |&lt;br /&gt;
 | .sbss       | 804351e0 | 80435b40 | 00000960 |&lt;br /&gt;
 | .sdata2     | 80435b40 | 8043c6a0 | 00006b60 |&lt;br /&gt;
 | .sbss2      | 8043c6a0 | 8043c6c8 | 00000028 |&lt;br /&gt;
 | stack       | 8043c6c8 | 8044c6c8 | 00010000 |&lt;br /&gt;
 | empty       | 8044c6c8 | 8044c6e0 | 00000018 |&lt;br /&gt;
 | ArenaLo     | 8044c6e0 |          |          |&lt;br /&gt;
 | apploader   | 81200000 |        ? |        ? |&lt;br /&gt;
 | Bootrom/IPL | 81300000 |        ? |        ? |&lt;br /&gt;
 | ArenaHi     |          | 817fffa0 |          |&lt;br /&gt;
 | FST         | 817fffa0 | 81800000 | 00000060 |&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Symbol map ==&lt;br /&gt;
The symbol map allows to put names on procedures and data. It can be loaded into dolphin emulator in debug mode with the .map file format.&lt;br /&gt;
&lt;br /&gt;
Symbol map USA: https://github.com/Virtual-World-RE/NeoGF/blob/main/data/GG4E-CSM-20220412.map&lt;br /&gt;
&lt;br /&gt;
== MetroTRK ==&lt;br /&gt;
&lt;br /&gt;
MetroTRK can be activated by patching the bi2.bin DebugFlag and also by patching the following addresses to start the debugger in BBA (&#039;&#039;&#039;B&#039;&#039;&#039;road&#039;&#039;&#039;B&#039;&#039;&#039;and &#039;&#039;&#039;A&#039;&#039;&#039;dapter?) mode:&lt;br /&gt;
* USA: Put a breakpoint at 80003190 then set r3 to 1&lt;br /&gt;
* EU:  Put a breakpoint at 800031C0 then set r7 to 4&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;&lt;br /&gt;
The [https://www.gc-forever.com/wiki/index.php?title=Apploader apploader reverse engineering] shows that there are debug vars in [[GCM (File format)|GCM/iso]] system files. [https://github.com/Virtual-World-RE/NeoGF/tree/main/gcmtool gcmtool.py] allow to patch them.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SDK &amp;amp; libs ==&lt;br /&gt;
All libs and SDK are staticly linked inside the dol.&lt;br /&gt;
&lt;br /&gt;
We found these libs and SDK:&lt;br /&gt;
* GCN SDK - Base dolphin SDK.&lt;br /&gt;
* Sysdolphin base library: Hal SysDolphin (HSD) Graphic and physic engine - https://github.com/doldecomp/melee/tree/master/src/sysdolphin/baselib&lt;br /&gt;
* MetroTRK: Target Resident Debugging Kernel for embedded systems. It&#039;s an embedded Kernel for debug.&lt;br /&gt;
* Metrowerks CW Runtime library: CodeWarrior: Metrowerks Standard Library and C/C++ Runtime&lt;br /&gt;
* And from ADXT/GC to CRI CFT/GC: It seems to be audio and video codecs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== H and C files ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
All 3 iso contain followings .h and .c symbols in the .data, .rodata, .sdata and .sdata2. The EU version contains also the symbol &amp;quot;objalloc.h&amp;quot;.&lt;br /&gt;
 aobj.h&lt;br /&gt;
 cobj.h&lt;br /&gt;
 jobj.h&lt;br /&gt;
 lobj.h&lt;br /&gt;
 object.h&lt;br /&gt;
 &lt;br /&gt;
 GCN_Mem_Alloc.c&lt;br /&gt;
 aobj.c&lt;br /&gt;
 bytecode.c&lt;br /&gt;
 class.c&lt;br /&gt;
 cobj.c&lt;br /&gt;
 displayfunc.c&lt;br /&gt;
 dobj.c&lt;br /&gt;
 dvd.c&lt;br /&gt;
 dvdfs.c&lt;br /&gt;
 fobj.c&lt;br /&gt;
 fog.c&lt;br /&gt;
 hash.c&lt;br /&gt;
 id.c&lt;br /&gt;
 initialize.c&lt;br /&gt;
 jobj.c&lt;br /&gt;
 list.c&lt;br /&gt;
 lobj.c&lt;br /&gt;
 memory.c&lt;br /&gt;
 mobj.c&lt;br /&gt;
 mtx.c&lt;br /&gt;
 objalloc.c&lt;br /&gt;
 perf.c&lt;br /&gt;
 pobj.c&lt;br /&gt;
 robj.c&lt;br /&gt;
 tev.c&lt;br /&gt;
 texp.c&lt;br /&gt;
 texpdag.c&lt;br /&gt;
 tobj.c&lt;br /&gt;
 tpl.c&lt;br /&gt;
 util.c&lt;br /&gt;
 vi.c&lt;br /&gt;
 video.c&lt;br /&gt;
 wobj.c&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== Strings USA ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
String list found in the dol and allowing to find libs / SDK:&lt;br /&gt;
 MetroTRK for GAMECUBE v2.0&lt;br /&gt;
 Metrowerks CW runtime library&lt;br /&gt;
 ADXT/GC Ver.8.57       Build:Feb 6 2003 18:03:46&lt;br /&gt;
 SKG/GC Ver.0.61        Build:Feb 6 2003 18:03:49&lt;br /&gt;
 ADXGC Ver.1.21         Build:Feb 6 2003 18:04:00&lt;br /&gt;
 ADXGCSDK Ver.05Sep2002 Build:Feb 6 2003 18:04:01&lt;br /&gt;
 ADXF/GC Ver.7.01       Build:Feb 6 2003 18:02:45&lt;br /&gt;
 CVFS/GC Ver.2.33       Build:Feb 6 2003 18:02:35&lt;br /&gt;
 GCCI Ver.1.09          Build:Feb 6 2003 18:02:33&lt;br /&gt;
 LSC/GC Ver.2.10        Build:Feb 6 2003 18:02:32&lt;br /&gt;
 SJ/GC Ver.6.10         Build:Feb 6 2003 18:02:53&lt;br /&gt;
 SVM/GC Ver.1.51        Build:Feb 6 2003 18:02:51&lt;br /&gt;
 MFCI/GC Ver.1.04       Build:Feb 6 2003 18:03:11&lt;br /&gt;
 AXRNA Ver.1.02         Build:Feb 6 2003 18:03:43&lt;br /&gt;
 CRI SUD/GC Ver.0.02    Build:Feb 6 2003 14:30:18&lt;br /&gt;
 CRI SFX/GC Ver.1.22    Build:Feb 6 2003 14:30:16&lt;br /&gt;
 CRI DCT/GC Ver.1.803   Build:Feb 6 2003 14:28:46&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI MPS/GC Ver.1.669   Build:Feb 6 2003 14:28:50&lt;br /&gt;
 CRI MPV/GC Ver.1.840   Build:Feb 6 2003 14:28:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFD/GC Ver.1.842   Build:Feb 6 2003 14:29:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFH/GC Ver.1.12    Build:Feb 6 2003 14:30:00&lt;br /&gt;
 MWSFD/GC Ver.2.62      Build:Feb 6 2003 14:28:42&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI CFT/GC Ver.1.24    Build:Feb 6 2003 14:28:33&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK – OS   release build: Apr 17 2003 12:33:06 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 Dolphin OS Kernel built : %s %s Apr 17 2003 12:33:06&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK – EXI  release build: Apr 17 2003 12:33:17 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - SI   release build: Apr 17 2003 12:33:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DVD  release build: Apr 22 2003 15:49:00 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - VI   release build: Apr 17 2003 12:33:22 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - PAD  release build: Apr 17 2003 12:33:44 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AI   release build: Apr 17 2003 12:33:54 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AR   release build: Apr 17 2003 12:33:55 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - ARQ  release build: Apr 17 2003 12:33:56 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AX   release build: Apr 17 2003 12:33:57 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DSP  release build: Apr 17 2003 12:34:16 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - CARD release build: Apr 17 2003 12:34:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - GX   release build: Apr 21 2003 14:55:46 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 sysdolphin_base_library&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Strings EU ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
String list found in the dol and allowing to find libs / SDK:&lt;br /&gt;
 Metrowerks Target Resident Kernel for PowerPC&lt;br /&gt;
 MetroTRK for GAMECUBE v2.0&lt;br /&gt;
 Metrowerks CW runtime library initializing default heap&lt;br /&gt;
 ADXT/GC     Ver.8.57 Build:Feb       6 2003 18:03:46&lt;br /&gt;
 SKG/GC      Ver.0.61 Build:Feb       6 2003 18:03:49&lt;br /&gt;
 ADXGC       Ver.1.21 Build:Feb       6 2003 18:04:00&lt;br /&gt;
 ADXGCSDK    Ver.05Sep2002 Build:Feb  6 2003 18:04:01&lt;br /&gt;
 ADXF/GC     Ver.7.01 Build:Feb       6 2003 18:02:45&lt;br /&gt;
 CVFS/GC     Ver.2.33 Build:Feb       6 2003 18:02:35&lt;br /&gt;
 GCCI        Ver.1.09 Build:Feb       6 2003 18:02:33&lt;br /&gt;
 LSC/GC      Ver.2.10 Build:Feb       6 2003 18:02:32&lt;br /&gt;
 SJ/GC       Ver.6.10 Build:Feb       6 2003 18:02:53&lt;br /&gt;
 SVM/GC      Ver.1.51 Build:Feb       6 2003 18:02:51&lt;br /&gt;
 MFCI/GC     Ver.1.04 Build:Feb       6 2003 18:03:11&lt;br /&gt;
 AXRNA       Ver.1.02 Build:Feb       6 2003 18:03:43&lt;br /&gt;
 CRI SUD/GC  Ver.0.02 Build:Feb       6 2003 14:30:18&lt;br /&gt;
 CRI SFX/GC  Ver.1.22 Build:Feb       6 2003 14:30:16&lt;br /&gt;
 CRI DCT/GC  Ver.1.803 Build:Feb      6 2003 14:28:46&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI MPS/GC  Ver.1.669 Build:Feb      6 2003 14:28:50&lt;br /&gt;
 CRI MPV/GC  Ver.1.840 Build:Feb      6 2003 14:28:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFD/GC  Ver.1.842 Build:Feb      6 2003 14:29:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFH/GC  Ver.1.12 Build:Feb       6 2003 14:30:00&lt;br /&gt;
 MWSFD/GC    Ver.2.62 Build:Feb       6 2003 14:28:42&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI CFT/GC  Ver.1.24 Build:Feb        6 2003 14:28:33&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - OS   release build: Apr 17 2003 12:33:06 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 Dolphin OS Kernel built : Apr 17 2003 12:33:06&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - EXI  release build: Apr 17 2003 12:33:17 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - SI   release build: Apr 17 2003 12:33:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DVD  release build: Apr 22 2003 15:49:00 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - VI   release build: Apr 17 2003 12:33:22 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - PAD  release build: Apr 17 2003 12:33:44 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AI   release build: Apr 17 2003 12:33:54 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AR   release build: Apr 17 2003 12:33:55 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - ARQ  release build: Apr 17 2003 12:33:56 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AX   release build: Apr 17 2003 12:33:57 (0x2301) &amp;gt;&amp;gt; &lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DSP  release build: Apr 17 2003 12:34:16 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 DSPInit(): Build Date: Apr 17 2003 12:34:16&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - CARD release build: Apr 17 2003 12:34:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - GX   release build: Apr 21 2003 14:55:46 (0x2301) &amp;gt;&amp;gt;  &lt;br /&gt;
 sysdolphin_base_library&lt;br /&gt;
 HSD_INIT_HEAP_MAX_NUM    is obsolete since 1.3.0.0.&lt;br /&gt;
 HSD_INIT_AUDIO_HEAP_SIZE is obsolete since 1.3.0.0.&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Strings JAP ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
String list found in the dol and allowing to find libs / SDK:&lt;br /&gt;
 Metrowerks Target Resident Kernel for PowerPC&lt;br /&gt;
 MetroTRK for GAMECUBE v2.0&lt;br /&gt;
 ADXT/GC Ver.8.57       Build:Feb  6 2003 18:03:46&lt;br /&gt;
 SKG/GC Ver.0.61        Build:Feb  6 2003 18:03:49&lt;br /&gt;
 ADXGC Ver.1.21         Build:Feb  6 2003 18:04:00&lt;br /&gt;
 ADXGCSDK Ver.05Sep2002 Build:Feb  6 2003 18:04:01&lt;br /&gt;
 ADXF/GC Ver.7.01       Build:Feb  6 2003 18:02:45&lt;br /&gt;
 CVFS/GC Ver.2.33       Build:Feb  6 2003 18:02:35&lt;br /&gt;
 GCCI Ver.1.09          Build:Feb  6 2003 18:02:33&lt;br /&gt;
 LSC/GC Ver.2.10        Build:Feb  6 2003 18:02:32&lt;br /&gt;
 SJ/GC Ver.6.10         Build:Feb  6 2003 18:02:53&lt;br /&gt;
 SVM/GC Ver.1.51        Build:Feb  6 2003 18:02:51&lt;br /&gt;
 MFCI/GC Ver.1.04       Build:Feb  6 2003 18:03:11&lt;br /&gt;
 AXRNA Ver.1.02         Build:Feb  6 2003 18:03:43&lt;br /&gt;
 CRI SUD/GC Ver.0.02    Build:Feb  6 2003 14:30:18&lt;br /&gt;
 CRI SFX/GC Ver.1.22    Build:Feb  6 2003 14:30:16&lt;br /&gt;
 CRI DCT/GC Ver.1.803   Build:Feb  6 2003 14:28:46&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI MPS/GC Ver.1.669   Build:Feb  6 2003 14:28:50&lt;br /&gt;
 CRI MPV/GC Ver.1.840   Build:Feb  6 2003 14:28:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFD/GC Ver.1.842   Build:Feb  6 2003 14:29:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFH/GC Ver.1.12    Build:Feb  6 2003 14:30:00&lt;br /&gt;
 MWSFD/GC Ver.2.62      Build:Feb  6 2003 14:28:42&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI CFT/GC Ver.1.24    Build:Feb  6 2003 14:28:33&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - OS   release build: Apr 17 2003 12:33:06 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 Dolphin OS Kernel built : Apr 17 2003 12:33:06&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - EXI  release build: Apr 17 2003 12:33:17 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - SI   release build: Apr 17 2003 12:33:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DVD  release build: Apr 22 2003 15:49:00 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - VI   release build: Apr 17 2003 12:33:22 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - PAD  release build: Apr 17 2003 12:33:44 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AI   release build: Apr 17 2003 12:33:54 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AR   release build: Apr 17 2003 12:33:55 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - ARQ  release build: Apr 17 2003 12:33:56 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AX   release build: Apr 17 2003 12:33:57 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DSP  release build: Apr 17 2003 12:34:16 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - CARD release build: Apr 17 2003 12:34:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - GX   release build: Apr 21 2003 14:55:46 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 sysdolphin_base_library&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:File format]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=DOL_(Gotcha_Force)&amp;diff=1506</id>
		<title>DOL (Gotcha Force)</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=DOL_(Gotcha_Force)&amp;diff=1506"/>
		<updated>2023-10-07T13:04:01Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: /* Strings EU */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This article is about Gotcha Force DOL file format and ongoing researches on it. See [[DOL (File format)]] for DOL file format description.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Research | 3| Research on how functions works and how the dol works is nedded. }}&lt;br /&gt;
&lt;br /&gt;
== Memory map ==&lt;br /&gt;
The dol file is mapped in memory and the free available space remaining is next used to create the Arena containing Heaps. For instance we found Warehouse variables in the EU dol mapped in the interval [80593190:80598044[.&lt;br /&gt;
&lt;br /&gt;
So patching the dol is hard because we have to find unused free space in the memory. The [https://www.gc-forever.com/wiki/index.php?title=Apploader apploader reverse engineering] shows that max dol mapping addresses in memory are:&lt;br /&gt;
* 0x80700000  // production boards&lt;br /&gt;
* 0x81200000  // development boards&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;&lt;br /&gt;
In production we can override MetroTRK memory areas or even override apploader trailer before the bootrom/IPL area. Further investigations have to be done on the [[GCM (File format)|iso/GCM]] sys to see how debug memory is mapped in debug mode (apploader vars used in the apploader).&lt;br /&gt;
* Is it possible to know where exactly MetroTRK is mapped?&lt;br /&gt;
* Is there any other libs/datas unused in dol?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* It&#039;s perfectly possible and tested to patch the apploader trailer and raise the trailer size with [[GCM (File format)|GCM/iso]] patch. It gives us 0x100000 bytes available.&lt;br /&gt;
&lt;br /&gt;
The dol entry_point call the __init_registers procedure which will set the reserved following General Purpose Registers:&lt;br /&gt;
* R1 (stack)&lt;br /&gt;
* R2 (_SDA2_BASE_) - This is the read only _SDA2_.&lt;br /&gt;
* R13 (_SDA_BASE_) - This is the read / write _SDA_.&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;mall &#039;&#039;&#039;D&#039;&#039;&#039;ata &#039;&#039;&#039;A&#039;&#039;&#039;nchors are used with a signed short offset (-0x8000 à +0x7fff).&lt;br /&gt;
* -0x8000(R13) = address of .sdata followed by .sbss&lt;br /&gt;
* -0x8000(R2) = address of .sdata2 followed by .sbss2&lt;br /&gt;
* R1 = often the .sbss2 end address + 0x10000&lt;br /&gt;
&lt;br /&gt;
So often only a part of available SDA negative offsets are used for R2 and R13 using -0x8000 at start.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== USA: ===&lt;br /&gt;
Entry point: 80003154&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
 | Section | Offset   | Address  | Length   | Used  |&lt;br /&gt;
 |---------|----------|----------|----------|-------|&lt;br /&gt;
 | text0   | 00000100 | 80003100 | 000024e0 | True  |&lt;br /&gt;
 | text1   | 000025e0 | 800055e0 | 002aab80 | True  |&lt;br /&gt;
 | text2   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text3   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text4   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text5   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text6   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data7   | 002ad160 | 802b0160 | 00000020 | True  |&lt;br /&gt;
 | data8   | 002ad180 | 802b0180 | 00000020 | True  |&lt;br /&gt;
 | data9   | 002ad1a0 | 802b01a0 | 0000acc0 | True  |&lt;br /&gt;
 | data10  | 002b7e60 | 802bae60 | 000f42c0 | True  |&lt;br /&gt;
 | data11  | 003ac120 | 804335a0 | 00002b20 | True  |&lt;br /&gt;
 | data12  | 003aec40 | 80436a20 | 00006ae0 | True  |&lt;br /&gt;
 | data13  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data14  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data15  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data16  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data17  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
* bss: address:803af140 length:0008e3e8&lt;br /&gt;
* R1 = 8044d528&lt;br /&gt;
* R2 = 8043ea20&lt;br /&gt;
* R13 = 8043b5a0&lt;br /&gt;
&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
 | Section     | beg_addr | end_addr | length   |&lt;br /&gt;
 |-------------|----------|----------|----------|&lt;br /&gt;
 | system      | 80000000 | 80003100 | 00003100 |&lt;br /&gt;
 | .text0      | 80003100 | 800055e0 | 000024e0 |&lt;br /&gt;
 | .text1      | 800055e0 | 802b0160 | 002aab80 |&lt;br /&gt;
 | .ctors      | 802b0160 | 802b0180 | 00000020 |&lt;br /&gt;
 | .dtors      | 802b0180 | 802b01a0 | 00000020 |&lt;br /&gt;
 | .rodata     | 802b01a0 | 802bae60 | 0000acc0 |&lt;br /&gt;
 | .data       | 802bae60 | 803af120 | 000f42c0 |&lt;br /&gt;
 | empty       | 803af120 | 803af140 | 00000020 |&lt;br /&gt;
 | .bss        | 803af140 | 804335a0 | 00084460 |&lt;br /&gt;
 | .sdata      | 804335a0 | 804360c0 | 00002b20 |&lt;br /&gt;
 | .sbss       | 804360c0 | 80436a20 | 00000960 |&lt;br /&gt;
 | .sdata2     | 80436a20 | 8043d500 | 00006ae0 |&lt;br /&gt;
 | .sbss2      | 8043d500 | 8043d528 | 00000028 |&lt;br /&gt;
 | stack       | 8043d528 | 8044d528 | 00010000 |&lt;br /&gt;
 | empty       | 8044d528 | 8044d540 | 00000018 |&lt;br /&gt;
 | ArenaLo     | 8044d540 |          |          |&lt;br /&gt;
 | apploader   | 81200000 |        ? |        ? |&lt;br /&gt;
 | Bootrom/IPL | 81300000 |        ? |        ? |&lt;br /&gt;
 | ArenaHi     |          | 817fffa0 |          |&lt;br /&gt;
 | FST         | 817fffa0 | 81800000 | 00500000 |&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== EU: ===&lt;br /&gt;
Entry point: 80003154&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
 | Section | Offset   | Address  | Length   | Used  |&lt;br /&gt;
 |---------|----------|----------|----------|-------|&lt;br /&gt;
 | text0   | 00000100 | 80003100 | 000024e0 | True  |&lt;br /&gt;
 | text1   | 000025e0 | 800055e0 | 002ac800 | True  |&lt;br /&gt;
 | text2   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text3   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text4   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text5   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text6   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data7   | 002aede0 | 802b1de0 | 00000020 | True  |&lt;br /&gt;
 | data8   | 002aee00 | 802b1e00 | 00000020 | True  |&lt;br /&gt;
 | data9   | 002aee20 | 802b1e20 | 0000f060 | True  |&lt;br /&gt;
 | data10  | 002bde80 | 802c0e80 | 000f5d40 | True  |&lt;br /&gt;
 | data11  | 003b3bc0 | 8043cbe0 | 00002b20 | True  |&lt;br /&gt;
 | data12  | 003b66e0 | 80440080 | 00006d20 | True  |&lt;br /&gt;
 | data13  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data14  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data15  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data16  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data17  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
* bss: address:803b6bc0 length:00090208&lt;br /&gt;
* R1 = 80456dc8&lt;br /&gt;
* R2 = 80448080&lt;br /&gt;
* R13 = 80444be0&lt;br /&gt;
&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
 | Section     | beg_addr | end_addr | length   |&lt;br /&gt;
 |-------------|----------|----------|----------|&lt;br /&gt;
 | system      | 80000000 | 80003100 | 00003100 |&lt;br /&gt;
 | .text0      | 80003100 | 800055e0 | 000024e0 |&lt;br /&gt;
 | .text1      | 800055e0 | 802b1de0 | 002ac800 |&lt;br /&gt;
 | .ctors      | 802b1de0 | 802b1e00 | 00000020 |&lt;br /&gt;
 | .dtors      | 802b1e00 | 802b1e20 | 00000020 |&lt;br /&gt;
 | .rodata     | 802b1e20 | 802c0e80 | 0000f060 |&lt;br /&gt;
 | .data       | 802c0e80 | 803b6bc0 | 000f5d40 |&lt;br /&gt;
 | .bss        | 803b6bc0 | 8043cbe0 | 00086020 |&lt;br /&gt;
 | .sdata      | 8043cbe0 | 8043f700 | 00002b20 |&lt;br /&gt;
 | .sbss       | 8043f700 | 80440080 | 00000980 |&lt;br /&gt;
 | .sdata2     | 80440080 | 80446da0 | 00006d20 |&lt;br /&gt;
 | .sbss2      | 80446da0 | 80446dc8 | 00000028 |&lt;br /&gt;
 | stack       | 80446dc8 | 80456dc8 | 00010000 |&lt;br /&gt;
 | empty       | 80456dc8 | 80456de0 | 00000018 |&lt;br /&gt;
 | ArenaLo     | 80456de0 |          |          |&lt;br /&gt;
 | apploader   | 81200000 |        ? |        ? |&lt;br /&gt;
 | Bootrom/IPL | 81300000 |        ? |        ? |&lt;br /&gt;
 | ArenaHi     |          | 817fff40 |          |&lt;br /&gt;
 | FST         | 817fff40 | 81800000 | 000000C0 |&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
80593A00 -&amp;gt; 80598040 Wharehouse&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== JAP: ===&lt;br /&gt;
Entry point: 80003154&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
 | Section | Offset   | Address  | Length   | Used  |&lt;br /&gt;
 |---------|----------|----------|----------|-------|&lt;br /&gt;
 | text0   | 00000100 | 80003100 | 000024e0 | True  |&lt;br /&gt;
 | text1   | 000025e0 | 800055e0 | 002aab20 | True  |&lt;br /&gt;
 | text2   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text3   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text4   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text5   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text6   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data7   | 002ad100 | 802b0100 | 00000020 | True  |&lt;br /&gt;
 | data8   | 002ad120 | 802b0120 | 00000020 | True  |&lt;br /&gt;
 | data9   | 002ad140 | 802b0140 | 0000a2e0 | True  |&lt;br /&gt;
 | data10  | 002b7420 | 802ba420 | 000f3e60 | True  |&lt;br /&gt;
 | data11  | 003ab280 | 804326e0 | 00002b00 | True  |&lt;br /&gt;
 | data12  | 003add80 | 80435b40 | 00006b60 | True  |&lt;br /&gt;
 | data13  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data14  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data15  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data16  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data17  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
* bss: address:803ae280 length:0008e448&lt;br /&gt;
* R1 = 8044c6c8&lt;br /&gt;
* R2 = 8043db40&lt;br /&gt;
* R13 = 8043a6e0 &lt;br /&gt;
&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
 | Section     | beg_addr | end_addr | length   |&lt;br /&gt;
 |-------------|----------|----------|----------|&lt;br /&gt;
 | system      | 80000000 | 80003100 | 00003100 |&lt;br /&gt;
 | .text0      | 80003100 | 800055e0 | 000024e0 |&lt;br /&gt;
 | .text1      | 800055e0 | 802b0100 | 002aab20 |&lt;br /&gt;
 | .ctors      | 802b0100 | 802b0120 | 00000020 |&lt;br /&gt;
 | .dtors      | 802b0120 | 802b0140 | 00000020 |&lt;br /&gt;
 | .rodata     | 802b0140 | 802ba420 | 0000a2e0 |&lt;br /&gt;
 | .data       | 802ba420 | 803ae280 | 000f3e60 |&lt;br /&gt;
 | .bss        | 803ae280 | 804326e0 | 00084460 |&lt;br /&gt;
 | .sdata      | 804326e0 | 804351e0 | 00002b00 |&lt;br /&gt;
 | .sbss       | 804351e0 | 80435b40 | 00000960 |&lt;br /&gt;
 | .sdata2     | 80435b40 | 8043c6a0 | 00006b60 |&lt;br /&gt;
 | .sbss2      | 8043c6a0 | 8043c6c8 | 00000028 |&lt;br /&gt;
 | stack       | 8043c6c8 | 8044c6c8 | 00010000 |&lt;br /&gt;
 | empty       | 8044c6c8 | 8044c6e0 | 00000018 |&lt;br /&gt;
 | ArenaLo     | 8044c6e0 |          |          |&lt;br /&gt;
 | apploader   | 81200000 |        ? |        ? |&lt;br /&gt;
 | Bootrom/IPL | 81300000 |        ? |        ? |&lt;br /&gt;
 | ArenaHi     |          | 817fffa0 |          |&lt;br /&gt;
 | FST         | 817fffa0 | 81800000 | 00000060 |&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Symbol map ==&lt;br /&gt;
The symbol map allows to put names on procedures and data. It can be loaded into dolphin emulator in debug mode with the .map file format.&lt;br /&gt;
&lt;br /&gt;
Symbol map USA: https://github.com/Virtual-World-RE/NeoGF/blob/main/data/GG4E-CSM-20220412.map&lt;br /&gt;
&lt;br /&gt;
== MetroTRK ==&lt;br /&gt;
&lt;br /&gt;
MetroTRK can be activated by patching the bi2.bin DebugFlag and also by patching the following addresses to start the debugger in BBA (&#039;&#039;&#039;B&#039;&#039;&#039;road&#039;&#039;&#039;B&#039;&#039;&#039;and &#039;&#039;&#039;A&#039;&#039;&#039;dapter?) mode:&lt;br /&gt;
* USA: Put a breakpoint at 80003190 then set r3 to 1&lt;br /&gt;
* EU:  Put a breakpoint at 800031C0 then set r7 to 4&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;&lt;br /&gt;
The [https://www.gc-forever.com/wiki/index.php?title=Apploader apploader reverse engineering] shows that there are debug vars in [[GCM (File format)|GCM/iso]] system files. [https://github.com/Virtual-World-RE/NeoGF/tree/main/gcmtool gcmtool.py] allow to patch them.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SDK &amp;amp; libs ==&lt;br /&gt;
All libs and SDK are staticly linked inside the dol.&lt;br /&gt;
&lt;br /&gt;
We found these libs and SDK:&lt;br /&gt;
* GCN SDK - Base dolphin SDK.&lt;br /&gt;
* Sysdolphin base library: Hal SysDolphin (HSD) Graphic and physic engine - https://github.com/doldecomp/melee/tree/master/src/sysdolphin/baselib&lt;br /&gt;
* MetroTRK: Target Resident Debugging Kernel for embedded systems. It&#039;s an embedded Kernel for debug.&lt;br /&gt;
* Metrowerks CW Runtime library: CodeWarrior: Metrowerks Standard Library and C/C++ Runtime&lt;br /&gt;
* And from ADXT/GC to CRI CFT/GC: It seems to be audio and video codecs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== H and C files ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
All 3 iso contain followings .h and .c symbols in the .data, .rodata, .sdata and .sdata2. The EU version contains also the symbol &amp;quot;objalloc.h&amp;quot;.&lt;br /&gt;
 aobj.h&lt;br /&gt;
 cobj.h&lt;br /&gt;
 jobj.h&lt;br /&gt;
 lobj.h&lt;br /&gt;
 object.h&lt;br /&gt;
 &lt;br /&gt;
 GCN_Mem_Alloc.c&lt;br /&gt;
 aobj.c&lt;br /&gt;
 bytecode.c&lt;br /&gt;
 class.c&lt;br /&gt;
 cobj.c&lt;br /&gt;
 displayfunc.c&lt;br /&gt;
 dobj.c&lt;br /&gt;
 dvd.c&lt;br /&gt;
 dvdfs.c&lt;br /&gt;
 fobj.c&lt;br /&gt;
 fog.c&lt;br /&gt;
 hash.c&lt;br /&gt;
 id.c&lt;br /&gt;
 initialize.c&lt;br /&gt;
 jobj.c&lt;br /&gt;
 list.c&lt;br /&gt;
 lobj.c&lt;br /&gt;
 memory.c&lt;br /&gt;
 mobj.c&lt;br /&gt;
 mtx.c&lt;br /&gt;
 objalloc.c&lt;br /&gt;
 perf.c&lt;br /&gt;
 pobj.c&lt;br /&gt;
 robj.c&lt;br /&gt;
 tev.c&lt;br /&gt;
 texp.c&lt;br /&gt;
 texpdag.c&lt;br /&gt;
 tobj.c&lt;br /&gt;
 tpl.c&lt;br /&gt;
 util.c&lt;br /&gt;
 vi.c&lt;br /&gt;
 video.c&lt;br /&gt;
 wobj.c&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== Strings USA ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
String list found in the dol and allowing to find libs / SDK:&lt;br /&gt;
 MetroTRK for GAMECUBE v2.0&lt;br /&gt;
 Metrowerks CW runtime library&lt;br /&gt;
 ADXT/GC Ver.8.57       Build:Feb 6 2003 18:03:46&lt;br /&gt;
 SKG/GC Ver.0.61        Build:Feb 6 2003 18:03:49&lt;br /&gt;
 ADXGC Ver.1.21         Build:Feb 6 2003 18:04:00&lt;br /&gt;
 ADXGCSDK Ver.05Sep2002 Build:Feb 6 2003 18:04:01&lt;br /&gt;
 ADXF/GC Ver.7.01       Build:Feb 6 2003 18:02:45&lt;br /&gt;
 CVFS/GC Ver.2.33       Build:Feb 6 2003 18:02:35&lt;br /&gt;
 GCCI Ver.1.09          Build:Feb 6 2003 18:02:33&lt;br /&gt;
 LSC/GC Ver.2.10        Build:Feb 6 2003 18:02:32&lt;br /&gt;
 SJ/GC Ver.6.10         Build:Feb 6 2003 18:02:53&lt;br /&gt;
 SVM/GC Ver.1.51        Build:Feb 6 2003 18:02:51&lt;br /&gt;
 MFCI/GC Ver.1.04       Build:Feb 6 2003 18:03:11&lt;br /&gt;
 AXRNA Ver.1.02         Build:Feb 6 2003 18:03:43&lt;br /&gt;
 CRI SUD/GC Ver.0.02    Build:Feb 6 2003 14:30:18&lt;br /&gt;
 CRI SFX/GC Ver.1.22    Build:Feb 6 2003 14:30:16&lt;br /&gt;
 CRI DCT/GC Ver.1.803   Build:Feb 6 2003 14:28:46&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI MPS/GC Ver.1.669   Build:Feb 6 2003 14:28:50&lt;br /&gt;
 CRI MPV/GC Ver.1.840   Build:Feb 6 2003 14:28:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFD/GC Ver.1.842   Build:Feb 6 2003 14:29:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFH/GC Ver.1.12    Build:Feb 6 2003 14:30:00&lt;br /&gt;
 MWSFD/GC Ver.2.62      Build:Feb 6 2003 14:28:42&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI CFT/GC Ver.1.24    Build:Feb 6 2003 14:28:33&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK – OS   release build: Apr 17 2003 12:33:06 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 Dolphin OS Kernel built : %s %s Apr 17 2003 12:33:06&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK – EXI  release build: Apr 17 2003 12:33:17 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - SI   release build: Apr 17 2003 12:33:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DVD  release build: Apr 22 2003 15:49:00 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - VI   release build: Apr 17 2003 12:33:22 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - PAD  release build: Apr 17 2003 12:33:44 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AI   release build: Apr 17 2003 12:33:54 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AR   release build: Apr 17 2003 12:33:55 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - ARQ  release build: Apr 17 2003 12:33:56 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AX   release build: Apr 17 2003 12:33:57 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DSP  release build: Apr 17 2003 12:34:16 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - CARD release build: Apr 17 2003 12:34:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - GX   release build: Apr 21 2003 14:55:46 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 sysdolphin_base_library&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Strings EU ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
String list found in the dol and allowing to find libs / SDK:&lt;br /&gt;
 Metrowerks Target Resident Kernel for PowerPC&lt;br /&gt;
 MetroTRK for GAMECUBE v2.0&lt;br /&gt;
 Metrowerks CW runtime library initializing default heap&lt;br /&gt;
 ADXT/GC     Ver.8.57 Build:Feb       6 2003 18:03:46&lt;br /&gt;
 SKG/GC      Ver.0.61 Build:Feb       6 2003 18:03:49&lt;br /&gt;
 ADXGC       Ver.1.21 Build:Feb       6 2003 18:04:00&lt;br /&gt;
 ADXGCSDK    Ver.05Sep2002 Build:Feb  6 2003 18:04:01&lt;br /&gt;
 ADXF/GC     Ver.7.01 Build:Feb       6 2003 18:02:45&lt;br /&gt;
 CVFS/GC     Ver.2.33 Build:Feb       6 2003 18:02:35&lt;br /&gt;
 GCCI        Ver.1.09 Build:Feb       6 2003 18:02:33&lt;br /&gt;
 LSC/GC      Ver.2.10 Build:Feb       6 2003 18:02:32&lt;br /&gt;
 SJ/GC       Ver.6.10 Build:Feb       6 2003 18:02:53&lt;br /&gt;
 SVM/GC      Ver.1.51 Build:Feb       6 2003 18:02:51&lt;br /&gt;
 MFCI/GC     Ver.1.04 Build:Feb       6 2003 18:03:11&lt;br /&gt;
 AXRNA       Ver.1.02 Build:Feb       6 2003 18:03:43&lt;br /&gt;
 CRI SUD/GC  Ver.0.02 Build:Feb       6 2003 14:30:18&lt;br /&gt;
 CRI SFX/GC  Ver.1.22 Build:Feb       6 2003 14:30:16&lt;br /&gt;
 CRI DCT/GC  Ver.1.803 Build:Feb      6 2003 14:28:46&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI MPS/GC  Ver.1.669 Build:Feb      6 2003 14:28:50&lt;br /&gt;
 CRI MPV/GC  Ver.1.840 Build:Feb      6 2003 14:28:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFD/GC  Ver.1.842 Build:Feb      6 2003 14:29:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFH/GC  Ver.1.12 Build:Feb       6 2003 14:30:00&lt;br /&gt;
 MWSFD/GC    Ver.2.62 Build:Feb       6 2003 14:28:42&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI CFT/GC  Ver.1.24 Build:Feb        6 2003 14:28:33&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - OS   release build: Apr 17 2003 12:33:06 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 Dolphin OS Kernel built : Apr 17 2003 12:33:06&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - EXI  release build: Apr 17 2003 12:33:17 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - SI   release build: Apr 17 2003 12:33:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DVD  release build: Apr 22 2003 15:49:00 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - VI   release build: Apr 17 2003 12:33:22 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - PAD  release build: Apr 17 2003 12:33:44 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AI   release build: Apr 17 2003 12:33:54 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AR   release build: Apr 17 2003 12:33:55 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - ARQ  release build: Apr 17 2003 12:33:56 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AX   release build: Apr 17 2003 12:33:57 (0x2301) &amp;gt;&amp;gt; &lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DSP  release build: Apr 17 2003 12:34:16 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 DSPInit(): Build Date: Apr 17 2003 12:34:16&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - CARD release build: Apr 17 2003 12:34:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - GX   release build: Apr 21 2003 14:55:46 (0x2301) &amp;gt;&amp;gt;  &lt;br /&gt;
 sysdolphin_base_library&lt;br /&gt;
 HSD_INIT_HEAP_MAX_NUM    is obsolete since 1.3.0.0.&lt;br /&gt;
 HSD_INIT_AUDIO_HEAP_SIZE is obsolete since 1.3.0.0.&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Strings JAP ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Strings list found in the dol and allowing to find libs / SDK:&lt;br /&gt;
 Metrowerks Target Resident Kernel for PowerPC&lt;br /&gt;
 MetroTRK for GAMECUBE v2.0&lt;br /&gt;
 ADXT/GC Ver.8.57       Build:Feb  6 2003 18:03:46&lt;br /&gt;
 SKG/GC Ver.0.61        Build:Feb  6 2003 18:03:49&lt;br /&gt;
 ADXGC Ver.1.21         Build:Feb  6 2003 18:04:00&lt;br /&gt;
 ADXGCSDK Ver.05Sep2002 Build:Feb  6 2003 18:04:01&lt;br /&gt;
 ADXF/GC Ver.7.01       Build:Feb  6 2003 18:02:45&lt;br /&gt;
 CVFS/GC Ver.2.33       Build:Feb  6 2003 18:02:35&lt;br /&gt;
 GCCI Ver.1.09          Build:Feb  6 2003 18:02:33&lt;br /&gt;
 LSC/GC Ver.2.10        Build:Feb  6 2003 18:02:32&lt;br /&gt;
 SJ/GC Ver.6.10         Build:Feb  6 2003 18:02:53&lt;br /&gt;
 SVM/GC Ver.1.51        Build:Feb  6 2003 18:02:51&lt;br /&gt;
 MFCI/GC Ver.1.04       Build:Feb  6 2003 18:03:11&lt;br /&gt;
 AXRNA Ver.1.02         Build:Feb  6 2003 18:03:43&lt;br /&gt;
 CRI SUD/GC Ver.0.02    Build:Feb  6 2003 14:30:18&lt;br /&gt;
 CRI SFX/GC Ver.1.22    Build:Feb  6 2003 14:30:16&lt;br /&gt;
 CRI DCT/GC Ver.1.803   Build:Feb  6 2003 14:28:46&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI MPS/GC Ver.1.669   Build:Feb  6 2003 14:28:50&lt;br /&gt;
 CRI MPV/GC Ver.1.840   Build:Feb  6 2003 14:28:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFD/GC Ver.1.842   Build:Feb  6 2003 14:29:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFH/GC Ver.1.12    Build:Feb  6 2003 14:30:00&lt;br /&gt;
 MWSFD/GC Ver.2.62      Build:Feb  6 2003 14:28:42&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI CFT/GC Ver.1.24    Build:Feb  6 2003 14:28:33&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - OS   release build: Apr 17 2003 12:33:06 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 Dolphin OS Kernel built : Apr 17 2003 12:33:06&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - EXI  release build: Apr 17 2003 12:33:17 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - SI   release build: Apr 17 2003 12:33:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DVD  release build: Apr 22 2003 15:49:00 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - VI   release build: Apr 17 2003 12:33:22 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - PAD  release build: Apr 17 2003 12:33:44 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AI   release build: Apr 17 2003 12:33:54 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AR   release build: Apr 17 2003 12:33:55 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - ARQ  release build: Apr 17 2003 12:33:56 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AX   release build: Apr 17 2003 12:33:57 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DSP  release build: Apr 17 2003 12:34:16 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - CARD release build: Apr 17 2003 12:34:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - GX   release build: Apr 21 2003 14:55:46 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 sysdolphin_base_library&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:File format]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=DOL_(Gotcha_Force)&amp;diff=1505</id>
		<title>DOL (Gotcha Force)</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=DOL_(Gotcha_Force)&amp;diff=1505"/>
		<updated>2023-10-07T13:03:40Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: /* Strings USA */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This article is about Gotcha Force DOL file format and ongoing researches on it. See [[DOL (File format)]] for DOL file format description.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Research | 3| Research on how functions works and how the dol works is nedded. }}&lt;br /&gt;
&lt;br /&gt;
== Memory map ==&lt;br /&gt;
The dol file is mapped in memory and the free available space remaining is next used to create the Arena containing Heaps. For instance we found Warehouse variables in the EU dol mapped in the interval [80593190:80598044[.&lt;br /&gt;
&lt;br /&gt;
So patching the dol is hard because we have to find unused free space in the memory. The [https://www.gc-forever.com/wiki/index.php?title=Apploader apploader reverse engineering] shows that max dol mapping addresses in memory are:&lt;br /&gt;
* 0x80700000  // production boards&lt;br /&gt;
* 0x81200000  // development boards&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;&lt;br /&gt;
In production we can override MetroTRK memory areas or even override apploader trailer before the bootrom/IPL area. Further investigations have to be done on the [[GCM (File format)|iso/GCM]] sys to see how debug memory is mapped in debug mode (apploader vars used in the apploader).&lt;br /&gt;
* Is it possible to know where exactly MetroTRK is mapped?&lt;br /&gt;
* Is there any other libs/datas unused in dol?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* It&#039;s perfectly possible and tested to patch the apploader trailer and raise the trailer size with [[GCM (File format)|GCM/iso]] patch. It gives us 0x100000 bytes available.&lt;br /&gt;
&lt;br /&gt;
The dol entry_point call the __init_registers procedure which will set the reserved following General Purpose Registers:&lt;br /&gt;
* R1 (stack)&lt;br /&gt;
* R2 (_SDA2_BASE_) - This is the read only _SDA2_.&lt;br /&gt;
* R13 (_SDA_BASE_) - This is the read / write _SDA_.&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;mall &#039;&#039;&#039;D&#039;&#039;&#039;ata &#039;&#039;&#039;A&#039;&#039;&#039;nchors are used with a signed short offset (-0x8000 à +0x7fff).&lt;br /&gt;
* -0x8000(R13) = address of .sdata followed by .sbss&lt;br /&gt;
* -0x8000(R2) = address of .sdata2 followed by .sbss2&lt;br /&gt;
* R1 = often the .sbss2 end address + 0x10000&lt;br /&gt;
&lt;br /&gt;
So often only a part of available SDA negative offsets are used for R2 and R13 using -0x8000 at start.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== USA: ===&lt;br /&gt;
Entry point: 80003154&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
 | Section | Offset   | Address  | Length   | Used  |&lt;br /&gt;
 |---------|----------|----------|----------|-------|&lt;br /&gt;
 | text0   | 00000100 | 80003100 | 000024e0 | True  |&lt;br /&gt;
 | text1   | 000025e0 | 800055e0 | 002aab80 | True  |&lt;br /&gt;
 | text2   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text3   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text4   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text5   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text6   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data7   | 002ad160 | 802b0160 | 00000020 | True  |&lt;br /&gt;
 | data8   | 002ad180 | 802b0180 | 00000020 | True  |&lt;br /&gt;
 | data9   | 002ad1a0 | 802b01a0 | 0000acc0 | True  |&lt;br /&gt;
 | data10  | 002b7e60 | 802bae60 | 000f42c0 | True  |&lt;br /&gt;
 | data11  | 003ac120 | 804335a0 | 00002b20 | True  |&lt;br /&gt;
 | data12  | 003aec40 | 80436a20 | 00006ae0 | True  |&lt;br /&gt;
 | data13  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data14  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data15  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data16  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data17  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
* bss: address:803af140 length:0008e3e8&lt;br /&gt;
* R1 = 8044d528&lt;br /&gt;
* R2 = 8043ea20&lt;br /&gt;
* R13 = 8043b5a0&lt;br /&gt;
&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
 | Section     | beg_addr | end_addr | length   |&lt;br /&gt;
 |-------------|----------|----------|----------|&lt;br /&gt;
 | system      | 80000000 | 80003100 | 00003100 |&lt;br /&gt;
 | .text0      | 80003100 | 800055e0 | 000024e0 |&lt;br /&gt;
 | .text1      | 800055e0 | 802b0160 | 002aab80 |&lt;br /&gt;
 | .ctors      | 802b0160 | 802b0180 | 00000020 |&lt;br /&gt;
 | .dtors      | 802b0180 | 802b01a0 | 00000020 |&lt;br /&gt;
 | .rodata     | 802b01a0 | 802bae60 | 0000acc0 |&lt;br /&gt;
 | .data       | 802bae60 | 803af120 | 000f42c0 |&lt;br /&gt;
 | empty       | 803af120 | 803af140 | 00000020 |&lt;br /&gt;
 | .bss        | 803af140 | 804335a0 | 00084460 |&lt;br /&gt;
 | .sdata      | 804335a0 | 804360c0 | 00002b20 |&lt;br /&gt;
 | .sbss       | 804360c0 | 80436a20 | 00000960 |&lt;br /&gt;
 | .sdata2     | 80436a20 | 8043d500 | 00006ae0 |&lt;br /&gt;
 | .sbss2      | 8043d500 | 8043d528 | 00000028 |&lt;br /&gt;
 | stack       | 8043d528 | 8044d528 | 00010000 |&lt;br /&gt;
 | empty       | 8044d528 | 8044d540 | 00000018 |&lt;br /&gt;
 | ArenaLo     | 8044d540 |          |          |&lt;br /&gt;
 | apploader   | 81200000 |        ? |        ? |&lt;br /&gt;
 | Bootrom/IPL | 81300000 |        ? |        ? |&lt;br /&gt;
 | ArenaHi     |          | 817fffa0 |          |&lt;br /&gt;
 | FST         | 817fffa0 | 81800000 | 00500000 |&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== EU: ===&lt;br /&gt;
Entry point: 80003154&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
 | Section | Offset   | Address  | Length   | Used  |&lt;br /&gt;
 |---------|----------|----------|----------|-------|&lt;br /&gt;
 | text0   | 00000100 | 80003100 | 000024e0 | True  |&lt;br /&gt;
 | text1   | 000025e0 | 800055e0 | 002ac800 | True  |&lt;br /&gt;
 | text2   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text3   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text4   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text5   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text6   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data7   | 002aede0 | 802b1de0 | 00000020 | True  |&lt;br /&gt;
 | data8   | 002aee00 | 802b1e00 | 00000020 | True  |&lt;br /&gt;
 | data9   | 002aee20 | 802b1e20 | 0000f060 | True  |&lt;br /&gt;
 | data10  | 002bde80 | 802c0e80 | 000f5d40 | True  |&lt;br /&gt;
 | data11  | 003b3bc0 | 8043cbe0 | 00002b20 | True  |&lt;br /&gt;
 | data12  | 003b66e0 | 80440080 | 00006d20 | True  |&lt;br /&gt;
 | data13  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data14  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data15  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data16  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data17  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
* bss: address:803b6bc0 length:00090208&lt;br /&gt;
* R1 = 80456dc8&lt;br /&gt;
* R2 = 80448080&lt;br /&gt;
* R13 = 80444be0&lt;br /&gt;
&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
 | Section     | beg_addr | end_addr | length   |&lt;br /&gt;
 |-------------|----------|----------|----------|&lt;br /&gt;
 | system      | 80000000 | 80003100 | 00003100 |&lt;br /&gt;
 | .text0      | 80003100 | 800055e0 | 000024e0 |&lt;br /&gt;
 | .text1      | 800055e0 | 802b1de0 | 002ac800 |&lt;br /&gt;
 | .ctors      | 802b1de0 | 802b1e00 | 00000020 |&lt;br /&gt;
 | .dtors      | 802b1e00 | 802b1e20 | 00000020 |&lt;br /&gt;
 | .rodata     | 802b1e20 | 802c0e80 | 0000f060 |&lt;br /&gt;
 | .data       | 802c0e80 | 803b6bc0 | 000f5d40 |&lt;br /&gt;
 | .bss        | 803b6bc0 | 8043cbe0 | 00086020 |&lt;br /&gt;
 | .sdata      | 8043cbe0 | 8043f700 | 00002b20 |&lt;br /&gt;
 | .sbss       | 8043f700 | 80440080 | 00000980 |&lt;br /&gt;
 | .sdata2     | 80440080 | 80446da0 | 00006d20 |&lt;br /&gt;
 | .sbss2      | 80446da0 | 80446dc8 | 00000028 |&lt;br /&gt;
 | stack       | 80446dc8 | 80456dc8 | 00010000 |&lt;br /&gt;
 | empty       | 80456dc8 | 80456de0 | 00000018 |&lt;br /&gt;
 | ArenaLo     | 80456de0 |          |          |&lt;br /&gt;
 | apploader   | 81200000 |        ? |        ? |&lt;br /&gt;
 | Bootrom/IPL | 81300000 |        ? |        ? |&lt;br /&gt;
 | ArenaHi     |          | 817fff40 |          |&lt;br /&gt;
 | FST         | 817fff40 | 81800000 | 000000C0 |&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
80593A00 -&amp;gt; 80598040 Wharehouse&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== JAP: ===&lt;br /&gt;
Entry point: 80003154&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
 | Section | Offset   | Address  | Length   | Used  |&lt;br /&gt;
 |---------|----------|----------|----------|-------|&lt;br /&gt;
 | text0   | 00000100 | 80003100 | 000024e0 | True  |&lt;br /&gt;
 | text1   | 000025e0 | 800055e0 | 002aab20 | True  |&lt;br /&gt;
 | text2   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text3   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text4   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text5   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text6   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data7   | 002ad100 | 802b0100 | 00000020 | True  |&lt;br /&gt;
 | data8   | 002ad120 | 802b0120 | 00000020 | True  |&lt;br /&gt;
 | data9   | 002ad140 | 802b0140 | 0000a2e0 | True  |&lt;br /&gt;
 | data10  | 002b7420 | 802ba420 | 000f3e60 | True  |&lt;br /&gt;
 | data11  | 003ab280 | 804326e0 | 00002b00 | True  |&lt;br /&gt;
 | data12  | 003add80 | 80435b40 | 00006b60 | True  |&lt;br /&gt;
 | data13  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data14  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data15  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data16  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data17  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
* bss: address:803ae280 length:0008e448&lt;br /&gt;
* R1 = 8044c6c8&lt;br /&gt;
* R2 = 8043db40&lt;br /&gt;
* R13 = 8043a6e0 &lt;br /&gt;
&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
 | Section     | beg_addr | end_addr | length   |&lt;br /&gt;
 |-------------|----------|----------|----------|&lt;br /&gt;
 | system      | 80000000 | 80003100 | 00003100 |&lt;br /&gt;
 | .text0      | 80003100 | 800055e0 | 000024e0 |&lt;br /&gt;
 | .text1      | 800055e0 | 802b0100 | 002aab20 |&lt;br /&gt;
 | .ctors      | 802b0100 | 802b0120 | 00000020 |&lt;br /&gt;
 | .dtors      | 802b0120 | 802b0140 | 00000020 |&lt;br /&gt;
 | .rodata     | 802b0140 | 802ba420 | 0000a2e0 |&lt;br /&gt;
 | .data       | 802ba420 | 803ae280 | 000f3e60 |&lt;br /&gt;
 | .bss        | 803ae280 | 804326e0 | 00084460 |&lt;br /&gt;
 | .sdata      | 804326e0 | 804351e0 | 00002b00 |&lt;br /&gt;
 | .sbss       | 804351e0 | 80435b40 | 00000960 |&lt;br /&gt;
 | .sdata2     | 80435b40 | 8043c6a0 | 00006b60 |&lt;br /&gt;
 | .sbss2      | 8043c6a0 | 8043c6c8 | 00000028 |&lt;br /&gt;
 | stack       | 8043c6c8 | 8044c6c8 | 00010000 |&lt;br /&gt;
 | empty       | 8044c6c8 | 8044c6e0 | 00000018 |&lt;br /&gt;
 | ArenaLo     | 8044c6e0 |          |          |&lt;br /&gt;
 | apploader   | 81200000 |        ? |        ? |&lt;br /&gt;
 | Bootrom/IPL | 81300000 |        ? |        ? |&lt;br /&gt;
 | ArenaHi     |          | 817fffa0 |          |&lt;br /&gt;
 | FST         | 817fffa0 | 81800000 | 00000060 |&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Symbol map ==&lt;br /&gt;
The symbol map allows to put names on procedures and data. It can be loaded into dolphin emulator in debug mode with the .map file format.&lt;br /&gt;
&lt;br /&gt;
Symbol map USA: https://github.com/Virtual-World-RE/NeoGF/blob/main/data/GG4E-CSM-20220412.map&lt;br /&gt;
&lt;br /&gt;
== MetroTRK ==&lt;br /&gt;
&lt;br /&gt;
MetroTRK can be activated by patching the bi2.bin DebugFlag and also by patching the following addresses to start the debugger in BBA (&#039;&#039;&#039;B&#039;&#039;&#039;road&#039;&#039;&#039;B&#039;&#039;&#039;and &#039;&#039;&#039;A&#039;&#039;&#039;dapter?) mode:&lt;br /&gt;
* USA: Put a breakpoint at 80003190 then set r3 to 1&lt;br /&gt;
* EU:  Put a breakpoint at 800031C0 then set r7 to 4&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;&lt;br /&gt;
The [https://www.gc-forever.com/wiki/index.php?title=Apploader apploader reverse engineering] shows that there are debug vars in [[GCM (File format)|GCM/iso]] system files. [https://github.com/Virtual-World-RE/NeoGF/tree/main/gcmtool gcmtool.py] allow to patch them.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SDK &amp;amp; libs ==&lt;br /&gt;
All libs and SDK are staticly linked inside the dol.&lt;br /&gt;
&lt;br /&gt;
We found these libs and SDK:&lt;br /&gt;
* GCN SDK - Base dolphin SDK.&lt;br /&gt;
* Sysdolphin base library: Hal SysDolphin (HSD) Graphic and physic engine - https://github.com/doldecomp/melee/tree/master/src/sysdolphin/baselib&lt;br /&gt;
* MetroTRK: Target Resident Debugging Kernel for embedded systems. It&#039;s an embedded Kernel for debug.&lt;br /&gt;
* Metrowerks CW Runtime library: CodeWarrior: Metrowerks Standard Library and C/C++ Runtime&lt;br /&gt;
* And from ADXT/GC to CRI CFT/GC: It seems to be audio and video codecs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== H and C files ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
All 3 iso contain followings .h and .c symbols in the .data, .rodata, .sdata and .sdata2. The EU version contains also the symbol &amp;quot;objalloc.h&amp;quot;.&lt;br /&gt;
 aobj.h&lt;br /&gt;
 cobj.h&lt;br /&gt;
 jobj.h&lt;br /&gt;
 lobj.h&lt;br /&gt;
 object.h&lt;br /&gt;
 &lt;br /&gt;
 GCN_Mem_Alloc.c&lt;br /&gt;
 aobj.c&lt;br /&gt;
 bytecode.c&lt;br /&gt;
 class.c&lt;br /&gt;
 cobj.c&lt;br /&gt;
 displayfunc.c&lt;br /&gt;
 dobj.c&lt;br /&gt;
 dvd.c&lt;br /&gt;
 dvdfs.c&lt;br /&gt;
 fobj.c&lt;br /&gt;
 fog.c&lt;br /&gt;
 hash.c&lt;br /&gt;
 id.c&lt;br /&gt;
 initialize.c&lt;br /&gt;
 jobj.c&lt;br /&gt;
 list.c&lt;br /&gt;
 lobj.c&lt;br /&gt;
 memory.c&lt;br /&gt;
 mobj.c&lt;br /&gt;
 mtx.c&lt;br /&gt;
 objalloc.c&lt;br /&gt;
 perf.c&lt;br /&gt;
 pobj.c&lt;br /&gt;
 robj.c&lt;br /&gt;
 tev.c&lt;br /&gt;
 texp.c&lt;br /&gt;
 texpdag.c&lt;br /&gt;
 tobj.c&lt;br /&gt;
 tpl.c&lt;br /&gt;
 util.c&lt;br /&gt;
 vi.c&lt;br /&gt;
 video.c&lt;br /&gt;
 wobj.c&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== Strings USA ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
String list found in the dol and allowing to find libs / SDK:&lt;br /&gt;
 MetroTRK for GAMECUBE v2.0&lt;br /&gt;
 Metrowerks CW runtime library&lt;br /&gt;
 ADXT/GC Ver.8.57       Build:Feb 6 2003 18:03:46&lt;br /&gt;
 SKG/GC Ver.0.61        Build:Feb 6 2003 18:03:49&lt;br /&gt;
 ADXGC Ver.1.21         Build:Feb 6 2003 18:04:00&lt;br /&gt;
 ADXGCSDK Ver.05Sep2002 Build:Feb 6 2003 18:04:01&lt;br /&gt;
 ADXF/GC Ver.7.01       Build:Feb 6 2003 18:02:45&lt;br /&gt;
 CVFS/GC Ver.2.33       Build:Feb 6 2003 18:02:35&lt;br /&gt;
 GCCI Ver.1.09          Build:Feb 6 2003 18:02:33&lt;br /&gt;
 LSC/GC Ver.2.10        Build:Feb 6 2003 18:02:32&lt;br /&gt;
 SJ/GC Ver.6.10         Build:Feb 6 2003 18:02:53&lt;br /&gt;
 SVM/GC Ver.1.51        Build:Feb 6 2003 18:02:51&lt;br /&gt;
 MFCI/GC Ver.1.04       Build:Feb 6 2003 18:03:11&lt;br /&gt;
 AXRNA Ver.1.02         Build:Feb 6 2003 18:03:43&lt;br /&gt;
 CRI SUD/GC Ver.0.02    Build:Feb 6 2003 14:30:18&lt;br /&gt;
 CRI SFX/GC Ver.1.22    Build:Feb 6 2003 14:30:16&lt;br /&gt;
 CRI DCT/GC Ver.1.803   Build:Feb 6 2003 14:28:46&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI MPS/GC Ver.1.669   Build:Feb 6 2003 14:28:50&lt;br /&gt;
 CRI MPV/GC Ver.1.840   Build:Feb 6 2003 14:28:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFD/GC Ver.1.842   Build:Feb 6 2003 14:29:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFH/GC Ver.1.12    Build:Feb 6 2003 14:30:00&lt;br /&gt;
 MWSFD/GC Ver.2.62      Build:Feb 6 2003 14:28:42&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI CFT/GC Ver.1.24    Build:Feb 6 2003 14:28:33&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK – OS   release build: Apr 17 2003 12:33:06 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 Dolphin OS Kernel built : %s %s Apr 17 2003 12:33:06&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK – EXI  release build: Apr 17 2003 12:33:17 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - SI   release build: Apr 17 2003 12:33:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DVD  release build: Apr 22 2003 15:49:00 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - VI   release build: Apr 17 2003 12:33:22 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - PAD  release build: Apr 17 2003 12:33:44 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AI   release build: Apr 17 2003 12:33:54 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AR   release build: Apr 17 2003 12:33:55 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - ARQ  release build: Apr 17 2003 12:33:56 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AX   release build: Apr 17 2003 12:33:57 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DSP  release build: Apr 17 2003 12:34:16 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - CARD release build: Apr 17 2003 12:34:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - GX   release build: Apr 21 2003 14:55:46 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 sysdolphin_base_library&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Strings EU ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Strings list found in the dol and allowing to find libs / SDK:&lt;br /&gt;
 Metrowerks Target Resident Kernel for PowerPC&lt;br /&gt;
 MetroTRK for GAMECUBE v2.0&lt;br /&gt;
 Metrowerks CW runtime library initializing default heap&lt;br /&gt;
 ADXT/GC     Ver.8.57 Build:Feb       6 2003 18:03:46&lt;br /&gt;
 SKG/GC      Ver.0.61 Build:Feb       6 2003 18:03:49&lt;br /&gt;
 ADXGC       Ver.1.21 Build:Feb       6 2003 18:04:00&lt;br /&gt;
 ADXGCSDK    Ver.05Sep2002 Build:Feb  6 2003 18:04:01&lt;br /&gt;
 ADXF/GC     Ver.7.01 Build:Feb       6 2003 18:02:45&lt;br /&gt;
 CVFS/GC     Ver.2.33 Build:Feb       6 2003 18:02:35&lt;br /&gt;
 GCCI        Ver.1.09 Build:Feb       6 2003 18:02:33&lt;br /&gt;
 LSC/GC      Ver.2.10 Build:Feb       6 2003 18:02:32&lt;br /&gt;
 SJ/GC       Ver.6.10 Build:Feb       6 2003 18:02:53&lt;br /&gt;
 SVM/GC      Ver.1.51 Build:Feb       6 2003 18:02:51&lt;br /&gt;
 MFCI/GC     Ver.1.04 Build:Feb       6 2003 18:03:11&lt;br /&gt;
 AXRNA       Ver.1.02 Build:Feb       6 2003 18:03:43&lt;br /&gt;
 CRI SUD/GC  Ver.0.02 Build:Feb       6 2003 14:30:18&lt;br /&gt;
 CRI SFX/GC  Ver.1.22 Build:Feb       6 2003 14:30:16&lt;br /&gt;
 CRI DCT/GC  Ver.1.803 Build:Feb      6 2003 14:28:46&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI MPS/GC  Ver.1.669 Build:Feb      6 2003 14:28:50&lt;br /&gt;
 CRI MPV/GC  Ver.1.840 Build:Feb      6 2003 14:28:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFD/GC  Ver.1.842 Build:Feb      6 2003 14:29:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFH/GC  Ver.1.12 Build:Feb       6 2003 14:30:00&lt;br /&gt;
 MWSFD/GC    Ver.2.62 Build:Feb       6 2003 14:28:42&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI CFT/GC  Ver.1.24 Build:Feb        6 2003 14:28:33&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - OS   release build: Apr 17 2003 12:33:06 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 Dolphin OS Kernel built : Apr 17 2003 12:33:06&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - EXI  release build: Apr 17 2003 12:33:17 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - SI   release build: Apr 17 2003 12:33:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DVD  release build: Apr 22 2003 15:49:00 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - VI   release build: Apr 17 2003 12:33:22 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - PAD  release build: Apr 17 2003 12:33:44 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AI   release build: Apr 17 2003 12:33:54 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AR   release build: Apr 17 2003 12:33:55 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - ARQ  release build: Apr 17 2003 12:33:56 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AX   release build: Apr 17 2003 12:33:57 (0x2301) &amp;gt;&amp;gt; &lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DSP  release build: Apr 17 2003 12:34:16 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 DSPInit(): Build Date: Apr 17 2003 12:34:16&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - CARD release build: Apr 17 2003 12:34:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - GX   release build: Apr 21 2003 14:55:46 (0x2301) &amp;gt;&amp;gt;  &lt;br /&gt;
 sysdolphin_base_library&lt;br /&gt;
 HSD_INIT_HEAP_MAX_NUM    is obsolete since 1.3.0.0.&lt;br /&gt;
 HSD_INIT_AUDIO_HEAP_SIZE is obsolete since 1.3.0.0.&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== Strings JAP ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Strings list found in the dol and allowing to find libs / SDK:&lt;br /&gt;
 Metrowerks Target Resident Kernel for PowerPC&lt;br /&gt;
 MetroTRK for GAMECUBE v2.0&lt;br /&gt;
 ADXT/GC Ver.8.57       Build:Feb  6 2003 18:03:46&lt;br /&gt;
 SKG/GC Ver.0.61        Build:Feb  6 2003 18:03:49&lt;br /&gt;
 ADXGC Ver.1.21         Build:Feb  6 2003 18:04:00&lt;br /&gt;
 ADXGCSDK Ver.05Sep2002 Build:Feb  6 2003 18:04:01&lt;br /&gt;
 ADXF/GC Ver.7.01       Build:Feb  6 2003 18:02:45&lt;br /&gt;
 CVFS/GC Ver.2.33       Build:Feb  6 2003 18:02:35&lt;br /&gt;
 GCCI Ver.1.09          Build:Feb  6 2003 18:02:33&lt;br /&gt;
 LSC/GC Ver.2.10        Build:Feb  6 2003 18:02:32&lt;br /&gt;
 SJ/GC Ver.6.10         Build:Feb  6 2003 18:02:53&lt;br /&gt;
 SVM/GC Ver.1.51        Build:Feb  6 2003 18:02:51&lt;br /&gt;
 MFCI/GC Ver.1.04       Build:Feb  6 2003 18:03:11&lt;br /&gt;
 AXRNA Ver.1.02         Build:Feb  6 2003 18:03:43&lt;br /&gt;
 CRI SUD/GC Ver.0.02    Build:Feb  6 2003 14:30:18&lt;br /&gt;
 CRI SFX/GC Ver.1.22    Build:Feb  6 2003 14:30:16&lt;br /&gt;
 CRI DCT/GC Ver.1.803   Build:Feb  6 2003 14:28:46&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI MPS/GC Ver.1.669   Build:Feb  6 2003 14:28:50&lt;br /&gt;
 CRI MPV/GC Ver.1.840   Build:Feb  6 2003 14:28:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFD/GC Ver.1.842   Build:Feb  6 2003 14:29:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFH/GC Ver.1.12    Build:Feb  6 2003 14:30:00&lt;br /&gt;
 MWSFD/GC Ver.2.62      Build:Feb  6 2003 14:28:42&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI CFT/GC Ver.1.24    Build:Feb  6 2003 14:28:33&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - OS   release build: Apr 17 2003 12:33:06 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 Dolphin OS Kernel built : Apr 17 2003 12:33:06&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - EXI  release build: Apr 17 2003 12:33:17 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - SI   release build: Apr 17 2003 12:33:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DVD  release build: Apr 22 2003 15:49:00 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - VI   release build: Apr 17 2003 12:33:22 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - PAD  release build: Apr 17 2003 12:33:44 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AI   release build: Apr 17 2003 12:33:54 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AR   release build: Apr 17 2003 12:33:55 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - ARQ  release build: Apr 17 2003 12:33:56 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AX   release build: Apr 17 2003 12:33:57 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DSP  release build: Apr 17 2003 12:34:16 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - CARD release build: Apr 17 2003 12:34:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - GX   release build: Apr 21 2003 14:55:46 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 sysdolphin_base_library&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:File format]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=DOL_(Gotcha_Force)&amp;diff=1504</id>
		<title>DOL (Gotcha Force)</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=DOL_(Gotcha_Force)&amp;diff=1504"/>
		<updated>2023-10-07T13:02:59Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: /* SDK &amp;amp; libs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This article is about Gotcha Force DOL file format and ongoing researches on it. See [[DOL (File format)]] for DOL file format description.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Research | 3| Research on how functions works and how the dol works is nedded. }}&lt;br /&gt;
&lt;br /&gt;
== Memory map ==&lt;br /&gt;
The dol file is mapped in memory and the free available space remaining is next used to create the Arena containing Heaps. For instance we found Warehouse variables in the EU dol mapped in the interval [80593190:80598044[.&lt;br /&gt;
&lt;br /&gt;
So patching the dol is hard because we have to find unused free space in the memory. The [https://www.gc-forever.com/wiki/index.php?title=Apploader apploader reverse engineering] shows that max dol mapping addresses in memory are:&lt;br /&gt;
* 0x80700000  // production boards&lt;br /&gt;
* 0x81200000  // development boards&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;&lt;br /&gt;
In production we can override MetroTRK memory areas or even override apploader trailer before the bootrom/IPL area. Further investigations have to be done on the [[GCM (File format)|iso/GCM]] sys to see how debug memory is mapped in debug mode (apploader vars used in the apploader).&lt;br /&gt;
* Is it possible to know where exactly MetroTRK is mapped?&lt;br /&gt;
* Is there any other libs/datas unused in dol?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* It&#039;s perfectly possible and tested to patch the apploader trailer and raise the trailer size with [[GCM (File format)|GCM/iso]] patch. It gives us 0x100000 bytes available.&lt;br /&gt;
&lt;br /&gt;
The dol entry_point call the __init_registers procedure which will set the reserved following General Purpose Registers:&lt;br /&gt;
* R1 (stack)&lt;br /&gt;
* R2 (_SDA2_BASE_) - This is the read only _SDA2_.&lt;br /&gt;
* R13 (_SDA_BASE_) - This is the read / write _SDA_.&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;mall &#039;&#039;&#039;D&#039;&#039;&#039;ata &#039;&#039;&#039;A&#039;&#039;&#039;nchors are used with a signed short offset (-0x8000 à +0x7fff).&lt;br /&gt;
* -0x8000(R13) = address of .sdata followed by .sbss&lt;br /&gt;
* -0x8000(R2) = address of .sdata2 followed by .sbss2&lt;br /&gt;
* R1 = often the .sbss2 end address + 0x10000&lt;br /&gt;
&lt;br /&gt;
So often only a part of available SDA negative offsets are used for R2 and R13 using -0x8000 at start.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== USA: ===&lt;br /&gt;
Entry point: 80003154&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
 | Section | Offset   | Address  | Length   | Used  |&lt;br /&gt;
 |---------|----------|----------|----------|-------|&lt;br /&gt;
 | text0   | 00000100 | 80003100 | 000024e0 | True  |&lt;br /&gt;
 | text1   | 000025e0 | 800055e0 | 002aab80 | True  |&lt;br /&gt;
 | text2   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text3   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text4   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text5   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text6   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data7   | 002ad160 | 802b0160 | 00000020 | True  |&lt;br /&gt;
 | data8   | 002ad180 | 802b0180 | 00000020 | True  |&lt;br /&gt;
 | data9   | 002ad1a0 | 802b01a0 | 0000acc0 | True  |&lt;br /&gt;
 | data10  | 002b7e60 | 802bae60 | 000f42c0 | True  |&lt;br /&gt;
 | data11  | 003ac120 | 804335a0 | 00002b20 | True  |&lt;br /&gt;
 | data12  | 003aec40 | 80436a20 | 00006ae0 | True  |&lt;br /&gt;
 | data13  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data14  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data15  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data16  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data17  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
* bss: address:803af140 length:0008e3e8&lt;br /&gt;
* R1 = 8044d528&lt;br /&gt;
* R2 = 8043ea20&lt;br /&gt;
* R13 = 8043b5a0&lt;br /&gt;
&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
 | Section     | beg_addr | end_addr | length   |&lt;br /&gt;
 |-------------|----------|----------|----------|&lt;br /&gt;
 | system      | 80000000 | 80003100 | 00003100 |&lt;br /&gt;
 | .text0      | 80003100 | 800055e0 | 000024e0 |&lt;br /&gt;
 | .text1      | 800055e0 | 802b0160 | 002aab80 |&lt;br /&gt;
 | .ctors      | 802b0160 | 802b0180 | 00000020 |&lt;br /&gt;
 | .dtors      | 802b0180 | 802b01a0 | 00000020 |&lt;br /&gt;
 | .rodata     | 802b01a0 | 802bae60 | 0000acc0 |&lt;br /&gt;
 | .data       | 802bae60 | 803af120 | 000f42c0 |&lt;br /&gt;
 | empty       | 803af120 | 803af140 | 00000020 |&lt;br /&gt;
 | .bss        | 803af140 | 804335a0 | 00084460 |&lt;br /&gt;
 | .sdata      | 804335a0 | 804360c0 | 00002b20 |&lt;br /&gt;
 | .sbss       | 804360c0 | 80436a20 | 00000960 |&lt;br /&gt;
 | .sdata2     | 80436a20 | 8043d500 | 00006ae0 |&lt;br /&gt;
 | .sbss2      | 8043d500 | 8043d528 | 00000028 |&lt;br /&gt;
 | stack       | 8043d528 | 8044d528 | 00010000 |&lt;br /&gt;
 | empty       | 8044d528 | 8044d540 | 00000018 |&lt;br /&gt;
 | ArenaLo     | 8044d540 |          |          |&lt;br /&gt;
 | apploader   | 81200000 |        ? |        ? |&lt;br /&gt;
 | Bootrom/IPL | 81300000 |        ? |        ? |&lt;br /&gt;
 | ArenaHi     |          | 817fffa0 |          |&lt;br /&gt;
 | FST         | 817fffa0 | 81800000 | 00500000 |&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== EU: ===&lt;br /&gt;
Entry point: 80003154&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
 | Section | Offset   | Address  | Length   | Used  |&lt;br /&gt;
 |---------|----------|----------|----------|-------|&lt;br /&gt;
 | text0   | 00000100 | 80003100 | 000024e0 | True  |&lt;br /&gt;
 | text1   | 000025e0 | 800055e0 | 002ac800 | True  |&lt;br /&gt;
 | text2   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text3   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text4   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text5   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text6   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data7   | 002aede0 | 802b1de0 | 00000020 | True  |&lt;br /&gt;
 | data8   | 002aee00 | 802b1e00 | 00000020 | True  |&lt;br /&gt;
 | data9   | 002aee20 | 802b1e20 | 0000f060 | True  |&lt;br /&gt;
 | data10  | 002bde80 | 802c0e80 | 000f5d40 | True  |&lt;br /&gt;
 | data11  | 003b3bc0 | 8043cbe0 | 00002b20 | True  |&lt;br /&gt;
 | data12  | 003b66e0 | 80440080 | 00006d20 | True  |&lt;br /&gt;
 | data13  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data14  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data15  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data16  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data17  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
* bss: address:803b6bc0 length:00090208&lt;br /&gt;
* R1 = 80456dc8&lt;br /&gt;
* R2 = 80448080&lt;br /&gt;
* R13 = 80444be0&lt;br /&gt;
&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
 | Section     | beg_addr | end_addr | length   |&lt;br /&gt;
 |-------------|----------|----------|----------|&lt;br /&gt;
 | system      | 80000000 | 80003100 | 00003100 |&lt;br /&gt;
 | .text0      | 80003100 | 800055e0 | 000024e0 |&lt;br /&gt;
 | .text1      | 800055e0 | 802b1de0 | 002ac800 |&lt;br /&gt;
 | .ctors      | 802b1de0 | 802b1e00 | 00000020 |&lt;br /&gt;
 | .dtors      | 802b1e00 | 802b1e20 | 00000020 |&lt;br /&gt;
 | .rodata     | 802b1e20 | 802c0e80 | 0000f060 |&lt;br /&gt;
 | .data       | 802c0e80 | 803b6bc0 | 000f5d40 |&lt;br /&gt;
 | .bss        | 803b6bc0 | 8043cbe0 | 00086020 |&lt;br /&gt;
 | .sdata      | 8043cbe0 | 8043f700 | 00002b20 |&lt;br /&gt;
 | .sbss       | 8043f700 | 80440080 | 00000980 |&lt;br /&gt;
 | .sdata2     | 80440080 | 80446da0 | 00006d20 |&lt;br /&gt;
 | .sbss2      | 80446da0 | 80446dc8 | 00000028 |&lt;br /&gt;
 | stack       | 80446dc8 | 80456dc8 | 00010000 |&lt;br /&gt;
 | empty       | 80456dc8 | 80456de0 | 00000018 |&lt;br /&gt;
 | ArenaLo     | 80456de0 |          |          |&lt;br /&gt;
 | apploader   | 81200000 |        ? |        ? |&lt;br /&gt;
 | Bootrom/IPL | 81300000 |        ? |        ? |&lt;br /&gt;
 | ArenaHi     |          | 817fff40 |          |&lt;br /&gt;
 | FST         | 817fff40 | 81800000 | 000000C0 |&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
80593A00 -&amp;gt; 80598040 Wharehouse&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== JAP: ===&lt;br /&gt;
Entry point: 80003154&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
 | Section | Offset   | Address  | Length   | Used  |&lt;br /&gt;
 |---------|----------|----------|----------|-------|&lt;br /&gt;
 | text0   | 00000100 | 80003100 | 000024e0 | True  |&lt;br /&gt;
 | text1   | 000025e0 | 800055e0 | 002aab20 | True  |&lt;br /&gt;
 | text2   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text3   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text4   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text5   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text6   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data7   | 002ad100 | 802b0100 | 00000020 | True  |&lt;br /&gt;
 | data8   | 002ad120 | 802b0120 | 00000020 | True  |&lt;br /&gt;
 | data9   | 002ad140 | 802b0140 | 0000a2e0 | True  |&lt;br /&gt;
 | data10  | 002b7420 | 802ba420 | 000f3e60 | True  |&lt;br /&gt;
 | data11  | 003ab280 | 804326e0 | 00002b00 | True  |&lt;br /&gt;
 | data12  | 003add80 | 80435b40 | 00006b60 | True  |&lt;br /&gt;
 | data13  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data14  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data15  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data16  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data17  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
* bss: address:803ae280 length:0008e448&lt;br /&gt;
* R1 = 8044c6c8&lt;br /&gt;
* R2 = 8043db40&lt;br /&gt;
* R13 = 8043a6e0 &lt;br /&gt;
&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
 | Section     | beg_addr | end_addr | length   |&lt;br /&gt;
 |-------------|----------|----------|----------|&lt;br /&gt;
 | system      | 80000000 | 80003100 | 00003100 |&lt;br /&gt;
 | .text0      | 80003100 | 800055e0 | 000024e0 |&lt;br /&gt;
 | .text1      | 800055e0 | 802b0100 | 002aab20 |&lt;br /&gt;
 | .ctors      | 802b0100 | 802b0120 | 00000020 |&lt;br /&gt;
 | .dtors      | 802b0120 | 802b0140 | 00000020 |&lt;br /&gt;
 | .rodata     | 802b0140 | 802ba420 | 0000a2e0 |&lt;br /&gt;
 | .data       | 802ba420 | 803ae280 | 000f3e60 |&lt;br /&gt;
 | .bss        | 803ae280 | 804326e0 | 00084460 |&lt;br /&gt;
 | .sdata      | 804326e0 | 804351e0 | 00002b00 |&lt;br /&gt;
 | .sbss       | 804351e0 | 80435b40 | 00000960 |&lt;br /&gt;
 | .sdata2     | 80435b40 | 8043c6a0 | 00006b60 |&lt;br /&gt;
 | .sbss2      | 8043c6a0 | 8043c6c8 | 00000028 |&lt;br /&gt;
 | stack       | 8043c6c8 | 8044c6c8 | 00010000 |&lt;br /&gt;
 | empty       | 8044c6c8 | 8044c6e0 | 00000018 |&lt;br /&gt;
 | ArenaLo     | 8044c6e0 |          |          |&lt;br /&gt;
 | apploader   | 81200000 |        ? |        ? |&lt;br /&gt;
 | Bootrom/IPL | 81300000 |        ? |        ? |&lt;br /&gt;
 | ArenaHi     |          | 817fffa0 |          |&lt;br /&gt;
 | FST         | 817fffa0 | 81800000 | 00000060 |&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Symbol map ==&lt;br /&gt;
The symbol map allows to put names on procedures and data. It can be loaded into dolphin emulator in debug mode with the .map file format.&lt;br /&gt;
&lt;br /&gt;
Symbol map USA: https://github.com/Virtual-World-RE/NeoGF/blob/main/data/GG4E-CSM-20220412.map&lt;br /&gt;
&lt;br /&gt;
== MetroTRK ==&lt;br /&gt;
&lt;br /&gt;
MetroTRK can be activated by patching the bi2.bin DebugFlag and also by patching the following addresses to start the debugger in BBA (&#039;&#039;&#039;B&#039;&#039;&#039;road&#039;&#039;&#039;B&#039;&#039;&#039;and &#039;&#039;&#039;A&#039;&#039;&#039;dapter?) mode:&lt;br /&gt;
* USA: Put a breakpoint at 80003190 then set r3 to 1&lt;br /&gt;
* EU:  Put a breakpoint at 800031C0 then set r7 to 4&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;&lt;br /&gt;
The [https://www.gc-forever.com/wiki/index.php?title=Apploader apploader reverse engineering] shows that there are debug vars in [[GCM (File format)|GCM/iso]] system files. [https://github.com/Virtual-World-RE/NeoGF/tree/main/gcmtool gcmtool.py] allow to patch them.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SDK &amp;amp; libs ==&lt;br /&gt;
All libs and SDK are staticly linked inside the dol.&lt;br /&gt;
&lt;br /&gt;
We found these libs and SDK:&lt;br /&gt;
* GCN SDK - Base dolphin SDK.&lt;br /&gt;
* Sysdolphin base library: Hal SysDolphin (HSD) Graphic and physic engine - https://github.com/doldecomp/melee/tree/master/src/sysdolphin/baselib&lt;br /&gt;
* MetroTRK: Target Resident Debugging Kernel for embedded systems. It&#039;s an embedded Kernel for debug.&lt;br /&gt;
* Metrowerks CW Runtime library: CodeWarrior: Metrowerks Standard Library and C/C++ Runtime&lt;br /&gt;
* And from ADXT/GC to CRI CFT/GC: It seems to be audio and video codecs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== H and C files ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
All 3 iso contain followings .h and .c symbols in the .data, .rodata, .sdata and .sdata2. The EU version contains also the symbol &amp;quot;objalloc.h&amp;quot;.&lt;br /&gt;
 aobj.h&lt;br /&gt;
 cobj.h&lt;br /&gt;
 jobj.h&lt;br /&gt;
 lobj.h&lt;br /&gt;
 object.h&lt;br /&gt;
 &lt;br /&gt;
 GCN_Mem_Alloc.c&lt;br /&gt;
 aobj.c&lt;br /&gt;
 bytecode.c&lt;br /&gt;
 class.c&lt;br /&gt;
 cobj.c&lt;br /&gt;
 displayfunc.c&lt;br /&gt;
 dobj.c&lt;br /&gt;
 dvd.c&lt;br /&gt;
 dvdfs.c&lt;br /&gt;
 fobj.c&lt;br /&gt;
 fog.c&lt;br /&gt;
 hash.c&lt;br /&gt;
 id.c&lt;br /&gt;
 initialize.c&lt;br /&gt;
 jobj.c&lt;br /&gt;
 list.c&lt;br /&gt;
 lobj.c&lt;br /&gt;
 memory.c&lt;br /&gt;
 mobj.c&lt;br /&gt;
 mtx.c&lt;br /&gt;
 objalloc.c&lt;br /&gt;
 perf.c&lt;br /&gt;
 pobj.c&lt;br /&gt;
 robj.c&lt;br /&gt;
 tev.c&lt;br /&gt;
 texp.c&lt;br /&gt;
 texpdag.c&lt;br /&gt;
 tobj.c&lt;br /&gt;
 tpl.c&lt;br /&gt;
 util.c&lt;br /&gt;
 vi.c&lt;br /&gt;
 video.c&lt;br /&gt;
 wobj.c&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== Strings USA ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Strings list found in the dol and allowing to find libs / SDK:&lt;br /&gt;
 MetroTRK for GAMECUBE v2.0&lt;br /&gt;
 Metrowerks CW runtime library&lt;br /&gt;
 ADXT/GC Ver.8.57       Build:Feb 6 2003 18:03:46&lt;br /&gt;
 SKG/GC Ver.0.61        Build:Feb 6 2003 18:03:49&lt;br /&gt;
 ADXGC Ver.1.21         Build:Feb 6 2003 18:04:00&lt;br /&gt;
 ADXGCSDK Ver.05Sep2002 Build:Feb 6 2003 18:04:01&lt;br /&gt;
 ADXF/GC Ver.7.01       Build:Feb 6 2003 18:02:45&lt;br /&gt;
 CVFS/GC Ver.2.33       Build:Feb 6 2003 18:02:35&lt;br /&gt;
 GCCI Ver.1.09          Build:Feb 6 2003 18:02:33&lt;br /&gt;
 LSC/GC Ver.2.10        Build:Feb 6 2003 18:02:32&lt;br /&gt;
 SJ/GC Ver.6.10         Build:Feb 6 2003 18:02:53&lt;br /&gt;
 SVM/GC Ver.1.51        Build:Feb 6 2003 18:02:51&lt;br /&gt;
 MFCI/GC Ver.1.04       Build:Feb 6 2003 18:03:11&lt;br /&gt;
 AXRNA Ver.1.02         Build:Feb 6 2003 18:03:43&lt;br /&gt;
 CRI SUD/GC Ver.0.02    Build:Feb 6 2003 14:30:18&lt;br /&gt;
 CRI SFX/GC Ver.1.22    Build:Feb 6 2003 14:30:16&lt;br /&gt;
 CRI DCT/GC Ver.1.803   Build:Feb 6 2003 14:28:46&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI MPS/GC Ver.1.669   Build:Feb 6 2003 14:28:50&lt;br /&gt;
 CRI MPV/GC Ver.1.840   Build:Feb 6 2003 14:28:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFD/GC Ver.1.842   Build:Feb 6 2003 14:29:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFH/GC Ver.1.12    Build:Feb 6 2003 14:30:00&lt;br /&gt;
 MWSFD/GC Ver.2.62      Build:Feb 6 2003 14:28:42&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI CFT/GC Ver.1.24    Build:Feb 6 2003 14:28:33&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK – OS   release build: Apr 17 2003 12:33:06 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 Dolphin OS Kernel built : %s %s Apr 17 2003 12:33:06&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK – EXI  release build: Apr 17 2003 12:33:17 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - SI   release build: Apr 17 2003 12:33:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DVD  release build: Apr 22 2003 15:49:00 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - VI   release build: Apr 17 2003 12:33:22 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - PAD  release build: Apr 17 2003 12:33:44 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AI   release build: Apr 17 2003 12:33:54 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AR   release build: Apr 17 2003 12:33:55 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - ARQ  release build: Apr 17 2003 12:33:56 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AX   release build: Apr 17 2003 12:33:57 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DSP  release build: Apr 17 2003 12:34:16 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - CARD release build: Apr 17 2003 12:34:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - GX   release build: Apr 21 2003 14:55:46 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 sysdolphin_base_library&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== Strings EU ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Strings list found in the dol and allowing to find libs / SDK:&lt;br /&gt;
 Metrowerks Target Resident Kernel for PowerPC&lt;br /&gt;
 MetroTRK for GAMECUBE v2.0&lt;br /&gt;
 Metrowerks CW runtime library initializing default heap&lt;br /&gt;
 ADXT/GC     Ver.8.57 Build:Feb       6 2003 18:03:46&lt;br /&gt;
 SKG/GC      Ver.0.61 Build:Feb       6 2003 18:03:49&lt;br /&gt;
 ADXGC       Ver.1.21 Build:Feb       6 2003 18:04:00&lt;br /&gt;
 ADXGCSDK    Ver.05Sep2002 Build:Feb  6 2003 18:04:01&lt;br /&gt;
 ADXF/GC     Ver.7.01 Build:Feb       6 2003 18:02:45&lt;br /&gt;
 CVFS/GC     Ver.2.33 Build:Feb       6 2003 18:02:35&lt;br /&gt;
 GCCI        Ver.1.09 Build:Feb       6 2003 18:02:33&lt;br /&gt;
 LSC/GC      Ver.2.10 Build:Feb       6 2003 18:02:32&lt;br /&gt;
 SJ/GC       Ver.6.10 Build:Feb       6 2003 18:02:53&lt;br /&gt;
 SVM/GC      Ver.1.51 Build:Feb       6 2003 18:02:51&lt;br /&gt;
 MFCI/GC     Ver.1.04 Build:Feb       6 2003 18:03:11&lt;br /&gt;
 AXRNA       Ver.1.02 Build:Feb       6 2003 18:03:43&lt;br /&gt;
 CRI SUD/GC  Ver.0.02 Build:Feb       6 2003 14:30:18&lt;br /&gt;
 CRI SFX/GC  Ver.1.22 Build:Feb       6 2003 14:30:16&lt;br /&gt;
 CRI DCT/GC  Ver.1.803 Build:Feb      6 2003 14:28:46&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI MPS/GC  Ver.1.669 Build:Feb      6 2003 14:28:50&lt;br /&gt;
 CRI MPV/GC  Ver.1.840 Build:Feb      6 2003 14:28:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFD/GC  Ver.1.842 Build:Feb      6 2003 14:29:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFH/GC  Ver.1.12 Build:Feb       6 2003 14:30:00&lt;br /&gt;
 MWSFD/GC    Ver.2.62 Build:Feb       6 2003 14:28:42&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI CFT/GC  Ver.1.24 Build:Feb        6 2003 14:28:33&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - OS   release build: Apr 17 2003 12:33:06 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 Dolphin OS Kernel built : Apr 17 2003 12:33:06&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - EXI  release build: Apr 17 2003 12:33:17 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - SI   release build: Apr 17 2003 12:33:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DVD  release build: Apr 22 2003 15:49:00 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - VI   release build: Apr 17 2003 12:33:22 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - PAD  release build: Apr 17 2003 12:33:44 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AI   release build: Apr 17 2003 12:33:54 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AR   release build: Apr 17 2003 12:33:55 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - ARQ  release build: Apr 17 2003 12:33:56 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AX   release build: Apr 17 2003 12:33:57 (0x2301) &amp;gt;&amp;gt; &lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DSP  release build: Apr 17 2003 12:34:16 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 DSPInit(): Build Date: Apr 17 2003 12:34:16&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - CARD release build: Apr 17 2003 12:34:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - GX   release build: Apr 21 2003 14:55:46 (0x2301) &amp;gt;&amp;gt;  &lt;br /&gt;
 sysdolphin_base_library&lt;br /&gt;
 HSD_INIT_HEAP_MAX_NUM    is obsolete since 1.3.0.0.&lt;br /&gt;
 HSD_INIT_AUDIO_HEAP_SIZE is obsolete since 1.3.0.0.&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== Strings JAP ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Strings list found in the dol and allowing to find libs / SDK:&lt;br /&gt;
 Metrowerks Target Resident Kernel for PowerPC&lt;br /&gt;
 MetroTRK for GAMECUBE v2.0&lt;br /&gt;
 ADXT/GC Ver.8.57       Build:Feb  6 2003 18:03:46&lt;br /&gt;
 SKG/GC Ver.0.61        Build:Feb  6 2003 18:03:49&lt;br /&gt;
 ADXGC Ver.1.21         Build:Feb  6 2003 18:04:00&lt;br /&gt;
 ADXGCSDK Ver.05Sep2002 Build:Feb  6 2003 18:04:01&lt;br /&gt;
 ADXF/GC Ver.7.01       Build:Feb  6 2003 18:02:45&lt;br /&gt;
 CVFS/GC Ver.2.33       Build:Feb  6 2003 18:02:35&lt;br /&gt;
 GCCI Ver.1.09          Build:Feb  6 2003 18:02:33&lt;br /&gt;
 LSC/GC Ver.2.10        Build:Feb  6 2003 18:02:32&lt;br /&gt;
 SJ/GC Ver.6.10         Build:Feb  6 2003 18:02:53&lt;br /&gt;
 SVM/GC Ver.1.51        Build:Feb  6 2003 18:02:51&lt;br /&gt;
 MFCI/GC Ver.1.04       Build:Feb  6 2003 18:03:11&lt;br /&gt;
 AXRNA Ver.1.02         Build:Feb  6 2003 18:03:43&lt;br /&gt;
 CRI SUD/GC Ver.0.02    Build:Feb  6 2003 14:30:18&lt;br /&gt;
 CRI SFX/GC Ver.1.22    Build:Feb  6 2003 14:30:16&lt;br /&gt;
 CRI DCT/GC Ver.1.803   Build:Feb  6 2003 14:28:46&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI MPS/GC Ver.1.669   Build:Feb  6 2003 14:28:50&lt;br /&gt;
 CRI MPV/GC Ver.1.840   Build:Feb  6 2003 14:28:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFD/GC Ver.1.842   Build:Feb  6 2003 14:29:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFH/GC Ver.1.12    Build:Feb  6 2003 14:30:00&lt;br /&gt;
 MWSFD/GC Ver.2.62      Build:Feb  6 2003 14:28:42&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI CFT/GC Ver.1.24    Build:Feb  6 2003 14:28:33&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - OS   release build: Apr 17 2003 12:33:06 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 Dolphin OS Kernel built : Apr 17 2003 12:33:06&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - EXI  release build: Apr 17 2003 12:33:17 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - SI   release build: Apr 17 2003 12:33:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DVD  release build: Apr 22 2003 15:49:00 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - VI   release build: Apr 17 2003 12:33:22 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - PAD  release build: Apr 17 2003 12:33:44 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AI   release build: Apr 17 2003 12:33:54 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AR   release build: Apr 17 2003 12:33:55 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - ARQ  release build: Apr 17 2003 12:33:56 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AX   release build: Apr 17 2003 12:33:57 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DSP  release build: Apr 17 2003 12:34:16 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - CARD release build: Apr 17 2003 12:34:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - GX   release build: Apr 21 2003 14:55:46 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 sysdolphin_base_library&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:File format]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=DOL_(Gotcha_Force)&amp;diff=1503</id>
		<title>DOL (Gotcha Force)</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=DOL_(Gotcha_Force)&amp;diff=1503"/>
		<updated>2023-10-07T13:01:38Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: /* MetroTRK */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This article is about Gotcha Force DOL file format and ongoing researches on it. See [[DOL (File format)]] for DOL file format description.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Research | 3| Research on how functions works and how the dol works is nedded. }}&lt;br /&gt;
&lt;br /&gt;
== Memory map ==&lt;br /&gt;
The dol file is mapped in memory and the free available space remaining is next used to create the Arena containing Heaps. For instance we found Warehouse variables in the EU dol mapped in the interval [80593190:80598044[.&lt;br /&gt;
&lt;br /&gt;
So patching the dol is hard because we have to find unused free space in the memory. The [https://www.gc-forever.com/wiki/index.php?title=Apploader apploader reverse engineering] shows that max dol mapping addresses in memory are:&lt;br /&gt;
* 0x80700000  // production boards&lt;br /&gt;
* 0x81200000  // development boards&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;&lt;br /&gt;
In production we can override MetroTRK memory areas or even override apploader trailer before the bootrom/IPL area. Further investigations have to be done on the [[GCM (File format)|iso/GCM]] sys to see how debug memory is mapped in debug mode (apploader vars used in the apploader).&lt;br /&gt;
* Is it possible to know where exactly MetroTRK is mapped?&lt;br /&gt;
* Is there any other libs/datas unused in dol?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* It&#039;s perfectly possible and tested to patch the apploader trailer and raise the trailer size with [[GCM (File format)|GCM/iso]] patch. It gives us 0x100000 bytes available.&lt;br /&gt;
&lt;br /&gt;
The dol entry_point call the __init_registers procedure which will set the reserved following General Purpose Registers:&lt;br /&gt;
* R1 (stack)&lt;br /&gt;
* R2 (_SDA2_BASE_) - This is the read only _SDA2_.&lt;br /&gt;
* R13 (_SDA_BASE_) - This is the read / write _SDA_.&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;mall &#039;&#039;&#039;D&#039;&#039;&#039;ata &#039;&#039;&#039;A&#039;&#039;&#039;nchors are used with a signed short offset (-0x8000 à +0x7fff).&lt;br /&gt;
* -0x8000(R13) = address of .sdata followed by .sbss&lt;br /&gt;
* -0x8000(R2) = address of .sdata2 followed by .sbss2&lt;br /&gt;
* R1 = often the .sbss2 end address + 0x10000&lt;br /&gt;
&lt;br /&gt;
So often only a part of available SDA negative offsets are used for R2 and R13 using -0x8000 at start.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== USA: ===&lt;br /&gt;
Entry point: 80003154&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
 | Section | Offset   | Address  | Length   | Used  |&lt;br /&gt;
 |---------|----------|----------|----------|-------|&lt;br /&gt;
 | text0   | 00000100 | 80003100 | 000024e0 | True  |&lt;br /&gt;
 | text1   | 000025e0 | 800055e0 | 002aab80 | True  |&lt;br /&gt;
 | text2   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text3   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text4   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text5   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text6   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data7   | 002ad160 | 802b0160 | 00000020 | True  |&lt;br /&gt;
 | data8   | 002ad180 | 802b0180 | 00000020 | True  |&lt;br /&gt;
 | data9   | 002ad1a0 | 802b01a0 | 0000acc0 | True  |&lt;br /&gt;
 | data10  | 002b7e60 | 802bae60 | 000f42c0 | True  |&lt;br /&gt;
 | data11  | 003ac120 | 804335a0 | 00002b20 | True  |&lt;br /&gt;
 | data12  | 003aec40 | 80436a20 | 00006ae0 | True  |&lt;br /&gt;
 | data13  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data14  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data15  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data16  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data17  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
* bss: address:803af140 length:0008e3e8&lt;br /&gt;
* R1 = 8044d528&lt;br /&gt;
* R2 = 8043ea20&lt;br /&gt;
* R13 = 8043b5a0&lt;br /&gt;
&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
 | Section     | beg_addr | end_addr | length   |&lt;br /&gt;
 |-------------|----------|----------|----------|&lt;br /&gt;
 | system      | 80000000 | 80003100 | 00003100 |&lt;br /&gt;
 | .text0      | 80003100 | 800055e0 | 000024e0 |&lt;br /&gt;
 | .text1      | 800055e0 | 802b0160 | 002aab80 |&lt;br /&gt;
 | .ctors      | 802b0160 | 802b0180 | 00000020 |&lt;br /&gt;
 | .dtors      | 802b0180 | 802b01a0 | 00000020 |&lt;br /&gt;
 | .rodata     | 802b01a0 | 802bae60 | 0000acc0 |&lt;br /&gt;
 | .data       | 802bae60 | 803af120 | 000f42c0 |&lt;br /&gt;
 | empty       | 803af120 | 803af140 | 00000020 |&lt;br /&gt;
 | .bss        | 803af140 | 804335a0 | 00084460 |&lt;br /&gt;
 | .sdata      | 804335a0 | 804360c0 | 00002b20 |&lt;br /&gt;
 | .sbss       | 804360c0 | 80436a20 | 00000960 |&lt;br /&gt;
 | .sdata2     | 80436a20 | 8043d500 | 00006ae0 |&lt;br /&gt;
 | .sbss2      | 8043d500 | 8043d528 | 00000028 |&lt;br /&gt;
 | stack       | 8043d528 | 8044d528 | 00010000 |&lt;br /&gt;
 | empty       | 8044d528 | 8044d540 | 00000018 |&lt;br /&gt;
 | ArenaLo     | 8044d540 |          |          |&lt;br /&gt;
 | apploader   | 81200000 |        ? |        ? |&lt;br /&gt;
 | Bootrom/IPL | 81300000 |        ? |        ? |&lt;br /&gt;
 | ArenaHi     |          | 817fffa0 |          |&lt;br /&gt;
 | FST         | 817fffa0 | 81800000 | 00500000 |&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== EU: ===&lt;br /&gt;
Entry point: 80003154&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
 | Section | Offset   | Address  | Length   | Used  |&lt;br /&gt;
 |---------|----------|----------|----------|-------|&lt;br /&gt;
 | text0   | 00000100 | 80003100 | 000024e0 | True  |&lt;br /&gt;
 | text1   | 000025e0 | 800055e0 | 002ac800 | True  |&lt;br /&gt;
 | text2   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text3   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text4   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text5   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text6   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data7   | 002aede0 | 802b1de0 | 00000020 | True  |&lt;br /&gt;
 | data8   | 002aee00 | 802b1e00 | 00000020 | True  |&lt;br /&gt;
 | data9   | 002aee20 | 802b1e20 | 0000f060 | True  |&lt;br /&gt;
 | data10  | 002bde80 | 802c0e80 | 000f5d40 | True  |&lt;br /&gt;
 | data11  | 003b3bc0 | 8043cbe0 | 00002b20 | True  |&lt;br /&gt;
 | data12  | 003b66e0 | 80440080 | 00006d20 | True  |&lt;br /&gt;
 | data13  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data14  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data15  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data16  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data17  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
* bss: address:803b6bc0 length:00090208&lt;br /&gt;
* R1 = 80456dc8&lt;br /&gt;
* R2 = 80448080&lt;br /&gt;
* R13 = 80444be0&lt;br /&gt;
&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
 | Section     | beg_addr | end_addr | length   |&lt;br /&gt;
 |-------------|----------|----------|----------|&lt;br /&gt;
 | system      | 80000000 | 80003100 | 00003100 |&lt;br /&gt;
 | .text0      | 80003100 | 800055e0 | 000024e0 |&lt;br /&gt;
 | .text1      | 800055e0 | 802b1de0 | 002ac800 |&lt;br /&gt;
 | .ctors      | 802b1de0 | 802b1e00 | 00000020 |&lt;br /&gt;
 | .dtors      | 802b1e00 | 802b1e20 | 00000020 |&lt;br /&gt;
 | .rodata     | 802b1e20 | 802c0e80 | 0000f060 |&lt;br /&gt;
 | .data       | 802c0e80 | 803b6bc0 | 000f5d40 |&lt;br /&gt;
 | .bss        | 803b6bc0 | 8043cbe0 | 00086020 |&lt;br /&gt;
 | .sdata      | 8043cbe0 | 8043f700 | 00002b20 |&lt;br /&gt;
 | .sbss       | 8043f700 | 80440080 | 00000980 |&lt;br /&gt;
 | .sdata2     | 80440080 | 80446da0 | 00006d20 |&lt;br /&gt;
 | .sbss2      | 80446da0 | 80446dc8 | 00000028 |&lt;br /&gt;
 | stack       | 80446dc8 | 80456dc8 | 00010000 |&lt;br /&gt;
 | empty       | 80456dc8 | 80456de0 | 00000018 |&lt;br /&gt;
 | ArenaLo     | 80456de0 |          |          |&lt;br /&gt;
 | apploader   | 81200000 |        ? |        ? |&lt;br /&gt;
 | Bootrom/IPL | 81300000 |        ? |        ? |&lt;br /&gt;
 | ArenaHi     |          | 817fff40 |          |&lt;br /&gt;
 | FST         | 817fff40 | 81800000 | 000000C0 |&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
80593A00 -&amp;gt; 80598040 Wharehouse&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== JAP: ===&lt;br /&gt;
Entry point: 80003154&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
 | Section | Offset   | Address  | Length   | Used  |&lt;br /&gt;
 |---------|----------|----------|----------|-------|&lt;br /&gt;
 | text0   | 00000100 | 80003100 | 000024e0 | True  |&lt;br /&gt;
 | text1   | 000025e0 | 800055e0 | 002aab20 | True  |&lt;br /&gt;
 | text2   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text3   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text4   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text5   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text6   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data7   | 002ad100 | 802b0100 | 00000020 | True  |&lt;br /&gt;
 | data8   | 002ad120 | 802b0120 | 00000020 | True  |&lt;br /&gt;
 | data9   | 002ad140 | 802b0140 | 0000a2e0 | True  |&lt;br /&gt;
 | data10  | 002b7420 | 802ba420 | 000f3e60 | True  |&lt;br /&gt;
 | data11  | 003ab280 | 804326e0 | 00002b00 | True  |&lt;br /&gt;
 | data12  | 003add80 | 80435b40 | 00006b60 | True  |&lt;br /&gt;
 | data13  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data14  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data15  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data16  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data17  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
* bss: address:803ae280 length:0008e448&lt;br /&gt;
* R1 = 8044c6c8&lt;br /&gt;
* R2 = 8043db40&lt;br /&gt;
* R13 = 8043a6e0 &lt;br /&gt;
&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
 | Section     | beg_addr | end_addr | length   |&lt;br /&gt;
 |-------------|----------|----------|----------|&lt;br /&gt;
 | system      | 80000000 | 80003100 | 00003100 |&lt;br /&gt;
 | .text0      | 80003100 | 800055e0 | 000024e0 |&lt;br /&gt;
 | .text1      | 800055e0 | 802b0100 | 002aab20 |&lt;br /&gt;
 | .ctors      | 802b0100 | 802b0120 | 00000020 |&lt;br /&gt;
 | .dtors      | 802b0120 | 802b0140 | 00000020 |&lt;br /&gt;
 | .rodata     | 802b0140 | 802ba420 | 0000a2e0 |&lt;br /&gt;
 | .data       | 802ba420 | 803ae280 | 000f3e60 |&lt;br /&gt;
 | .bss        | 803ae280 | 804326e0 | 00084460 |&lt;br /&gt;
 | .sdata      | 804326e0 | 804351e0 | 00002b00 |&lt;br /&gt;
 | .sbss       | 804351e0 | 80435b40 | 00000960 |&lt;br /&gt;
 | .sdata2     | 80435b40 | 8043c6a0 | 00006b60 |&lt;br /&gt;
 | .sbss2      | 8043c6a0 | 8043c6c8 | 00000028 |&lt;br /&gt;
 | stack       | 8043c6c8 | 8044c6c8 | 00010000 |&lt;br /&gt;
 | empty       | 8044c6c8 | 8044c6e0 | 00000018 |&lt;br /&gt;
 | ArenaLo     | 8044c6e0 |          |          |&lt;br /&gt;
 | apploader   | 81200000 |        ? |        ? |&lt;br /&gt;
 | Bootrom/IPL | 81300000 |        ? |        ? |&lt;br /&gt;
 | ArenaHi     |          | 817fffa0 |          |&lt;br /&gt;
 | FST         | 817fffa0 | 81800000 | 00000060 |&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Symbol map ==&lt;br /&gt;
The symbol map allows to put names on procedures and data. It can be loaded into dolphin emulator in debug mode with the .map file format.&lt;br /&gt;
&lt;br /&gt;
Symbol map USA: https://github.com/Virtual-World-RE/NeoGF/blob/main/data/GG4E-CSM-20220412.map&lt;br /&gt;
&lt;br /&gt;
== MetroTRK ==&lt;br /&gt;
&lt;br /&gt;
MetroTRK can be activated by patching the bi2.bin DebugFlag and also by patching the following addresses to start the debugger in BBA (&#039;&#039;&#039;B&#039;&#039;&#039;road&#039;&#039;&#039;B&#039;&#039;&#039;and &#039;&#039;&#039;A&#039;&#039;&#039;dapter?) mode:&lt;br /&gt;
* USA: Put a breakpoint at 80003190 then set r3 to 1&lt;br /&gt;
* EU:  Put a breakpoint at 800031C0 then set r7 to 4&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;&lt;br /&gt;
The [https://www.gc-forever.com/wiki/index.php?title=Apploader apploader reverse engineering] shows that there are debug vars in [[GCM (File format)|GCM/iso]] system files. [https://github.com/Virtual-World-RE/NeoGF/tree/main/gcmtool gcmtool.py] allow to patch them.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SDK &amp;amp; libs ==&lt;br /&gt;
All libs and SDK are staticly linked inside the dol.&lt;br /&gt;
&lt;br /&gt;
We found these libs and SDK:&lt;br /&gt;
* GCN SDK - Base dolphin SDK.&lt;br /&gt;
* Sysdolphin base library: Hal SysDolphin (HSD) Graphic and physic engine - https://github.com/doldecomp/melee/tree/master/src/sysdolphin/baselib&lt;br /&gt;
* MetroTRK: Target Resident Debugging Kernel for embedded systems. It&#039;s an embedded Kernel for debug.&lt;br /&gt;
* Metrowerks CW Runtime library: CodeWarrior: Metrowerks Standard Library and C/C++ Runtime&lt;br /&gt;
* And from ADXT/GC to CRI CFT/GC: It seems to be audio and video codecs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== H and C files ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
All 3 iso contains following .h and .c symbols in the .data, .rodata, .sdata and .sdata2. The EU version contains also the symbol &amp;quot;objalloc.h&amp;quot;.&lt;br /&gt;
 aobj.h&lt;br /&gt;
 cobj.h&lt;br /&gt;
 jobj.h&lt;br /&gt;
 lobj.h&lt;br /&gt;
 object.h&lt;br /&gt;
 &lt;br /&gt;
 GCN_Mem_Alloc.c&lt;br /&gt;
 aobj.c&lt;br /&gt;
 bytecode.c&lt;br /&gt;
 class.c&lt;br /&gt;
 cobj.c&lt;br /&gt;
 displayfunc.c&lt;br /&gt;
 dobj.c&lt;br /&gt;
 dvd.c&lt;br /&gt;
 dvdfs.c&lt;br /&gt;
 fobj.c&lt;br /&gt;
 fog.c&lt;br /&gt;
 hash.c&lt;br /&gt;
 id.c&lt;br /&gt;
 initialize.c&lt;br /&gt;
 jobj.c&lt;br /&gt;
 list.c&lt;br /&gt;
 lobj.c&lt;br /&gt;
 memory.c&lt;br /&gt;
 mobj.c&lt;br /&gt;
 mtx.c&lt;br /&gt;
 objalloc.c&lt;br /&gt;
 perf.c&lt;br /&gt;
 pobj.c&lt;br /&gt;
 robj.c&lt;br /&gt;
 tev.c&lt;br /&gt;
 texp.c&lt;br /&gt;
 texpdag.c&lt;br /&gt;
 tobj.c&lt;br /&gt;
 tpl.c&lt;br /&gt;
 util.c&lt;br /&gt;
 vi.c&lt;br /&gt;
 video.c&lt;br /&gt;
 wobj.c&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== Strings USA ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Strings list found in the dol and allowing to find libs / SDK:&lt;br /&gt;
 MetroTRK for GAMECUBE v2.0&lt;br /&gt;
 Metrowerks CW runtime library&lt;br /&gt;
 ADXT/GC Ver.8.57       Build:Feb 6 2003 18:03:46&lt;br /&gt;
 SKG/GC Ver.0.61        Build:Feb 6 2003 18:03:49&lt;br /&gt;
 ADXGC Ver.1.21         Build:Feb 6 2003 18:04:00&lt;br /&gt;
 ADXGCSDK Ver.05Sep2002 Build:Feb 6 2003 18:04:01&lt;br /&gt;
 ADXF/GC Ver.7.01       Build:Feb 6 2003 18:02:45&lt;br /&gt;
 CVFS/GC Ver.2.33       Build:Feb 6 2003 18:02:35&lt;br /&gt;
 GCCI Ver.1.09          Build:Feb 6 2003 18:02:33&lt;br /&gt;
 LSC/GC Ver.2.10        Build:Feb 6 2003 18:02:32&lt;br /&gt;
 SJ/GC Ver.6.10         Build:Feb 6 2003 18:02:53&lt;br /&gt;
 SVM/GC Ver.1.51        Build:Feb 6 2003 18:02:51&lt;br /&gt;
 MFCI/GC Ver.1.04       Build:Feb 6 2003 18:03:11&lt;br /&gt;
 AXRNA Ver.1.02         Build:Feb 6 2003 18:03:43&lt;br /&gt;
 CRI SUD/GC Ver.0.02    Build:Feb 6 2003 14:30:18&lt;br /&gt;
 CRI SFX/GC Ver.1.22    Build:Feb 6 2003 14:30:16&lt;br /&gt;
 CRI DCT/GC Ver.1.803   Build:Feb 6 2003 14:28:46&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI MPS/GC Ver.1.669   Build:Feb 6 2003 14:28:50&lt;br /&gt;
 CRI MPV/GC Ver.1.840   Build:Feb 6 2003 14:28:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFD/GC Ver.1.842   Build:Feb 6 2003 14:29:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFH/GC Ver.1.12    Build:Feb 6 2003 14:30:00&lt;br /&gt;
 MWSFD/GC Ver.2.62      Build:Feb 6 2003 14:28:42&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI CFT/GC Ver.1.24    Build:Feb 6 2003 14:28:33&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK – OS   release build: Apr 17 2003 12:33:06 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 Dolphin OS Kernel built : %s %s Apr 17 2003 12:33:06&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK – EXI  release build: Apr 17 2003 12:33:17 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - SI   release build: Apr 17 2003 12:33:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DVD  release build: Apr 22 2003 15:49:00 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - VI   release build: Apr 17 2003 12:33:22 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - PAD  release build: Apr 17 2003 12:33:44 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AI   release build: Apr 17 2003 12:33:54 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AR   release build: Apr 17 2003 12:33:55 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - ARQ  release build: Apr 17 2003 12:33:56 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AX   release build: Apr 17 2003 12:33:57 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DSP  release build: Apr 17 2003 12:34:16 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - CARD release build: Apr 17 2003 12:34:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - GX   release build: Apr 21 2003 14:55:46 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 sysdolphin_base_library&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== Strings EU ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Strings list found in the dol and allowing to find libs / SDK:&lt;br /&gt;
 Metrowerks Target Resident Kernel for PowerPC&lt;br /&gt;
 MetroTRK for GAMECUBE v2.0&lt;br /&gt;
 Metrowerks CW runtime library initializing default heap&lt;br /&gt;
 ADXT/GC     Ver.8.57 Build:Feb       6 2003 18:03:46&lt;br /&gt;
 SKG/GC      Ver.0.61 Build:Feb       6 2003 18:03:49&lt;br /&gt;
 ADXGC       Ver.1.21 Build:Feb       6 2003 18:04:00&lt;br /&gt;
 ADXGCSDK    Ver.05Sep2002 Build:Feb  6 2003 18:04:01&lt;br /&gt;
 ADXF/GC     Ver.7.01 Build:Feb       6 2003 18:02:45&lt;br /&gt;
 CVFS/GC     Ver.2.33 Build:Feb       6 2003 18:02:35&lt;br /&gt;
 GCCI        Ver.1.09 Build:Feb       6 2003 18:02:33&lt;br /&gt;
 LSC/GC      Ver.2.10 Build:Feb       6 2003 18:02:32&lt;br /&gt;
 SJ/GC       Ver.6.10 Build:Feb       6 2003 18:02:53&lt;br /&gt;
 SVM/GC      Ver.1.51 Build:Feb       6 2003 18:02:51&lt;br /&gt;
 MFCI/GC     Ver.1.04 Build:Feb       6 2003 18:03:11&lt;br /&gt;
 AXRNA       Ver.1.02 Build:Feb       6 2003 18:03:43&lt;br /&gt;
 CRI SUD/GC  Ver.0.02 Build:Feb       6 2003 14:30:18&lt;br /&gt;
 CRI SFX/GC  Ver.1.22 Build:Feb       6 2003 14:30:16&lt;br /&gt;
 CRI DCT/GC  Ver.1.803 Build:Feb      6 2003 14:28:46&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI MPS/GC  Ver.1.669 Build:Feb      6 2003 14:28:50&lt;br /&gt;
 CRI MPV/GC  Ver.1.840 Build:Feb      6 2003 14:28:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFD/GC  Ver.1.842 Build:Feb      6 2003 14:29:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFH/GC  Ver.1.12 Build:Feb       6 2003 14:30:00&lt;br /&gt;
 MWSFD/GC    Ver.2.62 Build:Feb       6 2003 14:28:42&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI CFT/GC  Ver.1.24 Build:Feb        6 2003 14:28:33&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - OS   release build: Apr 17 2003 12:33:06 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 Dolphin OS Kernel built : Apr 17 2003 12:33:06&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - EXI  release build: Apr 17 2003 12:33:17 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - SI   release build: Apr 17 2003 12:33:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DVD  release build: Apr 22 2003 15:49:00 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - VI   release build: Apr 17 2003 12:33:22 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - PAD  release build: Apr 17 2003 12:33:44 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AI   release build: Apr 17 2003 12:33:54 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AR   release build: Apr 17 2003 12:33:55 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - ARQ  release build: Apr 17 2003 12:33:56 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AX   release build: Apr 17 2003 12:33:57 (0x2301) &amp;gt;&amp;gt; &lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DSP  release build: Apr 17 2003 12:34:16 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 DSPInit(): Build Date: Apr 17 2003 12:34:16&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - CARD release build: Apr 17 2003 12:34:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - GX   release build: Apr 21 2003 14:55:46 (0x2301) &amp;gt;&amp;gt;  &lt;br /&gt;
 sysdolphin_base_library&lt;br /&gt;
 HSD_INIT_HEAP_MAX_NUM    is obsolete since 1.3.0.0.&lt;br /&gt;
 HSD_INIT_AUDIO_HEAP_SIZE is obsolete since 1.3.0.0.&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== Strings JAP ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Strings list found in the dol and allowing to find libs / SDK:&lt;br /&gt;
 Metrowerks Target Resident Kernel for PowerPC&lt;br /&gt;
 MetroTRK for GAMECUBE v2.0&lt;br /&gt;
 ADXT/GC Ver.8.57       Build:Feb  6 2003 18:03:46&lt;br /&gt;
 SKG/GC Ver.0.61        Build:Feb  6 2003 18:03:49&lt;br /&gt;
 ADXGC Ver.1.21         Build:Feb  6 2003 18:04:00&lt;br /&gt;
 ADXGCSDK Ver.05Sep2002 Build:Feb  6 2003 18:04:01&lt;br /&gt;
 ADXF/GC Ver.7.01       Build:Feb  6 2003 18:02:45&lt;br /&gt;
 CVFS/GC Ver.2.33       Build:Feb  6 2003 18:02:35&lt;br /&gt;
 GCCI Ver.1.09          Build:Feb  6 2003 18:02:33&lt;br /&gt;
 LSC/GC Ver.2.10        Build:Feb  6 2003 18:02:32&lt;br /&gt;
 SJ/GC Ver.6.10         Build:Feb  6 2003 18:02:53&lt;br /&gt;
 SVM/GC Ver.1.51        Build:Feb  6 2003 18:02:51&lt;br /&gt;
 MFCI/GC Ver.1.04       Build:Feb  6 2003 18:03:11&lt;br /&gt;
 AXRNA Ver.1.02         Build:Feb  6 2003 18:03:43&lt;br /&gt;
 CRI SUD/GC Ver.0.02    Build:Feb  6 2003 14:30:18&lt;br /&gt;
 CRI SFX/GC Ver.1.22    Build:Feb  6 2003 14:30:16&lt;br /&gt;
 CRI DCT/GC Ver.1.803   Build:Feb  6 2003 14:28:46&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI MPS/GC Ver.1.669   Build:Feb  6 2003 14:28:50&lt;br /&gt;
 CRI MPV/GC Ver.1.840   Build:Feb  6 2003 14:28:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFD/GC Ver.1.842   Build:Feb  6 2003 14:29:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFH/GC Ver.1.12    Build:Feb  6 2003 14:30:00&lt;br /&gt;
 MWSFD/GC Ver.2.62      Build:Feb  6 2003 14:28:42&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI CFT/GC Ver.1.24    Build:Feb  6 2003 14:28:33&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - OS   release build: Apr 17 2003 12:33:06 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 Dolphin OS Kernel built : Apr 17 2003 12:33:06&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - EXI  release build: Apr 17 2003 12:33:17 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - SI   release build: Apr 17 2003 12:33:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DVD  release build: Apr 22 2003 15:49:00 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - VI   release build: Apr 17 2003 12:33:22 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - PAD  release build: Apr 17 2003 12:33:44 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AI   release build: Apr 17 2003 12:33:54 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AR   release build: Apr 17 2003 12:33:55 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - ARQ  release build: Apr 17 2003 12:33:56 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AX   release build: Apr 17 2003 12:33:57 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DSP  release build: Apr 17 2003 12:34:16 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - CARD release build: Apr 17 2003 12:34:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - GX   release build: Apr 21 2003 14:55:46 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 sysdolphin_base_library&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:File format]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=DOL_(Gotcha_Force)&amp;diff=1502</id>
		<title>DOL (Gotcha Force)</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=DOL_(Gotcha_Force)&amp;diff=1502"/>
		<updated>2023-10-07T13:00:44Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: /* Symbol map */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This article is about Gotcha Force DOL file format and ongoing researches on it. See [[DOL (File format)]] for DOL file format description.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Research | 3| Research on how functions works and how the dol works is nedded. }}&lt;br /&gt;
&lt;br /&gt;
== Memory map ==&lt;br /&gt;
The dol file is mapped in memory and the free available space remaining is next used to create the Arena containing Heaps. For instance we found Warehouse variables in the EU dol mapped in the interval [80593190:80598044[.&lt;br /&gt;
&lt;br /&gt;
So patching the dol is hard because we have to find unused free space in the memory. The [https://www.gc-forever.com/wiki/index.php?title=Apploader apploader reverse engineering] shows that max dol mapping addresses in memory are:&lt;br /&gt;
* 0x80700000  // production boards&lt;br /&gt;
* 0x81200000  // development boards&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;&lt;br /&gt;
In production we can override MetroTRK memory areas or even override apploader trailer before the bootrom/IPL area. Further investigations have to be done on the [[GCM (File format)|iso/GCM]] sys to see how debug memory is mapped in debug mode (apploader vars used in the apploader).&lt;br /&gt;
* Is it possible to know where exactly MetroTRK is mapped?&lt;br /&gt;
* Is there any other libs/datas unused in dol?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* It&#039;s perfectly possible and tested to patch the apploader trailer and raise the trailer size with [[GCM (File format)|GCM/iso]] patch. It gives us 0x100000 bytes available.&lt;br /&gt;
&lt;br /&gt;
The dol entry_point call the __init_registers procedure which will set the reserved following General Purpose Registers:&lt;br /&gt;
* R1 (stack)&lt;br /&gt;
* R2 (_SDA2_BASE_) - This is the read only _SDA2_.&lt;br /&gt;
* R13 (_SDA_BASE_) - This is the read / write _SDA_.&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;mall &#039;&#039;&#039;D&#039;&#039;&#039;ata &#039;&#039;&#039;A&#039;&#039;&#039;nchors are used with a signed short offset (-0x8000 à +0x7fff).&lt;br /&gt;
* -0x8000(R13) = address of .sdata followed by .sbss&lt;br /&gt;
* -0x8000(R2) = address of .sdata2 followed by .sbss2&lt;br /&gt;
* R1 = often the .sbss2 end address + 0x10000&lt;br /&gt;
&lt;br /&gt;
So often only a part of available SDA negative offsets are used for R2 and R13 using -0x8000 at start.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== USA: ===&lt;br /&gt;
Entry point: 80003154&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
 | Section | Offset   | Address  | Length   | Used  |&lt;br /&gt;
 |---------|----------|----------|----------|-------|&lt;br /&gt;
 | text0   | 00000100 | 80003100 | 000024e0 | True  |&lt;br /&gt;
 | text1   | 000025e0 | 800055e0 | 002aab80 | True  |&lt;br /&gt;
 | text2   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text3   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text4   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text5   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text6   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data7   | 002ad160 | 802b0160 | 00000020 | True  |&lt;br /&gt;
 | data8   | 002ad180 | 802b0180 | 00000020 | True  |&lt;br /&gt;
 | data9   | 002ad1a0 | 802b01a0 | 0000acc0 | True  |&lt;br /&gt;
 | data10  | 002b7e60 | 802bae60 | 000f42c0 | True  |&lt;br /&gt;
 | data11  | 003ac120 | 804335a0 | 00002b20 | True  |&lt;br /&gt;
 | data12  | 003aec40 | 80436a20 | 00006ae0 | True  |&lt;br /&gt;
 | data13  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data14  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data15  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data16  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data17  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
* bss: address:803af140 length:0008e3e8&lt;br /&gt;
* R1 = 8044d528&lt;br /&gt;
* R2 = 8043ea20&lt;br /&gt;
* R13 = 8043b5a0&lt;br /&gt;
&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
 | Section     | beg_addr | end_addr | length   |&lt;br /&gt;
 |-------------|----------|----------|----------|&lt;br /&gt;
 | system      | 80000000 | 80003100 | 00003100 |&lt;br /&gt;
 | .text0      | 80003100 | 800055e0 | 000024e0 |&lt;br /&gt;
 | .text1      | 800055e0 | 802b0160 | 002aab80 |&lt;br /&gt;
 | .ctors      | 802b0160 | 802b0180 | 00000020 |&lt;br /&gt;
 | .dtors      | 802b0180 | 802b01a0 | 00000020 |&lt;br /&gt;
 | .rodata     | 802b01a0 | 802bae60 | 0000acc0 |&lt;br /&gt;
 | .data       | 802bae60 | 803af120 | 000f42c0 |&lt;br /&gt;
 | empty       | 803af120 | 803af140 | 00000020 |&lt;br /&gt;
 | .bss        | 803af140 | 804335a0 | 00084460 |&lt;br /&gt;
 | .sdata      | 804335a0 | 804360c0 | 00002b20 |&lt;br /&gt;
 | .sbss       | 804360c0 | 80436a20 | 00000960 |&lt;br /&gt;
 | .sdata2     | 80436a20 | 8043d500 | 00006ae0 |&lt;br /&gt;
 | .sbss2      | 8043d500 | 8043d528 | 00000028 |&lt;br /&gt;
 | stack       | 8043d528 | 8044d528 | 00010000 |&lt;br /&gt;
 | empty       | 8044d528 | 8044d540 | 00000018 |&lt;br /&gt;
 | ArenaLo     | 8044d540 |          |          |&lt;br /&gt;
 | apploader   | 81200000 |        ? |        ? |&lt;br /&gt;
 | Bootrom/IPL | 81300000 |        ? |        ? |&lt;br /&gt;
 | ArenaHi     |          | 817fffa0 |          |&lt;br /&gt;
 | FST         | 817fffa0 | 81800000 | 00500000 |&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== EU: ===&lt;br /&gt;
Entry point: 80003154&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
 | Section | Offset   | Address  | Length   | Used  |&lt;br /&gt;
 |---------|----------|----------|----------|-------|&lt;br /&gt;
 | text0   | 00000100 | 80003100 | 000024e0 | True  |&lt;br /&gt;
 | text1   | 000025e0 | 800055e0 | 002ac800 | True  |&lt;br /&gt;
 | text2   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text3   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text4   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text5   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text6   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data7   | 002aede0 | 802b1de0 | 00000020 | True  |&lt;br /&gt;
 | data8   | 002aee00 | 802b1e00 | 00000020 | True  |&lt;br /&gt;
 | data9   | 002aee20 | 802b1e20 | 0000f060 | True  |&lt;br /&gt;
 | data10  | 002bde80 | 802c0e80 | 000f5d40 | True  |&lt;br /&gt;
 | data11  | 003b3bc0 | 8043cbe0 | 00002b20 | True  |&lt;br /&gt;
 | data12  | 003b66e0 | 80440080 | 00006d20 | True  |&lt;br /&gt;
 | data13  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data14  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data15  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data16  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data17  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
* bss: address:803b6bc0 length:00090208&lt;br /&gt;
* R1 = 80456dc8&lt;br /&gt;
* R2 = 80448080&lt;br /&gt;
* R13 = 80444be0&lt;br /&gt;
&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
 | Section     | beg_addr | end_addr | length   |&lt;br /&gt;
 |-------------|----------|----------|----------|&lt;br /&gt;
 | system      | 80000000 | 80003100 | 00003100 |&lt;br /&gt;
 | .text0      | 80003100 | 800055e0 | 000024e0 |&lt;br /&gt;
 | .text1      | 800055e0 | 802b1de0 | 002ac800 |&lt;br /&gt;
 | .ctors      | 802b1de0 | 802b1e00 | 00000020 |&lt;br /&gt;
 | .dtors      | 802b1e00 | 802b1e20 | 00000020 |&lt;br /&gt;
 | .rodata     | 802b1e20 | 802c0e80 | 0000f060 |&lt;br /&gt;
 | .data       | 802c0e80 | 803b6bc0 | 000f5d40 |&lt;br /&gt;
 | .bss        | 803b6bc0 | 8043cbe0 | 00086020 |&lt;br /&gt;
 | .sdata      | 8043cbe0 | 8043f700 | 00002b20 |&lt;br /&gt;
 | .sbss       | 8043f700 | 80440080 | 00000980 |&lt;br /&gt;
 | .sdata2     | 80440080 | 80446da0 | 00006d20 |&lt;br /&gt;
 | .sbss2      | 80446da0 | 80446dc8 | 00000028 |&lt;br /&gt;
 | stack       | 80446dc8 | 80456dc8 | 00010000 |&lt;br /&gt;
 | empty       | 80456dc8 | 80456de0 | 00000018 |&lt;br /&gt;
 | ArenaLo     | 80456de0 |          |          |&lt;br /&gt;
 | apploader   | 81200000 |        ? |        ? |&lt;br /&gt;
 | Bootrom/IPL | 81300000 |        ? |        ? |&lt;br /&gt;
 | ArenaHi     |          | 817fff40 |          |&lt;br /&gt;
 | FST         | 817fff40 | 81800000 | 000000C0 |&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
80593A00 -&amp;gt; 80598040 Wharehouse&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== JAP: ===&lt;br /&gt;
Entry point: 80003154&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
 | Section | Offset   | Address  | Length   | Used  |&lt;br /&gt;
 |---------|----------|----------|----------|-------|&lt;br /&gt;
 | text0   | 00000100 | 80003100 | 000024e0 | True  |&lt;br /&gt;
 | text1   | 000025e0 | 800055e0 | 002aab20 | True  |&lt;br /&gt;
 | text2   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text3   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text4   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text5   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text6   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data7   | 002ad100 | 802b0100 | 00000020 | True  |&lt;br /&gt;
 | data8   | 002ad120 | 802b0120 | 00000020 | True  |&lt;br /&gt;
 | data9   | 002ad140 | 802b0140 | 0000a2e0 | True  |&lt;br /&gt;
 | data10  | 002b7420 | 802ba420 | 000f3e60 | True  |&lt;br /&gt;
 | data11  | 003ab280 | 804326e0 | 00002b00 | True  |&lt;br /&gt;
 | data12  | 003add80 | 80435b40 | 00006b60 | True  |&lt;br /&gt;
 | data13  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data14  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data15  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data16  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data17  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
* bss: address:803ae280 length:0008e448&lt;br /&gt;
* R1 = 8044c6c8&lt;br /&gt;
* R2 = 8043db40&lt;br /&gt;
* R13 = 8043a6e0 &lt;br /&gt;
&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
 | Section     | beg_addr | end_addr | length   |&lt;br /&gt;
 |-------------|----------|----------|----------|&lt;br /&gt;
 | system      | 80000000 | 80003100 | 00003100 |&lt;br /&gt;
 | .text0      | 80003100 | 800055e0 | 000024e0 |&lt;br /&gt;
 | .text1      | 800055e0 | 802b0100 | 002aab20 |&lt;br /&gt;
 | .ctors      | 802b0100 | 802b0120 | 00000020 |&lt;br /&gt;
 | .dtors      | 802b0120 | 802b0140 | 00000020 |&lt;br /&gt;
 | .rodata     | 802b0140 | 802ba420 | 0000a2e0 |&lt;br /&gt;
 | .data       | 802ba420 | 803ae280 | 000f3e60 |&lt;br /&gt;
 | .bss        | 803ae280 | 804326e0 | 00084460 |&lt;br /&gt;
 | .sdata      | 804326e0 | 804351e0 | 00002b00 |&lt;br /&gt;
 | .sbss       | 804351e0 | 80435b40 | 00000960 |&lt;br /&gt;
 | .sdata2     | 80435b40 | 8043c6a0 | 00006b60 |&lt;br /&gt;
 | .sbss2      | 8043c6a0 | 8043c6c8 | 00000028 |&lt;br /&gt;
 | stack       | 8043c6c8 | 8044c6c8 | 00010000 |&lt;br /&gt;
 | empty       | 8044c6c8 | 8044c6e0 | 00000018 |&lt;br /&gt;
 | ArenaLo     | 8044c6e0 |          |          |&lt;br /&gt;
 | apploader   | 81200000 |        ? |        ? |&lt;br /&gt;
 | Bootrom/IPL | 81300000 |        ? |        ? |&lt;br /&gt;
 | ArenaHi     |          | 817fffa0 |          |&lt;br /&gt;
 | FST         | 817fffa0 | 81800000 | 00000060 |&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Symbol map ==&lt;br /&gt;
The symbol map allows to put names on procedures and data. It can be loaded into dolphin emulator in debug mode with the .map file format.&lt;br /&gt;
&lt;br /&gt;
Symbol map USA: https://github.com/Virtual-World-RE/NeoGF/blob/main/data/GG4E-CSM-20220412.map&lt;br /&gt;
&lt;br /&gt;
== MetroTRK ==&lt;br /&gt;
&lt;br /&gt;
MetroTRK can be activated by patching the bi2.bin DebugFlag and also by patching the following addresses to start the debugger in BBA (&#039;&#039;&#039;B&#039;&#039;&#039;road&#039;&#039;&#039;B&#039;&#039;&#039;and &#039;&#039;&#039;A&#039;&#039;&#039;dapter?) mode:&lt;br /&gt;
* USA: Put a breakpoint at 80003190 then set r3 to 1&lt;br /&gt;
* EU:  Put a breakpoint at 800031C0 then set r7 to 4&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;&lt;br /&gt;
The [https://www.gc-forever.com/wiki/index.php?title=Apploader apploader reverse engineering] shows that there is debug vars in [[GCM (File format)|GCM/iso]] system files. [https://github.com/Virtual-World-RE/NeoGF/tree/main/gcmtool gcmtool.py] allow to patch them.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SDK &amp;amp; libs ==&lt;br /&gt;
All libs and SDK are staticly linked inside the dol.&lt;br /&gt;
&lt;br /&gt;
We found these libs and SDK:&lt;br /&gt;
* GCN SDK - Base dolphin SDK.&lt;br /&gt;
* Sysdolphin base library: Hal SysDolphin (HSD) Graphic and physic engine - https://github.com/doldecomp/melee/tree/master/src/sysdolphin/baselib&lt;br /&gt;
* MetroTRK: Target Resident Debugging Kernel for embedded systems. It&#039;s an embedded Kernel for debug.&lt;br /&gt;
* Metrowerks CW Runtime library: CodeWarrior: Metrowerks Standard Library and C/C++ Runtime&lt;br /&gt;
* And from ADXT/GC to CRI CFT/GC: It seems to be audio and video codecs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== H and C files ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
All 3 iso contains following .h and .c symbols in the .data, .rodata, .sdata and .sdata2. The EU version contains also the symbol &amp;quot;objalloc.h&amp;quot;.&lt;br /&gt;
 aobj.h&lt;br /&gt;
 cobj.h&lt;br /&gt;
 jobj.h&lt;br /&gt;
 lobj.h&lt;br /&gt;
 object.h&lt;br /&gt;
 &lt;br /&gt;
 GCN_Mem_Alloc.c&lt;br /&gt;
 aobj.c&lt;br /&gt;
 bytecode.c&lt;br /&gt;
 class.c&lt;br /&gt;
 cobj.c&lt;br /&gt;
 displayfunc.c&lt;br /&gt;
 dobj.c&lt;br /&gt;
 dvd.c&lt;br /&gt;
 dvdfs.c&lt;br /&gt;
 fobj.c&lt;br /&gt;
 fog.c&lt;br /&gt;
 hash.c&lt;br /&gt;
 id.c&lt;br /&gt;
 initialize.c&lt;br /&gt;
 jobj.c&lt;br /&gt;
 list.c&lt;br /&gt;
 lobj.c&lt;br /&gt;
 memory.c&lt;br /&gt;
 mobj.c&lt;br /&gt;
 mtx.c&lt;br /&gt;
 objalloc.c&lt;br /&gt;
 perf.c&lt;br /&gt;
 pobj.c&lt;br /&gt;
 robj.c&lt;br /&gt;
 tev.c&lt;br /&gt;
 texp.c&lt;br /&gt;
 texpdag.c&lt;br /&gt;
 tobj.c&lt;br /&gt;
 tpl.c&lt;br /&gt;
 util.c&lt;br /&gt;
 vi.c&lt;br /&gt;
 video.c&lt;br /&gt;
 wobj.c&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== Strings USA ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Strings list found in the dol and allowing to find libs / SDK:&lt;br /&gt;
 MetroTRK for GAMECUBE v2.0&lt;br /&gt;
 Metrowerks CW runtime library&lt;br /&gt;
 ADXT/GC Ver.8.57       Build:Feb 6 2003 18:03:46&lt;br /&gt;
 SKG/GC Ver.0.61        Build:Feb 6 2003 18:03:49&lt;br /&gt;
 ADXGC Ver.1.21         Build:Feb 6 2003 18:04:00&lt;br /&gt;
 ADXGCSDK Ver.05Sep2002 Build:Feb 6 2003 18:04:01&lt;br /&gt;
 ADXF/GC Ver.7.01       Build:Feb 6 2003 18:02:45&lt;br /&gt;
 CVFS/GC Ver.2.33       Build:Feb 6 2003 18:02:35&lt;br /&gt;
 GCCI Ver.1.09          Build:Feb 6 2003 18:02:33&lt;br /&gt;
 LSC/GC Ver.2.10        Build:Feb 6 2003 18:02:32&lt;br /&gt;
 SJ/GC Ver.6.10         Build:Feb 6 2003 18:02:53&lt;br /&gt;
 SVM/GC Ver.1.51        Build:Feb 6 2003 18:02:51&lt;br /&gt;
 MFCI/GC Ver.1.04       Build:Feb 6 2003 18:03:11&lt;br /&gt;
 AXRNA Ver.1.02         Build:Feb 6 2003 18:03:43&lt;br /&gt;
 CRI SUD/GC Ver.0.02    Build:Feb 6 2003 14:30:18&lt;br /&gt;
 CRI SFX/GC Ver.1.22    Build:Feb 6 2003 14:30:16&lt;br /&gt;
 CRI DCT/GC Ver.1.803   Build:Feb 6 2003 14:28:46&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI MPS/GC Ver.1.669   Build:Feb 6 2003 14:28:50&lt;br /&gt;
 CRI MPV/GC Ver.1.840   Build:Feb 6 2003 14:28:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFD/GC Ver.1.842   Build:Feb 6 2003 14:29:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFH/GC Ver.1.12    Build:Feb 6 2003 14:30:00&lt;br /&gt;
 MWSFD/GC Ver.2.62      Build:Feb 6 2003 14:28:42&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI CFT/GC Ver.1.24    Build:Feb 6 2003 14:28:33&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK – OS   release build: Apr 17 2003 12:33:06 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 Dolphin OS Kernel built : %s %s Apr 17 2003 12:33:06&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK – EXI  release build: Apr 17 2003 12:33:17 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - SI   release build: Apr 17 2003 12:33:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DVD  release build: Apr 22 2003 15:49:00 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - VI   release build: Apr 17 2003 12:33:22 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - PAD  release build: Apr 17 2003 12:33:44 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AI   release build: Apr 17 2003 12:33:54 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AR   release build: Apr 17 2003 12:33:55 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - ARQ  release build: Apr 17 2003 12:33:56 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AX   release build: Apr 17 2003 12:33:57 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DSP  release build: Apr 17 2003 12:34:16 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - CARD release build: Apr 17 2003 12:34:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - GX   release build: Apr 21 2003 14:55:46 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 sysdolphin_base_library&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== Strings EU ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Strings list found in the dol and allowing to find libs / SDK:&lt;br /&gt;
 Metrowerks Target Resident Kernel for PowerPC&lt;br /&gt;
 MetroTRK for GAMECUBE v2.0&lt;br /&gt;
 Metrowerks CW runtime library initializing default heap&lt;br /&gt;
 ADXT/GC     Ver.8.57 Build:Feb       6 2003 18:03:46&lt;br /&gt;
 SKG/GC      Ver.0.61 Build:Feb       6 2003 18:03:49&lt;br /&gt;
 ADXGC       Ver.1.21 Build:Feb       6 2003 18:04:00&lt;br /&gt;
 ADXGCSDK    Ver.05Sep2002 Build:Feb  6 2003 18:04:01&lt;br /&gt;
 ADXF/GC     Ver.7.01 Build:Feb       6 2003 18:02:45&lt;br /&gt;
 CVFS/GC     Ver.2.33 Build:Feb       6 2003 18:02:35&lt;br /&gt;
 GCCI        Ver.1.09 Build:Feb       6 2003 18:02:33&lt;br /&gt;
 LSC/GC      Ver.2.10 Build:Feb       6 2003 18:02:32&lt;br /&gt;
 SJ/GC       Ver.6.10 Build:Feb       6 2003 18:02:53&lt;br /&gt;
 SVM/GC      Ver.1.51 Build:Feb       6 2003 18:02:51&lt;br /&gt;
 MFCI/GC     Ver.1.04 Build:Feb       6 2003 18:03:11&lt;br /&gt;
 AXRNA       Ver.1.02 Build:Feb       6 2003 18:03:43&lt;br /&gt;
 CRI SUD/GC  Ver.0.02 Build:Feb       6 2003 14:30:18&lt;br /&gt;
 CRI SFX/GC  Ver.1.22 Build:Feb       6 2003 14:30:16&lt;br /&gt;
 CRI DCT/GC  Ver.1.803 Build:Feb      6 2003 14:28:46&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI MPS/GC  Ver.1.669 Build:Feb      6 2003 14:28:50&lt;br /&gt;
 CRI MPV/GC  Ver.1.840 Build:Feb      6 2003 14:28:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFD/GC  Ver.1.842 Build:Feb      6 2003 14:29:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFH/GC  Ver.1.12 Build:Feb       6 2003 14:30:00&lt;br /&gt;
 MWSFD/GC    Ver.2.62 Build:Feb       6 2003 14:28:42&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI CFT/GC  Ver.1.24 Build:Feb        6 2003 14:28:33&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - OS   release build: Apr 17 2003 12:33:06 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 Dolphin OS Kernel built : Apr 17 2003 12:33:06&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - EXI  release build: Apr 17 2003 12:33:17 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - SI   release build: Apr 17 2003 12:33:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DVD  release build: Apr 22 2003 15:49:00 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - VI   release build: Apr 17 2003 12:33:22 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - PAD  release build: Apr 17 2003 12:33:44 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AI   release build: Apr 17 2003 12:33:54 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AR   release build: Apr 17 2003 12:33:55 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - ARQ  release build: Apr 17 2003 12:33:56 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AX   release build: Apr 17 2003 12:33:57 (0x2301) &amp;gt;&amp;gt; &lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DSP  release build: Apr 17 2003 12:34:16 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 DSPInit(): Build Date: Apr 17 2003 12:34:16&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - CARD release build: Apr 17 2003 12:34:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - GX   release build: Apr 21 2003 14:55:46 (0x2301) &amp;gt;&amp;gt;  &lt;br /&gt;
 sysdolphin_base_library&lt;br /&gt;
 HSD_INIT_HEAP_MAX_NUM    is obsolete since 1.3.0.0.&lt;br /&gt;
 HSD_INIT_AUDIO_HEAP_SIZE is obsolete since 1.3.0.0.&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== Strings JAP ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Strings list found in the dol and allowing to find libs / SDK:&lt;br /&gt;
 Metrowerks Target Resident Kernel for PowerPC&lt;br /&gt;
 MetroTRK for GAMECUBE v2.0&lt;br /&gt;
 ADXT/GC Ver.8.57       Build:Feb  6 2003 18:03:46&lt;br /&gt;
 SKG/GC Ver.0.61        Build:Feb  6 2003 18:03:49&lt;br /&gt;
 ADXGC Ver.1.21         Build:Feb  6 2003 18:04:00&lt;br /&gt;
 ADXGCSDK Ver.05Sep2002 Build:Feb  6 2003 18:04:01&lt;br /&gt;
 ADXF/GC Ver.7.01       Build:Feb  6 2003 18:02:45&lt;br /&gt;
 CVFS/GC Ver.2.33       Build:Feb  6 2003 18:02:35&lt;br /&gt;
 GCCI Ver.1.09          Build:Feb  6 2003 18:02:33&lt;br /&gt;
 LSC/GC Ver.2.10        Build:Feb  6 2003 18:02:32&lt;br /&gt;
 SJ/GC Ver.6.10         Build:Feb  6 2003 18:02:53&lt;br /&gt;
 SVM/GC Ver.1.51        Build:Feb  6 2003 18:02:51&lt;br /&gt;
 MFCI/GC Ver.1.04       Build:Feb  6 2003 18:03:11&lt;br /&gt;
 AXRNA Ver.1.02         Build:Feb  6 2003 18:03:43&lt;br /&gt;
 CRI SUD/GC Ver.0.02    Build:Feb  6 2003 14:30:18&lt;br /&gt;
 CRI SFX/GC Ver.1.22    Build:Feb  6 2003 14:30:16&lt;br /&gt;
 CRI DCT/GC Ver.1.803   Build:Feb  6 2003 14:28:46&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI MPS/GC Ver.1.669   Build:Feb  6 2003 14:28:50&lt;br /&gt;
 CRI MPV/GC Ver.1.840   Build:Feb  6 2003 14:28:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFD/GC Ver.1.842   Build:Feb  6 2003 14:29:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFH/GC Ver.1.12    Build:Feb  6 2003 14:30:00&lt;br /&gt;
 MWSFD/GC Ver.2.62      Build:Feb  6 2003 14:28:42&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI CFT/GC Ver.1.24    Build:Feb  6 2003 14:28:33&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - OS   release build: Apr 17 2003 12:33:06 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 Dolphin OS Kernel built : Apr 17 2003 12:33:06&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - EXI  release build: Apr 17 2003 12:33:17 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - SI   release build: Apr 17 2003 12:33:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DVD  release build: Apr 22 2003 15:49:00 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - VI   release build: Apr 17 2003 12:33:22 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - PAD  release build: Apr 17 2003 12:33:44 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AI   release build: Apr 17 2003 12:33:54 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AR   release build: Apr 17 2003 12:33:55 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - ARQ  release build: Apr 17 2003 12:33:56 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AX   release build: Apr 17 2003 12:33:57 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DSP  release build: Apr 17 2003 12:34:16 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - CARD release build: Apr 17 2003 12:34:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - GX   release build: Apr 21 2003 14:55:46 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 sysdolphin_base_library&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:File format]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=DOL_(Gotcha_Force)&amp;diff=1501</id>
		<title>DOL (Gotcha Force)</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=DOL_(Gotcha_Force)&amp;diff=1501"/>
		<updated>2023-10-07T12:59:53Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This article is about Gotcha Force DOL file format and ongoing researches on it. See [[DOL (File format)]] for DOL file format description.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Research | 3| Research on how functions works and how the dol works is nedded. }}&lt;br /&gt;
&lt;br /&gt;
== Memory map ==&lt;br /&gt;
The dol file is mapped in memory and the free available space remaining is next used to create the Arena containing Heaps. For instance we found Warehouse variables in the EU dol mapped in the interval [80593190:80598044[.&lt;br /&gt;
&lt;br /&gt;
So patching the dol is hard because we have to find unused free space in the memory. The [https://www.gc-forever.com/wiki/index.php?title=Apploader apploader reverse engineering] shows that max dol mapping addresses in memory are:&lt;br /&gt;
* 0x80700000  // production boards&lt;br /&gt;
* 0x81200000  // development boards&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;&lt;br /&gt;
In production we can override MetroTRK memory areas or even override apploader trailer before the bootrom/IPL area. Further investigations have to be done on the [[GCM (File format)|iso/GCM]] sys to see how debug memory is mapped in debug mode (apploader vars used in the apploader).&lt;br /&gt;
* Is it possible to know where exactly MetroTRK is mapped?&lt;br /&gt;
* Is there any other libs/datas unused in dol?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* It&#039;s perfectly possible and tested to patch the apploader trailer and raise the trailer size with [[GCM (File format)|GCM/iso]] patch. It gives us 0x100000 bytes available.&lt;br /&gt;
&lt;br /&gt;
The dol entry_point call the __init_registers procedure which will set the reserved following General Purpose Registers:&lt;br /&gt;
* R1 (stack)&lt;br /&gt;
* R2 (_SDA2_BASE_) - This is the read only _SDA2_.&lt;br /&gt;
* R13 (_SDA_BASE_) - This is the read / write _SDA_.&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;mall &#039;&#039;&#039;D&#039;&#039;&#039;ata &#039;&#039;&#039;A&#039;&#039;&#039;nchors are used with a signed short offset (-0x8000 à +0x7fff).&lt;br /&gt;
* -0x8000(R13) = address of .sdata followed by .sbss&lt;br /&gt;
* -0x8000(R2) = address of .sdata2 followed by .sbss2&lt;br /&gt;
* R1 = often the .sbss2 end address + 0x10000&lt;br /&gt;
&lt;br /&gt;
So often only a part of available SDA negative offsets are used for R2 and R13 using -0x8000 at start.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== USA: ===&lt;br /&gt;
Entry point: 80003154&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
 | Section | Offset   | Address  | Length   | Used  |&lt;br /&gt;
 |---------|----------|----------|----------|-------|&lt;br /&gt;
 | text0   | 00000100 | 80003100 | 000024e0 | True  |&lt;br /&gt;
 | text1   | 000025e0 | 800055e0 | 002aab80 | True  |&lt;br /&gt;
 | text2   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text3   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text4   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text5   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text6   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data7   | 002ad160 | 802b0160 | 00000020 | True  |&lt;br /&gt;
 | data8   | 002ad180 | 802b0180 | 00000020 | True  |&lt;br /&gt;
 | data9   | 002ad1a0 | 802b01a0 | 0000acc0 | True  |&lt;br /&gt;
 | data10  | 002b7e60 | 802bae60 | 000f42c0 | True  |&lt;br /&gt;
 | data11  | 003ac120 | 804335a0 | 00002b20 | True  |&lt;br /&gt;
 | data12  | 003aec40 | 80436a20 | 00006ae0 | True  |&lt;br /&gt;
 | data13  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data14  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data15  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data16  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data17  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
* bss: address:803af140 length:0008e3e8&lt;br /&gt;
* R1 = 8044d528&lt;br /&gt;
* R2 = 8043ea20&lt;br /&gt;
* R13 = 8043b5a0&lt;br /&gt;
&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
 | Section     | beg_addr | end_addr | length   |&lt;br /&gt;
 |-------------|----------|----------|----------|&lt;br /&gt;
 | system      | 80000000 | 80003100 | 00003100 |&lt;br /&gt;
 | .text0      | 80003100 | 800055e0 | 000024e0 |&lt;br /&gt;
 | .text1      | 800055e0 | 802b0160 | 002aab80 |&lt;br /&gt;
 | .ctors      | 802b0160 | 802b0180 | 00000020 |&lt;br /&gt;
 | .dtors      | 802b0180 | 802b01a0 | 00000020 |&lt;br /&gt;
 | .rodata     | 802b01a0 | 802bae60 | 0000acc0 |&lt;br /&gt;
 | .data       | 802bae60 | 803af120 | 000f42c0 |&lt;br /&gt;
 | empty       | 803af120 | 803af140 | 00000020 |&lt;br /&gt;
 | .bss        | 803af140 | 804335a0 | 00084460 |&lt;br /&gt;
 | .sdata      | 804335a0 | 804360c0 | 00002b20 |&lt;br /&gt;
 | .sbss       | 804360c0 | 80436a20 | 00000960 |&lt;br /&gt;
 | .sdata2     | 80436a20 | 8043d500 | 00006ae0 |&lt;br /&gt;
 | .sbss2      | 8043d500 | 8043d528 | 00000028 |&lt;br /&gt;
 | stack       | 8043d528 | 8044d528 | 00010000 |&lt;br /&gt;
 | empty       | 8044d528 | 8044d540 | 00000018 |&lt;br /&gt;
 | ArenaLo     | 8044d540 |          |          |&lt;br /&gt;
 | apploader   | 81200000 |        ? |        ? |&lt;br /&gt;
 | Bootrom/IPL | 81300000 |        ? |        ? |&lt;br /&gt;
 | ArenaHi     |          | 817fffa0 |          |&lt;br /&gt;
 | FST         | 817fffa0 | 81800000 | 00500000 |&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== EU: ===&lt;br /&gt;
Entry point: 80003154&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
 | Section | Offset   | Address  | Length   | Used  |&lt;br /&gt;
 |---------|----------|----------|----------|-------|&lt;br /&gt;
 | text0   | 00000100 | 80003100 | 000024e0 | True  |&lt;br /&gt;
 | text1   | 000025e0 | 800055e0 | 002ac800 | True  |&lt;br /&gt;
 | text2   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text3   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text4   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text5   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text6   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data7   | 002aede0 | 802b1de0 | 00000020 | True  |&lt;br /&gt;
 | data8   | 002aee00 | 802b1e00 | 00000020 | True  |&lt;br /&gt;
 | data9   | 002aee20 | 802b1e20 | 0000f060 | True  |&lt;br /&gt;
 | data10  | 002bde80 | 802c0e80 | 000f5d40 | True  |&lt;br /&gt;
 | data11  | 003b3bc0 | 8043cbe0 | 00002b20 | True  |&lt;br /&gt;
 | data12  | 003b66e0 | 80440080 | 00006d20 | True  |&lt;br /&gt;
 | data13  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data14  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data15  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data16  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data17  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
* bss: address:803b6bc0 length:00090208&lt;br /&gt;
* R1 = 80456dc8&lt;br /&gt;
* R2 = 80448080&lt;br /&gt;
* R13 = 80444be0&lt;br /&gt;
&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
 | Section     | beg_addr | end_addr | length   |&lt;br /&gt;
 |-------------|----------|----------|----------|&lt;br /&gt;
 | system      | 80000000 | 80003100 | 00003100 |&lt;br /&gt;
 | .text0      | 80003100 | 800055e0 | 000024e0 |&lt;br /&gt;
 | .text1      | 800055e0 | 802b1de0 | 002ac800 |&lt;br /&gt;
 | .ctors      | 802b1de0 | 802b1e00 | 00000020 |&lt;br /&gt;
 | .dtors      | 802b1e00 | 802b1e20 | 00000020 |&lt;br /&gt;
 | .rodata     | 802b1e20 | 802c0e80 | 0000f060 |&lt;br /&gt;
 | .data       | 802c0e80 | 803b6bc0 | 000f5d40 |&lt;br /&gt;
 | .bss        | 803b6bc0 | 8043cbe0 | 00086020 |&lt;br /&gt;
 | .sdata      | 8043cbe0 | 8043f700 | 00002b20 |&lt;br /&gt;
 | .sbss       | 8043f700 | 80440080 | 00000980 |&lt;br /&gt;
 | .sdata2     | 80440080 | 80446da0 | 00006d20 |&lt;br /&gt;
 | .sbss2      | 80446da0 | 80446dc8 | 00000028 |&lt;br /&gt;
 | stack       | 80446dc8 | 80456dc8 | 00010000 |&lt;br /&gt;
 | empty       | 80456dc8 | 80456de0 | 00000018 |&lt;br /&gt;
 | ArenaLo     | 80456de0 |          |          |&lt;br /&gt;
 | apploader   | 81200000 |        ? |        ? |&lt;br /&gt;
 | Bootrom/IPL | 81300000 |        ? |        ? |&lt;br /&gt;
 | ArenaHi     |          | 817fff40 |          |&lt;br /&gt;
 | FST         | 817fff40 | 81800000 | 000000C0 |&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
80593A00 -&amp;gt; 80598040 Wharehouse&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== JAP: ===&lt;br /&gt;
Entry point: 80003154&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
 | Section | Offset   | Address  | Length   | Used  |&lt;br /&gt;
 |---------|----------|----------|----------|-------|&lt;br /&gt;
 | text0   | 00000100 | 80003100 | 000024e0 | True  |&lt;br /&gt;
 | text1   | 000025e0 | 800055e0 | 002aab20 | True  |&lt;br /&gt;
 | text2   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text3   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text4   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text5   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text6   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data7   | 002ad100 | 802b0100 | 00000020 | True  |&lt;br /&gt;
 | data8   | 002ad120 | 802b0120 | 00000020 | True  |&lt;br /&gt;
 | data9   | 002ad140 | 802b0140 | 0000a2e0 | True  |&lt;br /&gt;
 | data10  | 002b7420 | 802ba420 | 000f3e60 | True  |&lt;br /&gt;
 | data11  | 003ab280 | 804326e0 | 00002b00 | True  |&lt;br /&gt;
 | data12  | 003add80 | 80435b40 | 00006b60 | True  |&lt;br /&gt;
 | data13  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data14  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data15  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data16  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data17  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
* bss: address:803ae280 length:0008e448&lt;br /&gt;
* R1 = 8044c6c8&lt;br /&gt;
* R2 = 8043db40&lt;br /&gt;
* R13 = 8043a6e0 &lt;br /&gt;
&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
 | Section     | beg_addr | end_addr | length   |&lt;br /&gt;
 |-------------|----------|----------|----------|&lt;br /&gt;
 | system      | 80000000 | 80003100 | 00003100 |&lt;br /&gt;
 | .text0      | 80003100 | 800055e0 | 000024e0 |&lt;br /&gt;
 | .text1      | 800055e0 | 802b0100 | 002aab20 |&lt;br /&gt;
 | .ctors      | 802b0100 | 802b0120 | 00000020 |&lt;br /&gt;
 | .dtors      | 802b0120 | 802b0140 | 00000020 |&lt;br /&gt;
 | .rodata     | 802b0140 | 802ba420 | 0000a2e0 |&lt;br /&gt;
 | .data       | 802ba420 | 803ae280 | 000f3e60 |&lt;br /&gt;
 | .bss        | 803ae280 | 804326e0 | 00084460 |&lt;br /&gt;
 | .sdata      | 804326e0 | 804351e0 | 00002b00 |&lt;br /&gt;
 | .sbss       | 804351e0 | 80435b40 | 00000960 |&lt;br /&gt;
 | .sdata2     | 80435b40 | 8043c6a0 | 00006b60 |&lt;br /&gt;
 | .sbss2      | 8043c6a0 | 8043c6c8 | 00000028 |&lt;br /&gt;
 | stack       | 8043c6c8 | 8044c6c8 | 00010000 |&lt;br /&gt;
 | empty       | 8044c6c8 | 8044c6e0 | 00000018 |&lt;br /&gt;
 | ArenaLo     | 8044c6e0 |          |          |&lt;br /&gt;
 | apploader   | 81200000 |        ? |        ? |&lt;br /&gt;
 | Bootrom/IPL | 81300000 |        ? |        ? |&lt;br /&gt;
 | ArenaHi     |          | 817fffa0 |          |&lt;br /&gt;
 | FST         | 817fffa0 | 81800000 | 00000060 |&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Symbol map ==&lt;br /&gt;
The symbol map allows to put names on procedures and datas. It can be loaded in dolphin emulator in debug mode with the .map file format.&lt;br /&gt;
&lt;br /&gt;
Symbol map USA: https://github.com/Virtual-World-RE/NeoGF/blob/main/data/GG4E-CSM-20220412.map&lt;br /&gt;
&lt;br /&gt;
== MetroTRK ==&lt;br /&gt;
&lt;br /&gt;
MetroTRK can be activated by patching the bi2.bin DebugFlag and also by patching the following addresses to start the debugger in BBA (&#039;&#039;&#039;B&#039;&#039;&#039;road&#039;&#039;&#039;B&#039;&#039;&#039;and &#039;&#039;&#039;A&#039;&#039;&#039;dapter?) mode:&lt;br /&gt;
* USA: Put a breakpoint at 80003190 then set r3 to 1&lt;br /&gt;
* EU:  Put a breakpoint at 800031C0 then set r7 to 4&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;&lt;br /&gt;
The [https://www.gc-forever.com/wiki/index.php?title=Apploader apploader reverse engineering] shows that there is debug vars in [[GCM (File format)|GCM/iso]] system files. [https://github.com/Virtual-World-RE/NeoGF/tree/main/gcmtool gcmtool.py] allow to patch them.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SDK &amp;amp; libs ==&lt;br /&gt;
All libs and SDK are staticly linked inside the dol.&lt;br /&gt;
&lt;br /&gt;
We found these libs and SDK:&lt;br /&gt;
* GCN SDK - Base dolphin SDK.&lt;br /&gt;
* Sysdolphin base library: Hal SysDolphin (HSD) Graphic and physic engine - https://github.com/doldecomp/melee/tree/master/src/sysdolphin/baselib&lt;br /&gt;
* MetroTRK: Target Resident Debugging Kernel for embedded systems. It&#039;s an embedded Kernel for debug.&lt;br /&gt;
* Metrowerks CW Runtime library: CodeWarrior: Metrowerks Standard Library and C/C++ Runtime&lt;br /&gt;
* And from ADXT/GC to CRI CFT/GC: It seems to be audio and video codecs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== H and C files ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
All 3 iso contains following .h and .c symbols in the .data, .rodata, .sdata and .sdata2. The EU version contains also the symbol &amp;quot;objalloc.h&amp;quot;.&lt;br /&gt;
 aobj.h&lt;br /&gt;
 cobj.h&lt;br /&gt;
 jobj.h&lt;br /&gt;
 lobj.h&lt;br /&gt;
 object.h&lt;br /&gt;
 &lt;br /&gt;
 GCN_Mem_Alloc.c&lt;br /&gt;
 aobj.c&lt;br /&gt;
 bytecode.c&lt;br /&gt;
 class.c&lt;br /&gt;
 cobj.c&lt;br /&gt;
 displayfunc.c&lt;br /&gt;
 dobj.c&lt;br /&gt;
 dvd.c&lt;br /&gt;
 dvdfs.c&lt;br /&gt;
 fobj.c&lt;br /&gt;
 fog.c&lt;br /&gt;
 hash.c&lt;br /&gt;
 id.c&lt;br /&gt;
 initialize.c&lt;br /&gt;
 jobj.c&lt;br /&gt;
 list.c&lt;br /&gt;
 lobj.c&lt;br /&gt;
 memory.c&lt;br /&gt;
 mobj.c&lt;br /&gt;
 mtx.c&lt;br /&gt;
 objalloc.c&lt;br /&gt;
 perf.c&lt;br /&gt;
 pobj.c&lt;br /&gt;
 robj.c&lt;br /&gt;
 tev.c&lt;br /&gt;
 texp.c&lt;br /&gt;
 texpdag.c&lt;br /&gt;
 tobj.c&lt;br /&gt;
 tpl.c&lt;br /&gt;
 util.c&lt;br /&gt;
 vi.c&lt;br /&gt;
 video.c&lt;br /&gt;
 wobj.c&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== Strings USA ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Strings list found in the dol and allowing to find libs / SDK:&lt;br /&gt;
 MetroTRK for GAMECUBE v2.0&lt;br /&gt;
 Metrowerks CW runtime library&lt;br /&gt;
 ADXT/GC Ver.8.57       Build:Feb 6 2003 18:03:46&lt;br /&gt;
 SKG/GC Ver.0.61        Build:Feb 6 2003 18:03:49&lt;br /&gt;
 ADXGC Ver.1.21         Build:Feb 6 2003 18:04:00&lt;br /&gt;
 ADXGCSDK Ver.05Sep2002 Build:Feb 6 2003 18:04:01&lt;br /&gt;
 ADXF/GC Ver.7.01       Build:Feb 6 2003 18:02:45&lt;br /&gt;
 CVFS/GC Ver.2.33       Build:Feb 6 2003 18:02:35&lt;br /&gt;
 GCCI Ver.1.09          Build:Feb 6 2003 18:02:33&lt;br /&gt;
 LSC/GC Ver.2.10        Build:Feb 6 2003 18:02:32&lt;br /&gt;
 SJ/GC Ver.6.10         Build:Feb 6 2003 18:02:53&lt;br /&gt;
 SVM/GC Ver.1.51        Build:Feb 6 2003 18:02:51&lt;br /&gt;
 MFCI/GC Ver.1.04       Build:Feb 6 2003 18:03:11&lt;br /&gt;
 AXRNA Ver.1.02         Build:Feb 6 2003 18:03:43&lt;br /&gt;
 CRI SUD/GC Ver.0.02    Build:Feb 6 2003 14:30:18&lt;br /&gt;
 CRI SFX/GC Ver.1.22    Build:Feb 6 2003 14:30:16&lt;br /&gt;
 CRI DCT/GC Ver.1.803   Build:Feb 6 2003 14:28:46&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI MPS/GC Ver.1.669   Build:Feb 6 2003 14:28:50&lt;br /&gt;
 CRI MPV/GC Ver.1.840   Build:Feb 6 2003 14:28:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFD/GC Ver.1.842   Build:Feb 6 2003 14:29:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFH/GC Ver.1.12    Build:Feb 6 2003 14:30:00&lt;br /&gt;
 MWSFD/GC Ver.2.62      Build:Feb 6 2003 14:28:42&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI CFT/GC Ver.1.24    Build:Feb 6 2003 14:28:33&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK – OS   release build: Apr 17 2003 12:33:06 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 Dolphin OS Kernel built : %s %s Apr 17 2003 12:33:06&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK – EXI  release build: Apr 17 2003 12:33:17 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - SI   release build: Apr 17 2003 12:33:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DVD  release build: Apr 22 2003 15:49:00 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - VI   release build: Apr 17 2003 12:33:22 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - PAD  release build: Apr 17 2003 12:33:44 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AI   release build: Apr 17 2003 12:33:54 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AR   release build: Apr 17 2003 12:33:55 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - ARQ  release build: Apr 17 2003 12:33:56 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AX   release build: Apr 17 2003 12:33:57 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DSP  release build: Apr 17 2003 12:34:16 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - CARD release build: Apr 17 2003 12:34:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - GX   release build: Apr 21 2003 14:55:46 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 sysdolphin_base_library&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== Strings EU ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Strings list found in the dol and allowing to find libs / SDK:&lt;br /&gt;
 Metrowerks Target Resident Kernel for PowerPC&lt;br /&gt;
 MetroTRK for GAMECUBE v2.0&lt;br /&gt;
 Metrowerks CW runtime library initializing default heap&lt;br /&gt;
 ADXT/GC     Ver.8.57 Build:Feb       6 2003 18:03:46&lt;br /&gt;
 SKG/GC      Ver.0.61 Build:Feb       6 2003 18:03:49&lt;br /&gt;
 ADXGC       Ver.1.21 Build:Feb       6 2003 18:04:00&lt;br /&gt;
 ADXGCSDK    Ver.05Sep2002 Build:Feb  6 2003 18:04:01&lt;br /&gt;
 ADXF/GC     Ver.7.01 Build:Feb       6 2003 18:02:45&lt;br /&gt;
 CVFS/GC     Ver.2.33 Build:Feb       6 2003 18:02:35&lt;br /&gt;
 GCCI        Ver.1.09 Build:Feb       6 2003 18:02:33&lt;br /&gt;
 LSC/GC      Ver.2.10 Build:Feb       6 2003 18:02:32&lt;br /&gt;
 SJ/GC       Ver.6.10 Build:Feb       6 2003 18:02:53&lt;br /&gt;
 SVM/GC      Ver.1.51 Build:Feb       6 2003 18:02:51&lt;br /&gt;
 MFCI/GC     Ver.1.04 Build:Feb       6 2003 18:03:11&lt;br /&gt;
 AXRNA       Ver.1.02 Build:Feb       6 2003 18:03:43&lt;br /&gt;
 CRI SUD/GC  Ver.0.02 Build:Feb       6 2003 14:30:18&lt;br /&gt;
 CRI SFX/GC  Ver.1.22 Build:Feb       6 2003 14:30:16&lt;br /&gt;
 CRI DCT/GC  Ver.1.803 Build:Feb      6 2003 14:28:46&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI MPS/GC  Ver.1.669 Build:Feb      6 2003 14:28:50&lt;br /&gt;
 CRI MPV/GC  Ver.1.840 Build:Feb      6 2003 14:28:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFD/GC  Ver.1.842 Build:Feb      6 2003 14:29:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFH/GC  Ver.1.12 Build:Feb       6 2003 14:30:00&lt;br /&gt;
 MWSFD/GC    Ver.2.62 Build:Feb       6 2003 14:28:42&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI CFT/GC  Ver.1.24 Build:Feb        6 2003 14:28:33&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - OS   release build: Apr 17 2003 12:33:06 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 Dolphin OS Kernel built : Apr 17 2003 12:33:06&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - EXI  release build: Apr 17 2003 12:33:17 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - SI   release build: Apr 17 2003 12:33:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DVD  release build: Apr 22 2003 15:49:00 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - VI   release build: Apr 17 2003 12:33:22 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - PAD  release build: Apr 17 2003 12:33:44 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AI   release build: Apr 17 2003 12:33:54 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AR   release build: Apr 17 2003 12:33:55 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - ARQ  release build: Apr 17 2003 12:33:56 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AX   release build: Apr 17 2003 12:33:57 (0x2301) &amp;gt;&amp;gt; &lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DSP  release build: Apr 17 2003 12:34:16 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 DSPInit(): Build Date: Apr 17 2003 12:34:16&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - CARD release build: Apr 17 2003 12:34:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - GX   release build: Apr 21 2003 14:55:46 (0x2301) &amp;gt;&amp;gt;  &lt;br /&gt;
 sysdolphin_base_library&lt;br /&gt;
 HSD_INIT_HEAP_MAX_NUM    is obsolete since 1.3.0.0.&lt;br /&gt;
 HSD_INIT_AUDIO_HEAP_SIZE is obsolete since 1.3.0.0.&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== Strings JAP ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Strings list found in the dol and allowing to find libs / SDK:&lt;br /&gt;
 Metrowerks Target Resident Kernel for PowerPC&lt;br /&gt;
 MetroTRK for GAMECUBE v2.0&lt;br /&gt;
 ADXT/GC Ver.8.57       Build:Feb  6 2003 18:03:46&lt;br /&gt;
 SKG/GC Ver.0.61        Build:Feb  6 2003 18:03:49&lt;br /&gt;
 ADXGC Ver.1.21         Build:Feb  6 2003 18:04:00&lt;br /&gt;
 ADXGCSDK Ver.05Sep2002 Build:Feb  6 2003 18:04:01&lt;br /&gt;
 ADXF/GC Ver.7.01       Build:Feb  6 2003 18:02:45&lt;br /&gt;
 CVFS/GC Ver.2.33       Build:Feb  6 2003 18:02:35&lt;br /&gt;
 GCCI Ver.1.09          Build:Feb  6 2003 18:02:33&lt;br /&gt;
 LSC/GC Ver.2.10        Build:Feb  6 2003 18:02:32&lt;br /&gt;
 SJ/GC Ver.6.10         Build:Feb  6 2003 18:02:53&lt;br /&gt;
 SVM/GC Ver.1.51        Build:Feb  6 2003 18:02:51&lt;br /&gt;
 MFCI/GC Ver.1.04       Build:Feb  6 2003 18:03:11&lt;br /&gt;
 AXRNA Ver.1.02         Build:Feb  6 2003 18:03:43&lt;br /&gt;
 CRI SUD/GC Ver.0.02    Build:Feb  6 2003 14:30:18&lt;br /&gt;
 CRI SFX/GC Ver.1.22    Build:Feb  6 2003 14:30:16&lt;br /&gt;
 CRI DCT/GC Ver.1.803   Build:Feb  6 2003 14:28:46&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI MPS/GC Ver.1.669   Build:Feb  6 2003 14:28:50&lt;br /&gt;
 CRI MPV/GC Ver.1.840   Build:Feb  6 2003 14:28:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFD/GC Ver.1.842   Build:Feb  6 2003 14:29:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFH/GC Ver.1.12    Build:Feb  6 2003 14:30:00&lt;br /&gt;
 MWSFD/GC Ver.2.62      Build:Feb  6 2003 14:28:42&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI CFT/GC Ver.1.24    Build:Feb  6 2003 14:28:33&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - OS   release build: Apr 17 2003 12:33:06 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 Dolphin OS Kernel built : Apr 17 2003 12:33:06&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - EXI  release build: Apr 17 2003 12:33:17 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - SI   release build: Apr 17 2003 12:33:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DVD  release build: Apr 22 2003 15:49:00 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - VI   release build: Apr 17 2003 12:33:22 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - PAD  release build: Apr 17 2003 12:33:44 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AI   release build: Apr 17 2003 12:33:54 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AR   release build: Apr 17 2003 12:33:55 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - ARQ  release build: Apr 17 2003 12:33:56 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AX   release build: Apr 17 2003 12:33:57 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DSP  release build: Apr 17 2003 12:34:16 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - CARD release build: Apr 17 2003 12:34:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - GX   release build: Apr 21 2003 14:55:46 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 sysdolphin_base_library&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:File format]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=DOL_(Gotcha_Force)&amp;diff=1500</id>
		<title>DOL (Gotcha Force)</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=DOL_(Gotcha_Force)&amp;diff=1500"/>
		<updated>2023-10-07T12:59:25Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: /* Memory map */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This article is about Gotcha Force DOL file format and ongoing researches on it. See [[DOL (File format)]] for DOL file format description.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Research | 3| Research on how functions works and how the dol works is nedded. }}&lt;br /&gt;
&lt;br /&gt;
== Memory map ==&lt;br /&gt;
The dol file is mapped in memory and the free available space remaining is next used to create the Arena containing Heaps. For instance we found Warehouse variables in the EU dol mapped in the interval [80593190:80598044[.&lt;br /&gt;
&lt;br /&gt;
So patching the dol is hard because we have to find unused free space in the memory. The [https://www.gc-forever.com/wiki/index.php?title=Apploader apploader reverse engineering] shows that max dol mapping addresses in memory are:&lt;br /&gt;
* 0x80700000  // production boards&lt;br /&gt;
* 0x81200000  // development boards&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;&lt;br /&gt;
In production we can override MetroTRK memory areas or even override apploader trailer before the bootrom/IPL area. Further investigations have to be done on the [[GCM (File format)|iso/GCM]] sys to see how debug memory is mapped in debug mode (apploader vars used in the apploader).&lt;br /&gt;
* Is it possible to know where exactly MetroTRK is mapped?&lt;br /&gt;
* Is there any other libs/datas unused in dol?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* It&#039;s perfectly possible and tested to patch the apploader trailer and raise the trailer size with [[GCM (File format)|GCM/iso]] patch. It gives us 0x100000 bytes available.&lt;br /&gt;
&lt;br /&gt;
The dol entry_point call the __init_registers procedure which will set the reserved following General Purpose Registers:&lt;br /&gt;
* R1 (stack)&lt;br /&gt;
* R2 (_SDA2_BASE_) - This is the read only _SDA2_.&lt;br /&gt;
* R13 (_SDA_BASE_) - This is the read / write _SDA_.&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;mall &#039;&#039;&#039;D&#039;&#039;&#039;ata &#039;&#039;&#039;A&#039;&#039;&#039;nchors are used with a signed short offset (-0x8000 à +0x7fff).&lt;br /&gt;
* -0x8000(R13) = address of .sdata followed by .sbss&lt;br /&gt;
* -0x8000(R2) = address of .sdata2 followed by .sbss2&lt;br /&gt;
* R1 = often the .sbss2 end address + 0x10000&lt;br /&gt;
&lt;br /&gt;
So often only a part of available SDA negative offsets are used for R2 and R13 using -0x8000 at start.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== USA ===&lt;br /&gt;
Entry point: 80003154&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
 | Section | Offset   | Address  | Length   | Used  |&lt;br /&gt;
 |---------|----------|----------|----------|-------|&lt;br /&gt;
 | text0   | 00000100 | 80003100 | 000024e0 | True  |&lt;br /&gt;
 | text1   | 000025e0 | 800055e0 | 002aab80 | True  |&lt;br /&gt;
 | text2   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text3   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text4   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text5   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text6   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data7   | 002ad160 | 802b0160 | 00000020 | True  |&lt;br /&gt;
 | data8   | 002ad180 | 802b0180 | 00000020 | True  |&lt;br /&gt;
 | data9   | 002ad1a0 | 802b01a0 | 0000acc0 | True  |&lt;br /&gt;
 | data10  | 002b7e60 | 802bae60 | 000f42c0 | True  |&lt;br /&gt;
 | data11  | 003ac120 | 804335a0 | 00002b20 | True  |&lt;br /&gt;
 | data12  | 003aec40 | 80436a20 | 00006ae0 | True  |&lt;br /&gt;
 | data13  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data14  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data15  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data16  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data17  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
* bss: address:803af140 length:0008e3e8&lt;br /&gt;
* R1 = 8044d528&lt;br /&gt;
* R2 = 8043ea20&lt;br /&gt;
* R13 = 8043b5a0&lt;br /&gt;
&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
 | Section     | beg_addr | end_addr | length   |&lt;br /&gt;
 |-------------|----------|----------|----------|&lt;br /&gt;
 | system      | 80000000 | 80003100 | 00003100 |&lt;br /&gt;
 | .text0      | 80003100 | 800055e0 | 000024e0 |&lt;br /&gt;
 | .text1      | 800055e0 | 802b0160 | 002aab80 |&lt;br /&gt;
 | .ctors      | 802b0160 | 802b0180 | 00000020 |&lt;br /&gt;
 | .dtors      | 802b0180 | 802b01a0 | 00000020 |&lt;br /&gt;
 | .rodata     | 802b01a0 | 802bae60 | 0000acc0 |&lt;br /&gt;
 | .data       | 802bae60 | 803af120 | 000f42c0 |&lt;br /&gt;
 | empty       | 803af120 | 803af140 | 00000020 |&lt;br /&gt;
 | .bss        | 803af140 | 804335a0 | 00084460 |&lt;br /&gt;
 | .sdata      | 804335a0 | 804360c0 | 00002b20 |&lt;br /&gt;
 | .sbss       | 804360c0 | 80436a20 | 00000960 |&lt;br /&gt;
 | .sdata2     | 80436a20 | 8043d500 | 00006ae0 |&lt;br /&gt;
 | .sbss2      | 8043d500 | 8043d528 | 00000028 |&lt;br /&gt;
 | stack       | 8043d528 | 8044d528 | 00010000 |&lt;br /&gt;
 | empty       | 8044d528 | 8044d540 | 00000018 |&lt;br /&gt;
 | ArenaLo     | 8044d540 |          |          |&lt;br /&gt;
 | apploader   | 81200000 |        ? |        ? |&lt;br /&gt;
 | Bootrom/IPL | 81300000 |        ? |        ? |&lt;br /&gt;
 | ArenaHi     |          | 817fffa0 |          |&lt;br /&gt;
 | FST         | 817fffa0 | 81800000 | 00500000 |&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== EU ===&lt;br /&gt;
Entry point: 80003154&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
 | Section | Offset   | Address  | Length   | Used  |&lt;br /&gt;
 |---------|----------|----------|----------|-------|&lt;br /&gt;
 | text0   | 00000100 | 80003100 | 000024e0 | True  |&lt;br /&gt;
 | text1   | 000025e0 | 800055e0 | 002ac800 | True  |&lt;br /&gt;
 | text2   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text3   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text4   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text5   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text6   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data7   | 002aede0 | 802b1de0 | 00000020 | True  |&lt;br /&gt;
 | data8   | 002aee00 | 802b1e00 | 00000020 | True  |&lt;br /&gt;
 | data9   | 002aee20 | 802b1e20 | 0000f060 | True  |&lt;br /&gt;
 | data10  | 002bde80 | 802c0e80 | 000f5d40 | True  |&lt;br /&gt;
 | data11  | 003b3bc0 | 8043cbe0 | 00002b20 | True  |&lt;br /&gt;
 | data12  | 003b66e0 | 80440080 | 00006d20 | True  |&lt;br /&gt;
 | data13  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data14  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data15  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data16  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data17  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
* bss: address:803b6bc0 length:00090208&lt;br /&gt;
* R1 = 80456dc8&lt;br /&gt;
* R2 = 80448080&lt;br /&gt;
* R13 = 80444be0&lt;br /&gt;
&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
 | Section     | beg_addr | end_addr | length   |&lt;br /&gt;
 |-------------|----------|----------|----------|&lt;br /&gt;
 | system      | 80000000 | 80003100 | 00003100 |&lt;br /&gt;
 | .text0      | 80003100 | 800055e0 | 000024e0 |&lt;br /&gt;
 | .text1      | 800055e0 | 802b1de0 | 002ac800 |&lt;br /&gt;
 | .ctors      | 802b1de0 | 802b1e00 | 00000020 |&lt;br /&gt;
 | .dtors      | 802b1e00 | 802b1e20 | 00000020 |&lt;br /&gt;
 | .rodata     | 802b1e20 | 802c0e80 | 0000f060 |&lt;br /&gt;
 | .data       | 802c0e80 | 803b6bc0 | 000f5d40 |&lt;br /&gt;
 | .bss        | 803b6bc0 | 8043cbe0 | 00086020 |&lt;br /&gt;
 | .sdata      | 8043cbe0 | 8043f700 | 00002b20 |&lt;br /&gt;
 | .sbss       | 8043f700 | 80440080 | 00000980 |&lt;br /&gt;
 | .sdata2     | 80440080 | 80446da0 | 00006d20 |&lt;br /&gt;
 | .sbss2      | 80446da0 | 80446dc8 | 00000028 |&lt;br /&gt;
 | stack       | 80446dc8 | 80456dc8 | 00010000 |&lt;br /&gt;
 | empty       | 80456dc8 | 80456de0 | 00000018 |&lt;br /&gt;
 | ArenaLo     | 80456de0 |          |          |&lt;br /&gt;
 | apploader   | 81200000 |        ? |        ? |&lt;br /&gt;
 | Bootrom/IPL | 81300000 |        ? |        ? |&lt;br /&gt;
 | ArenaHi     |          | 817fff40 |          |&lt;br /&gt;
 | FST         | 817fff40 | 81800000 | 000000C0 |&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
80593A00 -&amp;gt; 80598040 Wharehouse&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== JAP ===&lt;br /&gt;
Entry point: 80003154&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
 | Section | Offset   | Address  | Length   | Used  |&lt;br /&gt;
 |---------|----------|----------|----------|-------|&lt;br /&gt;
 | text0   | 00000100 | 80003100 | 000024e0 | True  |&lt;br /&gt;
 | text1   | 000025e0 | 800055e0 | 002aab20 | True  |&lt;br /&gt;
 | text2   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text3   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text4   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text5   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text6   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data7   | 002ad100 | 802b0100 | 00000020 | True  |&lt;br /&gt;
 | data8   | 002ad120 | 802b0120 | 00000020 | True  |&lt;br /&gt;
 | data9   | 002ad140 | 802b0140 | 0000a2e0 | True  |&lt;br /&gt;
 | data10  | 002b7420 | 802ba420 | 000f3e60 | True  |&lt;br /&gt;
 | data11  | 003ab280 | 804326e0 | 00002b00 | True  |&lt;br /&gt;
 | data12  | 003add80 | 80435b40 | 00006b60 | True  |&lt;br /&gt;
 | data13  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data14  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data15  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data16  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data17  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
* bss: address:803ae280 length:0008e448&lt;br /&gt;
* R1 = 8044c6c8&lt;br /&gt;
* R2 = 8043db40&lt;br /&gt;
* R13 = 8043a6e0 &lt;br /&gt;
&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
 | Section     | beg_addr | end_addr | length   |&lt;br /&gt;
 |-------------|----------|----------|----------|&lt;br /&gt;
 | system      | 80000000 | 80003100 | 00003100 |&lt;br /&gt;
 | .text0      | 80003100 | 800055e0 | 000024e0 |&lt;br /&gt;
 | .text1      | 800055e0 | 802b0100 | 002aab20 |&lt;br /&gt;
 | .ctors      | 802b0100 | 802b0120 | 00000020 |&lt;br /&gt;
 | .dtors      | 802b0120 | 802b0140 | 00000020 |&lt;br /&gt;
 | .rodata     | 802b0140 | 802ba420 | 0000a2e0 |&lt;br /&gt;
 | .data       | 802ba420 | 803ae280 | 000f3e60 |&lt;br /&gt;
 | .bss        | 803ae280 | 804326e0 | 00084460 |&lt;br /&gt;
 | .sdata      | 804326e0 | 804351e0 | 00002b00 |&lt;br /&gt;
 | .sbss       | 804351e0 | 80435b40 | 00000960 |&lt;br /&gt;
 | .sdata2     | 80435b40 | 8043c6a0 | 00006b60 |&lt;br /&gt;
 | .sbss2      | 8043c6a0 | 8043c6c8 | 00000028 |&lt;br /&gt;
 | stack       | 8043c6c8 | 8044c6c8 | 00010000 |&lt;br /&gt;
 | empty       | 8044c6c8 | 8044c6e0 | 00000018 |&lt;br /&gt;
 | ArenaLo     | 8044c6e0 |          |          |&lt;br /&gt;
 | apploader   | 81200000 |        ? |        ? |&lt;br /&gt;
 | Bootrom/IPL | 81300000 |        ? |        ? |&lt;br /&gt;
 | ArenaHi     |          | 817fffa0 |          |&lt;br /&gt;
 | FST         | 817fffa0 | 81800000 | 00000060 |&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Symbol map ==&lt;br /&gt;
The symbol map allows to put names on procedures and datas. It can be loaded in dolphin emulator in debug mode with the .map file format.&lt;br /&gt;
&lt;br /&gt;
Symbol map USA: https://github.com/Virtual-World-RE/NeoGF/blob/main/data/GG4E-CSM-20220412.map&lt;br /&gt;
&lt;br /&gt;
== MetroTRK ==&lt;br /&gt;
&lt;br /&gt;
MetroTRK can be activated by patching the bi2.bin DebugFlag and also by patching the following addresses to start the debugger in BBA (&#039;&#039;&#039;B&#039;&#039;&#039;road&#039;&#039;&#039;B&#039;&#039;&#039;and &#039;&#039;&#039;A&#039;&#039;&#039;dapter?) mode:&lt;br /&gt;
* USA: Put a breakpoint at 80003190 then set r3 to 1&lt;br /&gt;
* EU:  Put a breakpoint at 800031C0 then set r7 to 4&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;&lt;br /&gt;
The [https://www.gc-forever.com/wiki/index.php?title=Apploader apploader reverse engineering] shows that there is debug vars in [[GCM (File format)|GCM/iso]] system files. [https://github.com/Virtual-World-RE/NeoGF/tree/main/gcmtool gcmtool.py] allow to patch them.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SDK &amp;amp; libs ==&lt;br /&gt;
All libs and SDK are staticly linked inside the dol.&lt;br /&gt;
&lt;br /&gt;
We found these libs and SDK:&lt;br /&gt;
* GCN SDK - Base dolphin SDK.&lt;br /&gt;
* Sysdolphin base library: Hal SysDolphin (HSD) Graphic and physic engine - https://github.com/doldecomp/melee/tree/master/src/sysdolphin/baselib&lt;br /&gt;
* MetroTRK: Target Resident Debugging Kernel for embedded systems. It&#039;s an embedded Kernel for debug.&lt;br /&gt;
* Metrowerks CW Runtime library: CodeWarrior: Metrowerks Standard Library and C/C++ Runtime&lt;br /&gt;
* And from ADXT/GC to CRI CFT/GC: It seems to be audio and video codecs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== H and C files ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
All 3 iso contains following .h and .c symbols in the .data, .rodata, .sdata and .sdata2. The EU version contains also the symbol &amp;quot;objalloc.h&amp;quot;.&lt;br /&gt;
 aobj.h&lt;br /&gt;
 cobj.h&lt;br /&gt;
 jobj.h&lt;br /&gt;
 lobj.h&lt;br /&gt;
 object.h&lt;br /&gt;
 &lt;br /&gt;
 GCN_Mem_Alloc.c&lt;br /&gt;
 aobj.c&lt;br /&gt;
 bytecode.c&lt;br /&gt;
 class.c&lt;br /&gt;
 cobj.c&lt;br /&gt;
 displayfunc.c&lt;br /&gt;
 dobj.c&lt;br /&gt;
 dvd.c&lt;br /&gt;
 dvdfs.c&lt;br /&gt;
 fobj.c&lt;br /&gt;
 fog.c&lt;br /&gt;
 hash.c&lt;br /&gt;
 id.c&lt;br /&gt;
 initialize.c&lt;br /&gt;
 jobj.c&lt;br /&gt;
 list.c&lt;br /&gt;
 lobj.c&lt;br /&gt;
 memory.c&lt;br /&gt;
 mobj.c&lt;br /&gt;
 mtx.c&lt;br /&gt;
 objalloc.c&lt;br /&gt;
 perf.c&lt;br /&gt;
 pobj.c&lt;br /&gt;
 robj.c&lt;br /&gt;
 tev.c&lt;br /&gt;
 texp.c&lt;br /&gt;
 texpdag.c&lt;br /&gt;
 tobj.c&lt;br /&gt;
 tpl.c&lt;br /&gt;
 util.c&lt;br /&gt;
 vi.c&lt;br /&gt;
 video.c&lt;br /&gt;
 wobj.c&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== Strings USA ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Strings list found in the dol and allowing to find libs / SDK:&lt;br /&gt;
 MetroTRK for GAMECUBE v2.0&lt;br /&gt;
 Metrowerks CW runtime library&lt;br /&gt;
 ADXT/GC Ver.8.57       Build:Feb 6 2003 18:03:46&lt;br /&gt;
 SKG/GC Ver.0.61        Build:Feb 6 2003 18:03:49&lt;br /&gt;
 ADXGC Ver.1.21         Build:Feb 6 2003 18:04:00&lt;br /&gt;
 ADXGCSDK Ver.05Sep2002 Build:Feb 6 2003 18:04:01&lt;br /&gt;
 ADXF/GC Ver.7.01       Build:Feb 6 2003 18:02:45&lt;br /&gt;
 CVFS/GC Ver.2.33       Build:Feb 6 2003 18:02:35&lt;br /&gt;
 GCCI Ver.1.09          Build:Feb 6 2003 18:02:33&lt;br /&gt;
 LSC/GC Ver.2.10        Build:Feb 6 2003 18:02:32&lt;br /&gt;
 SJ/GC Ver.6.10         Build:Feb 6 2003 18:02:53&lt;br /&gt;
 SVM/GC Ver.1.51        Build:Feb 6 2003 18:02:51&lt;br /&gt;
 MFCI/GC Ver.1.04       Build:Feb 6 2003 18:03:11&lt;br /&gt;
 AXRNA Ver.1.02         Build:Feb 6 2003 18:03:43&lt;br /&gt;
 CRI SUD/GC Ver.0.02    Build:Feb 6 2003 14:30:18&lt;br /&gt;
 CRI SFX/GC Ver.1.22    Build:Feb 6 2003 14:30:16&lt;br /&gt;
 CRI DCT/GC Ver.1.803   Build:Feb 6 2003 14:28:46&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI MPS/GC Ver.1.669   Build:Feb 6 2003 14:28:50&lt;br /&gt;
 CRI MPV/GC Ver.1.840   Build:Feb 6 2003 14:28:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFD/GC Ver.1.842   Build:Feb 6 2003 14:29:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFH/GC Ver.1.12    Build:Feb 6 2003 14:30:00&lt;br /&gt;
 MWSFD/GC Ver.2.62      Build:Feb 6 2003 14:28:42&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI CFT/GC Ver.1.24    Build:Feb 6 2003 14:28:33&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK – OS   release build: Apr 17 2003 12:33:06 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 Dolphin OS Kernel built : %s %s Apr 17 2003 12:33:06&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK – EXI  release build: Apr 17 2003 12:33:17 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - SI   release build: Apr 17 2003 12:33:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DVD  release build: Apr 22 2003 15:49:00 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - VI   release build: Apr 17 2003 12:33:22 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - PAD  release build: Apr 17 2003 12:33:44 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AI   release build: Apr 17 2003 12:33:54 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AR   release build: Apr 17 2003 12:33:55 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - ARQ  release build: Apr 17 2003 12:33:56 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AX   release build: Apr 17 2003 12:33:57 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DSP  release build: Apr 17 2003 12:34:16 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - CARD release build: Apr 17 2003 12:34:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - GX   release build: Apr 21 2003 14:55:46 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 sysdolphin_base_library&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== Strings EU ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Strings list found in the dol and allowing to find libs / SDK:&lt;br /&gt;
 Metrowerks Target Resident Kernel for PowerPC&lt;br /&gt;
 MetroTRK for GAMECUBE v2.0&lt;br /&gt;
 Metrowerks CW runtime library initializing default heap&lt;br /&gt;
 ADXT/GC     Ver.8.57 Build:Feb       6 2003 18:03:46&lt;br /&gt;
 SKG/GC      Ver.0.61 Build:Feb       6 2003 18:03:49&lt;br /&gt;
 ADXGC       Ver.1.21 Build:Feb       6 2003 18:04:00&lt;br /&gt;
 ADXGCSDK    Ver.05Sep2002 Build:Feb  6 2003 18:04:01&lt;br /&gt;
 ADXF/GC     Ver.7.01 Build:Feb       6 2003 18:02:45&lt;br /&gt;
 CVFS/GC     Ver.2.33 Build:Feb       6 2003 18:02:35&lt;br /&gt;
 GCCI        Ver.1.09 Build:Feb       6 2003 18:02:33&lt;br /&gt;
 LSC/GC      Ver.2.10 Build:Feb       6 2003 18:02:32&lt;br /&gt;
 SJ/GC       Ver.6.10 Build:Feb       6 2003 18:02:53&lt;br /&gt;
 SVM/GC      Ver.1.51 Build:Feb       6 2003 18:02:51&lt;br /&gt;
 MFCI/GC     Ver.1.04 Build:Feb       6 2003 18:03:11&lt;br /&gt;
 AXRNA       Ver.1.02 Build:Feb       6 2003 18:03:43&lt;br /&gt;
 CRI SUD/GC  Ver.0.02 Build:Feb       6 2003 14:30:18&lt;br /&gt;
 CRI SFX/GC  Ver.1.22 Build:Feb       6 2003 14:30:16&lt;br /&gt;
 CRI DCT/GC  Ver.1.803 Build:Feb      6 2003 14:28:46&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI MPS/GC  Ver.1.669 Build:Feb      6 2003 14:28:50&lt;br /&gt;
 CRI MPV/GC  Ver.1.840 Build:Feb      6 2003 14:28:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFD/GC  Ver.1.842 Build:Feb      6 2003 14:29:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFH/GC  Ver.1.12 Build:Feb       6 2003 14:30:00&lt;br /&gt;
 MWSFD/GC    Ver.2.62 Build:Feb       6 2003 14:28:42&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI CFT/GC  Ver.1.24 Build:Feb        6 2003 14:28:33&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - OS   release build: Apr 17 2003 12:33:06 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 Dolphin OS Kernel built : Apr 17 2003 12:33:06&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - EXI  release build: Apr 17 2003 12:33:17 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - SI   release build: Apr 17 2003 12:33:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DVD  release build: Apr 22 2003 15:49:00 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - VI   release build: Apr 17 2003 12:33:22 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - PAD  release build: Apr 17 2003 12:33:44 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AI   release build: Apr 17 2003 12:33:54 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AR   release build: Apr 17 2003 12:33:55 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - ARQ  release build: Apr 17 2003 12:33:56 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AX   release build: Apr 17 2003 12:33:57 (0x2301) &amp;gt;&amp;gt; &lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DSP  release build: Apr 17 2003 12:34:16 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 DSPInit(): Build Date: Apr 17 2003 12:34:16&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - CARD release build: Apr 17 2003 12:34:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - GX   release build: Apr 21 2003 14:55:46 (0x2301) &amp;gt;&amp;gt;  &lt;br /&gt;
 sysdolphin_base_library&lt;br /&gt;
 HSD_INIT_HEAP_MAX_NUM    is obsolete since 1.3.0.0.&lt;br /&gt;
 HSD_INIT_AUDIO_HEAP_SIZE is obsolete since 1.3.0.0.&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== Strings JAP ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Strings list found in the dol and allowing to find libs / SDK:&lt;br /&gt;
 Metrowerks Target Resident Kernel for PowerPC&lt;br /&gt;
 MetroTRK for GAMECUBE v2.0&lt;br /&gt;
 ADXT/GC Ver.8.57       Build:Feb  6 2003 18:03:46&lt;br /&gt;
 SKG/GC Ver.0.61        Build:Feb  6 2003 18:03:49&lt;br /&gt;
 ADXGC Ver.1.21         Build:Feb  6 2003 18:04:00&lt;br /&gt;
 ADXGCSDK Ver.05Sep2002 Build:Feb  6 2003 18:04:01&lt;br /&gt;
 ADXF/GC Ver.7.01       Build:Feb  6 2003 18:02:45&lt;br /&gt;
 CVFS/GC Ver.2.33       Build:Feb  6 2003 18:02:35&lt;br /&gt;
 GCCI Ver.1.09          Build:Feb  6 2003 18:02:33&lt;br /&gt;
 LSC/GC Ver.2.10        Build:Feb  6 2003 18:02:32&lt;br /&gt;
 SJ/GC Ver.6.10         Build:Feb  6 2003 18:02:53&lt;br /&gt;
 SVM/GC Ver.1.51        Build:Feb  6 2003 18:02:51&lt;br /&gt;
 MFCI/GC Ver.1.04       Build:Feb  6 2003 18:03:11&lt;br /&gt;
 AXRNA Ver.1.02         Build:Feb  6 2003 18:03:43&lt;br /&gt;
 CRI SUD/GC Ver.0.02    Build:Feb  6 2003 14:30:18&lt;br /&gt;
 CRI SFX/GC Ver.1.22    Build:Feb  6 2003 14:30:16&lt;br /&gt;
 CRI DCT/GC Ver.1.803   Build:Feb  6 2003 14:28:46&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI MPS/GC Ver.1.669   Build:Feb  6 2003 14:28:50&lt;br /&gt;
 CRI MPV/GC Ver.1.840   Build:Feb  6 2003 14:28:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFD/GC Ver.1.842   Build:Feb  6 2003 14:29:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFH/GC Ver.1.12    Build:Feb  6 2003 14:30:00&lt;br /&gt;
 MWSFD/GC Ver.2.62      Build:Feb  6 2003 14:28:42&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI CFT/GC Ver.1.24    Build:Feb  6 2003 14:28:33&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - OS   release build: Apr 17 2003 12:33:06 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 Dolphin OS Kernel built : Apr 17 2003 12:33:06&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - EXI  release build: Apr 17 2003 12:33:17 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - SI   release build: Apr 17 2003 12:33:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DVD  release build: Apr 22 2003 15:49:00 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - VI   release build: Apr 17 2003 12:33:22 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - PAD  release build: Apr 17 2003 12:33:44 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AI   release build: Apr 17 2003 12:33:54 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AR   release build: Apr 17 2003 12:33:55 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - ARQ  release build: Apr 17 2003 12:33:56 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AX   release build: Apr 17 2003 12:33:57 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DSP  release build: Apr 17 2003 12:34:16 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - CARD release build: Apr 17 2003 12:34:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - GX   release build: Apr 21 2003 14:55:46 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 sysdolphin_base_library&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:File format]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=DOL_(Gotcha_Force)&amp;diff=1499</id>
		<title>DOL (Gotcha Force)</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=DOL_(Gotcha_Force)&amp;diff=1499"/>
		<updated>2023-10-07T12:58:40Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: /* Memory map */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This article is about Gotcha Force DOL file format and ongoing researches on it. See [[DOL (File format)]] for DOL file format description.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Research | 3| Research on how functions works and how the dol works is nedded. }}&lt;br /&gt;
&lt;br /&gt;
== Memory map ==&lt;br /&gt;
The dol file is mapped in memory and the free available space remaining is next used to create the Arena containing Heaps. For instance we found Warehouse variables in the EU dol mapped in the interval [80593190:80598044[.&lt;br /&gt;
&lt;br /&gt;
So patching the dol is hard because we have to find unused free space in the memory. The [https://www.gc-forever.com/wiki/index.php?title=Apploader apploader reverse engineering] shows that max dol mapping addresses in memory are:&lt;br /&gt;
* 0x80700000  // production boards&lt;br /&gt;
* 0x81200000  // development boards&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;&lt;br /&gt;
In production we can override MetroTRK memory areas or even override apploader trailer before the bootrom/IPL area. Further investigations have to be done on the [[GCM (File format)|iso/GCM]] sys to see how debug memory is mapped in debug mode (apploader vars used in the apploader).&lt;br /&gt;
* Is it possible to know where exactly MetroTRK is mapped?&lt;br /&gt;
* Is there any other libs/datas unused in dol?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* It&#039;s perfectly possible and tested to patch the apploader trailer and raise the trailer size with [[GCM (File format)|GCM/iso]] patch. It gives us 0x100000 bytes available.&lt;br /&gt;
&lt;br /&gt;
The dol entry_point call the __init_registers procedure which will set the reserved following General Purpose Registers:&lt;br /&gt;
* R1 (stack)&lt;br /&gt;
* R2 (_SDA2_BASE_) - This is the read only _SDA2_.&lt;br /&gt;
* R13 (_SDA_BASE_) - This is the read / write _SDA_.&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;mall &#039;&#039;&#039;D&#039;&#039;&#039;ata &#039;&#039;&#039;A&#039;&#039;&#039;nchors are used with a signed short offset (-0x8000 à +0x7fff).&lt;br /&gt;
* -0x8000(R13) = address of .sdata followed by .sbss&lt;br /&gt;
* -0x8000(R2) = address of .sdata2 followed by .sbss2&lt;br /&gt;
* R1 = often the .sbss2 end address + 0x10000&lt;br /&gt;
&lt;br /&gt;
So often only a part of available SDA negative offsets are used for R2 and R13 using -0x8000 as start.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== USA ===&lt;br /&gt;
Entry point: 80003154&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
 | Section | Offset   | Address  | Length   | Used  |&lt;br /&gt;
 |---------|----------|----------|----------|-------|&lt;br /&gt;
 | text0   | 00000100 | 80003100 | 000024e0 | True  |&lt;br /&gt;
 | text1   | 000025e0 | 800055e0 | 002aab80 | True  |&lt;br /&gt;
 | text2   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text3   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text4   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text5   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text6   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data7   | 002ad160 | 802b0160 | 00000020 | True  |&lt;br /&gt;
 | data8   | 002ad180 | 802b0180 | 00000020 | True  |&lt;br /&gt;
 | data9   | 002ad1a0 | 802b01a0 | 0000acc0 | True  |&lt;br /&gt;
 | data10  | 002b7e60 | 802bae60 | 000f42c0 | True  |&lt;br /&gt;
 | data11  | 003ac120 | 804335a0 | 00002b20 | True  |&lt;br /&gt;
 | data12  | 003aec40 | 80436a20 | 00006ae0 | True  |&lt;br /&gt;
 | data13  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data14  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data15  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data16  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data17  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
* bss: address:803af140 length:0008e3e8&lt;br /&gt;
* R1 = 8044d528&lt;br /&gt;
* R2 = 8043ea20&lt;br /&gt;
* R13 = 8043b5a0&lt;br /&gt;
&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
 | Section     | beg_addr | end_addr | length   |&lt;br /&gt;
 |-------------|----------|----------|----------|&lt;br /&gt;
 | system      | 80000000 | 80003100 | 00003100 |&lt;br /&gt;
 | .text0      | 80003100 | 800055e0 | 000024e0 |&lt;br /&gt;
 | .text1      | 800055e0 | 802b0160 | 002aab80 |&lt;br /&gt;
 | .ctors      | 802b0160 | 802b0180 | 00000020 |&lt;br /&gt;
 | .dtors      | 802b0180 | 802b01a0 | 00000020 |&lt;br /&gt;
 | .rodata     | 802b01a0 | 802bae60 | 0000acc0 |&lt;br /&gt;
 | .data       | 802bae60 | 803af120 | 000f42c0 |&lt;br /&gt;
 | empty       | 803af120 | 803af140 | 00000020 |&lt;br /&gt;
 | .bss        | 803af140 | 804335a0 | 00084460 |&lt;br /&gt;
 | .sdata      | 804335a0 | 804360c0 | 00002b20 |&lt;br /&gt;
 | .sbss       | 804360c0 | 80436a20 | 00000960 |&lt;br /&gt;
 | .sdata2     | 80436a20 | 8043d500 | 00006ae0 |&lt;br /&gt;
 | .sbss2      | 8043d500 | 8043d528 | 00000028 |&lt;br /&gt;
 | stack       | 8043d528 | 8044d528 | 00010000 |&lt;br /&gt;
 | empty       | 8044d528 | 8044d540 | 00000018 |&lt;br /&gt;
 | ArenaLo     | 8044d540 |          |          |&lt;br /&gt;
 | apploader   | 81200000 |        ? |        ? |&lt;br /&gt;
 | Bootrom/IPL | 81300000 |        ? |        ? |&lt;br /&gt;
 | ArenaHi     |          | 817fffa0 |          |&lt;br /&gt;
 | FST         | 817fffa0 | 81800000 | 00500000 |&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== EU ===&lt;br /&gt;
Entry point: 80003154&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
 | Section | Offset   | Address  | Length   | Used  |&lt;br /&gt;
 |---------|----------|----------|----------|-------|&lt;br /&gt;
 | text0   | 00000100 | 80003100 | 000024e0 | True  |&lt;br /&gt;
 | text1   | 000025e0 | 800055e0 | 002ac800 | True  |&lt;br /&gt;
 | text2   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text3   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text4   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text5   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text6   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data7   | 002aede0 | 802b1de0 | 00000020 | True  |&lt;br /&gt;
 | data8   | 002aee00 | 802b1e00 | 00000020 | True  |&lt;br /&gt;
 | data9   | 002aee20 | 802b1e20 | 0000f060 | True  |&lt;br /&gt;
 | data10  | 002bde80 | 802c0e80 | 000f5d40 | True  |&lt;br /&gt;
 | data11  | 003b3bc0 | 8043cbe0 | 00002b20 | True  |&lt;br /&gt;
 | data12  | 003b66e0 | 80440080 | 00006d20 | True  |&lt;br /&gt;
 | data13  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data14  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data15  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data16  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data17  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
* bss: address:803b6bc0 length:00090208&lt;br /&gt;
* R1 = 80456dc8&lt;br /&gt;
* R2 = 80448080&lt;br /&gt;
* R13 = 80444be0&lt;br /&gt;
&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
 | Section     | beg_addr | end_addr | length   |&lt;br /&gt;
 |-------------|----------|----------|----------|&lt;br /&gt;
 | system      | 80000000 | 80003100 | 00003100 |&lt;br /&gt;
 | .text0      | 80003100 | 800055e0 | 000024e0 |&lt;br /&gt;
 | .text1      | 800055e0 | 802b1de0 | 002ac800 |&lt;br /&gt;
 | .ctors      | 802b1de0 | 802b1e00 | 00000020 |&lt;br /&gt;
 | .dtors      | 802b1e00 | 802b1e20 | 00000020 |&lt;br /&gt;
 | .rodata     | 802b1e20 | 802c0e80 | 0000f060 |&lt;br /&gt;
 | .data       | 802c0e80 | 803b6bc0 | 000f5d40 |&lt;br /&gt;
 | .bss        | 803b6bc0 | 8043cbe0 | 00086020 |&lt;br /&gt;
 | .sdata      | 8043cbe0 | 8043f700 | 00002b20 |&lt;br /&gt;
 | .sbss       | 8043f700 | 80440080 | 00000980 |&lt;br /&gt;
 | .sdata2     | 80440080 | 80446da0 | 00006d20 |&lt;br /&gt;
 | .sbss2      | 80446da0 | 80446dc8 | 00000028 |&lt;br /&gt;
 | stack       | 80446dc8 | 80456dc8 | 00010000 |&lt;br /&gt;
 | empty       | 80456dc8 | 80456de0 | 00000018 |&lt;br /&gt;
 | ArenaLo     | 80456de0 |          |          |&lt;br /&gt;
 | apploader   | 81200000 |        ? |        ? |&lt;br /&gt;
 | Bootrom/IPL | 81300000 |        ? |        ? |&lt;br /&gt;
 | ArenaHi     |          | 817fff40 |          |&lt;br /&gt;
 | FST         | 817fff40 | 81800000 | 000000C0 |&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
80593A00 -&amp;gt; 80598040 Wharehouse&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== JAP ===&lt;br /&gt;
Entry point: 80003154&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
 | Section | Offset   | Address  | Length   | Used  |&lt;br /&gt;
 |---------|----------|----------|----------|-------|&lt;br /&gt;
 | text0   | 00000100 | 80003100 | 000024e0 | True  |&lt;br /&gt;
 | text1   | 000025e0 | 800055e0 | 002aab20 | True  |&lt;br /&gt;
 | text2   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text3   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text4   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text5   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text6   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data7   | 002ad100 | 802b0100 | 00000020 | True  |&lt;br /&gt;
 | data8   | 002ad120 | 802b0120 | 00000020 | True  |&lt;br /&gt;
 | data9   | 002ad140 | 802b0140 | 0000a2e0 | True  |&lt;br /&gt;
 | data10  | 002b7420 | 802ba420 | 000f3e60 | True  |&lt;br /&gt;
 | data11  | 003ab280 | 804326e0 | 00002b00 | True  |&lt;br /&gt;
 | data12  | 003add80 | 80435b40 | 00006b60 | True  |&lt;br /&gt;
 | data13  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data14  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data15  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data16  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data17  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
* bss: address:803ae280 length:0008e448&lt;br /&gt;
* R1 = 8044c6c8&lt;br /&gt;
* R2 = 8043db40&lt;br /&gt;
* R13 = 8043a6e0 &lt;br /&gt;
&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
 | Section     | beg_addr | end_addr | length   |&lt;br /&gt;
 |-------------|----------|----------|----------|&lt;br /&gt;
 | system      | 80000000 | 80003100 | 00003100 |&lt;br /&gt;
 | .text0      | 80003100 | 800055e0 | 000024e0 |&lt;br /&gt;
 | .text1      | 800055e0 | 802b0100 | 002aab20 |&lt;br /&gt;
 | .ctors      | 802b0100 | 802b0120 | 00000020 |&lt;br /&gt;
 | .dtors      | 802b0120 | 802b0140 | 00000020 |&lt;br /&gt;
 | .rodata     | 802b0140 | 802ba420 | 0000a2e0 |&lt;br /&gt;
 | .data       | 802ba420 | 803ae280 | 000f3e60 |&lt;br /&gt;
 | .bss        | 803ae280 | 804326e0 | 00084460 |&lt;br /&gt;
 | .sdata      | 804326e0 | 804351e0 | 00002b00 |&lt;br /&gt;
 | .sbss       | 804351e0 | 80435b40 | 00000960 |&lt;br /&gt;
 | .sdata2     | 80435b40 | 8043c6a0 | 00006b60 |&lt;br /&gt;
 | .sbss2      | 8043c6a0 | 8043c6c8 | 00000028 |&lt;br /&gt;
 | stack       | 8043c6c8 | 8044c6c8 | 00010000 |&lt;br /&gt;
 | empty       | 8044c6c8 | 8044c6e0 | 00000018 |&lt;br /&gt;
 | ArenaLo     | 8044c6e0 |          |          |&lt;br /&gt;
 | apploader   | 81200000 |        ? |        ? |&lt;br /&gt;
 | Bootrom/IPL | 81300000 |        ? |        ? |&lt;br /&gt;
 | ArenaHi     |          | 817fffa0 |          |&lt;br /&gt;
 | FST         | 817fffa0 | 81800000 | 00000060 |&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Symbol map ==&lt;br /&gt;
The symbol map allows to put names on procedures and datas. It can be loaded in dolphin emulator in debug mode with the .map file format.&lt;br /&gt;
&lt;br /&gt;
Symbol map USA: https://github.com/Virtual-World-RE/NeoGF/blob/main/data/GG4E-CSM-20220412.map&lt;br /&gt;
&lt;br /&gt;
== MetroTRK ==&lt;br /&gt;
&lt;br /&gt;
MetroTRK can be activated by patching the bi2.bin DebugFlag and also by patching the following addresses to start the debugger in BBA (&#039;&#039;&#039;B&#039;&#039;&#039;road&#039;&#039;&#039;B&#039;&#039;&#039;and &#039;&#039;&#039;A&#039;&#039;&#039;dapter?) mode:&lt;br /&gt;
* USA: Put a breakpoint at 80003190 then set r3 to 1&lt;br /&gt;
* EU:  Put a breakpoint at 800031C0 then set r7 to 4&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;&lt;br /&gt;
The [https://www.gc-forever.com/wiki/index.php?title=Apploader apploader reverse engineering] shows that there is debug vars in [[GCM (File format)|GCM/iso]] system files. [https://github.com/Virtual-World-RE/NeoGF/tree/main/gcmtool gcmtool.py] allow to patch them.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SDK &amp;amp; libs ==&lt;br /&gt;
All libs and SDK are staticly linked inside the dol.&lt;br /&gt;
&lt;br /&gt;
We found these libs and SDK:&lt;br /&gt;
* GCN SDK - Base dolphin SDK.&lt;br /&gt;
* Sysdolphin base library: Hal SysDolphin (HSD) Graphic and physic engine - https://github.com/doldecomp/melee/tree/master/src/sysdolphin/baselib&lt;br /&gt;
* MetroTRK: Target Resident Debugging Kernel for embedded systems. It&#039;s an embedded Kernel for debug.&lt;br /&gt;
* Metrowerks CW Runtime library: CodeWarrior: Metrowerks Standard Library and C/C++ Runtime&lt;br /&gt;
* And from ADXT/GC to CRI CFT/GC: It seems to be audio and video codecs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== H and C files ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
All 3 iso contains following .h and .c symbols in the .data, .rodata, .sdata and .sdata2. The EU version contains also the symbol &amp;quot;objalloc.h&amp;quot;.&lt;br /&gt;
 aobj.h&lt;br /&gt;
 cobj.h&lt;br /&gt;
 jobj.h&lt;br /&gt;
 lobj.h&lt;br /&gt;
 object.h&lt;br /&gt;
 &lt;br /&gt;
 GCN_Mem_Alloc.c&lt;br /&gt;
 aobj.c&lt;br /&gt;
 bytecode.c&lt;br /&gt;
 class.c&lt;br /&gt;
 cobj.c&lt;br /&gt;
 displayfunc.c&lt;br /&gt;
 dobj.c&lt;br /&gt;
 dvd.c&lt;br /&gt;
 dvdfs.c&lt;br /&gt;
 fobj.c&lt;br /&gt;
 fog.c&lt;br /&gt;
 hash.c&lt;br /&gt;
 id.c&lt;br /&gt;
 initialize.c&lt;br /&gt;
 jobj.c&lt;br /&gt;
 list.c&lt;br /&gt;
 lobj.c&lt;br /&gt;
 memory.c&lt;br /&gt;
 mobj.c&lt;br /&gt;
 mtx.c&lt;br /&gt;
 objalloc.c&lt;br /&gt;
 perf.c&lt;br /&gt;
 pobj.c&lt;br /&gt;
 robj.c&lt;br /&gt;
 tev.c&lt;br /&gt;
 texp.c&lt;br /&gt;
 texpdag.c&lt;br /&gt;
 tobj.c&lt;br /&gt;
 tpl.c&lt;br /&gt;
 util.c&lt;br /&gt;
 vi.c&lt;br /&gt;
 video.c&lt;br /&gt;
 wobj.c&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== Strings USA ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Strings list found in the dol and allowing to find libs / SDK:&lt;br /&gt;
 MetroTRK for GAMECUBE v2.0&lt;br /&gt;
 Metrowerks CW runtime library&lt;br /&gt;
 ADXT/GC Ver.8.57       Build:Feb 6 2003 18:03:46&lt;br /&gt;
 SKG/GC Ver.0.61        Build:Feb 6 2003 18:03:49&lt;br /&gt;
 ADXGC Ver.1.21         Build:Feb 6 2003 18:04:00&lt;br /&gt;
 ADXGCSDK Ver.05Sep2002 Build:Feb 6 2003 18:04:01&lt;br /&gt;
 ADXF/GC Ver.7.01       Build:Feb 6 2003 18:02:45&lt;br /&gt;
 CVFS/GC Ver.2.33       Build:Feb 6 2003 18:02:35&lt;br /&gt;
 GCCI Ver.1.09          Build:Feb 6 2003 18:02:33&lt;br /&gt;
 LSC/GC Ver.2.10        Build:Feb 6 2003 18:02:32&lt;br /&gt;
 SJ/GC Ver.6.10         Build:Feb 6 2003 18:02:53&lt;br /&gt;
 SVM/GC Ver.1.51        Build:Feb 6 2003 18:02:51&lt;br /&gt;
 MFCI/GC Ver.1.04       Build:Feb 6 2003 18:03:11&lt;br /&gt;
 AXRNA Ver.1.02         Build:Feb 6 2003 18:03:43&lt;br /&gt;
 CRI SUD/GC Ver.0.02    Build:Feb 6 2003 14:30:18&lt;br /&gt;
 CRI SFX/GC Ver.1.22    Build:Feb 6 2003 14:30:16&lt;br /&gt;
 CRI DCT/GC Ver.1.803   Build:Feb 6 2003 14:28:46&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI MPS/GC Ver.1.669   Build:Feb 6 2003 14:28:50&lt;br /&gt;
 CRI MPV/GC Ver.1.840   Build:Feb 6 2003 14:28:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFD/GC Ver.1.842   Build:Feb 6 2003 14:29:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFH/GC Ver.1.12    Build:Feb 6 2003 14:30:00&lt;br /&gt;
 MWSFD/GC Ver.2.62      Build:Feb 6 2003 14:28:42&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI CFT/GC Ver.1.24    Build:Feb 6 2003 14:28:33&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK – OS   release build: Apr 17 2003 12:33:06 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 Dolphin OS Kernel built : %s %s Apr 17 2003 12:33:06&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK – EXI  release build: Apr 17 2003 12:33:17 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - SI   release build: Apr 17 2003 12:33:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DVD  release build: Apr 22 2003 15:49:00 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - VI   release build: Apr 17 2003 12:33:22 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - PAD  release build: Apr 17 2003 12:33:44 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AI   release build: Apr 17 2003 12:33:54 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AR   release build: Apr 17 2003 12:33:55 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - ARQ  release build: Apr 17 2003 12:33:56 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AX   release build: Apr 17 2003 12:33:57 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DSP  release build: Apr 17 2003 12:34:16 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - CARD release build: Apr 17 2003 12:34:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - GX   release build: Apr 21 2003 14:55:46 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 sysdolphin_base_library&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== Strings EU ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Strings list found in the dol and allowing to find libs / SDK:&lt;br /&gt;
 Metrowerks Target Resident Kernel for PowerPC&lt;br /&gt;
 MetroTRK for GAMECUBE v2.0&lt;br /&gt;
 Metrowerks CW runtime library initializing default heap&lt;br /&gt;
 ADXT/GC     Ver.8.57 Build:Feb       6 2003 18:03:46&lt;br /&gt;
 SKG/GC      Ver.0.61 Build:Feb       6 2003 18:03:49&lt;br /&gt;
 ADXGC       Ver.1.21 Build:Feb       6 2003 18:04:00&lt;br /&gt;
 ADXGCSDK    Ver.05Sep2002 Build:Feb  6 2003 18:04:01&lt;br /&gt;
 ADXF/GC     Ver.7.01 Build:Feb       6 2003 18:02:45&lt;br /&gt;
 CVFS/GC     Ver.2.33 Build:Feb       6 2003 18:02:35&lt;br /&gt;
 GCCI        Ver.1.09 Build:Feb       6 2003 18:02:33&lt;br /&gt;
 LSC/GC      Ver.2.10 Build:Feb       6 2003 18:02:32&lt;br /&gt;
 SJ/GC       Ver.6.10 Build:Feb       6 2003 18:02:53&lt;br /&gt;
 SVM/GC      Ver.1.51 Build:Feb       6 2003 18:02:51&lt;br /&gt;
 MFCI/GC     Ver.1.04 Build:Feb       6 2003 18:03:11&lt;br /&gt;
 AXRNA       Ver.1.02 Build:Feb       6 2003 18:03:43&lt;br /&gt;
 CRI SUD/GC  Ver.0.02 Build:Feb       6 2003 14:30:18&lt;br /&gt;
 CRI SFX/GC  Ver.1.22 Build:Feb       6 2003 14:30:16&lt;br /&gt;
 CRI DCT/GC  Ver.1.803 Build:Feb      6 2003 14:28:46&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI MPS/GC  Ver.1.669 Build:Feb      6 2003 14:28:50&lt;br /&gt;
 CRI MPV/GC  Ver.1.840 Build:Feb      6 2003 14:28:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFD/GC  Ver.1.842 Build:Feb      6 2003 14:29:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFH/GC  Ver.1.12 Build:Feb       6 2003 14:30:00&lt;br /&gt;
 MWSFD/GC    Ver.2.62 Build:Feb       6 2003 14:28:42&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI CFT/GC  Ver.1.24 Build:Feb        6 2003 14:28:33&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - OS   release build: Apr 17 2003 12:33:06 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 Dolphin OS Kernel built : Apr 17 2003 12:33:06&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - EXI  release build: Apr 17 2003 12:33:17 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - SI   release build: Apr 17 2003 12:33:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DVD  release build: Apr 22 2003 15:49:00 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - VI   release build: Apr 17 2003 12:33:22 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - PAD  release build: Apr 17 2003 12:33:44 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AI   release build: Apr 17 2003 12:33:54 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AR   release build: Apr 17 2003 12:33:55 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - ARQ  release build: Apr 17 2003 12:33:56 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AX   release build: Apr 17 2003 12:33:57 (0x2301) &amp;gt;&amp;gt; &lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DSP  release build: Apr 17 2003 12:34:16 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 DSPInit(): Build Date: Apr 17 2003 12:34:16&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - CARD release build: Apr 17 2003 12:34:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - GX   release build: Apr 21 2003 14:55:46 (0x2301) &amp;gt;&amp;gt;  &lt;br /&gt;
 sysdolphin_base_library&lt;br /&gt;
 HSD_INIT_HEAP_MAX_NUM    is obsolete since 1.3.0.0.&lt;br /&gt;
 HSD_INIT_AUDIO_HEAP_SIZE is obsolete since 1.3.0.0.&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== Strings JAP ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Strings list found in the dol and allowing to find libs / SDK:&lt;br /&gt;
 Metrowerks Target Resident Kernel for PowerPC&lt;br /&gt;
 MetroTRK for GAMECUBE v2.0&lt;br /&gt;
 ADXT/GC Ver.8.57       Build:Feb  6 2003 18:03:46&lt;br /&gt;
 SKG/GC Ver.0.61        Build:Feb  6 2003 18:03:49&lt;br /&gt;
 ADXGC Ver.1.21         Build:Feb  6 2003 18:04:00&lt;br /&gt;
 ADXGCSDK Ver.05Sep2002 Build:Feb  6 2003 18:04:01&lt;br /&gt;
 ADXF/GC Ver.7.01       Build:Feb  6 2003 18:02:45&lt;br /&gt;
 CVFS/GC Ver.2.33       Build:Feb  6 2003 18:02:35&lt;br /&gt;
 GCCI Ver.1.09          Build:Feb  6 2003 18:02:33&lt;br /&gt;
 LSC/GC Ver.2.10        Build:Feb  6 2003 18:02:32&lt;br /&gt;
 SJ/GC Ver.6.10         Build:Feb  6 2003 18:02:53&lt;br /&gt;
 SVM/GC Ver.1.51        Build:Feb  6 2003 18:02:51&lt;br /&gt;
 MFCI/GC Ver.1.04       Build:Feb  6 2003 18:03:11&lt;br /&gt;
 AXRNA Ver.1.02         Build:Feb  6 2003 18:03:43&lt;br /&gt;
 CRI SUD/GC Ver.0.02    Build:Feb  6 2003 14:30:18&lt;br /&gt;
 CRI SFX/GC Ver.1.22    Build:Feb  6 2003 14:30:16&lt;br /&gt;
 CRI DCT/GC Ver.1.803   Build:Feb  6 2003 14:28:46&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI MPS/GC Ver.1.669   Build:Feb  6 2003 14:28:50&lt;br /&gt;
 CRI MPV/GC Ver.1.840   Build:Feb  6 2003 14:28:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFD/GC Ver.1.842   Build:Feb  6 2003 14:29:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFH/GC Ver.1.12    Build:Feb  6 2003 14:30:00&lt;br /&gt;
 MWSFD/GC Ver.2.62      Build:Feb  6 2003 14:28:42&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI CFT/GC Ver.1.24    Build:Feb  6 2003 14:28:33&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - OS   release build: Apr 17 2003 12:33:06 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 Dolphin OS Kernel built : Apr 17 2003 12:33:06&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - EXI  release build: Apr 17 2003 12:33:17 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - SI   release build: Apr 17 2003 12:33:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DVD  release build: Apr 22 2003 15:49:00 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - VI   release build: Apr 17 2003 12:33:22 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - PAD  release build: Apr 17 2003 12:33:44 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AI   release build: Apr 17 2003 12:33:54 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AR   release build: Apr 17 2003 12:33:55 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - ARQ  release build: Apr 17 2003 12:33:56 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AX   release build: Apr 17 2003 12:33:57 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DSP  release build: Apr 17 2003 12:34:16 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - CARD release build: Apr 17 2003 12:34:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - GX   release build: Apr 21 2003 14:55:46 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 sysdolphin_base_library&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:File format]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=DOL_(Gotcha_Force)&amp;diff=1498</id>
		<title>DOL (Gotcha Force)</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=DOL_(Gotcha_Force)&amp;diff=1498"/>
		<updated>2023-10-07T12:57:33Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: /* Memory map */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This article is about Gotcha Force DOL file format and ongoing researches on it. See [[DOL (File format)]] for DOL file format description.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Research | 3| Research on how functions works and how the dol works is nedded. }}&lt;br /&gt;
&lt;br /&gt;
== Memory map ==&lt;br /&gt;
The dol file is mapped in memory and the free available space remaining is next used to create the Arena containing Heaps. For instance we found Warehouse variables in the EU dol mapped in the interval [80593190:80598044[.&lt;br /&gt;
&lt;br /&gt;
So patching the dol is hard because we have to find unused free space in the memory. The [https://www.gc-forever.com/wiki/index.php?title=Apploader apploader reverse engineering] shows that max dol mapping addresses in memory are:&lt;br /&gt;
* 0x80700000  // production boards&lt;br /&gt;
* 0x81200000  // development boards&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;&lt;br /&gt;
In production we can override MetroTRK memory areas or even override apploader trailer before the bootrom/IPL area. Further investigations have to be done on the [[GCM (File format)|iso/GCM]] sys to see how debug memory is mapped in debug mode (apploader vars used in the apploader).&lt;br /&gt;
* Is it possible to know where exactly MetroTRK is mapped?&lt;br /&gt;
* Is there any other libs/datas unused in dol?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* It&#039;s perfectly possible and tested to patch the apploader trailer and raise the trailer size with [[GCM (File format)|GCM/iso]] patch. It give us 0x100000 bytes available.&lt;br /&gt;
&lt;br /&gt;
The dol entry_point call the __init_registers procedure which will set the reserved following General Purpose Registers:&lt;br /&gt;
* R1 (stack)&lt;br /&gt;
* R2 (_SDA2_BASE_) - This is the read only _SDA2_.&lt;br /&gt;
* R13 (_SDA_BASE_) - This is the read / write _SDA_.&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;mall &#039;&#039;&#039;D&#039;&#039;&#039;ata &#039;&#039;&#039;A&#039;&#039;&#039;nchors are used with a signed short offset (-0x8000 à +0x7fff).&lt;br /&gt;
* -0x8000(R13) = address of .sdata followed by .sbss&lt;br /&gt;
* -0x8000(R2) = address of .sdata2 followed by .sbss2&lt;br /&gt;
* R1 = often the .sbss2 end address + 0x10000&lt;br /&gt;
&lt;br /&gt;
So often only a part of available SDA negative offsets are used for R2 and R13 using -0x8000 as start.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== USA ===&lt;br /&gt;
Entry point: 80003154&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
 | Section | Offset   | Address  | Length   | Used  |&lt;br /&gt;
 |---------|----------|----------|----------|-------|&lt;br /&gt;
 | text0   | 00000100 | 80003100 | 000024e0 | True  |&lt;br /&gt;
 | text1   | 000025e0 | 800055e0 | 002aab80 | True  |&lt;br /&gt;
 | text2   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text3   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text4   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text5   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text6   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data7   | 002ad160 | 802b0160 | 00000020 | True  |&lt;br /&gt;
 | data8   | 002ad180 | 802b0180 | 00000020 | True  |&lt;br /&gt;
 | data9   | 002ad1a0 | 802b01a0 | 0000acc0 | True  |&lt;br /&gt;
 | data10  | 002b7e60 | 802bae60 | 000f42c0 | True  |&lt;br /&gt;
 | data11  | 003ac120 | 804335a0 | 00002b20 | True  |&lt;br /&gt;
 | data12  | 003aec40 | 80436a20 | 00006ae0 | True  |&lt;br /&gt;
 | data13  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data14  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data15  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data16  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data17  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
* bss: address:803af140 length:0008e3e8&lt;br /&gt;
* R1 = 8044d528&lt;br /&gt;
* R2 = 8043ea20&lt;br /&gt;
* R13 = 8043b5a0&lt;br /&gt;
&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
 | Section     | beg_addr | end_addr | length   |&lt;br /&gt;
 |-------------|----------|----------|----------|&lt;br /&gt;
 | system      | 80000000 | 80003100 | 00003100 |&lt;br /&gt;
 | .text0      | 80003100 | 800055e0 | 000024e0 |&lt;br /&gt;
 | .text1      | 800055e0 | 802b0160 | 002aab80 |&lt;br /&gt;
 | .ctors      | 802b0160 | 802b0180 | 00000020 |&lt;br /&gt;
 | .dtors      | 802b0180 | 802b01a0 | 00000020 |&lt;br /&gt;
 | .rodata     | 802b01a0 | 802bae60 | 0000acc0 |&lt;br /&gt;
 | .data       | 802bae60 | 803af120 | 000f42c0 |&lt;br /&gt;
 | empty       | 803af120 | 803af140 | 00000020 |&lt;br /&gt;
 | .bss        | 803af140 | 804335a0 | 00084460 |&lt;br /&gt;
 | .sdata      | 804335a0 | 804360c0 | 00002b20 |&lt;br /&gt;
 | .sbss       | 804360c0 | 80436a20 | 00000960 |&lt;br /&gt;
 | .sdata2     | 80436a20 | 8043d500 | 00006ae0 |&lt;br /&gt;
 | .sbss2      | 8043d500 | 8043d528 | 00000028 |&lt;br /&gt;
 | stack       | 8043d528 | 8044d528 | 00010000 |&lt;br /&gt;
 | empty       | 8044d528 | 8044d540 | 00000018 |&lt;br /&gt;
 | ArenaLo     | 8044d540 |          |          |&lt;br /&gt;
 | apploader   | 81200000 |        ? |        ? |&lt;br /&gt;
 | Bootrom/IPL | 81300000 |        ? |        ? |&lt;br /&gt;
 | ArenaHi     |          | 817fffa0 |          |&lt;br /&gt;
 | FST         | 817fffa0 | 81800000 | 00500000 |&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== EU ===&lt;br /&gt;
Entry point: 80003154&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
 | Section | Offset   | Address  | Length   | Used  |&lt;br /&gt;
 |---------|----------|----------|----------|-------|&lt;br /&gt;
 | text0   | 00000100 | 80003100 | 000024e0 | True  |&lt;br /&gt;
 | text1   | 000025e0 | 800055e0 | 002ac800 | True  |&lt;br /&gt;
 | text2   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text3   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text4   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text5   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text6   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data7   | 002aede0 | 802b1de0 | 00000020 | True  |&lt;br /&gt;
 | data8   | 002aee00 | 802b1e00 | 00000020 | True  |&lt;br /&gt;
 | data9   | 002aee20 | 802b1e20 | 0000f060 | True  |&lt;br /&gt;
 | data10  | 002bde80 | 802c0e80 | 000f5d40 | True  |&lt;br /&gt;
 | data11  | 003b3bc0 | 8043cbe0 | 00002b20 | True  |&lt;br /&gt;
 | data12  | 003b66e0 | 80440080 | 00006d20 | True  |&lt;br /&gt;
 | data13  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data14  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data15  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data16  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data17  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
* bss: address:803b6bc0 length:00090208&lt;br /&gt;
* R1 = 80456dc8&lt;br /&gt;
* R2 = 80448080&lt;br /&gt;
* R13 = 80444be0&lt;br /&gt;
&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
 | Section     | beg_addr | end_addr | length   |&lt;br /&gt;
 |-------------|----------|----------|----------|&lt;br /&gt;
 | system      | 80000000 | 80003100 | 00003100 |&lt;br /&gt;
 | .text0      | 80003100 | 800055e0 | 000024e0 |&lt;br /&gt;
 | .text1      | 800055e0 | 802b1de0 | 002ac800 |&lt;br /&gt;
 | .ctors      | 802b1de0 | 802b1e00 | 00000020 |&lt;br /&gt;
 | .dtors      | 802b1e00 | 802b1e20 | 00000020 |&lt;br /&gt;
 | .rodata     | 802b1e20 | 802c0e80 | 0000f060 |&lt;br /&gt;
 | .data       | 802c0e80 | 803b6bc0 | 000f5d40 |&lt;br /&gt;
 | .bss        | 803b6bc0 | 8043cbe0 | 00086020 |&lt;br /&gt;
 | .sdata      | 8043cbe0 | 8043f700 | 00002b20 |&lt;br /&gt;
 | .sbss       | 8043f700 | 80440080 | 00000980 |&lt;br /&gt;
 | .sdata2     | 80440080 | 80446da0 | 00006d20 |&lt;br /&gt;
 | .sbss2      | 80446da0 | 80446dc8 | 00000028 |&lt;br /&gt;
 | stack       | 80446dc8 | 80456dc8 | 00010000 |&lt;br /&gt;
 | empty       | 80456dc8 | 80456de0 | 00000018 |&lt;br /&gt;
 | ArenaLo     | 80456de0 |          |          |&lt;br /&gt;
 | apploader   | 81200000 |        ? |        ? |&lt;br /&gt;
 | Bootrom/IPL | 81300000 |        ? |        ? |&lt;br /&gt;
 | ArenaHi     |          | 817fff40 |          |&lt;br /&gt;
 | FST         | 817fff40 | 81800000 | 000000C0 |&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
80593A00 -&amp;gt; 80598040 Wharehouse&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== JAP ===&lt;br /&gt;
Entry point: 80003154&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
 | Section | Offset   | Address  | Length   | Used  |&lt;br /&gt;
 |---------|----------|----------|----------|-------|&lt;br /&gt;
 | text0   | 00000100 | 80003100 | 000024e0 | True  |&lt;br /&gt;
 | text1   | 000025e0 | 800055e0 | 002aab20 | True  |&lt;br /&gt;
 | text2   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text3   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text4   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text5   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text6   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data7   | 002ad100 | 802b0100 | 00000020 | True  |&lt;br /&gt;
 | data8   | 002ad120 | 802b0120 | 00000020 | True  |&lt;br /&gt;
 | data9   | 002ad140 | 802b0140 | 0000a2e0 | True  |&lt;br /&gt;
 | data10  | 002b7420 | 802ba420 | 000f3e60 | True  |&lt;br /&gt;
 | data11  | 003ab280 | 804326e0 | 00002b00 | True  |&lt;br /&gt;
 | data12  | 003add80 | 80435b40 | 00006b60 | True  |&lt;br /&gt;
 | data13  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data14  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data15  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data16  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data17  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
* bss: address:803ae280 length:0008e448&lt;br /&gt;
* R1 = 8044c6c8&lt;br /&gt;
* R2 = 8043db40&lt;br /&gt;
* R13 = 8043a6e0 &lt;br /&gt;
&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
 | Section     | beg_addr | end_addr | length   |&lt;br /&gt;
 |-------------|----------|----------|----------|&lt;br /&gt;
 | system      | 80000000 | 80003100 | 00003100 |&lt;br /&gt;
 | .text0      | 80003100 | 800055e0 | 000024e0 |&lt;br /&gt;
 | .text1      | 800055e0 | 802b0100 | 002aab20 |&lt;br /&gt;
 | .ctors      | 802b0100 | 802b0120 | 00000020 |&lt;br /&gt;
 | .dtors      | 802b0120 | 802b0140 | 00000020 |&lt;br /&gt;
 | .rodata     | 802b0140 | 802ba420 | 0000a2e0 |&lt;br /&gt;
 | .data       | 802ba420 | 803ae280 | 000f3e60 |&lt;br /&gt;
 | .bss        | 803ae280 | 804326e0 | 00084460 |&lt;br /&gt;
 | .sdata      | 804326e0 | 804351e0 | 00002b00 |&lt;br /&gt;
 | .sbss       | 804351e0 | 80435b40 | 00000960 |&lt;br /&gt;
 | .sdata2     | 80435b40 | 8043c6a0 | 00006b60 |&lt;br /&gt;
 | .sbss2      | 8043c6a0 | 8043c6c8 | 00000028 |&lt;br /&gt;
 | stack       | 8043c6c8 | 8044c6c8 | 00010000 |&lt;br /&gt;
 | empty       | 8044c6c8 | 8044c6e0 | 00000018 |&lt;br /&gt;
 | ArenaLo     | 8044c6e0 |          |          |&lt;br /&gt;
 | apploader   | 81200000 |        ? |        ? |&lt;br /&gt;
 | Bootrom/IPL | 81300000 |        ? |        ? |&lt;br /&gt;
 | ArenaHi     |          | 817fffa0 |          |&lt;br /&gt;
 | FST         | 817fffa0 | 81800000 | 00000060 |&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Symbol map ==&lt;br /&gt;
The symbol map allows to put names on procedures and datas. It can be loaded in dolphin emulator in debug mode with the .map file format.&lt;br /&gt;
&lt;br /&gt;
Symbol map USA: https://github.com/Virtual-World-RE/NeoGF/blob/main/data/GG4E-CSM-20220412.map&lt;br /&gt;
&lt;br /&gt;
== MetroTRK ==&lt;br /&gt;
&lt;br /&gt;
MetroTRK can be activated by patching the bi2.bin DebugFlag and also by patching the following addresses to start the debugger in BBA (&#039;&#039;&#039;B&#039;&#039;&#039;road&#039;&#039;&#039;B&#039;&#039;&#039;and &#039;&#039;&#039;A&#039;&#039;&#039;dapter?) mode:&lt;br /&gt;
* USA: Put a breakpoint at 80003190 then set r3 to 1&lt;br /&gt;
* EU:  Put a breakpoint at 800031C0 then set r7 to 4&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;&lt;br /&gt;
The [https://www.gc-forever.com/wiki/index.php?title=Apploader apploader reverse engineering] shows that there is debug vars in [[GCM (File format)|GCM/iso]] system files. [https://github.com/Virtual-World-RE/NeoGF/tree/main/gcmtool gcmtool.py] allow to patch them.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SDK &amp;amp; libs ==&lt;br /&gt;
All libs and SDK are staticly linked inside the dol.&lt;br /&gt;
&lt;br /&gt;
We found these libs and SDK:&lt;br /&gt;
* GCN SDK - Base dolphin SDK.&lt;br /&gt;
* Sysdolphin base library: Hal SysDolphin (HSD) Graphic and physic engine - https://github.com/doldecomp/melee/tree/master/src/sysdolphin/baselib&lt;br /&gt;
* MetroTRK: Target Resident Debugging Kernel for embedded systems. It&#039;s an embedded Kernel for debug.&lt;br /&gt;
* Metrowerks CW Runtime library: CodeWarrior: Metrowerks Standard Library and C/C++ Runtime&lt;br /&gt;
* And from ADXT/GC to CRI CFT/GC: It seems to be audio and video codecs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== H and C files ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
All 3 iso contains following .h and .c symbols in the .data, .rodata, .sdata and .sdata2. The EU version contains also the symbol &amp;quot;objalloc.h&amp;quot;.&lt;br /&gt;
 aobj.h&lt;br /&gt;
 cobj.h&lt;br /&gt;
 jobj.h&lt;br /&gt;
 lobj.h&lt;br /&gt;
 object.h&lt;br /&gt;
 &lt;br /&gt;
 GCN_Mem_Alloc.c&lt;br /&gt;
 aobj.c&lt;br /&gt;
 bytecode.c&lt;br /&gt;
 class.c&lt;br /&gt;
 cobj.c&lt;br /&gt;
 displayfunc.c&lt;br /&gt;
 dobj.c&lt;br /&gt;
 dvd.c&lt;br /&gt;
 dvdfs.c&lt;br /&gt;
 fobj.c&lt;br /&gt;
 fog.c&lt;br /&gt;
 hash.c&lt;br /&gt;
 id.c&lt;br /&gt;
 initialize.c&lt;br /&gt;
 jobj.c&lt;br /&gt;
 list.c&lt;br /&gt;
 lobj.c&lt;br /&gt;
 memory.c&lt;br /&gt;
 mobj.c&lt;br /&gt;
 mtx.c&lt;br /&gt;
 objalloc.c&lt;br /&gt;
 perf.c&lt;br /&gt;
 pobj.c&lt;br /&gt;
 robj.c&lt;br /&gt;
 tev.c&lt;br /&gt;
 texp.c&lt;br /&gt;
 texpdag.c&lt;br /&gt;
 tobj.c&lt;br /&gt;
 tpl.c&lt;br /&gt;
 util.c&lt;br /&gt;
 vi.c&lt;br /&gt;
 video.c&lt;br /&gt;
 wobj.c&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== Strings USA ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Strings list found in the dol and allowing to find libs / SDK:&lt;br /&gt;
 MetroTRK for GAMECUBE v2.0&lt;br /&gt;
 Metrowerks CW runtime library&lt;br /&gt;
 ADXT/GC Ver.8.57       Build:Feb 6 2003 18:03:46&lt;br /&gt;
 SKG/GC Ver.0.61        Build:Feb 6 2003 18:03:49&lt;br /&gt;
 ADXGC Ver.1.21         Build:Feb 6 2003 18:04:00&lt;br /&gt;
 ADXGCSDK Ver.05Sep2002 Build:Feb 6 2003 18:04:01&lt;br /&gt;
 ADXF/GC Ver.7.01       Build:Feb 6 2003 18:02:45&lt;br /&gt;
 CVFS/GC Ver.2.33       Build:Feb 6 2003 18:02:35&lt;br /&gt;
 GCCI Ver.1.09          Build:Feb 6 2003 18:02:33&lt;br /&gt;
 LSC/GC Ver.2.10        Build:Feb 6 2003 18:02:32&lt;br /&gt;
 SJ/GC Ver.6.10         Build:Feb 6 2003 18:02:53&lt;br /&gt;
 SVM/GC Ver.1.51        Build:Feb 6 2003 18:02:51&lt;br /&gt;
 MFCI/GC Ver.1.04       Build:Feb 6 2003 18:03:11&lt;br /&gt;
 AXRNA Ver.1.02         Build:Feb 6 2003 18:03:43&lt;br /&gt;
 CRI SUD/GC Ver.0.02    Build:Feb 6 2003 14:30:18&lt;br /&gt;
 CRI SFX/GC Ver.1.22    Build:Feb 6 2003 14:30:16&lt;br /&gt;
 CRI DCT/GC Ver.1.803   Build:Feb 6 2003 14:28:46&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI MPS/GC Ver.1.669   Build:Feb 6 2003 14:28:50&lt;br /&gt;
 CRI MPV/GC Ver.1.840   Build:Feb 6 2003 14:28:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFD/GC Ver.1.842   Build:Feb 6 2003 14:29:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFH/GC Ver.1.12    Build:Feb 6 2003 14:30:00&lt;br /&gt;
 MWSFD/GC Ver.2.62      Build:Feb 6 2003 14:28:42&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI CFT/GC Ver.1.24    Build:Feb 6 2003 14:28:33&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK – OS   release build: Apr 17 2003 12:33:06 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 Dolphin OS Kernel built : %s %s Apr 17 2003 12:33:06&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK – EXI  release build: Apr 17 2003 12:33:17 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - SI   release build: Apr 17 2003 12:33:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DVD  release build: Apr 22 2003 15:49:00 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - VI   release build: Apr 17 2003 12:33:22 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - PAD  release build: Apr 17 2003 12:33:44 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AI   release build: Apr 17 2003 12:33:54 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AR   release build: Apr 17 2003 12:33:55 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - ARQ  release build: Apr 17 2003 12:33:56 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AX   release build: Apr 17 2003 12:33:57 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DSP  release build: Apr 17 2003 12:34:16 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - CARD release build: Apr 17 2003 12:34:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - GX   release build: Apr 21 2003 14:55:46 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 sysdolphin_base_library&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== Strings EU ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Strings list found in the dol and allowing to find libs / SDK:&lt;br /&gt;
 Metrowerks Target Resident Kernel for PowerPC&lt;br /&gt;
 MetroTRK for GAMECUBE v2.0&lt;br /&gt;
 Metrowerks CW runtime library initializing default heap&lt;br /&gt;
 ADXT/GC     Ver.8.57 Build:Feb       6 2003 18:03:46&lt;br /&gt;
 SKG/GC      Ver.0.61 Build:Feb       6 2003 18:03:49&lt;br /&gt;
 ADXGC       Ver.1.21 Build:Feb       6 2003 18:04:00&lt;br /&gt;
 ADXGCSDK    Ver.05Sep2002 Build:Feb  6 2003 18:04:01&lt;br /&gt;
 ADXF/GC     Ver.7.01 Build:Feb       6 2003 18:02:45&lt;br /&gt;
 CVFS/GC     Ver.2.33 Build:Feb       6 2003 18:02:35&lt;br /&gt;
 GCCI        Ver.1.09 Build:Feb       6 2003 18:02:33&lt;br /&gt;
 LSC/GC      Ver.2.10 Build:Feb       6 2003 18:02:32&lt;br /&gt;
 SJ/GC       Ver.6.10 Build:Feb       6 2003 18:02:53&lt;br /&gt;
 SVM/GC      Ver.1.51 Build:Feb       6 2003 18:02:51&lt;br /&gt;
 MFCI/GC     Ver.1.04 Build:Feb       6 2003 18:03:11&lt;br /&gt;
 AXRNA       Ver.1.02 Build:Feb       6 2003 18:03:43&lt;br /&gt;
 CRI SUD/GC  Ver.0.02 Build:Feb       6 2003 14:30:18&lt;br /&gt;
 CRI SFX/GC  Ver.1.22 Build:Feb       6 2003 14:30:16&lt;br /&gt;
 CRI DCT/GC  Ver.1.803 Build:Feb      6 2003 14:28:46&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI MPS/GC  Ver.1.669 Build:Feb      6 2003 14:28:50&lt;br /&gt;
 CRI MPV/GC  Ver.1.840 Build:Feb      6 2003 14:28:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFD/GC  Ver.1.842 Build:Feb      6 2003 14:29:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFH/GC  Ver.1.12 Build:Feb       6 2003 14:30:00&lt;br /&gt;
 MWSFD/GC    Ver.2.62 Build:Feb       6 2003 14:28:42&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI CFT/GC  Ver.1.24 Build:Feb        6 2003 14:28:33&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - OS   release build: Apr 17 2003 12:33:06 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 Dolphin OS Kernel built : Apr 17 2003 12:33:06&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - EXI  release build: Apr 17 2003 12:33:17 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - SI   release build: Apr 17 2003 12:33:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DVD  release build: Apr 22 2003 15:49:00 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - VI   release build: Apr 17 2003 12:33:22 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - PAD  release build: Apr 17 2003 12:33:44 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AI   release build: Apr 17 2003 12:33:54 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AR   release build: Apr 17 2003 12:33:55 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - ARQ  release build: Apr 17 2003 12:33:56 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AX   release build: Apr 17 2003 12:33:57 (0x2301) &amp;gt;&amp;gt; &lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DSP  release build: Apr 17 2003 12:34:16 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 DSPInit(): Build Date: Apr 17 2003 12:34:16&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - CARD release build: Apr 17 2003 12:34:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - GX   release build: Apr 21 2003 14:55:46 (0x2301) &amp;gt;&amp;gt;  &lt;br /&gt;
 sysdolphin_base_library&lt;br /&gt;
 HSD_INIT_HEAP_MAX_NUM    is obsolete since 1.3.0.0.&lt;br /&gt;
 HSD_INIT_AUDIO_HEAP_SIZE is obsolete since 1.3.0.0.&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== Strings JAP ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Strings list found in the dol and allowing to find libs / SDK:&lt;br /&gt;
 Metrowerks Target Resident Kernel for PowerPC&lt;br /&gt;
 MetroTRK for GAMECUBE v2.0&lt;br /&gt;
 ADXT/GC Ver.8.57       Build:Feb  6 2003 18:03:46&lt;br /&gt;
 SKG/GC Ver.0.61        Build:Feb  6 2003 18:03:49&lt;br /&gt;
 ADXGC Ver.1.21         Build:Feb  6 2003 18:04:00&lt;br /&gt;
 ADXGCSDK Ver.05Sep2002 Build:Feb  6 2003 18:04:01&lt;br /&gt;
 ADXF/GC Ver.7.01       Build:Feb  6 2003 18:02:45&lt;br /&gt;
 CVFS/GC Ver.2.33       Build:Feb  6 2003 18:02:35&lt;br /&gt;
 GCCI Ver.1.09          Build:Feb  6 2003 18:02:33&lt;br /&gt;
 LSC/GC Ver.2.10        Build:Feb  6 2003 18:02:32&lt;br /&gt;
 SJ/GC Ver.6.10         Build:Feb  6 2003 18:02:53&lt;br /&gt;
 SVM/GC Ver.1.51        Build:Feb  6 2003 18:02:51&lt;br /&gt;
 MFCI/GC Ver.1.04       Build:Feb  6 2003 18:03:11&lt;br /&gt;
 AXRNA Ver.1.02         Build:Feb  6 2003 18:03:43&lt;br /&gt;
 CRI SUD/GC Ver.0.02    Build:Feb  6 2003 14:30:18&lt;br /&gt;
 CRI SFX/GC Ver.1.22    Build:Feb  6 2003 14:30:16&lt;br /&gt;
 CRI DCT/GC Ver.1.803   Build:Feb  6 2003 14:28:46&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI MPS/GC Ver.1.669   Build:Feb  6 2003 14:28:50&lt;br /&gt;
 CRI MPV/GC Ver.1.840   Build:Feb  6 2003 14:28:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFD/GC Ver.1.842   Build:Feb  6 2003 14:29:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFH/GC Ver.1.12    Build:Feb  6 2003 14:30:00&lt;br /&gt;
 MWSFD/GC Ver.2.62      Build:Feb  6 2003 14:28:42&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI CFT/GC Ver.1.24    Build:Feb  6 2003 14:28:33&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - OS   release build: Apr 17 2003 12:33:06 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 Dolphin OS Kernel built : Apr 17 2003 12:33:06&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - EXI  release build: Apr 17 2003 12:33:17 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - SI   release build: Apr 17 2003 12:33:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DVD  release build: Apr 22 2003 15:49:00 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - VI   release build: Apr 17 2003 12:33:22 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - PAD  release build: Apr 17 2003 12:33:44 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AI   release build: Apr 17 2003 12:33:54 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AR   release build: Apr 17 2003 12:33:55 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - ARQ  release build: Apr 17 2003 12:33:56 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AX   release build: Apr 17 2003 12:33:57 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DSP  release build: Apr 17 2003 12:34:16 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - CARD release build: Apr 17 2003 12:34:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - GX   release build: Apr 21 2003 14:55:46 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 sysdolphin_base_library&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:File format]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=DOL_(Gotcha_Force)&amp;diff=1497</id>
		<title>DOL (Gotcha Force)</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=DOL_(Gotcha_Force)&amp;diff=1497"/>
		<updated>2023-10-07T12:56:56Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: /* Memory map */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This article is about Gotcha Force DOL file format and ongoing researches on it. See [[DOL (File format)]] for DOL file format description.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Research | 3| Research on how functions works and how the dol works is nedded. }}&lt;br /&gt;
&lt;br /&gt;
== Memory map ==&lt;br /&gt;
The dol file is mapped in memory and the free available space remaining is next used to create the Arena containing Heaps. For instance we found Warehouse variables in the EU dol mapped in the interval [80593190:80598044[.&lt;br /&gt;
&lt;br /&gt;
So patching the dol is hard because we have to find unused free space in the memory. The [https://www.gc-forever.com/wiki/index.php?title=Apploader apploader reverse engineering] shows that max dol mapping addresses in memory are:&lt;br /&gt;
* 0x80700000  // production boards&lt;br /&gt;
* 0x81200000  // development boards&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;&lt;br /&gt;
In production we can override MetroTRK memory areas or even override apploader trailer before the bootrom/IPL area. Further investigations has to be done on the [[GCM (File format)|iso/GCM]] sys to see how debug memory is mapped in debug mode (apploader vars used in the apploader).&lt;br /&gt;
* Is it possible to know where exactly MetroTRK is mapped?&lt;br /&gt;
* Is there any other libs/datas unused in dol?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* It&#039;s perfectly possible and tested to patch the apploader trailer and raise the trailer size with [[GCM (File format)|GCM/iso]] patch. It give us 0x100000 bytes available.&lt;br /&gt;
&lt;br /&gt;
The dol entry_point call the __init_registers procedure which will set the reserved following General Purpose Registers:&lt;br /&gt;
* R1 (stack)&lt;br /&gt;
* R2 (_SDA2_BASE_) - This is the read only _SDA2_.&lt;br /&gt;
* R13 (_SDA_BASE_) - This is the read / write _SDA_.&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;mall &#039;&#039;&#039;D&#039;&#039;&#039;ata &#039;&#039;&#039;A&#039;&#039;&#039;nchors are used with a signed short offset (-0x8000 à +0x7fff).&lt;br /&gt;
* -0x8000(R13) = address of .sdata followed by .sbss&lt;br /&gt;
* -0x8000(R2) = address of .sdata2 followed by .sbss2&lt;br /&gt;
* R1 = often the .sbss2 end address + 0x10000&lt;br /&gt;
&lt;br /&gt;
So often only a part of available SDA negative offsets are used for R2 and R13 using -0x8000 as start.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== USA ===&lt;br /&gt;
Entry point: 80003154&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
 | Section | Offset   | Address  | Length   | Used  |&lt;br /&gt;
 |---------|----------|----------|----------|-------|&lt;br /&gt;
 | text0   | 00000100 | 80003100 | 000024e0 | True  |&lt;br /&gt;
 | text1   | 000025e0 | 800055e0 | 002aab80 | True  |&lt;br /&gt;
 | text2   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text3   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text4   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text5   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text6   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data7   | 002ad160 | 802b0160 | 00000020 | True  |&lt;br /&gt;
 | data8   | 002ad180 | 802b0180 | 00000020 | True  |&lt;br /&gt;
 | data9   | 002ad1a0 | 802b01a0 | 0000acc0 | True  |&lt;br /&gt;
 | data10  | 002b7e60 | 802bae60 | 000f42c0 | True  |&lt;br /&gt;
 | data11  | 003ac120 | 804335a0 | 00002b20 | True  |&lt;br /&gt;
 | data12  | 003aec40 | 80436a20 | 00006ae0 | True  |&lt;br /&gt;
 | data13  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data14  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data15  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data16  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data17  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
* bss: address:803af140 length:0008e3e8&lt;br /&gt;
* R1 = 8044d528&lt;br /&gt;
* R2 = 8043ea20&lt;br /&gt;
* R13 = 8043b5a0&lt;br /&gt;
&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
 | Section     | beg_addr | end_addr | length   |&lt;br /&gt;
 |-------------|----------|----------|----------|&lt;br /&gt;
 | system      | 80000000 | 80003100 | 00003100 |&lt;br /&gt;
 | .text0      | 80003100 | 800055e0 | 000024e0 |&lt;br /&gt;
 | .text1      | 800055e0 | 802b0160 | 002aab80 |&lt;br /&gt;
 | .ctors      | 802b0160 | 802b0180 | 00000020 |&lt;br /&gt;
 | .dtors      | 802b0180 | 802b01a0 | 00000020 |&lt;br /&gt;
 | .rodata     | 802b01a0 | 802bae60 | 0000acc0 |&lt;br /&gt;
 | .data       | 802bae60 | 803af120 | 000f42c0 |&lt;br /&gt;
 | empty       | 803af120 | 803af140 | 00000020 |&lt;br /&gt;
 | .bss        | 803af140 | 804335a0 | 00084460 |&lt;br /&gt;
 | .sdata      | 804335a0 | 804360c0 | 00002b20 |&lt;br /&gt;
 | .sbss       | 804360c0 | 80436a20 | 00000960 |&lt;br /&gt;
 | .sdata2     | 80436a20 | 8043d500 | 00006ae0 |&lt;br /&gt;
 | .sbss2      | 8043d500 | 8043d528 | 00000028 |&lt;br /&gt;
 | stack       | 8043d528 | 8044d528 | 00010000 |&lt;br /&gt;
 | empty       | 8044d528 | 8044d540 | 00000018 |&lt;br /&gt;
 | ArenaLo     | 8044d540 |          |          |&lt;br /&gt;
 | apploader   | 81200000 |        ? |        ? |&lt;br /&gt;
 | Bootrom/IPL | 81300000 |        ? |        ? |&lt;br /&gt;
 | ArenaHi     |          | 817fffa0 |          |&lt;br /&gt;
 | FST         | 817fffa0 | 81800000 | 00500000 |&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== EU ===&lt;br /&gt;
Entry point: 80003154&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
 | Section | Offset   | Address  | Length   | Used  |&lt;br /&gt;
 |---------|----------|----------|----------|-------|&lt;br /&gt;
 | text0   | 00000100 | 80003100 | 000024e0 | True  |&lt;br /&gt;
 | text1   | 000025e0 | 800055e0 | 002ac800 | True  |&lt;br /&gt;
 | text2   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text3   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text4   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text5   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text6   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data7   | 002aede0 | 802b1de0 | 00000020 | True  |&lt;br /&gt;
 | data8   | 002aee00 | 802b1e00 | 00000020 | True  |&lt;br /&gt;
 | data9   | 002aee20 | 802b1e20 | 0000f060 | True  |&lt;br /&gt;
 | data10  | 002bde80 | 802c0e80 | 000f5d40 | True  |&lt;br /&gt;
 | data11  | 003b3bc0 | 8043cbe0 | 00002b20 | True  |&lt;br /&gt;
 | data12  | 003b66e0 | 80440080 | 00006d20 | True  |&lt;br /&gt;
 | data13  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data14  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data15  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data16  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data17  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
* bss: address:803b6bc0 length:00090208&lt;br /&gt;
* R1 = 80456dc8&lt;br /&gt;
* R2 = 80448080&lt;br /&gt;
* R13 = 80444be0&lt;br /&gt;
&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
 | Section     | beg_addr | end_addr | length   |&lt;br /&gt;
 |-------------|----------|----------|----------|&lt;br /&gt;
 | system      | 80000000 | 80003100 | 00003100 |&lt;br /&gt;
 | .text0      | 80003100 | 800055e0 | 000024e0 |&lt;br /&gt;
 | .text1      | 800055e0 | 802b1de0 | 002ac800 |&lt;br /&gt;
 | .ctors      | 802b1de0 | 802b1e00 | 00000020 |&lt;br /&gt;
 | .dtors      | 802b1e00 | 802b1e20 | 00000020 |&lt;br /&gt;
 | .rodata     | 802b1e20 | 802c0e80 | 0000f060 |&lt;br /&gt;
 | .data       | 802c0e80 | 803b6bc0 | 000f5d40 |&lt;br /&gt;
 | .bss        | 803b6bc0 | 8043cbe0 | 00086020 |&lt;br /&gt;
 | .sdata      | 8043cbe0 | 8043f700 | 00002b20 |&lt;br /&gt;
 | .sbss       | 8043f700 | 80440080 | 00000980 |&lt;br /&gt;
 | .sdata2     | 80440080 | 80446da0 | 00006d20 |&lt;br /&gt;
 | .sbss2      | 80446da0 | 80446dc8 | 00000028 |&lt;br /&gt;
 | stack       | 80446dc8 | 80456dc8 | 00010000 |&lt;br /&gt;
 | empty       | 80456dc8 | 80456de0 | 00000018 |&lt;br /&gt;
 | ArenaLo     | 80456de0 |          |          |&lt;br /&gt;
 | apploader   | 81200000 |        ? |        ? |&lt;br /&gt;
 | Bootrom/IPL | 81300000 |        ? |        ? |&lt;br /&gt;
 | ArenaHi     |          | 817fff40 |          |&lt;br /&gt;
 | FST         | 817fff40 | 81800000 | 000000C0 |&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
80593A00 -&amp;gt; 80598040 Wharehouse&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== JAP ===&lt;br /&gt;
Entry point: 80003154&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
 | Section | Offset   | Address  | Length   | Used  |&lt;br /&gt;
 |---------|----------|----------|----------|-------|&lt;br /&gt;
 | text0   | 00000100 | 80003100 | 000024e0 | True  |&lt;br /&gt;
 | text1   | 000025e0 | 800055e0 | 002aab20 | True  |&lt;br /&gt;
 | text2   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text3   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text4   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text5   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text6   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data7   | 002ad100 | 802b0100 | 00000020 | True  |&lt;br /&gt;
 | data8   | 002ad120 | 802b0120 | 00000020 | True  |&lt;br /&gt;
 | data9   | 002ad140 | 802b0140 | 0000a2e0 | True  |&lt;br /&gt;
 | data10  | 002b7420 | 802ba420 | 000f3e60 | True  |&lt;br /&gt;
 | data11  | 003ab280 | 804326e0 | 00002b00 | True  |&lt;br /&gt;
 | data12  | 003add80 | 80435b40 | 00006b60 | True  |&lt;br /&gt;
 | data13  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data14  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data15  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data16  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data17  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
* bss: address:803ae280 length:0008e448&lt;br /&gt;
* R1 = 8044c6c8&lt;br /&gt;
* R2 = 8043db40&lt;br /&gt;
* R13 = 8043a6e0 &lt;br /&gt;
&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
 | Section     | beg_addr | end_addr | length   |&lt;br /&gt;
 |-------------|----------|----------|----------|&lt;br /&gt;
 | system      | 80000000 | 80003100 | 00003100 |&lt;br /&gt;
 | .text0      | 80003100 | 800055e0 | 000024e0 |&lt;br /&gt;
 | .text1      | 800055e0 | 802b0100 | 002aab20 |&lt;br /&gt;
 | .ctors      | 802b0100 | 802b0120 | 00000020 |&lt;br /&gt;
 | .dtors      | 802b0120 | 802b0140 | 00000020 |&lt;br /&gt;
 | .rodata     | 802b0140 | 802ba420 | 0000a2e0 |&lt;br /&gt;
 | .data       | 802ba420 | 803ae280 | 000f3e60 |&lt;br /&gt;
 | .bss        | 803ae280 | 804326e0 | 00084460 |&lt;br /&gt;
 | .sdata      | 804326e0 | 804351e0 | 00002b00 |&lt;br /&gt;
 | .sbss       | 804351e0 | 80435b40 | 00000960 |&lt;br /&gt;
 | .sdata2     | 80435b40 | 8043c6a0 | 00006b60 |&lt;br /&gt;
 | .sbss2      | 8043c6a0 | 8043c6c8 | 00000028 |&lt;br /&gt;
 | stack       | 8043c6c8 | 8044c6c8 | 00010000 |&lt;br /&gt;
 | empty       | 8044c6c8 | 8044c6e0 | 00000018 |&lt;br /&gt;
 | ArenaLo     | 8044c6e0 |          |          |&lt;br /&gt;
 | apploader   | 81200000 |        ? |        ? |&lt;br /&gt;
 | Bootrom/IPL | 81300000 |        ? |        ? |&lt;br /&gt;
 | ArenaHi     |          | 817fffa0 |          |&lt;br /&gt;
 | FST         | 817fffa0 | 81800000 | 00000060 |&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Symbol map ==&lt;br /&gt;
The symbol map allows to put names on procedures and datas. It can be loaded in dolphin emulator in debug mode with the .map file format.&lt;br /&gt;
&lt;br /&gt;
Symbol map USA: https://github.com/Virtual-World-RE/NeoGF/blob/main/data/GG4E-CSM-20220412.map&lt;br /&gt;
&lt;br /&gt;
== MetroTRK ==&lt;br /&gt;
&lt;br /&gt;
MetroTRK can be activated by patching the bi2.bin DebugFlag and also by patching the following addresses to start the debugger in BBA (&#039;&#039;&#039;B&#039;&#039;&#039;road&#039;&#039;&#039;B&#039;&#039;&#039;and &#039;&#039;&#039;A&#039;&#039;&#039;dapter?) mode:&lt;br /&gt;
* USA: Put a breakpoint at 80003190 then set r3 to 1&lt;br /&gt;
* EU:  Put a breakpoint at 800031C0 then set r7 to 4&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;&lt;br /&gt;
The [https://www.gc-forever.com/wiki/index.php?title=Apploader apploader reverse engineering] shows that there is debug vars in [[GCM (File format)|GCM/iso]] system files. [https://github.com/Virtual-World-RE/NeoGF/tree/main/gcmtool gcmtool.py] allow to patch them.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SDK &amp;amp; libs ==&lt;br /&gt;
All libs and SDK are staticly linked inside the dol.&lt;br /&gt;
&lt;br /&gt;
We found these libs and SDK:&lt;br /&gt;
* GCN SDK - Base dolphin SDK.&lt;br /&gt;
* Sysdolphin base library: Hal SysDolphin (HSD) Graphic and physic engine - https://github.com/doldecomp/melee/tree/master/src/sysdolphin/baselib&lt;br /&gt;
* MetroTRK: Target Resident Debugging Kernel for embedded systems. It&#039;s an embedded Kernel for debug.&lt;br /&gt;
* Metrowerks CW Runtime library: CodeWarrior: Metrowerks Standard Library and C/C++ Runtime&lt;br /&gt;
* And from ADXT/GC to CRI CFT/GC: It seems to be audio and video codecs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== H and C files ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
All 3 iso contains following .h and .c symbols in the .data, .rodata, .sdata and .sdata2. The EU version contains also the symbol &amp;quot;objalloc.h&amp;quot;.&lt;br /&gt;
 aobj.h&lt;br /&gt;
 cobj.h&lt;br /&gt;
 jobj.h&lt;br /&gt;
 lobj.h&lt;br /&gt;
 object.h&lt;br /&gt;
 &lt;br /&gt;
 GCN_Mem_Alloc.c&lt;br /&gt;
 aobj.c&lt;br /&gt;
 bytecode.c&lt;br /&gt;
 class.c&lt;br /&gt;
 cobj.c&lt;br /&gt;
 displayfunc.c&lt;br /&gt;
 dobj.c&lt;br /&gt;
 dvd.c&lt;br /&gt;
 dvdfs.c&lt;br /&gt;
 fobj.c&lt;br /&gt;
 fog.c&lt;br /&gt;
 hash.c&lt;br /&gt;
 id.c&lt;br /&gt;
 initialize.c&lt;br /&gt;
 jobj.c&lt;br /&gt;
 list.c&lt;br /&gt;
 lobj.c&lt;br /&gt;
 memory.c&lt;br /&gt;
 mobj.c&lt;br /&gt;
 mtx.c&lt;br /&gt;
 objalloc.c&lt;br /&gt;
 perf.c&lt;br /&gt;
 pobj.c&lt;br /&gt;
 robj.c&lt;br /&gt;
 tev.c&lt;br /&gt;
 texp.c&lt;br /&gt;
 texpdag.c&lt;br /&gt;
 tobj.c&lt;br /&gt;
 tpl.c&lt;br /&gt;
 util.c&lt;br /&gt;
 vi.c&lt;br /&gt;
 video.c&lt;br /&gt;
 wobj.c&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== Strings USA ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Strings list found in the dol and allowing to find libs / SDK:&lt;br /&gt;
 MetroTRK for GAMECUBE v2.0&lt;br /&gt;
 Metrowerks CW runtime library&lt;br /&gt;
 ADXT/GC Ver.8.57       Build:Feb 6 2003 18:03:46&lt;br /&gt;
 SKG/GC Ver.0.61        Build:Feb 6 2003 18:03:49&lt;br /&gt;
 ADXGC Ver.1.21         Build:Feb 6 2003 18:04:00&lt;br /&gt;
 ADXGCSDK Ver.05Sep2002 Build:Feb 6 2003 18:04:01&lt;br /&gt;
 ADXF/GC Ver.7.01       Build:Feb 6 2003 18:02:45&lt;br /&gt;
 CVFS/GC Ver.2.33       Build:Feb 6 2003 18:02:35&lt;br /&gt;
 GCCI Ver.1.09          Build:Feb 6 2003 18:02:33&lt;br /&gt;
 LSC/GC Ver.2.10        Build:Feb 6 2003 18:02:32&lt;br /&gt;
 SJ/GC Ver.6.10         Build:Feb 6 2003 18:02:53&lt;br /&gt;
 SVM/GC Ver.1.51        Build:Feb 6 2003 18:02:51&lt;br /&gt;
 MFCI/GC Ver.1.04       Build:Feb 6 2003 18:03:11&lt;br /&gt;
 AXRNA Ver.1.02         Build:Feb 6 2003 18:03:43&lt;br /&gt;
 CRI SUD/GC Ver.0.02    Build:Feb 6 2003 14:30:18&lt;br /&gt;
 CRI SFX/GC Ver.1.22    Build:Feb 6 2003 14:30:16&lt;br /&gt;
 CRI DCT/GC Ver.1.803   Build:Feb 6 2003 14:28:46&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI MPS/GC Ver.1.669   Build:Feb 6 2003 14:28:50&lt;br /&gt;
 CRI MPV/GC Ver.1.840   Build:Feb 6 2003 14:28:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFD/GC Ver.1.842   Build:Feb 6 2003 14:29:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFH/GC Ver.1.12    Build:Feb 6 2003 14:30:00&lt;br /&gt;
 MWSFD/GC Ver.2.62      Build:Feb 6 2003 14:28:42&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI CFT/GC Ver.1.24    Build:Feb 6 2003 14:28:33&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK – OS   release build: Apr 17 2003 12:33:06 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 Dolphin OS Kernel built : %s %s Apr 17 2003 12:33:06&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK – EXI  release build: Apr 17 2003 12:33:17 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - SI   release build: Apr 17 2003 12:33:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DVD  release build: Apr 22 2003 15:49:00 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - VI   release build: Apr 17 2003 12:33:22 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - PAD  release build: Apr 17 2003 12:33:44 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AI   release build: Apr 17 2003 12:33:54 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AR   release build: Apr 17 2003 12:33:55 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - ARQ  release build: Apr 17 2003 12:33:56 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AX   release build: Apr 17 2003 12:33:57 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DSP  release build: Apr 17 2003 12:34:16 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - CARD release build: Apr 17 2003 12:34:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - GX   release build: Apr 21 2003 14:55:46 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 sysdolphin_base_library&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== Strings EU ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Strings list found in the dol and allowing to find libs / SDK:&lt;br /&gt;
 Metrowerks Target Resident Kernel for PowerPC&lt;br /&gt;
 MetroTRK for GAMECUBE v2.0&lt;br /&gt;
 Metrowerks CW runtime library initializing default heap&lt;br /&gt;
 ADXT/GC     Ver.8.57 Build:Feb       6 2003 18:03:46&lt;br /&gt;
 SKG/GC      Ver.0.61 Build:Feb       6 2003 18:03:49&lt;br /&gt;
 ADXGC       Ver.1.21 Build:Feb       6 2003 18:04:00&lt;br /&gt;
 ADXGCSDK    Ver.05Sep2002 Build:Feb  6 2003 18:04:01&lt;br /&gt;
 ADXF/GC     Ver.7.01 Build:Feb       6 2003 18:02:45&lt;br /&gt;
 CVFS/GC     Ver.2.33 Build:Feb       6 2003 18:02:35&lt;br /&gt;
 GCCI        Ver.1.09 Build:Feb       6 2003 18:02:33&lt;br /&gt;
 LSC/GC      Ver.2.10 Build:Feb       6 2003 18:02:32&lt;br /&gt;
 SJ/GC       Ver.6.10 Build:Feb       6 2003 18:02:53&lt;br /&gt;
 SVM/GC      Ver.1.51 Build:Feb       6 2003 18:02:51&lt;br /&gt;
 MFCI/GC     Ver.1.04 Build:Feb       6 2003 18:03:11&lt;br /&gt;
 AXRNA       Ver.1.02 Build:Feb       6 2003 18:03:43&lt;br /&gt;
 CRI SUD/GC  Ver.0.02 Build:Feb       6 2003 14:30:18&lt;br /&gt;
 CRI SFX/GC  Ver.1.22 Build:Feb       6 2003 14:30:16&lt;br /&gt;
 CRI DCT/GC  Ver.1.803 Build:Feb      6 2003 14:28:46&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI MPS/GC  Ver.1.669 Build:Feb      6 2003 14:28:50&lt;br /&gt;
 CRI MPV/GC  Ver.1.840 Build:Feb      6 2003 14:28:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFD/GC  Ver.1.842 Build:Feb      6 2003 14:29:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFH/GC  Ver.1.12 Build:Feb       6 2003 14:30:00&lt;br /&gt;
 MWSFD/GC    Ver.2.62 Build:Feb       6 2003 14:28:42&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI CFT/GC  Ver.1.24 Build:Feb        6 2003 14:28:33&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - OS   release build: Apr 17 2003 12:33:06 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 Dolphin OS Kernel built : Apr 17 2003 12:33:06&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - EXI  release build: Apr 17 2003 12:33:17 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - SI   release build: Apr 17 2003 12:33:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DVD  release build: Apr 22 2003 15:49:00 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - VI   release build: Apr 17 2003 12:33:22 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - PAD  release build: Apr 17 2003 12:33:44 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AI   release build: Apr 17 2003 12:33:54 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AR   release build: Apr 17 2003 12:33:55 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - ARQ  release build: Apr 17 2003 12:33:56 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AX   release build: Apr 17 2003 12:33:57 (0x2301) &amp;gt;&amp;gt; &lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DSP  release build: Apr 17 2003 12:34:16 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 DSPInit(): Build Date: Apr 17 2003 12:34:16&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - CARD release build: Apr 17 2003 12:34:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - GX   release build: Apr 21 2003 14:55:46 (0x2301) &amp;gt;&amp;gt;  &lt;br /&gt;
 sysdolphin_base_library&lt;br /&gt;
 HSD_INIT_HEAP_MAX_NUM    is obsolete since 1.3.0.0.&lt;br /&gt;
 HSD_INIT_AUDIO_HEAP_SIZE is obsolete since 1.3.0.0.&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== Strings JAP ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Strings list found in the dol and allowing to find libs / SDK:&lt;br /&gt;
 Metrowerks Target Resident Kernel for PowerPC&lt;br /&gt;
 MetroTRK for GAMECUBE v2.0&lt;br /&gt;
 ADXT/GC Ver.8.57       Build:Feb  6 2003 18:03:46&lt;br /&gt;
 SKG/GC Ver.0.61        Build:Feb  6 2003 18:03:49&lt;br /&gt;
 ADXGC Ver.1.21         Build:Feb  6 2003 18:04:00&lt;br /&gt;
 ADXGCSDK Ver.05Sep2002 Build:Feb  6 2003 18:04:01&lt;br /&gt;
 ADXF/GC Ver.7.01       Build:Feb  6 2003 18:02:45&lt;br /&gt;
 CVFS/GC Ver.2.33       Build:Feb  6 2003 18:02:35&lt;br /&gt;
 GCCI Ver.1.09          Build:Feb  6 2003 18:02:33&lt;br /&gt;
 LSC/GC Ver.2.10        Build:Feb  6 2003 18:02:32&lt;br /&gt;
 SJ/GC Ver.6.10         Build:Feb  6 2003 18:02:53&lt;br /&gt;
 SVM/GC Ver.1.51        Build:Feb  6 2003 18:02:51&lt;br /&gt;
 MFCI/GC Ver.1.04       Build:Feb  6 2003 18:03:11&lt;br /&gt;
 AXRNA Ver.1.02         Build:Feb  6 2003 18:03:43&lt;br /&gt;
 CRI SUD/GC Ver.0.02    Build:Feb  6 2003 14:30:18&lt;br /&gt;
 CRI SFX/GC Ver.1.22    Build:Feb  6 2003 14:30:16&lt;br /&gt;
 CRI DCT/GC Ver.1.803   Build:Feb  6 2003 14:28:46&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI MPS/GC Ver.1.669   Build:Feb  6 2003 14:28:50&lt;br /&gt;
 CRI MPV/GC Ver.1.840   Build:Feb  6 2003 14:28:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFD/GC Ver.1.842   Build:Feb  6 2003 14:29:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFH/GC Ver.1.12    Build:Feb  6 2003 14:30:00&lt;br /&gt;
 MWSFD/GC Ver.2.62      Build:Feb  6 2003 14:28:42&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI CFT/GC Ver.1.24    Build:Feb  6 2003 14:28:33&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - OS   release build: Apr 17 2003 12:33:06 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 Dolphin OS Kernel built : Apr 17 2003 12:33:06&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - EXI  release build: Apr 17 2003 12:33:17 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - SI   release build: Apr 17 2003 12:33:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DVD  release build: Apr 22 2003 15:49:00 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - VI   release build: Apr 17 2003 12:33:22 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - PAD  release build: Apr 17 2003 12:33:44 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AI   release build: Apr 17 2003 12:33:54 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AR   release build: Apr 17 2003 12:33:55 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - ARQ  release build: Apr 17 2003 12:33:56 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AX   release build: Apr 17 2003 12:33:57 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DSP  release build: Apr 17 2003 12:34:16 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - CARD release build: Apr 17 2003 12:34:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - GX   release build: Apr 21 2003 14:55:46 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 sysdolphin_base_library&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:File format]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=DOL_(Gotcha_Force)&amp;diff=1496</id>
		<title>DOL (Gotcha Force)</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=DOL_(Gotcha_Force)&amp;diff=1496"/>
		<updated>2023-10-07T12:56:15Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: /* MetroTRK */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This article is about Gotcha Force DOL file format and ongoing researches on it. See [[DOL (File format)]] for DOL file format description.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Research | 3| Research on how functions works and how the dol works is nedded. }}&lt;br /&gt;
&lt;br /&gt;
== Memory map ==&lt;br /&gt;
The dol file is mapped in memory and the free available space remaining is next used to create the Arena containing Heaps. For instance we found Warehouse variables in the EU dol mapped in the interval [80593190:80598044[.&lt;br /&gt;
&lt;br /&gt;
So patching the dol is hard because we have to find unused free space in the memory. The [https://www.gc-forever.com/wiki/index.php?title=Apploader apploader reverse engineering] shows that max dol mapping address in memory are:&lt;br /&gt;
* 0x80700000  // production boards&lt;br /&gt;
* 0x81200000  // development boards&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;&lt;br /&gt;
In production we can override MetroTRK memory areas or even override apploader trailer before the bootrom/IPL area. Further investigations has to be done on the [[GCM (File format)|iso/GCM]] sys to see how debug memory is mapped in debug mode (apploader vars used in the apploader).&lt;br /&gt;
* Is it possible to know where exactly MetroTRK is mapped?&lt;br /&gt;
* Is there any other libs/datas unused in dol?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* It&#039;s perfectly possible and tested to patch the apploader trailer and raise the trailer size with [[GCM (File format)|GCM/iso]] patch. It give us 0x100000 bytes available.&lt;br /&gt;
&lt;br /&gt;
The dol entry_point call the __init_registers procedure which will set the reserved following General Purpose Registers:&lt;br /&gt;
* R1 (stack)&lt;br /&gt;
* R2 (_SDA2_BASE_) - This is the read only _SDA2_.&lt;br /&gt;
* R13 (_SDA_BASE_) - This is the read / write _SDA_.&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;mall &#039;&#039;&#039;D&#039;&#039;&#039;ata &#039;&#039;&#039;A&#039;&#039;&#039;nchors are used with a signed short offset (-0x8000 à +0x7fff).&lt;br /&gt;
* -0x8000(R13) = address of .sdata followed by .sbss&lt;br /&gt;
* -0x8000(R2) = address of .sdata2 followed by .sbss2&lt;br /&gt;
* R1 = often the .sbss2 end address + 0x10000&lt;br /&gt;
&lt;br /&gt;
So often only a part of available SDA negative offsets are used for R2 and R13 using -0x8000 as start.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== USA ===&lt;br /&gt;
Entry point: 80003154&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
 | Section | Offset   | Address  | Length   | Used  |&lt;br /&gt;
 |---------|----------|----------|----------|-------|&lt;br /&gt;
 | text0   | 00000100 | 80003100 | 000024e0 | True  |&lt;br /&gt;
 | text1   | 000025e0 | 800055e0 | 002aab80 | True  |&lt;br /&gt;
 | text2   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text3   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text4   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text5   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text6   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data7   | 002ad160 | 802b0160 | 00000020 | True  |&lt;br /&gt;
 | data8   | 002ad180 | 802b0180 | 00000020 | True  |&lt;br /&gt;
 | data9   | 002ad1a0 | 802b01a0 | 0000acc0 | True  |&lt;br /&gt;
 | data10  | 002b7e60 | 802bae60 | 000f42c0 | True  |&lt;br /&gt;
 | data11  | 003ac120 | 804335a0 | 00002b20 | True  |&lt;br /&gt;
 | data12  | 003aec40 | 80436a20 | 00006ae0 | True  |&lt;br /&gt;
 | data13  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data14  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data15  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data16  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data17  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
* bss: address:803af140 length:0008e3e8&lt;br /&gt;
* R1 = 8044d528&lt;br /&gt;
* R2 = 8043ea20&lt;br /&gt;
* R13 = 8043b5a0&lt;br /&gt;
&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
 | Section     | beg_addr | end_addr | length   |&lt;br /&gt;
 |-------------|----------|----------|----------|&lt;br /&gt;
 | system      | 80000000 | 80003100 | 00003100 |&lt;br /&gt;
 | .text0      | 80003100 | 800055e0 | 000024e0 |&lt;br /&gt;
 | .text1      | 800055e0 | 802b0160 | 002aab80 |&lt;br /&gt;
 | .ctors      | 802b0160 | 802b0180 | 00000020 |&lt;br /&gt;
 | .dtors      | 802b0180 | 802b01a0 | 00000020 |&lt;br /&gt;
 | .rodata     | 802b01a0 | 802bae60 | 0000acc0 |&lt;br /&gt;
 | .data       | 802bae60 | 803af120 | 000f42c0 |&lt;br /&gt;
 | empty       | 803af120 | 803af140 | 00000020 |&lt;br /&gt;
 | .bss        | 803af140 | 804335a0 | 00084460 |&lt;br /&gt;
 | .sdata      | 804335a0 | 804360c0 | 00002b20 |&lt;br /&gt;
 | .sbss       | 804360c0 | 80436a20 | 00000960 |&lt;br /&gt;
 | .sdata2     | 80436a20 | 8043d500 | 00006ae0 |&lt;br /&gt;
 | .sbss2      | 8043d500 | 8043d528 | 00000028 |&lt;br /&gt;
 | stack       | 8043d528 | 8044d528 | 00010000 |&lt;br /&gt;
 | empty       | 8044d528 | 8044d540 | 00000018 |&lt;br /&gt;
 | ArenaLo     | 8044d540 |          |          |&lt;br /&gt;
 | apploader   | 81200000 |        ? |        ? |&lt;br /&gt;
 | Bootrom/IPL | 81300000 |        ? |        ? |&lt;br /&gt;
 | ArenaHi     |          | 817fffa0 |          |&lt;br /&gt;
 | FST         | 817fffa0 | 81800000 | 00500000 |&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== EU ===&lt;br /&gt;
Entry point: 80003154&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
 | Section | Offset   | Address  | Length   | Used  |&lt;br /&gt;
 |---------|----------|----------|----------|-------|&lt;br /&gt;
 | text0   | 00000100 | 80003100 | 000024e0 | True  |&lt;br /&gt;
 | text1   | 000025e0 | 800055e0 | 002ac800 | True  |&lt;br /&gt;
 | text2   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text3   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text4   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text5   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text6   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data7   | 002aede0 | 802b1de0 | 00000020 | True  |&lt;br /&gt;
 | data8   | 002aee00 | 802b1e00 | 00000020 | True  |&lt;br /&gt;
 | data9   | 002aee20 | 802b1e20 | 0000f060 | True  |&lt;br /&gt;
 | data10  | 002bde80 | 802c0e80 | 000f5d40 | True  |&lt;br /&gt;
 | data11  | 003b3bc0 | 8043cbe0 | 00002b20 | True  |&lt;br /&gt;
 | data12  | 003b66e0 | 80440080 | 00006d20 | True  |&lt;br /&gt;
 | data13  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data14  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data15  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data16  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data17  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
* bss: address:803b6bc0 length:00090208&lt;br /&gt;
* R1 = 80456dc8&lt;br /&gt;
* R2 = 80448080&lt;br /&gt;
* R13 = 80444be0&lt;br /&gt;
&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
 | Section     | beg_addr | end_addr | length   |&lt;br /&gt;
 |-------------|----------|----------|----------|&lt;br /&gt;
 | system      | 80000000 | 80003100 | 00003100 |&lt;br /&gt;
 | .text0      | 80003100 | 800055e0 | 000024e0 |&lt;br /&gt;
 | .text1      | 800055e0 | 802b1de0 | 002ac800 |&lt;br /&gt;
 | .ctors      | 802b1de0 | 802b1e00 | 00000020 |&lt;br /&gt;
 | .dtors      | 802b1e00 | 802b1e20 | 00000020 |&lt;br /&gt;
 | .rodata     | 802b1e20 | 802c0e80 | 0000f060 |&lt;br /&gt;
 | .data       | 802c0e80 | 803b6bc0 | 000f5d40 |&lt;br /&gt;
 | .bss        | 803b6bc0 | 8043cbe0 | 00086020 |&lt;br /&gt;
 | .sdata      | 8043cbe0 | 8043f700 | 00002b20 |&lt;br /&gt;
 | .sbss       | 8043f700 | 80440080 | 00000980 |&lt;br /&gt;
 | .sdata2     | 80440080 | 80446da0 | 00006d20 |&lt;br /&gt;
 | .sbss2      | 80446da0 | 80446dc8 | 00000028 |&lt;br /&gt;
 | stack       | 80446dc8 | 80456dc8 | 00010000 |&lt;br /&gt;
 | empty       | 80456dc8 | 80456de0 | 00000018 |&lt;br /&gt;
 | ArenaLo     | 80456de0 |          |          |&lt;br /&gt;
 | apploader   | 81200000 |        ? |        ? |&lt;br /&gt;
 | Bootrom/IPL | 81300000 |        ? |        ? |&lt;br /&gt;
 | ArenaHi     |          | 817fff40 |          |&lt;br /&gt;
 | FST         | 817fff40 | 81800000 | 000000C0 |&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
80593A00 -&amp;gt; 80598040 Wharehouse&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== JAP ===&lt;br /&gt;
Entry point: 80003154&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
 | Section | Offset   | Address  | Length   | Used  |&lt;br /&gt;
 |---------|----------|----------|----------|-------|&lt;br /&gt;
 | text0   | 00000100 | 80003100 | 000024e0 | True  |&lt;br /&gt;
 | text1   | 000025e0 | 800055e0 | 002aab20 | True  |&lt;br /&gt;
 | text2   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text3   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text4   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text5   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text6   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data7   | 002ad100 | 802b0100 | 00000020 | True  |&lt;br /&gt;
 | data8   | 002ad120 | 802b0120 | 00000020 | True  |&lt;br /&gt;
 | data9   | 002ad140 | 802b0140 | 0000a2e0 | True  |&lt;br /&gt;
 | data10  | 002b7420 | 802ba420 | 000f3e60 | True  |&lt;br /&gt;
 | data11  | 003ab280 | 804326e0 | 00002b00 | True  |&lt;br /&gt;
 | data12  | 003add80 | 80435b40 | 00006b60 | True  |&lt;br /&gt;
 | data13  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data14  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data15  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data16  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data17  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
* bss: address:803ae280 length:0008e448&lt;br /&gt;
* R1 = 8044c6c8&lt;br /&gt;
* R2 = 8043db40&lt;br /&gt;
* R13 = 8043a6e0 &lt;br /&gt;
&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
 | Section     | beg_addr | end_addr | length   |&lt;br /&gt;
 |-------------|----------|----------|----------|&lt;br /&gt;
 | system      | 80000000 | 80003100 | 00003100 |&lt;br /&gt;
 | .text0      | 80003100 | 800055e0 | 000024e0 |&lt;br /&gt;
 | .text1      | 800055e0 | 802b0100 | 002aab20 |&lt;br /&gt;
 | .ctors      | 802b0100 | 802b0120 | 00000020 |&lt;br /&gt;
 | .dtors      | 802b0120 | 802b0140 | 00000020 |&lt;br /&gt;
 | .rodata     | 802b0140 | 802ba420 | 0000a2e0 |&lt;br /&gt;
 | .data       | 802ba420 | 803ae280 | 000f3e60 |&lt;br /&gt;
 | .bss        | 803ae280 | 804326e0 | 00084460 |&lt;br /&gt;
 | .sdata      | 804326e0 | 804351e0 | 00002b00 |&lt;br /&gt;
 | .sbss       | 804351e0 | 80435b40 | 00000960 |&lt;br /&gt;
 | .sdata2     | 80435b40 | 8043c6a0 | 00006b60 |&lt;br /&gt;
 | .sbss2      | 8043c6a0 | 8043c6c8 | 00000028 |&lt;br /&gt;
 | stack       | 8043c6c8 | 8044c6c8 | 00010000 |&lt;br /&gt;
 | empty       | 8044c6c8 | 8044c6e0 | 00000018 |&lt;br /&gt;
 | ArenaLo     | 8044c6e0 |          |          |&lt;br /&gt;
 | apploader   | 81200000 |        ? |        ? |&lt;br /&gt;
 | Bootrom/IPL | 81300000 |        ? |        ? |&lt;br /&gt;
 | ArenaHi     |          | 817fffa0 |          |&lt;br /&gt;
 | FST         | 817fffa0 | 81800000 | 00000060 |&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Symbol map ==&lt;br /&gt;
The symbol map allows to put names on procedures and datas. It can be loaded in dolphin emulator in debug mode with the .map file format.&lt;br /&gt;
&lt;br /&gt;
Symbol map USA: https://github.com/Virtual-World-RE/NeoGF/blob/main/data/GG4E-CSM-20220412.map&lt;br /&gt;
&lt;br /&gt;
== MetroTRK ==&lt;br /&gt;
&lt;br /&gt;
MetroTRK can be activated by patching the bi2.bin DebugFlag and also by patching the following addresses to start the debugger in BBA (&#039;&#039;&#039;B&#039;&#039;&#039;road&#039;&#039;&#039;B&#039;&#039;&#039;and &#039;&#039;&#039;A&#039;&#039;&#039;dapter?) mode:&lt;br /&gt;
* USA: Put a breakpoint at 80003190 then set r3 to 1&lt;br /&gt;
* EU:  Put a breakpoint at 800031C0 then set r7 to 4&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;&lt;br /&gt;
The [https://www.gc-forever.com/wiki/index.php?title=Apploader apploader reverse engineering] shows that there is debug vars in [[GCM (File format)|GCM/iso]] system files. [https://github.com/Virtual-World-RE/NeoGF/tree/main/gcmtool gcmtool.py] allow to patch them.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SDK &amp;amp; libs ==&lt;br /&gt;
All libs and SDK are staticly linked inside the dol.&lt;br /&gt;
&lt;br /&gt;
We found these libs and SDK:&lt;br /&gt;
* GCN SDK - Base dolphin SDK.&lt;br /&gt;
* Sysdolphin base library: Hal SysDolphin (HSD) Graphic and physic engine - https://github.com/doldecomp/melee/tree/master/src/sysdolphin/baselib&lt;br /&gt;
* MetroTRK: Target Resident Debugging Kernel for embedded systems. It&#039;s an embedded Kernel for debug.&lt;br /&gt;
* Metrowerks CW Runtime library: CodeWarrior: Metrowerks Standard Library and C/C++ Runtime&lt;br /&gt;
* And from ADXT/GC to CRI CFT/GC: It seems to be audio and video codecs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== H and C files ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
All 3 iso contains following .h and .c symbols in the .data, .rodata, .sdata and .sdata2. The EU version contains also the symbol &amp;quot;objalloc.h&amp;quot;.&lt;br /&gt;
 aobj.h&lt;br /&gt;
 cobj.h&lt;br /&gt;
 jobj.h&lt;br /&gt;
 lobj.h&lt;br /&gt;
 object.h&lt;br /&gt;
 &lt;br /&gt;
 GCN_Mem_Alloc.c&lt;br /&gt;
 aobj.c&lt;br /&gt;
 bytecode.c&lt;br /&gt;
 class.c&lt;br /&gt;
 cobj.c&lt;br /&gt;
 displayfunc.c&lt;br /&gt;
 dobj.c&lt;br /&gt;
 dvd.c&lt;br /&gt;
 dvdfs.c&lt;br /&gt;
 fobj.c&lt;br /&gt;
 fog.c&lt;br /&gt;
 hash.c&lt;br /&gt;
 id.c&lt;br /&gt;
 initialize.c&lt;br /&gt;
 jobj.c&lt;br /&gt;
 list.c&lt;br /&gt;
 lobj.c&lt;br /&gt;
 memory.c&lt;br /&gt;
 mobj.c&lt;br /&gt;
 mtx.c&lt;br /&gt;
 objalloc.c&lt;br /&gt;
 perf.c&lt;br /&gt;
 pobj.c&lt;br /&gt;
 robj.c&lt;br /&gt;
 tev.c&lt;br /&gt;
 texp.c&lt;br /&gt;
 texpdag.c&lt;br /&gt;
 tobj.c&lt;br /&gt;
 tpl.c&lt;br /&gt;
 util.c&lt;br /&gt;
 vi.c&lt;br /&gt;
 video.c&lt;br /&gt;
 wobj.c&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== Strings USA ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Strings list found in the dol and allowing to find libs / SDK:&lt;br /&gt;
 MetroTRK for GAMECUBE v2.0&lt;br /&gt;
 Metrowerks CW runtime library&lt;br /&gt;
 ADXT/GC Ver.8.57       Build:Feb 6 2003 18:03:46&lt;br /&gt;
 SKG/GC Ver.0.61        Build:Feb 6 2003 18:03:49&lt;br /&gt;
 ADXGC Ver.1.21         Build:Feb 6 2003 18:04:00&lt;br /&gt;
 ADXGCSDK Ver.05Sep2002 Build:Feb 6 2003 18:04:01&lt;br /&gt;
 ADXF/GC Ver.7.01       Build:Feb 6 2003 18:02:45&lt;br /&gt;
 CVFS/GC Ver.2.33       Build:Feb 6 2003 18:02:35&lt;br /&gt;
 GCCI Ver.1.09          Build:Feb 6 2003 18:02:33&lt;br /&gt;
 LSC/GC Ver.2.10        Build:Feb 6 2003 18:02:32&lt;br /&gt;
 SJ/GC Ver.6.10         Build:Feb 6 2003 18:02:53&lt;br /&gt;
 SVM/GC Ver.1.51        Build:Feb 6 2003 18:02:51&lt;br /&gt;
 MFCI/GC Ver.1.04       Build:Feb 6 2003 18:03:11&lt;br /&gt;
 AXRNA Ver.1.02         Build:Feb 6 2003 18:03:43&lt;br /&gt;
 CRI SUD/GC Ver.0.02    Build:Feb 6 2003 14:30:18&lt;br /&gt;
 CRI SFX/GC Ver.1.22    Build:Feb 6 2003 14:30:16&lt;br /&gt;
 CRI DCT/GC Ver.1.803   Build:Feb 6 2003 14:28:46&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI MPS/GC Ver.1.669   Build:Feb 6 2003 14:28:50&lt;br /&gt;
 CRI MPV/GC Ver.1.840   Build:Feb 6 2003 14:28:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFD/GC Ver.1.842   Build:Feb 6 2003 14:29:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFH/GC Ver.1.12    Build:Feb 6 2003 14:30:00&lt;br /&gt;
 MWSFD/GC Ver.2.62      Build:Feb 6 2003 14:28:42&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI CFT/GC Ver.1.24    Build:Feb 6 2003 14:28:33&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK – OS   release build: Apr 17 2003 12:33:06 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 Dolphin OS Kernel built : %s %s Apr 17 2003 12:33:06&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK – EXI  release build: Apr 17 2003 12:33:17 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - SI   release build: Apr 17 2003 12:33:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DVD  release build: Apr 22 2003 15:49:00 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - VI   release build: Apr 17 2003 12:33:22 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - PAD  release build: Apr 17 2003 12:33:44 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AI   release build: Apr 17 2003 12:33:54 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AR   release build: Apr 17 2003 12:33:55 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - ARQ  release build: Apr 17 2003 12:33:56 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AX   release build: Apr 17 2003 12:33:57 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DSP  release build: Apr 17 2003 12:34:16 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - CARD release build: Apr 17 2003 12:34:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - GX   release build: Apr 21 2003 14:55:46 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 sysdolphin_base_library&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== Strings EU ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Strings list found in the dol and allowing to find libs / SDK:&lt;br /&gt;
 Metrowerks Target Resident Kernel for PowerPC&lt;br /&gt;
 MetroTRK for GAMECUBE v2.0&lt;br /&gt;
 Metrowerks CW runtime library initializing default heap&lt;br /&gt;
 ADXT/GC     Ver.8.57 Build:Feb       6 2003 18:03:46&lt;br /&gt;
 SKG/GC      Ver.0.61 Build:Feb       6 2003 18:03:49&lt;br /&gt;
 ADXGC       Ver.1.21 Build:Feb       6 2003 18:04:00&lt;br /&gt;
 ADXGCSDK    Ver.05Sep2002 Build:Feb  6 2003 18:04:01&lt;br /&gt;
 ADXF/GC     Ver.7.01 Build:Feb       6 2003 18:02:45&lt;br /&gt;
 CVFS/GC     Ver.2.33 Build:Feb       6 2003 18:02:35&lt;br /&gt;
 GCCI        Ver.1.09 Build:Feb       6 2003 18:02:33&lt;br /&gt;
 LSC/GC      Ver.2.10 Build:Feb       6 2003 18:02:32&lt;br /&gt;
 SJ/GC       Ver.6.10 Build:Feb       6 2003 18:02:53&lt;br /&gt;
 SVM/GC      Ver.1.51 Build:Feb       6 2003 18:02:51&lt;br /&gt;
 MFCI/GC     Ver.1.04 Build:Feb       6 2003 18:03:11&lt;br /&gt;
 AXRNA       Ver.1.02 Build:Feb       6 2003 18:03:43&lt;br /&gt;
 CRI SUD/GC  Ver.0.02 Build:Feb       6 2003 14:30:18&lt;br /&gt;
 CRI SFX/GC  Ver.1.22 Build:Feb       6 2003 14:30:16&lt;br /&gt;
 CRI DCT/GC  Ver.1.803 Build:Feb      6 2003 14:28:46&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI MPS/GC  Ver.1.669 Build:Feb      6 2003 14:28:50&lt;br /&gt;
 CRI MPV/GC  Ver.1.840 Build:Feb      6 2003 14:28:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFD/GC  Ver.1.842 Build:Feb      6 2003 14:29:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFH/GC  Ver.1.12 Build:Feb       6 2003 14:30:00&lt;br /&gt;
 MWSFD/GC    Ver.2.62 Build:Feb       6 2003 14:28:42&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI CFT/GC  Ver.1.24 Build:Feb        6 2003 14:28:33&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - OS   release build: Apr 17 2003 12:33:06 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 Dolphin OS Kernel built : Apr 17 2003 12:33:06&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - EXI  release build: Apr 17 2003 12:33:17 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - SI   release build: Apr 17 2003 12:33:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DVD  release build: Apr 22 2003 15:49:00 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - VI   release build: Apr 17 2003 12:33:22 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - PAD  release build: Apr 17 2003 12:33:44 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AI   release build: Apr 17 2003 12:33:54 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AR   release build: Apr 17 2003 12:33:55 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - ARQ  release build: Apr 17 2003 12:33:56 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AX   release build: Apr 17 2003 12:33:57 (0x2301) &amp;gt;&amp;gt; &lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DSP  release build: Apr 17 2003 12:34:16 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 DSPInit(): Build Date: Apr 17 2003 12:34:16&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - CARD release build: Apr 17 2003 12:34:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - GX   release build: Apr 21 2003 14:55:46 (0x2301) &amp;gt;&amp;gt;  &lt;br /&gt;
 sysdolphin_base_library&lt;br /&gt;
 HSD_INIT_HEAP_MAX_NUM    is obsolete since 1.3.0.0.&lt;br /&gt;
 HSD_INIT_AUDIO_HEAP_SIZE is obsolete since 1.3.0.0.&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== Strings JAP ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Strings list found in the dol and allowing to find libs / SDK:&lt;br /&gt;
 Metrowerks Target Resident Kernel for PowerPC&lt;br /&gt;
 MetroTRK for GAMECUBE v2.0&lt;br /&gt;
 ADXT/GC Ver.8.57       Build:Feb  6 2003 18:03:46&lt;br /&gt;
 SKG/GC Ver.0.61        Build:Feb  6 2003 18:03:49&lt;br /&gt;
 ADXGC Ver.1.21         Build:Feb  6 2003 18:04:00&lt;br /&gt;
 ADXGCSDK Ver.05Sep2002 Build:Feb  6 2003 18:04:01&lt;br /&gt;
 ADXF/GC Ver.7.01       Build:Feb  6 2003 18:02:45&lt;br /&gt;
 CVFS/GC Ver.2.33       Build:Feb  6 2003 18:02:35&lt;br /&gt;
 GCCI Ver.1.09          Build:Feb  6 2003 18:02:33&lt;br /&gt;
 LSC/GC Ver.2.10        Build:Feb  6 2003 18:02:32&lt;br /&gt;
 SJ/GC Ver.6.10         Build:Feb  6 2003 18:02:53&lt;br /&gt;
 SVM/GC Ver.1.51        Build:Feb  6 2003 18:02:51&lt;br /&gt;
 MFCI/GC Ver.1.04       Build:Feb  6 2003 18:03:11&lt;br /&gt;
 AXRNA Ver.1.02         Build:Feb  6 2003 18:03:43&lt;br /&gt;
 CRI SUD/GC Ver.0.02    Build:Feb  6 2003 14:30:18&lt;br /&gt;
 CRI SFX/GC Ver.1.22    Build:Feb  6 2003 14:30:16&lt;br /&gt;
 CRI DCT/GC Ver.1.803   Build:Feb  6 2003 14:28:46&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI MPS/GC Ver.1.669   Build:Feb  6 2003 14:28:50&lt;br /&gt;
 CRI MPV/GC Ver.1.840   Build:Feb  6 2003 14:28:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFD/GC Ver.1.842   Build:Feb  6 2003 14:29:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFH/GC Ver.1.12    Build:Feb  6 2003 14:30:00&lt;br /&gt;
 MWSFD/GC Ver.2.62      Build:Feb  6 2003 14:28:42&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI CFT/GC Ver.1.24    Build:Feb  6 2003 14:28:33&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - OS   release build: Apr 17 2003 12:33:06 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 Dolphin OS Kernel built : Apr 17 2003 12:33:06&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - EXI  release build: Apr 17 2003 12:33:17 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - SI   release build: Apr 17 2003 12:33:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DVD  release build: Apr 22 2003 15:49:00 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - VI   release build: Apr 17 2003 12:33:22 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - PAD  release build: Apr 17 2003 12:33:44 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AI   release build: Apr 17 2003 12:33:54 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AR   release build: Apr 17 2003 12:33:55 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - ARQ  release build: Apr 17 2003 12:33:56 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AX   release build: Apr 17 2003 12:33:57 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DSP  release build: Apr 17 2003 12:34:16 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - CARD release build: Apr 17 2003 12:34:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - GX   release build: Apr 21 2003 14:55:46 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 sysdolphin_base_library&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:File format]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=DOL_(Gotcha_Force)&amp;diff=1495</id>
		<title>DOL (Gotcha Force)</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=DOL_(Gotcha_Force)&amp;diff=1495"/>
		<updated>2023-10-07T12:56:04Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: /* Symbol map */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This article is about Gotcha Force DOL file format and ongoing researches on it. See [[DOL (File format)]] for DOL file format description.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Research | 3| Research on how functions works and how the dol works is nedded. }}&lt;br /&gt;
&lt;br /&gt;
== Memory map ==&lt;br /&gt;
The dol file is mapped in memory and the free available space remaining is next used to create the Arena containing Heaps. For instance we found Warehouse variables in the EU dol mapped in the interval [80593190:80598044[.&lt;br /&gt;
&lt;br /&gt;
So patching the dol is hard because we have to find unused free space in the memory. The [https://www.gc-forever.com/wiki/index.php?title=Apploader apploader reverse engineering] shows that max dol mapping address in memory are:&lt;br /&gt;
* 0x80700000  // production boards&lt;br /&gt;
* 0x81200000  // development boards&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;&lt;br /&gt;
In production we can override MetroTRK memory areas or even override apploader trailer before the bootrom/IPL area. Further investigations has to be done on the [[GCM (File format)|iso/GCM]] sys to see how debug memory is mapped in debug mode (apploader vars used in the apploader).&lt;br /&gt;
* Is it possible to know where exactly MetroTRK is mapped?&lt;br /&gt;
* Is there any other libs/datas unused in dol?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* It&#039;s perfectly possible and tested to patch the apploader trailer and raise the trailer size with [[GCM (File format)|GCM/iso]] patch. It give us 0x100000 bytes available.&lt;br /&gt;
&lt;br /&gt;
The dol entry_point call the __init_registers procedure which will set the reserved following General Purpose Registers:&lt;br /&gt;
* R1 (stack)&lt;br /&gt;
* R2 (_SDA2_BASE_) - This is the read only _SDA2_.&lt;br /&gt;
* R13 (_SDA_BASE_) - This is the read / write _SDA_.&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;mall &#039;&#039;&#039;D&#039;&#039;&#039;ata &#039;&#039;&#039;A&#039;&#039;&#039;nchors are used with a signed short offset (-0x8000 à +0x7fff).&lt;br /&gt;
* -0x8000(R13) = address of .sdata followed by .sbss&lt;br /&gt;
* -0x8000(R2) = address of .sdata2 followed by .sbss2&lt;br /&gt;
* R1 = often the .sbss2 end address + 0x10000&lt;br /&gt;
&lt;br /&gt;
So often only a part of available SDA negative offsets are used for R2 and R13 using -0x8000 as start.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== USA ===&lt;br /&gt;
Entry point: 80003154&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
 | Section | Offset   | Address  | Length   | Used  |&lt;br /&gt;
 |---------|----------|----------|----------|-------|&lt;br /&gt;
 | text0   | 00000100 | 80003100 | 000024e0 | True  |&lt;br /&gt;
 | text1   | 000025e0 | 800055e0 | 002aab80 | True  |&lt;br /&gt;
 | text2   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text3   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text4   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text5   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text6   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data7   | 002ad160 | 802b0160 | 00000020 | True  |&lt;br /&gt;
 | data8   | 002ad180 | 802b0180 | 00000020 | True  |&lt;br /&gt;
 | data9   | 002ad1a0 | 802b01a0 | 0000acc0 | True  |&lt;br /&gt;
 | data10  | 002b7e60 | 802bae60 | 000f42c0 | True  |&lt;br /&gt;
 | data11  | 003ac120 | 804335a0 | 00002b20 | True  |&lt;br /&gt;
 | data12  | 003aec40 | 80436a20 | 00006ae0 | True  |&lt;br /&gt;
 | data13  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data14  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data15  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data16  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data17  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
* bss: address:803af140 length:0008e3e8&lt;br /&gt;
* R1 = 8044d528&lt;br /&gt;
* R2 = 8043ea20&lt;br /&gt;
* R13 = 8043b5a0&lt;br /&gt;
&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
 | Section     | beg_addr | end_addr | length   |&lt;br /&gt;
 |-------------|----------|----------|----------|&lt;br /&gt;
 | system      | 80000000 | 80003100 | 00003100 |&lt;br /&gt;
 | .text0      | 80003100 | 800055e0 | 000024e0 |&lt;br /&gt;
 | .text1      | 800055e0 | 802b0160 | 002aab80 |&lt;br /&gt;
 | .ctors      | 802b0160 | 802b0180 | 00000020 |&lt;br /&gt;
 | .dtors      | 802b0180 | 802b01a0 | 00000020 |&lt;br /&gt;
 | .rodata     | 802b01a0 | 802bae60 | 0000acc0 |&lt;br /&gt;
 | .data       | 802bae60 | 803af120 | 000f42c0 |&lt;br /&gt;
 | empty       | 803af120 | 803af140 | 00000020 |&lt;br /&gt;
 | .bss        | 803af140 | 804335a0 | 00084460 |&lt;br /&gt;
 | .sdata      | 804335a0 | 804360c0 | 00002b20 |&lt;br /&gt;
 | .sbss       | 804360c0 | 80436a20 | 00000960 |&lt;br /&gt;
 | .sdata2     | 80436a20 | 8043d500 | 00006ae0 |&lt;br /&gt;
 | .sbss2      | 8043d500 | 8043d528 | 00000028 |&lt;br /&gt;
 | stack       | 8043d528 | 8044d528 | 00010000 |&lt;br /&gt;
 | empty       | 8044d528 | 8044d540 | 00000018 |&lt;br /&gt;
 | ArenaLo     | 8044d540 |          |          |&lt;br /&gt;
 | apploader   | 81200000 |        ? |        ? |&lt;br /&gt;
 | Bootrom/IPL | 81300000 |        ? |        ? |&lt;br /&gt;
 | ArenaHi     |          | 817fffa0 |          |&lt;br /&gt;
 | FST         | 817fffa0 | 81800000 | 00500000 |&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== EU ===&lt;br /&gt;
Entry point: 80003154&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
 | Section | Offset   | Address  | Length   | Used  |&lt;br /&gt;
 |---------|----------|----------|----------|-------|&lt;br /&gt;
 | text0   | 00000100 | 80003100 | 000024e0 | True  |&lt;br /&gt;
 | text1   | 000025e0 | 800055e0 | 002ac800 | True  |&lt;br /&gt;
 | text2   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text3   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text4   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text5   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text6   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data7   | 002aede0 | 802b1de0 | 00000020 | True  |&lt;br /&gt;
 | data8   | 002aee00 | 802b1e00 | 00000020 | True  |&lt;br /&gt;
 | data9   | 002aee20 | 802b1e20 | 0000f060 | True  |&lt;br /&gt;
 | data10  | 002bde80 | 802c0e80 | 000f5d40 | True  |&lt;br /&gt;
 | data11  | 003b3bc0 | 8043cbe0 | 00002b20 | True  |&lt;br /&gt;
 | data12  | 003b66e0 | 80440080 | 00006d20 | True  |&lt;br /&gt;
 | data13  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data14  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data15  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data16  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data17  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
* bss: address:803b6bc0 length:00090208&lt;br /&gt;
* R1 = 80456dc8&lt;br /&gt;
* R2 = 80448080&lt;br /&gt;
* R13 = 80444be0&lt;br /&gt;
&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
 | Section     | beg_addr | end_addr | length   |&lt;br /&gt;
 |-------------|----------|----------|----------|&lt;br /&gt;
 | system      | 80000000 | 80003100 | 00003100 |&lt;br /&gt;
 | .text0      | 80003100 | 800055e0 | 000024e0 |&lt;br /&gt;
 | .text1      | 800055e0 | 802b1de0 | 002ac800 |&lt;br /&gt;
 | .ctors      | 802b1de0 | 802b1e00 | 00000020 |&lt;br /&gt;
 | .dtors      | 802b1e00 | 802b1e20 | 00000020 |&lt;br /&gt;
 | .rodata     | 802b1e20 | 802c0e80 | 0000f060 |&lt;br /&gt;
 | .data       | 802c0e80 | 803b6bc0 | 000f5d40 |&lt;br /&gt;
 | .bss        | 803b6bc0 | 8043cbe0 | 00086020 |&lt;br /&gt;
 | .sdata      | 8043cbe0 | 8043f700 | 00002b20 |&lt;br /&gt;
 | .sbss       | 8043f700 | 80440080 | 00000980 |&lt;br /&gt;
 | .sdata2     | 80440080 | 80446da0 | 00006d20 |&lt;br /&gt;
 | .sbss2      | 80446da0 | 80446dc8 | 00000028 |&lt;br /&gt;
 | stack       | 80446dc8 | 80456dc8 | 00010000 |&lt;br /&gt;
 | empty       | 80456dc8 | 80456de0 | 00000018 |&lt;br /&gt;
 | ArenaLo     | 80456de0 |          |          |&lt;br /&gt;
 | apploader   | 81200000 |        ? |        ? |&lt;br /&gt;
 | Bootrom/IPL | 81300000 |        ? |        ? |&lt;br /&gt;
 | ArenaHi     |          | 817fff40 |          |&lt;br /&gt;
 | FST         | 817fff40 | 81800000 | 000000C0 |&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
80593A00 -&amp;gt; 80598040 Wharehouse&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== JAP ===&lt;br /&gt;
Entry point: 80003154&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
 | Section | Offset   | Address  | Length   | Used  |&lt;br /&gt;
 |---------|----------|----------|----------|-------|&lt;br /&gt;
 | text0   | 00000100 | 80003100 | 000024e0 | True  |&lt;br /&gt;
 | text1   | 000025e0 | 800055e0 | 002aab20 | True  |&lt;br /&gt;
 | text2   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text3   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text4   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text5   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text6   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data7   | 002ad100 | 802b0100 | 00000020 | True  |&lt;br /&gt;
 | data8   | 002ad120 | 802b0120 | 00000020 | True  |&lt;br /&gt;
 | data9   | 002ad140 | 802b0140 | 0000a2e0 | True  |&lt;br /&gt;
 | data10  | 002b7420 | 802ba420 | 000f3e60 | True  |&lt;br /&gt;
 | data11  | 003ab280 | 804326e0 | 00002b00 | True  |&lt;br /&gt;
 | data12  | 003add80 | 80435b40 | 00006b60 | True  |&lt;br /&gt;
 | data13  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data14  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data15  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data16  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data17  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
* bss: address:803ae280 length:0008e448&lt;br /&gt;
* R1 = 8044c6c8&lt;br /&gt;
* R2 = 8043db40&lt;br /&gt;
* R13 = 8043a6e0 &lt;br /&gt;
&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
 | Section     | beg_addr | end_addr | length   |&lt;br /&gt;
 |-------------|----------|----------|----------|&lt;br /&gt;
 | system      | 80000000 | 80003100 | 00003100 |&lt;br /&gt;
 | .text0      | 80003100 | 800055e0 | 000024e0 |&lt;br /&gt;
 | .text1      | 800055e0 | 802b0100 | 002aab20 |&lt;br /&gt;
 | .ctors      | 802b0100 | 802b0120 | 00000020 |&lt;br /&gt;
 | .dtors      | 802b0120 | 802b0140 | 00000020 |&lt;br /&gt;
 | .rodata     | 802b0140 | 802ba420 | 0000a2e0 |&lt;br /&gt;
 | .data       | 802ba420 | 803ae280 | 000f3e60 |&lt;br /&gt;
 | .bss        | 803ae280 | 804326e0 | 00084460 |&lt;br /&gt;
 | .sdata      | 804326e0 | 804351e0 | 00002b00 |&lt;br /&gt;
 | .sbss       | 804351e0 | 80435b40 | 00000960 |&lt;br /&gt;
 | .sdata2     | 80435b40 | 8043c6a0 | 00006b60 |&lt;br /&gt;
 | .sbss2      | 8043c6a0 | 8043c6c8 | 00000028 |&lt;br /&gt;
 | stack       | 8043c6c8 | 8044c6c8 | 00010000 |&lt;br /&gt;
 | empty       | 8044c6c8 | 8044c6e0 | 00000018 |&lt;br /&gt;
 | ArenaLo     | 8044c6e0 |          |          |&lt;br /&gt;
 | apploader   | 81200000 |        ? |        ? |&lt;br /&gt;
 | Bootrom/IPL | 81300000 |        ? |        ? |&lt;br /&gt;
 | ArenaHi     |          | 817fffa0 |          |&lt;br /&gt;
 | FST         | 817fffa0 | 81800000 | 00000060 |&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Symbol map ==&lt;br /&gt;
The symbol map allows to put names on procedures and datas. It can be loaded in dolphin emulator in debug mode with the .map file format.&lt;br /&gt;
&lt;br /&gt;
Symbol map USA: https://github.com/Virtual-World-RE/NeoGF/blob/main/data/GG4E-CSM-20220412.map&lt;br /&gt;
&lt;br /&gt;
== MetroTRK ==&lt;br /&gt;
&lt;br /&gt;
MetroTRK can be activated by patching the bi2.bin DebugFlag and also by patching the following addresses to start the debugger in BBA (&#039;&#039;&#039;B&#039;&#039;&#039;road&#039;&#039;&#039;B&#039;&#039;&#039;and &#039;&#039;&#039;A&#039;&#039;&#039;dapter ?) mode:&lt;br /&gt;
* USA: Put a breakpoint at 80003190 then set r3 to 1&lt;br /&gt;
* EU:  Put a breakpoint at 800031C0 then set r7 to 4&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;&lt;br /&gt;
The [https://www.gc-forever.com/wiki/index.php?title=Apploader apploader reverse engineering] shows that there is debug vars in [[GCM (File format)|GCM/iso]] system files. [https://github.com/Virtual-World-RE/NeoGF/tree/main/gcmtool gcmtool.py] allow to patch them.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SDK &amp;amp; libs ==&lt;br /&gt;
All libs and SDK are staticly linked inside the dol.&lt;br /&gt;
&lt;br /&gt;
We found these libs and SDK:&lt;br /&gt;
* GCN SDK - Base dolphin SDK.&lt;br /&gt;
* Sysdolphin base library: Hal SysDolphin (HSD) Graphic and physic engine - https://github.com/doldecomp/melee/tree/master/src/sysdolphin/baselib&lt;br /&gt;
* MetroTRK: Target Resident Debugging Kernel for embedded systems. It&#039;s an embedded Kernel for debug.&lt;br /&gt;
* Metrowerks CW Runtime library: CodeWarrior: Metrowerks Standard Library and C/C++ Runtime&lt;br /&gt;
* And from ADXT/GC to CRI CFT/GC: It seems to be audio and video codecs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== H and C files ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
All 3 iso contains following .h and .c symbols in the .data, .rodata, .sdata and .sdata2. The EU version contains also the symbol &amp;quot;objalloc.h&amp;quot;.&lt;br /&gt;
 aobj.h&lt;br /&gt;
 cobj.h&lt;br /&gt;
 jobj.h&lt;br /&gt;
 lobj.h&lt;br /&gt;
 object.h&lt;br /&gt;
 &lt;br /&gt;
 GCN_Mem_Alloc.c&lt;br /&gt;
 aobj.c&lt;br /&gt;
 bytecode.c&lt;br /&gt;
 class.c&lt;br /&gt;
 cobj.c&lt;br /&gt;
 displayfunc.c&lt;br /&gt;
 dobj.c&lt;br /&gt;
 dvd.c&lt;br /&gt;
 dvdfs.c&lt;br /&gt;
 fobj.c&lt;br /&gt;
 fog.c&lt;br /&gt;
 hash.c&lt;br /&gt;
 id.c&lt;br /&gt;
 initialize.c&lt;br /&gt;
 jobj.c&lt;br /&gt;
 list.c&lt;br /&gt;
 lobj.c&lt;br /&gt;
 memory.c&lt;br /&gt;
 mobj.c&lt;br /&gt;
 mtx.c&lt;br /&gt;
 objalloc.c&lt;br /&gt;
 perf.c&lt;br /&gt;
 pobj.c&lt;br /&gt;
 robj.c&lt;br /&gt;
 tev.c&lt;br /&gt;
 texp.c&lt;br /&gt;
 texpdag.c&lt;br /&gt;
 tobj.c&lt;br /&gt;
 tpl.c&lt;br /&gt;
 util.c&lt;br /&gt;
 vi.c&lt;br /&gt;
 video.c&lt;br /&gt;
 wobj.c&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== Strings USA ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Strings list found in the dol and allowing to find libs / SDK:&lt;br /&gt;
 MetroTRK for GAMECUBE v2.0&lt;br /&gt;
 Metrowerks CW runtime library&lt;br /&gt;
 ADXT/GC Ver.8.57       Build:Feb 6 2003 18:03:46&lt;br /&gt;
 SKG/GC Ver.0.61        Build:Feb 6 2003 18:03:49&lt;br /&gt;
 ADXGC Ver.1.21         Build:Feb 6 2003 18:04:00&lt;br /&gt;
 ADXGCSDK Ver.05Sep2002 Build:Feb 6 2003 18:04:01&lt;br /&gt;
 ADXF/GC Ver.7.01       Build:Feb 6 2003 18:02:45&lt;br /&gt;
 CVFS/GC Ver.2.33       Build:Feb 6 2003 18:02:35&lt;br /&gt;
 GCCI Ver.1.09          Build:Feb 6 2003 18:02:33&lt;br /&gt;
 LSC/GC Ver.2.10        Build:Feb 6 2003 18:02:32&lt;br /&gt;
 SJ/GC Ver.6.10         Build:Feb 6 2003 18:02:53&lt;br /&gt;
 SVM/GC Ver.1.51        Build:Feb 6 2003 18:02:51&lt;br /&gt;
 MFCI/GC Ver.1.04       Build:Feb 6 2003 18:03:11&lt;br /&gt;
 AXRNA Ver.1.02         Build:Feb 6 2003 18:03:43&lt;br /&gt;
 CRI SUD/GC Ver.0.02    Build:Feb 6 2003 14:30:18&lt;br /&gt;
 CRI SFX/GC Ver.1.22    Build:Feb 6 2003 14:30:16&lt;br /&gt;
 CRI DCT/GC Ver.1.803   Build:Feb 6 2003 14:28:46&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI MPS/GC Ver.1.669   Build:Feb 6 2003 14:28:50&lt;br /&gt;
 CRI MPV/GC Ver.1.840   Build:Feb 6 2003 14:28:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFD/GC Ver.1.842   Build:Feb 6 2003 14:29:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFH/GC Ver.1.12    Build:Feb 6 2003 14:30:00&lt;br /&gt;
 MWSFD/GC Ver.2.62      Build:Feb 6 2003 14:28:42&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI CFT/GC Ver.1.24    Build:Feb 6 2003 14:28:33&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK – OS   release build: Apr 17 2003 12:33:06 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 Dolphin OS Kernel built : %s %s Apr 17 2003 12:33:06&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK – EXI  release build: Apr 17 2003 12:33:17 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - SI   release build: Apr 17 2003 12:33:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DVD  release build: Apr 22 2003 15:49:00 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - VI   release build: Apr 17 2003 12:33:22 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - PAD  release build: Apr 17 2003 12:33:44 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AI   release build: Apr 17 2003 12:33:54 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AR   release build: Apr 17 2003 12:33:55 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - ARQ  release build: Apr 17 2003 12:33:56 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AX   release build: Apr 17 2003 12:33:57 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DSP  release build: Apr 17 2003 12:34:16 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - CARD release build: Apr 17 2003 12:34:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - GX   release build: Apr 21 2003 14:55:46 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 sysdolphin_base_library&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== Strings EU ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Strings list found in the dol and allowing to find libs / SDK:&lt;br /&gt;
 Metrowerks Target Resident Kernel for PowerPC&lt;br /&gt;
 MetroTRK for GAMECUBE v2.0&lt;br /&gt;
 Metrowerks CW runtime library initializing default heap&lt;br /&gt;
 ADXT/GC     Ver.8.57 Build:Feb       6 2003 18:03:46&lt;br /&gt;
 SKG/GC      Ver.0.61 Build:Feb       6 2003 18:03:49&lt;br /&gt;
 ADXGC       Ver.1.21 Build:Feb       6 2003 18:04:00&lt;br /&gt;
 ADXGCSDK    Ver.05Sep2002 Build:Feb  6 2003 18:04:01&lt;br /&gt;
 ADXF/GC     Ver.7.01 Build:Feb       6 2003 18:02:45&lt;br /&gt;
 CVFS/GC     Ver.2.33 Build:Feb       6 2003 18:02:35&lt;br /&gt;
 GCCI        Ver.1.09 Build:Feb       6 2003 18:02:33&lt;br /&gt;
 LSC/GC      Ver.2.10 Build:Feb       6 2003 18:02:32&lt;br /&gt;
 SJ/GC       Ver.6.10 Build:Feb       6 2003 18:02:53&lt;br /&gt;
 SVM/GC      Ver.1.51 Build:Feb       6 2003 18:02:51&lt;br /&gt;
 MFCI/GC     Ver.1.04 Build:Feb       6 2003 18:03:11&lt;br /&gt;
 AXRNA       Ver.1.02 Build:Feb       6 2003 18:03:43&lt;br /&gt;
 CRI SUD/GC  Ver.0.02 Build:Feb       6 2003 14:30:18&lt;br /&gt;
 CRI SFX/GC  Ver.1.22 Build:Feb       6 2003 14:30:16&lt;br /&gt;
 CRI DCT/GC  Ver.1.803 Build:Feb      6 2003 14:28:46&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI MPS/GC  Ver.1.669 Build:Feb      6 2003 14:28:50&lt;br /&gt;
 CRI MPV/GC  Ver.1.840 Build:Feb      6 2003 14:28:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFD/GC  Ver.1.842 Build:Feb      6 2003 14:29:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFH/GC  Ver.1.12 Build:Feb       6 2003 14:30:00&lt;br /&gt;
 MWSFD/GC    Ver.2.62 Build:Feb       6 2003 14:28:42&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI CFT/GC  Ver.1.24 Build:Feb        6 2003 14:28:33&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - OS   release build: Apr 17 2003 12:33:06 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 Dolphin OS Kernel built : Apr 17 2003 12:33:06&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - EXI  release build: Apr 17 2003 12:33:17 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - SI   release build: Apr 17 2003 12:33:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DVD  release build: Apr 22 2003 15:49:00 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - VI   release build: Apr 17 2003 12:33:22 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - PAD  release build: Apr 17 2003 12:33:44 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AI   release build: Apr 17 2003 12:33:54 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AR   release build: Apr 17 2003 12:33:55 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - ARQ  release build: Apr 17 2003 12:33:56 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AX   release build: Apr 17 2003 12:33:57 (0x2301) &amp;gt;&amp;gt; &lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DSP  release build: Apr 17 2003 12:34:16 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 DSPInit(): Build Date: Apr 17 2003 12:34:16&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - CARD release build: Apr 17 2003 12:34:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - GX   release build: Apr 21 2003 14:55:46 (0x2301) &amp;gt;&amp;gt;  &lt;br /&gt;
 sysdolphin_base_library&lt;br /&gt;
 HSD_INIT_HEAP_MAX_NUM    is obsolete since 1.3.0.0.&lt;br /&gt;
 HSD_INIT_AUDIO_HEAP_SIZE is obsolete since 1.3.0.0.&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== Strings JAP ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Strings list found in the dol and allowing to find libs / SDK:&lt;br /&gt;
 Metrowerks Target Resident Kernel for PowerPC&lt;br /&gt;
 MetroTRK for GAMECUBE v2.0&lt;br /&gt;
 ADXT/GC Ver.8.57       Build:Feb  6 2003 18:03:46&lt;br /&gt;
 SKG/GC Ver.0.61        Build:Feb  6 2003 18:03:49&lt;br /&gt;
 ADXGC Ver.1.21         Build:Feb  6 2003 18:04:00&lt;br /&gt;
 ADXGCSDK Ver.05Sep2002 Build:Feb  6 2003 18:04:01&lt;br /&gt;
 ADXF/GC Ver.7.01       Build:Feb  6 2003 18:02:45&lt;br /&gt;
 CVFS/GC Ver.2.33       Build:Feb  6 2003 18:02:35&lt;br /&gt;
 GCCI Ver.1.09          Build:Feb  6 2003 18:02:33&lt;br /&gt;
 LSC/GC Ver.2.10        Build:Feb  6 2003 18:02:32&lt;br /&gt;
 SJ/GC Ver.6.10         Build:Feb  6 2003 18:02:53&lt;br /&gt;
 SVM/GC Ver.1.51        Build:Feb  6 2003 18:02:51&lt;br /&gt;
 MFCI/GC Ver.1.04       Build:Feb  6 2003 18:03:11&lt;br /&gt;
 AXRNA Ver.1.02         Build:Feb  6 2003 18:03:43&lt;br /&gt;
 CRI SUD/GC Ver.0.02    Build:Feb  6 2003 14:30:18&lt;br /&gt;
 CRI SFX/GC Ver.1.22    Build:Feb  6 2003 14:30:16&lt;br /&gt;
 CRI DCT/GC Ver.1.803   Build:Feb  6 2003 14:28:46&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI MPS/GC Ver.1.669   Build:Feb  6 2003 14:28:50&lt;br /&gt;
 CRI MPV/GC Ver.1.840   Build:Feb  6 2003 14:28:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFD/GC Ver.1.842   Build:Feb  6 2003 14:29:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFH/GC Ver.1.12    Build:Feb  6 2003 14:30:00&lt;br /&gt;
 MWSFD/GC Ver.2.62      Build:Feb  6 2003 14:28:42&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI CFT/GC Ver.1.24    Build:Feb  6 2003 14:28:33&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - OS   release build: Apr 17 2003 12:33:06 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 Dolphin OS Kernel built : Apr 17 2003 12:33:06&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - EXI  release build: Apr 17 2003 12:33:17 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - SI   release build: Apr 17 2003 12:33:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DVD  release build: Apr 22 2003 15:49:00 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - VI   release build: Apr 17 2003 12:33:22 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - PAD  release build: Apr 17 2003 12:33:44 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AI   release build: Apr 17 2003 12:33:54 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AR   release build: Apr 17 2003 12:33:55 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - ARQ  release build: Apr 17 2003 12:33:56 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AX   release build: Apr 17 2003 12:33:57 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DSP  release build: Apr 17 2003 12:34:16 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - CARD release build: Apr 17 2003 12:34:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - GX   release build: Apr 21 2003 14:55:46 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 sysdolphin_base_library&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:File format]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=DOL_(Gotcha_Force)&amp;diff=1494</id>
		<title>DOL (Gotcha Force)</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=DOL_(Gotcha_Force)&amp;diff=1494"/>
		<updated>2023-10-07T12:55:56Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: /* SDK &amp;amp; libs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This article is about Gotcha Force DOL file format and ongoing researches on it. See [[DOL (File format)]] for DOL file format description.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Research | 3| Research on how functions works and how the dol works is nedded. }}&lt;br /&gt;
&lt;br /&gt;
== Memory map ==&lt;br /&gt;
The dol file is mapped in memory and the free available space remaining is next used to create the Arena containing Heaps. For instance we found Warehouse variables in the EU dol mapped in the interval [80593190:80598044[.&lt;br /&gt;
&lt;br /&gt;
So patching the dol is hard because we have to find unused free space in the memory. The [https://www.gc-forever.com/wiki/index.php?title=Apploader apploader reverse engineering] shows that max dol mapping address in memory are:&lt;br /&gt;
* 0x80700000  // production boards&lt;br /&gt;
* 0x81200000  // development boards&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;&lt;br /&gt;
In production we can override MetroTRK memory areas or even override apploader trailer before the bootrom/IPL area. Further investigations has to be done on the [[GCM (File format)|iso/GCM]] sys to see how debug memory is mapped in debug mode (apploader vars used in the apploader).&lt;br /&gt;
* Is it possible to know where exactly MetroTRK is mapped?&lt;br /&gt;
* Is there any other libs/datas unused in dol?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
* It&#039;s perfectly possible and tested to patch the apploader trailer and raise the trailer size with [[GCM (File format)|GCM/iso]] patch. It give us 0x100000 bytes available.&lt;br /&gt;
&lt;br /&gt;
The dol entry_point call the __init_registers procedure which will set the reserved following General Purpose Registers:&lt;br /&gt;
* R1 (stack)&lt;br /&gt;
* R2 (_SDA2_BASE_) - This is the read only _SDA2_.&lt;br /&gt;
* R13 (_SDA_BASE_) - This is the read / write _SDA_.&lt;br /&gt;
&#039;&#039;&#039;S&#039;&#039;&#039;mall &#039;&#039;&#039;D&#039;&#039;&#039;ata &#039;&#039;&#039;A&#039;&#039;&#039;nchors are used with a signed short offset (-0x8000 à +0x7fff).&lt;br /&gt;
* -0x8000(R13) = address of .sdata followed by .sbss&lt;br /&gt;
* -0x8000(R2) = address of .sdata2 followed by .sbss2&lt;br /&gt;
* R1 = often the .sbss2 end address + 0x10000&lt;br /&gt;
&lt;br /&gt;
So often only a part of available SDA negative offsets are used for R2 and R13 using -0x8000 as start.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== USA ===&lt;br /&gt;
Entry point: 80003154&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
 | Section | Offset   | Address  | Length   | Used  |&lt;br /&gt;
 |---------|----------|----------|----------|-------|&lt;br /&gt;
 | text0   | 00000100 | 80003100 | 000024e0 | True  |&lt;br /&gt;
 | text1   | 000025e0 | 800055e0 | 002aab80 | True  |&lt;br /&gt;
 | text2   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text3   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text4   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text5   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text6   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data7   | 002ad160 | 802b0160 | 00000020 | True  |&lt;br /&gt;
 | data8   | 002ad180 | 802b0180 | 00000020 | True  |&lt;br /&gt;
 | data9   | 002ad1a0 | 802b01a0 | 0000acc0 | True  |&lt;br /&gt;
 | data10  | 002b7e60 | 802bae60 | 000f42c0 | True  |&lt;br /&gt;
 | data11  | 003ac120 | 804335a0 | 00002b20 | True  |&lt;br /&gt;
 | data12  | 003aec40 | 80436a20 | 00006ae0 | True  |&lt;br /&gt;
 | data13  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data14  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data15  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data16  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data17  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
* bss: address:803af140 length:0008e3e8&lt;br /&gt;
* R1 = 8044d528&lt;br /&gt;
* R2 = 8043ea20&lt;br /&gt;
* R13 = 8043b5a0&lt;br /&gt;
&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
 | Section     | beg_addr | end_addr | length   |&lt;br /&gt;
 |-------------|----------|----------|----------|&lt;br /&gt;
 | system      | 80000000 | 80003100 | 00003100 |&lt;br /&gt;
 | .text0      | 80003100 | 800055e0 | 000024e0 |&lt;br /&gt;
 | .text1      | 800055e0 | 802b0160 | 002aab80 |&lt;br /&gt;
 | .ctors      | 802b0160 | 802b0180 | 00000020 |&lt;br /&gt;
 | .dtors      | 802b0180 | 802b01a0 | 00000020 |&lt;br /&gt;
 | .rodata     | 802b01a0 | 802bae60 | 0000acc0 |&lt;br /&gt;
 | .data       | 802bae60 | 803af120 | 000f42c0 |&lt;br /&gt;
 | empty       | 803af120 | 803af140 | 00000020 |&lt;br /&gt;
 | .bss        | 803af140 | 804335a0 | 00084460 |&lt;br /&gt;
 | .sdata      | 804335a0 | 804360c0 | 00002b20 |&lt;br /&gt;
 | .sbss       | 804360c0 | 80436a20 | 00000960 |&lt;br /&gt;
 | .sdata2     | 80436a20 | 8043d500 | 00006ae0 |&lt;br /&gt;
 | .sbss2      | 8043d500 | 8043d528 | 00000028 |&lt;br /&gt;
 | stack       | 8043d528 | 8044d528 | 00010000 |&lt;br /&gt;
 | empty       | 8044d528 | 8044d540 | 00000018 |&lt;br /&gt;
 | ArenaLo     | 8044d540 |          |          |&lt;br /&gt;
 | apploader   | 81200000 |        ? |        ? |&lt;br /&gt;
 | Bootrom/IPL | 81300000 |        ? |        ? |&lt;br /&gt;
 | ArenaHi     |          | 817fffa0 |          |&lt;br /&gt;
 | FST         | 817fffa0 | 81800000 | 00500000 |&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== EU ===&lt;br /&gt;
Entry point: 80003154&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
 | Section | Offset   | Address  | Length   | Used  |&lt;br /&gt;
 |---------|----------|----------|----------|-------|&lt;br /&gt;
 | text0   | 00000100 | 80003100 | 000024e0 | True  |&lt;br /&gt;
 | text1   | 000025e0 | 800055e0 | 002ac800 | True  |&lt;br /&gt;
 | text2   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text3   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text4   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text5   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text6   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data7   | 002aede0 | 802b1de0 | 00000020 | True  |&lt;br /&gt;
 | data8   | 002aee00 | 802b1e00 | 00000020 | True  |&lt;br /&gt;
 | data9   | 002aee20 | 802b1e20 | 0000f060 | True  |&lt;br /&gt;
 | data10  | 002bde80 | 802c0e80 | 000f5d40 | True  |&lt;br /&gt;
 | data11  | 003b3bc0 | 8043cbe0 | 00002b20 | True  |&lt;br /&gt;
 | data12  | 003b66e0 | 80440080 | 00006d20 | True  |&lt;br /&gt;
 | data13  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data14  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data15  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data16  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data17  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
* bss: address:803b6bc0 length:00090208&lt;br /&gt;
* R1 = 80456dc8&lt;br /&gt;
* R2 = 80448080&lt;br /&gt;
* R13 = 80444be0&lt;br /&gt;
&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
 | Section     | beg_addr | end_addr | length   |&lt;br /&gt;
 |-------------|----------|----------|----------|&lt;br /&gt;
 | system      | 80000000 | 80003100 | 00003100 |&lt;br /&gt;
 | .text0      | 80003100 | 800055e0 | 000024e0 |&lt;br /&gt;
 | .text1      | 800055e0 | 802b1de0 | 002ac800 |&lt;br /&gt;
 | .ctors      | 802b1de0 | 802b1e00 | 00000020 |&lt;br /&gt;
 | .dtors      | 802b1e00 | 802b1e20 | 00000020 |&lt;br /&gt;
 | .rodata     | 802b1e20 | 802c0e80 | 0000f060 |&lt;br /&gt;
 | .data       | 802c0e80 | 803b6bc0 | 000f5d40 |&lt;br /&gt;
 | .bss        | 803b6bc0 | 8043cbe0 | 00086020 |&lt;br /&gt;
 | .sdata      | 8043cbe0 | 8043f700 | 00002b20 |&lt;br /&gt;
 | .sbss       | 8043f700 | 80440080 | 00000980 |&lt;br /&gt;
 | .sdata2     | 80440080 | 80446da0 | 00006d20 |&lt;br /&gt;
 | .sbss2      | 80446da0 | 80446dc8 | 00000028 |&lt;br /&gt;
 | stack       | 80446dc8 | 80456dc8 | 00010000 |&lt;br /&gt;
 | empty       | 80456dc8 | 80456de0 | 00000018 |&lt;br /&gt;
 | ArenaLo     | 80456de0 |          |          |&lt;br /&gt;
 | apploader   | 81200000 |        ? |        ? |&lt;br /&gt;
 | Bootrom/IPL | 81300000 |        ? |        ? |&lt;br /&gt;
 | ArenaHi     |          | 817fff40 |          |&lt;br /&gt;
 | FST         | 817fff40 | 81800000 | 000000C0 |&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
80593A00 -&amp;gt; 80598040 Wharehouse&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== JAP ===&lt;br /&gt;
Entry point: 80003154&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
 | Section | Offset   | Address  | Length   | Used  |&lt;br /&gt;
 |---------|----------|----------|----------|-------|&lt;br /&gt;
 | text0   | 00000100 | 80003100 | 000024e0 | True  |&lt;br /&gt;
 | text1   | 000025e0 | 800055e0 | 002aab20 | True  |&lt;br /&gt;
 | text2   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text3   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text4   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text5   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | text6   | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data7   | 002ad100 | 802b0100 | 00000020 | True  |&lt;br /&gt;
 | data8   | 002ad120 | 802b0120 | 00000020 | True  |&lt;br /&gt;
 | data9   | 002ad140 | 802b0140 | 0000a2e0 | True  |&lt;br /&gt;
 | data10  | 002b7420 | 802ba420 | 000f3e60 | True  |&lt;br /&gt;
 | data11  | 003ab280 | 804326e0 | 00002b00 | True  |&lt;br /&gt;
 | data12  | 003add80 | 80435b40 | 00006b60 | True  |&lt;br /&gt;
 | data13  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data14  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data15  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data16  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 | data17  | 00000000 | 00000000 | 00000000 | False |&lt;br /&gt;
 |--------------------------------------------------|&lt;br /&gt;
&lt;br /&gt;
* bss: address:803ae280 length:0008e448&lt;br /&gt;
* R1 = 8044c6c8&lt;br /&gt;
* R2 = 8043db40&lt;br /&gt;
* R13 = 8043a6e0 &lt;br /&gt;
&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
 | Section     | beg_addr | end_addr | length   |&lt;br /&gt;
 |-------------|----------|----------|----------|&lt;br /&gt;
 | system      | 80000000 | 80003100 | 00003100 |&lt;br /&gt;
 | .text0      | 80003100 | 800055e0 | 000024e0 |&lt;br /&gt;
 | .text1      | 800055e0 | 802b0100 | 002aab20 |&lt;br /&gt;
 | .ctors      | 802b0100 | 802b0120 | 00000020 |&lt;br /&gt;
 | .dtors      | 802b0120 | 802b0140 | 00000020 |&lt;br /&gt;
 | .rodata     | 802b0140 | 802ba420 | 0000a2e0 |&lt;br /&gt;
 | .data       | 802ba420 | 803ae280 | 000f3e60 |&lt;br /&gt;
 | .bss        | 803ae280 | 804326e0 | 00084460 |&lt;br /&gt;
 | .sdata      | 804326e0 | 804351e0 | 00002b00 |&lt;br /&gt;
 | .sbss       | 804351e0 | 80435b40 | 00000960 |&lt;br /&gt;
 | .sdata2     | 80435b40 | 8043c6a0 | 00006b60 |&lt;br /&gt;
 | .sbss2      | 8043c6a0 | 8043c6c8 | 00000028 |&lt;br /&gt;
 | stack       | 8043c6c8 | 8044c6c8 | 00010000 |&lt;br /&gt;
 | empty       | 8044c6c8 | 8044c6e0 | 00000018 |&lt;br /&gt;
 | ArenaLo     | 8044c6e0 |          |          |&lt;br /&gt;
 | apploader   | 81200000 |        ? |        ? |&lt;br /&gt;
 | Bootrom/IPL | 81300000 |        ? |        ? |&lt;br /&gt;
 | ArenaHi     |          | 817fffa0 |          |&lt;br /&gt;
 | FST         | 817fffa0 | 81800000 | 00000060 |&lt;br /&gt;
 |----------------------------------------------|&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Symbol map ==&lt;br /&gt;
The symbol map allows to put names on procedures and datas. It can be loaded in dolphin emulator in debug mode with the .map file format.&lt;br /&gt;
&lt;br /&gt;
Symbol map USA : https://github.com/Virtual-World-RE/NeoGF/blob/main/data/GG4E-CSM-20220412.map&lt;br /&gt;
&lt;br /&gt;
== MetroTRK ==&lt;br /&gt;
&lt;br /&gt;
MetroTRK can be activated by patching the bi2.bin DebugFlag and also by patching the following addresses to start the debugger in BBA (&#039;&#039;&#039;B&#039;&#039;&#039;road&#039;&#039;&#039;B&#039;&#039;&#039;and &#039;&#039;&#039;A&#039;&#039;&#039;dapter ?) mode:&lt;br /&gt;
* USA: Put a breakpoint at 80003190 then set r3 to 1&lt;br /&gt;
* EU:  Put a breakpoint at 800031C0 then set r7 to 4&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;color: rgb(241, 196, 15);&amp;quot;&amp;gt;&lt;br /&gt;
The [https://www.gc-forever.com/wiki/index.php?title=Apploader apploader reverse engineering] shows that there is debug vars in [[GCM (File format)|GCM/iso]] system files. [https://github.com/Virtual-World-RE/NeoGF/tree/main/gcmtool gcmtool.py] allow to patch them.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SDK &amp;amp; libs ==&lt;br /&gt;
All libs and SDK are staticly linked inside the dol.&lt;br /&gt;
&lt;br /&gt;
We found these libs and SDK:&lt;br /&gt;
* GCN SDK - Base dolphin SDK.&lt;br /&gt;
* Sysdolphin base library: Hal SysDolphin (HSD) Graphic and physic engine - https://github.com/doldecomp/melee/tree/master/src/sysdolphin/baselib&lt;br /&gt;
* MetroTRK: Target Resident Debugging Kernel for embedded systems. It&#039;s an embedded Kernel for debug.&lt;br /&gt;
* Metrowerks CW Runtime library: CodeWarrior: Metrowerks Standard Library and C/C++ Runtime&lt;br /&gt;
* And from ADXT/GC to CRI CFT/GC: It seems to be audio and video codecs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== H and C files ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
All 3 iso contains following .h and .c symbols in the .data, .rodata, .sdata and .sdata2. The EU version contains also the symbol &amp;quot;objalloc.h&amp;quot;.&lt;br /&gt;
 aobj.h&lt;br /&gt;
 cobj.h&lt;br /&gt;
 jobj.h&lt;br /&gt;
 lobj.h&lt;br /&gt;
 object.h&lt;br /&gt;
 &lt;br /&gt;
 GCN_Mem_Alloc.c&lt;br /&gt;
 aobj.c&lt;br /&gt;
 bytecode.c&lt;br /&gt;
 class.c&lt;br /&gt;
 cobj.c&lt;br /&gt;
 displayfunc.c&lt;br /&gt;
 dobj.c&lt;br /&gt;
 dvd.c&lt;br /&gt;
 dvdfs.c&lt;br /&gt;
 fobj.c&lt;br /&gt;
 fog.c&lt;br /&gt;
 hash.c&lt;br /&gt;
 id.c&lt;br /&gt;
 initialize.c&lt;br /&gt;
 jobj.c&lt;br /&gt;
 list.c&lt;br /&gt;
 lobj.c&lt;br /&gt;
 memory.c&lt;br /&gt;
 mobj.c&lt;br /&gt;
 mtx.c&lt;br /&gt;
 objalloc.c&lt;br /&gt;
 perf.c&lt;br /&gt;
 pobj.c&lt;br /&gt;
 robj.c&lt;br /&gt;
 tev.c&lt;br /&gt;
 texp.c&lt;br /&gt;
 texpdag.c&lt;br /&gt;
 tobj.c&lt;br /&gt;
 tpl.c&lt;br /&gt;
 util.c&lt;br /&gt;
 vi.c&lt;br /&gt;
 video.c&lt;br /&gt;
 wobj.c&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== Strings USA ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Strings list found in the dol and allowing to find libs / SDK:&lt;br /&gt;
 MetroTRK for GAMECUBE v2.0&lt;br /&gt;
 Metrowerks CW runtime library&lt;br /&gt;
 ADXT/GC Ver.8.57       Build:Feb 6 2003 18:03:46&lt;br /&gt;
 SKG/GC Ver.0.61        Build:Feb 6 2003 18:03:49&lt;br /&gt;
 ADXGC Ver.1.21         Build:Feb 6 2003 18:04:00&lt;br /&gt;
 ADXGCSDK Ver.05Sep2002 Build:Feb 6 2003 18:04:01&lt;br /&gt;
 ADXF/GC Ver.7.01       Build:Feb 6 2003 18:02:45&lt;br /&gt;
 CVFS/GC Ver.2.33       Build:Feb 6 2003 18:02:35&lt;br /&gt;
 GCCI Ver.1.09          Build:Feb 6 2003 18:02:33&lt;br /&gt;
 LSC/GC Ver.2.10        Build:Feb 6 2003 18:02:32&lt;br /&gt;
 SJ/GC Ver.6.10         Build:Feb 6 2003 18:02:53&lt;br /&gt;
 SVM/GC Ver.1.51        Build:Feb 6 2003 18:02:51&lt;br /&gt;
 MFCI/GC Ver.1.04       Build:Feb 6 2003 18:03:11&lt;br /&gt;
 AXRNA Ver.1.02         Build:Feb 6 2003 18:03:43&lt;br /&gt;
 CRI SUD/GC Ver.0.02    Build:Feb 6 2003 14:30:18&lt;br /&gt;
 CRI SFX/GC Ver.1.22    Build:Feb 6 2003 14:30:16&lt;br /&gt;
 CRI DCT/GC Ver.1.803   Build:Feb 6 2003 14:28:46&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI MPS/GC Ver.1.669   Build:Feb 6 2003 14:28:50&lt;br /&gt;
 CRI MPV/GC Ver.1.840   Build:Feb 6 2003 14:28:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFD/GC Ver.1.842   Build:Feb 6 2003 14:29:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFH/GC Ver.1.12    Build:Feb 6 2003 14:30:00&lt;br /&gt;
 MWSFD/GC Ver.2.62      Build:Feb 6 2003 14:28:42&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI CFT/GC Ver.1.24    Build:Feb 6 2003 14:28:33&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK – OS   release build: Apr 17 2003 12:33:06 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 Dolphin OS Kernel built : %s %s Apr 17 2003 12:33:06&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK – EXI  release build: Apr 17 2003 12:33:17 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - SI   release build: Apr 17 2003 12:33:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DVD  release build: Apr 22 2003 15:49:00 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - VI   release build: Apr 17 2003 12:33:22 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - PAD  release build: Apr 17 2003 12:33:44 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AI   release build: Apr 17 2003 12:33:54 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AR   release build: Apr 17 2003 12:33:55 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - ARQ  release build: Apr 17 2003 12:33:56 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AX   release build: Apr 17 2003 12:33:57 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DSP  release build: Apr 17 2003 12:34:16 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - CARD release build: Apr 17 2003 12:34:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - GX   release build: Apr 21 2003 14:55:46 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 sysdolphin_base_library&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== Strings EU ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Strings list found in the dol and allowing to find libs / SDK:&lt;br /&gt;
 Metrowerks Target Resident Kernel for PowerPC&lt;br /&gt;
 MetroTRK for GAMECUBE v2.0&lt;br /&gt;
 Metrowerks CW runtime library initializing default heap&lt;br /&gt;
 ADXT/GC     Ver.8.57 Build:Feb       6 2003 18:03:46&lt;br /&gt;
 SKG/GC      Ver.0.61 Build:Feb       6 2003 18:03:49&lt;br /&gt;
 ADXGC       Ver.1.21 Build:Feb       6 2003 18:04:00&lt;br /&gt;
 ADXGCSDK    Ver.05Sep2002 Build:Feb  6 2003 18:04:01&lt;br /&gt;
 ADXF/GC     Ver.7.01 Build:Feb       6 2003 18:02:45&lt;br /&gt;
 CVFS/GC     Ver.2.33 Build:Feb       6 2003 18:02:35&lt;br /&gt;
 GCCI        Ver.1.09 Build:Feb       6 2003 18:02:33&lt;br /&gt;
 LSC/GC      Ver.2.10 Build:Feb       6 2003 18:02:32&lt;br /&gt;
 SJ/GC       Ver.6.10 Build:Feb       6 2003 18:02:53&lt;br /&gt;
 SVM/GC      Ver.1.51 Build:Feb       6 2003 18:02:51&lt;br /&gt;
 MFCI/GC     Ver.1.04 Build:Feb       6 2003 18:03:11&lt;br /&gt;
 AXRNA       Ver.1.02 Build:Feb       6 2003 18:03:43&lt;br /&gt;
 CRI SUD/GC  Ver.0.02 Build:Feb       6 2003 14:30:18&lt;br /&gt;
 CRI SFX/GC  Ver.1.22 Build:Feb       6 2003 14:30:16&lt;br /&gt;
 CRI DCT/GC  Ver.1.803 Build:Feb      6 2003 14:28:46&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI MPS/GC  Ver.1.669 Build:Feb      6 2003 14:28:50&lt;br /&gt;
 CRI MPV/GC  Ver.1.840 Build:Feb      6 2003 14:28:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFD/GC  Ver.1.842 Build:Feb      6 2003 14:29:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFH/GC  Ver.1.12 Build:Feb       6 2003 14:30:00&lt;br /&gt;
 MWSFD/GC    Ver.2.62 Build:Feb       6 2003 14:28:42&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI CFT/GC  Ver.1.24 Build:Feb        6 2003 14:28:33&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - OS   release build: Apr 17 2003 12:33:06 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 Dolphin OS Kernel built : Apr 17 2003 12:33:06&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - EXI  release build: Apr 17 2003 12:33:17 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - SI   release build: Apr 17 2003 12:33:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DVD  release build: Apr 22 2003 15:49:00 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - VI   release build: Apr 17 2003 12:33:22 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - PAD  release build: Apr 17 2003 12:33:44 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AI   release build: Apr 17 2003 12:33:54 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AR   release build: Apr 17 2003 12:33:55 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - ARQ  release build: Apr 17 2003 12:33:56 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AX   release build: Apr 17 2003 12:33:57 (0x2301) &amp;gt;&amp;gt; &lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DSP  release build: Apr 17 2003 12:34:16 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 DSPInit(): Build Date: Apr 17 2003 12:34:16&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - CARD release build: Apr 17 2003 12:34:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - GX   release build: Apr 21 2003 14:55:46 (0x2301) &amp;gt;&amp;gt;  &lt;br /&gt;
 sysdolphin_base_library&lt;br /&gt;
 HSD_INIT_HEAP_MAX_NUM    is obsolete since 1.3.0.0.&lt;br /&gt;
 HSD_INIT_AUDIO_HEAP_SIZE is obsolete since 1.3.0.0.&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
=== Strings JAP ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
Strings list found in the dol and allowing to find libs / SDK:&lt;br /&gt;
 Metrowerks Target Resident Kernel for PowerPC&lt;br /&gt;
 MetroTRK for GAMECUBE v2.0&lt;br /&gt;
 ADXT/GC Ver.8.57       Build:Feb  6 2003 18:03:46&lt;br /&gt;
 SKG/GC Ver.0.61        Build:Feb  6 2003 18:03:49&lt;br /&gt;
 ADXGC Ver.1.21         Build:Feb  6 2003 18:04:00&lt;br /&gt;
 ADXGCSDK Ver.05Sep2002 Build:Feb  6 2003 18:04:01&lt;br /&gt;
 ADXF/GC Ver.7.01       Build:Feb  6 2003 18:02:45&lt;br /&gt;
 CVFS/GC Ver.2.33       Build:Feb  6 2003 18:02:35&lt;br /&gt;
 GCCI Ver.1.09          Build:Feb  6 2003 18:02:33&lt;br /&gt;
 LSC/GC Ver.2.10        Build:Feb  6 2003 18:02:32&lt;br /&gt;
 SJ/GC Ver.6.10         Build:Feb  6 2003 18:02:53&lt;br /&gt;
 SVM/GC Ver.1.51        Build:Feb  6 2003 18:02:51&lt;br /&gt;
 MFCI/GC Ver.1.04       Build:Feb  6 2003 18:03:11&lt;br /&gt;
 AXRNA Ver.1.02         Build:Feb  6 2003 18:03:43&lt;br /&gt;
 CRI SUD/GC Ver.0.02    Build:Feb  6 2003 14:30:18&lt;br /&gt;
 CRI SFX/GC Ver.1.22    Build:Feb  6 2003 14:30:16&lt;br /&gt;
 CRI DCT/GC Ver.1.803   Build:Feb  6 2003 14:28:46&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI MPS/GC Ver.1.669   Build:Feb  6 2003 14:28:50&lt;br /&gt;
 CRI MPV/GC Ver.1.840   Build:Feb  6 2003 14:28:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFD/GC Ver.1.842   Build:Feb  6 2003 14:29:53&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI SFH/GC Ver.1.12    Build:Feb  6 2003 14:30:00&lt;br /&gt;
 MWSFD/GC Ver.2.62      Build:Feb  6 2003 14:28:42&lt;br /&gt;
 Append: MW2407 GC05Sep2002Patch1&lt;br /&gt;
 CRI CFT/GC Ver.1.24    Build:Feb  6 2003 14:28:33&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - OS   release build: Apr 17 2003 12:33:06 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 Dolphin OS Kernel built : Apr 17 2003 12:33:06&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - EXI  release build: Apr 17 2003 12:33:17 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - SI   release build: Apr 17 2003 12:33:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DVD  release build: Apr 22 2003 15:49:00 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - VI   release build: Apr 17 2003 12:33:22 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - PAD  release build: Apr 17 2003 12:33:44 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AI   release build: Apr 17 2003 12:33:54 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AR   release build: Apr 17 2003 12:33:55 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - ARQ  release build: Apr 17 2003 12:33:56 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - AX   release build: Apr 17 2003 12:33:57 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - DSP  release build: Apr 17 2003 12:34:16 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - CARD release build: Apr 17 2003 12:34:19 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 &amp;lt;&amp;lt; Dolphin SDK - GX   release build: Apr 21 2003 14:55:46 (0x2301) &amp;gt;&amp;gt;&lt;br /&gt;
 sysdolphin_base_library&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:File format]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=TXG_(File_format)&amp;diff=1493</id>
		<title>TXG (File format)</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=TXG_(File_format)&amp;diff=1493"/>
		<updated>2023-10-07T12:54:06Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This article is about the TXG file format. See [[TXG (Gotcha Force)]] for current research on Gotcha Force TXG.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Research | 2| Researches on headers / bodies structures are partially achieved. }}&lt;br /&gt;
&lt;br /&gt;
TXG file format is an archive which contains [[TPL (File format)|TPL]]. The following class is interesting for documenting the file format:&lt;br /&gt;
&lt;br /&gt;
https://github.com/Struggleton/TXG2TPL/blob/master/TXG.cs&lt;br /&gt;
&lt;br /&gt;
Further investigations are needed.&lt;br /&gt;
&lt;br /&gt;
[[Category:File format]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=TXG_(File_format)&amp;diff=1492</id>
		<title>TXG (File format)</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=TXG_(File_format)&amp;diff=1492"/>
		<updated>2023-10-07T12:53:34Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This article is about the TXG file format. See [[TXG (Gotcha Force)]] for current research on Gotcha Force TXG.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Research | 2| Researches on headers / bodies structures are partially achieved. }}&lt;br /&gt;
&lt;br /&gt;
TXG file format is an archive which contains [[TPL (File format)|TPL]]. Following class is interesting for documenting the file format:&lt;br /&gt;
&lt;br /&gt;
https://github.com/Struggleton/TXG2TPL/blob/master/TXG.cs&lt;br /&gt;
&lt;br /&gt;
Further investigations are needed.&lt;br /&gt;
&lt;br /&gt;
[[Category:File format]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=TSB_(Gotcha_Force)&amp;diff=1491</id>
		<title>TSB (Gotcha Force)</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=TSB_(Gotcha_Force)&amp;diff=1491"/>
		<updated>2023-10-07T12:52:47Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This article is about Gotcha Force TSB file format and ongoing researches on it. See [[TSB (File format)]] for TSB file format description.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Research | 3| Researches on headers / bodies structures has to be done. }}&lt;br /&gt;
&lt;br /&gt;
TSB files contain the magic number &amp;quot;TSDB&amp;quot;. They have a fixed length of 0x810 bytes (2064 bytes).&lt;br /&gt;
&lt;br /&gt;
[[Category:File format]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=TPL_(File_format)&amp;diff=1490</id>
		<title>TPL (File format)</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=TPL_(File_format)&amp;diff=1490"/>
		<updated>2023-10-07T12:52:06Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: /* Header */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This article is about the TPL file format.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Research | 1| The structure of this file is well known. }}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TPL&#039;&#039;&#039; file format (&#039;&#039;&#039;T&#039;&#039;&#039;exture &#039;&#039;&#039;P&#039;&#039;&#039;alette &#039;&#039;&#039;L&#039;&#039;&#039;ibrary) is a folder with [https://www.gc-forever.com/yagcd/chap15.html#sec15.3 one or several texture].&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
A TPL file contains one or several texture:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | General format&lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 align=center | TPL header file&lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 align=center | Image offset table&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=4 align=center | All images || align=center | Palette header (optional)&lt;br /&gt;
|-&lt;br /&gt;
| align=center | Palette data (optional)&lt;br /&gt;
|-&lt;br /&gt;
| align=center | Image header&lt;br /&gt;
|-&lt;br /&gt;
| align=center | Image data&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
&lt;br /&gt;
In general the header has a length of 12 bytes. All offsets are relative to the header.&lt;br /&gt;
&lt;br /&gt;
Header: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! colspan=3 | Header&lt;br /&gt;
|-&lt;br /&gt;
! Offset !! Length !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || 4 || FileMagic. Always &amp;quot;\x00\x20\xAF\x30&amp;quot; (big endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || 4 || Image count.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || 4 || Image table offset&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Gotcha Force TPLs length ===&lt;br /&gt;
&lt;br /&gt;
All TPLs are aligned to 32 bytes. (NTSC/USA version)&lt;br /&gt;
&lt;br /&gt;
== Softwares ==&lt;br /&gt;
&lt;br /&gt;
Softwares below handle TPLs files:&lt;br /&gt;
* [https://github.com/marco-calautti/Rainbow Rainbow], credits Marco Calautti.&lt;br /&gt;
* [https://github.com/libertyernie/brawltools BrawlBox], contributors: libertyernie, Sammi Husky, and BlackJax96&lt;br /&gt;
* [https://github.com/Nightcaat/CTools CTools Pack], credits Chadderz&lt;br /&gt;
* [https://github.com/Wiimm/wiimms-szs-tools Wiimms SZS Tools], credits Wiimm: can contain BREFT, BTI, TEX0, TPL and PNG.&lt;br /&gt;
* [https://wiki.tockdom.com/wiki/Wexos%27s_Toolbox Wexos&#039;s Toolbox], credits Wexos&lt;br /&gt;
&lt;br /&gt;
[[Category:File format]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=TPL_(File_format)&amp;diff=1489</id>
		<title>TPL (File format)</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=TPL_(File_format)&amp;diff=1489"/>
		<updated>2023-10-07T12:51:33Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: /* Header */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This article is about the TPL file format.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Research | 1| The structure of this file is well known. }}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TPL&#039;&#039;&#039; file format (&#039;&#039;&#039;T&#039;&#039;&#039;exture &#039;&#039;&#039;P&#039;&#039;&#039;alette &#039;&#039;&#039;L&#039;&#039;&#039;ibrary) is a folder with [https://www.gc-forever.com/yagcd/chap15.html#sec15.3 one or several texture].&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
A TPL file contains one or several texture:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | General format&lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 align=center | TPL header file&lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 align=center | Image offset table&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=4 align=center | All images || align=center | Palette header (optional)&lt;br /&gt;
|-&lt;br /&gt;
| align=center | Palette data (optional)&lt;br /&gt;
|-&lt;br /&gt;
| align=center | Image header&lt;br /&gt;
|-&lt;br /&gt;
| align=center | Image data&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
&lt;br /&gt;
In general the header has a length of 12 bytes. All offsets are relative to the header.&lt;br /&gt;
&lt;br /&gt;
Header: &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! colspan=3 | Header&lt;br /&gt;
|-&lt;br /&gt;
! Offset !! Length !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || 4 || FileMagic. Allways &amp;quot;\x00\x20\xAF\x30&amp;quot; (big endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || 4 || Image count.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || 4 || Image table offset&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Gotcha Force TPLs length ===&lt;br /&gt;
&lt;br /&gt;
All TPLs are aligned to 32 bytes. (NTSC/USA version)&lt;br /&gt;
&lt;br /&gt;
== Softwares ==&lt;br /&gt;
&lt;br /&gt;
Softwares below handle TPLs files:&lt;br /&gt;
* [https://github.com/marco-calautti/Rainbow Rainbow], credits Marco Calautti.&lt;br /&gt;
* [https://github.com/libertyernie/brawltools BrawlBox], contributors: libertyernie, Sammi Husky, and BlackJax96&lt;br /&gt;
* [https://github.com/Nightcaat/CTools CTools Pack], credits Chadderz&lt;br /&gt;
* [https://github.com/Wiimm/wiimms-szs-tools Wiimms SZS Tools], credits Wiimm: can contain BREFT, BTI, TEX0, TPL and PNG.&lt;br /&gt;
* [https://wiki.tockdom.com/wiki/Wexos%27s_Toolbox Wexos&#039;s Toolbox], credits Wexos&lt;br /&gt;
&lt;br /&gt;
[[Category:File format]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=TPL_(File_format)&amp;diff=1488</id>
		<title>TPL (File format)</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=TPL_(File_format)&amp;diff=1488"/>
		<updated>2023-10-07T12:51:14Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: /* Format */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This article is about the TPL file format.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Research | 1| The structure of this file is well known. }}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TPL&#039;&#039;&#039; file format (&#039;&#039;&#039;T&#039;&#039;&#039;exture &#039;&#039;&#039;P&#039;&#039;&#039;alette &#039;&#039;&#039;L&#039;&#039;&#039;ibrary) is a folder with [https://www.gc-forever.com/yagcd/chap15.html#sec15.3 one or several texture].&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
A TPL file contains one or several texture:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | General format&lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 align=center | TPL header file&lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 align=center | Image offset table&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=4 align=center | All images || align=center | Palette header (optional)&lt;br /&gt;
|-&lt;br /&gt;
| align=center | Palette data (optional)&lt;br /&gt;
|-&lt;br /&gt;
| align=center | Image header&lt;br /&gt;
|-&lt;br /&gt;
| align=center | Image data&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
&lt;br /&gt;
In general the header has a length of 12 bytes. All offsets are relative to the header.&lt;br /&gt;
&lt;br /&gt;
Header : &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! colspan=3 | Header&lt;br /&gt;
|-&lt;br /&gt;
! Offset !! Length !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || 4 || FileMagic. Allways &amp;quot;\x00\x20\xAF\x30&amp;quot; (big endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || 4 || Image count.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || 4 || Image table offset&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Gotcha Force TPLs length ===&lt;br /&gt;
&lt;br /&gt;
All TPLs are aligned to 32 bytes. (NTSC/USA version)&lt;br /&gt;
&lt;br /&gt;
== Softwares ==&lt;br /&gt;
&lt;br /&gt;
Softwares below handle TPLs files:&lt;br /&gt;
* [https://github.com/marco-calautti/Rainbow Rainbow], credits Marco Calautti.&lt;br /&gt;
* [https://github.com/libertyernie/brawltools BrawlBox], contributors: libertyernie, Sammi Husky, and BlackJax96&lt;br /&gt;
* [https://github.com/Nightcaat/CTools CTools Pack], credits Chadderz&lt;br /&gt;
* [https://github.com/Wiimm/wiimms-szs-tools Wiimms SZS Tools], credits Wiimm: can contain BREFT, BTI, TEX0, TPL and PNG.&lt;br /&gt;
* [https://wiki.tockdom.com/wiki/Wexos%27s_Toolbox Wexos&#039;s Toolbox], credits Wexos&lt;br /&gt;
&lt;br /&gt;
[[Category:File format]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=TPL_(File_format)&amp;diff=1487</id>
		<title>TPL (File format)</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=TPL_(File_format)&amp;diff=1487"/>
		<updated>2023-10-07T12:51:02Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: /* Format */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This article is about the TPL file format.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Research | 1| The structure of this file is well known. }}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TPL&#039;&#039;&#039; file format (&#039;&#039;&#039;T&#039;&#039;&#039;exture &#039;&#039;&#039;P&#039;&#039;&#039;alette &#039;&#039;&#039;L&#039;&#039;&#039;ibrary) is a folder with [https://www.gc-forever.com/yagcd/chap15.html#sec15.3 one or several texture].&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
A TPL file contains one or several textures:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | General format&lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 align=center | TPL header file&lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 align=center | Image offset table&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=4 align=center | All images || align=center | Palette header (optional)&lt;br /&gt;
|-&lt;br /&gt;
| align=center | Palette data (optional)&lt;br /&gt;
|-&lt;br /&gt;
| align=center | Image header&lt;br /&gt;
|-&lt;br /&gt;
| align=center | Image data&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
&lt;br /&gt;
In general the header has a length of 12 bytes. All offsets are relative to the header.&lt;br /&gt;
&lt;br /&gt;
Header : &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! colspan=3 | Header&lt;br /&gt;
|-&lt;br /&gt;
! Offset !! Length !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || 4 || FileMagic. Allways &amp;quot;\x00\x20\xAF\x30&amp;quot; (big endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || 4 || Image count.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || 4 || Image table offset&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Gotcha Force TPLs length ===&lt;br /&gt;
&lt;br /&gt;
All TPLs are aligned to 32 bytes. (NTSC/USA version)&lt;br /&gt;
&lt;br /&gt;
== Softwares ==&lt;br /&gt;
&lt;br /&gt;
Softwares below handle TPLs files:&lt;br /&gt;
* [https://github.com/marco-calautti/Rainbow Rainbow], credits Marco Calautti.&lt;br /&gt;
* [https://github.com/libertyernie/brawltools BrawlBox], contributors: libertyernie, Sammi Husky, and BlackJax96&lt;br /&gt;
* [https://github.com/Nightcaat/CTools CTools Pack], credits Chadderz&lt;br /&gt;
* [https://github.com/Wiimm/wiimms-szs-tools Wiimms SZS Tools], credits Wiimm: can contain BREFT, BTI, TEX0, TPL and PNG.&lt;br /&gt;
* [https://wiki.tockdom.com/wiki/Wexos%27s_Toolbox Wexos&#039;s Toolbox], credits Wexos&lt;br /&gt;
&lt;br /&gt;
[[Category:File format]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
	<entry>
		<id>https://wiki.re.virtualworld.fr/index.php?title=TPL_(File_format)&amp;diff=1486</id>
		<title>TPL (File format)</title>
		<link rel="alternate" type="text/html" href="https://wiki.re.virtualworld.fr/index.php?title=TPL_(File_format)&amp;diff=1486"/>
		<updated>2023-10-07T12:50:45Z</updated>

		<summary type="html">&lt;p&gt;Algoflash: /* Format */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Gotcha Force | &amp;amp;larr; Gotcha Force]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;This article is about the TPL file format.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Research | 1| The structure of this file is well known. }}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TPL&#039;&#039;&#039; file format (&#039;&#039;&#039;T&#039;&#039;&#039;exture &#039;&#039;&#039;P&#039;&#039;&#039;alette &#039;&#039;&#039;L&#039;&#039;&#039;ibrary) is a folder with [https://www.gc-forever.com/yagcd/chap15.html#sec15.3 one or several texture].&lt;br /&gt;
&lt;br /&gt;
== Format ==&lt;br /&gt;
&lt;br /&gt;
A TPL file can contain one or several textures:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! colspan=2 | General format&lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 align=center | TPL header file&lt;br /&gt;
|-&lt;br /&gt;
| colspan=2 align=center | Image offset table&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=4 align=center | All images || align=center | Palette header (optional)&lt;br /&gt;
|-&lt;br /&gt;
| align=center | Palette data (optional)&lt;br /&gt;
|-&lt;br /&gt;
| align=center | Image header&lt;br /&gt;
|-&lt;br /&gt;
| align=center | Image data&lt;br /&gt;
|} &lt;br /&gt;
&lt;br /&gt;
=== Header ===&lt;br /&gt;
&lt;br /&gt;
In general the header has a length of 12 bytes. All offsets are relative to the header.&lt;br /&gt;
&lt;br /&gt;
Header : &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! colspan=3 | Header&lt;br /&gt;
|-&lt;br /&gt;
! Offset !! Length !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || 4 || FileMagic. Allways &amp;quot;\x00\x20\xAF\x30&amp;quot; (big endian)&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || 4 || Image count.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || 4 || Image table offset&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Gotcha Force TPLs length ===&lt;br /&gt;
&lt;br /&gt;
All TPLs are aligned to 32 bytes. (NTSC/USA version)&lt;br /&gt;
&lt;br /&gt;
== Softwares ==&lt;br /&gt;
&lt;br /&gt;
Softwares below handle TPLs files:&lt;br /&gt;
* [https://github.com/marco-calautti/Rainbow Rainbow], credits Marco Calautti.&lt;br /&gt;
* [https://github.com/libertyernie/brawltools BrawlBox], contributors: libertyernie, Sammi Husky, and BlackJax96&lt;br /&gt;
* [https://github.com/Nightcaat/CTools CTools Pack], credits Chadderz&lt;br /&gt;
* [https://github.com/Wiimm/wiimms-szs-tools Wiimms SZS Tools], credits Wiimm: can contain BREFT, BTI, TEX0, TPL and PNG.&lt;br /&gt;
* [https://wiki.tockdom.com/wiki/Wexos%27s_Toolbox Wexos&#039;s Toolbox], credits Wexos&lt;br /&gt;
&lt;br /&gt;
[[Category:File format]]&lt;br /&gt;
[[Category:Gotcha Force]]&lt;/div&gt;</summary>
		<author><name>Algoflash</name></author>
	</entry>
</feed>