Merge remote-tracking branch 'citadel/master' into skills
This commit is contained in:
@@ -364,7 +364,7 @@ GLOBAL_PROTECT(admin_verbs_hideable)
|
||||
log_admin("[key_name(usr)] admin ghosted.")
|
||||
message_admins("[key_name_admin(usr)] admin ghosted.")
|
||||
var/mob/body = mob
|
||||
body.ghostize(1)
|
||||
body.ghostize(1, voluntary = TRUE)
|
||||
if(body && !body.key)
|
||||
body.key = "@[key]" //Haaaaaaaack. But the people have spoken. If it breaks; blame adminbus
|
||||
SSblackbox.record_feedback("tally", "admin_verb", 1, "Admin Ghost") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
@@ -1379,3 +1379,47 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits
|
||||
else
|
||||
message_admins("[key_name_admin(usr)] has [newstate ? "activated" : "deactivated"] job exp exempt status on [key_name_admin(C)]")
|
||||
log_admin("[key_name(usr)] has [newstate ? "activated" : "deactivated"] job exp exempt status on [key_name(C)]")
|
||||
|
||||
/// Allow admin to add or remove traits of datum
|
||||
/datum/admins/proc/modify_traits(datum/D)
|
||||
if(!D)
|
||||
return
|
||||
|
||||
var/add_or_remove = input("Remove/Add?", "Trait Remove/Add") as null|anything in list("Add","Remove")
|
||||
if(!add_or_remove)
|
||||
return
|
||||
var/list/availible_traits = list()
|
||||
|
||||
switch(add_or_remove)
|
||||
if("Add")
|
||||
for(var/key in GLOB.traits_by_type)
|
||||
if(istype(D,key))
|
||||
availible_traits += GLOB.traits_by_type[key]
|
||||
if("Remove")
|
||||
if(!GLOB.trait_name_map)
|
||||
GLOB.trait_name_map = generate_trait_name_map()
|
||||
for(var/trait in D.status_traits)
|
||||
var/name = GLOB.trait_name_map[trait] || trait
|
||||
availible_traits[name] = trait
|
||||
|
||||
var/chosen_trait = input("Select trait to modify", "Trait") as null|anything in sortList(availible_traits)
|
||||
if(!chosen_trait)
|
||||
return
|
||||
chosen_trait = availible_traits[chosen_trait]
|
||||
|
||||
var/source = "adminabuse"
|
||||
switch(add_or_remove)
|
||||
if("Add") //Not doing source choosing here intentionally to make this bit faster to use, you can always vv it.
|
||||
ADD_TRAIT(D,chosen_trait,source)
|
||||
if("Remove")
|
||||
var/specific = input("All or specific source ?", "Trait Remove/Add") as null|anything in list("All","Specific")
|
||||
if(!specific)
|
||||
return
|
||||
switch(specific)
|
||||
if("All")
|
||||
source = null
|
||||
if("Specific")
|
||||
source = input("Source to be removed","Trait Remove/Add") as null|anything in sortList(D.status_traits[chosen_trait])
|
||||
if(!source)
|
||||
return
|
||||
REMOVE_TRAIT(D,chosen_trait,source)
|
||||
|
||||
@@ -194,9 +194,10 @@ GLOBAL_PROTECT(VVpixelmovement)
|
||||
else
|
||||
variable = L[index]
|
||||
//EXPERIMENTAL - Keep old associated value while modifying key, if any
|
||||
var/found = L[variable]
|
||||
if(!isnull(found))
|
||||
old_assoc_value = found
|
||||
if(IS_VALID_ASSOC_KEY(variable))
|
||||
var/found = L[variable]
|
||||
if(!isnull(found))
|
||||
old_assoc_value = found
|
||||
//
|
||||
|
||||
default = vv_get_class(objectvar, variable)
|
||||
|
||||
@@ -47,5 +47,33 @@
|
||||
usr.client.debug_variables(src)
|
||||
if(href_list[VV_HK_MARK])
|
||||
usr.client.mark_datum(target)
|
||||
if(href_list[VV_HK_ADDCOMPONENT])
|
||||
if(!check_rights(NONE))
|
||||
return
|
||||
var/list/names = list()
|
||||
var/list/componentsubtypes = subtypesof(/datum/component)
|
||||
names += "---Components---"
|
||||
names += componentsubtypes
|
||||
names += "---Elements---"
|
||||
names += subtypesof(/datum/element)
|
||||
var/result = input(usr, "Choose a component/element to add","better know what ur fuckin doin pal") as null|anything in names
|
||||
if(!usr || !result || result == "---Components---" || result == "---Elements---")
|
||||
return
|
||||
if(QDELETED(src))
|
||||
to_chat(usr, "That thing doesn't exist anymore!")
|
||||
return
|
||||
var/list/lst = get_callproc_args()
|
||||
if(!lst)
|
||||
return
|
||||
var/datumname = "error"
|
||||
lst.Insert(1, result)
|
||||
if(result in componentsubtypes)
|
||||
datumname = "component"
|
||||
target._AddComponent(lst)
|
||||
else
|
||||
datumname = "element"
|
||||
target._AddElement(lst)
|
||||
log_admin("[key_name(usr)] has added [result] [datumname] to [key_name(src)].")
|
||||
message_admins("<span class='notice'>[key_name_admin(usr)] has added [result] [datumname] to [key_name_admin(src)].</span>")
|
||||
if(href_list[VV_HK_CALLPROC])
|
||||
usr.client.callproc_datum(target)
|
||||
|
||||
@@ -93,7 +93,7 @@
|
||||
H.socks = random_socks(H.gender)
|
||||
//H.eye_color = random_eye_color()
|
||||
REMOVE_TRAIT(H, TRAIT_DISFIGURED, null) //
|
||||
H.dna.features = random_features(H.dna.species?.id)
|
||||
H.dna.features = random_features(H.dna.species?.id, H.gender)
|
||||
|
||||
// Apply Appearance
|
||||
H.update_body(TRUE) // Outfit and underwear, also body and privates.
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
to_chat(user, "<span class='notice'>Our muscles tense and strengthen.</span>")
|
||||
changeling.chem_recharge_slowdown += 0.5
|
||||
else
|
||||
user.remove_movespeed_modifier(MOVESPEED_ID_CHANGELING_MUSCLES)
|
||||
user.remove_movespeed_modifier(/datum/movespeed_modifier/strained_muscles)
|
||||
to_chat(user, "<span class='notice'>Our muscles relax.</span>")
|
||||
changeling.chem_recharge_slowdown -= 0.5
|
||||
if(stacks >= 20)
|
||||
@@ -36,12 +36,12 @@
|
||||
/obj/effect/proc_holder/changeling/strained_muscles/proc/muscle_loop(mob/living/carbon/user)
|
||||
var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling)
|
||||
while(active)
|
||||
user.add_movespeed_modifier(MOVESPEED_ID_CHANGELING_MUSCLES, update=TRUE, priority=100, multiplicative_slowdown=-1, blacklisted_movetypes=(FLYING|FLOATING))
|
||||
user.add_movespeed_modifier(/datum/movespeed_modifier/strained_muscles)
|
||||
if(user.stat != CONSCIOUS || user.staminaloss >= 90)
|
||||
active = !active
|
||||
to_chat(user, "<span class='notice'>Our muscles relax without the energy to strengthen them.</span>")
|
||||
user.DefaultCombatKnockdown(40)
|
||||
user.remove_movespeed_modifier(MOVESPEED_ID_CHANGELING_MUSCLES)
|
||||
user.remove_movespeed_modifier(/datum/movespeed_modifier/strained_muscles)
|
||||
changeling.chem_recharge_slowdown -= 0.5
|
||||
break
|
||||
|
||||
|
||||
@@ -539,7 +539,7 @@
|
||||
if(SSshuttle.emergency.mode == SHUTTLE_CALL)
|
||||
var/cursetime = 1800
|
||||
var/timer = SSshuttle.emergency.timeLeft(1) + cursetime
|
||||
var/security_num = seclevel2num(get_security_level())
|
||||
var/security_num = SECLEVEL2NUM(NUM2SECLEVEL(GLOB.security_level))
|
||||
var/set_coefficient = 1
|
||||
switch(security_num)
|
||||
if(SEC_LEVEL_GREEN)
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
STOP_PROCESSING(SSobj, core)
|
||||
update_icon()
|
||||
GLOB.poi_list |= src
|
||||
previous_level = get_security_level()
|
||||
previous_level = NUM2SECLEVEL(GLOB.security_level)
|
||||
|
||||
/obj/machinery/nuclearbomb/Destroy()
|
||||
safety = FALSE
|
||||
@@ -419,7 +419,7 @@
|
||||
return
|
||||
timing = !timing
|
||||
if(timing)
|
||||
previous_level = get_security_level()
|
||||
previous_level = NUM2SECLEVEL(GLOB.security_level)
|
||||
detonation_timer = world.time + (timer_set * 10)
|
||||
for(var/obj/item/pinpointer/nuke/syndicate/S in GLOB.pinpointer_list)
|
||||
S.switch_mode_to(TRACK_INFILTRATOR)
|
||||
|
||||
@@ -64,8 +64,8 @@
|
||||
|
||||
/mob/living/simple_animal/slaughter/phasein()
|
||||
. = ..()
|
||||
add_movespeed_modifier(MOVESPEED_ID_SLAUGHTER, update=TRUE, priority=100, multiplicative_slowdown=-1)
|
||||
addtimer(CALLBACK(src, .proc/remove_movespeed_modifier, MOVESPEED_ID_SLAUGHTER, TRUE), 6 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE)
|
||||
add_movespeed_modifier(/datum/movespeed_modifier/slaughter)
|
||||
addtimer(CALLBACK(src, .proc/remove_movespeed_modifier, /datum/movespeed_modifier/slaughter), 6 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE)
|
||||
|
||||
|
||||
//The loot from killing a slaughter demon - can be consumed to allow the user to blood crawl
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
var/datum/traitor_class/class = GLOB.traitor_classes[C]
|
||||
var/weight = LOGISTIC_FUNCTION(1.5*class.weight,chaos_weight,class.chaos,0)
|
||||
weights[C] = weight * 1000
|
||||
var/choice = pickweightAllowZero(weights)
|
||||
var/choice = pickweight(weights, 0)
|
||||
if(!choice)
|
||||
choice = TRAITOR_HUMAN // it's an "easter egg"
|
||||
var/datum/traitor_class/actual_class = GLOB.traitor_classes[choice]
|
||||
|
||||
@@ -159,7 +159,7 @@
|
||||
/obj/item/scrying/attack_self(mob/user)
|
||||
to_chat(user, "<span class='notice'>You can see...everything!</span>")
|
||||
visible_message("<span class='danger'>[user] stares into [src], their eyes glazing over.</span>")
|
||||
user.ghostize(1)
|
||||
user.ghostize(1, voluntary = TRUE)
|
||||
|
||||
/////////////////////////////////////////Necromantic Stone///////////////////
|
||||
|
||||
|
||||
@@ -294,7 +294,7 @@
|
||||
name = "Staff of Change"
|
||||
desc = "An artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself."
|
||||
item_path = /obj/item/gun/magic/staff/change
|
||||
dynamic_requirement = 60
|
||||
dynamic_requirement = 200
|
||||
|
||||
/datum/spellbook_entry/item/staffanimation
|
||||
name = "Staff of Animation"
|
||||
@@ -361,7 +361,7 @@
|
||||
desc = "A collection of wands that allow for a wide variety of utility. Wands have a limited number of charges, so be conservative in use. Comes in a handy belt."
|
||||
item_path = /obj/item/storage/belt/wands/full
|
||||
category = "Defensive"
|
||||
dynamic_requirement = 60
|
||||
dynamic_requirement = 200
|
||||
|
||||
/datum/spellbook_entry/item/armor
|
||||
name = "Mastercrafted Armor Set"
|
||||
|
||||
@@ -1,15 +1,19 @@
|
||||
// How much "space" we give the edge of the map
|
||||
GLOBAL_LIST_INIT(potentialRandomZlevels, generateMapList(filename = "[global.config.directory]/awaymissionconfig.txt"))
|
||||
|
||||
/proc/createRandomZlevel()
|
||||
if(GLOB.awaydestinations.len) //crude, but it saves another var!
|
||||
/proc/createRandomZlevel(name = AWAY_MISSION_NAME, list/traits = list(ZTRAIT_AWAY = TRUE), list/potential_levels = GLOB.potential_away_levels)
|
||||
if(GLOB.random_zlevels_generated[name])
|
||||
stack_trace("[name] level already generated.")
|
||||
return
|
||||
if(!length(potential_levels))
|
||||
stack_trace("No potential [name] level to load has been found.")
|
||||
return
|
||||
|
||||
if(GLOB.potentialRandomZlevels && GLOB.potentialRandomZlevels.len)
|
||||
to_chat(world, "<span class='boldannounce'>Loading away mission...</span>")
|
||||
var/map = pick(GLOB.potentialRandomZlevels)
|
||||
load_new_z_level(map, "Away Mission")
|
||||
to_chat(world, "<span class='boldannounce'>Away mission loaded.</span>")
|
||||
var/start_time = REALTIMEOFDAY
|
||||
var/map = pick(potential_levels)
|
||||
if(!load_new_z_level(map, name, traits))
|
||||
INIT_ANNOUNCE("Failed to load [name]! map filepath: [map]!")
|
||||
return
|
||||
INIT_ANNOUNCE("Loaded [name] in [(REALTIMEOFDAY - start_time)/10]s!")
|
||||
GLOB.random_zlevels_generated[name] = TRUE
|
||||
|
||||
/proc/reset_gateway_spawns(reset = FALSE)
|
||||
for(var/obj/machinery/gateway/G in world)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/clothing/under/dress/skirt
|
||||
/obj/item/clothing/under/dress
|
||||
mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON
|
||||
|
||||
/obj/item/clothing/under/dress/skirt
|
||||
@@ -182,7 +182,6 @@
|
||||
icon_state = "bride_white"
|
||||
item_state = "bride_white"
|
||||
can_adjust = FALSE
|
||||
mutantrace_variation = NONE
|
||||
|
||||
/obj/item/clothing/under/dress/wedding/orange
|
||||
name = "orange wedding dress"
|
||||
@@ -213,7 +212,6 @@
|
||||
desc = "A fancy skirt made with polychromic threads."
|
||||
icon_state = "polyskirt"
|
||||
item_state = "rainbow"
|
||||
mutantrace_variation = NONE
|
||||
var/list/poly_colors = list("#FFFFFF", "#F08080", "#808080")
|
||||
|
||||
/obj/item/clothing/under/dress/skirt/polychromic/ComponentInitialize()
|
||||
@@ -226,5 +224,4 @@
|
||||
icon_state = "polypleat"
|
||||
item_state = "rainbow"
|
||||
body_parts_covered = CHEST|GROIN|ARMS
|
||||
mutantrace_variation = NONE
|
||||
poly_colors = list("#8CC6FF", "#808080", "#FF3535")
|
||||
|
||||
@@ -57,8 +57,7 @@
|
||||
icon_state = "tactifool"
|
||||
item_state = "bl_suit"
|
||||
has_sensor = TRUE
|
||||
mutantrace_variation = NONE
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0)
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||
|
||||
/obj/item/clothing/under/syndicate/sniper
|
||||
name = "Tactical turtleneck suit"
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
|
||||
if(turfs.len) //Pick a turf to spawn at if we can
|
||||
var/turf/T = pick(turfs)
|
||||
new /datum/spacevine_controller(T) //spawn a controller at turf
|
||||
new /datum/spacevine_controller(T, pick(subtypesof(/datum/spacevine_mutation)), rand(30,100), rand(5,10), src) //spawn a controller at turf with randomized stats and a single random mutation
|
||||
|
||||
|
||||
/datum/spacevine_mutation
|
||||
@@ -227,13 +227,13 @@
|
||||
quality = NEGATIVE
|
||||
|
||||
/datum/spacevine_mutation/thorns/on_cross(obj/structure/spacevine/holder, mob/living/crosser)
|
||||
if(prob(severity) && istype(crosser) && !isvineimmune(holder))
|
||||
if(prob(severity) && istype(crosser) && !isvineimmune(crosser))
|
||||
var/mob/living/M = crosser
|
||||
M.adjustBruteLoss(5)
|
||||
to_chat(M, "<span class='alert'>You cut yourself on the thorny vines.</span>")
|
||||
|
||||
/datum/spacevine_mutation/thorns/on_hit(obj/structure/spacevine/holder, mob/living/hitter, obj/item/I, expected_damage)
|
||||
if(prob(severity) && istype(hitter) && !isvineimmune(holder))
|
||||
if(prob(severity) && istype(hitter) && !isvineimmune(hitter))
|
||||
var/mob/living/M = hitter
|
||||
M.adjustBruteLoss(5)
|
||||
to_chat(M, "<span class='alert'>You cut yourself on the thorny vines.</span>")
|
||||
@@ -251,7 +251,7 @@
|
||||
holder.obj_integrity = holder.max_integrity
|
||||
|
||||
/datum/spacevine_mutation/woodening/on_hit(obj/structure/spacevine/holder, mob/living/hitter, obj/item/I, expected_damage)
|
||||
if(I.get_sharpness())
|
||||
if(I?.get_sharpness())
|
||||
. = expected_damage * 0.5
|
||||
else
|
||||
. = expected_damage
|
||||
@@ -344,16 +344,17 @@
|
||||
switch(damage_type)
|
||||
if(BRUTE)
|
||||
if(damage_amount)
|
||||
playsound(src, 'sound/weapons/slash.ogg', 50, 1)
|
||||
playsound(src, 'sound/weapons/slash.ogg', 50, TRUE)
|
||||
else
|
||||
playsound(src, 'sound/weapons/tap.ogg', 50, 1)
|
||||
playsound(src, 'sound/weapons/tap.ogg', 50, TRUE)
|
||||
if(BURN)
|
||||
playsound(src.loc, 'sound/items/welder.ogg', 100, 1)
|
||||
playsound(src.loc, 'sound/items/welder.ogg', 100, TRUE)
|
||||
|
||||
/obj/structure/spacevine/Crossed(mob/crosser)
|
||||
if(isliving(crosser))
|
||||
for(var/datum/spacevine_mutation/SM in mutations)
|
||||
SM.on_cross(src, crosser)
|
||||
/obj/structure/spacevine/Crossed(atom/movable/AM)
|
||||
if(!isliving(AM))
|
||||
return
|
||||
for(var/datum/spacevine_mutation/SM in mutations)
|
||||
SM.on_cross(src, AM)
|
||||
|
||||
//ATTACK HAND IGNORING PARENT RETURN VALUE
|
||||
/obj/structure/spacevine/attack_hand(mob/user)
|
||||
@@ -378,10 +379,9 @@
|
||||
var/list/vine_mutations_list
|
||||
var/mutativeness = 1
|
||||
|
||||
/datum/spacevine_controller/New(turf/location, list/muts, potency, production)
|
||||
/datum/spacevine_controller/New(turf/location, list/muts, potency, production, datum/round_event/event = null)
|
||||
vines = list()
|
||||
growth_queue = list()
|
||||
spawn_spacevine_piece(location, null, muts)
|
||||
START_PROCESSING(SSobj, src)
|
||||
vine_mutations_list = list()
|
||||
init_subtypes(/datum/spacevine_mutation/, vine_mutations_list)
|
||||
@@ -428,6 +428,7 @@
|
||||
for(var/datum/spacevine_mutation/SM in SV.mutations)
|
||||
SM.on_birth(SV)
|
||||
location.Entered(SV)
|
||||
return SV
|
||||
|
||||
/datum/spacevine_controller/proc/VineDestroyed(obj/structure/spacevine/S)
|
||||
S.master = null
|
||||
@@ -531,14 +532,13 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/structure/spacevine/CanPass(atom/movable/mover, turf/target)
|
||||
. = ..()
|
||||
if(isvineimmune(mover))
|
||||
. = TRUE
|
||||
else
|
||||
. = ..()
|
||||
return TRUE
|
||||
|
||||
/proc/isvineimmune(atom/A)
|
||||
. = FALSE
|
||||
if(isliving(A))
|
||||
var/mob/living/M = A
|
||||
if(("vines" in M.faction) || ("plants" in M.faction))
|
||||
. = TRUE
|
||||
return TRUE
|
||||
return FALSE
|
||||
@@ -396,6 +396,16 @@
|
||||
list_reagents = list(/datum/reagent/consumable/orangejuice = 100)
|
||||
foodtype = FRUIT| BREAKFAST
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/bio_carton
|
||||
name = "small carton box"
|
||||
desc = "A small biodegradable carton box made from plant biomatter."
|
||||
icon_state = "eco_box"
|
||||
item_state = "carton"
|
||||
lefthand_file = 'icons/mob/inhands/equipment/kitchen_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/kitchen_righthand.dmi'
|
||||
volume = 50
|
||||
isGlass = FALSE
|
||||
|
||||
/obj/item/reagent_containers/food/drinks/bottle/cream
|
||||
name = "milk cream"
|
||||
desc = "It's cream. Made from milk. What else did you think you'd find in there?"
|
||||
|
||||
@@ -40,14 +40,14 @@
|
||||
updateUsrDialog()
|
||||
|
||||
/obj/machinery/biogenerator/RefreshParts()
|
||||
var/E = 0
|
||||
var/P = 0
|
||||
var/max_storage = 40
|
||||
var/E = 0.5
|
||||
var/P = 0.5
|
||||
var/max_storage = 20
|
||||
for(var/obj/item/stock_parts/matter_bin/B in component_parts)
|
||||
P += B.rating
|
||||
max_storage = 40 * B.rating
|
||||
P += B.rating * 0.5
|
||||
max_storage = max(20 * B.rating, max_storage)
|
||||
for(var/obj/item/stock_parts/manipulator/M in component_parts)
|
||||
E += M.rating
|
||||
E += M.rating * 0.5
|
||||
efficiency = E
|
||||
productivity = P
|
||||
max_items = max_storage
|
||||
@@ -196,7 +196,7 @@
|
||||
dat += "<A href='?src=[REF(src)];create=[D.id];amount=5'>x5</A>"
|
||||
if(ispath(D.build_path, /obj/item/stack))
|
||||
dat += "<A href='?src=[REF(src)];create=[D.id];amount=10'>x10</A>"
|
||||
dat += "([D.materials[SSmaterials.GetMaterialRef(/datum/material/biomass)]/efficiency])<br>"
|
||||
dat += "([CEILING(D.materials[SSmaterials.GetMaterialRef(/datum/material/biomass)]/efficiency, 1)])<br>"
|
||||
dat += "</div>"
|
||||
else
|
||||
dat += "<div class='statusDisplay'>No container inside, please insert container.</div>"
|
||||
@@ -214,12 +214,16 @@
|
||||
to_chat(usr, "<span class='warning'>The biogenerator is in the process of working.</span>")
|
||||
return
|
||||
var/S = 0
|
||||
var/total = 0
|
||||
for(var/obj/item/reagent_containers/food/snacks/grown/I in contents)
|
||||
S += 5
|
||||
if(I.reagents.get_reagent_amount(/datum/reagent/consumable/nutriment) < 0.1)
|
||||
points += 1*productivity
|
||||
else points += I.reagents.get_reagent_amount(/datum/reagent/consumable/nutriment)*10*productivity
|
||||
var/nutri_amount = I.reagents.get_reagent_amount(/datum/reagent/consumable/nutriment)
|
||||
if(nutri_amount < 0.1)
|
||||
total += 1*productivity
|
||||
else
|
||||
total += nutri_amount*10*productivity
|
||||
qdel(I)
|
||||
points += round(total)
|
||||
if(S)
|
||||
processing = TRUE
|
||||
update_icon()
|
||||
@@ -235,12 +239,13 @@
|
||||
/obj/machinery/biogenerator/proc/check_cost(list/materials, multiplier = 1, remove_points = TRUE)
|
||||
if(materials.len != 1 || materials[1] != SSmaterials.GetMaterialRef(/datum/material/biomass))
|
||||
return FALSE
|
||||
if (materials[SSmaterials.GetMaterialRef(/datum/material/biomass)]*multiplier/efficiency > points)
|
||||
var/cost = CEILING(materials[SSmaterials.GetMaterialRef(/datum/material/biomass)]*multiplier/efficiency, 1)
|
||||
if (cost > points)
|
||||
menustat = "nopoints"
|
||||
return FALSE
|
||||
else
|
||||
if(remove_points)
|
||||
points -= materials[SSmaterials.GetMaterialRef(/datum/material/biomass)]*multiplier/efficiency
|
||||
points -= cost
|
||||
update_icon()
|
||||
updateUsrDialog()
|
||||
return TRUE
|
||||
|
||||
@@ -79,7 +79,9 @@
|
||||
|
||||
for(var/I in assembly_components)
|
||||
var/obj/item/integrated_circuit/IC = I
|
||||
. += IC.external_examine(user)
|
||||
var/text = IC.external_examine(user)
|
||||
if(text)
|
||||
. += text
|
||||
if(opened)
|
||||
interact(user)
|
||||
|
||||
|
||||
@@ -36,7 +36,9 @@ a creative player the means to solve many problems. Circuits are held inside an
|
||||
/obj/item/integrated_circuit/examine(mob/user)
|
||||
interact(user)
|
||||
. = ..()
|
||||
. += external_examine(user)
|
||||
var/text = external_examine(user)
|
||||
if(text)
|
||||
. += text
|
||||
|
||||
// Can be called via electronic_assembly/attackby()
|
||||
/obj/item/integrated_circuit/proc/additem(var/obj/item/I, var/mob/living/user)
|
||||
@@ -57,7 +59,7 @@ a creative player the means to solve many problems. Circuits are held inside an
|
||||
var/datum/integrated_io/activate/A = activators[k]
|
||||
if(A.linked.len)
|
||||
to_chat(user, "The '[A]' is connected to [A.get_linked_to_desc()].")
|
||||
any_examine(user)
|
||||
to_chat(user, any_examine(user))
|
||||
interact(user)
|
||||
|
||||
// This should be used when someone is examining from an 'outside' perspective, e.g. reading a screen or LED.
|
||||
|
||||
@@ -55,11 +55,11 @@
|
||||
SSmachines.setup_template_powernets(cables)
|
||||
SSair.setup_template_machinery(atmos_machines)
|
||||
|
||||
/datum/map_template/proc/load_new_z()
|
||||
/datum/map_template/proc/load_new_z(list/traits = list(ZTRAIT_AWAY = TRUE))
|
||||
var/x = round((world.maxx - width)/2)
|
||||
var/y = round((world.maxy - height)/2)
|
||||
|
||||
var/datum/space_level/level = SSmapping.add_new_zlevel(name, list(ZTRAIT_AWAY = TRUE))
|
||||
var/datum/space_level/level = SSmapping.add_new_zlevel(name, traits)
|
||||
var/datum/parsed_map/parsed = load_map(file(mappath), x, y, level.z_value, no_changeturf=(SSatoms.initialized == INITIALIZATION_INSSATOMS), placeOnTop=TRUE)
|
||||
var/list/bounds = parsed.bounds
|
||||
if(!bounds)
|
||||
@@ -121,6 +121,6 @@
|
||||
|
||||
//for your ever biggening badminnery kevinz000
|
||||
//❤ - Cyberboss
|
||||
/proc/load_new_z_level(var/file, var/name)
|
||||
/proc/load_new_z_level(file, name, list/traits)
|
||||
var/datum/map_template/template = new(file, name)
|
||||
template.load_new_z()
|
||||
return template.load_new_z(traits)
|
||||
|
||||
@@ -23,11 +23,7 @@
|
||||
if(!pref_species)
|
||||
var/rando_race = pick(GLOB.roundstart_races)
|
||||
pref_species = new rando_race()
|
||||
features = random_features(pref_species?.id)
|
||||
if(gender == MALE || gender != FEMALE)
|
||||
features["body_model"] = gender
|
||||
else if(gender == PLURAL)
|
||||
features["body_model"] = pick(MALE,FEMALE)
|
||||
features = random_features(pref_species?.id, gender)
|
||||
age = rand(AGE_MIN,AGE_MAX)
|
||||
|
||||
/datum/preferences/proc/update_preview_icon(equip_job = TRUE)
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
update_body_parts() //to update the carbon's new bodyparts appearance
|
||||
GLOB.carbon_list += src
|
||||
blood_volume = (BLOOD_VOLUME_NORMAL * blood_ratio)
|
||||
add_movespeed_modifier(/datum/movespeed_modifier/carbon_crawling)
|
||||
|
||||
/mob/living/carbon/Destroy()
|
||||
//This must be done first, so the mob ghosts correctly before DNA etc is nulled
|
||||
@@ -574,9 +575,9 @@
|
||||
become_husk("burn")
|
||||
med_hud_set_health()
|
||||
if(stat == SOFT_CRIT)
|
||||
add_movespeed_modifier(MOVESPEED_ID_CARBON_SOFTCRIT, TRUE, multiplicative_slowdown = SOFTCRIT_ADD_SLOWDOWN)
|
||||
add_movespeed_modifier(/datum/movespeed_modifier/carbon_softcrit)
|
||||
else
|
||||
remove_movespeed_modifier(MOVESPEED_ID_CARBON_SOFTCRIT, TRUE)
|
||||
remove_movespeed_modifier(/datum/movespeed_modifier/carbon_softcrit)
|
||||
|
||||
/mob/living/carbon/update_stamina()
|
||||
var/stam = getStaminaLoss()
|
||||
|
||||
@@ -1041,7 +1041,7 @@
|
||||
return FALSE
|
||||
|
||||
/mob/living/carbon/human/proc/clear_shove_slowdown()
|
||||
remove_movespeed_modifier(MOVESPEED_ID_SHOVE)
|
||||
remove_movespeed_modifier(/datum/movespeed_modifier/shove)
|
||||
var/active_item = get_active_held_item()
|
||||
if(is_type_in_typecache(active_item, GLOB.shove_disarming_types))
|
||||
visible_message("<span class='warning'>[src.name] regains their grip on \the [active_item]!</span>", "<span class='warning'>You regain your grip on \the [active_item]</span>", null, COMBAT_MESSAGE_RANGE)
|
||||
@@ -1050,17 +1050,17 @@
|
||||
. = ..()
|
||||
|
||||
if(HAS_TRAIT(src, TRAIT_IGNORESLOWDOWN))
|
||||
remove_movespeed_modifier(MOVESPEED_ID_DAMAGE_SLOWDOWN)
|
||||
remove_movespeed_modifier(MOVESPEED_ID_DAMAGE_SLOWDOWN_FLYING)
|
||||
remove_movespeed_modifier(/datum/movespeed_modifier/damage_slowdown)
|
||||
remove_movespeed_modifier(/datum/movespeed_modifier/damage_slowdown_flying)
|
||||
return
|
||||
var/stambufferinfluence = (bufferedstam*(100/stambuffer))*0.2 //CIT CHANGE - makes stamina buffer influence movedelay
|
||||
var/health_deficiency = ((100 + stambufferinfluence) - health + (getStaminaLoss()*0.75))//CIT CHANGE - reduces the impact of staminaloss and makes stamina buffer influence it
|
||||
if(health_deficiency >= 40)
|
||||
add_movespeed_modifier(MOVESPEED_ID_DAMAGE_SLOWDOWN, override = TRUE, multiplicative_slowdown = ((health_deficiency-39) / 75), blacklisted_movetypes = FLOATING|FLYING)
|
||||
add_movespeed_modifier(MOVESPEED_ID_DAMAGE_SLOWDOWN_FLYING, override = TRUE, multiplicative_slowdown = ((health_deficiency-39) / 25), movetypes = FLYING, blacklisted_movetypes = FLOATING)
|
||||
add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/damage_slowdown, TRUE, (health_deficiency-39) / 75)
|
||||
add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/damage_slowdown_flying, TRUE, (health_deficiency-39) / 25)
|
||||
else
|
||||
remove_movespeed_modifier(MOVESPEED_ID_DAMAGE_SLOWDOWN)
|
||||
remove_movespeed_modifier(MOVESPEED_ID_DAMAGE_SLOWDOWN_FLYING)
|
||||
remove_movespeed_modifier(/datum/movespeed_modifier/damage_slowdown)
|
||||
remove_movespeed_modifier(/datum/movespeed_modifier/damage_slowdown_flying)
|
||||
|
||||
/mob/living/carbon/human/do_after_coefficent()
|
||||
. = ..()
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
/mob/living/carbon/human/get_movespeed_modifiers()
|
||||
var/list/considering = ..()
|
||||
. = considering
|
||||
if(HAS_TRAIT(src, TRAIT_IGNORESLOWDOWN))
|
||||
for(var/id in .)
|
||||
var/list/data = .[id]
|
||||
if(data[MOVESPEED_DATA_INDEX_FLAGS] & IGNORE_NOSLOW)
|
||||
.[id] = data
|
||||
. = list()
|
||||
for(var/id in considering)
|
||||
var/datum/movespeed_modifier/M = considering[id]
|
||||
if(M.flags & IGNORE_NOSLOW || M.multiplicative_slowdown < 0)
|
||||
.[id] = M
|
||||
return
|
||||
return considering
|
||||
|
||||
/mob/living/carbon/human/movement_delay()
|
||||
. = ..()
|
||||
|
||||
@@ -331,7 +331,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
|
||||
if(mutant_bodyparts["meat_type"]) //I can't believe it's come to the meat
|
||||
H.type_of_meat = GLOB.meat_types[H.dna.features["meat_type"]]
|
||||
|
||||
C.add_movespeed_modifier(MOVESPEED_ID_SPECIES, TRUE, 100, override=TRUE, multiplicative_slowdown=speedmod, movetypes=(~FLYING))
|
||||
C.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/species, TRUE, multiplicative_slowdown = speedmod)
|
||||
|
||||
SEND_SIGNAL(C, COMSIG_SPECIES_GAIN, src, old_species)
|
||||
|
||||
@@ -349,7 +349,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
|
||||
for(var/X in inherent_traits)
|
||||
REMOVE_TRAIT(C, X, SPECIES_TRAIT)
|
||||
|
||||
C.remove_movespeed_modifier(MOVESPEED_ID_SPECIES)
|
||||
C.remove_movespeed_modifier(/datum/movespeed_modifier/species)
|
||||
|
||||
if(mutant_bodyparts["meat_type"])
|
||||
C.type_of_meat = GLOB.meat_types[C.dna.features["meat_type"]]
|
||||
@@ -1299,14 +1299,14 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
|
||||
if(H.overeatduration < 100)
|
||||
to_chat(H, "<span class='notice'>You feel fit again!</span>")
|
||||
REMOVE_TRAIT(H, TRAIT_FAT, OBESITY)
|
||||
H.remove_movespeed_modifier(MOVESPEED_ID_FAT)
|
||||
H.remove_movespeed_modifier(/datum/movespeed_modifier/obesity)
|
||||
H.update_inv_w_uniform()
|
||||
H.update_inv_wear_suit()
|
||||
else
|
||||
if(H.overeatduration >= 100)
|
||||
to_chat(H, "<span class='danger'>You suddenly feel blubbery!</span>")
|
||||
ADD_TRAIT(H, TRAIT_FAT, OBESITY)
|
||||
H.add_movespeed_modifier(MOVESPEED_ID_FAT, multiplicative_slowdown = 1.5)
|
||||
H.add_movespeed_modifier(/datum/movespeed_modifier/obesity)
|
||||
H.update_inv_w_uniform()
|
||||
H.update_inv_wear_suit()
|
||||
|
||||
@@ -1362,9 +1362,9 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
|
||||
if(!HAS_TRAIT(H, TRAIT_NOHUNGER))
|
||||
var/hungry = (500 - H.nutrition) / 5 //So overeat would be 100 and default level would be 80
|
||||
if(hungry >= 70)
|
||||
H.add_movespeed_modifier(MOVESPEED_ID_HUNGRY, override = TRUE, multiplicative_slowdown = (hungry / 50))
|
||||
H.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/hunger, multiplicative_slowdown = (hungry / 50))
|
||||
else
|
||||
H.remove_movespeed_modifier(MOVESPEED_ID_HUNGRY)
|
||||
H.remove_movespeed_modifier(/datum/movespeed_modifier/hunger)
|
||||
|
||||
switch(H.nutrition)
|
||||
if(NUTRITION_LEVEL_FULL to INFINITY)
|
||||
@@ -1615,7 +1615,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
|
||||
"You hear a slap."
|
||||
)
|
||||
return FALSE
|
||||
|
||||
|
||||
else
|
||||
user.do_attack_animation(target, ATTACK_EFFECT_DISARM)
|
||||
|
||||
@@ -1623,10 +1623,10 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
|
||||
user.adjustStaminaLossBuffered(1)
|
||||
else
|
||||
user.adjustStaminaLossBuffered(3)
|
||||
|
||||
|
||||
if(attacker_style && attacker_style.disarm_act(user,target))
|
||||
return TRUE
|
||||
|
||||
|
||||
if(target.w_uniform)
|
||||
target.w_uniform.add_fingerprint(user)
|
||||
//var/randomized_zone = ran_zone(user.zone_selected) CIT CHANGE - comments out to prevent compiling errors
|
||||
@@ -1659,7 +1659,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
|
||||
randn -= 25 //if you are a pugilist, you're slapping that item from them pretty reliably
|
||||
if(HAS_TRAIT(target, TRAIT_PUGILIST))
|
||||
randn += 25 //meanwhile, pugilists are less likely to get disarmed
|
||||
|
||||
|
||||
if(randn <= 35)//CIT CHANGE - changes this back to a 35% chance to accomodate for the above being commented out in favor of right-click pushing
|
||||
var/obj/item/I = null
|
||||
if(target.pulling)
|
||||
@@ -1932,8 +1932,8 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
|
||||
var/obj/item/target_held_item = target.get_active_held_item()
|
||||
if(!is_type_in_typecache(target_held_item, GLOB.shove_disarming_types))
|
||||
target_held_item = null
|
||||
if(!target.has_movespeed_modifier(MOVESPEED_ID_SHOVE))
|
||||
target.add_movespeed_modifier(MOVESPEED_ID_SHOVE, multiplicative_slowdown = SHOVE_SLOWDOWN_STRENGTH)
|
||||
if(!target.has_movespeed_modifier(/datum/movespeed_modifier/shove))
|
||||
target.add_movespeed_modifier(/datum/movespeed_modifier/shove)
|
||||
if(target_held_item)
|
||||
if(!HAS_TRAIT(target_held_item, TRAIT_NODROP))
|
||||
target.visible_message("<span class='danger'>[target.name]'s grip on \the [target_held_item] loosens!</span>",
|
||||
@@ -2084,7 +2084,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
|
||||
SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "cold")
|
||||
SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "hot", /datum/mood_event/hot)
|
||||
|
||||
H.remove_movespeed_modifier(MOVESPEED_ID_COLD)
|
||||
H.remove_movespeed_modifier(/datum/movespeed_modifier/cold)
|
||||
|
||||
var/burn_damage
|
||||
var/firemodifier = H.fire_stacks / 50
|
||||
@@ -2101,8 +2101,8 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
|
||||
else if(H.bodytemperature < BODYTEMP_COLD_DAMAGE_LIMIT && !HAS_TRAIT(H, TRAIT_RESISTCOLD))
|
||||
SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "hot")
|
||||
SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "cold", /datum/mood_event/cold)
|
||||
//Sorry for the nasty oneline but I don't want to assign a variable on something run pretty frequently
|
||||
H.add_movespeed_modifier(MOVESPEED_ID_COLD, override = TRUE, multiplicative_slowdown = ((BODYTEMP_COLD_DAMAGE_LIMIT - H.bodytemperature) / COLD_SLOWDOWN_FACTOR), blacklisted_movetypes = FLOATING)
|
||||
//Apply cold slowdown
|
||||
H.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/cold, multiplicative_slowdown = ((BODYTEMP_COLD_DAMAGE_LIMIT - H.bodytemperature) / COLD_SLOWDOWN_FACTOR))
|
||||
switch(H.bodytemperature)
|
||||
if(200 to BODYTEMP_COLD_DAMAGE_LIMIT)
|
||||
H.apply_damage(COLD_DAMAGE_LEVEL_1*coldmod*H.physiology.cold_mod, BURN)
|
||||
@@ -2112,7 +2112,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
|
||||
H.apply_damage(COLD_DAMAGE_LEVEL_3*coldmod*H.physiology.cold_mod, BURN)
|
||||
|
||||
else
|
||||
H.remove_movespeed_modifier(MOVESPEED_ID_COLD)
|
||||
H.remove_movespeed_modifier(/datum/movespeed_modifier/cold)
|
||||
SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "cold")
|
||||
SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "hot")
|
||||
|
||||
|
||||
@@ -65,12 +65,11 @@
|
||||
|
||||
/mob/living/carbon/monkey/on_reagent_change()
|
||||
. = ..()
|
||||
remove_movespeed_modifier(MOVESPEED_ID_MONKEY_REAGENT_SPEEDMOD, TRUE)
|
||||
var/amount
|
||||
if(reagents.has_reagent(/datum/reagent/medicine/morphine))
|
||||
amount = -1
|
||||
if(amount)
|
||||
add_movespeed_modifier(MOVESPEED_ID_MONKEY_REAGENT_SPEEDMOD, TRUE, 100, override = TRUE, multiplicative_slowdown = amount)
|
||||
add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/monkey_reagent_speedmod, TRUE, amount)
|
||||
|
||||
/mob/living/carbon/monkey/updatehealth()
|
||||
. = ..()
|
||||
@@ -78,7 +77,7 @@
|
||||
var/health_deficiency = (100 - health)
|
||||
if(health_deficiency >= 45)
|
||||
slow += (health_deficiency / 25)
|
||||
add_movespeed_modifier(MOVESPEED_ID_MONKEY_HEALTH_SPEEDMOD, TRUE, 100, override = TRUE, multiplicative_slowdown = slow)
|
||||
add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/monkey_health_speedmod, TRUE, slow)
|
||||
|
||||
/mob/living/carbon/monkey/adjust_bodytemperature(amount)
|
||||
. = ..()
|
||||
@@ -87,7 +86,7 @@
|
||||
slow += (283.222 - bodytemperature) / 10 * 1.75
|
||||
if(slow <= 0)
|
||||
return
|
||||
add_movespeed_modifier(MOVESPEED_ID_MONKEY_TEMPERATURE_SPEEDMOD, TRUE, 100, override = TRUE, multiplicative_slowdown = amount)
|
||||
add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/monkey_temperature_speedmod, TRUE, slow)
|
||||
|
||||
/mob/living/carbon/monkey/Stat()
|
||||
..()
|
||||
@@ -99,7 +98,6 @@
|
||||
if(changeling)
|
||||
stat("Chemical Storage", "[changeling.chem_charges]/[changeling.chem_storage]")
|
||||
stat("Absorbed DNA", changeling.absorbedcount)
|
||||
return
|
||||
|
||||
|
||||
/mob/living/carbon/monkey/verb/removeinternal()
|
||||
|
||||
@@ -94,11 +94,13 @@
|
||||
|
||||
if(should_be_lying)
|
||||
mobility_flags &= ~MOBILITY_STAND
|
||||
setMovetype(movement_type | CRAWLING)
|
||||
if(!lying) //force them on the ground
|
||||
lying = pick(90, 270)
|
||||
if(has_gravity() && !buckled)
|
||||
playsound(src, "bodyfall", 20, 1)
|
||||
else
|
||||
setMovetype(movement_type & ~CRAWLING)
|
||||
mobility_flags |= MOBILITY_STAND
|
||||
lying = 0
|
||||
|
||||
@@ -161,8 +163,8 @@
|
||||
if(!has_legs && has_arms < 2)
|
||||
limbless_slowdown += 6 - (has_arms * 3)
|
||||
if(limbless_slowdown)
|
||||
add_movespeed_modifier(MOVESPEED_ID_LIVING_LIMBLESS, update=TRUE, priority=100, override=TRUE, multiplicative_slowdown=limbless_slowdown, blacklisted_movetypes = FLYING|FLOATING)
|
||||
add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/limbless, multiplicative_slowdown = limbless_slowdown)
|
||||
else
|
||||
remove_movespeed_modifier(MOVESPEED_ID_LIVING_LIMBLESS, update=TRUE)
|
||||
remove_movespeed_modifier(/datum/movespeed_modifier/limbless)
|
||||
|
||||
return mobility_flags
|
||||
|
||||
@@ -36,38 +36,26 @@
|
||||
sprint_stamina_cost = CONFIG_GET(number/movedelay/sprint_stamina_cost)
|
||||
return ..()
|
||||
|
||||
/mob/living/movement_delay(ignorewalk = 0)
|
||||
. = ..()
|
||||
if(!CHECK_MOBILITY(src, MOBILITY_STAND))
|
||||
. += 6
|
||||
|
||||
/// whether or not we can slide under another living mob. defaults to if we're not dense. CanPass should check "overriding circumstances" like buckled mobs/having PASSMOB flag, etc.
|
||||
/mob/living/proc/can_move_under_living(mob/living/other)
|
||||
return !density
|
||||
|
||||
/mob/living/proc/update_move_intent_slowdown()
|
||||
var/mod = 0
|
||||
if(m_intent == MOVE_INTENT_WALK)
|
||||
mod = CONFIG_GET(number/movedelay/walk_delay)
|
||||
else
|
||||
mod = CONFIG_GET(number/movedelay/run_delay)
|
||||
if(!isnum(mod))
|
||||
mod = 1
|
||||
add_movespeed_modifier(MOVESPEED_ID_MOB_WALK_RUN_CONFIG_SPEED, TRUE, 100, override = TRUE, multiplicative_slowdown = mod)
|
||||
add_movespeed_modifier((m_intent == MOVE_INTENT_WALK)? /datum/movespeed_modifier/config_walk_run/walk : /datum/movespeed_modifier/config_walk_run/run)
|
||||
|
||||
/mob/living/proc/update_turf_movespeed(turf/open/T)
|
||||
if(isopenturf(T) && !is_flying())
|
||||
add_movespeed_modifier(MOVESPEED_ID_LIVING_TURF_SPEEDMOD, TRUE, 100, override = TRUE, multiplicative_slowdown = T.slowdown)
|
||||
if(isopenturf(T))
|
||||
add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/turf_slowdown, multiplicative_slowdown = T.slowdown)
|
||||
else
|
||||
remove_movespeed_modifier(MOVESPEED_ID_LIVING_TURF_SPEEDMOD)
|
||||
remove_movespeed_modifier(/datum/movespeed_modifier/turf_slowdown)
|
||||
|
||||
/mob/living/proc/update_pull_movespeed()
|
||||
if(pulling && isliving(pulling))
|
||||
var/mob/living/L = pulling
|
||||
if(drag_slowdown && L.lying && !L.buckled && grab_state < GRAB_AGGRESSIVE)
|
||||
add_movespeed_modifier(MOVESPEED_ID_PRONE_DRAGGING, multiplicative_slowdown = PULL_PRONE_SLOWDOWN)
|
||||
add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/bulky_drag, multiplicative_slowdown = PULL_PRONE_SLOWDOWN)
|
||||
return
|
||||
remove_movespeed_modifier(MOVESPEED_ID_PRONE_DRAGGING)
|
||||
remove_movespeed_modifier(/datum/movespeed_modifier/bulky_drag)
|
||||
|
||||
/mob/living/canZMove(dir, turf/target)
|
||||
return can_zTravel(target, dir) && (movement_type & FLYING)
|
||||
|
||||
@@ -273,9 +273,9 @@
|
||||
/mob/living/silicon/pai/Process_Spacemove(movement_dir = 0)
|
||||
. = ..()
|
||||
if(!.)
|
||||
add_movespeed_modifier(MOVESPEED_ID_PAI_SPACEWALK_SPEEDMOD, TRUE, 100, multiplicative_slowdown = 2)
|
||||
add_movespeed_modifier(/datum/movespeed_modifier/pai_spacewalk)
|
||||
return TRUE
|
||||
remove_movespeed_modifier(MOVESPEED_ID_PAI_SPACEWALK_SPEEDMOD, TRUE)
|
||||
remove_movespeed_modifier(/datum/movespeed_modifier/pai_spacewalk)
|
||||
return TRUE
|
||||
|
||||
/mob/living/silicon/pai/examine(mob/user)
|
||||
|
||||
@@ -237,7 +237,7 @@
|
||||
return
|
||||
|
||||
if(!CONFIG_GET(flag/disable_secborg) && GLOB.security_level < CONFIG_GET(number/minimum_secborg_alert))
|
||||
to_chat(src, "<span class='notice'>NOTICE: Due to local station regulations, the security cyborg module and its variants are only available during [num2seclevel(CONFIG_GET(number/minimum_secborg_alert))] alert and greater.</span>")
|
||||
to_chat(src, "<span class='notice'>NOTICE: Due to local station regulations, the security cyborg module and its variants are only available during [NUM2SECLEVEL(CONFIG_GET(number/minimum_secborg_alert))] alert and greater.</span>")
|
||||
|
||||
var/list/modulelist = list("Standard" = /obj/item/robot_module/standard, \
|
||||
"Engineering" = /obj/item/robot_module/engineering, \
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
icon_living = "carp"
|
||||
icon_dead = "carp_dead"
|
||||
icon_gib = "carp_gib"
|
||||
threat = 0.2
|
||||
threat = 0.1
|
||||
mob_biotypes = MOB_ORGANIC|MOB_BEAST
|
||||
speak_chance = 0
|
||||
turns_per_move = 5
|
||||
|
||||
@@ -186,10 +186,10 @@
|
||||
. = ..()
|
||||
if(slowed_by_webs)
|
||||
if(!(locate(/obj/structure/spider/stickyweb) in loc))
|
||||
remove_movespeed_modifier(MOVESPEED_ID_TARANTULA_WEB)
|
||||
remove_movespeed_modifier(/datum/movespeed_modifier/tarantula_web)
|
||||
slowed_by_webs = FALSE
|
||||
else if(locate(/obj/structure/spider/stickyweb) in loc)
|
||||
add_movespeed_modifier(MOVESPEED_ID_TARANTULA_WEB, priority=100, multiplicative_slowdown=3)
|
||||
add_movespeed_modifier(/datum/movespeed_modifier/tarantula_web)
|
||||
slowed_by_webs = TRUE
|
||||
|
||||
//midwives are the queen of the spiders, can send messages to all them and web faster. That rare round where you get a queen spider and turn your 'for honor' players into 'r6siege' players will be a fun one.
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
|
||||
|
||||
/**
|
||||
* Kudzu Flower Bud
|
||||
*
|
||||
* A flower created by flowering kudzu which spawns a venus human trap after a certain amount of time has passed.
|
||||
*
|
||||
* A flower created by kudzu with the flowering mutation. Spawns a venus human trap after 2 minutes under normal circumstances.
|
||||
* Also spawns 4 vines going out in diagonal directions from the bud. Any living creature not aligned with plants is damaged by these vines.
|
||||
* Once it grows a venus human trap, the bud itself will destroy itself.
|
||||
*
|
||||
*/
|
||||
/obj/structure/alien/resin/flower_bud_enemy //inheriting basic attack/damage stuff from alien structures
|
||||
name = "flower bud"
|
||||
desc = "A large pulsating plant..."
|
||||
@@ -9,9 +17,9 @@
|
||||
opacity = 0
|
||||
canSmoothWith = list()
|
||||
smooth = SMOOTH_FALSE
|
||||
/// The amount of time it takes to create a venus human trap, in deciseconds
|
||||
var/growth_time = 1200
|
||||
|
||||
|
||||
/obj/structure/alien/resin/flower_bud_enemy/Initialize()
|
||||
. = ..()
|
||||
var/list/anchors = list()
|
||||
@@ -25,36 +33,49 @@
|
||||
B.sleep_time = 10 //these shouldn't move, so let's slow down updates to 1 second (any slower and the deletion of the vines would be too slow)
|
||||
addtimer(CALLBACK(src, .proc/bear_fruit), growth_time)
|
||||
|
||||
/**
|
||||
* Spawns a venus human trap, then qdels itself.
|
||||
*
|
||||
* Displays a message, spawns a human venus trap, then qdels itself.
|
||||
*/
|
||||
/obj/structure/alien/resin/flower_bud_enemy/proc/bear_fruit()
|
||||
visible_message("<span class='danger'>the plant has borne fruit!</span>")
|
||||
visible_message("<span class='danger'>The plant has borne fruit!</span>")
|
||||
new /mob/living/simple_animal/hostile/venus_human_trap(get_turf(src))
|
||||
qdel(src)
|
||||
|
||||
|
||||
/obj/effect/ebeam/vine
|
||||
name = "thick vine"
|
||||
mouse_opacity = MOUSE_OPACITY_ICON
|
||||
desc = "A thick vine, painful to the touch."
|
||||
|
||||
|
||||
/obj/effect/ebeam/vine/Crossed(atom/movable/AM)
|
||||
. = ..()
|
||||
if(isliving(AM))
|
||||
var/mob/living/L = AM
|
||||
if(!("vines" in L.faction))
|
||||
if(!isvineimmune(L))
|
||||
L.adjustBruteLoss(5)
|
||||
to_chat(L, "<span class='alert'>You cut yourself on the thorny vines.</span>")
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Venus Human Trap
|
||||
*
|
||||
* The result of a kudzu flower bud, these enemies use vines to drag prey close to them for attack.
|
||||
*
|
||||
* A carnivorious plant which uses vines to catch and ensnare prey. Spawns from kudzu flower buds.
|
||||
* Each one has a maximum of four vines, which can be attached to a variety of things. Carbons are stunned when a vine is attached to them, and movable entities are pulled closer over time.
|
||||
* Attempting to attach a vine to something with a vine already attached to it will pull all movable targets closer on command.
|
||||
* Once the prey is in melee range, melee attacks from the venus human trap heals itself for 10% of its max health, assuming the target is alive.
|
||||
* Akin to certain spiders, venus human traps can also be possessed and controlled by ghosts.
|
||||
*
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/venus_human_trap
|
||||
name = "venus human trap"
|
||||
desc = "Now you know how the fly feels."
|
||||
icon_state = "venus_human_trap"
|
||||
threat = 1
|
||||
layer = SPACEVINE_MOB_LAYER
|
||||
health = 50
|
||||
maxHealth = 50
|
||||
ranged = 1
|
||||
ranged = TRUE
|
||||
harm_intent_damage = 5
|
||||
obj_damage = 60
|
||||
melee_damage_lower = 25
|
||||
@@ -63,65 +84,110 @@
|
||||
attack_sound = 'sound/weapons/bladeslice.ogg'
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
unsuitable_atmos_damage = 0
|
||||
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
|
||||
faction = list("hostile","vines","plants")
|
||||
var/list/grasping = list()
|
||||
var/max_grasps = 4
|
||||
var/grasp_chance = 20
|
||||
var/grasp_pull_chance = 85
|
||||
var/grasp_range = 4
|
||||
del_on_death = 1
|
||||
initial_language_holder = /datum/language_holder/venus
|
||||
del_on_death = TRUE
|
||||
/// A list of all the plant's vines
|
||||
var/list/vines = list()
|
||||
/// The maximum amount of vines a plant can have at one time
|
||||
var/max_vines = 4
|
||||
/// How far away a plant can attach a vine to something
|
||||
var/vine_grab_distance = 5
|
||||
/// Whether or not this plant is ghost possessable
|
||||
var/playable_plant = FALSE //Normal plants can **not** have players.
|
||||
|
||||
/mob/living/simple_animal/hostile/venus_human_trap/Destroy()
|
||||
for(var/L in grasping)
|
||||
var/datum/beam/B = grasping[L]
|
||||
if(B)
|
||||
qdel(B)
|
||||
grasping = null
|
||||
return ..()
|
||||
/mob/living/simple_animal/hostile/venus_human_trap/ghost_playable
|
||||
playable_plant = TRUE //For admins that want to buss some harmless plants
|
||||
|
||||
/mob/living/simple_animal/hostile/venus_human_trap/handle_automated_action()
|
||||
if(..())
|
||||
for(var/mob/living/L in grasping)
|
||||
if(L.stat == DEAD)
|
||||
var/datum/beam/B = grasping[L]
|
||||
if(B)
|
||||
B.End()
|
||||
grasping -= L
|
||||
|
||||
//Can attack+pull multiple times per cycle
|
||||
if(L.Adjacent(src))
|
||||
L.attack_animal(src)
|
||||
else
|
||||
if(prob(grasp_pull_chance))
|
||||
setDir(get_dir(src,L) )//staaaare
|
||||
step(L,get_dir(L,src)) //reel them in
|
||||
L.DefaultCombatKnockdown(60) //you can't get away now~
|
||||
|
||||
if(grasping.len < max_grasps)
|
||||
grasping:
|
||||
for(var/mob/living/L in view(grasp_range, src))
|
||||
if(L == src || faction_check_mob(L) || (L in grasping) || L == target)
|
||||
continue
|
||||
for(var/t in getline(src,L))
|
||||
for(var/a in t)
|
||||
var/atom/A = a
|
||||
if(A.density && A != L)
|
||||
continue grasping
|
||||
if(prob(grasp_chance))
|
||||
to_chat(L, "<span class='userdanger'>\The [src] has you entangled!</span>")
|
||||
grasping[L] = Beam(L, "vine", time=INFINITY, maxdistance=5, beam_type=/obj/effect/ebeam/vine)
|
||||
|
||||
break //only take 1 new victim per cycle
|
||||
/mob/living/simple_animal/hostile/venus_human_trap/Life()
|
||||
. = ..()
|
||||
pull_vines()
|
||||
|
||||
/mob/living/simple_animal/hostile/venus_human_trap/AttackingTarget()
|
||||
. = ..()
|
||||
if(isliving(target))
|
||||
var/mob/living/L = target
|
||||
if(L.stat != DEAD)
|
||||
adjustHealth(-maxHealth * 0.1)
|
||||
|
||||
/mob/living/simple_animal/hostile/venus_human_trap/OpenFire(atom/the_target)
|
||||
var/dist = get_dist(src,the_target)
|
||||
Beam(the_target, "vine", time=dist*2, maxdistance=dist+2, beam_type=/obj/effect/ebeam/vine)
|
||||
the_target.attack_animal(src)
|
||||
for(var/datum/beam/B in vines)
|
||||
if(B.target == the_target)
|
||||
pull_vines()
|
||||
ranged_cooldown = world.time + (ranged_cooldown_time * 0.5)
|
||||
return
|
||||
if(get_dist(src,the_target) > vine_grab_distance || vines.len == max_vines)
|
||||
return
|
||||
for(var/turf/T in getline(src,target))
|
||||
if (T.density)
|
||||
return
|
||||
for(var/obj/O in T)
|
||||
if(O.density)
|
||||
return
|
||||
|
||||
var/datum/beam/newVine = Beam(the_target, "vine", time=INFINITY, maxdistance = vine_grab_distance, beam_type=/obj/effect/ebeam/vine)
|
||||
RegisterSignal(newVine, COMSIG_PARENT_QDELETING, .proc/remove_vine, newVine)
|
||||
vines += newVine
|
||||
if(isliving(the_target))
|
||||
var/mob/living/L = the_target
|
||||
L.Paralyze(20)
|
||||
ranged_cooldown = world.time + ranged_cooldown_time
|
||||
|
||||
/mob/living/simple_animal/hostile/venus_human_trap/CanAttack(atom/the_target)
|
||||
/mob/living/simple_animal/hostile/venus_human_trap/Login()
|
||||
. = ..()
|
||||
to_chat(src, "<span class='boldwarning'>You a venus human trap! Protect the kudzu at all costs, and feast on those who oppose you!</span>")
|
||||
|
||||
/mob/living/simple_animal/hostile/venus_human_trap/attack_ghost(mob/user)
|
||||
. = ..()
|
||||
if(.)
|
||||
if(the_target in grasping)
|
||||
return 0
|
||||
return
|
||||
humanize_plant(user)
|
||||
|
||||
/**
|
||||
* Sets a ghost to control the plant if the plant is eligible
|
||||
*
|
||||
* Asks the interacting ghost if they would like to control the plant.
|
||||
* If they answer yes, and another ghost hasn't taken control, sets the ghost to control the plant.
|
||||
* Arguments:
|
||||
* * mob/user - The ghost to possibly control the plant
|
||||
*/
|
||||
|
||||
/mob/living/simple_animal/hostile/venus_human_trap/proc/humanize_plant(mob/user)
|
||||
if(key || !playable_plant || stat)
|
||||
return
|
||||
var/plant_ask = alert("Become a venus human trap?", "Are you reverse vegan?", "Yes", "No")
|
||||
if(plant_ask == "No" || QDELETED(src))
|
||||
return
|
||||
if(key)
|
||||
to_chat(user, "<span class='warning'>Someone else already took this plant!</span>")
|
||||
return
|
||||
key = user.key
|
||||
log_game("[key_name(src)] took control of [name].")
|
||||
|
||||
/**
|
||||
* Manages how the vines should affect the things they're attached to.
|
||||
*
|
||||
* Pulls all movable targets of the vines closer to the plant
|
||||
* If the target is on the same tile as the plant, destroy the vine
|
||||
* Removes any QDELETED vines from the vines list.
|
||||
*/
|
||||
/mob/living/simple_animal/hostile/venus_human_trap/proc/pull_vines()
|
||||
for(var/datum/beam/B in vines)
|
||||
if(istype(B.target, /atom/movable))
|
||||
var/atom/movable/AM = B.target
|
||||
if(!AM.anchored)
|
||||
step(AM,get_dir(AM,src))
|
||||
if(get_dist(src,B.target) == 0)
|
||||
B.End()
|
||||
|
||||
/**
|
||||
* Removes a vine from the list.
|
||||
*
|
||||
* Removes the vine from our list.
|
||||
* Called specifically when the vine is about to be destroyed, so we don't have any null references.
|
||||
* Arguments:
|
||||
* * datum/beam/vine - The vine to be removed from the list.
|
||||
*/
|
||||
mob/living/simple_animal/hostile/venus_human_trap/proc/remove_vine(datum/beam/vine, force)
|
||||
vines -= vine
|
||||
|
||||
@@ -292,8 +292,8 @@
|
||||
|
||||
/mob/living/simple_animal/proc/update_simplemob_varspeed()
|
||||
if(speed == 0)
|
||||
remove_movespeed_modifier(MOVESPEED_ID_SIMPLEMOB_VARSPEED, TRUE)
|
||||
add_movespeed_modifier(MOVESPEED_ID_SIMPLEMOB_VARSPEED, TRUE, 100, multiplicative_slowdown = speed, override = TRUE)
|
||||
remove_movespeed_modifier(/datum/movespeed_modifier/simplemob_varspeed)
|
||||
add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/simplemob_varspeed, multiplicative_slowdown = speed)
|
||||
|
||||
/mob/living/simple_animal/Stat()
|
||||
..()
|
||||
|
||||
@@ -147,25 +147,25 @@
|
||||
|
||||
/mob/living/simple_animal/slime/on_reagent_change()
|
||||
. = ..()
|
||||
remove_movespeed_modifier(MOVESPEED_ID_SLIME_REAGENTMOD, TRUE)
|
||||
remove_movespeed_modifier(/datum/movespeed_modifier/slime_reagentmod)
|
||||
var/amount = 0
|
||||
if(reagents.has_reagent(/datum/reagent/medicine/morphine)) // morphine slows slimes down
|
||||
amount = 2
|
||||
if(reagents.has_reagent(/datum/reagent/consumable/frostoil)) // Frostoil also makes them move VEEERRYYYYY slow
|
||||
amount = 5
|
||||
if(amount)
|
||||
add_movespeed_modifier(MOVESPEED_ID_SLIME_REAGENTMOD, TRUE, 100, override = TRUE, multiplicative_slowdown = amount)
|
||||
add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/slime_reagentmod, multiplicative_slowdown = amount)
|
||||
|
||||
/mob/living/simple_animal/slime/updatehealth()
|
||||
. = ..()
|
||||
remove_movespeed_modifier(MOVESPEED_ID_SLIME_HEALTHMOD, FALSE)
|
||||
remove_movespeed_modifier(/datum/movespeed_modifier/slime_healthmod)
|
||||
var/health_deficiency = (100 - health)
|
||||
var/mod = 0
|
||||
if(health_deficiency >= 45)
|
||||
mod += (health_deficiency / 25)
|
||||
if(health <= 0)
|
||||
mod += 2
|
||||
add_movespeed_modifier(MOVESPEED_ID_SLIME_HEALTHMOD, TRUE, 100, multiplicative_slowdown = mod)
|
||||
add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/slime_healthmod, multiplicative_slowdown = mod)
|
||||
|
||||
/mob/living/simple_animal/slime/adjust_bodytemperature()
|
||||
. = ..()
|
||||
@@ -173,9 +173,8 @@
|
||||
if(bodytemperature >= 330.23) // 135 F or 57.08 C
|
||||
mod = -1 // slimes become supercharged at high temperatures
|
||||
else if(bodytemperature < 183.222)
|
||||
mod = (283.222 - bodytemperature) / 10 * 1.75
|
||||
if(mod)
|
||||
add_movespeed_modifier(MOVESPEED_ID_SLIME_TEMPMOD, TRUE, 100, override = TRUE, multiplicative_slowdown = mod)
|
||||
mod = min(15, (283.222 - bodytemperature) / 10 * 1.75)
|
||||
add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/slime_tempmod, multiplicative_slowdown = mod)
|
||||
|
||||
/mob/living/simple_animal/slime/ObjBump(obj/O)
|
||||
if(!client && powerlevel > 0)
|
||||
|
||||
@@ -622,10 +622,40 @@
|
||||
tod = STATION_TIME_TIMESTAMP("hh:mm:ss", world.time)
|
||||
update_stat()
|
||||
|
||||
///Unignores all slowdowns that lack the IGNORE_NOSLOW flag.
|
||||
/mob/living/proc/unignore_slowdown(source)
|
||||
REMOVE_TRAIT(src, TRAIT_IGNORESLOWDOWN, source)
|
||||
update_movespeed(FALSE)
|
||||
update_movespeed()
|
||||
|
||||
///Ignores all slowdowns that lack the IGNORE_NOSLOW flag.
|
||||
/mob/living/proc/ignore_slowdown(source)
|
||||
ADD_TRAIT(src, TRAIT_IGNORESLOWDOWN, source)
|
||||
update_movespeed(FALSE)
|
||||
update_movespeed()
|
||||
|
||||
///Ignores specific slowdowns. Accepts a list of slowdowns.
|
||||
/mob/living/proc/add_movespeed_mod_immunities(source, slowdown_type, update = TRUE)
|
||||
if(islist(slowdown_type))
|
||||
for(var/listed_type in slowdown_type)
|
||||
if(ispath(listed_type))
|
||||
listed_type = "[listed_type]" //Path2String
|
||||
LAZYADDASSOC(movespeed_mod_immunities, listed_type, source)
|
||||
else
|
||||
if(ispath(slowdown_type))
|
||||
slowdown_type = "[slowdown_type]" //Path2String
|
||||
LAZYADDASSOC(movespeed_mod_immunities, slowdown_type, source)
|
||||
if(update)
|
||||
update_movespeed()
|
||||
|
||||
///Unignores specific slowdowns. Accepts a list of slowdowns.
|
||||
/mob/living/proc/remove_movespeed_mod_immunities(source, slowdown_type, update = TRUE)
|
||||
if(islist(slowdown_type))
|
||||
for(var/listed_type in slowdown_type)
|
||||
if(ispath(listed_type))
|
||||
listed_type = "[listed_type]" //Path2String
|
||||
LAZYREMOVEASSOC(movespeed_mod_immunities, listed_type, source)
|
||||
else
|
||||
if(ispath(slowdown_type))
|
||||
slowdown_type = "[slowdown_type]" //Path2String
|
||||
LAZYREMOVEASSOC(movespeed_mod_immunities, slowdown_type, source)
|
||||
if(update)
|
||||
update_movespeed()
|
||||
|
||||
+11
-6
@@ -1033,17 +1033,22 @@ GLOBAL_VAR_INIT(exploit_warn_spam_prevention, 0)
|
||||
/// Updates the grab state of the mob and updates movespeed
|
||||
/mob/setGrabState(newstate)
|
||||
. = ..()
|
||||
if(grab_state == GRAB_PASSIVE)
|
||||
remove_movespeed_modifier(MOVESPEED_ID_MOB_GRAB_STATE, update=TRUE)
|
||||
else
|
||||
add_movespeed_modifier(MOVESPEED_ID_MOB_GRAB_STATE, update=TRUE, priority=100, override=TRUE, multiplicative_slowdown=grab_state*3, blacklisted_movetypes=FLOATING)
|
||||
switch(grab_state)
|
||||
if(GRAB_PASSIVE)
|
||||
remove_movespeed_modifier(MOVESPEED_ID_MOB_GRAB_STATE)
|
||||
if(GRAB_AGGRESSIVE)
|
||||
add_movespeed_modifier(/datum/movespeed_modifier/grab_slowdown/aggressive)
|
||||
if(GRAB_NECK)
|
||||
add_movespeed_modifier(/datum/movespeed_modifier/grab_slowdown/neck)
|
||||
if(GRAB_KILL)
|
||||
add_movespeed_modifier(/datum/movespeed_modifier/grab_slowdown/kill)
|
||||
|
||||
/mob/proc/update_equipment_speed_mods()
|
||||
var/speedies = equipped_speed_mods()
|
||||
if(!speedies)
|
||||
remove_movespeed_modifier(MOVESPEED_ID_MOB_EQUIPMENT, update=TRUE)
|
||||
remove_movespeed_modifier(/datum/movespeed_modifier/equipment_speedmod, update=TRUE)
|
||||
else
|
||||
add_movespeed_modifier(MOVESPEED_ID_MOB_EQUIPMENT, update=TRUE, priority=100, override=TRUE, multiplicative_slowdown=speedies, blacklisted_movetypes=FLOATING)
|
||||
add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/equipment_speedmod, multiplicative_slowdown = speedies)
|
||||
|
||||
/// Gets the combined speed modification of all worn items
|
||||
/// Except base mob type doesnt really wear items
|
||||
|
||||
@@ -42,8 +42,11 @@
|
||||
var/lying_prev = 0
|
||||
var/is_shifted = FALSE
|
||||
|
||||
//MOVEMENT SPEED
|
||||
/// List of movement speed modifiers applying to this mob
|
||||
var/list/movespeed_modification //Lazy list, see mob_movespeed.dm
|
||||
/// List of movement speed modifiers ignored by this mob. List -> List (id) -> List (sources)
|
||||
var/list/movespeed_mod_immunities //Lazy list, see mob_movespeed.dm
|
||||
/// The calculated mob speed slowdown based on the modifiers list
|
||||
var/cached_multiplicative_slowdown
|
||||
/////////////////
|
||||
|
||||
|
||||
@@ -251,9 +251,9 @@
|
||||
/mob/proc/update_gravity(has_gravity, override=FALSE)
|
||||
var/speed_change = max(0, has_gravity - STANDARD_GRAVITY)
|
||||
if(!speed_change)
|
||||
remove_movespeed_modifier(MOVESPEED_ID_MOB_GRAVITY, update=TRUE)
|
||||
remove_movespeed_modifier(/datum/movespeed_modifier/gravity)
|
||||
else
|
||||
add_movespeed_modifier(MOVESPEED_ID_MOB_GRAVITY, update=TRUE, priority=100, override=TRUE, multiplicative_slowdown=speed_change, blacklisted_movetypes=FLOATING)
|
||||
add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/gravity, multiplicative_slowdown = speed_change)
|
||||
|
||||
//bodypart selection - Cyberboss
|
||||
//8 toggles through head - eyes - mouth
|
||||
|
||||
@@ -1,126 +0,0 @@
|
||||
|
||||
/*Current movespeed modification list format: list(id = list(
|
||||
priority,
|
||||
flags,
|
||||
legacy slowdown/speedup amount,
|
||||
movetype_flags,
|
||||
blacklisted_movetypes,
|
||||
conflict
|
||||
))
|
||||
*/
|
||||
|
||||
//ANY ADD/REMOVE DONE IN UPDATE_MOVESPEED MUST HAVE THE UPDATE ARGUMENT SET AS FALSE!
|
||||
/mob/proc/add_movespeed_modifier(id, update=TRUE, priority=0, flags=NONE, override=FALSE, multiplicative_slowdown=0, movetypes=ALL, blacklisted_movetypes=NONE, conflict=FALSE)
|
||||
var/list/temp = list(priority, flags, multiplicative_slowdown, movetypes, blacklisted_movetypes, conflict) //build the modification list
|
||||
var/resort = TRUE
|
||||
if(LAZYACCESS(movespeed_modification, id))
|
||||
var/list/existing_data = movespeed_modification[id]
|
||||
if(movespeed_modifier_identical_check(existing_data, temp))
|
||||
return FALSE
|
||||
if(!override)
|
||||
return FALSE
|
||||
if(priority == existing_data[MOVESPEED_DATA_INDEX_PRIORITY])
|
||||
resort = FALSE // We don't need to re-sort if we're replacing something already there and it's the same priority
|
||||
LAZYSET(movespeed_modification, id, temp)
|
||||
if(update)
|
||||
update_movespeed(resort)
|
||||
return TRUE
|
||||
|
||||
/mob/proc/remove_movespeed_modifier(id, update = TRUE)
|
||||
if(!LAZYACCESS(movespeed_modification, id))
|
||||
return FALSE
|
||||
LAZYREMOVE(movespeed_modification, id)
|
||||
UNSETEMPTY(movespeed_modification)
|
||||
if(update)
|
||||
update_movespeed(FALSE)
|
||||
return TRUE
|
||||
|
||||
/mob/vv_edit_var(var_name, var_value)
|
||||
var/slowdown_edit = (var_name == NAMEOF(src, cached_multiplicative_slowdown))
|
||||
var/diff
|
||||
if(slowdown_edit && isnum(cached_multiplicative_slowdown) && isnum(var_value))
|
||||
remove_movespeed_modifier(MOVESPEED_ID_ADMIN_VAREDIT)
|
||||
diff = var_value - cached_multiplicative_slowdown
|
||||
. = ..()
|
||||
if(. && slowdown_edit && isnum(diff))
|
||||
add_movespeed_modifier(MOVESPEED_ID_ADMIN_VAREDIT, TRUE, 100, override = TRUE, multiplicative_slowdown = diff)
|
||||
|
||||
/mob/proc/has_movespeed_modifier(id)
|
||||
return LAZYACCESS(movespeed_modification, id)
|
||||
|
||||
/mob/proc/update_config_movespeed()
|
||||
add_movespeed_modifier(MOVESPEED_ID_CONFIG_SPEEDMOD, FALSE, 100, override = TRUE, multiplicative_slowdown = get_config_multiplicative_speed())
|
||||
|
||||
/mob/proc/get_config_multiplicative_speed()
|
||||
if(!islist(GLOB.mob_config_movespeed_type_lookup) || !GLOB.mob_config_movespeed_type_lookup[type])
|
||||
return 0
|
||||
else
|
||||
return GLOB.mob_config_movespeed_type_lookup[type]
|
||||
|
||||
/mob/proc/update_movespeed(resort = TRUE)
|
||||
if(resort)
|
||||
sort_movespeed_modlist()
|
||||
. = 0
|
||||
var/list/conflict_tracker = list()
|
||||
for(var/id in get_movespeed_modifiers())
|
||||
var/list/data = movespeed_modification[id]
|
||||
if(!(data[MOVESPEED_DATA_INDEX_MOVETYPE] & movement_type)) // We don't affect any of these move types, skip
|
||||
continue
|
||||
if(data[MOVESPEED_DATA_INDEX_BL_MOVETYPE] & movement_type) // There's a movetype here that disables this modifier, skip
|
||||
continue
|
||||
var/conflict = data[MOVESPEED_DATA_INDEX_CONFLICT]
|
||||
var/amt = data[MOVESPEED_DATA_INDEX_MULTIPLICATIVE_SLOWDOWN]
|
||||
if(conflict)
|
||||
// Conflicting modifiers prioritize the larger slowdown or the larger speedup
|
||||
// We purposefuly don't handle mixing speedups and slowdowns on the same id
|
||||
if(abs(conflict_tracker[conflict]) < abs(amt))
|
||||
conflict_tracker[conflict] = amt
|
||||
else
|
||||
continue
|
||||
. += amt
|
||||
cached_multiplicative_slowdown = .
|
||||
|
||||
/mob/proc/get_movespeed_modifiers()
|
||||
return movespeed_modification
|
||||
|
||||
/mob/proc/movespeed_modifier_identical_check(list/mod1, list/mod2)
|
||||
if(!islist(mod1) || !islist(mod2) || mod1.len < MOVESPEED_DATA_INDEX_MAX || mod2.len < MOVESPEED_DATA_INDEX_MAX)
|
||||
return FALSE
|
||||
for(var/i in 1 to MOVESPEED_DATA_INDEX_MAX)
|
||||
if(mod1[i] != mod2[i])
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/mob/proc/total_multiplicative_slowdown()
|
||||
. = 0
|
||||
for(var/id in get_movespeed_modifiers())
|
||||
var/list/data = movespeed_modification[id]
|
||||
. += data[MOVESPEED_DATA_INDEX_MULTIPLICATIVE_SLOWDOWN]
|
||||
|
||||
/proc/movespeed_data_null_check(list/data) //Determines if a data list is not meaningful and should be discarded.
|
||||
. = TRUE
|
||||
if(data[MOVESPEED_DATA_INDEX_MULTIPLICATIVE_SLOWDOWN])
|
||||
. = FALSE
|
||||
|
||||
/mob/proc/sort_movespeed_modlist() //Verifies it too. Sorts highest priority (first applied) to lowest priority (last applied)
|
||||
if(!movespeed_modification)
|
||||
return
|
||||
var/list/assembled = list()
|
||||
for(var/our_id in movespeed_modification)
|
||||
var/list/our_data = movespeed_modification[our_id]
|
||||
if(!islist(our_data) || (our_data.len < MOVESPEED_DATA_INDEX_PRIORITY) || movespeed_data_null_check(our_data))
|
||||
movespeed_modification -= our_id
|
||||
continue
|
||||
var/our_priority = our_data[MOVESPEED_DATA_INDEX_PRIORITY]
|
||||
var/resolved = FALSE
|
||||
for(var/their_id in assembled)
|
||||
var/list/their_data = assembled[their_id]
|
||||
if(their_data[MOVESPEED_DATA_INDEX_PRIORITY] < our_priority)
|
||||
assembled.Insert(assembled.Find(their_id), our_id)
|
||||
assembled[our_id] = our_data
|
||||
resolved = TRUE
|
||||
break
|
||||
if(!resolved)
|
||||
assembled[our_id] = our_data
|
||||
movespeed_modification = assembled
|
||||
UNSETEMPTY(movespeed_modification)
|
||||
@@ -0,0 +1,217 @@
|
||||
/*! Movespeed modification datums.
|
||||
|
||||
How move speed for mobs works
|
||||
|
||||
Move speed is now calculated by using modifier datums which are added to mobs. Some of them (nonvariable ones) are globally cached, the variable ones are instanced and changed based on need.
|
||||
|
||||
This gives us the ability to have multiple sources of movespeed, reliabily keep them applied and remove them when they should be
|
||||
|
||||
THey can have unique sources and a bunch of extra fancy flags that control behaviour
|
||||
|
||||
Previously trying to update move speed was a shot in the dark that usually meant mobs got stuck going faster or slower
|
||||
|
||||
Movespeed modification list is a simple key = datum system. Key will be the datum's ID if it is overridden to not be null, or type if it is not.
|
||||
|
||||
DO NOT override datum IDs unless you are going to have multiple types that must overwrite each other. It's more efficient to use types, ID functionality is only kept for cases where dynamic creation of modifiers need to be done.
|
||||
|
||||
When update movespeed is called, the list of items is iterated, according to flags priority and a bunch of conditions
|
||||
this spits out a final calculated value which is used as a modifer to last_move + modifier for calculating when a mob
|
||||
can next move
|
||||
|
||||
Key procs
|
||||
* [add_movespeed_modifier](mob.html#proc/add_movespeed_modifier)
|
||||
* [remove_movespeed_modifier](mob.html#proc/remove_movespeed_modifier)
|
||||
* [has_movespeed_modifier](mob.html#proc/has_movespeed_modifier)
|
||||
* [update_movespeed](mob.html#proc/update_movespeed)
|
||||
*/
|
||||
|
||||
/datum/movespeed_modifier
|
||||
/// Whether or not this is a variable modifier. Variable modifiers can NOT be ever auto-cached. ONLY CHECKED VIA INITIAL(), EFFECTIVELY READ ONLY (and for very good reason)
|
||||
var/variable = FALSE
|
||||
|
||||
/// Unique ID. You can never have different modifications with the same ID. By default, this SHOULD NOT be set. Only set it for cases where you're dynamically making modifiers/need to have two types overwrite each other. If unset, uses path (converted to text) as ID.
|
||||
var/id
|
||||
|
||||
/// Higher ones override lower priorities. This is NOT used for ID, ID must be unique, if it isn't unique the newer one overwrites automatically if overriding.
|
||||
var/priority = 0
|
||||
var/flags = NONE
|
||||
|
||||
/// Multiplicative slowdown
|
||||
var/multiplicative_slowdown = 0
|
||||
|
||||
/// Movetypes this applies to
|
||||
var/movetypes = ALL
|
||||
|
||||
/// Movetypes this never applies to
|
||||
var/blacklisted_movetypes = NONE
|
||||
|
||||
/// Other modification datums this conflicts with.
|
||||
var/conflicts_with
|
||||
|
||||
/datum/movespeed_modifier/New()
|
||||
. = ..()
|
||||
if(!id)
|
||||
id = "[type]" //We turn the path into a string.
|
||||
|
||||
GLOBAL_LIST_EMPTY(movespeed_modification_cache)
|
||||
|
||||
/// Grabs a STATIC MODIFIER datum from cache. YOU MUST NEVER EDIT THESE DATUMS, OR IT WILL AFFECT ANYTHING ELSE USING IT TOO!
|
||||
/proc/get_cached_movespeed_modifier(modtype)
|
||||
if(!ispath(modtype, /datum/movespeed_modifier))
|
||||
CRASH("[modtype] is not a movespeed modification typepath.")
|
||||
var/datum/movespeed_modifier/M = modtype
|
||||
if(initial(M.variable))
|
||||
CRASH("[modtype] is a variable modifier, and can never be cached.")
|
||||
M = GLOB.movespeed_modification_cache[modtype]
|
||||
if(!M)
|
||||
M = GLOB.movespeed_modification_cache[modtype] = new modtype
|
||||
return M
|
||||
|
||||
///Add a move speed modifier to a mob. If a variable subtype is passed in as the first argument, it will make a new datum. If ID conflicts, it will overwrite the old ID.
|
||||
/mob/proc/add_movespeed_modifier(datum/movespeed_modifier/type_or_datum, update = TRUE)
|
||||
if(ispath(type_or_datum))
|
||||
if(!initial(type_or_datum.variable))
|
||||
type_or_datum = get_cached_movespeed_modifier(type_or_datum)
|
||||
else
|
||||
type_or_datum = new type_or_datum
|
||||
var/datum/movespeed_modifier/existing = LAZYACCESS(movespeed_modification, type_or_datum.id)
|
||||
if(existing)
|
||||
if(existing == type_or_datum) //same thing don't need to touch
|
||||
return TRUE
|
||||
remove_movespeed_modifier(existing, FALSE)
|
||||
if(length(movespeed_modification))
|
||||
BINARY_INSERT(type_or_datum.id, movespeed_modification, datum/movespeed_modifier, type_or_datum, priority, COMPARE_VALUE)
|
||||
LAZYSET(movespeed_modification, type_or_datum.id, type_or_datum)
|
||||
if(update)
|
||||
update_movespeed()
|
||||
return TRUE
|
||||
|
||||
/// Remove a move speed modifier from a mob, whether static or variable.
|
||||
/mob/proc/remove_movespeed_modifier(datum/movespeed_modifier/type_id_datum, update = TRUE)
|
||||
var/key
|
||||
if(ispath(type_id_datum))
|
||||
key = initial(type_id_datum.id) || "[type_id_datum]" //id if set, path set to string if not.
|
||||
else if(!istext(type_id_datum)) //if it isn't text it has to be a datum, as it isn't a type.
|
||||
key = type_id_datum.id
|
||||
else //assume it's an id
|
||||
key = type_id_datum
|
||||
if(!LAZYACCESS(movespeed_modification, key))
|
||||
return FALSE
|
||||
LAZYREMOVE(movespeed_modification, key)
|
||||
if(update)
|
||||
update_movespeed(FALSE)
|
||||
return TRUE
|
||||
|
||||
/*! Used for variable slowdowns like hunger/health loss/etc, works somewhat like the old list-based modification adds. Returns the modifier datum if successful
|
||||
How this SHOULD work is:
|
||||
1. Ensures type_id_datum one way or another refers to a /variable datum. This makes sure it can't be cached. This includes if it's already in the modification list.
|
||||
2. Instantiate a new datum if type_id_datum isn't already instantiated + in the list, using the type. Obviously, wouldn't work for ID only.
|
||||
3. Add the datum if necessary using the regular add proc
|
||||
4. If any of the rest of the args are not null (see: multiplicative slowdown), modify the datum
|
||||
5. Update if necessary
|
||||
*/
|
||||
/mob/proc/add_or_update_variable_movespeed_modifier(datum/movespeed_modifier/type_id_datum, update = TRUE, multiplicative_slowdown)
|
||||
var/modified = FALSE
|
||||
var/inject = FALSE
|
||||
var/datum/movespeed_modifier/final
|
||||
if(istext(type_id_datum))
|
||||
final = LAZYACCESS(movespeed_modification, type_id_datum)
|
||||
if(!final)
|
||||
CRASH("Couldn't find existing modification when provided a text ID.")
|
||||
else if(ispath(type_id_datum))
|
||||
if(!initial(type_id_datum.variable))
|
||||
CRASH("Not a variable modifier")
|
||||
final = LAZYACCESS(movespeed_modification, initial(type_id_datum.id) || "[type_id_datum]")
|
||||
if(!final)
|
||||
final = new type_id_datum
|
||||
inject = TRUE
|
||||
modified = TRUE
|
||||
else
|
||||
if(!initial(type_id_datum.variable))
|
||||
CRASH("Not a variable modifier")
|
||||
final = type_id_datum
|
||||
if(!LAZYACCESS(movespeed_modification, final.id))
|
||||
inject = TRUE
|
||||
modified = TRUE
|
||||
if(!isnull(multiplicative_slowdown))
|
||||
final.multiplicative_slowdown = multiplicative_slowdown
|
||||
modified = TRUE
|
||||
if(inject)
|
||||
add_movespeed_modifier(final, FALSE)
|
||||
if(update && modified)
|
||||
update_movespeed(TRUE)
|
||||
return final
|
||||
|
||||
/// Handles the special case of editing the movement var
|
||||
/mob/vv_edit_var(var_name, var_value)
|
||||
var/slowdown_edit = (var_name == NAMEOF(src, cached_multiplicative_slowdown))
|
||||
var/diff
|
||||
if(slowdown_edit && isnum(cached_multiplicative_slowdown) && isnum(var_value))
|
||||
remove_movespeed_modifier(/datum/movespeed_modifier/admin_varedit)
|
||||
diff = var_value - cached_multiplicative_slowdown
|
||||
. = ..()
|
||||
if(. && slowdown_edit && isnum(diff))
|
||||
add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/admin_varedit, multiplicative_slowdown = diff)
|
||||
|
||||
///Is there a movespeed modifier for this mob
|
||||
/mob/proc/has_movespeed_modifier(datum/movespeed_modifier/datum_type_id)
|
||||
var/key
|
||||
if(ispath(datum_type_id))
|
||||
key = initial(datum_type_id.id) || "[datum_type_id]"
|
||||
else if(istext(datum_type_id))
|
||||
key = datum_type_id
|
||||
else
|
||||
key = datum_type_id.id
|
||||
return LAZYACCESS(movespeed_modification, key)
|
||||
|
||||
/// Set or update the global movespeed config on a mob
|
||||
/mob/proc/update_config_movespeed()
|
||||
add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/mob_config_speedmod, multiplicative_slowdown = get_config_multiplicative_speed())
|
||||
|
||||
/// Get the global config movespeed of a mob by type
|
||||
/mob/proc/get_config_multiplicative_speed()
|
||||
if(!islist(GLOB.mob_config_movespeed_type_lookup) || !GLOB.mob_config_movespeed_type_lookup[type])
|
||||
return 0
|
||||
else
|
||||
return GLOB.mob_config_movespeed_type_lookup[type]
|
||||
|
||||
/// Go through the list of movespeed modifiers and calculate a final movespeed. ANY ADD/REMOVE DONE IN UPDATE_MOVESPEED MUST HAVE THE UPDATE ARGUMENT SET AS FALSE!
|
||||
/mob/proc/update_movespeed()
|
||||
. = 0
|
||||
var/list/conflict_tracker = list()
|
||||
for(var/key in get_movespeed_modifiers())
|
||||
var/datum/movespeed_modifier/M = movespeed_modification[key]
|
||||
if(!(M.movetypes & movement_type)) // We don't affect any of these move types, skip
|
||||
continue
|
||||
if(M.blacklisted_movetypes & movement_type) // There's a movetype here that disables this modifier, skip
|
||||
continue
|
||||
var/conflict = M.conflicts_with
|
||||
var/amt = M.multiplicative_slowdown
|
||||
if(conflict)
|
||||
// Conflicting modifiers prioritize the larger slowdown or the larger speedup
|
||||
// We purposefuly don't handle mixing speedups and slowdowns on the same id
|
||||
if(abs(conflict_tracker[conflict]) < abs(amt))
|
||||
conflict_tracker[conflict] = amt
|
||||
else
|
||||
continue
|
||||
. += amt
|
||||
cached_multiplicative_slowdown = .
|
||||
|
||||
/// Get the move speed modifiers list of the mob
|
||||
/mob/proc/get_movespeed_modifiers()
|
||||
. = LAZYCOPY(movespeed_modification)
|
||||
for(var/id in movespeed_mod_immunities)
|
||||
. -= id
|
||||
|
||||
/// Calculate the total slowdown of all movespeed modifiers
|
||||
/mob/proc/total_multiplicative_slowdown()
|
||||
. = 0
|
||||
for(var/id in get_movespeed_modifiers())
|
||||
var/datum/movespeed_modifier/M = movespeed_modification[id]
|
||||
. += M.multiplicative_slowdown
|
||||
|
||||
/// Checks if a move speed modifier is valid and not missing any data
|
||||
/proc/movespeed_data_null_check(datum/movespeed_modifier/M) //Determines if a data list is not meaningful and should be discarded.
|
||||
. = TRUE
|
||||
if(M.multiplicative_slowdown)
|
||||
. = FALSE
|
||||
@@ -0,0 +1,21 @@
|
||||
/datum/movespeed_modifier/shrink_ray
|
||||
movetypes = GROUND
|
||||
multiplicative_slowdown = 4
|
||||
flags = IGNORE_NOSLOW
|
||||
|
||||
/datum/movespeed_modifier/snail_crawl
|
||||
multiplicative_slowdown = -7
|
||||
movetypes = GROUND
|
||||
|
||||
/datum/movespeed_modifier/sanity
|
||||
id = MOVESPEED_ID_SANITY
|
||||
blacklisted_movetypes = FLYING
|
||||
|
||||
/datum/movespeed_modifier/sanity/insane
|
||||
multiplicative_slowdown = 1.5
|
||||
|
||||
/datum/movespeed_modifier/sanity/crazy
|
||||
multiplicative_slowdown = 1
|
||||
|
||||
/datum/movespeed_modifier/sanity/disturbed
|
||||
multiplicative_slowdown = 0.5
|
||||
@@ -0,0 +1,20 @@
|
||||
/datum/movespeed_modifier/strained_muscles
|
||||
multiplicative_slowdown = -1
|
||||
blacklisted_movetypes = (FLYING|FLOATING)
|
||||
|
||||
/datum/movespeed_modifier/pai_spacewalk
|
||||
multiplicative_slowdown = 2
|
||||
flags = IGNORE_NOSLOW
|
||||
|
||||
/datum/movespeed_modifier/species
|
||||
movetypes = ~FLYING
|
||||
variable = TRUE
|
||||
|
||||
/datum/movespeed_modifier/dna_vault_speedup
|
||||
blacklisted_movetypes = (FLYING|FLOATING)
|
||||
multiplicative_slowdown = -1
|
||||
|
||||
/datum/movespeed_modifier/small_stride
|
||||
blacklisted_movetypes = (FLOATING|CRAWLING)
|
||||
variable = TRUE
|
||||
flags = IGNORE_NOSLOW
|
||||
@@ -0,0 +1,12 @@
|
||||
/datum/movespeed_modifier/jetpack
|
||||
conflicts_with = MOVE_CONFLICT_JETPACK
|
||||
movetypes = FLOATING
|
||||
|
||||
/datum/movespeed_modifier/jetpack/cybernetic
|
||||
multiplicative_slowdown = -0.5
|
||||
|
||||
/datum/movespeed_modifier/jetpack/fullspeed
|
||||
multiplicative_slowdown = -2
|
||||
|
||||
/datum/movespeed_modifier/die_of_fate
|
||||
multiplicative_slowdown = 1
|
||||
@@ -0,0 +1,6 @@
|
||||
/datum/movespeed_modifier/admin_varedit
|
||||
variable = TRUE
|
||||
|
||||
/datum/movespeed_modifier/yellow_orb
|
||||
multiplicative_slowdown = -2
|
||||
blacklisted_movetypes = (FLYING|FLOATING)
|
||||
@@ -0,0 +1,120 @@
|
||||
/datum/movespeed_modifier/obesity
|
||||
multiplicative_slowdown = 1.5
|
||||
|
||||
/datum/movespeed_modifier/monkey_reagent_speedmod
|
||||
blacklisted_movetypes = FLOATING
|
||||
variable = TRUE
|
||||
|
||||
/datum/movespeed_modifier/monkey_health_speedmod
|
||||
blacklisted_movetypes = FLOATING
|
||||
variable = TRUE
|
||||
|
||||
/datum/movespeed_modifier/monkey_temperature_speedmod
|
||||
blacklisted_movetypes = FLOATING
|
||||
variable = TRUE
|
||||
|
||||
/datum/movespeed_modifier/hunger
|
||||
variable = TRUE
|
||||
|
||||
/datum/movespeed_modifier/slaughter
|
||||
multiplicative_slowdown = -1
|
||||
|
||||
/datum/movespeed_modifier/damage_slowdown
|
||||
blacklisted_movetypes = FLOATING|FLYING
|
||||
variable = TRUE
|
||||
|
||||
/datum/movespeed_modifier/damage_slowdown_flying
|
||||
movetypes = FLOATING
|
||||
variable = TRUE
|
||||
|
||||
/datum/movespeed_modifier/equipment_speedmod
|
||||
variable = TRUE
|
||||
blacklisted_movetypes = FLOATING
|
||||
|
||||
/datum/movespeed_modifier/grab_slowdown
|
||||
id = MOVESPEED_ID_MOB_GRAB_STATE
|
||||
blacklisted_movetypes = FLOATING
|
||||
|
||||
/datum/movespeed_modifier/grab_slowdown/aggressive
|
||||
multiplicative_slowdown = 3
|
||||
|
||||
/datum/movespeed_modifier/grab_slowdown/neck
|
||||
multiplicative_slowdown = 6
|
||||
|
||||
/datum/movespeed_modifier/grab_slowdown/kill
|
||||
multiplicative_slowdown = 9
|
||||
|
||||
/datum/movespeed_modifier/slime_reagentmod
|
||||
variable = TRUE
|
||||
|
||||
/datum/movespeed_modifier/slime_healthmod
|
||||
variable = TRUE
|
||||
|
||||
/datum/movespeed_modifier/config_walk_run
|
||||
multiplicative_slowdown = 1
|
||||
id = MOVESPEED_ID_MOB_WALK_RUN
|
||||
flags = IGNORE_NOSLOW
|
||||
|
||||
/datum/movespeed_modifier/config_walk_run/proc/sync()
|
||||
|
||||
/datum/movespeed_modifier/config_walk_run/walk/sync()
|
||||
var/mod = CONFIG_GET(number/movedelay/walk_delay)
|
||||
multiplicative_slowdown = isnum(mod)? mod : initial(multiplicative_slowdown)
|
||||
|
||||
/datum/movespeed_modifier/config_walk_run/run/sync()
|
||||
var/mod = CONFIG_GET(number/movedelay/run_delay)
|
||||
multiplicative_slowdown = isnum(mod)? mod : initial(multiplicative_slowdown)
|
||||
|
||||
/datum/movespeed_modifier/turf_slowdown
|
||||
movetypes = GROUND
|
||||
blacklisted_movetypes = (FLYING|FLOATING)
|
||||
variable = TRUE
|
||||
|
||||
/datum/movespeed_modifier/bulky_drag
|
||||
variable = TRUE
|
||||
|
||||
/datum/movespeed_modifier/cold
|
||||
blacklisted_movetypes = FLOATING
|
||||
variable = TRUE
|
||||
|
||||
/datum/movespeed_modifier/shove
|
||||
multiplicative_slowdown = SHOVE_SLOWDOWN_STRENGTH
|
||||
|
||||
/datum/movespeed_modifier/human_carry
|
||||
variable = TRUE
|
||||
|
||||
/datum/movespeed_modifier/limbless
|
||||
variable = TRUE
|
||||
movetypes = GROUND
|
||||
flags = IGNORE_NOSLOW
|
||||
|
||||
/datum/movespeed_modifier/simplemob_varspeed
|
||||
variable = TRUE
|
||||
flags = IGNORE_NOSLOW
|
||||
|
||||
/datum/movespeed_modifier/tarantula_web
|
||||
multiplicative_slowdown = 3
|
||||
|
||||
/datum/movespeed_modifier/gravity
|
||||
blacklisted_movetypes = FLOATING
|
||||
variable = TRUE
|
||||
flags = IGNORE_NOSLOW
|
||||
|
||||
/datum/movespeed_modifier/carbon_softcrit
|
||||
multiplicative_slowdown = SOFTCRIT_ADD_SLOWDOWN
|
||||
|
||||
/datum/movespeed_modifier/slime_tempmod
|
||||
variable = TRUE
|
||||
|
||||
/datum/movespeed_modifier/carbon_crawling
|
||||
multiplicative_slowdown = CRAWLING_ADD_SLOWDOWN
|
||||
movetypes = CRAWLING
|
||||
flags = IGNORE_NOSLOW
|
||||
|
||||
/datum/movespeed_modifier/mob_config_speedmod
|
||||
variable = TRUE
|
||||
flags = IGNORE_NOSLOW
|
||||
|
||||
/datum/movespeed_modifier/liver_cirrhosis
|
||||
blacklisted_movetypes = FLOATING
|
||||
variable = TRUE
|
||||
@@ -0,0 +1,14 @@
|
||||
/datum/movespeed_modifier/reagent
|
||||
blacklisted_movetypes = (FLYING|FLOATING)
|
||||
|
||||
/datum/movespeed_modifier/reagent/stimulants
|
||||
multiplicative_slowdown = -0.5
|
||||
|
||||
/datum/movespeed_modifier/reagent/changelinghaste
|
||||
multiplicative_slowdown = -2
|
||||
|
||||
/datum/movespeed_modifier/reagent/skooma
|
||||
multiplicative_slowdown = -1
|
||||
|
||||
/datum/movespeed_modifier/reagent/nitryl
|
||||
multiplicative_slowdown = -1
|
||||
@@ -0,0 +1,44 @@
|
||||
/datum/movespeed_modifier/status_effect/bloodchill
|
||||
multiplicative_slowdown = 3
|
||||
|
||||
/datum/movespeed_modifier/status_effect/bonechill
|
||||
multiplicative_slowdown = 3
|
||||
|
||||
/datum/movespeed_modifier/status_effect/tarfoot
|
||||
multiplicative_slowdown = 0.5
|
||||
blacklisted_movetypes = (FLYING|FLOATING)
|
||||
|
||||
/datum/movespeed_modifier/status_effect/sepia
|
||||
variable = TRUE
|
||||
blacklisted_movetypes = (FLYING|FLOATING)
|
||||
|
||||
/datum/movespeed_modifier/status_effect/mesmerize
|
||||
blacklisted_movetypes = CRAWLING
|
||||
multiplicative_slowdown = 5
|
||||
priority = 64
|
||||
|
||||
/datum/movespeed_modifier/status_effect/tased
|
||||
multiplicative_slowdown = 1.5
|
||||
priority = 50
|
||||
|
||||
/datum/movespeed_modifier/status_effect/tased/no_combat_mode
|
||||
multiplicative_slowdown = 8
|
||||
priority = 100
|
||||
|
||||
/datum/movespeed_modifier/status_effect/electrostaff
|
||||
multiplicative_slowdown = 1
|
||||
movetypes = GROUND
|
||||
|
||||
//no comment.
|
||||
/datum/movespeed_modifier/status_effect/breast_hypertrophy
|
||||
blacklisted_movetypes = FLOATING
|
||||
variable = TRUE
|
||||
|
||||
//this shouldn't even exist.
|
||||
/datum/movespeed_modifier/status_effect/penis_hypertrophy
|
||||
blacklisted_movetypes = FLOATING
|
||||
variable = TRUE
|
||||
|
||||
/datum/movespeed_modifier/status_effect/mkultra
|
||||
multiplicative_slowdown = -2
|
||||
blacklisted_movetypes= FLYING|FLOATING
|
||||
@@ -533,7 +533,7 @@ By design, d1 is the smallest direction and d2 is the highest
|
||||
if(affecting && affecting.status == BODYPART_ROBOTIC)
|
||||
if(user == H)
|
||||
user.visible_message("<span class='notice'>[user] starts to fix some of the wires in [H]'s [affecting.name].</span>", "<span class='notice'>You start fixing some of the wires in [H]'s [affecting.name].</span>")
|
||||
if(!do_after(user, H, 50))
|
||||
if(!do_mob(user, H, 50))
|
||||
return
|
||||
if(item_heal_robotic(H, user, 0, 15))
|
||||
use(1)
|
||||
|
||||
@@ -41,9 +41,12 @@
|
||||
to_chat(user, "<span class='warning'>You're too exhausted for that.</span>")//CIT CHANGE - ditto
|
||||
return//CIT CHANGE - ditto
|
||||
pump(user, TRUE)
|
||||
recentpump = world.time + 10
|
||||
if(istype(user))//CIT CHANGE - makes pumping shotguns cost a lil bit of stamina.
|
||||
user.adjustStaminaLossBuffered(2) //CIT CHANGE - DITTO. make this scale inversely to the strength stat when stats/skills are added
|
||||
if(HAS_TRAIT(user, TRAIT_FAST_PUMP))
|
||||
recentpump = world.time + 2
|
||||
else
|
||||
recentpump = world.time + 10
|
||||
if(istype(user))//CIT CHANGE - makes pumping shotguns cost a lil bit of stamina.
|
||||
user.adjustStaminaLossBuffered(2) //CIT CHANGE - DITTO. make this scale inversely to the strength stat when stats/skills are added
|
||||
return
|
||||
|
||||
/obj/item/gun/ballistic/shotgun/blow_up(mob/user)
|
||||
@@ -90,7 +93,7 @@
|
||||
fire_delay = 7
|
||||
mag_type = /obj/item/ammo_box/magazine/internal/shot/riot
|
||||
sawn_desc = "Come with me if you want to live."
|
||||
unique_reskin = list("Tatical" = "riotshotgun",
|
||||
unique_reskin = list("Tactical" = "riotshotgun",
|
||||
"Wood Stock" = "wood_riotshotgun"
|
||||
)
|
||||
|
||||
@@ -212,7 +215,7 @@
|
||||
fire_delay = 5
|
||||
mag_type = /obj/item/ammo_box/magazine/internal/shot/com
|
||||
w_class = WEIGHT_CLASS_HUGE
|
||||
unique_reskin = list("Tatical" = "cshotgun",
|
||||
unique_reskin = list("Tactical" = "cshotgun",
|
||||
"Slick" = "cshotgun_slick"
|
||||
)
|
||||
|
||||
|
||||
@@ -241,3 +241,87 @@
|
||||
to_chat(user, "<span class='warning'>The pin beeps, refusing to fire.</span>")
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/obj/item/firing_pin/security_level
|
||||
name = "security level firing pin"
|
||||
desc = "A sophisticated firing pin that authorizes operation based on its settings and current security level."
|
||||
icon_state = "firing_pin_sec_level"
|
||||
var/min_sec_level = SEC_LEVEL_GREEN
|
||||
var/max_sec_level = SEC_LEVEL_DELTA
|
||||
var/only_lethals = FALSE
|
||||
var/can_toggle = TRUE
|
||||
|
||||
/obj/item/firing_pin/security_level/Initialize()
|
||||
. = ..()
|
||||
fail_message = "<span class='warning'>INVALID SECURITY LEVEL. CURRENT: [uppertext(NUM2SECLEVEL(GLOB.security_level))]. \
|
||||
MIN: [uppertext(NUM2SECLEVEL(min_sec_level))]. MAX: [uppertext(NUM2SECLEVEL(max_sec_level))]. \
|
||||
ONLY LETHALS: [only_lethals ? "YES" : "NO"].</span>"
|
||||
update_icon()
|
||||
|
||||
/obj/item/firing_pin/security_level/examine(mob/user)
|
||||
. = ..()
|
||||
var/lethal = only_lethals ? "only lethal " : ""
|
||||
if(min_sec_level != max_sec_level)
|
||||
. += "<span class='notice'>It's currently set to disallow [lethal]operation when the security level isn't between <b>[NUM2SECLEVEL(min_sec_level)]</b> and <b>[NUM2SECLEVEL(max_sec_level)]</b>.</span>"
|
||||
else
|
||||
. += "<span class='notice'>It's currently set to disallow [lethal]operation when the security level isn't <b>[NUM2SECLEVEL(min_sec_level)]</b>.</span>"
|
||||
if(can_toggle)
|
||||
. += "<span class='notice'>You can use a <b>multitool</b> to modify its settings.</span>"
|
||||
|
||||
/obj/item/firing_pin/security_level/multitool_act(mob/living/user, obj/item/I)
|
||||
. = TRUE
|
||||
if(!can_toggle || !user.canUseTopic(src, BE_CLOSE))
|
||||
return
|
||||
var/selection = alert(user, "Which setting would you want to modify?", "Firing Pin Settings", "Minimum Level Setting", "Maximum Level Setting", "Lethals Only Toggle")
|
||||
if(QDELETED(src) || QDELETED(user) || !user.canUseTopic(src, BE_CLOSE))
|
||||
return
|
||||
var/static/list/till_designs_pr_isnt_merged = list("green", "blue", "amber", "red", "delta")
|
||||
switch(selection)
|
||||
if("Minimum Level Setting")
|
||||
var/input = input(user, "Input the new minimum level setting.", "Firing Pin Settings", NUM2SECLEVEL(min_sec_level)) as null|anything in till_designs_pr_isnt_merged
|
||||
if(!input)
|
||||
return
|
||||
min_sec_level = till_designs_pr_isnt_merged.Find(input) - 1
|
||||
if(min_sec_level > max_sec_level)
|
||||
max_sec_level = SEC_LEVEL_DELTA
|
||||
if("Maximum Level Setting")
|
||||
var/input = input(user, "Input the new maximum level setting.", "Firing Pin Settings", NUM2SECLEVEL(max_sec_level)) as null|anything in till_designs_pr_isnt_merged
|
||||
if(!input)
|
||||
return
|
||||
max_sec_level = till_designs_pr_isnt_merged.Find(input) - 1
|
||||
if(max_sec_level < max_sec_level)
|
||||
min_sec_level = SEC_LEVEL_GREEN
|
||||
if("Lethals Only Toggle")
|
||||
only_lethals = !only_lethals
|
||||
|
||||
fail_message = "<span class='warning'>INVALID SECURITY LEVEL. CURRENT: [uppertext(NUM2SECLEVEL(GLOB.security_level))]. \
|
||||
MIN: [uppertext(NUM2SECLEVEL(min_sec_level))]. MAX: [uppertext(NUM2SECLEVEL(max_sec_level))]. \
|
||||
ONLY LETHALS: [only_lethals ? "YES" : "NO"].</span>"
|
||||
update_icon()
|
||||
|
||||
/obj/item/firing_pin/security_level/update_overlays()
|
||||
. = ..()
|
||||
var/offset = 0
|
||||
for(var/level in list(min_sec_level, max_sec_level))
|
||||
var/mutable_appearance/overlay = mutable_appearance(icon, "pin_sec_level_overlay")
|
||||
overlay.pixel_x += offset
|
||||
offset += 4
|
||||
switch(level)
|
||||
if(SEC_LEVEL_GREEN)
|
||||
overlay.color = "#b2ff59" //light green
|
||||
if(SEC_LEVEL_BLUE)
|
||||
overlay.color = "#99ccff" //light blue
|
||||
if(SEC_LEVEL_AMBER)
|
||||
overlay.color = "#ffae42" //light yellow/orange
|
||||
if(SEC_LEVEL_RED)
|
||||
overlay.color = "#ff3f34" //light red
|
||||
else
|
||||
overlay.color = "#fe59c2" //neon fuchsia
|
||||
. += overlay
|
||||
var/mutable_appearance/overlay = mutable_appearance(icon, "pin_sec_level_overlay")
|
||||
overlay.pixel_x += offset
|
||||
overlay.color = only_lethals ? "#b2ff59" : "#ff3f34"
|
||||
. += overlay
|
||||
|
||||
/obj/item/firing_pin/security_level/pin_auth(mob/living/user)
|
||||
return (only_lethals && !(gun.chambered?.harmful)) || ISINRANGE(GLOB.security_level, min_sec_level, max_sec_level)
|
||||
|
||||
@@ -51,7 +51,7 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent())
|
||||
var/inverse_chem // What chem is metabolised when purity is below inverse_chem_val, this shouldn't be made, but if it does, well, I guess I'll know about it.
|
||||
var/metabolizing = FALSE
|
||||
var/chemical_flags // See fermi/readme.dm REAGENT_DEAD_PROCESS, REAGENT_DONOTSPLIT, REAGENT_ONLYINVERSE, REAGENT_ONMOBMERGE, REAGENT_INVISIBLE, REAGENT_FORCEONNEW, REAGENT_SNEAKYNAME
|
||||
var/value = 0 //How much does it sell for in cargo?
|
||||
var/value = REAGENT_VALUE_NONE //How much does it sell for in cargo?
|
||||
|
||||
/datum/reagent/Destroy() // This should only be called by the holder, so it's already handled clearing its references
|
||||
. = ..()
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
taste_description = "alcohol"
|
||||
var/boozepwr = 65 //Higher numbers equal higher hardness, higher hardness equals more intense alcohol poisoning
|
||||
pH = 7.33
|
||||
value = REAGENT_VALUE_VERY_COMMON //don't bother tweaking all drinks values, way too many can easily be done roundstart or with an upgraded dispenser.
|
||||
|
||||
/*
|
||||
Boozepwr Chart
|
||||
@@ -88,7 +89,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_name = "glass of beer"
|
||||
glass_desc = "A freezing pint of beer."
|
||||
pH = 4
|
||||
value = 0.1
|
||||
|
||||
/datum/reagent/consumable/ethanol/beer/light
|
||||
name = "Light Beer"
|
||||
@@ -98,7 +98,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_name = "glass of light beer"
|
||||
glass_desc = "A freezing pint of watery light beer."
|
||||
pH = 5
|
||||
value = 0.3
|
||||
|
||||
/datum/reagent/consumable/ethanol/beer/green
|
||||
name = "Green Beer"
|
||||
@@ -109,7 +108,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_name = "glass of green beer"
|
||||
glass_desc = "A freezing pint of green beer. Festive."
|
||||
pH = 6
|
||||
value = 0.3
|
||||
|
||||
/datum/reagent/consumable/ethanol/beer/green/on_mob_life(mob/living/carbon/M)
|
||||
if(M.color != color)
|
||||
@@ -129,7 +127,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_desc = "DAMN, THIS THING LOOKS ROBUST!"
|
||||
shot_glass_icon_state = "shotglasscream"
|
||||
pH = 6
|
||||
value = 0.1
|
||||
|
||||
|
||||
/datum/reagent/consumable/ethanol/kahlua/on_mob_life(mob/living/carbon/M)
|
||||
@@ -152,7 +149,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_desc = "The silky, smokey whiskey goodness inside the glass makes the drink look very classy."
|
||||
shot_glass_icon_state = "shotglassbrown"
|
||||
pH = 4.5
|
||||
value = 0.1
|
||||
|
||||
/datum/reagent/consumable/ethanol/thirteenloko
|
||||
name = "Thirteen Loko"
|
||||
@@ -167,7 +163,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "thirteen_loko_glass"
|
||||
glass_name = "glass of Thirteen Loko"
|
||||
glass_desc = "This is a glass of Thirteen Loko, it appears to be of the highest quality. The drink, not the glass."
|
||||
value = 0.3
|
||||
|
||||
/datum/reagent/consumable/ethanol/thirteenloko/on_mob_life(mob/living/carbon/M)
|
||||
M.drowsyness = max(0,M.drowsyness-7)
|
||||
@@ -229,7 +224,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_desc = "The glass contain wodka. Xynta."
|
||||
shot_glass_icon_state = "shotglassclear"
|
||||
pH = 8.1
|
||||
value = 0.1
|
||||
|
||||
/datum/reagent/consumable/ethanol/vodka/on_mob_life(mob/living/carbon/M)
|
||||
M.radiation = max(M.radiation-2,0)
|
||||
@@ -245,7 +239,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "glass_brown"
|
||||
glass_name = "glass of bilk"
|
||||
glass_desc = "A brew of milk and beer. For those alcoholics who fear osteoporosis."
|
||||
value = 0.5
|
||||
|
||||
/datum/reagent/consumable/ethanol/bilk/on_mob_life(mob/living/carbon/M)
|
||||
if(M.getBruteLoss() && prob(10))
|
||||
@@ -264,7 +257,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_name = "Three Mile Island Ice Tea"
|
||||
glass_desc = "A glass of this is sure to prevent a meltdown."
|
||||
pH = 3.5
|
||||
value = 1
|
||||
value = REAGENT_VALUE_RARE
|
||||
|
||||
/datum/reagent/consumable/ethanol/threemileisland/on_mob_life(mob/living/carbon/M)
|
||||
M.set_drugginess(50)
|
||||
@@ -280,7 +273,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_name = "glass of gin"
|
||||
glass_desc = "A crystal clear glass of Griffeater gin."
|
||||
pH = 6.9
|
||||
value = 0.1
|
||||
|
||||
/datum/reagent/consumable/ethanol/rum
|
||||
name = "Rum"
|
||||
@@ -293,7 +285,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_desc = "Now you want to Pray for a pirate suit, don't you?"
|
||||
shot_glass_icon_state = "shotglassbrown"
|
||||
pH = 6.5
|
||||
value = 0.1
|
||||
|
||||
/datum/reagent/consumable/ethanol/tequila
|
||||
name = "Tequila"
|
||||
@@ -306,7 +297,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_desc = "Now all that's missing is the weird colored shades!"
|
||||
shot_glass_icon_state = "shotglassgold"
|
||||
pH = 4
|
||||
value = 0.1
|
||||
|
||||
/datum/reagent/consumable/ethanol/vermouth
|
||||
name = "Vermouth"
|
||||
@@ -319,7 +309,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_desc = "You wonder why you're even drinking this straight."
|
||||
shot_glass_icon_state = "shotglassclear"
|
||||
pH = 3.25
|
||||
value = 0.1
|
||||
|
||||
/datum/reagent/consumable/ethanol/wine
|
||||
name = "Wine"
|
||||
@@ -332,7 +321,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_desc = "A very classy looking drink."
|
||||
shot_glass_icon_state = "shotglassred"
|
||||
pH = 3.45
|
||||
value = 0.1
|
||||
|
||||
/datum/reagent/consumable/ethanol/lizardwine
|
||||
name = "Lizard wine"
|
||||
@@ -342,7 +330,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
quality = DRINK_FANTASTIC
|
||||
taste_description = "scaley sweetness"
|
||||
pH = 3
|
||||
value = 2
|
||||
value = REAGENT_VALUE_VERY_RARE
|
||||
|
||||
/datum/reagent/consumable/ethanol/grappa
|
||||
name = "Grappa"
|
||||
@@ -354,7 +342,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_name = "glass of grappa"
|
||||
glass_desc = "A fine drink originally made to prevent waste by using the leftovers from winemaking."
|
||||
pH = 3.5
|
||||
value = 0.1
|
||||
|
||||
/datum/reagent/consumable/ethanol/cognac
|
||||
name = "Cognac"
|
||||
@@ -367,7 +354,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_desc = "Damn, you feel like some kind of French aristocrat just by holding this."
|
||||
shot_glass_icon_state = "shotglassbrown"
|
||||
pH = 3.5
|
||||
value = 0.1
|
||||
|
||||
/datum/reagent/consumable/ethanol/absinthe
|
||||
name = "Absinthe"
|
||||
@@ -379,7 +365,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_name = "glass of absinthe"
|
||||
glass_desc = "It's as strong as it smells."
|
||||
shot_glass_icon_state = "shotglassgreen"
|
||||
value = 0.1
|
||||
|
||||
/datum/reagent/consumable/ethanol/absinthe/on_mob_life(mob/living/carbon/M)
|
||||
if(prob(10) && !HAS_TRAIT(M, TRAIT_ALCOHOL_TOLERANCE))
|
||||
@@ -395,6 +380,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "glass_brown2"
|
||||
glass_name = "Hooch"
|
||||
glass_desc = "You've really hit rock bottom now... your liver packed its bags and left last night."
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/consumable/ethanol/hooch/on_mob_life(mob/living/carbon/M)
|
||||
if(M.mind && M.mind.assigned_role == "Assistant")
|
||||
@@ -412,7 +398,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_name = "glass of ale"
|
||||
glass_desc = "A freezing pint of delicious Ale."
|
||||
pH = 4.5
|
||||
value = 0.1
|
||||
|
||||
/datum/reagent/consumable/ethanol/goldschlager
|
||||
name = "Goldschlager"
|
||||
@@ -425,7 +410,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_name = "glass of goldschlager"
|
||||
glass_desc = "100% proof that teen girls will drink anything with gold in it."
|
||||
shot_glass_icon_state = "shotglassgold"
|
||||
value = 0.5
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/consumable/ethanol/patron
|
||||
name = "Patron"
|
||||
@@ -439,7 +424,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_desc = "Drinking patron in the bar, with all the subpar ladies."
|
||||
shot_glass_icon_state = "shotglassclear"
|
||||
pH = 4.5
|
||||
value = 0.1
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/consumable/ethanol/gintonic
|
||||
name = "Gin and Tonic"
|
||||
@@ -452,7 +437,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_name = "Gin and Tonic"
|
||||
glass_desc = "A mild but still great cocktail. Drink up, like a true Englishman."
|
||||
pH = 3
|
||||
value = 0.5
|
||||
|
||||
/datum/reagent/consumable/ethanol/rum_coke
|
||||
name = "Rum and Coke"
|
||||
@@ -465,7 +449,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_name = "Rum and Coke"
|
||||
glass_desc = "The classic go-to of space-fratboys."
|
||||
pH = 4
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/cuba_libre
|
||||
name = "Cuba Libre"
|
||||
@@ -477,8 +460,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "cubalibreglass"
|
||||
glass_name = "Cuba Libre"
|
||||
glass_desc = "A classic mix of rum, cola, and lime. A favorite of revolutionaries everywhere!"
|
||||
value = 0.5
|
||||
|
||||
|
||||
/datum/reagent/consumable/ethanol/cuba_libre/on_mob_life(mob/living/carbon/M)
|
||||
if(M.mind && M.mind.has_antag_datum(/datum/antagonist/rev)) //Cuba Libre, the traditional drink of revolutions! Heals revolutionaries.
|
||||
@@ -499,7 +480,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "whiskeycolaglass"
|
||||
glass_name = "whiskey cola"
|
||||
glass_desc = "An innocent-looking mixture of cola and Whiskey. Delicious."
|
||||
value = 0.5
|
||||
|
||||
/datum/reagent/consumable/ethanol/martini
|
||||
name = "Classic Martini"
|
||||
@@ -511,7 +491,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "martiniglass"
|
||||
glass_name = "Classic Martini"
|
||||
glass_desc = "Damn, the bartender even stirred it, not shook it."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/vodkamartini
|
||||
name = "Vodka Martini"
|
||||
@@ -523,7 +502,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "martiniglass"
|
||||
glass_name = "Vodka martini"
|
||||
glass_desc ="A bastardisation of the classic martini. Still great."
|
||||
value = 1
|
||||
|
||||
|
||||
/datum/reagent/consumable/ethanol/white_russian
|
||||
@@ -536,7 +514,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "whiterussianglass"
|
||||
glass_name = "White Russian"
|
||||
glass_desc = "A very nice looking drink. But that's just, like, your opinion, man."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/screwdrivercocktail
|
||||
name = "Screwdriver"
|
||||
@@ -548,7 +525,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "screwdriverglass"
|
||||
glass_name = "Screwdriver"
|
||||
glass_desc = "A simple, yet superb mixture of Vodka and orange juice. Just the thing for the tired engineer."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/screwdrivercocktail/on_mob_life(mob/living/carbon/M)
|
||||
if(M.mind && (M.mind.assigned_role in list("Station Engineer", "Atmospheric Technician", "Chief Engineer"))) //Engineers lose radiation poisoning at a massive rate.
|
||||
@@ -564,7 +540,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "booger"
|
||||
glass_name = "Booger"
|
||||
glass_desc = "Ewww..."
|
||||
value = 0.3
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/consumable/ethanol/bloody_mary
|
||||
name = "Bloody Mary"
|
||||
@@ -576,7 +552,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "bloodymaryglass"
|
||||
glass_name = "Bloody Mary"
|
||||
glass_desc = "Tomato juice, mixed with Vodka and a lil' bit of lime. Tastes like liquid murder."
|
||||
value = 1.3
|
||||
|
||||
/datum/reagent/consumable/ethanol/bloody_mary/on_mob_life(mob/living/carbon/C)
|
||||
if(AmBloodsucker(C))
|
||||
@@ -595,7 +570,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "bravebullglass"
|
||||
glass_name = "Brave Bull"
|
||||
glass_desc = "Tequila and Coffee liqueur, brought together in a mouthwatering mixture. Drink up."
|
||||
value = 2
|
||||
var/tough_text
|
||||
|
||||
/datum/reagent/consumable/ethanol/brave_bull/on_mob_metabolize(mob/living/M)
|
||||
@@ -619,7 +593,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "tequilasunriseglass"
|
||||
glass_name = "tequila Sunrise"
|
||||
glass_desc = "Oh great, now you feel nostalgic about sunrises back on Terra..."
|
||||
value = 2
|
||||
var/obj/effect/light_holder
|
||||
|
||||
/datum/reagent/consumable/ethanol/tequila_sunrise/on_mob_metabolize(mob/living/M)
|
||||
@@ -649,7 +622,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_name = "Toxins Special"
|
||||
glass_desc = "Whoah, this thing is on FIRE!"
|
||||
shot_glass_icon_state = "toxinsspecialglass"
|
||||
value = 2
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/consumable/ethanol/toxins_special/on_mob_life(var/mob/living/M)
|
||||
M.adjust_bodytemperature(15 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, BODYTEMP_NORMAL + 20) //310.15 is the normal bodytemp.
|
||||
@@ -668,7 +641,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_desc = "Heavy, hot and strong. Just like the Iron fist of the LAW."
|
||||
pH = 2
|
||||
overdose_threshold = 40
|
||||
value = 3
|
||||
var/datum/brain_trauma/special/beepsky/B
|
||||
|
||||
/datum/reagent/consumable/ethanol/beepsky_smash/on_mob_metabolize(mob/living/carbon/M)
|
||||
@@ -709,7 +681,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "irishcreamglass"
|
||||
glass_name = "Irish Cream"
|
||||
glass_desc = "It's cream, mixed with whiskey. What else would you expect from the Irish?"
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/manly_dorf
|
||||
name = "The Manly Dorf"
|
||||
@@ -721,7 +692,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "manlydorfglass"
|
||||
glass_name = "The Manly Dorf"
|
||||
glass_desc = "A manly concoction made from Ale and Beer. Intended for true men only."
|
||||
value = 2
|
||||
var/dorf_mode
|
||||
|
||||
/datum/reagent/consumable/ethanol/manly_dorf/on_mob_metabolize(mob/living/M)
|
||||
@@ -752,7 +722,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "longislandicedteaglass"
|
||||
glass_name = "Long Island Iced Tea"
|
||||
glass_desc = "The liquor cabinet, brought together in a delicious mix. Intended for middle-aged alcoholic women only."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/moonshine
|
||||
name = "Moonshine"
|
||||
@@ -763,7 +732,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "glass_clear"
|
||||
glass_name = "Moonshine"
|
||||
glass_desc = "You've really hit rock bottom now... your liver packed its bags and left last night."
|
||||
value = 2
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/consumable/ethanol/b52
|
||||
name = "B-52"
|
||||
@@ -776,7 +745,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_name = "B-52"
|
||||
glass_desc = "Kahlua, Irish Cream, and cognac. You will get bombed."
|
||||
shot_glass_icon_state = "b52glass"
|
||||
value = 5.2
|
||||
|
||||
/datum/reagent/consumable/ethanol/b52/on_mob_metabolize(mob/living/M)
|
||||
playsound(M, 'sound/effects/explosion_distant.ogg', 100, FALSE)
|
||||
@@ -791,7 +759,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "irishcoffeeglass"
|
||||
glass_name = "Irish Coffee"
|
||||
glass_desc = "Coffee and alcohol. More fun than a Mimosa to drink in the morning."
|
||||
value = 2
|
||||
|
||||
/datum/reagent/consumable/ethanol/margarita
|
||||
name = "Margarita"
|
||||
@@ -803,7 +770,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "margaritaglass"
|
||||
glass_name = "Margarita"
|
||||
glass_desc = "On the rocks with salt on the rim. Arriba~!"
|
||||
value = 2
|
||||
|
||||
/datum/reagent/consumable/ethanol/black_russian
|
||||
name = "Black Russian"
|
||||
@@ -815,7 +781,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "blackrussianglass"
|
||||
glass_name = "Black Russian"
|
||||
glass_desc = "For the lactose-intolerant. Still as classy as a White Russian."
|
||||
value = 3
|
||||
|
||||
|
||||
/datum/reagent/consumable/ethanol/manhattan
|
||||
@@ -828,7 +793,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "manhattanglass"
|
||||
glass_name = "Manhattan"
|
||||
glass_desc = "The Detective's undercover drink of choice. He never could stomach gin..."
|
||||
value = 3
|
||||
|
||||
|
||||
/datum/reagent/consumable/ethanol/manhattan_proj
|
||||
@@ -841,7 +805,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "proj_manhattanglass"
|
||||
glass_name = "Manhattan Project"
|
||||
glass_desc = "A scientist's drink of choice, for thinking how to blow up the station."
|
||||
value = 6
|
||||
value = REAGENT_VALUE_RARE
|
||||
|
||||
|
||||
/datum/reagent/consumable/ethanol/manhattan_proj/on_mob_life(mob/living/carbon/M)
|
||||
@@ -858,7 +822,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "whiskeysodaglass2"
|
||||
glass_name = "whiskey soda"
|
||||
glass_desc = "Ultimate refreshment."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/antifreeze
|
||||
name = "Anti-freeze"
|
||||
@@ -870,7 +833,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "antifreeze"
|
||||
glass_name = "Anti-freeze"
|
||||
glass_desc = "The ultimate refreshment."
|
||||
value = 3
|
||||
|
||||
/datum/reagent/consumable/ethanol/antifreeze/on_mob_life(mob/living/carbon/M)
|
||||
M.adjust_bodytemperature(20 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, BODYTEMP_NORMAL + 20) //310.15 is the normal bodytemp.
|
||||
@@ -886,7 +848,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "b&p"
|
||||
glass_name = "Barefoot"
|
||||
glass_desc = "Barefoot and pregnant."
|
||||
value = 4
|
||||
|
||||
/datum/reagent/consumable/ethanol/barefoot/on_mob_life(mob/living/carbon/M)
|
||||
if(ishuman(M)) //Barefoot causes the imbiber to quickly regenerate brute trauma if they're not wearing shoes.
|
||||
@@ -906,7 +867,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "snowwhite"
|
||||
glass_name = "Snow White"
|
||||
glass_desc = "A cold refreshment."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/demonsblood //Prevents the imbiber from being dragged into a pool of blood by a slaughter demon.
|
||||
name = "Demon's Blood"
|
||||
@@ -918,7 +878,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "demonsblood"
|
||||
glass_name = "Demons Blood"
|
||||
glass_desc = "Just looking at this thing makes the hair at the back of your neck stand up."
|
||||
value = 2
|
||||
|
||||
/datum/reagent/consumable/ethanol/devilskiss //If eaten by a slaughter demon, the demon will regret it.
|
||||
name = "Devil's Kiss"
|
||||
@@ -930,7 +889,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "devilskiss"
|
||||
glass_name = "Devils Kiss"
|
||||
glass_desc = "Creepy time!"
|
||||
value = 2
|
||||
|
||||
/datum/reagent/consumable/ethanol/vodkatonic
|
||||
name = "Vodka and Tonic"
|
||||
@@ -942,7 +900,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "vodkatonicglass"
|
||||
glass_name = "vodka and tonic"
|
||||
glass_desc = "For when a gin and tonic isn't Russian enough."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/ginfizz
|
||||
name = "Gin Fizz"
|
||||
@@ -954,7 +911,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "ginfizzglass"
|
||||
glass_name = "gin fizz"
|
||||
glass_desc = "Refreshingly lemony, deliciously dry."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/bahama_mama
|
||||
name = "Bahama Mama"
|
||||
@@ -966,7 +922,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "bahama_mama"
|
||||
glass_name = "Bahama Mama"
|
||||
glass_desc = "A tropical cocktail with a complex blend of flavors."
|
||||
value = 2
|
||||
|
||||
/datum/reagent/consumable/ethanol/singulo
|
||||
name = "Singulo"
|
||||
@@ -978,7 +933,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "singulo"
|
||||
glass_name = "Singulo"
|
||||
glass_desc = "A blue-space beverage."
|
||||
value = 4
|
||||
|
||||
/datum/reagent/consumable/ethanol/sbiten
|
||||
name = "Sbiten"
|
||||
@@ -990,7 +944,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "sbitenglass"
|
||||
glass_name = "Sbiten"
|
||||
glass_desc = "A spicy mix of Vodka and Spice. Very hot."
|
||||
value = 2
|
||||
|
||||
/datum/reagent/consumable/ethanol/sbiten/on_mob_life(mob/living/carbon/M)
|
||||
M.adjust_bodytemperature(50 * TEMPERATURE_DAMAGE_COEFFICIENT, 0 ,BODYTEMP_HEAT_DAMAGE_LIMIT) //310.15 is the normal bodytemp.
|
||||
@@ -1006,7 +959,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "red_meadglass"
|
||||
glass_name = "Red Mead"
|
||||
glass_desc = "A True Viking's Beverage, though its color is strange."
|
||||
value = 5
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/consumable/ethanol/mead
|
||||
name = "Mead"
|
||||
@@ -1019,7 +972,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "meadglass"
|
||||
glass_name = "Mead"
|
||||
glass_desc = "A Viking's Beverage, though a cheap one."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/iced_beer
|
||||
name = "Iced Beer"
|
||||
@@ -1030,7 +982,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "iced_beerglass"
|
||||
glass_name = "iced beer"
|
||||
glass_desc = "A beer so frosty, the air around it freezes."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/iced_beer/on_mob_life(mob/living/carbon/M)
|
||||
M.adjust_bodytemperature(-20 * TEMPERATURE_DAMAGE_COEFFICIENT, T0C) //310.15 is the normal bodytemp.
|
||||
@@ -1045,7 +996,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "grogglass"
|
||||
glass_name = "Grog"
|
||||
glass_desc = "A fine and cepa drink for Space."
|
||||
value = 2.1
|
||||
|
||||
/datum/reagent/consumable/ethanol/aloe
|
||||
name = "Aloe"
|
||||
@@ -1057,7 +1007,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "aloe"
|
||||
glass_name = "Aloe"
|
||||
glass_desc = "Very, very, very good."
|
||||
value = 1
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/consumable/ethanol/andalusia
|
||||
name = "Andalusia"
|
||||
@@ -1069,7 +1019,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "andalusia"
|
||||
glass_name = "Andalusia"
|
||||
glass_desc = "A nice, strangely named drink."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/alliescocktail
|
||||
name = "Allies Cocktail"
|
||||
@@ -1081,7 +1030,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "alliescocktail"
|
||||
glass_name = "Allies cocktail"
|
||||
glass_desc = "A drink made from your allies."
|
||||
value = 4
|
||||
|
||||
/datum/reagent/consumable/ethanol/acid_spit
|
||||
name = "Acid Spit"
|
||||
@@ -1093,7 +1041,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "acidspitglass"
|
||||
glass_name = "Acid Spit"
|
||||
glass_desc = "A drink from Nanotrasen. Made from live aliens."
|
||||
value = 3
|
||||
|
||||
/datum/reagent/consumable/ethanol/amasec
|
||||
name = "Amasec"
|
||||
@@ -1105,7 +1052,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "amasecglass"
|
||||
glass_name = "Amasec"
|
||||
glass_desc = "Always handy before COMBAT!!!"
|
||||
value = 2
|
||||
|
||||
/datum/reagent/consumable/ethanol/changelingsting
|
||||
name = "Changeling Sting"
|
||||
@@ -1117,7 +1063,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "changelingsting"
|
||||
glass_name = "Changeling Sting"
|
||||
glass_desc = "A stingy drink."
|
||||
value = 1.5
|
||||
|
||||
/datum/reagent/consumable/ethanol/changelingsting/on_mob_life(mob/living/carbon/M)
|
||||
if(M.mind) //Changeling Sting assists in the recharging of changeling chemicals.
|
||||
@@ -1137,7 +1082,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "irishcarbomb"
|
||||
glass_name = "Irish Car Bomb"
|
||||
glass_desc = "An Irish car bomb."
|
||||
value = 5
|
||||
|
||||
/datum/reagent/consumable/ethanol/syndicatebomb
|
||||
name = "Syndicate Bomb"
|
||||
@@ -1149,7 +1093,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "syndicatebomb"
|
||||
glass_name = "Syndicate Bomb"
|
||||
glass_desc = "A syndicate bomb."
|
||||
value = 2
|
||||
|
||||
/datum/reagent/consumable/ethanol/syndicatebomb/on_mob_life(mob/living/carbon/M)
|
||||
if(prob(5))
|
||||
@@ -1177,7 +1120,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "erikasurprise"
|
||||
glass_name = "Erika Surprise"
|
||||
glass_desc = "The surprise is, it's green!"
|
||||
value = 4
|
||||
|
||||
/datum/reagent/consumable/ethanol/driestmartini
|
||||
name = "Driest Martini"
|
||||
@@ -1190,7 +1132,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "driestmartiniglass"
|
||||
glass_name = "Driest Martini"
|
||||
glass_desc = "Only for the experienced. You think you see sand floating in the glass."
|
||||
value = 5
|
||||
|
||||
/datum/reagent/consumable/ethanol/bananahonk
|
||||
name = "Banana Honk"
|
||||
@@ -1203,7 +1144,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "bananahonkglass"
|
||||
glass_name = "Banana Honk"
|
||||
glass_desc = "A drink from Clown Heaven."
|
||||
value = 8
|
||||
|
||||
/datum/reagent/consumable/ethanol/bananahonk/on_mob_life(mob/living/carbon/M)
|
||||
if((ishuman(M) && M.job == "Clown") || ismonkey(M))
|
||||
@@ -1222,7 +1162,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "silencerglass"
|
||||
glass_name = "Silencer"
|
||||
glass_desc = "A drink from Mime Heaven."
|
||||
value = 2
|
||||
|
||||
/datum/reagent/consumable/ethanol/silencer/on_mob_life(mob/living/carbon/M)
|
||||
if(ishuman(M) && M.job == "Mime")
|
||||
@@ -1240,7 +1179,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "drunkenblumpkin"
|
||||
glass_name = "Drunken Blumpkin"
|
||||
glass_desc = "A drink for the drunks."
|
||||
value = 3
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/consumable/ethanol/whiskey_sour //Requested since we had whiskey cola and soda but not sour.
|
||||
name = "Whiskey Sour"
|
||||
@@ -1252,7 +1191,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "whiskey_sour"
|
||||
glass_name = "whiskey sour"
|
||||
glass_desc = "Lemon juice mixed with whiskey and a dash of sugar. Surprisingly satisfying."
|
||||
value = 2
|
||||
|
||||
/datum/reagent/consumable/ethanol/hcider
|
||||
name = "Hard Cider"
|
||||
@@ -1265,7 +1203,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_name = "hard cider"
|
||||
glass_desc = "Tastes like autumn... no wait, fall!"
|
||||
shot_glass_icon_state = "shotglassbrown"
|
||||
value = 3
|
||||
|
||||
/datum/reagent/consumable/ethanol/fetching_fizz //A reference to one of my favorite games of all time. Pulls nearby ores to the imbiber!
|
||||
name = "Fetching Fizz"
|
||||
@@ -1278,7 +1215,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "fetching_fizz"
|
||||
glass_name = "Fetching Fizz"
|
||||
glass_desc = "Induces magnetism in the imbiber. Started as a barroom prank but evolved to become popular with miners and scrappers. Metallic aftertaste."
|
||||
value = 2
|
||||
value = REAGENT_VALUE_UNCOMMON
|
||||
|
||||
/datum/reagent/consumable/ethanol/fetching_fizz/on_mob_life(mob/living/carbon/M)
|
||||
for(var/obj/item/stack/ore/O in orange(3, M))
|
||||
@@ -1297,7 +1234,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "hearty_punch"
|
||||
glass_name = "Hearty Punch"
|
||||
glass_desc = "Aromatic beverage served piping hot. According to folk tales it can almost wake the dead."
|
||||
value = 1
|
||||
value = REAGENT_VALUE_RARE //considering the low recipe yield.
|
||||
|
||||
/datum/reagent/consumable/ethanol/hearty_punch/on_mob_life(mob/living/carbon/M)
|
||||
if(M.health <= 0)
|
||||
@@ -1318,8 +1255,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "glass_brown2"
|
||||
glass_name = "Bacchus' Blessing"
|
||||
glass_desc = "You didn't think it was possible for a liquid to be so utterly revolting. Are you sure about this...?"
|
||||
value = 8
|
||||
|
||||
value = REAGENT_VALUE_RARE
|
||||
|
||||
/datum/reagent/consumable/ethanol/atomicbomb
|
||||
name = "Atomic Bomb"
|
||||
@@ -1331,7 +1267,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "atomicbombglass"
|
||||
glass_name = "Atomic Bomb"
|
||||
glass_desc = "Nanotrasen cannot take legal responsibility for your actions after imbibing."
|
||||
value = 3.56
|
||||
value = REAGENT_VALUE_RARE
|
||||
|
||||
/datum/reagent/consumable/ethanol/atomicbomb/on_mob_life(mob/living/carbon/M)
|
||||
M.set_drugginess(50)
|
||||
@@ -1360,7 +1296,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "gargleblasterglass"
|
||||
glass_name = "Pan-Galactic Gargle Blaster"
|
||||
glass_desc = "Like having your brain smashed out by a slice of lemon wrapped around a large gold brick."
|
||||
value = 5
|
||||
|
||||
/datum/reagent/consumable/ethanol/gargle_blaster/on_mob_life(mob/living/carbon/M)
|
||||
M.dizziness +=1.5
|
||||
@@ -1393,7 +1328,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
impure_chem = /datum/reagent/consumable/ethanol/neuroweak
|
||||
inverse_chem_val = 0.5 //Clear conversion
|
||||
inverse_chem = /datum/reagent/consumable/ethanol/neuroweak
|
||||
value = 4
|
||||
value = REAGENT_VALUE_UNCOMMON
|
||||
|
||||
/datum/reagent/consumable/ethanol/neurotoxin/proc/pickt()
|
||||
return (pick(TRAIT_PARALYSIS_L_ARM,TRAIT_PARALYSIS_R_ARM,TRAIT_PARALYSIS_R_LEG,TRAIT_PARALYSIS_L_LEG))
|
||||
@@ -1434,7 +1369,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
description = "A mostly safe alcoholic drink for the true daredevils. Counteracts Neurotoxins."
|
||||
boozepwr = 60
|
||||
pH = 8
|
||||
value = 3
|
||||
|
||||
/datum/reagent/consumable/ethanol/neuroweak/on_mob_life(mob/living/carbon/M)
|
||||
if(holder.has_reagent(/datum/reagent/consumable/ethanol/neurotoxin))
|
||||
@@ -1460,7 +1394,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "hippiesdelightglass"
|
||||
glass_name = "Hippie's Delight"
|
||||
glass_desc = "A drink enjoyed by people during the 1960's."
|
||||
value = 1.96
|
||||
value = REAGENT_VALUE_RARE
|
||||
|
||||
/datum/reagent/consumable/ethanol/hippies_delight/on_mob_life(mob/living/carbon/M)
|
||||
M.slurring = max(M.slurring,50)
|
||||
@@ -1504,8 +1438,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "nog3"
|
||||
glass_name = "eggnog"
|
||||
glass_desc = "The traditional way to get absolutely hammered at a Christmas party."
|
||||
value = 4
|
||||
|
||||
|
||||
/datum/reagent/consumable/ethanol/narsour
|
||||
name = "Nar'Sour"
|
||||
@@ -1517,7 +1449,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "narsour"
|
||||
glass_name = "Nar'Sour"
|
||||
glass_desc = "A new hit cocktail inspired by THE ARM Breweries will have you shouting Fuu ma'jin in no time!"
|
||||
value = 6.66
|
||||
value = REAGENT_VALUE_UNCOMMON
|
||||
|
||||
/datum/reagent/consumable/ethanol/narsour/on_mob_life(mob/living/carbon/M)
|
||||
M.cultslurring = min(M.cultslurring + 3, 3)
|
||||
@@ -1534,7 +1466,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "cogchamp"
|
||||
glass_name = "CogChamp"
|
||||
glass_desc = "Not even Ratvar's Four Generals could withstand this! Qevax Jryy!"
|
||||
value = 8.13
|
||||
value = REAGENT_VALUE_UNCOMMON
|
||||
|
||||
/datum/reagent/consumable/ethanol/cogchamp/on_mob_life(mob/living/carbon/M)
|
||||
M.clockcultslurring = min(M.clockcultslurring + 3, 3)
|
||||
@@ -1550,7 +1482,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "glass_orange"
|
||||
glass_name = "Triple Sec"
|
||||
glass_desc = "A glass of straight Triple Sec."
|
||||
value = 1.5
|
||||
|
||||
/datum/reagent/consumable/ethanol/creme_de_menthe
|
||||
name = "Creme de Menthe"
|
||||
@@ -1561,7 +1492,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "glass_green"
|
||||
glass_name = "Creme de Menthe"
|
||||
glass_desc = "You can almost feel the first breath of spring just looking at it."
|
||||
value = 2
|
||||
|
||||
/datum/reagent/consumable/ethanol/creme_de_cacao
|
||||
name = "Creme de Cacao"
|
||||
@@ -1572,7 +1502,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "glass_brown"
|
||||
glass_name = "Creme de Cacao"
|
||||
glass_desc = "A million hazing lawsuits and alcohol poisonings have started with this humble ingredient."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/creme_de_coconut
|
||||
name = "Creme de Coconut"
|
||||
@@ -1594,7 +1523,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "quadruple_sec"
|
||||
glass_name = "Quadruple Sec"
|
||||
glass_desc = "An intimidating and lawful beverage dares you to violate the law and make its day. Still can't drink it on duty, though."
|
||||
value = 3.04
|
||||
|
||||
/datum/reagent/consumable/ethanol/quadruple_sec/on_mob_life(mob/living/carbon/M)
|
||||
if(M.mind && HAS_TRAIT(M.mind, TRAIT_LAW_ENFORCEMENT_METABOLISM)) //Securidrink in line with the screwderiver for engineers or nothing for mimes.
|
||||
@@ -1613,7 +1541,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "quintuple_sec"
|
||||
glass_name = "Quintuple Sec"
|
||||
glass_desc = "Now you are become law, destroyer of clowns."
|
||||
value = 4.01
|
||||
value = REAGENT_VALUE_EXCEPTIONAL
|
||||
|
||||
/datum/reagent/consumable/ethanol/quintuple_sec/on_mob_life(mob/living/carbon/M)
|
||||
if(M.mind && HAS_TRAIT(M.mind, TRAIT_LAW_ENFORCEMENT_METABOLISM)) //Securidrink in line with the screwderiver for engineers or nothing for mimes but STRONG..
|
||||
@@ -1657,7 +1585,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "grasshopper"
|
||||
glass_name = "Grasshopper"
|
||||
glass_desc = "You weren't aware edible beverages could be that green."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/stinger
|
||||
name = "Stinger"
|
||||
@@ -1669,7 +1596,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "stinger"
|
||||
glass_name = "Stinger"
|
||||
glass_desc = "You wonder what would happen if you pointed this at a heat source..."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/bastion_bourbon
|
||||
name = "Bastion Bourbon"
|
||||
@@ -1684,7 +1610,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_desc = "If you're feeling low, count on the buttery flavor of our own bastion bourbon."
|
||||
shot_glass_icon_state = "shotglassgreen"
|
||||
pH = 4
|
||||
value = 8
|
||||
value = REAGENT_VALUE_UNCOMMON
|
||||
|
||||
/datum/reagent/consumable/ethanol/bastion_bourbon/on_mob_metabolize(mob/living/L)
|
||||
var/heal_points = 10
|
||||
@@ -1721,7 +1647,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_name = "Squirt Cider"
|
||||
glass_desc = "Squirt cider will toughen you right up. Too bad about the musty aftertaste."
|
||||
shot_glass_icon_state = "shotglassgreen"
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/squirt_cider/on_mob_life(mob/living/carbon/M)
|
||||
M.satiety += 5 //for context, vitamins give 30 satiety per tick
|
||||
@@ -1738,7 +1663,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "fringe_weaver"
|
||||
glass_name = "Fringe Weaver"
|
||||
glass_desc = "It's a wonder it doesn't spill out of the glass."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/sugar_rush
|
||||
name = "Sugar Rush"
|
||||
@@ -1751,7 +1675,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "sugar_rush"
|
||||
glass_name = "Sugar Rush"
|
||||
glass_desc = "If you can't mix a Sugar Rush, you can't tend bar."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/sugar_rush/on_mob_life(mob/living/carbon/M)
|
||||
M.satiety -= 10 //junky as hell! a whole glass will keep you from being able to eat junk food
|
||||
@@ -1768,7 +1691,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "crevice_spike"
|
||||
glass_name = "Crevice Spike"
|
||||
glass_desc = "It'll either knock the drunkenness out of you or knock you out cold. Both, probably."
|
||||
value = 1
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/consumable/ethanol/crevice_spike/on_mob_metabolize(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
|
||||
@@ -1782,7 +1705,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "sakecup"
|
||||
glass_name = "cup of sake"
|
||||
glass_desc = "A traditional cup of sake."
|
||||
value = 0.1
|
||||
|
||||
/datum/reagent/consumable/ethanol/peppermint_patty
|
||||
name = "Peppermint Patty"
|
||||
@@ -1794,7 +1716,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "peppermint_patty"
|
||||
glass_name = "Peppermint Patty"
|
||||
glass_desc = "A boozy minty hot cocoa that warms your belly on a cold night."
|
||||
value = 2
|
||||
|
||||
/datum/reagent/consumable/ethanol/peppermint_patty/on_mob_life(mob/living/carbon/M)
|
||||
M.apply_status_effect(/datum/status_effect/throat_soothed)
|
||||
@@ -1812,7 +1733,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_name = "Alexander"
|
||||
glass_desc = "A creamy, indulgent delight that is stronger than it seems."
|
||||
var/obj/item/shield/mighty_shield
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/alexander/on_mob_metabolize(mob/living/L)
|
||||
if(ishuman(L))
|
||||
@@ -1844,7 +1764,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "sidecar"
|
||||
glass_name = "Sidecar"
|
||||
glass_desc = "The one ride you'll gladly give up the wheel for."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/between_the_sheets
|
||||
name = "Between the Sheets"
|
||||
@@ -1856,7 +1775,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "between_the_sheets"
|
||||
glass_name = "Between the Sheets"
|
||||
glass_desc = "The only drink that comes with a label reminding you of Nanotrasen's zero-tolerance promiscuity policy."
|
||||
value = 2
|
||||
|
||||
/datum/reagent/consumable/ethanol/between_the_sheets/on_mob_life(mob/living/L)
|
||||
..()
|
||||
@@ -1881,7 +1799,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "kamikaze"
|
||||
glass_name = "Kamikaze"
|
||||
glass_desc = "Divinely windy."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/mojito
|
||||
name = "Mojito"
|
||||
@@ -1893,7 +1810,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "mojito"
|
||||
glass_name = "Mojito"
|
||||
glass_desc = "A drink that looks as refreshing as it tastes."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/moscow_mule
|
||||
name = "Moscow Mule"
|
||||
@@ -1914,7 +1830,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
taste_description = "utter bitterness"
|
||||
glass_name = "glass of fernet"
|
||||
glass_desc = "A glass of pure Fernet. Only an absolute madman would drink this alone."
|
||||
value = 0.1
|
||||
|
||||
/datum/reagent/consumable/ethanol/fernet/on_mob_life(mob/living/carbon/M)
|
||||
if(M.nutrition <= NUTRITION_LEVEL_STARVING)
|
||||
@@ -1933,7 +1848,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
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."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/fernet_cola/on_mob_life(mob/living/carbon/M)
|
||||
if(M.nutrition <= NUTRITION_LEVEL_STARVING)
|
||||
@@ -1943,7 +1857,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
return ..()
|
||||
|
||||
/datum/reagent/consumable/ethanol/fanciulli
|
||||
|
||||
name = "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
|
||||
@@ -1953,7 +1866,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "fanciulli"
|
||||
glass_name = "glass of fanciulli"
|
||||
glass_desc = "A glass of Fanciulli. It's just Manhattan with Fernet."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/fanciulli/on_mob_life(mob/living/carbon/M)
|
||||
M.nutrition = max(M.nutrition - 5, 0)
|
||||
@@ -1966,7 +1878,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
. = TRUE
|
||||
..()
|
||||
|
||||
|
||||
/datum/reagent/consumable/ethanol/branca_menta
|
||||
name = "Branca Menta"
|
||||
description = "A refreshing mixture of bitter Fernet with mint creme liquour."
|
||||
@@ -1977,7 +1888,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
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
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/branca_menta/on_mob_life(mob/living/carbon/M)
|
||||
M.adjust_bodytemperature(-20 * TEMPERATURE_DAMAGE_COEFFICIENT, T0C)
|
||||
@@ -2000,7 +1910,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "blank_paper"
|
||||
glass_name = "glass of blank paper"
|
||||
glass_desc = "A fizzy cocktail for those looking to start fresh."
|
||||
value = 1
|
||||
value = REAGENT_VALUE_UNCOMMON
|
||||
|
||||
/datum/reagent/consumable/ethanol/blank_paper/on_mob_life(mob/living/carbon/M)
|
||||
if(ishuman(M) && M.job == "Mime")
|
||||
@@ -2017,7 +1927,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "champagne_glass"
|
||||
glass_name = "Champagne"
|
||||
glass_desc = "The flute clearly displays the slowly rising bubbles."
|
||||
value = 1
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/consumable/ethanol/wizz_fizz
|
||||
name = "Wizz Fizz"
|
||||
@@ -2029,7 +1939,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "wizz_fizz"
|
||||
glass_name = "Wizz Fizz"
|
||||
glass_desc = "The glass bubbles and froths with an almost magical intensity."
|
||||
value = 1
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/consumable/ethanol/wizz_fizz/on_mob_life(mob/living/carbon/M)
|
||||
//A healing drink similar to Quadruple Sec, Ling Stings, and Screwdrivers for the Wizznerds; the check is consistent with the changeling sting
|
||||
@@ -2049,7 +1959,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "bug_spray"
|
||||
glass_name = "Bug Spray"
|
||||
glass_desc = "Your eyes begin to water as the sting of alcohol reaches them."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/bug_spray/on_mob_life(mob/living/carbon/M)
|
||||
//Bugs should not drink Bug spray.
|
||||
@@ -2071,7 +1980,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "applejack_glass"
|
||||
glass_name = "Applejack"
|
||||
glass_desc = "You feel like you could drink this all neight."
|
||||
value = 0.1
|
||||
|
||||
/datum/reagent/consumable/ethanol/jack_rose
|
||||
name = "Jack Rose"
|
||||
@@ -2083,7 +1991,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "jack_rose"
|
||||
glass_name = "Jack Rose"
|
||||
glass_desc = "Enough of these, and you really will start to suppose your toeses are roses."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/turbo
|
||||
name = "Turbo"
|
||||
@@ -2095,7 +2002,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "turbo"
|
||||
glass_name = "Turbo"
|
||||
glass_desc = "A turbulent cocktail for outlaw hoverbikers."
|
||||
value = 0.3
|
||||
value = REAGENT_VALUE_RARE
|
||||
|
||||
/datum/reagent/consumable/ethanol/turbo/on_mob_life(mob/living/carbon/M)
|
||||
if(prob(4))
|
||||
@@ -2113,7 +2020,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "old_timer"
|
||||
glass_name = "Old Timer"
|
||||
glass_desc = "WARNING! May cause premature aging!"
|
||||
value = 2
|
||||
value = REAGENT_VALUE_UNCOMMON //Parsnip juice? Really? lol
|
||||
|
||||
/datum/reagent/consumable/ethanol/old_timer/on_mob_life(mob/living/carbon/M)
|
||||
if(prob(20))
|
||||
@@ -2146,7 +2053,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "rubberneck"
|
||||
glass_name = "Rubberneck"
|
||||
glass_desc = "A popular drink amongst those adhering to an all synthetic diet."
|
||||
value = 1
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/consumable/ethanol/duplex
|
||||
name = "Duplex"
|
||||
@@ -2158,7 +2065,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "duplex"
|
||||
glass_name = "Duplex"
|
||||
glass_desc = "To imbibe one component separately from the other is consider a great faux pas."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/trappist
|
||||
name = "Trappist Beer"
|
||||
@@ -2170,7 +2076,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "trappistglass"
|
||||
glass_name = "Trappist Beer"
|
||||
glass_desc = "boozy Catholicism in a glass."
|
||||
value = 1
|
||||
|
||||
/datum/reagent/consumable/ethanol/trappist/on_mob_life(mob/living/carbon/M)
|
||||
if(M.mind.isholy)
|
||||
@@ -2188,8 +2093,8 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "blazaamglass"
|
||||
glass_name = "Blazaam"
|
||||
glass_desc = "The glass seems to be sliding between realities. Doubles as a Berenstain remover."
|
||||
value = REAGENT_VALUE_UNCOMMON
|
||||
var/stored_teleports = 0
|
||||
value = 4
|
||||
|
||||
/datum/reagent/consumable/ethanol/blazaam/on_mob_life(mob/living/carbon/M)
|
||||
if(M.drunkenness > 40)
|
||||
@@ -2211,7 +2116,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "planet_cracker"
|
||||
glass_name = "Planet Cracker"
|
||||
glass_desc = "Although historians believe the drink was originally created to commemorate the end of an important conflict in man's past, its origins have largely been forgotten and it is today seen more as a general symbol of human supremacy."
|
||||
value = 1
|
||||
value = REAGENT_VALUE_VERY_RARE
|
||||
|
||||
/datum/reagent/consumable/ethanol/mauna_loa
|
||||
name = "Mauna Loa"
|
||||
@@ -2223,6 +2128,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "mauna_loa"
|
||||
glass_name = "Mauna Loa"
|
||||
glass_desc = "Lavaland in a drink... mug... volcano... thing."
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/consumable/ethanol/mauna_loa/on_mob_life(mob/living/carbon/M)
|
||||
// Heats the user up while the reagent is in the body. Occasionally makes you burst into flames.
|
||||
@@ -2236,13 +2142,14 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
name = "Commander and Chief"
|
||||
description = "A cocktail for the captain on the go."
|
||||
color = "#ffffc9"
|
||||
can_synth = FALSE
|
||||
boozepwr = 50
|
||||
quality = DRINK_FANTASTIC
|
||||
taste_description = "duty and responsibility"
|
||||
glass_icon_state = "commander_and_chief"
|
||||
glass_name = "Commander and Chief"
|
||||
glass_desc = "The gems of this majestic chalice represent the departments and their Heads."
|
||||
value = 10
|
||||
value = REAGENT_VALUE_AMAZING
|
||||
|
||||
/datum/reagent/consumable/ethanol/commander_and_chief/on_mob_life(mob/living/carbon/M)
|
||||
if(M.mind && HAS_TRAIT(M.mind, TRAIT_CAPTAIN_METABOLISM))
|
||||
@@ -2281,6 +2188,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "hellfire"
|
||||
glass_name = "Hellfire"
|
||||
glass_desc = "An amber colored drink that isn't quite as hot as it looks."
|
||||
value = REAGENT_VALUE_UNCOMMON
|
||||
|
||||
/datum/reagent/consumable/ethanol/hellfire/on_mob_life(mob/living/carbon/M)
|
||||
M.adjust_bodytemperature(30 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, BODYTEMP_NORMAL + 30)
|
||||
@@ -2296,6 +2204,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "sins_delight"
|
||||
glass_name = "Sin's Delight"
|
||||
glass_desc = "You can smell the seven sins rolling off the top of the glass."
|
||||
value = REAGENT_VALUE_RARE
|
||||
|
||||
/datum/reagent/consumable/ethanol/strawberry_daiquiri
|
||||
name = "Strawberry Daiquiri"
|
||||
@@ -2328,6 +2237,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "miami_vice"
|
||||
glass_name = "Miami Vice"
|
||||
glass_desc = "Strawberries and coconut, like yin and yang."
|
||||
value = REAGENT_VALUE_UNCOMMON
|
||||
|
||||
/datum/reagent/consumable/ethanol/malibu_sunset
|
||||
name = "Malibu Sunset"
|
||||
@@ -2350,6 +2260,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
glass_icon_state = "hotlime_miami"
|
||||
glass_name = "Hotlime Miami"
|
||||
glass_desc = "This looks very aesthetically pleasing."
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/consumable/ethanol/hotlime_miami/on_mob_life(mob/living/carbon/M)
|
||||
M.set_drugginess(50)
|
||||
@@ -2580,7 +2491,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
|
||||
var/list/names = list("null fruit" = 1) //Names of the fruits used. Associative list where name is key, value is the percentage of that fruit.
|
||||
var/list/tastes = list("bad coding" = 1) //List of tastes. See above.
|
||||
pH = 4
|
||||
value = 4
|
||||
|
||||
/datum/reagent/consumable/ethanol/fruit_wine/on_new(list/data)
|
||||
names = data["names"]
|
||||
|
||||
@@ -165,6 +165,7 @@
|
||||
metabolization_rate = INFINITY
|
||||
color = "#FF4DD2"
|
||||
taste_description = "laughter"
|
||||
value = REAGENT_VALUE_VERY_COMMON
|
||||
|
||||
/datum/reagent/consumable/laughter/on_mob_life(mob/living/carbon/M)
|
||||
M.emote("laugh")
|
||||
@@ -177,6 +178,7 @@
|
||||
metabolization_rate = 1.5 * REAGENTS_METABOLISM
|
||||
color = "#FF4DD2"
|
||||
taste_description = "laughter"
|
||||
value = REAGENT_VALUE_RARE
|
||||
|
||||
/datum/reagent/consumable/superlaughter/on_mob_life(mob/living/carbon/M)
|
||||
if(prob(30))
|
||||
@@ -210,6 +212,7 @@
|
||||
glass_name = "glass of milk"
|
||||
glass_desc = "White and nutritious goodness!"
|
||||
pH = 6.5
|
||||
value = REAGENT_VALUE_VERY_COMMON
|
||||
|
||||
/datum/reagent/consumable/milk/on_mob_life(mob/living/carbon/M)
|
||||
if(HAS_TRAIT(M, TRAIT_CALCIUM_HEALER))
|
||||
@@ -231,6 +234,7 @@
|
||||
glass_icon_state = "glass_white"
|
||||
glass_name = "glass of soy milk"
|
||||
glass_desc = "White and nutritious soy goodness!"
|
||||
value = REAGENT_VALUE_VERY_COMMON
|
||||
|
||||
/datum/reagent/consumable/soymilk/on_mob_life(mob/living/carbon/M)
|
||||
if(M.getBruteLoss() && prob(20))
|
||||
@@ -324,6 +328,7 @@
|
||||
glass_icon_state = "lemonpitcher"
|
||||
glass_name = "pitcher of lemonade"
|
||||
glass_desc = "This drink leaves you feeling nostalgic for some reason."
|
||||
value = REAGENT_VALUE_VERY_COMMON
|
||||
|
||||
/datum/reagent/consumable/tea/arnold_palmer
|
||||
name = "Arnold Palmer"
|
||||
@@ -334,6 +339,7 @@
|
||||
glass_icon_state = "arnold_palmer"
|
||||
glass_name = "Arnold Palmer"
|
||||
glass_desc = "You feel like taking a few golf swings after a few swigs of this."
|
||||
value = REAGENT_VALUE_VERY_COMMON
|
||||
|
||||
/datum/reagent/consumable/tea/arnold_palmer/on_mob_life(mob/living/carbon/M)
|
||||
if(prob(5))
|
||||
@@ -404,6 +410,7 @@
|
||||
glass_icon_state = "nuka_colaglass"
|
||||
glass_name = "glass of Nuka Cola"
|
||||
glass_desc = "Don't cry, Don't raise your eye, It's only nuclear wasteland."
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/consumable/nuka_cola/on_mob_life(mob/living/carbon/M)
|
||||
M.Jitter(20)
|
||||
@@ -559,6 +566,7 @@
|
||||
glass_icon_state = "grey_bull_glass"
|
||||
glass_name = "glass of Grey Bull"
|
||||
glass_desc = "Surprisingly it isnt grey."
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/consumable/grey_bull/on_mob_metabolize(mob/living/L)
|
||||
..()
|
||||
@@ -633,6 +641,7 @@
|
||||
glass_icon_state = "soy_latte"
|
||||
glass_name = "soy latte"
|
||||
glass_desc = "A nice and refreshing beverage while you're reading."
|
||||
value = REAGENT_VALUE_VERY_COMMON
|
||||
|
||||
/datum/reagent/consumable/soy_latte/on_mob_life(mob/living/carbon/M)
|
||||
M.dizziness = max(0,M.dizziness-5)
|
||||
@@ -654,6 +663,7 @@
|
||||
glass_icon_state = "cafe_latte"
|
||||
glass_name = "cafe latte"
|
||||
glass_desc = "A nice, strong and refreshing beverage while you're reading."
|
||||
value = REAGENT_VALUE_VERY_COMMON
|
||||
|
||||
/datum/reagent/consumable/cafe_latte/on_mob_life(mob/living/carbon/M)
|
||||
M.dizziness = max(0,M.dizziness-5)
|
||||
@@ -675,6 +685,7 @@
|
||||
glass_icon_state = "doctorsdelightglass"
|
||||
glass_name = "Doctor's Delight"
|
||||
glass_desc = "The space doctor's favorite. Guaranteed to restore bodily injury; side effects include cravings and hunger."
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/consumable/doctor_delight/on_mob_life(mob/living/carbon/M)
|
||||
M.adjustBruteLoss(-0.5, 0)
|
||||
@@ -697,6 +708,7 @@
|
||||
glass_icon_state = "chocolatepudding"
|
||||
glass_name = "chocolate pudding"
|
||||
glass_desc = "Tasty."
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/consumable/vanillapudding
|
||||
name = "Vanilla Pudding"
|
||||
@@ -708,6 +720,7 @@
|
||||
glass_icon_state = "vanillapudding"
|
||||
glass_name = "vanilla pudding"
|
||||
glass_desc = "Tasty."
|
||||
value = REAGENT_VALUE_UNCOMMON //real vanilla.
|
||||
|
||||
/datum/reagent/consumable/cherryshake
|
||||
name = "Cherry Shake"
|
||||
@@ -719,6 +732,7 @@
|
||||
glass_icon_state = "cherryshake"
|
||||
glass_name = "cherry shake"
|
||||
glass_desc = "A cherry flavored milkshake."
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/consumable/bluecherryshake
|
||||
name = "Blue Cherry Shake"
|
||||
@@ -730,6 +744,7 @@
|
||||
glass_icon_state = "bluecherryshake"
|
||||
glass_name = "blue cherry shake"
|
||||
glass_desc = "An exotic blue milkshake."
|
||||
value = REAGENT_VALUE_UNCOMMON
|
||||
|
||||
/datum/reagent/consumable/pumpkin_latte
|
||||
name = "Pumpkin Latte"
|
||||
@@ -741,6 +756,7 @@
|
||||
glass_icon_state = "pumpkin_latte"
|
||||
glass_name = "pumpkin latte"
|
||||
glass_desc = "A mix of coffee and pumpkin juice."
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/consumable/gibbfloats
|
||||
name = "Gibb Floats"
|
||||
@@ -752,6 +768,7 @@
|
||||
glass_icon_state = "gibbfloats"
|
||||
glass_name = "Gibbfloat"
|
||||
glass_desc = "Dr. Gibb with ice cream on top."
|
||||
value = REAGENT_VALUE_VERY_COMMON
|
||||
|
||||
/datum/reagent/consumable/pumpkinjuice
|
||||
name = "Pumpkin Juice"
|
||||
@@ -764,6 +781,7 @@
|
||||
description = "Juiced from real blumpkin."
|
||||
color = "#00BFFF"
|
||||
taste_description = "a mouthful of pool water"
|
||||
value = REAGENT_VALUE_VERY_COMMON
|
||||
|
||||
/datum/reagent/consumable/triple_citrus
|
||||
name = "Triple Citrus"
|
||||
@@ -793,6 +811,7 @@
|
||||
color = "#7D4E29"
|
||||
quality = DRINK_NICE
|
||||
taste_description = "chocolate milk"
|
||||
value = REAGENT_VALUE_VERY_COMMON
|
||||
|
||||
/datum/reagent/consumable/menthol
|
||||
name = "Menthol"
|
||||
@@ -821,6 +840,7 @@
|
||||
color = "#FFA500"
|
||||
taste_description = "parsnip"
|
||||
glass_name = "glass of parsnip juice"
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/consumable/peachjuice //Intended to be extremely rare due to being the limiting ingredients in the blazaam drink
|
||||
name = "Peach Juice"
|
||||
@@ -846,6 +866,7 @@
|
||||
glass_icon_state = "cream_soda"
|
||||
glass_name = "Cream Soda"
|
||||
glass_desc = "A classic space-American vanilla flavored soft drink."
|
||||
value = REAGENT_VALUE_VERY_COMMON //just a little vanilla
|
||||
|
||||
/datum/reagent/consumable/cream_soda/on_mob_life(mob/living/carbon/M)
|
||||
M.adjust_bodytemperature(-5 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL)
|
||||
@@ -874,6 +895,7 @@
|
||||
glass_icon_state = "red_queen"
|
||||
glass_name = "Red Queen"
|
||||
glass_desc = "DRINK ME."
|
||||
value = REAGENT_VALUE_COMMON //growth serum.
|
||||
var/current_size = RESIZE_DEFAULT_SIZE
|
||||
|
||||
/datum/reagent/consumable/red_queen/on_mob_life(mob/living/carbon/H)
|
||||
@@ -899,10 +921,11 @@
|
||||
description = "A drink of a bygone era of milk and artificial sweetener back on a rock."
|
||||
color = "#f76aeb"//rgb(247, 106, 235)
|
||||
glass_icon_state = "pinkmilk"
|
||||
quality = DRINK_FANTASTIC
|
||||
quality = DRINK_VERYGOOD
|
||||
taste_description = "sweet strawberry and milk cream"
|
||||
glass_name = "tall glass of strawberry milk"
|
||||
glass_desc = "Delicious flavored strawberry syrup mixed with milk."
|
||||
value = REAGENT_VALUE_VERY_COMMON
|
||||
|
||||
/datum/reagent/consumable/tea/pinkmilk/on_mob_life(mob/living/carbon/M)
|
||||
if(prob(15))
|
||||
@@ -915,7 +938,7 @@
|
||||
description = "A timeless classic!"
|
||||
color = "#f76aeb"//rgb(247, 106, 235)
|
||||
glass_icon_state = "pinktea"
|
||||
quality = DRINK_FANTASTIC
|
||||
quality = DRINK_VERYGOOD
|
||||
taste_description = "sweet tea with a hint of strawberry"
|
||||
glass_name = "mug of strawberry tea"
|
||||
glass_desc = "Delicious traditional tea flavored with strawberries."
|
||||
@@ -958,6 +981,7 @@
|
||||
glass_icon_state = "monkey_energy_glass"
|
||||
glass_name = "glass of Monkey Energy"
|
||||
glass_desc = "You can unleash the ape, but without the pop of the can?"
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/consumable/monkey_energy/on_mob_life(mob/living/carbon/M)
|
||||
M.Jitter(20)
|
||||
@@ -975,3 +999,4 @@
|
||||
glass_icon_state = "glass_yellow"
|
||||
glass_name = "glass of bungo juice"
|
||||
glass_desc = "Exotic! You feel like you are on vacation already."
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
/datum/reagent/drug
|
||||
name = "Drug"
|
||||
value = 12
|
||||
metabolization_rate = 0.5 * REAGENTS_METABOLISM
|
||||
taste_description = "bitterness"
|
||||
var/trippy = TRUE //Does this drug make you trip?
|
||||
@@ -11,7 +10,7 @@
|
||||
|
||||
/datum/reagent/drug/space_drugs
|
||||
name = "Space drugs"
|
||||
value = 6
|
||||
value = REAGENT_VALUE_VERY_COMMON
|
||||
description = "An illegal chemical compound used as drug."
|
||||
color = "#60A584" // rgb: 96, 165, 132
|
||||
overdose_threshold = 30
|
||||
@@ -38,7 +37,6 @@
|
||||
|
||||
/datum/reagent/drug/nicotine
|
||||
name = "Nicotine"
|
||||
value = 0
|
||||
description = "Slightly reduces stun times. If overdosed it will deal toxin and oxygen damage."
|
||||
reagent_state = LIQUID
|
||||
color = "#60A584" // rgb: 96, 165, 132
|
||||
@@ -66,6 +64,7 @@
|
||||
overdose_threshold = 20
|
||||
addiction_threshold = 10
|
||||
pH = 10
|
||||
value = REAGENT_VALUE_UNCOMMON
|
||||
|
||||
/datum/reagent/drug/crank/on_mob_life(mob/living/carbon/M)
|
||||
if(prob(5))
|
||||
@@ -112,6 +111,7 @@
|
||||
overdose_threshold = 20
|
||||
addiction_threshold = 15
|
||||
pH = 9
|
||||
value = REAGENT_VALUE_UNCOMMON
|
||||
|
||||
|
||||
/datum/reagent/drug/krokodil/on_mob_life(mob/living/carbon/M)
|
||||
@@ -167,6 +167,7 @@
|
||||
var/jitter = TRUE
|
||||
var/confusion = TRUE
|
||||
pH = 5
|
||||
value = REAGENT_VALUE_UNCOMMON
|
||||
|
||||
/datum/reagent/drug/methamphetamine/on_mob_metabolize(mob/living/L)
|
||||
..()
|
||||
@@ -250,6 +251,7 @@
|
||||
overdose_threshold = 35
|
||||
jitter = FALSE
|
||||
brain_damage = FALSE
|
||||
value = REAGENT_VALUE_RARE
|
||||
|
||||
/datum/reagent/drug/bath_salts
|
||||
name = "Bath Salts"
|
||||
@@ -261,6 +263,7 @@
|
||||
taste_description = "salt" // because they're bathsalts?
|
||||
var/datum/brain_trauma/special/psychotic_brawling/bath_salts/rage
|
||||
pH = 8.2
|
||||
value = REAGENT_VALUE_RARE
|
||||
|
||||
/datum/reagent/drug/bath_salts/on_mob_metabolize(mob/living/L)
|
||||
..()
|
||||
@@ -357,6 +360,7 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#78FFF0"
|
||||
pH = 9.2
|
||||
value = REAGENT_VALUE_RARE
|
||||
|
||||
/datum/reagent/drug/aranesp/on_mob_life(mob/living/carbon/M)
|
||||
var/high_message = pick("You feel amped up.", "You feel ready.", "You feel like you can push it to the limit.")
|
||||
@@ -378,6 +382,7 @@
|
||||
addiction_threshold = 10
|
||||
overdose_threshold = 20
|
||||
pH = 10.5
|
||||
value = REAGENT_VALUE_RARE
|
||||
|
||||
/datum/reagent/drug/happiness/on_mob_add(mob/living/L)
|
||||
..()
|
||||
@@ -457,10 +462,11 @@
|
||||
addiction_stage3_end = 40
|
||||
addiction_stage4_end = 240
|
||||
pH = 12.5
|
||||
value = REAGENT_VALUE_EXCEPTIONAL
|
||||
|
||||
/datum/reagent/drug/skooma/on_mob_metabolize(mob/living/L)
|
||||
. = ..()
|
||||
L.add_movespeed_modifier(type, update=TRUE, priority=100, multiplicative_slowdown=-1, blacklisted_movetypes=(FLYING|FLOATING))
|
||||
L.add_movespeed_modifier(/datum/movespeed_modifier/reagent/skooma)
|
||||
L.next_move_modifier *= 2
|
||||
if(ishuman(L))
|
||||
var/mob/living/carbon/human/H = L
|
||||
@@ -473,7 +479,7 @@
|
||||
|
||||
/datum/reagent/drug/skooma/on_mob_end_metabolize(mob/living/L)
|
||||
. = ..()
|
||||
L.remove_movespeed_modifier(type)
|
||||
L.remove_movespeed_modifier(/datum/movespeed_modifier/reagent/skooma)
|
||||
L.next_move_modifier *= 0.5
|
||||
if(ishuman(L))
|
||||
var/mob/living/carbon/human/H = L
|
||||
@@ -521,3 +527,35 @@
|
||||
if(prob(40))
|
||||
M.emote(pick("twitch","drool","moan"))
|
||||
..()
|
||||
|
||||
/datum/reagent/syndicateadrenals
|
||||
name = "Syndicate Adrenaline"
|
||||
description = "Regenerates your stamina and increases your reaction time."
|
||||
color = "#E62111"
|
||||
overdose_threshold = 6
|
||||
value = REAGENT_VALUE_VERY_RARE
|
||||
|
||||
/datum/reagent/syndicateadrenals/on_mob_life(mob/living/M)
|
||||
M.adjustStaminaLoss(-5*REM)
|
||||
. = ..()
|
||||
|
||||
/datum/reagent/syndicateadrenals/on_mob_metabolize(mob/living/M)
|
||||
. = ..()
|
||||
if(istype(M))
|
||||
M.next_move_modifier *= 0.5
|
||||
to_chat(M, "<span class='notice'>You feel an intense surge of energy rushing through your veins.</span>")
|
||||
|
||||
/datum/reagent/syndicateadrenals/on_mob_end_metabolize(mob/living/M)
|
||||
. = ..()
|
||||
if(istype(M))
|
||||
M.next_move_modifier *= 2
|
||||
to_chat(M, "<span class='notice'>You feel as though the world around you is going faster.</span>")
|
||||
|
||||
/datum/reagent/syndicateadrenals/overdose_start(mob/living/M)
|
||||
to_chat(M, "<span class='danger'>You feel an intense pain in your chest...</span>")
|
||||
|
||||
/datum/reagent/syndicateadrenals/overdose_process(mob/living/M)
|
||||
if(iscarbon(M))
|
||||
var/mob/living/carbon/C = M
|
||||
if(!C.undergoing_cardiac_arrest())
|
||||
C.set_heartattack(TRUE)
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
name = "Consumable"
|
||||
taste_description = "generic food"
|
||||
taste_mult = 4
|
||||
value = 0.1
|
||||
value = REAGENT_VALUE_VERY_COMMON
|
||||
var/nutriment_factor = 1 * REAGENTS_METABOLISM
|
||||
var/quality = 0 //affects mood, typically higher for mixed drinks with more complex recipes
|
||||
|
||||
@@ -90,7 +90,7 @@
|
||||
/datum/reagent/consumable/nutriment/vitamin
|
||||
name = "Vitamin"
|
||||
description = "All the best vitamins, minerals, and carbohydrates the body needs in pure form."
|
||||
value = 0.5
|
||||
value = REAGENT_VALUE_COMMON
|
||||
nutriment_factor = 15 * REAGENTS_METABOLISM //The are the best food for you!
|
||||
brute_heal = 1
|
||||
burn_heal = 1
|
||||
@@ -105,7 +105,7 @@
|
||||
description = "A variety of cooking oil derived from fat or plants. Used in food preparation and frying."
|
||||
color = "#EADD6B" //RGB: 234, 221, 107 (based off of canola oil)
|
||||
taste_mult = 0.8
|
||||
value = 1
|
||||
value = REAGENT_VALUE_COMMON
|
||||
taste_description = "oil"
|
||||
nutriment_factor = 5 * REAGENTS_METABOLISM //Not very healthy on its own
|
||||
metabolization_rate = 10 * REAGENTS_METABOLISM
|
||||
@@ -155,7 +155,7 @@
|
||||
metabolization_rate = 2 * REAGENTS_METABOLISM
|
||||
overdose_threshold = 200 // Hyperglycaemic shock
|
||||
taste_description = "sweetness"
|
||||
value = 1
|
||||
value = REAGENT_VALUE_NONE
|
||||
|
||||
/datum/reagent/consumable/sugar/overdose_start(mob/living/M)
|
||||
to_chat(M, "<span class='userdanger'>You go into hyperglycaemic shock! Lay off the twinkies!</span>")
|
||||
@@ -179,6 +179,7 @@
|
||||
description = "A salty sauce made from the soy plant."
|
||||
color = "#792300" // rgb: 121, 35, 0
|
||||
taste_description = "umami"
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/consumable/ketchup
|
||||
name = "Ketchup"
|
||||
@@ -230,7 +231,7 @@
|
||||
description = "A special oil that noticably chills the body. Extracted from Icepeppers and slimes."
|
||||
color = "#8BA6E9" // rgb: 139, 166, 233
|
||||
taste_description = "mint"
|
||||
value = 2
|
||||
value = REAGENT_VALUE_COMMON
|
||||
pH = 13 //HMM! I wonder
|
||||
|
||||
/datum/reagent/consumable/frostoil/on_mob_life(mob/living/carbon/M)
|
||||
@@ -399,6 +400,7 @@
|
||||
metabolization_rate = 0.2 * REAGENTS_METABOLISM
|
||||
taste_description = "mushroom"
|
||||
pH = 11
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/drug/mushroomhallucinogen/on_mob_life(mob/living/carbon/M)
|
||||
M.slurring = max(M.slurring,50)
|
||||
@@ -429,6 +431,7 @@
|
||||
color = "#FEFEFE"
|
||||
taste_description = "garlic"
|
||||
metabolization_rate = 0.15 * REAGENTS_METABOLISM
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/consumable/garlic/on_mob_life(mob/living/carbon/M)
|
||||
if(isvampire(M)) //incapacitating but not lethal. Unfortunately, vampires cannot vomit.
|
||||
@@ -459,7 +462,7 @@
|
||||
M.emote("scream")
|
||||
if(prob(min(5, current_cycle)) && iscarbon(M))
|
||||
var/mob/living/carbon/C
|
||||
C.vomit()
|
||||
C.vomit()
|
||||
if(INJECT)
|
||||
if(prob(min(20, current_cycle)))
|
||||
to_chat(M, "<span class='warning'>You feel like your veins are boiling!</span>")
|
||||
@@ -468,10 +471,10 @@
|
||||
..()
|
||||
/datum/reagent/consumable/sprinkles
|
||||
name = "Sprinkles"
|
||||
value = 3
|
||||
description = "Multi-colored little bits of sugar, commonly found on donuts. Loved by cops."
|
||||
color = "#FF00FF" // rgb: 255, 0, 255
|
||||
taste_description = "childhood whimsy"
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/consumable/sprinkles/on_mob_life(mob/living/carbon/M)
|
||||
if(M.mind && HAS_TRAIT(M.mind, TRAIT_LAW_ENFORCEMENT_METABOLISM))
|
||||
@@ -483,7 +486,7 @@
|
||||
name = "Peanut Butter"
|
||||
description = "A popular food paste made from ground dry-roasted peanuts."
|
||||
color = "#C29261"
|
||||
value = 3
|
||||
value = REAGENT_VALUE_UNCOMMON
|
||||
nutriment_factor = 10 * REAGENTS_METABOLISM
|
||||
taste_description = "peanuts"
|
||||
|
||||
@@ -491,7 +494,7 @@
|
||||
name = "Corn Oil"
|
||||
description = "An oil derived from various types of corn."
|
||||
nutriment_factor = 12 * REAGENTS_METABOLISM
|
||||
value = 4
|
||||
value = REAGENT_VALUE_UNCOMMON
|
||||
color = "#302000" // rgb: 48, 32, 0
|
||||
taste_description = "slime"
|
||||
|
||||
@@ -509,7 +512,7 @@
|
||||
|
||||
/datum/reagent/consumable/enzyme
|
||||
name = "Universal Enzyme"
|
||||
value = 1
|
||||
value = REAGENT_VALUE_COMMON
|
||||
description = "A universal enzyme used in the preperation of certain chemicals and foods."
|
||||
color = "#365E30" // rgb: 54, 94, 48
|
||||
taste_description = "sweetness"
|
||||
@@ -545,7 +548,6 @@
|
||||
|
||||
/datum/reagent/consumable/flour
|
||||
name = "Flour"
|
||||
value = 0.5
|
||||
description = "This is what you rub all over yourself to pretend to be a ghost."
|
||||
reagent_state = SOLID
|
||||
color = "#FFFFFF" // rgb: 0, 0, 0
|
||||
@@ -562,19 +564,18 @@
|
||||
name = "Cherry Jelly"
|
||||
description = "Totally the best. Only to be spread on foods with excellent lateral symmetry."
|
||||
color = "#801E28" // rgb: 128, 30, 40
|
||||
value = 1
|
||||
value = REAGENT_VALUE_COMMON
|
||||
taste_description = "cherry"
|
||||
|
||||
/datum/reagent/consumable/bluecherryjelly
|
||||
name = "Blue Cherry Jelly"
|
||||
description = "Blue and tastier kind of cherry jelly."
|
||||
color = "#00F0FF"
|
||||
value = 12
|
||||
value = REAGENT_VALUE_UNCOMMON
|
||||
taste_description = "blue cherry"
|
||||
|
||||
/datum/reagent/consumable/rice
|
||||
name = "Rice"
|
||||
value = 0.5
|
||||
description = "tiny nutritious grains"
|
||||
reagent_state = SOLID
|
||||
nutriment_factor = 3 * REAGENTS_METABOLISM
|
||||
@@ -583,7 +584,7 @@
|
||||
|
||||
/datum/reagent/consumable/vanilla
|
||||
name = "Vanilla Powder"
|
||||
value = 1
|
||||
value = REAGENT_VALUE_UNCOMMON
|
||||
description = "A fatty, bitter paste made from vanilla pods."
|
||||
reagent_state = SOLID
|
||||
nutriment_factor = 5 * REAGENTS_METABOLISM
|
||||
@@ -592,7 +593,6 @@
|
||||
|
||||
/datum/reagent/consumable/eggyolk
|
||||
name = "Egg Yolk"
|
||||
value = 1
|
||||
description = "It's full of protein."
|
||||
nutriment_factor = 3 * REAGENTS_METABOLISM
|
||||
color = "#FFB500"
|
||||
@@ -600,14 +600,13 @@
|
||||
|
||||
/datum/reagent/consumable/corn_starch
|
||||
name = "Corn Starch"
|
||||
value = 2
|
||||
description = "A slippery solution."
|
||||
color = "#f7f6e4"
|
||||
taste_description = "slime"
|
||||
|
||||
/datum/reagent/consumable/corn_syrup
|
||||
name = "Corn Syrup"
|
||||
value = 1
|
||||
value = REAGENT_VALUE_UNCOMMON
|
||||
description = "Decays into sugar."
|
||||
color = "#fff882"
|
||||
metabolization_rate = 3 * REAGENTS_METABOLISM
|
||||
@@ -621,7 +620,7 @@
|
||||
name = "honey"
|
||||
description = "Sweet sweet honey that decays into sugar. Has antibacterial and natural healing properties."
|
||||
color = "#d3a308"
|
||||
value = 15
|
||||
value = REAGENT_VALUE_COMMON
|
||||
nutriment_factor = 10 * REAGENTS_METABOLISM
|
||||
metabolization_rate = 1 * REAGENTS_METABOLISM
|
||||
taste_description = "sweetness"
|
||||
@@ -649,6 +648,7 @@
|
||||
color = "#DFDFDF"
|
||||
value = 5
|
||||
taste_description = "mayonnaise"
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/consumable/tearjuice
|
||||
name = "Tear Juice"
|
||||
@@ -656,6 +656,7 @@
|
||||
color = "#c0c9a0"
|
||||
taste_description = "bitterness"
|
||||
pH = 5
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/consumable/tearjuice/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
if(!istype(M))
|
||||
@@ -694,6 +695,7 @@
|
||||
reagent_state = SOLID
|
||||
nutriment_factor = 12 * REAGENTS_METABOLISM
|
||||
color = "#664330" // rgb: 102, 67, 48
|
||||
value = REAGENT_VALUE_RARE
|
||||
|
||||
/datum/reagent/consumable/nutriment/stabilized/on_mob_life(mob/living/carbon/M)
|
||||
if(M.nutrition > NUTRITION_LEVEL_FULL - 25)
|
||||
@@ -709,6 +711,7 @@
|
||||
color = "#1d043d"
|
||||
taste_description = "bitter mushroom"
|
||||
pH = 12
|
||||
value = REAGENT_VALUE_RARE
|
||||
|
||||
/datum/reagent/consumable/entpoly/on_mob_life(mob/living/carbon/M)
|
||||
if(current_cycle >= 10)
|
||||
@@ -729,6 +732,7 @@
|
||||
color = "#b5a213"
|
||||
taste_description = "tingling mushroom"
|
||||
pH = 11.2
|
||||
value = REAGENT_VALUE_RARE
|
||||
|
||||
/datum/reagent/consumable/tinlux/reaction_mob(mob/living/M)
|
||||
M.set_light(2)
|
||||
@@ -743,6 +747,7 @@
|
||||
nutriment_factor = 3 * REAGENTS_METABOLISM
|
||||
taste_description = "fruity mushroom"
|
||||
pH = 10.4
|
||||
value = REAGENT_VALUE_RARE
|
||||
|
||||
/datum/reagent/consumable/vitfro/on_mob_life(mob/living/carbon/M)
|
||||
if(prob(80))
|
||||
@@ -808,6 +813,7 @@
|
||||
taste_mult = 2
|
||||
taste_description = "caramel"
|
||||
reagent_state = SOLID
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/consumable/secretsauce
|
||||
name = "secret sauce"
|
||||
@@ -818,6 +824,7 @@
|
||||
taste_mult = 100
|
||||
can_synth = FALSE
|
||||
pH = 6.1
|
||||
value = REAGENT_VALUE_AMAZING
|
||||
|
||||
/datum/reagent/consumable/secretsauce/reaction_obj(obj/O, reac_volume)
|
||||
//splashing any amount above or equal to 1u of secret sauce onto a piece of food turns its quality to 100
|
||||
@@ -838,6 +845,7 @@
|
||||
taste_mult = 6
|
||||
taste_description = "smoke"
|
||||
overdose_threshold = 25
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/consumable/char/overdose_process(mob/living/carbon/M)
|
||||
if(prob(10))
|
||||
@@ -850,3 +858,4 @@
|
||||
color = "#78280A" // rgb: 120 40, 10
|
||||
taste_mult = 2.5 //sugar's 1.5, capsacin's 1.5, so a good middle ground.
|
||||
taste_description = "smokey sweetness"
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
|
||||
/datum/reagent/medicine
|
||||
name = "Medicine"
|
||||
value = 2
|
||||
taste_description = "bitterness"
|
||||
value = REAGENT_VALUE_VERY_COMMON //Low prices, spess medical companies are cheapstakes and products are taxed honk...
|
||||
|
||||
/datum/reagent/medicine/on_mob_life(mob/living/carbon/M)
|
||||
current_cycle++
|
||||
@@ -19,6 +19,7 @@
|
||||
description = "Leporazine will effectively regulate a patient's body temperature, ensuring it never leaves safe levels."
|
||||
pH = 8.4
|
||||
color = "#82b8aa"
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/medicine/leporazine/on_mob_life(mob/living/carbon/M)
|
||||
if(M.bodytemperature > BODYTEMP_NORMAL)
|
||||
@@ -33,6 +34,7 @@
|
||||
color = "#ffffff"
|
||||
can_synth = FALSE
|
||||
taste_description = "badmins"
|
||||
value = REAGENT_VALUE_GLORIOUS
|
||||
|
||||
/datum/reagent/medicine/adminordrazine/on_mob_life(mob/living/carbon/M)
|
||||
M.reagents.remove_all_type(/datum/reagent/toxin, 5*REM, 0, 1)
|
||||
@@ -101,6 +103,7 @@
|
||||
description = "Reduces drowsiness, hallucinations, and Histamine from body."
|
||||
color = "#EC536D" // rgb: 236, 83, 109
|
||||
pH = 5.2
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/medicine/synaphydramine/on_mob_life(mob/living/carbon/M)
|
||||
M.drowsyness = max(M.drowsyness-5, 0)
|
||||
@@ -131,6 +134,7 @@
|
||||
color = "#0000C8"
|
||||
taste_description = "sludge"
|
||||
pH = 11
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/medicine/cryoxadone/on_mob_life(mob/living/carbon/M)
|
||||
var/power = -0.00003 * (M.bodytemperature ** 2) + 3
|
||||
@@ -152,6 +156,7 @@
|
||||
taste_description = "muscle"
|
||||
metabolization_rate = 1.5 * REAGENTS_METABOLISM
|
||||
pH = 13
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/medicine/clonexadone/on_mob_life(mob/living/carbon/M)
|
||||
if(M.bodytemperature < T0C)
|
||||
@@ -167,6 +172,7 @@
|
||||
color = "#f7832a"
|
||||
taste_description = "spicy jelly"
|
||||
pH = 12
|
||||
value = REAGENT_VALUE_UNCOMMON
|
||||
|
||||
/datum/reagent/medicine/pyroxadone/on_mob_life(mob/living/carbon/M)
|
||||
if(M.bodytemperature > BODYTEMP_HEAT_DAMAGE_LIMIT)
|
||||
@@ -198,7 +204,7 @@
|
||||
overdose_threshold = 30
|
||||
taste_description = "fish"
|
||||
pH = 12.2
|
||||
value = 20
|
||||
value = REAGENT_VALUE_RARE
|
||||
|
||||
/datum/reagent/medicine/rezadone/on_mob_life(mob/living/carbon/M)
|
||||
M.setCloneLoss(0) //Rezadone is almost never used in favor of cryoxadone. Hopefully this will change that.
|
||||
@@ -239,7 +245,6 @@
|
||||
color = "#ffeac9"
|
||||
metabolization_rate = 5 * REAGENTS_METABOLISM
|
||||
overdose_threshold = 50
|
||||
value = 3
|
||||
|
||||
/datum/reagent/medicine/silver_sulfadiazine/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message = 1)
|
||||
if(iscarbon(M) && M.stat != DEAD)
|
||||
@@ -277,7 +282,7 @@
|
||||
metabolization_rate = 0.5 * REAGENTS_METABOLISM
|
||||
overdose_threshold = 25
|
||||
pH = 10.7
|
||||
value = 4
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/medicine/oxandrolone/on_mob_life(mob/living/carbon/M)
|
||||
if(M.getFireLoss() > 25)
|
||||
@@ -301,7 +306,6 @@
|
||||
pH = 6.7
|
||||
metabolization_rate = 5 * REAGENTS_METABOLISM
|
||||
overdose_threshold = 50
|
||||
value = 3
|
||||
|
||||
/datum/reagent/medicine/styptic_powder/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message = 1)
|
||||
if(iscarbon(M) && M.stat != DEAD)
|
||||
@@ -343,7 +347,6 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
|
||||
var/last_added = 0
|
||||
var/maximum_reachable = BLOOD_VOLUME_NORMAL - 10 //So that normal blood regeneration can continue with salglu active
|
||||
pH = 5.5
|
||||
value = 1
|
||||
|
||||
/datum/reagent/medicine/salglu_solution/on_mob_life(mob/living/carbon/M)
|
||||
if((HAS_TRAIT(M, TRAIT_NOMARROW)))
|
||||
@@ -384,6 +387,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
|
||||
color = "#6D6374"
|
||||
metabolization_rate = 0.4 * REAGENTS_METABOLISM
|
||||
pH = 2.6
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/medicine/mine_salve/on_mob_life(mob/living/carbon/C)
|
||||
C.hal_screwyhud = SCREWYHUD_HEALTHY
|
||||
@@ -424,7 +428,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
|
||||
pH = 11.5
|
||||
metabolization_rate = 5 * REAGENTS_METABOLISM
|
||||
overdose_threshold = 40
|
||||
value = 6
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/medicine/synthflesh/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message = 1)
|
||||
if(iscarbon(M))
|
||||
@@ -461,7 +465,6 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
|
||||
metabolization_rate = 0.5 * REAGENTS_METABOLISM
|
||||
taste_description = "ash"
|
||||
pH = 5
|
||||
value = 1
|
||||
|
||||
/datum/reagent/medicine/charcoal/on_mob_life(mob/living/carbon/M)
|
||||
M.adjustToxLoss(-2*REM, 0)
|
||||
@@ -480,7 +483,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
|
||||
metabolization_rate = 0.25 * REAGENTS_METABOLISM
|
||||
overdose_threshold = 30
|
||||
pH = 2
|
||||
value = 5
|
||||
value = REAGENT_VALUE_UNCOMMON
|
||||
|
||||
/datum/reagent/medicine/omnizine/on_mob_life(mob/living/carbon/M)
|
||||
M.adjustToxLoss(-0.5*REM, 0)
|
||||
@@ -537,6 +540,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
|
||||
color = "#003153" // RGB 0, 49, 83
|
||||
metabolization_rate = 0.5 * REAGENTS_METABOLISM
|
||||
pH = 8.9
|
||||
value = REAGENT_VALUE_COMMON //uncraftable
|
||||
|
||||
/datum/reagent/medicine/prussian_blue/on_mob_life(mob/living/carbon/M)
|
||||
if(M.radiation > 0)
|
||||
@@ -550,6 +554,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
|
||||
color = "#E6FFF0"
|
||||
metabolization_rate = 0.5 * REAGENTS_METABOLISM
|
||||
pH = 1 //One of the best buffers, NEVERMIND!
|
||||
value = REAGENT_VALUE_UNCOMMON
|
||||
var/healtoxinlover = FALSE
|
||||
|
||||
/datum/reagent/medicine/pen_acid/on_mob_life(mob/living/carbon/M)
|
||||
@@ -568,6 +573,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
|
||||
color = "#91D865"
|
||||
healtoxinlover = TRUE
|
||||
pH = 12//invert
|
||||
value = REAGENT_VALUE_RARE
|
||||
|
||||
/datum/reagent/medicine/sal_acid
|
||||
name = "Salicyclic Acid"
|
||||
@@ -577,6 +583,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
|
||||
metabolization_rate = 0.5 * REAGENTS_METABOLISM
|
||||
overdose_threshold = 25
|
||||
pH = 2.1
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
|
||||
/datum/reagent/medicine/sal_acid/on_mob_life(mob/living/carbon/M)
|
||||
@@ -688,6 +695,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
|
||||
color = "#64FFE6"
|
||||
metabolization_rate = 0.5 * REAGENTS_METABOLISM
|
||||
pH = 11.5
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/medicine/diphenhydramine/on_mob_life(mob/living/carbon/M)
|
||||
if(prob(10))
|
||||
@@ -708,10 +716,10 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
|
||||
|
||||
/datum/reagent/medicine/morphine/on_mob_metabolize(mob/living/L)
|
||||
..()
|
||||
L.ignore_slowdown(type)
|
||||
L.add_movespeed_mod_immunities(type, list(/datum/movespeed_modifier/damage_slowdown, /datum/movespeed_modifier/damage_slowdown_flying, /datum/movespeed_modifier/monkey_health_speedmod))
|
||||
|
||||
/datum/reagent/medicine/morphine/on_mob_end_metabolize(mob/living/L)
|
||||
L.unignore_slowdown(type)
|
||||
L.remove_movespeed_mod_immunities(type, list(/datum/movespeed_modifier/damage_slowdown, /datum/movespeed_modifier/damage_slowdown_flying, /datum/movespeed_modifier/monkey_health_speedmod))
|
||||
..()
|
||||
|
||||
/datum/reagent/medicine/morphine/on_mob_life(mob/living/carbon/M)
|
||||
@@ -803,6 +811,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
|
||||
metabolization_rate = 0.25 * REAGENTS_METABOLISM
|
||||
overdose_threshold = 35
|
||||
pH = 12
|
||||
value = REAGENT_VALUE_UNCOMMON
|
||||
|
||||
/datum/reagent/medicine/atropine/on_mob_life(mob/living/carbon/M)
|
||||
if(M.health < 0)
|
||||
@@ -867,6 +876,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
|
||||
metabolization_rate = 0.5 * REAGENTS_METABOLISM
|
||||
taste_description = "magnets"
|
||||
pH = 0
|
||||
value = REAGENT_VALUE_RARE
|
||||
|
||||
/datum/reagent/medicine/strange_reagent/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
if(M.stat == DEAD)
|
||||
@@ -990,14 +1000,15 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
|
||||
metabolization_rate = 0.5 * REAGENTS_METABOLISM
|
||||
overdose_threshold = 60
|
||||
pH = 8.7
|
||||
value = REAGENT_VALUE_RARE
|
||||
|
||||
/datum/reagent/medicine/stimulants/on_mob_metabolize(mob/living/L)
|
||||
..()
|
||||
L.add_movespeed_modifier(type, update=TRUE, priority=100, multiplicative_slowdown=-0.5, blacklisted_movetypes=(FLYING|FLOATING))
|
||||
L.add_movespeed_modifier(/datum/movespeed_modifier/reagent/stimulants)
|
||||
ADD_TRAIT(L, TRAIT_TASED_RESISTANCE, type)
|
||||
|
||||
/datum/reagent/medicine/stimulants/on_mob_end_metabolize(mob/living/L)
|
||||
L.remove_movespeed_modifier(type)
|
||||
L.remove_movespeed_modifier(/datum/movespeed_modifier/reagent/stimulants)
|
||||
REMOVE_TRAIT(L, TRAIT_TASED_RESISTANCE, type)
|
||||
..()
|
||||
|
||||
@@ -1154,6 +1165,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
|
||||
reagent_state = LIQUID
|
||||
color = "#91D865"
|
||||
taste_description = "jelly"
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/medicine/regen_jelly/on_mob_life(mob/living/carbon/M)
|
||||
M.adjustBruteLoss(-1.5*REM, FALSE)
|
||||
@@ -1169,6 +1181,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
|
||||
reagent_state = SOLID
|
||||
color = "#555555"
|
||||
pH = 11
|
||||
value = REAGENT_VALUE_EXCEPTIONAL
|
||||
|
||||
/datum/reagent/medicine/syndicate_nanites/on_mob_life(mob/living/carbon/M)
|
||||
M.adjustBruteLoss(-5*REM, FALSE) //A ton of healing - this is a 50 telecrystal investment.
|
||||
@@ -1189,6 +1202,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
|
||||
reagent_state = SOLID
|
||||
color = "#555555"
|
||||
pH = 11
|
||||
value = REAGENT_VALUE_VERY_RARE
|
||||
|
||||
/datum/reagent/medicine/lesser_syndicate_nanites/on_mob_life(mob/living/carbon/M)
|
||||
M.adjustBruteLoss(-3*REM, FALSE) // hidden gold shh
|
||||
@@ -1212,6 +1226,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
|
||||
overdose_threshold = 30
|
||||
taste_description = "jelly"
|
||||
pH = 11.8
|
||||
value = REAGENT_VALUE_UNCOMMON
|
||||
|
||||
/datum/reagent/medicine/neo_jelly/on_mob_life(mob/living/carbon/M)
|
||||
M.adjustBruteLoss(-1.5*REM, FALSE)
|
||||
@@ -1234,6 +1249,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
|
||||
color = rgb(255, 175, 0)
|
||||
overdose_threshold = 25
|
||||
pH = 11
|
||||
value = REAGENT_VALUE_COMMON //not any higher. Ambrosia is a milestone for hydroponics already.
|
||||
|
||||
/datum/reagent/medicine/earthsblood/on_mob_life(mob/living/carbon/M)
|
||||
M.adjustBruteLoss(-3 * REM, FALSE)
|
||||
@@ -1261,6 +1277,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
|
||||
color = "#27870a"
|
||||
metabolization_rate = 0.4 * REAGENTS_METABOLISM
|
||||
pH = 4.3
|
||||
value = REAGENT_VALUE_UNCOMMON
|
||||
|
||||
/datum/reagent/medicine/haloperidol/on_mob_life(mob/living/carbon/M)
|
||||
for(var/datum/reagent/drug/R in M.reagents.reagent_list)
|
||||
@@ -1283,6 +1300,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
|
||||
overdose_threshold = 3 //To prevent people stacking massive amounts of a very strong healing reagent
|
||||
can_synth = FALSE
|
||||
pH = 14
|
||||
value = REAGENT_VALUE_AMAZING
|
||||
|
||||
/datum/reagent/medicine/lavaland_extract/on_mob_life(mob/living/carbon/M)
|
||||
M.heal_bodypart_damage(5,5)
|
||||
@@ -1302,6 +1320,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
|
||||
description = "Reduces the duration of unconciousness, knockdown and stuns. Restores stamina, but deals toxin damage when overdosed."
|
||||
color = "#918e53"
|
||||
overdose_threshold = 30
|
||||
value = REAGENT_VALUE_VERY_RARE
|
||||
|
||||
/datum/reagent/medicine/changelingadrenaline/on_mob_metabolize(mob/living/L)
|
||||
..()
|
||||
@@ -1329,13 +1348,14 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
|
||||
description = "Drastically increases movement speed, but deals toxin damage."
|
||||
color = "#669153"
|
||||
metabolization_rate = 1
|
||||
value = REAGENT_VALUE_VERY_RARE
|
||||
|
||||
/datum/reagent/medicine/changelinghaste/on_mob_metabolize(mob/living/L)
|
||||
..()
|
||||
L.add_movespeed_modifier(type, update=TRUE, priority=100, multiplicative_slowdown=-2, blacklisted_movetypes=(FLYING|FLOATING))
|
||||
L.add_movespeed_modifier(/datum/movespeed_modifier/reagent/changelinghaste)
|
||||
|
||||
/datum/reagent/medicine/changelinghaste/on_mob_end_metabolize(mob/living/L)
|
||||
L.remove_movespeed_modifier(type)
|
||||
L.remove_movespeed_modifier(/datum/movespeed_modifier/reagent/changelinghaste)
|
||||
..()
|
||||
|
||||
/datum/reagent/medicine/changelinghaste/on_mob_life(mob/living/carbon/M)
|
||||
@@ -1365,14 +1385,15 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
|
||||
/datum/reagent/medicine/muscle_stimulant
|
||||
name = "Muscle Stimulant"
|
||||
description = "A potent chemical that allows someone under its influence to be at full physical ability even when under massive amounts of pain."
|
||||
value = REAGENT_VALUE_RARE
|
||||
|
||||
/datum/reagent/medicine/muscle_stimulant/on_mob_metabolize(mob/living/M)
|
||||
. = ..()
|
||||
M.ignore_slowdown(type)
|
||||
M.add_movespeed_mod_immunities(type, list(/datum/movespeed_modifier/damage_slowdown, /datum/movespeed_modifier/damage_slowdown_flying, /datum/movespeed_modifier/monkey_health_speedmod))
|
||||
|
||||
/datum/reagent/medicine/muscle_stimulant/on_mob_end_metabolize(mob/living/M)
|
||||
. = ..()
|
||||
M.unignore_slowdown(type)
|
||||
M.remove_movespeed_mod_immunities(type, list(/datum/movespeed_modifier/damage_slowdown, /datum/movespeed_modifier/damage_slowdown_flying, /datum/movespeed_modifier/monkey_health_speedmod))
|
||||
|
||||
/datum/reagent/medicine/modafinil
|
||||
name = "Modafinil"
|
||||
@@ -1382,6 +1403,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
|
||||
metabolization_rate = 0.1 * REAGENTS_METABOLISM
|
||||
overdose_threshold = 20 // with the random effects this might be awesome or might kill you at less than 10u (extensively tested)
|
||||
taste_description = "salt" // it actually does taste salty
|
||||
value = REAGENT_VALUE_RARE
|
||||
var/overdose_progress = 0 // to track overdose progress
|
||||
pH = 7.89
|
||||
|
||||
@@ -1448,6 +1470,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
|
||||
metabolization_rate = 0.25 * REAGENTS_METABOLISM
|
||||
overdose_threshold = 30
|
||||
pH = 9.12
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/medicine/psicodine/on_mob_add(mob/living/L)
|
||||
..()
|
||||
@@ -1480,6 +1503,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
|
||||
reagent_state = SOLID
|
||||
color = "#FFFFD0"
|
||||
metabolization_rate = 1.5 * REAGENTS_METABOLISM
|
||||
value = REAGENT_VALUE_UNCOMMON
|
||||
|
||||
/datum/reagent/medicine/silibinin/on_mob_life(mob/living/carbon/M)
|
||||
M.adjustOrganLoss(ORGAN_SLOT_LIVER, -2)//Add a chance to cure liver trauma once implemented.
|
||||
@@ -1494,6 +1518,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M)
|
||||
metabolization_rate = 0.25 * REAGENTS_METABOLISM
|
||||
overdose_threshold = 50
|
||||
taste_description = "numbing bitterness"
|
||||
value = REAGENT_VALUE_RARE
|
||||
|
||||
/datum/reagent/medicine/polypyr/on_mob_life(mob/living/carbon/M) //I wanted a collection of small positive effects, this is as hard to obtain as coniine after all.
|
||||
M.adjustOrganLoss(ORGAN_SLOT_LUNGS, -0.25)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/datum/reagent/blood
|
||||
data = list("donor"=null,"viruses"=null,"blood_DNA"=null, "bloodcolor" = BLOOD_COLOR_HUMAN, "blood_type"= null,"resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null,"quirks"=null)
|
||||
name = "Blood"
|
||||
value = 1
|
||||
value = REAGENT_VALUE_UNCOMMON // $$$ blood ""donations"" $$$
|
||||
color = BLOOD_COLOR_HUMAN // rgb: 200, 0, 0
|
||||
description = "Blood from some creature."
|
||||
metabolization_rate = 5 //fast rate so it disappears fast.
|
||||
@@ -140,8 +140,9 @@
|
||||
data = list("donor"=null,"viruses"=null,"blood_DNA"="REPLICATED", "bloodcolor" = BLOOD_COLOR_SYNTHETIC, "blood_type"="SY","resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null)
|
||||
name = "Synthetic Blood"
|
||||
description = "A synthetically produced imitation of blood."
|
||||
taste_description = "oily"
|
||||
taste_description = "oil"
|
||||
color = BLOOD_COLOR_SYNTHETIC // rgb: 11, 7, 48
|
||||
value = REAGENT_VALUE_NONE
|
||||
|
||||
/datum/reagent/blood/jellyblood
|
||||
data = list("donor"=null,"viruses"=null,"blood_DNA"=null, "bloodcolor" = BLOOD_COLOR_SLIME, "blood_type"="GEL","resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null)
|
||||
@@ -158,6 +159,7 @@
|
||||
description = "This highly resembles blood, but it doesnt actually function like it, resembling more ketchup, with a more blood-like consistency."
|
||||
taste_description = "sap" //Like tree sap?
|
||||
pH = 7.45
|
||||
value = REAGENT_VALUE_NONE
|
||||
|
||||
/datum/reagent/blood/jellyblood/on_mob_life(mob/living/carbon/M)
|
||||
if(prob(10))
|
||||
@@ -387,6 +389,7 @@
|
||||
description = "Something that shouldn't exist on this plane of existence."
|
||||
taste_description = "suffering"
|
||||
pH = 6.5
|
||||
value = REAGENT_VALUE_RARE
|
||||
|
||||
/datum/reagent/fuel/unholywater/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
if(method == TOUCH || method == VAPOR)
|
||||
@@ -423,6 +426,7 @@
|
||||
name = "Hell Water"
|
||||
description = "YOUR FLESH! IT BURNS!"
|
||||
taste_description = "burning"
|
||||
value = REAGENT_VALUE_VERY_RARE
|
||||
|
||||
/datum/reagent/hellwater/on_mob_life(mob/living/carbon/M)
|
||||
M.fire_stacks = min(5,M.fire_stacks + 3)
|
||||
@@ -437,6 +441,7 @@
|
||||
name = "Zelus Oil"
|
||||
description = "Oil blessed by a greater being."
|
||||
taste_description = "metallic oil"
|
||||
value = REAGENT_VALUE_RARE
|
||||
|
||||
/datum/reagent/fuel/holyoil/on_mob_life(mob/living/carbon/M)
|
||||
if(is_servant_of_ratvar(M))
|
||||
@@ -475,6 +480,7 @@
|
||||
name = "Godblood"
|
||||
description = "Slowly heals all damage types. Has a rather high overdose threshold. Glows with mysterious power."
|
||||
overdose_threshold = 150
|
||||
value = REAGENT_VALUE_RARE
|
||||
|
||||
/datum/reagent/lube
|
||||
name = "Space Lube"
|
||||
@@ -591,6 +597,7 @@
|
||||
color = "#5EFF3B" //RGB: 94, 255, 59
|
||||
metabolization_rate = INFINITY //So it instantly removes all of itself
|
||||
taste_description = "slime"
|
||||
value = REAGENT_VALUE_RARE
|
||||
var/datum/species/race = /datum/species/human
|
||||
var/mutationtext = "<span class='danger'>The pain subsides. You feel... human.</span>"
|
||||
|
||||
@@ -750,6 +757,7 @@
|
||||
color = "#5EFF3B" //RGB: 94, 255, 59
|
||||
taste_description = "slime"
|
||||
metabolization_rate = 0.2
|
||||
value = REAGENT_VALUE_RARE
|
||||
|
||||
/datum/reagent/slime_toxin/on_mob_life(mob/living/carbon/human/H)
|
||||
..()
|
||||
@@ -786,6 +794,7 @@
|
||||
color = "#5EFF3B" //RGB: 94, 255, 59
|
||||
metabolization_rate = INFINITY
|
||||
taste_description = "slime"
|
||||
value = REAGENT_VALUE_RARE
|
||||
|
||||
/datum/reagent/mulligan/on_mob_life(mob/living/carbon/human/H)
|
||||
..()
|
||||
@@ -800,6 +809,7 @@
|
||||
description = "An advanced corruptive toxin produced by slimes."
|
||||
color = "#13BC5E" // rgb: 19, 188, 94
|
||||
taste_description = "slime"
|
||||
value = REAGENT_VALUE_VERY_RARE
|
||||
|
||||
/datum/reagent/aslimetoxin/reaction_mob(mob/living/L, method=TOUCH, reac_volume)
|
||||
if(method != TOUCH)
|
||||
@@ -811,6 +821,7 @@
|
||||
color = "#5EFF3B" //RGB: 94, 255, 59
|
||||
can_synth = FALSE
|
||||
taste_description = "decay"
|
||||
value = REAGENT_VALUE_GLORIOUS
|
||||
|
||||
/datum/reagent/gluttonytoxin/reaction_mob(mob/living/L, method=TOUCH, reac_volume)
|
||||
L.ForceContractDisease(new /datum/disease/transformation/morph(), FALSE, TRUE)
|
||||
@@ -1113,6 +1124,7 @@
|
||||
color = "#0000CC"
|
||||
taste_description = "fizzling blue"
|
||||
pH = 12
|
||||
value = REAGENT_VALUE_RARE
|
||||
|
||||
/datum/reagent/bluespace/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
if(method == TOUCH || method == VAPOR)
|
||||
@@ -1239,6 +1251,7 @@
|
||||
metabolization_rate = 1.5 * REAGENTS_METABOLISM
|
||||
taste_description = "acid"
|
||||
pH = 2
|
||||
value = REAGENT_VALUE_RARE
|
||||
|
||||
/datum/reagent/space_cleaner/ez_clean/on_mob_life(mob/living/carbon/M)
|
||||
M.adjustBruteLoss(3.33)
|
||||
@@ -1290,6 +1303,7 @@
|
||||
color = "#535E66" // rgb: 83, 94, 102
|
||||
can_synth = FALSE
|
||||
taste_description = "sludge"
|
||||
value = REAGENT_VALUE_GLORIOUS
|
||||
|
||||
/datum/reagent/nanomachines/reaction_mob(mob/living/L, method=TOUCH, reac_volume, show_message = 1, touch_protection = 0)
|
||||
if(method==PATCH || method==INGEST || method==INJECT || (method == VAPOR && prob(min(reac_volume,100)*(1 - touch_protection))))
|
||||
@@ -1301,6 +1315,7 @@
|
||||
color = "#535E66" // rgb: 83, 94, 102
|
||||
can_synth = FALSE
|
||||
taste_description = "sludge"
|
||||
value = REAGENT_VALUE_GLORIOUS
|
||||
|
||||
/datum/reagent/xenomicrobes/reaction_mob(mob/living/L, method=TOUCH, reac_volume, show_message = 1, touch_protection = 0)
|
||||
if(method==PATCH || method==INGEST || method==INJECT || (method == VAPOR && prob(min(reac_volume,100)*(1 - touch_protection))))
|
||||
@@ -1313,6 +1328,7 @@
|
||||
can_synth = FALSE
|
||||
taste_description = "slime"
|
||||
pH = 11
|
||||
value = REAGENT_VALUE_GLORIOUS
|
||||
|
||||
/datum/reagent/fungalspores/reaction_mob(mob/living/L, method=TOUCH, reac_volume, show_message = 1, touch_protection = 0)
|
||||
if(method==PATCH || method==INGEST || method==INJECT || (method == VAPOR && prob(min(reac_volume,100)*(1 - touch_protection))))
|
||||
@@ -1340,6 +1356,7 @@
|
||||
color = "#664B63" // rgb: 102, 75, 99
|
||||
taste_description = "metal"
|
||||
pH = 11.8
|
||||
value = REAGENT_VALUE_UNCOMMON
|
||||
|
||||
/datum/reagent/ammonia
|
||||
name = "Ammonia"
|
||||
@@ -1417,6 +1434,7 @@
|
||||
metabolization_rate = 1.5 * REAGENTS_METABOLISM
|
||||
color = "E1A116"
|
||||
taste_description = "sourness"
|
||||
value = REAGENT_VALUE_EXCEPTIONAL
|
||||
|
||||
/datum/reagent/stimulum/on_mob_metabolize(mob/living/L)
|
||||
..()
|
||||
@@ -1442,13 +1460,14 @@
|
||||
color = "90560B"
|
||||
taste_description = "burning"
|
||||
pH = 2
|
||||
value = REAGENT_VALUE_VERY_RARE
|
||||
|
||||
/datum/reagent/nitryl/on_mob_metabolize(mob/living/L)
|
||||
..()
|
||||
L.add_movespeed_modifier(type, update=TRUE, priority=100, multiplicative_slowdown=-1, blacklisted_movetypes=(FLYING|FLOATING))
|
||||
L.add_movespeed_modifier(/datum/movespeed_modifier/reagent/nitryl)
|
||||
|
||||
/datum/reagent/nitryl/on_mob_end_metabolize(mob/living/L)
|
||||
L.remove_movespeed_modifier(type)
|
||||
L.remove_movespeed_modifier(/datum/movespeed_modifier/reagent/nitryl)
|
||||
..()
|
||||
|
||||
/////////////////////////Coloured Crayon Powder////////////////////////////
|
||||
@@ -1463,6 +1482,7 @@
|
||||
color = "#FFFFFF" // rgb: 207, 54, 0
|
||||
taste_description = "the back of class"
|
||||
no_mob_color = TRUE
|
||||
value = REAGENT_VALUE_NONE
|
||||
|
||||
/datum/reagent/colorful_reagent/crayonpowder/New()
|
||||
description = "\an [colorname] powder made by grinding down crayons, good for colouring chemical reagents."
|
||||
@@ -1633,6 +1653,7 @@
|
||||
color = "#FFFF00"
|
||||
var/list/random_color_list = list("#00aedb","#a200ff","#f47835","#d41243","#d11141","#00b159","#00aedb","#f37735","#ffc425","#008744","#0057e7","#d62d20","#ffa700")
|
||||
taste_description = "rainbows"
|
||||
value = REAGENT_VALUE_RARE
|
||||
var/no_mob_color = FALSE
|
||||
|
||||
/datum/reagent/colorful_reagent/on_mob_life(mob/living/carbon/M)
|
||||
@@ -1662,6 +1683,7 @@
|
||||
color = "#ff00dd"
|
||||
var/list/potential_colors = list("0ad","a0f","f73","d14","d14","0b5","0ad","f73","fc2","084","05e","d22","fa0") // fucking hair code
|
||||
taste_description = "sourness"
|
||||
value = REAGENT_VALUE_RARE
|
||||
|
||||
/datum/reagent/hair_dye/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
if(method == TOUCH || method == VAPOR)
|
||||
@@ -1677,6 +1699,7 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#fac34b"
|
||||
taste_description = "sourness"
|
||||
value = REAGENT_VALUE_UNCOMMON
|
||||
|
||||
/datum/reagent/barbers_aid/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
if(method == TOUCH || method == VAPOR)
|
||||
@@ -1694,6 +1717,7 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#ffaf00"
|
||||
taste_description = "sourness"
|
||||
value = REAGENT_VALUE_RARE
|
||||
|
||||
/datum/reagent/concentrated_barbers_aid/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
if(method == TOUCH || method == VAPOR)
|
||||
@@ -1726,6 +1750,7 @@
|
||||
color = "#A70FFF"
|
||||
taste_description = "dryness"
|
||||
pH = 10.7
|
||||
value = REAGENT_VALUE_UNCOMMON
|
||||
|
||||
/datum/reagent/drying_agent/reaction_turf(turf/open/T, reac_volume)
|
||||
if(istype(T))
|
||||
@@ -1863,6 +1888,7 @@
|
||||
color = "#00ff80"
|
||||
taste_description = "strange honey"
|
||||
pH = 3
|
||||
value = REAGENT_VALUE_UNCOMMON
|
||||
|
||||
/datum/reagent/royal_bee_jelly/on_mob_life(mob/living/carbon/M)
|
||||
if(prob(2))
|
||||
@@ -1884,6 +1910,7 @@
|
||||
can_synth = FALSE
|
||||
taste_description = "brains"
|
||||
pH = 0.5
|
||||
value = REAGENT_VALUE_GLORIOUS
|
||||
|
||||
/datum/reagent/romerol/reaction_mob(mob/living/carbon/human/H, method=TOUCH, reac_volume)
|
||||
// Silently add the zombie infection organ to be activated upon death
|
||||
@@ -1897,6 +1924,7 @@
|
||||
description = "An experimental serum which causes rapid muscular growth in Hominidae. Side-affects may include hypertrichosis, violent outbursts, and an unending affinity for bananas."
|
||||
reagent_state = LIQUID
|
||||
color = "#00f041"
|
||||
value = REAGENT_VALUE_EXCEPTIONAL
|
||||
|
||||
/datum/reagent/magillitis/on_mob_life(mob/living/carbon/M)
|
||||
..()
|
||||
@@ -1908,6 +1936,7 @@
|
||||
description = "A commercial chemical designed to help older men in the bedroom."//not really it just makes you a giant
|
||||
color = "#ff0000"//strong red. rgb 255, 0, 0
|
||||
var/current_size = RESIZE_DEFAULT_SIZE
|
||||
value = REAGENT_VALUE_COMMON
|
||||
taste_description = "bitterness" // apparently what viagra tastes like
|
||||
|
||||
/datum/reagent/growthserum/on_mob_life(mob/living/carbon/H)
|
||||
@@ -1978,6 +2007,7 @@
|
||||
color = "#AAAAAA55"
|
||||
taste_description = "water"
|
||||
metabolization_rate = 0.25 * REAGENTS_METABOLISM
|
||||
value = REAGENT_VALUE_RARE
|
||||
pH = 15
|
||||
|
||||
/datum/reagent/pax/on_mob_metabolize(mob/living/L)
|
||||
@@ -1994,6 +2024,7 @@
|
||||
color = "#FAFF00"
|
||||
taste_description = "acrid cinnamon"
|
||||
metabolization_rate = 0.2 * REAGENTS_METABOLISM
|
||||
value = REAGENT_VALUE_UNCOMMON
|
||||
|
||||
/datum/reagent/bz_metabolites/on_mob_metabolize(mob/living/L)
|
||||
..()
|
||||
@@ -2014,12 +2045,14 @@
|
||||
name = "synth-pax"
|
||||
description = "A colorless liquid that suppresses violence on the subjects. Cheaper to synthetize, but wears out faster than normal Pax."
|
||||
metabolization_rate = 1.5 * REAGENTS_METABOLISM
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/peaceborg_confuse
|
||||
name = "Dizzying Solution"
|
||||
description = "Makes the target off balance and dizzy"
|
||||
metabolization_rate = 1.5 * REAGENTS_METABOLISM
|
||||
taste_description = "dizziness"
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/peaceborg_confuse/on_mob_life(mob/living/carbon/M)
|
||||
if(M.confused < 6)
|
||||
@@ -2035,6 +2068,7 @@
|
||||
description = "An extremely weak stamina-toxin that tires out the target. Completely harmless."
|
||||
metabolization_rate = 1.5 * REAGENTS_METABOLISM
|
||||
taste_description = "tiredness"
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/peaceborg_tire/on_mob_life(mob/living/carbon/M)
|
||||
var/healthcomp = (100 - M.health) //DOES NOT ACCOUNT FOR ADMINBUS THINGS THAT MAKE YOU HAVE MORE THAN 200/210 HEALTH, OR SOMETHING OTHER THAN A HUMAN PROCESSING THIS.
|
||||
@@ -2050,6 +2084,7 @@
|
||||
color = "#9A6750" //RGB: 154, 103, 80
|
||||
taste_description = "inner peace"
|
||||
can_synth = FALSE
|
||||
value = REAGENT_VALUE_GLORIOUS
|
||||
|
||||
/datum/reagent/tranquility/reaction_mob(mob/living/L, method=TOUCH, reac_volume, show_message = 1, touch_protection = 0)
|
||||
if(method==PATCH || method==INGEST || method==INJECT || (method == VAPOR && prob(min(reac_volume,100)*(1 - touch_protection))))
|
||||
@@ -2060,6 +2095,7 @@
|
||||
description = "The primary precursor for an ancient feline delicacy known as skooma. While it has no notable effects on it's own, mixing it with morphine in a chilled container may yield interesting results."
|
||||
color = "#FAEAFF"
|
||||
taste_description = "synthetic catnip"
|
||||
value = REAGENT_VALUE_UNCOMMON
|
||||
|
||||
/datum/reagent/moonsugar/on_mob_life(mob/living/carbon/M)
|
||||
if(prob(20))
|
||||
@@ -2076,6 +2112,7 @@
|
||||
var/datum/dna/original_dna
|
||||
var/reagent_ticks = 0
|
||||
chemical_flags = REAGENT_INVISIBLE
|
||||
value = REAGENT_VALUE_GLORIOUS
|
||||
|
||||
/datum/reagent/changeling_string/on_mob_metabolize(mob/living/carbon/C)
|
||||
if(ishuman(C) && C.dna && data["desired_dna"])
|
||||
@@ -2111,6 +2148,7 @@
|
||||
taste_description = "grass"
|
||||
description = "A colorless liquid that makes people more peaceful and felines more happy."
|
||||
metabolization_rate = 1.75 * REAGENTS_METABOLISM
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/pax/catnip/on_mob_life(mob/living/carbon/M)
|
||||
if(prob(20))
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
reagent_state = SOLID
|
||||
color = "#550000"
|
||||
taste_description = "sweet tasting metal"
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/thermite/reaction_turf(turf/T, reac_volume)
|
||||
if(reac_volume >= 1)
|
||||
@@ -21,13 +22,14 @@
|
||||
description = "Nitroglycerin is a heavy, colorless, oily, explosive liquid obtained by nitrating glycerol."
|
||||
color = "#808080" // rgb: 128, 128, 128
|
||||
taste_description = "oil"
|
||||
value = REAGENT_VALUE_EXCEPTIONAL
|
||||
|
||||
/datum/reagent/stabilizing_agent
|
||||
name = "Stabilizing Agent"
|
||||
description = "Keeps unstable chemicals stable. This does not work on everything."
|
||||
reagent_state = LIQUID
|
||||
color = "#FFFF00"
|
||||
value = 3
|
||||
value = REAGENT_VALUE_VERY_COMMON
|
||||
taste_description = "metal"
|
||||
|
||||
/datum/reagent/clf3
|
||||
@@ -37,6 +39,7 @@
|
||||
color = "#FFC8C8"
|
||||
metabolization_rate = 4
|
||||
taste_description = "burning"
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/clf3/on_mob_life(mob/living/carbon/M)
|
||||
M.adjust_fire_stacks(2)
|
||||
@@ -79,13 +82,14 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#5A64C8"
|
||||
taste_description = "air and bitterness"
|
||||
value = REAGENT_VALUE_UNCOMMON
|
||||
|
||||
/datum/reagent/liquid_dark_matter
|
||||
name = "Liquid Dark Matter"
|
||||
description = "Sucks everything into the detonation point."
|
||||
reagent_state = LIQUID
|
||||
color = "#210021"
|
||||
value = 10
|
||||
value = REAGENT_VALUE_UNCOMMON
|
||||
taste_description = "compressed bitterness"
|
||||
|
||||
/datum/reagent/blackpowder
|
||||
@@ -93,9 +97,9 @@
|
||||
description = "Explodes. Violently."
|
||||
reagent_state = LIQUID
|
||||
color = "#000000"
|
||||
value = 5
|
||||
metabolization_rate = 0.05
|
||||
taste_description = "salt"
|
||||
value = REAGENT_VALUE_RARE
|
||||
|
||||
/datum/reagent/blackpowder/on_mob_life(mob/living/carbon/M)
|
||||
..()
|
||||
@@ -115,6 +119,7 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#C8C8C8"
|
||||
taste_description = "salt"
|
||||
value = REAGENT_VALUE_UNCOMMON
|
||||
|
||||
/datum/reagent/smoke_powder
|
||||
name = "Smoke Powder"
|
||||
@@ -122,6 +127,7 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#C8C8C8"
|
||||
taste_description = "smoke"
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/sonic_powder
|
||||
name = "Sonic Powder"
|
||||
@@ -129,6 +135,7 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#C8C8C8"
|
||||
taste_description = "loud noises"
|
||||
value = REAGENT_VALUE_UNCOMMON
|
||||
|
||||
/datum/reagent/phlogiston
|
||||
name = "Phlogiston"
|
||||
@@ -136,6 +143,7 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#FA00AF"
|
||||
taste_description = "burning"
|
||||
value = REAGENT_VALUE_UNCOMMON
|
||||
|
||||
/datum/reagent/phlogiston/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
M.adjust_fire_stacks(1)
|
||||
@@ -156,8 +164,8 @@
|
||||
description = "Very flammable."
|
||||
reagent_state = LIQUID
|
||||
color = "#FA00AF"
|
||||
value = 1
|
||||
taste_description = "burning"
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/napalm/on_mob_life(mob/living/carbon/M)
|
||||
M.adjust_fire_stacks(1)
|
||||
@@ -174,7 +182,7 @@
|
||||
color = "#0000DC"
|
||||
metabolization_rate = 0.5 * REAGENTS_METABOLISM
|
||||
taste_description = "bitterness"
|
||||
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/cryostylane/on_mob_life(mob/living/carbon/M) //TODO: code freezing into an ice cube
|
||||
if(M.reagents.has_reagent(/datum/reagent/oxygen))
|
||||
@@ -193,6 +201,7 @@
|
||||
color = "#64FAC8"
|
||||
metabolization_rate = 0.5 * REAGENTS_METABOLISM
|
||||
taste_description = "bitterness"
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/pyrosium/on_mob_life(mob/living/carbon/M)
|
||||
if(M.reagents.has_reagent(/datum/reagent/oxygen))
|
||||
@@ -208,6 +217,7 @@
|
||||
metabolization_rate = 0.5 * REAGENTS_METABOLISM
|
||||
taste_description = "charged metal"
|
||||
var/shock_timer = 0
|
||||
value = REAGENT_VALUE_VERY_RARE
|
||||
|
||||
/datum/reagent/teslium/on_mob_life(mob/living/carbon/M)
|
||||
shock_timer++
|
||||
@@ -242,6 +252,7 @@
|
||||
reagent_state = LIQUID
|
||||
color = "#A6FAFF55"
|
||||
taste_description = "the inside of a fire extinguisher"
|
||||
value = REAGENT_VALUE_UNCOMMON
|
||||
|
||||
/datum/reagent/firefighting_foam/reaction_turf(turf/open/T, reac_volume)
|
||||
if (!istype(T))
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
color = "#CF3600" // rgb: 207, 54, 0
|
||||
taste_description = "bitterness"
|
||||
taste_mult = 1.2
|
||||
value = REAGENT_VALUE_COMMON //Encouraging people to mix toxins for reasons beyond harming each other or mixing reagents such as pen acid.
|
||||
var/toxpwr = 1.5
|
||||
|
||||
/datum/reagent/toxin/on_mob_life(mob/living/carbon/M)
|
||||
@@ -21,6 +22,7 @@
|
||||
color = "#792300" // rgb: 121, 35, 0
|
||||
toxpwr = 2.5
|
||||
taste_description = "mushroom"
|
||||
value = REAGENT_VALUE_UNCOMMON
|
||||
pH = 13
|
||||
|
||||
/datum/reagent/toxin/mutagen
|
||||
@@ -30,6 +32,7 @@
|
||||
toxpwr = 0
|
||||
taste_description = "slime"
|
||||
taste_mult = 0.9
|
||||
value = REAGENT_VALUE_VERY_COMMON
|
||||
pH = 2.3
|
||||
|
||||
/datum/reagent/toxin/mutagen/reaction_mob(mob/living/carbon/M, method=TOUCH, reac_volume)
|
||||
@@ -60,6 +63,7 @@
|
||||
color = "#8228A0"
|
||||
toxpwr = 3
|
||||
pH = 4
|
||||
value = REAGENT_VALUE_RARE //sheets are worth more
|
||||
|
||||
/datum/reagent/toxin/plasma/on_mob_life(mob/living/carbon/C)
|
||||
if(holder.has_reagent(/datum/reagent/medicine/epinephrine))
|
||||
@@ -92,6 +96,7 @@
|
||||
toxpwr = 0
|
||||
taste_description = "acid"
|
||||
pH = 1.2
|
||||
value = REAGENT_VALUE_RARE
|
||||
|
||||
/datum/reagent/toxin/lexorin/on_mob_life(mob/living/carbon/C)
|
||||
. = TRUE
|
||||
@@ -114,6 +119,7 @@
|
||||
taste_description = "slime"
|
||||
taste_mult = 1.3
|
||||
pH = 10
|
||||
value = REAGENT_VALUE_UNCOMMON
|
||||
|
||||
/datum/reagent/toxin/slimejelly/on_mob_life(mob/living/carbon/M)
|
||||
if(prob(10))
|
||||
@@ -132,6 +138,7 @@
|
||||
toxpwr = 0
|
||||
taste_description = "mint"
|
||||
pH = 8
|
||||
value = REAGENT_VALUE_UNCOMMON
|
||||
|
||||
/datum/reagent/toxin/minttoxin/on_mob_life(mob/living/carbon/M)
|
||||
if(HAS_TRAIT(M, TRAIT_FAT))
|
||||
@@ -145,6 +152,7 @@
|
||||
toxpwr = 2
|
||||
taste_description = "fish"
|
||||
pH = 12
|
||||
value = REAGENT_VALUE_RARE
|
||||
|
||||
/datum/reagent/toxin/zombiepowder
|
||||
name = "Zombie Powder"
|
||||
@@ -155,6 +163,7 @@
|
||||
taste_description = "death"
|
||||
var/fakedeath_active = FALSE
|
||||
pH = 13
|
||||
value = REAGENT_VALUE_EXCEPTIONAL
|
||||
|
||||
/datum/reagent/toxin/zombiepowder/on_mob_metabolize(mob/living/L)
|
||||
..()
|
||||
@@ -193,6 +202,7 @@
|
||||
toxpwr = 0.8
|
||||
taste_description = "death"
|
||||
pH = 14.5
|
||||
value = REAGENT_VALUE_EXCEPTIONAL
|
||||
|
||||
/datum/reagent/toxin/ghoulpowder/on_mob_metabolize(mob/living/L)
|
||||
..()
|
||||
@@ -214,6 +224,7 @@
|
||||
toxpwr = 0
|
||||
taste_description = "sourness"
|
||||
pH = 11
|
||||
value = REAGENT_VALUE_UNCOMMON
|
||||
|
||||
/datum/reagent/toxin/mindbreaker/on_mob_life(mob/living/carbon/M)
|
||||
M.hallucination += 5
|
||||
@@ -226,6 +237,7 @@
|
||||
toxpwr = 1
|
||||
taste_mult = 1
|
||||
pH = 2.7
|
||||
value = REAGENT_VALUE_NONE
|
||||
|
||||
/datum/reagent/toxin/plantbgone/reaction_obj(obj/O, reac_volume)
|
||||
if(istype(O, /obj/structure/alien/weeds))
|
||||
@@ -250,6 +262,7 @@
|
||||
description = "A harmful toxic mixture to kill weeds. Do not ingest!"
|
||||
color = "#4B004B" // rgb: 75, 0, 75
|
||||
pH = 3
|
||||
value = REAGENT_VALUE_NONE
|
||||
|
||||
/datum/reagent/toxin/pestkiller
|
||||
name = "Pest Killer"
|
||||
@@ -257,6 +270,7 @@
|
||||
color = "#4B004B" // rgb: 75, 0, 75
|
||||
toxpwr = 1
|
||||
pH = 3.2
|
||||
value = REAGENT_VALUE_NONE
|
||||
|
||||
/datum/reagent/toxin/pestkiller/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
..()
|
||||
@@ -270,6 +284,7 @@
|
||||
color = "#9ACD32"
|
||||
toxpwr = 1
|
||||
pH = 11
|
||||
value = REAGENT_VALUE_RARE
|
||||
|
||||
/datum/reagent/toxin/spore/on_mob_life(mob/living/carbon/C)
|
||||
C.damageoverlaytemp = 60
|
||||
@@ -284,6 +299,7 @@
|
||||
toxpwr = 0.5
|
||||
taste_description = "burning"
|
||||
pH = 13
|
||||
value = REAGENT_VALUE_VERY_RARE
|
||||
|
||||
/datum/reagent/toxin/spore_burning/on_mob_life(mob/living/carbon/M)
|
||||
M.adjust_fire_stacks(2)
|
||||
@@ -323,6 +339,7 @@
|
||||
glass_name = "glass of beer"
|
||||
glass_desc = "A freezing pint of beer."
|
||||
pH = 2
|
||||
value = REAGENT_VALUE_VERY_RARE
|
||||
|
||||
/datum/reagent/toxin/fakebeer/on_mob_life(mob/living/carbon/M)
|
||||
switch(current_cycle)
|
||||
@@ -340,6 +357,7 @@
|
||||
color = "#5B2E0D" // rgb: 91, 46, 13
|
||||
toxpwr = 0.5
|
||||
pH = 4.2
|
||||
value = REAGENT_VALUE_VERY_COMMON
|
||||
|
||||
/datum/reagent/toxin/teapowder
|
||||
name = "Ground Tea Leaves"
|
||||
@@ -348,6 +366,7 @@
|
||||
color = "#7F8400" // rgb: 127, 132, 0
|
||||
toxpwr = 0.5
|
||||
pH = 4.9
|
||||
value = REAGENT_VALUE_VERY_COMMON
|
||||
|
||||
/datum/reagent/toxin/mutetoxin //the new zombie powder.
|
||||
name = "Mute Toxin"
|
||||
@@ -367,6 +386,7 @@
|
||||
color = "#6E2828"
|
||||
data = 15
|
||||
toxpwr = 0
|
||||
value = REAGENT_VALUE_UNCOMMON
|
||||
|
||||
/datum/reagent/toxin/staminatoxin/on_mob_life(mob/living/carbon/M)
|
||||
M.adjustStaminaLoss(REM * data, 0)
|
||||
@@ -381,6 +401,7 @@
|
||||
color = "#787878"
|
||||
metabolization_rate = 0.125 * REAGENTS_METABOLISM
|
||||
toxpwr = 0
|
||||
value = REAGENT_VALUE_VERY_RARE
|
||||
|
||||
/datum/reagent/toxin/polonium/on_mob_life(mob/living/carbon/M)
|
||||
M.radiation += 4
|
||||
@@ -394,6 +415,7 @@
|
||||
metabolization_rate = 0.25 * REAGENTS_METABOLISM
|
||||
overdose_threshold = 30
|
||||
toxpwr = 0
|
||||
value = REAGENT_VALUE_UNCOMMON
|
||||
|
||||
/datum/reagent/toxin/histamine/on_mob_life(mob/living/carbon/M)
|
||||
if(prob(50))
|
||||
@@ -441,6 +463,7 @@
|
||||
color = "#F0FFF0"
|
||||
metabolization_rate = 0.25 * REAGENTS_METABOLISM
|
||||
toxpwr = 0
|
||||
value = REAGENT_VALUE_VERY_RARE
|
||||
|
||||
/datum/reagent/toxin/venom/on_mob_life(mob/living/carbon/M)
|
||||
toxpwr = 0.2*volume
|
||||
@@ -476,6 +499,7 @@
|
||||
color = "#00B4FF"
|
||||
metabolization_rate = 0.125 * REAGENTS_METABOLISM
|
||||
toxpwr = 1.25
|
||||
value = REAGENT_VALUE_UNCOMMON
|
||||
|
||||
/datum/reagent/toxin/cyanide/on_mob_life(mob/living/carbon/M)
|
||||
if(prob(5))
|
||||
@@ -494,6 +518,7 @@
|
||||
metabolization_rate = 0.25 * REAGENTS_METABOLISM
|
||||
toxpwr = 0.5
|
||||
taste_description = "bad cooking"
|
||||
value = REAGENT_VALUE_NONE
|
||||
|
||||
/datum/reagent/toxin/condensed_cooking_oil
|
||||
name = "Condensed Cooking Oil"
|
||||
@@ -504,6 +529,7 @@
|
||||
toxpwr = 0
|
||||
taste_mult = -2
|
||||
taste_description = "awful cooking"
|
||||
value = REAGENT_VALUE_NONE
|
||||
|
||||
/datum/reagent/toxin/condensed_cooking_oil/on_mob_life(mob/living/carbon/M)
|
||||
if(prob(5))
|
||||
@@ -551,6 +577,7 @@
|
||||
color = "#7F10C0"
|
||||
metabolization_rate = 0.5 * REAGENTS_METABOLISM
|
||||
toxpwr = 2.5
|
||||
value = REAGENT_VALUE_EXCEPTIONAL
|
||||
|
||||
/datum/reagent/toxin/initropidril/on_mob_life(mob/living/carbon/C)
|
||||
if(prob(25))
|
||||
@@ -582,6 +609,7 @@
|
||||
metabolization_rate = 0.25 * REAGENTS_METABOLISM
|
||||
toxpwr = 0
|
||||
taste_mult = 0 // undetectable, I guess?
|
||||
value = REAGENT_VALUE_VERY_RARE
|
||||
|
||||
/datum/reagent/toxin/pancuronium/on_mob_life(mob/living/carbon/M)
|
||||
if(current_cycle >= 10)
|
||||
@@ -598,6 +626,7 @@
|
||||
color = "#6496FA"
|
||||
metabolization_rate = 0.75 * REAGENTS_METABOLISM
|
||||
toxpwr = 0
|
||||
value = REAGENT_VALUE_VERY_RARE
|
||||
|
||||
/datum/reagent/toxin/sodium_thiopental/on_mob_life(mob/living/carbon/M)
|
||||
if(current_cycle >= 10)
|
||||
@@ -626,6 +655,7 @@
|
||||
color = "#FFFFFF"
|
||||
toxpwr = 0
|
||||
metabolization_rate = 0.5 * REAGENTS_METABOLISM
|
||||
value = REAGENT_VALUE_RARE
|
||||
|
||||
/datum/reagent/toxin/amanitin/on_mob_end_metabolize(mob/living/M)
|
||||
var/toxdamage = current_cycle*3*REM
|
||||
@@ -656,6 +686,7 @@
|
||||
color = "#7DC3A0"
|
||||
metabolization_rate = 0.06 * REAGENTS_METABOLISM
|
||||
toxpwr = 1.75
|
||||
value = REAGENT_VALUE_EXCEPTIONAL
|
||||
|
||||
/datum/reagent/toxin/coniine/on_mob_life(mob/living/carbon/M)
|
||||
M.losebreath += 5
|
||||
@@ -670,6 +701,7 @@
|
||||
overdose_threshold = 29
|
||||
toxpwr = 0
|
||||
taste_description = "vomit"
|
||||
value = REAGENT_VALUE_VERY_RARE
|
||||
|
||||
/datum/reagent/toxin/spewium/on_mob_life(mob/living/carbon/C)
|
||||
.=..()
|
||||
@@ -693,6 +725,7 @@
|
||||
color = "#191919"
|
||||
metabolization_rate = 0.125 * REAGENTS_METABOLISM
|
||||
toxpwr = 1
|
||||
value = REAGENT_VALUE_VERY_RARE
|
||||
|
||||
/datum/reagent/toxin/curare/on_mob_life(mob/living/carbon/M)
|
||||
if(current_cycle >= 11)
|
||||
@@ -708,6 +741,7 @@
|
||||
color = "#C8C8C8" //RGB: 200, 200, 200
|
||||
metabolization_rate = 0.2 * REAGENTS_METABOLISM
|
||||
toxpwr = 0
|
||||
value = REAGENT_VALUE_VERY_RARE
|
||||
|
||||
/datum/reagent/toxin/heparin/on_mob_life(mob/living/carbon/M)
|
||||
if(ishuman(M))
|
||||
@@ -726,6 +760,7 @@
|
||||
metabolization_rate = 0.6 * REAGENTS_METABOLISM
|
||||
toxpwr = 0.5
|
||||
taste_description = "spinning"
|
||||
value = REAGENT_VALUE_VERY_RARE
|
||||
|
||||
/datum/reagent/toxin/rotatium/on_mob_life(mob/living/carbon/M)
|
||||
if(M.hud_used)
|
||||
@@ -752,6 +787,7 @@
|
||||
metabolization_rate = 0.8 * REAGENTS_METABOLISM
|
||||
toxpwr = 0.25
|
||||
taste_description = "skewing"
|
||||
value = REAGENT_VALUE_EXCEPTIONAL
|
||||
|
||||
/datum/reagent/toxin/skewium/on_mob_life(mob/living/carbon/M)
|
||||
/*
|
||||
@@ -788,6 +824,7 @@
|
||||
color = "#3C5133"
|
||||
metabolization_rate = 0.08 * REAGENTS_METABOLISM
|
||||
toxpwr = 0.15
|
||||
value = REAGENT_VALUE_VERY_RARE
|
||||
|
||||
/datum/reagent/toxin/anacea/on_mob_life(mob/living/carbon/M)
|
||||
var/remove_amt = 5
|
||||
@@ -809,6 +846,7 @@
|
||||
taste_description = "acid"
|
||||
self_consuming = TRUE
|
||||
pH = 2.75
|
||||
value = REAGENT_VALUE_NONE
|
||||
|
||||
/datum/reagent/toxin/acid/reaction_mob(mob/living/carbon/C, method=TOUCH, reac_volume)
|
||||
if(!istype(C))
|
||||
@@ -840,6 +878,7 @@
|
||||
color = "#5050FF"
|
||||
toxpwr = 2
|
||||
acidpwr = 42.0
|
||||
value = REAGENT_VALUE_COMMON
|
||||
|
||||
/datum/reagent/toxin/acid/fluacid/on_mob_life(mob/living/carbon/M)
|
||||
M.adjustFireLoss(current_cycle/10, 0)
|
||||
@@ -853,6 +892,7 @@
|
||||
metabolization_rate = 0 //stays in the system until active.
|
||||
var/actual_metaboliztion_rate = REAGENTS_METABOLISM
|
||||
toxpwr = 0
|
||||
value = REAGENT_VALUE_VERY_RARE
|
||||
var/actual_toxpwr = 5
|
||||
var/delay = 30
|
||||
|
||||
@@ -871,6 +911,7 @@
|
||||
color = "#F0F8FF" // rgb: 240, 248, 255
|
||||
toxpwr = 0
|
||||
taste_description = "stillness"
|
||||
value = REAGENT_VALUE_RARE
|
||||
|
||||
/datum/reagent/toxin/mimesbane/on_mob_metabolize(mob/living/L)
|
||||
ADD_TRAIT(L, TRAIT_EMOTEMUTE, type)
|
||||
@@ -885,6 +926,7 @@
|
||||
toxpwr = 0
|
||||
taste_description = "bone hurting"
|
||||
overdose_threshold = 20
|
||||
value = REAGENT_VALUE_VERY_RARE //because it's very funny.
|
||||
|
||||
/datum/reagent/toxin/bonehurtingjuice/on_mob_add(mob/living/carbon/M)
|
||||
M.say("oof ouch my bones", forced = /datum/reagent/toxin/bonehurtingjuice)
|
||||
@@ -944,6 +986,7 @@
|
||||
toxpwr = 0
|
||||
taste_description = "brain hurting"
|
||||
metabolization_rate = 5
|
||||
value = REAGENT_VALUE_EXCEPTIONAL
|
||||
|
||||
/datum/reagent/toxin/brainhurtingjuice/on_mob_life(mob/living/carbon/M)
|
||||
if(prob(50))
|
||||
@@ -962,6 +1005,7 @@
|
||||
metabolization_rate = 0.5 * REAGENTS_METABOLISM
|
||||
toxpwr = 0
|
||||
taste_description = "tannin"
|
||||
value = REAGENT_VALUE_RARE
|
||||
|
||||
/datum/reagent/toxin/bungotoxin/on_mob_life(mob/living/carbon/M)
|
||||
M.adjustOrganLoss(ORGAN_SLOT_HEART, 3)
|
||||
|
||||
@@ -36,6 +36,9 @@ other types of metals and chemistry for reagents).
|
||||
var/dangerous_construction = FALSE //notify and log for admin investigations if this is printed.
|
||||
var/departmental_flags = ALL //bitflags for deplathes.
|
||||
var/list/datum/techweb_node/unlocked_by = list()
|
||||
///minimum and security levels the design can be printed on. Currently only available for rnd production machinery and mechfab.
|
||||
var/min_security_level = SEC_LEVEL_GREEN
|
||||
var/max_security_level = SEC_LEVEL_DELTA
|
||||
var/research_icon //Replaces the item icon in the research console
|
||||
var/research_icon_state
|
||||
var/icon_cache
|
||||
|
||||
@@ -2,6 +2,9 @@
|
||||
///////Biogenerator Designs ///////
|
||||
///////////////////////////////////
|
||||
|
||||
//Please be wary to not add inorganic items to the results such as generic glass bottles and metal.
|
||||
//as they kind of defeat the design of this feature.
|
||||
|
||||
/datum/design/milk
|
||||
name = "10u Milk"
|
||||
id = "milk"
|
||||
@@ -18,22 +21,6 @@
|
||||
make_reagents = list(/datum/reagent/consumable/cream = 10)
|
||||
category = list("initial","Food")
|
||||
|
||||
/datum/design/milk_carton
|
||||
name = "Milk Carton"
|
||||
id = "milk_carton"
|
||||
build_type = BIOGENERATOR
|
||||
materials = list(/datum/material/biomass = 100)
|
||||
build_path = /obj/item/reagent_containers/food/condiment/milk
|
||||
category = list("initial","Food")
|
||||
|
||||
/datum/design/cream_carton
|
||||
name = "Cream Carton"
|
||||
id = "cream_carton"
|
||||
build_type = BIOGENERATOR
|
||||
materials = list(/datum/material/biomass = 300)
|
||||
build_path = /obj/item/reagent_containers/food/drinks/bottle/cream
|
||||
category = list("initial","Food")
|
||||
|
||||
/datum/design/black_pepper
|
||||
name = "10u Black Pepper"
|
||||
id = "black_pepper"
|
||||
@@ -42,15 +29,6 @@
|
||||
make_reagents = list(/datum/reagent/consumable/blackpepper = 10)
|
||||
category = list("initial","Food")
|
||||
|
||||
/datum/design/pepper_mill
|
||||
name = "Pepper Mill"
|
||||
id = "pepper_mill"
|
||||
build_type = BIOGENERATOR
|
||||
materials = list(/datum/material/biomass = 50)
|
||||
build_path = /obj/item/reagent_containers/food/condiment/peppermill
|
||||
make_reagents = list()
|
||||
category = list("initial","Food")
|
||||
|
||||
/datum/design/enzyme
|
||||
name = "10u Universal Enzyme"
|
||||
id = "enzyme"
|
||||
@@ -59,14 +37,6 @@
|
||||
make_reagents = list(/datum/reagent/consumable/enzyme = 10)
|
||||
category = list("initial","Food")
|
||||
|
||||
/datum/design/flour_sack
|
||||
name = "Flour Sack"
|
||||
id = "flour_sack"
|
||||
build_type = BIOGENERATOR
|
||||
materials = list(/datum/material/biomass = 150)
|
||||
build_path = /obj/item/reagent_containers/food/condiment/flour
|
||||
category = list("initial","Food")
|
||||
|
||||
/datum/design/monkey_cube
|
||||
name = "Monkey Cube"
|
||||
id = "mcube"
|
||||
@@ -84,43 +54,43 @@
|
||||
category = list("initial", "Food")
|
||||
|
||||
/datum/design/ez_nut
|
||||
name = "E-Z Nutrient"
|
||||
name = "10u E-Z Nutrient"
|
||||
id = "ez_nut"
|
||||
build_type = BIOGENERATOR
|
||||
materials = list(/datum/material/biomass = 10)
|
||||
build_path = /obj/item/reagent_containers/glass/bottle/nutrient/ez
|
||||
materials = list(/datum/material/biomass = 2)
|
||||
make_reagents = list(/datum/reagent/plantnutriment/eznutriment = 10)
|
||||
category = list("initial","Botany Chemicals")
|
||||
|
||||
/datum/design/l4z_nut
|
||||
name = "Left 4 Zed"
|
||||
name = "10u Left 4 Zed"
|
||||
id = "l4z_nut"
|
||||
build_type = BIOGENERATOR
|
||||
materials = list(/datum/material/biomass = 20)
|
||||
build_path = /obj/item/reagent_containers/glass/bottle/nutrient/l4z
|
||||
materials = list(/datum/material/biomass = 4)
|
||||
make_reagents = list(/datum/reagent/plantnutriment/left4zednutriment = 10)
|
||||
category = list("initial","Botany Chemicals")
|
||||
|
||||
/datum/design/rh_nut
|
||||
name = "Robust Harvest"
|
||||
name = "10u Robust Harvest"
|
||||
id = "rh_nut"
|
||||
build_type = BIOGENERATOR
|
||||
materials = list(/datum/material/biomass = 25)
|
||||
build_path = /obj/item/reagent_containers/glass/bottle/nutrient/rh
|
||||
materials = list(/datum/material/biomass = 5)
|
||||
make_reagents = list(/datum/reagent/plantnutriment/robustharvestnutriment = 10)
|
||||
category = list("initial","Botany Chemicals")
|
||||
|
||||
/datum/design/weed_killer
|
||||
name = "Weed Killer"
|
||||
id = "weed_killer"
|
||||
build_type = BIOGENERATOR
|
||||
materials = list(/datum/material/biomass = 50)
|
||||
build_path = /obj/item/reagent_containers/glass/bottle/killer/weedkiller
|
||||
materials = list(/datum/material/biomass = 10)
|
||||
make_reagents = list(/datum/reagent/toxin/plantbgone/weedkiller = 10)
|
||||
category = list("initial","Botany Chemicals")
|
||||
|
||||
/datum/design/pest_spray
|
||||
name = "Pest Killer"
|
||||
id = "pest_spray"
|
||||
build_type = BIOGENERATOR
|
||||
materials = list(/datum/material/biomass = 50)
|
||||
build_path = /obj/item/reagent_containers/glass/bottle/killer/pestkiller
|
||||
materials = list(/datum/material/biomass = 10)
|
||||
make_reagents = list(/datum/reagent/toxin/pestkiller = 10)
|
||||
category = list("initial","Botany Chemicals")
|
||||
|
||||
/datum/design/ammonia
|
||||
@@ -139,13 +109,13 @@
|
||||
make_reagents = list(/datum/reagent/saltpetre = 10)
|
||||
category = list("initial","Botany Chemicals")
|
||||
|
||||
/datum/design/botany_bottle
|
||||
name = "Empty Bottle"
|
||||
id = "botany_bottle"
|
||||
/datum/design/empty_carton
|
||||
name = "Small Empty Carton Box"
|
||||
id = "empty_carton"
|
||||
build_type = BIOGENERATOR
|
||||
materials = list(/datum/material/biomass = 5)
|
||||
build_path = /obj/item/reagent_containers/glass/bottle/nutrient/empty
|
||||
category = list("initial", "Botany Chemicals")
|
||||
materials = list(/datum/material/biomass = 15)
|
||||
build_path = /obj/item/reagent_containers/food/drinks/bottle/bio_carton
|
||||
category = list("initial", "Organic Materials")
|
||||
|
||||
/datum/design/cloth
|
||||
name = "Roll of Cloth"
|
||||
|
||||
@@ -529,7 +529,6 @@
|
||||
////////////////////NANITE PROTOCOLS//////////////////////////////////////
|
||||
//Note about the category name: The UI cuts the last 8 characters from the category name to remove the " Nanites" in the other categories
|
||||
//Because of this, Protocols was getting cut down to "P", so i had to add some padding
|
||||
/*
|
||||
/datum/design/nanites/kickstart
|
||||
name = "Kickstart Protocol"
|
||||
desc = "Replication Protocol: the nanites focus on early growth, heavily boosting replication rate for a few minutes after the initial implantation."
|
||||
@@ -557,4 +556,10 @@
|
||||
id = "offline_nanites"
|
||||
program_type = /datum/nanite_program/protocol/offline
|
||||
category = list("Protocols_Nanites")
|
||||
*/
|
||||
|
||||
/datum/design/nanites/synergy
|
||||
name = "Synergy Protocol"
|
||||
desc = "Replication Protocol: the nanites syncronize their tasks and processes within a host, leading to an increase in replication speed proportional to the current nanite volume."
|
||||
id = "synergy_nanites"
|
||||
program_type = /datum/nanite_program/protocol/synergy
|
||||
category = list("Protocols_Nanites")
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
desc = "Makes researched and prototype items with materials and energy."
|
||||
layer = BELOW_OBJ_LAYER
|
||||
var/consoleless_interface = TRUE //Whether it can be used without a console.
|
||||
var/offstation_security_levels = TRUE
|
||||
var/efficiency_coeff = 1 //Materials needed / coeff = actual.
|
||||
var/list/categories = list()
|
||||
var/datum/component/remote_materials/materials
|
||||
@@ -98,6 +99,7 @@
|
||||
var/obj/item/I = O
|
||||
I.material_flags |= MATERIAL_NO_EFFECTS //Find a better way to do this.
|
||||
I.set_custom_materials(matlist.Copy())
|
||||
I.rnd_crafted(src)
|
||||
SSblackbox.record_feedback("nested tally", "item_printed", amount, list("[type]", "[path]"))
|
||||
investigate_log("[key_name(user)] built [amount] of [path] at [src]([type]).", INVESTIGATE_RESEARCH)
|
||||
|
||||
@@ -134,6 +136,12 @@
|
||||
if(D.build_type && !(D.build_type & allowed_buildtypes))
|
||||
say("This machine does not have the necessary manipulation systems for this design. Please contact Nanotrasen Support!")
|
||||
return FALSE
|
||||
if(!(obj_flags & EMAGGED) && (offstation_security_levels || is_station_level(z)))
|
||||
if(GLOB.security_level < D.min_security_level)
|
||||
say("Minimum security alert level required to print this design not met, please contact the command staff.")
|
||||
return FALSE
|
||||
if(GLOB.security_level > D.max_security_level)
|
||||
say("Exceeded maximum security alert level required to print this design, please contact the command staff.")
|
||||
if(!materials.mat_container)
|
||||
say("No connection to material storage, please contact the quartermaster.")
|
||||
return FALSE
|
||||
@@ -275,15 +283,26 @@
|
||||
temp_material += " [all_materials[M]/coeff] [CallMaterialName(M)]"
|
||||
c = min(c,t)
|
||||
|
||||
if (c >= 1)
|
||||
var/clearance = !(obj_flags & EMAGGED) && (offstation_security_levels || is_station_level(z))
|
||||
var/sec_text = ""
|
||||
if(clearance && (D.min_security_level > SEC_LEVEL_GREEN || D.max_security_level < SEC_LEVEL_DELTA))
|
||||
sec_text = " (Allowed security levels: "
|
||||
for(var/n in D.min_security_level to D.max_security_level)
|
||||
sec_text += NUM2SECLEVEL(n)
|
||||
if(n + 1 <= D.max_security_level)
|
||||
sec_text += ", "
|
||||
sec_text += ")"
|
||||
|
||||
clearance = !clearance || ISINRANGE(GLOB.security_level, D.min_security_level, D.max_security_level)
|
||||
if (c >= 1 && clearance)
|
||||
l += "<A href='?src=[REF(src)];build=[D.id];amount=1'>[D.name]</A>[RDSCREEN_NOBREAK]"
|
||||
if(c >= 5)
|
||||
l += "<A href='?src=[REF(src)];build=[D.id];amount=5'>x5</A>[RDSCREEN_NOBREAK]"
|
||||
if(c >= 10)
|
||||
l += "<A href='?src=[REF(src)];build=[D.id];amount=10'>x10</A>[RDSCREEN_NOBREAK]"
|
||||
l += "[temp_material][RDSCREEN_NOBREAK]"
|
||||
l += "[temp_material][sec_text][RDSCREEN_NOBREAK]"
|
||||
else
|
||||
l += "<span class='linkOff'>[D.name]</span>[temp_material][RDSCREEN_NOBREAK]"
|
||||
l += "<span class='linkOff'>[D.name]</span>[temp_material][sec_text][RDSCREEN_NOBREAK]"
|
||||
l += ""
|
||||
return l
|
||||
|
||||
|
||||
@@ -30,3 +30,9 @@
|
||||
total_rating += M.rating * 2 //There is only one.
|
||||
total_rating = max(1, total_rating)
|
||||
efficiency_coeff = total_rating
|
||||
var/obj/item/circuitboard/machine/circuit_imprinter/C = circuit
|
||||
offstation_security_levels = C.offstation_security_levels
|
||||
|
||||
/obj/machinery/rnd/production/circuit_imprinter/offstation
|
||||
offstation_security_levels = FALSE
|
||||
circuit = /obj/item/circuitboard/machine/circuit_imprinter/offstation
|
||||
|
||||
@@ -23,3 +23,12 @@
|
||||
/obj/machinery/rnd/production/protolathe/disconnect_console()
|
||||
linked_console.linked_lathe = null
|
||||
..()
|
||||
|
||||
/obj/machinery/rnd/production/protolathe/calculate_efficiency()
|
||||
. = ..()
|
||||
var/obj/item/circuitboard/machine/protolathe/C = circuit
|
||||
offstation_security_levels = C.offstation_security_levels
|
||||
|
||||
/obj/machinery/rnd/production/protolathe/offstation
|
||||
offstation_security_levels = FALSE
|
||||
circuit = /obj/item/circuitboard/machine/protolathe/offstation
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
list(name = "Augmentation Nanites"),
|
||||
list(name = "Suppression Nanites"),
|
||||
list(name = "Weaponized Nanites"),
|
||||
//list(name = "Protocols") B.E.P.I.S Content, which we dont have
|
||||
list(name = "Protocols") //Moved to default techweb from B.E.P.I.S. research, for now
|
||||
)
|
||||
|
||||
/obj/machinery/nanite_program_hub/Initialize()
|
||||
|
||||
@@ -290,7 +290,7 @@
|
||||
qdel(src)
|
||||
|
||||
///A nanite program containing a behaviour protocol. Only one protocol of each class can be active at once.
|
||||
//Currently unused due to us lacking the B.E.P.I.S
|
||||
//Moved to being 'normally' researched due to lack of B.E.P.I.S.
|
||||
/datum/nanite_program/protocol
|
||||
name = "Nanite Protocol"
|
||||
var/protocol_class = NONE
|
||||
|
||||
@@ -105,3 +105,14 @@
|
||||
|
||||
/datum/nanite_program/protocol/offline/active_effect()
|
||||
nanites.adjust_nanites(null, boost)
|
||||
|
||||
/datum/nanite_program/protocol/synergy
|
||||
name = "Synergy Protocol"
|
||||
desc = "Replication Protocol: the nanites syncronize their tasks and processes within a host, leading to an increase in replication speed proportional to the current nanite volume."
|
||||
use_rate = 0
|
||||
rogue_types = list(/datum/nanite_program/necrotic)
|
||||
protocol_class = NANITE_PROTOCOL_REPLICATION
|
||||
var/max_boost = 2 //The maximum boost this program applies to the nanite replication, multiplied with the current nanite 'saturation' percentage
|
||||
|
||||
/datum/nanite_program/protocol/synergy/active_effect()
|
||||
nanites.adjust_nanites(null, round(max_boost * (nanites.nanite_volume / nanites.max_nanites), 0.1))
|
||||
|
||||
@@ -301,15 +301,26 @@ Nothing else in the console has ID requirements.
|
||||
temp_material += " [all_materials[M]/coeff] [CallMaterialName(M)]"
|
||||
c = min(c,t)
|
||||
|
||||
if (c >= 1)
|
||||
var/clearance = !(linked_lathe.obj_flags & EMAGGED) && (linked_lathe.offstation_security_levels || is_station_level(linked_lathe.z))
|
||||
var/sec_text = ""
|
||||
if(clearance && (D.min_security_level > SEC_LEVEL_GREEN || D.max_security_level < SEC_LEVEL_DELTA))
|
||||
sec_text = " (Allowed security levels: "
|
||||
for(var/n in D.min_security_level to D.max_security_level)
|
||||
sec_text += NUM2SECLEVEL(n)
|
||||
if(n + 1 <= D.max_security_level)
|
||||
sec_text += ", "
|
||||
sec_text += ")"
|
||||
|
||||
clearance = !clearance || ISINRANGE(GLOB.security_level, D.min_security_level, D.max_security_level)
|
||||
if (c >= 1 && clearance)
|
||||
l += "<A href='?src=[REF(src)];build=[D.id];amount=1'>[D.name]</A>[RDSCREEN_NOBREAK]"
|
||||
if(c >= 5)
|
||||
l += "<A href='?src=[REF(src)];build=[D.id];amount=5'>x5</A>[RDSCREEN_NOBREAK]"
|
||||
if(c >= 10)
|
||||
l += "<A href='?src=[REF(src)];build=[D.id];amount=10'>x10</A>[RDSCREEN_NOBREAK]"
|
||||
l += "[temp_material][RDSCREEN_NOBREAK]"
|
||||
l += "[temp_material][sec_text][RDSCREEN_NOBREAK]"
|
||||
else
|
||||
l += "<span class='linkOff'>[D.name]</span>[temp_material][RDSCREEN_NOBREAK]"
|
||||
l += "<span class='linkOff'>[D.name]</span>[temp_material][sec_text][RDSCREEN_NOBREAK]"
|
||||
l += ""
|
||||
l += "</div>"
|
||||
return l
|
||||
|
||||
@@ -957,6 +957,14 @@
|
||||
design_ids = list("spreading_nanites","mindcontrol_nanites","mitosis_nanites")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 10000)
|
||||
|
||||
/datum/techweb_node/nanite_replication_protocols
|
||||
id = "nanite_replication_protocols"
|
||||
display_name = "Nanite Replication Protocols"
|
||||
description = "Advanced behaviours that allow nanites to exploit certain circumstances to replicate faster."
|
||||
prereq_ids = list("nanite_smart")
|
||||
design_ids = list("kickstart_nanites","factory_nanites","tinker_nanites","offline_nanites","synergy_nanites")
|
||||
research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000)
|
||||
|
||||
////////////////////////Alien technology////////////////////////
|
||||
/datum/techweb_node/alientech //AYYYYYYYYLMAOO tech
|
||||
id = "alientech"
|
||||
|
||||
@@ -191,7 +191,7 @@
|
||||
alert_type = /obj/screen/alert/status_effect/bloodchill
|
||||
|
||||
/datum/status_effect/bloodchill/on_apply()
|
||||
owner.add_movespeed_modifier("bloodchilled", TRUE, 100, NONE, override = TRUE, multiplicative_slowdown = 3)
|
||||
owner.add_movespeed_modifier(/datum/movespeed_modifier/status_effect/bloodchill)
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/bloodchill/tick()
|
||||
@@ -199,7 +199,7 @@
|
||||
owner.adjustFireLoss(2)
|
||||
|
||||
/datum/status_effect/bloodchill/on_remove()
|
||||
owner.remove_movespeed_modifier("bloodchilled")
|
||||
owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/bloodchill)
|
||||
return ..()
|
||||
|
||||
/obj/screen/alert/status_effect/bloodchill
|
||||
@@ -213,7 +213,7 @@
|
||||
alert_type = /obj/screen/alert/status_effect/bonechill
|
||||
|
||||
/datum/status_effect/bonechill/on_apply()
|
||||
owner.add_movespeed_modifier("bonechilled", TRUE, 100, NONE, override = TRUE, multiplicative_slowdown = 3)
|
||||
owner.add_movespeed_modifier(/datum/movespeed_modifier/status_effect/bonechill)
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/bonechill/tick()
|
||||
@@ -223,7 +223,7 @@
|
||||
owner.adjust_bodytemperature(-10)
|
||||
|
||||
/datum/status_effect/bonechill/on_remove()
|
||||
owner.remove_movespeed_modifier("bonechilled")
|
||||
owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/bonechill)
|
||||
return ..()
|
||||
|
||||
/obj/screen/alert/status_effect/bonechill
|
||||
@@ -385,11 +385,11 @@ datum/status_effect/rebreathing/tick()
|
||||
duration = 30
|
||||
|
||||
/datum/status_effect/tarfoot/on_apply()
|
||||
owner.add_movespeed_modifier(MOVESPEED_ID_TARFOOT, update=TRUE, priority=100, multiplicative_slowdown=0.5, blacklisted_movetypes=(FLYING|FLOATING))
|
||||
owner.add_movespeed_modifier(/datum/movespeed_modifier/status_effect/tarfoot)
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/tarfoot/on_remove()
|
||||
owner.remove_movespeed_modifier(MOVESPEED_ID_TARFOOT)
|
||||
owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/tarfoot)
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/spookcookie
|
||||
@@ -707,15 +707,15 @@ datum/status_effect/stabilized/blue/on_remove()
|
||||
/datum/status_effect/stabilized/sepia/tick()
|
||||
if(prob(50) && mod > -1)
|
||||
mod--
|
||||
owner.add_movespeed_modifier(MOVESPEED_ID_SEPIA, update=TRUE, priority=100, multiplicative_slowdown=-1, blacklisted_movetypes=(FLYING|FLOATING))
|
||||
owner.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/status_effect/sepia, multiplicative_slowdown = 1)
|
||||
else if(mod < 1)
|
||||
mod++
|
||||
// yeah a value of 0 does nothing but replacing the trait in place is cheaper than removing and adding repeatedly
|
||||
owner.add_movespeed_modifier(MOVESPEED_ID_SEPIA, update=TRUE, priority=100, multiplicative_slowdown=0, blacklisted_movetypes=(FLYING|FLOATING))
|
||||
owner.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/status_effect/sepia, multiplicative_slowdown = 0)
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/stabilized/sepia/on_remove()
|
||||
owner.remove_movespeed_modifier(MOVESPEED_ID_SEPIA)
|
||||
owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/sepia)
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/stabilized/cerulean
|
||||
@@ -777,11 +777,11 @@ datum/status_effect/stabilized/blue/on_remove()
|
||||
colour = "red"
|
||||
|
||||
/datum/status_effect/stabilized/red/on_apply()
|
||||
owner.ignore_slowdown("slimestatus")
|
||||
return ..()
|
||||
. = ..()
|
||||
owner.add_movespeed_mod_immunities(type, /datum/movespeed_modifier/equipment_speedmod)
|
||||
|
||||
/datum/status_effect/stabilized/red/on_remove()
|
||||
owner.unignore_slowdown("slimestatus")
|
||||
owner.remove_movespeed_mod_immunities(type, /datum/movespeed_modifier/equipment_speedmod)
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/stabilized/green
|
||||
|
||||
@@ -41,7 +41,7 @@ GLOBAL_DATUM_INIT(keycard_events, /datum/events, new)
|
||||
var/list/data = list()
|
||||
data["waiting"] = waiting
|
||||
data["auth_required"] = event_source ? event_source.event : 0
|
||||
data["red_alert"] = (seclevel2num(get_security_level()) >= SEC_LEVEL_RED) ? 1 : 0
|
||||
data["red_alert"] = (SECLEVEL2NUM(NUM2SECLEVEL(GLOB.security_level)) >= SEC_LEVEL_RED) ? 1 : 0
|
||||
data["emergency_maint"] = GLOB.emergency_access
|
||||
data["bsa_unlock"] = GLOB.bsa_unlock
|
||||
return data
|
||||
|
||||
@@ -5,20 +5,17 @@ GLOBAL_VAR_INIT(security_level, SEC_LEVEL_GREEN)
|
||||
//SEC_LEVEL_RED = code red
|
||||
//SEC_LEVEL_DELTA = code delta
|
||||
|
||||
/*
|
||||
* All security levels, per ascending alert. Nothing too fancy, really.
|
||||
* Their positions should also match their numerical values.
|
||||
*/
|
||||
GLOBAL_LIST_INIT(all_security_levels, list("green", "blue", "amber", "red", "delta"))
|
||||
|
||||
//config.alert_desc_blue_downto
|
||||
|
||||
/proc/set_security_level(level)
|
||||
switch(level)
|
||||
if("green")
|
||||
level = SEC_LEVEL_GREEN
|
||||
if("blue")
|
||||
level = SEC_LEVEL_BLUE
|
||||
if("amber")
|
||||
level = SEC_LEVEL_AMBER
|
||||
if("red")
|
||||
level = SEC_LEVEL_RED
|
||||
if("delta")
|
||||
level = SEC_LEVEL_DELTA
|
||||
if(!isnum(level))
|
||||
level = GLOB.all_security_levels.Find(level)
|
||||
|
||||
//Will not be announced if you try to set to the same level as it already is
|
||||
if(level >= SEC_LEVEL_GREEN && level <= SEC_LEVEL_DELTA && level != GLOB.security_level)
|
||||
@@ -111,46 +108,7 @@ GLOBAL_VAR_INIT(security_level, SEC_LEVEL_GREEN)
|
||||
if(D.red_alert_access)
|
||||
D.visible_message("<span class='notice'>[D] whirrs as it automatically lifts access requirements!</span>")
|
||||
playsound(D, 'sound/machines/boltsup.ogg', 50, TRUE)
|
||||
SSblackbox.record_feedback("tally", "security_level_changes", 1, get_security_level())
|
||||
SSblackbox.record_feedback("tally", "security_level_changes", 1, NUM2SECLEVEL(GLOB.security_level))
|
||||
SSnightshift.check_nightshift()
|
||||
else
|
||||
return
|
||||
|
||||
/proc/get_security_level()
|
||||
switch(GLOB.security_level)
|
||||
if(SEC_LEVEL_GREEN)
|
||||
return "green"
|
||||
if(SEC_LEVEL_BLUE)
|
||||
return "blue"
|
||||
if(SEC_LEVEL_AMBER)
|
||||
return "amber"
|
||||
if(SEC_LEVEL_RED)
|
||||
return "red"
|
||||
if(SEC_LEVEL_DELTA)
|
||||
return "delta"
|
||||
|
||||
/proc/num2seclevel(num)
|
||||
switch(num)
|
||||
if(SEC_LEVEL_GREEN)
|
||||
return "green"
|
||||
if(SEC_LEVEL_BLUE)
|
||||
return "blue"
|
||||
if(SEC_LEVEL_AMBER)
|
||||
return "amber"
|
||||
if(SEC_LEVEL_RED)
|
||||
return "red"
|
||||
if(SEC_LEVEL_DELTA)
|
||||
return "delta"
|
||||
|
||||
/proc/seclevel2num(seclevel)
|
||||
switch( lowertext(seclevel) )
|
||||
if("green")
|
||||
return SEC_LEVEL_GREEN
|
||||
if("blue")
|
||||
return SEC_LEVEL_BLUE
|
||||
if("amber")
|
||||
return SEC_LEVEL_AMBER
|
||||
if("red")
|
||||
return SEC_LEVEL_RED
|
||||
if("delta")
|
||||
return SEC_LEVEL_DELTA
|
||||
|
||||
@@ -310,7 +310,7 @@
|
||||
|
||||
/obj/docking_port/mobile/emergency/request(obj/docking_port/stationary/S, area/signalOrigin, reason, redAlert, set_coefficient=null, silent = FALSE)
|
||||
if(!isnum(set_coefficient))
|
||||
var/security_num = seclevel2num(get_security_level())
|
||||
var/security_num = SECLEVEL2NUM(NUM2SECLEVEL(GLOB.security_level))
|
||||
switch(security_num)
|
||||
if(SEC_LEVEL_GREEN)
|
||||
set_coefficient = 2
|
||||
|
||||
@@ -122,7 +122,7 @@
|
||||
/obj/structure/table/abductor/wabbajack/proc/sleeper_dreams(mob/living/sleeper)
|
||||
if(sleeper in sleepers)
|
||||
to_chat(sleeper, "<span class='revennotice'>While you slumber, you have the strangest dream, like you can see yourself from the outside.</span>")
|
||||
sleeper.ghostize(TRUE)
|
||||
sleeper.ghostize(TRUE, voluntary = TRUE)
|
||||
|
||||
/obj/structure/table/abductor/wabbajack/left
|
||||
desc = "You sleep so it may wake."
|
||||
|
||||
@@ -276,7 +276,7 @@
|
||||
ADD_TRAIT(H, TRAIT_PIERCEIMMUNE, "dna_vault")
|
||||
if(VAULT_SPEED)
|
||||
to_chat(H, "<span class='notice'>Your legs feel faster.</span>")
|
||||
H.add_movespeed_modifier(MOVESPEED_ID_DNA_VAULT, update=TRUE, priority=100, multiplicative_slowdown=-1, blacklisted_movetypes=(FLYING|FLOATING))
|
||||
H.add_movespeed_modifier(/datum/movespeed_modifier/dna_vault_speedup)
|
||||
if(VAULT_QUICK)
|
||||
to_chat(H, "<span class='notice'>Your arms move as fast as lightning.</span>")
|
||||
H.next_move_modifier = 0.5
|
||||
|
||||
@@ -165,14 +165,14 @@
|
||||
if(allow_thrust(0.01))
|
||||
ion_trail.start()
|
||||
RegisterSignal(owner, COMSIG_MOVABLE_MOVED, .proc/move_react)
|
||||
owner.add_movespeed_modifier(MOVESPEED_ID_CYBER_THRUSTER, priority=100, multiplicative_slowdown=-2, movetypes=FLOATING, conflict=MOVE_CONFLICT_JETPACK)
|
||||
owner.add_movespeed_modifier(/datum/movespeed_modifier/jetpack/cybernetic)
|
||||
if(!silent)
|
||||
to_chat(owner, "<span class='notice'>You turn your thrusters set on.</span>")
|
||||
else
|
||||
ion_trail.stop()
|
||||
if(!QDELETED(owner))
|
||||
UnregisterSignal(owner, COMSIG_MOVABLE_MOVED)
|
||||
owner.remove_movespeed_modifier(MOVESPEED_ID_CYBER_THRUSTER)
|
||||
owner.remove_movespeed_modifier(/datum/movespeed_modifier/jetpack/cybernetic)
|
||||
if(!silent)
|
||||
to_chat(owner, "<span class='notice'>You turn your thrusters set off.</span>")
|
||||
on = FALSE
|
||||
|
||||
@@ -56,22 +56,22 @@
|
||||
return
|
||||
if(damage >= high_threshold)
|
||||
var/move_calc = 1+((round(damage) - high_threshold)/(high_threshold/3))
|
||||
owner.add_movespeed_modifier(MOVESPEED_ID_CIRRHOSIS, TRUE, 100, NONE, override = TRUE, multiplicative_slowdown = move_calc)
|
||||
owner.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/liver_cirrhosis, multiplicative_slowdown = move_calc)
|
||||
sizeMoveMod(move_calc, owner)
|
||||
else
|
||||
owner.remove_movespeed_modifier(MOVESPEED_ID_CIRRHOSIS)
|
||||
owner.remove_movespeed_modifier(/datum/movespeed_modifier/liver_cirrhosis)
|
||||
sizeMoveMod(1, owner)
|
||||
|
||||
/obj/item/organ/liver/Insert(mob/living/carbon/M, special = FALSE, drop_if_replaced = TRUE)
|
||||
. = ..()
|
||||
if(. && damage >= high_threshold)
|
||||
var/move_calc = 1+((round(damage) - high_threshold)/(high_threshold/3))
|
||||
M.add_movespeed_modifier(MOVESPEED_ID_CIRRHOSIS, TRUE, 100, NONE, override = TRUE, multiplicative_slowdown = move_calc)
|
||||
M.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/liver_cirrhosis, multiplicative_slowdown = move_calc)
|
||||
sizeMoveMod(move_calc, owner)
|
||||
|
||||
/obj/item/organ/liver/Remove(special = FALSE)
|
||||
if(!QDELETED(owner))
|
||||
owner.remove_movespeed_modifier(MOVESPEED_ID_CIRRHOSIS)
|
||||
owner.remove_movespeed_modifier(/datum/movespeed_modifier/liver_cirrhosis)
|
||||
sizeMoveMod(1, owner)
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -188,6 +188,16 @@
|
||||
item = /obj/item/healthanalyzer/rad_laser
|
||||
cost = 3
|
||||
|
||||
/datum/uplink_item/device_tools/riflery_primer
|
||||
name = "Riflery Primer"
|
||||
desc = "An old book with blood and vodka stains on it. Freshly pulled from a dusty crate in some old warehouse, \
|
||||
this primer of questionable worth and value is rumored to increase your rifle-bolt-working and/or shotgun \
|
||||
racking fivefold. Then again, the techniques here only work on bolt-actions and pump-actions..."
|
||||
item = /obj/item/book/granter/trait/rifleman
|
||||
cost = 3
|
||||
restricted_roles = list("Operative") // i want it to be surplusable but i also want it to be mostly nukie only, please advise
|
||||
surplus = 90
|
||||
|
||||
/datum/uplink_item/device_tools/stimpack
|
||||
name = "Stimpack"
|
||||
desc = "Stimpacks, the tool of many great heroes, make you nearly immune to stuns and knockdowns for about \
|
||||
|
||||
Reference in New Issue
Block a user