mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-22 04:30:44 +01:00
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:
@@ -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()
|
||||
|
||||
@@ -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!")
|
||||
|
||||
@@ -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,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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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>"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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>")
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user