[SNES] Dragon Ball Z : Super Saiyajin Densetsu
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
Ca fonctionne, t'as le bon pointeur, j'ai réussi à expandre la rom, à déplacer pointeurs+textes dans la partie ajoutée, j'ai viré les anciens textes de la rom + modifié les nouveaux pour tester et ça roule.
Faudra chercher celui de l'autre script, si c'est faisable pour l'un, il y a de grosses probabilité que ce soit possible pour l'autre aussi, au pire je regarderai tout à l'heure, là j'ai un truc sur le feu.
De cette façon, on pourra déjà faire la traduction sereinement sans crainte que ça ne rentre pas dans la rom.
Par curiosité, faudrait déplacer les pointeurs +textes pile au début d'une bank (j'ai déplacé à la même adresse mais juste dans une bank différente pour ne pas avoir à recalculer les pointeurs), et voir combien d'espace libre indique "Hareng-Tool" pour les textes.
Si tu déplaces à "0x100000" (début de l'expansion), ton "008006" devient "008020"
La bank s'étend de "0x100000" à "0x107FFF" (comme c'est une low-rom), donc tes pointeurs iront à 0x100000, le début de tes textes à 0x1002DC et la limite de fin de tes textes à 0x107FFF". Ca fait gagner 12023 octets.
Théoriquement, on doit gagner 50% de place en plus (on gagne 0x3000 sur 0x8000 en gros).
Faudra chercher celui de l'autre script, si c'est faisable pour l'un, il y a de grosses probabilité que ce soit possible pour l'autre aussi, au pire je regarderai tout à l'heure, là j'ai un truc sur le feu.
De cette façon, on pourra déjà faire la traduction sereinement sans crainte que ça ne rentre pas dans la rom.
Par curiosité, faudrait déplacer les pointeurs +textes pile au début d'une bank (j'ai déplacé à la même adresse mais juste dans une bank différente pour ne pas avoir à recalculer les pointeurs), et voir combien d'espace libre indique "Hareng-Tool" pour les textes.
Si tu déplaces à "0x100000" (début de l'expansion), ton "008006" devient "008020"
La bank s'étend de "0x100000" à "0x107FFF" (comme c'est une low-rom), donc tes pointeurs iront à 0x100000, le début de tes textes à 0x1002DC et la limite de fin de tes textes à 0x107FFF". Ca fait gagner 12023 octets.
Théoriquement, on doit gagner 50% de place en plus (on gagne 0x3000 sur 0x8000 en gros).
Dernière modification par Hiei- le 13 mai 2012, 04:30, modifié 1 fois.
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
0x2F14 : le premier octet change la couleur du fond sur le panorama du début. Mets "AF" et il devient vert par exemple). La suite change aussi les couleurs des persos. Ce qui suit ensuite change la couleur du sous-titre, donc j'imagine que c'est la palette.
L'intro semble commencer en 0x7151 et semble se terminer en 0x71E8 (si c'est bien ici, elle commence et se termine par "1F").
Par contre, bizarrement, une fois déplacé, les textes de combat déconnent. Pourtant, le pointeur de la table de pointeurs semblent bien être à 0x38F16 (c'est le seul "2E8F07" de toute la rom).
L'intro semble commencer en 0x7151 et semble se terminer en 0x71E8 (si c'est bien ici, elle commence et se termine par "1F").
Par contre, bizarrement, une fois déplacé, les textes de combat déconnent. Pourtant, le pointeur de la table de pointeurs semblent bien être à 0x38F16 (c'est le seul "2E8F07" de toute la rom).
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
Le pointeur de la bank pour les textes combat semble être à l'adresse 0x38F19, y a toutes une table de pointeur sur 3 octet qui commence a 0x38F16.
EDIT: en faite ici il y a 576 pointeurs, du coup il ont coupé les pointeur bank en plusieurs partie, la 1er partie qui couvre les 100 pointeurs commence à l'adresse 0x38F16 la suite à 0x38F19 etc...
EDIT 2: L'intro commence à l'adresse 0x7151 et fini à 0x74FF, j'ai modifié une partie du texte qui n'était pas compressé et ca a bien modif le texte, donc je confirme les adresse.
EDIT: en faite ici il y a 576 pointeurs, du coup il ont coupé les pointeur bank en plusieurs partie, la 1er partie qui couvre les 100 pointeurs commence à l'adresse 0x38F16 la suite à 0x38F19 etc...
EDIT 2: L'intro commence à l'adresse 0x7151 et fini à 0x74FF, j'ai modifié une partie du texte qui n'était pas compressé et ca a bien modif le texte, donc je confirme les adresse.
Traduction de BS Zelda - Ancient Stone Tablets (Projet en cour)

Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
Ah oui, je n'avais pas pensé que ça pouvait être découpé en plusieurs morceaux, pas bête.
Donc, selon toute logique, niveaux pointeurs de banks, en suivant cette logique :
0x38F16 (2E8F07) pointe vers 0x38F2E (Deuxième morceau de la table des pointeurs des textes annexes, 42 pointeurs)
0x38F19 (828F07) pointe vers 0x38F82 (Premier morceau de la table des pointeurs des textes annexes, 526 pointeurs)
0x38F1C (008006) pointe vers 0x30000 (table de pointeurs des textes principaux, 366 pointeurs)
0x38F1F (269207) pointe vers 0x39226 (??)
etc... (je ne pense pas que le reste servira pour les textes de base).
Malgré ça, le dump des textes annexes est donc coupé en deux banks donc deux dumps, j'ai réinséré les deux dans des banks différentes, j'ai bien recalculer les pointeurs comme il faut (sauf erreur de ma part), j'ai bien modifié les pointeurs de banks en question et ça bugge toujours sur le texte de Raditz.
Je vais faire des tests déjà, pour voir dans quel bank il est à l'origine, car c'est bien zarbi.
Donc, selon toute logique, niveaux pointeurs de banks, en suivant cette logique :
0x38F16 (2E8F07) pointe vers 0x38F2E (Deuxième morceau de la table des pointeurs des textes annexes, 42 pointeurs)
0x38F19 (828F07) pointe vers 0x38F82 (Premier morceau de la table des pointeurs des textes annexes, 526 pointeurs)
0x38F1C (008006) pointe vers 0x30000 (table de pointeurs des textes principaux, 366 pointeurs)
0x38F1F (269207) pointe vers 0x39226 (??)
etc... (je ne pense pas que le reste servira pour les textes de base).
Malgré ça, le dump des textes annexes est donc coupé en deux banks donc deux dumps, j'ai réinséré les deux dans des banks différentes, j'ai bien recalculer les pointeurs comme il faut (sauf erreur de ma part), j'ai bien modifié les pointeurs de banks en question et ça bugge toujours sur le texte de Raditz.
Je vais faire des tests déjà, pour voir dans quel bank il est à l'origine, car c'est bien zarbi.
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
Ok, j'ai pigé le fonctionnement, en fait c'est un gros bordel. C'est découpé en 7 morceaux qui vont chacun tapper dans le morceau des voisins, donc pour déplacer ça proprement et avec le maximum de place, c'est un peu le bordel (mais faisable, ça va juste prendre un peu de temps car il faut déplacer ça à la main, et vérifier une fois chaque pointeur. Une fois que ce sera déplacé, il sera possible de réutiliser le hareng-tool pour le faire automatiquement, le but c'est de rajouter en double/repointer correctement les phrases qu'ils vont piquer dans les autres morceaux pour que chaque morceau soit indépendant).
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
Ouais c'est le même principe que pour Chrono Trigger ^^
Maintenant on est pas obliger de déplacer tout le bloc de texte, s'il manque 300 octet par exemple, on déplace juste un morceau de texte et le reste, on le laisse dans la bank d'origine (tout en utilisant le gain de place que l'on aura récupéré en déplaçant certain morceau de texte)
Ca se fera tout a la fin uniquement, ça évite de devoir modifier tout les pointeur, on le fera juste pour le texte concerné.
Maintenant on est pas obliger de déplacer tout le bloc de texte, s'il manque 300 octet par exemple, on déplace juste un morceau de texte et le reste, on le laisse dans la bank d'origine (tout en utilisant le gain de place que l'on aura récupéré en déplaçant certain morceau de texte)
Ca se fera tout a la fin uniquement, ça évite de devoir modifier tout les pointeur, on le fera juste pour le texte concerné.
Traduction de BS Zelda - Ancient Stone Tablets (Projet en cour)

Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
Une fois le japonais déplacé et fonctionnel, ce sera réglé, ensuite "hareng-tool" pourra prendre le relais.
Perso, je préfère être sûr d'avoir assez de place pour traduire avant de commencer. Là, je suis dessus pour voir.
Perso, je préfère être sûr d'avoir assez de place pour traduire avant de commencer. Là, je suis dessus pour voir.
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
Voilà, ça fonctionne enfin !
Textes principaux et annexes déplacés dans le Mo rajouté, textes originaux effacés et le jeu fonctionne très bien
Maintenant, il ne me reste plus qu'à retravailler un peu tout ça, en séparant les textes annexes (un morceau par bank, cf les pointeurs 24-bits), histoire d'avoir un maximum de place disponible.
Ensuite, je t'envois le nécessaire dès que c'est prêt (scripts de dumps/réinsertion de textes prenant en compte l'agrandissement de la rom).
Edit : Pour le reste, c'est un peu chiant pour pas grand chose au final donc restons comme on est en ce moment, avoir une bank complète pour chaque devrait amplement suffire.
Mais pour ça (avoir la bank complète pour le texte annexe), il ne faudra pas oublier de vérifier/noter sur quel n° de pointeur sont pointés les octets de banks car en traduisait les textes annexes et même en repointant le japonais à la base, ça décalera le texte, donc les pointeurs de base, et donc les pointeurs de banks qu'il faudra modifier à la main(pour mon test, j'ai gardé les mêmes adresses pour n'avoir à modifier que le n° de bank).
Textes principaux et annexes déplacés dans le Mo rajouté, textes originaux effacés et le jeu fonctionne très bien

Maintenant, il ne me reste plus qu'à retravailler un peu tout ça, en séparant les textes annexes (un morceau par bank, cf les pointeurs 24-bits), histoire d'avoir un maximum de place disponible.
Ensuite, je t'envois le nécessaire dès que c'est prêt (scripts de dumps/réinsertion de textes prenant en compte l'agrandissement de la rom).
Edit : Pour le reste, c'est un peu chiant pour pas grand chose au final donc restons comme on est en ce moment, avoir une bank complète pour chaque devrait amplement suffire.
Mais pour ça (avoir la bank complète pour le texte annexe), il ne faudra pas oublier de vérifier/noter sur quel n° de pointeur sont pointés les octets de banks car en traduisait les textes annexes et même en repointant le japonais à la base, ça décalera le texte, donc les pointeurs de base, et donc les pointeurs de banks qu'il faudra modifier à la main(pour mon test, j'ai gardé les mêmes adresses pour n'avoir à modifier que le n° de bank).
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
Je suis en train de rejeter un coup d'oeil vite fait, et :
0x38F16 (2E8F07) pointe vers 0x38F2E (Premier morceau de la table des pointeurs des textes annexes, 42 pointeurs)
0x38F19 (828F07) pointe vers 0x38F82 (Deuxième morceau de la table des pointeurs des textes annexes, 338 pointeurs)
0x38F1F (269207) pointe vers 0x39226 (Troisième morceau de la table des pointeurs des textes annexes, 167 pointeurs)
0x38F22 (749307) pointe vers 0x39374 (Quatrième morceau de la table des pointeurs des textes annexes, 9 pointeurs)
0x38F25 (869307) pointe vers 0x39386 (Cinquième morceau de la table des pointeurs des textes annexes, 2 pointeurs) D3BC D40B
0x38F28 (8A9307) pointe vers 0x3938A (Sixième morceau de la table des pointeurs des textes annexes, 2 pointeurs) D3BC D40B
0x38F2B (8E9307) pointe vers 0x3938E (Septième [et dernier] morceau de la table des pointeurs des textes annexes, 16 pointeurs)
A propos des pointeurs des morceaux de la table des pointeurs :
0x38F2E => Pointe sur <PT0001>
0x38F82 => Pointe sur <PT0043>
0x39226 => Pointe sur <PT0381>
0x39374 => Pointe sur <PT0548>
0x39386 => Pointe sur <PT0548>
0x3938A => Pointe sur <PT0548>
0x3938E => Pointe sur <PT0561>
Si on fait 43-1, ça donne : 42. Si on fait 381-43, ça donne : 338 et si on fait 548-381, ça donne : 167. Ca signifierait donc que les trois premiers gros morceaux sont standards, il faut juste que je vérifie qu'ils n'aillent pas tapper hors de leur "adresses" pour les pointeurs et ceux là doivent pouvoir être déplacés proprement (s'ils tappent hors de leurs adresses pour certains pointeurs, il faudra mettre les dialogues en question en double). Les autres font moins de 30 pointeurs en tout, donc peuvent toujours être déplacés "à la main" (ou même ne pas être déplaces, vu qu'il n'y a quasi pas de textes pour ceux-là). J'éditerai mon message dès que j'aurais vérifié tout ça.
0x38F16 (2E8F07) pointe vers 0x38F2E (Premier morceau de la table des pointeurs des textes annexes, 42 pointeurs)
0x38F19 (828F07) pointe vers 0x38F82 (Deuxième morceau de la table des pointeurs des textes annexes, 338 pointeurs)
0x38F1F (269207) pointe vers 0x39226 (Troisième morceau de la table des pointeurs des textes annexes, 167 pointeurs)
0x38F22 (749307) pointe vers 0x39374 (Quatrième morceau de la table des pointeurs des textes annexes, 9 pointeurs)
0x38F25 (869307) pointe vers 0x39386 (Cinquième morceau de la table des pointeurs des textes annexes, 2 pointeurs) D3BC D40B
0x38F28 (8A9307) pointe vers 0x3938A (Sixième morceau de la table des pointeurs des textes annexes, 2 pointeurs) D3BC D40B
0x38F2B (8E9307) pointe vers 0x3938E (Septième [et dernier] morceau de la table des pointeurs des textes annexes, 16 pointeurs)
A propos des pointeurs des morceaux de la table des pointeurs :
0x38F2E => Pointe sur <PT0001>
0x38F82 => Pointe sur <PT0043>
0x39226 => Pointe sur <PT0381>
0x39374 => Pointe sur <PT0548>
0x39386 => Pointe sur <PT0548>
0x3938A => Pointe sur <PT0548>
0x3938E => Pointe sur <PT0561>
Si on fait 43-1, ça donne : 42. Si on fait 381-43, ça donne : 338 et si on fait 548-381, ça donne : 167. Ca signifierait donc que les trois premiers gros morceaux sont standards, il faut juste que je vérifie qu'ils n'aillent pas tapper hors de leur "adresses" pour les pointeurs et ceux là doivent pouvoir être déplacés proprement (s'ils tappent hors de leurs adresses pour certains pointeurs, il faudra mettre les dialogues en question en double). Les autres font moins de 30 pointeurs en tout, donc peuvent toujours être déplacés "à la main" (ou même ne pas être déplaces, vu qu'il n'y a quasi pas de textes pour ceux-là). J'éditerai mon message dès que j'aurais vérifié tout ça.
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
Perso j'aurais attendu que le script soit entièrement traduit pour voir si il y'aurait eu besoin de déplacer le texte.
En cas de dépassement, j'aurais uniquement déplacé les textes en fin de la bank qui déborde de manière à éviter de toucher au textes en début de bank de façons à éviter tout bug inutile.
En tout cas, c'est comme ça que j'ai procédé sur Chrono Trigger car il y a des pointeurs qui font appel à d'autres pointeurs et cela nous oblige à chaque fois de les retrouver et les modifier pour que le jeux affiche les bon texte.
En cas de dépassement, j'aurais uniquement déplacé les textes en fin de la bank qui déborde de manière à éviter de toucher au textes en début de bank de façons à éviter tout bug inutile.
En tout cas, c'est comme ça que j'ai procédé sur Chrono Trigger car il y a des pointeurs qui font appel à d'autres pointeurs et cela nous oblige à chaque fois de les retrouver et les modifier pour que le jeux affiche les bon texte.
Traduction de BS Zelda - Ancient Stone Tablets (Projet en cour)

Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
En tout cas, le script principal, on peut le déplacer en deux secondes, mais c'était juste pour être sûr d'avoir assez de place avant de commencer. S'il n'y a pas besoin de place supplémentaire, ben pas la peine de déplacer, mais au moins maintenant je sais que si le script dépasse, c'est ok (les scripts annexes sont un peu plus bordelique mais le script, je peux déjà assurer que ça ne devrait causer aucun bug même si tout le script entier est déplacé).
Sinon, pour réinsérer la font fr de bessab dans la rom japonaise, voilà comment faire (merci BahaBulle) :
Tu vas dans la rom fr de bessab (v1.3), et tu copies le bloc 0x40000-0x40D4C. Tu vas ensuite à 0x40000 dans la rom jap et tu recolles le bloc que tu as copié de la rom fr au moment endroit et voilou (ça remplace la font jap compressée par la font fr compressée).
Maintenant, comme disait BabaBulle, la font est assez moche :
Sinon, pour réinsérer la font fr de bessab dans la rom japonaise, voilà comment faire (merci BahaBulle) :
Tu vas dans la rom fr de bessab (v1.3), et tu copies le bloc 0x40000-0x40D4C. Tu vas ensuite à 0x40000 dans la rom jap et tu recolles le bloc que tu as copié de la rom fr au moment endroit et voilou (ça remplace la font jap compressée par la font fr compressée).
Maintenant, comme disait BabaBulle, la font est assez moche :
Mais comme je disais, ça suffit pour traduire le jeu pour l'instant, il sera toujours possible de la rechanger à la fin (comme c'est une font à taille fixe, le fait de la changer à la fin n'affectera pas la mise en page du texte).[10:02] <BahaBulle> Ouh, qu'est-ce qu'elle est merdique cette font fr
[10:03] <Hiei-> lol
[10:03] <Hiei-> elle est pas géniale cay sur
[10:03] <Hiei-> mais bon
[10:03] <BahaBulle> Y'en a dans tous le sens...
[10:03] <BahaBulle> Bref, j'ai fini mon boulot
[10:03] <Hiei-> c'est mieux que rien
[10:03] <Hiei-> moi mon avis c'est de s'en contenter pour l'instant
[10:04] <Hiei-> une fois la trad terminée, pourquoi pas la rechanger
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
Je me douté que tu allez suggérer cette solution pour la font ^^
Et je suis d'accords avec toi pour la font, faudrait que j'en trouve une sympa.
Et je suis d'accords avec toi pour la font, faudrait que j'en trouve une sympa.
Traduction de BS Zelda - Ancient Stone Tablets (Projet en cour)

Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
Ben, ça permet d'en avoir une fonctionnelle en attendant et de ne pas être bloqué pendant des plombes, c'est une bonne chose non ?
(même si je ne compte pas non plus garder celle là).

Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
Oui vaux mieux ça que ce retrouver bloqué (comme je le suis avec le Super Butôden 2)
Traduction de BS Zelda - Ancient Stone Tablets (Projet en cour)

Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
Pourquoi tu pars pas de la FR pour Butôden 2 ? (Font déjà disponible).
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
Tu essaieras ce patch : http://www.hiei-tf.fr/DBZ-16MB.ips (à utiliser sur la rom "Dragon Ball Z - Super Saiya Densetsu (J) (V1.1).smc").
Je pense avoir compris comment fonctionnait les textes annexes, j'ai tout déplacé (textes du script + annexes dans le Mo en plus et j'ai effacé les anciens) et ça fonctionne toujours, même si c'est à tester un peu plus profondément (mais si j'ai bien compris comment ça fonctionnait, comme je le pense, il n'y a aucune raison que ça bugge quelque part).
Et donc, toujours si j'ai bien pigé, les pointeurs de banks ne seront plus à modifier (pour ceux listés au dessus en tout cas) vu que les 4 qui posaient problèmes pointent vers des pointeurs et non directement vers du texte. On aura beau changer du texte dans "Dragon Ball Z - Super Saiya Densetsu (J) (V1.1)_Textes_Annexes-04.txt", qui est le texte dont les pointeurs font parti, les pointeurs eux ne bougeront plus de place dans la rom vu qu'ils sont déjà déplacés.
Donc, si besoin, voilà le gain possible utilisable pour chaque fichier texte :
Dragon Ball Z - Super Saiya Densetsu (J) (V1.1)_Script_Principal.txt : 12023 octets (limite : 60% plus gros que l'original).
Dragon Ball Z - Super Saiya Densetsu (J) (V1.1)_Textes_Annexes-01.txt : 31497 octets (limite : 2655% plus gros que l'original).
Dragon Ball Z - Super Saiya Densetsu (J) (V1.1)_Textes_Annexes-02.txt : 22800 octets (limite : 245% plus gros que l'original).
Dragon Ball Z - Super Saiya Densetsu (J) (V1.1)_Textes_Annexes-03.txt : 26515 octets (limite : 448% plus gros que l'original).
Dragon Ball Z - Super Saiya Densetsu (J) (V1.1)_Textes_Annexes-04.txt : 31686 octets (limite : 3097% plus gros que l'original).
Je t'ai envoyé tout le détail en pm.
Je pense avoir compris comment fonctionnait les textes annexes, j'ai tout déplacé (textes du script + annexes dans le Mo en plus et j'ai effacé les anciens) et ça fonctionne toujours, même si c'est à tester un peu plus profondément (mais si j'ai bien compris comment ça fonctionnait, comme je le pense, il n'y a aucune raison que ça bugge quelque part).
Et donc, toujours si j'ai bien pigé, les pointeurs de banks ne seront plus à modifier (pour ceux listés au dessus en tout cas) vu que les 4 qui posaient problèmes pointent vers des pointeurs et non directement vers du texte. On aura beau changer du texte dans "Dragon Ball Z - Super Saiya Densetsu (J) (V1.1)_Textes_Annexes-04.txt", qui est le texte dont les pointeurs font parti, les pointeurs eux ne bougeront plus de place dans la rom vu qu'ils sont déjà déplacés.
Donc, si besoin, voilà le gain possible utilisable pour chaque fichier texte :
Dragon Ball Z - Super Saiya Densetsu (J) (V1.1)_Script_Principal.txt : 12023 octets (limite : 60% plus gros que l'original).
Dragon Ball Z - Super Saiya Densetsu (J) (V1.1)_Textes_Annexes-01.txt : 31497 octets (limite : 2655% plus gros que l'original).
Dragon Ball Z - Super Saiya Densetsu (J) (V1.1)_Textes_Annexes-02.txt : 22800 octets (limite : 245% plus gros que l'original).
Dragon Ball Z - Super Saiya Densetsu (J) (V1.1)_Textes_Annexes-03.txt : 26515 octets (limite : 448% plus gros que l'original).
Dragon Ball Z - Super Saiya Densetsu (J) (V1.1)_Textes_Annexes-04.txt : 31686 octets (limite : 3097% plus gros que l'original).
Je t'ai envoyé tout le détail en pm.
- BahaBulle
- Bub'n'Bob Pawa!
- Messages : 6496
- Inscription : 06 août 2002, 09:34
- Localisation : Sur une bulle
- Contact :
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
La routine :
J'ai voulu tenter de me faire le décompresseur et compresseur en lua pour voir ce que ça donnait. Et comme cette routine n'est pas trop compliqué, j'en ai profité.
Résultat : le décompresseur est plutôt rapide mais le compresseur est assez long car le lua n'est pas trop adapté à la recherche comme j'ai fait.
Faudrait que je trouve une autre façon de faire.
Ces fonctions ne fonctionnent pas en l'état. Il faut ajouter une petite gestion pour passer les paramètres (un Input et une adresse pour le décompresseur et le nom du fichier à compresser pour le compresseur) et gérer les buffer en retour. Ce qui n'est vraiment pas très compliqué.
J'ai seulement testé avec la font donc je ne garantie pas pour d'autres graphismes du jeu
Une fonction de décompression pour lua-interface :
Une fonction de compression pour lua-interface :
Code : Tout sélectionner
$00/C559 08 PHP
$00/C55A 8B PHB
$00/C55B E2 20 SEP #$20
$00/C55D C2 10 REP #$10
$00/C55F A2 00 90 LDX #$9000
$00/C562 86 86 STX $86
$00/C564 A9 7E LDA #$7E
$00/C566 85 88 STA $88
$00/C568 A4 83 LDY $83
$00/C56A A5 85 LDA $85
$00/C56C 48 PHA
$00/C56D AB PLB
$00/C56E BE 00 00 LDX $0000,y
$00/C571 86 89 STX $89
$00/C573 C8 INY
$00/C574 C8 INY
$00/C575 A2 00 00 LDX #$0000
$00/C578 64 8C STZ $8C
$00/C57A A5 8C LDA $8C
$00/C57C D0 0A BNE $0A [$C588]
$00/C57E B9 00 00 LDA $0000,y
$00/C581 85 8B STA $8B
$00/C583 C8 INY
$00/C584 A9 08 LDA #$08
$00/C586 85 8C STA $8C
$00/C588 C6 8C DEC $8C
$00/C58A 46 8B LSR $8B
$00/C58C 90 0B BCC $0B [$C599]
$00/C58E B9 00 00 LDA $0000,y
$00/C591 9F 00 90 7E STA $7E9000,x
$00/C595 C8 INY
$00/C596 E8 INX
$00/C597 80 4D BRA $4D [$C5E6]
$00/C599 B9 00 00 LDA $0000,y
$00/C59C 29 0F AND #$0F
$00/C59E 1A INC A
$00/C59F 1A INC A
$00/C5A0 85 8D STA $8D
$00/C5A2 C2 20 REP #$20
$00/C5A4 B9 00 00 LDA $0000,y
$00/C5A7 C8 INY
$00/C5A8 C8 INY
$00/C5A9 5A PHY
$00/C5AA 4A LSR A
$00/C5AB 4A LSR A
$00/C5AC 4A LSR A
$00/C5AD 4A LSR A
$00/C5AE 85 8F STA $8F
$00/C5B0 8A TXA
$00/C5B1 38 SEC
$00/C5B2 E5 8F SBC $8F
$00/C5B4 10 1A BPL $1A [$C5D0]
$00/C5B6 E2 20 SEP #$20
$00/C5B8 49 FF EOR #$FF
$00/C5BA 85 8F STA $8F
$00/C5BC A9 00 LDA #$00
$00/C5BE 9F 00 90 7E STA $7E9000,x
$00/C5C2 E8 INX
$00/C5C3 C6 8D DEC $8D
$00/C5C5 30 1E BMI $1E [$C5E5]
$00/C5C7 C6 8F DEC $8F
$00/C5C9 10 F3 BPL $F3 [$C5BE]
$00/C5CB A0 00 00 LDY #$0000
$00/C5CE 80 03 BRA $03 [$C5D3]
$00/C5D0 A8 TAY
$00/C5D1 E2 20 SEP #$20
$00/C5D3 8B PHB
$00/C5D4 A9 7E LDA #$7E
$00/C5D6 48 PHA
$00/C5D7 AB PLB
$00/C5D8 B9 00 90 LDA $9000,y
$00/C5DB 9D 00 90 STA $9000,x
$00/C5DE E8 INX
$00/C5DF C8 INY
$00/C5E0 C6 8D DEC $8D
$00/C5E2 10 F4 BPL $F4 [$C5D8]
$00/C5E4 AB PLB
$00/C5E5 7A PLY
$00/C5E6 E4 89 CPX $89
$00/C5E8 90 90 BCC $90 [$C57A]
$00/C5EA AB PLB
$00/C5EB 28 PLP
$00/C5EC 6B RTL
Résultat : le décompresseur est plutôt rapide mais le compresseur est assez long car le lua n'est pas trop adapté à la recherche comme j'ai fait.
Faudrait que je trouve une autre façon de faire.
Ces fonctions ne fonctionnent pas en l'état. Il faut ajouter une petite gestion pour passer les paramètres (un Input et une adresse pour le décompresseur et le nom du fichier à compresser pour le compresseur) et gérer les buffer en retour. Ce qui n'est vraiment pas très compliqué.
J'ai seulement testé avec la font donc je ne garantie pas pour d'autres graphismes du jeu

Une fonction de décompression pour lua-interface :
Code : Tout sélectionner
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
Code : Tout sélectionner
function DBZCompData(name)
local file_in = Input(name)
local buf_in = Buffer(true)
local buf_out = Buffer(true)
buf_in:copyfrom(file_in)
local filesize = file_in:getsize()
print(string.format(' 0x%X octets a compresser', filesize))
local pos_in = 0
local pos_out = 0
while pos_in < filesize do
local header = 0
local bytes = {}
for i = 0, 7 do
local nb_rle = SearchRLE(buf_in, pos_in, filesize)
local nb_lz, pos_lz = SearchLZ(buf_in, pos_in, filesize)
if nb_rle > 0 and nb_rle >= nb_lz then
local nb = nb_rle - 3
local back = pos_in + 1
local comp = nb + bit.lshift(back, 4)
header = bit.bor(header, bit.lshift(0, i))
table.insert(bytes, bit.band(comp, 0xFF))
table.insert(bytes, bit.band(bit.rshift(comp, 8), 0xFF))
pos_in = pos_in + nb_rle
elseif nb_lz > 0 then
local nb = nb_lz - 3
local back = pos_in - pos_lz
local comp = nb + bit.lshift(back, 4)
header = bit.bor(header, bit.lshift(0, i))
table.insert(bytes, bit.band(comp, 0xFF))
table.insert(bytes, bit.band(bit.rshift(comp, 8), 0xFF))
pos_in = pos_in + nb_lz
else
table.insert(bytes, buf_in[pos_in])
header = bit.bor(header, bit.lshift(1, i))
pos_in = pos_in + 1
end
if pos_in >= filesize then break end
end
buf_out:writeU8(header)
for i = 1, #bytes do
buf_out:writeU8(bytes[i])
end
end
buf_in:destroy()
file_in:destroy()
print(string.format(' 0x%X octets compresses', buf_out:getsize()))
return buf_out, filesize
end
function SearchLZ(buf, pos, size)
local nb = 0
local nb_save = 0
local pos_save = 0
local pos_in = pos - 1
while pos_in ~= pos - 4095 and nb_save ~= 18 do
local nb = 0
while buf[pos_in+nb] == buf[pos+nb] and nb < 18 and pos+nb < size do
nb = nb + 1
end
if nb > nb_save and nb > 2 then
nb_save = nb
pos_save = pos_in
else
pos_in = pos_in - 1
end
end
return nb_save, pos_save
end
function SearchRLE(buf, pos, size)
local nb = 0
local pos_in = pos
if pos < 0x1000 and buf[pos_in] == 0x00 then
while nb < 18 and buf[pos_in] == 0x00 and pos_in < size do
nb = nb + 1
pos_in = pos_in + 1
end
end
if nb >= 3 then
return nb
else
return 0
end
end
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
C'est probablement dans mes cordes (enfin, je pense) de rajouter l'input, l'adresse et le fichier à décompresser (j'ai d'autres modèles à disposition) mais pour le "buffer", aucune idée de la méthode.
Merci en tout cas d'y avoir jeté un oeil
Merci en tout cas d'y avoir jeté un oeil

- kipy
- 109ème étoile du destin
- Messages : 2111
- Inscription : 17 avr. 2006, 19:29
- Localisation : Belgique
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
Si tu veux gagner en vitesse, essaies de faire un tableau de petits groupes potentiels (genre qui ont minimum 3 octets en commun avec la séquence recherchée) avant d'aller plus loin, c'est en général ce qui ralentit toutBahaBulle a écrit :Résultat : le décompresseur est plutôt rapide mais le compresseur est assez long car le lua n'est pas trop adapté à la recherche comme j'ai fait.

♪ 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
Honnêtement, la vitesse ce n'est pas vraiment un problème perso 
Personnellement, j'ai quand même un PC un minimum véloce et même si ça mettait 10 minutes, ce ne serait pas un drame

Personnellement, j'ai quand même un PC un minimum véloce et même si ça mettait 10 minutes, ce ne serait pas un drame

- kipy
- 109ème étoile du destin
- Messages : 2111
- Inscription : 17 avr. 2006, 19:29
- Localisation : Belgique
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
Ha ouais non, je me doute bien que ça n'a pas d'importance pour toi, le principal c'est que ça fonctionne 

♪ 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
Qui se dévoue pour le finaliser, alors ? 

- BahaBulle
- Bub'n'Bob Pawa!
- Messages : 6496
- Inscription : 06 août 2002, 09:34
- Localisation : Sur une bulle
- Contact :
Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
Certes, sur un fichier ce n'est pas catastrophique mais quand tu lances sur plusieurs dizaines de fichiers, ça commence à être longHiei- a écrit :Honnêtement, la vitesse ce n'est pas vraiment un problème perso

Ben t'as dit que ça devait être dans tes cordesHiei- a écrit :Qui se dévoue pour le finaliser, alors ?

Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
J'avoue ne pas trop savoir comment faire pour utiliser ton code sur le jeu, la ligne de commande pour commencer, si quelqu'un la connait ?
Traduction de BS Zelda - Ancient Stone Tablets (Projet en cour)

Re: [SNES] Dragon Ball Z : Super Saiyajin Densetsu
Non, j'ai dit que le rajout des variables (adresse, nom de fichiers) devrait être dans mes cordes, mais pas le rajout du buffer.BahaBulle a écrit :Ben t'as dit que ça devait être dans tes cordesHiei- a écrit :Qui se dévoue pour le finaliser, alors ?
Je me cite :
Hiei- a écrit :C'est probablement dans mes cordes (enfin, je pense) de rajouter l'input, l'adresse et le fichier à décompresser (j'ai d'autres modèles à disposition) mais pour le "buffer", aucune idée de la méthode.
Merci en tout cas d'y avoir jeté un oeil