My little lightning bolts!
Edit: Picture:

http://s87776868.onlinehome.us/stuff/lightning.zip
The little 'rods' are just Blitz primitives.
Source:
Edit: Picture:

http://s87776868.onlinehome.us/stuff/lightning.zip
The little 'rods' are just Blitz primitives.
Source:
;use the arrow keys to move Graphics3D 800,600,32,Int(Input$("Windowed: (0 or 1) "))+1 Include "h_lotus.bb" InitLotus() ;; CAMERA C = CreateCamera() PositionEntity C,-10,10,-10 CameraClsColor C,32,32,32 CameraClsMode C,1,1 CameraRange C,.01,10000 SetLotusCamera C ;; FPS MFPS = 45 Period = 1000/MFPS Time = MilliSecs()-Period Global fps,timenext,frames ;; LIGHT L = CreateLight(2) PositionEntity L,24,24,24 LightRange L,Sqr(64*64*3)/4 LightColor L,255,255,255 AmbientLight 128,128,128 ;;EMITTERS Global gLightning gLightning = LoadEmitter("media/ln.png") SetEmitterParticleMesh gLightning,cP_TRAIL SetEmitterSizeFrom gLightning,2,2 SetEmitterColorTo 0,255,255,255,1 SetEmitterBlend 0,3 SetEmitterSizeTo 0,2,2 SetEmitterRandomRotation 0,0,10,0,0,-10 SetEmitterAngle 0,0,0,90 Function Strike(X#,Y#,Z#,TX#,TY#,TZ#,AX#,AY#,AZ#,Amount,Chaos#) SetEmitterLifeSpan 0,Rand(3,14) DX# = TX-X DY# = TY-Y DZ# = TZ-Z Chaos# = Abs(Chaos) For N# = 0 To Amount From# =N/Float(Amount) If N = Amount Or N = 0 Then SetEmitterColorFrom 0,0,0,0,0 SetEmitterColorTo 0,0,0,0,0 If N = 0 Then SetEmitterPosition gLightning,X,Y,Z Else SetEmitterPosition gLightning,TX,TY,TZ EndIf Else SetEmitterPosition gLightning,X+DX*From+Sin(From*180)*AX+Rnd(-Chaos/2,Chaos/2),Y+DY*From+Sin(From*180)*AY+Rnd(-Chaos/2,Chaos/2),Z*DZ*From+Sin(From*180)*AZ+Rnd(-Chaos/2,Chaos/2) SetEmitterColorFrom 0,220,255,255,1 SetEmitterColorTo 0,220,255,255,1 EndIf CreateParticle gLightning Next End Function Te = 250 S = CreateSphere() PositionEntity S,-10,20,0 S = CopyEntity(S) PositionEntity S,10,20,0 L = CreateCylinder() PositionEntity L,-10,10,0 ScaleEntity L,.2,10,.2 L = CopyEntity(L) PositionEntity L,10,10,0 Repeat Repeat Elapsed = MilliSecs() - time Until Elapsed Ticks=Elapsed/Period Tween#=Float(Elapsed Mod Period) / Float(Period) For U = 0 To Ticks Time = Time + Period Y# = Y + .2 If Y > 20 Then Y = 0 EndIf ;For N = 0 To Rand(0,5) Strike -10,Y,0,10,Y,0,Rnd(-2,2)*Y/20,Y/3,Rnd(-2,2)*Y/20,Rand(3,10),1.8 ;Next ;; UPDATE CAMERA mxs# = mxs + Float(MouseXSpeed())/3 mys# = mys + Float(MouseYSpeed())/3 mxs = mxs - mxs/4 mys = mys - mys/4 TurnEntity C,mys,-mxs,0 RotateEntity C,Min(Max(EntityPitch(C),80),-80),EntityYaw(C),0 MoveEntity C,(KeyDown(205)-KeyDown(203))*2,0,(KeyDown(200)-KeyDown(208))*2 MoveMouse GraphicsWidth()/2,GraphicsHeight()/2 ;; ;; UPDATE PARTICLES T = MilliSecs() UpdateLotusParticles() T = MilliSecs() - T UpdateWorld If U = Ticks Then CaptureWorld Next RenderWorld Tween ; AppTitle GetFPS(False) Text 2,2,"FPS: "+GetFPS(False) Text 2,22,T Text 2,42,"Particles: "+gLotusParticleCount Flip False Until KeyHit(1) KillLotus() Function GetFPS(JustChecking = False) If Not JustChecking Then frames = frames+1 If MilliSecs() > timenext Then timenext = MilliSecs()+1000 fps = frames frames = 0 EndIf Return fps End Function