diff --git a/include/draw.h b/include/draw.h index 0836d96..af932aa 100644 --- a/include/draw.h +++ b/include/draw.h @@ -3,3 +3,4 @@ void draw_level(char level[], unsigned int step, char polarity, int *start_x, int *start_y); void erase_tile(int x, int y, char level[]); void draw_timer(unsigned int step); //coucou Lephé' +void just_breathe(); diff --git a/include/menu.h b/include/menu.h index c91e893..8c98826 100644 --- a/include/menu.h +++ b/include/menu.h @@ -1,2 +1,2 @@ -void menu(int *level_id, char *disable_up_key, char *game_loop); -void menu_level_selection(int *level_id); +char menu(int *level_id, char *disable_up_key, char *game_loop); +char menu_level_selection(int *level_id); diff --git a/platform.g3a b/platform.g3a index 99a6472..ae53823 100644 Binary files a/platform.g3a and b/platform.g3a differ diff --git a/src/draw.c b/src/draw.c index 40b63fb..c8ab374 100644 --- a/src/draw.c +++ b/src/draw.c @@ -1,4 +1,5 @@ - #include +#include +#include #include "draw.h" #define PLAYER_H 11 @@ -75,8 +76,8 @@ int *start_y) break; case 'S': erase_tile(x, y, level); - *start_x = x; - *start_y = y; + *start_x = x + 2; + *start_y = y + 4; break; case 'E': dimage(x + DRAW_OFFSET_X, y + DRAW_OFFSET_Y, &img_exit); @@ -108,3 +109,31 @@ void draw_timer(unsigned int step) { dprint(0, 0, C_WHITE, C_BLACK, "%u.%02u", step/60, step%60); } + +void just_breathe(unsigned int step) +{ + int x = 0; + int y = 0; + int xspd = 1; + int yspd = 1; + while (!keydown_any(KEY_MENU, KEY_EXIT, 0)) + { + dclear(0); + dtext(x, y, "Thank you for playing", C_WHITE, C_BLACK); + dprint(x, y + 12, C_WHITE, C_BLACK, "%u.%02u", step/60, step%60); + dupdate(); + x += xspd; + y += yspd; + if (x == 236 || !x) xspd = 0 - xspd; + if (y == 203 || !y) yspd = 0 - yspd; + clearevents(); + } + { + unsigned char timeout = 50; + while(timeout) + { + timeout--; + dclear(0); + } + } +} diff --git a/src/main.c b/src/main.c index bf56b11..6e2a29f 100644 --- a/src/main.c +++ b/src/main.c @@ -214,19 +214,36 @@ int main(void) if (collide(player_x, player_y, level, 'E')) { level_id++; - set_level(level_id, level); - DRAW_LEVEL(); - player_x = start_x; - player_y = start_y; - polarity = 0; - vspd = 0; + if (level_id == 5059) + { + just_breathe(step); + return 0; + } + else + { + set_level(level_id, level); + DRAW_LEVEL(); + player_x = start_x; + player_y = start_y; + polarity = 0; + vspd = 0; + } } //menu if (keydown_any(KEY_EXIT, KEY_MENU, 0)) { if (!exit_buffer) { - menu(&level_id, &enable_up_key, &game_loop); + char reload = menu(&level_id, &enable_up_key, &game_loop); + if (reload) + { + set_level(level_id, level); + DRAW_LEVEL(); + player_x = start_x; + player_y = start_y; + polarity = 0; + vspd = 0; + } exit_buffer = 1; } } diff --git a/src/menu.c b/src/menu.c index 24ac120..cb3289e 100644 --- a/src/menu.c +++ b/src/menu.c @@ -2,10 +2,13 @@ #include #include "menu.h" -#define Y_POS 84 +#define LAST_LEVEL 5058 -void menu(int *level_id, char *enable_up_key, char *game_loop) +#define Y_POS 88 + +char menu(int *level_id, char *enable_up_key, char *game_loop) { + char reload = 0; char selected = 0; char menu_loop = 1; char exit_buffer = 1; @@ -33,7 +36,8 @@ void menu(int *level_id, char *enable_up_key, char *game_loop) menu_loop = 0; break; case 1: - menu_level_selection(level_id); + reload = menu_level_selection(level_id); + menu_loop = 0; break; case 2: *enable_up_key = !*enable_up_key; @@ -50,8 +54,41 @@ void menu(int *level_id, char *enable_up_key, char *game_loop) dupdate(); while (keydown_any(KEY_UP, KEY_DOWN, KEY_SHIFT, KEY_EXE, 0)) clearevents(); } + return reload; } -void menu_level_selection(int *level_id) +char menu_level_selection(int *level_id) { + char confirm_buffer = 1; + char menu_loop = 1; + int initial_lid = *level_id; + while (menu_loop) { + dclear(0); + clearevents(); + *level_id += keydown(KEY_RIGHT) - keydown(KEY_LEFT); + if (*level_id > LAST_LEVEL) *level_id = 5050; + else if (*level_id < 5050) *level_id = LAST_LEVEL; + dprint(32, Y_POS + 20, C_WHITE, C_BLACK, "> %02d <", *level_id - 5049); + if (keydown_any(KEY_SHIFT, KEY_EXE, 0)) + { + if (!confirm_buffer) + { + menu_loop = 0; + } + } + else confirm_buffer = 0; + if (keydown_any(KEY_EXIT, KEY_MENU, 0)) + { + *level_id = initial_lid; + menu_loop = 0; + } + dupdate(); + while (keydown_any(KEY_RIGHT, KEY_LEFT, KEY_SHIFT, KEY_EXE, + KEY_EXIT, KEY_MENU, 0)) + { + clearevents(); + } + } + dclear(0); + return initial_lid != *level_id; }