Break you monitor!

Community Forums/Showcase/Break you monitor!

chaos51(Posted 2007) [#1]
This code (see next posts) emulates on Blitz3d, the effect that your monitor is like a old broken TV. If you are old enough, you remember the random white noise pattern on a old TV, when no channel was found.

You can just copy and paste it into your Blitz3d to see it work. Use it for any purpose you see fit.

Don't worry, it's perfectly harmless, but great to scare someone, and tell them their monitor went KABOOM!!!

ps. Change the screenmode if you want, maybe you dont have a 32 bit mode in 640x480, then you could try 16 or 24


stayne(Posted 2007) [#2]
Inconclusive.


chaos51(Posted 2007) [#3]
Global g_frameTimer

AppTitle "Noise"

g_frameTimer=CreateTimer(50)
Graphics 640,480,32,0

Dim noiseblocks(4,256)

Init()

Game()

free()


Function game()

f=0
While 1=1
If(KeyHit(1)) Exit

f=f+1
If(f>40000) Then f=0
sel=f/8 Mod 4
If(sel>4) Then

DebugLog "overflow " + sel +" :" + f
sel=4
EndIf

bgnoise(sel,BackBuffer())

LimitFPS()
Flip
SetBuffer BackBuffer()

Wend

End Function

Function bgnoise(sel,buffer)

oldbuffer=GraphicsBuffer ()
SetBuffer buffer

For y=0 To 48


If(r<0) Then r=0

For x=0 To 64

r=Int(Rand(0,100))
XX=x*10
YY=y*10


DrawBlock noiseblocks(sel,r), XX,YY

Next
Next



SetBuffer buffer

End Function

Function init()

For t=0 To 100

noiseblocks(0,t)=CreateImage(10,10)
noiseblocks(1,t)=CreateImage(10,10)
noiseblocks(2,t)=CreateImage(10,10)
noiseblocks(3,t)=CreateImage(10,10)


For x=0 To 9 Step 1
For y=0 To 9 Step 1

col1=Int(Rand(0,64))
buffer=ImageBuffer(noiseblocks(0,t))
SetBuffer buffer
Color col1,col1,col1:Plot (x,y)



col1=Int(Rand(0,128))
buffer=ImageBuffer(noiseblocks(1,t))
SetBuffer buffer
Color col1,col1,col1:Plot (x,y)


col1=Int(Rand(0,192))
buffer=ImageBuffer(noiseblocks(2,t))
SetBuffer buffer
Color col1,col1,col1:Plot (x,y)


col1=Int(Rand(0,255))
buffer=ImageBuffer(noiseblocks(3,t))
SetBuffer buffer
Color col1,col1,col1:Plot (x,y)

Next
Next

Next
SetBuffer BackBuffer()
End Function

Function free()

For t=0 To 100
FreeImage noiseblocks(0,t)
FreeImage noiseblocks(1,t)
FreeImage noiseblocks(2,t)
FreeImage noiseblocks(3,t)
Next

End Function

Function LimitFPS()
;While MilliSecs()-g_lastmilliseconds < g_FPSTIME : Wend
WaitTimer(g_frameTimer)

End Function


puki(Posted 2007) [#4]
Oooh, I like this.

It's now mine.


Rob Farley(Posted 2007) [#5]
For want of not hijacking I thought I'd have a go too! Mine's certainly not as sophisticated!

Graphics 640,480,0,1
SeedRnd MilliSecs()
SetBuffer BackBuffer()

gh = GraphicsHeight()

bar = 0
barspeed# = Rand(10,20)

Repeat
	LockBuffer BackBuffer()
	l = Rand(0,gh)
	For y=0 To gh-1
		For x=0 To GraphicsWidth()-1
			c=Rand(0,2)
			If c=0 Then col = $FFFFFFFF 
			If c=1 Then col = $FF888888 
			If c=2 Then col = $FF000000
			
			If y>bar And y<(bar+20) And c<2 Then col = col - $FF222222
			If y = l Then col = $FFFFFFFF
			
			WritePixelFast x,y,col
		Next		
	Next 
	UnlockBuffer BackBuffer()
	
	bar = bar + barspeed
	barspeed = barspeed + (Rnd(-5,5))
	If bar > gh Or bar < 0 Then bar = Rand(0,gh):barspeed = Rand(10,20)
		
	VWait
	Flip False
Until KeyHit(1)



puki(Posted 2007) [#6]
I'll take that one too.


Yo! Wazzup?(Posted 2007) [#7]
No offense chaos51, but ¿'s is better.
[edit]
and I wasn't sure about looking at the topic when I saw the title :P


Rob Farley(Posted 2007) [#8]
And another....

You'll need this:


or something similar...

Graphics 640,480,0,1
SeedRnd MilliSecs()
SetBuffer BackBuffer()

bsod = LoadImage("bsod.png")

gh = GraphicsHeight()
roll# = 0
rollspeed# = Rand(5,10)
lock = MilliSecs() + Rand(3000,6000)
fixit = True


Repeat
	If fixit Then
		DrawBlock bsod,0,0
		If MilliSecs() > lock Then fixit = False: lock = MilliSecs() + Rand(500,6000)
	Else
		Cls
		l = Rand(0,20)
		DrawBlock bsod,l,roll
		DrawBlock bsod,l,roll-gh
		LockBuffer BackBuffer()
		t = Rand(0,gh-1)
		th = Rand(0,gh-1)
		If t+th>=gh Then th = gh-t-1
		
		For y=t To t+th
			For x=l To GraphicsWidth()-1
				c=Rand(0,2)
				If c=0 Then col = $FFFFFFFF 
				If c=1 Then col = $FF888888 
				If c=2 Then col = $FF000000
				WritePixelFast x,y,col
			Next		
		Next 
		
		roll = roll + rollspeed
		rollspeed = rollspeed + Rnd(-5,5)
		If roll > gh Then roll = roll - gh
		If roll < 0 Then roll = roll + gh
		If Abs(rollspeed) > 20 Then rollspeed = 0
		UnlockBuffer BackBuffer()
		If MilliSecs() > lock Then fixit = True: lock = MilliSecs() + Rand(500,1000)
	EndIf
	VWait
	Flip False
Until KeyHit(1)



Yo! Wazzup?(Posted 2007) [#9]
True... I downloaded that same pic from wikipedia. I used it an a "Is it Friday the 13th?" program :P


chaos51(Posted 2007) [#10]
True ¿'s is quite cool as well, the stripes make it more real... my goal was more to have it also run on low spec machines..

¿ wins, cheers mate :)

Lets put the BSOD also in there, then its totally scary.


Rob Farley(Posted 2007) [#11]
I didn't mean this as a competition, I simply thought it looked like a fun thing to write! Your code certainly runs on lower spec machines and is much less processor intensive.


big10p(Posted 2007) [#12]
This one I did in 3D, some time ago.

http://www.blitzbasic.com/codearcs/codearcs.php?code=1183


Yo! Wazzup?(Posted 2007) [#13]
Lets put the BSOD also in there

Here we go!
Graphics 800,600,0,1
SeedRnd MilliSecs()
SetBuffer BackBuffer()
bsod2=LoadImage("bsod.png")
gh = GraphicsHeight()
ClsColor 0,0,130
bar = 0
barspeed# = Rand(10,20)

Repeat
	LockBuffer BackBuffer()
	l = Rand(0,gh)
	For y=0 To gh-1
		For x=0 To GraphicsWidth()-1
			c=Rand(0,2)
			If c=0 Then col = $FFFFFFFF 
			If c=1 Then col = $FF888888 
			If c=2 Then col = $FF000000
			
			If y>bar And y<(bar+20) And c<2 Then col = col - $FF222222
			If y = l Then col = $FFFFFFFF
			
			WritePixelFast x,y,col
		Next		
	Next 
	UnlockBuffer BackBuffer()
	
	bar = bar + barspeed
	barspeed = barspeed + (Rnd(-5,5))
	If bar > gh Or bar < 0 Then bar = Rand(0,gh):barspeed = Rand(10,20)
		
	VWait
	Flip False
Until GetKey()
Cls
DrawImage bsod,100,100
Flip
Delay 10000
ClsColor 0,0,0
Cls
Text 0,0, "Gotcha!"
Flip
Delay 3000
End



Matty(Posted 2007) [#14]
If you are old enough, you remember the random white noise pattern on a old TV, when no channel was found.


- My TV is only 4 years old and I get that pattern when no channel is found.....


Grey Alien(Posted 2007) [#15]
Yo! Wazzup?: You forgot to put Flip after your DrawImage command. Also print won't work you'll need DrawTExt. Then another Flip.


Rob Farley(Posted 2007) [#16]
That's YOUR code is it Yo? Remarkable! Our coding style is very similar.


Yo! Wazzup?(Posted 2007) [#17]
That's YOUR code is it Yo? Remarkable! Our coding style is very similar.

:P
You know I was using your code and making it better.


chaos51(Posted 2007) [#18]
Just some background info.

Actually this code is a "straight port" from my version on the C64. My first version was in assembly running on the allmighty sixy four, using the same speed-inprovements then my program does now.

However the 64 being the 64 and all, the screenres was lower, and for speed reasons, text mode was used. However in the C64, you could modify all characters to looks like a picture. So I had 256 random-noise pictures , and the c64 choose from these at random, while filling the screen..

Anyway, it actually did work pretty well on the C64.

My second version, was without programming, directly on the Amiga, using deluxe paint, and palette scrolling. I got some pretty convincing results there as well.. Costing almost no CPU power..


Jeppe Nielsen(Posted 2007) [#19]
Just a small one:
Graphics3D 800,600,32
CreateCamera():q=CreateMesh():s=CreateSurface(q):AddVertex s,-1,1,1,0,0:AddVertex s,1,1,1,1,0:AddVertex s,1,-1,1,1,1:AddVertex s,-1,-1,1,0,1:AddTriangle s,0,1,2:AddTriangle s,0,2,3:EntityFX q,1
t=CreateTexture(256,256):b=TextureBuffer(t):SeedRnd MilliSecs()
For x=0 To 255:For y=0 To 255:If Rand(100)<60:WritePixel x,y,0,b:Else:WritePixel x,y,-1,b:EndIf:Next:Next
EntityTexture q,t
ScaleTexture t,0.45,0.45/0.75
Repeat
PositionTexture t,Rnd(0,5),Rnd(0,5)
RenderWorld
Flip 0 : Delay 25
Until KeyDown(1)



chaos51(Posted 2007) [#20]
Ah thats a beauty, so few lines of code... I will definitly analyse that code...

Here is a bit longer one, and probably the last I post on this subject.... Its a bit lame, especially the style of coding, but the effect is somewhat hypnotising....

-----------------------------------------------------------

Const g_width=640
Const g_height=480
Const g_bxw=2500
Const g_bxh=2200
Const xstep=28
Const ystep=2
Dim xstepa(2)
Dim ystepa(2)
Dim noiseblocks(4,256)
Graphics g_width,g_height,32,0
SetBuffer BackBuffer()
Dim cosi3q#(g_width)
Dim sinmini4q#(g_width)
Dim cosmini4q#(g_width)
Dim cosj5q#(g_height)
Dim sinj2q#(g_height)
Dim sinminj2q#(g_height)
Dim cosminj2q#(g_height)

Dim sina#(g_height+g_width)
Dim cosa#(g_height+g_width)
For t=1 To g_width+g_height
sina#(t)=Sin(t)
cosa#(t)=Cos(t)
Next
bx#=0
by#=0
bxrc#=1.1
byrc#=1.1
Q=290
a=0
xstepa(0)=xstep
ystepa(0)=ystep
xstepa(1)=ystep
ystepa(1)=xstep
flipper=0

aa2=1
Init()

While Not KeyDown (1)

SetBuffer BackBuffer()

Q(Q,R2#,g_width,g_height,rf#,gf#,bf#)
a=a+2
If(a>360) a=0
aa2=aa2+1
If(a>360) a=0
s#=(-Cos(-a*1.5)+1)+(Cos(a*6.1)+1) * 2
s2#=(Cos(a*1.5)+1)+(Sin(-a*1.2)+1) * 2

rf#=Cos(aa2*2)
gf#=Cos(aa2*3)-Cos(a*2)
bf#=Sin(aa2*4)+Cos(a)
rf#=(rf#+1)*2
gf#=(gf#+1)*3
bf#=(bf#+1)*4

bx#=bx#+bxrc# *s2*2
by#=by#+byrc# *s *2
If(bx#>g_bxw) bx#=(g_bxw)-1 : bxrc#=-Rnd(1,4.8)
If(by#>g_bxh) by#=(g_bxh)-1 : byrc#=-Rnd(1,4.8)
If(bx#<-g_bxw) bx#=0 : bxrc#=Rnd(1,4.8)
If(by#<-g_bxh) by#=0 : byrc#=Rnd(1,4.8)


rc#=s#*32

Q=bx#
R=by#
R2#=R
R2#=R2#/200
R2#=.5+R2#
bgnoise(2,BackBuffer())
LimitFPS()
Flip
Wend
free()

Function Q(Q,P#,bw,bh,rf#,gf#,bf#)
mousewaiter=0
interlace=0

rsizeangle#=0
roffsetangle#=0
gsizeangle#=0
goffsetangle#=0
bsizeangle#=0
boffsetangle#=0
angle0step#=.3
angle1step#=.1
angle2step#=.15
angle3step#=.07
angle4step#=.12
angle5step#=.08

q=Q

For x=1 To bw Step xstep
i#=x
i#=i#*P
i3=i/3
i4=i/4
i5=i/5
cosi3q#(x)=Cos(i3+q)
sinmini4q#(x)=Sin(-(i4)+q)
cosmini4q#(x)=Cos(-(i4)+q)
Next

For y=1 To bh Step ystep

j#=y
j#=j#*P

j8=j/8
j2=j/2
j5=j/5
cosj5q#(y)=Cos(j5+Q)
sinj2q#(y)=Sin(j2+Q)
sinminj2q#(y)=Sin(-(j2)+q)
cosminj2q#(y)=Cos(-(j2)+q)
Next

For x=1 To bw Step xstep

For y=1 To bh Step yStep

i#=x
i#=i#*P
j#=y
j#=j#*P

r#=128
g#=128
b#=128
j8=j/8
j2=j/2
i3=i/3
i4=i/4
i5=i/5
cosjiq#=Cos(j+(i)+Q)

sinj8iq#=Sin((j8)+i+q)

r=Cos((j8)+i+q)+cosjiq+sinminj2q(y)+cosi3q(x)+sinmini4q#(x)+cosj5q(y)
r=(r*64)+128
g=sinj8iq+cosjiq+cosminj2q(y)+cosi3q(x)+cosmini4q#(x)+cosj5q(y)
g=(g*64)+128
b=sinj8iq+Sin(-j+(i4)+q)+sinj2q(y)+cosi3q#(x)+sinmini4q(x)+cosj5q(y)
b=(b*64)+128

r=r*rf#
g=g*gf#
b=b*bf#
If(r#>255) r#=255
If(g#>255) g#=255
If(b#>255) b#=255
If(r#<0) r#=0
If(g#<0) g#=0
If(b#<0) b#=0

Color(r#,g#,b#)
Rect x,y, xstep,ystep,1

Next

Next
End Function

Function LimitFPS()
While MilliSecs()-g_lastmilliseconds < g_FPSTIME : Wend
End Function
Function init()
For t=0 To 100
noiseblocks(0,t)=CreateImage(10,10)
noiseblocks(1,t)=CreateImage(10,10)
noiseblocks(2,t)=CreateImage(10,10)
noiseblocks(3,t)=CreateImage(10,10)

For x=0 To 9 Step 1
For y=0 To 9 Step 1
col1=Int(Rand(0,4)) * 16
buffer=ImageBuffer(noiseblocks(0,t))
SetBuffer buffer
Color col1,col1,col1:Plot (x,y)

col1=Int(Rand(0,4)) * 32
buffer=ImageBuffer(noiseblocks(1,t))
SetBuffer buffer
Color col1,col1,col1:Plot (x,y)

col1=Int(Rand(0,4)) * 48
buffer=ImageBuffer(noiseblocks(2,t))
SetBuffer buffer
Color col1,col1,col1:Plot (x,y)

col1=Int(Rand(0,4)) * 63
buffer=ImageBuffer(noiseblocks(3,t))
SetBuffer buffer
Color col1,col1,col1:Plot (x,y)

Next
Next
Next
SetBuffer BackBuffer()
End Function
Function free()
For t=0 To 100
FreeImage noiseblocks(0,t)
FreeImage noiseblocks(1,t)
FreeImage noiseblocks(2,t)
FreeImage noiseblocks(3,t)
Next
End Function

Function bgnoise(sel,buffer)
oldbuffer=GraphicsBuffer ()
SetBuffer buffer
For y=0 To 48


If(r<0) Then r=0

For x=0 To 64
r=Int(Rand(0,100))
XX=x*10
YY=y*10

DrawImage noiseblocks(sel,r), XX,YY
Next
Next


SetBuffer buffer
End Function