From 6a0cb72b6ac30531b6e32876ba8c009caf848ab9 Mon Sep 17 00:00:00 2001
From: shellspeed1 <46614774+shellspeed1@users.noreply.github.com>
Date: Tue, 15 Oct 2019 11:59:46 -0700
Subject: [PATCH] error fixing
---
code/_globalvars/bitfields.dm | 1 -
code/game/objects/items/devices/scanners.dm | 30 +--
code/modules/mob/living/brain/MMI.dm | 2 +-
code/modules/mob/living/brain/brain_item.dm | 2 +-
.../modules/mob/living/carbon/damage_procs.dm | 7 +-
.../mob/living/carbon/human/species.dm | 252 ++----------------
.../carbon/human/species_types/mothmen.dm | 1 -
code/modules/mob/living/damage_procs.dm | 1 +
.../chemistry/reagents/alcohol_reagents.dm | 51 +---
.../chemistry/reagents/other_reagents.dm | 236 ++++------------
.../reagents/chemistry/reagents/MKUltra.dm | 12 +-
.../reagents/chemistry/reagents/SDGF.dm | 42 ++-
.../chemistry/reagents/fermi_reagents.dm | 99 +++++--
.../modules/vore/resizing/sizechemicals.dm | 2 +-
14 files changed, 195 insertions(+), 543 deletions(-)
diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm
index 8a2bbf82..b5cd75a5 100644
--- a/code/_globalvars/bitfields.dm
+++ b/code/_globalvars/bitfields.dm
@@ -177,7 +177,6 @@ GLOBAL_LIST_INIT(bitfields, list(
"CAN_CARRY" = CAN_CARRY,
"CAN_RESIST" = CAN_RESIST
),
- ))
"organ_flags" = list(
"ORGAN_SYNTHETIC" = ORGAN_SYNTHETIC,
diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index 81bd44ca..5bc03ab5 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -189,7 +189,6 @@ SLIME SCANNER
if(Br)
if(Br.cached_size>5)
msg += "\tSubject has a sizeable bosom with a [Br.size] cup.\n"
-
if (M.getOrganLoss(ORGAN_SLOT_BRAIN) >= 200 || !M.getorgan(/obj/item/organ/brain))
msg += "\tSubject's brain function is non-existent.\n"
else if (M.getOrganLoss(ORGAN_SLOT_BRAIN) >= 120)
@@ -198,6 +197,7 @@ SLIME SCANNER
msg += "\tBrain damage detected.\n"
if(iscarbon(M))
+
var/mob/living/carbon/C = M
if(LAZYLEN(C.get_traumas()))
var/list/trauma_text = list()
@@ -219,7 +219,8 @@ SLIME SCANNER
msg += "\tBrain Activity Level: [(200 - M.getOrganLoss(ORGAN_SLOT_BRAIN))/2]%.\n"
if(M.radiation)
msg += "\tSubject is irradiated.\n"
- msg += "\tRadiation Level: [M.radiation] rad\n"
+ if(advanced)
+ msg += "\tRadiation Level: [M.radiation]%.\n"
if(advanced && M.hallucinating())
msg += "\tSubject is hallucinating.\n"
@@ -300,7 +301,7 @@ SLIME SCANNER
for(var/obj/item/bodypart/org in damaged)
msg += "\t\t[capitalize(org.name)]: [(org.brute_dam > 0) ? "[org.brute_dam]" : "0"]-[(org.burn_dam > 0) ? "[org.burn_dam]" : "0"]\n"
- //Organ damages report
+//Organ damages report
if(ishuman(M))
var/mob/living/carbon/human/H = M
var/minor_damage
@@ -353,7 +354,6 @@ SLIME SCANNER
msg += "[major_damage]"
msg += "[max_damage]"
-
// Species and body temperature
if(ishuman(M))
var/mob/living/carbon/human/H = M
@@ -441,7 +441,7 @@ SLIME SCANNER
if(M.reagents.reagent_list.len)
var/list/datum/reagent/reagents = list()
for(var/datum/reagent/R in M.reagents.reagent_list)
- if(R.chemical_flags & REAGENT_INVISIBLE)
+ if(R.invisible)
continue
reagents += R
@@ -460,21 +460,6 @@ SLIME SCANNER
msg += "[R.name]\n"
else
msg += "Subject is not addicted to any reagents.\n"
-
- if(M.reagents.has_reagent("fermiTox"))
- var/datum/reagent/fermiTox = M.reagents.has_reagent("fermiTox")
- switch(fermiTox.volume)
- if(5 to 10)
- msg += "Subject contains a low amount of toxic isomers.\n"
- if(10 to 25)
- msg += "Subject contains toxic isomers.\n"
- if(25 to 50)
- msg += "Subject contains a substantial amount of toxic isomers.\n"
- if(50 to 95)
- msg += "Subject contains a high amount of toxic isomers.\n"
- if(95 to INFINITY)
- msg += "Subject contains a extremely dangerous amount of toxic isomers.\n"
-
msg += "*---------*"
to_chat(user, msg)
@@ -683,10 +668,9 @@ SLIME SCANNER
to_chat(user, "[target] is empty!")
if(cached_scan_results && cached_scan_results["fusion"]) //notify the user if a fusion reaction was detected
- var/fusion_power = round(cached_scan_results["fusion"], 0.01)
- var/tier = fusionpower2text(fusion_power)
+ var/instability = round(cached_scan_results["fusion"], 0.01)
to_chat(user, "Large amounts of free neutrons detected in the air indicate that a fusion reaction took place.")
- to_chat(user, "Power of the last fusion reaction: [fusion_power]\n This power indicates it was a [tier]-tier fusion reaction.")
+ to_chat(user, "Instability of the last fusion reaction: [instability].")
return
//slime scanner
diff --git a/code/modules/mob/living/brain/MMI.dm b/code/modules/mob/living/brain/MMI.dm
index 47f44bca..d84ba0d7 100644
--- a/code/modules/mob/living/brain/MMI.dm
+++ b/code/modules/mob/living/brain/MMI.dm
@@ -57,7 +57,7 @@
newbrain.brainmob = null
brainmob.forceMove(src)
brainmob.container = src
- if(!(newbrain.organ_flags & ORGAN_FAILING)) // the brain organ hasn't been beaten to death.
+ if(!(newbrain.organ_flags & ORGAN_FAILING)) // the brain organ hasn't been beaten to death.
brainmob.stat = CONSCIOUS //we manually revive the brain mob
GLOB.dead_mob_list -= brainmob
GLOB.alive_mob_list += brainmob
diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm
index 41a89440..17f81981 100644
--- a/code/modules/mob/living/brain/brain_item.dm
+++ b/code/modules/mob/living/brain/brain_item.dm
@@ -42,7 +42,7 @@
if(brainmob.mind)
brainmob.mind.transfer_to(C)
else
- brainmob.transfer_ckey(C)
+ C.key = brainmob.key
QDEL_NULL(brainmob)
diff --git a/code/modules/mob/living/carbon/damage_procs.dm b/code/modules/mob/living/carbon/damage_procs.dm
index 219c5ba7..cc0c0d74 100644
--- a/code/modules/mob/living/carbon/damage_procs.dm
+++ b/code/modules/mob/living/carbon/damage_procs.dm
@@ -40,13 +40,13 @@
update_damage_overlays()
else
adjustStaminaLoss(damage * hit_percent)
- if(BRAIN)
- adjustBrainLoss(damage * hit_percent)
//citadel code
if(AROUSAL)
adjustArousalLoss(damage * hit_percent)
return TRUE
+
+
//These procs fetch a cumulative total damage from all bodyparts
/mob/living/carbon/getBruteLoss()
var/amount = 0
@@ -62,6 +62,7 @@
amount += BP.burn_dam
return amount
+
/mob/living/carbon/adjustBruteLoss(amount, updating_health = TRUE, forced = FALSE)
if(!forced && (status_flags & GODMODE))
return FALSE
@@ -155,6 +156,7 @@
O.applyOrganDamage(amount, maximum)
O.onDamage(amount, maximum)
+
////////////////////////////////////////////
//Returns a list of damaged bodyparts
@@ -296,3 +298,4 @@
if(B)
var/adjusted_amount = amount - B.get_brain_damage()
B.adjust_brain_damage(adjusted_amount, null)
+*/
diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm
index 01f7ecb6..33b419de 100644
--- a/code/modules/mob/living/carbon/human/species.dm
+++ b/code/modules/mob/living/carbon/human/species.dm
@@ -1,7 +1,6 @@
// This code handles different species in the game.
GLOBAL_LIST_EMPTY(roundstart_races)
-GLOBAL_LIST_EMPTY(roundstart_race_names)
/datum/species
var/id // if the game needs to manually check your race to do something not included in a proc here, it will use this
@@ -9,35 +8,13 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
var/name // this is the fluff name. these will be left generic (such as 'Lizardperson' for the lizard race) so servers can change them to whatever
var/default_color = "#FFF" // if alien colors are disabled, this is the color that will be used by that race
- var/sexes = 1 // whether or not the race has sexual characteristics. at the moment this is only 0 for skeletons and shadows
+ var/sexes = 1 // whether or not the race has sexual characteristics. at the moment this is only 0 for skeletons and shadows
- //Species Icon Drawing Offsets - Pixel X, Pixel Y, Aka X = Horizontal and Y = Vertical, from bottom left corner
- var/list/offset_features = list(
- OFFSET_UNIFORM = list(0,0),
- OFFSET_ID = list(0,0),
- OFFSET_GLOVES = list(0,0),
- OFFSET_GLASSES = list(0,0),
- OFFSET_EARS = list(0,0),
- OFFSET_SHOES = list(0,0),
- OFFSET_S_STORE = list(0,0),
- OFFSET_FACEMASK = list(0,0),
- OFFSET_HEAD = list(0,0),
- OFFSET_EYES = list(0,0),
- OFFSET_LIPS = list(0,0),
- OFFSET_BELT = list(0,0),
- OFFSET_BACK = list(0,0),
- OFFSET_HAIR = list(0,0),
- OFFSET_FHAIR = list(0,0),
- OFFSET_SUIT = list(0,0),
- OFFSET_NECK = list(0,0),
- OFFSET_MUTPARTS = list(0,0)
- )
+ var/list/offset_features = list(OFFSET_UNIFORM = list(0,0), OFFSET_ID = list(0,0), OFFSET_GLOVES = list(0,0), OFFSET_GLASSES = list(0,0), OFFSET_EARS = list(0,0), OFFSET_SHOES = list(0,0), OFFSET_S_STORE = list(0,0), OFFSET_FACEMASK = list(0,0), OFFSET_HEAD = list(0,0), OFFSET_FACE = list(0,0), OFFSET_BELT = list(0,0), OFFSET_BACK = list(0,0), OFFSET_SUIT = list(0,0), OFFSET_NECK = list(0,0))
var/hair_color // this allows races to have specific hair colors... if null, it uses the H's hair/facial hair colors. if "mutcolor", it uses the H's mutant_color
var/hair_alpha = 255 // the alpha used by the hair. 255 is completely solid, 0 is transparent.
- var/horn_color //specific horn colors, because why not?
-
var/use_skintones = 0 // does it use skintones or not? (spoiler alert this is only used by humans)
var/exotic_blood = "" // If your race wants to bleed something other than bog standard blood, change this to reagent id.
var/exotic_bloodtype = "" //If your race uses a non standard bloodtype (A+, O-, AB-, etc)
@@ -102,7 +79,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
var/fixed_mut_color3 = ""
var/whitelisted = 0 //Is this species restricted to certain players?
var/whitelist = list() //List the ckeys that can use this species, if it's whitelisted.: list("John Doe", "poopface666", "SeeALiggerPullTheTrigger") Spaces & capitalization can be included or ignored entirely for each key as it checks for both.
- var/should_draw_citadel = FALSE
+
///////////
// PROCS //
@@ -121,7 +98,6 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
var/datum/species/S = new I
if(S.check_roundstart_eligible())
GLOB.roundstart_races += S.id
- GLOB.roundstart_race_names["[S.name]"] = S.id
qdel(S)
if(!GLOB.roundstart_races.len)
GLOB.roundstart_races += "human"
@@ -153,10 +129,10 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
return
//Please override this locally if you want to define when what species qualifies for what rank if human authority is enforced.
-/datum/species/proc/qualifies_for_rank(rank, list/features) //SPECIES JOB RESTRICTIONS
- //if(rank in GLOB.command_positions) Left as an example: The format qualifies for rank takes.
- // return 0 //It returns false when it runs the proc so they don't get jobs from the global list.
- return 1 //It returns 1 to say they are a-okay to continue.
+/datum/species/proc/qualifies_for_rank(rank, list/features)
+ if(rank in GLOB.command_positions)
+ return 0
+ return 1
//Will regenerate missing organs
/datum/species/proc/regenerate_organs(mob/living/carbon/C,datum/species/old_species,replace_current=TRUE)
@@ -284,7 +260,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
C.hud_used.update_locked_slots()
// this needs to be FIRST because qdel calls update_body which checks if we have DIGITIGRADE legs or not and if not then removes DIGITIGRADE from species_traits
- if(("legs" in C.dna.species.mutant_bodyparts) && (C.dna.features["legs"] == "Digitigrade" || C.dna.features["legs"] == "Avian"))
+ if(("legs" in C.dna.species.mutant_bodyparts) && C.dna.features["legs"] == "Digitigrade Legs")
species_traits += DIGITIGRADE
if(DIGITIGRADE in species_traits)
C.Digitigrade_Leg_Swap(FALSE)
@@ -318,6 +294,8 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
for(var/datum/disease/A in C.diseases)
A.cure(FALSE)
+ SEND_SIGNAL(C, COMSIG_SPECIES_GAIN, src, old_species)
+
//CITADEL EDIT
if(NOAROUSAL in species_traits)
C.canbearoused = FALSE
@@ -328,11 +306,6 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
var/mob/living/carbon/human/H = C
if(NOGENITALS in H.dna.species.species_traits)
H.give_genitals(TRUE) //call the clean up proc to delete anything on the mob then return.
- if("meat_type" in default_features) //I can't believe it's come to the meat
- H.type_of_meat = GLOB.meat_types[H.dna.features["meat_type"]]
-
- SEND_SIGNAL(C, COMSIG_SPECIES_GAIN, src, old_species)
-
// EDIT ENDS
@@ -344,11 +317,6 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
for(var/X in inherent_traits)
REMOVE_TRAIT(C, X, SPECIES_TRAIT)
- if("meat_type" in default_features)
- C.type_of_meat = GLOB.meat_types[C.dna.features["meat_type"]]
- else
- C.type_of_meat = initial(meat)
-
SEND_SIGNAL(C, COMSIG_SPECIES_LOSS, src)
/datum/species/proc/handle_hair(mob/living/carbon/human/H, forced_colour)
@@ -421,10 +389,6 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
facial_overlay.alpha = hair_alpha
- if(OFFSET_FHAIR in H.dna.species.offset_features)
- facial_overlay.pixel_x += H.dna.species.offset_features[OFFSET_FHAIR][1]
- facial_overlay.pixel_y += H.dna.species.offset_features[OFFSET_FHAIR][2]
-
standing += facial_overlay
if(H.head)
@@ -482,11 +446,9 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
else
hair_overlay.color = forced_colour
hair_overlay.alpha = hair_alpha
-
- if(OFFSET_HAIR in H.dna.species.offset_features)
- hair_overlay.pixel_x += H.dna.species.offset_features[OFFSET_HAIR][1]
- hair_overlay.pixel_y += H.dna.species.offset_features[OFFSET_HAIR][2]
-
+ if(OFFSET_FACE in H.dna.species.offset_features)
+ hair_overlay.pixel_x += H.dna.species.offset_features[OFFSET_FACE][1]
+ hair_overlay.pixel_y += H.dna.species.offset_features[OFFSET_FACE][2]
if(hair_overlay.icon)
standing += hair_overlay
@@ -507,11 +469,9 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
if(H.lip_style && (LIPS in species_traits))
var/mutable_appearance/lip_overlay = mutable_appearance('icons/mob/human_face.dmi', "lips_[H.lip_style]", -BODY_LAYER)
lip_overlay.color = H.lip_color
-
- if(OFFSET_LIPS in H.dna.species.offset_features)
- lip_overlay.pixel_x += H.dna.species.offset_features[OFFSET_LIPS][1]
- lip_overlay.pixel_y += H.dna.species.offset_features[OFFSET_LIPS][2]
-
+ if(OFFSET_FACE in H.dna.species.offset_features)
+ lip_overlay.pixel_x += H.dna.species.offset_features[OFFSET_FACE][1]
+ lip_overlay.pixel_y += H.dna.species.offset_features[OFFSET_FACE][2]
standing += lip_overlay
// eyes
@@ -524,11 +484,9 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
eye_overlay = mutable_appearance('icons/mob/human_face.dmi', "eyes", -BODY_LAYER)
if((EYECOLOR in species_traits) && has_eyes)
eye_overlay.color = "#" + H.eye_color
-
- if(OFFSET_EYES in H.dna.species.offset_features)
- eye_overlay.pixel_x += H.dna.species.offset_features[OFFSET_EYES][1]
- eye_overlay.pixel_y += H.dna.species.offset_features[OFFSET_EYES][2]
-
+ if(OFFSET_FACE in H.dna.species.offset_features)
+ eye_overlay.pixel_x += H.dna.species.offset_features[OFFSET_FACE][1]
+ eye_overlay.pixel_y += H.dna.species.offset_features[OFFSET_FACE][2]
standing += eye_overlay
//Underwear, Undershirts & Socks
@@ -571,7 +529,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
var/digilegs = (DIGITIGRADE in species_traits) ? "_d" : ""
var/mutable_appearance/MA = mutable_appearance(S.icon, "[S.icon_state][digilegs]", -BODY_LAYER)
if(UNDIE_COLORABLE(S))
- MA.color = "#[H.socks_color]"
+ MA.color = "[H.socks_color]"
standing += MA
if(standing.len)
@@ -654,10 +612,6 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
else if ("wings" in mutant_bodyparts)
bodyparts_to_add -= "wings_open"
- if("insect_fluff" in mutant_bodyparts)
- if(!H.dna.features["insect_fluff"] || H.dna.features["insect_fluff"] == "None" || H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT))
- bodyparts_to_add -= "insect_fluff"
-
//CITADEL EDIT
//Race specific bodyparts:
//Xenos
@@ -761,14 +715,12 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
S = GLOB.wings_list[H.dna.features["wings"]]
if("wingsopen")
S = GLOB.wings_open_list[H.dna.features["wings"]]
- if("deco_wings")
- S = GLOB.deco_wings_list[H.dna.features["deco_wings"]]
if("legs")
S = GLOB.legs_list[H.dna.features["legs"]]
- if("insect_wings")
- S = GLOB.insect_wings_list[H.dna.features["insect_wings"]]
- if("insect_fluff")
- S = GLOB.insect_fluffs_list[H.dna.features["insect_fluff"]]
+ if("moth_wings")
+ S = GLOB.moth_wings_list[H.dna.features["moth_wings"]]
+ if("moth_markings")
+ S = GLOB.moth_markings_list[H.dna.features["moth_markings"]]
if("caps")
S = GLOB.caps_list[H.dna.features["caps"]]
if("ipc_screen")
@@ -865,8 +817,6 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
accessory_overlay.color = "#[H.facial_hair_color]"
if(EYECOLOR)
accessory_overlay.color = "#[H.eye_color]"
- if(HORNCOLOR)
- accessory_overlay.color = "#[H.horn_color]"
else
accessory_overlay.color = forced_colour
else
@@ -883,11 +833,6 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
for(var/index=1, index<=husklist.len, index++)
husklist[index] = husklist[index]/255
accessory_overlay.color = husklist
-
- if(OFFSET_MUTPARTS in H.dna.species.offset_features)
- accessory_overlay.pixel_x += H.dna.species.offset_features[OFFSET_MUTPARTS][1]
- accessory_overlay.pixel_y += H.dna.species.offset_features[OFFSET_MUTPARTS][2]
-
standing += accessory_overlay
if(S.hasinner)
@@ -900,10 +845,6 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
if(S.center)
inner_accessory_overlay = center_image(inner_accessory_overlay, S.dimension_x, S.dimension_y)
- if(OFFSET_MUTPARTS in H.dna.species.offset_features)
- inner_accessory_overlay.pixel_x += H.dna.species.offset_features[OFFSET_MUTPARTS][1]
- inner_accessory_overlay.pixel_y += H.dna.species.offset_features[OFFSET_MUTPARTS][2]
-
standing += inner_accessory_overlay
if(S.extra) //apply the extra overlay, if there is one
@@ -941,14 +882,6 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
extra_accessory_overlay.color = "#[H.facial_hair_color]"
if(EYECOLOR)
extra_accessory_overlay.color = "#[H.eye_color]"
-
- if(HORNCOLOR)
- extra_accessory_overlay.color = "#[H.horn_color]"
-
- if(OFFSET_MUTPARTS in H.dna.species.offset_features)
- extra_accessory_overlay.pixel_x += H.dna.species.offset_features[OFFSET_MUTPARTS][1]
- extra_accessory_overlay.pixel_y += H.dna.species.offset_features[OFFSET_MUTPARTS][2]
-
standing += extra_accessory_overlay
if(S.extra2) //apply the extra overlay, if there is one
@@ -981,13 +914,6 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
extra2_accessory_overlay.color = "#[H.dna.features["mcolor"]]"
else
extra2_accessory_overlay.color = "#[H.hair_color]"
- if(HORNCOLOR)
- extra2_accessory_overlay.color = "#[H.horn_color]"
-
- if(OFFSET_MUTPARTS in H.dna.species.offset_features)
- extra2_accessory_overlay.pixel_x += H.dna.species.offset_features[OFFSET_MUTPARTS][1]
- extra2_accessory_overlay.pixel_y += H.dna.species.offset_features[OFFSET_MUTPARTS][2]
-
standing += extra2_accessory_overlay
@@ -1395,9 +1321,9 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
if(!istype(J) && istype(C))
J = C.jetpack
if(istype(J) && J.full_speed && J.allow_thrust(0.01, H)) //Prevents stacking
- . -= 0.4
+ . -= 2
else if(istype(T) && T.allow_thrust(0.01, H))
- . -= 0.4
+ . -= 2
if(!ignoreslow && gravity)
if(H.wear_suit)
@@ -1777,7 +1703,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
if(H.stat == CONSCIOUS && H != user && prob(I.force + ((100 - H.health) * 0.5))) // rev deconversion through blunt trauma.
var/datum/antagonist/rev/rev = H.mind.has_antag_datum(/datum/antagonist/rev)
- var/datum/antagonist/gang/gang = H.mind.has_antag_datum(/datum/antagonist/gang && !/datum/antagonist/gang/boss)
+ var/datum/antagonist/gang/gang = H.mind.has_antag_datum(/datum/antagonist/gang/)
if(rev)
rev.remove_revolutionary(FALSE, user)
if(gang)
@@ -1813,130 +1739,6 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
H.forcesay(GLOB.hit_appends) //forcesay checks stat already.
return TRUE
-/datum/species/proc/alt_spec_attack_hand(mob/living/carbon/human/M, mob/living/carbon/human/H, datum/martial_art/attacker_style)
- if(!istype(M))
- return TRUE
- CHECK_DNA_AND_SPECIES(M)
- CHECK_DNA_AND_SPECIES(H)
-
- if(!istype(M)) //sanity check for drones.
- return TRUE
- if(M.mind)
- attacker_style = M.mind.martial_art
- if((M != H) && M.a_intent != INTENT_HELP && H.check_shields(M, 0, M.name, attack_type = UNARMED_ATTACK))
- log_combat(M, H, "attempted to touch")
- H.visible_message("[M] attempted to touch [H]!")
- return TRUE
- switch(M.a_intent)
- if(INTENT_HELP)
- if(M == H)
- althelp(M, H, attacker_style)
- return TRUE
- return FALSE
- if(INTENT_DISARM)
- altdisarm(M, H, attacker_style)
- return TRUE
- return FALSE
-
-/datum/species/proc/althelp(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style)
- if(user == target && istype(user))
- if(user.getStaminaLoss() >= STAMINA_SOFTCRIT)
- to_chat(user, "You're too exhausted for that.")
- return
- if(!user.resting)
- to_chat(user, "You can only force yourself up if you're on the ground.")
- return
- user.visible_message("[user] forces [p_them()]self up to [p_their()] feet!", "You force yourself up to your feet!")
- user.resting = 0
- user.update_canmove()
- user.adjustStaminaLossBuffered(user.stambuffer) //Rewards good stamina management by making it easier to instantly get up from resting
- playsound(user, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
-
-/datum/species/proc/altdisarm(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style)
- if(user.getStaminaLoss() >= STAMINA_SOFTCRIT)
- to_chat(user, "You're too exhausted.")
- return FALSE
- if(target.check_block())
- target.visible_message("[target] blocks [user]'s shoving attempt!")
- return FALSE
- if(attacker_style && attacker_style.disarm_act(user,target))
- return TRUE
- if(user.resting)
- return FALSE
- else
- if(user == target)
- return
- user.do_attack_animation(target, ATTACK_EFFECT_DISARM)
- user.adjustStaminaLossBuffered(4)
- playsound(target, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1)
-
- if(target.w_uniform)
- target.w_uniform.add_fingerprint(user)
- SEND_SIGNAL(target, COMSIG_HUMAN_DISARM_HIT, user, user.zone_selected)
-
- if(!target.resting)
- target.adjustStaminaLoss(5)
-
- if(target.is_shove_knockdown_blocked())
- return
-
- var/turf/target_oldturf = target.loc
- var/shove_dir = get_dir(user.loc, target_oldturf)
- var/turf/target_shove_turf = get_step(target.loc, shove_dir)
- var/mob/living/carbon/human/target_collateral_human
- var/shove_blocked = FALSE //Used to check if a shove is blocked so that if it is knockdown logic can be applied
-
- //Thank you based whoneedsspace
- target_collateral_human = locate(/mob/living/carbon/human) in target_shove_turf.contents
- if(target_collateral_human && !target_collateral_human.resting)
- shove_blocked = TRUE
- else
- target_collateral_human = null
- target.Move(target_shove_turf, shove_dir)
- if(get_turf(target) == target_oldturf)
- shove_blocked = TRUE
-
- if(shove_blocked && !target.buckled)
- var/directional_blocked = !target.Adjacent(target_shove_turf)
- var/targetatrest = target.resting
- if((directional_blocked || !(target_collateral_human || target_shove_turf.shove_act(target, user))) && !targetatrest)
- target.Knockdown(SHOVE_KNOCKDOWN_SOLID)
- user.visible_message("[user.name] shoves [target.name], knocking them down!",
- "You shove [target.name], knocking them down!", null, COMBAT_MESSAGE_RANGE)
- log_combat(user, target, "shoved", "knocking them down")
- else if(target_collateral_human && !targetatrest)
- target.Knockdown(SHOVE_KNOCKDOWN_HUMAN)
- target_collateral_human.Knockdown(SHOVE_KNOCKDOWN_COLLATERAL)
- user.visible_message("[user.name] shoves [target.name] into [target_collateral_human.name]!",
- "You shove [target.name] into [target_collateral_human.name]!", null, COMBAT_MESSAGE_RANGE)
- log_combat(user, target, "shoved", "into [target_collateral_human.name]")
-
- else
- user.visible_message("[user.name] shoves [target.name]!",
- "You shove [target.name]!", null, COMBAT_MESSAGE_RANGE)
- var/target_held_item = target.get_active_held_item()
- var/knocked_item = FALSE
- if(!is_type_in_typecache(target_held_item, GLOB.shove_disarming_types))
- target_held_item = null
- if(!target.has_movespeed_modifier(SHOVE_SLOWDOWN_ID))
- target.add_movespeed_modifier(SHOVE_SLOWDOWN_ID, multiplicative_slowdown = SHOVE_SLOWDOWN_STRENGTH)
- if(target_held_item)
- target.visible_message("[target.name]'s grip on \the [target_held_item] loosens!",
- "Your grip on \the [target_held_item] loosens!", null, COMBAT_MESSAGE_RANGE)
- addtimer(CALLBACK(target, /mob/living/carbon/human/proc/clear_shove_slowdown), SHOVE_SLOWDOWN_LENGTH)
- else if(target_held_item)
- target.dropItemToGround(target_held_item)
- knocked_item = TRUE
- target.visible_message("[target.name] drops \the [target_held_item]!!",
- "You drop \the [target_held_item]!!", null, COMBAT_MESSAGE_RANGE)
- var/append_message = ""
- if(target_held_item)
- if(knocked_item)
- append_message = "causing them to drop [target_held_item]"
- else
- append_message = "loosening their grip on [target_held_item]"
- log_combat(user, target, "shoved", append_message)
-
/datum/species/proc/apply_damage(damage, damagetype = BRUTE, def_zone = null, blocked, mob/living/carbon/human/H)
var/hit_percent = (100-(blocked+armor))/100
hit_percent = (hit_percent * (100-H.physiology.damage_resistance))/100
diff --git a/code/modules/mob/living/carbon/human/species_types/mothmen.dm b/code/modules/mob/living/carbon/human/species_types/mothmen.dm
index d15d9893..3ad2a4bd 100644
--- a/code/modules/mob/living/carbon/human/species_types/mothmen.dm
+++ b/code/modules/mob/living/carbon/human/species_types/mothmen.dm
@@ -14,7 +14,6 @@
liked_food = VEGETABLES | DAIRY
disliked_food = FRUIT | GROSS
toxic_food = MEAT | RAW
- mutanteyes = /obj/item/organ/eyes/moth
/datum/species/moth/on_species_gain(mob/living/carbon/C)
. = ..()
diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm
index ef92a04c..91161175 100644
--- a/code/modules/mob/living/damage_procs.dm
+++ b/code/modules/mob/living/damage_procs.dm
@@ -57,6 +57,7 @@
if(STAMINA)
return getStaminaLoss()
+
/mob/living/proc/apply_damages(brute = 0, burn = 0, tox = 0, oxy = 0, clone = 0, def_zone = null, blocked = FALSE, stamina = 0, brain = 0)
if(blocked >= 100)
return 0
diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
index 94aca411..2445bd29 100644
--- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
@@ -1373,7 +1373,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
/datum/reagent/consumable/ethanol/neurotoxin
name = "Neurotoxin"
- id = "neurotoxin"
description = "A strong neurotoxin that puts the subject into a death-like state."
color = "#2E2E61" // rgb: 46, 46, 97
boozepwr = 50
@@ -1383,10 +1382,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
glass_icon_state = "neurotoxinglass"
glass_name = "Neurotoxin"
glass_desc = "A drink that is guaranteed to knock you silly."
- //SplitChem = TRUE
- impure_chem = "neuroweak"
- inverse_chem_val = 0.5 //Clear conversion
- inverse_chem = "neuroweak"
/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))
@@ -1395,12 +1390,12 @@ All effects don't start immediately, but rather get worse over time; the rate is
M.set_drugginess(50)
M.dizziness +=2
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 1*REM, 150)
- if(prob(20) && !holder.has_reagent("neuroweak"))
+ if(prob(20))
M.adjustStaminaLoss(10)
M.drop_all_held_items()
to_chat(M, "You cant feel your hands!")
if(current_cycle > 5)
- if(prob(20) && !holder.has_reagent("neuroweak"))
+ if(prob(20))
var/t = pickt()
ADD_TRAIT(M, t, type)
M.adjustStaminaLoss(10)
@@ -1422,25 +1417,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
M.adjustStaminaLoss(10)
..()
-/datum/reagent/consumable/ethanol/neuroweak
- name = "Neuro-Smash"
- id = "neuroweak"
- description = "A mostly safe alcoholic drink for the true daredevils. Counteracts Neurotoxins."
- boozepwr = 60
- pH = 8
-
-/datum/reagent/consumable/ethanol/neuroweak/on_mob_life(mob/living/carbon/M)
- if(holder.has_reagent("neurotoxin"))
- M.adjustOrganLoss(ORGAN_SLOT_BRAIN, -1*REM, 150)
- M.reagents.remove_reagent("neurotoxin", 1.5 * REAGENTS_METABOLISM, FALSE)
- if(holder.has_reagent("fentanyl"))
- M.adjustOrganLoss(ORGAN_SLOT_BRAIN, -1*REM, 150)
- M.reagents.remove_reagent("fentanyl", 0.75 * REAGENTS_METABOLISM, FALSE)
- else
- M.adjustOrganLoss(ORGAN_SLOT_BRAIN, -0.5*REM, 150)
- M.dizziness +=2
- ..()
-
/datum/reagent/consumable/ethanol/hippies_delight
name = "Hippie's Delight"
id = "hippiesdelight"
@@ -2146,29 +2122,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
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."
-/datum/reagent/consumable/ethanol/commander_and_chief
- name = "Commander and Chief"
- id = "commander_and_chief"
- description = "A cocktail for the captain on the go."
- color = "#ffffc9"
- boozepwr = 50
- quality = DRINK_FANTASTIC
- taste_description = "Tastes like...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."
-
-/datum/reagent/consumable/ethanol/commander_and_chief/on_mob_life(mob/living/carbon/M)
- if(M.mind && HAS_TRAIT(M.mind, TRAIT_CAPTAIN_METABOLISM))
- M.heal_bodypart_damage(2,2,2)
- M.adjustBruteLoss(-3.5,0)
- M.adjustOxyLoss(-3.5,0)
- M.adjustFireLoss(-3.5,0)
- M.adjustToxLoss(-3.5,0)
- M.radiation = max(M.radiation - 25, 0)
- . = 1
- return ..()
-
/datum/reagent/consumable/ethanol/fruit_wine
name = "Fruit Wine"
id = "fruit_wine"
diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm
index 95b4a33c..fe309b42 100644
--- a/code/modules/reagents/chemistry/reagents/other_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm
@@ -3,7 +3,6 @@
name = "Blood"
id = "blood"
color = "#C80000" // rgb: 200, 0, 0
- description = "Blood from a human, or otherwise."
metabolization_rate = 5 //fast rate so it disappears fast.
taste_description = "iron"
taste_mult = 1.3
@@ -201,20 +200,22 @@
pH = 7.5 //God is alkaline
/datum/reagent/water/holywater/on_mob_metabolize(mob/living/L)
- . = ..()
+ ..()
ADD_TRAIT(L, TRAIT_HOLY, id)
- if(is_servant_of_ratvar(L))
- to_chat(L, "A fog spreads through your mind, purging the Justiciar's influence!")
- else if(iscultist(L))
- to_chat(L, "A fog spreads through your mind, weakening your connection to the veil and purging Nar-sie's influence")
-
/datum/reagent/water/holywater/on_mob_end_metabolize(mob/living/L)
REMOVE_TRAIT(L, TRAIT_HOLY, id)
- if(iscultist(L))
- for(var/datum/action/innate/cult/blood_magic/BM in L.actions)
- BM.holy_dispel = FALSE
- return ..()
+ ..()
+
+/datum/reagent/water/holywater/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
+ if(is_servant_of_ratvar(M))
+ to_chat(M, "A fog spreads through your mind, purging the Justiciar's influence!")
+ ..()
+
+/datum/reagent/water/holywater/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
+ if(iscultist(M))
+ to_chat(M, "A fog spreads through your mind, weakening your connection to the veil and purging Nar-sie's influence")
+ ..()
/datum/reagent/water/holywater/on_mob_life(mob/living/carbon/M)
if(!data)
@@ -223,11 +224,9 @@
M.jitteriness = min(M.jitteriness+4,10)
if(iscultist(M))
for(var/datum/action/innate/cult/blood_magic/BM in M.actions)
- if(!BM.holy_dispel)
- BM.holy_dispel = TRUE
- to_chat(M, "Your blood rites falter as holy water scours your body!")
- for(var/datum/action/innate/cult/blood_spell/BS in BM.spells)
- qdel(BS)
+ to_chat(M, "Your blood rites falter as holy water scours your body!")
+ for(var/datum/action/innate/cult/blood_spell/BS in BM.spells)
+ qdel(BS)
if(data >= 25) // 10 units, 45 seconds @ metabolism 0.4 units & tick rate 1.8 sec
if(!M.stuttering)
M.stuttering = 1
@@ -537,12 +536,12 @@
race = /datum/species/fly
mutationtext = "The pain subsides. You feel... buzzy."
-/datum/reagent/mutationtoxin/insect
- name = "Insect Mutation Toxin"
+/datum/reagent/mutationtoxin/moth
+ name = "Moth Mutation Toxin"
id = "mothmutationtoxin"
description = "A glowing toxin."
color = "#5EFF3B" //RGB: 94, 255, 59
- race = /datum/species/insect
+ race = /datum/species/moth
mutationtext = "The pain subsides. You feel... attracted to light."
/datum/reagent/mutationtoxin/pod
@@ -1223,7 +1222,7 @@
description = "A perfluoronated sulfonic acid that forms a foam when mixed with water."
color = "#9E6B38" // rgb: 158, 107, 56
taste_description = "metal"
- pH = 11
+ pH = 13
/datum/reagent/foaming_agent// Metal foaming agent. This is lithium hydride. Add other recipes (e.g. LiH + H2O -> LiOH + H2) eventually.
name = "Foaming agent"
@@ -1232,7 +1231,7 @@
reagent_state = SOLID
color = "#664B63" // rgb: 102, 75, 99
taste_description = "metal"
- pH = 11.5
+ pH = 12.5
/datum/reagent/smart_foaming_agent //Smart foaming agent. Functions similarly to metal foam, but conforms to walls.
name = "Smart foaming agent"
@@ -1329,10 +1328,12 @@
..()
ADD_TRAIT(L, TRAIT_STUNIMMUNE, id)
ADD_TRAIT(L, TRAIT_SLEEPIMMUNE, id)
+ ADD_TRAIT(L, TRAIT_NOSLIPALL, id)
/datum/reagent/stimulum/on_mob_end_metabolize(mob/living/L)
REMOVE_TRAIT(L, TRAIT_STUNIMMUNE, id)
REMOVE_TRAIT(L, TRAIT_SLEEPIMMUNE, id)
+ REMOVE_TRAIT(L, TRAIT_NOSLIPALL, id)
..()
/datum/reagent/stimulum/on_mob_life(mob/living/carbon/M)
@@ -1359,6 +1360,11 @@
REMOVE_TRAIT(L, TRAIT_GOTTAGOFAST, id)
..()
+/datum/reagent/nitryl/on_mob_life(mob/living/carbon/M)
+ current_cycle++
+ holder.remove_reagent(id, 0.99) //Gives time for the next tick of life().
+ . = TRUE //Update status effects.
+
/////////////////////////Coloured Crayon Powder////////////////////////////
//For colouring in /proc/mix_color_from_reagents
@@ -1446,6 +1452,9 @@
color = "#FFFFFF" // white
random_color_list = list("#FFFFFF") //doesn't actually change appearance at all
+
+
+
//////////////////////////////////Hydroponics stuff///////////////////////////////
/datum/reagent/plantnutriment
@@ -1487,8 +1496,16 @@
tox_prob = 15
pH = 1
+
+
+
+
+
+
// GOON OTHERS
+
+
/datum/reagent/oil
name = "Oil"
id = "oil"
@@ -1520,6 +1537,20 @@
taste_description = "metal"
pH = 4.5
+/datum/reagent/carpet
+ name = "Carpet"
+ id = "carpet"
+ description = "For those that need a more creative way to roll out a red carpet."
+ reagent_state = LIQUID
+ color = "#b51d05"
+ taste_description = "carpet" // Your tounge feels furry.
+
+/datum/reagent/carpet/reaction_turf(turf/T, reac_volume)
+ if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel))
+ var/turf/open/floor/F = T
+ F.PlaceOnTop(/turf/open/floor/carpet)
+ ..()
+
/datum/reagent/bromine
name = "Bromine"
id = "bromine"
@@ -1652,7 +1683,7 @@
reagent_state = LIQUID
color = "#FFFFD6" // very very light yellow
taste_description = "alkali" //who put ACID for NaOH ????
- pH = 11.9
+ pH = 13
/datum/reagent/drying_agent
name = "Drying agent"
@@ -1673,143 +1704,6 @@
qdel(O)
new /obj/item/clothing/shoes/galoshes/dry(t_loc)
-// Liquid Carpets
-/datum/reagent/carpet
- name = "Liquid Carpet"
- id = "carpet"
- description = "For those that need a more creative way to roll out a carpet."
- reagent_state = LIQUID
- color = "#b51d05"
- taste_description = "carpet" // Your tounge feels furry.
-
-/datum/reagent/carpet/reaction_turf(turf/T, reac_volume)
- if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel))
- var/turf/open/floor/F = T
- F.PlaceOnTop(/turf/open/floor/carpet)
- ..()
-
-/datum/reagent/carpet/black
- name = "Liquid Black Carpet"
- id = "blackcarpet"
- color = "#363636"
-
-/datum/reagent/carpet/black/reaction_turf(turf/T, reac_volume)
- if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel))
- var/turf/open/floor/F = T
- F.PlaceOnTop(/turf/open/floor/carpet/black)
- ..()
-
-/datum/reagent/carpet/blackred
- name = "Liquid Red Black Carpet"
- id = "blackredcarpet"
- color = "#342125"
-
-/datum/reagent/carpet/blackred/reaction_turf(turf/T, reac_volume)
- if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel))
- var/turf/open/floor/F = T
- F.PlaceOnTop(/turf/open/floor/carpet/blackred)
- ..()
-
-/datum/reagent/carpet/monochrome
- name = "Liquid Monochrome Carpet"
- id = "monochromecarpet"
- color = "#b4b4b4"
-
-/datum/reagent/carpet/monochrome/reaction_turf(turf/T, reac_volume)
- if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel))
- var/turf/open/floor/F = T
- F.PlaceOnTop(/turf/open/floor/carpet/monochrome)
- ..()
-
-/datum/reagent/carpet/blue
- name = "Liquid Blue Carpet"
- id = "bluecarpet"
- color = "#1256ff"
-
-/datum/reagent/carpet/blue/reaction_turf(turf/T, reac_volume)
- if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel))
- var/turf/open/floor/F = T
- F.PlaceOnTop(/turf/open/floor/carpet/blue)
- ..()
-
-/datum/reagent/carpet/cyan
- name = "Liquid Cyan Carpet"
- id = "cyancarpet"
- color = "#3acfb9"
-
-/datum/reagent/carpet/cyan/reaction_turf(turf/T, reac_volume)
- if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel))
- var/turf/open/floor/F = T
- F.PlaceOnTop(/turf/open/floor/carpet/cyan)
- ..()
-
-/datum/reagent/carpet/green
- name = "Liquid Green Carpet"
- id = "greencarpet"
- color = "#619b62"
-
-/datum/reagent/carpet/green/reaction_turf(turf/T, reac_volume)
- if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel))
- var/turf/open/floor/F = T
- F.PlaceOnTop(/turf/open/floor/carpet/green)
- ..()
-
-/datum/reagent/carpet/orange
- name = "Liquid Orange Carpet"
- id = "orangecarpet"
- color = "#cc7900"
-
-/datum/reagent/carpet/orange/reaction_turf(turf/T, reac_volume)
- if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel))
- var/turf/open/floor/F = T
- F.PlaceOnTop(/turf/open/floor/carpet/orange)
- ..()
-
-/datum/reagent/carpet/purple
- name = "Liquid Purple Carpet"
- id = "purplecarpet"
- color = "#6d3392"
-
-/datum/reagent/carpet/purple/reaction_turf(turf/T, reac_volume)
- if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel))
- var/turf/open/floor/F = T
- F.PlaceOnTop(/turf/open/floor/carpet/purple)
- ..()
-
-/datum/reagent/carpet/red
- name = "Liquid Red Carpet"
- id = "redcarpet"
- color = "#871515"
-
-/datum/reagent/carpet/red/reaction_turf(turf/T, reac_volume)
- if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel))
- var/turf/open/floor/F = T
- F.PlaceOnTop(/turf/open/floor/carpet/red)
- ..()
-
-/datum/reagent/carpet/royalblack
- name = "Liquid Royal Black Carpet"
- id = "royalblackcarpet"
- color = "#483d05"
-
-/datum/reagent/carpet/royalblack/reaction_turf(turf/T, reac_volume)
- if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel))
- var/turf/open/floor/F = T
- F.PlaceOnTop(/turf/open/floor/carpet/royalblack)
- ..()
-
-/datum/reagent/carpet/royalblue
- name = "Liquid Royal Blue Carpet"
- id = "royalbluecarpet"
- color = "#24227e"
-
-/datum/reagent/carpet/royalblue/reaction_turf(turf/T, reac_volume)
- if(isplatingturf(T) || istype(T, /turf/open/floor/plasteel))
- var/turf/open/floor/F = T
- F.PlaceOnTop(/turf/open/floor/carpet/royalblue)
- ..()
-
-
// Virology virus food chems.
/datum/reagent/toxin/mutagen/mutagenvirusfood
@@ -2116,7 +2010,7 @@
can_synth = FALSE
var/datum/dna/original_dna
var/reagent_ticks = 0
- chemical_flags = REAGENT_INVISIBLE
+ invisible = TRUE
/datum/reagent/changeling_string/on_mob_metabolize(mob/living/carbon/C)
if(C && C.dna && data["desired_dna"])
@@ -2144,25 +2038,3 @@
/datum/reagent/changeling_string/Destroy()
qdel(original_dna)
return ..()
-
-/datum/reagent/mustardgrind
- name = "Mustardgrind"
- id = "mustardgrind"
- description = "A powerd that is mixed with water and enzymes to make mustard."
- color = "#BCC740" //RGB: 188, 199, 64
- taste_description = "plant dust"
-
-/datum/reagent/pax/catnip
- name = "catnip"
- id = "catnip"
- taste_description = "grass"
- description = "A colorless liquid that makes people more peaceful and felines more happy."
- metabolization_rate = 1.75 * REAGENTS_METABOLISM
-
-/datum/reagent/pax/catnip/on_mob_life(mob/living/carbon/M)
- if(prob(20))
- M.emote("nya")
- if(prob(20))
- to_chat(M, "[pick("Headpats feel nice.", "The feeling of a hairball...", "Backrubs would be nice.", "Whats behind those doors?")]")
- M.adjustArousalLoss(2)
- ..()
diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/MKUltra.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/MKUltra.dm
index 4e80f42d..76d0951d 100644
--- a/modular_citadel/code/modules/reagents/chemistry/reagents/MKUltra.dm
+++ b/modular_citadel/code/modules/reagents/chemistry/reagents/MKUltra.dm
@@ -136,6 +136,7 @@ Creating a chem with a low purity will make you permanently fall in love with so
color = "#660015" // rgb: , 0, 255
taste_description = "synthetic chocolate, a base tone of alcohol, and high notes of roses"
overdose_threshold = 100 //If this is too easy to get 100u of this, then double it please.
+ DoNotSplit = TRUE
metabolization_rate = 0.1//It has to be slow, so there's time for the effect.
data = list("creatorID" = null, "creatorGender" = null, "creatorName" = null)
var/creatorID //ckey
@@ -143,19 +144,20 @@ Creating a chem with a low purity will make you permanently fall in love with so
var/creatorName
var/mob/living/creator
pH = 10
- chemical_flags = REAGENT_ONMOBMERGE | REAGENT_DONOTSPLIT //Procs on_mob_add when merging into a human
+ OnMobMergeCheck = TRUE //Procs on_mob_add when merging into a human
can_synth = FALSE
/datum/reagent/fermi/enthrall/test
name = "MKUltraTest"
id = "enthrallTest"
- description = "A forbidden deep red mixture that makes you like Fermis a little too much. Unobtainable and due to be removed from the wiki."
+ description = "A forbidden deep red mixture that overwhelms a foreign body with waves of joy, intoxicating them into servitude. When taken by the creator, it will enhance the draw of their voice to those affected by it."
data = list("creatorID" = "honkatonkbramblesnatch", "creatorGender" = "Mistress", "creatorName" = "Fermis Yakumo")
creatorID = "honkatonkbramblesnatch"//ckey
creatorGender = "Mistress"
creatorName = "Fermis Yakumo"
purity = 1
+ DoNotSplit = TRUE
/datum/reagent/fermi/enthrall/test/on_new()
id = "enthrall"
@@ -298,13 +300,13 @@ Creating a chem with a low purity will make you permanently fall in love with so
//Creates a gas cloud when the reaction blows up, causing everyone in it to fall in love with someone/something while it's in their system.
/datum/reagent/fermi/enthrallExplo//Created in a gas cloud when it explodes
- name = "Gaseous MKUltra"
+ name = "MKUltra"
id = "enthrallExplo"
- description = "A forbidden deep red gas that overwhelms a foreign body, causing the person they next lay their eyes on to become more interesting. Studies have shown that people are 66% more likely to make friends with this in the air. Produced when MKUltra explodes."
+ description = "A forbidden deep red mixture that overwhelms a foreign body with waves of desire, inducing a chemial love for another. Also, how the HECC did you get this?"
color = "#2C051A" // rgb: , 0, 255
metabolization_rate = 0.1
taste_description = "synthetic chocolate, a base tone of alcohol, and high notes of roses."
- chemical_flags = REAGENT_DONOTSPLIT
+ DoNotSplit = TRUE
can_synth = FALSE
var/mob/living/carbon/love
diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm
index a7e1ac8e..0924f00f 100644
--- a/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm
+++ b/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm
@@ -54,9 +54,9 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
var/pollStarted = FALSE
var/location_created
var/startHunger
- impure_chem = "SDGFtox"
- inverse_chem_val = 0.5
- inverse_chem = "SDZF"
+ ImpureChem = "SDGFtox"
+ InverseChemVal = 0.5
+ InverseChem = "SDZF"
can_synth = TRUE
@@ -81,19 +81,9 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
SM.real_name = M.real_name
M.dna.transfer_identity(SM)
SM.updateappearance(mutcolor_update=1)
-
-
- candies = shuffle(candies)//Shake those ghosts up!
- for(var/mob/dead/observer/C2 in candies)
- if(C2.key && C2)
- C2.transfer_ckey(SM, FALSE)
- message_admins("Ghost candidate found! [C2] key [C2.key] is becoming a clone of [M] key: [M.key] (They agreed to respect the character they're becoming, and agreed to not ERP without express permission from the original.)")
- log_game("FERMICHEM: [M] ckey: [M.key] is creating a clone, controlled by [C2]")
- break
- else
- candies =- C2
- if(!SM.mind) //Something went wrong, use alt mechanics
- return ..()
+ var/mob/dead/observer/C = pick(candies)
+ message_admins("Ghost candidate found! [C] key [C.key] is becoming a clone of [M] key: [M.key] (They agreed to respect the character they're becoming, and agreed to not ERP without express permission from the original.)")
+ SM.key = C.key
SM.mind.enslave_mind_to_creator(M)
//If they're a zombie, they can try to negate it with this.
@@ -280,9 +270,8 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
//Unobtainable, used in clone spawn.
/datum/reagent/fermi/SDGFheal
- name = "synthetic-derived healing factor"
+ name = "synthetic-derived growth factor"
id = "SDGFheal"
- description = "Leftover SDGF is transferred into the resulting clone, which quickly heals up the stresses from suddenly splitting. Restores blood, nutrition, and repaires brain and clone damage quickly. Only obtainable from using excess SDGF, and only enters the cloned body."
metabolization_rate = 1
can_synth = FALSE
@@ -295,30 +284,29 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
..()
//Unobtainable, used if SDGF is impure but not too impure
-/datum/reagent/impure/SDGFtox
- name = "Synthetic-derived apoptosis factor"
+/datum/reagent/fermi/SDGFtox
+ name = "synthetic-derived growth factor"
id = "SDGFtox"
- description = "Impure synthetic-derived growth factor causes certain cells to undergo cell death, causing clone damage, and damaging blood cells."//i.e. tell me please, figure it's a good way to get pinged for bugfixes.
+ description = "A chem that makes a certain chemcat angry at you if you're reading this, how did you get this???"//i.e. tell me please, figure it's a good way to get pinged for bugfixes.
metabolization_rate = 1
can_synth = FALSE
-/datum/reagent/impure/SDGFtox/on_mob_life(mob/living/carbon/M)//Damages the taker if their purity is low. Extended use of impure chemicals will make the original die. (thus can't be spammed unless you've very good)
+/datum/reagent/fermi/SDGFtox/on_mob_life(mob/living/carbon/M)//Damages the taker if their purity is low. Extended use of impure chemicals will make the original die. (thus can't be spammed unless you've very good)
M.blood_volume -= 10
M.adjustCloneLoss(2, 0)
..()
//Fail state of SDGF
-/datum/reagent/impure/SDZF
- name = "synthetic-derived zombie factor"
+/datum/reagent/fermi/SDZF
+ name = "synthetic-derived growth factor"
id = "SDZF"
- description = "A horribly peverse mass of Embryonic stem cells made real by the hands of a failed chemist. Emulates normal synthetic-derived growth factor, but produces a hostile zombie at the end of it."
+ description = "A horribly peverse mass of Embryonic stem cells made real by the hands of a failed chemist. This message should never appear, how did you manage to get a hold of this?"
color = "#a502e0" // rgb: 96, 0, 255
metabolization_rate = 0.5 * REAGENTS_METABOLISM
var/startHunger
can_synth = TRUE
- chemical_flags = REAGENT_SNEAKYNAME
-/datum/reagent/impure/SDZF/on_mob_life(mob/living/carbon/M) //If you're bad at fermichem, turns your clone into a zombie instead.
+/datum/reagent/fermi/SDZF/on_mob_life(mob/living/carbon/M) //If you're bad at fermichem, turns your clone into a zombie instead.
switch(current_cycle)//Pretends to be normal
if(20)
to_chat(M, "You feel the synethic cells rest uncomfortably within your body as they start to pulse and grow rapidly.")
diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm
index 4acfda05..a7c4ea00 100644
--- a/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm
+++ b/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm
@@ -6,20 +6,58 @@
id = "fermi"
taste_description = "affection and love!"
can_synth = FALSE
- //SplitChem = TRUE
- impure_chem = "fermiTox"// What chemical is metabolised with an inpure reaction
- inverse_chem_val = 0.25 // If the impurity is below 0.5, replace ALL of the chem with inverse_chemupon metabolising
- inverse_chem = "fermiTox"
//This should process fermichems to find out how pure they are and what effect to do.
/datum/reagent/fermi/on_mob_add(mob/living/carbon/M, amount)
. = ..()
-
+ if(!M)
+ return
+ if(purity < 0)
+ CRASH("Purity below 0 for chem: [id], Please let Fermis Know!")
+ if (purity == 1 || DoNotSplit == TRUE)
+ log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume]u of [id]")
+ return
+ else if (InverseChemVal > purity)//Turns all of a added reagent into the inverse chem
+ M.reagents.remove_reagent(id, amount, FALSE)
+ M.reagents.add_reagent(InverseChem, amount, FALSE, other_purity = 1)
+ log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume]u of [InverseChem]")
+ return
+ else
+ var/impureVol = amount * (1 - purity) //turns impure ratio into impure chem
+ M.reagents.remove_reagent(id, (impureVol), FALSE)
+ M.reagents.add_reagent(ImpureChem, impureVol, FALSE, other_purity = 1)
+ log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume - impureVol]u of [id]")
+ log_game("FERMICHEM: [M] ckey: [M.key] has ingested [volume]u of [ImpureChem]")
+ return
//When merging two fermichems, see above
/datum/reagent/fermi/on_merge(data, amount, mob/living/carbon/M, purity)//basically on_mob_add but for merging
. = ..()
-
+ if(!ishuman(M))
+ return
+ if (purity < 0)
+ CRASH("Purity below 0 for chem: [id], Please let Fermis Know!")
+ if (purity == 1 || DoNotSplit == TRUE)
+ log_game("FERMICHEM: [M] ckey: [M.key] has merged [volume]u of [id] in themselves")
+ return
+ else if (InverseChemVal > purity)
+ M.reagents.remove_reagent(id, amount, FALSE)
+ M.reagents.add_reagent(InverseChem, amount, FALSE, other_purity = 1)
+ for(var/datum/reagent/fermi/R in M.reagents.reagent_list)
+ if(R.name == "")
+ R.name = name//Negative effects are hidden
+ log_game("FERMICHEM: [M] ckey: [M.key] has merged [volume]u of [InverseChem]")
+ return
+ else
+ var/impureVol = amount * (1 - purity)
+ M.reagents.remove_reagent(id, impureVol, FALSE)
+ M.reagents.add_reagent(ImpureChem, impureVol, FALSE, other_purity = 1)
+ for(var/datum/reagent/fermi/R in M.reagents.reagent_list)
+ if(R.name == "")
+ R.name = name//Negative effects are hidden
+ log_game("FERMICHEM: [M] ckey: [M.key] has merged [volume - impureVol]u of [id]")
+ log_game("FERMICHEM: [M] ckey: [M.key] has merged [volume]u of [ImpureChem]")
+ return
////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -39,7 +77,7 @@
taste_description = "like jerky, whiskey and an off aftertaste of a crypt."
metabolization_rate = 0.2
overdose_threshold = 25
- chemical_flags = REAGENT_DONOTSPLIT
+ DoNotSplit = TRUE
pH = 4
can_synth = TRUE
@@ -84,9 +122,9 @@
color = "#f9b9bc" // rgb: , 0, 255
taste_description = "dewicious degenyewacy"
metabolization_rate = 0.5 * REAGENTS_METABOLISM
- inverse_chem_val = 0
+ InverseChemVal = 0
var/obj/item/organ/tongue/nT
- chemical_flags = REAGENT_DONOTSPLIT
+ DoNotSplit = TRUE
pH = 5
var/obj/item/organ/tongue/T
can_synth = TRUE
@@ -168,14 +206,14 @@
//Writen by Trilby!! Embellsished a little by me.
/datum/reagent/fermi/nanite_b_gone
- name = "Nanite bane"
+ name = "Naninte bane"
id = "nanite_b_gone"
description = "A stablised EMP that is highly volatile, shocking small nano machines that will kill them off at a rapid rate in a patient's system."
color = "#708f8f"
overdose_threshold = 15
- impure_chem = "nanite_b_goneTox" //If you make an inpure chem, it stalls growth
- inverse_chem_val = 0.25
- inverse_chem = "nanite_b_goneTox" //At really impure vols, it just becomes 100% inverse
+ ImpureChem = "nanite_b_goneTox" //If you make an inpure chem, it stalls growth
+ InverseChemVal = 0.25
+ InverseChem = "nanite_b_goneTox" //At really impure vols, it just becomes 100% inverse
taste_description = "what can only be described as licking a battery."
pH = 9
can_synth = FALSE
@@ -198,7 +236,7 @@
//empulse((get_turf(C)), 3, 2)//So the nanites randomize
var/atom/T = C
T.emp_act(EMP_HEAVY)
- to_chat(C, "You feel a strange tingling sensation come from your core.")
+ to_chat(C, "The nanites short circuit within your system!")
if(isnull(N))
return ..()
N.nanite_volume = -2
@@ -208,11 +246,10 @@
O.emp_act(EMP_HEAVY)
/datum/reagent/fermi/nanite_b_goneTox
- name = "Electromagnetic crystals"
+ name = "Naninte bain"
id = "nanite_b_goneTox"
- description = "Causes items upon the patient to sometimes short out, as well as causing a shock in the patient, if the residual charge between the crystals builds up to sufficient quantities"
- metabolization_rate = 0.5
- chemical_flags = REAGENT_INVISIBLE
+ description = "Poorly made, and shocks you!"
+ metabolization_rate = 1
//Increases shock events.
/datum/reagent/fermi/nanite_b_goneTox/on_mob_life(mob/living/carbon/C)//Damages the taker if their purity is low. Extended use of impure chemicals will make the original die. (thus can't be spammed unless you've very good)
@@ -277,7 +314,7 @@
name = "Fermis Test Reagent"
id = "fermiTest"
description = "You should be really careful with this...! Also, how did you get this?"
- chemical_flags = REAGENT_FORCEONNEW
+ addProc = TRUE
can_synth = FALSE
/datum/reagent/fermi/fermiTest/on_new(datum/reagents/holder)
@@ -308,6 +345,22 @@
playsound(get_turf(M), 'modular_citadel/sound/voice/merowr.ogg', 50, 1)
holder.clear_reagents()
+/datum/reagent/fermi/fermiTox
+ name = "FermiTox"
+ id = "fermiTox"
+ description = "You should be really careful with this...! Also, how did you get this? You shouldn't have this!"
+ data = "merge"
+ color = "FFFFFF"
+ can_synth = FALSE
+
+//I'm concerned this is too weak, but I also don't want deathmixes.
+/datum/reagent/fermi/fermiTox/on_mob_life(mob/living/carbon/C, method)
+ if(C.dna && istype(C.dna.species, /datum/species/jelly))
+ C.adjustToxLoss(-2)
+ else
+ C.adjustToxLoss(2)
+ ..()
+
/datum/reagent/fermi/acidic_buffer
name = "Acidic buffer"
id = "acidic_buffer"
@@ -318,11 +371,9 @@
//Consumes self on addition and shifts pH
/datum/reagent/fermi/acidic_buffer/on_new(datapH)
- if(holder.has_reagent("stabilizing_agent"))
- return ..()
data = datapH
if(LAZYLEN(holder.reagent_list) == 1)
- return ..()
+ return
holder.pH = ((holder.pH * holder.total_volume)+(pH * (volume)))/(holder.total_volume + (volume))
var/list/seen = viewers(5, get_turf(holder))
for(var/mob/M in seen)
@@ -340,11 +391,9 @@
can_synth = TRUE
/datum/reagent/fermi/basic_buffer/on_new(datapH)
- if(holder.has_reagent("stabilizing_agent"))
- return ..()
data = datapH
if(LAZYLEN(holder.reagent_list) == 1)
- return ..()
+ return
holder.pH = ((holder.pH * holder.total_volume)+(pH * (volume)))/(holder.total_volume + (volume))
var/list/seen = viewers(5, get_turf(holder))
for(var/mob/M in seen)
diff --git a/modular_citadel/code/modules/vore/resizing/sizechemicals.dm b/modular_citadel/code/modules/vore/resizing/sizechemicals.dm
index f83ba2ce..1f5dbf2b 100644
--- a/modular_citadel/code/modules/vore/resizing/sizechemicals.dm
+++ b/modular_citadel/code/modules/vore/resizing/sizechemicals.dm
@@ -12,7 +12,7 @@
overdose_threshold = 20
/datum/reagent/medicine/macrocillin/on_mob_life(mob/living/M, method=INGEST)
- for(var/size in list(SIZESCALE_SMALL, SIZESCALE_NORMAL, SIZESCALE_BIG, SIZESCALE_HUGE))
+ for(var/size in list(SIZESCALE_SMALL, SIZESCALE_NORMAL, SIZESCALE_BIG, SIZESCALE_HUGE))
if(M.size_multiplier < size)
M.sizescale(size)
M << "You grow!"