Optimized version (91 multiple commands in 4 lines). There is no media so just paste it in to DBPro.
`*******************************************************************************
`* Gem Hunter 2 - Cliffhanger *
`* Created: 05/05/2003 *
`* By DMiTR0S [email protected] *
`* Controls: Move-Arrowkeys; Jump-Space key *
`*******************************************************************************
Dim World#(66, 10) : Hide Mouse : Box 1, 1, 20, 100 : Box 20, 1, 40, 100, RGB(0,0,255), RGB(0,0,255), RGB(0,0,255), RGB(0,0,255) : Box 40, 1, 60, 100, RGB(255,0,0), RGB(255,0,0), RGB(255,0,0), RGB(255,0,0) : Get Image 1, 1, 1, 60, 100 : For I=1 to 4096 : Dot I-(I/64)*64, I/64, RGB(RND(20),RND(20),138+RND(100)) : Next I : Get Image 2, 0, 0, 64, 64 : For I=1 To 66 : For D=1 To 10 : Read World#(I, D) : Next D : If World#(I, 7)=1.0 : Make Object Sphere I+100, 64.0, 2.0, 6.0 : Color Object I+100, Rgb(255, Rnd(255), Rnd(255)) : Else : Make Object Box I+100, World#(I, 4), World#(I, 5), World#(I, 6) : Texture Object I+100, 2 : EndIf : Rotate Object I+100, World#(I, 8), World#(I, 9), World#(I, 10) : Position Object I+100, World#(I, 1), World#(I, 2)+10000, World#(I, 3) : Next I : Make Object Cube 60000, 1
For I=1 To 3 : Make Object Sphere I+0*Make Vector3(I)*Make Vector3(I+3)*Make Matrix4(99+I), 60, 50, 50 : Next I : Texture Object 1, 1 : ZRotate Object 1, 90 : Fix Object Pivot 1 : Position Object 1, 0, 10300, 0 : Position Camera 0, 10300, 0 : StartTime=Timer() : Sync Rate 30 : Sync On : Do : Move Object 1, (20.0)*UpKey()-(20.0)*DownKey() : Scroll Object Texture 1, 1+(0.95)*UpKey()-(0.95)*DownKey(), 1 : YRotate Object 1, WrapValue(Object Angle Y(1)+(5.0*RightKey())-(5.0*LeftKey())) : If SpaceKey() And Grav#=0.0 And Energy=0 : Energy=75 : Grav#=50.0 : EndIf : Collision=Object Collision(1, 0) : If Collision>136 : Inc Gems : Delete Object Collision : EndIf : If Gems=30
Center Text Screen Width()/2, Screen Height()/2, "Congratulations!!! Game complete!!!" : Sync : Wait Key : End : EndIf : Position Object 1, Object Position X(1), Object Position Y(1)-20.0+Grav#, Object Position Z(1) : Grav#=(((Grav#+Abs(Grav#))/2.0-2.0)+Abs((Grav#+Abs(Grav#))/2.0-2.0))/2.0 : Energy=(((Energy+Abs(Energy))/2-1)+Abs((Energy+Abs(Energy))/2-1))/2 : CheckCollision(1, 101, 136) : Box 10, 100, 160-Energy*2, 125, RGB(Int(3.4*Energy),255-Int(3.4*Energy),0), RGB(Int(3.4*Energy),255-Int(3.4*Energy),0), RGB(Int(3.4*Energy),255-Int(3.4*Energy),0), RGB(Int(3.4*Energy),255-Int(3.4*Energy),0) : Set Camera To Follow Object Position X(1), Object Position Y(1), Object Position Z(1), Object Angle Y(1), 220.0, Object Position Y(1)+150.0, 10, 1 : Position Object 3, Camera Position X(), Camera Position Y(), Camera Position Z() : CheckCollision(3, 101, 136) : Position Camera Object Position X(3), Object Position Y(3), Object Position Z(3) : Point Camera Object Position X(1), Object Position Y(1)+100.0, Object Position Z(1) : Position Light 0, Object Position X(3), Object Position Y(3), Object Position Z(3) : Point Light 0, Object Position X(1), Object Position Y(1), Object Position Z(1) : YRotate Object 109, Object Angle Y(109)+1.0 : Text 10, 10, "Gem Hunter 2 - Cliffhanger by DMiTR0S"+Chr$(10)+"FPS: "+Str$(Screen FPS())+Chr$(10)+"Time: "+Str$(((Timer()-StartTime)/1000)/3600)+":"+Str$(((Timer()-StartTime)/1000-(((Timer()-StartTime)/1000)/3600)*3600)/60)+":"+Str$(((Timer()-StartTime)/1000)-(((Timer()-StartTime)/1000-(((Timer()-StartTime)/1000)/3600)*3600)/60)*60-(((Timer()-StartTime)/1000)/3600)*3600)+Chr$(10)+"Gems: "+Str$(Gems)+Chr$(10)+"Jump Energy:" : Sync : Loop
Function CheckCollision(Object, StartObject, EndObject) : For I=StartObject To EndObject : If Object Collision(1, I) : Set Vector3 1, Object Position X(Object)-Object Position X(I), Object Position Y(Object)-Object Position Y(I), Object Position Z(Object)-Object Position Z(I) : Set Vector3 3, -Sin(Object Angle Z(I))*-Sin(Object Angle X(I))+Cos(Object Angle Z(I))*Sin(Object Angle Y(I))*Cos(Object Angle X(I)), Cos(Object Angle Z(I))*-Sin(Object Angle X(I))+Sin(Object Angle Z(I))*Sin(Object Angle Y(I))*Cos(Object Angle X(I)), Cos(Object Angle Y(I))*Cos(Object Angle X(I)) : Set Vector3 4, -Sin(Object Angle Z(I))*Cos(Object Angle X(I))+Cos(Object Angle Z(I))*Sin(Object Angle Y(I))*Sin(Object Angle X(I)), Cos(Object Angle Z(I))*Cos(Object Angle X(I))+Sin(Object Angle Z(I))*Sin(Object Angle Y(I))*Sin(Object Angle X(I)), Cos(Object Angle Y(I))*Sin(Object Angle X(I)) : Build LookAt LHMatrix4 101, 2, 3, 4 : Transform Coords Vector3 1, 1, 101 : Position Object 2, Object Position X(60000)+X Vector3(1), Object Position Y(60000)+Y Vector3(1), Object Position Z(60000)+Z Vector3(1) : Position Object 2, Object Position X(60000)+X Vector3(1), Object Position Y(60000)+Y Vector3(1), Object Position Z(60000)+Z Vector3(1) : Make Object Collision Box 60000, Object Position X(60000)-Object Size X(I)/2.0, Object Position Y(60000)-Object Size Y(I)/2.0, Object Position Z(60000)-Object Size Z(I)/2.0, Object Position X(60000)+Object Size X(I)/2.0, Object Position Y(60000)+Object Size Y(I)/2.0, Object Position Z(60000)+Object Size Z(I)/2.0, 0 : r=Object Collision(2, 60000) : Position Object 2, Object Position X(2)-Get Object Collision X(), Object Position Y(2)-Get Object Collision Y(), Object Position Z(2)-Get Object Collision Z() : Set Vector3 1+0*Inverse Matrix4(101, 101), Object Position X(2)-Object Position X(60000), Object Position Y(2)-Object Position Z(60000), Object Position Z(2)-Object Position Z(60000) : Transform Coords Vector3 1, 1, 101 : Position Object Object, Object Position X(I)+X Vector3(1), Object Position Y(I)+Y Vector3(1), Object Position Z(I)+Z Vector3(1) : EndIf : Next I : EndFunction : Data 0, 32, 0, 2401, 32, 2400, 3, 0, 0, 0, -1304, 1248, 0, 232, 2400, 2800, 3, 0, 0, 0, 1284, 1248, 20, 232, 2400, 2800, 3, 0, 0, 0, 0, 1248, 1284, 232, 2400, 2400, 3, 0, 90, 0, 0, 1248, -1264, 232, 2400, 2400, 3, 0, 90, 0, 576, 992, 842, 233, 2625, 3009, 3, 31, 325, 313, -154, 992, 1142, 233, 2625, 3009, 3, 40, 286, 326, -320, 32, -416, 255, 255, 255, 3, 0, 350, 40, 320, 192, -832, 135, 285, 445, 3, 0, 0, 0, 608, 64, -192, 255, 255, 255, 3, 0, 0, 0, 352, 224, 96, 255, 255, 255, 3, 0, 315, 0, 160, 416, 480, 255, 127, 255, 3, 6, 355, 342, 544, 544, 288, 255, 127, 255, 3, 17, 359, 338, 992, 444, -320, 255, 27, 255, 3, -12, 172, 360, 960, 768, 128, 255, 127, 255, 3, 13, 163, 97, 768, 1024, 512, 255, 127, 255, 3, 5, 163, 6, 304, 896, 854, 255, 127, 255, 3, 341, 271, 375, -28, 672, 1006, 255, 255, 255, 3, 0, 77, 0, -484, 926, 1024, 255, 31, 255, 3, 374, 319, 341, -544, 544, 992, 255, 255, 255, 3, 0, 315, 0, -1056, 992, 1024, 255, 127, 255, 3, 0, 0, 0, -1120, 992, 96, 319, 31, 1087, 3, 351, 17, 5, -1120, 1120, -224, 160, 32, 288, 3, 359, 338, 16, -1120, 1216, -608, 160, 32, 288, 3, 6, 20, 16, -1152, 1184, -1056, 448, 64, 256, 3, 0, 35, 0, -448, 1184, -1120, 832, 33, 128, 3, 339, 7, 352, 128, 928, -1120, 192, 96, 544, 3, 0, 32, 0, 608, 1024, -1120, 192, 32, 544, 3, 0, 255, 0, 1056, 1064, -1120, 609, 80, 192, 3, 372, 134, 12, 1152, 1184, -640, 352, 64, 448, 3, 357, 16, 335, 1152, 1280, -288, 128, 128, 128, 3, 0, 315, 0, 1120, 1376, -96, 128, 128, 128, 3, 0, 0, 0, 1184, 1568, -384, 128, 32, 321, 3, 0, 340, 0, 1184, 1696, -32, 128, 32, 321, 3, 355, 10, 350, 1152, 1696, 352, 352, 96, 352, 3, 359, 74, 360, 1152, 1792, 1024, 800, 32, 704, 3, 0, 331, 0, 540, 224, -256, 64, 64, 64, 1, 0, 0, 0, 340, 384, 72, 64, 64, 64, 1, 0, 0, 0, 148, 544, 422, 64, 64, 64, 1, 0, 0, 0, 492, 684, 258, 64, 64, 64, 1, 0, 0, 0, 282, 1024, 808, 64, 64, 64, 1, 0, 0, 0, 748, 1132, 494, 64, 64, 64, 1, 0, 0, 0, 920, 950, 116, 64, 64, 64, 1, 0, 0, 0, 928, 502, -352, 64, 64, 64, 1, 0, 0, 0, -72, 836, 938, 64, 64, 64, 1, 0, 0, 0, -480, 998, 960, 64, 64, 64, 1, 0, 0, 0, -536, 714, 956, 64, 64, 64, 1, 0, 0, 0, -1092, 1090, 1024, 64, 64, 64, 1, 0, 0, 0, -1032, 1120, 480, 64, 64, 64, 1, 0, 0, 0, -1022, 1070, 196, 64, 64, 64, 1, 0, 0, 0, -1120, 1174, -252, 64, 64, 64, 1, 0, 0, 0, -1120, 1270, -576, 64, 64, 64, 1, 0, 0, 0, -1090, 1260, -1060, 64, 64, 64, 1, 0, 0, 0, -646, 1262, -1100, 64, 64, 64, 1, 0, 0, 0, 226, 1010, -958, 64, 64, 64, 1, 0, 0, 0, 320, 374, -832, 64, 64, 64, 1, 0, 0, 0, 726, 1080, -1108, 64, 64, 64, 1, 0, 0, 0, 1056, 1154, -1098, 64, 64, 64, 1, 0, 0, 0, 1086, 1282, -672, 64, 64, 64, 1, 0, 0, 0, 1132, 1386, -288, 64, 64, 64, 1, 0, 0, 0, 1112, 1484, -94, 64, 64, 64, 1, 0, 0, 0, 1122, 1632, -352, 64, 64, 64, 1, 0, 0, 0, 1132, 1750, -84, 64, 64, 64, 1, 0, 0, 0, 1058, 1792, 330, 64, 64, 64, 1, 0, 0, 0, 998, 1846, 612, 64, 64, 64, 1, 0, 0, 0, 892, 1846, 792, 64, 64, 64, 1, 0, 0, 0
RemStart
Dim World#(66, 10)
Hide Mouse
Box 1, 1, 20, 100
Box 20, 1, 40, 100, RGB(0,0,255), RGB(0,0,255), RGB(0,0,255), RGB(0,0,255)
Box 40, 1, 60, 100, RGB(255,0,0), RGB(255,0,0), RGB(255,0,0), RGB(255,0,0)
Get Image 1, 1, 1, 60, 100
For I=1 to 4096
Dot I-(I/64)*64, I/64, RGB(RND(20),RND(20),138+RND(100))
Next I
Get Image 2, 0, 0, 64, 64
For I=1 To 66
For D=1 To 10
Read World#(I, D)
Next D
If World#(I, 7)=1.0
Make Object Sphere I+100, 64.0, 2.0, 6.0
Color Object I+100, Rgb(255, Rnd(255), Rnd(255))
Else
Make Object Box I+100, World#(I, 4), World#(I, 5), World#(I, 6)
Texture Object I+100, 2
EndIf
Rotate Object I+100, World#(I, 8), World#(I, 9), World#(I, 10)
Position Object I+100, World#(I, 1), World#(I, 2)+10000, World#(I, 3)
Next I
Make Object Cube 60000, 1
For I=1 To 3
Make Object Sphere I+0*Make Vector3(I)*Make Vector3(I+3)*Make Matrix4(99+I), 60, 50, 50
Next I
Texture Object 1, 1
ZRotate Object 1, 90
Fix Object Pivot 1
Position Object 1, 0, 10300, 0
Position Camera 0, 10300, 0
StartTime=Timer()
Sync Rate 30
Sync On
Do
Move Object 1, (20.0)*UpKey()-(20.0)*DownKey()
Scroll Object Texture 1, 1+(0.95)*UpKey()-(0.95)*DownKey(), 1
YRotate Object 1, WrapValue(Object Angle Y(1)+(5.0*RightKey())-(5.0*LeftKey()))
If SpaceKey() And Grav#=0.0 And Energy=0
Energy=75
Grav#=50.0
EndIf
Collision=Object Collision(1, 0)
If Collision>136
Inc Gems
Delete Object Collision
EndIf
If Gems=30
Center Text Screen Width()/2, Screen Height()/2, "Congratulations!!! Game complete!!!"
Sync
Wait Key
End
EndIf
Position Object 1, Object Position X(1), Object Position Y(1)-20.0+Grav#, Object Position Z(1)
Grav#=(((Grav#+Abs(Grav#))/2.0-2.0)+Abs((Grav#+Abs(Grav#))/2.0-2.0))/2.0
Energy=(((Energy+Abs(Energy))/2-1)+Abs((Energy+Abs(Energy))/2-1))/2
CheckCollision(1, 101, 136)
Box 10, 100, 160-Energy*2, 125, RGB(Int(3.4*Energy),255-Int(3.4*Energy),0), RGB(Int(3.4*Energy),255-Int(3.4*Energy),0), RGB(Int(3.4*Energy),255-Int(3.4*Energy),0), RGB(Int(3.4*Energy),255-Int(3.4*Energy),0)
Set Camera To Follow Object Position X(1), Object Position Y(1), Object Position Z(1), Object Angle Y(1), 220.0, Object Position Y(1)+150.0, 10, 1
Position Object 3, Camera Position X(), Camera Position Y(), Camera Position Z()
CheckCollision(3, 101, 136)
Position Camera Object Position X(3), Object Position Y(3), Object Position Z(3)
Point Camera Object Position X(1), Object Position Y(1)+100.0, Object Position Z(1)
Position Light 0, Object Position X(3), Object Position Y(3), Object Position Z(3)
Point Light 0, Object Position X(1), Object Position Y(1), Object Position Z(1)
YRotate Object 109, Object Angle Y(109)+1.0
Text 10, 10, "Gem Hunter 2 - Cliffhanger by DMiTR0S"+Chr$(10)+"FPS: "+Str$(Screen FPS())+Chr$(10)+"Time: "+Str$(((Timer()-StartTime)/1000)/3600)+":"+Str$(((Timer()-StartTime)/1000-(((Timer()-StartTime)/1000)/3600)*3600)/60)+":"+Str$(((Timer()-StartTime)/1000)-(((Timer()-StartTime)/1000-(((Timer()-StartTime)/1000)/3600)*3600)/60)*60-(((Timer()-StartTime)/1000)/3600)*3600)+Chr$(10)+"Gems: "+Str$(Gems)+Chr$(10)+"Jump Energy:"
Sync
Loop
Function CheckCollision(Object, StartObject, EndObject)
For I=StartObject To EndObject
If Object Collision(1, I)
Set Vector3 1, Object Position X(Object)-Object Position X(I), Object Position Y(Object)-Object Position Y(I), Object Position Z(Object)-Object Position Z(I)
Set Vector3 3, -Sin(Object Angle Z(I))*-Sin(Object Angle X(I))+Cos(Object Angle Z(I))*Sin(Object Angle Y(I))*Cos(Object Angle X(I)), Cos(Object Angle Z(I))*-Sin(Object Angle X(I))+Sin(Object Angle Z(I))*Sin(Object Angle Y(I))*Cos(Object Angle X(I)), Cos(Object Angle Y(I))*Cos(Object Angle X(I))
Set Vector3 4, -Sin(Object Angle Z(I))*Cos(Object Angle X(I))+Cos(Object Angle Z(I))*Sin(Object Angle Y(I))*Sin(Object Angle X(I)), Cos(Object Angle Z(I))*Cos(Object Angle X(I))+Sin(Object Angle Z(I))*Sin(Object Angle Y(I))*Sin(Object Angle X(I)), Cos(Object Angle Y(I))*Sin(Object Angle X(I))
Build LookAt LHMatrix4 101, 2, 3, 4
Transform Coords Vector3 1, 1, 101
Position Object 2, Object Position X(60000)+X Vector3(1), Object Position Y(60000)+Y Vector3(1), Object Position Z(60000)+Z Vector3(1)
Position Object 2, Object Position X(60000)+X Vector3(1), Object Position Y(60000)+Y Vector3(1), Object Position Z(60000)+Z Vector3(1)
Make Object Collision Box 60000, Object Position X(60000)-Object Size X(I)/2.0, Object Position Y(60000)-Object Size Y(I)/2.0, Object Position Z(60000)-Object Size Z(I)/2.0, Object Position X(60000)+Object Size X(I)/2.0, Object Position Y(60000)+Object Size Y(I)/2.0, Object Position Z(60000)+Object Size Z(I)/2.0, 0
r=Object Collision(2, 60000)
Position Object 2, Object Position X(2)-Get Object Collision X(), Object Position Y(2)-Get Object Collision Y(), Object Position Z(2)-Get Object Collision Z()
Set Vector3 1+0*Inverse Matrix4(101, 101), Object Position X(2)-Object Position X(60000), Object Position Y(2)-Object Position Z(60000), Object Position Z(2)-Object Position Z(60000)
Transform Coords Vector3 1, 1, 101
Position Object Object, Object Position X(I)+X Vector3(1), Object Position Y(I)+Y Vector3(1), Object Position Z(I)+Z Vector3(1)
EndIf
Next I
EndFunction
Data 0, 32, 0, 2401, 32, 2400, 3, 0, 0, 0, -1304, 1248, 0, 232, 2400, 2800, 3, 0, 0, 0, 1284, 1248, 20, 232, 2400, 2800, 3, 0, 0, 0, 0, 1248, 1284, 232, 2400, 2400, 3, 0, 90, 0, 0, 1248, -1264, 232, 2400, 2400, 3, 0, 90, 0, 576, 992, 842, 233, 2625, 3009, 3, 31, 325, 313, -154, 992, 1142, 233, 2625, 3009, 3, 40, 286, 326, -320, 32, -416, 255, 255, 255, 3, 0, 350, 40, 320, 192, -832, 135, 285, 445, 3, 0, 0, 0, 608, 64, -192, 255, 255, 255, 3, 0, 0, 0, 352, 224, 96, 255, 255, 255, 3, 0, 315, 0, 160, 416, 480, 255, 127, 255, 3, 6, 355, 342, 544, 544, 288, 255, 127, 255, 3, 17, 359, 338, 992, 444, -320, 255, 27, 255, 3, -12, 172, 360, 960, 768, 128, 255, 127, 255, 3, 13, 163, 97, 768, 1024, 512, 255, 127, 255, 3, 5, 163, 6, 304, 896, 854, 255, 127, 255, 3, 341, 271, 375, -28, 672, 1006, 255, 255, 255, 3, 0, 77, 0, -484, 926, 1024, 255, 31, 255, 3, 374, 319, 341, -544, 544, 992, 255, 255, 255, 3, 0, 315, 0, -1056, 992, 1024, 255, 127, 255, 3, 0, 0, 0, -1120, 992, 96, 319, 31, 1087, 3, 351, 17, 5, -1120, 1120, -224, 160, 32, 288, 3, 359, 338, 16, -1120, 1216, -608, 160, 32, 288, 3, 6, 20, 16, -1152, 1184, -1056, 448, 64, 256, 3, 0, 35, 0, -448, 1184, -1120, 832, 33, 128, 3, 339, 7, 352, 128, 928, -1120, 192, 96, 544, 3, 0, 32, 0, 608, 1024, -1120, 192, 32, 544, 3, 0, 255, 0, 1056, 1064, -1120, 609, 80, 192, 3, 372, 134, 12, 1152, 1184, -640, 352, 64, 448, 3, 357, 16, 335, 1152, 1280, -288, 128, 128, 128, 3, 0, 315, 0, 1120, 1376, -96, 128, 128, 128, 3, 0, 0, 0, 1184, 1568, -384, 128, 32, 321, 3, 0, 340, 0, 1184, 1696, -32, 128, 32, 321, 3, 355, 10, 350, 1152, 1696, 352, 352, 96, 352, 3, 359, 74, 360, 1152, 1792, 1024, 800, 32, 704, 3, 0, 331, 0, 540, 224, -256, 64, 64, 64, 1, 0, 0, 0, 340, 384, 72, 64, 64, 64, 1, 0, 0, 0, 148, 544, 422, 64, 64, 64, 1, 0, 0, 0, 492, 684, 258, 64, 64, 64, 1, 0, 0, 0, 282, 1024, 808, 64, 64, 64, 1, 0, 0, 0, 748, 1132, 494, 64, 64, 64, 1, 0, 0, 0, 920, 950, 116, 64, 64, 64, 1, 0, 0, 0, 928, 502, -352, 64, 64, 64, 1, 0, 0, 0, -72, 836, 938, 64, 64, 64, 1, 0, 0, 0, -480, 998, 960, 64, 64, 64, 1, 0, 0, 0, -536, 714, 956, 64, 64, 64, 1, 0, 0, 0, -1092, 1090, 1024, 64, 64, 64, 1, 0, 0, 0, -1032, 1120, 480, 64, 64, 64, 1, 0, 0, 0, -1022, 1070, 196, 64, 64, 64, 1, 0, 0, 0, -1120, 1174, -252, 64, 64, 64, 1, 0, 0, 0, -1120, 1270, -576, 64, 64, 64, 1, 0, 0, 0, -1090, 1260, -1060, 64, 64, 64, 1, 0, 0, 0, -646, 1262, -1100, 64, 64, 64, 1, 0, 0, 0, 226, 1010, -958, 64, 64, 64, 1, 0, 0, 0, 320, 374, -832, 64, 64, 64, 1, 0, 0, 0, 726, 1080, -1108, 64, 64, 64, 1, 0, 0, 0, 1056, 1154, -1098, 64, 64, 64, 1, 0, 0, 0, 1086, 1282, -672, 64, 64, 64, 1, 0, 0, 0, 1132, 1386, -288, 64, 64, 64, 1, 0, 0, 0, 1112, 1484, -94, 64, 64, 64, 1, 0, 0, 0, 1122, 1632, -352, 64, 64, 64, 1, 0, 0, 0, 1132, 1750, -84, 64, 64, 64, 1, 0, 0, 0, 1058, 1792, 330, 64, 64, 64, 1, 0, 0, 0, 998, 1846, 612, 64, 64, 64, 1, 0, 0, 0, 892, 1846, 792, 64, 64, 64, 1, 0, 0, 0
RemEnd