Aller au contenu
M0nsieurL

Un outil de conversion bmp -> smc ou sfc

Messages recommandés

Bonsoir à tous, (ou bonjour suivant l'heure où vous lirez ce message).

 

Voilà, dans le cadre de mes traductions (sur super nintendo/famicom), je suis amené à faire de la retouche de gfxs (graphismes).

 

Seulement, voilà, il n'est pas toujours évident de voir pour de petits éléments (typographie, icône en 8pixel²) le rendu que cela aura à l'écran sans faire de longues modifications.

 

Aussi, je me demandais si l'un d'entre vous aurait les capacités de coder un petit programme capable de convertir une image (la résolution ne sera jamais supérieure à 256 pixel de large par 224 pixel de haut ce qui est je crois la résolution maximale de la console) en 256 couleurs pour l'afficher sur la snes directement :]

 

Dans l'idéal, un outil qui demanderait une image en png ou bmp (en ligne de commande ou avec une API, peut importe) et qui générerait un fichier smc pour afficher cette dernière.

 

Déjà est-ce possible techniquement ? (sachant que pour les jeux que j'ai vu, je n'ai jamais vu 256 couleurs à la fois)

 

À votre bon cœur messieurs les codeurs !

 

P.s : En techno utilisable ça serait bien un "stand alone", pas un truc qui nécessite une usine à gaz ou 10 billions de Dlls, pourquoi pas du multi plate-forme (en python ou java) ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Je pense que c'est possible en utilisant pvsneslib déjà, mais là je parle du kit complet, pas seulement d'un outil en ligne de commande.

Je vais voir si je peux te bidouiller un truc qui le fait comme ça mais je ne promets rien, je ne suis pas un champion ;-)

Partager ce message


Lien à poster
Partager sur d’autres sites

y'a certainement moyen de faire un smc de base/vierge avec la psneslib puis d'y réinjecter ce qu'il faut pour une image (avec une image sans compression)

Quitte a ce qu'elle soit toujours en 256x224, et remplir en noir (ou blanc) quand elles sont plus petites avant des les réinjecter.

il doir rester la génération du tilemap (je ne connais pas la snes donc je ne peux pas te dire) et la recup de la palette (256coul, a remplir de noir pour les non utilisées)

 

une fois la base faite, via un script python ou autre ca ne devrait pas etre trop trop compliqué.

Arno s'y connait en python, donc si tu nous lis... ^^

Partager ce message


Lien à poster
Partager sur d’autres sites

C'est exactement ce que je suis en train de faire, étant donné que les sources de pcx2snes sont disponibles, ça devrait être faisable sans trop de soucis (sachant qu'il faut gérer les différents modes/palettes) mais j'ai confiance pour l'instant.

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci Akira76, kogami c'est justement dans cette optique d'optimisation que je fais la demande qu'un tel programme :)

 

Comme tu le dis, parfois on a de mauvaises surprises :/

 

En tous cas Akira76, si tu parviens à tes fins ça me permettra d'être plus rapide/efficace pour certains projets !

 

Me permettrais-tu de proposer l'outil sur la traf ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Ok, j'ai quelque chose,

 

Ce n'est pas exactement ce que tu veux, et pour l'instant c'est juste un hack quick & dirty de pcx2snes mais bon...

Actuellement ça fonctionne avec des images pcx en 256 couleurs quelle qu'en soit la taille (dans la limite de celle de l'écran snes, bien sûr), il faut plus voir ça comme un proof of concept qu'un outil réel.

 

Dans l'archive attachée tu trouveras un pcx2sfc.exe qui est l'outil qui va convertir une image pcx en .sfc, le source du programme ainsi que les deux images qui m'ont servi pour mes tests.

 

Ce n'est pas du python, c'est du C, ça se compile sans soucis avec mingw sous windows, avec gcc sous linux, donc je suppose avec gcc sous macos aussi (je ne peux pas tester ça).

 

Dis-moi ce que tu en penses et si je dois continuer dans cette voie ou si tu pensais à quelque chose de totalement différent.

 

Edit : Bon, tapé trop vite, du coup je viens de corriger mes fautes pour obtenir un post intelligible...

