/8]']>S}Wup8d%qy)PoUƁeֲe< 02TvͫgE#2Tv2Tv<<<< 0 0<<<< ࿪  *++ ** * * * 迪* *+ + *࿪࿪* UUUA(QP E*TU UU Q(( *PYn@ P+QjbTU UZEQA$  ( P P .P~T@@ZP@u*UT[@@W_VTZj*oVת_U :*~+\ܦ^5uYe_]eiUPPUVZjUUUUPUUUjYVkjZUUUU@UzVйVYUzV]{kkkY&PfVeT{djdYfY@eW*_*+Tjj hUV [YeVTZUUXeUlUluUx]ePU%UU UiiiiiTU}tک}t٩}d٩}tU}tZt@@nЗj@PjiZPPD@@PC/ oj_kZ_W>1,y=H>>1},d={x=5,y=0},v={x=0,y=0}} qu={} opn={} bgp={} tiles={stones={{768,2,2},{770,2,2},{772,2,2}}, stonmss={{772,2,2},{774,2,2}}, mushrs={{972,2,2},{974,2,2}}, trees={{832,4,4},{836,2,4},{838,2,4}}, leaves={{964,4,2},{968,4,2}}, bushes={{962,2,2},{964,4,2},{968,4,2}}, houses={{776,2,2},{778,3,2}}, towers={{840,2,4}}, temples={{781,2,2},{906,2,2}}, electr={{844,1,4}}, roofs={{781,2,2}}, waves={{960,2,2},{909,2,2}}, planctons={{708,2,2},{710,2,2}} } packs={ field={tl={ {"stones",5,cl={{1,9,7},{1,9,4}}}, {"trees",2,cl={{1,15,3},{1,2,3}}, cp={"leaves",2,cl={{7,6,5},{1,7,5}}} }, {"bushes",3,cl={{7,6,5},{1,7,5}}} },bgc={3,4},dst=10}, village={tl={ {"houses",8,cl={{15,2,3},{1,15,3}}}, {"towers",1,cl={{15,3,4}}, cp={"roofs",3,cl={{15,2,3}}} } }, bgc={3,4},dst=25}, lake={tl={ {"stones",1,cl={{7,6,14},{9,7,14}}}, {"waves",6,cl={{9,10,12},{7,10,12}}} },bgc={8,9},dst=10}, forest={tl={ {"trees",20,cl={{1,15,3},{1,2,3}}, cp={"leaves",1,cl={{7,6,5},{1,7,5}}} }, {"stones",2,cl={{1,9,7},{1,9,4}}}, {"stonmss",2,cl={{1,9,7},{1,9,4}}}, {"mushrs",5,cl={{15,14,12},{15,2,3}}}, }, bgc={6,7},dst=25}, underwater={tl={ {"planctons",4,cl={{1,2,3},{2,11,13},{3,4,5}}} }, bgc={8},dst=5} } lvl1={stgs={ --{x=50,y=30,t="lake",zn={x=500,y=100}}, {x=50,y=30,t="field",zn={x=500,y=100}}, {x=550,y=30,t="village",zn={x=500,y=100}}, {x=1100,y=30,t="field",zn={x=300,y=100}}, {x=1400,y=30,t="forest",zn={x=1000,y=100}}, {x=2400,y=30,t="lake",zn={x=500,y=100}}, {x=2600,y=150,t="underwater",zn={x=200,y=5000}}} } lvls={{p={x=50,y=10},l=lvl1} } curl=0 -- hacking a la hache PMAP=0x3FF0 CMAP=0x3FC0 DMOD=2*0x03FFC -- math function pv(nm,v)return trace(nm..stf(":x=%.2f y=%.2f",v.x,v.y))end function vadd(v,u)return{x=v.x+u.x,y=v.y+u.y}end function vsub(v,u)return{x=v.x-u.x,y=v.y-u.y}end function vcp(v)return{x=v.x,y=v.y}end function vmuls(v,s)return{x=v.x*s,y=v.y*s}end function lg(v)return sqr(v.x*v.x+v.y*v.y)end function unit(v)local l=lg(v)if l~=0 then return{x=v.x/l,y=v.y/l}else return{x=0,y=0}end end function ps(v,u)return v.x*u.x+u.y*v.y end function c2p(v)return{l=lg(v),a=atan(v.y,v.x)}end function p2c(v)return{x=v.l*cos(v.a),y=v.l*sin(v.a)}end function nmle(v)local dn=unit(v)return{x=dn.y,y=-dn.x}end function vit(v,spd)return vmuls(v,spd)end function dirv(v)return vmuls(unit(v),spd)end function dirm(v)return vmuls(unit(v),dst)end function inv(v)return{x=-v.x,y=-v.y}end dst=lg(hd.d) function dfind(buf,crit,val) local l,M,m=1,#buf,0 while l <= M do m = math.floor((l+M)/2) if buf[m][crit]0xff then colwt[i].r=0xff end if colwt[i].g>0xff then colwt[i].g=0xff end if colwt[i].b>0xff then colwt[i].b=0xff end end end function colgrad(cl1,cl2,l,maxl) local percdiff=l/maxl return {r=flr(cl1.r+(cl2.r-cl1.r)*percdiff) ,g=flr(cl1.g+(cl2.g-cl1.g)*percdiff) ,b=flr(cl1.b+(cl2.b-cl1.b)*percdiff)} end --- draw function clrmprz()for i=1,4 do poke4(PMAP*2+i,i)end end function clrmp(s)for i=1,3 do poke4(PMAP*2+i,s[i])end end function clrmp4(s)for i=1,4 do poke4(PMAP*2+i,s[i])end end function tbl_cln(dest)for i=#dest,1,-1 do table.remove(dest,i)end end function bgp_ini(dest,pk,pos,zn) local tt=0 local max=flr(sqr(zn.x*zn.y)/50*pk.dst) for lt=1,#pk.tl do tt=tt+pk.tl[lt][2]end for i=1,max do local tlr,ts,lt=rnd(1,tt),nil,1 while ts==nil do if tlr<=pk.tl[lt][2]then ts=pk.tl[lt] else tlr=tlr-pk.tl[lt][2] lt=lt+1 end end local tn=ts[1] local tl=tiles[tn][rnd(1,#tiles[tn])] local x,y=rnd(1,zn.x),rnd(1,zn.y) i=dfind(dest,"y",y) table.insert(dest,i,{x=x,y=y,tl=tl,cl=ts.cl[rnd(1,#ts.cl)]}) if ts.cp ~= nil then local rd=rnd(1,ts.cp[2]) if rd==1 then dest[i].cp={tl=tiles[ts.cp[1]][rnd(1,#tiles[ts.cp[1]])], cl=ts.cp.cl[rnd(1,#ts.cp.cl)]} end end end dest.bgc=pk.bgc[rnd(1,#pk.bgc)] dest.x=pos.x dest.y=pos.y dest.zn={x=zn.x,y=zn.y} end function bgp_drw(ax,ay,bg) clrmprz() ax,ay=ax+bg.x,ay+bg.y rect(ax+5,ay+5,bg.zn.x-5,bg.zn.y-5,bg.bgc) for i=1,#bg do local b=bg[i] circ(ax+b.x,ay+b.y,b.tl[2]*7,bg.bgc) end for i=1,#bg do local b=bg[i] clrmp(b.cl) local x,y=ax+b.x-(b.tl[2]<<2),ay+b.y-(b.tl[3]<<3) if x+(b.tl[2]<<3)>=0 and x-(b.tl[2]<<3)<=240 and ay+b.y>=0 and y<=H then spr(b.tl[1],x,y,0,1,0,0,b.tl[2],b.tl[3]) end if b.cp ~= nil then clrmp(b.cp.cl) x,y=ax+b.x-(b.cp.tl[2]<<2),ay+b.y-(b.tl[3]<<3)-(b.cp.tl[3]<<2) if x+(b.cp.tl[2]<<3)>=0 and x-(b.cp.tl[2]<<3)<=240 and y+(b.cp.tl[3]<<3)>=0 and y<=H then spr(b.cp.tl[1],x,y,0,1,0,0,b.cp.tl[2],b.cp.tl[3]) end end end end function bg_upd() for i=1,#lvls[curl].l.stgs do local l=lvls[curl].l.stgs[i] if direction==0 then if l.x == ax+240+50 then local nb=#bgp+1 bgp[nb]={}bgp_ini(bgp[nb],packs[l.t],l,l.zn) end else if l.y == ay+H+50 then local nb=#bgp+1 bgp[nb]={}bgp_ini(bgp[nb],packs[l.t],l,l.zn) end end end --clean for i=#bgp,1,-1 do if direction==0 then if bgp[i].x+bgp[i].zn.x-ax<-64 then tbl_cln(bgp[i]) table.remove(bgp,i) end else if bgp[i].y+bgp[i].zn.y-ay<-64 then tbl_cln(bgp[i]) table.remove(bgp,i) end end end end function bg_drw() clrmp({2,3,4}) for i=1,#bgp do bgp_drw(-ax,ay,bgp[i])end end function fg_drw() clrmp({0,1,15}) end function persos_drw() clrmprz() a=t/60 spr(704,p.x+27+30*cs(a),p.y+27+20*sn(a),0,1,0,0,2,2) spr(640+t%60//(60/6)*2,p.x+20+30*cs(a),p.y+20+20*sn(a),0,1,0,0,2,2) --spr(512+t%60//30*2,p.x,p.y,14,1,0,0,2,2) end function triqd(x1,y1,x2,y2,x3,y3,x4,y4,c) tri(x1,y1,x2,y2,x3,y3,c) tri(x2,y2,x3,y3,x4,y4,c) end function snake_drw_skin(e1,n1,lr1,e2,n2,lr2,cr,ct) triqd(e1.x+n1.x*lr1,H-(e1.y+n1.y*lr1), e2.x+n2.x*lr2,H-(e2.y+n2.y*lr2), e1.x-n1.x*lr1,H-(e1.y-n1.y*lr1), e2.x-n2.x*lr2,H-(e2.y-n2.y*lr2),cr) line(e1.x+n1.x*lr1,H-(e1.y+n1.y*lr1), e2.x+n2.x*lr2,H-(e2.y+n2.y*lr2),ct) --bord droit line(e1.x-n1.x*lr1,H-(e1.y-n1.y*lr1), e2.x-n2.x*lr2,H-(e2.y-n2.y*lr2),ct) --bord droit end function snake_drw_tri(h) local h,q=5,0 local stp=(h-q)/#qu clrmprz() local ct,cr=8,9 -- tete+dir circ(hd.p.x,H-hd.p.y,5,cr) circb(hd.p.x,H-hd.p.y,5,ct) circ(hd.p.x+hd.d.x*2,H-(hd.p.y+hd.d.y*2),2,12) circ(hd.p.x+hd.d.x*2.5,H-(hd.p.y+hd.d.y*2.5),1,1) local v1,v2=nmle(hd.d),nmle(vsub(hd.p,qu[1])) snake_drw_skin(hd.p,v1,h,qu[1],v2,h-stp,cr,ct) v1=v2 for i=2,#qu do v2=nmle(vsub(qu[i-1],qu[i])) snake_drw_skin(qu[i-1],v1,h-(i-1)*stp,qu[i],v2,h-i*stp,cr,ct) v1=v2 end end function snake_ini() local iv=inv(hd.d) qu[1]={x=hd.p.x+iv.x,y=hd.p.y+iv.y} for i=2,mxs do qu[i]={x=qu[i-1].x+iv.x,y=qu[i-1].y+iv.y} end hd.d=vmuls(unit(hd.d),spd) end function snake_upd() if hd.v.x~=0 or hd.v.y~=0 then hd.d=vcp(hd.v) hd.p=vadd(hd.p,hd.v) qu[1]=vadd(hd.p,dirm(vsub(qu[1],hd.p))) for i=2,#qu do qu[i]=vadd(qu[i-1],dirm(vsub(qu[i],qu[i-1]))) end end end function game_loop() local m={x=0,y=0} if btn(0) and hd.p.y0 then m.y=m.y-1 end if btn(2) and hd.p.x>0 then m.x=m.x-1 end if btn(3) and hd.p.x