[MDB IGNORE] makes ebows and kinetic accelerators share a parent (#66247)

Moves recharging functionality from kinetic accelerator to /obj/item/gun/energy/recharge base type
This commit is contained in:
Fikou
2022-04-19 13:55:37 +02:00
committed by GitHub
parent 731f8f7f5b
commit 61f1c5ee19
23 changed files with 198 additions and 189 deletions
@@ -1,34 +1,24 @@
/obj/item/gun/energy/kinetic_accelerator
/obj/item/gun/energy/recharge/kinetic_accelerator
name = "proto-kinetic accelerator"
desc = "A self recharging, ranged mining tool that does increased damage in low pressure."
icon_state = "kineticgun"
base_icon_state = "kineticgun"
inhand_icon_state = "kineticgun"
ammo_type = list(/obj/item/ammo_casing/energy/kinetic)
cell_type = /obj/item/stock_parts/cell/emproof
item_flags = NONE
obj_flags = UNIQUE_RENAME
weapon_weight = WEAPON_LIGHT
can_flashlight = TRUE
flight_x_offset = 15
flight_y_offset = 9
automatic_charge_overlays = FALSE
can_bayonet = TRUE
knife_x_offset = 20
knife_y_offset = 12
var/overheat_time = 16
var/holds_charge = FALSE
var/unique_frequency = FALSE // modified by KA modkits
var/overheat = FALSE
var/mob/holder
var/max_mod_capacity = 100
var/list/modkits = list()
var/recharge_timerid
/obj/item/gun/energy/kinetic_accelerator/examine(mob/user)
/obj/item/gun/energy/recharge/kinetic_accelerator/examine(mob/user)
. = ..()
if(max_mod_capacity)
. += "<b>[get_remaining_mod_capacity()]%</b> mod capacity remaining."
@@ -37,7 +27,7 @@
var/obj/item/borg/upgrade/modkit/M = A
. += span_notice("There is \a [M] installed, using <b>[M.cost]%</b> capacity.")
/obj/item/gun/energy/kinetic_accelerator/crowbar_act(mob/living/user, obj/item/I)
/obj/item/gun/energy/recharge/kinetic_accelerator/crowbar_act(mob/living/user, obj/item/I)
. = TRUE
if(modkits.len)
to_chat(user, span_notice("You pry the modifications out."))
@@ -48,115 +38,44 @@
else
to_chat(user, span_notice("There are no modifications currently installed."))
/obj/item/gun/energy/kinetic_accelerator/Exited(atom/movable/gone, direction)
/obj/item/gun/energy/recharge/kinetic_accelerator/Exited(atom/movable/gone, direction)
if(gone in modkits)
var/obj/item/borg/upgrade/modkit/MK = gone
MK.uninstall(src)
return ..()
/obj/item/gun/energy/kinetic_accelerator/attackby(obj/item/I, mob/user)
/obj/item/gun/energy/recharge/kinetic_accelerator/attackby(obj/item/I, mob/user)
if(istype(I, /obj/item/borg/upgrade/modkit))
var/obj/item/borg/upgrade/modkit/MK = I
MK.install(src, user)
else
..()
/obj/item/gun/energy/kinetic_accelerator/proc/get_remaining_mod_capacity()
/obj/item/gun/energy/recharge/kinetic_accelerator/proc/get_remaining_mod_capacity()
var/current_capacity_used = 0
for(var/A in modkits)
var/obj/item/borg/upgrade/modkit/M = A
current_capacity_used += M.cost
return max_mod_capacity - current_capacity_used
/obj/item/gun/energy/kinetic_accelerator/proc/modify_projectile(obj/projectile/kinetic/K)
/obj/item/gun/energy/recharge/kinetic_accelerator/proc/modify_projectile(obj/projectile/kinetic/K)
K.kinetic_gun = src //do something special on-hit, easy!
for(var/A in modkits)
var/obj/item/borg/upgrade/modkit/M = A
M.modify_projectile(K)
/obj/item/gun/energy/kinetic_accelerator/cyborg
/obj/item/gun/energy/recharge/kinetic_accelerator/cyborg
icon_state = "kineticgun_b"
holds_charge = TRUE
unique_frequency = TRUE
max_mod_capacity = 80
/obj/item/gun/energy/kinetic_accelerator/minebot
/obj/item/gun/energy/recharge/kinetic_accelerator/minebot
trigger_guard = TRIGGER_GUARD_ALLOW_ALL
overheat_time = 20
recharge_time = 2 SECONDS
holds_charge = TRUE
unique_frequency = TRUE
/obj/item/gun/energy/kinetic_accelerator/Initialize(mapload)
. = ..()
if(!holds_charge)
empty()
/obj/item/gun/energy/kinetic_accelerator/shoot_live_shot(mob/living/user, pointblank = 0, atom/pbtarget = null, message = 1)
. = ..()
attempt_reload()
/obj/item/gun/energy/kinetic_accelerator/equipped(mob/user)
. = ..()
holder = user
if(!can_shoot())
attempt_reload()
/obj/item/gun/energy/kinetic_accelerator/dropped()
. = ..()
holder = null
if(!QDELING(src) && !holds_charge)
// Put it on a delay because moving item from slot to hand
// calls dropped().
addtimer(CALLBACK(src, .proc/empty_if_not_held), 2)
/obj/item/gun/energy/kinetic_accelerator/proc/empty_if_not_held()
if(!ismob(loc))
empty()
/obj/item/gun/energy/kinetic_accelerator/proc/empty()
if(cell)
cell.use(cell.charge)
update_appearance()
/obj/item/gun/energy/kinetic_accelerator/proc/attempt_reload(recharge_time)
if(!cell)
return
if(overheat)
return
if(!recharge_time)
recharge_time = overheat_time
overheat = TRUE
var/carried = 0
if(!unique_frequency)
for(var/obj/item/gun/energy/kinetic_accelerator/K in loc.get_all_contents())
if(!K.unique_frequency)
carried++
carried = max(carried, 1)
else
carried = 1
deltimer(recharge_timerid)
recharge_timerid = addtimer(CALLBACK(src, .proc/reload), recharge_time * carried, TIMER_STOPPABLE)
/obj/item/gun/energy/kinetic_accelerator/emp_act(severity)
return
/obj/item/gun/energy/kinetic_accelerator/proc/reload()
cell.give(cell.maxcharge)
if(!suppressed)
playsound(src.loc, 'sound/weapons/kenetic_reload.ogg', 60, TRUE)
else
to_chat(loc, span_warning("[src] silently charges up."))
update_appearance()
overheat = FALSE
/obj/item/gun/energy/kinetic_accelerator/update_overlays()
. = ..()
if(!can_shoot())
. += "[base_icon_state]_empty"
//Casing
/obj/item/ammo_casing/energy/kinetic
projectile_type = /obj/projectile/kinetic
@@ -166,8 +85,8 @@
/obj/item/ammo_casing/energy/kinetic/ready_proj(atom/target, mob/living/user, quiet, zone_override = "")
..()
if(loc && istype(loc, /obj/item/gun/energy/kinetic_accelerator))
var/obj/item/gun/energy/kinetic_accelerator/KA = loc
if(loc && istype(loc, /obj/item/gun/energy/recharge/kinetic_accelerator))
var/obj/item/gun/energy/recharge/kinetic_accelerator/KA = loc
KA.modify_projectile(loaded_projectile)
//Projectiles
@@ -182,7 +101,7 @@
var/pressure_decrease_active = FALSE
var/pressure_decrease = 0.25
var/obj/item/gun/energy/kinetic_accelerator/kinetic_gun
var/obj/item/gun/energy/recharge/kinetic_accelerator/kinetic_gun
/obj/projectile/kinetic/Destroy()
kinetic_gun = null
@@ -228,7 +147,7 @@
// If there is a mind, check for skill modifier to allow them to reload faster.
if(carbon_firer.mind)
skill_modifier = carbon_firer.mind.get_skill_modifier(/datum/skill/mining, SKILL_SPEED_MODIFIER)
kinetic_gun.attempt_reload(kinetic_gun.overheat_time * skill_modifier) //If you hit a mineral, you might get a quicker reload. epic gamer style.
kinetic_gun.attempt_reload(kinetic_gun.recharge_time * skill_modifier) //If you hit a mineral, you might get a quicker reload. epic gamer style.
var/obj/effect/temp_visual/kinetic_blast/K = new /obj/effect/temp_visual/kinetic_blast(target_turf)
K.color = color
@@ -258,7 +177,7 @@
. += span_notice("Occupies <b>[cost]%</b> of mod capacity.")
/obj/item/borg/upgrade/modkit/attackby(obj/item/A, mob/user)
if(istype(A, /obj/item/gun/energy/kinetic_accelerator) && !issilicon(user))
if(istype(A, /obj/item/gun/energy/recharge/kinetic_accelerator) && !issilicon(user))
install(A, user)
else
..()
@@ -266,10 +185,10 @@
/obj/item/borg/upgrade/modkit/action(mob/living/silicon/robot/R)
. = ..()
if (.)
for(var/obj/item/gun/energy/kinetic_accelerator/cyborg/H in R.model.modules)
for(var/obj/item/gun/energy/recharge/kinetic_accelerator/cyborg/H in R.model.modules)
return install(H, usr, FALSE)
/obj/item/borg/upgrade/modkit/proc/install(obj/item/gun/energy/kinetic_accelerator/KA, mob/user, transfer_to_loc = TRUE)
/obj/item/borg/upgrade/modkit/proc/install(obj/item/gun/energy/recharge/kinetic_accelerator/KA, mob/user, transfer_to_loc = TRUE)
. = TRUE
if(minebot_upgrade)
if(minebot_exclusive && !istype(KA.loc, /mob/living/simple_animal/hostile/mining_drone))
@@ -303,20 +222,20 @@
/obj/item/borg/upgrade/modkit/deactivate(mob/living/silicon/robot/R, user = usr)
. = ..()
if (.)
for(var/obj/item/gun/energy/kinetic_accelerator/cyborg/KA in R.model.modules)
for(var/obj/item/gun/energy/recharge/kinetic_accelerator/cyborg/KA in R.model.modules)
uninstall(KA)
/obj/item/borg/upgrade/modkit/proc/uninstall(obj/item/gun/energy/kinetic_accelerator/KA)
/obj/item/borg/upgrade/modkit/proc/uninstall(obj/item/gun/energy/recharge/kinetic_accelerator/KA)
KA.modkits -= src
/obj/item/borg/upgrade/modkit/proc/modify_projectile(obj/projectile/kinetic/K)
//use this one for effects you want to trigger before any damage is done at all and before damage is decreased by pressure
/obj/item/borg/upgrade/modkit/proc/projectile_prehit(obj/projectile/kinetic/K, atom/target, obj/item/gun/energy/kinetic_accelerator/KA)
/obj/item/borg/upgrade/modkit/proc/projectile_prehit(obj/projectile/kinetic/K, atom/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA)
//use this one for effects you want to trigger before mods that do damage
/obj/item/borg/upgrade/modkit/proc/projectile_strike_predamage(obj/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/gun/energy/kinetic_accelerator/KA)
/obj/item/borg/upgrade/modkit/proc/projectile_strike_predamage(obj/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA)
//and this one for things that don't need to trigger before other damage-dealing mods
/obj/item/borg/upgrade/modkit/proc/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/gun/energy/kinetic_accelerator/KA)
/obj/item/borg/upgrade/modkit/proc/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA)
//Range
/obj/item/borg/upgrade/modkit/range
@@ -346,13 +265,13 @@
modifier = 3.2
minebot_upgrade = FALSE
/obj/item/borg/upgrade/modkit/cooldown/install(obj/item/gun/energy/kinetic_accelerator/KA, mob/user)
/obj/item/borg/upgrade/modkit/cooldown/install(obj/item/gun/energy/recharge/kinetic_accelerator/KA, mob/user)
. = ..()
if(.)
KA.overheat_time -= modifier
KA.recharge_time -= modifier
/obj/item/borg/upgrade/modkit/cooldown/uninstall(obj/item/gun/energy/kinetic_accelerator/KA)
KA.overheat_time += modifier
/obj/item/borg/upgrade/modkit/cooldown/uninstall(obj/item/gun/energy/recharge/kinetic_accelerator/KA)
KA.recharge_time += modifier
..()
/obj/item/borg/upgrade/modkit/cooldown/minebot
@@ -373,7 +292,7 @@
var/turf_aoe = FALSE
var/stats_stolen = FALSE
/obj/item/borg/upgrade/modkit/aoe/install(obj/item/gun/energy/kinetic_accelerator/KA, mob/user)
/obj/item/borg/upgrade/modkit/aoe/install(obj/item/gun/energy/recharge/kinetic_accelerator/KA, mob/user)
. = ..()
if(.)
for(var/obj/item/borg/upgrade/modkit/aoe/AOE in KA.modkits) //make sure only one of the aoe modules has values if somebody has multiple
@@ -385,7 +304,7 @@
AOE.turf_aoe = FALSE
AOE.stats_stolen = TRUE
/obj/item/borg/upgrade/modkit/aoe/uninstall(obj/item/gun/energy/kinetic_accelerator/KA)
/obj/item/borg/upgrade/modkit/aoe/uninstall(obj/item/gun/energy/recharge/kinetic_accelerator/KA)
..()
modifier = initial(modifier) //get our modifiers back
turf_aoe = initial(turf_aoe)
@@ -394,7 +313,7 @@
/obj/item/borg/upgrade/modkit/aoe/modify_projectile(obj/projectile/kinetic/K)
K.name = "kinetic explosion"
/obj/item/borg/upgrade/modkit/aoe/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/gun/energy/kinetic_accelerator/KA)
/obj/item/borg/upgrade/modkit/aoe/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA)
if(stats_stolen)
return
new /obj/effect/temp_visual/explosion/fast(target_turf)
@@ -440,7 +359,7 @@
modifier = -14 //Makes the cooldown 3 seconds(with no cooldown mods) if you miss. Don't miss.
cost = 50
/obj/item/borg/upgrade/modkit/cooldown/repeater/projectile_strike_predamage(obj/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/gun/energy/kinetic_accelerator/KA)
/obj/item/borg/upgrade/modkit/cooldown/repeater/projectile_strike_predamage(obj/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA)
var/valid_repeat = FALSE
if(isliving(target))
var/mob/living/L = target
@@ -449,8 +368,8 @@
if(ismineralturf(target_turf))
valid_repeat = TRUE
if(valid_repeat)
KA.overheat = FALSE
KA.attempt_reload(KA.overheat_time * 0.25) //If you hit, the cooldown drops to 0.75 seconds.
KA.cell.use(KA.cell.charge)
KA.attempt_reload(KA.recharge_time * 0.25) //If you hit, the cooldown drops to 0.75 seconds.
/obj/item/borg/upgrade/modkit/lifesteal
name = "lifesteal crystal"
@@ -460,7 +379,7 @@
cost = 20
var/static/list/damage_heal_order = list(BRUTE, BURN, OXY)
/obj/item/borg/upgrade/modkit/lifesteal/projectile_prehit(obj/projectile/kinetic/K, atom/target, obj/item/gun/energy/kinetic_accelerator/KA)
/obj/item/borg/upgrade/modkit/lifesteal/projectile_prehit(obj/projectile/kinetic/K, atom/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA)
if(isliving(target) && isliving(K.firer))
var/mob/living/L = target
if(L.stat == DEAD)
@@ -475,7 +394,7 @@
cost = 30
modifier = 0.25 //A bonus 15 damage if you burst the field on a target, 60 if you lure them into it.
/obj/item/borg/upgrade/modkit/resonator_blasts/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/gun/energy/kinetic_accelerator/KA)
/obj/item/borg/upgrade/modkit/resonator_blasts/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA)
if(target_turf && !ismineralturf(target_turf)) //Don't make fields on mineral turfs.
var/obj/effect/temp_visual/resonance/R = locate(/obj/effect/temp_visual/resonance) in target_turf
if(R)
@@ -493,7 +412,7 @@
var/maximum_bounty = 25
var/list/bounties_reaped = list()
/obj/item/borg/upgrade/modkit/bounty/projectile_prehit(obj/projectile/kinetic/K, atom/target, obj/item/gun/energy/kinetic_accelerator/KA)
/obj/item/borg/upgrade/modkit/bounty/projectile_prehit(obj/projectile/kinetic/K, atom/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA)
if(isliving(target))
var/mob/living/L = target
var/list/existing_marks = L.has_status_effect_list(/datum/status_effect/syphon_mark)
@@ -504,7 +423,7 @@
qdel(SM)
L.apply_status_effect(/datum/status_effect/syphon_mark, src)
/obj/item/borg/upgrade/modkit/bounty/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/gun/energy/kinetic_accelerator/KA)
/obj/item/borg/upgrade/modkit/bounty/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA)
if(isliving(target))
var/mob/living/L = target
if(bounties_reaped[L.type])
@@ -543,12 +462,12 @@
cost = 20
denied_type = /obj/item/borg/upgrade/modkit/trigger_guard
/obj/item/borg/upgrade/modkit/trigger_guard/install(obj/item/gun/energy/kinetic_accelerator/KA, mob/user)
/obj/item/borg/upgrade/modkit/trigger_guard/install(obj/item/gun/energy/recharge/kinetic_accelerator/KA, mob/user)
. = ..()
if(.)
KA.trigger_guard = TRIGGER_GUARD_ALLOW_ALL
/obj/item/borg/upgrade/modkit/trigger_guard/uninstall(obj/item/gun/energy/kinetic_accelerator/KA)
/obj/item/borg/upgrade/modkit/trigger_guard/uninstall(obj/item/gun/energy/recharge/kinetic_accelerator/KA)
KA.trigger_guard = TRIGGER_GUARD_NORMAL
..()
@@ -563,7 +482,7 @@
var/chassis_icon = "kineticgun_u"
var/chassis_name = "super-kinetic accelerator"
/obj/item/borg/upgrade/modkit/chassis_mod/install(obj/item/gun/energy/kinetic_accelerator/KA, mob/user)
/obj/item/borg/upgrade/modkit/chassis_mod/install(obj/item/gun/energy/recharge/kinetic_accelerator/KA, mob/user)
. = ..()
if(.)
KA.icon_state = chassis_icon
@@ -573,7 +492,7 @@
var/mob/living/carbon/holder = KA.loc
holder.update_inv_hands()
/obj/item/borg/upgrade/modkit/chassis_mod/uninstall(obj/item/gun/energy/kinetic_accelerator/KA)
/obj/item/borg/upgrade/modkit/chassis_mod/uninstall(obj/item/gun/energy/recharge/kinetic_accelerator/KA)
KA.icon_state = initial(KA.icon_state)
KA.inhand_icon_state = initial(KA.inhand_icon_state)
KA.name = initial(KA.name)
@@ -0,0 +1,129 @@
//Recharge subtype - used by stuff like protokinetic accelerators and ebows, one shot at a time, recharges.
/obj/item/gun/energy/recharge
icon_state = "kineticgun"
base_icon_state = "kineticgun"
desc = "A self recharging gun. Holds one shot at a time."
automatic_charge_overlays = FALSE
cell_type = /obj/item/stock_parts/cell/emproof
/// If set to something, instead of an overlay, sets the icon_state directly.
var/no_charge_state
/// Does it hold charge when not put away?
var/holds_charge = FALSE
/// How much time we need to recharge
var/recharge_time = 1.6 SECONDS
/// Sound we use when recharged
var/recharge_sound = 'sound/weapons/kenetic_reload.ogg'
/// An ID for our recharging timer.
var/recharge_timerid
/// Do we recharge slower with more of our type?
var/unique_frequency = FALSE
/obj/item/gun/energy/recharge/Initialize(mapload)
. = ..()
if(!holds_charge)
empty()
/obj/item/gun/energy/recharge/shoot_live_shot(mob/living/user, pointblank = 0, atom/pbtarget = null, message = 1)
. = ..()
attempt_reload()
/obj/item/gun/energy/recharge/equipped(mob/user)
. = ..()
if(!can_shoot())
attempt_reload()
/obj/item/gun/energy/recharge/dropped()
. = ..()
if(!QDELING(src) && !holds_charge)
// Put it on a delay because moving item from slot to hand
// calls dropped().
addtimer(CALLBACK(src, .proc/empty_if_not_held), 0.1 SECONDS)
/obj/item/gun/energy/recharge/handle_chamber()
. = ..()
attempt_reload()
/obj/item/gun/energy/recharge/proc/empty_if_not_held()
if(!ismob(loc))
empty()
deltimer(recharge_timerid)
/obj/item/gun/energy/recharge/proc/empty()
if(cell)
cell.use(cell.charge)
update_appearance()
/obj/item/gun/energy/recharge/proc/attempt_reload(set_recharge_time)
if(!cell)
return
if(cell.charge == cell.maxcharge)
return
if(!set_recharge_time)
set_recharge_time = recharge_time
var/carried = 0
if(!unique_frequency)
for(var/obj/item/gun/energy/recharge/recharging_gun in loc.get_all_contents())
if(recharging_gun.type != type || recharging_gun.unique_frequency)
continue
carried++
carried = max(carried, 1)
deltimer(recharge_timerid)
recharge_timerid = addtimer(CALLBACK(src, .proc/reload), set_recharge_time * carried, TIMER_STOPPABLE)
/obj/item/gun/energy/recharge/emp_act(severity)
return
/obj/item/gun/energy/recharge/proc/reload()
cell.give(cell.maxcharge)
if(!suppressed && recharge_sound)
playsound(src.loc, recharge_sound, 60, TRUE)
else
to_chat(loc, span_warning("[src] silently charges up."))
update_appearance()
/obj/item/gun/energy/recharge/update_overlays()
. = ..()
if(!no_charge_state && !can_shoot())
. += "[base_icon_state]_empty"
/obj/item/gun/energy/recharge/update_icon_state()
. = ..()
if(no_charge_state && !can_shoot())
icon_state = no_charge_state
/obj/item/gun/energy/recharge/ebow
name = "mini energy crossbow"
desc = "A weapon favored by syndicate stealth specialists."
icon_state = "crossbow"
base_icon_state = "crossbow"
inhand_icon_state = "crossbow"
no_charge_state = "crossbow_empty"
w_class = WEIGHT_CLASS_SMALL
custom_materials = list(/datum/material/iron=2000)
suppressed = TRUE
ammo_type = list(/obj/item/ammo_casing/energy/bolt)
recharge_time = 2 SECONDS
holds_charge = TRUE
unique_frequency = TRUE
can_bayonet = TRUE
knife_x_offset = 20
knife_y_offset = 12
/obj/item/gun/energy/recharge/ebow/halloween
name = "candy corn crossbow"
desc = "A weapon favored by Syndicate trick-or-treaters."
icon_state = "crossbow_halloween"
base_icon_state = "crossbow_halloween"
no_charge_state = "crossbow_halloween_empty"
ammo_type = list(/obj/item/ammo_casing/energy/bolt/halloween)
/obj/item/gun/energy/recharge/ebow/large
name = "energy crossbow"
desc = "A reverse engineered weapon using syndicate technology."
icon_state = "crossbowlarge"
base_icon_state = "crossbowlarge"
no_charge_state = "crossbowlarge_empty"
w_class = WEIGHT_CLASS_BULKY
custom_materials = list(/datum/material/iron=4000)
suppressed = null
ammo_type = list(/obj/item/ammo_casing/energy/bolt/large)
@@ -85,42 +85,6 @@
ammo_type = list(/obj/item/ammo_casing/energy/mindflayer)
ammo_x_offset = 2
/obj/item/gun/energy/kinetic_accelerator/crossbow
name = "mini energy crossbow"
desc = "A weapon favored by syndicate stealth specialists."
icon_state = "crossbow"
base_icon_state = "crossbow"
inhand_icon_state = "crossbow"
w_class = WEIGHT_CLASS_SMALL
custom_materials = list(/datum/material/iron=2000)
suppressed = TRUE
ammo_type = list(/obj/item/ammo_casing/energy/bolt)
weapon_weight = WEAPON_LIGHT
obj_flags = 0
overheat_time = 20
holds_charge = TRUE
unique_frequency = TRUE
can_flashlight = FALSE
max_mod_capacity = -1
/obj/item/gun/energy/kinetic_accelerator/crossbow/halloween
name = "candy corn crossbow"
desc = "A weapon favored by Syndicate trick-or-treaters."
icon_state = "crossbow_halloween"
base_icon_state = "crossbow_halloween"
inhand_icon_state = "crossbow"
ammo_type = list(/obj/item/ammo_casing/energy/bolt/halloween)
/obj/item/gun/energy/kinetic_accelerator/crossbow/large
name = "energy crossbow"
desc = "A reverse engineered weapon using syndicate technology."
icon_state = "crossbowlarge"
base_icon_state = "crossbowlarge"
w_class = WEIGHT_CLASS_BULKY
custom_materials = list(/datum/material/iron=4000)
suppressed = null
ammo_type = list(/obj/item/ammo_casing/energy/bolt/large)
/obj/item/gun/energy/plasmacutter
name = "plasma cutter"
desc = "A mining tool capable of expelling concentrated plasma bursts. You could use it to cut limbs off xenos! Or, you know, mine stuff."