From 69aa9ee70275af81635e3621ef525cc42385d065 Mon Sep 17 00:00:00 2001 From: Milang Date: Tue, 14 Jan 2020 21:31:13 +0100 Subject: [PATCH] add running mode code death animation (80%) add level displaying before (2 secs) and clear plateforms beteween levels --- include/level.h | 4 +-- include/score.h | 1 + src/keyboard.c | 7 ++++- src/level.c | 77 +++++++++++++++++++++++----------------------- src/levelchanger.c | 67 +++++++++++++++++++++++++++++++++++----- src/main.c | 2 +- src/plateforme.c | 6 ++++ src/score.c | 3 +- 8 files changed, 115 insertions(+), 52 deletions(-) diff --git a/include/level.h b/include/level.h index fa6473f..177b75e 100644 --- a/include/level.h +++ b/include/level.h @@ -1,7 +1,7 @@ #ifndef LEVEL_H #define LEVEL_H -void set_level(int n); -void get_lvl_id(int n, char * str); +void set_level(int w, int l); +void get_lvl_id(int w, int l, char * str); #endif \ No newline at end of file diff --git a/include/score.h b/include/score.h index 94bcb2b..3f8395c 100644 --- a/include/score.h +++ b/include/score.h @@ -12,5 +12,6 @@ void score_add(int); void score_display(); void score_add_coin(); void new_level(); +void new_game(); #endif diff --git a/src/keyboard.c b/src/keyboard.c index 6db4e76..2d7f2ca 100755 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -141,7 +141,12 @@ void update_keyboard() e=pollevent(); } if (menu) - mario_dead=menu_pause(); + { + int t=menu_pause(); + if (t==1) + finish_level=-1; + return; + } } int getkey_custom() diff --git a/src/level.c b/src/level.c index b79c063..e75fc02 100644 --- a/src/level.c +++ b/src/level.c @@ -32,6 +32,8 @@ void init_level(world_t * lvl) { free(w_current); } + if (0==w_current_y*w_current_y) + return; int size=sizeof(world_t)*w_current_y*w_current_x; w_current=malloc(size); if (w_current==0) @@ -46,6 +48,8 @@ void init_ennemies(ennemi_t * table) { free(ennemis_global); } + if (0==ennemis_global_size) + return; int size=sizeof(ennemi_t)*ennemis_global_size; ennemis_global=malloc(size); if (ennemis_global==0) @@ -59,7 +63,10 @@ static void init_plateformes(plateforme_t * table) if (plateformes) { free(plateformes); + plateformes=0; } + if (0==table) + return; int size=sizeof(plateforme_t)*plateforme_table_size; plateformes=malloc(size); if (plateformes==0) @@ -93,11 +100,16 @@ static void init_plateformes(plateforme_t * table) plateforme_table_size=1; init_plateformes(plateforme0);*/ -void set_level(int n) +void set_level(int w, int l) { new_level(); - if (n==0) + w_current_x=0; + w_current_y=0; + ennemis_global_size=0; + plateforme_table_size=0; + + if (w+1==1 && l+1==1) { w_current_x=226; w_current_y=13; @@ -333,28 +345,28 @@ void set_level(int n) init_level(lvl); ennemis_global_size=10; - ennemi_t ennemies0[]= - { - GOOMBA(176,16,-1), - GOOMBA(321,16,-1), - GOOMBA(409,16,-1), - GOOMBA(421,16,-1), - GOOMBA(640,80,-1), - GOOMBA(656,80,-1), - GOOMBA(776,16,-1), - GOOMBA(788,16,-1), - KOOPA_V(856,16,-1), - GOOMBA(912,16,-1), - GOOMBA(924,16,-1) - }; - init_ennemies(ennemies0); + ennemi_t ennemies0[]= + { + GOOMBA(176,16,-1), + GOOMBA(321,16,-1), + GOOMBA(409,16,-1), + GOOMBA(421,16,-1), + GOOMBA(640,80,-1), + GOOMBA(656,80,-1), + GOOMBA(776,16,-1), + GOOMBA(788,16,-1), + KOOPA_V(856,16,-1), + GOOMBA(912,16,-1), + GOOMBA(924,16,-1) + }; + init_ennemies(ennemies0); - plateforme_t plateforme0[]= - { - PLATEFORME_MOVING_H(15,25,16,1,0,60) - }; - plateforme_table_size=1; - init_plateformes(plateforme0); + plateforme_t plateforme0[]= + { + PLATEFORME_MOVING_H(15,25,16,1,0,60) + }; + plateforme_table_size=1; + init_plateformes(plateforme0); mario_x_max=0; @@ -362,8 +374,7 @@ void set_level(int n) mario.p.y=16; } - - if (n==1) + else if (w+1==1 && l+1==2) { w_current_x = 280; w_current_y = 14; @@ -680,20 +691,8 @@ void set_level(int n) } } -void get_lvl_id(int n, char * str) +void get_lvl_id(int w, int l, char * str) { str[3]='\0'; - switch (n) - { - case 0: - str[0]='1'; - str[1]='-'; - str[2]='1'; - return; - case 1: - str[0]='1'; - str[1]='-'; - str[2]='2'; - return; - } + sprintf(str, "%d-%d", w+1, l+1); } diff --git a/src/levelchanger.c b/src/levelchanger.c index fa4c2af..b7ff98e 100644 --- a/src/levelchanger.c +++ b/src/levelchanger.c @@ -16,7 +16,7 @@ static void levelchanger(int w) { - int play_level(int l); + int play_level(int w, int l); extern image_t img_levelchanger; @@ -47,13 +47,32 @@ static void levelchanger(int w) { if (choice==8) { - play_level(0); // Todo : add score lifes etc... + new_game(); + for (int i=0; i<7; i+=0) + { + int a=play_level(w, i); + if (a==0) + lifes--; + if (a==1) + i++; + if (a==-1) + break; + if (lifes==0) + { + extern image_t img_game_over; + dimage(0,0,&img_game_over); + dupdate(); + sleep_ms(3,2000); + // TODO: Highscore management + break; + } + } } else { mario_smaller(); mario_immunity=0; - play_level(choice); + play_level(w, choice); } } @@ -154,7 +173,7 @@ int callback(volatile void *arg) -int play_level(int l) +int play_level(int w, int l) { volatile int has_ticked = 1; timer_setup(0, timer_delay(0, 50000), timer_Po_4, callback, &has_ticked); @@ -162,10 +181,23 @@ int play_level(int l) //int finish_status=0; // FAil finish_level=0; mario_dead=0; - set_level(l); + set_level(w, l); if (w_current==0) return 0; reset_camera(); + + extern image_t img_new_level; + dimage(0,0,&img_new_level); + char lvl[4]; + get_lvl_id(w, l, lvl); + + dtext(57,28, lvl, C_WHITE, C_BLACK); + sprintf(lvl, "%d", lifes); + dtext(65,54, lvl, C_WHITE, C_BLACK); + dupdate(); + sleep_ms(3,2000); + + while(global_quit==0) { if (has_ticked) @@ -182,18 +214,37 @@ int play_level(int l) dupdate(); if (mario_dead) { + for (int i=6; mario.p.y>=0; i--) + { + if (has_ticked) + { + has_ticked=0; + mario.p.y+=i; + dclear(C_WHITE); + world_draw(mario.p.x,mario.p.y); + score_display(); + + dupdate(); + } + else + sleep_ms(3,1); + } + sleep_ms(3,1000); + timer_stop(0); + return 0; } if (finish_level) { timer_stop(0); - return 1; + // TODO ajouter temps au score etc + return finish_level; } - + } else sleep_ms(3,1); } - + } \ No newline at end of file diff --git a/src/main.c b/src/main.c index 4aa784e..bf966c0 100755 --- a/src/main.c +++ b/src/main.c @@ -22,7 +22,7 @@ int main(void) extern font_t font_mario; dfont(&font_mario); //gint_panic_set(system_error); - ll_set_panic(); + //ll_set_panic(); int current_level=0; launch_ui(); diff --git a/src/plateforme.c b/src/plateforme.c index dafa992..48dc98d 100644 --- a/src/plateforme.c +++ b/src/plateforme.c @@ -90,6 +90,8 @@ void move_plateforme(plateforme_t* p) void display_plateformes() { + if (plateformes==0 || plateforme_table_size==0) + return; plateforme_t * p=0; for (int i=0; i