1

Salut les programmeurs !

Quelqu'un aurait-il une astuce/info sur comment intégrer un petit logo 256 couleurs dans un RSC ? Ressource Master ne propose que l'image bitmap noir&blanc, ou le CICON, mais la taille du RSC augmente vertigineusement... eek Et comme il ne faut pas dépasser les 64ko pour le RSC... sad


Je suppose un copy-raster mémoire vers la position de l'objet du RSC, mais je vois pas comment mettre ça en place dans un RSC, surtout au niveau du redraw... Et surtout comment charger une .img 256c en mémoire... (BLOAD ?)

Rajah, as tu déjà utilisé cette technique dans l'un de tes progs ?


Merci pour vos conseils éclairés ! top

2

- les bitmaps pour les îcones couleurs se trouvent en général en fin de fichier, donc ça peut encore dépasser 64Ko si ça se goupille bien.
- petit logo ? s'il est pas animé, tu peux virer les modes 1, 2, 4 plans ainsi que le mode 8 plans sélectionné, cela fera de la place.

- tout dépend de ce que tu veux faire de ce logo, et s'il est inclus dans un arbre complexe... si c'est en solo pour le démarrage, franchement, tu peux charger ton unique logo dans un RSC avec RSRC_LOAD, afficher, faire un RSRC_FREE, puis charger son vrai RSC.

