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)