Merge branch 'master' of https://github.com/Citadel-Station-13/Citadel-Station-13 into putnamos-for-real

This commit is contained in:
Putnam
2020-07-08 22:02:03 -07:00
1515 changed files with 270775 additions and 326499 deletions
+270
View File
@@ -0,0 +1,270 @@
//This system is designed to act as an in-between for cargo and science, and the first major money sink in the game outside of just buying things from cargo (As of 10/9/19, anyway).
//economics defined values, subject to change should anything be too high or low in practice.
#define MACHINE_OPERATION 100000
#define MACHINE_OVERLOAD 500000
#define MAJOR_THRESHOLD 5500
#define MINOR_THRESHOLD 3500
#define STANDARD_DEVIATION 1000
/obj/machinery/rnd/bepis
name = "\improper B.E.P.I.S. Chamber"
desc = "A high fidelity testing device which unlocks the secrets of the known universe using the two most powerful substances available to man: excessive amounts of electricity and capital."
icon = 'icons/obj/machines/bepis.dmi'
icon_state = "chamber"
density = TRUE
layer = ABOVE_MOB_LAYER
use_power = IDLE_POWER_USE
active_power_usage = 1500
circuit = /obj/item/circuitboard/machine/bepis
var/banking_amount = 100
var/banked_cash = 0 //stored player cash
var/datum/bank_account/account //payer's account.
var/account_name //name of the payer's account.
var/error_cause = null
//Vars related to probability and chance of success for testing
var/major_threshold = MAJOR_THRESHOLD
var/minor_threshold = MINOR_THRESHOLD
var/std = STANDARD_DEVIATION //That's Standard Deviation, what did you think it was?
//Stock part variables
var/power_saver = 1
var/inaccuracy_percentage = 1.5
var/positive_cash_offset = 0
var/negative_cash_offset = 0
var/minor_rewards = list(/obj/item/stack/circuit_stack/full, //To add a new minor reward, add it here.
/obj/item/flashlight/flashdark,
/obj/item/pen/survival,
/obj/item/circuitboard/machine/sleeper/party,
/obj/item/toy/sprayoncan)
var/static/list/item_list = list()
/obj/machinery/rnd/bepis/attackby(obj/item/O, mob/user, params)
if(default_deconstruction_screwdriver(user, "chamber_open", "chamber", O))
update_icon_state()
return
if(default_deconstruction_crowbar(O))
return
if(!is_operational())
to_chat(user, "<span class='notice'>[src] can't accept money when it's not functioning.</span>")
return
if(istype(O, /obj/item/holochip) || istype(O, /obj/item/stack/spacecash))
var/deposit_value = O.get_item_credit_value()
banked_cash += deposit_value
qdel(O)
say("Deposited [deposit_value] credits into storage.")
update_icon_state()
return
if(istype(O, /obj/item/card/id))
var/obj/item/card/id/Card = O
if(Card.registered_account)
account = Card.registered_account
account_name = Card.registered_name
say("New account detected. Console Updated.")
else
say("No account detected on card. Aborting.")
return
return ..()
/obj/machinery/rnd/bepis/RefreshParts()
var/C = 0
var/M = 0
var/L = 0
var/S = 0
for(var/obj/item/stock_parts/capacitor/Cap in component_parts)
C += ((Cap.rating - 1) * 0.1)
power_saver = 1 - C
for(var/obj/item/stock_parts/manipulator/Manip in component_parts)
M += ((Manip.rating - 1) * 250)
positive_cash_offset = M
for(var/obj/item/stock_parts/micro_laser/Laser in component_parts)
L += ((Laser.rating - 1) * 250)
negative_cash_offset = L
for(var/obj/item/stock_parts/scanning_module/Scan in component_parts)
S += ((Scan.rating - 1) * 0.25)
inaccuracy_percentage = (1.5 - S)
/obj/machinery/rnd/bepis/proc/depositcash()
var/deposit_value = 0
deposit_value = banking_amount
if(deposit_value == 0)
update_icon_state()
say("Attempting to deposit 0 credits. Aborting.")
return
deposit_value = clamp(round(deposit_value, 1), 1, 15000)
if(!account)
say("Cannot find user account. Please swipe a valid ID.")
return
if(!account.has_money(deposit_value))
say("You do not possess enough credits.")
return
account.adjust_money(-deposit_value) //The money vanishes, not paid to any accounts.
SSblackbox.record_feedback("amount", "BEPIS_credits_spent", deposit_value)
banked_cash += deposit_value
use_power(1000 * power_saver)
say("Cash deposit successful. There is [banked_cash] in the chamber.")
update_icon_state()
return
/obj/machinery/rnd/bepis/proc/withdrawcash()
var/withdraw_value = 0
withdraw_value = banking_amount
if(withdraw_value > banked_cash)
say("Cannot withdraw more than stored funds. Aborting.")
else
banked_cash -= withdraw_value
new /obj/item/holochip(src.loc, withdraw_value)
say("Withdrawing [withdraw_value] credits from the chamber.")
update_icon_state()
return
/obj/machinery/rnd/bepis/proc/calcsuccess()
var/turf/dropturf = null
var/gauss_major = 0
var/gauss_minor = 0
var/gauss_real = 0
var/list/turfs = block(locate(x-1,y-1,z),locate(x+1,y+1,z)) //NO MORE DISCS IN WINDOWS
while(length(turfs))
var/turf/T = pick_n_take(turfs)
if(is_blocked_turf(T, exclude_mobs=TRUE))
continue
else
dropturf = T
break
if (!dropturf)
dropturf = drop_location()
gauss_major = (gaussian(major_threshold, std) - negative_cash_offset) //This is the randomized profit value that this experiment has to surpass to unlock a tech.
gauss_minor = (gaussian(minor_threshold, std) - negative_cash_offset) //And this is the threshold to instead get a minor prize.
gauss_real = (gaussian(banked_cash, std*inaccuracy_percentage) + positive_cash_offset) //this is the randomized profit value that your experiment expects to give.
say("Real: [gauss_real]. Minor: [gauss_minor]. Major: [gauss_major].")
flick("chamber_flash",src)
update_icon_state()
banked_cash = 0
if((gauss_real >= gauss_major) && (SSresearch.techweb_nodes_experimental.len > 0)) //Major Success.
say("Experiment concluded with major success. New technology node discovered on technology disc.")
new /obj/item/disk/tech_disk/major(dropturf,1)
if(SSresearch.techweb_nodes_experimental.len == 0)
say("Expended all available experimental technology nodes. Resorting to minor rewards.")
return
if(gauss_real >= gauss_minor) //Minor Success.
var/reward = pick(minor_rewards)
new reward(dropturf)
say("Experiment concluded with partial success. Dispensing compiled research efforts.")
return
if(gauss_real <= -1) //Critical Failure
say("ERROR: CRITICAL MACHIME MALFUNCTI- ON. CURRENCY IS NOT CRASH. CANNOT COMPUTE COMMAND: 'make bucks'") //not a typo, for once.
new /mob/living/simple_animal/deer(dropturf, 1)
use_power(MACHINE_OVERLOAD * power_saver) //To prevent gambling at low cost and also prevent spamming for infinite deer.
return
//Minor Failure
error_cause = pick("attempted to sell grey products to American dominated market.","attempted to sell gray products to British dominated market.","placed wild assumption that PDAs would go out of style.","simulated product #76 damaged brand reputation mortally.","simulated business model resembled 'pyramid scheme' by 98.7%.","product accidently granted override access to all station doors.")
say("Experiment concluded with zero product viability. Cause of error: [error_cause]")
return
/obj/machinery/rnd/bepis/update_icon_state()
if(panel_open == TRUE)
icon_state = "chamber_open"
return
if((use_power == ACTIVE_POWER_USE) && (banked_cash > 0) && (is_operational()))
icon_state = "chamber_active_loaded"
return
if (((use_power == IDLE_POWER_USE) && (banked_cash > 0)) || (banked_cash > 0) && (!is_operational()))
icon_state = "chamber_loaded"
return
if(use_power == ACTIVE_POWER_USE && is_operational())
icon_state = "chamber_active"
return
if(((use_power == IDLE_POWER_USE) && (banked_cash == 0)) || (!is_operational()))
icon_state = "chamber"
return
/obj/machinery/rnd/bepis/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
ui = new(user, src, ui_key, "bepis", name, 500, 480, master_ui, state)
ui.open()
RefreshParts()
/obj/machinery/rnd/bepis/ui_data(mob/user)
var/list/data = list()
var/powered = FALSE
var/zvalue = (banked_cash - (major_threshold - positive_cash_offset - negative_cash_offset))/(std)
var/std_success = 0
var/prob_success = 0
//Admittedly this is messy, but not nearly as messy as the alternative, which is jury-rigging an entire Z-table into the code, or making an adaptive z-table.
var/z = abs(zvalue)
if(z > 0 && z <= 0.5)
std_success = 19.1
else if(z > 0.5 && z <= 1.0)
std_success = 34.1
else if(z > 1.0 && z <= 1.5)
std_success = 43.3
else if(z > 1.5 && z <= 2.0)
std_success = 47.7
else if(z > 2.0 && z <= 2.5)
std_success = 49.4
else
std_success = 50
if(zvalue > 0)
prob_success = 50 + std_success
else if(zvalue == 0)
prob_success = 50
else
prob_success = 50 - std_success
if(use_power == ACTIVE_POWER_USE)
powered = TRUE
data["account_owner"] = account_name
data["amount"] = banking_amount
data["stored_cash"] = banked_cash
data["mean_value"] = (major_threshold - positive_cash_offset - negative_cash_offset)
data["error_name"] = error_cause
data["power_saver"] = power_saver
data["accuracy_percentage"] = inaccuracy_percentage * 100
data["positive_cash_offset"] = positive_cash_offset
data["negative_cash_offset"] = negative_cash_offset
data["manual_power"] = powered ? FALSE : TRUE
data["silicon_check"] = issilicon(user)
data["success_estimate"] = prob_success
return data
/obj/machinery/rnd/bepis/ui_act(action,params)
if(..())
return
switch(action)
if("deposit_cash")
if(use_power == IDLE_POWER_USE)
return
depositcash()
if("withdraw_cash")
if(use_power == IDLE_POWER_USE)
return
withdrawcash()
if("begin_experiment")
if(use_power == IDLE_POWER_USE)
return
if(banked_cash == 0)
say("Please deposit funds to begin testing.")
return
calcsuccess()
use_power(MACHINE_OPERATION * power_saver) //This thing should eat your APC battery if you're not careful.
use_power = IDLE_POWER_USE //Machine shuts off after use to prevent spam and look better visually.
update_icon_state()
if("amount")
var/input = text2num(params["amount"])
if(input)
banking_amount = input
if("toggle_power")
if(use_power == ACTIVE_POWER_USE)
use_power = IDLE_POWER_USE
else
use_power = ACTIVE_POWER_USE
update_icon_state()
if("account_reset")
if(use_power == IDLE_POWER_USE)
return
account_name = ""
account = null
say("Account settings reset.")
. = TRUE
@@ -14,7 +14,7 @@
/datum/design/bottle
materials = list(/datum/material/glass = 1200)
build_type = AUTOBOTTLER
category = list("Storge")
category = list("Storage")
/datum/design/bottle/wine
name = "Bottle Design (Wine)"
@@ -165,6 +165,7 @@
name = "Export Design (Gin)"
desc = "Allows for the blowing, and bottling of Gin bottles."
id = "gin_export"
reagents_list = list(/datum/reagent/consumable/ethanol/gin = 50)
build_path = /obj/item/export/bottle/gin
/datum/design/bottle/export/whiskey
@@ -331,4 +332,4 @@
id = "greenroad"
reagents_list = list(/datum/reagent/consumable/vitfro = 50, /datum/reagent/consumable/ethanol/rum = 30, /datum/reagent/ash = 10)
category = list("Beers")
build_path = /obj/item/export/bottle/greenroad
build_path = /obj/item/export/bottle/greenroad
@@ -10,6 +10,7 @@
id = "beanbag_slug"
build_type = AUTOLATHE
materials = list(/datum/material/iron = 250)
materials = list(/datum/material/iron = 1000)
build_path = /obj/item/ammo_casing/shotgun/beanbag
category = list("initial", "Security")
@@ -73,12 +74,12 @@
build_path = /obj/item/restraints/handcuffs
category = list("hacked", "Security")
/datum/design/receiver
name = "Modular Receiver"
id = "receiver"
build_type = AUTOLATHE | NO_PUBLIC_LATHE
materials = list(/datum/material/iron = 15000)
build_path = /obj/item/weaponcrafting/receiver
/datum/design/rifle_receiver
name = "Rifle Receiver"
id = "rifle_receiver"
build_type = AUTOLATHE
materials = list(/datum/material/iron = 24000)
build_path = /obj/item/weaponcrafting/improvised_parts/rifle_receiver
category = list("hacked", "Security")
/datum/design/shotgun_slug
@@ -113,6 +114,10 @@
build_path = /obj/item/ammo_casing/shotgun/incendiary
category = list("hacked", "Security")
/////////////////
// Bullets //
/////////////////
/datum/design/riot_dart
name = "Foam Riot Dart"
id = "riot_dart"
@@ -192,3 +197,4 @@
materials = list(/datum/material/iron = 5500)
build_path = /obj/item/clothing/head/foilhat
category = list("hacked", "Misc")
@@ -81,7 +81,16 @@
materials = list(/datum/material/iron = 50, /datum/material/glass = 50)
build_path = /obj/item/airlock_painter
category = list("initial", "Misc","Tool Designs")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SERVICE
/datum/design/airlock_painter/decal
name = "Decal Painter"
id = "decal_painter"
build_type = AUTOLATHE | PROTOLATHE
materials = list(/datum/material/iron = 50, /datum/material/glass = 50)
build_path = /obj/item/airlock_painter/decal
category = list("initial","Tools","Tool Designs")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SERVICE
/datum/design/cultivator
name = "Cultivator"
@@ -271,4 +280,12 @@
build_type = AUTOLATHE
materials = list(/datum/material/iron = 5000, /datum/material/glass = 2000)
build_path = /obj/item/vending_refill/custom
category = list("initial", "Misc")
category = list("initial", "Misc")
/datum/design/trigger_assembly
name = "Trigger Assembly"
id = "trigger_assembly"
build_type = AUTOLATHE
materials = list(/datum/material/iron = 6500, /datum/material/glass = 50)
build_path = /obj/item/weaponcrafting/improvised_parts/trigger_assembly
category = list("initial", "Misc")
@@ -139,7 +139,7 @@
id = "tool_box"
build_type = AUTOLATHE
materials = list(MAT_CATEGORY_RIGID = 500)
build_path = /obj/item/storage/toolbox
build_path = /obj/item/storage/toolbox/greyscale
category = list("initial","Tools")
/datum/design/spraycan
@@ -148,7 +148,8 @@
build_type = AUTOLATHE
materials = list(/datum/material/iron = 100, /datum/material/glass = 100)
build_path = /obj/item/toy/crayon/spraycan
category = list("initial", "Tools")
category = list("initial", "Tools", "Tool Designs")
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
/datum/design/geiger
name = "Geiger Counter"
@@ -63,7 +63,7 @@
name = "Double-Bladed Toy Sword"
id = "dbtoysword"
materials = list(/datum/material/plastic = 1000)
build_path = /obj/item/twohanded/dualsaber/toy
build_path = /obj/item/dualsaber/toy
category = list("initial", "Melee")
/datum/design/autoylathe/toykatana
@@ -95,3 +95,23 @@
build_path = /obj/item/storage/bag/ore/holding
category = list("Bluespace Designs")
departmental_flags = DEPARTMENTAL_FLAG_CARGO
/datum/design/bluespace_tray
name = "Bluespace Tray"
desc = "A tray created using bluespace technology to fit more food on it."
id = "bluespace_tray"
build_type = PROTOLATHE
build_path = /obj/item/storage/bag/tray/bluespace
materials = list(/datum/material/iron = 2000, /datum/material/bluespace = 500)
category = list("Bluespace Designs")
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
/datum/design/bluespace_carrier
name = "Bluespace Jar"
desc = "A jar used to contain creatures, using the power of bluespace."
id = "bluespace_carrier"
build_type = PROTOLATHE
build_path = /obj/item/pet_carrier/bluespace
materials = list(/datum/material/glass = 1000, /datum/material/bluespace = 600)
category = list("Bluespace Designs")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
@@ -43,4 +43,20 @@
id = "libraryconsole"
build_path = /obj/item/circuitboard/computer/libraryconsole
category = list("Computer Boards")
departmental_flags = DEPARTMENTAL_FLAG_ALL
departmental_flags = DEPARTMENTAL_FLAG_ALL
/datum/design/board/flight_control
name = "Computer Design (Shuttle Flight Controls)"
desc = "Allows for the construction of circuit boards used to build a console that enables shuttle flight"
id = "shuttle_control"
build_path = /obj/item/circuitboard/computer/shuttle/flight_control
category = list("Computer Boards", "Shuttle Machinery")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/board/shuttle_docker
name = "Computer Design (Private Navigation Computer)"
desc = "Allows for the construction of circuit boards used to build a console that enables the targetting of custom flight locations"
id = "shuttle_docker"
build_path = /obj/item/circuitboard/computer/shuttle/docker
category = list("Computer Boards", "Shuttle Machinery")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
@@ -10,6 +10,14 @@
category = list("Computer Boards")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
/datum/design/board/shuttleseccamera
name = "Computer Design (Shuttle-Linked Security Camera)"
desc = "Same as a regular security camera console, but when linked to a shuttle, will specifically access cameras on that shuttle."
id = "shuttleseccamera"
build_path = /obj/item/circuitboard/computer/security/shuttle
category = list("Computer Boards")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
/datum/design/board/secdata
name = "Computer Design (Security Records Console)"
desc = "Allows for the construction of circuit boards used to build a security records console."
@@ -166,5 +166,3 @@
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
@@ -122,3 +122,44 @@
build_path = /obj/item/circuitboard/machine/autolathe/toy
departmental_flags = DEPARTMENTAL_FLAG_ALL
category = list("Misc. Machinery")
/datum/design/board/hypnochair
name = "Machine Design (Enhanced Interrogation Chamber)"
desc = "Allows for the construction of circuit boards used to build an Enhanced Interrogation Chamber."
id = "hypnochair"
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
build_path = /obj/item/circuitboard/machine/hypnochair
category = list("Misc. Machinery")
/datum/design/board/engine_plasma
name = "Machine Design (Plasma Thruster Board)"
desc = "The circuit board for a plasma thruster."
id = "engine_plasma"
build_path = /obj/item/circuitboard/machine/shuttle/engine/plasma
category = list ("Shuttle Machinery")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/engine_void
name = "Machine Design (Void Thruster Board)"
desc = "The circuit board for a void thruster."
id = "engine_void"
build_path = /obj/item/circuitboard/machine/shuttle/engine/void
category = list ("Shuttle Machinery")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/engine_heater
name = "Machine Design (Engine Heater Board)"
desc = "The circuit board for an engine heater."
id = "engine_heater"
build_path = /obj/item/circuitboard/machine/shuttle/heater
category = list ("Shuttle Machinery")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/sheetifier
name = "Sheetifier"
desc = "This machine turns weird things into sheets."
id = "sheetifier"
build_path = /obj/item/circuitboard/machine/sheetifier
category = list ("Misc. Machinery")
departmental_flags = DEPARTMENTAL_FLAG_ALL
@@ -66,6 +66,14 @@
category = list("Research Machinery")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/bepis
name = "Machine Design (B.E.P.I.S. Board)"
desc = "The circuit board for a B.E.P.I.S."
id = "bepis"
build_path = /obj/item/circuitboard/machine/bepis
category = list("Research Machinery")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/protolathe
name = "Machine Design (Protolathe Board)"
desc = "The circuit board for a protolathe."
@@ -264,6 +264,79 @@
construction_time = 600
category = list("Gygax")
//Medical Gygax
/datum/design/medigax_chassis
name = "Exosuit Chassis (\"Medical Gygax\")"
id = "medigax_chassis"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/chassis/medigax
materials = list(/datum/material/iron=20000)
construction_time = 100
category = list("Medical-Spec Gygax")
/datum/design/medigax_torso
name = "Exosuit Torso (\"Medical Gygax\")"
id = "medigax_torso"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/medigax_torso
materials = list(/datum/material/iron=20000,/datum/material/glass=10000,/datum/material/diamond=2000)
construction_time = 300
category = list("Medical-Spec Gygax")
/datum/design/medigax_head
name = "Exosuit Head (\"Medical Gygax\")"
id = "medigax_head"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/medigax_head
materials = list(/datum/material/iron=10000,/datum/material/glass=5000, /datum/material/diamond=2000)
construction_time = 200
category = list("Medical-Spec Gygax")
/datum/design/medigax_left_arm
name = "Exosuit Left Arm (\"Medical Gygax\")"
id = "medigax_left_arm"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/medigax_left_arm
materials = list(/datum/material/iron=15000, /datum/material/diamond=1000)
construction_time = 200
category = list("Medical-Spec Gygax")
/datum/design/medigax_right_arm
name = "Exosuit Right Arm (\"Medical Gygax\")"
id = "medigax_right_arm"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/medigax_right_arm
materials = list(/datum/material/iron=15000, /datum/material/diamond=1000)
construction_time = 200
category = list("Medical-Spec Gygax")
/datum/design/medigax_left_leg
name = "Exosuit Left Leg (\"Medical Gygax\")"
id = "medigax_left_leg"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/medigax_left_leg
materials = list(/datum/material/iron=15000, /datum/material/diamond=2000)
construction_time = 200
category = list("Medical-Spec Gygax")
/datum/design/medigax_right_leg
name = "Exosuit Right Leg (\"Medical Gygax\")"
id = "medigax_right_leg"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/medigax_right_leg
materials = list(/datum/material/iron=15000, /datum/material/diamond=2000)
construction_time = 200
category = list("Medical-Spec Gygax")
/datum/design/medigax_armor
name = "Exosuit Armor (\"Medical Gygax\")"
id = "medigax_armor"
build_type = MECHFAB
build_path = /obj/item/mecha_parts/part/medigax_armor
materials = list(/datum/material/iron=15000,/datum/material/diamond=10000,/datum/material/titanium=10000)
construction_time = 600
category = list("Medical-Spec Gygax")
//Durand
/datum/design/durand_chassis
name = "Exosuit Chassis (\"Durand\")"
@@ -212,6 +212,16 @@
category = list("Medical Designs")
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
/datum/design/chem_pack
name = "Intravenous Medicine Bag"
desc = "A plastic pressure bag for IV administration of drugs."
id = "chem_pack"
build_type = PROTOLATHE
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
materials = list(/datum/material/plastic = 1500)
build_path = /obj/item/reagent_containers/chem_pack
category = list("Medical Designs")
/datum/design/cloning_disk
name = "Cloning Data Disk"
desc = "Produce additional disks for storing genetic data."
@@ -238,7 +248,7 @@
/datum/design/bodybag
name = "Body Bag"
desc = "A normal body bag used for storge of dead crew."
desc = "A normal body bag used for storage of dead crew."
id = "bodybag"
build_type = PROTOLATHE
materials = list(/datum/material/plastic = 4000)
+168 -1
View File
@@ -206,6 +206,35 @@
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/bright_helmet
name = "Workplace-Ready Firefighter Helmet"
desc = "By applying state of the art lighting technology to a fire helmet with industry standard photo-chemical hardening methods, this hardhat will protect you from robust workplace hazards."
id = "bright_helmet"
build_type = PROTOLATHE
materials = list(/datum/material/iron = 4000, /datum/material/glass = 1000, /datum/material/plastic = 3000, /datum/material/silver = 500)
build_path = /obj/item/clothing/head/hardhat/red/upgraded
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_CARGO
/datum/design/mauna_mug
name = "Mauna Mug"
desc = "This awesome mug will ensure your coffee never stays cold!"
id = "mauna_mug"
build_type = PROTOLATHE
materials = list(/datum/material/iron = 1000, /datum/material/glass = 100)
build_path = /obj/item/reagent_containers/glass/maunamug
category = list("Equipment")
/datum/design/rolling_table
name = "Rolly poly"
desc = "We duct-taped some wheels to the bottom of a table. It's goddamn science alright?"
id = "rolling_table"
build_type = PROTOLATHE
materials = list(/datum/material/iron = 4000)
build_path = /obj/structure/table/rolling
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_ALL
/datum/design/portaseeder
name = "Portable Seed Extractor"
desc = "For the enterprising botanist on the go. Less efficient than the stationary model, it creates one seed per plant."
@@ -285,6 +314,25 @@
build_path = /obj/item/vending_refill/donksoft
category = list("Equipment")
/datum/design/eng_gloves
name = "Tinkers Gloves"
desc = "Overdesigned engineering gloves that have automated construction subroutines dialed in, allowing for faster construction while worn."
id = "eng_gloves"
build_type = PROTOLATHE
materials = list(/datum/material/iron=2000, /datum/material/silver=1500, /datum/material/gold = 1000)
build_path = /obj/item/clothing/gloves/color/latex/engineering
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/lavarods
name = "Lava-Resistant Metal Rods"
id = "lava_rods"
build_type = PROTOLATHE
materials = list(/datum/material/iron=1000, /datum/material/plasma=500, /datum/material/titanium=2000)
build_path = /obj/item/stack/rods/lava
category = list("initial", "Stock Parts")
departmental_flags = DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
/////////////////////////////////////////
////////////Janitor Designs//////////////
/////////////////////////////////////////
@@ -295,7 +343,7 @@
id = "broom"
build_type = PROTOLATHE | AUTOLATHE
materials = list(/datum/material/iron = 1000, /datum/material/glass = 600)
build_path = /obj/item/twohanded/broom
build_path = /obj/item/broom
category = list("initial", "Equipment", "Misc")
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
@@ -659,3 +707,122 @@
build_path = /obj/item/clothing/gloves/tackler/rocket
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
/////////////////////////////////////////
/////////////Internal Tanks//////////////
/////////////////////////////////////////
/datum/design/oxygen_tank
name = "Oxygen Tank"
desc = "An empty oxygen tank."
id = "oxygen_tank"
build_type = PROTOLATHE
materials = list(/datum/material/iron = 2000)
build_path = /obj/item/tank/internals/oxygen/empty
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/plasma_tank
name = "Plasma Tank"
desc = "An empty plasma tank."
id = "plasma_tank"
build_type = PROTOLATHE
materials = list(/datum/material/iron = 2000)
build_path = /obj/item/tank/internals/plasma/empty
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/emergency_oxygen
name = "Emergency Oxygen Tank"
desc = "A small emergency oxygen tank."
id = "emergency_oxygen"
build_type = PROTOLATHE
materials = list(/datum/material/iron = 1000)
build_path = /obj/item/tank/internals/emergency_oxygen/empty
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/plasma_belt_tank
name = "Plasmaman Belt Tank"
desc = "A small tank of plasma for plasmamen."
id = "plasmaman_tank_belt"
build_type = PROTOLATHE
materials = list(/datum/material/iron = 1000)
build_path = /obj/item/tank/internals/plasmaman/belt/empty
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/emergency_oxygen_engi
name = "Engineering Emergency Oxygen Tank"
desc = "An emergency oxygen tank for engineers."
id = "emergency_oxygen_engi"
build_type = PROTOLATHE
materials = list(/datum/material/iron = 1000)
build_path = /obj/item/tank/internals/emergency_oxygen/engi/empty
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/////////////////////////////////////////
/////////////////Tape////////////////////
/////////////////////////////////////////
/datum/design/sticky_tape
name = "Sticky Tape"
id = "sticky_tape"
build_type = PROTOLATHE
materials = list(/datum/material/plastic = 500)
build_path = /obj/item/stack/sticky_tape
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
/datum/design/super_sticky_tape
name = "Super Sticky Tape"
id = "super_sticky_tape"
build_type = PROTOLATHE
materials = list(/datum/material/plastic = 3000)
build_path = /obj/item/stack/sticky_tape/super
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
/datum/design/pointy_tape
name = "Pointy Tape"
id = "pointy_tape"
build_type = PROTOLATHE
materials = list(/datum/material/iron = 1500, /datum/material/plastic = 1000)
build_path = /obj/item/stack/sticky_tape/pointy
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
/////////////////////////////////////////
/////////////////Shuttle Upgrades////////
/////////////////////////////////////////
/datum/design/shuttle_speed_upgrade
name = "Shuttle Route Optimisation Upgrade"
desc = "A disk that allows for calculating shorter routes when inserted into a flight control console."
id = "disk_shuttle_route"
build_type = PROTOLATHE
materials = list(/datum/material/iron = 1000, /datum/material/glass = 1000)
build_path = /obj/item/shuttle_route_optimisation
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/shuttle_speed_upgrade_hyper
name = "Shuttle Bluespace Hyperlane Optimisation Upgrade"
desc = "A disk that allows for calculating shorter routes when inserted into a flight control console. This one abuses bluespace hyperlanes for increased efficiency."
id = "disk_shuttle_route_hyper"
build_type = PROTOLATHE
materials = list(/datum/material/iron = 1000, /datum/material/glass = 1000)
build_path = /obj/item/shuttle_route_optimisation/hyperlane
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/shuttle_speed_upgrade_void
name = "Shuttle Voidspace Optimisation Upgrade"
desc = "A disk that allows for calculating shorter routes when inserted into a flight control console. This one access voidspace for increased efficiency."
id = "disk_shuttle_route_void"
build_type = PROTOLATHE
materials = list(/datum/material/iron = 1000, /datum/material/glass = 1000)
build_path = /obj/item/shuttle_route_optimisation/void
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
@@ -42,6 +42,16 @@
category = list("Tool Designs")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/shuttlecreator
name = "Rapid Shuttle Designator"
desc = "An advanced device capable of defining areas for use in the creation of shuttles"
id = "shuttle_creator"
build_path = /obj/item/shuttle_creator
build_type = PROTOLATHE
materials = list(/datum/material/iron = 8000, /datum/material/titanium = 5000, /datum/material/bluespace = 5000)
category = list("Tool Designs")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/handdrill
name = "Hand Drill"
desc = "A small electric hand drill with an interchangeable screwdriver and bolt bit"
@@ -72,6 +82,16 @@
category = list("Tool Designs")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/rld_mini
name = "Mini Rapid Light Device (MRLD)"
desc = "A tool that can portable and standing lighting orbs and glowsticks."
id = "rld_mini"
build_type = PROTOLATHE
materials = list(/datum/material/iron = 20000, /datum/material/glass = 10000, /datum/material/plastic = 8000, /datum/material/gold = 2000)
build_path = /obj/item/construction/rld/mini
category = list("Tool Designs")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_CARGO
/////////////////////////////////////////
//////////////Alien Tools////////////////
/////////////////////////////////////////
+21 -11
View File
@@ -91,7 +91,7 @@
/datum/design/mag_oldsmg
name = "WT-550 Semi-Auto SMG Magazine (4.6x30mm)"
desc = "A 20 round magazine for the out of date security WT-550 Semi-Auto SMG."
desc = "A 32 round magazine for the out of date security WT-550 Semi-Auto SMG."
id = "mag_oldsmg"
build_type = PROTOLATHE
materials = list(/datum/material/iron = 4000)
@@ -101,7 +101,7 @@
/datum/design/mag_oldsmg/ap_mag
name = "WT-550 Semi-Auto SMG Armour Piercing Magazine (4.6x30mm AP)"
desc = "A 20 round armour piercing magazine for the out of date security WT-550 Semi-Auto SMG."
desc = "A 32 round armour piercing magazine for the out of date security WT-550 Semi-Auto SMG."
id = "mag_oldsmg_ap"
materials = list(/datum/material/iron = 6000, /datum/material/silver = 600)
build_path = /obj/item/ammo_box/magazine/wt550m9/wtap
@@ -109,7 +109,7 @@
/datum/design/mag_oldsmg/ic_mag
name = "WT-550 Semi-Auto SMG Incendiary Magazine (4.6x30mm IC)"
desc = "A 20 round armour piercing magazine for the out of date security WT-550 Semi-Auto SMG."
desc = "A 32 round armour piercing magazine for the out of date security WT-550 Semi-Auto SMG."
id = "mag_oldsmg_ic"
materials = list(/datum/material/iron = 6000, /datum/material/silver = 600, /datum/material/glass = 1000)
build_path = /obj/item/ammo_box/magazine/wt550m9/wtic
@@ -117,7 +117,7 @@
/datum/design/mag_oldsmg/tx_mag
name = "WT-550 Semi-Auto SMG Uranium Magazine (4.6x30mm TX)"
desc = "A 20 round uranium tipped magazine for the out of date security WT-550 Semi-Auto SMG."
desc = "A 32 round uranium tipped magazine for the out of date security WT-550 Semi-Auto SMG."
id = "mag_oldsmg_tx"
materials = list(/datum/material/iron = 6000, /datum/material/silver = 600, /datum/material/uranium = 2000)
build_path = /obj/item/ammo_box/magazine/wt550m9/wttx
@@ -125,7 +125,7 @@
/datum/design/mag_oldsmg/rubber_mag
name = "WT-550 Semi-Auto SMG rubberbullets Magazine (4.6x30mm rubber)"
desc = "A 20 round rubber shots magazine for the out of date security WT-550 Semi-Auto SMG"
desc = "A 32 round rubber shots magazine for the out of date security WT-550 Semi-Auto SMG"
id = "mag_oldsmg_rubber"
materials = list(/datum/material/iron = 6000)
build_path = /obj/item/ammo_box/magazine/wt550m9/wtrubber
@@ -234,13 +234,13 @@
category = list("Firing Pins")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
/datum/design/pin_away
name = "Station Locked Pin"
desc = "This is a security firing pin which only authorizes users who are off station."
id = "pin_away"
/datum/design/pin_explorer
name = "Outback Firing Pin"
desc = "This firing pin only shoots while ya ain't on station, fair dinkum!"
id = "pin_explorer"
build_type = PROTOLATHE
materials = list(/datum/material/iron = 1500, /datum/material/glass = 2000)
build_path = /obj/item/firing_pin/away
materials = list(/datum/material/silver = 1000, /datum/material/gold = 1000, /datum/material/iron = 500)
build_path = /obj/item/firing_pin/explorer
category = list("Firing Pins")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
@@ -500,3 +500,13 @@
materials = list(MAT_CATEGORY_RIGID = 12000)
build_path = /obj/item/melee/cleric_mace
category = list("Imported")
/datum/design/stun_boomerang
name = "OZtek Boomerang"
desc = "Uses reverse flow gravitodynamics to flip its personal gravity back to the thrower mid-flight. Also functions similar to a stun baton."
id = "stun_boomerang"
build_type = PROTOLATHE
materials = list(/datum/material/iron = 10000, /datum/material/glass = 4000, /datum/material/silver = 10000, /datum/material/gold = 2000)
build_path = /obj/item/melee/baton/boomerang
category = list("Weapons")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
@@ -96,7 +96,7 @@
for(var/i in 1 to amount)
var/obj/O = new path(get_turf(src))
if(efficient_with(O.type))
O.set_custom_materials(matlist.Copy())
O.set_custom_materials(matlist)
O.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)
+3
View File
@@ -1075,6 +1075,9 @@ Nothing else in the console has ID requirements.
/obj/machinery/computer/rdconsole/ui_interact(mob/user)
. = ..()
var/datum/browser/popup = new(user, "rndconsole", name, 900, 600)
var/datum/asset/spritesheet/assets = get_asset_datum(/datum/asset/spritesheet/research_designs)
popup.add_head_content("<link rel='stylesheet' type='text/css' href='[assets.css_tag()]'>")
popup.add_stylesheet("techwebs", 'html/browser/techwebs.css')
popup.set_content(generate_ui())
popup.open()
+10
View File
@@ -21,6 +21,16 @@
. = ..()
stored_research = new /datum/techweb/admin
/obj/item/disk/tech_disk/major
name = "Reformatted technology disk"
desc = "A disk containing a new, completed tech from the B.E.P.I.S. Upload the disk to an R&D Console to redeem the tech."
icon_state = "rndmajordisk"
custom_materials = list(/datum/material/iron=300, /datum/material/glass=100)
/obj/item/disk/tech_disk/major/Initialize()
. = ..()
stored_research = new /datum/techweb/bepis
/obj/item/disk/tech_disk/illegal
name = "Illegal technology disk"
desc = "A technology disk containing schematics for syndicate inspired equipment."
+19 -6
View File
@@ -24,10 +24,10 @@
var/list/tiers = list() //Assoc list, id = number, 1 is available, 2 is all reqs are 1, so on
/datum/techweb/New()
hidden_nodes = SSresearch.techweb_nodes_hidden.Copy()
for(var/i in SSresearch.techweb_nodes_starting)
var/datum/techweb_node/DN = SSresearch.techweb_node_by_id(i)
research_node(DN, TRUE, FALSE)
hidden_nodes = SSresearch.techweb_nodes_hidden.Copy()
return ..()
/datum/techweb/admin
@@ -63,6 +63,19 @@
id = "SCIENCE"
organization = "Nanotrasen"
/datum/techweb/bepis //Should contain only 1 BEPIS tech selected at random.
id = "EXPERIMENTAL"
organization = "Nanotrasen R&D"
/datum/techweb/bepis/New()
. = ..()
var/bepis_id = pick(SSresearch.techweb_nodes_experimental) //To add a new tech to the BEPIS, add the ID to this pick list.
var/datum/techweb_node/BN = (SSresearch.techweb_node_by_id(bepis_id))
hidden_nodes -= BN.id //Has to be removed from hidden nodes
research_node(BN, TRUE, FALSE, FALSE)
update_node_status(BN)
SSresearch.techweb_nodes_experimental -= bepis_id
/datum/techweb/Destroy()
researched_nodes = null
researched_designs = null
@@ -126,17 +139,17 @@
modify_point_list(l)
/datum/techweb/proc/copy_research_to(datum/techweb/receiver, unlock_hidden = TRUE) //Adds any missing research to theirs.
if(unlock_hidden)
for(var/i in receiver.hidden_nodes)
CHECK_TICK
if(!hidden_nodes[i])
receiver.hidden_nodes -= i //We can see it so let them see it too.
for(var/i in researched_nodes)
CHECK_TICK
receiver.research_node_id(i, TRUE, FALSE)
for(var/i in researched_designs)
CHECK_TICK
receiver.add_design_by_id(i)
if(unlock_hidden)
for(var/i in receiver.hidden_nodes)
CHECK_TICK
if(!hidden_nodes[i])
receiver.hidden_nodes -= i //We can see it so let them see it too.
receiver.recalculate_nodes()
/datum/techweb/proc/copy()
@@ -7,6 +7,7 @@
var/display_name = "Errored Node"
var/description = "Why are you seeing this?"
var/hidden = FALSE //Whether it starts off hidden.
var/experimental = FALSE //If the tech can be randomly granted by the BEPIS as a reward. Meant to be fully given in tech disks, not researched.
var/starting_node = FALSE //Whether it's available without any research.
var/list/prereq_ids = list()
var/list/design_ids = list()
@@ -102,6 +103,6 @@
description = "NT default research technologies."
// Default research tech, prevents bricking
design_ids = list("basic_matter_bin", "basic_cell", "basic_scanning", "basic_capacitor", "basic_micro_laser", "micro_mani", "desttagger", "handlabel", "packagewrap",
"destructive_analyzer", "circuit_imprinter", "experimentor", "rdconsole", "design_disk", "tech_disk", "rdserver", "rdservercontrol", "mechfab", "paystand",
"destructive_analyzer", "circuit_imprinter", "experimentor", "rdconsole", "bepis", "design_disk", "tech_disk", "rdserver", "rdservercontrol", "mechfab", "paystand",
"space_heater", "beaker", "large_beaker", "bucket", "xlarge_beaker", "sec_shellclip", "sec_beanbag", "sec_rshot", "sec_bshot", "sec_slug", "sec_islug", "sec_dart", "sec_38", "sec_38lethal",
"rglass","plasteel","plastitanium","plasmaglass","plasmareinforcedglass","titaniumglass","plastitaniumglass")
@@ -0,0 +1,91 @@
////////////////////////B.E.P.I.S. Locked Techs////////////////////////
/datum/techweb_node/light_apps
id = "light_apps"
display_name = "Illumination Applications"
description = "Applications of lighting and vision technology not originally thought to be commercially viable."
prereq_ids = list("base")
design_ids = list("bright_helmet", "rld_mini")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
hidden = TRUE
experimental = TRUE
/datum/techweb_node/aus_security
id = "aus_security"
display_name = "Australicus Security Protocols"
description = "It is said that security in the Australicus sector is tight, so we took some pointers from their equipment. Thankfully, our sector lacks any signs of these, 'dropbears'."
prereq_ids = list("base")
design_ids = list("pin_explorer", "stun_boomerang")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
hidden = TRUE
experimental = TRUE
/datum/techweb_node/spec_eng
id = "spec_eng"
display_name = "Specialized Engineering"
description = "Conventional wisdom has deemed these engineering products 'technically' safe, but far too dangerous to traditionally condone."
prereq_ids = list("base")
design_ids = list("lava_rods", "eng_gloves")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
hidden = TRUE
experimental = TRUE
/datum/techweb_node/rolling_table
id = "rolling_table"
display_name = "Advanced Wheel Applications"
description = "Adding wheels to things can lead to extremely beneficial outcomes."
prereq_ids = list("base")
design_ids = list("rolling_table")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
hidden = TRUE
experimental = TRUE
/datum/techweb_node/Mauna_Mug
id = "mauna_mug"
display_name = "Mauna Mug"
description = "A bored scientist was thinking to himself for very long...and then realized his coffee got cold! He made this invention to solve this extreme problem."
prereq_ids = list("base")
design_ids = list("mauna_mug")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
hidden = TRUE
experimental = TRUE
/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)
hidden = TRUE
experimental = TRUE
/datum/techweb_node/interrogation
id = "interrogation"
display_name = "Enhanced Interrogation Technology"
description = "By cross-referencing several declassified documents from past dictatorial regimes, we were able to develop an incredibly effective interrogation device. \
Ethical concerns about loss of free will may still apply, according to galactic law."
prereq_ids = list("base")
design_ids = list("hypnochair")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 3500)
hidden = TRUE
experimental = TRUE
/datum/techweb_node/tackle_advanced
id = "tackle_advanced"
display_name = "Advanced Grapple Technology"
description = "Nanotrasen would like to remind its researching staff that it is never acceptable to \"glomp\" your coworkers, and further \"scientific trials\" on the subject \
will no longer be accepted in its academic journals."
design_ids = list("tackle_dolphin", "tackle_rocket")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
hidden = TRUE
experimental = TRUE
/datum/techweb_node/sticky_advanced
id = "sticky_advanced"
display_name = "Advanced Sticky Technology"
description = "Taking a good joke too far? Nonsense!"
design_ids = list("super_sticky_tape", "pointy_tape")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
hidden = TRUE
experimental = TRUE
@@ -5,7 +5,7 @@
display_name = "Biological Technology"
description = "What makes us tick." //the MC, silly!
prereq_ids = list("base")
design_ids = list("medicalkit", "chem_heater", "chem_master", "chem_dispenser", "sleeper", "vr_sleeper", "pandemic", "defibrillator", "defibmount", "operating", "soda_dispenser", "beer_dispenser", "healthanalyzer", "blood_bag", "bloodbankgen", "telescopiciv", "medspray","genescanner")
design_ids = list("medicalkit", "chem_heater", "chem_master", "chem_dispenser", "sleeper", "vr_sleeper", "pandemic", "defibrillator", "defibmount", "operating", "soda_dispenser", "beer_dispenser", "healthanalyzer", "blood_bag", "bloodbankgen", "telescopiciv", "medspray","genescanner","chem_pack")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
/datum/techweb_node/adv_biotech
@@ -13,7 +13,7 @@
display_name = "Applied Bluespace Research"
description = "Using bluespace to make things faster and better."
prereq_ids = list("bluespace_basic", "engineering")
design_ids = list("bs_rped","biobag_holding","minerbag_holding", "bluespacebeaker", "bluespacesyringe", "phasic_scanning", "bluespacesmartdart", "xenobio_slimebasic")
design_ids = list("bs_rped","biobag_holding","minerbag_holding", "bluespacebeaker", "bluespacesyringe", "phasic_scanning", "bluespacesmartdart", "xenobio_slimebasic", "bluespace_tray", "bluespace_carrier")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000)
/datum/techweb_node/adv_bluespace
@@ -63,3 +63,36 @@
prereq_ids = list("bluespace_warping", "syndicate_basic")
design_ids = list("desynchronizer")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
/////////////////////////shuttle tech/////////////////////////
/datum/techweb_node/basic_shuttle_tech
id = "basic_shuttle"
display_name = "Basic Shuttle Research"
description = "Research the technology required to create and use basic shuttles."
prereq_ids = list("practical_bluespace", "adv_engi")
design_ids = list("shuttle_creator", "engine_plasma", "engine_heater", "shuttle_control", "shuttle_docker")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000)
/datum/techweb_node/shuttle_route_upgrade
id = "shuttle_route_upgrade"
display_name = "Route Optimisation Upgrade"
description = "Research into bluespace tunnelling, allowing us to reduce flight times by up to 20%!"
prereq_ids = list("basic_shuttle")
design_ids = list("disk_shuttle_route")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
/datum/techweb_node/shuttle_route_upgrade_hyper
id = "shuttle_route_upgrade_hyper"
display_name = "Hyperlane Optimisation Upgrade"
description = "Research into bluespace hyperlane, allowing us to reduce flight times by up to 40%!"
prereq_ids = list("shuttle_route_upgrade", "bluespace_warping")
design_ids = list("disk_shuttle_route_hyper")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000)
/datum/techweb_node/shuttle_route_upgrade_void
id = "shuttle_route_upgrade_void"
display_name = "Nullspace Breaching Upgrade"
description = "Research into voidspace tunnelling, allowing us to significantly reduce flight times."
prereq_ids = list("shuttle_route_upgrade_hyper", "alientech")
design_ids = list("disk_shuttle_route_void", "engine_void")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 12500)
@@ -7,7 +7,8 @@
prereq_ids = list("base")
design_ids = list("solarcontrol", "recharger", "powermonitor", "rped", "pacman", "adv_capacitor", "adv_scanning", "emitter", "high_cell", "adv_matter_bin",
"atmosalerts", "atmos_control", "recycler", "autolathe", "autolathe_secure", "high_micro_laser", "nano_mani", "mesons", "thermomachine", "rad_collector", "tesla_coil", "grounding_rod",
"apc_control", "power control", "airlock_board", "firelock_board", "airalarm_electronics", "firealarm_electronics", "cell_charger", "stack_console", "stack_machine", "rcd_ammo")
"apc_control", "power control", "airlock_board", "firelock_board", "airalarm_electronics", "firealarm_electronics", "cell_charger", "stack_console", "stack_machine", "rcd_ammo","oxygen_tank",
"plasma_tank", "emergency_oxygen", "emergency_oxygen_engi", "plasmaman_tank_belt")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 6000)
/datum/techweb_node/adv_engi
@@ -15,7 +16,9 @@
display_name = "Advanced Engineering"
description = "Pushing the boundaries of physics, one chainsaw-fist at a time."
prereq_ids = list("engineering", "emp_basic")
design_ids = list("engine_goggles", "magboots", "forcefield_projector", "weldingmask" , "rcd_loaded", "rpd", "tray_goggles_prescription", "engine_goggles_prescription", "mesons_prescription", "rcd_upgrade_frames", "rcd_upgrade_simple_circuits", "rcd_ammo_large")
design_ids = list("engine_goggles", "magboots", "forcefield_projector", "weldingmask" , "rcd_loaded", "rpd",
"tray_goggles_prescription", "engine_goggles_prescription", "mesons_prescription", "rcd_upgrade_frames",
"rcd_upgrade_simple_circuits", "rcd_ammo_large", "sheetifier")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 4000)
/datum/techweb_node/anomaly
@@ -42,6 +42,14 @@
"gygax_peri", "gygax_targ", "gygax_armor")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
/datum/techweb_node/medigax
id = "mech_medigax"
display_name = "EXOSUIT: Medical-Spec Gygax"
description = "Medical-Spec Gygax designs"
prereq_ids = list("mech_gygax", "mecha_odysseus")
design_ids = list("medigax_chassis", "medigax_torso", "medigax_head", "medigax_left_arm", "medigax_right_arm", "medigax_left_leg", "medigax_right_leg", "medigax_armor")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
/datum/techweb_node/durand
id = "mech_durand"
display_name = "EXOSUIT: Durand"
@@ -66,3 +66,24 @@
design_ids = list("air_horn", "honker_main", "honker_peri", "honker_targ", "honk_chassis", "honk_head", "honk_torso", "honk_left_arm", "honk_right_arm",
"honk_left_leg", "honk_right_leg", "mech_banana_mortar", "mech_mousetrap_mortar", "mech_honker", "mech_punching_face", "implant_trombone", "borg_transform_clown")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
////////////////////////Tape tech////////////////////////////
/datum/techweb_node/sticky_basic
id = "sticky_basic"
display_name = "Basic Sticky Technology"
description = "The only thing left to do after researching this tech is to start printing out a bunch of 'kick me' signs."
prereq_ids = list("base")
design_ids = list("sticky_tape")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500)
hidden = TRUE
experimental = TRUE
// Can be researched after getting the basic sticky technology from the BEPIS major reward
/datum/techweb_node/sticky_advanced
id = "sticky_advanced"
display_name = "Advanced Sticky Technology"
description = "Taking a good joke too far? Nonsense!"
prereq_ids = list("sticky_basic")
design_ids = list("super_sticky_tape", "pointy_tape")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000)
hidden = TRUE
@@ -74,11 +74,3 @@
prereq_ids = list("nanite_harmonic", "alientech")
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)
@@ -5,7 +5,7 @@
display_name = "Basic Tools"
description = "Basic mechanical, electronic, surgical and botanical tools."
prereq_ids = list("base")
design_ids = list("screwdriver", "wrench", "wirecutters", "crowbar", "multitool", "welding_tool", "tscanner", "analyzer", "cable_coil", "pipe_painter", "airlock_painter", "scalpel", "circular_saw", "surgicaldrill", "retractor", "cautery", "hemostat", "cultivator", "plant_analyzer", "shovel", "spade", "hatchet", "mop", "broom", "normtrash")
design_ids = list("screwdriver", "wrench", "wirecutters", "crowbar", "multitool", "welding_tool", "tscanner", "analyzer", "cable_coil", "pipe_painter", "airlock_painter", "decal_painter", "scalpel", "circular_saw", "surgicaldrill", "retractor", "cautery", "hemostat", "cultivator", "plant_analyzer", "shovel", "spade", "hatchet", "mop", "broom", "normtrash", "spraycan")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 500)
/datum/techweb_node/basic_mining
@@ -5,7 +5,7 @@
display_name = "Weapon Development Technology"
description = "Our researchers have found new to weaponize just about everything now."
prereq_ids = list("engineering")
design_ids = list("pin_testing", "tele_shield", "lasercarbine", "pin_away")
design_ids = list("pin_testing", "tele_shield", "lasercarbine")
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 7500)
/datum/techweb_node/adv_weaponry
@@ -276,7 +276,7 @@ Burning extracts:
/obj/item/slimecross/burning/adamantine/do_effect(mob/user)
user.visible_message("<span class='notice'>[src] crystallizes into a large shield!</span>")
new /obj/item/twohanded/required/adamantineshield(get_turf(user))
new /obj/item/shield/adamantineshield(get_turf(user))
..()
/obj/item/slimecross/burning/rainbow
@@ -440,7 +440,7 @@ Burning extracts:
attack_verb = list("irradiated","mutated","maligned")
return ..()
/obj/item/twohanded/required/adamantineshield
/obj/item/shield/adamantineshield
name = "adamantine shield"
desc = "A gigantic shield made of solid adamantium."
icon = 'icons/obj/slimecrossing.dmi'
@@ -450,12 +450,15 @@ Burning extracts:
armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 70)
slot_flags = ITEM_SLOT_BACK
block_chance = 75
force = 0
throw_range = 1 //How far do you think you're gonna throw a solid crystalline shield...?
throw_speed = 2
force = 15 //Heavy, but hard to wield.
attack_verb = list("bashed","pounded","slammed")
item_flags = SLOWS_WHILE_IN_HAND
/obj/item/shield/adamantineshield/ComponentInitialize()
. = ..()
AddComponent(/datum/component/two_handed, require_twohands=TRUE, force_wielded=15)
/obj/effect/proc_holder/spell/targeted/shapeshift/slimeform
name = "Slime Transformation"