mirror of
https://github.com/krislamo/Trololo
synced 2024-12-16 10:40:36 +00:00
Broken with an error in the default argument given for parameter 5 of scrnfunk::apply_image in the core source
This commit is contained in:
parent
8db540e110
commit
44070cb972
202
core.cpp
Normal file
202
core.cpp
Normal file
@ -0,0 +1,202 @@
|
|||||||
|
#include "main.h"
|
||||||
|
|
||||||
|
namespace scrnfunk
|
||||||
|
{
|
||||||
|
// Optimize image on load to reduce processing.
|
||||||
|
SDL_Surface *load_image(const char *file)
|
||||||
|
{
|
||||||
|
SDL_Surface *image_format;
|
||||||
|
SDL_Surface *screen_format;
|
||||||
|
|
||||||
|
// Load image
|
||||||
|
image_format = IMG_Load(file);
|
||||||
|
|
||||||
|
/*
|
||||||
|
DOES THE FILE EVEN EXIST?
|
||||||
|
*/
|
||||||
|
|
||||||
|
if(image_format != 0)
|
||||||
|
{
|
||||||
|
// Optimize
|
||||||
|
screen_format = SDL_DisplayFormat(image_format);
|
||||||
|
|
||||||
|
// Release old image
|
||||||
|
SDL_FreeSurface(image_format);
|
||||||
|
}
|
||||||
|
|
||||||
|
return screen_format;
|
||||||
|
}
|
||||||
|
|
||||||
|
void apply_image(int x, int y, SDL_Surface* source, SDL_Surface* destination, SDL_Rect* clip = 0)
|
||||||
|
{
|
||||||
|
SDL_Rect pos;
|
||||||
|
|
||||||
|
pos.x = x;
|
||||||
|
pos.y = y;
|
||||||
|
|
||||||
|
SDL_BlitSurface(source, clip, destination, &pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Removes color from an image.
|
||||||
|
bool RemoveColor(SDL_Surface* image, Uint8 R, Uint8 G, Uint8 B)
|
||||||
|
{
|
||||||
|
int result;
|
||||||
|
|
||||||
|
// Map color on the image
|
||||||
|
Uint32 color = SDL_MapRGB(image->format, R, G, B);
|
||||||
|
|
||||||
|
// Remove color from the image.
|
||||||
|
result = SDL_SetColorKey(image, SDL_SRCCOLORKEY, color);
|
||||||
|
|
||||||
|
if(!result)
|
||||||
|
return true;
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
namespace scrns
|
||||||
|
{
|
||||||
|
// Returns 1 (true) on success, 0 (false) on error.
|
||||||
|
bool initiateSDL(SDL_Surface *screen, int x, int y)
|
||||||
|
{
|
||||||
|
SDL_Surface *vid_init;
|
||||||
|
int init, ttf_ret;
|
||||||
|
|
||||||
|
// Initiate SDL and check
|
||||||
|
init = SDL_Init(SDL_INIT_VIDEO);
|
||||||
|
if(init < 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Unable to initiate SDL: %s\n", SDL_GetError());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Set video and check
|
||||||
|
vid_init = SDL_SetVideoMode(x, y, 32, SDL_SWSURFACE);
|
||||||
|
if(vid_init == 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Video initialization failed: %s", SDL_GetError());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Get video surface and check
|
||||||
|
screen = SDL_GetVideoSurface();
|
||||||
|
if(screen == 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Failed to get video surface: %s", SDL_GetError());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Set window title
|
||||||
|
SDL_WM_SetCaption(WINDOW_TITLE, 0);
|
||||||
|
|
||||||
|
|
||||||
|
// Initialize SDL_ttf and check
|
||||||
|
ttf_ret = TTF_Init();
|
||||||
|
if(ttf_ret == -1)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "True Type Font initialization failed: %s", SDL_GetError());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Success: return video surface
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
SDL_Surface * MainMenu()
|
||||||
|
{
|
||||||
|
// Screen
|
||||||
|
SDL_Surface *screen = 0;
|
||||||
|
|
||||||
|
SDL_Surface *background = 0;
|
||||||
|
SDL_Surface *characters = 0;
|
||||||
|
SDL_Surface *message = 0;
|
||||||
|
|
||||||
|
|
||||||
|
// Image filenames
|
||||||
|
const char *background_image = "stage1.bmp";
|
||||||
|
const char *characters_image = "characters.bmp";
|
||||||
|
|
||||||
|
// Char
|
||||||
|
SDL_Rect clip[2];
|
||||||
|
|
||||||
|
initiateSDL(screen, 900, 675);
|
||||||
|
|
||||||
|
if(screen == 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Start up failure.\n");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Load images
|
||||||
|
background = scrnfunk::load_image(background_image);
|
||||||
|
characters = scrnfunk::load_image(characters_image);
|
||||||
|
|
||||||
|
// The troll's coordinates
|
||||||
|
clip[0].x = 0;
|
||||||
|
clip[0].y = 0;
|
||||||
|
clip[0].w = 200;
|
||||||
|
clip[0].h = 160;
|
||||||
|
|
||||||
|
// The codfish's coordinates
|
||||||
|
clip[1].x = 0;
|
||||||
|
clip[1].y = 160;
|
||||||
|
clip[1].w = 200;
|
||||||
|
clip[1].h = 100;
|
||||||
|
|
||||||
|
// Remove the background from the characters
|
||||||
|
scrnfunk::RemoveColor(characters, 0x00, 0xFF, 0x00); // Green
|
||||||
|
|
||||||
|
// Blit background image
|
||||||
|
scrnfunk::apply_image(0, 0, background, screen);
|
||||||
|
|
||||||
|
// Blit troll image
|
||||||
|
scrnfunk::apply_image(700, 40, characters, screen, &clip[0]);
|
||||||
|
|
||||||
|
// Blit codfish image
|
||||||
|
scrnfunk::apply_image(150, 300, characters, screen, &clip[1]);
|
||||||
|
|
||||||
|
// Setup welcome text
|
||||||
|
SDL_Color whitecolor = { 255, 255, 255 };
|
||||||
|
TTF_Font *font = TTF_OpenFont("CaviarDreams.ttf", 80);
|
||||||
|
const char* text = "Welcome to Trololo";
|
||||||
|
|
||||||
|
|
||||||
|
if(!font)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "TTF_OpenFont: %s\n", TTF_GetError());
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
Checks if font or text is 0 due to the documentation:
|
||||||
|
0 font into this function will cause a segfault.
|
||||||
|
0 text into this function will result in undefined behavior.
|
||||||
|
*/
|
||||||
|
if(font != 0 && text != 0)
|
||||||
|
message = TTF_RenderText_Solid(font, text, whitecolor);
|
||||||
|
else
|
||||||
|
fprintf(stderr, "TFF Render Text Solid Error: init error\n");
|
||||||
|
|
||||||
|
// Apply message
|
||||||
|
if(message != 0)
|
||||||
|
scrnfunk::apply_image(100, 200, message, screen);
|
||||||
|
else
|
||||||
|
fprintf(stderr, "TFF Render Text Solid Error: apply error\n");
|
||||||
|
|
||||||
|
if(screen != 0)
|
||||||
|
SDL_Flip(screen);
|
||||||
|
else
|
||||||
|
fprintf(stderr, "Couldn't update screen.\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
return screen;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
100
main.cpp
100
main.cpp
@ -1,103 +1,14 @@
|
|||||||
// SDL + Extensions
|
#include "main.h"
|
||||||
#include "SDL/SDL.h"
|
|
||||||
#include "SDL/SDL_image.h"
|
|
||||||
#include "SDL/SDL_ttf.h"
|
|
||||||
|
|
||||||
// Common SDL functions for general processing.
|
|
||||||
#include "commonSDL.h"
|
|
||||||
|
|
||||||
#define WINDOW_TITLE "Trololo"
|
|
||||||
|
|
||||||
// Screen
|
|
||||||
SDL_Surface *screen = NULL;
|
|
||||||
|
|
||||||
SDL_Surface *background = NULL;
|
|
||||||
SDL_Surface *characters = NULL;
|
|
||||||
|
|
||||||
SDL_Surface *message = NULL;
|
|
||||||
|
|
||||||
// Image filenames
|
|
||||||
const char *background_image = "stage1.bmp";
|
|
||||||
const char *characters_image = "characters.bmp";
|
|
||||||
|
|
||||||
// Char
|
|
||||||
SDL_Rect clip[2];
|
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, char* args[])
|
int main(int argc, char* args[])
|
||||||
{
|
{
|
||||||
screen = StartUp(WINDOW_TITLE, 900, 675);
|
|
||||||
|
|
||||||
if(screen == NULL)
|
|
||||||
{
|
|
||||||
fprintf(stderr, "Start up failure.\n");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Load images
|
|
||||||
background = load_image(background_image);
|
|
||||||
characters = load_image(characters_image);
|
|
||||||
|
|
||||||
// The troll's coordinates
|
|
||||||
clip[0].x = 0;
|
|
||||||
clip[0].y = 0;
|
|
||||||
clip[0].w = 200;
|
|
||||||
clip[0].h = 160;
|
|
||||||
|
|
||||||
// The codfish's coordinates
|
|
||||||
clip[1].x = 0;
|
|
||||||
clip[1].y = 160;
|
|
||||||
clip[1].w = 200;
|
|
||||||
clip[1].h = 100;
|
|
||||||
|
|
||||||
// Remove the background from the characters
|
|
||||||
RemoveColor(characters, 0x00, 0xFF, 0x00); // Green
|
|
||||||
|
|
||||||
// Blit background image
|
|
||||||
apply_image(0, 0, background, screen);
|
|
||||||
|
|
||||||
// Blit troll image
|
|
||||||
apply_image(700, 40, characters, screen, &clip[0]);
|
|
||||||
|
|
||||||
// Blit codfish image
|
|
||||||
apply_image(150, 300, characters, screen, &clip[1]);
|
|
||||||
|
|
||||||
// Setup welcome text
|
|
||||||
SDL_Color whitecolor = { 255, 255, 255 };
|
|
||||||
TTF_Font *font = TTF_OpenFont("CaviarDreams.ttf", 80);
|
|
||||||
const char* text = "Welcome to Trololo";
|
|
||||||
|
|
||||||
|
|
||||||
if(!font)
|
|
||||||
{
|
|
||||||
fprintf(stderr, "TTF_OpenFont: %s\n", TTF_GetError());
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
Checks if font or text is NULL due to the documentation:
|
|
||||||
NULL font into this function will cause a segfault.
|
|
||||||
NULL text into this function will result in undefined behavior.
|
|
||||||
*/
|
|
||||||
if(font != NULL && text != NULL)
|
|
||||||
message = TTF_RenderText_Solid(font, text, whitecolor);
|
|
||||||
else
|
|
||||||
fprintf(stderr, "TFF Render Text Solid Error: init error\n");
|
|
||||||
|
|
||||||
// Apply message
|
|
||||||
if(message != NULL)
|
|
||||||
apply_image(100, 200, message, screen);
|
|
||||||
else
|
|
||||||
fprintf(stderr, "TFF Render Text Solid Error: apply error\n");
|
|
||||||
|
|
||||||
if(screen != NULL)
|
|
||||||
SDL_Flip(screen);
|
|
||||||
else
|
|
||||||
fprintf(stderr, "Couldn't update screen.\n");
|
|
||||||
|
|
||||||
SDL_Event event;
|
SDL_Event event;
|
||||||
int quit = 1;
|
int quit = 1;
|
||||||
|
|
||||||
|
SDL_Surface *screen;
|
||||||
|
|
||||||
|
screen = scrns::MainMenu();
|
||||||
|
|
||||||
// Check if user quit
|
// Check if user quit
|
||||||
while(quit == 1)
|
while(quit == 1)
|
||||||
{
|
{
|
||||||
@ -110,5 +21,4 @@ int main(int argc, char* args[])
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
28
main.h
Normal file
28
main.h
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
#ifndef MAIN_H
|
||||||
|
#define MAIN_H
|
||||||
|
|
||||||
|
// SDL dependencies
|
||||||
|
#include "SDL/SDL.h" // SDL 1.2.15 (32 bit)
|
||||||
|
#include "SDL/SDL_image.h" // SDL_image (1.2.12)
|
||||||
|
#include "SDL/SDL_ttf.h" // SDL_tff (2.0.11)
|
||||||
|
|
||||||
|
// Standard dependencies
|
||||||
|
#include <cstdio>
|
||||||
|
|
||||||
|
namespace scrns
|
||||||
|
{
|
||||||
|
bool initiateSDL(SDL_Surface *screen, int x, int y);
|
||||||
|
SDL_Surface * MainMenu();
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace scrnfunk
|
||||||
|
{
|
||||||
|
SDL_Surface *load_image(const char *file);
|
||||||
|
void apply_image(int x, int y, SDL_Surface* source, SDL_Surface* destination, SDL_Rect* clip = 0);
|
||||||
|
bool RemoveColor(SDL_Surface* image, Uint8 R, Uint8 G, Uint8);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define VERSION 0.1-alpha
|
||||||
|
#define WINDOW_TITLE "Trololo"
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue
Block a user