Restored from previous forum. Originally posted by benny.
Hello,
maybe someone likes this oldschool-fx [ could also be found on the
resource site ]
Have a nice day ...
benny
Code: Select all
; some stars
; benny! 2oo2
#scrw = 640
#scrh = 480
#centerofscrw = #scrw/2
#centerofscrh = #scrh/2
#scrd = 16
SSum.w = 1000 ; Amount of Stars
Gosub InitStarField
;-------- Init all needed Stuff --------
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0
MessageRequester("Error", "Can't open DirectX 7 or later", #PB_MessageRequester_Ok)
End
EndIf
If OpenScreen(#scrw,#scrh,#scrd,"benny's code", #PB_Screen_SmartSynchronization) = 0
MessageRequester("Error", "Could not open screen", #PB_MessageRequester_Ok)
End
EndIf
SetFrameRate(90)
;-------- MainLoop --------
Repeat
ClearScreen(RGB(0,0,0))
StartDrawing(ScreenOutput())
DrawingMode(1)
Gosub DoStarField
StopDrawing()
FlipBuffers()
ExamineKeyboard()
Until KeyboardPushed(#PB_Key_Escape)
End
;--------- Procs / Subs -------------
; #### INITSTARFIELD ####
InitStarField:
; Structure of a star ...
Structure _3DStar
x.f ; X-Coordinate
y.f ; Y-Coordinate
z.f ; Z-Coordinate
zv.f ; Z-Velocity
EndStructure
; Init Starfield ...
Dim Stars._3DStar(SSum)
For dummy = 0 To SSum
Stars(dummy)\x = Random(1000)-500
Stars(dummy)\y = Random(1000)-500
Stars(dummy)\z = 100 + Random(900)
Stars(dummy)\zv = 0.5 + Random (45)/10
Next dummy
Return
; #### DoStarField ####
DoStarField:
For dummy = 0 To SSum
Stars(dummy)\z = Stars(dummy)\z - Stars(dummy)\zv ; Star comes closer ....
SX = Stars(dummy)\x / Stars(dummy)\z * 100 + #centerofscrw
SY = Stars(dummy)\y / Stars(dummy)\z * 100 + #centerofscrh
If SX >= #scrw Or SY >= #scrh Or Stars(dummy)\z < 1
Stars(dummy)\x = Random(1000)-500
Stars(dummy)\y = Random(1000)-500
Stars(dummy)\z = 100 + Random(900)
Stars(dummy)\zv = 0.5 + ( Random(45) / 10 )
Else
b = 255 - (Stars(dummy)\z *(255./1000.)) ; Calc the color of star
Debug "sx: " + sx
Debug "sy: " + sy
If SX > 0 And SY > 0 And SX < #scrw And SY < #scrh
Plot ( SX, SY, RGB ( b,b,b ) )
EndIf
EndIf
Next dummy
Return