' cls()
10 HGR
' ::_::
'for i=0,1600 do
20 FOR I=0 TO 1600
'if(i<15)pal(i,({0,128,130,2,136,8,142,137,9,10,135,7})[i+1],1)
30 REM
'x=rnd(128)
40 X=RND(1)*128
'y=rnd(128)
50 Y=RND(1)*128
'a=atan2(x-64,y-64)+.17
'60 A=ATN(X-20,Y-20)+.17
'60 IF Y-64>0 THEN A=ATN((X-64)/(Y-64)):GOTO 68
'61 IF Y-64=0 THEN A=1.57*SGN(X-64):GOTO 68
'62 A=ATN((X-64)/(Y-64))+3.14*SGN(X-64)
' PICO-8 uses TURNS instead of RADIANS so this is equivelant to roughly 1 radian
'68 A=A+1
60 IF X-64=0 AND Y-64=0 THEN GOTO 40
' X>0 case, plain ATN, Quadrants I and IV
64 IF X-64>0 THEN A=ATN((Y-64)/(X-64)):GOTO 68
' X=0 then pi/2 or -pi/2 depending on Y
65 IF X-64=0 THEN A=1.57*SGN(Y-64):GOTO 68
' X<0 and Y>=0, Quadrant II
67 IF Y-64>=0 THEN A=ATN((Y-64)/(X-64))+3.14:GOTO 68
' X<0 and Y<0 Quadrant III
67 A=ATN((Y-64)/(X-64))-3.14
68 A=A+1
'69 PRINT A
'd=rnd(7)
70 D=RND(1)*7
'pset(x+cos(a)*d,y+sin(a)*d/3-cos(a)*d/4,max(0,pget(x,y)+.87-rnd()))
'  1+.87-.99 = .88
'  1+.87-0.0 = 1.87
'80 C=SCRN(X/3.3,Y/3.3)+1.37-RND(1)
80 GOSUB 1100
81 C=C+0.87-RND(1)
82 IF C<0 THEN C=0
83 IF C>7 THEN C=7
84 HCOLOR=C
85 XX=(X+COS(A)*D)
87 YY=(Y+SIN(A)*D/3-COS(A)*D/4)
88 IF XX<0 OR XX>240 GOTO 100
89 IF YY<0 OR YY>192 GOTO 100
90 HPLOT XX,YY
'end
100 NEXT I
' circfill(64,64,5,11)
110 HCOLOR=7
115 HPLOT 61,60 TO 69,60:HPLOT 60,61 TO 70,61:HPLOT 60,62 TO 70,62
117 HPLOT 60,63 TO 70,63:HPLOT 60,64 TO 70,64:HPLOT 60,65 TO 70,65
119 HPLOT 60,66 TO 70,66:HPLOT 60,67 TO 70,67:HPLOT 61,68 TO 69,68
'125 INPUT A$
130 GOTO 20
'flip()goto _
1100  REM GET HCOLOR
1110  REM  PARAMETERS: X Y
1120  REM  RETURNS: C
1130  REM 
1140 HP = 0:HX = X + 1:HY=Y
1150  ON (HX < 280) GOSUB 1300
1160 PR = HP:HP = 0:HX = HX - 2
1170  ON (HX >  = 0) GOSUB 1300
1180 PL = HP:HX = HX + 1: GOSUB 1300
1190 ODD = HX -  INT (HX / 2) * 2
1200 C = HH * 4
1210  IF  NOT ((PL = PR) AND (PL <  > HP)) THEN C = C + HP * 3: RETURN
1220  IF ODD THEN HP =  NOT HP
1230 C = C + HP + 1
1240  RETURN 
1250  REM 
1260  REM GET PIXEL
1270  REM  PARAMETERS: HX HY
1280  REM  RETURNS: HH HP
1290  REM 
1300 HH =  INT (HX / 7)
1310 HV =  INT (HY / 8)
1320 VO =  PEEK (37)
1330 HO =  PEEK (36)
1340  VTAB HV + 1: HTAB 1
1350 HA =  PEEK (41) * 256
1360 HA = HA +  PEEK (40) + HH
1370  VTAB VO + 1: HTAB HO + 1
1380 HA = HA + 8192 - 1024
1390 HP =  PEEK (230) / 32
1400  IF HP = 2 THEN HA = HA + 8192
1410 HA = HA + (HY - HV * 8) * 1024
1420 HB = HX - HH * 7
1430 HV =  PEEK (HA)
1440 HH =  INT (HV / 128)
1450 HV =  INT (HV / (2 ^ HB))
1460 HP = HV -  INT (HV / 2) * 2
1470  RETURN