Comment toujours gagner à la Dame de Pique?

On continue dans la série "Comment toujours gagner à ..." (prochain tut sur "Comment toujours gagner au millionnaire chez Foucault?" :o) ) avec ce jeu de Kro$oft qui m'énerve au plus haut point: cette #@§!?&~##! de Dame de Pique (sous Win 98). Hein?! Non je n'ai pas dis de gros mots...!

Principe du jeu

Un peu comme la belote ou la bataille, il s'agit surtout de ne se ramasser aucun coeur (valant chacun 1 point) et encore moins la dame de pique (qui vaut 13 points). Il faut également faire attention à ce qu'un joueur ne ramasse pas tous les coeurs ET la dame de pique, sinon il inflige 26 points à tout le monde. Le gagnant étant celui qui a le MOINS de points à l'issu du jeu. Le jeu se termine lorsqu'un des joueurs atteint misérablement 100 points. Une partie commence en jouant le 2 de trèfle.

Une astuce "cachée"

L'astuce bien connue de ceux qui jouent à ce jeu est de modifier dans la BdR la branche HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Applets\Hearts en y ajoutant la clé zb avec la valeur 42 et de taper Ctrl+Shift+Alt+F12. Ceci fait apparaître les cartes des joueurs qui sont cachées. Au passage vous trouvez le raccourcis dans les Accelerators sous un éditeur de ressources (F12,121,VIRTKEY,SHIFT,CONTROL,ALT). Reste plus qu'à décrypter le source en recherchant le passage sous Wdasm avec le code (en hexa!!) du message (donc 121d=79h).

Pourquoi ce jeu m'énerve?

En principe, j'aime bien les jeux de cartes (réussites, belote, poker...). Hihi, ça me fait penser à mon ancien prof d'info à qui j'avais demandé pourquoi les jeux de zindoz n'étaient pas installés sur les bécanes. Il m'a répondu "je ne les ai même pas installé chez moi!" avec un regard sévère genre dieu le père et en pensant "petit imbécile va!". Et bien je profite de ce tut pour lui répondre qu'il n'est qu'un ignare qui ne cherche même pas à regarder plus loin que le bout de son nez (cf ce tut!) et qui en plus de son ignorance se permet de faire la morale aux autres. Allez va, sans rancune le vieux, car sinon je serai devenu comme toi depuis le temps...
Donc, j'aime bien les jeux de cartes, mais pour ce jeux - à priori sympa - le programme TRICHE! Et ça, ça me met hors de moi. Et quand on triche avec un reverser, la vengeance est terrible!!! :o)
Comment le jeu triche? Après avoir fait de nombreuses parties, on se rend compte assez vite qu'on ne joue pas à 4, chacun pour soi; mais qu'on joue à 4, seul contre l'ordi qui fait exprès perdre un des 3 joueurs qu'il administre pour mieux faire gagner un autre face à vous. En gros, de 2 jeux moyens, il en fait un pourri et un excellent contre lequel vous n'avez quasi aucune chance.
Ca m'a tellement foutu en rogne, que j'ai plusieurs fois viré ce jeu de l'ordi. Jusqu'au jour où je me suis dis que je devais lui mettre une rouste!

La rouste

Pour pallier à la triche du jeu, on doit changer une voire deux instructions (deux étant plus confortable) :

Ces deux instructions sont pilotées par un vulgaire jump qu'il suffit de nopper pour en être débarrassé. Je tiens tout de suite à faire un commentaire ici: ceci est NUL à faire au niveau cracking. Ca ne demande aucune connaissance et ça prend 2 secondes à changer (cf les propos de Smeita dans le Memento 1 ou 2 quand on débute en cracking ;o) ). L'intérêt de ce tut est d'illustrer le fait de se servir de techniques de cracking pour imposer sa vision des choses dans un endroit où il n'y a rien à craquer! Un peu à la matrix en quelque sorte... Pour ceux qui n'ont rien compris, le cracking ne sert pas qu'à craquer. Il sert aussi à d'autres choses, cf la vision ringarde de mon CHER vioc de prof d'info...

Voici maintenant les changements à faire. Vu leurs simplicités, je ne fais pas de capture d'écran.

1er changement

Sous Wdasm, on repère "Vous devez choisir une carte de la même couleur" dans les StringDataRefs. En double cliquant dessus, on ne trouve qu'une occurrence dans le listing à la ligne 11672. En remontant le listing, on voit que cette branche de code est gérée par un saut en 0001.4FE9 qui est à l'offset 5609h

0F84AB00    je 5098

que l'on noppe sous l'éditeur hexa. Nous voilà débarrassé de la 1ère contrainte !

2ème changement

Même technique avec la phrase "Les coeurs n'ont pas encore été joué. Choisissez une carte d'une autre couleur". On atterri à la ligne 11827 qui nous renvoie au saut en 0001.5188 qui est à l'offset 57A8h

7515        jne 519F

que l'on noppe également. Voilà pour le 2ème changement.

Jetons un oeil aux changements

On commence par passer 3 cartes. Vu nos petits changements ;o) on peut se permettre de passer les 3 premières sans calculer une certaine tactique !

Il nous refile 3 cartes aussi, que l'on accepte :

Ensuite lors de la partie, on peut enfin goûter au délice de "jouer comme on a envie". Dans l'image ci-dessous, on passe une dame de trèfle alors que pique est demandé et qu'on en a encore !

Il y a cependant encore un point auquel il faut faire attention et qui peut nous faire perdre. Si un joueur parvient à avoir TOUS les coeurs ET la dame de pique, alors il inflige 26 points aux autres et ne prend pas de points (image ci-dessous).

Il faut donc être "vigilant" et passer au moins un coeur à un joueur et au moins un autre coeur à un autre joueur, de telle sorte que l'image ci-dessus ne se produise pas (image ci-dessous).

Et au final, si vous surveillez bien ce point, on arrive assez facilement à ceci :

Le jeu s'arrête dès qu'un joueur a franchi 100 points.

Epilogue

Il y a ainsi et en tout 4 options que l'on peut modifier pour "augmenter nos chances de gagner" :

  1. Vous devez commencez par le deux de trèfle.
  2. Vous devez choisir une carte de la même couleur. Jouez un ...
  3. Les coeurs n'ont pas encore été joué. Choisissez une autre carte.
  4. Vous ne pouvez pas jouer une carte à point au premier tour.

Pour que la jouabilité ne souffre pas trop, je conseille de neutraliser les options 2 et 3. Mais rien n'empêche de modifier le jeu comme on veut. Dans cette optique voici le source + .exe (en VB6) patcheur.zip d'un petit patcheur.

Les changements à faire sont :

Option	Offset	RVA	Code origine	Code patché
 1 -	575Eh	1.513E	7456		9090	
 2 -	5609h	1.4FE9	0F84AB00	90909090
 3 -	57A8h	1.5188	7515		9090
 4 -	5693h	1.5073	7503		9090

Pour l'option 4, il y a deux occurrences dans les stringdatarefs. C'est la deuxième qu'il faut patcher, la première ne marche pas. Une touche "RAZ" (remise à zéro) est aussi présente dans le patcheur, au cas où on veut annuler les modifications faites. De même, vous trouverez également l'astuce Bdr citée en début de ce tut.