Merge branch 'pr/14'

This commit is contained in:
Fermi
2019-06-14 21:29:04 +01:00
506 changed files with 10079 additions and 6600 deletions
@@ -1,7 +1,6 @@
/obj/machinery/rnd/production
name = "technology fabricator"
desc = "Makes researched and prototype items with materials and energy."
container_type = OPENCONTAINER
layer = BELOW_OBJ_LAYER
var/consoleless_interface = FALSE //Whether it can be used without a console.
var/efficiency_coeff = 1 //Materials needed / coeff = actual.
@@ -21,7 +20,7 @@
/obj/machinery/rnd/production/Initialize(mapload)
. = ..()
create_reagents(0)
create_reagents(0, OPENCONTAINER)
matching_designs = list()
cached_designs = list()
stored_research = new
@@ -2,7 +2,6 @@
name = "circuit imprinter"
desc = "Manufactures circuit boards for the construction of machines."
icon_state = "circuit_imprinter"
container_type = OPENCONTAINER
circuit = /obj/item/circuitboard/machine/circuit_imprinter
categories = list(
"AI Modules",
@@ -2,7 +2,6 @@
name = "department circuit imprinter"
desc = "A special circuit imprinter with a built in interface meant for departmental usage, with built in ExoSync receivers allowing it to print designs researched that match its ROM-encoded department type."
icon_state = "circuit_imprinter"
container_type = OPENCONTAINER
circuit = /obj/item/circuitboard/machine/circuit_imprinter/department
requires_console = FALSE
consoleless_interface = TRUE
@@ -2,7 +2,6 @@
name = "department protolathe"
desc = "A special protolathe with a built in interface meant for departmental usage, with built in ExoSync receivers allowing it to print designs researched that match its ROM-encoded department type."
icon_state = "protolathe"
container_type = OPENCONTAINER
circuit = /obj/item/circuitboard/machine/protolathe/department
requires_console = FALSE
consoleless_interface = TRUE
@@ -2,7 +2,6 @@
name = "department techfab"
desc = "An advanced fabricator designed to print out the latest prototypes and circuits researched from Science. Contains hardware to sync to research networks. This one is department-locked and only possesses a limited set of decryption keys."
icon_state = "protolathe"
container_type = OPENCONTAINER
circuit = /obj/item/circuitboard/machine/techfab/department
/obj/machinery/rnd/production/techfab/department/engineering
@@ -2,7 +2,6 @@
name = "protolathe"
desc = "Converts raw materials into useful objects."
icon_state = "protolathe"
container_type = OPENCONTAINER
circuit = /obj/item/circuitboard/machine/protolathe
categories = list(
"Power Designs",
@@ -2,7 +2,6 @@
name = "technology fabricator"
desc = "Produces researched prototypes with raw materials and energy."
icon_state = "protolathe"
container_type = OPENCONTAINER
circuit = /obj/item/circuitboard/machine/techfab
categories = list(
"Power Designs",
@@ -106,11 +106,11 @@
/datum/nanite_program/conductive/enable_passive_effect()
. = ..()
host_mob.add_trait(TRAIT_SHOCKIMMUNE, "nanites")
ADD_TRAIT(host_mob, TRAIT_SHOCKIMMUNE, "nanites")
/datum/nanite_program/conductive/disable_passive_effect()
. = ..()
host_mob.remove_trait(TRAIT_SHOCKIMMUNE, "nanites")
REMOVE_TRAIT(host_mob, TRAIT_SHOCKIMMUNE, "nanites")
/datum/nanite_program/mindshield
name = "Mental Barrier"
@@ -121,10 +121,10 @@
/datum/nanite_program/mindshield/enable_passive_effect()
. = ..()
if(!host_mob.mind.has_antag_datum(/datum/antagonist/rev)) //won't work if on a rev, to avoid having implanted revs
host_mob.add_trait(TRAIT_MINDSHIELD, "nanites")
ADD_TRAIT(host_mob, TRAIT_MINDSHIELD, "nanites")
host_mob.sec_hud_set_implants()
/datum/nanite_program/mindshield/disable_passive_effect()
. = ..()
host_mob.remove_trait(TRAIT_MINDSHIELD, "nanites")
REMOVE_TRAIT(host_mob, TRAIT_MINDSHIELD, "nanites")
host_mob.sec_hud_set_implants()
@@ -215,7 +215,7 @@
if(!iscarbon(host_mob)) //nonstandard biology
return FALSE
var/mob/living/carbon/C = host_mob
if(C.suiciding || C.has_trait(TRAIT_NOCLONE) || C.hellbound) //can't revive
if(C.suiciding || HAS_TRAIT(C, TRAIT_NOCLONE) || C.hellbound) //can't revive
return FALSE
if((world.time - C.timeofdeath) > 1800) //too late
return FALSE
@@ -65,11 +65,11 @@
/datum/nanite_program/pacifying/enable_passive_effect()
. = ..()
host_mob.add_trait(TRAIT_PACIFISM, "nanites")
ADD_TRAIT(host_mob, TRAIT_PACIFISM, "nanites")
/datum/nanite_program/pacifying/disable_passive_effect()
. = ..()
host_mob.remove_trait(TRAIT_PACIFISM, "nanites")
REMOVE_TRAIT(host_mob, TRAIT_PACIFISM, "nanites")
/datum/nanite_program/blinding
name = "Blindness"
@@ -93,11 +93,11 @@
/datum/nanite_program/mute/enable_passive_effect()
. = ..()
host_mob.add_trait(TRAIT_MUTE, "nanites")
ADD_TRAIT(host_mob, TRAIT_MUTE, "nanites")
/datum/nanite_program/mute/disable_passive_effect()
. = ..()
host_mob.remove_trait(TRAIT_MUTE, "nanites")
REMOVE_TRAIT(host_mob, TRAIT_MUTE, "nanites")
/datum/nanite_program/fake_death
name = "Death Simulation"
@@ -90,12 +90,11 @@ To add a crossbreed:
icon = 'icons/obj/slimecrossing.dmi'
icon_state = "base"
var/del_on_empty = TRUE
container_type = INJECTABLE | DRAWABLE
var/list/list_reagents
/obj/item/slimecrossbeaker/Initialize()
. = ..()
create_reagents(50)
create_reagents(50, INJECTABLE | DRAWABLE)
if(list_reagents)
for(var/reagent in list_reagents)
reagents.add_reagent(reagent, list_reagents[reagent])
@@ -130,10 +129,13 @@ To add a crossbreed:
list_reagents = list("omnizine" = 15)
/obj/item/slimecrossbeaker/autoinjector //As with the above, but automatically injects whomever it is used on with contents.
container_type = DRAWABLE //Cannot be refilled, since it's basically an autoinjector!
var/ignore_flags = FALSE
var/self_use_only = FALSE
/obj/item/slimecrossbeaker/autoinjector/Initialize()
. = ..()
reagents.reagents_holder_flags = DRAWABLE // Cannot be refilled, since it's basically an autoinjector!
/obj/item/slimecrossbeaker/autoinjector/attack(mob/living/M, mob/user)
if(!reagents.total_volume)
to_chat(user, "<span class='warning'>[src] is empty!</span>")
@@ -169,12 +171,15 @@ To add a crossbreed:
list_reagents = list("slimejelly" = 50)
/obj/item/slimecrossbeaker/autoinjector/peaceandlove
container_type = null //It won't be *that* easy to get your hands on pax.
name = "peaceful distillation"
desc = "A light pink gooey sphere. Simply touching it makes you a little dizzy."
color = "#DDAAAA"
list_reagents = list("synthpax" = 10, "space_drugs" = 15) //Peace, dudes
/obj/item/slimecrossbeaker/autoinjector/peaceandlove/Initialize()
. = ..()
reagents.reagents_holder_flags = NONE // It won't be *that* easy to get your hands on pax.
/obj/item/slimecrossbeaker/autoinjector/slimestimulant
name = "invigorating gel"
desc = "A bubbling purple mixture, designed to heal and boost movement."
@@ -20,14 +20,14 @@ Slimecrossing Armor
/obj/item/clothing/mask/nobreath/equipped(mob/living/carbon/human/user, slot)
. = ..()
if(slot == SLOT_WEAR_MASK)
user.add_trait(TRAIT_NOBREATH, "breathmask_[REF(src)]")
ADD_TRAIT(user, TRAIT_NOBREATH, "breathmask_[REF(src)]")
user.failed_last_breath = FALSE
user.clear_alert("not_enough_oxy")
user.apply_status_effect(/datum/status_effect/rebreathing)
/obj/item/clothing/mask/nobreath/dropped(mob/living/carbon/human/user)
..()
user.remove_trait(TRAIT_NOBREATH, "breathmask_[REF(src)]")
REMOVE_TRAIT(user, TRAIT_NOBREATH, "breathmask_[REF(src)]")
user.remove_status_effect(/datum/status_effect/rebreathing)
/obj/item/clothing/glasses/prism_glasses
@@ -112,11 +112,11 @@ Slimecrossing Armor
/obj/item/clothing/head/peaceflower/equipped(mob/living/carbon/human/user, slot)
. = ..()
if(slot == SLOT_HEAD)
user.add_trait(TRAIT_PACIFISM, "peaceflower_[REF(src)]")
ADD_TRAIT(user, TRAIT_PACIFISM, "peaceflower_[REF(src)]")
/obj/item/clothing/head/peaceflower/dropped(mob/living/carbon/human/user)
..()
user.remove_trait(TRAIT_PACIFISM, "peaceflower_[REF(src)]")
REMOVE_TRAIT(user, TRAIT_PACIFISM, "peaceflower_[REF(src)]")
/obj/item/clothing/head/peaceflower/attack_hand(mob/user)
if(iscarbon(user))
@@ -56,7 +56,7 @@
if(last_check_time + 50 < world.time)
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(H.mind && !H.has_trait(TRAIT_AGEUSIA))
if(H.mind && !HAS_TRAIT(H, TRAIT_AGEUSIA))
to_chat(H,"<span class='notice'>That didn't taste very good...</span>") //No disgust, though. It's just not good tasting.
GET_COMPONENT_FROM(mood, /datum/component/mood, H)
if(mood)
@@ -11,7 +11,7 @@
/datum/status_effect/rainbow_protection/on_apply()
owner.status_flags |= GODMODE
owner.add_trait(TRAIT_PACIFISM, "slimestatus")
ADD_TRAIT(owner, TRAIT_PACIFISM, "slimestatus")
owner.visible_message("<span class='warning'>[owner] shines with a brilliant rainbow light.</span>",
"<span class='notice'>You feel protected by an unknown force!</span>")
originalcolor = owner.color
@@ -24,7 +24,7 @@
/datum/status_effect/rainbow_protection/on_remove()
owner.status_flags &= ~GODMODE
owner.color = originalcolor
owner.remove_trait(TRAIT_PACIFISM, "slimestatus")
REMOVE_TRAIT(owner, TRAIT_PACIFISM, "slimestatus")
owner.visible_message("<span class='notice'>[owner] stops glowing, the rainbow light fading away.</span>",
"<span class='warning'>You no longer feel protected...</span>")
@@ -246,12 +246,12 @@ datum/status_effect/rebreathing/tick()
duration = 100
/datum/status_effect/firecookie/on_apply()
owner.add_trait(TRAIT_RESISTCOLD,"firecookie")
ADD_TRAIT(owner, TRAIT_RESISTCOLD,"firecookie")
owner.adjust_bodytemperature(110)
return ..()
/datum/status_effect/firecookie/on_remove()
owner.remove_trait(TRAIT_RESISTCOLD,"firecookie")
REMOVE_TRAIT(owner, TRAIT_RESISTCOLD,"firecookie")
/datum/status_effect/watercookie
id = "watercookie"
@@ -260,7 +260,7 @@ datum/status_effect/rebreathing/tick()
duration = 100
/datum/status_effect/watercookie/on_apply()
owner.add_trait(TRAIT_NOSLIPWATER,"watercookie")
ADD_TRAIT(owner, TRAIT_NOSLIPWATER,"watercookie")
return ..()
/datum/status_effect/watercookie/tick()
@@ -268,7 +268,7 @@ datum/status_effect/rebreathing/tick()
T.MakeSlippery(TURF_WET_WATER, min_wet_time = 10, wet_time_to_add = 5)
/datum/status_effect/watercookie/on_remove()
owner.remove_trait(TRAIT_NOSLIPWATER,"watercookie")
REMOVE_TRAIT(owner, TRAIT_NOSLIPWATER,"watercookie")
/datum/status_effect/metalcookie
id = "metalcookie"
@@ -313,11 +313,11 @@ datum/status_effect/rebreathing/tick()
duration = 600
/datum/status_effect/toxincookie/on_apply()
owner.add_trait(TRAIT_TOXINLOVER,"toxincookie")
ADD_TRAIT(owner, TRAIT_TOXINLOVER,"toxincookie")
return ..()
/datum/status_effect/toxincookie/on_remove()
owner.remove_trait(TRAIT_TOXINLOVER,"toxincookie")
REMOVE_TRAIT(owner, TRAIT_TOXINLOVER,"toxincookie")
/datum/status_effect/timecookie
id = "timecookie"
@@ -417,11 +417,11 @@ datum/status_effect/rebreathing/tick()
duration = 30
/datum/status_effect/plur/on_apply()
owner.add_trait(TRAIT_PACIFISM, "peacecookie")
ADD_TRAIT(owner, TRAIT_PACIFISM, "peacecookie")
return ..()
/datum/status_effect/plur/on_remove()
owner.remove_trait(TRAIT_PACIFISM, "peacecookie")
REMOVE_TRAIT(owner, TRAIT_PACIFISM, "peacecookie")
/datum/status_effect/adamantinecookie
id = "adamantinecookie"
@@ -515,11 +515,11 @@ datum/status_effect/rebreathing/tick()
colour = "blue"
/datum/status_effect/stabilized/blue/on_apply()
owner.add_trait(TRAIT_NOSLIPWATER, "slimestatus")
ADD_TRAIT(owner, TRAIT_NOSLIPWATER, "slimestatus")
return ..()
datum/status_effect/stabilized/blue/on_remove()
owner.remove_trait(TRAIT_NOSLIPWATER, "slimestatus")
REMOVE_TRAIT(owner, TRAIT_NOSLIPWATER, "slimestatus")
/datum/status_effect/stabilized/metal
id = "stabilizedmetal"
@@ -580,7 +580,7 @@ datum/status_effect/stabilized/blue/on_remove()
examine_text = "<span class='notice'>Their fingertips burn brightly!</span>"
/datum/status_effect/stabilized/darkpurple/on_apply()
owner.add_trait(TRAIT_RESISTHEATHANDS, "slimestatus")
ADD_TRAIT(owner, TRAIT_RESISTHEATHANDS, "slimestatus")
fire = new(owner)
return ..()
@@ -596,7 +596,7 @@ datum/status_effect/stabilized/blue/on_remove()
return ..()
/datum/status_effect/stabilized/darkpurple/on_remove()
owner.remove_trait(TRAIT_RESISTHEATHANDS, "slimestatus")
REMOVE_TRAIT(owner, TRAIT_RESISTHEATHANDS, "slimestatus")
qdel(fire)
/datum/status_effect/stabilized/darkblue
@@ -767,11 +767,11 @@ datum/status_effect/stabilized/blue/on_remove()
colour = "red"
/datum/status_effect/stabilized/red/on_apply()
owner.add_trait(TRAIT_IGNORESLOWDOWN,"slimestatus")
owner.ignore_slowdown("slimestatus")
return ..()
/datum/status_effect/stabilized/red/on_remove()
owner.remove_trait(TRAIT_IGNORESLOWDOWN,"slimestatus")
owner.unignore_slowdown("slimestatus")
/datum/status_effect/stabilized/green
id = "stabilizedgreen"
@@ -916,7 +916,7 @@ datum/status_effect/stabilized/blue/on_remove()
colour = "light pink"
/datum/status_effect/stabilized/lightpink/on_apply()
owner.add_trait(TRAIT_GOTTAGOFAST,"slimestatus")
ADD_TRAIT(owner, TRAIT_GOTTAGOFAST,"slimestatus")
return ..()
/datum/status_effect/stabilized/lightpink/tick()
@@ -927,7 +927,7 @@ datum/status_effect/stabilized/blue/on_remove()
return ..()
/datum/status_effect/stabilized/lightpink/on_remove()
owner.remove_trait(TRAIT_GOTTAGOFAST,"slimestatus")
REMOVE_TRAIT(owner, TRAIT_GOTTAGOFAST,"slimestatus")
/datum/status_effect/stabilized/adamantine
id = "stabilizedadamantine"
@@ -7,12 +7,11 @@ Burning extracts:
name = "burning extract"
desc = "It's boiling over with barely-contained energy."
effect = "burning"
container_type = INJECTABLE | DRAWABLE
icon_state = "burning"
/obj/item/slimecross/burning/Initialize()
. = ..()
create_reagents(10)
create_reagents(10, INJECTABLE | DRAWABLE)
/obj/item/slimecross/burning/attack_self(mob/user)
if(!reagents.has_reagent("plasma",10))
@@ -8,12 +8,11 @@ Charged extracts:
name = "charged extract"
desc = "It sparks with electric power."
effect = "charged"
container_type = INJECTABLE | DRAWABLE
icon_state = "charged"
/obj/item/slimecross/charged/Initialize()
. = ..()
create_reagents(10)
create_reagents(10, INJECTABLE | DRAWABLE)
/obj/item/slimecross/charged/attack_self(mob/user)
if(!reagents.has_reagent("plasma",10))
@@ -427,7 +426,7 @@ Charged extracts:
else
to_chat(user, "<span class='warning'>You drink the pacification potion!</span>")
if(isanimal(M))
M.add_trait(TRAIT_PACIFISM, MAGIC_TRAIT)
ADD_TRAIT(M, TRAIT_PACIFISM, MAGIC_TRAIT)
else if(iscarbon(M))
var/mob/living/carbon/C = M
C.gain_trauma(/datum/brain_trauma/severe/pacifism, TRAUMA_RESILIENCE_SURGERY)
@@ -7,12 +7,11 @@ Chilling extracts:
name = "chilling extract"
desc = "It's cold to the touch, as if frozen solid."
effect = "chilling"
container_type = INJECTABLE | DRAWABLE
icon_state = "chilling"
/obj/item/slimecross/chilling/Initialize()
. = ..()
create_reagents(10)
create_reagents(10, INJECTABLE | DRAWABLE)
/obj/item/slimecross/chilling/attack_self(mob/user)
if(!reagents.has_reagent("plasma",10))
@@ -101,10 +100,9 @@ Chilling extracts:
for(var/turf/open/T in A)
var/datum/gas_mixture/G = T.air
if(istype(G))
G.assert_gas(/datum/gas/plasma)
G.gases[/datum/gas/plasma][MOLES] = 0
G.gases[/datum/gas/plasma] = 0
filtered = TRUE
G.garbage_collect()
GAS_GARBAGE_COLLECT(G.gases)
T.air_update_turf()
if(filtered)
user.visible_message("<span class='notice'>Cracks spread throughout [src], and some air is sucked in!</span>")
@@ -5,7 +5,6 @@ Industrial extracts:
/obj/item/slimecross/industrial
name = "industrial extract"
desc = "A gel-like, sturdy extract, fond of plasma and industry."
container_type = INJECTABLE | DRAWABLE
effect = "industrial"
icon_state = "industrial_still"
var/plasmarequired = 2 //Units of plasma required to be consumed to produce item.
@@ -22,7 +21,7 @@ Industrial extracts:
/obj/item/slimecross/industrial/Initialize()
. = ..()
create_reagents(100)
create_reagents(100, INJECTABLE | DRAWABLE)
START_PROCESSING(SSobj,src)
/obj/item/slimecross/industrial/Destroy()
@@ -10,7 +10,6 @@
throwforce = 0
throw_speed = 3
throw_range = 6
container_type = INJECTABLE | DRAWABLE
grind_results = list()
var/Uses = 1 // uses before it goes inert
var/qdel_timer = null // deletion timer, for delayed reactions
@@ -39,7 +38,7 @@
/obj/item/slime_extract/Initialize()
. = ..()
create_reagents(100)
create_reagents(100, INJECTABLE | DRAWABLE)
/obj/item/slime_extract/on_grind()
if(Uses)