pcx2sfc.7z

Partager ce message


Lien à poster
Partager sur d’autres sites

Ah oui, j'ai oublié de répondre à ta question, oui, une fois que c'est terminé, ça ne me dérange pas du tout que tu proposes ça à TRAF, moi perso, je ne suis pas assez doué en romhacking pour que ça me serve vraiment ;-)

Partager ce message


Lien à poster
Partager sur d’autres sites

Ah, oui, je n'ai pas fourni le code pvsneslib, mais c'est le plus simple du monde :

 

#include <snes.h>
 
extern char pad_patterns1, pad_patterns2;
extern char pad_palette, pad_map;
 
int main(void) {
    
    consoleInit();
 
    setMode(BG_MODE3,0);
    bgSetDisable(1); 
    bgSetDisable(2); 
    
    bgInitTileSet(0, &pad_patterns1, &pad_palette, 0, 0x0, 0x200, BG_256COLORS, 0x0000);
    dmaCopyVram(&pad_patterns1, 0x0000, 0x8000);
    dmaCopyVram(&pad_patterns2, 0x4000, 0x8000);
    bgInitMapSet(0, &pad_map, 0x800, SC_64x64, 0x6000);
    setFadeEffect(FADE_IN);
 
    while(1) { }
 
    return 0;
}

Partager ce message


Lien à poster
Partager sur d’autres sites

Je teste ça ce soir :)

 

Merci encore !

 

P.s : le pcx est un format un peu vieillot, pourrais-tu faire en sorte qu'il supporte le png ou le bmp (même s'il s'agit d'un format propriétaire) ?

 

P.s ²: ltrmars, j'ai pas compris ce que tu voulais dire :]

 

Edit : ça marche au poil avec tes exemples à voir (pas encore testé sur le hardware), par contre même avec totoshop, je n'arrive pas à faire un fichier .pcx "valide" avec photoshop, quel outil as-tu utilisé pour faire ces images ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Je suis en train de réécrire le tout, c'était juste pour vérifier que ça fonctionnait en fait.

Je vais essayer d'ajouter le support d'un max de formats de fichiers, une fois que le bitmap est chargé en ram, c'est la même routine pour l'encodage de toute façon.

Partager ce message


Lien à poster
Partager sur d’autres sites

Re,

 

J'ai un petit bug sur hardware, par contre, j'arrive pas à retrouver mon apn :/

 

Le dernier tiles en bas à droite est tout buggé (je viens de voir que sur émulateur c'est le cas aussi).

 

Par contre, je dois être une quiche, je n'arrive pas à faire un format pcx "correct" avec photoshop (j'ai aussi testé des outils de conversion en ligne, rien à faire...)

 

Edit : J'ai enfin réussi à faire un fichier sfc !

Comme on dit souvent R.T.F.M (et pour le coup la ligne de commande...)

un simple pcx2sfc.exe image.pcx -c256 à résolu l'affaire :]

Partager ce message


Lien à poster
Partager sur d’autres sites

Avec la version cs5, malgré le fait que mon image était bien en couleurs indexées en 8 bits le drop de l'image ne fonctionnait pas (contrairement au exemples que tu as mis)

 

J'ai du passer par l'invite de commande pour que cela fonctionne :)

Partager ce message


Lien à poster
Partager sur d’autres sites

Sinon, si je retrouve le truc qui va bien dans mon bordel, j'avais un example de code asm à compiler directement via wladx qui avec le make qui va bien te fait un slideshow des images d'un folder dans un SMC. Un truc pour faire un PPT sur une rom pour le passer en convention :D

 

EDIT: le snes starter kit contient l'example dont je parle et les binaires de wla-dx ainsi qu'un fichier batch qui va bien. L'example est show.asm:

 

http://nesdev.com/SNES-starterkit.zip

 

Il serait donc possible de faire un truc "simple" qui va prendre un ou plusieurs fichiers et les afficher

Partager ce message


Lien à poster
Partager sur d’autres sites

Arf, j'ai été un peu bête de faire (ré)inventer la roue :/

 

