Merge branch 'master' into upstream-merge-37598

This commit is contained in:
LetterJay
2018-05-23 07:44:52 -05:00
committed by GitHub
699 changed files with 12960 additions and 11469 deletions

View File

@@ -434,7 +434,8 @@ obj/machinery/chem_dispenser/proc/work_animation()
"grenadine",
"limejuice",
"tomatojuice",
"lemonjuice"
"lemonjuice",
"menthol"
)
emagged_reagents = list(
"thirteenloko",
@@ -466,7 +467,9 @@ obj/machinery/chem_dispenser/proc/work_animation()
"hcider",
"creme_de_menthe",
"creme_de_cacao",
"triple_sec"
"triple_sec",
"sake",
"fernet"
)
emagged_reagents = list(
"ethanol",
@@ -500,3 +503,17 @@ obj/machinery/chem_dispenser/proc/work_animation()
"ammonia",
"ash",
"diethylamine")
/obj/machinery/chem_dispenser/fullupgrade //fully upgraded stock parts
/obj/machinery/chem_dispenser/fullupgrade/Initialize()
. = ..()
component_parts = list()
component_parts += new /obj/item/circuitboard/machine/chem_dispenser(null)
component_parts += new /obj/item/stock_parts/matter_bin/bluespace(null)
component_parts += new /obj/item/stock_parts/matter_bin/bluespace(null)
component_parts += new /obj/item/stock_parts/capacitor/quadratic(null)
component_parts += new /obj/item/stock_parts/manipulator/femto(null)
component_parts += new /obj/item/stack/sheet/glass(null)
component_parts += new /obj/item/stock_parts/cell/bluespace(null)
RefreshParts()

View File

@@ -0,0 +1,85 @@
/obj/machinery/chem_dispenser/chem_synthesizer //formerly SCP-294 made by mrty, but now only for testing purposes
name = "\improper debug chemical synthesizer"
desc = "If you see this, yell at adminbus."
icon = 'icons/obj/chemical.dmi'
icon_state = "dispenser"
amount = 10
resistance_flags = INDESTRUCTIBLE | FIRE_PROOF | ACID_PROOF | LAVA_PROOF
working_state = null
nopower_state = null
flags_1 = NODECONSTRUCT_1
var/static/list/shortcuts = list(
"meth" = "methamphetamine",
"tricord" = "tricordrazine"
)
var/mutable_appearance/top_overlay
/obj/machinery/chem_dispenser/chem_synthesizer/Initialize()
. = ..()
GLOB.poi_list += src
top_overlay = mutable_appearance(icon, "disp_beaker", layer = ABOVE_ALL_MOB_LAYER)
update_icon()
/obj/machinery/chem_dispenser/chem_synthesizer/update_icon()
cut_overlays()
add_overlay(top_overlay)
/obj/machinery/chem_dispenser/chem_synthesizer/Destroy()
. = ..()
GLOB.poi_list -= src
QDEL_NULL(top_overlay)
/obj/machinery/chem_dispenser/chem_synthesizer/display_beaker()
return
/obj/machinery/chem_dispenser/chem_synthesizer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
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, "chem_synthesizer", name, 390, 315, master_ui, state)
ui.open()
/obj/machinery/chem_dispenser/chem_synthesizer/ui_act(action, params)
if(..())
return
update_icon()
switch(action)
if("ejectBeaker")
if(beaker)
beaker.forceMove(drop_location())
if(Adjacent(usr) && !issilicon(usr))
usr.put_in_hands(beaker)
beaker = null
. = TRUE
if("input")
var/input_reagent = replacetext(lowertext(input("Enter the name of any liquid", "Input") as text), " ", "") //95% of the time, the reagent id is a lowercase/no spaces version of the name
if(shortcuts[input_reagent])
input_reagent = shortcuts[input_reagent]
else
input_reagent = find_reagent(input_reagent)
if(!input_reagent || !GLOB.chemical_reagents_list[input_reagent])
say("OUT OF RANGE")
return
else
if(!beaker)
return
else if(!beaker.reagents && !QDELETED(beaker))
beaker.create_reagents(beaker.volume)
beaker.reagents.add_reagent(input_reagent, amount)
if("makecup")
if(beaker)
return
beaker = new /obj/item/reagent_containers/glass/beaker/bluespace(src)
visible_message("<span class='notice'>[src] dispenses a bluespace beaker.</span>")
/obj/machinery/chem_dispenser/chem_synthesizer/proc/find_reagent(input)
. = FALSE
if(GLOB.chemical_reagents_list[input]) //prefer IDs!
var/datum/reagent/R = GLOB.chemical_reagents_list[input]
if(R.can_synth_debug)
return input
else
for(var/X in GLOB.chemical_reagents_list)
var/datum/reagent/R = GLOB.chemical_reagents_list[X]
if(R.can_synth_debug && input == replacetext(lowertext(R.name), " ", ""))
return X

