pour ma contribution j'ai crunché mon petit jeu de voiture (191 ligne ! ouf... )
Code : Tout sélectionner
;*****************************************************************************
;*
;* Birthday Punch : PureBasic 15 years of happiness
;* PureBasic 5.31
;* 192 lines of 80 chars of code or data as you want
;*
;* Name : 4x4
;* Author : Pf Shadoko
;* Date : 14/10/2015
;* Notes :
;*
;*****************************************************************************
Macro _4:KeyboardReleased:EndMacro:Macro _:Protected:EndMacro:Macro _1
Procedure:EndMacro:Macro _2:EndProcedure:EndMacro:Macro _3:ProcedureReturn
EndMacro:EnableExplicit:Structure float3:x.f:y.f:z.f:EndStructure:Global ex,ey,
nsol=256,nsol1=nsol-1,action,niveau=1,departPos.float3,departsens.float3,
ChkPtnum:Global Dim t.w(nsol1,nsol1):Global Dim c.l(nsol1,nsol1)
Global Dim chs.float3(0):_1.f POM(v.f):_3(Random(v*1000)-v*500)/500:_2
_1.f longueur3D(*v.float3):_3 Sqr(*V\x**V\x+*V\y**V\y+*V\z**V\z):_2
_1 Norme3D(*V.float3,l.f=1):_.f lm:lm=l/longueur3d(*v):*V\x*lm:*V\y*lm:*V\z*lm
_2:Macro sub3D(p1,p2):p1\x-p2\x:p1\y-p2\y:p1\z-p2\z:EndMacro:_1.f Maxi(v1.f,
v2.f):If v1>v2:_3 v1:Else:_3 v2:EndIf:_2:_1.f Mini(v1.f,v2.f):If v1<v2:_3 v1
Else:_3 v2:EndIf:_2:_1 limite(V,i,s):If V<i:_3 i:EndIf:If V>s:_3 s:EndIf:_3 V
_2:_1 Tlimite(Array T(1),max,marge):_ i:Dim T(max+2*marge):For i=0 To max+marge
T(i+marge)=limite(i,0,max):Next:_2:_1 t2norme(Array t.w(2),dmin.w,dmax.w)
_ smin.w,smax.w,dx1,dy1,i,j,sr,dr:dy1=ArraySize(t(),1):dx1=ArraySize(t(),2)
smax=-32768:smin= 32767:For j=0 To dy1:For i=0 To dx1:If t(j,i)>smax:smax=t(j,
i):EndIf:If t(j,i)<smin:smin=t(j,i):EndIf:Next:Next:sr=smax-smin:dr=dmax-dmin
_ Dim conv(sr):For i=0 To sr:conv(i)=i*dr/sr+dmin:Next:For j=0 To dy1
For i=0 To dx1:t(j,i)=conv(t(j,i)-smin):Next:Next:_2:_1 carte(Array t.w(2),dx.w,
dy.w,Re.w,min=0,max=1000):_ i,j,ii,jj,im,jm,ip,jp,n,d,dd,dx1=dx-1,dy1=dy-1,l,ap,
ap2,R,rr:Macro calcij(v):im=(i-v)& dx1:jm=(j-v)& dy1:ip=(i+v)& dx1:jp=(j+
v)& dy1:EndMacro:n=1<<re:dd=mini(dx,dy)/n:If dd<1:dd=1:EndIf:Dim t.w(dy1,dx1)
ap=$1fff:ap2=ap>>1:For jj=0 To dy/dd-1:j=jj*dd:For ii=0 To dx/dd-1:i=ii*dd:t(j,
i)=Random(ap)-ap2:Next:Next:l=dd:While dd>1:d=dd/2:rr=ap*Sqr(2):R=rr/2
For jj=0 To dy/dd-1:j=jj*dd+d:For ii=0 To dx/dd-1:i=ii*dd+d:calcij(d):t(j,
i)=(t(jm,im)+t(jm,ip)+t(jp,ip)+t(jp,im))/4+Random(rr)-R:Next:Next:rr=ap:R=rr/2
For jj=0 To dy/dd-1:j=jj*dd:For ii=0 To dx/dd-1:i=ii*dd+d:calcij(d):t(j,i)=(t(j,
im)+t(j,ip)+t(jm,i)+t(jp,i))/4+Random(rr)-R:Next:Next:For jj=0 To dy/dd-1
j=jj*dd+d:For ii=0 To dx/dd-1:i=ii*dd:calcij(d):t(j,i)=(t(j,im)+t(j,ip)+t(jm,i)+
t(jp,i))/4+Random(rr)-R:Next:Next:l>>1:dd>>1:ap>>1:Wend:t2norme(t(),min,max):_2
_1 lisser2D(Array s.w(2),di.w,dj.w):_ i,j,dx,dy,dij,tx:dy=ArraySize(s(),1)
dx=ArraySize(s(),2):Dim d.w(dy,dx):Dim ty.l(dx):dij=(di*2+1)*(dj*2+1):Dim lx(0)
Tlimite(lx(),dx,di+1):Dim ly(0):Tlimite(ly(),dy,dj+1):For i=0 To dx:ty(i)=s(0,
i)*(dj+1):Next:For j=0 To dj-1:For i=0 To dx:ty(i)=ty(i)+s(j,i):Next:Next
For j=0 To dy:For i=0 To dx:ty(i)=ty(i)+s(ly(dj+1+j+dj),i)-s(ly(dj+1+j-dj-1),i)
Next:tx=ty(0)*(di+1):For i=0 To di-1:tx=tx+ty(i):Next:For i=0 To dx:tx=tx+
ty(lx(di+1+i+di))-ty(lx(di+1+i-di-1)):d(j,i)=tx/dij:Next:Next:CopyArray(d(),
s()):_2:_1 lisser(Array s.f(1),l):_ i,j,n,s.f:n=ArraySize(s()):Dim d.f(n)
For i=0 To n:s=0:For j=-l To l:s+s((i+j+n)%n):Next:d(i)=s/(2*l+1):Next
CopyArray(d(),s()):_2:_1 Bspline(Array pe.float3(1),Array PS.float3(1),nd.w)
_.f t,tt:_ np,i,j,jj,k,c:_ Dim m.w(4,4):_ Dim ttt.f(4):np=ArraySize(pe())
_ Dim PS((np-2)*nd):m(0,0)=-1:m(1,0)= 3:m(2,0)=-3:m(3,0)= 1:m(0,1)= 2:m(1,1)=-5
m(2,1)= 4:m(3,1)=-1:m(0,2)=-1:m(1,2)= 0:m(2,2)= 1:m(3,2)= 0:m(0,3)= 0:m(1,3)= 2
m(2,3)= 0:m(3,3)= 0:If pe(np-1)\X=pe(1)\X And pe(np-1)\Y=pe(1)\Y:pe(0)=pe(np-2)
pe(np)=pe(2):Else:pe(0)=pe(1):pe(np)=pe(np-1):EndIf:For jj=0 To np-3
For i=0 To nd-1:t=i/nd:For j=0 To 3:ttt(j)=0:tt=0.5:For k=3 To 0 Step-1:ttt(j)+
tt*m(j,k):tt*t:Next:PS(c)\X+ttt(j)*pe(j+jj)\X:PS(c)\Y+ttt(j)*pe(j+jj)\Y:Next:c+
1:Next:Next:PS(c)=pe(np-1):_2:_1 CoMelange(c1.l,c2.l,m.f):_ r.w,g.w,b.w,a.w
r= Red(c1)+(Red(c2)-Red(c1))*m:g=Green(c1)+(Green(c2)-Green(c1))*m:b=Blue(c1)+
(Blue(c2)- Blue(c1))*m:a=Alpha(c1)+(Alpha(c2)-Alpha(c1))*m:_3 RGBA(r,g,b,a):_2
_1 AddMesh(mesho,Mesh,mat.l,NewX.f=0,NewY.f=0,NewZ.f=0,ScaleX.f=1,ScaleY.f=1,
ScaleZ.f=1,RotateX.f=0,RotateY.f=0,RotateZ.f=0)
_ Dim MeshDataV.PB_MeshVertex(0):_ Dim MeshDataF.PB_MeshFace(0):_ i,meshc=1111
CopyMesh(mesh,meshc):TransformMesh(Meshc,NewX,NewY,NewZ,ScaleX,ScaleY,ScaleZ,
RotateX,RotateY,RotateZ):GetMeshData(Meshc,0,MeshDataV(),1 | 8| 4,0,
MeshVertexCount(Mesh,0)-1):GetMeshData(Meshc,0,MeshDataF(),16,0,
MeshIndexCount(Mesh,0)-1):For i=0 To ArraySize(MeshDataV())
MeshVertexPosition(MeshDataV(i)\x,MeshDataV(i)\y,MeshDataV(i)\z)
MeshVertexNormal(MeshDataV(i)\NormalX,MeshDataV(i)\NormalY,
MeshDataV(i)\NormalZ):MeshVertexTextureCoordinate(MeshDataV(i)\u,
MeshDataV(i)\v):Next:For i=0 To ArraySize(MeshDataF())Step 3
MeshFace(MeshDataF(i)\Index,MeshDataF(i+1)\Index,MeshDataF(i+2)\Index):Next
FreeMesh(meshc):AddSubMesh(4):SetMeshMaterial(mesho,MaterialID(mat),
SubMeshCount(mesho)-2):NormalizeMesh(mesh):_2:_1 degrade(Array pal.l(1),l,p1.f,
c1.l,p2.f,c2.l,p3.f=-1,c3.l=0,p4.f=-1,c4.l=0):_ i,img:Dim pal(l-1)
img=CreateImage(-1,l,1,32):StartDrawing(ImageOutput(img)):DrawingMode(64 |256)
If p1>-1:GradientColor(p1,c1):EndIf:If p2>-1:GradientColor(p2,c2):EndIf
If p3>-1:GradientColor(p3,c3):EndIf:If p4>-1:GradientColor(p4,c4):EndIf
LinearGradient(0,0,l-1,0):Box(0,0,l,1):For i=0 To l-1:pal(i)=Point(i,0):Next
StopDrawing():FreeImage(img):_2:_1 Matiere(num,dx,dy,c1,c2,brillance=0):_ i,j
_ Dim pal.l(0):degrade(pal(),256,0,c1,1,c2):CreateTexture(num,dx,dy)
StartDrawing(TextureOutput(num)):DrawingMode(256):For j=0 To dy-1
For i=0 To dx-1:Plot(i,j,pal(Random(255))):Next:Next:StopDrawing()
CreateMaterial(num,TextureID(num)):If brillance:SetMaterialColor(num,1,
brillance):MaterialShininess(num,100):EndIf:_2:_1 CreatePlanex(me,lx.f,ly.f,ntx,
nty,Array t.w(2),Array c.l(2)):_ px.f,py.f,p,i,j,nme,nx=ArraySize(t(),1),
ny=ArraySize(t(),2),dx.f=lx/nx,dy.f=ly/ny:nme=CreateMesh(me):For j=0 To ny
For i=0 To nx:px=-lx/2+i*dx:py=-ly/2+j*dy:MeshVertexPosition(px,t(j,i)/100,py)
MeshVertexTextureCoordinate(i*ntx/nx,j*nty/ny):MeshVertexNormal(0,0,0)
MeshVertexColor(c(j,i)):Next:Next:For j=0 To ny-1:For i=0 To nx-1:p=j*(nx+1)+i
If Abs(t(j,i)-t(j+1,i+1))>Abs(t(j+1,i)-t(j,i+1)):MeshFace(p,p+nx+1,p+1)
MeshFace(p+nx+2,p+1,p+nx+1):Else:MeshFace(p+nx+1,p+nx+2,p):MeshFace(p+1,p,p+nx+
2):EndIf:Next:Next:FinishMesh(1):NormalizeMesh(2):_3 nme:_2
_1.f Tinterpol(Array T.w(2),x.f,y.f):_ b00,b10.w,b01,b11,i0,j0,i1,j1,dx.f,dy.f
i0=Int(X):i1=(i0+1):dx=X-Int(x):j0=Int(Y):j1=(j0+1):dy=Y-Int(y):b00=t(j0,i0)
b01=t(j1,i0):b10=t(j0,i1):b11=t(j1,i1):_3(((1-dx)*b00+dx*b10)*(1-dy)+
((1-dx)*b01+dx*b11)*dy)/100:_2:_1 cooxz(*v.float3,x.f,z.f,dy.f=0):*v\x=x:*v\z=z
*v\y=Tinterpol(t(),x,z)+dy:_2:_1 DT(x,y,txt.s,font,col=$ffffffff)
DrawingFont(FontID(font)):If x=-1:x=OutputWidth()/2-TextWidth(txt)/2:EndIf
DrawText(x,y,txt,col):_2:_1 menu():_ mes.s,dx,dy,cx
StartDrawing(SpriteOutput(0)):dx=OutputWidth():dy=OutputHeight():cx=dx/2-128
DrawingMode(256|64):GradientColor(0.00,$77000000):GradientColor(0.90,$77000000)
GradientColor(1.00,$00000000):EllipticalGradient(dx/2,dy/2,dx/2,dy/2):Box(0,0,
dx,dy):DrawingMode(16 |1):Select action:Case 0:mes="GAME OVER":Case-1
mes="PAUSE":Case 2:mes="Niveau "+Str(niveau):EndSelect:dt(-1,20,"4x4",3,
$ff0000ff):dt(-1,155,mes,2,$ff00ffff):dt(-1,220,"Presser une touche",1,
$ff00ffff):dt(-1,255,"Commandes:",1):dt(cx,280,
"[Left] , [Right] , [Up] , [Down]",1):dt(cx,300,"[Esc] Abandonner/quitter",
1):dt(cx,320,"[Space] Pause",1):dt(cx,340,"[F2] Changer de camera",1)
dt(cx,360,"[+] [-] Changer de circuit",1):StopDrawing():Repeat
ExamineKeyboard():Until KeyboardPushed(-1)=0:_2:_1 score()
StartDrawing(SpriteOutput(1)):DrawingMode(256|1):Box(0,0,200,60,$00000000)
RoundBox(0,0,200,60,8,8,$44000000):DrawingMode(16):BackColor($ff)
DrawingFont(FontID(1)):DrawText(10,4,"Circuit : "+Str(niveau),$ffffffff)
DrawText(10,34,"Checkpt : "+Str(ChkPtnum)+"/16",$ffffffff):StopDrawing():_2
_1 Initdecor():CreateCamera(0,0,0,100,100):MoveCamera(0,nsol/2,80,nsol/2,0)
CameraBackColor(0,$ff8888):CreateLight(0,$777777,7000,5000,2000)
AmbientColor($aaaaaa):SetLightColor(0,1,$ffffff):WorldGravity(-20):Fog($ff8888,
100,10,400):Matiere(2,256,256,$446666,$669999):SetMaterialColor(2,2,-1)
Matiere(3,1,1,$ffffff,$ffffff):Matiere(4,256,256,$aa444422,$aa222200,$ffffff)
MaterialBlendingMode(4,3):MaterialCullingMode(4,1):Matiere(10,256,256,$445555,
$66aaaa):Matiere(11,256,64,$224444,$112222):Matiere(12,1,512,$880000,$880000,
$444444):Matiere(13,1,1,$88000000,$88000000,$ffffff):MaterialBlendingMode(13,3)
MaterialCullingMode(13,1):Matiere(14,256,4,$333333,$000000):Matiere(20,16,16,
$0000aa,$000088):_2:_1 chemin(Array lp.float3(1),Array h.f(1),la,action,
param.l=0):Static Aaction:Global hi:If action<>aaction:hi=0:EndIf
aaction=action:_ nps=ArraySize(lp()),i,j,k:_.f p1.float3,p2.float3,dx,dy,d,x,y
For k=0 To nps-1:p1=lp(k):p2=lp(k+1):dx=p2\x-p1\x:dy=p2\y-p1\y:d=Sqr(dx*dx+
dy*dy):If d=0:_3:EndIf:For i=-0 To 2*d-1:x=p1\x+i*dx/(d*2):y=p1\y+i*dy/(d*2)
Select action:Case 1:h(hi)=Tinterpol(t(),x,y)*100:Case 2:For j=-la-2 To la+2
t(Int(y+j*dx/d/2+0.5),Int(x-j*dy/d/2+0.5))=h(hi)+param:Next:Case 3
For j=-la To la:c(Int(y+j*dx/d/2+0.5),Int(x-j*dy/d/2+0.5))=param:Next:EndSelect
hi+1:Next:Next:_2:_1 InitCourse():_ i:For i=0 To 4:MoveEntity(i,departPos\x,
departPos\y,departPos\z,0):RotateEntity(i,0,
Degree(ATan(departsens\x/departsens\z)),0):Next:ChkPtnum=0:_2
_1 CreerDecors(rnd,c1,c2,c3,cp,hmax=0,heau=2000,routeLa=10,routeHa=0,routeLi=10,
routeCo=$888888):_ i,j,k,c,dx,dy,col,np,nps:_.f p.float3,coo.float3,a,r,h,l,x,y,
z:_ Dim pal.l(0):FreeEntity(-1):RandomSeed(rnd):carte(t(),nsol,nsol,2,0,hmax)
lisser2D(t(),1,1):np=16:_ Dim ch.float3(np+2):_ Dim h.f(10000):For i=1 To np
a=i*2*#PI/np:r=0.30+pom(0.15):ch(i)\x=nsol*(0.5+Cos(a)*r):ch(i)\y=nsol*(0.5+
Sin(a)*r):Next:ch(np+1)=ch(1):bspline(ch(),chs(),16):nps=ArraySize(chs())
chemin(chs(),h(),routeLa,1):ReDim h(hi-1):lisser(h(),routeLi):For i=0 To hi-1
h(i)=limite(h(i),heau-routeHa+40,hmax):Next:chemin(chs(),h(),routeLa,2,routeHa)
cooxz(departPos,chs(0)\x,chs(0)\y,0.5):cooxz(departsens,chs(1)\x,chs(1)\y,0.5)
sub3d(departsens,departPos):degrade(pal(),hmax,0,c1,0.5,c2,1,c3)
For j=0 To nsol1:For i=0 To nsol1:col=pal(limite(t(j,i)+pom(500),0,hmax-1))
dx=t(j,(i+1)& nsol1)-t(j,(i-1)& nsol1):dy=t((j+1)& nsol1,i)-t((j-1)& nsol1,i)
If Abs(dx)+Abs(dy)>200+Random(100):col=cp:EndIf:If t(j,i)<heau+50
col=CoMelange(col,0,0.5):EndIf:c(j,i)=col:Next:Next:chemin(chs(),h(),routeLa,3,
routeCo):CreatePlane(3,nsol1,nsol1,64,64,8,8):CreateEntity(101,MeshID(3),
MaterialID(4)):MoveEntity(101,nsol1/2,heau/100,nsol1/2,0):CreateMesh(0)
AddMesh(0,CreateSphere(-1,0.3),13,0,0.12,-0.20,1.0,0.6,1.2):AddMesh(0,
CreateCylinder(-1,0.25,0.15,64,1,0),12,0,0,0,1.6,1.0,3.0):FinishMesh(1)
CreateEntity(0,MeshID(0),0):EntityPhysicBody(0,5,10,0.2,0.3)
SetEntityAttribute(0,13,0):CreateCylinder(2,0.2,0.2):c=0:For j=-1 To 1 Step 2
For i=-1 To 1 Step 2:c+1:CreateEntity(c,MeshID(2),MaterialID(14),0.8*i,-0.4,
-1.5*j):EntityPhysicBody(c,4,1,0.0,2):HingeJoint(c,EntityID(0), 0.4*i,-0.2,
-0.8*j,-i,0,0, EntityID(c), 0,0,0, 0,1,0):Next:Next:CreateNode(0,0,0.0,-1)
AttachEntityObject(0,"",NodeID(0)):CreateNode(1,0,0.4,0):AttachEntityObject(0,
"",NodeID(1)):InitCourse():CreateMesh(10):addmesh(10,CreateCylinder(-1,0.2,2,16,
0,0),11,0,0.4,0):addmesh(10,CreateSphere(-1,1),10,0,3,0,1,2,1):FinishMesh(1)
SetMaterialColor(10,2,c1):For k=1 To 500:Repeat:i=Random(nsol-2)
j=Random(nsol-2):Until c(j,i)<>routeCo And t(j,i)>heau:cooxz(coo,i,j):c(j,i)=cp
CreateEntity(1000+k,MeshID(10),0,coo\x,coo\y,coo\z):h=1+pom(0.5):l=1+pom(0.5)
ScaleEntity(1000+k,l,h,l):Next:CreateCylinder(5,0.1,10,8,0,0):CreateSphere(6,
0.1,4,4):For i=0 To nps-1 Step 1:p=chs(i):sub3d(p,chs(i+1)):Norme3d(p,routeLa/2+
0.5):For k=-1 To 1 Step 2:c+1:x=chs(i)\x+k*p\y:y=chs(i)\y-k*p\x
CreateEntity(10000+c,MeshID(6-Bool(i & 15=0)),MaterialID(20),x,Tinterpol(t(),x,
y),y):Next:Next:CreatePlanex(2,nsol1,nsol1,64,64,t(),c()):CreateEntity(100,
MeshID(2),MaterialID(2),nsol1/2,0,nsol1/2):EntityPhysicBody(100,1,10,0.0,2):_2
_1 creerniveau():_ rnd,type:rnd=niveau+70:type=(niveau+99)% 5:Select type
Case 0:CreerDecors(rnd,$006600,$00aa22,$00ffaa,$004466,4000,1300,3, 00,20,
$444444):Case 1:CreerDecors(rnd,$008822,$0088ff,$00ff88,$006688,4000,0800,2,
-100,0,$446666):Case 2:CreerDecors(rnd,$00aaff,$008800,$00aaaa,$004488,3000,
0500,3,100,10,$aaaaaa):Case 3:CreerDecors(rnd,$004444,$ffcccc,$ffffff,$ff8888,
4000,0000,3,-100,1,$444444):Case 4:CreerDecors(rnd,$00ffff,$0044ff,$ff4400,
$ffff88,2000,0600,1,400,5,$008800):EndSelect:menu():score():_2:Define.f angle,
anglec,sens.f,dtenvers,dt,ChkPtdis.float3:Define i,dis=0,vdis=1:InitEngine3D()
InitSprite():InitKeyboard():InitMouse():OpenWindow(0,0,0,0,0,"4 X 4",16777216)
ex=WindowWidth(0,1):ey=WindowHeight(0,1):OpenWindowedScreen(WindowID(0),0,0,ex,
ey,0,0,0):CreateSprite(0,ex/2,ey/2,8):CreateSprite(1,200,60,8):LoadFont(1,
"Arial",16):LoadFont(2,"Arial",50,256):LoadFont(3,"Arial",100,256):Initdecor()
creerniveau():Repeat:WindowEvent():ExamineMouse():ExamineKeyboard()
Select action:Case-1,0,2:If _4(1):End:EndIf:Select action:Case-1,2:If _4(-1)
action=1:EndIf:Case 0:If _4(78):niveau+1:creerniveau():ElseIf _4(74):niveau-1
creerniveau():ElseIf _4(-1):action=1:InitCourse():EndIf:EndSelect
CameraFollow(0,EntityID(0),anglec,EntityY(0)+50,100,0.01,0.01):anglec+0.2
RenderWorld(0):DisplayTransparentSprite(0,ex/4,ey*0.1):Case 1:If _4(1):sens=0
angle=0:action=0:menu():EndIf:If _4(57):action=-1:menu():EndIf:If _4(60)
dis=(dis+1)%3:vdis=1<<dis:EndIf:angle+
(Bool(KeyboardPushed(205)<>0)-Bool(KeyboardPushed(203)<>0))*0.02:angle*0.98
sens+(Bool(KeyboardPushed(200)<>0)-Bool(KeyboardPushed(208)<>0))*0.30
sens*0.994:HingeJoint(1,EntityID(0),-0.4,-0.2,0.8, 1,0, angle, EntityID(1), 0,
0,0, 0, 1,0):HingeJoint(2,EntityID(0), 0.4,-0.2,0.8,-1,0,-angle, EntityID(2),
0, 0,0, 0, 1,0):For i=1 To 4:sens=-sens:EnableHingeJointAngularMotor(i,1,sens,
0.5):Next:CameraFollow(0,NodeID(1),-180,NodeY(0)+vdis,2*vdis,0.1,0.05)
If EntityY(0)>NodeY(1):dtenvers+dt:Else:dtenvers=0:EndIf:If dtenvers>3000
sens=0:angle=0:action=0:menu():EndIf:ChkPtdis\x=EntityX(0)
ChkPtdis\y=EntityZ(0):sub3d(ChkPtdis,chs((ChkPtnum+1)*16))
If longueur3d(ChkPtdis)<3:ChkPtnum+1:score():If ChkPtnum>15:sens=0:angle=0
action=2:menu():niveau+1:creerniveau():EndIf:EndIf:dt=RenderWorld():EndSelect
DisplayTransparentSprite(1,8,8,255):FlipBuffers():ForEver