mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-13 08:03:43 +01:00
0cfe0594be
* Refactors slaughter, shadow, and pulse demons to basic mobs * Linters * Fix * Projectile changes * Ensures demons speak common * Update code/modules/mob/living/basic/hostile/demons/demon_powers.dm Signed-off-by: Burzah <116982774+Burzah@users.noreply.github.com> --------- Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Signed-off-by: Burzah <116982774+Burzah@users.noreply.github.com> Co-authored-by: Burzah <116982774+Burzah@users.noreply.github.com>
112 lines
3.4 KiB
Plaintext
112 lines
3.4 KiB
Plaintext
// Objective info, Based on Reverent mini Atang
|
|
/datum/objective/slaughter
|
|
needs_target = FALSE
|
|
var/targetKill = 10
|
|
|
|
/datum/objective/slaughter/New()
|
|
targetKill = rand(10,20)
|
|
explanation_text = "Devour [targetKill] mortals."
|
|
..()
|
|
|
|
/datum/objective/slaughter/check_completion()
|
|
var/kill_count = 0
|
|
for(var/datum/mind/M in get_owners())
|
|
if(!isslaughterdemon(M.current) || QDELETED(M.current))
|
|
continue
|
|
var/mob/living/basic/demon/slaughter/R = M.current
|
|
kill_count += R.devoured
|
|
if(kill_count >= targetKill)
|
|
return TRUE
|
|
return FALSE
|
|
|
|
/datum/objective/demon_fluff
|
|
name = "Spread blood"
|
|
needs_target = FALSE
|
|
|
|
/datum/objective/demon_fluff/New()
|
|
find_target()
|
|
var/targetname = "someone"
|
|
if(target && target.current)
|
|
targetname = target.current.real_name
|
|
var/list/explanation_texts = list(
|
|
"Spread blood all over the bridge.",
|
|
"Spread blood all over the brig.",
|
|
"Spread blood all over the chapel.",
|
|
"Kill or Destroy all Janitors or Sanitation bots.",
|
|
"Spare a few after striking them... make them bleed before the harvest.",
|
|
"Hunt those that try to hunt you first.",
|
|
"Hunt those that run away from you in fear",
|
|
"Show [targetname] the power of blood.",
|
|
"Drive [targetname] insane with demonic whispering."
|
|
)
|
|
// As this is a fluff objective, we don't need a target, so we want to null it out.
|
|
// We don't want the demon getting a "Time for Plan B" message if the target cryos.
|
|
target = null
|
|
explanation_text = pick(explanation_texts)
|
|
..()
|
|
|
|
/datum/objective/demon_fluff/check_completion()
|
|
return TRUE
|
|
|
|
/datum/objective/cult_slaughter
|
|
explanation_text = "Bring forth the Slaughter to the nonbelievers."
|
|
needs_target = FALSE
|
|
|
|
/datum/objective/pulse_demon/infest
|
|
name = "Hijack APCs"
|
|
/// Amount of APCs we need to hijack, can be 15, 20, or 25
|
|
var/amount = 0
|
|
|
|
/datum/objective/pulse_demon/infest/New()
|
|
. = ..()
|
|
amount = rand(3, 5) * 5
|
|
explanation_text = "Hijack [amount] APCs."
|
|
|
|
/datum/objective/pulse_demon/infest/check_completion()
|
|
if(..())
|
|
return TRUE
|
|
var/hijacked = 0
|
|
for(var/datum/mind/M in get_owners())
|
|
if(!ispulsedemon(M.current) || QDELETED(M.current))
|
|
continue
|
|
var/mob/living/basic/demon/pulse_demon/demon = M.current
|
|
hijacked += length(demon.hijacked_apcs)
|
|
return hijacked >= amount
|
|
|
|
/datum/objective/pulse_demon/drain
|
|
name = "Drain Power"
|
|
/// Amount of power we need to drain, ranges from 500 KW to 5 MW
|
|
var/amount = 0
|
|
|
|
/datum/objective/pulse_demon/drain/New()
|
|
. = ..()
|
|
amount = rand(1, 10) * 500000
|
|
explanation_text = "Drain [format_si_suffix(amount)]W of power."
|
|
|
|
/datum/objective/pulse_demon/drain/check_completion()
|
|
if(..())
|
|
return TRUE
|
|
var/drained = 0
|
|
for(var/datum/mind/M in get_owners())
|
|
if(!ispulsedemon(M.current) || QDELETED(M.current))
|
|
continue
|
|
var/mob/living/basic/demon/pulse_demon/demon = M.current
|
|
drained += demon.charge_drained
|
|
return drained >= amount
|
|
|
|
// Requires 1 APC to be hacked and not destroyed to complete
|
|
/datum/objective/pulse_demon/tamper
|
|
name = "Tamper Machinery"
|
|
explanation_text = "Cause mischief amongst the machines in rooms with APCs you've hijacked, and defend yourself from anyone trying to stop you."
|
|
|
|
/datum/objective/pulse_demon/tamper/check_completion()
|
|
if(..())
|
|
return TRUE
|
|
for(var/datum/mind/M in get_owners())
|
|
if(!ispulsedemon(M.current) || QDELETED(M.current))
|
|
continue
|
|
var/mob/living/basic/demon/pulse_demon/demon = M.current
|
|
if(!length(demon.hijacked_apcs) || !M.active || demon.stat == DEAD)
|
|
return FALSE
|
|
return TRUE
|