View File

@@ -20,7 +20,8 @@
var/current_cycle = 0
var/volume = 0
var/color = "#000000" // rgb: 0, 0, 0
var/can_synth = TRUE
var/can_synth = TRUE // can this reagent be synthesized? (for example: odysseus syringe gun)
var/can_synth_debug = TRUE // can this reagent be synthesized by the debug chem synthesizer?
var/metabolization_rate = REAGENTS_METABOLISM //how fast the reagent is metabolized by the mob
var/overrides_metab = 0
var/overdose_threshold = 0

View File

@@ -1136,10 +1136,10 @@ All effects don't start immediately, but rather get worse over time; the rate is
color = "#CD6839"
nutriment_factor = 1 * REAGENTS_METABOLISM
boozepwr = 25
taste_description = "apples"
taste_description = "the season that <i>falls</i> between summer and winter"
glass_icon_state = "whiskeyglass"
glass_name = "hard cider"
glass_desc = "Tastes like autumn."
glass_desc = "Tastes like autumn... no wait, fall!"
shot_glass_icon_state = "shotglassbrown"
@@ -1238,7 +1238,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_desc = "Like having your brain smashed out by a slice of lemon wrapped around a large gold brick."
/datum/reagent/consumable/ethanol/gargle_blaster/on_mob_life(mob/living/M)
M.dizziness +=6
M.dizziness +=1.5
switch(current_cycle)
if(15 to 45)
if(!M.slurring)
@@ -1267,7 +1267,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
/datum/reagent/consumable/ethanol/neurotoxin/on_mob_life(mob/living/carbon/M)
M.Knockdown(60, 1, 0)
M.dizziness +=6
M.dizziness +=2
switch(current_cycle)
if(15 to 45)
if(!M.slurring)
@@ -1546,4 +1546,158 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_desc = "It'll either knock the drunkenness out of you or knock you out cold. Both, probably."
/datum/reagent/consumable/ethanol/crevice_spike/on_mob_add(mob/living/L) //damage only applies when drink first enters system and won't again until drink metabolizes out
L.adjustBruteLoss(3 * min(5,volume)) //minimum 3 brute damage on ingestion to limit non-drink means of injury - a full 5 unit gulp of the drink trucks you for the full 15
L.adjustBruteLoss(3 * min(5,volume)) //minimum 3 brute damage on ingestion to limit non-drink means of injury - a full 5 unit gulp of the drink trucks you for the full 15
/datum/reagent/consumable/ethanol/sake
name = "Sake"
id = "sake"
description = "A sweet rice wine of questionable legality and extreme potency."
color = "#DDDDDD"
boozepwr = 70
taste_description = "sweet rice wine"
glass_icon_state = "sakecup"
glass_name = "cup of sake"
glass_desc = "A traditional cup of sake."
/datum/reagent/consumable/ethanol/alexander
name = "Alexander"
id = "alexander"
description = "A creamy, indulgent delight that is stronger than it seems."
color = "#F5E9D3"
boozepwr = 80
taste_description = "bitter, creamy cacao"
glass_icon_state = "alexander"
glass_name = "Alexander"
glass_desc = "A creamy, indulgent delight that is stronger than it seems."
/datum/reagent/consumable/ethanol/sidecar
name = "Sidecar"
id = "sidecar"
description = "The one ride youll gladly give up the wheel for."
color = "#FFC55B"
boozepwr = 80
taste_description = "delicious freedom"
glass_icon_state = "sidecar"
glass_name = "Sidecar"
glass_desc = "The one ride youll gladly give up the wheel for."
/datum/reagent/consumable/ethanol/between_the_sheets
name = "Between the Sheets"
id = "between_the_sheets"
description = "A provocatively named classic."
color = "#F4C35A"
boozepwr = 80
taste_description = "seduction"
glass_icon_state = "between_the_sheets"
glass_name = "Between the Sheets"
glass_desc = "A provocatively named classic."
/datum/reagent/consumable/ethanol/kamikaze
name = "Kamikaze"
id = "kamikaze"
description = "Divinely windy."
color = "#EEF191"
boozepwr = 60
taste_description = "divine windiness"
glass_icon_state = "kamikaze"
glass_name = "Kamikaze"
glass_desc = "Divinely windy."
/datum/reagent/consumable/ethanol/mojito
name = "Mojito"
id = "mojito"
description = "A drink that looks as refreshing as it tastes."
color = "#DFFAD9"
boozepwr = 30
taste_description = "refreshing mint"
glass_icon_state = "mojito"
glass_name = "Mojito"
glass_desc = "A drink that looks as refreshing as it tastes."
/datum/reagent/consumable/ethanol/fernet
name = "Fernet"
id = "fernet"
description = "An incredibly bitter herbal liqueur used as a digestif."
color = "#1B2E24" // rgb: 27, 46, 36
boozepwr = 80
taste_description = "utter bitterness"
glass_name = "glass of fernet"
glass_desc = "A glass of pure Fernet. Only an absolute madman would drink this alone." //Hi Kevum
/datum/reagent/consumable/ethanol/fernet/on_mob_life(mob/living/M)
if(M.nutrition <= NUTRITION_LEVEL_STARVING)
M.adjustToxLoss(1*REM, 0)
M.nutrition = max(M.nutrition - 5, 0)
M.overeatduration = 0
return ..()
/datum/reagent/consumable/ethanol/fernet_cola
name = "Fernet Cola"
id = "fernet_cola"
description = "A very popular and bittersweet digestif, ideal after a heavy meal. Best served on a sawed-off cola bottle as per tradition."
color = "#390600" // rgb: 57, 6, 0
boozepwr = 25
taste_description = "sweet relief"
glass_icon_state = "godlyblend"
glass_name = "glass of fernet cola"
glass_desc = "A sawed-off cola bottle filled with Fernet Cola. Nothing better after eating like a lardass."
/datum/reagent/consumable/ethanol/fernetcola/on_mob_life(mob/living/M)
if(M.nutrition <= NUTRITION_LEVEL_STARVING)
M.adjustToxLoss(0.5*REM, 0)
M.nutrition = max(M.nutrition - 3, 0)
M.overeatduration = 0
return ..()
/datum/reagent/consumable/ethanol/fanciulli
name = "Fanciulli"
id = "fanciulli"
description = "What if the Manhattan coctail ACTUALLY used a bitter herb liquour? Helps you sobers up." //also causes a bit of stamina damage to symbolize the afterdrink lazyness
color = "#CA933F" // rgb: 202, 147, 63
boozepwr = -10
taste_description = "a sweet sobering mix"
glass_icon_state = "fanciulli"
glass_name = "glass of fanciulli"
glass_desc = "A glass of Fanciulli. It's just Manhattan with Fernet."
/datum/reagent/consumable/ethanol/fanciulli/on_mob_life(mob/living/M)
M.nutrition = max(M.nutrition - 5, 0)
M.overeatduration = 0
return ..()
/datum/reagent/consumable/ethanol/fanciulli/on_mob_add(mob/living/M)
if(M.health > 0)
M.adjustStaminaLoss(20)
. = TRUE
..()
/datum/reagent/consumable/ethanol/branca_menta
name = "Branca Menta"
id = "branca_menta"
description = "A refreshing mixture of bitter Fernet with mint creme liquour."
color = "#4B5746" // rgb: 75, 87, 70
boozepwr = 35
taste_description = "a bitter freshness"
glass_icon_state= "minted_fernet"
glass_name = "glass of branca menta"
glass_desc = "A glass of Branca Menta, perfect for those lazy and hot sunday summer afternoons." //Get lazy literally by drinking this
/datum/reagent/consumable/ethanol/branca_menta/on_mob_life(mob/living/M)
M.adjust_bodytemperature(-20 * TEMPERATURE_DAMAGE_COEFFICIENT, T0C)
if(M.nutrition <= NUTRITION_LEVEL_STARVING)
M.adjustToxLoss(1*REM, 0)
M.nutrition = max(M.nutrition - 5, 0)
M.overeatduration = 0
return ..()
/datum/reagent/consumable/ethanol/branca_menta/on_mob_add(mob/living/M)
if(M.health > 0)
M.adjustStaminaLoss(35)
. = TRUE
..()

