Here RiiDii code sorted to run in 6.2
rem Created by RiiDii
Rem ***** Main Source File *****
Sync On:
Sync Rate 60:
Autocam Off:
Global n#:
Global cFlag as Integer:
Global LimbMatrix As Integer:
Global EyeVector As Integer:
Global LookAtVector As Integer:
Global LookUpVector As Integer:
Global DropDown as Integer:
Global dd as Integer:
Global tx#:
Global ty#:
Global tz#:
Global MaxArry as Integer:
Global Score as Integer:
Dim KickFlag(1) as Float:
Dim Kick(5):
Dim cFlag(0) as Integer:
Dim n(0) as Float
Dim PreLimb(0):LimbMatrix=6:EyeVector=3:
LookAtVector=4:LookUpVector=5:
For i = 1 to 6
r=Make Vector3(i):
Next i:
r = Make Matrix4( LimbMatrix )
Make Object Sphere 1,6,8,8
Prepare_Limb(1,0,2)
Delete Object 1
Make Object Sphere 1,6,15,15:
Set Object Collision To Spheres 1:
Make Object Box 2,100,5,120:
Make Object Box 3,20,11,5:
Offset Limb 3,0,8,0,0:
Make Mesh From Object 3,3:
Delete Object 3:
Add Limb 2,1,3
Prepare_Limb(2,1,.001):
Offset Limb 2,1,-20,2.6,-50:
Rotate Limb 2,1,0,30,0:
Color Limb 2,1,Rgb(50,50,100):
Add Limb 2,2,3:
Prepare_Limb(2,2,.001):
Offset Limb 2,2,20,2.6,-50:
Rotate Limb 2,2,0,-210,0:
Color Limb 2,2,Rgb(50,50,100):
Add_Limb(2,7,10,120,-50,3,0,0,0,0):
Add_Limb(2,7,10,120,50,3,0,0,0,0):
Add_Limb(2,100,10,7,0,3,60,0,0,0):
Add_Limb(2,4,6,4,0,3,30,0,42,0):
Add_Limb(2,4,6,4,-9,3,20,0,45,0):
Add_Limb(2,4,6,4,9,3,20,0,48,0):
Add_Limb(2,18,8,4,-30,3,-45,0,20,0):
Add_Limb(2,18,8,4,30,3,-45,0,-200,0):
Add_Limb(2,6,6,6,-47,3,-30,0,45,0):
Add_Limb(2,6,6,6,47,3,-30,0,45,0):
rr=Add_Limb(2,2,8,7,20,3,35,0,0,0)
Add_Limb(2,2,8,7,29,3,34,0,0,0):
Add_Limb(2,2,8,7,38,3,33,0,0,0):
Add_Limb(2,21,8,3,-31,3,-27,0,40,0):
Add_Limb(2,21,8,3,31,3,-27,0,-220,0):
dd=Add_Limb(2,20,8,4,-30,2.4,53,0,0,0):
Add_Limb(2,5,7,5,-36,3,-41,0,20,0):
Add_Limb(2,5,7,5,36,3,-41,0,-200,0):
l=Add_Limb(2,100,.1,120,0,8.5,0,0,0,0):
Hide Limb 2,l:
Color Limb 2,0,RGB(100,100,254):
Set Object Collision Off 2:
Position Camera 0,70,-80:
Point Camera 0,0,0:
Make Object Sphere 3,9:
Scale Object 3,100,40,100:
Make Mesh From Object 3,3:
Delete Object 3:
Pitch Object Up 2,3:
For i = 0 to 2:
Make Object 11+i,3,0
Position Object 11+i,Limb Position X(2,6+i),Limb Position Y(2,6+i)+2.0,Limb Position Z(2,6+i):
Set Object Collision To Spheres 11+i:
Color Object 11+i,Rgb(255,0,0):
Next i:
Make Object Box 14,17,7,1:
Position Object 14,Limb Position X(2,16)+1.2,Limb Position Y(2,16)+.1,Limb Position Z(2,16)+1.2:
Rotate Object 14,0,40,0:
Set Object Collision To Boxes 14:
Color Object 14,rgb(255,0,0):
Clone Object 15,14:
Position Object 15,Limb Position X(2,17)-1.2,Limb Position Y(2,17)+.1,Limb Position Z(2,17)+1.2:
Rotate Object 15,0,-220,0:
Set Object Collision To Boxes 15:
Color Object 15,rgb(255,0,0):
For i = 1 to 3:
Make Object Box 15+i,.5,.5,4:
Position Object 15+i,16+(i*9),Limb Position Y(2,rr+(i-1))+1,36-i:
Color Object 15+i,0:
Set Object Collision To Boxes 15+i:
Next i
For i = 1 to 3:
Make Object Box 18+i,4,6.5,2:
Position Object 18+i,-40+(i*5),Limb Position Y(2,dd),51:
Color Object 18+i,Rgb(255,0,0):
Set Object Collision To Boxes 18+i:
Next i:
Position Object 1,0,-20,40:
Do:
Balls=0:Score=0:
Do:
If ReturnKey() And Object Position Y(1)<-20:
Balls=Balls+1:
Position Object 1,35,6,45:
Set Vector3 2,-(Rnd(20.0)/10.0)-.5,0,0:
Endif:
tx#=Object Position X(1):
ty#=Object Position Y(1):
tz#=Object Position Z(1):
If SpaceKey()
Position Object 2,0,0,.5:
Else:
Position Object 2,0,0,0:
Endif:
LV3#=Length Vector3(2):
If LV3#>2.9:
Scale Vector3 2,2,2.9/LV3#:
Endif
Position Object 1,Object Position X(1)+X Vector3(2),Object Position Y(1)+Y Vector3(2)-.2,Object Position Z(1)+Z Vector3(2):
Kickers():
c=Check_Collision(1,0,2,1,0):
Position Object 1,X Vector3(20), Y Vector3(20), Z Vector3(20):
Set Vector3 2,(Object Position X(1)-tx#),(Object Position Y(1)-ty#),(Object Position Z(1)-tz#):
Flipper(1):
Flipper(2):
Sync_Flag=(Sync_Flag<3)+(Sync_Flag<2)+(SyncFlag<1):
If Sync_Flag=1:
Set Cursor 0,0:
Print "Score: ";Score:
Print "Ball: ";Balls
Print Prelimb(20):
Sync:
Endif:
if Balls=5 And Object Position Y(1)<-19:
Exit
Endif
Loop
Wait 300
Clear Entry Buffer
Do
Set Cursor 0,0:
Print "Score: ";Score:
Print "Ball: ";Balls:
Print:
Print "Game Over. Press Any Key":
If Inkey$()<>""
Exit
Endif
Sync
Loop
Loop
Function Flipper(side):
ks=(side=1)*29+(side=2)*157:
ang#=(side=1)*30+(side=2)*-210:
If KickFlag(side-1)<60 and (KeyState(ks) or KickFlag(side-1)>0):
KickFlag(side-1)=KickFlag(side-1)+7:
Rotate Limb 2,side,0,ang#-KickFlag(side-1)*((side=1)-(side=2)),0:
c=Check_Collision(2,side,1,1,0):
If c
Set Vector3 2,X Vector3(2),Y Vector3(2),.5+(Z Vector3(2)*(Z Vector3(2)>0)):
Position Object 1,Object Position X(1)+X Vector3(2)*.15,Object Position Y(1)+Y Vector3(2)*.15,Object Position Z(1)+Z Vector3(2):
Endif
Endif
If KickFlag(side-1)>59 and KeyState(ks)=0:
KickFlag(side-1)=0:
Rotate Limb 2,side,0,ang#,0:
Endif
Endfunction:
Function Kickers():
k=Object Collision(1,0):
Select k:
Case 11,12,13:
If Kick(k-11)<1:dx#=(Object Position X(1)-Object Position X(k))*.2+X Vector3(2)*.1
dy#=(Object Position Y(1)-Object Position Y(k))*.2+Y Vector3(2)*.15:
dz#=(Object Position Z(1)-Object Position Z(k))*.2+Z Vector3(2)*.1:
Position Object 1,Object Position X(1)-dx#,Object Position Y(1)-dy#,Object Position Z(1)-dz#
tx#=Object Position X(1):
ty#=Object Position Y(1):
tz#=Object Position Z(1):
Position Object 1,Object Position X(1)+dx#,Object Position Y(1)+dy#,Object Position Z(1)+dz#:
Kick(k-11)=7:Score=Score+10:
Set Object Emissive k,Rgb(255,100,100):
Endif:
EndCase:
Case 14
Position Object 1,Object Position X(1)-(1.5+X Vector3(2)*.2),Object Position Y(1),Object Position Z(1)-(1.5+Z Vector3(2)*.2):
tx#=Object Position X(1):
ty#=Object Position Y(1):
tz#=Object Position Z(1):
Position Object 1,Object Position X(1)+(1.5+X Vector3(2)*.2),Object Position Y(1),Object Position Z(1)+(1.5+Z Vector3(2)*.2):
Set Object Emissive 14,Rgb(255,100,100):Kick(3)=7:
Score = Score + 1:
EndCase:
Case 15:
Position Object 1,Object Position X(1)+(1.5+X Vector3(2)*.2),Object Position Y(1),Object Position Z(1)-(1.5+Z Vector3(2)*.2):
tx#=Object Position X(1):
ty#=Object Position Y(1):
tz#=Object Position Z(1):
Position Object 1,Object Position X(1)-(1.5+X Vector3(2)*.2),Object Position Y(1),Object Position Z(1)+(1.5+Z Vector3(2)*.2):
Set Object Emissive 15,Rgb(255,100,100):
Kick(4)=7:
Score = Score + 1:
EndCase:
Case 16,17,18
Score = Score + 2:
EndCase:
Case 19,20,21:
Position Object 1,Object Position X(1),Object Position Y(1),Object Position Z(1)+(1.5+Z Vector3(2)*.2):
tx#=Object Position X(1):
ty#=Object Position Y(1):
tz#=Object Position Z(1):
Position Object 1,Object Position X(1),Object Position Y(1),Object Position Z(1)-(1.5+Z Vector3(2)*.2):
Position Object k,0,-10,0:
DropDown=DropDown+1:
Kick(4)=7:
Score = Score + 10:
EndCase:
EndSelect
For i = 11 to 15:
Kick(i-11)=Kick(i-11)-(Kick(i-11)>0):
If Kick(i-11)=1:
Set Object Emissive i,0:
Endif
` A_Constant 0
next i
EndFunction
Function Add_Limb(ObjectID,sx#,sy#,sz#,px#,py#,pz#,ax#,ay#,az#)
Make Object Box 3, sx#, sy#, sz#
Make Mesh From Object 3,3
Delete Object 3
i = 1
Do
If Limb Exist(ObjectID,i)=0:
Exit
Endif
i = i + 1
Loop
Add Limb ObjectID,i,3:
Offset Limb ObjectID,i,px#,py#,pz#:
Rotate Limb ObjectID,i,ax#,ay#,az#
EndFunction i
function Prepare_Limb(ObjectID,LimbID,C_Factor#)
arry = ObjectID * 20 + LimbID
max = 1
If MaxArry>1
For i = 1 to MaxArry
If max<PreLimb(i)
max=PreLimb(i)
Endif:
Next i
Endif
If MaxArry<arry:
MaxArry=arry:
Dim PreLimb(arry) as Integer:
PreLimb(arry)=1
Dim LMX(arry,max) as Float:
Dim LMY(arry,max) as Float:
Dim LMZ(arry,max) as Float:
Endif:
Lock VertexData for Limb ObjectID,LimbID:
VIC=Get Vertexdata Index Count():
n=0:
LMX(arry,n)=Get VertexData Position X(Get IndexData(0)):
LMY(arry,n)=Get VertexData Position Y(Get IndexData(0)):
LMZ(arry,n)=Get VertexData Position Z(Get IndexData(0)):
c#=C_Factor#*C_Factor#:n=1:
For i = 1 to VIC:
tx#=Get VertexData Position X(Get IndexData(i)):
ty#=Get VertexData Position Y(Get IndexData(i)):
tz#=Get VertexData Position Z(Get IndexData(i)):
flag=0:
For j=1 to n:
d#=((tx#-LMX(array,j))*(tx#-LMX(array,j))+(ty#-LMY(array,j))*(ty#-LMY(array,j))+(tz#-LMZ(array,j))*(tz#-LMZ(array,j))):
if d#<c# or (tx#=LMX(arry,0) and ty#=LMY(arry,0) and tz#=LMZ(arry,0))
flag=1:
Exit:
Endif:
Next j:
If flag=0:n=n+1:
If n>max:max=n:PreLimb(arry)=n:
Dim LMX(arry,n) as Float:
Dim LMY(arry,n) as Float:
Dim LMZ(arry,n) as Float:
Endif:
LMX(arry,n)=tx#:LMY(arry,n)=ty#:LMZ(arry,n)=tz#:
Endif:
Next i:
PreLimb(arry)=n:
Unlock VertexData
Endfunction:
Function LimbMatrix4(ResultMatrix, Object, Limb):
AX#=Limb Direction X( Object, Limb ) :
AY#=Limb Direction Y( Object, Limb ) :
AZ#=Limb Direction Z( Object, Limb ):
CX#=Cos(AX#) :
SX#=Sin(AX#) :
CY#=Cos(AY#) :
SY#=Sin(AY#) :
CZ#=Cos(AZ#) :
SZ#=Sin(AZ#):
Set Vector3 EyeVector, Limb Position X( Object, Limb), Limb Position Y( Object, Limb), Limb Position Z( Object, Limb):
Set Vector3 LookAtVector, -1.0*SZ#*(-1.0*SX#)+CZ#*SY#*CX#+Limb Position X(Object,Limb), CZ#*(-1.0*SX#)+SZ#*SY#*CX#+Limb Position Y(Object,Limb), CY#*CX#+Limb Position Z(Object,Limb):
Set Vector3 LookUpVector, -SZ#*CX#+CZ#*SY#*SX#, CZ#*CX#+SZ#*SY#*SX#, CY#*SX#:
Build LookAt LHMatrix4 ResultMatrix, EyeVector, LookAtVector, LookUpVector:
r=Inverse Matrix4( ResultMatrix, ResultMatrix ):
`#Constant A_Constant 0
DropDown = DropDown+(DropDown>2):
If DropDown>10
Score = Score + 100:
DropDown=0
For i = 1 to 3
Position Object 18+i, -40+(i*5), Limb Position Y(2,dd), 51
Next i
Endif
EndFunction
Function Check_Collision(ObjectID as DWord,LimbID as DWord,TargetID as DWord,accuracy#,cycles):
arry=ObjectID*20+LimbID:
r=Make Vector3(arry):
if Array Count(cflag(0))<arry:
Dim cFlag(arry) as Intger:
Dim n(arry) as Float:
Endif:
LimbMatrix4(LimbMatrix, ObjectID, LimbID):
st=1.0/accuracy#:
MC=PreLimb(arry):
If cFlag(arry)=0:n(arry)=1:
Set Vector3 arry,Limb Position X(ObjectID,LimbID),Limb Position Y(ObjectID,LimbID),Limb Position Z(ObjectID,LimbID):
Else:
if n(arry)>1:n(arry)=2:
Set Vector3 arry,X Vector3(arry)+Limb Position X(ObjectID,LimbID),Y Vector3(arry)+Limb Position Y(ObjectID,LimbID),Z Vector3(arry)+Limb Position Z(ObjectID,LimbID):
Endif:
Endif
For i = 0+cFlag(arry) to MC step st:
Set Vector3 1,LMX(arry,i),LMY(arry,i),LMZ(arry,i):
Transform Coords Vector3 1, 1, LimbMatrix:
d#=Intersect Object(TargetID,Limb Position X(ObjectID,LimbID),Limb Position Y(ObjectID,LimbID),Limb Position Z(ObjectID,LimbID),X Vector3(1),Y Vector3(1),Z Vector3(1)):
if d#>0:
Set Vector3 1,X Vector3(1)-Limb Position X(ObjectID,LimbID),Y Vector3(1)-Limb Position Y(ObjectID,LimbID),Z Vector3(1)-Limb Position Z(ObjectID,LimbID):
d2#=Length Vector3(1):
id2#=d2#-d#:
Multiply Vector3 1,-(id2#/d2#):
Set Vector3 arry,X Vector3(arry)+(Limb Position X(ObjectID,LimbID)+X Vector3(1))*id2#,Y Vector3(arry)+(Limb Position Y(ObjectID,LimbID)+Y Vector3(1))*id2#,Z Vector3(arry)+(Limb Position Z(ObjectID,LimbID)+Z Vector3(1))*id2#:
n(arry)=n(arry)+id2#:
Endif:
Next i:
cFlag(arry)=cFlag(arry)+1:
if cFlag(arry)>cycles:
cFlag(arry)=0:
Endif:
Set Vector3 arry,X Vector3(arry)/n(arry),Y Vector3(arry)/n(arry),Z Vector3(arry)/n(arry):
Hit=(n(arry)>1)
EndFunction Hit
`Thanks to Dmitry K for the LimbMartix4() function!
edit forgot to take out 'next i' goes now.
I'm not getting you down am I, Ho Look! another fancy Door?