mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-13 11:43:31 +00:00
Merge remote-tracking branch 'upstream/dev' into span_class=notice
Conflicts: code/game/objects/effects/spiders.dm
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
5
html/changelogs/PsiOmegaDelta-SpiderGlow.yml
Normal file
5
html/changelogs/PsiOmegaDelta-SpiderGlow.yml
Normal 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."
|
||||||
Reference in New Issue
Block a user