From ad9d15ac4963e1f3e96182377e9b4f64951daa32 Mon Sep 17 00:00:00 2001
From: Szyszkrzyn <52501307+Szyszkrzyneczka@users.noreply.github.com>
Date: Wed, 2 Oct 2024 18:25:17 +0200
Subject: [PATCH] Removes old code (#11613)
No one will miss it for no one even remembers it
---
beestation.dme | 23 --
.../dynamic/dynamic_rulesets_latejoin.dm | 2 -
.../dynamic/dynamic_rulesets_midround.dm | 1 -
.../dynamic/dynamic_rulesets_roundstart.dm | 29 --
code/game/gamemodes/hivemind/hivemind.dm | 106 ------
code/game/gamemodes/hivemind/objectives.dm | 97 -----
code/game/machinery/cloning.dm | 2 -
.../items/implants/implant_mindshield.dm | 18 -
code/modules/antagonists/hivemind/hivemind.dm | 341 ------------------
.../antagonists/hivemind/hivemind_overlays.dm | 30 --
code/modules/antagonists/hivemind/hiveui.dm | 96 -----
.../hivemind/spells/hivemind_add.dm | 56 ---
.../hivemind/spells/hivemind_barrier.dm | 45 ---
.../hivemind/spells/hivemind_compell.dm | 32 --
.../hivemind/spells/hivemind_dominance.dm | 49 ---
.../hivemind/spells/hivemind_hand.dm | 39 --
.../hivemind/spells/hivemind_heal.dm | 45 ---
.../hivemind/spells/hivemind_integrate.dm | 65 ----
.../hivemind/spells/hivemind_invasion.dm | 63 ----
.../hivemind/spells/hivemind_loyalty.dm | 27 --
.../hivemind/spells/hivemind_panic.dm | 54 ---
.../hivemind/spells/hivemind_probe.dm | 54 ---
.../hivemind/spells/hivemind_rally.dm | 38 --
.../hivemind/spells/hivemind_see.dm | 45 ---
.../hivemind/spells/hivemind_shatter.dm | 41 ---
.../hivemind/spells/hivemind_shock.dm | 43 ---
.../hivemind/spells/hivemind_spells.dm | 42 ---
.../hivemind/spells/hivemind_thrall.dm | 76 ----
code/modules/antagonists/hivemind/vessel.dm | 69 ----
.../role_preference/role_antagonists.dm | 26 --
code/modules/mob/living/carbon/human/death.dm | 5 -
code/modules/mob/living/login.dm | 3 -
.../chemistry/reagents/medicine_reagents.dm | 13 +-
33 files changed, 1 insertion(+), 1674 deletions(-)
delete mode 100644 code/game/gamemodes/hivemind/hivemind.dm
delete mode 100644 code/game/gamemodes/hivemind/objectives.dm
delete mode 100644 code/modules/antagonists/hivemind/hivemind.dm
delete mode 100644 code/modules/antagonists/hivemind/hivemind_overlays.dm
delete mode 100644 code/modules/antagonists/hivemind/hiveui.dm
delete mode 100644 code/modules/antagonists/hivemind/spells/hivemind_add.dm
delete mode 100644 code/modules/antagonists/hivemind/spells/hivemind_barrier.dm
delete mode 100644 code/modules/antagonists/hivemind/spells/hivemind_compell.dm
delete mode 100644 code/modules/antagonists/hivemind/spells/hivemind_dominance.dm
delete mode 100644 code/modules/antagonists/hivemind/spells/hivemind_hand.dm
delete mode 100644 code/modules/antagonists/hivemind/spells/hivemind_heal.dm
delete mode 100644 code/modules/antagonists/hivemind/spells/hivemind_integrate.dm
delete mode 100644 code/modules/antagonists/hivemind/spells/hivemind_invasion.dm
delete mode 100644 code/modules/antagonists/hivemind/spells/hivemind_loyalty.dm
delete mode 100644 code/modules/antagonists/hivemind/spells/hivemind_panic.dm
delete mode 100644 code/modules/antagonists/hivemind/spells/hivemind_probe.dm
delete mode 100644 code/modules/antagonists/hivemind/spells/hivemind_rally.dm
delete mode 100644 code/modules/antagonists/hivemind/spells/hivemind_see.dm
delete mode 100644 code/modules/antagonists/hivemind/spells/hivemind_shatter.dm
delete mode 100644 code/modules/antagonists/hivemind/spells/hivemind_shock.dm
delete mode 100644 code/modules/antagonists/hivemind/spells/hivemind_spells.dm
delete mode 100644 code/modules/antagonists/hivemind/spells/hivemind_thrall.dm
delete mode 100644 code/modules/antagonists/hivemind/vessel.dm
diff --git a/beestation.dme b/beestation.dme
index 5b300777e55a9..bc390ba714837 100644
--- a/beestation.dme
+++ b/beestation.dme
@@ -1071,8 +1071,6 @@
#include "code\game\gamemodes\gangs\gangtool.dm"
#include "code\game\gamemodes\gangs\implant_gang.dm"
#include "code\game\gamemodes\gangs\outfits.dm"
-#include "code\game\gamemodes\hivemind\hivemind.dm"
-#include "code\game\gamemodes\hivemind\objectives.dm"
#include "code\game\gamemodes\incursion\incursion.dm"
#include "code\game\gamemodes\meteor\meteor.dm"
#include "code\game\gamemodes\meteor\meteors.dm"
@@ -2093,27 +2091,6 @@
#include "code\modules\antagonists\heretic\structures\carving_knife.dm"
#include "code\modules\antagonists\heretic\structures\mawed_crucible.dm"
#include "code\modules\antagonists\highlander\highlander.dm"
-#include "code\modules\antagonists\hivemind\hivemind.dm"
-#include "code\modules\antagonists\hivemind\hivemind_overlays.dm"
-#include "code\modules\antagonists\hivemind\hiveui.dm"
-#include "code\modules\antagonists\hivemind\vessel.dm"
-#include "code\modules\antagonists\hivemind\spells\hivemind_add.dm"
-#include "code\modules\antagonists\hivemind\spells\hivemind_barrier.dm"
-#include "code\modules\antagonists\hivemind\spells\hivemind_compell.dm"
-#include "code\modules\antagonists\hivemind\spells\hivemind_dominance.dm"
-#include "code\modules\antagonists\hivemind\spells\hivemind_hand.dm"
-#include "code\modules\antagonists\hivemind\spells\hivemind_heal.dm"
-#include "code\modules\antagonists\hivemind\spells\hivemind_integrate.dm"
-#include "code\modules\antagonists\hivemind\spells\hivemind_invasion.dm"
-#include "code\modules\antagonists\hivemind\spells\hivemind_loyalty.dm"
-#include "code\modules\antagonists\hivemind\spells\hivemind_panic.dm"
-#include "code\modules\antagonists\hivemind\spells\hivemind_probe.dm"
-#include "code\modules\antagonists\hivemind\spells\hivemind_rally.dm"
-#include "code\modules\antagonists\hivemind\spells\hivemind_see.dm"
-#include "code\modules\antagonists\hivemind\spells\hivemind_shatter.dm"
-#include "code\modules\antagonists\hivemind\spells\hivemind_shock.dm"
-#include "code\modules\antagonists\hivemind\spells\hivemind_spells.dm"
-#include "code\modules\antagonists\hivemind\spells\hivemind_thrall.dm"
#include "code\modules\antagonists\holoparasite\holoparasite_antag.dm"
#include "code\modules\antagonists\holoparasite\holoparasite_team.dm"
#include "code\modules\antagonists\hypnotization\hypnotized.dm"
diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm
index 3421757c9291b..0a21008e6b14c 100644
--- a/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm
+++ b/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm
@@ -74,7 +74,6 @@
/datum/dynamic_ruleset/roundstart/nuclear,
/datum/dynamic_ruleset/roundstart/wizard,
/datum/dynamic_ruleset/roundstart/revs,
- /datum/dynamic_ruleset/roundstart/hivemind
)
//////////////////////////////////////////////
@@ -100,7 +99,6 @@
/datum/dynamic_ruleset/roundstart/nuclear,
/datum/dynamic_ruleset/roundstart/wizard,
/datum/dynamic_ruleset/roundstart/revs,
- /datum/dynamic_ruleset/roundstart/hivemind
)
/datum/dynamic_ruleset/latejoin/heretic_smuggler/execute(forced = FALSE)
diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm
index 64c35dc67f18a..2a3360b25724e 100644
--- a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm
+++ b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm
@@ -202,7 +202,6 @@
/datum/dynamic_ruleset/roundstart/nuclear,
/datum/dynamic_ruleset/roundstart/wizard,
/datum/dynamic_ruleset/roundstart/revs,
- /datum/dynamic_ruleset/roundstart/hivemind
)
/datum/dynamic_ruleset/midround/autotraitor/trim_candidates()
diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm
index 799f63e76c1b6..ebe48dbb4474a 100644
--- a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm
+++ b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm
@@ -630,32 +630,3 @@
SSticker.mode_result = "win - incursion win"
else
SSticker.mode_result = "loss - staff stopped the incursion"
-
-//////////////////////////////////////////////
-// //
-// ASSIMILATION //
-// //
-//////////////////////////////////////////////
-
-/datum/dynamic_ruleset/roundstart/hivemind
- name = "Assimilation"
- role_preference = /datum/role_preference/antagonist/hivemind_host
- antag_datum = /datum/antagonist/hivemind
- protected_roles = list(JOB_NAME_SECURITYOFFICER, JOB_NAME_WARDEN, JOB_NAME_DETECTIVE,JOB_NAME_HEADOFSECURITY, JOB_NAME_CAPTAIN)
- restricted_roles = list(JOB_NAME_AI, JOB_NAME_CYBORG)
- required_candidates = 3
- weight = 3
- cost = 30
- requirements = list(100,90,80,60,40,30,10,10,10,10)
- flags = HIGH_IMPACT_RULESET | NO_OTHER_ROUNDSTARTS_RULESET | PERSISTENT_RULESET
-
-/datum/dynamic_ruleset/roundstart/hivemind/pre_execute(population)
- . = ..()
- var/num_hosts = max( 3 , rand(0,1) + min(8, round(population / 8) ) )
- for (var/i = 1 to num_hosts)
- var/mob/M = antag_pick_n_take(candidates)
- assigned += M.mind
- M.mind.restricted_roles = restricted_roles
- M.mind.special_role = ROLE_HIVE
- GLOB.pre_setup_antags += M.mind
- return TRUE
diff --git a/code/game/gamemodes/hivemind/hivemind.dm b/code/game/gamemodes/hivemind/hivemind.dm
deleted file mode 100644
index 2159fcc800ca4..0000000000000
--- a/code/game/gamemodes/hivemind/hivemind.dm
+++ /dev/null
@@ -1,106 +0,0 @@
-GLOBAL_LIST_EMPTY(hivehosts)
-
-/datum/game_mode/hivemind
- name = "assimilation"
- config_tag = "hivemind"
- report_type = "hivemind"
- role_preference = /datum/role_preference/antagonist/hivemind_host
- antag_datum = /datum/antagonist/hivemind
- false_report_weight = 5
- protected_jobs = list(JOB_NAME_SECURITYOFFICER, JOB_NAME_WARDEN, JOB_NAME_DETECTIVE, JOB_NAME_HEADOFSECURITY, JOB_NAME_CAPTAIN)
- restricted_jobs = list(JOB_NAME_AI, JOB_NAME_CYBORG)
- required_players = 30
- required_enemies = 3
- recommended_enemies = 3
- reroll_friendly = 1
-
- announce_span = "danger"
- announce_text = "The hosts of several psionic hiveminds have infiltrated the station and are looking to assimilate the crew!\n\
- Hosts: Expand your hivemind and complete your objectives at all costs!\n\
- Crew: Prevent the hosts from getting into your mind!"
-
- var/list/hosts = list()
-
-
-/proc/is_hivemember(mob/living/L)
- if(!L)
- return FALSE
- var/datum/mind/M = L.mind
- if(!M)
- return FALSE
- for(var/datum/antagonist/hivemind/H as() in GLOB.hivehosts)
- if(H.hivemembers.Find(M))
- return TRUE
- return FALSE
-
-/proc/remove_hivemember(mob/living/L) //Removes somebody from all hives as opposed to the antag proc remove_from_hive()
- var/datum/mind/M = L?.mind
- if(!M)
- return
- for(var/datum/antagonist/hivemind/H as() in GLOB.hivehosts)
- if(H.hivemembers.Find(M))
- H.remove_hive_overlay(M.current)
- H.hivemembers -= M
- H.calc_size()
- var/datum/antagonist/hivevessel/V = IS_WOKEVESSEL(L)
- if(V && M)
- M.remove_antag_datum(/datum/antagonist/hivevessel)
-
-/datum/game_mode/hivemind/pre_setup()
-
- if(CONFIG_GET(flag/protect_roles_from_antagonist))
- restricted_jobs += protected_jobs
-
- if(CONFIG_GET(flag/protect_assistant_from_antagonist))
- restricted_jobs += JOB_NAME_ASSISTANT
-
- if(CONFIG_GET(flag/protect_heads_from_antagonist))
- restricted_jobs += SSdepartment.get_jobs_by_dept_id(DEPT_NAME_COMMAND)
-
- var/num_hosts = max( 3 , rand(0,1) + min(8, round(num_players() / 8) ) ) //1 host for every 8 players up to 64, with a 50% chance of an extra
-
- for(var/j = 0, j < num_hosts, j++)
- if (!antag_candidates.len)
- break
- var/datum/mind/host = antag_pick(antag_candidates, /datum/role_preference/antagonist/hivemind_host)
- hosts += host
- host.special_role = ROLE_HIVE
- host.restricted_roles = restricted_jobs
- GLOB.pre_setup_antags += host
- log_game("[key_name(host)] has been selected as a hivemind host")
- antag_candidates.Remove(host)
-
- if(hosts.len < required_enemies)
- setup_error = "Not enough host candidates"
- return FALSE
- else
- return TRUE
-
-
-/datum/game_mode/hivemind/post_setup()
- for(var/datum/mind/i in hosts)
- i.add_antag_datum(/datum/antagonist/hivemind)
- GLOB.pre_setup_antags -= i
- return ..()
-
-/datum/game_mode/hivemind/generate_report()
- return "Reports of psychic activity have been showing up in this sector, and we believe this may have to do with a containment breach on \[REDACTED\] last month \
- when a sapient hive intelligence displaying paranormal powers escaped into the unknown. They present a very large risk as they can assimilate people into \
- the hivemind with ease, although they appear unable to affect mindshielded personnel."
-
-/datum/game_mode/hivemind/generate_credit_text()
- var/list/round_credits = list()
- var/len_before_addition
-
- for(var/datum/antagonist/hivemind/H as() in GLOB.hivehosts)
- round_credits += "
Hive [H.hiveID]:
"
- len_before_addition = round_credits.len
- round_credits += "[H.name] as the Hivemind Host
"
- for(var/datum/antagonist/hivevessel/V as() in H.avessels)
- round_credits += "[V.name] as an Awakened Vessel
"
- if(len_before_addition == round_credits.len)
- round_credits += list("Hive [H.hiveID] couldn't withstand the competition!
")
- round_credits += "
"
-
- round_credits += ..()
- return round_credits
diff --git a/code/game/gamemodes/hivemind/objectives.dm b/code/game/gamemodes/hivemind/objectives.dm
deleted file mode 100644
index e8d2d8c820bc5..0000000000000
--- a/code/game/gamemodes/hivemind/objectives.dm
+++ /dev/null
@@ -1,97 +0,0 @@
-/datum/objective/hivemind
-
-/datum/objective/hivemind/hivesize
- explanation_text = "This is a bug. Error:HIVE2"
- target_amount = 10
-
-/datum/objective/hivemind/hivesize/New()
- target_amount = ( max(8, round(GLOB.joined_player_list.len/3)) + rand(0,3) )
- update_explanation_text()
-
-/datum/objective/hivemind/hivesize/update_explanation_text()
- explanation_text = "End the round with at least [target_amount] beings assimilated into the hive."
-
-/datum/objective/hivemind/hivesize/check_completion()
- var/datum/antagonist/hivemind/host = owner.has_antag_datum(/datum/antagonist/hivemind)
- if(!host)
- return ..()
- return (host.hive_size >= target_amount) || ..()
-
-/datum/objective/hivemind/hiveescape
- explanation_text = "This is a bug. Error:HIVE2"
- target_amount = 10
-
-/datum/objective/hivemind/hiveescape/New()
- target_amount = ( max(5, round(GLOB.joined_player_list.len/6)) + rand(0,2) )
- update_explanation_text()
-
-/datum/objective/hivemind/hiveescape/update_explanation_text()
- explanation_text = "Have at least [target_amount] members of the hive escape on the shuttle alive and free."
-
-/datum/objective/hivemind/hiveescape/check_completion()
- var/count = 0
- var/datum/antagonist/hivemind/host = owner.has_antag_datum(/datum/antagonist/hivemind)
- if(!host)
- return ..()
- for(var/datum/mind/M in host.hivemembers)
- if(considered_escaped(M))
- count++
- return (count >= target_amount) || ..()
-
-/datum/objective/hivemind/biggest
- explanation_text = "End the round with more vessels than any other hivemind host."
-
-/datum/objective/hivemind/biggest/check_completion()
- var/datum/antagonist/hivemind/host = owner.has_antag_datum(/datum/antagonist/hivemind)
- if(!host)
- return ..()
- for(var/datum/antagonist/hivemind/H as() in GLOB.hivehosts)
- if(H == host)
- continue
- if(H.hive_size >= host.hive_size)
- return ..()
- return TRUE
-
-/datum/objective/hivemind/dominance
- name = "dominance"
- explanation_text = "Assert dominance after having twenty more vessels and more integrations than any other hive."
-
-/datum/objective/hivemind/dominance/check_completion()
- var/datum/antagonist/hivemind/host = owner.has_antag_datum(/datum/antagonist/hivemind)
- if(!host)
- return ..()
- return host?.dominant || ..()
-
-/datum/objective/hivemind/awaken
- name = "awaken"
- var/target_role_type=FALSE
-
-/datum/objective/hivemind/awaken/update_explanation_text()
- if(target && target.current)
- explanation_text = "Turn [target.name], the [!target_role_type ? target.assigned_role : target.special_role], into an awakened vessel."
- else
- explanation_text = "Free Objective"
-
-/datum/objective/hivemind/awaken/is_valid_target(datum/mind/possible_target)
- . = ..()
- if(possible_target.has_antag_datum(/datum/antagonist/hivemind))
- return FALSE
-
-/datum/objective/hivemind/awaken/check_completion()
- var/datum/antagonist/hivemind/host = owner.has_antag_datum(/datum/antagonist/hivemind)
- if(!host)
- return ..()
- for(var/datum/mind/mind as() in host.avessels)
- if(target == mind)
- return TRUE
- return FALSE
-
-/datum/objective/hivemind/integrate
- name = "integrate"
- explanation_text = "Integrate at least one other Hive Host."
-
-/datum/objective/hivemind/integrate/check_completion()
- var/datum/antagonist/hivemind/host = owner.has_antag_datum(/datum/antagonist/hivemind)
- if(!host)
- return ..()
- return host?.size_mod || ..()
diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm
index fa9c1e3481660..3ba465848e8c6 100644
--- a/code/game/machinery/cloning.dm
+++ b/code/game/machinery/cloning.dm
@@ -275,8 +275,6 @@
if(H)
H.faction |= factions
- remove_hivemember(H)
-
for(var/t in traumas)
var/datum/brain_trauma/BT = t
var/datum/brain_trauma/cloned_trauma = BT.on_clone()
diff --git a/code/game/objects/items/implants/implant_mindshield.dm b/code/game/objects/items/implants/implant_mindshield.dm
index 113fc640ab485..f990ca463f537 100644
--- a/code/game/objects/items/implants/implant_mindshield.dm
+++ b/code/game/objects/items/implants/implant_mindshield.dm
@@ -33,24 +33,6 @@
qdel(src)
return FALSE
- var/datum/antagonist/hivemind/hiv= target.mind.has_antag_datum(/datum/antagonist/hivemind)
- if(hiv)
- var/timer = round(rand(1800,3000))
- addtimer(CALLBACK(hiv, TYPE_PROC_REF(/datum/antagonist/hivemind, handle_implant)), timer, TIMER_STOPPABLE)
- hiv.handle_implant()
-
- if(is_hivemember(target))
- for(var/datum/antagonist/hivemind/hive in GLOB.antagonists)
- if(hive.hivemembers.Find(target.mind))
- var/mob/living/carbon/C = hive.owner.current
- if(C?.mind)
- to_chat(C, "We detect a surge of psionic energy from a far away vessel before they disappear from the hive. Whatever happened, there's a good chance they're after us now.")
- if(IS_WOKEVESSEL(target))
- target.mind.remove_antag_datum(/datum/antagonist/hivevessel)
- target.visible_message("[target]'s thoughts seem to clear!", null, null, null, target)
- ADD_TRAIT(target, TRAIT_HIVE_BURNT, HIVEMIND_TRAIT)
- to_chat(target, "You hear supernatural wailing echo throughout your mind as you are finally set free. Deep down, you can feel the lingering presence of those who enslaved you... as can they!")
- remove_hivemember(target)
var/datum/antagonist/rev/rev = target.mind.has_antag_datum(/datum/antagonist/rev)
if(rev)
diff --git a/code/modules/antagonists/hivemind/hivemind.dm b/code/modules/antagonists/hivemind/hivemind.dm
deleted file mode 100644
index 5032a78fd8c5d..0000000000000
--- a/code/modules/antagonists/hivemind/hivemind.dm
+++ /dev/null
@@ -1,341 +0,0 @@
-/datum/antagonist/hivemind
- name = "Hivemind Host"
- roundend_category = "hiveminds"
- antagpanel_category = "Hivemind Host"
- banning_key = ROLE_HIVE
- required_living_playtime = 4
- antag_moodlet = /datum/mood_event/hivehost
- var/list/hivemembers = list()
- var/list/avessels = list()
- var/hive_size = 0
- var/size_mod = 0 // Bonus size for using integrate
- var/unlocked_dominance = FALSE
- var/dominant = FALSE
- var/mutable_appearance/glow
- var/isintegrating = 0
- var/hiveID = "Hivemind"
- var/searchcharge = 0
- var/datum/psychic_plane/psychic_plane
- var/datum/action/innate/psychic_plane/plane_action
- var/avessel_limit = 2
- var/descriptor = "Hivemind"
- var/hud_entry_num
-
- var/list/upgrade_tiers = list(
- //Tier 1 - Roundstart powers
- /obj/effect/proc_holder/spell/targeted/hive_add = 0,
- /obj/effect/proc_holder/spell/target_hive/hive_see = 0,
- /obj/effect/proc_holder/spell/target_hive/hive_shock = 0,
- //Tier 2 - Host vs Host
- /obj/effect/proc_holder/spell/targeted/hive_integrate = 5,
- /obj/effect/proc_holder/spell/targeted/hive_hack = 5,
- /obj/effect/proc_holder/spell/targeted/hive_probe = 5,
- //Tier 3 - Crew manipulation powers
- /obj/effect/proc_holder/spell/target_hive/hive_compell = 10,
- /obj/effect/proc_holder/spell/self/hive_loyal = 10,
- /obj/effect/proc_holder/spell/targeted/hive_thrall = 10,
- //Tier 4 - Combat powers
- /obj/effect/proc_holder/spell/self/hive_drain = 15,
- /obj/effect/proc_holder/spell/targeted/forcewall/hive = 15,
- /obj/effect/proc_holder/spell/targeted/induce_panic = 15,
- //Tier 5 - Finishers
- /obj/effect/proc_holder/spell/target_hive/hive_shatter = 20,
- /obj/effect/proc_holder/spell/targeted/hive_rally = 20,
- )
-
-
-/datum/antagonist/hivemind/proc/calc_size()
- list_clear_nulls(hivemembers)
- var/temp = 0
- for(var/datum/mind/M in hivemembers)
- if(M.current && M.current.stat != DEAD)
- temp++
- if(hive_size != temp)
- hive_size = temp
- check_powers()
-
-/datum/antagonist/hivemind/proc/get_carbon_members()
- var/list/carbon_members = list()
- for(var/datum/mind/M in hivemembers)
- if(!M.current || !iscarbon(M.current))
- continue
- carbon_members += M.current
- return carbon_members
-
-/datum/antagonist/hivemind/proc/check_powers()
- for(var/power in upgrade_tiers)
- var/level = upgrade_tiers[power]
- if(hive_size+size_mod >= level && !(locate(power) in owner.spell_list))
- var/obj/effect/proc_holder/spell/the_spell = new power(null)
- owner.AddSpell(the_spell)
- if(hive_size > 0)
- to_chat(owner, "We have unlocked [the_spell.name]. [the_spell.desc]")
- if(!unlocked_dominance && hive_size >= 20)
- var/lead = TRUE
- for(var/datum/antagonist/hivemind/enemy in GLOB.hivehosts)
- if(enemy == src)
- continue
- if(!enemy.unlocked_dominance && enemy.hive_size <= hive_size + size_mod - 15)
- continue
- if(enemy.size_mod <= size_mod)
- continue
- lead = FALSE
- break
- if(lead)
- unlocked_dominance = TRUE
- owner.AddSpell(new /obj/effect/proc_holder/spell/self/hive_dominance)
- to_chat(owner, "Our strength overflowing and our competitors left in the dust, we can proclaim our Dominance and enter a heightened state.")
-
-/datum/antagonist/hivemind/proc/add_to_hive(mob/living/carbon/C)
- if(!C)
- return
- var/datum/mind/M = C.mind
- if(M)
- hivemembers |= M
- RegisterSignal(M, COMSIG_PARENT_QDELETING, PROC_REF(handle_mind_deletion))
- add_hive_overlay(C)
- calc_size()
-
- var/user_warning = "We have detected an enemy hivemind using our physical form as a vessel and have begun ejecting their mind! They will be alerted of our disappearance once we succeed!"
- if(IS_HIVEHOST(C))
- var/eject_time = rand(1400,1600) //2.5 minutes +- 10 seconds
- addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(to_chat), C, user_warning), rand(500,1300)) // If the host has assimilated an enemy hive host, alert the enemy before booting them from the hive after a short while
- addtimer(CALLBACK(src, PROC_REF(handle_ejection), C), eject_time)
-
-/datum/antagonist/hivemind/proc/handle_mind_deletion(datum/mind/M)
- SIGNAL_HANDLER
- remove_from_hive(M.current)
-
-/datum/antagonist/hivemind/proc/is_carbon_member(mob/living/carbon/C)
- if(!hivemembers || !C || !iscarbon(C))
- return FALSE
- var/datum/mind/M = C.mind
- if(!M || !hivemembers.Find(M))
- return FALSE
- return TRUE
-
-/datum/antagonist/hivemind/proc/remove_from_hive(mob/living/carbon/C)
- SIGNAL_HANDLER
- var/datum/mind/M = C.mind
- if(M)
- remove_hive_overlay(C)
- hivemembers -= M
- calc_size()
-
-/datum/antagonist/hivemind/proc/handle_ejection(mob/living/carbon/C) //C is the one being ejected from C2s hive
- if(!C || !owner)
- return
- var/mob/living/carbon/C2 = owner.current
- if(!C2)
- return
- if(IS_HIVEHOST(C) && IS_HIVEHOST(C2))
- remove_from_hive(C)
- to_chat(C2, "We detect a surge of psionic energy from a far away vessel before they disappear from the hive. Whatever happened, there's a good chance they're after us now.")
- to_chat(C, "The enemy host has been ejected from our mind." )
-
-/datum/antagonist/hivemind/proc/handle_implant()
- var/mob/living/carbon/human/self = owner.current
- if(HAS_TRAIT(self, TRAIT_MINDSHIELD))
- for(var/obj/item/implant/mindshield/M in self.implants)
- to_chat(self, "Our latent psychic power destroys our mindshield implant!")
- qdel(M)
-
-/datum/antagonist/hivemind/proc/destroy_hive()
- hivemembers = list()
- for(var/datum/mind/mind in avessels)
- mind.remove_antag_datum(/datum/antagonist/hivevessel)
- avessels = list()
- calc_size()
- for(var/power in upgrade_tiers)
- if(!upgrade_tiers[power])
- continue
- owner.RemoveSpell(power)
-
-/datum/antagonist/hivemind/antag_panel_data()
- return "Vessels Assimilated: [hive_size] (+[size_mod])"
-
-
-/datum/antagonist/hivemind/on_gain()
- owner.special_role = ROLE_HIVE
- GLOB.hivehosts += src
- generate_flavour()
- create_actions()
- check_powers()
- forge_objectives()
- ..()
-
-/datum/antagonist/hivemind/apply_innate_effects()
- handle_clown_mutation(owner.current, "The great psionic powers of the Hive lets you overcome your clownish nature, allowing you to wield weapons with impunity.")
- update_hivemind_hud(owner.current)
-
-/datum/antagonist/hivemind/proc/update_hivemind_hud(mob/living/M)
- var/datum/atom_hud/antag/hivehud = GLOB.huds[hud_entry_num]
- if(!hivehud)
- hivehud = new/datum/atom_hud/antag()
- hud_entry_num = GLOB.huds.len+1 // this is the index the hivemind hud will be added at
- GLOB.huds += hivehud
- hivehud.join_hud(M)
- if(IS_HIVEHOST(M))
- set_antag_hud(M,"hivemind")
- else
- set_antag_hud(M,"hivevessel")
-
-/datum/antagonist/hivemind/proc/update_hivemind_hud_removed(mob/living/M)
- var/datum/atom_hud/antag/hivehud = GLOB.huds[hud_entry_num]
- if(hivehud)
- hivehud.leave_hud(M)
- set_antag_hud(M, null)
-
-/datum/antagonist/hivemind/remove_innate_effects()
- handle_clown_mutation(owner.current, removing=FALSE)
- update_hivemind_hud_removed(owner.current)
-
-/datum/antagonist/hivemind/on_removal()
- //Remove all hive powers here
- GLOB.hivehosts -= src
- for(var/power in upgrade_tiers)
- owner.RemoveSpell(power)
-
- if(!silent && owner.current)
- to_chat(owner.current," Your psionic powers fade, you are no longer the hivemind's host! ")
- owner.special_role = null
- ..()
-
-/datum/antagonist/hivemind/proc/forge_objectives()
- if(prob(50)) //One hive size objective
- var/datum/objective/hivemind/hivesize/size_objective = new
- size_objective.owner = owner
- objectives += size_objective
- log_objective(owner, size_objective.explanation_text)
- else if(prob(70))
- var/datum/objective/hivemind/hiveescape/hive_escape_objective = new
- hive_escape_objective.owner = owner
- objectives += hive_escape_objective
- log_objective(owner, hive_escape_objective.explanation_text)
- else
- var/datum/objective/hivemind/biggest/biggest_objective = new
- biggest_objective.owner = owner
- objectives += biggest_objective
- log_objective(owner, biggest_objective.explanation_text)
-
- if(prob(40)) //One medium difficulty objective
- var/datum/objective/steal/steal_objective = new
- steal_objective.owner = owner
- steal_objective.find_target()
- objectives += steal_objective
- log_objective(owner, steal_objective.explanation_text)
- else
- var/datum/objective/hivemind/awaken/awaken_objective = new
- awaken_objective.owner = owner
- awaken_objective.find_target(null,GLOB.hivehosts)
- objectives += awaken_objective
- log_objective(owner, awaken_objective.explanation_text)
-
- if(prob(30))
- var/datum/objective/hivemind/dominance/assert_dominance = new
- assert_dominance.owner = owner
- objectives += assert_dominance
- log_objective(owner, assert_dominance.explanation_text)
- else if(prob(50))
- var/datum/objective/hivemind/integrate/integrate_objective = new
- integrate_objective.owner = owner
- objectives += integrate_objective
- log_objective(owner, integrate_objective.explanation_text)
-
- var/datum/objective/escape/escape_objective = new
- escape_objective.owner = owner
- objectives += escape_objective
- log_objective(owner, escape_objective.explanation_text)
-
- return
-
-/datum/antagonist/hivemind/greet()
- to_chat(owner.current, "You are the host of a powerful Hivemind.")
- to_chat(owner.current, "Your psionic powers will grow by assimilating the crew into your hive. Use the Assimilate Vessel spell on a stationary \
- target, and after ten seconds he will be one of the hive. This is completely silent and safe to use, and failing will reset the cooldown. As \
- you assimilate the crew, you will gain more powers to use. Most are silent and won't help you in a fight, but grant you great power over your \
- vessels. Hover your mouse over a power's action icon for an extended description on what it does. There are other hiveminds onboard the station, \
- collaboration is possible, but a strong enough hivemind can reap many rewards from a well planned betrayal.")
- owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/assimilation.ogg', vol = 100, vary = FALSE, channel = CHANNEL_ANTAG_GREETING, pressure_affected = FALSE)
-
- owner.announce_objectives()
- owner.current.client?.tgui_panel?.give_antagonist_popup("Hivemind",
- "Your psionic powers will grow by assimilating the crew into your hive. Use the Assimilate Vessel spell on a stationary \
- target, and after ten seconds he will be one of the hive. This is completely silent and safe to use, and failing will reset the cooldown. As \
- you assimilate the crew, you will gain more powers to use. Most are silent and won't help you in a fight, but grant you great power over your \
- vessels. Hover your mouse over a power's action icon for an extended description on what it does. There are other hiveminds onboard the station, \
- our powers will grow if we integrate them with our own consciousness.")
- to_chat(owner.current,"We are hive [hiveID]!")
-
-/datum/antagonist/hivemind/roundend_report()
- var/list/result = list()
- result += ""
- var/greentext = TRUE
- if(objectives)
- result += printobjectives(objectives)
- for(var/datum/objective/objective in objectives)
- if(!objective.check_completion())
- greentext = FALSE
- break
-
- if(objectives.len == 0 || greentext)
- result += "The [name] was successful!"
- else
- result += "The [name] has failed!"
- result += "The Hivemind Host was:"
- result += printplayer(owner)
- result += "The Awakened Vessels were:"
- for(var/datum/mind/mind in avessels)
- result += printplayer(mind)
- return result.Join("
")
-
-/datum/antagonist/hivemind/is_gamemode_hero()
- return SSticker.mode.name == "Assimilation"
-
-/datum/antagonist/hivemind/proc/generate_flavour()
- var/static/list/prefix = list("Azure","Crimson","Silver","Verdant","Ivory","Sepia","Gold","Canary","Rust","Cider","Scarlet","Rose","Magenta","Navy","Lapis","Emerald")
- var/static/list/postfix = list("Flame","Presence","Maw","Revelation","Consciousness","Blanket","Structure","Command","Hierarchy","Aristocrat","Zealotry","Fascination")
- hiveID = pick_n_take(prefix) + " " + pick_n_take(postfix)
- var/static/list/types = list(
- "Domineering and opressive, not a pawn out of place, not a step out of line and ruthless with the oposition.",
- "Crashing waves of assimilation, no subtlety, just the primal instinct to expand.",
- "In one hand, the olive branch in the other; a knife.",
- "Opulent and Aristocratic with ambitions to expand their fiefdom.",
- "Seething with Rage and teeming with Anger, the former dominant personality amongst all, returning for its throne.",
- "A Trickster with a preference for chaos, unpredictable, the emboddiment of mischief.",
- "Benevolent to their own eyes, seeks to free living beings of the burden of free will.",
- "Caring for their vessels and ruthless against those that would attack them, seeks to expand their protective embrace.",
- "Diplomatic and calm mannered, may seek alliances of convenience to further their own gain.",
- "Vulture-like and opportunistic, eager to pounce in a moment of weakness.",
- "Pawns are mere Pawns, and they are expendable, crush our foes in a wave of meat."
- )
- descriptor = pick_n_take(types)
-
-/datum/antagonist/hivemind/proc/create_actions()
- psychic_plane = new(src)
- plane_action = new(psychic_plane)
- plane_action.Grant(owner.current)
-
-/datum/antagonist/hivemind/Destroy()
- GLOB.hivehosts -= src
- destroy_hive()
- QDEL_NULL(psychic_plane)
- QDEL_NULL(plane_action)
- return ..()
-
-/datum/antagonist/hivemind/proc/dominance()
- dominant = TRUE
- if(!owner?.current)
- return
- var/mob/living/carbon/C = owner.current
- if(!C)
- return
- to_chat(C, "With our psyche unleashed we will be able to sustain an unlimited ammount of awakened vessels!")
- ADD_TRAIT(C, TRAIT_STUNIMMUNE, HIVEMIND_TRAIT)
- ADD_TRAIT(C, TRAIT_SLEEPIMMUNE, HIVEMIND_TRAIT)
- ADD_TRAIT(C, TRAIT_VIRUSIMMUNE, HIVEMIND_TRAIT)
- ADD_TRAIT(C, TRAIT_NOLIMBDISABLE, HIVEMIND_TRAIT)
- ADD_TRAIT(C, TRAIT_NOHUNGER, HIVEMIND_TRAIT)
- ADD_TRAIT(C, TRAIT_NODISMEMBER, HIVEMIND_TRAIT)
- ADD_TRAIT(C, TRAIT_NOSOFTCRIT, HIVEMIND_TRAIT)
- ADD_TRAIT(C, TRAIT_NOHARDCRIT, HIVEMIND_TRAIT)
diff --git a/code/modules/antagonists/hivemind/hivemind_overlays.dm b/code/modules/antagonists/hivemind/hivemind_overlays.dm
deleted file mode 100644
index 9271f8963043b..0000000000000
--- a/code/modules/antagonists/hivemind/hivemind_overlays.dm
+++ /dev/null
@@ -1,30 +0,0 @@
-/datum/antagonist/hivemind/proc/add_hive_overlay/(mob/living/carbon/human/target) //for when someone is assimilated, so hive host can keep track properly
- var/mob/living/carbon/human/host = owner.current
- if(is_carbon_member(target))
- var/I = image('icons/misc/hivemind_images.dmi', loc = target, icon_state = "member")
- host.client.images += I
-
-/datum/antagonist/hivemind/proc/add_hive_overlay_probe/(mob/living/carbon/human/target) //for when hive host probes someone who is in another hive
- var/mob/living/carbon/human/host = owner.current
- var/I = image('icons/misc/hivemind_images.dmi', loc = target, icon_state = "enemy")
- host.client.images += I
-
-/datum/antagonist/hivemind/proc/remove_hive_overlay/(mob/living/carbon/human/target)
- var/mob/living/carbon/human/host = owner.current
- for(var/image/I in host.client.images)
- if(I.loc == target && I.icon == 'icons/misc/hivemind_images.dmi')
- host.client.images -= I
- qdel(I)
-
-/datum/antagonist/hivemind/proc/remove_hive_overlay_probe/(mob/living/carbon/human/target)
- var/mob/living/carbon/human/host = owner.current
- for(var/image/I in host.client.images)
- if(I.loc == target && I.icon == 'icons/misc/hivemind_images.dmi' && I.icon_state == "enemy")
- host.client.images -= I
- qdel(I)
-
-/datum/antagonist/hivemind/proc/regain_images()
- var/mob/living/carbon/human/host = owner.current
- for(var/datum/mind/mind as() in hivemembers)
- var/I = image('icons/misc/hivemind_images.dmi', loc = mind.current, icon_state = "member")
- host.client.images += I
diff --git a/code/modules/antagonists/hivemind/hiveui.dm b/code/modules/antagonists/hivemind/hiveui.dm
deleted file mode 100644
index 60498165895dd..0000000000000
--- a/code/modules/antagonists/hivemind/hiveui.dm
+++ /dev/null
@@ -1,96 +0,0 @@
-//Hivemind monitoring and powers shop
-
-/datum/psychic_plane
- var/name = "psychic plane"
- var/datum/antagonist/hivemind/hivehost
-
-/datum/psychic_plane/New(my_hivehost)
- . = ..()
- hivehost = my_hivehost
-
-/datum/psychic_plane/Destroy()
- hivehost = null
- . = ..()
-
-
-/datum/psychic_plane/ui_state(mob/user)
- return GLOB.always_state
-
-/datum/psychic_plane/ui_interact(mob/user, datum/tgui/ui)
- ui = SStgui.try_update_ui(user, src, ui)
- if(!ui)
- ui = new(user, src, "PsychicPlane", "Psychic Plane")
- ui.open()
- ui.set_autoupdate(TRUE)
-
-/datum/psychic_plane/ui_data(mob/user)
- var/list/data = list()
-
- data["hives"] = list()
- for(var/datum/antagonist/hivemind/hivehosts in GLOB.hivehosts)
- var/list/hive_data = list(
- hive = hivehosts.hiveID,
- size = hivehosts.hive_size,
- charges = hivehosts.searchcharge,
- avessel_number = hivehosts.avessels.len,
- integrations = hivehosts.size_mod/5,
- type = hivehosts.descriptor,
- )
- data["hives"] += list(hive_data)
-
-
-
- return data
-
-/datum/psychic_plane/ui_act(action, params)
- if(..())
- return
- if(action == "track")
- var/hivetarget = params["hiveref"]
- var/mob/living/carbon/ourhive = hivehost.owner?.current
- if(hivetarget == hivehost.hiveID)
- to_chat(ourhive, "We cannot track ourselves!")
- return
- if(hivehost.searchcharge <= 0)
- to_chat(ourhive, "We don't have any tracking charges!")
- return
- hivehost.searchcharge -= 1
- if(!do_after(ourhive, 5, ourhive, timed_action_flags = IGNORE_HELD_ITEM))
- to_chat(ourhive, "Our concentration has been broken!")
- else
- for(var/datum/antagonist/hivemind/hivehosts in GLOB.hivehosts)
- if(hivehosts.hiveID == hivetarget)
- var/mob/living/carbon/enemy = hivehosts.owner?.current
- if(hivehosts.owner.current.stat == DEAD) //ourhive.get_virtual_z_level() != enemy.get_virtual_z_level() ||
- to_chat(ourhive, "We could not find [hivehosts.hiveID]")
- else
- var/dist = get_dist(ourhive.loc,enemy.loc)
- var/dir = get_dir(ourhive.loc,enemy.loc)
- switch(dist)
- if(0 to 7)
- to_chat(ourhive,"Their presence is immediately to the [dir2text(dir)]!")
- if(8 to 15)
- to_chat(ourhive,"We find their presence close, to the [dir2text(dir)]!")
- if(16 to 31)
- to_chat(ourhive,"We find traces in our vicinty. They are to the [dir2text(dir)] of us!")
- else
- to_chat(ourhive,"We find faint sparks far away. They are to the [dir2text(dir)] of us!")
-
-
-/datum/action/innate/psychic_plane
- name = "Psychic Plane"
- icon_icon = 'icons/hud/actions/actions_hive.dmi'
- button_icon_state = "scan"
- background_icon_state = "bg_hive"
- var/datum/psychic_plane/psychic_plane
-
-/datum/action/innate/psychic_plane/New(our_target)
- . = ..()
- button.name = name
- if(istype(our_target, /datum/psychic_plane))
- psychic_plane = our_target
- else
- CRASH("psychic_plane action created with non plane")
-
-/datum/action/innate/psychic_plane/Activate()
- psychic_plane.ui_interact(owner)
diff --git a/code/modules/antagonists/hivemind/spells/hivemind_add.dm b/code/modules/antagonists/hivemind/spells/hivemind_add.dm
deleted file mode 100644
index 979930d2986c5..0000000000000
--- a/code/modules/antagonists/hivemind/spells/hivemind_add.dm
+++ /dev/null
@@ -1,56 +0,0 @@
-/obj/effect/proc_holder/spell/targeted/hive_add
- name = "Assimilate Vessel"
- desc = "We silently add an unsuspecting target to the hive."
- action_icon = 'icons/hud/actions/actions_hive.dmi'
- action_background_icon_state = "bg_hive"
- selection_type = "view"
- action_icon_state = "add"
- range = 7
- invocation_type = INVOCATION_NONE
- clothes_req = 0
- max_targets = 1
- var/ignore_mindshield = FALSE
-
-/obj/effect/proc_holder/spell/targeted/hive_add/cast(list/targets, mob/living/user = usr)
- var/mob/living/carbon/target = targets[1]
- var/datum/antagonist/hivemind/hive = user.mind.has_antag_datum(/datum/antagonist/hivemind)
- var/success = FALSE
-
- if(HAS_TRAIT(target, TRAIT_HIVE_BURNT))
- to_chat(user, "This mind was ridden bare and holds no value anymore.")
- revert_cast()
- return
- if(!target.mind || !target.client || target.stat == DEAD)
- to_chat(user, "We detect no neural activity in this body.")
- revert_cast()
- return
-
- if((HAS_TRAIT(target, TRAIT_MINDSHIELD) && !ignore_mindshield) || istype(target.get_item_by_slot(ITEM_SLOT_HEAD), /obj/item/clothing/head/costume/foilhat))
- to_chat(user, "Powerful technology protects [target.name]'s mind.")
- revert_cast()
- return
-
- if(HAS_TRAIT(target, TRAIT_MINDSHIELD) && ignore_mindshield)
- to_chat(user, "We bruteforce our way past the mental barriers of [target.name] and begin linking our minds!")
- else
- to_chat(user, "We begin linking our mind with [target.name]!")
-
- if(do_after(user, 5*(1.5**get_dist(user, target)), user, timed_action_flags = IGNORE_HELD_ITEM) && (user in viewers(range, target)))
- if(do_after(user, 5*(1.5**get_dist(user, target)), user, timed_action_flags = IGNORE_HELD_ITEM) && (user in viewers(range, target)))
- if((!HAS_TRAIT(target, TRAIT_MINDSHIELD) || ignore_mindshield) && (user in viewers(range, target)))
- to_chat(user, "[target.name] was added to the Hive!")
- success = TRUE
- hive.add_to_hive(target)
- if(ignore_mindshield)
- to_chat(user, "We are briefly exhausted by the effort required by our enhanced assimilation abilities.")
- user.Immobilize(50)
- SEND_SIGNAL(target, COMSIG_NANITE_SET_VOLUME, 0)
- else
- to_chat(user, "We fail to connect to [target.name].")
- else
- to_chat(user, "We fail to connect to [target.name].")
- else
- to_chat(user, "We fail to connect to [target.name].")
-
- if(!success)
- revert_cast()
diff --git a/code/modules/antagonists/hivemind/spells/hivemind_barrier.dm b/code/modules/antagonists/hivemind/spells/hivemind_barrier.dm
deleted file mode 100644
index 7e138e6b709be..0000000000000
--- a/code/modules/antagonists/hivemind/spells/hivemind_barrier.dm
+++ /dev/null
@@ -1,45 +0,0 @@
-/obj/effect/proc_holder/spell/targeted/forcewall/hive
- name = "Telekinetic Field"
- desc = "Our psionic powers form a barrier around us in the physical world that only we can pass through."
- panel = "Hivemind Abilities"
- charge_max = 600
- clothes_req = 0
- human_req = 1
- invocation_type = INVOCATION_NONE
- action_icon = 'icons/hud/actions/actions_hive.dmi'
- action_background_icon_state = "bg_hive"
- action_icon_state = "forcewall"
- range = -1
- include_user = 1
- antimagic_allowed = TRUE
- wall_type = /obj/effect/forcefield/wizard/hive
- var/wall_type_b = /obj/effect/forcefield/wizard/hive/invis
-
-/obj/effect/proc_holder/spell/targeted/forcewall/hive/cast(list/targets,mob/user = usr)
- new wall_type(get_turf(user), null, user)
- for(var/dir in GLOB.alldirs)
- new wall_type_b(get_step(user, dir), null, user)
-
-/obj/effect/forcefield/wizard/hive
- name = "Telekinetic Field"
- desc = "You think, therefore it is."
- timeleft = 150
- pixel_x = -32 //Centres the 96x96 sprite
- pixel_y = -32
- icon = 'icons/effects/96x96.dmi'
- icon_state = "hive_shield"
- layer = ABOVE_ALL_MOB_LAYER
- mouse_opacity = MOUSE_OPACITY_TRANSPARENT
-
-/obj/effect/forcefield/wizard/hive/CanAllowThrough(atom/movable/mover, turf/target)
- . = ..()
- if(mover == wizard)
- return TRUE
- return FALSE
-
-/obj/effect/forcefield/wizard/hive/invis
- icon = null
- icon_state = null
- pixel_x = 0
- pixel_y = 0
- invisibility = INVISIBILITY_MAXIMUM
diff --git a/code/modules/antagonists/hivemind/spells/hivemind_compell.dm b/code/modules/antagonists/hivemind/spells/hivemind_compell.dm
deleted file mode 100644
index f492d1c3b4e19..0000000000000
--- a/code/modules/antagonists/hivemind/spells/hivemind_compell.dm
+++ /dev/null
@@ -1,32 +0,0 @@
-/obj/effect/proc_holder/spell/target_hive/hive_compell
- name = "Compell"
- desc = "We forcefully insert a directive into a vessels mind for a limited time, they'll obey anything short of suicide."
- action_icon_state = "empower"
-
- charge_max = 10 MINUTES
-
-/obj/effect/proc_holder/spell/target_hive/hive_compell/cast(list/targets, mob/living/user = usr)
- var/mob/living/carbon/human/target = targets[1]
- var/datum/antagonist/hivemind/hive = user.mind.has_antag_datum(/datum/antagonist/hivemind)
- var/success = FALSE
- if(!hive)
- to_chat(user, "This is a bug. Error:HIVE1")
- return
- if(!hive.hivemembers)
- return
- var/directive = stripped_input(user, "What objective do you want to give that vessel?", "Objective")
-
- if(target.mind && target.client && target.stat != DEAD)
- if((!HAS_TRAIT(target, TRAIT_MINDSHIELD)) && !istype(target.get_item_by_slot(ITEM_SLOT_HEAD), /obj/item/clothing/head/costume/foilhat))
- if(!IS_HIVEHOST(target) && !IS_WOKEVESSEL(target))
- target.hive_weak_awaken(directive)
- to_chat(user, "We successfully overpower their weak psyche!.")
- success = TRUE
- else
- to_chat(user, "Complex mental barriers protect [target.name]'s mind.")
- else
- to_chat(user, "Powerful technology protects [target.name]'s mind.")
- else
- to_chat(user, "We detect no neural activity in this body.")
- if(!success)
- revert_cast()
diff --git a/code/modules/antagonists/hivemind/spells/hivemind_dominance.dm b/code/modules/antagonists/hivemind/spells/hivemind_dominance.dm
deleted file mode 100644
index f8cfd4f590ebf..0000000000000
--- a/code/modules/antagonists/hivemind/spells/hivemind_dominance.dm
+++ /dev/null
@@ -1,49 +0,0 @@
-/obj/effect/proc_holder/spell/self/hive_dominance
- name = "One Mind"
- desc = "Our true power... finally within reach."
- panel = "Hivemind Abilities"
- charge_type = "charges"
- charge_max = 1
- invocation_type = INVOCATION_NONE
- clothes_req = 0
- human_req = 1
- action_icon = 'icons/hud/actions/actions_hive.dmi'
- action_background_icon_state = "bg_hive"
- action_icon_state = "assim"
- antimagic_allowed = TRUE
-
-/obj/effect/proc_holder/spell/self/hive_dominance/cast(mob/living/user = usr)
- var/datum/antagonist/hivemind/hive = user.mind.has_antag_datum(/datum/antagonist/hivemind)
- if(!hive)
- to_chat(user, "This is a bug. Error:HIVE1")
- return
- hive.glow = mutable_appearance('icons/effects/hivemind.dmi', "awoken", -BODY_BEHIND_LAYER)
- for(var/datum/mind/vessel in hive.avessels)
- var/mob/living/carbon/C = vessel.current
- C.Jitter(15)
- C.Unconscious(150)
- to_chat(C, "Something's wrong...")
- addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(to_chat), C, "...your memories are becoming fuzzy."), 45)
- addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(to_chat), C, "You try to remember who you are..."), 90)
- addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(to_chat), C, "There is no you..."), 110)
- addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(to_chat), C, "...there is only us."), 130)
- var/datum/antagonist/hivevessel/woke_vessel = IS_WOKEVESSEL(C)
- if (woke_vessel)
- woke_vessel.glow = hive.glow
- addtimer(CALLBACK(C, TYPE_PROC_REF(/atom, add_overlay), hive.glow), 150)
-
- for(var/datum/antagonist/hivemind/enemy in GLOB.hivehosts)
- if(enemy.owner)
- enemy.owner.RemoveSpell(new/obj/effect/proc_holder/spell/self/hive_dominance)
- var/mob/living/carbon/C = enemy.owner?.current
- if(!(enemy.hiveID == hive.hiveID))
- to_chat(C, "Something's wrong...")
- addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(to_chat), C, "...a new presence."), 45)
- addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(to_chat), C, "It feels overwhelming..."), 90)
- addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(to_chat), C, "It can't be!"), 110)
- addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(to_chat), C, "Get away, run!"), 130)
- sound_to_playing_players('sound/effects/one_mind.ogg')
- addtimer(CALLBACK(user, TYPE_PROC_REF(/atom, add_overlay), hive.glow), 150)
- addtimer(CALLBACK(hive, TYPE_PROC_REF(/datum/antagonist/hivemind, dominance)), 150)
- addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(send_to_playing_players), "THE ONE MIND RISES"), 150)
- addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(sound_to_playing_players), 'sound/effects/magic.ogg'), 150)
diff --git a/code/modules/antagonists/hivemind/spells/hivemind_hand.dm b/code/modules/antagonists/hivemind/spells/hivemind_hand.dm
deleted file mode 100644
index b86a0be2b5bf5..0000000000000
--- a/code/modules/antagonists/hivemind/spells/hivemind_hand.dm
+++ /dev/null
@@ -1,39 +0,0 @@
-/obj/effect/proc_holder/spell/targeted/touch/hive_fist
- name = "Mental Fist"
- desc = "We channel the strength of our host's hive into a physical weapon, specially effective on rival hives."
- hand_path = /obj/item/melee/touch_attack/hive_fist
- school = "evocation"
- charge_max = 150
- clothes_req = FALSE
- action_icon = 'icons/hud/actions/actions_hive.dmi'
- action_icon_state = "hand"
- action_background_icon_state = "bg_hive"
-
-/obj/item/melee/touch_attack/hive_fist
- name = "Mental Fist"
- desc = "The physical embodiment of a hivemind's might."
- icon_state = "disintegrate"
- item_state = "disintegrate"
- catchphrase = null
-
-/obj/item/melee/touch_attack/hive_fist/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
- if(!proximity_flag || target == user)
- return FALSE
- var/use_charge = FALSE
- if(ishuman(target))
- playsound(user, 'sound/items/welder.ogg', 75, TRUE)
- var/mob/living/carbon/human/tar = target
- var/datum/antagonist/hivemind/foe = IS_HIVEHOST(tar)
- var/datum/antagonist/hivevessel/vessel = IS_WOKEVESSEL(tar)
- var/datum/antagonist/hivevessel/vesselus = IS_WOKEVESSEL(user)
- if(vessel)
- foe = vessel.master
- if(foe)
- tar.adjustFireLoss(round(vesselus.master.hive_size * 0.75))
- tar.adjustStaminaLoss(15)
- else
- tar.adjustFireLoss(15)
- tar.adjustStaminaLoss(40)
- use_charge = TRUE
- if(use_charge)
- return ..()
diff --git a/code/modules/antagonists/hivemind/spells/hivemind_heal.dm b/code/modules/antagonists/hivemind/spells/hivemind_heal.dm
deleted file mode 100644
index 86bcd5ab3920c..0000000000000
--- a/code/modules/antagonists/hivemind/spells/hivemind_heal.dm
+++ /dev/null
@@ -1,45 +0,0 @@
-/obj/effect/proc_holder/spell/self/hive_drain
- name = "Repair Protocol"
- desc = "Our many vessels sacrifice a small portion of their mind's vitality to cure us of our physical and mental ailments."
-
- panel = "Hivemind Abilities"
- charge_max = 600
- clothes_req = 0
- invocation_type = INVOCATION_NONE
- action_icon = 'icons/hud/actions/actions_hive.dmi'
- action_background_icon_state = "bg_hive"
- action_icon_state = "drain"
- human_req = 1
- antimagic_allowed = TRUE
-
-/obj/effect/proc_holder/spell/self/hive_drain/cast(mob/living/carbon/human/user)
- var/datum/antagonist/hivemind/hive = user.mind.has_antag_datum(/datum/antagonist/hivemind)
- if(!hive || !hive.hivemembers)
- return
- var/iterations = 0
- var/list/carbon_members = hive.get_carbon_members()
- if(!carbon_members.len)
- return
- if(!user.getBruteLoss() && !user.getFireLoss() && !user.getCloneLoss() && !user.getOrganLoss(ORGAN_SLOT_BRAIN))
- to_chat(user, "We cannot heal ourselves any more with this power!")
- revert_cast()
- to_chat(user, "We begin siphoning power from our many vessels!")
- while(iterations < 7)
- var/mob/living/carbon/target = pick(carbon_members)
- if(!do_after(user, 15, user, timed_action_flags = IGNORE_HELD_ITEM))
- to_chat(user, "Our concentration has been broken!")
- break
- if(!target)
- to_chat(user, "We have run out of vessels to drain.")
- break
- if(target.getOrganLoss(ORGAN_SLOT_BRAIN) < 50)
- target.adjustOrganLoss(ORGAN_SLOT_BRAIN, 5)
- if(user.getBruteLoss() > user.getFireLoss())
- user.heal_ordered_damage(5, list(CLONE, BRUTE, BURN))
- else
- user.heal_ordered_damage(5, list(CLONE, BURN, BRUTE))
- if(!user.getBruteLoss() && !user.getFireLoss() && !user.getCloneLoss()) //If we don't have any of these, stop looping
- to_chat(user, "We finish our healing.")
- break
- iterations++
- user.setOrganLoss(ORGAN_SLOT_BRAIN, 0)
diff --git a/code/modules/antagonists/hivemind/spells/hivemind_integrate.dm b/code/modules/antagonists/hivemind/spells/hivemind_integrate.dm
deleted file mode 100644
index 8d6aa49d10f86..0000000000000
--- a/code/modules/antagonists/hivemind/spells/hivemind_integrate.dm
+++ /dev/null
@@ -1,65 +0,0 @@
-/obj/effect/proc_holder/spell/targeted/hive_integrate
- name = "Integrate"
- desc = "Allows us to syphon the psionic energy from a Host within our grasp."
- panel = "Hivemind Abilities"
- charge_max = 600
- range = 1
- max_targets = 0
- invocation_type = INVOCATION_NONE
- clothes_req = 0
- human_req = 1
- action_icon = 'icons/hud/actions/actions_hive.dmi'
- action_background_icon_state = "bg_hive"
- action_icon_state = "reclaim"
- antimagic_allowed = TRUE
-
-/obj/effect/proc_holder/spell/targeted/hive_integrate/cast(list/targets, mob/living/user = usr)
- var/datum/antagonist/hivemind/hivehost = user.mind.has_antag_datum(/datum/antagonist/hivemind)
- if(!hivehost)
- to_chat(user, "This is a bug. Error:HIVE1")
- return
- var/mob/living/carbon/human/target = user.pulling
- if(!target)
- to_chat(user, "We must be grabbing a creature to integrate them!")
- hivehost.isintegrating = FALSE
- revert_cast()
- return
- if(!IS_HIVEHOST(target))
- to_chat(user, "Their mind is worthless to us!")
- revert_cast()
- return
- if(hivehost.isintegrating)
- to_chat(user, "We are already integrating a mind!")
- revert_cast()
- return
- if(user.grab_state <= GRAB_NECK)
- to_chat(user, "We must have a tighter grip to integrate their mind!")
- revert_cast()
- return
- hivehost.isintegrating = TRUE
-
- for(var/i in 1 to 3)
- switch(i)
- if(1)
- to_chat(user, "This shining mind is with reach.We must stay still..")
- if(2)
- user.visible_message("[user] places their hands on [target]'s head!", "We place our hands on their temple.")
- if(3)
- user.visible_message("[target] seems to be falling unconscious", "We begin to fragment [target]'s mind.")
- to_chat(target, "Your consciousness begin to waver!")
-
- if(!do_after(user, 15 SECONDS, target))
- to_chat(user, "Our integration of [target] has been interrupted!")
- hivehost.isintegrating = FALSE
- return
- to_chat(target, "You mind is shattered!")
- hivehost.isintegrating = FALSE
- var/datum/antagonist/hivemind/enemy = target.mind.has_antag_datum(/datum/antagonist/hivemind)
- enemy.destroy_hive() //Just in case
- target.gib()
- hivehost.size_mod += 5
- hivehost.avessel_limit += 1
- flash_color(user, flash_color="#800080", flash_time=10)
- to_chat(user,"We have reclaimed what gifts weaker minds were squandering and gain ever more insight on our psionic abilities.")
- to_chat(user,"Thanks to this new strength we may awaken an additional vessel..")
- hivehost.check_powers()
diff --git a/code/modules/antagonists/hivemind/spells/hivemind_invasion.dm b/code/modules/antagonists/hivemind/spells/hivemind_invasion.dm
deleted file mode 100644
index 47a107dde7cea..0000000000000
--- a/code/modules/antagonists/hivemind/spells/hivemind_invasion.dm
+++ /dev/null
@@ -1,63 +0,0 @@
-/obj/effect/proc_holder/spell/targeted/hive_hack
- name = "Network Invasion"
- desc = "We attack any foreign presences in the target mind keeping them only for ourselves. Takes longer if the target is not in our hive. Will grant us a tracking charge if successful."
- panel = "Hivemind Abilities"
- charge_max = 600
- range = 1
- invocation_type = INVOCATION_NONE
- clothes_req = 0
- max_targets = 1
- action_icon = 'icons/hud/actions/actions_hive.dmi'
- action_background_icon_state = "bg_hive"
- action_icon_state = "hack"
- antimagic_allowed = TRUE
-
-/obj/effect/proc_holder/spell/targeted/hive_hack/cast(list/targets, mob/living/user = usr)
- var/datum/antagonist/hivemind/hive = user.mind.has_antag_datum(/datum/antagonist/hivemind)
- if(!hive)
- to_chat(user, "This is a bug. Error:HIVE1")
- return
- var/mob/living/carbon/target = targets[1]
- var/in_hive = hive.is_carbon_member(target)
- var/list/enemies = list()
-
- to_chat(user, "We begin probing [target.name]'s mind!")
- if(do_after(user, 50, target, timed_action_flags = IGNORE_HELD_ITEM))
- if(!in_hive)
- to_chat(user, "Their mind slowly opens up to us.")
- if(!do_after(user, 75, target, timed_action_flags = IGNORE_HELD_ITEM))
- to_chat(user, "Our concentration has been broken!")
- revert_cast()
- return
- for(var/datum/antagonist/hivemind/enemy as() in GLOB.hivehosts)
- var/datum/mind/M = enemy.owner
- if(!M?.current)
- continue
- if(M.current == user)
- continue
- if(enemy.is_carbon_member(target))
- var/mob/living/real_enemy = (M.current)
- enemies += real_enemy
- enemy.remove_from_hive(target)
- to_chat(real_enemy, "We detect a surge of psionic energy from a far away vessel before they disappear from the hive. Whatever happened, there's a good chance they're after us now.")
-
- if(enemy.owner == M && IS_HIVEHOST(target))
- var/atom/throwtarget
- var/datum/antagonist/hivemind/hivetarget = target.mind.has_antag_datum(/datum/antagonist/hivemind)
- throwtarget = get_edge_target_turf(src, get_dir(src, get_step_away(user, src)))
- SEND_SOUND(user, sound(pick('sound/hallucinations/turn_around1.ogg','sound/hallucinations/turn_around2.ogg'),0,1,50))
- flash_color(user, flash_color="#800080", flash_time=10)
- user.Paralyze(10)
- user.throw_at(throwtarget, 5, 1,src)
- to_chat(user, "A sudden surge of psionic energy, a recognizable presence, this is the host of [hivetarget.hiveID]")
- return
- if(enemies.len)
- hive.remove_hive_overlay_probe(target)
- to_chat(user, "In a moment of clarity, we see all. Another hive. Faces. Our nemesis. They have heard our call. They know we are coming.")
- to_chat(user, "This vision has provided us insight on the mental lay, allowing us to track our foes.")
- hive.searchcharge += 3
- else
- to_chat(user, "We delve into the inner depths of their mind and strike at nothing, no enemies lurk inside this mind.")
- else
- to_chat(user, "Our concentration has been broken!")
- revert_cast()
diff --git a/code/modules/antagonists/hivemind/spells/hivemind_loyalty.dm b/code/modules/antagonists/hivemind/spells/hivemind_loyalty.dm
deleted file mode 100644
index 8e16362f05c21..0000000000000
--- a/code/modules/antagonists/hivemind/spells/hivemind_loyalty.dm
+++ /dev/null
@@ -1,27 +0,0 @@
-/obj/effect/proc_holder/spell/self/hive_loyal
- name = "Concentrated Infiltration"
- desc = "We prepare for a focused attack on a mind, penetrating mindshield technology, the mindshield will still be present after the attack (toggle)."
- panel = "Hivemind Abilities"
- charge_max = 1
- invocation_type = INVOCATION_NONE
- clothes_req = 0
- human_req = 1
- action_icon = 'icons/hud/actions/actions_hive.dmi'
- action_background_icon_state = "bg_hive"
- action_icon_state = "loyal"
- antimagic_allowed = TRUE
-
-/obj/effect/proc_holder/spell/self/hive_loyal/cast(mob/living/user = usr)
- var/datum/antagonist/hivemind/hive = user.mind.has_antag_datum(/datum/antagonist/hivemind)
- if(!hive)
- to_chat(user, "This is a bug. Error:HIVE1")
- return
- var/obj/effect/proc_holder/spell/targeted/hive_add/the_spell = locate(/obj/effect/proc_holder/spell/targeted/hive_add) in user.mind.spell_list
- if(!the_spell)
- to_chat(user, "This is a bug. Error:HIVE5")
- return
- the_spell.ignore_mindshield = !active
- to_chat(user, "We [active?"let our minds rest and ease up on our concentration.":"prepare to spear through mindshielding technology!"]")
- active = !active
- if(active)
- revert_cast()
diff --git a/code/modules/antagonists/hivemind/spells/hivemind_panic.dm b/code/modules/antagonists/hivemind/spells/hivemind_panic.dm
deleted file mode 100644
index 4a8ca38421e30..0000000000000
--- a/code/modules/antagonists/hivemind/spells/hivemind_panic.dm
+++ /dev/null
@@ -1,54 +0,0 @@
-/obj/effect/proc_holder/spell/targeted/induce_panic
- name = "Induce Panic"
- desc = "We unleash a burst of psionic energy, inducing a debilitating fear in those around us and reducing their combat readiness. We can also briefly affect silicon-based life with this burst."
- panel = "Hivemind Abilities"
- charge_max = 900
- range = 7
- invocation_type = INVOCATION_NONE
- clothes_req = 0
- max_targets = 0
- antimagic_allowed = TRUE
- action_icon = 'icons/hud/actions/actions_hive.dmi'
- action_background_icon_state = "bg_hive"
- action_icon_state = "panic"
-
-/obj/effect/proc_holder/spell/targeted/induce_panic/cast(list/targets, mob/living/user = usr)
- var/datum/antagonist/hivemind/hive = user.mind.has_antag_datum(/datum/antagonist/hivemind)
- if(!hive)
- to_chat(user, "This is a bug. Error:HIVE1")
- return
- for(var/mob/living/carbon/human/target in targets)
- if(target.stat == DEAD)
- continue
- target.Jitter(14)
- target.apply_damage(35 + rand(0,15), STAMINA, target.get_bodypart(BODY_ZONE_HEAD))
- if(IS_HIVEHOST(target))
- continue
- if(prob(20))
- var/text = pick(";HELP!","I'm losing control of the situation!!","Get me outta here!")
- target.say(text, forced = "panic")
- var/effect = rand(1,4)
- switch(effect)
- if(1)
- to_chat(target, "You panic and drop everything to the ground!")
- target.drop_all_held_items()
- if(2)
- to_chat(target, "You panic and flail around!")
- target.click_random_mob()
- addtimer(CALLBACK(target, TYPE_PROC_REF(/mob, click_random_mob)), 5)
- addtimer(CALLBACK(target, TYPE_PROC_REF(/mob, click_random_mob)), 10)
- addtimer(CALLBACK(target, TYPE_PROC_REF(/mob, click_random_mob)), 15)
- addtimer(CALLBACK(target, TYPE_PROC_REF(/mob, click_random_mob)), 20)
- addtimer(CALLBACK(target, TYPE_PROC_REF(/mob/living, Stun), 30), 25)
- target.confused += 10
- if(3)
- to_chat(target, "You freeze up in fear!")
- target.Stun(30)
- if(4)
- to_chat(target, "You feel nauseous as dread washes over you!")
- target.Dizzy(15)
- target.apply_damage(30, STAMINA, target.get_bodypart(BODY_ZONE_HEAD))
- target.hallucination += 45
-
- for(var/mob/living/silicon/target in targets)
- target.Unconscious(50)
diff --git a/code/modules/antagonists/hivemind/spells/hivemind_probe.dm b/code/modules/antagonists/hivemind/spells/hivemind_probe.dm
deleted file mode 100644
index c4bd9f2db1678..0000000000000
--- a/code/modules/antagonists/hivemind/spells/hivemind_probe.dm
+++ /dev/null
@@ -1,54 +0,0 @@
-/obj/effect/proc_holder/spell/targeted/hive_probe
- name = "Probe Mind"
- desc = "We examine a mind for any enemy activity."
- panel = "Hivemind Abilities"
- charge_max = 30
- range = 1
- invocation_type = INVOCATION_NONE
- clothes_req = 0
- max_targets = 1
- action_icon = 'icons/hud/actions/actions_hive.dmi'
- action_background_icon_state = "bg_hive"
- action_icon_state = "probe"
- antimagic_allowed = TRUE
-
-/obj/effect/proc_holder/spell/targeted/hive_probe/cast(list/targets, mob/living/user = usr)
- var/datum/antagonist/hivemind/hive = user.mind.has_antag_datum(/datum/antagonist/hivemind)
- if(!hive)
- to_chat(user, "This is a bug. Error:HIVE1")
- return
- var/mob/living/carbon/target = targets[1]
- var/detected
-
-
- to_chat(user, "We begin probing [target.name]'s mind!")
- if(do_after(user, 15, target, timed_action_flags = IGNORE_HELD_ITEM))
- for(var/datum/antagonist/hivemind/enemy as() in GLOB.hivehosts)
- var/datum/mind/M = enemy.owner
- if(!M?.current)
- continue
- if(M.current == user)
- continue
- if(enemy.owner == M && IS_HIVEHOST(target))
- detected = TRUE
- var/atom/throwtarget
- var/datum/antagonist/hivemind/hivetarget = target.mind.has_antag_datum(/datum/antagonist/hivemind)
- throwtarget = get_edge_target_turf(src, get_dir(src, get_step_away(user, src)))
- SEND_SOUND(user, sound(pick('sound/hallucinations/turn_around1.ogg','sound/hallucinations/turn_around2.ogg'),0,1,50))
- flash_color(user, flash_color="#800080", flash_time=10)
- user.Paralyze(10)
- user.throw_at(throwtarget, 5, 1,src)
- to_chat(user, "A sudden surge of psionic energy, a recognizable presence, this is the host of [hivetarget.hiveID]!")
- return
- if(enemy.is_carbon_member(target))
- hive.add_hive_overlay_probe(target)
- to_chat(user, "We have found the vile stain of [enemy.hiveID] within this mind!")
- detected = TRUE
- if(target.mind.has_antag_datum(/datum/antagonist/brainwashed) || IS_WOKEVESSEL(target))
- to_chat(user, "Our target is being controlled, their actions are not their own!.")
- return
- if(!detected)
- to_chat(user, "Untroubled waters meet our tentative search, there is nothing out of the ordinary here.")
- else
- to_chat(user, "Our concentration has been broken!")
- revert_cast()
diff --git a/code/modules/antagonists/hivemind/spells/hivemind_rally.dm b/code/modules/antagonists/hivemind/spells/hivemind_rally.dm
deleted file mode 100644
index 49abb9ea945f1..0000000000000
--- a/code/modules/antagonists/hivemind/spells/hivemind_rally.dm
+++ /dev/null
@@ -1,38 +0,0 @@
-/obj/effect/proc_holder/spell/targeted/hive_rally
- name = "Hive Rythms"
- desc = "We send out a burst of psionic energy, invigorating us and nearby awakened vessels, removing any stuns."
- panel = "Hivemind Abilities"
- charge_max = 3000
- range = 7
- invocation_type = INVOCATION_NONE
- clothes_req = 0
- max_targets = 0
- include_user = 1
- antimagic_allowed = TRUE
- action_icon = 'icons/hud/actions/actions_hive.dmi'
- action_background_icon_state = "bg_hive"
- action_icon_state = "rally"
-
-/obj/effect/proc_holder/spell/targeted/hive_rally/cast(list/targets, mob/living/user = usr)
- var/datum/antagonist/hivemind/hive = user.mind.has_antag_datum(/datum/antagonist/hivemind)
- if(!targets)
- to_chat(user, "Nobody is in sight, it'd be a waste to do that now.")
- revert_cast()
- return
- var/list/victims = list()
- for(var/mob/living/target in targets)
- if(IS_HIVEHOST(target))
- victims += target
- var/datum/mind/mind = target.mind
- if(mind in hive.avessels)
- victims += target
- flash_color(target, flash_color="#800080", flash_time=10)
- for(var/mob/living/carbon/affected in victims)
- to_chat(affected, "Otherworldly strength flows through us!")
- affected.SetSleeping(0)
- affected.SetUnconscious(0)
- affected.SetStun(0)
- affected.SetKnockdown(0)
- affected.SetImmobilized(0)
- affected.SetParalyzed(0)
- affected.adjustStaminaLoss(-200)
diff --git a/code/modules/antagonists/hivemind/spells/hivemind_see.dm b/code/modules/antagonists/hivemind/spells/hivemind_see.dm
deleted file mode 100644
index 5fdb78cbf469c..0000000000000
--- a/code/modules/antagonists/hivemind/spells/hivemind_see.dm
+++ /dev/null
@@ -1,45 +0,0 @@
-/obj/effect/proc_holder/spell/target_hive/hive_see
- name = "Hive Vision"
- desc = "We use the eyes of one of our vessels. Use again to look through our own eyes once more."
- action_icon_state = "see"
- var/mob/living/carbon/vessel
- var/mob/living/host //Didn't really have any other way to auto-reset the perspective if the other mob got qdeled
-
- charge_max = 20
-
-/obj/effect/proc_holder/spell/target_hive/hive_see/on_lose(mob/living/user)
- user.reset_perspective()
- user.clear_fullscreen("hive_eyes")
-
-/obj/effect/proc_holder/spell/target_hive/hive_see/cast(list/targets, mob/living/user = usr)
- if(!active)
- vessel = targets[1]
- if(vessel)
- vessel.apply_status_effect(STATUS_EFFECT_BUGGED, user)
- user.reset_perspective(vessel)
- active = TRUE
- host = user
- user.overlay_fullscreen("hive_eyes", /atom/movable/screen/fullscreen/hive_eyes)
- revert_cast()
- else
- vessel.remove_status_effect(STATUS_EFFECT_BUGGED)
- user.reset_perspective()
- user.clear_fullscreen("hive_eyes")
- active = FALSE
- revert_cast()
-
-/obj/effect/proc_holder/spell/target_hive/hive_see/process()
- if(active && (!vessel || !is_hivemember(vessel) || QDELETED(vessel)))
- to_chat(host, "Our vessel is one of us no more!")
- host.reset_perspective()
- host.clear_fullscreen("hive_eyes")
- active = FALSE
- if(!QDELETED(vessel))
- vessel.remove_status_effect(STATUS_EFFECT_BUGGED)
- ..()
-
-/obj/effect/proc_holder/spell/target_hive/hive_see/choose_targets(mob/user = usr)
- if(!active)
- ..()
- else
- perform(null,user)
diff --git a/code/modules/antagonists/hivemind/spells/hivemind_shatter.dm b/code/modules/antagonists/hivemind/spells/hivemind_shatter.dm
deleted file mode 100644
index 8537e1f6f2014..0000000000000
--- a/code/modules/antagonists/hivemind/spells/hivemind_shatter.dm
+++ /dev/null
@@ -1,41 +0,0 @@
-/obj/effect/proc_holder/spell/target_hive/hive_shatter
- name = "Crush Protections"
- desc = "We destroy any Mindshield implants a vesssel might have, granting us further control over their mind."
- action_icon_state = "shatter"
-
- charge_max = 1800
-
- var/static/list/special_roles // security roles + Captain are resistant against this spell
-
-/obj/effect/proc_holder/spell/target_hive/hive_shatter/Initialize(mapload)
- . = ..()
- if(!special_roles)
- special_roles = SSdepartment.get_jobs_by_dept_id(DEPT_NAME_SECURITY) + JOB_NAME_CAPTAIN
-
-/obj/effect/proc_holder/spell/target_hive/hive_shatter/cast(list/targets, mob/living/user = usr)
- var/mob/living/carbon/human/target = targets[1]
- var/datum/antagonist/hivemind/hive = user.mind.has_antag_datum(/datum/antagonist/hivemind)
- var/success = FALSE
- if(!hive)
- to_chat(user, "This is a bug. Error:HIVE1")
- return
- if(!hive.hivemembers)
- return
- if(target.mind?.assigned_role in special_roles)
- to_chat(user, "A subconsciously trained response barely protects [target.name]'s mind.")
- to_chat(target, "Powerful mental attacks strike out against us, our training allows us to barely overcome it.")
- return
- if(HAS_TRAIT(target, TRAIT_MINDSHIELD))
- if(!do_after(user,200, timed_action_flags = IGNORE_HELD_ITEM))
- for(var/obj/item/implant/mindshield/M in target.implants)
- to_chat(user, "We shatter their mental protections!")
- to_chat(target, "You feel a pang of pain course through your head!")
- flash_color(target, flash_color="#800080", flash_time=10)
- qdel(M)
-
- else
- to_chat(user, "Our concentration has been broken!")
- else
- to_chat(user, "No protections are present in [target]'s mind.")
- if(!success)
- revert_cast()
diff --git a/code/modules/antagonists/hivemind/spells/hivemind_shock.dm b/code/modules/antagonists/hivemind/spells/hivemind_shock.dm
deleted file mode 100644
index c6c8772cccd86..0000000000000
--- a/code/modules/antagonists/hivemind/spells/hivemind_shock.dm
+++ /dev/null
@@ -1,43 +0,0 @@
-/obj/effect/proc_holder/spell/target_hive/hive_shock
- name = "Neural Shock"
- desc = "After a short charging time, we overload the mind of one of our vessels with psionic energy, rendering them unconscious for a short period of time. This power weakens over distance, but strengthens with hive size."
- action_icon_state = "shock"
-
- charge_max = 600
-
-/obj/effect/proc_holder/spell/target_hive/hive_shock/cast(list/targets, mob/living/user = usr)
- var/mob/living/carbon/human/target = targets[1]
- var/datum/antagonist/hivemind/hive = user.mind.has_antag_datum(/datum/antagonist/hivemind)
- if(!hive)
- to_chat(user, "This is a bug. Error:HIVE1")
- return
- to_chat(user, "We begin increasing the psionic bandwidth between ourself and the vessel!")
- if(do_after(user, 30, user, timed_action_flags = IGNORE_HELD_ITEM))
- if(target.mind.assigned_role in (SSdepartment.get_jobs_by_dept_id(DEPT_NAME_SECURITY) || SSdepartment.get_jobs_by_dept_id(DEPT_NAME_COMMAND))) //Doesn't work on sec or command for balance reasons
- to_chat(user, "A subconsciously trained response barely protects [target.name]'s mind.")
- to_chat(target, "Powerful mental attacks strike out against us, our training allows us to barely overcome it.")
- return
- if(HAS_TRAIT(target, TRAIT_MINDSHIELD))
- to_chat(user, "Powerful technology protects [target.name]'s mind.")
- return
- if(!IS_HIVEHOST(target))
- var/power = 120-get_dist(user, target)
- switch(hive.hive_size)
- if(0 to 4)
- if(5 to 9)
- power *= 1.5
- if(10 to 14)
- power *= 2
- if(15 to 19)
- power *= 2.5
- else
- power *= 3
- if(power > 50 && user.get_virtual_z_level() == target.get_virtual_z_level())
- to_chat(user, "We have overloaded the vessel for a short time!")
- target.Jitter(round(power/10))
- target.Unconscious(power)
- else
- to_chat(user, "The vessel was too far away to be affected!")
- else
- to_chat(user, "Our concentration has been broken!")
- revert_cast()
diff --git a/code/modules/antagonists/hivemind/spells/hivemind_spells.dm b/code/modules/antagonists/hivemind/spells/hivemind_spells.dm
deleted file mode 100644
index b3efaf8ddb844..0000000000000
--- a/code/modules/antagonists/hivemind/spells/hivemind_spells.dm
+++ /dev/null
@@ -1,42 +0,0 @@
-/obj/effect/proc_holder/spell/target_hive
- panel = "Hivemind Abilities"
- invocation_type = INVOCATION_NONE
- selection_type = "range"
- action_icon = 'icons/hud/actions/actions_hive.dmi'
- action_background_icon_state = "bg_hive"
- action_icon_state = "spell_default"
- clothes_req = 0
- human_req = 1
- antimagic_allowed = TRUE
- range = 0 //SNOWFLAKE, 0 is unlimited for target_external=0 spells
- var/target_external = 0 //Whether or not we select targets inside or outside of the hive
-
-
-/obj/effect/proc_holder/spell/target_hive/choose_targets(mob/user = usr)
- var/datum/antagonist/hivemind/hive = user.mind.has_antag_datum(/datum/antagonist/hivemind)
- if(!hive || !hive.hivemembers)
- to_chat(user, "This is a bug. Error:HIVE1")
- return
- var/list/possible_targets = list()
- var/list/targets = list()
-
- if(target_external)
- for(var/mob/living/carbon/H in view_or_range(range, user, selection_type))
- if(user == H)
- continue
- if(!can_target(H))
- continue
- if(!hive.is_carbon_member(H))
- possible_targets += H
- else
- possible_targets = hive.get_carbon_members()
- if(range)
- possible_targets &= view_or_range(range, user, selection_type)
-
- var/mob/living/carbon/human/H = input("Choose the target for the spell.", "Targeting") as null|mob in possible_targets
- if(!H)
- revert_cast()
- return
- targets += H
- perform(targets,user=user)
-
diff --git a/code/modules/antagonists/hivemind/spells/hivemind_thrall.dm b/code/modules/antagonists/hivemind/spells/hivemind_thrall.dm
deleted file mode 100644
index b026197dc41cb..0000000000000
--- a/code/modules/antagonists/hivemind/spells/hivemind_thrall.dm
+++ /dev/null
@@ -1,76 +0,0 @@
-/obj/effect/proc_holder/spell/targeted/hive_thrall
- name = "Awaken Vessel"
- desc = "We awaken one of our vessels, permanently turning them into an extension of our will, we can only sustain two awakened vessels increasing with integrations."
- panel = "Hivemind Abilities"
- charge_max = 600
- range = 1
- max_targets = 0
- invocation_type = INVOCATION_NONE
- clothes_req = 0
- human_req = 1
- action_icon = 'icons/hud/actions/actions_hive.dmi'
- action_background_icon_state = "bg_hive"
- action_icon_state = "chaos"
- antimagic_allowed = TRUE
-
-/obj/effect/proc_holder/spell/targeted/hive_thrall/cast(list/targets, mob/living/user = usr)
- var/datum/antagonist/hivemind/hivehost = user.mind.has_antag_datum(/datum/antagonist/hivemind)
- if(!hivehost)
- to_chat(user, "This is a bug. Error:HIVE1")
- return
- if((hivehost.avessels.len >= hivehost.avessel_limit) && !hivehost.dominant)
- to_chat(user, "We can't support another awakened vessel!")
- return
- var/mob/living/carbon/human/target = user.pulling
- if(!target)
- to_chat(user, "We must be grabbing a creature to awaken them!")
- hivehost.isintegrating = FALSE
- revert_cast()
- return
- if(!is_hivemember(target))
- to_chat(user, "They must be a vessel in order to be awakened!")
- revert_cast()
- return
- if(hivehost.isintegrating)
- to_chat(user, "We are already awakening a vessel!")
- revert_cast()
- return
- if(user.grab_state == GRAB_PASSIVE)
- to_chat(user, "We must tighten our grip to be able to awaken their mind!")
- revert_cast()
- return
- if(IS_HIVEHOST(target) || IS_WOKEVESSEL(target) || HAS_TRAIT(target, TRAIT_MINDSHIELD))
- to_chat(user, "Complex mental barriers protect [target.name]'s mind.")
- revert_cast()
- return
- hivehost.isintegrating = TRUE
-
- for(var/i in 1 to 3)
- switch(i)
- if(1)
- to_chat(user, "We tap into our vessel's mind. We must stay still..")
- if(2)
- user.visible_message("[user] places their hands on [target]'s head!", "We place our hands on their temple")
- if(3)
- user.visible_message("[target] begins to look frantic!", "We begin to override [target]'s consciousness with our own.")
- to_chat(target, "Your consciousness beings to waver!")
-
- if(!do_after(user, 2 SECONDS, target))
- to_chat(user, "Our awakening of [target] has been interrupted!")
- hivehost.isintegrating = FALSE
- return
- hivehost.isintegrating = FALSE
- var/datum/antagonist/hivevessel/V = new /datum/antagonist/hivevessel()
- hivehost.avessels += target.mind
- V.master = hivehost
- V.hiveID = hivehost.hiveID
- target.mind.add_antag_datum(V)
- var/O = "Obey and Protect your Hive Host, [user]"
- var/datum/objective/brainwashing/objective = new(O)
- V.objectives += objective
- log_objective(V, objective.explanation_text)
- flash_color(user, flash_color="#800080", flash_time=10)
- to_chat(user,"This vessel is now an extension of our will.")
- if(hivehost.dominant)
- V.glow = hivehost.glow
- target.add_overlay(hivehost.glow)
diff --git a/code/modules/antagonists/hivemind/vessel.dm b/code/modules/antagonists/hivemind/vessel.dm
deleted file mode 100644
index fa5feaa7ac8ef..0000000000000
--- a/code/modules/antagonists/hivemind/vessel.dm
+++ /dev/null
@@ -1,69 +0,0 @@
-
-
-/datum/antagonist/hivevessel
- name = "Awoken Vessel"
- banning_key = ROLE_HIVE_VESSEL
- roundend_category = "awoken vessels"
- antagpanel_category = "Other"
- show_name_in_check_antagonists = TRUE
- var/hiveID = "Hivemind"
- var/datum/antagonist/hivemind/master
- var/mutable_appearance/glow
- var/obj/effect/proc_holder/spell/targeted/touch/hive_fist/fist = new
- show_in_roundend = FALSE
-
-
-/mob/living/proc/hive_weak_awaken(directive)
- var/mob/living/user = src
- if(!mind)
- return
- if(!HAS_TRAIT(user, TRAIT_MINDSHIELD))
- to_chat(user, "Foreign energies force themselves upon your thoughts!")
- flash_color(user, flash_color="#800080", flash_time=10)
- var/objective = brainwash(user, directive, "hivemind compel")
- to_chat(user, "A figment of your subconscious stays firm, you would be incapable of killing yourself if ordered!")
- user.overlay_fullscreen("hive_mc", /atom/movable/screen/fullscreen/hive_mc)
- addtimer(CALLBACK(user, PROC_REF(hive_weak_clear), objective), 1800, TIMER_STOPPABLE)
-
-/mob/living/proc/hive_weak_clear(objective)
- if(!mind || !objective)
- return
- var/mob/living/user = mind.current
- to_chat(user, "Our subconscious fights back the invasive forces, our will is once again our own!")
- flash_color(user, flash_color="#800080", flash_time=10)
- user.clear_fullscreen("hive_mc")
- unbrainwash(user, objective)
-
-/datum/antagonist/hivevessel/on_gain()
- owner.special_role = ROLE_HIVE_VESSEL
- owner.AddSpell(fist)
- ..()
-
-/datum/antagonist/hivevessel/on_removal()
- remove_innate_effects()
- owner.RemoveSpell(fist)
- if(master)
- to_chat(master.owner, "A figment of our consciousness snaps out, we have lost an awakened vessel!")
- if(owner?.current && glow)
- owner.current.cut_overlay(glow)
- owner.special_role = null
- master.avessels -= owner
- master = null
- ..()
-
-/datum/antagonist/hivevessel/apply_innate_effects()
- handle_clown_mutation(owner.current, "Our newfound powers allow us to overcome our clownish nature, allowing us to wield weapons with impunity.")
- master.update_hivemind_hud(owner.current)
-
-/datum/antagonist/hivevessel/remove_innate_effects()
- handle_clown_mutation(owner.current, removing=FALSE)
- master.update_hivemind_hud_removed(owner.current)
-
-/datum/antagonist/hivevessel/greet()
- to_chat(owner, "Your mind is suddenly opened, as you see the pinnacle of evolution...")
- to_chat(owner, "Complete the orders of your host, no matter what!")
-
-/datum/antagonist/hivevessel/farewell()
- to_chat(owner, "Your mind closes up once more...")
- to_chat(owner, "You feel the weight of your objectives disappear! You no longer have to obey them.")
-
diff --git a/code/modules/antagonists/role_preference/role_antagonists.dm b/code/modules/antagonists/role_preference/role_antagonists.dm
index 225b68b3f3e72..bb18b7e1cc191 100644
--- a/code/modules/antagonists/role_preference/role_antagonists.dm
+++ b/code/modules/antagonists/role_preference/role_antagonists.dm
@@ -252,32 +252,6 @@
head = /obj/item/clothing/head/hooded/cult_hoodie/eldritch
r_hand = /obj/item/melee/touch_attack/mansus_fist
-/datum/role_preference/antagonist/hivemind_host
- name = "Hivemind Host"
- description = "A powerful host of a Hivemind. Assimilate crew into your hive to grow your power. \
- Use the members of your hive as machines in your objectives, and work with or against other Hiveminds on the station."
- antag_datum = /datum/antagonist/hivemind
- category = ROLE_PREFERENCE_CATEGORY_LEGACY
-
-/datum/role_preference/antagonist/hivemind_host/get_preview_icon()
- var/icon/background = icon('icons/effects/hivemind.dmi', "awoken")
- var/icon/outfit = render_preview_outfit(/datum/outfit/hivemind_host_preview)
- background.Blend(outfit, ICON_OVERLAY)
- return finish_preview_icon(background)
-
-/datum/outfit/hivemind_host_preview
- name = "Hivemind Host (Preview only)"
- glasses = /obj/item/clothing/glasses/sunglasses/advanced/reagent
- uniform = /obj/item/clothing/under/rank/civilian/bartender
- suit = /obj/item/clothing/suit/armor/vest
-
-/datum/outfit/hivemind_host_preview/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
- H.hair_style = "Bob Hair 4"
- H.hair_color = "111"
- H.gradient_style = "Reflected Inverse"
- H.gradient_color = "808"
- H.update_hair()
-
/datum/role_preference/antagonist/incursionist
name = "Incursionist"
description = "As a member of the Syndicate Incursion, work with your team of agents to accomplish your objectives.\n\
diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm
index 057478bfc54c5..2462925d8acce 100644
--- a/code/modules/mob/living/carbon/human/death.dm
+++ b/code/modules/mob/living/carbon/human/death.dm
@@ -67,11 +67,6 @@
if(SSticker.HasRoundStarted())
SSblackbox.ReportDeath(src)
log_game("[key_name(src)] has died (BRUTE: [src.getBruteLoss()], BURN: [src.getFireLoss()], TOX: [src.getToxLoss()], OXY: [src.getOxyLoss()], CLONE: [src.getCloneLoss()]) ([AREACOORD(src)])")
- if(is_hivemember(src))
- remove_hivemember(src)
- if(IS_HIVEHOST(src))
- var/datum/antagonist/hivemind/hive = mind.has_antag_datum(/datum/antagonist/hivemind)
- hive.destroy_hive()
if(HAS_TRAIT(src, TRAIT_DROPS_ITEMS_ON_DEATH)) //if you want to add anything else, do it before this if statement
var/list/turfs_to_throw = view(2, src)
for(var/obj/item/I in contents)
diff --git a/code/modules/mob/living/login.dm b/code/modules/mob/living/login.dm
index 388d0ba0f5ccf..a3d1f2fda902c 100644
--- a/code/modules/mob/living/login.dm
+++ b/code/modules/mob/living/login.dm
@@ -30,6 +30,3 @@
var/datum/antagonist/changeling/changeling = mind.has_antag_datum(/datum/antagonist/changeling)
if(changeling)
changeling.regain_powers()
- var/datum/antagonist/hivemind/hivemind = mind.has_antag_datum(/datum/antagonist/hivemind)
- if(hivemind)
- hivemind.regain_images()
diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
index c38ccc49a781d..cc3fbc9afc681 100644
--- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
@@ -1634,18 +1634,7 @@
M.dizziness = max(0, M.dizziness-6)
M.confused = max(0, M.confused-6)
M.disgust = max(0, M.disgust-6)
- if(dosage >= 25) //45 seconds
- if(is_hivemember(M))
- for(var/datum/antagonist/hivemind/hive in GLOB.antagonists)
- if(hive.hivemembers.Find(M.mind))
- var/mob/living/carbon/C = hive.owner.current
- if(C?.mind)
- to_chat(C, "We detect a surge of psionic energy from a far away vessel before they disappear from the hive. Whatever happened, there's a good chance they're after us now.")
- if(IS_WOKEVESSEL(M))
- M.mind.remove_antag_datum(/datum/antagonist/hivevessel)
- ADD_TRAIT(M, TRAIT_HIVE_BURNT, HIVEMIND_TRAIT)
- to_chat(M, "You hear supernatural wailing echo throughout your mind as you are finally set free. Deep down, you can feel the lingering presence of those who enslaved you... as can they!")
- remove_hivemember(M)
+
var/datum/component/mood/mood = M.GetComponent(/datum/component/mood)
if(mood.sanity <= SANITY_NEUTRAL) // only take effect if in negative sanity and then...