Suite la discussion d'hier soir, je te poste des fichiers permettant de générer automatiquement, sous Windows, la partie du fichier tp2 qui contient les instructions d'installation des textes dans le jeu (STRING_SET ...).
Les fichiers nécessitent une arborescence de CorrecFr :
setup-correcfr.exe
correcfr
Il faut placer les fichiers joints dans le répertoire correcfr, de même que le programme ssed.exe que tu as déjà eu dans l'autre archive.
- MakeTP2.bat
- creeSTRING_SET_TP2.txt
- remplaceNumTP2.txt
MakeTP2.bat
Code : Tout sélectionner
:: General note on .BAT file:
:: - lines beginning with "::" are comments and are also used to disable unused code.
:: - lines beginning with ":" are labels for goto statement, used to to skip blocs.
:: Cet outil, basé sur l'emploi de sed et d'un fichier de paramètres de remplacement,
:: permet de créer à partir d'un fichier tra incluant les textes corrigés de BG / BG II
:: l'extrait de fichier tp2 qui installe les textes dans le jeu.
:: Il reste ensuite à habiller le fichier tp2 pour l'en-tête et le découpage en composants.
:: Le script est conçu pour être placé dans le répertoire CorrecFr du mod ; il va chercher
:: le fichier tra dans le sous-répertoire français et crée l'extrait de fichier tp2 dans
:: CorrecFr.
:: Le script a besoin de WeiDU pour fonctionner. Il recopie setup-CorrecFr.exe du répertoire
:: au dessus pour cela (hypothèse qu'on part d'une arborescence existante du mod).
:: Les fichiers temporaires sont supprimés à la fin.
:: Historique
:: 02/09/2011 - V1
@echo off
:: Verifie la présence du sous-répertoire francais
if not exist francais goto francais_absent
if not exist francais\correcfr.tra goto francais_absent
:: Verifie la présence de WeiDU
if exist weidu.exe goto weidu_present
:: Puisqu'absent, copie le setup-correcfr.exe normalement situé un niveau au dessus
if not exist ..\setup-correcfr.exe goto setup_absent
copy ..\setup-correcfr.exe weidu.exe
:weidu_present
:: Pour ne pas toujours répéter le début (mise au point)
::goto phaseSedApresTraify
:: On veut se débarrasser des textes du fichier correcfr.tra pour ne manipuler que les numéros,
:: afin de créer les instructions du fichier tp2. Comme sed ne dispose de la capacité de traiter
:: les textes sur plusieurs lignes, on constitue un fichier tp2 dont weidu saura extraire les textes
:: pour nous.
:: La fonction --traify de WeiDU va nous y aider, mais à condition qu'on ait un vrai fichier tp2,
:: donc avec des instructions particulières au début.
if exist correcfrtmp.tp2 del /F correcfrtmp.tp2
@echo // Partie provisoire pour conversion : à ne pas conserver >> correcfrtmp.tp2
@echo BACKUP ~correcfr/backup~ >> correcfrtmp.tp2
@echo AUTHOR ~Fossy~ >> correcfrtmp.tp2
@echo VERSION ~v n'importe quoi~ >> correcfrtmp.tp2
@echo LANGUAGE ~Francais~ >> correcfrtmp.tp2
@echo ~francais~ >> correcfrtmp.tp2
@echo ~correcfr/francais/setup.tra~ >> correcfrtmp.tp2
@echo ~correcfr/francais/correcfr.tra~ >> correcfrtmp.tp2
@echo BEGIN @0 >> correcfrtmp.tp2
@echo // Fin de partie provisoire pour conversion >> correcfrtmp.tp2
:: Copie du fichier tra dans le fichier tp2
more francais\correcfr.tra >> correcfrtmp.tp2
:p haseSedAvantTraify
:: Edition des lignes @10nnnnn = ~texte~ ... recopiées du fichier tra sous une forme correcte pour un fichier tp2
@echo Traitement des numeros de texte dans le fichier tp2
ssed -f creeSTRING_SET_TP2.txt correcfrtmp.tp2 > vrai_tp2.tp2
:: Fichier intermédiaire désormais inutile
del /F correcfrtmp.tp2
:: Extraction des textes du fichier tp2 dans un fichier tra : le but est d'obtenir un tp2 sous la forme
:: STRING_SET ~nnn~ @mmm
:: Comme WeiDU attribue les numéros mmm à partir de 0, ces numéros de textes ne correspondent pas
:: à ceux du fichier tra de correcfr, donc on jettera le fichier tra
@echo Traify par WeiDU du fichier tp2 (suppression des textes) : veuillez patienter
weidu --nogame --traify vrai_tp2.tp2 --out vrai_tp2_tra
:: Fichiers intermédiaires inutiles désormais
del /F vrai_tp2_tra.tra
del /F vrai_tp2.tp2
:p haseSedApresTraify
:: Modification du fichier tp2 pour qu'il ait la forme qui nous intéresse, avec les bons numéros de textes
::
@echo Mise a jour des bons numeros de texte dans le fichier tp2
ssed -f remplaceNumTP2.txt vrai_tp2_tra.tp2 > correcfr_nouveau.tp2
:: Fichier intermédiaire inutile désormais
del /F vrai_tp2_tra.tp2
:: L'extrait de fichier tp2 est créé. Il reste maintenant à faire l'habillage pour le mod :
:: - mettre le bon en-tête (backup, author, ...)
:: - séparer les instructions en deux composants
:: - traiter le cas particulier des textes de BG / SoA que TotSC / ToB modifie
@echo Le fichier correcfr_nouveau.tra est cree : attention a l'integration et aux cas particuliers
goto end
:francais_absent
@echo Le fichier francais\correcfr.tra est absent : opération impossible
goto end
:setup_absent
@echo Le fichier ..\setup-correcfr.exe est absent : opération impossible
:end
pause
creeSTRING_SET_TP2.txt
Code : Tout sélectionner
# Convertir la forme du fichier correcfr.tra :
# @10nnnnn = ~texte~ ~féminin~
# en une forme normale de fichier tp2 sans fichier tra associé
# STRING_SET @nnnnn = ~texte~ ~féminin~
# de façon à pouvoir utiliser WeiDU pour extraire les textes (choses impossibles en sed)
# Comme CorrecFr met inutilement le numéro du texte à remplacer entre ~~, je fais pareil ici
# afin de faciliter les comparaisons. Idem pour l'ajout d'une tabulation avant STRING_SET.
# On ne traite que les lignes qui commencent par @10nnnnn, éventuellement avec des espaces
# ou tabulations avant : la partie entre // au début désigne
# ce que doivent respecter les lignes pour être traitées par la commande suivante
# Numéro à 1 seul chiffre
/^[ \t]*@/ s/@100000\([0-9]\{1\}\)[ \t]*=[ \t]*~/\tSTRING_SET ~\1~ ~/g
# Numéro à 2 chiffres
/^[ \t]*@/ s/@10000\([0-9]\{2\}\)[ \t]*=[ \t]*~/\tSTRING_SET ~\1~ ~/g
# Numéro à 3 chiffres
/^[ \t]*@/ s/@1000\([0-9]\{3\}\)[ \t]*=[ \t]*~/\tSTRING_SET ~\1~ ~/g
# Numéro à 4 chiffres
/^[ \t]*@/ s/@100\([0-9]\{4\}\)[ \t]*=[ \t]*~/\tSTRING_SET ~\1~ ~/g
# Numéro à 5 chiffres
/^[ \t]*@/ s/@10\([0-9]\{5\}\)[ \t]*=[ \t]*~/\tSTRING_SET ~\1~ ~/g
# Suppression des lignes de commentaires : ici on va plutôt les conserver
#s/^[\/][\/\*].*//g
remplaceNumTP2.txt
Code : Tout sélectionner
# Remplacer
# STRING_SET nnnnn @mmm @mmm
# (le second @mmm est présent s'il y a une déclinaison féminine) par
# STRING_SET nnnnn @10nnnnn
# en tenant compte que nnnnn peut avoir 1 à 5 chiffres et qu'on veut absolument @100000n, @1000nnn, ...
# Comme CorrecFr met une tabulation avant STRING_SET pour indenter les éléments d'un composant,
# je conserve la forme pour faciliter les comparaisons et l'intégration dans le tp2 final
# On ne traite que les lignes qui commencent par STRING_SET et précédés éventuellement
# d'espaces ou de tabulations : la partie entre // au début désigne
# ce que doivent respecter les lignes pour être traitées par la commande suivante
# Numéro à 1 seul chiffre
/^[ \t]*STRING_SET/ s/^[ \t]*STRING_SET[ \t]*~\([0-9]\{1\}\)~.*/\tSTRING_SET ~\1~ @100000\1/g
# Numéro à 2 chiffres
/^[ \t]*STRING_SET/ s/^[ \t]*STRING_SET[ \t]*~\([0-9]\{2\}\)~.*/\tSTRING_SET ~\1~ @10000\1/g
# Numéro à 3 chiffres
/^[ \t]*STRING_SET/ s/^[ \t]*STRING_SET[ \t]*~\([0-9]\{3\}\)~.*/\tSTRING_SET ~\1~ @1000\1/g
# Numéro à 4 chiffres
/^[ \t]*STRING_SET/ s/^[ \t]*STRING_SET[ \t]*~\([0-9]\{4\}\)~.*/\tSTRING_SET ~\1~ @100\1/g
# Numéro à 5 chiffres
/^[ \t]*STRING_SET/ s/^[ \t]*STRING_SET[ \t]*~\([0-9]\{5\}\)~.*/\tSTRING_SET ~\1~ @10\1/g
# Suppression des lignes de commentaires : ici on va plutôt les conserver
#s/^[\/][\/\*].*//g
:!: Ces scripts partent du principe que tous les textes du fichier correcfr.tra, dans lequel tu auras éventuellement ajouté les nouveaux textes en respectant bien le principe de numérotation, sont sous la forme :
@100nnnnn = ~texte~ ... plus éventuellement le son et/ou le féminin
Sinon, ça ne fonctionnera pas bien : le remplacement échouera et les lignes qui ne respecteront pas ce format empêcheront la conversion d'aboutir en provoquant des erreurs WeiDU lors de la conversion.
Double clique sur le fichier .bat pour lancer l'opération. Il ira récupérer WeiDU, dont il a besoin, à partir du fichier setup-correcfr.exe.
Tu vas obtenir un fichier tp2 qui ressemblera à ça
// Partie provisoire pour conversion : à ne pas conserver
BACKUP ~correcfr/backup~
AUTHOR ~Fossy~
VERSION @0
LANGUAGE ~Francais~
~francais~
~correcfr/francais/setup.tra~
~correcfr/francais/correcfr.tra~
BEGIN @0
// Fin de partie provisoire pour conversion
STRING_SET ~12~ @1000012
STRING_SET ~16~ @1000016
...
STRING_SET ~74055~ @1074055
STRING_SET ~74060~ @1074060
Le début est à supprimer et à remplacer par ce que tu as déjà dans le fichier correcfr.tp2 du mod.
Il te faudra également refaire la séparation en composants en reprenant la façon dont c'est fait actuellement.
Concrètement, tu peux faire un copier-coller des lignes jusqu'à @62xxx dans la partie SoA et le reste dans la partie ToB.
Ce script fonctionnera aussi pour le correcfr de BG. Cependant il faudra te méfier du cas particulier du (des) texte(s) qui existe(nt) en deux versions, une pour BG seul, l'autre avec TotSC.
correcfr.tp2 a écrit : STRING_SET ~9589~ @2009589
Comme ce texte ne respecte le formalisme attendu, il ne sera pas traité. Il faudra que tu supprimes le @2009589 du fichier correcfr.tra avant d'utiliser le script, puis le remettre. Et il te faudra remettre la ligne ci-dessus dans le fichier tp2.
Le fichier tp2 produit est très facile à comparer (en visuel, mais aussi autrement si tu sais lire un log de diff) à celui existant actuellement dans le mod car j'ai respecté la même mise en forme (tabulation avant STRING_SET, ...).
En utilisant le fichier correcfr.tra de la version 0.91 de CorrecFr BG2, j'ai déjà identifié 3 textes "orphelins", c'est à dire sans instruction dans le fichier tp2 pour l'installer :
STRING_SET ~39611~ @1039611
STRING_SET ~39771~ @1039771
STRING_SET ~40245~ @1040245
Il y a aussi quelques différences de position des instructions car tout n'est pas classé dans ordre croissant, aussi bien dans le fichier tp2 que dans le fichier tra.