Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 1bd9a66

Browse filesBrowse files
yogstation13-botmonster860
authored andcommitted
Assimilation 2.0: Not quite a big enough PR to be worthy of the 2.0 title but almost (#42607) (yogstation13#4472)
* one * ??? * big * sprites * it is done * oofs * no more bad jokes * location -> reception * i forgot a feature lmao * yo lemme nerf this op power * adjust removal and makes panic less insane * hey i forgot another feature * one mind removals * *laser eyes meme* * Disables multiple one minds for real this time
1 parent d31f8f0 commit 1bd9a66
Copy full SHA for 1bd9a66

21 files changed

+635-274Lines changed: 635 additions & 274 deletions

File tree

Expand file treeCollapse file tree
Open diff view settings
Filter options
Expand file treeCollapse file tree
Open diff view settings
Collapse file

‎code/__DEFINES/antagonists.dm‎

Copy file name to clipboardExpand all lines: code/__DEFINES/antagonists.dm
+7Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,3 +42,10 @@
4242

4343
//Overthrow time to update heads obj
4444
#define OBJECTIVE_UPDATING_TIME 300
45+
46+
//Assimilation
47+
#define TRACKER_DEFAULT_TIME 900
48+
#define TRACKER_MINDSHIELD_TIME 1200
49+
#define TRACKER_AWAKENED_TIME 3000
50+
#define TRACKER_BONUS_LARGE 300
51+
#define TRACKER_BONUS_SMALL 100
Collapse file

‎code/__DEFINES/status_effects.dm‎

Copy file name to clipboardExpand all lines: code/__DEFINES/status_effects.dm
+2Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,8 @@
9898

9999
#define STATUS_EFFECT_INLOVE /datum/status_effect/in_love //Displays you as being in love with someone else, and makes hearts appear around them.
100100

101+
#define STATUS_EFFECT_BUGGED /datum/status_effect/bugged //Lets other mobs listen in on what it hears
102+
101103
#define STATUS_EFFECT_HIVE_TRACKER /datum/status_effect/hive_track
102104

103105
#define STATUS_EFFECT_HIVE_RADAR /datum/status_effect/agent_pinpointer/hivemind
Collapse file

‎code/__DEFINES/traits.dm‎

Copy file name to clipboardExpand all lines: code/__DEFINES/traits.dm
+1Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,3 +159,4 @@
159159
#define LOCKED_HELMET_TRAIT "locked-helmet"
160160
#define NINJA_SUIT_TRAIT "ninja-suit"
161161
#define ANTI_DROP_IMPLANT_TRAIT "anti-drop-implant"
162+
#define HIVEMIND_ONE_MIND_TRAIT "one_mind"
Collapse file

‎code/datums/hud.dm‎

Copy file name to clipboardExpand all lines: code/datums/hud.dm
+3-3Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@ GLOBAL_LIST_INIT(huds, list(
2828
ANTAG_HUD_CLOCKWORK = new/datum/atom_hud/antag(),
2929
ANTAG_HUD_BROTHER = new/datum/atom_hud/antag/hidden(),
3030
ANTAG_HUD_VAMPIRE = new/datum/atom_hud/antag/hidden(), // Yogs
31-
ANTAG_HUD_HIVE = new/datum/atom_hud/antag/hidden(),
32-
ANTAG_HUD_CREEP = new/datum/atom_hud/antag/hidden()
33-
))
31+
ANTAG_HUD_HIVE = new/datum/atom_hud/antag/hidden(),
32+
ANTAG_HUD_CREEP = new/datum/atom_hud/antag/hidden(),
33+
ANTAG_HUD_HIVEAWAKE = new/datum/atom_hud/antag() ))
3434

3535
/datum/atom_hud
3636
var/list/atom/hudatoms = list() //list of all atoms which display this hud
Collapse file

‎code/datums/status_effects/neutral.dm‎

Copy file name to clipboardExpand all lines: code/datums/status_effects/neutral.dm
+12Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,3 +84,15 @@
8484
/datum/status_effect/throat_soothed/on_remove()
8585
. = ..()
8686
owner.remove_trait(TRAIT_SOOTHED_THROAT, "[STATUS_EFFECT_TRAIT]_[id]")
87+
88+
/datum/status_effect/bugged //Lets another mob hear everything you can
89+
id = "bugged"
90+
duration = -1
91+
status_type = STATUS_EFFECT_MULTIPLE
92+
alert_type = null
93+
var/mob/living/listening_in
94+
95+
/datum/status_effect/bugged/on_creation(mob/living/new_owner, mob/living/tracker)
96+
. = ..()
97+
if(.)
98+
listening_in = tracker
Collapse file

