[SDK] MonochromeLib - une lib graphique monochrome
Posté le 09/06/2010 02:22
MonochromeLib, qu'est ce que c'est ?
MonochromeLib est une bibliothèque de dessin pour le SDK Casio Graph 85.
Elle fournit aux développeurs des fonctions optimisées pour tracer toute sorte de choses à l'écran.
Chaque fonction de MonochromeLib est bien plus rapide que son équivalent dans fxlib.h, et elle fournit de nombreuses fonctionnalités supplémentaires.
Comment l'utiliser
Pour utiliser la bibliothèque, copiez les 2 fichiers dans le dossier de votre projet, ajoutez MonochromeLib.c à votre projet (dans la fenêtre "Files in project" dans le SDK), ajoutez #include "MonochromeLib.h" au début de votre code.
Pour n'ajouter à votre projet que les fonctions dont vous avez besoin, chaque fonction est protégée par un #ifdef, et les #define de chaque fonction sont commentés par défaut.
Pour pouvoir utiliser une fonction, il suffit d'éditer MonochromeLib.h et de décommenter les #define des fonctions que vous voulez utiliser.
/!\ Important
Si vous rencontrez une erreur de compilation de ce type :
** L2310 (E) Undefined external symbol "_ML_pixel" referenced in "C:\...\CASIO\fx-9860G SDK\Projet\Debug\MonochromeLib.obj"
et que le #define de la fonction en question est bien actif dans MonochromeLib.h, alors il faut juste recompiler MonochromeLib.c
Pour cela, Utilisez la fonction Project > Rebuilt all dans le SDK. Si cela ne résoud pas le problème, supprimez le dossier Debug de votre projet, et recompilez normalement.
N'attendez plus !
Une documentation complète est maintenant fournie dans l'archive zip, en anglais et en français.
Questions récurrentes :
Problème : voici mon code, le compilateur ne veux pas le compiler :
unsigned char image[] = { ... };
ML_clear_vram();
ML_BMP_OR(image, 21, 42, 34, 34);
ML_clear_vram();
Solution : toutes les fonctions de MonochromeLib s'appellent en minuscule : les seules majuscules sont celles du "ML". Relisez la doc ou le
wiki, et regardez l'orthographe exacte de la fonction.
Version actuelle : 22 novembre 2011
Télécharger MonochromeLib
Citer : Posté le 03/06/2014 22:30 | #
Tu as parfaitement raison Xavier59, l'erreur est présente dans le header et dans la doc.
MonochromeLib aurait bien besoin d'une mise à jour. Si vous pouviez m'aider à rassembler tous les trucs à corriger pour me faire une todo-list, je veux bien repasser dessus une dernière fois.
Après franchement si vous vous sentez d'y apporter vos modifications, je n'y vois aucun inconvénient. Je ne suis plus du tout présent et ne code plus rien pour calculette, donc si la lib continue d'être utilisée elle aura besoin de gens pour la maintenir. Je pense notamment à la compatibilité SH4, c'est le genre de truc dont on ne peut pas se passer.
Pour la todo-list, voici ce que j'ai pour le moment :
- ML_filled_ellipse_in_rect : corriger paramètres (header+doc)
- ML_bmp : il me semble qu'une des fonctions AND ne se comporte pas correctement
- ML_vram_adress : corriger en address (gérer rétro-compatibilité)
- ML_get_contrast : ne fonctionne pas
- Compatibilité SH4
- Fournir une todo-list et un changelog avec la release
Si vraiment motivé :
- Intégrer le module de texte que j'avais commencé
- Tester les performances d'autres algo pour les polygones pleins
- Ajouter une fonction ML_horizontal_scroll_area
- Ajouter une fonction de tracé de ligne large
- Inclure un convertisseur bitmap, ça évitera les prises de tête pour les débutants
- Enrichir la doc
- Commenter le code
@Eltoredo : Tu n'imagines pas à quel point ça me fait plaisir de voir que ce projet vieux de maintenant 4 ans est encore une référence
Citer : Posté le 04/06/2014 09:25 | #
Il faudrait que tu nous dises au moins quels algos tu utilises, on ne les connaît pas dans l'ensemble... du coup impossible de commenter le code, ou de l'optimiser -- si tenté qu'on le puisse encore.
Il me semble qu'Intelligide bosse sur une lib qui permet le mouvement, scroll, rotation de bitmaps.
Une version compatible SH4 de la lib existait déjà par ailleurs, avec le syscall qui convenait pour la VRAM.
Enfin, j'ai moi-même fait une lib de texte.
Au final si on croise tout, on a déjà de bonnes bases.
Citer : Posté le 04/06/2014 09:47 | #
Tu as parfaitement raison Xavier59, l'erreur est présente dans le header et dans la doc.
MonochromeLib aurait bien besoin d'une mise à jour. Si vous pouviez m'aider à rassembler tous les trucs à corriger pour me faire une todo-list, je veux bien repasser dessus une dernière fois.
Sans rire? Tu veux bien refaire un tour avec nous? Cool. Dommage que tu aies quitté la programmation sur Casio par contre, t'étais un des meilleurs.
Après franchement si vous vous sentez d'y apporter vos modifications, je n'y vois aucun inconvénient. Je ne suis plus du tout présent et ne code plus rien pour calculette, donc si la lib continue d'être utilisée elle aura besoin de gens pour la maintenir.
J'ai des plans pour maintenir un GitHub avec cette lib, GrayscaleLib si elle marche de partout (et si je l'ai retrouvée) et ECode (plus une nouvelle lib graphique que je suis en train de mettre au point avec Siapran). Ca permettra aux gens de pouvoir trouver plus facilement les fonctions qu'il faut et ne pas avoir à gérer maintes et maintes versions du même fichier.
@Eltoredo : Tu n'imagines pas à quel point ça me fait plaisir de voir que ce projet vieux de maintenant 4 ans est encore une référence
Pierrot... N'importe quel projet que je fais commence par une inclusion de ML. C'est juste la lib la plus utilisée dans les projets en C ici.
Je me souviens d'une discussion avec toi où tu parlais d'une version ASM de la lib, est-ce toujours d'actualité? Gratter quelques cycles ici serait pas mal, surtout dans les fonctions de dessin de sprites.
Citer : Posté le 28/08/2014 11:32 | #
J'ai commencé une FAQ, ce sera à compléter avec les questions/problèmes récurrents
Citer : Posté le 28/08/2014 15:30 | #
Bravo pour cette magnifique lib pierrotll
Sinon pour ton problème récurant en exemple il faudrait peut-être mettre display_vram(); pasque mettre en minuscule ne fais pas tout .
J'utilise tout le temps ta doc mais j'ai pas réussi à trouver le contraste max et le contraste min qui permet de faire de beaux effets de fondus comme sur ton Orton (un des mes jeux préférés ) les connais-tu ?
-Mon Fall Down
-Mon jeu de mains
-Mon starwars
-Mon dessinatout
-Mon niaiseux version 2.0
-Mon niaiseux version 3.0
-Inferno
-Mon super labyrinthe (en cours)
-Mon call of duty en 3D
-Casion (avec Az)
Citer : Posté le 31/08/2014 10:34 | #
J'utilise tout le temps ta doc mais j'ai pas réussi à trouver le contraste max et le contraste min qui permet de faire de beaux effets de fondus comme sur ton Orton (un des mes jeux préférés ) les connais-tu ?
Le contraste dépend de la calculatrice, regarde dans les sources de I robot de Nitrosax, il a plus ou moins géré ça.
Par contre ces fonctions ne sont pas compatibles SH4, donc je ne pense pas que ce soit une bonne idée que de les utiliser.
Escape prison
Bloxorz
Free wheel
QR code
Nombre en or
RayCasting Engine
Mario Party
Zelda
et Planète Casio
Citer : Posté le 31/08/2014 10:41 | #
Il faut savoir que la fonction ML_get_contrast() ne fonctionne pas
Donc la meilleure solution consiste à faire choisir à l'utilisateur la valeur du contraste qu'il préfère, puis à enregistrer cette valeur afin de la réutiliser plus tard
Citer : Posté le 31/08/2014 11:49 | #
A zut en fait je voulais juste faire un effet de fondu de maniere à augmenter le contrste puis a le diminuer jusqu'à eevenir au normal, mais pendant ce temps, l'image affichée aurait changée
-Mon Fall Down
-Mon jeu de mains
-Mon starwars
-Mon dessinatout
-Mon niaiseux version 2.0
-Mon niaiseux version 3.0
-Inferno
-Mon super labyrinthe (en cours)
-Mon call of duty en 3D
-Casion (avec Az)
Citer : Posté le 31/08/2014 12:34 | #
Tu peux, mais pour remettre le contraste à la valeur initiale, il faut demander à l'utilisateur celle qu'il préfère
Ajouté le 31/08/2014 à 12:35 :
Regarde les sources d'iRobot, ou de Gravity Guy
Citer : Posté le 27/10/2014 18:42 | #
J'ai un problème avec la fonction ML_polygon:
Voici le code http://pastebin.com/rpaaacDj
ça compile très bien, mais lorsque je lance le jeu, l’exécution se bloque au niveau de ML_polygon (ce n'est pas une erreur système ni un breakpoint)
Citer : Posté le 27/10/2014 18:45 | #
Pourquoi tu compiles le code de Xavier59 (qu'il n'a pas écrit d'ailleurs) sur la rotation de carré ?
En attendant, ML_polygon() prend des int * il me semble.
Citer : Posté le 27/10/2014 18:48 | #
Pourquoi tu compiles le code de Xavier59
Euh peut être parce qu’on fait un jeu ensemble pour le concours ?
Soit dit en passant, il n'a jamais dit, ni même sous entendu que j'avais écrit ce code
Citer : Posté le 27/10/2014 18:49 | #
Xavier et moi ont bosse sur le même projet
C'est pour ce projet d'ailleurs que je cherche à utiliser ML_polygon et ML_filled_polygon mais ça fonctionne pas
Ajouté le 27/10/2014 à 18:50 :
Edit: j'ai remplacé les tableaux par des int et ça marche
Citer : Posté le 19/01/2016 18:42 | #
Pour pouvoir utiliser les fonctions il faut enlever tous les // du .h ?
Un beat them all pour les CPC 19
Un jeu de Tank multijoueur en version graphique
Un jeu de boxe rigolo
Le moteur de combat épique d'un RPG
soccer physics : Un jeu de foot totalement wtf !
Survie 1 & 2 te laisseras-tu attraper par la méchante IA ?
Séquestrez les tous avec Catch'em all !
Joué à la calcultarice et pécher ? Facile !
Battle un système de combat dément !!
Débombe pas tout à fait un démineur
Mon mario pour le concours des 10 ans de PC
Casio jump un doodle jump pas comme les autres !
Rush four your life : tu cours ou tu meurs
Cookie clicker ! More cookies MOOORE !
Move et esquive : bouge pour esquiver les ennemis !
Guitar Hero !! Let's rock !
INVASION : Au secours on se fait envahir !
Un devine nombre entièrement customisable (mon 1er jeu)
Un outil pour dessiner des sprites en super drawstat et qui vous le compile pour vous donner un code utilisable dans vos programmes
Un super programme de dessin bourré de trucs funcs
Sortir une version finale de Tankasio
Bien m'améliorer en C parce que pour l'instant c'est pas jojo
Une ou plusieurs idées qui mûrissent petit à petit
Citer : Posté le 19/01/2016 18:44 | #
Normalement Le #Define All permet de toutes les utiliser.
- Kirby's DreamLand : Gobe , Gobe , Gobe !!!
- L'invasion Seanchans : Détruit la flotte ennemis a bord du "Danseur des vagues".
Citer : Posté le 19/01/2016 18:46 | #
Merci je viens de le faire et les fonctions s'écrivent bien :
ML_clear_vram;
et pas :
ML_clear_cram() ?
Un beat them all pour les CPC 19
Un jeu de Tank multijoueur en version graphique
Un jeu de boxe rigolo
Le moteur de combat épique d'un RPG
soccer physics : Un jeu de foot totalement wtf !
Survie 1 & 2 te laisseras-tu attraper par la méchante IA ?
Séquestrez les tous avec Catch'em all !
Joué à la calcultarice et pécher ? Facile !
Battle un système de combat dément !!
Débombe pas tout à fait un démineur
Mon mario pour le concours des 10 ans de PC
Casio jump un doodle jump pas comme les autres !
Rush four your life : tu cours ou tu meurs
Cookie clicker ! More cookies MOOORE !
Move et esquive : bouge pour esquiver les ennemis !
Guitar Hero !! Let's rock !
INVASION : Au secours on se fait envahir !
Un devine nombre entièrement customisable (mon 1er jeu)
Un outil pour dessiner des sprites en super drawstat et qui vous le compile pour vous donner un code utilisable dans vos programmes
Un super programme de dessin bourré de trucs funcs
Sortir une version finale de Tankasio
Bien m'améliorer en C parce que pour l'instant c'est pas jojo
Une ou plusieurs idées qui mûrissent petit à petit
Citer : Posté le 19/01/2016 18:49 | #
Non non, il y a bien les parenthèses .
ML_clear_vram();
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)
Citer : Posté le 19/01/2016 18:56 | #
Il veut pas build avec les parenthèses
Aussi ceci ne fonctionne pas : ML_bmp_or_cl(perso, X, Y, 7, 12);
J'ai défini perso grâce au sprite converter et je n'ai rien changé, il fait bien 7 de large par 12 de haut alors je ne comprends pas
edit : j'ai bien mis #include "MonochromeLib.h" au début
edit : ML_line(1, 32, 127, 32, 1); il ne veut pas non plus
edit : j'ai fait rebuild all mais ça ne fonctionne toujours pas
edit : J'ai supprimé debug et rien
Le code http://hastebin.com/uxatonoxab.avrasm
Un beat them all pour les CPC 19
Un jeu de Tank multijoueur en version graphique
Un jeu de boxe rigolo
Le moteur de combat épique d'un RPG
soccer physics : Un jeu de foot totalement wtf !
Survie 1 & 2 te laisseras-tu attraper par la méchante IA ?
Séquestrez les tous avec Catch'em all !
Joué à la calcultarice et pécher ? Facile !
Battle un système de combat dément !!
Débombe pas tout à fait un démineur
Mon mario pour le concours des 10 ans de PC
Casio jump un doodle jump pas comme les autres !
Rush four your life : tu cours ou tu meurs
Cookie clicker ! More cookies MOOORE !
Move et esquive : bouge pour esquiver les ennemis !
Guitar Hero !! Let's rock !
INVASION : Au secours on se fait envahir !
Un devine nombre entièrement customisable (mon 1er jeu)
Un outil pour dessiner des sprites en super drawstat et qui vous le compile pour vous donner un code utilisable dans vos programmes
Un super programme de dessin bourré de trucs funcs
Sortir une version finale de Tankasio
Bien m'améliorer en C parce que pour l'instant c'est pas jojo
Une ou plusieurs idées qui mûrissent petit à petit
Citer : Posté le 19/01/2016 19:19 | #
Essaye avec uniquement ça dans ta boucle (passe le reste en commentaire avec /* */)
ML_clear_vram();
//Dessin
ML_line(1, 32, 127, 32, 1);
ML_display_vram();
}
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)
Citer : Posté le 19/01/2016 19:20 | #
Le nouveau code : http://hastebin.com/okecanozov.java
Je test kirafi
Ajouté le 19/01/2016 à 19:21 :
Que neni
Un beat them all pour les CPC 19
Un jeu de Tank multijoueur en version graphique
Un jeu de boxe rigolo
Le moteur de combat épique d'un RPG
soccer physics : Un jeu de foot totalement wtf !
Survie 1 & 2 te laisseras-tu attraper par la méchante IA ?
Séquestrez les tous avec Catch'em all !
Joué à la calcultarice et pécher ? Facile !
Battle un système de combat dément !!
Débombe pas tout à fait un démineur
Mon mario pour le concours des 10 ans de PC
Casio jump un doodle jump pas comme les autres !
Rush four your life : tu cours ou tu meurs
Cookie clicker ! More cookies MOOORE !
Move et esquive : bouge pour esquiver les ennemis !
Guitar Hero !! Let's rock !
INVASION : Au secours on se fait envahir !
Un devine nombre entièrement customisable (mon 1er jeu)
Un outil pour dessiner des sprites en super drawstat et qui vous le compile pour vous donner un code utilisable dans vos programmes
Un super programme de dessin bourré de trucs funcs
Sortir une version finale de Tankasio
Bien m'améliorer en C parce que pour l'instant c'est pas jojo
Une ou plusieurs idées qui mûrissent petit à petit
Citer : Posté le 19/01/2016 19:22 | # | Fichier joint
Hum... remplace ton fichier Monochrome.lib par celui que j'utilise (en PJ).
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)