Author Topic: BlitzBasic : Novell screensaver routine[BB2D]  (Read 3377 times)

0 Members and 1 Guest are viewing this topic.

Offline Dad1916

  • Atari ST
  • ***
  • Posts: 112
  • Karma: 3
    • View Profile
"Another blast from the past, only that a lot of people still use this oldie...I think the old screensaver from Novell is quite nice, so i remade it in BB.This can easily be converted to a "real" screensaver, use arrow keys for changes."

BB-Ver. 1.48

Posted with permission of the author Einar Wedoe of http://blitzbasic.no/
Exe here http://blitzbasic.no/div/novell.zip


Code: [Select]
AppTitle "Novell screensaver"

; Version 2.0
; Februar 2001
; Made by Einar Wedoe
; Programtype: Novell server screensaver look-a-like
; Use arrow-keys to change speed and length of tail !


Graphics 800,600,16,1 ; Sett Grphics mode
Color 255,0,0 ; Set Color

Global x=400 ; Leader-dot-x-pos
Global y=300 ; Leader-dot-y-pos
Global direction=1 ; Direction variable
Global directiontmp=0 ; Temporary direction variable
Global round=10 ; How long between every change of direction ?
Global roundcount=0 ; Counter for the rounds
Global speed#=3 ; Speed
Global speedcount=1 ; Counter for speed
Global length=35 ; Initial tail-length
Global show=0 ; Variable for showing speed and length on screen

Dim tailX(100) ; Tail x can be up to 1000 blocks long
Dim tailY(100) ; Tail y can be up to 1000 blocks long

For a=1 To 100 ; Set the current tail off the screen
 tailx(a)=-20
 taily(a)=-20
Next

SeedRnd MilliSecs() ; Make random even more random
Global frametimer=CreateTimer(75) ; Set up timer to make everything run nice on all PC's
SetBuffer BackBuffer() ; Start dobbelbuffering
;-----------------------------------------
.start ; Mainloop

While Not KeyHit(1) ; Loop until ESC is pressed
WaitTimer(frametimer) ; Wait....
Cls ; Clean up

novell ; Do stuff
changespeedortail ; Wanna change speed or/and tail ?

Flip ; Change buffer
Wend ; Next round please
End
;-----------------------------------------
Function novell() ; Start the function to actually put something on the screen
speedcount=speedcount+1
 If speed > speedcount Then Goto draw

Select direction ; Moving blocks about
Case 1
x=x-11
y=y-13

Case 2
y=y-13

Case 3
y=y-13
x=x+11

Case 4
x=x+11

Case 5
x=x+11
y=y+13

Case 6
y=y+13

Case 7
x=x-11
y=y+13

Case 8
x=x-11
End Select

speedcount=0
border ; Check if we hit the border
If direction=100 Then  roundcount=round+1 ; If we did, do something about it !
directiontest ; Check if time for change of direction

For a=length To 1 Step-1 ; Move the x and y down the line
tailx(a+1)=tailx(a)
taily(a+1)=taily(a)
Next
tailx(1)=x ; Put x in the end of the line
taily(1)=y ; Put y in the end of the line


.draw


colordrop=255/length ; Find how much to drop color pr. rect
colortmp=0 ; Set color to 0
For a=length To 1 Step -1 ; Draw tail
  Color colortmp,0,0 ; Set color for current rect
  Rect tailx(a),taily(a),10,12,1 ; Draw current rect
  colortmp=colortmp+colordrop ; Count up color
Next


End Function
;-----------------------------------------
Function border() ; Set direction to 100 if border is reached
Select direction
Case 1
If x < 15 Or y < 5 Then direction=100
Case 2
If y < 5 Then direction=100
Case 3
If x > 780 Or y < 5 Then direction=100
Case 4
If x > 780 Then direction=100
Case 5
If x > 780 Or y > 585 Then direction=100
Case 6
If y > 585 Then direction=100
Case 7
If x < 15 Or y > 585 Then direction=100
Case 8
If x < 15 Then direction=100
End Select
End Function
;-----------------------------------------
Function directiontest() ; Find new direction if it's time
roundcount=roundcount+1
If roundcount > round Then ; Time for a change
  directiontmp=direction ; Temporary store old direction
.findnewdirection   direction=Rand(8) ; Find new direction
      If direction=directiontmp Then Goto findnewdirection ; If it's the same then try again
  border ; Check for border
  If direction=100 Then Goto findnewdirection ; Bounce border
  roundcount=0 ; Reset counter
  round=Rand(20) ; Set new point for change of direction again
  EndIf


End Function
;-----------------------------------------
Function changespeedortail() ; Change things
If KeyDown(200) And length < 99 Then ; Add length of tail if arrow-up is pressed
length=length+1 ; All length by 1
tailx(length)=-20 ; Set new x-part of tail offscreen
taily(length)=-20 ; Set new x-part of tail offscreen
show=255 ; Set show variable to print to scren for 200 rasters
EndIf
If KeyDown(208) And length > 5 Then ; Decrease length of tail if arrow down is pressed
length=length-1 ; Dec by 1
show=255 ; Set show variable to print to scren for 200 rasters
EndIf
If KeyDown(203) And speed < 10 Then ; Add speed if arrow-right is pressed
speed=speed+0.05 ; Add speed by 0.05
show=255 ; Set show variable to print to scren for 200 rasters
EndIf
If KeyDown(205) And speed > 1 Then ; Dec speed if arrow-left is pressed
speed=speed-0.05 ; Dec speed by 0.05
show=255 ; Set show variable to print to scren for 200 rasters
EndIf
show=show-1 ; Decrease show-variable
If show < 0 Then show=0 ; If show drops below zero keep it on zero
If show > 0 Then ; If show-variable is activated
Color show,0,0 ; Fade away text
Text 0,0, "Length: "+length ; Show length
Text 0,12,"Speed:  "+Int(10-speed+1) ; Show speed but since speed is oposite of normal recalculate it
EndIf

End Function
;-------------------------

« Last Edit: July 21, 2007 by Shockwave »

Offline Dad1916

  • Atari ST
  • ***
  • Posts: 112
  • Karma: 3
    • View Profile
Re: BlitzBasic : Novell screensaver routine
« Reply #1 on: August 18, 2006 »
I must saw I really like this effect, must try porting it to BlitzMax. Thanks Einar. O0 O0

Offline Shockwave

  • good/evil
  • Founder Member
  • DBF Aficionado
  • ********
  • Posts: 17409
  • Karma: 498
  • evil/good
    • View Profile
    • My Homepage
Re: BlitzBasic : Novell screensaver routine
« Reply #2 on: August 18, 2006 »
Impeccably commented and cute too :)
Shockwave ^ Codigos
Challenge Trophies Won:

Offline Dad1916

  • Atari ST
  • ***
  • Posts: 112
  • Karma: 3
    • View Profile
Re: BlitzBasic : Novell screensaver routine
« Reply #3 on: August 19, 2006 »
It is indeed. Ported it to BlitzMax here... http://dbfinteractive.com/index.php?topic=563.0

Offline Shockwave

  • good/evil
  • Founder Member
  • DBF Aficionado
  • ********
  • Posts: 17409
  • Karma: 498
  • evil/good
    • View Profile
    • My Homepage
Re: BlitzBasic : Novell screensaver routine
« Reply #4 on: August 19, 2006 »
Nice one :)
Shockwave ^ Codigos
Challenge Trophies Won: