diff --git a/AST3.g3a b/AST3.g3a index 42f53e8..6bfd0cf 100644 Binary files a/AST3.g3a and b/AST3.g3a differ diff --git a/assets-cg/img/ice.png b/assets-cg/img/ice.png new file mode 100644 index 0000000..67f595d Binary files /dev/null and b/assets-cg/img/ice.png differ diff --git a/assets-cg/img/switch.png b/assets-cg/img/switch.png new file mode 100644 index 0000000..74d6021 Binary files /dev/null and b/assets-cg/img/switch.png differ diff --git a/editor/AST3generator.py b/editor/AST3generator.py index 1d0389b..e17fb10 100644 --- a/editor/AST3generator.py +++ b/editor/AST3generator.py @@ -93,6 +93,10 @@ def place(): fenetre.blit(pygame.transform.scale(blackout,(52,52)),(52*b,52*a)) if grille[a][b]=="B": fenetre.blit(pygame.transform.scale(damaged,(52,52)),(52*b,52*a)) + if grille[a][b]=="i": + fenetre.blit(pygame.transform.scale(ice,(52,52)),(52*b,52*a)) + if grille[a][b]=="S": + fenetre.blit(pygame.transform.scale(switch,(52,52)),(52*b,52*a)) fenetre.blit(level, (10, 10)) fenetre.blit(levelgr, (10, 60)) fenetre.blit(timeapp, (55, 10)) @@ -116,7 +120,7 @@ fenetre = pygame.display.set_mode((25*52, 14*52)) font = pygame.font.SysFont('arial',25,True) #Defini la suite des blocs pendant les changements (cliquer sur un 1 va donner un 2...) -suite=["0","1","d","s","e","k","3","K","a","c","m","t","l","b","B"] +suite=["0","1","d","s","e","k","3","K","a","c","m","t","l","b","B","i","S"] id_level = 0 gravityid = 6 @@ -138,7 +142,8 @@ coin = pygame.image.load("editor/img/coin.png").convert_alpha() change = pygame.image.load("editor/img/change.png").convert_alpha() blackout = pygame.image.load("editor/img/blackout.png").convert_alpha() damaged = pygame.image.load("editor/img/damaged.png").convert_alpha() - +switch = pygame.image.load("editor/img/switch.png").convert_alpha() +ice = pygame.image.load("editor/img/ice.png").convert_alpha() load(id_level) diff --git a/editor/img/ice.png b/editor/img/ice.png new file mode 100644 index 0000000..67f595d Binary files /dev/null and b/editor/img/ice.png differ diff --git a/editor/img/key2block4.png b/editor/img/key2block4.png deleted file mode 100644 index d38d315..0000000 Binary files a/editor/img/key2block4.png and /dev/null differ diff --git a/editor/img/switch.png b/editor/img/switch.png new file mode 100644 index 0000000..74d6021 Binary files /dev/null and b/editor/img/switch.png differ diff --git a/editor/levels/0.lvl b/editor/levels/0.lvl index 0080bf1..72e6895 100644 --- a/editor/levels/0.lvl +++ b/editor/levels/0.lvl @@ -1,4 +1,4 @@ -11100111111111111111111111l00000l01BB1BB1BB1BB1BB1100000000100100100100100110000000010000010010010011b0t000001000000001001001111111000100000000000100111111d000100000000000000100000d000100000000000000010000d000000000000000011110000d000030000a0c0m0000110000d000030000a0c0m0000110000d000030000a0c0m0000110s00d00k0300K0a0c0m00e0111100111111111111111111116 +11100111111111111111111111l00000l01BB1BB1BB1BB1BB11000000001001001001001001100000000i0000010010010011b0t00000i000000001001001111111000i00000000000100111111d000i000S00S0000000100000d000i00000000000000010000d000000000000000011110000d000030000a0c0m0000110000d000030000a0c0m0000110000d000030000a0c0m0000110s00d00k0300K0a0c0m00e0111100111111111111111111116 7 9 \ No newline at end of file diff --git a/editor/levels/11.lvl b/editor/levels/11.lvl index 6aa777f..96efeeb 100644 --- a/editor/levels/11.lvl +++ b/editor/levels/11.lvl @@ -1 +1 @@ -11111111111111111111111111000000010000000100000101100000001000000010000010110000000100000001000001011000100010001000100100101100010001000100010010010110001000100010001001001011000100010001000100100101100010001000100010010010110001000100010001001001011000100000001000000100001100010000000100000010000110s01000000010000001000e111111111111111111111111116 \ No newline at end of file +1ddddddddddd11dddddddddd11dddddddddd00000dd3aaaaai1dd111100000000000030000i1dd000000000001110003000i1d000001111100K000003000i1d00000S00k0000000003aBB110s000100000ddd011103atl11111331ddddddddddddddd1111ddd001dddddddd11d0S0ddd11ddd00d1dd11d000300000dd11ddd000000000000300000dd11dddaaa00000000d3S00e0dd11dddddd00S0d111d3d000ddd11ddddddddddddddddddddddd16 \ No newline at end of file diff --git a/editor/levels/12.lvl b/editor/levels/12.lvl new file mode 100644 index 0000000..082da17 --- /dev/null +++ b/editor/levels/12.lvl @@ -0,0 +1 @@ +111111111111111111111111100000000000010000000i000010000000000010000000i000110000000000010000000i000110000000000000000000i000110000000000000000000i000110000000000000000000i000110000S000S000S000S00i000110000000000000000000i000110000000000000000000i00011011100S000S000S00000000110000000000000000000000011s000000000000000000000e111111111111111111111111116 \ No newline at end of file diff --git a/editor/levels/2.lvl b/editor/levels/2.lvl index d1d3cf3..1352339 100644 --- a/editor/levels/2.lvl +++ b/editor/levels/2.lvl @@ -1,4 +1,4 @@ 10001011111011111111111111000101dd10001111dddd11110000101dd10001000000000001111101dd1aaa1000ccccddd110s00010013331000000000011dddd110010001mmmdd00000100000000010e010t0dd00000011111100011111d1dddddd1111k00000001d000111001111111111111101d00000000000111000010000100000000000000010K010000100011100000011110001000010001110000dd11110001011111011111111111117 5 -7 \ No newline at end of file +9 \ No newline at end of file diff --git a/editor/levels/9.lvl b/editor/levels/9.lvl index dabd977..baf3c31 100644 --- a/editor/levels/9.lvl +++ b/editor/levels/9.lvl @@ -1 +1 @@ -00000ddddddd100000000000011111111111111111110011111000000dd1111ddd0K10000b1100111000000100000100000110000100000010000010010011000k111dd101dd00d10000011000110000001000001BBBB011000100011dd1000001dddd01100010ddd1dd1d00dd1011001133310ddd1dd1BBBBB1t00001100000ddd1dd1000001ddd1111s0000ddd1dd10000011111111BBB111aaaaa110001111111100000000000e10000000000006 \ No newline at end of file +00000ddddddd100000000000011111111111111111110011111000000dd1111ddd0K10000b1100111000000100000100000110000100000010000010010011000k111dd101dd00d10000011000110000001000001BBBB011000100011dd1000001dddd01100010ddd1dd1d00dd1011001133310ddd1dd1000001t00001100000ddd1dd1BBBBB1ddd1111s0000ddd1dd10000011111111BBB111aaaaa110001111111100000000000e10000000000006 \ No newline at end of file diff --git a/include/collide.h b/include/collide.h index e4ce6a5..6286a58 100644 --- a/include/collide.h +++ b/include/collide.h @@ -1,5 +1,5 @@ -char collide(int x, int y, char level[], char gravity, char block); -char collide_solid(int x, int y, char level[], char gravity); +char collide(int x, int y, char level[], char block); +char collide_solid(int x, int y, char level[]); char collide_dead(int x, int y, char level[]); char collide_point(int x, int y, char level[], char block); -char collide_end(int x, int y, char level[], char gravity); +char collide_end(int x, int y, char level[]); diff --git a/src/collide.c b/src/collide.c index 9ff31a6..3e5f316 100644 --- a/src/collide.c +++ b/src/collide.c @@ -3,7 +3,7 @@ #define DEAD_COLLISION 3 //make the collision with the deadly block less effective -char collide(int x, int y, char level[], char gravity, char block) //detect if player is in a block +char collide(int x, int y, char level[], char block) //detect if player is in a block { if((level[(int)(x/16) + (int)((y + PLAYER_HEIGHT)/16) * 25] == block || level[(int)((x + PLAYER_HEIGHT)/16) + (int)((y + PLAYER_HEIGHT)/16) * 25] == block || @@ -12,14 +12,15 @@ char collide(int x, int y, char level[], char gravity, char block) //detect if p return 0; } -char collide_solid(int x, int y, char level[], char gravity) +char collide_solid(int x, int y, char level[]) { - return collide(x, y, level, gravity, '1') - || collide(x, y, level, gravity, '3') - || collide(x, y, level, gravity, '4') - || collide(x, y, level, gravity, 'c') - || collide(x, y, level, gravity, 'C') - || collide(x, y, level, gravity, 'B'); + return collide(x, y, level, '1') + || collide(x, y, level, '3') + || collide(x, y, level, '4') + || collide(x, y, level, 'c') + || collide(x, y, level, 'C') + || collide(x, y, level, 'B') + || collide(x, y, level, 'i'); } char collide_dead(int x, int y, char level[]) @@ -35,7 +36,7 @@ char collide_point(int x, int y, char level[], char block) return (level[(int)(x/16) + (int)(y/16) * 25] == block); } -char collide_end(int x, int y, char level[], char gravity) +char collide_end(int x, int y, char level[]) { - return collide(x, y, level, gravity, 'e'); + return collide(x, y, level, 'e'); } diff --git a/src/drawlevel.c b/src/drawlevel.c index f33f678..2821d22 100644 --- a/src/drawlevel.c +++ b/src/drawlevel.c @@ -20,6 +20,8 @@ extern bopti_image_t img_key2block; //block link to the key 2 extern bopti_image_t img_key2blockvoid; //block link to the key 2 extern bopti_image_t img_damaged; //damaged block extern bopti_image_t img_chock; //chock block +extern bopti_image_t img_switch; //switch block +extern bopti_image_t img_ice; //switch block void draw_player(int x, int y) { @@ -77,6 +79,12 @@ void draw_level(char level[]) case 'l': //chock blocks dimage(x,y,&img_chock); break; + case 'i': //chock blocks + dimage(x,y,&img_ice); + break; + case 'S': //chock blocks + dimage(x,y,&img_switch); + break; } x+=16; if(x==16*25) diff --git a/src/main.c b/src/main.c index cdf4670..bbca2cd 100644 --- a/src/main.c +++ b/src/main.c @@ -11,9 +11,11 @@ #include "times.h" #include "define.h" -#define ACCELERATION 0.2 +#define VACCELERATION 0.2 +#define HACCELERATION 0.01 #define MAX_VSPD 9.0 -#define FRICTION 0.1 +//#define MAX_HSPD 3.0 +#define FRICTION 0.06 int main(void); @@ -47,7 +49,7 @@ void game(int *id_level, char mode) int disappear = 13; float vspd = 1.0; - int vert_spd = 1; + //float hspd = 2.0; extern bopti_image_t img_speedrun; set_level(*id_level, level, &start_x, &start_y, &gravity, &appear, &disappear); @@ -77,13 +79,15 @@ void game(int *id_level, char mode) dprint(162,173,C_RGB(110,110,110),"sur certains blocs"); dprint(315,115,C_RGB(110,110,110),"Bravo !"); } - dprint(150,100,C_GREEN,"%d",player_x); - dprint(150,120,C_GREEN,"%d",player_y); + //dprint(150,100,C_GREEN,"%d",player_x); + //dprint(150,120,C_GREEN,"%d",player_y); + //dprint(150,120,C_GREEN,"%.2j",(int)(hspd*100)); + dprint(150,120,C_GREEN,"%.2j",(int)(vspd*100)); 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)); - dprint(320,180,C_GREEN,"%d",collide_solid(player_x, player_y-1, level, gravity));*/ + /*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)); + dprint(320,180,C_GREEN,"%d",collide_solid(player_x, player_y-1, level));*/ /*dprint(300,100,C_GREEN,"%d",collide_dead(player_x, player_y, level)); dprint(300,120,C_GREEN,"%c",level[(int)((player_x-1)/16)+(int)((player_y-1)/16*25)]); //top left @@ -97,21 +101,55 @@ void game(int *id_level, char mode) //Right collision if(keydown(KEY_RIGHT)) { - if(!collide_solid(player_x+PLAYER_SPEED, player_y, level, gravity)) player_x+=PLAYER_SPEED; - else if(!collide_solid(player_x+1, player_y, level, gravity)) player_x+=1; + /*if(!collide_solid(player_x+(int)hspd+1, player_y, level)) + { + if (hspd=388) player_x=-4; } //Left collision else if(keydown(KEY_LEFT)) { - if(!collide_solid(player_x-PLAYER_SPEED, player_y, level, gravity)) player_x-=PLAYER_SPEED; - else if(!collide_solid(player_x-1, player_y, level, gravity)) player_x-=1; + /*if(!collide_solid(player_x-(int)hspd-1, player_y, level)) + { + if (hspd=5.0) //Damaged block + 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'; vspd=1.0; } - if(collide(player_x, player_y-vert_spd-2, level, gravity, 'B') && vspd>=5.0) //Damaged block + if(collide(player_x, player_y-(int)vspd-2, level, 'B') && vspd>=5) //Damaged block { - if(level[((player_x)/16)+((player_y-vert_spd-2)/16)*25]=='B') level[((player_x)/16)+((player_y-vert_spd-2)/16)*25]='0'; - if(level[((player_x+17)/16)+((player_y-vert_spd-2)/16)*25]=='B' && collide_point(player_x+15, player_y-12, level, 'B')) level[((player_x+17)/16)+((player_y-vert_spd-2)/16)*25]='0'; + 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'; vspd=1.0; } + if(level[((player_x+6)/16)+((player_y+6)/16)*25] == 'S') //Switch block + { + level[((player_x+6)/16)+((player_y+6)/16)*25] = '0'; + vspd=1.0; + if(!gravity) gravity=1; + else gravity=0; + } + if((framelevel/FPS)>disappear) for (int i = 0; level[i]!='\0' ; i++) if(level[i]=='c') level[i]='0'; //after x seconds blocks disappear if((framelevel/FPS)>appear) for (int i = 0; level[i]!='\0' ; i++) if(level[i]=='m') level[i]='C'; //after x seconds blocks appear diff --git a/src/setlevel.c b/src/setlevel.c index a9444d5..05388fb 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,"11100111111111111111111111l00000l01BB1BB1BB1BB1BB1100000000100100100100100110000000010000010010010011b0t000001000000001001001111111000100000000000100111111d000100000000000000100000d000100000000000000010000d000000000000000011110000d000030000a0c0m0000110000d000030000a0c0m0000110000d000030000a0c0m0000110s00d00k0300K0a0c0m00e011110011111111111111111111",350); +memcpy(level,"11100111111111111111111111l00000l01BB1BB1BB1BB1BB11000000001001001001001001100000000i0000010010010011b0t00000i000000001001001111111000i00000000000100111111d000i000S00S0000000100000d000i00000000000000010000d000000000000000011110000d000030000a0c0m0000110000d000030000a0c0m0000110000d000030000a0c0m0000110s00d00k0300K0a0c0m00e011110011111111111111111111",350); *appear=7; *disappear=9; break; @@ -12,7 +12,7 @@ break; case 2: memcpy(level,"10001011111011111111111111000101dd10001111dddd11110000101dd10001000000000001111101dd1aaa1000ccccddd110s00010013331000000000011dddd110010001mmmdd00000100000000010e010t0dd00000011111100011111d1dddddd1111k00000001d000111001111111111111101d00000000000111000010000100000000000000010K010000100011100000011110001000010001110000dd1111000101111101111111111111",350); *appear=5; -*disappear=7; +*disappear=9; break; case 3: memcpy(level,"11001111111001111111111111000111dddd000000000100013000111dddd00000000010003300000000dd11111000010e03100000000dd03a01000011111111110000dd03a01000000001100s1dd00ddt3a0100000000110001dd00dd1110100000000110001dd0Kdd00001ddd000ddd10001dd00dd00001111100ddd10001dd00dd00001000000ddd30001dd0000000010k000000330001dd0000000010000000031d001111111001111111111117",350); @@ -39,13 +39,16 @@ case 8: memcpy(level,"dddddddddddddddddddddddddBBBBBBBBBBBBBBBBBBBBBBBBB100001kk10011111dt0a000011000010010010000d11a00001100001BB100100000000000013000000000010001110000000300000000001aaaaaa00000001111110000010000000011111100000000001000000001000110000000a001BBBd00a0100013000000000010001000010003300s000000010K0100001e003aaBBBBBBBBBBBBBBBBBBBaaaaddddddddddddddddddddddddd",350); break; case 9: -memcpy(level,"00000ddddddd100000000000011111111111111111110011111000000dd1111ddd0K10000b1100111000000100000100000110000100000010000010010011000k111dd101dd00d10000011000110000001000001BBBB011000100011dd1000001dddd01100010ddd1dd1d00dd1011001133310ddd1dd1BBBBB1t00001100000ddd1dd1000001ddd1111s0000ddd1dd10000011111111BBB111aaaaa110001111111100000000000e1000000000000",350); +memcpy(level,"00000ddddddd100000000000011111111111111111110011111000000dd1111ddd0K10000b1100111000000100000100000110000100000010000010010011000k111dd101dd00d10000011000110000001000001BBBB011000100011dd1000001dddd01100010ddd1dd1d00dd1011001133310ddd1dd1000001t00001100000ddd1dd1BBBBB1ddd1111s0000ddd1dd10000011111111BBB111aaaaa110001111111100000000000e1000000000000",350); break; case 10: memcpy(level,"111111111133111111100011111111111133311111110K01111100000100111111111000111110s000101111111000000011111110K10111111d000000011111110K1011111a001BBBBB111100000101111d0a010000011110000010111a03011d0ddd1111001ddd011d0a0d11000001111000000010a30111100e00111100000k0130ad1111aaaaa1111dd000001031111111ddd1111111111111001111111aaa1111111111111001111111000111",350); break; case 11: -memcpy(level,"11111111111111111111111111000000010000000100000101100000001000000010000010110000000100000001000001011000100010001000100100101100010001000100010010010110001000100010001001001011000100010001000100100101100010001000100010010010110001000100010001001001011000100000001000000100001100010000000100000010000110s01000000010000001000e11111111111111111111111111",350); +memcpy(level,"1ddddddddddd11dddddddddd11dddddddddd00000dd3aaaaai1dd111100000000000030000i1dd000000000001110003000i1d000001111100K000003000i1d00000S00k0000000003aBB110s000100000ddd011103atl11111331ddddddddddddddd1111ddd001dddddddd11d0S0ddd11ddd00d1dd11d000300000dd11ddd000000000000300000dd11dddaaa00000000d3S00e0dd11dddddd00S0d111d3d000ddd11ddddddddddddddddddddddd1",350); +break; +case 12: +memcpy(level,"111111111111111111111111100000000000010000000i000010000000000010000000i000110000000000010000000i000110000000000000000000i000110000000000000000000i000110000000000000000000i000110000S000S000S000S00i000110000000000000000000i000110000000000000000000i00011011100S000S000S00000000110000000000000000000000011s000000000000000000000e11111111111111111111111111",350); break; } set_gravity(id_level, gravity); @@ -98,6 +101,9 @@ break; case 11: *default_gravity = 0; break; +case 12: +*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 3de86d8..6182615 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.29,5.89,8.68,3.84,3.58,6.81,7.48,10.46,9.25}; +float level_time[] = {5.81,8.38,5.89,8.68,3.84,3.58,6.81,7.48,10.46,9.25,7.72}; 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.29,5.89,8.68,3.84,3.58,6.81,7.48,10.46,9.25}; +float level_time[] = {5.81,8.38,5.89,8.68,3.84,3.58,6.81,7.48,10.46,9.25,7.72}; time = level_time[id_level-1]; dimage(160,90,&img_createur); diff --git a/times.lvl b/times.lvl index 8a52ff0..23eb6c4 100644 --- a/times.lvl +++ b/times.lvl @@ -1,5 +1,5 @@ 5.81 -8.29 +8.38 5.89 8.68 3.84 @@ -8,3 +8,4 @@ 7.48 10.46 9.25 +7.72 \ No newline at end of file