⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 drawmap.vb.svn-base

📁 MirUnleashed vb.net Module modMainServer Public WithEvents Socket As New WinsockServer Pub
💻 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 + -