‎code/game/gamemodes/hivemind/hivemind.dm‎

Copy file name to clipboardExpand all lines: code/game/gamemodes/hivemind/hivemind.dm
+17-19Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
false_report_weight = 5
77
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain")
88
restricted_jobs = list("Cyborg","AI")
9-
required_players = 25
9+
required_players = 24
1010
required_enemies = 2
1111
recommended_enemies = 3
1212
reroll_friendly = 1
@@ -20,20 +20,19 @@
2020
var/list/hosts = list()
2121

2222
/proc/is_hivehost(mob/living/M)
23-
return M && M.mind && M.mind.has_antag_datum(/datum/antagonist/hivemind)
24-
25-
/proc/is_real_hivehost(mob/living/M) //This proc ignores mind controlled vessels
2623
if(!M || !M.mind)
27-
return FALSE
28-
var/datum/antagonist/hivemind/hive = M.mind.has_antag_datum(/datum/antagonist/hivemind)
29-
if(!hive)
30-
return FALSE
31-
var/obj/effect/proc_holder/spell/target_hive/hive_control/the_spell = locate(/obj/effect/proc_holder/spell/target_hive/hive_control) in M.mind.spell_list
32-
if(the_spell && the_spell.active)
33-
if(the_spell.original_body == M)
24+
return
25+
return M.mind.has_antag_datum(/datum/antagonist/hivemind)
26+
27+
/mob/living/proc/is_real_hivehost() //This proc ignores mind controlled vessels
28+
for(var/datum/antagonist/hivemind/hive in GLOB.antagonists)
29+
if(!hive.owner?.spell_list)
30+
continue
31+
var/obj/effect/proc_holder/spell/target_hive/hive_control/the_spell = locate(/obj/effect/proc_holder/spell/target_hive/hive_control) in hive.owner.spell_list
32+
if((!the_spell || !the_spell.active ) && mind == hive.owner)
33+
return TRUE
34+
if(the_spell?.active && the_spell.original_body == src)
3435
return TRUE
35-
else
36-
return TRUE
3736
return FALSE
3837

3938
/mob/living/proc/get_real_hivehost() //Returns src unless it's under mind control, then it returns the original body
@@ -47,7 +46,10 @@
4746
return the_spell.original_body
4847
return M
4948

50-
/proc/is_hivemember(mob/living/M)
49+
/proc/is_hivemember(mob/living/L)
50+
if(!L)
51+
return FALSE
52+
var/datum/mind/M = L.mind
5153
if(!M)
5254
return FALSE
5355
for(var/datum/antagonist/hivemind/H in GLOB.antagonists)
@@ -71,7 +73,7 @@
7173
if(CONFIG_GET(flag/protect_assistant_from_antagonist))
7274
restricted_jobs += "Assistant"
7375

