Suffering and co
This commit is contained in:
@@ -0,0 +1,107 @@
|
||||
//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."
|
||||
use_rate = 0
|
||||
rogue_types = list(/datum/nanite_program/necrotic)
|
||||
protocol_class = NANITE_PROTOCOL_REPLICATION
|
||||
var/boost_duration = 1200
|
||||
|
||||
/datum/nanite_program/protocol/kickstart/check_conditions()
|
||||
if(!(world.time < nanites.start_time + boost_duration))
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
/datum/nanite_program/protocol/kickstart/active_effect()
|
||||
nanites.adjust_nanites(null, 3.5)
|
||||
|
||||
/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."
|
||||
use_rate = 0
|
||||
rogue_types = list(/datum/nanite_program/necrotic)
|
||||
protocol_class = NANITE_PROTOCOL_REPLICATION
|
||||
var/factory_efficiency = 0
|
||||
var/max_efficiency = 1000 //Goes up to 2 bonus regen per tick after 16 minutes and 40 seconds
|
||||
|
||||
/datum/nanite_program/protocol/factory/on_process()
|
||||
if(!activated || !check_conditions())
|
||||
factory_efficiency = max(0, factory_efficiency - 5)
|
||||
..()
|
||||
|
||||
/datum/nanite_program/protocol/factory/on_emp(severity)
|
||||
..()
|
||||
factory_efficiency = max(0, factory_efficiency - 300)
|
||||
|
||||
/datum/nanite_program/protocol/factory/on_shock(shock_damage)
|
||||
..()
|
||||
factory_efficiency = max(0, factory_efficiency - 200)
|
||||
|
||||
/datum/nanite_program/protocol/factory/on_minor_shock()
|
||||
..()
|
||||
factory_efficiency = max(0, factory_efficiency - 100)
|
||||
|
||||
/datum/nanite_program/protocol/factory/active_effect()
|
||||
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."
|
||||
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)
|
||||
|
||||
/datum/nanite_program/protocol/tinker/check_conditions()
|
||||
if(!nanites.host_mob.reagents)
|
||||
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()
|
||||
nanites.adjust_nanites(null, boost)
|
||||
|
||||
/datum/nanite_program/protocol/offline
|
||||
name = "Offline Production 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)
|
||||
protocol_class = NANITE_PROTOCOL_REPLICATION
|
||||
var/boost = 3
|
||||
|
||||
/datum/nanite_program/protocol/offline/check_conditions()
|
||||
var/is_offline = FALSE
|
||||
if(nanites.host_mob.IsSleeping() || nanites.host_mob.IsUnconscious())
|
||||
is_offline = TRUE
|
||||
if(nanites.host_mob.stat == DEAD || HAS_TRAIT(nanites.host_mob, TRAIT_DEATHCOMA))
|
||||
is_offline = TRUE
|
||||
if(nanites.host_mob.InCritical() && !HAS_TRAIT(nanites.host_mob, TRAIT_NOSOFTCRIT))
|
||||
is_offline = TRUE
|
||||
if(nanites.host_mob.InFullCritical() && !HAS_TRAIT(nanites.host_mob, TRAIT_NOHARDCRIT))
|
||||
is_offline = TRUE
|
||||
if(!is_offline)
|
||||
return FALSE
|
||||
return ..()
|
||||
|
||||
/datum/nanite_program/protocol/offline/active_effect()
|
||||
nanites.adjust_nanites(null, boost)
|
||||
Reference in New Issue
Block a user