Yes, its true - you can download it from my homepage... No music with it though...
I'll be using a variant of this in the game I'll soon be designing...
A picture is here :
and the code is here :
Rem Project: TitleSequence
Rem Created: 17/01/2003 19:27:33
Rem ***** Main Source File *****
#constant STATE_CURSOR_READY 0
#constant STATE_CURSOR_ADD 1
#constant STATE_CHAR_TIMER 2
#constant CURSOR_XPOS 0
#constant CURSOR_XPOS2 2
#constant CURSOR_YPOS 4
#constant CURSOR_TIMER 6
#constant CURSOR_POSINSTR 8
#constant CURSOR_STATE 10
#constant CURSOR_TEXTLEN 12
#constant CURSOR_DIR 14
#constant CURSOR_SPRNUM 16
#constant CURSOR_TEXT 18
#constant TEXT_XPOS 0
#constant TEXT_YPOS 2
#constant TEXT_CHAR 4
#constant TEXT_SPR 8
#constant BANK 0
#constant XSIZE 32
#constant YSIZE 32
dim px#(4)
dim px2#(4)
global textAddr
global textHeader
global addr
global which
type dataText
x as integer
y as integer
dirT as integer
s as string
endtype
global dim text$(10) as dataText
which=1
text$(1).x=32 : text$(1).y=32 : text$(1).dirT=1 : text$(1).s="HOME SOFTWARE|PRESENTS"
text$(2).x=980 : text$(2).y=32 : text$(2).dirT=-1 : text$(2).s="YELSGNIK SALOHCIN A|NOITCUDORP"
text$(3).x=32 : text$(3).y=70 : text$(3).dirT=1 : text$(3).s="DESIGNED AND WRITTEN BY|NICHOLAS KINGSLEY"
text$(4).x=32 : text$(4).y=700: text$(4).dirT=1 : text$(4).s="2D GRAPHICS BY|NICHOLAS KINGSLEY"
text$(5).x=32 : text$(5).y=180: text$(5).dirT=1 : text$(5).s="3D GRAPHICS BY|NICHOLAS KINGSLEY"
text$(6).x=980 : text$(6).y=700: text$(6).dirT=-1 : text$(6).s="YB CISUM|YELSGNIK SALOHCIN"
text$(7).x=980 : text$(7).y=32 : text$(7).dirT=-1 : text$(7).s="YB SNI-GULP|YELSGNIK SALOHCIN"
text$(8).x=32 : text$(8).y=50 : text$(8).dirT=1 : text$(8).s="MODULES BY|NICHOLAS KINGSLEY"
text$(9).x=32 : text$(9).y=32 : text$(9).dirT=1 : text$(9).s="PRODUCER|NICHOLAS KINGSLEY"
text$(10).x=32 : text$(10).y=700:text$(10).dirT=1 : text$(10).s="DIRECTED BY|NICHOLAS KINGSLEY"
print createFont(10,4,_
XSIZE,YSIZE,_
0,0,_
XSIZE,YSIZE,_
"E:\Users\Nicholas\Bitmap fonts\FM_ICC2.BMP",_
"ABCDEFGHIJKLMNOPQRSTUVWXYZ:!.? 123456789:.,()-!?",BANK)
load image "D.BMP",4,1
load image "U.BMP",3,1
load image "E.BMP",2,1
load image "L.BMP",1,1
load image "cursor.bmp",5,1
draw sprites last
addr=make memory(64)
textAddr=make memory(64)
cursorHeader=linkList_CreateHeader()
textHeader=linkList_CreateHeader()
pokeS addr,CURSOR_XPOS,1
pokeS addr,CURSOR_XPOS2,1
pokeS addr,CURSOR_YPOS,1
pokeS addr,CURSOR_TIMER,900
pokeS addr,CURSOR_POSINSTR,0
pokeS addr,CURSOR_STATE,STATE_CURSOR_READY
cursorNode=linkList_AddNode(cursorHeader,addr,64,0)
hide all sprites
for x=4 to 1 step -1
px#(x)=0.0-(x*screen width())
sprite x,px#(x),0,x
set sprite x,0,1
size sprite x,screen width(),screen height()
set sprite alpha x,20
next x
for x=1 to 4
px2#(x)=screen width()+((x-1)*screen width())*1.0
sprite x+4,px2#(x),0,5-x
set sprite x+4,0,1
size sprite x+4,screen width(),screen height()
next x
show all sprites
repeat
cls 0
processState(cursorNode)
for x=1 to 4
inc px#(x),0.25
sprite x,px#(x),0,x
dec px2#(x),0.25
sprite x+4,px2#(x),0,5-x
next x
sync
until escapekey()=1
x=linkList_FreeHeader(cursorHeader)
x=linkList_FreeHeader(textHeader)
delete memory (addr)
delete memory (textAddr)
end
function processState(cursorNode as DWORD)
local x as dword
local value as dword
local state as dword
local node as dword
local char as byte
x=linklist_GetNodeData(cursorNode,addr,64,0)
state=peekS(addr,CURSOR_STATE)
select state
case STATE_CURSOR_READY : Rem Cursor ready state
value=peekS(addr,CURSOR_TIMER)
dec value
pokeS addr,CURSOR_TIMER,value
if value=peekS(addr,CURSOR_TEXTLEN)
rem End of this bit of text
pokeS addr,CURSOR_TIMER,250
pokeS addr,CURSOR_STATE,STATE_CHAR_TIMER
else
xPos=peekS(addr,CURSOR_XPOS)
yPos=peekS(addr,CURSOR_YPOS)
char=peekB(addr,CURSOR_TEXT+value)
if char=124
Rem New line
pokeS addr,CURSOR_YPOS,yPos+YSIZE
pokeS addr,CURSOR_XPOS,peekS(addr,CURSOR_XPOS2)
else
if char32
spr=peekS(addr,CURSOR_SPRNUM)
pokeS textAddr,TEXT_XPOS,xPos
pokeS textAddr,TEXT_YPOS,yPos
pokeS textAddr,TEXT_CHAR,char
pokeS textAddr,TEXT_SPR,spr
inc spr
pokeS addr,CURSOR_SPRNUM,spr
x=linkList_AddNode(textHeader,textAddr,64,0)
endif
rem
rem A proper character
pokeS addr,CURSOR_XPOS,peekS(addr,CURSOR_XPOS)+_
peekS(addr,CURSOR_DIR)*XSIZE
pokeS addr,CURSOR_TIMER,50
rem Write the character
endif
pokeS addr,CURSOR_POSINSTR,value+1
pokeS addr,CURSOR_TIMER,50
rem Reset the timer
endif
else
pokeS addr,CURSOR_TIMER,peekS(addr,CURSOR_TIMER)-1
endif
x=linkList_WriteNodeData(cursorNode,addr,64,0)
endcase
CASE STATE_CHAR_TIMER : Rem set timer until clearing everything
if peekS(addr,CURSOR_TIMER)=0
node=linklist_getfirstnode(textheader)
while node0
x=linklist_GetNodeData(node,textAddr,64,0)
dx=peekS(textAddr,TEXT_SPR)
if sprite exist(dx)0
delete sprite dx
endif
node=linkList_GetNextNode(node)
endwhile
x=linkList_ClearList(textheader)
rem next one
inc which
pokeS addr,CURSOR_STATE,STATE_CURSOR_READY
pokeS addr,CURSOR_TIMER,50
pokeS addr,CURSOR_XPOS2,text$(which).x
pokeS addr,CURSOR_XPOS,text$(which).x
pokeS addr,CURSOR_YPOS,text$(which).y
pokeS addr,CURSOR_DIR,text$(which).dirT
pokeS addr,CURSOR_SPRNUM,128
else
pokeS addr,CURSOR_TIMER,peekS(addr,CURSOR_TIMER)-1
endif
x=linkList_WriteNodeData(cursorNode,addr,64,0)
endcase
endselect
if stateSTATE_CURSOR_READY
sprite 127,peekS(addr,CURSOR_XPOS),peekS(addr,CURSOR_YPOS),5
` sprite 127,peekS(addr,CURSOR_XPOS),_
` peekS(addr,CURSOR_YPOS),5
endif
node=linklist_getfirstnode(textheader)
while node0
x=linklist_GetNodeData(node,textAddr,64,0)
sprite peekS(textAddr,TEXT_SPR),_
peekS(textAddr,TEXT_XPOS),_
peekS(textAddr,TEXT_YPOS),peekS(textAddr,TEXT_CHAR)
node=linkList_GetNextNode(node)
endwhile
endfunction