Extraction de texte/pointeurs

Une question en rapport avec le ROMHacking ?
Dans cette section nous tenterons de vous conseiller ou de partager nos connaissances, bien entendu dans la limite de nos compétences et de notre disponibilité.

Extraction de texte/pointeurs

Message non lupar asakura9 » Mardi 10 Juillet 2012 à 11:47:23

Bonjour,

J'ai voulu récemment me mettre à la traduction d'une rom NDS. J'ai retrouvé facilement le script, les textes étant affichés de façon clair. Ensuite, j'ai cherché les pointeurs qui là aussi sont facilement reconnaissables :


Image


En rouge : Le pointeur 0D indiquerait la fin de la section de texte à afficher tandis que 0A indiquerait le début d'une nouvelle. On les retrouvent tout le long du fichier et ils sont caractérisés par un seul octet.

En bleu : la flèche du bas marquerait un retour à la ligne et elle est caractérisée par deux octets.

Chaque lettre du jeu utilise deux octets, puisque qu'il est en japonais...

Déjà, le problème c'est que j'aimerai bien pouvoir réduire la place prise par les caractères occidentaux traduit en un seul octet pour prendre moins de place mais je ne sais pas du tout comment faire.

Mais déjà, c'est cette histoire de pointeur que je ne comprends pas très bien. Qu'est ce qu'il faut que j'en déduise exactement pour pouvoir extraire le texte avec Hareng Tool par exemple ? Parce que j'ai bien lu le guide de traduction de la TRAF mais ce n'est pas tout à fait clair pour moi... Il faut aussi que j'utilise le fichier header ?


Voilà ce sera tout pour l'instant... ><

Merci d'avance !
Avatar de l’utilisateur
asakura9
 
Messages: 17
Âge: 29
Enregistré le: Dimanche 29 Mai 2011 à 15:03:35
Genre: Femme

Re: Extraction de texte/pointeurs

Message non lupar Lyan53 » Mardi 10 Juillet 2012 à 16:23:05

Hellow,


asakura9 a écrit: Ensuite, j'ai cherché les pointeurs qui là aussi sont facilement reconnaissables


Ce que tu montres sur ton screenshot, c'est des balises de texte, non des pointeurs ;)


asakura9 a écrit:J'ai retrouvé facilement le script, les textes étant affichés de façon clair.
asakura9 a écrit:Chaque lettre du jeu utilise deux octets, puisque qu'il est en japonais...


A priori le texte est simplement encodé en Shift-JIS


asakura9 a écrit:En rouge : Le pointeur 0D indiquerait la fin de la section de texte à afficher tandis que 0A indiquerait le début d'une nouvelle. On les retrouvent tout le long du fichier et ils sont caractérisés par un seul octet.

En bleu : la flèche du bas marquerait un retour à la ligne et elle est caractérisée par deux octets.


Es-tu bien sûre que ce n'est pas le contraire plutôt ?? (pour les définitions du bleu et du rouge) Tu as vérifié in-game ?

Généralement la valeur 0x0A est un simple "retour ligne", elle peut être précédée de la valeur 0x0D qui signifie simplement "retour chariot"

Pour l'autre valeur (la flèche), je ne sais pas encore ce que ça peut être mais bon je verrais bien une flèche in-game pour dire "marquer une pause et à l'appui d'une touche afficher le texte suivant"

Bref comme dans les JV quoi ^^

asakura9 a écrit:Déjà, le problème c'est que j'aimerai bien pouvoir réduire la place prise par les caractères occidentaux traduit en un seul octet pour prendre moins de place mais je ne sais pas du tout comment faire.


C'est pas dit que ce soit simple à faire, il faut déjà voir ce que contient la font avant d'aller plus loin

Il se peut qu'elle ait des entrées en 1 seul caractère mais c'est pas dit pour autant

Faut aussi voir le format de la font, s'il est malléable/modifiable pour aller en ce sens en cas d'abscence des cara en un seul octet (mais sur NDS même l'ascii utilise 2 octets généralement) et sinon ça risque d'être chaud car faudra aller trifouiller dans les executables

Perso je préfère te dire de ne pas trop compter là-dessus, il vaut mieux tabler sur des caractères en 2 octets


Sur NDS d'ailleurs normalement les fichiers sont assez facilement extensibles, ce qui fait qu'au final, il ne sera pas necessaire de gratter de la place par des subterfuges ;)



asakura9 a écrit:Mais déjà, c'est cette histoire de pointeur que je ne comprends pas très bien. Qu'est ce qu'il faut que j'en déduise exactement pour pouvoir extraire le texte avec Hareng Tool par exemple ? Parce que j'ai bien lu le guide de traduction de la TRAF mais ce n'est pas tout à fait clair pour moi... Il faut aussi que j'utilise le fichier header ?


Faut voir ça sur le tas aussi, si ton screen montre le debut du fichier (et non un sample), à priori ce dernier ne contient pas de pointeurs (du moins pas sur ce screenshot)

Après faut creuser plus en profondeur, les pointeurs peuvent etre dans un autre fichier ou il peut egalement ne pas y en avoir du tout


