📄 combat.bas
字号:
Attribute VB_Name = "Combat"
Public Sub Attack()
Dim TempHP As Integer
Dim TempAttack As Integer
Dim TempRnd As Integer
Dim TempRndA As Integer
Dim TempRndB As Integer
If NPCz(DudeCoord.X, DudeCoord.Y).SpeedCounter <> 0 Then NPCz(DudeCoord.X, DudeCoord.Y).SpeedCounter = NPCz(DudeCoord.X, DudeCoord.Y).SpeedCounter - 1
If NPCz(DudeCoord.X, DudeCoord.Y).SpeedCounter <> 0 Then GoTo SkipIt:
Randomize
If UserWear.WeapIndex = -1 Then Exit Sub
Select Case Facing
Case North:
If mbytMap(DudeCoord.X, DudeCoord.Y - 1).NPC = False Then Exit Sub
If NPCz(DudeCoord.X, DudeCoord.Y - 1).Duty <> 2 Then Exit Sub
If NPCz(DudeCoord.X, DudeCoord.Y - 1).Walking <> 0 Then Exit Sub
NPCz(DudeCoord.X, DudeCoord.Y).State = Attacking
NPCz(DudeCoord.X, DudeCoord.Y - 1).State = Attacking
NPCz(DudeCoord.X, DudeCoord.Y - 1).LastStep = 0
NPCz(DudeCoord.X, DudeCoord.Y - 1).Facing = South
If UserAtts.ASkill < NPCz(DudeCoord.X, DudeCoord.Y - 1).Atts.DSkill Then
TempRnd = NPCz(DudeCoord.X, DudeCoord.Y - 1).Atts.DSkill - UserAtts.ASkill
TempRndA = Int(((TempRnd + 1) * Rnd) + 0)
Else
TempRnd = TempRndA
End If
If TempRnd = TempRndA Then
TempRndB = Int(((UserAtts.ASkill + 1) * Rnd) + 0)
If TempRndB = UserAtts.ASkill Then Exit Sub
TempAttack = (Int(((UserAtts.Strength + 1) * Rnd) + 0) + DaItems(UserWear.WeapIndex).Modifier) - NPCz(DudeCoord.X, DudeCoord.Y - 1).Atts.Armor
If TempAttack < 1 Then Exit Sub
TempHP = NPCz(DudeCoord.X, DudeCoord.Y - 1).Atts.HP - TempAttack
If TempHP > 1 Then
NPCz(DudeCoord.X, DudeCoord.Y - 1).Atts.HP = TempHP
NPCz(DudeCoord.X, DudeCoord.Y - 1).Bubbz.Yaxis = 0
NPCz(DudeCoord.X, DudeCoord.Y - 1).Bubbz.Xaxis = 0
NPCz(DudeCoord.X, DudeCoord.Y - 1).Bubbz.Sway = 0
NPCz(DudeCoord.X, DudeCoord.Y - 1).Bubbz.Damage = TempAttack
Else:
NPCz(DudeCoord.X, DudeCoord.Y - 1).Atts.HP = 0
NPCz(DudeCoord.X, DudeCoord.Y - 1).Mobile = False
NPCz(DudeCoord.X, DudeCoord.Y - 1).Step = 0
NPCz(DudeCoord.X, DudeCoord.Y - 1).Bubbz.Yaxis = 0
NPCz(DudeCoord.X, DudeCoord.Y - 1).Bubbz.Xaxis = 0
NPCz(DudeCoord.X, DudeCoord.Y - 1).Bubbz.Sway = 0
NPCz(DudeCoord.X, DudeCoord.Y - 1).Bubbz.Damage = TempAttack
mbytMap(DudeCoord.X, DudeCoord.Y - 1).NPC = False
mbytMap(DudeCoord.X, DudeCoord.Y - 1).Walkable = True
NPCDeath DudeCoord.X, DudeCoord.Y - 1
End If
End If
Case South:
If NPCz(DudeCoord.X, DudeCoord.Y + 1).Walking <> 0 Then Exit Sub
If mbytMap(DudeCoord.X, DudeCoord.Y + 1).NPC = False Then Exit Sub
If NPCz(DudeCoord.X, DudeCoord.Y + 1).Duty <> 2 Then Exit Sub
NPCz(DudeCoord.X, DudeCoord.Y + 1).State = Attacking
NPCz(DudeCoord.X, DudeCoord.Y + 1).LastStep = 3
NPCz(DudeCoord.X, DudeCoord.Y + 1).Facing = North
NPCz(DudeCoord.X, DudeCoord.Y).State = Attacking
If UserAtts.ASkill < NPCz(DudeCoord.X, DudeCoord.Y + 1).Atts.DSkill Then
TempRnd = NPCz(DudeCoord.X, DudeCoord.Y + 1).Atts.DSkill - UserAtts.ASkill
TempRndA = Int(((TempRnd + 1) * Rnd) + 0)
Else
TempRnd = TempRndA
End If
If TempRnd = TempRndA Then
TempRndB = Int(((UserAtts.ASkill + 1) * Rnd) + 0)
If TempRndB = UserAtts.ASkill Then Exit Sub
TempAttack = (Int(((UserAtts.Strength + 1) * Rnd) + 0) + DaItems(UserWear.WeapIndex).Modifier) - NPCz(DudeCoord.X, DudeCoord.Y + 1).Atts.Armor
If TempAttack < 1 Then Exit Sub
TempHP = NPCz(DudeCoord.X, DudeCoord.Y + 1).Atts.HP - TempAttack
If TempHP > 1 Then
NPCz(DudeCoord.X, DudeCoord.Y + 1).Atts.HP = TempHP
NPCz(DudeCoord.X, DudeCoord.Y + 1).Bubbz.Yaxis = 0
NPCz(DudeCoord.X, DudeCoord.Y + 1).Bubbz.Xaxis = 0
NPCz(DudeCoord.X, DudeCoord.Y + 1).Bubbz.Sway = 0
NPCz(DudeCoord.X, DudeCoord.Y + 1).Bubbz.Damage = TempAttack
Else:
NPCz(DudeCoord.X, DudeCoord.Y + 1).Atts.HP = 0
NPCz(DudeCoord.X, DudeCoord.Y + 1).Mobile = False
NPCz(DudeCoord.X, DudeCoord.Y + 1).Step = 0
NPCz(DudeCoord.X, DudeCoord.Y + 1).Bubbz.Yaxis = 0
NPCz(DudeCoord.X, DudeCoord.Y + 1).Bubbz.Xaxis = 0
NPCz(DudeCoord.X, DudeCoord.Y + 1).Bubbz.Sway = 0
NPCz(DudeCoord.X, DudeCoord.Y + 1).Bubbz.Damage = TempAttack
mbytMap(DudeCoord.X, DudeCoord.Y + 1).NPC = False
mbytMap(DudeCoord.X, DudeCoord.Y + 1).Walkable = True
NPCDeath DudeCoord.X, DudeCoord.Y + 1
End If
End If
Case West:
If NPCz(DudeCoord.X - 1, DudeCoord.Y).Walking <> 0 Then Exit Sub
If mbytMap(DudeCoord.X - 1, DudeCoord.Y).NPC = False Then Exit Sub
If NPCz(DudeCoord.X - 1, DudeCoord.Y).Duty <> 2 Then Exit Sub
NPCz(DudeCoord.X - 1, DudeCoord.Y).State = Attacking
NPCz(DudeCoord.X - 1, DudeCoord.Y).LastStep = 9
NPCz(DudeCoord.X - 1, DudeCoord.Y).Facing = East
NPCz(DudeCoord.X, DudeCoord.Y).State = Attacking
If UserAtts.ASkill < NPCz(DudeCoord.X - 1, DudeCoord.Y).Atts.DSkill Then
TempRnd = NPCz(DudeCoord.X - 1, DudeCoord.Y).Atts.DSkill - UserAtts.ASkill
TempRndA = Int(((TempRnd + 1) * Rnd) + 0)
Else
TempRnd = TempRndA
End If
If TempRnd = TempRndA Then
TempRndB = Int(((UserAtts.ASkill + 1) * Rnd) + 0)
If TempRndB = UserAtts.ASkill Then Exit Sub
TempAttack = (Int(((UserAtts.Strength + 1) * Rnd) + 0) + DaItems(UserWear.WeapIndex).Modifier) - NPCz(DudeCoord.X - 1, DudeCoord.Y).Atts.Armor
If TempAttack < 1 Then Exit Sub
TempHP = NPCz(DudeCoord.X - 1, DudeCoord.Y).Atts.HP - TempAttack
If TempHP > 1 Then
NPCz(DudeCoord.X - 1, DudeCoord.Y).Atts.HP = TempHP
NPCz(DudeCoord.X - 1, DudeCoord.Y).Bubbz.Yaxis = 0
NPCz(DudeCoord.X - 1, DudeCoord.Y).Bubbz.Xaxis = 0
NPCz(DudeCoord.X - 1, DudeCoord.Y).Bubbz.Sway = 0
NPCz(DudeCoord.X - 1, DudeCoord.Y).Bubbz.Damage = TempAttack
Else:
NPCz(DudeCoord.X - 1, DudeCoord.Y).Atts.HP = 0
NPCz(DudeCoord.X - 1, DudeCoord.Y).Mobile = False
NPCz(DudeCoord.X - 1, DudeCoord.Y).Step = 0
NPCz(DudeCoord.X - 1, DudeCoord.Y).Bubbz.Yaxis = 0
NPCz(DudeCoord.X - 1, DudeCoord.Y).Bubbz.Xaxis = 0
NPCz(DudeCoord.X - 1, DudeCoord.Y).Bubbz.Sway = 0
NPCz(DudeCoord.X - 1, DudeCoord.Y).Bubbz.Damage = TempAttack
mbytMap(DudeCoord.X - 1, DudeCoord.Y).NPC = False
mbytMap(DudeCoord.X - 1, DudeCoord.Y).Walkable = True
NPCDeath DudeCoord.X - 1, DudeCoord.Y
End If
End If
Case East:
If NPCz(DudeCoord.X + 1, DudeCoord.Y).Walking <> 0 Then Exit Sub
If mbytMap(DudeCoord.X + 1, DudeCoord.Y).NPC = False Then Exit Sub
If NPCz(DudeCoord.X + 1, DudeCoord.Y).Duty <> 2 Then Exit Sub
NPCz(DudeCoord.X + 1, DudeCoord.Y).State = Attacking
NPCz(DudeCoord.X + 1, DudeCoord.Y).LastStep = 6
NPCz(DudeCoord.X + 1, DudeCoord.Y).Facing = West
NPCz(DudeCoord.X, DudeCoord.Y).State = Attacking
If UserAtts.ASkill < NPCz(DudeCoord.X + 1, DudeCoord.Y).Atts.DSkill Then
TempRnd = NPCz(DudeCoord.X + 1, DudeCoord.Y).Atts.DSkill - UserAtts.ASkill
TempRndA = Int(((TempRnd + 1) * Rnd) + 0)
Else
TempRnd = TempRndA
End If
If TempRnd = TempRndA Then
TempRndB = Int(((UserAtts.ASkill + 1) * Rnd) + 0)
If TempRndB = UserAtts.ASkill Then Exit Sub
TempAttack = (Int(((UserAtts.Strength + 1) * Rnd) + 0) + DaItems(UserWear.WeapIndex).Modifier) - NPCz(DudeCoord.X + 1, DudeCoord.Y).Atts.Armor
If TempAttack < 1 Then Exit Sub
TempHP = NPCz(DudeCoord.X + 1, DudeCoord.Y).Atts.HP - TempAttack
If TempHP > 1 Then
NPCz(DudeCoord.X + 1, DudeCoord.Y).Atts.HP = TempHP
NPCz(DudeCoord.X + 1, DudeCoord.Y).Bubbz.Yaxis = 0
NPCz(DudeCoord.X + 1, DudeCoord.Y).Bubbz.Xaxis = 0
NPCz(DudeCoord.X + 1, DudeCoord.Y).Bubbz.Sway = 0
NPCz(DudeCoord.X + 1, DudeCoord.Y).Bubbz.Damage = TempAttack
Else:
NPCz(DudeCoord.X + 1, DudeCoord.Y).Atts.HP = 0
NPCz(DudeCoord.X + 1, DudeCoord.Y).Mobile = False
NPCz(DudeCoord.X + 1, DudeCoord.Y).Step = 0
NPCz(DudeCoord.X + 1, DudeCoord.Y).Atts.HP = TempHP
NPCz(DudeCoord.X + 1, DudeCoord.Y).Bubbz.Yaxis = 0
NPCz(DudeCoord.X + 1, DudeCoord.Y).Bubbz.Xaxis = 0
NPCz(DudeCoord.X + 1, DudeCoord.Y).Bubbz.Sway = 0
NPCz(DudeCoord.X + 1, DudeCoord.Y).Bubbz.Damage = TempAttack
mbytMap(DudeCoord.X + 1, DudeCoord.Y).NPC = False
mbytMap(DudeCoord.X + 1, DudeCoord.Y).Walkable = True
NPCDeath DudeCoord.X + 1, DudeCoord.Y
End If
End If
End Select
NPCz(DudeCoord.X, DudeCoord.Y).SpeedCounter = UserAtts.Speed
SkipIt:
End Sub
Public Sub NPCManager()
Dim X As Integer
Dim Y As Integer
For X = 0 To 50
For Y = 0 To 50
If mbytMap(X, Y).NPC Then
Select Case NPCz(X, Y).State
Case Wandering:
MoveNPC X, Y
Case Attacking:
AIAttack X, Y
Case Patrolling:
If Combat.GetDist(X, Y, DudeCoord.X, DudeCoord.Y) > NPCz(X, Y).Atts.Sight Then
NPC.MoveNPC X, Y
Else
If NPCz(X, Y).Walking = 0 Then
AISeek X, Y
Else
NPC.MoveNPC X, Y
End If
End If
End Select
End If
Next
Next
End Sub
Private Sub AIAttack(X As Integer, Y As Integer)
Dim TempHP As Integer
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -