Étant un joueur occasionnel du jeu de gestion Capitalism Lab, je me suis mis en tête de modifier un des fichiers binaires pour avoir de véritable nom pour les entreprises ainsi que leurs dirigeants. Je me suis donc codé deux petits scripts pour transformer les données binaires dans un fichier csv, puis un second pour faire l'inverse.
Voici le script name patcher read.au3 (Bin -> csv):
► Afficher le texte
Code : Tout sélectionner
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=ico\read.ico
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_UseX64=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#Include <Array.au3>
#include<File.au3>
;Ouverture du fichier et mise dans un tableau
$fichier_a_ouvrir = "1STD.SET"
$fichier = FileOpen($fichier_a_ouvrir, 16)
$tableau_fichier = StringRegExp(FileRead($fichier), '[[:xdigit:]]{2}', 3)
FileClose($fichier)
;Declaration des variables pour les noms des entreprises
$debut_nom = 17712
$longueur_fullname = 39
$longueur_shortname = 15
$nombre_entreprise = 35
$longueur_csv = $nombre_entreprise + 1
Dim $csv[$longueur_csv] = ["FULL NAME (max 39 characters);SHORT NAME (max 15 characters);COLOR ID (1 character, no ideas what is it!)"]
;Assignation de $i au début des noms d'entreprises
$i = $debut_nom
;Récupération du noms des entreprises
For $y = 1 to $nombre_entreprise
$ligne = ""
;Récupération du FULLNAME
For $i = $i to $i + $longueur_fullname
$ligne &= Chr("0x" & $tableau_fichier[$i])
Next
$ligne = StringStripWS($ligne, 2)
$ligne &= ";"
;Récupération du SHORTNAME
For $i = $i to $i + $longueur_shortname
$ligne &= Chr("0x" & $tableau_fichier[$i])
Next
$ligne = StringStripWS($ligne, 2)
$ligne &= ";"
;Récupération du Color_ID
$ligne &= Chr("0x" & $tableau_fichier[$i])
$i = $i + 11
$ligne = StringStripWS($ligne, 2)
;Assignation du mot dans un tableau pour export en csv
$csv[$y] = $ligne
Next
;Exportation du tableau dans un fichier csv
_FileWriteFromArray("corporation.csv", $csv)
;Supression de la dernière ligne vide du csv
$csv = FileRead("corporation.csv")
$fichier = FileOpen("corporation.csv", 2)
FileWrite($fichier, StringTrimRight($csv, 2))
FileClose($fichier)
;Declaration des variables pour les noms des personnes
$debut_nom = 54387
$longueur_name = 29
$longueur_sex = 7
$longueur_code = 2
$nombre_personne = 64
$longueur_csv = $nombre_personne + 1
Dim $csv[$longueur_csv] = ["NAME (max 30 characters);SEX = MWestern for man FWestern for woman;CODE = F01 to F26 for female picture and M01 to M38 for male picture"]
;Assignation de $i au début des noms de personne
$i = $debut_nom
;Récupération du noms des personnes
For $y = 1 to $nombre_personne
$ligne = ""
;Récupération du NAME
For $i = $i to $i + $longueur_name
$ligne &= Chr("0x" & $tableau_fichier[$i])
Next
$ligne = StringStripWS($ligne, 2)
$ligne &= ";"
;Récupération du SEX
For $i = $i to $i + $longueur_sex
$ligne &= Chr("0x" & $tableau_fichier[$i])
Next
$i = $i + 3
$ligne &= ";"
;Récupération du CODE
For $i = $i to $i + $longueur_code
$ligne &= Chr("0x" & $tableau_fichier[$i])
Next
$i = $i + 73
;Assignation du mot dans un tableau pour export en csv
$csv[$y] = $ligne
Next
;Exportation du tableau dans un fichier csv
_FileWriteFromArray("person.csv", $csv)
;Supression de la dernière ligne vide du csv
$csv = FileRead("person.csv")
$fichier = FileOpen("person.csv", 2)
FileWrite($fichier, StringTrimRight($csv, 2))
FileClose($fichier)
;Message de réussite
MsgBox(0, "Export Done", "Export of corporation.csv and person.csv successfull.")
► Afficher le texte
Code : Tout sélectionner
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=ico\write.ico
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_UseX64=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#Include <Array.au3>
#include<File.au3>
#include<functions\csv2array.au3>
;Définition des variables pour corporation.csv
$debut_nom = 17712
$longueur_fullname = 40
$longueur_shortname = 16
$nombre_entreprise = 35
;Ouverture du fichier et mise dans un tableau
$fichier_a_ouvrir = "1STD.SET"
$fichier = FileOpen($fichier_a_ouvrir, 16)
$tableau_fichier = StringRegExp(FileRead($fichier), '[[:xdigit:]]{2}', 3)
FileClose($fichier)
;Ouverture et chargement du fichier corporation.csv dans un tableau
$tableau_corporationcsv = _CSV2Array("corporation.csv",";")
;Mise en place du pointeur
$pointeur = $debut_nom
;Boucle sur le nombre d'entreprises
For $x = 1 to $nombre_entreprise
$corporation_name = $tableau_corporationcsv[$x][0]
$corporation_shortname = $tableau_corporationcsv[$x][1]
$corporation_color = $tableau_corporationcsv[$x][2]
;Découpage des noms en tableau de caractères
$t_corporation_name = StringSplit($corporation_name, "")
$t_corporation_shortname = StringSplit($corporation_shortname, "")
;Modification du FULL NAME
For $i = 1 to $t_corporation_name[0]
$tableau_fichier[$pointeur] = StringTrimLeft(Binary($t_corporation_name[$i]), 2)
$pointeur = $pointeur + 1
Next
For $i = 1 to $longueur_fullname - $t_corporation_name[0]
$tableau_fichier[$pointeur] = StringTrimLeft(Binary(" "), 2)
$pointeur = $pointeur + 1
Next
;Modification du SHORT NAME
For $i = 1 to $t_corporation_shortname[0]
$tableau_fichier[$pointeur] = StringTrimLeft(Binary($t_corporation_shortname[$i]), 2)
$pointeur = $pointeur + 1
Next
For $i = 1 to $longueur_shortname - $t_corporation_shortname[0]
$tableau_fichier[$pointeur] = StringTrimLeft(Binary(" "), 2)
$pointeur = $pointeur + 1
Next
;Modification du COLOR ID
$tableau_fichier[$pointeur] = StringTrimLeft(Binary($corporation_color), 2)
$pointeur = $pointeur + 11
Next
;Définition des variables pour person.csv
$debut_nom = 54387
$longueur_name = 30
$longueur_sex = 8
$longueur_code = 3
$nombre_personne = 64
;Ouverture et chargement du fichier corporation.csv dans un tableau
$tableau_personcsv = _CSV2Array("person.csv",";")
;Mise en place du pointeur
$pointeur = $debut_nom
;Boucle sur le nombre de personnes
For $x = 1 to $nombre_personne
$person_name = $tableau_personcsv[$x][0]
$person_sex = $tableau_personcsv[$x][1]
$person_code = $tableau_personcsv[$x][2]
;Découpage en tableau de caractères
$t_person_name = StringSplit($person_name, "")
$t_person_sex = StringSplit($person_sex, "")
$t_person_code = StringSplit($person_code, "")
;Modification du NAME
For $i = 1 to $t_person_name[0]
$tableau_fichier[$pointeur] = StringTrimLeft(Binary($t_person_name[$i]), 2)
$pointeur = $pointeur + 1
Next
For $i = 1 to $longueur_name - $t_person_name[0]
$tableau_fichier[$pointeur] = StringTrimLeft(Binary(" "), 2)
$pointeur = $pointeur + 1
Next
;Modification du SEX
For $i = 1 to $t_person_sex[0]
$tableau_fichier[$pointeur] = StringTrimLeft(Binary($t_person_sex[$i]), 2)
$pointeur = $pointeur + 1
Next
$pointeur = $pointeur + 3
;Modification du CODE
For $i = 1 to $t_person_code[0]
$tableau_fichier[$pointeur] = StringTrimLeft(Binary($t_person_code[$i]), 2)
$pointeur = $pointeur + 1
Next
$pointeur = $pointeur + 73
Next
;Ecriture du fichier 1STD.SET
$fichier_a_ecrire = ""
For $i = 0 to UBound($tableau_fichier)-1
$fichier_a_ecrire &= $tableau_fichier[$i]
Next
$fichier = FileOpen($fichier_a_ouvrir, 18)
FileWrite($fichier, "0x" & $fichier_a_ecrire)
;Message de sortie
MsgBox(0, "Write Done", "File 1STD.SET has been patched with yours csv files.")
Bien sûr vos remarques / conseils / critiques sont les bienvenues. Pour les plus motivés je me suis même créé un github pour le stockage du code source -> https://github.com/clark17/Name_patcher_capitalismlab/