Advertisement
lyoy

PICO-8-Shooter-Jumper-GameJam#3

Jan 3rd, 2017
260
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 25.37 KB | None | 0 0
  1. -- pico-8 shooter-jumper
  2. -- by lyoy
  3.  
  4.  
  5. grpactors={}
  6. grpenemies={}
  7. grpbullet={}
  8. grpparticles={}
  9.  
  10. function create_level()
  11.  
  12.     level={}
  13.     level.name=""
  14.     level.trigger_start_pos={x=0,y=0}
  15.     level.trigger_finish_pos={x=0,y=0}
  16.    
  17.     level.mapx=0
  18.     level.mapy=0
  19.     level.start_connection=level
  20.     level.finish_connection=level
  21.     level.limit_min=0
  22.     level.limit_max=0
  23.     return level
  24.    
  25. end
  26.  
  27.  
  28.  
  29.  
  30.  
  31. function create_perso(x,y)
  32.     local perso = {}
  33.     perso.x = x
  34.     perso.y = y
  35.     perso.dx = 0
  36.     perso.dy = 0
  37.     perso.f=0
  38.     perso.jump= false
  39.     perso.life=0
  40.     perso.lifemax=0
  41.     perso.hitbox ={x1=1,x2=6,y1=1,y2=7}
  42.     perso.score=0
  43.     perso.arme1=""
  44.     perso.munition_arme1=0
  45.     perso.arme2=""
  46.     perso.munition_arme2=0
  47.     perso.sprite = 1
  48.     perso.checksolid=0
  49.     perso.checkflag=true
  50.     perso.inertie = 0.8
  51.     perso.cooldown = 10
  52.     perso.endormi=false
  53.     perso.level=level
  54.     perso.jump_cooldown =0
  55.     perso.collision_left=true
  56.     perso.collision_right=true
  57.     perso.collision_up=true
  58.     perso.collision_down=true
  59.     perso.move_left=false
  60.     perso.move_right=false
  61.     perso.move_up=false
  62.     perso.move_down=false
  63.     perso.jumplevel =0
  64.     perso.jumplimit =50
  65.     perso.phitbox={leftx=0,lefty=4,rightx=7,righty=4,upx=3,upy=1,downleftx=4,downlefty=8,downrightx=4,downrighty=8 }
  66.     perso.direction="right"
  67.     perso.collision_enemi=false
  68.     perso.tag=""
  69.     perso.pieces=0
  70.     add(grpactors,perso)
  71.     return perso
  72. end
  73.  
  74.  
  75. function create_enemi(x,y)
  76.  
  77.     local enemi
  78.     enemi = create_perso(x,y)
  79.     enemi.sprite = flr(rnd(2))+2
  80.     enemi.dx=0
  81.     local random_direction
  82.     random_direction = rnd(1,2)
  83.     if(random_direction==1)then
  84.         enemi.direction="left"
  85.     else
  86.         enemi.direction="right"
  87.     end
  88.     --enemi.direction="left"
  89.     enemi.tag="enemi_type1"
  90.     enemi.life=5
  91.     enemi.level=lvl1
  92.     enemi.phitbox={leftx=0,lefty=4,rightx=7,righty=4,upx=3,upy=1,downleftx=-1,downlefty=8,downrightx=8,downrighty=8 }
  93.     add(grpenemies,enemi)
  94.     return enemi
  95.    
  96. end
  97.  
  98. function create_bullet(x,y,speed)
  99.  
  100.     local bullet={}
  101.     bullet.x = x
  102.     bullet.y = y
  103.     bullet.dx = 0
  104.     bullet.dy = 0
  105.     bullet.collision_right=false
  106.     bullet.collision_left=false
  107.     bullet.tag="bullet"
  108.  bullet.hitbox={x1=1,x2=5,y1=4,y2=5}
  109.     bullet.speed = speed
  110.     bullet.sprite = 4
  111.     bullet.phitbox={leftx=0,lefty=4,rightx=7,righty=4,upx=3,upy=1,downleftx=4,downlefty=8,downrightx=4,downrighty=8 }
  112.     add(grpactors,bullet)
  113.     return bullet
  114.  
  115. end
  116.  
  117. function change_level()
  118.  
  119.     if( abs(joueur.x-current_level.trigger_finish_pos.x)<8 and abs(joueur.y-current_level.trigger_finish_pos.y)<8 ) then
  120.    
  121.         if(current_level.finish_connection == "end") then
  122.        
  123.         _draw = score_draw
  124.         _update = score_update
  125.         else
  126.        
  127.         current_level=current_level.finish_connection
  128.         joueur.x=current_level.trigger_start_pos.x+5
  129.         joueur.y=current_level.trigger_start_pos.y
  130.         end
  131.        
  132.     elseif (abs(joueur.x-current_level.trigger_start_pos.x)<8 and abs(joueur.y-current_level.trigger_start_pos.y)<8) then
  133.         current_level=current_level.start_connection
  134.         joueur.x=current_level.trigger_finish_pos.x-10
  135.         joueur.y=current_level.trigger_finish_pos.y
  136.     end
  137.    
  138.     enemi_statut()
  139.    
  140. end
  141.  
  142. function enemi_statut()
  143.  
  144.     for e in all(grpenemies) do
  145.         if (current_level.name==e.level.name) then
  146.             e.endormi=false
  147.         else
  148.             e.endormi=true
  149.         end
  150.        
  151.     end
  152.  
  153. end
  154.  
  155.  
  156. function game_init()
  157.     music(0)
  158.     damage_cooldown=10
  159.    
  160.    
  161.    
  162.     lvl1 = create_level()
  163.     lvl1.name="niveau_1"
  164.    
  165.     lvl1.trigger_start_pos.x=10
  166.     lvl1.trigger_start_pos.y=50
  167.     lvl1.limit_min=0
  168.     lvl1.limit_max=480
  169.     lvl1.camy=0
  170.     lvl1.trigger_finish_pos.x=600
  171.     lvl1.trigger_finish_pos.y=88
  172.    
  173.  
  174.     lvl2 = create_level()
  175.     lvl2.name="niveau_2"
  176.     lvl2.trigger_start_pos.x=610
  177.     lvl2.trigger_start_pos.y=88
  178.     lvl2.limit_min=608
  179.     lvl2.limit_max=1016-120
  180.     lvl2.camy=0
  181.     lvl2.trigger_finish_pos.x=1016
  182.     lvl2.trigger_finish_pos.y=88
  183.    
  184.     lvl3 = create_level()
  185.     lvl3.name="niveau_3"
  186.     lvl3.trigger_start_pos.x=0
  187.     lvl3.trigger_start_pos.y=216
  188.     lvl3.limit_min=0
  189.     lvl3.limit_max=120-120
  190.     lvl3.camy=128
  191.     lvl3.trigger_finish_pos.x=120
  192.     lvl3.trigger_finish_pos.y=216
  193.    
  194.     lvl4 = create_level()
  195.     lvl4.name="niveau_4"
  196.     lvl4.trigger_start_pos.x=128
  197.     lvl4.trigger_start_pos.y=216
  198.     lvl4.limit_min=128
  199.     lvl4.limit_max=248-120
  200.     lvl4.camy=128
  201.     lvl4.trigger_finish_pos.x=248
  202.     lvl4.trigger_finish_pos.y=136
  203.    
  204.     lvl5 = create_level()
  205.     lvl5.name="niveau_5"
  206.     lvl5.trigger_start_pos.x=256
  207.     lvl5.trigger_start_pos.y=136
  208.     lvl5.limit_min=256
  209.     lvl5.limit_max=376-120
  210.     lvl5.camy=128
  211.     lvl5.trigger_finish_pos.x=376
  212.     lvl5.trigger_finish_pos.y=160
  213.    
  214.     lvl6 = create_level()
  215.     lvl6.name="niveau_6"
  216.     lvl6.trigger_start_pos.x=384
  217.     lvl6.trigger_start_pos.y=160
  218.     lvl6.limit_min=384
  219.     lvl6.limit_max=504-120
  220.     lvl6.camy=128
  221.     lvl6.trigger_finish_pos.x=504
  222.     lvl6.trigger_finish_pos.y=200
  223.    
  224.     lvl7 = create_level()
  225.     lvl7.name="niveau_7"
  226.     lvl7.trigger_start_pos.x=64*8
  227.     lvl7.trigger_start_pos.y=25*8
  228.     lvl7.limit_min=64*8
  229.     lvl7.limit_max=79*8-120
  230.     lvl7.camy=128
  231.     lvl7.trigger_finish_pos.x=79*8
  232.     lvl7.trigger_finish_pos.y=21*8
  233.    
  234.     lvl8 = create_level()
  235.     lvl8.name="niveau_8"
  236.     lvl8.trigger_start_pos.x=80*8
  237.     lvl8.trigger_start_pos.y=21*8
  238.     lvl8.limit_min=80*8
  239.     lvl8.limit_max=95*8-120
  240.     lvl8.camy=128
  241.     lvl8.trigger_finish_pos.x=95*8
  242.     lvl8.trigger_finish_pos.y=17*8
  243.    
  244.     lvl9 = create_level()
  245.     lvl9.name="niveau_9"
  246.     lvl9.trigger_start_pos.x=96*8
  247.     lvl9.trigger_start_pos.y=17*8
  248.     lvl9.limit_min=96*8
  249.     lvl9.limit_max=111*8-120
  250.     lvl9.camy=128
  251.     lvl9.trigger_finish_pos.x=111*8
  252.     lvl9.trigger_finish_pos.y=27*8
  253.    
  254.     lvl10 = create_level()
  255.     lvl10.name="niveau_10"
  256.     lvl10.trigger_start_pos.x=112*8
  257.     lvl10.trigger_start_pos.y=27*8
  258.     lvl10.limit_min=112*8
  259.     lvl10.limit_max=127*8-120
  260.     lvl10.camy=128
  261.     lvl10.trigger_finish_pos.x=126*8
  262.     lvl10.trigger_finish_pos.y=17*8
  263.    
  264.    
  265.  
  266.     ----- connection level -----
  267.     lvl1.finish_connection=lvl2
  268.     lvl2.start_connection=lvl1
  269.     lvl2.finish_connection=lvl3
  270.     lvl3.start_connection=lvl2
  271.     lvl3.finish_connection=lvl4
  272.     lvl4.start_connection=lvl3
  273.     lvl4.finish_connection=lvl5
  274.     lvl5.start_connection=lvl4
  275.     lvl5.finish_connection=lvl6
  276.     lvl6.start_connection=lvl5
  277.     lvl6.finish_connection=lvl7
  278.     lvl7.start_connection=lvl6
  279.     lvl7.finish_connection=lvl8
  280.     lvl8.start_connection=lvl7
  281.     lvl8.finish_connection=lvl9
  282.     lvl9.start_connection=lvl8
  283.     lvl9.finish_connection=lvl10
  284.     lvl10.start_connection=lvl9
  285.     lvl10.finish_connection="end"
  286.  
  287.     current_level=lvl1
  288.    
  289.  
  290.     joueur = create_perso(1,40)
  291.     joueur.sprite = 16
  292.     joueur.y=current_level.trigger_start_pos.y
  293.     joueur.x=current_level.trigger_start_pos.x
  294.     joueur.dy=0
  295.     joueur.f=0
  296.     joueur.tag="player"
  297.     joueur.munition_arme1=5
  298.     joueur.life=100
  299.     joueur.lifemax=joueur.life
  300.     joueur.phitbox.upx=3
  301.     joueur.phitbox.upy=1
  302.     joueur.phitbox.rightx=7
  303.     joueur.phitbox.righty=4
  304.     joueur.phitbox.downrightx=4
  305.     joueur.phitbox.downrighty=8
  306.     joueur.phitbox.downleftx=4
  307.     joueur.phitbox.downlefty=8
  308.     joueur.phitbox.leftx=0
  309.     joueur.phitbox.lefty=4
  310.  
  311.  
  312. --- generation enemi level 1 -----
  313.  
  314.     enemi0 = create_enemi(70,88)
  315.     enemi0.direction="right"
  316.     enemi0.tag="enemi_type1"
  317.     enemi0.life=5
  318.     enemi0.level=lvl1
  319.    
  320.    
  321.     enemi1 = create_perso(11*8,8*8)
  322.     enemi1.sprite = 2
  323.     enemi1.dx=0
  324.     enemi1.direction="left"
  325.     enemi1.tag="enemi_type1"
  326.     enemi1.life=5
  327.     enemi1.level=lvl1
  328.     enemi1.phitbox={leftx=0,lefty=4,rightx=7,righty=4,upx=3,upy=1,downleftx=-1,downlefty=8,downrightx=8,downrighty=8 }
  329.     add(grpenemies,enemi1)
  330.    
  331.     enemi2 = create_perso(160,88)
  332.     enemi2.sprite = 3
  333.     enemi2.dx=0
  334.     enemi2.direction="left"
  335.     enemi2.tag="enemi_type1"
  336.     enemi2.life=5
  337.     enemi2.level=lvl1
  338.     add(grpenemies,enemi2)
  339.    
  340.     enemi3 = create_perso(350,88)
  341.     enemi3.sprite = 3
  342.     enemi3.dx=0
  343.     enemi3.direction="left"
  344.     enemi3.tag="enemi_type1"
  345.     enemi3.life=5
  346.     enemi3.level=lvl1
  347.     add(grpenemies,enemi3)
  348.    
  349.     enemi4 = create_perso(390,88)
  350.     enemi4.sprite = 3
  351.     enemi4.dx=0
  352.     enemi4.direction="left"
  353.     enemi4.tag="enemi_type1"
  354.     enemi4.life=5
  355.     enemi4.level=lvl1
  356.     add(grpenemies,enemi4)
  357.    
  358.     enemi5 = create_perso(470,88)
  359.     enemi5.sprite = 3
  360.     enemi5.dx=0
  361.     enemi5.direction="left"
  362.     enemi5.tag="enemi_type1"
  363.     enemi5.life=5
  364.     enemi5.level=lvl1
  365.     add(grpenemies,enemi5)
  366.    
  367.     enemi6 = create_perso(500,88)
  368.     enemi6.sprite = 3
  369.     enemi6.dx=0
  370.     enemi6.direction="left"
  371.     enemi6.tag="enemi_type1"
  372.     enemi6.life=5
  373.     enemi6.level=lvl1
  374.     add(grpenemies,enemi6)
  375.    
  376.     enemi7 = create_perso(520,88)
  377.     enemi7.sprite = 3
  378.     enemi7.dx=0
  379.     enemi7.direction="right"
  380.     enemi7.tag="enemi_type1"
  381.     enemi7.life=5
  382.     enemi7.level=lvl1
  383.     add(grpenemies,enemi7)
  384.    
  385.     enemi8 = create_perso(540,96)
  386.     enemi8.sprite = 3
  387.     enemi8.dx=0
  388.     enemi8.direction="left"
  389.     enemi8.tag="enemi_type1"
  390.     enemi8.life=5
  391.     enemi8.level=lvl1
  392.     add(grpenemies,enemi8)
  393.  
  394. --- generation enemi level 2 -----
  395.    
  396.     enemi9 = create_perso(81*8,11*8)
  397.     enemi9.sprite = 3
  398.     enemi9.dx=0
  399.     enemi9.direction="left"
  400.     enemi9.tag="enemi_type1"
  401.     enemi9.life=5
  402.     enemi9.level=lvl2
  403.     enemi9.phitbox={leftx=0,lefty=4,rightx=7,righty=4,upx=3,upy=1,downleftx=-1,downlefty=8,downrightx=8,downrighty=8 }
  404.     add(grpenemies,enemi9)
  405.    
  406.     enemi10 = create_perso(109*8,11*8)
  407.     enemi10.sprite = 3
  408.     enemi10.dx=0
  409.     enemi10.direction="left"
  410.     enemi10.tag="enemi_type1"
  411.     enemi10.life=5
  412.     enemi10.level=lvl2
  413.     add(grpenemies,enemi10)
  414.    
  415.     --- generation enemi level3 -----
  416.    
  417.     enemi11 = create_perso(5*8,21*8)
  418.     enemi11.sprite = 3
  419.     enemi11.dx=0
  420.     enemi11.direction="left"
  421.     enemi11.tag="enemi_type1"
  422.     enemi11.life=5
  423.     enemi11.level=lvl3
  424.     enemi11.phitbox={leftx=0,lefty=4,rightx=7,righty=4,upx=3,upy=1,downleftx=-1,downlefty=8,downrightx=8,downrighty=8 }
  425.     add(grpenemies,enemi11)
  426.    
  427.     enemi12 = create_perso(10*8,17*8)
  428.     enemi12.sprite = 3
  429.     enemi12.dx=0
  430.     enemi12.direction="left"
  431.     enemi12.tag="enemi_type1"
  432.     enemi12.life=5
  433.     enemi12.level=lvl3
  434.     add(grpenemies,enemi12)
  435.    
  436.     enemi13 = create_perso(11*8,27*8)
  437.     enemi13.sprite = 3
  438.     enemi13.dx=0
  439.     enemi13.direction="left"
  440.     enemi13.tag="enemi_type1"
  441.     enemi13.life=5
  442.     enemi13.level=lvl3
  443.     add(grpenemies,enemi13)
  444.    
  445.     --- generation enemi level4 -----
  446.    
  447.     enemi14 = create_perso(25*8,26*8)
  448.     enemi14.sprite = 3
  449.     enemi14.dx=0
  450.     enemi14.direction="left"
  451.     enemi14.tag="enemi_type1"
  452.     enemi14.life=5
  453.     enemi14.level=lvl4
  454.     add(grpenemies,enemi14)
  455.    
  456.     enemi15 = create_perso(23*8,18*8)
  457.     enemi15.sprite = 3
  458.     enemi15.dx=0
  459.     enemi15.direction="left"
  460.     enemi15.tag="enemi_type1"
  461.     enemi15.life=5
  462.     enemi15.level=lvl4
  463.     add(grpenemies,enemi15)
  464.    
  465.     ----- generation enemi level5 -----
  466.    
  467.     enemi16 = create_perso(38*8,26*8)
  468.     enemi16.sprite = 3
  469.     enemi16.dx=0
  470.     enemi16.direction="left"
  471.     enemi16.tag="enemi_type1"
  472.     enemi16.life=5
  473.     enemi16.level=lvl5
  474.     add(grpenemies,enemi16)
  475.    
  476.     enemi17 = create_perso(43*8,18*8)
  477.     enemi17.sprite = 3
  478.     enemi17.dx=0
  479.     enemi17.direction="left"
  480.     enemi17.tag="enemi_type1"
  481.     enemi17.life=5
  482.     enemi17.level=lvl5
  483.     add(grpenemies,enemi17)
  484.    
  485.     ----- generation enemi level6 -----
  486.    
  487.     enemi18 = create_perso(58*8,17*8)
  488.     enemi18.sprite = 3
  489.     enemi18.dx=0
  490.     enemi18.direction="left"
  491.     enemi18.tag="enemi_type1"
  492.     enemi18.life=5
  493.     enemi18.level=lvl6
  494.     add(grpenemies,enemi18)
  495.    
  496.     enemi19 = create_perso(58*8,27*8)
  497.     enemi19.sprite = 3
  498.     enemi19.dx=0
  499.     enemi19.direction="left"
  500.     enemi19.tag="enemi_type1"
  501.     enemi19.life=5
  502.     enemi19.level=lvl6
  503.     add(grpenemies,enemi19)
  504.    
  505.     ----- generation enemi level7 -----
  506.    
  507.     enemi20 = create_perso(69*8,27*8)
  508.     enemi20.sprite = 3
  509.     enemi20.dx=0
  510.     enemi20.direction="left"
  511.     enemi20.tag="enemi_type1"
  512.     enemi20.life=5
  513.     enemi20.level=lvl7
  514.     add(grpenemies,enemi20)
  515.    
  516.     ----- generation enemi level8 -----
  517.    
  518.     enemi21 = create_perso(83*8,27*8)
  519.     enemi21.sprite = 3
  520.     enemi21.dx=0
  521.     enemi21.direction="right"
  522.     enemi21.tag="enemi_type1"
  523.     enemi21.life=5
  524.     enemi21.level=lvl8
  525.     add(grpenemies,enemi21)
  526.    
  527.     enemi22 = create_perso(90*8,27*8)
  528.     enemi22.sprite = 3
  529.     enemi22.dx=0
  530.     enemi22.direction="left"
  531.     enemi22.tag="enemi_type1"
  532.     enemi22.life=5
  533.     enemi22.level=lvl8
  534.     add(grpenemies,enemi22)
  535.    
  536.     ----- generation enemi level9 -----
  537.    
  538.     enemi22 = create_perso(103*8,24*8)
  539.     enemi22.sprite = 3
  540.     enemi22.dx=0
  541.     enemi22.direction="right"
  542.     enemi22.tag="enemi_type1"
  543.     enemi22.life=5
  544.     enemi22.level=lvl9
  545.     add(grpenemies,enemi22)
  546.    
  547.     enemi23 = create_perso(100*8,21*8)
  548.     enemi23.sprite = 3
  549.     enemi23.dx=0
  550.     enemi23.direction="left"
  551.     enemi23.tag="enemi_type1"
  552.     enemi23.life=5
  553.     enemi23.level=lvl9
  554.     add(grpenemies,enemi23)
  555.    
  556.     ----- generation enemi level10 -----
  557.    
  558.     enemi23 = create_perso(117*8,27*8)
  559.     enemi23.sprite = 3
  560.     enemi23.dx=0
  561.     enemi23.direction="right"
  562.     enemi23.tag="enemi_type1"
  563.     enemi23.life=5
  564.     enemi23.level=lvl10
  565.     add(grpenemies,enemi23)
  566.    
  567.     enemi24 = create_perso(124*8,27*8)
  568.     enemi24.sprite = 3
  569.     enemi24.dx=0
  570.     enemi24.direction="left"
  571.     enemi24.tag="enemi_type1"
  572.     enemi24.life=5
  573.     enemi24.level=lvl10
  574.     add(grpenemies,enemi24)
  575.    
  576.    
  577.     enemi_statut()
  578.    
  579. end
  580.  
  581. function create_particles(pos_x,pos_y,nb)
  582.  
  583.     while (nb>0) do
  584.    
  585.         local particle={}
  586.         particle.x=pos_x+3
  587.         particle.y=pos_y+5
  588.         particle.dx=rnd(1)-1
  589.         particle.dy=(rnd(2))
  590.         particle.col=rnd(3)+7
  591.         particle.f=0
  592.         particle.lifetime=2
  593.         add(grpparticles,particle)
  594.         nb-=1
  595.    
  596.     end
  597.  
  598. end
  599.  
  600.  
  601. function control_joueur(joueur)
  602.    
  603.    
  604.     --joueur.y = abs((joueur.y)/8)*8
  605.     joueur.dx =0
  606.     joueur.move_left=false
  607.     joueur.move_right=false
  608.     --joueur.move_up=false
  609.     --joueur.move_down=false
  610.     --joueur.jump=false
  611.    
  612.    
  613.    
  614.    
  615.     acceleration = 2
  616.    
  617.     if (btn(0) and joueur.collision_left==false)then
  618.         joueur.dx =-1*acceleration
  619.         joueur.direction="left"
  620.         joueur.move_left=true
  621.     else
  622.         --joueur.dx=0
  623.         --joueur.move_left=false
  624.     end
  625.    
  626.     if (btn(1) and joueur.collision_right==false)then  
  627.         joueur.dx =1*acceleration
  628.         joueur.direction="right"
  629.         joueur.move_right=true
  630.     else
  631.         --joueur.dx=0
  632.         --joueur.move_right=false
  633.     end
  634.    
  635.     if ( joueur.jump_cooldown>10 and joueur.collision_down ) joueur.jump_cooldown =0
  636.     if ( joueur.collision_down ) joueur.jump_cooldown =0
  637.     if (btn(4)  and joueur.collision_up==false  ) then
  638.         joueur.move_up=true
  639.        
  640.         --joueur.dy  =-3
  641.         if(joueur.jump_cooldown<10)then
  642.             joueur.dy=-2
  643.             joueur.jump_cooldown+=1
  644.         elseif(joueur.move_right)then
  645.             joueur.dy+=1
  646.         elseif(joueur.move_left)then
  647.             joueur.dy+=1
  648.         else
  649.             joueur.dy+=0.3
  650.         end
  651.        
  652.        
  653.         create_particles(joueur.x,joueur.y,5)
  654.         else
  655.             if(joueur.jump_collision_down and joueur.collision_right==false and joueur.collision_left==false)joueur.jump_cooldown=0
  656.        
  657.         --joueur.jump=false
  658.         --joueur.move_up=false
  659.     end
  660.    
  661.    
  662.     if( btnp(4) and joueur.dy<0)then
  663.         joueur.jump=true
  664.         sfx(4)
  665.     else
  666.         joueur.jump=false
  667.     end
  668.    
  669.  
  670.     if ( joueur.cooldown>0 ) joueur.cooldown -=1
  671.    
  672.     if( joueur.cooldown==0 and btn(5) and joueur.munition_arme1>0) then
  673.             sfx(2)
  674.             joueur.munition_arme1=joueur.munition_arme1-1
  675.             if(joueur.direction=="right")then
  676.                 bull = create_bullet(joueur.x+2,joueur.y,3)
  677.                 bull.dx = 3
  678.                 joueur.cooldown = 10
  679.             elseif(joueur.direction=="left")then
  680.                 bull = create_bullet(joueur.x-2,joueur.y,3)
  681.                 bull.dx = -3
  682.                 joueur.cooldown = 10
  683.             end
  684.     elseif(btnp(5) and joueur.munition_arme1==0)then
  685.         sfx(6)
  686.            
  687.     end
  688.    
  689.        
  690. end
  691.  
  692. function getbox(x)
  693.  
  694.     local box={}
  695.     box.x1 = x.x+x.hitbox.x1
  696.     box.x2 = x.x+x.hitbox.x2
  697.     box.y1 = x.y+x.hitbox.y1
  698.     box.y2 = x.y+x.hitbox.y2
  699.     return box
  700.    
  701.  
  702. end
  703.  
  704. function check_collisions(a,b)
  705.  
  706.     if(a.tag == b.tag) then return false
  707.     end
  708.    
  709.     local box_a = getbox(a)
  710.     local box_b = getbox(b)
  711.    
  712.    
  713.     if (box_a.x1>box_b.x2 or
  714.                     box_b.x1>box_a.x2 or
  715.                     box_a.y1>box_b.y2 or
  716.                     box_b.y1>box_a.y2) then
  717.                     return false
  718.     end
  719.    
  720.     return true
  721.  
  722.    
  723. end
  724.  
  725.  
  726. function take_damage(x,nb)
  727.  
  728.  x.collision_enemi=true
  729.     damage_cooldown-=1
  730.     if(damage_cooldown==9) joueur.life-=nb
  731.     if(damage_cooldown<0) damage_cooldown=10
  732.    
  733.  
  734. end
  735.  
  736. function collisions()
  737.    
  738.     joueur.collision_enemi=false
  739.     for a in all(grpactors) do
  740.         solid(a)
  741.        
  742.         for b in all(grpactors) do
  743.             if (check_collisions(a,b) == true) then
  744.                            
  745.                            
  746.                            
  747.                             if (a.tag=="player" and b.tag=="enemi_type1")then
  748.                                  --a.life-=20
  749.                                  sfx(1)
  750.                                  take_damage(a,10)
  751.                                  
  752.                             elseif(b.tag=="player" and a.tag=="enemi_type1")then
  753.                                     --b.life-=20
  754.                                     sfx(1)
  755.                                     take_damage(b,10)
  756.                             elseif(a.tag=="bullet" and b.tag=="player")then
  757.                                 --pas de degat--
  758.                             elseif(b.tag=="bullet" and a.tag=="player")then
  759.                                 --pas de degat
  760.                             else
  761.                                 sfx(1)
  762.                                 del(grpactors,a)
  763.                                 del(grpactors,b)
  764.                                 joueur.score += 100
  765.                                 create_particles(a.x,a.y,10)
  766.                             end
  767.             end
  768.         end
  769.     end
  770. end
  771.  
  772. function solid(a)
  773.    
  774.     ---- old method detection collision--
  775.     x = a.x
  776.     y = a.y
  777.    
  778.     local posa={}
  779.     --posa.x=(x+3)/8
  780.     --posa.y=(y+1)/8
  781.     posa.x=(x+a.phitbox.upx)/8
  782.     posa.y=(y+a.phitbox.upy)/8
  783.    
  784.     local posb={}
  785.     --posb.x=(x+3)/8
  786.     --posb.y=(y+1)/8
  787.     posb.x=(x+a.phitbox.upx)/8
  788.     posb.y=(y+a.phitbox.upy)/8
  789.    
  790.     local posc={}
  791.     --posc.x=(x+7)/8
  792.     --posc.y=(y+4)/8
  793.     posc.x=(x+a.phitbox.rightx)/8
  794.     posc.y=(y+a.phitbox.righty)/8
  795.    
  796.     local posd={}
  797.     --posd.x=(x+7)/8
  798.     --posd.y=(y+4)/8
  799.     posd.x=(x+a.phitbox.rightx)/8
  800.     posd.y=(y+a.phitbox.righty)/8
  801.    
  802.     local pose={}
  803.     --pose.x=(x-1)/8
  804.     --pose.y=(y+8)/8
  805.     pose.x=(x+a.phitbox.downrightx)/8
  806.     pose.y=(y+a.phitbox.downrighty)/8
  807.     --pose.x=(x+8)/8
  808.     --pose.y=(y+8)/8
  809.     local posf={}
  810.     --posf.x=(x+4)/8
  811.     --posf.y=(y+8)/8
  812.     posf.x=(x+a.phitbox.downleftx)/8
  813.     posf.y=(y+a.phitbox.downlefty)/8
  814.     --posf.x=(x-1)/8
  815.     --posf.y=(y+8)/8
  816.     local posg={}
  817.     --posg.x=(x)/8
  818.     --posg.y=(y+4)/8
  819.     posg.x=(x+a.phitbox.leftx)/8
  820.     posg.y=(y+a.phitbox.lefty)/8
  821.    
  822.     local posh={}
  823.     --posh.x=(x)/8
  824.     --posh.y=(y+4)/8
  825.     posh.x=(x+a.phitbox.leftx)/8
  826.     posh.y=(y+a.phitbox.lefty)/8
  827.    
  828.     ------------------------
  829.    
  830.    
  831.    
  832.     local poscenter={}
  833.     poscenter.x=(x+4)/8
  834.     poscenter.y=(y+4)/8
  835.    
  836.    
  837.    
  838.    
  839.      
  840.     local mgetposg=mget(posg.x,posg.y)
  841.     local mgetposh=mget(posh.x,posh.y)
  842.     local mgetposc=mget(posc.x,posc.y)
  843.     local mgetposd=mget(posd.x,posd.y)
  844.     local mgetposa=mget(posa.x,posa.y)
  845.     local mgetposb=mget(posb.x,posb.y)
  846.     local mgetpose=mget(pose.x,pose.y)
  847.     local mgetposf=mget(posf.x,posf.y)
  848.     local mgetposcenter=mget(poscenter.x,poscenter.y)
  849.    
  850.     if ( fget(mgetposg,0) or fget(mgetposh,0) ) then
  851.         a.collision_left=true
  852.         else
  853.         a.collision_left=false
  854.     end
  855.     if( fget(mgetposc,0) or fget(mgetposd,0) ) then
  856.         a.collision_right=true
  857.         else
  858.         a.collision_right=false
  859.     end
  860.     if( fget(mgetposa,0) or fget(mgetposb,0) ) then
  861.  
  862.         a.collision_up=true
  863.         else
  864.         a.collision_up=false
  865.     end
  866.     if( fget(mgetpose,0)==false or fget(mgetposf,0)==false ) then
  867.  
  868.         a.collision_down=false
  869.         else
  870.         a.collision_down=true
  871.     end
  872.    
  873.     ---- collision piege -----
  874.    
  875.     if( fget(mgetposcenter,2) ) then
  876.         if(a.tag=="player") then
  877.             sfx(1)
  878.             take_damage(a,10)
  879.         end
  880.        
  881.     end
  882.    
  883.     ---- collision porte -----
  884.    
  885.     if( fget(mgetposb,1) or fget(mgetposc,1) ) then
  886.         if(a.tag=="player") change_level()
  887.        
  888.     end
  889.    
  890.     ----- collision piece ----
  891.    
  892.     if( fget(mgetposcenter,3) ) then
  893.         if(a.tag=="player") then
  894.         sfx(5)
  895.         joueur.score=joueur.score+1000
  896.         joueur.pieces=joueur.pieces+1
  897.         mset((joueur.x+4)/8,(joueur.y+4)/8,0)
  898.         end
  899.     end
  900.    
  901.     ----- collision vie coeur ----
  902.    
  903.     if( fget(mgetposcenter,4) ) then
  904.         if(a.tag=="player") then
  905.         sfx(5)
  906.         joueur.life=joueur.life+50
  907.         if(joueur.life>joueur.lifemax) joueur.life=joueur.lifemax
  908.        
  909.         mset((joueur.x+4)/8,(joueur.y+4)/8,0)
  910.         end
  911.     end
  912.    
  913.     ----- collision munition ----
  914.    
  915.     if( fget(mgetposcenter,5) ) then
  916.         if(a.tag=="player") then
  917.         sfx(5)
  918.         joueur.munition_arme1=joueur.munition_arme1+5
  919.        
  920.         mset((joueur.x+4)/8,(joueur.y+4)/8,0)
  921.         end
  922.     end
  923.      
  924. end
  925.  
  926.  
  927.  
  928. function move()
  929.  
  930.    
  931.        
  932.    
  933.         for a in all(grpactors) do
  934.            
  935.             if(a.tag=="enemi_type1" )then
  936.            
  937.                 if(a.endormi==false)then
  938.                         if(a.collision_right)then
  939.                             a.direction="left"
  940.                             a.dx=-1
  941.                         elseif(a.collision_left)then
  942.                             a.direction="right"
  943.                             a.dx=1
  944.                         elseif(a.collision_down==false) then
  945.                             if(a.direction=="right")then
  946.                                 a.direction="left"
  947.                                 a.dx=-1
  948.                             elseif(a.direction=="left")then
  949.                                 a.direction="right"
  950.                                 a.dx=1
  951.                             end
  952.                         elseif(a.direction=="right")then
  953.                             a.dx=1
  954.                         elseif(a.direction=="left")then
  955.                             a.dx=-1
  956.                        
  957.                         end
  958.                 elseif(a.endormi)then
  959.                     a.dx=0
  960.                 end
  961.             elseif (a.tag=="enemi_type2")then
  962.                     if(a==false)then
  963.                         --a.dx=-1
  964.                     elseif(a.collision_left)then
  965.                         --a.dx=1
  966.                     end
  967.             elseif (a.tag=="bullet")then
  968.                     if(a.collision_right or a.collision_left)then
  969.                         del(grpactors,a)
  970.                     end
  971.             end
  972.    
  973.             if (joueur.collision_down and joueur.dy>0 ) then
  974.                 joueur.y = flr((joueur.y)/8)*8
  975.                 joueur.dy=0
  976.             elseif(joueur.collision_up and joueur.dy<0 ) then
  977.                 joueur.dy=0
  978.            
  979.             end
  980.            
  981.            
  982.        
  983.        
  984.        
  985.        
  986.         a.x += a.dx
  987.         a.y += a.dy
  988.         --joueur.y = flr((joueur.y)/8)*8
  989.        
  990.     end
  991.    
  992.     animation_joueur()
  993.  
  994.     for p in all(grpparticles) do
  995.             p.x += p.dx
  996.             p.y += p.dy
  997.             p.f += 1
  998.             if (p.f>p.lifetime) then
  999.                 del(grpparticles,p)
  1000.             end
  1001.            
  1002.     end
  1003.    
  1004.  
  1005. end
  1006.  
  1007. function afficher_actors(perso)
  1008.  
  1009.     for perso in all(grpactors) do
  1010.         if(perso.direction=="right")then
  1011.             spr(perso.sprite,perso.x,perso.y,1,1,false)
  1012.         elseif(perso.direction=="left")then
  1013.             spr(perso.sprite,perso.x,perso.y,1,1,true)
  1014.             else
  1015.             spr(perso.sprite,perso.x,perso.y,1,1)
  1016.         end
  1017.        
  1018.        
  1019.        
  1020.     end
  1021.    
  1022.     for part in all(grpparticles) do
  1023.    
  1024.         pset(part.x,part.y,part.col)
  1025.        
  1026.     end
  1027.    
  1028.     if(joueur.collision_enemi==true) then
  1029.        
  1030.         pal(15,8,1)
  1031.         else
  1032.         pal()
  1033.     end
  1034.    
  1035.  
  1036. end
  1037.  
  1038. function animation_joueur()
  1039.  
  1040.     if(joueur.jump)then
  1041.         --joueur.sprite=18
  1042.         else
  1043.         --joueur.sprite=16
  1044.     end
  1045.    
  1046.     if(joueur.move_right or joueur.move_left)   then
  1047.         joueur.sprite+=1
  1048.     elseif(joueur.jump)then
  1049.         joueur.sprite=18
  1050.     else
  1051.         joueur.sprite=16
  1052.     end
  1053.    
  1054.    
  1055.    
  1056.     if(joueur.move_left)then
  1057.         --joueur.sprite+=1
  1058.     else
  1059.         --joueur.sprite=16
  1060.    
  1061.     end
  1062.    
  1063.     if(joueur.sprite>20) joueur.sprite=16
  1064.    
  1065.    
  1066. end
  1067.  
  1068. function gravity()
  1069.  
  1070.     if (joueur.collision_down==false and joueur.jump==false) then
  1071.         joueur.dy+=0.3
  1072.     end
  1073.  
  1074.    
  1075.     if (joueur.dy>3) joueur.dy=3
  1076.  
  1077. end
  1078.  
  1079. function gameover()
  1080.  
  1081.  
  1082.     for a in all(grpactors) do
  1083.         del(grpactors,a)
  1084.     end
  1085.     for b in all(grpbullet)do
  1086.         del(grpbullet,b)
  1087.     end
  1088.     for c in all(grpparticles)do
  1089.         del(grpparticles,c)
  1090.     end
  1091.     _update = start_update
  1092.     _draw = start_draw
  1093.  
  1094. end
  1095.  
  1096.  
  1097.  
  1098.  
  1099.  
  1100. function game_update()
  1101.  
  1102.    
  1103.     collisions()
  1104.    
  1105.     control_joueur(joueur)
  1106.    
  1107.     if(joueur.life<=0) then
  1108.         gameover()
  1109.     end
  1110.    
  1111.     gravity()
  1112.    
  1113.     move()
  1114.    
  1115.    
  1116.    
  1117.    
  1118.  
  1119. end
  1120.  
  1121.  
  1122. function game_draw()
  1123.  
  1124.     cls()
  1125.     local cam_pos={}
  1126.     cam_pos.x=joueur.x-50
  1127.     cam_pos.y=current_level.camy
  1128.  
  1129.  
  1130.  
  1131.     if(cam_pos.x<current_level.limit_min)then
  1132.         cam_pos.x=current_level.limit_min
  1133.     elseif(cam_pos.x>current_level.limit_max)then
  1134.         cam_pos.x=current_level.limit_max
  1135.     else
  1136.         --cam_pos.x=joueur.x-50
  1137.     end
  1138.  
  1139.  
  1140.     camera(cam_pos.x,cam_pos.y)
  1141.     --camera(500,0)
  1142.     --map(0,16,0,0,16,16)
  1143.     map(0,0,0,0,128,30)
  1144.     afficher_actors()
  1145.    
  1146. --[
  1147.     local px1=cam_pos.x
  1148.     local py1=cam_pos.y+105
  1149.     local px2=cam_pos.x+2
  1150.     local py2=cam_pos.y+107
  1151.     rectfill(0+cam_pos.x,105+cam_pos.y,128+cam_pos.x,128+cam_pos.y,5)
  1152.     rectfill(0+cam_pos.x+2,107+cam_pos.y,128+cam_pos.x-3,128-3+cam_pos.y,0)
  1153.     print("score:"..joueur.score, 5+cam_pos.x, 119+cam_pos.y,7)
  1154.     --print("health:"..joueur.life, 10+cam_pos.x, 120+cam_pos.y,7)
  1155.    
  1156.     local px1=cam_pos.x+5
  1157.     local py1=cam_pos.y+110
  1158.     local px2=cam_pos.x+50-45*(1-joueur.life/joueur.lifemax)
  1159.     local py2=cam_pos.y+113
  1160.     rectfill(px1-1,py1-1,cam_pos.x+51,py2+1,5)
  1161.     rectfill(px1,py1,cam_pos.x+50,py2,0)
  1162.     rectfill(px1,py1,px2,py2,8)
  1163.     rectfill(px1-1,py1+5,px1+46,py1+6,9)
  1164.     rectfill(px1-1,py1+5,(cam_pos.x+4)+4.8*(joueur.jump_cooldown),py1+6,7)
  1165.    
  1166.    
  1167.    
  1168.     local piece1=0
  1169.     local piece2=0
  1170.     local piece3=0
  1171.     if(joueur.pieces==1)then
  1172.     piece1=9
  1173.     piece2=0
  1174.     piece3=0
  1175.     elseif(joueur.pieces==2)then
  1176.     piece1=9
  1177.     piece2=9
  1178.     piece3=0
  1179.     elseif(joueur.pieces==3)then
  1180.     piece1=9
  1181.     piece2=9
  1182.     piece3=9
  1183.     end
  1184.    
  1185.     local mposenemie_downleft =fget(mget((enemi1.x-1)/8,(enemi1.y+8)/8),0)
  1186.     local mposenemie_downright =fget(mget((enemi1.x+8)/8,(enemi1.y+8)/8),0)
  1187.     local testcollision
  1188.    
  1189.     if ( mposenemie_downleft==false or mposenemie_downright==false)then
  1190.         testcollision=true
  1191.         else
  1192.         testcollision=false
  1193.     end
  1194.    
  1195.     circfill(px1+87,py1+6,5,5)
  1196.     circfill(px1+87,py1+6,4,piece1)
  1197.     circfill(px1+100,py1+6,5,5)
  1198.     circfill(px1+100,py1+6,4,piece2)
  1199.     circfill(px1+113,py1+6,5,5)
  1200.     circfill(px1+113,py1+6,4,piece3)
  1201.    
  1202.     spr(4,px1+50,py1-2)
  1203.     print(joueur.munition_arme1,px1+60,py1-1,6)
  1204. --]]
  1205. --[[
  1206.     ---- debug player data ---
  1207.     print(joueur.move_left, 10+cam_pos.x, 0+cam_pos.y,7)
  1208.     print(joueur.move_right, 40+cam_pos.x, 0+cam_pos.y,7)
  1209.     print(enemi9.collision_up, 10+cam_pos.x, 10+cam_pos.y,7)
  1210.     print(enemi9.collision_down, 40+cam_pos.x, 10+cam_pos.y,7)
  1211.     ----------------------------------
  1212.     print(mposenemie_downright, 90+cam_pos.x, cam_pos.y,7)
  1213.     print(joueur.jumplevel,70+cam_pos.x, cam_pos.y,7)
  1214.     print(joueur.jump_cooldown,80+cam_pos.x, 10+cam_pos.y,7)
  1215. --]]   
  1216.    
  1217. end
  1218.  
  1219. -----------------------------
  1220. -----------------------------
  1221. ----------- init ------------
  1222. function _init()
  1223.  
  1224.     _update = start_update
  1225.  _draw = start_draw
  1226. end
  1227.  
  1228.  
  1229. function start_update()
  1230.  
  1231.     if(btnp(5)) then
  1232.     sfx(0)
  1233.         _update = game_update
  1234.         _draw = game_draw
  1235.         game_init()
  1236.        
  1237.     end
  1238.     t=t+1
  1239.  
  1240. end
  1241.  
  1242. t=0
  1243.  
  1244. function start_draw()
  1245.  
  1246. cls()
  1247. map(0,48,0,0,16,16)
  1248. camera(0,0)
  1249. print("shooter-jumper",35,30,7)
  1250. print("-----------------",30,35,1)
  1251. print("\139\145:move",45,40,6)
  1252. print("c:jump",50,47,6)
  1253. print("\151:shoot",47,54,6)
  1254.  
  1255. rectfill(0,sin(t/45)*5+95,128,sin(t/45)*5+110,0)
  1256. print("\151 to start",40,sin(t/45)*5+100,8)
  1257.  
  1258.  
  1259.  
  1260.  
  1261.  
  1262. end
  1263.  
  1264. ----- score ------
  1265.  
  1266. function score_draw()
  1267.  
  1268.     cls()
  1269.     camera(0,0)
  1270.     print("bravo",50,30)
  1271.     print("vous avez fini la demo",20,50)
  1272.     print("score : "..joueur.score,40,60)
  1273.     print("-----------------",30,70,1)
  1274. print("\151 pour recommencer",25,75,6)
  1275. end
  1276.  
  1277. function score_update()
  1278.  
  1279.  
  1280.     if(btnp(5)) then
  1281.     sfx(0)
  1282.         gameover()
  1283.     end
  1284.  
  1285. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement