I've been away from B3D for a bit (trying to reacquaint myself) and need some help with the following code (Loki's homing missile code). The error is "Variable must be a Blitz array".
;Demo simple homing avec trails ;By LoKi(c)2007 ;Screen Graphics3D 800,600,32,2 SetBuffer BackBuffer() AppTitle "Trails Single Surface 0.3b - By LoKi(c)2007 / http://blitzklan.free.fr" SeedRnd MilliSecs() HidePointer ;camera camera = CreateCamera() CameraZoom camera,.7 PositionEntity camera,0,0,-150 ;lumiere AmbientLight 100,100,130 lum = CreateLight(2) LightColor lum,50,50,20 PositionEntity lum,100,-100,100 lum = CreateLight(2) LightColor lum,80,80,90 PositionEntity lum,100,100,-100 ;Cible cible = CreateSphere() EntityAlpha cible,.5 EntityColor cible,100,100,255 ScaleEntity cible,5,5,5 TSS_Init() ;Demo NB_MISSILES = Input("Nombre de missiles à tester ? ") PREC_TRAIL = Input("Précision des trainées (0-100) ? ") TIME_DISSIP = Input("Fréquence Update (0-10) ? ") ;Missiles Type missile Field mesh Field cible% Field speed# Field soupl# Field trail% End Type Global missile_modele = CreateSphere(2) HideEntity missile_modele For i=1 To NB_MISSILES m.missile = New missile mmesh = CopyEntity(missile_modele) PositionEntity mmesh, Rand(-1,1)*100, Rand(-1,1)*100, Rand(-1,1)*100 TurnEntity mmesh, Rand(360), Rand(360), Rand(360) ScaleEntity mmesh,.5,.5,3 mspeed = Rnd(1,2) mcible = cible msoupl = Rnd(.5,2) mtrail = TSS_CreateTrail%(mmesh, 1, $88DD22, PREC_TRAIL) Next ;Framerate gameFPS = 60.0 framePeriod = 1000 / gameFPS frameTime = MilliSecs () - framePeriod ;Boucle principale While Not KeyHit(1) ;Framerate Repeat frameElapsed = MilliSecs () - frameTime Until frameElapsed frameTicks = frameElapsed / framePeriod frameTween# = Float(frameElapsed Mod framePeriod) / Float(framePeriod) For frameLimit = 1 To frameTicks If frameLimit = frameTicks Then CaptureWorld frameTime = frameTime + framePeriod ;F9 Passer en Wireframe If KeyHit(67)=1 Then wire=1-wire Wireframe wire EndIf ;F10 pour un screenshot If KeyHit(68)=1 Then ok = False While (Not ok) If FileType(CurrentDir$ + "Screenshot" + ext + ".bmp") = 0 Then SaveBuffer FrontBuffer(), "Screenshot" + ext + ".bmp" ok = True End If ext = ext + 1 Wend End If ;Mise à jour des missiles trail_up = (trail_up + 1) Mod 10 For m.missile = Each missile Homing(mmesh, mcible, msoupl) MoveEntity mmesh,0,0,mspeed If trail_up=0 Then TSS_AddPointEnt%(mtrail) Next ;Modification de la cible MoveEntity cible, MouseXSpeed()/10, -MouseYSpeed()/10, 0 MoveMouse 400,300 If TIME_DISSIP<2 Then TSS_UpdateMesh() Else TSS_UpdateMesh((trail_up Mod TIME_DISSIP)=0) EndIf Next ;Rendu synchro RenderWorld frameTween# ;FPS counter fr = fr + 1 If MilliSecs() - frTime >= 1000 fps = fr fr = 0 frTime = MilliSecs() EndIf ;infos Color 255,255,255 Text 10,10,fps + " FPS" Text 10,20,TrisRendered() + " polys" Flip False Wend End ;Homing : 'Et ze homing bidouille, sans maths' ;@param ent : l'entité à orienter ;@param targ : l'entité servant de cible à atteindre ;@param sens : le degrés de 'turn' qu'on est près à appliquer à l'angle le plus approprié Function Homing(ent%, targ%, sens#=1) ;Horizontale MoveEntity ent,-.01,0,0 Local dist1#=EntityDistance#(ent,targ) MoveEntity ent,.02,0,0 Local dist2#=EntityDistance#(ent,targ) If dist1#<dist2# Then TurnEntity ent,0,sens#,0 Else TurnEntity ent,0,-sens#,0 EndIf ;Verticale MoveEntity ent,-.01,.01,0 dist1#=EntityDistance#(ent,targ) MoveEntity ent,0,-.02,0 dist2#=EntityDistance#(ent,targ) If dist1#<dist2# Then TurnEntity ent,-sens#,0,0 Else TurnEntity ent,sens#,0,0 EndIf MoveEntity ent,0,.01,0 End Function ;:::::::::::::::::::::::::::::: ; Trails Single Surface ; ; by LoKi(c)2007 ; blitzklan.free.fr ;:::::::::::::::::::::::::::::: Global TSS_SSmesh Global TSS_SSsurf Global TSS_Pivot Type TSS_TrailType Field index% Field ent% Field col% Field width# Field limit% Field x#[100] Field y#[100] Field z#[100] Field pitch%[100] Field yaw%[100] Field roll%[100] Field v1% Field v2% End Type Function TSS_Init() TSS_SSmesh = CreateMesh() TSS_SSsurf = CreateSurface(TSS_SSmesh) TSS_Pivot = CreatePivot() EntityFX TSS_SSmesh,1+2 EntityBlend TSS_SSmesh,3 End Function Function TSS_CreateTrail%(ent%, width#=1, col%=$FFFFFF, limit%=100) If ent=0 Then Return 0 Local trail.TSS_TrailType = New TSS_TrailType trailent = ent trailindex = 0 trailwidth = width trailcol = col If limit>100 Then limit=100 If limit<=0 Then Return 0 traillimit = limit Local x# = EntityX(trailent,1) Local y# = EntityY(trailent,1) Local z# = EntityZ(trailent,1) Local pitch% = EntityPitch(trailent,1) Local yaw% = EntityYaw(trailent,1) Local roll% = EntityRoll(trailent,1) For i=0 To traillimit-1 trailx[i] = x traily[i] = y trailz[i] = z trailpitch[i] = pitch trailyaw[i] = yaw trailroll[i] = roll Next Return Handle(trail) End Function Function TSS_AddPointEnt%(hdl_trail) Local trail.TSS_TrailType = Object.TSS_TrailType(hdl_trail) If trail=Null Then Return 1 Return TSS_AddPointXYZ(hdl_trail, EntityX(trailent,1), EntityY(trailent,1), EntityZ(trailent,1), EntityPitch(trailent), EntityYaw(trailent), EntityRoll(trailent)) End Function Function TSS_AddPointXYZ%(hdl_trail, x#, y#, z#, pitch%=0, yaw%=0, roll%=0) Local trail.TSS_TrailType = Object.TSS_TrailType(hdl_trail) If trail=Null Then Return 1 trailx[trailindex] = x traily[trailindex] = y trailz[trailindex] = z trailpitch[trailindex] = pitch trailyaw[trailindex] = yaw trailroll[trailindex] = roll trailindex = (trailindex + 1) Mod traillimit Return 0 End Function Function TSS_UpdateMesh%(update%=True) If update Then ClearSurface TSS_SSsurf Local tr%, v1%, v2%, i%,j% Local red%, green%, blue% For trail.TSS_TrailType = Each TSS_TrailType trailx[trailindex] = EntityX(trailent,1) traily[trailindex] = EntityY(trailent,1) trailz[trailindex] = EntityZ(trailent,1) trailpitch[trailindex] = EntityPitch(trailent,1) trailyaw[trailindex] = EntityYaw(trailent,1) trailroll[trailindex] = EntityRoll(trailent,1) red = ( trailcol And $FF0000 ) Shr 16 green = ( trailcol And $00FF00 ) Shr 8 blue = ( trailcol And $0000FF ) Shr 0 For j=0 To traillimit-1 i = (trailindex+1 + j) Mod traillimit PositionEntity TSS_Pivot, trailx[i], traily[i], trailz[i] RotateEntity TSS_Pivot, trailpitch[i], trailyaw[i], trailroll[i] MoveEntity TSS_Pivot, 0,(trailwidth/2),0 v1 = AddVertex (TSS_SSsurf, EntityX(TSS_Pivot,1), EntityY(TSS_Pivot,1), EntityZ(TSS_Pivot,1)) VertexColor TSS_SSsurf, v1, red, green, blue, Float(j)/traillimit MoveEntity TSS_Pivot, 0,-(trailwidth),0 v2 = AddVertex (TSS_SSsurf, EntityX(TSS_Pivot,1), EntityY(TSS_Pivot,1), EntityZ(TSS_Pivot,1)) VertexColor TSS_SSsurf, v2, red, green, blue, Float(j)/traillimit If v>65500 Then Return 1 If j>0 Then AddTriangle (TSS_SSsurf, tr+(j*2)-2, tr+(j*2)-1, tr+(j*2)) AddTriangle (TSS_SSsurf, tr+(j*2)-1, tr+(j*2)+1, tr+(j*2)) AddTriangle (TSS_SSsurf, tr+(j*2)-1, tr+(j*2)-2, tr+(j*2)) AddTriangle (TSS_SSsurf, tr+(j*2)+1, tr+(j*2)-1, tr+(j*2)) EndIf Next trailv1 = v1 trailv2 = v2 tr = tr + traillimit*2 Next Else For trail.TSS_TrailType = Each TSS_TrailType If trailv1=0 Then TSS_UpdateMesh(True) PositionEntity TSS_Pivot, EntityX(trailent,1), EntityY(trailent,1), EntityZ(trailent,1) RotateEntity TSS_Pivot, EntityPitch(trailent), EntityYaw(trailent), EntityRoll(trailent) MoveEntity TSS_Pivot, 0,(trailwidth/2),0 VertexCoords TSS_SSsurf,trailv1,EntityX(TSS_Pivot,1), EntityY(TSS_Pivot,1), EntityZ(TSS_Pivot,1) MoveEntity TSS_Pivot, 0,-(trailwidth),0 VertexCoords TSS_SSsurf,trailv2,EntityX(TSS_Pivot,1), EntityY(TSS_Pivot,1), EntityZ(TSS_Pivot,1) Next EndIf End Function