[SNES] Dragon Ball Z : Super Saiyajin Densetsu

Le groupe de ceux qui n'ont pas de groupe. Vous vous êtes mis à plusieurs sur un projet et souhaitez en discuter ? Vous voulez montrer l'avancement de votre traduction ? Cette partie vous est dédiée !
Avatar de l’utilisateur
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

Message non lu par BahaBulle »

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.

Hiei-
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu

Message non lu par Hiei- »

Ben, ça m'a l'air tellement con que c'est pas la peine de l'écrire, si ?

Code : Tout sélectionner

rom_in = "nom-de-la-rom-originale.smc"
adress_in = "adresse-a-decompresser"
file_in = "nom-du-fichier-a-compresser"
Repris sur d'autres modèles. Je ne les vois pas dans ta syntaxe, mais j'imagine qu'il faudrait aussi :

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"
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) :
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.

Avatar de l’utilisateur
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

Message non lu par BahaBulle »

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

Hiei-
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu

Message non lu par Hiei- »

J'ai que ça à disposition perso :

Decompression :

Code : Tout sélectionner

   local rom_in = Input(ROM_IN)

   print("Decompression du fichier " .. FILE_OUT)

   local buf_in  = Buffer(true)
Compression :

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")


Avatar de l’utilisateur
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

Message non lu par BahaBulle »

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.

Hiei-
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu

Message non lu par Hiei- »

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.

Avatar de l’utilisateur
kogami
Dieu Floodeur
Messages : 771
Inscription : 17 juin 2004, 16:47
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu

Message non lu par kogami »

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
Traduction de BS Zelda - Ancient Stone Tablets (Projet en cour)Image

Hiei-
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu

Message non lu par Hiei- »

En attendant, je suis en train de voir comment déplacer les noms des ennemis.

Hiei-
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu

Message non lu par Hiei- »

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

Avatar de l’utilisateur
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

Message non lu par BahaBulle »

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.

Hiei-
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu

Message non lu par Hiei- »

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à.
Dernière modification par Hiei- le 30 mai 2012, 17:57, modifié 1 fois.

Hiei-
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu

Message non lu par Hiei- »

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).
Dernière modification par Hiei- le 30 mai 2012, 17:58, modifié 2 fois.

Avatar de l’utilisateur
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

Message non lu par BahaBulle »

Hiei- a écrit :Valeur de la bank : 0xBC10 (logiquement).
Tu n'étais pas loin. C'est le 0x02 juste avant, en 0xBC0D :)

---------------------------------------------------
Hiei- a écrit :...car le tilemap des cadres semblent compressé...
Ils ne sont pas compressés mais créés dynamiquement.
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 :
Image ----> Image

---------------------------------------------------

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"
Ensuite, tu déclare des variables globales si t'as envie :

Code : Tout sélectionner

ROM_IN    = "fichier-in.smc"
ROM_OUT   = "fichier-out.smc"

NAME_FILE = "fichier.bin"
ADR_IN    = 0x0
Ensuite, tu colles mes 2 fonctions :

Code : Tout sélectionner

function DBZDecompData(rom_in, adress)
...
end

function DBZCompData(name)
...
end
Et enfin, tu mets le code pour utiliser les fonctions en suivant ce modèle (pour la décompression) :
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)
Pour la dernière, il faut utiliser la fonction DBZDecompData en lui donnant 2 paramètres, l'Input et l'adresse des données à décompresser.
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()

Hiei-
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu

Message non lu par Hiei- »

BahaBulle a écrit :
Hiei- a écrit :Valeur de la bank : 0xBC10 (logiquement).
Tu n'étais pas loin. C'est le 0x02 juste avant, en 0xBC0D :)
Mouarf, ok, ça fonctionne maintenant, merci :)

Je verrais le reste après.

Hiei-
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu

Message non lu par Hiei- »

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 ?

Hiei-
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu

Message non lu par Hiei- »

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")


Avatar de l’utilisateur
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

Message non lu par BahaBulle »

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 ;)

Hiei-
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu

Message non lu par Hiei- »

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 :-D )
Dernière modification par Hiei- le 31 mai 2012, 13:19, modifié 1 fois.

Hiei-
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu

Message non lu par Hiei- »

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 :wink:

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.

Avatar de l’utilisateur
kipy
109ème étoile du destin
Messages : 2113
Inscription : 17 avr. 2006, 19:29
Localisation : Belgique
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu

Message non lu par kipy »

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 ♫

Hiei-
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu

Message non lu par Hiei- »

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).

Avatar de l’utilisateur
kogami
Dieu Floodeur
Messages : 771
Inscription : 17 juin 2004, 16:47
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu

Message non lu par kogami »

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.
Traduction de BS Zelda - Ancient Stone Tablets (Projet en cour)Image

Avatar de l’utilisateur
kipy
109ème étoile du destin
Messages : 2113
Inscription : 17 avr. 2006, 19:29
Localisation : Belgique
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu

Message non lu par kipy »

Hiei- 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).
Oki, merci ;)
♪ Tapferen kleinen Liebling, bis dahin, träume schön,
Träume so süß wie bayerische Creme ♫

Avatar de l’utilisateur
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

Message non lu par BahaBulle »

Hiei- 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 :wink:
Si, si c'est énorme pour un petit truc comme ça :)
Bon, le code n'est pas super optimisé :-P
Hiei- a écrit :Ou bien un coup de trace, mais si oui, je cherche quoi exactement :o ?
http://www.romhack.org/viewtopic.php?f=46&t=3720

Hiei-
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu

Message non lu par Hiei- »

@Bahabulle : Ok, méthode classique alors.
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.
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.

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 :zarb: . 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.


Répondre