Dark Bit Factory & Gravity
PROGRAMMING => Freebasic => Topic started by: Shockwave on March 03, 2007
-
This has to be the cutest text writer I have ever made... I was talking with Alpha One earlier and we were chatting about cracktros and I got thinking that the ones that I liked the most were the ones that used some different way of getting the text on the screen.
Then I remembered a really cute one by Fairlight which just had some nice sine dots and a cute reggae style tune and I decided I wanted to make a writer which had the same colours through the letters as those sine dots.
Plus I wanted the letters to look as cute as they could, so here's what I came up with in a few hours.
You might find this in a production somewhere when I've finished it if you know where to look. :)
Exe attached for forum members.
'
' POST MORTEM CRACKTRO NUMBER 2 BY SHOCKWAVE
' THIS ONE DEFINATELY HAS A STRONG OLDSCHOOL FEEL!!
' =================================================
'
'===============================================================================
' REMOVE COMMENT ON LINE BELOW FOR WINDOWED MODE
' #DEFINE PTC_WIN
#INCLUDE "TINYPTC.BI"
' ALL VARIABLES MUST BE DECLARED.
' -------------------------------
OPTION STATIC
OPTION EXPLICIT
' SCREEN DIMENSIONS.
' ------------------
CONST XRES = 640:' WIDTH
CONST YRES = 480:' HEIGHT
'-------------------------------------------------------------------------------
' THESE SUBS ARE CUSTOM BUILT GFX SUBS (c) SHOCKWAVE, REMOVE SURPLUS ONES WHEN INTRO FINISHED.
'-------------------------------------------------------------------------------
DECLARE SUB TRIANGLE(BYVAL X1 AS INTEGER , BYVAL Y1 AS INTEGER, BYVAL X2 AS INTEGER , BYVAL Y2 AS INTEGER , BYVAL X3 AS INTEGER, BYVAL Y3 AS INTEGER , BYVAL TR AS INTEGER,BYVAL TG AS INTEGER,BYVAL TB AS INTEGER)
DECLARE SUB CIRC(BYVAL CX AS INTEGER , BYVAL CY AS INTEGER , BYVAL R AS INTEGER, BYVAL CR AS INTEGER,BYVAL CG AS INTEGER,BYVAL CB AS INTEGER)
DECLARE SUB RECT(BYVAL X1 AS INTEGER , BYVAL Y1 AS INTEGER , BYVAL XW AS INTEGER , BYVAL YH AS INTEGER , BYVAL RR AS INTEGER , BYVAL RG AS INTEGER, BYVAL RB AS INTEGER)
DECLARE SUB EDGE(BYVAL X1 AS INTEGER , BYVAL Y1 AS INTEGER , BYVAL X2 AS INTEGER , BYVAL Y2 AS INTEGER , BYVAL LR AS INTEGER, BYVAL LG AS INTEGER, BYVAL LB AS INTEGER)
DECLARE SUB DOT (BYVAL X1 AS INTEGER , BYVAL Y1 AS INTEGER , BYVAL DR AS INTEGER , BYVAL DG AS INTEGER , BYVAL DB AS INTEGER )
DECLARE SUB TEXT(BYVAL BX AS INTEGER , BYVAL BY AS INTEGER , BYVAL WW AS STRING , BYVAL WR AS INTEGER, BYVAL WG AS INTEGER, BYVAL WB AS INTEGER)
DECLARE SUB CURVE(BYVAL X0 AS INTEGER ,BYVAL Y0 AS INTEGER, BYVAL X3 AS INTEGER ,BYVAL Y3 AS INTEGER ,BYVAL X1 AS INTEGER ,BYVAL Y1 AS INTEGER ,BYVAL X2 AS INTEGER ,BYVAL Y2 AS INTEGER , BYVAL RR AS INTEGER , BYVAL RG AS INTEGER, BYVAL RB AS INTEGER)
DECLARE SUB READFONT()
'-------------------------------------------------------------------------------
' VARIABLES NEEDED FOR THE INTRO;
'-------------------------------------------------------------------------------
' "FLOATING TEXT" ROUTINE VARIABLES;
'-------------------------------------------------------------------------------
DIM SHARED LHORIZ = 40: ' WIDTH OF TEXT PAGES.
DIM SHARED LVERT = 10 :' HEIGHT OF TEXT PAGES.
'-------------------------------------------------------------------------------
' SINGLE DIMENSION ARRAYS USED TO MAKE IT EASIER TO PUT LETTERS ON LATER.
'-------------------------------------------------------------------------------
DIM SHARED AS DOUBLE LXT( LHORIZ * LVERT ):' TARGET X LOCATION FOR LETTER.
DIM SHARED AS DOUBLE LYT( LHORIZ * LVERT ):' TARGET Y LOCATION FOR LETTER.
DIM SHARED AS DOUBLE LXA( LHORIZ * LVERT ):' ACTUAL X LOCATION FOR LETTER.
DIM SHARED AS DOUBLE LYA( LHORIZ * LVERT ):' ACTUAL Y LOCATION FOR LETTER.
DIM SHARED AS DOUBLE YSPD( LHORIZ * LVERT )
DIM SHARED AS DOUBLE XSPD( LHORIZ * LVERT )
DIM SHARED AS UBYTE LYO( LHORIZ * LVERT ):' IS LETTER ACTIVE? ON=1 OFF=0
DIM SHARED AS STRING LYC( LHORIZ * LVERT ):' STORES THE LETTER.
DIM SHARED AS UINTEGER LLM: ' HOW MANY LETTERS ARE ON SCREEN ATM?
DIM SHARED AS UINTEGER LTM: ' TIMER (IN FRAMES) FOR NEXT LETTER.
LLM=0
LTM=0
DIM SHARED AS UBYTE CHECK_PLACEMENT=0
DIM SHARED TPP AS INTEGER
TPP=0
DIM SHARED TXT AS STRING
DIM SHARED AS DOUBLE HOLD_TIME
'-------------------------------------------------------------------------------
' IMPORTANT!!!!! PLEASE MAKE SURE THAT YOU
' USE 40 CHARACTERS PER LINE!!!!!!!!!!!!
' YOU >>MUST<< FILL WITH SPACES TO MAKE
' SURE EACH LINE IS 40 CHARS WIDE......
' ALSO THERE ARE 10 LINES OF TEXT PER PAGE.
' DO NOT USE LESS OR MORE. THESE TEXT STRINGS
' HAVE TO BE KEPT THE SAME SIZE!!!!!!!!!!!!!!
' OTHERWISE IT WILL FUCK UP.
' I HAVE PUT THE SPACERS "|" AS A GUIDE FOR YOU
' LINE THEM UP WITH THE QUOTES AND YOU WON'T GO WRONG.
'-------------------------------------------------------------------------------
' |PAGE 1: |
TXT = TXT+" OLDSCHOOL TYPER ROUTINE! "
TXT = TXT+" ======================== "
TXT = TXT+" "
TXT = TXT+" WITH ADDED DUTCH COLOURS! "
TXT = TXT+" SPECIALLY DESIGNED FOR HANGOVERS "
TXT = TXT+" "
TXT = TXT+" -------------------------------- "
TXT = TXT+" - THIS PIECE OF SHIT WAS CODED - "
TXT = TXT+" - BY SHOCKWAVE ON A SATURDAY - "
TXT = TXT+" -------------------------------- "
' |PAGE 2: |
TXT = TXT+" -------------------------------- "
TXT = TXT+" - THIS ROUTINE WILL BE USED IN - "
TXT = TXT+" - A PRODUCTION FOR A GERMAN - "
TXT = TXT+" - GROUP BUT I THOUGHT I WOULD - "
TXT = TXT+" - RELEASE THE SOURCE FIRST!! - "
TXT = TXT+" -------------------------------- "
TXT = TXT+" "
TXT = TXT+" AREN'T I KIND? TO A FAULT INDEED.. "
TXT = TXT+" NO MORE WORDS COME TO MY MIND "
TXT = TXT+" SO GREETINGS TO YOU AND LETS WRAP! "
'-------------------------------------------------------------------------------
' EFFECT SUBS DEFINITIONS;
'-------------------------------------------------------------------------------
' TEXT WRITER;
'-------------------------------------------------------------------------------
DECLARE SUB PRELOADGRID():' SET UP GRID POSITIONS FOR THE LETTERS.
DECLARE SUB RESETWRITER():' NEW TEXT PAGE FOR WRITER.
DECLARE SUB HYPERTEXTER():' THIS SUB DOES THE TEXT WRITER.
'-------------------------------------------------------------------------------
' OPEN THE SCREEN
'-------------------------------------------------------------------------------
DIM SHARED AS UINTEGER BUFFER ( XRES * YRES )
DIM SHARED FONT (64 * 64) as Uinteger : ' FONT BUFFER
DIM SHARED AS DOUBLE GADD,GADD4,GADD3,GADD2
READFONT()
PRELOADGRID()
RESETWRITER()
If( PTC_OPEN( "FREEBASIC GRAPHICS SCREEN", XRES, YRES ) = 0 ) Then
End -1
End If
'-------------------------------------------------------------------------------
' THE MAIN LOOP;
'-------------------------------------------------------------------------------
'DIM SHARED S AS INTEGER
while (1)
HYPERTEXTER()
PTC_UPDATE @ BUFFER (0)
ERASE BUFFER
GADD=GADD+1
GADD4=GADD4+.05
GADD3=GADD3+.1
GADD2=GADD2+.025
wend
'-------------------------------------------------------------------------------
' THE NICE WRITER;
'-------------------------------------------------------------------------------
SUB HYPERTEXTER()
DIM AS INTEGER A,CF
DIM AS DOUBLE FX,FY
DIM AS DOUBLE XDV
DIM AS DOUBLE YDV
XDV=37
YDV=45
'---------------------------------------------------------------------------
' DRAW THE ACTIVE LETTERS ON THE SCREEN;
'---------------------------------------------------------------------------
FOR A=0 TO LLM
IF INT(LXA(A))>-8 AND INT(LXA(A))<XRES AND INT(LYA(A))>-8 AND INT(LYA(A))<YRES THEN
TEXT(INT(LXA(A)),INT(LYA(A)),LYC(A),150+100*SIN((A+GADD4)),150+100*SIN((A+GADD3)),150+100*SIN((A+GADD2)))
END IF
NEXT
'---------------------------------------------------------------------------
' IF ALL LETTERS ARE NOT IN PLACE THEN WE NEED TO DO THE WRITER;
'---------------------------------------------------------------------------
IF CHECK_PLACEMENT=0 THEN
'---------------------------------------------------------------------------
' THIS "FLOATING" POINT IS THE ORIGIN WHERE NEW LETTERS APPEAR FROM.
'---------------------------------------------------------------------------
FX = XRES/2 + (70*SIN(GADD/ 7)+70*COS(GADD/9)+120*SIN(GADD/6))
FY = YRES/2 + (70*SIN(GADD/ 6)+70*COS(GADD/11)+80*SIN(GADD /4))
IF LLM < (LHORIZ * LVERT) THEN
LLM = LLM + 1
LXA(LLM) = FX
LYA(LLM) = FY
LYO(LLM) = 1
END IF
FOR A=0 TO LLM
IF LXA(A)<>LXT(A) THEN
LXA(A)=LXA(A)+((LXT(A)-LXA(A))/XDV)
END IF
IF LYA(A)<>LYT(A) THEN
LYA(A)=LYA(A)+((LYT(A)-LYA(A))/YDV)
END IF
IF LXA(A)-LXT(A) >-.5 AND LXA(A)-LXT(A) <.5 THEN LXA(A)=LXT(A)
IF LYA(A)-LYT(A) >-.5 AND LYA(A)-LYT(A) <.5 THEN LYA(A)=LYT(A)
NEXT
END IF
'---------------------------------------------------------------------------
' CHECK IF ALL LETTERS ARE IN PLACE;
'---------------------------------------------------------------------------
IF LLM>= ( LHORIZ * LVERT ) AND CHECK_PLACEMENT=0 THEN
CF=1
FOR A = 1 TO LLM
IF LXA(A)<> LXT(A) OR LYA(A)<>LYT(A) THEN CF=0
NEXT
'---------------------------------------------------------------------------
' IF ALL LETTERS ARE IN PLACE BEGIN 8 SECOND COUNTDOWN
'---------------------------------------------------------------------------
IF CF=1 THEN
CHECK_PLACEMENT=1
HOLD_TIME = TIMER
END IF
END IF
'---------------------------------------------------------------------------
' IF ALL LETTERS ARE IN PLACE AND THE COUNTDOWN HAS PASSED 5 SECS WE NEED TO
' START GETTING RID OF THE LETTERS
'---------------------------------------------------------------------------
IF CHECK_PLACEMENT=1 AND TIMER-HOLD_TIME >=5.5 AND TIMER-HOLD_TIME <=6 THEN
FOR A=0 TO LLM
LYA(A)=LYA(A)+ (RND(1)-.5)
LXA(A)=LXA(A)+ (RND(1)-.5)
'IF YSPD(A)<12 THEN YSPD(A)=YSPD(A)+.2
NEXT
END IF
'---------------------------------------------------------------------------
' IF ALL LETTERS ARE IN PLACE AND THE COUNTDOWN HAS PASSED 5 SECS WE NEED TO
' START GETTING RID OF THE LETTERS
'---------------------------------------------------------------------------
IF CHECK_PLACEMENT=1 AND TIMER-HOLD_TIME >=6 THEN
FOR A=0 TO LLM
LYA(A)=LYA(A)+YSPD(A)
LXA(A)=LXA(A)+XSPD(A)
IF YSPD(A)<12 THEN YSPD(A)=YSPD(A)+.2
NEXT
END IF
'---------------------------------------------------------------------------
' GO TO NEXT PAGE IF COUNTDOWN>8 SECS AND LETTERS WERE IN PLACE.
'---------------------------------------------------------------------------
IF CHECK_PLACEMENT=1 AND TIMER-HOLD_TIME >=8 THEN
TPP=TPP+(LHORIZ*LVERT)
IF TPP>LEN(TXT)-(LHORIZ*LVERT) THEN TPP=0
RESETWRITER()
END IF
END SUB
'-------------------------------------------------------------------------------
' CLEAR OUT OLD TEXT AND SET UP NEW PAGE IN TEXT WRITER.
'-------------------------------------------------------------------------------
SUB RESETWRITER()
DIM AS INTEGER A,PS,T
'---------------------------------------------------------------------------
' BOING DETERMINES WHETHER WE GO BACKWARDS OR FORWARDS THRU THE STRING
' AS LETTES IN ALTERNATE LINES HAVE TO BE REVERSED DUE TO THE ORDER WE
' ACTIVATE THEM!
'---------------------------------------------------------------------------
DIM AS INTEGER BOING
BOING=0
PS=1+TPP
LLM=0
FOR A=1 TO ( LHORIZ * LVERT )
'-----------------------------------------------------------------------
' SET UP SOME SPEEDS FOR EXPLOSION WHEN TEXT SCREEN CHANGES
'-----------------------------------------------------------------------
YSPD(A)= (RND(1)*7)-6
XSPD(A)= (RND(1)*5)-2.5
'-----------------------------------------------------------------------
' TURN OFF THIS LETTER AND GET NEW CHARACTER
'-----------------------------------------------------------------------
LYO(A) = 0
LYC(A) = MID(TXT,PS,1)
'-----------------------------------------------------------------------
' CYCLE THROUGH STRING FORWARDS OR BACKWARDS
'-----------------------------------------------------------------------
IF BOING=0 THEN PS=PS+1
IF BOING=1 THEN PS=PS-1
'-----------------------------------------------------------------------
' WHEN WE HAVE CALCULATED ONE LINE, REVERSE DIRECTION.
'-----------------------------------------------------------------------
T=T+1
IF T>=LHORIZ THEN
T=0
BOING=BOING+1
IF BOING>1 THEN BOING=0
IF BOING=0 THEN PS=PS+(LHORIZ+1)
IF BOING=1 THEN PS=PS+(LHORIZ-1)
END IF
NEXT
'---------------------------------------------------------------------------
' LETTERS ARE NOW OUT OF PLACE, SO RESET THIS FLAG.
'---------------------------------------------------------------------------
CHECK_PLACEMENT=0
END SUB
'-------------------------------------------------------------------------------
' SET UP GRID TARGETS FOR LETTERS IN TYPER..
'-------------------------------------------------------------------------------
SUB PRELOADGRID()
DIM AS INTEGER TOP,LFT,A,T
DIM AS INTEGER TRACKX,TRACKY
DIM AS INTEGER BOING
BOING=0
TOP=170:' TOP OF GRID.
LFT=120:' LEFT OF GRID.
TRACKY=TOP
TRACKX=LFT
FOR A=1 TO ( LHORIZ * LVERT )
LXT(A) = TRACKX
LYT(A) = TRACKY
IF BOING=0 THEN TRACKX=TRACKX+10
IF BOING=1 THEN TRACKX=TRACKX-10
T=T+1
IF T>=LHORIZ THEN
T=0
BOING=BOING+1
IF BOING>1 THEN BOING=0
IF BOING=0 THEN TRACKX=TRACKX+10
IF BOING=1 THEN TRACKX=TRACKX-10
TRACKY=TRACKY+10
END IF
NEXT
END SUB
'-------------------------------------------------------------------------------
' CUSTOM GRAPHICS SUBS;
'-------------------------------------------------------------------------------
'
' USAGE, CURVE(SOURCE X,SOURCE Y , DEST X , DEST Y, CONTROL X1 , CONTROL Y1 , CONTROL X2, CONTROL Y2)
'
SUB CURVE(BYVAL X0 AS INTEGER ,BYVAL Y0 AS INTEGER, BYVAL X3 AS INTEGER ,BYVAL Y3 AS INTEGER ,BYVAL X1 AS INTEGER ,BYVAL Y1 AS INTEGER ,BYVAL X2 AS INTEGER ,BYVAL Y2 AS INTEGER , BYVAL RR AS INTEGER , BYVAL RG AS INTEGER, BYVAL RB AS INTEGER)
dim as double T
DIM AS INTEGER L,X,Y,cx,bx,ax,cy,by,ay,CVLU,OX,OY
'CVLU = RGB(RR,RG,RB)
CX = 3*(X1-X0)
BX = 3*(X2-X1)-CX
AX = X3-X0-CX-BX
CY=3*(Y1-Y0)
BY=3*(Y2-Y1)-CY
AY=Y3-Y0-CY-BY
for t = 0 to 1.01 step .01
IF T>0 THEN
OX=X
OY=Y
END IF
x = ax * t ^ 3 + bx * t ^ 2 + cx * t + X0
y = ay * t ^ 3 + by * t ^ 2 + cy * t + Y0
IF T>0 THEN
EDGE (X,Y,OX,OY,RR,RG,RB)
END IF
next
END SUB
sub TEXT(BYVAL BX AS INTEGER , BYVAL BY AS INTEGER , BYVAL WW AS STRING , BYVAL WR AS INTEGER , BYVAL WG AS INTEGER , BYVAL WB AS INTEGER)
'
' Usage : TEXT ( X , Y , "YOUR TEXT" , R , G , B )
'
'
WW = UCASE (WW)
dim blx,bly as Uinteger
DIM as INTEGER STRX,STRY,TLP,TC,CH,TC2
TC =RGB (WR , WG , WB)
TC2 =RGB (WR SHR 1 , WG SHR 1, WB SHR 1)
dim bm,mm
FOR TLP = 0 TO LEN(WW)
CH = ASC(MID(WW,TLP,1))-31
IF CH<0 OR CH>64 THEN CH=0
'---------------------------------
'Calculate Offset In Font Data;---
'---------------------------------
bm=(ch*64)-64
STRY=BY
FOR BLY=0 TO 7
STRX=BX + ((TLP-1) * 9)
FOR BLX=1 TO 8
'--------
'Clip;---
'--------
'----------------------------------------------------
'Draw Pixel In Buffer If Onscreen And If Binary 1 ---
'----------------------------------------------------
MM= FONT((((BLY)*8)+(BLX))+BM)
IF (STRX>0) AND (STRX<XRES) and (STRY>0) AND (STRY<YRES-2)THEN
IF MM >0 THEN
BUFFER (((STRY+1)*XRES)+STRX+1) = TC2
BUFFER (((STRY)*XRES)+STRX) = TC
end if
END IF
STRX=STRX+1
NEXT
STRY=STRY+1
NEXT
NEXT
END SUB
SUB DOT (BYVAL X1 AS INTEGER , BYVAL Y1 AS INTEGER , BYVAL DR AS INTEGER , BYVAL DG AS INTEGER , BYVAL DB AS INTEGER )
'-------------------------------------------------------------------------------
' THIS SUB DRAWS A DOT AT X1 , Y1
' USAGE : DOT ( X1 , Y1 , R , G , B)
'
'-------------------------------------------------------------------------------
DIM TC AS INTEGER
TC = RGB (DR , DG , DB)
IF X1>0 AND X1 < XRES AND Y1>0 AND Y1<YRES THEN
BUFFER ( X1 + (Y1 * XRES)) = TC
END IF
END SUB
SUB EDGE(BYVAL X1 AS INTEGER , BYVAL Y1 AS INTEGER , BYVAL X2 AS INTEGER , BYVAL Y2 AS INTEGER , BYVAL LR AS INTEGER, BYVAL LG AS INTEGER, BYVAL LB AS INTEGER)
'-------------------------------------------------------------------------------
'
' THIS LINE ROUTINE IS NOT VERY FAST BUT IT WORKS. THANKS TETRA.
' USAGE:
' EDGE ( X1 , Y1 , X2 , Y2 , R , G , B )
'
'-------------------------------------------------------------------------------
DIM xdistance AS DOUBLE
DIM ydistance AS DOUBLE
DIM TC AS INTEGER
DIM i AS INTEGER
DIM h2 AS INTEGER
DIM StartX AS DOUBLE
DIM StartY AS DOUBLE
DIM XRatio AS DOUBLE
DIM YRatio AS DOUBLE
TC = RGB ( LR,LG,LB )
xdistance = X2 - X1
ydistance = Y2 - Y1
h2 = sqr( xdistance * xdistance + ydistance * ydistance )
StartX = X1
StartY = Y1
XRatio = xdistance * ( 1.0 / h2 )
YRatio = ydistance * ( 1.0 / h2 )
for i = 0 to h2
IF STARTX>0 AND STARTX<XRES AND STARTY>0 AND STARTY<YRES THEN
BUFFER ( INT(StartX) + (INT(StartY) * XRES ) ) = TC
END IF
StartX = StartX + XRatio
StartY = StartY + YRatio
next i
END SUB
SUB RECT(BYVAL X1 AS INTEGER , BYVAL Y1 AS INTEGER , BYVAL XW AS INTEGER , BYVAL YH AS INTEGER , BYVAL RR AS INTEGER , BYVAL RG AS INTEGER, BYVAL RB AS INTEGER)
'-------------------------------------------------------------------------
'
' FILLED RECTANGLE ROUTINE WITH ASSEMBLY LANGUAGE RASTERISING.
' USAGE RECT ( TOPX , TOPY , WIDTH , HEIGHT , R , G , B )
' THIS ROUTINE HAS BASIC CLIPPING TO SCREEN BOUNDARIES.
'
'-------------------------------------------------------------------------
DIM PP AS INTEGER PTR
DIM AS INTEGER SLICE,LP,TC
'-------------------------------------------------------------------------
' BASIC CLIPPING TO SCREEN;
'-------------------------------------------------------------------------
IF X1 < 0 THEN
XW = XW + X1
X1=0
END IF
IF Y1 < 0 THEN
YH = YH + Y1
Y1=0
END IF
IF XW + X1 > XRES THEN
XW = XRES - X1
END IF
IF YH + Y1 > YRES THEN
YH = (YRES - Y1)
END IF
IF XW>0 AND YH>0 THEN
TC = RGB ( RR , RG , RB )
FOR LP =Y1 TO (YH+Y1)-1
pp=@buffer((XRES*LP)+X1)
slice = XW
if slice>0 then
asm
mov eax,dword ptr[TC]
mov ecx, [slice]
mov edi, [PP]
rep stosd
end asm
end if
NEXT
END IF
END SUB
SUB CIRC(BYVAL CX AS INTEGER , BYVAL CY AS INTEGER , BYVAL R AS INTEGER, BYVAL CR AS INTEGER,BYVAL CG AS INTEGER,BYVAL CB AS INTEGER)
'-------------------------------------------------------------------------
'
' FILLED CIRCLE ROUTINE WITH ASSEMBLY LANGUAGE RASTERISING.
' USAGE CIRC ( X , Y , RADIUS , R , G , B )
' REMEMBER THAT X + Y ARE THE CENTER OF YOUR CIRCLE.
' THIS HAS BASIC CLIPPING TO SCREEN BOUNDARIES.
'
'-------------------------------------------------------------------------
DIM as integer r2,cc,loopy,ww,l,clipl , clipr,slice,tc
dim pp as integer ptr
r2=r*r
cc=-r
TC = RGB ( CR , CG , CB )
for loopy = cc to r
ww = Sqr(r2-loopy*loopy)
if loopy+cy>=0 and loopy+cy<yres then
clipl = cx-ww
clipr = (cx+ww)-1
if clipl<0 then clipl=0
if clipr>xres-1 then clipr = xres-1
pp=@buffer((XRES*(loopy+CY))+clipl)
slice = clipr-clipl
if slice>0 then
asm
mov eax,dword ptr[TC]
mov ecx, [slice]
mov edi, [PP]
rep stosd
end asm
end if
end if
next
END SUB
SUB TRIANGLE(BYVAL X1 AS INTEGER , BYVAL Y1 AS INTEGER, BYVAL X2 AS INTEGER , BYVAL Y2 AS INTEGER , BYVAL X3 AS INTEGER, BYVAL Y3 AS INTEGER , BYVAL TR AS INTEGER,BYVAL TG AS INTEGER,BYVAL TB AS INTEGER)
'-------------------------------------------------------------------------
' FLAT TRIANGLE RENDERER WITH ASSEMBLY LANGUAGE RASTERISING BY SHOCKWAVE ^ DBF ^ S!P 2006.
'
' USAGE : TRIANGLE ( X1 , Y1 , X2 , Y2 , X3 , Y3 , R , G , B )
' CLIPS TO SCREEN BOUNDARIES.
'
'-------------------------------------------------------------------------
'-------------------------------------------------------------------------
' WE NEED TO SORT THESE POINTS INTO ORDER FROM TOP TO BOTTOM, AN EXCHANGE SORT IS OK.
' AS WE ONLY HAVE GOT 3 POINTS TO ARRANGE.
'-------------------------------------------------------------------------
DIM AS INTEGER TEMPX,TEMPY,LO,LI,TC
DIM AS INTEGER PX(3)
DIM AS INTEGER PY(3)
DIM TFLAG AS INTEGER
dim pp as uinteger PTR
DIM AS INTEGER IL1,IL2,SLICE
TFLAG=0
TC = RGB ( TR , TG , TB )
PX(1)= X1
PX(2)= X2
PX(3)= X3
PY(1)= Y1
PY(2)= Y2
PY(3)= Y3
FOR LO = 1 TO 2
FOR LI =1 TO 2
IF PY(LI+1) <= PY(LI) THEN
TEMPX = PX(LI) : TEMPY = PY(LI)
PX(LI) = PX(LI+1)
PY(LI) = PY(LI+1)
PX(LI+1) = TEMPX
PY(LI+1) = TEMPY
END IF
NEXT LI
NEXT LO
' BOOT OUT INVISIBLE TRIANGLES!
IF PX(1)<0 AND PX(2)<0 AND PX(3)< 0 THEN TFLAG=1
IF PX(1)>XRES AND PX(2)>XRES AND PX(3)>XRES THEN TFLAG=1
IF PY(1)>YRES AND PY(2)>YRES AND PY(3)>YRES THEN TFLAG=1
DIM AS DOUBLE XP1,XP2:' SCREEN POSITIONS.
DIM AS DOUBLE XI1,XI2:' INTERPOLATIONS.
'***
'*** REGULAR TRIANGLE (Y1<Y2 Y2<Y3)
'***
IF PY(1)<PY(2) AND PY(2)<PY(3) or (PY(2) = PY(3)) THEN
TFLAG=1
XP1 = PX(1)
XP2 = PX(1)
XI1 = (PX(1)-PX(2)) / (PY(2) - PY(1))
XI2 = (PX(1)-PX(3)) / (PY(3) - PY(1))
FOR LO = PY(1) TO PY(2)-1
IF LO>=0 AND LO<YRES THEN
IF XP1<=XP2 THEN
IL1=XP1
IL2=XP2
ELSE
IL1=XP2
IL2=XP1
END IF
IF IL2>XRES THEN IL2=XRES
IF IL1<0 THEN IL1=0
SLICE = IL2-IL1
IF SLICE>0 THEN
PP = @BUFFER(IL1+(LO*XRES))
asm
mov eax,dword ptr[TC]
mov ecx, [slice]
mov edi, [PP]
rep stosd
end asm
END IF
END IF
XP1=XP1-XI1
XP2=XP2-XI2
NEXT
XI1 = (PX(2)-PX(3)) / (PY(3) - PY(2))
XP1 = PX(2)
FOR LO = PY(2) TO PY(3)
IF LO>=0 AND LO<YRES THEN
IF XP1<=XP2 THEN
IL1=XP1
IL2=XP2
ELSE
IL1=XP2
IL2=XP1
END IF
IF IL2>XRES THEN IL2=XRES
IF IL1<0 THEN IL1=0
SLICE = IL2-IL1
IF SLICE>0 THEN
PP = @BUFFER(IL1+(LO*XRES))
asm
mov eax,dword ptr[TC]
mov ecx, [slice]
mov edi, [PP]
rep stosd
end asm
END IF
END IF
XP1=XP1-XI1
XP2=XP2-XI2
NEXT
END IF
'***
'*** FLAT TOPPED TRIANGLE Y1=Y2
'***
IF TFLAG=0 AND PY(1) = PY(2) THEN
TFLAG=1
XP1 = PX(1)
XP2 = PX(2)
XI1 = (PX(1)-PX(3)) / (PY(3) - PY(1))
XI2 = (PX(2)-PX(3)) / (PY(3) - PY(2))
FOR LO = PY(1) TO PY(3)
IF LO>=0 AND LO<YRES THEN
IF XP1<=XP2 THEN
IL1=XP1
IL2=XP2
ELSE
IL1=XP2
IL2=XP1
END IF
IF IL2>XRES THEN IL2=XRES
IF IL1<0 THEN IL1=0
SLICE = IL2-IL1
IF SLICE>0 THEN
PP = @BUFFER(IL1+(LO*XRES))
asm
mov eax,dword ptr[TC]
mov ecx, [slice]
mov edi, [PP]
rep stosd
end asm
END IF
END IF
XP1=XP1-XI1
XP2=XP2-XI2
NEXT
END IF
END SUB
SUB READFONT()
dim lp
FOR LP=1 TO (64*64)
READ FONT(LP)
NEXT
END SUB
'space
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
'!
data 0,0,0,1,1,1,0,0
data 0,0,0,1,1,1,0,0
data 0,0,0,1,1,1,0,0
data 0,0,0,1,1,1,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,1,1,1,0,0
data 0,0,0,1,1,1,0,0
data 0,0,0,1,1,1,0,0
' "
data 0,1,1,1,0,1,1,1
data 0,1,1,1,0,1,1,1
data 0,1,1,1,0,1,1,1
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
' #
data 0,0,0,0,0,0,0,0
data 0,1,1,1,0,1,1,0
data 1,1,1,1,1,1,1,1
data 0,1,1,1,0,1,1,0
data 0,1,1,1,0,1,1,0
data 1,1,1,1,1,1,1,1
data 0,1,1,1,0,1,1,0
data 0,0,0,0,0,0,0,0
' $ = £
data 0,0,1,1,1,1,1,0
data 0,1,1,1,0,1,1,1
data 1,1,1,1,1,0,0,0
data 0,1,1,1,0,0,0,0
data 0,1,1,1,0,0,0,0
data 0,1,1,1,0,0,0,0
data 0,1,1,1,0,0,0,0
data 1,1,1,1,1,1,1,1
' %
data 0,0,0,0,0,0,0,0
data 0,1,1,0,0,1,1,1
data 0,1,1,0,1,1,1,0
data 0,0,0,1,1,1,0,0
data 0,0,1,1,1,0,0,0
data 0,1,1,1,0,1,1,0
data 1,1,1,0,0,1,1,0
data 0,0,0,0,0,0,0,0
' & = O
data 0,0,0,1,1,0,0,0
data 0,1,1,1,1,1,1,0
data 0,1,1,1,1,1,1,0
data 1,1,1,1,1,1,1,1
data 1,1,1,1,1,1,1,1
data 0,1,1,1,1,1,1,0
data 0,1,1,1,1,1,1,0
data 0,0,0,1,1,0,0,0
' '
data 0,0,0,1,1,1,0,0
data 0,0,0,1,1,1,0,0
data 0,0,0,1,1,1,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
' (
data 0,0,1,1,1,1,0,0
data 0,1,1,1,1,0,0,0
data 0,1,1,1,0,0,0,0
data 0,1,1,1,0,0,0,0
data 0,1,1,1,0,0,0,0
data 0,1,1,1,0,0,0,0
data 0,1,1,1,1,0,0,0
data 0,0,1,1,1,1,0,0
' )
data 0,0,1,1,1,1,0,0
data 0,0,0,1,1,1,1,0
data 0,0,0,0,1,1,1,0
data 0,0,0,0,1,1,1,0
data 0,0,0,0,1,1,1,0
data 0,0,0,0,1,1,1,0
data 0,0,0,1,1,1,1,0
data 0,0,1,1,1,1,0,0
' *
data 0,0,0,0,0,0,0,0
data 0,1,0,1,1,0,1,0
data 0,0,1,1,1,1,0,0
data 0,1,1,1,1,1,1,0
data 0,1,1,1,1,1,1,0
data 0,0,1,1,1,1,0,0
data 0,1,0,1,1,0,1,0
data 0,0,0,0,0,0,0,0
' +
data 0,0,0,0,0,0,0,0
data 0,0,0,1,1,0,0,0
data 0,0,0,1,1,0,0,0
data 0,1,1,1,1,1,1,0
data 0,1,1,1,1,1,1,0
data 0,0,0,1,1,0,0,0
data 0,0,0,1,1,0,0,0
data 0,0,0,0,0,0,0,0
' ,
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,1,1,1,0,0
data 0,0,0,1,1,1,0,0
data 0,0,1,1,1,1,0,0
' -
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,1,1,1,1,1,1,0
data 0,1,1,1,1,1,1,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
' .
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,1,1,0,0,0
data 0,0,0,1,1,0,0,0
' /
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,1,1,1
data 0,0,0,0,1,1,1,0
data 0,0,0,1,1,1,0,0
data 0,0,1,1,1,0,0,0
data 0,1,1,1,0,0,0,0
data 1,1,1,0,0,0,0,0
data 0,0,0,0,0,0,0,0
'0
data 0,1,1,1,1,1,1,0
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,1,0,1,1,1
data 1,1,1,0,1,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 0,1,1,1,1,1,1,0
'1
data 0,0,0,1,1,1,0,0
data 0,0,1,1,1,1,0,0
data 0,0,1,1,1,1,0,0
data 0,0,0,1,1,1,0,0
data 0,0,0,1,1,1,0,0
data 0,0,0,1,1,1,0,0
data 0,0,0,1,1,1,0,0
data 0,0,1,1,1,1,1,0
'2
data 0,0,1,1,1,1,1,0
data 0,1,1,1,0,1,1,1
data 0,0,0,0,0,1,1,1
data 0,1,1,1,1,1,1,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,1,1
data 1,1,1,1,1,1,1,1
'3
data 0,1,1,1,1,1,1,0
data 1,1,1,0,0,1,1,1
data 0,0,0,0,1,1,1,0
data 0,0,0,0,0,1,1,1
data 0,0,0,0,0,1,1,1
data 0,0,0,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 0,1,1,1,1,1,1,0
'4
data 1,1,1,0,1,1,1,0
data 1,1,1,0,1,1,1,0
data 0,1,1,1,1,1,1,1
data 0,0,1,1,1,0,0,0
data 0,0,1,1,1,0,0,0
data 0,0,1,1,1,0,0,0
data 0,0,1,1,1,0,0,0
data 0,0,1,1,1,0,0,0
'5
data 1,1,1,1,1,1,1,0
data 1,1,1,0,1,1,1,0
data 1,1,1,0,0,0,0,0
data 0,1,1,1,1,1,1,0
data 0,0,0,0,0,1,1,1
data 0,0,0,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 0,1,1,1,1,1,1,0
'6
data 1,1,0,0,0,0,0,0
data 1,1,0,0,0,0,0,0
data 1,1,0,0,0,0,0,0
data 1,1,1,1,1,1,1,0
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 0,1,1,1,1,1,1,0
'7
data 1,1,1,1,1,1,1,0
data 1,1,1,0,0,1,1,1
data 0,0,0,0,1,1,1,1
data 0,0,0,0,0,1,1,1
data 0,0,0,0,0,1,1,1
data 0,0,0,0,0,1,1,1
data 0,0,0,0,0,1,1,1
data 0,0,0,0,0,1,1,1
'8
data 0,1,1,1,1,1,1,0
data 1,1,1,0,0,1,1,1
data 0,1,1,1,1,1,1,0
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 0,1,1,1,1,1,1,0
'9
data 0,1,1,1,1,1,1,1
data 1,1,0,0,0,1,1,1
data 0,1,1,1,1,1,1,1
data 0,0,0,0,0,1,1,1
data 0,0,0,0,0,1,1,1
data 0,0,0,0,0,1,1,1
data 0,0,0,0,0,1,1,1
data 0,0,0,0,0,1,1,1
' :
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,1,1,1,0,0
data 0,0,0,1,1,1,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,1,1,1,0,0
data 0,0,0,1,1,1,0,0
data 0,0,1,1,1,1,0,0
' ;
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,1,1,1,0,0
data 0,0,0,1,1,1,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,1,1,1,0,0
data 0,0,0,1,1,1,0,0
data 0,0,0,1,1,1,0,0
' <
data 0,0,0,0,0,0,0,0
data 0,0,1,1,1,0,0,0
data 0,1,1,1,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
data 0,1,1,1,0,0,0,0
data 0,0,1,1,1,0,0,0
data 0,0,0,0,0,0,0,0
' =
data 0,0,0,0,0,0,0,0
data 0,0,1,1,1,1,0,0
data 0,0,1,1,1,1,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,1,1,1,1,0,0
data 0,0,1,1,1,1,0,0
data 0,0,0,0,0,0,0,0
' >
data 0,0,0,0,0,0,0,0
data 0,0,0,1,1,1,0,0
data 0,0,0,0,1,1,1,0
data 0,0,0,0,0,1,1,1
data 0,0,0,0,0,1,1,1
data 0,0,0,0,1,1,1,0
data 0,0,0,1,1,1,0,0
data 0,0,0,0,0,0,0,0
' ?
data 0,1,1,1,1,1,1,0
data 1,1,1,0,0,1,1,1
data 0,0,0,1,1,1,1,0
data 0,0,0,1,1,1,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,1,1,1,0,0
data 0,0,0,1,1,1,0,0
data 0,0,0,1,1,1,0,0
' @
data 0,0,0,0,0,0,0,0
data 0,0,1,1,1,1,0,0
data 0,1,1,0,0,1,1,0
data 0,1,0,1,1,0,1,0
data 0,1,0,0,0,0,1,0
data 0,1,0,1,1,0,1,0
data 0,0,1,1,1,1,0,0
data 0,0,0,0,0,0,0,0
'[]\^_?@
'A
data 0,1,1,1,1,1,1,0
data 1,1,1,0,0,1,1,1
data 1,1,1,1,1,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
'B
data 1,1,1,1,1,1,1,0
data 1,1,1,0,0,1,1,1
data 1,1,1,1,1,1,1,0
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,1,1,1,1,0
'C
data 0,1,1,1,1,1,1,0
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 0,1,1,1,1,1,1,0
'D
data 1,1,1,1,1,1,1,0
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,1,1,1,1,0
'E
data 0,1,1,1,1,1,1,0
data 1,1,1,0,0,1,1,1
data 1,1,1,1,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 0,1,1,1,1,1,1,0
'F
data 0,1,1,1,1,1,1,0
data 1,1,1,0,0,1,1,1
data 1,1,1,1,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
'G
data 0,1,1,1,1,1,1,0
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,1,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 0,1,1,1,1,1,1,0
'H
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,1,1,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
'I
data 0,1,1,1,1,1,0,0
data 0,0,1,1,1,0,0,0
data 0,0,1,1,1,0,0,0
data 0,0,1,1,1,0,0,0
data 0,0,1,1,1,0,0,0
data 0,0,1,1,1,0,0,0
data 0,0,1,1,1,0,0,0
data 0,1,1,1,1,1,0,0
'J
data 0,1,1,1,1,1,1,1
data 1,1,1,0,0,1,1,1
data 0,0,0,0,0,1,1,1
data 0,0,0,0,0,1,1,1
data 1,1,1,1,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 0,1,1,1,1,1,1,0
'K
data 1,1,1,0,1,1,1,0
data 1,1,1,0,1,1,1,0
data 1,1,1,1,1,1,0,0
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
'L
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 0,1,1,1,1,1,1,0
'M
data 0,1,1,0,1,1,1,0
data 1,1,1,1,1,1,1,1
data 1,1,1,1,0,1,1,1
data 1,1,1,1,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
'N
data 1,1,1,1,1,1,1,0
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
'O
data 0,1,1,1,1,1,1,0
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 0,1,1,1,1,1,1,0
'P
data 1,1,1,1,1,1,1,0
data 1,1,1,0,0,1,1,1
data 1,1,1,1,1,1,1,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
'Q
data 0,1,1,1,1,1,1,0
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,1,0,1,1
data 1,1,1,0,1,1,0,1
data 1,1,1,0,0,1,1,0
data 0,1,1,1,1,1,1,0
'R
data 1,1,1,1,1,1,1,0
data 1,1,1,0,0,1,1,1
data 1,1,1,1,1,1,1,0
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
'S
data 0,1,1,1,1,1,1,0
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,0,0,0
data 0,1,1,1,1,1,1,0
data 0,0,0,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 0,1,1,1,1,1,1,0
'T
data 1,1,1,1,1,1,1,0
data 0,0,1,1,1,0,0,0
data 0,0,1,1,1,0,0,0
data 0,0,1,1,1,0,0,0
data 0,0,1,1,1,0,0,0
data 0,0,1,1,1,0,0,0
data 0,0,1,1,1,0,0,0
data 0,0,1,1,1,0,0,0
'U
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 0,1,1,1,1,1,1,0
'V
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 0,1,1,0,0,1,1,0
data 0,0,1,1,1,1,0,0
'W
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,1,0,1,1,1
data 1,1,1,1,0,1,1,1
data 1,1,1,1,0,1,1,1
data 0,1,1,1,1,1,1,0
'X
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 0,1,1,1,1,1,1,0
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
'Y
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 0,1,1,1,1,1,1,1
data 0,0,0,0,0,1,1,1
data 0,0,0,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 0,1,1,1,1,1,1,0
'Z
data 0,1,1,1,1,1,1,1
data 1,1,1,0,0,1,1,1
data 0,0,0,0,0,1,1,1
data 0,1,1,1,1,1,1,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,1,1,1
data 1,1,1,1,1,1,1,0
'[
data 1,1,1,1,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,1,0,0,0,0
'\
data 1,1,0,0,0,0,0,0
data 1,1,1,0,0,0,0,0
data 0,1,1,1,0,0,0,0
data 0,0,1,1,1,0,0,0
data 0,0,0,1,1,1,0,0
data 0,0,0,0,1,1,1,0
data 0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1
']
data 0,0,0,0,1,1,1,1
data 0,0,0,0,0,1,1,1
data 0,0,0,0,0,1,1,1
data 0,0,0,0,0,1,1,1
data 0,0,0,0,0,1,1,1
data 0,0,0,0,0,1,1,1
data 0,0,0,0,0,1,1,1
data 0,0,0,0,1,1,1,1
'^
data 0,0,0,1,1,0,0,0
data 0,0,1,1,1,1,0,0
data 0,1,1,0,0,1,1,0
data 1,1,1,0,0,1,1,1
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
'_
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,1,1,1,1,1,1,0
-
Nice writer with some smooth movements.
-
Very nice effect Shockie, though I'd recomend extending the middle line on the 'E', as it looks too similar to a 'C' at the moment. I think so anyway. Love the way it explodes at the end of each paragraph! How long till this new production comes out?
-
Thanks for the feedback. I will change that letter "e".
As for when it comes out, that is a bit of a strange one.. You see I can't really advertise it on my own site! Strange? Well not really, it is going to be for a "release group". If you go to intro-inferno and search for the groups "rituel" and "postmortem" you will find some of my secret work.
I want to point out that I do not have a single piece of pirated software, I even registered my copy of winzip..
On the Amiga I would strip the crack intros off of games, delete the games and keep the intros, hence the fact that I uploaded my entire collection of amiga cracktros to Intro-Inferno.
I love the cracktro as a pure art form and these days it is one of the only ways to get an oldschool product accepted into the mainstream. I apologise in advance if this offends any of you and of course, I will be happy to remove this post if it does. (just PM me).
Cracktro (http://www.pouet.net/prod.php?which=29984) <- Oldschool baby!
-
as usual , nice effect from nice programmer , well done shocky. :)
-
Thanks Emil :)
I added some more shit to this :)
'
' POST MORTEM CRACKTRO NUMBER 2 BY SHOCKWAVE
' THIS ONE DEFINATELY HAS A STRONG OLDSCHOOL FEEL!!
' =================================================
'
'===============================================================================
' REMOVE COMMENT ON LINE BELOW FOR WINDOWED MODE
' #DEFINE PTC_WIN
#INCLUDE "TINYPTC.BI"
' ALL VARIABLES MUST BE DECLARED.
' -------------------------------
OPTION STATIC
OPTION EXPLICIT
' SCREEN DIMENSIONS.
' ------------------
CONST XRES = 640:' WIDTH
CONST YRES = 480:' HEIGHT
'-------------------------------------------------------------------------------
' THESE SUBS ARE CUSTOM BUILT GFX SUBS (c) SHOCKWAVE, REMOVE SURPLUS ONES WHEN INTRO FINISHED.
'-------------------------------------------------------------------------------
DECLARE SUB TRIANGLE(BYVAL X1 AS INTEGER , BYVAL Y1 AS INTEGER, BYVAL X2 AS INTEGER , BYVAL Y2 AS INTEGER , BYVAL X3 AS INTEGER, BYVAL Y3 AS INTEGER , BYVAL TR AS INTEGER,BYVAL TG AS INTEGER,BYVAL TB AS INTEGER)
DECLARE SUB CIRC(BYVAL CX AS INTEGER , BYVAL CY AS INTEGER , BYVAL R AS INTEGER, BYVAL CR AS INTEGER,BYVAL CG AS INTEGER,BYVAL CB AS INTEGER)
DECLARE SUB RECT(BYVAL X1 AS INTEGER , BYVAL Y1 AS INTEGER , BYVAL XW AS INTEGER , BYVAL YH AS INTEGER , BYVAL RR AS INTEGER , BYVAL RG AS INTEGER, BYVAL RB AS INTEGER)
DECLARE SUB EDGE(BYVAL X1 AS INTEGER , BYVAL Y1 AS INTEGER , BYVAL X2 AS INTEGER , BYVAL Y2 AS INTEGER , BYVAL LR AS INTEGER, BYVAL LG AS INTEGER, BYVAL LB AS INTEGER)
DECLARE SUB DOT (BYVAL X1 AS INTEGER , BYVAL Y1 AS INTEGER , BYVAL DR AS INTEGER , BYVAL DG AS INTEGER , BYVAL DB AS INTEGER )
DECLARE SUB TEXT(BYVAL BX AS INTEGER , BYVAL BY AS INTEGER , BYVAL WW AS STRING , BYVAL WR AS INTEGER, BYVAL WG AS INTEGER, BYVAL WB AS INTEGER)
DECLARE SUB CURVE(BYVAL X0 AS INTEGER ,BYVAL Y0 AS INTEGER, BYVAL X3 AS INTEGER ,BYVAL Y3 AS INTEGER ,BYVAL X1 AS INTEGER ,BYVAL Y1 AS INTEGER ,BYVAL X2 AS INTEGER ,BYVAL Y2 AS INTEGER , BYVAL RR AS INTEGER , BYVAL RG AS INTEGER, BYVAL RB AS INTEGER)
DECLARE SUB READFONT()
'-------------------------------------------------------------------------------
' VARIABLES NEEDED FOR THE INTRO;
'-------------------------------------------------------------------------------
' "FLOATING TEXT" ROUTINE VARIABLES;
'-------------------------------------------------------------------------------
DIM SHARED LHORIZ = 40: ' WIDTH OF TEXT PAGES.
DIM SHARED LVERT = 10 :' HEIGHT OF TEXT PAGES.
'-------------------------------------------------------------------------------
' SINGLE DIMENSION ARRAYS USED TO MAKE IT EASIER TO PUT LETTERS ON LATER.
'-------------------------------------------------------------------------------
DIM SHARED AS DOUBLE LXT( LHORIZ * LVERT ):' TARGET X LOCATION FOR LETTER.
DIM SHARED AS DOUBLE LYT( LHORIZ * LVERT ):' TARGET Y LOCATION FOR LETTER.
DIM SHARED AS DOUBLE LXA( LHORIZ * LVERT ):' ACTUAL X LOCATION FOR LETTER.
DIM SHARED AS DOUBLE LYA( LHORIZ * LVERT ):' ACTUAL Y LOCATION FOR LETTER.
DIM SHARED AS DOUBLE YSPD( LHORIZ * LVERT )
DIM SHARED AS DOUBLE XSPD( LHORIZ * LVERT )
DIM SHARED AS UBYTE LYO( LHORIZ * LVERT ):' IS LETTER ACTIVE? ON=1 OFF=0
DIM SHARED AS STRING LYC( LHORIZ * LVERT ):' STORES THE LETTER.
DIM SHARED AS UINTEGER LLM: ' HOW MANY LETTERS ARE ON SCREEN ATM?
DIM SHARED AS UINTEGER LTM: ' TIMER (IN FRAMES) FOR NEXT LETTER.
LLM=0
LTM=0
DIM SHARED AS UBYTE CHECK_PLACEMENT=0
DIM SHARED TPP AS INTEGER
TPP=0
DIM SHARED TXT AS STRING
DIM SHARED AS DOUBLE HOLD_TIME
'-------------------------------------------------------------------------------
' IMPORTANT!!!!! PLEASE MAKE SURE THAT YOU
' USE 40 CHARACTERS PER LINE!!!!!!!!!!!!
' YOU >>MUST<< FILL WITH SPACES TO MAKE
' SURE EACH LINE IS 40 CHARS WIDE......
' ALSO THERE ARE 10 LINES OF TEXT PER PAGE.
' DO NOT USE LESS OR MORE. THESE TEXT STRINGS
' HAVE TO BE KEPT THE SAME SIZE!!!!!!!!!!!!!!
' OTHERWISE IT WILL FUCK UP.
' I HAVE PUT THE SPACERS "|" AS A GUIDE FOR YOU
' LINE THEM UP WITH THE QUOTES AND YOU WON'T GO WRONG.
'-------------------------------------------------------------------------------
' |PAGE 1: |
TXT = TXT+" OLDSCHOOL TYPER ROUTINE! "
TXT = TXT+" ======================== "
TXT = TXT+" "
TXT = TXT+" WITH ADDED DUTCH COLOURS! "
TXT = TXT+" SPECIALLY DESIGNED FOR HANGOVERS "
TXT = TXT+" "
TXT = TXT+" -------------------------------- "
TXT = TXT+" - THIS PIECE OF SHIT WAS CODED - "
TXT = TXT+" - BY SHOCKWAVE ON A SATURDAY - "
TXT = TXT+" -------------------------------- "
' |PAGE 2: |
TXT = TXT+" -------------------------------- "
TXT = TXT+" - THIS ROUTINE WILL BE USED IN - "
TXT = TXT+" - A PRODUCTION FOR A GERMAN - "
TXT = TXT+" - GROUP BUT I THOUGHT I WOULD - "
TXT = TXT+" - RELEASE THE SOURCE FIRST!! - "
TXT = TXT+" -------------------------------- "
TXT = TXT+" "
TXT = TXT+" AREN'T I KIND? TO A FAULT INDEED.. "
TXT = TXT+" NO MORE WORDS COME TO MY MIND "
TXT = TXT+" SO GREETINGS TO YOU AND LETS WRAP! "
'-------------------------------------------------------------------------------
' LINE STARFIELD VARIABLES;
'-------------------------------------------------------------------------------
DIM SHARED AS INTEGER STARNUM = 750:' HOW MANY STARS.
DIM SHARED AS DOUBLE STRX(STARNUM):' STAR X STORE.
DIM SHARED AS DOUBLE STRY(STARNUM):' STAR Y STORE.
DIM SHARED AS DOUBLE STRZ(STARNUM):' STAR Z STORE.
'-------------------------------------------------------------------------------
' EFFECT SUBS DEFINITIONS;
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
' STARFIELD;
'-------------------------------------------------------------------------------
DECLARE SUB SETUPSTARS()
DECLARE SUB STARFIELD()
'-------------------------------------------------------------------------------
' TEXT WRITER;
'-------------------------------------------------------------------------------
DECLARE SUB PRELOADGRID():' SET UP GRID POSITIONS FOR THE LETTERS.
DECLARE SUB RESETWRITER():' NEW TEXT PAGE FOR WRITER.
DECLARE SUB HYPERTEXTER():' THIS SUB DOES THE TEXT WRITER.
'-------------------------------------------------------------------------------
' OPEN THE SCREEN
'-------------------------------------------------------------------------------
DIM SHARED AS UINTEGER BUFFER ( XRES * YRES )
DIM SHARED FONT (64 * 64) as Uinteger : ' FONT BUFFER
DIM SHARED AS DOUBLE GADD,GADD4,GADD3,GADD2
READFONT()
PRELOADGRID()
RESETWRITER()
SETUPSTARS()
If( PTC_OPEN( "FREEBASIC GRAPHICS SCREEN", XRES, YRES ) = 0 ) Then
End -1
End If
'-------------------------------------------------------------------------------
' THE MAIN LOOP;
'-------------------------------------------------------------------------------
DIM SHARED RGADD AS DOUBLE
while (1)
RGADD= .025*SIN(GADD/270)
STARFIELD()
HYPERTEXTER()
PTC_UPDATE @ BUFFER (0)
ERASE BUFFER
GADD=GADD+1
GADD4=GADD4+.053
GADD3=GADD3+.1
GADD2=GADD2+.0257
wend
'-------------------------------------------------------------------------------
' DRAW THE STARS AND MOVE THEM ETC.
'-------------------------------------------------------------------------------
SUB STARFIELD()
DIM AS INTEGER TX,TY,TX2,TY2,A,CVV
DIM AS DOUBLE XX,YY,MO1,MO2
FOR A=1 TO STARNUM
'--------------------------------------------------------------------------
' WE NEED TO GENERATE 2 SETS OF X AND Y FOR EACH "STAR" SO WE CAN DRAW A LINE
'--------------------------------------------------------------------------
TX = (STRX(A) / STRZ(A)) + 320
TY = (STRY(A) / STRZ(A)) + 240
TX2 = (STRX(A) / (STRZ(A)+.5)) + 320
TY2 = (STRY(A) / (STRZ(A)+.5)) + 240
'--------------------------------------------------------------------------
' ONSCREEN? IF SO DRAW IT.
'--------------------------------------------------------------------------
IF TX>0 AND TX<XRES AND TY>0 AND TY<YRES AND TX2>0 AND TX2<XRES AND TY2>0 AND TY2<YRES THEN
CVV = (INT(-STRZ(A)+35)) SHL 2
EDGE (TX,TY,TX2,TY2,CVV,CVV,CVV)
ELSE
'------------------------------------------------------------------------
' IT'S OFFSCREEN? GENERATE A NEW ONE.
'------------------------------------------------------------------------
STRX(A) = (RND(1) * 20000) - 10000
STRY(A) = (RND(1) * 20000) - 10000
STRZ(A) = 32
END IF
'--------------------------------------------------------------------------
' MOVE THE STAR.
'--------------------------------------------------------------------------
STRZ(A)=STRZ(A)-.5
NEXT
MO1= COS(RGADD):' GENERATE MATRIX CONSTANT 1
MO2= SIN(RGADD):' GENERATE MATRIX CONSTANT 2
FOR A=1 TO STARNUM
'-----------------------------------------------------------------------
' ROTATE THE STAR
'-----------------------------------------------------------------------
XX = MO1 * STRX(A) - MO2 * STRY(A)
YY = MO1 * STRY(A) + MO2 * STRX(A)
STRX(A) = XX
STRY(A) = YY
NEXT
END SUB
'-------------------------------------------------------------------------------
' INITIALISE THE NICE STARFIELD
'-------------------------------------------------------------------------------
SUB SETUPSTARS()
DIM A AS INTEGER
FOR A=1 TO STARNUM
STRX(A) = (RND(1) * 10000) - 5000
STRY(A) = (RND(1) * 10000) - 5000
STRZ(A) = (RND(1) * 32 )
NEXT
END SUB
'-------------------------------------------------------------------------------
' THE NICE WRITER;
'-------------------------------------------------------------------------------
SUB HYPERTEXTER()
DIM AS INTEGER A,CF
DIM AS DOUBLE FX,FY
DIM AS DOUBLE XDV
DIM AS DOUBLE YDV
XDV=37
YDV=45
'---------------------------------------------------------------------------
' DRAW THE ACTIVE LETTERS ON THE SCREEN;
'---------------------------------------------------------------------------
FOR A=0 TO LLM
IF INT(LXA(A))>-8 AND INT(LXA(A))<XRES AND INT(LYA(A))>-8 AND INT(LYA(A))<YRES THEN
TEXT(INT(LXA(A)),INT(LYA(A)),LYC(A),150+100*SIN((A+GADD4)),150+100*SIN((A+GADD3)),150+100*SIN((A+GADD2)))
END IF
NEXT
'---------------------------------------------------------------------------
' IF ALL LETTERS ARE NOT IN PLACE THEN WE NEED TO DO THE WRITER;
'---------------------------------------------------------------------------
IF CHECK_PLACEMENT=0 THEN
'---------------------------------------------------------------------------
' THIS "FLOATING" POINT IS THE ORIGIN WHERE NEW LETTERS APPEAR FROM.
'---------------------------------------------------------------------------
FX = XRES/2 + (70*SIN(GADD/ 7)+70*COS(GADD/9)+120*SIN(GADD/6))
FY = YRES/2 + (70*SIN(GADD/ 6)+70*COS(GADD/11)+80*SIN(GADD /4))
IF LLM < (LHORIZ * LVERT) THEN
LLM = LLM + 1
LXA(LLM) = FX
LYA(LLM) = FY
LYO(LLM) = 1
END IF
FOR A=0 TO LLM
IF LXA(A)<>LXT(A) THEN
LXA(A)=LXA(A)+((LXT(A)-LXA(A))/XDV)
END IF
IF LYA(A)<>LYT(A) THEN
LYA(A)=LYA(A)+((LYT(A)-LYA(A))/YDV)
END IF
IF LXA(A)-LXT(A) >-.5 AND LXA(A)-LXT(A) <.5 THEN LXA(A)=LXT(A)
IF LYA(A)-LYT(A) >-.5 AND LYA(A)-LYT(A) <.5 THEN LYA(A)=LYT(A)
NEXT
END IF
'---------------------------------------------------------------------------
' CHECK IF ALL LETTERS ARE IN PLACE;
'---------------------------------------------------------------------------
IF LLM>= ( LHORIZ * LVERT ) AND CHECK_PLACEMENT=0 THEN
CF=1
FOR A = 1 TO LLM
IF LXA(A)<> LXT(A) OR LYA(A)<>LYT(A) THEN CF=0
NEXT
'---------------------------------------------------------------------------
' IF ALL LETTERS ARE IN PLACE BEGIN 8 SECOND COUNTDOWN
'---------------------------------------------------------------------------
IF CF=1 THEN
CHECK_PLACEMENT=1
HOLD_TIME = TIMER
END IF
END IF
'---------------------------------------------------------------------------
' IF ALL LETTERS ARE IN PLACE AND THE COUNTDOWN HAS PASSED 5 SECS WE NEED TO
' START GETTING RID OF THE LETTERS
'---------------------------------------------------------------------------
IF CHECK_PLACEMENT=1 AND TIMER-HOLD_TIME >=5.5 AND TIMER-HOLD_TIME <=6 THEN
FOR A=0 TO LLM
LYA(A)=LYA(A)+ (RND(1)-.5)
LXA(A)=LXA(A)+ (RND(1)-.5)
'IF YSPD(A)<12 THEN YSPD(A)=YSPD(A)+.2
NEXT
END IF
'---------------------------------------------------------------------------
' IF ALL LETTERS ARE IN PLACE AND THE COUNTDOWN HAS PASSED 5 SECS WE NEED TO
' START GETTING RID OF THE LETTERS
'---------------------------------------------------------------------------
IF CHECK_PLACEMENT=1 AND TIMER-HOLD_TIME >=6 THEN
FOR A=0 TO LLM
LYA(A)=LYA(A)+YSPD(A)
LXA(A)=LXA(A)+XSPD(A)
IF YSPD(A)<12 THEN YSPD(A)=YSPD(A)+.2
NEXT
END IF
'---------------------------------------------------------------------------
' GO TO NEXT PAGE IF COUNTDOWN>8 SECS AND LETTERS WERE IN PLACE.
'---------------------------------------------------------------------------
IF CHECK_PLACEMENT=1 AND TIMER-HOLD_TIME >=8 THEN
TPP=TPP+(LHORIZ*LVERT)
IF TPP>LEN(TXT)-(LHORIZ*LVERT) THEN TPP=0
RESETWRITER()
END IF
END SUB
'-------------------------------------------------------------------------------
' CLEAR OUT OLD TEXT AND SET UP NEW PAGE IN TEXT WRITER.
'-------------------------------------------------------------------------------
SUB RESETWRITER()
DIM AS INTEGER A,PS,T
'---------------------------------------------------------------------------
' BOING DETERMINES WHETHER WE GO BACKWARDS OR FORWARDS THRU THE STRING
' AS LETTES IN ALTERNATE LINES HAVE TO BE REVERSED DUE TO THE ORDER WE
' ACTIVATE THEM!
'---------------------------------------------------------------------------
DIM AS INTEGER BOING
BOING=0
PS=1+TPP
LLM=0
FOR A=1 TO ( LHORIZ * LVERT )
'-----------------------------------------------------------------------
' SET UP SOME SPEEDS FOR EXPLOSION WHEN TEXT SCREEN CHANGES
'-----------------------------------------------------------------------
YSPD(A)= (RND(1)*12)-9
XSPD(A)= (RND(1)*7)-3.5
'-----------------------------------------------------------------------
' TURN OFF THIS LETTER AND GET NEW CHARACTER
'-----------------------------------------------------------------------
LYO(A) = 0
LYC(A) = MID(TXT,PS,1)
'-----------------------------------------------------------------------
' CYCLE THROUGH STRING FORWARDS OR BACKWARDS
'-----------------------------------------------------------------------
IF BOING=0 THEN PS=PS+1
IF BOING=1 THEN PS=PS-1
'-----------------------------------------------------------------------
' WHEN WE HAVE CALCULATED ONE LINE, REVERSE DIRECTION.
'-----------------------------------------------------------------------
T=T+1
IF T>=LHORIZ THEN
T=0
BOING=BOING+1
IF BOING>1 THEN BOING=0
IF BOING=0 THEN PS=PS+(LHORIZ+1)
IF BOING=1 THEN PS=PS+(LHORIZ-1)
END IF
NEXT
'---------------------------------------------------------------------------
' LETTERS ARE NOW OUT OF PLACE, SO RESET THIS FLAG.
'---------------------------------------------------------------------------
CHECK_PLACEMENT=0
END SUB
'-------------------------------------------------------------------------------
' SET UP GRID TARGETS FOR LETTERS IN TYPER..
'-------------------------------------------------------------------------------
SUB PRELOADGRID()
DIM AS INTEGER TOP,LFT,A,T
DIM AS INTEGER TRACKX,TRACKY
DIM AS INTEGER BOING
BOING=0
TOP=180:' TOP OF GRID.
LFT=124:' LEFT OF GRID.
TRACKY=TOP
TRACKX=LFT
FOR A=1 TO ( LHORIZ * LVERT )
LXT(A) = TRACKX
LYT(A) = TRACKY
IF BOING=0 THEN TRACKX=TRACKX+10
IF BOING=1 THEN TRACKX=TRACKX-10
T=T+1
IF T>=LHORIZ THEN
T=0
BOING=BOING+1
IF BOING>1 THEN BOING=0
IF BOING=0 THEN TRACKX=TRACKX+10
IF BOING=1 THEN TRACKX=TRACKX-10
TRACKY=TRACKY+10
END IF
NEXT
END SUB
'-------------------------------------------------------------------------------
' CUSTOM GRAPHICS SUBS;
'-------------------------------------------------------------------------------
'
' USAGE, CURVE(SOURCE X,SOURCE Y , DEST X , DEST Y, CONTROL X1 , CONTROL Y1 , CONTROL X2, CONTROL Y2)
'
SUB CURVE(BYVAL X0 AS INTEGER ,BYVAL Y0 AS INTEGER, BYVAL X3 AS INTEGER ,BYVAL Y3 AS INTEGER ,BYVAL X1 AS INTEGER ,BYVAL Y1 AS INTEGER ,BYVAL X2 AS INTEGER ,BYVAL Y2 AS INTEGER , BYVAL RR AS INTEGER , BYVAL RG AS INTEGER, BYVAL RB AS INTEGER)
dim as double T
DIM AS INTEGER L,X,Y,cx,bx,ax,cy,by,ay,CVLU,OX,OY
'CVLU = RGB(RR,RG,RB)
CX = 3*(X1-X0)
BX = 3*(X2-X1)-CX
AX = X3-X0-CX-BX
CY=3*(Y1-Y0)
BY=3*(Y2-Y1)-CY
AY=Y3-Y0-CY-BY
for t = 0 to 1.01 step .01
IF T>0 THEN
OX=X
OY=Y
END IF
x = ax * t ^ 3 + bx * t ^ 2 + cx * t + X0
y = ay * t ^ 3 + by * t ^ 2 + cy * t + Y0
IF T>0 THEN
EDGE (X,Y,OX,OY,RR,RG,RB)
END IF
next
END SUB
sub TEXT(BYVAL BX AS INTEGER , BYVAL BY AS INTEGER , BYVAL WW AS STRING , BYVAL WR AS INTEGER , BYVAL WG AS INTEGER , BYVAL WB AS INTEGER)
'
' Usage : TEXT ( X , Y , "YOUR TEXT" , R , G , B )
'
'
WW = UCASE (WW)
dim blx,bly as Uinteger
DIM as INTEGER STRX,STRY,TLP,TC,CH,TC2
TC =RGB (WR , WG , WB)
TC2 =RGB ( WR SHR 1 , WG SHR 1, WB SHR 1 )
dim bm,mm
FOR TLP = 0 TO LEN(WW)
CH = ASC(MID(WW,TLP,1))-31
IF CH<0 OR CH>64 THEN CH=0
'---------------------------------
'Calculate Offset In Font Data;---
'---------------------------------
bm=(ch*64)-64
STRY=BY
FOR BLY=0 TO 7
STRX=BX + ((TLP-1) * 9)
FOR BLX=1 TO 8
'--------
'Clip;---
'--------
'----------------------------------------------------
'Draw Pixel In Buffer If Onscreen And If Binary 1 ---
'----------------------------------------------------
MM= FONT((((BLY)*8)+(BLX))+BM)
IF (STRX>0) AND (STRX<XRES-3) and (STRY>0) AND (STRY<YRES-3)THEN
IF MM >0 THEN
BUFFER (((STRY+2)*XRES)+STRX+2) = TC2
BUFFER (((STRY)*XRES)+STRX) = TC
end if
END IF
STRX=STRX+1
NEXT
STRY=STRY+1
NEXT
NEXT
END SUB
SUB DOT (BYVAL X1 AS INTEGER , BYVAL Y1 AS INTEGER , BYVAL DR AS INTEGER , BYVAL DG AS INTEGER , BYVAL DB AS INTEGER )
'-------------------------------------------------------------------------------
' THIS SUB DRAWS A DOT AT X1 , Y1
' USAGE : DOT ( X1 , Y1 , R , G , B)
'
'-------------------------------------------------------------------------------
DIM TC AS INTEGER
TC = RGB (DR , DG , DB)
IF X1>0 AND X1 < XRES AND Y1>0 AND Y1<YRES THEN
BUFFER ( X1 + (Y1 * XRES)) = TC
END IF
END SUB
SUB EDGE(BYVAL X1 AS INTEGER , BYVAL Y1 AS INTEGER , BYVAL X2 AS INTEGER , BYVAL Y2 AS INTEGER , BYVAL LR AS INTEGER, BYVAL LG AS INTEGER, BYVAL LB AS INTEGER)
'-------------------------------------------------------------------------------
'
' THIS LINE ROUTINE IS NOT VERY FAST BUT IT WORKS. THANKS TETRA.
' USAGE:
' EDGE ( X1 , Y1 , X2 , Y2 , R , G , B )
'
'-------------------------------------------------------------------------------
DIM xdistance AS DOUBLE
DIM ydistance AS DOUBLE
DIM TC AS INTEGER
DIM i AS INTEGER
DIM h2 AS INTEGER
DIM StartX AS DOUBLE
DIM StartY AS DOUBLE
DIM XRatio AS DOUBLE
DIM YRatio AS DOUBLE
TC = RGB ( LR,LG,LB )
xdistance = X2 - X1
ydistance = Y2 - Y1
h2 = sqr( xdistance * xdistance + ydistance * ydistance )
StartX = X1
StartY = Y1
XRatio = xdistance * ( 1.0 / h2 )
YRatio = ydistance * ( 1.0 / h2 )
for i = 0 to h2
IF STARTX>0 AND STARTX<XRES AND STARTY>0 AND STARTY<YRES-1 THEN
BUFFER ( INT(StartX) + (INT(StartY) * XRES ) ) = TC
END IF
StartX = StartX + XRatio
StartY = StartY + YRatio
next i
END SUB
SUB RECT(BYVAL X1 AS INTEGER , BYVAL Y1 AS INTEGER , BYVAL XW AS INTEGER , BYVAL YH AS INTEGER , BYVAL RR AS INTEGER , BYVAL RG AS INTEGER, BYVAL RB AS INTEGER)
'-------------------------------------------------------------------------
'
' FILLED RECTANGLE ROUTINE WITH ASSEMBLY LANGUAGE RASTERISING.
' USAGE RECT ( TOPX , TOPY , WIDTH , HEIGHT , R , G , B )
' THIS ROUTINE HAS BASIC CLIPPING TO SCREEN BOUNDARIES.
'
'-------------------------------------------------------------------------
DIM PP AS INTEGER PTR
DIM AS INTEGER SLICE,LP,TC
'-------------------------------------------------------------------------
' BASIC CLIPPING TO SCREEN;
'-------------------------------------------------------------------------
IF X1 < 0 THEN
XW = XW + X1
X1=0
END IF
IF Y1 < 0 THEN
YH = YH + Y1
Y1=0
END IF
IF XW + X1 > XRES THEN
XW = XRES - X1
END IF
IF YH + Y1 > YRES THEN
YH = (YRES - Y1)
END IF
IF XW>0 AND YH>0 THEN
TC = RGB ( RR , RG , RB )
FOR LP =Y1 TO (YH+Y1)-1
pp=@buffer((XRES*LP)+X1)
slice = XW
if slice>0 then
asm
mov eax,dword ptr[TC]
mov ecx, [slice]
mov edi, [PP]
rep stosd
end asm
end if
NEXT
END IF
END SUB
SUB CIRC(BYVAL CX AS INTEGER , BYVAL CY AS INTEGER , BYVAL R AS INTEGER, BYVAL CR AS INTEGER,BYVAL CG AS INTEGER,BYVAL CB AS INTEGER)
'-------------------------------------------------------------------------
'
' FILLED CIRCLE ROUTINE WITH ASSEMBLY LANGUAGE RASTERISING.
' USAGE CIRC ( X , Y , RADIUS , R , G , B )
' REMEMBER THAT X + Y ARE THE CENTER OF YOUR CIRCLE.
' THIS HAS BASIC CLIPPING TO SCREEN BOUNDARIES.
'
'-------------------------------------------------------------------------
DIM as integer r2,cc,loopy,ww,l,clipl , clipr,slice,tc
dim pp as integer ptr
r2=r*r
cc=-r
TC = RGB ( CR , CG , CB )
for loopy = cc to r
ww = Sqr(r2-loopy*loopy)
if loopy+cy>=0 and loopy+cy<yres then
clipl = cx-ww
clipr = (cx+ww)-1
if clipl<0 then clipl=0
if clipr>xres-1 then clipr = xres-1
pp=@buffer((XRES*(loopy+CY))+clipl)
slice = clipr-clipl
if slice>0 then
asm
mov eax,dword ptr[TC]
mov ecx, [slice]
mov edi, [PP]
rep stosd
end asm
end if
end if
next
END SUB
SUB TRIANGLE(BYVAL X1 AS INTEGER , BYVAL Y1 AS INTEGER, BYVAL X2 AS INTEGER , BYVAL Y2 AS INTEGER , BYVAL X3 AS INTEGER, BYVAL Y3 AS INTEGER , BYVAL TR AS INTEGER,BYVAL TG AS INTEGER,BYVAL TB AS INTEGER)
'-------------------------------------------------------------------------
' FLAT TRIANGLE RENDERER WITH ASSEMBLY LANGUAGE RASTERISING BY SHOCKWAVE ^ DBF ^ S!P 2006.
'
' USAGE : TRIANGLE ( X1 , Y1 , X2 , Y2 , X3 , Y3 , R , G , B )
' CLIPS TO SCREEN BOUNDARIES.
'
'-------------------------------------------------------------------------
'-------------------------------------------------------------------------
' WE NEED TO SORT THESE POINTS INTO ORDER FROM TOP TO BOTTOM, AN EXCHANGE SORT IS OK.
' AS WE ONLY HAVE GOT 3 POINTS TO ARRANGE.
'-------------------------------------------------------------------------
DIM AS INTEGER TEMPX,TEMPY,LO,LI,TC
DIM AS INTEGER PX(3)
DIM AS INTEGER PY(3)
DIM TFLAG AS INTEGER
dim pp as uinteger PTR
DIM AS INTEGER IL1,IL2,SLICE
TFLAG=0
TC = RGB ( TR , TG , TB )
PX(1)= X1
PX(2)= X2
PX(3)= X3
PY(1)= Y1
PY(2)= Y2
PY(3)= Y3
FOR LO = 1 TO 2
FOR LI =1 TO 2
IF PY(LI+1) <= PY(LI) THEN
TEMPX = PX(LI) : TEMPY = PY(LI)
PX(LI) = PX(LI+1)
PY(LI) = PY(LI+1)
PX(LI+1) = TEMPX
PY(LI+1) = TEMPY
END IF
NEXT LI
NEXT LO
' BOOT OUT INVISIBLE TRIANGLES!
IF PX(1)<0 AND PX(2)<0 AND PX(3)< 0 THEN TFLAG=1
IF PX(1)>XRES AND PX(2)>XRES AND PX(3)>XRES THEN TFLAG=1
IF PY(1)>YRES AND PY(2)>YRES AND PY(3)>YRES THEN TFLAG=1
DIM AS DOUBLE XP1,XP2:' SCREEN POSITIONS.
DIM AS DOUBLE XI1,XI2:' INTERPOLATIONS.
'***
'*** REGULAR TRIANGLE (Y1<Y2 Y2<Y3)
'***
IF PY(1)<PY(2) AND PY(2)<PY(3) or (PY(2) = PY(3)) THEN
TFLAG=1
XP1 = PX(1)
XP2 = PX(1)
XI1 = (PX(1)-PX(2)) / (PY(2) - PY(1))
XI2 = (PX(1)-PX(3)) / (PY(3) - PY(1))
FOR LO = PY(1) TO PY(2)-1
IF LO>=0 AND LO<YRES THEN
IF XP1<=XP2 THEN
IL1=XP1
IL2=XP2
ELSE
IL1=XP2
IL2=XP1
END IF
IF IL2>XRES THEN IL2=XRES
IF IL1<0 THEN IL1=0
SLICE = IL2-IL1
IF SLICE>0 THEN
PP = @BUFFER(IL1+(LO*XRES))
asm
mov eax,dword ptr[TC]
mov ecx, [slice]
mov edi, [PP]
rep stosd
end asm
END IF
END IF
XP1=XP1-XI1
XP2=XP2-XI2
NEXT
XI1 = (PX(2)-PX(3)) / (PY(3) - PY(2))
XP1 = PX(2)
FOR LO = PY(2) TO PY(3)
IF LO>=0 AND LO<YRES THEN
IF XP1<=XP2 THEN
IL1=XP1
IL2=XP2
ELSE
IL1=XP2
IL2=XP1
END IF
IF IL2>XRES THEN IL2=XRES
IF IL1<0 THEN IL1=0
SLICE = IL2-IL1
IF SLICE>0 THEN
PP = @BUFFER(IL1+(LO*XRES))
asm
mov eax,dword ptr[TC]
mov ecx, [slice]
mov edi, [PP]
rep stosd
end asm
END IF
END IF
XP1=XP1-XI1
XP2=XP2-XI2
NEXT
END IF
'***
'*** FLAT TOPPED TRIANGLE Y1=Y2
'***
IF TFLAG=0 AND PY(1) = PY(2) THEN
TFLAG=1
XP1 = PX(1)
XP2 = PX(2)
XI1 = (PX(1)-PX(3)) / (PY(3) - PY(1))
XI2 = (PX(2)-PX(3)) / (PY(3) - PY(2))
FOR LO = PY(1) TO PY(3)
IF LO>=0 AND LO<YRES THEN
IF XP1<=XP2 THEN
IL1=XP1
IL2=XP2
ELSE
IL1=XP2
IL2=XP1
END IF
IF IL2>XRES THEN IL2=XRES
IF IL1<0 THEN IL1=0
SLICE = IL2-IL1
IF SLICE>0 THEN
PP = @BUFFER(IL1+(LO*XRES))
asm
mov eax,dword ptr[TC]
mov ecx, [slice]
mov edi, [PP]
rep stosd
end asm
END IF
END IF
XP1=XP1-XI1
XP2=XP2-XI2
NEXT
END IF
END SUB
SUB READFONT()
dim lp
FOR LP=1 TO (64*64)
READ FONT(LP)
NEXT
END SUB
'space
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
'!
data 0,0,0,1,1,1,0,0
data 0,0,0,1,1,1,0,0
data 0,0,0,1,1,1,0,0
data 0,0,0,1,1,1,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,1,1,1,0,0
data 0,0,0,1,1,1,0,0
data 0,0,0,1,1,1,0,0
' "
data 0,1,1,1,0,1,1,1
data 0,1,1,1,0,1,1,1
data 0,1,1,1,0,1,1,1
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
' #
data 0,0,0,0,0,0,0,0
data 0,1,1,1,0,1,1,0
data 1,1,1,1,1,1,1,1
data 0,1,1,1,0,1,1,0
data 0,1,1,1,0,1,1,0
data 1,1,1,1,1,1,1,1
data 0,1,1,1,0,1,1,0
data 0,0,0,0,0,0,0,0
' $ = £
data 0,0,1,1,1,1,1,0
data 0,1,1,1,0,1,1,1
data 1,1,1,1,1,0,0,0
data 0,1,1,1,0,0,0,0
data 0,1,1,1,0,0,0,0
data 0,1,1,1,0,0,0,0
data 0,1,1,1,0,0,0,0
data 1,1,1,1,1,1,1,1
' %
data 0,0,0,0,0,0,0,0
data 0,1,1,0,0,1,1,1
data 0,1,1,0,1,1,1,0
data 0,0,0,1,1,1,0,0
data 0,0,1,1,1,0,0,0
data 0,1,1,1,0,1,1,0
data 1,1,1,0,0,1,1,0
data 0,0,0,0,0,0,0,0
' & = O
data 0,0,0,1,1,0,0,0
data 0,1,1,1,1,1,1,0
data 0,1,1,1,1,1,1,0
data 1,1,1,1,1,1,1,1
data 1,1,1,1,1,1,1,1
data 0,1,1,1,1,1,1,0
data 0,1,1,1,1,1,1,0
data 0,0,0,1,1,0,0,0
' '
data 0,0,0,1,1,1,0,0
data 0,0,0,1,1,1,0,0
data 0,0,0,1,1,1,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
' (
data 0,0,1,1,1,1,0,0
data 0,1,1,1,1,0,0,0
data 0,1,1,1,0,0,0,0
data 0,1,1,1,0,0,0,0
data 0,1,1,1,0,0,0,0
data 0,1,1,1,0,0,0,0
data 0,1,1,1,1,0,0,0
data 0,0,1,1,1,1,0,0
' )
data 0,0,1,1,1,1,0,0
data 0,0,0,1,1,1,1,0
data 0,0,0,0,1,1,1,0
data 0,0,0,0,1,1,1,0
data 0,0,0,0,1,1,1,0
data 0,0,0,0,1,1,1,0
data 0,0,0,1,1,1,1,0
data 0,0,1,1,1,1,0,0
' *
data 0,0,0,0,0,0,0,0
data 0,1,0,1,1,0,1,0
data 0,0,1,1,1,1,0,0
data 0,1,1,1,1,1,1,0
data 0,1,1,1,1,1,1,0
data 0,0,1,1,1,1,0,0
data 0,1,0,1,1,0,1,0
data 0,0,0,0,0,0,0,0
' +
data 0,0,0,0,0,0,0,0
data 0,0,0,1,1,0,0,0
data 0,0,0,1,1,0,0,0
data 0,1,1,1,1,1,1,0
data 0,1,1,1,1,1,1,0
data 0,0,0,1,1,0,0,0
data 0,0,0,1,1,0,0,0
data 0,0,0,0,0,0,0,0
' ,
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,1,1,1,0,0
data 0,0,0,1,1,1,0,0
data 0,0,1,1,1,1,0,0
' -
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,1,1,1,1,1,1,0
data 0,1,1,1,1,1,1,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
' .
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,1,1,0,0,0
data 0,0,0,1,1,0,0,0
' /
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,1,1,1
data 0,0,0,0,1,1,1,0
data 0,0,0,1,1,1,0,0
data 0,0,1,1,1,0,0,0
data 0,1,1,1,0,0,0,0
data 1,1,1,0,0,0,0,0
data 0,0,0,0,0,0,0,0
'0
data 0,1,1,1,1,1,1,0
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,1,0,1,1,1
data 1,1,1,0,1,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 0,1,1,1,1,1,1,0
'1
data 0,0,0,1,1,1,0,0
data 0,0,1,1,1,1,0,0
data 0,0,1,1,1,1,0,0
data 0,0,0,1,1,1,0,0
data 0,0,0,1,1,1,0,0
data 0,0,0,1,1,1,0,0
data 0,0,0,1,1,1,0,0
data 0,0,1,1,1,1,1,0
'2
data 0,0,1,1,1,1,1,0
data 0,1,1,1,0,1,1,1
data 0,0,0,0,0,1,1,1
data 0,1,1,1,1,1,1,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,1,1
data 1,1,1,1,1,1,1,1
'3
data 0,1,1,1,1,1,1,0
data 1,1,1,0,0,1,1,1
data 0,0,0,0,1,1,1,0
data 0,0,0,0,0,1,1,1
data 0,0,0,0,0,1,1,1
data 0,0,0,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 0,1,1,1,1,1,1,0
'4
data 1,1,1,0,1,1,1,0
data 1,1,1,0,1,1,1,0
data 0,1,1,1,1,1,1,1
data 0,0,1,1,1,0,0,0
data 0,0,1,1,1,0,0,0
data 0,0,1,1,1,0,0,0
data 0,0,1,1,1,0,0,0
data 0,0,1,1,1,0,0,0
'5
data 1,1,1,1,1,1,1,0
data 1,1,1,0,1,1,1,0
data 1,1,1,0,0,0,0,0
data 0,1,1,1,1,1,1,0
data 0,0,0,0,0,1,1,1
data 0,0,0,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 0,1,1,1,1,1,1,0
'6
data 1,1,0,0,0,0,0,0
data 1,1,0,0,0,0,0,0
data 1,1,0,0,0,0,0,0
data 1,1,1,1,1,1,1,0
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 0,1,1,1,1,1,1,0
'7
data 1,1,1,1,1,1,1,0
data 1,1,1,0,0,1,1,1
data 0,0,0,0,1,1,1,1
data 0,0,0,0,0,1,1,1
data 0,0,0,0,0,1,1,1
data 0,0,0,0,0,1,1,1
data 0,0,0,0,0,1,1,1
data 0,0,0,0,0,1,1,1
'8
data 0,1,1,1,1,1,1,0
data 1,1,1,0,0,1,1,1
data 0,1,1,1,1,1,1,0
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 0,1,1,1,1,1,1,0
'9
data 0,1,1,1,1,1,1,1
data 1,1,0,0,0,1,1,1
data 0,1,1,1,1,1,1,1
data 0,0,0,0,0,1,1,1
data 0,0,0,0,0,1,1,1
data 0,0,0,0,0,1,1,1
data 0,0,0,0,0,1,1,1
data 0,0,0,0,0,1,1,1
' :
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,1,1,1,0,0
data 0,0,0,1,1,1,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,1,1,1,0,0
data 0,0,0,1,1,1,0,0
data 0,0,1,1,1,1,0,0
' ;
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,1,1,1,0,0
data 0,0,0,1,1,1,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,1,1,1,0,0
data 0,0,0,1,1,1,0,0
data 0,0,0,1,1,1,0,0
' <
data 0,0,0,0,0,0,0,0
data 0,0,1,1,1,0,0,0
data 0,1,1,1,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
data 0,1,1,1,0,0,0,0
data 0,0,1,1,1,0,0,0
data 0,0,0,0,0,0,0,0
' =
data 0,0,0,0,0,0,0,0
data 0,0,1,1,1,1,0,0
data 0,0,1,1,1,1,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,1,1,1,1,0,0
data 0,0,1,1,1,1,0,0
data 0,0,0,0,0,0,0,0
' >
data 0,0,0,0,0,0,0,0
data 0,0,0,1,1,1,0,0
data 0,0,0,0,1,1,1,0
data 0,0,0,0,0,1,1,1
data 0,0,0,0,0,1,1,1
data 0,0,0,0,1,1,1,0
data 0,0,0,1,1,1,0,0
data 0,0,0,0,0,0,0,0
' ?
data 0,1,1,1,1,1,1,0
data 1,1,1,0,0,1,1,1
data 0,0,0,1,1,1,1,0
data 0,0,0,1,1,1,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,1,1,1,0,0
data 0,0,0,1,1,1,0,0
data 0,0,0,1,1,1,0,0
' @
data 0,0,0,0,0,0,0,0
data 0,0,1,1,1,1,0,0
data 0,1,1,0,0,1,1,0
data 0,1,0,1,1,0,1,0
data 0,1,0,0,0,0,1,0
data 0,1,0,1,1,0,1,0
data 0,0,1,1,1,1,0,0
data 0,0,0,0,0,0,0,0
'[]\^_?@
'A
data 0,1,1,1,1,1,1,0
data 1,1,1,0,0,1,1,1
data 1,1,1,1,1,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
'B
data 1,1,1,1,1,1,1,0
data 1,1,1,0,0,1,1,1
data 1,1,1,1,1,1,1,0
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,1,1,1,1,0
'C
data 0,1,1,1,1,1,1,0
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 0,1,1,1,1,1,1,0
'D
data 1,1,1,1,1,1,1,0
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,1,1,1,1,0
'E
data 0,1,1,1,1,1,1,0
data 1,1,1,0,0,1,1,1
data 1,1,1,1,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 0,1,1,1,1,1,1,0
'F
data 0,1,1,1,1,1,1,0
data 1,1,1,0,0,1,1,1
data 1,1,1,1,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
'G
data 0,1,1,1,1,1,1,0
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,1,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 0,1,1,1,1,1,1,0
'H
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,1,1,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
'I
data 0,1,1,1,1,1,0,0
data 0,0,1,1,1,0,0,0
data 0,0,1,1,1,0,0,0
data 0,0,1,1,1,0,0,0
data 0,0,1,1,1,0,0,0
data 0,0,1,1,1,0,0,0
data 0,0,1,1,1,0,0,0
data 0,1,1,1,1,1,0,0
'J
data 0,1,1,1,1,1,1,1
data 1,1,1,0,0,1,1,1
data 0,0,0,0,0,1,1,1
data 0,0,0,0,0,1,1,1
data 1,1,1,1,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 0,1,1,1,1,1,1,0
'K
data 1,1,1,0,1,1,1,0
data 1,1,1,0,1,1,1,0
data 1,1,1,1,1,1,0,0
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
'L
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 0,1,1,1,1,1,1,0
'M
data 0,1,1,0,1,1,1,0
data 1,1,1,1,1,1,1,1
data 1,1,1,1,0,1,1,1
data 1,1,1,1,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
'N
data 1,1,1,1,1,1,1,0
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
'O
data 0,1,1,1,1,1,1,0
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 0,1,1,1,1,1,1,0
'P
data 1,1,1,1,1,1,1,0
data 1,1,1,0,0,1,1,1
data 1,1,1,1,1,1,1,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
'Q
data 0,1,1,1,1,1,1,0
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,1,0,1,1
data 1,1,1,0,1,1,0,1
data 1,1,1,0,0,1,1,0
data 0,1,1,1,1,1,1,0
'R
data 1,1,1,1,1,1,1,0
data 1,1,1,0,0,1,1,1
data 1,1,1,1,1,1,1,0
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
'S
data 0,1,1,1,1,1,1,0
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,0,0,0
data 0,1,1,1,1,1,1,0
data 0,0,0,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 0,1,1,1,1,1,1,0
'T
data 1,1,1,1,1,1,1,0
data 0,0,1,1,1,0,0,0
data 0,0,1,1,1,0,0,0
data 0,0,1,1,1,0,0,0
data 0,0,1,1,1,0,0,0
data 0,0,1,1,1,0,0,0
data 0,0,1,1,1,0,0,0
data 0,0,1,1,1,0,0,0
'U
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 0,1,1,1,1,1,1,0
'V
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 0,1,1,0,0,1,1,0
data 0,0,1,1,1,1,0,0
'W
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,1,0,1,1,1
data 1,1,1,1,0,1,1,1
data 1,1,1,1,0,1,1,1
data 0,1,1,1,1,1,1,0
'X
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 0,1,1,1,1,1,1,0
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
'Y
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 0,1,1,1,1,1,1,1
data 0,0,0,0,0,1,1,1
data 0,0,0,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 1,1,1,0,0,1,1,1
data 0,1,1,1,1,1,1,0
'Z
data 0,1,1,1,1,1,1,1
data 1,1,1,0,0,1,1,1
data 0,0,0,0,0,1,1,1
data 0,1,1,1,1,1,1,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,1,1,1
data 1,1,1,1,1,1,1,0
'[
data 1,1,1,1,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,0,0,0,0,0
data 1,1,1,1,0,0,0,0
'\
data 1,1,0,0,0,0,0,0
data 1,1,1,0,0,0,0,0
data 0,1,1,1,0,0,0,0
data 0,0,1,1,1,0,0,0
data 0,0,0,1,1,1,0,0
data 0,0,0,0,1,1,1,0
data 0,0,0,0,0,1,1,1
data 0,0,0,0,0,0,1,1
']
data 0,0,0,0,1,1,1,1
data 0,0,0,0,0,1,1,1
data 0,0,0,0,0,1,1,1
data 0,0,0,0,0,1,1,1
data 0,0,0,0,0,1,1,1
data 0,0,0,0,0,1,1,1
data 0,0,0,0,0,1,1,1
data 0,0,0,0,1,1,1,1
'^
data 0,0,0,1,1,0,0,0
data 0,0,1,1,1,1,0,0
data 0,1,1,0,0,1,1,0
data 1,1,1,0,0,1,1,1
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
'_
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,0,0,0,0,0,0,0
data 0,1,1,1,1,1,1,0
-
I should say that I watched this;
INSPIRATION (http://www.intro-inferno.com/production.php?id=9)
before I started coding.
-
Nice demo , I just wonder in which language was this demo written ?
-
Alpha One uses C++ and Direct X.
-
wow , but it is only 42.1 KB , :)
my be tommorw i will try to port his demo to OgreMagic.
-
That's a cool text routine :goodpost:
-
Thanks Rbraz :)
Emil, you are goingto have the size problem because your library includes everything it could possibly need.
The freebasic framework I use for instance is very small, it is based on gaffers tinyptc lib. This is very small because all it does is to open a window, and update that window with doulbe buffering from a memory block. Rbraz and Jim worked on it to change it from GDI drawing to opengl so that the refresh had vsync so that smooth movement and scrolling was possible.
To be able to generate an exe size of about 70kb is a good guide (as long as no gfx are included), when packed with kkrunchy or upx, the size comes down dramatically.
If you released an intro that was 3mb at Pouet it wouldn't get a good reception. I can see ogermagic being of a lot more use in a bigger production, a full demo with many scenes. Having said that, Intro's are excellent fodder to test the features of Ogermagic on and I say more power to you. It's refreshing to see someone with your enthusiasm with such a cool tool :) I'll look forward to seeing your conversion of Alpha One's intro. I am in touch with him sometimes so I will even show him that you've made a conversion :)
-
Cool stuff.
-
Oh , thanks shocky , for your explaination.
I was thinking that , instead of making it as a DLL ,I will make it as a static library , so that when liking operation the linker will get what it actually needed.
But doing it as a static library may produce some problem in linking with some language.
BTW my first Magic Library was a static one , it was an extension for Irrlicht 3D engine and under OpenGL.
Any way I will give it a try and see.
an other thing that i want to tell you , i have successfully made an one exe file installer for OgreMagic as you suggested. :)
-
The one file installer is definately the way to go! :)
Well done, I don't know about how to get the file size down.. Perhaps Ogermagic would need to be split down into modules? For instance #include "OM_PNGLOADER" etc.. and yeah, it may not be as simlple as including the whole library, but it would make Ogermagic more practical to use in things like intros.
But don't forget, your library will still have it's uses for peple who want to write games and bigger projects.
3MB is nothing in some demos, I've downloaded some demos that were like 15mb. But when I downloaded those things I exected to be entertained for 10 to 15 minutes!
-
I have encountered a huge numbers of undefined reference errors with a static library , so I think the DLL is the best solution. So reduce the size is not my first priority , but the speed is it, may be later I do it.
-
That's a shame, I might have used this myself, but if it is going to cause a lot of problems, then maybe it's best to get it working as fast as it can first... It's just that I've seen some great libs like Adigun Polack's fb primitive lib coming in for a lot of criticism because of file size, even though it's a great lib.
-
Excellent typer. I really do like it !
-
Thank you Benny :)
-
Sweet typer Shocky, nice work.....
-
Thanks mate :)
-
it has been already said....nice work! :)
-
Hi shocky.
i have a good news , i have made a static OgreMagic Library , so the linker will take what it need only , but still there are small problem, it still need the d3dx9.dll which is 825 KB , so i want to search for a static d3dx9 library.
any way tomorrow i will keep on working and let you know the results.
-
Should that dll be installed on most up to date systems anyway?
-
I did not found it in my system , so that I think it does not come with system by default , Does you system has it by default?
Any way , I can include it with my OgreMagic installer and copy it to System32 in the destination computer , so it will be there and there is no need to redistribute it every time.
-
That would be a good idea.Eventually we'll get to the point where ogermagic exes will be small enough to upload to the showcase here :)
-
Shockwave,
That sure is some amazing stuff - BUT - it runs way way too fast on my laptop for some reason?
Anybody else had this trouble?
Drew
-
Your gfx card settings have been altered by the sound of it mate.
Make sure you have v-sync enabled. :)
-
that cool C64 TYPER :P
-
On the Amiga you could have done it, but not on the C64, you might have got the letters to drift into place but when they explode all over the screen the C64 wouldn't have handled it. Glad you liked it though Hotshot :)
-
Very nice effect! I love it, though some letters are hard to read. :2funny: