mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-22 04:30:44 +01:00
* Removes ComponentInitialize() Completely removes ComponentInitialize() as a proc, which was called on every single atom in the game, twice in some instances (like new players), over something that can already be done with Initialize(). This is the second attempt at doing this, after the first attempt fell apart for some reason. This time it was way easier though, since storages are no longer a Component. * update icon blocker added before calling parent * Update code/game/machinery/porta_turret/portable_turret.dm Co-authored-by: san7890 <the@san7890.com> * adds a mapload while I'm here * moves human mood * Does some UNRELATED thing to the PR Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com> Co-authored-by: san7890 <the@san7890.com> Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
447 lines
18 KiB
Plaintext
447 lines
18 KiB
Plaintext
/*********************Mining Hammer****************/
|
|
/obj/item/kinetic_crusher
|
|
icon = 'icons/obj/mining.dmi'
|
|
icon_state = "crusher"
|
|
inhand_icon_state = "crusher0"
|
|
lefthand_file = 'icons/mob/inhands/weapons/hammers_lefthand.dmi'
|
|
righthand_file = 'icons/mob/inhands/weapons/hammers_righthand.dmi'
|
|
name = "proto-kinetic crusher"
|
|
desc = "An early design of the proto-kinetic accelerator, it is little more than a combination of various mining tools cobbled together, forming a high-tech club. \
|
|
While it is an effective mining tool, it did little to aid any but the most skilled and/or suicidal miners against local fauna."
|
|
force = 0 //You can't hit stuff unless wielded
|
|
w_class = WEIGHT_CLASS_BULKY
|
|
slot_flags = ITEM_SLOT_BACK
|
|
throwforce = 5
|
|
throw_speed = 4
|
|
armour_penetration = 10
|
|
custom_materials = list(/datum/material/iron=1150, /datum/material/glass=2075)
|
|
hitsound = 'sound/weapons/bladeslice.ogg'
|
|
attack_verb_continuous = list("smashes", "crushes", "cleaves", "chops", "pulps")
|
|
attack_verb_simple = list("smash", "crush", "cleave", "chop", "pulp")
|
|
sharpness = SHARP_EDGED
|
|
actions_types = list(/datum/action/item_action/toggle_light)
|
|
obj_flags = UNIQUE_RENAME
|
|
light_system = MOVABLE_LIGHT
|
|
light_range = 5
|
|
light_on = FALSE
|
|
var/list/trophies = list()
|
|
var/charged = TRUE
|
|
var/charge_time = 15
|
|
var/detonation_damage = 50
|
|
var/backstab_bonus = 30
|
|
|
|
/obj/item/kinetic_crusher/Initialize(mapload)
|
|
. = ..()
|
|
AddComponent(/datum/component/butchering, \
|
|
speed = 6 SECONDS, \
|
|
effectiveness = 110, \
|
|
)
|
|
//technically it's huge and bulky, but this provides an incentive to use it
|
|
AddComponent(/datum/component/two_handed, force_unwielded=0, force_wielded=20)
|
|
|
|
/obj/item/kinetic_crusher/Destroy()
|
|
QDEL_LIST(trophies)
|
|
return ..()
|
|
|
|
/obj/item/kinetic_crusher/examine(mob/living/user)
|
|
. = ..()
|
|
. += span_notice("Mark a large creature with a destabilizing force with right-click, then hit them in melee to do <b>[force + detonation_damage]</b> damage.")
|
|
. += span_notice("Does <b>[force + detonation_damage + backstab_bonus]</b> damage if the target is backstabbed, instead of <b>[force + detonation_damage]</b>.")
|
|
for(var/t in trophies)
|
|
var/obj/item/crusher_trophy/T = t
|
|
. += span_notice("It has \a [T] attached, which causes [T.effect_desc()].")
|
|
|
|
/obj/item/kinetic_crusher/attackby(obj/item/I, mob/living/user)
|
|
if(I.tool_behaviour == TOOL_CROWBAR)
|
|
if(LAZYLEN(trophies))
|
|
to_chat(user, span_notice("You remove [src]'s trophies."))
|
|
I.play_tool_sound(src)
|
|
for(var/t in trophies)
|
|
var/obj/item/crusher_trophy/T = t
|
|
T.remove_from(src, user)
|
|
else
|
|
to_chat(user, span_warning("There are no trophies on [src]."))
|
|
else if(istype(I, /obj/item/crusher_trophy))
|
|
var/obj/item/crusher_trophy/T = I
|
|
T.add_to(src, user)
|
|
else
|
|
return ..()
|
|
|
|
/obj/item/kinetic_crusher/attack(mob/living/target, mob/living/carbon/user)
|
|
if(!HAS_TRAIT(src, TRAIT_WIELDED))
|
|
to_chat(user, span_warning("[src] is too heavy to use with one hand! You fumble and drop everything."))
|
|
user.drop_all_held_items()
|
|
return
|
|
var/datum/status_effect/crusher_damage/C = target.has_status_effect(/datum/status_effect/crusher_damage)
|
|
if(!C)
|
|
C = target.apply_status_effect(/datum/status_effect/crusher_damage)
|
|
var/target_health = target.health
|
|
..()
|
|
for(var/t in trophies)
|
|
if(!QDELETED(target))
|
|
var/obj/item/crusher_trophy/T = t
|
|
T.on_melee_hit(target, user)
|
|
if(!QDELETED(C) && !QDELETED(target))
|
|
C.total_damage += target_health - target.health //we did some damage, but let's not assume how much we did
|
|
|
|
/obj/item/kinetic_crusher/afterattack(atom/target, mob/living/user, proximity_flag, clickparams)
|
|
if(proximity_flag && isliving(target))
|
|
var/mob/living/L = target
|
|
var/datum/status_effect/crusher_mark/CM = L.has_status_effect(/datum/status_effect/crusher_mark)
|
|
if(!CM || CM.hammer_synced != src || !L.remove_status_effect(/datum/status_effect/crusher_mark))
|
|
return
|
|
var/datum/status_effect/crusher_damage/C = L.has_status_effect(/datum/status_effect/crusher_damage)
|
|
if(!C)
|
|
C = L.apply_status_effect(/datum/status_effect/crusher_damage)
|
|
var/target_health = L.health
|
|
for(var/t in trophies)
|
|
var/obj/item/crusher_trophy/T = t
|
|
T.on_mark_detonation(target, user)
|
|
if(!QDELETED(L))
|
|
if(!QDELETED(C))
|
|
C.total_damage += target_health - L.health //we did some damage, but let's not assume how much we did
|
|
new /obj/effect/temp_visual/kinetic_blast(get_turf(L))
|
|
var/backstab_dir = get_dir(user, L)
|
|
var/def_check = L.getarmor(type = BOMB)
|
|
if((user.dir & backstab_dir) && (L.dir & backstab_dir))
|
|
if(!QDELETED(C))
|
|
C.total_damage += detonation_damage + backstab_bonus //cheat a little and add the total before killing it, so certain mobs don't have much lower chances of giving an item
|
|
L.apply_damage(detonation_damage + backstab_bonus, BRUTE, blocked = def_check)
|
|
playsound(user, 'sound/weapons/kenetic_accel.ogg', 100, TRUE) //Seriously who spelled it wrong
|
|
else
|
|
if(!QDELETED(C))
|
|
C.total_damage += detonation_damage
|
|
L.apply_damage(detonation_damage, BRUTE, blocked = def_check)
|
|
|
|
/obj/item/kinetic_crusher/attack_secondary(atom/target, mob/living/user, clickparams)
|
|
return SECONDARY_ATTACK_CONTINUE_CHAIN
|
|
|
|
/obj/item/kinetic_crusher/afterattack_secondary(atom/target, mob/living/user, clickparams)
|
|
if(!HAS_TRAIT(src, TRAIT_WIELDED))
|
|
balloon_alert(user, "wield it first!")
|
|
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
|
|
if(target == user)
|
|
balloon_alert(user, "can't aim at yourself!")
|
|
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
|
|
fire_kinetic_blast(target, user, clickparams)
|
|
user.changeNext_move(CLICK_CD_MELEE)
|
|
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
|
|
|
|
/obj/item/kinetic_crusher/proc/fire_kinetic_blast(atom/target, mob/living/user, clickparams)
|
|
if(!charged)
|
|
return
|
|
var/modifiers = params2list(clickparams)
|
|
var/turf/proj_turf = user.loc
|
|
if(!isturf(proj_turf))
|
|
return
|
|
var/obj/projectile/destabilizer/destabilizer = new(proj_turf)
|
|
for(var/obj/item/crusher_trophy/attached_trophy as anything in trophies)
|
|
attached_trophy.on_projectile_fire(destabilizer, user)
|
|
destabilizer.preparePixelProjectile(target, user, modifiers)
|
|
destabilizer.firer = user
|
|
destabilizer.hammer_synced = src
|
|
playsound(user, 'sound/weapons/plasma_cutter.ogg', 100, TRUE)
|
|
destabilizer.fire()
|
|
charged = FALSE
|
|
update_appearance()
|
|
addtimer(CALLBACK(src, .proc/Recharge), charge_time)
|
|
|
|
/obj/item/kinetic_crusher/proc/Recharge()
|
|
if(!charged)
|
|
charged = TRUE
|
|
update_appearance()
|
|
playsound(src.loc, 'sound/weapons/kenetic_reload.ogg', 60, TRUE)
|
|
|
|
/obj/item/kinetic_crusher/ui_action_click(mob/user, actiontype)
|
|
set_light_on(!light_on)
|
|
playsound(user, 'sound/weapons/empty.ogg', 100, TRUE)
|
|
update_appearance()
|
|
|
|
|
|
/obj/item/kinetic_crusher/update_icon_state()
|
|
inhand_icon_state = "crusher[HAS_TRAIT(src, TRAIT_WIELDED)]" // this is not icon_state and not supported by 2hcomponent
|
|
return ..()
|
|
|
|
/obj/item/kinetic_crusher/update_overlays()
|
|
. = ..()
|
|
if(!charged)
|
|
. += "[icon_state]_uncharged"
|
|
if(light_on)
|
|
. += "[icon_state]_lit"
|
|
|
|
//destablizing force
|
|
/obj/projectile/destabilizer
|
|
name = "destabilizing force"
|
|
icon_state = "pulse1"
|
|
nodamage = TRUE
|
|
damage = 0 //We're just here to mark people. This is still a melee weapon.
|
|
damage_type = BRUTE
|
|
armor_flag = BOMB
|
|
range = 6
|
|
log_override = TRUE
|
|
var/obj/item/kinetic_crusher/hammer_synced
|
|
|
|
/obj/projectile/destabilizer/Destroy()
|
|
hammer_synced = null
|
|
return ..()
|
|
|
|
/obj/projectile/destabilizer/on_hit(atom/target, blocked = FALSE)
|
|
if(isliving(target))
|
|
var/mob/living/L = target
|
|
var/had_effect = (L.has_status_effect(/datum/status_effect/crusher_mark)) //used as a boolean
|
|
var/datum/status_effect/crusher_mark/CM = L.apply_status_effect(/datum/status_effect/crusher_mark, hammer_synced)
|
|
if(hammer_synced)
|
|
for(var/t in hammer_synced.trophies)
|
|
var/obj/item/crusher_trophy/T = t
|
|
T.on_mark_application(target, CM, had_effect)
|
|
var/target_turf = get_turf(target)
|
|
if(ismineralturf(target_turf))
|
|
var/turf/closed/mineral/M = target_turf
|
|
new /obj/effect/temp_visual/kinetic_blast(M)
|
|
M.gets_drilled(firer)
|
|
..()
|
|
|
|
//trophies
|
|
/obj/item/crusher_trophy
|
|
name = "tail spike"
|
|
desc = "A strange spike with no usage."
|
|
icon = 'icons/obj/lavaland/artefacts.dmi'
|
|
icon_state = "tail_spike"
|
|
var/bonus_value = 10 //if it has a bonus effect, this is how much that effect is
|
|
var/denied_type = /obj/item/crusher_trophy
|
|
|
|
/obj/item/crusher_trophy/examine(mob/living/user)
|
|
. = ..()
|
|
. += span_notice("Causes [effect_desc()] when attached to a kinetic crusher.")
|
|
|
|
/obj/item/crusher_trophy/proc/effect_desc()
|
|
return "errors"
|
|
|
|
/obj/item/crusher_trophy/attackby(obj/item/A, mob/living/user)
|
|
if(istype(A, /obj/item/kinetic_crusher))
|
|
add_to(A, user)
|
|
else
|
|
..()
|
|
|
|
/obj/item/crusher_trophy/proc/add_to(obj/item/kinetic_crusher/crusher, mob/living/user)
|
|
for(var/obj/item/crusher_trophy/trophy as anything in crusher.trophies)
|
|
if(istype(trophy, denied_type) || istype(src, trophy.denied_type))
|
|
to_chat(user, span_warning("You can't seem to attach [src] to [crusher]. Maybe remove a few trophies?"))
|
|
return FALSE
|
|
if(!user.transferItemToLoc(src, crusher))
|
|
return
|
|
crusher.trophies += src
|
|
to_chat(user, span_notice("You attach [src] to [crusher]."))
|
|
return TRUE
|
|
|
|
/obj/item/crusher_trophy/proc/remove_from(obj/item/kinetic_crusher/crusher, mob/living/user)
|
|
forceMove(get_turf(crusher))
|
|
crusher.trophies -= src
|
|
return TRUE
|
|
|
|
/obj/item/crusher_trophy/proc/on_melee_hit(mob/living/target, mob/living/user) //the target and the user
|
|
/obj/item/crusher_trophy/proc/on_projectile_fire(obj/projectile/destabilizer/marker, mob/living/user) //the projectile fired and the user
|
|
/obj/item/crusher_trophy/proc/on_mark_application(mob/living/target, datum/status_effect/crusher_mark/mark, had_mark) //the target, the mark applied, and if the target had a mark before
|
|
/obj/item/crusher_trophy/proc/on_mark_detonation(mob/living/target, mob/living/user) //the target and the user
|
|
|
|
//goliath
|
|
/obj/item/crusher_trophy/goliath_tentacle
|
|
name = "goliath tentacle"
|
|
desc = "A sliced-off goliath tentacle. Suitable as a trophy for a kinetic crusher."
|
|
icon_state = "goliath_tentacle"
|
|
denied_type = /obj/item/crusher_trophy/goliath_tentacle
|
|
bonus_value = 2
|
|
var/missing_health_ratio = 0.1
|
|
var/missing_health_desc = 10
|
|
|
|
/obj/item/crusher_trophy/goliath_tentacle/effect_desc()
|
|
return "mark detonation to do <b>[bonus_value]</b> more damage for every <b>[missing_health_desc]</b> health you are missing"
|
|
|
|
/obj/item/crusher_trophy/goliath_tentacle/on_mark_detonation(mob/living/target, mob/living/user)
|
|
var/missing_health = user.maxHealth - user.health
|
|
missing_health *= missing_health_ratio //bonus is active at all times, even if you're above 90 health
|
|
missing_health *= bonus_value //multiply the remaining amount by bonus_value
|
|
if(missing_health > 0)
|
|
target.adjustBruteLoss(missing_health) //and do that much damage
|
|
|
|
//watcher
|
|
/obj/item/crusher_trophy/watcher_wing
|
|
name = "watcher wing"
|
|
desc = "A wing ripped from a watcher. Suitable as a trophy for a kinetic crusher."
|
|
icon_state = "watcher_wing"
|
|
denied_type = /obj/item/crusher_trophy/watcher_wing
|
|
bonus_value = 5
|
|
|
|
/obj/item/crusher_trophy/watcher_wing/effect_desc()
|
|
return "mark detonation to prevent certain creatures from using certain attacks for <b>[bonus_value*0.1]</b> second\s"
|
|
|
|
/obj/item/crusher_trophy/watcher_wing/on_mark_detonation(mob/living/target, mob/living/user)
|
|
if(ishostile(target))
|
|
var/mob/living/simple_animal/hostile/H = target
|
|
if(H.ranged) //briefly delay ranged attacks
|
|
if(H.ranged_cooldown >= world.time)
|
|
H.ranged_cooldown += bonus_value
|
|
else
|
|
H.ranged_cooldown = bonus_value + world.time
|
|
|
|
//magmawing watcher
|
|
/obj/item/crusher_trophy/blaster_tubes/magma_wing
|
|
name = "magmawing watcher wing"
|
|
desc = "A still-searing wing from a magmawing watcher. Suitable as a trophy for a kinetic crusher."
|
|
icon_state = "magma_wing"
|
|
gender = NEUTER
|
|
bonus_value = 5
|
|
|
|
/obj/item/crusher_trophy/blaster_tubes/magma_wing/effect_desc()
|
|
return "mark detonation to make the next destabilizer shot deal <b>[bonus_value]</b> damage"
|
|
|
|
/obj/item/crusher_trophy/blaster_tubes/magma_wing/on_projectile_fire(obj/projectile/destabilizer/marker, mob/living/user)
|
|
if(deadly_shot)
|
|
marker.name = "heated [marker.name]"
|
|
marker.icon_state = "lava"
|
|
marker.damage = bonus_value
|
|
marker.nodamage = FALSE
|
|
deadly_shot = FALSE
|
|
|
|
//icewing watcher
|
|
/obj/item/crusher_trophy/watcher_wing/ice_wing
|
|
name = "icewing watcher wing"
|
|
desc = "A carefully preserved frozen wing from an icewing watcher. Suitable as a trophy for a kinetic crusher."
|
|
icon_state = "ice_wing"
|
|
bonus_value = 8
|
|
|
|
//legion
|
|
/obj/item/crusher_trophy/legion_skull
|
|
name = "legion skull"
|
|
desc = "A dead and lifeless legion skull. Suitable as a trophy for a kinetic crusher."
|
|
icon_state = "legion_skull"
|
|
denied_type = /obj/item/crusher_trophy/legion_skull
|
|
bonus_value = 3
|
|
|
|
/obj/item/crusher_trophy/legion_skull/effect_desc()
|
|
return "a kinetic crusher to recharge <b>[bonus_value*0.1]</b> second\s faster"
|
|
|
|
/obj/item/crusher_trophy/legion_skull/add_to(obj/item/kinetic_crusher/H, mob/living/user)
|
|
. = ..()
|
|
if(.)
|
|
H.charge_time -= bonus_value
|
|
|
|
/obj/item/crusher_trophy/legion_skull/remove_from(obj/item/kinetic_crusher/H, mob/living/user)
|
|
. = ..()
|
|
if(.)
|
|
H.charge_time += bonus_value
|
|
|
|
//blood-drunk hunter
|
|
/obj/item/crusher_trophy/miner_eye
|
|
name = "eye of a blood-drunk hunter"
|
|
desc = "Its pupil is collapsed and turned to mush. Suitable as a trophy for a kinetic crusher."
|
|
icon_state = "hunter_eye"
|
|
denied_type = /obj/item/crusher_trophy/miner_eye
|
|
|
|
/obj/item/crusher_trophy/miner_eye/effect_desc()
|
|
return "mark detonation to grant stun immunity and <b>90%</b> damage reduction for <b>1</b> second"
|
|
|
|
/obj/item/crusher_trophy/miner_eye/on_mark_detonation(mob/living/target, mob/living/user)
|
|
user.apply_status_effect(/datum/status_effect/blooddrunk)
|
|
|
|
//ash drake
|
|
/obj/item/crusher_trophy/tail_spike
|
|
desc = "A spike taken from an ash drake's tail. Suitable as a trophy for a kinetic crusher."
|
|
denied_type = /obj/item/crusher_trophy/tail_spike
|
|
bonus_value = 5
|
|
|
|
/obj/item/crusher_trophy/tail_spike/effect_desc()
|
|
return "mark detonation to do <b>[bonus_value]</b> damage to nearby creatures and push them back"
|
|
|
|
/obj/item/crusher_trophy/tail_spike/on_mark_detonation(mob/living/target, mob/living/user)
|
|
for(var/mob/living/L in oview(2, user))
|
|
if(L.stat == DEAD)
|
|
continue
|
|
playsound(L, 'sound/magic/fireball.ogg', 20, TRUE)
|
|
new /obj/effect/temp_visual/fire(L.loc)
|
|
addtimer(CALLBACK(src, .proc/pushback, L, user), 1) //no free backstabs, we push AFTER module stuff is done
|
|
L.adjustFireLoss(bonus_value, forced = TRUE)
|
|
|
|
/obj/item/crusher_trophy/tail_spike/proc/pushback(mob/living/target, mob/living/user)
|
|
if(!QDELETED(target) && !QDELETED(user) && (!target.anchored || ismegafauna(target))) //megafauna will always be pushed
|
|
step(target, get_dir(user, target))
|
|
|
|
//bubblegum
|
|
/obj/item/crusher_trophy/demon_claws
|
|
name = "demon claws"
|
|
desc = "A set of blood-drenched claws from a massive demon's hand. Suitable as a trophy for a kinetic crusher."
|
|
icon_state = "demon_claws"
|
|
gender = PLURAL
|
|
denied_type = /obj/item/crusher_trophy/demon_claws
|
|
bonus_value = 10
|
|
var/static/list/damage_heal_order = list(BRUTE, BURN, OXY)
|
|
|
|
/obj/item/crusher_trophy/demon_claws/effect_desc()
|
|
return "melee hits to do <b>[bonus_value * 0.2]</b> more damage and heal you for <b>[bonus_value * 0.1]</b>, with <b>5X</b> effect on mark detonation"
|
|
|
|
/obj/item/crusher_trophy/demon_claws/add_to(obj/item/kinetic_crusher/H, mob/living/user)
|
|
. = ..()
|
|
if(.)
|
|
H.force += bonus_value * 0.2
|
|
H.detonation_damage += bonus_value * 0.8
|
|
AddComponent(/datum/component/two_handed, force_wielded=(20 + bonus_value * 0.2))
|
|
|
|
/obj/item/crusher_trophy/demon_claws/remove_from(obj/item/kinetic_crusher/H, mob/living/user)
|
|
. = ..()
|
|
if(.)
|
|
H.force -= bonus_value * 0.2
|
|
H.detonation_damage -= bonus_value * 0.8
|
|
AddComponent(/datum/component/two_handed, force_wielded=20)
|
|
|
|
/obj/item/crusher_trophy/demon_claws/on_melee_hit(mob/living/target, mob/living/user)
|
|
user.heal_ordered_damage(bonus_value * 0.1, damage_heal_order)
|
|
|
|
/obj/item/crusher_trophy/demon_claws/on_mark_detonation(mob/living/target, mob/living/user)
|
|
user.heal_ordered_damage(bonus_value * 0.4, damage_heal_order)
|
|
|
|
//colossus
|
|
/obj/item/crusher_trophy/blaster_tubes
|
|
name = "blaster tubes"
|
|
desc = "The blaster tubes from a colossus's arm. Suitable as a trophy for a kinetic crusher."
|
|
icon_state = "blaster_tubes"
|
|
gender = PLURAL
|
|
denied_type = /obj/item/crusher_trophy/blaster_tubes
|
|
bonus_value = 15
|
|
var/deadly_shot = FALSE
|
|
|
|
/obj/item/crusher_trophy/blaster_tubes/effect_desc()
|
|
return "mark detonation to make the next destabilizer shot deal <b>[bonus_value]</b> damage but move slower"
|
|
|
|
/obj/item/crusher_trophy/blaster_tubes/on_projectile_fire(obj/projectile/destabilizer/marker, mob/living/user)
|
|
if(deadly_shot)
|
|
marker.name = "deadly [marker.name]"
|
|
marker.icon_state = "chronobolt"
|
|
marker.damage = bonus_value
|
|
marker.nodamage = FALSE
|
|
marker.speed = 2
|
|
deadly_shot = FALSE
|
|
|
|
/obj/item/crusher_trophy/blaster_tubes/on_mark_detonation(mob/living/target, mob/living/user)
|
|
deadly_shot = TRUE
|
|
addtimer(CALLBACK(src, .proc/reset_deadly_shot), 300, TIMER_UNIQUE|TIMER_OVERRIDE)
|
|
|
|
/obj/item/crusher_trophy/blaster_tubes/proc/reset_deadly_shot()
|
|
deadly_shot = FALSE
|
|
|
|
//hierophant
|
|
/obj/item/crusher_trophy/vortex_talisman
|
|
name = "vortex talisman"
|
|
desc = "A glowing trinket that was originally the Hierophant's beacon. Suitable as a trophy for a kinetic crusher."
|
|
icon_state = "vortex_talisman"
|
|
denied_type = /obj/item/crusher_trophy/vortex_talisman
|
|
|
|
/obj/item/crusher_trophy/vortex_talisman/effect_desc()
|
|
return "mark detonation to create a homing hierophant chaser"
|
|
|
|
/obj/item/crusher_trophy/vortex_talisman/on_mark_detonation(mob/living/target, mob/living/user)
|
|
if(isliving(target))
|
|
var/obj/effect/temp_visual/hierophant/chaser/chaser = new(get_turf(user), user, target, 3, TRUE)
|
|
chaser.monster_damage_boost = FALSE // Weaker cuz no cooldown
|
|
chaser.damage = 20
|
|
log_combat(user, target, "fired a chaser at", src)
|