wemadeimagelibtexture.vb.svn-base

来自「MirUnleashed vb.net Module modMain」· SVN-BASE 代码 · 共 1,781 行 · 第 1/5 页

SVN-BASE
1,781
字号
'### Visual Basic.NET and Direct X9 Legend of MiR Project ###'
'### Mir Unleashed Client WIL Texture Module ###'
'### http://www.lomcn.co.uk ###' '### Credits to TrueADM and DeathWish ###'

'This basically loads the .WIL and .WIX textures so that they can be drawn.
'Modifications will be made to this later on to improve loading times etc.

Imports Microsoft.DirectX
Imports Microsoft.DirectX.Direct3D

Module LoadWILGraphics

#Region "Load Weapon WIL and WIX"

    Public Sub LoadWILWeaponImage(ByVal Index As Integer)

        Dim FileName As String
        Dim DataStream As System.IO.FileStream


        FileName = My.Application.Info.DirectoryPath & "\Data\Weapon.wil"

        DataStream = New System.IO.FileStream(FileName, IO.FileMode.Open, IO.FileAccess.Read)

        Dim DataArray(14) As Byte

        DataStream.Seek(WIL_WeaponImage.ImageIndex(Index), IO.SeekOrigin.Begin)
        DataStream.Read(DataArray, 0, 12)


        WIL_WeaponImage.ImageWidth(Index) = MakeInt16(DataArray(0), DataArray(1))
        WIL_WeaponImage.ImageHeight(Index) = MakeInt16(DataArray(2), DataArray(3))

        If (MakeInt16(DataArray(4), DataArray(5))) >= 32768 Then
            WIL_WeaponImage.ImageX(Index) = MakeInt16(DataArray(4), DataArray(5)) - 65536
        Else
            WIL_WeaponImage.ImageX(Index) = MakeInt16(DataArray(4), DataArray(5))
        End If

        If (MakeInt16(DataArray(6), DataArray(7))) >= 32768 Then
            WIL_WeaponImage.ImageY(Index) = MakeInt16(DataArray(6), DataArray(7)) - 65536
        Else
            WIL_WeaponImage.ImageY(Index) = MakeInt16(DataArray(6), DataArray(7))
        End If


        Dim Bytes As Integer

        Bytes = WIL_WeaponImage.ImageWidth(Index) * WIL_WeaponImage.ImageHeight(Index)


        ReDim DataArray(Bytes)

        If WIL_WeaponImage.NewWil = False Then

            DataStream.Seek(WIL_WeaponImage.ImageIndex(Index) + 12, IO.SeekOrigin.Begin)

        Else

            DataStream.Seek(WIL_WeaponImage.ImageIndex(Index) + 8, IO.SeekOrigin.Begin)

        End If

        DataStream.Read(DataArray, 0, Bytes)

        DataStream.Close()

        WIL_WeaponImage.ImageTexture(Index) = New Microsoft.DirectX.Direct3D.Texture(D3D, WIL_WeaponImage.ImageWidth(Index), WIL_WeaponImage.ImageHeight(Index), 1, Usage.None, Format.A8R8G8B8, Pool.Managed)

        Dim Stream As GraphicsStream = WIL_WeaponImage.ImageTexture(Index).LockRectangle(0, LockFlags.None)

        Dim S As Integer = 0
        Dim B As Integer = 1
        Dim D As Integer


        While S < Bytes
            'start from left to right of top line
            Stream.WriteByte(CustomPal(DataArray(Bytes + D - (WIL_WeaponImage.ImageWidth(Index) * B))).Blue)
            Stream.WriteByte(CustomPal(DataArray(Bytes + D - (WIL_WeaponImage.ImageWidth(Index) * B))).Green)
            Stream.WriteByte(CustomPal(DataArray(Bytes + D - (WIL_WeaponImage.ImageWidth(Index) * B))).Red)

            If CustomPal(DataArray(Bytes + D - (WIL_WeaponImage.ImageWidth(Index) * B))).Blue = 0 And CustomPal(DataArray(Bytes + D - (WIL_WeaponImage.ImageWidth(Index) * B))).Red = 0 And CustomPal(DataArray(Bytes + D - (WIL_WeaponImage.ImageWidth(Index) * B))).Green = 0 Then
                Stream.WriteByte(0)
            Else
                Stream.WriteByte(255)
            End If

            S = S + 1
            D = D + 1

            If S >= (WIL_WeaponImage.ImageWidth(Index) * B) Then
                B = B + 1
                D = 0
            End If

        End While

        WIL_WeaponImage.ImageTexture(Index).UnlockRectangle(0)
        'WIL_WeaponImage.ImageTexture(Index).

    End Sub

    Public Sub LoadWIXWeaponFile()

        Dim FileName As String
        Dim DataStream As System.IO.FileStream


        FileName = My.Application.Info.DirectoryPath & "\Data\Weapon.WIX"

        DataStream = New System.IO.FileStream(FileName, IO.FileMode.Open, IO.FileAccess.Read)

        Dim DataArray(DataStream.Length) As Byte

        DataStream.Seek(44, IO.SeekOrigin.Begin)
        DataStream.Read(DataArray, 0, DataStream.Length)

        WIL_WeaponImage.ImageCount = MakeInt32(MakeInt16(DataArray(0), DataArray(1)), MakeInt16(DataArray(2), DataArray(3)))

        ReDim WIL_WeaponImage.ImageIndex(WIL_WeaponImage.ImageCount - 1)
        ReDim WIL_WeaponImage.ImageHeight(WIL_WeaponImage.ImageCount - 1)
        ReDim WIL_WeaponImage.ImageWidth(WIL_WeaponImage.ImageCount - 1)
        ReDim WIL_WeaponImage.ImageX(WIL_WeaponImage.ImageCount - 1)
        ReDim WIL_WeaponImage.ImageY(WIL_WeaponImage.ImageCount - 1)
        ReDim WIL_WeaponImage.ImageTexture(WIL_WeaponImage.ImageCount - 1)
        ReDim WIL_WeaponImage.ImageLoaded(WIL_WeaponImage.ImageCount - 1)

        If DataArray(4) = 56 Then
            WIL_WeaponImage.NewWil = True
        Else
            WIL_WeaponImage.NewWil = False
        End If

        Dim I As Integer


        For I = 0 To WIL_WeaponImage.ImageCount - 1

            WIL_WeaponImage.ImageIndex(I) = MakeInt32(MakeInt16(DataArray(8 + (I * 4)), DataArray(9 + (I * 4))), MakeInt16(DataArray(10 + (I * 4)), DataArray(11 + (I * 4))))

        Next I

        DataStream.Close()

    End Sub

