Pizza Tycoon : questions pour une traduction française
Réduire
X
-
Quelques nouvelles : la traduction avance. J'essaie de garder au maximum l'humour des différents dialogues que contient le jeu. Il y en a tout de même plus que je m'imaginais. La raison est que beaucoup de ces dialogues sont facultatifs (par exemple les entretiens d'embauche qui sont assez loufoques), ce qui se comprend pour un jeu de gestion, c'est assez facile de passer à côté.
J'ai continué d'essayer de déterminer la structure des fichiers de fonts. J'ai réussi à en décoder la moitié en comparant avec les versions AMIGA correspondantes. Cependant il y a encore un certain nombre d'octets qui restent obscurs pour le moment. On va dire que ça sera un projet à part de réussir à finir de déchiffrer ces fichiers, je ne lâcherai pas l'affaire. J'ai encore quelques options pour y arriver, dont la rétro-ingénierie pure en essayer de comprendre ce que fait le code C décompilé. Ce sera difficile sans pouvoir recompiler derrière, mais ça reste tout de même passionnant.
Pour les caractères accentués, normalement ça devrait être bon, j'ai pu modifier les bitmaps des fichiers de police pour avoir des accents.
En ce qui concerne les traductions présentes dans le fichier .EXE, je vais me retrouver avec un problème : beaucoup de chaînes présentes dans le fichier semblent être accédées avec un pointeur direct (auquel cas je ne peux pas faire dépasser la taille de la chaîne qui la précède, ce qui est malheureusement trop souvent nécessaire parce que... bah le français est le français : c'est plus long). Il sera donc nécessaire de déplacer les chaînes ailleurs dans l'EXE et de modifier les pointeurs. Je ne sais pas encore comment je vais faire pour ça, je verrai probablement en dernier (ça et la modification des quelques images qui pourraient contenir du texte).
👍 3Laisser un commentaire:
-
Alors pour le coup augmenter la hauteur c'est possible car je sais qu'il s'agit du tout premier octet du fichier. En tout cas je l'espère : comme ces fichiers ont été convertis des versions AMIGA de polices, qui sont composées d'un fichier "métadonnées" et d'un dossier contenant 1 ou plusieurs fichiers numérotés qui sont les "descripteurs" de la font pour la taille indiquée par le nom du fichier, et celui-ci correspond à la hauteur de la font pour ce fichier (si la police est disponible en 3 hauteurs de caractères différentes, alors ça fait autant de fichiers dans le dossier). Tout cela est bien expliqué dans ce billet de blog en 3 parties.Envoyé par Sylvain_rocher Voir le messageIl y a peut être un moyen d’agrandir la taille des font. J’ai réussi à le faire sur Ultima Underworld, ou je retrouvais dans les fichiers font les mêmes infos que tu montre la (nb d’octets par caractère, largeur, hauteur etc…). Après faut faire attention quand on augmente la hauteur, ça modifie l’interligne, et ça peut ne plus être adapté pour les fenêtres du jeu. Perso je ne pouvais agrandir que d’un seul pixel les font sans risquer d’effets de bord
Et il y a peut être aussi un moyen d’ajouter de nouveaux caractères. Je ne connais pas la structure fine de ton fichier : est ce qu’ils sont référencés par un ID en ASCII ? Comme il y a forcément un lien entre la touche du clavier et où aller chercher la font, il y a peut être un moyen d’ajouter des caractères supplémentaires.
Cependant, il y a eu conversion pour la version MS-DOS : je n'ai plus 2 fichiers mais un seul, et la structure de celui-ci est différente. Comme je le disais, tout ce que je sais c'est que le 1er octet correspond au nom du fichier descripteur d'AMIGA. Ensuite, grâce au petit soft magique de Hrvg et à ses captures d'écran plus haut, j'ai pu déterminer le bit de départ de la partie "bitmap" du fichier. Tout ce qui se trouve avant cette section est le header du fichier, mais je ne connais pas les données qu'il contient, ni l'ordre. Je pourrais me baser sur les fichiers de fontes AMIGA, mais ça nécessite vraiment une étude approfondie. Il doit notamment contenir l'offset de départ du bitmap, un tableau d'offsets pour déterminer à quel bit démarre chaque glyphe de la font, la largeur de celui-ci (car certaines polices du jeu ne sont pas monospace) ainsi que l'octet qui permet de l'afficher.
J'adorerais vraiment pouvoir trouver cette structure du header, car si j'arrive à l'avoir, je peux littéralement tout faire. Pour l'instant je suis limité à la modification du bitmap existant. Peut-être que ça suffira.
Laisser un commentaire:
-
Il y a peut être un moyen d’agrandir la taille des font. J’ai réussi à le faire sur Ultima Underworld, ou je retrouvais dans les fichiers font les mêmes infos que tu montre la (nb d’octets par caractère, largeur, hauteur etc…). Après faut faire attention quand on augmente la hauteur, ça modifie l’interligne, et ça peut ne plus être adapté pour les fenêtres du jeu. Perso je ne pouvais agrandir que d’un seul pixel les font sans risquer d’effets de bordEnvoyé par StraToN Voir le messageOui j'ai trouvé tous les paramètres pour modifier les fichiers FNT dans GBS.
Les voici :
Le problème de remplacer les signes par un caractère accenté c'est surtout une question de largeur. En effet, les fichiers FNT encodent la largeur de chaque glyphe quelque part, or les signes font généralement 2 ou 3 pixels de large, trop peu pour y caser une lettre accentuée. Du coup il est possible que je m'en sorte en remplaçant des lettres allemandes, très peu utilisées en français, par des caractères accentués français. Je traduirai tout ce que je peux en français puis je ferai un petit script qui fera le remplacement des caractères accentués par la lettre allemande qu'ils remplacent.
Toutefois, certaines polices sont extrêmement simplistes et n'ont aucun caractère accentué ou spécifique à l'anglais que je pourrais remplacer. C'est le cas de CSTANDAR et de SUPERSMA. Je vais chercher où ces polices sont utilisées ; je pourrai peut-être en utiliser une autre.
Et il y a peut être aussi un moyen d’ajouter de nouveaux caractères. Je ne connais pas la structure fine de ton fichier : est ce qu’ils sont référencés par un ID en ASCII ? Comme il y a forcément un lien entre la touche du clavier et où aller chercher la font, il y a peut être un moyen d’ajouter des caractères supplémentaires.Dernière modification par Sylvain_rocher, 27 novembre 2024, 17h58.
👍 1Laisser un commentaire:
-
Oui j'ai trouvé tous les paramètres pour modifier les fichiers FNT dans GBS.
Les voici :
Le problème de remplacer les signes par un caractère accenté c'est surtout une question de largeur. En effet, les fichiers FNT encodent la largeur de chaque glyphe quelque part, or les signes font généralement 2 ou 3 pixels de large, trop peu pour y caser une lettre accentuée. Du coup il est possible que je m'en sorte en remplaçant des lettres allemandes, très peu utilisées en français, par des caractères accentués français. Je traduirai tout ce que je peux en français puis je ferai un petit script qui fera le remplacement des caractères accentués par la lettre allemande qu'ils remplacent.
Toutefois, certaines polices sont extrêmement simplistes et n'ont aucun caractère accentué ou spécifique à l'allemand que je pourrais remplacer. C'est le cas de CSTANDAR et de SUPERSMA. Je vais chercher où ces polices sont utilisées ; je pourrai peut-être en utiliser une autre.
👍 1Laisser un commentaire:
-
Bonsoir,
Tu as trouvé tous les fonts des fichiers x.FNT ?
Tu peux aussi remplacer des signes par des lettres accentuées, par exemple, les [], etc. Mais, je pense que tu connais ce truc.
Laisser un commentaire:
-
Ok le test est concluant : j'ai ajouté le caractère 'é' à la police PIZ-NUMB.FNT en faisant sauter le caractère Ä (probablement jamais utilisé en français, en tout cas pas dans ce jeu).
Le test est concluant. Le texte suivant :
S'affiche comme suit dans le jeu :Accents àäâéèëêïîöôùüûÀÄÂÉÈËÊÏÎÖÔÙÜÛ.
Pour cette police en tout cas, je devrais pouvoir m'en sortir.
👍 3Laisser un commentaire:
-
Je pense que je suis un peu en train de me perdre à essayer de déchiffrer la structure du fichier FNT pour pouvoir le modifier "proprement", et surtout avoir le droit de l'agrandir, car pour certaines polices j'ai assez peur de ne pas avoir suffisamment d'espace pour ajouter tous les caractères accentués qui me manquent. C'est assez passionnant de faire la rétro-ingénierie de ces choses, ça me donne aussi l'occasion d'essayer de me faire aider par l'IA (ce qui me servira dans mon travail de tous les jours, je bosse dans ce secteur mais pour de l'outillage classique) et j'adore faire des outils.
Pour le fun voici l'extraction que je suis parvenu à obtenir (avec l'aide de l'IA qui m'a aidé à sortir un script Python).
edit : le script en question en bas de ce message, si ça peut intéresser quelqu'un.
Cette image affiche tous les glyphes de l'image, mais le script se base sur des largeurs de caractères que j'ai moi même mesurés. Du coup, techniquement on doit trouver toutes ces largeurs régulièrement dans le ficher, mais je n'ai pas encore pu déterminer où.
Je vais tout de même essayer de modifier le fichier en dessinant dedans directement avec GBS comme tu l'as indiqué Hrvg, au moins pour confirmer que ça fonctionne.
Code:# Import necessary libraries import numpy as np import matplotlib.pyplot as plt # File path for the uploaded file file_path = "/hdd2to/Lutris/pizza-tycoon/data/FONTS/PIZ-NUMB.FNT" # Read the first byte of the file def read_first_byte(file_path): with open(file_path, "rb") as file: first_byte = file.read(1) return first_byte.hex().upper() # Visualize the file data starting from a specific bit def visualize_from_bit(file_path, start_bit, height, max_width=None): start_byte = start_bit // 8 bit_offset_in_byte = start_bit % 8 # Read sufficient bytes from the file with open(file_path, "rb") as file: file.seek(start_byte) raw_data = file.read() # Convert the raw data into binary format binary_data = np.unpackbits(np.frombuffer(raw_data, dtype=np.uint8)) # Adjust for the starting bit offset binary_data = binary_data[bit_offset_in_byte:] # Calculate the number of bits per row and reshape the binary data width_bits = max_width if max_width else 384 rows = binary_data[:height * width_bits].reshape((height, width_bits)) return rows # Detect and visualize glyphs based on variable widths def detect_and_visualize_glyphs(rows, initial_widths, height): start_position = 0 all_widths = initial_widths positions = np.cumsum([0] + all_widths) # Plot each glyph fig, axes = plt.subplots(len(all_widths) // 10 + 1, 10, figsize=(15, (len(all_widths) // 10 + 1) * 2)) axes = axes.flatten() for i, ax in enumerate(axes[:len(all_widths)]): start = positions[i] end = positions[i + 1] glyph = rows[:, start:end] # Extract the glyph based on detected widths ax.imshow(glyph, cmap='binary', interpolation='nearest') ax.axis('off') #ax.set_title(f"{i + 1}") for ax in axes[len(all_widths):]: ax.axis('off') plt.tight_layout() plt.show() return all_widths # Visualize the data from bit 195 with a height of 8 pixels rows = visualize_from_bit(file_path, start_bit=195, height=8) """ "#$%&´()*+,-./0123456789:;<=>? un petit symbole infini ABCDEFGHIJKLMNOPQRSTUVWXYZ[\] un symbole qui semble représenter un cadenas, composé d'un rectangle surmonté d'un arc de cercle _`abcdefghijklmnopqrstuvwxyz{}~ un symbole rectangulaire en damier ÄÖÜßäöü! """ # Initial widths provided for the first glyphs chars1_widths = [3, 5, 4, 4, 4, 2, 3, 3, 4, 3, 2, 4, 2, 3] numbers_widths = [4, 3, 4, 4, 4, 4, 4, 4, 4, 4] chars2_widths = [2, 2, 3, 4, 3, 4, 5] alphaCAP_widths = [4, 4, 4, 4, 4, 4, 4, 4, 2, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 4, 5, 5] chars3_widths = [3, 3, 3, 4, 5, 2] # g h i j l k m o p q r alphaMin_widths = [5, 4, 4, 5, 4, 3, 4, 1, 4, 2, 4, 4, 5, 4, 4, 4, 4, 3, 4, 3, 4, 3, 5, 4, 4, 4] chars4_widths = [3, 3, 4, 5] alpha_DE = [4, 4, 4, 4, 5, 4, 4, 4] joined_widths = chars1_widths + numbers_widths +chars2_widths + alphaCAP_widths + chars3_widths + alphaMin_widths + chars4_widths + alpha_DE print(len(joined_widths)) # Detect and visualize all glyphs glyph_widths = detect_and_visualize_glyphs(rows, joined_widths, height=8) print(f"Detected glyph widths:\n{glyph_widths}")
👍 2Laisser un commentaire:
-
Super tu avancesEnvoyé par StraToN Voir le messageHé, ça progresse !
Je suis en train de récupérer les codes hexa de chaque caractère dans un tableau Excel. Cependant j'ai l'impression que toutes les polices du jeu n'ont pas tous les caractères accentués.
Je continue à tester.
Hrvg merci beaucoup pour le petit programme. J'ai l'impression qu'il permet également de dessiner, ce qui veut dire que je pourrais peut-être intégrer des caractères accentués dans des fichiers qui n'en ont pas.
Ca y est, tu vas être pris dans une spirale tu vas plus en sortir
!!!
😂 1👍 1Laisser un commentaire:
-
Ce logiciel te permet d'exporter une font et de la modifier. Mais attention, elle devrait être de la même taille. En gros, voilà ce je fais : J'essaye d'avoir la font qui soit la plus propre avec GBS. J'exporte la font, mais je n'éteins pas GBS. Je modifie la font et je l'importe la font modifiée dans GBS. Je clique sur "Save changes" et je teste.Envoyé par StraToN Voir le messageHé, ça progresse !
Je suis en train de récupérer les codes hexa de chaque caractère dans un tableau Excel. Cependant j'ai l'impression que toutes les polices du jeu n'ont pas tous les caractères accentués.
Je continue à tester.
Hrvg merci beaucoup pour le petit programme. J'ai l'impression qu'il permet également de dessiner, ce qui veut dire que je pourrais peut-être intégrer des caractères accentués dans des fichiers qui n'en ont pas.
Des fois, on peut agrandir la font dans des fichiers FNT. Mais, je pense qu'on ne peut pas dans ceux-là, car ils ne sont pas propres et on dirait qu'il y a le code des lettres dans le fichier. Là, il faut être un connaisseur en informatique. Ce qui n'est pas mon cas....
Laisser un commentaire:
-
Hé, ça progresse !
Je suis en train de récupérer les codes hexa de chaque caractère dans un tableau Excel. Cependant j'ai l'impression que toutes les polices du jeu n'ont pas tous les caractères accentués.
Je continue à tester.
Hrvg merci beaucoup pour le petit programme. J'ai l'impression qu'il permet également de dessiner, ce qui veut dire que je pourrais peut-être intégrer des caractères accentués dans des fichiers qui n'en ont pas.
👍 2Laisser un commentaire:
-
Il y a des fonts avec toutes les lettres accentuées, mais qui doivent servir pour d'autres textes.Envoyé par Sylvain_rocher Voir le message
Tu peux aussi tenter d’essayer toutes les valeurs d’octets et voir comment réagit le jeu (j’ai fait ça sur Ultima 1, où le FONT ne correspond pas au caractère ASCII de la lettre).
Mais de ce que montre Hrvg , on dirait bien que tu n’as que les lettres avec l’Umlaut Allemand (les trémas
)
👍 1Laisser un commentaire:
-
@ StraToN,
Je t'ai envoyé le lien en MP. Dis-moi si tu l'as reçu, merci.
Laisser un commentaire:
-
Tu peux aussi tenter d’essayer toutes les valeurs d’octets et voir comment réagit le jeu (j’ai fait ça sur Ultima 1, où le FONT ne correspond pas au caractère ASCII de la lettre).Envoyé par StraToN Voir le message
Hmm, s'il y a les lettres accentuées dans le fichier alors il "suffirait" d'utiliser l'octet qui correspond. Mais si le caractère accenté dans le fichier n'est pas mappé à un octet "standard" alors je suis marron.
Peux tu me donner un lien vers ce logiciel magique que tu as utilisé dans tes captures d'écran s'il te plaît ? Ça me semble très intéressant.
Mais de ce que montre Hrvg , on dirait bien que tu n’as que les lettres avec l’Umlaut Allemand (les trémas
)
👍 1Laisser un commentaire:
Laisser un commentaire: