diff --git a/AST3.g3a b/AST3.g3a index df5776a..575b22d 100644 Binary files a/AST3.g3a and b/AST3.g3a differ diff --git a/assets-cg/img/menu.png b/assets-cg/img/menu.png index 0e6b690..271f8d6 100644 Binary files a/assets-cg/img/menu.png and b/assets-cg/img/menu.png differ diff --git a/assets-cg/img/player.png b/assets-cg/img/player.png index 00e04d2..f1b2206 100644 Binary files a/assets-cg/img/player.png and b/assets-cg/img/player.png differ diff --git a/editor/levels/0.lvl b/editor/levels/0.lvl index 59e5d1a..bc4b8a0 100644 --- a/editor/levels/0.lvl +++ b/editor/levels/0.lvl @@ -1,4 +1,4 @@ -111111111111111111111111100000000c300000000000100000000000c3000000k0K0l1000111ddd1111aaa111111111hh1111ddd1111aaa1ddddd00000110000001110001d000000000110s00001110001d000000000111111001110001d0011d1100110b01001110001d00e000000110S01001110001d000000000110001001110001d011111000100t01000m00001d000000000000001000m00001ddddd00000011111111111111111111111116 +111111111111111111111111100000000c300000000000100000000000c3000000K0k0l1000111ddd1111aaa111111111h11111ddd1111aaa1ddddd00000110000001110001d000000000110s00001110001d000000000111111001110001d0011d1100110b01001110001d00e000000110S01001110001d000000000110001001110001d011111000100t01000m00001d000000000000001000m00001ddddd00000011111111111111111111111116 9 13 \ No newline at end of file diff --git a/editor/levels/13.lvl b/editor/levels/13.lvl new file mode 100644 index 0000000..c70bfac --- /dev/null +++ b/editor/levels/13.lvl @@ -0,0 +1 @@ +11111111111111111111111111ddddddddd0S00ddddddddddd1ddddaaaaa000000ddddddddd1ddd00S000000e0ddd0dddddd1dd000000ddddddd00000dddd1daaaa00dd11100S00S000ddd10000000d00000000000S00dd10K000h0d00001100000000dd1111000ddd000000S0d0h00dd1ddd000dd000dd000ddd000dd1dddhhdd000ddddddddd000dd1ddb00S0000100000dd0000dd1dtb00000011s000000000ddd111111d11111111111111dddd6 \ No newline at end of file diff --git a/include/drawlevel.h b/include/drawlevel.h index e7683a6..8d187ca 100644 --- a/include/drawlevel.h +++ b/include/drawlevel.h @@ -1,4 +1,4 @@ void draw_level(char level[]); -void draw_player(int x, int y); +void draw_player(int x, int y, char type); void draw_timer(unsigned int frame); void draw_blackout(int x, int y); diff --git a/src/drawlevel.c b/src/drawlevel.c index 5cee78a..e81034e 100644 --- a/src/drawlevel.c +++ b/src/drawlevel.c @@ -26,10 +26,11 @@ extern bopti_image_t img_appear; //appear block extern bopti_image_t img_appearblock; //appear block extern bopti_image_t img_chrono2appear; //appear block -void draw_player(int x, int y) +void draw_player(int x, int y, char type) { - dimage(x,y,&img_player); + dsubimage(x,y,&img_player, 12*(type-1),0,12,12, DIMAGE_NONE); } + void draw_level(char level[]) { dclear(C_WHITE); diff --git a/src/main.c b/src/main.c index 800a233..a6bcc24 100644 --- a/src/main.c +++ b/src/main.c @@ -29,7 +29,7 @@ int round(float num) //round(2.5) = 3 round(-3.2) = -3 return num < 0 ? num - 0.5 : num + 0.5; } -void game(int *id_level, char mode) +void game(int *id_level, char mode, char *type) { volatile int frame_elapsed = 1; int timer = timer_setup(TIMER_ANY, 1000000/FPS, callback, &frame_elapsed); @@ -56,9 +56,9 @@ void game(int *id_level, char mode) float vspd = 1.0; float hspd = 0; - + if(*id_level==10 && *type==1) *type = 2; + else if(*type!=3) *type = 1; extern bopti_image_t img_speedrun; - set_level(*id_level, level, &start_x, &start_y, &gravity, &appear, &disappear); player_x = start_x; player_y = start_y; @@ -74,7 +74,7 @@ void game(int *id_level, char mode) { draw_level(level); if(blackout) draw_blackout(player_x, player_y); - draw_player(player_x,player_y); + draw_player(player_x, player_y, *type); if(!mode) draw_timer(frame); else draw_timer(framelevel); @@ -88,7 +88,7 @@ void game(int *id_level, char mode) } //dprint(150,100,C_GREEN,"%d",player_x); //dprint(150,120,C_GREEN,"%d",double_check); - if(!mode) dprint_opt(340, 0, C_RGB(255,190,0), C_BLACK, DTEXT_LEFT, DTEXT_TOP, "Coin : %d", coin); + if(!mode) dprint_opt(330, 0, C_RGB(255,190,0), C_BLACK, DTEXT_LEFT, DTEXT_TOP, "Coin : %d", coin); /*dprint(320,120,C_GREEN,"%d",collide_solid(player_x+1, player_y, level)); dprint(320,140,C_GREEN,"%d",collide_solid(player_x-1, player_y, level)); dprint(320,160,C_GREEN,"%d",collide_solid(player_x, player_y+1, level)); @@ -102,6 +102,7 @@ void game(int *id_level, char mode) dupdate(); } + pollevent(); if(keydown(KEY_OPTN)) @@ -206,6 +207,8 @@ void game(int *id_level, char mode) blackout = 0; double_check = 1; framelevel=0; + if(*id_level==10 && *type==1) *type = 2; + else if(*type!=3) *type = 1; } if(collide(player_x, player_y, level, 'k')) //Collide with key1 = disappearance of blocks { @@ -289,13 +292,13 @@ void game(int *id_level, char mode) if(collide(player_x, player_y+(int)vspd+2, level, 'B') && vspd>=5) //Damaged block { if(level[((player_x)/16)+((player_y+25)/16)*25]=='B') level[((player_x)/16)+((player_y+25)/16)*25]='0'; - if(level[((player_x+17)/16)+((player_y+25)/16)*25]=='B' && collide_point(player_x+15, player_y+22, level, 'B')) level[((player_x+17)/16)+((player_y+25)/16)*25]='0'; + if(level[((player_x+12)/16)+((player_y+25)/16)*25]=='B' && collide_point(player_x+12, player_y+22, level, 'B')) level[((player_x+12)/16)+((player_y+25)/16)*25]='0'; vspd=1.0; } if(collide(player_x, player_y-(int)vspd-2, level, 'B') && vspd>=5) //Damaged block { if(level[((player_x)/16)+((player_y-(int)vspd-2)/16)*25]=='B') level[((player_x)/16)+((player_y-(int)vspd-2)/16)*25]='0'; - if(level[((player_x+17)/16)+((player_y-(int)vspd-2)/16)*25]=='B' && collide_point(player_x+15, player_y-12, level, 'B')) level[((player_x+17)/16)+((player_y-(int)vspd-2)/16)*25]='0'; + if(level[((player_x+12)/16)+((player_y-(int)vspd-2)/16)*25]=='B' && collide_point(player_x+12, player_y-12, level, 'B')) level[((player_x+12)/16)+((player_y-(int)vspd-2)/16)*25]='0'; vspd=1.0; } @@ -351,7 +354,7 @@ void game(int *id_level, char mode) clearevents(); dclear(C_WHITE); draw_level(level); - draw_player(player_x,player_y); + draw_player(player_x,player_y, *type); dimage(0,0,&img_speedrun); selected += keydown(KEY_DOWN) - keydown(KEY_UP); if (selected == 2) selected = 0; @@ -410,7 +413,7 @@ void game(int *id_level, char mode) { mode = 1; death_count = 0; - game(id_level, mode); + game(id_level, mode, type); } else main(); } @@ -420,14 +423,15 @@ void game(int *id_level, char mode) int main(void) { char mode = 0; - char valeur = start_menu(); + char type = 1; + char valeur = start_menu(&type); if(!valeur) //normal game (level selection) { int id_level = 1; if(!speed_menu(&id_level)) { mode = 1; - game(&id_level, mode); + game(&id_level, mode, &type); } else main(); } @@ -435,12 +439,12 @@ int main(void) { int id_level = 1; mode = 0; - game(&id_level, mode); + game(&id_level, mode, &type); } else if(valeur==2) { int id_level = 0; - game(&id_level, mode); + game(&id_level, mode, &type); } return 0; } diff --git a/src/menu.c b/src/menu.c index 6e3f543..23d03ca 100644 --- a/src/menu.c +++ b/src/menu.c @@ -4,7 +4,7 @@ #include "setlevel.h" #include "times.h" -char start_menu() +char start_menu(char *type) { extern bopti_image_t img_menu; char menu_loop = 1; @@ -34,6 +34,7 @@ char start_menu() if(!buffer) return -1; } else buffer = 0; + if(keydown(KEY_5) && keydown(KEY_6)) *type = 3; while (keydown_any(KEY_UP, KEY_DOWN, 0)) clearevents(); } return selection; @@ -80,12 +81,6 @@ char speed_menu(int *id_level) { draw_time(*id_level); } - if (keydown(KEY_POWER)) - { - *id_level=0; - del_level(level); - return 0; - } if(keydown_any(KEY_EXIT, KEY_MENU, 0)) { if(!buffer) return 1; } diff --git a/src/setlevel.c b/src/setlevel.c index ae9341f..2ba9e4a 100644 --- a/src/setlevel.c +++ b/src/setlevel.c @@ -2,7 +2,7 @@ #include void set_level(int id_level, char level[], int *startx, int *starty, char *gravity, int *appear, int *disappear){ switch(id_level){case 0: -memcpy(level,"111111111111111111111111100000000c300000000000100000000000c3000000k0K0l1000111ddd1111aaa111111111hh1111ddd1111aaa1ddddd00000110000001110001d000000000110s00001110001d000000000111111001110001d0011d1100110b01001110001d00e000000110S01001110001d000000000110001001110001d011111000100t01000m00001d000000000000001000m00001ddddd0000001111111111111111111111111",350); +memcpy(level,"111111111111111111111111100000000c300000000000100000000000c3000000K0k0l1000111ddd1111aaa111111111h11111ddd1111aaa1ddddd00000110000001110001d000000000110s00001110001d000000000111111001110001d0011d1100110b01001110001d00e000000110S01001110001d000000000110001001110001d011111000100t01000m00001d000000000000001000m00001ddddd0000001111111111111111111111111",350); *appear=9; *disappear=13; break; @@ -50,6 +50,9 @@ break; case 12: memcpy(level,"1111111111010001dd11111110000001000013331001000000000000100t01000h0010000001111iB111111000h0013311111e00ik11d111000300300000d10ddi011d0010003003000s0d10aai01000010001hh1hh11111000i01h1h1100010010000011dd0i000000h00010010001a11aa01dd0dd110001001000h0110001dd1d1110S0100100010110000S0S0001ddd100h0001Kd100000S0S001111100h00011111111dddd10h0001111111111",350); break; +case 13: +memcpy(level,"11111111111111111111111111ddddddddd0S00ddddddddddd1ddddaaaaa000000ddddddddd1ddd00S000000e0ddd0dddddd1dd000000ddddddd00000dddd1daaaa00dd11100S00S000ddd10000000d00000000000S00dd10K000h0d00001100000000dd1111000ddd000000S0d0h00dd1ddd000dd000dd000ddd000dd1dddhhdd000ddddddddd000dd1ddb00S0000100000dd0000dd1dtb00000011s000000000ddd111111d11111111111111dddd",350); +break; } set_gravity(id_level, gravity); unsigned int x = 0; @@ -104,6 +107,9 @@ break; case 12: *default_gravity = 0; break; +case 13: +*default_gravity = 0; +break; }} void del_level(char level[]) {memcpy(level,"00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",350);} \ No newline at end of file diff --git a/src/times.c b/src/times.c index c68193c..a5e067d 100644 --- a/src/times.c +++ b/src/times.c @@ -12,7 +12,7 @@ void check_medal(unsigned int frame_level, int id_level) { float time=1.0; float framefloat = frame_level; -float level_time[] = {5.81,8.38,5.89,8.68,3.84,3.58,6.81,7.48,10.46,9.25,6.48,11.94}; +float level_time[] = {5.81,8.38,5.89,8.68,3.84,3.58,6.81,7.48,10.46,9.25,6.48,11.94,5.68}; time = level_time[id_level-1]; if(frame_level/FPS < (unsigned int)time || (frame_level/FPS <= (unsigned int)time && @@ -29,7 +29,7 @@ void draw_time(int id_level) { dclear(C_WHITE); float time=1.0; -float level_time[] = {5.81,8.38,5.89,8.68,3.84,3.58,6.81,7.48,10.46,9.25,6.48,11.94}; +float level_time[] = {5.81,8.38,5.89,8.68,3.84,3.58,6.81,7.48,10.46,9.25,6.48,11.94,5.68}; time = level_time[id_level-1]; dimage(160,90,&img_createur); diff --git a/times.lvl b/times.lvl index 895efbf..603fe1c 100644 --- a/times.lvl +++ b/times.lvl @@ -10,3 +10,4 @@ 9.25 6.48 11.94 +5.68