#End Region

#Region "Load Human/Player WIL and WIX"

    Public Sub LoadWILHumImage(ByVal Index As Integer)

        Dim FileName As String
        Dim DataStream As System.IO.FileStream

        FileName = My.Application.Info.DirectoryPath & "\Data\Hum.wil"

        DataStream = New System.IO.FileStream(FileName, IO.FileMode.Open, IO.FileAccess.Read)

        Dim DataArray(14) As Byte

        DataStream.Seek(WIL_HumImage.ImageIndex(Index), IO.SeekOrigin.Begin)
        DataStream.Read(DataArray, 0, 12)


        WIL_HumImage.ImageWidth(Index) = MakeInt16(DataArray(0), DataArray(1))
        WIL_HumImage.ImageHeight(Index) = MakeInt16(DataArray(2), DataArray(3))

        If (MakeInt16(DataArray(4), DataArray(5))) >= 32768 Then
            WIL_HumImage.ImageX(Index) = MakeInt16(DataArray(4), DataArray(5)) - 65536
        Else
            WIL_HumImage.ImageX(Index) = MakeInt16(DataArray(4), DataArray(5))
        End If

        If (MakeInt16(DataArray(6), DataArray(7))) >= 32768 Then
            WIL_HumImage.ImageY(Index) = MakeInt16(DataArray(6), DataArray(7)) - 65536
        Else
            WIL_HumImage.ImageY(Index) = MakeInt16(DataArray(6), DataArray(7))
        End If


        Dim Bytes As Integer

        Bytes = WIL_HumImage.ImageWidth(Index) * WIL_HumImage.ImageHeight(Index)


        ReDim DataArray(Bytes)

        DataStream.Seek(WIL_HumImage.ImageIndex(Index) + 12, IO.SeekOrigin.Begin)

        DataStream.Read(DataArray, 0, Bytes)

        DataStream.Close()

        WIL_HumImage.ImageTexture(Index) = New Microsoft.DirectX.Direct3D.Texture(D3D, WIL_HumImage.ImageWidth(Index), WIL_HumImage.ImageHeight(Index), 1, Usage.None, Format.A8R8G8B8, Pool.Managed)

        Dim Stream As GraphicsStream = WIL_HumImage.ImageTexture(Index).LockRectangle(0, LockFlags.None)

        Dim S As Integer = 0
        Dim B As Integer = 1
        Dim D As Integer


        While S < Bytes
            'start from left to right of top line
            Stream.WriteByte(CustomPal(DataArray(Bytes + D - (WIL_HumImage.ImageWidth(Index) * B))).Blue)
            Stream.WriteByte(CustomPal(DataArray(Bytes + D - (WIL_HumImage.ImageWidth(Index) * B))).Green)
            Stream.WriteByte(CustomPal(DataArray(Bytes + D - (WIL_HumImage.ImageWidth(Index) * B))).Red)

            If CustomPal(DataArray(Bytes + D - (WIL_HumImage.ImageWidth(Index) * B))).Blue = 0 And CustomPal(DataArray(Bytes + D - (WIL_HumImage.ImageWidth(Index) * B))).Red = 0 And CustomPal(DataArray(Bytes + D - (WIL_HumImage.ImageWidth(Index) * B))).Green = 0 Then
                Stream.WriteByte(0)
            Else
                Stream.WriteByte(255)
            End If

            S = S + 1
            D = D + 1

            If S >= (WIL_HumImage.ImageWidth(Index) * B) Then
                B = B + 1
                D = 0
            End If

        End While

        WIL_HumImage.ImageTexture(Index).UnlockRectangle(0)
        'WIL_HumImage.ImageTexture(Index).

    End Sub

    Public Sub LoadWIXHumFile()

        Dim FileName As String
        Dim DataStream As System.IO.FileStream


        FileName = My.Application.Info.DirectoryPath & "\Data\Hum.WIX"

        DataStream = New System.IO.FileStream(FileName, IO.FileMode.Open, IO.FileAccess.Read)

        Dim DataArray(DataStream.Length) As Byte

        DataStream.Seek(44, IO.SeekOrigin.Begin)
        DataStream.Read(DataArray, 0, DataStream.Length)

        WIL_HumImage.ImageCount = MakeInt32(MakeInt16(DataArray(0), DataArray(1)), MakeInt16(DataArray(2), DataArray(3)))

        ReDim WIL_HumImage.ImageIndex(WIL_HumImage.ImageCount - 1)
        ReDim WIL_HumImage.ImageHeight(WIL_HumImage.ImageCount - 1)
        ReDim WIL_HumImage.ImageWidth(WIL_HumImage.ImageCount - 1)
        ReDim WIL_HumImage.ImageX(WIL_HumImage.ImageCount - 1)
        ReDim WIL_HumImage.ImageY(WIL_HumImage.ImageCount - 1)
        ReDim WIL_HumImage.ImageTexture(WIL_HumImage.ImageCount - 1)
        ReDim WIL_HumImage.ImageLoaded(WIL_HumImage.ImageCount - 1)


        Dim I As Integer


        For I = 0 To WIL_HumImage.ImageCount - 1

            WIL_HumImage.ImageIndex(I) = MakeInt32(MakeInt16(DataArray(8 + (I * 4)), DataArray(9 + (I * 4))), MakeInt16(DataArray(10 + (I * 4)), DataArray(11 + (I * 4))))

        Next I

        DataStream.Close()

    End Sub

