diff --git a/AST3.g3a b/AST3.g3a index 504c558..260f915 100644 Binary files a/AST3.g3a and b/AST3.g3a differ diff --git a/assets-cg/img/dead.png b/assets-cg/img/dead.png index 5789d78..266f58c 100644 Binary files a/assets-cg/img/dead.png and b/assets-cg/img/dead.png differ diff --git a/assets-cg/img/keyblock.png b/assets-cg/img/keyblock.png index eda3177..d8383b8 100644 Binary files a/assets-cg/img/keyblock.png and b/assets-cg/img/keyblock.png differ diff --git a/assets-cg/img/menu.png b/assets-cg/img/menu.png new file mode 100644 index 0000000..0e6b690 Binary files /dev/null and b/assets-cg/img/menu.png differ diff --git a/assets-cg/img/solid_0.png b/assets-cg/img/solid_0.png index a88fb56..2326528 100644 Binary files a/assets-cg/img/solid_0.png and b/assets-cg/img/solid_0.png differ diff --git a/editor/img/dead.png b/editor/img/dead.png index 5789d78..266f58c 100644 Binary files a/editor/img/dead.png and b/editor/img/dead.png differ diff --git a/editor/img/solid_0.png b/editor/img/solid_0.png index a88fb56..2d3bd5e 100644 Binary files a/editor/img/solid_0.png and b/editor/img/solid_0.png differ diff --git a/editor/levels/2.lvl b/editor/levels/2.lvl index 38c3221..849961c 100644 --- a/editor/levels/2.lvl +++ b/editor/levels/2.lvl @@ -1 +1,4 @@ -111001111111100d0d0011111100000111ddd000d0d0000001100000000000000dtd00000e1111111ddd111111111111111100000000000000000l00d0000111111111dd111110100d000110001100000000010100d0001000011000000000d0d00d00000000l0000000000d0d00d00001111dd111000000d0d00111111000011111ddd00d0d00111111000011111ddd00d0d001111110s0011111ddd00d0d0011111111001111111100d0d00111116 +10001011111011111111111111000101dd10001111dddd11110000101dd10001000000000001111101dd1aaa1000ccccddd110s00010013331000000000011dddd110010001mmmdd00000100000000010e010t0dd00000011111100011111dddddddd1111k00000001d000111001111111111111101d00000000000111000010000100000000000000010K010000100011100000011110001000010001110000dd11110001011111011111111111117 + +4 +7 \ No newline at end of file diff --git a/editor/levels/4.lvl b/editor/levels/4.lvl index dee82d5..b4e7501 100644 --- a/editor/levels/4.lvl +++ b/editor/levels/4.lvl @@ -1,4 +1,3 @@ 1dddddd100111111111111111000000000011111000000000000000000l01100c00000000001aaaaaaa111100c00000000011dddddddddd1001aaaaaaaaa11cccccccccc1001ddddddddd1000000000001331000000aa000000000000s10e1k0000000001ccccccccc111111111113311100000000011001000000000110000000001100b0000000001100000000011t0b00000000011000K0000011111aaaaaaaaa1111111110011111ddddddddd16 - 12 1 \ No newline at end of file diff --git a/editor/levels/6.lvl b/editor/levels/6.lvl index a396c46..b3d3ae7 100644 --- a/editor/levels/6.lvl +++ b/editor/levels/6.lvl @@ -1,4 +1,4 @@ -11111111111011111dddd1111100001dd0000dd100000000011s0001dd0d11dd10000000001111001dd0d1111100111100011dd001dt0d10000001dd100011dd001d11d10000001dd100011dd00dd11110011111dd100011dd00000000001dddddd100011dd1111dbd1111ddd111100011ddddddd0dd1d1ddd100000011ddddddd0000d1ddd1e0000011ddddddd1110d1ddd111cccc11dddddddddd0d1ddd111dddd111111111111011111111111116 +11111111111011111dddd1111100001dd0000dd100000000011s0001dd0d11dd10000000001111001dd0d111dd00111100011dd001dt0d10000001dd100011dd001d11d10000001dd100011dd00dd11110011111dd100011dd00000000001dddddd100011dd1111dbd1111ddd111100011ddddddd0dd1d1ddd100000011ddddddd0000d1ddd1e0000011ddddddd1110d1ddd111cccc11dddddddddd0d1ddd111dddd111111111111011111111111116 12 7 \ No newline at end of file diff --git a/editor/levels/7.lvl b/editor/levels/7.lvl new file mode 100644 index 0000000..38c3221 --- /dev/null +++ b/editor/levels/7.lvl @@ -0,0 +1 @@ +111001111111100d0d0011111100000111ddd000d0d0000001100000000000000dtd00000e1111111ddd111111111111111100000000000000000l00d0000111111111dd111110100d000110001100000000010100d0001000011000000000d0d00d00000000l0000000000d0d00d00001111dd111000000d0d00111111000011111ddd00d0d00111111000011111ddd00d0d001111110s0011111ddd00d0d0011111111001111111100d0d00111116 diff --git a/include/times.h b/include/times.h index 75d49c0..6df95ba 100644 --- a/include/times.h +++ b/include/times.h @@ -1 +1,2 @@ void check_medal(unsigned int frame_level, int id_level); +void draw_time(int id_level); diff --git a/project.cfg b/project.cfg index c937845..1601dec 100644 --- a/project.cfg +++ b/project.cfg @@ -84,4 +84,5 @@ LDFLAGS_CG += -Wl,-Map=build-cg/map # # FONT.hexa.png = charset:print grid.size:3x5 grid.padding:1 -IMG.speedrun.png = profile:p4 +IMG.speedrun.png = profile:p2 +IMG.menu.png = profile:p4 diff --git a/src/main.c b/src/main.c index 585c1ed..9423fdd 100644 --- a/src/main.c +++ b/src/main.c @@ -14,6 +14,8 @@ #define ACCELERATION 0.2 #define MAX_VSPD 9.0 +int main(void); + int callback(volatile int *frame_elapsed) { *frame_elapsed = 1; @@ -45,6 +47,7 @@ void game(int *id_level, char mode) float vspd = 1.0; int vert_spd = 1; + extern bopti_image_t img_speedrun; set_level(*id_level, level, &start_x, &start_y, &gravity, check_coin, &appear, &disappear); player_x = start_x; @@ -65,7 +68,7 @@ void game(int *id_level, char mode) if(!mode) draw_timer(frame); else draw_timer(framelevel); - if(*id_level==1) + if(*id_level==1 && !mode) { dprint(85,180,C_RGB(245,245,0),"SHIFT"); dprint(167,19,C_RGB(110,110,110),"Ne touchez pas ces blocs !"); @@ -75,7 +78,7 @@ void game(int *id_level, char mode) } dprint(150,100,C_GREEN,"%d",player_x); dprint(150,120,C_GREEN,"%d",player_y); - dprint_opt(340, 0, C_RGB(255,190,0), C_BLACK, DTEXT_LEFT, DTEXT_TOP, "Coin : %d", coin); + if(!mode) dprint_opt(340, 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, gravity)); dprint(320,140,C_GREEN,"%d",collide_solid(player_x-1, player_y, level, gravity)); dprint(320,160,C_GREEN,"%d",collide_solid(player_x, player_y+1, level, gravity)); @@ -266,19 +269,23 @@ void game(int *id_level, char mode) { char menu_loop = 1; char selected = 0; - int Y_POS = 90; + int Y_POS = 18; while(menu_loop) { clearevents(); dclear(C_WHITE); + draw_level(level); + draw_player(player_x,player_y); + dimage(0,0,&img_speedrun); selected += keydown(KEY_DOWN) - keydown(KEY_UP); if (selected == 2) selected = 0; else if (selected == -1) selected = 1; dtext(32, Y_POS, C_BLACK, "CONTINUE"); - dtext(32, Y_POS + 12, C_BLACK, "EXIT GAME"); + if(!mode) dtext(32, Y_POS + 12, C_BLACK, "MENU"); + else dtext(32, Y_POS + 12, C_BLACK, "SPEEDRUN MENU"); dtext(16, Y_POS + (selected * 12), C_BLACK, ">"); - dprint(32, Y_POS + 36, C_RGB(83,255,0), "LEVEL : %d", *id_level); - dprint(32, Y_POS + 48, C_RGB(255,178,0), "COIN : %d", coin); + dprint(180, 45, C_RGB(83,255,0), "LEVEL : %d", *id_level); + dprint(320, 8, C_RGB(255,178,0), "COIN : %d", coin); dupdate(); if (keydown_any(KEY_SHIFT, KEY_EXE, 0)) { @@ -300,17 +307,22 @@ void game(int *id_level, char mode) timer_stop(timer); if(mode) { - dclear(C_WHITE); - dprint_opt(198, 112, C_WHITE, C_BLACK, DTEXT_LEFT, DTEXT_TOP, "%u.%02u",(framelevel)/FPS, (framelevel)%FPS); - check_medal(framelevel, *id_level); - dupdate(); - getkey(); + if(game_loop) + { + dclear(C_WHITE); + dprint_opt(198, 112, C_WHITE, C_BLACK, DTEXT_LEFT, DTEXT_TOP, "%u.%02u",(framelevel)/FPS, (framelevel)%FPS); + check_medal(framelevel, *id_level); + dupdate(); + sleep_ms(5000); + } if(!speed_menu(id_level)) { mode = 1; game(id_level, mode); } + else main(); } + if(!mode) main(); } int main(void) @@ -331,6 +343,7 @@ int main(void) mode = 1; game(&id_level, mode); } + else main(); } return 0; } diff --git a/src/menu.c b/src/menu.c index e388f1c..8b9ebff 100644 --- a/src/menu.c +++ b/src/menu.c @@ -2,36 +2,37 @@ #include #include #include "setlevel.h" +#include "times.h" char start_menu() { + extern bopti_image_t img_menu; char menu_loop = 1; char selection = 0; + char buffer = 1; + char buffer2 = 1; int Y_POS = 90; while(menu_loop) { clearevents(); dclear(C_WHITE); + dimage(0,0,&img_menu); selection += keydown(KEY_DOWN) - keydown(KEY_UP); - if (selection == 2) selection = 0; - else if (selection == -1) selection = 1; + if (selection == 3) selection = 0; + else if (selection == -1) selection = 2; dtext(32, Y_POS, C_BLACK, "PLAY"); dtext(32, Y_POS + 12, C_BLACK, "SPEEDRUN MODE"); + dtext(32, Y_POS + 24, C_BLACK, "EXIT GAME"); dtext(16, Y_POS + (selection * 12), C_BLACK, ">"); dupdate(); - if (keydown_any(KEY_SHIFT, KEY_EXE, 0)) - { - switch (selection) - { - case 0: - return selection; - break; - case 1: - return selection; - break; - } + if (keydown_any(KEY_SHIFT, KEY_EXE, 0)) { + if(!buffer2) return selection; } - if(keydown_any(KEY_EXIT, KEY_MENU, 0)) return -1; + else buffer2 = 0; + if(keydown_any(KEY_EXIT, KEY_MENU, 0)) { + if(!buffer) return -1; + } + else buffer = 0; while (keydown_any(KEY_UP, KEY_DOWN, 0)) clearevents(); } return selection; @@ -62,7 +63,7 @@ char speed_menu(int *id_level) set_level(*id_level, level, &start_x, &start_y, &gravity, check_coin, &appear, &disappear); draw_level(level); dimage(0,0,&img_speedrun); - dtext(340, 214, C_GREEN, "< PLAY >"); + dtext(340, 214, C_BLACK, "TIME"); dtext(190, 45, C_BLACK, "Time : "); dprint(80,20,C_BLACK,"Level : %d",*id_level); dupdate(); @@ -75,6 +76,10 @@ char speed_menu(int *id_level) } } else check = 0; + if (keydown(KEY_F6)) + { + draw_time(*id_level); + } if(keydown_any(KEY_EXIT, KEY_MENU, 0)) return 1; while (keydown_any(KEY_RIGHT, KEY_LEFT, 0)) clearevents(); } diff --git a/src/setlevel.c b/src/setlevel.c index b6a2e2f..75970cc 100644 --- a/src/setlevel.c +++ b/src/setlevel.c @@ -5,7 +5,9 @@ switch(id_level){case 1: memcpy(level,"10011111111dddd111111111100011110000000000000000000001111001111111dddd100001111111001dd000ddddd111111111111001dd0t0ddddddddd11000001001dd000ddddddddd11000001001aaaaaaaaaaaaaa110s00010010000000000000e1111100100100000000000aaa11111001001000000000ddddd1111100100100000000011111100010000010000000003000000001000001000K0000030k00010011111111111111111111116",350); break; case 2: -memcpy(level,"111001111111100d0d0011111100000111ddd000d0d0000001100000000000000dtd00000e1111111ddd111111111111111100000000000000000l00d0000111111111dd111110100d000110001100000000010100d0001000011000000000d0d00d00000000l0000000000d0d00d00001111dd111000000d0d00111111000011111ddd00d0d00111111000011111ddd00d0d001111110s0011111ddd00d0d0011111111001111111100d0d00111116",350); +memcpy(level,"10001011111011111111111111000101dd10001111dddd11110000101dd10001000000000001111101dd1aaa1000ccccddd110s00010013331000000000011dddd110010001mmmdd00000100000000010e010t0dd00000011111100011111dddddddd1111k00000001d000111001111111111111101d00000000000111000010000100000000000000010K010000100011100000011110001000010001110000dd1111000101111101111111111111",350); +*appear=4; +*disappear=7; break; case 3: memcpy(level,"11001111111001111111111111000111dddd000000000100013000111dddd00000000010003300000000dd11111000010e03100000000dd03a01000011111111110000dd03a01000000001100s1dd00ddt3a0100000000110001dd00dd1110100000000110001dd0Kdd00001ddd000ddd10001dd00dd00001111100ddd10001dd00dd00001000000ddd30001dd0000000010k000000330001dd0000000010000000031d001111111001111111111117",350); @@ -21,10 +23,13 @@ memcpy(level,"000000000000000000000000000000000000000000000000000000000000000000 *disappear=6; break; case 6: -memcpy(level,"11111111111011111dddd1111100001dd0000dd100000000011s0001dd0d11dd10000000001111001dd0d1111100111100011dd001dt0d10000001dd100011dd001d11d10000001dd100011dd00dd11110011111dd100011dd00000000001dddddd100011dd1111dbd1111ddd111100011ddddddd0dd1d1ddd100000011ddddddd0000d1ddd1e0000011ddddddd1110d1ddd111cccc11dddddddddd0d1ddd111dddd11111111111101111111111111",350); +memcpy(level,"11111111111011111dddd1111100001dd0000dd100000000011s0001dd0d11dd10000000001111001dd0d111dd00111100011dd001dt0d10000001dd100011dd001d11d10000001dd100011dd00dd11110011111dd100011dd00000000001dddddd100011dd1111dbd1111ddd111100011ddddddd0dd1d1ddd100000011ddddddd0000d1ddd1e0000011ddddddd1110d1ddd111cccc11dddddddddd0d1ddd111dddd11111111111101111111111111",350); *appear=12; *disappear=7; break; +case 7: +memcpy(level,"111001111111100d0d0011111100000111ddd000d0d0000001100000000000000dtd00000e1111111ddd111111111111111100000000000000000l00d0000111111111dd111110100d000110001100000000010100d0001000011000000000d0d00d00000000l0000000000d0d00d00001111dd111000000d0d00111111000011111ddd00d0d00111111000011111ddd00d0d001111110s0011111ddd00d0d0011111111001111111100d0d00111116",350); +break; }if(check_coin) for (int i = 0; level[i]!='\0' ; i++) if(level[i]=='t') level[i]='0'; set_gravity(id_level, gravity); unsigned int x = 0; @@ -44,7 +49,7 @@ switch(id_level){case 1: *default_gravity = 0; break; case 2: -*default_gravity = 0; +*default_gravity = 1; break; case 3: *default_gravity = 1; @@ -58,6 +63,9 @@ break; case 6: *default_gravity = 0; break; +case 7: +*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 e87c4ad..ce4b0c6 100644 --- a/src/times.c +++ b/src/times.c @@ -1,6 +1,8 @@ #include "times.h" #include "define.h" #include +#include +#include extern bopti_image_t img_bronze; extern bopti_image_t img_argent; @@ -9,27 +11,108 @@ extern bopti_image_t img_createur; void check_medal(unsigned int frame_level, int id_level) { + int time=1, time2=1; switch(id_level) { case 1: - { - unsigned int time = 6; - unsigned int time2 = 5; - if(frame_level/FPS < time || (frame_level/FPS <= time && frame_level%FPS <= time2)) dimage(380,8,&img_createur); - if(frame_level/FPS < time*1.05 || (frame_level/FPS <= time*1.05 && frame_level%FPS <= time2*1.05)) dimage(360,8,&img_or); - if(frame_level/FPS < time*1.2 || (frame_level/FPS <= time*1.2 && frame_level%FPS <= time2*1.2)) dimage(340,8,&img_argent); - if(frame_level/FPS < time*1.5|| (frame_level/FPS <= time*1.5 && frame_level%FPS <= time2*1.5)) dimage(320,8,&img_bronze); + time = 5; + time2 = 60; break; - } case 2: + time = 9; + time2 = 36; break; case 3: + time = 6; + time2 = 12; break; case 4: + time = 8; + time2 = 57; break; case 5: + time = 4; + time2 = 15; break; case 6: - break; + time = 3; + time2 = 62; + break; + case 7: + time = 8; + time2 = 25; + break; + } + /*if(frame_level/FPS < time || (frame_level/FPS <= time && frame_level%FPS <= time2)) dimage(380,8,&img_createur); + if(frame_level/FPS < (int)(time*1.05+0.5) || (frame_level/FPS <= (int)(time*1.05+0.5) && frame_level%FPS <= (int)(time2*1.8+0.5))) dimage(360,8,&img_or); + if(frame_level/FPS < (int)(time*1.2+0.5) || (frame_level/FPS <= (int)(time*1.2+0.5) && frame_level%FPS <= (int)(time2*1.2+0.5))) dimage(340,8,&img_argent); + if(frame_level/FPS < (int)(time*1.5+0.5) || (frame_level/FPS <= (int)(time*1.5+0.5) && frame_level%FPS <= (int)(time2*1.5+0.5))) dimage(320,8,&img_bronze);*/ + + if(time2*1.8>=100) + { + if(frame_level/FPS < (unsigned int)(time*1.05+0.5+1) || (frame_level/FPS <= (unsigned int)(time*1.05+0.5+1) && frame_level%FPS <= (unsigned int)(time2*2+0.5-100))) dimage(360,8,&img_or); + } + else if(frame_level/FPS < (unsigned int)(time*1.05+0.5) || (frame_level/FPS <= (unsigned int)(time*1.05+0.5) && frame_level%FPS <= (unsigned int)(time2*2+0.5))) dimage(360,8,&img_or); + if(time2*1.2>=100) + { + if(frame_level/FPS < (unsigned int)(time*1.2+0.5)+1 || (frame_level/FPS <= (unsigned int)(time*1.2+0.5)+1 && frame_level%FPS <= (unsigned int)(time2*1.2+0.5)-100)) dimage(340,8,&img_argent); + } + else if(frame_level/FPS < (unsigned int)(time*1.2+0.5) || (frame_level/FPS <= (unsigned int)(time*1.2+0.5) && frame_level%FPS <= (unsigned int)(time2*1.2+0.5))) dimage(340,8,&img_argent); + if(time2*1.5>=100) + { + if(frame_level/FPS < (unsigned int)(time*1.5+0.5)+1 || (frame_level/FPS <= (unsigned int)(time*1.5+0.5)+1 && frame_level%FPS <= (unsigned int)(time2*1.5+0.5)-100)) dimage(320,8,&img_bronze); + } + else if(frame_level/FPS < (unsigned int)(time*1.5+0.5) || (frame_level/FPS <= (unsigned int)(time*1.5+0.5) && frame_level%FPS <= (unsigned int)(time2*1.5+0.5))) dimage(320,8,&img_bronze); + +} + +void draw_time(int id_level) +{ + dclear(C_WHITE); + int time=1, time2=1; + switch(id_level) + { + case 1: + time = 5; + time2 = 60; + break; + case 2: + time = 9; + time2 = 36; + break; + case 3: + time = 6; + time2 = 12; + break; + case 4: + time = 8; + time2 = 57; + break; + case 5: + time = 4; + time2 = 15; + break; + case 6: + time = 3; + time2 = 62; + break; + case 7: + time = 8; + time2 = 25; + break; + } + dimage(160,90,&img_createur); + dprint(175,90,C_BLACK,"%d.%02d",time,time2); + dimage(160,110,&img_or); + if(time2*1.8>=100) dprint(175,110,C_BLACK,"%d.%02d",(int)(time*1.05+0.5)+1, (int)(time2*2+0.5)-100); + else dprint(175,110,C_BLACK,"%d.%02d",(int)(time*1.05+0.5), (int)(time2*2+0.5)); + dimage(160,130,&img_argent); + if(time2*1.2>=100) dprint(175,110,C_BLACK,"%d.%02d",(int)(time*1.05+0.5)+1, (int)(time2*1.2+0.5)-100); + else dprint(175,130,C_BLACK,"%d.%02d",(int)(time*1.2+0.5), (int)(time2*1.2+0.5)); + dimage(160,150,&img_bronze); + if(time2*1.5>=100) dprint(175,110,C_BLACK,"%d.%02d",(int)(time*1.05+0.5)+1, (int)(time2*1.5+0.5)-100); + else dprint(175,150,C_BLACK,"%d.%02d",(int)(time*1.5+0.5), (int)(time2*1.5+0.5)); + dupdate(); + getkey(); }