void text_printC(int x, [purple]int[/purple] y, [purple]char[/purple] c, [purple]int[/purple] size, [purple]int[/purple] color)
{
[purple]int[/purple] i, j, byte_width, alpha;
char* data;
[b][blue]if[/blue][/b](c<32 || c>127 || size<1) [b][blue]return[/blue][/b];
byte_width = ((used_font[b]->[/b]width-1)>>3)+1;
data = used_font[b]->[/b]data + byte_width * used_font[b]->[/b]height * (c-32);
alpha = [maroon]32[/maroon] - ((color>>16) % 32);
color &= [maroon]0[/maroon]xFFFF;
[b][blue]for[/blue][/b](i=[maroon]0[/maroon] ; i<used_font[b]->[/b]height ; i++) {
[b][blue]for[/blue][/b](j=[maroon]0[/maroon] ; j<used_font[b]->[/b]width ; j++) {
[b][blue]if[/blue][/b](data[i*byte_width+(j>>3)] & (128>>(j&7)))
text_drawPoint(x+j*size, y+i*size, size, color, alpha);
[b][blue]else[/blue][/b] if(used_font[b]->[/b]flags & ANTIALIASING) { [green]// Antialiasing[/green]
[b][blue]if[/blue][/b](text_readPix(data, j, i-1, used_font[b]->[/b]width, used_font[b]->[/b]height)) {
[b][blue]if[/blue][/b](text_readPix(data, j-1, i, used_font[b]->[/b]width, used_font[b]->[/b]height)) text_antialias(x+j*size, y+i*size, size, color, alpha, [maroon]0[/maroon]);
[b][blue]if[/blue][/b](text_readPix(data, j+1, i, used_font[b]->[/b]width, used_font[b]->[/b]height)) text_antialias(x+j*size, y+i*size, size, color, alpha, [maroon]1[/maroon]);
}
[b][blue]if[/blue][/b](text_readPix(data, j, i+1, used_font[b]->[/b]width, used_font[b]->[/b]height)) {
[b][blue]if[/blue][/b](text_readPix(data, j-1, i, used_font[b]->[/b]width, used_font[b]->[/b]height)) text_antialias(x+j*size, y+i*size, size, color, alpha, [maroon]2[/maroon]);
[b][blue]if[/blue][/b](text_readPix(data, j+1, i, used_font[b]->[/b]width, used_font[b]->[/b]height)) text_antialias(x+j*size, y+i*size, size, color, alpha, [maroon]3[/maroon]);
}
}
}
}
}
void text_print(int x, [purple]int[/purple] y, char* c, [purple]int[/purple] size, [purple]int[/purple] color)
{
[purple]int[/purple] save_x = x;
[b][blue]for[/blue][/b]( ; *c ; c++) {
[b][blue]if[/blue][/b](*c == [gray]'\n'[/gray]) {
x = save_x;
y += (used_font[b]->[/b]height + used_font[b]->[/b]height/2) * size;
} [b][blue]else[/blue][/b] {
text_printC(x, y, *c, size, color);
x += size * text_widthC(*c);
}
}
}
Citer : Posté le 08/10/2013 19:05 | #
ben... c'est les fonctions de base du prizmsdk
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2
merci a tout le monde pour son soutien
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm
(dont je connais le nom, mais pas vous )Arcuz !Citer : Posté le 08/10/2013 19:07 | #
Ok
Ai-je besoin d'un <???????????.h> ?
Zelda de Smashmaster
Super Geek Brothers de Siapran
Pac-Man
Pac-Man Color
Meta Ball
Add-ins Jetpack Joyride et Pac-Man sur PRIZM (les 2 non commencés mais en réflexion)
A la recherche des sprites jetpack Joride si quelqu'un les a en couleur
Citer : Posté le 08/10/2013 19:39 | #
Il faut inclure par exemple <display.h> pour Bdisp_SetPoint_VRAM et <rtc.h> pour RTC_GetTicks
Mais par exemple un Bdisp_SetPoint_VRAM est équivalent à la fonction CL_point(x, y, couleur); au niveau de la syntaxe, et cette dernière n'est t-elle pas plus rapide ? Car je pense qu'il serait inutile de proposer une fonction de tracé de pixel et ne pas l'utiliser dans les fonctions proposée par la lib...
Si jamais, balade toi dans le dossier include, y'a des trucs sympas à trouver des fois...
Et pour la question de remplacer par 384, je pense qu'il serait plus judicieux de remplace même par "LCD_WIDTH_PX" pour 384 et par "LCD_HEIGHT_PX" pour le 216
Ils sont d'ailleurs définis dans le <display.h> ainsi :
#define LCD_HEIGHT_PX 216
Citer : Posté le 08/10/2013 22:06 | #
Oooh, mon CopySprite en 16 couleurs! :3
T'en veux des fonctions graphiques? J'ai un fichier .c/.h de ça. Le fichier est un peu crade, mais toutes les fonctions fonctionnent telles que prévues.
Ajouté le 08/10/2013 à 22:06 :
C'est dans les sources de Bust-a-Move. Fais-toi plaisir!
Citer : Posté le 09/10/2013 17:03 | #
Ok merci beaucoups
Zelda de Smashmaster
Super Geek Brothers de Siapran
Pac-Man
Pac-Man Color
Meta Ball
Add-ins Jetpack Joyride et Pac-Man sur PRIZM (les 2 non commencés mais en réflexion)
A la recherche des sprites jetpack Joride si quelqu'un les a en couleur
Citer : Posté le 12/10/2013 17:41 | #
Tiens, au passage, pour ceux qui compileraient en C99, vous risquez d'avoir des soucis de linker avec la fonction GetVRAMAdress de PierrotLL.
A ce moment là, au lieu de
{
asm([gray]"mov.l syscall_adress, r2\n"[/gray]
[gray]"mov.l getVRAM, r0\n"[/gray]
[gray]"jmp @r2\n"[/gray]
[gray]"nop\n"[/gray]
[gray]"syscall_adress: .long 0x80020070\n"[/gray]
[gray]"getVRAM: .long 0x01E6"[/gray]);
}
Utilisez
{
__asm__([gray]"mov.l syscall_adress, r2\n"[/gray]
[gray]"mov.l getVRAM, r0\n"[/gray]
[gray]"jmp @r2\n"[/gray]
[gray]"nop\n"[/gray]
[gray]"syscall_adress: .long 0x80020070\n"[/gray]
[gray]"getVRAM: .long 0x01E6"[/gray]);
}
C'est tout bête mais ça peut dépanner à l'occasion
Citer : Posté le 12/10/2013 17:43 | #
On peut compiler en C99 sur la Prizm ?
Citer : Posté le 12/10/2013 17:44 | #
Affirmatif ! Un petit "-std=c99" dans les CFLAGS du Makefile et Hop ! Le tour est joué !
Citer : Posté le 12/10/2013 17:50 | #
Petits chanceux
Citer : Posté le 13/10/2013 14:08 | #
D'ailleurs pour les fonctions point et toutes autres fonctions d'affichage. L'adresse de la VRAM ne devrait pas être fixée mais récupérée via la fonction getVRAMadress.
Citer : Posté le 13/10/2013 15:17 | #
C'est prévu dans la lib je pense, c'est juste que ça n'a pas été mis a jour ici, regarde la page précédente ou la première, je ne sais plus
Ajouté le 13/10/2013 à 18:53 :
Tiens, j'ai fait une routine de remplissage de polygone, n'ayant pas trouvé les dernières sources de Bust-A-Move, je ne sais pas si c'était dedans, donc voila
Je l'ai directement adaptée de ML et ça à l'air de bien marcher ! 8) :
ça à besoin de 4 arguments, un tableau contenants les abscisses des points, un les ordonnées, puis le nombre de segments, et la couleur de remplissage
C'est un peu le bazar, mais après à vous de voir comment vous l'agencez dans la lib
{
[purple]int[/purple] i, j, x, tmp;
j = p - 1;
x = t[r];
[b][blue]for[/blue][/b](i=p ; i<r ; i++)
{
[b][blue]if[/blue][/b](x > t[i ])
{
j++;
tmp = t[j];
t[j] = t[i ];
t[i ] = tmp;
}
}
t[r] = t[j+1];
t[j+1] = x;
[b][blue]return[/blue][/b] j + 1;
}
static void Filled_polygon_quicksord(int* t, [purple]int[/purple] p, [purple]int[/purple] r) [green]//from MonochromeLib by PierrotLL[/green]
{
[purple]int[/purple] q;
[b][blue]if[/blue][/b](p < r)
{
q = Filled_polygon_quicksord_partition(t, p, r);
Filled_polygon_quicksord(t, p, q-1);
Filled_polygon_quicksord(t, q+1, r);
}
}
void Filled_polygon(const [purple]int[/purple] *x, const [purple]int[/purple] *y, [purple]int[/purple] nb_vertices, unsigned short color) [green]//from MonochromeLib by PierrotLL[/green]
{
[purple]int[/purple] i, j, dx, dy, ymin, ymax;
[purple]int[/purple] *cut_in_line, nb_cut;
[b][blue]if[/blue][/b](nb_vertices < 3) [b][blue]return[/blue][/b];
cut_in_line = malloc(nb_vertices*sizeof(int));
[b][blue]if[/blue][/b](!cut_in_line) [b][blue]return[/blue][/b];
ymin = ymax = y[0];
[b][blue]for[/blue][/b](i=[maroon]1[/maroon] ; i<nb_vertices ; i++)
{
[b][blue]if[/blue][/b](y[i ] < ymin) ymin = y[i ];
[b][blue]if[/blue][/b](y[i ] > ymax) ymax = y[i ];
}
[b][blue]for[/blue][/b](i=ymin ; i<=ymax ; i++)
{
nb_cut = [maroon]0[/maroon];
[b][blue]for[/blue][/b](j=[maroon]0[/maroon] ; j<nb_vertices ; j++)
{
[b][blue]if[/blue][/b]((y[j]<=i && y[(j+1)%nb_vertices]>=i) || (y[j]>=i && y[(j+1)%nb_vertices]<=i))
{
dy = abs(y[j]-y[(j+1)%nb_vertices]);
[b][blue]if[/blue][/b](dy)
{
dx = x[(j+1)%nb_vertices]-x[j];
cut_in_line[nb_cut] = x[j] + /*random*/(abs(i-y[j]+sgn(i-y[j])/2)*dx/dy);
nb_cut++;
}
}
}
Filled_polygon_quicksord(cut_in_line, [maroon]0[/maroon], nb_cut-1);
j = [maroon]0[/maroon];
[b][blue]while[/blue][/b](j<nb_cut-2 && cut_in_line[j]==cut_in_line[j+1]) j++;
[b][blue]while[/blue][/b](j < nb_cut)
{
[b][blue]if[/blue][/b](j == nb_cut-1) Horizontal_Line(cut_in_line[j-1]+1, cut_in_line[j], i, color);
[b][blue]else[/blue][/b]
{
dx = [maroon]1[/maroon];
[b][blue]while[/blue][/b](j+dx<nb_cut-1 && cut_in_line[j+dx]==cut_in_line[j+dx+1]) dx++;
Horizontal_Line(cut_in_line[j], cut_in_line[j+dx], i, color);
j += dx;
}
j++;
}
}
free(cut_in_line);
}
Et y'a besoin donc de quelques autres trucs
Deux macros, les trois premières d'Eiyron, la dernière de moi, bien sue je me sois "inspiré" des premières si je puis dire, j'ai quelques "lacunes" en préprocesseur
#define min(a,b) (((a) < (b))? (a) : (b))
#define max(a,b) (((a) > (b))? (a) : (b))
#define sgn(a) ((a) < 0 ? (-1) : (a) > 0 ? (1) : (a))[/brown]
Et une fonction d'affichage de ligne horizontale :
{
unsigned short* VRAM = GetVRAMAdress();
[purple]int[/purple] i;
[purple]int[/purple] xi = max(min(x1,x2),[maroon]0[/maroon]);
[purple]int[/purple] xf = min(max(x1,x2),LCD_WIDTH_PX);
[b][blue]if[/blue][/b](y < 0 || y > LCD_HEIGHT_PX) [b][blue]return[/blue][/b];
[b][blue]for[/blue][/b](i=xi; i <= xf; i++)
VRAM[LCD_WIDTH_PX*y + i] = color;
}
Voila, je ne sais pas si c'était très utile que je l'adapte (existait-elle déjà ?) mais bon, ça peut peut être servir !
Citer : Posté le 15/10/2013 13:09 | #
T'as fait ce que je t'ai demandé?
Citer : Posté le 15/10/2013 14:59 | #
Moi ?
Citer : Posté le 15/10/2013 19:12 | #
Ah non, nevermind, me suis planté de personne. --".
Pas de nouvelles de Lancelot...
Ajouté le 15/10/2013 à 19:13 :
Il fait une lib graphique pour Prizm basée sur ces fonctions, ça devrait l'intéresser.
Citer : Posté le 15/10/2013 19:21 | #
Si si il est encore là, mais j'ai beaucoups de travail ,
je veux bien voir cette lib graphique pour Prizm , mais je ne sais pas comment on fait avec le Git ?
Zelda de Smashmaster
Super Geek Brothers de Siapran
Pac-Man
Pac-Man Color
Meta Ball
Add-ins Jetpack Joyride et Pac-Man sur PRIZM (les 2 non commencés mais en réflexion)
A la recherche des sprites jetpack Joride si quelqu'un les a en couleur
Citer : Posté le 15/10/2013 19:22 | #
git clone adresse_de_mon_repo. c'est pas toi qui l'a forké, que je sache?
Citer : Posté le 15/10/2013 20:33 | #
?? ??
Zelda de Smashmaster
Super Geek Brothers de Siapran
Pac-Man
Pac-Man Color
Meta Ball
Add-ins Jetpack Joyride et Pac-Man sur PRIZM (les 2 non commencés mais en réflexion)
A la recherche des sprites jetpack Joride si quelqu'un les a en couleur
Citer : Posté le 15/10/2013 20:34 | #
Tiens au passage, si tu veux ajouter la fonction de polygone rempli au post principal, te gènes pas
Citer : Posté le 20/10/2013 16:51 | #
Voilà désolé du retard
Zelda de Smashmaster
Super Geek Brothers de Siapran
Pac-Man
Pac-Man Color
Meta Ball
Add-ins Jetpack Joyride et Pac-Man sur PRIZM (les 2 non commencés mais en réflexion)
A la recherche des sprites jetpack Joride si quelqu'un les a en couleur
Citer : Posté le 21/12/2013 19:52 | #
Un autre topic regroupant les meilleurs fonctions Fx-cg20
Citer : Posté le 01/04/2015 15:52 | #
Salut, je ne peux utiliser aucune fonction sans bug à la compilation, sauf TEXT qui ne fonctionne pas (mais qui ne fait pas crasher la compil').
Voici mon code example.c :
[brown]#include <keyboard_syscalls.h>[/brown]
[brown]#include <ColorLib.h>[/brown]
void main(void) {
[purple]int[/purple] key;
line(10,[maroon]10[/maroon],[maroon]20[/maroon],[maroon]20[/maroon], [maroon]1[/maroon]);
[b][blue]while[/blue][/b] (!key_down(78))
{
[purple]int[/purple] a=[maroon]0[/maroon];
}
[b][blue]while[/blue][/b] (1) {
Bdisp_AllClr_VRAM();
GetKey(&key);
switch (key) {
}
}
[b][blue]return[/blue][/b];
}
Et j'ai inclus ColorLib dans le dossier include du PrizmSDK. Cela génère des .o et des .d, et me donne un joli "undefined reference to..." à chaque fonction. Auriez-vous une idée ? Je dois compiler le ColorLib.c pointé par ColorLib.h en même temps ? En ce cas, comment puis-je faire puisque la compilation, en ligne de commande, se passe grâce à Maxe.bat qui pointe sur un Maxe.exe ? Merci par avance.
Ajouté le 02/04/2015 à 13:37 :
Du coup, personne ne sait comment compiler plusieurs fichiers .c en même temps ?
Pong400
PierrePaCiseaux (CP400)
Les Triangles
Menu
ASCII
Nombres premiers