Merge branch 'master' of https://github.com/tgstation/-tg-station into PreliminaryDamageRefactor

# Conflicts:
#	code/game/gamemodes/miniantags/bot_swarm/swarmer.dm
#	code/game/objects/effects/portals.dm
This commit is contained in:
phil235
2016-09-29 01:44:27 +02:00
173 changed files with 879 additions and 839 deletions
+2 -2
View File
@@ -1140,7 +1140,7 @@ var/list/datum/outfit/custom_outfits = list() //Admin created outfits
/client/proc/modify_goals()
set category = "Debug"
set name = "Modify station goals"
set name = "Modify goals"
if(!check_rights(R_ADMIN))
return
@@ -1152,4 +1152,4 @@ var/list/datum/outfit/custom_outfits = list() //Admin created outfits
for(var/datum/station_goal/S in ticker.mode.station_goals)
dat += "[S.name] - <a href='?src=\ref[S];announce=1'>Announce</a> | <a href='?src=\ref[S];remove=1'>Remove</a><br>"
dat += "<br><a href='?src=\ref[src];add_station_goal=1'>Add New Goal</a>"
usr << browse(dat, "window=goals;size=400x400")
usr << browse(dat, "window=goals;size=400x400")
@@ -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()
@@ -236,7 +236,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()
+1 -1
View File
@@ -556,6 +556,7 @@
var/shield_on = "shield-old"
/obj/item/clothing/suit/space/hardsuit/shielded/hit_reaction(mob/living/carbon/human/owner, attack_text)
recharge_cooldown = world.time + recharge_delay
if(current_charges > 0)
var/datum/effect_system/spark_spread/s = new
s.set_up(2, 1, src)
@@ -563,7 +564,6 @@
owner.visible_message("<span class='danger'>[owner]'s shields deflect [attack_text] in a shower of sparks!</span>")
current_charges--
if(recharge_rate)
recharge_cooldown = world.time + recharge_delay
START_PROCESSING(SSobj, src)
if(current_charges <= 0)
owner.visible_message("[owner]'s shield overloads!")
+1 -1
View File
@@ -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.")
+1 -1
View File
@@ -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)
+75 -75
View File
@@ -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,44 +28,44 @@
var/hue
var/quality
/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/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
@@ -111,7 +111,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()
@@ -129,17 +129,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)
@@ -149,8 +149,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
@@ -159,7 +159,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)
@@ -169,14 +169,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)
@@ -186,14 +186,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
@@ -201,10 +201,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
@@ -215,8 +215,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)
@@ -226,10 +226,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
@@ -237,7 +237,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
@@ -247,7 +247,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
@@ -262,7 +262,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
@@ -277,7 +277,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
@@ -292,7 +292,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
@@ -307,13 +307,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)
@@ -325,13 +325,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
@@ -343,16 +343,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'
@@ -365,10 +365,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/examine(mob/user)
/obj/structure/spacevine/examine(mob/user)
..()
var/text = "This one is a"
if(mutations.len)
@@ -380,7 +380,7 @@
text += " vine."
user << text
/obj/effect/spacevine/Destroy()
/obj/structure/spacevine/Destroy()
for(var/datum/spacevine_mutation/SM in mutations)
SM.on_death(src)
if(master)
@@ -397,7 +397,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)
@@ -405,7 +405,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)
@@ -414,7 +414,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)
@@ -422,7 +422,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)
@@ -449,36 +449,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)
@@ -488,21 +488,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
@@ -520,7 +520,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
@@ -532,9 +532,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++
@@ -555,7 +555,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
@@ -567,7 +567,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)
@@ -575,7 +575,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)
@@ -584,18 +584,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
@@ -604,14 +604,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
+1 -1
View File
@@ -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
@@ -324,5 +324,9 @@
icon_state = "powercrepe"
bonus_reagents = list("nutriment" = 5, "vitamin" = 3, "iron" = 10)
list_reagents = list("nutriment" = 10, "vitamin" = 5, "cherryjelly" = 5)
force = 15
force = 20
throwforce = 10
block_chance = 50
armour_penetration = 75
attack_verb = list("slapped", "slathered")
w_class = 4
@@ -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
+2 -3
View File
@@ -264,9 +264,8 @@
if (istype(hclient))
switch (href_list["action"])
if ("play_card")
var/datum/playingcard/card = locate(href_list["card"])
if (card in src.cards)
var/datum/playingcard/card = locate(href_list["card"]) in cards
if (card && istype(card))
src.discard(card)
if ("toggle_conceal")
src.toggle_conceal()
+1 -1
View File
@@ -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()
..()
+1 -1
View File
@@ -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)
+3 -3
View File
@@ -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"
+1 -1
View File
@@ -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>"
+2
View File
@@ -177,3 +177,5 @@ Lawyer
if(J.lawyers>1)
uniform = /obj/item/clothing/under/lawyer/purpsuit
suit = /obj/item/clothing/suit/toggle/lawyer/purple
H.bubble_icon = "lawyer"
+7 -5
View File
@@ -374,11 +374,13 @@ var/global/list/datum/cachedbook/cachedbooks // List of our cached book datums
b.duedate = world.time + (checkoutperiod * 600)
checkouts.Add(b)
if(href_list["checkin"])
var/datum/borrowbook/b = locate(href_list["checkin"])
checkouts.Remove(b)
var/datum/borrowbook/b = locate(href_list["checkin"]) in checkouts
if(b && istype(b))
checkouts.Remove(b)
if(href_list["delbook"])
var/obj/item/weapon/book/b = locate(href_list["delbook"])
inventory.Remove(b)
var/obj/item/weapon/book/b = locate(href_list["delbook"]) in inventory
if(b && istype(b))
inventory.Remove(b)
if(href_list["setauthor"])
var/newauthor = copytext(sanitize(input("Enter the author's name: ") as text|null),1,MAX_MESSAGE_LEN)
if(newauthor)
@@ -542,4 +544,4 @@ var/global/list/datum/cachedbook/cachedbooks // List of our cached book datums
B.icon_state = "book[rand(1,7)]"
qdel(P)
else
P.loc = loc
P.loc = loc
+1 -1
View File
@@ -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)
+30 -35
View File
@@ -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
+1 -1
View File
@@ -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>")
@@ -16,18 +16,6 @@
/datum/species/human/qualifies_for_rank(rank, list/features)
if((!features["tail_human"] || features["tail_human"] == "None") && (!features["ears"] || features["ears"] == "None"))
return 1 //Pure humans are always allowed in all roles.
//Mutants are not allowed in most roles.
if(rank in security_positions) //This list does not include lawyers.
return 0
if(rank in science_positions)
return 0
if(rank in medical_positions)
return 0
if(rank in engineering_positions)
return 0
if(rank == "Quartermaster") //QM is not contained in command_positions but we still want to bar mutants from it.
return 0
return ..()
@@ -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)
+1 -85
View File
@@ -683,90 +683,6 @@
update_fire()
/mob/living/silicon/robot/proc/installed_modules()
if(!module)
pick_module()
return
var/dat = {"<A HREF='?src=\ref[src];mach_close=robotmod'>Close</A>
<BR>
<BR>
<B>Activated Modules</B>
<BR>
<table border='0'>
<tr><td>Module 1:</td><td>[module_state_1 ? "<A HREF=?src=\ref[src];mod=\ref[module_state_1]>[module_state_1]<A>" : "No Module"]</td></tr>
<tr><td>Module 2:</td><td>[module_state_2 ? "<A HREF=?src=\ref[src];mod=\ref[module_state_2]>[module_state_2]<A>" : "No Module"]</td></tr>
<tr><td>Module 3:</td><td>[module_state_3 ? "<A HREF=?src=\ref[src];mod=\ref[module_state_3]>[module_state_3]<A>" : "No Module"]</td></tr>
</table><BR>
<B>Installed Modules</B><BR><BR>
<table border='0'>"}
for (var/obj in module.modules)
if (!obj)
dat += text("<tr><td><B>Resource depleted</B></td></tr>")
else if(activated(obj))
dat += text("<tr><td>[obj]</td><td><B>Activated</B></td></tr>")
else
dat += text("<tr><td>[obj]</td><td><A HREF=?src=\ref[src];act=\ref[obj]>Activate</A></td></tr>")
if (emagged)
if(activated(module.emag))
dat += text("<tr><td>[module.emag]</td><td><B>Activated</B></td></tr>")
else
dat += text("<tr><td>[module.emag]</td><td><A HREF=?src=\ref[src];act=\ref[module.emag]>Activate</A></td></tr>")
dat += "</table>"
/*
if(activated(obj))
dat += text("[obj]: \[<B>Activated</B> | <A HREF=?src=\ref[src];deact=\ref[obj]>Deactivate</A>\]<BR>")
else
dat += text("[obj]: \[<A HREF=?src=\ref[src];act=\ref[obj]>Activate</A> | <B>Deactivated</B>\]<BR>")
*/
var/datum/browser/popup = new(src, "robotmod", "Modules")
popup.set_content(dat)
popup.open()
/mob/living/silicon/robot/Topic(href, href_list)
..()
if(usr && (src != usr))
return
if (href_list["mach_close"])
var/t1 = text("window=[href_list["mach_close"]]")
unset_machine()
src << browse(null, t1)
return
if (href_list["showalerts"])
robot_alerts()
return
if (href_list["mod"])
var/obj/item/O = locate(href_list["mod"])
if (O)
O.attack_self(src)
if (href_list["act"])
var/obj/item/O = locate(href_list["act"])
activate_module(O)
installed_modules()
if (href_list["deact"])
var/obj/item/O = locate(href_list["deact"])
if(activated(O))
if(module_state_1 == O)
module_state_1 = null
contents -= O
else if(module_state_2 == O)
module_state_2 = null
contents -= O
else if(module_state_3 == O)
module_state_3 = null
contents -= O
else
src << "Module isn't activated."
else
src << "Module isn't activated"
installed_modules()
#define BORG_CAMERA_BUFFER 30
/mob/living/silicon/robot/Move(a, b, flag)
var/oldLoc = src.loc
@@ -1161,4 +1077,4 @@
status_flags |= CANPUSH
return 1
return 1
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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()
+1 -1
View File
@@ -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)
+1 -1
View File
@@ -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()
+1 -1
View File
@@ -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()
+2 -2
View File
@@ -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)
+1 -1
View File
@@ -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)
@@ -63,7 +63,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)
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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)
+3 -3
View File
@@ -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)
@@ -1058,6 +1058,26 @@ datum/reagent/medicine/syndicate_nanites/on_mob_life(mob/living/M)
..()
. = 1
/datum/reagent/medicine/miningnanites
name = "Nanites"
id = "miningnanites"
description = "It's mining magic. We don't have to explain it."
color = "#C8A5DC" // rgb: 200, 165, 220
overdose_threshold = 3 //To prevent people stacking massive amounts of a very strong healing reagent
can_synth = 0
/datum/reagent/medicine/miningnanites/on_mob_life(mob/living/M)
M.heal_bodypart_damage(5,5, 0)
..()
. = 1
/datum/reagent/medicine/miningnanites/overdose_process(mob/living/M)
M.adjustBruteLoss(3*REM, 0)
M.adjustFireLoss(3*REM, 0)
M.adjustToxLoss(3*REM, 0)
..()
. = 1
//used for changeling's adrenaline power
/datum/reagent/medicine/changelingAdrenaline
name = "Adrenaline"
@@ -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)
@@ -128,11 +128,11 @@
/obj/item/weapon/reagent_containers/hypospray/medipen/survival
name = "survival medipen"
desc = "A medipen for surviving in the harshest of environments, heals and protects from environmental hazards. "
desc = "A medipen for surviving in the harshest of environments, heals and protects from environmental hazards. WARNING: Do not inject more than one pen in quick succession."
icon_state = "stimpen"
volume = 82
amount_per_transfer_from_this = 82
list_reagents = list("nanites" = 2, "salbutamol" = 10, "coffee" = 20, "leporazine" = 20, "tricordrazine" = 15, "epinephrine" = 10, "omnizine" = 5, "stimulants" = 10)
volume = 57
amount_per_transfer_from_this = 57
list_reagents = list("salbutamol" = 10, "leporazine" = 15, "tricordrazine" = 15, "epinephrine" = 10, "miningnanites" = 2, "omnizine" = 5)
/obj/item/weapon/reagent_containers/hypospray/medipen/species_mutator
name = "species mutator medipen"
+4 -4
View File
@@ -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)
+2 -2
View File
@@ -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()
+1
View File
@@ -39,6 +39,7 @@ other types of metals and chemistry for reagents).
var/list/category = null //Primarily used for Mech Fabricators, but can be used for anything
var/list/reagents_list = list() //List of reagents. Format: "id" = amount.
var/maxstack = 1
var/lathe_time_factor = 1 //How many times faster than normal is this to build on the protolathe
////////////////////////////////////////
@@ -32,6 +32,7 @@
materials = list(MAT_METAL = 100, MAT_GLASS = 100)
build_path = /obj/item/weapon/stock_parts/capacitor
category = list("Stock Parts","Machinery","initial")
lathe_time_factor = 0.2
/datum/design/adv_capacitor
name = "Advanced Capacitor"
@@ -42,6 +43,7 @@
materials = list(MAT_METAL = 150, MAT_GLASS = 150)
build_path = /obj/item/weapon/stock_parts/capacitor/adv
category = list("Stock Parts")
lathe_time_factor = 0.2
/datum/design/super_capacitor
name = "Super Capacitor"
@@ -52,6 +54,7 @@
materials = list(MAT_METAL = 200, MAT_GLASS = 200, MAT_GOLD = 100)
build_path = /obj/item/weapon/stock_parts/capacitor/super
category = list("Stock Parts")
lathe_time_factor = 0.2
/datum/design/quadratic_capacitor
name = "Quadratic Capacitor"
@@ -62,6 +65,7 @@
materials = list(MAT_METAL = 200, MAT_GLASS = 200, MAT_DIAMOND = 100)
build_path = /obj/item/weapon/stock_parts/capacitor/quadratic
category = list("Stock Parts")
lathe_time_factor = 0.2
//Scanning modules
/datum/design/basic_scanning
@@ -73,6 +77,7 @@
materials = list(MAT_METAL = 100, MAT_GLASS = 50)
build_path = /obj/item/weapon/stock_parts/scanning_module
category = list("Stock Parts","Machinery","initial")
lathe_time_factor = 0.2
/datum/design/adv_scanning
name = "Advanced Scanning Module"
@@ -83,6 +88,7 @@
materials = list(MAT_METAL = 150, MAT_GLASS = 100)
build_path = /obj/item/weapon/stock_parts/scanning_module/adv
category = list("Stock Parts")
lathe_time_factor = 0.2
/datum/design/phasic_scanning
name = "Phasic Scanning Module"
@@ -93,6 +99,7 @@
materials = list(MAT_METAL = 200, MAT_GLASS = 150, MAT_SILVER = 60)
build_path = /obj/item/weapon/stock_parts/scanning_module/phasic
category = list("Stock Parts")
lathe_time_factor = 0.2
/datum/design/triphasic_scanning
name = "Triphasic Scanning Module"
@@ -103,6 +110,7 @@
materials = list(MAT_METAL = 200, MAT_GLASS = 200, MAT_DIAMOND = 60)
build_path = /obj/item/weapon/stock_parts/scanning_module/triphasic
category = list("Stock Parts")
lathe_time_factor = 0.2
//Maipulators
/datum/design/micro_mani
@@ -114,6 +122,7 @@
materials = list(MAT_METAL = 100)
build_path = /obj/item/weapon/stock_parts/manipulator
category = list("Stock Parts","Machinery","initial")
lathe_time_factor = 0.2
/datum/design/nano_mani
name = "Nano Manipulator"
@@ -124,6 +133,7 @@
materials = list(MAT_METAL = 150)
build_path = /obj/item/weapon/stock_parts/manipulator/nano
category = list("Stock Parts")
lathe_time_factor = 0.2
/datum/design/pico_mani
name = "Pico Manipulator"
@@ -134,6 +144,7 @@
materials = list(MAT_METAL = 200)
build_path = /obj/item/weapon/stock_parts/manipulator/pico
category = list("Stock Parts")
lathe_time_factor = 0.2
/datum/design/femto_mani
name = "Femto Manipulator"
@@ -144,6 +155,7 @@
materials = list(MAT_METAL = 200, MAT_DIAMOND = 30, MAT_TITANIUM = 30)
build_path = /obj/item/weapon/stock_parts/manipulator/femto
category = list("Stock Parts")
lathe_time_factor = 0.2
//Micro-lasers
/datum/design/basic_micro_laser
@@ -155,6 +167,7 @@
materials = list(MAT_METAL = 100, MAT_GLASS = 50)
build_path = /obj/item/weapon/stock_parts/micro_laser
category = list("Stock Parts","Machinery","initial")
lathe_time_factor = 0.2
/datum/design/high_micro_laser
name = "High-Power Micro-Laser"
@@ -165,6 +178,7 @@
materials = list(MAT_METAL = 150, MAT_GLASS = 100)
build_path = /obj/item/weapon/stock_parts/micro_laser/high
category = list("Stock Parts")
lathe_time_factor = 0.2
/datum/design/ultra_micro_laser
name = "Ultra-High-Power Micro-Laser"
@@ -175,6 +189,7 @@
materials = list(MAT_METAL = 200, MAT_GLASS = 150, MAT_URANIUM = 60)
build_path = /obj/item/weapon/stock_parts/micro_laser/ultra
category = list("Stock Parts")
lathe_time_factor = 0.2
/datum/design/quadultra_micro_laser
name = "Quad-Ultra Micro-Laser"
@@ -185,6 +200,7 @@
materials = list(MAT_METAL = 200, MAT_GLASS = 200, MAT_URANIUM = 100, MAT_DIAMOND = 60)
build_path = /obj/item/weapon/stock_parts/micro_laser/quadultra
category = list("Stock Parts")
lathe_time_factor = 0.2
/datum/design/basic_matter_bin
name = "Basic Matter Bin"
@@ -195,6 +211,7 @@
materials = list(MAT_METAL = 100)
build_path = /obj/item/weapon/stock_parts/matter_bin
category = list("Stock Parts","Machinery","initial")
lathe_time_factor = 0.2
/datum/design/adv_matter_bin
name = "Advanced Matter Bin"
@@ -205,6 +222,7 @@
materials = list(MAT_METAL = 150)
build_path = /obj/item/weapon/stock_parts/matter_bin/adv
category = list("Stock Parts")
lathe_time_factor = 0.2
/datum/design/super_matter_bin
name = "Super Matter Bin"
@@ -215,6 +233,7 @@
materials = list(MAT_METAL = 200)
build_path = /obj/item/weapon/stock_parts/matter_bin/super
category = list("Stock Parts")
lathe_time_factor = 0.2
/datum/design/bluespace_matter_bin
name = "Bluespace Matter Bin"
@@ -225,6 +244,7 @@
materials = list(MAT_METAL = 250, MAT_DIAMOND = 200)
build_path = /obj/item/weapon/stock_parts/matter_bin/bluespace
category = list("Stock Parts")
lathe_time_factor = 0.2
//T-Comms devices
/datum/design/subspace_ansible
+1 -1
View File
@@ -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()
+4 -1
View File
@@ -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
@@ -438,6 +438,9 @@ won't update every console in existence) but it's more of a hassle to do. Also,
linked_lathe.reagents.remove_reagent(R, being_built.reagents_list[R]*coeff)
var/P = being_built.build_path //lets save these values before the spawn() just in case. Nobody likes runtimes.
coeff *= being_built.lathe_time_factor
spawn(32*coeff*amount**0.8)
if(linked_lathe)
if(g2g) //And if we only fail the material requirements, we still spend time and power
+1 -1
View File
@@ -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
..()
+2 -2
View File
@@ -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()
..()
+2 -2
View File
@@ -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,
+3 -8
View File
@@ -248,7 +248,7 @@ a.updated {
usr.machine = src
if (href_list["viewhistory"])
var/datum/stock/S = locate(href_list["viewhistory"])
var/datum/stock/S = locate(href_list["viewhistory"]) in stockExchange.stocks
if (S)
S.displayValues(usr)
@@ -256,20 +256,15 @@ a.updated {
logged_in = null
if (href_list["buyshares"])
var/datum/stock/S = locate(href_list["buyshares"])
var/datum/stock/S = locate(href_list["buyshares"]) in stockExchange.stocks
if (S)
buy_some_shares(S, usr)
if (href_list["sellshares"])
var/datum/stock/S = locate(href_list["sellshares"])
var/datum/stock/S = locate(href_list["sellshares"]) in stockExchange.stocks
if (S)
sell_some_shares(S, usr)
if (href_list["take"])
var/datum/borrow/B = locate(href_list["take"])
if (B && !B.lease_expires)
do_borrowing_deal(B, usr)
if (href_list["show_logs"])
var/dat = "<html><head><title>Stock Transaction Logs</title></head><body><h2>Stock Transaction Logs</h2><div><a href='?src=\ref[src];show_logs=1'>Refresh</a></div><br>"
for(var/D in stockExchange.logs)
+1 -1
View File
@@ -69,7 +69,7 @@
A.audible_message("<span class='italics'>You hear a loud metallic \
grinding sound.</span>")
addtimer(src, "growl", 20, unique=FALSE, user)
addtimer(src, "growl", 20, unique=FALSE, target=user)
if(do_after(user, delay=160, needhand=FALSE, target=A, progress=TRUE))
playsound(src.loc, 'sound/hallucinations/far_noise.ogg', 50, 1)