Oin Amoresitos.
Cai no conto do Coyote de comentar que faria uma incrementação em um sistema do @GalaxyHells , bla bla... caso ele tomasse vergonha na face dele e arrumasse o tópico para que fosse possível ser lido e copiado e colado pelos belos garotos peludos do fórum.
Eis aqui... Depois de um longo tempo sem trazer incrementações e sisteminhas para os Narutos de vocês... Trago a Trans por Foto de NPC.
Não que o do @GalaxyHells estivesse errado. O Link para o tópico do sistema do mesmo vai estar disponível aqui, mas me é ruim incrementar uma estrutura que é feita meio que de meia boca.
Link para o Tópico do Hells: [Hells] Boss Fight (EO)
Logo resolvi trazer os códigos todos para o sistema em questão, obviamente que existem outras 1000000 formas e de serem feitas, com palavras e jeitos diferentes.. porém esse é meu jeito programadora ninja de ser.
- Ficha Técnica
- Código:
Nível de Programação: Baixo
Programas Necessários: Visual Basic 6 (Sex)
Nível de Programação para Edições Futuras: Mediano
- Entendimento sobre o sistema em si.
- Código:
O Sistema gira com a função de ao NPC setado chegar até uma determinada % de HP (Vital) iniciar seu modo
de transformação. Será possível o mesmo usar um valor imenso de 'tabs' de transformação, você conseguindo
por exemplo configurar 100 Transformações em Cadeia para o mesmo NPC, cada uma contendo um valor diferente de
potencial de HP/DANO.
Algumas funções adicionais naturais foram adicionadas como Tempo para Transformar, Animações, Falas, Se ele
entrar em momento de evolução estará imune e também se ao transformar ele irá encher por completo seu HP.
- Adicionais
- Código:
No decorrer da programação notei que era interessante adicionar coisas que vinham com a situação... Ex's.
> Regeneração Funcional do HP do NPC enquanto ele estiver fora de Batalha.
> Des-Evolve (Npc voltará ao seu estado natural e inicial ~)
> Outros
Ao Sistema ~
- Client Side
[ 1.0 - Adicionando Componentes na Form do Editor ]
- Spoiler:
Well primeiro iremos começar adicionando os componentes na Form de Editor de Npc's. O Esquema é simples porém você tem que saber o minimo do minimo.. que é INDEX!https://i.imgur.com/O4t5zvk.png
A Numeração representa os Index de cada componente em ordem. Lembre-se que eles vão precisar estar na devida ordem para funcionar de acordo com a estrutura do código.
- Código:
Nomenclatura dos Componentes -
*Label Name = lblNpcEvolve
*CheckBox Name = chkNpcEvolve
*TextBox Name = txtNpcEvolve
*Scroll Name = scrlNpcEvolve
*Picture Name = picNpcEvolve
Index em componente permite economizar nomenclaturas e subs. Logo cada componente ai é da mesma família relacionada ao Evolve.Quando criar os Componentes e atribuir Index aos mesmo, vai notar que ficarão com este detalhe.https://i.imgur.com/4kvimVY.pngEntão faça de forma certa seguindo o esquema postado no começo.
[ 1.1 - Código do FrmEditor_Npc ]
- Spoiler:
- Entre na Window de Código da FrmEditor_NPC para que possamos adicionar os códigos que dão função aos Componente.Botão direito sobre o visual da Form e acesso o View Code.
https://i.imgur.com/MHWT4qC.png
No final do Modulo da Form adicione o que está abaixo.
'''''''''''''''' Evolve Area '''''''''''''''' // Copy Below'Modificações na Data1 do NPC - EvolveRECPrivate Sub scrlNpcEvolve_Change(Index As Integer)' If debug mode, handle error then exit outIf Options.Debug = 1 Then On Error GoTo errorhandlerSelect Case IndexCase 0 'Matriz de TAB baseado no MAX_NPC_Evolve'Mudança apenas da ABA TAB do Index de EvolvelblNpcEvolve(0).Caption = "Evolution - " & scrlNpcEvolve(0).ValueNpcEditor_EvolveTab scrlNpcEvolve(0).Value'// Load EvolveCase 1 'Animação de Charge - Pre EvolveIf scrlNpcEvolve(1).Value > 0 And scrlNpcEvolve(1).Value <= MAX_ANIMATIONS ThenlblNpcEvolve(1).Caption = "Charge Anim: " & scrlNpcEvolve(1).Value & " - " & Trim$(Animation(scrlNpcEvolve(1).Value).Name)Npc(EditorIndex).Evolve(scrlNpcEvolve(0).Value).Data1(4) = scrlNpcEvolve(1).ValueElselblNpcEvolve(1).Caption = "Charge Anim: X - None"Exit SubEnd IfCase 2 'Animação Final - Já Finalizando a EvoluçãoIf scrlNpcEvolve(2).Value > 0 And scrlNpcEvolve(2).Value <= MAX_ANIMATIONS ThenlblNpcEvolve(2).Caption = "Evolve Anim: " & scrlNpcEvolve(2).Value & " - " & Trim$(Animation(scrlNpcEvolve(2).Value).Name)Npc(EditorIndex).Evolve(scrlNpcEvolve(0).Value).Data1(6) = scrlNpcEvolve(2).ValueElselblNpcEvolve(2).Caption = "Evolve Anim: X - None"Exit SubEnd IfCase 3 'Evolved SpriteNpc(EditorIndex).Evolve(scrlNpcEvolve(0).Value).Data1(7) = scrlNpcEvolve(3).ValuelblNpcEvolve(3).Caption = "Sprite: " & scrlNpcEvolve(3).ValueCall EditorNpc_BltSprite_Evolve'Atualizar QuadroEnd Select' Error handlerExit Suberrorhandler:HandleError "scrlNpcEvolve_Change", "frmEditor_NPC", Err.Number, Err.Description, Err.Source, Err.HelpContextErr.ClearExit SubEnd SubPrivate Sub txtNpcEvolve_Change(Index As Integer)Dim textval As StringDim numval As StringDim posted As IntegerDim Old As String' If debug mode, handle error then exit outIf Options.Debug = 1 Then On Error GoTo errorhandlerSelect Case IndexCase 0, 1, 2, 3 '% To Evolve / Seconds in Evolve Charge / General Power Up / HP Increase %textval = txtNpcEvolve(Index).textIf IsNumeric(textval) Thennumval = textvalposted = CInt(numval)If Len(posted) <= txtNpcEvolve(Index).MaxLength Then'ResguardarIf Index = 0 Then Npc(EditorIndex).Evolve(scrlNpcEvolve(0).Value).Data1(1) = posted 'scrlNpcEvolve(Index).ValueIf Index = 1 Then Npc(EditorIndex).Evolve(scrlNpcEvolve(0).Value).Data1(2) = posted 'scrlNpcEvolve(Index).ValueIf Index = 2 Then Npc(EditorIndex).Evolve(scrlNpcEvolve(0).Value).Data1(8) = posted 'scrlNpcEvolve(Index).ValueIf Index = 3 Then Npc(EditorIndex).Evolve(scrlNpcEvolve(0).Value).Data1(9) = posted 'scrlNpcEvolve(Index).ValuetxtNpcEvolve(Index).text = postedElsetxtNpcEvolve(Index).text = "0"Exit SubEnd IfElsetxtNpcEvolve(Index).text = CStr(numval)End IfCase 4 'Say TextNpc(EditorIndex).Evolve(scrlNpcEvolve(0).Value).Data2 = Trim$(txtNpcEvolve(Index).text)End Select' Error handlerExit Suberrorhandler:HandleError "txtNpcEvolve_Change", "frmEditor_NPC", Err.Number, Err.Description, Err.Source, Err.HelpContextErr.ClearExit SubEnd SubPrivate Sub chkNpcEvolve_Click(Index As Integer)' If debug mode, handle error then exit outIf Options.Debug = 1 Then On Error GoTo errorhandlerSelect Case IndexCase 0 'ImmuneIf chkNpcEvolve(0).Value > 0 ThenNpc(EditorIndex).Evolve(scrlNpcEvolve(0).Value).Data1(3) = 1ElseNpc(EditorIndex).Evolve(scrlNpcEvolve(0).Value).Data1(3) = 0End IfCase 1 'Restore Hp After EvolveIf chkNpcEvolve(1).Value > 0 ThenNpc(EditorIndex).Evolve(scrlNpcEvolve(0).Value).Data1(5) = 1ElseNpc(EditorIndex).Evolve(scrlNpcEvolve(0).Value).Data1(5) = 0End IfEnd Select' Error handlerExit Suberrorhandler:HandleError "chkNpcEvolve_Click", "frmEditor_NPC", Err.Number, Err.Description, Err.Source, Err.HelpContextErr.ClearExit SubEnd Sub
[ 1.2 - Editando o GameEditor do Cliente ]
- Spoiler:
- Vá para os módulos, busque pelo ... ModGameEditorsDentro dele procure pela Sub NpcEditorInitNela, procure por End WithAcima dele adicione :
- Código:
''''''''''
' Evolve '
''''''''''
.scrlNpcEvolve(0).Max = MAX_NPC_EVOLVE: .scrlNpcEvolve(0).Min = 1: .scrlNpcEvolve(0).Value = 1
If Npc(EditorIndex).Evolve(1).Data1(7) <= 0 Or Npc(EditorIndex).Evolve(1).Data1(7) > .scrlNpcEvolve(3).Max Then Npc(EditorIndex).Evolve(1).Data1(7) = 0
.scrlNpcEvolve(3).Value = Npc(EditorIndex).Evolve(1).Data1(7)
.txtNpcEvolve(0).MaxLength = 2
.txtNpcEvolve(1).MaxLength = 2
.txtNpcEvolve(0).text = Npc(EditorIndex).Evolve(1).Data1(1)
.txtNpcEvolve(1).text = Npc(EditorIndex).Evolve(1).Data1(2)
If Npc(EditorIndex).Evolve(1).Data1(3) > 0 Then .chkNpcEvolve(0).Value = 1 Else .chkNpcEvolve(0).Value = 0
.scrlNpcEvolve(1).Value = Npc(EditorIndex).Evolve(1).Data1(4)
If Npc(EditorIndex).Evolve(1).Data1(5) > 0 Then .chkNpcEvolve(1).Value = 1 Else .chkNpcEvolve(1).Value = 0
.scrlNpcEvolve(2).Value = Npc(EditorIndex).Evolve(1).Data1(6)
.scrlNpcEvolve(3).Value = Npc(EditorIndex).Evolve(1).Data1(7)
.txtNpcEvolve(2).text = Npc(EditorIndex).Evolve(1).Data1(8)
.txtNpcEvolve(3).text = Npc(EditorIndex).Evolve(1).Data1(9)
.txtNpcEvolve(4).text = Trim$(Npc(EditorIndex).Evolve(1).Data2)
Saia da NpcEditorInit, abaixo dela, adicione esta nova Sub.- Código:
Public Sub NpcEditor_EvolveTab(ByVal Index As Long)
' If debug mode, handle error then exit out
If Options.Debug = 1 Then On Error GoTo errorhandler
'Normalizando Setor
If Index <= 0 Or Index > MAX_NPC_EVOLVE Then Index = 1
With frmEditor_NPC
''''''''''
' Evolve '
''''''''''
.scrlNpcEvolve(0).Max = MAX_NPC_EVOLVE: .scrlNpcEvolve(0).Min = 1
If Npc(EditorIndex).Evolve(Index).Data1(7) <= 0 Or Npc(EditorIndex).Evolve(Index).Data1(7) > .scrlNpcEvolve(3).Max Then Npc(EditorIndex).Evolve(Index).Data1(7) = 0
.scrlNpcEvolve(3).Value = Npc(EditorIndex).Evolve(Index).Data1(7)
.txtNpcEvolve(0).text = Npc(EditorIndex).Evolve(Index).Data1(1)
.txtNpcEvolve(1).text = Npc(EditorIndex).Evolve(Index).Data1(2)
If Npc(EditorIndex).Evolve(Index).Data1(3) > 0 Then .chkNpcEvolve(0).Value = 1 Else .chkNpcEvolve(0).Value = 0
.scrlNpcEvolve(1).Value = Npc(EditorIndex).Evolve(Index).Data1(4)
If Npc(EditorIndex).Evolve(Index).Data1(5) > 0 Then .chkNpcEvolve(1).Value = 1 Else .chkNpcEvolve(1).Value = 0
.scrlNpcEvolve(2).Value = Npc(EditorIndex).Evolve(Index).Data1(6)
.scrlNpcEvolve(3).Value = Npc(EditorIndex).Evolve(Index).Data1(7)
.txtNpcEvolve(2).text = Npc(EditorIndex).Evolve(Index).Data1(8)
.txtNpcEvolve(3).text = Npc(EditorIndex).Evolve(Index).Data1(9)
.txtNpcEvolve(4).text = Trim$(Npc(EditorIndex).Evolve(Index).Data2)
End With
' Error handler
Exit Sub
errorhandler:
HandleError "NpcEditor_EvolveTab", "modGameEditors", Err.Number, Err.Description, Err.Source, Err.HelpContext
Err.Clear
Exit Sub
End Sub
[ 1.3 - Adicionando Memórias no ModType ]
- Spoiler:
- Acesse o ModTypes no Cliente, procure por...
- Código:
Private Type MapNpcRec
Dentro dele, abaixo de- Código:
Dir As Byte
Adicione:- Código:
Evolve As Byte 'Guarda o Valor de Evolve do Npc
MaxHP As Long
Agora procure por...- Código:
Private Type NpcRec
Antes do End Type da sessão adicione:- Código:
Evolve(1 To MAX_NPC_EVOLVE) As EvolveRec
Acima de :- Código:
Private Type NpcRec
Adicione:- Código:
'Npc Evolve Data()
Private Type EvolveRec
Data1(1 To 9) As Integer 'Valores Numericos
Data2 As String * 100 'Valores em Texto
End Type
[ 1.4 - Delimitando Limites na velocidade da Luz ]
- Spoiler:
- Acesse agora o ModConstants, procure por ...
- Código:
Public Const MAX_PARTY_MEMBERS As Long = 4
Abaixo adicione:- Código:
Public Const MAX_NPC_EVOLVE As Byte = 4
O Valor correspondente ao "4" representa a quantidade de possiveis evoluções em cadeia a qual os NPC's terão de limite.Se o valor é 4, então ele terá até 4 transformações a qual você poderá ou não configurar.Não é interessante que você fique editando esse valor... decida um para o seu projeto, obviamente que não seja um valor esculhambado... a variavel da data está como Byte, então so irá até 255, caso queira usar mais do que 255 Evoluções no NPC então... Mude o Byte para um Integer ou Long ~(o.o~)
[ 1.5 - Preparação para mudança de Sprite ]
- Spoiler:
- Procure por :
- Código:
Public Sub BltNpc(ByVal MapNpcNum As Long)
Dentro dela, bem no inicio, procure por:- Código:
Sprite = Npc(MapNpc(MapNpcNum).num).Sprite
Abaixo adicione:- Código:
'Analisar Evolve
If MapNpc(MapNpcNum).Evolve > 0 Then
If Npc(MapNpc(MapNpcNum).num).Evolve(MapNpc(MapNpcNum).Evolve).Data1(7) > 0 Then
Sprite = Npc(MapNpc(MapNpcNum).num).Evolve(MapNpc(MapNpcNum).Evolve).Data1(7)
End If
End If
[ 1.6 - Barras ]
- Spoiler:
- Procure por:
- Código:
Private Sub BltBars()
Substitua TODA a SUB por isso aqui:- Código:
Private Sub BltBars()
Dim tmpY As Long, tmpX As Long
Dim sWidth As Long, sHeight As Long
Dim sRECT As RECT
Dim barWidth As Long
Dim i As Long, npcNum As Long, partyIndex As Long
Dim HaveMaxHP As Boolean
' If debug mode, handle error then exit out
If Options.Debug = 1 Then On Error GoTo errorhandler
' dynamic bar calculations
sWidth = DDSD_Bars.lWidth
sHeight = DDSD_Bars.lHeight / 4
' render health bars
For i = 1 To MAX_MAP_NPCS
npcNum = MapNpc(i).num
' exists?
If npcNum > 0 Then
'Evolve Hp Show
If MapNpc(i).MaxHP > 0 Then
If MapNpc(i).Vital(Vitals.HP) > 0 And MapNpc(i).Vital(Vitals.HP) < MapNpc(i).MaxHP Then
GoTo RenderMaxHP
End If
End If
' alive?
If MapNpc(i).Vital(Vitals.HP) > 0 And MapNpc(i).Vital(Vitals.HP) < Npc(npcNum).HP Then
RenderMaxHP:
' lock to npc
tmpX = MapNpc(i).x * PIC_X + MapNpc(i).XOffset + 16 - (sWidth / 2)
tmpY = MapNpc(i).y * PIC_Y + MapNpc(i).YOffset + 35
' calculate the width to fill
barWidth = ((MapNpc(i).Vital(Vitals.HP) / sWidth) / (Npc(npcNum).HP / sWidth)) * sWidth
If MapNpc(i).Evolve > 0 And MapNpc(i).MaxHP > 0 Then
barWidth = ((MapNpc(i).Vital(Vitals.HP) / sWidth) / (MapNpc(i).MaxHP / sWidth)) * sWidth
End If
' draw bar background
With sRECT
.top = sHeight * 1 ' HP bar background
.Left = 0
.Right = .Left + sWidth
.Bottom = .top + sHeight
End With
Engine_BltFast ConvertMapX(tmpX), ConvertMapY(tmpY), DDS_Bars, sRECT, DDBLTFAST_WAIT Or DDBLTFAST_SRCCOLORKEY
' draw the bar proper
With sRECT
.top = 0 ' HP bar
.Left = 0
.Right = .Left + barWidth
.Bottom = .top + sHeight
End With
Engine_BltFast ConvertMapX(tmpX), ConvertMapY(tmpY), DDS_Bars, sRECT, DDBLTFAST_WAIT Or DDBLTFAST_SRCCOLORKEY
End If
End If
Next
' check for casting time bar
If SpellBuffer > 0 Then
If Spell(PlayerSpells(SpellBuffer)).CastTime > 0 Then
' lock to player
tmpX = GetPlayerX(MyIndex) * PIC_X + Player(MyIndex).XOffset + 16 - (sWidth / 2)
tmpY = GetPlayerY(MyIndex) * PIC_Y + Player(MyIndex).YOffset + 35 + sHeight + 1
' calculate the width to fill
barWidth = (GetTickCount - SpellBufferTimer) / ((Spell(PlayerSpells(SpellBuffer)).CastTime * 1000)) * sWidth
' draw bar background
With sRECT
.top = sHeight * 3 ' cooldown bar background
.Left = 0
.Right = sWidth
.Bottom = .top + sHeight
End With
Engine_BltFast ConvertMapX(tmpX), ConvertMapY(tmpY), DDS_Bars, sRECT, DDBLTFAST_WAIT Or DDBLTFAST_SRCCOLORKEY
' draw the bar proper
With sRECT
.top = sHeight * 2 ' cooldown bar
.Left = 0
.Right = barWidth
.Bottom = .top + sHeight
End With
Engine_BltFast ConvertMapX(tmpX), ConvertMapY(tmpY), DDS_Bars, sRECT, DDBLTFAST_WAIT Or DDBLTFAST_SRCCOLORKEY
End If
End If
' draw own health bar
If GetPlayerVital(MyIndex, Vitals.HP) > 0 And GetPlayerVital(MyIndex, Vitals.HP) < GetPlayerMaxVital(MyIndex, Vitals.HP) Then
' lock to Player
tmpX = GetPlayerX(MyIndex) * PIC_X + Player(MyIndex).XOffset + 16 - (sWidth / 2)
tmpY = GetPlayerY(MyIndex) * PIC_X + Player(MyIndex).YOffset + 35
' calculate the width to fill
barWidth = ((GetPlayerVital(MyIndex, Vitals.HP) / sWidth) / (GetPlayerMaxVital(MyIndex, Vitals.HP) / sWidth)) * sWidth
' draw bar background
With sRECT
.top = sHeight * 1 ' HP bar background
.Left = 0
.Right = .Left + sWidth
.Bottom = .top + sHeight
End With
Engine_BltFast ConvertMapX(tmpX), ConvertMapY(tmpY), DDS_Bars, sRECT, DDBLTFAST_WAIT Or DDBLTFAST_SRCCOLORKEY
' draw the bar proper
With sRECT
.top = 0 ' HP bar
.Left = 0
.Right = .Left + barWidth
.Bottom = .top + sHeight
End With
Engine_BltFast ConvertMapX(tmpX), ConvertMapY(tmpY), DDS_Bars, sRECT, DDBLTFAST_WAIT Or DDBLTFAST_SRCCOLORKEY
End If
' draw party health bars
If Party.Leader > 0 Then
For i = 1 To MAX_PARTY_MEMBERS
partyIndex = Party.Member(i)
If (partyIndex > 0) And (partyIndex <> MyIndex) And (GetPlayerMap(partyIndex) = GetPlayerMap(MyIndex)) Then
' player exists
If GetPlayerVital(partyIndex, Vitals.HP) > 0 And GetPlayerVital(partyIndex, Vitals.HP) < GetPlayerMaxVital(partyIndex, Vitals.HP) Then
' lock to Player
tmpX = GetPlayerX(partyIndex) * PIC_X + Player(partyIndex).XOffset + 16 - (sWidth / 2)
tmpY = GetPlayerY(partyIndex) * PIC_X + Player(partyIndex).YOffset + 35
' calculate the width to fill
barWidth = ((GetPlayerVital(partyIndex, Vitals.HP) / sWidth) / (GetPlayerMaxVital(partyIndex, Vitals.HP) / sWidth)) * sWidth
' draw bar background
With sRECT
.top = sHeight * 1 ' HP bar background
.Left = 0
.Right = .Left + sWidth
.Bottom = .top + sHeight
End With
Engine_BltFast ConvertMapX(tmpX), ConvertMapY(tmpY), DDS_Bars, sRECT, DDBLTFAST_WAIT Or DDBLTFAST_SRCCOLORKEY
' draw the bar proper
With sRECT
.top = 0 ' HP bar
.Left = 0
.Right = .Left + barWidth
.Bottom = .top + sHeight
End With
Engine_BltFast ConvertMapX(tmpX), ConvertMapY(tmpY), DDS_Bars, sRECT, DDBLTFAST_WAIT Or DDBLTFAST_SRCCOLORKEY
End If
End If
Next
End If
' Error handler
Exit Sub
errorhandler:
HandleError "BltBars", "modDirectDraw7", Err.Number, Err.Description, Err.Source, Err.HelpContext
Err.Clear
Exit Sub
End Sub
[ 1.7 - Recebimento ]
- Spoiler:
- Procure por :
- Código:
Private Sub HandleMapNpcData
Substitua TODA a SUB por...- Código:
Private Sub HandleMapNpcData(ByVal Index As Long, ByRef Data() As Byte, ByVal StartAddr As Long, ByVal ExtraVar As Long)
Dim i As Long, OnlyOne As Long
Dim Buffer As clsBuffer
' If debug mode, handle error then exit out
If Options.Debug = 1 Then On Error GoTo errorhandler
Set Buffer = New clsBuffer
Buffer.WriteBytes Data()
OnlyOne = Buffer.ReadLong
If OnlyOne <= 0 Then
For i = 1 To MAX_MAP_NPCS
With MapNpc(i)
.num = Buffer.ReadLong
.x = Buffer.ReadLong
.y = Buffer.ReadLong
.Dir = Buffer.ReadLong
.Vital(HP) = Buffer.ReadLong
.Evolve = Buffer.ReadByte
.MaxHP = Buffer.ReadLong
End With
Next
Else
i = Buffer.ReadLong
With MapNpc(i)
.num = Buffer.ReadLong
.x = Buffer.ReadLong
.y = Buffer.ReadLong
.Dir = Buffer.ReadLong
.Vital(HP) = Buffer.ReadLong
.Evolve = Buffer.ReadByte
.MaxHP = Buffer.ReadLong
End With
End If
' Error handler
Exit Sub
errorhandler:
HandleError "HandleMapNpcData", "modHandleData", Err.Number, Err.Description, Err.Source, Err.HelpContext
Err.Clear
Exit Sub
End Sub
[ 1.8 - Sensualidade da Form NPC Editor ]
- Spoiler:
- Procure por...
- Código:
Public Sub EditorNpc_BltSprite()
Acima dessa sub adicione:- Código:
Public Sub EditorNpc_BltSprite_Evolve()
Dim Sprite As Long
Dim sRECT As DxVBLib.RECT
Dim dRECT As DxVBLib.RECT
' If debug mode, handle error then exit out
If Options.Debug = 1 Then On Error GoTo errorhandler
Sprite = frmEditor_NPC.scrlNpcEvolve(3).Value
If Sprite < 1 Or Sprite > NumCharacters Then
frmEditor_NPC.picNpcEvolve.Cls
Exit Sub
End If
CharacterTimer(Sprite) = GetTickCount + SurfaceTimerMax
If DDS_Character(Sprite) Is Nothing Then
Call InitDDSurf("characters\" & Sprite, DDSD_Character(Sprite), DDS_Character(Sprite))
End If
sRECT.top = 0
sRECT.Bottom = SIZE_Y
sRECT.Left = PIC_X * 3 ' facing down
sRECT.Right = sRECT.Left + SIZE_X
dRECT.top = 0
dRECT.Bottom = SIZE_Y
dRECT.Left = 0
dRECT.Right = SIZE_X
Call Engine_BltToDC(DDS_Character(Sprite), sRECT, dRECT, frmEditor_NPC.picNpcEvolve)
' Error handler
Exit Sub
errorhandler:
HandleError "EditorNpc_BltSprite_Evolve", "modDirectDraw7", Err.Number, Err.Description, Err.Source, Err.HelpContext
Err.Clear
Exit Sub
End Sub