home *** CD-ROM | disk | FTP | other *** search
- Rem Project: RoadTerrain
- Rem Created: 02/08/2002 17:53:00
-
- rem Init for best performance
- sync on : sync rate 60 : backdrop off : hide mouse
- if check display mode(1024,768,32)=1 then set display mode 1024,768,32
-
- rem Loading screen
- load bitmap "media\gfx\backdrop.jpg",1
- copy bitmap 1,0,0,640,480,0,0,0,screen width(),screen height()
- sync : delete bitmap 1
-
- rem Setup strapline
- gosub _create_strap
-
- rem Setup terrain
- load image "media\world\rock.bmp",1
- load bitmap "media\world\land.bmp",1
- for m=0 to 7
- make matrix 1+m,512,512,32,32 : position matrix 1+m,0,-2,512*m
- prepare matrix texture 1+m,1,33,33 : set matrix texture 1+m,2,1
- next m
- set current bitmap 1
- lock pixels
- tc=1
- for z=0 to 31
- for x=0 to 31
- col=point(x,z)
- h#=rgbr(col)/4.0
- for m=0 to 7
- set matrix height 1+m,x,z,h#
- set matrix tile 1+m,31-x,z,tc
- next m
- inc tc
- next x
- inc tc
- next z
- unlock pixels
- delete bitmap 1
- for m=0 to 7 : update matrix 1+m : next m
- set current bitmap 0
-
- rem Create high quality road surface
- load image "media\world\road.jpg",11
- for r=0 to 7
- make object plain 11+r,128,512
- position object 11+r,256+10,0.025,512*r
- texture object 11+r,11
- xrotate object 11+r,90
- set object texture 11+r,1,1
- scale object texture 11+r,2,8
- next r
-
- rem Load sky and set it up
- set camera range 2.5,15000
- load object "media\sky\os.x",1
- position object 1,256,30,0
- set object texture 1,2,1
- set object light 1,0
- set object cull 1,0
- yrotate object 1,270
- scale object 1,250,250,250
-
- rem Setup mountain range
- set image colorkey 255,0,255
- load image "media\sky\mountains.bmp",4
- make object plain 4,1024*20.5,128*20.5
- set object texture 4,2,1
- set object light 4,0
- set object 4,1,1,0
- texture object 4,4
-
- rem Two bikes
- for c=0 to 1
-
- rem Load bike
- obj=5+(c*100)
- if c=0 then load object "media\bike\bike.x",obj
- if c=1 then load object "media\bike\bike2.x",obj
- position object obj,256,2,500
- scale object obj,1000,1000,1000
- rotate object obj,0,180,0
- fix object pivot obj
- rotate object obj,0,0,0
- set object light obj,0
-
- rem Create shadow for bike
- make object plain obj+2,256,256
- load image "media\bike\shadow.bmp",obj+2
- scale object obj+2,15,15,15
- texture object obj+2,obj+2
- xrotate object obj+2,90
- ghost object on obj+2,1
- set object light obj+2,0
-
- next c
-
- rem Create ten trees for road
- set image colorkey 0,0,0
- load image "media\world\tree.bmp",501
- for tr=1 to 10
- make object plain 500+tr,128,128
- r=rnd(1)
- if r=0 then position object 500+tr,160-rnd(400),64,51*(100+rnd(150))
- if r=1 then position object 500+tr,370+rnd(400),64,51*(100+rnd(150))
- texture object 500+tr,501
- set object 500+tr,1,1,1
- next tr
-
- rem Setup camera, light
- set point light 0,256,300,256
- set camera fov 120
- rotate camera 0,0,0
- set ambient light 50
-
- rem Load bike sound
- load 3dsound "media\sounds\car.wav",1 : position sound 1,30000,30000,30000 : loop sound 1
- load music "media\sounds\music.mp3",1 : loop music 1
-
- rem Init bike variables
- carx#=240
- ss#=100
-
- rem Main loop
- do
-
- rem bike control
- carx#=wrapvalue(carx#+1.0)
-
- rem Move on road
- roadz#=roadz#+15.0
- side#=wrapvalue(side#+0.3)
- if roadz#>=512.0
- rem move camera back
- roadz#=roadz#-512.0
- rem trees as relative
- for tr=1 to 10
- position object 500+tr,object position x(500+tr),64,object position z(500+tr)-512
- next tr
- endif
- position camera 256+(sin(side#)*10),12+(cos(side#)*5),roadz#+(sin(side#)*20)
- xrotate camera 10
-
- rem Position main light
- position light 0,200,800,roadz#
-
- rem Make third matrix rise up over time
- position matrix 8,0,-2+(((512-roadz#)/10.0)*-1),512*7
-
- rem Keep sky and mountains in place
- position object 1,256,15,roadz#
- position object 4,256,400,roadz#+(4684)
- yrotate object 1,wrapvalue(object angle y(1)-0.1)
-
- rem Keep bike in place
- for c=0 to 1
-
- rem Position bike and parts
- if c=0
- position object 5+(c*100),240+cos(carx#)*8,0,roadz#+35+(sin(ss#*15)*5)
- position object 7+(c*100),240+cos(carx#)*8,0.1,roadz#+35+(sin(ss#*15)*5)
- else
- position object 5+(c*100),270-cos(carx#)*8,0,roadz#+35+(cos(ss#*15)*5)
- position object 7+(c*100),270-cos(carx#)*8,0.1,roadz#+35+(cos(ss#*15)*5)
- endif
- zrotate object 5+(c*100),cos(carx#)*4
-
- rem Rotate bike wheels
- heada#=wrapvalue(heada#+2)
- if limb exist(5+(c*100),1)=1
- t=7 : rotate limb 5+(c*100),t,0,wrapvalue(cos(heada#)*20),0
- t=3 : rotate limb 5+(c*100),t,wrapvalue(limb angle x(5+(c*100),t)-35),0,0
- t=5 : rotate limb 5+(c*100),t,wrapvalue(limb angle x(5+(c*100),t)-35),0,0
- endif
-
- next c
-
- rem Move trees and wrap them
- for tr=1 to 10
- rem move tree
- position object 500+tr,object position x(500+tr),64,object position z(500+tr)-15
- rem wrap tree
- if object position z(500+tr)<-512
- r=rnd(1)
- if r=0 then position object 500+tr,160-rnd(400),64,51*(100+rnd(150))
- if r=1 then position object 500+tr,370+rnd(400),64,51*(100+rnd(150))
- endif
- next tr
-
- rem Move mountains closer and closer
- if ss#<150 then ss#=ss#+0.05
- scale object 4,ss#,ss#,ss#
-
- rem Set sound position for bike
- position listener 256,5+(cos(side#)*5),roadz#+(sin(side#)*35)
- position sound 1,carx#,0,roadz#+35
- scale listener 0.25
-
- rem Move strap line
- gosub _control_strap
-
- rem Update screen
- sync
-
- rem Endloop
- loop
-
- rem Demo Subroutines
- _create_strap:
- load image "media\gfx\prompt.bmp",2
- load image "media\gfx\strapblank.bmp",3
- strapx1=0 : sprite 1,strapx1,480-63,2
- strapx2=1024 : sprite 2,strapx2,480-63,2
- set sprite alpha 1,196 : set sprite alpha 2,196
- return
-
- _control_strap:
- dec strapx1 : if strapx1<=-1024 then strapx1=strapx2+1023
- dec strapx2 : if strapx2<=-1023 then strapx2=strapx1+1024
- sprite 1,strapx1,screen height()-63,2
- sprite 2,strapx2,screen height()-63,3
- return
-
-