Btw, for anyone who wanted to know how the effect was done, here's the source with just the snow effect left in.
'By Shockwave^S!P
OPTION STATIC
OPTION EXPLICIT
#INCLUDE "TINYPTC_EXT.BI"
#INCLUDE "WINDOWS.BI"
#DEFINE alphaa(s,d) ((((s and &hff00ff)*(s shr 24)+(d and &hff00ff)*(256-(s shr 24)))and &hff00ff00)or(((s and &hff00)*(s shr 24)+(d and &hff00)*(256-(s shr 24)))and &hff0000))shr 8
CONST XRES = 640
CONST YRES = 480
DIM SHARED AS UINTEGER BUFFER ( XRES * YRES )
DIM SHARED AS INTEGER BX = 7
DIM SHARED AS INTEGER BY = 7
DIM SHARED AS INTEGER BTN = 8
DIM SHARED AS UINTEGER BOB ( BX * BY , BTN)
DIM SHARED AS UINTEGER FLAKES = 5000
DIM SHARED AS UINTEGER SNC(4)
DIM SHARED AS DOUBLE FLAKEX (FLAKES)
DIM SHARED AS DOUBLE FLAKEY (FLAKES)
DIM SHARED AS DOUBLE FLAKEZ (FLAKES)
DIM SHARED AS DOUBLE FLAKESP(FLAKES)
DIM SHARED AS INTEGER FLAKEA (FLAKES)
DIM SHARED AS INTEGER FLAKET (FLAKES)
DECLARE SUB READBOB()
DECLARE SUB PREFLAKES()
DECLARE SUB TRANSFLAKES()
DECLARE SUB DRAWBOB( BYVAL XX AS INTEGER , BYVAL YY AS INTEGER , BYVAL INTENSE AS INTEGER , BYVAL ALPH AS INTEGER , BYVAL FTYPE AS INTEGER )
DECLARE SUB CLEARBUFFER()
PTC_ALLOWCLOSE(0)
PTC_SETDIALOG(0,"",0,1)
IF (PTC_OPEN("HO HO HO",XRES,YRES)=0) THEN
END-1
END IF
READBOB()
PREFLAKES()
WHILE(GETASYNCKEYSTATE(VK_ESCAPE)<> -32767)
TRANSFLAKES()
PTC_UPDATE@BUFFER (0)
CLEARBUFFER()
WEND
PTC_CLOSE()
END
'-------------------------------------------------------------------------------
SUB CLEARBUFFER()
DIM LENG AS INTEGER
DIM AS INTEGER Y,TC
DIM PP AS UINTEGER PTR
DIM AS DOUBLE RR=78
DIM AS DOUBLE GG=4
DIM AS DOUBLE BB=4
FOR Y=0 TO YRES-1
PP = @BUFFER(Y*XRES)
TC=RGBA(INT(RR),INT(GG),INT(BB),115)
IF Y<290 AND RR>8 THEN RR=RR-1
IF Y>290 THEN RR=RR+.1
IF Y>290 THEN GG=GG+.15
IF Y>290 THEN BB=BB+.2
IF Y>340 THEN BB=BB+.7
IF Y>340 THEN RR=RR+.3
IF Y>340 THEN GG=GG+.2
IF Y>390 THEN BB=BB+.7
IF Y>390 THEN RR=RR+.7
IF Y>390 THEN GG=GG+.7
IF RR>255 THEN RR=255
IF GG>255 THEN GG=255
IF BB>255 THEN BB=255
LENG = xres
ASM
MOV EAX,DWORD PTR[TC]
MOV ECX, [LENG]
MOV EDI, [PP]
REP STOSD
END ASM
NEXT
END SUB
SUB DRAWBOB( BYVAL XX AS INTEGER , BYVAL YY AS INTEGER , BYVAL INTENSE AS INTEGER , BYVAL ALPH AS INTEGER , BYVAL FTYPE AS INTEGER )
IF INTENSE<0 THEN INTENSE=0
IF INTENSE>240 THEN INTENSE=240
DIM AS INTEGER W , H , X1 , Y1 , YP,FV
SNC(0)=0
SNC(1)=RGBA( INTENSE*.7,INTENSE*.8,INTENSE*.9 ,ALPH*.4)
SNC(2)=RGBA( INTENSE*.7,INTENSE*.8,INTENSE*.9 ,ALPH*.8)
SNC(3)=RGBA( INTENSE,INTENSE,INTENSE+15 ,ALPH)
Y1=YY
FOR H=0 TO BY-1
X1=XX
IF Y1>0 AND Y1<YRES THEN
YP=(Y1 * XRES)
FOR W=0 TO BX-1
FV=BOB((W+1) +(H*BY) , FTYPE )
IF X1>0 AND X1<XRES AND FV<> 0 THEN
'BUFFER (X1+YP) = SNC(FV)
BUFFER(X1+YP)=ALPHAA(SNC(FV),BUFFER(X1+YP))
END IF
X1=X1+1
NEXT
END IF
Y1=Y1+1
NEXT
END SUB
'-------------------------------------------------------------------------------
SUB READBOB()
DIM AS INTEGER L,M,N
FOR N=0 TO BTN-1
FOR L=1 TO ( BX * BY )
READ BOB(L , N)
NEXT
NEXT
END SUB
'-------------------------------------------------------------------------------
SUB TRANSFLAKES()
DIM AS DOUBLE TX,TY,L,HOLD
DIM AS DOUBLE FF
DIM AS DOUBLE RGADD
DIM AS DOUBLE MO1,MO2,MMM,NNN
RGADD=.018*SIN(TIMER/4)
MO1= COS(RGADD):' GENERATE MATRIX CONSTANT 1
MO2= SIN(RGADD):' GENERATE MATRIX CONSTANT 2
FOR L=1 TO FLAKES
' Delete comments to make flakes stay still when they land :-P
'/ IF FLAKEY(L)<30 THEN
NNN=FLAKEZ(L)
MMM=FLAKEX(L)
FLAKEZ(L) = MO1 * NNN - MO2 * MMM
FLAKEX(L) = MO1 * MMM + MO2 * NNN
' END IF
next
FOR L=1 TO FLAKES
FF = FLAKEZ(L)+120
HOLD=FLAKEY(L)
IF HOLD>=30 THEN
HOLD=30
IF FLAKEA(L)>0 THEN FLAKEA(L)=FLAKEA(L)*.90
END IF
TX = ((FLAKEX(L)/ FF )*700)+320
TY = ((HOLD/ FF )*700)+240
IF TX>0 AND TX<XRES AND TY>0 AND TY<YRES THEN
DRAWBOB ( TX , TY , (((-FLAKEZ(L))+80)*2) ,FLAKEA(L) , FLAKET(L))
END IF
FLAKEY(L)=FLAKEY(L)+FLAKESP(L)
IF FLAKEY(L)>=50 THEN
FLAKEY(L)=-FLAKEY(L)
FLAKEA(L)=110
END IF
NEXT
END SUB
'-------------------------------------------------------------------------------
SUB PREFLAKES()
DIM AS INTEGER L,R
FOR L=1 TO FLAKES
r=rnd(1)*80
FLAKEX(L) = R*cos(L/13)
FLAKEY(L) = (RND(1)*100)-50
r=rnd(1)*80
FLAKEZ (L) = R*sin(L/13)
FLAKESP(L) = .7+(RND(1)*.4)
FLAKET (L) = INT(RND(1)*BTN)
NEXT
END SUB
'-------------------------------------------------------------------------------
' Snowflake Thing
'-------------------------------------------------------------------------------
' TYPE 1
DATA 0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0
DATA 0,0,0,1,0,0,0
DATA 0,0,1,2,1,0,0
DATA 0,0,0,1,0,0,0
DATA 0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0
'TYPE 2
DATA 0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0
DATA 0,0,1,2,1,0,0
DATA 0,0,2,3,2,0,0
DATA 0,0,1,2,1,0,0
DATA 0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0
'TYPE 3
DATA 0,0,0,0,0,0,0
DATA 0,0,0,1,0,0,0
DATA 0,0,2,3,2,0,0
DATA 0,1,3,3,3,1,0
DATA 0,0,2,3,2,0,0
DATA 0,0,0,1,0,0,0
DATA 0,0,0,0,0,0,0
'TYPE 4
DATA 0,0,0,0,0,0,0
DATA 0,0,1,2,1,0,0
DATA 0,1,3,3,3,1,0
DATA 0,2,3,3,3,2,0
DATA 0,1,3,3,3,1,0
DATA 0,0,1,2,1,0,0
DATA 0,0,0,0,0,0,0
'TYPE 5
DATA 0,0,0,1,0,0,0
DATA 0,0,1,2,1,0,0
DATA 0,1,3,3,3,1,0
DATA 1,2,3,3,3,2,1
DATA 0,1,3,3,3,1,0
DATA 0,0,1,2,1,0,0
DATA 0,0,0,1,0,0,0
'TYPE 6
DATA 0,0,1,2,1,0,0
DATA 0,1,2,3,2,1,0
DATA 1,2,3,3,3,2,1
DATA 2,3,3,3,3,3,2
DATA 1,2,3,3,3,2,1
DATA 0,1,2,3,2,1,0
DATA 0,0,1,2,1,0,0
'TYPE 7
DATA 0,1,2,3,2,1,0
DATA 1,2,3,3,3,2,1
DATA 2,3,3,3,3,3,2
DATA 3,3,3,3,3,3,3
DATA 2,3,3,3,3,3,2
DATA 1,2,3,3,3,2,1
DATA 0,1,2,3,2,1,0
'TYPE 8
DATA 0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0
DATA 0,0,0,1,0,0,0
DATA 0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0