Néanmoins, je pense avoir pigé pourquoi ça bug ! C'est l'optimisation des tiles qui fout le brin, quand on dépasse la limite de tiles, il essaye d'optimiser, mais cette fonction merde :)

 

Akira, je peux considérer l'outil terminé (vu que ça fait le job, comme les Canadiens le disent) ?

 

Ou tu comptes faire le support bmp/png ?

(Sinon j'attends pour proposer cet outil sur la T.R.A.F ^^)

 

Je te remercie encore, ça me permet de voir mes travaux de typographie sur l'écran cathodique et LCD sans faire du hack de bourrin :wub:

Partager ce message


Lien à poster
Partager sur d’autres sites

Je suis toujours en train de bosser dessus.

J'ai :

- séparé les différentes fonction du programme en modules

- récupéré le support bmp/tga du gfx2snes d'Alekmaul.

- réglé le problème de drag&drop de fichiers

 

J'ai encore des soucis de calcul du tilemap (maintenant j'ai les deux tiles en bas à gauche de l'image qui sont décalées d'un pixel vers le bas.

Bref, je suis sur le job, je reviens vers toi pendant le weekend avec une autre version "stable"

Partager ce message


Lien à poster
Partager sur d’autres sites

Bon, pas trop eu le temps de bosser dessus ce weekend, mais voilà quand-même une version un peu plus complête.

Les trois points du post précédent sont réglés, j'ai légèrement retravaillé la génération du tilemap, maintenant tout est bon... sauf le premier tile qui est blanc.

En attendant mieux, j'ai re-joint les sources, l'exécutable, et quelques images de test.

Je suis toujours en train de bosser sur le support gf/png mais je ne suis pas loin d'abandonner, ça fait vraiment trop longtemps que je n'ai pas fait de C, j'ai pas mal perdu ;-)

gfx2sfc.7z

Partager ce message


Lien à poster
Partager sur d’autres sites

Ça a pris du temps, mais voilà la 1e version de prod de l'outil et un petit résumé des "fonctions" :

 

- correction des problèmes de drag & drop.

- correction de divers soucis d'allocation de mémoire.

- réécriture complète du générateur de tilemap.

- support des formats pcx, bmp, tga et png en couleurs indexées.

- centrage de l'image sur l'écran snes si sa taille est inférieure à 256x224.

- génération d'une rom avec un checksum correct.

- compilation statique de l'exe (pas de dll supplémentaires requises, d'où sa taille)

 

Je n'ai pas encore totalement nettoyé le code (basé sur gfx2snes, pas mal de choses qui ne servent pas pour cette utilisation là, donc c'est encore un peu fouilli).

 

Merci de rapporter les bugs éventuels (et il y en aura j'en suis sûr).

gfx2sfc-1.0.0.0.7z

Partager ce message


Lien à poster
Partager sur d’autres sites

Et bien pour le moment, le png à l'air cool :)

 

Je dois encore tester les autres formats, notamment le tga (les couleurs sont étranges)

 

Le mario en BMP s'est retrouvé 'décalé' sans que je sache pourquoi, mais en réenregistrant le bmp, ça à marché après :]

 

En tout cas, même s'il est "imparfait" pour le moment ça fait ce qu'on lui demande !

 

Merci encore :)

Partager ce message


Lien à poster
Partager sur d’autres sites

Ah, le mario bmp c'est ma faute, j'ai oublié de supprimer la couche alpha en exportant de gimp :wink:
Pout le TGA, pas fait attention, mais c'est très possible que la palette ait une baffe, je n'ai pas retouché la méthode d'import d'origine,

Je peux essayer de la refaire avec libtarga ce qui ferait grossir un peu plus l'exe mais permettrai aussi de supporter les targa avec compression RLE.

Partager ce message


Lien à poster
Partager sur d’autres sites

Voilà une version qui utilise libtga au lieu de la fonction d'origine.

Par contre, j'ai un bug avec le support du RLE, je me pencherai dessus demain je pense.

 

Bom dia, muito obrigado por disponibilizar o aplicativo, me ajudou muito abraço,

Thanks, worked very well for me!

Partager ce message


Lien à poster
Partager sur d’autres sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Restaurer la mise en forme

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

Chargement

×
×
  • Créer...