[Megadrive] Valis - compression (LZ?)

Des soucis pour hacker votre jeu ? C'est ici qu'il faut exposer votre problème.
Avatar de l’utilisateur
FlashPV
Dieu Suprême du flood
Messages : 1746
Inscription : 15 sept. 2002, 23:44
Localisation : Un coin perdu dans la colline
Contact :
[Megadrive] Valis - compression (LZ?)

Message non lu par FlashPV »

Salut à tous, je suis en train de traduire ce petit jeu sympa qu'est Valis sur Megadrive (sûrement la meilleure version d'ailleurs) et j'ai quasiment fini excepté 2 écrans, ce qui est assez dommage:
L'écran-titre le "PRESS START BUTTON" que je voudrais remplacer par "PRESSER START", les données se trouvent à l'adresse x8A850 et utilisent cette table:

Code : Tout sélectionner

0130= 
0103=P
0104=R
0105=E
0106=S
0107=T
0108=A
0109=B
010A=U
010B=O
010C=N
Et le menu in-game des magies( quand on presse START) qui se trouve vers x40350 et qui utilise cette table-ci:

Code : Tout sélectionner

8581= 
859E=0
859F=1
85A0=2
85A1=3
85A2=4
85A3=5
85A4=6
85A5=7
85A6=8
85A7=9
85A8=:
85A9=A
85AA=B
85AB=C
85AC=D
85AD=E
85AE=F
85AF=G
85B0=H
85B1=I
85B2=J
85B3=K
85B4=L
85B5=M
85B6=N
85B7=O
85B8=P
85B9=Q
85BA=R
85BB=S
85BC=T
85BD=U
85BE=V
85BF=W
85C0=X
85C1=Y
85C2=Z
85C3=.
85C4=!
Ca ressemble à du LZ mais vu que je ne s'y connais rien en programmation, j'en suis pas sûr. Enfin si quelqu'un peut m'aider, ce serait sympa.

NaBoo
Messages : 7
Inscription : 27 janv. 2017, 10:14
Re: [Megadrive] Valis - compression (LZ?)

Message non lu par NaBoo »

Salut FlashPV,

J'ai vite fait regardé et je ne pense pas que ça soit codé. C'est plus une tilemap standard pour l’écran titre.

Voici un dump de la vram pendant l’écran :

Image

Oui je sais j'aurais pu couper la moitié de l'image mdrr :)
Mais on voit bien qu'il n'y a que les lettres nécessaires pour écrire "press start button".

Avatar de l’utilisateur
BahaBulle
Bub'n'Bob Pawa!
Messages : 6491
Inscription : 06 août 2002, 09:34
Localisation : Sur une bulle
Contact :
Re: [Megadrive] Valis - compression (LZ?)

Message non lu par BahaBulle »

C'est la tilemap qui est compressée justement.

NaBoo
Messages : 7
Inscription : 27 janv. 2017, 10:14
Re: [Megadrive] Valis - compression (LZ?)

Message non lu par NaBoo »

Oui bahabulle a raison je viens de check la rom a la main est c'est du lzss avec un flag de 8bits.
L'adresse de début est 0x8A546, les deux premiers octets sont la taille de données a lire, et ensuite c'est du lzss.
Si il y a un 1 sur le flag c'est une copie direct sinon c'est une recherche en arrière.
Je ne suis pas sur mais je pense qu'il y a deux octets d'information lors d'une recherche arrière,
le premier octets sert de déplacement et le suivant du nombre d'octet a copier.
Faudrait continuer a debug pour voir mais la j'ai plus trop le temps.

Avatar de l’utilisateur
FlashPV
Dieu Suprême du flood
Messages : 1746
Inscription : 15 sept. 2002, 23:44
Localisation : Un coin perdu dans la colline
Contact :
Re: [Megadrive] Valis - compression (LZ?)

Message non lu par FlashPV »

Oui les graphs aussi sont compressés mais ça c'est moins gênant, le problême c'est surtour la tilemap.
Il y a beaucoup de variantes du LZSS ou je pourrai trouver un prog de compression/décompression générique?

Avatar de l’utilisateur
BahaBulle
Bub'n'Bob Pawa!
Messages : 6491
Inscription : 06 août 2002, 09:34
Localisation : Sur une bulle
Contact :
Re: [Megadrive] Valis - compression (LZ?)

Message non lu par BahaBulle »

