home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 3_2004-2005.ISO / Data / Zips / DaBooda_2D1733984162004.psc / DaBooda2DEngineClass / Class / DaBoodaEngine.cls < prev    next >
Text File  |  2004-04-15  |  51KB  |  1,542 lines

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4. END
  5. Attribute VB_Name = "DaBoodaEngine"
  6. Attribute VB_GlobalNameSpace = False
  7. Attribute VB_Creatable = True
  8. Attribute VB_PredeclaredId = False
  9. Attribute VB_Exposed = True
  10. Attribute VB_Ext_KEY = "SavedWithClassBuilder" ,"Yes"
  11. Attribute VB_Ext_KEY = "Top_Level" ,"Yes"
  12. Option Explicit
  13. 'Variables for Screen Mapping and display
  14.     Private ScreenRect As RECT
  15.     Private DisplayWidth As Single
  16.     Private DisplayHeight As Single
  17.     Private DisplayColor As Long
  18.  
  19. 'This Rect Variable is Where the Map and Sprites are actual Drawn
  20.     Private MapView As RECT
  21.     Private MapXCount As Integer
  22.     Private MapYCount As Integer
  23.     Private MapClip As Single
  24.  
  25. 'this Variable Determines how Many Levels are on the screen
  26. 'It is is used to determine zorder
  27.     Private MaxLevel As Integer
  28.     
  29. 'These Are Instances of all the classes
  30. Public Sprite As New DaBoodaSpritePool
  31. Public Map As New DaBoodaMapPool
  32. Public Texture As New DaBoodaTexturePool
  33. Public Overlay As New DaBoodaOverlayPool
  34. Public FPS As New DaBoodaFRC
  35. Public AutoMove As New DaBoodaAutoMove
  36. Public KeyInput As New DaBoodaKeyInputPool
  37. Public Music As New DaBoodaMusic
  38. Public Sound As New DaBoodaSoundPool
  39. Public TextEx As New DaBoodaTextPool
  40. Public Mouse As New DaBoodaMouse
  41. Public JoyStick As New DaBoodaJoyStick
  42.  
  43. Public Sub InitializeDisplay(Hwnd&, dWindowed As Boolean, Optional dWidth& = 320, Optional dHeight& = 240, Optional FramePS& = 60, Optional Color& = 0, Optional dAdapter As Long = 0, Optional DevType As CONST_D3DDEVTYPE, Optional dVsync As Boolean = True)
  44.     On Error GoTo NotInitialized
  45.     
  46. 'Initialize the Classes
  47. Set Sprite = New DaBoodaSpritePool
  48. Set Map = New DaBoodaMapPool
  49. Set Texture = New DaBoodaTexturePool
  50. Set Overlay = New DaBoodaOverlayPool
  51. Set FPS = New DaBoodaFRC
  52. Set AutoMove = New DaBoodaAutoMove
  53. Set KeyInput = New DaBoodaKeyInputPool
  54. Set Music = New DaBoodaMusic
  55. Set Sound = New DaBoodaSoundPool
  56. Set TextEx = New DaBoodaTextPool
  57. Set Mouse = New DaBoodaMouse
  58. Set JoyStick = New DaBoodaJoyStick
  59.  
  60. 'Variables for displayMode
  61.     Dim dParams As D3DPRESENT_PARAMETERS
  62.     Dim DispMode As D3DDISPLAYMODE
  63.     Dim Temp As Single
  64.     
  65. 'Set up Screen Variables
  66.     DisplayWidth = dWidth
  67.     DisplayHeight = dHeight
  68.     DisplayColor = Color
  69.     With ScreenRect
  70.         .Left = 0
  71.         .Top = 0
  72.         .Right = dWidth
  73.         .Bottom = dWidth
  74.     End With
  75.     Temp = FramePS
  76.     FPS.SetFrameRate Temp
  77.     
  78. 'Initialize Direct3d
  79.     
  80.     Set DirectX = New DirectX8
  81.     Set Direct3D = DirectX.Direct3DCreate
  82.     Set D3DX = New D3DX8
  83.  
  84. 'Get Current DisplayMode
  85.     Direct3D.GetAdapterDisplayMode dAdapter, DispMode
  86.     
  87. 'Set the Device to Hardware if empty
  88.     If DevType = 0 Then DevType = D3DDEVTYPE_HAL
  89.  
  90. 'Set Up Parameters for displaymode
  91.     If dWindowed = True Then
  92.         
  93.         With dParams
  94.         .BackBufferFormat = DispMode.Format
  95.         .BackBufferWidth = dWidth
  96.         .BackBufferHeight = dHeight
  97.         .EnableAutoDepthStencil = False
  98.         .Windowed = 1
  99.         End With
  100.         If dVsync = True Then
  101.             dParams.SwapEffect = D3DSWAPEFFECT_COPY_VSYNC
  102.         Else:
  103.             dParams.SwapEffect = D3DSWAPEFFECT_COPY
  104.         End If
  105.     Else:
  106.         With dParams
  107.         .BackBufferFormat = DispMode.Format
  108.         .EnableAutoDepthStencil = False
  109.         .BackBufferWidth = dWidth
  110.         .BackBufferHeight = dHeight
  111.         .Windowed = 0
  112.         .SwapEffect = D3DSWAPEFFECT_FLIP
  113.         End With
  114.     End If
  115.     
  116. 'Set up DisplayMode
  117.     Set Direct3DDevice = Direct3D.CreateDevice(dAdapter, DevType, Hwnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, dParams)
  118.         
  119. 'Set Up Vertex Format
  120.     Direct3DDevice.SetVertexShader FVF
  121.  
  122. 'Turn Off Lighting
  123. Direct3DDevice.SetRenderState D3DRS_LIGHTING, False
  124. Direct3DDevice.SetRenderState D3DRS_SPECULARENABLE, True
  125.  
  126. 'Set Render State
  127.     Direct3DDevice.SetRenderState D3DRS_SRCBLEND, D3DBLEND_SRCALPHA
  128.     Direct3DDevice.SetRenderState D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA
  129.     Direct3DDevice.SetRenderState D3DRS_ALPHABLENDENABLE, True
  130.  
  131. 'Set Up Texture Stages
  132.     Direct3DDevice.SetTextureStageState 0, D3DTSS_ALPHAOP, D3DTOP_MODULATE
  133.     Direct3DDevice.SetTextureStageState 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE
  134.     Direct3DDevice.SetTextureStageState 0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE
  135.  
  136.     DaBoodaDisplayOn = True
  137.     
  138.     Exit Sub
  139. NotInitialized:
  140.     MsgBox "Display Cannot Be Initialized", vbExclamation
  141. End Sub
  142.  
  143. 'Sub to render Screen
  144. 'Probably the mose important sub in engine
  145. 'next to the initialization sub
  146. Public Sub Render()
  147. 'Set up Variable for Loop
  148.     Dim Count As Integer
  149.     Dim CountIndex As Integer
  150.     
  151. 'Do Screen Limits
  152.     If AutoMove.GetOn = True Then
  153.         CheckAutoMoveSprite
  154.         UpdateMapToLimit
  155.     End If
  156.  
  157.     CheckMapLimit
  158.     CheckSpritePosition
  159.     CheckSpriteReferences
  160.     
  161.     'clear screen
  162.     Direct3DDevice.Clear 0, ByVal 0, D3DCLEAR_TARGET, DisplayColor, 1#, 0
  163.  
  164. 'Begin scene
  165.     Direct3DDevice.BeginScene
  166.  
  167. 'Set Counts to zero
  168. SpriteMax = Sprite.Count: SpriteCount = 0
  169. MapMax = Map.Count: MapCount = 0
  170. OverLayMax = Overlay.Count: OverLayCount = 0
  171. TextMax = TextEx.Count: TextCount = 0
  172.  
  173. 'Start Loop
  174.     For Count = 0 To MaxLevel
  175. 'The Graphics
  176.     'Do map
  177.     If Map.Count > 0 And MapCount < MapMax Then
  178.     For CountIndex = 1 To Map.Count
  179.         If Map(CountIndex).GetZOrder = Count Then
  180.             RenderMap CountIndex
  181.             MapCount = MapCount + 1
  182.         End If
  183.     Next CountIndex
  184.     End If
  185.     'Do Overlays
  186.     If Overlay.Count > 0 And OverLayCount < OverLayMax Then
  187.     For CountIndex = 1 To Overlay.Count
  188.         If Overlay(CountIndex).GetZOrder = Count Then
  189.             RenderOverlay CountIndex
  190.             OverLayCount = OverLayCount + 1
  191.         End If
  192.     Next CountIndex
  193.     End If
  194.     'do Sprites
  195.     If Sprite.Count > 0 And SpriteCount < SpriteMax Then
  196.     For CountIndex = 1 To Sprite.Count
  197.         If Sprite(CountIndex).GetZOrder = Count Then
  198.             RenderSprite CountIndex
  199.             SpriteCount = SpriteCount + 1
  200.         End If
  201.     Next CountIndex
  202.     End If
  203.     'Do Text
  204.     If TextEx.Count > 0 And TextCount < TextMax Then
  205.     For CountIndex = 1 To TextEx.Count
  206.         If TextEx(CountIndex).GetZOrder = Count Then
  207.             RenderText CountIndex
  208.             TextCount = TextCount + 1
  209.         End If
  210.     Next CountIndex
  211.     End If
  212. 'Increment loop
  213.     Next Count
  214.     
  215. 'End Scene
  216.     Direct3DDevice.EndScene
  217.  
  218. 'Present to display
  219.     Direct3DDevice.Present ByVal 0, ByVal 0, 0, ByVal 0
  220.     
  221. 'DoDelay
  222. 'do frame delay, to reach FrameRate
  223.     FPS.UpdateFPS
  224.     
  225. 'do events........keeps program from going into infinite loop
  226.     DoEvents
  227.  
  228. 'CheckMusic
  229. If MusicRepeat = True Then
  230.      Music.CheckMusicRepeat
  231. End If
  232.  
  233. End Sub
  234.  
  235. 'Subs to Set LevelMax
  236. Public Sub SetMaxLevel(Value As Integer)
  237.     MaxLevel = Value
  238. End Sub
  239.  
  240. Public Function GetMaxLevel() As Integer
  241.     GetMaxLevel = MaxLevel
  242. End Function
  243.  
  244. 'Set Color key
  245. Public Sub SetColorKey(Alpha As Integer, Red As Integer, Green As Integer, Blue As Integer)
  246.     TextureColorKey = D3DColorARGB(Alpha, Red, Green, Blue)
  247. End Sub
  248.  
  249. Public Function GetColorKey() As Long
  250.     GetColorKey = TextureColorKey
  251. End Function
  252.  
  253. 'This sets up the view rect, where the maps and sprites are actually drawn
  254. Public Sub SetUpMapView(mLeft As Single, mTop As Single, mRight As Single, mBottom As Single, mClip As Single)
  255. 'place Values into mapview rect
  256. With MapView
  257.     .Left = mLeft
  258.     .Right = mRight
  259.     .Top = mTop
  260.     .Bottom = mBottom
  261. End With
  262.  
  263. MapClip = mClip
  264.  
  265. End Sub
  266.  
  267. 'Sub to copy rect from one texture to another
  268. Public Sub TextureCopyRects(SourceIndex As Variant, DestIndex As Variant, GetX As Variant, GetY As Variant, PutX As Variant, PutY As Variant, Width As Variant, Height As Variant)
  269. 'temp surfaces and Textures
  270.     Dim DestTexture As Direct3DTexture8
  271.     Dim DestSurface As Direct3DSurface8
  272.     Dim SourceTexture As Direct3DTexture8
  273.     Dim SourceSurface As Direct3DSurface8
  274.     
  275. 'Set textures to temps
  276.     Set DestTexture = Texture(DestIndex).GetTexture
  277.     Set DestSurface = DestTexture.GetSurfaceLevel(0)
  278.     
  279.     Set SourceTexture = Texture(SourceIndex).GetTexture
  280.     Set SourceSurface = SourceTexture.GetSurfaceLevel(0)
  281.     
  282. 'Set Up Rects
  283.     With GRect
  284.         .Left = GetX
  285.         .Top = GetY
  286.         .Right = .Left + Width
  287.         .Bottom = .Top + Height
  288.     End With
  289.     
  290.     With PRect
  291.         .Left = PutX
  292.         .Top = PutY
  293.         .Right = .Left + Width
  294.         .Bottom = .Top + Height
  295.     End With
  296.     
  297. 'Blt from texture to texture
  298. Direct3DDevice.CopyRects SourceSurface, GRect, 1, DestSurface, PRect
  299.  
  300. Texture(DestIndex).SetTexture DestTexture
  301.  
  302. End Sub
  303.  
  304. Public Function GetDisplayOn() As Boolean
  305.     GetDisplayOn = DaBoodaDisplayOn
  306. End Function
  307.  
  308. Public Function GetSoundOn() As Boolean
  309.     GetSoundOn = DaBoodaSoundOn
  310. End Function
  311.  
  312. Public Function GetMusicOn() As Boolean
  313.     GetMusicOn = DaBoodaMusicOn
  314. End Function
  315.  
  316. Public Function GetKeyInputOn() As Boolean
  317.     GetKeyInputOn = DaBoodaKeyInputOn
  318. End Function
  319.  
  320. Public Function GetMouseOn() As Boolean
  321.     GetMouseOn = DaBoodaMouseOn
  322. End Function
  323.  
  324. Public Function GetJoyStickOn() As Boolean
  325.     GetJoyStickOn = DaBoodaJoyStickOn
  326. End Function
  327.  
  328. 'This Sub is important
  329. 'It takes a pixel value for texture and returns it into a value
  330. 'from 0 to 1
  331. Private Function TextureValue(Total As Single, Current As Single) As Single
  332. Dim PixelTex As Single
  333. PixelTex = 1 / (Total)
  334. TextureValue = PixelTex * (Current)
  335. End Function
  336.  
  337. 'This Function Makes the Strips
  338. Private Function MakeStrip(x As Single, y As Single, z As Single, rhw As Single, Color As Long, specular As Long, tu As Single, tv As Single) As TLVertex
  339. MakeStrip.x = x
  340. MakeStrip.y = y
  341. MakeStrip.z = z
  342. MakeStrip.rhw = rhw
  343. MakeStrip.Color = Color
  344. MakeStrip.specular = specular
  345. MakeStrip.tu = tu
  346. MakeStrip.tv = tv
  347.  
  348. End Function
  349.  
  350. 'Rotation Functions
  351. Public Function RotateX(x As Single, y As Single, angle As Single) As Single
  352. Dim TX As Single, TAngle As Single
  353. 'turns the angle degrees into radians
  354. TAngle = angle * (3.141592654 / 180)
  355.  
  356. 'Rotate on axis
  357. TX = x * Cos(TAngle) - y * Sin(TAngle)
  358.  
  359. RotateX = TX
  360.  
  361. End Function
  362.  
  363. Public Function RotateY(x As Single, y As Single, angle As Single) As Single
  364. Dim TY As Single, TAngle As Single
  365. 'turns the angle degrees into radians
  366. TAngle = angle * (3.141592654 / 180)
  367.  
  368. 'Rotate on axis
  369. TY = y * Cos(TAngle) + x * Sin(TAngle)
  370.  
  371. RotateY = TY
  372.  
  373. End Function
  374.  
  375. 'This Sub is Perhaps my neatest invention...it sets a sprites angle according to another
  376. 'this is good for tracking
  377. Public Sub SetAutoAngle(FromSprite As Variant, ToSprite As Variant)
  378.     Dim X1 As Single, Y1 As Single
  379.     Dim X2 As Single, Y2 As Single
  380.     Dim FSprite As DaBoodaSprite, tSprite As DaBoodaSprite
  381.     Dim fAngle As Single
  382.     
  383.     Set FSprite = Sprite(FromSprite)
  384.     Set tSprite = Sprite(ToSprite)
  385.     
  386.     X1 = FSprite.GetXPosition + (FSprite.GetWidth / 2)
  387.     X2 = tSprite.GetXPosition + (tSprite.GetWidth / 2)
  388.     Y1 = FSprite.GetYPosition + (FSprite.GetHeight / 2)
  389.     Y2 = tSprite.GetYPosition + (tSprite.GetHeight / 2)
  390.     
  391.     fAngle = RetrieveAngle(X1, Y1, X2, Y2)
  392.         
  393.     Sprite(FromSprite).SetRotationAngle fAngle
  394.     
  395. End Sub
  396.  
  397. 'this sub Returns an angle according to two positions
  398. Public Function RetrieveAngle(FromX As Single, FromY As Single, ToX As Single, ToY As Single) As Single
  399.     Dim Result As Single
  400.     Dim DiffX As Single, DiffY As Single
  401.     Dim FromPoint As Point, ToPoint As Point
  402.     
  403.     FromPoint.x = FromX: FromPoint.y = FromY
  404.     ToPoint.x = ToX: ToPoint.y = ToY
  405.     
  406.     DiffX = ToPoint.x - FromPoint.x
  407.     DiffY = ToPoint.y - FromPoint.y
  408.     
  409.     If DiffX = 0 And FromPoint.y > ToPoint.y Then
  410.         RetrieveAngle = 0
  411.         Exit Function
  412.     End If
  413.     
  414.     If DiffX = 0 And ToPoint.y > FromPoint.y Then
  415.         RetrieveAngle = 180
  416.         Exit Function
  417.     End If
  418.     
  419.     If DiffX = 0 And DiffY = 0 Then
  420.         RetrieveAngle = 0
  421.         Exit Function
  422.     End If
  423.     
  424.     Result = Atn(DiffY / DiffX) * 180 / 3.14
  425.     
  426.     If FromPoint.x > ToPoint.x Then Result = Result - 90
  427.     If FromPoint.x < ToPoint.x Then Result = Result + 90
  428.     
  429.     If Result < 0 Then
  430.         Result = Result + 360
  431.     End If
  432.     
  433.     RetrieveAngle = Result
  434.     
  435. End Function
  436.  
  437. 'Simple Function Returns Random Number
  438. Public Function GetRandomNumber(Random As Single, Optional Offset As Single = 1) As Single
  439.     Randomize Timer
  440.     GetRandomNumber = Int(Rnd * Random) + Offset
  441. End Function
  442.  
  443. 'This is a function to check to sprites for collision
  444. Public Function CheckSpriteCollision(Sprite1 As Variant, Sprite2 As Variant) As Boolean
  445.     Dim FSprite As DaBoodaSprite
  446.     Dim tSprite As DaBoodaSprite
  447.     
  448.     Set FSprite = Sprite(Sprite1)
  449.     Set tSprite = Sprite(Sprite2)
  450.     
  451.     Dim fRect As RECT
  452.     Dim tRect As RECT
  453.     
  454.     With fRect
  455.         .Left = FSprite.GetXPosition
  456.         .Right = .Left + FSprite.GetWidth
  457.         .Top = FSprite.GetYPosition
  458.         .Bottom = .Top + FSprite.GetHeight
  459.     End With
  460.     
  461.     With tRect
  462.         .Left = tSprite.GetXPosition
  463.         .Right = .Left + tSprite.GetWidth
  464.         .Top = tSprite.GetYPosition
  465.         .Bottom = .Top + tSprite.GetHeight
  466.     End With
  467.  
  468.     CheckSpriteCollision = RectInRect(fRect, tRect)
  469.     
  470. End Function
  471.  
  472. 'These subs are for collision Detection
  473. Private Function RectInRect(Rect1 As RECT, Rect2 As RECT) As Boolean
  474. Dim CPoint(4) As Point
  475.     RectInRect = False
  476.     
  477.     CPoint(1).x = Rect1.Left: CPoint(1).y = Rect1.Top
  478.     CPoint(2).x = Rect1.Right: CPoint(2).y = Rect1.Top
  479.     CPoint(3).x = Rect1.Left: CPoint(3).y = Rect1.Bottom
  480.     CPoint(4).x = Rect1.Right: CPoint(4).y = Rect1.Bottom
  481.     
  482.     Dim a As Integer
  483.     a = 1
  484.     Do While a < 5
  485.     If PointInRect(CPoint(a).x, CPoint(a).y, Rect2) = True Then
  486.         RectInRect = True
  487.         Exit Function
  488.     End If
  489.     a = a + 1
  490.     Loop
  491.     
  492. End Function
  493.  
  494. Private Function PointInRect(XPosition As Variant, YPosition As Variant, CRect As RECT) As Boolean
  495. If XPosition < CRect.Left Then PointInRect = False: Exit Function
  496. If XPosition > CRect.Right Then PointInRect = False: Exit Function
  497. If YPosition < CRect.Top Then PointInRect = False: Exit Function
  498. If YPosition > CRect.Bottom Then PointInRect = False: Exit Function
  499.  
  500. cSpriteX = XPosition - CRect.Left + 1
  501. cSpriteY = YPosition - CRect.Top + 1
  502. PointInRect = True
  503.  
  504. End Function
  505.  
  506. 'This next Group of subs is for special Collision Detection,
  507. 'Basically the corner is checked and values are returned into variables
  508. 'This is good for finding where your sprites collide
  509. Public Sub CheckUpperLeftSCollision(PointSprite As Variant, CheckSprite As Variant)
  510.     Dim pSprite As DaBoodaSprite, cSprite As DaBoodaSprite
  511.     Dim CheckRect As RECT
  512.  
  513.     Set pSprite = Sprite(PointSprite)
  514.     Set cSprite = Sprite(CheckSprite)
  515.     
  516.     With CheckRect
  517.         .Left = cSprite.GetXPosition
  518.         .Top = cSprite.GetYPosition
  519.         .Right = .Left + cSprite.GetWidth
  520.         .Bottom = .Top + cSprite.GetHeight
  521.     End With
  522.     
  523.     cSpriteHit = PointInRect(pSprite.GetXPosition, pSprite.GetYPosition, CheckRect)
  524.     
  525. End Sub
  526.  
  527. Public Sub CheckUpperRightSCollision(PointSprite As Variant, CheckSprite As Variant)
  528.     Dim pSprite As DaBoodaSprite, cSprite As DaBoodaSprite
  529.     Dim CheckRect As RECT
  530.  
  531.     Set pSprite = Sprite(PointSprite)
  532.     Set cSprite = Sprite(CheckSprite)
  533.     
  534.     With CheckRect
  535.         .Left = cSprite.GetXPosition
  536.         .Top = cSprite.GetYPosition
  537.         .Right = .Left + cSprite.GetWidth
  538.         .Bottom = .Top + cSprite.GetHeight
  539.     End With
  540.     
  541.     cSpriteHit = PointInRect(pSprite.GetXPosition + pSprite.GetWidth, pSprite.GetYPosition, CheckRect)
  542.     
  543. End Sub
  544.  
  545. Public Sub CheckLowerLeftSCollision(PointSprite As Variant, CheckSprite As Variant)
  546.     Dim pSprite As DaBoodaSprite, cSprite As DaBoodaSprite
  547.     Dim CheckRect As RECT
  548.  
  549.     Set pSprite = Sprite(PointSprite)
  550.     Set cSprite = Sprite(CheckSprite)
  551.     
  552.     With CheckRect
  553.         .Left = cSprite.GetXPosition
  554.         .Top = cSprite.GetYPosition
  555.         .Right = .Left + cSprite.GetWidth
  556.         .Bottom = .Top + cSprite.GetHeight
  557.     End With
  558.     
  559.     cSpriteHit = PointInRect(pSprite.GetXPosition, pSprite.GetYPosition + pSprite.GetHeight, CheckRect)
  560.     
  561. End Sub
  562.  
  563. Public Sub CheckLowerRightSCollision(PointSprite As Variant, CheckSprite As Variant)
  564.     Dim pSprite As DaBoodaSprite, cSprite As DaBoodaSprite
  565.     Dim CheckRect As RECT
  566.  
  567.     Set pSprite = Sprite(PointSprite)
  568.     Set cSprite = Sprite(CheckSprite)
  569.     
  570.     With CheckRect
  571.         .Left = cSprite.GetXPosition
  572.         .Top = cSprite.GetYPosition
  573.         .Right = .Left + cSprite.GetWidth
  574.         .Bottom = .Top + cSprite.GetHeight
  575.     End With
  576.     
  577.     cSpriteHit = PointInRect(pSprite.GetXPosition + pSprite.GetWidth, pSprite.GetYPosition + pSprite.GetHeight, CheckRect)
  578.     
  579. End Sub
  580.  
  581. 'This sub Plays a directional sound Based on the Center of a sprite
  582. Public Sub PlayDirectionalSound(tSprite As Variant, tSound As Variant)
  583.     Dim Temp As New DaBoodaSprite
  584.     Set Temp = Sprite.Item(tSprite)
  585.     
  586.     Dim cX As Single, cY As Single
  587.     
  588.     cX = Temp.GetWidth / 2
  589.     cY = Temp.GetHeight / 2
  590.     cX = Temp.GetDrawnX + cX
  591.     cY = Temp.GetDrawnY + cY
  592.     
  593.     Sound(tSound).DSPlaySound cX, cY
  594.     
  595. End Sub
  596. 'These next subs actually are used if the programmer is using independent maps
  597. 'the values returned are self explanatory
  598. Public Sub GetSpriteReferencePoint(rSprite As Variant, Width As Single, Height As Single, Optional XOffset As Single, Optional YOffSet As Single)
  599.     Dim Xpos As Single, Ypos As Single
  600.     Xpos = Sprite(rSprite).GetTempXPosition + XOffset
  601.     Ypos = Sprite(rSprite).GetTempYPosition + YOffSet
  602.     
  603.     rSpriteX = Int(Xpos / Width)
  604.     rSpriteY = Int(Ypos / Height)
  605.     
  606.     rSpriteDiffX = Xpos - (rSpriteX * Width) + 1
  607.     rSpriteDiffY = Ypos - (rSpriteY * Height) + 1
  608.     
  609.     rSpriteX = rSpriteX + 1
  610.     rSpriteY = rSpriteY + 1
  611.  
  612. End Sub
  613.  
  614. Public Function GetRSpriteX() As Single
  615.     GetRSpriteX = rSpriteX
  616. End Function
  617.  
  618. Public Function GetRSpriteY() As Single
  619.     GetRSpriteY = rSpriteY
  620. End Function
  621.  
  622. Public Function GetRSpriteDiffX() As Single
  623.     GetRSpriteDiffX = rSpriteDiffX
  624. End Function
  625.  
  626. Public Function GetRSpriteDiffY() As Single
  627.     GetRSpriteDiffY = rSpriteDiffY
  628. End Function
  629.  
  630. 'Subs to get values from specialchecks
  631. Public Function GetCSpriteHit() As Boolean
  632.     GetCSpriteHit = cSpriteHit
  633. End Function
  634. Public Function GetCSpriteX() As Single
  635.     GetCSpriteX = cSpriteX
  636. End Function
  637. Public Function GetCSpriteY() As Single
  638.     GetCSpriteY = cSpriteY
  639. End Function
  640.  
  641. 'This Subs Check Character to Screen and moves accordingly
  642. Private Sub CheckAutoMoveSprite()
  643.     Dim StartX As Single, StartY As Single
  644.     Dim DiffLeft As Single, DiffRight As Single
  645.     Dim DiffUp As Single, DiffDown As Single
  646.     Dim CLeft As Single, CRight As Single
  647.     Dim CUp As Single, CDown As Single
  648.     Dim cRef As Variant, mRef As Variant
  649.     
  650.     AutoMove.SetMoved False
  651.     
  652.     'Set up References
  653.     cRef = AutoMove.GetSpriteReference
  654.     mRef = AutoMove.GetMapReference
  655.     
  656.     'Set Up StartX and y
  657.     StartX = Map(mRef).GetXPosition
  658.     StartY = Map(mRef).GetYPosition
  659.     
  660.     'Set up Screen
  661.     DiffLeft = (MapView.Right - MapView.Left)
  662.     DiffLeft = (DiffLeft - AutoMove.GetWidth) / 2
  663.     DiffLeft = DiffLeft - StartX
  664.     DiffRight = DiffLeft + AutoMove.GetWidth
  665.     
  666.     DiffUp = (MapView.Bottom - MapView.Top)
  667.     DiffUp = (DiffUp - AutoMove.GetHeight) / 2
  668.     DiffUp = DiffUp - StartY
  669.     DiffDown = DiffUp + AutoMove.GetHeight
  670.  
  671.     'Set up Container
  672.     CLeft = Sprite(cRef).GetXPosition
  673.     CRight = CLeft + Sprite(cRef).GetWidth
  674.     CUp = Sprite(cRef).GetYPosition
  675.     CDown = Sprite(cRef).GetHeight + CUp
  676.     
  677.     'Check and move accordingly
  678.     If CLeft < DiffLeft Then MoveMapRight mRef
  679.     If CRight > DiffRight Then MoveMapLeft mRef
  680.     If CUp < DiffUp Then MoveMapDown mRef
  681.     If CDown > DiffDown Then MoveMapUp mRef
  682.     
  683. End Sub
  684.  
  685. Private Sub UpdateMapToLimit()
  686.     Dim LayerX As Single, LayerY As Single
  687.     Dim IndexX As Integer, IndexY As Integer
  688.     Dim LX As Single, LY As Single
  689.     Dim LimitLeft As Boolean, LimitRight As Boolean, LimitTop As Boolean, LimitBottom As Boolean
  690.     Dim LayerRect As RECT
  691.     Dim LimitRect As RECT
  692.     Dim ScrollX As Single, ScrollY As Single
  693.     Dim AutoMRef As Variant
  694.     Dim AutoSRef As Variant
  695.     Dim XCount As Integer, YCount As Integer
  696.     Dim SubMapWidth As Single
  697.     Dim SubMapHeight As Single
  698.     
  699.     'Get AutoMoveReference
  700.     AutoMRef = AutoMove.GetMapReference
  701.     AutoSRef = AutoMove.GetSpriteReference
  702.     
  703.     'Get SubMapSize
  704.     SubMapWidth = Map(AutoMRef).GetSubMapWidth
  705.     SubMapHeight = Map(AutoMRef).GetSubMapHeight
  706.     
  707.     'GetScrollX and ScrollY
  708.     ScrollX = Map(AutoMRef).GetXPosition
  709.     ScrollY = Map(AutoMRef).GetYPosition
  710.     
  711.     'GetCounts
  712.     XCount = Map(AutoMRef).GetXCount
  713.     YCount = Map(AutoMRef).GetYCount
  714.     
  715.     'Set Layer
  716.     LayerX = (Sprite(AutoSRef).GetWidth) / 2
  717.     LayerY = (Sprite(AutoSRef).GetHeight) / 2
  718.     LayerX = Int((Sprite(AutoSRef).GetXPosition + LayerX) / SubMapWidth) + 1
  719.     LayerY = Int((Sprite(AutoSRef).GetYPosition + LayerY) / SubMapHeight) + 1
  720.     
  721.     LX = LayerX
  722.     LY = LayerY
  723.     
  724.     If LayerX < 1 Then LayerX = XCount - LayerX
  725.     If LayerY < 1 Then LayerY = YCount - LayerY
  726.     If LayerX > XCount Then LayerX = LayerX - XCount
  727.     If LayerY > YCount Then LayerY = LayerY - YCount
  728.     
  729.     IndexX = LayerX
  730.     IndexY = LayerY
  731.     
  732.     'Get Limit
  733.     LimitLeft = Map(AutoMRef).GetSubMapLimitLeft(IndexX, IndexY)
  734.     LimitRight = Map(AutoMRef).GetSubMapLimitRight(IndexX, IndexY)
  735.     LimitTop = Map(AutoMRef).GetSubMapLimitUp(IndexX, IndexY)
  736.     LimitBottom = Map(AutoMRef).GetSubMapLimitDown(IndexX, IndexY)
  737.     
  738.     
  739.     'Set Up Layer Rect
  740.     With LayerRect
  741.         .Left = ((LX - 1) * SubMapWidth) + ScrollX
  742.         .Top = ((LY - 1) * SubMapHeight) + ScrollY
  743.         .Right = .Left + SubMapWidth
  744.         .Bottom = .Top + SubMapHeight
  745.     End With
  746.     
  747.     
  748.     'Set Up LimitRect
  749.     With LimitRect
  750.         .Left = 0
  751.         .Top = 0
  752.         .Right = MapView.Right - MapView.Left
  753.         .Bottom = MapView.Bottom - MapView.Top
  754.     End With
  755.     
  756.     Map(AutoMRef).SetMoveLeft True
  757.     Map(AutoMRef).SetMoveUp True
  758.     Map(AutoMRef).SetMoveRight True
  759.     Map(AutoMRef).SetMoveDown True
  760.     
  761.     'Check For Limits
  762.     If LimitTop = True And LayerRect.Top > LimitRect.Top Then
  763.         ScrollY = ScrollY - AutoMove.GetYIncrement
  764.         Map(AutoMRef).SetMoveDown False
  765.     End If
  766.     
  767.     If LimitBottom = True And LayerRect.Bottom < LimitRect.Bottom Then
  768.         ScrollY = ScrollY + AutoMove.GetYIncrement
  769.         Map(AutoMRef).SetMoveUp False
  770.     End If
  771.     
  772.     If LimitLeft = True And LayerRect.Left > LimitRect.Left Then
  773.         ScrollX = ScrollX - AutoMove.GetXIncrement
  774.         Map(AutoMRef).SetMoveRight False
  775.     End If
  776.     
  777.     If LimitRight = True And LayerRect.Right < LimitRect.Right Then
  778.         ScrollX = ScrollX + AutoMove.GetXIncrement
  779.         Map(AutoMRef).SetMoveLeft False
  780.     End If
  781.     
  782.     If LimitTop = True And LayerRect.Top = LimitRect.Top Then
  783.         Map(AutoMRef).SetMoveDown False
  784.     End If
  785.     If LimitLeft = True And LayerRect.Left = LimitRect.Left Then
  786.         Map(AutoMRef).SetMoveRight False
  787.     End If
  788.     If LimitBottom = True And LayerRect.Bottom = LimitRect.Bottom Then
  789.         Map(AutoMRef).SetMoveUp False
  790.     End If
  791.     If LimitRight = True And LayerRect.Right = LimitRect.Right Then
  792.         Map(AutoMRef).SetMoveLeft False
  793.     End If
  794.     
  795.     'Set Changes into Scrolls
  796.     Map(AutoMRef).SetXPosition ScrollX
  797.     Map(AutoMRef).SetYPosition ScrollY
  798.     
  799. End Sub
  800.  
  801. Private Sub CheckMapLimit()
  802. Dim Index As Integer
  803. Dim Diff As Single, Size As Single
  804.     
  805. If Map.Count = 0 Then Exit Sub
  806.  
  807.     For Index = 1 To Map.Count
  808.         If Map(Index).GetXPosition >= Map(Index).GetWidth Then
  809.             Size = Int(Map(Index).GetXPosition / Map(Index).GetSubMapWidth)
  810.             Diff = Map(Index).GetXPosition - (Size * Map(Index).GetSubMapWidth)
  811.             Map(Index).SetXPosition Diff
  812.         End If
  813.         If Map(Index).GetXPosition <= -Map(Index).GetWidth Then
  814.             Size = Int(Abs(Map(Index).GetXPosition) / Map(Index).GetSubMapWidth)
  815.             Diff = Map(Index).GetXPosition + (Size * Map(Index).GetSubMapWidth)
  816.             Map(Index).SetXPosition Diff
  817.         End If
  818.         If Map(Index).GetYPosition >= Map(Index).GetHeight Then
  819.             Size = Int(Map(Index).GetYPosition / Map(Index).GetSubMapHeight)
  820.             Diff = Map(Index).GetYPosition - (Size * Map(Index).GetSubMapHeight)
  821.             Map(Index).SetYPosition Diff
  822.         End If
  823.         If Map(Index).GetYPosition <= -Map(Index).GetHeight Then
  824.             Size = Int(Abs(Map(Index).GetYPosition) / Map(Index).GetSubMapHeight)
  825.             Diff = Map(Index).GetYPosition + (Size * Map(Index).GetSubMapHeight)
  826.             Map(Index).SetYPosition Diff
  827.         End If
  828. DontUpdate:
  829.     Next Index
  830.  
  831. End Sub
  832.  
  833. Private Sub CheckSpritePosition()
  834.  
  835. Dim Index As Integer
  836. Dim CRect As RECT
  837. Dim Ref As Variant
  838. Dim X1 As Single, Y1 As Single
  839.     For Index = 1 To Sprite.Count
  840.         If Sprite(Index).GetMapReference = "" Then GoTo DontOffset
  841.         Ref = Sprite(Index).GetMapReference
  842.         If Map(Ref).GetLooping = False Then GoTo DontOffset
  843.         
  844.         X1 = Sprite(Index).GetXPosition
  845.         Y1 = Sprite(Index).GetYPosition
  846.  
  847.         With CRect
  848.             .Left = -(Map(Ref).GetXPosition) - MapClip
  849.             .Top = -(Map(Ref).GetYPosition) - MapClip
  850.             .Right = .Left + Map(Ref).GetWidth - 1
  851.             .Bottom = .Top + Map(Ref).GetHeight - 1
  852.         End With
  853.         
  854.     'Check Farthest Right
  855.         If X1 >= CRect.Left + Map(Ref).GetWidth And X1 <= CRect.Right + Map(Ref).GetWidth Then X1 = X1 - Map(Ref).GetWidth
  856.     'Check Farthest Left
  857.         If X1 >= CRect.Left - Map(Ref).GetWidth And X1 <= CRect.Right - Map(Ref).GetWidth Then X1 = X1 + Map(Ref).GetWidth
  858.     'Check Farthest Down
  859.         If Y1 >= CRect.Top + Map(Ref).GetHeight And Y1 <= CRect.Bottom + Map(Ref).GetHeight Then Y1 = Y1 - Map(Ref).GetHeight
  860.     'Check Farthest up
  861.         If Y1 >= CRect.Top - Map(Ref).GetHeight And Y1 <= CRect.Bottom - Map(Ref).GetHeight Then Y1 = Y1 + Map(Ref).GetHeight
  862.        
  863.     Sprite(Index).SetXPosition X1
  864.     Sprite(Index).SetYPosition Y1
  865.  
  866. DontOffset:
  867.  
  868.     Next Index
  869. End Sub
  870.  
  871. Private Sub CheckSpriteReferences()
  872.     Dim x As Single, y As Single
  873.     Dim Rx As Single, Ry As Single
  874.     Dim XOrigin As Single, YOrigin As Single
  875.     Dim Index As Integer
  876.     Dim Ref As Variant
  877.     
  878.     For Index = 1 To Sprite.Count
  879.         If Sprite(Index).GetSpriteReference = "" Then GoTo DontReference
  880.         Ref = Sprite(Index).GetSpriteReference
  881.         
  882.         'Get Offsets
  883.         XOrigin = Sprite(Ref).GetXPosition + Sprite(Ref).GetXOrigin
  884.         YOrigin = Sprite(Ref).GetYPosition + Sprite(Ref).GetYOrigin
  885.         
  886.         x = Sprite(Ref).GetXPosition + Sprite(Index).GetTempXPosition - XOrigin
  887.         y = Sprite(Ref).GetYPosition + Sprite(Index).GetTempYPosition - YOrigin
  888.         
  889.         Rx = RotateX(x, y, Sprite(Ref).GetRotationAngle)
  890.         Ry = RotateY(x, y, Sprite(Ref).GetRotationAngle)
  891.         
  892.         Sprite(Index).SetXPosition XOrigin + Rx, True
  893.         Sprite(Index).SetYPosition YOrigin + Ry, True
  894.         
  895.         'Set Rotation
  896.         Sprite(Index).SetRotationAngle Sprite(Ref).GetRotationAngle + Sprite(Index).GetTempRotationAngle, True
  897.         
  898. DontReference:
  899.     Next Index
  900.     
  901. End Sub
  902.  
  903. Public Sub MoveMapUp(Index As Variant)
  904.     If Map(Index).GetMoveUp = True Then
  905.         AutoMove.SetMoved True
  906.         Map(Index).SetYPosition Map(Index).GetYPosition - Map(Index).GetYIncrement
  907.     Dim Index2 As Integer, MapRef As Variant
  908.     MapRef = Map(Index).GetReferenceKey
  909.     For Index2 = 1 To Map.Count
  910.         If Map(Index2).GetYReference = MapRef Then
  911.             Map(Index2).SetYPosition Map(Index2).GetYPosition - Map(Index2).GetYIncrement
  912.         End If
  913.     Next Index2
  914.     End If
  915. End Sub
  916.  
  917. Public Sub MoveMapDown(Index As Variant)
  918.     If Map(Index).GetMoveDown = True Then
  919.         AutoMove.SetMoved True
  920.         Map(Index).SetYPosition Map(Index).GetYPosition + Map(Index).GetYIncrement
  921.     Dim Index2 As Integer, MapRef As Variant
  922.     MapRef = Map(Index).GetReferenceKey
  923.     For Index2 = 1 To Map.Count
  924.         If Map(Index2).GetYReference = MapRef Then
  925.             Map(Index2).SetYPosition Map(Index2).GetYPosition + Map(Index2).GetYIncrement
  926.         End If
  927.     Next Index2
  928.     End If
  929. End Sub
  930.  
  931. Public Sub MoveMapLeft(Index As Variant)
  932.     If Map(Index).GetMoveLeft = True Then
  933.         AutoMove.SetMoved True
  934.         Map(Index).SetXPosition Map(Index).GetXPosition - Map(Index).GetXIncrement
  935.     Dim Index2 As Integer, MapRef As Variant
  936.     MapRef = Map(Index).GetReferenceKey
  937.     For Index2 = 1 To Map.Count
  938.         If Map(Index2).GetXReference = MapRef Then
  939.             Map(Index2).SetXPosition Map(Index2).GetXPosition - Map(Index2).GetXIncrement
  940.         End If
  941.     Next Index2
  942.     End If
  943. End Sub
  944.  
  945. Public Sub MoveMapRight(Index As Variant)
  946.     If Map(Index).GetMoveRight = True Then
  947.         AutoMove.SetMoved True
  948.         Map(Index).SetXPosition Map(Index).GetXPosition + Map(Index).GetXIncrement
  949.     Dim Index2 As Integer, MapRef As Variant
  950.     MapRef = Map(Index).GetReferenceKey
  951.     For Index2 = 1 To Map.Count
  952.         If Map(Index2).GetXReference = MapRef Then
  953.             Map(Index2).SetXPosition Map(Index2).GetXPosition + Map(Index2).GetXIncrement
  954.         End If
  955.     Next Index2
  956.     End If
  957. End Sub
  958.  
  959. Public Sub SpriteAngleIncrementUp(Index As Variant, Optional Increment& = 1)
  960.     Dim x As Single, y As Single
  961.     x = RotateX(0, -Increment, Sprite(Index).GetTempRotationAngle)
  962.     y = RotateY(0, -Increment, Sprite(Index).GetTempRotationAngle)
  963.     Sprite(Index).SetXPosition Sprite(Index).GetTempXPosition + x
  964.     Sprite(Index).SetYPosition Sprite(Index).GetTempYPosition + y
  965. End Sub
  966.  
  967. Public Sub SpriteAngleIncrementDown(Index As Variant, Optional Increment As Single)
  968.     Dim x As Single, y As Single
  969.     If Increment = 0 Then Increment = 1
  970.     x = RotateX(0, Increment, Sprite(Index).GetTempRotationAngle)
  971.     y = RotateY(0, Increment, Sprite(Index).GetTempRotationAngle)
  972.     Sprite(Index).SetXPosition Sprite(Index).GetTempXPosition + x
  973.     Sprite(Index).SetYPosition Sprite(Index).GetTempYPosition + y
  974. End Sub
  975.  
  976. Public Sub SpriteAngleIncrementLeft(Index As Variant, Optional Increment As Single)
  977.     Dim x As Single, y As Single
  978.     If Increment = 0 Then Increment = 1
  979.     x = RotateX(-Increment, 0, Sprite(Index).GetTempRotationAngle)
  980.     y = RotateY(-Increment, 0, Sprite(Index).GetTempRotationAngle)
  981.     Sprite(Index).SetXPosition Sprite(Index).GetTempXPosition + x
  982.     Sprite(Index).SetYPosition Sprite(Index).GetTempYPosition + y
  983. End Sub
  984.  
  985. Public Sub SpriteAngleIncrementRight(Index As Variant, Optional Increment As Single)
  986.     Dim x As Single, y As Single
  987.     If Increment = 0 Then Increment = 1
  988.     x = RotateX(Increment, 0, Sprite(Index).GetTempRotationAngle)
  989.     y = RotateY(Increment, 0, Sprite(Index).GetTempRotationAngle)
  990.     Sprite(Index).SetXPosition Sprite(Index).GetTempXPosition + x
  991.     Sprite(Index).SetYPosition Sprite(Index).GetTempYPosition + y
  992. End Sub
  993.  
  994. Public Sub SpriteIncrementUp(Index As Variant, Optional Increment& = 1)
  995.     If Increment = 0 Then Increment = 1
  996.     Sprite(Index).SetYPosition Sprite(Index).GetTempYPosition - Increment
  997. End Sub
  998.  
  999. Public Sub SpriteIncrementDown(Index As Variant, Optional Increment As Single)
  1000.     If Increment = 0 Then Increment = 1
  1001.     Sprite(Index).SetYPosition Sprite(Index).GetTempYPosition + Increment
  1002. End Sub
  1003.  
  1004. Public Sub SpriteIncrementLeft(Index As Variant, Optional Increment As Single)
  1005.     If Increment = 0 Then Increment = 1
  1006.     Sprite(Index).SetXPosition Sprite(Index).GetTempXPosition - Increment
  1007. End Sub
  1008.  
  1009. Public Sub SpriteIncrementRight(Index As Variant, Optional Increment As Single)
  1010.     If Increment = 0 Then Increment = 1
  1011.     Sprite(Index).SetXPosition Sprite(Index).GetTempXPosition + Increment
  1012. End Sub
  1013.  
  1014. 'This is the Render Overlay Sub
  1015. Private Sub RenderOverlay(Order As Integer)
  1016. 'Variables for Positions
  1017.     Dim ULX As Single, ULY As Single
  1018.     Dim URX As Single, URY As Single
  1019.     Dim LLX As Single, LLY As Single
  1020.     Dim LRX As Single, LRY As Single
  1021.     
  1022. 'Variables for Textures
  1023.     Dim TULX As Single, TULY As Single
  1024.     Dim TURX As Single, TURY As Single
  1025.     Dim TLLX As Single, TLLY As Single
  1026.     Dim TLRX As Single, TLRY As Single
  1027.  
  1028. 'Variables for Colors
  1029.     Dim ULColor As Long
  1030.     Dim URColor As Long
  1031.     Dim LLColor As Long
  1032.     Dim LRColor As Long
  1033.     Dim ULSpecular As Long
  1034.     Dim URSpecular As Long
  1035.     Dim LLSpecular As Long
  1036.     Dim LRSpecular As Long
  1037.     
  1038.     
  1039. 'Variables for Rotation
  1040.     Dim Rx As Single
  1041.     Dim Ry As Single
  1042.     Dim XOrigin As Single
  1043.     Dim YOrigin As Single
  1044.     Dim angle As Single
  1045.  
  1046. 'Variables for Texture
  1047.     Dim OverlayTextureSize As Single
  1048.     Dim OverlayTexture As Direct3DTexture8
  1049.     Dim TOverlay As DaBoodaOverlay
  1050.     
  1051. 'Variable for loop
  1052.     Dim Count As Long
  1053. 'Loop through Overlays
  1054.     Count = Order
  1055.     Set TOverlay = Overlay.Item(Count)
  1056.     
  1057. 'Check to see if it is the right order and on
  1058.     If TOverlay.GetVisible = False Then GoTo DontDraw
  1059.  
  1060. 'Get Texture Information
  1061.     Set OverlayTexture = Texture(TOverlay.GetTextureReference).GetTexture
  1062.     OverlayTextureSize = Texture(TOverlay.GetTextureReference).GetSize
  1063.     
  1064. 'Place Positions and rotate in variables
  1065. 'Rotates them too
  1066.     XOrigin = TOverlay.GetPutRectLeft + TOverlay.GetXOrigin
  1067.     YOrigin = TOverlay.GetPutRectTop + TOverlay.GetYOrigin
  1068.     angle = TOverlay.GetRotationAngle
  1069.     
  1070.     ULX = TOverlay.GetPutRectLeft: ULY = TOverlay.GetPutRectTop
  1071.         Rx = ULX - XOrigin: Ry = ULY - YOrigin
  1072.             ULX = XOrigin + RotateX(Rx, Ry, angle): ULY = YOrigin + RotateY(Rx, Ry, angle)
  1073.     
  1074.     URX = TOverlay.GetPutRectRight: URY = TOverlay.GetPutRectTop
  1075.         Rx = URX - XOrigin: Ry = URY - YOrigin
  1076.             URX = XOrigin + RotateX(Rx, Ry, angle): URY = YOrigin + RotateY(Rx, Ry, angle)
  1077.     
  1078.     LLX = TOverlay.GetPutRectLeft: LLY = TOverlay.GetPutRectBottom
  1079.         Rx = LLX - XOrigin: Ry = LLY - YOrigin
  1080.             LLX = XOrigin + RotateX(Rx, Ry, angle): LLY = YOrigin + RotateY(Rx, Ry, angle)
  1081.     
  1082.     LRX = TOverlay.GetPutRectRight: LRY = TOverlay.GetPutRectBottom
  1083.         Rx = LRX - XOrigin: Ry = LRY - YOrigin
  1084.             LRX = XOrigin + RotateX(Rx, Ry, angle): LRY = YOrigin + RotateY(Rx, Ry, angle)
  1085.  
  1086. 'Setup Colors
  1087.     ULColor = TOverlay.GetUpperLeftColor
  1088.     URColor = TOverlay.GetUpperRightColor
  1089.     LLColor = TOverlay.GetLowerLeftColor
  1090.     LRColor = TOverlay.GetLowerRightColor
  1091.     ULSpecular = TOverlay.GetUpperLeftSpecular
  1092.     URSpecular = TOverlay.GetUpperRightSpecular
  1093.     LLSpecular = TOverlay.GetLowerLeftSpecular
  1094.     LRSpecular = TOverlay.GetLowerRightSpecular
  1095.  
  1096. 'setup Textures
  1097.     TULX = TextureValue(OverlayTextureSize, TOverlay.GetGetRectLeft)
  1098.     TULY = TextureValue(OverlayTextureSize, TOverlay.GetGetRectTop)
  1099.     
  1100.     TURX = TextureValue(OverlayTextureSize, TOverlay.GetGetRectRight)
  1101.     TURY = TextureValue(OverlayTextureSize, TOverlay.GetGetRectTop)
  1102.     
  1103.     TLLX = TextureValue(OverlayTextureSize, TOverlay.GetGetRectLeft)
  1104.     TLLY = TextureValue(OverlayTextureSize, TOverlay.GetGetRectBottom)
  1105.     
  1106.     TLRX = TextureValue(OverlayTextureSize, TOverlay.GetGetRectRight)
  1107.     TLRY = TextureValue(OverlayTextureSize, TOverlay.GetGetRectBottom)
  1108.  
  1109. 'MakeStrip........Finally
  1110.     TextureStrip(0) = MakeStrip(ULX, ULY, 0, 1, ULColor, ULSpecular, TULX, TULY)
  1111.     TextureStrip(1) = MakeStrip(URX, URY, 0, 1, URColor, URSpecular, TURX, TURY)
  1112.     TextureStrip(2) = MakeStrip(LLX, LLY, 0, 1, LLColor, LLSpecular, TLLX, TLLY)
  1113.     TextureStrip(3) = MakeStrip(LRX, LRY, 0, 1, LRColor, LRSpecular, TLRX, TLRY)
  1114.     
  1115. 'Set texture
  1116.             Direct3DDevice.SetTexture 0, OverlayTexture
  1117.             
  1118. 'DrawStrip
  1119.             Direct3DDevice.DrawPrimitiveUP D3DPT_TRIANGLESTRIP, 2, TextureStrip(0), Len(TextureStrip(0))
  1120.  
  1121. 'Exit for not Drawn
  1122. DontDraw:
  1123.  
  1124. End Sub
  1125.  
  1126. 'This is the RenderMap Sub
  1127. Private Sub RenderMap(Index As Variant)
  1128.  
  1129. 'Variables for sub
  1130.     Dim X1 As Integer, X2 As Single, Y1 As Integer, Y2 As Single     'These are for positions
  1131.     Dim TopX As Single, TopY As Single                             'These are the top map positions
  1132.     Dim XCount As Integer, YCount As Integer
  1133.     Dim XLayer As Integer, YLayer As Integer
  1134.     Dim XStart As Single, YStart As Single
  1135.     Dim Num As Single
  1136.     
  1137.     Dim ColorUL As Long
  1138.     Dim ColorUR As Long
  1139.     Dim ColorLL As Long
  1140.     Dim ColorLR As Long
  1141.     
  1142.     Dim SpecularUL As Long
  1143.     Dim SpecularUR As Long
  1144.     Dim SpecularLL As Long
  1145.     Dim SpecularLR As Long
  1146.  
  1147.     Dim SubMapWidth As Single
  1148.     Dim SubMapHeight As Single
  1149.     Dim TMap As DaBoodaMap
  1150.     
  1151. 'Put Index into Variable
  1152.     Num = Index
  1153.     Set TMap = Map.Item(Num)
  1154.     
  1155. 'Get Sub Map Width and Height
  1156.     SubMapWidth = TMap.GetSubMapWidth
  1157.     SubMapHeight = TMap.GetSubMapHeight
  1158.     
  1159. 'Get MapCounts...How many submaps are viewed on screen
  1160. Dim MapXCount As Single, MapYCount As Single
  1161. MapXCount = MapView.Right - MapView.Left
  1162. MapYCount = MapView.Bottom - MapView.Top
  1163. MapXCount = Int(MapXCount / SubMapWidth)
  1164. MapYCount = Int(MapYCount / SubMapHeight)
  1165.  
  1166. If (MapView.Right - MapView.Left) - (MapXCount * SubMapWidth) > 0 Then MapXCount = MapXCount + 1
  1167. If (MapView.Bottom - MapView.Top) - (MapYCount * SubMapHeight) > 0 Then MapYCount = MapYCount + 1
  1168.  
  1169. MapXCount = MapXCount + 1
  1170. MapYCount = MapYCount + 1
  1171.  
  1172. 'Place Value for offset
  1173.     TopX = TMap.GetXPosition
  1174.     TopY = TMap.GetYPosition
  1175.  
  1176. 'Find StartPosition
  1177.     If TopX > 0 Then
  1178.         X1 = Int(TopX / SubMapWidth) + 1
  1179.         XLayer = 1 - (X1)
  1180.         XStart = TopX - (SubMapWidth * X1)
  1181.     End If
  1182.     If TopY > 0 Then
  1183.         Y1 = Int(TopY / SubMapHeight) + 1
  1184.         YLayer = 1 - (Y1)
  1185.         YStart = TopY - (SubMapHeight * Y1)
  1186.     End If
  1187.     If TopX < 0 Then
  1188.         X1 = Int(Abs(TopX) / SubMapWidth)
  1189.         XLayer = 1 + X1
  1190.         XStart = TopX + (SubMapWidth * X1)
  1191.     End If
  1192.     If TopY < 0 Then
  1193.         Y1 = Int(Abs(TopY) / SubMapHeight)
  1194.         YLayer = 1 + Y1
  1195.         YStart = TopY + (SubMapHeight * Y1)
  1196.     End If
  1197.     If TopX = 0 Then
  1198.         XLayer = 1
  1199.         XStart = 0
  1200.     End If
  1201.     If TopY = 0 Then
  1202.         YLayer = 1
  1203.         YStart = 0
  1204.     End If
  1205.     
  1206. 'Offset these by mapview Values
  1207.             XStart = XStart + MapView.Left
  1208.             YStart = YStart + MapView.Top
  1209.  
  1210. 'Loop through all Maps
  1211.     For XCount = 1 To MapXCount
  1212.         For YCount = 1 To MapYCount
  1213.         
  1214. 'Place position into temp variables
  1215.             X1 = XStart + (SubMapWidth * (XCount - 1))
  1216.             Y1 = YStart + (SubMapHeight * (YCount - 1))
  1217.  
  1218. 'Set x and y into different variables
  1219.     TopX = X1: TopY = Y1
  1220.     
  1221. 'SetLayer Indexes
  1222.     X1 = XLayer + (XCount - 1)
  1223.     Y1 = YLayer + (YCount - 1)
  1224.     If X1 < 1 And TMap.GetLooping = False Then GoTo DontDraw
  1225.     If X1 > TMap.GetXCount And TMap.GetLooping = False Then GoTo DontDraw
  1226.     If Y1 < 1 And TMap.GetLooping = False Then GoTo DontDraw
  1227.     If Y1 > TMap.GetYCount And TMap.GetLooping = False Then GoTo DontDraw
  1228.     
  1229.     If X1 < 1 Then X1 = TMap.GetXCount - Abs(X1)
  1230.     If X1 > TMap.GetXCount Then X1 = (X1 - TMap.GetXCount)
  1231.     If Y1 < 1 Then Y1 = TMap.GetYCount - Abs(Y1)
  1232.     If Y1 > TMap.GetYCount Then Y1 = (Y1 - TMap.GetYCount)
  1233.     
  1234.     If TMap.GetSubMapVisible(X1, Y1) = False Then GoTo DontDraw
  1235.     
  1236.  
  1237. 'GetColors
  1238.     ColorUL = TMap.GetSubMapUpperLeftColor(X1, Y1)
  1239.     ColorUR = TMap.GetSubMapUpperRightColor(X1, Y1)
  1240.     ColorLL = TMap.GetSubMapLowerLeftColor(X1, Y1)
  1241.     ColorLR = TMap.GetSubMapLowerRightColor(X1, Y1)
  1242.     SpecularUL = TMap.GetSubMapUpperLeftSpecular(X1, Y1)
  1243.     SpecularUR = TMap.GetSubMapUpperRightSpecular(X1, Y1)
  1244.     SpecularLL = TMap.GetSubMapLowerLeftSpecular(X1, Y1)
  1245.     SpecularLR = TMap.GetSubMapLowerRightSpecular(X1, Y1)
  1246.     
  1247. 'Set up Strip
  1248.             TextureStrip(0) = MakeStrip(TopX, TopY, 0, 1, ColorUL, SpecularUL, 0, 0)
  1249.             TextureStrip(1) = MakeStrip(TopX + SubMapWidth, TopY, 0, 1, ColorUR, SpecularUR, 1, 0)
  1250.             TextureStrip(2) = MakeStrip(TopX, TopY + SubMapHeight, 0, 1, ColorLL, SpecularLL, 0, 1)
  1251.             TextureStrip(3) = MakeStrip(TopX + SubMapWidth, TopY + SubMapHeight, 0, 1, ColorLR, SpecularLR, 1, 1)
  1252.  
  1253. 'Set texture
  1254.             Direct3DDevice.SetTexture 0, Texture(TMap.GetSubMapTextureReference(X1, Y1)).GetTexture
  1255.             
  1256. 'DrawStrip
  1257.             Direct3DDevice.DrawPrimitiveUP D3DPT_TRIANGLESTRIP, 2, TextureStrip(0), Len(TextureStrip(0))
  1258.  
  1259. 'A goto point to goto if layer isn't Drawn
  1260. DontDraw:
  1261.         Next YCount
  1262.     Next XCount
  1263.  
  1264. End Sub
  1265.     
  1266.  
  1267.  
  1268. 'This is the Render Sub, Zorder is put in to see which ones are drawn
  1269. Private Sub RenderSprite(Order As Integer)
  1270. 'Variables for Positions
  1271.     Dim sPut(4) As Point
  1272.     Dim SpriteRect As RECT
  1273.     Dim CheckRect As RECT
  1274.     
  1275. 'Variables for Textures
  1276.     Dim sGet(4) As Point
  1277.     Dim TrueCount As Integer
  1278.     Dim TextureRef As Variant
  1279.     Dim TextureSize As Single
  1280.     Dim keyRef As Variant
  1281.     
  1282. 'Variables for Colors
  1283.     Dim Color1 As Long, Color2 As Long, Color3 As Long, Color4 As Long
  1284.     Dim Specular1 As Long, Specular2 As Long, Specular3 As Long, Specular4 As Long
  1285.     
  1286. 'Variables for Rotation
  1287.     Dim Rx As Single
  1288.     Dim Ry As Single
  1289.     Dim XOrigin As Single
  1290.     Dim YOrigin As Single
  1291.     Dim angle As Single
  1292.     
  1293. 'Variable for loop
  1294.     Dim Count As Long
  1295.     Dim LX As Single, LY As Single
  1296.     Dim a As Single
  1297.     Dim mLx As Single
  1298.     Dim mLy As Single
  1299.     
  1300. 'Variables for offscreen Check
  1301.     Dim Rect1 As RECT
  1302.     Dim Rect2 As RECT
  1303.     Dim Rect3 As RECT
  1304.     Dim StartX As Single, StartY As Single
  1305.     Dim MaxX As Single, MaxY As Single
  1306.     Dim TempPoint As Point
  1307.     Dim OffX As Single, OffY As Single
  1308.     Dim tSprite As DaBoodaSprite
  1309.     
  1310. 'Loop through Sprites
  1311.     Count = Order
  1312.         Set tSprite = Sprite.Item(Count)
  1313.  
  1314. 'Check to see if it is the right order and on
  1315.     If tSprite.GetVisible = False Then GoTo DontDraw
  1316.     If tSprite.GetTextureReference = "" Then GoTo DontDraw
  1317.     
  1318.     'Get StartPoint
  1319.     If tSprite.GetMapReference <> "" Then
  1320.     StartX = Map(tSprite.GetMapReference).GetXPosition
  1321.     StartY = Map(tSprite.GetMapReference).GetYPosition
  1322.     Else:
  1323.     StartX = 0
  1324.     StartY = 0
  1325.     End If
  1326.     
  1327.     'Find Initial Positions
  1328.     With SpriteRect
  1329.         .Left = tSprite.GetXPosition + StartX + MapView.Left
  1330.         .Right = .Left + tSprite.GetWidth
  1331.         .Top = tSprite.GetYPosition + StartY + MapView.Top
  1332.         .Bottom = .Top + tSprite.GetHeight
  1333.     End With
  1334.  
  1335.     'Set Drawn X and Y
  1336.     Sprite(Count).SetDrawnX SpriteRect.Left - MapView.Left
  1337.     Sprite(Count).SetDrawnY SpriteRect.Top - MapView.Top
  1338.     
  1339.     'Set Check Rect with Clip
  1340.     With CheckRect
  1341.         .Left = MapView.Left - MapClip
  1342.         .Top = MapView.Top - MapClip
  1343.         .Right = MapView.Right + MapClip
  1344.         .Bottom = MapView.Bottom + MapClip
  1345.     End With
  1346.     
  1347.     'Check to see if drawn
  1348.     Sprite(Count).SetDrawn False
  1349.     If RectInRect(SpriteRect, CheckRect) = True Then Sprite(Count).SetDrawn True
  1350.     If Sprite(Count).GetDrawn = False Then GoTo DontDraw
  1351.  
  1352. 'Place Positions and rotate in variables
  1353. 'Rotates them too
  1354.     XOrigin = tSprite.GetXOrigin
  1355.     YOrigin = tSprite.GetYOrigin
  1356.     angle = tSprite.GetRotationAngle
  1357.     
  1358.     XOrigin = SpriteRect.Left + XOrigin: YOrigin = SpriteRect.Top + YOrigin
  1359.     
  1360.         Rx = SpriteRect.Left - XOrigin: Ry = SpriteRect.Top - YOrigin
  1361.             sPut(1).x = XOrigin + RotateX(Rx, Ry, angle): sPut(1).y = YOrigin + RotateY(Rx, Ry, angle)
  1362.     
  1363.         Rx = SpriteRect.Right - XOrigin: Ry = SpriteRect.Top - YOrigin
  1364.             sPut(2).x = XOrigin + RotateX(Rx, Ry, angle): sPut(2).y = YOrigin + RotateY(Rx, Ry, angle)
  1365.     
  1366.         Rx = SpriteRect.Left - XOrigin: Ry = SpriteRect.Bottom - YOrigin
  1367.             sPut(3).x = XOrigin + RotateX(Rx, Ry, angle): sPut(3).y = YOrigin + RotateY(Rx, Ry, angle)
  1368.     
  1369.         Rx = SpriteRect.Right - XOrigin: Ry = SpriteRect.Bottom - YOrigin
  1370.             sPut(4).x = XOrigin + RotateX(Rx, Ry, angle): sPut(4).y = YOrigin + RotateY(Rx, Ry, angle)
  1371.  
  1372. 'Setup Colors
  1373.     Color1 = tSprite.GetUpperLeftColor
  1374.     Color2 = tSprite.GetUpperRightColor
  1375.     Color3 = tSprite.GetLowerLeftColor
  1376.     Color4 = tSprite.GetLowerRightColor
  1377.     Specular1 = tSprite.GetUpperLeftSpecular
  1378.     Specular2 = tSprite.GetUpperRightSpecular
  1379.     Specular3 = tSprite.GetLowerLeftSpecular
  1380.     Specular4 = tSprite.GetLowerRightSpecular
  1381.  
  1382. 'Texture Reference
  1383.     TextureRef = tSprite.GetTextureReference
  1384.     TextureSize = Texture(TextureRef).GetSize
  1385.     
  1386. 'setup Textures
  1387.     sGet(1).x = TextureValue(TextureSize, tSprite.GetGetRectLeft)
  1388.     sGet(1).y = TextureValue(TextureSize, tSprite.GetGetRectTop)
  1389.     
  1390.     sGet(2).x = TextureValue(TextureSize, tSprite.GetGetRectLeft + tSprite.GetGetRectWidth)
  1391.     sGet(2).y = TextureValue(TextureSize, tSprite.GetGetRectTop)
  1392.     
  1393.     sGet(3).x = TextureValue(TextureSize, tSprite.GetGetRectLeft)
  1394.     sGet(3).y = TextureValue(TextureSize, tSprite.GetGetRectTop + tSprite.GetGetRectHeight)
  1395.     
  1396.     sGet(4).x = TextureValue(TextureSize, tSprite.GetGetRectLeft + tSprite.GetGetRectWidth)
  1397.     sGet(4).y = TextureValue(TextureSize, tSprite.GetGetRectTop + tSprite.GetGetRectHeight)
  1398.  
  1399. 'MakeStrip........Finally.........yeah definitly
  1400.     TextureStrip(0) = MakeStrip(sPut(1).x, sPut(1).y, 0, 1, Color1, Specular1, sGet(1).x, sGet(1).y)
  1401.     TextureStrip(1) = MakeStrip(sPut(2).x, sPut(2).y, 0, 1, Color2, Specular2, sGet(2).x, sGet(2).y)
  1402.     TextureStrip(2) = MakeStrip(sPut(3).x, sPut(3).y, 0, 1, Color3, Specular3, sGet(3).x, sGet(3).y)
  1403.     TextureStrip(3) = MakeStrip(sPut(4).x, sPut(4).y, 0, 1, Color4, Specular4, sGet(4).x, sGet(4).y)
  1404.     
  1405. 'Set texture
  1406.             Direct3DDevice.SetTexture 0, Texture(TextureRef).GetTexture
  1407.             
  1408. 'DrawStrip
  1409.             Direct3DDevice.DrawPrimitiveUP D3DPT_TRIANGLESTRIP, 2, TextureStrip(0), Len(TextureStrip(0))
  1410.  
  1411. 'Exit for not Drawn
  1412. DontDraw:
  1413.  
  1414. End Sub
  1415.  
  1416. Private Sub RenderText(Order As Integer)
  1417.     Dim TText As DaBoodaText
  1418.     Set TText = TextEx.Item(Order)
  1419.     If TText.GetVisible = False Then Exit Sub
  1420.     
  1421.     With TextRect
  1422.         .Left = TText.GetXPosition
  1423.         .Top = TText.GetYPosition
  1424.         .Right = .Left + TText.GetWidth
  1425.         .Bottom = .Top + TText.GetHeight
  1426.     End With
  1427.     
  1428.     D3DX.DrawText ScreenFont, TText.GetColor, TText.GetText, TextRect, DT_TOP Or DT_LEFT
  1429.     
  1430. End Sub
  1431.  
  1432. Public Sub CreateFont(Name As String, Size As Single, Optional Bold As Boolean, Optional Italic As Boolean, Optional Underline As Boolean, Optional StrikeThru As Boolean)
  1433.     With StandardFont
  1434.         .Name = Name
  1435.         .Size = Size
  1436.         .Bold = Bold
  1437.         .Italic = Italic
  1438.         .Underline = Underline
  1439.         .Strikethrough = StrikeThru
  1440.     End With
  1441.     
  1442.     Set ScreenFontDesc = StandardFont
  1443.     Set ScreenFont = D3DX.CreateFont(Direct3DDevice, ScreenFontDesc.hFont)
  1444.     
  1445. End Sub
  1446.  
  1447. Public Sub SetScreenToAutoMoveSprite(Optional Speed As Single)
  1448.     Dim tWidth As Single, tHeight As Single
  1449.     Dim tXIncrement As Single, tYIncrement As Single
  1450.     Dim tmXincrement As Single, tmYIncrement As Single
  1451.     Dim Index As Integer, OutLoop As Boolean
  1452.     
  1453.     If Speed = 0 Then Speed = 1
  1454.     tWidth = AutoMove.GetWidth
  1455.     tHeight = AutoMove.GetHeight
  1456.     tXIncrement = AutoMove.GetXIncrement
  1457.     tYIncrement = AutoMove.GetYIncrement
  1458.     tmXincrement = Map(AutoMove.GetMapReference).GetXIncrement
  1459.     tmYIncrement = Map(AutoMove.GetMapReference).GetYIncrement
  1460.     
  1461.     AutoMove.SetWidth Sprite(AutoMove.GetSpriteReference).GetWidth
  1462.     AutoMove.SetHeight Sprite(AutoMove.GetSpriteReference).GetHeight
  1463.     AutoMove.SetXIncrement Speed
  1464.     AutoMove.SetYIncrement Speed
  1465.     Map(AutoMove.GetMapReference).SetXIncrement Speed
  1466.     Map(AutoMove.GetMapReference).SetYIncrement Speed
  1467.     
  1468.         AutoMove.SetMoved False
  1469.         OutLoop = False
  1470.         
  1471.     Do While OutLoop = False
  1472.         CheckAutoMoveSprite
  1473.         UpdateMapToLimit
  1474.         If AutoMove.GetMoved = False Then OutLoop = True
  1475.         DoEvents
  1476.     Loop
  1477.     
  1478.     AutoMove.SetWidth tWidth
  1479.     AutoMove.SetHeight tHeight
  1480.     AutoMove.SetXIncrement tXIncrement
  1481.     AutoMove.SetYIncrement tYIncrement
  1482.     Map(AutoMove.GetMapReference).SetXIncrement tmXincrement
  1483.     Map(AutoMove.GetMapReference).SetYIncrement tmYIncrement
  1484.     
  1485. End Sub
  1486.  
  1487. Private Sub Class_Terminate()
  1488.     'Terminate All
  1489.         Set Sprite = Nothing
  1490.         Set Texture = Nothing
  1491.         Set Map = Nothing
  1492.         Set Overlay = Nothing
  1493.         Set FPS = Nothing
  1494.         Set AutoMove = Nothing
  1495.         Set Sound = Nothing
  1496.         Set KeyInput = Nothing
  1497.         Set Music = Nothing
  1498.         Set TextEx = Nothing
  1499.         Set Mouse = Nothing
  1500.         
  1501.         Set D3DX = Nothing
  1502.         Set Direct3DDevice = Nothing
  1503.         Set Direct3D = Nothing
  1504.         Set DirectX = Nothing
  1505.         
  1506.         
  1507.     If DaBoodaKeyInputOn = True Then
  1508.         kDirectInputDevice.Unacquire
  1509.         Set kDirectInputDevice = Nothing
  1510.         Set DirectInput = Nothing
  1511.     End If
  1512.     
  1513.     If DaBoodaMouseOn = True Then
  1514.         mDirectInputDevice.Unacquire
  1515.         Set mDirectInputDevice = Nothing
  1516.         Set DirectInput = Nothing
  1517.     End If
  1518.     
  1519.     If DaBoodaJoyStickOn = True Then
  1520.         JoyStickDevice.Unacquire
  1521.         Set JoyStickDevice = Nothing
  1522.         Set DirectInput = Nothing
  1523.     End If
  1524.     
  1525.     If DaBoodaMusicOn = True Then
  1526.         DSControl.Stop
  1527.         Set DSAudio = Nothing
  1528.         Set DSEvent = Nothing
  1529.         Set DSControl = Nothing
  1530.         Set DSPosition = Nothing
  1531.     End If
  1532.     
  1533.     If DaBoodaSoundOn = True Then
  1534.         Set DirectSound = Nothing
  1535.         Set DirectSoundEnum = Nothing
  1536.     End If
  1537.     
  1538.         Set ScreenFontDesc = Nothing
  1539.         Set ScreenFont = Nothing
  1540.         
  1541. End Sub
  1542.