The Link to the Changeling Hivemind has been Reestablished (#70193)

Readds the changeling hivemind, but in a simplified form.

    There is no linglinking. It was rarely used and imma be real with you, stupid.
    Hivemind isn't an unlocked ability, it is just a default.
    Bz still mutes lings
    Fallen changelings now get an agonizing message about being locked out. We love fallen changeling flavor
    Changelings have their Honorific names back! Hello, Mr. Omnicron!
    This does NOT readd changeling team objectives, or really anything encouraging teaming beyond the hivemind itself.

    I think antagonists have generally lost a lot of power versus the station, and this is one big way to pump up the heat for this antag in particular. Changelings, given an ability to possibly team up, are much MUCH scarier.
    One reason it was removed years ago was because teaming was too often, but back then there were entire gamemodes about changelings having team objectives and many other things to encourage it. I'm bringing us back to a point BEFORE all those design ideas were explored, because I don't think they worked out.

Add information about the changeling hivemind, and the dangers of being turned into a fallen changeling if you get betrayed to the Changeling Antag Info UI

Changelog

add: Changelings once again have reestablished their changeling hivemind, and can secretly communicate between each other.
fix: Fixed up the Changeling UI a bit, like for example some dimmers would never render.
This commit is contained in:
tralezab
2022-09-29 18:00:23 -07:00
committed by GitHub
parent cd8d67df68
commit 4e041ce765
10 changed files with 163 additions and 53 deletions
@@ -1,5 +1,4 @@
#define ABDUCTOR_MAX_TEAMS 4
GLOBAL_LIST_INIT(possible_abductor_names, list("Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Xi","Omicron","Pi","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega"))
/datum/antagonist/abductor
name = "\improper Abductor"
@@ -157,7 +156,7 @@ GLOBAL_LIST_INIT(possible_abductor_names, list("Alpha","Beta","Gamma","Delta","E
/datum/team/abductor_team/New()
..()
team_number = team_count++
name = "Mothership [pick(GLOB.possible_abductor_names)]" //TODO Ensure unique and actual alieny names
name = "Mothership [pick(GLOB.greek_letters)]" //TODO Ensure unique and actual alieny names
add_objective(new /datum/objective/experiment)
/datum/team/abductor_team/roundend_report()
@@ -46,6 +46,8 @@
var/chem_recharge_slowdown = 0
/// The range this ling can sting things.
var/sting_range = 2
/// Changeling name, what other lings see over the hivemind when talking.
var/changelingID = "Changeling"
/// The number of genetics points (to buy powers) this ling currently has.
var/genetic_points = 10
/// The max number of genetics points (to buy powers) this ling can have..
@@ -78,6 +80,9 @@
/// Static typecache of all changeling powers that are usable.
var/static/list/all_powers = typecacheof(/datum/action/changeling, ignore_root_path = TRUE)
/// Static list of possible ids. Initialized into the greek alphabet the first time it is used
var/static/list/possible_changeling_IDs
/// Satic list of what each slot associated with (in regard to changeling flesh items).
var/static/list/slot2type = list(
"head" = /obj/item/clothing/head/changeling,
@@ -117,6 +122,7 @@
return ..()
/datum/antagonist/changeling/on_gain()
generate_name()
create_emporium()
create_innate_actions()
create_initial_profile()
@@ -158,6 +164,22 @@
our_ling_brain.organ_flags &= ~ORGAN_VITAL
our_ling_brain.decoy_override = TRUE
/datum/antagonist/changeling/proc/generate_name()
var/honorific
if(owner.current.gender == FEMALE)
honorific = "Ms."
else if(owner.current.gender == MALE)
honorific = "Mr."
else
honorific = "Mx."
if(!possible_changeling_IDs)
possible_changeling_IDs = GLOB.greek_letters.Copy()
if(possible_changeling_IDs.len)
changelingID = "[honorific] [pick_n_take(possible_changeling_IDs)]"
else
changelingID = "[honorific] [rand(1,999)]"
/datum/antagonist/changeling/proc/on_hud_created(datum/source)
SIGNAL_HANDLER
@@ -941,6 +963,7 @@
memories += list(list("name" = memory_key, "story" = stolen_memories[memory_key]))
data["memories"] = memories
data["true_name"] = changelingID
data["hive_name"] = hive_name
data["stolen_antag_info"] = antag_memory
data["objectives"] = get_objectives()
+1
View File
@@ -64,6 +64,7 @@ GLOBAL_LIST_INIT(department_radio_keys, list(
*/
GLOBAL_LIST_INIT(message_modes_stat_limits, list(
MODE_INTERCOM = HARD_CRIT,
MODE_CHANGELING = HARD_CRIT,
MODE_ALIEN = HARD_CRIT,
MODE_BINARY = HARD_CRIT, //extra stat check on human/binarycheck()
MODE_MONKEY = HARD_CRIT,
-3
View File
@@ -92,9 +92,6 @@ global procs
hivecheck()
Returns TRUE if the mob can hear and talk in the alien hivemind.
lingcheck()
Returns a bitflag representing who is trying to talk to the changeling hivemind.
/mob/living
say(message, bubble_type, var/list/spans, sanitize, datum/language/languag, ignore_spam, forced)
The say() of mob_living is significantly more complex than that of objects.
@@ -2378,6 +2378,14 @@
metabolization_rate = 0.2 * REAGENTS_METABOLISM
chemical_flags = REAGENT_CAN_BE_SYNTHESIZED|REAGENT_NO_RANDOM_RECIPE
/datum/reagent/bz_metabolites/on_mob_metabolize(mob/living/ling)
..()
ADD_TRAIT(ling, CHANGELING_HIVEMIND_MUTE, type)
/datum/reagent/bz_metabolites/on_mob_end_metabolize(mob/living/ling)
..()
REMOVE_TRAIT(ling, CHANGELING_HIVEMIND_MUTE, type)
/datum/reagent/bz_metabolites/on_mob_life(mob/living/carbon/target, delta_time, times_fired)
if(target.mind)
var/datum/antagonist/changeling/changeling = target.mind.has_antag_datum(/datum/antagonist/changeling)