Pour ce qui est du hareng, tout dependra de la tronche des pointeurs s'il y'en a, il faudra qu'ils soient dans un format basique pour pouvoir être gérés par les fonctionnalités de base du logiciel sinon faudra coder un script adapté au format utilisé par le jeu

Si y'a pas de pointeurs, le hareng pourra gérer ça, mais sinon à voir aussi si y'aurait pas encore plus simple à aborder au vu de la tronche de ton fichier ;) (Faut voir ce qu'il y a autour)


Pour la petite explication basique, les pointeurs ne sont que des adresses (ou offset) qui disent, tel texte se trouve à tel endroit

Si par exemple je te dis de te rendre à l'adresse 0x26 de ton fichier pour trouver ta valeur "0D0A", tu sauras de quoi je parle normalement ^^
Bah le pointeur fait strictement la même chose, c'est juste une table d'adresses qui se suivent pour t'indiquer à quel endroit du fichier commence telle phrase/tel mot.

La seule différence qu'il peut y avoir, c'est que parfois cette adresse est absolue (donc non située au début du fichier) et il faudra donc déterminer l'adresse 0x00 sur laquelle se base la table des pointeurs (car tous les pointeurs de la table, la prendront comme référence de base)

Cette dernière peut être différente d'un jeu à l'autre, parfois c'est le début du fichier (donc la véritable adresse 0x00) parfois c'est le début du texte (donc si ton texte commence en 0x100, le 0x100 deviendra ton adresse 0x00 comme ci c'était le début du fichier), parfois c'est après le header, parfois c'est le début de la table de pointeurs elle même (qui est suivie des textes et donc si ta table de pointeur fait 0x80 ton 1er pointeur sera 0x80 là ou tu trouveras ton 1er texte) etc ...

Honnêtement, le mot est très impressionnant mais ça n'a rien de compliqué cette histoire de pointeurs, c'est juste des simples adresses ;)





Il s'agit de quel jeu ??

Sinon autre petite question, c'est quoi ton editeur hex ?
Image
Avatar de l’utilisateur
Lyan53
Administrateur du site
 
Messages: 864
Âge: 46
Enregistré le: Lundi 22 Novembre 2010 à 20:48:11
Genre: Homme

Re: Extraction de texte/pointeurs

Message non lupar asakura9 » Mardi 10 Juillet 2012 à 16:59:40

Merci pour la réponse !

Je vais montrer ce que contient le dossier script alors, ça parlera mieux peut-être...

Image

Chaque fichier contenant du texte (.htx) est accompagné de deux autres fichiers (un .scr et un .sod). J'ai essayé de chercher pour voir à quoi ça correspond mais j'ai pas trouvé grand chose d'intéressant...


Pour le bleu et le rouge, non je pense pas m'être trompée... J'ai vérifié dans le jeu et la flèche est bien celle qui permet un retour à la ligne ! Pas besoin d'appuyer sur quoique ce soit. Et si je change la valeur de 0x0D et 0x0A, j'obtiens :

Etat initial :

Fenêtre de dialogue 1 :
texte 1

Fenêtre de dialogue 2 :
texte 2

Après modification :

Fenêtre de dialogue 1 :
texte1texte2

Donc il y a une nouvelle fenêtre de dialogue qui ne s'affiche pas, le texte qui devait s'afficher se colle au précédent et du coup tout est décalé par la suite...

Pour la font j'ai trouvé des fichier .chr, .txt et .html mais aucun fichier .nftr donc je sais pas comment l'afficher ! Mais bon sinon autant garder la table à 2 octets donc... Le soucis après ça va être les accents.

Le jeu, c'est Lise no Atelier. ^^

Pour l'éditeur, comme j'avais un soucis dans l'affichage des caractères japonais, j'ai pris MadEdit.
Avatar de l’utilisateur
asakura9
 
Messages: 17
Âge: 29
Enregistré le: Dimanche 29 Mai 2011 à 15:03:35
Genre: Femme

Re: Extraction de texte/pointeurs

Message non lupar Lyan53 » Mardi 10 Juillet 2012 à 23:25:15

Okay, y'a du boulot donc


Bon première chose qu'il faudra aborder car c'est malgré tout le principal dans un jeu jap, c'est la font

J'ai trouvé dans ton jeu 3 fonts

Y'en a une dans le dossier "Kuw > DebugFont" qui contient des caractères ASCII, mais vu le nom du dossier, j'ai un doute quant au fait qu'elle soit utilisée par le jeu (sans doute des restes d'un mode debug du jeu qui servait aux programmeurs, il n'est peut être plus implémenté d'ailleurs)

On voit aussi des fichiers "test" qui trainent dans un dossier

Pour les autres fonts, elles sont dans le répertoire "Kuw > hsfont"

La chose à savoir, c'est que dans un JV, tout ce qui s'affiche à l'écran est graphique, ce qui signifie donc que pour avoir un graphisme (même si c'est du texte d'un script du jeu), il faut une image à la base dans les très grandes lignes

Une font donc, est forcément graphique et contient x caractères suivant le jeu. On ne trouve pas une font dans du code mais à l'aide d'un éditeur graphique donc ;)

Tilemolester est très conseillé pour ce genre de travaux car il est assez polyvalent sur les formats basiques ;)



Concernant ces fonts donc il risque d'y avoir 3 mauvaises nouvelles dont une très embêtante :

