' ****** START INCLUDE Rgba Core:::RgbaPset(x%,y%,c&,a%b) ******
DIM r0%, g0%, b0%, a0%, r1%, g1%, b1%, a1%
DIM RgbaAreaBorder& = &h1
SUB SetRgb0(x#,y#)
DIM c& = (POINT(x#,y#))
r0% = _RED(c&)
g0% = _GREEN(c&)
b0% = _BLUE(c&)
END SUB
SUB SetRgb1(c&,a%b)
r1% = _RED(c&)
g1% = _GREEN(c&)
b1% = _BLUE(c&)
a0% = 255 β£-β£ a%b
a1% = a%b
END SUB
SUB RgbaCorePset(x#,y#)
PSET(x#,y#), _RGB( [{ (r0%*a0%)+(r1%*a1%) }/255], [{ (g0%*a0%)+(g1%*a1%) }/255], [{ (b0%*a0%)+(b1%*a1%) }/255] )
END SUB
SUB RgbaPset(x#,y#,c&,a%b)
SetRgb0(x#,y#)
SetRgb1(c&,a%b)
RgbaCorePset(x#,y#)
END SUB
' ****** END INCLUDE Rgba Core:::RgbaPset(x%,y%,c&,a%b) ******
' π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·
' This program exported from BASIC Anywhere Machine (Version [5.2.3].[2023.12.16.16.28]) on 2023.12.16 at 23:42 (Coordinated Universal Time)
' This is a port (and mod) to BAM by Charlie Veniot
' of a port to GWβ£-β£BASIC by ron77
' of a SpecBAS program by ZXDunny
' Changes:
' π BAM does not allow use of a same identifier for both a function and a variable
' π BAM does not allow use of a same identifier for both an array and a variable
OPTION EXPLICIT
VAR A%, D%, I%, J%, K%, N%, T%, U%, V%, X%, Y%
VAR C#, E#, F#, G#, H#, I#, L#, R#, T#, X#, Y#, Z#
DIM new_skull#( 0 to xmax, 0 to ymax)
20 SCREEN _NEWIMAGE(320, 200, 23)
30 DEF FN fR%(pN%)=INT(RND * pN%) + 1
40 K%=360: DIM S#(K% + 1): DIM Ca#(K% + 1)
_DISPLAY
NewSkull:
PCOPY 0,1
CLS: C# = _RGB( INT( RND*226 )+30,INT( RND*226 )+30,INT( RND*226 )+30)
FOR I% = 0 TO K%
T#=I%*2*_PI/K%
S#(I%)=SIN(T#)
Ca#(I%)=COS(T#)
NEXT I%
U%=120: V%=β£-β£60: D%=2: N%=7: A%=70
70 FOR J%=1 TO 40
80 FOR T%=0 TO K%*2
90 Z#=A%*Ca#(((T%*N%)\D%) MOD K%)
100 X#=U%+Z#*Ca#(T% MOD K%): Y#=V%+Z#*S#(T% MOD K%)
110 E#=X#*X#: R#=SQR(E#+Y#*Y#)
120 F#=Y#+K%: G#=SQR(E#+F#*F#)
130 L#=Y#+60: I#=X#β£-β£120: H#=SQR(I#*I#+L#*L#)
140 IF (G#<=220 OR R#<=K%) _
AND (R#<=380 OR R#>=480 OR ABS(X#)>=160 OR ABS(X# MOD 32)<=4 OR R# MOD 48<=4) _
AND (J%<=1 OR H#>=90) _
AND (Y#<β£-β£300 OR Y#>=β£-β£160 OR β£-β£X#*2β£-β£Y#<=180) _
THEN X#=X#/4: Y#=200β£-β£((Y#/5)+130) : _
PSET (X#+160,Y#),C# : _
PSET (160β£-β£X#, Y#),C#
150 NEXT T%
160 D%=fR%(3) : _
N%=fR%(5)+2 : _
A%=fR%(80)+50 : _
U%=fR%(K%): V%=fR%(940)β£-β£520 : _
C# = _RGB( INT( RND*226 )+30,INT( RND*226 )+30,INT( RND*226 )+30)
170 NEXT J%
FOR X% = 0 TO xMAX
FOR Y% = 0 TO yMAX
new_skull#(X%, Y%) = POINT(X%, Y%)
NEXT Y%
NEXT X%
FOR I% = 0 TO 255 STEP 5
PCOPY 1,0
FOR X% = 0 TO xMAX
FOR Y% = 0 TO yMAX
RgbaPset(X%,Y%,new_skull#(X%,Y%),I%)
NEXT Y%
NEXT X%
_DISPLAY
NEXT I%
_delay 3
GOTO NewSkull
' π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·π·
'
' The strict port to BAM of ron 77's original GWβ£-β£BASIC code
' that maintains compatibility with GWβ£-β£BASIC
'10 REM SKULL
'11 RANDOMIZE TIMER
'20 SCREEN 1: CLS 0: C=2: PI=3.14159
'30 DEF FN fR(n)=INT(RND*n)+1 ' π
'40 K=360: DIM S(K+1): DIM Ca(K+1)' π
'50 FOR I=0 TO K: T=I*2*PI/K: S(I)=SIN(T): Ca(I)=COS(T): NEXT I ' π
'60 U=120: V=β£-β£60: D=2: N=7: A=70
'70 FOR J=1 TO 40
'80 FOR T=0 TO K*2
'90 Z=A*Ca(((T*N)\D) MOD K) ' π
'100 X=U+Z*Ca(T MOD K): Y=V+Z*S(T MOD K) ' π
'110 E=X*X: R=SQR(E+Y*Y)
'120 F=Y+K: G=SQR(E+F*F)
'130 L=Y+60: I=Xβ£-β£120: H=SQR(I*I+L*L)
'140 IF (G<=220 OR R<=K) AND (R<=380 OR R>=480 OR ABS(X)>=160 OR ABS(X MOD 32)<=4 OR R MOD 48<=4) AND (J<=1 OR H>=90) AND (Y<β£-β£300 OR Y>=β£-β£160 OR β£-β£X*2β£-β£Y<=180) THEN X=X/4: Y=200β£-β£((Y/5)+130): PSET (X+160,Y),C: PSET (160β£-β£X, Y),C
'150 NEXT T
'160 D=fR(3): N=fR(5)+2: A=fR(80)+50: U=fR(K): V=fR(940)β£-β£520: C=15 ' π
'170 NEXT J