Merge branch 'master' of https://github.com/Citadel-Station-13/Citadel-Station-13 into Ghommie-cit765
This commit is contained in:
@@ -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/airlock_painter/decal,
|
||||
/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
|
||||
+11
-6
@@ -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 = 40000)
|
||||
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"
|
||||
|
||||
+10
-1
@@ -271,4 +271,13 @@
|
||||
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")
|
||||
|
||||
|
||||
@@ -157,3 +157,11 @@
|
||||
materials = list(/datum/material/iron = 150, /datum/material/glass = 150)
|
||||
build_path = /obj/item/geiger_counter
|
||||
category = list("initial", "Tools")
|
||||
|
||||
/datum/design/saw
|
||||
name = "Hand Saw"
|
||||
id = "handsaw"
|
||||
build_type = AUTOLATHE
|
||||
materials = list(/datum/material/iron = 500)
|
||||
build_path = /obj/item/hatchet/saw
|
||||
category = list("initial", "Tools")
|
||||
|
||||
@@ -122,3 +122,11 @@
|
||||
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")
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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//////////////
|
||||
/////////////////////////////////////////
|
||||
|
||||
@@ -72,6 +72,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////////////////
|
||||
/////////////////////////////////////////
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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,82 @@
|
||||
////////////////////////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
|
||||
@@ -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 = "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
|
||||
|
||||
Reference in New Issue
Block a user