- La 1ère : la "font.chr" est en 16x16 pix, l'affichage dans tilemolester est 4bpp linear reverse order pour le codec, et en 1 dimensional pour le mode

Cette font est consultable avec tilemolester donc mais, c'est une font avec des propriétés spéciales qui vont compliquer la tâche d'édition :/
Dans un souci de gain de place, les développeurs ont fait une font superposée, ce qui signifie donc que chaque caractère et superposé sur un autre et que pour les afficher, il faut utiliser des clefs formées via la palette de couleurs (une combinaison spéciale de couleurs dans la palette dont l'ordre changera selon si on utilise la font 1 ou la 2)

C'est assez chiant à gérer pour un graphiste quoi que pas non plus insurmontable (je l'ai déjà fait sur DW7 mais j'ai bien galéré ^^)

Voilà à quoi ça ressemble en image :


Là il s'agit de la font montée avec la palette clef, il faut savoir que chaque font utilise 4 couleurs sur les 16 d'une résolution 4bpp
Comme tu le vois (je me permets de te tutoyer ^^) c'est un gros bordel à vue de pif mais pourtant ça suit une logique de superposition qui fait que les 2 palettes l'une sur l'autre forment 16 couleurs en tout

Dans le lot, bien que ça ne se verra pas lorsqu'on utiliseras soit une clef soit l'autre, il y a des pixels (ceux qui se superposent à d'autres en dehors de la couleur de transparence) qui doivent donc utiliser une variante entre les deux couleurs de manière à ce que l'une ou l'autre des deux palettes puisse le rendre affichable (si la variante n'est pas utilisée, ce pixel sera visible sur seulement une des deux font)

Voilà maintenant la même font avec le 1ere clef :


Et celle avec la 2nde clef :


Là c'est que des clefs de couleurs donc pas les couleurs réelles ;)

Voilà la/les font(s) avec un des 3 palettes réelle :
Image Image

En vérité il s'agit de la même image mais qui utilise une combinaison de palette différente pour chacune d'elle

Comme dit plus haut, cette font sera chiante à retaper mais pas insurmontable ;)


La deuxième , c'est une font en 1bpp mais en 16x12 pixels

Le souci principal de cette dernière viendra donc de là car une tile en général (les petits carrés rouges sur le 1er screenshot) fait 8x8 pixels et tilemolester ne gère donc que ce format malheureusement

Là pour bien faire il faudrait donc obtenir des tiles de 16x12 pixels afin que la font s'affiche correctement chose que l'on ne peut pas faire sous tilemolester (ni aucun autre logiciel de graphisme à ma connaissance sauf sur des viewer, mais pas sur des éditeurs)

Du coup on se retrouve avec une font découpée :


