From daa9b0e0bc9ba1639c188053adbffac2af61c986 Mon Sep 17 00:00:00 2001 From: PsiOmegaDelta Date: Wed, 4 Nov 2015 17:49:42 +0100 Subject: [PATCH 1/3] When a diona splits, the main nymph inherits all known languages. Fixes #11401. --- code/modules/mob/language/language.dm | 4 ++++ code/modules/mob/living/carbon/human/human_powers.dm | 3 +-- code/modules/mob/mob_helpers.dm | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/language/language.dm b/code/modules/mob/language/language.dm index 8c6b92c5557..c6d9756c9b3 100644 --- a/code/modules/mob/language/language.dm +++ b/code/modules/mob/language/language.dm @@ -188,4 +188,8 @@ else return ..() +/proc/transfer_languages(var/mob/source, var/mob/target) + for(var/datum/language/L in source.languages) + target.add_language(L.name) + #undef SCRAMBLE_CACHE_LEN diff --git a/code/modules/mob/living/carbon/human/human_powers.dm b/code/modules/mob/living/carbon/human/human_powers.dm index 50f46b4bb41..8ddd6bb1a6a 100644 --- a/code/modules/mob/living/carbon/human/human_powers.dm +++ b/code/modules/mob/living/carbon/human/human_powers.dm @@ -229,6 +229,7 @@ var/mob/living/carbon/alien/diona/S = new(T) S.set_dir(dir) + transfer_languages(src, S) if(mind) mind.transfer_to(S) @@ -254,5 +255,3 @@ visible_message("\The [src] quivers slightly, then splits apart with a wet slithering noise.") qdel(src) - - diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 862f92fd5bc..4f55f3d55b4 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -640,7 +640,7 @@ proc/is_blind(A) // A proper CentCom id is hard currency. else if(id && istype(id, /obj/item/weapon/card/id/centcom)) return SAFE_PERP - + if(check_access && !access_obj.allowed(src)) threatcount += 4 From 5f4af85af985227e1dbfca34438760fd53a4fd5c Mon Sep 17 00:00:00 2001 From: PsiOmegaDelta Date: Thu, 5 Nov 2015 08:14:22 +0100 Subject: [PATCH 2/3] Refactors diona split code for maximum reuse. --- .../mob/living/carbon/human/human_powers.dm | 9 ++++++--- .../living/carbon/human/species/station/station.dm | 14 +------------- 2 files changed, 7 insertions(+), 16 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human_powers.dm b/code/modules/mob/living/carbon/human/human_powers.dm index 8ddd6bb1a6a..bcb4dd2c33b 100644 --- a/code/modules/mob/living/carbon/human/human_powers.dm +++ b/code/modules/mob/living/carbon/human/human_powers.dm @@ -224,7 +224,9 @@ set name = "Split" set desc = "Split your humanoid form into its constituent nymphs." set category = "Abilities" + diona_split_into_nymphs(5, 1) // Separate proc to void argments being supplied when used as a verb +/mob/living/carbon/human/proc/diona_split_into_nymphs(var/number_of_resulting_nymphs, var/delete_self = 1) var/turf/T = get_turf(src) var/mob/living/carbon/alien/diona/S = new(T) @@ -243,8 +245,8 @@ D.loc = T D.set_dir(pick(NORTH, SOUTH, EAST, WEST)) - if(nymphs < 5) - for(var/i in nymphs to 4) + if(nymphs < number_of_resulting_nymphs) + for(var/i in nymphs to (number_of_resulting_nymphs - 1)) var/mob/M = new /mob/living/carbon/alien/diona(T) M.set_dir(pick(NORTH, SOUTH, EAST, WEST)) @@ -254,4 +256,5 @@ visible_message("\The [src] quivers slightly, then splits apart with a wet slithering noise.") - qdel(src) + if(delete_self) + qdel(src) diff --git a/code/modules/mob/living/carbon/human/species/station/station.dm b/code/modules/mob/living/carbon/human/species/station/station.dm index 010cfae341a..54b7c322052 100644 --- a/code/modules/mob/living/carbon/human/species/station/station.dm +++ b/code/modules/mob/living/carbon/human/species/station/station.dm @@ -221,19 +221,7 @@ return ..() /datum/species/diona/handle_death(var/mob/living/carbon/human/H) - - var/mob/living/carbon/alien/diona/S = new(get_turf(H)) - - if(H.mind) - H.mind.transfer_to(S) - - for(var/mob/living/carbon/alien/diona/D in H.contents) - if(D.client) - D.loc = H.loc - else - qdel(D) - - H.visible_message("\red[H] splits apart with a wet slithering noise!") + diona_split_into_nymphs(0, 0) /datum/species/machine name = "Machine" From 73f99a4c018440323560b46497ba40e852f23d50 Mon Sep 17 00:00:00 2001 From: PsiOmegaDelta Date: Thu, 5 Nov 2015 08:20:34 +0100 Subject: [PATCH 3/3] Secondary diona nymphs now get non-restricted/whitelisted languages on split. --- code/modules/mob/language/language.dm | 4 +++- .../modules/mob/living/carbon/human/human_powers.dm | 13 ++++++------- .../living/carbon/human/species/station/station.dm | 2 +- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/code/modules/mob/language/language.dm b/code/modules/mob/language/language.dm index c6d9756c9b3..2d058e3b780 100644 --- a/code/modules/mob/language/language.dm +++ b/code/modules/mob/language/language.dm @@ -188,8 +188,10 @@ else return ..() -/proc/transfer_languages(var/mob/source, var/mob/target) +/proc/transfer_languages(var/mob/source, var/mob/target, var/except_flags) for(var/datum/language/L in source.languages) + if(L.flags & except_flags) + continue target.add_language(L.name) #undef SCRAMBLE_CACHE_LEN diff --git a/code/modules/mob/living/carbon/human/human_powers.dm b/code/modules/mob/living/carbon/human/human_powers.dm index bcb4dd2c33b..1728b61008d 100644 --- a/code/modules/mob/living/carbon/human/human_powers.dm +++ b/code/modules/mob/living/carbon/human/human_powers.dm @@ -224,9 +224,9 @@ set name = "Split" set desc = "Split your humanoid form into its constituent nymphs." set category = "Abilities" - diona_split_into_nymphs(5, 1) // Separate proc to void argments being supplied when used as a verb + diona_split_into_nymphs(5) // Separate proc to void argments being supplied when used as a verb -/mob/living/carbon/human/proc/diona_split_into_nymphs(var/number_of_resulting_nymphs, var/delete_self = 1) +/mob/living/carbon/human/proc/diona_split_into_nymphs(var/number_of_resulting_nymphs) var/turf/T = get_turf(src) var/mob/living/carbon/alien/diona/S = new(T) @@ -242,19 +242,18 @@ for(var/mob/living/carbon/alien/diona/D in src) nymphs++ - D.loc = T + D.forceMove(T) + transfer_languages(src, D, WHITELISTED|RESTRICTED) D.set_dir(pick(NORTH, SOUTH, EAST, WEST)) if(nymphs < number_of_resulting_nymphs) for(var/i in nymphs to (number_of_resulting_nymphs - 1)) var/mob/M = new /mob/living/carbon/alien/diona(T) + transfer_languages(src, M, WHITELISTED|RESTRICTED) M.set_dir(pick(NORTH, SOUTH, EAST, WEST)) - for(var/obj/item/W in src) drop_from_inventory(W) visible_message("\The [src] quivers slightly, then splits apart with a wet slithering noise.") - - if(delete_self) - qdel(src) + qdel(src) diff --git a/code/modules/mob/living/carbon/human/species/station/station.dm b/code/modules/mob/living/carbon/human/species/station/station.dm index 54b7c322052..9ba341ff4a1 100644 --- a/code/modules/mob/living/carbon/human/species/station/station.dm +++ b/code/modules/mob/living/carbon/human/species/station/station.dm @@ -221,7 +221,7 @@ return ..() /datum/species/diona/handle_death(var/mob/living/carbon/human/H) - diona_split_into_nymphs(0, 0) + H.diona_split_into_nymphs(0) /datum/species/machine name = "Machine"