mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-11 10:11:09 +00:00
Creep fluff completely rewritten (#42675)
* hang in there! * Apply suggestions from code review - rewrite P1 Co-Authored-By: tralezab <40974010+tralezab@users.noreply.github.com> * most creep > obsessed - rewrite P2 * removes creep_inlove, last edit to greet
This commit is contained in:
@@ -58,7 +58,7 @@
|
|||||||
#define ANTAG_HUD_CLOCKWORK 22
|
#define ANTAG_HUD_CLOCKWORK 22
|
||||||
#define ANTAG_HUD_BROTHER 23
|
#define ANTAG_HUD_BROTHER 23
|
||||||
#define ANTAG_HUD_HIVE 24
|
#define ANTAG_HUD_HIVE 24
|
||||||
#define ANTAG_HUD_CREEP 25
|
#define ANTAG_HUD_OBSESSED 25
|
||||||
|
|
||||||
// Notification action types
|
// Notification action types
|
||||||
#define NOTIFY_JUMP "jump"
|
#define NOTIFY_JUMP "jump"
|
||||||
|
|||||||
@@ -28,7 +28,7 @@
|
|||||||
#define ROLE_BRAINWASHED "Brainwashed Victim"
|
#define ROLE_BRAINWASHED "Brainwashed Victim"
|
||||||
#define ROLE_OVERTHROW "Syndicate Mutineer"
|
#define ROLE_OVERTHROW "Syndicate Mutineer"
|
||||||
#define ROLE_HIVE "Hivemind Host"
|
#define ROLE_HIVE "Hivemind Host"
|
||||||
#define ROLE_CREEP "Creep"
|
#define ROLE_OBSESSED "Obsessed"
|
||||||
#define ROLE_SENTIENCE "Sentience Potion Spawn"
|
#define ROLE_SENTIENCE "Sentience Potion Spawn"
|
||||||
#define ROLE_MIND_TRANSFER "Mind Transfer Potion"
|
#define ROLE_MIND_TRANSFER "Mind Transfer Potion"
|
||||||
#define ROLE_POSIBRAIN "Posibrain"
|
#define ROLE_POSIBRAIN "Posibrain"
|
||||||
@@ -53,7 +53,7 @@ GLOBAL_LIST_INIT(special_roles, list(
|
|||||||
ROLE_CULTIST = /datum/game_mode/cult,
|
ROLE_CULTIST = /datum/game_mode/cult,
|
||||||
ROLE_BLOB,
|
ROLE_BLOB,
|
||||||
ROLE_NINJA,
|
ROLE_NINJA,
|
||||||
ROLE_CREEP,
|
ROLE_OBSESSED,
|
||||||
ROLE_MONKEY = /datum/game_mode/monkey,
|
ROLE_MONKEY = /datum/game_mode/monkey,
|
||||||
ROLE_REVENANT,
|
ROLE_REVENANT,
|
||||||
ROLE_ABDUCTOR,
|
ROLE_ABDUCTOR,
|
||||||
|
|||||||
@@ -37,7 +37,6 @@
|
|||||||
#define STATUS_EFFECT_GOOD_MUSIC /datum/status_effect/good_music
|
#define STATUS_EFFECT_GOOD_MUSIC /datum/status_effect/good_music
|
||||||
|
|
||||||
#define STATUS_EFFECT_REGENERATIVE_CORE /datum/status_effect/regenerative_core
|
#define STATUS_EFFECT_REGENERATIVE_CORE /datum/status_effect/regenerative_core
|
||||||
#define STATUS_EFFECT_CREEP /datum/status_effect/creep //you feel fuckin great around your obsession
|
|
||||||
|
|
||||||
/////////////
|
/////////////
|
||||||
// DEBUFFS //
|
// DEBUFFS //
|
||||||
|
|||||||
@@ -1,22 +1,22 @@
|
|||||||
/datum/brain_trauma/special/creep
|
/datum/brain_trauma/special/obsessed
|
||||||
name = "Erotomania"
|
name = "Psychotic Schizophrenia"
|
||||||
desc = "Patient has a subtype of delusional disorder, becoming irrationally attached to someone."
|
desc = "Patient has a subtype of delusional disorder, becoming irrationally attached to someone."
|
||||||
scan_desc = "erotomaniac delusions"
|
scan_desc = "psychotic schizophrenic delusions"
|
||||||
gain_text = "If you see this message, make a github issue report. The trauma initialized wrong."
|
gain_text = "If you see this message, make a github issue report. The trauma initialized wrong."
|
||||||
lose_text = "<span class='warning'>You no longer feel so attached.</span>"
|
lose_text = "<span class='warning'>The voices in your head fall silent.</span>"
|
||||||
can_gain = TRUE
|
can_gain = TRUE
|
||||||
random_gain = FALSE
|
random_gain = FALSE
|
||||||
resilience = TRAUMA_RESILIENCE_SURGERY
|
resilience = TRAUMA_RESILIENCE_SURGERY
|
||||||
var/mob/living/obsession
|
var/mob/living/obsession
|
||||||
var/datum/objective/spendtime/attachedcreepobj
|
var/datum/objective/spendtime/attachedobsessedobj
|
||||||
var/datum/antagonist/creep/antagonist
|
var/datum/antagonist/obsessed/antagonist
|
||||||
var/viewing = FALSE //it's a lot better to store if the owner is watching the obsession than checking it twice between two procs
|
var/viewing = FALSE //it's a lot better to store if the owner is watching the obsession than checking it twice between two procs
|
||||||
|
|
||||||
var/total_time_creeping = 0 //just for roundend fun
|
var/total_time_creeping = 0 //just for roundend fun
|
||||||
var/time_spent_away = 0
|
var/time_spent_away = 0
|
||||||
var/obsession_hug_count = 0
|
var/obsession_hug_count = 0
|
||||||
|
|
||||||
/datum/brain_trauma/special/creep/on_gain()
|
/datum/brain_trauma/special/obsessed/on_gain()
|
||||||
|
|
||||||
//setup, linking, etc//
|
//setup, linking, etc//
|
||||||
if(!obsession)//admins didn't set one
|
if(!obsession)//admins didn't set one
|
||||||
@@ -24,17 +24,16 @@
|
|||||||
if(!obsession)//we didn't find one
|
if(!obsession)//we didn't find one
|
||||||
lose_text = ""
|
lose_text = ""
|
||||||
qdel(src)
|
qdel(src)
|
||||||
gain_text = "<span class='warning'>You feel a strange attachment to [obsession].</span>"
|
gain_text = "<span class='warning'>You hear a sickening, raspy voice in your head. It wants one small task of you...</span>"
|
||||||
owner.apply_status_effect(STATUS_EFFECT_INLOVE, obsession)
|
owner.mind.add_antag_datum(/datum/antagonist/obsessed)
|
||||||
owner.mind.add_antag_datum(/datum/antagonist/creep)
|
antagonist = owner.mind.has_antag_datum(/datum/antagonist/obsessed)
|
||||||
antagonist = owner.mind.has_antag_datum(/datum/antagonist/creep)
|
|
||||||
antagonist.trauma = src
|
antagonist.trauma = src
|
||||||
..()
|
..()
|
||||||
//antag stuff//
|
//antag stuff//
|
||||||
antagonist.forge_objectives(obsession.mind)
|
antagonist.forge_objectives(obsession.mind)
|
||||||
antagonist.greet()
|
antagonist.greet()
|
||||||
|
|
||||||
/datum/brain_trauma/special/creep/on_life()
|
/datum/brain_trauma/special/obsessed/on_life()
|
||||||
if(!obsession || obsession.stat == DEAD)
|
if(!obsession || obsession.stat == DEAD)
|
||||||
viewing = FALSE//important, makes sure you no longer stutter when happy if you murdered them while viewing
|
viewing = FALSE//important, makes sure you no longer stutter when happy if you murdered them while viewing
|
||||||
return
|
return
|
||||||
@@ -50,12 +49,12 @@
|
|||||||
SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "creeping", /datum/mood_event/creeping, obsession.name)
|
SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "creeping", /datum/mood_event/creeping, obsession.name)
|
||||||
total_time_creeping += 20
|
total_time_creeping += 20
|
||||||
time_spent_away = 0
|
time_spent_away = 0
|
||||||
if(attachedcreepobj)//if an objective needs to tick down, we can do that since traumas coexist with the antagonist datum
|
if(attachedobsessedobj)//if an objective needs to tick down, we can do that since traumas coexist with the antagonist datum
|
||||||
attachedcreepobj.timer -= 20 //mob subsystem ticks every 2 seconds(?), remove 20 deciseconds from the timer. sure, that makes sense.
|
attachedobsessedobj.timer -= 20 //mob subsystem ticks every 2 seconds(?), remove 20 deciseconds from the timer. sure, that makes sense.
|
||||||
else
|
else
|
||||||
out_of_view()
|
out_of_view()
|
||||||
|
|
||||||
/datum/brain_trauma/special/creep/proc/out_of_view()
|
/datum/brain_trauma/special/obsessed/proc/out_of_view()
|
||||||
time_spent_away += 20
|
time_spent_away += 20
|
||||||
if(time_spent_away > 1800) //3 minutes
|
if(time_spent_away > 1800) //3 minutes
|
||||||
SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "creeping", /datum/mood_event/notcreepingsevere, obsession.name)
|
SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "creeping", /datum/mood_event/notcreepingsevere, obsession.name)
|
||||||
@@ -63,10 +62,9 @@
|
|||||||
SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "creeping", /datum/mood_event/notcreeping, obsession.name)
|
SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "creeping", /datum/mood_event/notcreeping, obsession.name)
|
||||||
/datum/brain_trauma/special/creep/on_lose()
|
/datum/brain_trauma/special/creep/on_lose()
|
||||||
..()
|
..()
|
||||||
owner.remove_status_effect(STATUS_EFFECT_INLOVE)
|
owner.mind.remove_antag_datum(/datum/antagonist/obsessed)
|
||||||
owner.mind.remove_antag_datum(/datum/antagonist/creep)
|
|
||||||
|
|
||||||
/datum/brain_trauma/special/creep/on_say(message)
|
/datum/brain_trauma/special/obsessed/on_say(message)
|
||||||
if(!viewing)
|
if(!viewing)
|
||||||
return message
|
return message
|
||||||
var/choked_up
|
var/choked_up
|
||||||
@@ -78,11 +76,11 @@
|
|||||||
return ""
|
return ""
|
||||||
return message
|
return message
|
||||||
|
|
||||||
/datum/brain_trauma/special/creep/on_hug(mob/living/hugger, mob/living/hugged)
|
/datum/brain_trauma/special/obsessed/on_hug(mob/living/hugger, mob/living/hugged)
|
||||||
if(hugged == obsession)
|
if(hugged == obsession)
|
||||||
obsession_hug_count++
|
obsession_hug_count++
|
||||||
|
|
||||||
/datum/brain_trauma/special/creep/proc/social_interaction()
|
/datum/brain_trauma/special/obsessed/proc/social_interaction()
|
||||||
var/fail = FALSE //whether you can finish a sentence while doing it
|
var/fail = FALSE //whether you can finish a sentence while doing it
|
||||||
owner.stuttering = max(3, owner.stuttering)
|
owner.stuttering = max(3, owner.stuttering)
|
||||||
owner.blur_eyes(10)
|
owner.blur_eyes(10)
|
||||||
@@ -106,7 +104,7 @@
|
|||||||
return fail
|
return fail
|
||||||
|
|
||||||
|
|
||||||
/datum/brain_trauma/special/creep/proc/find_obsession()
|
/datum/brain_trauma/special/obsessed/proc/find_obsession()
|
||||||
var/chosen_victim
|
var/chosen_victim
|
||||||
var/list/possible_targets = list()
|
var/list/possible_targets = list()
|
||||||
var/list/viable_minds = list()
|
var/list/viable_minds = list()
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
else if(isobserver(user))
|
else if(isobserver(user))
|
||||||
to_chat(user, "<span class='notice'>It is the [family_name] family heirloom, belonging to [owner].</span>")
|
to_chat(user, "<span class='notice'>It is the [family_name] family heirloom, belonging to [owner].</span>")
|
||||||
else
|
else
|
||||||
var/datum/antagonist/creep/creeper = user.mind.has_antag_datum(/datum/antagonist/creep)
|
var/datum/antagonist/obsessed/creeper = user.mind.has_antag_datum(/datum/antagonist/obsessed)
|
||||||
if(creeper && creeper.trauma.obsession == owner)
|
if(creeper && creeper.trauma.obsession == owner)
|
||||||
to_chat(user, "<span class='nicegreen'>This must be [owner]'s family heirloom! It smells just like them...</span>")
|
to_chat(user, "<span class='nicegreen'>This must be [owner]'s family heirloom! It smells just like them...</span>")
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ GLOBAL_LIST_INIT(huds, list(
|
|||||||
ANTAG_HUD_CLOCKWORK = new/datum/atom_hud/antag(),
|
ANTAG_HUD_CLOCKWORK = new/datum/atom_hud/antag(),
|
||||||
ANTAG_HUD_BROTHER = new/datum/atom_hud/antag/hidden(),
|
ANTAG_HUD_BROTHER = new/datum/atom_hud/antag/hidden(),
|
||||||
ANTAG_HUD_HIVE = new/datum/atom_hud/antag/hidden(),
|
ANTAG_HUD_HIVE = new/datum/atom_hud/antag/hidden(),
|
||||||
ANTAG_HUD_CREEP = new/datum/atom_hud/antag/hidden()
|
ANTAG_HUD_OBSESSED = new/datum/atom_hud/antag/hidden()
|
||||||
))
|
))
|
||||||
|
|
||||||
/datum/atom_hud
|
/datum/atom_hud
|
||||||
|
|||||||
@@ -148,16 +148,14 @@
|
|||||||
timeout = 1200
|
timeout = 1200
|
||||||
|
|
||||||
/datum/mood_event/notcreeping
|
/datum/mood_event/notcreeping
|
||||||
description = "<span class='warning'>I sure wish I was around my obsession...</span>\n"
|
description = "<span class='warning'>The voices are not happy, and they painfully contort my thoughts into getting back on task.</span>\n"
|
||||||
mood_change = -6
|
mood_change = -6
|
||||||
timeout = 30
|
timeout = 30
|
||||||
hidden = TRUE
|
hidden = TRUE
|
||||||
|
|
||||||
/datum/mood_event/notcreeping/add_effects(name)
|
|
||||||
description = "<span class='warning'>I sure wish I was around [name]...</span>\n"
|
|
||||||
|
|
||||||
/datum/mood_event/notcreepingsevere//not hidden since it's so severe
|
/datum/mood_event/notcreepingsevere//not hidden since it's so severe
|
||||||
description = "<span class='boldwarning'>OBSESSIONNNN WHERE ARE YOUUUUUUUUUUUUU?!</span>\n"
|
description = "<span class='boldwarning'>THEY NEEEEEEED OBSESSIONNNN!!</span>\n"
|
||||||
mood_change = -30
|
mood_change = -30
|
||||||
timeout = 30
|
timeout = 30
|
||||||
|
|
||||||
@@ -166,7 +164,7 @@
|
|||||||
for(var/i in 1 to rand(3,5))
|
for(var/i in 1 to rand(3,5))
|
||||||
unstable += copytext(name, -1)
|
unstable += copytext(name, -1)
|
||||||
var/unhinged = uppertext(unstable.Join(""))//example Tinea Luxor > TINEA LUXORRRR (with randomness in how long that slur is)
|
var/unhinged = uppertext(unstable.Join(""))//example Tinea Luxor > TINEA LUXORRRR (with randomness in how long that slur is)
|
||||||
description = "<span class='boldwarning'>[unhinged] WHERE ARE YOUUUUUUUUUUUUU?!</span>\n"
|
description = "<span class='boldwarning'>THEY NEEEEEEED [unhinged]!!</span>\n"
|
||||||
|
|
||||||
/datum/mood_event/idiot_shower
|
/datum/mood_event/idiot_shower
|
||||||
description = "<span class='warning'>I showered with my clothes on, I'm a fucking idiot.</span>\n"
|
description = "<span class='warning'>I showered with my clothes on, I'm a fucking idiot.</span>\n"
|
||||||
|
|||||||
@@ -63,15 +63,10 @@
|
|||||||
special_screen_replace = FALSE
|
special_screen_replace = FALSE
|
||||||
|
|
||||||
/datum/mood_event/creeping
|
/datum/mood_event/creeping
|
||||||
description = "<span class='greentext'>I'm so close to my obsession and I never want this to end.</span>\n" //creeps get it when they are around their obsession
|
description = "<span class='greentext'>The voices have released their hooks on my mind! I feel free again!</span>\n" //creeps get it when they are around their obsession
|
||||||
mood_change = 18
|
mood_change = 18
|
||||||
timeout = 30
|
timeout = 30
|
||||||
hidden = TRUE
|
hidden = TRUE
|
||||||
special_screen_obj = "creep_inlove"
|
|
||||||
special_screen_replace = FALSE
|
|
||||||
|
|
||||||
/datum/mood_event/creeping/add_effects(name)
|
|
||||||
description = "<span class='greentext'>I'm so close to [name] and I NEVER want this to end.</span>\n"
|
|
||||||
|
|
||||||
/datum/mood_event/revolution
|
/datum/mood_event/revolution
|
||||||
description = "<span class='nicegreen'>VIVA LA REVOLUTION!</span>\n"
|
description = "<span class='nicegreen'>VIVA LA REVOLUTION!</span>\n"
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
/datum/antagonist/creep
|
/datum/antagonist/obsessed
|
||||||
name = "Creep"
|
name = "Obsessed"
|
||||||
show_in_antagpanel = TRUE
|
show_in_antagpanel = TRUE
|
||||||
antagpanel_category = "Other"
|
antagpanel_category = "Other"
|
||||||
job_rank = ROLE_CREEP
|
job_rank = ROLE_OBSESSED
|
||||||
show_name_in_check_antagonists = TRUE
|
show_name_in_check_antagonists = TRUE
|
||||||
roundend_category = "creeps"
|
roundend_category = "obsessed"
|
||||||
silent = TRUE //not actually silent, because greet will be called by the trauma anyway.
|
silent = TRUE //not actually silent, because greet will be called by the trauma anyway.
|
||||||
var/datum/brain_trauma/special/creep/trauma
|
var/datum/brain_trauma/special/obsessed/trauma
|
||||||
|
|
||||||
/datum/antagonist/creep/admin_add(datum/mind/new_owner,mob/admin)
|
/datum/antagonist/obsessed/admin_add(datum/mind/new_owner,mob/admin)
|
||||||
var/mob/living/carbon/C = new_owner.current
|
var/mob/living/carbon/C = new_owner.current
|
||||||
if(!istype(C))
|
if(!istype(C))
|
||||||
to_chat(admin, "[roundend_category] come from a brain trauma, so they need to at least be a carbon!")
|
to_chat(admin, "[roundend_category] come from a brain trauma, so they need to at least be a carbon!")
|
||||||
@@ -19,32 +19,33 @@
|
|||||||
message_admins("[key_name_admin(admin)] made [key_name_admin(new_owner)] into [name].")
|
message_admins("[key_name_admin(admin)] made [key_name_admin(new_owner)] into [name].")
|
||||||
log_admin("[key_name(admin)] made [key_name(new_owner)] into [name].")
|
log_admin("[key_name(admin)] made [key_name(new_owner)] into [name].")
|
||||||
//PRESTO FUCKIN MAJESTO
|
//PRESTO FUCKIN MAJESTO
|
||||||
C.gain_trauma(/datum/brain_trauma/special/creep)//ZAP
|
C.gain_trauma(/datum/brain_trauma/special/obsessed)//ZAP
|
||||||
|
|
||||||
/datum/antagonist/creep/greet()
|
/datum/antagonist/obsessed/greet()
|
||||||
owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/creepalert.ogg', 100, FALSE, pressure_affected = FALSE)
|
owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/creepalert.ogg', 100, FALSE, pressure_affected = FALSE)
|
||||||
to_chat(owner, "<span class='boldannounce'>You are the Creep!</span>")
|
to_chat(owner, "<span class='boldannounce'>You are the Obsessed!</span>")
|
||||||
to_chat(owner, "<B>They would call it an obsession. They would call you crazy, because they don't understand your unrequited love.<br>All you know is that you love [trauma.obsession]. And you. will. show them.</B>")
|
to_chat(owner, "<B>The Voices have reached out to you, and are using you to complete their evil deeds.</B>")
|
||||||
to_chat(owner, "<B>I will surely go insane if I don't spend enough time around [trauma.obsession], but when i'm near them too long it gets too difficult to speak properly, making me look like a CREEP!</B>")
|
to_chat(owner, "<B>You don't know their connection, but The Voices compel you to stalk [trauma.obsession], forcing them into a state of constant paranoia.</B>")
|
||||||
to_chat(owner, "<span class='boldannounce'>The gods would like to remind you that this role, as with all other antags, does not allow you to break ANY server rules, especially Rule 8 (These rules being listed from the \"Rules\" button at the top right of your mind's screen). Feel free to murder and pillage just like any other antag, though.</span>")
|
to_chat(owner, "<B>The Voices will retaliate if you fail to complete your tasks or spend too long away from your target.</B>")
|
||||||
|
to_chat(owner, "<span class='boldannounce'>This role does NOT enable you to otherwise surpass what's deemed creepy behavior per the rules.</span>")//ironic if you know the history of the antag
|
||||||
owner.announce_objectives()
|
owner.announce_objectives()
|
||||||
|
|
||||||
/datum/antagonist/creep/Destroy()
|
/datum/antagonist/obsessed/Destroy()
|
||||||
if(trauma)
|
if(trauma)
|
||||||
qdel(trauma)
|
qdel(trauma)
|
||||||
. = ..()
|
. = ..()
|
||||||
|
|
||||||
/datum/antagonist/creep/apply_innate_effects(mob/living/mob_override)
|
/datum/antagonist/obsessed/apply_innate_effects(mob/living/mob_override)
|
||||||
var/mob/living/M = mob_override || owner.current
|
var/mob/living/M = mob_override || owner.current
|
||||||
update_creep_icons_added(M)
|
update_obsession_icons_added(M)
|
||||||
|
|
||||||
/datum/antagonist/creep/remove_innate_effects(mob/living/mob_override)
|
/datum/antagonist/obsessed/remove_innate_effects(mob/living/mob_override)
|
||||||
var/mob/living/M = mob_override || owner.current
|
var/mob/living/M = mob_override || owner.current
|
||||||
update_creep_icons_removed(M)
|
update_obsession_icons_removed(M)
|
||||||
|
|
||||||
/datum/antagonist/creep/proc/forge_objectives(var/datum/mind/obsessionmind)
|
/datum/antagonist/obsessed/proc/forge_objectives(var/datum/mind/obsessionmind)
|
||||||
var/list/objectives_left = list("spendtime", "polaroid", "hug")
|
var/list/objectives_left = list("spendtime", "polaroid", "hug")
|
||||||
var/datum/objective/assassinate/creep/kill = new
|
var/datum/objective/assassinate/obsessed/kill = new
|
||||||
kill.owner = owner
|
kill.owner = owner
|
||||||
kill.target = obsessionmind
|
kill.target = obsessionmind
|
||||||
var/datum/quirk/family_heirloom/family_heirloom
|
var/datum/quirk/family_heirloom/family_heirloom
|
||||||
@@ -94,10 +95,10 @@
|
|||||||
for(var/datum/objective/O in objectives)
|
for(var/datum/objective/O in objectives)
|
||||||
O.update_explanation_text()
|
O.update_explanation_text()
|
||||||
|
|
||||||
/datum/antagonist/creep/roundend_report_header()
|
/datum/antagonist/obsessed/roundend_report_header()
|
||||||
return "<span class='header'>Someone became a creep!</span><br>"
|
return "<span class='header'>Someone became obsessed!</span><br>"
|
||||||
|
|
||||||
/datum/antagonist/creep/roundend_report()
|
/datum/antagonist/obsessed/roundend_report()
|
||||||
var/list/report = list()
|
var/list/report = list()
|
||||||
|
|
||||||
if(!owner)
|
if(!owner)
|
||||||
@@ -131,14 +132,14 @@
|
|||||||
///CREEPY objectives (few chosen per obsession)///
|
///CREEPY objectives (few chosen per obsession)///
|
||||||
//////////////////////////////////////////////////
|
//////////////////////////////////////////////////
|
||||||
|
|
||||||
/datum/objective/assassinate/creep //just a creepy version of assassinate
|
/datum/objective/assassinate/obsessed //just a creepy version of assassinate
|
||||||
|
|
||||||
/datum/objective/assassinate/creep/update_explanation_text()
|
/datum/objective/assassinate/obsessed/update_explanation_text()
|
||||||
..()
|
..()
|
||||||
if(target && target.current)
|
if(target && target.current)
|
||||||
explanation_text = "Murder [target.name], the [!target_role_type ? target.assigned_role : target.special_role]."
|
explanation_text = "Murder [target.name], the [!target_role_type ? target.assigned_role : target.special_role]."
|
||||||
else
|
else
|
||||||
message_admins("WARNING! [ADMIN_LOOKUPFLW(owner)] creep objectives forged without an obsession!")
|
message_admins("WARNING! [ADMIN_LOOKUPFLW(owner)] obsessed objectives forged without an obsession!")
|
||||||
explanation_text = "Free Objective"
|
explanation_text = "Free Objective"
|
||||||
|
|
||||||
/datum/objective/assassinate/jealous //assassinate, but it changes the target to someone else in the previous target's department. cool, right?
|
/datum/objective/assassinate/jealous //assassinate, but it changes the target to someone else in the previous target's department. cool, right?
|
||||||
@@ -175,8 +176,8 @@
|
|||||||
for(var/mob/living/carbon/human/H in GLOB.alive_mob_list)
|
for(var/mob/living/carbon/human/H in GLOB.alive_mob_list)
|
||||||
if(!H.mind)
|
if(!H.mind)
|
||||||
continue
|
continue
|
||||||
if(!SSjob.GetJob(H.mind.assigned_role) || H == oldmind.current || H.mind.has_antag_datum(/datum/antagonist/creep))
|
if(!SSjob.GetJob(H.mind.assigned_role) || H == oldmind.current || H.mind.has_antag_datum(/datum/antagonist/obsessed))
|
||||||
continue //the jealousy target has to have a job, and not be the obsession or creep.
|
continue //the jealousy target has to have a job, and not be the obsession or obsessed.
|
||||||
all_coworkers += H.mind
|
all_coworkers += H.mind
|
||||||
//this won't be called often thankfully.
|
//this won't be called often thankfully.
|
||||||
if(H.mind.assigned_role in GLOB.security_positions)
|
if(H.mind.assigned_role in GLOB.security_positions)
|
||||||
@@ -201,16 +202,16 @@
|
|||||||
target = pick(all_coworkers)
|
target = pick(all_coworkers)
|
||||||
return oldmind
|
return oldmind
|
||||||
|
|
||||||
/datum/objective/spendtime //spend some time around someone, handled by the creep trauma since that ticks
|
/datum/objective/spendtime //spend some time around someone, handled by the obsessed trauma since that ticks
|
||||||
name = "spendtime"
|
name = "spendtime"
|
||||||
var/timer = 1800 //5 minutes
|
var/timer = 1800 //5 minutes
|
||||||
|
|
||||||
/datum/objective/spendtime/update_explanation_text()
|
/datum/objective/spendtime/update_explanation_text()
|
||||||
if(timer == initial(timer))//just so admins can mess with it
|
if(timer == initial(timer))//just so admins can mess with it
|
||||||
timer += pick(-600, 0)
|
timer += pick(-600, 0)
|
||||||
var/datum/antagonist/creep/creeper = owner.has_antag_datum(/datum/antagonist/creep)
|
var/datum/antagonist/obsessed/creeper = owner.has_antag_datum(/datum/antagonist/obsessed)
|
||||||
if(target && target.current && creeper)
|
if(target && target.current && creeper)
|
||||||
creeper.trauma.attachedcreepobj = src
|
creeper.trauma.attachedobsessedobj = src
|
||||||
explanation_text = "Spend [DisplayTimeText(timer)] around [target.name] while they're alive."
|
explanation_text = "Spend [DisplayTimeText(timer)] around [target.name] while they're alive."
|
||||||
else
|
else
|
||||||
explanation_text = "Free Objective"
|
explanation_text = "Free Objective"
|
||||||
@@ -227,14 +228,14 @@
|
|||||||
..()
|
..()
|
||||||
if(!hugs_needed)//just so admins can mess with it
|
if(!hugs_needed)//just so admins can mess with it
|
||||||
hugs_needed = rand(4,6)
|
hugs_needed = rand(4,6)
|
||||||
var/datum/antagonist/creep/creeper = owner.has_antag_datum(/datum/antagonist/creep)
|
var/datum/antagonist/obsessed/creeper = owner.has_antag_datum(/datum/antagonist/obsessed)
|
||||||
if(target && target.current && creeper)
|
if(target && target.current && creeper)
|
||||||
explanation_text = "Hug [target.name] [hugs_needed] times while they're alive."
|
explanation_text = "Hug [target.name] [hugs_needed] times while they're alive."
|
||||||
else
|
else
|
||||||
explanation_text = "Free Objective"
|
explanation_text = "Free Objective"
|
||||||
|
|
||||||
/datum/objective/hug/check_completion()
|
/datum/objective/hug/check_completion()
|
||||||
var/datum/antagonist/creep/creeper = owner.has_antag_datum(/datum/antagonist/creep)
|
var/datum/antagonist/obsessed/creeper = owner.has_antag_datum(/datum/antagonist/obsessed)
|
||||||
if(!creeper || !creeper.trauma || !hugs_needed)
|
if(!creeper || !creeper.trauma || !hugs_needed)
|
||||||
return TRUE//free objective
|
return TRUE//free objective
|
||||||
return creeper.trauma.obsession_hug_count >= hugs_needed
|
return creeper.trauma.obsession_hug_count >= hugs_needed
|
||||||
@@ -273,12 +274,12 @@
|
|||||||
else
|
else
|
||||||
explanation_text = "Free Objective"
|
explanation_text = "Free Objective"
|
||||||
|
|
||||||
/datum/antagonist/creep/proc/update_creep_icons_added(var/mob/living/carbon/human/creep)
|
/datum/antagonist/obsessed/proc/update_obsession_icons_added(var/mob/living/carbon/human/obsessed)
|
||||||
var/datum/atom_hud/antag/creephud = GLOB.huds[ANTAG_HUD_CREEP]
|
var/datum/atom_hud/antag/creephud = GLOB.huds[ANTAG_HUD_OBSESSED]
|
||||||
creephud.join_hud(creep)
|
creephud.join_hud(obsessed)
|
||||||
set_antag_hud(creep, "creep")
|
set_antag_hud(obsessed, "obsessed")
|
||||||
|
|
||||||
/datum/antagonist/creep/proc/update_creep_icons_removed(var/mob/living/carbon/human/creep)
|
/datum/antagonist/obsessed/proc/update_obsession_icons_removed(var/mob/living/carbon/human/obsessed)
|
||||||
var/datum/atom_hud/antag/creephud = GLOB.huds[ANTAG_HUD_CREEP]
|
var/datum/atom_hud/antag/creephud = GLOB.huds[ANTAG_HUD_OBSESSED]
|
||||||
creephud.leave_hud(creep)
|
creephud.leave_hud(obsessed)
|
||||||
set_antag_hud(creep, null)
|
set_antag_hud(obsessed, null)
|
||||||
|
|||||||
@@ -1,24 +1,24 @@
|
|||||||
/datum/round_event_control/creep
|
/datum/round_event_control/obsessed
|
||||||
name = "Creep Awakening"
|
name = "Obsession Awakening"
|
||||||
typepath = /datum/round_event/creep
|
typepath = /datum/round_event/obsessed
|
||||||
max_occurrences = 1
|
max_occurrences = 1
|
||||||
min_players = 20
|
min_players = 20
|
||||||
|
|
||||||
/datum/round_event/creep
|
/datum/round_event/obsessed
|
||||||
fakeable = FALSE
|
fakeable = FALSE
|
||||||
|
|
||||||
/datum/round_event/creep/start()
|
/datum/round_event/obsessed/start()
|
||||||
for(var/mob/living/carbon/human/H in shuffle(GLOB.player_list))
|
for(var/mob/living/carbon/human/H in shuffle(GLOB.player_list))
|
||||||
if(!H.client)
|
if(!H.client)
|
||||||
continue
|
continue
|
||||||
if(H.stat == DEAD)
|
if(H.stat == DEAD)
|
||||||
continue
|
continue
|
||||||
if(!SSjob.GetJob(H.mind.assigned_role) || H.mind.assigned_role in GLOB.nonhuman_positions) //only station jobs sans nonhuman roles, prevents ashwalkers falling in love with crewmembers they never met
|
if(!SSjob.GetJob(H.mind.assigned_role) || H.mind.assigned_role in GLOB.nonhuman_positions) //only station jobs sans nonhuman roles, prevents ashwalkers trying to stalk with crewmembers they never met
|
||||||
continue
|
continue
|
||||||
if(H.mind.has_antag_datum(/datum/antagonist/creep))
|
if(H.mind.has_antag_datum(/datum/antagonist/obsessed))
|
||||||
continue
|
continue
|
||||||
if(!H.getorgan(/obj/item/organ/brain))
|
if(!H.getorgan(/obj/item/organ/brain))
|
||||||
continue
|
continue
|
||||||
H.gain_trauma(/datum/brain_trauma/special/creep)
|
H.gain_trauma(/datum/brain_trauma/special/obsessed)
|
||||||
announce_to_ghosts(H)
|
announce_to_ghosts(H)
|
||||||
break
|
break
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 113 KiB After Width: | Height: | Size: 113 KiB |
Reference in New Issue
Block a user