Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- pico-8 shooter-jumper
- -- by lyoy
- grpactors={}
- grpenemies={}
- grpbullet={}
- grpparticles={}
- function create_level()
- level={}
- level.name=""
- level.trigger_start_pos={x=0,y=0}
- level.trigger_finish_pos={x=0,y=0}
- level.mapx=0
- level.mapy=0
- level.start_connection=level
- level.finish_connection=level
- level.limit_min=0
- level.limit_max=0
- return level
- end
- function create_perso(x,y)
- local perso = {}
- perso.x = x
- perso.y = y
- perso.dx = 0
- perso.dy = 0
- perso.f=0
- perso.jump= false
- perso.life=0
- perso.lifemax=0
- perso.hitbox ={x1=1,x2=6,y1=1,y2=7}
- perso.score=0
- perso.arme1=""
- perso.munition_arme1=0
- perso.arme2=""
- perso.munition_arme2=0
- perso.sprite = 1
- perso.checksolid=0
- perso.checkflag=true
- perso.inertie = 0.8
- perso.cooldown = 10
- perso.endormi=false
- perso.level=level
- perso.jump_cooldown =0
- perso.collision_left=true
- perso.collision_right=true
- perso.collision_up=true
- perso.collision_down=true
- perso.move_left=false
- perso.move_right=false
- perso.move_up=false
- perso.move_down=false
- perso.jumplevel =0
- perso.jumplimit =50
- perso.phitbox={leftx=0,lefty=4,rightx=7,righty=4,upx=3,upy=1,downleftx=4,downlefty=8,downrightx=4,downrighty=8 }
- perso.direction="right"
- perso.collision_enemi=false
- perso.tag=""
- perso.pieces=0
- add(grpactors,perso)
- return perso
- end
- function create_enemi(x,y)
- local enemi
- enemi = create_perso(x,y)
- enemi.sprite = flr(rnd(2))+2
- enemi.dx=0
- local random_direction
- random_direction = rnd(1,2)
- if(random_direction==1)then
- enemi.direction="left"
- else
- enemi.direction="right"
- end
- --enemi.direction="left"
- enemi.tag="enemi_type1"
- enemi.life=5
- enemi.level=lvl1
- enemi.phitbox={leftx=0,lefty=4,rightx=7,righty=4,upx=3,upy=1,downleftx=-1,downlefty=8,downrightx=8,downrighty=8 }
- add(grpenemies,enemi)
- return enemi
- end
- function create_bullet(x,y,speed)
- local bullet={}
- bullet.x = x
- bullet.y = y
- bullet.dx = 0
- bullet.dy = 0
- bullet.collision_right=false
- bullet.collision_left=false
- bullet.tag="bullet"
- bullet.hitbox={x1=1,x2=5,y1=4,y2=5}
- bullet.speed = speed
- bullet.sprite = 4
- bullet.phitbox={leftx=0,lefty=4,rightx=7,righty=4,upx=3,upy=1,downleftx=4,downlefty=8,downrightx=4,downrighty=8 }
- add(grpactors,bullet)
- return bullet
- end
- function change_level()
- if( abs(joueur.x-current_level.trigger_finish_pos.x)<8 and abs(joueur.y-current_level.trigger_finish_pos.y)<8 ) then
- if(current_level.finish_connection == "end") then
- _draw = score_draw
- _update = score_update
- else
- current_level=current_level.finish_connection
- joueur.x=current_level.trigger_start_pos.x+5
- joueur.y=current_level.trigger_start_pos.y
- end
- elseif (abs(joueur.x-current_level.trigger_start_pos.x)<8 and abs(joueur.y-current_level.trigger_start_pos.y)<8) then
- current_level=current_level.start_connection
- joueur.x=current_level.trigger_finish_pos.x-10
- joueur.y=current_level.trigger_finish_pos.y
- end
- enemi_statut()
- end
- function enemi_statut()
- for e in all(grpenemies) do
- if (current_level.name==e.level.name) then
- e.endormi=false
- else
- e.endormi=true
- end
- end
- end
- function game_init()
- music(0)
- damage_cooldown=10
- lvl1 = create_level()
- lvl1.name="niveau_1"
- lvl1.trigger_start_pos.x=10
- lvl1.trigger_start_pos.y=50
- lvl1.limit_min=0
- lvl1.limit_max=480
- lvl1.camy=0
- lvl1.trigger_finish_pos.x=600
- lvl1.trigger_finish_pos.y=88
- lvl2 = create_level()
- lvl2.name="niveau_2"
- lvl2.trigger_start_pos.x=610
- lvl2.trigger_start_pos.y=88
- lvl2.limit_min=608
- lvl2.limit_max=1016-120
- lvl2.camy=0
- lvl2.trigger_finish_pos.x=1016
- lvl2.trigger_finish_pos.y=88
- lvl3 = create_level()
- lvl3.name="niveau_3"
- lvl3.trigger_start_pos.x=0
- lvl3.trigger_start_pos.y=216
- lvl3.limit_min=0
- lvl3.limit_max=120-120
- lvl3.camy=128
- lvl3.trigger_finish_pos.x=120
- lvl3.trigger_finish_pos.y=216
- lvl4 = create_level()
- lvl4.name="niveau_4"
- lvl4.trigger_start_pos.x=128
- lvl4.trigger_start_pos.y=216
- lvl4.limit_min=128
- lvl4.limit_max=248-120
- lvl4.camy=128
- lvl4.trigger_finish_pos.x=248
- lvl4.trigger_finish_pos.y=136
- lvl5 = create_level()
- lvl5.name="niveau_5"
- lvl5.trigger_start_pos.x=256
- lvl5.trigger_start_pos.y=136
- lvl5.limit_min=256
- lvl5.limit_max=376-120
- lvl5.camy=128
- lvl5.trigger_finish_pos.x=376
- lvl5.trigger_finish_pos.y=160
- lvl6 = create_level()
- lvl6.name="niveau_6"
- lvl6.trigger_start_pos.x=384
- lvl6.trigger_start_pos.y=160
- lvl6.limit_min=384
- lvl6.limit_max=504-120
- lvl6.camy=128
- lvl6.trigger_finish_pos.x=504
- lvl6.trigger_finish_pos.y=200
- lvl7 = create_level()
- lvl7.name="niveau_7"
- lvl7.trigger_start_pos.x=64*8
- lvl7.trigger_start_pos.y=25*8
- lvl7.limit_min=64*8
- lvl7.limit_max=79*8-120
- lvl7.camy=128
- lvl7.trigger_finish_pos.x=79*8
- lvl7.trigger_finish_pos.y=21*8
- lvl8 = create_level()
- lvl8.name="niveau_8"
- lvl8.trigger_start_pos.x=80*8
- lvl8.trigger_start_pos.y=21*8
- lvl8.limit_min=80*8
- lvl8.limit_max=95*8-120
- lvl8.camy=128
- lvl8.trigger_finish_pos.x=95*8
- lvl8.trigger_finish_pos.y=17*8
- lvl9 = create_level()
- lvl9.name="niveau_9"
- lvl9.trigger_start_pos.x=96*8
- lvl9.trigger_start_pos.y=17*8
- lvl9.limit_min=96*8
- lvl9.limit_max=111*8-120
- lvl9.camy=128
- lvl9.trigger_finish_pos.x=111*8
- lvl9.trigger_finish_pos.y=27*8
- lvl10 = create_level()
- lvl10.name="niveau_10"
- lvl10.trigger_start_pos.x=112*8
- lvl10.trigger_start_pos.y=27*8
- lvl10.limit_min=112*8
- lvl10.limit_max=127*8-120
- lvl10.camy=128
- lvl10.trigger_finish_pos.x=126*8
- lvl10.trigger_finish_pos.y=17*8
- ----- connection level -----
- lvl1.finish_connection=lvl2
- lvl2.start_connection=lvl1
- lvl2.finish_connection=lvl3
- lvl3.start_connection=lvl2
- lvl3.finish_connection=lvl4
- lvl4.start_connection=lvl3
- lvl4.finish_connection=lvl5
- lvl5.start_connection=lvl4
- lvl5.finish_connection=lvl6
- lvl6.start_connection=lvl5
- lvl6.finish_connection=lvl7
- lvl7.start_connection=lvl6
- lvl7.finish_connection=lvl8
- lvl8.start_connection=lvl7
- lvl8.finish_connection=lvl9
- lvl9.start_connection=lvl8
- lvl9.finish_connection=lvl10
- lvl10.start_connection=lvl9
- lvl10.finish_connection="end"
- current_level=lvl1
- joueur = create_perso(1,40)
- joueur.sprite = 16
- joueur.y=current_level.trigger_start_pos.y
- joueur.x=current_level.trigger_start_pos.x
- joueur.dy=0
- joueur.f=0
- joueur.tag="player"
- joueur.munition_arme1=5
- joueur.life=100
- joueur.lifemax=joueur.life
- joueur.phitbox.upx=3
- joueur.phitbox.upy=1
- joueur.phitbox.rightx=7
- joueur.phitbox.righty=4
- joueur.phitbox.downrightx=4
- joueur.phitbox.downrighty=8
- joueur.phitbox.downleftx=4
- joueur.phitbox.downlefty=8
- joueur.phitbox.leftx=0
- joueur.phitbox.lefty=4
- --- generation enemi level 1 -----
- enemi0 = create_enemi(70,88)
- enemi0.direction="right"
- enemi0.tag="enemi_type1"
- enemi0.life=5
- enemi0.level=lvl1
- enemi1 = create_perso(11*8,8*8)
- enemi1.sprite = 2
- enemi1.dx=0
- enemi1.direction="left"
- enemi1.tag="enemi_type1"
- enemi1.life=5
- enemi1.level=lvl1
- enemi1.phitbox={leftx=0,lefty=4,rightx=7,righty=4,upx=3,upy=1,downleftx=-1,downlefty=8,downrightx=8,downrighty=8 }
- add(grpenemies,enemi1)
- enemi2 = create_perso(160,88)
- enemi2.sprite = 3
- enemi2.dx=0
- enemi2.direction="left"
- enemi2.tag="enemi_type1"
- enemi2.life=5
- enemi2.level=lvl1
- add(grpenemies,enemi2)
- enemi3 = create_perso(350,88)
- enemi3.sprite = 3
- enemi3.dx=0
- enemi3.direction="left"
- enemi3.tag="enemi_type1"
- enemi3.life=5
- enemi3.level=lvl1
- add(grpenemies,enemi3)
- enemi4 = create_perso(390,88)
- enemi4.sprite = 3
- enemi4.dx=0
- enemi4.direction="left"
- enemi4.tag="enemi_type1"
- enemi4.life=5
- enemi4.level=lvl1
- add(grpenemies,enemi4)
- enemi5 = create_perso(470,88)
- enemi5.sprite = 3
- enemi5.dx=0
- enemi5.direction="left"
- enemi5.tag="enemi_type1"
- enemi5.life=5
- enemi5.level=lvl1
- add(grpenemies,enemi5)
- enemi6 = create_perso(500,88)
- enemi6.sprite = 3
- enemi6.dx=0
- enemi6.direction="left"
- enemi6.tag="enemi_type1"
- enemi6.life=5
- enemi6.level=lvl1
- add(grpenemies,enemi6)
- enemi7 = create_perso(520,88)
- enemi7.sprite = 3
- enemi7.dx=0
- enemi7.direction="right"
- enemi7.tag="enemi_type1"
- enemi7.life=5
- enemi7.level=lvl1
- add(grpenemies,enemi7)
- enemi8 = create_perso(540,96)
- enemi8.sprite = 3
- enemi8.dx=0
- enemi8.direction="left"
- enemi8.tag="enemi_type1"
- enemi8.life=5
- enemi8.level=lvl1
- add(grpenemies,enemi8)
- --- generation enemi level 2 -----
- enemi9 = create_perso(81*8,11*8)
- enemi9.sprite = 3
- enemi9.dx=0
- enemi9.direction="left"
- enemi9.tag="enemi_type1"
- enemi9.life=5
- enemi9.level=lvl2
- enemi9.phitbox={leftx=0,lefty=4,rightx=7,righty=4,upx=3,upy=1,downleftx=-1,downlefty=8,downrightx=8,downrighty=8 }
- add(grpenemies,enemi9)
- enemi10 = create_perso(109*8,11*8)
- enemi10.sprite = 3
- enemi10.dx=0
- enemi10.direction="left"
- enemi10.tag="enemi_type1"
- enemi10.life=5
- enemi10.level=lvl2
- add(grpenemies,enemi10)
- --- generation enemi level3 -----
- enemi11 = create_perso(5*8,21*8)
- enemi11.sprite = 3
- enemi11.dx=0
- enemi11.direction="left"
- enemi11.tag="enemi_type1"
- enemi11.life=5
- enemi11.level=lvl3
- enemi11.phitbox={leftx=0,lefty=4,rightx=7,righty=4,upx=3,upy=1,downleftx=-1,downlefty=8,downrightx=8,downrighty=8 }
- add(grpenemies,enemi11)
- enemi12 = create_perso(10*8,17*8)
- enemi12.sprite = 3
- enemi12.dx=0
- enemi12.direction="left"
- enemi12.tag="enemi_type1"
- enemi12.life=5
- enemi12.level=lvl3
- add(grpenemies,enemi12)
- enemi13 = create_perso(11*8,27*8)
- enemi13.sprite = 3
- enemi13.dx=0
- enemi13.direction="left"
- enemi13.tag="enemi_type1"
- enemi13.life=5
- enemi13.level=lvl3
- add(grpenemies,enemi13)
- --- generation enemi level4 -----
- enemi14 = create_perso(25*8,26*8)
- enemi14.sprite = 3
- enemi14.dx=0
- enemi14.direction="left"
- enemi14.tag="enemi_type1"
- enemi14.life=5
- enemi14.level=lvl4
- add(grpenemies,enemi14)
- enemi15 = create_perso(23*8,18*8)
- enemi15.sprite = 3
- enemi15.dx=0
- enemi15.direction="left"
- enemi15.tag="enemi_type1"
- enemi15.life=5
- enemi15.level=lvl4
- add(grpenemies,enemi15)
- ----- generation enemi level5 -----
- enemi16 = create_perso(38*8,26*8)
- enemi16.sprite = 3
- enemi16.dx=0
- enemi16.direction="left"
- enemi16.tag="enemi_type1"
- enemi16.life=5
- enemi16.level=lvl5
- add(grpenemies,enemi16)
- enemi17 = create_perso(43*8,18*8)
- enemi17.sprite = 3
- enemi17.dx=0
- enemi17.direction="left"
- enemi17.tag="enemi_type1"
- enemi17.life=5
- enemi17.level=lvl5
- add(grpenemies,enemi17)
- ----- generation enemi level6 -----
- enemi18 = create_perso(58*8,17*8)
- enemi18.sprite = 3
- enemi18.dx=0
- enemi18.direction="left"
- enemi18.tag="enemi_type1"
- enemi18.life=5
- enemi18.level=lvl6
- add(grpenemies,enemi18)
- enemi19 = create_perso(58*8,27*8)
- enemi19.sprite = 3
- enemi19.dx=0
- enemi19.direction="left"
- enemi19.tag="enemi_type1"
- enemi19.life=5
- enemi19.level=lvl6
- add(grpenemies,enemi19)
- ----- generation enemi level7 -----
- enemi20 = create_perso(69*8,27*8)
- enemi20.sprite = 3
- enemi20.dx=0
- enemi20.direction="left"
- enemi20.tag="enemi_type1"
- enemi20.life=5
- enemi20.level=lvl7
- add(grpenemies,enemi20)
- ----- generation enemi level8 -----
- enemi21 = create_perso(83*8,27*8)
- enemi21.sprite = 3
- enemi21.dx=0
- enemi21.direction="right"
- enemi21.tag="enemi_type1"
- enemi21.life=5
- enemi21.level=lvl8
- add(grpenemies,enemi21)
- enemi22 = create_perso(90*8,27*8)
- enemi22.sprite = 3
- enemi22.dx=0
- enemi22.direction="left"
- enemi22.tag="enemi_type1"
- enemi22.life=5
- enemi22.level=lvl8
- add(grpenemies,enemi22)
- ----- generation enemi level9 -----
- enemi22 = create_perso(103*8,24*8)
- enemi22.sprite = 3
- enemi22.dx=0
- enemi22.direction="right"
- enemi22.tag="enemi_type1"
- enemi22.life=5
- enemi22.level=lvl9
- add(grpenemies,enemi22)
- enemi23 = create_perso(100*8,21*8)
- enemi23.sprite = 3
- enemi23.dx=0
- enemi23.direction="left"
- enemi23.tag="enemi_type1"
- enemi23.life=5
- enemi23.level=lvl9
- add(grpenemies,enemi23)
- ----- generation enemi level10 -----
- enemi23 = create_perso(117*8,27*8)
- enemi23.sprite = 3
- enemi23.dx=0
- enemi23.direction="right"
- enemi23.tag="enemi_type1"
- enemi23.life=5
- enemi23.level=lvl10
- add(grpenemies,enemi23)
- enemi24 = create_perso(124*8,27*8)
- enemi24.sprite = 3
- enemi24.dx=0
- enemi24.direction="left"
- enemi24.tag="enemi_type1"
- enemi24.life=5
- enemi24.level=lvl10
- add(grpenemies,enemi24)
- enemi_statut()
- end
- function create_particles(pos_x,pos_y,nb)
- while (nb>0) do
- local particle={}
- particle.x=pos_x+3
- particle.y=pos_y+5
- particle.dx=rnd(1)-1
- particle.dy=(rnd(2))
- particle.col=rnd(3)+7
- particle.f=0
- particle.lifetime=2
- add(grpparticles,particle)
- nb-=1
- end
- end
- function control_joueur(joueur)
- --joueur.y = abs((joueur.y)/8)*8
- joueur.dx =0
- joueur.move_left=false
- joueur.move_right=false
- --joueur.move_up=false
- --joueur.move_down=false
- --joueur.jump=false
- acceleration = 2
- if (btn(0) and joueur.collision_left==false)then
- joueur.dx =-1*acceleration
- joueur.direction="left"
- joueur.move_left=true
- else
- --joueur.dx=0
- --joueur.move_left=false
- end
- if (btn(1) and joueur.collision_right==false)then
- joueur.dx =1*acceleration
- joueur.direction="right"
- joueur.move_right=true
- else
- --joueur.dx=0
- --joueur.move_right=false
- end
- if ( joueur.jump_cooldown>10 and joueur.collision_down ) joueur.jump_cooldown =0
- if ( joueur.collision_down ) joueur.jump_cooldown =0
- if (btn(4) and joueur.collision_up==false ) then
- joueur.move_up=true
- --joueur.dy =-3
- if(joueur.jump_cooldown<10)then
- joueur.dy=-2
- joueur.jump_cooldown+=1
- elseif(joueur.move_right)then
- joueur.dy+=1
- elseif(joueur.move_left)then
- joueur.dy+=1
- else
- joueur.dy+=0.3
- end
- create_particles(joueur.x,joueur.y,5)
- else
- if(joueur.jump_collision_down and joueur.collision_right==false and joueur.collision_left==false)joueur.jump_cooldown=0
- --joueur.jump=false
- --joueur.move_up=false
- end
- if( btnp(4) and joueur.dy<0)then
- joueur.jump=true
- sfx(4)
- else
- joueur.jump=false
- end
- if ( joueur.cooldown>0 ) joueur.cooldown -=1
- if( joueur.cooldown==0 and btn(5) and joueur.munition_arme1>0) then
- sfx(2)
- joueur.munition_arme1=joueur.munition_arme1-1
- if(joueur.direction=="right")then
- bull = create_bullet(joueur.x+2,joueur.y,3)
- bull.dx = 3
- joueur.cooldown = 10
- elseif(joueur.direction=="left")then
- bull = create_bullet(joueur.x-2,joueur.y,3)
- bull.dx = -3
- joueur.cooldown = 10
- end
- elseif(btnp(5) and joueur.munition_arme1==0)then
- sfx(6)
- end
- end
- function getbox(x)
- local box={}
- box.x1 = x.x+x.hitbox.x1
- box.x2 = x.x+x.hitbox.x2
- box.y1 = x.y+x.hitbox.y1
- box.y2 = x.y+x.hitbox.y2
- return box
- end
- function check_collisions(a,b)
- if(a.tag == b.tag) then return false
- end
- local box_a = getbox(a)
- local box_b = getbox(b)
- if (box_a.x1>box_b.x2 or
- box_b.x1>box_a.x2 or
- box_a.y1>box_b.y2 or
- box_b.y1>box_a.y2) then
- return false
- end
- return true
- end
- function take_damage(x,nb)
- x.collision_enemi=true
- damage_cooldown-=1
- if(damage_cooldown==9) joueur.life-=nb
- if(damage_cooldown<0) damage_cooldown=10
- end
- function collisions()
- joueur.collision_enemi=false
- for a in all(grpactors) do
- solid(a)
- for b in all(grpactors) do
- if (check_collisions(a,b) == true) then
- if (a.tag=="player" and b.tag=="enemi_type1")then
- --a.life-=20
- sfx(1)
- take_damage(a,10)
- elseif(b.tag=="player" and a.tag=="enemi_type1")then
- --b.life-=20
- sfx(1)
- take_damage(b,10)
- elseif(a.tag=="bullet" and b.tag=="player")then
- --pas de degat--
- elseif(b.tag=="bullet" and a.tag=="player")then
- --pas de degat
- else
- sfx(1)
- del(grpactors,a)
- del(grpactors,b)
- joueur.score += 100
- create_particles(a.x,a.y,10)
- end
- end
- end
- end
- end
- function solid(a)
- ---- old method detection collision--
- x = a.x
- y = a.y
- local posa={}
- --posa.x=(x+3)/8
- --posa.y=(y+1)/8
- posa.x=(x+a.phitbox.upx)/8
- posa.y=(y+a.phitbox.upy)/8
- local posb={}
- --posb.x=(x+3)/8
- --posb.y=(y+1)/8
- posb.x=(x+a.phitbox.upx)/8
- posb.y=(y+a.phitbox.upy)/8
- local posc={}
- --posc.x=(x+7)/8
- --posc.y=(y+4)/8
- posc.x=(x+a.phitbox.rightx)/8
- posc.y=(y+a.phitbox.righty)/8
- local posd={}
- --posd.x=(x+7)/8
- --posd.y=(y+4)/8
- posd.x=(x+a.phitbox.rightx)/8
- posd.y=(y+a.phitbox.righty)/8
- local pose={}
- --pose.x=(x-1)/8
- --pose.y=(y+8)/8
- pose.x=(x+a.phitbox.downrightx)/8
- pose.y=(y+a.phitbox.downrighty)/8
- --pose.x=(x+8)/8
- --pose.y=(y+8)/8
- local posf={}
- --posf.x=(x+4)/8
- --posf.y=(y+8)/8
- posf.x=(x+a.phitbox.downleftx)/8
- posf.y=(y+a.phitbox.downlefty)/8
- --posf.x=(x-1)/8
- --posf.y=(y+8)/8
- local posg={}
- --posg.x=(x)/8
- --posg.y=(y+4)/8
- posg.x=(x+a.phitbox.leftx)/8
- posg.y=(y+a.phitbox.lefty)/8
- local posh={}
- --posh.x=(x)/8
- --posh.y=(y+4)/8
- posh.x=(x+a.phitbox.leftx)/8
- posh.y=(y+a.phitbox.lefty)/8
- ------------------------
- local poscenter={}
- poscenter.x=(x+4)/8
- poscenter.y=(y+4)/8
- local mgetposg=mget(posg.x,posg.y)
- local mgetposh=mget(posh.x,posh.y)
- local mgetposc=mget(posc.x,posc.y)
- local mgetposd=mget(posd.x,posd.y)
- local mgetposa=mget(posa.x,posa.y)
- local mgetposb=mget(posb.x,posb.y)
- local mgetpose=mget(pose.x,pose.y)
- local mgetposf=mget(posf.x,posf.y)
- local mgetposcenter=mget(poscenter.x,poscenter.y)
- if ( fget(mgetposg,0) or fget(mgetposh,0) ) then
- a.collision_left=true
- else
- a.collision_left=false
- end
- if( fget(mgetposc,0) or fget(mgetposd,0) ) then
- a.collision_right=true
- else
- a.collision_right=false
- end
- if( fget(mgetposa,0) or fget(mgetposb,0) ) then
- a.collision_up=true
- else
- a.collision_up=false
- end
- if( fget(mgetpose,0)==false or fget(mgetposf,0)==false ) then
- a.collision_down=false
- else
- a.collision_down=true
- end
- ---- collision piege -----
- if( fget(mgetposcenter,2) ) then
- if(a.tag=="player") then
- sfx(1)
- take_damage(a,10)
- end
- end
- ---- collision porte -----
- if( fget(mgetposb,1) or fget(mgetposc,1) ) then
- if(a.tag=="player") change_level()
- end
- ----- collision piece ----
- if( fget(mgetposcenter,3) ) then
- if(a.tag=="player") then
- sfx(5)
- joueur.score=joueur.score+1000
- joueur.pieces=joueur.pieces+1
- mset((joueur.x+4)/8,(joueur.y+4)/8,0)
- end
- end
- ----- collision vie coeur ----
- if( fget(mgetposcenter,4) ) then
- if(a.tag=="player") then
- sfx(5)
- joueur.life=joueur.life+50
- if(joueur.life>joueur.lifemax) joueur.life=joueur.lifemax
- mset((joueur.x+4)/8,(joueur.y+4)/8,0)
- end
- end
- ----- collision munition ----
- if( fget(mgetposcenter,5) ) then
- if(a.tag=="player") then
- sfx(5)
- joueur.munition_arme1=joueur.munition_arme1+5
- mset((joueur.x+4)/8,(joueur.y+4)/8,0)
- end
- end
- end
- function move()
- for a in all(grpactors) do
- if(a.tag=="enemi_type1" )then
- if(a.endormi==false)then
- if(a.collision_right)then
- a.direction="left"
- a.dx=-1
- elseif(a.collision_left)then
- a.direction="right"
- a.dx=1
- elseif(a.collision_down==false) then
- if(a.direction=="right")then
- a.direction="left"
- a.dx=-1
- elseif(a.direction=="left")then
- a.direction="right"
- a.dx=1
- end
- elseif(a.direction=="right")then
- a.dx=1
- elseif(a.direction=="left")then
- a.dx=-1
- end
- elseif(a.endormi)then
- a.dx=0
- end
- elseif (a.tag=="enemi_type2")then
- if(a==false)then
- --a.dx=-1
- elseif(a.collision_left)then
- --a.dx=1
- end
- elseif (a.tag=="bullet")then
- if(a.collision_right or a.collision_left)then
- del(grpactors,a)
- end
- end
- if (joueur.collision_down and joueur.dy>0 ) then
- joueur.y = flr((joueur.y)/8)*8
- joueur.dy=0
- elseif(joueur.collision_up and joueur.dy<0 ) then
- joueur.dy=0
- end
- a.x += a.dx
- a.y += a.dy
- --joueur.y = flr((joueur.y)/8)*8
- end
- animation_joueur()
- for p in all(grpparticles) do
- p.x += p.dx
- p.y += p.dy
- p.f += 1
- if (p.f>p.lifetime) then
- del(grpparticles,p)
- end
- end
- end
- function afficher_actors(perso)
- for perso in all(grpactors) do
- if(perso.direction=="right")then
- spr(perso.sprite,perso.x,perso.y,1,1,false)
- elseif(perso.direction=="left")then
- spr(perso.sprite,perso.x,perso.y,1,1,true)
- else
- spr(perso.sprite,perso.x,perso.y,1,1)
- end
- end
- for part in all(grpparticles) do
- pset(part.x,part.y,part.col)
- end
- if(joueur.collision_enemi==true) then
- pal(15,8,1)
- else
- pal()
- end
- end
- function animation_joueur()
- if(joueur.jump)then
- --joueur.sprite=18
- else
- --joueur.sprite=16
- end
- if(joueur.move_right or joueur.move_left) then
- joueur.sprite+=1
- elseif(joueur.jump)then
- joueur.sprite=18
- else
- joueur.sprite=16
- end
- if(joueur.move_left)then
- --joueur.sprite+=1
- else
- --joueur.sprite=16
- end
- if(joueur.sprite>20) joueur.sprite=16
- end
- function gravity()
- if (joueur.collision_down==false and joueur.jump==false) then
- joueur.dy+=0.3
- end
- if (joueur.dy>3) joueur.dy=3
- end
- function gameover()
- for a in all(grpactors) do
- del(grpactors,a)
- end
- for b in all(grpbullet)do
- del(grpbullet,b)
- end
- for c in all(grpparticles)do
- del(grpparticles,c)
- end
- _update = start_update
- _draw = start_draw
- end
- function game_update()
- collisions()
- control_joueur(joueur)
- if(joueur.life<=0) then
- gameover()
- end
- gravity()
- move()
- end
- function game_draw()
- cls()
- local cam_pos={}
- cam_pos.x=joueur.x-50
- cam_pos.y=current_level.camy
- if(cam_pos.x<current_level.limit_min)then
- cam_pos.x=current_level.limit_min
- elseif(cam_pos.x>current_level.limit_max)then
- cam_pos.x=current_level.limit_max
- else
- --cam_pos.x=joueur.x-50
- end
- camera(cam_pos.x,cam_pos.y)
- --camera(500,0)
- --map(0,16,0,0,16,16)
- map(0,0,0,0,128,30)
- afficher_actors()
- --[
- local px1=cam_pos.x
- local py1=cam_pos.y+105
- local px2=cam_pos.x+2
- local py2=cam_pos.y+107
- rectfill(0+cam_pos.x,105+cam_pos.y,128+cam_pos.x,128+cam_pos.y,5)
- rectfill(0+cam_pos.x+2,107+cam_pos.y,128+cam_pos.x-3,128-3+cam_pos.y,0)
- print("score:"..joueur.score, 5+cam_pos.x, 119+cam_pos.y,7)
- --print("health:"..joueur.life, 10+cam_pos.x, 120+cam_pos.y,7)
- local px1=cam_pos.x+5
- local py1=cam_pos.y+110
- local px2=cam_pos.x+50-45*(1-joueur.life/joueur.lifemax)
- local py2=cam_pos.y+113
- rectfill(px1-1,py1-1,cam_pos.x+51,py2+1,5)
- rectfill(px1,py1,cam_pos.x+50,py2,0)
- rectfill(px1,py1,px2,py2,8)
- rectfill(px1-1,py1+5,px1+46,py1+6,9)
- rectfill(px1-1,py1+5,(cam_pos.x+4)+4.8*(joueur.jump_cooldown),py1+6,7)
- local piece1=0
- local piece2=0
- local piece3=0
- if(joueur.pieces==1)then
- piece1=9
- piece2=0
- piece3=0
- elseif(joueur.pieces==2)then
- piece1=9
- piece2=9
- piece3=0
- elseif(joueur.pieces==3)then
- piece1=9
- piece2=9
- piece3=9
- end
- local mposenemie_downleft =fget(mget((enemi1.x-1)/8,(enemi1.y+8)/8),0)
- local mposenemie_downright =fget(mget((enemi1.x+8)/8,(enemi1.y+8)/8),0)
- local testcollision
- if ( mposenemie_downleft==false or mposenemie_downright==false)then
- testcollision=true
- else
- testcollision=false
- end
- circfill(px1+87,py1+6,5,5)
- circfill(px1+87,py1+6,4,piece1)
- circfill(px1+100,py1+6,5,5)
- circfill(px1+100,py1+6,4,piece2)
- circfill(px1+113,py1+6,5,5)
- circfill(px1+113,py1+6,4,piece3)
- spr(4,px1+50,py1-2)
- print(joueur.munition_arme1,px1+60,py1-1,6)
- --]]
- --[[
- ---- debug player data ---
- print(joueur.move_left, 10+cam_pos.x, 0+cam_pos.y,7)
- print(joueur.move_right, 40+cam_pos.x, 0+cam_pos.y,7)
- print(enemi9.collision_up, 10+cam_pos.x, 10+cam_pos.y,7)
- print(enemi9.collision_down, 40+cam_pos.x, 10+cam_pos.y,7)
- ----------------------------------
- print(mposenemie_downright, 90+cam_pos.x, cam_pos.y,7)
- print(joueur.jumplevel,70+cam_pos.x, cam_pos.y,7)
- print(joueur.jump_cooldown,80+cam_pos.x, 10+cam_pos.y,7)
- --]]
- end
- -----------------------------
- -----------------------------
- ----------- init ------------
- function _init()
- _update = start_update
- _draw = start_draw
- end
- function start_update()
- if(btnp(5)) then
- sfx(0)
- _update = game_update
- _draw = game_draw
- game_init()
- end
- t=t+1
- end
- t=0
- function start_draw()
- cls()
- map(0,48,0,0,16,16)
- camera(0,0)
- print("shooter-jumper",35,30,7)
- print("-----------------",30,35,1)
- print("\139\145:move",45,40,6)
- print("c:jump",50,47,6)
- print("\151:shoot",47,54,6)
- rectfill(0,sin(t/45)*5+95,128,sin(t/45)*5+110,0)
- print("\151 to start",40,sin(t/45)*5+100,8)
- end
- ----- score ------
- function score_draw()
- cls()
- camera(0,0)
- print("bravo",50,30)
- print("vous avez fini la demo",20,50)
- print("score : "..joueur.score,40,60)
- print("-----------------",30,70,1)
- print("\151 pour recommencer",25,75,6)
- end
- function score_update()
- if(btnp(5)) then
- sfx(0)
- gameover()
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement