mirror of
https://github.com/yogstation13/Yogstation.git
synced 2025-02-26 09:04:50 +00:00
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:
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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++
|
||||
|
||||
Reference in New Issue
Block a user