From 0189cd1dee0cf86102936b7cd9ee23cf6e92f824 Mon Sep 17 00:00:00 2001 From: Fox McCloud Date: Mon, 12 Aug 2019 01:51:29 -0400 Subject: [PATCH 1/3] Diona Rework --- code/__DEFINES/genetics.dm | 3 + code/modules/hydroponics/grown/replicapod.dm | 2 +- code/modules/mob/living/carbon/human/human.dm | 3 + .../mob/living/carbon/human/species/diona.dm | 79 ++++++++++--------- .../modules/projectiles/projectile/special.dm | 1 - .../reagents/chemistry/reagents/toxins.dm | 6 +- .../ruins/lavalandruin_code/seed_vault.dm | 2 +- code/modules/surgery/organs/subtypes/diona.dm | 16 ++-- 8 files changed, 57 insertions(+), 55 deletions(-) diff --git a/code/__DEFINES/genetics.dm b/code/__DEFINES/genetics.dm index 0fb9253a083..7213ecc3118 100644 --- a/code/__DEFINES/genetics.dm +++ b/code/__DEFINES/genetics.dm @@ -105,6 +105,9 @@ #define NUTRITION_LEVEL_STARVING 150 #define NUTRITION_LEVEL_CURSED 0 +//Used as an upper limit for species that continuously gain nutriment +#define NUTRITION_LEVEL_ALMOST_FULL 535 + //Blood levels #define BLOOD_VOLUME_MAXIMUM 2000 #define BLOOD_VOLUME_NORMAL 560 diff --git a/code/modules/hydroponics/grown/replicapod.dm b/code/modules/hydroponics/grown/replicapod.dm index c8145033545..3aaa8d87041 100644 --- a/code/modules/hydroponics/grown/replicapod.dm +++ b/code/modules/hydroponics/grown/replicapod.dm @@ -88,7 +88,7 @@ make_podman = 0 if(make_podman) //all conditions met! - var/mob/living/carbon/human/diona/podman = new /mob/living/carbon/human/diona(parent.loc) + var/mob/living/carbon/human/pod_diona/podman = new /mob/living/carbon/human/pod_diona(parent.loc) if(realName) podman.real_name = realName mind.transfer_to(podman) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 643319dc8dd..3de90c0ff38 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -106,6 +106,9 @@ /mob/living/carbon/human/diona/Initialize(mapload) ..(mapload, /datum/species/diona) +/mob/living/carbon/human/pod_diona/Initialize(mapload) + ..(mapload, /datum/species/diona/pod) + /mob/living/carbon/human/machine/Initialize(mapload) ..(mapload, /datum/species/machine) diff --git a/code/modules/mob/living/carbon/human/species/diona.dm b/code/modules/mob/living/carbon/human/species/diona.dm index bccbeb6c5a7..7ef164f8d1f 100644 --- a/code/modules/mob/living/carbon/human/species/diona.dm +++ b/code/modules/mob/living/carbon/human/species/diona.dm @@ -7,21 +7,11 @@ speech_sounds = list('sound/voice/dionatalk1.ogg') //Credit https://www.youtube.com/watch?v=ufnvlRjsOTI [0:13 - 0:16] speech_chance = 20 unarmed_type = /datum/unarmed_attack/diona - //primitive_form = "Nymph" - slowdown = 5 remains_type = /obj/effect/decal/cleanable/ash - - warning_low_pressure = 50 - hazard_low_pressure = -1 - - cold_level_1 = 50 - cold_level_2 = -1 - cold_level_3 = -1 - - heat_level_1 = 300 - heat_level_2 = 340 - heat_level_3 = 400 + burn_mod = 1.25 + heatmod = 1.5 + var/pod = FALSE //did they come from a pod? If so, they're stronger than normal Diona. 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; \ @@ -31,16 +21,14 @@ even the simplest concepts of other minds. Their alien physiology allows them survive happily off a diet of nothing but light, \ water and other radiation." - species_traits = list(NO_BREATHE, RADIMMUNE, IS_PLANT, NO_BLOOD, NO_PAIN) - dies_at_threshold = TRUE + species_traits = list(IS_PLANT) clothing_flags = HAS_SOCKS default_hair_colour = "#000000" has_gender = FALSE - dietflags = 0 //Diona regenerate nutrition in light and water, no diet necessary - taste_sensitivity = TASTE_SENSITIVITY_NO_TASTE + dietflags = DIET_HERB //Diona regenerate nutrition in light and water, no diet necessary, but if they must, they eat other plants *scream + taste_sensitivity = TASTE_SENSITIVITY_DULL skinned_type = /obj/item/stack/sheet/wood - body_temperature = T0C + 15 //make the plant people have a bit lower body temperature, why not blood_color = "#004400" flesh_color = "#907E4A" butt_sprite = "diona" @@ -49,6 +37,7 @@ has_organ = list( "nutrient channel" = /obj/item/organ/internal/liver/diona, + "respiratory vacuoles" = /obj/item/organ/internal/lungs/diona, "neural strata" = /obj/item/organ/internal/heart/diona, "receptor node" = /obj/item/organ/internal/eyes/diona, //Default darksight of 2. "gas bladder" = /obj/item/organ/internal/brain/diona, @@ -85,29 +74,43 @@ ..() H.gender = NEUTER -/datum/species/diona/handle_life(mob/living/carbon/human/H) - H.radiation = Clamp(H.radiation, 0, 100) //We have to clamp this first, then decrease it, or there's a few edge cases of massive heals if we clamp and decrease at the same time. - var/rads = H.radiation / 25 - H.radiation = max(H.radiation-rads, 0) - H.nutrition = min(H.nutrition+rads, NUTRITION_LEVEL_WELL_FED+10) - H.adjustBruteLoss(-(rads)) - H.adjustToxLoss(-(rads)) +/datum/species/diona/handle_reagents(mob/living/carbon/human/H, datum/reagent/R) + if(R.id == "glyphosate" || R.id == "atrazine") + H.adjustToxLoss(3) //Deal aditional damage + return TRUE + return ..() +/datum/species/diona/handle_life(mob/living/carbon/human/H) + if(H.stat == DEAD) + return var/light_amount = 0 //how much light there is in the place, affects receiving nutrition and healing if(isturf(H.loc)) //else, there's considered to be no light var/turf/T = H.loc - light_amount = min(T.get_lumcount() * 10, 5) //hardcapped so it's not abused by having a ton of flashlights - H.nutrition = min(H.nutrition+light_amount, NUTRITION_LEVEL_WELL_FED+10) + light_amount = min(1, T.get_lumcount()) - 0.5 + H.nutrition += light_amount * 10 + if(H.nutrition > NUTRITION_LEVEL_ALMOST_FULL) + H.nutrition = NUTRITION_LEVEL_ALMOST_FULL + if(light_amount > 0.2) //if there's enough light, heal + if(!pod && H.health <= 0) + return + H.adjustBruteLoss(-1) + H.adjustFireLoss(-1) + H.adjustToxLoss(-1) + H.adjustOxyLoss(-1) - if(light_amount > 0) - H.clear_alert("nolight") - else - H.throw_alert("nolight", /obj/screen/alert/nolight) - - if((light_amount >= 5) && !H.suiciding) //if there's enough light, heal - - H.adjustBruteLoss(-(light_amount/2)) - H.adjustFireLoss(-(light_amount/4)) - if(H.nutrition < NUTRITION_LEVEL_STARVING+50) - H.take_overall_damage(10,0) + if(H.nutrition < NUTRITION_LEVEL_STARVING + 50) + H.adjustBruteLoss(2) ..() + +/datum/species/diona/pod //Same name and everything; we want the same limitations on them; we just want their regeneration to kick in at all times and them to have special factions + pod = TRUE + +/datum/species/diona/pod/on_species_gain(mob/living/carbon/C, datum/species/old_species) + . = ..() + C.faction |= "plants" + C.faction |= "vines" + +/datum/species/diona/pod/on_species_loss(mob/living/carbon/C) + . = ..() + C.faction -= "plants" + C.faction -= "vines" \ No newline at end of file diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm index d313195a40e..e60e59af802 100644 --- a/code/modules/projectiles/projectile/special.dm +++ b/code/modules/projectiles/projectile/special.dm @@ -141,7 +141,6 @@ M.apply_effect((rand(30,80)),IRRADIATE) M.Weaken(5) M.visible_message("[M] writhes in pain as [M.p_their()] vacuoles boil.", "You writhe in pain as your vacuoles boil!", "You hear the crunching of leaves.") - if(prob(35)) if(prob(80)) randmutb(M) domutcheck(M,null) diff --git a/code/modules/reagents/chemistry/reagents/toxins.dm b/code/modules/reagents/chemistry/reagents/toxins.dm index 8048c21a283..3a1ac5554a9 100644 --- a/code/modules/reagents/chemistry/reagents/toxins.dm +++ b/code/modules/reagents/chemistry/reagents/toxins.dm @@ -988,10 +988,10 @@ C.adjustToxLoss(lethality) if(ishuman(M)) var/mob/living/carbon/human/H = M - if(IS_PLANT in H.dna.species.species_traits) //plantmen take a LOT of damage - H.adjustToxLoss(50) + if(IS_PLANT in H.dna.species.species_traits) //plantmen take extra damage + H.adjustToxLoss(3) ..() - else if(istype(M, /mob/living/simple_animal/diona)) //plantmen monkeys (diona) take EVEN MORE damage + else if(istype(M, /mob/living/simple_animal/diona)) //nymphs take EVEN MORE damage var/mob/living/simple_animal/diona/D = M D.adjustHealth(100) ..() diff --git a/code/modules/ruins/lavalandruin_code/seed_vault.dm b/code/modules/ruins/lavalandruin_code/seed_vault.dm index 21cf86b4a07..db16c7b3a71 100644 --- a/code/modules/ruins/lavalandruin_code/seed_vault.dm +++ b/code/modules/ruins/lavalandruin_code/seed_vault.dm @@ -17,7 +17,7 @@ density = TRUE roundstart = FALSE death = FALSE - mob_species = /datum/species/diona + mob_species = /datum/species/diona/pod flavour_text = "You are a sentient ecosystem, an example of the mastery over life that your creators possessed. Your masters, benevolent as they were, created uncounted \ seed vaults and spread them across the universe to every planet they could chart. You are in one such seed vault. Your goal is to cultivate and spread life wherever it will go while waiting \ for contact from your creators. Estimated time of last contact: Deployment, 5x10^3 millennia ago." diff --git a/code/modules/surgery/organs/subtypes/diona.dm b/code/modules/surgery/organs/subtypes/diona.dm index be05b2917c3..0e76c8fe20b 100644 --- a/code/modules/surgery/organs/subtypes/diona.dm +++ b/code/modules/surgery/organs/subtypes/diona.dm @@ -2,7 +2,6 @@ name = "core trunk" max_damage = 200 min_broken_damage = 50 - cannot_break = 1 amputation_point = "trunk" encased = null gendered_icon = 0 @@ -10,7 +9,6 @@ /obj/item/organ/external/groin/diona name = "fork" min_broken_damage = 50 - cannot_break = 1 amputation_point = "lower trunk" gendered_icon = 0 @@ -18,58 +16,49 @@ name = "left upper tendril" max_damage = 35 min_broken_damage = 20 - cannot_break = 1 amputation_point = "upper left trunk" /obj/item/organ/external/arm/right/diona name = "right upper tendril" max_damage = 35 min_broken_damage = 20 - cannot_break = 1 amputation_point = "upper right trunk" /obj/item/organ/external/leg/diona name = "left lower tendril" max_damage = 35 min_broken_damage = 20 - cannot_break = 1 amputation_point = "lower left fork" /obj/item/organ/external/leg/right/diona name = "right lower tendril" max_damage = 35 min_broken_damage = 20 - cannot_break = 1 amputation_point = "lower right fork" /obj/item/organ/external/foot/diona name = "left foot" max_damage = 20 min_broken_damage = 10 - cannot_break = 1 amputation_point = "branch" /obj/item/organ/external/foot/right/diona name = "right foot" max_damage = 20 min_broken_damage = 10 - cannot_break = 1 amputation_point = "branch" /obj/item/organ/external/hand/diona name = "left grasper" - cannot_break = 1 amputation_point = "branch" /obj/item/organ/external/hand/right/diona name = "right grasper" - cannot_break = 1 amputation_point = "branch" /obj/item/organ/external/head/diona max_damage = 50 min_broken_damage = 25 - cannot_break = 1 encased = null amputation_point = "upper trunk" gendered_icon = 0 @@ -82,6 +71,11 @@ icon = 'icons/obj/objects.dmi' icon_state = "nymph" +/obj/item/organ/internal/lungs/diona + name = "respiratory vacuoles" + icon = 'icons/obj/objects.dmi' + icon_state = "nymph" + /obj/item/organ/internal/brain/diona // Turns into a nymph instantly, no transplanting possible. name = "gas bladder" icon = 'icons/obj/objects.dmi' From acd31f638ac62b3f3ecb5e687fcab305adcfcc47 Mon Sep 17 00:00:00 2001 From: Fox McCloud Date: Mon, 12 Aug 2019 02:06:51 -0400 Subject: [PATCH 2/3] re-add --- code/modules/mob/living/carbon/human/species/diona.dm | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/species/diona.dm b/code/modules/mob/living/carbon/human/species/diona.dm index 7ef164f8d1f..518ee94f8f0 100644 --- a/code/modules/mob/living/carbon/human/species/diona.dm +++ b/code/modules/mob/living/carbon/human/species/diona.dm @@ -87,10 +87,14 @@ if(isturf(H.loc)) //else, there's considered to be no light var/turf/T = H.loc light_amount = min(1, T.get_lumcount()) - 0.5 + if(light_amount > 0) + H.clear_alert("nolight") + else + H.throw_alert("nolight", /obj/screen/alert/nolight) H.nutrition += light_amount * 10 if(H.nutrition > NUTRITION_LEVEL_ALMOST_FULL) H.nutrition = NUTRITION_LEVEL_ALMOST_FULL - if(light_amount > 0.2) //if there's enough light, heal + if(light_amount > 0.2 && !H.suiciding) //if there's enough light, heal if(!pod && H.health <= 0) return H.adjustBruteLoss(-1) From 6746245f1973cd7bcf29c23ed155e5d19033f21f Mon Sep 17 00:00:00 2001 From: Fox McCloud Date: Mon, 12 Aug 2019 04:34:39 -0400 Subject: [PATCH 3/3] Diona can wear space suits --- code/modules/clothing/clothing.dm | 4 ++-- code/modules/clothing/spacesuits/hardsuit.dm | 4 ++-- .../clothing/spacesuits/miscellaneous.dm | 23 +++++++++---------- 3 files changed, 15 insertions(+), 16 deletions(-) diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 4bbf68b4b7f..2212f414eaf 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -556,7 +556,7 @@ BLIND // can't see anything min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT heat_protection = HEAD max_heat_protection_temperature = SPACE_HELM_MAX_TEMP_PROTECT - species_restricted = list("exclude","Diona","Vox","Wryn") + species_restricted = list("exclude","Vox","Wryn") flash_protect = 2 strip_delay = 50 put_on_delay = 50 @@ -584,7 +584,7 @@ BLIND // can't see anything put_on_delay = 80 burn_state = FIRE_PROOF hide_tail_by_species = null - species_restricted = list("exclude","Diona","Vox","Wryn") + species_restricted = list("exclude","Vox","Wryn") //Under clothing /obj/item/clothing/under diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index ead2c04016d..a52953bdcfb 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -13,7 +13,7 @@ actions_types = list(/datum/action/item_action/toggle_helmet_light) //Species-specific stuff. - species_restricted = list("exclude","Diona","Wryn") + species_restricted = list("exclude","Wryn") sprite_sheets = list( "Unathi" = 'icons/mob/species/unathi/helmet.dmi', "Tajaran" = 'icons/mob/species/tajaran/helmet.dmi', @@ -77,7 +77,7 @@ actions_types = list(/datum/action/item_action/toggle_helmet) hide_tail_by_species = list("Vox" , "Vulpkanin" , "Unathi" , "Tajaran") - species_restricted = list("exclude","Diona","Wryn") + species_restricted = list("exclude", "Wryn") sprite_sheets = list( "Unathi" = 'icons/mob/species/unathi/suit.dmi', "Tajaran" = 'icons/mob/species/tajaran/suit.dmi', diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm index 9706b254fa8..1e5c9ad6dcb 100644 --- a/code/modules/clothing/spacesuits/miscellaneous.dm +++ b/code/modules/clothing/spacesuits/miscellaneous.dm @@ -7,7 +7,7 @@ flags_inv = HIDEFACE permeability_coefficient = 0.01 armor = list(melee = 40, bullet = 50, laser = 50, energy = 25, bomb = 50, bio = 100, rad = 50) - species_restricted = list("exclude", "Diona", "Wryn") + species_restricted = list("exclude", "Wryn") sprite_sheets = list( "Vox" = 'icons/mob/species/vox/helmet.dmi', @@ -31,7 +31,7 @@ w_class = WEIGHT_CLASS_BULKY allowed = list(/obj/item/tank, /obj/item/flashlight,/obj/item/gun/energy, /obj/item/gun/projectile, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton,/obj/item/restraints/handcuffs) armor = list(melee = 40, bullet = 50, laser = 50, energy = 25, bomb = 50, bio = 100, rad = 50) - species_restricted = list("exclude", "Diona", "Wryn") + species_restricted = list("exclude", "Wryn") sprite_sheets = list( "Vox" = 'icons/mob/species/vox/suit.dmi' @@ -72,7 +72,7 @@ allowed = list(/obj/item/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/restraints/handcuffs,/obj/item/tank,/obj/item/kitchen/knife/combat) armor = list(melee = 40, bullet = 30, laser = 30, energy = 30, bomb = 50, bio = 90, rad = 20) strip_delay = 120 - species_restricted = list("exclude", "Diona", "Wryn") + species_restricted = list("exclude", "Wryn") sprite_sheets = list( "Vox" = 'icons/mob/species/vox/suit.dmi' @@ -159,7 +159,7 @@ icon_state = "paramedic-eva-helmet" item_state = "paramedic-eva-helmet" armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 20) - species_restricted = list("exclude", "Diona", "Wryn") + species_restricted = list("exclude", "Wryn") sprite_sheets = list( "Vox" = 'icons/mob/species/vox/helmet.dmi', @@ -180,7 +180,7 @@ item_state = "paramedic-eva" desc = "A brand new paramedic EVA suit. The nitrile seems a bit too thin to be space proof. Used for retrieving bodies in space." armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 20) - species_restricted = list("exclude", "Diona", "Wryn") + species_restricted = list("exclude", "Wryn") sprite_sheets = list( "Vox" = 'icons/mob/species/vox/suit.dmi', @@ -200,7 +200,7 @@ item_state = "s_suit" desc = "A lightweight space suit with the basic ability to protect the wearer from the vacuum of space during emergencies." armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 20) - species_restricted = list("exclude", "Diona", "Wryn") + species_restricted = list("exclude", "Wryn") sprite_sheets = list( "Tajaran" = 'icons/mob/species/tajaran/suit.dmi', @@ -223,7 +223,7 @@ flags_inv = HIDEMASK|HIDEEARS|HIDEEYES armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 20) flash_protect = 0 - species_restricted = list("exclude", "Diona", "Wryn") + species_restricted = list("exclude", "Wryn") sprite_sheets = list( "Tajaran" = 'icons/mob/species/tajaran/helmet.dmi', @@ -244,7 +244,7 @@ desc = ". . ." icon_state = "spacemimehelmet" item_state = "spacemimehelmet" - species_restricted = list("exclude","Diona","Vox","Wryn") + species_restricted = list("exclude","Vox","Wryn") sprite_sheets = null sprite_sheets_obj = null @@ -254,7 +254,7 @@ desc = ". . ." icon_state = "spacemime_suit" item_state = "spacemime_items" - species_restricted = list("exclude","Diona","Vox","Wryn") + species_restricted = list("exclude","Vox","Wryn") sprite_sheets = null sprite_sheets_obj = null @@ -264,7 +264,7 @@ desc = "An EVA helmet specifically designed for the clown. SPESSHONK!" icon_state = "clownhelmet" item_state = "clownhelmet" - species_restricted = list("exclude","Diona","Vox","Wryn") + species_restricted = list("exclude","Vox","Wryn") sprite_sheets = null sprite_sheets_obj = null @@ -274,7 +274,6 @@ desc = "An EVA suit specifically designed for the clown. SPESSHONK!" icon_state = "spaceclown_suit" item_state = "spaceclown_items" - species_restricted = list("exclude","Diona","Vox","Wryn") + species_restricted = list("exclude","Vox","Wryn") sprite_sheets = null sprite_sheets_obj = null - \ No newline at end of file