Cultist Memory (#10622)

This commit is contained in:
Geeves
2020-12-22 16:25:30 +02:00
committed by GitHub
parent 881db313de
commit 6ff5d78786
47 changed files with 484 additions and 293 deletions

View File

@@ -7,11 +7,12 @@
flags = RESTRICTED | HIVEMIND
/datum/language/ling/broadcast(var/mob/living/speaker,var/message,var/speaker_mask)
if(speaker.mind && speaker.mind.changeling)
..(speaker,message,speaker.mind.changeling.changelingID)
else
..(speaker,message)
if(speaker.mind)
var/datum/changeling/changeling = speaker.mind.antag_datums[MODE_CHANGELING]
if(changeling)
..(speaker,message, changeling.changelingID)
return
..(speaker,message)
/datum/language/corticalborer
name = LANGUAGE_BORER

View File

@@ -210,12 +210,14 @@
stat(null, "Suit charge: [cell_status]")
if(mind)
if(mind.vampire)
stat("Usable Blood", mind.vampire.blood_usable)
stat("Total Blood", mind.vampire.blood_total)
if(mind.changeling)
stat("Chemical Storage", mind.changeling.chem_charges)
stat("Genetic Damage Time", mind.changeling.geneticdamage)
var/datum/vampire/vampire = mind.antag_datums[MODE_VAMPIRE]
if(vampire)
stat("Usable Blood", vampire.blood_usable)
stat("Total Blood", vampire.blood_total)
var/datum/changeling/changeling = mind.antag_datums[MODE_CHANGELING]
if(changeling)
stat("Chemical Storage", changeling.chem_charges)
stat("Genetic Damage Time", changeling.geneticdamage)
/mob/living/carbon/human/ex_act(severity)
if(!blinded)
@@ -2016,8 +2018,10 @@
/mob/living/carbon/human/get_accent_icon(var/datum/language/speaking, var/mob/hearer, var/force_accent)
var/used_accent = accent //starts with the mob's default accent
if(mind?.changeling)
used_accent = mind.changeling.mimiced_accent
if(mind)
var/datum/changeling/changeling = mind.antag_datums[MODE_CHANGELING]
if(changeling?.mimiced_accent)
used_accent = changeling.mimiced_accent
if(istype(back,/obj/item/rig)) //checks for the rig voice changer module
var/obj/item/rig/rig = back

View File

@@ -87,8 +87,12 @@
tally = max(0, tally-3)
var/turf/T = get_turf(src)
if(T && !mind.changeling) // changelings don't get movement costs
tally += T.movement_cost
if(T) // changelings don't get movement costs
var/datum/changeling/changeling
if(mind)
changeling = mind.antag_datums[MODE_CHANGELING]
if(!changeling)
tally += T.movement_cost
tally += config.human_delay

View File

@@ -84,8 +84,10 @@
//Update our name based on whether our face is obscured/disfigured
name = get_visible_name()
if(mind?.vampire)
handle_vampire()
if(mind)
var/datum/vampire/vampire = mind.antag_datums[MODE_VAMPIRE]
if(vampire)
handle_vampire()
/mob/living/carbon/human/think()
..()
@@ -1041,8 +1043,10 @@
playsound_simple(null, pick(scarySounds), 50, TRUE)
/mob/living/carbon/human/proc/handle_changeling()
if(mind && mind.changeling)
mind.changeling.regenerate()
if(mind)
var/datum/changeling/changeling = mind.antag_datums[MODE_CHANGELING]
if(changeling)
changeling.regenerate()
/mob/living/carbon/human/proc/handle_shock()
if(status_flags & GODMODE)

View File

@@ -79,8 +79,10 @@
var/obj/item/organ/external/head/face = organs_by_name[BP_HEAD]
if(face?.disfigured) // if your face is ruined, your ability to vocalize is also ruined
return "Unknown" // above ling voice mimicing so they don't get caught out immediately
if(mind?.changeling?.mimicing)
return mind.changeling.mimicing
if(mind)
var/datum/changeling/changeling = mind.antag_datums[MODE_CHANGELING]
if(changeling?.mimicing)
return changeling.mimicing
if(GetSpecialVoice())
return GetSpecialVoice()
return real_name

View File

@@ -213,7 +213,10 @@
if (!injected || !our)
return
if(blood_incompatible(injected.data["blood_type"],our.data["blood_type"],injected.data["species"],our.data["species"]) && !(mind && mind.vampire))
var/datum/vampire/vampire
if(mind)
vampire = mind.antag_datums[MODE_VAMPIRE]
if(!vampire && blood_incompatible(injected.data["blood_type"],our.data["blood_type"],injected.data["species"],our.data["species"]))
reagents.add_reagent(/datum/reagent/toxin,amount * 0.5)
reagents.update_total()
else

View File

@@ -48,11 +48,12 @@
/datum/reagent/blood/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
if(ishuman(M))
if (M.mind && M.mind.vampire)
if(M.mind)
var/datum/vampire/vampire = M.mind.antag_datums[MODE_VAMPIRE]
if(M.dna.unique_enzymes == data["blood_DNA"]) //so vampires can't drink their own blood
return
M.mind.vampire.blood_usable += removed
to_chat(M, "<span class='notice'>You have accumulated [M.mind.vampire.blood_usable] [M.mind.vampire.blood_usable > 1 ? "units" : "unit"] of usable blood. It tastes quite stale.</span>")
vampire.blood_usable += removed
to_chat(M, "<span class='notice'>You have accumulated [vampire.blood_usable] [vampire.blood_usable > 1 ? "units" : "unit"] of usable blood. It tastes quite stale.</span>")
return
if(dose > 5)
M.adjustToxLoss(removed)

View File

@@ -218,11 +218,12 @@
/datum/reagent/water/holywater/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
..()
if(ishuman(M))
if (M.mind && M.mind.vampire)
var/datum/vampire/vampire = M.mind.vampire
vampire.frenzy += removed * 5
else if(M.mind && cult.is_antagonist(M.mind) && prob(10))
cult.remove_antagonist(M.mind)
if(M.mind)
var/datum/vampire/vampire = M.mind.antag_datums[MODE_VAMPIRE]
if(vampire)
vampire.frenzy += removed * 5
if(cult.is_antagonist(M.mind) && prob(10))
cult.remove_antagonist(M.mind)
if(alien && alien == IS_UNDEAD)
M.adjust_fire_stacks(10)
M.IgniteMob()

View File

@@ -44,32 +44,34 @@
if(51 to INFINITY) icon_state = "full"
/obj/item/reagent_containers/blood/attack(mob/living/carbon/human/M as mob, mob/living/carbon/human/user as mob, var/target_zone)
if (user == M && (user.mind.vampire))
if (being_feed)
to_chat(user, "<span class='notice'>You are already feeding on \the [src].</span>")
return
if (reagents.get_reagent_amount(/datum/reagent/blood))
user.visible_message("<span class='warning'>[user] raises \the [src] up to their mouth and bites into it.</span>", "<span class='notice'>You raise \the [src] up to your mouth and bite into it, starting to drain its contents.<br>You need to stand still.</span>")
being_feed = TRUE
vampire_marks = TRUE
if (!LAZYLEN(src.other_DNA))
LAZYADD(src.other_DNA, M.dna.unique_enzymes)
src.other_DNA_type = "saliva"
if(user == M && user.mind)
var/datum/vampire/vampire = user.mind.antag_datums[MODE_VAMPIRE]
if(vampire)
if (being_feed)
to_chat(user, "<span class='notice'>You are already feeding on \the [src].</span>")
return
if (reagents.get_reagent_amount(/datum/reagent/blood))
user.visible_message("<span class='warning'>[user] raises \the [src] up to their mouth and bites into it.</span>", "<span class='notice'>You raise \the [src] up to your mouth and bite into it, starting to drain its contents.<br>You need to stand still.</span>")
being_feed = TRUE
vampire_marks = TRUE
if (!LAZYLEN(src.other_DNA))
LAZYADD(src.other_DNA, M.dna.unique_enzymes)
src.other_DNA_type = "saliva"
while (do_after(user, 25, 5, 1))
var/blood_taken = 0
blood_taken = min(5, reagents.get_reagent_amount(/datum/reagent/blood)/4)
while (do_after(user, 25, 5, 1))
var/blood_taken = 0
blood_taken = min(5, reagents.get_reagent_amount(/datum/reagent/blood)/4)
reagents.remove_reagent(/datum/reagent/blood, blood_taken*4)
user.mind.vampire.blood_usable += blood_taken
reagents.remove_reagent(/datum/reagent/blood, blood_taken*4)
vampire.blood_usable += blood_taken
if (blood_taken)
to_chat(user, "<span class='notice'>You have accumulated [user.mind.vampire.blood_usable] [user.mind.vampire.blood_usable > 1 ? "units" : "unit"] of usable blood. It tastes quite stale.</span>")
if (blood_taken)
to_chat(user, "<span class='notice'>You have accumulated [vampire.blood_usable] [vampire.blood_usable > 1 ? "units" : "unit"] of usable blood. It tastes quite stale.</span>")
if (reagents.get_reagent_amount(/datum/reagent/blood) < 1)
break
user.visible_message("<span class='warning'>[user] licks [user.get_pronoun("his")] fangs dry, lowering \the [src].</span>", "<span class='notice'>You lick your fangs clean of the tasteless blood.</span>")
being_feed = FALSE
if (reagents.get_reagent_amount(/datum/reagent/blood) < 1)
break
user.visible_message("<span class='warning'>[user] licks [user.get_pronoun("his")] fangs dry, lowering \the [src].</span>", "<span class='notice'>You lick your fangs clean of the tasteless blood.</span>")
being_feed = FALSE
else
..()