Here's a small update - and might well be my last one as I have to go out tonight.
It's not actually racing as you have no control of any of the vehicles yet. It simply follows one of the cars around in Test Mode. But it gives you a flavour of what I was aimng for. It never ends, so just press F12 to exit.
I will probably continue with it after the challenge deadline ends and finish it off.
Gosub Setup
rem Gosub Splash_Screen
Gosub Main_Menu
Rem Main Program Loop
Do
Rem Gosub Generate Random Track
If Test = True
Gosub Test_Lap
Gosub Main_Menu
Else
Rem Gosub Generate_Track
Rem Gosub Race
Rem Gosub HighScores
Rem Gosub Main_Menu
Endif
Sync
Loop
end
Rem ******************************************************************************************
Rem *** PROCEDURES ***
Rem ******************************************************************************************
Test_Lap:
Set Camera View 0,0,800,600
GH# = Get Ground Height(1,512,218)+1.0
Position Camera 512,GH#,218
Yrotate Camera 90
Set Camera Range 1.0,2048.0
Position Object 7002,512,GH#,218
Show Object 7000
Show Object 7001
Show Object 7002
End
rem FadeType = 1: Gosub Fader
Repeat
CX#=Camera Angle X(): CY#=Camera Angle Y(): CZ#=Camera Angle Z()
CY#=Wrapvalue(CY#+mousemovex())
CX#=Wrapvalue(CX#+mousemovey())
Rotate Camera CX#,CY#,CZ#
If MouseClick() = 1 Then Move Camera 1.5
If MouseClick() = 2 Then Move Camera -1.5
GH# = Get Ground Height(1,Camera Position X(),Camera Position Z())+1.0
Rem Position Camera Camera Position X(),GH#,Camera Position Z()
YRotate Object 2,WrapValue(Object Angle Y(2)+0.02)
Position Object 1,Camera Position X(),Camera Position Y(),Camera Position Z()
Position Object 2,Camera Position X(),Camera Position Y(),Camera Position Z()
Sync
Until EndRace=True
FadeType = 0: Gosub Fader
Return
Select_Car:
Set Text Size 16
CLS 0: Sync
Set Camera View 0,0,800,600
Show Sprite 1: Show Sprite 2: Show Sprite 3: Show Sprite 4
If Object Exist(20000+N) = 0 Then Gosub Showroom_Vehicles
Position Camera 0,3,-29
Point Camera VSpotX#(0),0.0,VSpotZ#(0)
FadeType = 1: Gosub Fader
ChoseCar = False
Repeat
Mx=MouseX(): My=MouseY(): Mc=MouseClick()
For N = 0 To 7
YRotate Object 20000+N,WrapValue(Object Angle Y(20000)+.4): Rem Platform
YRotate Object N * 100 + 5000,WrapValue(Object Angle Y(CurrentVehicle * 100 + 5000)+.4)
YRotate Object N * 100 + 5050,WrapValue(Object Angle Y(CurrentVehicle * 100 + 5050)+.4)
Next N
If LeftKey()=1 Or (My>549 And Mx>0 And Mx<51 And Mc=1): Rem Previous Car
RotRight = False
Gosub Rotate_Stock
Dec CurrentVehicle
If CurrentVehicle < 0 Then CurrentVehicle = MaxVehicle
Repeat
Until LeftKey()=0 And MouseClick()=0
Endif
If RightKey()=1 Or (My>549 And Mx>749 And Mx<800 And Mc=1): Rem Next Car
RotRight = True
Gosub Rotate_Stock
Inc CurrentVehicle
If CurrentVehicle > MaxVehicle Then CurrentVehicle = 0
Repeat
Until RightKey()=0 And MouseClick()=0
Endif
If ReturnKey()=1 Or (My>549 And Mx>285 And Mx<515 And Mc=1): Rem I Want This One!
ChoseCar = True
Repeat
Until ReturnKey()=0 And MouseClick()=0
Endif
Sync
Gosub Screen_Messages
Until ChoseCar = True
Hide Sprite 1: Hide Sprite 2: Hide Sprite 3: Hide Sprite 4
Set Camera View 0,0,1,1
CLS: Sync
Return
Hide_All_Cars:
For N = 5050 To 5999
If Object Exist(N) Then Hide Object N
Next N
Return
Splash_Screen:
rem Gosub Hide_All_Cars
Set Text Size 42: Sync
Set Gamma 0,0,0: Wait_Time(3)
Ink RGB(255,150,0),0: Center Text 400,200,"<< ICTOAT RACING >>"
Ink RGB(255,255,0),0: Center Text 398,198,"<< ICTOAT RACING >>"
Rem 1=Fade In 0=Fade Out
FadeType = 1: Gosub Fader: Wait_Time(3)
FadeType = 0: Gosub Fader: CLS
Set Text Size 32: Sync
Ink RGB(0,0,255),0: Center Text 402,202,"DBC Programming Challenge Entry"
Ink RGB(255,255,255),0: Center Text 400,200,"DBC Programming Challenge Entry"
Ink RGB(0,0,255),0: Center Text 402,252,"July/August 2009"
Ink RGB(255,255,255),0: Center Text 400,250,"July/August 2009"
FadeType = 1: Gosub Fader: Wait_Time(2)
FadeType = 0: Gosub Fader: CLS
Ink RGB(255,0,255),0: Center Text 402,202,"Written By TDK_Man"
Ink RGB(255,255,255),0: Center Text 400,200,"Written By TDK_Man"
FadeType = 1: Gosub Fader: Wait_Time(2)
FadeType = 0: Gosub Fader
CLS 0: Sync: Sync
Return
Fader:
Select FadeType
Case 0
Rem Fade Out
Done=0: T=Timer()
EndTime#=T+(2000)
Step#=EndTime#-T
Repeat
CurT#=Timer()-T
Ratio#=CurT#/Step#
RGBVal=255-(255*Ratio#)
If RGBVal<0 then RGBVal=0 : Done=1
Set Gamma RGBVal,RGBVal,RGBVal
Sync
Until Done=1
EndCase
Case 1
Rem Fade In
Done=0: T=Timer()
EndTime#=T+(2000)
Step#=EndTime#-T
Repeat
CurT#=Timer()-T
Ratio#=CurT#/Step#
RGBVal=(255*Ratio#)
If RGBVal>255 then RGBVal=255 : Done=1
Set Gamma RGBVal,RGBVal,RGBVal
Sync
Until Done=1
EndCase
EndSelect
Return
Main_Menu:
Rem Main Menu
Show Mouse
Set Text Size 36: Sync
MM$(0) = "Select Car"
MM$(1) = "Game Options"
MM$(2) = "Test Lap"
MM$(3) = "Start Race"
MM$(4) = "Exit Game"
Rem MM$(5) = "HiScores"
Ink RGB(255,100,0),0: Center Text 402,12,"Main Menu"
Ink RGB(255,255,0),0: Center Text 400,10,"Main Menu"
For N = 0 To 4
Ink RGB(0,0,255),0: Center Text 402,N*70+132,MM$(N)
If N = Selection
Ink RGB(255,255,255),0
Else
Ink RGB(0,255,255),0
Endif
Center Text 400,N*70+130,MM$(N)
Next N
FadeType = 1: Gosub Fader: Rem Fade In
Done = False: OldSelection = -1: Selection = 0
Repeat
Mx=MouseX(): My=MouseY()
Selection = (My-130) / 70
If Selection <> OldSelection
For N = 0 To 4
Ink RGB(0,0,255),0: Center Text 402,N*70+132,MM$(N)
If N = Selection
Ink RGB(255,255,255),0
Else
Ink RGB(0,255,255),0
Endif
Center Text 400,N*70+130,MM$(N)
Next N
Sync
Endif
If ReturnKey()=1 Or MouseClick()=1
Select Selection
Case 0
FadeType = 0: Gosub Fader: CLS
Gosub Select_Car
Set Text Size 36: Sync
Ink RGB(255,100,0),0: Center Text 402,12,"Main Menu"
Ink RGB(255,255,0),0: Center Text 400,10,"Main Menu"
Done = False: OldSelection = -1: Selection = 0
EndCase
Case 1
Gosub Options
EndCase
Case 2
Test = True: Done = True: Rem Exit Main Menu For test Lap...
EndCase
Case 3
Test = False: Done = True: Rem Exit Main Menu To Race...
EndCase
Case 4
End
EndCase
EndSelect
Endif
Repeat
Sync
Until MouseClick()=0
Until Done = True
rem FadeType = 0: Gosub Fader: Rem Fade In
Hide Mouse
Return
Options:
Rem Options Screen
Return
Select_Car2:
Rem Select Car
ChoseCar = False
Repeat
For N = 0 To 7
YRotate Object 20000+N,WrapValue(Object Angle Y(20000)+.4): Rem Platform
YRotate Object N * 100 + 5000,WrapValue(Object Angle Y(CurrentVehicle * 100 + 5000)+.4)
YRotate Object N * 100 + 5050,WrapValue(Object Angle Y(CurrentVehicle * 100 + 5050)+.4)
Next N
If LeftKey()=1: Rem Previous Car
RotRight = False
Gosub Rotate_Stock
Dec CurrentVehicle
If CurrentVehicle < 0 Then CurrentVehicle = MaxVehicle
Repeat
Until LeftKey()=0
Endif
If RightKey()=1: Rem Next Car
RotRight = True
Gosub Rotate_Stock
Inc CurrentVehicle
If CurrentVehicle > MaxVehicle Then CurrentVehicle = 0
Repeat
Until RightKey()=0
Endif
If ReturnKey()=1: Rem I Want This One!
ChoseCar = True
Repeat
Until ReturnKey()=0
Endif
Sync
Gosub Screen_Messages
Until ChoseCar = True
End
Return
Rotate_Stock:
Rem Rotate Stock 45 degrees clockwise at 15x3 degrees
If RotRight = False
RA# = 3.0
Else
RA# = -3.0
Endif
For I = 0 To 14
For N = 0 To 7
X#(N) = WrapValue(X#(N) + RA#): Z#(N) = WrapValue(Z#(N) + RA#)
VSpotX#(N) = newxvalue(0,X#(N),Radius#): VSpotZ#(N) = newzvalue(0,Z#(N),Radius#)
Position Object 20000+N, VSpotX#(N), 0.0, VSpotZ#(N): Rem Base
Position Object 20100+N, VSpotX#(N), 0.0, VSpotZ#(N): Rem Mask
Position Object N*100+5000, VSpotX#(N), 0.65, VSpotZ#(N): Rem Top Vehicle
Position Object N*100+5050, VSpotX#(N), -0.5, VSpotZ#(N): Rem Bottom Vehicle
Next N
Sync
Gosub Screen_Messages
Next I
Return
Setup:
Set Display Mode 800,600,32
Sync On: Sync Rate 0: Sync
Randomize 283479834
Autocam Off
Set Ambient Light 50
Dim VSpotX#(9): Dim VSpotZ#(9): Dim X#(9): Dim Z#(9): Dim MM$(5)
Dim Waypoints#(7,180,1)
Dim CurrentWayPoint(7)
Dim Speed#(7)
Dim TopSpeed#(7)
Dim Accell#(7)
Dim Vehicle$(9,9): Rem 0=Name 1=Accel 2=Top Speed 3=Weapon 4=Damage 5=Shield 6=Nitro 7-Fuel 8-Special
Vehicle$(0,0) = "Hillman Imp Sportster": Rem Name
Vehicle$(0,1) = "6": Rem Accel
Vehicle$(0,2) = "120": Rem Top Speed
Vehicle$(0,3) = "Machine Gun": Rem Weapon
Vehicle$(0,4) = "1": Rem Damage
Vehicle$(0,5) = "16": Rem Shield
Vehicle$(0,6) = "4": Rem Nitro
Vehicle$(0,7) = "200": Rem Fuel
Vehicle$(0,8) = "Smoke Pod": Rem Special
Vehicle$(1,0) = "Mr Whippy Ice Cream Van": Rem Name
Vehicle$(1,1) = "4": Rem Accel
Vehicle$(1,2) = "100": Rem Top Speed
Vehicle$(1,3) = "Freeze Gun": Rem Weapon
Vehicle$(1,4) = "3": Rem Damage
Vehicle$(1,5) = "20": Rem Shield
Vehicle$(1,6) = "6": Rem Nitro
Vehicle$(1,7) = "250": Rem Fuel
Vehicle$(1,8) = "Slush Puppy Spray": Rem Special
Vehicle$(2,0) = "London Bus": Rem Name
Vehicle$(2,1) = "3": Rem Accel
Vehicle$(2,2) = "85": Rem Top Speed
Vehicle$(2,3) = "Spud Gun": Rem Weapon
Vehicle$(2,4) = "2": Rem Damage
Vehicle$(2,5) = "180": Rem Shield
Vehicle$(2,6) = "5": Rem Nitro
Vehicle$(2,7) = "350": Rem Fuel
Vehicle$(2,8) = "None": Rem Special
Vehicle$(3,0) = "Ford Pickup": Rem Name
Vehicle$(3,1) = "4": Rem Accel
Vehicle$(3,2) = "110": Rem Top Speed
Vehicle$(3,3) = "Ray Gun": Rem Weapon
Vehicle$(3,4) = "7": Rem Damage
Vehicle$(3,5) = "25": Rem Shield
Vehicle$(3,6) = "8": Rem Nitro
Vehicle$(3,7) = "150": Rem Fuel
Vehicle$(3,8) = "Cargo Bomb": Rem Special
Vehicle$(4,0) = "Oil Tanker": Rem Name
Vehicle$(4,1) = "2": Rem Accel
Vehicle$(4,2) = "90": Rem Top Speed
Vehicle$(4,3) = "Homing Missile": Rem Weapon
Vehicle$(4,4) = "6": Rem Damage
Vehicle$(4,5) = "120": Rem Shield
Vehicle$(4,6) = "9": Rem Nitro
Vehicle$(4,7) = "350": Rem Fuel
Vehicle$(4,8) = "Oil Slick": Rem Special
Vehicle$(5,0) = "US Police Car": Rem Name
Vehicle$(5,1) = "5": Rem Accel
Vehicle$(5,2) = "130": Rem Top Speed
Vehicle$(5,3) = "Magnum 45": Rem Weapon
Vehicle$(5,4) = "3": Rem Damage
Vehicle$(5,5) = "40": Rem Shield
Vehicle$(5,6) = "3": Rem Nitro
Vehicle$(5,7) = "180": Rem Fuel
Vehicle$(5,8) = "Tazer Gun": Rem Special
Vehicle$(6,0) = "UK Ambulance": Rem Name
Vehicle$(6,1) = "4": Rem Accel
Vehicle$(6,2) = "125": Rem Top Speed
Vehicle$(6,3) = "Sleep Gun": Rem Weapon
Vehicle$(6,4) = "8": Rem Damage
Vehicle$(6,5) = "35": Rem Shield
Vehicle$(6,6) = "4": Rem Nitro
Vehicle$(6,7) = "250": Rem Fuel
Vehicle$(6,8) = "Shrink Lights": Rem Special
Vehicle$(7,0) = "TDK Convertible": Rem Name
Vehicle$(7,1) = "6": Rem Accel
Vehicle$(7,2) = "140": Rem Top Speed
Vehicle$(7,3) = "Rocket Launcher": Rem Weapon
Vehicle$(7,4) = "12": Rem Damage
Vehicle$(7,5) = "30": Rem Shield
Vehicle$(7,6) = "2": Rem Nitro
Vehicle$(7,7) = "100": Rem Fuel
Vehicle$(7,8) = "Stealth Mode": Rem Special
True = 1: False = 0: MaxVehicle = 7
For N=0 To MaxVehicle
Speed#(N) = 0.0
Accell#(N) = VAL(Vehicle$(N,1))/400.0
TopSpeed#(N) = VAL(Vehicle$(N,2))/100.0
Next N
Gosub Make_Textures
Gosub Make_Objects
Gosub Make_Sprites
Rem Rotation Variables
Radius#=22.0: AngleInc=45: Angle# = 135.0
For N = 0 To MaxVehicle
X#(N) = Angle#: Z#(N) = Angle#: Rem Start Angles
Angle# = WrapValue(Angle# + 45.0)
Next N
Backdrop On: Color Backdrop 0
Set Camera Range 1.0,2048.0
Hide Mouse
Position Camera 452,Get Ground Height(1,452,173)+8,173
Rotate Camera 15,50,0
GH# = Get Ground Height(1,512,207)
Position Object 7000,512,GH#-50,512: Rem Sky
Position Object 7001,512,GH#-50,512: Rem Clouds
Scale Object 7002,1000,1000,1000: YRotate Object 7002,90: Rem Starter
Position Object 7002,512,GH#+12,207
Show Object 7000: Show Object 7001: Show Object 7002
Rem ********************
Rem Position Cars
Rem ********************
For N = 0 To MaxVehicle
CurrentWayPoint(N)=132
Gh# = Get Ground Height(1,Waypoints#(N,CurrentWayPoint(N),0),Waypoints#(N,CurrentWayPoint(N),1))+0.6
Position Object N*100+5000,Waypoints#(N,CurrentWayPoint(N),0),Gh#,Waypoints#(N,CurrentWayPoint(N),1)
Point Object N*100+5000,Waypoints#(N,CurrentWayPoint(N)+1,0),Gh#,Waypoints#(N,CurrentWayPoint(N)+1,1)
Hide Object N*100+5050: Rem Hide mirror vehicles
Next N
Remstart
Rem Un-rem this block to see a visual representation of the waypoints. I've used a waypoint 'lane' system
Rem where there are 8 lanes - one for each vehicle. This isn't ideal, but with so little time to do this
Rem challenge, a few corners had to be cut... :)
For Car=0 to MaxVehicle
R = Rnd(100)+155: G = Rnd(100)+155: B = Rnd(100)+155
For A=0 to 179
O = Car*180+A+1
Make Object Cube O,0.2: Color Object O,RGB(R,G,B): Scale Object O,100,400,100: Ghost Object On O
Gh# = Get Ground Height(1,Waypoints#(Car,A,0),Waypoints#(Car,A,1))
Position Object O,Waypoints#(Car,A,0),Gh#,Waypoints#(Car,A,1)
next A
next Car
Remend
Set Current Bitmap 0
Set Text Size 14
Set Text Transparent
Ink 0,0
CurrentTrackCar = 0: CTCObjNum = CurrentTrackCar*100+5000
TESTRACELOOP:
Do
If Scancode() Then RaceStarted=1
If UpKey()=1 Then Inc Shading#,.1: Normalise(1,MatWid,MatHig,Shading#)
If DownKey()=1 Then Dec Shading#,.1: Normalise(1,MatWid,MatHig,Shading#)
IF RaceStarted=1
For N=MaxVehicle To 0 Step-1
CarObjNum = N*100+5000
Move Object CarObjNum,Speed#(N)
CX# = Object Position X(CarObjNum): Rem Car's X Position
CZ# = Object Position Z(CarObjNum): Rem Car's Z Position
Gh# = Get Ground Height(1,CX#,CZ#)+0.3
Rem If Object Position Y(CarObjNum) > Gh#
Rem Position Object CarObjNum,Object Position X(CarObjNum),Gh#,Object Position Z(CarObjNum)
Rem Endif
If Speed#(N) < TopSpeed#(N) Then Speed#(N)=Speed#(N)+Accell#(N)
Dist# = CarDistance(N)
If Dist# < 2.0
CurrentWayPoint(N)=CurrentWayPoint(N)+1: If CurrentWayPoint(N)=180 Then CurrentWayPoint(N) = 0
Point Object CarObjNum,Waypoints#(N,CurrentWayPoint(N),0),Gh#,Waypoints#(N,CurrentWayPoint(N),1)
Endif
Rem 3.5, .75, 2.0
Tilt_Object(CarObjNum,1,CX#,Gh#,CZ#,2.0,.75,3.5)
If N=CurrentTrackCar
Set Camera To Follow CX#, Gh#, CZ#, Object Angle Y(CarObjNum), 4.0, Gh#+4.0, 14, 0
Endif
Next N
Endif
Remstart
Rem Routine to print current camera position and angles to text file when you press the space bar
Rem (makes working out the camera start position a lot easier).
Rem Leave remmed out...
If SpaceKey() = 1
If File Exist("CamPos.txt") Then Delete File "CamPos.txt"
Open To Write 1,"CamPos.txt"
Write String 1,Str$(Camera Position X())
Write String 1,Str$(Camera Position Y())
Write String 1,Str$(Camera Position Z())
Write String 1,Str$(Camera Angle X())
Write String 1,Str$(Camera Angle Y())
Write String 1,Str$(Camera Angle Z())
Close File 1
Endif
Remend
YRotate Object 7001,WrapValue(Object Angle Y(7001)+.1): Rem Move Clouds
Sync
Text 10,2,"FPS: "+Str$(Screen FPS())
Text 100,2,"Position:"
Text 100,22,"X: "+Str$(CX#)
Text 100,42,"Y: "+Str$(Gh#)
Text 100,62,"Z: "+Str$(CZ#)
Text 240,2,Str$(Shading#)
Remstart
Text 240,2,"Mat Heights:"
rem w#=2.0: l#=3.5
FLx# = Object Position X(CurrentTrackCar*100+5000)-1.0
FLz# = Object Position Z(CurrentTrackCar*100+5000)-1.75
FL# = Get Ground Height(1,FLx#,FLz#)
Text 240,22,"Front L: "+Str$(FL#)
FRx# = Object Position X(CurrentTrackCar*100+5000)+1.0
FRz# = Object Position Z(CurrentTrackCar*100+5000)-1.75
FR# = Get Ground Height(1,FRx#,FRz#)
Text 240,42,"Front R: "+Str$(FR#)
RLx# = Object Position X(CurrentTrackCar*100+5000)-1.0
RLz# = Object Position Z(CurrentTrackCar*100+5000)+1.75
RL# = Get Ground Height(1,RLx#,RLz#)
Text 240,62,"Rear L: "+Str$(RL#)
RRx# = Object Position X(CurrentTrackCar*100+5000)+1.0
RRz# = Object Position Z(CurrentTrackCar*100+5000)+1.75
RR# = Get Ground Height(1,RRx#,RRz#)
Text 240,82,"Rear R: "+Str$(RR#)
remend
Loop
Return
Showroom_Vehicles:
Rem Vehicles & Plinths
For N = 0 To MaxVehicle
Make Object Cylinder 20000+N,8: Scale Object 20000+N,100,2,100: Color Object 20000+N,RGB(170,120,170)
Ghost Object On 20000+N
Set object ambient 20000+N,RGB(64,64,64): set object diffuse 20000+N,RGB(64,64,64)
Set object emissive 20000+N,RGB(0,0,0): set object specular 20000+N,RGB(190,190,190),10.0
Make Object Plain 20100+N,21.5,21.5: Texture Object 20100+N,12100
XRotate Object 20100+N,90: Set Object 20100+N, 1, 0, 0
X#(N) = WrapValue(X#(N) + AngleInc) : Z#(N) = WrapValue(Z#(N) + AngleInc)
VSpotX#(N) = newxvalue(0,X#(N),Radius#): VSpotZ#(N) = newzvalue(0,Z#(N),Radius#)
Position Object 20000+N, VSpotX#(N), 0.0, VSpotZ#(N): Rem Base
Position Object 20100+N, VSpotX#(N), 0.0, VSpotZ#(N): Rem Mask
Position Object N*100+5000, VSpotX#(N), 0.65, VSpotZ#(N): Rem Top Vehicle
Position Object N*100+5050, VSpotX#(N), -0.5, VSpotZ#(N): Rem Bottom Vehicle
Next N
Make Object Plain 20108,23,23: Color Object 20108,0: XRotate Object 20108,90: Position Object 20108, 0.0, 0.01, 0.0: Rem Centre Mask
Return
Screen_Messages:
Rem Vehicle Stats
Ink RGB(255,255,255),0: TPosY = 400
Ink RGB(0,100,0),0: Center Text 400,TPosY,"Vehicle: "+Vehicle$(CurrentVehicle,0)
Ink RGB(0,255,0),0: Center Text 398,TPosY-2,"Vehicle: "+Vehicle$(CurrentVehicle,0)
T$ = "Accelleration: "+Vehicle$(CurrentVehicle,1) + " Top Speed: "+Vehicle$(CurrentVehicle,2)
Ink RGB(0,0,0),0: Center Text 400,TPosY+(1*TH),T$
Ink RGB(255,255,0),0: Center Text 398,TPosY+(1*TH)-2,T$
T$ = "Weapon: "+Vehicle$(CurrentVehicle,3) + " Weapon Damage: "+Vehicle$(CurrentVehicle,4)
Ink RGB(0,0,0),0: Center Text 400,TPosY+(2*TH),T$
Ink RGB(255,255,0),0: Center Text 398,TPosY+(2*TH)-2,T$
T$ = "Fuel: "+Vehicle$(CurrentVehicle,7) + " Nitro Bursts: "+Vehicle$(CurrentVehicle,6)
Ink RGB(0,0,0),0: Center Text 400,TPosY+(3*TH),T$
Ink RGB(255,255,0),0: Center Text 398,TPosY+(3*TH)-2,T$
T$ = "Shield: "+Vehicle$(CurrentVehicle,5) + " Special Ability: "+Vehicle$(CurrentVehicle,8)
Ink RGB(0,0,0),0: Center Text 400,TPosY+(4*TH),T$
Ink RGB(255,255,0),0: Center Text 398,TPosY+(4*TH)-2,T$
Return
Make_Textures:
Create Bitmap 1,1024,1024
Rem ****************************
Rem Create Sky Textures
Rem ****************************
Rem ******** Winter Blue Sky ********
Red# = 64.0: Green# = 64.0: Blue# = 128.0
EndRed = 129: EndGreen = 128: EndBlue = 128
MakeGradient(1001,255,Red#,Green#,Blue#,EndRed,EndGreen,EndBlue)
Rem ******** Sunset Sky ********
Red# = 0.0: Green# = 0.0: Blue# = 255.0
EndRed = 200: EndGreen = 100: EndBlue = 0
MakeGradient(1002,255,Red#,Green#,Blue#,EndRed,EndGreen,EndBlue)
Rem ******** Sunset Sky 2 ********
Red# = 32.0: Green# = 32.0: Blue# = 128.0
EndRed = 255: EndGreen = 166: EndBlue = 85
MakeGradient(1003,255,Red#,Green#,Blue#,EndRed,EndGreen,EndBlue)
Rem ******** Night Sky ********
Red# = 0.0: Green# = 0.0: Blue# = 0.0
EndRed = 0: EndGreen = 0: EndBlue = 64
MakeGradient(1004,255,Red#,Green#,Blue#,EndRed,EndGreen,EndBlue)
Rem ******** Summer Blue Sky ********
Red# = 0.0: Green# = 0.0: Blue# = 100.0
EndRed = 200: EndGreen = 200: EndBlue = 255
MakeGradient(1005,255,Red#,Green#,Blue#,EndRed,EndGreen,EndBlue)
Rem ****************************
Rem Create Cloud Texture
Rem ****************************
MakeClouds(1006,255)
Rem ********************
Rem Large Track
Rem ********************
CLS 0
CircleRad=24
For N=1 To CircleRad Step 2
If N <= 20 Then Ink RGB(80,80,80),0
If N > 20 Then Ink RGB(255,255,255),0
If N > 22 Then Ink RGB(180,0,0),0
Circle CircleRad,CircleRad,N
Circle CircleRad,CircleRad+1,N
Next N
Sync
Get Image 1007,0,0,CircleRad*2+2,CircleRad*2+2
Sprite 1,-200,-200,1007
Rem ********************
Rem Small Track
Rem ********************
CLS 0: Ink RGB(80,80,80),0
CircleRad=18
For N=1 To CircleRad
Circle CircleRad,CircleRad,N
If N < 16 Then Circle CircleRad,CircleRad+1,N
Next N
Sync
Get Image 1008,0,0,CircleRad*2+2,CircleRad*2+2
Sprite 2,-200,-200,1008
Rem ****************************
Rem Matrix Texture
Rem ****************************
CLS RGB(0,48,0)
For N=1 To 15000
Ink RGB(0,Rnd(100)+100,0),0
Dot Rnd(1024),Rnd(1024)
Next N
Blur Bitmap 1,4
Sync
xcenter=512: ycenter=512: radiusx=450: radiusy=300
for a=0 to 180
x=cos(a*2)*radiusx
y=sin(a*2)*radiusy
Paste Sprite 1,x+xcenter-19,y+ycenter-19
next a
for a=0 to 180
x=cos(a*2)*radiusx
y=sin(a*2)*radiusy
Paste Sprite 2,x+xcenter-13,y+ycenter-13
next a
Get Image 1000,0,0,1024,1024
Rem ********************
Rem WayPoints
Rem ********************
xcenter=515: ycenter=508: radiusx=436: radiusy=292
for Car=0 to 7
for a=0 to 179
x=cos(a*2)*radiusx: y=sin(a*2)*radiusy
Waypoints#(Car,a,0) = x+xcenter
Waypoints#(Car,a,1) = y+ycenter
next a
Inc radiusx,3: Inc radiusy,3
next car
Rem ********************
Rem Girder
Rem ********************
CLS 0: Ink RGB(4,4,4),0
For N = 0 To 5
Line 0,N,64-N,64
Line N,0,64,64-N
Line 0,64-N,64-N,0
Line N,64,64,N
Line 0,N,64,N
Line N,0,N,64
Line 64-N,0,64-N,64
Line 0,64-N,64,64-N
Next N
Get Image 1009,0,0,64,64
Rem Make 255x255 Masking Plate Texture For Discs
CLS RGB(1,1,1): Ink RGB(0,0,0),0
For N = 0 To 46
Circle 127,127,N: Circle 128,126,N
Circle 127,128,N: Circle 128,127,N
Next N
Sync
Get Image 12100,0,0,255,255,1
Return
Make_Sprites:
CLS 0
Set Text Font "Comic Sans MS"
Set Text Size 36: Sync
TH = Text Height("X")
Ink RGB(255,60,0),0: Center Text 400,2,"Choose Your Vehicle"
Ink RGB(255,255,255),0: Center Text 398,0,"Choose Your Vehicle"
Get Image 12200,0,0,799,TH
Sprite 1,0,0,12200: Hide Sprite 1
CLS 0: Set Text Size 16
Sync
TH = Text Height("X")-4
CLS 0
Set Text Font "Wingdings",1
Set Text Size 32: Sync
Ink RGB(0,255,0),0: Box 0,0,50,50
Ink 0,0: Box 2,2,48,48
Ink RGB(255,255,0),0: Text 10,10,Chr$(231)
Get Image 12201,0,0,51,51
Ink 0,0: Box 2,2,48,48
Ink RGB(255,255,0),0: Text 10,10,Chr$(232)
Get Image 12202,0,0,51,51
Sprite 2,1,549,12201: Hide Sprite 2
Sprite 3,749,549,12202: Hide Sprite 3
Set Text Font "Comic Sans MS": Sync
Ink RGB(0,255,0),0: Box 100,100,330,150
Ink 0,0: Box 102,102,328,148
Ink RGB(255,255,0),0: Text 134,94,"SELECT"
Get Image 12203,100,100,331,151
Sprite 4,285,549,12203: Hide Sprite 4
Set Text Size 36: Sync
Return
Make_Vehicles:
Rem Car Types: 0 - Car 1 - IC Van 2 - Bus 3 - Pickup 4 - Oil Tanker 5 - Police Car 6 - Ambulance
Rem 7 - Convertible
Vehicle(5000,0,200,200,0): YRotate Object 5000,90: Fix Object Pivot 5000
Vehicle(5050,0,200,200,0): XRotate Object 5050,180: Fix Object Pivot 5050: YRotate Object 5050,90: Fix Object Pivot 5050
Vehicle(5100,150,200,150,1): YRotate Object 5100,90: Fix Object Pivot 5100
Vehicle(5150,150,200,150,1): XRotate Object 5150,180: Fix Object Pivot 5150: YRotate Object 5150,90: Fix Object Pivot 5150
Vehicle(5200,255,0,0,2): YRotate Object 5200,90: Fix Object Pivot 5200
Vehicle(5250,255,0,0,2): XRotate Object 5250,180: Fix Object Pivot 5250: YRotate Object 5250,90: Fix Object Pivot 5250
Vehicle(5300,155,80,0,3): YRotate Object 5300,90: Fix Object Pivot 5300
Vehicle(5350,155,80,0,3): XRotate Object 5350,180: Fix Object Pivot 5350: YRotate Object 5350,90: Fix Object Pivot 5350
Vehicle(5400,10,150,10,4): YRotate Object 5400,90: Fix Object Pivot 5400
Vehicle(5450,10,150,10,4): XRotate Object 5450,180: Fix Object Pivot 5450: YRotate Object 5450,90: Fix Object Pivot 5450
Vehicle(5500,32,32,32,5): YRotate Object 5500,90: Fix Object Pivot 5500
Vehicle(5550,32,32,32,5): XRotate Object 5550,180: Fix Object Pivot 5550: YRotate Object 5550,90: Fix Object Pivot 5550
Vehicle(5600,255,255,255,6): YRotate Object 5600,90: Fix Object Pivot 5600
Vehicle(5650,255,255,255,6): XRotate Object 5650,180: Fix Object Pivot 5650: YRotate Object 5650,90: Fix Object Pivot 5650
Vehicle(5700,255,155,0,7): YRotate Object 5700,90: Fix Object Pivot 5700
Vehicle(5750,255,155,0,7): XRotate Object 5750,180: Fix Object Pivot 5750: YRotate Object 5750,90: Fix Object Pivot 5750
Return
Make_Objects:
Rem Sky Sphere
Make Object Sphere 7000,-2048
Position Object 7000,50,0,50
ZRotate Object 7000,180
Texture Object 7000,1005
Hide Object 7000
Rem Cloud Sphere
Make Object Sphere 7001,-2008
Position Object 7001,50,0,50
ZRotate Object 7001,180
Texture Object 7001,1006
Scale Object Texture 7001,2,1
Set Object 7001, 1, 0, 1, 1
Ghost Object On 7001
Hide Object 7001
Rem Matrix
Make Matrix 1,1024,1024,70,70
Prepare Matrix Texture 1,1000,70,70
Randomize Matrix 1,100.0
For N=1 To 140
X=Rnd(66)+2: Z=Rnd(66)+2
Set Matrix Height 1,X,Z,30.0
Next N
Rem Skirt
For N=0 To 70
Set Matrix Height 1,0,N,Rnd(30)+30
Set Matrix Height 1,70,N,Rnd(30)+30
Set Matrix Height 1,N,0,Rnd(30)+30
Set Matrix Height 1,N,70,Rnd(30)+30
Next N
For N=1 To 12: Rem 10
Gosub Smooth
Next N
t=1
For z=69 to 0 Step -1
For x=0 to 69
Set Matrix Tile 1,x,z,t
Inc t
Next x
Next z
rem Update Matrix 1
Shading# = 20.0
Normalise(1,MatWid,MatHig,Shading#)
ObjNum = 7002
Rem Start Section
Make Object Box ObjNum, 5.0, 0.1, 0.1: Texture Object ObjNum,1009: Scale Object Texture ObjNum,15,1
Set Object ObjNum, 1, 0, 0
Rem Verts
Make Object Box ObjNum+1, 0.1, 1.5, 0.1: Texture Object ObjNum+1,1009
Glue Object To Limb ObjNum+1, ObjNum,0: Offset Limb ObjNum+1,0, -2.45,-0.75, 0.0
Scale Object Texture ObjNum+1,1,6: Set Object ObjNum+1, 1, 0, 0
Make Object Box ObjNum+2, 0.1, 1.5, 0.1: Texture Object ObjNum+2,1009
Glue Object To Limb ObjNum+2, ObjNum,0: Offset Limb ObjNum+2,0, 2.45,-0.75, 0.0
Scale Object Texture ObjNum+2,1,6: Set Object ObjNum+2, 1, 0, 0
Rem Lightbox
Make Object Box ObjNum+3, 1.0, 0.3, 0.3: Color Object ObjNum+3,RGB(11,11,11)
Glue Object To Limb ObjNum+3, ObjNum,0: Offset Limb ObjNum+3,0, 0.0,-0.20, 0.0
Make Object Cylinder ObjNum+4, 0.15: Color Object ObjNum+4,RGB(90,0,0)
XRotate Object ObjNum+4,90: Fix Object Pivot ObjNum+4
Glue Object To Limb ObjNum+4, ObjNum,0: Offset Limb ObjNum+4,0, -0.30, -0.20, -0.08
Make Object Cylinder ObjNum+5, 0.15: Color Object ObjNum+5,RGB(90,0,0)
XRotate Object ObjNum+5,90: Fix Object Pivot ObjNum+5
Glue Object To Limb ObjNum+5, ObjNum,0: Offset Limb ObjNum+5,0, -0.10, -0.20, -0.08
Make Object Cylinder ObjNum+6, 0.15: Color Object ObjNum+6,RGB(90,0,0)
XRotate Object ObjNum+6,90: Fix Object Pivot ObjNum+6
Glue Object To Limb ObjNum+6, ObjNum,0: Offset Limb ObjNum+6,0, 0.10, -0.20, -0.08
Make Object Cylinder ObjNum+7, 0.15: Color Object ObjNum+7,RGB(0,90,0)
XRotate Object ObjNum+7,90: Fix Object Pivot ObjNum+7
Glue Object To Limb ObjNum+7, ObjNum,0: Offset Limb ObjNum+7,0, 0.30, -0.20, -0.08
Hide Object ObjNum
remstart
Rem Make Lights
Make Light 1
Position Light 1,-5,5,5: Rem Rear Left
Color Light 1,RGB(64,64,64)
Make Light 2
Position Light 2,5,5,5: Rem Rear Right
Color Light 2,RGB(64,64,64)
Make Light 3
Set spot light 3,5,75: Position Light 3,-5,5,-5: Rem Front Left
Color Light 3,RGB(255,255,255): Point light 3,0,0,0
Make Light 4
Set spot light 4,5,75: Position Light 4,5,5,-5: Rem Front Right
Color Light 4,RGB(255,255,255): Point light 4,0,0,0
remend
Rem Make 4 Height Markers...
Make Object Cube 2001,0.1: Scale Object 2001, 100,100,100
Make Object Cube 2002,0.1: Scale Object 2002, 100,100,100
Make Object Cube 2003,0.1: Scale Object 2003, 100,100,100
Make Object Cube 2004,0.1: Scale Object 2004, 100,100,100
Gosub Make_Vehicles
Return
Smooth:
Rem Averages matrix heights to remove jagged edges
for Z=0 to 70
for X=0 to 70
P0#=Get Matrix Height(1,X,Z): Rem Current point height
Rem Get 4 adjoining points heights (if they exist)
If Z-1>=0
P1#=Get Matrix Height(1,X,Z-1)
Else
P1#=P0#
Endif
If X+1<=TilesX
P2#=Get Matrix Height(1,X+1,Z)
Else
P2#=P0#
Endif
If Z+1<=TilesZ
P3#=Get Matrix Height(1,X,Z+1)
Else
P3#=P0#
Endif
If X-1>=0
P4#=Get Matrix Height(1,X-1,Z)
Else
P4#=P0#
Endif
Average#=(P0#+P1#+P2#+P3#+P4#)/5: Rem Av height of other points
RHeight#=Average#
Set Matrix Height 1,x,z,RHeight#
Next x
Next z
Update Matrix 1
Return
Rem ******************************************************************************************
Rem *** FUNCTIONS ***
Rem ******************************************************************************************
Function Wait_Time(Seconds)
DisplayTime = Timer()
Repeat
Sync
Until Timer() - DisplayTime >= Seconds*1000
EndFunction
Function Vehicle(ObjNum,R,G,B,VehicleType)
BodyColour = RGB(R,G,B)
Rem Car Types: 0 - Car 1 - IC Van 2 - Bus 3 - Pickup 4 - Oil Tanker 5 - Police Car 6 - Ambulance
Rem 7 - Convertible
Select VehicleType
Case 0
Rem Car Body
Make Object Box ObjNum, 3.5, .75, 2: Color Object ObjNum,BodyColour
Rem Roof
Make Object Box ObjNum+1, 1.5, .5, 2: Color Object ObjNum+1,BodyColour
Glue Object To Limb ObjNum+1, ObjNum,0: Offset Limb ObjNum+1,0, -0.3, 0.5, 0
Rem Body Stripe
Make Object Box ObjNum+2, 3.52, .73, .5: Color Object ObjNum+2,RGB(255,255,255)
Glue Object To Limb ObjNum+2, ObjNum,0: Offset Limb ObjNum+2,0, 0.0, 0.02, 0
Rem Roof Stripe
Make Object Box ObjNum+3, 1.49, .2, .5: Color Object ObjNum+3,RGB(255,255,255)
Glue Object To Limb ObjNum+3, ObjNum,0: Offset Limb ObjNum+3,0, -0.3, 0.66, 0
Rem Exhaust
Make Object Cylinder ObjNum+4,0.12: Color Object ObjNum+4,0
ZRotate Object ObjNum+4,90: Fix Object Pivot ObjNum+4: Scale Object ObjNum+4,800,100,100
Glue Object To Limb ObjNum+4, ObjNum,0: Offset Limb ObjNum+4,0, -1.75, -0.45, 0.1
Make Object Cylinder ObjNum+5,0.12: Color Object ObjNum+5,0
ZRotate Object ObjNum+5,90: Fix Object Pivot ObjNum+5: Scale Object ObjNum+5,800,100,100
Glue Object To Limb ObjNum+5, ObjNum,0: Offset Limb ObjNum+5,0, -1.75, -0.45, -0.1
Rem Front Glass
Make Object Box ObjNum+14, 0.55, 0.5, 1.95: Color Object ObjNum+14,RGB(220,220,255)
ZRotate Object ObjNum+14,30: Fix Object Pivot ObjNum+14
Glue Object To Limb ObjNum+14, ObjNum,0: Offset Limb ObjNum+14,0, 0.35, 0.4, 0
Rem Side Glass
Make Object Box ObjNum+15, 1.45, 0.35, 2.02: Color Object ObjNum+15,RGB(220,220,255)
Glue Object To Limb ObjNum+15, ObjNum,0: Offset Limb ObjNum+15,0, -0.3, 0.55, 0
Rem Rear Glass
Make Object Box ObjNum+16, 0.13, 0.35, 1.95: Color Object ObjNum+16,RGB(220,220,255)
Glue Object To Limb ObjNum+16, ObjNum,0: Offset Limb ObjNum+16,0, -1.0, 0.55, 0
Rem Aero Wing
Make Object Box ObjNum+21, 0.40, 0.02, 2.02: Color Object ObjNum+21,BodyColour
ZRotate Object ObjNum+21,350: Fix Object Pivot ObjNum+21
Glue Object To Limb ObjNum+21,ObjNum,0: Offset Limb ObjNum+21,0, -1.5, 0.7, 0.0
Make Object Box ObjNum+22, 0.1, 0.5, 0.02: Color Object ObjNum+22,0
Glue Object To Limb ObjNum+22,ObjNum,0: Offset Limb ObjNum+22,0, -1.5, 0.4, 0.80
Make Object Box ObjNum+23, 0.1, 0.5, 0.02: Color Object ObjNum+23,0
Glue Object To Limb ObjNum+23,ObjNum,0: Offset Limb ObjNum+23,0, -1.5, 0.4, -0.80
EndCase
Case 1
Rem Ice Cream Van Sign Texture
If Image Exist(12004) = 0
CLS RGB(255,255,255): Ink 0,0
Text 0,0," STOP ME AND BUY ONE! "
Get Image 12004,0,0,Text Width(" STOP ME AND BUY ONE! "),Text Height("X")
Endif
Rem Ice Cream Van Body
Make Object Box ObjNum, 3.5, .75, 2: Color Object ObjNum,BodyColour
Make Object Box ObjNum+1, 3.0, .75, 2: Color Object ObjNum+1,BodyColour
Glue Object To Limb ObjNum+1, ObjNum,0: Offset Limb ObjNum+1,0, -0.25, .75, 0
Make Object Box ObjNum+2, 3.2, .2, 2: Color Object ObjNum+2,BodyColour
Glue Object To Limb ObjNum+2, ObjNum,0: Offset Limb ObjNum+2,0, -0.15, 1.1, 0
Rem Ice Cream Cone
Make Object Cone ObjNum+3, 0.6: Color Object ObjNum+3,RGB(168,150,0)
Scale Object ObjNum+3,200,50,50
ZRotate Object ObjNum+3, 180: Fix Object Pivot ObjNum+3
Glue Object To Limb ObjNum+3, ObjNum,0: Offset Limb ObjNum+3,0, 1.5, 1.2, 0
Make Object Sphere ObjNum+4, 0.58: Color Object ObjNum+4,RGB(255,180,180)
Glue Object To Limb ObjNum+4, ObjNum,0: Offset Limb ObjNum+4,0, 1.5, 1.57, 0
Rem Sign
Make Object Box ObjNum+5, 1.6, 0.4, 0.6: Texture Object ObjNum+5,12004
YRotate Object ObjNum+5,90: Fix Object Pivot ObjNum+5
Glue Object To Limb ObjNum+5, ObjNum,0: Offset Limb ObjNum+5,0, -1.46, 0.0, 0
Rem Front Glass
Make Object Box ObjNum+14, 0.55, 0.5, 1.93: Color Object ObjNum+14,RGB(220,220,255)
Glue Object To Limb ObjNum+14, ObjNum,0: Offset Limb ObjNum+14,0, 1.0, 0.6, 0
Rem Side Glass
Make Object Box ObjNum+15, 2.1, 0.6, 2.02: Color Object ObjNum+15,RGB(220,220,255)
Glue Object To Limb ObjNum+15, ObjNum,0: Offset Limb ObjNum+15,0, -0.6, 0.75, 0
Rem Rear Glass
Make Object Box ObjNum+16, 0.13, 0.6, 1.8: Color Object ObjNum+16,RGB(220,220,255)
Glue Object To Limb ObjNum+16, ObjNum,0: Offset Limb ObjNum+16,0, -1.7, 0.75, 0
EndCase
Case 2
Rem Bus Sign Texture
If Image Exist(12000) = 0
CLS 0
Ink RGB(255,255,0),0
Text 0,0," 004 West End "
Get Image 12000,0,0,Text Width(" 004 West End "),Text Height("X")
Endif
Rem Bus Body
Make Object Box ObjNum, 3.5, 0.75, 2.0: Color Object ObjNum,BodyColour
Make Object Box ObjNum+1, 3.5, 0.75, 2.0: Color Object ObjNum+1,BodyColour: Rem top
Glue Object To Limb ObjNum+1, ObjNum,0: Offset Limb ObjNum+1,0, 0.0, 1.5, 0.0
Make Object Box ObjNum+2, 3.5, 0.75, 1.0: Color Object ObjNum+2,BodyColour: Rem Long Centre
Glue Object To Limb ObjNum+2, ObjNum,0: Offset Limb ObjNum+2,0, 0.0, 0.75, -0.5
Make Object Box ObjNum+3, 3.0, 0.75, 1.0: Color Object ObjNum+3,BodyColour: Rem Short Centre
Glue Object To Limb ObjNum+3, ObjNum,0: Offset Limb ObjNum+3,0, -0.25, 0.75, 0.5
Rem Front Glass (Left of Driver)
Make Object Box ObjNum+14, 0.55, 0.7, 1.93: Color Object ObjNum+14,RGB(220,220,255)
Glue Object To Limb ObjNum+14, ObjNum,0: Offset Limb ObjNum+14,0, 1.0, 0.7, 0
Rem Front Glass 2 (Driver)
Make Object Box ObjNum+15, 0.2, 0.7, 0.9: Color Object ObjNum+15,RGB(220,220,255)
Glue Object To Limb ObjNum+15, ObjNum,0: Offset Limb ObjNum+15,0, 1.66, 0.75, -0.5
Rem Top Glass
Make Object Box ObjNum+16, 3.52, 0.45, 1.9: Color Object ObjNum+16,RGB(220,220,255)
Glue Object To Limb ObjNum+16, ObjNum,0: Offset Limb ObjNum+16,0, 0.0, 1.6, 0.0
Rem Side 1 Glass (Front)
Make Object Box ObjNum+21, 0.8, 0.45, 2.04: Color Object ObjNum+21,RGB(220,220,255)
Glue Object To Limb ObjNum+21, ObjNum,0: Offset Limb ObjNum+21,0, 1.3, 1.6, 0.0
Rem Side 2 Glass
Make Object Box ObjNum+22, 0.8, 0.45, 2.04: Color Object ObjNum+22,RGB(220,220,255)
Glue Object To Limb ObjNum+22, ObjNum,0: Offset Limb ObjNum+22,0, 0.45, 1.6, 0.0
Rem Side 3 Glass (top rear)
Make Object Box ObjNum+23, 0.8, 0.45, 2.04: Color Object ObjNum+23,RGB(220,220,255)
Glue Object To Limb ObjNum+23, ObjNum,0: Offset Limb ObjNum+23,0, -0.4, 1.6, 0.0
Rem Side 4 Glass (top rear)
Make Object Box ObjNum+24, 0.8, 0.45, 2.04: Color Object ObjNum+24,RGB(220,220,255)
Glue Object To Limb ObjNum+24, ObjNum,0: Offset Limb ObjNum+24,0, -1.25, 1.6, 0.0
Rem Bottom Rear Glass
Make Object Box ObjNum+25, 0.52, 0.45, 0.9: Color Object ObjNum+25,RGB(220,220,255)
Glue Object To Limb ObjNum+25, ObjNum,0: Offset Limb ObjNum+25,0, -1.5, 0.7, 0.5
Rem Side 1 Glass
Make Object Box ObjNum+26, 0.8, 0.45, 2.04: Color Object ObjNum+26,RGB(220,220,255)
Glue Object To Limb ObjNum+26, ObjNum,0: Offset Limb ObjNum+26,0, 0.45, 0.7, 0.0
Rem Side 1 Glass
Make Object Box ObjNum+27, 0.8, 0.45, 2.04: Color Object ObjNum+27,RGB(220,220,255)
Glue Object To Limb ObjNum+27, ObjNum,0: Offset Limb ObjNum+27,0, -0.4, 0.7, 0.0
Rem Side 1 Glass (Rear bottom)
Make Object Box ObjNum+28, 0.8, 0.45, 2.04: Color Object ObjNum+28,RGB(220,220,255)
Glue Object To Limb ObjNum+28, ObjNum,0: Offset Limb ObjNum+28,0, -1.25, 0.7, 0.0
Rem Number
Make Object Box ObjNum+29, 1.1, 0.15, 3.54: YRotate Object ObjNum+29,90: Fix Object Pivot ObjNum+29
Glue Object To Limb ObjNum+29, ObjNum,0: Offset Limb ObjNum+29,0, 0.0, 1.25, 0.0
Texture Object ObjNum+29,12000
EndCase
Case 3: Rem Pickup
Rem Pickup Body
Make Object Box ObjNum, 3.5, .75, 2: Color Object ObjNum,BodyColour
Rem Roof
Make Object Box ObjNum+1, 0.8, .6, 2: Color Object ObjNum+1,BodyColour
Glue Object To Limb ObjNum+1, ObjNum,0: Offset Limb ObjNum+1,0, 1.05, 0.6, 0
Rem Tarp
Make Object Box ObjNum+2, 2.24, .3, 1.9: Color Object ObjNum+2,RGB(20,20,20)
Glue Object To Limb ObjNum+2, ObjNum,0: Offset Limb ObjNum+2,0, -0.56, 0.25, 0
Rem Front Glass
Make Object Box ObjNum+14, 0.62, 0.5, 1.95: Color Object ObjNum+14,RGB(220,220,255)
ZRotate Object ObjNum+14,30: Fix Object Pivot ObjNum+14
Glue Object To Limb ObjNum+14, ObjNum,0: Offset Limb ObjNum+14,0, 1.33, 0.44, 0
Rem Side Glass
Make Object Box ObjNum+15, 0.6, 0.45, 2.02: Color Object ObjNum+15,RGB(220,220,255)
Glue Object To Limb ObjNum+15, ObjNum,0: Offset Limb ObjNum+15,0, 1.05, 0.6, 0
Rem Rear Glass
Make Object Box ObjNum+16, 0.5, 0.35, 1.0: Color Object ObjNum+16,RGB(220,220,255)
Glue Object To Limb ObjNum+16, ObjNum,0: Offset Limb ObjNum+16,0, 0.89, 0.6, 0
EndCase
Case 4: Rem Oil Tanker
Rem Wagon Body
Make Object Box ObjNum, 3.5, .75, 2: Color Object ObjNum,BodyColour
Rem Cab
Make Object Box ObjNum+1, 0.8, .6, 2: Color Object ObjNum+1,BodyColour
Glue Object To Limb ObjNum+1, ObjNum,0: Offset Limb ObjNum+1,0, 1.35, 0.67, 0
Rem Tank
Make Object Cylinder ObjNum+2,1.4: Color Object ObjNum+2,RGB(255,255,255)
ZRotate Object ObjNum+2,90: YRotate Object ObjNum+2,210: Fix Object Pivot ObjNum+2
Glue Object To Limb ObjNum+2, ObjNum,0: Offset Limb ObjNum+2,0, -0.45, 1.0, 0
Make Object Sphere ObjNum+3,1.4: Color Object ObjNum+3,RGB(255,255,255)
Glue Object To Limb ObjNum+3, ObjNum,0: Offset Limb ObjNum+3,0, 0.25, 1.0, 0
Make Object Sphere ObjNum+4,1.4: Color Object ObjNum+4,RGB(255,255,255)
Glue Object To Limb ObjNum+4, ObjNum,0: Offset Limb ObjNum+4,0, -1.2, 1.0, 0
Rem Front Glass
Make Object Box ObjNum+14, 0.62, 0.5, 1.95: Color Object ObjNum+14,RGB(220,220,255)
Glue Object To Limb ObjNum+14, ObjNum,0: Offset Limb ObjNum+14,0, 1.45, 0.65, 0
Rem Side Glass
Make Object Box ObjNum+15, 0.62, 0.5, 2.02: Color Object ObjNum+15,RGB(220,220,255)
Glue Object To Limb ObjNum+15, ObjNum,0: Offset Limb ObjNum+15,0, 1.35, 0.65, 0
Rem Front Support
Make Object Box ObjNum+16, 0.1, 0.5, 1.5: Color Object ObjNum+16,RGB(0,0,200)
Glue Object To Limb ObjNum+16, ObjNum,0: Offset Limb ObjNum+16,0, 0.5, 0.65, 0
Rem Centre Support
Make Object Box ObjNum+21, 0.1, 0.5, 1.5: Color Object ObjNum+21,RGB(0,0,200)
Glue Object To Limb ObjNum+21, ObjNum,0: Offset Limb ObjNum+21,0, -0.5, 0.65, 0
Rem Rear Support
Make Object Box ObjNum+22, 0.1, 0.5, 1.5: Color Object ObjNum+22,RGB(0,0,200)
Glue Object To Limb ObjNum+22, ObjNum,0: Offset Limb ObjNum+22,0, -1.5, 0.65, 0
EndCase
Case 5: Rem Police Car
Rem Bus Sign Texture
If Image Exist(12001) = 0
CLS RGB(255,255,255)
Set Text To Bold
Ink 0,0: Text 0,0," POLICE "
Get Image 12001,0,0,Text Width(" POLICE "),Text Height("X")
Set Text To Normal
Endif
Rem Police Car Body
Make Object Box ObjNum, 3.5, .75, 2: Color Object ObjNum,BodyColour
Rem White Roof
Make Object Box ObjNum+1, 1.5, 1.2, 2.01: Color Object ObjNum+1,RGB(255,255,255)
Glue Object To Limb ObjNum+1, ObjNum,0: Offset Limb ObjNum+1,0, 0.0, 0.2, 0
Rem Police Sign
Make Object Box ObjNum+2, 1.2, 0.5, 2.02: Color Object ObjNum+2,RGB(255,155,255)
Glue Object To Limb ObjNum+2, ObjNum,0: Offset Limb ObjNum+2,0, 0.0, 0.02, 0
Texture Object ObjNum+2,12001
Rem Exhaust
Make Object Cylinder ObjNum+4,0.12: Color Object ObjNum+4,0
ZRotate Object ObjNum+4,90: Fix Object Pivot ObjNum+4: Scale Object ObjNum+4,800,100,100
Glue Object To Limb ObjNum+4, ObjNum,0: Offset Limb ObjNum+4,0, -1.75, -0.45, 0.1
Make Object Cylinder ObjNum+5,0.12: Color Object ObjNum+5,0
ZRotate Object ObjNum+5,90: Fix Object Pivot ObjNum+5: Scale Object ObjNum+5,800,100,100
Glue Object To Limb ObjNum+5, ObjNum,0: Offset Limb ObjNum+5,0, -1.75, -0.45, -0.1
Rem Front Glass
Make Object Box ObjNum+14, 0.55, 0.5, 1.95: Color Object ObjNum+14,RGB(220,220,255)
ZRotate Object ObjNum+14,30: Fix Object Pivot ObjNum+14
Glue Object To Limb ObjNum+14, ObjNum,0: Offset Limb ObjNum+14,0, 0.65, 0.4, 0
Rem Side Glass
Make Object Box ObjNum+15, 1.35, 0.4, 2.03: Color Object ObjNum+15,RGB(220,220,255)
Glue Object To Limb ObjNum+15, ObjNum,0: Offset Limb ObjNum+15,0, -0.0, 0.55, 0
Rem Rear Glass
Make Object Box ObjNum+16, 0.55, 0.5, 1.95: Color Object ObjNum+16,RGB(220,220,255)
ZRotate Object ObjNum+16,50: Fix Object Pivot ObjNum+16
Glue Object To Limb ObjNum+16, ObjNum,0: Offset Limb ObjNum+16,0, -0.75, 0.4, 0
Rem Lights
Make Object Box ObjNum+21, 0.2, 0.4, 1.8: Color Object ObjNum+21,0
Glue Object To Limb ObjNum+21,ObjNum,0: Offset Limb ObjNum+21,0, 0.0, 0.7, 0.0
Make Object Box ObjNum+22, 0.25, 0.45, 0.5: Color Object ObjNum+22,RGB(255,0,0)
Glue Object To Limb ObjNum+22,ObjNum,0: Offset Limb ObjNum+22,0, 0.0, 0.8, -0.7
Make Object Box ObjNum+23, 0.25, 0.45, 0.5: Color Object ObjNum+23,RGB(0,0,255)
Glue Object To Limb ObjNum+23,ObjNum,0: Offset Limb ObjNum+23,0, 0.0, 0.8, 0.7
EndCase
Case 6: Rem Ambulance Reserved 6-13 17-20 Inclusive
Rem Ambulance Sign Texture
If Image Exist(12002) = 0
CLS 0
Set Text To Bold
Ink RGB(255,255,255),0: Text 0,0," AMBULANCE "
Get Image 12002,0,0,Text Width(" AMBULANCE "),Text Height("X")
Set Text To Normal
Endif
Rem Ambulance Body
Make Object Box ObjNum, 3.5, .75, 2: Color Object ObjNum,BodyColour
Rem Middle Section
Make Object Box ObjNum+1, 3.0, .9, 2: Color Object ObjNum+1,BodyColour
Glue Object To Limb ObjNum+1, ObjNum,0: Offset Limb ObjNum+1,0, -0.25, .8, 0
Rem Sign
Make Object Box ObjNum+2, 1.5, .2, 3.02: YRotate Object ObjNum+2,90: Fix Object Pivot ObjNum+2
Glue Object To Limb ObjNum+2, ObjNum,0: Offset Limb ObjNum+2,0, -0.25, 1.1, 0
Texture Object ObjNum+2,12002
Rem Red Cross
Make Object Box ObjNum+3, 0.5, .5, .2: Color Object ObjNum+3,RGB(255,0,0)
Glue Object To Limb ObjNum+3, ObjNum,0: Offset Limb ObjNum+3,0, -1.51, 0.0, 0.0
Make Object Box ObjNum+4, 0.5, .2, .5: Color Object ObjNum+4,RGB(255,0,0)
Glue Object To Limb ObjNum+4, ObjNum,0: Offset Limb ObjNum+4,0, -1.51, 0.0, 0.0
Rem Side Glass
Make Object Box ObjNum+5, 0.6, 0.5, 2.01: Color Object ObjNum+5,RGB(220,220,255)
Glue Object To Limb ObjNum+5, ObjNum,0: Offset Limb ObjNum+5,0, 0.85, 0.7, 0
Rem Front Glass
Make Object Box ObjNum+14, 0.52, 0.5, 1.93: Color Object ObjNum+14,RGB(220,220,255)
Glue Object To Limb ObjNum+14, ObjNum,0: Offset Limb ObjNum+14,0, 1.0, 0.7, 0
Rem Rear Glass 1
Make Object Box ObjNum+15, 0.13, 0.5, 0.8: Color Object ObjNum+15,RGB(120,120,155)
Glue Object To Limb ObjNum+15, ObjNum,0: Offset Limb ObjNum+15,0, -1.7, 0.70, 0.5
Rem Rear Glass 2
Make Object Box ObjNum+16, 0.13, 0.5, 0.8: Color Object ObjNum+16,RGB(120,120,155)
Glue Object To Limb ObjNum+16, ObjNum,0: Offset Limb ObjNum+16,0, -1.7, 0.70, -0.5
Rem Lights
Make Object Box ObjNum+21, 0.11, 0.4, 1.8: Color Object ObjNum+21,RGB(255,255,255)
Glue Object To Limb ObjNum+21,ObjNum,0: Offset Limb ObjNum+21,0, 1.0, 1.15, 0.0
Make Object Box ObjNum+22, 0.13, 0.45, 0.5: Color Object ObjNum+22,RGB(255,200,0)
Glue Object To Limb ObjNum+22,ObjNum,0: Offset Limb ObjNum+22,0, 1.0, 1.2, -0.68
Make Object Box ObjNum+23, 0.13, 0.45, 0.5: Color Object ObjNum+23,RGB(255,200,0)
Glue Object To Limb ObjNum+23,ObjNum,0: Offset Limb ObjNum+23,0, 1.0, 1.2, 0.68
Rem Side Cross
Make Object Box ObjNum+24, 0.3, 0.7, 2.02: Color Object ObjNum+24,RGB(255,0,0)
Glue Object To Limb ObjNum+24, ObjNum,0: Offset Limb ObjNum+24,0, -0.5, 0.7, 0.0
Make Object Box ObjNum+25, 0.7, 0.3, 2.02: Color Object ObjNum+25,RGB(255,0,0)
Glue Object To Limb ObjNum+25, ObjNum,0: Offset Limb ObjNum+25,0, -0.5, 0.7, 0.0
EndCase
Case 7: Rem Convertible Reserved 6-13 17-20 Inclusive
Rem Convertible Wheel Texture
If Image Exist(12003) = 0
TS = Text Size()
CLS 0
Ink RGB(22,22,22),0
For N = 22 To 30
Circle 32,32,N: Circle 33,32,N
Circle 32,32,N-29: Circle 33,32,N-29
Next N
Set Text Size 48
Text 12,0,"Y"
Sync
Get Image 12003,0,0,64,64,1
Set Text Size TS
Endif
Rem Convertible Body
Make Object Box ObjNum, 3.49, .2, 2: Color Object ObjNum,BodyColour
Position Object ObjNum, 0, -1.6, 0
Rem Sides
Make Object Box ObjNum+1, 3.51, .55, .4: Color Object ObjNum+1,BodyColour
Glue Object To Limb ObjNum+1, ObjNum,0: Offset Limb ObjNum+1, 0, 0.0, 0.11, -0.81
Make Object Box ObjNum+2, 3.51, .55, .4: Color Object ObjNum+2,BodyColour
Glue Object To Limb ObjNum+2, ObjNum,0: Offset Limb ObjNum+2, 0, 0.0, 0.11, 0.81
Rem Boot
Make Object Box ObjNum+3, 1.0, .4, 1.22: Color Object ObjNum+3,BodyColour
ZRotate Object ObjNum+3,6: Fix Object Pivot ObjNum+3
Glue Object To Limb ObjNum+3, ObjNum,0: Offset Limb ObjNum+3, 0, -1.26, 0.23, 0.0
Rem Bonnet
Make Object Box ObjNum+4, 1.8, .4, 1.22: Color Object ObjNum+4,BodyColour
ZRotate Object ObjNum+4,178: Fix Object Pivot ObjNum+4
Glue Object To Limb ObjNum+4, ObjNum,0: Offset Limb ObjNum+4, 0, 0.86, 0.23, 0.0
Make Object Box ObjNum+5, 1.0, 0.4, 0.4: Color Object ObjNum+5,BodyColour
ZRotate Object ObjNum+5,4: Fix Object Pivot ObjNum+5
Glue Object To Limb ObjNum+5, ObjNum,0: Offset Limb ObjNum+5, 0, 0.86, 0.3, 0.0
Rem Exhaust
Make Object Cylinder ObjNum+14,0.16: Color Object ObjNum+14,0
ZRotate Object ObjNum+14,90: Fix Object Pivot ObjNum+14: Scale Object ObjNum+14,800,100,100
Glue Object To Limb ObjNum+14, ObjNum,0: Offset Limb ObjNum+14,0, -1.75, -0.01, 0.1
Make Object Cylinder ObjNum+15,0.16: Color Object ObjNum+15,0
ZRotate Object ObjNum+15,90: Fix Object Pivot ObjNum+15: Scale Object ObjNum+15,800,100,100
Glue Object To Limb ObjNum+15, ObjNum,0: Offset Limb ObjNum+15,0, -1.75, -0.01, -0.1
Rem Front Glass
Make Object Box ObjNum+21, 0.04, 0.5, 1.2: Color Object ObjNum+21,RGB(120,120,170)
ZRotate Object ObjNum+21,40: Fix Object Pivot ObjNum+21
Glue Object To Limb ObjNum+21, ObjNum,0: Offset Limb ObjNum+21,0, 0.0, 0.6, 0
Ghost Object On ObjNum+21
Rem Seat
Make Object Box ObjNum+22, 0.2, 0.4, 1.2: Color Object ObjNum+22,RGB(80,30,0)
ZRotate Object ObjNum+22,6: Fix Object Pivot ObjNum+22
Glue Object To Limb ObjNum+22, ObjNum,0: Offset Limb ObjNum+22, 0, -0.7, 0.23, 0.0
Make Object Box ObjNum+23, 0.4, 0.2, 1.2: Color Object ObjNum+23,RGB(80,30,0)
Glue Object To Limb ObjNum+23, ObjNum,0: Offset Limb ObjNum+23, 0, -0.4, 0.1, 0.0
Make Object Plain ObjNum+24, 0.4, 0.4: Texture Object ObjNum+24,12003
YRotate Object ObjNum+24,90: ZRotate Object ObjNum+24,168: Fix Object Pivot ObjNum+24
Glue Object To Limb ObjNum+24, ObjNum, 0: Offset Limb ObjNum+24, 0, -0.1, 0.4, 0.3
Set Object ObjNum+24, 1, 0, 0
EndCase
EndSelect
Rem ****** Parts Common To All Vehicles ******
Rem Front Right Wheel
Make Object Cylinder ObjNum+6,0.7: Color Object ObjNum+6,0
XRotate Object ObjNum+6,90: Fix Object Pivot ObjNum+6
Glue Object To Limb ObjNum+6, ObjNum,0: Offset Limb ObjNum+6,0, 1.25, -0.2, -0.7
Make Object Cylinder ObjNum+7,0.5: Color Object ObjNum+7,RGB(160,160,160)
XRotate Object ObjNum+7,90: Fix Object Pivot ObjNum+7
Glue Object To Limb ObjNum+7, ObjNum,0: Offset Limb ObjNum+7,0, 1.25, -0.2, -0.82
Rem Front Left Wheel
Make Object Cylinder ObjNum+8,0.7: Color Object ObjNum+8,0
XRotate Object ObjNum+8,90: Fix Object Pivot ObjNum+8
Glue Object To Limb ObjNum+8, ObjNum,0: Offset Limb ObjNum+8,0, 1.25, -0.2, 0.7
Make Object Cylinder ObjNum+9,0.5: Color Object ObjNum+9,RGB(160,160,160)
XRotate Object ObjNum+9,90: Fix Object Pivot ObjNum+9
Glue Object To Limb ObjNum+9, ObjNum,0: Offset Limb ObjNum+9,0, 1.25, -0.2, 0.82
Rem Back Right Wheel
Make Object Cylinder ObjNum+10,0.7: Color Object ObjNum+10,0
XRotate Object ObjNum+10,90: Fix Object Pivot ObjNum+10
Glue Object To Limb ObjNum+10, ObjNum,0: Offset Limb ObjNum+10,0, -1.25, -0.2, -0.7
Make Object Cylinder ObjNum+11,0.5: Color Object ObjNum+11,RGB(160,160,160)
XRotate Object ObjNum+11,90: Fix Object Pivot ObjNum+11
Glue Object To Limb ObjNum+11, ObjNum,0: Offset Limb ObjNum+11,0, -1.25, -0.2, -0.82
Rem Back Left Wheel
Make Object Cylinder ObjNum+12,0.7: Color Object ObjNum+12,0
XRotate Object ObjNum+12,90: Fix Object Pivot ObjNum+12
Glue Object To Limb ObjNum+12, ObjNum,0: Offset Limb ObjNum+12,0, -1.25, -0.2, 0.7
Make Object Cylinder ObjNum+13,0.5: Color Object ObjNum+13,RGB(160,160,160)
XRotate Object ObjNum+13,90: Fix Object Pivot ObjNum+13
Glue Object To Limb ObjNum+13, ObjNum,0: Offset Limb ObjNum+13,0, -1.25, -0.2, 0.82
Rem Brake Lights
Make Object Cylinder ObjNum+17,0.12: Color Object ObjNum+17,RGB(128,0,0)
ZRotate Object ObjNum+17,90: Fix Object Pivot ObjNum+17: Scale Object ObjNum+17,800,100,100
Glue Object To Limb ObjNum+17, ObjNum,0: Offset Limb ObjNum+17,0, -1.72, 0.28, 0.87
Make Object Cylinder ObjNum+18,0.12: Color Object ObjNum+18,RGB(128,0,0)
ZRotate Object ObjNum+18,90: Fix Object Pivot ObjNum+18: Scale Object ObjNum+18,800,100,100
Glue Object To Limb ObjNum+18, ObjNum,0: Offset Limb ObjNum+18,0, -1.72, 0.28, -0.87
Rem Headlights
Make Object Cylinder ObjNum+19,0.3: Color Object ObjNum+19,RGB(255,255,0)
ZRotate Object ObjNum+19,90: Fix Object Pivot ObjNum+19: Scale Object ObjNum+19,800,100,100
Glue Object To Limb ObjNum+19, ObjNum,0: Offset Limb ObjNum+19,0, 1.64, 0.20, 0.80
Make Object Cylinder ObjNum+20,0.3: Color Object ObjNum+20,RGB(255,255,0)
ZRotate Object ObjNum+20,90: Fix Object Pivot ObjNum+20: Scale Object ObjNum+20,800,100,100
Glue Object To Limb ObjNum+20, ObjNum,0: Offset Limb ObjNum+20,0, 1.64, 0.20, -0.80
Rem Apply Lighting
For N=ObjNum To ObjNum+49
If Object Exist(N)
Set Object Ambient N,RGB(48,48,48)
Set Object Diffuse N,RGB(64,64,64)
Set Object Emissive N,RGB(0,0,0)
Set Object Specular N,RGB(128,128,128),50
Endif
Next N
YRotate Object ObjNum,180.0: Fix Object Pivot ObjNum
EndFunction
Function MakeGradient(ImgNum,Size,Red#,Green#,Blue#,EndRed,EndGreen,EndBlue)
Rem TDK's Colour Gradient Function
Rem Creates a gradient of size 'Size' starting at colour R,G,B and ending at R2, G2, B2
Rem Note: Red, Green & Blue need to be floats for the calculations even though they are used in the
Rem RGB function which normally requires integers. The end R,G & B are integers as normal.
RedRatio# = ABS((EndRed-Red#) / 255): If EndRed < Red# Then RedRatio# = 0-RedRatio#
GreenRatio# = ABS((EndGreen-Green#) / 255): If EndGreen < Green# Then GreenRatio# = 0-GreenRatio#
BlueRatio# = ABS((EndBlue-Blue#) / 255): If EndBlue < Blue# Then BlueRatio# = 0-BlueRatio#
For N=0 To Size
Ink RGB(Red#,Green#,Blue#),0
Line 0,N,Size,N
Inc Red#,RedRatio#
Inc Green#,GreenRatio#
Inc Blue#,BlueRatio#
Next N
Get Image ImgNum,0,0,Size+1,Size*2: Rem Grab Gradient Into An Image
EndFunction
Function MakeClouds(ImgNum,Size)
Rem TDK's Cloud Texture Function
CLS 0: Ink RGB(255,255,255),0
For N = 0 To 16
Circle 20,20,N
Circle 21,20,N
Next N
Get Image ImgNum,21,0,42,42
For N = 0 To 22
Paste Image ImgNum,22+N,0
Next N
Blur Bitmap 1,1
Get Image ImgNum,0,0,65,42
Sync
CLS
For N1=1 To 20
X=Rnd(192)+10: Y=Rnd(100) + 60
Paste Image ImgNum,X,Y,1
Next N1
Blur Bitmap 1,8
Blur Bitmap 1,8
Get Image ImgNum,0,0,Size+16,Size*1.8: Rem Grab Gradient Into An Image
EndFunction
Function Normalise(MatNum,MatWid,MatHig,Shading#)
Rem By Lee Bamber From DB Example - Adds shaded areas to matrix to give depth
For z=1 to MatWid
For x=1 to MatHig
h8#=get matrix height(MatNum,x,z-1)
h4#=get matrix height(MatNum,x-1,z)
h#=get matrix height(MatNum,x,z)
h2#=get matrix height(MatNum,x,z)
x1#=(x-1)*Shading#
y1#=h#
x2#=(x+0)*Shading#
y2#=h4#
dx#=x2#-x1#
dy#=y2#-y1#
ax#=atanfull(dx#,dy#)
ax#=wrapvalue(90-ax#)
z1#=(z-1)*Shading#
y1#=h2#
z2#=(z+0)*Shading#
y2#=h8#
dz#=z2#-z1#
dy#=y2#-y1#
az#=atanfull(dz#,dy#)
az#=wrapvalue(90-az#)
nx#=sin(ax#)
ny#=cos(ax#)
nz#=sin(az#)
Set matrix normal MatNum,x,z,nx#,ny#,nz#
next x
next z
Update Matrix MatNum
EndFunction
Function CarDistance(CarNum)
CarPosX = Object Position X(CarNum*100+5000)
Dx# = CarPosX - Waypoints#(CarNum, CurrentWayPoint(CarNum), 0)
rem Dy# = Object Position Y(CarNum)-5.0
CarPosZ = Object Position Z(CarNum*100+5000)
Dz# = CarPosZ - Waypoints#(CarNum,CurrentWayPoint(CarNum),1)
Dist# = Sqrt((Dx#*Dx#)+0+(Dz#*Dz#))
EndFunction Dist#
Function Tilt_Object(ObjNum,MatNum,Ox#,Oy#,Oz#,ObjWid#,ObjHig#,ObjDep#)
Rem The Calculations...
OAy# = Object Angle Y(ObjNum): DirX# = Sin(OAy#): DirZ# = Cos(OAy#)
rem Text 500,10,Str$(OAy#)
Rem Get Matrix Height At Front Of Box
FX# = Ox# + (ObjDep#/2.0) * DirX#: FZ# = Oz# + (ObjDep#/2.0) * DirZ#
FrontY# = Get Ground Height(MatNum,FX#,FZ#)
Position Object 2001, FX#, FrontY# + ObjHig#+1.5, FZ#
Rem Get Matrix Height At Back Of Box
BX# = Ox# - (ObjDep#/2.0) * DirX#: BZ# = Oz# - (ObjDep#/2.0) * DirZ#
BackY# = Get Ground Height(MatNum,BX#,BZ#)
Position Object 2002, BX#, BackY# + ObjHig#+1.5, BZ#
Rem Get Matrix Height At Left Of Box
LX# = Ox# - (ObjWid#/2.0) * DirZ#: LZ# = Oz# + (ObjWid#/2.0) * DirX#
LeftY# = Get Ground Height(MatNum,LX#,LZ#)
Position Object 2003, LX#, LeftY# + ObjHig#+1.5, LZ#
Rem Get Matrix Height At Right Of Box
RX# = Ox# + (ObjWid#/2.0) * DirZ#: RZ# = Oz# - (ObjWid#/2.0) * DirX#
RightY# = Get Ground Height(MatNum,RX#,RZ#)
Position Object 2004, RX#, RightY# + ObjHig#+1.5, RZ#
Rem Set Object Rotation ZYX ObjNum
Rem Set Object Rotation XYZ ObjNum
Rem XATF = WrapValue(Atanfull(FZ#-BZ#, FrontY#-BackY#))
Rem ZATF = WrapValue(Atanfull(LX#-RX#, LeftY#-RightY#))
If (OAy# > 0.0 And OAy# < 90.0) Or OAy# > 270.0: Rem Upish
Rem XATF = WrapValue(Atanfull(FZ#-BZ#, FrontY#-BackY#)-90)
Rem Xrotate Object ObjNum, XATF
If OAy# > 270.0: Rem Up Leftish
Rem ZATF = WrapValue(Atanfull(LX#-RX#,LeftY#-RightY#)+90)
rem Zrotate Object ObjNum,ZATF-90
rem Text 420,10,"Up Left "
XATF = WrapValue(XATF-0)
ZATF = WrapValue(ZATF-0)
Endif
If OAy# > 0.0 And OAy# < 90.0: Rem Up Rightish
Rem ZATF = WrapValue(Atanfull(RX#-LX#,RightY#-LeftY#)-90)
XATF = WrapValue(XATF-0)
ZATF = WrapValue(ZATF-0)
rem Text 420,10,"Up Right "
Rem Zrotate Object ObjNum,ZATF-270
Endif
Endif
If OAy# > 90.0 And OAy# < 270.0: Rem Downish
Rem XATF = WrapValue(Atanfull(BZ#-FZ#, BackY#-FrontY#)+90)
Rem Xrotate Object ObjNum, XATF
If OAy# < 180.0: Rem Down Rightish
XATF = WrapValue(XATF-0)
ZATF = WrapValue(ZATF-0)
rem Text 420,10,"Down Right "
Rem Zrotate Object ObjNum,ZATF
Endif
If OAy# > 180.0 And OAy# < 270.0: Rem Down Leftish
rem Text 420,10,"Down Left "
XATF = WrapValue(XATF-0)
ZATF = WrapValue(ZATF-0)
Rem ZATF = WrapValue(Atanfull(LX#-RX#,LeftY#-RightY#)+90)
Rem Zrotate Object ObjNum,ZATF
Endif
Endif
If OAy#=0.0: Rem Exactly Up
XATF = WrapValue(Atanfull(FZ#-BZ#, FrontY#-BackY#)-90)
ZATF = WrapValue(Atanfull(LX#-RX#, LeftY#-RightY#)-270)
Xrotate Object ObjNum,WrapValue(XATF)
Zrotate Object ObjNum,WrapValue(ZATF)
rem Text 420,10,"Up "
Endif
If OAy#=180.0: Rem Exactly Down
XATF = WrapValue(Atanfull(FZ#-BZ#, FrontY#-BackY#)-270)
ZATF = WrapValue(Atanfull(LX#-RX#, LeftY#-RightY#)-90)
Xrotate Object ObjNum,WrapValue(XATF)
rem Text 420,10,"Down "
Endif
If OAy#=90.0: Rem Exactly Right
Rem Set Object Rotation ZYX ObjNum
Rem XATF = WrapValue(Atanfull(LZ#-RZ#, LeftY#-RightY#)-90)
ZATF = ABS(Atanfull(FX#-BX#, FrontY#-BackY#)-90)
Rem Xrotate Object ObjNum, WrapValue(ZATF)
Zrotate Object ObjNum,WrapValue(ZATF)
rem Text 420,10,"Right "
Rem Set Object Rotation XYZ ObjNum
Endif
If OAy#=270.0: Rem Exactly Left
XATF = WrapValue(Atanfull(FZ#-BZ#, FrontY#-BackY#)-270)
ZATF = WrapValue(Atanfull(LX#-RX#, LeftY#-RightY#)-90)
Zrotate Object ObjNum,WrapValue(ZATF)
rem Text 420,10,"Left "
Endif
remstart
Rem Old version
If OAy# <= 90 Or OAy# >= 270: Rem Pointing North
XATF = WrapValue(Atanfull(Back#-Front#,FZ#-BZ#))
Xrotate Object ObjNum, XATF
Else: Rem Pointing South
Rem XATF = WrapValue(Atanfull(Front#-Back#,BZ#-FZ#))
Rem Xrotate Object ObjNum, XATF
Endif
If OAy# >= 180: Rem Pointing West
Rem ZATF = WrapValue(Atanfull(BX#-FX#,Back#-Front#)-180)
Rem ZATF = Wrapvalue(Atanfull(Left#-Right#,FX#-BX#)-180)
Rem Zrotate Object ObjNum, ZATF
Else: Rem Pointing East
ZATF = WrapValue(Atanfull(FX#-BX#,Front#-Back#)-90)
Zrotate Object ObjNum,ZATF
Rem ZATF = Wrapvalue(Atanfull(Right#-Left#,BX#-FX#)-180)
rem Zrotate Object ObjNum, Wrapvalue(Atanfull(Left#-Right#,FX#-BX#))
Endif
rem Set Object Rotation XYZ ObjNum
remend
rem Text 10,10,"Front: "+Str$(FrontY#)+" Back: "+Str$(BackY#)+" F-B: "+Str$(FrontY# - BackY#)+" X ATF: "+Str$(XATF)
rem Text 10,26,"Left: "+Str$(LeftY#)+" Right: "+Str$(RightY#)+" L-R: "+Str$(LeftY# - RightY#)+" Z ATF: "+Str$(ZATF)
rem Text 10,10,"X ATF: "+Str$(XATF)
rem Text 10,26,"Z ATF: "+Str$(ZATF)
Position Object ObjNum,Ox#,Oy#+(ObjHig#/2.0),Oz#
Rem Front# Rear# Left# Right# Back#-Front# Front#-Back# FX#-BX# BX#-FX#
endfunction
As you can see from the car you are following, the four small markers correctly mirror the slope of the matrix at the front, back, left and right of the car as it goes around the track.
What I can't achieve is applying the angles you can calculate from these four markers to the car itself. Damn Euler rotations!
I've started a new thread to see if we can achieve a solution to this problem by putting all our heads together. If we can figure it out, it would be very useful for future challenges - especially when media-less projects do rely a lot more on the good old matrix.
TDK