summaryrefslogtreecommitdiff
path: root/rpg.c
diff options
context:
space:
mode:
Diffstat (limited to 'rpg.c')
-rw-r--r--rpg.c181
1 files changed, 76 insertions, 105 deletions
diff --git a/rpg.c b/rpg.c
index b725995..aee39ba 100644
--- a/rpg.c
+++ b/rpg.c
@@ -12,7 +12,68 @@
struct rpg_t rpg_g;
-static void colorize_surface(SDL_Surface *surf, const SDL_PixelFormat *fmt, Uint32 incr)
+static Uint32 get_pixel(SDL_Surface *surface, int x, int y)
+{
+ int Bpp = surface->format->BytesPerPixel;
+ Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * Bpp;
+
+ switch (Bpp)
+ {
+ case 1:
+ return *p;
+
+ case 2:
+ return *(Uint16 *)p;
+
+ case 3:
+ if(SDL_BYTEORDER == SDL_BIG_ENDIAN) {
+ return p[0] << 16 | p[1] << 8 | p[2];
+ } else {
+ return p[0] | p[1] << 8 | p[2] << 16;
+ }
+ case 4:
+ return *(Uint32 *)p;
+
+ default:
+ return 0;
+ }
+}
+
+static void set_pixel(SDL_Surface *surface, int x, int y, Uint32 pixel)
+{
+ int Bpp = surface->format->BytesPerPixel;
+ Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * Bpp;
+
+ switch (Bpp)
+ {
+ case 1:
+ *p = pixel;
+ break;
+
+ case 2:
+ *(Uint16 *)p = pixel;
+ break;
+
+ case 3:
+ if(SDL_BYTEORDER == SDL_BIG_ENDIAN) {
+ p[0] = (pixel >> 16) & 0xff;
+ p[1] = (pixel >> 8) & 0xff;
+ p[2] = pixel & 0xff;
+ } else {
+ p[0] = pixel & 0xff;
+ p[1] = (pixel >> 8) & 0xff;
+ p[2] = (pixel >> 16) & 0xff;
+ }
+ break;
+
+ case 4:
+ *(Uint32 *)p = pixel;
+ break;
+ }
+}
+
+static void
+colorize_surface(SDL_Surface *surf, const SDL_PixelFormat *fmt, Uint32 incr)
{
int buffer = 0;
Uint8 r, g, b;
@@ -24,7 +85,7 @@ static void colorize_surface(SDL_Surface *surf, const SDL_PixelFormat *fmt, Uint
for (int y = 0; y < surf->h; ++y) {
for (int x = 0; x < surf->w; ++x) {
- Uint32 pixel = obtenirPixel(surf, x, y);
+ Uint32 pixel = get_pixel(surf, x, y);
SDL_GetRGB(pixel, fmt, &r, &g, &b);
@@ -47,7 +108,7 @@ static void colorize_surface(SDL_Surface *surf, const SDL_PixelFormat *fmt, Uint
b = buffer;
pixel = SDL_MapRGB(fmt, r, g, b);
- definirPixel(surf, x, y, pixel);
+ set_pixel(surf, x, y, pixel);
}
}
@@ -57,7 +118,7 @@ static void colorize_surface(SDL_Surface *surf, const SDL_PixelFormat *fmt, Uint
static void colorize_every_red_surface(SURFACES *surfaces)
{
- const SDL_PixelFormat *fmt = surfaces->Pecran->format;
+ const SDL_PixelFormat *fmt = surfaces->screen->format;
Uint32 red = SDL_MapRGB(fmt, 30, 0, 0);
colorize_surface(surfaces->red_paladin, fmt, red);
@@ -107,7 +168,8 @@ static int rpg_load_images(SURFACES *surfaces)
static int rpg_initialize_sprites(void)
{
#define set_color_key(surf_, r_, g_, b_) \
- SDL_SetColorKey((surf_), SDL_SRCCOLORKEY, SDL_MapRGB(rpg_g.surfaces.screen->format, (r_), (g_), (b_)))
+ SDL_SetColorKey((surf_), SDL_SRCCOLORKEY, \
+ SDL_MapRGB(rpg_g.surfaces.screen->format, (r_), (g_), (b_)))
#define load_sprite(surf_) \
tmp = SDL_DisplayFormat((surf_)); \
@@ -157,7 +219,8 @@ static int rpg_initialize_sprites(void)
load_sprite(rpg_g.surfaces.background);
rpg_g.surfaces.Pfondjeu = rpg_g.surfaces.background;
- rpg_g.surfaces.red_warrior_gobelin = SDL_DisplayFormat(rpg_g.surfaces.Pgobelin);
+ rpg_g.surfaces.red_warrior_gobelin =
+ SDL_DisplayFormat(rpg_g.surfaces.Pgobelin);
if (rpg_g.surfaces.red_warrior_gobelin == NULL)
return -1;
@@ -176,7 +239,8 @@ static int rpg_initialize_sprites(void)
return 0;
}
-static void Finitialiserpositions (POSITIONS *positions, const SURFACES *surfaces)
+static void
+Finitialiserpositions(POSITIONS *positions, const SURFACES *surfaces)
{
int y = 0, z = 0;
@@ -219,7 +283,9 @@ static void Finitialiserpositions (POSITIONS *positions, const SURFACES *surface
}
}
- /* TODO this is pretty uggly .. and we can have multiple cursors as well */
+ /*
+ * TODO this is pretty uggly .. and we can have multiple cursors as well
+ */
positions->last_cursor = (SDL_Rect){0, 0, 0, 0};
}
@@ -251,7 +317,8 @@ static int rpg_init(int width, int height)
return -1;
}
- rpg_g.screen = SDL_SetVideoMode(width, height, 0, SDL_HWSURFACE | SDL_DOUBLEBUF);
+ rpg_g.screen = SDL_SetVideoMode(width, height, 0,
+ SDL_HWSURFACE | SDL_DOUBLEBUF);
if (rpg_g.screen == NULL) {
fprintf(stderr, "SDL_SetVideoMode: %s\n", SDL_GetError());
@@ -343,99 +410,3 @@ int main (int argc, char *argv[])
return 0;
}
-
-
-/* ********************************************************************* */
-/*obtenirPixel : permet de récupérer la couleur d'un pixel
-Paramètres d'entrée/sortie :
-SDL_Surface *surface : la surface sur laquelle on va récupérer la couleur d'un pixel
-int x : la coordonnée en x du pixel à récupérer
-int y : la coordonnée en y du pixel à récupérer
-
-Uint32 resultat : la fonction renvoie le pixel aux coordonnées (x,y) dans la surface
-*/
-Uint32 obtenirPixel(SDL_Surface *surface, int x, int y)
-{
- /*nbOctetsParPixel représente le nombre d'octets utilisés pour stocker un pixel.
- En multipliant ce nombre d'octets par 8 (un octet = 8 bits), on obtient la profondeur de couleur
- de l'image : 8, 16, 24 ou 32 bits.*/
- int nbOctetsParPixel = surface->format->BytesPerPixel;
- /* Ici p est l'adresse du pixel que l'on veut connaitre */
- /*surface->pixels contient l'adresse du premier pixel de l'image*/
- Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * nbOctetsParPixel;
-
- /*Gestion différente suivant le nombre d'octets par pixel de l'image*/
- switch(nbOctetsParPixel)
- {
- case 1:
- return *p;
-
- case 2:
- return *(Uint16 *)p;
-
- case 3:
- /*Suivant l'architecture de la machine*/
- if(SDL_BYTEORDER == SDL_BIG_ENDIAN)
- return p[0] << 16 | p[1] << 8 | p[2];
- else
- return p[0] | p[1] << 8 | p[2] << 16;
-
- case 4:
- return *(Uint32 *)p;
-
- /*Ne devrait pas arriver, mais évite les erreurs*/
- default:
- return 0;
- }
-}
-
-/* ********************************************************************* */
-/*definirPixel : permet de modifier la couleur d'un pixel
-Paramètres d'entrée/sortie :
-SDL_Surface *surface : la surface sur laquelle on va modifier la couleur d'un pixel
-int x : la coordonnée en x du pixel à modifier
-int y : la coordonnée en y du pixel à modifier
-Uint32 pixel : le pixel à insérer
-*/
-void definirPixel(SDL_Surface *surface, int x, int y, Uint32 pixel)
-{
- /*nbOctetsParPixel représente le nombre d'octets utilisés pour stocker un pixel.
- En multipliant ce nombre d'octets par 8 (un octet = 8 bits), on obtient la profondeur de couleur
- de l'image : 8, 16, 24 ou 32 bits.*/
- int nbOctetsParPixel = surface->format->BytesPerPixel;
- /*Ici p est l'adresse du pixel que l'on veut modifier*/
- /*surface->pixels contient l'adresse du premier pixel de l'image*/
- Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * nbOctetsParPixel;
-
- /*Gestion différente suivant le nombre d'octets par pixel de l'image*/
- switch(nbOctetsParPixel)
- {
- case 1:
- *p = pixel;
- break;
-
- case 2:
- *(Uint16 *)p = pixel;
- break;
-
- case 3:
- /*Suivant l'architecture de la machine*/
- if(SDL_BYTEORDER == SDL_BIG_ENDIAN)
- {
- p[0] = (pixel >> 16) & 0xff;
- p[1] = (pixel >> 8) & 0xff;
- p[2] = pixel & 0xff;
- }
- else
- {
- p[0] = pixel & 0xff;
- p[1] = (pixel >> 8) & 0xff;
- p[2] = (pixel >> 16) & 0xff;
- }
- break;
-
- case 4:
- *(Uint32 *)p = pixel;
- break;
- }
-}