home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 1_2002.ISO / Data / Zips / CODE_UPLOAD89078132000.psc / Form1.frm (.txt) < prev    next >
Encoding:
Visual Basic Form  |  2000-08-13  |  17.7 KB  |  452 lines

  1. VERSION 5.00
  2. Begin VB.Form Form1 
  3.    Caption         =   "Form1"
  4.    ClientHeight    =   4296
  5.    ClientLeft      =   48
  6.    ClientTop       =   336
  7.    ClientWidth     =   5628
  8.    Icon            =   "Form1.frx":0000
  9.    LinkTopic       =   "Form1"
  10.    ScaleHeight     =   4296
  11.    ScaleWidth      =   5628
  12.    StartUpPosition =   2  'CenterScreen
  13.    WindowState     =   2  'Maximized
  14.    Begin VB.PictureBox SavePB 
  15.       AutoRedraw      =   -1  'True
  16.       Height          =   1572
  17.       Left            =   3120
  18.       ScaleHeight     =   1524
  19.       ScaleWidth      =   1884
  20.       TabIndex        =   1
  21.       Top             =   960
  22.       Visible         =   0   'False
  23.       Width           =   1932
  24.    End
  25.    Begin VB.PictureBox LoadPB 
  26.       AutoRedraw      =   -1  'True
  27.       Height          =   1572
  28.       Left            =   960
  29.       ScaleHeight     =   1524
  30.       ScaleWidth      =   1884
  31.       TabIndex        =   0
  32.       Top             =   960
  33.       Visible         =   0   'False
  34.       Width           =   1932
  35.    End
  36.    Begin VB.Timer Timer1 
  37.       Enabled         =   0   'False
  38.       Interval        =   1000
  39.       Left            =   360
  40.       Top             =   240
  41.    End
  42. Attribute VB_Name = "Form1"
  43. Attribute VB_GlobalNameSpace = False
  44. Attribute VB_Creatable = False
  45. Attribute VB_PredeclaredId = True
  46. Attribute VB_Exposed = False
  47. Dim Going As Boolean
  48. Dim FPS As Integer
  49. Dim Rotation As Single
  50. Dim Pitch As Single
  51. Dim Key As Byte
  52. Const TURN_SPEED = 0.2
  53. Const PITCH_SPEED = 0.05
  54. Const WALK_SPEED = 0.4
  55. Const BOAT_SPEED = -0.006
  56. Const PLANE_SPEED = 0.018
  57. Const GROUND_SIZE = 8
  58. Dim matCamera As D3DMATRIX
  59. Dim vNwall(4) As D3DVERTEX
  60. Dim vSwall(4) As D3DVERTEX
  61. Dim vEwall(5) As D3DVERTEX
  62. Dim vWwall(5) As D3DVERTEX
  63. Dim vRoof(6) As D3DVERTEX
  64. Dim vGround(4) As D3DVERTEX
  65. Dim vSea(4) As D3DVERTEX
  66. Dim vFence(10) As D3DVERTEX
  67. Dim vPlane(4) As D3DVERTEX
  68. Dim vBoat(4) As D3DVERTEX
  69. Const NUM_TREES = 4
  70. Dim VecTree(NUM_TREES) As D3DVECTOR
  71. Dim vTree(4) As D3DVERTEX
  72. Dim ScrollPos As Integer
  73. Const SCROLL_SPEED = 10
  74. Dim IsSolid(-GROUND_SIZE - 1 To GROUND_SIZE + 1, -GROUND_SIZE - 1 To GROUND_SIZE + 1) As Boolean
  75. Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
  76. Key = KeyCode
  77. End Sub
  78. Private Sub Form_KeyPress(KeyAscii As Integer)
  79. If KeyAscii = vbKeyEscape Then Unload Me
  80. End Sub
  81. Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)
  82. Key = 0
  83. End Sub
  84. Private Sub Form_Load()
  85. Randomize Timer
  86. MousePointer = vbHourglass
  87. Caption = "LOADING - PLEASE WAIT..."
  88. ' load everything
  89. Convert2BMPs
  90. MOD_DX_DRAW.CrankItUp hwnd, True
  91. MOD_DX_DRAW.SetDisplayMode 640, 480, 16
  92. MOD_DX_DRAW.LoadAllSurfaces
  93. MOD_DX_3D.CrankItUp
  94. MOD_DX_3D.AttachZbuffer
  95. MOD_DX_3D.LoadTextures
  96. MOD_DX_3D.LoadMaterials
  97. MOD_DX_3D.LoadLighting
  98. MOD_DX_3D.LoadMatrices
  99. MOD_DX_3D.LoadCameras
  100. ' enable z-buffering
  101. DX3DDEV.SetRenderState D3DRENDERSTATE_ZENABLE, D3DZB_TRUE
  102. ' load scene
  103. Load3DScene
  104. ' loading complete, enter main loop
  105. MousePointer = vbDefault
  106. MOD_DX_DRAW.HideTheCursor
  107. Going = True
  108. Timer1.Enabled = True
  109. MainLoop
  110. ' unload everything
  111. MOD_DX_3D.UnloadTextures
  112. MOD_DX_DRAW.UnloadSurfaces
  113. DX_DRAW.RestoreDisplayMode
  114. MOD_DX_DRAW.ShowTheCursor
  115. MsgBox "Don't you reckon that was cool? If you liked this example, please visit www.planet-source-code.com and vote for Simon Price's 3D Garden!", vbInformation, "VOTING TIME!"
  116. Unload Me
  117. End Sub
  118. Sub MainLoop()
  119. Dim j As Long, x As Integer
  120. ScrollPos = 5
  121. Do While Going
  122.     MoveSprites
  123.     MoveCamera
  124.     RenderScene
  125.     x = ScrollPos
  126.     MOD_DX_DRAW.SetRect SrcRect, x, 0, 320, 240
  127.     MOD_DX_DRAW.SetRect DestRect, 0, 0, 640, 480
  128.     BackBuffer.Blt DestRect, Background, SrcRect, DDBLT_WAIT
  129.     MOD_DX_DRAW.SetRect SrcRect, 0, 0, 640, 480
  130.     BackBuffer.BltFast 0, 0, Scene, SrcRect, DDBLTFAST_WAIT Or DDBLTFAST_SRCCOLORKEY
  131.     View.Flip Nothing, DDFLIP_WAIT
  132.     FPS = FPS + 1
  133.     If GetInputState Then DoEvents
  134. End Sub
  135. Sub Load3DScene()
  136. ' create points to construct a house from
  137. Const NW_LOW = 0
  138. Const NW_HIGH = 1
  139. Const NE_LOW = 2
  140. Const NE_HIGH = 3
  141. Const SW_LOW = 4
  142. Const SW_HIGH = 5
  143. Const SE_LOW = 6
  144. Const SE_HIGH = 7
  145. Const W_ROOF = 8
  146. Const E_ROOF = 9
  147. Const WALL_HEIGHT = 1
  148. Const ROOF_HEIGHT = 2
  149. Const HEIGHT_RATIO = WALL_HEIGHT / ROOF_HEIGHT
  150. Const WALL_WIDTH = 1
  151. Const WALL_LENGTH = 2
  152. Const TEX_WALL_WIDTH = WALL_WIDTH * 2
  153. Const TEX_WALL_LENGTH = WALL_LENGTH * 2
  154. Dim Vec(10) As D3DVECTOR
  155. Vec(NW_LOW) = MOD_DX_3D.MakeVector(-WALL_LENGTH, 0, WALL_WIDTH)
  156. Vec(NW_HIGH) = MOD_DX_3D.MakeVector(-WALL_LENGTH, WALL_HEIGHT, WALL_WIDTH)
  157. Vec(NE_LOW) = MOD_DX_3D.MakeVector(WALL_LENGTH, 0, WALL_WIDTH)
  158. Vec(NE_HIGH) = MOD_DX_3D.MakeVector(WALL_LENGTH, WALL_HEIGHT, WALL_WIDTH)
  159. Vec(SW_LOW) = MOD_DX_3D.MakeVector(-WALL_LENGTH, 0, -WALL_WIDTH)
  160. Vec(SW_HIGH) = MOD_DX_3D.MakeVector(-WALL_LENGTH, WALL_HEIGHT, -WALL_WIDTH)
  161. Vec(SE_LOW) = MOD_DX_3D.MakeVector(WALL_LENGTH, 0, -WALL_WIDTH)
  162. Vec(SE_HIGH) = MOD_DX_3D.MakeVector(WALL_LENGTH, WALL_HEIGHT, -WALL_WIDTH)
  163. Vec(W_ROOF) = MOD_DX_3D.MakeVector(-WALL_LENGTH, ROOF_HEIGHT, 0)
  164. Vec(E_ROOF) = MOD_DX_3D.MakeVector(WALL_LENGTH, ROOF_HEIGHT, 0)
  165. ' north wall
  166. vNwall(2) = MOD_DX_3D.MakeVertex(Vec(NE_LOW), 0, 0, 0, 0, 0)
  167. vNwall(3) = MOD_DX_3D.MakeVertex(Vec(NW_LOW), 0, 0, 0, TEX_WALL_LENGTH, 0)
  168. vNwall(0) = MOD_DX_3D.MakeVertex(Vec(NE_HIGH), 0, 0, 0, 0, 1)
  169. vNwall(1) = MOD_DX_3D.MakeVertex(Vec(NW_HIGH), 0, 0, 0, TEX_WALL_LENGTH, 1)
  170. ' south wall
  171. vSwall(0) = MOD_DX_3D.MakeVertex(Vec(SE_LOW), 0, 0, 0, 0, 0)
  172. vSwall(1) = MOD_DX_3D.MakeVertex(Vec(SW_LOW), 0, 0, 0, TEX_WALL_LENGTH, 0)
  173. vSwall(2) = MOD_DX_3D.MakeVertex(Vec(SE_HIGH), 0, 0, 0, 0, 1)
  174. vSwall(3) = MOD_DX_3D.MakeVertex(Vec(SW_HIGH), 0, 0, 0, TEX_WALL_LENGTH, 1)
  175. ' east wall
  176. vEwall(0) = MOD_DX_3D.MakeVertex(Vec(NE_LOW), 0, 0, 0, 0, 1)
  177. vEwall(1) = MOD_DX_3D.MakeVertex(Vec(SE_LOW), 0, 0, 0, 1, 1)
  178. vEwall(2) = MOD_DX_3D.MakeVertex(Vec(NE_HIGH), 0, 0, 0, 0, HEIGHT_RATIO)
  179. vEwall(3) = MOD_DX_3D.MakeVertex(Vec(SE_HIGH), 0, 0, 0, 1, HEIGHT_RATIO)
  180. vEwall(4) = MOD_DX_3D.MakeVertex(Vec(E_ROOF), 0, 0, 0, 0.5, 0)
  181. ' west wall
  182. vWwall(4) = MOD_DX_3D.MakeVertex(Vec(NW_LOW), 0, 0, 0, 0, 1)
  183. vWwall(3) = MOD_DX_3D.MakeVertex(Vec(SW_LOW), 0, 0, 0, 1, 1)
  184. vWwall(2) = MOD_DX_3D.MakeVertex(Vec(NW_HIGH), 0, 0, 0, 0, HEIGHT_RATIO)
  185. vWwall(1) = MOD_DX_3D.MakeVertex(Vec(SW_HIGH), 0, 0, 0, 1, HEIGHT_RATIO)
  186. vWwall(0) = MOD_DX_3D.MakeVertex(Vec(W_ROOF), 0, 0, 0, 0.5, 0)
  187. ' roof
  188. vRoof(1) = MOD_DX_3D.MakeVertex(Vec(SW_HIGH), 0, 0, 0, 0, 0)
  189. vRoof(0) = MOD_DX_3D.MakeVertex(Vec(SE_HIGH), 0, 0, 0, TEX_WALL_LENGTH, 0)
  190. vRoof(3) = MOD_DX_3D.MakeVertex(Vec(W_ROOF), 0, 0, 0, 0, 1)
  191. vRoof(2) = MOD_DX_3D.MakeVertex(Vec(E_ROOF), 0, 0, 0, TEX_WALL_LENGTH, 1)
  192. vRoof(5) = MOD_DX_3D.MakeVertex(Vec(NW_HIGH), 0, 0, 0, 0, 0)
  193. vRoof(4) = MOD_DX_3D.MakeVertex(Vec(NE_HIGH), 0, 0, 0, TEX_WALL_LENGTH, 0)
  194. ' ground
  195. Const NW_CORNER = 0
  196. Const NE_CORNER = 1
  197. Const SW_CORNER = 2
  198. Const SE_CORNER = 3
  199. Const GROUND_SIZE2 = GROUND_SIZE
  200. Vec(NW_CORNER) = MOD_DX_3D.MakeVector(-GROUND_SIZE, 0, GROUND_SIZE)
  201. Vec(NE_CORNER) = MOD_DX_3D.MakeVector(GROUND_SIZE, 0, GROUND_SIZE)
  202. Vec(SW_CORNER) = MOD_DX_3D.MakeVector(-GROUND_SIZE, 0, -GROUND_SIZE)
  203. Vec(SE_CORNER) = MOD_DX_3D.MakeVector(GROUND_SIZE, 0, -GROUND_SIZE)
  204. vGround(NW_CORNER) = MOD_DX_3D.MakeVertex(Vec(NW_CORNER), 0, 0, 0, 0, 0)
  205. vGround(NE_CORNER) = MOD_DX_3D.MakeVertex(Vec(NE_CORNER), 0, 0, 0, 4, 0)
  206. vGround(SW_CORNER) = MOD_DX_3D.MakeVertex(Vec(SW_CORNER), 0, 0, 0, 0, 4)
  207. vGround(SE_CORNER) = MOD_DX_3D.MakeVertex(Vec(SE_CORNER), 0, 0, 0, 4, 4)
  208. ' fence
  209. Const FENCE_HEIGHT = 0.5
  210. Const TEX_FENCE_WIDTH = GROUND_SIZE * 2
  211. Const NW_LOW2 = 8
  212. Const NW_HIGH2 = 9
  213. Const SW_LOW2 = 6
  214. Const SW_HIGH2 = 7
  215. Const SE_LOW2 = 4
  216. Const SE_HIGH2 = 5
  217. Vec(NW_LOW) = MOD_DX_3D.MakeVector(-GROUND_SIZE, 0, GROUND_SIZE)
  218. Vec(NE_LOW) = MOD_DX_3D.MakeVector(GROUND_SIZE, 0, GROUND_SIZE)
  219. Vec(SW_LOW) = MOD_DX_3D.MakeVector(-GROUND_SIZE, 0, -GROUND_SIZE)
  220. Vec(SE_LOW) = MOD_DX_3D.MakeVector(GROUND_SIZE, 0, -GROUND_SIZE)
  221. Vec(NW_HIGH) = MOD_DX_3D.MakeVector(-GROUND_SIZE, FENCE_HEIGHT, GROUND_SIZE)
  222. Vec(NE_HIGH) = MOD_DX_3D.MakeVector(GROUND_SIZE, FENCE_HEIGHT, GROUND_SIZE)
  223. Vec(SW_HIGH) = MOD_DX_3D.MakeVector(-GROUND_SIZE, FENCE_HEIGHT, -GROUND_SIZE)
  224. Vec(SE_HIGH) = MOD_DX_3D.MakeVector(GROUND_SIZE, FENCE_HEIGHT, -GROUND_SIZE)
  225. vFence(NW_LOW) = MOD_DX_3D.MakeVertex(Vec(NW_LOW), 0, 0, 0, 0, 0)
  226. vFence(NW_HIGH) = MOD_DX_3D.MakeVertex(Vec(NW_HIGH), 0, 0, 0, 0, 1)
  227. vFence(NE_LOW) = MOD_DX_3D.MakeVertex(Vec(NE_LOW), 0, 0, 0, TEX_FENCE_WIDTH, 0)
  228. vFence(NE_HIGH) = MOD_DX_3D.MakeVertex(Vec(NE_HIGH), 0, 0, 0, TEX_FENCE_WIDTH, 1)
  229. vFence(SE_LOW2) = MOD_DX_3D.MakeVertex(Vec(SE_LOW), 0, 0, 0, 0, 0)
  230. vFence(SE_HIGH2) = MOD_DX_3D.MakeVertex(Vec(SE_HIGH), 0, 0, 0, 0, 1)
  231. vFence(SW_LOW2) = MOD_DX_3D.MakeVertex(Vec(SW_LOW), 0, 0, 0, TEX_FENCE_WIDTH, 0)
  232. vFence(SW_HIGH2) = MOD_DX_3D.MakeVertex(Vec(SW_HIGH), 0, 0, 0, TEX_FENCE_WIDTH, 1)
  233. vFence(NW_LOW2) = MOD_DX_3D.MakeVertex(Vec(NW_LOW), 0, 0, 0, 0, 0)
  234. vFence(NW_HIGH2) = MOD_DX_3D.MakeVertex(Vec(NW_HIGH), 0, 0, 0, 0, 1)
  235. ' sea
  236. Const SEA_SIZE = 40
  237. Const SEA_LEVEL = -0.5
  238. Vec(NW_CORNER) = MOD_DX_3D.MakeVector(-SEA_SIZE, SEA_LEVEL, SEA_SIZE)
  239. Vec(NE_CORNER) = MOD_DX_3D.MakeVector(SEA_SIZE, SEA_LEVEL, SEA_SIZE)
  240. Vec(SW_CORNER) = MOD_DX_3D.MakeVector(-SEA_SIZE, SEA_LEVEL, -SEA_SIZE)
  241. Vec(SE_CORNER) = MOD_DX_3D.MakeVector(SEA_SIZE, SEA_LEVEL, -SEA_SIZE)
  242. vSea(NW_CORNER) = MOD_DX_3D.MakeVertex(Vec(NW_CORNER), 0, 0, 0, 0, 0)
  243. vSea(NE_CORNER) = MOD_DX_3D.MakeVertex(Vec(NE_CORNER), 0, 0, 0, SEA_SIZE / 2, 0)
  244. vSea(SW_CORNER) = MOD_DX_3D.MakeVertex(Vec(SW_CORNER), 0, 0, 0, 0, SEA_SIZE / 2)
  245. vSea(SE_CORNER) = MOD_DX_3D.MakeVertex(Vec(SE_CORNER), 0, 0, 0, SEA_SIZE / 2, SEA_SIZE / 2)
  246. ' boat
  247. Const BOAT_WIDTH = 1
  248. Const BOAT_HEIGHT = 1.8
  249. Const BOAT_DISTANCE = 12.5
  250. DX.CreateD3DVertex -BOAT_WIDTH, SEA_LEVEL, -BOAT_DISTANCE, 0, 0, 0, 0, 1, vBoat(0)
  251. DX.CreateD3DVertex BOAT_WIDTH, SEA_LEVEL, -BOAT_DISTANCE, 0, 0, 0, 1, 1, vBoat(1)
  252. DX.CreateD3DVertex -BOAT_WIDTH, SEA_LEVEL + BOAT_HEIGHT, -BOAT_DISTANCE, 0, 0, 0, 0, 0.5, vBoat(2)
  253. DX.CreateD3DVertex BOAT_WIDTH, SEA_LEVEL + BOAT_HEIGHT, -BOAT_DISTANCE, 0, 0, 0, 1, 0.5, vBoat(3)
  254. ' plane
  255. Const PLANE_WIDTH = 1
  256. Const PLANE_HEIGHT = 2
  257. Const PLANE_ALT = 5
  258. Const PLANE_DISTANCE = 12.5
  259. DX.CreateD3DVertex -PLANE_WIDTH, PLANE_ALT, -PLANE_DISTANCE, 0, 0, 0, 1, 0.5, vPlane(0)
  260. DX.CreateD3DVertex PLANE_WIDTH, PLANE_ALT, -PLANE_DISTANCE, 0, 0, 0, 0, 0.5, vPlane(1)
  261. DX.CreateD3DVertex -PLANE_WIDTH, PLANE_ALT + PLANE_HEIGHT, -PLANE_DISTANCE, 0, 0, 0, 1, 0, vPlane(2)
  262. DX.CreateD3DVertex PLANE_WIDTH, PLANE_ALT + PLANE_HEIGHT, -PLANE_DISTANCE, 0, 0, 0, 0, 0, vPlane(3)
  263. ' trees
  264. Const TREE_WIDTH = 1
  265. Const TREE_HEIGHT = 1
  266. 'Dim tVec(NUM_TREES) As D3DVECTOR
  267. VecTree(0) = MOD_DX_3D.MakeVector(5, 0, 6)
  268. VecTree(1) = MOD_DX_3D.MakeVector(4, 0, -3)
  269. VecTree(2) = MOD_DX_3D.MakeVector(0, 0, -5)
  270. VecTree(3) = MOD_DX_3D.MakeVector(-4, 0, 6)
  271. vTree(0).tu = 0: vTree(0).tv = 0
  272. vTree(1).tu = 1: vTree(1).tv = 0
  273. vTree(2).tu = 0: vTree(2).tv = 1
  274. vTree(3).tu = 1: vTree(3).tv = 1
  275. 'For i = 0 To NUM_TREES - 1
  276. '    DX.CreateD3DVertex tVec(i).x, tVec(i).y, tVec(i).z, 0, 0, 0, 0, 1, vTree(i * 4)
  277. '    DX.CreateD3DVertex tVec(i).x + TREE_WIDTH, tVec(i).y, tVec(i).z, 0, 0, 0, 1, 1, vTree(i * 4 + 1)
  278. '    DX.CreateD3DVertex tVec(i).x, tVec(i).y + TREE_HEIGHT, tVec(i).z, 0, 0, 0, 0, 0, vTree(i * 4 + 2)
  279. '    DX.CreateD3DVertex tVec(i).x + TREE_WIDTH, tVec(i).y + TREE_HEIGHT, tVec(i).z, 0, 0, 0, 1, 0, vTree(i * 4 + 3)
  280. 'Next
  281. ' collision detection
  282. Dim x As Integer, y As Integer
  283. For x = -GROUND_SIZE - 1 To GROUND_SIZE + 1
  284.     IsSolid(x, -GROUND_SIZE - 1) = True
  285.     IsSolid(x, GROUND_SIZE + 1) = True
  286. For y = -GROUND_SIZE - 1 To GROUND_SIZE + 1
  287.     IsSolid(-GROUND_SIZE - 1, y) = True
  288.     IsSolid(GROUND_SIZE + 1, y) = True
  289. For x = -WALL_LENGTH To WALL_LENGTH
  290. For y = -WALL_WIDTH To WALL_WIDTH
  291.     IsSolid(x, y) = True
  292. End Sub
  293. Sub MoveCamera()
  294. Dim BackedUp As Boolean
  295. BackUp:
  296. Select Case Key
  297.    Case vbKeyLeft
  298.        Rotation = Rotation - TURN_SPEED
  299.        ScrollPos = ScrollPos - SCROLL_SPEED
  300.        If ScrollPos < 0 Then ScrollPos = ScrollPos + 320
  301.    Case vbKeyRight
  302.        Rotation = Rotation + TURN_SPEED
  303.        ScrollPos = ScrollPos + SCROLL_SPEED
  304.        If ScrollPos > 320 Then ScrollPos = ScrollPos - 320
  305.    Case vbKeyUp
  306.        Camera.z = Camera.z - Cos(Rotation) * WALK_SPEED
  307.        Camera.x = Camera.x - Sin(Rotation) * WALK_SPEED
  308.        If IsSolid(Camera.x, Camera.z) Then
  309.            Key = vbKeyDown
  310.            BackedUp = True
  311.            GoTo BackUp
  312.        End If
  313.    Case vbKeyDown
  314.        Camera.z = Camera.z + Cos(Rotation) * WALK_SPEED
  315.        Camera.x = Camera.x + Sin(Rotation) * WALK_SPEED
  316.        If IsSolid(Camera.x, Camera.z) Then
  317.            Key = vbKeyUp
  318.            BackedUp = True
  319.            GoTo BackUp
  320.        End If
  321.    Case vbKeyPageUp
  322.        Pitch = Pitch - PITCH_SPEED
  323.    Case vbKeyPageDown
  324.        Pitch = Pitch + PITCH_SPEED
  325. End Select
  326. If BackedUp Then
  327.     BackedUp = False
  328.     GoTo BackUp
  329. End If
  330. ' camera movement
  331. Dim matView As D3DMATRIX
  332. Dim matRotation As D3DMATRIX
  333. Dim matPitch As D3DMATRIX
  334. Dim matLook As D3DMATRIX
  335. Dim matPos As D3DMATRIX
  336. DX.IdentityMatrix matView
  337. DX.IdentityMatrix matPos
  338. DX.IdentityMatrix matRotation
  339. DX.RotateYMatrix matRotation, Rotation
  340. DX.RotateXMatrix matPitch, Pitch
  341. DX.MatrixMultiply matLook, matRotation, matPitch
  342. matPos.rc41 = Camera.x
  343. matPos.rc42 = -Camera.y
  344. matPos.rc43 = Camera.z
  345. DX.MatrixMultiply matView, matPos, matLook
  346. DX3DDEV.SetTransform D3DTRANSFORMSTATE_VIEW, matView
  347. End Sub
  348. Sub MoveSprites()
  349. Dim i As Byte
  350. Dim matBoatRot As D3DMATRIX
  351. Dim matNewBoat As D3DMATRIX
  352. Dim matOldBoat As D3DMATRIX
  353. Dim matPlaneRot As D3DMATRIX
  354. Dim matNewPlane As D3DMATRIX
  355. Dim matOldPlane As D3DMATRIX
  356. ' move boat + plane
  357. DX.IdentityMatrix matBoatRot
  358. DX.IdentityMatrix matOldBoat
  359. DX.RotateYMatrix matBoatRot, BOAT_SPEED
  360. DX.IdentityMatrix matPlaneRot
  361. DX.IdentityMatrix matOldPlane
  362. DX.RotateYMatrix matPlaneRot, PLANE_SPEED
  363. For i = 0 To 3
  364.      matOldBoat.rc41 = vBoat(i).x
  365.      matOldBoat.rc42 = vBoat(i).y
  366.      matOldBoat.rc43 = vBoat(i).z
  367.      matOldPlane.rc41 = vPlane(i).x
  368.      matOldPlane.rc42 = vPlane(i).y
  369.      matOldPlane.rc43 = vPlane(i).z
  370.      
  371.      DX.MatrixMultiply matNewBoat, matOldBoat, matBoatRot
  372.      DX.MatrixMultiply matNewPlane, matOldPlane, matPlaneRot
  373.      
  374.      vBoat(i).x = matNewBoat.rc41
  375.      vBoat(i).y = matNewBoat.rc42
  376.      vBoat(i).z = matNewBoat.rc43
  377.      vPlane(i).x = matNewPlane.rc41
  378.      vPlane(i).y = matNewPlane.rc42
  379.      vPlane(i).z = matNewPlane.rc43
  380. End Sub
  381. Sub RenderScene() ' draws everyfink
  382. Dim i As Byte
  383. ' clear background with sky picture
  384. DX3DDEV.Clear 1, Viewport(), D3DCLEAR_TARGET Or D3DCLEAR_ZBUFFER, vbBlack, 1, 0
  385. DX3DDEV.BeginScene
  386. ' draw walls
  387. DX3DDEV.SetTexture 0, Tex(TEX_WALL)
  388. DX3DDEV.DrawPrimitive D3DPT_TRIANGLESTRIP, D3DFVF_VERTEX, vNwall(0), 4, D3DDP_DEFAULT
  389. DX3DDEV.DrawPrimitive D3DPT_TRIANGLESTRIP, D3DFVF_VERTEX, vSwall(0), 4, D3DDP_DEFAULT
  390. ' side walls
  391. DX3DDEV.SetTexture 0, Tex(TEX_SIDEWALL)
  392. DX3DDEV.DrawPrimitive D3DPT_TRIANGLESTRIP, D3DFVF_VERTEX, vEwall(0), 5, D3DDP_DEFAULT
  393. DX3DDEV.DrawPrimitive D3DPT_TRIANGLESTRIP, D3DFVF_VERTEX, vWwall(0), 5, D3DDP_DEFAULT
  394. ' draw roof
  395. DX3DDEV.SetTexture 0, Tex(TEX_ROOF)
  396. DX3DDEV.DrawPrimitive D3DPT_TRIANGLESTRIP, D3DFVF_VERTEX, vRoof(0), 6, D3DDP_DEFAULT
  397. ' draw trees
  398. DX3DDEV.SetTexture 0, Tex(TEX_TREE)
  399. Dim Rot As Single
  400. Rot = -Rotation
  401. For i = 0 To NUM_TREES - 1
  402.    vTree(0).x = VecTree(i).x - Cos(Rot)
  403.    vTree(0).z = VecTree(i).z - Sin(Rot)
  404.    vTree(2).x = VecTree(i).x - Cos(Rot)
  405.    vTree(2).z = VecTree(i).z - Sin(Rot)
  406.    vTree(1).x = VecTree(i).x + Cos(Rot)
  407.    vTree(1).z = VecTree(i).z + Sin(Rot)
  408.    vTree(3).x = VecTree(i).x + Cos(Rot)
  409.    vTree(3).z = VecTree(i).z + Sin(Rot)
  410.    vTree(0).y = 2
  411.    vTree(1).y = 2
  412.    vTree(2).y = 0
  413.    vTree(3).y = 0
  414.    DX3DDEV.DrawPrimitive D3DPT_TRIANGLESTRIP, D3DFVF_VERTEX, vTree(0), 4, D3DDP_DEFAULT
  415. ' draw plane
  416. DX3DDEV.SetTexture 0, Tex(TEX_PLANE_BOAT)
  417. DX3DDEV.DrawPrimitive D3DPT_TRIANGLESTRIP, D3DFVF_VERTEX, vPlane(0), 4, D3DDP_DEFAULT
  418. ' draw fence
  419. DX3DDEV.SetTexture 0, Tex(TEX_FENCE)
  420. DX3DDEV.DrawPrimitive D3DPT_TRIANGLESTRIP, D3DFVF_VERTEX, vFence(0), 10, D3DDP_DEFAULT
  421. ' draw boat
  422. DX3DDEV.SetTexture 0, Tex(TEX_PLANE_BOAT)
  423. DX3DDEV.DrawPrimitive D3DPT_TRIANGLESTRIP, D3DFVF_VERTEX, vBoat(0), 4, D3DDP_DEFAULT
  424. ' draw floor
  425. DX3DDEV.SetTexture 0, Tex(TEX_GRASS)
  426. DX3DDEV.DrawPrimitive D3DPT_TRIANGLESTRIP, D3DFVF_VERTEX, vGround(0), 4, D3DDP_DEFAULT
  427. ' draw sea
  428. DX3DDEV.SetTexture 0, Tex(TEX_WATER)
  429. DX3DDEV.DrawPrimitive D3DPT_TRIANGLESTRIP, D3DFVF_VERTEX, vSea(0), 4, D3DDP_DEFAULT
  430. DX3DDEV.EndScene
  431. End Sub
  432. Private Sub Form_Unload(Cancel As Integer)
  433. Going = False
  434. End Sub
  435. Private Sub Timer1_Timer()
  436. Debug.Print FPS
  437. FPS = 0
  438. End Sub
  439. Sub Convert2BMPs()
  440. If MOD_DX_DRAW.JPEG2BMP(App.Path & "\grass", LoadPB, SavePB) = False Then FilesMissing App.Path & "\grass"
  441. If MOD_DX_DRAW.JPEG2BMP(App.Path & "\sky", LoadPB, SavePB) = False Then FilesMissing App.Path & "\sky"
  442. If MOD_DX_DRAW.JPEG2BMP(App.Path & "\wall", LoadPB, SavePB) = False Then FilesMissing App.Path & "\wall"
  443. If MOD_DX_DRAW.JPEG2BMP(App.Path & "\sidewall", LoadPB, SavePB) = False Then FilesMissing App.Path & "\sidewall"
  444. If MOD_DX_DRAW.JPEG2BMP(App.Path & "\fence", LoadPB, SavePB) = False Then FilesMissing App.Path & "\fence"
  445. If MOD_DX_DRAW.JPEG2BMP(App.Path & "\water", LoadPB, SavePB) = False Then FilesMissing App.Path & "\water"
  446. If MOD_DX_DRAW.JPEG2BMP(App.Path & "\roof", LoadPB, SavePB) = False Then FilesMissing App.Path & "\roof"
  447. If MOD_DX_DRAW.JPEG2BMP(App.Path & "\plane_boat", LoadPB, SavePB) = False Then FilesMissing App.Path & "\roof"
  448. End Sub
  449. Sub FilesMissing(FileName As String)
  450. MsgBox "ERROR : Picture File Missing - Cannot Load " & FileName & ".jpg - Ending Program!!!", vbExclamation, "ERROR - FILE NOT FOUND"
  451. End Sub
  452.