level 17 + nbswitch block
This commit is contained in:
parent
87a373def8
commit
7df8fd2be3
|
@ -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)
|
||||
|
||||
|
|
|
@ -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
|
Binary file not shown.
After Width: | Height: | Size: 330 B |
Binary file not shown.
After Width: | Height: | Size: 1.7 KiB |
|
@ -2,16 +2,13 @@ ids = 0
|
|||
|
||||
save = open("src/setlevel.c","w+")
|
||||
save.write("#include \"setlevel.h\"\n#include <gint/std/string.h>\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()
|
||||
|
|
|
@ -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:
|
||||
|
|
Binary file not shown.
After Width: | Height: | Size: 330 B |
|
@ -1,4 +1,4 @@
|
|||
11111111111111111111000111000000000000000000000001100000000000000000000000110e00000b0000l000S000000111111aaaaaaa11111111111111ddd1ddddddd1mmm1000000011ddd111111111mmm1000000011ddd111111111ccc101BB00011ddd1ddddddd1ccc10i00000111111aaaaaaa111110i000001100000000000030010i0000011000000000000300h0i1BBB111s000K00000k0300h0i0000011111111ddd1111111111000116
|
||||
|
||||
13
|
||||
13
|
||||
10
|
||||
-1
|
|
@ -1 +1,4 @@
|
|||
10011111111dddd1111111111000111100000000000000000000011110011111111ddd100001111111001dd000ddddd111111111111001dd0t0ddddddddd11000001001dd000ddddddddd11000001001aaaaaaaaaaaaaa110s00010010000000000000e11d1100100100000000000aaa11111001001000000000ddddd1111100100100000000011111100010000010000000003000000001000001000K0000030k00010011111111111111111111116
|
||||
10011111111dddd1111111111000111100000000000000000000011110011111111ddd100001111111001dd000ddddd111111111111001dd0t0ddddddddd11000001001dd000ddddddddd11000001001aaaaaaaaaaaaaa110s00010010000000000000e11d1100100100000000000aaa11111001001000000000ddddd1111100100100000000011111100010000010000000003000000001000001000K0000030k00010011111111111111111111116
|
||||
13
|
||||
10
|
||||
-1
|
|
@ -1 +1,4 @@
|
|||
11111111t133111111100011111111111133311111110K01111100000100111111111000111110s00010i11111100000001111d110K10i11111d000000011111110K10i1111a001BBBBB11110000010i111d0a010000011110000010i11a03011d0ddd1111001ddd0i1d0a0d110000011110000000i0a30111100e00111100000k0130ad11110aa001111dd000001031111111ddd11111111111B1001111111aaa11111111111010011111110001116
|
||||
11111111t133111111100011111111111133311111110K01111100000100111111111000111110s00010i11111100000001111d110K10i11111d000000011111110K10i1111a001BBBBB11110000010i111d0a010000011110000010i11a03011d0ddd1111001ddd0i1d0a0d110000011110000000i0a30111100e00111100000k0130ad11110aa001111dd000001031111111ddd11111111111B1001111111aaa11111111111010011111110001116
|
||||
13
|
||||
10
|
||||
-1
|
|
@ -1 +1,4 @@
|
|||
1ddddddddddd11dddddddddd11dddddddddd00000dd3aaa11i1dd111100000000000030000i1dd000000000001110003000i1d000001111100K000003000i1d00000S00k0000000003aBB110s000100000ddd011103atl11111331ddddddddddddddd1111ddd001dddddddd11d0S0ddd11ddd00d1dd11d000300000dd11ddd000000000000300000dd11dddaaa00000000d3S00e0dd11dddddd00S0d111d3d000ddd11ddddddddddddddddddddddd16
|
||||
1ddddddddddd11dddddddddd11dddddddddd00000dd3aaa11i1dd111100000000000030000i1dd000000000001110003000i1d000001111100K000003000i1d00000S00k0000000003aBB110s000100000ddd011103atl11111331ddddddddddddddd1111ddd001dddddddd11d0S0ddd11ddd00d1dd11d000300000dd11ddd000000000000300000dd11dddaaa00000000d3S00e0dd11dddddd00S0d111d3d000ddd11ddddddddddddddddddddddd16
|
||||
13
|
||||
10
|
||||
-1
|
|
@ -1 +1,4 @@
|
|||
1111111111010001dd11111110000001000013331001000000000000100t01000h0010000001111iB111111000h0013311111e00ik11d111000300300000d10ddi011d0010003003000s0d10aai01000010001hh1hh11111000i01h1h1100010010000011dd0i000000h00010010001a11aa01dd0dd110001001000h0110001dd1d1110S0100100010110000S0S0001ddd100h0001Kd100000S0S001111100h00011111111dddd10h00011111111116
|
||||
1111111111010001dd11111110000001000013331001000000000000100t01000h0010000001111iB111111000h0013311111e00ik11d111000300300000d10ddi011d0010003003000s0d10aai01000010001hh1hh11111000i01h1h1100010010000011dd0i000000h00010010001a11aa01dd0dd110001001000h0110001dd1d1110S0100100010110000S0S0001ddd100h0001Kd100000S0S001111100h00011111111dddd10h00011111111116
|
||||
13
|
||||
10
|
||||
-1
|
|
@ -1 +1,4 @@
|
|||
11111111111111111111111111ddddddddd0S00ddddddddddd1ddddaaaaa000000ddddddddd1ddd00S000000e0ddd0dddddd1dd000000ddddddd00000dddd1daaaa00dd11100S00S000ddd10000000d00000000000S00dd10K000h0d00001100000000dd1111000ddd000000S0d0h00dd1ddd000dd000dd000ddd000dd1dddhhdd000ddddddddd000dd1ddb00S0000100000dd0000dd1dtb00000011s000000000ddd111111d11111111111111dddd6
|
||||
11111111111111111111111111ddddddddd0S00ddddddddddd1ddddaaaaa000000ddddddddd1ddd00S000000e0ddd0dddddd1dd000000ddddddd00000dddd1daaaa00dd11100S00S000ddd10000000d00000000000S00dd10K000h0d00001100000000dd1111000ddd000000S0d0h00dd1ddd000dd000dd000ddd000dd1dddhhdd000ddddddddd000dd1ddb00S0000100000dd0000dd1dtb00000011s000000000ddd111111d11111111111111dddd6
|
||||
13
|
||||
10
|
||||
-1
|
|
@ -1 +1,4 @@
|
|||
1111111111111ddd11iK1d00100000d111000000011it1d00000000d100000000011i31110011100d13331110e011ihhh11100000d100011111111i00000000000d100000011111i00111011100d1000000000011000s111111111000000000011dd0001hk001111i00Sddd001dddd00hh0000001i000111000aad1ddhddd0000000001110000001111111dd0000000111000000001111111dd000011110000000001111111111111111ddd13100017
|
||||
1111111111111ddd11iK1d00100000d111000000011it1d00000000d100000000011i31110011100d13331110e011ihhh11100000d100011111111i00000000000d100000011111i00111011100d1000000000011000s111111111000000000011dd0001hk001111i00Sddd001dddd00hh0000001i000111000aad1ddhddd0000000001110000001111111dd0000000111000000001111111dd000011110000000001111111111111111ddd13100017
|
||||
13
|
||||
10
|
||||
-1
|
|
@ -1,4 +1,4 @@
|
|||
i011100dd1111dddm111ddmd1i01d1000000010S0011100S01i01d100000001000000000001i01d1cc111001hh1c11111001i01ddddddi00i000bddd00001i01dd1133i00i000lddd000K1100000000i00i00001d110011300000000i00100331d100003300000010i001s03t1d1000031111100hki0011111ddd1BB1110S01hh11100m0000aaa0000110001001d100m000000000001100e1001d100m0aaa000aaa0110d11001111111ddddddddd116
|
||||
|
||||
4
|
||||
7
|
||||
13
|
||||
10
|
||||
-1
|
|
@ -1,4 +1,4 @@
|
|||
11111dddd100d110111111331000000000000d1d0000dd10s0111d00000000K1d10000d11111ddddd11ddhh1dddd000dddd11100Sh00dd00000dd00000001i0000000dd000000d0000S001i01100d0dd00d000dd0000001i0d00Sd0dd00dd10ddhh00l01i0ddddd0dd00ddi0d00000001iBBBdd0011aaddi0d0S00d0011000dd000300ddi0d0000d00110mmdd000d00ddi0dd00dd0011emtdddddd00ddi0ddddddkk1111111111100111Bdddd110016
|
||||
|
||||
14
|
||||
7
|
||||
13
|
||||
10
|
||||
-1
|
|
@ -0,0 +1,4 @@
|
|||
101111110111111111100111110dS00d00000001111100111110aaa0d00000K010000001111100h00d0S0000010ddaaa1111100000ddd1111110ddddd1111111a00000S1e3s00100S0111100z0000000111dda100k0100000z000000000ddddd00001000111ddaaaaa000000000101001100Saddddd0000000001010011000000aa11111111111110011000a000003000000010000011000a0a0003010000t100000110111111011111111110011117
|
||||
13
|
||||
10
|
||||
18
|
|
@ -1,3 +1,4 @@
|
|||
1dddddd100111111111111111000000000011111000000000000000000l01100c00000000001aaaaaaa111100c00000000011dddddddddd1001aaaaaaaaa11cccccccccc1001ddddddddd1000000000001331000000aa000000000000s10e1k0000000001ccccccccc111111111113311100000000011001000000000110000000001100b0000000001100000000011t0b00000000011000K0000011111aaaaaaaaa1111111110011111ddddddddd16
|
||||
12
|
||||
1
|
||||
13
|
||||
10
|
||||
-1
|
|
@ -1 +1,4 @@
|
|||
11001111111001111111111111000111dddd000000000100013000111dddd00000000010003300000000dd11111000010e03100000000dd03a01000011111111110000dd03a01000000001100s1dd00ddt3a0100000000110001dd00dd1110100000000110001dd0Kdd00001ddd000ddd10001dd00dd00001111100ddd10001dd00dd00001000000ddd30001dd0000000010k000000330001dd0000000010000000031d001111111001111111111117
|
||||
11001111111001111111111111000111dddd000000000100013000111dddd00000000010003300000000dd11111000010e03100000000dd03a01000011111111110000dd03a01000000001100s1dd00ddt3a0100000000110001dd00dd1110100000000110001dd0Kdd00001ddd000ddd10001dd00dd00001111100ddd10001dd00dd00001000000ddd30001dd0000000010k000000330001dd0000000010000000031d001111111001111111111117
|
||||
13
|
||||
10
|
||||
-1
|
|
@ -1,3 +1,4 @@
|
|||
11111111111011111dddd1111100001dd0000dd100000000011s0001dd0d11dd10000000001111001dd0d111dd00111100011dd001dt0d10000001dd100011dd001d11d10000001dd100011dd00dd11110011111dd100011dd00000000001dddddd100011dd1111dbd1111ddd111100011ddddddd0dd1d1ddd100000011ddddddd0000d1ddd1e0000011ddddddd1110d1ddd111cccc11dddddddddd0d1ddd111dddd111111111111011111111111116
|
||||
12
|
||||
13
|
||||
13
|
||||
10
|
||||
-1
|
|
@ -1,4 +1,4 @@
|
|||
000000000000000000000000000000000000000000000000t000000000000000000000000000011dd111111111111111110000100000100000010000001000011cc001s0000d00000001000010000e111dd0100000dd100001001111000d0000000dd100001000001000111d000ddd1000010000000000000000ddd1000011111111111d111B11111000000000000000000000000000000000000000000000000000000000000000000000000000006
|
||||
|
||||
12
|
||||
6
|
||||
13
|
||||
10
|
||||
-1
|
|
@ -1,3 +1,4 @@
|
|||
10001011111011111111111111000101dd10001111dddd11110000101dd10001000000000001111101dd1aaa1000ccccddd110s00010013331000000000011dddd110010001mmmdd00000100000000010e010t0dd00000011111100011111d1dddddd1111k00000001d000111001111111111111101d00000000000111000010000100000000000000010K010000100011100000011110001000010001110000dd11110001011111011111111111117
|
||||
5
|
||||
9
|
||||
13
|
||||
10
|
||||
-1
|
|
@ -1 +1,4 @@
|
|||
111001111111100i0d0011111100000111ddd000i0d0000001100000000000000itd00000e1111111ddd111111111111111100000000000000000h00d0000111111111dd111110100d000110001100000000010100d0001000011000000000i0d00d0000000000000000000i0d00d00001111dd111000000ild00111111000011111ddd00i0d0011111d000011111ddd00i0d0011111d0s0011111ddd00i0d0011111111001111111100i0d00111116
|
||||
111001111111100i0d0011111100000111ddd000i0d0000001100000000000000itd00000e1111111ddd111111111111111100000000000000000h00d0000111111111dd111110100d000110001100000000010100d0001000011000000000i0d00d0000000000000000000i0d00d00001111dd111100000ild00111111000011111ddd00i0d0011111d000011111ddd00i0d0011111d0s0011111ddd00i0d0011111111001111111100i0d00111116
|
||||
13
|
||||
10
|
||||
-1
|
|
@ -1 +1,4 @@
|
|||
dddddddddddddddddddddddddBBBBBBBBBBBBBBBBBBBBBBBBB100001kk10011111dt0a000011000010010010000d11a00001100001BB100100000000000013000000000010001110000000300000000001aaaaaa0000000111111000001000000001111110dd00000001000000001000110000000a001BBBd00a0100013000000000010001000010003300s000000010K0100001e003aaBBBBBBBBBBBBBBBBBBBaaaaddddddddddddddddddddddddd6
|
||||
dddddddddddddddddddddddddBBBBBBBBBBBBBBBBBBBBBBBBB100001kk10011111dt0a000011000010010010000d11a00001100001BB100100000000000013000000000010001110000000300000000001aaaaaa0000000111111000001000000001111110dd00000001000000001000110000000a001BBBd00a0100013000000000010001000010003300s000000010K0100001e003aaBBBBBBBBBBBBBBBBBBBaaaaddddddddddddddddddddddddd6
|
||||
13
|
||||
10
|
||||
-1
|
|
@ -1 +1,4 @@
|
|||
00000ddddddd100000000000011111111111111111110011111000000dd1111ddd0K10000b1100111000000100000100000110000100000010000010010011000k111dd101dd00d10000011000110000001000001BBBB011000100011dd1000001dddd01100010ddd1dd1d00dd1011001133310ddd1dd1BBBBB1t00001100000ddd1dd1000001ddd1111s0000ddd1dd10000011111111BBB111aaaaa110001111111100000000000e10000000000006
|
||||
00000ddddddd100000000000011111111111111111110011111000000dd1111ddd0K10000b1100111000000100000100000110000100000010000010010011000k111dd101dd00d10000011000110000001000001BBBB011000100011dd1000001dddd01100010ddd1dd1d00dd1011001133310ddd1dd1BBBBB1t00001100000ddd1dd1000001ddd1111s0000ddd1dd10000011111111BBB111aaaaa110001111111100000000000e10000000000006
|
||||
13
|
||||
10
|
||||
-1
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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[]);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,33 +1,35 @@
|
|||
#include "drawlevel.h"
|
||||
#include <gint/std/string.h>
|
||||
#include <gint/display.h>
|
||||
#include "define.h"
|
||||
#include "times.h"
|
||||
#include <gint/display.h>
|
||||
#include <gint/std/string.h>
|
||||
|
||||
#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);
|
||||
}
|
|
@ -1,17 +1,17 @@
|
|||
#include <gint/clock.h>
|
||||
#include <gint/display.h>
|
||||
#include <gint/gint.h>
|
||||
#include <gint/keyboard.h>
|
||||
#include <gint/std/string.h>
|
||||
#include <gint/clock.h>
|
||||
#include <gint/timer.h>
|
||||
#include <gint/gint.h>
|
||||
#include <gint/std/string.h>
|
||||
|
||||
#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<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;
|
||||
}
|
||||
//Collide with red block
|
||||
if(collide_dead(player_x, player_y, level))
|
||||
{
|
||||
vspd = 1;
|
||||
player_x = start_x;
|
||||
player_y = start_y;
|
||||
if (check_coin)
|
||||
coin--;
|
||||
if(check_coin) coin--;
|
||||
check_coin = 0;
|
||||
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);
|
||||
blackout = 0;
|
||||
check_nbswitch = 0;
|
||||
death_count++;
|
||||
double_check = 1;
|
||||
framelevel = 0;
|
||||
if (*id_level == 1 && !mode)
|
||||
frame = 0;
|
||||
if(*id_level == 1 && !mode)
|
||||
frame = 0;
|
||||
}
|
||||
// Collide with the end
|
||||
if (collide_end(player_x, player_y, level)) {
|
||||
if (!mode && *id_level != 0)
|
||||
*id_level += 1;
|
||||
else
|
||||
break;
|
||||
//Collide with the end
|
||||
if(collide_end(player_x, player_y, level))
|
||||
{
|
||||
if(!mode && *id_level !=0) *id_level+=1;
|
||||
else break;
|
||||
check_coin = 0;
|
||||
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;
|
||||
blackout = 0;
|
||||
double_check = 1;
|
||||
framelevel = 0;
|
||||
if (*id_level == 10 && *type == 1)
|
||||
*type = 2;
|
||||
else if (*type != 3)
|
||||
*type = 1;
|
||||
if (*id_level == LEVEL_MAX + 1) {
|
||||
framelevel=0;
|
||||
if(*id_level==10 && *type==1) *type = 2;
|
||||
else if(*type!=3) *type = 1;
|
||||
if(*id_level==LEVEL_MAX+1)
|
||||
{
|
||||
timer_stop(timer);
|
||||
end(frame);
|
||||
}
|
||||
}
|
||||
if (collide(player_x, player_y, level,
|
||||
'k')) // Collide with key1 = disappearance of blocks
|
||||
if(collide(player_x, player_y, level, 'k')) //Collide with key1 = disappearance of blocks
|
||||
{
|
||||
for (int i = 0; level[i] != '\0'; i++) {
|
||||
if (level[i] == '3')
|
||||
level[i] = '0';
|
||||
if (level[i] == 'k')
|
||||
level[i] = '0';
|
||||
for (int i = 0; level[i]!='\0' ; i++)
|
||||
{
|
||||
if(level[i]=='3') level[i]='0';
|
||||
if(level[i]=='k') level[i]='0';
|
||||
}
|
||||
}
|
||||
if (collide(player_x, player_y, level,
|
||||
'K')) // Collide with key2 = appearance of blocks
|
||||
if(collide(player_x, player_y, level, 'K')) //Collide with key2 = appearance of blocks
|
||||
{
|
||||
for (int i = 0; level[i] != '\0'; i++) {
|
||||
if (level[i] == 'a')
|
||||
level[i] = '4';
|
||||
if (level[i] == 'K')
|
||||
level[i] = '0';
|
||||
for (int i = 0; level[i]!='\0' ; i++)
|
||||
{
|
||||
if(level[i]=='a') level[i]='4';
|
||||
if(level[i]=='K') level[i]='0';
|
||||
}
|
||||
}
|
||||
if (collide(player_x, player_y, level, 't') &&
|
||||
!check_coin) // Collide with coin
|
||||
if(collide(player_x, player_y, level, 't') && !check_coin) //Collide with coin
|
||||
{
|
||||
for (int i = 0; level[i] != '\0'; i++) {
|
||||
if (level[i] == 't') {
|
||||
level[i] = '0';
|
||||
for (int i = 0; level[i]!='\0' ; i++)
|
||||
{
|
||||
if(level[i]=='t')
|
||||
{
|
||||
level[i]='0';
|
||||
break;
|
||||
}
|
||||
}
|
||||
check_coin = 1;
|
||||
check_coin=1;
|
||||
coin++;
|
||||
}
|
||||
if (collide(player_x, player_y, level,
|
||||
'b')) // Collide with blackout block
|
||||
if(collide(player_x, player_y, level, 'b')) //Collide with blackout block
|
||||
{
|
||||
for (int i = 0; level[i] != '\0'; i++) {
|
||||
if (level[i] == 'b') {
|
||||
level[i] = '0';
|
||||
for (int i = 0; level[i]!='\0' ; i++)
|
||||
{
|
||||
if(level[i]=='b')
|
||||
{
|
||||
level[i]='0';
|
||||
break;
|
||||
}
|
||||
}
|
||||
blackout = 1;
|
||||
blackout=1;
|
||||
}
|
||||
if (level[((player_x + 6) / 16) + ((player_y + 6) / 16) * 25] ==
|
||||
'l') // Collide with change block
|
||||
if(collide(player_x, player_y, level, 'z')) //Collide with nbswitch block
|
||||
{
|
||||
for (int i = 0; level[i]!='\0' ; i++)
|
||||
{
|
||||
if(level[i]=='z')
|
||||
{
|
||||
level[i]='0';
|
||||
}
|
||||
}
|
||||
check_nbswitch=1;
|
||||
}
|
||||
if(level[((player_x+6)/16)+((player_y+6)/16)*25] == 'l') //Collide with change block
|
||||
{
|
||||
int x = 0;
|
||||
int y = 0;
|
||||
char level2[351] = {0};
|
||||
char level2[351] = { 0 };
|
||||
int j = 0;
|
||||
level[((player_x + 6) / 16) +
|
||||
((player_y + 6) / 16) * 25] = 'P';
|
||||
for (int i = 349; i != -1; i--) {
|
||||
level2[j] = level[i];
|
||||
level[((player_x+6)/16)+((player_y+6)/16)*25] = 'P';
|
||||
for (int i = 349; i!=-1 ; i--)
|
||||
{
|
||||
level2[j]=level[i];
|
||||
j++;
|
||||
}
|
||||
del_level(level);
|
||||
strncpy(level, level2, 351);
|
||||
strncpy(level,level2,351);
|
||||
del_level(level2);
|
||||
int i = 0;
|
||||
while (i != 350) {
|
||||
switch (level[i]) {
|
||||
case 'P':
|
||||
player_x = x;
|
||||
player_y = y;
|
||||
level[i] = '0';
|
||||
break;
|
||||
while (i!=350)
|
||||
{
|
||||
switch(level[i])
|
||||
{
|
||||
case 'P':
|
||||
player_x = x;
|
||||
player_y = y;
|
||||
level[i]='0';
|
||||
break;
|
||||
}
|
||||
x += 16;
|
||||
if (x == 16 * 25) {
|
||||
x = 0;
|
||||
y += 16;
|
||||
x+=16;
|
||||
if(x==16*25)
|
||||
{
|
||||
x=0;
|
||||
y+=16;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
<<<<<<< HEAD
|
||||
if(!gravity) gravity=1;
|
||||
else gravity=0;
|
||||
chock++;
|
||||
=======
|
||||
if (!gravity)
|
||||
gravity = 1;
|
||||
else
|
||||
gravity = 0;
|
||||
>>>>>>> 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);
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
#include "define.h"
|
||||
#include "drawlevel.h"
|
||||
#include "save.h"
|
||||
#include <gint/display.h>
|
||||
#include <gint/keyboard.h>
|
||||
#include "setlevel.h"
|
||||
#include "times.h"
|
||||
#include <gint/display.h>
|
||||
#include "define.h"
|
||||
#include "save.h"
|
||||
#include <gint/gint.h>
|
||||
#include <gint/keyboard.h>
|
||||
|
||||
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;
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#include "define.h"
|
||||
#include "drawlevel.h"
|
||||
#include <gint/bfile.h>
|
||||
#include <gint/gint.h>
|
||||
#include "define.h"
|
||||
#include "drawlevel.h"
|
||||
#include <gint/keyboard.h>
|
||||
|
||||
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);
|
||||
|
|
Loading…
Reference in New Issue