mirror of
https://gitlab.com/dosowisko.net/libsuperderpy.git
synced 2025-03-04 09:11:27 +01:00
introducing: brand-new ability to FAIL LEVEL! :) also, debug mode cheats and fine-tuning of HP meter
This commit is contained in:
parent
0a17a95383
commit
10a786c431
2 changed files with 27 additions and 6 deletions
32
src/level.c
32
src/level.c
|
@ -88,6 +88,20 @@ void Level_Passed(struct Game *game) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool FadeOut(struct Game *game, struct TM_Action *action, enum TM_ActionState state);
|
||||||
|
|
||||||
|
bool LevelFailed(struct Game *game, struct TM_Action *action, enum TM_ActionState state) {
|
||||||
|
if (state == TM_ACTIONSTATE_INIT) {
|
||||||
|
TM_AddBackgroundAction(&FadeOut, NULL, 3000, "fadeout");
|
||||||
|
} else if (state == TM_ACTIONSTATE_RUNNING) {
|
||||||
|
al_draw_filled_rectangle(0, 0, al_get_display_width(game->display), al_get_display_height(game->display), al_map_rgba(0,0,0,100));
|
||||||
|
al_draw_text_with_shadow(game->menu.font_title, al_map_rgb(255,255,255), al_get_display_width(game->display)*0.5, al_get_display_height(game->display)*0.4, ALLEGRO_ALIGN_CENTRE, "Failed!");
|
||||||
|
game->level.speed-=0.00001;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool Accelerate(struct Game *game, struct TM_Action *action, enum TM_ActionState state) {
|
bool Accelerate(struct Game *game, struct TM_Action *action, enum TM_ActionState state) {
|
||||||
if (state != TM_ACTIONSTATE_RUNNING) return false;
|
if (state != TM_ACTIONSTATE_RUNNING) return false;
|
||||||
game->level.speed+=0.000015;
|
game->level.speed+=0.000015;
|
||||||
|
@ -250,7 +264,6 @@ void Level_Draw(struct Game *game) {
|
||||||
if (game->level.derpy_y < 0) game->level.derpy_y=0;
|
if (game->level.derpy_y < 0) game->level.derpy_y=0;
|
||||||
else if (game->level.derpy_y > 0.8) game->level.derpy_y=0.8;
|
else if (game->level.derpy_y > 0.8) game->level.derpy_y=0.8;
|
||||||
}
|
}
|
||||||
al_hold_bitmap_drawing(true);
|
|
||||||
|
|
||||||
al_draw_bitmap(game->level.clouds, (-game->level.cl_pos)*al_get_bitmap_width(game->level.clouds), 0, 0);
|
al_draw_bitmap(game->level.clouds, (-game->level.cl_pos)*al_get_bitmap_width(game->level.clouds), 0, 0);
|
||||||
al_draw_bitmap(game->level.clouds, (1+(-game->level.cl_pos))*al_get_bitmap_width(game->level.clouds), 0, 0);
|
al_draw_bitmap(game->level.clouds, (1+(-game->level.cl_pos))*al_get_bitmap_width(game->level.clouds), 0, 0);
|
||||||
|
@ -277,6 +290,10 @@ void Level_Draw(struct Game *game) {
|
||||||
(((y>=derpyy+0.26*derpyh) && (y<=derpyy+0.76*derpyh)) || ((y+h>=derpyy+0.26*derpyh) && (y+h<=derpyy+0.76*derpyh)))) {
|
(((y>=derpyy+0.26*derpyh) && (y<=derpyy+0.76*derpyh)) || ((y+h>=derpyy+0.26*derpyh) && (y+h<=derpyy+0.76*derpyh)))) {
|
||||||
tmp->hit=true;
|
tmp->hit=true;
|
||||||
game->level.hp+=tps(game, 60*0.0002*tmp->points);
|
game->level.hp+=tps(game, 60*0.0002*tmp->points);
|
||||||
|
if ((game->level.hp<=0) && (!game->level.failed)) {
|
||||||
|
game->level.failed = true;
|
||||||
|
TM_AddBackgroundAction(&LevelFailed, NULL, 0, "levelfailed");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
al_draw_bitmap(*(tmp->bitmap), x, y, 0);
|
al_draw_bitmap(*(tmp->bitmap), x, y, 0);
|
||||||
if (tmp->hit) colision = true;
|
if (tmp->hit) colision = true;
|
||||||
|
@ -296,7 +313,6 @@ void Level_Draw(struct Game *game) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (colision) game->level.hp-=tps(game, 60*0.002);
|
if (colision) game->level.hp-=tps(game, 60*0.002);
|
||||||
al_hold_bitmap_drawing(false);
|
|
||||||
|
|
||||||
al_set_target_bitmap(game->level.derpy);
|
al_set_target_bitmap(game->level.derpy);
|
||||||
al_clear_to_color(al_map_rgba(0,0,0,0));
|
al_clear_to_color(al_map_rgba(0,0,0,0));
|
||||||
|
@ -310,7 +326,6 @@ void Level_Draw(struct Game *game) {
|
||||||
if (game->level.sheet_pos>=game->level.sheet_cols*game->level.sheet_rows-game->level.sheet_blanks) game->level.sheet_pos=0;
|
if (game->level.sheet_pos>=game->level.sheet_cols*game->level.sheet_rows-game->level.sheet_blanks) game->level.sheet_pos=0;
|
||||||
}
|
}
|
||||||
al_set_target_bitmap(al_get_backbuffer(game->display));
|
al_set_target_bitmap(al_get_backbuffer(game->display));
|
||||||
al_hold_bitmap_drawing(true);
|
|
||||||
|
|
||||||
al_draw_tinted_bitmap(game->level.derpy, al_map_rgba(255,255-colision*255,255-colision*255,255), derpyx+al_get_display_width(game->display)*0.1953125-al_get_bitmap_width(game->level.derpy), derpyy, 0);
|
al_draw_tinted_bitmap(game->level.derpy, al_map_rgba(255,255-colision*255,255-colision*255,255), derpyx+al_get_display_width(game->display)*0.1953125-al_get_bitmap_width(game->level.derpy), derpyy, 0);
|
||||||
|
|
||||||
|
@ -328,12 +343,11 @@ void Level_Draw(struct Game *game) {
|
||||||
}
|
}
|
||||||
game->level.cl_pos += tps(game, 60*0.00005);
|
game->level.cl_pos += tps(game, 60*0.00005);
|
||||||
if (game->level.cl_pos >= 1) game->level.cl_pos=game->level.cl_pos-1;
|
if (game->level.cl_pos >= 1) game->level.cl_pos=game->level.cl_pos-1;
|
||||||
al_hold_bitmap_drawing(false);
|
|
||||||
|
|
||||||
al_set_target_bitmap(game->level.meter_bmp);
|
al_set_target_bitmap(game->level.meter_bmp);
|
||||||
al_clear_to_color(al_map_rgba(0,0,0,0));
|
al_clear_to_color(al_map_rgba(0,0,0,0));
|
||||||
al_draw_filled_rounded_rectangle(al_get_bitmap_width(game->level.meter_bmp)*0.1, al_get_bitmap_height(game->level.meter_bmp)*0.3, al_get_bitmap_width(game->level.meter_bmp), al_get_bitmap_height(game->level.meter_bmp)*0.7,
|
al_draw_filled_rounded_rectangle(al_get_bitmap_width(game->level.meter_bmp)*0.1, al_get_bitmap_height(game->level.meter_bmp)*0.34, al_get_bitmap_width(game->level.meter_bmp)*0.993, al_get_bitmap_height(game->level.meter_bmp)*0.66,
|
||||||
7.5,7.5, al_map_rgb(232,234,239));
|
6,6, al_map_rgb(232,234,239));
|
||||||
al_draw_horizontal_gradient_rect(al_get_bitmap_width(game->level.meter_bmp)-al_get_display_width(game->display)*0.215, (al_get_bitmap_height(game->level.meter_bmp)-al_get_display_height(game->display)*0.025)/2, al_get_display_width(game->display)*0.215*0.975, al_get_display_height(game->display)*0.025, al_map_rgb(150,159,182), al_map_rgb(130,139,162));
|
al_draw_horizontal_gradient_rect(al_get_bitmap_width(game->level.meter_bmp)-al_get_display_width(game->display)*0.215, (al_get_bitmap_height(game->level.meter_bmp)-al_get_display_height(game->display)*0.025)/2, al_get_display_width(game->display)*0.215*0.975, al_get_display_height(game->display)*0.025, al_map_rgb(150,159,182), al_map_rgb(130,139,162));
|
||||||
al_draw_filled_rectangle(al_get_bitmap_width(game->level.meter_bmp)-al_get_display_width(game->display)*0.215, (al_get_bitmap_height(game->level.meter_bmp)-al_get_display_height(game->display)*0.025)/2, al_get_bitmap_width(game->level.meter_bmp)-al_get_display_width(game->display)*0.215+(al_get_display_width(game->display)*0.215*0.975)*game->level.hp, (al_get_bitmap_height(game->level.meter_bmp)-al_get_display_height(game->display)*0.025)/2+al_get_display_height(game->display)*0.025, al_map_rgb(214,172,55));
|
al_draw_filled_rectangle(al_get_bitmap_width(game->level.meter_bmp)-al_get_display_width(game->display)*0.215, (al_get_bitmap_height(game->level.meter_bmp)-al_get_display_height(game->display)*0.025)/2, al_get_bitmap_width(game->level.meter_bmp)-al_get_display_width(game->display)*0.215+(al_get_display_width(game->display)*0.215*0.975)*game->level.hp, (al_get_bitmap_height(game->level.meter_bmp)-al_get_display_height(game->display)*0.025)/2+al_get_display_height(game->display)*0.025, al_map_rgb(214,172,55));
|
||||||
al_draw_bitmap(game->level.meter_image, 0, 0, 0);
|
al_draw_bitmap(game->level.meter_image, 0, 0, 0);
|
||||||
|
@ -507,6 +521,12 @@ int Level_Keydown(struct Game *game, ALLEGRO_EVENT *ev) {
|
||||||
if (ev->keyboard.keycode==ALLEGRO_KEY_ESCAPE) {
|
if (ev->keyboard.keycode==ALLEGRO_KEY_ESCAPE) {
|
||||||
game->level.music_pos = al_get_sample_instance_position(game->level.music);
|
game->level.music_pos = al_get_sample_instance_position(game->level.music);
|
||||||
al_set_sample_instance_playing(game->level.music, false);
|
al_set_sample_instance_playing(game->level.music, false);
|
||||||
|
} else if ((game->debug) && (ev->keyboard.keycode==ALLEGRO_KEY_F2)) {
|
||||||
|
game->level.hp -= 0.1;
|
||||||
|
if (game->level.hp <= 0) game->level.hp=0.001;
|
||||||
|
} else if ((game->debug) && (ev->keyboard.keycode==ALLEGRO_KEY_F3)) {
|
||||||
|
game->level.hp += 0.1;
|
||||||
|
if (game->level.hp > 1) game->level.hp=1;
|
||||||
}
|
}
|
||||||
if (game->level.current_level!=1) Moonwalk_Keydown(game, ev);
|
if (game->level.current_level!=1) Moonwalk_Keydown(game, ev);
|
||||||
if (ev->keyboard.keycode==ALLEGRO_KEY_ESCAPE) {
|
if (ev->keyboard.keycode==ALLEGRO_KEY_ESCAPE) {
|
||||||
|
|
|
@ -83,6 +83,7 @@ struct Level {
|
||||||
float hp;
|
float hp;
|
||||||
bool handle_input;
|
bool handle_input;
|
||||||
bool flying;
|
bool flying;
|
||||||
|
bool failed;
|
||||||
float meter_alpha;
|
float meter_alpha;
|
||||||
int sheet_rows, sheet_cols, sheet_pos, sheet_blanks;
|
int sheet_rows, sheet_cols, sheet_pos, sheet_blanks;
|
||||||
float sheet_tmp, sheet_speed, sheet_speed_modifier, sheet_scale;
|
float sheet_tmp, sheet_speed, sheet_speed_modifier, sheet_scale;
|
||||||
|
|
Loading…
Add table
Reference in a new issue