mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-29 16:10:02 +01:00
Diona update (#5381)
This was requested by Lore team. Diona no longer splits after loosing their head. Without head Diona's speech range is reduced to 3 tiles(number might be changed) and is muffled. Without head Diona goes blind Time to regenerate limb for Diona is increased from minute to 10 minutes. Fixes #5472 Fixes #5418 Diona will be notified when they attempt to regrow lost limb. Tiny code cleanup(replacing usr << with to_chat) Radium now cures burn, brute, toxin damage for Diona. All reagents that affect Diona gestalt now affect nymphs as well When being split diona Gestalt now distributes all reagents to nymphs equally.
This commit is contained in:
committed by
Erki
parent
8bfdd464d7
commit
581f9c6153
@@ -92,7 +92,7 @@ var/list/diona_banned_languages = list(
|
||||
if(DS.nutrient_organ.is_bruised())
|
||||
plus *= 0.5
|
||||
plus = min(plus, max_nutrition - nutrition)
|
||||
|
||||
|
||||
adjustNutritionLoss(-plus)
|
||||
|
||||
return plus*7 //The return value is the number of moles to remove from the local environment
|
||||
@@ -299,7 +299,8 @@ var/list/diona_banned_languages = list(
|
||||
"<span class='warning'>You begin to shift and quiver, feeling a stirring within your trunk</span>")
|
||||
|
||||
DS.regening_organ = TRUE
|
||||
addtimer(CALLBACK(src, .proc/diona_regen_callback, path), 52)
|
||||
to_chat(src, "<span class='notice'>You are trying to regrow a lost limb, this is a long and complicated process that will take 10 minutes!</span>")
|
||||
addtimer(CALLBACK(src, .proc/diona_regen_callback, path), 10 MINUTES)
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -14,7 +14,6 @@
|
||||
var/datum/dionastats/DS
|
||||
|
||||
|
||||
|
||||
/mob/living/carbon/human/proc/setup_gestalt()
|
||||
composition_reagent = "nutriment"//Dionae are plants, so eating them doesn't give animal protein
|
||||
setup_dionastats()
|
||||
@@ -22,7 +21,6 @@
|
||||
verbs += /mob/living/carbon/human/proc/diona_split_nymph
|
||||
verbs += /mob/living/proc/devour
|
||||
|
||||
|
||||
spawn(10)
|
||||
//This is delayed after a gestalt is spawned, to allow nymphs to be added to it before extras are created
|
||||
//These initial nymphs are the nymph which grows into a gestalt, and any others it had inside it
|
||||
@@ -236,6 +234,7 @@
|
||||
if(!O || O.is_stump())
|
||||
nymphs_to_kill_off += 1
|
||||
|
||||
var/total_nymph = 0
|
||||
for(var/mob/living/carbon/alien/diona/D in src)
|
||||
if(nymphs_to_kill_off > 0)
|
||||
D.stat = DEAD
|
||||
@@ -252,6 +251,7 @@
|
||||
D.set_dir(pick(NORTH, SOUTH, EAST, WEST))
|
||||
D.gestalt = null
|
||||
if (D.stat != DEAD && D.health > (D.maxHealth*0.1))//If a nymph is alive and has enough health, it will emerge from the gestalt
|
||||
total_nymph += 1
|
||||
D.stat = CONSCIOUS
|
||||
D.stunned = 0
|
||||
D.update_verbs()
|
||||
@@ -267,7 +267,9 @@
|
||||
drop_from_inventory(W)
|
||||
|
||||
if (bestNymph)
|
||||
var/split_reag_volume = src.reagents.total_volume / total_nymph // All nymps needs to get reagents of Gestal split between.
|
||||
for(var/mob/living/carbon/alien/diona/D in nymphos)
|
||||
src.reagents.trans_to_mob(D, split_reag_volume, CHEM_BLOOD)
|
||||
D.master_nymph = bestNymph
|
||||
D.birds_of_feather += nymphos
|
||||
D.pixel_y += rand(-10,10)
|
||||
|
||||
@@ -157,10 +157,13 @@
|
||||
message = uppertext(message)
|
||||
verb = "yells loudly"
|
||||
|
||||
var/list/returns[3]
|
||||
var/list/returns[4]
|
||||
returns[1] = message
|
||||
returns[2] = verb
|
||||
returns[3] = speech_problem_flag
|
||||
returns[4] = world.view
|
||||
|
||||
returns = species.handle_speech_problems(src, returns, message, verb, message_mode)
|
||||
return returns
|
||||
|
||||
/mob/living/carbon/human/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name)
|
||||
@@ -217,12 +220,9 @@
|
||||
used_radios += r_ear
|
||||
|
||||
/mob/living/carbon/human/handle_speech_sound()
|
||||
if(species.speech_sounds && prob(species.speech_chance))
|
||||
var/list/returns[2]
|
||||
returns[1] = sound(pick(species.speech_sounds))
|
||||
returns[2] = 50
|
||||
return returns
|
||||
return ..()
|
||||
var/list/returns = ..()
|
||||
returns = species.handle_speech_sound(src, returns)
|
||||
return returns
|
||||
|
||||
/mob/living/carbon/human/hear_say(var/message, var/verb = "says", var/datum/language/language = null, var/alt_name = "",var/italics = 0, var/mob/speaker = null)
|
||||
for(var/T in get_traumas())
|
||||
|
||||
@@ -512,7 +512,16 @@
|
||||
/datum/species/proc/bullet_act(var/obj/item/projectile/P, var/def_zone, var/mob/living/carbon/human/H)
|
||||
return 0
|
||||
|
||||
/datum/species/proc/handle_speech_problems(mob/living/carbon/human/H, list/current_flags, message, message_verb, message_mode)
|
||||
return current_flags
|
||||
|
||||
/datum/species/proc/handle_speech_sound(mob/living/carbon/human/H, list/current_flags)
|
||||
if(speech_sounds && prob(speech_chance))
|
||||
current_flags[1] = sound(pick(speech_sounds))
|
||||
current_flags[2] = 50
|
||||
return current_flags
|
||||
|
||||
/datum/species/proc/set_default_hair(var/mob/living/carbon/human/H)
|
||||
H.h_style = H.species.default_h_style
|
||||
H.f_style = H.species.default_f_style
|
||||
H.update_hair()
|
||||
H.update_hair()
|
||||
|
||||
@@ -343,6 +343,7 @@
|
||||
sprint_speed_factor = 0.5 //Speed gained is minor
|
||||
sprint_cost_factor = 0.8
|
||||
climb_coeff = 1.3
|
||||
vision_organ = "head"
|
||||
|
||||
max_hydration_factor = -1
|
||||
|
||||
@@ -403,6 +404,17 @@
|
||||
// This proc sleeps. Async it.
|
||||
INVOKE_ASYNC(H, /mob/living/carbon/human/proc/diona_split_into_nymphs)
|
||||
|
||||
/datum/species/diona/handle_speech_problems(mob/living/carbon/human/H, list/current_flags, message, message_verb, message_mode)
|
||||
// Diona without head can live, but they cannot talk as loud anymore.
|
||||
var/obj/item/organ/external/O = H.organs_by_name["head"]
|
||||
current_flags[4] = O.is_stump() ? 3 : world.view
|
||||
return current_flags
|
||||
|
||||
/datum/species/diona/handle_speech_sound(mob/living/carbon/human/H, list/current_flags)
|
||||
current_flags = ..()
|
||||
var/obj/item/organ/external/O = H.organs_by_name["head"]
|
||||
current_flags[3] = O.is_stump()
|
||||
return current_flags
|
||||
|
||||
/datum/species/machine
|
||||
name = "Baseline Frame"
|
||||
|
||||
@@ -99,7 +99,7 @@ proc/get_radio_key_from_channel(var/channel)
|
||||
return 0
|
||||
|
||||
/mob/living/proc/handle_speech_problems(var/message, var/verb, var/message_mode)
|
||||
var/list/returns[3]
|
||||
var/list/returns[4]
|
||||
var/speech_problem_flag = 0
|
||||
if((HULK in mutations) && health >= 25 && length(message))
|
||||
message = "[uppertext(message)]!!!"
|
||||
@@ -122,13 +122,14 @@ proc/get_radio_key_from_channel(var/channel)
|
||||
verb = pick("slobbers","slurs")
|
||||
speech_problem_flag = 1
|
||||
if(prob(50))
|
||||
src << "<span class='danger'>You struggle to speak with your dislocated jaw!</span>"
|
||||
to_chat(src, "<span class='danger'>You struggle to speak with your dislocated jaw!</span>")
|
||||
if(prob(10))
|
||||
src << "<span class='danger'>You feel a sharp pain from your jaw as you speak!</span>"
|
||||
to_chat(src, "<span class='danger'>You feel a sharp pain from your jaw as you speak!</span>")
|
||||
src.Weaken(3)
|
||||
returns[1] = message
|
||||
returns[2] = verb
|
||||
returns[3] = speech_problem_flag
|
||||
returns[4] = world.view
|
||||
return returns
|
||||
|
||||
/mob/living/proc/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name)
|
||||
@@ -139,9 +140,10 @@ proc/get_radio_key_from_channel(var/channel)
|
||||
return 0
|
||||
|
||||
/mob/living/proc/handle_speech_sound()
|
||||
var/list/returns[2]
|
||||
var/list/returns[3]
|
||||
returns[1] = null
|
||||
returns[2] = null
|
||||
returns[3] = FALSE
|
||||
return returns
|
||||
|
||||
/mob/living/proc/get_speech_ending(verb, var/ending)
|
||||
@@ -155,7 +157,7 @@ proc/get_radio_key_from_channel(var/channel)
|
||||
|
||||
if(client)
|
||||
if(client.prefs.muted & MUTE_IC)
|
||||
src << "<span class='warning'>You cannot speak in IC (Muted).</span>"
|
||||
to_chat(src, "<span class='warning'>You cannot speak in IC (Muted).</span>")
|
||||
return
|
||||
|
||||
if(stat)
|
||||
@@ -197,17 +199,18 @@ proc/get_radio_key_from_channel(var/channel)
|
||||
verb = say_quote(message, speaking)
|
||||
|
||||
if(is_muzzled())
|
||||
src << "<span class='danger'>You're muzzled and cannot speak!</span>"
|
||||
to_chat(src, "<span class='danger'>You're muzzled and cannot speak!</span>")
|
||||
return
|
||||
|
||||
message = trim_left(message)
|
||||
|
||||
var/message_range
|
||||
if(!(speaking && (speaking.flags & NO_STUTTER)))
|
||||
message = handle_autohiss(message, speaking)
|
||||
|
||||
var/list/handle_s = handle_speech_problems(message, verb, message_mode)
|
||||
message = handle_s[1]
|
||||
verb = handle_s[2]
|
||||
message_range = handle_s[4]
|
||||
|
||||
if(!message || message == "")
|
||||
return 0
|
||||
@@ -228,9 +231,9 @@ proc/get_radio_key_from_channel(var/channel)
|
||||
var/list/handle_v = handle_speech_sound()
|
||||
var/sound/speech_sound = handle_v[1]
|
||||
var/sound_vol = handle_v[2]
|
||||
var/italics = handle_v[3]
|
||||
|
||||
|
||||
var/italics = 0
|
||||
var/message_range = world.view
|
||||
|
||||
//speaking into radios
|
||||
if(used_radios.len)
|
||||
|
||||
Reference in New Issue
Block a user