diff --git a/code/game/objects/items/weapons/grenades/spawnergrenade.dm b/code/game/objects/items/weapons/grenades/spawnergrenade.dm
index 9f91108522..efb6ac1e75 100644
--- a/code/game/objects/items/weapons/grenades/spawnergrenade.dm
+++ b/code/game/objects/items/weapons/grenades/spawnergrenade.dm
@@ -27,21 +27,13 @@
step(x, pick(NORTH,SOUTH,EAST,WEST))
// Spawn some hostile syndicate critters
- if(istype(x, /obj/effect/critter))
- var/obj/effect/critter/C = x
-
- C.atkcarbon = 1
- C.atksilicon = 1
- C.atkmech = 0
- C.atksynd = 0
- C.aggressive = 1
del(src)
return
/obj/item/weapon/grenade/spawnergrenade/manhacks
name = "manhack delivery grenade"
- spawner_type = /obj/effect/critter/manhack
+ spawner_type = /mob/living/simple_animal/hostile/viscerator
deliveryamt = 5
origin_tech = "materials=3;magnets=4;syndicate=4"
diff --git a/code/modules/critters/critters.dm b/code/modules/critters/critters.dm
index a518b4729e..03027ec104 100644
--- a/code/modules/critters/critters.dm
+++ b/code/modules/critters/critters.dm
@@ -125,35 +125,3 @@
atksilicon = 1
attacktext = "bites"
-
-
-// We can maybe make these controllable via some console or something
-/obj/effect/critter/manhack
- name = "viscerator"
- desc = "A small, twin-bladed machine capable of inflicting very deadly lacerations."
- icon_state = "viscerator"
- pass_flags = PASSTABLE
- health = 15
- max_health = 15
- aggressive = 1
- opensdoors = 1
- defensive = 1
- wanderer = 1
- atkcarbon = 1
- atksilicon = 1
- atkmech = 1
- firevuln = 0 // immune to fire
- brutevuln = 1
- ventcrawl = 1
- melee_damage_lower = 10
- melee_damage_upper = 15
- attacktext = "cuts"
- attack_sound = 'sound/weapons/bladeslice.ogg'
- chasestate = "viscerator_attack"
- deathtext = "is smashed into pieces!"
-
- Die()
- ..()
- for(var/mob/O in viewers(src, null))
- O.show_message("\red [src] is smashed into pieces!", 1)
- del(src)
diff --git a/code/modules/critters/hivebots/hivebot.dm b/code/modules/critters/hivebots/hivebot.dm
deleted file mode 100644
index 91c07264b3..0000000000
--- a/code/modules/critters/hivebots/hivebot.dm
+++ /dev/null
@@ -1,250 +0,0 @@
-//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
-
-/obj/item/projectile/hivebotbullet
- damage = 5
- damage_type = BRUTE
-
-/obj/effect/critter/hivebot
- name = "Hivebot"
- desc = "A small robot"
- icon = 'icons/mob/hivebot.dmi'
- icon_state = "basic"
- health = 10
- max_health = 10
- aggressive = 1
- wanderer = 1
- opensdoors = 1
- atkcarbon = 1
- atksilicon = 0
- atkcritter = 1
- atksame = 0
- atkmech = 1
- firevuln = 0.5
- brutevuln = 1
- seekrange = 8
- armor = 5
- melee_damage_lower = 2
- melee_damage_upper = 3
- angertext = "leaps at"
- attacktext = "claws"
- var/ranged = 0
- var/rapid = 0
- proc
- Shoot(var/target, var/start, var/user, var/bullet = 0)
- OpenFire(var/thing)//bluh ill rename this later or somethin
-
-
- Die()
- if (!src.alive) return
- src.alive = 0
- walk_to(src,0)
- src.visible_message("[src] blows apart!")
- var/turf/Ts = get_turf(src)
- new /obj/effect/decal/cleanable/robot_debris(Ts)
- var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
- s.set_up(3, 1, src)
- s.start()
- del(src)
-
- seek_target()
- src.anchored = 0
- var/T = null
- for(var/mob/living/C in view(src.seekrange,src))//TODO: mess with this
- if (src.target)
- src.task = "chasing"
- break
- if((C.name == src.oldtarget_name) && (world.time < src.last_found + 100)) continue
- if(istype(C, /mob/living/carbon/) && !src.atkcarbon) continue
- if(istype(C, /mob/living/silicon/) && !src.atksilicon) continue
- if(C.health < 0) continue
- if(istype(C, /mob/living/carbon/) && src.atkcarbon)
- if(C:mind)
- if(C:mind:special_role == "H.I.V.E")
- continue
- src.attack = 1
- if(istype(C, /mob/living/silicon/) && src.atksilicon)
- if(C:mind)
- if(C:mind:special_role == "H.I.V.E")
- continue
- src.attack = 1
- if(src.attack)
- T = C
- break
-
- if(!src.attack)
- for(var/obj/effect/critter/C in view(src.seekrange,src))
- if(istype(C, /obj/effect/critter) && !src.atkcritter) continue
- if(C.health <= 0) continue
- if(istype(C, /obj/effect/critter) && src.atkcritter)
- if((istype(C, /obj/effect/critter/hivebot) && !src.atksame) || (C == src)) continue
- T = C
- break
-
- for(var/obj/mecha/M in view(src.seekrange,src))
- if(istype(M, /obj/mecha) && !src.atkmech) continue
- if(M.health <= 0) continue
- if(istype(M, /obj/mecha) && src.atkmech) src.attack = 1
- if(src.attack)
- T = M
- break
-
- if(src.attack)
- src.target = T
- src.oldtarget_name = T:name
- if(src.ranged)
- OpenFire(T)
- return
- src.task = "chasing"
- return
-
-
- OpenFire(var/thing)
- src.target = thing
- src.oldtarget_name = thing:name
- for(var/mob/O in viewers(src, null))
- O.show_message("\red [src] fires at [src.target]!", 1)
-
- var/tturf = get_turf(target)
- if(rapid)
- spawn(1)
- Shoot(tturf, src.loc, src)
- spawn(4)
- Shoot(tturf, src.loc, src)
- spawn(6)
- Shoot(tturf, src.loc, src)
- else
- Shoot(tturf, src.loc, src)
-
- src.attack = 0
- sleep(12)
- seek_target()
- src.task = "thinking"
- return
-
-
- Shoot(var/target, var/start, var/user, var/bullet = 0)
- if(target == start)
- return
-
- var/obj/item/projectile/hivebotbullet/A = new /obj/item/projectile/hivebotbullet(user:loc)
- playsound(user, 'sound/weapons/Gunshot.ogg', 100, 1)
-
- if(!A) return
-
- if (!istype(target, /turf))
- del(A)
- return
- A.current = target
- A.yo = target:y - start:y
- A.xo = target:x - start:x
- spawn( 0 )
- A.process()
- return
-
-
-
-/obj/effect/critter/hivebot/range
- name = "Hivebot"
- desc = "A smallish robot, this one is armed!"
- ranged = 1
-
-/obj/effect/critter/hivebot/rapid
- ranged = 1
- rapid = 1
-
-/obj/effect/critter/hivebot/strong
- name = "Strong Hivebot"
- desc = "A robot, this one is armed and looks tough!"
- health = 50
- armor = 10
- ranged = 1
-
-/obj/effect/critter/hivebot/borg
- health = 20
- atksilicon = 1
- ranged = 1
- rapid = 1
-
-
-
-/obj/effect/critter/hivebot/tele//this still needs work
- name = "Beacon"
- desc = "Some odd beacon thing"
- icon = 'icons/mob/hivebot.dmi'
- icon_state = "def_radar-off"
- health = 100
- max_health = 100
- aggressive = 0
- wanderer = 0
- opensdoors = 0
- atkcarbon = 0
- atksilicon = 0
- atkcritter = 0
- atksame = 0
- atkmech = 0
- firevuln = 0.5
- brutevuln = 1
- seekrange = 2
- armor = 10
-
- var/bot_type = "norm"
- var/bot_amt = 10
- var/spawn_delay = 600
- var/turn_on = 0
- var/auto_spawn = 1
- proc
- warpbots()
-
-
- New()
- ..()
- var/datum/effect/effect/system/harmless_smoke_spread/smoke = new /datum/effect/effect/system/harmless_smoke_spread()
- smoke.set_up(5, 0, src.loc)
- smoke.start()
- for(var/mob/O in viewers(src, null))
- O.show_message("\red The [src] warps in!", 1)
- playsound(src.loc, 'sound/effects/EMPulse.ogg', 25, 1)
- if(auto_spawn)
- spawn(spawn_delay)
- turn_on = 1
- auto_spawn = 0
-
-
- warpbots()
- icon_state = "def_radar"
- for(var/mob/O in viewers(src, null))
- O.show_message("\red The [src] turns on!", 1)
- while(bot_amt > 0)
- bot_amt--
- switch(bot_type)
- if("norm")
- new /obj/effect/critter/hivebot(get_turf(src))
- if("range")
- new /obj/effect/critter/hivebot/range(get_turf(src))
- if("rapid")
- new /obj/effect/critter/hivebot/rapid(get_turf(src))
- spawn(100)
- del(src)
- return
-
-
- process()
- if((health < (max_health/2)) && (!turn_on))
- if(prob(2))//Might be a bit low, will mess with it likely
- turn_on = 1
- if(turn_on == 1)
- warpbots()
- turn_on = 2
- ..()
-
-/obj/effect/critter/hivebot/tele/massive
- bot_type = "norm"
- bot_amt = 30
- auto_spawn = 0
-
-/obj/effect/critter/hivebot/tele/ranged
- bot_type = "range"
-
-/obj/effect/critter/hivebot/tele/rapid
- bot_type = "rapid"
- spawn_delay = 800
diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm
index 18fde334b2..2f53a5a2e1 100644
--- a/code/modules/mob/living/simple_animal/hostile/carp.dm
+++ b/code/modules/mob/living/simple_animal/hostile/carp.dm
@@ -14,7 +14,6 @@
response_disarm = "gently pushes aside the"
response_harm = "hits the"
speed = -1
- stop_automated_movement_when_pulled = 0
maxHealth = 25
health = 25
diff --git a/code/modules/mob/living/simple_animal/hostile/faithless.dm b/code/modules/mob/living/simple_animal/hostile/faithless.dm
index 954bd4730b..ecc0e8882e 100644
--- a/code/modules/mob/living/simple_animal/hostile/faithless.dm
+++ b/code/modules/mob/living/simple_animal/hostile/faithless.dm
@@ -10,7 +10,6 @@
response_disarm = "shoves"
response_harm = "hits the"
speed = -1
- stop_automated_movement_when_pulled = 0
maxHealth = 80
health = 80
diff --git a/code/modules/mob/living/simple_animal/hostile/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebot.dm
new file mode 100644
index 0000000000..8208a5b2c0
--- /dev/null
+++ b/code/modules/mob/living/simple_animal/hostile/hivebot.dm
@@ -0,0 +1,92 @@
+/obj/item/projectile/hivebotbullet
+ damage = 10
+ damage_type = BRUTE
+
+/mob/living/simple_animal/hostile/hivebot
+ name = "Hivebot"
+ desc = "A small robot"
+ icon = 'icons/mob/hivebot.dmi'
+ icon_state = "basic"
+ health = 15
+ maxHealth = 15
+ melee_damage_lower = 2
+ melee_damage_upper = 3
+ attacktext = "claws"
+ projectilesound = 'sound/weapons/Gunshot.ogg'
+ projectiletype = /obj/item/projectile/hivebotbullet
+ faction = "hivebot"
+
+/mob/living/simple_animal/hostile/hivebot/range
+ name = "Hivebot"
+ desc = "A smallish robot, this one is armed!"
+ ranged = 1
+
+/mob/living/simple_animal/hostile/hivebot/rapid
+ ranged = 1
+ rapid = 1
+
+/mob/living/simple_animal/hostile/hivebot/strong
+ name = "Strong Hivebot"
+ desc = "A robot, this one is armed and looks tough!"
+ health = 80
+ ranged = 1
+
+
+/mob/living/simple_animal/hostile/hivebot/Die()
+ ..()
+ visible_message("[src] blows apart!")
+ new /obj/effect/decal/cleanable/robot_debris(src.loc)
+ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
+ s.set_up(3, 1, src)
+ s.start()
+ del src
+ return
+
+/mob/living/simple_animal/hostile/hivebot/tele//this still needs work
+ name = "Beacon"
+ desc = "Some odd beacon thing"
+ icon = 'icons/mob/hivebot.dmi'
+ icon_state = "def_radar-off"
+ health = 200
+ maxHealth = 200
+
+ var/bot_type = "norm"
+ var/bot_amt = 10
+ var/spawn_delay = 600
+ var/turn_on = 0
+ var/auto_spawn = 1
+ proc
+ warpbots()
+
+
+ New()
+ ..()
+ var/datum/effect/effect/system/harmless_smoke_spread/smoke = new /datum/effect/effect/system/harmless_smoke_spread()
+ smoke.set_up(5, 0, src.loc)
+ smoke.start()
+ visible_message("\red The [src] warps in!")
+ playsound(src.loc, 'sound/effects/EMPulse.ogg', 25, 1)
+
+ warpbots()
+ icon_state = "def_radar"
+ visible_message("\red The [src] turns on!")
+ while(bot_amt > 0)
+ bot_amt--
+ switch(bot_type)
+ if("norm")
+ new /mob/living/simple_animal/hostile/hivebot(get_turf(src))
+ if("range")
+ new /mob/living/simple_animal/hostile/hivebot/range(get_turf(src))
+ if("rapid")
+ new /mob/living/simple_animal/hostile/hivebot/rapid(get_turf(src))
+ spawn(100)
+ del(src)
+ return
+
+
+ Life()
+ ..()
+ if(stat == 0)
+ if(prob(2))//Might be a bit low, will mess with it likely
+ warpbots()
+
diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm
index 43ac5d9a43..613b3ff910 100644
--- a/code/modules/mob/living/simple_animal/hostile/hostile.dm
+++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm
@@ -8,6 +8,7 @@
var/projectiletype
var/projectilesound
var/casingtype
+ stop_automated_movement_when_pulled = 0
/mob/living/simple_animal/hostile/proc/FindTarget()
diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm
index cfa6d2ba0b..2103b651b2 100644
--- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm
+++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm
@@ -129,4 +129,25 @@
speed = 0
/mob/living/simple_animal/hostile/syndicate/ranged/space/Process_Spacemove(var/check_drift = 0)
+ return
+
+
+
+/mob/living/simple_animal/hostile/viscerator
+ name = "viscerator"
+ desc = "A small, twin-bladed machine capable of inflicting very deadly lacerations."
+ icon_state = "viscerator"
+ pass_flags = PASSTABLE
+ health = 15
+ maxHealth = 15
+ melee_damage_lower = 15
+ melee_damage_upper = 15
+ attacktext = "cuts"
+ attack_sound = 'sound/weapons/bladeslice.ogg'
+ faction = "syndicate"
+
+/mob/living/simple_animal/hostile/viscerator/Die()
+ ..()
+ visible_message("\red [src] is smashed into pieces!")
+ del src
return
\ No newline at end of file
diff --git a/tgstation.dme b/tgstation.dme
index b4832ab84d..73be7396df 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -113,7 +113,6 @@
#define FILE_DIR "code/modules/clothing/under"
#define FILE_DIR "code/modules/clothing/under/jobs"
#define FILE_DIR "code/modules/critters"
-#define FILE_DIR "code/modules/critters/hivebots"
#define FILE_DIR "code/modules/detectivework"
#define FILE_DIR "code/modules/flufftext"
#define FILE_DIR "code/modules/food"
@@ -944,7 +943,6 @@
#include "code\modules\critters\critter_AI.dm"
#include "code\modules\critters\critter_defenses.dm"
#include "code\modules\critters\critters.dm"
-#include "code\modules\critters\hivebots\hivebot.dm"
#include "code\modules\detectivework\detective_work.dm"
#include "code\modules\detectivework\evidence.dm"
#include "code\modules\detectivework\footprints_and_rag.dm"
@@ -1132,6 +1130,7 @@
#include "code\modules\mob\living\simple_animal\hostile\bear.dm"
#include "code\modules\mob\living\simple_animal\hostile\carp.dm"
#include "code\modules\mob\living\simple_animal\hostile\faithless.dm"
+#include "code\modules\mob\living\simple_animal\hostile\hivebot.dm"
#include "code\modules\mob\living\simple_animal\hostile\hostile.dm"
#include "code\modules\mob\living\simple_animal\hostile\pirate.dm"
#include "code\modules\mob\living\simple_animal\hostile\syndicate.dm"