diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm
index 036457fd833..5f81b11194d 100644
--- a/code/modules/mob/living/simple_animal/guardian/guardian.dm
+++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm
@@ -22,6 +22,7 @@
environment_smash = 0
melee_damage_lower = 15
melee_damage_upper = 15
+ butcher_results = list(/obj/item/weapon/ectoplasm = 1)
var/cooldown = 0
var/damage_transfer = 1 //how much damage from each attack we transfer to the owner
var/mob/living/summoner
@@ -32,16 +33,17 @@
var/bio_fluff_string = "Your scarabs fail to mutate. This shouldn't happen! Submit a bug report!"
-
/mob/living/simple_animal/hostile/guardian/Life() //Dies if the summoner dies
..()
if(summoner)
if(summoner.stat == DEAD)
src << "Your summoner has died!"
+ visible_message("The [src] dies along with it's user!")
ghostize()
qdel(src)
else
src << "Your summoner has died!"
+ visible_message("The [src] dies along with it's user!")
ghostize()
qdel(src)
if(summoner)
@@ -74,10 +76,10 @@
/mob/living/simple_animal/hostile/guardian/ex_act(severity, target)
switch (severity)
if (1.0)
- gib()
if(src.summoner)
src.summoner << "Your [src.name] was blown up!"
src.summoner.gib()
+ gib()
return
if (2.0)
adjustBruteLoss(60)
@@ -136,8 +138,8 @@
/mob/living/simple_animal/hostile/guardian/fire
a_intent = "help"
- melee_damage_lower = 10
- melee_damage_upper = 10
+ melee_damage_lower = 15
+ melee_damage_upper = 15
attack_sound = 'sound/items/Welder.ogg'
attacktext = "sears"
damage_transfer = 0.6
@@ -153,7 +155,7 @@
if(istype(AM, /mob/living/))
var/mob/living/M = AM
if(AM != src.summoner)
- M.adjust_fire_stacks(10)
+ M.adjust_fire_stacks(20)
M.IgniteMob()
//Standard
@@ -280,8 +282,8 @@
/mob/living/simple_animal/hostile/guardian/bluespace
ranged = 1
range = 15
- melee_damage_lower = 10
- melee_damage_upper = 10
+ melee_damage_lower = 15
+ melee_damage_upper = 15
speed = -1
attack_sound = 'sound/weapons/emitter.ogg'
projectiletype = /obj/item/projectile/magic/teleport
@@ -298,6 +300,82 @@
if(!M.anchored && M != src.summoner)
do_teleport(M, M, 10)
+/mob/living/simple_animal/hostile/guardian/bomb
+ melee_damage_lower = 15
+ melee_damage_upper = 15
+ damage_transfer = 0.6
+ range = 13
+ playstyle_string = "As an explosive type, you have only moderate close combat abilities, but are capable of converting any adjacent item into a disguised bomb via shift click."
+ magic_fluff_string = "..And draw the Scientist, master of explosive death."
+ tech_fluff_string = "Boot sequence complete. Explosive modules active. Nanoswarm online."
+ bio_fluff_string = "Your scarab swarm finishes mutating and stirs to life, capable of stealthily booby trapping items."
+ var/bomb_cooldown = 0
+
+/mob/living/simple_animal/hostile/guardian/bomb/ShiftClickOn(atom/movable/A)
+ if(istype(A, /obj/))
+ if(bomb_cooldown <= world.time && !stat)
+ var/obj/item/weapon/guardian_bomb/B = new /obj/item/weapon/guardian_bomb(get_turf(A))
+ src << "Success! Bomb armed!"
+ bomb_cooldown = world.time + 400
+ B.spawner = src
+ B.disguise (A)
+ else
+ src << "Your powers are on cooldown! You must wait 40 seconds between bombs."
+
+/obj/item/weapon/guardian_bomb
+ name = "bomb"
+ desc = "You shouldn't be seeing this!"
+ var/obj/stored_obj
+ var/mob/living/spawner
+
+
+
+/obj/item/weapon/guardian_bomb/proc/disguise(var/obj/A)
+ A.loc = src
+ stored_obj = A
+ name = A.name
+ desc = A.desc
+ icon = A.icon
+ icon_state = A.icon_state
+ overlays = A.overlays
+ anchored = A.anchored
+ density = A.density
+ pixel_y = A.pixel_y
+ pixel_x = A.pixel_x
+ spawn(600)
+ stored_obj.loc = get_turf(src.loc)
+ spawner << "Failure! Your trap didn't catch anyone this time."
+ qdel(src)
+
+/obj/item/weapon/guardian_bomb/proc/detonate(var/mob/living/user)
+ user << "The [src] was boobytrapped!"
+ spawner << "Success! Your trap caught [user]"
+ stored_obj.loc = get_turf(src.loc)
+ playsound(get_turf(src),'sound/effects/Explosion2.ogg', 200, 1)
+ user.ex_act(2)
+ qdel(src)
+
+/obj/item/weapon/guardian_bomb/attackby(mob/living/user)
+ detonate(user)
+ return
+
+/obj/item/weapon/guardian_bomb/pickup(mob/living/user)
+ detonate(user)
+ return
+
+/obj/item/weapon/guardian_bomb/examine(mob/user)
+ stored_obj.examine(user)
+ if(get_dist(user,src)<=2)
+ user << "Looks odd!"
+
+
+
+
+
+
+
+
+
////////Creation
@@ -313,7 +391,7 @@
var/use_message = "You shuffle the deck..."
var/used_message = "All the cards seem to be blank now."
var/failure_message = "..And draw a card! It's...blank? Maybe you should try again later."
- var/list/possible_guardians = list("Fire", "Standard", "Scout", "Shield", "Ranged", "Healer", "Fast")
+ var/list/possible_guardians = list("Fire", "Standard", "Scout", "Shield", "Ranged", "Healer", "Fast", "Explosive")
var/random = TRUE
/obj/item/weapon/guardiancreator/attack_self(mob/living/user)
@@ -386,6 +464,9 @@
if("Bluespace")
pickedtype = /mob/living/simple_animal/hostile/guardian/bluespace
+ if("Explosive")
+ pickedtype = /mob/living/simple_animal/hostile/guardian/bomb
+
var/mob/living/simple_animal/hostile/guardian/G = new pickedtype(user)
G.summoner = user
G.key = key