Merge remote-tracking branch 'origin/master' into fake_blood
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
/datum/nanite_program/regenerative
|
||||
name = "Accelerated Regeneration"
|
||||
desc = "The nanites boost the host's natural regeneration, increasing their healing speed. Does not consume nanites if the host is unharmed."
|
||||
desc = "The nanites boost the host's natural regeneration, increasing their healing speed. Will not consume nanites while the host is unharmed."
|
||||
use_rate = 0.5
|
||||
rogue_types = list(/datum/nanite_program/necrotic)
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
|
||||
/datum/nanite_program/temperature
|
||||
name = "Temperature Adjustment"
|
||||
desc = "The nanites adjust the host's internal temperature to an ideal level."
|
||||
desc = "The nanites adjust the host's internal temperature to an ideal level. Will not consume nanites while the host is at a normal body temperature."
|
||||
use_rate = 3.5
|
||||
rogue_types = list(/datum/nanite_program/skin_decay)
|
||||
|
||||
@@ -53,10 +53,12 @@
|
||||
rogue_types = list(/datum/nanite_program/suffocating, /datum/nanite_program/necrotic)
|
||||
|
||||
/datum/nanite_program/purging/check_conditions()
|
||||
. = ..()
|
||||
if(!. || !host_mob.reagents)
|
||||
return FALSE // No trying to purge simple mobs
|
||||
var/foreign_reagent = length(host_mob.reagents?.reagent_list)
|
||||
if(!host_mob.getToxLoss() && !foreign_reagent)
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
/datum/nanite_program/purging/active_effect()
|
||||
host_mob.adjustToxLoss(-1)
|
||||
@@ -68,7 +70,7 @@
|
||||
|
||||
/datum/nanite_program/brain_heal
|
||||
name = "Neural Regeneration"
|
||||
desc = "The nanites fix neural connections in the host's brain, reversing brain damage and minor traumas."
|
||||
desc = "The nanites fix neural connections in the host's brain, reversing brain damage and minor traumas. Will not consume nanites while it would not have an effect."
|
||||
use_rate = 1.5
|
||||
rogue_types = list(/datum/nanite_program/brain_decay)
|
||||
|
||||
@@ -91,7 +93,7 @@
|
||||
|
||||
/datum/nanite_program/blood_restoring
|
||||
name = "Blood Regeneration"
|
||||
desc = "The nanites stimulate and boost blood cell production in the host."
|
||||
desc = "The nanites stimulate and boost blood cell production in the host. Will not consume nanites while the host has a safe blood level."
|
||||
use_rate = 1
|
||||
rogue_types = list(/datum/nanite_program/suffocating)
|
||||
|
||||
@@ -111,7 +113,7 @@
|
||||
|
||||
/datum/nanite_program/repairing
|
||||
name = "Mechanical Repair"
|
||||
desc = "The nanites fix damage in the host's mechanical limbs."
|
||||
desc = "The nanites fix damage in the host's mechanical limbs. Will not consume nanites while the host's mechanical limbs are undamaged, or while the host has no mechanical limbs."
|
||||
use_rate = 0.5
|
||||
rogue_types = list(/datum/nanite_program/necrotic)
|
||||
|
||||
@@ -153,13 +155,15 @@
|
||||
rogue_types = list(/datum/nanite_program/suffocating, /datum/nanite_program/necrotic)
|
||||
|
||||
/datum/nanite_program/purging_advanced/check_conditions()
|
||||
. = ..()
|
||||
if(!. || !host_mob.reagents)
|
||||
return FALSE
|
||||
var/foreign_reagent = FALSE
|
||||
for(var/datum/reagent/toxin/R in host_mob.reagents.reagent_list)
|
||||
foreign_reagent = TRUE
|
||||
break
|
||||
if(!host_mob.getToxLoss() && !foreign_reagent)
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
/datum/nanite_program/purging_advanced/active_effect()
|
||||
host_mob.adjustToxLoss(-1, forced = TRUE)
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
//Replication Protocols
|
||||
/datum/nanite_program/protocol/kickstart
|
||||
name = "Kickstart Protocol"
|
||||
desc = "Replication Protocol: the nanites focus on early growth, heavily boosting replication rate for a few minutes after the initial implantation."
|
||||
desc = "Replication Protocol: the nanites focus on early growth, heavily boosting replication rate for a few minutes after the initial implantation, \
|
||||
resulting in an additional 420 nanite volume being produced during the first two minutes."
|
||||
use_rate = 0
|
||||
rogue_types = list(/datum/nanite_program/necrotic)
|
||||
protocol_class = NANITE_PROTOCOL_REPLICATION
|
||||
@@ -17,8 +18,9 @@
|
||||
|
||||
/datum/nanite_program/protocol/factory
|
||||
name = "Factory Protocol"
|
||||
desc = "Replication Protocol: the nanites build a factory matrix within the host, gradually increasing replication speed over time. \
|
||||
The factory decays if the protocol is not active, or if the nanites are disrupted by shocks or EMPs."
|
||||
desc = "Replication Protocol: the nanites build a factory matrix within the host, gradually increasing replication speed over time, \
|
||||
granting a maximum of 2 additional nanite production after roughly 17 minutes. \
|
||||
The factory decays if the protocol is not active, or if the nanites are disrupted by shocks or EMPs."
|
||||
use_rate = 0
|
||||
rogue_types = list(/datum/nanite_program/necrotic)
|
||||
protocol_class = NANITE_PROTOCOL_REPLICATION
|
||||
@@ -46,43 +48,26 @@
|
||||
factory_efficiency = min(factory_efficiency + 1, max_efficiency)
|
||||
nanites.adjust_nanites(null, round(0.002 * factory_efficiency, 0.1))
|
||||
|
||||
/datum/nanite_program/protocol/tinker
|
||||
name = "Tinker Protocol"
|
||||
desc = "Replication Protocol: the nanites learn to use metallic material in the host's bloodstream to speed up the replication process."
|
||||
/datum/nanite_program/protocol/pyramid
|
||||
name = "Pyramid Protocol"
|
||||
desc = "Replication Protocol: the nanites implement an alternate cooperative replication protocol that is active as long as the nanite saturation level is above 80%, \
|
||||
resulting in an additional volume production of 1.2 per second."
|
||||
use_rate = 0
|
||||
rogue_types = list(/datum/nanite_program/necrotic)
|
||||
protocol_class = NANITE_PROTOCOL_REPLICATION
|
||||
var/boost = 2
|
||||
var/list/valid_reagents = list(
|
||||
/datum/reagent/iron,
|
||||
/datum/reagent/copper,
|
||||
/datum/reagent/gold,
|
||||
/datum/reagent/silver,
|
||||
/datum/reagent/mercury,
|
||||
/datum/reagent/aluminium,
|
||||
/datum/reagent/silicon)
|
||||
var/boost = 1.2
|
||||
|
||||
/datum/nanite_program/protocol/tinker/check_conditions()
|
||||
if(!nanites.host_mob.reagents)
|
||||
/datum/nanite_program/protocol/pyramid/check_conditions()
|
||||
if((nanites.nanite_volume / nanites.max_nanites) < 0.8)
|
||||
return FALSE
|
||||
|
||||
var/found_reagent = FALSE
|
||||
|
||||
var/datum/reagents/R = nanites.host_mob.reagents
|
||||
for(var/VR in valid_reagents)
|
||||
if(R.has_reagent(VR, 0.5))
|
||||
R.remove_reagent(VR, 0.5)
|
||||
found_reagent = TRUE
|
||||
break
|
||||
if(!found_reagent)
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
/datum/nanite_program/protocol/tinker/active_effect()
|
||||
/datum/nanite_program/protocol/pyramid/active_effect()
|
||||
nanites.adjust_nanites(null, boost)
|
||||
|
||||
/datum/nanite_program/protocol/offline
|
||||
name = "Offline Production Protocol"
|
||||
name = "Eclipse Protocol"
|
||||
desc = "Replication Protocol: while the host is asleep or otherwise unconcious, the nanites exploit the reduced interference to replicate more quickly."
|
||||
use_rate = 0
|
||||
rogue_types = list(/datum/nanite_program/necrotic)
|
||||
@@ -105,7 +90,6 @@
|
||||
|
||||
/datum/nanite_program/protocol/offline/active_effect()
|
||||
nanites.adjust_nanites(null, boost)
|
||||
|
||||
/datum/nanite_program/protocol/synergy
|
||||
name = "Synergy Protocol"
|
||||
desc = "Replication Protocol: the nanites syncronize their tasks and processes within a host, leading to an increase in replication speed proportional to the current nanite volume."
|
||||
@@ -116,3 +100,195 @@
|
||||
|
||||
/datum/nanite_program/protocol/synergy/active_effect()
|
||||
nanites.adjust_nanites(null, round(max_boost * (nanites.nanite_volume / nanites.max_nanites), 0.1))
|
||||
|
||||
/datum/nanite_program/protocol/hive
|
||||
name = "Hive Protocol"
|
||||
desc = "Storage Protocol: the nanites use a more efficient grid arrangment for volume storage, increasing maximum volume to 750."
|
||||
use_rate = 0
|
||||
rogue_types = list(/datum/nanite_program/necrotic)
|
||||
protocol_class = NANITE_PROTOCOL_STORAGE
|
||||
var/extra_volume = 250
|
||||
|
||||
/datum/nanite_program/protocol/hive/enable_passive_effect()
|
||||
. = ..()
|
||||
nanites.set_max_volume(null, nanites.max_nanites + extra_volume)
|
||||
|
||||
/datum/nanite_program/protocol/hive/disable_passive_effect()
|
||||
. = ..()
|
||||
nanites.set_max_volume(null, nanites.max_nanites - extra_volume)
|
||||
|
||||
/datum/nanite_program/protocol/zip
|
||||
name = "Zip Protocol"
|
||||
desc = "Storage Protocol: the nanites are disassembled and compacted when unused, increasing the maximum volume to 1000. However, the process slows down their replication rate slightly."
|
||||
use_rate = 0.2
|
||||
rogue_types = list(/datum/nanite_program/necrotic)
|
||||
protocol_class = NANITE_PROTOCOL_STORAGE
|
||||
var/extra_volume = 500
|
||||
|
||||
/datum/nanite_program/protocol/zip/enable_passive_effect()
|
||||
. = ..()
|
||||
nanites.set_max_volume(null, nanites.max_nanites + extra_volume)
|
||||
|
||||
/datum/nanite_program/protocol/zip/disable_passive_effect()
|
||||
. = ..()
|
||||
nanites.set_max_volume(null, nanites.max_nanites - extra_volume)
|
||||
|
||||
/datum/nanite_program/protocol/free_range
|
||||
name = "Free-range Protocol"
|
||||
desc = "Storage Protocol: the nanites discard their default storage protocols in favour of a cheaper and more organic approach. Reduces maximum volume to 250, but increases the replication rate by 0.5."
|
||||
use_rate = 0
|
||||
rogue_types = list(/datum/nanite_program/necrotic)
|
||||
protocol_class = NANITE_PROTOCOL_STORAGE
|
||||
var/boost = 0.5
|
||||
var/extra_volume = -250
|
||||
|
||||
/datum/nanite_program/protocol/free_range/enable_passive_effect()
|
||||
. = ..()
|
||||
nanites.set_max_volume(null, nanites.max_nanites + extra_volume)
|
||||
|
||||
/datum/nanite_program/protocol/free_range/disable_passive_effect()
|
||||
. = ..()
|
||||
nanites.set_max_volume(null, nanites.max_nanites - extra_volume)
|
||||
|
||||
/datum/nanite_program/protocol/free_range/active_effect()
|
||||
nanites.adjust_nanites(null, boost)
|
||||
|
||||
/datum/nanite_program/protocol/unsafe_storage
|
||||
name = "S.L.O. Protocol"
|
||||
desc = "Storage Protocol: 'S.L.O.P.', or Storage Level Override Protocol, completely disables the safety measures normally present in nanites, \
|
||||
allowing them to reach a whopping maximum volume level of 2000, but at the risk of causing damage to the host at nanite concentrations above the standard limit of 500."
|
||||
use_rate = 0
|
||||
rogue_types = list(/datum/nanite_program/necrotic)
|
||||
protocol_class = NANITE_PROTOCOL_STORAGE
|
||||
var/extra_volume = 1500
|
||||
var/next_warning = 0
|
||||
var/min_warning_cooldown = 120
|
||||
var/max_warning_cooldown = 350
|
||||
var/volume_warnings_stage_1 = list("You feel a dull pain in your abdomen.",
|
||||
"You feel a tickling sensation in your abdomen.")
|
||||
var/volume_warnings_stage_2 = list("You feel a dull pain in your stomach.",
|
||||
"You feel a dull pain when breathing.",
|
||||
"Your stomach grumbles.",
|
||||
"You feel a tickling sensation in your throat.",
|
||||
"You feel a tickling sensation in your lungs.",
|
||||
"You feel a tickling sensation in your stomach.",
|
||||
"Your lungs feel stiff.")
|
||||
var/volume_warnings_stage_3 = list("You feel a dull pain in your chest.",
|
||||
"You hear a faint buzzing coming from nowhere.",
|
||||
"You hear a faint buzzing inside your head.",
|
||||
"Your head aches.")
|
||||
var/volume_warnings_stage_4 = list("You feel a dull pain in your ears.",
|
||||
"You feel a dull pain behind your eyes.",
|
||||
"You hear a loud, echoing buzz inside your ears.",
|
||||
"You feel dizzy.",
|
||||
"You feel an itch coming from behind your eyes.",
|
||||
"Your eardrums itch.",
|
||||
"You see tiny grey motes drifting in your field of view.")
|
||||
var/volume_warnings_stage_5 = list("You feel sick.",
|
||||
"You feel a dull pain from every part of your body.",
|
||||
"You feel nauseous.")
|
||||
var/volume_warnings_stage_6 = list("Your skin itches and burns.",
|
||||
"Your muscles ache.",
|
||||
"You feel tired.",
|
||||
"You feel something skittering under your skin.",)
|
||||
|
||||
/datum/nanite_program/protocol/unsafe_storage/enable_passive_effect()
|
||||
. = ..()
|
||||
nanites.set_max_volume(null, nanites.max_nanites + extra_volume)
|
||||
|
||||
/datum/nanite_program/protocol/unsafe_storage/disable_passive_effect()
|
||||
. = ..()
|
||||
nanites.set_max_volume(null, nanites.max_nanites - extra_volume)
|
||||
|
||||
/datum/nanite_program/protocol/unsafe_storage/active_effect()
|
||||
if(!iscarbon(host_mob))
|
||||
if(prob(10))
|
||||
host_mob.adjustBruteLoss(((max(nanites.nanite_volume - 450, 0) / 450) ** 2 ) * 0.5) // 0.5 -> 2 -> 4.5 -> 8 damage per successful tick
|
||||
return
|
||||
|
||||
var/mob/living/carbon/C = host_mob
|
||||
|
||||
if(nanites.nanite_volume < 500)
|
||||
return
|
||||
|
||||
var/current_stage = 0
|
||||
if(nanites.nanite_volume > 500) //Liver is the main hub of nanite replication and the first to be threatened by excess volume
|
||||
if(prob(10))
|
||||
var/obj/item/organ/liver/liver = C.getorganslot(ORGAN_SLOT_LIVER)
|
||||
if(liver)
|
||||
liver.applyOrganDamage(0.6)
|
||||
current_stage++
|
||||
if(nanites.nanite_volume > 750) //Extra volume spills out in other central organs
|
||||
if(prob(10))
|
||||
var/obj/item/organ/stomach/stomach = C.getorganslot(ORGAN_SLOT_STOMACH)
|
||||
if(stomach)
|
||||
stomach.applyOrganDamage(0.75)
|
||||
if(prob(10))
|
||||
var/obj/item/organ/lungs/lungs = C.getorganslot(ORGAN_SLOT_LUNGS)
|
||||
if(lungs)
|
||||
lungs.applyOrganDamage(0.75)
|
||||
current_stage++
|
||||
if(nanites.nanite_volume > 1000) //Extra volume spills out in more critical organs
|
||||
if(prob(10))
|
||||
var/obj/item/organ/heart/heart = C.getorganslot(ORGAN_SLOT_HEART)
|
||||
if(heart)
|
||||
heart.applyOrganDamage(0.75)
|
||||
if(prob(10))
|
||||
var/obj/item/organ/brain/brain = C.getorganslot(ORGAN_SLOT_BRAIN)
|
||||
if(brain)
|
||||
brain.applyOrganDamage(0.75)
|
||||
current_stage++
|
||||
if(nanites.nanite_volume > 1250) //Excess nanites start invading smaller organs for more space, including sensory organs
|
||||
if(prob(13))
|
||||
var/obj/item/organ/eyes/eyes = C.getorganslot(ORGAN_SLOT_EYES)
|
||||
if(eyes)
|
||||
eyes.applyOrganDamage(0.75)
|
||||
if(prob(13))
|
||||
var/obj/item/organ/ears/ears = C.getorganslot(ORGAN_SLOT_EARS)
|
||||
if(ears)
|
||||
ears.applyOrganDamage(0.75)
|
||||
current_stage++
|
||||
if(nanites.nanite_volume > 1500) //Nanites start spilling into the bloodstream, causing toxicity
|
||||
if(prob(15))
|
||||
C.adjustToxLoss(0.5, TRUE, forced = TRUE) //Not healthy for slimepeople either
|
||||
current_stage++
|
||||
if(nanites.nanite_volume > 1750) //Nanites have almost reached their physical limit, and the pressure itself starts causing tissue damage
|
||||
if(prob(15))
|
||||
C.adjustBruteLoss(0.75, TRUE)
|
||||
current_stage++
|
||||
|
||||
volume_warning(current_stage)
|
||||
|
||||
/datum/nanite_program/protocol/unsafe_storage/proc/volume_warning(tier)
|
||||
if(world.time < next_warning)
|
||||
return
|
||||
|
||||
var/list/main_warnings
|
||||
var/list/extra_warnings
|
||||
|
||||
switch(tier)
|
||||
if(1)
|
||||
main_warnings = volume_warnings_stage_1
|
||||
extra_warnings = null
|
||||
if(2)
|
||||
main_warnings = volume_warnings_stage_2
|
||||
extra_warnings = volume_warnings_stage_1
|
||||
if(3)
|
||||
main_warnings = volume_warnings_stage_3
|
||||
extra_warnings = volume_warnings_stage_1 + volume_warnings_stage_2
|
||||
if(4)
|
||||
main_warnings = volume_warnings_stage_4
|
||||
extra_warnings = volume_warnings_stage_1 + volume_warnings_stage_2 + volume_warnings_stage_3
|
||||
if(5)
|
||||
main_warnings = volume_warnings_stage_5
|
||||
extra_warnings = volume_warnings_stage_1 + volume_warnings_stage_2 + volume_warnings_stage_3 + volume_warnings_stage_4
|
||||
if(6)
|
||||
main_warnings = volume_warnings_stage_6
|
||||
extra_warnings = volume_warnings_stage_1 + volume_warnings_stage_2 + volume_warnings_stage_3 + volume_warnings_stage_4 + volume_warnings_stage_5
|
||||
|
||||
if(prob(35))
|
||||
to_chat(host_mob, "<span class='warning'>[pick(main_warnings)]</span>")
|
||||
next_warning = world.time + rand(min_warning_cooldown, max_warning_cooldown)
|
||||
else if(islist(extra_warnings))
|
||||
to_chat(host_mob, "<span class='warning'>[pick(extra_warnings)]</span>")
|
||||
next_warning = world.time + rand(min_warning_cooldown, max_warning_cooldown)
|
||||
|
||||
@@ -235,8 +235,7 @@
|
||||
|
||||
/datum/nanite_program/sensor/voice
|
||||
name = "Voice Sensor"
|
||||
desc = "Sends a signal when the nanites hear a determined word or sentence."
|
||||
var/spent = FALSE
|
||||
desc = "The nanites receive a signal when they detect a specific, preprogrammed word or phrase being said."
|
||||
|
||||
/datum/nanite_program/sensor/voice/register_extra_settings()
|
||||
. = ..()
|
||||
@@ -248,16 +247,17 @@
|
||||
RegisterSignal(host_mob, COMSIG_MOVABLE_HEAR, .proc/on_hear)
|
||||
|
||||
/datum/nanite_program/sensor/voice/on_mob_remove()
|
||||
UnregisterSignal(host_mob, COMSIG_MOVABLE_HEAR, .proc/on_hear)
|
||||
UnregisterSignal(host_mob, COMSIG_MOVABLE_HEAR)
|
||||
|
||||
/datum/nanite_program/sensor/voice/proc/on_hear(datum/source, list/hearing_args)
|
||||
SIGNAL_HANDLER
|
||||
var/datum/nanite_extra_setting/sentence = extra_settings[NES_SENTENCE]
|
||||
var/datum/nanite_extra_setting/inclusive = extra_settings[NES_INCLUSIVE_MODE]
|
||||
if(!sentence.get_value())
|
||||
return
|
||||
if(inclusive.get_value())
|
||||
if(findtextEx(hearing_args[HEARING_RAW_MESSAGE], sentence))
|
||||
if(findtext(hearing_args[HEARING_RAW_MESSAGE], sentence.get_value()))
|
||||
send_code()
|
||||
else
|
||||
if(hearing_args[HEARING_RAW_MESSAGE] == sentence)
|
||||
if(lowertext(hearing_args[HEARING_RAW_MESSAGE]) == lowertext(sentence.get_value()))
|
||||
send_code()
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
/datum/nanite_program/sleepy
|
||||
name = "Sleep Induction"
|
||||
desc = "The nanites cause rapid narcolepsy when triggered."
|
||||
desc = "The nanites induce rapid narcolepsy when triggered."
|
||||
can_trigger = TRUE
|
||||
trigger_cost = 15
|
||||
trigger_cooldown = 1200
|
||||
@@ -116,13 +116,13 @@
|
||||
//Can receive transmissions from a nanite communication remote for customized messages
|
||||
/datum/nanite_program/comm
|
||||
can_trigger = TRUE
|
||||
var/comm_code = 0
|
||||
var/comm_message = ""
|
||||
|
||||
/datum/nanite_program/comm/register_extra_settings()
|
||||
extra_settings[NES_COMM_CODE] = new /datum/nanite_extra_setting/number(0, 0, 9999)
|
||||
|
||||
/datum/nanite_program/comm/proc/receive_comm_signal(signal_comm_code, comm_message, comm_source)
|
||||
var/datum/nanite_extra_setting/comm_code = extra_settings[NES_COMM_CODE]
|
||||
if(!activated || !comm_code)
|
||||
return
|
||||
if(signal_comm_code == comm_code)
|
||||
@@ -138,7 +138,8 @@
|
||||
rogue_types = list(/datum/nanite_program/brain_misfire, /datum/nanite_program/brain_decay)
|
||||
var/static/list/blacklist = list(
|
||||
"*surrender",
|
||||
"*collapse"
|
||||
"*collapse",
|
||||
"*faint",
|
||||
)
|
||||
|
||||
/datum/nanite_program/comm/speech/register_extra_settings()
|
||||
|
||||
@@ -207,24 +207,23 @@
|
||||
|
||||
//Syncs the nanites with the cumulative current mob's access level. Can potentially wipe existing access.
|
||||
/datum/nanite_program/access/on_trigger(comm_message)
|
||||
var/list/new_access = list()
|
||||
var/obj/item/current_item
|
||||
current_item = host_mob.get_active_held_item()
|
||||
if(current_item)
|
||||
new_access += current_item.GetAccess()
|
||||
current_item = host_mob.get_inactive_held_item()
|
||||
if(current_item)
|
||||
new_access += current_item.GetAccess()
|
||||
var/list/potential_items = list()
|
||||
|
||||
potential_items += host_mob.get_active_held_item()
|
||||
potential_items += host_mob.get_inactive_held_item()
|
||||
|
||||
if(ishuman(host_mob))
|
||||
var/mob/living/carbon/human/H = host_mob
|
||||
current_item = H.wear_id
|
||||
if(current_item)
|
||||
new_access += current_item.GetAccess()
|
||||
potential_items += H.wear_id
|
||||
else if(isanimal(host_mob))
|
||||
potential_items += host_mob.pulling
|
||||
var/mob/living/simple_animal/A = host_mob
|
||||
current_item = A.access_card
|
||||
if(current_item)
|
||||
new_access += current_item.GetAccess()
|
||||
potential_items += A.access_card
|
||||
|
||||
var/list/new_access = list()
|
||||
for(var/obj/item/I in potential_items)
|
||||
new_access += I.GetAccess()
|
||||
|
||||
access = new_access
|
||||
|
||||
/datum/nanite_program/spreading
|
||||
@@ -253,6 +252,7 @@
|
||||
//this will potentially take over existing nanites!
|
||||
infectee.AddComponent(/datum/component/nanites, 10)
|
||||
SEND_SIGNAL(infectee, COMSIG_NANITE_SYNC, nanites)
|
||||
SEND_SIGNAL(infectee, COMSIG_NANITE_SET_CLOUD, nanites.cloud_id)
|
||||
infectee.investigate_log("was infected by spreading nanites by [key_name(host_mob)] at [AREACOORD(infectee)].", INVESTIGATE_NANITES)
|
||||
|
||||
/datum/nanite_program/nanite_sting
|
||||
@@ -277,13 +277,15 @@
|
||||
//unlike with Infective Exo-Locomotion, this can't take over existing nanites, because Nanite Sting only targets non-hosts.
|
||||
infectee.AddComponent(/datum/component/nanites, 5)
|
||||
SEND_SIGNAL(infectee, COMSIG_NANITE_SYNC, nanites)
|
||||
SEND_SIGNAL(infectee, COMSIG_NANITE_SET_CLOUD, nanites.cloud_id)
|
||||
infectee.investigate_log("was infected by a nanite cluster by [key_name(host_mob)] at [AREACOORD(infectee)].", INVESTIGATE_NANITES)
|
||||
to_chat(infectee, "<span class='warning'>You feel a tiny prick.</span>")
|
||||
|
||||
/datum/nanite_program/mitosis
|
||||
name = "Mitosis"
|
||||
desc = "The nanites gain the ability to self-replicate, using bluespace to power the process. Becomes more effective the more nanites are already in the host.\
|
||||
The replication has also a chance to corrupt the nanite programming due to copy faults - cloud sync is highly recommended."
|
||||
desc = "The nanites gain the ability to self-replicate, using bluespace to power the process. Becomes more effective the more nanites are already in the host; \
|
||||
For every 50 nanite volume in the host, the production rate is increased by 0.5. The replication has also a chance to corrupt the nanite programming \
|
||||
due to copy faults - constant cloud sync is highly recommended."
|
||||
use_rate = 0
|
||||
rogue_types = list(/datum/nanite_program/toxic)
|
||||
|
||||
@@ -306,16 +308,14 @@
|
||||
/datum/nanite_program/dermal_button/register_extra_settings()
|
||||
extra_settings[NES_SENT_CODE] = new /datum/nanite_extra_setting/number(1, 1, 9999)
|
||||
extra_settings[NES_BUTTON_NAME] = new /datum/nanite_extra_setting/text("Button")
|
||||
extra_settings[NES_ICON] = new /datum/nanite_extra_setting/type("power", list("one","two","three","four","five","plus","minus","power"))
|
||||
extra_settings[NES_COLOR] = new /datum/nanite_extra_setting/type("green", list("green","red","yellow","blue"))
|
||||
extra_settings[NES_ICON] = new /datum/nanite_extra_setting/type("power", list("blank","one","two","three","four","five","plus","minus","exclamation","question","cross","info","heart","skull","brain","brain_damage","injection","blood","shield","reaction","network","power","radioactive","electricity","magnetism","scan","repair","id","wireless","say","sleep","bomb"))
|
||||
|
||||
/datum/nanite_program/dermal_button/enable_passive_effect()
|
||||
. = ..()
|
||||
var/datum/nanite_extra_setting/bn_name = extra_settings[NES_BUTTON_NAME]
|
||||
var/datum/nanite_extra_setting/bn_icon = extra_settings[NES_ICON]
|
||||
var/datum/nanite_extra_setting/bn_color = extra_settings[NES_COLOR]
|
||||
if(!button)
|
||||
button = new(src, bn_name.get_value(), bn_icon.get_value(), bn_color.get_value())
|
||||
button = new(src, bn_name.get_value(), bn_icon.get_value())
|
||||
button.target = host_mob
|
||||
button.Grant(host_mob)
|
||||
|
||||
@@ -339,14 +339,14 @@
|
||||
name = "Button"
|
||||
icon_icon = 'icons/mob/actions/actions_items.dmi'
|
||||
check_flags = AB_CHECK_RESTRAINED|AB_CHECK_STUN|AB_CHECK_CONSCIOUS
|
||||
button_icon_state = "power_green"
|
||||
button_icon_state = "nanite_power"
|
||||
var/datum/nanite_program/dermal_button/program
|
||||
|
||||
/datum/action/innate/nanite_button/New(datum/nanite_program/dermal_button/_program, _name, _icon, _color)
|
||||
/datum/action/innate/nanite_button/New(datum/nanite_program/dermal_button/_program, _name, _icon)
|
||||
..()
|
||||
program = _program
|
||||
name = _name
|
||||
button_icon_state = "[_icon]_[_color]"
|
||||
button_icon_state = "nanite_[_icon]"
|
||||
|
||||
/datum/action/innate/nanite_button/Activate()
|
||||
program.press()
|
||||
|
||||
@@ -45,8 +45,8 @@
|
||||
|
||||
/datum/nanite_program/aggressive_replication
|
||||
name = "Aggressive Replication"
|
||||
desc = "Nanites will consume organic matter to improve their replication rate, damaging the host. The efficiency increases with the volume of nanites, requiring 200 to break even."
|
||||
use_rate = 0
|
||||
desc = "Nanites will consume organic matter to improve their replication rate, damaging the host. The efficiency increases with the volume of nanites, requiring 200 to break even, \
|
||||
and scaling linearly for a net positive of 0.1 production rate per 20 nanite volume beyond that."
|
||||
rogue_types = list(/datum/nanite_program/necrotic)
|
||||
|
||||
/datum/nanite_program/aggressive_replication/active_effect()
|
||||
|
||||
Reference in New Issue
Block a user