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