Caminata

Gastin.-

01000111 01100001 01111001
Bueno empece un nuevo proyecto 13.x que aporto el sir @Shak y bueno el problema es que la caminata esta trabada con la animacion junta y no puedo lograr ponerla fluida, ya revise todos los th(Problemas, Aportes, Soluciones, etc) del foro y nada, hasta me descargue clientes con la caminata excelente anduve editando los FPS, el Engine_BaseSpeed, ScrollPixelsPerFrameX e Y y no se que onda camina trabado es como que la caminata se quedara quieta en menos de 1 segundo cada tile sucesivamente mientras que lo mantengo.
 
Última edición:

Shak

Evolution
Miembro del equipo
Developer
Especialista de Argentum
Te fijaste en que aos no sucede esto? Porque a mi tambien me dijeron varias veces que en 13.x se cortan las animaciones.

Por eso, estaria bueno si me decis en que ao lo ves fluido y liberado y lo vemos!
 

Gastin.-

01000111 01100001 01111001
Te fijaste en que aos no sucede esto? Porque a mi tambien me dijeron varias veces que en 13.x se cortan las animaciones.

Por eso, estaria bueno si me decis en que ao lo ves fluido y liberado y lo vemos!
bueno mira en un 13.x ninguno lo vi con la caminata fluida estan todos bugeados la unica liberacion que tiene la caminata bien fluida es mi liberacion de iao clon 1.4.5 que es un 12.x trate de colocarles las mismas declaraciones, mismo calculo de fps, enginebasespeed, todo pero sigue trabada Y tambien la velocidad de la caminata obviamente el Scrollpixel blablabla
 
Última edición:

Shak

Evolution
Miembro del equipo
Developer
Especialista de Argentum
bueno mira en un 13.x ninguno lo vi con la caminata fluida estan todos bugeados la unica liberacion que tiene la caminata bien fluida es mi liberacion de iao clon 1.4.5 que es un 12.x trate de colocarles las mismas declaraciones, mismo calculo de fps, enginebasespeed, todo pero sigue trabada Y tambien la velocidad de la caminata obviamente el Scrollpixel blablabla
Si queres podes pasarme el iao clon, la parte del cliente por privado, y chusmeo los códigos. Así solucionamos esto. Porque muchos no se dan cuenta, pero es veradad que 13.x tiene las animaciones trabadas. Me lo dijeron muchas veces
 

Gastin.-

01000111 01100001 01111001
Si queres podes pasarme el iao clon, la parte del cliente por privado, y chusmeo los códigos. Así solucionamos esto. Porque muchos no se dan cuenta, pero es veradad que 13.x tiene las animaciones trabadas. Me lo dijeron muchas veces
no me deja hablarte privado nose que onda, te paso los codigos del cliente solamente o con los recursos y el server para que lo testes ?

aca esta el link cualquier cosa, en este anda la caminata fluida y la animacion: https://mega.nz/#!MktCVSRC!PULKgEsxOJXel4IM6wALhg3Ou45s5f3LnRYO68h4RG0

viene con todo y hasta esta aportado aca : http://www.gs-zone.org/temas/imperium-ao-1-4-5-clon.94470/

