Even Further Heretic Adjustments: New minor things, Bug fixes, Heretic path adjustments and movement adjustments! (#20843)
* a whole lot of shit yessir * gun stuff crazy * haha fuck guns * my brain bursts it hurts * so much shit im done * fuck forgot this god damn low memory mode * removes backslashes really linter * oops typos
@@ -109,6 +109,7 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204
|
||||
#define PASSMACHINES (1<<7)
|
||||
#define PASSCOMPUTER (1<<8)
|
||||
#define PASSSTRUCTURE (1<<9)
|
||||
#define PASSDOORS (1<<10)
|
||||
|
||||
//Movement Types
|
||||
#define GROUND (1<<0)
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
var/last_trigger = 0
|
||||
var/time_between_triggers = 1 MINUTES //takes a minute to recharge
|
||||
var/charges = INFINITY
|
||||
var/antimagic_flags = MAGIC_RESISTANCE
|
||||
|
||||
var/list/static/ignore_typecache
|
||||
var/list/mob/immune_minds = list()
|
||||
@@ -140,3 +141,23 @@
|
||||
/obj/structure/trap/ward/Initialize(mapload)
|
||||
. = ..()
|
||||
QDEL_IN(src, time_between_triggers)
|
||||
|
||||
/obj/structure/trap/proc/on_entered(datum/source, atom/movable/victim)
|
||||
SIGNAL_HANDLER
|
||||
if(last_trigger + time_between_triggers > world.time)
|
||||
return
|
||||
// Don't want the traps triggered by sparks, ghosts or projectiles.
|
||||
if(is_type_in_typecache(victim, ignore_typecache))
|
||||
return
|
||||
if(ismob(victim))
|
||||
var/mob/mob_victim = victim
|
||||
if(mob_victim.mind in immune_minds)
|
||||
return
|
||||
if(mob_victim.can_block_magic(antimagic_flags))
|
||||
flare()
|
||||
return
|
||||
if(charges <= 0)
|
||||
return
|
||||
flare()
|
||||
if(isliving(victim))
|
||||
trap_effect(victim)
|
||||
|
||||
@@ -37,16 +37,18 @@
|
||||
/datum/eldritch_knowledge/madness_mask,
|
||||
/datum/eldritch_knowledge/flesh_ghoul,
|
||||
/datum/eldritch_knowledge/rust_regen,
|
||||
/datum/eldritch_knowledge/spell/mental_obfuscation,
|
||||
/datum/eldritch_knowledge/spell/void_phase,
|
||||
/datum/eldritch_knowledge/spell/eldritchbolt,
|
||||
/datum/eldritch_knowledge/rune_carver,
|
||||
/datum/eldritch_knowledge/blade_dance,
|
||||
/datum/eldritch_knowledge/spell/cosmic_runes,
|
||||
/datum/eldritch_knowledge/key_ring,
|
||||
/datum/eldritch_knowledge/armor,
|
||||
/datum/eldritch_knowledge/spell/rust_construction,
|
||||
/datum/eldritch_knowledge/void_cloak,
|
||||
/datum/eldritch_knowledge/ashen_eyes,
|
||||
/datum/eldritch_knowledge/essence,
|
||||
/datum/eldritch_knowledge/eldritch_eye),
|
||||
/datum/eldritch_knowledge/eldritch_eye,
|
||||
/datum/eldritch_knowledge/fire_shark),
|
||||
TIER_MARK = list(
|
||||
/datum/eldritch_knowledge/ash_mark,
|
||||
/datum/eldritch_knowledge/flesh_mark,
|
||||
@@ -65,8 +67,8 @@
|
||||
/datum/eldritch_knowledge/duel_stance,
|
||||
/datum/eldritch_knowledge/spell/star_blast,
|
||||
/datum/eldritch_knowledge/spell/burglar_finesse,
|
||||
/datum/eldritch_knowledge/spell/realignment,
|
||||
/datum/eldritch_knowledge/spell/blood_siphon,
|
||||
/datum/eldritch_knowledge/spell/eldritchbolt,
|
||||
/datum/eldritch_knowledge/spell/void_blast),
|
||||
TIER_BLADE = list(
|
||||
/datum/eldritch_knowledge/ash_blade_upgrade,
|
||||
@@ -86,6 +88,7 @@
|
||||
/datum/eldritch_knowledge/spell/furious_steel,
|
||||
/datum/eldritch_knowledge/spell/cosmic_expansion,
|
||||
/datum/eldritch_knowledge/spell/freedom_forever,
|
||||
/datum/eldritch_knowledge/lionhunter_rifle,
|
||||
/datum/eldritch_knowledge/ashy,
|
||||
/datum/eldritch_knowledge/rusty,
|
||||
/datum/eldritch_knowledge/spell/cleave,
|
||||
|
||||
156
code/modules/antagonists/eldritch_cult/eldritch_gun.dm
Normal file
@@ -0,0 +1,156 @@
|
||||
/// The max range we can zoom in on people from.
|
||||
#define MAX_LIONHUNTER_RANGE 30
|
||||
|
||||
// The Lionhunter, a gun for heretics
|
||||
// The ammo it uses takes time to "charge" before firing,
|
||||
// releasing a homing, very damaging projectile
|
||||
/obj/item/gun/ballistic/rifle/boltaction/lionhunter
|
||||
name = "\improper Lionhunter's Rifle"
|
||||
desc = "An antique looking rifle that looks immaculate despite being clearly very old."
|
||||
slot_flags = ITEM_SLOT_BACK
|
||||
icon = 'icons/obj/eldritch.dmi'
|
||||
icon_state = "lionhunter"
|
||||
item_state = "lionhunter"
|
||||
mag_type = /obj/item/ammo_box/magazine/internal/boltaction/lionhunter
|
||||
fire_sound = "sound/weapons/sniper_shot.ogg"
|
||||
zoomable = TRUE
|
||||
zoom_amt = 10 //Long range, enough to see in front of you, but no tiles behind you.
|
||||
zoom_out_amt = 5
|
||||
|
||||
/obj/item/ammo_box/magazine/internal/boltaction/lionhunter
|
||||
name = "lionhunter rifle internal magazine"
|
||||
ammo_type = /obj/item/ammo_casing/strilka310/lionhunter
|
||||
caliber = "CALIBER_STRILKA310"
|
||||
max_ammo = 3
|
||||
multiload = 1
|
||||
|
||||
/obj/item/ammo_casing/strilka310/lionhunter
|
||||
name = "strilka310 bullet casing"
|
||||
desc = "A .310 bullet casing."
|
||||
icon_state = "310-casing"
|
||||
caliber = "CALIBER_STRILKA310"
|
||||
projectile_type = /obj/projectile/bullet/strilka310/lionhunter
|
||||
/// Whether we're currently aiming this casing at something
|
||||
var/currently_aiming = FALSE
|
||||
/// How many seconds it takes to aim per tile of distance between the target
|
||||
var/seconds_per_distance = 0.5 SECONDS
|
||||
/// The minimum distance required to gain a damage bonus from aiming
|
||||
var/min_distance = 4
|
||||
|
||||
/obj/item/ammo_casing/strilka310/lionhunter/fire_casing(atom/target, mob/living/user, params, distro, quiet, zone_override, spread, atom/fired_from)
|
||||
if(!BB)
|
||||
return
|
||||
if(!check_fire(target, user))
|
||||
return
|
||||
|
||||
return ..()
|
||||
|
||||
/// Checks if we can successfully fire our projectile.
|
||||
/obj/item/ammo_casing/strilka310/lionhunter/proc/check_fire(atom/target, mob/living/user)
|
||||
// In case someone puts this in turrets or something wacky, just fire like normal
|
||||
if(!iscarbon(user) || !istype(loc, /obj/item/gun/ballistic/rifle/boltaction/lionhunter))
|
||||
return TRUE
|
||||
|
||||
if(currently_aiming)
|
||||
user.balloon_alert(user, "already aiming!")
|
||||
return FALSE
|
||||
|
||||
var/distance = get_dist(user, target)
|
||||
if(target.z != user.z || distance > MAX_LIONHUNTER_RANGE)
|
||||
return FALSE
|
||||
|
||||
var/fire_time = min(distance * seconds_per_distance, 10 SECONDS)
|
||||
|
||||
if(distance <= min_distance || !isliving(target))
|
||||
return TRUE
|
||||
|
||||
user.balloon_alert(user, "taking aim...")
|
||||
user.playsound_local(get_turf(user), 'sound/weapons/chunkyrack.ogg', 100, TRUE)
|
||||
|
||||
var/image/reticle = image(
|
||||
icon = 'icons/mob/actions/actions_items.dmi',
|
||||
icon_state = "sniper_zoom",
|
||||
layer = ABOVE_MOB_LAYER,
|
||||
loc = target,
|
||||
)
|
||||
reticle.alpha = 0
|
||||
|
||||
var/list/mob/viewers = viewers(target)
|
||||
// The shooter might be out of view, but they should be included
|
||||
viewers |= user
|
||||
|
||||
for(var/mob/viewer as anything in viewers)
|
||||
viewer.client?.images |= reticle
|
||||
|
||||
// Animate the fade in
|
||||
animate(reticle, fire_time * 0.5, alpha = 255, transform = turn(reticle.transform, 180))
|
||||
animate(reticle, fire_time * 0.5, transform = turn(reticle.transform, 180))
|
||||
|
||||
currently_aiming = TRUE
|
||||
. = do_after(user, fire_time, target, IGNORE_TARGET_LOC_CHANGE, extra_checks = CALLBACK(src, PROC_REF(check_fire_callback), target, user))
|
||||
currently_aiming = FALSE
|
||||
|
||||
animate(reticle, 0.5 SECONDS, alpha = 0)
|
||||
for(var/mob/viewer as anything in viewers)
|
||||
viewer.client?.images -= reticle
|
||||
|
||||
if(!.)
|
||||
user.balloon_alert(user, "interrupted!")
|
||||
|
||||
return .
|
||||
|
||||
/// Callback for the do_after within the check_fire proc to see if something will prevent us from firing while aiming
|
||||
/obj/item/ammo_casing/strilka310/lionhunter/proc/check_fire_callback(mob/living/target, mob/living/user)
|
||||
if(!isturf(target.loc))
|
||||
return FALSE
|
||||
|
||||
return TRUE
|
||||
|
||||
/obj/item/ammo_casing/strilka310/lionhunter/ready_proj(atom/target, mob/living/user, quiet, zone_override, atom/fired_from)
|
||||
if(!BB)
|
||||
return
|
||||
|
||||
var/distance = get_dist(user, target)
|
||||
// If we're close range, or the target's not a living, OR for some reason a non-carbon is firing the gun
|
||||
// The projectile is dry-fired, and gains no buffs
|
||||
// BUT, if we're at a decent range and the target's a living mob,
|
||||
// the projectile's been channel fired. It has full effects and homes in.
|
||||
if(distance > min_distance && isliving(target) && iscarbon(user))
|
||||
BB.damage *= 2
|
||||
BB.stamina *= 2
|
||||
BB.knockdown = 0.5 SECONDS
|
||||
BB.stutter = 6 SECONDS
|
||||
BB.projectile_phasing = PASSTABLE | PASSGLASS | PASSGRILLE | PASSCLOSEDTURF | PASSMACHINES | PASSSTRUCTURE | PASSDOORS
|
||||
|
||||
BB.homing = TRUE
|
||||
BB.homing_turn_speed = 80
|
||||
BB.set_homing_target(target)
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/projectile/bullet/strilka310/lionhunter
|
||||
name = "hunter's .310 bullet"
|
||||
// These stats are only applied if the weapon is fired fully aimed
|
||||
// If fired without aiming or at someone too close, it will do much less
|
||||
damage = 30
|
||||
stamina = 30
|
||||
penetration_type = 2
|
||||
penetrating = TRUE
|
||||
|
||||
// Extra ammunition can be made with a heretic ritual.
|
||||
/obj/item/ammo_box/strilka310/lionhunter
|
||||
name = "stripper clip (.310 hunter)"
|
||||
desc = "A stripper clip of mysterious, atypical ammo. It doesn't fit into normal ballistic rifles."
|
||||
icon_state = "310_strip"
|
||||
ammo_type = /obj/item/ammo_casing/strilka310/lionhunter
|
||||
max_ammo = 3
|
||||
multiple_sprites = AMMO_BOX_PER_BULLET
|
||||
|
||||
/obj/effect/temp_visual/bullet_target
|
||||
icon = 'icons/mob/actions/actions_items.dmi'
|
||||
icon_state = "sniper_zoom"
|
||||
layer = BELOW_MOB_LAYER
|
||||
plane = GAME_PLANE
|
||||
light_range = 2
|
||||
|
||||
#undef MAX_LIONHUNTER_RANGE
|
||||
@@ -121,5 +121,5 @@
|
||||
desc = "As your journey begins, you'll need a way to shift between realms easily, this movement ability will allow you to travel a small range and assist in escaping emergencies"
|
||||
gain_text = "Your body's connection to this realm feels weakened, for better or worse."
|
||||
cost = 0
|
||||
spell_to_add = /datum/action/cooldown/spell/jaunt/ethereal_jaunt/ash
|
||||
spell_to_add = /datum/action/cooldown/spell/jaunt/ethereal_jaunt/basic
|
||||
route = "Start"
|
||||
|
||||
245
code/modules/antagonists/eldritch_cult/eldritch_rune_knife.dm
Normal file
@@ -0,0 +1,245 @@
|
||||
// The rune carver, a heretic knife that can draw rune traps.
|
||||
/obj/item/melee/rune_carver
|
||||
name = "carving knife"
|
||||
desc = "A small knife made of cold steel, pure and perfect. Its sharpness can carve into titanium itself - \
|
||||
but only few can evoke the dangers that lurk beneath reality."
|
||||
icon = 'icons/obj/eldritch.dmi'
|
||||
icon_state = "rune_carver"
|
||||
flags_1 = CONDUCT_1
|
||||
sharpness = SHARP_EDGED
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
wound_bonus = 20
|
||||
force = 10
|
||||
throwforce = 20
|
||||
hitsound = 'sound/weapons/bladeslice.ogg'
|
||||
attack_verb = list("attacks", "slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "rends")
|
||||
actions_types = list(/datum/action/item_action/rune_shatter)
|
||||
embedding = list(
|
||||
ignore_throwspeed_threshold = TRUE,
|
||||
embed_chance = 75,
|
||||
jostle_chance = 2,
|
||||
jostle_pain_mult = 5,
|
||||
pain_stam_pct = 0.4,
|
||||
pain_mult = 3,
|
||||
rip_time = 15,
|
||||
)
|
||||
|
||||
/// Whether we're currently drawing a rune
|
||||
var/drawing = FALSE
|
||||
/// Max amount of runes that can be drawn
|
||||
var/max_rune_amt = 3
|
||||
/// A list of weakrefs to all of ourc urrent runes
|
||||
var/list/datum/weakref/current_runes = list()
|
||||
/// Turfs that you cannot draw carvings on
|
||||
var/static/list/blacklisted_turfs = typecacheof(list(/turf/open/space, /turf/open/openspace, /turf/open/lava))
|
||||
|
||||
/obj/item/melee/rune_carver/examine(mob/user)
|
||||
. = ..()
|
||||
if(!IS_HERETIC_OR_MONSTER(user) && !isobserver(user))
|
||||
return
|
||||
|
||||
. += span_notice("<b>[length(current_runes)] / [max_rune_amt]</b> total carvings have been drawn.")
|
||||
. += span_info("The following runes can be carved:")
|
||||
for(var/obj/structure/trap/eldritch/trap as anything in subtypesof(/obj/structure/trap/eldritch))
|
||||
var/potion_string = span_info("\tThe " + initial(trap.name) + " - " + initial(trap.carver_tip))
|
||||
. += potion_string
|
||||
|
||||
/obj/item/melee/rune_carver/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
|
||||
. = ..()
|
||||
if(!proximity_flag)
|
||||
return
|
||||
|
||||
if(!IS_HERETIC_OR_MONSTER(user))
|
||||
return
|
||||
|
||||
if(!isopenturf(target))
|
||||
return
|
||||
|
||||
if(is_type_in_typecache(target, blacklisted_turfs))
|
||||
return
|
||||
|
||||
INVOKE_ASYNC(src, PROC_REF(try_carve_rune), target, user)
|
||||
|
||||
/*
|
||||
* Begin trying to carve a rune. Go through a few checks, then call do_carve_rune if successful.
|
||||
*/
|
||||
/obj/item/melee/rune_carver/proc/try_carve_rune(turf/open/target_turf, mob/user)
|
||||
if(drawing)
|
||||
target_turf.balloon_alert(user, "already carving!")
|
||||
return
|
||||
|
||||
if(locate(/obj/structure/trap/eldritch) in range(1, target_turf))
|
||||
target_turf.balloon_alert(user, "to close to another carving!")
|
||||
return
|
||||
|
||||
for(var/datum/weakref/rune_ref as anything in current_runes)
|
||||
if(!rune_ref?.resolve())
|
||||
current_runes -= rune_ref
|
||||
|
||||
if(length(current_runes) >= max_rune_amt)
|
||||
target_turf.balloon_alert(user, "too many carvings!")
|
||||
return
|
||||
|
||||
drawing = TRUE
|
||||
do_carve_rune(target_turf, user)
|
||||
drawing = FALSE
|
||||
|
||||
/*
|
||||
* The actual proc that handles selecting the rune to draw and creating it.
|
||||
*/
|
||||
/obj/item/melee/rune_carver/proc/do_carve_rune(turf/open/target_turf, mob/user)
|
||||
// Assoc list of [name] to [image] for the radial (to show tooltips)
|
||||
var/static/list/choices = list()
|
||||
// Assoc list of [name] to [path] for after the radial
|
||||
var/static/list/names_to_path = list()
|
||||
if(!choices.len || !names_to_path.len)
|
||||
for(var/obj/structure/trap/eldritch/trap as anything in subtypesof(/obj/structure/trap/eldritch))
|
||||
names_to_path[initial(trap.name)] = trap
|
||||
choices[initial(trap.name)] = image(icon = initial(trap.icon), icon_state = initial(trap.icon_state))
|
||||
|
||||
var/picked_choice = show_radial_menu(
|
||||
user,
|
||||
target_turf,
|
||||
choices,
|
||||
require_near = TRUE,
|
||||
tooltips = TRUE,
|
||||
)
|
||||
|
||||
if(isnull(picked_choice))
|
||||
return
|
||||
|
||||
var/to_make = names_to_path[picked_choice]
|
||||
if(!ispath(to_make, /obj/structure/trap/eldritch))
|
||||
CRASH("[type] attempted to create a rune of incorrect type! (got: [to_make])")
|
||||
|
||||
target_turf.balloon_alert(user, "carving [picked_choice]...")
|
||||
user.playsound_local(target_turf, 'sound/items/sheath.ogg', 50, TRUE)
|
||||
if(!do_after(user, 5 SECONDS, target = target_turf))
|
||||
target_turf.balloon_alert(user, "interrupted!")
|
||||
return
|
||||
|
||||
target_turf.balloon_alert(user, "[picked_choice] carved")
|
||||
var/obj/structure/trap/eldritch/new_rune = new to_make(target_turf, user)
|
||||
current_runes += WEAKREF(new_rune)
|
||||
|
||||
/datum/action/item_action/rune_shatter
|
||||
name = "Rune Break"
|
||||
desc = "Destroys all runes carved by this blade."
|
||||
background_icon_state = "bg_heretic"
|
||||
overlay_icon_state = "bg_heretic_border"
|
||||
button_icon_state = "rune_break"
|
||||
button_icon = 'icons/mob/actions/actions_ecult.dmi'
|
||||
|
||||
/datum/action/item_action/rune_shatter/New(Target)
|
||||
. = ..()
|
||||
if(!istype(Target, /obj/item/melee/rune_carver))
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
/datum/action/item_action/rune_shatter/Grant(mob/granted)
|
||||
if(!IS_HERETIC_OR_MONSTER(granted))
|
||||
return
|
||||
|
||||
return ..()
|
||||
|
||||
/datum/action/item_action/rune_shatter/IsAvailable(feedback = FALSE)
|
||||
. = ..()
|
||||
if(!.)
|
||||
return
|
||||
if(!IS_HERETIC_OR_MONSTER(owner))
|
||||
return FALSE
|
||||
var/obj/item/melee/rune_carver/target_sword = target
|
||||
if(!length(target_sword.current_runes))
|
||||
return FALSE
|
||||
|
||||
/datum/action/item_action/rune_shatter/Trigger(trigger_flags)
|
||||
. = ..()
|
||||
if(!.)
|
||||
return
|
||||
|
||||
owner.playsound_local(get_turf(owner), 'sound/magic/blind.ogg', 50, TRUE)
|
||||
var/obj/item/melee/rune_carver/target_sword = target
|
||||
QDEL_LIST(target_sword.current_runes)
|
||||
target_sword.SpinAnimation(5, 1)
|
||||
return TRUE
|
||||
|
||||
// The actual rune traps the knife draws.
|
||||
/obj/structure/trap/eldritch
|
||||
name = "elder carving"
|
||||
desc = "Collection of unknown symbols, they remind you of days long gone..."
|
||||
icon = 'icons/obj/hand_of_god_structures.dmi'
|
||||
/// A tip displayed to heretics who examine the rune carver. Explains what the rune does.
|
||||
var/carver_tip
|
||||
/// Reference to trap owner mob
|
||||
var/datum/weakref/owner
|
||||
|
||||
/obj/structure/trap/eldritch/Initialize(mapload, new_owner)
|
||||
. = ..()
|
||||
if(new_owner)
|
||||
owner = WEAKREF(new_owner)
|
||||
|
||||
/obj/structure/trap/eldritch/on_entered(datum/source, atom/movable/entering_atom)
|
||||
if(!isliving(entering_atom))
|
||||
return ..()
|
||||
var/mob/living/living_mob = entering_atom
|
||||
if(WEAKREF(living_mob) == owner)
|
||||
return
|
||||
if(IS_HERETIC_OR_MONSTER(living_mob))
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/structure/trap/eldritch/attacked_by(obj/item/weapon, mob/living/user)
|
||||
if(istype(weapon, /obj/item/melee/rune_carver) || istype(weapon, /obj/item/nullrod))
|
||||
loc.balloon_alert(user, "carving dispelled")
|
||||
playsound(src, 'sound/items/sheath.ogg', 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE, ignore_walls = FALSE)
|
||||
qdel(src)
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/structure/trap/eldritch/alert
|
||||
name = "alert carving"
|
||||
icon_state = "alert_rune"
|
||||
alpha = 10
|
||||
time_between_triggers = 5 SECONDS
|
||||
carver_tip = "A nearly invisible rune that, when stepped on, alerts the carver who triggered it and where."
|
||||
|
||||
/obj/structure/trap/eldritch/alert/trap_effect(mob/living/victim)
|
||||
var/mob/living/real_owner = owner?.resolve()
|
||||
if(real_owner)
|
||||
to_chat(real_owner, span_userdanger("[victim.real_name] has stepped foot on the alert rune in [get_area(src)]!"))
|
||||
real_owner.playsound_local(get_turf(real_owner), 'sound/magic/curse.ogg', 50, TRUE)
|
||||
|
||||
/obj/structure/trap/eldritch/tentacle
|
||||
name = "grasping carving"
|
||||
icon_state = "tentacle_rune"
|
||||
time_between_triggers = 45 SECONDS
|
||||
charges = 1
|
||||
carver_tip = "When stepped on, causes heavy damage leg damage and stuns the victim for 5 seconds. Has 1 charge."
|
||||
|
||||
/obj/structure/trap/eldritch/tentacle/trap_effect(mob/living/victim)
|
||||
if(!iscarbon(victim))
|
||||
return
|
||||
var/mob/living/carbon/carbon_victim = victim
|
||||
carbon_victim.Paralyze(5 SECONDS)
|
||||
carbon_victim.apply_damage(20, BRUTE, BODY_ZONE_R_LEG)
|
||||
carbon_victim.apply_damage(20, BRUTE, BODY_ZONE_L_LEG)
|
||||
playsound(src, 'sound/magic/demon_attack1.ogg', 75, TRUE)
|
||||
|
||||
/obj/structure/trap/eldritch/mad
|
||||
name = "mad carving"
|
||||
icon_state = "madness_rune"
|
||||
time_between_triggers = 20 SECONDS
|
||||
charges = 2
|
||||
carver_tip = "When stepped on, causes heavy stamina damage, and a variety of ailments to the victim. Has 2 charges."
|
||||
|
||||
/obj/structure/trap/eldritch/mad/trap_effect(mob/living/victim)
|
||||
if(!iscarbon(victim))
|
||||
return
|
||||
var/mob/living/carbon/carbon_victim = victim
|
||||
carbon_victim.adjustStaminaLoss(80)
|
||||
carbon_victim.adjust_silence(20 SECONDS)
|
||||
carbon_victim.adjust_stutter(1 MINUTES)
|
||||
carbon_victim.adjust_confusion(5 SECONDS)
|
||||
carbon_victim.set_jitter_if_lower(20 SECONDS)
|
||||
carbon_victim.set_dizzy_if_lower(40 SECONDS)
|
||||
playsound(src, 'sound/magic/blind.ogg', 75, TRUE)
|
||||
@@ -23,6 +23,7 @@
|
||||
/datum/eldritch_knowledge/void_blade_upgrade,
|
||||
/datum/eldritch_knowledge/blade_blade_upgrade,
|
||||
/datum/eldritch_knowledge/cosmic_blade_upgrade,
|
||||
/datum/eldritch_knowledge/knock_blade_upgrade,
|
||||
/datum/eldritch_knowledge/rust_final,
|
||||
/datum/eldritch_knowledge/flesh_final,
|
||||
/datum/eldritch_knowledge/mind_final,
|
||||
@@ -39,9 +40,17 @@
|
||||
. = ..()
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
H.physiology.heat_mod *= 0.6
|
||||
H.physiology.heat_mod *= 0.4
|
||||
H.physiology.burn_mod *= 0.8
|
||||
var/obj/realknife = new /obj/item/melee/sickly_blade/ash
|
||||
user.put_in_hands(realknife)
|
||||
///use is if you want to swap out a spell they get upon becoming their certain type of heretic
|
||||
var/datum/action/cooldown/spell/basic_jaunt = locate(/datum/action/cooldown/spell/jaunt/ethereal_jaunt/basic) in user.actions
|
||||
if(basic_jaunt)
|
||||
basic_jaunt.Remove(user)
|
||||
var/datum/action/cooldown/spell/jaunt/ethereal_jaunt/ash/ash_jaunt = new(user)
|
||||
ash_jaunt.Grant(user)
|
||||
|
||||
RegisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK, PROC_REF(on_mansus_grasp))
|
||||
|
||||
/datum/eldritch_knowledge/base_ash/on_lose(mob/user)
|
||||
|
||||
@@ -54,6 +54,15 @@
|
||||
. = ..()
|
||||
var/obj/realknife = new /obj/item/melee/sickly_blade/dark
|
||||
user.put_in_hands(realknife)
|
||||
|
||||
///use is if you want to swap out a spell they get upon becoming their certain type of heretic
|
||||
var/datum/action/cooldown/spell/basic_jaunt = locate(/datum/action/cooldown/spell/jaunt/ethereal_jaunt/basic) in user.actions
|
||||
if(basic_jaunt)
|
||||
basic_jaunt.Remove(user)
|
||||
var/datum/action/cooldown/spell/jaunt/ethereal_jaunt/blade/blade_jaunt = new(user)
|
||||
blade_jaunt.Grant(user)
|
||||
|
||||
ADD_TRAIT(user, TRAIT_SILENT_FOOTSTEPS, INNATE_TRAIT)
|
||||
RegisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK, PROC_REF(on_mansus_grasp))
|
||||
|
||||
/datum/eldritch_knowledge/base_blade/on_lose(mob/user)
|
||||
@@ -62,7 +71,6 @@
|
||||
/datum/eldritch_knowledge/base_blade/proc/on_mansus_grasp(mob/living/source, mob/living/target)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
|
||||
if(!isliving(target))
|
||||
return COMPONENT_BLOCK_HAND_USE
|
||||
// Let's see if source is behind target
|
||||
@@ -225,6 +233,16 @@
|
||||
route = PATH_BLADE
|
||||
tier = TIER_2
|
||||
|
||||
/datum/eldritch_knowledge/spell/realignment
|
||||
name = "T2 - Realignment"
|
||||
desc = "Grants you Realignment a spell that wil realign your body rapidly for a short period. \
|
||||
During this process, you will rapidly regenerate stamina and quickly recover from stuns, however, you will be unable to attack. \
|
||||
This spell can be cast in rapid succession, but doing so will increase the cooldown."
|
||||
gain_text = "In the flurry of death, he found peace within himself. Despite insurmountable odds, he forged on."
|
||||
cost = 1
|
||||
spell_to_add = /datum/action/cooldown/spell/realignment
|
||||
tier = TIER_2
|
||||
|
||||
/datum/eldritch_knowledge/duel_stance/on_gain(mob/user, datum/antagonist/heretic/our_heretic)
|
||||
. = ..()
|
||||
ADD_TRAIT(user, TRAIT_NODISMEMBER, type)
|
||||
|
||||
@@ -41,6 +41,16 @@
|
||||
. = ..()
|
||||
var/obj/realknife = new /obj/item/melee/sickly_blade/cosmic
|
||||
user.put_in_hands(realknife)
|
||||
|
||||
///use is if you want to swap out a spell they get upon becoming their certain type of heretic
|
||||
var/datum/action/cooldown/spell/basic_jaunt = locate(/datum/action/cooldown/spell/jaunt/ethereal_jaunt/basic) in user.actions
|
||||
if(basic_jaunt)
|
||||
basic_jaunt.Remove(user)
|
||||
var/datum/action/cooldown/spell/jaunt/ethereal_jaunt/cosmic/cosmic_jaunt = new(user)
|
||||
cosmic_jaunt.Grant(user)
|
||||
|
||||
ADD_TRAIT(user, TRAIT_RESISTLOWPRESSURE, INNATE_TRAIT)
|
||||
ADD_TRAIT(user, TRAIT_RESISTCOLD, INNATE_TRAIT)
|
||||
RegisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK, PROC_REF(on_mansus_grasp))
|
||||
|
||||
/datum/eldritch_knowledge/base_cosmic/on_lose(mob/user)
|
||||
|
||||
@@ -43,6 +43,14 @@
|
||||
var/obj/realknife = new /obj/item/melee/sickly_blade/flesh
|
||||
user.put_in_hands(realknife)
|
||||
RegisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK, PROC_REF(on_mansus_grasp))
|
||||
ADD_TRAIT(user, TRAIT_LIMBATTACHMENT, INNATE_TRAIT)
|
||||
ADD_TRAIT(user, TRAIT_NOLIMBDISABLE, INNATE_TRAIT)
|
||||
|
||||
var/datum/action/cooldown/spell/basic_jaunt = locate(/datum/action/cooldown/spell/jaunt/ethereal_jaunt/basic) in user.actions
|
||||
if(basic_jaunt)
|
||||
basic_jaunt.Remove(user)
|
||||
var/datum/action/cooldown/spell/jaunt/ethereal_jaunt/flesh/flesh_jaunt = new(user)
|
||||
flesh_jaunt.Grant(user)
|
||||
|
||||
/datum/eldritch_knowledge/base_flesh/on_lose(mob/user, datum/antagonist/heretic/our_heretic)
|
||||
UnregisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK)
|
||||
@@ -117,6 +125,14 @@
|
||||
route = PATH_FLESH
|
||||
tier = TIER_1
|
||||
|
||||
/datum/eldritch_knowledge/fire_shark
|
||||
name = "T1- Heated Ritual"
|
||||
gain_text = "It's stronger to hunt in a pack, rather than alone. Animals of all kind know this, and now, so do you."
|
||||
desc = "Allows you to summon a Fire Shark by transmuting a pair of eyes, a pile of ash, and a sheet of plasma. Fire sharks leave behind a cloud of plasma upon death, and injects Phlogiston into the targets it bites."
|
||||
cost = 1
|
||||
unlocked_transmutations = list(/datum/eldritch_transmutation/summon/fire_shark)
|
||||
tier = TIER_1
|
||||
|
||||
/datum/eldritch_knowledge/flesh_mark
|
||||
name = "Grasp Mark - Lover's Exsanguination"
|
||||
gain_text = "She revels and laughs when life begins to flow. Her kiss rips and feasts on flesh alike. This imitates her touch."
|
||||
|
||||
@@ -45,6 +45,13 @@
|
||||
var/obj/realknife = new /obj/item/melee/sickly_blade/knock
|
||||
user.put_in_hands(realknife)
|
||||
RegisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK, PROC_REF(on_mansus_grasp))
|
||||
ADD_TRAIT(user, TRAIT_QUICKEST_CARRY, INNATE_TRAIT)
|
||||
|
||||
var/datum/action/cooldown/spell/basic_jaunt = locate(/datum/action/cooldown/spell/jaunt/ethereal_jaunt/basic) in user.actions
|
||||
if(basic_jaunt)
|
||||
basic_jaunt.Remove(user)
|
||||
var/datum/action/cooldown/spell/jaunt/ethereal_jaunt/knock/knock_jaunt = new(user)
|
||||
knock_jaunt.Grant(user)
|
||||
|
||||
/datum/eldritch_knowledge/base_ash/on_lose(mob/user)
|
||||
UnregisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK)
|
||||
@@ -158,13 +165,13 @@
|
||||
return
|
||||
|
||||
if(A.hasPower())
|
||||
user.visible_message(span_warning("[user] jams [src] into the airlock and starts prying it open!"), span_warning("We start forcing the airlock open."), //yogs modified description
|
||||
user.visible_message(span_warning("[user] jams their blade into the airlock and starts prying it open!"), span_warning("We start forcing the airlock open."), //yogs modified description
|
||||
span_italics("You hear a metal screeching sound."))
|
||||
playsound(A, 'sound/machines/airlock_alien_prying.ogg', 100, 1)
|
||||
if(!do_after(user, 6 SECONDS, A))
|
||||
return
|
||||
//user.say("Heeeeeeeeeerrre's Johnny!")
|
||||
user.visible_message(span_warning("[user] forces the airlock to open with [user.p_their()] [src]!"), span_warning("We force the airlock to open."), //yogs modified description
|
||||
user.visible_message(span_warning("[user] forces the airlock to open with their blade!"), span_warning("We force the airlock to open."), //yogs modified description
|
||||
span_italics("You hear a metal screeching sound."))
|
||||
A.open(2)
|
||||
|
||||
|
||||
@@ -45,6 +45,12 @@
|
||||
mansus_touch.hand_path = /obj/item/melee/touch_attack/mansus_fist/mind //longer range version
|
||||
RegisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK, PROC_REF(on_mansus_grasp))
|
||||
|
||||
var/datum/action/cooldown/spell/basic_jaunt = locate(/datum/action/cooldown/spell/jaunt/ethereal_jaunt/basic) in user.actions
|
||||
if(basic_jaunt)
|
||||
basic_jaunt.Remove(user)
|
||||
var/datum/action/cooldown/spell/jaunt/ethereal_jaunt/mind/mind_jaunt = new(user)
|
||||
mind_jaunt.Grant(user)
|
||||
|
||||
/datum/eldritch_knowledge/base_mind/on_lose(mob/user)
|
||||
UnregisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK)
|
||||
|
||||
@@ -57,14 +63,23 @@
|
||||
human_target.blur_eyes(1 SECONDS)
|
||||
human_target.Knockdown(2 SECONDS)
|
||||
|
||||
/datum/eldritch_knowledge/spell/mental_obfuscation
|
||||
name = "T1 - Mental Obfuscation"
|
||||
gain_text = "A mind is such an easy thing to trick, nothing more than a lump of meat ready to be moulded by your hands."
|
||||
desc = "Allows you to teleport a short distance to a targeted destination."
|
||||
// /datum/eldritch_knowledge/spell/mental_obfuscation
|
||||
// name = "T1 - Mental Obfuscation"
|
||||
// gain_text = "A mind is such an easy thing to trick, nothing more than a lump of meat ready to be moulded by your hands."
|
||||
// desc = "Allows you to teleport a short distance to a targeted destination."
|
||||
// cost = 1
|
||||
// spell_to_add = /datum/action/cooldown/spell/pointed/phase_jump/obfuscation
|
||||
// banned_knowledge = list(
|
||||
// /datum/eldritch_knowledge/spell/void_phase)
|
||||
// route = PATH_MIND
|
||||
// tier = TIER_1
|
||||
|
||||
/datum/eldritch_knowledge/spell/eldritchbolt
|
||||
name = "T1 - Eldritch Bolt"
|
||||
gain_text = "Remain wary of the frailty of men. Their wills are weak, minds young. Were it not for fear, death would go unlamented. Seek the old blood. Let us pray, let us wish... to partake in communion."
|
||||
desc = "A strong single target spell, shoot a target with raw energy from another dimension."
|
||||
cost = 1
|
||||
spell_to_add = /datum/action/cooldown/spell/pointed/phase_jump/obfuscation
|
||||
banned_knowledge = list(
|
||||
/datum/eldritch_knowledge/spell/void_phase)
|
||||
spell_to_add = /datum/action/cooldown/spell/pointed/projectile/lightningbolt/eldritchbolt
|
||||
route = PATH_MIND
|
||||
tier = TIER_1
|
||||
|
||||
@@ -162,14 +177,6 @@
|
||||
. = ..()
|
||||
ADD_TRAIT(user, TRAIT_REDUCED_DAMAGE_SLOWDOWN, type)
|
||||
|
||||
/datum/eldritch_knowledge/spell/eldritchbolt
|
||||
name = "T2 - Eldritch Bolt"
|
||||
gain_text = "Remain wary of the frailty of men. Their wills are weak, minds young. Were it not for fear, death would go unlamented. Seek the old blood. Let us pray, let us wish... to partake in communion."
|
||||
desc = "A strong single target spell, shoot a target with raw energy from another dimension."
|
||||
cost = 1
|
||||
spell_to_add = /datum/action/cooldown/spell/pointed/projectile/lightningbolt/eldritchbolt
|
||||
tier = TIER_2
|
||||
|
||||
/datum/eldritch_knowledge/mind_final
|
||||
name = "Ascension Rite - Beyond All Knowledge Lies Despair"
|
||||
gain_text = "A beast, a walking corpse, a murderer, a hunter. You are all these and more, and you like it. A hunter is a hunter, even in a dream, and you've made it to the end. It's time to wake from this endless nightmare, the keys to the lock built on a mountain of corpses. "
|
||||
|
||||
@@ -41,6 +41,13 @@
|
||||
var/obj/realknife = new /obj/item/melee/sickly_blade/rust
|
||||
user.put_in_hands(realknife)
|
||||
RegisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK, PROC_REF(on_mansus_grasp))
|
||||
ADD_TRAIT(user, TRAIT_PUSHIMMUNE, INNATE_TRAIT)
|
||||
|
||||
var/datum/action/cooldown/spell/basic_jaunt = locate(/datum/action/cooldown/spell/jaunt/ethereal_jaunt/basic) in user.actions
|
||||
if(basic_jaunt)
|
||||
basic_jaunt.Remove(user)
|
||||
var/datum/action/cooldown/spell/jaunt/ethereal_jaunt/rust/rust_jaunt = new(user)
|
||||
rust_jaunt.Grant(user)
|
||||
|
||||
/datum/eldritch_knowledge/base_rust/on_lose(mob/user)
|
||||
UnregisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK)
|
||||
@@ -76,6 +83,14 @@
|
||||
route = PATH_RUST
|
||||
tier = TIER_1
|
||||
|
||||
/datum/eldritch_knowledge/spell/rust_construction
|
||||
name = "T1 - Rust Construction"
|
||||
gain_text = "To destroy is also to build, the lack of an answer is itself an answer."
|
||||
desc = "An instant spell that will create a wall at your command, only works on rusted tiles. Will knock back and damage anyone caught on the same tile."
|
||||
cost = 1
|
||||
spell_to_add = /datum/action/cooldown/spell/pointed/rust_construction
|
||||
tier = TIER_1
|
||||
|
||||
/datum/eldritch_knowledge/rust_regen/on_life(mob/user)
|
||||
. = ..()
|
||||
var/turf/user_loc_turf = get_turf(user)
|
||||
|
||||
@@ -9,24 +9,28 @@
|
||||
/datum/eldritch_knowledge/base_mind,
|
||||
/datum/eldritch_knowledge/base_blade,
|
||||
/datum/eldritch_knowledge/base_cosmic,
|
||||
/datum/eldritch_knowledge/base_knock,
|
||||
/datum/eldritch_knowledge/ash_mark,
|
||||
/datum/eldritch_knowledge/rust_mark,
|
||||
/datum/eldritch_knowledge/flesh_mark,
|
||||
/datum/eldritch_knowledge/mind_mark,
|
||||
/datum/eldritch_knowledge/blade_mark,
|
||||
/datum/eldritch_knowledge/cosmic_mark,
|
||||
/datum/eldritch_knowledge/knock_mark,
|
||||
/datum/eldritch_knowledge/ash_blade_upgrade,
|
||||
/datum/eldritch_knowledge/rust_blade_upgrade,
|
||||
/datum/eldritch_knowledge/flesh_blade_upgrade,
|
||||
/datum/eldritch_knowledge/mind_blade_upgrade,
|
||||
/datum/eldritch_knowledge/blade_blade_upgrade,
|
||||
/datum/eldritch_knowledge/cosmic_blade_upgrade,
|
||||
/datum/eldritch_knowledge/knock_blade_upgrade,
|
||||
/datum/eldritch_knowledge/ash_final,
|
||||
/datum/eldritch_knowledge/rust_final,
|
||||
/datum/eldritch_knowledge/flesh_final,
|
||||
/datum/eldritch_knowledge/mind_final,
|
||||
/datum/eldritch_knowledge/blade_final,
|
||||
/datum/eldritch_knowledge/cosmic_final)
|
||||
/datum/eldritch_knowledge/cosmic_final,
|
||||
/datum/eldritch_knowledge/knock_final)
|
||||
unlocked_transmutations = list(/datum/eldritch_transmutation/void_knife)
|
||||
cost = 1
|
||||
route = PATH_VOID
|
||||
@@ -37,6 +41,15 @@
|
||||
var/obj/realknife = new /obj/item/melee/sickly_blade/void
|
||||
user.put_in_hands(realknife)
|
||||
RegisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK, PROC_REF(on_mansus_grasp))
|
||||
ADD_TRAIT(user, TRAIT_RESISTCOLD, INNATE_TRAIT)
|
||||
ADD_TRAIT(user, TRAIT_NOSLIPICE, INNATE_TRAIT)
|
||||
|
||||
|
||||
var/datum/action/cooldown/spell/basic_jaunt = locate(/datum/action/cooldown/spell/jaunt/ethereal_jaunt/basic) in user.actions
|
||||
if(basic_jaunt)
|
||||
basic_jaunt.Remove(user)
|
||||
var/datum/action/cooldown/spell/jaunt/ethereal_jaunt/void/void_jaunt = new(user)
|
||||
void_jaunt.Grant(user)
|
||||
|
||||
/datum/eldritch_knowledge/base_void/on_lose(mob/user)
|
||||
UnregisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK)
|
||||
@@ -60,19 +73,31 @@
|
||||
H.adjust_silence(10)
|
||||
H.adjust_bodytemperature(-10)
|
||||
|
||||
/datum/eldritch_knowledge/spell/void_phase
|
||||
name = "T1 - Void Phase"
|
||||
gain_text = "The entity calls themself the Aristocrat. They effortlessly walk through air like \
|
||||
nothing - leaving a harsh, cold breeze in their wake. They disappear, and I am left in the blizzard."
|
||||
desc = "Grants you Void Phase, a long range targeted teleport spell. \
|
||||
Additionally causes damage to heathens around your original and target destination."
|
||||
/datum/eldritch_knowledge/rune_carver
|
||||
name = "T1 - Carving Knife"
|
||||
desc = "Allows you to transmute a knife, a shard of glass, and a piece of paper to create a Carving Knife. \
|
||||
The Carving Knife allows you to etch difficult to see traps that trigger on heathens who walk overhead. \
|
||||
Also makes for a handy throwing weapon."
|
||||
gain_text = "Etched, carved... eternal. There is power hidden in everything. I can unveil it! \
|
||||
I can carve the monolith to reveal the chains!"
|
||||
unlocked_transmutations = list(/datum/eldritch_transmutation/rune_carver)
|
||||
cost = 1
|
||||
spell_to_add = /datum/action/cooldown/spell/pointed/void_phase
|
||||
banned_knowledge = list(
|
||||
/datum/eldritch_knowledge/spell/mental_obfuscation)
|
||||
route = PATH_VOID
|
||||
tier = TIER_1
|
||||
|
||||
// /datum/eldritch_knowledge/spell/void_phase
|
||||
// name = "T1 - Void Phase"
|
||||
// gain_text = "The entity calls themself the Aristocrat. They effortlessly walk through air like
|
||||
// nothing - leaving a harsh, cold breeze in their wake. They disappear, and I am left in the blizzard."
|
||||
// desc = "Grants you Void Phase, a long range targeted teleport spell.
|
||||
// Additionally causes damage to heathens around your original and target destination."
|
||||
// cost = 1
|
||||
// spell_to_add = /datum/action/cooldown/spell/pointed/void_phase
|
||||
// banned_knowledge = list(
|
||||
// /datum/eldritch_knowledge/spell/mental_obfuscation)
|
||||
// route = PATH_VOID
|
||||
// tier = TIER_1
|
||||
|
||||
/datum/eldritch_knowledge/void_cloak
|
||||
name = "T1 - Void Cloak"
|
||||
gain_text = "The Owl is the keeper of things that are not quite in practice, but in theory are. Many things are."
|
||||
@@ -95,7 +120,8 @@
|
||||
/datum/eldritch_knowledge/flesh_mark,
|
||||
/datum/eldritch_knowledge/mind_mark,
|
||||
/datum/eldritch_knowledge/blade_mark,
|
||||
/datum/eldritch_knowledge/cosmic_mark)
|
||||
/datum/eldritch_knowledge/cosmic_mark,
|
||||
/datum/eldritch_knowledge/knock_mark,)
|
||||
route = PATH_VOID
|
||||
tier = TIER_MARK
|
||||
|
||||
@@ -152,7 +178,8 @@
|
||||
/datum/eldritch_knowledge/flesh_blade_upgrade,
|
||||
/datum/eldritch_knowledge/mind_blade_upgrade,
|
||||
/datum/eldritch_knowledge/blade_blade_upgrade,
|
||||
/datum/eldritch_knowledge/cosmic_blade_upgrade)
|
||||
/datum/eldritch_knowledge/cosmic_blade_upgrade,
|
||||
/datum/eldritch_knowledge/knock_blade_upgrade)
|
||||
route = PATH_VOID
|
||||
tier = TIER_BLADE
|
||||
|
||||
@@ -185,6 +212,22 @@
|
||||
spell_to_add = /datum/action/cooldown/spell/aoe/slip/void
|
||||
tier = TIER_3
|
||||
|
||||
/datum/eldritch_knowledge/lionhunter_rifle
|
||||
name = "T3 - Lionhunter Rifle"
|
||||
name = "Lionhunter's Rifle"
|
||||
desc = "Allows you to transmute any ballistic weapon, with \
|
||||
a plank of wood, a piece of gold and a camera to create the Lionhunter's rifle. \
|
||||
The Lionhunter's Rifle is a long ranged ballistic weapon with three shots. \
|
||||
These shots function as normal, albeit weak high caliber mutitions when fired from \
|
||||
close range or at inanimate objects. You can aim the rifle at distant foes, \
|
||||
causing the shot to deal massively increased damage and hone in on them. \
|
||||
You can create more ammo with three casings and five bars of silver."
|
||||
gain_text = "I met an old man in an anique shop who wielded a very unusual weapon. \
|
||||
I could not purchase it at the time, but they showed me how they made it ages ago."
|
||||
unlocked_transmutations = list(/datum/eldritch_transmutation/lionhunter, /datum/eldritch_transmutation/lionhunter_ammo)
|
||||
cost = 1
|
||||
tier = TIER_3
|
||||
|
||||
/datum/eldritch_knowledge/void_final
|
||||
name = "Ascension Rite - Waltz at the End of Time"
|
||||
gain_text = "The world falls into darkness. I stand in an empty plane, small flakes of ice fall from the sky. \
|
||||
|
||||
@@ -18,9 +18,9 @@ ASH PATH SPELLS GO HERE
|
||||
spell_requirements = SPELL_CASTABLE_WITHOUT_INVOCATION | SPELL_REQUIRES_NO_ANTIMAGIC
|
||||
|
||||
exit_jaunt_sound = null
|
||||
jaunt_duration = 1.1 SECONDS
|
||||
jaunt_in_time = 1.3 SECONDS
|
||||
jaunt_out_time = 0.6 SECONDS
|
||||
jaunt_duration = 1.5 SECONDS
|
||||
jaunt_in_time = 0.5 SECONDS
|
||||
jaunt_out_time = 0.5 SECONDS
|
||||
jaunt_in_type = /obj/effect/temp_visual/dir_setting/ash_shift
|
||||
jaunt_out_type = /obj/effect/temp_visual/dir_setting/ash_shift/out
|
||||
|
||||
@@ -37,7 +37,7 @@ ASH PATH SPELLS GO HERE
|
||||
name = "ash_shift"
|
||||
icon = 'icons/mob/mob.dmi'
|
||||
icon_state = "ash_shift2"
|
||||
duration = 1.3 SECONDS
|
||||
duration = 0.5 SECONDS
|
||||
|
||||
/obj/effect/temp_visual/dir_setting/ash_shift/out
|
||||
icon_state = "ash_shift"
|
||||
|
||||
@@ -1,3 +1,36 @@
|
||||
/datum/action/cooldown/spell/jaunt/ethereal_jaunt/blade
|
||||
name = "Shadow Passage"
|
||||
desc = "A short range spell that allows you to pass unimpeded through walls."
|
||||
background_icon_state = "bg_heretic"
|
||||
overlay_icon_state = "bg_heretic_border"
|
||||
button_icon = 'icons/mob/actions/actions_ecult.dmi'
|
||||
button_icon_state = "shadow"
|
||||
sound = null
|
||||
|
||||
school = SCHOOL_FORBIDDEN
|
||||
cooldown_time = 15 SECONDS
|
||||
|
||||
spell_requirements = SPELL_CASTABLE_WITHOUT_INVOCATION | SPELL_REQUIRES_NO_ANTIMAGIC
|
||||
|
||||
exit_jaunt_sound = null
|
||||
jaunt_duration = 1.5 SECONDS
|
||||
jaunt_in_time = 0.5 SECONDS
|
||||
jaunt_out_time = 0.5 SECONDS
|
||||
jaunt_in_type = /obj/effect/temp_visual/dir_setting/shadow_shift
|
||||
jaunt_out_type = /obj/effect/temp_visual/dir_setting/shadow_shift/out
|
||||
|
||||
/datum/action/cooldown/spell/jaunt/ethereal_jaunt/blade/do_steam_effects()
|
||||
return
|
||||
|
||||
/obj/effect/temp_visual/dir_setting/shadow_shift
|
||||
name = "shadow_shift"
|
||||
icon = 'icons/mob/mob.dmi'
|
||||
icon_state = "shadow"
|
||||
duration = 0.5 SECONDS
|
||||
|
||||
/obj/effect/temp_visual/dir_setting/shadow_shift/out
|
||||
icon_state = "uncloak"
|
||||
|
||||
/datum/action/cooldown/spell/pointed/projectile/furious_steel
|
||||
name = "Furious Steel"
|
||||
desc = "Summon three silver blades which orbit you. \
|
||||
@@ -116,3 +149,81 @@
|
||||
return BULLET_ACT_FORCE_PIERCE
|
||||
|
||||
return ..()
|
||||
|
||||
|
||||
// Realignment. It's like Fleshmend but solely for stamina damage and stuns. Sec meta
|
||||
/datum/action/cooldown/spell/realignment
|
||||
name = "Realignment"
|
||||
desc = "Realign yourself, rapidly regenerating stamina and reducing any stuns or knockdowns. \
|
||||
You cannot attack while realigning. Can be casted multiple times in short succession, but each cast lengthens the cooldown."
|
||||
background_icon_state = "bg_heretic"
|
||||
overlay_icon_state = "bg_heretic_border"
|
||||
button_icon = 'icons/obj/implants.dmi'
|
||||
button_icon_state = "adrenal"
|
||||
// sound = 'sound/magic/whistlereset.ogg'
|
||||
|
||||
school = SCHOOL_FORBIDDEN
|
||||
cooldown_time = 6 SECONDS
|
||||
cooldown_reduction_per_rank = -6 SECONDS // we're not a wizard spell but we use the levelling mechanic
|
||||
spell_max_level = 10 // we can get up to / over a minute duration cd time
|
||||
|
||||
invocation = "R'S'T."
|
||||
invocation_type = INVOCATION_SHOUT
|
||||
spell_requirements = SPELL_CASTABLE_WITHOUT_INVOCATION | SPELL_REQUIRES_NO_ANTIMAGIC
|
||||
|
||||
/datum/action/cooldown/spell/realignment/is_valid_target(atom/cast_on)
|
||||
return isliving(cast_on)
|
||||
|
||||
/datum/action/cooldown/spell/realignment/cast(mob/living/cast_on)
|
||||
. = ..()
|
||||
cast_on.apply_status_effect(/datum/status_effect/realignment)
|
||||
to_chat(cast_on, span_notice("We begin to realign ourselves."))
|
||||
|
||||
/datum/action/cooldown/spell/realignment/after_cast(atom/cast_on)
|
||||
. = ..()
|
||||
// With every cast, our spell level increases for a short time, which goes back down after a period
|
||||
// and with every spell level, the cooldown duration of the spell goes up
|
||||
if(level_spell())
|
||||
var/reduction_timer = max(cooldown_time * spell_max_level * 0.5, 1.5 MINUTES)
|
||||
addtimer(CALLBACK(src, PROC_REF(delevel_spell)), reduction_timer)
|
||||
|
||||
/datum/action/cooldown/spell/realignment/get_spell_title()
|
||||
switch(spell_level)
|
||||
if(1, 2)
|
||||
return "Hasty " // Hasty Realignment
|
||||
if(3, 4)
|
||||
return "" // Realignment
|
||||
if(5, 6, 7)
|
||||
return "Slowed " // Slowed Realignment
|
||||
if(8, 9, 10)
|
||||
return "Laborious " // Laborious Realignment (don't reach here)
|
||||
|
||||
return ""
|
||||
|
||||
/datum/status_effect/realignment
|
||||
id = "realigment"
|
||||
status_type = STATUS_EFFECT_REFRESH
|
||||
duration = 8 SECONDS
|
||||
alert_type = /atom/movable/screen/alert/status_effect/realignment
|
||||
tick_interval = 0.2 SECONDS
|
||||
|
||||
/datum/status_effect/realignment/on_apply()
|
||||
ADD_TRAIT(owner, TRAIT_PACIFISM, id)
|
||||
owner.add_filter(id, 2, list("type" = "outline", "color" = "#d6e3e7", "size" = 2))
|
||||
var/filter = owner.get_filter(id)
|
||||
animate(filter, alpha = 127, time = 1 SECONDS, loop = -1)
|
||||
animate(alpha = 63, time = 2 SECONDS)
|
||||
return TRUE
|
||||
|
||||
/datum/status_effect/realignment/on_remove()
|
||||
REMOVE_TRAIT(owner, TRAIT_PACIFISM, id)
|
||||
owner.remove_filter(id)
|
||||
|
||||
/datum/status_effect/realignment/tick(seconds_between_ticks)
|
||||
owner.adjustStaminaLoss(-15)
|
||||
owner.AdjustAllImmobility(-0.5 SECONDS)
|
||||
|
||||
/atom/movable/screen/alert/status_effect/realignment
|
||||
name = "Realignment"
|
||||
desc = "You're realignment yourself. You cannot attack, but are rapidly regenerating stamina."
|
||||
icon_state = "realignment"
|
||||
|
||||
@@ -1,3 +1,36 @@
|
||||
/datum/action/cooldown/spell/jaunt/ethereal_jaunt/cosmic
|
||||
name = "Cosmic Passage"
|
||||
desc = "A short range spell that allows you to pass unimpeded through walls."
|
||||
background_icon_state = "bg_heretic"
|
||||
overlay_icon_state = "bg_heretic_border"
|
||||
button_icon = 'icons/mob/actions/actions_ecult.dmi'
|
||||
button_icon_state = "space_crawl"
|
||||
sound = null
|
||||
|
||||
school = SCHOOL_FORBIDDEN
|
||||
cooldown_time = 15 SECONDS
|
||||
|
||||
spell_requirements = SPELL_CASTABLE_WITHOUT_INVOCATION | SPELL_REQUIRES_NO_ANTIMAGIC
|
||||
|
||||
exit_jaunt_sound = null
|
||||
jaunt_duration = 1.5 SECONDS
|
||||
jaunt_in_time = 0.5 SECONDS
|
||||
jaunt_out_time = 0.5 SECONDS
|
||||
jaunt_in_type = /obj/effect/temp_visual/dir_setting/space_shift
|
||||
jaunt_out_type = /obj/effect/temp_visual/dir_setting/space_shift/out
|
||||
|
||||
/datum/action/cooldown/spell/jaunt/ethereal_jaunt/cosmic/do_steam_effects()
|
||||
return
|
||||
|
||||
/obj/effect/temp_visual/dir_setting/space_shift
|
||||
name = "space_shift"
|
||||
icon = 'icons/mob/mob.dmi'
|
||||
icon_state = "space_explosion"
|
||||
duration = 0.5 SECONDS
|
||||
|
||||
/obj/effect/temp_visual/dir_setting/space_shift/out
|
||||
icon_state = "space_explosion"
|
||||
|
||||
/datum/action/cooldown/spell/cosmic_rune
|
||||
name = "Cosmic Rune"
|
||||
desc = "Creates a cosmic rune at your position, only two can exist at a time. Invoking one rune transports you to the other."
|
||||
|
||||
@@ -4,6 +4,39 @@ FLESH PATH SPELLS GO HERE
|
||||
|
||||
*/
|
||||
|
||||
/datum/action/cooldown/spell/jaunt/ethereal_jaunt/flesh
|
||||
name = "Blood Passage"
|
||||
desc = "A short range spell that allows you to pass unimpeded through walls."
|
||||
background_icon_state = "bg_heretic"
|
||||
overlay_icon_state = "bg_heretic_border"
|
||||
button_icon = 'icons/mob/actions/actions_ecult.dmi'
|
||||
button_icon_state = "bloodout"
|
||||
sound = null
|
||||
|
||||
school = SCHOOL_FORBIDDEN
|
||||
cooldown_time = 15 SECONDS
|
||||
|
||||
spell_requirements = SPELL_CASTABLE_WITHOUT_INVOCATION | SPELL_REQUIRES_NO_ANTIMAGIC
|
||||
|
||||
exit_jaunt_sound = null
|
||||
jaunt_duration = 1.5 SECONDS
|
||||
jaunt_in_time = 0.5 SECONDS
|
||||
jaunt_out_time = 0.5 SECONDS
|
||||
jaunt_in_type = /obj/effect/temp_visual/dir_setting/blood_shift
|
||||
jaunt_out_type = /obj/effect/temp_visual/dir_setting/blood_shift/out
|
||||
|
||||
/datum/action/cooldown/spell/jaunt/ethereal_jaunt/flesh/do_steam_effects()
|
||||
return
|
||||
|
||||
/obj/effect/temp_visual/dir_setting/blood_shift
|
||||
name = "blood_shift"
|
||||
icon = 'icons/effects/cult_effects.dmi'
|
||||
icon_state = "bloodin"
|
||||
duration = 0.5 SECONDS
|
||||
|
||||
/obj/effect/temp_visual/dir_setting/blood_shift/out
|
||||
icon_state = "bloodout"
|
||||
|
||||
/datum/action/cooldown/spell/pointed/blood_siphon
|
||||
name = "Blood Siphon"
|
||||
desc = "A touch spell that heals your wounds while damaging the enemy. \
|
||||
|
||||
@@ -69,6 +69,24 @@ THIS FILE IS FOR ALL HERETIC SPELLS THAT DO NOT CONFER TO A PATH'S THEME OR YOU
|
||||
|
||||
/obj/item/melee/touch_attack/mansus_fist/mind/upgraded //more ranged
|
||||
weapon_stats = list(SWING_SPEED = 1, ENCUMBRANCE = 0, ENCUMBRANCE_TIME = 0, REACH = 4, DAMAGE_LOW = 0, DAMAGE_HIGH = 0)
|
||||
|
||||
/datum/action/cooldown/spell/jaunt/ethereal_jaunt/basic
|
||||
name = "Mansus Passage"
|
||||
desc = "A short range spell that allows you to pass unimpeded through walls."
|
||||
background_icon_state = "bg_heretic"
|
||||
overlay_icon_state = "bg_heretic_border"
|
||||
sound = null
|
||||
|
||||
school = SCHOOL_FORBIDDEN
|
||||
cooldown_time = 15 SECONDS
|
||||
|
||||
spell_requirements = SPELL_CASTABLE_WITHOUT_INVOCATION | SPELL_REQUIRES_NO_ANTIMAGIC
|
||||
|
||||
exit_jaunt_sound = null
|
||||
jaunt_duration = 1.5 SECONDS
|
||||
jaunt_in_time = 0.5 SECONDS
|
||||
jaunt_out_time = 0.5 SECONDS
|
||||
|
||||
// Currently unused.
|
||||
/datum/action/cooldown/spell/touch/mad_touch
|
||||
name = "Touch of Madness"
|
||||
|
||||
@@ -1,3 +1,36 @@
|
||||
/datum/action/cooldown/spell/jaunt/ethereal_jaunt/knock
|
||||
name = "Expedited Passage"
|
||||
desc = "A short range spell that allows you to pass unimpeded through walls."
|
||||
background_icon_state = "bg_heretic"
|
||||
overlay_icon_state = "bg_heretic_border"
|
||||
button_icon = 'icons/mob/actions/actions_ecult.dmi'
|
||||
button_icon_state = "phaseout"
|
||||
sound = null
|
||||
|
||||
school = SCHOOL_FORBIDDEN
|
||||
cooldown_time = 15 SECONDS
|
||||
|
||||
spell_requirements = SPELL_CASTABLE_WITHOUT_INVOCATION | SPELL_REQUIRES_NO_ANTIMAGIC
|
||||
|
||||
exit_jaunt_sound = null
|
||||
jaunt_duration = 1.5 SECONDS
|
||||
jaunt_in_time = 0.5 SECONDS
|
||||
jaunt_out_time = 0.5 SECONDS
|
||||
jaunt_in_type = /obj/effect/temp_visual/dir_setting/knock_shift
|
||||
jaunt_out_type = /obj/effect/temp_visual/dir_setting/knock_shift/out
|
||||
|
||||
/datum/action/cooldown/spell/jaunt/ethereal_jaunt/knock/do_steam_effects()
|
||||
return
|
||||
|
||||
/obj/effect/temp_visual/dir_setting/knock_shift
|
||||
name = "knock_shift"
|
||||
icon = 'icons/mob/mob.dmi'
|
||||
icon_state = "phasein"
|
||||
duration = 0.5 SECONDS
|
||||
|
||||
/obj/effect/temp_visual/dir_setting/knock_shift/out
|
||||
icon_state = "phaseout"
|
||||
|
||||
/datum/action/cooldown/spell/pointed/burglar_finesse
|
||||
name = "Burglar's Finesse"
|
||||
desc = "Steal a random item from the victim's backpack."
|
||||
|
||||
@@ -3,6 +3,38 @@
|
||||
MIND PATH SPELLS GO HERE
|
||||
|
||||
*/
|
||||
/datum/action/cooldown/spell/jaunt/ethereal_jaunt/mind
|
||||
name = "Mental Obfuscation"
|
||||
desc = "A short range spell that allows you to pass unimpeded through walls."
|
||||
background_icon_state = "bg_heretic"
|
||||
overlay_icon_state = "bg_heretic_border"
|
||||
button_icon = 'icons/mob/actions/actions_ecult.dmi'
|
||||
button_icon_state = "mansus_link"
|
||||
sound = null
|
||||
|
||||
school = SCHOOL_FORBIDDEN
|
||||
cooldown_time = 15 SECONDS
|
||||
|
||||
spell_requirements = SPELL_CASTABLE_WITHOUT_INVOCATION | SPELL_REQUIRES_NO_ANTIMAGIC
|
||||
|
||||
exit_jaunt_sound = null
|
||||
jaunt_duration = 2 SECONDS
|
||||
jaunt_in_time = 0.5 SECONDS
|
||||
jaunt_out_time = 0.5 SECONDS
|
||||
jaunt_in_type = /obj/effect/temp_visual/dir_setting/mind_shift
|
||||
jaunt_out_type = /obj/effect/temp_visual/dir_setting/mind_shift/out
|
||||
|
||||
/datum/action/cooldown/spell/jaunt/ethereal_jaunt/mind/do_steam_effects()
|
||||
return
|
||||
|
||||
/obj/effect/temp_visual/dir_setting/mind_shift
|
||||
name = "knock_shift"
|
||||
icon = 'icons/effects/cult_effects.dmi'
|
||||
icon_state = "cultin"
|
||||
duration = 0.5 SECONDS
|
||||
|
||||
/obj/effect/temp_visual/dir_setting/mind_shift/out
|
||||
icon_state = "cultout"
|
||||
|
||||
/datum/action/cooldown/spell/aoe/immobilize/famished_roar
|
||||
name = "Famished Roar"
|
||||
@@ -87,24 +119,24 @@ MIND PATH SPELLS GO HERE
|
||||
bolt_power = 1000
|
||||
|
||||
|
||||
/datum/action/cooldown/spell/pointed/phase_jump/obfuscation
|
||||
name = "Mental Obfuscation"
|
||||
desc = "A short range targeted teleport."
|
||||
background_icon_state = "bg_heretic"
|
||||
overlay_icon_state = "bg_heretic_border"
|
||||
button_icon = 'icons/mob/actions/actions_ecult.dmi'
|
||||
button_icon_state = "mansus_link"
|
||||
ranged_mousepointer = 'icons/effects/mouse_pointers/phase_jump.dmi'
|
||||
// /datum/action/cooldown/spell/pointed/phase_jump/obfuscation
|
||||
// name = "Mental Obfuscation"
|
||||
// desc = "A short range targeted teleport."
|
||||
// background_icon_state = "bg_heretic"
|
||||
// overlay_icon_state = "bg_heretic_border"
|
||||
// button_icon = 'icons/mob/actions/actions_ecult.dmi'
|
||||
// button_icon_state = "mansus_link"
|
||||
// ranged_mousepointer = 'icons/effects/mouse_pointers/phase_jump.dmi'
|
||||
|
||||
school = SCHOOL_FORBIDDEN
|
||||
// school = SCHOOL_FORBIDDEN
|
||||
|
||||
cooldown_time = 25 SECONDS
|
||||
cast_range = 7
|
||||
invocation = "PH'ASE"
|
||||
invocation_type = INVOCATION_WHISPER
|
||||
active_msg = span_notice("You prepare to warp everyone's vision.")
|
||||
deactive_msg = span_notice("You relax your mind.")
|
||||
spell_requirements = SPELL_CASTABLE_WITHOUT_INVOCATION | SPELL_REQUIRES_NO_ANTIMAGIC
|
||||
// cooldown_time = 25 SECONDS
|
||||
// cast_range = 7
|
||||
// invocation = "PH'ASE"
|
||||
// invocation_type = INVOCATION_WHISPER
|
||||
// active_msg = span_notice("You prepare to warp everyone's vision.")
|
||||
// deactive_msg = span_notice("You relax your mind.")
|
||||
// spell_requirements = SPELL_CASTABLE_WITHOUT_INVOCATION | SPELL_REQUIRES_NO_ANTIMAGIC
|
||||
|
||||
/datum/action/cooldown/spell/pointed/projectile/assault
|
||||
name = "Amygdala Assault"
|
||||
|
||||
@@ -4,6 +4,39 @@ RUST PATH SPELLS GO HERE
|
||||
|
||||
*/
|
||||
|
||||
/datum/action/cooldown/spell/jaunt/ethereal_jaunt/rust
|
||||
name = "Decaying Phase"
|
||||
desc = "A short range spell that allows you to pass unimpeded through walls."
|
||||
background_icon_state = "bg_heretic"
|
||||
overlay_icon_state = "bg_heretic_border"
|
||||
button_icon = 'icons/mob/actions/actions_ecult.dmi'
|
||||
button_icon_state = "curse"
|
||||
sound = null
|
||||
|
||||
school = SCHOOL_FORBIDDEN
|
||||
cooldown_time = 15 SECONDS
|
||||
|
||||
spell_requirements = SPELL_CASTABLE_WITHOUT_INVOCATION | SPELL_REQUIRES_NO_ANTIMAGIC
|
||||
|
||||
exit_jaunt_sound = null
|
||||
jaunt_duration = 1.5 SECONDS
|
||||
jaunt_in_time = 0.5 SECONDS
|
||||
jaunt_out_time = 0.5 SECONDS
|
||||
jaunt_in_type = /obj/effect/temp_visual/dir_setting/rust_shift
|
||||
jaunt_out_type = /obj/effect/temp_visual/dir_setting/rust_shift/out
|
||||
|
||||
/datum/action/cooldown/spell/jaunt/ethereal_jaunt/rust/do_steam_effects()
|
||||
return
|
||||
|
||||
/obj/effect/temp_visual/dir_setting/rust_shift
|
||||
name = "rust_shift"
|
||||
icon = 'icons/effects/effects.dmi'
|
||||
icon_state = "curse"
|
||||
duration = 0.5 SECONDS
|
||||
|
||||
/obj/effect/temp_visual/dir_setting/rust_shift/out
|
||||
icon_state = "curse"
|
||||
|
||||
/datum/action/cooldown/spell/aoe/rust_conversion
|
||||
name = "Aggressive Spread"
|
||||
desc = "Spread rust onto nearby turfs, possibly destroying rusted walls."
|
||||
@@ -145,3 +178,111 @@ RUST PATH SPELLS GO HERE
|
||||
else
|
||||
return 2
|
||||
|
||||
/datum/action/cooldown/spell/pointed/rust_construction
|
||||
name = "Rust Formation"
|
||||
desc = "Transforms a rusted floor into a full wall of rust. Creating a wall underneath a mob will harm it."
|
||||
background_icon_state = "bg_heretic"
|
||||
overlay_icon_state = "bg_heretic_border"
|
||||
button_icon_state = "shield"
|
||||
ranged_mousepointer = 'icons/effects/mouse_pointers/throw_target.dmi'
|
||||
check_flags = AB_CHECK_INCAPACITATED|AB_CHECK_CONSCIOUS|AB_CHECK_HANDS_BLOCKED
|
||||
|
||||
school = SCHOOL_FORBIDDEN
|
||||
cooldown_time = 5 SECONDS
|
||||
|
||||
invocation = "Someone raises a wall of rust."
|
||||
invocation_self_message = "You raise a wall of rust."
|
||||
invocation_type = INVOCATION_EMOTE
|
||||
spell_requirements = SPELL_CASTABLE_WITHOUT_INVOCATION | SPELL_REQUIRES_NO_ANTIMAGIC
|
||||
|
||||
cast_range = 4
|
||||
aim_assist = FALSE
|
||||
|
||||
/// How long does the filter last on walls we make?
|
||||
var/filter_duration = 2 MINUTES
|
||||
|
||||
/datum/action/cooldown/spell/pointed/rust_construction/is_valid_target(atom/cast_on)
|
||||
if(!isfloorturf(cast_on))
|
||||
if(isturf(cast_on) && owner)
|
||||
cast_on.balloon_alert(owner, "not a floor!")
|
||||
return FALSE
|
||||
|
||||
if(!HAS_TRAIT(cast_on, TRAIT_RUSTY))
|
||||
if(owner)
|
||||
cast_on.balloon_alert(owner, "not rusted!")
|
||||
return FALSE
|
||||
|
||||
return TRUE
|
||||
|
||||
/datum/action/cooldown/spell/pointed/rust_construction/before_cast(turf/open/cast_on)
|
||||
. = ..()
|
||||
if(!isliving(owner))
|
||||
return
|
||||
|
||||
var/mob/living/living_owner = owner
|
||||
invocation = span_danger("<b>[owner]</b> drags [owner.p_their()] hand[living_owner.usable_hands == 1 ? "":"s"] upwards as a wall of rust rises out of [cast_on]!")
|
||||
invocation_self_message = span_notice("You drag [living_owner.usable_hands == 1 ? "a hand":"your hands"] upwards as a wall of rust rises out of [cast_on].")
|
||||
|
||||
/datum/action/cooldown/spell/pointed/rust_construction/cast(turf/open/cast_on)
|
||||
. = ..()
|
||||
var/rises_message = "rises out of [cast_on]"
|
||||
var/turf/closed/wall/new_wall = cast_on.PlaceOnTop(/turf/closed/wall)
|
||||
if(!istype(new_wall))
|
||||
return
|
||||
|
||||
playsound(new_wall, 'sound/effects/constructform.ogg', 50, TRUE)
|
||||
new_wall.rust_heretic_act()
|
||||
new_wall.name = "\improper enchanted [new_wall.name]"
|
||||
new_wall.hardness = 10
|
||||
new_wall.sheet_amount = 0
|
||||
new_wall.girder_type = null
|
||||
|
||||
// I wanted to do a cool animation of a wall raising from the ground
|
||||
// but I guess a fading filter will have to do for now as walls have 0 depth (currently)
|
||||
// damn though with 3/4ths walls this'll look sick just imagine it
|
||||
addtimer(CALLBACK(src, PROC_REF(fade_wall_filter), new_wall), filter_duration * (1/20))
|
||||
addtimer(CALLBACK(src,PROC_REF(remove_wall_filter), new_wall), filter_duration)
|
||||
|
||||
var/message_shown = FALSE
|
||||
for(var/mob/living/living_mob in cast_on)
|
||||
message_shown = TRUE
|
||||
if(IS_HERETIC_OR_MONSTER(living_mob) || living_mob == owner)
|
||||
living_mob.visible_message(
|
||||
span_warning("\A [new_wall] [rises_message] and pushes along [living_mob]!"),
|
||||
span_notice("\A [new_wall] [rises_message] beneath your feet and pushes you along!"),
|
||||
)
|
||||
else
|
||||
living_mob.visible_message(
|
||||
span_warning("\A [new_wall] [rises_message] and slams into [living_mob]!"),
|
||||
span_userdanger("\A [new_wall] [rises_message] beneath your feet and slams into you!"),
|
||||
)
|
||||
living_mob.apply_damage(10, BRUTE, wound_bonus = 10)
|
||||
living_mob.Knockdown(5 SECONDS)
|
||||
living_mob.SpinAnimation(5, 1)
|
||||
|
||||
// If we're a multiz map send them to the next floor
|
||||
var/turf/above_us = get_step_multiz(cast_on, UP)
|
||||
if(above_us)
|
||||
living_mob.forceMove(above_us)
|
||||
continue
|
||||
|
||||
// If we're not throw them to a nearby (open) turf
|
||||
var/list/turfs_by_us = get_adjacent_open_turfs(cast_on)
|
||||
// If there is no side by us, hardstun them
|
||||
if(!length(turfs_by_us))
|
||||
living_mob.Paralyze(5 SECONDS)
|
||||
continue
|
||||
|
||||
// If there's an open turf throw them to the side
|
||||
living_mob.throw_at(pick(turfs_by_us), 1, 3, thrower = owner, spin = FALSE)
|
||||
|
||||
if(!message_shown)
|
||||
new_wall.visible_message(span_warning("\A [new_wall] [rises_message]!"))
|
||||
|
||||
/datum/action/cooldown/spell/pointed/rust_construction/proc/fade_wall_filter(turf/closed/wall)
|
||||
if(QDELETED(wall))
|
||||
return
|
||||
|
||||
/datum/action/cooldown/spell/pointed/rust_construction/proc/remove_wall_filter(turf/closed/wall)
|
||||
if(QDELETED(wall))
|
||||
return
|
||||
|
||||
@@ -4,6 +4,39 @@ VOID PATH SPELLS GO HERE
|
||||
|
||||
*/
|
||||
|
||||
/datum/action/cooldown/spell/jaunt/ethereal_jaunt/void
|
||||
name = "Void Shift"
|
||||
desc = "A short range spell that allows you to pass unimpeded through walls."
|
||||
background_icon_state = "bg_heretic"
|
||||
overlay_icon_state = "bg_heretic_border"
|
||||
button_icon = 'icons/mob/actions/actions_ecult.dmi'
|
||||
button_icon_state = "voidblink"
|
||||
sound = null
|
||||
|
||||
school = SCHOOL_FORBIDDEN
|
||||
cooldown_time = 15 SECONDS
|
||||
|
||||
spell_requirements = SPELL_CASTABLE_WITHOUT_INVOCATION | SPELL_REQUIRES_NO_ANTIMAGIC
|
||||
|
||||
exit_jaunt_sound = null
|
||||
jaunt_duration = 1.5 SECONDS
|
||||
jaunt_in_time = 0.5 SECONDS
|
||||
jaunt_out_time = 0.5 SECONDS
|
||||
jaunt_in_type = /obj/effect/temp_visual/dir_setting/void_shift
|
||||
jaunt_out_type = /obj/effect/temp_visual/dir_setting/void_shift/out
|
||||
|
||||
/datum/action/cooldown/spell/jaunt/ethereal_jaunt/void/do_steam_effects()
|
||||
return
|
||||
|
||||
/obj/effect/temp_visual/dir_setting/void_shift
|
||||
name = "void_shift"
|
||||
icon = 'icons/mob/mob.dmi'
|
||||
icon_state = "void_blink_in"
|
||||
duration = 0.5 SECONDS
|
||||
|
||||
/obj/effect/temp_visual/dir_setting/void_shift/out
|
||||
icon_state = "void_blink_out"
|
||||
|
||||
/datum/action/cooldown/spell/pointed/void_phase
|
||||
name = "Void Phase"
|
||||
desc = "Let's you blink to your pointed destination, causes 3x3 aoe damage bubble \
|
||||
|
||||
@@ -76,6 +76,12 @@
|
||||
mob_to_summon = /mob/living/simple_animal/hostile/eldritch/ash_spirit
|
||||
required_shit_list = "A pile of ash, a head, and a book."
|
||||
|
||||
/datum/eldritch_transmutation/summon/fire_shark
|
||||
name = "Summon Fire Shark"
|
||||
required_atoms = list(/obj/item/organ/eyes,/obj/effect/decal/cleanable/ash,/obj/item/stack/sheet/mineral/plasma)
|
||||
mob_to_summon = /mob/living/simple_animal/hostile/eldritch/fire_shark
|
||||
required_shit_list = "A pile of ash, a pair of eyes, and a stack of plasma."
|
||||
|
||||
/datum/eldritch_transmutation/summon/rusty
|
||||
name = "Summon Rustwalker"
|
||||
required_atoms = list(/obj/effect/decal/cleanable/vomit,,/obj/item/book)
|
||||
|
||||
@@ -14,6 +14,48 @@
|
||||
result_atoms = list(/obj/item/clothing/suit/cultrobes/void)
|
||||
required_shit_list = "glass shard, clothing, bedsheet"
|
||||
|
||||
/datum/eldritch_transmutation/rune_carver
|
||||
name = "Carving Knife"
|
||||
required_atoms = list(
|
||||
/obj/item/shard = 1,
|
||||
/obj/item/paper = 1
|
||||
)
|
||||
result_atoms = list(/obj/item/melee/rune_carver)
|
||||
required_shit_list = "glass shard, piece of paper"
|
||||
|
||||
/datum/eldritch_transmutation/lionhunter
|
||||
name = "Lionhunter Rifle"
|
||||
required_atoms = list(
|
||||
/obj/item/gun = 1,
|
||||
/obj/item/stack/sheet/mineral/wood = 1,
|
||||
/obj/item/camera,
|
||||
/obj/item/stack/sheet/mineral/gold
|
||||
|
||||
)
|
||||
result_atoms = list(/obj/item/gun/ballistic/rifle/boltaction/lionhunter)
|
||||
required_shit_list = "A gun, a piece of wood, a camera, and a piece of gold"
|
||||
|
||||
|
||||
/datum/eldritch_transmutation/lionhunter_ammo
|
||||
name = "Lionhunter Rifle Ammo"
|
||||
required_atoms = list(
|
||||
/obj/item/ammo_casing = 3,
|
||||
/obj/item/stack/sheet/mineral/silver = 5
|
||||
|
||||
)
|
||||
result_atoms = list(/obj/item/ammo_casing/strilka310/lionhunter)
|
||||
required_shit_list = "Three ammo casings and five bars of silver."
|
||||
|
||||
/datum/eldritch_transmutation/rune_carver
|
||||
name = "Carving Knife"
|
||||
required_atoms = list(
|
||||
/obj/item/shard = 1,
|
||||
/obj/item/paper = 1
|
||||
)
|
||||
result_atoms = list(/obj/item/melee/rune_carver)
|
||||
required_shit_list = "glass shard, piece of paper"
|
||||
|
||||
|
||||
/datum/eldritch_transmutation/final/void_final
|
||||
name = "Waltz at the End of Time"
|
||||
required_atoms = list(/mob/living/carbon/human)
|
||||
|
||||
@@ -142,3 +142,10 @@
|
||||
var/body_position_pixel_x_offset = 0
|
||||
///The y amount a mob's sprite should be offset due to the current position they're in or size (e.g. lying down moves your sprite down)
|
||||
var/body_position_pixel_y_offset = 0
|
||||
|
||||
///How many hands does this mob have by default. This shouldn't change at runtime.
|
||||
var/default_num_hands = 2
|
||||
///How many hands hands does this mob currently have. Should only be changed through set_num_hands()
|
||||
var/num_hands = 2
|
||||
///How many usable hands does this mob currently have. Should only be changed through set_usable_hands()
|
||||
var/usable_hands = 2
|
||||
|
||||
@@ -420,3 +420,61 @@
|
||||
ADD_TRAIT(src, TRAIT_NO_TELEPORT, MEGAFAUNA_TRAIT)
|
||||
ADD_TRAIT(src, TRAIT_NO_FLOATING_ANIM, INNATE_TRAIT)
|
||||
set_light(4, l_color = "#dcaa5b")
|
||||
|
||||
/mob/living/simple_animal/hostile/eldritch/fire_shark
|
||||
name = "Fire Shark"
|
||||
real_name = "Ignis"
|
||||
desc = "It is a eldritch dwarf space shark, also known as a fire shark."
|
||||
icon = 'icons/mob/eldritch_mobs.dmi'
|
||||
icon_state = "fire_shark"
|
||||
icon_living = "fire_shark"
|
||||
pass_flags = PASSTABLE | PASSMOB
|
||||
mob_biotypes = MOB_ORGANIC | MOB_BEAST
|
||||
speed = -0.5
|
||||
health = 16
|
||||
maxHealth = 16
|
||||
melee_damage_lower = 8
|
||||
melee_damage_upper = 8
|
||||
attack_sound = 'sound/weapons/bite.ogg'
|
||||
attack_vis_effect = ATTACK_EFFECT_BITE
|
||||
attacktext = "bites"
|
||||
obj_damage = 0
|
||||
damage_coeff = list(BRUTE = 1, BURN = 0.25, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0)
|
||||
mob_size = MOB_SIZE_TINY
|
||||
speak_emote = list("screams")
|
||||
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 = 0
|
||||
maxbodytemp = 1500
|
||||
pressure_resistance = 200
|
||||
var/poison_per_bite = 2
|
||||
var/poison_type = /datum/reagent/phlogiston
|
||||
var/death_cloud_size = 1 //size of cloud produced from a dying shark
|
||||
|
||||
/mob/living/simple_animal/hostile/eldritch/fire_shark/Initialize(mapload)
|
||||
. = ..()
|
||||
AddComponent(/datum/component/swarming)
|
||||
AddComponent(/datum/component/regenerator, outline_colour = COLOR_DARK_RED)
|
||||
|
||||
/mob/living/simple_animal/hostile/eldritch/fire_shark/AttackingTarget()
|
||||
. = ..()
|
||||
if(. && isliving(target))
|
||||
var/mob/living/L = target
|
||||
if(L.reagents && poison_per_bite)
|
||||
L.reagents.add_reagent(poison_type, poison_per_bite)
|
||||
return .
|
||||
|
||||
/mob/living/simple_animal/hostile/eldritch/fire_shark/death(gibbed)
|
||||
// On death, create a small smoke of harmful gas (s-Acid)
|
||||
var/datum/effect_system/fluid_spread/smoke/chem/S = new
|
||||
var/turf/location = get_turf(src)
|
||||
|
||||
// Create the reagents to put into the air
|
||||
create_reagents(10)
|
||||
reagents.add_reagent(/datum/reagent/toxin/plasma, 40)
|
||||
|
||||
// Attach the smoke spreader and setup/start it.
|
||||
S.attach(location)
|
||||
S.set_up(death_cloud_size, location = location, carry = reagents, silent = TRUE)
|
||||
S.start()
|
||||
|
||||
..()
|
||||
|
||||
@@ -153,6 +153,11 @@
|
||||
|
||||
var/splatter = FALSE // Make a cool splatter effect even if it doesn't do brute damage
|
||||
|
||||
/// If FALSE, allow us to hit something directly targeted/clicked/whatnot even if we're able to phase through it
|
||||
var/phasing_ignore_direct_target = FALSE
|
||||
/// Bitflag for things the projectile should just phase through entirely - No hitting unless direct target and [phasing_ignore_direct_target] is FALSE. Uses pass_flags flags.
|
||||
var/projectile_phasing = NONE
|
||||
|
||||
/obj/projectile/Initialize(mapload)
|
||||
. = ..()
|
||||
impacted = list()
|
||||
|
||||
|
Before Width: | Height: | Size: 70 KiB After Width: | Height: | Size: 111 KiB |
|
Before Width: | Height: | Size: 5.7 KiB After Width: | Height: | Size: 7.0 KiB |
|
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 80 KiB |
|
Before Width: | Height: | Size: 81 KiB After Width: | Height: | Size: 82 KiB |
|
Before Width: | Height: | Size: 213 KiB After Width: | Height: | Size: 242 KiB |
|
Before Width: | Height: | Size: 52 KiB After Width: | Height: | Size: 53 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 34 KiB |
BIN
sound/effects/constructform.ogg
Normal file
@@ -1812,9 +1812,11 @@
|
||||
#include "code\modules\antagonists\eldritch_cult\eldritch_antag.dm"
|
||||
#include "code\modules\antagonists\eldritch_cult\eldritch_book.dm"
|
||||
#include "code\modules\antagonists\eldritch_cult\eldritch_effects.dm"
|
||||
#include "code\modules\antagonists\eldritch_cult\eldritch_gun.dm"
|
||||
#include "code\modules\antagonists\eldritch_cult\eldritch_items.dm"
|
||||
#include "code\modules\antagonists\eldritch_cult\eldritch_knowledge.dm"
|
||||
#include "code\modules\antagonists\eldritch_cult\eldritch_monster_antag.dm"
|
||||
#include "code\modules\antagonists\eldritch_cult\eldritch_rune_knife.dm"
|
||||
#include "code\modules\antagonists\eldritch_cult\eldritch_transmutations.dm"
|
||||
#include "code\modules\antagonists\eldritch_cult\knowledge\ash_lore.dm"
|
||||
#include "code\modules\antagonists\eldritch_cult\knowledge\blade_lore.dm"
|
||||
|
||||