mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-20 20:45:28 +01: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:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user