mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-20 20:45:28 +01:00
Changes obj/effect/blob,spider,swarmer,energy_net,spacevines to be ob/structures instead, since you can hit and destroy them.
Adds a large ash and large molten item decal (for future use) simplifies decal/cleanable/replace_decal() code a bit. Changes construction() proc to on_construction() for consistency, same for deconstruction(). Made a deconstruct() proc for machinery and computer (also for future use).
This commit is contained in:
@@ -208,7 +208,7 @@ Pipelines + Other Objects -> Pipe network
|
||||
|
||||
return img
|
||||
|
||||
/obj/machinery/atmospherics/construction(pipe_type, obj_color)
|
||||
/obj/machinery/atmospherics/on_construction(pipe_type, obj_color)
|
||||
if(can_unwrench)
|
||||
color = obj_color
|
||||
pipe_color = obj_color
|
||||
|
||||
@@ -72,7 +72,7 @@ Pipenet stuff; housekeeping
|
||||
qdel(AIR_I)
|
||||
AIR_I = null
|
||||
|
||||
/obj/machinery/atmospherics/components/construction()
|
||||
/obj/machinery/atmospherics/components/on_construction()
|
||||
..()
|
||||
update_parents()
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
/obj/item/weapon/stock_parts/console_screen = 1,
|
||||
/obj/item/stack/sheet/glass = 2)
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/cryo_cell/construction()
|
||||
/obj/machinery/atmospherics/components/unary/cryo_cell/on_construction()
|
||||
..(dir, dir)
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/cryo_cell/RefreshParts()
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/thermomachine/construction()
|
||||
/obj/machinery/atmospherics/components/unary/thermomachine/on_construction()
|
||||
..(dir,dir)
|
||||
|
||||
/obj/machinery/atmospherics/components/unary/thermomachine/RefreshParts()
|
||||
|
||||
@@ -235,7 +235,7 @@
|
||||
air_update_turf() // Update the environment if needed.
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/portable_atmospherics/canister/blob_act(obj/effect/blob/B)
|
||||
/obj/machinery/portable_atmospherics/canister/blob_act(obj/structure/blob/B)
|
||||
take_damage(100, BRUTE, 0)
|
||||
|
||||
/obj/machinery/portable_atmospherics/canister/burn()
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
if(!candidates.len)
|
||||
return NOT_ENOUGH_PLAYERS
|
||||
var/mob/dead/observer/new_blob = pick(candidates)
|
||||
var/obj/effect/blob/core/BC = new/obj/effect/blob/core(pick(blobstart), new_blob.client, new_rate)
|
||||
var/obj/structure/blob/core/BC = new/obj/structure/blob/core(pick(blobstart), new_blob.client, new_rate)
|
||||
BC.overmind.blob_points = min(20 + player_list.len, BC.overmind.max_blob_points)
|
||||
spawned_mobs += BC.overmind
|
||||
message_admins("[BC.overmind.key] has been made into a blob overmind by an event.")
|
||||
|
||||
@@ -129,7 +129,7 @@
|
||||
|
||||
for(var/i in 1 to 5)
|
||||
T = pick_n_take(empty_shuttle_turfs)
|
||||
new /obj/effect/spider/stickyweb(T)
|
||||
new /obj/structure/spider/stickyweb(T)
|
||||
|
||||
if(ANTIDOTE_NEEDED)
|
||||
var/virus_type = pick(/datum/disease/beesease, /datum/disease/brainrot, /datum/disease/fluspanish)
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
/datum/round_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)
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
if(turfs.len) //Pick a turf to spawn at if we can
|
||||
var/turf/T = pick(turfs)
|
||||
new/obj/effect/spacevine_controller(T) //spawn a controller at turf
|
||||
new/obj/structure/spacevine_controller(T) //spawn a controller at turf
|
||||
|
||||
|
||||
/datum/spacevine_mutation
|
||||
@@ -28,40 +28,40 @@
|
||||
var/hue
|
||||
var/quality
|
||||
|
||||
/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_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, target, obj/effect/spacevine/holder)
|
||||
/datum/spacevine_mutation/proc/on_explosion(severity, target, obj/structure/spacevine/holder)
|
||||
return
|
||||
|
||||
|
||||
@@ -107,7 +107,7 @@
|
||||
ChangeTurf(src.baseturf)
|
||||
|
||||
/turf/open/floor/vines/ChangeTurf(turf/open/floor/T)
|
||||
for(var/obj/effect/spacevine/SV in src)
|
||||
for(var/obj/structure/spacevine/SV in src)
|
||||
qdel(SV)
|
||||
. = ..()
|
||||
UpdateAffectingLights()
|
||||
@@ -125,17 +125,17 @@
|
||||
/turf/open/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/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/open/floor/vines)
|
||||
T.baseturf = currtype
|
||||
|
||||
/datum/spacevine_mutation/space_covering/on_death(obj/effect/spacevine/holder)
|
||||
/datum/spacevine_mutation/space_covering/on_death(obj/structure/spacevine/holder)
|
||||
var/turf/T = get_turf(holder)
|
||||
if(istype(T, /turf/open/floor/vines))
|
||||
T.ChangeTurf(T.baseturf)
|
||||
@@ -145,8 +145,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)
|
||||
holder.master.spawn_spacevine_piece(target, holder)
|
||||
|
||||
/datum/spacevine_mutation/light
|
||||
@@ -155,7 +155,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.SetLuminosity(severity, 3)
|
||||
|
||||
@@ -165,14 +165,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))
|
||||
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)
|
||||
|
||||
@@ -182,14 +182,14 @@
|
||||
quality = NEGATIVE
|
||||
severity = 2
|
||||
|
||||
/datum/spacevine_mutation/explosive/on_explosion(explosion_severity, target, obj/effect/spacevine/holder)
|
||||
/datum/spacevine_mutation/explosive/on_explosion(explosion_severity, target, obj/structure/spacevine/holder)
|
||||
if(explosion_severity < 3)
|
||||
qdel(src)
|
||||
else
|
||||
. = 1
|
||||
QDEL_IN(src, 5)
|
||||
|
||||
/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
|
||||
@@ -197,10 +197,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
|
||||
@@ -211,8 +211,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
|
||||
qdel(prey)
|
||||
|
||||
@@ -222,10 +222,10 @@
|
||||
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)
|
||||
target.ex_act(severity, src) // vine immunity handled at /mob/ex_act
|
||||
|
||||
/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, src)
|
||||
|
||||
/datum/spacevine_mutation/transparency
|
||||
@@ -233,7 +233,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.SetOpacity(0)
|
||||
holder.alpha = 125
|
||||
|
||||
@@ -243,7 +243,7 @@
|
||||
severity = 3
|
||||
quality = NEGATIVE
|
||||
|
||||
/datum/spacevine_mutation/oxy_eater/process_mutation(obj/effect/spacevine/holder)
|
||||
/datum/spacevine_mutation/oxy_eater/process_mutation(obj/structure/spacevine/holder)
|
||||
var/turf/open/floor/T = holder.loc
|
||||
if(istype(T))
|
||||
var/datum/gas_mixture/GM = T.air
|
||||
@@ -258,7 +258,7 @@
|
||||
severity = 3
|
||||
quality = NEGATIVE
|
||||
|
||||
/datum/spacevine_mutation/nitro_eater/process_mutation(obj/effect/spacevine/holder)
|
||||
/datum/spacevine_mutation/nitro_eater/process_mutation(obj/structure/spacevine/holder)
|
||||
var/turf/open/floor/T = holder.loc
|
||||
if(istype(T))
|
||||
var/datum/gas_mixture/GM = T.air
|
||||
@@ -273,7 +273,7 @@
|
||||
severity = 3
|
||||
quality = POSITIVE
|
||||
|
||||
/datum/spacevine_mutation/carbondioxide_eater/process_mutation(obj/effect/spacevine/holder)
|
||||
/datum/spacevine_mutation/carbondioxide_eater/process_mutation(obj/structure/spacevine/holder)
|
||||
var/turf/open/floor/T = holder.loc
|
||||
if(istype(T))
|
||||
var/datum/gas_mixture/GM = T.air
|
||||
@@ -288,7 +288,7 @@
|
||||
severity = 3
|
||||
quality = POSITIVE
|
||||
|
||||
/datum/spacevine_mutation/plasma_eater/process_mutation(obj/effect/spacevine/holder)
|
||||
/datum/spacevine_mutation/plasma_eater/process_mutation(obj/structure/spacevine/holder)
|
||||
var/turf/open/floor/T = holder.loc
|
||||
if(istype(T))
|
||||
var/datum/gas_mixture/GM = T.air
|
||||
@@ -303,13 +303,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)
|
||||
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)
|
||||
@@ -321,13 +321,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(I.is_sharp())
|
||||
. = expected_damage * 0.5
|
||||
else
|
||||
@@ -339,16 +339,16 @@
|
||||
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)
|
||||
holder.entangle(crosser)
|
||||
|
||||
|
||||
// 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'
|
||||
@@ -361,10 +361,10 @@
|
||||
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/Destroy()
|
||||
/obj/structure/spacevine/Destroy()
|
||||
for(var/datum/spacevine_mutation/SM in mutations)
|
||||
SM.on_death(src)
|
||||
if(master)
|
||||
@@ -381,7 +381,7 @@
|
||||
unbuckle_all_mobs(force=1)
|
||||
return ..()
|
||||
|
||||
/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)
|
||||
@@ -389,7 +389,7 @@
|
||||
if(prob(50))
|
||||
qdel(src)
|
||||
|
||||
/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)
|
||||
@@ -398,7 +398,7 @@
|
||||
eater.say("Nom")
|
||||
qdel(src)
|
||||
|
||||
/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)
|
||||
@@ -406,7 +406,7 @@
|
||||
|
||||
if(istype(W, /obj/item/weapon/scythe))
|
||||
force = force * 4
|
||||
for(var/obj/effect/spacevine/B in orange(1,src))
|
||||
for(var/obj/structure/spacevine/B in orange(1,src))
|
||||
B.health = health - force
|
||||
if(B.health < 1)
|
||||
qdel(B)
|
||||
@@ -433,36 +433,36 @@
|
||||
|
||||
..()
|
||||
|
||||
/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_paw(mob/living/user)
|
||||
/obj/structure/spacevine/attack_paw(mob/living/user)
|
||||
user.do_attack_animation(src)
|
||||
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 = INVISIBILITY_ABSTRACT
|
||||
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/mutativness = 1
|
||||
|
||||
/obj/effect/spacevine_controller/New(loc, list/muts, mttv, spreading)
|
||||
/obj/structure/spacevine_controller/New(loc, list/muts, mttv, spreading)
|
||||
spawn_spacevine_piece(loc, , muts)
|
||||
START_PROCESSING(SSobj, src)
|
||||
init_subtypes(/datum/spacevine_mutation/, mutations_list)
|
||||
@@ -472,21 +472,21 @@
|
||||
spread_cap *= spreading / 50
|
||||
spread_multiplier /= spreading / 50
|
||||
|
||||
/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()
|
||||
STOP_PROCESSING(SSobj, 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
|
||||
@@ -508,7 +508,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)
|
||||
qdel(src) //space vines exterminated. Remove the controller
|
||||
return
|
||||
@@ -520,9 +520,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++
|
||||
@@ -543,7 +543,7 @@
|
||||
|
||||
growth_queue = growth_queue + queue_end
|
||||
|
||||
/obj/effect/spacevine/proc/grow()
|
||||
/obj/structure/spacevine/proc/grow()
|
||||
if(!energy)
|
||||
src.icon_state = pick("Med1", "Med2", "Med3")
|
||||
energy = 1
|
||||
@@ -555,7 +555,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(!has_buckled_mobs() && prob(25))
|
||||
for(var/mob/living/V in src.loc)
|
||||
entangle(V)
|
||||
@@ -563,7 +563,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)
|
||||
@@ -572,18 +572,18 @@
|
||||
V << "<span class='danger'>The vines [pick("wind", "tangle", "tighten")] around you!</span>"
|
||||
buckle_mob(V)
|
||||
|
||||
/obj/effect/spacevine/proc/spread()
|
||||
/obj/structure/spacevine/proc/spread()
|
||||
var/direction = pick(cardinal)
|
||||
var/turf/stepturf = get_step(src,direction)
|
||||
for(var/datum/spacevine_mutation/SM in mutations)
|
||||
SM.on_spread(src, stepturf)
|
||||
stepturf = get_step(src,direction) //in case turf changes, to make sure no runtimes happen
|
||||
if(!locate(/obj/effect/spacevine, stepturf))
|
||||
if(!locate(/obj/structure/spacevine, stepturf))
|
||||
if(stepturf.Enter(src))
|
||||
if(master)
|
||||
master.spawn_spacevine_piece(stepturf, src)
|
||||
|
||||
/obj/effect/spacevine/ex_act(severity, target)
|
||||
/obj/structure/spacevine/ex_act(severity, target)
|
||||
if(istype(target, type)) //if its agressive spread vine dont do anything
|
||||
return
|
||||
var/i
|
||||
@@ -592,14 +592,14 @@
|
||||
if(!i && prob(100/severity))
|
||||
qdel(src)
|
||||
|
||||
/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)
|
||||
qdel(src)
|
||||
|
||||
/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
|
||||
|
||||
@@ -29,7 +29,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
|
||||
|
||||
@@ -49,11 +49,11 @@
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/machinery/smartfridge/construction()
|
||||
/obj/machinery/smartfridge/on_construction()
|
||||
for(var/datum/A in contents)
|
||||
qdel(A)
|
||||
|
||||
/obj/machinery/smartfridge/deconstruction()
|
||||
/obj/machinery/smartfridge/on_deconstruction()
|
||||
for(var/atom/movable/A in contents)
|
||||
A.loc = loc
|
||||
|
||||
|
||||
@@ -204,6 +204,6 @@
|
||||
emergency_shutdown()
|
||||
..()
|
||||
|
||||
/obj/machinery/computer/holodeck/blob_act(obj/effect/blob/B)
|
||||
/obj/machinery/computer/holodeck/blob_act(obj/structure/blob/B)
|
||||
emergency_shutdown()
|
||||
..()
|
||||
@@ -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)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/seeds/kudzu/attack_self(mob/user)
|
||||
|
||||
@@ -237,13 +237,13 @@
|
||||
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"
|
||||
|
||||
/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/glowshroom/attack_self(mob/user)
|
||||
if(istype(user.loc,/turf/open/space))
|
||||
return
|
||||
var/obj/effect/glowshroom/planted = new effect_path(user.loc)
|
||||
var/obj/structure/glowshroom/planted = new effect_path(user.loc)
|
||||
planted.delay = planted.delay - seed.production * 100 //So the delay goes DOWN with better stats instead of up. :I
|
||||
planted.endurance = seed.endurance
|
||||
planted.yield = seed.yield
|
||||
@@ -274,5 +274,5 @@
|
||||
desc = "<I>Mycena Ruthenia</I>: This species of mushroom glows in the dark, but aren't 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"
|
||||
|
||||
@@ -444,7 +444,7 @@
|
||||
if(pestlevel > 5)
|
||||
visible_message("<span class='warning'>The pests seem to behave oddly...</span>")
|
||||
for(var/i=0, i<3, i++)
|
||||
var/obj/effect/spider/spiderling/S = new(src.loc)
|
||||
var/obj/structure/spider/spiderling/S = new(src.loc)
|
||||
S.grow_as = /mob/living/simple_animal/hostile/poison/giant_spider/hunter
|
||||
else
|
||||
usr << "<span class='warning'>The pests seem to behave oddly, but quickly settle down...</span>"
|
||||
|
||||
@@ -126,7 +126,7 @@
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/machinery/mineral/ore_redemption/deconstruction()
|
||||
/obj/machinery/mineral/ore_redemption/on_deconstruction()
|
||||
empty_content()
|
||||
|
||||
/obj/machinery/mineral/ore_redemption/proc/SmeltMineral(obj/item/weapon/ore/O)
|
||||
|
||||
@@ -281,42 +281,37 @@
|
||||
|
||||
//Outdated but still in use apparently. This should at least be a human proc.
|
||||
//Daily reminder to murder this - Remie.
|
||||
/mob/proc/get_equipped_items()
|
||||
var/list/items = list()
|
||||
/mob/living/proc/get_equipped_items()
|
||||
return
|
||||
|
||||
if(hasvar(src,"back"))
|
||||
if(src:back)
|
||||
items += src:back
|
||||
if(hasvar(src,"belt"))
|
||||
if(src:belt)
|
||||
items += src:belt
|
||||
if(hasvar(src,"ears"))
|
||||
if(src:ears)
|
||||
items += src:ears
|
||||
if(hasvar(src,"glasses"))
|
||||
if(src:glasses)
|
||||
items += src:glasses
|
||||
if(hasvar(src,"gloves"))
|
||||
if(src:gloves)
|
||||
items += src:gloves
|
||||
if(hasvar(src,"head"))
|
||||
if(src:head)
|
||||
items += src:head
|
||||
if(hasvar(src,"shoes"))
|
||||
if(src:shoes)
|
||||
items += src:shoes
|
||||
if(hasvar(src,"wear_id"))
|
||||
if(src:wear_id)
|
||||
items += src:wear_id
|
||||
if(hasvar(src,"wear_mask"))
|
||||
if(src:wear_mask)
|
||||
items += src:wear_mask
|
||||
if(hasvar(src,"wear_suit"))
|
||||
if(src:wear_suit)
|
||||
items += src:wear_suit
|
||||
if(hasvar(src,"w_uniform"))
|
||||
if(src:w_uniform)
|
||||
items += src:w_uniform
|
||||
/mob/living/carbon/get_equipped_items()
|
||||
var/list/items = list()
|
||||
if(back)
|
||||
items += back
|
||||
if(head)
|
||||
items += head
|
||||
if(wear_mask)
|
||||
items += wear_mask
|
||||
return items
|
||||
|
||||
/mob/living/carbon/human/get_equipped_items()
|
||||
var/list/items = ..()
|
||||
if(belt)
|
||||
items += belt
|
||||
if(ears)
|
||||
items += ears
|
||||
if(glasses)
|
||||
items += glasses
|
||||
if(gloves)
|
||||
items += gloves
|
||||
if(shoes)
|
||||
items += shoes
|
||||
if(wear_id)
|
||||
items += wear_id
|
||||
if(wear_suit)
|
||||
items += wear_suit
|
||||
if(w_uniform)
|
||||
items += w_uniform
|
||||
return items
|
||||
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
/mob/living/brain/ex_act() //you cant blow up brainmobs because it makes transfer_to() freak out when borgs blow up.
|
||||
return
|
||||
|
||||
/mob/living/brain/blob_act(obj/effect/blob/B)
|
||||
/mob/living/brain/blob_act(obj/structure/blob/B)
|
||||
return
|
||||
|
||||
/mob/living/brain/get_eye_protection()//no eyes
|
||||
|
||||
@@ -155,7 +155,7 @@ mob/living/carbon/bullet_act(obj/item/projectile/P, def_zone)
|
||||
return dam_zone
|
||||
|
||||
|
||||
/mob/living/carbon/blob_act(obj/effect/blob/B)
|
||||
/mob/living/carbon/blob_act(obj/structure/blob/B)
|
||||
if (stat == DEAD)
|
||||
return
|
||||
else
|
||||
|
||||
@@ -379,7 +379,7 @@
|
||||
break
|
||||
..()
|
||||
|
||||
/mob/living/carbon/human/blob_act(obj/effect/blob/B)
|
||||
/mob/living/carbon/human/blob_act(obj/structure/blob/B)
|
||||
if(stat == DEAD)
|
||||
return
|
||||
show_message("<span class='userdanger'>The blob attacks you!</span>")
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
/mob/living/silicon/ai/attack_slime(mob/living/simple_animal/slime/user)
|
||||
return //immune to slimes
|
||||
|
||||
/mob/living/silicon/ai/blob_act(obj/effect/blob/B)
|
||||
/mob/living/silicon/ai/blob_act(obj/structure/blob/B)
|
||||
if (stat != DEAD)
|
||||
adjustBruteLoss(60)
|
||||
updatehealth()
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
|
||||
/mob/living/silicon/pai/blob_act(obj/effect/blob/B)
|
||||
/mob/living/silicon/pai/blob_act(obj/structure/blob/B)
|
||||
return 0
|
||||
|
||||
/mob/living/silicon/pai/emp_act(severity)
|
||||
|
||||
@@ -150,7 +150,7 @@
|
||||
update_icons()
|
||||
|
||||
|
||||
/mob/living/silicon/robot/blob_act(obj/effect/blob/B)
|
||||
/mob/living/silicon/robot/blob_act(obj/structure/blob/B)
|
||||
if (stat != 2)
|
||||
adjustBruteLoss(60)
|
||||
updatehealth()
|
||||
|
||||
@@ -112,6 +112,6 @@
|
||||
bloss = bloss / 1.5
|
||||
adjustBruteLoss(bloss)
|
||||
|
||||
/mob/living/simple_animal/blob_act(obj/effect/blob/B)
|
||||
/mob/living/simple_animal/blob_act(obj/structure/blob/B)
|
||||
adjustBruteLoss(20)
|
||||
return
|
||||
@@ -50,14 +50,14 @@
|
||||
src.visible_message("<span class='notice'>[src] calms down.</span>")
|
||||
if(stat == CONSCIOUS)
|
||||
udder.generateMilk()
|
||||
if(locate(/obj/effect/spacevine) in loc)
|
||||
var/obj/effect/spacevine/SV = locate(/obj/effect/spacevine) in loc
|
||||
if(locate(/obj/structure/spacevine) in loc)
|
||||
var/obj/structure/spacevine/SV = locate(/obj/structure/spacevine) in loc
|
||||
SV.eat(src)
|
||||
if(!pulledby)
|
||||
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/Retaliate()
|
||||
@@ -67,8 +67,8 @@
|
||||
/mob/living/simple_animal/hostile/retaliate/goat/Move()
|
||||
..()
|
||||
if(!stat)
|
||||
if(locate(/obj/effect/spacevine) in loc)
|
||||
var/obj/effect/spacevine/SV = locate(/obj/effect/spacevine) in loc
|
||||
if(locate(/obj/structure/spacevine) in loc)
|
||||
var/obj/structure/spacevine/SV = locate(/obj/structure/spacevine) in loc
|
||||
SV.eat(src)
|
||||
|
||||
/mob/living/simple_animal/hostile/retaliate/goat/attackby(obj/item/O, mob/user, params)
|
||||
|
||||
@@ -138,7 +138,7 @@
|
||||
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
|
||||
@@ -183,7 +183,7 @@
|
||||
stop_automated_movement = 1
|
||||
if(do_after(src, 40, target = T))
|
||||
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
|
||||
|
||||
@@ -215,7 +215,7 @@
|
||||
if(do_after(src, 50, target = src))
|
||||
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
|
||||
@@ -251,7 +251,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(stat == DEAD)
|
||||
return
|
||||
if(E)
|
||||
@@ -266,7 +266,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)
|
||||
if(ckey)
|
||||
C.player_spiders = 1
|
||||
C.poison_type = poison_type
|
||||
|
||||
@@ -3,7 +3,7 @@ It will teleport people to a holding facility after 30 seconds. (Check the proce
|
||||
It is possible to destroy the net by the occupant or someone else.
|
||||
*/
|
||||
|
||||
/obj/effect/energy_net
|
||||
/obj/structure/energy_net
|
||||
name = "energy net"
|
||||
desc = "It's a net made of green energy."
|
||||
icon = 'icons/effects/effects.dmi'
|
||||
@@ -20,7 +20,7 @@ It is possible to destroy the net by the occupant or someone else.
|
||||
|
||||
|
||||
|
||||
/obj/effect/energy_net/proc/take_damage(damage, damage_type = BRUTE, sound_effect = 1)
|
||||
/obj/structure/energy_net/proc/take_damage(damage, damage_type = BRUTE, sound_effect = 1)
|
||||
switch(damage_type)
|
||||
if(BRUTE)
|
||||
if(sound_effect)
|
||||
@@ -34,7 +34,7 @@ It is possible to destroy the net by the occupant or someone else.
|
||||
if(health <=0)
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/energy_net/Destroy()
|
||||
/obj/structure/energy_net/Destroy()
|
||||
if(affecting)
|
||||
var/mob/living/carbon/M = affecting
|
||||
M.anchored = 0
|
||||
@@ -44,7 +44,7 @@ It is possible to destroy the net by the occupant or someone else.
|
||||
master << "<span class='userdanger'>ERROR</span>: unable to initiate transport protocol. Procedure terminated."
|
||||
return ..()
|
||||
|
||||
/obj/effect/energy_net/process(mob/living/carbon/M)
|
||||
/obj/structure/energy_net/process(mob/living/carbon/M)
|
||||
var/check = 30//30 seconds before teleportation. Could be extended I guess.
|
||||
var/mob_name = affecting.name//Since they will report as null if terminated before teleport.
|
||||
//The person can still try and attack the net when inside.
|
||||
@@ -101,13 +101,13 @@ It is possible to destroy the net by the occupant or someone else.
|
||||
|
||||
|
||||
|
||||
/obj/effect/energy_net/bullet_act(obj/item/projectile/Proj)
|
||||
/obj/structure/energy_net/bullet_act(obj/item/projectile/Proj)
|
||||
. = ..()
|
||||
take_damage(Proj.damage, Proj.damage_type)
|
||||
|
||||
|
||||
|
||||
/obj/effect/energy_net/ex_act(severity, target)
|
||||
/obj/structure/energy_net/ex_act(severity, target)
|
||||
switch(severity)
|
||||
if(1)
|
||||
qdel(src)
|
||||
@@ -116,10 +116,10 @@ It is possible to destroy the net by the occupant or someone else.
|
||||
if(3)
|
||||
take_damage(rand(10,25), BRUTE, 0)
|
||||
|
||||
/obj/effect/energy_net/blob_act(obj/effect/blob/B)
|
||||
/obj/structure/energy_net/blob_act(obj/structure/blob/B)
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/energy_net/hitby(atom/movable/AM)
|
||||
/obj/structure/energy_net/hitby(atom/movable/AM)
|
||||
..()
|
||||
var/tforce = 0
|
||||
if(ismob(AM))
|
||||
@@ -130,7 +130,7 @@ It is possible to destroy the net by the occupant or someone else.
|
||||
take_damage(tforce)
|
||||
|
||||
|
||||
/obj/effect/energy_net/attack_hulk(mob/living/carbon/human/user)
|
||||
/obj/structure/energy_net/attack_hulk(mob/living/carbon/human/user)
|
||||
..(user, 1)
|
||||
user.visible_message("<span class='danger'>[user] rips the energy net apart!</span>", \
|
||||
"<span class='notice'>You easily destroy the energy net.</span>")
|
||||
@@ -138,12 +138,12 @@ It is possible to destroy the net by the occupant or someone else.
|
||||
|
||||
|
||||
|
||||
/obj/effect/energy_net/attack_paw(mob/user)
|
||||
/obj/structure/energy_net/attack_paw(mob/user)
|
||||
return attack_hand()
|
||||
|
||||
|
||||
|
||||
/obj/effect/energy_net/attack_alien(mob/living/user)
|
||||
/obj/structure/energy_net/attack_alien(mob/living/user)
|
||||
user.do_attack_animation(src)
|
||||
user.changeNext_move(CLICK_CD_MELEE)
|
||||
playsound(src.loc, 'sound/weapons/slash.ogg', 80, 1)
|
||||
@@ -153,7 +153,7 @@ It is possible to destroy the net by the occupant or someone else.
|
||||
|
||||
|
||||
|
||||
/obj/effect/energy_net/attacked_by(obj/item/weapon/W, mob/user)
|
||||
/obj/structure/energy_net/attacked_by(obj/item/weapon/W, mob/user)
|
||||
..()
|
||||
take_damage(W.force, W.damtype)
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
if(!ninjacost(200,N_STEALTH_CANCEL) && iscarbon(C))
|
||||
var/mob/living/carbon/human/H = affecting
|
||||
if(C.client)//Monkeys without a client can still step_to() and bypass the net. Also, netting inactive people is lame.
|
||||
if(!locate(/obj/effect/energy_net) in C.loc)//Check if they are already being affected by an energy net.
|
||||
if(!locate(/obj/structure/energy_net) in C.loc)//Check if they are already being affected by an energy net.
|
||||
for(var/turf/T in getline(H.loc, C.loc))
|
||||
if(T.density)//Don't want them shooting nets through walls. It's kind of cheesy.
|
||||
H << "<span class='warning'>You may not use an energy net through solid obstacles!</span>"
|
||||
@@ -17,7 +17,7 @@
|
||||
spawn(0)
|
||||
H.Beam(C,"n_beam",time=15)
|
||||
H.say("Get over here!")
|
||||
var/obj/effect/energy_net/E = new /obj/effect/energy_net(C.loc)
|
||||
var/obj/structure/energy_net/E = new /obj/structure/energy_net(C.loc)
|
||||
H.visible_message("<span class='danger'>[H] caught [C] with an energy net!</span>","<span class='notice'>You caught [C] with an energy net!</span>")
|
||||
E.affecting = C
|
||||
E.master = H
|
||||
|
||||
@@ -321,7 +321,7 @@
|
||||
toner = 0
|
||||
|
||||
|
||||
/obj/machinery/photocopier/blob_act(obj/effect/blob/B)
|
||||
/obj/machinery/photocopier/blob_act(obj/structure/blob/B)
|
||||
if(prob(50))
|
||||
qdel(src)
|
||||
else
|
||||
|
||||
@@ -1095,7 +1095,7 @@
|
||||
if(prob(25))
|
||||
set_broken()
|
||||
|
||||
/obj/machinery/power/apc/blob_act(obj/effect/blob/B)
|
||||
/obj/machinery/power/apc/blob_act(obj/structure/blob/B)
|
||||
set_broken()
|
||||
|
||||
/obj/machinery/power/apc/disconnect_terminal()
|
||||
|
||||
@@ -93,7 +93,7 @@ By design, d1 is the smallest direction and d2 is the highest
|
||||
cable_list -= src //remove it from global cable list
|
||||
return ..() // then go ahead and delete the cable
|
||||
|
||||
/obj/structure/cable/blob_act(obj/effect/blob/B)
|
||||
/obj/structure/cable/blob_act(obj/structure/blob/B)
|
||||
if(invisibility != INVISIBILITY_MAXIMUM)
|
||||
qdel(src)
|
||||
|
||||
|
||||
@@ -146,7 +146,7 @@
|
||||
corrupt()
|
||||
|
||||
|
||||
/obj/item/weapon/stock_parts/cell/blob_act(obj/effect/blob/B)
|
||||
/obj/item/weapon/stock_parts/cell/blob_act(obj/structure/blob/B)
|
||||
ex_act(1)
|
||||
|
||||
/obj/item/weapon/stock_parts/cell/proc/get_electrocute_damage()
|
||||
|
||||
@@ -32,7 +32,7 @@ var/const/GRAV_NEEDS_WRENCH = 3
|
||||
if(severity == 1) // Very sturdy.
|
||||
set_broken()
|
||||
|
||||
/obj/machinery/gravity_generator/blob_act(obj/effect/blob/B)
|
||||
/obj/machinery/gravity_generator/blob_act(obj/structure/blob/B)
|
||||
if(prob(20))
|
||||
set_broken()
|
||||
|
||||
|
||||
@@ -116,7 +116,7 @@
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/machinery/light_construct/blob_act(obj/effect/blob/B)
|
||||
/obj/machinery/light_construct/blob_act(obj/structure/blob/B)
|
||||
if(B && B.loc == loc)
|
||||
qdel(src)
|
||||
|
||||
@@ -529,7 +529,7 @@
|
||||
if(prob(25))
|
||||
broken()
|
||||
|
||||
/obj/machinery/light/blob_act(obj/effect/blob/B)
|
||||
/obj/machinery/light/blob_act(obj/structure/blob/B)
|
||||
if(B && B.loc == loc)
|
||||
broken()
|
||||
qdel(src)
|
||||
|
||||
@@ -133,7 +133,7 @@
|
||||
log_game("[key_name(Proj.firer)] triggered an Abductor Core explosion via projectile.")
|
||||
overload()
|
||||
|
||||
/obj/machinery/power/rtg/abductor/blob_act(obj/effect/blob/B)
|
||||
/obj/machinery/power/rtg/abductor/blob_act(obj/structure/blob/B)
|
||||
overload()
|
||||
|
||||
/obj/machinery/power/rtg/abductor/ex_act()
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
return 1
|
||||
|
||||
|
||||
/obj/machinery/field/containment/blob_act(obj/effect/blob/B)
|
||||
/obj/machinery/field/containment/blob_act(obj/structure/blob/B)
|
||||
return 0
|
||||
|
||||
|
||||
|
||||
@@ -147,7 +147,7 @@ field_generator power level display
|
||||
return 0
|
||||
|
||||
|
||||
/obj/machinery/field/generator/blob_act(obj/effect/blob/B)
|
||||
/obj/machinery/field/generator/blob_act(obj/structure/blob/B)
|
||||
if(active)
|
||||
return 0
|
||||
else
|
||||
|
||||
@@ -149,7 +149,7 @@
|
||||
master.toggle_power()
|
||||
investigate_log("was moved whilst active; it <font color='red'>powered down</font>.","singulo")
|
||||
|
||||
/obj/structure/particle_accelerator/blob_act(obj/effect/blob/B)
|
||||
/obj/structure/particle_accelerator/blob_act(obj/structure/blob/B)
|
||||
if(prob(50))
|
||||
qdel(src)
|
||||
|
||||
|
||||
@@ -320,7 +320,7 @@
|
||||
|
||||
..()
|
||||
|
||||
/obj/machinery/particle_accelerator/control_box/blob_act(obj/effect/blob/B)
|
||||
/obj/machinery/particle_accelerator/control_box/blob_act(obj/structure/blob/B)
|
||||
if(prob(50))
|
||||
qdel(src)
|
||||
|
||||
|
||||
@@ -64,7 +64,7 @@
|
||||
/obj/singularity/Process_Spacemove() //The singularity stops drifting for no man!
|
||||
return 0
|
||||
|
||||
/obj/singularity/blob_act(obj/effect/blob/B)
|
||||
/obj/singularity/blob_act(obj/structure/blob/B)
|
||||
return
|
||||
|
||||
/obj/singularity/ex_act(severity, target)
|
||||
|
||||
@@ -177,7 +177,7 @@
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/machinery/power/smes/deconstruction()
|
||||
/obj/machinery/power/smes/on_deconstruction()
|
||||
for(var/obj/item/weapon/stock_parts/cell/cell in component_parts)
|
||||
cell.charge = (charge / capacity) * cell.maxcharge
|
||||
|
||||
|
||||
@@ -537,7 +537,7 @@
|
||||
if(3)
|
||||
take_damage(rand(10,20), BRUTE, 0)
|
||||
|
||||
/obj/machinery/power/solar_control/blob_act(obj/effect/blob/B)
|
||||
/obj/machinery/power/solar_control/blob_act(obj/structure/blob/B)
|
||||
if (prob(75))
|
||||
set_broken()
|
||||
src.density = 0
|
||||
|
||||
@@ -242,7 +242,7 @@
|
||||
qdel(src)
|
||||
return(gain)
|
||||
|
||||
/obj/machinery/power/supermatter_shard/blob_act(obj/effect/blob/B)
|
||||
/obj/machinery/power/supermatter_shard/blob_act(obj/structure/blob/B)
|
||||
if(B && !istype(loc, /turf/open/space)) //does nothing in space
|
||||
playsound(get_turf(src), 'sound/effects/supermatter.ogg', 50, 1)
|
||||
damage += B.health * 0.5 //take damage equal to 50% of remaining blob health before it tried to eat us
|
||||
@@ -321,7 +321,7 @@
|
||||
investigate_log("has consumed [key_name(user)].", "supermatter")
|
||||
user.dust()
|
||||
power += 200
|
||||
else if(isobj(AM) && (!istype(AM, /obj/effect) || istype(AM, /obj/effect/blob)))
|
||||
else if(isobj(AM) && !istype(AM, /obj/effect))
|
||||
investigate_log("has consumed [AM].", "supermatter")
|
||||
qdel(AM)
|
||||
|
||||
|
||||
@@ -166,7 +166,7 @@ var/list/blacklisted_tesla_types = typecacheof(list(/obj/machinery/atmospherics,
|
||||
var/mob/living/closest_mob
|
||||
var/obj/machinery/closest_machine
|
||||
var/obj/structure/closest_structure
|
||||
var/obj/effect/blob/closest_blob
|
||||
var/obj/structure/blob/closest_blob
|
||||
|
||||
for(var/A in oview(source, zap_range+2))
|
||||
if(istype(A, /obj/machinery/power/tesla_coil))
|
||||
@@ -216,8 +216,8 @@ var/list/blacklisted_tesla_types = typecacheof(list(/obj/machinery/atmospherics,
|
||||
else if(closest_mob)
|
||||
continue
|
||||
|
||||
else if(istype(A, /obj/effect/blob))
|
||||
var/obj/effect/blob/B = A
|
||||
else if(istype(A, /obj/structure/blob))
|
||||
var/obj/structure/blob/B = A
|
||||
var/dist = get_dist(source, A)
|
||||
if(dist <= zap_range && (dist < closest_dist || !closest_tesla_coil) && !B.being_shocked)
|
||||
closest_blob = B
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
if(severity < 3)
|
||||
..()
|
||||
|
||||
/obj/machinery/chem_dispenser/blob_act(obj/effect/blob/B)
|
||||
/obj/machinery/chem_dispenser/blob_act(obj/structure/blob/B)
|
||||
if(prob(50))
|
||||
qdel(src)
|
||||
|
||||
@@ -284,7 +284,7 @@
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/machinery/chem_dispenser/constructable/deconstruction()
|
||||
/obj/machinery/chem_dispenser/constructable/on_deconstruction()
|
||||
if(beaker)
|
||||
beaker.loc = loc
|
||||
beaker = null
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/machinery/chem_heater/deconstruction()
|
||||
/obj/machinery/chem_heater/on_deconstruction()
|
||||
eject_beaker()
|
||||
|
||||
/obj/machinery/chem_heater/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
if(severity < 3)
|
||||
..()
|
||||
|
||||
/obj/machinery/chem_master/blob_act(obj/effect/blob/B)
|
||||
/obj/machinery/chem_master/blob_act(obj/structure/blob/B)
|
||||
if (prob(50))
|
||||
qdel(src)
|
||||
|
||||
|
||||
@@ -292,7 +292,7 @@
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/machinery/computer/pandemic/deconstruction()
|
||||
/obj/machinery/computer/pandemic/on_deconstruction()
|
||||
if(beaker)
|
||||
beaker.loc = get_turf(src)
|
||||
..()
|
||||
@@ -25,22 +25,22 @@
|
||||
return 0 //the dead, and blob mobs, don't cause reactions
|
||||
return round(reac_volume * min(1.5 - touch_protection, 1), 0.1) //full touch protection means 50% volume, any prot below 0.5 means 100% volume.
|
||||
|
||||
/datum/reagent/blob/proc/damage_reaction(obj/effect/blob/B, original_health, damage, damage_type, cause) //when the blob takes damage, do this
|
||||
/datum/reagent/blob/proc/damage_reaction(obj/structure/blob/B, original_health, damage, damage_type, cause) //when the blob takes damage, do this
|
||||
return damage
|
||||
|
||||
/datum/reagent/blob/proc/death_reaction(obj/effect/blob/B, cause) //when a blob dies, do this
|
||||
/datum/reagent/blob/proc/death_reaction(obj/structure/blob/B, cause) //when a blob dies, do this
|
||||
return
|
||||
|
||||
/datum/reagent/blob/proc/expand_reaction(obj/effect/blob/B, obj/effect/blob/newB, turf/T) //when the blob expands, do this
|
||||
/datum/reagent/blob/proc/expand_reaction(obj/structure/blob/B, obj/structure/blob/newB, turf/T) //when the blob expands, do this
|
||||
return
|
||||
|
||||
/datum/reagent/blob/proc/tesla_reaction(obj/effect/blob/B, power) //when the blob is hit by a tesla bolt, do this
|
||||
/datum/reagent/blob/proc/tesla_reaction(obj/structure/blob/B, power) //when the blob is hit by a tesla bolt, do this
|
||||
return 1 //return 0 to ignore damage
|
||||
|
||||
/datum/reagent/blob/proc/extinguish_reaction(obj/effect/blob/B) //when the blob is hit with water, do this
|
||||
/datum/reagent/blob/proc/extinguish_reaction(obj/structure/blob/B) //when the blob is hit with water, do this
|
||||
return
|
||||
|
||||
/datum/reagent/blob/proc/emp_reaction(obj/effect/blob/B, severity) //when the blob is hit with an emp, do this
|
||||
/datum/reagent/blob/proc/emp_reaction(obj/structure/blob/B, severity) //when the blob is hit with an emp, do this
|
||||
return
|
||||
|
||||
//does brute damage but can replicate when damaged and has a chance of expanding again
|
||||
@@ -59,19 +59,19 @@
|
||||
reac_volume = ..()
|
||||
M.apply_damage(0.7*reac_volume, BRUTE)
|
||||
|
||||
/datum/reagent/blob/replicating_foam/damage_reaction(obj/effect/blob/B, original_health, damage, damage_type, cause)
|
||||
/datum/reagent/blob/replicating_foam/damage_reaction(obj/structure/blob/B, original_health, damage, damage_type, cause)
|
||||
var/effectivedamage = damage
|
||||
if(damage_type == BRUTE)
|
||||
effectivedamage = damage * 2
|
||||
if(damage_type == BURN && effectivedamage > 0 && original_health - effectivedamage > 0 && prob(60))
|
||||
var/obj/effect/blob/newB = B.expand(null, null, 0)
|
||||
var/obj/structure/blob/newB = B.expand(null, null, 0)
|
||||
if(newB)
|
||||
newB.health = original_health - effectivedamage
|
||||
newB.check_health(cause)
|
||||
newB.update_icon()
|
||||
return effectivedamage
|
||||
|
||||
/datum/reagent/blob/replicating_foam/expand_reaction(obj/effect/blob/B, obj/effect/blob/newB, turf/T)
|
||||
/datum/reagent/blob/replicating_foam/expand_reaction(obj/structure/blob/B, obj/structure/blob/newB, turf/T)
|
||||
if(prob(30))
|
||||
newB.expand(null, null, 0) //do it again!
|
||||
|
||||
@@ -90,19 +90,19 @@
|
||||
reac_volume = ..()
|
||||
M.apply_damage(0.7*reac_volume, BRUTE)
|
||||
|
||||
/datum/reagent/blob/shifting_fragments/expand_reaction(obj/effect/blob/B, obj/effect/blob/newB, turf/T)
|
||||
if(istype(B, /obj/effect/blob/normal) || (istype(B, /obj/effect/blob/shield) && prob(25)))
|
||||
/datum/reagent/blob/shifting_fragments/expand_reaction(obj/structure/blob/B, obj/structure/blob/newB, turf/T)
|
||||
if(istype(B, /obj/structure/blob/normal) || (istype(B, /obj/structure/blob/shield) && prob(25)))
|
||||
newB.forceMove(get_turf(B))
|
||||
B.forceMove(T)
|
||||
|
||||
/datum/reagent/blob/shifting_fragments/damage_reaction(obj/effect/blob/B, original_health, damage, damage_type, cause)
|
||||
/datum/reagent/blob/shifting_fragments/damage_reaction(obj/structure/blob/B, original_health, damage, damage_type, cause)
|
||||
if(cause && damage > 0 && original_health - damage > 0 && prob(60-damage))
|
||||
var/list/blobstopick = list()
|
||||
for(var/obj/effect/blob/OB in orange(1, B))
|
||||
if((istype(OB, /obj/effect/blob/normal) || (istype(OB, /obj/effect/blob/shield) && prob(25))) && OB.overmind && OB.overmind.blob_reagent_datum.id == B.overmind.blob_reagent_datum.id)
|
||||
for(var/obj/structure/blob/OB in orange(1, B))
|
||||
if((istype(OB, /obj/structure/blob/normal) || (istype(OB, /obj/structure/blob/shield) && prob(25))) && OB.overmind && OB.overmind.blob_reagent_datum.id == B.overmind.blob_reagent_datum.id)
|
||||
blobstopick += OB //as long as the blob picked is valid; ie, a normal or shield blob that has the same chemical as we do, we can swap with it
|
||||
if(blobstopick.len)
|
||||
var/obj/effect/blob/targeted = pick(blobstopick) //randomize the blob chosen, because otherwise it'd tend to the lower left
|
||||
var/obj/structure/blob/targeted = pick(blobstopick) //randomize the blob chosen, because otherwise it'd tend to the lower left
|
||||
var/turf/T = get_turf(targeted)
|
||||
targeted.forceMove(get_turf(B))
|
||||
B.forceMove(T) //swap the blobs
|
||||
@@ -131,13 +131,13 @@
|
||||
if(iscarbon(M))
|
||||
M.emote("scream")
|
||||
|
||||
/datum/reagent/blob/blazing_oil/extinguish_reaction(obj/effect/blob/B)
|
||||
/datum/reagent/blob/blazing_oil/extinguish_reaction(obj/structure/blob/B)
|
||||
B.take_damage(rand(1, 3), BURN)
|
||||
|
||||
/datum/reagent/blob/blazing_oil/damage_reaction(obj/effect/blob/B, original_health, damage, damage_type, cause)
|
||||
/datum/reagent/blob/blazing_oil/damage_reaction(obj/structure/blob/B, original_health, damage, damage_type, cause)
|
||||
if(cause && damage_type == BURN)
|
||||
for(var/turf/open/T in range(1, B))
|
||||
var/obj/effect/blob/C = locate() in T
|
||||
var/obj/structure/blob/C = locate() in T
|
||||
if(!(C && C.overmind && C.overmind.blob_reagent_datum.id == B.overmind.blob_reagent_datum.id) && prob(80))
|
||||
PoolOrNew(/obj/effect/hotspot, T)
|
||||
return ..()
|
||||
@@ -200,7 +200,7 @@
|
||||
O.add_points(points)
|
||||
O << "<span class='notice'>Gained [points] resources from the zombification of [M].</span>"
|
||||
|
||||
/datum/reagent/blob/zombifying_pods/damage_reaction(obj/effect/blob/B, original_health, damage, damage_type, cause)
|
||||
/datum/reagent/blob/zombifying_pods/damage_reaction(obj/structure/blob/B, original_health, damage, damage_type, cause)
|
||||
if(!isnull(cause) && damage <= 20 && original_health - damage <= 0 && prob(30)) //if the cause isn't fire or a bomb, the damage is less than 21, we're going to die from that damage, 20% chance of a shitty spore.
|
||||
B.visible_message("<span class='warning'><b>A spore floats free of the blob!</b></span>")
|
||||
var/mob/living/simple_animal/hostile/blob/blobspore/weak/BS = new/mob/living/simple_animal/hostile/blob/blobspore/weak(B.loc)
|
||||
@@ -209,7 +209,7 @@
|
||||
B.overmind.blob_mobs.Add(BS)
|
||||
return ..()
|
||||
|
||||
/datum/reagent/blob/zombifying_pods/expand_reaction(obj/effect/blob/B, obj/effect/blob/newB, turf/T)
|
||||
/datum/reagent/blob/zombifying_pods/expand_reaction(obj/structure/blob/B, obj/structure/blob/newB, turf/T)
|
||||
if(prob(10))
|
||||
var/mob/living/simple_animal/hostile/blob/blobspore/weak/BS = new/mob/living/simple_animal/hostile/blob/blobspore/weak(T)
|
||||
BS.overmind = B.overmind
|
||||
@@ -236,16 +236,16 @@
|
||||
if(M)
|
||||
M.apply_damage(0.6*reac_volume, OXY)
|
||||
|
||||
/datum/reagent/blob/energized_jelly/damage_reaction(obj/effect/blob/B, original_health, damage, damage_type, cause)
|
||||
/datum/reagent/blob/energized_jelly/damage_reaction(obj/structure/blob/B, original_health, damage, damage_type, cause)
|
||||
if(!isnull(cause) && original_health - damage <= 0 && prob(10))
|
||||
spark_system.set_up(rand(2, 4), 0, B)
|
||||
spark_system.start()
|
||||
return ..()
|
||||
|
||||
/datum/reagent/blob/energized_jelly/tesla_reaction(obj/effect/blob/B, power)
|
||||
/datum/reagent/blob/energized_jelly/tesla_reaction(obj/structure/blob/B, power)
|
||||
return 0
|
||||
|
||||
/datum/reagent/blob/energized_jelly/emp_reaction(obj/effect/blob/B, severity)
|
||||
/datum/reagent/blob/energized_jelly/emp_reaction(obj/structure/blob/B, severity)
|
||||
var/damage = rand(30, 50) - severity * rand(10, 15)
|
||||
B.take_damage(damage, BURN)
|
||||
|
||||
@@ -278,7 +278,7 @@
|
||||
else
|
||||
M.apply_damage(0.6*reac_volume, BRUTE)
|
||||
|
||||
/datum/reagent/blob/explosive_lattice/damage_reaction(obj/effect/blob/B, original_health, damage, damage_type, cause)
|
||||
/datum/reagent/blob/explosive_lattice/damage_reaction(obj/structure/blob/B, original_health, damage, damage_type, cause)
|
||||
if(isnull(cause))
|
||||
if(damage_type == BRUTE)
|
||||
return 0 //no-sell the explosion we do not take damage
|
||||
@@ -334,7 +334,7 @@
|
||||
if(M)
|
||||
M.apply_damage(reac_volume, BURN)
|
||||
|
||||
/datum/reagent/blob/electromagnetic_web/damage_reaction(obj/effect/blob/B, original_health, damage, damage_type, cause)
|
||||
/datum/reagent/blob/electromagnetic_web/damage_reaction(obj/structure/blob/B, original_health, damage, damage_type, cause)
|
||||
if(damage_type == BRUTE) //take full brute
|
||||
switch(B.brute_resist)
|
||||
if(0.5)
|
||||
@@ -345,7 +345,7 @@
|
||||
return damage * 10
|
||||
return damage * 1.25 //a laser will do 25 damage, which will kill any normal blob
|
||||
|
||||
/datum/reagent/blob/electromagnetic_web/death_reaction(obj/effect/blob/B, cause)
|
||||
/datum/reagent/blob/electromagnetic_web/death_reaction(obj/structure/blob/B, cause)
|
||||
if(cause)
|
||||
empulse(B.loc, 1, 3) //less than screen range, so you can stand out of range to avoid it
|
||||
|
||||
@@ -366,19 +366,19 @@
|
||||
reac_volume = ..()
|
||||
M.apply_damage(0.2*reac_volume, BRUTE)
|
||||
if(M && reac_volume)
|
||||
for(var/obj/effect/blob/B in range(1, M)) //if the target is completely surrounded, this is 2.4*reac_volume bonus damage, total of 2.6*reac_volume
|
||||
for(var/obj/structure/blob/B in range(1, M)) //if the target is completely surrounded, this is 2.4*reac_volume bonus damage, total of 2.6*reac_volume
|
||||
if(M)
|
||||
B.blob_attack_animation(M) //show them they're getting a bad time
|
||||
M.apply_damage(0.3*reac_volume, BRUTE)
|
||||
|
||||
/datum/reagent/blob/synchronous_mesh/damage_reaction(obj/effect/blob/B, original_health, damage, damage_type, cause)
|
||||
/datum/reagent/blob/synchronous_mesh/damage_reaction(obj/structure/blob/B, original_health, damage, damage_type, cause)
|
||||
if(!isnull(cause)) //the cause isn't fire or bombs, so split the damage
|
||||
var/damagesplit = 1 //maximum split is 9, reducing the damage each blob takes to 11% but doing that damage to 9 blobs
|
||||
for(var/obj/effect/blob/C in orange(1, B))
|
||||
if(!istype(C, /obj/effect/blob/core) && !istype(C, /obj/effect/blob/node) && C.overmind && C.overmind.blob_reagent_datum.id == B.overmind.blob_reagent_datum.id) //if it doesn't have the same chemical or is a core or node, don't split damage to it
|
||||
for(var/obj/structure/blob/C in orange(1, B))
|
||||
if(!istype(C, /obj/structure/blob/core) && !istype(C, /obj/structure/blob/node) && C.overmind && C.overmind.blob_reagent_datum.id == B.overmind.blob_reagent_datum.id) //if it doesn't have the same chemical or is a core or node, don't split damage to it
|
||||
damagesplit += 1
|
||||
for(var/obj/effect/blob/C in orange(1, B))
|
||||
if(!istype(C, /obj/effect/blob/core) && !istype(C, /obj/effect/blob/node) && C.overmind && C.overmind.blob_reagent_datum.id == B.overmind.blob_reagent_datum.id) //only hurt blobs that have the same overmind chemical and aren't cores or nodes
|
||||
for(var/obj/structure/blob/C in orange(1, B))
|
||||
if(!istype(C, /obj/structure/blob/core) && !istype(C, /obj/structure/blob/node) && C.overmind && C.overmind.blob_reagent_datum.id == B.overmind.blob_reagent_datum.id) //only hurt blobs that have the same overmind chemical and aren't cores or nodes
|
||||
C.take_damage(damage/damagesplit, CLONE, B, 0)
|
||||
return damage / damagesplit
|
||||
else
|
||||
@@ -402,7 +402,7 @@
|
||||
return 0 //the dead, and blob mobs, don't cause reactions
|
||||
M.adjustBruteLoss(0.8*reac_volume)
|
||||
|
||||
/datum/reagent/blob/reactive_spines/damage_reaction(obj/effect/blob/B, original_health, damage, damage_type, cause)
|
||||
/datum/reagent/blob/reactive_spines/damage_reaction(obj/structure/blob/B, original_health, damage, damage_type, cause)
|
||||
if(damage && damage_type == BRUTE && original_health - damage > 0) //is there any damage, is it brute, and will we be alive
|
||||
if(isliving(cause))
|
||||
B.visible_message("<span class='boldwarning'>The blob retaliates, lashing out!</span>")
|
||||
@@ -437,17 +437,17 @@
|
||||
if(M)
|
||||
M.adjustStaminaLoss(0.2*reac_volume)
|
||||
|
||||
/datum/reagent/blob/pressurized_slime/damage_reaction(obj/effect/blob/B, original_health, damage, damage_type, cause)
|
||||
/datum/reagent/blob/pressurized_slime/damage_reaction(obj/structure/blob/B, original_health, damage, damage_type, cause)
|
||||
if(cause || damage_type != BURN)
|
||||
extinguisharea(B, damage)
|
||||
return ..()
|
||||
|
||||
/datum/reagent/blob/pressurized_slime/death_reaction(obj/effect/blob/B, cause)
|
||||
/datum/reagent/blob/pressurized_slime/death_reaction(obj/structure/blob/B, cause)
|
||||
if(!isnull(cause))
|
||||
B.visible_message("<span class='boldwarning'>The blob ruptures, spraying the area with liquid!</span>")
|
||||
extinguisharea(B, 50)
|
||||
|
||||
/datum/reagent/blob/pressurized_slime/proc/extinguisharea(obj/effect/blob/B, probchance)
|
||||
/datum/reagent/blob/pressurized_slime/proc/extinguisharea(obj/structure/blob/B, probchance)
|
||||
for(var/turf/open/T in range(1, B))
|
||||
if(prob(probchance))
|
||||
T.MakeSlippery(min_wet_time = 10, wet_time_to_add = 5)
|
||||
|
||||
@@ -184,10 +184,10 @@
|
||||
if(istype(O,/obj/structure/alien/weeds))
|
||||
var/obj/structure/alien/weeds/alien_weeds = O
|
||||
alien_weeds.take_damage(rand(15,35), BRUTE, 0) // Kills alien weeds pretty fast
|
||||
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/toxin/plantbgone/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
else
|
||||
return
|
||||
|
||||
/obj/structure/reagent_dispensers/blob_act(obj/effect/blob/B)
|
||||
/obj/structure/reagent_dispensers/blob_act(obj/structure/blob/B)
|
||||
if(prob(50))
|
||||
boom()
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
if(tank_volume && istype(Proj) && !Proj.nodamage && ((Proj.damage_type == BURN) || (Proj.damage_type == BRUTE)))
|
||||
boom()
|
||||
|
||||
/obj/structure/reagent_dispensers/watertank/blob_act(obj/effect/blob/B)
|
||||
/obj/structure/reagent_dispensers/watertank/blob_act(obj/structure/blob/B)
|
||||
if(prob(50))
|
||||
PoolOrNew(/obj/effect/particle_effect/water, loc)
|
||||
qdel(src)
|
||||
@@ -93,7 +93,7 @@
|
||||
explosion(get_turf(src), 0, 1, 5, flame_range = 5)
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/reagent_dispensers/fueltank/blob_act(obj/effect/blob/B)
|
||||
/obj/structure/reagent_dispensers/fueltank/blob_act(obj/structure/blob/B)
|
||||
boom()
|
||||
|
||||
/obj/structure/reagent_dispensers/fueltank/ex_act()
|
||||
@@ -174,7 +174,7 @@
|
||||
icon_state = "beer"
|
||||
reagent_id = "beer"
|
||||
|
||||
/obj/structure/reagent_dispensers/beerkeg/blob_act(obj/effect/blob/B)
|
||||
/obj/structure/reagent_dispensers/beerkeg/blob_act(obj/structure/blob/B)
|
||||
explosion(src.loc,0,3,5,7,10)
|
||||
|
||||
|
||||
|
||||
@@ -62,7 +62,7 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis).
|
||||
T += M.rating
|
||||
efficiency_coeff = 2 ** (T - 1) //Only 1 manipulator here, you're making runtimes Razharas
|
||||
|
||||
/obj/machinery/r_n_d/circuit_imprinter/blob_act(obj/effect/blob/B)
|
||||
/obj/machinery/r_n_d/circuit_imprinter/blob_act(obj/structure/blob/B)
|
||||
if (prob(50))
|
||||
qdel(src)
|
||||
|
||||
@@ -76,7 +76,7 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis).
|
||||
return round(A / max(1, (all_materials[M]/efficiency_coeff)))
|
||||
|
||||
//we eject the materials upon deconstruction.
|
||||
/obj/machinery/r_n_d/circuit_imprinter/deconstruction()
|
||||
/obj/machinery/r_n_d/circuit_imprinter/on_deconstruction()
|
||||
for(var/obj/item/weapon/reagent_containers/glass/G in component_parts)
|
||||
reagents.trans_to(G, G.reagents.maximum_volume)
|
||||
materials.retrieve_all()
|
||||
|
||||
@@ -76,7 +76,7 @@ Note: Must be placed west/left of and R&D console to function.
|
||||
return round(A / max(1, (all_materials[M]*efficiency_coeff)))
|
||||
|
||||
//we eject the materials upon deconstruction.
|
||||
/obj/machinery/r_n_d/protolathe/deconstruction()
|
||||
/obj/machinery/r_n_d/protolathe/on_deconstruction()
|
||||
for(var/obj/item/weapon/reagent_containers/glass/G in component_parts)
|
||||
reagents.trans_to(G, G.reagents.maximum_volume)
|
||||
materials.retrieve_all()
|
||||
|
||||
@@ -138,7 +138,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
updateUsrDialog()
|
||||
|
||||
|
||||
/obj/machinery/computer/rdconsole/deconstruction()
|
||||
/obj/machinery/computer/rdconsole/on_deconstruction()
|
||||
if(linked_destroy)
|
||||
linked_destroy.linked_console = null
|
||||
linked_destroy = null
|
||||
|
||||
@@ -105,7 +105,7 @@
|
||||
|
||||
|
||||
//we eject the loaded item when deconstructing the machine
|
||||
/obj/machinery/r_n_d/deconstruction()
|
||||
/obj/machinery/r_n_d/on_deconstruction()
|
||||
if(loaded_item)
|
||||
loaded_item.loc = loc
|
||||
..()
|
||||
|
||||
@@ -90,7 +90,7 @@
|
||||
..()
|
||||
|
||||
|
||||
/obj/machinery/r_n_d/server/blob_act(obj/effect/blob/B)
|
||||
/obj/machinery/r_n_d/server/blob_act(obj/structure/blob/B)
|
||||
griefProtection()
|
||||
..()
|
||||
|
||||
@@ -129,7 +129,7 @@
|
||||
air_update_turf()
|
||||
|
||||
//called when the server is deconstructed.
|
||||
/obj/machinery/r_n_d/server/deconstruction()
|
||||
/obj/machinery/r_n_d/server/on_deconstruction()
|
||||
griefProtection()
|
||||
..()
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
var/list/blacklisted_cargo_types = typecacheof(list(
|
||||
/mob/living,
|
||||
/obj/effect/blob,
|
||||
/obj/structure/blob,
|
||||
/obj/effect/rune,
|
||||
/obj/effect/spider/spiderling,
|
||||
/obj/structure/spider/spiderling,
|
||||
/obj/item/weapon/disk/nuclear,
|
||||
/obj/machinery/nuclearbomb,
|
||||
/obj/item/device/radio/beacon,
|
||||
|
||||
Reference in New Issue
Block a user