diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm
index 906069b876f..479e097251c 100644
--- a/code/_onclick/other_mobs.dm
+++ b/code/_onclick/other_mobs.dm
@@ -131,7 +131,7 @@
if(ishuman(M))
var/mob/living/carbon/human/H = M
- if(H.species.flags & IS_SYNTHETIC || H.species.insulated)
+ if(H.species.flags & IS_SYNTHETIC || (H.species.siemens_coefficient<0.5))
return
var/power = max(0,min(10,(powerlevel+rand(0,3))))
diff --git a/code/game/gamemodes/setupgame.dm b/code/game/gamemodes/setupgame.dm
index d2b54fe5ba5..9c1b30bc89c 100644
--- a/code/game/gamemodes/setupgame.dm
+++ b/code/game/gamemodes/setupgame.dm
@@ -121,7 +121,7 @@
blocks_assigned[G.block]=assignedToBlock
//testing("DNA2: Gene [G.name] assigned to block [G.block].")
- testing("DNA2: [numsToAssign.len] blocks are unused: [english_list(numsToAssign)]")
+ //testing("DNA2: [numsToAssign.len] blocks are unused: [english_list(numsToAssign)]")
// HIDDEN MUTATIONS / SUPERPOWERS INITIALIZTION
diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm
index 28affd94a87..4bf1c07abc7 100644
--- a/code/game/machinery/suit_storage_unit.dm
+++ b/code/game/machinery/suit_storage_unit.dm
@@ -330,6 +330,7 @@
for(i=0,i<4,i++)
sleep(50)
if(src.OCCUPANT)
+ OCCUPANT.radiation += 50
var/datum/organ/internal/diona/nutrients/rad_organ = locate() in OCCUPANT.internal_organs
if (!rad_organ)
if(src.issuperUV)
diff --git a/code/game/objects/items/weapons/shards.dm b/code/game/objects/items/weapons/shards.dm
index 8bd126584cf..a57463eee78 100644
--- a/code/game/objects/items/weapons/shards.dm
+++ b/code/game/objects/items/weapons/shards.dm
@@ -76,17 +76,18 @@
if(ishuman(M))
var/mob/living/carbon/human/H = M
- if(H.species.flags & IS_SYNTHETIC || H.species.insulated)
+ if(H.species.flags & IS_SYNTHETIC || (H.species.siemens_coefficient<0.5)) //Thick skin.
return
if( !H.shoes && ( !H.wear_suit || !(H.wear_suit.body_parts_covered & FEET) ) )
var/datum/organ/external/affecting = H.get_organ(pick("l_foot", "r_foot"))
if(affecting.status & ORGAN_ROBOT)
return
- H.Weaken(3)
if(affecting.take_damage(5, 0))
H.UpdateDamageIcon()
H.updatehealth()
+ if(!(H.species & NO_PAIN))
+ H.Weaken(3)
..()
// Shrapnel
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 283af59dc33..38b60890c09 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -23,9 +23,8 @@
return 0
if(species_restricted && istype(M,/mob/living/carbon/human))
-
- var/wearable = null
var/exclusive = null
+ var/wearable = null
var/mob/living/carbon/human/H = M
if("exclude" in species_restricted)
@@ -39,10 +38,9 @@
if(H.species.name in species_restricted)
wearable = 1
- if(!wearable && (slot != 15 && slot != 16)) //Pockets.
- M << "\red Your species cannot wear [src]."
+ if(!wearable && !(slot in list(slot_l_store, slot_r_store, slot_s_store)))
+ H << "Your species cannot wear [src]."
return 0
-
return 1
/obj/item/clothing/proc/refit_for_species(var/target_species)
diff --git a/code/modules/mob/language.dm b/code/modules/mob/language.dm
index 10809d9db57..4f4b8a0e6f8 100755
--- a/code/modules/mob/language.dm
+++ b/code/modules/mob/language.dm
@@ -61,7 +61,9 @@
var/ending = copytext(scrambled_text, length(scrambled_text))
if(ending == ".")
scrambled_text = copytext(scrambled_text,1,length(scrambled_text)-1)
- scrambled_text += copytext(input, length(input))
+ var/input_ending = copytext(input, input_size)
+ if(input_ending in list("!","?","."))
+ scrambled_text += input_ending
return scrambled_text
/datum/language/proc/format_message(message, verb)
@@ -241,11 +243,11 @@
space_chance = 100
syllables = list("lorem", "ipsum", "dolor", "sit", "amet", "consectetur", "adipiscing", "elit",
"sed", "do", "eiusmod", "tempor", "incididunt", "ut", "labore", "et", "dolore",
- "magna", "aliqua", "ut", "enim", "ad", "minim", "veniam", "quis", "nostrud",
- "exercitation", "ullamco", "laboris", "nisi", "ut", "aliquip", "ex", "ea", "commodo",
- "consequat", "duis", "aute", "irure", "dolor", "in", "reprehenderit", "in",
- "voluptate", "velit", "esse", "cillum", "dolore", "eu", "fugiat", "nulla",
- "pariatur", "excepteur", "sint", "occaecat", "cupidatat", "non", "proident", "sunt",
+ "magna", "aliqua", "ut", "enim", "ad", "minim", "veniam", "quis", "nostrud",
+ "exercitation", "ullamco", "laboris", "nisi", "ut", "aliquip", "ex", "ea", "commodo",
+ "consequat", "duis", "aute", "irure", "dolor", "in", "reprehenderit", "in",
+ "voluptate", "velit", "esse", "cillum", "dolore", "eu", "fugiat", "nulla",
+ "pariatur", "excepteur", "sint", "occaecat", "cupidatat", "non", "proident", "sunt",
"in", "culpa", "qui", "officia", "deserunt", "mollit", "anim", "id", "est", "laborum")
/datum/language/gutter
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 42de4297527..b1170468d87 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -90,9 +90,8 @@
return 0
src.apply_damage(shock_damage, BURN, def_zone, used_weapon="Electrocution")
-
playsound(loc, "sparks", 50, 1, -1)
- if (shock_damage > 10)
+ if (shock_damage > 15)
src.visible_message(
"\red [src] was shocked by the [source]!", \
"\red You feel a powerful shock course through your body!", \
@@ -200,7 +199,7 @@
if (istype(src,/mob/living/carbon/human) && src:w_uniform)
var/mob/living/carbon/human/H = src
H.w_uniform.add_fingerprint(M)
-
+
if(player_logged)
M.visible_message("[M] shakes [src] trying to wake [t_him] up!", \
"You shake [src], but they do not respond... Maybe they have S.S.D?")
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index cd91d77cf35..40c6eaaccbc 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -77,8 +77,8 @@ emp_act
if (affected.status & ORGAN_ROBOT)
emote("me", 1, "drops what they were holding, their [affected.display_name] malfunctioning!")
else
- var/emote_scream = pick("screams in pain and", "lets out a sharp cry and", "cries out and")
- emote("me", 1, "[(species && species.flags & NO_PAIN) ? "" : emote_scream ] drops what they were holding in their [affected.display_name]!")
+ var/emote_scream = pick("screams in pain and ", "lets out a sharp cry and ", "cries out and ")
+ emote("me", 1, "[(species && species.flags & NO_PAIN) ? "" : emote_scream ]drops what they were holding in their [affected.display_name]!")
..(stun_amount, agony_amount, def_zone)
@@ -107,7 +107,7 @@ emp_act
if (!def_zone)
return 1.0
- var/siemens_coefficient = 1.0
+ var/siemens_coefficient = species.siemens_coefficient
var/list/clothing_items = list(head, wear_mask, wear_suit, w_uniform, gloves, shoes) // What all are we checking?
for(var/obj/item/clothing/C in clothing_items)
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 808025cf5fd..194050bc261 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -280,6 +280,7 @@
radiation -= rads
nutrition += rads
adjustBruteLoss(-(rads))
+ adjustFireLoss(-(rads))
adjustOxyLoss(-(rads))
adjustToxLoss(-(rads))
updatehealth()
@@ -949,10 +950,11 @@
traumatic_shock -= light_amount
if(species.flags & IS_PLANT)
- if(nutrition > 500)
- nutrition = 500
+ if(nutrition > 450)
+ nutrition = 450
if(light_amount >= 3) //if there's enough light, heal
- adjustBruteLoss(-(light_amount))
+ adjustBruteLoss(-(round(light_amount/2)))
+ adjustFireLoss(-(round(light_amount/2)))
adjustToxLoss(-(light_amount))
adjustOxyLoss(-(light_amount))
//TODO: heal wounds, heal broken limbs.
@@ -995,7 +997,7 @@
proc/handle_regular_status_updates()
if(status_flags & GODMODE) return 0
-
+
//SSD check, if a logged player is awake put them back to sleep!
if(player_logged && sleeping < 2)
sleeping = 2
@@ -1055,7 +1057,7 @@
adjustHalLoss(-3)
if (mind)
//Are they SSD? If so we'll keep them asleep but work off some of that sleep var in case of stoxin or similar.
- if(player_logged)
+ if(player_logged)
sleeping = max(sleeping-1, 2)
else
sleeping = max(sleeping-1, 0)
diff --git a/code/modules/mob/living/carbon/human/species/outsider/shadow.dm b/code/modules/mob/living/carbon/human/species/outsider/shadow.dm
index e9584143ee6..fa40f8ee005 100644
--- a/code/modules/mob/living/carbon/human/species/outsider/shadow.dm
+++ b/code/modules/mob/living/carbon/human/species/outsider/shadow.dm
@@ -10,6 +10,7 @@
light_dam = 2
darksight = 8
has_organ = list()
+ siemens_coefficient = 0
blood_color = "#CCCCCC"
flesh_color = "#AAAAAA"
diff --git a/code/modules/mob/living/carbon/human/species/outsider/vox.dm b/code/modules/mob/living/carbon/human/species/outsider/vox.dm
index 3c44fbd5c6d..bf007450e36 100644
--- a/code/modules/mob/living/carbon/human/species/outsider/vox.dm
+++ b/code/modules/mob/living/carbon/human/species/outsider/vox.dm
@@ -28,7 +28,7 @@
breath_type = "nitrogen"
poison_type = "oxygen"
- insulated = 1
+ siemens_coefficient = 0.2
flags = IS_WHITELISTED | NO_SCAN | HAS_EYE_COLOR
diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm
index 119e6245501..64783251efa 100644
--- a/code/modules/mob/living/carbon/human/species/species.dm
+++ b/code/modules/mob/living/carbon/human/species/species.dm
@@ -72,7 +72,7 @@
// Body/form vars.
var/list/inherent_verbs // Species-specific verbs.
var/has_fine_manipulation = 1 // Can use small items.
- var/insulated // Immune to electrocution and glass shards to the feet.
+ var/siemens_coefficient = 1 // The lower, the thicker the skin and better the insulation.
var/darksight = 2 // Native darksight distance.
var/flags = 0 // Various specific features.
var/slowdown = 0 // Passive movement speed malus (or boost, if negative)
diff --git a/code/modules/mob/living/carbon/human/species/species_hud.dm b/code/modules/mob/living/carbon/human/species/species_hud.dm
index 7a041691b1c..b7b05f48c9f 100644
--- a/code/modules/mob/living/carbon/human/species/species_hud.dm
+++ b/code/modules/mob/living/carbon/human/species/species_hud.dm
@@ -6,7 +6,7 @@
var/has_pressure = 1 // Draw the pressure indicator.
var/has_nutrition = 1 // Draw the nutrition indicator.
var/has_bodytemp = 1 // Draw the bodytemp indicator.
- var/has_hands = 1 // Set to draw shand.
+ var/has_hands = 1 // Set to draw hands.
var/has_drop = 1 // Set to draw drop button.
var/has_throw = 1 // Set to draw throw button.
var/has_resist = 1 // Set to draw resist button.
@@ -18,8 +18,8 @@
// unless you know exactly what it does.
var/list/gear = list(
"i_clothing" = list("loc" = ui_iclothing, "slot" = slot_w_uniform, "state" = "center", "toggle" = 1, "dir" = SOUTH),
- "o_clothing" = list("loc" = ui_oclothing, "slot" = slot_wear_suit, "state" = "equip", "toggle" = 1, "dir" = SOUTH),
- "mask" = list("loc" = ui_mask, "slot" = slot_wear_mask, "state" = "equip", "toggle" = 1, "dir" = NORTH),
+ "o_clothing" = list("loc" = ui_oclothing, "slot" = slot_wear_suit, "state" = "equip", "toggle" = 1, "dir" = SOUTH),
+ "mask" = list("loc" = ui_mask, "slot" = slot_wear_mask, "state" = "equip", "toggle" = 1, "dir" = NORTH),
"gloves" = list("loc" = ui_gloves, "slot" = slot_gloves, "state" = "gloves", "toggle" = 1),
"eyes" = list("loc" = ui_glasses, "slot" = slot_glasses, "state" = "glasses","toggle" = 1),
"l_ear" = list("loc" = ui_l_ear, "slot" = slot_l_ear, "state" = "ears", "toggle" = 1),
@@ -51,3 +51,18 @@
equip_slots |= slot_tie
equip_slots |= slot_legcuffed
+
+/datum/hud_data/diona
+ has_internals = 0
+ gear = list(
+ "i_clothing" = list("loc" = ui_iclothing, "slot" = slot_w_uniform, "state" = "center", "toggle" = 1, "dir" = SOUTH),
+ "o_clothing" = list("loc" = ui_shoes, "slot" = slot_wear_suit, "state" = "equip", "toggle" = 1, "dir" = SOUTH),
+ "l_ear" = list("loc" = ui_gloves, "slot" = slot_l_ear, "state" = "ears", "toggle" = 1),
+ "head" = list("loc" = ui_oclothing, "slot" = slot_head, "state" = "hair", "toggle" = 1),
+ "suit storage" = list("loc" = ui_sstore1, "slot" = slot_s_store, "state" = "belt", "dir" = 8),
+ "back" = list("loc" = ui_back, "slot" = slot_back, "state" = "back", "dir" = NORTH),
+ "id" = list("loc" = ui_id, "slot" = slot_wear_id, "state" = "id", "dir" = NORTH),
+ "storage1" = list("loc" = ui_storage1, "slot" = slot_l_store, "state" = "pocket"),
+ "storage2" = list("loc" = ui_storage2, "slot" = slot_r_store, "state" = "pocket"),
+ "belt" = list("loc" = ui_belt, "slot" = slot_belt, "state" = "belt")
+ )
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/species/station/golem.dm b/code/modules/mob/living/carbon/human/species/station/golem.dm
index 137472a23a0..7d7b364f5d7 100644
--- a/code/modules/mob/living/carbon/human/species/station/golem.dm
+++ b/code/modules/mob/living/carbon/human/species/station/golem.dm
@@ -8,6 +8,7 @@
language = "Sol Common" //todo?
unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/punch)
flags = IS_RESTRICTED | NO_BREATHE | NO_PAIN | NO_BLOOD | IS_SYNTHETIC | NO_SCAN | NO_POISON
+ siemens_coefficient = 0
breath_type = null
poison_type = null
diff --git a/code/modules/mob/living/carbon/human/species/station/slime.dm b/code/modules/mob/living/carbon/human/species/station/slime.dm
index 9fc44f7e305..d573558143e 100644
--- a/code/modules/mob/living/carbon/human/species/station/slime.dm
+++ b/code/modules/mob/living/carbon/human/species/station/slime.dm
@@ -8,17 +8,23 @@
language = "Sol Common" //todo?
unarmed_types = list(/datum/unarmed_attack/slime_glomp)
flags = IS_RESTRICTED | NO_BLOOD | NO_SCAN | NO_SLIP | NO_BREATHE
+ siemens_coefficient = 3
darksight = 3
blood_color = "#05FF9B"
flesh_color = "#05FFFB"
+ remains_type = /obj/effect/decal/cleanable/ash
+ death_message = "rapidly loses cohesion, splattering across the ground..."
+
has_organ = list(
"brain" = /datum/organ/internal/brain/slime
)
- inherent_verbs = list(
- )
-
breath_type = null
- poison_type = null
\ No newline at end of file
+ poison_type = null
+
+/datum/species/slime/handle_death(var/mob/living/carbon/human/H)
+ spawn(1)
+ if(H)
+ H.gib()
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/species/station/station.dm b/code/modules/mob/living/carbon/human/species/station/station.dm
index 83fa48e48ff..91852a83d75 100644
--- a/code/modules/mob/living/carbon/human/species/station/station.dm
+++ b/code/modules/mob/living/carbon/human/species/station/station.dm
@@ -107,6 +107,9 @@
primitive = /mob/living/carbon/alien/diona
slowdown = 7
rarity_value = 3
+ hud_type = /datum/hud_data/diona
+ siemens_coefficient = 0.3
+
blurb = "Commonly referred to (erroneously) as 'plant people', the Dionaea are a strange space-dwelling collective \
species hailing from Epsilon Ursae Minoris. Each 'diona' is a cluster of numerous cat-sized organisms called nymphs; \
there is no effective upper limit to the number that can fuse in gestalt, and reports exist of the Epsilon Ursae \
diff --git a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm
index 51e466f176c..5159dba0fad 100644
--- a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm
+++ b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm
@@ -10,7 +10,7 @@
rarity_value = 3
has_fine_manipulation = 0
- insulated = 1
+ siemens_coefficient = 0
gluttonous = 2
eyes = "blank_eyes"
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index 88000af9eb2..cc053f219d5 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -388,9 +388,6 @@ proc/get_damage_icon_part(damage_state, body_part)
//tail
update_tail_showing(0)
-
-
-
//HAIR OVERLAY
/mob/living/carbon/human/proc/update_hair(var/update_icons=1)
//Reset our hair
@@ -411,7 +408,7 @@ proc/get_damage_icon_part(damage_state, body_part)
if(f_style)
var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[f_style]
- if(facial_hair_style && facial_hair_style.species_allowed && src.species.name in facial_hair_style.species_allowed)
+ if(facial_hair_style && facial_hair_style.species_allowed && (src.species.name in facial_hair_style.species_allowed))
var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s")
if(facial_hair_style.do_colouration)
facial_s.Blend(rgb(r_facial, g_facial, b_facial), ICON_ADD)
diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm
index e340909790f..f6d5de69cb7 100644
--- a/code/modules/organs/organ_external.dm
+++ b/code/modules/organs/organ_external.dm
@@ -829,8 +829,8 @@ Note that amputating the affected organ does in fact remove the infection from t
if(is_broken())
owner.u_equip(c_hand)
- var/emote_scream = pick("screams in pain and", "lets out a sharp cry and", "cries out and")
- owner.emote("me", 1, "[(owner.species && owner.species.flags & NO_PAIN) ? "" : emote_scream ] drops what they were holding in their [hand_name]!")
+ var/emote_scream = pick("screams in pain and ", "lets out a sharp cry and ", "cries out and ")
+ owner.emote("me", 1, "[(owner.species && owner.species.flags & NO_PAIN) ? "" : emote_scream ]drops what they were holding in their [hand_name]!")
if(is_malfunctioning())
owner.u_equip(c_hand)
owner.emote("me", 1, "drops what they were holding, their [hand_name] malfunctioning!")
diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm
index 7b9c9f58474..76b712d4cb9 100644
--- a/code/modules/power/power.dm
+++ b/code/modules/power/power.dm
@@ -301,10 +301,11 @@
if(istype(M.loc,/obj/mecha)) return 0 //feckin mechs are dumb
if(istype(M,/mob/living/carbon/human))
var/mob/living/carbon/human/H = M
+ if(H.species.siemens_coefficient == 0)
+ return
if(H.gloves)
var/obj/item/clothing/gloves/G = H.gloves
if(G.siemens_coefficient == 0) return 0 //to avoid spamming with insulated glvoes on
-
var/area/source_area
if(istype(power_source,/area))
source_area = power_source
diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm
index 7e11d25f9ab..bd2e5001e43 100644
--- a/code/modules/reagents/Chemistry-Reagents.dm
+++ b/code/modules/reagents/Chemistry-Reagents.dm
@@ -1594,7 +1594,7 @@ datum
id = "phoron"
description = "Phoron in its liquid form."
reagent_state = LIQUID
- color = "#E71B00" // rgb: 231, 27, 0
+ color = "#9D14DB"
toxpwr = 3
on_mob_life(var/mob/living/M as mob)