Merge pull request #407 from Abi79/master

Small optimizations to metroid AIprocess()
This commit is contained in:
SkyMarshal
2012-02-14 02:57:05 -08:00

View File

@@ -211,6 +211,7 @@
var/Tempstun = 0 // temporary temperature stuns var/Tempstun = 0 // temporary temperature stuns
var/Discipline = 0 // if a metroid has been hit with a freeze gun, or wrestled/attacked off a human, they become disciplined and don't attack anymore for a while var/Discipline = 0 // if a metroid has been hit with a freeze gun, or wrestled/attacked off a human, they become disciplined and don't attack anymore for a while
var/SStun = 0 // stun variable var/SStun = 0 // stun variable
var/Obstacle = 1 // determines whether the turf the metroid will head to has an obstacle
proc proc
AIprocess() // the master AI process AIprocess() // the master AI process
@@ -228,7 +229,9 @@
switch(nutrition) switch(nutrition)
if(150 to 800) hungry = 1 if(150 to 800) hungry = 1
if(0 to 149) starving = 1 if(0 to 149) starving = 1
AIproc = 1 AIproc = 1
while(AIproc && stat != 2 && (attacked > 0 || starving || hungry || rabid || Victim)) while(AIproc && stat != 2 && (attacked > 0 || starving || hungry || rabid || Victim))
if(Victim) // can't eat AND have this little process at the same time if(Victim) // can't eat AND have this little process at the same time
break break
@@ -242,15 +245,19 @@
AIproc = 0 AIproc = 0
break break
if(Target)
for(var/mob/living/carbon/metroid/M in view(1,Target)) for(var/mob/living/carbon/metroid/M in view(1,Target))
if(M.Victim == Target) if(M.Victim == Target)
Target = null Target = null
AIproc = 0 AIproc = 0
break break
if(!AIproc) if(!AIproc)
break break
if(get_obstacle_ok(Target))
Obstacle = 0
else Obstacle = 1
if(Target in view(1,src)) if(Target in view(1,src))
if(istype(Target, /mob/living/silicon)) if(istype(Target, /mob/living/silicon))
@@ -260,19 +267,19 @@
sleep(15) sleep(15)
Atkcool = 0 Atkcool = 0
if(get_obstacle_ok(Target)) if(!Obstacle)
Target.attack_metroid(src) Target.attack_metroid(src)
return return
if(prob(80) && !Target.lying)
if(Target.client && Target.health >= rand(10,30)) if(prob(80) && !Target.lying && Target.client && Target.health >= rand(10,30))
if(!Atkcool) if(!Atkcool)
spawn() spawn()
Atkcool = 1 Atkcool = 1
sleep(25) sleep(25)
Atkcool = 0 Atkcool = 0
if(get_obstacle_ok(Target)) if(!Obstacle)
Target.attack_metroid(src) Target.attack_metroid(src)
@@ -280,16 +287,12 @@
step_to(src, Target) step_to(src, Target)
else else
if(!Atkcool && get_obstacle_ok(Target)) if(!Atkcool && !Obstacle)
Feedon(Target)
else
if(!Atkcool && get_obstacle_ok(Target))
Feedon(Target) Feedon(Target)
else else
if(Target in view(30, src)) if(Target in view(30, src))
if(get_obstacle_ok(Target)) if(!Obstacle)
step_to(src, Target) step_to(src, Target)
else else
@@ -298,7 +301,7 @@
break break
var/sleeptime = movement_delay() var/sleeptime = movement_delay()
if(sleeptime <= 0) sleeptime = 1 if(sleeptime < 1) sleeptime = 1
sleep(sleeptime + 2) // this is about as fast as a player Metroid can go sleep(sleeptime + 2) // this is about as fast as a player Metroid can go