Merge branch 'master' into upstream-merge-37597

This commit is contained in:
LetterJay
2018-05-22 07:21:53 -05:00
committed by GitHub
661 changed files with 12019 additions and 10559 deletions
+3 -2
View File
@@ -51,8 +51,9 @@ other types of metals and chemistry for reagents).
return ..()
/datum/design/proc/icon_html(client/user)
send_asset(user, "design_[id].png", FALSE)
return "<img class='icon' src=\"design_[id].png\">"
var/datum/asset/spritesheet/sheet = get_asset_datum(/datum/asset/spritesheet/research_designs)
sheet.send(user)
return sheet.icon_tag(id)
////////////////////////////////////////
//Disks for transporting design datums//
@@ -126,42 +126,47 @@
/datum/design/apc_board
name = "APC Module"
id = "power control"
build_type = AUTOLATHE
build_type = AUTOLATHE | PROTOLATHE
materials = list(MAT_METAL = 100, MAT_GLASS = 100)
build_path = /obj/item/electronics/apc
category = list("initial", "Electronics")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/airlock_board
name = "Airlock Electronics"
id = "airlock_board"
build_type = AUTOLATHE
build_type = AUTOLATHE | PROTOLATHE
materials = list(MAT_METAL = 50, MAT_GLASS = 50)
build_path = /obj/item/electronics/airlock
category = list("initial", "Electronics")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/firelock_board
name = "Firelock Circuitry"
id = "firelock_board"
build_type = AUTOLATHE
build_type = AUTOLATHE | PROTOLATHE
materials = list(MAT_METAL = 50, MAT_GLASS = 50)
build_path = /obj/item/electronics/firelock
category = list("initial", "Electronics")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/airalarm_electronics
name = "Air Alarm Electronics"
id = "airalarm_electronics"
build_type = AUTOLATHE
build_type = AUTOLATHE | PROTOLATHE
materials = list(MAT_METAL = 50, MAT_GLASS = 50)
build_path = /obj/item/electronics/airalarm
category = list("initial", "Electronics")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/firealarm_electronics
name = "Fire Alarm Electronics"
id = "firealarm_electronics"
build_type = AUTOLATHE
build_type = AUTOLATHE | PROTOLATHE
materials = list(MAT_METAL = 50, MAT_GLASS = 50)
build_path = /obj/item/electronics/firealarm
category = list("initial", "Electronics")
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/camera
name = "Camera"
@@ -451,7 +456,7 @@
name = "Speed Loader (.38)"
id = "c38"
build_type = AUTOLATHE
materials = list(MAT_METAL = 30000)
materials = list(MAT_METAL = 20000)
build_path = /obj/item/ammo_box/c38
category = list("initial", "Security")
@@ -222,14 +222,6 @@
category = list("Computer Boards")
departmental_flags = DEPARTMENTAL_FLAG_CARGO
/datum/design/board/stockexchange
name = "Computer Design (Stock Exchange Console)"
desc = "Allows for the construction of circuit boards used to build a Stock Exchange Console."
id = "stockexchange"
build_path = /obj/item/circuitboard/computer/stockexchange
category = list("Computer Boards")
departmental_flags = DEPARTMENTAL_FLAG_CARGO
/datum/design/board/mining
name = "Computer Design (Outpost Status Display)"
desc = "Allows for the construction of circuit boards used to build an outpost status display console."
@@ -323,12 +323,12 @@
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
/datum/design/board/processor
name = "Machine Design (Food Processor Board)"
desc = "The circuit board for a food processor."
name = "Machine Design (Food/Slime Processor Board)"
desc = "The circuit board for a processing unit. Screwdrive the circuit to switch between food (default) or slime processing."
id = "processor"
build_path = /obj/item/circuitboard/machine/processor
category = list ("Misc. Machinery")
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_SERVICE
/datum/design/board/soda_dispenser
name = "Machine Design (Portable Soda Dispenser Board)"
@@ -346,14 +346,6 @@
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
category = list ("Misc. Machinery")
/datum/design/board/slimeprocessor
name = "Machine Design (Slime Processor Board)"
desc = "The circuit board for a slime processor."
id = "slimeprocessor"
build_path = /obj/item/circuitboard/machine/processor/slime
category = list ("Misc. Machinery")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
/datum/design/board/recycler
name = "Machine Design (Recycler Board)"
desc = "The circuit board for a recycler."
@@ -490,3 +482,19 @@
build_path = /obj/item/circuitboard/machine/dish_drive
category = list ("Misc. Machinery")
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
/datum/design/board/stacking_unit_console
name = "Machine Design (Stacking Machine Console)"
desc = "The circuit board for a Stacking Machine Console."
id = "stack_console"
build_path = /obj/item/circuitboard/machine/stacking_unit_console
category = list ("Misc. Machinery")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_ENGINEERING
/datum/design/board/stacking_machine
name = "Machine Design (Stacking Machine)"
desc = "The circuit board for a Stacking Machine."
id = "stack_machine"
build_path = /obj/item/circuitboard/machine/stacking_machine
category = list ("Misc. Machinery")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_ENGINEERING
@@ -354,3 +354,17 @@
build_path = /obj/item/weldingtool/experimental
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
/////////////////////////////////////////
////////////Armour//////////////
/////////////////////////////////////////
/datum/design/reactive_armour
name = "Reactive Armour Shell"
desc = "An experimental suit of armour capable of utilizing an implanted anomaly core to protect the user."
id = "reactive_armour"
build_type = PROTOLATHE
materials = list(MAT_METAL = 10000, MAT_DIAMOND = 5000, MAT_URANIUM = 8000, MAT_SILVER = 4500, MAT_GOLD = 5000)
build_path = /obj/item/reactive_armour_shell
category = list("Equipment")
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
@@ -21,15 +21,23 @@
name = "Plasma + Glass alloy"
id = "plasmaglass"
build_type = SMELTER
materials = list(MAT_PLASMA = MINERAL_MATERIAL_AMOUNT, MAT_GLASS = MINERAL_MATERIAL_AMOUNT)
materials = list(MAT_PLASMA = MINERAL_MATERIAL_AMOUNT * 0.5, MAT_GLASS = MINERAL_MATERIAL_AMOUNT)
build_path = /obj/item/stack/sheet/plasmaglass
category = list("initial")
/datum/design/plasmarglass_alloy
name = "Plasma + Metal + Glass alloy"
id = "plasmareinforcedglass"
build_type = SMELTER
materials = list(MAT_PLASMA = MINERAL_MATERIAL_AMOUNT * 0.5, MAT_METAL = MINERAL_MATERIAL_AMOUNT * 0.5, MAT_GLASS = MINERAL_MATERIAL_AMOUNT)
build_path = /obj/item/stack/sheet/plasmarglass
category = list("initial")
/datum/design/titaniumglass_alloy
name = "Titanium + Glass alloy"
id = "titaniumglass"
build_type = SMELTER
materials = list(MAT_TITANIUM = MINERAL_MATERIAL_AMOUNT, MAT_GLASS = MINERAL_MATERIAL_AMOUNT)
materials = list(MAT_TITANIUM = MINERAL_MATERIAL_AMOUNT * 0.5, MAT_GLASS = MINERAL_MATERIAL_AMOUNT)
build_path = /obj/item/stack/sheet/titaniumglass
category = list("initial")
@@ -37,7 +45,7 @@
name = "Plasma + Titanium + Glass alloy"
id = "plastitaniumglass"
build_type = SMELTER
materials = list(MAT_PLASMA = MINERAL_MATERIAL_AMOUNT, MAT_TITANIUM = MINERAL_MATERIAL_AMOUNT, MAT_GLASS = MINERAL_MATERIAL_AMOUNT)
materials = list(MAT_PLASMA = MINERAL_MATERIAL_AMOUNT * 0.5, MAT_TITANIUM = MINERAL_MATERIAL_AMOUNT * 0.5, MAT_GLASS = MINERAL_MATERIAL_AMOUNT)
build_path = /obj/item/stack/sheet/plastitaniumglass
category = list("initial")
+5 -20
View File
@@ -44,24 +44,21 @@
/obj/machinery/rnd/experimentor/proc/SetTypeReactions()
var/probWeight = 0
for(var/I in typesof(/obj/item))
if(istype(I, /obj/item/relic))
item_reactions["[I]"] = SCANTYPE_DISCOVER
else
item_reactions["[I]"] = pick(SCANTYPE_POKE,SCANTYPE_IRRADIATE,SCANTYPE_GAS,SCANTYPE_HEAT,SCANTYPE_COLD,SCANTYPE_OBLITERATE)
if(ispath(I, /obj/item/stock_parts) || ispath(I, /obj/item/grenade/chem_grenade) || ispath(I, /obj/item/kitchen))
var/obj/item/tempCheck = I
if(initial(tempCheck.icon_state) != null) //check it's an actual usable item, in a hacky way
valid_items += 15
valid_items += I
probWeight++
valid_items["[I]"] += 15
if(ispath(I, /obj/item/reagent_containers/food))
var/obj/item/tempCheck = I
if(initial(tempCheck.icon_state) != null) //check it's an actual usable item, in a hacky way
valid_items += rand(1,max(2,35-probWeight))
valid_items += I
valid_items["[I]"] += rand(1,4)
if(ispath(I, /obj/item/construction/rcd) || ispath(I, /obj/item/grenade) || ispath(I, /obj/item/aicard) || ispath(I, /obj/item/storage/backpack/holding) || ispath(I, /obj/item/slime_extract) || ispath(I, /obj/item/onetankbomb) || ispath(I, /obj/item/transfer_valve))
var/obj/item/tempCheck = I
@@ -225,18 +222,6 @@
smoke.set_up(0, where)
smoke.start()
/obj/machinery/rnd/experimentor/proc/pickWeighted(list/from)
var/result = FALSE
var/counter = 1
while(!result)
var/probtocheck = from[counter]
if(prob(probtocheck))
result = TRUE
return from[counter+1]
if(counter + 2 < from.len)
counter = counter + 2
else
counter = 1
/obj/machinery/rnd/experimentor/proc/experiment(exp,obj/item/exp_on)
recentlyExperimented = 1
@@ -283,13 +268,13 @@
visible_message("<span class='warning'>[src] malfunctions, spewing toxic waste!</span>")
for(var/turf/T in oview(1, src))
if(!T.density)
if(prob(EFFECT_PROB_VERYHIGH))
if(prob(EFFECT_PROB_VERYHIGH) && !(locate(/obj/effect/decal/cleanable/greenglow) in T))
var/obj/effect/decal/cleanable/reagentdecal = new/obj/effect/decal/cleanable/greenglow(T)
reagentdecal.reagents.add_reagent("radium", 7)
else if(prob(EFFECT_PROB_MEDIUM-badThingCoeff))
var/savedName = "[exp_on]"
ejectItem(TRUE)
var/newPath = pickWeighted(valid_items)
var/newPath = text2path(pickweight(valid_items))
loaded_item = new newPath(src)
visible_message("<span class='warning'>[src] malfunctions, transforming [savedName] into [loaded_item]!</span>")
investigate_log("Experimentor has transformed [savedName] into [loaded_item]", INVESTIGATE_EXPERIMENTOR)
@@ -9,5 +9,6 @@
/obj/machinery/rnd/production/circuit_imprinter/department/science
name = "department circuit imprinter (Science)"
circuit = /obj/item/circuitboard/machine/circuit_imprinter/department/science
allowed_department_flags = DEPARTMENTAL_FLAG_ALL|DEPARTMENTAL_FLAG_SCIENCE
department_tag = "Science"
+8 -1
View File
@@ -50,6 +50,7 @@ doesn't have toxins access.
var/research_control = TRUE
/obj/machinery/computer/rdconsole/production
circuit = /obj/item/circuitboard/computer/rdconsole/production
research_control = FALSE
/proc/CallMaterialName(ID)
@@ -192,9 +193,10 @@ doesn't have toxins access.
/obj/machinery/computer/rdconsole/emag_act(mob/user)
if(!(obj_flags & EMAGGED))
to_chat(user, "<span class='notice'>You disable the security protocols</span>")
to_chat(user, "<span class='notice'>You disable the security protocols[locked? " and unlock the console":""].</span>")
playsound(src, "sparks", 75, 1)
obj_flags |= EMAGGED
locked = FALSE
return ..()
/obj/machinery/computer/rdconsole/proc/list_categories(list/categories, menu_num as num)
@@ -217,6 +219,8 @@ doesn't have toxins access.
/obj/machinery/computer/rdconsole/proc/ui_header()
var/list/l = list()
var/datum/asset/spritesheet/sheet = get_asset_datum(/datum/asset/spritesheet/research_designs)
l += "[sheet.css_tag()][RDSCREEN_NOBREAK]"
l += "<div class='statusDisplay'><b>[stored_research.organization] Research and Development Network</b>"
l += "Available points: [round(stored_research.research_points)] (+[round(stored_research.last_bitcoins * 60)] / minute)"
l += "Security protocols: [obj_flags & EMAGGED ? "<font color='red'>Disabled</font>" : "<font color='green'>Enabled</font>"]"
@@ -815,6 +819,9 @@ doesn't have toxins access.
if(ls["ui_mode"])
ui_mode = text2num(ls["ui_mode"])
if(ls["lock_console"])
if(obj_flags & EMAGGED)
to_chat(usr, "<span class='boldwarning'>Security protocol error: Unable to lock.</span>")
return
if(allowed(usr))
lock_console(usr)
else
+13 -4
View File
@@ -93,7 +93,8 @@
description = "A refresher course on modern engineering technology."
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", "high_micro_laser", "nano_mani", "mesons", "thermomachine", "rad_collector", "tesla_coil", "grounding_rod", "apc_control", "cell_charger")
"atmosalerts", "atmos_control", "recycler", "autolathe", "high_micro_laser", "nano_mani", "mesons", "thermomachine", "rad_collector", "tesla_coil", "grounding_rod",
"apc_control", "cell_charger", "power control", "airlock_board", "firelock_board", "airalarm_electronics", "firealarm_electronics", "cell_charger", "stack_console", "stack_machine")
research_cost = 7500
export_price = 5000
@@ -106,6 +107,15 @@
research_cost = 2500
export_price = 5000
/datum/techweb_node/anomaly
id = "anomaly_research"
display_name = "Anomaly Research"
description = "Unlock the potential of the mysterious anomalies that appear on station."
prereq_ids = list("adv_engi", "practical_bluespace")
design_ids = list("reactive_armour")
research_cost = 2500
export_price = 5000
/datum/techweb_node/high_efficiency
id = "high_efficiency"
display_name = "High Efficiency Parts"
@@ -153,7 +163,6 @@
research_cost = 5000
export_price = 5000
/datum/techweb_node/bluespace_power
id = "bluespace_power"
display_name = "Bluespace Power Technology"
@@ -321,7 +330,7 @@
display_name = "Computer Consoles"
description = "Computers and how they work."
prereq_ids = list("datatheory")
design_ids = list("cargo", "cargorequest", "stockexchange", "libraryconsole", "mining", "crewconsole", "rdcamera", "comconsole", "idcardconsole", "seccamera")
design_ids = list("cargo", "cargorequest", "libraryconsole", "mining", "crewconsole", "rdcamera", "comconsole", "idcardconsole", "seccamera")
research_cost = 2000
export_price = 5000
@@ -867,7 +876,7 @@
display_name = "Illegal Technology"
description = "Dangerous research used to create dangerous objects."
prereq_ids = list("adv_engi", "adv_weaponry", "explosive_weapons")
design_ids = list("decloner", "borg_syndicate_module", "suppressor", "largecrossbow")
design_ids = list("decloner", "borg_syndicate_module", "suppressor", "largecrossbow", "donksofttoyvendor")
research_cost = 10000
export_price = 5000
hidden = TRUE
@@ -448,8 +448,7 @@ datum/status_effect/stabilized/blue/on_remove()
else if(istype(O, /obj/item/stack/sheet/hairlesshide))
to_chat(owner, "<span class='warning'>[linked_extract] kept your hands wet! It wets [O]!</span>")
var/obj/item/stack/sheet/hairlesshide/HH = O
var/obj/item/stack/sheet/wetleather/WL = new(get_turf(HH))
WL.amount = HH.amount
new /obj/item/stack/sheet/wetleather(get_turf(HH), HH.amount)
qdel(HH)
..()
@@ -386,7 +386,7 @@ Burning extracts:
item_state = "adamshield"
w_class = WEIGHT_CLASS_HUGE
armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 70)
slot_flags = SLOT_BACK
slot_flags = ITEM_SLOT_BACK
block_chance = 75
throw_range = 1 //How far do you think you're gonna throw a solid crystalline shield...?
throw_speed = 2
@@ -66,10 +66,8 @@ Charged extracts:
colour = "metal"
/obj/item/slimecross/charged/metal/do_effect(mob/user)
var/obj/item/stack/sheet/metal/M = new(get_turf(user))
M.amount = 25
var/obj/item/stack/sheet/plasteel/P = new(get_turf(user))
P.amount = 10
new /obj/item/stack/sheet/metal(get_turf(user), 25)
new /obj/item/stack/sheet/plasteel(get_turf(user), 10)
user.visible_message("<span class='notice'>[src] grows into a plethora of metals!</span>")
..()
@@ -85,8 +83,7 @@ Charged extracts:
colour = "dark purple"
/obj/item/slimecross/charged/darkpurple/do_effect(mob/user)
var/obj/item/stack/sheet/mineral/plasma/M = new(get_turf(user))
M.amount = 10
new /obj/item/stack/sheet/mineral/plasma(get_turf(user), 10)
user.visible_message("<span class='notice'>[src] produces a large amount of plasma!</span>")
..()
@@ -113,8 +110,7 @@ Charged extracts:
colour = "bluespace"
/obj/item/slimecross/charged/bluespace/do_effect(mob/user)
var/obj/item/stack/sheet/bluespace_crystal/M = new(get_turf(user))
M.amount = 10
new /obj/item/stack/sheet/bluespace_crystal(get_turf(user), 10)
user.visible_message("<span class='notice'>[src] produces several sheets of polycrystal!</span>")
..()
@@ -138,8 +134,7 @@ Charged extracts:
colour = "pyrite"
/obj/item/slimecross/charged/pyrite/do_effect(mob/user)
var/obj/item/stack/sheet/mineral/bananium/M = new(get_turf(user))
M.amount = 10
new /obj/item/stack/sheet/mineral/bananium(get_turf(user), 10)
user.visible_message("<span class='warning'>[src] solidifies with a horrifying banana stench!</span>")
..()
@@ -329,7 +324,7 @@ Charged extracts:
if(!istype(C))
to_chat(user, "<span class='warning'>The potion can only be used on clothing!</span>")
return
if(C.min_cold_protection_temperature == SPACE_SUIT_MIN_TEMP_PROTECT && C.flags_1 & STOPSPRESSUREDMAGE_1)
if(C.min_cold_protection_temperature == SPACE_SUIT_MIN_TEMP_PROTECT && C.clothing_flags & STOPSPRESSUREDAMAGE)
to_chat(user, "<span class='warning'>The [C] is already pressure-resistant!</span>")
return ..()
to_chat(user, "<span class='notice'>You slather the blue gunk over the [C], making it airtight.</span>")
@@ -338,7 +333,7 @@ Charged extracts:
C.add_atom_colour("#000080", FIXED_COLOUR_PRIORITY)
C.min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT
C.cold_protection = C.body_parts_covered
C.flags_1 |= STOPSPRESSUREDMAGE_1
C.clothing_flags |= STOPSPRESSUREDAMAGE
uses--
if(!uses)
qdel(src)
@@ -371,7 +366,9 @@ Charged extracts:
C.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
C.add_atom_colour("#800000", FIXED_COLOUR_PRIORITY)
C.resistance_flags |= LAVA_PROOF
C.flags_2 |= LAVA_PROTECT_2
if (istype(C, /obj/item/clothing))
var/obj/item/clothing/CL = C
CL.clothing_flags |= LAVAPROTECT
uses--
if(!uses)
qdel(src)
@@ -75,12 +75,7 @@ Industrial extracts:
/obj/item/slimecross/industrial/metal
colour = "metal"
plasmarequired = 3
itempath = /obj/item/stack/sheet/metal
/obj/item/slimecross/industrial/metal/do_after_spawn(obj/item/spawned)
var/obj/item/stack/sheet/metal/M = spawned
if(istype(M))
M.amount = 10
itempath = /obj/item/stack/sheet/metal/ten
/obj/item/slimecross/industrial/yellow
colour = "yellow"
@@ -89,10 +89,10 @@ Regenerative extracts:
/obj/item/slimecross/regenerative/darkpurple/core_effect(mob/living/target, mob/user)
var/equipped = 0
equipped += target.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/purple(null), slot_shoes)
equipped += target.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(null), slot_w_uniform)
equipped += target.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/purple(null), slot_gloves)
equipped += target.equip_to_slot_or_del(new /obj/item/clothing/head/soft/purple(null), slot_head)
equipped += target.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/purple(null), SLOT_SHOES)
equipped += target.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(null), SLOT_W_UNIFORM)
equipped += target.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/purple(null), SLOT_GLOVES)
equipped += target.equip_to_slot_or_del(new /obj/item/clothing/head/soft/purple(null), SLOT_HEAD)
if(equipped > 0)
target.visible_message("<span class='notice'>The milky goo congeals into clothing!</span>")
@@ -104,13 +104,13 @@ Regenerative extracts:
return
var/mob/living/carbon/human/H = target
var/fireproofed = FALSE
if(H.get_item_by_slot(slot_wear_suit))
if(H.get_item_by_slot(SLOT_WEAR_SUIT))
fireproofed = TRUE
var/obj/item/clothing/C = H.get_item_by_slot(slot_wear_suit)
var/obj/item/clothing/C = H.get_item_by_slot(SLOT_WEAR_SUIT)
fireproof(C)
if(H.get_item_by_slot(slot_head))
if(H.get_item_by_slot(SLOT_HEAD))
fireproofed = TRUE
var/obj/item/clothing/C = H.get_item_by_slot(slot_head)
var/obj/item/clothing/C = H.get_item_by_slot(SLOT_HEAD)
fireproof(C)
if(fireproofed)
target.visible_message("<span class='notice'>Some of [target]'s clothing gets coated in the goo, and turns blue!</span>")