diff --git a/modular_meta/features/antagonists/icons/sinful_demon/160x160.dmi b/modular_meta/features/antagonists/icons/sinful_demon/160x160.dmi new file mode 100644 index 000000000000..3b91dd31f625 Binary files /dev/null and b/modular_meta/features/antagonists/icons/sinful_demon/160x160.dmi differ diff --git a/modular_meta/features/antagonists/icons/sinful_demon/jaunt.dmi b/modular_meta/features/antagonists/icons/sinful_demon/jaunt.dmi new file mode 100644 index 000000000000..a6e41e8c45ee Binary files /dev/null and b/modular_meta/features/antagonists/icons/sinful_demon/jaunt.dmi differ diff --git a/modular_meta/features/antagonists/sinful_demon/code/demon_datum.dm b/modular_meta/features/antagonists/sinful_demon/code/demon_datum.dm index 9d00ce159aa0..af490151cbf8 100644 --- a/modular_meta/features/antagonists/sinful_demon/code/demon_datum.dm +++ b/modular_meta/features/antagonists/sinful_demon/code/demon_datum.dm @@ -14,9 +14,9 @@ show_to_ghosts = TRUE hud_icon = 'modular_meta/features/antagonists/icons/sinful_demon/demon_icons.dmi' ui_name = "AntagInfoSinfulDemon" - //S/The sin a specific demon is assigned to. Defines what objectives and powers they'll receive. + //The sin a specific demon is assigned to. Defines what objectives and powers they'll receive. var/demonsin - //A/The list of choosable sins for demons. One will be assigned to a demon when spawned naturally. + //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, SIN_SLOTH) var/static/list/demon_spells = typecacheof(list( /datum/action/cooldown/spell/shapeshift/demon, @@ -34,6 +34,7 @@ /datum/action/cooldown/spell/jaunt/ethereal_jaunt/sin, /datum/action/cooldown/spell/jaunt/ethereal_jaunt/sin/wrath, /datum/action/cooldown/spell/touch/sleepy, + /datum/action/cooldown/spell/timestop/sloth, )) var/static/list/sinfuldemon_traits = list( @@ -42,12 +43,12 @@ TRAIT_NOCRITDAMAGE, ) -//N/Handles burning and hurting sinful demons while they're in the chapel. +//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) //A/demons however wont dust from the chapel so this needs to be a check to avoid spam while they're already dead + 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) @@ -102,7 +103,7 @@ log_admin("[key_name(admin)] has demonized [key_name(new_owner)].") /datum/antagonist/sinfuldemon/antag_listing_name() - return ..() + "(, demon of [demonsin])" //B/ Boris Smith, demon of Wrath + return ..() + "(, demon of [demonsin])" //Boris Smith, demon of Wrath /datum/antagonist/sinfuldemon/greet() to_chat(owner.current, span_warning("You remember your link to the infernal. You are a demon of [demonsin] released from hell to spread sin amongst the living.")) @@ -118,7 +119,7 @@ /datum/antagonist/sinfuldemon/on_gain() forge_objectives() owner.current.faction += "hell" - for(var/all_traits in sinfuldemon_traits) //M/adds demon traits + for(var/all_traits in sinfuldemon_traits) //adds demon traits ADD_TRAIT(owner.current, all_traits, SINFULDEMON_TRAIT) switch(demonsin) if(SIN_GLUTTONY) @@ -131,10 +132,8 @@ var/datum/action/cooldown/spell/jaunt/ethereal_jaunt/sin/jaunt = new(owner.current) jaunt.Grant(owner.current) - //A/ADD_TRAIT(owner.current, TRAIT_AGEUSIA, SINFULDEMON_TRAIT) // nothing disgusts you - //S/ADD_TRAIT(owner.current, TRAIT_EAT_MORE, SINFULDEMON_TRAIT) // 3x hunger rate - //S/ADD_TRAIT(owner.current, TRAIT_BOTTOMLESS_STOMACH, SINFULDEMON_TRAIT) // nutrition is capped for infinite eating - //M/ADD_TRAIT(owner.current, TRAIT_VORACIOUS, SINFULDEMON_TRAIT) // eat and drink faster & eat infinite snacks + var/datum/movespeed_modifier/fatty/fatty = new(owner.current) + fatty.New(owner.current) if(SIN_GREED) var/datum/action/cooldown/spell/shapeshift/demon/demon_form = new(owner.current) @@ -195,17 +194,17 @@ var/datum/action/cooldown/spell/touch/sleepy/mimir = new(owner.current) mimir.Grant(owner.current) - var/datum/action/cooldown/spell/touch/torment/pain_hand = new(owner.current) - pain_hand.Grant(owner.current) - var/datum/action/cooldown/spell/jaunt/ethereal_jaunt/sin/sloth/jaunt = new(owner.current) jaunt.Grant(owner.current) + var/datum/action/cooldown/spell/timestop/sloth/time_stop = new(owner.current) + time_stop.Grant(owner.current) + return ..() /datum/antagonist/sinfuldemon/on_removal() owner.current.faction -= "hell" - for(var/all_status_traits in owner.current._status_traits) //ETA/removes demon traits + for(var/all_status_traits in owner.current._status_traits) //removes demon traits REMOVE_TRAIT(owner.current, all_status_traits, SINFULDEMON_TRAIT) for(var/datum/action/cooldown/spell in owner.current.actions) QDEL_NULL(spell) diff --git a/modular_meta/features/antagonists/sinful_demon/code/powers/jaunt.dm b/modular_meta/features/antagonists/sinful_demon/code/powers/jaunt.dm index 27e0820e1211..9481825ad82a 100644 --- a/modular_meta/features/antagonists/sinful_demon/code/powers/jaunt.dm +++ b/modular_meta/features/antagonists/sinful_demon/code/powers/jaunt.dm @@ -1,13 +1,28 @@ /datum/action/cooldown/spell/jaunt/ethereal_jaunt/sin name = "Demonic Jaunt" - desc = "Briefly turn to cinder and ash, allowing you to freely pass through objects." + desc = "Briefly gib your human vessel, to freely pass through objects." background_icon_state = "bg_demon" overlay_icon_state = "bg_demon_border" sound = 'sound/effects/magic/fireball.ogg' check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_HANDS_BLOCKED //blockin hands cuz deez shitty pants demon bouta run from bloody cuffs spell_requirements = SPELL_REQUIRES_NO_ANTIMAGIC - cooldown_time = 50 SECONDS + cooldown_time = 120 SECONDS - jaunt_duration = 3.5 SECONDS - jaunt_in_type = /obj/effect/temp_visual/dir_setting/ash_shift + jaunt_type = /obj/effect/dummy/phased_mob/spell_jaunt/red + jaunt_duration = 3 SECONDS + jaunt_in_type = /obj/effect/temp_visual/dir_setting/demon_shift + jaunt_out_type = /obj/effect/temp_visual/dir_setting/demon_shift/out + +/datum/action/cooldown/spell/jaunt/ethereal_jaunt/sin/do_steam_effects() + return + +/obj/effect/temp_visual/dir_setting/demon_shift + icon_state = "gibbed-h_reverse" + icon = 'modular_meta/features/antagonists/icons/sinful_demon/jaunt.dmi' + duration = 1.2 SECONDS + +/obj/effect/temp_visual/dir_setting/demon_shift/out + name = "demon_shift" + icon = 'icons/mob/simple/mob.dmi' + icon_state = "gibbed-h" diff --git a/modular_meta/features/antagonists/sinful_demon/code/sins/gluttony.dm b/modular_meta/features/antagonists/sinful_demon/code/sins/gluttony.dm index 6ba261eb55e4..af29c367dd83 100644 --- a/modular_meta/features/antagonists/sinful_demon/code/sins/gluttony.dm +++ b/modular_meta/features/antagonists/sinful_demon/code/sins/gluttony.dm @@ -10,7 +10,7 @@ invocation_type = INVOCATION_SHOUT wall_type = /obj/effect/gluttony/timed - spell_requirements = NONE + spell_requirements = SPELL_REQUIRES_NO_ANTIMAGIC /datum/action/cooldown/spell/shapeshift/demon/gluttony //emergency get out of jail card, but better. It also eats agents 220. name = "Gluttony Demon Form" @@ -56,3 +56,7 @@ . = ..() if(timeleft) QDEL_IN(src, timeleft) + +/datum/movespeed_modifier/fatty //fat prevent user to walking fast or even fly and swim + multiplicative_slowdown = 4 + movetypes = ALL diff --git a/modular_meta/features/antagonists/sinful_demon/code/sins/greed.dm b/modular_meta/features/antagonists/sinful_demon/code/sins/greed.dm index a75812529d63..2fd52403cadc 100644 --- a/modular_meta/features/antagonists/sinful_demon/code/sins/greed.dm +++ b/modular_meta/features/antagonists/sinful_demon/code/sins/greed.dm @@ -9,9 +9,9 @@ invocation = "Just one game?" invocation_type = INVOCATION_WHISPER check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_HANDS_BLOCKED - spell_requirements = NONE + spell_requirements = SPELL_REQUIRES_NO_ANTIMAGIC - cooldown_time = 30 SECONDS + cooldown_time = 180 SECONDS summon_lifespan = 1 MINUTES summon_radius = 0 //spawns on top of us summon_type = list(/obj/structure/cursed_slot_machine/betterchance) @@ -31,7 +31,7 @@ invocation = "Power beyond measure" invocation_type = INVOCATION_WHISPER check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_HANDS_BLOCKED - spell_requirements = NONE + spell_requirements = SPELL_REQUIRES_NO_ANTIMAGIC cooldown_time = 180 SECONDS //no farming a bunch of items summon_radius = 0 //spawns on top of us diff --git a/modular_meta/features/antagonists/sinful_demon/code/sins/pride.dm b/modular_meta/features/antagonists/sinful_demon/code/sins/pride.dm index a6fd8530ae63..f18b2073ada9 100644 --- a/modular_meta/features/antagonists/sinful_demon/code/sins/pride.dm +++ b/modular_meta/features/antagonists/sinful_demon/code/sins/pride.dm @@ -9,9 +9,9 @@ invocation = "Aren't I so amazing?" invocation_type = INVOCATION_WHISPER check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_HANDS_BLOCKED - spell_requirements = NONE + spell_requirements = SPELL_REQUIRES_NO_ANTIMAGIC - cooldown_time = 30 SECONDS + cooldown_time = 60 SECONDS summon_lifespan = 1 MINUTES summon_radius = 0 summon_type = list(/obj/structure/mirror/magic/lesser) @@ -29,7 +29,7 @@ invocation_type = INVOCATION_WHISPER cooldown_time = 12 SECONDS - spell_requirements = NONE + spell_requirements = SPELL_REQUIRES_NO_ANTIMAGIC hand_path = /obj/item/melee/touch_attack/mend diff --git a/modular_meta/features/antagonists/sinful_demon/code/sins/sloth.dm b/modular_meta/features/antagonists/sinful_demon/code/sins/sloth.dm index 1bec97f6625d..7cc5ed362b80 100644 --- a/modular_meta/features/antagonists/sinful_demon/code/sins/sloth.dm +++ b/modular_meta/features/antagonists/sinful_demon/code/sins/sloth.dm @@ -5,7 +5,7 @@ /mob/living/basic/lesserdemon/sloth name = "sloth demon" real_name = "sloth demon" - desc = "*yawns* aaw.. battle? Ahhh no.. i.. go.. to... to.. sleeep.." + desc = "A large, menacing creature covered in armored red scales, and red one sleeping cap." icon_state = "lesserdaemon_sloth" icon_living = "lesserdaemon_sloth" speed = 1.5 @@ -24,11 +24,11 @@ overlay_icon_state = "bg_demon_border" school = SCHOOL_EVOCATION - invocation = "MIMIR" + invocation = "MI'MIR" invocation_type = INVOCATION_SHOUT cooldown_time = 20 SECONDS - spell_requirements = NONE + spell_requirements = SPELL_REQUIRES_NO_ANTIMAGIC hand_path = /obj/item/melee/touch_attack/sleepy @@ -55,5 +55,36 @@ /datum/action/cooldown/spell/jaunt/ethereal_jaunt/sin/sloth name = "Sloth Demonic Jaunt" - cooldown_time = 30 SECONDS + cooldown_time = 80 SECONDS jaunt_duration = 1 SECONDS + +/datum/action/cooldown/spell/timestop/sloth + name = "Stop Time" + desc = "This spell stops time for everyone INCLUDE you." + button_icon_state = "time" + background_icon_state = "bg_demon" + overlay_icon_state = "bg_demon_border" + check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_HANDS_BLOCKED + + cooldown_time = 180 SECONDS + spell_requirements = SPELL_REQUIRES_NO_ANTIMAGIC + + invocation = "CAN I HAVE TIME TO SLEEP?!!" + invocation_type = INVOCATION_SHOUT + + timestop_range = 2 + timestop_duration = 12 SECONDS + + owner_is_immune_to_all_timestop = FALSE + owner_is_immune_to_self_timestop = FALSE + +/datum/action/cooldown/spell/timestop/sloth/cast(atom/cast_on) + . = ..() + new /obj/effect/timestop/sloth(get_turf(cast_on), timestop_range, timestop_duration) + +/obj/effect/timestop/sloth + anchored = TRUE + name = "sleeping area" + desc = "Go to sleep.. Go to sleep." + icon = 'modular_meta/features/antagonists/icons/sinful_demon/160x160.dmi' + icon_state = "go_to_sleep" diff --git a/modular_meta/features/antagonists/sinful_demon/code/sins/wrath.dm b/modular_meta/features/antagonists/sinful_demon/code/sins/wrath.dm index b414104b276f..803ed9e700f3 100644 --- a/modular_meta/features/antagonists/sinful_demon/code/sins/wrath.dm +++ b/modular_meta/features/antagonists/sinful_demon/code/sins/wrath.dm @@ -29,7 +29,7 @@ sound = 'sound/effects/magic/fireball.ogg' cooldown_time = 1 MINUTES active_msg = span_notice("You ignite in a flash of hellfire!") - spell_requirements = NONE + spell_requirements = SPELL_REQUIRES_NO_ANTIMAGIC /datum/action/cooldown/spell/pointed/ignite/InterceptClickOn(mob/living/clicker, params, atom/target) . = ..() @@ -51,6 +51,6 @@ name = "Greater Demonic Jaunt" desc = "Briefly turn to cinder and ash, allowing you to freely pass through objects. Lasts slightly shorter than normal, but is more easily used." - cooldown_time = 25 SECONDS + cooldown_time = 80 SECONDS - jaunt_duration = 3 SECONDS + jaunt_duration = 2 SECONDS