Là encore ça reste malgré tout gérable du fait que la résolution de cette font est toute petite, mais ce sera chiant qd même car sur toute la partie à droite de la font (donc le dernier tiers sur la largeur de l'image pour être exact), pour un non codeur, il faudra prendre toutes les tiles une par une et les scinder en deux sur la hauteur (donc 8x4 pix par tile) et recoller la partie basse sur la droit de la partie haute avant de faire la même chose avec la tile suivante qui sera placée à droite également

Cela formera le bas manquant sur les lettres (qui sera à intercaler entre chaque ligne de tile)

Bref ça c'est de la bidouille de non codeur, le mieux serait d'utiliser un logiciel, mais peut être que le plugins Bahaimage pour lua-interface codé par Bahabulle, pourrait faire ça

Faut apprendre à l'utiliser après ^^


- 3ème souci, et sans doute le plus contraignant de tous, comme beaucoup de jeux jap, c'est l'absence de VWF, tout du moins à priori vu la position de la parenthèse ouvrante dans la font

La VWF qu'est-ce que c'est, cela signifie "Variable Width Font" donc font à largeur variable car dans notre belle langue (ou encore en anglais) chaque lettre de l'alphabet possède sa propre largeur, ex le "i" ou le "l" ne font pas la même largeur qu'un "m" ou un "w"

C'est généralement géré par un bout de code qui définit pour chaque lettre sa largeur, mais si la routine n'est pas présente dans le jeu, alors tous les caractères occupent la même place lorsqu'ils s'affichent à l'écran

En jap, ils n'en utilisent pas car leurs caractères rentrent tous dans des carrés, mais chez nous, les carrés sont trop larges pour nos caractères et du coup sans VWF on se retrouve avec des mots avec des lettres très écartées (ce qui en prime fait perdre de la place en largeur)

En implémenter une implique d'avoir de très bonnes compétences en ROMHack (principalement ASM et Programmation) perso j'en suis incapable ^^

..................................................................................



Passons aux textes donc maintenant

Ces derniers sont encodés en Shif-JIS

Voilà une adresse ou tu trouveras la table de correspondances avec les valeurs hexadécimales http://www.rikai.com/library/kanjitable ... sjis.shtml

ça devrait t'aider pour les faire s'afficher dans le code lors de tes tests


Il faut néanmoins savoir que les caractères alphanumériques utilisés dans la table Shift-JIS, ne sont pas les mêmes que ceux que l'on utilise nous, qui eux sont en ASCII

Voilà les alphanumériques en ASCII (qu'on utilise couramment) :
0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz

Et les alphanumériques du Shift-JIS (utilisés en jap) :
0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz



Pour ce qui est des fichiers contenant les scripts maintenant, ces derniers sont donc en Shift-JIS
J'ai trouvé la raison qui fait que les 0D0A marquent la fin d'une fenêtre de dialogue, c'est très simple, c'est parce que ces fichiers sont en fait de simples fichiers .txt ^^

On peut donc les ouvrir avec un éditeur de texte comme le notepad++ (logiciel très conseillé au passage si tu ne l'as pas déjà installé sur ton pc)


Il suffit de régler l'encodage (onglet Encodage > Codage de caractères > Japonais > Shift-JIS)



Les fichiers HTX donc contiennent les scripts

Les fichiers SOD contiennent des pointeurs stockés en 16 bits LE (2 octets little endian) mais par contre il ne pointent aps les textes mais les données dans le SCR

Je ne sais pas trop ce que contiennent les SCR mais je suppose que c'est eux qui gèrent un peut tout l'affichage, l'ordre et les events, etc... pour la scène en question et ça semble assez complexe ;)

Je ne sais donc pas si y'a d'autres pointeurs directement pour les textes (du moins pour le moment)


Le plus simple ça va être de faire un test tout con voir si on peut étendre très simplement les fichiers


Comme vu sur le screenshot de notepad++ ci-dessus, chaque fenêtre est donc stockée sur une ligne, et les flèches bas doivent marquer la pause entre elles (puis l'affichage d'une nouvelle fenetre sans doute à la maniere d'un clear window, bien que je n'ai pas testé dans le jeu ni même lancé ce dernier pour le moment ^^)


La chose qu'il faut vérifier, c'est si tu peux utiliser plusieurs fois de suite ces "pauses" dans tes textes pour voir si tu peux donc ajouter du texte à la suite sans décaler les autres textes ;)

Le principe est simple, choisi un morceau de texte que tu as repéré in-game et auquel tu auras facilement accès, puis tente d'ajouter une flèche et du nouveau texte qui se terminera par 0D0A (bref réutilise le principe utilisé dans le code)

Essaye même d'en placer 2 ou 3 si ça fonctionne comme ça tu seras fixée sur la possibilité ou non d'étendre tes textes à volonté ;)

Le tout en prenant bien soin de conserver l'encodage Shift-JIS lors de l'enregistrement (mais garde une copie du fichier d'origine au cas ou ça plante)

Puis vois ce que ça donne in-game, si ça passe ce sera plutôt encourageant

Mais attention si tu utilises les caractères alphanumériques pour ton test, n'oublie de ne pas utiliser ceux en ASCII (que le notepad++ affichera si tu écris avec ton clavier) mais plutôt ceux du Shift-JIS (par copié collé) ;)


Voilà, j'arrête là mon pavé ça fera déjà pas mal pour le moment :P et sorry pour les quelques fautes dedans, mais je fatigue et j'ai la flemme de tout relire aujourd'hui ^^

Je sais qu'il y a beaucoup de points soulevés dans mon post sur lesquels tu auras certainement des questions ou que tu n'arriveras pas à suivre du fait que ça aborde un côté assez technique, donc au besoin n'hésite pas à demander une explication si tu as du mal ;)
Image
Avatar de l’utilisateur
Lyan53
Administrateur du site
 
Messages: 864
Âge: 46
Enregistré le: Lundi 22 Novembre 2010 à 20:48:11
Genre: Homme

Re: Extraction de texte/pointeurs

Message non lupar asakura9 » Mercredi 11 Juillet 2012 à 13:42:39

Merci pour cette réponse très détaillée quand même ! :D

Alors j'ai réussi à visualiser la font sur tilemolester mais je ne comprend pas bien comment séparé trouver et utiliser les palettes clefs... Et comment arrives-tu(je tutoie aussi... xD) à obtenir les fonts avec les palettes réelles ? Faut dire que je ne connais pas très bien ce logiciel... ><

Pour rajouter des accents, il faudra modifier quelles fonts dans toutes celles qu'il y a ?

Pour la VWF, c'est bien ce que j'avais remarqué au tout début quand je modifiais les caractères japonais avec des lettres... ça prend pas mal de place et justement je voyais pas trop comment faire pour changer ça mais apparemment ça m'a l'air compliqué... =\ Mais les anglais ils n'ont pas des outils qui permettent de modifier ça? Parce que quand je vois leurs travaux, ils n'ont pas ce problème on dirait...

Ensuite pour les textes :

Ben je savais pas que quand j'utilisais le clavier, j'encodais en ASCII donc je comprend mieux le problème... J'avais déjà notepad++ mais je ne savais pas afficher les caractères japonais donc maintenant ça m'aide bien ! :)

Sinon on peut ajouter autant de flèches qu'on veut pas de problème de place donc. Le seul soucis c'est écrire en Shift-JIS avec le copié-collé, c'est assez long... =\
Je me demande s'il est possible d'écrire avec le clavier et de pouvoir ensuite encoder en Shift-JIS pour l'insérer ensuite dans le script du jeu ?


Donc voilà j'ai quand même bien avancé, enfin surtout pour comprendre c'était quoi les problèmes ! :D
Avatar de l’utilisateur
asakura9
 
Messages: 17
Âge: 29
Enregistré le: Dimanche 29 Mai 2011 à 15:03:35
Genre: Femme

Re: Extraction de texte/pointeurs

Message non lupar Lyan53 » Mercredi 11 Juillet 2012 à 17:59:41

asakura9 a écrit: Faut dire que je ne connais pas très bien ce logiciel... ><

ça viendra avec le temps ;)

