I think this might have been the best thing I ever made in Yabasic, I was really proud of the font and the scroll. I know it was only wireframe but nobody had really done that on the PS2 before this.
'The Box Clever Demo, Coded By SHOCKWAVE (C) 2002.
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
'Contact me at:
'
'Shockwave@ps2-yabasic.co.uk
'www.yabasic.co.uk
'www.ps2-yabasic.co.uk
'
'Enjoy the demo. :o)
'#########################################################
gosub initialise
gosub slapemin
'^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
repeat
setdrawbuf dw
dw=1-dw
setdispbuf dw
setrgb 1,6,23,3
setrgb 2,3,33,7
setrgb 3,3,48,3
gtriangle 0,0 to 640,512 to 0,512
gtriangle 0,0 to 640,512 to 640,0
setrgb 2,10,10,30
setrgb 3,10,10,40
mm=mm+.02
size=30+25*sin(mm)
f1=8:f2=4:f3=3
gosub draw
f1=12:f2=8:f3=3
gosub draw
f1=12:f2=13:f3=8
gosub draw
f1=13:f2=4:f3=8
gosub draw
f1=12:f2=3:f3=7
gosub draw
f1=3:f2=4:f3=5
gosub draw
f1=13:f2=9:f3=4
gosub draw
f1=4:f2=9:f3=1
gosub draw
f1=4:f2=1:f3=5
gosub draw
f1=3:f2=5:f3=2
gosub draw
f1=5:f2=1:f3=2
gosub draw
f1=7:f2=3:f3=2
gosub draw
f1=6:f2=2:f3=1
gosub draw
f1=11:f2=7:f3=2
gosub draw
f1=11:f2=2:f3=6
gosub draw
f1=10:f2=11:f3=6
gosub draw
f1=10:f2=6:f3=1
gosub draw
f1=9:f2=10:f3=1
gosub draw
f1=13:f2=10:f3=9
gosub draw
f1=12:f2=7:f3=11
gosub draw
f1=12:f2=11:f3=14
gosub draw
f1=13:f2=12:f3=14
gosub draw
f1=13:f2=14:f3=10
gosub draw
f1=14:f2=11:f3=10
gosub draw
setrgb 1,50,50,120
f1=8:f2=4:f3=3
gosub draw2
f1=12:f2=8:f3=3
gosub draw2
f1=12:f2=13:f3=8
gosub draw2
f1=13:f2=4:f3=8
gosub draw2
f1=12:f2=3:f3=7
gosub draw2
f1=3:f2=4:f3=5
gosub draw2
f1=13:f2=9:f3=4
gosub draw2
f1=4:f2=9:f3=1
gosub draw2
f1=4:f2=1:f3=5
gosub draw2
f1=3:f2=5:f3=2
gosub draw2
f1=5:f2=1:f3=2
gosub draw2
f1=7:f2=3:f3=2
gosub draw2
f1=6:f2=2:f3=1
gosub draw2
f1=11:f2=7:f3=2
gosub draw2
f1=11:f2=2:f3=6
gosub draw2
f1=10:f2=11:f3=6
gosub draw2
f1=10:f2=6:f3=1
gosub draw2
f1=9:f2=10:f3=1
gosub draw2
f1=13:f2=10:f3=9
gosub draw2
f1=12:f2=7:f3=11
gosub draw2
f1=12:f2=11:f3=14
gosub draw2
f1=13:f2=12:f3=14
gosub draw2
f1=13:f2=14:f3=10
gosub draw2
f1=14:f2=11:f3=10
gosub draw2
setrgb 1,30,155,155
for a=1 to str
tx=(sx(a)/sz(a))+320
ty=(sy(a)/sz(a))+256
siz=6-sz(a)
sz(a)=sz(a)-.04
fill rect tx,ty to tx+siz,ty+siz
if (tx<0) or (tx>640) or (ty<0) or (ty>512) then
sx(a)=-1500+ran(3000)
sy(a)=-1500+ran(3000)
sz(a)=5
fi
next a
gosub rotate
gosub scroller
until (and(peek("port1"),16384)<>0)
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
exit
label slapemin
setrgb 1,150,250,150
text 320,226,"CONVERTING SCROLL TO ASCII FORMAT","cc"
text 320,400,"BOX CLEVER (C) SHOCKWAVE 2002","cc"
mmm=0
target=len(s$)+1
for a=1 to len(s$)
letter=asc(mid$(s$,a,1))-48
ostore(mmm)=(letter*10)
if ostore(mmm)<0 ostore(mmm)=-1
mmm=mmm+1
width=(int((target-a)/len(s$)*100))*2
rect 420,240 to 420-width,260
next a
p=p+1
if p>len(s$)-5 p=0
clear window
'---------------------------------------------------------
'Take the offsets and build the connection data from them
'--------------------------------------------------------
setrgb 1,150,250,150
text 320,226,"CALCULATING SCROLL CONNECTIONS","cc"
text 320,400,"EMAIL: SHOCKWAVE@PS2-YABASIC.CO.UK","cc"
os=1
l=0
for a=1 to len(s$)
for b=1 to 10
connects(os)=fnt(ostore(a)+b)
if ostore(a)<0 connects(os)=(1)
os=os+1
next b
width=(int((target-a)/len(s$)*100))*2
rect 420,240 to 420-width,260
next a
flag=0
l=0
p=0
return
label scroller
scrl=scrl-8
if scrl<-164 then
scrl=scrl+164
p=p+10
if (p/10)>(len(s$)-6) p=0
fi
f=100+100*sin(mm)
setrgb 1,155+f,155+f,255
lf=0
l=0
for a=1 to 50 step 2
line txx(connects(p+a)+l)+scrl,tyy(connects(p+a)+l) to txx(connects(p+a+1)+l)+scrl,tyy(connects(p+a+1)+l)
lf=lf+1
if lf=5 then lf=0:l=l+9:fi
next a
return
label draw
'##############################
'## Draw A Face Of The Cube! ##
'##############################
l=l+1
if l>5 l=4
vx1= tx(f1)-tx(f2)
vy1= ty(f1)-ty(f2)
vx2= tx(f3)-tx(f2)
vy2= ty(f3)-ty(f2)
if (vx1*vy2-vx2*vy1)<0 then
light=-(tz(f1)+tz(f2)+tz(f3))*l
setrgb 1,r+light,g+light,b+light
gtriangle tx(f1),ty(f1) to tx(f2),ty(f2) to tx(f3),ty(f3)
setrgb 1,r+30+light,g+30+light,b+30+light
triangle tx(f1),ty(f1) to tx(f2),ty(f2) to tx(f3),ty(f3)
fi
return
label draw2
'##############################
'## Draw A Face Of The Cube! ##
'##############################
vx1= tx(f1)-tx(f2)
vy1= ty(f1)-ty(f2)
vx2= tx(f3)-tx(f2)
vy2= ty(f3)-ty(f2)
if (vx1*vy2-vx2*vy1)>0 then
triangle tx(f1),ty(f1) to tx(f2),ty(f2) to tx(f3),ty(f3)
fi
return
label rotate
'###############################################
'## Rotate And Scale Each Point! Store Result ##
'###############################################
for a=1 to polys
x1=x(a)
y1=y(a)
z1=z(a)
'######################
'## X,Y,Z rotations! ##
'######################
xx=x1
yy=y1*cs(xr)+z1*sn(xr)
zz=z1*cs(xr)-y1*sn(xr)
y1=yy
x1=xx*cs(yr)-zz*sn(yr)
z1=xx*sn(yr)+zz*cs(yr)
zz=z1
xx=x1*cs(zr)-y1*sn(zr)
yy=x1*sn(zr)+y1*cs(zr)
'########################
'## Apply Perspective! ##
'########################
xx=size*(xx/((zz/50)+1))+320
yy=size*(yy/((zz/50)+1))+256
tx(a)=xx
ty(a)=yy
tz(a)=zz
next a
xr=xr+3
yr=yr+2
zr=zr+4
if xr>720 xr=xr-720
if yr>720 yr=yr-720
if zr>720 zr=zr-720
return
label initialise
'^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
' This Sub-Routine Initialises The Program.
'^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
'######################
'## Open Gfx Screen! ##
'######################
open window 640,512
'#####################################
'## Define the necessary variables! ##
'#####################################
size=29: rem how big do you want it?
dw=1 : Rem Double buffering Variable
polys=14 : Rem The amount of polygons in the object
dim x(polys) : Rem Original X co-ordinate store
dim y(polys) : Rem Original Y co-ordinate store
dim z(polys) : Rem Original Z co-ordinate store
dim tx(polys) : Rem Transformed X co-ordinate store
dim ty(polys) : Rem Transformed Y co-ordinate store
dim tz(polys) : Rem Transformed Z co-ordinate store
str=65
dim sx(str),sy(str),sz(str)
for a=1 to str
sx(a)=-1000+ran(2000)
sy(a)=-1000+ran(2000)
sz(a)=ran(5)
next a
r=10
g=10
b=40
'##########################
'## Define Sine Tables!! ##
'##########################
dim cs(720)
dim sn(720)
for ang=0 to 720
cs(ang)=cos(ang*(pi/360))
sn(ang)=sin(ang*(pi/360))
next ang
'#########################
'## Read in the object! ##
'#########################
for a=1 to polys
read x(a),y(a),z(a)
next a
s$=" "
s$=s$+"WHAT YOU ARE LOOKING AT SHOULD NOT BE POSSIBLE IN "
s$=s$+"YABASIC :: ;SHOCKWAVE; PRESENTS THE BOX CLEVER"
s$=s$+" DEMONSTRATION CODED IN JULY 2002 ; YOU ARE NOW "
s$=s$+"LOOKING AT A VECTOR SCROLL TEXT AND 70 3D STARS "
s$=s$+"WITH A NEW GLASS TYPE OBJECT THAT I BASED ON A "
s$=s$+"BOX AND STRETCHED OUT THE MIDDLES ; HENCE THE "
s$=s$+"NAME OF THE DEMO ; INCIDENTALLY I CREATED THE "
s$=s$+"OBJECT WITH MY VECTOR EDITOR ;; DO YOU CODE 3D "
s$=s$+"STUFF?? DOWNLOAD IT FROM WWW PS2:YABASIC CO UK "
s$=s$+"AND SEE WHAT YOU CAN COME UP WITH YOU CAN "
s$=s$+"EMAIL ME AT SHOCKWAVE@PS2-YABASIC CO UK "
s$=s$+"OR VISIT THE FORUMS AT WWW YABASIC CO UK AND LEAVE"
s$=s$+"ME A MESSAGE ;:;:;:; ANYWAY ALL THATS LEFT NOW ARE"
s$=s$+" THE OBLIGATORY GREETINGS SO IN NO ORDER GREETS TO"
s$=s$+" :XALTHORN:DOCTOR:RAFRYER:JIM SHAW:SNAKEDOGG:"
s$=s$+"JOMORROW:DEMONEYE:ZINGSTER:JINX:KYATAAVL:ELL:"
s$=s$+"BIGYABASIC:BRUASSET:SEPHIROTH:MASTER TONBERRY:"
s$=s$+"BONGOTRUMMOR:PARABELLUM:JACOB BUSBY:STATIC GERBIL:"
s$=s$+"COMBATKING:AND EVERYONE WHO I HAVE FORGOTTEN ;THER"
s$=s$+"E ARE SO MANY OF YOU NOW; "
s$=s$+" I HOPE THAT YOULL ALL ENJOY THE LATEST BATCH "
s$=s$+"OF DEMOS I HAVE RELEASED AND ID JUST LIKE TO SAY "
s$=s$+"A SPECIAL BIG THANK YOU TO XALTHORN FOR UPLOADING "
s$=s$+"THEM <CHEERS MATE> "
s$=s$+" FUNNILY ENOUGH THIS TEXT DOESNT SEEM TO BE "
s$=s$+"SLOWING THE DEMO DOWN AT ALL : NORMALY THE BIGGER "
s$=s$+"THE STRING THE SLOWER THE CODE "
s$=s$+"IT ISNT ACCESSING THE STRING AT ALL THOUGH AS I "
s$=s$+"HAD TO PRECALCULATE THE SCROLL TEXT TO A FAIRLY "
s$=s$+"LARGE DEGREE AND THERE IS NO REAL TIME STRING "
s$=s$+"HANDLING IN THIS DEMO ; THE REST OF IT IS "
s$=s$+"IN REAL TIME THOUGH AND I SUPPOSE THAT THE SCROLL "
s$=s$+"IS ONLY 2 THIRDS PRECALCULATED IN ALL ; "
s$=s$+"ANYWAY I WANTED TO DO SOMETHING DIFFERENT I WAS "
s$=s$+"GETTING IRED OF USING THE BUILT IN FONT ALL THE "
s$=s$+"TIME ;;;; EVERYTHING WAS BEGINNING TO LOOK THE SAM"
s$=s$+"E ; WELL I GUESS THAT THIS TEXT IS NOW LONG "
s$=s$+"ENOUGH BECAUSE I HAVE RUN OUT OF THINGS TO SAY "
s$=s$+"TO YOU SCROLL RESTARTS IN A FEW MOMENTS "
s$=s$+";;10;; "
s$=s$+";;9;; "
s$=s$+";;8;; "
s$=s$+";;7;; "
s$=s$+";;6;; "
s$=s$+";;5;; "
s$=s$+";;4;; "
s$=s$+";;3;; "
s$=s$+";;2;; "
s$=s$+";;1;; "
s$=s$+";;0;; "
s$=s$+" "
dim ostore(len(s$))
dim scx(45),scy(45),txx(45),tyy(45):rem scroll template.
dim connects(10*len(s$)):Rem This stores display lines.
dim fnt (430) :Rem storage space for letter connections.
for a=1 to 45
read scx(a),scy(a)
next a
for a=1 to 45
txx(a)=(55*scx(a))+540
tyy(a)=(55*scy(a))+256
next a
for a=1 to 430
read fnt(a)
next a
'^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
' The Object Description As Data!
' The Data Below Describes A Special Cube/Sphere.
' Designed with Shockwave's vector editor.
'^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
data 5,-5,-5,5,5,-5,-5,5,-5,-5,-5,-5,0,0,-8,8,0,0,0,8,0,-8,0,0,0,-8,0,5,-5,5,5,5,5,-5,5,5,-5,-5,5,0,0,8
'^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
'The Scroling message template;
'^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
data -10,-1,-9,-1,-8,-1,-10,0,-9,0,-8,0,-10,1,-9,1,-8,1
data -7,-1,-6,-1,-5,-1,-7,0,-6,0,-5,0,-7,1,-6,1,-5,1
data -4,-1,-3,-1,-2,-1,-4,0,-3,0,-2,0,-4,1,-3,1,-2,1
data -1,-1,0,-1,1,-1,-1,0,0,0,1,0,-1,1,0,1,1,1
data 2,-1,3,-1,4,-1,2,0,3,0,4,0,2,1,3,1,4,1
'^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
'The Font. (Each letter has five lines).
'^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
'AscII map;
'48=0:49=1:50=2:51=3:52=4:53=5:54=6:55=7:56=8:57=9:58=:
'59=;:60=<:61==:62=>:63=?:64=@:65=A: to 90= Z:
'
'Font designed by shockwave. DO NOT RIP without credit!
'
'0 to 3
data 1,3,3,9,9,7,7,1,1,9
data 4,2,2,5,5,8,8,7,8,9
data 2,3,3,6,6,4,4,7,7,9
data 1,2,2,6,6,4,6,9,9,7
'4 to 7
data 1,4,4,5,5,2,5,8,5,6
data 2,1,1,4,4,6,6,9,9,7
data 3,1,1,7,7,9,9,6,6,4
data 1,3,3,6,6,4,6,8,8,6
'8 to 9,:,;
data 1,3,3,9,9,7,7,1,4,6
data 1,3,3,6,6,4,4,1,6,8
data 4,6,6,4,4,6,6,4,4,6 :rem colon gives -
data 2,8,4,6,1,9,3,7,4,6 :rem semicolon gives *
'< = > ? @
data 3,4,4,9,9,5,5,3,3,4
data 1,3,3,1,7,9,9,7,7,9
data 1,6,6,7,7,5,5,1,1,6
data 1,3,3,6,6,5,5,4,7,8
data 3,1,1,7,7,9,9,6,6,8
'A to D;
data 7,4,4,2,2,6,6,9,4,6
data 1,7,7,9,9,4,4,6,6,1
data 6,3,3,2,2,4,4,7,7,9
data 1,2,2,6,6,9,9,7,7,1
'E to H
data 3,2,2,4,4,6,4,7,7,9
data 3,2,2,4,4,6,4,7,4,7
data 3,4,4,7,7,9,9,6,6,5
data 1,7,4,6,3,9,4,6,4,6
'I to L
data 1,2,2,3,2,8,7,8,8,9
data 1,3,3,6,6,8,8,7,7,4
data 1,7,4,2,9,5,5,4,4,5
data 1,4,4,7,7,8,8,9,8,9
'M to P
data 1,3,3,9,1,7,2,5,5,2
data 7,4,4,1,1,5,5,9,9,3
data 1,3,3,9,9,7,7,1,1,3
data 7,4,4,1,1,3,3,6,6,4
'Q to T
data 1,3,3,9,9,7,7,1,9,5
data 1,2,2,6,6,4,4,9,1,7
data 3,1,1,4,4,6,6,9,9,7
data 1,3,3,1,2,5,5,8,8,2
'U to X
data 1,7,7,8,8,9,9,6,6,3
data 1,4,4,8,8,6,6,3,3,6
data 1,7,7,9,9,3,8,5,5,8
data 1,5,5,9,3,5,5,7,7,5
'Y to Z
data 1,4,4,6,6,3,6,9,9,7
data 1,2,2,3,3,7,7,8,8,9
return



