diff --git a/CMakeLists.txt b/CMakeLists.txt index 1df4775..7ab1cda 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -41,7 +41,8 @@ add_custom_command(OUTPUT editor/levels/13.lvl editor/levels/14.lvl editor/levels/15.lvl - editor/levels/16.lvl) + editor/levels/16.lvl + editor/levels/17.lvl) set(SOURCES src/collide.c @@ -74,7 +75,9 @@ set(ASSETS_cg assets-cg/img/player.png assets-cg/img/solid.png assets-cg/img/speedrun.png - assets-cg/img/switch.png) + assets-cg/img/switch.png + assets-cg/img/nbswitch.png + assets-cg/img/nbswitchlayout.png) set(FLAGS -Wall -Wextra -Os) diff --git a/assets-cg/img/fxconv-metadata.txt b/assets-cg/img/fxconv-metadata.txt index 9dbfa89..7a8dd93 100755 --- a/assets-cg/img/fxconv-metadata.txt +++ b/assets-cg/img/fxconv-metadata.txt @@ -65,3 +65,10 @@ speedrun.png: switch.png: type:bopti-image name: img_switch +nbswitch.png: + type:bopti-image + name: img_nbswitch +nbswitchlayout.png: + type:bopti-image + profile:p4 + name: img_nbswitchlayout \ No newline at end of file diff --git a/assets-cg/img/nbswitch.png b/assets-cg/img/nbswitch.png new file mode 100755 index 0000000..62f1237 Binary files /dev/null and b/assets-cg/img/nbswitch.png differ diff --git a/assets-cg/img/nbswitchlayout.png b/assets-cg/img/nbswitchlayout.png new file mode 100755 index 0000000..d195aec Binary files /dev/null and b/assets-cg/img/nbswitchlayout.png differ diff --git a/compile_levels.py b/compile_levels.py index b38276c..4edf88c 100755 --- a/compile_levels.py +++ b/compile_levels.py @@ -2,16 +2,13 @@ ids = 0 save = open("src/setlevel.c","w+") save.write("#include \"setlevel.h\"\n#include \nvoid set_level(int id_level, char level[], int *startx, \ -int *starty, char *gravity, int *appear, int *disappear){\nswitch(id_level){") +int *starty, char *gravity, int *appear, int *disappear, int *nbswitch){\nswitch(id_level){") while 1: try: lv = open(f"editor/levels/{ids}.lvl","r") ide = lv.readlines() - if len(ide)==1: save.write(f"case {ids}:\nmemcpy(level,\"{str(ide[0][:-1])}\",350);\nbreak;\n") - elif ide[1]!='\n': - save.write(f"case {ids}:\nmemcpy(level,\"{str(ide[0][:-2])}\",350);\n*appear={ide[1][:-1]};\n*disappear={ide[2]};\nbreak;\n") - else: - save.write(f"case {ids}:\nmemcpy(level,\"{str(ide[0][:-2])}\",350);\n*appear={ide[2][:-1]};\n*disappear={ide[3]};\nbreak;\n") + if ide[1]!='\n': + save.write(f"case {ids}:\nmemcpy(level,\"{str(ide[0][:-2])}\",350);\n*appear={ide[1][:-1]};\n*disappear={ide[2]};\n*nbswitch={ide[3]};\nbreak;\n") ids+=1 except FileNotFoundError: lv.close() diff --git a/editor/AST3generator.py b/editor/AST3generator.py index 8f9120e..09ee11e 100755 --- a/editor/AST3generator.py +++ b/editor/AST3generator.py @@ -24,21 +24,17 @@ def newgrille(): ["1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1"] def load(ids): - global grille, gravityid, app, disa + global grille, gravityid, app, disa, nbswitch try: lv = open(f"editor/levels/{ids}.lvl","r") ide = lv.readlines() - gravityid=str(ide[0][350:]) - if len(ide)==1: - ide = str(ide[0][:-1]) - else: - if ide[1]!="\n": - app = int(ide[1][:-1]) - disa = int(ide[2]) - else: - app = int(ide[2][:-1]) - disa = int(ide[3]) - ide = str(ide[0][:-2]) + gravityid=(int)(ide[0][350:]) + + app = int(ide[1][:-1]) + disa = int(ide[2]) + nbswitch = int(ide[3]) + + ide = str(ide[0][:-2]) grille=[] for j in range(14): grille.append([]) @@ -46,15 +42,16 @@ def load(ids): grille[-1].append(str(ide[i+25*j])) except FileNotFoundError: newgrille() - gravityid="6" + gravityid=6 place() def place(): level = font.render(str(id_level),1,(0,0,0)) - if int(gravityid)==6: levelgr = font.render("↓",1,(120,0,0)) - if int(gravityid)==7: levelgr = font.render("↑",1,(0,120,120)) + if gravityid==6: levelgr = font.render("↓",1,(120,0,0)) + if gravityid==7: levelgr = font.render("↑",1,(0,120,120)) timeapp = font.render("A="+str(app),1,(255,230,0)) timedisa = font.render("D="+str(disa)+" LOCK : "+str(lock),1,(255,180,0)) + nbswitchfont = font.render("Nb="+str(nbswitch),1,(255,230,0)) for a in range(14): for b in range(25): pygame.draw.rect(fenetre,(255,255,255),((52*b, 52*a), (52, 52))) @@ -64,9 +61,9 @@ def place(): pygame.draw.rect(fenetre,(255,255,255),((52*b, 52*a), (52, 52))) if grille[a][b]=="1": fenetre.blit(pygame.transform.scale(solid_0,(52,52)),(52*b,52*a)) - if grille[a][b]=="s" and int(gravityid)==6: + if grille[a][b]=="s" and gravityid==6: fenetre.blit(pygame.transform.scale(player.subsurface((0,0),(12,12)),(39,39)),(52*b,52*a+13)) - elif grille[a][b]=="s" and int(gravityid)==7: + elif grille[a][b]=="s" and gravityid==7: fenetre.blit(pygame.transform.scale(player.subsurface((0,0),(12,12)),(39,39)),(52*b,52*a)) if grille[a][b]=="e": fenetre.blit(pygame.transform.scale(end,(52,52)),(52*b,52*a)) @@ -104,20 +101,19 @@ def place(): fenetre.blit(pygame.transform.scale(appear,(52,52)),(52*b,52*a)) elif grille[a][b]=="h" and tab: fenetre.blit(pygame.transform.scale(appearblock,(52,52)),(52*b,52*a)) + if grille[a][b]=="z": + fenetre.blit(pygame.transform.scale(nbswitchblock,(52,52)),(52*b,52*a)) fenetre.blit(level, (10, 10)) fenetre.blit(levelgr, (10, 60)) fenetre.blit(timeapp, (55, 10)) fenetre.blit(timedisa, (140, 10)) + fenetre.blit(nbswitchfont, (370, 10)) if id_level==0 : fenetre.blit(font.render("NIVEAU DE TEST",1,(0,180,255)), (600,10)) pygame.display.flip() def write(): f = open(f"editor/levels/{id_level}.lvl","w+") - if not "c" in str(grille): - if not "m" in str(grille): - f.write(str(grille).replace("]","").replace("(","").replace(")","").replace("'","").replace("[","").replace(" ","").replace(",","")+f"{gravityid}") - else: f.write(str(grille).replace("]","").replace("(","").replace(")","").replace("'","").replace("[","").replace(" ","").replace(",","")+f"{gravityid}\n{app}\n{disa}") - else: f.write(str(grille).replace("]","").replace("(","").replace(")","").replace("'","").replace("[","").replace(" ","").replace(",","")+f"{gravityid}\n{app}\n{disa}") + f.write(str(grille).replace("]","").replace("(","").replace(")","").replace("'","").replace("[","").replace(" ","").replace(",","")+f"{gravityid}\n{app}\n{disa}\n{nbswitch}") f.close() pygame.init() @@ -127,13 +123,14 @@ 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","i","S","h"] +suite=["0","1","d","s","e","k","3","K","a","c","m","t","l","b","B","i","S","h","z"] lvm = open(f"include/define.h","r") id_level = 0 gravityid = 6 disa = 10 app = 13 +nbswitch = -1 lock="" tab = 0 @@ -157,6 +154,7 @@ switch = pygame.image.load("editor/img/switch.png").convert_alpha() ice = pygame.image.load("editor/img/ice.png").convert_alpha() appear = pygame.image.load("editor/img/appear.png").convert_alpha() appearblock = pygame.image.load("editor/img/appearblock.png").convert_alpha() +nbswitchblock = pygame.image.load("editor/img/nbswitch.png").convert_alpha() load(id_level) place() @@ -192,6 +190,14 @@ while securite==False: disa-=1 write() place() + if carac == "t": + nbswitch+=1 + write() + place() + if carac == "g": + if nbswitch >= 0: nbswitch-=1 + write() + place() if carac == "a": lock="" place() @@ -200,10 +206,10 @@ while securite==False: write() place() if event.key == pygame.K_LSHIFT: - if gravityid=="7": - gravityid="6" + if gravityid==7: + gravityid=6 else: - gravityid="7" + gravityid=7 write() place() if event.key == pygame.K_TAB: diff --git a/editor/img/nbswitch.png b/editor/img/nbswitch.png new file mode 100755 index 0000000..62f1237 Binary files /dev/null and b/editor/img/nbswitch.png differ diff --git a/editor/levels/0.lvl b/editor/levels/0.lvl index 2f1d850..e739900 100755 --- a/editor/levels/0.lvl +++ b/editor/levels/0.lvl @@ -1,4 +1,4 @@ 11111111111111111111000111000000000000000000000001100000000000000000000000110e00000b0000l000S000000111111aaaaaaa11111111111111ddd1ddddddd1mmm1000000011ddd111111111mmm1000000011ddd111111111ccc101BB00011ddd1ddddddd1ccc10i00000111111aaaaaaa111110i000001100000000000030010i0000011000000000000300h0i1BBB111s000K00000k0300h0i0000011111111ddd1111111111000116 - 13 -13 \ No newline at end of file +10 +-1 \ No newline at end of file diff --git a/editor/levels/1.lvl b/editor/levels/1.lvl index e867e10..bceeb37 100755 --- a/editor/levels/1.lvl +++ b/editor/levels/1.lvl @@ -1 +1,4 @@ -10011111111dddd1111111111000111100000000000000000000011110011111111ddd100001111111001dd000ddddd111111111111001dd0t0ddddddddd11000001001dd000ddddddddd11000001001aaaaaaaaaaaaaa110s00010010000000000000e11d1100100100000000000aaa11111001001000000000ddddd1111100100100000000011111100010000010000000003000000001000001000K0000030k00010011111111111111111111116 \ No newline at end of file +10011111111dddd1111111111000111100000000000000000000011110011111111ddd100001111111001dd000ddddd111111111111001dd0t0ddddddddd11000001001dd000ddddddddd11000001001aaaaaaaaaaaaaa110s00010010000000000000e11d1100100100000000000aaa11111001001000000000ddddd1111100100100000000011111100010000010000000003000000001000001000K0000030k00010011111111111111111111116 +13 +10 +-1 \ No newline at end of file diff --git a/editor/levels/10.lvl b/editor/levels/10.lvl index a91fbf6..b5bd444 100755 --- a/editor/levels/10.lvl +++ b/editor/levels/10.lvl @@ -1 +1,4 @@ -11111111t133111111100011111111111133311111110K01111100000100111111111000111110s00010i11111100000001111d110K10i11111d000000011111110K10i1111a001BBBBB11110000010i111d0a010000011110000010i11a03011d0ddd1111001ddd0i1d0a0d110000011110000000i0a30111100e00111100000k0130ad11110aa001111dd000001031111111ddd11111111111B1001111111aaa11111111111010011111110001116 \ No newline at end of file +11111111t133111111100011111111111133311111110K01111100000100111111111000111110s00010i11111100000001111d110K10i11111d000000011111110K10i1111a001BBBBB11110000010i111d0a010000011110000010i11a03011d0ddd1111001ddd0i1d0a0d110000011110000000i0a30111100e00111100000k0130ad11110aa001111dd000001031111111ddd11111111111B1001111111aaa11111111111010011111110001116 +13 +10 +-1 \ No newline at end of file diff --git a/editor/levels/11.lvl b/editor/levels/11.lvl index 330c35a..b9ebdbe 100755 --- a/editor/levels/11.lvl +++ b/editor/levels/11.lvl @@ -1 +1,4 @@ -1ddddddddddd11dddddddddd11dddddddddd00000dd3aaa11i1dd111100000000000030000i1dd000000000001110003000i1d000001111100K000003000i1d00000S00k0000000003aBB110s000100000ddd011103atl11111331ddddddddddddddd1111ddd001dddddddd11d0S0ddd11ddd00d1dd11d000300000dd11ddd000000000000300000dd11dddaaa00000000d3S00e0dd11dddddd00S0d111d3d000ddd11ddddddddddddddddddddddd16 \ No newline at end of file +1ddddddddddd11dddddddddd11dddddddddd00000dd3aaa11i1dd111100000000000030000i1dd000000000001110003000i1d000001111100K000003000i1d00000S00k0000000003aBB110s000100000ddd011103atl11111331ddddddddddddddd1111ddd001dddddddd11d0S0ddd11ddd00d1dd11d000300000dd11ddd000000000000300000dd11dddaaa00000000d3S00e0dd11dddddd00S0d111d3d000ddd11ddddddddddddddddddddddd16 +13 +10 +-1 \ No newline at end of file diff --git a/editor/levels/12.lvl b/editor/levels/12.lvl index 78b67ad..275fdc9 100755 --- a/editor/levels/12.lvl +++ b/editor/levels/12.lvl @@ -1 +1,4 @@ -1111111111010001dd11111110000001000013331001000000000000100t01000h0010000001111iB111111000h0013311111e00ik11d111000300300000d10ddi011d0010003003000s0d10aai01000010001hh1hh11111000i01h1h1100010010000011dd0i000000h00010010001a11aa01dd0dd110001001000h0110001dd1d1110S0100100010110000S0S0001ddd100h0001Kd100000S0S001111100h00011111111dddd10h00011111111116 \ No newline at end of file +1111111111010001dd11111110000001000013331001000000000000100t01000h0010000001111iB111111000h0013311111e00ik11d111000300300000d10ddi011d0010003003000s0d10aai01000010001hh1hh11111000i01h1h1100010010000011dd0i000000h00010010001a11aa01dd0dd110001001000h0110001dd1d1110S0100100010110000S0S0001ddd100h0001Kd100000S0S001111100h00011111111dddd10h00011111111116 +13 +10 +-1 \ No newline at end of file diff --git a/editor/levels/13.lvl b/editor/levels/13.lvl index c70bfac..3b4ff32 100755 --- a/editor/levels/13.lvl +++ b/editor/levels/13.lvl @@ -1 +1,4 @@ -11111111111111111111111111ddddddddd0S00ddddddddddd1ddddaaaaa000000ddddddddd1ddd00S000000e0ddd0dddddd1dd000000ddddddd00000dddd1daaaa00dd11100S00S000ddd10000000d00000000000S00dd10K000h0d00001100000000dd1111000ddd000000S0d0h00dd1ddd000dd000dd000ddd000dd1dddhhdd000ddddddddd000dd1ddb00S0000100000dd0000dd1dtb00000011s000000000ddd111111d11111111111111dddd6 \ No newline at end of file +11111111111111111111111111ddddddddd0S00ddddddddddd1ddddaaaaa000000ddddddddd1ddd00S000000e0ddd0dddddd1dd000000ddddddd00000dddd1daaaa00dd11100S00S000ddd10000000d00000000000S00dd10K000h0d00001100000000dd1111000ddd000000S0d0h00dd1ddd000dd000dd000ddd000dd1dddhhdd000ddddddddd000dd1ddb00S0000100000dd0000dd1dtb00000011s000000000ddd111111d11111111111111dddd6 +13 +10 +-1 \ No newline at end of file diff --git a/editor/levels/14.lvl b/editor/levels/14.lvl index 3c79ff9..74a3c39 100755 --- a/editor/levels/14.lvl +++ b/editor/levels/14.lvl @@ -1 +1,4 @@ -1111111111111ddd11iK1d00100000d111000000011it1d00000000d100000000011i31110011100d13331110e011ihhh11100000d100011111111i00000000000d100000011111i00111011100d1000000000011000s111111111000000000011dd0001hk001111i00Sddd001dddd00hh0000001i000111000aad1ddhddd0000000001110000001111111dd0000000111000000001111111dd000011110000000001111111111111111ddd13100017 \ No newline at end of file +1111111111111ddd11iK1d00100000d111000000011it1d00000000d100000000011i31110011100d13331110e011ihhh11100000d100011111111i00000000000d100000011111i00111011100d1000000000011000s111111111000000000011dd0001hk001111i00Sddd001dddd00hh0000001i000111000aad1ddhddd0000000001110000001111111dd0000000111000000001111111dd000011110000000001111111111111111ddd13100017 +13 +10 +-1 \ No newline at end of file diff --git a/editor/levels/15.lvl b/editor/levels/15.lvl index 2113bcf..e2e480f 100755 --- a/editor/levels/15.lvl +++ b/editor/levels/15.lvl @@ -1,4 +1,4 @@ i011100dd1111dddm111ddmd1i01d1000000010S0011100S01i01d100000001000000000001i01d1cc111001hh1c11111001i01ddddddi00i000bddd00001i01dd1133i00i000lddd000K1100000000i00i00001d110011300000000i00100331d100003300000010i001s03t1d1000031111100hki0011111ddd1BB1110S01hh11100m0000aaa0000110001001d100m000000000001100e1001d100m0aaa000aaa0110d11001111111ddddddddd116 - -4 -7 \ No newline at end of file +13 +10 +-1 \ No newline at end of file diff --git a/editor/levels/16.lvl b/editor/levels/16.lvl index a89baad..6a13da1 100755 --- a/editor/levels/16.lvl +++ b/editor/levels/16.lvl @@ -1,4 +1,4 @@ 11111dddd100d110111111331000000000000d1d0000dd10s0111d00000000K1d10000d11111ddddd11ddhh1dddd000dddd11100Sh00dd00000dd00000001i0000000dd000000d0000S001i01100d0dd00d000dd0000001i0d00Sd0dd00dd10ddhh00l01i0ddddd0dd00ddi0d00000001iBBBdd0011aaddi0d0S00d0011000dd000300ddi0d0000d00110mmdd000d00ddi0dd00dd0011emtdddddd00ddi0ddddddkk1111111111100111Bdddd110016 - -14 -7 \ No newline at end of file +13 +10 +-1 \ No newline at end of file diff --git a/editor/levels/17.lvl b/editor/levels/17.lvl new file mode 100644 index 0000000..89884d0 --- /dev/null +++ b/editor/levels/17.lvl @@ -0,0 +1,4 @@ +101111110111111111100111110dS00d00000001111100111110aaa0d00000K010000001111100h00d0S0000010ddaaa1111100000ddd1111110ddddd1111111a00000S1e3s00100S0111100z0000000111dda100k0100000z000000000ddddd00001000111ddaaaaa000000000101001100Saddddd0000000001010011000000aa11111111111110011000a000003000000010000011000a0a0003010000t100000110111111011111111110011117 +13 +10 +18 \ No newline at end of file diff --git a/editor/levels/2.lvl b/editor/levels/2.lvl index 2b8d0b2..2690b13 100755 --- a/editor/levels/2.lvl +++ b/editor/levels/2.lvl @@ -1,3 +1,4 @@ 1dddddd100111111111111111000000000011111000000000000000000l01100c00000000001aaaaaaa111100c00000000011dddddddddd1001aaaaaaaaa11cccccccccc1001ddddddddd1000000000001331000000aa000000000000s10e1k0000000001ccccccccc111111111113311100000000011001000000000110000000001100b0000000001100000000011t0b00000000011000K0000011111aaaaaaaaa1111111110011111ddddddddd16 -12 -1 +13 +10 +-1 \ No newline at end of file diff --git a/editor/levels/3.lvl b/editor/levels/3.lvl index 1a01c05..adf6609 100755 --- a/editor/levels/3.lvl +++ b/editor/levels/3.lvl @@ -1 +1,4 @@ -11001111111001111111111111000111dddd000000000100013000111dddd00000000010003300000000dd11111000010e03100000000dd03a01000011111111110000dd03a01000000001100s1dd00ddt3a0100000000110001dd00dd1110100000000110001dd0Kdd00001ddd000ddd10001dd00dd00001111100ddd10001dd00dd00001000000ddd30001dd0000000010k000000330001dd0000000010000000031d001111111001111111111117 \ No newline at end of file +11001111111001111111111111000111dddd000000000100013000111dddd00000000010003300000000dd11111000010e03100000000dd03a01000011111111110000dd03a01000000001100s1dd00ddt3a0100000000110001dd00dd1110100000000110001dd0Kdd00001ddd000ddd10001dd00dd00001111100ddd10001dd00dd00001000000ddd30001dd0000000010k000000330001dd0000000010000000031d001111111001111111111117 +13 +10 +-1 \ No newline at end of file diff --git a/editor/levels/4.lvl b/editor/levels/4.lvl index 475527f..a98c35c 100755 --- a/editor/levels/4.lvl +++ b/editor/levels/4.lvl @@ -1,3 +1,4 @@ 11111111111011111dddd1111100001dd0000dd100000000011s0001dd0d11dd10000000001111001dd0d111dd00111100011dd001dt0d10000001dd100011dd001d11d10000001dd100011dd00dd11110011111dd100011dd00000000001dddddd100011dd1111dbd1111ddd111100011ddddddd0dd1d1ddd100000011ddddddd0000d1ddd1e0000011ddddddd1110d1ddd111cccc11dddddddddd0d1ddd111dddd111111111111011111111111116 -12 -13 \ No newline at end of file +13 +10 +-1 \ No newline at end of file diff --git a/editor/levels/5.lvl b/editor/levels/5.lvl index a248016..d376b0c 100755 --- a/editor/levels/5.lvl +++ b/editor/levels/5.lvl @@ -1,4 +1,4 @@ 000000000000000000000000000000000000000000000000t000000000000000000000000000011dd111111111111111110000100000100000010000001000011cc001s0000d00000001000010000e111dd0100000dd100001001111000d0000000dd100001000001000111d000ddd1000010000000000000000ddd1000011111111111d111B11111000000000000000000000000000000000000000000000000000000000000000000000000000006 - -12 -6 \ No newline at end of file +13 +10 +-1 \ No newline at end of file diff --git a/editor/levels/6.lvl b/editor/levels/6.lvl index 8d2fab9..7fcc797 100755 --- a/editor/levels/6.lvl +++ b/editor/levels/6.lvl @@ -1,3 +1,4 @@ 10001011111011111111111111000101dd10001111dddd11110000101dd10001000000000001111101dd1aaa1000ccccddd110s00010013331000000000011dddd110010001mmmdd00000100000000010e010t0dd00000011111100011111d1dddddd1111k00000001d000111001111111111111101d00000000000111000010000100000000000000010K010000100011100000011110001000010001110000dd11110001011111011111111111117 -5 -9 \ No newline at end of file +13 +10 +-1 \ No newline at end of file diff --git a/editor/levels/7.lvl b/editor/levels/7.lvl index 70b5714..a45bc7b 100755 --- a/editor/levels/7.lvl +++ b/editor/levels/7.lvl @@ -1 +1,4 @@ -111001111111100i0d0011111100000111ddd000i0d0000001100000000000000itd00000e1111111ddd111111111111111100000000000000000h00d0000111111111dd111110100d000110001100000000010100d0001000011000000000i0d00d0000000000000000000i0d00d00001111dd111000000ild00111111000011111ddd00i0d0011111d000011111ddd00i0d0011111d0s0011111ddd00i0d0011111111001111111100i0d00111116 \ No newline at end of file +111001111111100i0d0011111100000111ddd000i0d0000001100000000000000itd00000e1111111ddd111111111111111100000000000000000h00d0000111111111dd111110100d000110001100000000010100d0001000011000000000i0d00d0000000000000000000i0d00d00001111dd111100000ild00111111000011111ddd00i0d0011111d000011111ddd00i0d0011111d0s0011111ddd00i0d0011111111001111111100i0d00111116 +13 +10 +-1 \ No newline at end of file diff --git a/editor/levels/8.lvl b/editor/levels/8.lvl index 6cc6d35..438149e 100755 --- a/editor/levels/8.lvl +++ b/editor/levels/8.lvl @@ -1 +1,4 @@ -dddddddddddddddddddddddddBBBBBBBBBBBBBBBBBBBBBBBBB100001kk10011111dt0a000011000010010010000d11a00001100001BB100100000000000013000000000010001110000000300000000001aaaaaa0000000111111000001000000001111110dd00000001000000001000110000000a001BBBd00a0100013000000000010001000010003300s000000010K0100001e003aaBBBBBBBBBBBBBBBBBBBaaaaddddddddddddddddddddddddd6 \ No newline at end of file +dddddddddddddddddddddddddBBBBBBBBBBBBBBBBBBBBBBBBB100001kk10011111dt0a000011000010010010000d11a00001100001BB100100000000000013000000000010001110000000300000000001aaaaaa0000000111111000001000000001111110dd00000001000000001000110000000a001BBBd00a0100013000000000010001000010003300s000000010K0100001e003aaBBBBBBBBBBBBBBBBBBBaaaaddddddddddddddddddddddddd6 +13 +10 +-1 \ No newline at end of file diff --git a/editor/levels/9.lvl b/editor/levels/9.lvl index dabd977..1374d7f 100755 --- a/editor/levels/9.lvl +++ b/editor/levels/9.lvl @@ -1 +1,4 @@ -00000ddddddd100000000000011111111111111111110011111000000dd1111ddd0K10000b1100111000000100000100000110000100000010000010010011000k111dd101dd00d10000011000110000001000001BBBB011000100011dd1000001dddd01100010ddd1dd1d00dd1011001133310ddd1dd1BBBBB1t00001100000ddd1dd1000001ddd1111s0000ddd1dd10000011111111BBB111aaaaa110001111111100000000000e10000000000006 \ No newline at end of file +00000ddddddd100000000000011111111111111111110011111000000dd1111ddd0K10000b1100111000000100000100000110000100000010000010010011000k111dd101dd00d10000011000110000001000001BBBB011000100011dd1000001dddd01100010ddd1dd1d00dd1011001133310ddd1dd1BBBBB1t00001100000ddd1dd1000001ddd1111s0000ddd1dd10000011111111BBB111aaaaa110001111111100000000000e10000000000006 +13 +10 +-1 \ No newline at end of file diff --git a/include/drawlevel.h b/include/drawlevel.h index 2b1d00c..0fad726 100755 --- a/include/drawlevel.h +++ b/include/drawlevel.h @@ -3,3 +3,4 @@ void draw_player(int x, int y, char type); void draw_timer(unsigned int frame); void draw_blackout(int x, int y); void draw_end(int framelevel, int id_level, char record); +void draw_nbswitch(int nbswitch); diff --git a/include/save.h b/include/save.h index dcaaa13..3053134 100644 --- a/include/save.h +++ b/include/save.h @@ -1,9 +1,4 @@ void savefile(void); int loadtime(int idlevel); void restore(void); -<<<<<<< HEAD void savetime(float framelevel, int id_level); -void reset_times(); -======= -void savetimes(float framelevel, int id_level); ->>>>>>> dd8e25d259480e2e6761ff105d419e40e2382bda diff --git a/include/setlevel.h b/include/setlevel.h index 43c6edd..834dcf6 100644 --- a/include/setlevel.h +++ b/include/setlevel.h @@ -1,4 +1,3 @@ -void set_level(int id_level, char level[], int *startx, int *starty, - char *gravity, int *appear, int *disappear); +void set_level(int id_level, char level[], int *startx, int *starty, char *gravity, int *appear, int *disappear, int *nbswitch); void set_gravity(int id_level, char *default_gravity); void del_level(char level[]); diff --git a/src/collide.c b/src/collide.c old mode 100644 new mode 100755 index 7a8a35c..a9fd2fc --- a/src/collide.c +++ b/src/collide.c @@ -1,51 +1,44 @@ #include "collide.h" #include "define.h" -#define DEAD_COLLISION \ - 3 // make the collision with the deadly block less effective +#define DEAD_COLLISION 3 //make the collision with the deadly block less effective -char collide(int x, int y, char level[], - 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 || - level[(int)(x / 16) + (int)((y / 16) * 25)] == block || - level[(int)((x + PLAYER_HEIGHT) / 16) + (int)((y / 16) * 25)] == - block)) - return 1; + 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 || + level[(int)(x/16) + (int)((y/16) * 25)] == block || + level[(int)((x + PLAYER_HEIGHT)/16) + (int)((y/16) * 25)] == block)) return 1; return 0; } char collide_solid(int x, int y, char level[]) { - 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') || collide(x, y, level, 'H'); + 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') + || collide(x, y, level, 'H'); } char collide_dead(int x, int y, char level[]) { - return collide_point(x + DEAD_COLLISION, y + DEAD_COLLISION, level, - 'd') || - collide_point(x + PLAYER_HEIGHT - DEAD_COLLISION, - y + DEAD_COLLISION, level, 'd') || - collide_point(x + DEAD_COLLISION, - y + PLAYER_HEIGHT - DEAD_COLLISION, level, 'd') || - collide_point(x + PLAYER_HEIGHT - DEAD_COLLISION, - y + PLAYER_HEIGHT - DEAD_COLLISION, level, 'd') || - collide_point(x + 1, y + 1, level, 'C') || - collide_point(x + PLAYER_HEIGHT - 1, y + 1, level, 'C') || - collide_point(x + 1, y + PLAYER_HEIGHT - 1, level, 'C') || - collide_point(x + PLAYER_HEIGHT - 1, y + PLAYER_HEIGHT - 1, - level, 'C'); + return collide_point(x + DEAD_COLLISION, y + DEAD_COLLISION, level, 'd') || + collide_point(x + PLAYER_HEIGHT - DEAD_COLLISION, y + DEAD_COLLISION, level, 'd') || + collide_point(x + DEAD_COLLISION, y + PLAYER_HEIGHT - DEAD_COLLISION, level, 'd') || + collide_point(x + PLAYER_HEIGHT - DEAD_COLLISION, y + PLAYER_HEIGHT - DEAD_COLLISION, level, 'd') || + collide_point(x + 1, y + 1, level, 'C') || + collide_point(x + PLAYER_HEIGHT - 1, y + 1, level, 'C') || + collide_point(x + 1, y + PLAYER_HEIGHT - 1, level, 'C') || + collide_point(x + PLAYER_HEIGHT - 1, y + PLAYER_HEIGHT - 1, level, 'C'); } char collide_point(int x, int y, char level[], char block) { - return (level[(int)(x / 16) + (int)(y / 16) * 25] == block); + return (level[(int)(x/16) + (int)(y/16) * 25] == block); } char collide_end(int x, int y, char level[]) @@ -55,18 +48,20 @@ char collide_end(int x, int y, char level[]) void collide_replace(int x, int y, char level[], char collide, char replace) { - if (collide_point(x, y, level, collide)) { - level[((x) / 16) + ((y) / 16) * 25] = replace; + if(collide_point(x, y, level, collide)) + { + level[((x)/16)+((y)/16)*25] = replace; } - if (collide_point(x + PLAYER_HEIGHT, y, level, collide)) { - level[((x + PLAYER_HEIGHT) / 16) + ((y) / 16) * 25] = replace; + if(collide_point(x + PLAYER_HEIGHT, y, level, collide)) + { + level[((x + PLAYER_HEIGHT)/16)+((y)/16)*25] = replace; } - if (collide_point(x, y + PLAYER_HEIGHT, level, collide)) { - level[((x) / 16) + ((y + PLAYER_HEIGHT) / 16) * 25] = replace; + if(collide_point(x, y + PLAYER_HEIGHT, level, collide)) + { + level[((x)/16)+((y + PLAYER_HEIGHT)/16)*25] = replace; } - if (collide_point(x + PLAYER_HEIGHT, y + PLAYER_HEIGHT, level, - collide)) { - level[((x + PLAYER_HEIGHT) / 16) + - ((y + PLAYER_HEIGHT) / 16) * 25] = replace; + if(collide_point(x + PLAYER_HEIGHT, y + PLAYER_HEIGHT, level, collide)) + { + level[((x + PLAYER_HEIGHT)/16)+((y + PLAYER_HEIGHT)/16)*25] = replace; } } diff --git a/src/drawlevel.c b/src/drawlevel.c old mode 100644 new mode 100755 index 950d15e..caccad1 --- a/src/drawlevel.c +++ b/src/drawlevel.c @@ -1,33 +1,35 @@ #include "drawlevel.h" +#include +#include #include "define.h" #include "times.h" -#include -#include #define VISIBLE_RECT 35 -extern bopti_image_t img_solid; // solid block -extern bopti_image_t img_coin; // facultative coin -extern bopti_image_t img_dead; // dead block -extern bopti_image_t img_player; // player -extern bopti_image_t img_end; // end of level -extern bopti_image_t img_key1; // key 1 -extern bopti_image_t img_blackout; // blackout -extern bopti_image_t img_chrono1; // chronoblock -extern bopti_image_t img_chrono2; // chronoblock 2 -extern bopti_image_t img_key2; // 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 -extern bopti_image_t img_appear; // appear block +extern bopti_image_t img_solid; //solid block +extern bopti_image_t img_coin; //facultative coin +extern bopti_image_t img_dead; //dead block +extern bopti_image_t img_player; //player +extern bopti_image_t img_end; //end of level +extern bopti_image_t img_key1; //key 1 +extern bopti_image_t img_blackout; //blackout +extern bopti_image_t img_chrono1; //chronoblock +extern bopti_image_t img_chrono2; //chronoblock 2 +extern bopti_image_t img_key2; //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 +extern bopti_image_t img_appear; //appear block +extern bopti_image_t img_nbswitch; //appear block extern bopti_image_t img_endscreen; +extern bopti_image_t img_nbswitchlayout; extern bopti_image_t img_new; void draw_player(int x, int y, char type) { - dsubimage(x, y, &img_player, 12 * (type - 1), 0, 12, 12, DIMAGE_NONE); + dsubimage(x,y,&img_player, 12*(type-1),0,12,12, DIMAGE_NONE); } void draw_level(char level[]) @@ -36,76 +38,79 @@ void draw_level(char level[]) unsigned int x = 0; unsigned int y = 0; unsigned int i = 0; - while (i != strlen(level)) { - switch (level[i]) { - case '1': // solid block - dimage(x, y, &img_solid); - break; - case 't': // coin (treasure) - dimage(x, y, &img_coin); - break; - case 'd': // dead block - dimage(x, y, &img_dead); - break; - case 'e': // end of level - dimage(x, y, &img_end); - break; - case '3': // block link to the key1 - dsubimage(x, y, &img_key1, 0, 0, 16, 16, DIMAGE_NONE); - break; - case 'k': // key1 - dsubimage(x, y, &img_key1, 16, 0, 16, 16, DIMAGE_NONE); - break; - case 'a': // block link to the key2 when it's not on - dsubimage(x, y, &img_key2, 0, 0, 16, 16, DIMAGE_NONE); - break; - case '4': // block link to the key2 - dsubimage(x, y, &img_key2, 16, 0, 16, 16, DIMAGE_NONE); - break; - case 'K': // key2 - dsubimage(x, y, &img_key2, 32, 0, 16, 16, DIMAGE_NONE); - break; - case 'c': // chrono blocks - dimage(x, y, &img_chrono1); - break; - case 'C': // chrono blocks - dsubimage(x, y, &img_chrono2, 16, 0, 16, 16, - DIMAGE_NONE); - break; - case 'b': // blackout blocks - dimage(x, y, &img_blackout); - break; - case 'B': // damaged block - dimage(x, y, &img_damaged); - break; - 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; - case 'h': // void appear blocks - dsubimage(x, y, &img_appear, 0, 0, 16, 16, DIMAGE_NONE); - break; - case 'H': // appear blocks - dsubimage(x, y, &img_appear, 16, 0, 16, 16, - DIMAGE_NONE); - break; - case 'y': // appear blocks - dsubimage(x, y, &img_appear, 0, 0, 16, 16, DIMAGE_NONE); - break; - case 'm': // chronoappear blocks - dsubimage(x, y, &img_chrono2, 0, 0, 16, 16, - DIMAGE_NONE); - break; + while (i!=strlen(level)) + { + switch(level[i]) + { + case '1': //solid block + dimage(x,y,&img_solid); + break; + case 't': //coin (treasure) + dimage(x,y,&img_coin); + break; + case 'd': //dead block + dimage(x,y,&img_dead); + break; + case 'e': //end of level + dimage(x,y,&img_end); + break; + case '3': //block link to the key1 + dsubimage(x,y,&img_key1,0,0,16,16,DIMAGE_NONE); + break; + case 'k': //key1 + dsubimage(x,y,&img_key1,16,0,16,16,DIMAGE_NONE); + break; + case 'a': //block link to the key2 when it's not on + dsubimage(x,y,&img_key2,0,0,16,16,DIMAGE_NONE); + break; + case '4': //block link to the key2 + dsubimage(x,y,&img_key2,16,0,16,16,DIMAGE_NONE); + break; + case 'K': //key2 + dsubimage(x,y,&img_key2,32,0,16,16,DIMAGE_NONE); + break; + case 'c': //chrono blocks + dimage(x,y,&img_chrono1); + break; + case 'C': //chrono blocks + dsubimage(x,y,&img_chrono2,16,0,16,16,DIMAGE_NONE); + break; + case 'b': //blackout blocks + dimage(x,y,&img_blackout); + break; + case 'B': //damaged block + dimage(x,y,&img_damaged); + break; + 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; + case 'h': //void appear blocks + dsubimage(x,y,&img_appear,0,0,16,16,DIMAGE_NONE); + break; + case 'H': //appear blocks + dsubimage(x,y,&img_appear,16,0,16,16,DIMAGE_NONE); + break; + case 'y': //appear blocks + dsubimage(x,y,&img_appear,0,0,16,16,DIMAGE_NONE); + break; + case 'm': //chronoappear blocks + dsubimage(x,y,&img_chrono2,0,0,16,16,DIMAGE_NONE); + break; + case 'z': //nbswitch blocks + dimage(x,y,&img_nbswitch); + break; } - x += 16; - if (x == 16 * 25) { - x = 0; - y += 16; + x+=16; + if(x==16*25) + { + x=0; + y+=16; } i++; } @@ -113,44 +118,39 @@ void draw_level(char level[]) void draw_blackout(int x, int y) { - x += 5; - y += 5; - drect(0, 0, 395, y - VISIBLE_RECT, C_BLACK); // top rect - drect(0, y - VISIBLE_RECT, x - VISIBLE_RECT, y + VISIBLE_RECT, - C_BLACK); // left rect - drect(x + VISIBLE_RECT, y - VISIBLE_RECT, 395, y + VISIBLE_RECT, - C_BLACK); // right rect - drect(0, y + VISIBLE_RECT, 395, 223, C_BLACK); // bottom rect + x+=5; + y+=5; + drect(0, 0, 395, y-VISIBLE_RECT, C_BLACK); //top rect + drect(0, y-VISIBLE_RECT, x-VISIBLE_RECT, y+VISIBLE_RECT, C_BLACK); //left rect + drect(x+VISIBLE_RECT, y-VISIBLE_RECT, 395, y+VISIBLE_RECT, C_BLACK); //right rect + drect(0, y+VISIBLE_RECT, 395, 223, C_BLACK); //bottom rect } void draw_timer(unsigned int frame) { float framefloat = frame; - dprint_opt(0, 0, C_WHITE, C_BLACK, DTEXT_LEFT, DTEXT_TOP, "%.2j", - (int)(framefloat / FPS * 100)); + dprint_opt(0, 0, C_WHITE, C_BLACK, DTEXT_LEFT, DTEXT_TOP, "%.2j", (int)(framefloat/FPS*100)); } void draw_end(int framelevel, int id_level, char record) { float framefloat = framelevel; -<<<<<<< HEAD dimage(144,60,&img_endscreen); if(record!=2) { dprint(166, 87, C_RED, "%.2j",(int)(framefloat/FPS*100)); -======= - dimage(144, 60, &img_endscreen); - if (record != 2) { - dprint_opt(220, 115, C_WHITE, C_BLACK, DTEXT_LEFT, DTEXT_TOP, - "%d", framelevel); - dprint(166, 87, C_RED, "%.2j", (int)(framefloat / FPS * 100)); ->>>>>>> dd8e25d259480e2e6761ff105d419e40e2382bda check_medal(framelevel, id_level, 178, 140); - if (record == 1) - dimage(60, 100, &img_new); - } else { + if(record==1) dimage(60,100,&img_new); + } + else + { dprint(166, 87, C_RED, "GG !"); - dprint(178, 140, C_RED, "%.2j", (int)(framefloat / FPS * 100)); + dprint(178, 140, C_RED, "%.2j",(int)(framefloat/FPS*100)); } dupdate(); } + +void draw_nbswitch(int nbswitch) { + dimage(300,150,&img_nbswitchlayout); + dprint(335, 175, C_RED, "%d",nbswitch); +} \ No newline at end of file diff --git a/src/main.c b/src/main.c old mode 100644 new mode 100755 index ce4d51f..3398722 --- a/src/main.c +++ b/src/main.c @@ -1,17 +1,17 @@ -#include #include -#include #include -#include +#include #include +#include +#include -#include "collide.h" -#include "define.h" -#include "drawlevel.h" -#include "menu.h" -#include "save.h" #include "setlevel.h" +#include "drawlevel.h" +#include "collide.h" +#include "menu.h" #include "times.h" +#include "save.h" +#include "define.h" #define VACCELERATION 0.2 #define HACCELERATION 0.4 @@ -25,63 +25,57 @@ char run = 0; int callback(volatile int *frame_elapsed) { - *frame_elapsed = 1; - return TIMER_CONTINUE; + *frame_elapsed = 1; + return TIMER_CONTINUE; } 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); + int timer = timer_setup(TIMER_ANY, 1000000/FPS, callback, &frame_elapsed); timer_start(timer); - + char game_loop = 1; unsigned int frame = 0; int framelevel = 0; int player_x = 20, player_y = 20; char level[351]; - char gravity = 0; // 0 down 1 up + char gravity = 0; //0 down 1 up char check = 1; char blackout = 0; int start_x; int start_y; int death_count = 0; - + int coin = 0; char check_coin = 0; char double_check = 1; -<<<<<<< HEAD char chock = 0; -======= - ->>>>>>> dd8e25d259480e2e6761ff105d419e40e2382bda int appear = 10; int disappear = 13; + int nbswitch = 0; + char check_nbswitch = 0; float vspd = 1.0; float hspd = 0.0; - if (*id_level == 10 && *type != 3) - *type = 2; - else if (*type != 3) - *type = 1; + if(*id_level==10 && *type!=3) *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); + set_level(*id_level, level, &start_x, &start_y, &gravity, &appear, &disappear, &nbswitch); player_x = start_x; player_y = start_y; draw_level(level); - while (game_loop) { - while (!frame_elapsed) - sleep(); + while(game_loop) + { + while(!frame_elapsed) sleep(); frame_elapsed = 0; - + frame++; framelevel++; - if (!(frame % 2)) { + if(!(frame%2)) + { draw_level(level); -<<<<<<< HEAD if(blackout) draw_blackout(player_x, player_y); @@ -101,395 +95,327 @@ void game(int *id_level, char mode, char *type) else draw_timer(framelevel); if(!mode) dprint_opt(330, 0, C_RGB(255,190,0), C_BLACK, DTEXT_LEFT, DTEXT_TOP, "Coin : %d", coin); -======= - if (blackout) - draw_blackout(player_x, player_y); - draw_player(player_x, player_y, *type); - if (!mode) - draw_timer(frame); - else - draw_timer(framelevel); - - if (*id_level == 0 && !mode) { - dprint(85, 180, C_RGB(245, 245, 0), "SHIFT"); - dprint(120, 3, C_RGB(220, 220, 220), - "Keys has effects on blocks"); - dprint(15, 67, C_RGB(220, 220, 220), - "Red blocks = death"); - dprint(30, 211, C_RGB(220, 220, 220), - "^ special blocks"); - dprint(290, 131, C_RGB(110, 110, 110), - "Well done !"); - } - if (!mode) - dprint_opt(330, 0, C_RGB(255, 190, 0), C_BLACK, - DTEXT_LEFT, DTEXT_TOP, "Coin : %d", - coin); ->>>>>>> dd8e25d259480e2e6761ff105d419e40e2382bda + if(check_nbswitch) draw_nbswitch(nbswitch); dupdate(); } - + + pollevent(); - - if (keydown(KEY_OPTN)) { - level[((player_x + 6) / 16) + - ((player_y + 6) / 16) * 25] = 'd'; + + if(keydown(KEY_OPTN)) + { + level[((player_x+6)/16)+((player_y+6)/16)*25] = 'd'; death_count--; } - // Right collision - if (keydown(KEY_RIGHT)) { + //Right collision + if(keydown(KEY_RIGHT)) + { hspd *= 1 - FRICTION; - hspd += (keydown(KEY_RIGHT) - keydown(KEY_LEFT)) * - HACCELERATION; - if (!collide_solid(player_x + round(hspd) + 1, player_y, - level)) - player_x += round(hspd); - else if (!collide_solid(player_x + 1, player_y, level)) - player_x += 1; - if (player_x >= 388) - player_x = -4; + hspd += (keydown(KEY_RIGHT)-keydown(KEY_LEFT)) * HACCELERATION; + if(!collide_solid(player_x+round(hspd)+1, player_y, level)) player_x += round(hspd); + else if(!collide_solid(player_x+1, player_y, level)) player_x+=1; + if(player_x>=388) player_x=-4; } - // Left collision - else if (keydown(KEY_LEFT)) { + //Left collision + else if(keydown(KEY_LEFT)) + { hspd *= 1 - FRICTION; - hspd += (keydown(KEY_RIGHT) - keydown(KEY_LEFT)) * - HACCELERATION; - if (!collide_solid(player_x + round(hspd) - 1, player_y, - level)) - player_x += round(hspd); - else if (!collide_solid(player_x - 1, player_y, level)) - player_x -= 1; - if (player_x < -9) - player_x = 384; - } else - hspd = 0; - // Action key - if (keydown(KEY_SHIFT) && !check && - ((collide_solid(player_x, player_y - 1, level) && - gravity) || - (collide_solid(player_x, player_y + 1, level) && - !gravity))) { + hspd += (keydown(KEY_RIGHT)-keydown(KEY_LEFT)) * HACCELERATION; + if(!collide_solid(player_x+round(hspd)-1, player_y, level)) player_x += round(hspd); + else if(!collide_solid(player_x-1, player_y, level)) player_x-=1; + if(player_x<-9) player_x=384; + } + else hspd=0; + //Action key + if(keydown(KEY_SHIFT) && !check && (nbswitch > 0 || nbswitch == -1) && + ((collide_solid(player_x, player_y-1, level) && gravity) || (collide_solid(player_x, player_y+1, level) && !gravity))) + { vspd = 1; - if (!gravity) - gravity = 1; - else - gravity = 0; - check = 1; - } else if (!keydown(KEY_SHIFT) && check) - check = 0; - // Gravity - if (!gravity) { - if (!collide_solid(player_x, player_y + (int)vspd + 1, - level)) { - if (vspd < MAX_VSPD) - vspd += VACCELERATION; - if (collide(player_x + 1, player_y, level, 'i')) - vspd += 0.15; - if (collide(player_x - 1, player_y, level, 'i')) - vspd += 0.15; - player_y += (int)vspd; - } else if (!collide_solid( - player_x, player_y + (int)vspd, level)) { - vspd -= VACCELERATION; - player_y += (int)vspd; - } else if (!collide_solid(player_x, player_y + 1, - level)) { - vspd = 1; - player_y += 1; - } else - vspd = 1; - } else { - if (!collide_solid(player_x, player_y - (int)vspd - 1, - level)) { - if (vspd < MAX_VSPD) - vspd += VACCELERATION; - if (collide(player_x + 1, player_y, level, 'i')) - vspd += 0.15; - if (collide(player_x - 1, player_y, level, 'i')) - vspd += 0.15; - player_y -= (int)vspd; - } else if (!collide_solid( - player_x, player_y - (int)vspd, level)) { - vspd -= VACCELERATION; - player_y -= (int)vspd; - } else if (!collide_solid(player_x, player_y - 1, - level)) { - vspd = 1; - player_y -= 1; - } else - vspd = 1; + if(!gravity) gravity=1; + else gravity=0; + if(check_nbswitch && nbswitch != 0) { + nbswitch-=1; + } + check=1; } - // Collide with red block - if (collide_dead(player_x, player_y, level)) { + else if(!keydown(KEY_SHIFT) && check) check=0; + //Gravity + if(!gravity) + { + if(!collide_solid(player_x, player_y+(int)vspd+1, level)) + { + if (vspd>>>>>> dd8e25d259480e2e6761ff105d419e40e2382bda } - - if (collide(player_x, player_y + (int)vspd + 2, level, 'B') && - vspd >= 5) // 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 + 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(level[((player_x)/16)+((player_y+25)/16)*25]=='B') level[((player_x)/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(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 + 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; + 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+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; } - - collide_replace(player_x, player_y, level, 'h', - 'y'); // Appear block - if (!collide(player_x, player_y, level, 'y') && - double_check) // Appear block + + collide_replace(player_x, player_y, level, 'h', 'y'); //Appear block + if(!collide(player_x, player_y, level, 'y') && double_check) //Appear block { - for (int i = 0; level[i] != '\0'; i++) { - if (level[i] == 'y') { + for (int i = 0; level[i]!='\0' ; i++) + { + if(level[i]=='y') + { double_check = 1; break; - } else if (level[i] == 'h') { - double_check = 1; - break; - } else - double_check = - 0; // This loop is executed only - // when an h or y is on the level - } - for (int i = 0; level[i] != '\0'; ++i) { - if (level[i] == 'y') { - level[i] = 'H'; } + else if(level[i]=='h') + { + double_check = 1; + break; + } + else double_check = 0; //This loop is executed only when an h or y is on the level } - } - if (level[((player_x + 6) / 16) + ((player_y + 6) / 16) * 25] == - 'S') // Switch block + for (int i = 0; level[i]!='\0'; ++i) { - level[((player_x + 6) / 16) + - ((player_y + 6) / 16) * 25] = '0'; - vspd = 1.0; - if (!gravity) - gravity = 1; - else - gravity = 0; + if(level[i]=='y') + { + level[i]='H'; + } } - - 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 - - if (player_y >= 212) - player_y = -4; - if (player_y < -6) - player_y = 212; - - // Menu - if (keydown_any(KEY_EXIT, KEY_MENU, 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 + + if(player_y>=212) player_y=-4; + if(player_y<-6) player_y=212; + + //Menu + if(keydown_any(KEY_EXIT, KEY_MENU, 0)) + { char menu_loop = 1; char selected = 0; int Y_POS = 18; char buffer = 1; - while (menu_loop) { + while(menu_loop) + { clearevents(); dclear(C_WHITE); draw_level(level); - draw_player(player_x, player_y, *type); - dimage(0, 0, &img_speedrun); + draw_player(player_x,player_y, *type); + dimage(0,0,&img_speedrun); selected += keydown(KEY_DOWN) - keydown(KEY_UP); - if (selected == 2) - selected = 0; - else if (selected == -1) - selected = 1; + if (selected == 2) selected = 0; + else if (selected == -1) selected = 1; dtext(32, Y_POS, C_BLACK, "CONTINUE"); - 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(180, 45, C_RGB(83, 255, 0), "LEVEL : %d", - *id_level); - dprint(320, 3, C_RGB(255, 178, 0), "COIN : %d", - coin); - dprint(311, 17, C_RGB(150, 16, 16), - "DEATH : %d", death_count); + 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(180, 45, C_RGB(83,255,0), "LEVEL : %d", *id_level); + dprint(320, 3, C_RGB(255,178,0), "COIN : %d", coin); + dprint(311, 17, C_RGB(150,16,16), "DEATH : %d", death_count); dupdate(); - if (keydown_any(KEY_SHIFT, KEY_EXE, 0)) { - switch (selected) { - case 0: - menu_loop = 0; - break; - case 1: + if (keydown_any(KEY_SHIFT, KEY_EXE, 0)) + { + switch (selected) + { + case 0: + menu_loop = 0; + break; + case 1: + menu_loop = 0; + game_loop = 0; + break; + } + } + if(keydown_any(KEY_EXIT, KEY_MENU, 0)) + { + if(!buffer) + { menu_loop = 0; game_loop = 0; break; } } - if (keydown_any(KEY_EXIT, KEY_MENU, 0)) { - if (!buffer) { - menu_loop = 0; - game_loop = 0; - break; - } - } else - buffer = 0; - while (keydown_any(KEY_UP, KEY_DOWN, 0)) - clearevents(); + else buffer = 0; + while (keydown_any(KEY_UP, KEY_DOWN, 0)) clearevents(); } } } timer_stop(timer); -<<<<<<< HEAD //when a level is quit if(mode) { @@ -500,27 +426,21 @@ void game(int *id_level, char mode, char *type) *id_level = 1; } if(game_loop) //end of a level with level selection -======= - // when a level is quit - if (mode) { - if (*id_level == 0) - *id_level = 1; - if (game_loop) // end of a level with level selection ->>>>>>> dd8e25d259480e2e6761ff105d419e40e2382bda { float framefloat = framelevel; draw_end(framelevel, *id_level, 0); savetime(framefloat, *id_level); sleep_ms(2500); } - if (!speed_menu(id_level)) { + if(!speed_menu(id_level)) + { mode = 1; death_count = 0; game(id_level, mode, type); - } else - main(); - } else - main(); + } + else main(); + } + else main(); } void end(unsigned int frame) @@ -531,25 +451,21 @@ void end(unsigned int frame) } int main(void) -<<<<<<< HEAD { if(!run) { gint_switch(restore); run = 1; } -======= -{ ->>>>>>> dd8e25d259480e2e6761ff105d419e40e2382bda char mode = 0; char type = 1; char valeur = start_menu(&type); - if (!valeur) // normal game (level selection) + if(!valeur) //normal game (level selection) { int id_level = 1; - if (!speed_menu(&id_level)) { + if(!speed_menu(&id_level)) + { mode = 1; game(&id_level, mode, &type); -<<<<<<< HEAD } else main(); } @@ -561,15 +477,6 @@ int main(void) } else if(valeur==2) // tutorial { -======= - } else - main(); - } else if (valeur == 1) { - int id_level = 1; - mode = 0; - game(&id_level, mode, &type); - } else if (valeur == 2) { ->>>>>>> dd8e25d259480e2e6761ff105d419e40e2382bda int id_level = 0; mode = 1; game(&id_level, mode, &type); diff --git a/src/menu.c b/src/menu.c old mode 100644 new mode 100755 index 9d9f7aa..f9ca790 --- a/src/menu.c +++ b/src/menu.c @@ -1,16 +1,16 @@ -#include "define.h" #include "drawlevel.h" -#include "save.h" +#include +#include #include "setlevel.h" #include "times.h" -#include +#include "define.h" +#include "save.h" #include -#include -int round(float num) // round(2.5) = 3 round(-3.2) = -3 -{ - return num < 0 ? num - 0.5 : num + 0.5; -} +int round(float num) //round(2.5) = 3 round(-3.2) = -3 +{ + return num < 0 ? num - 0.5 : num + 0.5; +} char start_menu(char *type) { @@ -20,21 +20,14 @@ char start_menu(char *type) char buffer = 1; char buffer2 = 1; int Y_POS = 85; -<<<<<<< HEAD while(menu_loop) { -======= - gint_switch(restore); - while (menu_loop) { ->>>>>>> dd8e25d259480e2e6761ff105d419e40e2382bda clearevents(); dclear(C_WHITE); - dimage(0, 0, &img_menu); + dimage(0,0,&img_menu); selection += keydown(KEY_DOWN) - keydown(KEY_UP); - if (selection == 4) - selection = 0; - else if (selection == -1) - selection = 3; + if (selection == 4) selection = 0; + else if (selection == -1) selection = 3; dtext(32, Y_POS, C_BLACK, "PLAY"); dtext(32, Y_POS + 12, C_BLACK, "ALL MODE"); dtext(32, Y_POS + 24, C_BLACK, "TEST LEVEL"); @@ -42,7 +35,6 @@ char start_menu(char *type) dtext(16, Y_POS + (selection * 12), C_BLACK, ">"); dupdate(); if (keydown_any(KEY_SHIFT, KEY_EXE, 0)) { -<<<<<<< HEAD if(!buffer2) return selection; } else buffer2 = 0; @@ -52,21 +44,6 @@ char start_menu(char *type) else buffer = 0; if(keydown_all(KEY_5,KEY_6)) *type = 3; while (keydown_any(KEY_UP, KEY_DOWN, 0)) clearevents(); -======= - if (!buffer2) - return selection; - } else - buffer2 = 0; - if (keydown_any(KEY_EXIT, KEY_MENU, 0)) { - if (!buffer) - return -1; - } else - buffer = 0; - if (keydown_all(KEY_5, KEY_6)) - *type = 3; - while (keydown_any(KEY_UP, KEY_DOWN, 0)) - clearevents(); ->>>>>>> dd8e25d259480e2e6761ff105d419e40e2382bda } return selection; } @@ -74,67 +51,54 @@ char start_menu(char *type) char speed_menu(int *id_level) { char level[351]; - char gravity = 0; // 0 down 1 up + char gravity = 0; //0 down 1 up int start_x; int start_y; char buffer = 1; int appear = 10; int disappear = 13; - int sto = loadtime(*id_level - 1); + int nbswitch = 0; + int sto = loadtime(*id_level-1); char menu_loop = 1; char check = 1; extern bopti_image_t img_speedrun; - - while (menu_loop) { + + while(menu_loop) + { clearevents(); dclear(C_WHITE); *id_level += keydown(KEY_RIGHT) - keydown(KEY_LEFT); - if (*id_level == LEVEL_MAX + 1) - *id_level = 1; - else if (*id_level == 0) - *id_level = LEVEL_MAX; - if (keydown(KEY_RIGHT) || keydown(KEY_LEFT)) - sto = loadtime(*id_level - 1); - set_level(*id_level, level, &start_x, &start_y, &gravity, - &appear, &disappear); + if (*id_level == LEVEL_MAX+1) *id_level = 1; + else if (*id_level == 0) *id_level = LEVEL_MAX; + if(keydown(KEY_RIGHT) || keydown(KEY_LEFT)) sto = loadtime(*id_level-1); + set_level(*id_level, level, &start_x, &start_y, &gravity, &appear, &disappear, &nbswitch); draw_level(level); - dimage(0, 0, &img_speedrun); - if (sto != 0) - check_medal(round(sto * 0.01 * FPS), *id_level, 335, 8); + dimage(0,0,&img_speedrun); + if(sto != 0) check_medal(round(sto*0.01*FPS), *id_level, 335, 8); dtext(340, 214, C_BLACK, "TIMES"); dtext(190, 45, C_BLACK, "Time : "); -<<<<<<< HEAD dprint(80,20,C_BLACK,"Level : %d",*id_level); if(sto != 0) dprint(194,60,C_RED, "%.2j", sto); else dprint(202,60,C_RED, "/"); -======= - dprint(80, 20, C_BLACK, "Level : %d", *id_level); - if (sto != 0) - dprint(194, 60, C_RED, "%.2j", sto); - else - dprint(202, 60, C_RED, "/"); - if (*id_level == 14) - dprint_opt(180, 8, C_RGB(0, 255, 255), C_BLACK, - DTEXT_LEFT, DTEXT_TOP, "VVVVVV"); ->>>>>>> dd8e25d259480e2e6761ff105d419e40e2382bda dupdate(); - if (keydown_any(KEY_SHIFT, KEY_EXE, 0)) { - if (!check) { + if (keydown_any(KEY_SHIFT, KEY_EXE, 0)) + { + if(!check) + { del_level(level); return 0; } - } else - check = 0; - if (keydown(KEY_F6)) { + } + else check = 0; + if (keydown(KEY_F6)) + { draw_time(*id_level); } - if (keydown_any(KEY_EXIT, KEY_MENU, 0)) { - if (!buffer) - return 1; - } else - buffer = 0; - while (keydown_any(KEY_RIGHT, KEY_LEFT, 0)) - clearevents(); + if(keydown_any(KEY_EXIT, KEY_MENU, 0)) { + if(!buffer) return 1; + } + else buffer = 0; + while (keydown_any(KEY_RIGHT, KEY_LEFT, 0)) clearevents(); } return 0; } diff --git a/src/save.c b/src/save.c old mode 100644 new mode 100755 index ae0a075..5b905d0 --- a/src/save.c +++ b/src/save.c @@ -1,7 +1,7 @@ -#include "define.h" -#include "drawlevel.h" #include #include +#include "define.h" +#include "drawlevel.h" #include int retcode; @@ -15,39 +15,20 @@ static const uint16_t *filepath = u"\\\\fls0\\AST3.sav"; void savefile(void) { int descriptor; - + descriptor = BFile_Open(filepath, BFile_WriteOnly); BFile_Write(descriptor, times, sizeof(times)); BFile_Close(descriptor); } -<<<<<<< HEAD /* savetime() is call when the player has reached the end of a level. * If his time is better than the save time, it will save it in the array */ void savetime(float framelevel, int id_level) -======= -/* loadfile() is only called by the function loadtime() because - * loadtime() set the value of "id_leveltab". It store in the global retcode - * the time of the player. This function is called once per level in the - * level selection menu to avoid loading time. */ -void loadfile(void) { - int descriptor; - descriptor = BFile_Open(filepath, BFile_ReadOnly); - BFile_Read(descriptor, &retcode, sizeof(times[0]), - sizeof(times[0]) * id_leveltab); - BFile_Close(descriptor); -} - -/* savetimes() is call when the player has reached the end of a level. - * If his time is better than the save time, it will call the function - * savefile() else, nothing append to avoid loading time. */ -void savetimes(float framelevel, int id_level) ->>>>>>> dd8e25d259480e2e6761ff105d419e40e2382bda -{ - if (times[id_level - 1] > (int)(framelevel / FPS * 100) || - times[id_level - 1] == 0 || keydown(KEY_7)) { + if(times[id_level - 1] > (int)(framelevel / FPS * 100) || + times[id_level - 1] == 0 || keydown(KEY_7)) + { times[id_level - 1] = (int)(framelevel / FPS * 100); draw_end((int)framelevel, id_level, 1); } @@ -63,10 +44,9 @@ void restore(void) uint16_t foundpath[30]; int size = sizeof(times); int descriptor; - char checkfile = - BFile_FindFirst(filepath, &handle, foundpath, &fileInfo); + char checkfile = BFile_FindFirst(filepath, &handle, foundpath, &fileInfo); BFile_FindClose(handle); - if (checkfile == -1) + if(checkfile == -1) BFile_Create(filepath, BFile_File, &size); else { descriptor = BFile_Open(filepath, BFile_ReadOnly); diff --git a/times.lvl b/times.lvl index f2e2ec7..285c365 100755 --- a/times.lvl +++ b/times.lvl @@ -14,3 +14,4 @@ 8.35 7.45 10.53 +17.95