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:
tralezab
2019-02-08 08:26:41 -08:00
committed by moo
parent 7acd3a4f47
commit 46e3894bb2
11 changed files with 77 additions and 86 deletions
+41 -40
View File
@@ -1,14 +1,14 @@
/datum/antagonist/creep
name = "Creep"
/datum/antagonist/obsessed
name = "Obsessed"
show_in_antagpanel = TRUE
antagpanel_category = "Other"
job_rank = ROLE_CREEP
job_rank = ROLE_OBSESSED
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.
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
if(!istype(C))
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].")
log_admin("[key_name(admin)] made [key_name(new_owner)] into [name].")
//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)
to_chat(owner, "<span class='boldannounce'>You are the Creep!</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>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, "<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, "<span class='boldannounce'>You are the Obsessed!</span>")
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>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, "<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()
/datum/antagonist/creep/Destroy()
/datum/antagonist/obsessed/Destroy()
if(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
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
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/datum/objective/assassinate/creep/kill = new
var/datum/objective/assassinate/obsessed/kill = new
kill.owner = owner
kill.target = obsessionmind
var/datum/quirk/family_heirloom/family_heirloom
@@ -94,10 +95,10 @@
for(var/datum/objective/O in objectives)
O.update_explanation_text()
/datum/antagonist/creep/roundend_report_header()
return "<span class='header'>Someone became a creep!</span><br>"
/datum/antagonist/obsessed/roundend_report_header()
return "<span class='header'>Someone became obsessed!</span><br>"
/datum/antagonist/creep/roundend_report()
/datum/antagonist/obsessed/roundend_report()
var/list/report = list()
if(!owner)
@@ -131,14 +132,14 @@
///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)
explanation_text = "Murder [target.name], the [!target_role_type ? target.assigned_role : target.special_role]."
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"
/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)
if(!H.mind)
continue
if(!SSjob.GetJob(H.mind.assigned_role) || H == oldmind.current || H.mind.has_antag_datum(/datum/antagonist/creep))
continue //the jealousy target has to have a job, and not be the obsession or 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 obsessed.
all_coworkers += H.mind
//this won't be called often thankfully.
if(H.mind.assigned_role in GLOB.security_positions)
@@ -201,16 +202,16 @@
target = pick(all_coworkers)
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"
var/timer = 1800 //5 minutes
/datum/objective/spendtime/update_explanation_text()
if(timer == initial(timer))//just so admins can mess with it
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)
creeper.trauma.attachedcreepobj = src
creeper.trauma.attachedobsessedobj = src
explanation_text = "Spend [DisplayTimeText(timer)] around [target.name] while they're alive."
else
explanation_text = "Free Objective"
@@ -227,14 +228,14 @@
..()
if(!hugs_needed)//just so admins can mess with it
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)
explanation_text = "Hug [target.name] [hugs_needed] times while they're alive."
else
explanation_text = "Free Objective"
/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)
return TRUE//free objective
return creeper.trauma.obsession_hug_count >= hugs_needed
@@ -273,12 +274,12 @@
else
explanation_text = "Free Objective"
/datum/antagonist/creep/proc/update_creep_icons_added(var/mob/living/carbon/human/creep)
var/datum/atom_hud/antag/creephud = GLOB.huds[ANTAG_HUD_CREEP]
creephud.join_hud(creep)
set_antag_hud(creep, "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_OBSESSED]
creephud.join_hud(obsessed)
set_antag_hud(obsessed, "obsessed")
/datum/antagonist/creep/proc/update_creep_icons_removed(var/mob/living/carbon/human/creep)
var/datum/atom_hud/antag/creephud = GLOB.huds[ANTAG_HUD_CREEP]
creephud.leave_hud(creep)
set_antag_hud(creep, null)
/datum/antagonist/obsessed/proc/update_obsession_icons_removed(var/mob/living/carbon/human/obsessed)
var/datum/atom_hud/antag/creephud = GLOB.huds[ANTAG_HUD_OBSESSED]
creephud.leave_hud(obsessed)
set_antag_hud(obsessed, null)
+8 -8
View File
@@ -1,24 +1,24 @@
/datum/round_event_control/creep
name = "Creep Awakening"
typepath = /datum/round_event/creep
/datum/round_event_control/obsessed
name = "Obsession Awakening"
typepath = /datum/round_event/obsessed
max_occurrences = 1
min_players = 20
/datum/round_event/creep
/datum/round_event/obsessed
fakeable = FALSE
/datum/round_event/creep/start()
/datum/round_event/obsessed/start()
for(var/mob/living/carbon/human/H in shuffle(GLOB.player_list))
if(!H.client)
continue
if(H.stat == DEAD)
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
if(H.mind.has_antag_datum(/datum/antagonist/creep))
if(H.mind.has_antag_datum(/datum/antagonist/obsessed))
continue
if(!H.getorgan(/obj/item/organ/brain))
continue
H.gain_trauma(/datum/brain_trauma/special/creep)
H.gain_trauma(/datum/brain_trauma/special/obsessed)
announce_to_ghosts(H)
break