📄 drawmap.vb.svn-base
字号:
'### Visual Basic.NET and Direct X9 Legend of MiR Project ###'
'### Mir Unleashed Client Draw Map Module ###'
'### http://www.lomcn.co.uk ###' '### Credits to TrueADM and DeathWish ###'
'Loads and draws the map (Tiles and Objects)
'Modifications will be made for faster loading times etc.
Imports Microsoft.DirectX
Imports Microsoft.DirectX.Direct3D
Module DrawMap
Private Const OFFSET_4 = 4294967296.0#
Private Const MAXINT_4 = 2147483647
Private Const OFFSET_2 = 65536
Private Const MAXINT_2 = 32767
Sub LoadMap()
Dim blnIsOdd As Boolean
Dim blnIsOdd2 As Boolean
Dim SizeOfFile As Long
Dim Fno As Integer
Fno = FreeFile()
Dim FileStream As New System.IO.FileStream(My.Application.Info.DirectoryPath & "\Map\" & Actor.MapFileName & ".map", IO.FileMode.Open, IO.FileAccess.Read)
SizeOfFile = FileStream.Length
Dim ByteArray(SizeOfFile) As Byte
FileStream.Read(ByteArray, 0, SizeOfFile)
FileStream.Close()
Map.Width = MakeInt16(ByteArray(0), ByteArray(1))
Map.Height = MakeInt16(ByteArray(2), ByteArray(3))
ReDim Map.Tile(Map.Width - 1, Map.Height - 1)
Dim X, Y As Integer
Dim Number As Long
Dim TempInt As Long
For X = 0 To Map.Width - 1
For Y = 0 To Map.Height - 1
blnIsOdd = CLng(X) And 1
blnIsOdd2 = CLng(Y) And 1
TempInt = MakeInt16(ByteArray(52 + (12 * Number)), ByteArray(53 + (12 * Number))) - 1
If TempInt >= 32767 - 1 Then
Map.Tile(X, Y).TileBig = TempInt - 32768
Map.Tile(X, Y).TileMapCollision = True
If blnIsOdd = False And blnIsOdd2 = False Then
If Not Map.Tile(X, Y).TileBig = -1 Then Map.Tile(X, Y).TileBigExist = True Else Map.Tile(X, Y).TileBigExist = False
Else
Map.Tile(X, Y).TileBigExist = False
End If
Else
Map.Tile(X, Y).TileMapCollision = False
Map.Tile(X, Y).TileBig = TempInt
Map.Tile(X, Y).TileBigExist = True
If blnIsOdd = False And blnIsOdd2 = False Then
If Not Map.Tile(X, Y).TileBig = -1 Then Map.Tile(X, Y).TileBigExist = True Else Map.Tile(X, Y).TileBigExist = False
Else
Map.Tile(X, Y).TileBigExist = False
End If
End If
TempInt = (ByteArray(62 + (12 * Number)))
If Not TempInt = -1 Then
Map.Tile(X, Y).TileObjectSet = TempInt + 1
End If
TempInt = MakeInt16(ByteArray(56 + (12 * Number)), ByteArray(57 + (12 * Number)))
If TempInt >= 32768 Then
Map.Tile(X, Y).TileObject = TempInt - 32768 - 2
If Not Map.Tile(X, Y).TileObject = -2 And Not (Map.Tile(X, Y).TileObject >= 2723 - 2 And Map.Tile(X, Y).TileObject <= 2732 - 2) Then
Map.Tile(X, Y).TileObjectExist = True
ElseIf Not Map.Tile(X, Y).TileObject = -2 And (Map.Tile(X, Y).TileObject >= 2723 - 2 And Map.Tile(X, Y).TileObject <= 2732 - 2) Then
If Actor.MapLight = 0 Or Actor.MapLight = 2 Or Actor.MapLight = 4 Then
AddLight(1, X, Y)
End If
Else
Map.Tile(X, Y).TileObjectExist = False
End If
Else
'If Map.Tile(X, Y).TileObjectSet = 4 Then
'Map.Tile(X, Y).TileObject = TempInt - 1
'Else
Map.Tile(X, Y).TileObject = TempInt - 2
'End If
If Not Map.Tile(X, Y).TileObject < 0 And Not (Map.Tile(X, Y).TileObject >= 2723 - 2 And Map.Tile(X, Y).TileObject <= 2732 - 2) Then
Map.Tile(X, Y).TileObjectExist = True
ElseIf Not Map.Tile(X, Y).TileObject < 0 And (Map.Tile(X, Y).TileObject >= 2723 - 2 And Map.Tile(X, Y).TileObject <= 2732 - 2) Then
If Actor.MapLight = 0 Or Actor.MapLight = 2 Or Actor.MapLight = 4 Then
AddLight(1, X, Y)
End If
Else
Map.Tile(X, Y).TileObjectExist = False
End If
End If
TempInt = MakeInt16(ByteArray(54 + (12 * Number)), ByteArray(55 + (12 * Number))) - 2
If Not TempInt = -2 And TempInt < 200 Then
Map.Tile(X, Y).TileSmallExist = True
Map.Tile(X, Y).TileSmall = TempInt
Else
Map.Tile(X, Y).TileSmallExist = False
End If
Number = Number + 1
Next Y
Next X
End Sub
Public Sub DrawTileMap()
GameSprite.Begin(SpriteFlags.AlphaBlend)
Call DrawTiles(Actor.CurrentX, Actor.CurrentY)
GameSprite.End()
End Sub
Public Sub DrawObjects(ByVal Y As Long, ByVal BaseX As Single, ByVal BaseY As Single)
Dim TempX As Integer
Dim TempY As Integer
'drawtiles for what on the player can see
Dim X As Long
Dim MinimumVal As Integer
Dim MaximumVal As Integer
If BaseX < 11 Then
MinimumVal = BaseX
Else
MinimumVal = 10
End If
If BaseX > Map.Width - 11 Then
MaximumVal = Map.Width - BaseX
Else
MaximumVal = 10
End If
For X = BaseX - MinimumVal To BaseX + MaximumVal
If Not X > UBound(Map.Tile, 1) And Not Y > UBound(Map.Tile, 2) Then
If Map.Tile(X, Y).TileObjectExist = True Then
If WIL_ObjectsImage(Map.Tile(X, Y).TileObjectSet).ImageLoaded(Map.Tile(X, Y).TileObject) = False Then
'load surface
WIL_ObjectsImage(Map.Tile(X, Y).TileObjectSet).ImageLoaded(Map.Tile(X, Y).TileObject) = True
'ObjectTexture(Tile(X, Y).TileObject, Tile(X, Y).TileObjectSet) = LoadTextureFromFile("Objects" & Tile(X, Y).TileObjectSet & ".gil", Tile(X, Y).TileObject, 3, Tile(X, Y).TileObjectSet)
LoadWILObjectsImage(Map.Tile(X, Y).TileObjectSet, Map.Tile(X, Y).TileObject)
End If
If WIL_ObjectsImage(Map.Tile(X, Y).TileObjectSet).ImageLoaded(Map.Tile(X, Y).TileObject) = True And Not WIL_ObjectsImage(Map.Tile(X, Y).TileObjectSet).ImageTexture(Map.Tile(X, Y).TileObject) = Nothing Then
TempY = ((GameHeight / 2) + (32 * (Y - BaseY)) - 68 - 18 - WIL_ObjectsImage(Map.Tile(X, Y).TileObjectSet).ImageHeight(Map.Tile(X, Y).TileObject) + 32 + 10)
TempX = (GameWidth / 2) + (48 * (X - BaseX)) - 32
If Actor.MapLight = 0 Then
GameSprite.Draw(WIL_ObjectsImage(Map.Tile(X, Y).TileObjectSet).ImageTexture(Map.Tile(X, Y).TileObject), Rectangle.Empty, New Microsoft.DirectX.Vector3(0, 0, 0), New Microsoft.DirectX.Vector3(TempX, TempY, 0), Color.SkyBlue)
ElseIf Actor.MapLight = 2 Then
GameSprite.Draw(WIL_ObjectsImage(Map.Tile(X, Y).TileObjectSet).ImageTexture(Map.Tile(X, Y).TileObject), Rectangle.Empty, New Microsoft.DirectX.Vector3(0, 0, 0), New Microsoft.DirectX.Vector3(TempX, TempY, 0), Color.FromArgb(255, 215, 150, 80))
Else
GameSprite.Draw(WIL_ObjectsImage(Map.Tile(X, Y).TileObjectSet).ImageTexture(Map.Tile(X, Y).TileObject), Rectangle.Empty, New Microsoft.DirectX.Vector3(0, 0, 0), New Microsoft.DirectX.Vector3(TempX, TempY, 0), Color.White)
End If
End If
End If
End If
Next X
End Sub
Public Sub DrawTiles(ByVal BaseX As Single, ByVal BaseY As Single)
Dim TempX As Integer
Dim TempY As Integer
Dim X, Y As Integer
Dim MinimumVal As Integer
Dim MaximumVal As Integer
Dim MinimumVal2 As Integer
Dim MaximumVal2 As Integer
If BaseX < 12 Then
MinimumVal = BaseX
Else
MinimumVal = 11
End If
If BaseX > Map.Width - 11 Then
MaximumVal = Map.Width - BaseX
Else
MaximumVal = 10
End If
If BaseY < 12 Then
MinimumVal2 = Actor.CurrentY
Else
MinimumVal2 = 11
End If
If BaseY > Map.Height - 13 Then
MaximumVal2 = Map.Height - BaseY
Else
MaximumVal2 = 12
End If
For X = BaseX - MinimumVal To BaseX + MaximumVal
For Y = BaseY - MinimumVal2 To BaseY + MaximumVal2
If Map.Tile(X, Y).TileBigExist = True Then
If WIL_TilesImage.ImageLoaded(Map.Tile(X, Y).TileBig) = False Then
WIL_TilesImage.ImageLoaded(Map.Tile(X, Y).TileBig) = True
LoadWILTilesImage(Map.Tile(X, Y).TileBig)
'BigTexture(Tile(X, Y).TileBig) = LoadTextureFromFile("Tiles.gil", Tile(X, Y).TileBig, 1, 0)
End If
If WIL_TilesImage.ImageLoaded(Map.Tile(X, Y).TileBig) = True And Not WIL_TilesImage.ImageTexture(Map.Tile(X, Y).TileBig) = Nothing Then
TempY = (GameHeight / 2) + (32 * (Y - (BaseY))) - 68 - 18 + 10
TempX = (GameWidth / 2) + (48 * (X - (BaseX))) - 32
If Actor.MapLight = 0 Then
GameSprite.Draw(WIL_TilesImage.ImageTexture(Map.Tile(X, Y).TileBig), Rectangle.Empty, New Microsoft.DirectX.Vector3(0, 0, 0), New Microsoft.DirectX.Vector3(TempX, TempY, 0), Color.SkyBlue)
ElseIf Actor.MapLight = 2 Then
GameSprite.Draw(WIL_TilesImage.ImageTexture(Map.Tile(X, Y).TileBig), Rectangle.Empty, New Microsoft.DirectX.Vector3(0, 0, 0), New Microsoft.DirectX.Vector3(TempX, TempY, 0), Color.FromArgb(255, 215, 150, 80))
Else
GameSprite.Draw(WIL_TilesImage.ImageTexture(Map.Tile(X, Y).TileBig), Rectangle.Empty, New Microsoft.DirectX.Vector3(0, 0, 0), New Microsoft.DirectX.Vector3(TempX, TempY, 0), Color.White)
End If
End If
End If
If Map.Tile(X, Y).TileSmallExist = True Then
If WIL_SmTilesImage.ImageLoaded(Map.Tile(X, Y).TileSmall) = False Then
WIL_SmTilesImage.ImageLoaded(Map.Tile(X, Y).TileSmall) = True
LoadWILSmTilesImage(Map.Tile(X, Y).TileSmall)
'SmallTexture(Map.Tile(X, Y).TileSmall) = LoadTextureFromFile("SmTiles.gil", Tile(X, Y).TileSmall, 2, 0)
End If
If WIL_SmTilesImage.ImageLoaded(Map.Tile(X, Y).TileSmall) = True And Not WIL_SmTilesImage.ImageTexture(Map.Tile(X, Y).TileSmall) = Nothing Then
TempY = (GameHeight / 2) + (32 * (Y - (BaseY))) - 68 - 18 + 10
TempX = (GameWidth / 2) + (48 * (X - (BaseX))) - 32
If Actor.MapLight = 0 Then
GameSprite.Draw(WIL_SmTilesImage.ImageTexture(Map.Tile(X, Y).TileSmall), Rectangle.Empty, New Microsoft.DirectX.Vector3(0, 0, 0), New Microsoft.DirectX.Vector3(TempX, TempY, 0), Color.SkyBlue)
ElseIf Actor.MapLight = 2 Then
GameSprite.Draw(WIL_SmTilesImage.ImageTexture(Map.Tile(X, Y).TileSmall), Rectangle.Empty, New Microsoft.DirectX.Vector3(0, 0, 0), New Microsoft.DirectX.Vector3(TempX, TempY, 0), Color.FromArgb(255, 215, 150, 80))
Else
GameSprite.Draw(WIL_SmTilesImage.ImageTexture(Map.Tile(X, Y).TileSmall), Rectangle.Empty, New Microsoft.DirectX.Vector3(0, 0, 0), New Microsoft.DirectX.Vector3(TempX, TempY, 0), Color.White)
End If
End If
End If
Next Y
Next X
End Sub
End Module
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -