Skip to content
This repository was archived by the owner on May 22, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
f45aa26
demon spells, objectives, more
Marmio64 Feb 22, 2022
6e43c18
finish up gluttony
Marmio64 Feb 23, 2022
78f3310
Update code/modules/spells/spell_types/inflict_handler.dm
Marmio64 Feb 23, 2022
45617e6
Update code/modules/events/sinfuldemon.dm
Marmio64 Feb 23, 2022
f57ca14
Update code/modules/antagonists/demon/sins/pride.dm
Marmio64 Feb 23, 2022
7025d48
Update code/modules/antagonists/demon/sins/pride.dm
Marmio64 Feb 23, 2022
254c993
Some spelling fixes from hopek
Marmio64 Feb 23, 2022
b4ef42f
Update code/modules/antagonists/demon/sins/gluttony.dm
Marmio64 Feb 23, 2022
d00fe23
is_helper and some documentation
Marmio64 Feb 24, 2022
8e9fe28
Merge branch 'sinfuldemon' of https://github.com/Marmio64/Yogstation …
Marmio64 Feb 24, 2022
c1bd1f6
objective fixes
Marmio64 Feb 24, 2022
c707add
greet sound, plus custom wrath and gluttony demon sprites
Marmio64 Feb 26, 2022
5322cb7
demon spells, objectives, more
Marmio64 Feb 22, 2022
174bdef
finish up gluttony
Marmio64 Feb 23, 2022
17b7d48
is_helper and some documentation
Marmio64 Feb 24, 2022
99cb39d
Update code/modules/spells/spell_types/inflict_handler.dm
Marmio64 Feb 23, 2022
3555fd9
Update code/modules/events/sinfuldemon.dm
Marmio64 Feb 23, 2022
3854bb0
Update code/modules/antagonists/demon/sins/pride.dm
Marmio64 Feb 23, 2022
10816c1
Update code/modules/antagonists/demon/sins/pride.dm
Marmio64 Feb 23, 2022
887c5d2
Some spelling fixes from hopek
Marmio64 Feb 23, 2022
02d04bc
Update code/modules/antagonists/demon/sins/gluttony.dm
Marmio64 Feb 23, 2022
835a264
objective fixes
Marmio64 Feb 24, 2022
3a76a13
greet sound, plus custom wrath and gluttony demon sprites
Marmio64 Feb 26, 2022
d03ac01
lesser daemon icons
Marmio64 Apr 10, 2022
9167921
Merge branch 'sinfuldemon' of https://github.com/Marmio64/Yogstation …
Marmio64 Apr 10, 2022
1a92fa8
probably fixes the antag hud
Marmio64 Apr 18, 2022
404f4b8
greed slot machine has a better chance of winning
Marmio64 Apr 18, 2022
80c5a35
hud
Marmio64 Apr 18, 2022
6a1ed8c
hud round 2
Marmio64 Apr 18, 2022
d551a94
i dont know, another try
Marmio64 Apr 18, 2022
0c35090
destroys the merge conflicts for now
Marmio64 Apr 18, 2022
699bdc3
Merge remote-tracking branch 'upstream/master' into sinfuldemon
Marmio64 Apr 18, 2022
9a4165b
centering
Marmio64 Apr 18, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions code/__DEFINES/role_preferences.dm
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@
#define ROLE_VAMPIRICACCIDENT "Vampiric Accident"
#define ROLE_BLOODSUCKERBREAKOUT "Bloodsucker Breakout"
#define ROLE_MONSTERHUNTER "Monster Hunter"
#define ROLE_SINFULDEMON "Demon of Sin"

//Missing assignment means it's not a gamemode specific role, IT'S NOT A BUG OR ERROR.
//The gamemode specific ones are just so the gamemodes can query whether a player is old enough
Expand Down Expand Up @@ -91,6 +92,7 @@ GLOBAL_LIST_INIT(special_roles, list(
ROLE_FUGITIVE,
ROLE_BLOODSUCKER = /datum/game_mode/bloodsucker,
ROLE_MONSTERHUNTER,
ROLE_SINFULDEMON
))

//Job defines for what happens when you fail to qualify for any job during job selection
Expand Down
1 change: 1 addition & 0 deletions code/__DEFINES/{yogs_defines}/antagonists.dm
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#define ANTAG_DATUM_VEIL /datum/antagonist/veil
#define ANTAG_DATUM_INFILTRATOR /datum/antagonist/infiltrator
#define ANTAG_DATUM_HIJACKEDAI /datum/antagonist/hijacked_ai
#define ANTAG_DATUM_SINFULDEMON /datum/antagonist/sinfuldemon

#define NOT_DOMINATING -1
#define MAX_LEADERS_GANG 3
Expand Down
2 changes: 2 additions & 0 deletions code/__DEFINES/{yogs_defines}/is_helpers.dm
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@

#define is_clockcult(M) (istype(M, /mob/living) && M.mind && M.mind.has_antag_datum(/datum/antagonist/clockcult))

#define is_sinfuldemon(M) (M.mind && M.mind.has_antag_datum(/datum/antagonist/sinfuldemon))

#define is_mindslaved(M) (istype(M, /mob/living) && M.mind && M.mind.has_antag_datum(/datum/antagonist/mindslave))
#define is_traitor(M) (istype(M, /mob/living) && M.mind && M.mind.has_antag_datum(/datum/antagonist/traitor) || is_mindslaved(M))
#define is_blood_brother(M) (istype(M, /mob/living) && M.mind && M.mind.has_antag_datum(/datum/antagonist/brother))
Expand Down
173 changes: 173 additions & 0 deletions code/modules/antagonists/demon/demons.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,173 @@
#define SIN_GLUTTONY "gluttony"
#define SIN_GREED "greed"
#define SIN_SLOTH "sloth"
#define SIN_WRATH "wrath"
#define SIN_ENVY "envy"
#define SIN_PRIDE "pride"

/mob/living/carbon/human/Life()
. = ..()
if(is_sinfuldemon(src))
var/datum/antagonist/sinfuldemon/demon = mind.has_antag_datum(/datum/antagonist/sinfuldemon)
demon.sinfuldemon_life()
Comment on lines +10 to +12
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

early return might be good here.

Suggested change
if(is_sinfuldemon(src))
var/datum/antagonist/sinfuldemon/demon = mind.has_antag_datum(/datum/antagonist/sinfuldemon)
demon.sinfuldemon_life()
if(!is_sinfuldemon(src))
return
var/datum/antagonist/sinfuldemon/demon = mind.has_antag_datum(/datum/antagonist/sinfuldemon)
demon.sinfuldemon_life()


/datum/antagonist/sinfuldemon
name = "Sinful Demon"
roundend_category = "demons of sin"
antagpanel_category = "Demon"
job_rank = ROLE_SINFULDEMON
show_to_ghosts = TRUE
///The sin a specific demon is assigned to. Defines what objectives and powers they'll receive.
var/demonsin
///The list of choosable sins for demons. One will be assigned to a demon when spawned naturally.
var/static/list/demonsins = list(SIN_GLUTTONY, SIN_GREED, SIN_WRATH, SIN_ENVY, SIN_PRIDE)
var/static/list/demon_spells = typecacheof(list(
/obj/effect/proc_holder/spell/targeted/shapeshift/demon,
/obj/effect/proc_holder/spell/targeted/shapeshift/demon/gluttony,
/obj/effect/proc_holder/spell/targeted/shapeshift/demon/wrath,
/obj/effect/proc_holder/spell/targeted/forcewall/gluttony,
/obj/effect/proc_holder/spell/aoe_turf/conjure/summon_greedslots,
/obj/effect/proc_holder/spell/targeted/inflict_handler/ignite,
/obj/effect/proc_holder/spell/targeted/touch/envy,
/obj/effect/proc_holder/spell/aoe_turf/conjure/summon_mirror))