74-
var/num_hosts = max( 1 , rand(0,1) + min(5, round(num_players() / 12) ) ) //1 host for every 12 players up to 60, with a 50% chance of an extra
76+
var/num_hosts = max( 1 , 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
7577

7678
for(var/j = 0, j < num_hosts, j++)
7779
if (!antag_candidates.len)
@@ -91,10 +93,6 @@
9193

9294

9395
/datum/game_mode/hivemind/post_setup()
94-
if(hosts.len >= 4 && prob(35)) //Create the versus objective here since we want a common target for all the antags
95-
var/datum/antagonist/hivemind/hive
96-
hive.common_assimilation_obj = new /datum/objective/hivemind/assimilate_common
97-
hive.common_assimilation_obj.find_target_by_role(role = ROLE_HIVE, role_type = TRUE, invert = TRUE)
9896
for(var/datum/mind/i in hosts)
9997
i.add_antag_datum(/datum/antagonist/hivemind)
10098
return ..()
Collapse file

‎code/game/gamemodes/hivemind/objectives.dm‎

Copy file name to clipboardExpand all lines: code/game/gamemodes/hivemind/objectives.dm
+9-46Lines changed: 9 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -33,32 +33,17 @@
3333
var/datum/antagonist/hivemind/host = owner.has_antag_datum(/datum/antagonist/hivemind)
3434
if(!host)
3535
return FALSE
36-
for(var/mob/living/L in host.hivemembers)
37-
var/datum/mind/M = L.mind
38-
if(M)
39-
if(considered_escaped(M))
40-
count++
36+
for(var/obj/item/organ/brain/B in host.hivemembers)
37+
var/mob/living/carbon/C = B.owner
38+
if(!C)
39+
continue
40+
var/datum/mind/M = C.mind
41+
if(!M)
42+
continue
43+
if(considered_escaped(M))
44+
count++
4145
return count >= target_amount
4246

43-
/datum/objective/hivemind/assimilate
44-
explanation_text = "This is a bug. Error:HIVE3"
45-
46-
/datum/objective/hivemind/assimilate/update_explanation_text()
47-
if(target)
48-
explanation_text = "Assimilate [target.name] into the hive and ensure they survive."
49-
else
50-
explanation_text = "Free Objective."
51-
52-
/datum/objective/hivemind/assimilate/check_completion()
53-
var/datum/antagonist/hivemind/host = owner.has_antag_datum(/datum/antagonist/hivemind)
54-
if(!host)
55-
return FALSE
56-
for(var/mob/living/L in host.hivemembers)
57-
var/datum/mind/M = L.mind
58-
if(M == target)
59-
return considered_alive(target)
60-
return FALSE
61-
6247
/datum/objective/hivemind/biggest
6348
explanation_text = "End the round with more vessels than any other hivemind host."
6449

@@ -71,26 +56,4 @@
7156
continue
7257
if(H.hive_size >= host.hive_size)
7358
return FALSE
74-
return TRUE
75-
76-
/datum/objective/hivemind/assimilate_common
77-
explanation_text = "This is a bug. Error:HIVE3"
78-
79-
/datum/objective/hivemind/assimilate_common/update_explanation_text()
80-
if(target)
81-
explanation_text = "Ensure that you are the only host assimilating [target.name] at the end of the round."
82-
else
83-
explanation_text = "Free Objective."
84-
85-
/datum/objective/hivemind/assimilate_common/check_completion()
86-
var/datum/antagonist/hivemind/host = owner.has_antag_datum(/datum/antagonist/hivemind)
87-
if(!target)
88-
return TRUE
89-
if(!host || !target.current || !host.hivemembers.Find(target.current))
90-
return FALSE
91-
for(var/datum/antagonist/hivemind/H in GLOB.antagonists)
92-
if(H == host)
93-
continue
94-
if(H.hivemembers.Find(target.current))
95-
return FALSE
9659
return TRUE
Collapse file

‎code/game/objects/items/implants/implant_mindshield.dm‎

Copy file name to clipboardExpand all lines: code/game/objects/items/implants/implant_mindshield.dm
+8-3Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,20 +41,25 @@
4141
qdel(src)
4242
return FALSE
4343

44+
var/datum/antagonist/hivevessel/woke = target.is_wokevessel()
4445
if(is_hivemember(target))
4546
for(var/datum/antagonist/hivemind/hive in GLOB.antagonists)
4647
if(hive.hivemembers.Find(target))
4748
var/mob/living/carbon/C = hive.owner.current.get_real_hivehost()
4849
if(C)
49-
C.apply_status_effect(STATUS_EFFECT_HIVE_TRACKER, target)
50-
target.apply_status_effect(STATUS_EFFECT_HIVE_TRACKER, C)
50+
C.apply_status_effect(STATUS_EFFECT_HIVE_TRACKER, target, woke?TRACKER_AWAKENED_TIME:TRACKER_MINDSHIELD_TIME)
51+
target.apply_status_effect(STATUS_EFFECT_HIVE_TRACKER, C, TRACKER_DEFAULT_TIME)
5152
if(C.mind) //If you were using mind control, too bad
5253
C.apply_status_effect(STATUS_EFFECT_HIVE_RADAR)
53-
to_chat(C, "<span class='userdanger'>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.</span>")
54+
to_chat(C, "<span class='assimilator'>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.</span>")
5455
to_chat(target, "<span class='assimilator'>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!</span>")
5556
target.apply_status_effect(STATUS_EFFECT_HIVE_RADAR)
5657
remove_hivemember(target)
5758

59+
if(woke)
60+
woke.one_mind.remove_member(target.mind)
61+
target.mind.remove_antag_datum(/datum/antagonist/hivevessel)
62+
5863
var/datum/antagonist/rev/rev = target.mind.has_antag_datum(/datum/antagonist/rev)
5964
if(rev)
6065
rev.remove_revolutionary(FALSE, user)

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.