diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm
index 78d297848e4..bee8a188078 100644
--- a/code/_onclick/hud/alert.dm
+++ b/code/_onclick/hud/alert.dm
@@ -323,11 +323,10 @@ Recharging stations are available in robotics, the dormitory bathrooms, and the
/obj/screen/alert/nymph/Click()
if(!usr || !usr.client)
- return
- else
- if(istype(usr, /mob/living/simple_animal/diona))
- var/mob/living/simple_animal/D = usr
- return D.resist()
+ return
+ if(isnymph(usr))
+ var/mob/living/simple_animal/diona/D = usr
+ return D.resist()
//Need to cover all use cases - emag, illegal upgrade module, malf AI hack, traitor cyborg
/obj/screen/alert/hacked
diff --git a/code/_onclick/hud/diona_nymph.dm b/code/_onclick/hud/diona_nymph.dm
index 940485ec53a..6609e9a2093 100644
--- a/code/_onclick/hud/diona_nymph.dm
+++ b/code/_onclick/hud/diona_nymph.dm
@@ -23,10 +23,10 @@
/obj/screen/diona/intent/Click()
if(isnymph(usr))
var/mob/living/simple_animal/diona/N = usr
- if(N.a_intent == "help")
- N.a_intent = "harm"
+ if(N.a_intent == INTENT_HELP)
+ N.a_intent = INTENT_HARM
else
- N.a_intent = "help"
+ N.a_intent = INTENT_HELP
icon_state = N.a_intent
/obj/screen/diona/blood
diff --git a/code/modules/mob/living/simple_animal/friendly/diona.dm b/code/modules/mob/living/simple_animal/friendly/diona.dm
index 1543e260d71..4a067cf9fd6 100644
--- a/code/modules/mob/living/simple_animal/friendly/diona.dm
+++ b/code/modules/mob/living/simple_animal/friendly/diona.dm
@@ -48,7 +48,6 @@
var/evolve_donors = 5
var/awareness_donors = 3
var/nutrition_need = 500
-
/mob/living/simple_animal/diona/New()
..()
@@ -59,7 +58,7 @@
add_language("Rootspeak")
/mob/living/simple_animal/diona/UnarmedAttack(var/atom/A)
- if(isdiona(A) && src in A.contents) //can't attack your gestalt
+ if(isdiona(A) && (src in A.contents)) //can't attack your gestalt
visible_message("[src] wiggles around a bit.")
else
..()
@@ -80,7 +79,7 @@
get_scooped(M)
/mob/living/simple_animal/diona/proc/merge() //called by the hud (/obj/screen/diona/merge)
- if(!isnymph(src) || src.stat)
+ if(stat != CONSCIOUS)
return FALSE
var/list/choices = list()
@@ -91,24 +90,25 @@
if(!choices.len)
to_chat(src, "No suitable diona nearby.")
+ return FALSE
var/mob/living/M = input(src,"Who do you wish to merge with?") in null|choices
- if(!M || !src || !(Adjacent(M)) || src.stat) //input can take a while, so re-validate
- return
+ if(!M || !src || !(Adjacent(M)) || stat != CONSCIOUS) //input can take a while, so re-validate
+ return FALSE
if(isdiona(M))
to_chat(M, "You feel your being twine with that of [src] as it merges with your biomass.")
M.status_flags |= PASSEMOTES
to_chat(src, "You feel your being twine with that of [M] as you merge with its biomass.")
forceMove(M)
- throw_alert("merged with gestalt", /obj/screen/alert/nymph) //adds a screen alert that can call resist
+ throw_alert(gestalt_alert, /obj/screen/alert/nymph) //adds a screen alert that can call resist
return TRUE
else
return FALSE
/mob/living/simple_animal/diona/proc/split() //called by the hud (obj/screen/alert/nymph)
- if(!isnymph(src) || src.stat || !isdiona(loc))
+ if((stat != CONSCIOUS) || !isdiona(loc))
return FALSE
var/mob/living/carbon/human/D = loc
T = get_turf(src)
@@ -117,12 +117,19 @@
to_chat(loc, "You feel a pang of loss as [src] splits away from your biomass.")
to_chat(src, "You wiggle out of the depths of [loc]'s biomass and plop to the ground.")
forceMove(T)
- D.status_flags &= ~PASSEMOTES
+
+ var/hasMobs = FALSE
+ for(var/atom/A in D.contents)
+ if(istype(A, /mob/) || istype(A, /obj/item/holder))
+ hasMobs = TRUE
+ if(!hasMobs)
+ D.status_flags &= ~PASSEMOTES
+
clear_alert(gestalt_alert)
return TRUE
/mob/living/simple_animal/diona/proc/evolve() //called by the hud (/obj/screen/diona/evolve)
- if(!isnymph(src) || src.stat)
+ if(stat != CONSCIOUS)
return FALSE
if(donors.len < evolve_donors)
@@ -162,23 +169,24 @@
return TRUE
/mob/living/simple_animal/diona/proc/steal_blood() //called by the hud (/obj/screen/diona/blood)
- if(!isnymph(src) || src.stat)
+ if(stat != CONSCIOUS)
return FALSE
var/list/choices = list()
for(var/mob/living/carbon/human/H in oview(1,src))
- if(Adjacent(H))
- choices += H
+ if(Adjacent(H) && H.dna && !(NO_BLOOD in H.dna.species.species_traits))
+ choices += H
if(!choices.len)
to_chat(src, "No suitable blood donors nearby.")
+ return FALSE
var/mob/living/carbon/human/M = input(src,"Who do you wish to take a sample from?") in null|choices
- if(!M || !src || !(Adjacent(M)) || src.stat) //input can take a while, so re-validate
- return
+ if(!M || !src || !(Adjacent(M)) || stat != CONSCIOUS) //input can take a while, so re-validate
+ return FALSE
- if(!M.dna || NO_BLOOD in M.dna.species.species_traits)
+ if(!M.dna || (NO_BLOOD in M.dna.species.species_traits))
to_chat(src, "That donor has no blood to take.")
return FALSE
@@ -196,8 +204,8 @@
update_progression()
/mob/living/simple_animal/diona/proc/update_progression()
- if(src.stat || !donors.len)
- return
+ if(stat != CONSCIOUS || !donors.len)
+ return FALSE
if(donors.len == evolve_donors)
ready_evolve = 1
@@ -220,7 +228,7 @@
return
/mob/living/simple_animal/diona/emote(act, m_type=1, message = null)
- if(stat)
+ if(stat != CONSCIOUS)
return
var/on_CD = 0