📄 combat.bas
字号:
Dim TempAttack As Integer
Dim TempRnd As Integer
Dim TempRndA As Integer
Dim TempRndB As Integer
Dim TempBub As Byte
If NPCz(X, Y).CanMove = False Then Exit Sub
If UserAtts.HP = 0 Then
NPCz(X, Y).State = Wandering
NPCz(X, Y).StepCounter = 0
NPCz(X, Y).Step = 0
End If
If (X <> DudeCoord.X) And (Y <> DudeCoord.Y) Or GetDist(X, Y, DudeCoord.X, DudeCoord.Y) > 1 Then
NPCz(X, Y).State = Patrolling
NPCz(X, Y).StepCounter = 0
NPCz(X, Y).Step = 0
Exit Sub
End If
If NPCz(X, Y).SpeedCounter <> 0 Then NPCz(X, Y).SpeedCounter = NPCz(X, Y).SpeedCounter - 1
If NPCz(X, Y).SpeedCounter <> 0 Then GoTo SkipIt:
TempBub = 0
Randomize
Select Case NPCz(X, Y).Facing
Case North:
If DudeCoord.X <> X Then GoTo SkipIt:
If DudeCoord.Y <> Y - 1 Then GoTo SkipIt:
If UserAtts.ASkill < NPCz(X, Y).Atts.DSkill Then
TempRnd = NPCz(X, Y).Atts.DSkill - UserAtts.ASkill
TempRndA = Int(((TempRnd + 1) * Rnd) + 0)
Else
TempRnd = TempRndA
End If
If TempRnd = TempRndA Then
TempRndB = Int(((NPCz(X, Y).Atts.ASkill + 1) * Rnd) + 0)
If TempRndB = NPCz(X, Y).Atts.ASkill Then Exit Sub
TempAttack = (Int((NPCz(X, Y).Atts.Strength + 1) * Rnd) + 0) - UserAtts.Armor
If TempAttack < 1 Then GoTo SkipIt:
TempHP = UserAtts.HP - TempAttack
If TempHP > 1 Then
UserAtts.HP = TempHP
NPCz(DudeCoord.X, DudeCoord.Y).Bubbz.Yaxis = 0
NPCz(DudeCoord.X, DudeCoord.Y).Bubbz.Xaxis = 0
NPCz(DudeCoord.X, DudeCoord.Y).Bubbz.Sway = 0
NPCz(DudeCoord.X, DudeCoord.Y).Bubbz.Damage = TempAttack
Else:
UserAtts.HP = 0
NPCz(DudeCoord.X, DudeCoord.Y).Bubbz.Damage = TempAttack
CanMove = False
End If
End If
Case South:
If DudeCoord.X <> X Then GoTo SkipIt:
If DudeCoord.Y <> Y + 1 Then GoTo SkipIt:
If UserAtts.ASkill < NPCz(X, Y).Atts.DSkill Then
TempRnd = NPCz(X, Y).Atts.DSkill - UserAtts.ASkill
TempRndA = Int(((TempRnd + 1) * Rnd) + 0)
Else
TempRnd = TempRndA
End If
If TempRnd = TempRndA Then
TempRndB = Int(((NPCz(X, Y).Atts.ASkill + 1) * Rnd) + 0)
If TempRndB = NPCz(X, Y).Atts.ASkill Then Exit Sub
TempAttack = (Int((NPCz(X, Y).Atts.Strength + 1) * Rnd) + 0) - UserAtts.Armor
If TempAttack < 1 Then GoTo SkipIt:
TempHP = UserAtts.HP - TempAttack
If TempHP > 1 Then
UserAtts.HP = TempHP
NPCz(DudeCoord.X, DudeCoord.Y).Bubbz.Yaxis = 0
NPCz(DudeCoord.X, DudeCoord.Y).Bubbz.Xaxis = 0
NPCz(DudeCoord.X, DudeCoord.Y).Bubbz.Sway = 0
NPCz(DudeCoord.X, DudeCoord.Y).Bubbz.Damage = TempAttack
Else:
UserAtts.HP = 0
NPCz(DudeCoord.X, DudeCoord.Y).Bubbz.Damage = TempAttack
CanMove = False
End If
End If
Case East:
If DudeCoord.X <> X + 1 Then GoTo SkipIt:
If DudeCoord.Y <> Y Then GoTo SkipIt:
If UserAtts.ASkill < NPCz(X, Y).Atts.DSkill Then
TempRnd = NPCz(X, Y).Atts.DSkill - UserAtts.ASkill
TempRndA = Int(((TempRnd + 1) * Rnd) + 0)
Else
TempRnd = TempRndA
End If
If TempRnd = TempRndA Then
TempRndB = Int(((NPCz(X, Y).Atts.ASkill + 1) * Rnd) + 0)
If TempRndB = NPCz(X, Y).Atts.ASkill Then Exit Sub
TempAttack = (Int((NPCz(X, Y).Atts.Strength + 1) * Rnd) + 0) - UserAtts.Armor
If TempAttack < 1 Then GoTo SkipIt:
TempHP = UserAtts.HP - TempAttack
If TempHP > 1 Then
UserAtts.HP = TempHP
NPCz(DudeCoord.X, DudeCoord.Y).Bubbz.Yaxis = 0
NPCz(DudeCoord.X, DudeCoord.Y).Bubbz.Xaxis = 0
NPCz(DudeCoord.X, DudeCoord.Y).Bubbz.Sway = 0
NPCz(DudeCoord.X, DudeCoord.Y).Bubbz.Damage = TempAttack
Else:
UserAtts.HP = 0
NPCz(DudeCoord.X, DudeCoord.Y).Bubbz.Damage = TempAttack
CanMove = False
End If
End If
Case West:
If DudeCoord.X <> X - 1 Then GoTo SkipIt:
If DudeCoord.Y <> Y Then GoTo SkipIt:
If UserAtts.ASkill < NPCz(X, Y).Atts.DSkill Then
TempRnd = NPCz(X, Y).Atts.DSkill - UserAtts.ASkill
TempRndA = Int(((TempRnd + 1) * Rnd) + 0)
Else
TempRnd = TempRndA
End If
If TempRnd = TempRndA Then
TempRndB = Int(((NPCz(X, Y).Atts.ASkill + 1) * Rnd) + 0)
If TempRndB = NPCz(X, Y).Atts.ASkill Then Exit Sub
TempAttack = (Int((NPCz(X, Y).Atts.Strength + 1) * Rnd) + 0) - UserAtts.Armor
If TempAttack < 1 Then GoTo SkipIt:
TempHP = UserAtts.HP - TempAttack
If TempHP > 1 Then
UserAtts.HP = TempHP
NPCz(DudeCoord.X, DudeCoord.Y).Bubbz.Yaxis = 0
NPCz(DudeCoord.X, DudeCoord.Y).Bubbz.Xaxis = 0
NPCz(DudeCoord.X, DudeCoord.Y).Bubbz.Sway = 0
NPCz(DudeCoord.X, DudeCoord.Y).Bubbz.Damage = TempAttack
Else:
UserAtts.HP = 0
NPCz(DudeCoord.X, DudeCoord.Y).Bubbz.Damage = TempAttack
CanMove = False
End If
End If
End Select
NPCz(X, Y).SpeedCounter = NPCz(X, Y).Atts.Speed
SkipIt:
End Sub
Private Sub AISeek(X As Integer, Y As Integer)
Dim TempDist As Byte
If NPCz(X, Y).Mobile = False Then Exit Sub
If NPCz(X, Y).Walking <> 0 Then Exit Sub
TempDist = GetDist(X, Y, DudeCoord.X, DudeCoord.Y)
If TempDist <= NPCz(X, Y).Atts.Sight Then
If DudeCoord.X < X Then
MoveNPCProp X, Y, West
If NPCz(X - 1, Y).MoveX = 32 Then NPCz(X - 1, Y).MoveX = 30
End If
If DudeCoord.X > X Then
MoveNPCProp X, Y, East
End If
If NPCz(X - 1, Y).Walking = 0 Then
If NPCz(X + 1, Y).Walking = 0 Then
If DudeCoord.Y > Y Then
MoveNPCProp X, Y, South
End If
If DudeCoord.Y < Y Then
MoveNPCProp X, Y, North
If NPCz(X, Y - 1).MoveY = 32 Then NPCz(X, Y - 1).MoveY = 30
End If
End If
End If
End If
If TempDist = 1 Then
If DudeCoord.X > X Then
NPCz(X, Y).LastStep = 9
NPCz(X, Y).Facing = East
NPCz(X, Y).State = Attacking
End If
If DudeCoord.X < X Then
NPCz(X, Y).LastStep = 6
NPCz(X, Y).Facing = West
NPCz(X, Y).State = Attacking
End If
If DudeCoord.Y < Y Then
NPCz(X, Y).LastStep = 3
NPCz(X, Y).Facing = North
NPCz(X, Y).State = Attacking
End If
If DudeCoord.Y > Y Then
NPCz(X, Y).LastStep = 0
NPCz(X, Y).Facing = South
NPCz(X, Y).State = Attacking
End If
End If
NPC.MoveNPC X, Y
End Sub
Public Function GetDist(intX1 As Integer, intY1 As Integer, intX2 As Integer, intY2 As Integer) As Byte
GetDist = Sqr((intX1 - intX2) ^ 2 + (intY1 - intY2) ^ 2)
End Function
Private Sub NPCDeath(X As Integer, Y As Integer)
Dim RndNum As Byte
Randomize
RndNum = Int((3 * Rnd) + 0)
If NPCz(X, Y).Atts.Dropage(RndNum).Item <> -1 Then
mbytMap(X, Y).GItem.Index = NPCz(X, Y).Atts.Dropage(RndNum).Item
mbytMap(X, Y).GItem.Amount = NPCz(X, Y).Atts.Dropage(RndNum).Amount
End If
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -