Challenge:
Winner?:
No
Code Snippet:
` By: Patrick Lewis `18/Feb/2005 Hide Mouse Type Coordinates x as Float y as Float z as Float Endtype Global Object As Coordinates Global Target as Coordinates Global AI as Coordinates Global Camera as Coordinates Type Attributes Energy as Integer Armor as Integer Health as Integer Damage as Integer Range as Integer Ablative as Integer Shield as Integer Pos as Coordinates Weapon as String Weap_ID as Integer Speed as Float Object_Num as Integer Velocity as Float EndType Global Robot as Attributes Global Robot_Rating as Integer Dim Enemy(20) as Attributes Dim Enemy_Rating(20) as Integer Type Weapons Weapon_ID as Integer Weapon_Name as String Weapon_Damage as Integer Weapon_Range as Integer EndType Global Robot_Weapon as Weapons Dim Enemy_Weapon(20) as Weapons Type Bullets Bullet_Damage as Integer Bullet_Range as Integer Bullet_Area as Integer Bullet_Speed as Integer Bullet_Object as Integer Bullet_Target as Coordinates EndType Global Robot_Bullet as Bullets Dim Enemy_Bullet(20) as Bullets Sync On Sync Rate 60 Autocam Off Do Global Level as Float Global Score as Integer Global EnemyCount as Integer Level =1 Score = 0 NextLevel=100 EnemyCount=0 Robot_Rating=Make_Robot(1) Make_Crosshair() Make_Road() Make_X_Road() Return_Object(1) Position Camera 0,Object.y+100,50 Point Camera 0,0,51 Position Object 501,0,-8,60 Position Object 502,0,-8,60+174 Do Move_Roads() Move_Robot() Start_Enemy() If Move_Enemy() Then Exit Move_Crosshair() If Mouseclick()=1 Return_Target(3) Make_R_Bullet(Target.x,0,Target.z) Endif Move_R_Bullet() Ink RGB(171,180,254),0 Set Cursor 0,0 Print "Score: ";Score If Score>NextLevel Level=Level+1 NextLevel=NextLevel+(Level*100) Endif Print "Level: ";Level Ink Rgb(255-Robot.Health*2,50,55+Robot.Health*2),0 Print "Health: "; Robot.Health Sync Loop Center Text Object Screen X(1),Object Screen Y(1)-20,"You died! Press the anykey to play again" Sync Sleep 1000 Clear Entry Buffer Wait Key For i = 1001 to 1020 If Object Exist (i) Then Delete Object I Next i Loop Function Make_Robot(ObjectID) If Object Exist (ObjectID) Then Delete Object ObjectID Make Object Cube ObjectID,5 If Object Exist(2) Then Delete Object 2 If Mesh Exist(2) Then Delete Mesh 2 Make Object Sphere 2,5 Make Mesh From Object 2,2 Add Limb ObjectID,1,2 Offset Limb ObjectID,1,0,4,0 Delete Mesh 2 Delete Object 2 Make Object Cylinder 2,4 Scale Object 2,30,100,30 Offset Limb 2,0,0,2,0 Roll Object Right 2,100 Fix Object Pivot 2 Make Mesh From Object 2,2 Add Limb ObjectID,2,2 Add Limb ObjectID,3,2 Offset Limb ObjectID,2,0,1,-3 Offset Limb ObjectID,3,0,1,3 Color Limb ObjectID,2,RGB(128,128,128) Color Limb ObjectID,3,RGB(128,128,128) Delete Mesh 2 Delete Object 2 Make Object Cylinder 2,10 Scale Object 2,100,20,20 Pitch Object Down 2,90 Fix Object Pivot 2 Make Mesh From Object 2,2 Add Limb ObjectID,4,2 Add Limb ObjectID,5,2 Offset Limb ObjectID,4,0,-3,-3 Offset Limb ObjectID,5,0,-3,3 Delete Object 2 Delete Mesh 2 Make Object Sphere 2,10 Scale Object 2,100,20,1 Make Mesh from Object 2,2 Add Limb ObjectID,6,2 Add Limb ObjectID,7,2 Offset Limb ObjectID,6,0,-3,-3.9 Offset Limb ObjectID,7,0,-3,3.9 Delete Object 2 Delete Mesh 2 Set Object Cull ObjectID,0 Turn Object Left ObjectID,90 Fix Object Pivot ObjectID If Bitmap Exist(1) Then Delete Bitmap 1 Create Bitmap 1,100,20 Set Current Bitmap 1 Ink RGB(210,210,210),0 Box 0,0,99,19 Ink Rgb(40,40,40),0 For i = 0 to 90 step 10 Box i,0,i+1,19 Next i Get Image 1,0,0,99,19 Delete Bitmap 1 Texture Limb 1,4,1 Texture Limb 1,5,1 Set Object Collision Off 1 Robot.Health=100 Robot.Object_Num=1 EndFunction R Function Move_Robot() YRotate Object 1,0 Move Object Left 1,((LeftKey()*(Object Screen X(1)>20))-(RightKey()*(Object Screen X(1)<(Screen Width()-20))))*.8 Move Object 1,(Upkey()*(Object Screen Y(1)>Screen Height()*.1)-DownKey()*(Object Screen Y(1)<Screen Height()-40))*.8 YRotate Object 1,RightKey()*45-LeftKey()*45 Scroll Limb Texture 1,4,-.005,0 Scroll Limb Texture 1,5,-.005,0 Minimap(1,RGB(119,119,255)) EndFunction Function Make_AI() If Object Exist (2) then Delete Object 2 Make Object Sphere 2,1,10,10 Set Object Collision Off 2 Hide Object 2 Endfunction Function Make_R_Bullet(Tx#,Ty#,Tz#) If Object Exist(101) Then ExitFunction Make Object Sphere 101,2 Robot_Bullet.Bullet_Damage=rnd(4)+1 Robot_Bullet.Bullet_Range=50 Robot_Bullet.Bullet_Area=5 Robot_Bullet.Bullet_Speed=6 Robot_Bullet.Bullet_Object=101 Robot_Bullet.Bullet_Target.x=Tx# Robot_Bullet.Bullet_Target.y=Ty# Robot_Bullet.Bullet_Target.z=Tz# Return_Object(1) Position Object 101,Object.x,Object.y,Object.z Point Object 101,Tx#,Ty#,Tz# EndFunction Function Move_R_Bullet() If Object Exist(101)=0 then ExitFunction Speed=Robot_Bullet.Bullet_Speed If Speed=0 then Speed=1 For i = 1 to Speed If Robot_Bullet.Bullet_Speed>0 Then Move Object 101,1 Robot_Bullet.Bullet_Range=Robot_Bullet.Bullet_Range-1 If Robot_Bullet.Bullet_Range=0 Robot_Bullet.Bullet_Speed=0 scale=Robot_Bullet.Bullet_Area/Object Size(101)*100 Robot_Bullet.Bullet_Damage=Robot_Bullet.Bullet_Damage*3 Scale Object 101,scale,scale,scale Color Object 101,Rgb(255,0,0) Ghost Object On 101 Endif HitEnemy=Object Collision(101,0) If HitEnemy>1000 and HitEnemy<1021 Enemy(HitEnemy-1000).Health=Enemy(HitEnemy-1000).Health-Robot_Bullet.Bullet_Damage If Enemy(HitEnemy-1000).Health<1 Then Delete Object HitEnemy:EnemyCount=EnemyCount-1 Delete Object 101 Score=Score+Robot_Bullet.Bullet_Damage ExitFunction Endif If Robot_Bullet.Bullet_Range<-10 Delete Object 101 ExitFunction Endif Next i EndFunction Function Make_Crosshair() If Object Exist (3) Then Delete Object 3 Make Object Cylinder 3,10 If Mesh Exist(2)Then Delete Mesh 2 Make Mesh From Object 2,3 Add Limb 3,1,2 Add Limb 3,2,2 Delete Mesh 2 Rotate Limb 3,1,0,0,90 Rotate Limb 3,2,90,0,0 Scale Limb 3,0,10,100,10 Scale Limb 3,1,10,100,10 Scale Limb 3,2,10,100,10 Pitch Object Down 3,90 Fix Object Pivot 3 Color Object 3,Rgb(255,0,0) Position Object 3,0,5,0 Set Object Cull 3,0 Set Object Collision Off 3 Ghost Object On 3 EndFunction Function Move_Crosshair() mx=MouseX():my=MouseY() cntr=0 Do cx=Object Screen X(3): cy=Object Screen Y(3) If cx=mx and cy=my then Exit Move Object Left 3,((cx>mx)-(cx<mx))*.2 Move Object 3,((cy>my)-(cy<my))*.2 cntr=cntr+1 If cntr>40 Then Exit Loop Roll Object Left 3,1 Fix Object Pivot 3 EndFunction Function Make_Enemy_Robot(ObjectID,ERID) Make Object Cube ObjectID,5 If Object Exist(2) Then Delete Object 2 If Mesh Exist(2) Then Delete Mesh 2 Make Object Sphere 2,5 Make Mesh From Object 2,2 Add Limb ObjectID,1,2 Offset Limb ObjectID,1,0,4,0 Delete Mesh 2 Delete Object 2 Make Object Cylinder 2,4 Scale Object 2,30,100,30 Offset Limb 2,0,0,2,0 Roll Object Right 2,100 Fix Object Pivot 2 Make Mesh From Object 2,2 Add Limb ObjectID,2,2 Add Limb ObjectID,3,2 Offset Limb ObjectID,2,0,1,-3 Offset Limb ObjectID,3,0,1,3 Delete Mesh 2 Delete Object 2 Make Object Cylinder 2,10 Scale Object 2,100,20,20 Pitch Object Down 2,90 Fix Object Pivot 2 Make Mesh From Object 2,2 Add Limb ObjectID,4,2 Add Limb ObjectID,5,2 Offset Limb ObjectID,4,0,-3,-3 Offset Limb ObjectID,5,0,-3,3 Delete Object 2 Delete Mesh 2 Make Object Sphere 2,10 Scale Object 2,100,20,1 Make Mesh from Object 2,2 Add Limb ObjectID,6,2 Add Limb ObjectID,7,2 Offset Limb ObjectID,6,0,-3,-3.9 Offset Limb ObjectID,7,0,-3,3.9 Delete Object 2 Delete Mesh 2 Set Object Cull ObjectID,0 Turn Object Left ObjectID,90 Fix Object Pivot ObjectID Color Object ObjectID,RGB(128,0,0) Color Limb ObjectID,2,RGB(128,128,128) Color Limb ObjectID,3,RGB(128,128,128) Texture Limb 1,4,1 Texture Limb 1,5,1 Set Object Collision Off 1 Enemy(ERID).Health=10+Rnd(Level*2) Enemy(ERID).Object_Num=ObjectID EndFunction R Function Start_Enemy() If Rnd(800)>Level+((Level-EnemyCount)*3) Then ExitFunction For i = 1001 to 1020 If Object Exist(i)=0 Make_Enemy_Robot(i,i-1000) EnemyCount=EnemyCount+1 Position Object i,((rnd(400)-200)+(rnd(400)-200))/2,0,125+Rnd(200) Turn Object Right i,180 Exit Endif Next EndFunction Function Move_Enemy() Make_AI() Dead=0 Set Object Collision On 1 For i = 1 to 20 If Object Exist(1000+i) Return_Object(1000+i) Return_Target(1) Position Object 2,Object.x,Object.y,Object.z Set Object To Object Orientation 2,1000+i Move Object 2,10 Point Object 2,Target.x,Object.y,Target.z Move Object 2,Rnd(3) Return_AI() Point Object 1000+i,AI.x,Object.y,AI.z Move Object 1000+i,.75 Minimap(1000+i,RGB(255,0,0)) If Object Collision (1000+i,1) Dead=1 Set Object Collision Off 1 ExitFunction Dead Endif Endif Enemy_Shoot(i) If Move_E_Bullet(i) Then ExitFunction 1 Next i Set Object Collision Off 1 EndFunction Dead Function Enemy_Shoot(ERID) If Object Exist(1000+ERID)=0 Then ExitFunction If rnd(2000)>Level Return_Object(1000+ERID):Return_Target(1) Dist#=(Object.x-Target.x)^2+(Object.z-Target.z)^2 If Dist#<55^2 aimx#=rnd(20-(level/6))-(10-(level/3))+Target.x aimz#=rnd(20-(level/6))-(10-(level/3))+Target.z Make_E_Bullet(ERID,aimx#,target.y,aimz#) Endif Endif EndFunction Function Make_E_Bullet(ERID,Tx#,Ty#,Tz#) If Object Exist(2000+ERID) Then ExitFunction If Object Exist(1000+ERID)=0 Then ExitFunction Make Object Sphere 2000+ERID,2 Enemy_Bullet(ERID).Bullet_Damage=rnd(Level)+1 Enemy_Bullet(ERID).Bullet_Range=50 Enemy_Bullet(ERID).Bullet_Area=5 Enemy_Bullet(ERID).Bullet_Speed=3 Enemy_Bullet(ERID).Bullet_Object=2000+ERID Enemy_Bullet(ERID).Bullet_Target.x=Tx# Enemy_Bullet(ERID).Bullet_Target.y=Ty# Enemy_Bullet(ERID).Bullet_Target.z=Tz# Return_Object(1000+ERID) Position Object 2000+ERID,Object.x,Object.y,Object.z Point Object 2000+ERID,Tx#,Ty#,Tz# EndFunction Function Move_E_Bullet(ERID) Dead=0 If Object Exist(2000+ERID)=0 then ExitFunction Dead Speed=Enemy_Bullet(ERID).Bullet_Speed If Speed=0 then Speed=1 For i = 1 to Speed If Enemy_Bullet(ERID).Bullet_Speed>0 Then Move Object 2000+ERID,1 Enemy_Bullet(ERID).Bullet_Range=Enemy_Bullet(ERID).Bullet_Range-1 If Enemy_Bullet(ERID).Bullet_Range=0 Enemy_Bullet(ERID).Bullet_Speed=0 scale=Enemy_Bullet(ERID).Bullet_Area/Object Size(2000+ERID)*100 Enemy_Bullet(ERID).Bullet_Damage=Enemy_Bullet(ERID).Bullet_Damage*3 Scale Object 2000+ERID,scale,scale,scale Color Object 2000+ERID,Rgb(255,0,0) Ghost Object On 2000+ERID Endif HitEnemy=Object Collision(2000+ERID,1) If HitEnemy Robot.Health=Robot.Health-Enemy_Bullet(ERID).Bullet_Damage If Robot.Health<1 Then Dead=1 Delete Object 2000+ERID ExitFunction Dead Endif If Enemy_Bullet(ERID).Bullet_Range<-10 Delete Object 2000+ERID ExitFunction Dead Endif Next i EndFunction Dead Function Make_Road() If Object Exist(501) Then Delete Object 501 If Bitmap Exist(1) Then Delete Bitmap 1 Create Bitmap 1,300,300 Set Current Bitmap 1 Ink RGB(128,128,128),0 Box 50,0,249,299 Ink RGB(75,75,75),0 For i = 1 to 300 Dot rnd(200)+50,rnd(299) Next i Ink RGB(198,198,0),0 For i = 0 to 250 step 50 Box 148,i,152,i+30 Next i Get Image 501,0,0,299,299 Set Current Bitmap 0 Delete Bitmap 1 Make Object Plain 501,175,175 Texture Object 501,501 Pitch Object Down 501,90 EndFunction Function Make_X_Road() If Object Exist(502) Then Delete Object 502 If Bitmap Exist(1) Then Delete Bitmap 1 Create Bitmap 1,300,300 Set Current Bitmap 1 Ink RGB(128,128,128),0 Box 50,0,249,299 Box 0,50,299,249 Ink RGB(75,75,75),0 For i = 1 to 300 Dot rnd(200)+50,rnd(299) Next i Ink RGB(198,198,0),0 For i = 0 to 250 step 50 Box 148,i,152,i+30 Box i,148,i+30,152 Next i Get Image 502,0,0,299,299 Set Current Bitmap 0 Delete Bitmap 1 Make Object Plain 502,175,175 Texture Object 502,502 Pitch Object Down 502,90 EndFunction Function Move_Roads() Move Object Up 501,.65 Move Object Up 502,.65 Return_Object(501) If Object.z<60-174 Then Position Object 501,0,-8,60+174 Return_Object(502) If Object.z<60-174 Then Position Object 502,0,-8,60+174 EndFunction Function Minimap(ObjectID,Color) Return_Object(ObjectID) Ink Color,0 Box (Object.x/5)+600,50-(Object.z/5),(Object.x/5)+602,52-(Object.z/5) EndFunction Function Return_Target(TargetID) Target.x=Object Position X(TargetID):Target.y=Object Position Y(TargetID):Target.z=Object Position Z(TargetID) EndFunction Function Return_Object(ObjectID) Object.x=Object Position X(ObjectID):Object.y=Object Position Y(ObjectID):Object.z=Object Position Z(ObjectID) EndFunction Function Return_AI() AI.x=Object Position X(2):AI.y=Object Position Y(2):AI.z=Object Position Z(2) EndFunction Function Return_Camera() Camera.x=Camera Position X():Camera.y=Camera Position Y():Camera.z=Camera Position Z() EndFunction