Merge pull request #10569 from keronshb/RemoteMoodResearch
Ports the Nanite Remote, Nanite Mood Programs + Rebalance, and the Research Generating Nanites
This commit is contained in:
@@ -1,170 +1,180 @@
|
||||
|
||||
///////////////////////////////////
|
||||
/////Non-Board Computer Stuff//////
|
||||
///////////////////////////////////
|
||||
|
||||
/datum/design/intellicard
|
||||
name = "Intellicard AI Transportation System"
|
||||
desc = "Allows for the construction of an intellicard."
|
||||
id = "intellicard"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_GLASS = 1000, MAT_GOLD = 200)
|
||||
build_path = /obj/item/aicard
|
||||
category = list("Electronics")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/paicard
|
||||
name = "Personal Artificial Intelligence Card"
|
||||
desc = "Allows for the construction of a pAI Card."
|
||||
id = "paicard"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_GLASS = 500, MAT_METAL = 500)
|
||||
build_path = /obj/item/paicard
|
||||
category = list("Electronics")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ALL
|
||||
|
||||
/datum/design/ai_cam_upgrade
|
||||
name = "AI Surveillance Software Update"
|
||||
desc = "A software package that will allow an artificial intelligence to 'hear' from its cameras via lip reading."
|
||||
id = "ai_cam_upgrade"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 5000, MAT_GLASS = 5000, MAT_GOLD = 15000, MAT_SILVER = 15000, MAT_DIAMOND = 20000, MAT_PLASMA = 10000)
|
||||
build_path = /obj/item/surveillance_upgrade
|
||||
category = list("Electronics")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
///////////////////////////////////
|
||||
//////////Nanite Devices///////////
|
||||
///////////////////////////////////
|
||||
/datum/design/nanite_remote
|
||||
name = "Nanite Remote"
|
||||
desc = "Allows for the construction of a nanite remote."
|
||||
id = "nanite_remote"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_GLASS = 500, MAT_METAL = 500)
|
||||
build_path = /obj/item/nanite_remote
|
||||
category = list("Electronics")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/nanite_scanner
|
||||
name = "Nanite Scanner"
|
||||
desc = "Allows for the construction of a nanite scanner."
|
||||
id = "nanite_scanner"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_GLASS = 500, MAT_METAL = 500)
|
||||
build_path = /obj/item/nanite_scanner
|
||||
category = list("Electronics")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
////////////////////////////////////////
|
||||
//////////Disk Construction Disks///////
|
||||
////////////////////////////////////////
|
||||
/datum/design/design_disk
|
||||
name = "Design Storage Disk"
|
||||
desc = "Produce additional disks for storing device designs."
|
||||
id = "design_disk"
|
||||
build_type = PROTOLATHE | AUTOLATHE
|
||||
materials = list(MAT_METAL = 300, MAT_GLASS = 100)
|
||||
build_path = /obj/item/disk/design_disk
|
||||
category = list("Electronics")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/design_disk_adv
|
||||
name = "Advanced Design Storage Disk"
|
||||
desc = "Produce additional disks for storing device designs."
|
||||
id = "design_disk_adv"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 300, MAT_GLASS = 100, MAT_SILVER=50)
|
||||
build_path = /obj/item/disk/design_disk/adv
|
||||
category = list("Electronics")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/tech_disk
|
||||
name = "Technology Data Storage Disk"
|
||||
desc = "Produce additional disks for storing technology data."
|
||||
id = "tech_disk"
|
||||
build_type = PROTOLATHE | AUTOLATHE
|
||||
materials = list(MAT_METAL = 300, MAT_GLASS = 100)
|
||||
build_path = /obj/item/disk/tech_disk
|
||||
category = list("Electronics")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/nanite_disk
|
||||
name = "Nanite Program Disk"
|
||||
desc = "Stores nanite programs."
|
||||
id = "nanite_disk"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 300, MAT_GLASS = 100)
|
||||
build_path = /obj/item/disk/nanite_program
|
||||
category = list("Electronics")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/integrated_printer
|
||||
name = "Integrated circuit printer"
|
||||
desc = "This machine provides all necessary things for circuitry."
|
||||
id = "icprinter"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_GLASS = 5000, MAT_METAL = 10000)
|
||||
build_path = /obj/item/integrated_circuit_printer
|
||||
category = list("Electronics")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/IC_printer_upgrade_advanced
|
||||
name = "Integrated circuit printer upgrade: Advanced Designs"
|
||||
desc = "This disk allows for integrated circuit printers to print advanced circuitry designs."
|
||||
id = "icupgadv"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_GLASS = 10000, MAT_METAL = 10000)
|
||||
build_path = /obj/item/disk/integrated_circuit/upgrade/advanced
|
||||
category = list("Electronics")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/IC_printer_upgrade_clone
|
||||
name = "Integrated circuit printer upgrade: Instant Cloning"
|
||||
desc = "This disk allows for integrated circuit printers to clone designs instantaneously."
|
||||
id = "icupgclo"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_GLASS = 10000, MAT_METAL = 10000)
|
||||
build_path = /obj/item/disk/integrated_circuit/upgrade/clone
|
||||
category = list("Electronics")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
//CIT ADDITIONS
|
||||
/datum/design/drone_shell
|
||||
name = "Drone Shell"
|
||||
desc = "A shell of a maintenance drone, an expendable robot built to perform station repairs."
|
||||
id = "drone_shell"
|
||||
build_type = MECHFAB | PROTOLATHE
|
||||
materials = list(MAT_METAL = 800, MAT_GLASS = 350)
|
||||
construction_time = 150
|
||||
build_path = /obj/item/drone_shell
|
||||
category = list("Misc")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/xenobio_upgrade
|
||||
name = "owo"
|
||||
desc = "someone's bussin"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 300, MAT_GLASS = 100)
|
||||
category = list("Electronics")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/xenobio_upgrade/xenobiomonkeys
|
||||
name = "Xenobiology console monkey upgrade disk"
|
||||
desc = "This disk will add the ability to remotely recycle monkeys via the Xenobiology console."
|
||||
id = "xenobio_monkeys"
|
||||
build_path = /obj/item/disk/xenobio_console_upgrade/monkey
|
||||
|
||||
/datum/design/xenobio_upgrade/xenobioslimebasic
|
||||
name = "Xenobiology console basic slime upgrade disk"
|
||||
desc = "This disk will add the ability to remotely manipulate slimes via the Xenobiology console."
|
||||
id = "xenobio_slimebasic"
|
||||
build_path = /obj/item/disk/xenobio_console_upgrade/slimebasic
|
||||
|
||||
/datum/design/xenobio_upgrade/xenobioslimeadv
|
||||
name = "Xenobiology console advanced slime upgrade disk"
|
||||
desc = "This disk will add the ability to remotely feed slimes potions via the Xenobiology console, and lift the restrictions on the number of slimes that can be stored inside the Xenobiology console. This includes the contents of the basic slime upgrade disk."
|
||||
id = "xenobio_slimeadv"
|
||||
build_path = /obj/item/disk/xenobio_console_upgrade/slimeadv
|
||||
|
||||
|
||||
|
||||
///////////////////////////////////
|
||||
/////Non-Board Computer Stuff//////
|
||||
///////////////////////////////////
|
||||
|
||||
/datum/design/intellicard
|
||||
name = "Intellicard AI Transportation System"
|
||||
desc = "Allows for the construction of an intellicard."
|
||||
id = "intellicard"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_GLASS = 1000, MAT_GOLD = 200)
|
||||
build_path = /obj/item/aicard
|
||||
category = list("Electronics")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/paicard
|
||||
name = "Personal Artificial Intelligence Card"
|
||||
desc = "Allows for the construction of a pAI Card."
|
||||
id = "paicard"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_GLASS = 500, MAT_METAL = 500)
|
||||
build_path = /obj/item/paicard
|
||||
category = list("Electronics")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ALL
|
||||
|
||||
/datum/design/ai_cam_upgrade
|
||||
name = "AI Surveillance Software Update"
|
||||
desc = "A software package that will allow an artificial intelligence to 'hear' from its cameras via lip reading."
|
||||
id = "ai_cam_upgrade"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 5000, MAT_GLASS = 5000, MAT_GOLD = 15000, MAT_SILVER = 15000, MAT_DIAMOND = 20000, MAT_PLASMA = 10000)
|
||||
build_path = /obj/item/surveillance_upgrade
|
||||
category = list("Electronics")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
///////////////////////////////////
|
||||
//////////Nanite Devices///////////
|
||||
///////////////////////////////////
|
||||
/datum/design/nanite_remote
|
||||
name = "Nanite Remote"
|
||||
desc = "Allows for the construction of a nanite remote."
|
||||
id = "nanite_remote"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_GLASS = 500, MAT_METAL = 500)
|
||||
build_path = /obj/item/nanite_remote
|
||||
category = list("Electronics")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/nanite_comm_remote
|
||||
name = "Nanite Communication Remote"
|
||||
desc = "Allows for the construction of a nanite communication remote."
|
||||
id = "nanite_comm_remote"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_GLASS = 500, MAT_METAL = 500)
|
||||
build_path = /obj/item/nanite_remote/comm
|
||||
category = list("Electronics")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/nanite_scanner
|
||||
name = "Nanite Scanner"
|
||||
desc = "Allows for the construction of a nanite scanner."
|
||||
id = "nanite_scanner"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_GLASS = 500, MAT_METAL = 500)
|
||||
build_path = /obj/item/nanite_scanner
|
||||
category = list("Electronics")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
////////////////////////////////////////
|
||||
//////////Disk Construction Disks///////
|
||||
////////////////////////////////////////
|
||||
/datum/design/design_disk
|
||||
name = "Design Storage Disk"
|
||||
desc = "Produce additional disks for storing device designs."
|
||||
id = "design_disk"
|
||||
build_type = PROTOLATHE | AUTOLATHE
|
||||
materials = list(MAT_METAL = 300, MAT_GLASS = 100)
|
||||
build_path = /obj/item/disk/design_disk
|
||||
category = list("Electronics")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/design_disk_adv
|
||||
name = "Advanced Design Storage Disk"
|
||||
desc = "Produce additional disks for storing device designs."
|
||||
id = "design_disk_adv"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 300, MAT_GLASS = 100, MAT_SILVER=50)
|
||||
build_path = /obj/item/disk/design_disk/adv
|
||||
category = list("Electronics")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/tech_disk
|
||||
name = "Technology Data Storage Disk"
|
||||
desc = "Produce additional disks for storing technology data."
|
||||
id = "tech_disk"
|
||||
build_type = PROTOLATHE | AUTOLATHE
|
||||
materials = list(MAT_METAL = 300, MAT_GLASS = 100)
|
||||
build_path = /obj/item/disk/tech_disk
|
||||
category = list("Electronics")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/nanite_disk
|
||||
name = "Nanite Program Disk"
|
||||
desc = "Stores nanite programs."
|
||||
id = "nanite_disk"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 300, MAT_GLASS = 100)
|
||||
build_path = /obj/item/disk/nanite_program
|
||||
category = list("Electronics")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/integrated_printer
|
||||
name = "Integrated circuit printer"
|
||||
desc = "This machine provides all necessary things for circuitry."
|
||||
id = "icprinter"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_GLASS = 5000, MAT_METAL = 10000)
|
||||
build_path = /obj/item/integrated_circuit_printer
|
||||
category = list("Electronics")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/IC_printer_upgrade_advanced
|
||||
name = "Integrated circuit printer upgrade: Advanced Designs"
|
||||
desc = "This disk allows for integrated circuit printers to print advanced circuitry designs."
|
||||
id = "icupgadv"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_GLASS = 10000, MAT_METAL = 10000)
|
||||
build_path = /obj/item/disk/integrated_circuit/upgrade/advanced
|
||||
category = list("Electronics")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/IC_printer_upgrade_clone
|
||||
name = "Integrated circuit printer upgrade: Instant Cloning"
|
||||
desc = "This disk allows for integrated circuit printers to clone designs instantaneously."
|
||||
id = "icupgclo"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_GLASS = 10000, MAT_METAL = 10000)
|
||||
build_path = /obj/item/disk/integrated_circuit/upgrade/clone
|
||||
category = list("Electronics")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
//CIT ADDITIONS
|
||||
/datum/design/drone_shell
|
||||
name = "Drone Shell"
|
||||
desc = "A shell of a maintenance drone, an expendable robot built to perform station repairs."
|
||||
id = "drone_shell"
|
||||
build_type = MECHFAB | PROTOLATHE
|
||||
materials = list(MAT_METAL = 800, MAT_GLASS = 350)
|
||||
construction_time = 150
|
||||
build_path = /obj/item/drone_shell
|
||||
category = list("Misc")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/xenobio_upgrade
|
||||
name = "owo"
|
||||
desc = "someone's bussin"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 300, MAT_GLASS = 100)
|
||||
category = list("Electronics")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/xenobio_upgrade/xenobiomonkeys
|
||||
name = "Xenobiology console monkey upgrade disk"
|
||||
desc = "This disk will add the ability to remotely recycle monkeys via the Xenobiology console."
|
||||
id = "xenobio_monkeys"
|
||||
build_path = /obj/item/disk/xenobio_console_upgrade/monkey
|
||||
|
||||
/datum/design/xenobio_upgrade/xenobioslimebasic
|
||||
name = "Xenobiology console basic slime upgrade disk"
|
||||
desc = "This disk will add the ability to remotely manipulate slimes via the Xenobiology console."
|
||||
id = "xenobio_slimebasic"
|
||||
build_path = /obj/item/disk/xenobio_console_upgrade/slimebasic
|
||||
|
||||
/datum/design/xenobio_upgrade/xenobioslimeadv
|
||||
name = "Xenobiology console advanced slime upgrade disk"
|
||||
desc = "This disk will add the ability to remotely feed slimes potions via the Xenobiology console, and lift the restrictions on the number of slimes that can be stored inside the Xenobiology console. This includes the contents of the basic slime upgrade disk."
|
||||
id = "xenobio_slimeadv"
|
||||
build_path = /obj/item/disk/xenobio_console_upgrade/slimeadv
|
||||
|
||||
|
||||
|
||||
@@ -380,7 +380,7 @@
|
||||
name = "Mind Control"
|
||||
desc = "The nanites imprint an absolute directive onto the host's brain while they're active."
|
||||
id = "mindcontrol_nanites"
|
||||
program_type = /datum/nanite_program/mind_control
|
||||
program_type = /datum/nanite_program/triggered/comm/mind_control
|
||||
category = list("Weaponized Nanites")
|
||||
|
||||
////////////////////SUPPRESSION NANITES//////////////////////////////////////
|
||||
@@ -445,21 +445,35 @@
|
||||
name = "Skull Echo"
|
||||
desc = "The nanites echo a synthesized message inside the host's skull."
|
||||
id = "voice_nanites"
|
||||
program_type = /datum/nanite_program/triggered/voice
|
||||
program_type = /datum/nanite_program/triggered/comm/voice
|
||||
category = list("Suppression Nanites")
|
||||
|
||||
/datum/design/nanites/speech
|
||||
name = "Forced Speech"
|
||||
desc = "The nanites force the host to say a pre-programmed sentence when triggered."
|
||||
id = "speech_nanites"
|
||||
program_type = /datum/nanite_program/triggered/speech
|
||||
program_type = /datum/nanite_program/triggered/comm/speech
|
||||
category = list("Suppression Nanites")
|
||||
|
||||
/datum/design/nanites/hallucination
|
||||
name = "Hallucination"
|
||||
desc = "The nanites make the host see and hear things that aren't real."
|
||||
id = "hallucination_nanites"
|
||||
program_type = /datum/nanite_program/triggered/hallucination
|
||||
program_type = /datum/nanite_program/triggered/comm/hallucination
|
||||
category = list("Suppression Nanites")
|
||||
|
||||
/datum/design/nanites/good_mood
|
||||
name = "Happiness Enhancer"
|
||||
desc = "The nanites synthesize serotonin inside the host's brain, creating an artificial sense of happiness."
|
||||
id = "good_mood_nanites"
|
||||
program_type = /datum/nanite_program/good_mood
|
||||
category = list("Suppression Nanites")
|
||||
|
||||
/datum/design/nanites/bad_mood
|
||||
name = "Happiness Suppressor"
|
||||
desc = "The nanites suppress the production of serotonin inside the host's brain, creating an artificial state of depression."
|
||||
id = "bad_mood_nanites"
|
||||
program_type = /datum/nanite_program/bad_mood
|
||||
category = list("Suppression Nanites")
|
||||
|
||||
////////////////////SENSOR NANITES//////////////////////////////////////
|
||||
|
||||
@@ -3,7 +3,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."
|
||||
use_rate = 2.5
|
||||
use_rate = 0.5
|
||||
rogue_types = list(/datum/nanite_program/necrotic)
|
||||
|
||||
/datum/nanite_program/regenerative/check_conditions()
|
||||
@@ -23,11 +23,11 @@
|
||||
if(!parts.len)
|
||||
return
|
||||
for(var/obj/item/bodypart/L in parts)
|
||||
if(L.heal_damage(1/parts.len, 1/parts.len))
|
||||
if(L.heal_damage(0.5/parts.len, 0.5/parts.len, null, BODYPART_ORGANIC))
|
||||
host_mob.update_damage_overlays()
|
||||
else
|
||||
host_mob.adjustBruteLoss(-1, TRUE)
|
||||
host_mob.adjustFireLoss(-1, TRUE)
|
||||
host_mob.adjustBruteLoss(-0.5, TRUE)
|
||||
host_mob.adjustFireLoss(-0.5, TRUE)
|
||||
|
||||
/datum/nanite_program/temperature
|
||||
name = "Temperature Adjustment"
|
||||
@@ -112,7 +112,7 @@
|
||||
/datum/nanite_program/repairing
|
||||
name = "Mechanical Repair"
|
||||
desc = "The nanites fix damage in the host's mechanical limbs."
|
||||
use_rate = 0.5 //much more efficient than organic healing
|
||||
use_rate = 0.5
|
||||
rogue_types = list(/datum/nanite_program/necrotic)
|
||||
|
||||
/datum/nanite_program/repairing/check_conditions()
|
||||
@@ -137,13 +137,13 @@
|
||||
return
|
||||
var/update = FALSE
|
||||
for(var/obj/item/bodypart/L in parts)
|
||||
if(L.heal_damage(1/parts.len, 1/parts.len, only_robotic = TRUE, only_organic = FALSE))
|
||||
if(L.heal_damage(1.5/parts.len, 1.5/parts.len, null, BODYPART_ROBOTIC)) //much faster than organic healing
|
||||
update = TRUE
|
||||
if(update)
|
||||
host_mob.update_damage_overlays()
|
||||
else
|
||||
host_mob.adjustBruteLoss(-1, TRUE)
|
||||
host_mob.adjustFireLoss(-1, TRUE)
|
||||
host_mob.adjustBruteLoss(-1.5, TRUE)
|
||||
host_mob.adjustFireLoss(-1.5, TRUE)
|
||||
|
||||
/datum/nanite_program/purging_advanced
|
||||
name = "Selective Blood Purification"
|
||||
|
||||
@@ -114,7 +114,19 @@
|
||||
. = ..()
|
||||
host_mob.cure_fakedeath("nanites")
|
||||
|
||||
/datum/nanite_program/triggered/speech
|
||||
//Can receive transmissions from a nanite communication remote for customized messages
|
||||
/datum/nanite_program/triggered/comm
|
||||
var/comm_code = 0
|
||||
var/comm_message = ""
|
||||
|
||||
/datum/nanite_program/triggered/comm/proc/receive_comm_signal(signal_comm_code, comm_message, comm_source)
|
||||
if(!activated || !comm_code)
|
||||
return
|
||||
if(signal_comm_code == comm_code)
|
||||
host_mob.investigate_log("'s [name] nanite program was messaged by [comm_source] with comm code [signal_comm_code] and message '[comm_message]'.", INVESTIGATE_NANITES)
|
||||
trigger(comm_message)
|
||||
|
||||
/datum/nanite_program/triggered/comm/speech
|
||||
name = "Forced Speech"
|
||||
desc = "The nanites force the host to say a pre-programmed sentence when triggered."
|
||||
unique = FALSE
|
||||
@@ -122,10 +134,10 @@
|
||||
trigger_cooldown = 20
|
||||
rogue_types = list(/datum/nanite_program/brain_misfire, /datum/nanite_program/brain_decay)
|
||||
|
||||
extra_settings = list("Sentence")
|
||||
extra_settings = list("Sentence","Comm Code")
|
||||
var/sentence = ""
|
||||
|
||||
/datum/nanite_program/triggered/speech/set_extra_setting(user, setting)
|
||||
/datum/nanite_program/triggered/comm/speech/set_extra_setting(user, setting)
|
||||
if(setting == "Sentence")
|
||||
var/new_sentence = stripped_input(user, "Choose the sentence that the host will be forced to say.", "Sentence", sentence, MAX_MESSAGE_LEN)
|
||||
if(!new_sentence)
|
||||
@@ -133,23 +145,34 @@
|
||||
if(copytext(new_sentence, 1, 2) == "*") //emotes are abusable, like surrender
|
||||
return
|
||||
sentence = new_sentence
|
||||
if(setting == "Comm Code")
|
||||
var/new_code = input(user, "Set the communication code (1-9999) or set to 0 to disable external signals.", name, null) as null|num
|
||||
if(isnull(new_code))
|
||||
return
|
||||
comm_code = CLAMP(round(new_code, 1), 0, 9999)
|
||||
|
||||
/datum/nanite_program/triggered/speech/get_extra_setting(setting)
|
||||
/datum/nanite_program/triggered/comm/speech/get_extra_setting(setting)
|
||||
if(setting == "Sentence")
|
||||
return sentence
|
||||
if(setting == "Comm Code")
|
||||
return comm_code
|
||||
|
||||
/datum/nanite_program/triggered/speech/copy_extra_settings_to(datum/nanite_program/triggered/speech/target)
|
||||
/datum/nanite_program/triggered/comm/speech/copy_extra_settings_to(datum/nanite_program/triggered/comm/speech/target)
|
||||
target.sentence = sentence
|
||||
target.comm_code = comm_code
|
||||
|
||||
/datum/nanite_program/triggered/speech/trigger()
|
||||
/datum/nanite_program/triggered/comm/speech/trigger(comm_message)
|
||||
if(!..())
|
||||
return
|
||||
var/sent_message = comm_message
|
||||
if(!comm_message)
|
||||
sent_message = sentence
|
||||
if(host_mob.stat == DEAD)
|
||||
return
|
||||
to_chat(host_mob, "<span class='warning'>You feel compelled to speak...</span>")
|
||||
host_mob.say(sentence, forced = "nanite speech")
|
||||
host_mob.say(sent_message, forced = "nanite speech")
|
||||
|
||||
/datum/nanite_program/triggered/voice
|
||||
/datum/nanite_program/triggered/comm/voice
|
||||
name = "Skull Echo"
|
||||
desc = "The nanites echo a synthesized message inside the host's skull."
|
||||
unique = FALSE
|
||||
@@ -157,44 +180,62 @@
|
||||
trigger_cooldown = 20
|
||||
rogue_types = list(/datum/nanite_program/brain_misfire, /datum/nanite_program/brain_decay)
|
||||
|
||||
extra_settings = list("Message")
|
||||
extra_settings = list("Message","Comm Code")
|
||||
var/message = ""
|
||||
|
||||
/datum/nanite_program/triggered/voice/set_extra_setting(user, setting)
|
||||
/datum/nanite_program/triggered/comm/voice/set_extra_setting(user, setting)
|
||||
if(setting == "Message")
|
||||
var/new_message = stripped_input(user, "Choose the message sent to the host.", "Message", message, MAX_MESSAGE_LEN)
|
||||
if(!new_message)
|
||||
return
|
||||
message = new_message
|
||||
if(setting == "Comm Code")
|
||||
var/new_code = input(user, "Set the communication code (1-9999) or set to 0 to disable external signals.", name, null) as null|num
|
||||
if(isnull(new_code))
|
||||
return
|
||||
comm_code = CLAMP(round(new_code, 1), 0, 9999)
|
||||
|
||||
/datum/nanite_program/triggered/voice/get_extra_setting(setting)
|
||||
/datum/nanite_program/triggered/comm/voice/get_extra_setting(setting)
|
||||
if(setting == "Message")
|
||||
return message
|
||||
if(setting == "Comm Code")
|
||||
return comm_code
|
||||
|
||||
/datum/nanite_program/triggered/voice/copy_extra_settings_to(datum/nanite_program/triggered/voice/target)
|
||||
/datum/nanite_program/triggered/comm/voice/copy_extra_settings_to(datum/nanite_program/triggered/comm/voice/target)
|
||||
target.message = message
|
||||
target.comm_code = comm_code
|
||||
|
||||
/datum/nanite_program/triggered/voice/trigger()
|
||||
/datum/nanite_program/triggered/comm/voice/trigger(comm_message)
|
||||
if(!..())
|
||||
return
|
||||
var/sent_message = comm_message
|
||||
if(!comm_message)
|
||||
sent_message = message
|
||||
if(host_mob.stat == DEAD)
|
||||
return
|
||||
to_chat(host_mob, "<i>You hear a strange, robotic voice in your head...</i> \"<span class='robot'>[message]</span>\"")
|
||||
to_chat(host_mob, "<i>You hear a strange, robotic voice in your head...</i> \"<span class='robot'>[sent_message]</span>\"")
|
||||
|
||||
/datum/nanite_program/triggered/hallucination
|
||||
/datum/nanite_program/triggered/comm/hallucination
|
||||
name = "Hallucination"
|
||||
desc = "The nanites make the host hallucinate something when triggered."
|
||||
trigger_cost = 4
|
||||
trigger_cooldown = 80
|
||||
unique = FALSE
|
||||
rogue_types = list(/datum/nanite_program/brain_misfire)
|
||||
extra_settings = list("Hallucination Type")
|
||||
extra_settings = list("Hallucination Type", "Comm Code")
|
||||
var/hal_type
|
||||
var/hal_details
|
||||
|
||||
/datum/nanite_program/triggered/hallucination/trigger()
|
||||
/datum/nanite_program/triggered/comm/hallucination/trigger(comm_message)
|
||||
if(!..())
|
||||
return
|
||||
|
||||
if(comm_message && (hal_type != "Message")) //Triggered via comm remote, but not set to a message hallucination
|
||||
return
|
||||
var/sent_message = comm_message //Comm remotes can send custom hallucination messages for the chat hallucination
|
||||
if(!sent_message)
|
||||
sent_message = hal_details
|
||||
|
||||
if(!iscarbon(host_mob))
|
||||
return
|
||||
var/mob/living/carbon/C = host_mob
|
||||
@@ -203,7 +244,7 @@
|
||||
else
|
||||
switch(hal_type)
|
||||
if("Message")
|
||||
new /datum/hallucination/chat(C, TRUE, null, hal_details)
|
||||
new /datum/hallucination/chat(C, TRUE, null, sent_message)
|
||||
if("Battle")
|
||||
new /datum/hallucination/battle(C, TRUE, hal_details)
|
||||
if("Sound")
|
||||
@@ -223,7 +264,13 @@
|
||||
if("Plasma Flood")
|
||||
new /datum/hallucination/fake_flood(C, TRUE)
|
||||
|
||||
/datum/nanite_program/triggered/hallucination/set_extra_setting(user, setting)
|
||||
/datum/nanite_program/triggered/comm/hallucination/set_extra_setting(user, setting)
|
||||
if(setting == "Comm Code")
|
||||
var/new_code = input(user, "(Only for Message) Set the communication code (1-9999) or set to 0 to disable external signals.", name, null) as null|num
|
||||
if(isnull(new_code))
|
||||
return
|
||||
comm_code = CLAMP(round(new_code, 1), 0, 9999)
|
||||
|
||||
if(setting == "Hallucination Type")
|
||||
var/list/possible_hallucinations = list("Random","Message","Battle","Sound","Weird Sound","Station Message","Health","Alert","Fire","Shock","Plasma Flood")
|
||||
var/hal_type_choice = input("Choose the hallucination type", name) as null|anything in possible_hallucinations
|
||||
@@ -299,13 +346,76 @@
|
||||
if("Plasma Flood")
|
||||
hal_type = "Plasma Flood"
|
||||
|
||||
/datum/nanite_program/triggered/hallucination/get_extra_setting(setting)
|
||||
/datum/nanite_program/triggered/comm/hallucination/get_extra_setting(setting)
|
||||
if(setting == "Hallucination Type")
|
||||
if(!hal_type)
|
||||
return "Random"
|
||||
else
|
||||
return hal_type
|
||||
if(setting == "Comm Code")
|
||||
return comm_code
|
||||
|
||||
/datum/nanite_program/triggered/hallucination/copy_extra_settings_to(datum/nanite_program/triggered/hallucination/target)
|
||||
/datum/nanite_program/triggered/comm/hallucination/copy_extra_settings_to(datum/nanite_program/triggered/comm/hallucination/target)
|
||||
target.hal_type = hal_type
|
||||
target.hal_details = hal_details
|
||||
target.hal_details = hal_details
|
||||
target.comm_code = comm_code
|
||||
|
||||
/datum/nanite_program/good_mood
|
||||
name = "Happiness Enhancer"
|
||||
desc = "The nanites synthesize serotonin inside the host's brain, creating an artificial sense of happiness."
|
||||
use_rate = 0.1
|
||||
rogue_types = list(/datum/nanite_program/brain_decay)
|
||||
extra_settings = list("Mood Message")
|
||||
var/message = "HAPPINESS ENHANCEMENT"
|
||||
|
||||
/datum/nanite_program/good_mood/set_extra_setting(user, setting)
|
||||
if(setting == "Mood Message")
|
||||
var/new_message = stripped_input(user, "Choose the message visible on the mood effect.", "Message", message, MAX_NAME_LEN)
|
||||
if(!new_message)
|
||||
return
|
||||
message = new_message
|
||||
|
||||
/datum/nanite_program/good_mood/get_extra_setting(setting)
|
||||
if(setting == "Mood Message")
|
||||
return message
|
||||
|
||||
/datum/nanite_program/good_mood/copy_extra_settings_to(datum/nanite_program/good_mood/target)
|
||||
target.message = message
|
||||
|
||||
/datum/nanite_program/good_mood/enable_passive_effect()
|
||||
. = ..()
|
||||
SEND_SIGNAL(host_mob, COMSIG_ADD_MOOD_EVENT, "nanite_happy", /datum/mood_event/nanite_happiness, message)
|
||||
|
||||
/datum/nanite_program/good_mood/disable_passive_effect()
|
||||
. = ..()
|
||||
SEND_SIGNAL(host_mob, COMSIG_CLEAR_MOOD_EVENT, "nanite_happy")
|
||||
|
||||
/datum/nanite_program/bad_mood
|
||||
name = "Happiness Suppressor"
|
||||
desc = "The nanites suppress the production of serotonin inside the host's brain, creating an artificial state of depression."
|
||||
use_rate = 0.1
|
||||
rogue_types = list(/datum/nanite_program/brain_decay)
|
||||
extra_settings = list("Mood Message")
|
||||
var/message = "HAPPINESS SUPPRESSION"
|
||||
|
||||
/datum/nanite_program/bad_mood/set_extra_setting(user, setting)
|
||||
if(setting == "Mood Message")
|
||||
var/new_message = stripped_input(user, "Choose the message visible on the mood effect.", "Message", message, MAX_NAME_LEN)
|
||||
if(!new_message)
|
||||
return
|
||||
message = new_message
|
||||
|
||||
/datum/nanite_program/bad_mood/get_extra_setting(setting)
|
||||
if(setting == "Mood Message")
|
||||
return message
|
||||
|
||||
/datum/nanite_program/bad_mood/copy_extra_settings_to(datum/nanite_program/bad_mood/target)
|
||||
target.message = message
|
||||
|
||||
/datum/nanite_program/bad_mood/enable_passive_effect()
|
||||
. = ..()
|
||||
SEND_SIGNAL(host_mob, COMSIG_ADD_MOOD_EVENT, "nanite_sadness", /datum/mood_event/nanite_sadness, message)
|
||||
|
||||
/datum/nanite_program/bad_mood/disable_passive_effect()
|
||||
. = ..()
|
||||
SEND_SIGNAL(host_mob, COMSIG_CLEAR_MOOD_EVENT, "nanite_sadness")
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
rogue_types = list(/datum/nanite_program/toxic)
|
||||
extra_settings = list("Program Overwrite","Cloud Overwrite")
|
||||
|
||||
var/pulse_cooldown = 0
|
||||
var/sync_programs = TRUE
|
||||
var/sync_overwrite = FALSE
|
||||
var/overwrite_cloud = FALSE
|
||||
@@ -67,12 +68,16 @@
|
||||
target.sync_overwrite = sync_overwrite
|
||||
|
||||
/datum/nanite_program/viral/active_effect()
|
||||
if(world.time < pulse_cooldown)
|
||||
return
|
||||
for(var/mob/M in orange(host_mob, 5))
|
||||
if(prob(5))
|
||||
if(sync_programs)
|
||||
SEND_SIGNAL(M, COMSIG_NANITE_SYNC, nanites, sync_overwrite)
|
||||
if(overwrite_cloud)
|
||||
SEND_SIGNAL(M, COMSIG_NANITE_SET_CLOUD, set_cloud)
|
||||
if(SEND_SIGNAL(M, COMSIG_NANITE_IS_STEALTHY))
|
||||
continue
|
||||
if(sync_programs)
|
||||
SEND_SIGNAL(M, COMSIG_NANITE_SYNC, nanites, sync_overwrite)
|
||||
if(overwrite_cloud)
|
||||
SEND_SIGNAL(M, COMSIG_NANITE_SET_CLOUD, set_cloud)
|
||||
pulse_cooldown = world.time + 75
|
||||
|
||||
/datum/nanite_program/monitoring
|
||||
name = "Monitoring"
|
||||
@@ -197,6 +202,15 @@
|
||||
return
|
||||
SEND_SIGNAL(host_mob, COMSIG_NANITE_SIGNAL, code, source)
|
||||
|
||||
/datum/nanite_program/relay/proc/relay_comm_signal(comm_code, relay_code, comm_message)
|
||||
if(!activated)
|
||||
return
|
||||
if(!host_mob)
|
||||
return
|
||||
if(relay_code != relay_channel)
|
||||
return
|
||||
SEND_SIGNAL(host_mob, COMSIG_NANITE_COMM_SIGNAL, comm_code, comm_message)
|
||||
|
||||
/datum/nanite_program/metabolic_synthesis
|
||||
name = "Metabolic Synthesis"
|
||||
desc = "The nanites use the metabolic cycle of the host to speed up their replication rate, using their extra nutrition as fuel."
|
||||
@@ -248,26 +262,27 @@
|
||||
resulting in an extremely infective strain of nanites."
|
||||
use_rate = 1.50
|
||||
rogue_types = list(/datum/nanite_program/aggressive_replication, /datum/nanite_program/necrotic)
|
||||
var/spread_cooldown = 0
|
||||
|
||||
/datum/nanite_program/spreading/active_effect()
|
||||
if(prob(10))
|
||||
var/list/mob/living/target_hosts = list()
|
||||
var/turf/T = get_turf(host_mob)
|
||||
for(var/mob/living/L in range(5, host_mob))
|
||||
if(!(MOB_ORGANIC in L.mob_biotypes) && !(MOB_UNDEAD in L.mob_biotypes))
|
||||
continue
|
||||
if(!disease_air_spread_walk(T, get_turf(L)))
|
||||
continue
|
||||
target_hosts += L
|
||||
target_hosts -= host_mob
|
||||
if(!target_hosts.len)
|
||||
return
|
||||
var/mob/living/infectee = pick(target_hosts)
|
||||
if(prob(100 - (infectee.get_permeability_protection() * 100)))
|
||||
//this will potentially take over existing nanites!
|
||||
infectee.AddComponent(/datum/component/nanites, 10)
|
||||
SEND_SIGNAL(infectee, COMSIG_NANITE_SYNC, nanites)
|
||||
infectee.investigate_log("[key_name(infectee)] was infected by spreading nanites by [key_name(host_mob)]", INVESTIGATE_NANITES)
|
||||
if(spread_cooldown < world.time)
|
||||
return
|
||||
spread_cooldown = world.time + 50
|
||||
var/list/mob/living/target_hosts = list()
|
||||
for(var/mob/living/L in oview(5, host_mob))
|
||||
if(!prob(25))
|
||||
continue
|
||||
if(!(L.mob_biotypes & (MOB_ORGANIC|MOB_UNDEAD)))
|
||||
continue
|
||||
target_hosts += L
|
||||
if(!target_hosts.len)
|
||||
return
|
||||
var/mob/living/infectee = pick(target_hosts)
|
||||
if(prob(100 - (infectee.get_permeability_protection() * 100)))
|
||||
//this will potentially take over existing nanites!
|
||||
infectee.AddComponent(/datum/component/nanites, 10)
|
||||
SEND_SIGNAL(infectee, COMSIG_NANITE_SYNC, nanites)
|
||||
infectee.investigate_log("was infected by spreading nanites by [key_name(host_mob)] at [AREACOORD(infectee)].", INVESTIGATE_NANITES)
|
||||
|
||||
/datum/nanite_program/mitosis
|
||||
name = "Mitosis"
|
||||
|
||||
@@ -160,40 +160,55 @@
|
||||
/datum/nanite_program/cryo/active_effect()
|
||||
host_mob.adjust_bodytemperature(-rand(15,25), 50)
|
||||
|
||||
/datum/nanite_program/mind_control
|
||||
/datum/nanite_program/triggered/comm/mind_control
|
||||
name = "Mind Control"
|
||||
desc = "The nanites imprint an absolute directive onto the host's brain while they're active."
|
||||
use_rate = 3
|
||||
desc = "The nanites imprint an absolute directive onto the host's brain for one minute when triggered."
|
||||
trigger_cost = 30
|
||||
trigger_cooldown = 1800
|
||||
rogue_types = list(/datum/nanite_program/brain_decay, /datum/nanite_program/brain_misfire)
|
||||
|
||||
extra_settings = list("Directive")
|
||||
var/cooldown = 0 //avoids spam when nanites are running low
|
||||
extra_settings = list("Directive","Comm Code")
|
||||
var/directive = "..."
|
||||
|
||||
/datum/nanite_program/mind_control/set_extra_setting(user, setting)
|
||||
/datum/nanite_program/triggered/comm/mind_control/set_extra_setting(user, setting)
|
||||
if(setting == "Directive")
|
||||
var/new_directive = stripped_input(user, "Choose the directive to imprint with mind control.", "Directive", directive, MAX_MESSAGE_LEN)
|
||||
if(!new_directive)
|
||||
return
|
||||
directive = new_directive
|
||||
if(setting == "Comm Code")
|
||||
var/new_code = input(user, "Set the communication code (1-9999) or set to 0 to disable external signals.", name, null) as null|num
|
||||
if(isnull(new_code))
|
||||
return
|
||||
comm_code = CLAMP(round(new_code, 1), 0, 9999)
|
||||
|
||||
/datum/nanite_program/mind_control/get_extra_setting(setting)
|
||||
/datum/nanite_program/triggered/comm/mind_control/get_extra_setting(setting)
|
||||
if(setting == "Directive")
|
||||
return directive
|
||||
if(setting == "Comm Code")
|
||||
return comm_code
|
||||
|
||||
/datum/nanite_program/mind_control/copy_extra_settings_to(datum/nanite_program/mind_control/target)
|
||||
/datum/nanite_program/triggered/comm/mind_control/copy_extra_settings_to(datum/nanite_program/triggered/comm/mind_control/target)
|
||||
target.directive = directive
|
||||
target.comm_code = comm_code
|
||||
|
||||
/datum/nanite_program/mind_control/enable_passive_effect()
|
||||
if(world.time < cooldown)
|
||||
/datum/nanite_program/triggered/comm/mind_control/trigger(comm_message)
|
||||
if(!..())
|
||||
return
|
||||
. = ..()
|
||||
brainwash(host_mob, directive)
|
||||
if(host_mob.stat == DEAD)
|
||||
return
|
||||
var/sent_directive = comm_message
|
||||
if(!comm_message)
|
||||
sent_directive = directive
|
||||
brainwash(host_mob, sent_directive)
|
||||
log_game("A mind control nanite program brainwashed [key_name(host_mob)] with the objective '[directive]'.")
|
||||
addtimer(CALLBACK(src, .proc/end_brainwashing), 600)
|
||||
|
||||
/datum/nanite_program/mind_control/disable_passive_effect()
|
||||
. = ..()
|
||||
/datum/nanite_program/triggered/comm/mind_control/proc/end_brainwashing()
|
||||
if(host_mob.mind && host_mob.mind.has_antag_datum(/datum/antagonist/brainwashed))
|
||||
host_mob.mind.remove_antag_datum(/datum/antagonist/brainwashed)
|
||||
log_game("[key_name(host_mob)] is no longer brainwashed by nanites.")
|
||||
cooldown = world.time + 450
|
||||
|
||||
/datum/nanite_program/triggered/comm/mind_control/disable_passive_effect()
|
||||
. = ..()
|
||||
end_brainwashing()
|
||||
|
||||
@@ -168,6 +168,109 @@
|
||||
. = TRUE
|
||||
|
||||
|
||||
/obj/item/nanite_remote/comm
|
||||
name = "nanite communication remote"
|
||||
desc = "A device that can send text messages to specific programs."
|
||||
icon_state = "nanite_comm_remote"
|
||||
var/comm_code = 0
|
||||
var/comm_message = ""
|
||||
|
||||
/obj/item/nanite_remote/comm/afterattack(atom/target, mob/user, etc)
|
||||
switch(mode)
|
||||
if(REMOTE_MODE_OFF)
|
||||
return
|
||||
if(REMOTE_MODE_SELF)
|
||||
to_chat(user, "<span class='notice'>You activate [src], signaling the nanites in your bloodstream.<span>")
|
||||
signal_mob(user, comm_code, comm_message)
|
||||
if(REMOTE_MODE_TARGET)
|
||||
if(isliving(target) && (get_dist(target, get_turf(src)) <= 7))
|
||||
to_chat(user, "<span class='notice'>You activate [src], signaling the nanites inside [target].<span>")
|
||||
signal_mob(target, code, comm_message, key_name(user))
|
||||
if(REMOTE_MODE_AOE)
|
||||
to_chat(user, "<span class='notice'>You activate [src], signaling the nanites inside every host around you.<span>")
|
||||
for(var/mob/living/L in view(user, 7))
|
||||
signal_mob(L, code, comm_message, key_name(user))
|
||||
if(REMOTE_MODE_RELAY)
|
||||
to_chat(user, "<span class='notice'>You activate [src], signaling all connected relay nanites.<span>")
|
||||
signal_relay(code, relay_code, comm_message, key_name(user))
|
||||
|
||||
/obj/item/nanite_remote/comm/signal_mob(mob/living/M, code, source)
|
||||
SEND_SIGNAL(M, COMSIG_NANITE_COMM_SIGNAL, comm_code, comm_message)
|
||||
|
||||
/obj/item/nanite_remote/comm/signal_relay(code, relay_code, source)
|
||||
for(var/X in SSnanites.nanite_relays)
|
||||
var/datum/nanite_program/relay/N = X
|
||||
N.relay_comm_signal(comm_code, relay_code, comm_message)
|
||||
|
||||
/obj/item/nanite_remote/comm/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.hands_state)
|
||||
SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "nanite_comm_remote", name, 420, 800, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/item/nanite_remote/comm/ui_data()
|
||||
var/list/data = list()
|
||||
data["comm_code"] = comm_code
|
||||
data["relay_code"] = relay_code
|
||||
data["comm_message"] = comm_message
|
||||
data["mode"] = mode
|
||||
data["locked"] = locked
|
||||
data["saved_settings"] = saved_settings
|
||||
|
||||
return data
|
||||
|
||||
/obj/item/nanite_remote/comm/ui_act(action, params)
|
||||
if(..())
|
||||
return
|
||||
switch(action)
|
||||
if("set_comm_code")
|
||||
if(locked)
|
||||
return
|
||||
var/new_code = input("Set comm code (0000-9999):", name, code) as null|num
|
||||
if(!isnull(new_code))
|
||||
new_code = CLAMP(round(new_code, 1),0,9999)
|
||||
comm_code = new_code
|
||||
. = TRUE
|
||||
if("set_message")
|
||||
if(locked)
|
||||
return
|
||||
var/new_message = stripped_input(usr, "Set the message (Max 300 characters):", "Set Message", null , 300)
|
||||
if(!new_message)
|
||||
return
|
||||
comm_message = new_message
|
||||
. = TRUE
|
||||
if("comm_save")
|
||||
if(locked)
|
||||
return
|
||||
var/code_name = stripped_input(usr, "Set the setting name", "Set Name", null , 15)
|
||||
if(!code_name)
|
||||
return
|
||||
var/new_save = list()
|
||||
new_save["id"] = last_id + 1
|
||||
last_id++
|
||||
new_save["name"] = code_name
|
||||
new_save["code"] = comm_code
|
||||
new_save["mode"] = mode
|
||||
new_save["relay_code"] = relay_code
|
||||
new_save["message"] = comm_message
|
||||
|
||||
saved_settings += list(new_save)
|
||||
. = TRUE
|
||||
if("comm_load")
|
||||
var/code_id = params["save_id"]
|
||||
var/list/setting
|
||||
for(var/list/X in saved_settings)
|
||||
if(X["id"] == text2num(code_id))
|
||||
setting = X
|
||||
break
|
||||
if(setting)
|
||||
comm_code = setting["code"]
|
||||
mode = setting["mode"]
|
||||
relay_code = setting["relay_code"]
|
||||
comm_message = setting["message"]
|
||||
. = TRUE
|
||||
|
||||
|
||||
#undef REMOTE_MODE_OFF
|
||||
#undef REMOTE_MODE_SELF
|
||||
#undef REMOTE_MODE_TARGET
|
||||
|
||||
@@ -142,4 +142,10 @@
|
||||
program_type = /datum/nanite_program/researchplus
|
||||
|
||||
/obj/item/disk/nanite_program/reduced_diagnostics
|
||||
program_type = /datum/nanite_program/reduced_diagnostics
|
||||
program_type = /datum/nanite_program/reduced_diagnostics
|
||||
|
||||
/obj/item/disk/nanite_program/good_mood
|
||||
program_type = /datum/nanite_program/good_mood
|
||||
|
||||
/obj/item/disk/nanite_program/bad_mood
|
||||
program_type = /datum/nanite_program/bad_mood
|
||||
|
||||
@@ -976,7 +976,7 @@
|
||||
display_name = "Basic Nanite Programming"
|
||||
description = "The basics of nanite construction and programming."
|
||||
prereq_ids = list("datatheory","robotics")
|
||||
design_ids = list("nanite_disk","nanite_remote","nanite_scanner",\
|
||||
design_ids = list("nanite_disk","nanite_remote","nanite_comm_remote","nanite_scanner",\
|
||||
"nanite_chamber","public_nanite_chamber","nanite_chamber_control","nanite_programmer","nanite_program_hub","nanite_cloud_control",\
|
||||
"relay_nanites", "monitoring_nanites", "access_nanites", "repairing_nanites","sensor_nanite_volume", "repeater_nanites", "relay_repeater_nanites","red_diag_nanites")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
@@ -1015,7 +1015,7 @@
|
||||
display_name = "Neural Nanite Programming"
|
||||
description = "Nanite programs affecting nerves and brain matter."
|
||||
prereq_ids = list("nanite_bio")
|
||||
design_ids = list("nervous_nanites", "brainheal_nanites", "paralyzing_nanites", "stun_nanites", "selfscan_nanites")
|
||||
design_ids = list("nervous_nanites", "brainheal_nanites", "paralyzing_nanites", "stun_nanites", "selfscan_nanites","good_mood_nanites","bad_mood_nanites")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
|
||||
export_price = 5000
|
||||
|
||||
|
||||
Reference in New Issue
Block a user