NaBoo a écrit :L'adresse de début est 0x8A546, les deux premiers octets sont la taille de données a lire, et ensuite c'est du lzss.
Le bloc commence en 0x8A540 dont le pointeur est en 0x2BB8A
4 octets : peut-être le nombre d'octets à lire mais il ne s'en sert pas
4 octets : nombre d'octets en sortie
1 octet : header lz
......
NaBoo a écrit :Je ne suis pas sur mais je pense qu'il y a deux octets d'information lors d'une recherche arrière,
le premier octets sert de déplacement et le suivant du nombre d'octet a copier.
Oui, 2 octets. L'adresse est sur 12 bits et le nombre à lire sur 4
Quand on lit les 2 octets en little endian, ça donne :

Code : Tout sélectionner

0000 0000 0000 0000
AAAA NNNN AAAA AAAA
Avec A pour l'adresse dans le buffer et N pour la taille (à laquelle il faut ajouter 3)

Et il se base sur un buffer de 0x1000 octets pré-initialisé avec un début en 0xFEE.

NaBoo
Messages : 7
Inscription : 27 janv. 2017, 10:14
Re: [Megadrive] Valis - compression (LZ?)

Message non lu par NaBoo »

Décidément trop ouf ce bahabulle !!!
Voila y'a plus qu'a coder un décompresseur/recompresseur.
Par contre je vois vraiment pas l’intérêt de mettre un nombre d'octet sur 32bit c'est un peu gros pour une megadrive mais bon ...

Avatar de l’utilisateur
FlashPV
Dieu Suprême du flood
Messages : 1746
Inscription : 15 sept. 2002, 23:44
Localisation : Un coin perdu dans la colline
Contact :
Re: [Megadrive] Valis - compression (LZ?)

Message non lu par FlashPV »

Effectivement c'est vraiment pas de mon ressort, j'ai rien compris. :-D

Avatar de l’utilisateur
Pixel
Codeur à l'irc dormant
Messages : 1946
Inscription : 17 avr. 2002, 17:30
Localisation : San Jose
Contact :
Re: [Megadrive] Valis - compression (LZ?)

Message non lu par Pixel »

Faire un LZSS totalement générique (comme tout le reste) est strictement impossible.

Après, un schéma comme le décrit Baha, ça reste assez standard...

Baha: tu avais pas un bout de code vaguement générique pour ce genre de choses dans un coin ?
pixel: A mischievous magical spirit associated with screen displays. The computer industry has frequently borrowed from mythology. Witness the sprites in computer graphics, the demons in artificial intelligence, and the trolls in the marketing department.

Avatar de l’utilisateur
BahaBulle
Bub'n'Bob Pawa!
Messages : 6491
Inscription : 06 août 2002, 09:34
Localisation : Sur une bulle
Contact :
Re: [Megadrive] Valis - compression (LZ?)

Message non lu par BahaBulle »

Ben, j'ai fait pas mal de décompresseur LZ alors je dois bien en avoir un qui traîne quelque part et qui ressemble à celui-là.

Je pense particulièrement à ToD qui utilise aussi un buffer pré-initialisé .

Avatar de l’utilisateur
BahaBulle
Bub'n'Bob Pawa!
Messages : 6491
Inscription : 06 août 2002, 09:34
Localisation : Sur une bulle
Contact :
Re: [Megadrive] Valis - compression (LZ?)

Message non lu par BahaBulle »

Essaye ça (en espérant que ça fonctionne du premier coup :-P) :
Valis-Tools.zip
Décompresseur/compresseur pour Valis
(34.65 Kio) Téléchargé 174 fois
Exécution :

Code : Tout sélectionner

BahaTools.exe <fichier>
<fichier> est un fichier texte contenant les instructions de décompression ou compression. Tu as 2 fichiers dans l'archive qui font le boulot. Il faut juste changer les chemins d'accès si besoin parce que là, tout se trouve dans le même répertoire (outil, rom...).

Si la compression prend plus de place que l'original et que tu as de la place dans la rom, tu dois pouvoir déplacer les données en modifiant juste l'adresse du paramètre "dest" lors de l'insertion (BIN...). Le pointeur devrait être modifié automatiquement mais je t'avoue que je n'ai pas testé :-P

Si tu comprends la syntaxe et que tu as d'autres données à traiter, tu peux ajouter des lignes, elles seront prises en compte.


