Suporte ao desenvolvimento de jogos!


    [CS:DE] Fazendo "fogs" funcionar

    Compartilhe
    avatar
    gabriel190
    Membro Ativo
    Membro Ativo

    Mensagens : 278
    Créditos : 19

    [CS:DE] Fazendo "fogs" funcionar

    Mensagem por gabriel190 em Sab Mar 24, 2012 10:31 pm

    Olá pessoal da aldeia!
    Não tem muitos tutoriais de Crystal Shire aki, então eu resolvi colocar alguns que eu achei na net.
    Obs:Não tem uma area de CS:DE emtao resolvi postar aki msm...se n puder me desculpem

    Esse tutoria faz o sistem de fog do jogo funcionar...(akelas neblina sabe...)

    Client Side
    No modTypes procure por Private Type Map Rec e antes do End Type adicione:

    Código:
        Fog As Byte
        FogOpacity As Byte
        FogBlendMode As Byte

    A seguir, na Sub SendMap ache:

    Código:
        With Map
            For x = 1 To MAX_MAP_NPCS
                Buffer.WriteLong .Npc(x)
            Next
        End With

    Entre isso, abaixo do Buffer.WriteLong.Npc(x) adicione isso:

    Código:
        Buffer.WriteByte Map.Fog
        Buffer.WriteByte Map.FogOpacity
        Buffer.WriteByte Map.FogBlendMode

    Agora na sub HandleMapData procure por:

    Código:
        For x = 1 To MAX_MAP_NPCS
            Map.Npc(x) = Buffer.ReadLong
        Next

    Novamente abixo do Map.Npc(x) = Buffer.ReadLong, adicione isso:

    Código:
        Map.Fog = Buffer.ReadByte
        Map.FogOpacity = Buffer.ReadByte
        Map.FogBlendMode = Buffer.ReadByte

    Agora na Sub MapEditorProperties ache:

    Código:
            .scrlBoss = Map.BossNpc

    Abaixo adicione:

    Código:
            .scrlFog.value = Map.Fog
            .scrlFogOpacity.value = Map.FogOpacity
            .scrlFogBlending.value = Map.FogBlendMode

    Procure e troque a Sub DrawFog() por essa aki abaixo:
    Código:
    Public Sub DrawFog()
    Dim fogNum As Long, colour As Long, x As Long, y As Long, renderState As Long
       
        fogNum = Map.Fog
        If fogNum <= 0 Or fogNum > Count_Fog Then Exit Sub
        renderState = Map.FogBlendMode + 1
        colour = D3DColorARGB(Map.FogOpacity, 255, 255, 255)
       
        ' render state
        Select Case renderState
            Case 1 ' Additive
                D3DDevice8.SetTextureStageState 0, D3DTSS_COLOROP, D3DTOP_MODULATE
                D3DDevice8.SetRenderState D3DRS_DESTBLEND, D3DBLEND_ONE
            Case 2 ' Subtractive
                D3DDevice8.SetTextureStageState 0, D3DTSS_COLOROP, D3DTOP_SUBTRACT
                D3DDevice8.SetRenderState D3DRS_SRCBLEND, D3DBLEND_ZERO
                D3DDevice8.SetRenderState D3DRS_DESTBLEND, D3DBLEND_INVSRCCOLOR
        End Select
       
        For x = 0 To 4
            For y = 0 To 3
                'RenderTexture Tex_Fog(fogNum), (x * 256) + fogOffsetX, (y * 256) + fogOffsetY, 0, 0, 256, 256, 256, 256, colour
                RenderTexture Tex_Fog(fogNum), (x * 256), (y * 256), 0, 0, 256, 256, 256, 256, colour
            Next
        Next
       
        ' reset render state
        If renderState > 0 Then
            D3DDevice8.SetRenderState D3DRS_SRCBLEND, D3DBLEND_SRCALPHA
            D3DDevice8.SetRenderState D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA
            D3DDevice8.SetTextureStageState 0, D3DTSS_COLOROP, D3DTOP_MODULATE
        End If
    End Sub
    Nota: Aqui tem 2 linhas de código,1 comentada, que desenha a fog, a do topo é a que meche, a do final aparece também porém ela fica fixa na tela, ela nao se move. Aí voce escolhe qual é melhor para voce.

    Na sub SaveMap Procure por:

    Código:
        Put #f, , Map.BossNpc

    Abaixo adicione:

    Código:
        Put #f, , Map.Fog
        Put #f, , Map.FogOpacity
        Put #f, , Map.FogBlendMode

    Na Sub LoadMap procure por:

    Código:
            Get #f, , Map.BossNpc

    Abaixo adicione:

    Código:
            Get #f, , Map.Fog
            Get #f, , Map.FogOpacity
            Get #f, , Map.FogBlendMode

    Finalmente troque o seu frmEditor_MapProprietis com esse aqui:
    [url=Clike aki para baixar]http://www.touchofdeathforums.com/smf/index.php?action=dlattach;topic=78116.0;attach=20342[/url]

    SERVER SIDE

    Procure pela Private Type MapRec e antes da End Type adicione:

    Código:
        Fog As Byte
        FogOpacity As Byte
        FogBlendMode As Byte

    Agora na Sub HandleMapData Ache:

    Código:
        For x = 1 To MAX_MAP_NPCS
            Map(mapNum).Npc(x) = Buffer.ReadLong
            Call ClearMapNpc(x, mapNum)
        Next

    Abaixo do Map(mapNum).Npc(x) = Buffer.ReadLong adicione:

    Código:
        Map(mapNum).Fog = Buffer.ReadByte
        Map(mapNum).FogOpacity = Buffer.ReadByte
        Map(mapnum).FogBlendMode = Buffer.ReadByte

    Finalmente, na sub MapCache_Create ache:

    Código:
        For x = 1 To MAX_MAP_NPCS
            Buffer.WriteLong Map(mapNum).Npc(x)
        Next

    E abaixo do Buffer.WriteLong Map(mapNum).Npc(x) adicione isso:

    Código:
        Buffer.WriteByte Map(mapNum).Fog
        Buffer.WriteByte Map(mapNum).FogOpacity
        Buffer.WriteByte Map(mapNum).FogBlendMode

    Na sub SaveMap procure por:

    Código:
        Put #F, , Map(mapNum).BossNpc

    Abaixo adicione:

    Código:
        Put #F, , Map(mapNum).Fog
        Put #F, , Map(mapNum).FogOpacity
        Put #F, , Map(mapNum).fogblendmode

    Finamente na Sub LoadMaps procure por:

    Código:
            Get #F, , Map(i).BossNpc

    Abaixo adicione:

    Código:
            Get #F, , Map(i).Fog
            Get #F, , Map(i).FogOpacity
            Get #F, , Map(i).fogblendmode

    E acabamos!

    Agora deve estar assim

    Spoiler:

    Spoiler:

    Creditos:
    Robin por fazer o sistema.
    Jcsnider por termina-lo.
    Eu por traduzir e postar aqui.


    _________________




      Data/hora atual: Qui Abr 26, 2018 10:43 am