/datum/antagonist/sinfuldemon/proc/sinfuldemon_life()
var/mob/living/carbon/C = owner.current
if(!C)
return
if(istype(get_area(C), /area/chapel))
demon_burn()

///Handles burning and hurting sinful demons while they're in the chapel.
/datum/antagonist/sinfuldemon/proc/demon_burn() //sinful demons are even more vulnerable to the chapel than vampires, but can turn into their true form to negate this.
var/mob/living/L = owner.current
if(!L)
return
if(L.stat != DEAD) //demons however wont dust from the chapel so this needs to be a check to avoid spam while they're already dead
if(prob(50) && L.health >= 50)
switch(L.health)
if(85 to 100)
L.visible_message(span_warning("[L]'s skin begins to heat up and darken!"), span_danger("Your flesh begins to sear..."))
if(60 to 85)
L.visible_message(span_warning("[L]'s skin begins to melt apart!"), span_danger("Your skin is melting!"), "You hear sizzling.")
L.adjustFireLoss(5)
else if(L.health < 60)
if(!L.on_fire)
L.visible_message(span_warning("[L] lights up in a holy blaze!"), span_danger("Your skin catches fire!"))
L.emote("scream")
else
L.visible_message(span_warning("[L] continues to burn!"), span_danger("You continue to burn!"))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

won't this just keep spamming while they're alive and in the chapel?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes, it is also what happens to vamps. It can fuck you up pretty fast so I thought to keep it.

L.adjust_fire_stacks(5)
L.IgniteMob()
return
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
return


/datum/antagonist/sinfuldemon/New()
. = ..()
demonsin = pick(demonsins)

/datum/antagonist/sinfuldemon/proc/forge_objectives()
var/datum/objective/demon/O
switch(demonsin)//the 5 most interesting of the 8 sins. Left out sloth because it sounds boring, couldn't think of a good enough objective/power for acedia, and lust for obvious reasons.
if(SIN_GLUTTONY)
O = new /datum/objective/demon/gluttony
if(SIN_GREED)
O = new /datum/objective/demon/greed
if(SIN_WRATH)
O = new /datum/objective/demon/wrath
if(prob(50))
var/N = pick(/datum/objective/assassinate, /datum/objective/assassinate/cloned, /datum/objective/assassinate/once)
var/datum/objective/assassinate/kill_objective = new N
kill_objective.owner = owner
kill_objective.find_target()
objectives += kill_objective
if(SIN_ENVY)
O = new /datum/objective/demon/envy
if(prob(50))
var/datum/objective/escape/escape_with_identity/identity_theft = new
identity_theft.owner = owner
identity_theft.find_target()
identity_theft.update_explanation_text()
objectives += identity_theft
if(SIN_PRIDE)
O = new /datum/objective/demon/pride
objectives += O

/datum/antagonist/sinfuldemon/can_be_owned(datum/mind/new_owner)
. = ..()
return . && (ishuman(new_owner.current) || iscyborg(new_owner.current))

/datum/antagonist/sinfuldemon/admin_add(datum/mind/new_owner,mob/admin)
var/choices = demonsins + "Random"
var/chosen_sin = input(admin,"What kind ?","Sin kind") as null|anything in choices
if(!chosen_sin)
return
if(chosen_sin in demonsins)
demonsin = chosen_sin
new_owner.add_antag_datum(src)
message_admins("[key_name_admin(admin)] has demonized [key_name_admin(new_owner)].")
log_admin("[key_name(admin)] has demonized [key_name(new_owner)].")

/datum/antagonist/sinfuldemon/antag_listing_name()
return ..() + "(, demon of [demonsin])" // Boris Smith, demon of Wrath
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
return ..() + "(, demon of [demonsin])" // Boris Smith, demon of Wrath
return ..() + "(, demon of [demonsin])" // Boris Smith, demon of Wrath

