From bddd58a3060df6569a5463fa67cac3cbe61b70db Mon Sep 17 00:00:00 2001 From: Geeves Date: Sat, 1 Feb 2020 14:57:01 +0200 Subject: [PATCH] Unapologetic Diona Buffs (#8090) Biomass is now less strong. Diona have gotten a ton of minor code improvements, using their abilities should now be a little sane. Diona nymphs don't have to be whitelisted to grow until a full diona now. Administrative action will be taken if this right is abused. Diona gestalts can now use their biomass / arms to create biomass structures. Removed nymphs' ability to open biomass walls. It was buggy. --- code/modules/materials/materials.dm | 7 +- code/modules/mob/holder.dm | 17 +- .../carbon/alien/diona/diona_attacks.dm | 30 +- .../living/carbon/alien/diona/diona_nymph.dm | 169 ++++----- .../living/carbon/alien/diona/diona_powers.dm | 335 ++++++++++-------- .../mob/living/carbon/alien/diona/life.dm | 16 +- .../living/carbon/alien/diona/progression.dm | 55 ++- .../living/carbon/alien/diona/update_icons.dm | 3 +- .../human/species/station/diona/diona.dm | 3 +- code/modules/random_map/automata/diona.dm | 29 +- html/changelogs/geeves-dionaebuffs.yml | 11 + icons/mob/diona.dmi | Bin 12697 -> 13175 bytes icons/turf/smooth/diona_wall.dmi | Bin 2695 -> 3069 bytes icons/turf/wall_masks.dmi | Bin 59306 -> 60151 bytes 14 files changed, 349 insertions(+), 326 deletions(-) create mode 100644 html/changelogs/geeves-dionaebuffs.yml diff --git a/code/modules/materials/materials.dm b/code/modules/materials/materials.dm index 5cba4687daf..c233fc66a18 100644 --- a/code/modules/materials/materials.dm +++ b/code/modules/materials/materials.dm @@ -397,7 +397,12 @@ var/list/name_to_material icon_colour = null stack_type = null icon_base = "biomass" - integrity = 600 + integrity = 100 + // below is same as wood + melting_point = T0C + 300 + ignition_point = T0C + 288 + golem = "Wood Golem" + hitsound = 'sound/effects/woodhit.ogg' /material/diona/place_dismantled_product() return diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm index 9c881dd3d3e..3d7c0ff5da9 100644 --- a/code/modules/mob/holder.dm +++ b/code/modules/mob/holder.dm @@ -59,21 +59,6 @@ var/list/holder_mob_icon_cache = list() for(var/mob/M in contents) M.show_inv(usr) -//Mob specific holders. -/obj/item/holder/diona - icon = 'icons/mob/diona.dmi' - origin_tech = list(TECH_MAGNET = 3, TECH_BIO = 5) - slot_flags = SLOT_HEAD | SLOT_OCLOTHING | SLOT_HOLSTER - -/obj/item/holder/drone - origin_tech = list(TECH_MAGNET = 3, TECH_ENGINEERING = 5) - -/obj/item/holder/rat - w_class = 1 - -/obj/item/holder/borer - origin_tech = list(TECH_BIO = 6) - /obj/item/holder/process() if (!contained) qdel(src) @@ -370,7 +355,7 @@ var/list/holder_mob_icon_cache = list() icon_state = "nymph" icon_state_dead = "nymph_dead" origin_tech = list(TECH_MAGNET = 3, TECH_BIO = 5) - slot_flags = SLOT_HEAD | SLOT_OCLOTHING + slot_flags = SLOT_HEAD | SLOT_EARS | SLOT_HOLSTER w_class = 2 /obj/item/holder/drone diff --git a/code/modules/mob/living/carbon/alien/diona/diona_attacks.dm b/code/modules/mob/living/carbon/alien/diona/diona_attacks.dm index 177d32d14ef..c3ce56b6f9b 100644 --- a/code/modules/mob/living/carbon/alien/diona/diona_attacks.dm +++ b/code/modules/mob/living/carbon/alien/diona/diona_attacks.dm @@ -1,11 +1,11 @@ -/mob/living/carbon/alien/diona/attack_hand(mob/living/carbon/human/M as mob) - if(istype(M) && M.a_intent == I_HELP && !(src.stat & DEAD)) - if(M.species && M.species.name == "Diona" && do_merge(M)) +/mob/living/carbon/alien/diona/attack_hand(mob/living/carbon/human/M) + if(istype(M) && M.a_intent == I_HELP && !stat) + if(M.is_diona() && do_merge(M)) return - M.visible_message("[M] pets the [src]") + M.visible_message(span("notice", "[M] pets \the [src].")) return - else if (src.stat & DEAD) - get_scooped(M) + else if (stat == DEAD) + get_scooped(M) // GET SCOOPED - geeves ..() //#TODO-MERGE: Test nymph hats @@ -16,33 +16,31 @@ if(H.a_intent == I_HELP) if(H.species && H.species.name == "Diona" && do_merge(H)) return - get_scooped(H) + get_scooped(H) // GET SCOOPED - geeves return - else if(H.a_intent == "grab" && hat && !(H.l_hand && H.r_hand)) + else if(H.a_intent == I_GRAB && hat && !(H.l_hand && H.r_hand)) hat.forceMove(get_turf(src)) H.put_in_hands(hat) - H.visible_message("\The [H] removes \the [src]'s [hat].") + H.visible_message(span("warning", "\The [H] removes \the [src]'s [hat].")) hat = null update_icons() else return ..() /mob/living/carbon/alien/diona/attackby(var/obj/item/W, var/mob/user) - if(user.a_intent == "help" && istype(W, /obj/item/clothing/head)) + if(user.a_intent == I_HELP && istype(W, /obj/item/clothing/head)) if(hat) - to_chat(user, "\The [src] is already wearing \the [hat].") + to_chat(user, span("warning", "\The [src] is already wearing \the [hat].")) return user.unEquip(W) wear_hat(W) - user.visible_message("\The [user] puts \the [W] on \the [src].") + user.visible_message(span("notice", "\The [user] puts \the [W] on \the [src].")) return else if(istype(W, /obj/item/reagent_containers) || istype(W, /obj/item/stack/medical) || istype(W,/obj/item/gripper/)) ..(W, user) return - else if(meat_type && (stat == DEAD)) //if the animal has a meat, and if it is dead. - if(istype(W, /obj/item/material/knife) || istype(W, /obj/item/material/kitchen/utensil/knife )) + if(istype(W, /obj/item/material/knife) || istype(W, /obj/item/material/kitchen/utensil/knife)) harvest(user) return - - ..(W, user) + ..(W, user) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/alien/diona/diona_nymph.dm b/code/modules/mob/living/carbon/alien/diona/diona_nymph.dm index 87f2a4cab7b..0120d8e8984 100644 --- a/code/modules/mob/living/carbon/alien/diona/diona_nymph.dm +++ b/code/modules/mob/living/carbon/alien/diona/diona_nymph.dm @@ -1,6 +1,5 @@ -#define evolve_nutrition 4000//when a nymph gathers this much nutrition, it can evolve into a gestalt - +#define evolve_nutrition 4000 //when a nymph gathers this much nutrition, it can evolve into a gestalt //Diona time variables, these differ slightly between a gestalt and a nymph. All values are times in seconds /mob/living/carbon/alien/diona @@ -8,9 +7,9 @@ language = null mob_size = 4 density = 0 - mouth_size = 2//how large of a creature it can swallow at once, and how big of a bite it can take out of larger things - eat_types = 0//This is a bitfield which must be initialised in New(). The valid values for it are in devour.dm - composition_reagent = "nutriment"//Dionae are plants, so eating them doesn't give animal protein + mouth_size = 2 //how large of a creature it can swallow at once, and how big of a bite it can take out of larger things + eat_types = 0 //This is a bitfield which must be initialised in New(). The valid values for it are in devour.dm + composition_reagent = "nutriment" //Dionae are plants, so eating them doesn't give animal protein name = "diona nymph" voice_name = "diona nymph" adult_form = /mob/living/carbon/human @@ -18,8 +17,8 @@ icon = 'icons/mob/diona.dmi' icon_state = "nymph" death_msg = "expires with a pitiful chirrup..." - universal_understand = 0 - universal_speak = 0 + universal_understand = FALSE + universal_speak = FALSE holder_type = /obj/item/holder/diona meat_type = /obj/item/reagent_containers/food/snacks/meat/dionanymph meat_amount = 2 @@ -39,11 +38,11 @@ var/dark_survival = 216 // How long this diona can survive in darkness after energy is gone, before it dies var/datum/dionastats/DS var/mob/living/carbon/gestalt = null // If set, then this nymph is inside a gestalt - var/kept_clean = 0 + var/kept_clean = FALSE var/mob/living/carbon/alien/diona/master_nymph //nymph who owns this nymph if split. AI diona nymphs will follow this nymph, and these nymphs can be controlled by the master. var/list/mob/living/carbon/alien/diona/birds_of_feather = list() //list of all related nymphs - var/echo = 0 //if it's an echo nymph, which has unique properties + var/echo = FALSE //if it's an echo nymph, which has unique properties var/detached = FALSE var/datum/reagents/metabolism/ingested @@ -68,7 +67,7 @@ master_nymph = null birds_of_feather.Cut() - kept_clean = 1 + kept_clean = TRUE /mob/living/carbon/alien/diona/flowery/Initialize(var/mapload) @@ -77,13 +76,13 @@ /mob/living/carbon/alien/diona/movement_delay() . = ..() switch(m_intent) - if ("walk") + if("walk") . += 3 - if ("run") + if("run") species.handle_sprint_cost(src,.+config.walk_speed) /mob/living/carbon/alien/diona/ex_act(severity) - if (life_tick < 4) + if(life_tick < 4) //If a nymph was just born, then it already took damage from the ex_act on its gestalt //So we ignore any farther damage for a couple ticks after its born, to prevent it getting hit twice by the same blast return @@ -98,7 +97,7 @@ set_species("Diona") setup_dionastats() eat_types |= TYPE_ORGANIC - nutrition = 0//We dont start with biomass + nutrition = 0 //We dont start with biomass update_verbs() sampled_DNA = list() language_progress = list() @@ -119,26 +118,24 @@ else if (light <= 3) to_chat(usr, span("notice", "This light is comfortable and warm, Quite adequate for our needs.")) else - to_chat(usr, span("notice", "This warm radiance is bliss. Here we are safe and energised! Stay a while..")) + to_chat(usr, span("notice", "This warm radiance is bliss. Here we are safe and energised! Stay a while...")) /mob/living/carbon/alien/diona/start_pulling(var/atom/movable/AM) //TODO: Collapse these checks into one proc (see pai and drone) if(istype(AM,/obj/item)) var/obj/item/O = AM if(O.w_class > 2) - to_chat(src, "You are too small to pull that.") + to_chat(src, span("warning", "You are too small to pull that.")) return else ..() else - to_chat(src, "You are too small to pull that.") + to_chat(src, span("warning", "You are too small to pull that.")) return /mob/living/carbon/alien/diona/put_in_hands(var/obj/item/W) // No hands. W.forceMove(get_turf(src)) - return 1 - - + return TRUE //Functions duplicated from humans, albeit slightly modified /mob/living/carbon/alien/diona/proc/set_species(var/new_species) @@ -156,8 +153,7 @@ new_species = "Human" if(species) - - if(species.name && species.name == new_species) + if(species.name == new_species) return if(species.language) remove_language(species.language) @@ -175,28 +171,20 @@ holder_type = species.holder_type icon_state = lowertext(species.name) - species.handle_post_spawn(src) - maxHealth = species.total_health - - spawn(0) - regenerate_icons() - make_blood() + regenerate_icons() + make_blood() // Rebuild the HUD. If they aren't logged in then login() should reinstantiate it for them. - if(client && client.screen) + if(client?.screen) client.screen.len = null if(hud_used) qdel(hud_used) hud_used = new /datum/hud(src) - - if(species) - return 1 - else - return 0 + return !!species /mob/living/carbon/alien/diona/proc/make_blood() @@ -227,23 +215,23 @@ B.color = B.data["blood_colour"] /mob/living/carbon/alien/diona/proc/setup_dionastats() - var/MLS = (1.5 / 2.1)//Maximum energy lost per second, in total darkness + var/MLS = (1.5 / 2.1) //Maximum energy lost per second, in total darkness DS = new/datum/dionastats() DS.max_energy = energy_duration * MLS DS.stored_energy = (DS.max_energy / 2) DS.max_health = maxHealth DS.pain_factor = (50 / dark_consciousness) / MLS DS.trauma_factor = (DS.max_health / dark_survival) / MLS - DS.dionatype = 1//Nymph + DS.dionatype = DIONA_NYMPH //This is called periodically to register or remove this nymph's status as a bad organ of the gestalt //This is used to notify the gestalt when it needs repaired /mob/living/carbon/alien/diona/proc/check_status_as_organ() - if (istype(gestalt, /mob/living/carbon/human) && !QDELETED(gestalt)) + if(ishuman(gestalt) && !QDELETED(gestalt)) var/mob/living/carbon/human/H = gestalt if(!H.bad_internal_organs) return - if (health < maxHealth) + if(health < maxHealth) if (!(src in H.bad_internal_organs)) H.bad_internal_organs.Add(src) else @@ -252,55 +240,41 @@ //This function makes sure the nymph has the correct split/merge verbs, depending on whether or not its part of a gestalt /mob/living/carbon/alien/diona/proc/update_verbs() - if (gestalt && !detached) - if (!(/mob/living/carbon/alien/diona/proc/split in verbs)) - verbs.Add(/mob/living/carbon/alien/diona/proc/split) - - verbs.Remove(/mob/living/proc/ventcrawl) - verbs.Remove(/mob/living/proc/hide) - verbs.Remove(/mob/living/carbon/alien/diona/proc/grow) - verbs.Remove(/mob/living/carbon/alien/diona/proc/merge) - verbs.Remove(/mob/living/carbon/proc/absorb_nymph) - verbs.Remove(/mob/living/carbon/alien/diona/proc/sample) + if(gestalt && !detached) + verbs -= /mob/living/proc/ventcrawl + verbs -= /mob/living/proc/hide + verbs -= /mob/living/carbon/alien/diona/proc/grow + verbs -= /mob/living/carbon/alien/diona/proc/merge + verbs -= /mob/living/carbon/proc/absorb_nymph + verbs -= /mob/living/carbon/alien/diona/proc/sample + verbs |= /mob/living/carbon/alien/diona/proc/split else - if (!(/mob/living/carbon/alien/diona/proc/merge in verbs) && !detached) - verbs.Add(/mob/living/carbon/alien/diona/proc/merge) + verbs |= /mob/living/carbon/alien/diona/proc/merge + verbs |= /mob/living/carbon/proc/absorb_nymph + verbs |= /mob/living/carbon/alien/diona/proc/grow + verbs |= /mob/living/proc/ventcrawl + verbs |= /mob/living/proc/hide + verbs |= /mob/living/carbon/alien/diona/proc/sample + verbs -= /mob/living/carbon/alien/diona/proc/split // we want to remove this one - if (!(/mob/living/carbon/proc/absorb_nymph in verbs)) - verbs.Add(/mob/living/carbon/proc/absorb_nymph) - - if (!(/mob/living/carbon/alien/diona/proc/grow in verbs)) - verbs.Add(/mob/living/carbon/alien/diona/proc/grow) - - if (!(/mob/living/proc/ventcrawl in verbs)) - verbs.Add(/mob/living/proc/ventcrawl) - - if (!(/mob/living/proc/hide in verbs)) - verbs.Add(/mob/living/proc/hide) - - if (!(/mob/living/carbon/alien/diona/proc/sample in verbs)) - verbs.Add(/mob/living/carbon/alien/diona/proc/sample) - - verbs.Remove(/mob/living/carbon/alien/diona/proc/split) - - verbs.Remove(/mob/living/carbon/alien/verb/evolve)//We don't want the old alien evolve verb + verbs -= /mob/living/carbon/alien/verb/evolve //We don't want the old alien evolve verb /mob/living/carbon/alien/diona/Stat() ..() - if (statpanel("Status")) + if(statpanel("Status")) stat(null, text("Biomass: [nutrition]/[evolve_nutrition]")) - if (nutrition > evolve_nutrition) + if(nutrition > evolve_nutrition) stat(null, text("You have enough biomass to grow!")) //Overriding this function from /mob/living/carbon/alien/life.dm /mob/living/carbon/alien/diona/handle_regular_status_updates() - - if(status_flags & GODMODE) return 0 + if(status_flags & GODMODE) + return FALSE if(stat == DEAD) - blinded = 1 - silent = 0 + blinded = TRUE + silent = FALSE else updatehealth() handle_stunned() @@ -308,38 +282,37 @@ if(health <= 0) cleanupTransfer() death() - blinded = 1 - silent = 0 - return 1 + blinded = TRUE + silent = FALSE + return TRUE if(getHalLoss() > 50) paralysis = 8 - if(paralysis && paralysis > 0) handle_paralysed() - blinded = 1 + blinded = TRUE stat = UNCONSCIOUS if(sleeping) - if (mind) - if(mind.active && client != null) + if(mind) + if(mind.active && client) sleeping = max(sleeping-1, 0) - blinded = 1 + blinded = TRUE stat = UNCONSCIOUS else if(resting) - + // insert dial up tone else stat = CONSCIOUS // Eyes and blindness. if(!has_eyes()) - eye_blind = 1 - blinded = 1 - eye_blurry = 1 + eye_blind = TRUE + blinded = TRUE + eye_blurry = TRUE else if(eye_blind) eye_blind = max(eye_blind-1,0) - blinded = 1 + blinded = TRUE else if(eye_blurry) eye_blurry = max(eye_blurry-1, 0) @@ -352,10 +325,10 @@ update_icons() - return 1 + return TRUE /mob/living/carbon/alien/diona/Destroy() - walk_to(src,0) + walk_to(src, 0) cleanupTransfer() . = ..() @@ -371,23 +344,23 @@ var/mob/living/carbon/alien/diona/D = A if(D.master_nymph == src) //if the nymph is subservient to you mind.transfer_to(D) - D.stunned = 0//Switching mind seems to temporarily stun mobs + D.stunned = 0 // Switching mind seems to temporarily stun mobs for(var/mob/living/carbon/alien/diona/DIO in src.birds_of_feather) //its me! DIO.master_nymph = D - return 1 + return TRUE . = ..() /mob/living/carbon/alien/diona/proc/harvest(var/mob/user) - var/actual_meat_amount = max(1,(meat_amount*0.75)) - if(meat_type && actual_meat_amount>0 && (stat == DEAD)) - for(var/i=0;i 0 && (stat == DEAD)) + for(var/i = 0; i < actual_meat_amount; i++) var/obj/item/meat = new meat_type(get_turf(src)) - if (meat.name == "meat") + if(meat.name == "meat") meat.name = "[src.name] [meat.name]" if(issmall(src)) - user.visible_message("[user] chops up \the [src]!") + user.visible_message(span("warning", "[user] chops up \the [src]!")) new/obj/effect/decal/cleanable/blood/splatter(get_turf(src)) qdel(src) else - user.visible_message("[user] butchers \the [src] messily!") - gib() \ No newline at end of file + user.visible_message(span("warning", "[user] butchers \the [src] messily!")) + gib() diff --git a/code/modules/mob/living/carbon/alien/diona/diona_powers.dm b/code/modules/mob/living/carbon/alien/diona/diona_powers.dm index 889f9dceffc..09eedaac9a7 100644 --- a/code/modules/mob/living/carbon/alien/diona/diona_powers.dm +++ b/code/modules/mob/living/carbon/alien/diona/diona_powers.dm @@ -1,29 +1,22 @@ -//Verbs after this point. - - //Merge: //Joins yourself into an existing gestalt, becoming just a small part of it //The nymph player moves inside the gestalt and no longer has control of movement or actions /mob/living/carbon/alien/diona/proc/merge() - set category = "Abilities" set name = "Merge with gestalt" set desc = "Merge yourself into a larger gestalt, you will no longer retain control." - if(stat == DEAD || paralysis || weakened || stunned || restrained()) - return + if(use_check_and_message(usr)) + return FALSE var/list/choices = list() - for(var/mob/living/carbon/C in view(1,src)) + for(var/mob/living/carbon/human/H in view(1, src)) + if(!Adjacent(H) || !H.client) + continue + if(is_diona(H) == DIONA_WORKER) + choices += H - if(!(src.Adjacent(C)) || !(C.client)) continue - - if(istype(C,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = C - if(H.species && H.species.name == "Diona" && H.client) - choices += H - - var/mob/living/M = input(src,"Who do you wish to merge with?") in null|choices + var/mob/living/M = input(src, "Who do you wish to merge with?") in null|choices if(!M) to_chat(src, span("warning", "There are no active gestalts nearby to merge with.")) @@ -32,40 +25,38 @@ /mob/living/carbon/alien/diona/proc/do_merge(var/mob/living/carbon/human/H) - if(!istype(H) || !src || !(src.Adjacent(H))) - return 0 + if(!istype(H) || !Adjacent(H)) + return FALSE to_chat(src, span("warning", "Requesting consent from [H]")) - var/r = alert(H,"[src] wishes to join your collective, and become a part of your gestalt. If you accept they will become an equal part of you, though you will remain in control?", "[src] wishes to join you", "Welcome!", "No, leave us..") - if (r != "Welcome!") + var/r = alert(H, "[src] wishes to join your collective, and become a part of your gestalt. If you accept they will become an equal part of you, though you will remain in control.", "[src] wishes to join you", "Welcome!", "No, leave us..") + if(r != "Welcome!") to_chat(src, span("warning", "[H.name] has rejected your wish to merge!")) - return 0 + return FALSE - H.visible_message(span("warning", "[H] starts absorbing [src] into its body"), span("warning", "You start absorbing [src]. This will take 15 seconds and both of you must remain still"), span("warning", "You hear a strange, alien. sucking sound")) - to_chat(src, "You feel yourself slowly becoming part of something greater, remain still to finish.") + H.visible_message(span("warning", "[H] starts absorbing [src] into its body."), span("warning", "You start absorbing [src]. This will take 15 seconds and both of you must remain still."), span("warning", "You hear a strange, alien, sucking noise.")) + to_chat(src, span("notice", "You feel yourself slowly becoming part of something greater, remain still to finish.")) face_atom(H) H.face_atom(get_turf(src)) - if(do_mob(src, H, 150, needhand = 0)) - if (!(src.Adjacent(H)) || !(istype(src.loc, /turf)))//The loc check prevents us from absorbing the same nymph multiple times at once + if(do_mob(src, H, 150, needhand = FALSE)) + if(!Adjacent(H) || !isturf(loc)) //The loc check prevents us from absorbing the same nymph multiple times at once to_chat(src, span("warning", "Something went wrong while trying to merge into [H], cancelling.")) - return 0 + return FALSE gestalt = H sync_languages(gestalt) update_verbs() - sleep(2)//Altering the verbs list takes some time and it wont complete after the nymph is moved in. This sleep is necessary - to_chat(H, "You feel your being twine with that of \the [src] as it merges with your biomass.") + sleep(2) //Altering the verbs list takes some time and it wont complete after the nymph is moved in. This sleep is necessary + to_chat(H, span("notice", "You feel your being twine with that of \the [src] as it merges with your biomass.")) H.status_flags |= PASSEMOTES - to_chat(src, "You feel your being twine with that of \the [H] as you merge with its biomass.") + to_chat(src, span("notice", "You feel your being twine with that of \the [H] as you merge with its biomass.")) for(var/obj/O in src.contents) drop_from_inventory(O) src.forceMove(H) else to_chat(src, span("warning", "Something went wrong while trying to merge into [H], cancelling.")) - return 0 - - - return 1 + return FALSE + return TRUE @@ -79,70 +70,66 @@ set category = "Abilities" set name = "Absorb Nymph" set desc = "Absorb a diona nymph into yourself, you will remain in control and gain any biomass it has absorbed." + var/list/choices = list() - for(var/mob/living/carbon/alien/diona/C in view(1,src)) + for(var/mob/living/carbon/alien/diona/C in view(1, src)) + if(!Adjacent(C) || C.gestalt || C == src) //cant steal nymphs right out of other gestalts + continue + choices += C - if((!(src.Adjacent(C)) || C.gestalt || C == src)) continue//cant steal nymphs right out of other gestalts - choices.Add(C) - - var/mob/living/carbon/alien/diona/M = input(src,"Which nymph do you wish to absorb?") in null|choices + var/mob/living/carbon/alien/diona/M = input(src, "Which nymph do you wish to absorb?") in null|choices if(!M) - to_chat(src, span("warning", "There is nothing nearby to absorb")) + to_chat(src, span("warning", "There are no nymphs in your vicinity.")) else if(!do_absorb(M)) to_chat(src, span("warning", "You fail to merge with \the [M]...")) /mob/living/carbon/proc/do_absorb(var/mob/living/carbon/alien/diona/D) - if (D.key) + if(D.key) //Code for requesting permission goes here. We will return if its denied or ignored - to_chat(src, span("warning", "Requesting consent from [D]")) - var/r = alert(D,"[src] wishes to absorb your being, and make you a part of their gestalt. If you accept you will join with them, and give up control to be a part of their collective. \nYou will be part of their larger gestalt if they grow later, too, and all of your stored biomass will be transferred to them. You can split away at anytime, but you cannot reclaim the biomass. Do you wish to be absorbed?", "[src] wishes to absorb you", "Yes, we will join!", "No, i wish to remain alone") - if (r != "Yes, we will join!") + to_chat(src, span("warning", "Requesting consent from [D].")) + var/r = alert(D,"[src] wishes to absorb your being, and make you a part of their gestalt. If you accept you will join with them, and give up control to be a part of their collective. \nYou will be part of their larger gestalt if they grow later, too, and all of your stored biomass will be transferred to them. You can split away at anytime, but you cannot reclaim the biomass. Do you wish to be absorbed?", "[src] wishes to absorb you", "Yes, I will join!", "No, I wish to remain alone!") + if(r != "Yes, I will join!") to_chat(src, span("warning", "[D] has refused to join you!")) return - else - if (!(src.Adjacent(D)) || !(istype(D.loc, /turf))) - to_chat(src, span("warning", "Something went wrong while trying to absorb [D], cancelling.")) - return - - src.visible_message(span("warning", "[src] starts absorbing [D] into its body"), span("warning", "You start absorbing [D]. This will take 15 seconds and both of you must remain still"), span("warning", "You hear a strange, alien. sucking sound")) - to_chat(D, "You feel yourself slowly becoming part of something greater, remain still to finish.") - face_atom(D) - D.face_atom(get_turf(src)) - if(do_mob(src, D, 150, needhand = 0)) - if (!(src.Adjacent(D)) || !(istype(D.loc, /turf)))//The loc check prevents us from absorbing the same nymph multiple times at once - to_chat(src, span("warning", "Something went wrong while trying to absorb [D], cancelling.")) + else if(!Adjacent(D) || !isturf(D.loc)) + to_chat(src, span("warning", "\The [D] must remain close to the collective if \he wishes to be part of us.")) return - if (D.stat == DEAD) + src.visible_message(span("warning", "[src] starts absorbing [D] into its body."), span("warning", "You start absorbing [D]. This will take 15 seconds and both of you must remain still."), span("warning", "You hear a strange, alien, sucking noise.")) + to_chat(D, span("notice", "You feel yourself slowly becoming part of something greater, remain still to finish.")) + face_atom(D) + D.face_atom(get_turf(src)) + if(do_mob(src, D, 150, needhand = FALSE)) + if(!Adjacent(D) || !isturf(D.loc)) //The loc check prevents us from absorbing the same nymph multiple times at once + to_chat(src, span("warning", "\The [D] must remain close to the collective if \he wishes to be part of us.")) + return + + if(D.stat == DEAD) src.adjustNutritionLoss(-NYMPH_ABSORB_NUTRITION * NYMPH_ABSORB_DEAD_FACTOR) qdel(D) - return 1 + return TRUE else - D.gestalt = src D.sync_languages(D.gestalt) D.update_verbs() sleep(2) - if (is_diona() == DIONA_NYMPH)//We only care about biomass if we're a nymph + if(is_diona() == DIONA_NYMPH) //We only care about biomass if we're a nymph src.adjustNutritionLoss(-NYMPH_ABSORB_NUTRITION) src.adjustNutritionLoss(-D.nutrition) - D.nutrition = 0 - - to_chat(D, "You feel your being twine with that of \the [src] as you merge with its biomass.") - to_chat(src, "You feel your being twine with that of \the [D] as it merges with your biomass.") + D.nutrition = FALSE + to_chat(D, span("notice", "You feel your being entwine with that of \the [src] as you merge with its biomass.")) + to_chat(src, span("notice", "You feel your being entwine with that of \the [D] as it merges with your biomass.")) for(var/obj/O in D.contents) D.drop_from_inventory(O) D.forceMove(src) - D.stat = CONSCIOUS status_flags |= PASSEMOTES - return 1 - + return TRUE else - return 0 + return FALSE //Split allows a nymph to peel away from a gestalt and be a lone agent /mob/living/carbon/alien/diona/proc/split() @@ -150,29 +137,29 @@ set name = "Break from gestalt" set desc = "Split away from your gestalt as a lone nymph." - if(stat == DEAD || paralysis || weakened || stunned || restrained()) - return + if(use_check_and_message(usr)) + return FALSE if(echo) - to_chat(src, "Your host is still storing you as a nymphatic husk and preventing your departure.") + to_chat(src, span("notice", "Your host is still storing you as a nymphatic husk and preventing your departure.")) return - if(!(istype(src.loc,/mob/living/carbon))) - src.verbs -= /mob/living/carbon/alien/diona/proc/split + if(!iscarbon(loc)) + verbs -= /mob/living/carbon/alien/diona/proc/split return - var/r = alert(src,"Splitting will remove you from your gestalt and deposit you on the ground, allowing you to go it alone. If you had any stored biomass before you joined the gestalt, you will not get it back. Are you sure you wish to split?", "Confirm Split", "Time to leaf", "I'll stick around") - if (r != "Time to leaf") + var/r = alert(src, "Splitting will remove you from your gestalt and deposit you on the ground, allowing you continue alone. If you had any stored biomass before you joined the gestalt, you will not get it back. Are you sure you wish to split?", "Confirm Split", "I am ready to leave.", "I'll stick around.") + if(r != "I am ready to leave.") return - to_chat(src.loc, "You feel a pang of loss as [src] splits away from your biomass.") - to_chat(src, "You wiggle out of the depths of [src.loc]'s biomass and plop to the ground.") + to_chat(gestalt, span("warning", "You feel a pang of loss as [src] splits away from your biomass.")) + to_chat(src, span("notice", "You wiggle out of the depths of [gestalt]'s biomass and plop to the ground.")) - if (gestalt.is_diona() == DIONA_NYMPH) + if(gestalt.is_diona() == DIONA_NYMPH) gestalt.adjustNutritionLoss(NYMPH_ABSORB_NUTRITION) split_languages(gestalt) - src.forceMove(get_turf(src)) + forceMove(get_turf(src)) stat = CONSCIOUS gestalt = null update_verbs() @@ -185,75 +172,76 @@ //For fun factor, we'll allow the nymph to choose nonvalid targets var/list/choices = list() - for(var/mob/living/L in view(1,src)) + for(var/mob/living/L in view(1, src)) + if(!Adjacent(L) || L == src) + continue + if(is_diona(L)) + continue + choices += L - if((!(src.Adjacent(L)) || L == src)) continue - choices.Add(L) - - if (!choices.len) + if(!choices.len) to_chat(src, span("warning", "There are no life forms nearby to sample!")) return - if (choices.len == 1) - choices.Add("Cancel") + if(choices.len) + choices += "Cancel" - var/mob/living/donor = input(src,"Who do you wish to drain?") in null|choices + var/mob/living/donor = input(src, "Who do you wish to sample?") in null|choices - if (!donor || donor == "Cancel")//they cancelled + if(!donor || donor == "Cancel") //they cancelled return face_atom(donor) var/types = donor.find_type() - if (types & TYPE_SYNTHETIC) - src.visible_message("[src] attempts to bite into [donor.name] but leaps back in surprise as its fangs hit metal.", "You attempt to sink your fangs into [donor.name] and get a faceful of unyielding steel as the force breaks several fine protrusions in your mouth.") + if(types & TYPE_SYNTHETIC) + src.visible_message(span("danger", "[src] attempts to bite into [donor.name] but leaps back in surprise as its fangs hit metal."), span("danger", "You attempt to sink your fangs into [donor.name] and get a faceful of unyielding steel as the force breaks several fine protrusions in your mouth.")) donor.adjustBruteLoss(2) - src.adjustBruteLoss(15)//biting metal hurts! + src.adjustBruteLoss(15) //biting metal hurts! return else if (isanimal(donor) && (types & TYPE_ORGANIC) && donor.stat != DEAD) - src.visible_message("[src] bites into [donor.name] and drains some of their blood", "You bite into [donor.name] and drain some blood.") - to_chat(src, "This simple creature has insufficient intelligence for you to learn anything!") + src.visible_message(span("danger", "[src] bites into [donor.name] and drains some of their blood."), span("danger", "You bite into [donor.name] and drain some of their blood.")) + to_chat(src, span("danger", "This simple creature has insufficient intelligence for you to learn anything!")) donor.adjustBruteLoss(4) adjustNutritionLoss(-20) return else if (types & TYPE_WEIRD) - src.visible_message("[src] attempts to bite into [donor.name] but passes right through it!.", "You attempt to sink your fangs into [donor.name] but pass right through it!") + src.visible_message(span("danger", "[src] attempts to bite into [donor.name] but passes right through it!."), span("danger", "You attempt to sink your fangs into [donor.name] but pass right through it!")) return - else if (donor.is_diona()) - to_chat(src, span("warning", "You can't sample the DNA of other diona!")) - return - else if (istype(donor, /mob/living/carbon)) + else if (iscarbon(donor)) + var/mob/living/carbon/D = donor //If we get here, it's -probably- valid - src.visible_message("[src] is trying to bite [donor.name]", span("danger", "You start biting [donor.name], you both must stay still!")) - face_atom(get_turf(donor)) - if (do_mob(src, donor, 40, needhand = 0)) - + src.visible_message(span("danger", "[src] is trying to bite [D.name]."), span("danger", "You start biting [D.name], you both must stay still!")) + face_atom(get_turf(D)) + if(do_mob(src, D, 40, needhand = FALSE)) //Attempt to find the blood vessel, but don't create a fake one if its not there. //If the target doesn't have a vessel its probably due to someone not implementing it properly, like xenos //We'll still allow it - var/datum/reagents/vessel = donor.get_vessel(1) + var/datum/reagents/vessel = D.get_vessel(1) var/newDNA var/datum/reagent/blood/B = vessel.get_master_reagent() var/total_blood = B.volume - var/remove_amount = (total_blood - 280) * 0.3 - if (remove_amount > 0) - vessel.remove_reagent("blood", remove_amount, 1)//85 units of blood is enough to affect a human and make them woozy - adjustNutritionLoss(-remove_amount*0.5) + var/remove_amount = total_blood * 0.05 + if(ishuman(D)) + var/mob/living/carbon/human/H = D + remove_amount = H.species.blood_volume * 0.05 + if(remove_amount > 0) + vessel.remove_reagent("blood", remove_amount, TRUE) + adjustNutritionLoss(-remove_amount * 0.5) var/list/data = vessel.get_data("blood") newDNA = data["blood_DNA"] - if (!newDNA)//Fallback. Adminspawned mobs, and possibly some others, have null dna. - newDNA = md5("\ref[donor]") + if(!newDNA) //Fallback. Adminspawned mobs, and possibly some others, have null dna. + newDNA = md5("\ref[D]") - donor.adjustBruteLoss(4) - src.visible_message("[src] sucks some blood from [donor.name]", "You extract a delicious mouthful of blood from [donor.name]!") + D.adjustBruteLoss(4) + src.visible_message(span("notice", "[src] sucks some blood from [D.name].") , span("notice", "You extract a delicious mouthful of blood from [D.name]!")) - if (newDNA in sampled_DNA) - to_chat(src, "You have already sampled the DNA of this creature before, you can learn nothing new. Move onto something else.") + if(newDNA in sampled_DNA) + to_chat(src, span("danger", "You have already sampled the DNA of this creature before, you can learn nothing new. Move onto something else.")) return - else sampled_DNA.Add(newDNA) @@ -264,31 +252,31 @@ //2 = We learned something! //Now we sample their languages! - for (var/datum/language/L in donor.languages) + for(var/datum/language/L in D.languages) learned = max(learned, 1) if (!(L in languages) && !(L in diona_banned_languages)) //We don't know this language, and we can learn it! var/current_progress = language_progress[L.name] current_progress += 1 language_progress[L.name] = current_progress - to_chat(src, "You come a little closer to learning [L.name]!") + to_chat(src, span("notice", "You come a little closer to learning [L.name]!")) learned = 2 - if (!learned) - to_chat(src, "This creature doesn't know any languages at all!") + if(!learned) + to_chat(src, span("danger", "This creature doesn't know any languages at all!")) else if (learned == 1) - to_chat(src, "We have nothing more to learn from this creature. Perhaps try a different species?") + to_chat(src, span("danger", "We have nothing more to learn from this creature. Perhaps try a different sample?")) update_languages() else - to_chat(src, span("warning", "Something went wrong while trying to sample [donor], both you and the target must remain still.")) + to_chat(src, span("warning", "Something went wrong while trying to sample [D], both you and the target must remain still.")) //Checks progress on learned languages /mob/living/carbon/alien/diona/proc/update_languages() - for (var/i in language_progress) - if (language_progress[i] >= LANGUAGE_POINTS_TO_LEARN) + for(var/i in language_progress) + if(language_progress[i] >= LANGUAGE_POINTS_TO_LEARN) add_language(i) - to_chat(src, "You have mastered the [i] language!") + to_chat(src, span("notice", "You have mastered the [i] language!")) language_progress.Remove(i) /mob/living/carbon/alien/diona/proc/transferMind(var/atom/A) @@ -299,11 +287,11 @@ for(var/mob/living/carbon/alien/diona/D in view(7)) if(D.master_nymph == src && mind && !client) //if the nymph is subservient to you mind.transfer_to(D) - D.stunned = 0//Switching mind seems to temporarily stun mobs + D.stunned = 0 //Switching mind seems to temporarily stun mobs for(var/mob/living/carbon/alien/diona/DIO in src.birds_of_feather) //its me! DIO.master_nymph = D break - return 1 + return TRUE ..() /mob/living/carbon/proc/echo_eject() @@ -311,33 +299,27 @@ set name = "Eject Echo" set desc = "Eject any nymphatic husks." - if(stat == DEAD || paralysis || weakened || stunned || restrained()) - return + if(use_check_and_message(usr)) + return FALSE - var/energy - - var/r = alert(src,"Do you choose to eject echoes as nymphs or energy?", "Identify Waste", "Energy", "Nymphs") - if (r == "Nymphs") - energy = 0 - else if (r == "Energy") - energy = 1 - else - return + var/energy = FALSE + var/r = alert(src, "Do you choose to eject echoes as nymphs or energy?", "Identify Waste", "Energy", "Nymphs") + if(r == "Energy") + energy = TRUE for(var/mob/living/carbon/alien/diona/D in src) if(D.mind && D.echo) if(energy) var/mob/living/simple_animal/shade/bluespace/BS = new /mob/living/simple_animal/shade/bluespace(get_turf(D)) - to_chat(D, "You feel your nymphatic husk split as you are released again as pure energy!") + to_chat(D, span("danger", "You feel your nymphatic husk split as you are released again as pure energy!")) D.mind.transfer_to(BS) to_chat(BS, "You are now a bluespace echo - consciousness imprinted upon wavelengths of bluespace energy. You currently retain no memories of your previous life, but do express a strong desire to return to corporeality. You will die soon, fading away forever. Good luck!") qdel(D) - else to_chat(src, span("warning", "You feel a pang of loss as [src] splits away from your biomass.")) - to_chat(D, "You wiggle out of the depths of [src.loc]'s biomass and plop to the ground.") + to_chat(D, span("notice", "You wiggle out of the depths of [src.loc]'s biomass and plop to the ground.")) - if (D.gestalt.is_diona() == DIONA_NYMPH) + if(D.gestalt.is_diona() == DIONA_NYMPH) D.gestalt.adjustNutritionLoss(NYMPH_ABSORB_NUTRITION) D.split_languages(D.gestalt) @@ -355,9 +337,82 @@ if(stat == DEAD) return - if(!consume_nutrition_from_air && (nutrition / max_nutrition > 0.25) ) + if(!consume_nutrition_from_air && (nutrition / max_nutrition > 0.25)) to_chat(src, span("warning", "You still have plenty of nutrition left. Consuming air is the last resort.")) return consume_nutrition_from_air = !consume_nutrition_from_air - to_chat(src, span("notice", "You [consume_nutrition_from_air ? "started" : "stopped"] consuming air for nutrition.")) \ No newline at end of file + to_chat(src, span("notice", "You [consume_nutrition_from_air ? "started" : "stopped"] consuming air for nutrition.")) + +/mob/living/carbon/human/proc/create_structure() + set category = "Abilities" + set name = "Create Structure" + set desc = "Expend nymphs or biomass to create structures." + + if(!is_diona(src)) + to_chat(src, span("danger", "You are not a Diona! You should not have this ability.")) + log_debug("Non-Diona [name] had Create Structure ability.") + return + + if(use_check_and_message(src)) + return + + var/can_use_biomass + if(nutrition >= max_nutrition * 0.25) + can_use_biomass = TRUE + + var/can_use_limbs = TRUE + var/list/viable_limbs = list(BP_L_ARM, BP_R_ARM) + for(var/limb in viable_limbs) + var/obj/item/organ/external/O = organs_by_name[limb] + if(!O) + can_use_limbs = FALSE + break + + var/build_method // What are we using to build this thing? + if(can_use_biomass) + to_chat(src, span("notice", "We will expend biomass to create this structure.")) + build_method = "biomass" + else if(can_use_limbs) + to_chat(src, span("notice", "We will detach our arm nymphs and have them form the structure.")) + build_method = "nymphs" + else + to_chat(src, span("notice", "We do not have the nymphs nor the biomass to do this!")) + return + + var/list/diona_structures = list( + "Wall" = /turf/simulated/wall/diona, + "Floor" = /turf/simulated/floor/diona, + "Glow Bulb" = /obj/structure/diona/bulb/unpowered, + "Cancel" = null + ) + + var/chosen_structure + chosen_structure = input("Choose a structure to grow.") in diona_structures + if(!chosen_structure || chosen_structure == "Cancel") + to_chat(src, span("warning", "We have elected to not grow anything right now.")) + return + + if(use_check_and_message(src)) + return + + if(chosen_structure) + to_chat(src, span("notice", "We are now creating a [lowertext(chosen_structure)] using our [build_method]...")) + + if(do_after(src, 50)) + if(build_method == "biomass") // checking again, a lot can change in a short amount of time - geeves + if(nutrition >= max_nutrition * 0.25) + nutrition -= max_nutrition * 0.25 + else + to_chat(src, span("warning", "We do not have enough biomass!")) + return + else if(build_method == "nymphs") + for(var/limb in viable_limbs) + var/obj/item/organ/external/O = organs_by_name[limb] + if(!O) + to_chat(src, span("warning", "We lost our arm while constructing!")) + return + O.droplimb(TRUE, DROPLIMB_EDGE) + qdel(O) + var/structure_path = diona_structures[chosen_structure] + new structure_path(get_turf(src)) diff --git a/code/modules/mob/living/carbon/alien/diona/life.dm b/code/modules/mob/living/carbon/alien/diona/life.dm index 11cc0050a4e..5ba9787efb6 100644 --- a/code/modules/mob/living/carbon/alien/diona/life.dm +++ b/code/modules/mob/living/carbon/alien/diona/life.dm @@ -1,10 +1,10 @@ //Dionaea regenerate health and nutrition in light. /mob/living/carbon/alien/diona/handle_environment(datum/gas_mixture/environment) - if (environment && consume_nutrition_from_air) + if(environment && consume_nutrition_from_air) environment.remove(diona_handle_air(get_dionastats(), pressure)) - if (stat != DEAD) + if(stat != DEAD) diona_handle_light(DS) /mob/living/carbon/alien/diona/handle_chemicals_in_body() @@ -16,7 +16,7 @@ if(breathing) breathing.metabolize() // nutrition decrease - if (nutrition > 0 && stat != 2) + if(nutrition > 0 && stat != DEAD) adjustNutritionLoss(nutrition_loss) //handle_trace_chems() implement this later maybe @@ -29,18 +29,18 @@ /mob/living/carbon/alien/diona/Life() - if (!detached && gestalt && (gestalt.life_tick % 5 == 0)) // Minimal processing while in stasis + if(!detached && gestalt && (gestalt.life_tick % 5 == 0)) // Minimal processing while in stasis updatehealth() check_status_as_organ() - else if (!gestalt || detached) + else if(!gestalt || detached) ..() /mob/living/carbon/alien/diona/think() ..() - if (!gestalt) + if(!gestalt) if(stat != DEAD) if(master_nymph && !client && master_nymph != src) - walk_to(src,master_nymph, 1, movement_delay()) + walk_to(src, master_nymph, 1, movement_delay()) else - walk_to(src,0) + walk_to(src, 0) diff --git a/code/modules/mob/living/carbon/alien/diona/progression.dm b/code/modules/mob/living/carbon/alien/diona/progression.dm index 8ab518c28e4..e58ab4db0bd 100644 --- a/code/modules/mob/living/carbon/alien/diona/progression.dm +++ b/code/modules/mob/living/carbon/alien/diona/progression.dm @@ -1,12 +1,7 @@ /mob/living/carbon/alien/diona/confirm_evolution() - - //Whitelist requirement for evolution experimentally removed - if(!is_alien_whitelisted(src, "Diona") && config.usealienwhitelist) - to_chat(src, "You are currently not whitelisted to play as a full diona.") - return null - - var/response = alert(src, "A worker gestalt is a large, slow, and durable humanoid form. You will lose the ability to ventcrawl and devour animals, but you will gain hand-like tendrils and the ability to wear things.You have enough biomass, are you certain you're ready to form a new gestalt?","Confirm Gestalt","Growth!","Patience...") - if(response != "Growth!") return //Hit the wrong key...again. + var/response = alert(src, "A worker gestalt is a large, slow, and durable humanoid form. You will lose the ability to ventcrawl and devour animals, but you will gain hand-like tendrils and the ability to wear things. You have enough biomass, are you certain you're ready to form a new gestalt?", "Confirm Gestalt", "Growth!", "Patience...") + if(response != "Growth!") + return if(istype(loc,/obj/item/holder/diona)) var/obj/item/holder/diona/L = loc @@ -25,46 +20,46 @@ var/limbs_can_grow = round((nutrition / evolve_nutrition) * 6,1) if(limbs_can_grow <= 3) //Head, Trunk, Fork - to_chat(src, "You do not have enough biomass to grow yet. Currently you can only grow [limbs_can_grow]/6 limbs. ([nutrition]/[evolve_nutrition] biomass).") + to_chat(src, span("warning", "You do not have enough biomass to grow yet. Currently you can only grow [limbs_can_grow]/6 limbs. ([nutrition]/[evolve_nutrition] biomass).")) return if(gestalt) - to_chat(src, "You are already part of a collective, if you wish to form your own, you must split off first.") + to_chat(src, span("warning", "You are already part of a collective, if you wish to form your own, you must split off first.")) return - if (!istype(loc, /turf)) - to_chat(src, "There's not enough space to grow here. Stand on the floor!.") + if(!isturf(loc)) + to_chat(src, span("warning", "There's not enough space to grow here. Stand on the floor!")) return // confirm_evolution() handles choices and other specific requirements. var/new_species = confirm_evolution() - if(!new_species || !adult_form ) + if(!new_species || !adult_form) return - stunned = 10//No more moving or talking for now - //muted = 10 + stunned = 10 // No more moving or talking for now playsound(src.loc, 'sound/species/diona/gestalt_grow.ogg', 100, 1) - src.visible_message(" [src] begins to shift and quiver.", - " You begin to shift and quiver, feeling your awareness splinter.") + visible_message(span("warning", "[src] begins to shift and quiver."), + span("warning", "You begin to shift and quiver, feeling your awareness splinter.")) sleep(52) - src.visible_message(" [src] erupts in a shower of shed bark as it splits into a tangle of new dionaea.", - " All at once, we consume our stored nutrients to surge with growth, splitting into a tangle of new dionaea. We have attained a new form.") + visible_message(span("warning", "[src] erupts in a shower of shed bark as it splits into a tangle of new gestalt."), + span("warning", "All at once, we consume our stored nutrients to surge with growth, splitting into a tangle of new gestalt. We have attained a new form.")) var/mob/living/carbon/human/adult = new adult_form(get_turf(src)) adult.set_species(new_species) show_evolution_blurb() if(mind) - mind.original = src//This tracks which nymph 'is' the gestalt + mind.original = src //This tracks which nymph 'is' the gestalt mind.transfer_to(adult) else - adult.key = src.key + adult.key = key - for (var/obj/item/W in src.contents) - src.drop_from_inventory(W) + for (var/obj/item/W in contents) + drop_from_inventory(W) + // Remove the adult's languages, then add the babby nymph's languages - geeves //So that the nymph doesn't get basic for free when evolving. - if (adult.languages) + if(adult.languages) adult.languages.Cut() for(var/datum/language/L in languages) @@ -82,18 +77,16 @@ src.nutrition = 0 src.forceMove(adult) src.stat = CONSCIOUS - src.gestalt = adult + gestalt = adult //What do you call a person with no arms or no legs? - var/list/organ_removal_priorities = list(BP_L_ARM,BP_R_ARM,BP_L_LEG,BP_R_LEG) + var/list/organ_removal_priorities = list(BP_L_ARM, BP_R_ARM, BP_L_LEG, BP_R_LEG) var/limbs_to_remove = (6 - limbs_can_grow) for(var/organ_name in organ_removal_priorities) if(limbs_to_remove <= 0) break var/obj/item/organ/external/O = adult.organs_by_name[organ_name] - to_chat(src, "You didn't have enough biomass to grow your [O.name]!") - //adult.organs -= O - O.droplimb(1,DROPLIMB_EDGE) + to_chat(src, span("warning", "You didn't have enough biomass to grow your [O.name]!")) + O.droplimb(1, DROPLIMB_EDGE) qdel(O) - limbs_to_remove -= 1 - //Matt + limbs_to_remove -= 1 \ No newline at end of file diff --git a/code/modules/mob/living/carbon/alien/diona/update_icons.dm b/code/modules/mob/living/carbon/alien/diona/update_icons.dm index 73281937eb7..b20542886f2 100644 --- a/code/modules/mob/living/carbon/alien/diona/update_icons.dm +++ b/code/modules/mob/living/carbon/alien/diona/update_icons.dm @@ -1,5 +1,4 @@ /mob/living/carbon/alien/diona/update_icons() - if(stat == DEAD) icon_state = "[initial(icon_state)]_dead" else if(lying || resting || stunned) @@ -17,4 +16,4 @@ add_overlay(flower_image) if(hat) - add_overlay(get_hat_icon(hat, 0, -8)) + add_overlay(get_hat_icon(hat, 0, -8)) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/species/station/diona/diona.dm b/code/modules/mob/living/carbon/human/species/station/diona/diona.dm index b9f65bfbfdb..cb9a0ea93da 100644 --- a/code/modules/mob/living/carbon/human/species/station/diona/diona.dm +++ b/code/modules/mob/living/carbon/human/species/station/diona/diona.dm @@ -18,7 +18,8 @@ /datum/unarmed_attack/diona ) inherent_verbs = list( - /mob/living/carbon/human/proc/consume_nutrition_from_air + /mob/living/carbon/human/proc/consume_nutrition_from_air, + /mob/living/carbon/human/proc/create_structure ) //primitive_form = "Nymph" slowdown = 7 diff --git a/code/modules/random_map/automata/diona.dm b/code/modules/random_map/automata/diona.dm index 5c108faddc3..2228fdeb7e0 100644 --- a/code/modules/random_map/automata/diona.dm +++ b/code/modules/random_map/automata/diona.dm @@ -1,17 +1,5 @@ /turf/simulated/wall/diona/Initialize(mapload) - . = ..(mapload,"biomass") - -/turf/simulated/wall/diona/attack_generic(var/mob/user, var/damage, var/attack_message) - if(istype(user, /mob/living/carbon/alien/diona)) - if(can_open == WALL_OPENING) - return - can_open = WALL_CAN_OPEN - user.visible_message("\The [user] strokes its feelers against \the [src] and the biomass [density ? "moves aside" : "closes up"].") - toggle_open(user) - sleep(15) - if(can_open == WALL_CAN_OPEN) can_open = 0 - else - return ..(user, damage, attack_message) + . = ..(mapload, "biomass") /obj/structure/diona icon = 'icons/obj/diona.dmi' @@ -55,6 +43,21 @@ light_range = 3 light_color = "#557733" +/obj/structure/diona/bulb/unpowered + name = "unpowered glow bulb" + desc = "A bulb of some sort. Seems like it needs some power." + description_info = "This bulb requires a power cell to glow. Click on it with a power cell in hand to plug it in." + light_power = 0 + light_range = 0 + +/obj/structure/diona/bulb/unpowered/attackby(obj/item/W, mob/user) + if(istype(W, /obj/item/cell)) + to_chat(user, span("notice", "You jack the power cell into the glow bulb.")) + new /obj/structure/diona/bulb(get_turf(src)) + qdel(W) + qdel(src) + ..() + /datum/random_map/automata/diona iterations = 3 descriptor = "diona gestalt" diff --git a/html/changelogs/geeves-dionaebuffs.yml b/html/changelogs/geeves-dionaebuffs.yml new file mode 100644 index 00000000000..9ebf4729b57 --- /dev/null +++ b/html/changelogs/geeves-dionaebuffs.yml @@ -0,0 +1,11 @@ +author: Geeves + +delete-after: True + +changes: + - tweak: "Biomass is now less strong." + - tweak: "Diona have gotten a ton of minor code improvements, using their abilities should now be a little sane." + - tweak: "Diona nymphs don't have to be whitelisted to grow until a full diona now. Administrative action will be taken if this right is abused." + - rscadd: "Diona gestalts can now use their biomass / arms to create biomass structures." + - rscdel: "Removed nymphs' ability to open biomass walls. It was buggy." + - tweak: "Nymphs can now be holstered and worn on the ear slots." \ No newline at end of file diff --git a/icons/mob/diona.dmi b/icons/mob/diona.dmi index 9ae5dbbac948291a0d0bff17ca4ed20f16ccfe28..267b5ec481703151c26e8e35e21ec477c2d7a291 100644 GIT binary patch literal 13175 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 literal 12697 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 delta 2650 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