Je remet le contenu des 2 fichiers ici :

Décompression :

Code : Tout sélectionner

Import-Module Fr.BahaBulle.Valis.dll

#ROM_IN=Valis (U) [!].bin

-- Chargement de la rom en mémoire
BIN source(file=ROM_IN) dest(file=1)

-- Décompression de la tilemap du menu
DECOMP-VALIS source(file=1;adress=0x8A540) dest(file=Menu-Tilemap.bin))

-- Décompression de la tilemap des magies
DECOMP-VALIS source(file=1;adress=0x40326) dest(file=Magies-Tilemap.bin))
Compression :

Code : Tout sélectionner

Import-Module Fr.BahaBulle.Valis.dll

#ROM_IN=Valis (U) [!].bin
#ROM_OUT=Valis_FR.bin

-- Chargement de la rom en mémoire
BIN source(file=ROM_IN) dest(file=1)

-- Menu général
---------------
-- Compression du fichier
COMP-VALIS source(file=Menu-Tilemap.bin) dest(file=2)

-- Insertion du fichier dans la rom
BIN source(file=2) dest(file=1;adress=0x8A540;size=1640) pointer(adress=0x2BB8A;size=4;endian=big)

-- Menu des magies
------------------
COMP-VALIS source(file=Magies-Tilemap.bin) dest(file=3)
BIN source(file=3) dest(file=1;adress=0x40326;size=1106) pointer(adress=0x822;size=4;endian=big)

-- On sauvegarde la rom modifiée dans un fichier
BIN source(file=1) dest(file=ROM_OUT)
J'espère ne rien avoir oublié (c'est souvent le cas :-P)

Avatar de l’utilisateur
FlashPV
Dieu Suprême du flood
Messages : 1746
Inscription : 15 sept. 2002, 23:44
Localisation : Un coin perdu dans la colline
Contact :
Re: [Megadrive] Valis - compression (LZ?)

Message non lu par FlashPV »

T'es vraiment un killer, merci. Je regarde ça ce week-end, aujourd'hui j'aurai pas trop le temps. Sinon, juste un petite question: tu utilises quoi comme debugger pour la Megadrive?

Avatar de l’utilisateur
BahaBulle
Bub'n'Bob Pawa!
Messages : 6491
Inscription : 06 août 2002, 09:34
Localisation : Sur une bulle
Contact :
Re: [Megadrive] Valis - compression (LZ?)

Message non lu par BahaBulle »

Regen en general

Avatar de l’utilisateur
FlashPV
Dieu Suprême du flood
Messages : 1746
Inscription : 15 sept. 2002, 23:44
Localisation : Un coin perdu dans la colline
Contact :
Re: [Megadrive] Valis - compression (LZ?)

Message non lu par FlashPV »

Bon, je sais pas si j'ai fait un truc de travers ou que j'en ai oublié un mais ça n'a pas marché.
Donc je tape BahaTools.exe Valis-E.txt
Et là, ça me marque:
Start Control parameter file
Import module Fr.Bahabulle.Valis.dll : Les informations relatives au chemin d'accès absolu sont requises.
Unknown method 'DECOMP VALIS' (line 9)
Unknown method 'DECOMP VALIS' (line 12)
Stop Control parameter file

