Merge branch 'master' into viro-fix-5

This commit is contained in:
Guti
2024-12-10 18:39:21 +01:00
531 changed files with 9646 additions and 8149 deletions
+1 -1
View File
@@ -223,7 +223,7 @@
if(do_after(src, 30, A))
visible_message(span_notice("[src] fertilizes \the [A]."))
T.reagents.add_reagent("ammonia", 10)
T.reagents.add_reagent(REAGENT_ID_AMMONIA, 10)
busy = 0
action = ""
+10 -10
View File
@@ -31,12 +31,12 @@
var/injection_amount = 15 //How much reagent do we inject at a time?
var/heal_threshold = 10 //Start healing when they have this much damage in a category
var/use_beaker = 0 //Use reagents in beaker instead of default treatment agents.
var/treatment_brute = "tricordrazine"
var/treatment_oxy = "tricordrazine"
var/treatment_fire = "tricordrazine"
var/treatment_tox = "tricordrazine"
var/treatment_virus = "spaceacillin"
var/treatment_emag = "toxin"
var/treatment_brute = REAGENT_ID_TRICORDRAZINE
var/treatment_oxy = REAGENT_ID_TRICORDRAZINE
var/treatment_fire = REAGENT_ID_TRICORDRAZINE
var/treatment_tox = REAGENT_ID_TRICORDRAZINE
var/treatment_virus = REAGENT_ID_SPACEACILLIN
var/treatment_emag = REAGENT_ID_TOXIN
var/declare_treatment = 0 //When attempting to treat a patient, should it notify everyone wearing medhuds?
// Are we tipped over?
@@ -52,10 +52,10 @@
name = "\improper Mysterious Medibot"
desc = "International Medibot of mystery."
skin = "bezerk"
treatment_brute = "bicaridine"
treatment_fire = "dermaline"
treatment_oxy = "dexalin"
treatment_tox = "anti_toxin"
treatment_brute = REAGENT_ID_BICARIDINE
treatment_fire = REAGENT_ID_DERMALINE
treatment_oxy = REAGENT_ID_DEXALIN
treatment_tox = REAGENT_ID_ANTITOXIN
/mob/living/bot/medbot/handleIdle()
if(is_tipped) // Don't handle idle things if we're incapacitated!
@@ -5,7 +5,7 @@
if(!environment) return
var/turf/T = get_turf(src)
if(environment.gas["phoron"] > 0 || (T && locate(/obj/effect/alien/weeds) in T.contents))
if(environment.gas[GAS_PHORON] > 0 || (T && locate(/obj/effect/alien/weeds) in T.contents))
update_progression()
adjustBruteLoss(-1)
adjustFireLoss(-1)
@@ -82,8 +82,8 @@
// ========
/datum/medical_effect/headache
name = "Headache"
triggers = list("cryoxadone" = 10, "bicaridine" = 15, "tricordrazine" = 15)
cures = list("alkysine", "tramadol", "paracetamol", "oxycodone")
triggers = list(REAGENT_ID_CRYOXADONE = 10, REAGENT_ID_BICARIDINE = 15, REAGENT_ID_TRICORDRAZINE = 15)
cures = list(REAGENT_ID_ALKYSINE, REAGENT_ID_TRAMADOL, REAGENT_ID_PARACETAMOL, REAGENT_ID_OXYCODONE)
cure_message = "Your head stops throbbing..."
/datum/medical_effect/headache/on_life(mob/living/carbon/human/H, strength)
@@ -99,8 +99,8 @@
// ===========
/datum/medical_effect/bad_stomach
name = "Bad Stomach"
triggers = list("kelotane" = 30, "dermaline" = 15)
cures = list("anti_toxin")
triggers = list(REAGENT_ID_KELOTANE = 30, REAGENT_ID_DERMALINE = 15)
cures = list(REAGENT_ID_ANTITOXIN)
cure_message = "Your stomach feels a little better now..."
/datum/medical_effect/bad_stomach/on_life(mob/living/carbon/human/H, strength)
@@ -116,8 +116,8 @@
// ======
/datum/medical_effect/cramps
name = "Cramps"
triggers = list("anti_toxin" = 30, "tramadol" = 15)
cures = list("inaprovaline")
triggers = list(REAGENT_ID_ANTITOXIN = 30, REAGENT_ID_TRAMADOL = 15)
cures = list(REAGENT_ID_INAPROVALINE)
cure_message = "The cramps let up..."
/datum/medical_effect/cramps/on_life(mob/living/carbon/human/H, strength)
@@ -134,8 +134,8 @@
// ====
/datum/medical_effect/itch
name = "Itch"
triggers = list("bliss" = 10)
cures = list("inaprovaline")
triggers = list(REAGENT_ID_BLISS = 10)
cures = list(REAGENT_ID_INAPROVALINE)
cure_message = "The itching stops..."
/datum/medical_effect/itch/on_life(mob/living/carbon/human/H, strength)
@@ -82,8 +82,8 @@
// ========
/datum/medical_effect/headache
name = "Headache"
triggers = list("cryoxadone" = 10, "bicaridine" = 15, "tricordrazine" = 15)
cures = list("alkysine", "tramadol", "paracetamol", "oxycodone")
triggers = list(REAGENT_ID_CRYOXADONE = 10, REAGENT_ID_BICARIDINE = 15, REAGENT_ID_TRICORDRAZINE = 15)
cures = list(REAGENT_ID_ALKYSINE, REAGENT_ID_TRAMADOL, REAGENT_ID_PARACETAMOL, REAGENT_ID_OXYCODONE)
cure_message = "Your head stops throbbing..."
/datum/medical_effect/headache/on_life(mob/living/carbon/human/H, strength)
@@ -99,8 +99,8 @@
// ===========
/datum/medical_effect/bad_stomach
name = "Bad Stomach"
triggers = list("kelotane" = 30, "dermaline" = 15)
cures = list("anti_toxin")
triggers = list(REAGENT_ID_KELOTANE = 30, REAGENT_ID_DERMALINE = 15)
cures = list(REAGENT_ID_ANTITOXIN)
cure_message = "Your stomach feels a little better now..."
/datum/medical_effect/bad_stomach/on_life(mob/living/carbon/human/H, strength)
@@ -116,8 +116,8 @@
// ======
/datum/medical_effect/cramps
name = "Cramps"
triggers = list("anti_toxin" = 30, "tramadol" = 15)
cures = list("inaprovaline")
triggers = list(REAGENT_ID_ANTITOXIN = 30, REAGENT_ID_TRAMADOL = 15)
cures = list(REAGENT_ID_INAPROVALINE)
cure_message = "The cramps let up..."
/datum/medical_effect/cramps/on_life(mob/living/carbon/human/H, strength)
@@ -134,8 +134,8 @@
// ====
/datum/medical_effect/itch
name = "Itch"
triggers = list("bliss" = 10)
cures = list("inaprovaline")
triggers = list(REAGENT_ID_BLISS = 10)
cures = list(REAGENT_ID_INAPROVALINE)
cure_message = "The itching stops..."
/datum/medical_effect/itch/on_life(mob/living/carbon/human/H, strength)
@@ -1040,7 +1040,7 @@
/mob/living/carbon/human/revive()
if(should_have_organ(O_HEART))
vessel.add_reagent("blood",species.blood_volume-vessel.total_volume)
vessel.add_reagent(REAGENT_ID_BLOOD,species.blood_volume-vessel.total_volume)
fixblood()
species.create_organs(src) // Reset our organs/limbs.
@@ -1313,9 +1313,9 @@
make_blood()
if(vessel.total_volume < species.blood_volume)
vessel.maximum_volume = species.blood_volume
vessel.add_reagent("blood", species.blood_volume - vessel.total_volume)
vessel.add_reagent(REAGENT_ID_BLOOD, species.blood_volume - vessel.total_volume)
else if(vessel.total_volume > species.blood_volume)
vessel.remove_reagent("blood",vessel.total_volume - species.blood_volume) //This one should stay remove_reagent to work even lack of a O_heart
vessel.remove_reagent(REAGENT_ID_BLOOD,vessel.total_volume - species.blood_volume) //This one should stay remove_reagent to work even lack of a O_heart
vessel.maximum_volume = species.blood_volume
fixblood()
species.update_attack_types() //VOREStation Edit - Required for any trait that updates unarmed_types in setup.
@@ -1788,7 +1788,7 @@
if(species?.flags & NO_BLOOD)
bloodtrail = 0
else
var/blood_volume = vessel.get_reagent_amount("blood")
var/blood_volume = vessel.get_reagent_amount(REAGENT_ID_BLOOD)
if(blood_volume < species?.blood_volume*species?.blood_level_fatal)
bloodtrail = 0 //Most of it's gone already, just leave it be
else
@@ -436,7 +436,7 @@ This function restores the subjects blood to max.
if(!should_have_organ(O_HEART))
return
if(vessel.total_volume < species.blood_volume)
vessel.add_reagent("blood", species.blood_volume - vessel.total_volume)
vessel.add_reagent(REAGENT_ID_BLOOD, species.blood_volume - vessel.total_volume)
/*
This function restores all organs.
+15 -15
View File
@@ -307,7 +307,7 @@
return
//VOREStation Addition end: shadekin
if(reagents.has_reagent("prussian_blue")) //Prussian Blue temporarily stops radiation effects.
if(reagents.has_reagent(REAGENT_ID_PRUSSIANBLUE)) //Prussian Blue temporarily stops radiation effects.
return
var/damage = 0
@@ -452,7 +452,7 @@
// Begin long-term radiation effects
// Loss of taste occurs at 100 (2Gy) and is handled in taste.dm
// These are all done one after another, so duplication is not required. Someone at 400rads will have the 100&400 effects.
if(!radiation && accumulated_rads >= 100 && !reagents.has_reagent("prussian_blue")) //Let's not hit them with long term effects when they're actively being hit with rads.
if(!radiation && accumulated_rads >= 100 && !reagents.has_reagent(REAGENT_ID_PRUSSIANBLUE)) //Let's not hit them with long term effects when they're actively being hit with rads.
if(!isSynthetic())
I = internal_organs_by_name[O_EYES]
if(I) //Eye stuff
@@ -613,13 +613,13 @@
if(species.breath_type)
breath_type = species.breath_type
else
breath_type = "oxygen"
breath_type = GAS_O2
inhaling = breath.gas[breath_type]
if(species.poison_type)
poison_type = species.poison_type
else
poison_type = "phoron"
poison_type = GAS_PHORON
poison = breath.gas[poison_type]
if(species.exhale_type)
@@ -644,17 +644,17 @@
failed_inhale = 1
switch(breath_type)
if("oxygen")
if(GAS_O2)
throw_alert("oxy", /obj/screen/alert/not_enough_oxy)
if("phoron")
if(GAS_PHORON)
throw_alert("oxy", /obj/screen/alert/not_enough_tox)
if("nitrogen")
if(GAS_N2)
throw_alert("oxy", /obj/screen/alert/not_enough_nitro)
if("carbon_dioxide")
if(GAS_CO2)
throw_alert("oxy", /obj/screen/alert/not_enough_co2)
if("volatile_fuel")
if(GAS_VOLATILE_FUEL)
throw_alert("oxy", /obj/screen/alert/not_enough_fuel)
if("nitrous_oxide")
if(GAS_N2O)
throw_alert("oxy", /obj/screen/alert/not_enough_n2o)
else
@@ -699,15 +699,15 @@
if(toxins_pp > safe_toxins_max)
var/ratio = (poison/safe_toxins_max) * 10
if(reagents)
reagents.add_reagent("toxin", CLAMP(ratio, MIN_TOXIN_DAMAGE, MAX_TOXIN_DAMAGE))
reagents.add_reagent(REAGENT_ID_TOXIN, CLAMP(ratio, MIN_TOXIN_DAMAGE, MAX_TOXIN_DAMAGE))
breath.adjust_gas(poison_type, -poison/6, update = 0) //update after
throw_alert("tox_in_air", /obj/screen/alert/tox_in_air)
else
clear_alert("tox_in_air")
// If there's some other shit in the air lets deal with it here.
if(breath.gas["nitrous_oxide"])
var/SA_pp = (breath.gas["nitrous_oxide"] / breath.total_moles) * breath_pressure
if(breath.gas[GAS_N2O])
var/SA_pp = (breath.gas[GAS_N2O] / breath.total_moles) * breath_pressure
// Enough to make us paralysed for a bit
if(SA_pp > SA_para_min)
@@ -723,7 +723,7 @@
else if(SA_pp > 0.15)
if(prob(20))
spawn(0) emote(pick("giggle", "laugh"))
breath.adjust_gas("nitrous_oxide", -breath.gas["nitrous_oxide"]/6, update = 0) //update after
breath.adjust_gas(GAS_N2O, -breath.gas[GAS_N2O]/6, update = 0) //update after
// Were we able to breathe?
if (failed_inhale || failed_exhale)
@@ -1946,7 +1946,7 @@
if(Pump)
temp += Pump.standard_pulse_level - PULSE_NORM
if(round(vessel.get_reagent_amount("blood")) <= species.blood_volume*species.blood_level_danger) //how much blood do we have
if(round(vessel.get_reagent_amount(REAGENT_ID_BLOOD)) <= species.blood_volume*species.blood_level_danger) //how much blood do we have
temp = temp + 3 //not enough :(
if(status_flags & FAKEDEATH)
@@ -43,8 +43,8 @@
gluttonous = 1
breath_type = "phoron"
poison_type = "oxygen"
breath_type = GAS_PHORON
poison_type = GAS_O2
ideal_air_type = /datum/gas_mixture/belly_air/vox
siemens_coefficient = 0.2
@@ -41,8 +41,8 @@
var/show_ssd = "fast asleep"
var/virus_immune
var/short_sighted // Permanent weldervision.
var/blood_name = "blood" // Name for the species' blood.
var/blood_reagents = "iron" // Reagent(s) that restore lost blood. goes by reagent IDs.
var/blood_name = REAGENT_ID_BLOOD // Name for the species' blood.
var/blood_reagents = REAGENT_ID_IRON // Reagent(s) that restore lost blood. goes by reagent IDs.
var/blood_volume = 560 // Initial blood volume.
var/bloodloss_rate = 1 // Multiplier for how fast a species bleeds out. Higher = Faster
var/blood_level_safe = 0.85 //"Safe" blood level; above this, you're OK
@@ -133,9 +133,9 @@
// Environment tolerance/life processes vars.
var/reagent_tag //Used for metabolizing reagents.
var/breath_type = "oxygen" // Non-oxygen gas breathed, if any.
var/poison_type = "phoron" // Poisonous air.
var/exhale_type = "carbon_dioxide" // Exhaled gas type.
var/breath_type = GAS_O2 // Non-oxygen gas breathed, if any.
var/poison_type = GAS_PHORON // Poisonous air.
var/exhale_type = GAS_CO2 // Exhaled gas type.
var/water_breather = FALSE
var/bad_swimmer = FALSE
@@ -20,30 +20,30 @@
if(1 to 2)
user.visible_message(span_danger("[user]'s fangs scrape across [target]'s cheek!"))
to_chat(target, span_danger("Your face feels tingly!"))
target.bloodstr.add_reagent("numbenzyme",attack_damage) //Have to add this here, otherwise the swtich fails.
target.bloodstr.add_reagent(REAGENT_ID_NUMBENZYME,attack_damage) //Have to add this here, otherwise the swtich fails.
if(3 to 4)
user.visible_message(span_danger("[user]'s fangs pierce into [target]'s neck at an odd, awkward angle!"))
to_chat(target, span_danger("Your neck feels like it's on fire before going numb!"))
target.bloodstr.add_reagent("numbenzyme",attack_damage)
target.bloodstr.add_reagent(REAGENT_ID_NUMBENZYME,attack_damage)
if(5)
user.visible_message(span_danger("[user] sinks \his [pick(attack_noun)] <b><i>deep</i></b> into [target]'s neck, causing the vein to bulge outwards at some type of chemical is pumped into it!"))
to_chat(target, span_danger("Your neck feels like it's going to burst! Moments later, you simply can't feel your neck any longer, the numbness beginning to spread throughout your body!"))
target.bloodstr.add_reagent("numbenzyme",attack_damage)
target.bloodstr.add_reagent(REAGENT_ID_NUMBENZYME,attack_damage)
else
// ----- BODY ----- //
switch(attack_damage)
if(1 to 2)
user.visible_message(span_danger("[user]'s fangs scrape across [target]'s [affecting.name]!"))
to_chat(target, span_danger("Your [affecting.name] feels tingly!"))
target.bloodstr.add_reagent("numbenzyme",attack_damage)
target.bloodstr.add_reagent(REAGENT_ID_NUMBENZYME,attack_damage)
if(3 to 4)
user.visible_message(span_danger("[user]'s fangs pierce [pick("", "", "the side of")] [target]'s [affecting.name]!"))
to_chat(target, span_danger("Your [affecting.name] feels like it's on fire before going numb!"))
target.bloodstr.add_reagent("numbenzyme",attack_damage)
target.bloodstr.add_reagent(REAGENT_ID_NUMBENZYME,attack_damage)
if(5)
user.visible_message(span_danger("[user]'s fangs sink deep into [target]'s [affecting.name], one of their veins bulging outwards from the sudden fluid pumped into it!"))
to_chat(target, span_danger("Your [affecting.name] feels like it's going to burst! Moments later, you simply can't feel your [affecting.name] any longer, the numbness slowly spreading throughout your body!"))
target.bloodstr.add_reagent("numbenzyme",attack_damage)
target.bloodstr.add_reagent(REAGENT_ID_NUMBENZYME,attack_damage)
/datum/unarmed_attack/claws/shadekin
@@ -18,9 +18,9 @@
selects_bodytype = SELECTS_BODYTYPE_CUSTOM //VOREStation edit
body_temperature = T20C
breath_type = "oxygen"
poison_type = "phoron"
exhale_type = "oxygen"
breath_type = GAS_O2
poison_type = GAS_PHORON
exhale_type = GAS_O2
water_breather = TRUE //eh, why not? Aquatic plants are a thing.
// Heat and cold resistances are 20 degrees broader on the level 1 range, level 2 is default, level 3 is much weaker, halfway between L2 and normal L3.
@@ -169,7 +169,7 @@
var/failed_inhale = 0
var/failed_exhale = 0
inhaling = breath.gas["carbon_dioxide"]
inhaling = breath.gas[GAS_CO2]
poison = breath.gas[poison_type]
exhaling = breath.gas[exhale_type]
@@ -193,7 +193,7 @@
H.clear_alert("oxy")
inhaled_gas_used = inhaling/6
breath.adjust_gas("carbon_dioxide", -inhaled_gas_used, update = 0) //update afterwards
breath.adjust_gas(GAS_CO2, -inhaled_gas_used, update = 0) //update afterwards
breath.adjust_gas_temp(exhale_type, inhaled_gas_used, H.bodytemperature, update = 0) //update afterwards
//Now we handle CO2.
@@ -221,7 +221,7 @@
if(toxins_pp > safe_toxins_max)
var/ratio = (poison/safe_toxins_max) * 10
if(H.reagents)
H.reagents.add_reagent("toxin", CLAMP(ratio, MIN_TOXIN_DAMAGE, MAX_TOXIN_DAMAGE))
H.reagents.add_reagent(REAGENT_ID_TOXIN, CLAMP(ratio, MIN_TOXIN_DAMAGE, MAX_TOXIN_DAMAGE))
breath.adjust_gas(poison_type, -poison/6, update = 0) //update after
H.throw_alert("tox_in_air", /obj/screen/alert/tox_in_air)
else
@@ -338,7 +338,7 @@
name = "fruit gland"
desc = "A bulbous gourd-like structure."
organ_tag = A_FRUIT
var/generated_reagents = list("sugar" = 2) //This actually allows them. This could be anything, but sugar seems most fitting.
var/generated_reagents = list(REAGENT_ID_SUGAR = 2) //This actually allows them. This could be anything, but sugar seems most fitting.
var/usable_volume = 250 //Five fruit.
var/transfer_amount = 50
var/empty_message = list("Your have no fruit on you.", "You have a distinct lack of fruit..")
@@ -348,7 +348,7 @@
var/self_verb_descriptor = list("grab", "snatch", "pick")
var/short_emote_descriptor = list("picks", "grabs")
var/self_emote_descriptor = list("grab", "pick", "snatch")
var/fruit_type = "apple"
var/fruit_type = PLANT_APPLE
var/mob/living/organ_owner = null
var/gen_cost = 0.5
@@ -390,7 +390,7 @@
break
if(fruit_gland)
var/selection = tgui_input_list(src, "Choose your character's fruit type. Choosing nothing will result in a default of apples.", "Fruit Type", acceptable_fruit_types)
var/selection = tgui_input_list(src, "Choose your character's fruit type. Choosing nothing will result in a default of apples.", "Fruit Type", GLOB.acceptable_fruit_types)
if(selection)
fruit_gland.fruit_type = selection
add_verb(src, /mob/living/carbon/human/proc/alraune_fruit_pick)
@@ -69,10 +69,10 @@
//Called when spawning to equip them with special things.
/datum/species/custom/equip_survival_gear(var/mob/living/carbon/human/H, var/extendedtank = 0, var/comprehensive = 0)
. = ..()
if(breath_type != "oxygen")
if(breath_type != GAS_O2)
H.equip_to_slot_or_del(new /obj/item/clothing/mask/breath(H), slot_wear_mask)
var/obj/item/tank/tankpath
if(breath_type == "phoron")
if(breath_type == GAS_PHORON)
tankpath = /obj/item/tank/vox
else
tankpath = text2path("/obj/item/tank/" + breath_type)
@@ -36,7 +36,7 @@ var/datum/species/shapeshifter/promethean/prometheans
assisted_langs = list(LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX) // Prometheans are weird, let's just assume they can use basically any language.
blood_name = "gelatinous ooze"
blood_reagents = "slimejelly"
blood_reagents = REAGENT_ID_SLIMEJELLY
breath_type = null
poison_type = null
@@ -137,6 +137,12 @@
set hidden = 1
humanform.nano_latch()
/mob/living/simple_mob/protean_blob/proc/nano_assimilate()
set name = "Assimilate Host"
set desc = "Allows a protean to assimilate a latched host, allowing them to devour them right away."
set hidden = 1
humanform.nano_assimilate()
/mob/living/simple_mob/protean_blob/Login()
..()
plane_holder.set_vis(VIS_AUGMENTED, 1)
@@ -595,6 +595,32 @@
else
to_chat(protie, span_warning("You need to be grabbing a humanoid mob aggressively to latch onto them."))
/mob/living/carbon/human/proc/nano_assimilate()
set name = "Assimilate Host"
set desc = "Allows a protean to assimilate a latched host, allowing them to devour them right away."
set hidden = 1
var/mob/living/protie = src
var/mob/living/carbon/human/target
var/datum/species/protean/S = src.species
if(nano_dead_check(src))
return
if(temporary_form)
protie = temporary_form
if(protie.loc == S.OurRig)
target = S.OurRig.wearer
if(!target)
to_chat(protie, span_vwarning("You need a host to assimilate."))
return
if(!protie.can_be_drop_pred || !target.can_be_drop_prey || !target.devourable)
to_chat(protie, span_vwarning("You can't assimilate your current host."))
return
target.drop_from_inventory(S.OurRig)
to_chat(protie, span_vnotice("You assimilate your host."))
to_chat(target, span_vwarning("You feel yourself sink deeper into the suit!"))
target.forceMove(protie.vore_selected)
nano_blobform(TRUE)
/// /// /// A helper to reuse
/mob/living/proc/nano_get_refactory(obj/item/organ/internal/nano/refactory/R)
if(istype(R))
@@ -704,6 +730,12 @@
icon_state = "latch"
to_call = /mob/living/carbon/human/proc/nano_latch
/obj/effect/protean_ability/assimilate_host
ability_name = "Assimilate Host"
desc = "Allows a protean to assimilate a latched host, allowing them to devour them right away."
icon_state = "assimilate"
to_call = /mob/living/carbon/human/proc/nano_assimilate
/obj/effect/protean_ability/copy_form
ability_name = "Copy Form"
desc = "If you are aggressively grabbing someone, with their consent, you can turn into a copy of them. (Without their name)."
@@ -422,7 +422,7 @@
charge_amount = 100
var/mob/living/carbon/human/charger
/obj/item/cell/protean/Initialize() //ChompEDIT New --> Initialize
/obj/item/cell/protean/Initialize()
charge = maxcharge
update_icon()
addtimer(CALLBACK(src, PROC_REF(search_for_protean)), 60)
@@ -99,6 +99,7 @@
/mob/living/carbon/human/proc/nano_copy_body,
/mob/living/carbon/human/proc/appearance_switch,
/mob/living/carbon/human/proc/nano_latch,
/mob/living/carbon/human/proc/nano_assimilate,
/mob/living/proc/set_size,
/mob/living/carbon/human/proc/nano_change_fitting, //These verbs are displayed normally,
/mob/living/carbon/human/proc/shapeshifter_select_hair,
@@ -239,20 +240,22 @@
/datum/species/protean/handle_death(var/mob/living/carbon/human/H)
if(!H)
return //No body?
if(OurRig.dead)
return
OurRig.dead = 1
if(OurRig)
if(OurRig.dead)
return
OurRig.dead = 1
var/mob/temp = H
if(H.temporary_form)
temp = H.temporary_form
playsound(temp, 'sound/voice/borg_deathsound.ogg', 50, 1)
temp.visible_message(span_bold("[temp.name]") + " shudders and retreats inwards, coalescing into a single core componant!")
to_chat(temp, span_warning("You've died as a Protean! While dead, you will be locked to your core RIG control module until you can be repaired. Instructions to your revival can be found in the Examine tab when examining your module."))
if(H.temporary_form)
if(!istype(H.temporary_form.loc, /obj/item/rig/protean))
if(OurRig)
if(H.temporary_form)
if(!istype(H.temporary_form.loc, /obj/item/rig/protean))
H.nano_rig_transform(1)
else
H.nano_rig_transform(1)
else
H.nano_rig_transform(1)
pseudodead = 1
/datum/species/protean/handle_environment_special(var/mob/living/carbon/human/H)
@@ -318,7 +318,7 @@
flash_mod = 1.2
chemOD_mod = 0.9
blood_reagents = "copper"
blood_reagents = REAGENT_ID_COPPER
bloodloss_rate = 1.5
ambiguous_genders = TRUE
@@ -430,7 +430,7 @@
warning_low_pressure = 300 // Low pressure warning.
hazard_low_pressure = 220 // Dangerously low pressure.
safe_pressure = 400
poison_type = "nitrogen" // technically it's a partial pressure thing but IDK if we can emulate that
poison_type = GAS_N2 // technically it's a partial pressure thing but IDK if we can emulate that
ideal_air_type = /datum/gas_mixture/belly_air/zaddat
genders = list(FEMALE, PLURAL) //females are polyp-producing, infertile females and males are nigh-identical
@@ -87,9 +87,9 @@
/mob/living/carbon/human/proc/hasnutriment()
if (bloodstr.has_reagent("nutriment", 30) || src.bloodstr.has_reagent("protein", 15)) //protein needs half as much. For reference, a steak contains 9u protein.
if (bloodstr.has_reagent(REAGENT_ID_NUTRIMENT, 30) || src.bloodstr.has_reagent(REAGENT_ID_PROTEIN, 15)) //protein needs half as much. For reference, a steak contains 9u protein.
return TRUE
else if (ingested.has_reagent("nutriment", 60) || src.ingested.has_reagent("protein", 30)) //try forcefeeding them, why not. Less effective.
else if (ingested.has_reagent(REAGENT_ID_NUTRIMENT, 60) || src.ingested.has_reagent(REAGENT_ID_PROTEIN, 30)) //try forcefeeding them, why not. Less effective.
return TRUE
else return FALSE
@@ -1621,9 +1621,9 @@
continue
if(L == src) //no getting high off your own supply, get a nif or something, nerd.
continue
if(!L.resizable && (trait_injection_selected == "macrocillin" || trait_injection_selected == "microcillin" || trait_injection_selected == "normalcillin")) // If you're using a size reagent, ignore those with pref conflicts.
if(!L.resizable && (trait_injection_selected == REAGENT_ID_MACROCILLIN || trait_injection_selected == REAGENT_ID_MICROCILLIN || trait_injection_selected == REAGENT_ID_NORMALCILLIN)) // If you're using a size reagent, ignore those with pref conflicts.
continue
if(!L.allow_spontaneous_tf && (trait_injection_selected == "androrovir" || trait_injection_selected == "gynorovir" || trait_injection_selected == "androgynorovir")) // If you're using a TF reagent, ignore those with pref conflicts.
if(!L.allow_spontaneous_tf && (trait_injection_selected == REAGENT_ID_ANDROROVIR || trait_injection_selected == REAGENT_ID_GYNOROVIR || trait_injection_selected == REAGENT_ID_ANDROGYNOROVIR)) // If you're using a TF reagent, ignore those with pref conflicts.
continue
targets += L
@@ -206,7 +206,7 @@
flesh_color = "#AFA59E"
base_color = "#333333"
blood_color = "#240bc4"
blood_reagents = "copper"
blood_reagents = REAGENT_ID_COPPER
reagent_tag = IS_ZORREN
color_mult = 1
@@ -154,12 +154,12 @@
/datum/trait/negative/breathes/phoron
name = "Phoron Breather"
desc = "You breathe phoron instead of oxygen (which is poisonous to you), much like a Vox."
var_changes = list("breath_type" = "phoron", "poison_type" = "oxygen", "ideal_air_type" = /datum/gas_mixture/belly_air/vox)
var_changes = list("breath_type" = GAS_PHORON, "poison_type" = GAS_O2, "ideal_air_type" = /datum/gas_mixture/belly_air/vox)
/datum/trait/negative/breathes/nitrogen
name = "Nitrogen Breather"
desc = "You breathe nitrogen instead of oxygen (which is poisonous to you). Incidentally, phoron isn't poisonous to breathe to you."
var_changes = list("breath_type" = "nitrogen", "poison_type" = "oxygen", "ideal_air_type" = /datum/gas_mixture/belly_air/nitrogen_breather)
var_changes = list("breath_type" = GAS_N2, "poison_type" = GAS_O2, "ideal_air_type" = /datum/gas_mixture/belly_air/nitrogen_breather)
/datum/trait/negative/monolingual
name = "Monolingual"
@@ -170,17 +170,17 @@
/datum/trait/neutral/venom_bite/apply(var/datum/species/S,var/mob/living/carbon/human/H)
..()
add_verb(H, /mob/living/proc/injection)
H.trait_injection_reagents += "microcillin" // get small
H.trait_injection_reagents += "macrocillin" // get BIG
H.trait_injection_reagents += "normalcillin" // normal
H.trait_injection_reagents += "numbenzyme" // no feelings
H.trait_injection_reagents += "androrovir" // -> MALE
H.trait_injection_reagents += "gynorovir" // -> FEMALE
H.trait_injection_reagents += "androgynorovir" // -> PLURAL
H.trait_injection_reagents += "stoxin" // night night chem
H.trait_injection_reagents += "rainbowtoxin" // Funny flashing lights.
H.trait_injection_reagents += "paralysistoxin" // Paralysis!
H.trait_injection_reagents += "painenzyme" // Pain INCREASER
H.trait_injection_reagents += REAGENT_ID_MICROCILLIN // get small
H.trait_injection_reagents += REAGENT_ID_MACROCILLIN // get BIG
H.trait_injection_reagents += REAGENT_ID_NORMALCILLIN // normal
H.trait_injection_reagents += REAGENT_ID_NUMBENZYME // no feelings
H.trait_injection_reagents += REAGENT_ID_ANDROROVIR // -> MALE
H.trait_injection_reagents += REAGENT_ID_GYNOROVIR // -> FEMALE
H.trait_injection_reagents += REAGENT_ID_ANDROGYNOROVIR // -> PLURAL
H.trait_injection_reagents += REAGENT_ID_STOXIN // night night chem
H.trait_injection_reagents += REAGENT_ID_RAINBOWTOXIN // Funny flashing lights.
H.trait_injection_reagents += REAGENT_ID_PARALYSISTOXIN // Paralysis!
H.trait_injection_reagents += REAGENT_ID_PAINENZYME // Pain INCREASER
/datum/trait/neutral/long_vore
name = "Long Predatorial Reach"
@@ -114,7 +114,7 @@
var/datum/gas_mixture/environment = T.return_air()
if(!environment) return
if(environment.gas["phoron"] > 0 || locate(/obj/effect/alien/weeds) in T)
if(environment.gas[GAS_PHORON] > 0 || locate(/obj/effect/alien/weeds) in T)
if(!regenerate(H))
var/obj/item/organ/internal/xenos/plasmavessel/P = H.internal_organs_by_name[O_PLASMA]
P.stored_plasma += weeds_plasma_rate
@@ -29,7 +29,7 @@
/obj/item/slime_extract/New()
..()
create_reagents(5)
// reagents.add_reagent("slimejelly", 30)
// reagents.add_reagent(REAGENT_ID_SLIMEJELLY, 30)
/obj/item/slime_extract/grey
name = "grey slime extract"
@@ -358,8 +358,8 @@
/obj/item/reagent_containers/food/snacks/egg/slime/Initialize()
. = ..()
reagents.add_reagent("nutriment", 4)
reagents.add_reagent("slimejelly", 1)
reagents.add_reagent(REAGENT_ID_NUTRIMENT, 4)
reagents.add_reagent(REAGENT_ID_SLIMEJELLY, 1)
addtimer(CALLBACK(src, ./proc/Grow), rand(120 SECONDS, 150 SECONDS))
/obj/item/reagent_containers/food/snacks/egg/slime/proc/Grow()
+1 -1
View File
@@ -37,7 +37,7 @@ calculate text size per text.
for(var/datum/reagent/R in reagent_list)
if(!R.taste_mult)
continue
if(R.id == "nutriment") //this is ugly but apparently only nutriment (not subtypes) has taste data TODO figure out why
if(R.id == REAGENT_ID_NUTRIMENT) //this is ugly but apparently only nutriment (not subtypes) has taste data TODO figure out why
var/list/taste_data = R.get_data()
for(var/taste in taste_data)
if(taste in tastes)
+1 -1
View File
@@ -442,7 +442,7 @@
return 1
var/datum/gas_mixture/G = loc.return_air() // Check if we're standing in an oxygenless environment
if(G.gas["oxygen"] < 1)
if(G.gas[GAS_O2] < 1)
ExtinguishMob() //If there's no oxygen in the tile we're on, put out the fire
return 1
@@ -340,10 +340,10 @@
var/pressure = environment.return_pressure()
var/total_moles = environment.total_moles
if (total_moles)
var/o2_level = environment.gas["oxygen"]/total_moles
var/n2_level = environment.gas["nitrogen"]/total_moles
var/co2_level = environment.gas["carbon_dioxide"]/total_moles
var/phoron_level = environment.gas["phoron"]/total_moles
var/o2_level = environment.gas[GAS_O2]/total_moles
var/n2_level = environment.gas[GAS_N2]/total_moles
var/co2_level = environment.gas[GAS_CO2]/total_moles
var/phoron_level = environment.gas[GAS_PHORON]/total_moles
var/unknown_level = 1-(o2_level+n2_level+co2_level+phoron_level)
// entry is what the element is describing
@@ -203,7 +203,7 @@
name = "MediHound hypospray"
desc = "An advanced chemical synthesizer and injection system utilizing carrier's reserves, designed for heavy-duty medical equipment."
charge_cost = 10
reagent_ids = list("inaprovaline", "dexalin", "bicaridine", "kelotane", "anti_toxin", "spaceacillin", "paracetamol")
reagent_ids = list(REAGENT_ID_INAPROVALINE, REAGENT_ID_DEXALIN, REAGENT_ID_BICARIDINE, REAGENT_ID_KELOTANE, REAGENT_ID_ANTITOXIN, REAGENT_ID_SPACEACILLIN, REAGENT_ID_PARACETAMOL)
var/datum/matter_synth/water = null
/obj/item/reagent_containers/borghypo/hound/process() //Recharges in smaller steps and uses the water reserves as well.
@@ -220,12 +220,12 @@
/obj/item/reagent_containers/borghypo/hound/lost
name = "Hound hypospray"
desc = "An advanced chemical synthesizer and injection system utilizing carrier's reserves."
reagent_ids = list("tricordrazine", "inaprovaline", "bicaridine", "dexalin", "anti_toxin", "tramadol", "spaceacillin")
reagent_ids = list(REAGENT_ID_TRICORDRAZINE, REAGENT_ID_INAPROVALINE, REAGENT_ID_BICARIDINE, REAGENT_ID_DEXALIN, REAGENT_ID_ANTITOXIN, REAGENT_ID_TRAMADOL, REAGENT_ID_SPACEACILLIN)
/obj/item/reagent_containers/borghypo/hound/trauma
name = "Hound hypospray"
desc = "An advanced chemical synthesizer and injection system utilizing carrier's reserves."
reagent_ids = list("tricordrazine", "inaprovaline", "oxycodone", "dexalin" ,"spaceacillin")
reagent_ids = list(REAGENT_ID_TRICORDRAZINE, REAGENT_ID_INAPROVALINE, REAGENT_ID_OXYCODONE, REAGENT_ID_DEXALIN ,REAGENT_ID_SPACEACILLIN)
//Tongue stuff
@@ -13,7 +13,7 @@
var/min_health = -100
var/cleaning = 0
var/patient_laststat = null
var/list/injection_chems = list("inaprovaline", "bicaridine", "kelotane", "anti_toxin", "dexalin", "tricordrazine", "spaceacillin", "tramadol") //The borg is able to heal every damage type. As a nerf, they use 750 charge per injection.
var/list/injection_chems = list(REAGENT_ID_INAPROVALINE, REAGENT_ID_BICARIDINE, REAGENT_ID_KELOTANE, REAGENT_ID_ANTITOXIN, REAGENT_ID_DEXALIN, REAGENT_ID_TRICORDRAZINE, REAGENT_ID_SPACEACILLIN, REAGENT_ID_TRAMADOL) //The borg is able to heal every damage type. As a nerf, they use 750 charge per injection.
var/eject_port = "ingestion"
var/list/items_preserved = list()
var/UI_open = FALSE
@@ -449,7 +449,7 @@
return
if(patient && !(patient.stat & DEAD)) //What is bitwise NOT? ... Thought it was tilde.
if(href_list["inject"] == "inaprovaline" || patient.health > min_health)
if(href_list["inject"] == REAGENT_ID_INAPROVALINE || patient.health > min_health)
inject_chem(usr, href_list["inject"])
else
to_chat(usr, span_notice("ERROR: Subject is not in stable condition for injections."))
@@ -462,7 +462,7 @@
/obj/item/dogborg/sleeper/proc/inject_chem(mob/user, chem)
if(patient && patient.reagents)
if(chem in injection_chems + "inaprovaline")
if(chem in injection_chems + REAGENT_ID_INAPROVALINE)
if(hound.cell.charge < 800) //This is so borgs don't kill themselves with it.
to_chat(hound, span_notice("You don't have enough power to synthesize fluids."))
return
@@ -660,12 +660,12 @@
total_material *= stack.get_amount()
if(material == MAT_STEEL && metal)
metal.add_charge(total_material)
if(material == "glass" && glass)
if(material == MAT_GLASS && glass)
glass.add_charge(total_material)
if(decompiler)
if(material == "plastic" && plastic)
if(material == MAT_PLASTIC && plastic)
plastic.add_charge(total_material)
if(material == "wood" && wood)
if(material == MAT_WOOD && wood)
wood.add_charge(total_material)
drain(-50 * digested)
else if(istype(target,/obj/effect/decal/remains))
@@ -748,7 +748,7 @@
name = "Supply Storage"
desc = "A mounted survival unit with fuel processor, helpful with both deliveries and assisting injured miners."
icon_state = "sleeperc"
injection_chems = list("glucose","inaprovaline","tricordrazine")
injection_chems = list(REAGENT_ID_GLUCOSE,REAGENT_ID_INAPROVALINE,REAGENT_ID_TRICORDRAZINE)
max_item_count = 10
recycles = FALSE
stabilizer = TRUE
@@ -775,19 +775,19 @@
name = "Emergency Storage"
desc = "A mounted 'emergency containment cell'."
icon_state = "sleeperert"
injection_chems = list("inaprovaline", "tramadol") // short list
injection_chems = list(REAGENT_ID_INAPROVALINE, REAGENT_ID_TRAMADOL) // short list
/obj/item/dogborg/sleeper/trauma //Trauma borg belly
name = "Recovery Belly"
desc = "A downgraded model of the sleeper belly, intended primarily for post-surgery recovery."
icon_state = "sleeper"
injection_chems = list("inaprovaline", "dexalin", "tricordrazine", "spaceacillin", "oxycodone")
injection_chems = list(REAGENT_ID_INAPROVALINE, REAGENT_ID_DEXALIN, REAGENT_ID_TRICORDRAZINE, REAGENT_ID_SPACEACILLIN, REAGENT_ID_OXYCODONE)
/obj/item/dogborg/sleeper/lost
name = "Multipurpose Belly"
desc = "A multipurpose belly, capable of functioning as both sleeper and processor."
icon_state = "sleeperlost"
injection_chems = list("tricordrazine", "bicaridine", "dexalin", "anti_toxin", "tramadol", "spaceacillin")
injection_chems = list(REAGENT_ID_TRICORDRAZINE, REAGENT_ID_BICARIDINE, REAGENT_ID_DEXALIN, REAGENT_ID_ANTITOXIN, REAGENT_ID_TRAMADOL, REAGENT_ID_SPACEACILLIN)
compactor = TRUE
max_item_count = 25
stabilizer = TRUE
@@ -797,7 +797,7 @@
name = "Combat Triage Belly"
desc = "A mounted sleeper that stabilizes patients and can inject reagents in the borg's reserves. This one is for more extreme combat scenarios."
icon_state = "sleepersyndiemed"
injection_chems = list("healing_nanites", "hyperzine", "tramadol", "oxycodone", "spaceacillin", "peridaxon", "osteodaxon", "myelamine", "synthblood")
injection_chems = list(REAGENT_ID_HEALINGNANITES, REAGENT_ID_HYPERZINE, REAGENT_ID_TRAMADOL, REAGENT_ID_OXYCODONE, REAGENT_ID_SPACEACILLIN, REAGENT_ID_PERIDAXON, REAGENT_ID_OSTEODAXON, REAGENT_ID_MYELAMINE, REAGENT_ID_SYNTHBLOOD)
digest_multiplier = 2
/obj/item/dogborg/sleeper/K9/syndie
@@ -260,7 +260,7 @@ var/global/list/robot_modules = list(
var/obj/item/reagent_containers/spray/PS = new /obj/item/reagent_containers/spray(src)
src.emag += PS
PS.reagents.add_reagent("pacid", 250)
PS.reagents.add_reagent(REAGENT_ID_PACID, 250)
PS.name = "Polyacid spray"
var/datum/matter_synth/medicine = new /datum/matter_synth/medicine(10000)
@@ -296,7 +296,7 @@ var/global/list/robot_modules = list(
var/obj/item/reagent_containers/spray/PS = locate() in src.emag
if(PS)
PS.reagents.add_reagent("pacid", 2 * amount)
PS.reagents.add_reagent(REAGENT_ID_PACID, 2 * amount)
..()
@@ -319,7 +319,7 @@ var/global/list/robot_modules = list(
src.modules += new /obj/item/inflatable_dispenser/robot(src)
var/obj/item/reagent_containers/spray/PS = new /obj/item/reagent_containers/spray(src)
src.emag += PS
PS.reagents.add_reagent("pacid", 250)
PS.reagents.add_reagent(REAGENT_ID_PACID, 250)
PS.name = "Polyacid spray"
var/datum/matter_synth/medicine = new /datum/matter_synth/medicine(15000)
@@ -355,7 +355,7 @@ var/global/list/robot_modules = list(
var/obj/item/reagent_containers/spray/PS = locate() in src.emag
if(PS)
PS.reagents.add_reagent("pacid", 2 * amount)
PS.reagents.add_reagent(REAGENT_ID_PACID, 2 * amount)
..()
@@ -519,7 +519,7 @@ var/global/list/robot_modules = list(
src.modules += new /obj/item/borg/sight/janitor(src)
var/obj/item/reagent_containers/spray/LS = new /obj/item/reagent_containers/spray(src)
src.emag += LS
LS.reagents.add_reagent("lube", 250)
LS.reagents.add_reagent(REAGENT_ID_LUBE, 250)
LS.name = "Lube spray"
//Starts empty. Can only recharge with recycled material.
@@ -568,7 +568,7 @@ var/global/list/robot_modules = list(
var/obj/item/reagent_containers/spray/LS = locate() in src.emag
if(LS)
LS.reagents.add_reagent("lube", 2 * amount)
LS.reagents.add_reagent(REAGENT_ID_LUBE, 2 * amount)
/obj/item/robot_module/robot/clerical
name = "service robot module"
@@ -634,7 +634,7 @@ var/global/list/robot_modules = list(
var/datum/reagents/R = new/datum/reagents(50)
PB.reagents = R
R.my_atom = PB
R.add_reagent("beer2", 50)
R.add_reagent(REAGENT_ID_BEER2, 50)
PB.name = "Auntie Hong's Final Sip"
PB.desc = "A bottle of very special mix of alcohol and poison. Some may argue that there's alcohol to die for, but Auntie Hong took it to next level."
@@ -645,7 +645,7 @@ var/global/list/robot_modules = list(
/obj/item/robot_module/robot/clerical/butler/respawn_consumable(var/mob/living/silicon/robot/R, var/amount)
var/obj/item/reagent_containers/food/drinks/bottle/small/beer/PB = locate() in src.emag
if(PB)
PB.reagents.add_reagent("beer2", 2 * amount)
PB.reagents.add_reagent(REAGENT_ID_BEER2, 2 * amount)
/obj/item/robot_module/robot/clerical/general
name = "clerical robot module"
@@ -206,13 +206,13 @@
rest_sprite_options = list("Default")
has_extra_customization = TRUE
var/list/booze_options = list("Beer" = "booze",
var/list/booze_options = list(REAGENT_BEER = "booze",
"Space Mountain Wind" = "boozegreen",
"Curacao" = "boozeblue",
"Grape Soda" = "boozepurple",
REAGENT_GRAPESODA = "boozepurple",
"Demon's Blood" = "boozered",
"Whiskey Soda" = "boozeorange",
"Coffee" = "boozebrown")
REAGENT_WHISKEYSODA = "boozeorange",
REAGENT_COFFEE = "boozebrown")
/datum/robot_sprite/dogborg/service/booze/handle_extra_icon_updates(var/mob/living/silicon/robot/ourborg)
if(!("boozehound" in ourborg.sprite_extra_customization) || !ourborg.sprite_extra_customization["boozehound"])
+8 -8
View File
@@ -118,37 +118,37 @@
if( abs(Environment.temperature - bodytemperature) > temperature_range ) //VOREStation Edit: heating adjustments
bodytemperature += ((Environment.temperature - bodytemperature) / 5)
if(min_oxy && Environment.gas["oxygen"] < min_oxy)
if(min_oxy && Environment.gas[GAS_O2] < min_oxy)
atmos_unsuitable = 1
throw_alert("oxy", /obj/screen/alert/not_enough_oxy)
else if(max_oxy && Environment.gas["oxygen"] > max_oxy)
else if(max_oxy && Environment.gas[GAS_O2] > max_oxy)
atmos_unsuitable = 1
throw_alert("oxy", /obj/screen/alert/too_much_oxy)
else
clear_alert("oxy")
if(min_tox && Environment.gas["phoron"] < min_tox)
if(min_tox && Environment.gas[GAS_PHORON] < min_tox)
atmos_unsuitable = 2
throw_alert("tox_in_air", /obj/screen/alert/not_enough_tox)
else if(max_tox && Environment.gas["phoron"] > max_tox)
else if(max_tox && Environment.gas[GAS_PHORON] > max_tox)
atmos_unsuitable = 2
throw_alert("tox_in_air", /obj/screen/alert/tox_in_air)
else
clear_alert("tox_in_air")
if(min_n2 && Environment.gas["nitrogen"] < min_n2)
if(min_n2 && Environment.gas[GAS_N2] < min_n2)
atmos_unsuitable = 1
throw_alert("n2o", /obj/screen/alert/not_enough_nitro)
else if(max_n2 && Environment.gas["nitrogen"] > max_n2)
else if(max_n2 && Environment.gas[GAS_N2] > max_n2)
atmos_unsuitable = 1
throw_alert("n2o", /obj/screen/alert/too_much_nitro)
else
clear_alert("n2o")
if(min_co2 && Environment.gas["carbon_dioxide"] < min_co2)
if(min_co2 && Environment.gas[GAS_CO2] < min_co2)
atmos_unsuitable = 1
throw_alert("co2", /obj/screen/alert/not_enough_co2)
else if(max_co2 && Environment.gas["carbon_dioxide"] > max_co2)
else if(max_co2 && Environment.gas[GAS_CO2] > max_co2)
atmos_unsuitable = 1
throw_alert("co2", /obj/screen/alert/too_much_co2)
else
@@ -161,9 +161,9 @@
return
to_chat(user, span_notice("\The [src] seems too full to eat."))
return
var/nutriment_amount = O.reagents?.get_reagent_amount("nutriment") //does it have nutriment, if so how much?
var/protein_amount = O.reagents?.get_reagent_amount("protein") //does it have protein, if so how much?
var/glucose_amount = O.reagents?.get_reagent_amount("glucose") //does it have glucose, if so how much?
var/nutriment_amount = O.reagents?.get_reagent_amount(REAGENT_ID_NUTRIMENT) //does it have nutriment, if so how much?
var/protein_amount = O.reagents?.get_reagent_amount(REAGENT_ID_PROTEIN) //does it have protein, if so how much?
var/glucose_amount = O.reagents?.get_reagent_amount(REAGENT_ID_GLUCOSE) //does it have glucose, if so how much?
var/yum = nutriment_amount + protein_amount + glucose_amount
if(yum)
yum = (yum * 20) / 3
@@ -168,4 +168,4 @@ GLOBAL_VAR_INIT(jellyfish_count, 0)
/obj/item/reagent_containers/food/snacks/jellyfishcore/Initialize()
nutriment_amt += inherited_nutriment
. = ..()
reagents.add_reagent("nutriment", nutriment_amt, nutriment_desc)
reagents.add_reagent(REAGENT_ID_NUTRIMENT, nutriment_amt, nutriment_desc)
@@ -1437,7 +1437,7 @@
water_state = "enzyme_shallow"
under_state = "flesh_floor"
reagent_type = "Sulphuric acid" //why not
reagent_type = REAGENT_ID_SACID //why not
outdoors = FALSE
var/mob/living/simple_mob/vore/overmap/stardog/linked_mob
var/mobstuff = TRUE //if false, we don't care about dogs, and that's terrible
@@ -512,9 +512,9 @@ GLOBAL_VAR_INIT(teppi_count, 0) // How mant teppi DO we have?
if(nutrition >= 5000)
user.visible_message(span_notice("\The [user] tries to feed \the [O] to \the [src]. It snoofs but does not eat."),span_notice("You try to feed \the [O] to \the [src], but it only snoofts at it."))
return
var/nutriment_amount = O.reagents?.get_reagent_amount("nutriment") //does it have nutriment, if so how much?
var/protein_amount = O.reagents?.get_reagent_amount("protein") //does it have protein, if so how much?
var/glucose_amount = O.reagents?.get_reagent_amount("glucose") //does it have glucose, if so how much?
var/nutriment_amount = O.reagents?.get_reagent_amount(REAGENT_ID_NUTRIMENT) //does it have nutriment, if so how much?
var/protein_amount = O.reagents?.get_reagent_amount(REAGENT_ID_PROTEIN) //does it have protein, if so how much?
var/glucose_amount = O.reagents?.get_reagent_amount(REAGENT_ID_GLUCOSE) //does it have glucose, if so how much?
var/yum = nutriment_amount + protein_amount + glucose_amount
if(yum)
if(!teppi_adult)
@@ -70,7 +70,7 @@
/mob/living/simple_mob/animal/borer/handle_special()
if(host && !stat && !host.stat)
// Handle docility.
if(host.reagents.has_reagent("sugar") && !docile)
if(host.reagents.has_reagent(REAGENT_ID_SUGAR) && !docile)
var/message = "You feel the soporific flow of sugar in your host's blood, lulling you into docility."
var/target = controlling ? host : src
to_chat(target, span_warning(message))
@@ -218,7 +218,7 @@
if(chemicals < 50)
to_chat(src, span_warning("You don't have enough chemicals!"))
var/chem = tgui_input_list(usr, "Select a chemical to secrete.", "Chemicals", list("alkysine","bicaridine","hyperzine","tramadol"))
var/chem = tgui_input_list(usr, "Select a chemical to secrete.", "Chemicals", list(REAGENT_ID_ALKYSINE,REAGENT_ID_BICARIDINE,REAGENT_ID_HYPERZINE,REAGENT_ID_TRAMADOL))
if(!chem || chemicals < 50 || !host || controlling || !src || stat) //Sanity check.
return
@@ -50,7 +50,7 @@ GLOBAL_VAR_INIT(chicken_count, 0) // How mant chickens DO we have?
/mob/living/simple_mob/animal/passive/chicken/attackby(var/obj/item/O as obj, var/mob/user as mob)
if(istype(O, /obj/item/reagent_containers/food/snacks/grown)) //feedin' dem chickens
var/obj/item/reagent_containers/food/snacks/grown/G = O
if(G.seed && G.seed.kitchen_tag == "wheat")
if(G.seed && G.seed.kitchen_tag == PLANT_WHEAT)
if(!stat && eggsleft < 8)
user.visible_message(span_blue("[user] feeds [O] to [name]! It clucks happily."),span_blue("You feed [O] to [name]! It clucks happily."))
user.drop_item()
@@ -33,7 +33,7 @@
var/obj/item/reagent_containers/glass/G = O
if(stat == CONSCIOUS && istype(G) && G.is_open_container())
user.visible_message(span_notice("[user] milks [src] using \the [O]."))
var/transfered = udder.trans_id_to(G, "milk", rand(5,10))
var/transfered = udder.trans_id_to(G, REAGENT_ID_MILK, rand(5,10))
if(G.reagents.total_volume >= G.volume)
to_chat(user, span_red("The [O] is full."))
if(!transfered)
@@ -45,7 +45,7 @@
. = ..()
if(stat == CONSCIOUS)
if(udder && prob(5))
udder.add_reagent("milk", rand(5, 10))
udder.add_reagent(REAGENT_ID_MILK, rand(5, 10))
/mob/living/simple_mob/animal/passive/cow/attack_hand(mob/living/carbon/M as mob)
if(!stat && M.a_intent == I_DISARM && icon_state != icon_dead)
@@ -37,7 +37,7 @@
if(.)
if(stat == CONSCIOUS)
if(udder && prob(5))
udder.add_reagent("milk", rand(5, 10))
udder.add_reagent(REAGENT_ID_MILK, rand(5, 10))
if(locate(/obj/effect/plant) in loc)
var/obj/effect/plant/SV = locate() in loc
@@ -64,7 +64,7 @@
var/obj/item/reagent_containers/glass/G = O
if(stat == CONSCIOUS && istype(G) && G.is_open_container())
user.visible_message(span_notice("[user] milks [src] using \the [O]."))
var/transfered = udder.trans_id_to(G, "milk", rand(5,10))
var/transfered = udder.trans_id_to(G, REAGENT_ID_MILK, rand(5,10))
if(G.reagents.total_volume >= G.volume)
to_chat(user, span_red("The [O] is full."))
if(!transfered)
@@ -109,7 +109,7 @@
/obj/item/reagent_containers/food/snacks/meat = 20
)
var/poison_type = "spidertoxin" // The reagent that gets injected when it attacks.
var/poison_type = REAGENT_ID_SPIDERTOXIN // The reagent that gets injected when it attacks.
var/poison_chance = 10 // Chance for injection to occur.
var/poison_per_bite = 5 // Amount added per injection.
@@ -59,7 +59,7 @@
special_attack_cooldown = 6 SECONDS
ai_holder_type = /datum/ai_holder/simple_mob/intentional/giant_spider_broodmother
poison_per_bite = 2
poison_type = "cyanide"
poison_type = REAGENT_ID_CYANIDE
loot_list = list(/obj/item/royal_spider_egg = 100)
@@ -27,7 +27,7 @@
melee_damage_upper = 25
poison_per_bite = 3
poison_type = "chloralhydrate"
poison_type = REAGENT_ID_CHLORALHYDRATE
movement_cooldown = 2
@@ -39,7 +39,7 @@
poison_chance = 15
poison_per_bite = 3
poison_type = "stimm"
poison_type = REAGENT_ID_STIMM
shock_resist = 0.75
@@ -27,7 +27,7 @@
health = 175
poison_per_bite = 5
poison_type = "cryotoxin"
poison_type = REAGENT_ID_CRYOTOXIN
heat_resist = -0.50
cold_resist = 0.75
@@ -24,7 +24,7 @@
poison_chance = 15
poison_per_bite = 2
poison_type = "psilocybin"
poison_type = REAGENT_ID_PSILOCYBIN
ai_holder_type = /datum/ai_holder/simple_mob/ranged/electric_spider
@@ -62,4 +62,4 @@
can_lay_eggs = FALSE
/mob/living/simple_mob/animal/giant_spider/nurse/queen/eggless
can_lay_eggs = FALSE
can_lay_eggs = FALSE
@@ -38,7 +38,7 @@
melee_damage_lower = 10
melee_damage_upper = 10
poison_chance = 30
poison_type = "cryptobiolin"
poison_type = REAGENT_ID_CRYPTOBIOLIN
poison_per_bite = 1
player_msg = "You have an imperfect, but automatic stealth. If you attack something while 'hidden', then \
@@ -38,7 +38,7 @@
melee_damage_lower = 5 // Doesn't do a lot of damage, since the goal is to make more spiders with egg attacks.
melee_damage_upper = 10
poison_per_bite = 5
poison_type = "stoxin"
poison_type = REAGENT_ID_STOXIN
player_msg = "You can spin webs on an adjacent tile, or cocoon an object by clicking on it.<br>\
You can also cocoon a dying or dead entity by clicking on them, and you will gain charges for egg-laying.<br>\
@@ -27,8 +27,8 @@
poison_chance = 20
poison_per_bite = 5
poison_type = "condensedcapsaicin_v"
poison_type = REAGENT_ID_CONDENSEDCAPSAICINV
/mob/living/simple_mob/animal/giant_spider/pepper/Initialize()
adjust_scale(1.1)
return ..()
return ..()
@@ -43,7 +43,7 @@
poison_chance = 30
poison_per_bite = 0.5
poison_type = "phoron"
poison_type = REAGENT_ID_PHORON
tame_items = list(
/obj/item/tank/phoron = 20,
@@ -35,4 +35,4 @@
poison_chance = 30
poison_per_bite = 1
poison_type = "thermite_v"
poison_type = REAGENT_ID_THERMITEV
@@ -40,7 +40,7 @@
poison_chance = 15
poison_per_bite = 3
poison_type = "serotrotium_v"
poison_type = REAGENT_ID_SEROTROTIUMV
// ai_holder_type = /datum/ai_holder/simple_mob/melee/tunneler
@@ -34,7 +34,7 @@
melee_damage_lower = 8
melee_damage_upper = 15
poison_per_bite = 2
poison_type = "psilocybin"
poison_type = REAGENT_ID_PSILOCYBIN
player_msg = "You can fire a ranged attack by clicking on an enemy or tile at a distance."
ai_holder_type = /datum/ai_holder/simple_mob/ranged
@@ -57,4 +57,4 @@
return
B.old_style_target(A, src)
B.fire()
set_AI_busy(FALSE)
set_AI_busy(FALSE)
@@ -7,8 +7,8 @@
/mob/living/simple_mob/animal/passive/fish/koi/poisonous/Initialize()
. = ..()
create_reagents(60)
reagents.add_reagent("toxin", 45)
reagents.add_reagent("impedrezene", 15)
reagents.add_reagent(REAGENT_ID_TOXIN, 45)
reagents.add_reagent(REAGENT_ID_IMPEDREZENE, 15)
/mob/living/simple_mob/animal/passive/fish/koi/poisonous/Life()
..()
@@ -56,8 +56,8 @@
/mob/living/simple_mob/animal/passive/fish/koi/poisonous/proc/sting(var/mob/living/M)
if(!M.reagents)
return 0
M.reagents.add_reagent("toxin", 2)
M.reagents.add_reagent("impedrezene", 1)
M.reagents.add_reagent(REAGENT_ID_TOXIN, 2)
M.reagents.add_reagent(REAGENT_ID_IMPEDREZENE, 1)
return 1
/mob/living/simple_mob/animal/passive/fish/measelshark
@@ -96,7 +96,7 @@
if(istype(O, /obj/item/reagent_containers/food/snacks/grown))
var/obj/item/reagent_containers/food/snacks/grown/G = O
if(G.seed && G.seed.kitchen_tag == "berries")
if(G.seed && G.seed.kitchen_tag == PLANT_BERRIES)
return TRUE
return FALSE
@@ -493,7 +493,7 @@ var/global/list/wounds_being_tended_by_drakes = list()
for(var/obj/item/organ/external/E in H.organs)
if(E.status & ORGAN_BLEEDING)
E.organ_clamp()
H.bloodstr.add_reagent("sifsap", rand(1,2))
H.bloodstr.add_reagent(REAGENT_ID_SIFSAP, rand(1,2))
for(var/datum/wound/W in E.wounds)
W.salve()
W.disinfect()
@@ -49,9 +49,9 @@
var/list/bodypart_targets = list(BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_TORSO,BP_GROIN,BP_HEAD)
var/infest_target = BP_TORSO // The currently chosen bodypart to infest.
var/mob/living/carbon/host // Our humble host.
var/list/produceable_chemicals = list("inaprovaline","anti_toxin","alkysine","bicaridine","tramadol","kelotane","leporazine","iron","phoron","condensedcapsaicin_v","frostoil")
var/randomized_reagent = "iron" // The reagent chosen at random to be produced, if there's no one piloting the worm.
var/passive_reagent = "paracetamol" // Reagent passively produced by the leech. Should usually be a painkiller.
var/list/produceable_chemicals = list(REAGENT_ID_INAPROVALINE,REAGENT_ID_ANTITOXIN,REAGENT_ID_ALKYSINE,REAGENT_ID_BICARIDINE,REAGENT_ID_TRAMADOL,REAGENT_ID_KELOTANE,REAGENT_ID_LEPORAZINE,REAGENT_ID_IRON,REAGENT_ID_PHORON,REAGENT_ID_CONDENSEDCAPSAICINV,REAGENT_ID_FROSTOIL)
var/randomized_reagent = REAGENT_ID_IRON // The reagent chosen at random to be produced, if there's no one piloting the worm.
var/passive_reagent = REAGENT_ID_PARACETAMOL // Reagent passively produced by the leech. Should usually be a painkiller.
var/feeding_delay = 30 SECONDS // How long do we have to wait to bite our host's organs?
var/last_feeding = 0
@@ -159,7 +159,7 @@
ai_holder.hostile = FALSE
ai_holder.lose_target()
alpha = 5
if(host.reagents.has_reagent("cordradaxon") && !docile) // Overwhelms the leech with food.
if(host.reagents.has_reagent(REAGENT_ID_CORDRADAXON) && !docile) // Overwhelms the leech with food.
var/message = "We feel the rush of cardiac pluripotent cells in your host's blood, lulling us into docility."
to_chat(src, span_warning(message))
docile = TRUE
@@ -178,32 +178,32 @@
if(!docile && ishuman(host) && chemicals < max_chemicals)
var/mob/living/carbon/human/H = host
H.remove_blood(1)
if(!H.reagents.has_reagent("inaprovaline"))
H.reagents.add_reagent("inaprovaline", 1)
if(!H.reagents.has_reagent(REAGENT_ID_INAPROVALINE))
H.reagents.add_reagent(REAGENT_ID_INAPROVALINE, 1)
chemicals += 2
if(!client && !docile) // Automatic 'AI' to manage damage levels.
if(host.getBruteLoss() >= 30 && chemicals > 50)
host.reagents.add_reagent("bicaridine", 5)
host.reagents.add_reagent(REAGENT_ID_BICARIDINE, 5)
chemicals -= 30
if(host.getToxLoss() >= 30 && chemicals > 50)
var/randomchem = pickweight(list("tramadol" = 7, "anti_toxin" = 15, "frostoil" = 3))
var/randomchem = pickweight(list(REAGENT_ID_TRAMADOL = 7, REAGENT_ID_ANTITOXIN = 15, REAGENT_ID_FROSTOIL = 3))
host.reagents.add_reagent(randomchem, 5)
chemicals -= 50
if(host.getFireLoss() >= 30 && chemicals > 50)
host.reagents.add_reagent("kelotane", 5)
host.reagents.add_reagent("leporazine", 2)
host.reagents.add_reagent(REAGENT_ID_KELOTANE, 5)
host.reagents.add_reagent(REAGENT_ID_LEPORAZINE, 2)
chemicals -= 50
if(host.getOxyLoss() >= 30 && chemicals > 50)
host.reagents.add_reagent("iron", 10)
host.reagents.add_reagent(REAGENT_ID_IRON, 10)
chemicals -= 40
if(host.getBrainLoss() >= 10 && chemicals > 100)
host.reagents.add_reagent("alkysine", 5)
host.reagents.add_reagent("tramadol", 3)
host.reagents.add_reagent(REAGENT_ID_ALKYSINE, 5)
host.reagents.add_reagent(REAGENT_ID_TRAMADOL, 3)
chemicals -= 100
if(prob(30) && chemicals > 50)
@@ -158,7 +158,7 @@
icon = 'icons/mob/snake_vr.dmi'
icon_state = "snack_yellow"
nutriment_amt = 1
nutriment_desc = list("sugar" = 1)
nutriment_desc = list(REAGENT_ID_SUGAR = 1)
/obj/item/reagent_containers/food/snacks/snakesnack/Initialize()
. = ..()
@@ -166,7 +166,7 @@
snack_colour = pick( list("yellow","green","pink","blue") )
icon_state = "snack_[snack_colour]"
desc = "A little mouse treat made of coloured sugar. Noodle loves these! This one is [snack_colour]."
reagents.add_reagent("sugar", 2)
reagents.add_reagent(REAGENT_ID_SUGAR, 2)
/obj/item/storage/box/snakesnackbox
name = "box of Snake Snax"
@@ -47,7 +47,7 @@
var/poison_chance = 100
var/poison_per_bite = 10
var/poison_type = "expired_medicine"
var/poison_type = REAGENT_ID_EXPIREDMEDICINE
/datum/say_list/disbot
speak = list("ATTEMPTING TO CONTACT A.R.K, ATTEMPT 1e26+3","DIRT SAMPLE COLLECTED, DIRT QUOTA 124871/155 CONFIRMED.")
@@ -1,5 +1,5 @@
/mob/living/simple_mob/tomato
name = "tomato"
name = PLANT_TOMATO
desc = "It's a horrifyingly enormous beef tomato, and it's packing extra beef!"
tt_desc = "X Solanum abominable"
icon_state = "tomato"
@@ -8,7 +8,7 @@
color = "#CC23FF"
slime_color = "purple"
coretype = /obj/item/slime_extract/purple
reagent_injected = "toxin"
reagent_injected = REAGENT_ID_TOXIN
description_info = "This slime spreads a toxin when it attacks. A biosuit or other thick armor can protect from the toxic attack."
player_msg = "You <b>inject a harmful toxin</b> when attacking."
@@ -57,7 +57,7 @@
color = "#19FFFF"
slime_color = "blue"
coretype = /obj/item/slime_extract/blue
reagent_injected = "cryotoxin"
reagent_injected = REAGENT_ID_CRYOTOXIN
cold_resist = 0.50 // Not as strong as dark blue, which has immunity.
description_info = "The slime is resistant to the cold, and attacks from this slime can inject cryotoxin into you. \
@@ -173,7 +173,7 @@
color = "#660088"
slime_color = "dark purple"
coretype = /obj/item/slime_extract/dark_purple
reagent_injected = "phoron"
reagent_injected = REAGENT_ID_PHORON
description_info = "This slime applies phoron to enemies it attacks. A biosuit or other thick armor can protect from the toxic attack. \
If hit with a burning attack, it will erupt in flames."
@@ -190,7 +190,7 @@
/mob/living/simple_mob/slime/xenobio/dark_purple/proc/ignite()
visible_message(span_critical("\The [src] erupts in an inferno!"))
for(var/turf/simulated/target_turf in view(2, src))
target_turf.assume_gas("phoron", 30, 1500+T0C)
target_turf.assume_gas(GAS_PHORON, 30, 1500+T0C)
spawn(0)
target_turf.hotspot_expose(1500+T0C, 400)
qdel(src)
@@ -509,7 +509,7 @@
slime_color = "green"
coretype = /obj/item/slime_extract/green
glow_toggle = TRUE
reagent_injected = "radium"
reagent_injected = REAGENT_ID_RADIUM
var/rads = 25
description_info = "This slime will irradiate anything nearby passively, and will inject radium on attack. \
@@ -40,7 +40,7 @@
faction = FACTION_BEE
var/poison_type = "spidertoxin" // The reagent that gets injected when it attacks, can be changed to different toxin.
var/poison_type = REAGENT_ID_SPIDERTOXIN // The reagent that gets injected when it attacks, can be changed to different toxin.
var/poison_chance = 10 // Chance for injection to occur.
var/poison_per_bite = 1 // Amount added per injection.
@@ -1007,7 +1007,7 @@ I think I covered everything.
//Alternatively bully a coder (me) to make a unique digest_mode for mob healbellies that prevents death, or something.
if(istype(A, /mob/living/carbon/human))
var/mob/living/carbon/human/P = L
var/list/to_inject = list("myelamine","osteodaxon","spaceacillin","peridaxon", "iron", "hyronalin")
var/list/to_inject = list(REAGENT_ID_MYELAMINE,REAGENT_ID_OSTEODAXON,REAGENT_ID_SPACEACILLIN,REAGENT_ID_PERIDAXON, REAGENT_ID_IRON, REAGENT_ID_HYRONALIN)
//Lets not OD them...
for(var/RG in to_inject)
if(!P.reagents.has_reagent(RG))
@@ -52,7 +52,7 @@
say_list_type = /datum/say_list/oregrub
var/poison_per_bite = 2.5
var/poison_type = "thermite_v" //burn baby burn
var/poison_type = REAGENT_ID_THERMITEV //burn baby burn
var/poison_chance = 50
var/min_ore = 4
@@ -44,7 +44,7 @@ List of things solar grubs should be able to do:
say_list_type = /datum/say_list/solargrub
var/poison_per_bite = 5 //grubs cause a shock when they bite someone
var/poison_type = "shockchem"
var/poison_type = REAGENT_ID_SHOCKCHEM
var/poison_chance = 50
var/datum/powernet/PN // Our powernet
var/obj/structure/cable/attached // the attached cable