Wouldn't this just end up being Boris Smith (, demon of Wrath)?
antag_listing_name only returns the realname


/datum/antagonist/sinfuldemon/greet()
to_chat(owner.current, span_warning("<b>You remember your link to the infernal. You are a demon of [demonsin] released from hell to spread sin amongst the living.</b>"))
to_chat(owner.current, span_warning("<b>However, your infernal form is not without weaknesses.</b>"))
to_chat(owner.current, "You are incredibly vulnerable to holy artifacts and influence.")
to_chat(owner.current, "While blessed with the unholy ability to transform into your true form, this form is extremely obvious and vulnerable to holy weapons.")
to_chat(owner.current, "[span_warning("Do your best to complete your objectives without unnessecary death, unless you are a wrathful demon.")]<br>")
owner.announce_objectives()
SEND_SOUND(owner.current, sound('sound/magic/ethereal_exit.ogg'))
.=..()

/datum/antagonist/sinfuldemon/on_gain()
forge_objectives()
owner.special_role = "sinfuldemon"
owner.current.faction += "hell"
if(owner.assigned_role == "Clown" && ishuman(owner.current))
var/mob/living/carbon/human/S = owner.current
to_chat(S, span_notice("Your infernal nature has allowed you to overcome your clownishness."))
S.dna.remove_mutation(CLOWNMUT)
switch(demonsin)
if(SIN_GLUTTONY)
owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/shapeshift/demon/gluttony)
owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/forcewall/gluttony)
if(SIN_GREED)
owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/shapeshift/demon)
owner.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/conjure/summon_greedslots)
if(SIN_WRATH)
owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/shapeshift/demon/wrath)
owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/inflict_handler/ignite)
if(SIN_ENVY)
owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/shapeshift/demon)
owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/touch/envy)
if(SIN_PRIDE)
owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/shapeshift/demon)
owner.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/conjure/summon_mirror)
.=..()

/datum/antagonist/sinfuldemon/on_removal()
owner.special_role = null
owner.current.faction -= "hell"
remove_spells()
to_chat(owner.current, span_userdanger("Your infernal link has been severed! You are no longer a demon!"))
.=..()

/datum/antagonist/sinfuldemon/proc/remove_spells()
for(var/X in owner.spell_list)
var/obj/effect/proc_holder/spell/S = X
if(is_type_in_typecache(S, demon_spells))
owner.RemoveSpell(S)

/datum/antagonist/sinfuldemon/roundend_report()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

no greentext? sad

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For what? The flavor objectives that autocomplete give you an auto greentext but I haven't tested the assassinate or steal identity ones, though they should also work.

var/list/parts = list()
parts += printplayer(owner)
parts += printobjectives(objectives)
return parts.Join("<br>")

#undef SIN_ENVY
#undef SIN_GLUTTONY
#undef SIN_GREED
#undef SIN_PRIDE
#undef SIN_SLOTH
#undef SIN_WRATH
68 changes: 68 additions & 0 deletions code/modules/antagonists/demon/general_powers.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
/obj/effect/proc_holder/spell/targeted/shapeshift/demon //emergency get out of jail card.
name = "Lesser Demon Form"
desc = "Take on your true demon form. This form is strong but very obvious, and especially weak to holy influence. \
Also, note that damage taken in this form can transform into your normal body. Heal by attacking living creatures before transforming back if gravely wounded!"
invocation = "COWER, MORTALS!!"
shapeshift_type = /mob/living/simple_animal/lesserdemon
action_icon = 'icons/mob/actions/actions_minor_antag.dmi'
action_icon_state = "daemontransform"
action_background_icon_state = "bg_demon"

/mob/living/simple_animal/lesserdemon
name = "demon"
real_name = "demon"
desc = "A large, menacing creature covered in armored red scales."
speak_emote = list("cackles")
emote_hear = list("cackles","screeches")
response_help = "thinks better of touching"
response_disarm = "flails at"
response_harm = "punches"
icon = 'icons/mob/mob.dmi'
icon_state = "lesserdaemon"
icon_living = "lesserdaemon"
mob_biotypes = list(MOB_ORGANIC, MOB_HUMANOID)
speed = 0.33
a_intent = INTENT_HARM
stop_automated_movement = 1
status_flags = CANPUSH
attack_sound = 'sound/magic/demon_attack1.ogg'
deathsound = 'sound/magic/demon_dies.ogg'
deathmessage = "wails in anger and fear as it collapses in defeat!"
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 250 //Weak to cold
maxbodytemp = INFINITY
faction = list("hell")
attacktext = "wildly tears into"
maxHealth = 200
health = 200
environment_smash = ENVIRONMENT_SMASH_STRUCTURES
obj_damage = 40
melee_damage_lower = 24
melee_damage_upper = 24
wound_bonus = -15
see_in_dark = 8
lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE
loot = (/obj/effect/decal/cleanable/blood)
del_on_death = 1
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
del_on_death = 1
del_on_death = TRUE


/mob/living/simple_animal/lesserdemon/attackby(obj/item/W, mob/living/user, params)
. = ..()
if(istype(W, /obj/item/nullrod))
visible_message(span_warning("[src] screams in unholy pain from the blow!"), \
span_cult("As \the [W] hits you, you feel holy power blast through your form, tearing it apart!"))
adjustBruteLoss(22) //22 extra damage from the nullrod while in your true form. On average this means 40 damage is taken now.

/mob/living/simple_animal/lesserdemon/UnarmedAttack(mob/living/L, proximity)//10 hp healed from landing a hit.
if(isliving(L))
if(L.stat != DEAD && !L.anti_magic_check(TRUE, TRUE)) //demons do not gain succor from the dead or holy
adjustHealth(-maxHealth * 0.05)
return ..()

/mob/living/simple_animal/lesserdemon/Life()
. = ..()
if(!src)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
if(!src)
if(!.)

return
if(istype(get_area(src.loc), /area/chapel)) //being a non-carbon will not save you!
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
if(istype(get_area(src.loc), /area/chapel)) //being a non-carbon will not save you!
if(istype(get_area(src), /area/chapel)) //being a non-carbon will not save you!

if(src.stat != DEAD) //being dead, however, will save you
src.visible_message(span_warning("[src] begins to melt apart!"), span_danger("Your very soul melts from the holy room!"), "You hear sizzling.")
adjustHealth(20) //20 damage every ~2 seconds. About 20 seconds for a full HP demon to melt apart in the chapel.
17 changes: 17 additions & 0 deletions code/modules/antagonists/demon/objectives.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
/datum/objective/demon
completed = TRUE

/datum/objective/demon/gluttony
explanation_text = "Devour as much food as possible."

/datum/objective/demon/greed
explanation_text = "Acquire as much wealth as possible."

/datum/objective/demon/wrath
explanation_text = "Inflict as much pain as possible."

/datum/objective/demon/envy
explanation_text = "Do not allow anyone to become more popular than you."

/datum/objective/demon/pride
explanation_text = "Become as popular, powerful, and influential to as many people possible."
40 changes: 40 additions & 0 deletions code/modules/antagonists/demon/sins/envy.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
/obj/effect/proc_holder/spell/targeted/touch/envy
name = "Vanity Steal"
desc = "Engulfs your arm in a jealous might, allowing you to steal the look of the first human-like struck with it. Note, the form change is not reversible."
hand_path = /obj/item/melee/touch_attack/envy
school = "evocation"
charge_max = 150
clothes_req = FALSE
invocation = "ETERNAL FLAMES"
invocation_type = "whisper"
action_icon = 'icons/mob/actions/actions_changeling.dmi'
action_icon_state = "transform"
action_background_icon_state = "bg_demon"

