mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-13 00:55:20 +01:00
Removes the skyrat crusher overrides for the sake of code stability and because nobody's maintaining it
This commit is contained in:
@@ -391,23 +391,13 @@
|
||||
|
||||
add_action(ACTION_GIBTONITE_DEFUSED, min(40, 20 * (10 - det_time))) // 40 to 180 points depending on speed
|
||||
|
||||
//SKYRAT EDIT START
|
||||
/*
|
||||
/datum/component/style/proc/on_crusher_detonate(datum/source, mob/living/target, obj/item/kinetic_crusher/crusher, backstabbed)
|
||||
*/
|
||||
/datum/component/style/proc/on_crusher_detonate(datum/component/kinetic_crusher/source, mob/living/target, obj/item/kinetic_crusher/crusher, backstabbed)
|
||||
//SKYRAT EDIT END
|
||||
SIGNAL_HANDLER
|
||||
|
||||
if(target.stat == DEAD)
|
||||
return
|
||||
|
||||
//SKYRAT EDIT START
|
||||
/*
|
||||
var/has_brimdemon_trophy = locate(/obj/item/crusher_trophy/brimdemon_fang) in crusher.trophies
|
||||
*/
|
||||
var/has_brimdemon_trophy = locate(/obj/item/crusher_trophy/brimdemon_fang) in source.stored_trophies
|
||||
//SKYRAT EDIT END
|
||||
|
||||
add_action(ACTION_MARK_DETONATED, round((backstabbed ? 60 : 30) * (ismegafauna(target) ? 1.5 : 1) * (has_brimdemon_trophy ? 1.25 : 1)))
|
||||
|
||||
|
||||
@@ -347,8 +347,6 @@
|
||||
if(owner.reagents)
|
||||
owner.reagents.del_reagent(/datum/reagent/water/holywater) //can't be deconverted
|
||||
|
||||
//SKYRAT EDIT START - OVERRIDEN IN MODULAR
|
||||
/*
|
||||
/datum/status_effect/crusher_mark
|
||||
id = "crusher_mark"
|
||||
duration = 300 //if you leave for 30 seconds you lose the mark, deal with it
|
||||
@@ -390,9 +388,6 @@
|
||||
QDEL_NULL(marked_underlay)
|
||||
return ..()
|
||||
|
||||
*/
|
||||
//SKYRAT EDIT END
|
||||
|
||||
// Object used to apply a underlay to the mob that gets this status applied
|
||||
/obj/effect/abstract/crusher_mark
|
||||
name = "Crusher mark underlay"
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
/* SKYRAT EDIT START - OVERRIDEN IN modular_skyrat/master_files/code/modules/mining/equipment/kinetic_crusher.dm
|
||||
/**
|
||||
* Kinetic Crusher
|
||||
*
|
||||
@@ -269,7 +268,6 @@
|
||||
/obj/item/kinetic_crusher/compact //for admins
|
||||
name = "compact kinetic crusher"
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
*/ // SKYRAT EDIT END
|
||||
|
||||
//destablizing force
|
||||
/obj/projectile/destabilizer
|
||||
@@ -327,7 +325,6 @@
|
||||
// If there is a mind, check for skill modifier to allow them to reload faster.
|
||||
if(carbon_firer.mind && used_crusher)
|
||||
skill_modifier = carbon_firer.mind.get_skill_modifier(/datum/skill/mining, SKILL_SPEED_MODIFIER)
|
||||
// BUBBER TODO - Fix this
|
||||
//used_crusher.attempt_recharge_projectile(used_crusher.charge_time * skill_modifier) //If you hit a mineral, you might get a quicker reload. epic gamer style.
|
||||
used_crusher.attempt_recharge_projectile(used_crusher.charge_time * skill_modifier) //If you hit a mineral, you might get a quicker reload. epic gamer style.
|
||||
|
||||
return ..()
|
||||
|
||||
@@ -28,8 +28,6 @@
|
||||
return ..()
|
||||
add_to(attacking_item, user)
|
||||
|
||||
// SKYRAT EDIT BEGIN - Moved to modular // BUBBER TODO - Fix the override hell
|
||||
/*
|
||||
/// Tries to add the trophy to our crusher
|
||||
/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)
|
||||
@@ -46,7 +44,6 @@
|
||||
/obj/item/crusher_trophy/proc/remove_from(obj/item/kinetic_crusher/crusher, mob/living/user)
|
||||
forceMove(get_turf(crusher))
|
||||
return TRUE
|
||||
*/ // SKYRAT EDIT END
|
||||
|
||||
/// Does an effect when you hit a mob with a crusher
|
||||
/obj/item/crusher_trophy/proc/on_melee_hit(mob/living/target, mob/living/user) //the target and the user
|
||||
|
||||
@@ -221,13 +221,7 @@
|
||||
L.add_mob_memory(/datum/memory/megafauna_slayer, antagonist = src)
|
||||
L.client.give_award(/datum/award/achievement/boss/boss_killer, L)
|
||||
L.client.give_award(achievement_type, L)
|
||||
//SKYRAT EDIT START
|
||||
/*
|
||||
if(crusher_kill && istype(L.get_active_held_item(), /obj/item/kinetic_crusher))
|
||||
*/
|
||||
var/obj/item/held_item = L.get_active_held_item()
|
||||
if(crusher_kill && (istype(held_item, /obj/item/kinetic_gauntlet) || held_item.GetComponent(/datum/component/kinetic_crusher))) //trust me, i hate this just as much as you
|
||||
//SKYRAT EDIT END
|
||||
L.client.give_award(crusher_achievement_type, L)
|
||||
L.client.give_award(/datum/award/score/boss_score, L) //Score progression for bosses killed in general
|
||||
L.client.give_award(score_achievement_type, L) //Score progression for specific boss killed
|
||||
|
||||
@@ -1,2 +0,0 @@
|
||||
/datum/action/item_action/extend_gauntlets
|
||||
name = "Extend Gauntlets"
|
||||
@@ -1,224 +0,0 @@
|
||||
/datum/component/kinetic_crusher
|
||||
/// The attached trophies.
|
||||
var/list/stored_trophies = list()
|
||||
/// How much damage to deal on mark detonation?
|
||||
var/detonation_damage
|
||||
/// How much EXTRA damage to deal on a backstab?
|
||||
var/backstab_bonus
|
||||
/// Does what you think it does.
|
||||
var/recharge_speed
|
||||
/// Callback to check against for most actions.
|
||||
var/datum/callback/attack_check
|
||||
/// Callback to check against for mark detonation.
|
||||
var/datum/callback/detonate_check
|
||||
/// Callback to execute after a successful mark detonation.
|
||||
var/datum/callback/after_detonate
|
||||
|
||||
/// Are we ready to shoot another destabilizer shot?
|
||||
var/charged = TRUE
|
||||
/// COMSIG_ITEM_ATTACK procs before the damage is applied. Egh.
|
||||
var/cached_health = null
|
||||
|
||||
/datum/component/kinetic_crusher/Initialize(detonation_damage, backstab_bonus, recharge_speed, datum/callback/attack_check, datum/callback/detonate_check, datum/callback/after_detonate)
|
||||
if(!isitem(parent))
|
||||
return COMPONENT_INCOMPATIBLE
|
||||
|
||||
src.detonation_damage = detonation_damage
|
||||
src.backstab_bonus = backstab_bonus
|
||||
src.recharge_speed = recharge_speed
|
||||
|
||||
src.attack_check = attack_check
|
||||
src.detonate_check = detonate_check
|
||||
src.after_detonate = after_detonate
|
||||
|
||||
/datum/component/kinetic_crusher/RegisterWithParent(datum/parent = src.parent)
|
||||
RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine))
|
||||
RegisterSignal(parent, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(on_update_overlays))
|
||||
RegisterSignal(parent, COMSIG_ATOM_ATTACKBY, PROC_REF(on_attackby))
|
||||
|
||||
RegisterSignal(parent, COMSIG_ITEM_ATTACK, PROC_REF(on_attack))
|
||||
RegisterSignal(parent, COMSIG_ITEM_ATTACK_SECONDARY, PROC_REF(on_attack_secondary))
|
||||
RegisterSignal(parent, COMSIG_ITEM_AFTERATTACK, PROC_REF(on_afterattack))
|
||||
RegisterSignal(parent, COMSIG_ITEM_INTERACTING_WITH_ATOM, PROC_REF(on_interact))
|
||||
RegisterSignal(parent, COMSIG_ITEM_INTERACTING_WITH_ATOM_SECONDARY, PROC_REF(on_interact_secondary))
|
||||
RegisterSignal(parent, COMSIG_RANGED_ITEM_INTERACTING_WITH_ATOM_SECONDARY, PROC_REF(on_interact_secondary))
|
||||
|
||||
/datum/component/kinetic_crusher/Destroy(force)
|
||||
QDEL_LIST(stored_trophies) //dont be a dummy
|
||||
attack_check = null
|
||||
detonate_check = null
|
||||
after_detonate = null
|
||||
return ..()
|
||||
|
||||
/datum/component/kinetic_crusher/proc/on_examine(obj/item/source, mob/user, list/examine_list)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
var/force
|
||||
var/datum/component/two_handed/comp = source.GetComponent(/datum/component/two_handed)
|
||||
if(istype(source, /obj/item/clothing/gloves/kinetic_gauntlets)) //ughhhhh
|
||||
var/obj/item/clothing/gloves/kinetic_gauntlets/gauntlets = parent
|
||||
force = gauntlets.right_gauntlet?.force || gauntlets.left_gauntlet.force
|
||||
else if(comp)
|
||||
force = comp.force_wielded
|
||||
else
|
||||
force = source.force
|
||||
|
||||
examine_list += 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.")
|
||||
examine_list += 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/obj/item/crusher_trophy/trophy as anything in stored_trophies)
|
||||
examine_list += span_notice("It has \a [trophy] attached, which causes [trophy.effect_desc()].")
|
||||
|
||||
/datum/component/kinetic_crusher/proc/on_update_overlays(atom/source, list/overlays)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
if(!charged)
|
||||
overlays += "[source.icon_state]_uncharged"
|
||||
|
||||
/datum/component/kinetic_crusher/proc/on_attackby(datum/source, obj/item/attacking_item, mob/user, params)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
if(attacking_item.tool_behaviour == TOOL_CROWBAR)
|
||||
if(!LAZYLEN(stored_trophies))
|
||||
to_chat(user, span_warning("There are no trophies on [source]."))
|
||||
return COMPONENT_NO_AFTERATTACK
|
||||
|
||||
to_chat(user, span_notice("You remove [source]'s trophies."))
|
||||
attacking_item.play_tool_sound(src)
|
||||
for(var/obj/item/crusher_trophy/trophy as anything in stored_trophies)
|
||||
trophy.remove_from(parent, user, src)
|
||||
|
||||
if(istype(parent, /obj/item/clothing/gloves/kinetic_gauntlets))
|
||||
var/obj/item/clothing/gloves/kinetic_gauntlets/gauntlets = parent //CODE DEBT CODE DEBT WOOOOO
|
||||
gauntlets.left_gauntlet?.force = gauntlets.force * 5
|
||||
gauntlets.right_gauntlet?.force = gauntlets.force * 5
|
||||
|
||||
return COMPONENT_NO_AFTERATTACK
|
||||
|
||||
if(istype(attacking_item, /obj/item/crusher_trophy))
|
||||
var/obj/item/crusher_trophy/trophy = attacking_item
|
||||
trophy.add_to(parent, user, src)
|
||||
return COMPONENT_NO_AFTERATTACK
|
||||
|
||||
/datum/component/kinetic_crusher/proc/on_trophy_moved(obj/item/crusher_trophy/source, atom/oldloc, direction)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
source.remove_from(parent, null, src)
|
||||
|
||||
/datum/component/kinetic_crusher/proc/on_attack(obj/item/source, mob/living/target, mob/living/carbon/user)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
cached_health = target.health
|
||||
|
||||
var/cancel_attack = NONE
|
||||
if(attack_check && !attack_check.Invoke(user, &cancel_attack))
|
||||
return cancel_attack
|
||||
|
||||
if(!target.has_status_effect(/datum/status_effect/crusher_damage))
|
||||
target.apply_status_effect(/datum/status_effect/crusher_damage)
|
||||
|
||||
for(var/obj/item/crusher_trophy/trophy as anything in stored_trophies)
|
||||
trophy.on_melee_hit(target, user)
|
||||
|
||||
|
||||
/datum/component/kinetic_crusher/proc/on_attack_secondary(obj/item/source, mob/living/victim, mob/living/user, params)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
var/cancel_attack = NONE
|
||||
if(attack_check && !attack_check.Invoke(user, &cancel_attack))
|
||||
return cancel_attack
|
||||
|
||||
return COMPONENT_SECONDARY_CONTINUE_ATTACK_CHAIN
|
||||
|
||||
/datum/component/kinetic_crusher/proc/on_afterattack(obj/item/source, mob/living/target, mob/living/user, click_parameters)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
if(!isliving(target))
|
||||
return
|
||||
|
||||
var/datum/status_effect/crusher_damage/damage_effect = target.has_status_effect(/datum/status_effect/crusher_damage) || target.apply_status_effect(/datum/status_effect/crusher_damage)
|
||||
if(damage_effect && isnum(cached_health)) //legiooooons
|
||||
damage_effect.total_damage += cached_health - target.health //carry over from the /on_attack()
|
||||
cached_health = null
|
||||
|
||||
if(detonate_check && !detonate_check.Invoke(user))
|
||||
return
|
||||
|
||||
if(!target.remove_status_effect(/datum/status_effect/crusher_mark, src))
|
||||
return
|
||||
|
||||
var/backstabbed = FALSE
|
||||
var/dealt_damage = detonation_damage
|
||||
if(target.dir & get_dir(user, target))
|
||||
backstabbed = TRUE
|
||||
dealt_damage += backstab_bonus
|
||||
playsound(user, 'sound/items/weapons/kinetic_accel.ogg', 100, TRUE)
|
||||
|
||||
damage_effect.total_damage += dealt_damage
|
||||
new /obj/effect/temp_visual/kinetic_blast(get_turf(target))
|
||||
|
||||
var/past_damage = target.maxHealth - target.health
|
||||
for(var/obj/item/crusher_trophy/trophy as anything in stored_trophies)
|
||||
trophy.on_mark_detonation(target, user)
|
||||
|
||||
damage_effect.total_damage += dealt_damage + target.get_total_damage() - past_damage //we did some damage, but let's not assume how much we did
|
||||
|
||||
after_detonate?.InvokeAsync(user, target)
|
||||
SEND_SIGNAL(user, COMSIG_LIVING_CRUSHER_DETONATE, target, parent, backstabbed)
|
||||
target.apply_damage(dealt_damage, BRUTE, blocked = target.getarmor(type = BOMB))
|
||||
|
||||
|
||||
/datum/component/kinetic_crusher/proc/on_interact(obj/item/source, mob/living/user, atom/target, modifiers)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
if(!istype(target, /obj/item/crusher_trophy))
|
||||
return
|
||||
|
||||
. = ITEM_INTERACT_SUCCESS
|
||||
var/obj/item/crusher_trophy/trophy = target
|
||||
trophy.add_to(parent, user, src)
|
||||
|
||||
if(istype(parent, /obj/item/clothing/gloves/kinetic_gauntlets))
|
||||
var/obj/item/clothing/gloves/kinetic_gauntlets/gauntlets = parent //CODE DEBT CODE DEBT WOOOOO
|
||||
gauntlets.left_gauntlet?.force = gauntlets.force * 5
|
||||
gauntlets.right_gauntlet?.force = gauntlets.force * 5
|
||||
|
||||
/datum/component/kinetic_crusher/proc/on_interact_secondary(obj/item/source, mob/living/user, atom/target, list/modifiers)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
var/_ = TRUE
|
||||
if(attack_check && _ /*unused var error*/&& !attack_check.Invoke(user, &_))
|
||||
return
|
||||
|
||||
if(!charged)
|
||||
return
|
||||
|
||||
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 stored_trophies)
|
||||
attached_trophy.on_projectile_fire(destabilizer, user)
|
||||
|
||||
destabilizer.aim_projectile(target, user, modifiers)
|
||||
destabilizer.hammer_synced = src
|
||||
destabilizer.firer = user
|
||||
|
||||
// just typing spawn(-1) is faster ugghhh tg
|
||||
INVOKE_ASYNC(destabilizer, TYPE_PROC_REF(/obj/projectile, fire))
|
||||
playsound(user, 'sound/items/weapons/plasma_cutter.ogg', 100, TRUE)
|
||||
|
||||
var/obj/item/crusher = parent
|
||||
charged = FALSE
|
||||
crusher.update_appearance()
|
||||
addtimer(CALLBACK(src, PROC_REF(recharge_shot)), recharge_speed)
|
||||
return ITEM_INTERACT_SUCCESS
|
||||
|
||||
|
||||
|
||||
/datum/component/kinetic_crusher/proc/recharge_shot()
|
||||
var/obj/item/crusher = parent
|
||||
charged = TRUE
|
||||
crusher.update_appearance()
|
||||
playsound(crusher.loc, 'sound/items/weapons/kinetic_reload.ogg', 60, TRUE)
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
/datum/status_effect/crusher_mark
|
||||
id = "crusher_mark"
|
||||
duration = 300 //if you leave for 30 seconds you lose the mark, deal with it
|
||||
status_type = STATUS_EFFECT_MULTIPLE
|
||||
alert_type = null
|
||||
var/mutable_appearance/marked_underlay
|
||||
var/datum/component/kinetic_crusher/hammer_synced
|
||||
|
||||
/datum/status_effect/crusher_mark/on_creation(mob/living/new_owner, obj/item/kinetic_crusher/new_hammer_synced)
|
||||
hammer_synced = new_hammer_synced
|
||||
return ..()
|
||||
|
||||
/datum/status_effect/crusher_mark/on_apply()
|
||||
if(owner.mob_size >= MOB_SIZE_LARGE && !HAS_TRAIT(owner, TRAIT_CRUSHER_MARK_IMMUNE))
|
||||
marked_underlay = mutable_appearance('icons/effects/effects.dmi', "shield2")
|
||||
marked_underlay.pixel_x = -owner.pixel_x
|
||||
marked_underlay.pixel_y = -owner.pixel_y
|
||||
|
||||
var/obj/item/crusher_trophy/watcher_eye/eye = locate() in hammer_synced.stored_trophies
|
||||
if(eye) //we must do this here as adding (and deleting!) to atom.underlays works by value, not reference
|
||||
marked_underlay.icon_state = "shield-grey"
|
||||
marked_underlay.color = eye.used_color
|
||||
|
||||
owner.underlays += marked_underlay
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/datum/status_effect/crusher_mark/Destroy()
|
||||
hammer_synced = null
|
||||
owner?.underlays -= marked_underlay
|
||||
QDEL_NULL(marked_underlay)
|
||||
return ..()
|
||||
|
||||
//we will only clear ourselves if the crusher is the one that owns us.
|
||||
/datum/status_effect/crusher_mark/before_remove(datum/component/kinetic_crusher/attacking_hammer)
|
||||
return (attacking_hammer == hammer_synced)
|
||||
-3
@@ -1,3 +0,0 @@
|
||||
/datum/orderable_item/mining/kinetic_gauntlets
|
||||
purchase_path = /obj/item/clothing/gloves/kinetic_gauntlets
|
||||
cost_per_order = 1250
|
||||
@@ -1,232 +0,0 @@
|
||||
/obj/item/kinetic_crusher
|
||||
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."
|
||||
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'
|
||||
resistance_flags = FIRE_PROOF
|
||||
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 = HALF_SHEET_MATERIAL_AMOUNT * 1.15,
|
||||
/datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT * 2.075
|
||||
)
|
||||
hitsound = 'sound/items/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_color = "#ffff66"
|
||||
light_on = FALSE
|
||||
light_power = 1.2
|
||||
light_range = 5
|
||||
light_system = OVERLAY_LIGHT
|
||||
|
||||
var/charge_time = 1.5 SECONDS
|
||||
var/detonation_damage = 50
|
||||
var/backstab_bonus = 30
|
||||
|
||||
var/current_inhand_icon_state = "crusher" //variable used by retool kits when changing the crusher's appearance
|
||||
var/projectile_icon = "pulse1" //variable used by retool kits when changing the crusher's projectile sprite
|
||||
|
||||
/// List of all crusher trophies attached to this.
|
||||
var/list/obj/item/crusher_trophy/trophies = list()
|
||||
|
||||
/obj/item/kinetic_crusher/Initialize(mapload)
|
||||
. = ..()
|
||||
AddComponent(/datum/component/butchering, speed = 6 SECONDS, effectiveness = 110)
|
||||
AddComponent(/datum/component/kinetic_crusher, detonation_damage, backstab_bonus, charge_time, CALLBACK(src, PROC_REF(attack_check)), CALLBACK(src, PROC_REF(attack_check)))
|
||||
AddComponent(/datum/component/two_handed, force_wielded = 20, force_unwielded = 0, unwield_callback = CALLBACK(src, PROC_REF(on_unwield)))
|
||||
RegisterSignal(src, COMSIG_ATOM_SABOTEUR_ACT, PROC_REF(do_saboteur))
|
||||
|
||||
/obj/item/kinetic_crusher/proc/attack_check(mob/user, cancel_attack)
|
||||
if(HAS_TRAIT(src, TRAIT_WIELDED))
|
||||
return TRUE
|
||||
|
||||
to_chat(user, span_warning("[src] is too heavy to use with one hand! You fumble and drop everything."))
|
||||
user.drop_all_held_items()
|
||||
if(cancel_attack)
|
||||
*cancel_attack = COMPONENT_CANCEL_ATTACK_CHAIN
|
||||
return FALSE
|
||||
|
||||
/obj/item/kinetic_crusher/ui_action_click(mob/user, actiontype)
|
||||
set_light_on(!light_on)
|
||||
playsound(user, 'sound/items/weapons/empty.ogg', 100, TRUE)
|
||||
update_appearance()
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
/////// HACK TO WORK AROUND TWOHANDED NOT RESPECTING FORCE_UNWIELDED=0 ///////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
/obj/item/kinetic_crusher/proc/on_unwield()
|
||||
SIGNAL_HANDLER
|
||||
|
||||
force = 0 //the abrasive comments is so you notice. seriously, this is BAD.
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
/////// HACK TO WORK AROUND TWOHANDED NOT RESPECTING FORCE_UNWIELDED=0 ///////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/obj/item/kinetic_crusher/proc/do_saboteur(datum/source, disrupt_duration)
|
||||
set_light_on(FALSE)
|
||||
playsound(src, 'sound/items/weapons/empty.ogg', 100, TRUE)
|
||||
return COMSIG_SABOTEUR_SUCCESS
|
||||
|
||||
/obj/item/kinetic_crusher/update_icon_state()
|
||||
inhand_icon_state = "[current_inhand_icon_state][HAS_TRAIT(src, TRAIT_WIELDED)]" // this is not icon_state and not supported by 2hcomponent
|
||||
return ..()
|
||||
|
||||
/obj/item/kinetic_crusher/update_overlays()
|
||||
. = ..()
|
||||
if(light_on)
|
||||
. += "[icon_state]_lit"
|
||||
|
||||
/obj/item/kinetic_crusher/compact //for admins
|
||||
name = "compact kinetic crusher"
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
|
||||
//stupid to have both crusher and crusher_comp as params but it helps with reducing core code mods
|
||||
/obj/item/crusher_trophy/proc/add_to(obj/item/crusher, mob/living/user, datum/component/kinetic_crusher/crusher_comp)
|
||||
for(var/obj/item/crusher_trophy/trophy as anything in crusher_comp.stored_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_comp.stored_trophies += src
|
||||
crusher_comp.RegisterSignal(src, COMSIG_MOVABLE_MOVED, TYPE_PROC_REF(/datum/component/kinetic_crusher, on_trophy_moved))
|
||||
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, datum/component/kinetic_crusher/crusher_comp)
|
||||
crusher_comp.UnregisterSignal(src, COMSIG_MOVABLE_MOVED)
|
||||
crusher_comp.stored_trophies -= src
|
||||
forceMove(get_turf(crusher))
|
||||
return TRUE
|
||||
|
||||
/obj/projectile/destabilizer
|
||||
name = "destabilizing force"
|
||||
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/datum/component/kinetic_crusher/hammer_synced
|
||||
|
||||
/obj/projectile/destabilizer/Destroy()
|
||||
hammer_synced = null
|
||||
return ..()
|
||||
|
||||
/obj/projectile/destabilizer/on_hit(atom/target, blocked = 0, pierce_hit)
|
||||
if(isliving(target))
|
||||
var/mob/living/living = target
|
||||
var/has_owned_mark = FALSE
|
||||
for(var/datum/status_effect/crusher_mark/crusher_mark as anything in living.get_all_status_effect_of_id(/datum/status_effect/crusher_mark))
|
||||
if(crusher_mark.hammer_synced != hammer_synced)
|
||||
continue
|
||||
|
||||
has_owned_mark = TRUE
|
||||
break
|
||||
|
||||
if(!has_owned_mark)
|
||||
living.apply_status_effect(/datum/status_effect/crusher_mark, hammer_synced)
|
||||
|
||||
var/turf/closed/mineral/target_turf = get_turf(target) //sure i guess
|
||||
if(istype(target_turf))
|
||||
new /obj/effect/temp_visual/kinetic_blast(target_turf)
|
||||
target_turf.gets_drilled(firer)
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/item/crusher_trophy/legion_skull/add_to(obj/item/kinetic_crusher/crusher, mob/living/user, datum/component/kinetic_crusher/crusher_comp)
|
||||
. = ..()
|
||||
if(.)
|
||||
crusher_comp.recharge_speed -= bonus_value
|
||||
|
||||
/obj/item/crusher_trophy/legion_skull/remove_from(obj/item/kinetic_crusher/crusher, mob/living/user, datum/component/kinetic_crusher/crusher_comp)
|
||||
. = ..()
|
||||
if(.)
|
||||
crusher_comp.recharge_speed += bonus_value
|
||||
|
||||
|
||||
/obj/item/crusher_trophy/demon_claws/add_to(obj/item/kinetic_crusher/crusher, mob/living/user, datum/component/kinetic_crusher/crusher_comp)
|
||||
. = ..()
|
||||
if(!.)
|
||||
return
|
||||
|
||||
crusher.force += bonus_value * 0.2
|
||||
crusher_comp.detonation_damage += bonus_value * 0.8
|
||||
|
||||
var/datum/component/two_handed/two_handed = crusher.GetComponent(/datum/component/two_handed)
|
||||
two_handed?.force_wielded += bonus_value * 0.2
|
||||
|
||||
/obj/item/crusher_trophy/demon_claws/remove_from(obj/item/kinetic_crusher/crusher, mob/living/user, datum/component/kinetic_crusher/crusher_comp)
|
||||
. = ..()
|
||||
if(!.)
|
||||
return
|
||||
|
||||
crusher.force -= bonus_value * 0.2
|
||||
crusher_comp.detonation_damage -= bonus_value * 0.8
|
||||
|
||||
var/datum/component/two_handed/two_handed = crusher.GetComponent(/datum/component/two_handed)
|
||||
two_handed?.force_wielded -= bonus_value * 0.2
|
||||
|
||||
|
||||
/obj/item/crusher_trophy/wendigo_horn/add_to(obj/item/kinetic_crusher/crusher, mob/living/user)
|
||||
. = ..()
|
||||
if(!.)
|
||||
return
|
||||
|
||||
crusher.force *= 2
|
||||
|
||||
var/datum/component/two_handed/two_handed = crusher.GetComponent(/datum/component/two_handed)
|
||||
two_handed?.force_wielded *= 2
|
||||
|
||||
/obj/item/crusher_trophy/wendigo_horn/remove_from(obj/item/kinetic_crusher/crusher, mob/living/user)
|
||||
. = ..()
|
||||
if(!.)
|
||||
return
|
||||
|
||||
crusher.force *= 0.5
|
||||
|
||||
var/datum/component/two_handed/two_handed = crusher.GetComponent(/datum/component/two_handed)
|
||||
two_handed?.force_wielded *= 0.5
|
||||
|
||||
|
||||
/obj/item/crusher_trophy/watcher_eye
|
||||
name = "watcher eye"
|
||||
desc = "An eye ripped out from some unfortunate watcher's eyesocket. Suitable as a trophy for a kinetic crusher."
|
||||
icon = 'modular_skyrat/master_files/icons/obj/artifacts.dmi'
|
||||
icon_state = "watcher_eye"
|
||||
denied_type = /obj/item/crusher_trophy/watcher_eye
|
||||
var/used_color = "#ff7777" //gay by default
|
||||
|
||||
/obj/item/crusher_trophy/watcher_eye/effect_desc()
|
||||
return "<font color='[used_color]'>very pretty colors</font> to imbue the destabilizer shots"
|
||||
|
||||
/obj/item/crusher_trophy/watcher_eye/attack_self(mob/user, modifiers)
|
||||
var/chosen_color = tgui_color_picker(user, "Pick a new color", "[src]", used_color) // BUBBERSTATION EDIT: TGUI COLOR PICKER
|
||||
if(chosen_color)
|
||||
used_color = chosen_color
|
||||
to_chat(user, span_notice("You recolor [src]."))
|
||||
update_appearance()
|
||||
|
||||
/obj/item/crusher_trophy/watcher_eye/update_overlays()
|
||||
. = ..()
|
||||
var/mutable_appearance/overlay = mutable_appearance('modular_skyrat/master_files/icons/obj/artifacts.dmi', "watcher_eye_iris")
|
||||
overlay.color = used_color
|
||||
. += overlay
|
||||
|
||||
/obj/item/crusher_trophy/watcher_eye/on_projectile_fire(obj/projectile/destabilizer/marker, mob/living/user)
|
||||
marker.icon = 'modular_skyrat/master_files/icons/obj/weapons/guns/projectiles.dmi'
|
||||
marker.icon_state = "pulse1_g"
|
||||
marker.color = used_color
|
||||
@@ -1,265 +0,0 @@
|
||||
/obj/item/clothing/gloves/kinetic_gauntlets
|
||||
name = "kinetic gauntlets"
|
||||
desc = "Nanotrasen's take on the power-fist, originally designed to help the security department but ultimately scrapped due to causing too much collateral damage. \
|
||||
Later on, repurposed into a pair of mining tools after a disgruntled shaft miner complained to R&D about mining \"not being metal enough\"."
|
||||
icon = 'modular_skyrat/master_files/icons/obj/mining.dmi'
|
||||
icon_state = "kgauntlets"
|
||||
worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/gloves.dmi'
|
||||
worn_icon_state = "kgauntlets_off"
|
||||
|
||||
armor_type = /datum/armor/melee_energy
|
||||
custom_materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT * 1.15, /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT * 2.075) //copied from kc, idk
|
||||
light_on = FALSE
|
||||
light_power = 5
|
||||
light_range = 4
|
||||
light_system = OVERLAY_LIGHT_DIRECTIONAL
|
||||
resistance_flags = FIRE_PROOF
|
||||
|
||||
force = 3 //i guess?
|
||||
obj_flags = UNIQUE_RENAME
|
||||
throwforce = 3 //why doesnt this have an underscore i hate this
|
||||
throw_speed = 2
|
||||
|
||||
|
||||
actions_types = list(/datum/action/item_action/extend_gauntlets)
|
||||
attack_verb_continuous = list("slaps", "challenges")
|
||||
attack_verb_simple = list("slap", "challenge")
|
||||
equip_delay_self = 2 SECONDS //that's a lot of bulky
|
||||
hitsound = 'sound/items/weapons/slap.ogg'
|
||||
slot_flags = ITEM_SLOT_GLOVES
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
|
||||
var/obj/item/kinetic_gauntlet/left/left_gauntlet = null
|
||||
var/obj/item/kinetic_gauntlet/right_gauntlet = null
|
||||
|
||||
/obj/item/clothing/gloves/kinetic_gauntlets/Initialize(mapload)
|
||||
. = ..()
|
||||
left_gauntlet = new(src)
|
||||
right_gauntlet = new(src)
|
||||
|
||||
var/datum/component/crusher_comp = AddComponent(/datum/component/kinetic_crusher, 50, 30, 1.5 SECONDS, CALLBACK(src, PROC_REF(attack_check)), CALLBACK(src, PROC_REF(detonate_check)), CALLBACK(src, PROC_REF(after_detonate)))
|
||||
crusher_comp.RegisterWithParent(left_gauntlet)
|
||||
crusher_comp.RegisterWithParent(right_gauntlet)
|
||||
|
||||
/obj/item/clothing/gloves/kinetic_gauntlets/Destroy()
|
||||
QDEL_NULL(left_gauntlet)
|
||||
QDEL_NULL(right_gauntlet)
|
||||
return ..()
|
||||
|
||||
/obj/item/clothing/gloves/kinetic_gauntlets/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change)
|
||||
. = ..()
|
||||
left_gauntlet?.forceMove(src)
|
||||
right_gauntlet?.forceMove(src)
|
||||
|
||||
/obj/item/clothing/gloves/kinetic_gauntlets/ui_action_click(mob/user, datum/action/actiontype)
|
||||
toggle_gauntlets()
|
||||
|
||||
/obj/item/clothing/gloves/kinetic_gauntlets/proc/on_gauntlet_qdel()
|
||||
if(QDELETED(left_gauntlet))
|
||||
left_gauntlet = null
|
||||
if(QDELETED(right_gauntlet))
|
||||
right_gauntlet = null
|
||||
|
||||
if(isnull(left_gauntlet) && isnull(right_gauntlet) && !QDELING(src))
|
||||
qdel(src)
|
||||
|
||||
/obj/item/clothing/gloves/kinetic_gauntlets/proc/attack_check(mob/living/user, cancel_attack)
|
||||
return left_gauntlet?.loc == user || right_gauntlet?.loc == user
|
||||
|
||||
/obj/item/clothing/gloves/kinetic_gauntlets/proc/detonate_check(mob/living/user)
|
||||
var/both_gauntlets_deployed = left_gauntlet?.loc == user && right_gauntlet?.loc == user
|
||||
if(both_gauntlets_deployed)
|
||||
return left_gauntlet.next_attack >= world.time || right_gauntlet.next_attack >= world.time
|
||||
|
||||
return FALSE //you WILL glass cannon and you WILL like it.
|
||||
|
||||
/obj/item/clothing/gloves/kinetic_gauntlets/proc/after_detonate(mob/living/user, mob/living/target)
|
||||
playsound(src, 'sound/items/weapons/resonator_blast.ogg', 40, TRUE)
|
||||
var/old_dir_user = user.dir
|
||||
var/old_dir_target = user.dir
|
||||
step(user, get_dir(target, user))
|
||||
step(target, get_dir(user, target))
|
||||
user.dir = old_dir_user
|
||||
target.dir = old_dir_target
|
||||
|
||||
|
||||
/obj/item/clothing/gloves/kinetic_gauntlets/proc/toggle_gauntlets()
|
||||
var/mob/living/carbon/human/wearer = loc
|
||||
if(!istype(wearer))
|
||||
return
|
||||
|
||||
if(left_gauntlet.loc == src || right_gauntlet.loc == src)
|
||||
deploy_gauntlets()
|
||||
else
|
||||
retract_gauntlets()
|
||||
|
||||
/obj/item/clothing/gloves/kinetic_gauntlets/proc/deploy_gauntlets()
|
||||
var/mob/living/carbon/human/wearer = loc
|
||||
if(!istype(wearer) || DOING_INTERACTION(wearer, type))
|
||||
return
|
||||
|
||||
if(wearer.gloves != src)
|
||||
to_chat(wearer, span_warning("You must be wearing these to do this!"))
|
||||
return
|
||||
|
||||
var/left_deployed = isnull(left_gauntlet) || left_gauntlet.loc == wearer
|
||||
var/right_deployed = isnull(right_gauntlet) || right_gauntlet.loc == wearer
|
||||
if(left_deployed && right_deployed)
|
||||
return //nothing to do
|
||||
|
||||
var/can_deploy = TRUE
|
||||
if(!left_deployed && !wearer.can_put_in_hand(left_gauntlet, 1))
|
||||
can_deploy = FALSE
|
||||
if(!right_deployed && !wearer.can_put_in_hand(right_gauntlet, 2))
|
||||
can_deploy = FALSE
|
||||
|
||||
if(!can_deploy)
|
||||
playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE)
|
||||
to_chat(wearer, span_warning("You need both free hands to deploy [src]!"))
|
||||
return
|
||||
|
||||
// equipping/unequipping shall take time
|
||||
wearer.add_movespeed_modifier(/datum/movespeed_modifier/equipping_gauntlets)
|
||||
if(!do_after(wearer, 1.5 SECONDS, src, IGNORE_USER_LOC_CHANGE, interaction_key = type))
|
||||
playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE)
|
||||
to_chat(wearer, span_warning("You fail to deploy [src]!"))
|
||||
wearer.remove_movespeed_modifier(/datum/movespeed_modifier/equipping_gauntlets)
|
||||
return
|
||||
|
||||
wearer.remove_movespeed_modifier(/datum/movespeed_modifier/equipping_gauntlets)
|
||||
|
||||
if(!left_deployed && !wearer.can_put_in_hand(left_gauntlet, 1))
|
||||
can_deploy = FALSE
|
||||
if(!right_deployed && !wearer.can_put_in_hand(right_gauntlet, 2))
|
||||
can_deploy = FALSE
|
||||
|
||||
if(!can_deploy)
|
||||
playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE)
|
||||
to_chat(wearer, span_warning("You need both free hands to deploy [src]!"))
|
||||
return
|
||||
|
||||
if(!left_deployed)
|
||||
wearer.put_in_l_hand(left_gauntlet)
|
||||
|
||||
if(!right_deployed)
|
||||
wearer.put_in_r_hand(right_gauntlet)
|
||||
|
||||
ADD_TRAIT(src, TRAIT_NODROP, type)
|
||||
|
||||
playsound(src, 'sound/vehicles/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
|
||||
playsound(src, 'sound/vehicles/mecha/mechmove01.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
|
||||
to_chat(wearer, span_notice("You deploy [src]."))
|
||||
|
||||
/obj/item/clothing/gloves/kinetic_gauntlets/proc/retract_gauntlets()
|
||||
var/mob/living/carbon/human/wearer = loc
|
||||
if(!istype(wearer) || DOING_INTERACTION(wearer, type))
|
||||
return
|
||||
|
||||
if(wearer.gloves != src)
|
||||
to_chat(wearer, span_warning("You must be wearing these to do this!"))
|
||||
return
|
||||
|
||||
if(left_gauntlet?.loc == src && right_gauntlet?.loc == src)
|
||||
return
|
||||
|
||||
wearer.add_movespeed_modifier(/datum/movespeed_modifier/equipping_gauntlets)
|
||||
if(!do_after(wearer, 1.5 SECONDS, src, IGNORE_USER_LOC_CHANGE))
|
||||
wearer.remove_movespeed_modifier(/datum/movespeed_modifier/equipping_gauntlets)
|
||||
playsound(src, 'sound/machines/scanner/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE)
|
||||
to_chat(wearer, span_warning("You fail to retract [src]!"))
|
||||
return
|
||||
|
||||
wearer.remove_movespeed_modifier(/datum/movespeed_modifier/equipping_gauntlets)
|
||||
|
||||
left_gauntlet?.forceMove(src)
|
||||
right_gauntlet?.forceMove(src)
|
||||
|
||||
REMOVE_TRAIT(src, TRAIT_NODROP, type)
|
||||
playsound(src, 'sound/vehicles/mecha/powerloader_turn2.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
|
||||
playsound(src, 'sound/vehicles/mecha/mechmove01.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
|
||||
to_chat(wearer, span_notice("You retract [src]."))
|
||||
|
||||
|
||||
/obj/item/kinetic_gauntlet
|
||||
name = "kinetic gauntlets"
|
||||
desc = "Okay, these <i>are</i> pretty metal."
|
||||
icon = 'modular_skyrat/master_files/icons/obj/mining.dmi'
|
||||
icon_state = "kgauntlet_r"
|
||||
inhand_icon_state = "kgauntlet"
|
||||
lefthand_file = 'modular_skyrat/master_files/icons/mob/inhands/melee_lefthand.dmi'
|
||||
righthand_file = 'modular_skyrat/master_files/icons/mob/inhands/melee_righthand.dmi'
|
||||
attack_verb_continuous = list("rams", "fists", "pulverizes", "power-punches")
|
||||
attack_verb_simple = list("ram", "fist", "pulverize", "power-punch")
|
||||
|
||||
armor_type = /datum/armor/melee_energy
|
||||
force = 15 // double hit -> 10 more dmg than crusher
|
||||
obj_flags = DROPDEL
|
||||
resistance_flags = FIRE_PROOF
|
||||
|
||||
secondary_attack_speed = 0.1 SECONDS
|
||||
|
||||
var/obj/item/clothing/gloves/kinetic_gauntlets/linked_gauntlets = null
|
||||
var/next_attack = 0
|
||||
|
||||
/obj/item/kinetic_gauntlet/Initialize(mapload)
|
||||
. = ..()
|
||||
if(!istype(loc, /obj/item/clothing/gloves/kinetic_gauntlets))
|
||||
return INITIALIZE_HINT_QDEL //le sigh
|
||||
|
||||
linked_gauntlets = loc
|
||||
ADD_TRAIT(src, TRAIT_NODROP, type)
|
||||
|
||||
/obj/item/kinetic_gauntlet/Destroy(force)
|
||||
if(linked_gauntlets) //fuck c&d
|
||||
linked_gauntlets.on_gauntlet_qdel()
|
||||
linked_gauntlets = null
|
||||
return ..()
|
||||
|
||||
/obj/item/kinetic_gauntlet/melee_attack_chain(mob/user, atom/target, params)
|
||||
if(next_attack > world.time)
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/item/kinetic_gauntlet/attack(mob/living/target_mob, mob/living/user, params)
|
||||
. = ..()
|
||||
playsound(src, 'sound/items/weapons/genhit2.ogg', 40, TRUE)
|
||||
next_attack = world.time + 0.8 SECONDS // same as a crusher
|
||||
user.changeNext_move(CLICK_CD_HYPER_RAPID) //forgive me
|
||||
if(istype(user.get_inactive_held_item(), /obj/item/kinetic_gauntlet))
|
||||
user.swap_hand()
|
||||
|
||||
/obj/item/kinetic_gauntlet/attack_self(mob/user, modifiers)
|
||||
if(linked_gauntlets.left_gauntlet)
|
||||
return linked_gauntlets.left_gauntlet.attack_self(user, modifiers)
|
||||
return ..()
|
||||
|
||||
/obj/item/kinetic_gauntlet/left
|
||||
icon_state = "kgauntlet_l"
|
||||
actions_types = list(/datum/action/item_action/toggle_light)
|
||||
|
||||
/obj/item/kinetic_gauntlet/left/Initialize(mapload)
|
||||
. = ..()
|
||||
if(linked_gauntlets)
|
||||
RegisterSignal(linked_gauntlets, COMSIG_ATOM_SABOTEUR_ACT, PROC_REF(do_saboteur))
|
||||
|
||||
/obj/item/kinetic_gauntlet/left/Destroy(force)
|
||||
if(linked_gauntlets)
|
||||
UnregisterSignal(linked_gauntlets, COMSIG_ATOM_SABOTEUR_ACT)
|
||||
linked_gauntlets.set_light_on(FALSE)
|
||||
return ..()
|
||||
|
||||
/obj/item/kinetic_gauntlet/left/update_overlays()
|
||||
. = ..()
|
||||
if(linked_gauntlets.light_on)
|
||||
. += "[icon_state]_lit"
|
||||
|
||||
/obj/item/kinetic_gauntlet/left/attack_self(mob/user, modifiers)
|
||||
linked_gauntlets.set_light_on(!linked_gauntlets.light_on)
|
||||
playsound(src, 'sound/items/weapons/empty.ogg', 100, TRUE)
|
||||
update_appearance()
|
||||
|
||||
/obj/item/kinetic_gauntlet/left/proc/do_saboteur(datum/source, disrupt_duration)
|
||||
linked_gauntlets.set_light_on(FALSE)
|
||||
playsound(src, 'sound/items/weapons/empty.ogg', 100, TRUE)
|
||||
update_appearance()
|
||||
return COMSIG_SABOTEUR_SUCCESS
|
||||
@@ -1,3 +0,0 @@
|
||||
/mob/living/basic/mining/watcher/Initialize(mapload)
|
||||
. = ..()
|
||||
AddElement(/datum/element/crusher_loot, trophy_type = /obj/item/crusher_trophy/watcher_eye, drop_mod = 5, drop_immediately = FALSE)
|
||||
@@ -1,2 +0,0 @@
|
||||
/datum/movespeed_modifier/equipping_gauntlets
|
||||
multiplicative_slowdown = 0.8
|
||||
@@ -6697,11 +6697,9 @@
|
||||
#include "modular_skyrat\master_files\code\datums\emotes.dm"
|
||||
#include "modular_skyrat\master_files\code\datums\ert.dm"
|
||||
#include "modular_skyrat\master_files\code\datums\outfit.dm"
|
||||
#include "modular_skyrat\master_files\code\datums\actions\items\toggles.dm"
|
||||
#include "modular_skyrat\master_files\code\datums\bodypart_overlays\bodypart_overlay.dm"
|
||||
#include "modular_skyrat\master_files\code\datums\bodypart_overlays\mutant_bodypart_overlay.dm"
|
||||
#include "modular_skyrat\master_files\code\datums\components\crafting.dm"
|
||||
#include "modular_skyrat\master_files\code\datums\components\crusher.dm"
|
||||
#include "modular_skyrat\master_files\code\datums\components\damage_tracker.dm"
|
||||
#include "modular_skyrat\master_files\code\datums\components\fullauto.dm"
|
||||
#include "modular_skyrat\master_files\code\datums\components\grillable.dm"
|
||||
@@ -6725,7 +6723,6 @@
|
||||
#include "modular_skyrat\master_files\code\datums\mutations\hulk.dm"
|
||||
#include "modular_skyrat\master_files\code\datums\mutations\sight.dm"
|
||||
#include "modular_skyrat\master_files\code\datums\records\record.dm"
|
||||
#include "modular_skyrat\master_files\code\datums\status_effects\debuffs\debuffs.dm"
|
||||
#include "modular_skyrat\master_files\code\datums\storage\storage.dm"
|
||||
#include "modular_skyrat\master_files\code\datums\storage\subtypes\pockets.dm"
|
||||
#include "modular_skyrat\master_files\code\datums\votes\_vote_datum.dm"
|
||||
@@ -6738,7 +6735,6 @@
|
||||
#include "modular_skyrat\master_files\code\game\machinery\hologram.dm"
|
||||
#include "modular_skyrat\master_files\code\game\machinery\limbgrower.dm"
|
||||
#include "modular_skyrat\master_files\code\game\machinery\suit_storage.dm"
|
||||
#include "modular_skyrat\master_files\code\game\machinery\computer\orders\order_items\mining\order_mining.dm"
|
||||
#include "modular_skyrat\master_files\code\game\machinery\doors\firedoor.dm"
|
||||
#include "modular_skyrat\master_files\code\game\objects\items.dm"
|
||||
#include "modular_skyrat\master_files\code\game\objects\objs.dm"
|
||||
@@ -6960,8 +6956,6 @@
|
||||
#include "modular_skyrat\master_files\code\modules\mapfluff\ruins\objects_and_mobs\necropolis_gate.dm"
|
||||
#include "modular_skyrat\master_files\code\modules\mapfluff\ruins\spaceruin_code\oldstation\oldstation_cytology.dm"
|
||||
#include "modular_skyrat\master_files\code\modules\mining\equipment\explorer_gear.dm"
|
||||
#include "modular_skyrat\master_files\code\modules\mining\equipment\kinetic_crusher.dm"
|
||||
#include "modular_skyrat\master_files\code\modules\mining\equipment\kinetic_gauntlets.dm"
|
||||
#include "modular_skyrat\master_files\code\modules\mob\login.dm"
|
||||
#include "modular_skyrat\master_files\code\modules\mob\mob_movement.dm"
|
||||
#include "modular_skyrat\master_files\code\modules\mob\basic\alien\_alien.dm"
|
||||
@@ -6977,7 +6971,6 @@
|
||||
#include "modular_skyrat\master_files\code\modules\mob\living\living_defines.dm"
|
||||
#include "modular_skyrat\master_files\code\modules\mob\living\living_movement.dm"
|
||||
#include "modular_skyrat\master_files\code\modules\mob\living\basic\alien\alien.dm"
|
||||
#include "modular_skyrat\master_files\code\modules\mob\living\basic\lavaland\watcher\watcher.dm"
|
||||
#include "modular_skyrat\master_files\code\modules\mob\living\carbon\carbon_defense.dm"
|
||||
#include "modular_skyrat\master_files\code\modules\mob\living\carbon\death.dm"
|
||||
#include "modular_skyrat\master_files\code\modules\mob\living\carbon\human_helpers.dm"
|
||||
@@ -7016,7 +7009,6 @@
|
||||
#include "modular_skyrat\master_files\code\modules\modular_computers\computers\item\computer.dm"
|
||||
#include "modular_skyrat\master_files\code\modules\modular_computers\computers\item\laptop_presets.dm"
|
||||
#include "modular_skyrat\master_files\code\modules\modular_computers\file_system\programs\maintenance\camera.dm"
|
||||
#include "modular_skyrat\master_files\code\modules\movespeed\modifiers\items.dm"
|
||||
#include "modular_skyrat\master_files\code\modules\orders\order_mining.dm"
|
||||
#include "modular_skyrat\master_files\code\modules\pai\card.dm"
|
||||
#include "modular_skyrat\master_files\code\modules\paperwork\employment_contract.dm"
|
||||
|
||||
Reference in New Issue
Block a user