mirror of
https://gitlab.com/dosowisko.net/libsuperderpy.git
synced 2025-02-01 11:06:44 +01:00
memory bitmaps, linear filtering, menu stopping instead of unloading and other stuff...
This commit is contained in:
parent
576a206f00
commit
e5dda46b31
8 changed files with 93 additions and 24 deletions
|
@ -36,8 +36,8 @@ void About_Load(struct Game *game) {
|
|||
int About_Keydown(struct Game *game, ALLEGRO_EVENT *ev) {
|
||||
if (ev->keyboard.keycode == ALLEGRO_KEY_ESCAPE) {
|
||||
UnloadGameState(game);
|
||||
game->gamestate = GAMESTATE_LOADING;
|
||||
game->loadstate = GAMESTATE_MENU;
|
||||
LoadGameState(game);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -16,8 +16,8 @@ void Level_Draw(struct Game *game) {
|
|||
|
||||
game->level.derpy_pos=game->level.derpy_pos+0.00092;
|
||||
if (game->level.derpy_pos>1) { UnloadGameState(game);
|
||||
game->gamestate = GAMESTATE_LOADING;
|
||||
game->loadstate = GAMESTATE_MENU; return; }
|
||||
game->loadstate = GAMESTATE_MENU;
|
||||
LoadGameState(game); return; }
|
||||
game->level.derpy_frame_tmp++;
|
||||
if (game->level.derpy_frame_tmp%3==0) {
|
||||
if (game->level.derpy_frame_tmp%5==0) game->level.derpy_frame++;
|
||||
|
@ -47,8 +47,8 @@ void Level_Load(struct Game *game) {
|
|||
int Level_Keydown(struct Game *game, ALLEGRO_EVENT *ev) {
|
||||
if (ev->keyboard.keycode == ALLEGRO_KEY_ESCAPE) {
|
||||
UnloadGameState(game);
|
||||
game->gamestate = GAMESTATE_LOADING;
|
||||
game->loadstate = GAMESTATE_MENU;
|
||||
LoadGameState(game);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -36,12 +36,41 @@ void Loading_Draw(struct Game *game) {
|
|||
}
|
||||
|
||||
void Loading_Load(struct Game *game) {
|
||||
game->loading.image = al_load_bitmap( "data/loading.png" );
|
||||
al_clear_to_color(al_map_rgb(0,0,0));
|
||||
al_draw_text_with_shadow(game->font, al_map_rgb(255,255,255), al_get_display_width(game->display)*0.0234, al_get_display_height(game->display)*0.85, ALLEGRO_ALIGN_LEFT, "Loading...");
|
||||
DrawConsole(game);
|
||||
al_flip_display();
|
||||
|
||||
al_set_new_bitmap_flags(ALLEGRO_MEMORY_BITMAP);
|
||||
game->loading.image = al_load_bitmap( "data/loading.png" );
|
||||
al_set_new_bitmap_flags(ALLEGRO_MAG_LINEAR | ALLEGRO_MIN_LINEAR);
|
||||
|
||||
// Scale "Loading" bitmap
|
||||
game->loading.loading_bitmap = al_create_bitmap(al_get_display_width(game->display), al_get_display_height(game->display));
|
||||
al_set_target_bitmap(game->loading.loading_bitmap);
|
||||
al_draw_scaled_bitmap(game->loading.image,0, 0, al_get_bitmap_width(game->loading.image), al_get_bitmap_height(game->loading.image), 0, 0, al_get_display_width(game->display), al_get_display_height(game->display),0);
|
||||
|
||||
int width = al_get_display_width(game->display);
|
||||
int height = al_get_display_height(game->display);
|
||||
int x, y;
|
||||
for (y = 0; y < height; y++) {
|
||||
float pixy = ((float)y / height) * al_get_bitmap_height(game->loading.image);
|
||||
for (x = 0; x < width; x++) {
|
||||
float pixx = ((float)x / width) * al_get_bitmap_width(game->loading.image);
|
||||
ALLEGRO_COLOR a = al_get_pixel(game->loading.image, pixx-0.25, pixy-0.25);
|
||||
ALLEGRO_COLOR b = al_get_pixel(game->loading.image, pixx+0.25, pixy-0.25);
|
||||
ALLEGRO_COLOR c = al_get_pixel(game->loading.image, pixx-0.25, pixy+0.25);
|
||||
ALLEGRO_COLOR d = al_get_pixel(game->loading.image, pixx+0.25, pixy+0.25);
|
||||
ALLEGRO_COLOR result = al_map_rgba_f(
|
||||
(a.r+b.r+c.r+d.r) / 4,
|
||||
(a.g+b.b+c.g+d.g) / 4,
|
||||
(a.b+b.g+c.b+d.b) / 4,
|
||||
(a.a+b.a+c.a+d.a) / 4
|
||||
);
|
||||
al_put_pixel(x, y, result);
|
||||
}
|
||||
}
|
||||
|
||||
// Scale "Loading" bitmap
|
||||
//al_draw_scaled_bitmap(game->loading.image,0, 0, al_get_bitmap_width(game->loading.image), al_get_bitmap_height(game->loading.image), 0, 0, al_get_display_width(game->display), al_get_display_height(game->display),0);
|
||||
al_draw_text_with_shadow(game->font, al_map_rgb(255,255,255), al_get_display_width(game->display)*0.0234, al_get_display_height(game->display)*0.85, ALLEGRO_ALIGN_LEFT, "Loading...");
|
||||
al_set_target_bitmap(al_get_backbuffer(game->display));
|
||||
al_destroy_bitmap(game->loading.image);
|
||||
|
|
21
src/main.c
21
src/main.c
|
@ -67,6 +67,10 @@ void DrawConsole(struct Game *game) {
|
|||
}
|
||||
|
||||
void PreloadGameState(struct Game *game) {
|
||||
if ((game->loadstate==GAMESTATE_MENU) && (game->menu.loaded)) {
|
||||
PrintConsole(game, "GAMESTATE_MENU already loaded, skipping...");
|
||||
return;
|
||||
}
|
||||
switch (game->loadstate) {
|
||||
PRELOAD_STATE(GAMESTATE_MENU, Menu)
|
||||
PRELOAD_STATE(GAMESTATE_LOADING, Loading)
|
||||
|
@ -83,7 +87,13 @@ void PreloadGameState(struct Game *game) {
|
|||
|
||||
void UnloadGameState(struct Game *game) {
|
||||
switch (game->gamestate) {
|
||||
UNLOAD_STATE(GAMESTATE_MENU, Menu)
|
||||
case GAMESTATE_MENU:
|
||||
if (game->shuttingdown) {
|
||||
PrintConsole(game, "Unload GAMESTATE_MENU..."); Menu_Unload(game);
|
||||
} else {
|
||||
PrintConsole(game, "Just stopping GAMESTATE_MENU..."); Menu_Stop(game);
|
||||
}
|
||||
break;
|
||||
UNLOAD_STATE(GAMESTATE_LOADING, Loading)
|
||||
UNLOAD_STATE(GAMESTATE_ABOUT, About)
|
||||
UNLOAD_STATE(GAMESTATE_INTRO, Intro)
|
||||
|
@ -136,8 +146,6 @@ int main(int argc, char **argv){
|
|||
fprintf(stderr, "failed to initialize allegro!\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
al_set_new_bitmap_flags(ALLEGRO_MIN_LINEAR^ALLEGRO_MAG_LINEAR);
|
||||
|
||||
game.timer = al_create_timer(ALLEGRO_BPS_TO_SECS(game.fps));
|
||||
if(!game.timer) {
|
||||
|
@ -181,6 +189,7 @@ int main(int argc, char **argv){
|
|||
|
||||
if (game.fullscreen) al_set_new_display_flags(ALLEGRO_FULLSCREEN_WINDOW);
|
||||
al_set_new_display_option(ALLEGRO_VSYNC, 1, ALLEGRO_SUGGEST);
|
||||
al_set_new_display_option(ALLEGRO_OPENGL, 1, ALLEGRO_SUGGEST);
|
||||
game.display = al_create_display(game.width, game.height);
|
||||
if(!game.display) {
|
||||
fprintf(stderr, "failed to create display!\n");
|
||||
|
@ -188,6 +197,9 @@ int main(int argc, char **argv){
|
|||
}
|
||||
al_set_window_title(game.display, "Super Derpy: Muffin Attack");
|
||||
if (game.fullscreen) al_hide_mouse_cursor(game.display);
|
||||
|
||||
al_set_new_bitmap_flags(ALLEGRO_MAG_LINEAR | ALLEGRO_MIN_LINEAR);
|
||||
|
||||
game.font = al_load_ttf_font("data/ShadowsIntoLight.ttf",al_get_display_height(game.display)*0.09,0 );
|
||||
game.font_console = al_load_ttf_font("data/DejaVuSansMono.ttf",al_get_display_height(game.display)*0.018,0 );
|
||||
|
||||
|
@ -213,6 +225,8 @@ int main(int argc, char **argv){
|
|||
|
||||
al_start_timer(game.timer);
|
||||
|
||||
game.shuttingdown = false;
|
||||
game.menu.loaded = false;
|
||||
game.loadstate = GAMESTATE_LOADING;
|
||||
PreloadGameState(&game);
|
||||
LoadGameState(&game);
|
||||
|
@ -273,6 +287,7 @@ int main(int argc, char **argv){
|
|||
al_flip_display();
|
||||
}
|
||||
}
|
||||
game.shuttingdown = true;
|
||||
UnloadGameState(&game);
|
||||
if (game.gamestate != GAMESTATE_LOADING) {
|
||||
game.gamestate = GAMESTATE_LOADING;
|
||||
|
|
|
@ -50,8 +50,10 @@ struct Menu {
|
|||
ALLEGRO_BITMAP *pie;
|
||||
ALLEGRO_BITMAP *pie_bitmap;
|
||||
ALLEGRO_BITMAP *pinkcloud_bitmap;
|
||||
ALLEGRO_BITMAP *pinkcloud_scaled;
|
||||
ALLEGRO_BITMAP *pinkcloud;
|
||||
ALLEGRO_BITMAP *rain;
|
||||
ALLEGRO_BITMAP *rain_bitmap;
|
||||
ALLEGRO_BITMAP *mountain_bitmap;
|
||||
ALLEGRO_BITMAP *mountain;
|
||||
float cloud_position;
|
||||
|
@ -67,6 +69,7 @@ struct Menu {
|
|||
int selected;
|
||||
bool options;
|
||||
bool draw_while_fading;
|
||||
bool loaded;
|
||||
};
|
||||
|
||||
/*! \brief Resources used by Loading state. */
|
||||
|
@ -129,6 +132,7 @@ struct Game {
|
|||
int fps;
|
||||
int width;
|
||||
int height;
|
||||
bool shuttingdown;
|
||||
struct Menu menu;
|
||||
struct Loading loading;
|
||||
struct Intro intro;
|
||||
|
|
|
@ -71,8 +71,8 @@ int Map_Keydown(struct Game *game, ALLEGRO_EVENT *ev) {
|
|||
return 0;
|
||||
} else if (ev->keyboard.keycode == ALLEGRO_KEY_ESCAPE) {
|
||||
UnloadGameState(game);
|
||||
game->gamestate = GAMESTATE_LOADING;
|
||||
game->loadstate = GAMESTATE_MENU;
|
||||
LoadGameState(game);
|
||||
return 0;
|
||||
} else { return 0; }
|
||||
if (game->map.selected<1) game->map.selected=1;
|
||||
|
|
46
src/menu.c
46
src/menu.c
|
@ -15,11 +15,11 @@ void Menu_Draw(struct Game *game) {
|
|||
float x = 1.5;//*(rand() / (float)RAND_MAX);
|
||||
int minus;
|
||||
if (game->menu.cloud_position>0) minus=1; else minus=-1;
|
||||
al_draw_scaled_bitmap(game->menu.rain, 0, 0, al_get_bitmap_width(game->menu.rain), al_get_bitmap_height(game->menu.rain), fmod(minus*game->menu.cloud_position,3)*x*5+al_get_bitmap_width(game->menu.pinkcloud_bitmap)/2.7, al_get_bitmap_height(game->menu.pinkcloud_bitmap)*(0.88+(fmod(-1.8*(game->menu.cloud_position+80), 6))/20.0), al_get_bitmap_width(game->menu.pinkcloud_bitmap)*0.5, al_get_bitmap_height(game->menu.pinkcloud_bitmap)*0.1, 0);
|
||||
al_draw_scaled_bitmap(game->menu.rain, 0, 0, al_get_bitmap_width(game->menu.rain), al_get_bitmap_height(game->menu.rain), fmod(minus*game->menu.cloud_position,3)*x*3+al_get_bitmap_width(game->menu.pinkcloud_bitmap)/3.1, al_get_bitmap_height(game->menu.pinkcloud_bitmap)*(0.78+(fmod(-2.8*(game->menu.cloud_position+80), 4))/18.0), al_get_bitmap_width(game->menu.pinkcloud_bitmap)*0.5, al_get_bitmap_height(game->menu.pinkcloud_bitmap)*0.1, 0);
|
||||
al_draw_scaled_bitmap(game->menu.rain, 0, 0, al_get_bitmap_width(game->menu.rain), al_get_bitmap_height(game->menu.rain), fmod(minus*game->menu.cloud_position,3)*x*6+al_get_bitmap_width(game->menu.pinkcloud_bitmap)/2.1, al_get_bitmap_height(game->menu.pinkcloud_bitmap)*(0.87+(fmod(-4.9*(game->menu.cloud_position+80), 8))/26.0), al_get_bitmap_width(game->menu.pinkcloud_bitmap)*0.4, al_get_bitmap_height(game->menu.pinkcloud_bitmap)*0.08, 0);
|
||||
al_draw_bitmap(game->menu.rain_bitmap, fmod(minus*game->menu.cloud_position,3)*x*5+al_get_bitmap_width(game->menu.pinkcloud_bitmap)/2.7, al_get_bitmap_height(game->menu.pinkcloud_bitmap)*(0.88+(fmod(-1.8*(game->menu.cloud_position+80), 6))/20.0), 0);
|
||||
al_draw_bitmap(game->menu.rain_bitmap, fmod(minus*game->menu.cloud_position,3)*x*3+al_get_bitmap_width(game->menu.pinkcloud_bitmap)/3.1, al_get_bitmap_height(game->menu.pinkcloud_bitmap)*(0.78+(fmod(-2.8*(game->menu.cloud_position+80), 4))/18.0), 0);
|
||||
al_draw_scaled_bitmap(game->menu.rain_bitmap, 0, 0, al_get_bitmap_width(game->menu.rain_bitmap), al_get_bitmap_height(game->menu.rain_bitmap), fmod(minus*game->menu.cloud_position,3)*x*6+al_get_bitmap_width(game->menu.pinkcloud_bitmap)/2.1, al_get_bitmap_height(game->menu.pinkcloud_bitmap)*(0.87+(fmod(-4.9*(game->menu.cloud_position+80), 8))/26.0), al_get_bitmap_width(game->menu.pinkcloud_bitmap)*0.4, al_get_bitmap_height(game->menu.pinkcloud_bitmap)*0.08, 0);
|
||||
//al_draw_scaled_bitmap(game->menu.rain, 0, 0, al_get_bitmap_width(game->menu.rain), al_get_bitmap_height(game->menu.rain), fmod(minus*game->menu.cloud_position,3)*x*6+al_get_bitmap_width(game->menu.pinkcloud_bitmap)/2.4, al_get_bitmap_height(game->menu.pinkcloud_bitmap)*(0.9+(fmod(-5*(game->menu.cloud_position+86), 8))/20.0), al_get_bitmap_width(game->menu.pinkcloud_bitmap)*0.35, al_get_bitmap_height(game->menu.pinkcloud_bitmap)*0.07, 0);
|
||||
al_draw_scaled_bitmap(game->menu.pinkcloud,0, 0, al_get_bitmap_width(game->menu.pinkcloud), al_get_bitmap_height(game->menu.pinkcloud), 0, 0, al_get_bitmap_width(game->menu.pinkcloud_bitmap), al_get_bitmap_height(game->menu.pinkcloud_bitmap)*0.8122,0);
|
||||
al_draw_bitmap(game->menu.pinkcloud_scaled, 0, 0, 0);
|
||||
al_set_target_bitmap(al_get_backbuffer(game->display));
|
||||
|
||||
al_clear_to_color(al_map_rgb(183,234,193));
|
||||
|
@ -68,22 +68,26 @@ void Menu_Draw(struct Game *game) {
|
|||
}
|
||||
|
||||
void Menu_Preload(struct Game *game) {
|
||||
game->menu.loaded = true;
|
||||
game->menu.draw_while_fading = atoi(GetConfigOptionDefault("[MuffinAttack]", "menu_draw_while_fading", "1"));
|
||||
game->menu.cloud_position = 100;
|
||||
game->menu.cloud2_position = 100;
|
||||
game->menu.options = false;
|
||||
//game->menu.image = al_create_bitmap(al_get_display_width(game->display), al_get_display_height(game->display));
|
||||
//al_destroy_bitmap(game->menu.image); // ugh...
|
||||
al_set_new_bitmap_flags(ALLEGRO_MAG_LINEAR | ALLEGRO_MEMORY_BITMAP);
|
||||
game->menu.image = al_load_bitmap( "data/menu.png" );
|
||||
game->menu.mountain = al_load_bitmap( "data/mountain.png" );
|
||||
game->menu.cloud = al_load_bitmap( "data/cloud.png" );
|
||||
game->menu.cloud2 = al_load_bitmap( "data/cloud2.png" );
|
||||
game->menu.rain = al_load_bitmap( "data/rain.png" );
|
||||
game->menu.pie = al_load_bitmap( "data/pie.png" );
|
||||
game->menu.pinkcloud = al_load_bitmap( "data/pinkcloud.png" );
|
||||
al_set_new_bitmap_flags(ALLEGRO_MAG_LINEAR);
|
||||
|
||||
game->menu.sample = al_load_sample( "data/menu.flac" );
|
||||
game->menu.rain_sample = al_load_sample( "data/rain.flac" );
|
||||
game->menu.click_sample = al_load_sample( "data/click.flac" );
|
||||
game->menu.cloud = al_load_bitmap( "data/cloud.png" );
|
||||
game->menu.cloud2 = al_load_bitmap( "data/cloud2.png" );
|
||||
game->menu.pinkcloud = al_load_bitmap( "data/pinkcloud.png" );
|
||||
game->menu.pie = al_load_bitmap( "data/pie.png" );
|
||||
game->menu.rain = al_load_bitmap( "data/rain.png" );
|
||||
game->menu.mountain_position = al_get_display_width(game->display)*0.7;
|
||||
|
||||
game->menu.font_title = al_load_ttf_font("data/ShadowsIntoLight.ttf",al_get_display_height(game->display)*0.16,0 );
|
||||
|
@ -127,6 +131,10 @@ void Menu_Preload(struct Game *game) {
|
|||
al_destroy_bitmap(game->menu.cloud2);
|
||||
|
||||
game->menu.pinkcloud_bitmap = al_create_bitmap(al_get_display_width(game->display)*0.33125, al_get_display_height(game->display)); //*0.8122);
|
||||
game->menu.pinkcloud_scaled = al_create_bitmap(al_get_bitmap_width(game->menu.pinkcloud_bitmap), al_get_bitmap_height(game->menu.pinkcloud_bitmap)*0.8122);
|
||||
al_set_target_bitmap(game->menu.pinkcloud_scaled);
|
||||
al_draw_scaled_bitmap(game->menu.pinkcloud,0, 0, al_get_bitmap_width(game->menu.pinkcloud), al_get_bitmap_height(game->menu.pinkcloud), 0, 0, al_get_bitmap_width(game->menu.pinkcloud_scaled), al_get_bitmap_height(game->menu.pinkcloud_scaled),0);
|
||||
al_destroy_bitmap(game->menu.pinkcloud);
|
||||
|
||||
game->menu.pie_bitmap = al_create_bitmap(al_get_display_width(game->display)/2, al_get_display_height(game->display)); //*0.8122);
|
||||
al_set_target_bitmap(game->menu.pie_bitmap);
|
||||
|
@ -142,11 +150,18 @@ void Menu_Preload(struct Game *game) {
|
|||
al_draw_scaled_bitmap(game->menu.mountain,0, 0, al_get_bitmap_width(game->menu.mountain), al_get_bitmap_height(game->menu.mountain), 0, 0, al_get_bitmap_width(game->menu.mountain_bitmap), al_get_bitmap_height(game->menu.mountain_bitmap),0);
|
||||
al_destroy_bitmap(game->menu.mountain);
|
||||
|
||||
al_set_new_bitmap_flags(ALLEGRO_VIDEO_BITMAP);
|
||||
game->menu.rain_bitmap = al_create_bitmap(al_get_bitmap_width(game->menu.pinkcloud_bitmap)*0.5, al_get_bitmap_height(game->menu.pinkcloud_bitmap)*0.1);
|
||||
al_set_new_bitmap_flags(ALLEGRO_MIN_LINEAR | ALLEGRO_MAG_LINEAR);
|
||||
al_set_target_bitmap(game->menu.rain_bitmap);
|
||||
al_clear_to_color(al_map_rgba(0,0,0,0));
|
||||
al_draw_scaled_bitmap(game->menu.rain,0, 0, al_get_bitmap_width(game->menu.rain), al_get_bitmap_height(game->menu.rain), 0, 0, al_get_bitmap_width(game->menu.rain_bitmap), al_get_bitmap_height(game->menu.rain_bitmap),0);
|
||||
al_destroy_bitmap(game->menu.rain);
|
||||
|
||||
game->menu.selected = 0;
|
||||
}
|
||||
|
||||
void Menu_Unload(struct Game *game) {
|
||||
|
||||
void Menu_Stop(struct Game* game) {
|
||||
game->menu.menu_fade_bitmap = al_create_bitmap(al_get_display_width(game->display), al_get_display_height(game->display));
|
||||
|
||||
ALLEGRO_EVENT ev;
|
||||
|
@ -163,13 +178,18 @@ void Menu_Unload(struct Game *game) {
|
|||
DrawConsole(game);
|
||||
al_flip_display();
|
||||
}
|
||||
al_stop_samples();
|
||||
}
|
||||
|
||||
void Menu_Unload(struct Game *game) {
|
||||
Menu_Stop(game);
|
||||
al_destroy_bitmap(game->menu.menu_fade_bitmap);
|
||||
al_destroy_bitmap(game->menu.pinkcloud);
|
||||
al_destroy_bitmap(game->menu.pinkcloud_scaled);
|
||||
al_destroy_bitmap(game->menu.menu_bitmap);
|
||||
al_destroy_bitmap(game->menu.cloud_bitmap);
|
||||
al_destroy_bitmap(game->menu.cloud2_bitmap);
|
||||
al_destroy_bitmap(game->menu.pinkcloud_bitmap);
|
||||
al_destroy_bitmap(game->menu.rain);
|
||||
al_destroy_bitmap(game->menu.rain_bitmap);
|
||||
al_destroy_bitmap(game->menu.mountain_bitmap);
|
||||
al_destroy_bitmap(game->menu.pie_bitmap);
|
||||
al_destroy_font(game->menu.font_title);
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
|
||||
void Menu_Draw(struct Game *game);
|
||||
void Menu_Preload(struct Game *game);
|
||||
void Menu_Stop(struct Game *game);
|
||||
void Menu_Unload(struct Game *game);
|
||||
void Menu_Load(struct Game *game);
|
||||
int Menu_Keydown(struct Game *game, ALLEGRO_EVENT *ev);
|
||||
|
|
Loading…
Reference in a new issue