#End Region

#Region "Load Tile WIL and WIX"

    Public Sub LoadWILTilesImage(ByVal Index As Integer)

        Dim FileName As String
        Dim DataStream As System.IO.FileStream


        FileName = My.Application.Info.DirectoryPath & "\Data\Tiles.wil"

        DataStream = New System.IO.FileStream(FileName, IO.FileMode.Open, IO.FileAccess.Read)

        Dim DataArray(14) As Byte



        DataStream.Seek(WIL_TilesImage.ImageIndex(Index), IO.SeekOrigin.Begin)
        DataStream.Read(DataArray, 0, 8)


        WIL_TilesImage.ImageWidth(Index) = MakeInt16(DataArray(0), DataArray(1))
        WIL_TilesImage.ImageHeight(Index) = MakeInt16(DataArray(2), DataArray(3))



        Dim Bytes As Integer

        Bytes = WIL_TilesImage.ImageWidth(Index) * WIL_TilesImage.ImageHeight(Index)


        ReDim DataArray(Bytes)

        DataStream.Seek(WIL_TilesImage.ImageIndex(Index) + 12, IO.SeekOrigin.Begin)

        DataStream.Read(DataArray, 0, Bytes)

        DataStream.Close()

        WIL_TilesImage.ImageTexture(Index) = New Microsoft.DirectX.Direct3D.Texture(D3D, WIL_TilesImage.ImageWidth(Index), WIL_TilesImage.ImageHeight(Index), 1, Usage.None, Format.A8R8G8B8, Pool.Managed)


        Dim Stream As GraphicsStream = WIL_TilesImage.ImageTexture(Index).LockRectangle(0, LockFlags.None)

        Dim S As Integer = 0
        Dim B As Integer = 1
        Dim D As Integer

        While S < Bytes
            'start from left to right of top line
            Stream.WriteByte(CustomPal(DataArray(Bytes + D - (WIL_TilesImage.ImageWidth(Index) * B))).Blue)
            Stream.WriteByte(CustomPal(DataArray(Bytes + D - (WIL_TilesImage.ImageWidth(Index) * B))).Green)
            Stream.WriteByte(CustomPal(DataArray(Bytes + D - (WIL_TilesImage.ImageWidth(Index) * B))).Red)
            Stream.WriteByte(255)
            S = S + 1
            D = D + 1

            If S >= (WIL_TilesImage.ImageWidth(Index) * B) Then
                B = B + 1
                D = 0
            End If

        End While

        WIL_TilesImage.ImageTexture(Index).UnlockRectangle(0)

    End Sub

    Public Sub LoadWIXTilesFile()

        Dim FileName As String
        Dim DataStream As System.IO.FileStream


        FileName = My.Application.Info.DirectoryPath & "\Data\Tiles.WIX"

        DataStream = New System.IO.FileStream(FileName, IO.FileMode.Open, IO.FileAccess.Read)

        Dim DataArray(DataStream.Length) As Byte

        DataStream.Seek(44, IO.SeekOrigin.Begin)
        DataStream.Read(DataArray, 0, DataStream.Length)

        WIL_TilesImage.ImageCount = MakeInt32(MakeInt16(DataArray(0), DataArray(1)), MakeInt16(DataArray(2), DataArray(3)))

        ReDim WIL_TilesImage.ImageIndex(WIL_TilesImage.ImageCount - 1)

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?