Here's the source for the quicky remake of sinemania by Oracle.
'-------------------------------------------------------------------------------
'
' ORACLE REMAKE
' oOoOoOoOoOoOoOoOoOoOo
' BY SCHLOCK WAVE
'
' Concentrated Super Fuckings to all who deserve them.
'
' Greetings to my good friends including You! & gun owners everywhere.
'
'
'-------------------------------------------------------------------------------
'---------------------------------------------------------------------------
' libs;
'---------------------------------------------------------------------------
#INCLUDE "TINYPTC_EXT.BI"
#INCLUDE "WINDOWS.BI"
'---------------------------------------------------------------------------
' font;
'---------------------------------------------------------------------------
#INCLUDE "orapal.bas"
#INCLUDE "oraraw.bas"
OPTION STATIC
OPTION EXPLICIT
'---------------------------------------------------------------------------
' 800 * 600 will be best for this one;
'---------------------------------------------------------------------------
CONST XRES = 800
CONST YRES = 600
DIM SHARED AS UINTEGER BUFFER ( XRES * YRES )
'---------------------------------------------------------------------------
' 2 Sine tables, one calculated each 2 pixels (for scroll) and 32 pixels (background)
' and copperlist storage.
'---------------------------------------------------------------------------
DIM SHARED AS INTEGER SINETABLE (XRES)
DIM SHARED AS INTEGER SINETABLE2(XRES)
DIM SHARED AS INTEGER COPPERS(YRES)
'---------------------------------------------------------------------------
' Dec subs to create sinewave movement and copperlist.
'---------------------------------------------------------------------------
DECLARE SUB SINEWAVE ()
DECLARE SUB SINEWAVE2()
DECLARE SUB COPPERLIST()
'---------------------------------------------------------------------------
' Used in delta timing;
'---------------------------------------------------------------------------
DIM SHARED AS DOUBLE OLD,DV,GADD
'---------------------------------------------------------------------------
' Set up all things to do with the font; (then load it).
'---------------------------------------------------------------------------
Const LfimgX = 1888
Const LfimgY = 32
DECLARE SUB LARGETEXT (BYVAL LTX AS INTEGER , BYVAL LTY AS INTEGER ,BYVAL LTS AS STRING)
Declare Sub LfDrawImage(byval imxpos as integer,byval imypos as integer,byval SX as integer,byval SY as integer)
DECLARE SUB LARGETEXT2 (BYVAL LTX AS INTEGER , BYVAL LTY AS INTEGER ,BYVAL LTS AS STRING)
Declare Sub LfDrawImage2(byval imxpos as integer,byval imypos as integer,byval SX as integer,byval SY as integer)
Declare Sub LFLoadDataImage()
Dim Shared LFimg_buffer( lfimgx * lfimgy ) as integer
Dim Shared LFimg_r(256), LFimg_g(256), LFimg_b(256) as short
LFLoadDataImage()
'---------------------------------------------------------------------------
' Set up all to do with the scroller;
'---------------------------------------------------------------------------
DIM SHARED AS STRING SCROLLER
DIM SHARED AS DOUBLE SCXP=0
DIM SHARED AS INTEGER TP=1
DECLARE SUB SINETEXT ()
SCROLLER=" "
SCROLLER=SCROLLER+"WELL GUYZ, THIS IS #PHOTON$ HERE, LIKE YOU ALREADY DONT KNOW, WITH MY FIFTH INTRO THAT I HAVE CODED FOR YOU AND THIS ONE IS ENTITLED "
SCROLLER=SCROLLER+"#SINE MANIA$ AND INCLUDES THIS RATHER NICE 1 PIXEL SINE SCROLL AND BEHIND IT AN EVEN NICER 16 PIXEL PICTURE WAVER!! "
SCROLLER=SCROLLER+"THIS INTRO HAS BEEN DESIGNED TO BE REALLY SMALL AND STICK ON A DISK, AND IT CERTAINLY HAS TURNED OUT THAT WAY SO SLAM "
SCROLLER=SCROLLER+"IT ONTO ALL YOUR DISKS AND IMPRESS YOUR FRIENDS AND FAMILY ALIKE!!! AH WELL I SHALL CATCH YOU ALL LATER, SO BYE ZEE BYE!!! WIN32 REMAKE BY SHOCKWAVE FOR WWW.RETRO-REMAKES.NET "
SCROLLER=SCROLLER+"GREETINGS TO ALL OUR FRIENDS AND VISITORS... "
'---------------------------------------------------------------------------
' Open the screen;
'---------------------------------------------------------------------------
PTC_ALLOWCLOSE(0)
PTC_SETDIALOG(1,"WWW.RETRO-REMAKES.NET"+CHR$(13)+"FULL SCREEN?",0,1)
IF (PTC_OPEN("Remade by Shockwave^Codigos",XRES,YRES)=0) THEN
END-1
END IF
SLEEP 5
'---------------------------------------------------------------------------
' Main Loop;
'---------------------------------------------------------------------------
WHILE(GETASYNCKEYSTATE(VK_ESCAPE)<> -32767 and PTC_GETLEFTBUTTON=FALSE)
'---------------------------------------------------------------------------
' Grab old timer value for delta;
'---------------------------------------------------------------------------
OLD=TIMER
'---------------------------------------------------------------------------
' Calc CopperColours and sinewaves;
'---------------------------------------------------------------------------
COPPERLIST()
SINEWAVE()
SINEWAVE2()
'---------------------------------------------------------------------------
' Quick 'n dirty hack to draw the background text;
'---------------------------------------------------------------------------
LARGETEXT2(16, 30," ORACLE PRESENT ")
LARGETEXT2(16, 65," ANOTHER COOL CRACK ")
LARGETEXT2(16,100," ")
LARGETEXT2(16,135," #INSERT NAME HERE$ ")
LARGETEXT2(16,170," ")
LARGETEXT2(16,205," CALL #THE JUNGLE$ ON ")
LARGETEXT2(16,240," 708-983-5764 ")
'---------------------------------------------------------------------------
' Call the sine scroller;
'---------------------------------------------------------------------------
SINETEXT()
'---------------------------------------------------------------------------
' Swap screen buffers etc.....
'---------------------------------------------------------------------------
PTC_UPDATE@BUFFER(0)
ERASE BUFFER
SLEEP 1
'---------------------------------------------------------------------------
' Delta movement;
'---------------------------------------------------------------------------
DV=(TIMER-OLD)*200
GADD=GADD-DV*.5
WEND
'---------------------------------------------------------------------------
' Subroutines;
'---------------------------------------------------------------------------
SUB COPPERLIST()
DIM AS INTEGER Y,S
DIM AS DOUBLE R,G,B,R2D,YY
R2D=3.14/180
S=0
YY=0
'---------------------------------------------------------------------------
' Draw a copperlist in the coppers array;
'---------------------------------------------------------------------------
FOR Y=0 TO YRES/2
YY=YY+3
R= 125+124*SIN(((YY-(GADD*4)))*R2D)
G= 125+124*SIN(((YY-(GADD*4))+120)*R2D)
B= 125+124*SIN(((YY-(GADD*4))+240)*R2D)
R=R*1.1
G=G*1.1
B=B*1.1
IF R>255 THEN R=255
IF G>255 THEN G=255
IF B>255 THEN B=255
COPPERS(S)=RGB(INT(R),INT(G),INT(B))
COPPERS(S+1)=COPPERS(S)
S=S+2
NEXT
END SUB
'---------------------------------------------------------------------------
' Lame scroll routine;
'---------------------------------------------------------------------------
SUB SINETEXT()
LARGETEXT(SCXP,0,MID(SCROLLER,TP,30))
SCXP=SCXP-(DV*2)
IF SCXP<=-32 THEN
TP=TP+1
SCXP=SCXP+32
IF TP>=LEN(SCROLLER) THEN TP=1
END IF
END SUB
'---------------------------------------------------------------------------
' Lame routine to make a sinewave for the scroller;
'---------------------------------------------------------------------------
SUB SINEWAVE()
DIM AS INTEGER L,X,VV
X=0
FOR L=0 TO (XRES/2)
VV=220+150*SIN((L+GADD)*3.14/210)
SINETABLE(X )=VV
SINETABLE(X+1)=VV
X=X+2
NEXT
END SUB
'---------------------------------------------------------------------------
' Make a sine wave for the background writing;
'---------------------------------------------------------------------------
SUB SINEWAVE2()
DIM AS INTEGER L,X,VV,C
X=16
FOR L=0 TO 23
VV=91+70*SIN((X-(GADD*10))*3.14/900)
FOR C=0 TO 31
SINETABLE2(X+C)=VV
NEXT
X=X+32
NEXT
END SUB
'---------------------------------------------------------------------------
' Used for drawing a text string for sine scroll;
'---------------------------------------------------------------------------
SUB LARGETEXT(BYVAL LTX AS INTEGER , BYVAL LTY AS INTEGER ,BYVAL LTS AS STRING)
DIM AS INTEGER A,MMM,NNN,ZERO,OOO
FOR A=1 TO LEN(LTS)
NNN=(ASC(MID(LTS,A,1)))-32
IF NNN<0 THEN NNN=0
IF MID(LTS,A,1) <>" " AND NNN >0 THEN
OOO=0
MMM = NNN * 32
LFDRAWIMAGE( LTX,LTY, MMM , OOO )
END IF
LTX=LTX+32
NEXT
END SUB
'-------------------------------------------------------------------------------
' Load Font;
'-------------------------------------------------------------------------------
Sub LFLoadDataImage()
dim i as integer
'Loads Color palette
for i = 0 to 255
LFimg_r( i ) = orafont.bmp.pal (i*3)'Red color
LFimg_g( i ) = orafont.bmp.pal (i*3+1)'Green color
LFimg_b( i ) = orafont.bmp.pal (i*3+2)'Blue color
LFimg_r( i ) = rgb (LFimg_r(i),LFimg_g(i),LFimg_b(i))
Next
for i = 1 to (LFimgx*LFimgy) - 1
LFimg_buffer(i) = orafont.bmp.raw (i)
next
End Sub
'---------------------------------------------------------------------------
' Draw sine scroll letter;
'---------------------------------------------------------------------------
Sub LFDrawImage(byval xpos as integer,byval ypos as integer,byval SX as integer,byval SY as integer)
dim as integer x,y,pixel,mong,intx,inty,xxx,yyy,VLU,TT
xxx=xpos
yyy=ypos
TT=1
for Y = SY to SY+31
for X = SX to SX+31
pixel = LFimg_buffer(x+(y*lfimgx))
mong = (LFimg_r(pixel) )
intx = XXX
inty = YYY+SINETABLE(INTX)
if MONG<>0 AND INTX>=0 AND INTX<XRES then
MONG=&hffffff
Buffer( intX +(intY * XRES )) = MONG
end if
xxx=xxx+1
next
yyy=yyy+1
xxx=xpos
next
End Sub
'---------------------------------------------------------------------------
' Used to draw letters of the background;
'---------------------------------------------------------------------------
SUB LARGETEXT2(BYVAL LTX AS INTEGER , BYVAL LTY AS INTEGER ,BYVAL LTS AS STRING)
DIM AS INTEGER A,MMM,NNN,ZERO,OOO
FOR A=1 TO LEN(LTS)
NNN=(ASC(MID(LTS,A,1)))-32
IF NNN<0 THEN NNN=0
IF MID(LTS,A,1) <>" " AND NNN >0 THEN
OOO=0
MMM = NNN * 32
LFDRAWIMAGE2( LTX,LTY, MMM , OOO )
END IF
LTX=LTX+32
NEXT
END SUB
'---------------------------------------------------------------------------
' Actually draw the background letters;
'---------------------------------------------------------------------------
Sub LFDrawImage2(byval xpos as integer,byval ypos as integer,byval SX as integer,byval SY as integer)
dim as integer x,y,pixel,mong,intx,inty,xxx,yyy,VLU,TT
xxx=xpos
yyy=ypos
TT=1
for Y = SY to SY+31
for X = SX to SX+31
pixel = LFimg_buffer(x+(y*lfimgx))
mong = (LFimg_r(pixel) )
intx = XXX
inty = YYY+SINETABLE2(INTX)
if MONG<>0 AND INTX>=0 AND INTX<XRES then
MONG=COPPERS(INTY)
Buffer( intX +(intY * XRES )) = MONG
end if
xxx=xxx+1
next
yyy=yyy+1
xxx=xpos
next
End Sub
If you want to run it, download the zip please because it needs to load the font :-)