J'avais testé différentes méthodes :
- Joe : plusieurs RSC chargés en même temps, je joue avec deux ou trois variables de BASEPAGE. Cela avait été OK, mais il faut que je teste avec MiNT 1.19
- Tramiel Quizz : avec un .OVL qui charge le très gros RSC. MiNT gueule maintenant (mais tolérait avant la 1.19) quand le programme est quitté (l'overlay est une application fille, qui est pourtant bien libérée). Faut que je change la méthode, les trois images du fond vont être séparées du RSC.
- MyJester a un RSC couleur bricolé par Mathieu DEMANGE, je sais pas comment ça marche, mais il charge les 120 Ko sans broncher.
- Teenage Queen : au niveau de la fenêtre d'info, c'est une image chargée séparément, et affichée avec cro_cpyfm après et par dessus le objc_draw. Pour le chargement, c'est une image dans une fenêtre.

Le mieux et le plus propre, c'est de bricoler ton format d'image au format standard : mode planar (chaque plan séparé) + palette à côté (si c'est pas celle système) qui sont converties au chargement en mode écran (fonction vdi vr_trnfm si c'est mode 256c ou ta fonction que tu codes si c'est en mode TC16/TC32).

Côté bidouille, tu peux toujours modifier les adresses mémoire des rasters des objets icône + leur taille + etc pour avoir une icone 16*1px dans ton RSC, et avoir les vrais rasters dans un RSC séparé ou une image :
http://toshyp.atari.org/en/008016.html#OBJECT
http://toshyp.atari.org/en/008016.html#CICONBLK
http://toshyp.atari.org/en/008016.html#CICON

Pour le format .(X)IMG : c'est galère en GFA, car c'est compressé. Vaut mieux bricoler son propre format d'image, ou utiliser une LDG du pack zView.

3

Merci Rajah pour les réponses... Bref, je suis pas sortit de l'auberge, comme on dit ! grin


Pour info, c'est juste histoire de faire de l'ornement, comme on dit... Voici mon test avec un CICON, et mon RSC fait 63ko... Bien entendu le tout en phase de dévloppement, j'ai donc viré mon CICON pour faire de la place, et ainsi ne pas dépasser les 64Ko (les 2 malheureux Dials prenait à eux seul 63ko ! eek : )
645565pmdoomfe.jpg


Rajah (./2) :
- les bitmaps pour les îcones couleurs se trouvent en général en fin de fichier, donc ça peut encore dépasser 64Ko si ça se goupille bien.

Va falloir que je fasses des tests, car j'ai toujours entendu parler de la limite des 64ko du RSC (sans bidouilles)

Rajah (./2) :
- petit logo ? s'il est pas animé, tu peux virer les modes 1, 2, 4 plans ainsi que le mode 8 plans sélectionné, cela fera de la place.

Je n'ai aucunes idées de quoi tu parles, je voit bien les plans, mais dans mon cas.... sad

Rajah (./2) :
- tout dépend de ce que tu veux faire de ce logo, et s'il est inclus dans un arbre complexe... si c'est en solo pour le démarrage, franchement, tu peux charger ton unique logo dans un RSC avec RSRC_LOAD, afficher, faire un RSRC_FREE, puis charger son vrai RSC.

Purement esthetique... Mais ton astuce est tout bonnement genialo-simplisisme pour le démarrage ! top

Rajah (./2) :
J'avais testé différentes méthodes :
- Joe : plusieurs RSC chargés en même temps, je joue avec deux ou trois variables de BASEPAGE. Cela avait été OK, mais il faut que je teste avec MiNT 1.19
- Tramiel Quizz : avec un .OVL qui charge le très gros RSC. MiNT gueule maintenant (mais tolérait avant la 1.19) quand le programme est quitté (l'overlay est une application fille, qui est pourtant bien libérée). Faut que je change la méthode, les trois images du fond vont être séparées du RSC.
- MyJester a un RSC couleur bricolé par Mathieu DEMANGE, je sais pas comment ça marche, mais il charge les 120 Ko sans broncher.
- Teenage Queen : au niveau de la fenêtre d'info, c'est une image chargée séparément, et affichée avec cro_cpyfm après et par dessus le objc_draw. Pour le chargement, c'est une image dans une fenêtre.

Le mieux et le plus propre, c'est de bricoler ton format d'image au format standard : mode planar (chaque plan séparé) + palette à côté (si c'est pas celle système) qui sont converties au chargement en mode écran (fonction vdi vr_trnfm si c'est mode 256c ou ta fonction que tu codes si c'est en mode TC16/TC32).

Côté bidouille, tu peux toujours modifier les adresses mémoire des rasters des objets icône + leur taille + etc pour avoir une icone 16*1px dans ton RSC, et avoir les vrais rasters dans un RSC séparé ou une image :
http://toshyp.atari.org/en/008016.html#OBJECT
http://toshyp.atari.org/en/008016.html#CICONBLK
http://toshyp.atari.org/en/008016.html#CICON

Pour le format .(X)IMG : c'est galère en GFA, car c'est compressé. Vaut mieux bricoler son propre format d'image, ou utiliser une LDG du pack zView.

C'est le maitre qui dépasse le simple disciple que je suis... Je suis complètement largué dès que cela devient un peu technique ! grin

Merci Rajah, je croit que je vais m'en tenir à mon bon bitmap mono pour le moment, et ainsi avancer dans mon projet, l'esthetisme attendra ! lol

4

Cela rend bien à l'écran. Tu devrais persévérer.

Je te conseille une image à charger séparément (avec le masque). Voir la méthode dans le source de Teenage Queen. Je peaufine le Litchi en ce moment, suivi de correctifs vite expédiés, donc bientôt du temps. Si ça te dit, je peux te bricoler les routines qui vont bien.

5

Rajah (./4) :
Je peaufine le Litchi en ce moment, suivi de correctifs vite expédiés, donc bientôt du temps. Si ça te dit, je peux te bricoler les routines qui vont bien.


Oui Oui Oui ! 50% de mon code est pompé sur tes sources adaptées à mes besoins ! grin

Et en plus j'ai même pas honte ! Hou ! Auto-Flagellation !

Je récite de ce pas, 7 Paters et 3 Notre-Dame, le tout en m'auto-flagellant... lol

6

Playmobil (./1) :
Salut les programmeurs !

Quelqu'un aurait-il une astuce/info sur comment intégrer un petit logo 256 couleurs dans un RSC ? Ressource Master ne propose que l'image bitmap noir&blanc, ou le CICON, mais la taille du RSC augmente vertigineusement... eek Et comme il ne faut pas dépasser les 64ko pour le RSC... sad


Je suppose un copy-raster mémoire vers la position de l'objet du RSC, mais je vois pas comment mettre ça en place dans un RSC, surtout au niveau du redraw... Et surtout comment charger une .img 256c en mémoire... (BLOAD ?)

Rajah, as tu déjà utilisé cette technique dans l'un de tes progs ?


Merci pour vos conseils éclairés ! top


Salut,

j'avais pas vu le message.

j'ai quelques solutions à te suggérer

1) prendre le dernier MyAES 0.96 beta1, utiliser l'appel systeme appl_get_cicon() et donner le chemin d'une image PNG 32 bits, il te renvoi une structure cicon à recopier et à reloger (assez simple j'ai fait des exemples), il reste plus qu'a creer un objet CICON dont ob_spec point sur la structure cicon, puis objc_draw() et le système se charge de tout. Problème seul le nouveau MyAES fait cela!
2) Plus compliqué utiliser screen.ldg et une lib comme jpeg.ldg ou png.ldg de zview! >faut charger l'image avec la lib puis la transformer au format image avec screen.ldg.

Dans les 2 cas je peux un peu aider, par de exemples

Voilà

Olivier

7

Merci Olivier pour la mise sur la voie, je serait preneur de l'option 1, car je veux du pur gem.... Mais ton aide qui sera certainement en C, va falloir que je la convertisse en GFA...

En tout cas je suis preneur de tout code, j'aime décortiquer les trucs farfelus ! lol

P.S : Pour MyAes, je suis justement en train de l'installer sur mon EasyMint, mais encor pas mal de configuration à faire dessus... top

8

Tu veux du farfelu ? J'ai mis à jour ce week-end en rafale "mes" jeux, sur http://ptonthat.fr/category/atari-games/
Concernant un possible plantage lors de la lecture du fichier de préférences. Mais Tramiel Quizz et Rosemary's Racoon Strip Game ont reçu des patchs au niveau des images de leur RSC.

1) Tramiel Quizz, l'overlay permettant de surcharger le RSC en image n'était plus compatible MiNT 1.19 (ça gueule en quittant). Donc les 3 images de fond ont été retirées du RSC.
- à la place dans le RSC, des objet G_IMAGE bidons et qui seront bidouillés.
- les rasters sont des images monochromes, format IMG au début, ont été converties en raster non compressé, format VDI/DGI = 20 octets correspondant à une MFDB (qui contient largeur et hauteur), puis parfois palette (96 octets, pour 16 * (1 int R, 1 int V, 1 int B, ou 1536 octets pour 256 * (1 int R, 1 int V, 1 int B)), puis les données brutes. Ici pas de palette, et 1 seul bitplane. Dans le cas de couleurs, c'est format standard, non entrelacé, les données de chaque bitplane sont séparés. Tu peux trouver le convertisseur dans les sources de Rosemary's et Teenage Queen.
- les fichiers VDI/DGI ne seront pas modifiés, donc je les charge à l'avance dans des INLINE GFA (c'est plus pratique)
- lorsque je veux afficher le fond d'écran qui contient ces images, je bidouille largueur, hauteur, et pointeur (adresse RAM = inline% ).
- l'AES s'occupe de redessiner cela.

2) Rosemary's : dans la fenêtre d'info, les icônes (couvertures d'album de Sylféline) ne s'affichaient pas sur les AES récents. A l'origine, problème de palette, donc je récupérais le pointeur sur les données raster et effectuais une conversion. Sur les nouveaux AES, le RSRC_LOAD converti directement l'icone 8 plans en 32 plans... sans tenir compte de la palette voulues. Donc caca.
- pour être propre, autant faire de vraies images, stockées de façon externe (n'étant pas monochrome, il y a conversion au format écran).
- routines de conversions, 4 ou 8 plans, vers le format écran, 16 couleurs à TC32.
- le même utilitaire de conversion permet de sortir un fichier VDI/DGI.
- pour l'affichage, j'utilise un objet bidon encore (le logo Queen Meka) que je masque (bit 7 de OB_FLAGS) et bidouille les largeur+hauteur.
- lorsque je demande un redessin, je prend les coordonnées de cet objet (tree bidon numéro 10), et affiche le tout avec un vro_cpyfm (redraw "manuel", effectué lorsqu'il y a un redraw dans la fenêtre).

Pour ton cas :
- soit tu peux rester avec l'icône dans le RSC, essaye de la placer à la fin. L'AES tolère le dépassement 64K pour les données des icônes couleurs.
- soit tu externalises, avec deux fichiers (sprite et masque) externes. la méthode de "swap" peut marcher, mais pour être propre, il vaut mieux utiliser la VDI. Tu appliques le masque avec un vrt_cpyfm (raster tel quel) et tu apposes le sprite avec vro_cpyfm (raster devant être converti au format écran).
-> ma proposition tiens toujours. Vais avoir un peu de temps la semaine prochaine. Le mieux serait que je travaille sur tes sources, et te rende le programme avec les routines qui vont bien. Stricte confidentialité bien sûr.

Remarque :
- si tu ne veux pas de casser la tête avec les coordonnées lors de l'affichage VDI, tu peux faire un raster qui tient la fenêtre entière, et ensuite dessins les objets GEM, le fond du dialogue étant transparent.

9

Playmobil (./7) :
Merci Olivier pour la mise sur la voie, je serait preneur de l'option 1, car je veux du pur gem.... Mais ton aide qui sera certainement en C, va falloir que je la convertisse en GFA...

En tout cas je suis preneur de tout code, j'aime décortiquer les trucs farfelus ! lol

P.S : Pour MyAes, je suis justement en train de l'installer sur mon EasyMint, mais encor pas mal de configuration à faire dessus... top


Bon faut télécharger la dernière archive et la petite mise à jours (sinon ca ne marche que sur les résolutions >=24bits!) ici : http://myaes.lutece.net/telechargement/myaes.zip
Dans le dossier myaes\doc tu trouveras devdocs.txt, en bas du texte il y a les explications en anglais de appl_get_cicon() avec le binding

Dans ton cas ce qui va t'intéresser c'est d'utiliser le type 3 (tu fournis le chemin d'un PNG)

ensuite tu as un exemple en C nommé "tcicon.c"
Le principe: appl_get_cicon() renvoi un pointeur sur une structure de type CICON et les bitmaps associés (l'icone couleur et le masque), ce buffer n'est pas permanent et sera effacé au prochain appel à appl_get_cicon() donc il faut dans 1 premier temps recopier ce buffer, puis le reloger (les différents pointeurs sont relatifs au début du buffer (sauf si NULL dans ce cas c'est qu'il n'y a pas)), ensuite il faut créer l'objet G_CICON (myaes se fout d'avoir tout un tas de résolution) ou légèrement modifier un objet G_CICON présent dans ton RSC.

En relisant le code, je viens de me rendre compte que j'ai fait un raccourci gênant pour déterminer la taille du buffer à recopier, j'ai supposé que l'image est en 24 bits (ce qui est toujours le cas actuellement mais pas ce qui pourrait arriver par ailleurs)
La taille devrait plutôt se calculer ainsi:
size = ((long)*cicon_width*(long)*cicon_height*(long)cicon_data->num_planes/8L+((long)*cicon_width*(long)*cicon_height/8L));
if(cicon_data->sel_data) size = size + size; /* dans ton cas ce ne sera jamais le cas à toi de gérer si nécessaire en 2 appels */
size = size + sizeof(CICON);

ca c'est la taille du buffer à allouer et à recopier, dans mon exemple je rajoute une liste chainée pour gérer un cache mais dans ton cas pas besoin du tout.



Olivier

10

Désolé pour la réponse tardive, mais merci Rajah et OL... Pas eu le temps de coder une seule ligne cette semaine, mais la semaine prochaine vacance 15 jours, ca va m'occuper ! top