From a47df461c813d6a93b6195745b5faa23a96f1640 Mon Sep 17 00:00:00 2001 From: Tituya Date: Mon, 27 Jul 2020 01:32:44 +0200 Subject: [PATCH] =?UTF-8?q?menu=20+=20nouvelle=20carte=20+=20temps=20calcu?= =?UTF-8?q?l=C3=A9s=20+=20textures?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AST3.g3a | Bin 107720 -> 155484 bytes assets-cg/img/dead.png | Bin 102 -> 406 bytes assets-cg/img/keyblock.png | Bin 116 -> 418 bytes assets-cg/img/menu.png | Bin 0 -> 21129 bytes assets-cg/img/solid_0.png | Bin 116 -> 460 bytes editor/img/dead.png | Bin 102 -> 406 bytes editor/img/solid_0.png | Bin 116 -> 461 bytes editor/levels/2.lvl | 5 +- editor/levels/4.lvl | 1 - editor/levels/6.lvl | 2 +- editor/levels/7.lvl | 1 + include/times.h | 1 + project.cfg | 3 +- src/main.c | 35 +++++++++---- src/menu.c | 35 +++++++------ src/setlevel.c | 14 +++-- src/times.c | 101 +++++++++++++++++++++++++++++++++---- 17 files changed, 156 insertions(+), 42 deletions(-) create mode 100644 assets-cg/img/menu.png create mode 100644 editor/levels/7.lvl diff --git a/AST3.g3a b/AST3.g3a index 504c558874502fb7a3557baedb288790cf01a841..260f915c5803aa1efa5d138a35bca0989c251bca 100644 GIT binary patch delta 34059 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 diff --git a/assets-cg/img/keyblock.png b/assets-cg/img/keyblock.png index eda31771e0f5eac7ad44fd82fc3658e81291b136..d8383b831a7a073846fe6887de3bcb083a87b879 100644 GIT binary patch delta 375 zcmV--0f_!|q63gKe*sxZL_t(Ijipn`vg0raY!?R{r@-S;2b0YbI8Eh^^U{E z5@P9YFtyeK|6zO_2cFO8&AIP;o!526zVA4W;}-Mt^8*0T)*8$V$8o^SaGodJ9ox2n zh!7Eo2+TRFu&Sc>{yk>^07L|~ZG*d4r|Vlpz}*oM5D@?Xe?11rY%N#uyl5d<(o@ub6XU&WYZ8C5i|{1QAh*%nTyJx~>oryx(tVb}=)E$c?v| zRicPMRjX)HQ)VuR=`^z{l<&;^OOwB}zuZ(6V+^=Ei0H-Dd(O3w7ge=49q>aZeAiHBDB`3 z;Eh5mn!yo)F-DCpgU|CUJyi9dh*t!uM{5mp&Js3xC;S|9{Y+Ppu0mb6Fu&O#?GKB_ V6A+!Gid+By002ovPDHLkV1jRSvC9Ae delta 71 zcmZ3)Tr$DfkwM$j#WBR9H#z3l{(tt&tPLCMF4b@14LF^fkg(`T85>($AhR26 diff --git a/assets-cg/img/menu.png b/assets-cg/img/menu.png new file mode 100644 index 0000000000000000000000000000000000000000..0e6b6900bbdd4c00b9eda4c51b66dfe8ca1fdd67 GIT binary patch literal 21129 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 literal 0 HcmV?d00001 diff --git a/assets-cg/img/solid_0.png b/assets-cg/img/solid_0.png index a88fb56352b6f2a44932367e16beb4a873912188..232652877bd43a14f7252852d08f59488811aa2e 100644 GIT binary patch delta 418 zcmV;T0bTxd%ma`!e*uF@L_t(Ijir;p4&pEjL|+`I6j~(U#((htf5e5tfu@f4fZ~O{ zZly|9G9J&2-E_O%od0;_d_HqJoqi6F$76gS4hQCW=5o3GV6N9I06Gi{v; z9+(-^G?7xm-Entnt<3WbKq-ZFT|WdJ0O0OS(?n}6I`umNyd>W5%i7IMy{ zlu%X73=v`5Hq4CH8X|(KA|m9RskQQYy*>ovII?XUwN{p8iK3h{su~2fRzw65VZYxq z&olS?9c`^)W|$eJ6htIsZrc`CN-3x+Ip?qfpgCvE3{?%kt+fcS%NCKyc{ z)>zjyB=sm7e>-n+;DAf#TOJ;s#cVxN23ZVS bc^DY3Ww4#TfBsV%0}yz+`njxgN@xNA0b?7o diff --git a/editor/img/dead.png b/editor/img/dead.png index 5789d78b3bdaef45467407c6b05b1dfafa6c6179..266f58cc8b66f4acf944610d674ab08cd91ed94b 100644 GIT binary patch delta 363 zcmV-x0hIn`mIIJ8e*sNNL_t(Ijct>`ZX_WLL?304=9>Ti%{^q+ZFdgXOh*b5V(7u< zxm=8YUtc#sMi3DI_;mr0_l?G&he;qIz|4>tvxC3gA(Mn{6o3G~Zz7XP#Ky1N$s{@%pAql(E@3Tbe-c3MPE^f}7&R04ek6LX zeqAImJ6F1Iibrsl<~3I)=8o3F=7h{GA`$%mBlrWl>$VcG#5v!=?1;l3Ntz_!l-uX# zG9xlKQun_OtjFz9duxJ9DtF%{RIopApI!Jh;`7hcoCIuRyx+W9FVdQ&MBb@08@_>rT_o{ diff --git a/editor/img/solid_0.png b/editor/img/solid_0.png index a88fb56352b6f2a44932367e16beb4a873912188..2d3bd5e58dfea9ab7710b96eefab708eb43bf2fd 100644 GIT binary patch delta 419 zcmV;U0bKrc%>$4#e*uI^L_t(Ijir;p4&pEjM4#QHp;aqUj(h_D|63d=5)w_E?17CJ z&Ks#}6?-P0nMQ86TjM{LZrjHBeE!*7*VVtLX<}IxE|<$s&-Ho*Af%KirLb)qX2!nn zlv0@I8C9j$O0AWgGt0675M$*1et!sBYqa)J(OP4kXKJkgf7DvNR!X6@=7cfE55eQ{ zAcTO3_`9`6&KWbK){3eULSPsM0FL9}^?H2>rfH&-!f_ltpHIvTGjl*|4G|&djH;rl z%=65;uH5f;Lamijii1SNfoAq``tJn&=~4i~Fbod(*4w4@Q&rV{={0~5V?;#U+1{Y4 z^qQ)=iDu?xe*j_Mch}t~QB{uPAm_|Dj`S%-1QGEh+{Ev!`${R1Qu+Y_h=`K{gb)H| z=8fGTGxG#Q#EJVPPVn6rWBhTrl;SC*l)SGW01&#feZ$N=^Y1wKePGLEB9@CU?X8dQLX61@Nb N002ovPDHLkV1jMM&*}gG delta 71 zcmX@hTr$DfkwM$j#WBR9H~CL}^Fw=P)`p7*4>sm7e>-n+;DAf#TOJ;s#cVxN23ZVS bc^DY3Ww4#TfBsV%0}yz+`njxgN@xNA0je9b 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(); }