Du format des fichiers .s, .w et .t

Les documents, recettes et petits trucs qui sont utiles à tout fan de MSTS!

Modérateur : Modérateurs

ActivMaker
Messages : 216
Enregistré le : 25 janv. 2011 20:23

Re: Du format des fichiers .s, .w et .t

Messagepar ActivMaker » 23 févr. 2014 20:55

Bonjour

Merci beaucoup ! Je vais éplucher tout ça...
J'avance doucement dans la compréhension de ce format...Le but est de créer un petit utilitaire, mais il reste encore pas mal de travail (.

Avatar du membre
XylonAkau
Messages : 1936
Enregistré le : 24 juil. 2010 8:49
Localisation : Taputapuatea (ISLV)
Contact :

Re: Du format des fichiers .s, .w et .t

Messagepar XylonAkau » 24 févr. 2014 6:12

___Ia ora na.
___Tant mieux si ces listes peuvent t'aider ou, du moins, te faire gagner un peu de temps.
___Le format compilé (UB ou binary) est en effet un peu difficile à gérer au début parce que (contrairement au format texte UT) il ne dispose d'aucun séparateur : tous les éléments successifs sont soit de longueur fixe (quatre octets pour chaque mot-clé), soit de longueur annoncée. Mais, pour réaliser un utilitaire, c'est aussi un avantage qui permet d'échapper à la galère des fichiers où l'on peut trouver aussi bien

Code : Tout sélectionner

