Big Heretic revamp (finally) (#17670)

* heresy

* Update eldritch_book.dm

* heat resistant lizards

* 5 tile range only!

* delete the shield dummy!

* Update eldritch_items.dm

* new sounds

* Update eldritch_antag.dm

* Update eldritch_items.dm

* sanity

* Update code/modules/antagonists/eldritch_cult/eldritch_book.dm

Co-authored-by: Ling <lingbleed@gmail.com>

---------

Co-authored-by: Ling <lingbleed@gmail.com>
This commit is contained in:
ynot01
2023-02-09 10:41:17 -05:00
committed by GitHub
parent 2264d7e6bc
commit 26ad93fd58
12 changed files with 70 additions and 30 deletions

View File

@@ -984,8 +984,9 @@
/datum/status_effect/eldritch/ash/on_effect()
if(iscarbon(owner))
var/mob/living/carbon/carbon_owner = owner
carbon_owner.adjustStaminaLoss(10 * repetitions)
carbon_owner.adjustFireLoss(5 * repetitions)
carbon_owner.adjust_fire_stacks(2)
carbon_owner.IgniteMob()
for(var/mob/living/carbon/victim in range(1,carbon_owner))
if(IS_HERETIC(victim) || victim == carbon_owner)
continue

View File

@@ -54,7 +54,7 @@
// This makes the image 64x64.
icon.Crop(-15, -15, 48, 48)
var/obj/item/melee/sickly_blade/blade = new
var/obj/item/gun/magic/hook/sickly_blade/blade = new
icon.Blend(icon(blade.lefthand_file, blade.item_state), ICON_OVERLAY)
qdel(blade)

View File

@@ -9,9 +9,11 @@
var/mob/living/last_user
///Where we cannot create the rune?
var/static/list/blacklisted_turfs = typecacheof(list(/turf/closed,/turf/open/space,/turf/open/lava))
var/obj/effect/eldritch/big/last_rune
/obj/item/forbidden_book/Destroy()
last_user = null
last_rune = null
. = ..()
@@ -58,7 +60,7 @@
to_chat(user, span_danger("You have already studied this influence!"))
return
to_chat(user, span_danger("You start to study [RS]..."))
if(do_after(user, 10 SECONDS, RS))
if(do_after(user, 4 SECONDS, RS))
var/datum/antagonist/heretic/H = user.mind?.has_antag_datum(/datum/antagonist/heretic)
H?.charge += 1
to_chat(user, span_notice("You finish your study of [RS]!"))
@@ -74,9 +76,10 @@
var/A = get_turf(target)
to_chat(user, span_danger("You start drawing a rune..."))
if(do_after(user, 30 SECONDS, A))
new /obj/effect/eldritch/big(A)
if(do_after(user, 8 SECONDS, A))
if(!QDELETED(last_rune))
qdel(last_rune)
last_rune = new /obj/effect/eldritch/big(A)
///Removes runes from the selected turf
/obj/item/forbidden_book/proc/remove_rune(atom/target,mob/user)

View File

@@ -60,7 +60,7 @@
icon_icon = 'icons/mob/actions/actions_ecult.dmi'
check_flags = AB_CHECK_RESTRAINED|AB_CHECK_STUN
var/mob/living/carbon/human/holder
var/obj/item/melee/sickly_blade/sword
var/obj/item/gun/magic/hook/sickly_blade/sword
/datum/action/innate/heretic_shatter/Grant(mob/user, obj/object)
sword = object
@@ -75,6 +75,9 @@
return FALSE
/datum/action/innate/heretic_shatter/Activate()
to_chat(holder, span_warning("You raise \the [sword] in careful preparation to smash it..."))
if(!do_after(holder, 2 SECONDS, sword))
return
var/turf/safe_turf = find_safe_turf(zlevels = sword.z, extended_safety_checks = TRUE)
holder.visible_message("<span class ='boldwarning'>Light bends around [holder] as they smash [sword], and in a moment they are gone.</span>", span_notice("You feel yourself begin to descend as [sword] breaks, before the darkness suddenly receeds and you find yourself somewhere else."))
playsound(holder, "shatter", 70, pressure_affected = FALSE)
@@ -83,7 +86,7 @@
do_teleport(holder,safe_turf,forceMove = TRUE)
qdel(sword)
/obj/item/melee/sickly_blade
/obj/item/gun/magic/hook/sickly_blade
name = "Sickly blade"
desc = "A sickly green crescent blade, decorated with an ornamental eye. You feel like you're being watched..."
icon = 'icons/obj/eldritch.dmi'
@@ -102,20 +105,47 @@
hitsound = 'sound/weapons/bladeslice.ogg'
attack_verb = list("attacks", "slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "rends")
var/datum/action/innate/heretic_shatter/linked_action
/// Hook stuff
item_flags = NEEDS_PERMIT // doesn't include NOBLUDGEON for obvious reasons
recharge_rate = 3 // seconds
ammo_type = /obj/item/ammo_casing/magic/hook/sickly_blade
fire_sound = 'sound/effects/snap.ogg'
/obj/item/melee/sickly_blade/Initialize()
/obj/item/gun/magic/hook/sickly_blade/shoot_with_empty_chamber(mob/living/user as mob|obj)
to_chat(user, span_warning("The [name] grumbles quietly. It is not yet ready to fire again!"))
/obj/item/ammo_casing/magic/hook/sickly_blade
projectile_type = /obj/item/projectile/hook/sickly_blade
/obj/item/projectile/hook/sickly_blade
damage = 0
knockdown = 0
immobilize = 2 // there's no escape
range = 5 // hey now cowboy
armour_penetration = 0 // no piercing shields
hitsound = 'sound/effects/gravhit.ogg'
/obj/item/projectile/hook/sickly_blade/on_hit(atom/target, blocked)
. = ..()
if(iscarbon(target) && blocked != 100)
var/mob/living/carbon/C = target
for(var/obj/item/shield/riot/R in C.get_all_gear())
R.shatter() // Shield :b:roke
qdel(R)
/obj/item/gun/magic/hook/sickly_blade/Initialize()
. = ..()
linked_action = new(src)
/obj/item/melee/sickly_blade/pickup(mob/user)
/obj/item/gun/magic/hook/sickly_blade/pickup(mob/user)
. = ..()
linked_action.Grant(user, src)
/obj/item/melee/sickly_blade/dropped(mob/user, silent)
/obj/item/gun/magic/hook/sickly_blade/dropped(mob/user, silent)
. = ..()
linked_action.Remove(user, src)
/obj/item/melee/sickly_blade/attack(mob/living/M, mob/living/user)
/obj/item/gun/magic/hook/sickly_blade/attack(mob/living/M, mob/living/user)
if(!(IS_HERETIC(user) || IS_HERETIC_MONSTER(user)))
to_chat(user,span_danger("You feel a pulse of some alien intellect lash out at your mind!"))
var/mob/living/carbon/human/human_user = user
@@ -123,7 +153,7 @@
return FALSE
return ..()
/obj/item/melee/sickly_blade/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
/obj/item/gun/magic/hook/sickly_blade/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
. = ..()
var/datum/antagonist/heretic/cultie = user.mind.has_antag_datum(/datum/antagonist/heretic)
if(!cultie || !proximity_flag || target == user)
@@ -133,19 +163,19 @@
var/datum/eldritch_knowledge/eldritch_knowledge_datum = knowledge[X]
eldritch_knowledge_datum.on_eldritch_blade(target,user,proximity_flag,click_parameters)
/obj/item/melee/sickly_blade/rust
/obj/item/gun/magic/hook/sickly_blade/rust
name = "Rusted Blade"
desc = "This crescent blade is decrepit, wasting to dust. Yet still it bites, catching flesh with jagged, rotten teeth."
icon_state = "rust_blade"
item_state = "rust_blade"
/obj/item/melee/sickly_blade/ash
/obj/item/gun/magic/hook/sickly_blade/ash
name = "Ashen Blade"
desc = "Molten and unwrought, a hunk of metal warped to cinders and slag. Unmade, it aspires to be more than it is, and shears soot-filled wounds with a blunt edge."
icon_state = "ash_blade"
item_state = "ash_blade"
/obj/item/melee/sickly_blade/flesh
/obj/item/gun/magic/hook/sickly_blade/flesh
name = "Flesh Blade"
desc = "A crescent blade born from a fleshwarped creature. Keenly aware, it seeks to spread to others the excruitations it has endured from dread origins."
icon_state = "flesh_blade"
@@ -191,7 +221,7 @@
item_state = "eldritch_armor"
flags_inv = HIDESHOES|HIDEJUMPSUIT
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS
allowed = list(/obj/item/melee/sickly_blade, /obj/item/forbidden_book)
allowed = list(/obj/item/gun/magic/hook/sickly_blade, /obj/item/forbidden_book)
hoodtype = /obj/item/clothing/head/hooded/cult_hoodie/eldritch
// slightly better than normal cult robes
armor = list(MELEE = 50, BULLET = 50, LASER = 50,ENERGY = 50, BOMB = 35, BIO = 20, RAD = 0, FIRE = 20, ACID = 20)

View File

@@ -1,6 +1,6 @@
/datum/eldritch_knowledge/base_ash
name = "Nightwatcher's Secret"
desc = "Opens up the path of ash to you. Allows you to transmute a pile of ash with a knife or its derivatives into an ashen blade. Additionally empowers your mansus grasp to throw away enemies."
desc = "Opens up the path of ash to you. Allows you to transmute a pile of ash with a knife or its derivatives into an ashen blade. Additionally empowers your mansus grasp to throw away enemies and makes you resistant to fire."
gain_text = "The City Guard knows their watch. If you ask them past dusk they may tell you tales of the Ashy Lantern."
banned_knowledge = list(/datum/eldritch_knowledge/base_rust,/datum/eldritch_knowledge/base_flesh,/datum/eldritch_knowledge/rust_mark,/datum/eldritch_knowledge/flesh_mark,/datum/eldritch_knowledge/rust_blade_upgrade,/datum/eldritch_knowledge/flesh_blade_upgrade,/datum/eldritch_knowledge/rust_final,/datum/eldritch_knowledge/flesh_final)
unlocked_transmutations = list(/datum/eldritch_transmutation/ash_knife)
@@ -10,7 +10,10 @@
/datum/eldritch_knowledge/base_ash/on_gain(mob/user)
. = ..()
var/obj/realknife = new /obj/item/melee/sickly_blade/ash
if(ishuman(user))
var/mob/living/carbon/human/H = user
H.physiology.heat_mod *= 0.6
var/obj/realknife = new /obj/item/gun/magic/hook/sickly_blade/ash
user.put_in_hands(realknife)
/datum/eldritch_knowledge/base_ash/on_mansus_grasp(atom/target, mob/user, proximity_flag, click_parameters)
@@ -59,7 +62,7 @@
/datum/eldritch_knowledge/ash_mark
name = "Mark of Ash"
gain_text = "Spread the famine."
desc = "Your mansus grasp now applies ash mark on hit. Use your sickly blade to detonate the mark. The Mark of Ash causes stamina damage, and fire loss, and spreads to a nearby carbon. Damage decreases with how many times the mark has spread."
desc = "Your mansus grasp now applies ash mark on hit. Use your sickly blade to detonate the mark. The Mark of Ash causes fire loss, attempts to ignite them, and spreads to a nearby carbon. Damage decreases with how many times the mark has spread."
cost = 2
banned_knowledge = list(/datum/eldritch_knowledge/rust_mark,/datum/eldritch_knowledge/flesh_mark)
route = PATH_ASH
@@ -110,7 +113,7 @@
. = ..()
if(iscarbon(target))
var/mob/living/carbon/C = target
C.adjust_fire_stacks(1)
C.adjust_fire_stacks(2)
C.IgniteMob()
/datum/eldritch_knowledge/flame_birth

View File

@@ -12,7 +12,7 @@
/datum/eldritch_knowledge/base_flesh/on_gain(mob/user)
. = ..()
var/obj/realknife = new /obj/item/melee/sickly_blade/flesh
var/obj/realknife = new /obj/item/gun/magic/hook/sickly_blade/flesh
user.put_in_hands(realknife)
/datum/eldritch_knowledge/base_flesh/on_mansus_grasp(atom/target, mob/user, proximity_flag, click_parameters)

View File

@@ -10,7 +10,7 @@
/datum/eldritch_knowledge/base_rust/on_gain(mob/user)
. = ..()
var/obj/realknife = new /obj/item/melee/sickly_blade/rust
var/obj/realknife = new /obj/item/gun/magic/hook/sickly_blade/rust
user.put_in_hands(realknife)
/datum/eldritch_knowledge/base_rust/on_mansus_grasp(atom/target, mob/user, proximity_flag, click_parameters)

View File

@@ -1,7 +1,7 @@
/datum/eldritch_transmutation/ash_knife
name = "Ashen Blade"
required_atoms = list(/obj/item/kitchen/knife,/obj/effect/decal/cleanable/ash)
result_atoms = list(/obj/item/melee/sickly_blade/ash)
result_atoms = list(/obj/item/gun/magic/hook/sickly_blade/ash)
required_shit_list = "A pile of ash and a knife."
/datum/eldritch_transmutation/ashen_eyes

View File

@@ -1,7 +1,7 @@
/datum/eldritch_transmutation/flesh_blade
name = "Flesh Blade"
required_atoms = list(/obj/item/kitchen/knife,/obj/effect/decal/cleanable/blood)
result_atoms = list(/obj/item/melee/sickly_blade/flesh)
result_atoms = list(/obj/item/gun/magic/hook/sickly_blade/flesh)
required_shit_list = "A pool of blood and a knife."
/datum/eldritch_transmutation/voiceless_dead

View File

@@ -1,7 +1,7 @@
/datum/eldritch_transmutation/rust_blade
name = "Rusty Blade"
required_atoms = list(/obj/item/kitchen/knife,/obj/item/trash)
result_atoms = list(/obj/item/melee/sickly_blade/rust)
result_atoms = list(/obj/item/gun/magic/hook/sickly_blade/rust)
required_shit_list = "A piece of trash and a knife."
/datum/eldritch_transmutation/armor

View File

@@ -493,9 +493,9 @@ GLOBAL_LIST_EMPTY(aide_list)
..()
//TODO: root the firer until the chain returns
/obj/item/projectile/hook/on_hit(atom/target)
/obj/item/projectile/hook/on_hit(atom/target, blocked)
. = ..()
if(ismovable(target))
if(ismovable(target) && blocked != 100)
var/atom/movable/A = target
if(A.anchored)
return

View File

@@ -12,7 +12,7 @@
var/checks_antimagic = TRUE
var/max_charges = 6
var/charges = 0
var/recharge_rate = 8
var/recharge_rate = 8 // Seconds per charge
var/charge_timer = 0
var/can_charge = TRUE
var/ammo_type
@@ -68,8 +68,11 @@
/obj/item/gun/magic/process(delta_time)
if(charges >= max_charges)
charge_timer = 0
return 0
charge_timer += delta_time
if(charge_timer < recharge_rate || charges >= max_charges)
if(charge_timer < recharge_rate)
return 0
charge_timer = 0
charges++