EDIT: Sorry ese link no anda aca te dejo el nuevo y depaso si podes editar el link del th editalo por que no me deja :(

https://mega.nz/#!68VCnCRR!wzAR44Ei7jkjBwyo0UpzeCZik7XXs86PUSElw82ZbQQ
 
Última edición:

Shak

Evolution
Miembro del equipo
Developer
Especialista de Argentum
En iao clon tenes esto

Código:
engineBaseSpeed = 0.02

'Estos son iguales al ao creo
    ScrollPixelsPerFrameX = 8
    ScrollPixelsPerFrameY = 8
También chequea de tener esto

Código:
'Velocidad de los grhs al caminar
Public Velocidad As Single
Con eso deberia mejorar la velocidad, al configurarlo bien. Si te fijas el Velocidad, es el mismo aporte de dunkan, fijate si iao clon lo tiene algo diferente, o está en las mismas partes.


Por otro lado estoy viendo que al cargar los grhs, la velocidad o animacion de bodys y fxs, pasa de single a long, por lo tanto si los carga 333,3333, ahora serian 333. Pienso que podría llegar a ser esta la diferencia, junto con los demás factores. Primero igual chequea lo de arriba y comentame.
 

Gastin.-

01000111 01100001 01111001
Código:
engineBaseSpeed = 0.02

'Estos son iguales al ao creo
    ScrollPixelsPerFrameX = 8
    ScrollPixelsPerFrameY = 8
También chequea de tener esto

Código:
'Velocidad de los grhs al caminar
Public Velocidad As Single
Todo eso lo tengo y me anda trabado
 

Shak

Evolution
Miembro del equipo
Developer
Especialista de Argentum
Proba sacando la coma en el movimiento, y a partir de ahora, cargarlos como long... Como esta en iao clon, y fijate

GrhData(Grh).speed = CLng(tempint) 'iao clon

pone eso en tu ao 13.x
 

Gastin.-

01000111 01100001 01111001
Proba sacando la coma en el movimiento, y a partir de ahora, cargarlos como long... Como esta en iao clon, y fijate

GrhData(Grh).speed = CLng(tempint) 'iao clon

pone eso en tu ao 13.x
bueno remplaze el type grhdata pasando las cosas Long y paso esto:



se bugeo todo los graficos akjasjksajk

"Proba sacando la coma en el movimiento" : que coma ?
 

Shak

Evolution
Miembro del equipo
Developer
Especialista de Argentum
Lo que tenias que hacer es, en la parte que carga el .speed, de cada animacion (loadgrhdata) ponerle un clng() para que se pase a long.

GrhData(Grh).speed = CLng(tempint) 'iao clon

Te lo deje ahi...
Lo demás no lo toques
 

Gastin.-

01000111 01100001 01111001
Lo que tenias que hacer es, en la parte que carga el .speed, de cada animacion (loadgrhdata) ponerle un clng() para que se pase a long.

GrhData(Grh).speed = CLng(tempint) 'iao clon

Te lo deje ahi...
Lo demás no lo toques
bueno deje el grhdata del AO y por lo que veo lo unico que cambia del grhdata del iao clon es que cambia a integer el numfames y el filenum pero si lo cambio no me lee los graficos, bueno y lo que me dijiste que agrege no me deja por "tempint" ya que no hace ningun cambio declarandolo solamente como "dim tempint as integer" tendria que agregar todo esto:

Código:
Get #f, , tempint
    Get #f, , tempint
    Get #f, , tempint
    Get #f, , tempint
    Get #f, , tempint
  
    Get #f, , tempint
          
            If tempint <= 0 Then GoTo ErrorHandler
            GrhData(Grh).speed = CLng(tempint)
y si lo hago no me lee los graficos nueva mente y ya lo intente poniendo el Type GrhData del iao clon y tambien trate con el DIU pasar el Graficos.ind como modo IAO CLON "No Utilizar Cabeceras" y tampoco no me lee un grafico


EDIT: Bueno me equivoque en la indexacion del graficos.ind y al parecer tengo puesto el type grhdata y el sub Loadgrhdata del iao clon mismos fps, enginebasespeed, Velocidad, ScrollPixelsPerFrameX, Declaraciones : timerElapsedTime, timerTicksPerFrame, ScrollPixelsPerFrameX, ScrollPixelsPerFrameY exactamente iguales y tambien el SUB DdrawTransgrhsurface (osea el sub Draw_Grh de iao clon) todo igual y sigue con el mismo error.
 
Última edición:

Dr. Lord Fers

Legendario Inmortal Lvl 5
Miembro del equipo
Moderador
Moderador de Tecnología
Estaría bueno que hagas un video, me encantaría.
 

Gastin.-

01000111 01100001 01111001
Estaría bueno que hagas un video, me encantaría.

Bueno acá tenes una demostración de como la caminata se traba y la animación también.

PD: el tamaño del render no tiene nada que ver por que con el render pequeño estando como antes andaba igual.
 

MAB

Destructor Lvl 2
Lo que marcas de casualidad es que cuando te moves 1 solo paso, la animación del movimiento no es completa, sino que se corta mucho antes?
 

Gastin.-

01000111 01100001 01111001
Lo que marcas de casualidad es que cuando te moves 1 solo paso, la animación del movimiento no es completa, sino que se corta mucho antes?
si y asi sucesivamente y aparte no se nota la caminata trabada por que cuando en el video se pone todo negro ahi es cuando se corta.
 

Dr. Lord Fers

Legendario Inmortal Lvl 5
Miembro del equipo
Moderador
Moderador de Tecnología
Pasame el sub con el que dibujás todo; las animaciones.
Y el "InitGrh" o "Initialize_Grh" o el que utilices para inicializar los Grhs animados.

Saludos.
 

Gastin.-

01000111 01100001 01111001
Pasame el sub con el que dibujás todo; las animaciones.
Y el "InitGrh" o "Initialize_Grh" o el que utilices para inicializar los Grhs animados.

Saludos.
toma te dejo todos estos subs por si las dudas: InitGrh, Draw_Grh, Loadgrhdata, renderscreen, charrender, shownextframe


Código:
Public Sub InitGrh(ByRef Grh As Grh, ByVal GrhIndex As Integer, Optional ByVal Started As Byte = 2)
'*****************************************************************
'Sets up a grh. MUST be done before rendering
'*****************************************************************
    Grh.GrhIndex = GrhIndex
   
    If Started = 2 Then
        If GrhData(Grh.GrhIndex).NumFrames > 1 Then
            Grh.Started = 1
        Else
            Grh.Started = 0
        End If
    Else
        'Make sure the graphic can be started
        If GrhData(Grh.GrhIndex).NumFrames = 1 Then Started = 0
        Grh.Started = Started
    End If
   
   
    If Grh.Started Then
        Grh.Loops = INFINITE_LOOPS
    Else
        Grh.Loops = 0
    End If
   
    Grh.FrameCounter = 1
    Grh.Speed = GrhData(Grh.GrhIndex).Speed
End Sub

Código:
''
' Loads grh data using the new file format.
'
' @return   True if the load was successfull, False otherwise.

Public Function LoadGrhData() As Boolean
On Error Resume Next
    Dim Grh As Long
    Dim Frame As Long
    Dim grhCount As Long
    Dim handle As Integer
    Dim fileVersion As Long
    'Open files
    handle = FreeFile()
    Open IniPath & "Graficos.ind" For Binary Access Read As handle
    Get handle, , fileVersion
   
    Get handle, , grhCount
   
    ReDim GrhData(0 To grhCount) As GrhData
   
    While Not EOF(handle)
        Get handle, , Grh
       
        With GrhData(Grh)
           ' GrhData(Grh).active = True
            Get handle, , .NumFrames
            If .NumFrames <= 0 Then Resume Next
           
            ReDim .Frames(1 To GrhData(Grh).NumFrames)
           
            If .NumFrames > 1 Then
                For Frame = 1 To .NumFrames
                    Get handle, , .Frames(Frame)
                    If .Frames(Frame) <= 0 Or .Frames(Frame) > grhCount Then
                        Resume Next
                    End If
                Next Frame
               
                Get handle, , .Speed
               
                If .Speed <= 0 Then Resume Next
               
                .pixelHeight = GrhData(.Frames(1)).pixelHeight
                If .pixelHeight <= 0 Then Resume Next
               
                .pixelWidth = GrhData(.Frames(1)).pixelWidth
                If .pixelWidth <= 0 Then Resume Next
               
                .TileWidth = GrhData(.Frames(1)).TileWidth
                If .TileWidth <= 0 Then Resume Next
               
                .TileHeight = GrhData(.Frames(1)).TileHeight
                If .TileHeight <= 0 Then Resume Next
            Else
                Get handle, , .FileNum
                If .FileNum <= 0 Then Resume Next
               
                Get handle, , GrhData(Grh).SX
                If .SX < 0 Then Resume Next
               
                Get handle, , .SY
                If .SY < 0 Then Resume Next
               
                Get handle, , .pixelWidth
                If .pixelWidth <= 0 Then Resume Next
               
                Get handle, , .pixelHeight
                If .pixelHeight <= 0 Then Resume Next
               
                .TileWidth = .pixelWidth / 32
                .TileHeight = .pixelHeight / 32
               
                .Frames(1) = Grh
            End If
        End With
    Wend
   
    Close handle
   
    Dim Count As Long
    Open App.path & "\Init\minimap.dat" For Binary As #1
        Seek #1, 1
        For Count = 1 To CANT_GRH_INDEX
            If Grh_Check(Count) Then
                Get #1, , GrhData(Count).mini_map_color
            End If
        Next Count
    Close #1

   
    LoadGrhData = True
Exit Function

ErrorHandler:
    LoadGrhData = False
End Function
Código:
Private Sub Draw_Grh(ByRef Grh As Grh, ByVal X As Integer, ByVal Y As Integer, ByVal Center As Byte, ByRef Color_List() As Long, ByVal Animate As Byte, ByVal posX As Byte, ByVal posY As Byte, Optional ByVal Alpha As Boolean = False, Optional ByVal Angle As Single = 0, Optional ByVal Shadow As Boolean = False)
'*****************************************************************
'Draws a GRH transparently to a X and Y position
'*****************************************************************
    Dim SourceRect As RECT
    Dim CurrentGrhIndex As Integer
   
    If Grh.GrhIndex = 0 Then Exit Sub
    If GrhData(Grh.GrhIndex).NumFrames = 0 Then Exit Sub
   
    If Animate Then
        If Grh.Started = 1 Then
            Grh.FrameCounter = Grh.FrameCounter + (timerElapsedTime * GrhData(Grh.GrhIndex).NumFrames / Grh.Speed) * Velocidad
            If Grh.FrameCounter > GrhData(Grh.GrhIndex).NumFrames Then
                Grh.FrameCounter = (Grh.FrameCounter Mod GrhData(Grh.GrhIndex).NumFrames) + 1
               
                If Grh.Loops <> -1 Then
                    If Grh.Loops > 0 Then
                        Grh.Loops = Grh.Loops - 1
                    Else
                        Grh.Started = 0
                    End If
                End If
            End If
        End If
    End If
   
    CurrentGrhIndex = GrhData(Grh.GrhIndex).Frames(Grh.FrameCounter)
   
    With GrhData(CurrentGrhIndex)
        'Center Grh over X,Y pos
        If Center Then
        If GrhData(CurrentGrhIndex).TileWidth <> 1 Then
            X = X - Int(GrhData(CurrentGrhIndex).TileWidth * (32 \ 2)) + 32 \ 2
        End If

        If GrhData(Grh.GrhIndex).TileHeight <> 1 Then
            Y = Y - Int(GrhData(CurrentGrhIndex).TileHeight * 32) + 32
        End If
        End If
               
        SourceRect.Left = .SX
        SourceRect.Top = .SY
        SourceRect.Right = SourceRect.Left + .pixelWidth
        SourceRect.bottom = SourceRect.Top + .pixelHeight
       
        Call Device_Textured_Render(X, Y, SurfaceDB.Surface(.FileNum), SourceRect, Color_List(), Alpha, Angle, False)
    End With
Exit Sub

error:
    If Err.number = 9 And Grh.FrameCounter < 1 Then
        Grh.FrameCounter = 1
        Resume
    Else
        'Call Log_Engine("Error in Draw_Grh, " & Err.Description & ", (" & Err.number & ")")
        MsgBox "Error en el Engine Gráfico, Por favor contacte a los adminsitradores enviandoles el archivo Errors.Log que se encuentra el la carpeta del cliente.", vbCritical
        Call CloseClient
    End If
End Sub
Código:
Sub ShowNextFrame()

DirectDevice.Clear 0, ByVal 0, D3DCLEAR_TARGET, 0, 1#, 0
                 DirectDevice.BeginScene
                 

        Static OffsetCounterX As Single
    Static OffsetCounterY As Single
        If UserMoving Then
            '****** Move screen Left and Right if needed ******
            If AddtoUserPos.X <> 0 Then
                OffsetCounterX = OffsetCounterX - ScrollPixelsPerFrameX * AddtoUserPos.X * timerTicksPerFrame
                If Abs(OffsetCounterX) >= Abs(32 * AddtoUserPos.X) Then
                    OffsetCounterX = 0
                    AddtoUserPos.X = 0
                    UserMoving = False
                End If
            End If
           
            '****** Move screen Up and Down if needed ******
            If AddtoUserPos.Y <> 0 Then
                OffsetCounterY = OffsetCounterY - ScrollPixelsPerFrameY * AddtoUserPos.Y * timerTicksPerFrame
                If Abs(OffsetCounterY) >= Abs(32 * AddtoUserPos.Y) Then
                    OffsetCounterY = 0
                    AddtoUserPos.Y = 0
                    UserMoving = False
                End If
            End If
        End If
        Call RenderScreen(UserPos.X - AddtoUserPos.X, UserPos.Y - AddtoUserPos.Y, OffsetCounterX - ZoomOffset(1), OffsetCounterY - ZoomOffset(0))
       
       

    Call Dialogos.Render
    Call DibujarCartel
       
    Call DialogosClanes.Draw
   
    DirectDevice.EndScene
    DirectDevice.Present MainScreenRect, ByVal 0, frmMain.MainViewPic.hWnd, ByVal 0
   
          '//Banco
    If frmBancoObj.PicBancoInv.Visible Then _
        Call InvBanco(0).DrawInv
         
    If frmBancoObj.PicInv.Visible Then _
        Call InvBanco(1).DrawInv
   
   
    '//Comercio
    If frmComerciar.picInvNpc.Visible Then _
        Call InvComNpc.DrawInv
       
    If frmComerciar.picInvUser.Visible Then _
        Call InvComUsu.DrawInv
       
   
    '//Comercio entre usuarios
    If frmComerciarUsu.picInvComercio.Visible Then _
        InvComUsu.DrawInv (1)
           
    If frmComerciarUsu.picInvOfertaProp.Visible Then _
        InvOfferComUsu(0).DrawInv (1)
           
    If frmComerciarUsu.picInvOfertaOtro Then _
        InvOfferComUsu(1).DrawInv (1)
           
    If frmComerciarUsu.picInvOroProp.Visible Then _
        InvOroComUsu(0).DrawInv (1)
           
    If frmComerciarUsu.picInvOroOfertaProp.Visible Then _
        InvOroComUsu(1).DrawInv (1)
               
    If frmComerciarUsu.picInvOroOfertaOtro.Visible Then _
        InvOroComUsu(2).DrawInv (1)
       
       
       
    '//Herrero
    If frmHerrero.Visible Then
        With frmHerrero
        If .picLingotes0.Visible Or .picMejorar0.Visible Then _
            InvLingosHerreria(1).DrawInv (1)
           
        If .picLingotes1.Visible Or .picMejorar1.Visible Then _
            InvLingosHerreria(2).DrawInv (1)
           
        If .picLingotes2.Visible Or .picMejorar2.Visible Then _
            InvLingosHerreria(3).DrawInv (1)
           
        If .picLingotes3.Visible Or .picMejorar3.Visible Then _
            InvLingosHerreria(4).DrawInv (1)
        End With
    End If
       
    '//FIN HERRERO
   
    '//Carpintero
    If frmCarp.Visible Then
        With frmCarp
            If .picMaderas0.Visible Or .imgMejorar0.Visible Then _
                InvMaderasCarpinteria(1).DrawInv (1)
               
            If .picMaderas1.Visible Or .imgMejorar1.Visible Then _
            InvMaderasCarpinteria(2).DrawInv (1)
           
            If .picMaderas2.Visible Or .imgMejorar2.Visible Then _
            InvMaderasCarpinteria(3).DrawInv (1)
           
            If .picMaderas3.Visible Or .imgMejorar3.Visible Then _
            InvMaderasCarpinteria(4).DrawInv (1)
        End With
    End If
   
End Sub
Código:
Sub RenderScreen(ByVal tilex As Integer, ByVal tiley As Integer, ByVal PixelOffsetX As Integer, ByVal PixelOffsetY As Integer)
'**************************************************************
'Author: Aaron Perkins
'Last Modify Date: 8/14/2007
'Last modified by: Juan Martín Sotuyo Dodero (Maraxus)
'Renders everything to the viewport
'**************************************************************
    Dim Y           As Long     'Keeps track of where on map we are
    Dim X           As Long     'Keeps track of where on map we are
    Dim screenminY  As Integer  'Start Y pos on current screen
    Dim screenmaxY  As Integer  'End Y pos on current screen
    Dim screenminX  As Integer  'Start X pos on current screen
    Dim screenmaxX  As Integer  'End X pos on current screen
    Dim minY        As Integer  'Start Y pos on current map
    Dim maxY        As Integer  'End Y pos on current map
    Dim minX        As Integer  'Start X pos on current map
    Dim maxX        As Integer  'End X pos on current map
    Dim ScreenX     As Integer  'Keeps track of where to place tile on screen
    Dim ScreenY     As Integer  'Keeps track of where to place tile on screen
    Dim minXOffset  As Integer
    Dim minYOffset  As Integer
    Dim PixelOffsetXTemp As Integer 'For centering grhs
    Dim PixelOffsetYTemp As Integer 'For centering grhs
    Dim ElapsedTime As Single
    Dim Techos(0 To 3)      As Long
   
    ElapsedTime = Engine_ElapsedTime()
   
    'Figure out Ends and Starts of screen
    screenminY = tiley - HalfWindowTileHeight
    screenmaxY = tiley + HalfWindowTileHeight
    screenminX = tilex - HalfWindowTileWidth
    screenmaxX = tilex + HalfWindowTileWidth
   
    minY = screenminY - TileBufferSize
    maxY = screenmaxY + TileBufferSize
    minX = screenminX - TileBufferSize
    maxX = screenmaxX + TileBufferSize
   
    'Make sure mins and maxs are allways in map bounds
    If minY < XMinMapSize Then
        minYOffset = YMinMapSize - minY
        minY = YMinMapSize
    End If
   
    If maxY > YMaxMapSize Then maxY = YMaxMapSize
   
    If minX < XMinMapSize Then
        minXOffset = XMinMapSize - minX
        minX = XMinMapSize
    End If
   
    If maxX > XMaxMapSize Then maxX = XMaxMapSize
   
    'If we can, we render around the view area to make it smoother
    If screenminY > YMinMapSize Then
        screenminY = screenminY - 1
    Else
        screenminY = 1
        ScreenY = 1
    End If
   
    If screenmaxY < YMaxMapSize Then screenmaxY = screenmaxY + 1
   
    If screenminX > XMinMapSize Then
        screenminX = screenminX - 1
    Else
        screenminX = 1
        ScreenX = 1
    End If
   
    'If screenminY < 1 Then screenminY = 1
    'If screenminX < 1 Then screenminX = 1
    'If screenmaxY > 100 Then screenmaxY = 100
    'If screenmaxX > 100 Then screenmaxX = 100

    'If minY < 1 Then minY = 1
    'If minX < 1 Then minX = 1
    'If maxY > 100 Then maxY = 100
    'If maxX > 100 Then maxX = 100
   
    If screenmaxX < XMaxMapSize Then screenmaxX = screenmaxX + 1
    RoofAlphaCalculate Techos
   
    ParticleOffsetX = (Engine_PixelPosX(screenminX) - PixelOffsetX)
    ParticleOffsetY = (Engine_PixelPosY(screenminY) - PixelOffsetY)

    '<----- Layer 1, 2 ----->
    For Y = screenminY To screenmaxY
        For X = screenminX To screenmaxX
       
            If Map_InBounds(X, Y) Then
                'Layer 1
                Call Draw_Grh(MapData(X, Y).Graphic(1), _
                    (ScreenX - 1) * 32 + PixelOffsetX, _
                    (ScreenY - 1) * 32 + PixelOffsetY, _
                    0, MapData(X, Y).light_value(), 1, X, Y)
                   
                'Layer 2
                If MapData(X, Y).Graphic(2).GrhIndex <> 0 Then
                    Call Draw_Grh(MapData(X, Y).Graphic(2), _
                        (ScreenX - 1) * 32 + PixelOffsetX, _
                        (ScreenY - 1) * 32 + PixelOffsetY, _
                        0, MapData(X, Y).light_value(), 0, X, Y)
                End If
            End If
           
            ScreenX = ScreenX + 1
        Next X
        ScreenX = ScreenX - X + screenminX
        ScreenY = ScreenY + 1
    Next Y
   
    '<----- Layer Obj, Char, 3 ----->
    ScreenY = minYOffset - TileBufferSize
    For Y = minY To maxY
        ScreenX = minXOffset - TileBufferSize
        For X = minX To maxX
            PixelOffsetXTemp = ScreenX * 32 + PixelOffsetX
            PixelOffsetYTemp = ScreenY * 32 + PixelOffsetY
           
            If Map_InBounds(X, Y) Then
                With MapData(X, Y)
                    'Object Layer
                    If .ObjGrh.GrhIndex <> 0 Then
                        Call Draw_Grh(.ObjGrh, PixelOffsetXTemp, PixelOffsetYTemp, 1, MapData(X, Y).light_value(), 1, X, Y)
                    End If
                   
                    'Char layer
                    If .CharIndex <> 0 Then
                        Call CharRender(.CharIndex, PixelOffsetXTemp, PixelOffsetYTemp)
                    End If
                   
                    'Layer 3
                    If .Graphic(3).GrhIndex <> 0 Then
                   
                        If .Graphic(3).GrhIndex = 735 Or .Graphic(3).GrhIndex >= 6994 And .Graphic(3).GrhIndex <= 7002 Then
                            If Abs(UserPos.X - X) < 4 And (Abs(UserPos.Y - Y)) < 4 Then
                                Call Draw_Grh(.Graphic(3), PixelOffsetXTemp, PixelOffsetYTemp, 1, MapData(X, Y).light_value(), 1, X, Y, True)
                            Else 'NORMAL
                                Call Draw_Grh(.Graphic(3), PixelOffsetXTemp, PixelOffsetYTemp, 1, MapData(X, Y).light_value(), 1, X, Y)
   
                            End If
                        Else 'NORMAL
                            Call Draw_Grh(.Graphic(3), PixelOffsetXTemp, PixelOffsetYTemp, 1, MapData(X, Y).light_value(), 1, X, Y)
                        End If
                    End If
                End With
            End If
           
            ScreenX = ScreenX + 1
        Next X
        ScreenY = ScreenY + 1
    Next Y
   
    '<----- Layer 4 ----->
        ScreenY = minYOffset - TileBufferSize
        For Y = minY To maxY
            ScreenX = minXOffset - TileBufferSize
            For X = minX To maxX
                If Map_InBounds(X, Y) Then
                    'If Abs(MouseTileX - X) < 1 And (Abs(MouseTileY - Y)) < 1 And Settings.NombreItems And MapData(X, Y).OBJInfo.Name <> "" Then
                        'Engine_Draw_Box ScreenX * 32 + PixelOffsetX, ScreenY * 32 + PixelOffsetY, Fonts_Render_String_Width(MapData(X, Y).OBJInfo.Name, Settings.Engine_Font) + 1, Fuentes(Settings.Engine_Font).CharactersHeight, D3DColorARGB(100, 0, 0, 0)
                        'Fonts_Render_String MapData(X, Y).OBJInfo.Name, ScreenX * 32 + PixelOffsetX, ScreenY * 32 + PixelOffsetY, D3DColorARGB(100, 255, 255, 255), Settings.Engine_Font
                       
                    'End If
                   
                    'Layer 4
                    If Not bTecho Then
                        If MapData(X, Y).Graphic(4).GrhIndex Then
                            Call Draw_Grh(MapData(X, Y).Graphic(4), _
                                ScreenX * 32 + PixelOffsetX, _
                                ScreenY * 32 + PixelOffsetY, _
                                1, Techos, 1, X, Y)
                        End If
                       
                    Else
                        If MapData(X, Y).Graphic(4).GrhIndex Then
                            Call Draw_Grh(MapData(X, Y).Graphic(4), _
                                ScreenX * 32 + PixelOffsetX, _
                                ScreenY * 32 + PixelOffsetY, _
                                1, Techos, 1, X, Y)
                        End If
                    End If
                End If
                ScreenX = ScreenX + 1
            Next X
            ScreenY = ScreenY + 1
        Next Y

    'Weather Update & Render
    Call Engine_Weather_Update
   
    'Effects Update
    Call Effect_UpdateAll
   
    If ClientSetup.ProyectileEngine = True Then
        Dim J As Integer
       
        If LastProjectile > 0 Then
            For J = 1 To LastProjectile
                If ProjectileList(J).Grh.GrhIndex Then
                    Dim Angle As Single
                    'Update the position
                    Angle = DegreeToRadian * Engine_GetAngle(ProjectileList(J).X, ProjectileList(J).Y, ProjectileList(J).tX, ProjectileList(J).tY)
                    ProjectileList(J).X = ProjectileList(J).X + (Sin(Angle) * ElapsedTime * 0.63)
                    ProjectileList(J).Y = ProjectileList(J).Y - (Cos(Angle) * ElapsedTime * 0.63)
                   
                    'Update the rotation
                    If ProjectileList(J).RotateSpeed > 0 Then
                        ProjectileList(J).Rotate = ProjectileList(J).Rotate + (ProjectileList(J).RotateSpeed * ElapsedTime * 0.01)
                        Do While ProjectileList(J).Rotate > 360
                            ProjectileList(J).Rotate = ProjectileList(J).Rotate - 360
                        Loop
                    End If
   
                    'Draw if within range
                    X = ((-minX - 1) * 32) + ProjectileList(J).X + PixelOffsetX + ((10 - TileBufferSize) * 32) - 288 + ProjectileList(J).OffsetX
                    Y = ((-minY - 1) * 32) + ProjectileList(J).Y + PixelOffsetY + ((10 - TileBufferSize) * 32) - 288 + ProjectileList(J).OffsetY
                    If Y >= -32 Then
                        If Y <= (ScreenHeight + 32) Then
                            If X >= -32 Then
                                If X <= (ScreenWidth + 32) Then
                                    If ProjectileList(J).Rotate = 0 Then
                                        Draw_Grh ProjectileList(J).Grh, X, Y, 0, MapData(50, 50).light_value(), 0, 50, 50, True, 0
                                    Else
                                        Draw_Grh ProjectileList(J).Grh, X, Y, 0, MapData(50, 50).light_value(), 0, 50, 50, True, ProjectileList(J).Rotate
                                    End If
                                End If
                            End If
                        End If
                    End If
                   
                End If
            Next J
           
            'Check if it is close enough to the target to remove
            For J = 1 To LastProjectile
                If ProjectileList(J).Grh.GrhIndex Then
                    If Abs(ProjectileList(J).X - ProjectileList(J).tX) < 20 Then
                        If Abs(ProjectileList(J).Y - ProjectileList(J).tY) < 20 Then
                            Engine_Projectile_Erase J
                        End If
                    End If
                End If
            Next J
           
        End If
    End If
   
    '   Set Offsets
    LastOffsetX = ParticleOffsetX
    LastOffsetY = ParticleOffsetY
   
    If ClientSetup.PartyMembers Then Call Draw_Party_Members
    Call RenderCount
   
    If MostrarFPS = True Then
        Call MostrarFPSS
    End If
   
End Sub
Código:
Private Sub CharRender(ByVal CharIndex As Long, ByVal PixelOffsetX As Integer, ByVal PixelOffsetY As Integer)
'***************************************************
'Author: Juan Martín Sotuyo Dodero (Maraxus)
'Last Modify Date: 16/09/2010 (Zama)
'Draw char's to screen without offcentering them
'16/09/2010: ZaMa - Ya no se dibujan los bodies cuando estan invisibles.
'***************************************************
    Dim moved As Boolean
    Dim Pos As Integer
    Dim line As String
    Dim Color As Long
   
    With charlist(CharIndex)
        If .Moving Then
            If .scrollDirectionX <> 0 Then
                .MoveOffsetX = .MoveOffsetX + ScrollPixelsPerFrameX * Sgn(.scrollDirectionX) * timerTicksPerFrame
               
                If .Body.Walk(.Heading).Speed > 0 Then _
                    .Body.Walk(.Heading).Started = 1
                .Arma.WeaponWalk(.Heading).Started = 1
                .Escudo.ShieldWalk(.Heading).Started = 1
               
                moved = True
               
                If (Sgn(.scrollDirectionX) = 1 And .MoveOffsetX >= 0) Or _
                        (Sgn(.scrollDirectionX) = -1 And .MoveOffsetX <= 0) Then
                    .MoveOffsetX = 0
                    .scrollDirectionX = 0
                End If
            End If
           
            If .scrollDirectionY <> 0 Then
                .MoveOffsetY = .MoveOffsetY + ScrollPixelsPerFrameY * Sgn(.scrollDirectionY) * timerTicksPerFrame
               
                If .Body.Walk(.Heading).Speed > 0 Then _
                    .Body.Walk(.Heading).Started = 1
                .Arma.WeaponWalk(.Heading).Started = 1
                .Escudo.ShieldWalk(.Heading).Started = 1
               
                moved = True
               
                If (Sgn(.scrollDirectionY) = 1 And .MoveOffsetY >= 0) Or _
                        (Sgn(.scrollDirectionY) = -1 And .MoveOffsetY <= 0) Then
                    .MoveOffsetY = 0
                    .scrollDirectionY = 0
                End If
            End If
        End If
       
        'If done moving stop animation
        If Not moved Then
            'Stop animations
           
            '//Evito runtime
            If Not .Heading <> 0 Then .Heading = EAST
           
            .Body.Walk(.Heading).Started = 0
            .Body.Walk(.Heading).FrameCounter = 1
           
            '//Movimiento del arma y el escudo
            If Not .Movement Then
                 .Arma.WeaponWalk(.Heading).Started = 0
                 .Arma.WeaponWalk(.Heading).FrameCounter = 1
               
                 .Escudo.ShieldWalk(.Heading).Started = 0
                 .Escudo.ShieldWalk(.Heading).FrameCounter = 1
            End If
           
            .Moving = False
        End If
       
        PixelOffsetX = PixelOffsetX + .MoveOffsetX
        PixelOffsetY = PixelOffsetY + .MoveOffsetY
       
        Dim rgb_list(0 To 3) As Long
       
        If Not .invisible And Not .muerto Then
            .AlphaX = 0
            rgb_list(0) = MapData(.Pos.X, .Pos.Y).light_value(0)
            rgb_list(1) = MapData(.Pos.X, .Pos.Y).light_value(1)
            rgb_list(2) = MapData(.Pos.X, .Pos.Y).light_value(2)
            rgb_list(3) = MapData(.Pos.X, .Pos.Y).light_value(3)
        Else
            Call RoofAlphaCalculateToAlpha(rgb_list(), CharIndex)
        End If
       
        Velocidad = 0.5
            'Draw Body
            If .Body.Walk(.Heading).GrhIndex Then
                Call Draw_Grh(.Body.Walk(.Heading), PixelOffsetX, PixelOffsetY, 1, rgb_list(), 1, .Pos.X, .Pos.Y, , 0)
            End If
           
            'Draw Head
            If .Head.Head(.Heading).GrhIndex Then
                Call Draw_Grh(.Head.Head(.Heading), PixelOffsetX + .Body.HeadOffset.X, PixelOffsetY + .Body.HeadOffset.Y, 1, rgb_list(), 0, .Pos.X, .Pos.Y, , 0)
            End If
               
                'Draw Helmet
                If .Casco.Head(.Heading).GrhIndex Then
                    Call Draw_Grh(.Casco.Head(.Heading), PixelOffsetX + .Body.HeadOffset.X, PixelOffsetY + .Body.HeadOffset.Y + OFFSET_HEAD, 1, rgb_list(), 0, .Pos.X, .Pos.Y, , 0)
                End If
               
                'Draw Weapon
                If .Arma.WeaponWalk(.Heading).GrhIndex Then
                    Call Draw_Grh(.Arma.WeaponWalk(.Heading), PixelOffsetX, PixelOffsetY, 1, rgb_list(), 1, .Pos.X, .Pos.Y, , 0)
                End If
               
                'Draw Shield
                If .Escudo.ShieldWalk(.Heading).GrhIndex Then
                    Call Draw_Grh(.Escudo.ShieldWalk(.Heading), PixelOffsetX, PixelOffsetY, 1, rgb_list(), 1, .Pos.X, .Pos.Y, , 0)
                End If
           
                'Draw name over head
                If LenB(.Nombre) > 0 Then
                    If Nombres Then
                        Call RenderName(CharIndex, PixelOffsetX, PixelOffsetY)
                    End If
                End If
       
        'Update dialogs
        Call Dialogos.UpdateDialogPos(PixelOffsetX + .Body.HeadOffset.X, PixelOffsetY + .Body.HeadOffset.Y + OFFSET_HEAD, CharIndex) '34 son los pixeles del grh de la cabeza que quedan superpuestos al cuerpo
       
        Velocidad = 1
        'Draw FX
        If .FxIndex <> 0 Then
            Call Draw_Grh(.fX, PixelOffsetX + FxData(.FxIndex).OffsetX, PixelOffsetY + FxData(.FxIndex).OffsetY, 1, MapData(.Pos.X, .Pos.Y).light_value(), 1, .Pos.X, .Pos.Y, True)
           
            'Check if animation is over
            If .fX.Started = 0 Then _
                .FxIndex = 0
        End If
       
    End With
End Sub
 

Dr. Lord Fers

Legendario Inmortal Lvl 5
Miembro del equipo
Moderador
Moderador de Tecnología
Solución:
Reemplazar del Draw_Grh, este If completo:
Código:
If Animate Then
        If Grh.Started = 1 Then
            Grh.FrameCounter = Grh.FrameCounter + (timerElapsedTime * GrhData(Grh.GrhIndex).NumFrames / Grh.Speed) * Velocidad
            If Grh.FrameCounter > GrhData(Grh.GrhIndex).NumFrames Then
                Grh.FrameCounter = (Grh.FrameCounter Mod GrhData(Grh.GrhIndex).NumFrames) + 1
               
                If Grh.Loops <> -1 Then
                    If Grh.Loops > 0 Then
                        Grh.Loops = Grh.Loops - 1
                    Else
                        Grh.Started = 0
                    End If
                End If
            End If
        End If
    End If
Por éste:
Código:
If Grh.Started Then
            Grh.FrameCounter = Grh.FrameCounter + (timerElapsedTime * GrhData(Grh.GrhIndex).NumFrames / Grh.Speed)
            If Grh.FrameCounter > GrhData(Grh.GrhIndex).NumFrames Then
               Grh.FrameCounter = 1
               If Grh.Loops <> -1 Then
                    If Grh.Loops > 0 Then
                        Grh.Loops = Grh.Loops - 1
                    Else
                        Grh.Started = 0
                    End If
                End If
            End If
        End If
Solucionado.
 
Arriba