mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-20 03:25:49 +01:00
Merge pull request #6962 from davipatury/effect-to-structure
Ports /tg/ obj damage system - Part 1
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
/datum/event/blob
|
||||
announceWhen = 60
|
||||
endWhen = 120
|
||||
var/obj/effect/blob/core/Blob
|
||||
var/obj/structure/blob/core/Blob
|
||||
|
||||
/datum/event/blob/announce()
|
||||
event_announcement.Announce("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/AI/outbreak5.ogg')
|
||||
@@ -14,7 +14,7 @@
|
||||
var/mob/C
|
||||
if(candidates.len)
|
||||
C = pick(candidates)
|
||||
Blob = new /obj/effect/blob/core(T, new_overmind=C.client)
|
||||
Blob = new /obj/structure/blob/core(T, new_overmind=C.client)
|
||||
for(var/i in 1 to 5)
|
||||
Blob.process()
|
||||
else
|
||||
|
||||
@@ -77,7 +77,7 @@
|
||||
max_number = 6
|
||||
vermstring = "lizards"
|
||||
if(VERM_SPIDERS)
|
||||
spawn_types = list(/obj/effect/spider/spiderling)
|
||||
spawn_types = list(/obj/structure/spider/spiderling)
|
||||
max_number = 3
|
||||
vermstring = "spiders"
|
||||
|
||||
@@ -89,7 +89,7 @@
|
||||
num--
|
||||
|
||||
if(vermin == VERM_SPIDERS)
|
||||
var/obj/effect/spider/spiderling/S = new(T)
|
||||
var/obj/structure/spider/spiderling/S = new(T)
|
||||
S.amount_grown = -1
|
||||
else
|
||||
var/spawn_type = pick(spawn_types)
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
/datum/event/spacevine/start()
|
||||
var/list/turfs = list() //list of all the empty floor turfs in the hallway areas
|
||||
|
||||
var/obj/effect/spacevine/SV = new()
|
||||
var/obj/structure/spacevine/SV = new()
|
||||
|
||||
for(var/area/hallway/A in world)
|
||||
for(var/turf/F in A)
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
if(turfs.len) //Pick a turf to spawn at if we can
|
||||
var/turf/T = pick(turfs)
|
||||
var/obj/effect/spacevine_controller/SC = new /obj/effect/spacevine_controller(T, , rand(30,70),rand(5,2)) //spawn a controller at turf
|
||||
var/obj/structure/spacevine_controller/SC = new /obj/structure/spacevine_controller(T, , rand(30,70),rand(5,2)) //spawn a controller at turf
|
||||
|
||||
// Make the event start fun - give the vine a random hostile mutation
|
||||
if(SC.vines.len)
|
||||
@@ -40,11 +40,11 @@
|
||||
// For stuff that isn't fun as a random-event vine
|
||||
var/nofun = FALSE
|
||||
|
||||
/datum/spacevine_mutation/proc/add_mutation_to_vinepiece(obj/effect/spacevine/holder)
|
||||
/datum/spacevine_mutation/proc/add_mutation_to_vinepiece(obj/structure/spacevine/holder)
|
||||
holder.mutations |= src
|
||||
holder.color = hue
|
||||
|
||||
/datum/spacevine_mutation/proc/remove_mutation_from_vinepiece(obj/effect/spacevine/holder)
|
||||
/datum/spacevine_mutation/proc/remove_mutation_from_vinepiece(obj/structure/spacevine/holder)
|
||||
holder.mutations -= src
|
||||
var/datum/spacevine_mutation/oldmutation
|
||||
if(holder.mutations.len)
|
||||
@@ -53,46 +53,46 @@
|
||||
else
|
||||
holder.color = ""
|
||||
|
||||
/datum/spacevine_mutation/proc/process_mutation(obj/effect/spacevine/holder)
|
||||
/datum/spacevine_mutation/proc/process_mutation(obj/structure/spacevine/holder)
|
||||
return
|
||||
|
||||
/datum/spacevine_mutation/proc/process_temperature(obj/effect/spacevine/holder, temp, volume)
|
||||
/datum/spacevine_mutation/proc/process_temperature(obj/structure/spacevine/holder, temp, volume)
|
||||
return
|
||||
|
||||
/datum/spacevine_mutation/proc/on_birth(obj/effect/spacevine/holder)
|
||||
/datum/spacevine_mutation/proc/on_birth(obj/structure/spacevine/holder)
|
||||
return
|
||||
|
||||
/datum/spacevine_mutation/proc/on_grow(obj/effect/spacevine/holder)
|
||||
/datum/spacevine_mutation/proc/on_grow(obj/structure/spacevine/holder)
|
||||
return
|
||||
|
||||
/datum/spacevine_mutation/proc/on_death(obj/effect/spacevine/holder)
|
||||
/datum/spacevine_mutation/proc/on_death(obj/structure/spacevine/holder)
|
||||
return
|
||||
|
||||
/datum/spacevine_mutation/proc/on_deletion(obj/effect/spacevine/holder)
|
||||
/datum/spacevine_mutation/proc/on_deletion(obj/structure/spacevine/holder)
|
||||
return
|
||||
|
||||
/datum/spacevine_mutation/proc/on_hit(obj/effect/spacevine/holder, mob/hitter, obj/item/I, expected_damage)
|
||||
/datum/spacevine_mutation/proc/on_hit(obj/structure/spacevine/holder, mob/hitter, obj/item/I, expected_damage)
|
||||
. = expected_damage
|
||||
|
||||
/datum/spacevine_mutation/proc/on_cross(obj/effect/spacevine/holder, mob/crosser)
|
||||
/datum/spacevine_mutation/proc/on_cross(obj/structure/spacevine/holder, mob/crosser)
|
||||
return
|
||||
|
||||
/datum/spacevine_mutation/proc/on_chem(obj/effect/spacevine/holder, datum/reagent/R)
|
||||
/datum/spacevine_mutation/proc/on_chem(obj/structure/spacevine/holder, datum/reagent/R)
|
||||
return
|
||||
|
||||
/datum/spacevine_mutation/proc/on_eat(obj/effect/spacevine/holder, mob/living/eater)
|
||||
/datum/spacevine_mutation/proc/on_eat(obj/structure/spacevine/holder, mob/living/eater)
|
||||
return
|
||||
|
||||
/datum/spacevine_mutation/proc/on_spread(obj/effect/spacevine/holder, turf/target)
|
||||
/datum/spacevine_mutation/proc/on_spread(obj/structure/spacevine/holder, turf/target)
|
||||
return
|
||||
|
||||
/datum/spacevine_mutation/proc/on_buckle(obj/effect/spacevine/holder, mob/living/buckled)
|
||||
/datum/spacevine_mutation/proc/on_buckle(obj/structure/spacevine/holder, mob/living/buckled)
|
||||
return
|
||||
|
||||
/datum/spacevine_mutation/proc/on_explosion(severity, obj/effect/spacevine/holder)
|
||||
/datum/spacevine_mutation/proc/on_explosion(severity, obj/structure/spacevine/holder)
|
||||
return
|
||||
|
||||
/datum/spacevine_mutation/proc/on_search(severity, obj/effect/spacevine/holder)
|
||||
/datum/spacevine_mutation/proc/on_search(severity, obj/structure/spacevine/holder)
|
||||
return
|
||||
|
||||
|
||||
@@ -140,7 +140,7 @@
|
||||
/turf/simulated/floor/vines/ChangeTurf(turf/open/floor/T)
|
||||
. = ..()
|
||||
//Do this *after* the turf has changed as qdel in spacevines will call changeturf again if it hasn't
|
||||
for(var/obj/effect/spacevine/SV in src)
|
||||
for(var/obj/structure/spacevine/SV in src)
|
||||
SV.wither()
|
||||
|
||||
/datum/spacevine_mutation/space_covering
|
||||
@@ -156,22 +156,22 @@
|
||||
/turf/space/transit
|
||||
))
|
||||
|
||||
/datum/spacevine_mutation/space_covering/on_grow(obj/effect/spacevine/holder)
|
||||
/datum/spacevine_mutation/space_covering/on_grow(obj/structure/spacevine/holder)
|
||||
process_mutation(holder)
|
||||
|
||||
/datum/spacevine_mutation/space_covering/on_spread(obj/effect/spacevine/holder, turf/target)
|
||||
if(target.type == /turf/space && !locate(/obj/effect/spacevine) in target)
|
||||
/datum/spacevine_mutation/space_covering/on_spread(obj/structure/spacevine/holder, turf/target)
|
||||
if(target.type == /turf/space && !locate(/obj/structure/spacevine) in target)
|
||||
holder.master.spawn_spacevine_piece(target, holder)
|
||||
. = TRUE
|
||||
|
||||
/datum/spacevine_mutation/space_covering/process_mutation(obj/effect/spacevine/holder)
|
||||
/datum/spacevine_mutation/space_covering/process_mutation(obj/structure/spacevine/holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
if(is_type_in_typecache(T, coverable_turfs))
|
||||
var/currtype = T.type
|
||||
T.ChangeTurf(/turf/simulated/floor/vines)
|
||||
T.baseturf = currtype
|
||||
|
||||
/datum/spacevine_mutation/space_covering/on_deletion(obj/effect/spacevine/holder)
|
||||
/datum/spacevine_mutation/space_covering/on_deletion(obj/structure/spacevine/holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
if(istype(T, /turf/simulated/floor/vines))
|
||||
T.ChangeTurf(T.baseturf)
|
||||
@@ -181,8 +181,8 @@
|
||||
hue = "#3333ff"
|
||||
quality = MINOR_NEGATIVE
|
||||
|
||||
/datum/spacevine_mutation/bluespace/on_spread(obj/effect/spacevine/holder, turf/target)
|
||||
if(holder.energy > 1 && !locate(/obj/effect/spacevine) in target)
|
||||
/datum/spacevine_mutation/bluespace/on_spread(obj/structure/spacevine/holder, turf/target)
|
||||
if(holder.energy > 1 && !locate(/obj/structure/spacevine) in target)
|
||||
// Lose bluespace upon piercing a single tile, and drop it from our own mutations too
|
||||
// Representing a loss in "high potential"
|
||||
// also conveniently prevents this from spreading too crazily
|
||||
@@ -197,7 +197,7 @@
|
||||
quality = POSITIVE
|
||||
severity = 4
|
||||
|
||||
/datum/spacevine_mutation/light/on_grow(obj/effect/spacevine/holder)
|
||||
/datum/spacevine_mutation/light/on_grow(obj/structure/spacevine/holder)
|
||||
if(holder.energy)
|
||||
holder.set_light(severity)
|
||||
|
||||
@@ -207,14 +207,14 @@
|
||||
severity = 10
|
||||
quality = NEGATIVE
|
||||
|
||||
/datum/spacevine_mutation/toxicity/on_cross(obj/effect/spacevine/holder, mob/living/crosser)
|
||||
/datum/spacevine_mutation/toxicity/on_cross(obj/structure/spacevine/holder, mob/living/crosser)
|
||||
if(issilicon(crosser))
|
||||
return
|
||||
if(prob(severity) && istype(crosser) && !isvineimmune(crosser))
|
||||
to_chat(crosser, "<span class='alert'>You accidently touch the vine and feel a strange sensation.</span>")
|
||||
crosser.adjustToxLoss(5)
|
||||
|
||||
/datum/spacevine_mutation/toxicity/on_eat(obj/effect/spacevine/holder, mob/living/eater)
|
||||
/datum/spacevine_mutation/toxicity/on_eat(obj/structure/spacevine/holder, mob/living/eater)
|
||||
if(!isvineimmune(eater))
|
||||
eater.adjustToxLoss(5)
|
||||
|
||||
@@ -226,7 +226,7 @@
|
||||
// kaboom events aren't fun
|
||||
nofun = TRUE
|
||||
|
||||
/datum/spacevine_mutation/explosive/on_explosion(explosion_severity, obj/effect/spacevine/holder)
|
||||
/datum/spacevine_mutation/explosive/on_explosion(explosion_severity, obj/structure/spacevine/holder)
|
||||
if(explosion_severity < 3)
|
||||
qdel(holder)
|
||||
else
|
||||
@@ -234,7 +234,7 @@
|
||||
spawn(5)
|
||||
holder.wither()
|
||||
|
||||
/datum/spacevine_mutation/explosive/on_death(obj/effect/spacevine/holder, mob/hitter, obj/item/I)
|
||||
/datum/spacevine_mutation/explosive/on_death(obj/structure/spacevine/holder, mob/hitter, obj/item/I)
|
||||
explosion(holder.loc, 0, 0, severity, 0, 0)
|
||||
|
||||
/datum/spacevine_mutation/fire_proof
|
||||
@@ -242,10 +242,10 @@
|
||||
hue = "#ff8888"
|
||||
quality = MINOR_NEGATIVE
|
||||
|
||||
/datum/spacevine_mutation/fire_proof/process_temperature(obj/effect/spacevine/holder, temp, volume)
|
||||
/datum/spacevine_mutation/fire_proof/process_temperature(obj/structure/spacevine/holder, temp, volume)
|
||||
return 1
|
||||
|
||||
/datum/spacevine_mutation/fire_proof/on_hit(obj/effect/spacevine/holder, mob/hitter, obj/item/I, expected_damage)
|
||||
/datum/spacevine_mutation/fire_proof/on_hit(obj/structure/spacevine/holder, mob/hitter, obj/item/I, expected_damage)
|
||||
if(I && I.damtype == "fire")
|
||||
. = 0
|
||||
else
|
||||
@@ -256,8 +256,8 @@
|
||||
hue = "#ff7700"
|
||||
quality = MINOR_NEGATIVE
|
||||
|
||||
/datum/spacevine_mutation/vine_eating/on_spread(obj/effect/spacevine/holder, turf/target)
|
||||
var/obj/effect/spacevine/prey = locate() in target
|
||||
/datum/spacevine_mutation/vine_eating/on_spread(obj/structure/spacevine/holder, turf/target)
|
||||
var/obj/structure/spacevine/prey = locate() in target
|
||||
if(prey && !prey.mutations.Find(src)) //Eat all vines that are not of the same origin
|
||||
prey.wither()
|
||||
. = TRUE
|
||||
@@ -268,20 +268,20 @@
|
||||
severity = 3
|
||||
quality = NEGATIVE
|
||||
|
||||
/datum/spacevine_mutation/aggressive_spread/on_spread(obj/effect/spacevine/holder, turf/target)
|
||||
/datum/spacevine_mutation/aggressive_spread/on_spread(obj/structure/spacevine/holder, turf/target)
|
||||
if(istype(target, /turf/simulated/wall/r_wall))
|
||||
// Too tough to pierce - should lead to interesting spread patterns
|
||||
return
|
||||
// Bust through windows or other stuff blocking the way
|
||||
if(!target.Enter(holder))
|
||||
for(var/atom/movable/AM in target)
|
||||
if(istype(AM, /obj/effect/spacevine) || !AM.density)
|
||||
if(istype(AM, /obj/structure/spacevine) || !AM.density)
|
||||
continue
|
||||
AM.ex_act(severity)
|
||||
target.ex_act(severity) // vine immunity handled at /mob/ex_act
|
||||
. = TRUE
|
||||
|
||||
/datum/spacevine_mutation/aggressive_spread/on_buckle(obj/effect/spacevine/holder, mob/living/buckled)
|
||||
/datum/spacevine_mutation/aggressive_spread/on_buckle(obj/structure/spacevine/holder, mob/living/buckled)
|
||||
buckled.ex_act(severity)
|
||||
|
||||
/datum/spacevine_mutation/transparency
|
||||
@@ -289,7 +289,7 @@
|
||||
hue = ""
|
||||
quality = POSITIVE
|
||||
|
||||
/datum/spacevine_mutation/transparency/on_grow(obj/effect/spacevine/holder)
|
||||
/datum/spacevine_mutation/transparency/on_grow(obj/structure/spacevine/holder)
|
||||
holder.set_opacity(0)
|
||||
holder.alpha = 125
|
||||
|
||||
@@ -299,13 +299,13 @@
|
||||
severity = 10
|
||||
quality = NEGATIVE
|
||||
|
||||
/datum/spacevine_mutation/thorns/on_cross(obj/effect/spacevine/holder, mob/living/crosser)
|
||||
/datum/spacevine_mutation/thorns/on_cross(obj/structure/spacevine/holder, mob/living/crosser)
|
||||
if(prob(severity) && istype(crosser) && !isvineimmune(holder))
|
||||
var/mob/living/M = crosser
|
||||
M.adjustBruteLoss(5)
|
||||
to_chat(M, "<span class='alert'>You cut yourself on the thorny vines.</span>")
|
||||
|
||||
/datum/spacevine_mutation/thorns/on_hit(obj/effect/spacevine/holder, mob/living/hitter, obj/item/I, expected_damage)
|
||||
/datum/spacevine_mutation/thorns/on_hit(obj/structure/spacevine/holder, mob/living/hitter, obj/item/I, expected_damage)
|
||||
if(prob(severity) && istype(hitter) && !isvineimmune(holder))
|
||||
var/mob/living/M = hitter
|
||||
M.adjustBruteLoss(5)
|
||||
@@ -317,13 +317,13 @@
|
||||
hue = "#997700"
|
||||
quality = NEGATIVE
|
||||
|
||||
/datum/spacevine_mutation/woodening/on_grow(obj/effect/spacevine/holder)
|
||||
/datum/spacevine_mutation/woodening/on_grow(obj/structure/spacevine/holder)
|
||||
if(holder.energy)
|
||||
holder.density = 1
|
||||
holder.maxhealth = 100
|
||||
holder.health = holder.maxhealth
|
||||
|
||||
/datum/spacevine_mutation/woodening/on_hit(obj/effect/spacevine/holder, mob/living/hitter, obj/item/I, expected_damage)
|
||||
/datum/spacevine_mutation/woodening/on_hit(obj/structure/spacevine/holder, mob/living/hitter, obj/item/I, expected_damage)
|
||||
if(!is_sharp(I))
|
||||
. = expected_damage * 0.5
|
||||
else
|
||||
@@ -335,11 +335,11 @@
|
||||
quality = NEGATIVE
|
||||
severity = 10
|
||||
|
||||
/datum/spacevine_mutation/flowering/on_grow(obj/effect/spacevine/holder)
|
||||
/datum/spacevine_mutation/flowering/on_grow(obj/structure/spacevine/holder)
|
||||
if(holder.energy == 2 && prob(severity) && !locate(/obj/structure/alien/resin/flower_bud_enemy) in range(5,holder))
|
||||
new /obj/structure/alien/resin/flower_bud_enemy(get_turf(holder))
|
||||
|
||||
/datum/spacevine_mutation/flowering/on_cross(obj/effect/spacevine/holder, mob/living/crosser)
|
||||
/datum/spacevine_mutation/flowering/on_cross(obj/structure/spacevine/holder, mob/living/crosser)
|
||||
if(prob(25))
|
||||
holder.entangle(crosser)
|
||||
|
||||
@@ -349,7 +349,7 @@
|
||||
hue = "#FF8080"
|
||||
quality = MINOR_NEGATIVE
|
||||
|
||||
/datum/spacevine_mutation/virulent_spread/on_search(obj/effect/spacevine/holder)
|
||||
/datum/spacevine_mutation/virulent_spread/on_search(obj/structure/spacevine/holder)
|
||||
return 1
|
||||
|
||||
// Sure, let's encourage crew members to deliberately breed a highly dangerous
|
||||
@@ -364,7 +364,7 @@
|
||||
/obj/item/stack/sheet/metal = 1
|
||||
)
|
||||
|
||||
/datum/spacevine_mutation/mineral/on_death(obj/effect/spacevine/holder)
|
||||
/datum/spacevine_mutation/mineral/on_death(obj/structure/spacevine/holder)
|
||||
if(!prob(drop_rate))
|
||||
return
|
||||
var/itemtype = pickweight(mineral_results)
|
||||
@@ -403,7 +403,7 @@
|
||||
)
|
||||
|
||||
// SPACE VINES (Note that this code is very similar to Biomass code)
|
||||
/obj/effect/spacevine
|
||||
/obj/structure/spacevine
|
||||
name = "space vines"
|
||||
desc = "An extremely expansionistic species of vine."
|
||||
icon = 'icons/effects/spacevines.dmi'
|
||||
@@ -416,14 +416,14 @@
|
||||
var/health = 50
|
||||
var/maxhealth = 50
|
||||
var/energy = 0
|
||||
var/obj/effect/spacevine_controller/master = null
|
||||
var/obj/structure/spacevine_controller/master = null
|
||||
var/list/mutations = list()
|
||||
|
||||
/obj/effect/spacevine/New()
|
||||
/obj/structure/spacevine/New()
|
||||
..()
|
||||
color = "#ffffff"
|
||||
|
||||
/obj/effect/spacevine/examine(mob/user)
|
||||
/obj/structure/spacevine/examine(mob/user)
|
||||
..()
|
||||
var/text = "This one is a"
|
||||
if(mutations.len)
|
||||
@@ -435,13 +435,13 @@
|
||||
text += " vine."
|
||||
to_chat(user, text)
|
||||
|
||||
/obj/effect/spacevine/proc/wither()
|
||||
/obj/structure/spacevine/proc/wither()
|
||||
for(var/datum/spacevine_mutation/SM in mutations)
|
||||
SM.on_death(src)
|
||||
qdel(src)
|
||||
|
||||
|
||||
/obj/effect/spacevine/Destroy()
|
||||
/obj/structure/spacevine/Destroy()
|
||||
for(var/datum/spacevine_mutation/SM in mutations)
|
||||
SM.on_deletion(src)
|
||||
if(master)
|
||||
@@ -460,11 +460,11 @@
|
||||
unbuckle_mob()
|
||||
return ..()
|
||||
|
||||
/obj/effect/spacevine/proc/add_mutation(datum/spacevine_mutation/mutation)
|
||||
/obj/structure/spacevine/proc/add_mutation(datum/spacevine_mutation/mutation)
|
||||
mutations |= mutation
|
||||
color = mutation.hue
|
||||
|
||||
/obj/effect/spacevine/proc/on_chem_effect(datum/reagent/R)
|
||||
/obj/structure/spacevine/proc/on_chem_effect(datum/reagent/R)
|
||||
var/override = 0
|
||||
for(var/datum/spacevine_mutation/SM in mutations)
|
||||
override += SM.on_chem(src, R)
|
||||
@@ -472,7 +472,7 @@
|
||||
if(prob(50))
|
||||
wither()
|
||||
|
||||
/obj/effect/spacevine/proc/eat(mob/eater)
|
||||
/obj/structure/spacevine/proc/eat(mob/eater)
|
||||
var/override = 0
|
||||
for(var/datum/spacevine_mutation/SM in mutations)
|
||||
override += SM.on_eat(src, eater)
|
||||
@@ -481,7 +481,7 @@
|
||||
eater.say("Nom")
|
||||
wither()
|
||||
|
||||
/obj/effect/spacevine/attackby(obj/item/weapon/W, mob/user, params)
|
||||
/obj/structure/spacevine/attackby(obj/item/weapon/W, mob/user, params)
|
||||
if (!W || !user || !W.type)
|
||||
return
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
@@ -491,7 +491,7 @@
|
||||
var/obj/item/weapon/scythe/S = W
|
||||
if(S.extend) //so folded telescythes won't get damage boosts / insta-clears (they instead will instead be treated like non-scythes)
|
||||
force = force * 4
|
||||
for(var/obj/effect/spacevine/B in range(1,src))
|
||||
for(var/obj/structure/spacevine/B in range(1,src))
|
||||
if(B.health > force) //this only is going to occur for woodening mutation vines (increased health) or if we nerf scythe damage/multiplier
|
||||
B.health -= force
|
||||
else
|
||||
@@ -513,29 +513,29 @@
|
||||
|
||||
..()
|
||||
|
||||
/obj/effect/spacevine/Crossed(mob/crosser)
|
||||
/obj/structure/spacevine/Crossed(mob/crosser)
|
||||
if(isliving(crosser))
|
||||
for(var/datum/spacevine_mutation/SM in mutations)
|
||||
SM.on_cross(src, crosser)
|
||||
|
||||
/obj/effect/spacevine/attack_hand(mob/user)
|
||||
/obj/structure/spacevine/attack_hand(mob/user)
|
||||
for(var/datum/spacevine_mutation/SM in mutations)
|
||||
SM.on_hit(src, user)
|
||||
user_unbuckle_mob(user, user)
|
||||
|
||||
/obj/effect/spacevine/attack_alien(mob/living/user)
|
||||
/obj/structure/spacevine/attack_alien(mob/living/user)
|
||||
eat(user)
|
||||
|
||||
/obj/effect/spacevine_controller
|
||||
/obj/structure/spacevine_controller
|
||||
invisibility = 101
|
||||
var/list/obj/effect/spacevine/vines = list()
|
||||
var/list/obj/structure/spacevine/vines = list()
|
||||
var/list/growth_queue = list()
|
||||
var/spread_multiplier = 5
|
||||
var/spread_cap = 30
|
||||
var/list/mutations_list = list()
|
||||
var/mutativeness = 1
|
||||
|
||||
/obj/effect/spacevine_controller/New(loc, list/muts, potency, production)
|
||||
/obj/structure/spacevine_controller/New(loc, list/muts, potency, production)
|
||||
color = "#ffffff"
|
||||
spawn_spacevine_piece(loc, , muts)
|
||||
processing_objects.Add(src)
|
||||
@@ -556,21 +556,21 @@
|
||||
..()
|
||||
|
||||
|
||||
/obj/effect/spacevine_controller/ex_act() //only killing all vines will end this suffering
|
||||
/obj/structure/spacevine_controller/ex_act() //only killing all vines will end this suffering
|
||||
return
|
||||
|
||||
/obj/effect/spacevine_controller/singularity_act()
|
||||
/obj/structure/spacevine_controller/singularity_act()
|
||||
return
|
||||
|
||||
/obj/effect/spacevine_controller/singularity_pull()
|
||||
/obj/structure/spacevine_controller/singularity_pull()
|
||||
return
|
||||
|
||||
/obj/effect/spacevine_controller/Destroy()
|
||||
/obj/structure/spacevine_controller/Destroy()
|
||||
processing_objects.Remove(src)
|
||||
return ..()
|
||||
|
||||
/obj/effect/spacevine_controller/proc/spawn_spacevine_piece(turf/location, obj/effect/spacevine/parent, list/muts)
|
||||
var/obj/effect/spacevine/SV = new(location)
|
||||
/obj/structure/spacevine_controller/proc/spawn_spacevine_piece(turf/location, obj/structure/spacevine/parent, list/muts)
|
||||
var/obj/structure/spacevine/SV = new(location)
|
||||
growth_queue += SV
|
||||
vines += SV
|
||||
SV.master = src
|
||||
@@ -590,7 +590,7 @@
|
||||
for(var/datum/spacevine_mutation/SM in SV.mutations)
|
||||
SM.on_birth(SV)
|
||||
|
||||
/obj/effect/spacevine_controller/process()
|
||||
/obj/structure/spacevine_controller/process()
|
||||
if(!vines || !vines.len)
|
||||
qdel(src) //space vines exterminated. Remove the controller
|
||||
return
|
||||
@@ -602,9 +602,9 @@
|
||||
|
||||
length = min( spread_cap , max( 1 , vines.len / spread_multiplier ) )
|
||||
var/i = 0
|
||||
var/list/obj/effect/spacevine/queue_end = list()
|
||||
var/list/obj/structure/spacevine/queue_end = list()
|
||||
|
||||
for(var/obj/effect/spacevine/SV in growth_queue)
|
||||
for(var/obj/structure/spacevine/SV in growth_queue)
|
||||
if(qdeleted(SV))
|
||||
continue
|
||||
i++
|
||||
@@ -625,7 +625,7 @@
|
||||
|
||||
growth_queue = growth_queue + queue_end
|
||||
|
||||
/obj/effect/spacevine/proc/grow()
|
||||
/obj/structure/spacevine/proc/grow()
|
||||
if(!energy)
|
||||
icon_state = pick("Med1", "Med2", "Med3")
|
||||
energy = 1
|
||||
@@ -637,7 +637,7 @@
|
||||
for(var/datum/spacevine_mutation/SM in mutations)
|
||||
SM.on_grow(src)
|
||||
|
||||
/obj/effect/spacevine/proc/entangle_mob()
|
||||
/obj/structure/spacevine/proc/entangle_mob()
|
||||
if(!buckled_mob && prob(25))
|
||||
for(var/mob/living/V in loc)
|
||||
entangle(V)
|
||||
@@ -645,7 +645,7 @@
|
||||
break //only capture one mob at a time
|
||||
|
||||
|
||||
/obj/effect/spacevine/proc/entangle(mob/living/V)
|
||||
/obj/structure/spacevine/proc/entangle(mob/living/V)
|
||||
if(!V || isvineimmune(V))
|
||||
return
|
||||
for(var/datum/spacevine_mutation/SM in mutations)
|
||||
@@ -654,7 +654,7 @@
|
||||
to_chat(V, "<span class='danger'>The vines [pick("wind", "tangle", "tighten")] around you!</span>")
|
||||
buckle_mob(V, 1)
|
||||
|
||||
/obj/effect/spacevine/proc/spread()
|
||||
/obj/structure/spacevine/proc/spread()
|
||||
var/list/dir_list = cardinal.Copy()
|
||||
var/spread_search = FALSE // Whether to exhaustive search all 4 cardinal dirs for an open direction
|
||||
for(var/datum/spacevine_mutation/SM in mutations)
|
||||
@@ -666,7 +666,7 @@
|
||||
var/spread_success = FALSE
|
||||
for(var/datum/spacevine_mutation/SM in mutations)
|
||||
spread_success |= SM.on_spread(src, stepturf) // If this returns 1, spreading succeeded
|
||||
if(!locate(/obj/effect/spacevine, stepturf))
|
||||
if(!locate(/obj/structure/spacevine, stepturf))
|
||||
// snowflake for space turf, but space turf is super common and a big deal
|
||||
if(!istype(stepturf, /turf/space) && stepturf.Enter(src))
|
||||
if(master)
|
||||
@@ -675,21 +675,21 @@
|
||||
if(spread_success || !spread_search)
|
||||
break
|
||||
|
||||
/obj/effect/spacevine/ex_act(severity)
|
||||
/obj/structure/spacevine/ex_act(severity)
|
||||
var/i
|
||||
for(var/datum/spacevine_mutation/SM in mutations)
|
||||
i += SM.on_explosion(severity, src)
|
||||
if(!i && prob(100/severity))
|
||||
wither()
|
||||
|
||||
/obj/effect/spacevine/temperature_expose(null, temp, volume)
|
||||
/obj/structure/spacevine/temperature_expose(null, temp, volume)
|
||||
var/override = 0
|
||||
for(var/datum/spacevine_mutation/SM in mutations)
|
||||
override += SM.process_temperature(src, temp, volume)
|
||||
if(!override)
|
||||
wither()
|
||||
|
||||
/obj/effect/spacevine/CanPass(atom/movable/mover, turf/target, height=0)
|
||||
/obj/structure/spacevine/CanPass(atom/movable/mover, turf/target, height=0)
|
||||
if(isvineimmune(mover))
|
||||
. = TRUE
|
||||
else
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
while((spawncount >= 1) && vents.len)
|
||||
var/obj/vent = pick(vents)
|
||||
var/obj/effect/spider/spiderling/S = new(vent.loc)
|
||||
var/obj/structure/spider/spiderling/S = new(vent.loc)
|
||||
if(prob(66))
|
||||
S.grow_as = /mob/living/simple_animal/hostile/poison/giant_spider/nurse
|
||||
vents -= vent
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
spawncount = 1
|
||||
while(spawncount >= 1 && vents.len)
|
||||
var/obj/vent = pick(vents)
|
||||
var/obj/effect/spider/spiderling/terror_spiderling/S = new(vent.loc)
|
||||
var/obj/structure/spider/spiderling/terror_spiderling/S = new(vent.loc)
|
||||
S.name = "evil-looking spiderling"
|
||||
S.grow_as = spider_type
|
||||
S.amount_grown = 75
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
var/turf/T = get_turf(src)
|
||||
message_admins("Kudzu planted by [key_name_admin(user)](<A HREF='?_src_=holder;adminmoreinfo=\ref[user]'>?</A>) (<A HREF='?_src_=holder;adminplayerobservefollow=\ref[user]'>FLW</A>) at ([T.x],[T.y],[T.z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[T.x];Y=[T.y];Z=[T.z]'>(JMP)</a>)",0,1)
|
||||
investigate_log("was planted by [key_name(user)] at ([T.x],[T.y],[T.z])","kudzu")
|
||||
new /obj/effect/spacevine_controller(user.loc, mutations, potency, production)
|
||||
new /obj/structure/spacevine_controller(user.loc, mutations, potency, production)
|
||||
user.drop_item()
|
||||
qdel(src)
|
||||
|
||||
|
||||
@@ -229,7 +229,7 @@
|
||||
desc = "<I>Mycena Bregprox</I>: This species of mushroom glows in the dark."
|
||||
icon_state = "glowshroom"
|
||||
filling_color = "#00FA9A"
|
||||
var/effect_path = /obj/effect/glowshroom
|
||||
var/effect_path = /obj/structure/glowshroom
|
||||
origin_tech = "biotech=4;plasmatech=6"
|
||||
light_color = "#006622"
|
||||
|
||||
@@ -245,7 +245,7 @@
|
||||
var/turf/simulated/wall = get_step(user.loc, tempdir)
|
||||
if(istype(wall))
|
||||
maxcount++
|
||||
for(var/obj/effect/glowshroom/G in user.loc)
|
||||
for(var/obj/structure/glowshroom/G in user.loc)
|
||||
count++
|
||||
if(count >= maxcount)
|
||||
to_chat(user, "<span class='warning'>There are too many shrooms here to plant [src].</span>")
|
||||
@@ -277,7 +277,7 @@
|
||||
desc = "<I>Mycena Ruthenia</I>: This species of mushroom glows in the dark, but isn't actually bioluminescent. They're warm to the touch..."
|
||||
icon_state = "glowcap"
|
||||
filling_color = "#00FA9A"
|
||||
effect_path = /obj/effect/glowshroom/glowcap
|
||||
effect_path = /obj/structure/glowshroom/glowcap
|
||||
origin_tech = "biotech=4;powerstorage=6;plasmatech=4"
|
||||
light_color = "#8E0300"
|
||||
|
||||
@@ -324,5 +324,5 @@
|
||||
name = "shadowshroom cluster"
|
||||
desc = "<I>Mycena Umbra</I>: This species of mushroom emits shadow instead of light."
|
||||
icon_state = "shadowshroom"
|
||||
effect_path = /obj/effect/glowshroom/shadowshroom
|
||||
effect_path = /obj/structure/glowshroom/shadowshroom
|
||||
origin_tech = "biotech=4;plasmatech=4;magnets=4"
|
||||
|
||||
@@ -485,7 +485,7 @@
|
||||
log_game("[key_name(user)] caused spiderling pests to spawn in a hydro tray")
|
||||
visible_message("<span class='warning'>The pests seem to behave oddly...</span>")
|
||||
for(var/i in 1 to 3)
|
||||
var/obj/effect/spider/spiderling/S = new(get_turf(src))
|
||||
var/obj/structure/spider/spiderling/S = new(get_turf(src))
|
||||
S.grow_as = /mob/living/simple_animal/hostile/poison/giant_spider/hunter
|
||||
else
|
||||
to_chat(user, "<span class='warning'>The pests seem to behave oddly, but quickly settle down...</span>")
|
||||
|
||||
@@ -229,7 +229,7 @@
|
||||
//Different classes of items give different commodities.
|
||||
if(istype(W,/obj/item/weapon/cigbutt))
|
||||
stored_comms["plastic"]++
|
||||
else if(istype(W,/obj/effect/spider/spiderling))
|
||||
else if(istype(W,/obj/structure/spider/spiderling))
|
||||
stored_comms["wood"]++
|
||||
stored_comms["wood"]++
|
||||
stored_comms["plastic"]++
|
||||
|
||||
@@ -98,7 +98,7 @@
|
||||
|
||||
if(prob(5)) //Spawns foam!
|
||||
visible_message("<span class='danger'>[src] whirs and bubbles violently, before releasing a plume of froth!</span>")
|
||||
new /obj/effect/effect/foam(loc)
|
||||
new /obj/structure/foam(loc)
|
||||
|
||||
else if(prob(5))
|
||||
audible_message("[src] makes an excited beeping booping sound!")
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
for(var/direction in shuffle(list(1,2,4,8,5,6,9,10)))
|
||||
var/step = get_step(src, direction)
|
||||
if(step)
|
||||
if(locate(/obj/effect/spacevine) in step)
|
||||
if(locate(/obj/structure/spacevine) in step)
|
||||
Move(step, get_dir(src, step))
|
||||
|
||||
/mob/living/simple_animal/hostile/retaliate/goat/handle_automated_action()
|
||||
@@ -47,7 +47,7 @@
|
||||
LoseTarget()
|
||||
src.visible_message("\blue [src] calms down.")
|
||||
|
||||
var/obj/effect/spacevine/SV = locate(/obj/effect/spacevine) in loc
|
||||
var/obj/structure/spacevine/SV = locate(/obj/structure/spacevine) in loc
|
||||
if(SV)
|
||||
SV.eat(src)
|
||||
|
||||
@@ -64,7 +64,7 @@
|
||||
/mob/living/simple_animal/hostile/retaliate/goat/Move()
|
||||
..()
|
||||
if(!stat)
|
||||
var/obj/effect/spacevine/SV = locate(/obj/effect/spacevine) in loc
|
||||
var/obj/structure/spacevine/SV = locate(/obj/structure/spacevine) in loc
|
||||
if(SV)
|
||||
SV.eat(src)
|
||||
|
||||
|
||||
@@ -116,7 +116,7 @@
|
||||
GiveUp(C)
|
||||
return
|
||||
//second, spin a sticky spiderweb on this tile
|
||||
var/obj/effect/spider/stickyweb/W = locate() in get_turf(src)
|
||||
var/obj/structure/spider/stickyweb/W = locate() in get_turf(src)
|
||||
if(!W)
|
||||
Web()
|
||||
else
|
||||
@@ -157,7 +157,7 @@
|
||||
stop_automated_movement = 1
|
||||
spawn(40)
|
||||
if(busy == SPINNING_WEB && src.loc == T)
|
||||
new /obj/effect/spider/stickyweb(T)
|
||||
new /obj/structure/spider/stickyweb(T)
|
||||
busy = 0
|
||||
stop_automated_movement = 0
|
||||
|
||||
@@ -187,7 +187,7 @@
|
||||
spawn(50)
|
||||
if(busy == SPINNING_COCOON)
|
||||
if(cocoon_target && istype(cocoon_target.loc, /turf) && get_dist(src,cocoon_target) <= 1)
|
||||
var/obj/effect/spider/cocoon/C = new(cocoon_target.loc)
|
||||
var/obj/structure/spider/cocoon/C = new(cocoon_target.loc)
|
||||
var/large_cocoon = 0
|
||||
C.pixel_x = cocoon_target.pixel_x
|
||||
C.pixel_y = cocoon_target.pixel_y
|
||||
@@ -223,7 +223,7 @@
|
||||
set category = "Spider"
|
||||
set desc = "Lay a clutch of eggs, but you must wrap a creature for feeding first."
|
||||
|
||||
var/obj/effect/spider/eggcluster/E = locate() in get_turf(src)
|
||||
var/obj/structure/spider/eggcluster/E = locate() in get_turf(src)
|
||||
if(E)
|
||||
to_chat(src, "<span class='notice'>There is already a cluster of eggs here!</span>")
|
||||
else if(!fed)
|
||||
@@ -236,7 +236,7 @@
|
||||
if(busy == LAYING_EGGS)
|
||||
E = locate() in get_turf(src)
|
||||
if(!E)
|
||||
var/obj/effect/spider/eggcluster/C = new /obj/effect/spider/eggcluster(src.loc)
|
||||
var/obj/structure/spider/eggcluster/C = new /obj/structure/spider/eggcluster(src.loc)
|
||||
C.faction = faction
|
||||
C.master_commander = master_commander
|
||||
if(ckey)
|
||||
|
||||
@@ -112,11 +112,11 @@
|
||||
else if(istype(loc, /turf/space))
|
||||
to_chat(src, "<span class='danger'>Webs cannot be spun in space.</span>")
|
||||
else
|
||||
var/obj/effect/spider/terrorweb/T = locate() in get_turf(src)
|
||||
var/obj/structure/spider/terrorweb/T = locate() in get_turf(src)
|
||||
if(T)
|
||||
to_chat(src, "<span class='danger'>There is already a web here.</span>")
|
||||
else
|
||||
var/obj/effect/spider/terrorweb/W = new /obj/effect/spider/terrorweb(loc)
|
||||
var/obj/structure/spider/terrorweb/W = new /obj/structure/spider/terrorweb(loc)
|
||||
W.creator_ckey = ckey
|
||||
if(thick)
|
||||
W.opacity = 1
|
||||
@@ -125,7 +125,7 @@
|
||||
W.infectious = 1
|
||||
W.name = "sharp terror web"
|
||||
|
||||
/obj/effect/spider/terrorweb
|
||||
/obj/structure/spider/terrorweb
|
||||
name = "terror web"
|
||||
desc = "it's stringy and sticky"
|
||||
icon = 'icons/effects/effects.dmi'
|
||||
@@ -136,18 +136,18 @@
|
||||
var/creator_ckey = null
|
||||
var/infectious = 0
|
||||
|
||||
/obj/effect/spider/terrorweb/New()
|
||||
/obj/structure/spider/terrorweb/New()
|
||||
..()
|
||||
if(prob(50))
|
||||
icon_state = "stickyweb2"
|
||||
|
||||
/obj/effect/spider/terrorweb/proc/DeCloakNearby()
|
||||
/obj/structure/spider/terrorweb/proc/DeCloakNearby()
|
||||
for(var/mob/living/simple_animal/hostile/poison/terror_spider/gray/G in view(6,src))
|
||||
if(!G.ckey && G.stat != DEAD)
|
||||
G.GrayDeCloak()
|
||||
G.Aggro()
|
||||
|
||||
/obj/effect/spider/terrorweb/CanPass(atom/movable/mover, turf/target)
|
||||
/obj/structure/spider/terrorweb/CanPass(atom/movable/mover, turf/target)
|
||||
if(istype(mover, /mob/living/simple_animal/hostile/poison/terror_spider))
|
||||
return 1
|
||||
if(istype(mover, /obj/item/projectile/terrorqueenspit))
|
||||
@@ -178,7 +178,7 @@
|
||||
return prob(20)
|
||||
return ..()
|
||||
|
||||
/obj/effect/spider/terrorweb/bullet_act(obj/item/projectile/Proj)
|
||||
/obj/structure/spider/terrorweb/bullet_act(obj/item/projectile/Proj)
|
||||
if(Proj.damage_type != BRUTE && Proj.damage_type != BURN)
|
||||
visible_message("<span class='danger'>[src] is undamaged by [Proj]!</span>")
|
||||
// Webs don't care about disablers, tasers, etc. Or toxin damage. They're organic, but not alive.
|
||||
@@ -196,7 +196,7 @@
|
||||
choices += L
|
||||
for(var/obj/O in oview(1,src))
|
||||
if(Adjacent(O) && !O.anchored)
|
||||
if(!istype(O, /obj/effect/spider/terrorweb) && !istype(O, /obj/effect/spider/cocoon) && !istype(O, /obj/effect/spider/spiderling/terror_spiderling))
|
||||
if(!istype(O, /obj/structure/spider/terrorweb) && !istype(O, /obj/structure/spider/cocoon) && !istype(O, /obj/structure/spider/spiderling/terror_spiderling))
|
||||
choices += O
|
||||
if(choices.len)
|
||||
cocoon_target = input(src,"What do you wish to cocoon?") in null|choices
|
||||
@@ -215,7 +215,7 @@
|
||||
if(do_after(src, 40, target = cocoon_target.loc))
|
||||
if(busy == SPINNING_COCOON)
|
||||
if(cocoon_target && isturf(cocoon_target.loc) && get_dist(src,cocoon_target) <= 1)
|
||||
var/obj/effect/spider/cocoon/C = new(cocoon_target.loc)
|
||||
var/obj/structure/spider/cocoon/C = new(cocoon_target.loc)
|
||||
var/large_cocoon = 0
|
||||
C.pixel_x = cocoon_target.pixel_x
|
||||
C.pixel_y = cocoon_target.pixel_y
|
||||
|
||||
@@ -74,7 +74,7 @@
|
||||
var/numlings = input("How many?") as null|anything in list(10, 20, 30, 40, 50)
|
||||
var/sbpc = input("%chance to be stillborn?") as null|anything in list(0, 25, 50, 75, 100)
|
||||
for(var/i=0, i<numlings, i++)
|
||||
var/obj/effect/spider/spiderling/terror_spiderling/S = new /obj/effect/spider/spiderling/terror_spiderling(get_turf(src))
|
||||
var/obj/structure/spider/spiderling/terror_spiderling/S = new /obj/structure/spider/spiderling/terror_spiderling(get_turf(src))
|
||||
S.grow_as = pick(/mob/living/simple_animal/hostile/poison/terror_spider/red, \
|
||||
/mob/living/simple_animal/hostile/poison/terror_spider/gray, \
|
||||
/mob/living/simple_animal/hostile/poison/terror_spider/green, \
|
||||
@@ -91,9 +91,9 @@
|
||||
if(T.spider_tier < spider_tier)
|
||||
T.degenerate = 1
|
||||
to_chat(T, "<span class='userdanger'>Through the hivemind, the raw power of [src] floods into your body, burning it from the inside out!</span>")
|
||||
for(var/obj/effect/spider/eggcluster/terror_eggcluster/T in ts_egg_list)
|
||||
for(var/obj/structure/spider/eggcluster/terror_eggcluster/T in ts_egg_list)
|
||||
qdel(T)
|
||||
for(var/obj/effect/spider/spiderling/terror_spiderling/T in ts_spiderling_list)
|
||||
for(var/obj/structure/spider/spiderling/terror_spiderling/T in ts_spiderling_list)
|
||||
T.stillborn = 1
|
||||
to_chat(src, "<span class='userdanger'>All Terror Spiders, except yourself, will die off shortly.</span>")
|
||||
|
||||
|
||||
@@ -119,7 +119,7 @@
|
||||
GrayCloak()
|
||||
else
|
||||
// otherwise, pick one of the valid turfs with no web to create a web there.
|
||||
new /obj/effect/spider/terrorweb(pick(g_turfs_valid))
|
||||
new /obj/structure/spider/terrorweb(pick(g_turfs_valid))
|
||||
visible_message("<span class='notice'>[src] spins a web.</span>")
|
||||
else
|
||||
if(invisibility == SEE_INVISIBLE_LEVEL_ONE)
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
greeneggs_action.Grant(src)
|
||||
|
||||
/mob/living/simple_animal/hostile/poison/terror_spider/green/proc/DoLayGreenEggs()
|
||||
var/obj/effect/spider/eggcluster/E = locate() in get_turf(src)
|
||||
var/obj/structure/spider/eggcluster/E = locate() in get_turf(src)
|
||||
if(E)
|
||||
to_chat(src, "<span class='notice'>There is already a cluster of eggs here!</span>")
|
||||
else if(fed < feedings_to_lay)
|
||||
|
||||
@@ -46,10 +46,10 @@
|
||||
if(T.stat != DEAD && !T.spider_placed && spider_awaymission == T.spider_awaymission)
|
||||
if(T.type == specific_type)
|
||||
numspiders += 1
|
||||
for(var/obj/effect/spider/eggcluster/terror_eggcluster/E in ts_egg_list)
|
||||
for(var/obj/structure/spider/eggcluster/terror_eggcluster/E in ts_egg_list)
|
||||
if(E.spiderling_type == specific_type && E.z == z)
|
||||
numspiders += E.spiderling_number
|
||||
for(var/obj/effect/spider/spiderling/terror_spiderling/L in ts_spiderling_list)
|
||||
for(var/obj/structure/spider/spiderling/terror_spiderling/L in ts_spiderling_list)
|
||||
if(!L.stillborn && L.grow_as == specific_type && L.z == z)
|
||||
numspiders += 1
|
||||
return numspiders
|
||||
@@ -36,7 +36,7 @@
|
||||
if(canspawn)
|
||||
canspawn = 0
|
||||
for(var/i in 0 to 30)
|
||||
var/obj/effect/spider/spiderling/terror_spiderling/S = new /obj/effect/spider/spiderling/terror_spiderling(get_turf(src))
|
||||
var/obj/structure/spider/spiderling/terror_spiderling/S = new /obj/structure/spider/spiderling/terror_spiderling(get_turf(src))
|
||||
S.grow_as = pick(/mob/living/simple_animal/hostile/poison/terror_spider/red, /mob/living/simple_animal/hostile/poison/terror_spider/gray)
|
||||
if(prob(66))
|
||||
S.stillborn = 1
|
||||
|
||||
@@ -153,7 +153,7 @@
|
||||
if(3)
|
||||
if(world.time > (spider_lastspawn + spider_spawnfrequency))
|
||||
if(prob(20))
|
||||
var/obj/effect/spider/eggcluster/terror_eggcluster/N = locate() in get_turf(src)
|
||||
var/obj/structure/spider/eggcluster/terror_eggcluster/N = locate() in get_turf(src)
|
||||
if(!N)
|
||||
spider_lastspawn = world.time
|
||||
DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/green, 2, 0)
|
||||
@@ -161,7 +161,7 @@
|
||||
if(4)
|
||||
if(world.time > (spider_lastspawn + spider_spawnfrequency))
|
||||
if(prob(20))
|
||||
var/obj/effect/spider/eggcluster/terror_eggcluster/N = locate() in get_turf(src)
|
||||
var/obj/structure/spider/eggcluster/terror_eggcluster/N = locate() in get_turf(src)
|
||||
if(!N)
|
||||
spider_lastspawn = world.time
|
||||
DoLayTerrorEggs(/mob/living/simple_animal/hostile/poison/terror_spider/red, 2, 1)
|
||||
@@ -169,7 +169,7 @@
|
||||
if(5)
|
||||
if(world.time > (spider_lastspawn + spider_spawnfrequency))
|
||||
if(prob(20))
|
||||
var/obj/effect/spider/eggcluster/terror_eggcluster/N = locate() in get_turf(src)
|
||||
var/obj/structure/spider/eggcluster/terror_eggcluster/N = locate() in get_turf(src)
|
||||
if(!N)
|
||||
if(!spider_awaymission)
|
||||
QueenFakeLings()
|
||||
@@ -331,7 +331,7 @@
|
||||
spider_can_fakelings--
|
||||
var/numlings = 15
|
||||
for(var/i in 1 to numlings)
|
||||
var/obj/effect/spider/spiderling/terror_spiderling/S = new /obj/effect/spider/spiderling/terror_spiderling(get_turf(src))
|
||||
var/obj/structure/spider/spiderling/terror_spiderling/S = new /obj/structure/spider/spiderling/terror_spiderling(get_turf(src))
|
||||
S.grow_as = /mob/living/simple_animal/hostile/poison/terror_spider/red
|
||||
S.stillborn = 1
|
||||
S.name = "Evil-Looking Spiderling"
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
// ----------------- TERROR SPIDERS: SPIDERLINGS (USED BY GREEN, WHITE, QUEEN AND MOTHER TYPES)
|
||||
// --------------------------------------------------------------------------------
|
||||
|
||||
/obj/effect/spider/spiderling/terror_spiderling
|
||||
/obj/structure/spider/spiderling/terror_spiderling
|
||||
name = "spiderling"
|
||||
desc = "A fast-moving tiny spider, prone to making aggressive hissing sounds. Hope it doesn't grow up."
|
||||
icon_state = "spiderling"
|
||||
@@ -17,15 +17,15 @@
|
||||
var/list/enemies = list()
|
||||
var/immediate_ventcrawl = 0
|
||||
|
||||
/obj/effect/spider/spiderling/terror_spiderling/New()
|
||||
/obj/structure/spider/spiderling/terror_spiderling/New()
|
||||
..()
|
||||
ts_spiderling_list += src
|
||||
|
||||
/obj/effect/spider/spiderling/terror_spiderling/Destroy()
|
||||
/obj/structure/spider/spiderling/terror_spiderling/Destroy()
|
||||
ts_spiderling_list -= src
|
||||
return ..()
|
||||
|
||||
/obj/effect/spider/spiderling/terror_spiderling/Bump(atom/A)
|
||||
/obj/structure/spider/spiderling/terror_spiderling/Bump(atom/A)
|
||||
if(istype(A, /obj/structure/table))
|
||||
forceMove(A.loc)
|
||||
else if(istype(A, /obj/machinery/recharge_station))
|
||||
@@ -33,7 +33,7 @@
|
||||
else
|
||||
..()
|
||||
|
||||
/obj/effect/spider/spiderling/terror_spiderling/process()
|
||||
/obj/structure/spider/spiderling/terror_spiderling/process()
|
||||
if(travelling_in_vent)
|
||||
if(isturf(loc))
|
||||
travelling_in_vent = 0
|
||||
@@ -104,7 +104,7 @@
|
||||
|
||||
/mob/living/simple_animal/hostile/poison/terror_spider/proc/DoLayTerrorEggs(lay_type, lay_number, lay_crawl)
|
||||
stop_automated_movement = 1
|
||||
var/obj/effect/spider/eggcluster/terror_eggcluster/C = new /obj/effect/spider/eggcluster/terror_eggcluster(get_turf(src))
|
||||
var/obj/structure/spider/eggcluster/terror_eggcluster/C = new /obj/structure/spider/eggcluster/terror_eggcluster(get_turf(src))
|
||||
C.spiderling_type = lay_type
|
||||
C.spiderling_number = lay_number
|
||||
C.spiderling_ventcrawl = lay_crawl
|
||||
@@ -118,7 +118,7 @@
|
||||
spawn(10)
|
||||
stop_automated_movement = 0
|
||||
|
||||
/obj/effect/spider/eggcluster/terror_eggcluster
|
||||
/obj/structure/spider/eggcluster/terror_eggcluster
|
||||
name = "terror egg cluster"
|
||||
desc = "A cluster of tiny spider eggs. They pulse with a strong inner life, and appear to have sharp thorns on the sides."
|
||||
icon_state = "eggs"
|
||||
@@ -130,7 +130,7 @@
|
||||
var/spiderling_ventcrawl = 1
|
||||
var/list/enemies = list()
|
||||
|
||||
/obj/effect/spider/eggcluster/terror_eggcluster/New()
|
||||
/obj/structure/spider/eggcluster/terror_eggcluster/New()
|
||||
..()
|
||||
ts_egg_list += src
|
||||
spawn(50)
|
||||
@@ -153,16 +153,16 @@
|
||||
else if(spiderling_type == /mob/living/simple_animal/hostile/poison/terror_spider/queen)
|
||||
name = "queen of terror eggs"
|
||||
|
||||
/obj/effect/spider/eggcluster/terror_eggcluster/Destroy()
|
||||
/obj/structure/spider/eggcluster/terror_eggcluster/Destroy()
|
||||
ts_egg_list -= src
|
||||
return ..()
|
||||
|
||||
/obj/effect/spider/eggcluster/terror_eggcluster/process()
|
||||
/obj/structure/spider/eggcluster/terror_eggcluster/process()
|
||||
amount_grown += rand(0,2)
|
||||
if(amount_grown >= 100)
|
||||
var/num = spiderling_number
|
||||
for(var/i=0, i<num, i++)
|
||||
var/obj/effect/spider/spiderling/terror_spiderling/S = new /obj/effect/spider/spiderling/terror_spiderling(get_turf(src))
|
||||
var/obj/structure/spider/spiderling/terror_spiderling/S = new /obj/structure/spider/spiderling/terror_spiderling(get_turf(src))
|
||||
if(spiderling_type)
|
||||
S.grow_as = spiderling_type
|
||||
S.use_vents = spiderling_ventcrawl
|
||||
@@ -174,7 +174,7 @@
|
||||
S.amount_grown = 250
|
||||
var/rnum = 5 - spiderling_number
|
||||
for(var/i=0, i<rnum, i++)
|
||||
var/obj/effect/spider/spiderling/terror_spiderling/S = new /obj/effect/spider/spiderling/terror_spiderling(get_turf(src))
|
||||
var/obj/structure/spider/spiderling/terror_spiderling/S = new /obj/structure/spider/spiderling/terror_spiderling(get_turf(src))
|
||||
S.stillborn = 1
|
||||
// every set of eggs always spawn 5 spiderlings, but most are decoys
|
||||
qdel(src)
|
||||
@@ -136,9 +136,9 @@
|
||||
break
|
||||
else if(ai_spins_webs && world.time > (last_spins_webs + freq_spins_webs))
|
||||
last_spins_webs = world.time
|
||||
var/obj/effect/spider/terrorweb/T = locate() in get_turf(src)
|
||||
var/obj/structure/spider/terrorweb/T = locate() in get_turf(src)
|
||||
if(!T)
|
||||
var/obj/effect/spider/terrorweb/W = new /obj/effect/spider/terrorweb(loc)
|
||||
var/obj/structure/spider/terrorweb/W = new /obj/structure/spider/terrorweb(loc)
|
||||
if(web_infects)
|
||||
W.infectious = 1
|
||||
W.name = "sharp terror web"
|
||||
@@ -275,7 +275,7 @@
|
||||
var/list/potentials = list()
|
||||
for(var/turf/simulated/T in oview(3,get_turf(src)))
|
||||
if(T.density == 0 && get_dist(get_turf(src),T) == 3)
|
||||
var/obj/effect/spider/terrorweb/W = locate() in T
|
||||
var/obj/structure/spider/terrorweb/W = locate() in T
|
||||
if(!W)
|
||||
var/obj/structure/grille/G = locate() in T
|
||||
if(!G)
|
||||
@@ -288,7 +288,7 @@
|
||||
var/list/webbed = list()
|
||||
for(var/turf/simulated/T in oview(3,get_turf(src)))
|
||||
if(T.density == 0 && get_dist(get_turf(src),T) == 3)
|
||||
var/obj/effect/spider/terrorweb/W = locate() in T
|
||||
var/obj/structure/spider/terrorweb/W = locate() in T
|
||||
if(W)
|
||||
webbed += T
|
||||
return webbed
|
||||
|
||||
@@ -168,7 +168,7 @@ var/global/list/ts_spiderling_list = list()
|
||||
visible_message("<span class='notice'>[src] harmlessly nuzzles [target].</span>")
|
||||
T.CheckFaction()
|
||||
CheckFaction()
|
||||
else if(istype(target, /obj/effect/spider/cocoon))
|
||||
else if(istype(target, /obj/structure/spider/cocoon))
|
||||
to_chat(src, "Destroying our own cocoons would not help us.")
|
||||
else if(istype(target, /obj/machinery/door/firedoor))
|
||||
var/obj/machinery/door/firedoor/F = target
|
||||
|
||||
@@ -269,7 +269,7 @@
|
||||
M.take_organ_damage(0,20)
|
||||
|
||||
/datum/reagent/sacid/reaction_obj(obj/O, volume)
|
||||
if((istype(O,/obj/item) || istype(O,/obj/effect/glowshroom)) && prob(40))
|
||||
if((istype(O,/obj/item) || istype(O,/obj/structure/glowshroom)) && prob(40))
|
||||
if(!O.unacidable)
|
||||
var/obj/effect/decal/cleanable/molten_object/I = new/obj/effect/decal/cleanable/molten_object(O.loc)
|
||||
I.desc = "Looks like this was \an [O] some time ago."
|
||||
@@ -615,7 +615,7 @@
|
||||
H.status_flags |= DISFIGURED
|
||||
|
||||
/datum/reagent/facid/reaction_obj(obj/O, volume)
|
||||
if((istype(O, /obj/item) || istype(O, /obj/effect/glowshroom)))
|
||||
if((istype(O, /obj/item) || istype(O, /obj/structure/glowshroom)))
|
||||
if(!O.unacidable)
|
||||
var/obj/effect/decal/cleanable/molten_object/I = new/obj/effect/decal/cleanable/molten_object(O.loc)
|
||||
I.desc = "Looks like this was \an [O] some time ago."
|
||||
@@ -924,10 +924,10 @@
|
||||
var/obj/structure/alien/weeds/alien_weeds = O
|
||||
alien_weeds.health -= rand(15,35) // Kills alien weeds pretty fast
|
||||
alien_weeds.healthcheck()
|
||||
else if(istype(O, /obj/effect/glowshroom)) //even a small amount is enough to kill it
|
||||
else if(istype(O, /obj/structure/glowshroom)) //even a small amount is enough to kill it
|
||||
qdel(O)
|
||||
else if(istype(O,/obj/effect/spacevine))
|
||||
var/obj/effect/spacevine/SV = O
|
||||
else if(istype(O,/obj/structure/spacevine))
|
||||
var/obj/structure/spacevine/SV = O
|
||||
SV.on_chem_effect(src)
|
||||
|
||||
/datum/reagent/glyphosate/reaction_mob(mob/living/M, method=TOUCH, volume)
|
||||
|
||||
@@ -82,7 +82,7 @@
|
||||
//use up stored charges
|
||||
if(charges >= 10)
|
||||
charges -= 10
|
||||
new /obj/effect/spider/eggcluster(pick(view(1,src)))
|
||||
new /obj/structure/spider/eggcluster(pick(view(1,src)))
|
||||
|
||||
if(charges >= 3)
|
||||
if(prob(5))
|
||||
|
||||
@@ -236,8 +236,8 @@
|
||||
/proc/forbidden_atoms_check(atom/A)
|
||||
var/list/blacklist = list(
|
||||
/mob/living,
|
||||
/obj/effect/blob,
|
||||
/obj/effect/spider/spiderling,
|
||||
/obj/structure/blob,
|
||||
/obj/structure/spider/spiderling,
|
||||
/obj/item/weapon/disk/nuclear,
|
||||
/obj/machinery/nuclearbomb,
|
||||
/obj/item/device/radio/beacon,
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
owner.emote("scream")
|
||||
var/spiders = rand(3,5)
|
||||
for(var/i in 1 to spiders)
|
||||
new/obj/effect/spider/spiderling(get_turf(owner))
|
||||
new/obj/structure/spider/spiderling(get_turf(owner))
|
||||
owner.visible_message("<span class='danger'>[owner] bursts open! Holy fuck!</span>")
|
||||
owner.gib()
|
||||
|
||||
@@ -86,17 +86,17 @@
|
||||
owner.Stun(20)
|
||||
owner.Weaken(20)
|
||||
// yes, this is a long stun - that's intentional. Gotta give the spiderlings time to escape.
|
||||
var/obj/effect/spider/spiderling/terror_spiderling/S1 = new(get_turf(owner))
|
||||
var/obj/structure/spider/spiderling/terror_spiderling/S1 = new(get_turf(owner))
|
||||
S1.grow_as = /mob/living/simple_animal/hostile/poison/terror_spider/red
|
||||
S1.name = "red spiderling"
|
||||
if(prob(50))
|
||||
S1.stillborn = 1
|
||||
var/obj/effect/spider/spiderling/terror_spiderling/S2 = new(get_turf(owner))
|
||||
var/obj/structure/spider/spiderling/terror_spiderling/S2 = new(get_turf(owner))
|
||||
S2.grow_as = /mob/living/simple_animal/hostile/poison/terror_spider/gray
|
||||
S2.name = "gray spiderling"
|
||||
if(prob(50))
|
||||
S2.stillborn = 1
|
||||
var/obj/effect/spider/spiderling/terror_spiderling/S3 = new(get_turf(owner))
|
||||
var/obj/structure/spider/spiderling/terror_spiderling/S3 = new(get_turf(owner))
|
||||
S3.grow_as = /mob/living/simple_animal/hostile/poison/terror_spider/green
|
||||
S3.name = "green spiderling"
|
||||
if(prob(50))
|
||||
|
||||
Reference in New Issue
Block a user