View File

@@ -407,7 +407,7 @@
/datum/reagent/consumable/nuka_cola/on_mob_life(mob/living/M)
M.Jitter(20)
M.set_drugginess(30)
M.dizziness +=5
M.dizziness +=1.5
M.drowsyness = 0
M.AdjustSleeping(-40, FALSE)
M.adjust_bodytemperature(-5 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL)
@@ -721,7 +721,7 @@
description = "Milk for cool kids."
color = "#7D4E29"
taste_description = "chocolate milk"
/datum/reagent/consumable/menthol
name = "Menthol"
id = "menthol"

View File

@@ -57,15 +57,6 @@
..()
. = 1
/datum/reagent/drug/menthol
name = "Menthol"
id = "menthol"
description = "Tastes naturally minty, and imparts a very mild numbing sensation."
taste_description = "mint"
reagent_state = LIQUID
color = "#80AF9C"
trippy = FALSE
/datum/reagent/drug/crank
name = "Crank"
id = "crank"
@@ -287,7 +278,7 @@
to_chat(M, "<span class='notice'>[high_message]</span>")
M.adjustStaminaLoss(-5, 0)
M.adjustBrainLoss(4)
M.hallucination += 10
M.hallucination += 5
if(M.canmove && !ismovableatom(M.loc))
step(M, pick(GLOB.cardinals))
step(M, pick(GLOB.cardinals))
@@ -295,7 +286,7 @@
. = 1
/datum/reagent/drug/bath_salts/overdose_process(mob/living/M)
M.hallucination += 10
M.hallucination += 5
if(M.canmove && !ismovableatom(M.loc))
for(var/i in 1 to 8)
step(M, pick(GLOB.cardinals))
@@ -341,7 +332,7 @@
..()
/datum/reagent/drug/bath_salts/addiction_act_stage4(mob/living/carbon/human/M)
M.hallucination += 40
M.hallucination += 30
if(M.canmove && !ismovableatom(M.loc))
for(var/i = 0, i < 16, i++)
step(M, pick(GLOB.cardinals))