/obj/item/melee/touch_attack/envy
name = "Envious Hand"
desc = "A writhing, burning aura of jealousy, ready to be unleashed."
icon_state = "flagellation"
item_state = "hivemind"
catchphrase = "I'M BETTER THAN YOU!!"

/obj/item/melee/touch_attack/envy/afterattack(atom/target, mob/living/carbon/human/user, proximity_flag, click_parameters)
if(!proximity_flag)
return
var/mob/living/M = target
if(M.anti_magic_check())
to_chat(user, span_warning("[M] resists your unholy jealousy!"))
to_chat(M, span_warning("A creeping feeling of jealousy dances around your mind before being suddenly dispelled."))
..()
return
playsound(user, 'sound/magic/demon_attack1.ogg', 75, TRUE)
if(ishuman(target))
var/mob/living/carbon/human/H = target
if(user.real_name != H.dna.real_name)
user.real_name = H.dna.real_name
H.dna.transfer_identity(user, transfer_SE=1)
user.updateappearance(mutcolor_update=1)
user.domutcheck()
user.visible_message(span_warning("[user]'s appearance shifts into [H]'s!"), \
span_boldannounce("[H.p_they(TRUE)] think[H.p_s()] [H.p_theyre()] <i>sooo</i> much better than you. Not anymore, [H.p_they()] won't."))
return ..()
56 changes: 56 additions & 0 deletions code/modules/antagonists/demon/sins/gluttony.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
/obj/effect/proc_holder/spell/targeted/forcewall/gluttony
name = "Gluttonous Wall"
desc = "Create a magical barrier that only allows fat people to pass through."
school = "transmutation"
charge_max = 150
clothes_req = FALSE
invocation = "INDULGE"
invocation_type = "shout"
sound = 'sound/magic/forcewall.ogg'
action_icon = 'icons/mob/actions/actions_minor_antag.dmi'
action_icon_state = "blob"
action_background_icon_state = "bg_demon"
range = -1
include_user = TRUE
cooldown_min = 50 //12 deciseconds reduction per rank
wall_type = /obj/effect/gluttony/timed

/obj/effect/proc_holder/spell/targeted/shapeshift/demon/gluttony //emergency get out of jail card, but better. It also eats everything.
name = "Gluttony Demon Form"
desc = "Take on your true demon form. This form is strong but very obvious and especially weak to holy influence. \
Also, note that damage taken in this form can transform into your normal body. Heal by attacking living creatures before transforming back if gravely wounded! \
Your unique form as a demon of gluttony also allows you to eat corpses to heal yourself."
shapeshift_type = /mob/living/simple_animal/lesserdemon/gluttony

/mob/living/simple_animal/lesserdemon/gluttony //capable of devouring corpses for health
name = "gluttonous demon"
real_name = "gluttonous demon"
icon_state = "lesserdaemon_gluttony"
icon_living = "lesserdaemon_gluttony"

/mob/living/simple_animal/lesserdemon/gluttony/UnarmedAttack(mob/living/L)
if(isliving(L)) //Eat Corpses to regen health
if(L.stat == DEAD)
if(do_after(src, 3 SECONDS, target = L))
devour(L)
return
return ..()

/mob/living/simple_animal/lesserdemon/gluttony/proc/devour(mob/living/L)
if(!L)
return FALSE
visible_message(
span_danger("[src] devours [L]!"),
span_userdanger("You feast on [L], restoring your health!"))
adjustBruteLoss(-50)
L.gib()
return TRUE

/obj/effect/gluttony/timed
///Time in deciseconds before it deletes itself.
var/timeleft = 150
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
var/timeleft = 150
var/timeleft = 15 SECONDS


/obj/effect/gluttony/timed/Initialize()
. = ..()
if(timeleft)
QDEL_IN(src, timeleft)
Loading