Ou je suis un boulet (c'est possible); ou alors y a un truc qui tourne pas rond...

Avatar de l’utilisateur
BahaBulle
Bub'n'Bob Pawa!
Messages : 6491
Inscription : 06 août 2002, 09:34
Localisation : Sur une bulle
Contact :
Re: [Megadrive] Valis - compression (LZ?)

Message non lu par BahaBulle »

Groumpf

Je l'avais corrigé ce truc. Je regarde demain

Avatar de l’utilisateur
BahaBulle
Bub'n'Bob Pawa!
Messages : 6491
Inscription : 06 août 2002, 09:34
Localisation : Sur une bulle
Contact :
Re: [Megadrive] Valis - compression (LZ?)

Message non lu par BahaBulle »

Ah oui. Tu dois pouvoir contourner le problème.

Dans le fichier texte, sur la 1ère ligne Import-Module, écris le chemin complet de la dll

Avatar de l’utilisateur
FlashPV
Dieu Suprême du flood
Messages : 1746
Inscription : 15 sept. 2002, 23:44
Localisation : Un coin perdu dans la colline
Contact :
Re: [Megadrive] Valis - compression (LZ?)

Message non lu par FlashPV »

Ok, maintenant, ça me fait ça:

Start Control parameter file
Import module Fr.BahaBulle.Valis.Fr.dll : OK
Stop Control parameter file

Start Processing
bin <line 6>
decomp-valis <line 9>
Stop Processing

Et rien...

Avatar de l’utilisateur
BahaBulle
Bub'n'Bob Pawa!
Messages : 6491
Inscription : 06 août 2002, 09:34
Localisation : Sur une bulle
Contact :
Re: [Megadrive] Valis - compression (LZ?)

Message non lu par BahaBulle »

T'as pas un fichier menu-tilemap.bin qui s'est créé ?

Normalement dans le même répertoire. Sinon faut regarder dans le fichier txt.

Au pire faire pareil, mettre le chemin complet.

Avatar de l’utilisateur
FlashPV
Dieu Suprême du flood
Messages : 1746
Inscription : 15 sept. 2002, 23:44
Localisation : Un coin perdu dans la colline
Contact :
Re: [Megadrive] Valis - compression (LZ?)

Message non lu par FlashPV »

Non, toujours pas, j'ai même crée un petit fichier menu-tilemap.bin pour voir s'il le modifie mais non. :-?

Avatar de l’utilisateur
BahaBulle
Bub'n'Bob Pawa!
Messages : 6491
Inscription : 06 août 2002, 09:34
Localisation : Sur une bulle
Contact :
Re: [Megadrive] Valis - compression (LZ?)

Message non lu par BahaBulle »

Essaye avec ces nouveaux fichiers.
Valis-Tools.zip
(34.67 Kio) Téléchargé 262 fois

Avatar de l’utilisateur
FlashPV
Dieu Suprême du flood
Messages : 1746
Inscription : 15 sept. 2002, 23:44
Localisation : Un coin perdu dans la colline
Contact :
Re: [Megadrive] Valis - compression (LZ?)

Message non lu par FlashPV »

Non, ça ne change rien, hormis que je n'ai plus besoin de mettre le chemin de la DLL.

Avatar de l’utilisateur
Loki
Dieu Suprême du flood
Messages : 1624
Inscription : 03 juil. 2006, 10:06
Localisation : Mer des Sarcasmes
Re: [Megadrive] Valis - compression (LZ?)

Message non lu par Loki »

J'ai pas essayé mais c'est probablement les pointeurs des fonctions importées qui sont incorrects, Baha tu te fais chier avec des DLL pour pas grand chose, fais lui un stand alone.

Avatar de l’utilisateur
BahaBulle
Bub'n'Bob Pawa!
Messages : 6491
Inscription : 06 août 2002, 09:34
Localisation : Sur une bulle
Contact :
Re: [Megadrive] Valis - compression (LZ?)

Message non lu par BahaBulle »

Je te prout :-P

Ca fonctionne chez moi, il n'y a pas de raison que ca ne fonctionne pas ailleurs.
A la vue des dernières traces qu'il a mis, la dll est bien chargée et la fonction reconnue. Donc le problème ne vient sûrement pas de là.
Après il a du mal à trouver son chemin quand il n'a que le nom du fichier.

Je regarderais sûrement demain en début d'aprem.
Flash si tu peux te connecter à Skype à ce moment-là, ca facilitera les choses.

Avatar de l’utilisateur
Loki
Dieu Suprême du flood
Messages : 1624
Inscription : 03 juil. 2006, 10:06
Localisation : Mer des Sarcasmes
Re: [Megadrive] Valis - compression (LZ?)

Message non lu par Loki »

Hé, il se calme le p'tit à la pancarte ou je la lui fais bouffer.^^

C'était pour te faire gagner du temps, hein !

ça fonctionne chez toi parce que la DLL est déjà chargée via ton IDE, chez lui non. Et Windows peut indiquer qu'une DLL est chargée ça ne veut pas dire que les fonctions sont disponibles.

Avatar de l’utilisateur
BahaBulle
Bub'n'Bob Pawa!
Messages : 6491
Inscription : 06 août 2002, 09:34
Localisation : Sur une bulle
Contact :
Re: [Megadrive] Valis - compression (LZ?)

Message non lu par BahaBulle »

Si je dis que ça fonctionne chez moi c'est que j'ai testé sans IDE.


Répondre