View File

@@ -1093,7 +1093,7 @@
. = 1
/datum/reagent/medicine/earthsblood/overdose_process(mob/living/M)
M.hallucination = min(max(0, M.hallucination + 10), 50)
M.hallucination = min(max(0, M.hallucination + 5), 60)
M.adjustToxLoss(5 * REM, 0)
..()
. = 1

View File

@@ -171,8 +171,7 @@
else if(istype(O, /obj/item/stack/sheet/hairlesshide))
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)
/*

View File

@@ -103,7 +103,7 @@
/datum/reagent/blackpowder/on_mob_life(mob/living/M)
..()
if(isplasmaman(M))
M.hallucination += 10
M.hallucination += 5
/datum/reagent/blackpowder/on_ex_act()
var/location = get_turf(holder.my_atom)

View File

@@ -188,7 +188,7 @@
taste_description = "sourness"
/datum/reagent/toxin/mindbreaker/on_mob_life(mob/living/M)
M.hallucination += 10
M.hallucination += 5
return ..()
/datum/reagent/toxin/plantbgone
@@ -626,16 +626,16 @@
/datum/reagent/toxin/lipolicide
name = "Lipolicide"
id = "lipolicide"
description = "A powerful toxin that will destroy fat cells, massively reducing body weight in a short time. More deadly to those without nutriment in their body."
description = "A powerful toxin that will destroy fat cells, massively reducing body weight in a short time. Deadly to those without nutriment in their body."
taste_description = "mothballs"
reagent_state = LIQUID
color = "#F0FFF0"
metabolization_rate = 0.5 * REAGENTS_METABOLISM
toxpwr = 0.5
toxpwr = 0
/datum/reagent/toxin/lipolicide/on_mob_life(mob/living/M)
if(M.nutrition <= NUTRITION_LEVEL_STARVING)
M.adjustToxLoss(0.5*REM, 0)
M.adjustToxLoss(1*REM, 0)
M.nutrition = max(M.nutrition - 3, 0) // making the chef more valuable, one meme trap at a time
M.overeatduration = 0
return ..()
@@ -728,7 +728,7 @@
/datum/reagent/toxin/rotatium/on_mob_life(mob/living/M)
if(M.hud_used)
if(current_cycle >= 20 && current_cycle%20 == 0)
var/list/screens = list(M.hud_used.plane_masters["[GAME_PLANE]"], M.hud_used.plane_masters["[LIGHTING_PLANE]"])
var/list/screens = list(M.hud_used.plane_masters["[FLOOR_PLANE]"], M.hud_used.plane_masters["[GAME_PLANE]"], M.hud_used.plane_masters["[LIGHTING_PLANE]"])
var/rotation = min(round(current_cycle/20), 89) // By this point the player is probably puking and quitting anyway
for(var/whole_screen in screens)
animate(whole_screen, transform = matrix(rotation, MATRIX_ROTATE), time = 5, easing = QUAD_EASING, loop = -1)
@@ -737,7 +737,7 @@
/datum/reagent/toxin/rotatium/on_mob_delete(mob/living/M)
if(M && M.hud_used)
var/list/screens = list(M.hud_used.plane_masters["[GAME_PLANE]"], M.hud_used.plane_masters["[LIGHTING_PLANE]"])
var/list/screens = list(M.hud_used.plane_masters["[FLOOR_PLANE]"], M.hud_used.plane_masters["[GAME_PLANE]"], M.hud_used.plane_masters["[LIGHTING_PLANE]"])
for(var/whole_screen in screens)
animate(whole_screen, transform = matrix(), time = 5, easing = QUAD_EASING)
..()
@@ -755,7 +755,7 @@
/datum/reagent/toxin/skewium/on_mob_life(mob/living/M)
if(M.hud_used)
if(current_cycle >= 5 && current_cycle % 3 == 0)
var/list/screens = list(M.hud_used.plane_masters["[GAME_PLANE]"], M.hud_used.plane_masters["[LIGHTING_PLANE]"])
var/list/screens = list(M.hud_used.plane_masters["[FLOOR_PLANE]"], M.hud_used.plane_masters["[GAME_PLANE]"], M.hud_used.plane_masters["[LIGHTING_PLANE]"])
var/matrix/skew = matrix()
var/intensity = 8
skew.set_skew(rand(-intensity,intensity), rand(-intensity,intensity))
@@ -772,7 +772,7 @@
/datum/reagent/toxin/skewium/on_mob_delete(mob/living/M)
if(M && M.hud_used)
var/list/screens = list(M.hud_used.plane_masters["[GAME_PLANE]"], M.hud_used.plane_masters["[LIGHTING_PLANE]"])
var/list/screens = list(M.hud_used.plane_masters["[FLOOR_PLANE]"], M.hud_used.plane_masters["[GAME_PLANE]"], M.hud_used.plane_masters["[LIGHTING_PLANE]"])
for(var/whole_screen in screens)
animate(whole_screen, transform = matrix(), time = 5, easing = QUAD_EASING)
..()

View File

@@ -254,18 +254,18 @@
possible_transfer_amounts = list(10,15,20,25,30,50,70)
volume = 70
flags_inv = HIDEHAIR
slot_flags = SLOT_HEAD
slot_flags = ITEM_SLOT_HEAD
resistance_flags = NONE
armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 75, "acid" = 50) //Weak melee protection, because you can wear it on your head
slot_equipment_priority = list( \
slot_back, slot_wear_id,\
slot_w_uniform, slot_wear_suit,\
slot_wear_mask, slot_head, slot_neck,\
slot_shoes, slot_gloves,\
slot_ears, slot_glasses,\
slot_belt, slot_s_store,\
slot_l_store, slot_r_store,\
slot_generic_dextrous_storage
SLOT_BACK, SLOT_WEAR_ID,\
SLOT_W_UNIFORM, SLOT_WEAR_SUIT,\
SLOT_WEAR_MASK, SLOT_HEAD, SLOT_NECK,\
SLOT_SHOES, SLOT_GLOVES,\
SLOT_EARS, SLOT_GLASSES,\
SLOT_BELT, SLOT_S_STORE,\
SLOT_L_STORE, SLOT_R_STORE,\
SLOT_GENERC_DEXTROUS_STORAGE
)
/obj/item/reagent_containers/glass/bucket/attackby(obj/O, mob/user, params)
@@ -286,17 +286,17 @@
/obj/item/reagent_containers/glass/bucket/equipped(mob/user, slot)
..()
if(slot == slot_head && reagents.total_volume)
if(slot == SLOT_HEAD && reagents.total_volume)
to_chat(user, "<span class='userdanger'>[src]'s contents spill all over you!</span>")
reagents.reaction(user, TOUCH)
reagents.clear_reagents()
/obj/item/reagent_containers/glass/bucket/equip_to_best_slot(var/mob/M)
if(reagents.total_volume) //If there is water in a bucket, don't quick equip it to the head
var/index = slot_equipment_priority.Find(slot_head)
slot_equipment_priority.Remove(slot_head)
var/index = slot_equipment_priority.Find(SLOT_HEAD)
slot_equipment_priority.Remove(SLOT_HEAD)
. = ..()
slot_equipment_priority.Insert(index, slot_head)
slot_equipment_priority.Insert(index, SLOT_HEAD)
return
return ..()

View File

@@ -11,7 +11,7 @@
possible_transfer_amounts = list()
resistance_flags = ACID_PROOF
container_type = OPENCONTAINER
slot_flags = SLOT_BELT
slot_flags = ITEM_SLOT_BELT
var/ignore_flags = 0
var/infinite = FALSE

View File

@@ -9,7 +9,7 @@
flags_1 = NOBLUDGEON_1
obj_flags = UNIQUE_RENAME
container_type = OPENCONTAINER
slot_flags = SLOT_BELT
slot_flags = ITEM_SLOT_BELT
throwforce = 0
w_class = WEIGHT_CLASS_SMALL
throw_speed = 3

View File

@@ -8,7 +8,7 @@
righthand_file = 'icons/mob/inhands/equipment/custodial_righthand.dmi'
flags_1 = NOBLUDGEON_1
container_type = OPENCONTAINER
slot_flags = SLOT_BELT
slot_flags = ITEM_SLOT_BELT
throwforce = 0
w_class = WEIGHT_CLASS_SMALL
throw_speed = 3