merge conflict and job/dept discounts support.

This commit is contained in:
Ghommie
2020-05-03 02:11:05 +02:00
308 changed files with 6846 additions and 9140 deletions
+3
View File
@@ -36,6 +36,9 @@ other types of metals and chemistry for reagents).
var/dangerous_construction = FALSE //notify and log for admin investigations if this is printed.
var/departmental_flags = ALL //bitflags for deplathes.
var/list/datum/techweb_node/unlocked_by = list()
///minimum and security levels the design can be printed on. Currently only available for rnd production machinery and mechfab.
var/min_security_level = SEC_LEVEL_GREEN
var/max_security_level = SEC_LEVEL_DELTA
var/research_icon //Replaces the item icon in the research console
var/research_icon_state
var/icon_cache
@@ -1,5 +1,5 @@
/datum/design/autoylathe
build_type = AUTOYLATHE
build_type = TOYLATHE
/datum/design/autoylathe/mech
category = list("initial", "Figurines")
@@ -558,7 +558,7 @@
/datum/design/foam_x9
name = "Foam Force X9 Rifle"
id = "foam_x9"
build_type = AUTOYLATHE
build_type = TOYLATHE
materials = list(/datum/material/plastic = 4000, /datum/material/iron = 500)
build_path = /obj/item/gun/ballistic/automatic/x9/toy
category = list("initial", "Rifles")
@@ -566,7 +566,7 @@
/datum/design/foam_dart
name = "Box of Foam Darts"
id = "foam_dart"
build_type = AUTOYLATHE
build_type = TOYLATHE
materials = list(/datum/material/plastic = 500, /datum/material/iron = 100)
build_path = /obj/item/ammo_box/foambox
category = list("initial", "Misc")
@@ -574,7 +574,7 @@
/datum/design/foam_magpistol
name = "Foam Force Magpistol"
id = "magfoam_launcher"
build_type = AUTOYLATHE
build_type = TOYLATHE
materials = list(/datum/material/plastic = 2000, /datum/material/iron = 250)
build_path = /obj/item/gun/ballistic/shotgun/toy/mag
category = list("initial", "Pistols")
@@ -582,7 +582,7 @@
/datum/design/foam_magrifle
name = "Foam Force MagRifle"
id = "foam_magrifle"
build_type = AUTOYLATHE
build_type = TOYLATHE
materials = list(/datum/material/plastic = 4000, /datum/material/iron = 500)
build_path = /obj/item/gun/ballistic/automatic/toy/magrifle
category = list("initial", "Rifles")
@@ -590,7 +590,7 @@
/datum/design/foam_hyperburst
name = "MagTag Hyper Rifle"
id = "foam_hyperburst"
build_type = AUTOYLATHE
build_type = TOYLATHE
materials = list(/datum/material/plastic = 4000, /datum/material/iron = 2000, /datum/material/glass = 1000)
build_path = /obj/item/gun/energy/laser/practice/hyperburst
category = list("initial", "Rifles")
@@ -598,7 +598,7 @@
/datum/design/foam_sp
name = "Foam Force Stealth Pistol"
id = "foam_sp"
build_type = AUTOYLATHE
build_type = TOYLATHE
materials = list(/datum/material/plastic = 2000, /datum/material/iron = 1000)
build_path = /obj/item/gun/ballistic/automatic/toy/pistol/stealth
category = list("initial", "Pistols")
@@ -606,7 +606,7 @@
/datum/design/toyray
name = "RayTag Gun"
id = "toyray"
build_type = AUTOYLATHE
build_type = TOYLATHE
materials = list(/datum/material/plastic = 2000, /datum/material/iron = 1000, /datum/material/glass = 1000)
build_path = /obj/item/gun/energy/laser/practice/raygun
category = list("initial", "Pistols")
@@ -614,7 +614,7 @@
/datum/design/am4c
name = "Foam Force AM4-C Rifle"
id = "foam_am4c"
build_type = AUTOYLATHE
build_type = TOYLATHE
materials = list(/datum/material/plastic = 4000, /datum/material/iron = 500)
build_path = /obj/item/gun/ballistic/automatic/AM4C
category = list("initial", "Rifles")
@@ -622,7 +622,7 @@
/datum/design/foam_f3
name = "Replica F3 Justicar"
id = "foam_f3"
build_type = AUTOYLATHE
build_type = TOYLATHE
materials = list(/datum/material/plastic = 2000, /datum/material/iron = 250)
build_path = /obj/item/toy/gun/justicar
category = list("initial", "Pistols")
@@ -630,7 +630,7 @@
/datum/design/toy_blaster
name = "pump-action plastic blaster"
id = "toy_blaster"
build_type = AUTOYLATHE
build_type = TOYLATHE
materials = list(/datum/material/plastic = 2000, /datum/material/iron = 750, /datum/material/glass = 1000)
build_path = /obj/item/gun/energy/pumpaction/toy
category = list("initial", "Rifles")
@@ -638,7 +638,7 @@
/datum/design/capammo
name = "Box of Caps"
id = "capammo"
build_type = AUTOYLATHE
build_type = TOYLATHE
materials = list(/datum/material/iron = 10, /datum/material/glass = 10)
build_path = /obj/item/toy/ammo/gun
category = list("initial", "Misc")
@@ -646,7 +646,7 @@
/datum/design/foam_smg
name = "Foam Force SMG"
id = "foam_smg"
build_type = AUTOYLATHE
build_type = TOYLATHE
materials = list(/datum/material/plastic = 2000, /datum/material/iron = 250)
build_path = /obj/item/gun/ballistic/automatic/toy/unrestricted
category = list("initial", "Pistols")
@@ -654,7 +654,7 @@
/datum/design/foam_pistol
name = "Foam Force Pistol"
id = "foam_pistol"
build_type = AUTOYLATHE
build_type = TOYLATHE
materials = list(/datum/material/plastic = 2000, /datum/material/iron = 250)
build_path = /obj/item/gun/ballistic/automatic/toy/pistol/unrestricted
category = list("initial", "Pistols")
@@ -662,7 +662,7 @@
/datum/design/foam_shotgun
name = "Foam Force Shotgun"
id = "foam_shotgun"
build_type = AUTOYLATHE
build_type = TOYLATHE
materials = list(/datum/material/plastic = 4000, /datum/material/iron = 500)
build_path = /obj/item/gun/ballistic/shotgun/toy/unrestricted
category = list("initial", "Rifles")
@@ -670,7 +670,7 @@
/datum/design/foam_dartred
name = "Box of Lastag Red Foam Darts"
id = "redfoam_dart"
build_type = AUTOYLATHE
build_type = TOYLATHE
materials = list(/datum/material/plastic = 500, /datum/material/iron = 100)
build_path = /obj/item/ammo_box/foambox/tag/red
category = list("initial", "Misc")
@@ -678,7 +678,7 @@
/datum/design/foam_dartblue
name = "Box of Lastag Blue Foam Darts"
id = "bluefoam_dart"
build_type = AUTOYLATHE
build_type = TOYLATHE
materials = list(/datum/material/plastic = 500, /datum/material/iron = 100)
build_path = /obj/item/ammo_box/foambox/tag/blue
category = list("initial", "Misc")
@@ -686,7 +686,7 @@
/datum/design/foam_bow
name = "Foam Force Crossbow"
id = "foam_bow"
build_type = AUTOYLATHE
build_type = TOYLATHE
materials = list(/datum/material/plastic = 2000, /datum/material/iron = 250)
build_path = /obj/item/gun/ballistic/shotgun/toy/crossbow
category = list("initial", "Pistols")
@@ -694,7 +694,7 @@
/datum/design/foam_c20
name = "Donksoft C20R"
id = "foam_c20"
build_type = AUTOYLATHE
build_type = TOYLATHE
materials = list(/datum/material/plastic = 4000, /datum/material/iron = 500)
build_path = /obj/item/gun/ballistic/automatic/c20r/toy/unrestricted
category = list("hacked", "Rifles")
@@ -702,7 +702,7 @@
/datum/design/foam_l6
name = "Donksoft LMG"
id = "foam_LMG"
build_type = AUTOYLATHE
build_type = TOYLATHE
materials = list(/datum/material/plastic = 4000, /datum/material/iron = 500)
build_path = /obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted
category = list("hacked", "Rifles")
@@ -2,6 +2,9 @@
///////Biogenerator Designs ///////
///////////////////////////////////
//Please be wary to not add inorganic items to the results such as generic glass bottles and metal.
//as they kind of defeat the design of this feature.
/datum/design/milk
name = "10u Milk"
id = "milk"
@@ -18,22 +21,6 @@
make_reagents = list(/datum/reagent/consumable/cream = 10)
category = list("initial","Food")
/datum/design/milk_carton
name = "Milk Carton"
id = "milk_carton"
build_type = BIOGENERATOR
materials = list(/datum/material/biomass = 100)
build_path = /obj/item/reagent_containers/food/condiment/milk
category = list("initial","Food")
/datum/design/cream_carton
name = "Cream Carton"
id = "cream_carton"
build_type = BIOGENERATOR
materials = list(/datum/material/biomass = 300)
build_path = /obj/item/reagent_containers/food/drinks/bottle/cream
category = list("initial","Food")
/datum/design/black_pepper
name = "10u Black Pepper"
id = "black_pepper"
@@ -42,15 +29,6 @@
make_reagents = list(/datum/reagent/consumable/blackpepper = 10)
category = list("initial","Food")
/datum/design/pepper_mill
name = "Pepper Mill"
id = "pepper_mill"
build_type = BIOGENERATOR
materials = list(/datum/material/biomass = 50)
build_path = /obj/item/reagent_containers/food/condiment/peppermill
make_reagents = list()
category = list("initial","Food")
/datum/design/enzyme
name = "10u Universal Enzyme"
id = "enzyme"
@@ -59,14 +37,6 @@
make_reagents = list(/datum/reagent/consumable/enzyme = 10)
category = list("initial","Food")
/datum/design/flour_sack
name = "Flour Sack"
id = "flour_sack"
build_type = BIOGENERATOR
materials = list(/datum/material/biomass = 150)
build_path = /obj/item/reagent_containers/food/condiment/flour
category = list("initial","Food")
/datum/design/monkey_cube
name = "Monkey Cube"
id = "mcube"
@@ -84,43 +54,43 @@
category = list("initial", "Food")
/datum/design/ez_nut
name = "E-Z Nutrient"
name = "10u E-Z Nutrient"
id = "ez_nut"
build_type = BIOGENERATOR
materials = list(/datum/material/biomass = 10)
build_path = /obj/item/reagent_containers/glass/bottle/nutrient/ez
materials = list(/datum/material/biomass = 2)
make_reagents = list(/datum/reagent/plantnutriment/eznutriment = 10)
category = list("initial","Botany Chemicals")
/datum/design/l4z_nut
name = "Left 4 Zed"
name = "10u Left 4 Zed"
id = "l4z_nut"
build_type = BIOGENERATOR
materials = list(/datum/material/biomass = 20)
build_path = /obj/item/reagent_containers/glass/bottle/nutrient/l4z
materials = list(/datum/material/biomass = 4)
make_reagents = list(/datum/reagent/plantnutriment/left4zednutriment = 10)
category = list("initial","Botany Chemicals")
/datum/design/rh_nut
name = "Robust Harvest"
name = "10u Robust Harvest"
id = "rh_nut"
build_type = BIOGENERATOR
materials = list(/datum/material/biomass = 25)
build_path = /obj/item/reagent_containers/glass/bottle/nutrient/rh
materials = list(/datum/material/biomass = 5)
make_reagents = list(/datum/reagent/plantnutriment/robustharvestnutriment = 10)
category = list("initial","Botany Chemicals")
/datum/design/weed_killer
name = "Weed Killer"
id = "weed_killer"
build_type = BIOGENERATOR
materials = list(/datum/material/biomass = 50)
build_path = /obj/item/reagent_containers/glass/bottle/killer/weedkiller
materials = list(/datum/material/biomass = 10)
make_reagents = list(/datum/reagent/toxin/plantbgone/weedkiller = 10)
category = list("initial","Botany Chemicals")
/datum/design/pest_spray
name = "Pest Killer"
id = "pest_spray"
build_type = BIOGENERATOR
materials = list(/datum/material/biomass = 50)
build_path = /obj/item/reagent_containers/glass/bottle/killer/pestkiller
materials = list(/datum/material/biomass = 10)
make_reagents = list(/datum/reagent/toxin/pestkiller = 10)
category = list("initial","Botany Chemicals")
/datum/design/ammonia
@@ -139,13 +109,13 @@
make_reagents = list(/datum/reagent/saltpetre = 10)
category = list("initial","Botany Chemicals")
/datum/design/botany_bottle
name = "Empty Bottle"
id = "botany_bottle"
/datum/design/empty_carton
name = "Small Empty Carton Box"
id = "empty_carton"
build_type = BIOGENERATOR
materials = list(/datum/material/biomass = 5)
build_path = /obj/item/reagent_containers/glass/bottle/nutrient/empty
category = list("initial", "Botany Chemicals")
materials = list(/datum/material/biomass = 15)
build_path = /obj/item/reagent_containers/food/drinks/bottle/bio_carton
category = list("initial", "Organic Materials")
/datum/design/cloth
name = "Roll of Cloth"
@@ -119,6 +119,6 @@
name = "Machine Design (Autoylathe)"
desc = "The circuit board for an autoylathe."
id = "autoylathe"
build_path = /obj/item/circuitboard/machine/autoylathe
build_path = /obj/item/circuitboard/machine/autolathe/toy
departmental_flags = DEPARTMENTAL_FLAG_ALL
category = list("Misc. Machinery")
@@ -529,7 +529,6 @@
////////////////////NANITE PROTOCOLS//////////////////////////////////////
//Note about the category name: The UI cuts the last 8 characters from the category name to remove the " Nanites" in the other categories
//Because of this, Protocols was getting cut down to "P", so i had to add some padding
/*
/datum/design/nanites/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."
@@ -557,4 +556,10 @@
id = "offline_nanites"
program_type = /datum/nanite_program/protocol/offline
category = list("Protocols_Nanites")
*/
/datum/design/nanites/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."
id = "synergy_nanites"
program_type = /datum/nanite_program/protocol/synergy
category = list("Protocols_Nanites")
+11 -2
View File
@@ -101,7 +101,7 @@ Note: Must be placed within 3 tiles of the R&D Console
if(!istype(loaded_item) || !istype(linked_console))
return FALSE
if (id && id != RESEARCH_MATERIAL_RECLAMATION_ID)
if (id && id != RESEARCH_MATERIAL_RECLAMATION_ID && id != RESEARCH_DEEP_SCAN_ID)
var/datum/techweb_node/TN = SSresearch.techweb_node_by_id(id)
if(!istype(TN))
return FALSE
@@ -125,7 +125,7 @@ Note: Must be placed within 3 tiles of the R&D Console
if(destroy_item(loaded_item))
linked_console.stored_research.boost_with_path(SSresearch.techweb_node_by_id(TN.id), dpath)
else
else if(id == RESEARCH_MATERIAL_RECLAMATION_ID)
var/list/point_value = techweb_item_point_check(loaded_item)
if(linked_console.stored_research.deconstructed_items[loaded_item.type])
point_value = list()
@@ -143,6 +143,15 @@ Note: Must be placed within 3 tiles of the R&D Console
if(destroy_item(loaded_item))
linked_console.stored_research.add_point_list(point_value)
linked_console.stored_research.deconstructed_items[loaded_type] = point_value
else if(id == RESEARCH_DEEP_SCAN_ID)
var/list/return_list = list()
. = SEND_SIGNAL(loaded_item, COMSIG_ITEM_DECONSTRUCTOR_DEEPSCAN, src, user, return_list)
flick("d_analyzer_process", src)
if(. & COMPONENT_DEEPSCAN_UNCOVERED_INFORMATION)
say("New information uncovered from item deep scan[length(return_list)? ": [english_list(return_list)]" : ""].")
else
say("Item deep scan uncovered no new information.")
return TRUE
/obj/machinery/rnd/destructive_analyzer/proc/unload_item()
+22 -3
View File
@@ -3,6 +3,7 @@
desc = "Makes researched and prototype items with materials and energy."
layer = BELOW_OBJ_LAYER
var/consoleless_interface = TRUE //Whether it can be used without a console.
var/offstation_security_levels = TRUE
var/efficiency_coeff = 1 //Materials needed / coeff = actual.
var/list/categories = list()
var/datum/component/remote_materials/materials
@@ -98,6 +99,7 @@
var/obj/item/I = O
I.material_flags |= MATERIAL_NO_EFFECTS //Find a better way to do this.
I.set_custom_materials(matlist.Copy())
I.rnd_crafted(src)
SSblackbox.record_feedback("nested tally", "item_printed", amount, list("[type]", "[path]"))
investigate_log("[key_name(user)] built [amount] of [path] at [src]([type]).", INVESTIGATE_RESEARCH)
@@ -134,6 +136,12 @@
if(D.build_type && !(D.build_type & allowed_buildtypes))
say("This machine does not have the necessary manipulation systems for this design. Please contact Nanotrasen Support!")
return FALSE
if(!(obj_flags & EMAGGED) && (offstation_security_levels || is_station_level(z)))
if(GLOB.security_level < D.min_security_level)
say("Minimum security alert level required to print this design not met, please contact the command staff.")
return FALSE
if(GLOB.security_level > D.max_security_level)
say("Exceeded maximum security alert level required to print this design, please contact the command staff.")
if(!materials.mat_container)
say("No connection to material storage, please contact the quartermaster.")
return FALSE
@@ -275,15 +283,26 @@
temp_material += " [all_materials[M]/coeff] [CallMaterialName(M)]"
c = min(c,t)
if (c >= 1)
var/clearance = !(obj_flags & EMAGGED) && (offstation_security_levels || is_station_level(z))
var/sec_text = ""
if(clearance && (D.min_security_level > SEC_LEVEL_GREEN || D.max_security_level < SEC_LEVEL_DELTA))
sec_text = " (Allowed security levels: "
for(var/n in D.min_security_level to D.max_security_level)
sec_text += NUM2SECLEVEL(n)
if(n + 1 <= D.max_security_level)
sec_text += ", "
sec_text += ")"
clearance = !clearance || ISINRANGE(GLOB.security_level, D.min_security_level, D.max_security_level)
if (c >= 1 && clearance)
l += "<A href='?src=[REF(src)];build=[D.id];amount=1'>[D.name]</A>[RDSCREEN_NOBREAK]"
if(c >= 5)
l += "<A href='?src=[REF(src)];build=[D.id];amount=5'>x5</A>[RDSCREEN_NOBREAK]"
if(c >= 10)
l += "<A href='?src=[REF(src)];build=[D.id];amount=10'>x10</A>[RDSCREEN_NOBREAK]"
l += "[temp_material][RDSCREEN_NOBREAK]"
l += "[temp_material][sec_text][RDSCREEN_NOBREAK]"
else
l += "<span class='linkOff'>[D.name]</span>[temp_material][RDSCREEN_NOBREAK]"
l += "<span class='linkOff'>[D.name]</span>[temp_material][sec_text][RDSCREEN_NOBREAK]"
l += ""
return l
@@ -30,3 +30,9 @@
total_rating += M.rating * 2 //There is only one.
total_rating = max(1, total_rating)
efficiency_coeff = total_rating
var/obj/item/circuitboard/machine/circuit_imprinter/C = circuit
offstation_security_levels = C.offstation_security_levels
/obj/machinery/rnd/production/circuit_imprinter/offstation
offstation_security_levels = FALSE
circuit = /obj/item/circuitboard/machine/circuit_imprinter/offstation
@@ -23,3 +23,12 @@
/obj/machinery/rnd/production/protolathe/disconnect_console()
linked_console.linked_lathe = null
..()
/obj/machinery/rnd/production/protolathe/calculate_efficiency()
. = ..()
var/obj/item/circuitboard/machine/protolathe/C = circuit
offstation_security_levels = C.offstation_security_levels
/obj/machinery/rnd/production/protolathe/offstation
offstation_security_levels = FALSE
circuit = /obj/item/circuitboard/machine/protolathe/offstation
@@ -21,7 +21,7 @@
list(name = "Augmentation Nanites"),
list(name = "Suppression Nanites"),
list(name = "Weaponized Nanites"),
//list(name = "Protocols") B.E.P.I.S Content, which we dont have
list(name = "Protocols") //Moved to default techweb from B.E.P.I.S. research, for now
)
/obj/machinery/nanite_program_hub/Initialize()
@@ -290,7 +290,7 @@
qdel(src)
///A nanite program containing a behaviour protocol. Only one protocol of each class can be active at once.
//Currently unused due to us lacking the B.E.P.I.S
//Moved to being 'normally' researched due to lack of B.E.P.I.S.
/datum/nanite_program/protocol
name = "Nanite Protocol"
var/protocol_class = NONE
@@ -105,3 +105,14 @@
/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."
use_rate = 0
rogue_types = list(/datum/nanite_program/necrotic)
protocol_class = NANITE_PROTOCOL_REPLICATION
var/max_boost = 2 //The maximum boost this program applies to the nanite replication, multiplied with the current nanite 'saturation' percentage
/datum/nanite_program/protocol/synergy/active_effect()
nanites.adjust_nanites(null, round(max_boost * (nanites.nanite_volume / nanites.max_nanites), 0.1))
@@ -160,7 +160,7 @@
if(!host_mob.client) //less brainpower
points *= 0.25
SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = points))
/datum/nanite_program/researchplus
name = "Neural Network"
desc = "The nanites link the host's brains together forming a neural research network, that becomes more efficient with the amount of total hosts."
@@ -184,7 +184,7 @@
SSnanites.neural_network_count--
else
SSnanites.neural_network_count -= 0.25
/datum/nanite_program/researchplus/active_effect()
if(!iscarbon(host_mob))
return
@@ -234,7 +234,7 @@
var/spread_cooldown = 0
/datum/nanite_program/spreading/active_effect()
if(spread_cooldown < world.time)
if(world.time < spread_cooldown)
return
spread_cooldown = world.time + 50
var/list/mob/living/target_hosts = list()
+22 -10
View File
@@ -47,6 +47,9 @@ Nothing else in the console has ID requirements.
var/research_control = TRUE
/// Long action cooldown to prevent spam
var/last_long_action = 0
/obj/machinery/computer/rdconsole/production
circuit = /obj/item/circuitboard/computer/rdconsole/production
research_control = FALSE
@@ -301,15 +304,26 @@ Nothing else in the console has ID requirements.
temp_material += " [all_materials[M]/coeff] [CallMaterialName(M)]"
c = min(c,t)
if (c >= 1)
var/clearance = !(linked_lathe.obj_flags & EMAGGED) && (linked_lathe.offstation_security_levels || is_station_level(linked_lathe.z))
var/sec_text = ""
if(clearance && (D.min_security_level > SEC_LEVEL_GREEN || D.max_security_level < SEC_LEVEL_DELTA))
sec_text = " (Allowed security levels: "
for(var/n in D.min_security_level to D.max_security_level)
sec_text += NUM2SECLEVEL(n)
if(n + 1 <= D.max_security_level)
sec_text += ", "
sec_text += ")"
clearance = !clearance || ISINRANGE(GLOB.security_level, D.min_security_level, D.max_security_level)
if (c >= 1 && clearance)
l += "<A href='?src=[REF(src)];build=[D.id];amount=1'>[D.name]</A>[RDSCREEN_NOBREAK]"
if(c >= 5)
l += "<A href='?src=[REF(src)];build=[D.id];amount=5'>x5</A>[RDSCREEN_NOBREAK]"
if(c >= 10)
l += "<A href='?src=[REF(src)];build=[D.id];amount=10'>x10</A>[RDSCREEN_NOBREAK]"
l += "[temp_material][RDSCREEN_NOBREAK]"
l += "[temp_material][sec_text][RDSCREEN_NOBREAK]"
else
l += "<span class='linkOff'>[D.name]</span>[temp_material][RDSCREEN_NOBREAK]"
l += "<span class='linkOff'>[D.name]</span>[temp_material][sec_text][RDSCREEN_NOBREAK]"
l += ""
l += "</div>"
return l
@@ -572,10 +586,8 @@ Nothing else in the console has ID requirements.
l += "<table><tr><td>[icon2html(linked_destroy.loaded_item, usr)]</td><td><b>[linked_destroy.loaded_item.name]</b> <A href='?src=[REF(src)];eject_item=1'>Eject</A></td></tr></table>[RDSCREEN_NOBREAK]"
l += "Select a node to boost by deconstructing this item. This item can boost:"
var/anything = FALSE
var/list/boostable_nodes = techweb_item_boost_check(linked_destroy.loaded_item)
for(var/id in boostable_nodes)
anything = TRUE
var/list/worth = boostable_nodes[id]
var/datum/techweb_node/N = SSresearch.techweb_node_by_id(id)
@@ -609,7 +621,6 @@ Nothing else in the console has ID requirements.
// point deconstruction and material reclamation use the same ID to prevent accidentally missing the points
var/list/point_values = techweb_item_point_check(linked_destroy.loaded_item)
if(point_values)
anything = TRUE
l += "<div class='statusDisplay'>[RDSCREEN_NOBREAK]"
if (stored_research.deconstructed_items[linked_destroy.loaded_item.type])
l += "<span class='linkOff'>Point Deconstruction</span>"
@@ -625,10 +636,8 @@ Nothing else in the console has ID requirements.
for (var/M in materials)
l += "* [CallMaterialName(M)] x [materials[M]]"
l += "</div>[RDSCREEN_NOBREAK]"
anything = TRUE
if (!anything)
l += "Nothing!"
l += "<div class='statusDisplay'><A href='?src=[REF(src)];deconstruct=[RESEARCH_DEEP_SCAN_ID]'>Nondestructive Deep Scan</A></div>"
l += "</div>"
return l
@@ -915,6 +924,9 @@ Nothing else in the console has ID requirements.
screen = RDSCREEN_MENU
say("Ejecting Technology Disk")
if(ls["deconstruct"])
if((last_long_action + 1 SECONDS) > world.time)
return
last_long_action = world.time
if(QDELETED(linked_destroy))
say("No Destructive Analyzer Linked!")
return
@@ -1026,7 +1038,7 @@ Nothing else in the console has ID requirements.
autolathe_friendly = FALSE
D.category -= "Imported"
if(D.build_type & (AUTOLATHE|PROTOLATHE|CRAFTLATHE)) // Specifically excludes circuit imprinter and mechfab
if(D.build_type & (AUTOLATHE|PROTOLATHE|TOYLATHE)) // Specifically excludes circuit imprinter and mechfab
D.build_type = autolathe_friendly ? (D.build_type | AUTOLATHE) : D.build_type
D.category |= "Imported"
d_disk.blueprints[slot] = D
+12 -6
View File
@@ -352,6 +352,7 @@
/datum/techweb/specialized/autounlocking
var/design_autounlock_buildtypes = NONE
var/design_autounlock_skip_types = NONE
var/design_autounlock_categories = list("initial") //if a design has a buildtype that matches the abovea and either has a category in this or this is null, unlock it.
var/node_autounlock_ids = list() //autounlock nodes of this type.
@@ -364,7 +365,7 @@
research_node_id(id, TRUE, FALSE)
for(var/id in SSresearch.techweb_designs)
var/datum/design/D = SSresearch.techweb_design_by_id(id)
if(D.build_type & design_autounlock_buildtypes)
if(D.build_type & (design_autounlock_buildtypes & allowed_buildtypes) && !(D.build_type & design_autounlock_skip_types))
for(var/i in D.category)
if(i in design_autounlock_categories)
add_design_by_id(D.id)
@@ -372,7 +373,16 @@
/datum/techweb/specialized/autounlocking/autolathe
design_autounlock_buildtypes = AUTOLATHE
allowed_buildtypes = AUTOLATHE
allowed_buildtypes = AUTOLATHE|TOYLATHE
/datum/techweb/specialized/autounlocking/autolathe/public
design_autounlock_skip_types = NO_PUBLIC_LATHE
/datum/techweb/specialized/autounlocking/autolathe/toy
design_autounlock_buildtypes = TOYLATHE
/datum/techweb/specialized/autounlocking/autolathe/toy/public
design_autounlock_skip_types = NO_PUBLIC_LATHE
/datum/techweb/specialized/autounlocking/limbgrower
design_autounlock_buildtypes = LIMBGROWER
@@ -389,10 +399,6 @@
/datum/techweb/specialized/autounlocking/exofab
allowed_buildtypes = MECHFAB
/datum/techweb/specialized/autounlocking/autoylathe
design_autounlock_buildtypes = AUTOYLATHE
allowed_buildtypes = AUTOYLATHE
/datum/techweb/specialized/autounlocking/autobottler
design_autounlock_buildtypes = AUTOBOTTLER
allowed_buildtypes = AUTOBOTTLER
@@ -957,6 +957,14 @@
design_ids = list("spreading_nanites","mindcontrol_nanites","mitosis_nanites")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 10000)
/datum/techweb_node/nanite_replication_protocols
id = "nanite_replication_protocols"
display_name = "Nanite Replication Protocols"
description = "Advanced behaviours that allow nanites to exploit certain circumstances to replicate faster."
prereq_ids = list("nanite_smart")
design_ids = list("kickstart_nanites","factory_nanites","tinker_nanites","offline_nanites","synergy_nanites")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000)
////////////////////////Alien technology////////////////////////
/datum/techweb_node/alientech //AYYYYYYYYLMAOO tech
id = "alientech"
@@ -191,7 +191,7 @@
alert_type = /obj/screen/alert/status_effect/bloodchill
/datum/status_effect/bloodchill/on_apply()
owner.add_movespeed_modifier("bloodchilled", TRUE, 100, NONE, override = TRUE, multiplicative_slowdown = 3)
owner.add_movespeed_modifier(/datum/movespeed_modifier/status_effect/bloodchill)
return ..()
/datum/status_effect/bloodchill/tick()
@@ -199,7 +199,7 @@
owner.adjustFireLoss(2)
/datum/status_effect/bloodchill/on_remove()
owner.remove_movespeed_modifier("bloodchilled")
owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/bloodchill)
return ..()
/obj/screen/alert/status_effect/bloodchill
@@ -213,7 +213,7 @@
alert_type = /obj/screen/alert/status_effect/bonechill
/datum/status_effect/bonechill/on_apply()
owner.add_movespeed_modifier("bonechilled", TRUE, 100, NONE, override = TRUE, multiplicative_slowdown = 3)
owner.add_movespeed_modifier(/datum/movespeed_modifier/status_effect/bonechill)
return ..()
/datum/status_effect/bonechill/tick()
@@ -223,7 +223,7 @@
owner.adjust_bodytemperature(-10)
/datum/status_effect/bonechill/on_remove()
owner.remove_movespeed_modifier("bonechilled")
owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/bonechill)
return ..()
/obj/screen/alert/status_effect/bonechill
@@ -385,11 +385,11 @@ datum/status_effect/rebreathing/tick()
duration = 30
/datum/status_effect/tarfoot/on_apply()
owner.add_movespeed_modifier(MOVESPEED_ID_TARFOOT, update=TRUE, priority=100, multiplicative_slowdown=0.5, blacklisted_movetypes=(FLYING|FLOATING))
owner.add_movespeed_modifier(/datum/movespeed_modifier/status_effect/tarfoot)
return ..()
/datum/status_effect/tarfoot/on_remove()
owner.remove_movespeed_modifier(MOVESPEED_ID_TARFOOT)
owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/tarfoot)
return ..()
/datum/status_effect/spookcookie
@@ -707,15 +707,15 @@ datum/status_effect/stabilized/blue/on_remove()
/datum/status_effect/stabilized/sepia/tick()
if(prob(50) && mod > -1)
mod--
owner.add_movespeed_modifier(MOVESPEED_ID_SEPIA, update=TRUE, priority=100, multiplicative_slowdown=-1, blacklisted_movetypes=(FLYING|FLOATING))
owner.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/status_effect/sepia, multiplicative_slowdown = 1)
else if(mod < 1)
mod++
// yeah a value of 0 does nothing but replacing the trait in place is cheaper than removing and adding repeatedly
owner.add_movespeed_modifier(MOVESPEED_ID_SEPIA, update=TRUE, priority=100, multiplicative_slowdown=0, blacklisted_movetypes=(FLYING|FLOATING))
owner.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/status_effect/sepia, multiplicative_slowdown = 0)
return ..()
/datum/status_effect/stabilized/sepia/on_remove()
owner.remove_movespeed_modifier(MOVESPEED_ID_SEPIA)
owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/sepia)
return ..()
/datum/status_effect/stabilized/cerulean
@@ -777,11 +777,11 @@ datum/status_effect/stabilized/blue/on_remove()
colour = "red"
/datum/status_effect/stabilized/red/on_apply()
owner.ignore_slowdown("slimestatus")
return ..()
. = ..()
owner.add_movespeed_mod_immunities(type, /datum/movespeed_modifier/equipment_speedmod)
/datum/status_effect/stabilized/red/on_remove()
owner.unignore_slowdown("slimestatus")
owner.remove_movespeed_mod_immunities(type, /datum/movespeed_modifier/equipment_speedmod)
return ..()
/datum/status_effect/stabilized/green