asakura9 a écrit:Alors j'ai réussi à visualiser la font sur tilemolester mais je ne comprend pas bien comment séparé trouver et utiliser les palettes clefs... Et comment arrives-tu(je tutoie aussi... xD) à obtenir les fonts avec les palettes réelles ?

Il faut appliquer une petite modif dans le code du logiciel, dans la doc fournie avec le logiciel (et que personne ne lit jamais :P), y'a des infos sur le fait que tilemolester est un logiciel dans lequel on peut implémenter des formats personnalisés (s'il sont basiques)

Pour avoir le format de palette dont il est question et qui est en BGR555, il faut donc ajouter une petite ligne de code dans le logiciel

Tout d'abord, assure toi d'utiliser la version originale de tilemolester car il existe de nombreuses versions modées

Tu trouveras cette dernière ici par ex : http://traf.romhack.org/index.php?p=outils&oid=58

Ensuite avant de lancer le logiciel, il va falloir ajouter une ligne de code dans le fichier "tmspec.xml"

  • Ouvre le fichier "tmspec.xml" avec le notepad++
  • Rends toi au niveau des "palettefilters"
  • Puis ajoute celle qui suit dans la liste après les autres :
    Code: Tout sélectionner
            <palettefilter extensions="bin" colorformat="CF00" size="1024" offset="0" endianness="little">
                <description>BGR (555) Palette (*.bin)</description>
            </palettefilter>
    Juste avant la balise fermante </palettefilters> (avec un "s")
  • Enregistre et c'est tout

Ce petit ajout va te permettre de pouvoir utiliser des palettes de couleurs en format BGR555, mais uniquement à partir des données brutes de la palette (donc sans header, juste le code des couleurs)

Pour cela il faudra que ta palette possède l'extension ".bin" que tu pourras ajouter sur le fichier au besoin

Par chance, dans ton jeu, les palettes de couleurs sont en format brut (juste les datas des palettes sans header) et portent l'extension .col (tout du moins pour la font)

