[SNES] Dragon Ball Z : Super Saiyajin Densetsu
- BahaBulle
- Bub'n'Bob Pawa!
- Messages : 6498
- Inscription : 06 août 2002, 09:34
- Localisation : Sur une bulle
- Contact :
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
Ben commence déjà par faire ce que tu peux pour appeler la fonction 
Pour la décompression, faut ajouter 7 lignes (dont 3 de propreté).
Pour la compression, faut ajouter 5 lignes (dont 2 de propreté) si on exporte dans un fichier, sinon c'est 11 lignes (dont 3 de propreté) pour réinsérer directement dans la rom.

Pour la décompression, faut ajouter 7 lignes (dont 3 de propreté).
Pour la compression, faut ajouter 5 lignes (dont 2 de propreté) si on exporte dans un fichier, sinon c'est 11 lignes (dont 3 de propreté) pour réinsérer directement dans la rom.
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
Ben, ça m'a l'air tellement con que c'est pas la peine de l'écrire, si ?
Repris sur d'autres modèles. Je ne les vois pas dans ta syntaxe, mais j'imagine qu'il faudrait aussi :
Edit : Ben c'est pas dans mes cordes, alors, moi je ne me suis fié qu'à ça (cf ce que j'ai mis au dessus) :
Code : Tout sélectionner
rom_in = "nom-de-la-rom-originale.smc"
adress_in = "adresse-a-decompresser"
file_in = "nom-du-fichier-a-compresser"
Code : Tout sélectionner
rom_out = "nom-de-la-rom-modifiee.smc"
adress_out = "adresse-ou-reinserer-le-fichier-compresse"
file_out = "nom-du-fichier-decompresse.smc"
BahaBulle a écrit :(un Input et une adresse pour le décompresseur et le nom du fichier à compresser pour le compresseur)
Dernière modification par Hiei- le 29 mai 2012, 14:36, modifié 1 fois.
- BahaBulle
- Bub'n'Bob Pawa!
- Messages : 6498
- Inscription : 06 août 2002, 09:34
- Localisation : Sur une bulle
- Contact :
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
Ca c'est juste définir des variables, ce qui n'est pas obligatoire 
Avec les scripts que j'ai mis sur le forum ou que tu dois avoir, ce devrait pas être compliqué d'écrire le code.
Pour la décompression, voilà le modèle :
Création d'un Input de la rom
Appel de la fonction de décompression
Création d'un Output
Copie du résultat de la fonction de décompression dans l'Output

Avec les scripts que j'ai mis sur le forum ou que tu dois avoir, ce devrait pas être compliqué d'écrire le code.
Pour la décompression, voilà le modèle :
Création d'un Input de la rom
Appel de la fonction de décompression
Création d'un Output
Copie du résultat de la fonction de décompression dans l'Output
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
J'ai que ça à disposition perso :
Decompression :
Compression :
Decompression :
Code : Tout sélectionner
local rom_in = Input(ROM_IN)
print("Decompression du fichier " .. FILE_OUT)
local buf_in = Buffer(true)
Code : Tout sélectionner
print("Compression du fichier " .. FILE_IN)
local buf_data = Buffer()
local file_in = Input(FILE_IN)
local filesize = file_in:getsize()
local rom_in = Input(ROM_IN)
local buf_out = Buffer(true)
buf_out:copyfrom(rom_in)
rom_in:destroy()
buf_out:wseek(adress_out)
buf_out:copyfrom(buf_data)
local file_out = Output(rom_out)
file_out:copyfrom(buf_out)
file_out:destroy()
buf_out:destroy()
buf_data:destroy()
file_in:destroy()
print("Traitement termine")
- BahaBulle
- Bub'n'Bob Pawa!
- Messages : 6498
- Inscription : 06 août 2002, 09:34
- Localisation : Sur une bulle
- Contact :
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
Ben avec tout ça, t'as quasi tout ce qu'il faut. Suffit de faire un peu le tri.
Il n'y a pas besoin de créer de Buffer(), faut juste récupérer ceux retournés par les fonctions.
Il n'y a pas besoin de créer de Buffer(), faut juste récupérer ceux retournés par les fonctions.
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
Quasi ou tout ?
Dans tous les cas, je verrais plus tard car ca ne me semble pas super clair (à part faire du copier-coller au pif) et qu'on a déjà une fonte fr pour le moment de toute façon.
Dans tous les cas, je verrais plus tard car ca ne me semble pas super clair (à part faire du copier-coller au pif) et qu'on a déjà une fonte fr pour le moment de toute façon.
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
C'est trop compliqué pour moi pour le moment, j'y comprend que dalle ^^
Même l'asm me parait plus simple pour le coup xD
Même l'asm me parait plus simple pour le coup xD
Traduction de BS Zelda - Ancient Stone Tablets (Projet en cour)

Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
En attendant, je suis en train de voir comment déplacer les noms des ennemis.
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
Bon, j'ai fait ça pour la décompression, je ne suis pas sûr que ce soit 100% ok mais je doute pouvoir faire mieux sans vraiment de connaissance en programmation :
Code : Tout sélectionner
ROM_IN = "fichier-in.smc"
ROM_OUT = "fichier-out.smc"
NAME_FILE = "fichier.bin"
ADR_IN = 0x0
ADR_OUT = 0x0
function DBZDecompData(rom_in, adr_in)
local rom_in = Input(ROM_IN)
print("Decompression du fichier " .. NAME_FILE)
rom_in:seek(ADR_IN)
local size_out = rom_in:readU16()
print(string.format(' 0x%X octets a decompresser', size_out))
local buf_out = Buffer(true)
local pos_out = 0
while size_out > 0 do
local header = rom_in:readU8()
for i = 1, 8 do
if bit.band(header, 0x01) == 0 then
local bytes = rom_in:readU16()
local nb = bit.band(bytes, 0x0F) + 3
local back = bit.rshift(bytes, 4)
local pos = pos_out - back
if pos < 0 then
local val = bit.band(bit.bnot(pos), 0xFF)
while val >= 0 and nb > 0 do
buf_out:writeU8(0)
size_out = size_out - 1
pos_out = pos_out + 1
val = val - 1
nb = nb - 1
end
for j = 1, nb do
buf_out:writeU8(buf_out[j-1])
size_out = size_out - 1
pos_out = pos_out + 1
end
else
for j = 0, nb-1 do
buf_out:writeU8(buf_out[pos+j])
size_out = size_out - 1
pos_out = pos_out + 1
end
end
else
buf_out:writeU8(rom_in:readU8())
size_out = size_out - 1
pos_out = pos_out + 1
end
header = bit.rshift(header, 1)
if size_out <= 0 then break end
end
buf_in:seek(0)
local file_out = Output(NAME_FILE)
file_out:copyfrom(buf_in)
file_out:destroy()
buf_in:destroy()
file_in:destroy()
print("Traitement termine")
end
- BahaBulle
- Bub'n'Bob Pawa!
- Messages : 6498
- Inscription : 06 août 2002, 09:34
- Localisation : Sur une bulle
- Contact :
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
Je regarderais en détail demain mais sinon, tu sembles avoir mis les bonnes lignes mais pas vraiment au bon endroit 
Tu n'as pas à ajouter/modifier/supprimer le code qui se trouve dans les fonctions (entre function DBZ... et le end qui à la même indentation).
Il faut le mettre après les fonctions.

Tu n'as pas à ajouter/modifier/supprimer le code qui se trouve dans les fonctions (entre function DBZ... et le end qui à la même indentation).
Il faut le mettre après les fonctions.
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
Je pense avoir trouvé le pointeur 24-bits des noms des personnages/ennemis, il est visiblement en deux morceaux.
@Kogami : Par contre, tu t'es planté dans l'adresse, il y a du texte au dessus de l'adresse que tu m'as donné. La bonne adresse de début est 0x12BBE (nom des personnages alliés et d'autres messages).
Je vais essayer de déplacer ça pour ne plus être autant limité car sinon ça va être la misère pour traduire ce morceau-là.
@Kogami : Par contre, tu t'es planté dans l'adresse, il y a du texte au dessus de l'adresse que tu m'as donné. La bonne adresse de début est 0x12BBE (nom des personnages alliés et d'autres messages).
Je vais essayer de déplacer ça pour ne plus être autant limité car sinon ça va être la misère pour traduire ce morceau-là.
Dernière modification par Hiei- le 30 mai 2012, 17:57, modifié 1 fois.
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
Bon, ça foire, et je ne comprends pas pourquoi.
Table de pointeurs : 0x12B66
Début-Fin des textes : 0x12BBE-0x12E9A
Pointeur de la table de pointeurs : 0xBC18 (logiquement)
Valeur de la bank : 0xBC10 (logiquement).
Le pointeur de la table de pointeurs est 0x66AB. Si je modifie en 0x68AB, les textes changent (et ça affiche bien les textes avec un pointeur de décalage) donc ça semble bien être le bon (ou alors, c'est la valeur de la bank qui n'est pas bonne, mais lorsque je change le 0x02, ça bousille bien le texte donc ça doit bien être ça, même si ça peut être une coincidence).
Même en déplaçant à 0x12AB66 (donc pour ne pas avoir à modifier les pointeurs), ça foire donc à moins de ne pas avoir trouvé la bonne valeur de la bank, je ne vois pas (pour le pointeur de la table des pointeurs, je pense que ça ne peut être que ça, sinon ça ne décalerait pas les pointeurs lorsque je le modifie et il n'y a qu'une fois cette valeur dans la rom de toute façon).
Par contre, il y a un peu de place en rab utilisable en fin de bank (j'ai vérifié) donc ça suffira peut-être, faut voir (en rajoutant la DTE graphique et un éventuel agrandissement de cadres si on peut décompresser ce qui est compressé [car les tilemaps des cadres semblent compressé] et ça devrait pouvoir le faire).
Table de pointeurs : 0x12B66
Début-Fin des textes : 0x12BBE-0x12E9A
Pointeur de la table de pointeurs : 0xBC18 (logiquement)
Valeur de la bank : 0xBC10 (logiquement).
Le pointeur de la table de pointeurs est 0x66AB. Si je modifie en 0x68AB, les textes changent (et ça affiche bien les textes avec un pointeur de décalage) donc ça semble bien être le bon (ou alors, c'est la valeur de la bank qui n'est pas bonne, mais lorsque je change le 0x02, ça bousille bien le texte donc ça doit bien être ça, même si ça peut être une coincidence).
Même en déplaçant à 0x12AB66 (donc pour ne pas avoir à modifier les pointeurs), ça foire donc à moins de ne pas avoir trouvé la bonne valeur de la bank, je ne vois pas (pour le pointeur de la table des pointeurs, je pense que ça ne peut être que ça, sinon ça ne décalerait pas les pointeurs lorsque je le modifie et il n'y a qu'une fois cette valeur dans la rom de toute façon).
Par contre, il y a un peu de place en rab utilisable en fin de bank (j'ai vérifié) donc ça suffira peut-être, faut voir (en rajoutant la DTE graphique et un éventuel agrandissement de cadres si on peut décompresser ce qui est compressé [car les tilemaps des cadres semblent compressé] et ça devrait pouvoir le faire).
Dernière modification par Hiei- le 30 mai 2012, 17:58, modifié 2 fois.
- BahaBulle
- Bub'n'Bob Pawa!
- Messages : 6498
- Inscription : 06 août 2002, 09:34
- Localisation : Sur une bulle
- Contact :
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
Tu n'étais pas loin. C'est le 0x02 juste avant, en 0xBC0DHiei- a écrit :Valeur de la bank : 0xBC10 (logiquement).

---------------------------------------------------
Ils ne sont pas compressés mais créés dynamiquement.Hiei- a écrit :...car le tilemap des cadres semblent compressé...
Par exemple, pour le cadre du menu, les infos sont en 0x160F2 :
1 octet : largeur du cadre
1 octet : hauteur du cadre
2 octet : emplacement du cadre à l'écran
Après faut également modifier les coordonnées des textes en 0x15AB6 (pointeur 16 bits en 0x15A16)
1 octet (+1) : nombre de caractère par mots
1 octet (+1) : nombre de mots
2 octets : emplacement du premier mot à l'écran
n octets : textes du menu
Et enfin la position du curseur qui est en 0x16233.
Et hop :


---------------------------------------------------
Concernant le code, comme je le disais, tu n'as pas à toucher à mes fonctions.
Ton script doit commencer par le chargement des librairies.
Et là, tu n'as besoin que de luahandle donc :
Code : Tout sélectionner
loadmodule "luahandle"
Code : Tout sélectionner
ROM_IN = "fichier-in.smc"
ROM_OUT = "fichier-out.smc"
NAME_FILE = "fichier.bin"
ADR_IN = 0x0
Code : Tout sélectionner
function DBZDecompData(rom_in, adress)
...
end
function DBZCompData(name)
...
end
Création d'un Input de la rom
Appel de la fonction de décompression
Création d'un Output
Copie du résultat de la fonction de décompression dans l'Output
Il reste donc à "traduire" ces lignes en lua. Tu en as déjà 3 :
Code : Tout sélectionner
local rom_in = Input(ROM_IN)
??
local file_out = Output(NAME_FILE)
file_out:copyfrom(buf_in)
Et la fonction retourne un buffer qu'il faut mettre dans une variable (genre buf_in)
Et pour faire propre, tu termines par libérer la mémoire :
Code : Tout sélectionner
rom_in:destroy()
file_out:destroy()
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
Mouarf, ok, ça fonctionne maintenant, merciBahaBulle a écrit :Tu n'étais pas loin. C'est le 0x02 juste avant, en 0xBC0DHiei- a écrit :Valeur de la bank : 0xBC10 (logiquement).

Je verrais le reste après.
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
J'ai testé pour le menu, ça fonctionne bien. Par contre, il y a une façon spéciale pour trouver le bon endroit dans la rom ? Ou alors, il faut regarder la taille d'un menu à la main en pixels et diviser par 8, puis tenter de modifier chaque occurence dans la rom jusqu'à tomber sur le bon ? (visiblement, il y a quelques chaines ensuite qui semblent avoir le même modèle mais je n'ai pas encore trouvé sur quel cadre ça tappait dans le jeu).
Ou bien un coup de trace, mais si oui, je cherche quoi exactement :o ?
Ou bien un coup de trace, mais si oui, je cherche quoi exactement :o ?
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
Je retente une nouvelle version pour le décompresseur :
Code : Tout sélectionner
loadmodule "luahandle"
------------------------------------------------------------------------------------------------------------------------
ROM_IN = "fichier-in.smc"
ROM_OUT = "fichier-out.smc"
NAME_FILE = "font_decompresse.bin"
ADRESS = 0x40000
------------------------------------------------------------------------------------------------------------------------
function DBZDecompData(rom_in, adress)
rom_in:seek(adress)
local size_out = rom_in:readU16()
print(string.format(' 0x%X octets a decompresser', size_out))
local buf_out = Buffer(true)
local pos_out = 0
while size_out > 0 do
local header = rom_in:readU8()
for i = 1, 8 do
if bit.band(header, 0x01) == 0 then
local bytes = rom_in:readU16()
local nb = bit.band(bytes, 0x0F) + 3
local back = bit.rshift(bytes, 4)
local pos = pos_out - back
if pos < 0 then
local val = bit.band(bit.bnot(pos), 0xFF)
while val >= 0 and nb > 0 do
buf_out:writeU8(0)
size_out = size_out - 1
pos_out = pos_out + 1
val = val - 1
nb = nb - 1
end
for j = 1, nb do
buf_out:writeU8(buf_out[j-1])
size_out = size_out - 1
pos_out = pos_out + 1
end
else
for j = 0, nb-1 do
buf_out:writeU8(buf_out[pos+j])
size_out = size_out - 1
pos_out = pos_out + 1
end
end
else
buf_out:writeU8(rom_in:readU8())
size_out = size_out - 1
pos_out = pos_out + 1
end
header = bit.rshift(header, 1)
if size_out <= 0 then break end
end
end
return buf_out
end
------------------------------------------------------------------------------------------------------------------------
local rom_in = Input(ROM_IN)
DBZDecompData(rom_in, adress)
local file_out = Output(NAME_FILE)
file_out:copyfrom(buf_out)
file_in:destroy()
file_out:destroy()
buf_out:destroy()
print("Fichier decompresse et extrait")
- BahaBulle
- Bub'n'Bob Pawa!
- Messages : 6498
- Inscription : 06 août 2002, 09:34
- Localisation : Sur une bulle
- Contact :
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
Ah, on s'en approche 
Là, comme ça, je vois 2 erreurs.
Un problème de casse et le retour de la fonction DBZDecompData non récupéré.
Plus de détail donné sur IRC

Là, comme ça, je vois 2 erreurs.
Un problème de casse et le retour de la fonction DBZDecompData non récupéré.
Plus de détail donné sur IRC

Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
Voilà la font décompressée : http://www.hiei-tf.fr/font_decompresse.bin
Je vais essayer de compléter le code de la compression maintenant (et dire que j'avais dit que je ne ferais rien sur ce jeu à part la traduction
)
Je vais essayer de compléter le code de la compression maintenant (et dire que j'avais dit que je ne ferais rien sur ce jeu à part la traduction

Dernière modification par Hiei- le 31 mai 2012, 13:19, modifié 1 fois.
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
Ayé, j'ai réussi à faire fonctionner la compression tout seul, comme un grand 
Le compresseur met 17 secondes pour compresser la font, ce qui n' est pas encore énorme vu qu'on a qu'un seul fichier à compresser
Edit : Font de Bessab décompressée : http://www.hiei-tf.fr/font_decompresse_bessab.bin
La font des US (en rajoutant les accents est pas mal) mais ils ont visiblement changé l'adresse dans leur rom, même si on peut la récupérer manuellement en la recopiant à partir de captures d'écran.

Le compresseur met 17 secondes pour compresser la font, ce qui n' est pas encore énorme vu qu'on a qu'un seul fichier à compresser

Edit : Font de Bessab décompressée : http://www.hiei-tf.fr/font_decompresse_bessab.bin
La font des US (en rajoutant les accents est pas mal) mais ils ont visiblement changé l'adresse dans leur rom, même si on peut la récupérer manuellement en la recopiant à partir de captures d'écran.
- kipy
- 109ème étoile du destin
- Messages : 2113
- Inscription : 17 avr. 2006, 19:29
- Localisation : Belgique
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
Juste par curiosité, c'est ta font de 6 ko qui met 17 secondes à se faire compresser ? Tu as quoi comme machine ? (histoire de situer le lua niveau vitesse)
♪ Tapferen kleinen Liebling, bis dahin, träume schön,
Träume so süß wie bayerische Creme ♫
Träume so süß wie bayerische Creme ♫
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
Oui, juste la création du fichier compressé à partir du fichier décompressé.
J'ai un "Core2Duo E6750 / 2.66 Ghz" avec 4 Go de Ram (3.25 Go en fait vu que j'ai un Windows XP 32-bits).
J'ai un "Core2Duo E6750 / 2.66 Ghz" avec 4 Go de Ram (3.25 Go en fait vu que j'ai un Windows XP 32-bits).
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
Si tu veux, je peux m'occuper de faire la font fr + table. Faut placer les caractères après 0A pour éviter d'être emmerdé avec le script "nom ennemi".
Sinon ça serai bien si tu pouvais faire des scripts ASM comme tu la fais sur Captain Tsubasa pour l'agrandissement de cadre.
Sinon ça serai bien si tu pouvais faire des scripts ASM comme tu la fais sur Captain Tsubasa pour l'agrandissement de cadre.
Traduction de BS Zelda - Ancient Stone Tablets (Projet en cour)

- kipy
- 109ème étoile du destin
- Messages : 2113
- Inscription : 17 avr. 2006, 19:29
- Localisation : Belgique
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
Oki, merciHiei- a écrit :Oui, juste la création du fichier compressé à partir du fichier décompressé.
J'ai un "Core2Duo E6750 / 2.66 Ghz" avec 4 Go de Ram (3.25 Go en fait vu que j'ai un Windows XP 32-bits).

♪ Tapferen kleinen Liebling, bis dahin, träume schön,
Träume so süß wie bayerische Creme ♫
Träume so süß wie bayerische Creme ♫
- BahaBulle
- Bub'n'Bob Pawa!
- Messages : 6498
- Inscription : 06 août 2002, 09:34
- Localisation : Sur une bulle
- Contact :
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
Si, si c'est énorme pour un petit truc comme çaHiei- a écrit :Le compresseur met 17 secondes pour compresser la font, ce qui n' est pas encore énorme vu qu'on a qu'un seul fichier à compresser

Bon, le code n'est pas super optimisé

http://www.romhack.org/viewtopic.php?f=46&t=3720Hiei- a écrit :Ou bien un coup de trace, mais si oui, je cherche quoi exactement :o ?
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
@Bahabulle : Ok, méthode classique alors.
Mais bon, déjà, il faudra trouver les adresses où se trouvent les infos des cadres de combats (dans l'état actuel, mettre des noms de persos (pour les persos alliés) plus long ne sert à rien car le cadre ne les affichera entièrement pas car trop petit).
Pour la font, si tu veux (ça me fera gagner du temps), mais par pitié ne fais pas comme "l'idiotie" du patch fr actuel et mets là dans l'ordre alphabétique (la logique de base) car c'est la merde de ce côté là dans le patch actuel et ce n'est pas du tout pratique
. Tu n'as qu'à reprendre le modèle de la font us, elle est très bien et de taille proportionnelle pour tous les caractères visiblement. Après, il n'y a plus qu'à rajouter les accents et hop.
Déjà, faut trouver les adresses des cadres, ensuite on verra (c'est intéressant dans Captain Tsubasa car quasi tout le jeu repose sur des choix et donc des cadres, et donc qu'il y a un paquet de textes/variables à déplacer au niveau "cordonnées") ce qui ne doit pas être spécialement le cas ici, il suffit de changer deux valeurs, en gros, largeur et hauteur des cadres, donc à voir si une modification manuelle suffit ou pas.kogami a écrit :Sinon ça serai bien si tu pouvais faire des scripts ASM comme tu la fais sur Captain Tsubasa pour l'agrandissement de cadre.
Mais bon, déjà, il faudra trouver les adresses où se trouvent les infos des cadres de combats (dans l'état actuel, mettre des noms de persos (pour les persos alliés) plus long ne sert à rien car le cadre ne les affichera entièrement pas car trop petit).
Pour la font, si tu veux (ça me fera gagner du temps), mais par pitié ne fais pas comme "l'idiotie" du patch fr actuel et mets là dans l'ordre alphabétique (la logique de base) car c'est la merde de ce côté là dans le patch actuel et ce n'est pas du tout pratique
