|
Post by honky on Feb 24, 2024 13:34:13 GMT
Hello, good morning, The stars are attracted to the center. But is there a way to stop them to form a circle around the center? Why do the stars pass the border? NOMAINWIN mapw=570: maph=460 WindowWidth = 600: WindowHeight = 500 UpperLeftX = (DisplayWidth-WindowWidth)-200 UpperLeftY = 20 ' (DisplayHeight-WindowHeight) GRAPHICBOX #w.m 5, 5, mapw, maph OPEN "Help" FOR window_nf AS #w #w, "TRAPCLOSE [closeHelp]" #w.m , "down": #w.m , "fill black;size 1" dur=1 ': #w.dur, str$(dur) midx=int(mapw/2): midy=int(maph/2) pi2 = 6.283185: stepSize = pi2/180: ax=midx: ay=midy: radius=25 dim cx(300),cy(300),cs(300) for x=1 to 250 [ret] #w.m , "color white" valx=int(600*(rnd(1))) 'numéro aléatoire valy=int(500*(rnd(1))) vals=int(4*(rnd(1))): #w.m, "size ";vals If valx = 0 or valy=0 then goto [ret]'annuler si chiffre aléatoire = 0 n=n+1: cx(n)=valx: cy(n)=valy: cs(n)=vals #w.m, "set ";valx;" ";valy next x #w.m , "color red;backcolor black" For i = stepSize to pi2 Step stepSize scan nx = Cos(i+j)*radius + ax ny = Sin(i+j)*radius + ay #w.m, "set ";nx;" ";ny Next i n=1 while t=0 scan #w.m , "color white": #w.m , "size ";cs(n) #w.m, "set ";cx(n);" ";cy(n) gosub [pause] #w.m , "color black; backcolor black" #w.m, "place ";cx(n)-2;" ";cy(n)-2: #w.m, "boxfilled ";cx(n)+2;" ";cy(n)+2 if cx(n) < midx then cx(n)=cx(n)+1 if cx(n) > midx then cx(n)=cx(n)-1 if cy(n) < midy then cy(n)=cy(n)+1 if cy(n) > midy then cy(n)=cy(n)-1 'accrétion disk For i = stepSize to pi2 Step stepSize scan nx = Cos(i+j)*radius + ax ny = Sin(i+j)*radius + ay if cx(n)=nx or cx(n)=nx-1 or cx(n)=nx-2 or cx(n)=nx-3 or cx(n)=nx-4 or_ cx(n)=nx+1 or cx(n)=nx+2 or cx(n)=nx+3 or cx(n)=nx+4 then cx(n)=nx if cy(n)=ny or cy(n)=ny-1 or cy(n)=ny-2 or cy(n)=ny-3 or cy(n)=ny-4 or_ cy(n)=ny+1 or cy(n)=ny+2 or cy(n)=ny+3 or cy(n)=ny+4 then cy(n)=ny Next i #w.m , "color white": #w.m , "size ";cs(n) #w.m, "set ";cx(n);" ";cy(n) #w.m , "discard" n=n+1 if n >= 251 then n=n-250 wend wait [pause] timer dur, [temps] wait [temps] timer 0 return wait [closeHelp] CLOSE #w END
|
|
|
Post by cundo on Feb 24, 2024 20:00:39 GMT
You mean the red circle at the center?
|
|
|
Post by honky on Feb 25, 2024 7:02:39 GMT
The red circle is there to see what is going on, this is the limit that the stars should not cross. The test is lines 48 to 52
|
|
|
Post by tsh73 on Feb 25, 2024 9:53:50 GMT
honky, basically
nx = Cos(i+j)*radius + ax ny = Sin(i+j)*radius + ay
is floating-point values so condition
if cx(n)=nx or cx(n)=nx-1 or cx(n)=nx-2 or cx(n)=nx-3 or cx(n)=nx-4 or_ cx(n)=nx+1 or cx(n)=nx+2 or cx(n)=nx+3 or cx(n)=nx+4 then cx(n)=nx
will never evaluate to True.
You can try to add INT()
nx = INT(Cos(i+j)*radius + ax) ny = INT(Sin(i+j)*radius + ay)
Or use some other method of checking if you are in that circle (like, a^2+b^2<=radius^2)
|
|
|
Post by tsh73 on Feb 25, 2024 9:54:58 GMT
Here is it with (a^2+b^2<=radius^2) condition I commented out
'gosub [pause] and now it really RUNS
NOMAINWIN mapw=570: maph=460 WindowWidth = 600: WindowHeight = 500 UpperLeftX = (DisplayWidth-WindowWidth)-200 UpperLeftY = 20 ' (DisplayHeight-WindowHeight) GRAPHICBOX #w.m 5, 5, mapw, maph OPEN "Help" FOR window_nf AS #w #w, "TRAPCLOSE [closeHelp]" #w.m , "down": #w.m , "fill black;size 1" dur=1 ': #w.dur, str$(dur) midx=int(mapw/2): midy=int(maph/2) pi2 = 6.283185: stepSize = pi2/180: ax=midx: ay=midy: radius=25 dim cx(300),cy(300),cs(300) N=250 'N=25 for x=1 to N [ret] #w.m , "color white" valx=int(600*(rnd(1))) 'numйro alйatoire valy=int(500*(rnd(1))) vals=int(4*(rnd(1))): #w.m, "size ";vals If valx = 0 or valy=0 then goto [ret]'annuler si chiffre alйatoire = 0 n=n+1: cx(n)=valx: cy(n)=valy: cs(n)=vals #w.m, "set ";valx;" ";valy next x #w.m , "color red;backcolor black" For i = stepSize to pi2 Step stepSize scan nx = Cos(i+j)*radius + ax ny = Sin(i+j)*radius + ay #w.m, "set ";nx;" ";ny Next i
n=1 while t=0 scan #w.m , "color white": #w.m , "size ";cs(n) #w.m, "set ";cx(n);" ";cy(n) 'gosub [pause] #w.m , "color black; backcolor black" #w.m, "place ";cx(n)-2;" ";cy(n)-2: #w.m, "boxfilled ";cx(n)+2;" ";cy(n)+2 if cx(n) < midx then newX=cx(n)+1 if cx(n) > midx then newX=cx(n)-1 if cy(n) < midy then newY=cy(n)+1 if cy(n) > midy then newY=cy(n)-1 'accrйtion disk if (newX-ax)^2+(newY-ay)^2>radius^2 then 'move only if far enough cx(n)=newX cy(n)=newY end if
' For i = stepSize to pi2 Step stepSize ' scan ' nx = Cos(i+j)*radius + ax ' ny = Sin(i+j)*radius + ay ' if cx(n)=nx or cx(n)=nx-1 or cx(n)=nx-2 or cx(n)=nx-3 or cx(n)=nx-4 or_ ' cx(n)=nx+1 or cx(n)=nx+2 or cx(n)=nx+3 or cx(n)=nx+4 then cx(n)=nx ' if cy(n)=ny or cy(n)=ny-1 or cy(n)=ny-2 or cy(n)=ny-3 or cy(n)=ny-4 or_ ' cy(n)=ny+1 or cy(n)=ny+2 or cy(n)=ny+3 or cy(n)=ny+4 then cy(n)=ny ' Next i #w.m , "color white": #w.m , "size ";cs(n) #w.m, "set ";cx(n);" ";cy(n) #w.m , "discard" n=n+1 if n > N then n=1 wend wait [pause] timer dur, [temps] wait [temps] timer 0 return wait [closeHelp] CLOSE #w END
|
|
|
Post by honky on Feb 25, 2024 10:43:05 GMT
And it's really perfect. Well done !! "Floating-point values": A hell of a trap. (a^2+b^2<=radius^2) condition --> A very powerful method, to remember preciously. Big thank you Anatoly, best of the world !
But what is that ?--> "if n > N then n=1"
|
|
|
Post by tsh73 on Feb 25, 2024 11:21:38 GMT
It looks like n is current point It starts from 1 and goes n=n+1 So it has to reset to 1 then it reached end (250 in inital program)
Realy you could use for n=1 to N instead.
|
|
|
Post by honky on Feb 25, 2024 11:41:07 GMT
Ah yes, I was disturbed by the message: "Similar variables: N, n" I replace "n" with "endn" (contraction of "end" and "n"). It's ok.
|
|
|
Post by plus on Feb 25, 2024 21:15:00 GMT
Here is it with (a^2+b^2<=radius^2) condition I commented out 'gosub [pause] and now it really RUNS NOMAINWIN mapw=570: maph=460 WindowWidth = 600: WindowHeight = 500 UpperLeftX = (DisplayWidth-WindowWidth)-200 UpperLeftY = 20 ' (DisplayHeight-WindowHeight) GRAPHICBOX #w.m 5, 5, mapw, maph OPEN "Help" FOR window_nf AS #w #w, "TRAPCLOSE [closeHelp]" #w.m , "down": #w.m , "fill black;size 1" dur=1 ': #w.dur, str$(dur) midx=int(mapw/2): midy=int(maph/2) pi2 = 6.283185: stepSize = pi2/180: ax=midx: ay=midy: radius=25 dim cx(300),cy(300),cs(300) N=250 'N=25 for x=1 to N [ret] #w.m , "color white" valx=int(600*(rnd(1))) 'numйro alйatoire valy=int(500*(rnd(1))) vals=int(4*(rnd(1))): #w.m, "size ";vals If valx = 0 or valy=0 then goto [ret]'annuler si chiffre alйatoire = 0 n=n+1: cx(n)=valx: cy(n)=valy: cs(n)=vals #w.m, "set ";valx;" ";valy next x #w.m , "color red;backcolor black" For i = stepSize to pi2 Step stepSize scan nx = Cos(i+j)*radius + ax ny = Sin(i+j)*radius + ay #w.m, "set ";nx;" ";ny Next i
n=1 while t=0 scan #w.m , "color white": #w.m , "size ";cs(n) #w.m, "set ";cx(n);" ";cy(n) 'gosub [pause] #w.m , "color black; backcolor black" #w.m, "place ";cx(n)-2;" ";cy(n)-2: #w.m, "boxfilled ";cx(n)+2;" ";cy(n)+2 if cx(n) < midx then newX=cx(n)+1 if cx(n) > midx then newX=cx(n)-1 if cy(n) < midy then newY=cy(n)+1 if cy(n) > midy then newY=cy(n)-1 'accrйtion disk if (newX-ax)^2+(newY-ay)^2>radius^2 then 'move only if far enough cx(n)=newX cy(n)=newY end if
' For i = stepSize to pi2 Step stepSize ' scan ' nx = Cos(i+j)*radius + ax ' ny = Sin(i+j)*radius + ay ' if cx(n)=nx or cx(n)=nx-1 or cx(n)=nx-2 or cx(n)=nx-3 or cx(n)=nx-4 or_ ' cx(n)=nx+1 or cx(n)=nx+2 or cx(n)=nx+3 or cx(n)=nx+4 then cx(n)=nx ' if cy(n)=ny or cy(n)=ny-1 or cy(n)=ny-2 or cy(n)=ny-3 or cy(n)=ny-4 or_ ' cy(n)=ny+1 or cy(n)=ny+2 or cy(n)=ny+3 or cy(n)=ny+4 then cy(n)=ny ' Next i #w.m , "color white": #w.m , "size ";cs(n) #w.m, "set ";cx(n);" ";cy(n) #w.m , "discard" n=n+1 if n > N then n=1 wend wait [pause] timer dur, [temps] wait [temps] timer 0 return wait [closeHelp] CLOSE #w END
100% better but still WTH? is the black "hole" the cross hairs of mid x and y screen ? very strange And shouldm't gravity pull more as a body gets closer ie body accelerate as it approaches black hole? Like we fall faster from 10 story building from 1 floor than from 10th specially if no air around to offer resistence. It'd be the reverse of Star Trek in warp drive. b = b + ...
|
|
|
Post by plus on Feb 25, 2024 22:14:14 GMT
Like this!
global H$, XMAX, YMAX H$ = "gr" Xmax = 600 '<======================================== actual drawing space needed Ymax = 600 '<======================================== actual drawing space needed
nomainwin
WindowWidth = Xmax + 8 WindowHeight = Ymax + 32 UpperLeftX = (DisplayWidth - Xmax) / 2 'or delete if XMAX is 1200 or above UpperLeftY = (DisplayHeight - Ymax) / 2 'or delete if YMAX is 700 or above
open "Black Hole Attractor" for graphics_nsb_nf as #gr #gr "trapclose quit" #gr "size 1" #gr "down" #gr "fill 60 0 30"
nstars = 100 Dim sx(nstars), sy(nstars), sr(nstars) cx = 300: cy = 300 'setup start stars For i = 1 To nstars sx(i) = Rnd(0) * 600 sy(i) = Rnd(0) * 600 sr(i) = Rnd(0) * 3 + 1 Next Do #gr "fill 60 0 30" 'show stars #gr "color 200 200 200" #gr "backcolor 255 255 255" For i = 1 To nstars 'Circle (sx(i), sy(i)), sr(i) #gr "place ";sx(i);" ";sy(i);"; circlefilled ";sr(i) 'now update stars falling into black hole dx = cx - sx(i): dy = cy - sy(i) d = (dx * dx + dy * dy) ^ .5 If d < 50 Then 'black hole radius call newStar i Else ' move it dx = 50 * dx / (d * d) dy = 50 * dy / (d * d) sx(i) = sx(i) + dx sy(i) = sy(i) + dy End If Next #gr "color 128 0 0" #gr "backcolor 0 0 0" #gr "place ";cx;" ";cy;"; circlefilled ";50 call pause 30 Loop until something
Sub newStar i r = Int(Rnd(0) * 4) ' 0 to 3 Select Case r Case 0 sx(i) = Rnd(0) * 600 sy(i) = 0 Case 1 sx(i) = Rnd(0) * 600 sy(i) = 599 Case 2 sy(i) = Rnd(0) * 600 sx(i) = 0 Case 3 sy(i) = Rnd(0) * 600 sx(i) = 599 End Select End Sub
sub quit H$ close #gr end end sub
sub pause mil 'tsh version has scan built-in t0 = time$("ms") while time$("ms") < t0 + mil : scan : wend end sub
b = b + ...
|
|
|
Post by plus on Feb 26, 2024 0:23:49 GMT
Even better!
global H$, XMAX, YMAX H$ = "gr" Xmax = 600 '<======================================== actual drawing space needed Ymax = 600 '<======================================== actual drawing space needed
nomainwin
WindowWidth = Xmax + 8 WindowHeight = Ymax + 32 UpperLeftX = (DisplayWidth - Xmax) / 2 'or delete if XMAX is 1200 or above UpperLeftY = (DisplayHeight - Ymax) / 2 'or delete if YMAX is 700 or above
open "Spinning Black Hole Attractor" for graphics_nsb_nf as #gr #gr "trapclose quit" #gr "size 1" #gr "down" #gr "fill 60 0 30"
nstars = 100 Dim sx(nstars), sy(nstars), sr(nstars) cx = 300: cy = 300 'setup start stars For i = 1 To nstars sx(i) = Rnd(0) * 600 sy(i) = Rnd(0) * 600 sr(i) = Rnd(0) * 3 + 1 Next Do #gr "fill 60 0 30" 'show stars #gr "color 200 200 200" #gr "backcolor 255 255 255" For i = 1 To nstars dx = cx - sx(i): dy = cy - sy(i) b = Atan2(dy, dx) d = (dx * dx + dy * dy) ^ .5 #gr "place ";cx + d * cos(a + b);" ";cy + d * sin(a + b);"; circlefilled ";sr(i) 'now update stars falling into black hole dx = cx - sx(i): dy = cy - sy(i) d = (dx * dx + dy * dy) ^ .5 If d < 50 Then 'black hole radius call newStar i Else ' move it dx = 50 * dx / (d * d) dy = 50 * dy / (d * d) sx(i) = sx(i) + dx sy(i) = sy(i) + dy End If Next a = a + .003 #gr "color 128 0 0" #gr "backcolor 0 0 0" #gr "place ";cx;" ";cy;"; circlefilled ";50 call pause 30 Loop until something
Sub newStar i r = Int(Rnd(0) * 4) ' 0 to 3 Select Case r Case 0 sx(i) = Rnd(0) * 600 sy(i) = 0 Case 1 sx(i) = Rnd(0) * 600 sy(i) = 599 Case 2 sy(i) = Rnd(0) * 600 sx(i) = 0 Case 3 sy(i) = Rnd(0) * 600 sx(i) = 599 End Select End Sub
sub quit H$ close #gr end end sub
sub pause mil 'tsh version has scan built-in t0 = time$("ms") while time$("ms") < t0 + mil : scan : wend end sub
Function Atan2(y, x) 'Atan2 is a function which determines the angle between points 'x1, y1 and x2, y2. The angle returned is in radians 'The angle returned is always in the range of '-PI to PI radians (-180 to 180 degrees) '============================================================== 'NOTE the position of Y and X arguments 'This keeps Atan2 function same as other language versions '============================================================== If x = 0 Then If y < 0 Then Atan2 = -1.5707963267948967 Else Atan2 = 1.5707963267948967 End If Else chk = atn(y/x) If x < 0 Then If y < 0 Then chk = chk - 3.1415926535897932 Else chk = chk + 3.1415926535897932 End If End If Atan2 = chk End If 'thanks Andy Amaya End Function
b = b + ...
|
|
|
Post by tsh73 on Feb 26, 2024 5:32:35 GMT
Ability to make the sky spin: priceless ;)
But I like that glittering ring of stars.
|
|
|
Post by honky on Feb 26, 2024 9:30:14 GMT
Ability to make the sky spin: priceless But I like that glittering ring of stars. Absolutely, and the accretion disc should be thicker (given the images of the James Webb Télescope), And sparkle in its thickness, New Challenge ?. Then make realistic galaxies each with a black hole in the center, let's be crazy.
I will try to color the stars. EDIT Stars in colors it's not realistic
NOMAINWIN mapw=570: maph=460 WindowWidth = 600: WindowHeight = 500 UpperLeftX = (DisplayWidth-WindowWidth)-200 UpperLeftY = 20 ' (DisplayHeight-WindowHeight) GRAPHICBOX #w.m 5, 5, mapw, maph OPEN "Help" FOR window_nf AS #w #w, "TRAPCLOSE [closeHelp]" #w.m , "down": #w.m , "fill black;size 1" dur=1 ': #w.dur, str$(dur) midx=int(mapw/2): midy=int(maph/2) pi2 = 6.283185: stepSize = pi2/180: ax=midx: ay=midy: radius=25 dim cx(300),cy(300),cs(300),c$(300) endn=250 cc$="white yellow cyan green pink red" for x=1 to endn [ret] ' #w.m , "color white" valx=int(600*(rnd(1))) 'num?ro al?atoire valy=int(500*(rnd(1))) vals=int(4*(rnd(1))): #w.m, "size ";vals valc=int(7*(rnd(1))) If valx = 0 or valy=0 or valc=0 then goto [ret]'annuler si chiffre al?atoire = 0 n=n+1: cx(n)=valx: cy(n)=valy: cs(n)=vals: c$(n)=word$(cc$,valc) #w.m, "color ";c$(n): #w.m , "backcolor black" #w.m, "set ";valx;" ";valy next x n=1 while t=0 scan #w.m , "color ";c$(n): #w.m , "size ";cs(n) #w.m, "set ";cx(n);" ";cy(n) 'gosub [pause] #w.m , "color black; backcolor black" #w.m, "place ";cx(n)-2;" ";cy(n)-2: #w.m, "boxfilled ";cx(n)+2;" ";cy(n)+2 if cx(n) < midx then newX=cx(n)+1 if cx(n) > midx then newX=cx(n)-1 if cy(n) < midy then newY=cy(n)+1 if cy(n) > midy then newY=cy(n)-1 'accr?tion disk if (newX-ax)^2+(newY-ay)^2>radius^2 then 'move only if far enough cx(n)=newX cy(n)=newY end if #w.m, "color ";c$(n): #w.m , "size ";cs(n) #w.m, "set ";cx(n);" ";cy(n) #w.m , "discard" n=n+1 if n > endn then n=1 wend wait [pause] timer dur, [temps] wait [temps] timer 0 return wait [closeHelp] CLOSE #w END
I will try to mix the Glittering Ring of TSH73 with the turning sky of Rod it's not going to be easy
|
|
|
Post by plus on Feb 26, 2024 14:22:34 GMT
"But I like the glittering ring of stars"
"Stars in colors it's not realistic" but we do it anyway! because we like colors too!
OK not what happens at Black Hole but... who cares, we like what we like ;-))
global H$, XMAX, YMAX, nRing H$ = "gr" Xmax = 600 '<======================================== actual drawing space needed Ymax = 600 '<======================================== actual drawing space needed
nomainwin
WindowWidth = Xmax + 8 WindowHeight = Ymax + 32 UpperLeftX = (DisplayWidth - Xmax) / 2 'or delete if XMAX is 1200 or above UpperLeftY = (DisplayHeight - Ymax) / 2 'or delete if YMAX is 700 or above
open "Spinning Black Hole Attractor #3 = Ring O Stars" for graphics_nsb_nf as #gr #gr "trapclose quit" #gr "size 1" #gr "down" #gr "fill 60 0 30"
nstars = 60 Dim sx(nstars), sy(nstars), sr(nstars), sc$(nstars), tx(2000), ty(2000), tr(2000), tc$(2000) cx = 300: cy = 300 'setup start stars For i = 1 To nstars [tryagain] sx(i) = Rnd(0) * 600 sy(i) = Rnd(0) * 600 dx = cx - sx(i): dy = cy - sy(i) d = (dx * dx + dy * dy) ^ .5 if d <= 52 then goto [tryagain] sr(i) = Rnd(0) * 3 + 1 sc$(i) = rnd(0) * 128 + 128;" ";rnd(0) * 128 + 128;" ";rnd(0) * 128 + 128 Next Do #gr "fill 10 0 30" 'black Hole #gr "color 128 0 0" #gr "backcolor 0 0 0" #gr "place ";cx;" ";cy;"; circlefilled ";50 'show stars for i = 1 to nRing ' on Ring make glitter! if rnd(0) < .3*nRing/nRing then 'glit dx = cx - tx(i): dy = cy - ty(i) b = Atan2(dy, dx) d = (dx * dx + dy * dy) ^ .5 #gr "color ";tc$(i) #gr "backcolor ";tc$(i) #gr "place ";cx + d * cos(a + b);" ";cy + d * sin(a + b);"; circlefilled ";tr(i) end if next For i = 1 To nstars dx = cx - sx(i): dy = cy - sy(i) b = Atan2(dy, dx) d = (dx * dx + dy * dy) ^ .5 #gr "color ";sc$(i) #gr "backcolor ";sc$(i) #gr "place ";cx + d * cos(a + b);" ";cy + d * sin(a + b);"; circlefilled ";sr(i) 'now update stars falling into black hole dx = cx - sx(i): dy = cy - sy(i) d = (dx * dx + dy * dy) ^ .5 If d <= 53 Then 'black hole radius call newRing i call newStar i Else ' move it dx = 100 * dx / (d * d) dy = 100 * dy / (d * d) sx(i) = sx(i) + dx sy(i) = sy(i) + dy End If Next a = a + .006 call pause 60 Loop until something
sub newRing i nRing = nRing + 1 tx(nRing) = sx(i) ty(nRing) = sy(i) tr(nRing) = sr(i) tc$(nRing) = sc$(i) end sub
Sub newStar i r = Int(Rnd(0) * 4) ' 0 to 3 Select Case r Case 0 sx(i) = Rnd(0) * 600 sy(i) = 0 Case 1 sx(i) = Rnd(0) * 600 sy(i) = 599 Case 2 sy(i) = Rnd(0) * 600 sx(i) = 0 Case 3 sy(i) = Rnd(0) * 600 sx(i) = 599 End Select End Sub
sub quit H$ close #gr end end sub
sub pause mil 'tsh version has scan built-in t0 = time$("ms") while time$("ms") < t0 + mil : scan : wend end sub
Function Atan2(y, x) 'Atan2 is a function which determines the angle between points 'x1, y1 and x2, y2. The angle returned is in radians 'The angle returned is always in the range of '-PI to PI radians (-180 to 180 degrees) '============================================================== 'NOTE the position of Y and X arguments 'This keeps Atan2 function same as other language versions '============================================================== If x = 0 Then If y < 0 Then Atan2 = -1.5707963267948967 Else Atan2 = 1.5707963267948967 End If Else chk = atn(y/x) If x < 0 Then If y < 0 Then chk = chk - 3.1415926535897932 Else chk = chk + 3.1415926535897932 End If End If Atan2 = chk End If 'thanks Andy Amaya End Function
EDITED: for MORE Glitter!
"I will try to mix the Glittering Ring of TSH73 with the turning sky of Rod" Who is Rod? ;-))
b = b + ...
|
|
|
Post by honky on Feb 26, 2024 15:37:01 GMT
Thank you "plus", I got lost in your extraterrestrial code. Oups..! It's not Rod, it's "plus"
|
|