- Basicamente, quando você troca de mapa, há um efeito de "Arraste" do mapa atual que está, para o próximo, resultando em uma animação mais legal.
Vamos ao tutorial, que é full "Client~Side".
Abra seu "Client.Vbp" , e no final de "ModGlobals" adicione isto:
Agora, em "ModGameLogic" , defina bem no início, ou abaixo de "Dim tmr10000 As Long" , isto:
Ainda em "ModGameLogic" , na SUB "GameLoop()" , procure por:
E acima disto, adicione isto:
Agora, em "ModDirectDraw7" , procure na SUB "Render_Graphics()" , procure por:
E substitua por:
Procure por:
E substitua por:
Procure também por:
E substitua por:
Ainda em "ModDirectDraw7" , procure por "Public Sub UpdateCamera()" , e nesta SUB, subtitua isto:
Por isto:
Agora, vá até "ModHandleData" , e em "Sub HandleCheckForMap" , antes de:
Adicione:
Agora, em "ModGeneral" , na SUB "GameInit()" , procure por:
E adicione abaixo, isto:
E por fim, em "ModInput" , na SUB "CheckInputKeys()", abaixo de:
Adicione isto:
E pronto!! Agora você muda entre mapas, com efeito de transição!
Link de Demonstração: https://imgur.com/xEQMee4
Pontos a considerar:
- Versão 1.0;
- Mapas sem tiles setados, como eu fiz ele não preencher o 'Backbuffer', deixa feio, ou seja, pra deixar bonitinho, é só ter ao menos um "ground" setado, que já faz a função;
- Mapas menores indo para mapas maiores, perde-se posição(bug visual somente), mas funciona normal do maior para o menor;
- Falta adicionar detalhes de conforto background como "Não ter transição quando editor de mapa for salvar mapa.." , mas são coisas que não influenciam na gameplay do jogador;
Vamos ao tutorial, que é full "Client~Side".
Abra seu "Client.Vbp" , e no final de "ModGlobals" adicione isto:
- Spoiler:
Public InTransition As Boolean
Public PicPerSec As Long
Agora, em "ModGameLogic" , defina bem no início, ou abaixo de "Dim tmr10000 As Long" , isto:
- Spoiler:
Dim MapTransitionTimer As Long
Ainda em "ModGameLogic" , na SUB "GameLoop()" , procure por:
- Spoiler:
If tmr25 < Tick Then
E acima disto, adicione isto:
- Spoiler:
If InTransition = True Then
'Check for counter
If MapTransitionTimer < GetTickCount Then
Select Case GetPlayerDir(MyIndex)
Case DIR_UP
PicPerSec = PicPerSec + 1
Case DIR_DOWN
PicPerSec = PicPerSec - 1
Case DIR_LEFT
PicPerSec = PicPerSec + 1
Case DIR_RIGHT
PicPerSec = PicPerSec - 1
End Select
MapTransitionTimer = GetTickCount + 50
End If
'Check for map value and correct all position
Select Case GetPlayerDir(MyIndex)
Case DIR_UP
If PicPerSec >= TileView.Bottom Then
PicPerSec = TileView.Bottom
InTransition = False
End If
Case DIR_DOWN
If PicPerSec <= TileView.top Then
PicPerSec = TileView.top
InTransition = False
End If
Case DIR_LEFT
If PicPerSec > TileView.Right Then
PicPerSec = TileView.Right
InTransition = False
End If
Case DIR_RIGHT
If PicPerSec <= TileView.Left Then
PicPerSec = TileView.Left
InTransition = False
End If
End Select
End If
Agora, em "ModDirectDraw7" , procure na SUB "Render_Graphics()" , procure por:
- Spoiler:
' fill it with black
DDS_BackBuffer.BltColorFill rec_pos, 0
E substitua por:
- Spoiler:
' fill it with black, but now when in transition
If Not InTransition Then DDS_BackBuffer.BltColorFill rec_pos, 0
Procure por:
- Spoiler:
' Lock the backbuffer so we can draw text and names
TexthDC = DDS_BackBuffer.GetDC
E substitua por:
- Spoiler:
' Lock the backbuffer so we can draw text and names, but not on transition
If Not InTransition Then TexthDC = DDS_BackBuffer.GetDC
Procure também por:
- Spoiler:
' Release DC
DDS_BackBuffer.ReleaseDC TexthDC
E substitua por:
- Spoiler:
' Release DC, but not when in transition
If Not InTransition Then DDS_BackBuffer.ReleaseDC TexthDC
Ainda em "ModDirectDraw7" , procure por "Public Sub UpdateCamera()" , e nesta SUB, subtitua isto:
- Spoiler:
With TileView
.top = StartY
.Bottom = EndY
.Left = StartX
.Right = EndX
End With
With Camera
.top = offsetY
.Bottom = .top + ScreenY
.Left = offsetX
.Right = .Left + ScreenX
End With
Por isto:
- Spoiler:
'Transition system
If InTransition Then
Select Case GetPlayerDir(MyIndex)
Case DIR_UP
With TileView
.top = (StartY + EndY) - PicPerSec
.Bottom = EndY
.Left = StartX
.Right = EndX
End With
Case DIR_DOWN
With TileView
.top = StartY - PicPerSec
.Bottom = EndY
.Left = StartX
.Right = EndX
End With
With Camera
.top = offsetY
.Bottom = .top + ScreenY
.Left = offsetX
.Right = .Left + ScreenX
End With
Case DIR_LEFT
With TileView
.top = StartY
.Bottom = EndY
.Left = (StartX + EndX) - PicPerSec
.Right = EndX
End With
Case DIR_RIGHT
With TileView
.top = StartY
.Bottom = EndY
.Left = StartX - PicPerSec
.Right = EndX
End With
End Select
With Camera
.top = offsetY
.Bottom = .top + ScreenY
.Left = offsetX
.Right = .Left + ScreenX
End With
Else
With TileView
.top = StartY
.Bottom = EndY
.Left = StartX
.Right = EndX
End With
With Camera
.top = offsetY
.Bottom = .top + ScreenY
.Left = offsetX
.Right = .Left + ScreenX
End With
End If
Agora, vá até "ModHandleData" , e em "Sub HandleCheckForMap" , antes de:
- Spoiler:
' Error handler
Exit Sub
errorhandler:
HandleError "HandleCheckForMap", "modHandleData", Err.Number, Err.Description, Err.Source, Err.HelpContext
Err.Clear
Exit Sub
Adicione:
- Spoiler:
InTransition = True
Select Case GetPlayerDir(MyIndex)
Case DIR_UP
PicPerSec = 0
Case DIR_DOWN
PicPerSec = Map.MaxY
Case DIR_LEFT
PicPerSec = 0
Case DIR_RIGHT
PicPerSec = Map.MaxX
End Select
Agora, em "ModGeneral" , na SUB "GameInit()" , procure por:
- Spoiler:
InTrade = False
E adicione abaixo, isto:
- Spoiler:
InTransition = False
E por fim, em "ModInput" , na SUB "CheckInputKeys()", abaixo de:
- Spoiler:
' If debug mode, handle error then exit out
If Options.Debug = 1 Then On Error GoTo errorhandler
Adicione isto:
- Spoiler:
'Check for transition and block any movement
If InTransition Then Exit Sub
E pronto!! Agora você muda entre mapas, com efeito de transição!
Link de Demonstração: https://imgur.com/xEQMee4
Pontos a considerar:
- Versão 1.0;
- Mapas sem tiles setados, como eu fiz ele não preencher o 'Backbuffer', deixa feio, ou seja, pra deixar bonitinho, é só ter ao menos um "ground" setado, que já faz a função;
- Mapas menores indo para mapas maiores, perde-se posição(bug visual somente), mas funciona normal do maior para o menor;
- Falta adicionar detalhes de conforto background como "Não ter transição quando editor de mapa for salvar mapa.." , mas são coisas que não influenciam na gameplay do jogador;
Créditos
Eu - lucas100vzs/Kotol
Última edição por lucas100vzs em Ter Jun 08, 2021 4:17 pm, editado 1 vez(es)