La palette clef est dans le dossier DebugFont, l'autre palette .col qu'il y a dans le dossier "hsfont" ne montre que les 4 couleurs utilisées, mais elles ne sont pas placées en tant que palette clef (ça je l'ai fait manuellement pour te montrer les screens de la font)

Pour monter une palette sous tilemolester va dans l'onglet "palette > import from > another file" et sélectionne ton fichier .bin

........................................................................................


Pour la petite explication, il faut bien comprendre comment fonctionne le format BGR555 dans le but de bien pouvoir reconnaitre une palette qd tu en croiseras une dans le code d'un jeu :

Sur une résolution 4bpp on a des palettes qui possèdent 16 couleurs
Sur une résolution 8 bpp on a des palettes qui possèdent 256 couleurs

Ces 2 formats sont couramment utilisés sur support NDS

Sur les données hex de la palette, on aura donc 16 bits d'attribués pour chaque couleur (donc 2 octets)

Pour une résolution 4 bpp, on aura donc 32 octets pour chaque palette (ou 0x20 en hex)
Pour une résolution 8 bpp, on aura 512 octets pour chaque palette (soit 0x200 en hex)

BGR555 signifie Blue, Green, Red, 5 bits, 5 bits, 5bits : soit les 3 couleurs fondamentales sur les ordis et en langage binaire, 5 bits d'attribués pour chacune d'elle

Si on converti donc nos 2 octets attribués à chaque couleur en binaire on aura donc : XBBBBBGGGGGRRRRR
X = non utilisé
B = Bleu sur 5 bits
G = Vert sur 5 bits
R = Rouge sur 5 bits

Les logiciels d'édition graphiques tels que photoshop ou photofiltre utilisent un format RGB888 (ça marche sur le même principe binaire), ce qui fait que pour obtenir les correspondances réelles de chaque couleur, il faudra multiplier par 8 chaque valeur hexadécimale obtenue avec les 5 bits sur chacune des 3 couleurs

Je pense que tu as déjà croisé ce type de générateur de couleur dans des logiciels type toshop :
Image

Le fonctionnement est simple, on a les 3 couleurs fondamentales RVB (Rouge Vert Bleu) pour former nos couleurs

Chaque couleur fondamentale possède 256 crans, soit de 0 à 255 dont la correspondance hexadécimale est de 0x00 à 0xFF (donc 1 seul octet ou 8 bits) tout simplement puisque l'informatique est composé entièrement de binaire

Sur du BGR555 qui ne nous autorise que 5 bits par couleur fondamentale, on ne peut donc avoir que 32 nuances pour chacune, soit de 0x00 à 0x31 (en binaire 00000 à 11111 donc 5 bits max) qu'on multipliera par 8 pour obtenir nos correspondances en RGB888

Pour les couleurs autres du RGB888 non divisibles par 8, faudra tabler au plus proche (donc arrondir sur la valeur la plus proche soit 0x00, 0x08, 0x10, 0x18, 0x20, 0x28, etc ... le max étant 0xF8)

Voyons maintenant un exemple de comment est transposée une couleur dans le code du jeu

Imaginons que la palette de couleur possède celle-ci : ██████ dans notre palette donc elle sera répertoriée sur 2 octets qui seront : 7D10 (valeur en BGR555)

Décortiquons notre 7D10 en binaire : 0111110100010000

Bleu = bin. 11111 => hex. 0x1F (qu'il faut multiplier par 8) => 0xF8
Vert = bin. 01000 = > hex. 0x08 (qu'il faut multiplier par 8) => 0x40
Rouge = bin. 10000 = hex. 0x10 (qu'il faut multiplier par 8) = 0x80

Donc notre couleur en RGB888 sera "#8040F8" en hex (ou en décimal => R : 248, V : 64, B : 128) et c'est celle-ci qui s'affichera à l'écran de la console ;)

........................................................................................


asakura9 a écrit:Pour rajouter des accents, il faudra modifier quelles fonts dans toutes celles qu'il y a ?

Il faut localiser quelle font correspond à quoi, et pour ça y'a un truc simple à faire, on modifie graphiquement un caractère, et celui-ci sera modifié chaque fois qu'il apparaitra à l'écran, ça te permettra de savoir quelle font est utilisée dans tel ou tel type de texte (m'enfin l'apparence de celle-ci peut aussi de mettre sur la voie puisque la font en 16x12 n'a que deux couleurs et est très fine, alors que l'autre font utilise 4 couleurs)

Généralement, s'il y a plusieurs font, c'est que plusieurs sont utilisées dans le jeu donc il est probable qu'il faille les modifier toutes les deux (voir 3 si en prime la font debug est utilisée m'enfin celle-ci j'en doute)


asakura9 a écrit:Mais les anglais ils n'ont pas des outils qui permettent de modifier ça? Parce que quand je vois leurs travaux, ils n'ont pas ce problème on dirait...

Qd tu parles des anglais, tu parles des traductions de fans ou les officielles ??

Car sur les trad officielles qui sortent en version anglaise (ou autre langue), les développeurs du jeu implémentent une VWF spécifiquement pour les versions distribuées en dehors du Japon

Pour ce qui est des fans translation par contre, là c'est plus compliqué, ou c'est pris en main par des romhackeurs très compétents qui implémentent une VWF à coup d'ASM et de programmation, ou alors cette dernière est déjà présente dans le jeu (ça aurait été le cas si ta font avait été en NFTR par exemple ce qui est très souvent le cas sur les jeux NDS même jap), ou alors ils peuvent utiliser des subterfuges comme une DTE (Dual Tile Encoding) qui est une méthode de compression consistant à mettre 2 caractères alphabétiques cote à cote en remplacement d'un seul caractère Jap, et former des mots avec à partir d'une table de caractères qui répertorie toutes les possibilités utilisées dans le jeu

Ex avec quelques mots : lester, pattes, lettre, rester, palettes
le st er
pa tt es
le tt re
re st er
pa le tt es

Pour ça par contre il faut avoir beaucoup d'emplacements disponibles dans la font et la tienne est à mon avis trop petite :/ puisqu'elle n'en possède que 512 (256 * 2 avec la superposition)


asakura9 a écrit:Ben je savais pas que quand j'utilisais le clavier, j'encodais en ASCII donc je comprend mieux le problème... J'avais déjà notepad++ mais je ne savais pas afficher les caractères japonais donc maintenant ça m'aide bien ! :)

Et si, l'informatique utilise que du binaire donc tout est fait de 1 et 0 en informatique, l'hexadécimal simplifie la lecture pour les petits cerveaux humains ;)

Si tu ouvres par exemple un simple fichier txt dans lequel tu as écris un petit texte avec des retours lignes dans ton éditeur hexadécimal, tu verras que ton texte sera sur des valeurs ASCII (donc 41=A, 42=B, 61=a, 62=b, etc...) et tu verras même qu'à la fin de chaque ligne, ton retour ligne sera marqué par un 0D0A (qu'on ne voit pas dans les fichiers txt qu'on écrit parce qu'elle est masquée, mais dans le notepad++ tu peux par exemple faire afficher ce type de balises dans les options d'affichage > symbole spéciaux)


asakura9 a écrit:Sinon on peut ajouter autant de flèches qu'on veut pas de problème de place donc.

Ah bah ça c'est super, tu as vraiment de la chance sur ce coup là car c'est loin d'être le cas de tous les jeux ;)

On peut même en déduire pour le coup que ton jeu n'utilise pas de pointeurs de texte mais fonctionne sur le repérage de la balise de fin de fenêtre donc, ce qui te simplifiera la vie sur ce point ;)

asakura9 a écrit:Le seul soucis c'est écrire en Shift-JIS avec le copié-collé, c'est assez long... =\
Je me demande s'il est possible d'écrire avec le clavier et de pouvoir ensuite encoder en Shift-JIS pour l'insérer ensuite dans le script du jeu ?

Alors pour ça, y'a une manière simple de faire, faudra utiliser le hareng-tool, mais en mode sans pointeurs

Il te permettra d'extraire tes textes jap en utilisant une table de caractère pour l'extraction (dans laquelle tu pourras même ajouter des balises plutôt que des flèches, puis ensuite faudra refaire une table de caractères spécifique pour la réinsertion que laquelle tu pourras attribuer à la place des caractères S-JIS, leurs correspondances en ASCII (sur les valeurs S-JIS)
Image
Avatar de l’utilisateur
Lyan53
Administrateur du site
 
Messages: 864
Âge: 46
Enregistré le: Lundi 22 Novembre 2010 à 20:48:11
Genre: Homme

Re: Extraction de texte/pointeurs

Message non lupar asakura9 » Vendredi 13 Juillet 2012 à 16:22:39

Merci pour toutes les explications sur ces histoires de font et palette !

Ok pour tilemolester, ça marche mais c'est juste que je vois pas du tout de fichier .col ! Oo Ni de fichier .bin dans les dossiers Debugfont et hsfont...

Ensuite, j'avais déjà un peu vu ces histoires de couleurs et leur valeurs avec photoshop, oui, mais pas autant en détails !^^

En tout cas ça a l'air plutôt compliqué à modifier comme font avec toutes ces superpositions... Je pense pas du tout avoir les compétences pour ça ! =\
Et cette histoire de VWF est aussi un gros problème...Mais on rencontre ce problème-là, VWF, pour tous les jeux japonais, non ?

Sinon je parlais des traductions anglaises des fans qui ont l'air de bien s'en sortir quand même là-dessus puisque j'ai pas du tout vu de traduction avec des gros espaces entre les lettres donc je me demandais bien comment ils faisaient du coup ! Mais là aussi, la font pose problème au vu de la méthode dont tu parles...

Le point positif, qui est quand même important aussi, c'est l'absence de pointeurs de texte. Je pourrais traduire tout simplement le jeu pour l'instant puis essayer de voir tous les problèmes précédents... Il y aura juste des écarts entre les lettres et pas d'accents ! xD

Juste une question, même si l'on arrive à faire varier la longueur des lettres, l'encodage du jeu reste toujours le même ?

Et pour la table de caractères avec hareng tool, c'est bien 82A0=あ, etc. qu'il fait utiliser pour extraire, c'est ça ?
Avatar de l’utilisateur
asakura9
 
Messages: 17
Âge: 29
Enregistré le: Dimanche 29 Mai 2011 à 15:03:35
Genre: Femme

Re: Extraction de texte/pointeurs

Message non lupar Lyan53 » Vendredi 13 Juillet 2012 à 18:11:14

asakura9 a écrit: c'est juste que je vois pas du tout de fichier .col ! Oo Ni de fichier .bin dans les dossiers Debugfont et hsfont...

Pourtant les fichiers .col sont bien presents oO



Mais peut être faudrait-il configurer ton windows pour qu'il t'affiche les extensions des fichiers

J'ai remarqué que ce n'est pas le cas sur tes screenshots plus haut



asakura9 a écrit:En tout cas ça a l'air plutôt compliqué à modifier comme font avec toutes ces superpositions... Je pense pas du tout avoir les compétences pour ça ! =\


C'est pas évident en effet car il faut jouer avec des calques, on retape chaque font indépendamment avec des couleurs bien distinctes et différents pour chacune (sachant qu'elle n'ont que 4 couleurs en tout), ensuite on les superpose en transparence via des claques pour que les couleurs se mélangent

Une fois ça fait on obtient donc nos 16 couleurs de palette mais il faut bien prendre soin de les placer dans le bon ordre

Bref c'est assez chiant à faire ^^



asakura9 a écrit:Et cette histoire de VWF est aussi un gros problème...Mais on rencontre ce problème-là, VWF, pour tous les jeux japonais, non ?

Tous les jeux japs non car certains embarquent la VWF, elle peut être dans le code du jeu (bien souvent un routine dans l'exécutable), ou alors elle peut être directement liée au format de la font, c'est le cas pour les NFTR qui sont très souvent utilisés sur les jeux NDS, ce qui fait que ce problème est rarement rencontré sur ce support

Malheureusement tous les jeux NDS n'utilisent pas le format NFTR ce qui fait donc qu'il y'en a certains qui n'utilisent pas de VWF (les japs ne l'implémentent pas car ils n'en n'ont pas besoin ce serait donc mettre du code inutile dans le jeu)

Sur les autres supports par contre, c'est un souci récurrent des qu'on aborde un jeu jap, ils embarquent rarement la VWF ou seulement une partielle



Tous les cas ci-dessus n'ont pas de VWF, parfois ça se remarque beaucoup, parfois moins, ça dépend aussi de la place occupée par les cara jap, leur taille principalement, car lorsqu'ils ne sont pas trop gros ou trop espacés, on peut utiliser ce que l'on appelle une font mono espacée (dont tous les caractères font la même largeur) mais ça ne rend pas toujours bien

On le remarque sur des lettres comme les "I" ou les "L" minuscules qui sont au milieu de la case (et donc espacés)

On repère aussi très facilement l'absence de VWF parce que les lettres sont alignées par colonnes d'une ligne à l'autre



asakura9 a écrit:Sinon je parlais des traductions anglaises des fans qui ont l'air de bien s'en sortir quand même là-dessus puisque j'ai pas du tout vu de traduction avec des gros espaces entre les lettres donc je me demandais bien comment ils faisaient du coup ! Mais là aussi, la font pose problème au vu de la méthode dont tu parles...


Il utilisent des subterfuges, comme la font mono espacée dont je parlais plus haut, mais parfois ce n'est pas aussi simple à cause de la taille des caractères

La méthode de la DTE est aussi assez courante lors des traductions jap car l'avantage du japonnais, c'est que bien souvent les fonts embarquent de très nombreux caractères et donc énormément d'emplacements disponibles ce qui permet alors de pouvoir placer toutes les combinaisons possibles de DTE (combi de 2 lettres par cara jap)

Exemple à ce lien http://kumatrans.wikidot.com/forum/t-114876/vwf

Ou alors les hack sont faits par des personnes très compétentes qui peuvent recoder une partie du jeu pour implémenter dans celui-ci une VWF chose qui est très loin d'etre à la portée de tout le monde malheureusement ^^

Mais le problème reste de toute façon bel et bien présent sur tout ce qui est trad jap, il n'est pas du tout rare d'être confronté à ce dernier.



asakura9 a écrit:Juste une question, même si l'on arrive à faire varier la longueur des lettres, l'encodage du jeu reste toujours le même ?


Oui, à vrai dire l'encodage dans ton jeu est Shift-JIS, mais il n'y a pas que de lASCII ou du S-JIS dans les jeux parfois, les lettres sont sur d'autres valeurs (non visible dans un editeur hex)

On peut tres bien avoir un A=20, B=21 etc... qui ne correspond à aucun encodage ;)




asakura9 a écrit:Et pour la table de caractères avec hareng tool, c'est bien 82A0=あ, etc. qu'il fait utiliser pour extraire, c'est ça ?


Oui mais tu trouveras une table Shift-JIS déjà toute prête sur la TRAF, il faudra juste la compléter un peu avec tes balises de texte




asakura9 a écrit:Le point positif, qui est quand même important aussi, c'est l'absence de pointeurs de texte. Je pourrais traduire tout simplement le jeu pour l'instant


Tu peux faire ça mais en cas d'implémentation des accents, ça t'obligera à repasser sur tout le texte

Le mieux en théorie c'est de terminer le hack d'abord (donc préparer le terrain)

Pour la VWF par contre, là il faudrait une personne très compétente pour en implémenter une et ça ne court pas le net :/
Image
Avatar de l’utilisateur
Lyan53
Administrateur du site
 
Messages: 864
Âge: 46
Enregistré le: Lundi 22 Novembre 2010 à 20:48:11
Genre: Homme

Re: Extraction de texte/pointeurs

Message non lupar asakura9 » Dimanche 15 Juillet 2012 à 18:55:43

J'ai trouvé les fichiers, c'était bien un problème de configuration. :)
Le problème aussi pour retoucher cette font, c'est qu'il y a vraiment pas de place avec cette superposition déjà et je vois pas comment en faire... =\
J'aurais bien aimé ajouter au moins les accents mais bon...

Finalement je vois que parfois l'absence de VWF ne pose pas vraiment de problème parce qu'elle ne se voit pas trop ! Je crois que je vais laisser tomber pour ce côté là, puisque de tout façon je peux ajouter autant de place que je veux sans problème, même si c'est pas le mieux. ^^'

J'avais fait quelques recherches et je suis tombée sur le même page que toi pour la méthode DTE. C'est quand même une bonne solution pour certaines font, même si je peux pas l'appliquer dans ce cas-là. Je m'en souviendrais !

Et sinon, je pense traduire à côté et continuer d'essayer de voir pour les accents avant de mettre le texte traduit dans le jeux alors. Je vais peut-être regarder aussi les autres Atelier sur DS, sachant que les font de certaines Roms sont en NTFR de ce que j'ai vu. :D
Avatar de l’utilisateur
asakura9
 
Messages: 17
Âge: 29
Enregistré le: Dimanche 29 Mai 2011 à 15:03:35
Genre: Femme

Re: Extraction de texte/pointeurs

Message non lupar Lyan53 » Lundi 16 Juillet 2012 à 18:11:04

asakura9 a écrit:Le problème aussi pour retoucher cette font, c'est qu'il y a vraiment pas de place avec cette superposition déjà et je vois pas comment en faire... =\
J'aurais bien aimé ajouter au moins les accents mais bon...


Bah il faut remplacer graphiquement quelques caractères jap tout simplement, de cette manière lorsque tu feras appel à la valeur hex du cara jap remplacé, il affichera la lettre que tu auras mis à la place

Inutile de faire de la place donc tu en as suffisamment de dispo pour tes cara accentués ;)
Image
Avatar de l’utilisateur
Lyan53
Administrateur du site
 
Messages: 864
Âge: 46
Enregistré le: Lundi 22 Novembre 2010 à 20:48:11
Genre: Homme

Suivante

Retourner vers Sur le ROMhacking

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 5 invités

x

#{title}

#{text}