Merge remote-tracking branch 'upstream/dev' into span_class=notice

Conflicts:
	code/game/objects/effects/spiders.dm
This commit is contained in:
GinjaNinja32
2015-06-05 08:52:44 +01:00
4 changed files with 102 additions and 36 deletions

View File

@@ -1373,3 +1373,8 @@ var/list/WALLITEMS = list(
temp_col = "0[temp_col]" temp_col = "0[temp_col]"
colour += temp_col colour += temp_col
return colour return colour
/atom/proc/get_light_and_color(var/atom/origin)
if(origin)
color = origin.color
set_light(origin.light_range, origin.light_power, origin.light_color)

View File

@@ -78,14 +78,32 @@
New() New()
pixel_x = rand(3,-3) pixel_x = rand(3,-3)
pixel_y = rand(3,-3) pixel_y = rand(3,-3)
processing_objects.Add(src) processing_objects |= src
/obj/effect/spider/eggcluster/New(var/location, var/atom/parent)
get_light_and_color(parent)
..()
/obj/effect/spider/eggcluster/Destroy()
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() /obj/effect/spider/eggcluster/process()
amount_grown += rand(0,2) amount_grown += rand(0,2)
if(amount_grown >= 100) if(amount_grown >= 100)
var/num = rand(6,24) 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<num, i++) for(var/i=0, i<num, i++)
new /obj/effect/spider/spiderling(src.loc) var/spiderling = PoolOrNew(/obj/effect/spider/spiderling, list(src.loc, src))
if(O)
O.implants += spiderling
qdel(src) qdel(src)
/obj/effect/spider/spiderling /obj/effect/spider/spiderling
@@ -95,16 +113,24 @@
anchored = 0 anchored = 0
layer = 2.7 layer = 2.7
health = 3 health = 3
var/last_itch = 0
var/amount_grown = -1 var/amount_grown = -1
var/obj/machinery/atmospherics/unary/vent_pump/entry_vent var/obj/machinery/atmospherics/unary/vent_pump/entry_vent
var/travelling_in_vent = 0 var/travelling_in_vent = 0
New()
pixel_x = rand(6,-6) /obj/effect/spider/spiderling/New(var/location, var/atom/parent)
pixel_y = rand(6,-6) pixel_x = rand(6,-6)
processing_objects.Add(src) pixel_y = rand(6,-6)
//50% chance to grow up processing_objects |= src
if(prob(50)) //50% chance to grow up
amount_grown = 1 if(prob(50))
amount_grown = 1
get_light_and_color(parent)
..()
/obj/effect/spider/spiderling/Destroy()
processing_objects -= src
..()
/obj/effect/spider/spiderling/Bump(atom/user) /obj/effect/spider/spiderling/Bump(atom/user)
if(istype(user, /obj/structure/table)) if(istype(user, /obj/structure/table))
@@ -166,29 +192,45 @@
entry_vent = null entry_vent = null
//================= //=================
else if(prob(25)) if(isturf(loc))
var/list/nearby = oview(5, src) if(prob(25))
if(nearby.len) var/list/nearby = trange(5, src) - loc
var/target_atom = pick(nearby) if(nearby.len)
walk_to(src, target_atom, 5) var/target_atom = pick(nearby)
if(prob(25)) walk_to(src, target_atom, 5)
src.visible_message("<span class='notice'>\The [src] skitters[pick(" away"," around","")].</span>") if(prob(25))
else if(prob(5)) src.visible_message("<span class='notice'>\The [src] skitters[pick(" away"," around","")].</span>")
//vent crawl! else if(prob(5))
for(var/obj/machinery/atmospherics/unary/vent_pump/v in view(7,src)) //vent crawl!
if(!v.welded) for(var/obj/machinery/atmospherics/unary/vent_pump/v in view(7,src))
entry_vent = v if(!v.welded)
walk_to(src, entry_vent, 5) entry_vent = v
break walk_to(src, entry_vent, 5)
break
if(prob(1))
src.visible_message("<span class='notice'>\The [src] chitters.</span>")
if(isturf(loc) && amount_grown > 0)
amount_grown += rand(0,2)
if(amount_grown >= 100) if(amount_grown >= 100)
var/spawn_type = pick(typesof(/mob/living/simple_animal/hostile/giant_spider)) var/spawn_type = pick(typesof(/mob/living/simple_animal/hostile/giant_spider))
new spawn_type(src.loc) new spawn_type(src.loc, src)
qdel(src) 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("<span class='warning'>\A [src] makes its way out of [O.owner ? "[O.owner]'s [O.name]" : "\the [O]"]!</span>")
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 << "<span class='notice'>Your [O.name] itches...</span>"
else if(prob(1))
src.visible_message("<span class='notice'>\The [src] skitters.</span>")
if(amount_grown)
amount_grown += rand(0,2)
/obj/effect/decal/cleanable/spiderling_remains /obj/effect/decal/cleanable/spiderling_remains
name = "spiderling remains" name = "spiderling remains"

View File

@@ -63,16 +63,30 @@
poison_per_bite = 5 poison_per_bite = 5
move_to_delay = 4 move_to_delay = 4
/mob/living/simple_animal/hostile/giant_spider/AttackingTarget() /mob/living/simple_animal/hostile/giant_spider/New(var/location, var/atom/parent)
get_light_and_color(parent)
..() ..()
if(isliving(target_mob))
var/mob/living/L = target_mob /mob/living/simple_animal/hostile/giant_spider/AttackingTarget()
var/target = ..()
if(isliving(target))
var/mob/living/L = target
if(L.reagents) if(L.reagents)
L.reagents.add_reagent("toxin", poison_per_bite) L.reagents.add_reagent("toxin", poison_per_bite)
if(prob(poison_per_bite)) if(prob(poison_per_bite))
L << "\red You feel a tiny prick." L << "\red You feel a tiny prick."
L.reagents.add_reagent(poison_type, 5) 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))
var/eggs = PoolOrNew(/obj/effect/spider/eggcluster/, list(O, src))
O.implants += eggs
/mob/living/simple_animal/hostile/giant_spider/Life() /mob/living/simple_animal/hostile/giant_spider/Life()
..() ..()
if(!stat) if(!stat)
@@ -117,7 +131,7 @@
var/obj/effect/spider/stickyweb/W = locate() in get_turf(src) var/obj/effect/spider/stickyweb/W = locate() in get_turf(src)
if(!W) if(!W)
busy = SPINNING_WEB busy = SPINNING_WEB
src.visible_message("\blue \the [src] begins to secrete a sticky substance.") src.visible_message("<span class='notice'>\The [src] begins to secrete a sticky substance.</span>")
stop_automated_movement = 1 stop_automated_movement = 1
spawn(40) spawn(40)
if(busy == SPINNING_WEB) if(busy == SPINNING_WEB)
@@ -129,13 +143,13 @@
var/obj/effect/spider/eggcluster/E = locate() in get_turf(src) var/obj/effect/spider/eggcluster/E = locate() in get_turf(src)
if(!E && fed > 0) if(!E && fed > 0)
busy = LAYING_EGGS busy = LAYING_EGGS
src.visible_message("\blue \the [src] begins to lay a cluster of eggs.") src.visible_message("<span class='notice'>\The [src] begins to lay a cluster of eggs.</span>")
stop_automated_movement = 1 stop_automated_movement = 1
spawn(50) spawn(50)
if(busy == LAYING_EGGS) if(busy == LAYING_EGGS)
E = locate() in get_turf(src) E = locate() in get_turf(src)
if(!E) if(!E)
new /obj/effect/spider/eggcluster(src.loc) PoolOrNew(/obj/effect/spider/eggcluster, list(loc, src))
fed-- fed--
busy = 0 busy = 0
stop_automated_movement = 0 stop_automated_movement = 0
@@ -157,7 +171,7 @@
else if(busy == MOVING_TO_TARGET && cocoon_target) else if(busy == MOVING_TO_TARGET && cocoon_target)
if(get_dist(src, cocoon_target) <= 1) if(get_dist(src, cocoon_target) <= 1)
busy = SPINNING_COCOON busy = SPINNING_COCOON
src.visible_message("\blue \the [src] begins to secrete a sticky substance around \the [cocoon_target].") src.visible_message("<span class='notice'>\The [src] begins to secrete a sticky substance around \the [cocoon_target].</span>")
stop_automated_movement = 1 stop_automated_movement = 1
walk(src,0) walk(src,0)
spawn(50) spawn(50)
@@ -172,7 +186,7 @@
continue continue
large_cocoon = 1 large_cocoon = 1
fed++ fed++
src.visible_message("\red \the [src] sticks a proboscis into \the [cocoon_target] and sucks a viscous substance out.") src.visible_message("<span class='warning'>\The [src] sticks a proboscis into \the [cocoon_target] and sucks a viscous substance out.</span>")
M.loc = C M.loc = C
C.pixel_x = M.pixel_x C.pixel_x = M.pixel_x
C.pixel_y = M.pixel_y C.pixel_y = M.pixel_y

View File

@@ -0,0 +1,5 @@
author: PsiOmegaDelta
delete-after: True
changes:
- rscadd: "Spider nurses now have a chance of injecting their victims with spider eggs which eventually hatch. If the limb is removed from the host, the host dies, or the spiderling has matured sufficiently it will crawl out into freedom. Medical scanners will pick upp eggs and spiderlings as foreign bodies."