Oui, ça fait un petit moment que j’ai pas écrit ici … je sais bien ! Je suis très pris par pas mal de choses, encore et toujours … mais aujourd’hui j’ai décidé de rajouter une petite fonctionnalité très cool dans le plus-que-respecté spice2x, qui est très grossièrement un lanceur de jeux d’arcades Konami qui fonctionne sous Windows, et qui est lui-même un fork de spice, dont son support est abandonné depuis plusieurs années maintenant.
Quelle fonctionnalité alors ?
Comme je vous l’ai déjà dit, je joue souvent à IIDX. Et spice2x m’y aide beaucoup, car c’est lui qui s’occupe de mettre en place l’environnement pour “falsifier” l’hardware d’une borne, en fonction du jeu qu’on lui passe. Et entre-autre … contourner quelques verifications de sécurité, autrement le jeu ne tournerait pas du tout.
Ce qui est cool avec cet outil, c’est qu’il est complet, mais genre vraiment. Les autres programmes du genre qui font la même chose (lancer des jeux) mais différemment, ne le font pas avec des options aussi simples à utiliser et completes que spice2x.
Et l’une de ses fonctionnalités phare est le patchage du jeu à travers des edits hexadécimal de la dll principale du jeu, un peu comme à la manière des cheat codes.
La communauté “chassent” les addresses mémoire qui correspondent à des variables, des fonctions, et cetera afin de pouvoir modifier le jeu à notre guise, et certaines modifications sont nécessaires afin de faire fonctionner le jeu sous certaines conditions (par exemple sur IIDX le mode TDJ, qui correspond au modèle Lightning, et qui sert à débloquer le jeu en 120Hz ou plus au lieu de 60Hz).
Pour en revenir à que je dois faire …
Il se trouve que dans la configuration de spice2x, l’onglet patches est vide pour la version de IIDX que j’utilise, RESIDENT.

Ce qui me pousse à aller utiliser le patcher de mon, (merci à lui pour son travail et ce qui a apporté à lui tout seul) ce qui est un peu chiant en mon sens.
Et comme spice2x est livré avec son code source, eh bah je vais m’y coller, tiens !
Récupérer la liste des patches
C’est bien sympa tout ça, mais il me faut la liste des patches ! Et je vais aller la récupérer sur le patcher de mon ! Vu que la liste des patches coté client, ça nous arrange les choses.

Bon bah c’était facile, maintenant lisons ce qu’il y a dedans !

D’accord, donc c’est un script JS qui crée un objet Patcher dans lequel on
met ce qui se semble être un fichier .json. Très bien !
Comment créer une liste de patchs
En trifouillant le code source de spice2x, on remarque qu’il y a un fichier patches.json qui contient les
patchs de tous les jeux que spice2x supporte ! Le hic c’est qu’il est organisé différemment …

A gauche, le patches.json de spice, à droite, le patches.json extrait de la page HTML du patcher de mon.
Y’a une sacré différence … bon bah c’est tipar pour un peu de python !
Un petit script Python pour faire tout ça !
Du coup voici le script que j’ai fais à la va vite qui me permet de rendre le json du patcher de mon utlisable sur spice :
import json
def parse():
f = open("patches1.json", "r")
y = json.load(f)
for line in y:
line['dateCode'] = 2023090500
line['gameCode'] = "LDJ"
line['patches'] = refactor(line['patches'])
line['description'] = ""
line['preset'] = True
line['type'] = "memory"
output_file = json.dumps(y)
with open("output.json", "w") as outfile:
outfile.write(output_file)
def refactor(t):
data = t[0]
# offset
data['dataOffset'] = data['offset']
del data['offset']
data['dataOffset'] = int(data['dataOffset'][2::], 16)
# OFF
for i in range(len(data['off'])):
data['off'][i] = data['off'][i][2::]
data['off'] = ''.join(data['off'])
# ON
for i in range(len(data['on'])):
data['on'][i] = data['on'][i][2::]
data['on'] = ''.join(data['on'])
data['dataDisabled'] = data['off']
del data['off']
data['dataEnabled'] = data['on']
del data['on']
data['dllName'] = "bm2dx.dll"
return t
if __name__ == '__main__':
parse()
Ca a été fait vraiment vite, mais ça fait le café ! On obtient ça au final :

C’est mieux ! Il ne reste plus que mettre cet output.json dans les fichiers sources de spice2x et c’est bon !

Super ! On peux vérifier maintenant sur l’exécutable qui a été produit :

Voilà qui est beaucoup mieux ! :D