diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm index 141eabc61f..ea420e56b9 100644 --- a/code/game/objects/effects/spiders.dm +++ b/code/game/objects/effects/spiders.dm @@ -78,18 +78,28 @@ New() pixel_x = rand(3,-3) pixel_y = rand(3,-3) - processing_objects.Add(src) - + processing_objects |= src + /obj/effect/spider/eggcluster/Destroy() - processing_objects.Remove(src) + processing_objects -= src + if(istype(loc, /obj/item/organ/external)) + var/obj/item/organ/external/O = loc + O.implants -= src + ..() /obj/effect/spider/eggcluster/process() amount_grown += rand(0,2) if(amount_grown >= 100) var/num = rand(6,24) + var/obj/item/organ/external/O = null + if(istype(loc, /obj/item/organ/external)) + O = loc + for(var/i=0, i\The [src] skitters[pick(" away"," around","")].") + else if(prob(5)) + //vent crawl! + for(var/obj/machinery/atmospherics/unary/vent_pump/v in view(7,src)) + if(!v.welded) + entry_vent = v + walk_to(src, entry_vent, 5) + break - else if(prob(25)) - var/list/nearby = oview(5, src) - if(nearby.len) - var/target_atom = pick(nearby) - walk_to(src, target_atom, 5) - if(prob(25)) - src.visible_message("\blue \the [src] skitters[pick(" away"," around","")].") - else if(prob(5)) - //vent crawl! - for(var/obj/machinery/atmospherics/unary/vent_pump/v in view(7,src)) - if(!v.welded) - entry_vent = v - walk_to(src, entry_vent, 5) - break - - if(prob(1)) - src.visible_message("\blue \the [src] chitters.") - if(isturf(loc) && amount_grown > 0) - amount_grown += rand(0,2) if(amount_grown >= 100) var/spawn_type = pick(typesof(/mob/living/simple_animal/hostile/giant_spider)) var/mob/spiderspawn = new spawn_type(src.loc) spiderspawn.color = color spiderspawn.set_light(light_range, light_power, light_color) qdel(src) + else if(isorgan(loc)) + if(!amount_grown) amount_grown = 1 + var/obj/item/organ/external/O = loc + if(!O.owner || O.owner.stat == DEAD || amount_grown > 80) + O.implants -= src + src.loc = O.owner ? O.owner.loc : O.loc + src.visible_message("\A [src] makes its way out of [O.owner ? "[O.owner]'s [O.name]" : "\the [O]"]!") + if(O.owner) + O.owner.apply_damage(1, BRUTE, O.limb_name) + else if(prob(1)) + O.owner.apply_damage(1, TOX, O.limb_name) + if(world.time > last_itch + 30 SECONDS) + last_itch = world.time + O.owner << "Your [O.name] itches..." + else if(prob(1)) + src.visible_message("\The [src] skitters.") + + if(amount_grown) + amount_grown += rand(0,2) /obj/effect/decal/cleanable/spiderling_remains name = "spiderling remains" @@ -214,7 +240,7 @@ icon_state = pick("cocoon1","cocoon2","cocoon3") /obj/effect/spider/cocoon/Destroy() - src.visible_message("\red \the [src] splits open.") + src.visible_message("\The [src] splits open.") for(var/atom/movable/A in contents) A.loc = src.loc return ..() diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm index 4d7a8f7e3a..40247c7584 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm @@ -64,15 +64,24 @@ move_to_delay = 4 /mob/living/simple_animal/hostile/giant_spider/AttackingTarget() - ..() - if(isliving(target_mob)) - var/mob/living/L = target_mob + var/target = ..() + if(isliving(target)) + var/mob/living/L = target if(L.reagents) L.reagents.add_reagent("toxin", poison_per_bite) if(prob(poison_per_bite)) L << "\red You feel a tiny prick." L.reagents.add_reagent(poison_type, 5) +/mob/living/simple_animal/hostile/giant_spider/nurse/AttackingTarget() + var/target = ..() + if(ishuman(target)) + var/mob/living/carbon/human/H = target + if(prob(poison_per_bite)) + var/obj/item/organ/external/O = pick(H.organs) + if(!(O.status & ORGAN_ROBOT)) + O.implants += new/obj/effect/spider/eggcluster(O) + /mob/living/simple_animal/hostile/giant_spider/Life() ..() if(!stat)