Advertisement
Krystman

Pico-8 Hero - Breakout - End of Ep. 45

Jan 21st, 2018
715
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 30.62 KB | None | 0 0
  1. pico-8 cartridge // http://www.pico-8.com
  2. version 15
  3. __lua__
  4. --goals
  5. -- 8. high score
  6. -- 9. ui
  7. --    - powerup messages
  8. --    - powerup percentage bar
  9. -- 10. better collision
  10. -- 11. gameplay tweaks
  11. --     - smaller paddle
  12. -- 12  level design
  13. -- 13. sound
  14. --     - level over fanare\
  15. --     - start screen music
  16. --     - high score music
  17.  
  18. function _init()
  19.  cartdata("layzdevs_hero1")
  20.  cls()
  21.  mode="start"
  22.  level=""
  23.  debug=""
  24.  levelnum = 1
  25.  levels={}
  26.  --levels[1] = "x5b"
  27.  --levels[1] = "b9b/p9p/sbsbsbsbsb"
  28.  --levels[1] = "hxixsxpxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxbxb"
  29.  levels[1] = "////x4b/s9s"
  30.  --levels[1] = "b9bh9h"
  31.  levels[2] = "b9bb9bb9bb9bb9bp9p"
  32.  
  33.  shake=0
  34.  
  35.  blink_g=7
  36.  blink_g_i=1
  37.  
  38.  blink_w=7
  39.  blink_w_i=1
  40.  
  41.  blinkframe=0
  42.  blinkspeed=8
  43.  
  44.  fadeperc=0
  45.  
  46.  startcountdown=-1
  47.  govercountdown=-1
  48.  
  49.  arrm=1
  50.  arrm2=1
  51.  arrmframe=0
  52.  
  53.  --particles
  54.  part={}
  55.  
  56.  lasthitx=0
  57.  lasthity=0
  58.  
  59.  --highscrore
  60.  hs={}
  61.  loadhs()
  62.  hs[1]=1000
  63.  savehs()
  64. end
  65.  
  66. function startgame()
  67.  mode="game"
  68.  ball_r=2
  69.  ball_dr=0.5
  70.  
  71.  pad_x=52
  72.  pad_y=120
  73.  pad_dx=0
  74.  pad_wo=24--original pad width
  75.  pad_w=24 --current pad with
  76.  pad_h=3
  77.  pad_c=7
  78.  
  79.  brick_w=9
  80.  brick_h=4
  81.  
  82.  levelnum = 1
  83.  level = levels[levelnum]
  84.  buildbricks(level)
  85.  --brick_y=20
  86.  
  87.  lives=3
  88.  points=0
  89.  sticky = false
  90.  
  91.  chain=1 --combo chain multiplier
  92.  
  93.  timer_mega=0
  94.  timer_slow=0
  95.  timer_expand=0
  96.  timer_reduce=0
  97.  
  98.  serveball()
  99. end
  100.  
  101. function nextlevel()
  102.  mode="game"
  103.  pad_x=52
  104.  pad_y=120
  105.  pad_dx=0
  106.  
  107.  levelnum+=1
  108.  if levelnum > #levels then
  109.   -- we've beaten the gane
  110.   -- we need some kind of special
  111.   -- screen here
  112.   mode="start"
  113.   return
  114.  end
  115.  level=levels[levelnum]
  116.  buildbricks(level)
  117.  
  118.  chain=1
  119.  sticky = false
  120.  
  121.  serveball()
  122. end
  123.  
  124. function buildbricks(lvl)
  125.  local i,j,o,chr,last
  126.  bricks={}
  127.  
  128.  j=0
  129.  -- b = normal brick
  130.  -- x = empty space
  131.  -- i = indestructable brick
  132.  -- h = hardened brick
  133.  -- s = sploding brick
  134.  -- p = powerup brick
  135.  
  136.  for i=1,#lvl do
  137.   j+=1
  138.   chr=sub(lvl,i,i)  
  139.   if chr=="b"
  140.   or chr=="i"
  141.   or chr=="h"
  142.   or chr=="s"
  143.   or chr=="p" then
  144.    last=chr
  145.    addbrick(j,chr)  
  146.   elseif chr=="x" then
  147.    last="x"
  148.   elseif chr=="/" then
  149.    j=(flr((j-1)/11)+1)*11
  150.   elseif chr>="1" and chr<="9" then
  151.    for o=1,chr+0 do
  152.     if last=="b"
  153.     or last=="i"
  154.     or last=="h"
  155.     or last=="s"
  156.     or last=="p" then
  157.         addbrick(j,last)
  158.     elseif last=="x" then
  159.      --nothing
  160.     end
  161.     j+=1
  162.    end
  163.    j-=1
  164.   end
  165.  end
  166. end
  167.  
  168. function resetpills()
  169.  pill={}
  170. end
  171.  
  172. function addbrick(_i,_t)
  173.  local _b
  174.  _b = {}
  175.  _b.x=4+((_i-1)%11)*(brick_w+2)
  176.  _b.y=20+flr((_i-1)/11)*(brick_h+2)
  177.  _b.v=true
  178.  _b.t=_t
  179.  _b.fsh=0
  180.  _b.ox=0
  181.  _b.oy=-(128+rnd(128))
  182.  _b.dx=0
  183.  _b.dy=rnd(64)
  184.  
  185.  add(bricks,_b)
  186. end
  187.  
  188. function levelfinished()
  189.  if #bricks == 0 then return true end
  190.  
  191.  for i=1,#bricks do
  192.   if bricks[i].v == true and bricks[i].t != "i" then
  193.    return false
  194.   end
  195.  end
  196.  return true
  197. end
  198.  
  199. function serveball()
  200.  ball={}
  201.  ball[1] = newball()
  202.  
  203.  ball[1].x=pad_x+flr(pad_w/2)
  204.  ball[1].y=pad_y-ball_r
  205.  ball[1].dx=1
  206.  ball[1].dy=-1
  207.  ball[1].ang=1
  208.  ball[1].stuck=true
  209.  
  210.  pointsmult=1
  211.  chain=1
  212.  timer_mega=0
  213.  timer_slow=0
  214.  timer_expand=0
  215.  timer_reduce=0
  216.  
  217.  resetpills()
  218.  
  219.  sticky_x=flr(pad_w/2)
  220.  
  221.  --0.50
  222.  --1.30
  223. end
  224.  
  225. function newball()
  226.  b = {}
  227.  b.x = 0
  228.  b.y = 0
  229.  b.dx = 0
  230.  b.dy = 0
  231.  b.ang = 1
  232.  b.stuck = false
  233.  return b
  234. end
  235.  
  236. function copyball(ob)
  237.  b={}
  238.  b.x = ob.x
  239.  b.y = ob.y
  240.  b.dx = ob.dx
  241.  b.dy = ob.dy
  242.  b.ang = ob.ang
  243.  b.stuck = ob.stuck
  244.  return b
  245. end
  246.  
  247. function setang(bl,ang)
  248.  bl.ang=ang
  249.  if ang==2 then
  250.   bl.dx=0.50*sign(bl.dx)
  251.   bl.dy=1.30*sign(bl.dy)  
  252.  elseif ang==0 then
  253.   bl.dx=1.30*sign(bl.dx)
  254.   bl.dy=0.50*sign(bl.dy)
  255.  else
  256.   bl.dx=1*sign(bl.dx)
  257.   bl.dy=1*sign(bl.dy)
  258.  end
  259. end
  260.  
  261. function multiball()
  262.  local ballnum = flr(rnd(#ball))+1
  263.  local ogball = ball[ballnum]
  264.  
  265.  ball2 = copyball(ogball)
  266.  --ball3 = copyball(ball[1])
  267.  
  268.  if ogball.ang==0 then
  269.   setang(ball2,2)
  270.   --setang(ball3,2)  
  271.  elseif ogball.ang==1 then
  272.   setang(ogball,0)
  273.   setang(ball2,2)
  274.   --ball[1].ang==1
  275.   --setang(ball3,2)
  276.  else
  277.   setang(ball2,0)
  278.   --setang(ball3,1)
  279.  end
  280.  
  281.  ball2.stuck=false
  282.  ball[#ball+1]=ball2
  283.  --ball[#ball+1]=ball3
  284. end
  285.  
  286. function sign(n)
  287.  if n<0 then
  288.   return -1
  289.  elseif n>0 then
  290.   return 1
  291.  else
  292.   return 0
  293.  end
  294. end
  295.  
  296. function gameover()
  297.  mode="gameoverwait"
  298.  govercountdown=60
  299.  blinkspeed=16
  300. end
  301.  
  302. function levelover()
  303.  mode="leveloverwait"
  304.  govercountdown=60
  305.  blinkspeed=16
  306. end
  307.  
  308. function releasestuck()
  309.  for i=1,#ball do
  310.   if ball[i].stuck then
  311.    ball[i].x=mid(3,ball[i].x,124)
  312.    ball[i].stuck=false
  313.   end
  314.  end
  315. end
  316.  
  317. function pointstuck(sign)
  318.  for i=1,#ball do
  319.   if ball[i].stuck then
  320.    ball[i].dx=abs(ball[i].dx)*sign
  321.   end
  322.  end
  323. end
  324.  
  325. function powerupget(_p)
  326.  if _p == 1 then
  327.   -- slowdown
  328.   timer_slow = 400
  329.  elseif _p == 2 then
  330.   -- life
  331.   lives+=1
  332.  elseif _p == 3 then
  333.   -- catch
  334.   -- check if there are stuck balls
  335.   hasstuck=false
  336.   for i=1,#ball do
  337.    if ball[i].stuck then
  338.     hasstuck=true
  339.    end
  340.   end
  341.   if hasstuck==false then
  342.    sticky = true
  343.   end
  344.  elseif _p == 4 then
  345.   -- expand
  346.   timer_expand = 900
  347.   timer_reduce = 0
  348.  elseif _p == 5 then
  349.   -- reduce
  350.   timer_reduce = 900
  351.   timer_expand = 0
  352.  elseif _p == 6 then
  353.   -- megaball
  354.   timer_mega = 100
  355.  elseif _p == 7 then
  356.   -- multiball
  357.   multiball()
  358.  end
  359. end
  360.  
  361. function hitbrick(_i,_combo)
  362.  local fshtime=10
  363.  
  364.  if bricks[_i].t=="b" then
  365.   -- regular brick
  366.   sfx(2+chain)
  367.   --spawn particles
  368.   shatterbrick(bricks[_i],lasthitx,lasthity)
  369.   bricks[_i].fsh=fshtime
  370.   bricks[_i].v=false
  371.   if _combo then
  372.    points+=10*chain*pointsmult
  373.    chain+=1
  374.    chain=mid(1,chain,7)
  375.   end
  376.  elseif bricks[_i].t=="i" then
  377.   --invincible brick
  378.   sfx(10)
  379.  elseif bricks[_i].t=="h" then
  380.   -- hardened brick  
  381.   if timer_mega > 0 then
  382.    sfx(2+chain)
  383.    bricks[_i].fsh=fshtime
  384.    bricks[_i].v=false
  385.    if _combo then
  386.     points+=10*chain*pointsmult
  387.     chain+=1
  388.     chain=mid(1,chain,7)
  389.    end
  390.   else
  391.    sfx(10)
  392.    bricks[_i].t="b"
  393.   end
  394.  elseif bricks[_i].t=="p" then
  395.   -- powerup brick
  396.   sfx(2+chain)
  397.   --spawn particles
  398.   shatterbrick(bricks[_i],lasthitx,lasthity)
  399.   bricks[_i].fsh=fshtime
  400.   bricks[_i].v=false
  401.   if _combo then
  402.    points+=10*chain*pointsmult
  403.    chain+=1
  404.    chain=mid(1,chain,7)
  405.   end
  406.   spawnpill(bricks[_i].x,bricks[_i].y)
  407.  elseif bricks[_i].t=="s" then
  408.   -- sposion brick
  409.   sfx(2+chain)
  410.   shatterbrick(bricks[_i],lasthitx,lasthity)
  411.   bricks[_i].t="zz"
  412.   if _combo then
  413.    points+=10*chain*pointsmult
  414.    chain+=1
  415.    chain=mid(1,chain,7)
  416.   end
  417.  end
  418. end
  419.  
  420. function spawnpill(_x,_y)
  421.  local _t
  422.  local _pill
  423.  
  424.  _t = flr(rnd(7))+1
  425.  --_t = flr(rnd(2))
  426.  --if _t== 0 then
  427.  -- _t = 7
  428.  --else
  429.  -- _t = 3
  430.  --end
  431.  
  432.  
  433.  _pill={}
  434.  _pill.x = _x
  435.  _pill.y = _y
  436.  _pill.t = _t
  437.  add(pill,_pill)
  438. end
  439.  
  440. function checkexplosions()
  441.  for i=1,#bricks do
  442.   if bricks[i].t == "zz" and bricks[i].v then
  443.    bricks[i].t="z"
  444.   end
  445.  end
  446.  
  447.  for i=1,#bricks do
  448.   if bricks[i].t == "z" and bricks[i].v then
  449.    explodebrick(i)
  450.    spawnexplosion(bricks[i].x,bricks[i].y)
  451.    if shake<0.4 then
  452.     shake+=0.1
  453.             end
  454.   end
  455.  end
  456.  
  457.  for i=1,#bricks do
  458.   if bricks[i].t == "zz" then
  459.    bricks[i].t="z"
  460.   end
  461.  end
  462. end
  463.  
  464. function explodebrick(_i)
  465.  bricks[_i].v=false
  466.  for j=1,#bricks do
  467.   if j!=_i
  468.   and bricks[j].v
  469.   and abs(bricks[j].x-bricks[_i].x) <= (brick_w+2)
  470.   and abs(bricks[j].y-bricks[_i].y) <= (brick_h+2)
  471.   then
  472.    hitbrick(j,false)
  473.   end  
  474.  end
  475. end
  476.  
  477. function ball_box(bx,by,box_x,box_y,box_w,box_h)
  478.  -- checks for a collion of the ball with a rectangle
  479.  if by-ball_r > box_y+box_h then return false end
  480.  if by+ball_r < box_y then return false end
  481.  if bx-ball_r > box_x+box_w then return false end
  482.  if bx+ball_r < box_x then return false end
  483.  return true
  484. end
  485.  
  486. function box_box(box1_x,box1_y,box1_w,box1_h,box2_x,box2_y,box2_w,box2_h)
  487.  -- checks for a collion of the two boxes
  488.  if box1_y > box2_y+box2_h then return false end
  489.  if box1_y+box1_h < box2_y then return false end
  490.  if box1_x > box2_x+box2_w then return false end
  491.  if box1_x+box1_w < box2_x then return false end
  492.  return true
  493. end
  494.  
  495. function deflx_ball_box(bx,by,bdx,bdy,tx,ty,tw,th)
  496.     local slp = bdy / bdx
  497.     local cx, cy
  498.     if bdx == 0 then
  499.         return false
  500.     elseif bdy == 0 then
  501.         return true
  502.     elseif slp > 0 and bdx > 0 then
  503.         cx = tx - bx
  504.         cy = ty - by
  505.         return cx > 0 and cy/cx < slp
  506.     elseif slp < 0 and bdx > 0 then
  507.         cx = tx - bx
  508.         cy = ty + th - by
  509.         return cx > 0 and cy/cx >= slp
  510.     elseif slp > 0 and bdx < 0 then
  511.         cx = tx + tw - bx
  512.         cy = ty + th - by
  513.         return cx < 0 and cy/cx <= slp
  514.     else
  515.         cx = tx + tw - bx
  516.         cy = ty - by
  517.         return cx < 0 and cy/cx >= slp
  518.     end
  519. end
  520. -->8
  521. -- juicy stuff --
  522.  
  523. function doshake()
  524.  -- -16 +16
  525.  local shakex=16-rnd(32)
  526.  local shakey=16-rnd(32)
  527.  
  528.  shakex=shakex*shake
  529.  shakey=shakey*shake
  530.  
  531.  camera(shakex,shakey)
  532.  
  533.  shake=shake*0.95
  534.  if shake<0.05 then
  535.   shake=0
  536.  end
  537. end
  538.  
  539. -- do the blinking
  540. function doblink()
  541.  local g_seq = {3,11,7,11}
  542.  local w_seq = {5,6,7,6}
  543.  
  544.  -- text blinking
  545.  blinkframe+=1
  546.  if blinkframe>blinkspeed then
  547.   blinkframe=0
  548.  
  549.   blink_g_i+=1
  550.   if blink_g_i > #g_seq then
  551.    blink_g_i=1
  552.   end
  553.   blink_g=g_seq[blink_g_i]
  554.  
  555.   blink_w_i+=1
  556.   if blink_w_i > #w_seq then
  557.    blink_w_i=1
  558.   end
  559.   blink_w=w_seq[blink_w_i]
  560.  end
  561.  
  562.  -- trajectory preview anim
  563.  -- first dot
  564.  arrmframe+=1
  565.  if arrmframe>30 then
  566.   arrmframe=0
  567.  end
  568.  arrm=1+(2*(arrmframe/30))
  569.  -- second dot
  570.  local af2=arrmframe+15
  571.  if af2>30 then
  572.   af2 = af2-30
  573.  end
  574.  arrm2=1+(2*(af2/30))
  575.  
  576. end
  577.  
  578. -- fading
  579. function fadepal(_perc)
  580.  -- 0 means normal
  581.  -- 1 is completely black
  582.  
  583.  local p=flr(mid(0,_perc,1)*100)
  584.  
  585.  -- these are helper variables
  586.  local kmax,col,dpal,j,k
  587.  dpal={0,1,1, 2,1,13,6,
  588.           4,4,9,3, 13,1,13,14}
  589.  
  590.  -- now we go trough all colors
  591.  for j=1,15 do
  592.   --grab the current color
  593.   col = j
  594.  
  595.   --now calculate how many
  596.   --times we want to fade the
  597.   --color.
  598.   kmax=(p+(j*1.46))/22  
  599.   for k=1,kmax do
  600.    col=dpal[col]
  601.   end
  602.  
  603.   --finally, we change the
  604.   --palette
  605.   pal(j,col,1)
  606.  end
  607. end
  608.  
  609. -- particle stuff
  610.  
  611. -- add a particle
  612. function addpart(_x,_y,_dx,_dy,_type,_maxage,_col,_s)
  613.  local _p = {}
  614.  _p.x=_x
  615.  _p.y=_y
  616.  _p.dx=_dx
  617.  _p.dy=_dy
  618.  _p.tpe=_type
  619.  _p.mage=_maxage
  620.  _p.age=0
  621.  _p.col=0
  622.  _p.colarr=_col
  623.  _p.rot=0
  624.  _p.rottimer=0
  625.  _p.s=_s
  626.  _p.os=_s
  627.  
  628.  add(part,_p)
  629. end
  630.  
  631. -- spawn a small puft
  632. function spawnpuft(_x,_y)
  633.  for i= 0,5 do
  634.   local _ang = rnd()
  635.   local _dx = sin(_ang)*1
  636.   local _dy = cos(_ang)*1
  637.   addpart(_x,_y,_dx,_dy,2,15+rnd(15),{7,6,5},1+rnd(2))
  638.  end
  639. end
  640.  
  641. -- spawn a puft in the color of a pill
  642. function spawnpillpuft(_x,_y,_p)
  643.  for i= 0,20 do
  644.   local _ang = rnd()
  645.   local _dx = sin(_ang)*(1+rnd(2))
  646.   local _dy = cos(_ang)*(1+rnd(2))
  647.   local _mycol
  648.  
  649.   if _p == 1 then
  650.    -- slowdown -- orange
  651.    _mycol={9,9,4,4,0}
  652.   elseif _p == 2 then
  653.    -- life -- white
  654.    _mycol={7,7,6,5,0}
  655.   elseif _p == 3 then
  656.    -- catch -- green
  657.    _mycol={11,11,3,3,0}
  658.   elseif _p == 4 then
  659.    -- expand -- blue
  660.    _mycol={12,12,5,5,0}
  661.   elseif _p == 5 then
  662.    -- reduce -- black
  663.    _mycol={0,0,5,5,6}
  664.   elseif _p == 6 then
  665.    -- megaball -- pink
  666.    _mycol={14,14,13,2,0}
  667.   else
  668.    -- multiball -- red
  669.    _mycol={8,8,4,2,0}
  670.   end  
  671.   addpart(_x,_y,_dx,_dy,2,20+rnd(15),_mycol,1+rnd(4))
  672.  end
  673. end
  674.  
  675. -- spawn death particles
  676. function spawndeath(_x,_y)
  677.  for i= 0,30 do
  678.   local _ang = rnd()
  679.   local _dx = sin(_ang)*(2+rnd(4))
  680.   local _dy = cos(_ang)*(2+rnd(4))
  681.   local _mycol
  682.  
  683.   _mycol={10,10,9,4,0}
  684.   addpart(_x,_y,_dx,_dy,2,80+rnd(15),_mycol,3+rnd(6))
  685.  end
  686. end
  687.  
  688. -- spawn death particles
  689. function spawnexplosion(_x,_y)
  690.  --first smoke
  691.  sfx(14)
  692.  for i= 0,20 do
  693.   local _ang = rnd()
  694.   local _dx = sin(_ang)*(rnd(4))
  695.   local _dy = cos(_ang)*(rnd(4))
  696.   local _mycol
  697.   _mycol={0,0,5,5,6}
  698.   addpart(_x,_y,_dx,_dy,2,80+rnd(15),_mycol,3+rnd(6))
  699.  end
  700.  --fireball
  701.  for i= 0,30 do
  702.   local _ang = rnd()
  703.   local _dx = sin(_ang)*(1+rnd(4))
  704.   local _dy = cos(_ang)*(1+rnd(4))
  705.   local _mycol
  706.   _mycol={7,10,9,8,5}
  707.   addpart(_x,_y,_dx,_dy,2,30+rnd(15),_mycol,2+rnd(4))
  708.  end
  709.  
  710. end
  711.  
  712. -- spawn a trail particle
  713. function spawntrail(_x,_y)
  714.  if rnd()<0.5 then
  715.   local _ang = rnd()
  716.   local _ox = sin(_ang)*ball_r*0.3
  717.   local _oy = cos(_ang)*ball_r*0.3
  718.  
  719.   addpart(_x+_ox,_y+_oy,0,0,0,15+rnd(15),{10,9},0)
  720.  end
  721. end
  722.  
  723. -- spawn a megatrail particle
  724. function spawnmtrail(_x,_y)
  725.  if rnd() then
  726.   local _ang = rnd()
  727.   local _ox = sin(_ang)*ball_r
  728.   local _oy = cos(_ang)*ball_r
  729.  
  730.   addpart(_x+_ox,_y+_oy,0,0,2,60+rnd(15),{14,13,2},1+rnd(1))
  731.  end
  732. end
  733.  
  734. -- shatter brick
  735. function shatterbrick(_b,_vx,_vy)
  736.  --screenshake and sound
  737.  if shake<0.5 then
  738.   shake+=0.07
  739.  end
  740.  sfx(13)
  741.  
  742.  --bump the brick
  743.  _b.dx = _vx*1
  744.  _b.dy = _vy*1
  745.  for _x= 0,brick_w do
  746.   for _y= 0,brick_h do
  747.    if rnd()<0.5 then
  748.     local _ang = rnd()
  749.     local _dx = sin(_ang)*rnd(2)+(_vx/2)
  750.     local _dy = cos(_ang)*rnd(2)+(_vy/2)
  751.  
  752.     addpart(_b.x+_x,_b.y+_y,_dx,_dy,1,80,{7,6,5},0)
  753.    end
  754.   end
  755.  end
  756.  
  757.  local chunks=1+flr(rnd(10))
  758.  if chunks>0 then
  759.   for i=1,chunks do
  760.    local _ang = rnd()
  761.    local _dx = sin(_ang)*rnd(2)+(_vx/2)
  762.    local _dy = cos(_ang)*rnd(2)+(_vy/2)
  763.    local _spr = 16 + flr(rnd(14))
  764.    addpart(_b.x,_b.y,_dx,_dy,3,80,{_spr},0)
  765.    
  766.   end
  767.  end
  768.  
  769. end
  770. --particles
  771. -- type 0 - static pixel
  772. -- type 1 - gravity pixel
  773. -- type 2 - ball of smoke
  774. -- type 3 - rotating sprite
  775.  
  776. -- big particle updater
  777. function updateparts()
  778.  local _p
  779.  for i=#part,1,-1 do
  780.   _p=part[i]
  781.   _p.age+=1
  782.   if _p.age>_p.mage then
  783.    del(part,part[i])
  784.   elseif _p.x < -20 or _p.x > 148 then
  785.    del(part,part[i])
  786.   elseif _p.y < -20 or _p.y > 148 then
  787.    del(part,part[i])  
  788.   else
  789.    -- change colors
  790.    if #_p.colarr==1 then
  791.     _p.col = _p.colarr[1]
  792.    else
  793.     local _ci=_p.age/_p.mage
  794.     _ci=1+flr(_ci*#_p.colarr)
  795.     _p.col = _p.colarr[_ci]
  796.    end
  797.    
  798.    --appy gravity
  799.    if _p.tpe == 1 or _p.tpe == 3 then
  800.     _p.dy+=0.05
  801.    end
  802.    
  803.    --rotate
  804.    if _p.tpe == 3 then
  805.     _p.rottimer+=1
  806.     if _p.rottimer>5 then
  807.      _p.rot+=1
  808.      if _p.rot>=4 then
  809.       _p.rot=0
  810.      end
  811.     end
  812.    end
  813.    
  814.    --shrink
  815.    if _p.tpe == 2 then
  816.     local _ci=1-(_p.age/_p.mage)
  817.     _p.s=_ci*_p.os
  818.    end
  819.    
  820.    --friction
  821.    if _p.tpe == 2 then
  822.              _p.dx=_p.dx/1.2
  823.              _p.dy=_p.dy/1.2
  824.    end
  825.    
  826.    --move particle
  827.    _p.x+=_p.dx
  828.    _p.y+=_p.dy
  829.   end
  830.  end  
  831. end
  832.  
  833. -- big particle drawer
  834. function drawparts()
  835.  for i=1,#part do
  836.   _p=part[i]
  837.   -- pixel particle
  838.   if _p.tpe == 0 or _p.tpe == 1 then
  839.    pset(_p.x,_p.y,_p.col)
  840.   elseif _p.tpe == 2 then
  841.    circfill(_p.x,_p.y,_p.s,_p.col)
  842.   elseif _p.tpe == 3 then
  843.    local _fx,_fy
  844.    if _p.rot==2 then
  845.     _fx=false
  846.     _fy=true
  847.    elseif _p.rot==3 then
  848.     _fx=true
  849.     _fy=true
  850.    elseif _p.rot==4 then
  851.     _fx=true
  852.     _fy=false
  853.    else
  854.     _fx=false
  855.     _fy=false
  856.    end
  857.    
  858.    spr(_p.col,_p.x,_p.y,1,1,_fx,_fy)
  859.   end
  860.  end  
  861. end
  862.  
  863. --rebound bumped bricks
  864. function animatebricks()
  865.  for i=1,#bricks do
  866.   local _b=bricks[i]
  867.   if _b.v or _b.fsh>0 then
  868.    -- see if brick is moving
  869.    if _b.dx~=0 or _b.dy~=0 or _b.ox~=0 or _b.oy~=0 then
  870.     --apply the speed
  871.     _b.ox+=_b.dx
  872.     _b.oy+=_b.dy
  873.    
  874.     --change the speed
  875.     --brick wants to go to zero
  876.     _b.dx-=_b.ox/10
  877.     _b.dy-=_b.oy/10
  878.    
  879.     -- dampening
  880.     if abs(_b.dx)>(_b.ox) then
  881.      _b.dx=_b.dx/1.3
  882.     end
  883.     if abs(_b.dy)>(_b.oy) then
  884.      _b.dy=_b.dy/1.3
  885.     end
  886.    
  887.     -- snap to zero if close
  888.     if abs(_b.ox)<0.2 and abs(_b.dx)<0.25 then
  889.      _b.ox=0
  890.      _b.dx=0
  891.     end
  892.     if abs(_b.oy)<0.2 and abs(_b.dy)<0.25 then
  893.      _b.oy=0
  894.      _b.dy=0
  895.     end
  896.    
  897.    end
  898.   end
  899.  end
  900. end
  901. -->8
  902. -- update functions
  903.  
  904. function _update60()
  905.  doblink()
  906.  doshake()
  907.  updateparts()
  908.  if mode=="game" then
  909.   update_game()
  910.  elseif mode=="start" then
  911.   update_start()
  912.  elseif mode=="gameover" then
  913.   update_gameover()
  914.  elseif mode=="gameoverwait" then
  915.   update_gameoverwait()
  916.  elseif mode=="levelover" then
  917.   update_levelover()
  918.  elseif mode=="leveloverwait" then
  919.   update_leveloverwait()
  920.  end
  921. end
  922.  
  923.  
  924. function update_start()
  925.  if startcountdown<0 then
  926.   if btnp(4) then
  927.    startcountdown=80
  928.    blinkspeed=1
  929.    sfx(12)
  930.   end
  931.  else
  932.   startcountdown-=1
  933.   fadeperc=(80-startcountdown)/80
  934.   if startcountdown<=0 then
  935.    startcountdown= -1
  936.    blinkspeed=8
  937.    startgame()
  938.   end
  939.  end
  940. end
  941.  
  942. function update_gameover()
  943.  if govercountdown<0 then
  944.   if btnp(4) then
  945.    govercountdown=80
  946.    blinkspeed=1
  947.    sfx(12)
  948.   end
  949.  else
  950.   govercountdown-=1
  951.   fadeperc=(80-govercountdown)/80
  952.   if govercountdown<=0 then
  953.    govercountdown= -1
  954.    blinkspeed=8
  955.    startgame()
  956.   end
  957.  end
  958. end
  959.  
  960. function update_gameoverwait()
  961.  govercountdown-=1
  962.  if govercountdown<=0 then
  963.   govercountdown= -1
  964.   mode="gameover"
  965.  end
  966. end
  967.  
  968. function update_leveloverwait()
  969.  govercountdown-=1
  970.  if govercountdown<=0 then
  971.   govercountdown= -1
  972.   mode="levelover"
  973.  end
  974. end
  975.  
  976. function update_levelover()
  977.  if govercountdown<0 then
  978.   if btnp(4) then
  979.    govercountdown=80
  980.    blinkspeed=1
  981.    sfx(15)
  982.   end
  983.  else
  984.   govercountdown-=1
  985.   fadeperc=(80-govercountdown)/80
  986.   if govercountdown<=0 then
  987.    govercountdown= -1
  988.    blinkspeed=8
  989.    nextlevel()
  990.   end
  991.  end
  992. end
  993.  
  994. function update_game()
  995.  local buttpress=false
  996.  local nextx,nexty,brickhit
  997.  
  998.  -- fade in game
  999.  if fadeperc~=0 then
  1000.   fadeperc-=0.05
  1001.   if fadeperc<0 then
  1002.    fadeperc=0
  1003.   end
  1004.  end
  1005.  
  1006.  if timer_expand > 0 then
  1007.   -- check if pad should grow
  1008.   pad_w = flr(pad_wo * 1.5)
  1009.  elseif timer_reduce > 0 then
  1010.   -- check if pad should shrink
  1011.   pad_w = flr(pad_wo / 2)
  1012.   pointsmult=2
  1013.  else
  1014.   pad_w = pad_wo
  1015.   pointsmult=1
  1016.  end
  1017.  
  1018.  if btn(0) then
  1019.   --left
  1020.   pad_dx=-2.5
  1021.   buttpress=true
  1022.   --pad_x-=5
  1023.   pointstuck(-1)
  1024.  end
  1025.  if btn(1) then
  1026.   --right
  1027.   pad_dx=2.5
  1028.   buttpress=true
  1029.   --pad_x+=5
  1030.   pointstuck(1)
  1031.  end
  1032.  if btnp(4) then
  1033.   releasestuck()
  1034.  end
  1035.  
  1036.  if not(buttpress) then
  1037.   pad_dx=pad_dx/1.3
  1038.  end
  1039.  pad_x+=pad_dx
  1040.  pad_x=mid(0,pad_x,127-pad_w)
  1041.  
  1042.  -- big ball loop
  1043.  for bi=#ball,1,-1 do
  1044.   updateball(bi)
  1045.  end
  1046.  
  1047.  -- move pills
  1048.  -- check collision for pills
  1049.  for i=#pill,1,-1 do
  1050.   pill[i].y+=0.7
  1051.   if pill[i].y > 128 then
  1052.    -- remove pill
  1053.    del(pill,pill[i])
  1054.   elseif box_box(pill[i].x,pill[i].y,8,6,pad_x,pad_y,pad_w,pad_h) then
  1055.    powerupget(pill[i].t)
  1056.    spawnpillpuft(pill[i].x,pill[i].y,pill[i].t)
  1057.    -- remove pill
  1058.    del(pill,pill[i])
  1059.    sfx(11)
  1060.   end
  1061.  end
  1062.  
  1063.  checkexplosions()
  1064.  
  1065.  if levelfinished() then
  1066.   _draw()
  1067.   levelover()
  1068.  end
  1069.  
  1070.  -- powerup timers
  1071.  if timer_mega > 0 then
  1072.   timer_mega-=1
  1073.  end
  1074.  if timer_slow > 0 then
  1075.   timer_slow-=1
  1076.  end
  1077.  if timer_expand > 0 then
  1078.   timer_expand-=1
  1079.  end
  1080.  if timer_reduce > 0 then
  1081.   timer_reduce-=1
  1082.  end
  1083.  
  1084.  --animate bricks
  1085.  animatebricks()
  1086.    
  1087. end
  1088.  
  1089. function updateball(bi)
  1090.  myball = ball[bi]
  1091.  if myball.stuck then
  1092.   --ball_x=pad_x+flr(pad_w/2)
  1093.   myball.x=pad_x+sticky_x
  1094.   myball.y=pad_y-ball_r-1
  1095.  else
  1096.   --regular ball physics
  1097.   if timer_slow > 0 then
  1098.    nextx=myball.x+(myball.dx/2)
  1099.    nexty=myball.y+(myball.dy/2)
  1100.   else
  1101.    nextx=myball.x+myball.dx
  1102.    nexty=myball.y+myball.dy
  1103.   end
  1104.  
  1105.   --check if ball hit wall
  1106.   if nextx > 124 or nextx < 3 then
  1107.    nextx=mid(0,nextx,127)
  1108.    myball.dx = -myball.dx
  1109.    sfx(0)
  1110.    spawnpuft(nextx,nexty)
  1111.   end
  1112.   if nexty < 10 then
  1113.    nexty=mid(0,nexty,127)
  1114.    myball.dy = -myball.dy
  1115.    sfx(0)
  1116.    spawnpuft(nextx,nexty)
  1117.   end
  1118.  
  1119.   -- check if ball hit pad
  1120.   if ball_box(nextx,nexty,pad_x,pad_y,pad_w,pad_h) then
  1121.    -- deal with collision
  1122.    if deflx_ball_box(myball.x,myball.y,myball.dx,myball.dy,pad_x,pad_y,pad_w,pad_h) then
  1123.     --ball hit paddle on the side
  1124.     myball.dx = -myball.dx
  1125.     if myball.x < pad_x+pad_w/2 then
  1126.      nextx=pad_x-ball_r
  1127.     else
  1128.      nextx=pad_x+pad_w+ball_r
  1129.     end
  1130.    else
  1131.     --ball hit paddle on the top/bottom
  1132.     myball.dy = -myball.dy
  1133.     if myball.y > pad_y then
  1134.      --bottom
  1135.      nexty=pad_y+pad_h+ball_r
  1136.     else
  1137.      --top
  1138.      nexty=pad_y-ball_r
  1139.      if abs(pad_dx)>2 then
  1140.       --change angle
  1141.       if sign(pad_dx)==sign(myball.dx) then
  1142.        --flatten angle
  1143.        setang(myball,mid(0,myball.ang-1,2))
  1144.       else
  1145.        --raise angle
  1146.        if myball.ang==2 then
  1147.         myball.dx=-myball.dx
  1148.        else
  1149.         setang(myball,mid(0,myball.ang+1,2))
  1150.        end
  1151.       end
  1152.      end
  1153.     end
  1154.    end
  1155.    sfx(1)
  1156.    chain=1
  1157.    spawnpuft(nextx,nexty)
  1158.    
  1159.    --catch powerup
  1160.    if sticky and myball.dy < 0 then
  1161.     releasestuck()
  1162.     sticky = false
  1163.     myball.stuck = true
  1164.     sticky_x = myball.x-pad_x
  1165.    end  
  1166.   end
  1167.  
  1168.   brickhit=false
  1169.   for i=1,#bricks do
  1170.    -- check if ball hit brick
  1171.    if bricks[i].v and ball_box(nextx,nexty,bricks[i].x,bricks[i].y,brick_w,brick_h) then
  1172.     -- deal with collision
  1173.     if not(brickhit) then
  1174.      if (timer_mega > 0 and bricks[i].t=="i")
  1175.      or timer_mega <= 0 then
  1176.       lasthitx=myball.dx
  1177.       lasthity=myball.dy
  1178.       if deflx_ball_box(myball.x,myball.y,myball.dx,myball.dy,bricks[i].x,bricks[i].y,brick_w,brick_h) then
  1179.        myball.dx = -myball.dx
  1180.       else
  1181.        myball.dy = -myball.dy
  1182.       end
  1183.      end
  1184.     end
  1185.     brickhit=true  
  1186.     hitbrick(i,true)
  1187.    end
  1188.   end
  1189.   myball.x=nextx
  1190.   myball.y=nexty
  1191.  
  1192.   --trail particles
  1193.   if timer_mega > 0 then
  1194.    spawnmtrail(nextx,nexty)
  1195.   else
  1196.    spawntrail(nextx,nexty)
  1197.   end
  1198.   -- check if ball left screen
  1199.   if nexty > 127 then
  1200.    sfx(2)
  1201.    spawndeath(myball.x,myball.y)
  1202.    if #ball > 1 then
  1203.     shake+=0.15
  1204.     del(ball,myball)
  1205.    else
  1206.     shake+=0.4
  1207.     lives-=1
  1208.     if lives<0 then
  1209.      gameover()
  1210.     else
  1211.      serveball()
  1212.     end
  1213.    end
  1214.   end
  1215.  
  1216.  end -- end of sticky if
  1217. end
  1218. -->8
  1219. -- draw functions
  1220.  
  1221. function _draw()
  1222.  if mode=="game" then
  1223.   draw_game()
  1224.  elseif mode=="start" then
  1225.   draw_start()
  1226.  elseif mode=="gameoverwait" then
  1227.   draw_game()
  1228.  elseif mode=="gameover" then
  1229.   draw_gameover()
  1230.  elseif mode=="levelover" then
  1231.   draw_levelover()
  1232.  elseif mode=="leveloverwait" then
  1233.   draw_game()
  1234.  end
  1235.  
  1236.  -- fade the screen
  1237.  pal()
  1238.  if fadeperc ~= 0 then
  1239.   fadepal(fadeperc)
  1240.  end
  1241. end
  1242.  
  1243. function draw_start()
  1244.  cls()
  1245.  --print("pico hero breakout",30,40,7)
  1246.  prinths(0)  
  1247.  print("press ❎ to start",32,80,blink_g)
  1248. end
  1249.  
  1250. function draw_gameover()
  1251.  rectfill(0,60,128,75,0)
  1252.  print("game over",46,62,7)
  1253.  print("press ❎ to restart",27,68,blink_w)
  1254. end
  1255.  
  1256. function draw_levelover()
  1257.  rectfill(0,60,128,75,0)
  1258.  print("stage clear!",46,62,7)
  1259.  print("press ❎ to continue",27,68,blink_w)
  1260. end
  1261.  
  1262. function draw_game()
  1263.  local i
  1264.  cls()
  1265.  --cls(1)
  1266.  rectfill(0,0,127,127,1)
  1267.  
  1268.  --draw bricks
  1269.  for i=1,#bricks do
  1270.   local _b=bricks[i]
  1271.   if _b.v or _b.fsh>0 then
  1272.    if _b.fsh>0 then
  1273.     brickcol = 7
  1274.     _b.fsh-=1
  1275.    elseif _b.t == "b" then
  1276.     brickcol = 14
  1277.    elseif _b.t == "i" then
  1278.     brickcol = 6
  1279.    elseif _b.t == "h" then
  1280.     brickcol = 15
  1281.    elseif _b.t == "s" then
  1282.     brickcol = 9
  1283.    elseif _b.t == "p" then
  1284.     brickcol = 12
  1285.    elseif _b.t == "z" or bricks[i].t == "zz" then
  1286.     brickcol = 8
  1287.    end
  1288.    local _bx = _b.x+_b.ox
  1289.    local _by = _b.y+_b.oy
  1290.    rectfill(_bx,_by,_bx+brick_w,_by+brick_h,brickcol)
  1291.   end
  1292.  end
  1293.  
  1294.  -- particles
  1295.  drawparts()
  1296.  
  1297.  -- pills
  1298.  for i=1,#pill do
  1299.   if pill[i].t==5 then
  1300.    palt(0,false)
  1301.    palt(15,true)
  1302.   end
  1303.   spr(pill[i].t,pill[i].x,pill[i].y)
  1304.   palt()
  1305.  end
  1306.  
  1307.  -- balls
  1308.  for i=1,#ball do
  1309.   local ballc=10
  1310.   if timer_mega > 0 then
  1311.    ballc=14
  1312.   end
  1313.   circfill(ball[i].x,ball[i].y,ball_r, ballc)
  1314.   if ball[i].stuck then
  1315.    -- draw trajectory preview dots
  1316.    pset(ball[i].x+ball[i].dx*4*arrm,
  1317.         ball[i].y+ball[i].dy*4*arrm,
  1318.         10)
  1319.    pset(ball[i].x+ball[i].dx*4*arrm2,
  1320.         ball[i].y+ball[i].dy*4*arrm2,
  1321.         10)
  1322.  
  1323.   -- line(ball[i].x+ball[i].dx*4*arrm,
  1324.   --      ball[i].y+ball[i].dy*4*arrm,
  1325.   --     ball[i].x+ball[i].dx*6*arrm,
  1326.   --      ball[i].y+ball[i].dy*6*arrm,10)
  1327.   end
  1328.  end
  1329.  
  1330.  --pad
  1331.  rectfill(pad_x,pad_y,pad_x+pad_w,pad_y+pad_h,pad_c)
  1332.  
  1333.  --ui
  1334.  rectfill(0,0,128,6,0)
  1335.  if debug!="" then
  1336.   print(debug,1,1,7)  
  1337.  else
  1338.   print("lives:"..lives,1,1,7)
  1339.   print("score:"..points,40,1,7)
  1340.   print("chain:"..chain.."x",100,1,7)
  1341.  end
  1342. end
  1343. -->8
  1344. --highscore tab
  1345.  
  1346. --resets the high score list
  1347. function reseths()
  1348.  --create default values
  1349.  hs={500,400,300,200,100}
  1350.  savehs()
  1351. end
  1352.  
  1353. --load the highscore list
  1354. function loadhs()
  1355.  local _slot=0
  1356.  
  1357.  if dget(0)==1 then
  1358.   --load the data
  1359.   _slot+=1
  1360.   for i=1,5 do
  1361.    hs[i]=dget(_slot)
  1362.    _slot+=1
  1363.   end
  1364.  else
  1365.   --file is empty
  1366.   reseths()
  1367.  end
  1368. end
  1369.  
  1370. --save the high score list
  1371. function savehs()
  1372.  local _slot
  1373.  dset(0, 1)
  1374.  --load the data
  1375.  _slot=1
  1376.  for i=1,5 do
  1377.   dset(_slot,hs[i])
  1378.   _slot+=1
  1379.  end
  1380. end
  1381.  
  1382. --prints the high score list
  1383. function prinths(_x)
  1384.  for i=1,5 do
  1385.   print(i.." - ",_x+30,10+7*i,7)
  1386.   local _score=" "..hs[i]
  1387.  
  1388.   print(_score,(_x+100)-(#_score*4),10+7*i,7)  
  1389.  end
  1390. end
  1391. __gfx__
  1392. 0000000006777760067777600677776006777760f677777f06777760067777600000000000000000000000000000000000000000000000000000000000000000
  1393. 00000000559949955576777555b33bb555c1c1c55508800555e222e5558288850000000000000000000000000000000000000000000000000000000000000000
  1394. 00700700559499955576777555b3bbb555cc1cc55508080555e222e5558288850000000000000000000000000000000000000000000000000000000000000000
  1395. 00077000559949955576777555b3bbb555cc1cc55508800555e2e2e5558228850000000000000000000000000000000000000000000000000000000000000000
  1396. 00077000559499955576677555b33bb555c1c1c55508080555e2e2e5558228850000000000000000000000000000000000000000000000000000000000000000
  1397. 00700700059999500577775005bbbb5005cccc50f500005f05eeee50058888500000000000000000000000000000000000000000000000000000000000000000
  1398. 0000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000
  1399. 0000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000
  1400. 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  1401. 00000000000000000000000000000000000000000000000000000000000000000000000000000000000077000000000000000000000000000000000000000000
  1402. 00070000000070000007000000000000000700000000000000000700000070000000770000000000007777000000000000007700000000000000000000000000
  1403. 00777000000077000077700000070000000770000077700000077700007770000007700000077700007777000007777000777700000770000000000000000000
  1404. 00077000000070000077700000077000000770000007770000077000000770000007770000077000077777000007707000077000007770000000000000000000
  1405. 00000000000000000000000000000000000000000000700000000000000000000000000000007000000770000000000000000000000770000000000000000000
  1406. 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070000000000000000000
  1407. __map__
  1408. 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  1409. 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  1410. 0000000000010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  1411. 0000000001010101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  1412. 0000000001010001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  1413. __sfx__
  1414. 00010000183601836018350183301832018310013002130021300213002130021300213001d7001c7001c7001b7001b7001b7001c7001d7001d7001d7001e7001e70000000000000000000000000000000000000
  1415. 000100002436024360243502433024320243100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  1416. 00050000204501e4501b450184501645013450104500d4500a4500745003450014500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  1417. 000200002a36030360303503033030300163001330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  1418. 000200002c36032360323503233036300163001330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  1419. 000200002e36034360343503433035300163001330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  1420. 00020000303603636036350363303a300163001330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  1421. 00020000323603836038350383303c3003b3001330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  1422. 00020000343603a3603a3503a3303e3003b3001330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  1423. 00020000363603c3603c3503c3303f3003b3001330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  1424. 000200003946035460354503543030300163001330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  1425. 000100003a0503505030050290403b0503b0503b0501f0401d0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  1426. 0005000028050280502f0302f03027020270202f0202f02028010280102f0102f01028010280152f0102f01028010280102e0002e000280002800000000000000000000000000000000000000000000000000000
  1427. 010400003d6302d630206301c6301562013615106240f6150e6140d6150d614000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
  1428. 010300003f6732d673396711f6511465112651116510f6530f6420f6320b6320a6320a63209632096320762203622036120361203612036120361503614036150361401615016140161501613000000000000000
  1429. 000300002805128051310303103036030390301f0301f0302803128031310303103036030390301f0101f01028010280103101031010360103901010010100102801028010310103101036010390161001610016
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement