This could do with a bit of optimisation, but works quite well :
// --------------------------------- //
// Project: Plasma
// Start: Wednesday, March 11, 2009
// IDE Version: 6.184
TYPE tCosTable
value
ENDTYPE
TYPE tColour
value%
ENDTYPE
GLOBAL cosTable[] AS tCosTable
GLOBAL colourTable[] AS tColour
LOCAL loop%
LOCAL x%
LOCAL y%
LOCAL screenWidth%
LOCAL screenHeight%
LOCAL cTable AS tCosTable
LOCAL cColour AS tColour
LOCAL wave%
LOCAL pos1
LOCAL pos2
GETSCREENSIZE screenWidth%,screenHeight%
// Create COS table
FOR loop%=0 TO screenWidth%*2
cTable.value=SIN(360.0*loop%/320.0)*32+32
DIMPUSH cosTable[],cTable
NEXT
FOR loop%=0 TO 255
cColour.value%=RGB(0,0,loop%)
DIMPUSH colourTable[],cColour
NEXT
wave%=0
WHILE KEY(1)=FALSE
INC wave%,6
IF wave%>320
wave%=0
ENDIF
FOR y%=0 TO screenHeight%/2
pos1 = cosTable[y%+wave%].value
STARTPOLY -1
FOR x% = 0 TO screenWidth%/2
pos2 = (cosTable[x%+wave%].value + cosTable[x%+y%].value + pos1)
POLYVECTOR x%*2,y%*2,0,0,colourTable[pos2].value%
POLYVECTOR (x%*2)+1,(y%*2)+1,0,0,colourTable[pos2].value%
POLYVECTOR x%*2,(y%*2)+1,0,0,colourTable[pos2].value%
NEXT
ENDPOLY
NEXT
PRINT wave%+" "+pos2,0,0
SHOWSCREEN
WEND
END
Slightly modified version :
[code // ---------------------------------
// Project: Plasma
// Start: Wednesday, March 11, 2009
// IDE Version: 6.184
TYPE tCosTable
value
ENDTYPE
TYPE tColour
value%
ENDTYPE
GLOBAL cosTable[] AS tCosTable
GLOBAL colourTable[] AS tColour
LOCAL loop%
LOCAL x%
LOCAL y%
LOCAL screenWidth%
LOCAL screenHeight%
LOCAL cTable AS tCosTable
LOCAL cColour AS tColour
LOCAL wave%
LOCAL pos1
LOCAL pos2
LOCAL stp% = 16
GETSCREENSIZE screenWidth%,screenHeight%
// Create COS table
FOR loop%=0 TO screenWidth%*2
cTable.value=SIN(360.0*loop%/320.0)*32+32
DIMPUSH cosTable[],cTable
NEXT
FOR loop%=0 TO 255
cColour.value%=RGB(0,0,loop%)
DIMPUSH colourTable[],cColour
NEXT
wave%=0
WHILE KEY(1)=FALSE
INC wave%,6
IF wave%>320
wave%=0
ENDIF
FOR y%=0 TO screenHeight%-1 STEP stp%
pos1 = cosTable[y%+wave%].value
FOR x% = 0 TO screenWidth%-1 STEP stp%
pos2 = (cosTable[x%+wave%].value + cosTable[x%+y%].value + pos1)
STARTPOLY -1
POLYVECTOR x%+stp%,y%,0,0,cosTable[pos2].value
POLYVECTOR x%,y%,0,0,cosTable[pos2].value
POLYVECTOR x%,y%+stp%,0,0,cosTable[pos2].value
POLYVECTOR x%+stp%,y%+stp%,0,0,cosTable[pos2].value
ENDPOLY
NEXT
NEXT
SHOWSCREEN
WEND
END
Yes, its one thing that does need sorting.