Sinuosité

Après mon animation de Blood Omen 2, puis Voyage (que je n'ai pas songé à annoncer sur ce site à sa sortie), j'ai publié ma première animation de taille faite à l'aide du logiciel Krita.


Et voici mon projet précédent, Voyage :

Animation : Blood Omen 2 (sous-titres français)

Suite à plus de deux ans de travail, je publie cette animation qui reprend l'introduction du premier antagoniste d'envergure de Blood Omen 2, Faustus.

Mise à part l'envie de rendre hommage artistique à un jeu qui m'a marqué l'esprit à son époque, j'espère attirer l'attention de toute entreprise de dessins animés, que j'invite à prendre contact avec moi.

Logiciels : Clip Studio Paint EX, OpenToonz et Tahoma2D pour l'animation ; Ravioli Game Tools pour l'extraction de ressources ; Audacity pour le traitement des fichiers audio ; Blender pour le montage final.

Hormis les bruitages tirés du jeu, les effets sonores supplémentaires proviennent de la bibliothèque d'Alan Dalcastagne.

Traduire les PDA de Doom 3

En faisant plusieurs tests avec les fichiers .pda de Doom 3, j'ai remarqué que les messages qui s'affichaient dans le PDA de Doomguy étaient toujours en français, même lorsque je démarrais le jeu en anglais (ce qui affectait pourtant la langue des menus). Comment la langue des PDA est-elle décidée ? La réponse est compliquée, mais la solution à mon problème était relativement simple.

Les fichiers .pda

Ces fichiers contiennent les données des PDA que le joueur trouvera au cours du jeu. Ils peuvent contenir divers types d'éléments, tels :

  • des définitions de PDA, qui renferment des informations dont le nom et le poste du propriétaire
  • des définitions de courriel (qui ont comme données une date, un expéditeur, un destinataire, et bien sûr le message)

La gestion de la langue

Les fichiers aux extensions .gui, .map et .def profitent de variables au format #str_01234 ; celles-ci sont définies dans les fichiers english.lang, french.lang, etc. qui associent chaque variable à une chaîne dans la langue voulue.

Le problème

Contrairement aux fichiers énumérés ci-haut, les fichiers .pda ne permettent pas l'usage de variables « #str_ ».

Dans Doom 3, les archives de ressources (pak000.pk4, pak001.pk4...) sont lues en ordre alphanumérique. Si pak003.pk4 et pak005.pk4 contiennent tous les deux un fichier du même nom, la version de pak005.pk4 prendra la priorité, et l'autre sera ignorée. Le choix du fichier à utiliser ne dépend que de ce système, et aucunement sur les réglages de langue.

Si on installe Doom 3 en français, par exemple, l'installation ajoutera deux archives nommées zpak000.pk4 et zpak003.pk4. Évidement, ces archives seront lues en dernier, et les fichiers .pda (français) qu'on y trouve remplaceront les fichiers (anglais) provenant des archives présentes par défaut.

En conséquence, il n'est pas possible de changer le texte d'un PDA suivant la langue sans modifier le code C++ de Doom 3. Heureusement, il s'agit là d'une tâche plutôt facile.

Commençons par le message principal des courriels, qui est représenté par la donnée text.

Dans le fichier neo/framework/DeclPDA.cpp, trouver la fonction idDeclEmail::Parse(). Comme l'indique le nom, les courriels des PDA sont interprétés ici.

Trouver la section qui traite la donnée text :

if ( !token.Icmp( "text") ) {
    src.ReadToken( &token );
    if ( token != "{" ) {
        src.Warning( "Email decl '%s' had a parse error", GetName() );
        return false;
    }
    while ( src.ReadToken( &token ) && token != "}" ) {
        text += token;
    }
    continue;
}

Dans la boucle while, il suffit de vérifier si la chaîne est une variable ; si oui, on peut récupérer sa valeur :

while ( src.ReadToken( &token ) && token != "}" ) {
    if ( idStr::Cmpn( token, STRTABLE_ID, STRTABLE_ID_LENGTH ) == 0 ) {
        text += common->GetLanguageDict()->GetString( token );
    }
    else
    {
        text += token;
    }
}

STRTABLE_ID est tout simplement la chaîne « #str_ », et STRTABLE_ID_LENGTH est sa longueur, soit 5 caractères.

Une fois compilé, ce code permettra de traduire le texte des PDA dans toutes les langues supportées, de la même façon que les fichiers de map et de gui.