From a751b73cd4f071e7dcb39887f57e3377d0813d5c Mon Sep 17 00:00:00 2001 From: VerySoft Date: Sun, 13 Feb 2022 23:37:16 -0500 Subject: [PATCH] Absorb Languages Makes it so when someone is absorbed, the pred and prey share languages. (and this is undone when unabsorbed/released) --- code/modules/mob/living/living.dm | 3 ++ code/modules/vore/eating/belly_obj_vr.dm | 40 ++++++++++++++++++++++++ code/modules/vore/eating/living_vr.dm | 2 ++ code/modules/vore/eating/vorepanel_vr.dm | 3 ++ 4 files changed, 48 insertions(+) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index d27edd297b9..e46fd9fc290 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -36,6 +36,9 @@ qdel(selected_image) QDEL_NULL(vorePanel) //VOREStation Add QDEL_LIST_NULL(vore_organs) //VOREStation Add + temp_language_sources = null //VOREStation Add + temp_languages = null //VOREStation Add + if(LAZYLEN(organs)) organs_by_name.Cut() diff --git a/code/modules/vore/eating/belly_obj_vr.dm b/code/modules/vore/eating/belly_obj_vr.dm index e9e5baab153..f96af5c204c 100644 --- a/code/modules/vore/eating/belly_obj_vr.dm +++ b/code/modules/vore/eating/belly_obj_vr.dm @@ -374,6 +374,7 @@ ML.muffled = 0 if(ML.absorbed) ML.absorbed = FALSE + handle_absorb_langs(ML, owner) if(ishuman(M) && ishuman(OW)) var/mob/living/carbon/human/Prey = M var/mob/living/carbon/human/Pred = OW @@ -676,6 +677,11 @@ absorb_alert_prey = replacetext(absorb_alert_prey, "%countprey", absorbed_count) M.absorbed = TRUE + if(M.ckey) + owner.temp_language_sources += M + M.temp_language_sources += owner + handle_absorb_langs(M, owner) + to_chat(M, "[absorb_alert_prey]") to_chat(owner, "[absorb_alert_owner]") if(M.noisy) //Mute drained absorbee hunger if enabled. @@ -741,6 +747,7 @@ unabsorb_alert_prey = replacetext(unabsorb_alert_prey, "%countprey", absorbed_count) M.absorbed = FALSE + handle_absorb_langs(M, owner) to_chat(M, "[unabsorb_alert_prey]") to_chat(owner, "[unabsorb_alert_owner]") @@ -752,6 +759,39 @@ if(isanimal(owner)) owner.update_icon() +///////////////////////////////////////////////////////////////////////// +/obj/belly/proc/handle_absorb_langs(var/mob/living/prey, var/mob/living/pred) + for(var/mob/living/p in pred.temp_language_sources) //Let's look at the pred's sources + if (!p.absorbed) + for(var/L in pred.temp_languages) + if(L in p.languages) + pred.languages -= L + pred.temp_languages -= L + pred.temp_language_sources -= p + else + for(var/L in p.languages) + if(L in pred.languages) + continue + pred.languages += L + pred.temp_languages += L + + for(var/mob/living/P in prey.temp_language_sources) //Let's look at the prey's sources + if (!prey.absorbed) + for(var/L in prey.temp_languages) + if(L in P.languages) + prey.languages -= L + prey.temp_languages -= L + prey.temp_language_sources -= P + else + for(var/L in P.languages) + if(L in prey.languages) + continue + prey.languages += L + prey.temp_languages += L + +//////////////////////////////////////////////////////////////////////// + + //Digest a single item //Receives a return value from digest_act that's how much nutrition //the item should be worth diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm index 6837cc4d561..ffaaa5ec09c 100644 --- a/code/modules/vore/eating/living_vr.dm +++ b/code/modules/vore/eating/living_vr.dm @@ -12,6 +12,8 @@ var/obj/belly/vore_selected // Default to no vore capability. var/list/vore_organs = list() // List of vore containers inside a mob var/absorbed = FALSE // If a mob is absorbed into another + var/list/temp_language_sources = list() //VOREStation Addition - Absorbs add languages to the pred + var/list/temp_languages = list() //VOREStation Addition - Absorbs add languages to the pred var/weight = 137 // Weight for mobs for weightgain system var/weight_gain = 1 // How fast you gain weight var/weight_loss = 0.5 // How fast you lose weight diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm index 31d74f6d0ec..d83744547d7 100644 --- a/code/modules/vore/eating/vorepanel_vr.dm +++ b/code/modules/vore/eating/vorepanel_vr.dm @@ -540,6 +540,9 @@ to_chat(user,"You manage to [lowertext(TB.vore_verb)] [M] into your [lowertext(TB.name)]!") to_chat(M,"[host] manages to [lowertext(TB.vore_verb)] you into their [lowertext(TB.name)]!") to_chat(OB.owner,"Someone inside you has eaten someone else!") + if(M.absorbed) + M.absorbed = FALSE + OB.handle_absorb_langs(M, OB.owner) TB.nom_mob(M) /datum/vore_look/proc/pick_from_outside(mob/user, params)