Static (
   FileName ( JP1HakIt.s )
que

Code : Tout sélectionner

     Static
(
                FileName       (       JP1HakIt.s     )
ou

Code : Tout sélectionner

Static(FileName(JP1HakIt.s)
___Bon courage pour la suite de ton travail.

ActivMaker
Messages : 216
Enregistré le : 25 janv. 2011 20:23

Re: Du format des fichiers .s, .w et .t

Messagepar ActivMaker » 25 févr. 2014 21:39

Bonjour,

Voici une très modeste contribution à ce sujet concernant ces classes 0 et 4 . Les infos se lisent dans les sources d'OR . Pour déterminer la classe d'ID présent dans le fichier , il analyse l'entête et plus particulièrement un octet. Exemple

JINX0w0t______
ou
JINX0t1t______

Si un w est présent, il utilise sa liste des ID qui commencent à 300 (ID de classe 4). En revanche le 04 que l'on voit dans les exemples (00 04 00 03 pour un objet Static), est lu dans une variable Flags. Il est possible que ce 04 ne serve donc pas à identifier la classe des ID. Cela étant en fouillant un peu on trouve bien un 0 pour les fichiers .s (Classe0) et 4 pour le .w (Classe 4)...Faudrait compiler un .eng en binaire pour voir ce qu'on y trouve..Si j'ai un peu le temps par curiosité , je regarderais.


Je me suis aussi posé des questions sur le 00 que l'on voit en tout début des données d'un bloc.

indiquant que les données occupent cinq octets : le 00 et les quatre octets de la valeur ; puis on passe directement aux octets de la valeur-clé suivante ;


et la :
auxquels s'ajoute comme d'habitude le 00 qui suit la longueur ;


Mais que vient faire ce 00 ? D'après les exemples on pourrait s'en passer. Réponse (Dans les sources d'OR toujours ) : A insérer des données supplémentaires entre les 4 octets définissant la taille et le bloc de données. On peut venir insérer un libellé d'une longueur maxi de 256 caractères unicode. Dans ce cas le 00 est remplacé par le nombre de caractère de la chaine . Par exemple pour
"TOTO" on trouvera :
04 54 00 4F 00 54 00 4F 00 . 04 pour 4 Lettres, puis 4*2 pour chacune des lettres.
J'ai du mal à me représenter un tel fichier en texte . Quelque chose comme ça peut être :

Tr_Watermark TOTO ( 10 )

[4c 00 04 00] [05 00 00 00] [04 54 00 4F 00 54 00 4F 00] [0A 00 00 00]

Je ne saurais dire si c'est vraiment utilisé ou pas...
Bon je retourne à mon utilitaire ...Qui n'avance pas du tout =,

Avatar du membre
XylonAkau
Messages : 1936
Enregistré le : 24 juil. 2010 8:49
Localisation : Taputapuatea (ISLV)
Contact :

Re: Du format des fichiers .s, .w et .t

Messagepar XylonAkau » 25 févr. 2014 22:16

___Ia ora na.
ActivMaker a écrit :Faudrait compiler un .eng en binaire pour voir ce qu'on y trouve..
___A titre indicatif, SIMIS Editor peut compiler un fichier texte Unicode (format UT) en binaire UB. Mais le programme présente quelques (très rares) erreurs dans la [dé]compilation des fichiers .w ; il faudrait donc considérer le résultat comme sûr à 99 %.
Je me suis aussi posé des questions sur le 00 que l'on voit en tout début des données d'un bloc.
___Aïe ! tu mets le doigt sur un point sensible ; cet octet m'avait en effet surpris, et - depuis ton message réveillant le sujet - me tarabuste. J'ai une petite idée, mais il faut que je fasse des vérifications. Je compléterai donc ma réponse (et l'analyse de l'exemple que tu donnes à la fin de ton message) dans quelques heures.
___Bon courage et bonnes avancées.

ActivMaker
Messages : 216
Enregistré le : 25 janv. 2011 20:23

Re: Du format des fichiers .s, .w et .t

Messagepar ActivMaker » 25 févr. 2014 23:03

Re bonjour,

Oups erreur , il faut lire

[4c 00 04 00] [0D 00 00 00] [04 54 00 4F 00 54 00 4F 00] [0A 00 00 00]

Au lieu de

[4c 00 04 00] [05 00 00 00] [04 54 00 4F 00 54 00 4F 00] [0A 00 00 00]

En effet la taille du bloc est elle aussi augmenté de la taille du libellé , le 05 se transforme donc en 0D.

Avatar du membre
XylonAkau
Messages : 1936
Enregistré le : 24 juil. 2010 8:49
Localisation : Taputapuatea (ISLV)
Contact :

Re: Du format des fichiers .s, .w et .t

Messagepar XylonAkau » 26 févr. 2014 0:47

___Ia ora na fa'ahou.
___Pour compléter ce qui précède :
1) avec SIMIS Editor, j'ai essayé de convertir en UB le fichier UT 2000.eng (une loco japonaise d'origine) ; le résultat est difficile à analyser : les quatre octets des tokens ne sont pas au format Intel, le token de Type est remplacé par celui de Train ; à l'arrivée, ni MSTS ni SIMIS lui-même ne peuvent relire le fichier. La piste semble donc bouchée.
2)
Mais que vient faire ce 00 ? D'après les exemples on pourrait s'en passer.
___Pour faire un peu d'humour facile, on pourrait répondre que faire le tour de tout ce qui est inutile dans MSTS est un long voyage. Plus sérieusement
Réponse (Dans les sources d'OR toujours ) : A insérer des données supplémentaires entre les 4 octets définissant la taille et le bloc de données. On peut venir insérer un libellé d'une longueur maxi de 256 caractères unicode. Dans ce cas le 00 est remplacé par le nombre de caractère de la chaine . Par exemple pour
"TOTO" on trouvera :
04 54 00 4F 00 54 00 4F 00 . 04 pour 4 Lettres, puis 4*2 pour chacune des lettres.
___Il n'y a pas de raison de ne pas le croire (j'ai d'ailleurs ajouté un lien vers ton message dans l'exposé initial) ; je ne l'avais jamais rencontré, mais peut-être est-ce parce que MSTS n'a pas utilisé cette possibilité. Donc, pour voir ce qui arrive (et cela va dans le sens de ce que tu indiques),
a} prenons un fichier .w basique commençant par

Code : Tout sélectionner

SIMISA@@@@@@@@@@JINX0w0t______

Tr_Worldfile (
   CarSpawner (
b} une fois le fichier compilé, passons de Avant à Après :
Image
c} après décompilation, le début du fichier se présente ainsi, comme dans ton exemple :

Code : Tout sélectionner

SIMISA@@@@@@@@@@JINX0w0t______

Tr_Worldfile z (
   CarSpawner (
d} je n'ai pas vérifié pour le fichier compilé, mais le fichier décompilé ne crée pas d'erreur à l'ouverture dans l'éditeur d'itinéraires ; par contre, si on modifie la parcelle, le z disparaît à l'enregistrement dans le fichier UT ; de plus, dans le nouveau fichier UB, on retrouve 00 seul entre la longueur de la section Tr_Worldfile et le token de CarSpawner.
___On pourrait donc utiliser cet octet pour introduire une sorte de commentaire - mais sans garantie d'effet ni de longévité. Bien sûr, tout ce qui précède vaut pour MSTS ; OR peut (ou pourrait) en faire un usage différent.
___Bonne journée et bonne avancée pour la suite de ton travail.


Retourner vers « Les incontournables »