From 4d51a932d2d0ebca6168f2809a3ff56672ed94e9 Mon Sep 17 00:00:00 2001
From: Tsar-Salat <62388554+Tsar-Salat@users.noreply.github.com>
Date: Sat, 30 Nov 2024 04:51:41 -0500
Subject: [PATCH] Refactors ebows and kpa's to the same parent (#11939)
* recharging energy weps
* that too
* oops
---
_maps/RuinGeneration/17x17_charliecrew.dmm | 2 +-
_maps/shuttles/hunter/hunter_bounty.dmm | 2 +-
beestation.dme | 1 +
code/game/objects/items/storage/belt.dm | 2 +-
.../game/objects/items/storage/uplink_kits.dm | 2 +-
.../role_preference/role_antagonists.dm | 2 +-
code/modules/clothing/outfits/standard.dm | 2 +-
code/modules/clothing/spacesuits/hardsuit.dm | 8 +-
code/modules/clothing/suits/cloaks.dm | 2 +-
code/modules/clothing/suits/wintercoats.dm | 2 +-
code/modules/jobs/job_types/shaft_miner.dm | 4 +-
.../modules/mining/equipment/explorer_gear.dm | 4 +-
code/modules/mining/machine_vending.dm | 2 +-
code/modules/mining/mine_items.dm | 2 +-
code/modules/mining/minebot.dm | 2 +-
.../mob/living/silicon/robot/robot_modules.dm | 2 +-
code/modules/projectiles/gun.dm | 2 +-
.../guns/energy/kinetic_accelerator.dm | 166 +++++-------------
.../projectiles/guns/energy/recharge.dm | 147 ++++++++++++++++
.../projectiles/guns/energy/special.dm | 44 -----
.../research/designs/weapon_designs.dm | 2 +-
.../spells/spell_types/rightandwrong.dm | 4 +-
code/modules/uplink/uplink_items.dm | 4 +-
23 files changed, 221 insertions(+), 189 deletions(-)
create mode 100644 code/modules/projectiles/guns/energy/recharge.dm
diff --git a/_maps/RuinGeneration/17x17_charliecrew.dmm b/_maps/RuinGeneration/17x17_charliecrew.dmm
index c51fd1c848505..d21194279512e 100644
--- a/_maps/RuinGeneration/17x17_charliecrew.dmm
+++ b/_maps/RuinGeneration/17x17_charliecrew.dmm
@@ -116,7 +116,7 @@
/turf/open/floor/iron,
/area/ruin/unpowered)
"hQ" = (
-/obj/item/gun/energy/kinetic_accelerator,
+/obj/item/gun/energy/recharge/kinetic_accelerator,
/obj/structure/rack,
/obj/effect/turf_decal/tile/purple,
/turf/open/floor/iron/white,
diff --git a/_maps/shuttles/hunter/hunter_bounty.dmm b/_maps/shuttles/hunter/hunter_bounty.dmm
index 30b300768d265..b59efb7fe7381 100644
--- a/_maps/shuttles/hunter/hunter_bounty.dmm
+++ b/_maps/shuttles/hunter/hunter_bounty.dmm
@@ -68,7 +68,7 @@
},
/obj/item/gun/energy/e_gun/mini,
/obj/item/gun/energy/e_gun/mini,
-/obj/item/gun/energy/kinetic_accelerator/crossbow/large{
+/obj/item/gun/energy/recharge/ebow/large{
pixel_y = -8;
pin = /obj/item/firing_pin
},
diff --git a/beestation.dme b/beestation.dme
index 0bf66503a6aec..91f6f964e1b09 100644
--- a/beestation.dme
+++ b/beestation.dme
@@ -3622,6 +3622,7 @@
#include "code\modules\projectiles\guns\energy\laser_gatling.dm"
#include "code\modules\projectiles\guns\energy\mounted.dm"
#include "code\modules\projectiles\guns\energy\pulse.dm"
+#include "code\modules\projectiles\guns\energy\recharge.dm"
#include "code\modules\projectiles\guns\energy\special.dm"
#include "code\modules\projectiles\guns\energy\stun.dm"
#include "code\modules\projectiles\guns\magic\staff.dm"
diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm
index ac463a578ca7e..455251c530167 100644
--- a/code/game/objects/items/storage/belt.dm
+++ b/code/game/objects/items/storage/belt.dm
@@ -468,7 +468,7 @@
/obj/item/skeleton_key,
/obj/item/discovery_scanner,
/obj/item/gun/energy/e_gun/mini/exploration,
- /obj/item/gun/energy/kinetic_accelerator,
+ /obj/item/gun/energy/recharge/kinetic_accelerator,
/obj/item/gun/energy/plasmacutter,
/obj/item/grenade/exploration,
/obj/item/exploration_detonator,
diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm
index bfde721929f7c..83c65bd81ca00 100644
--- a/code/game/objects/items/storage/uplink_kits.dm
+++ b/code/game/objects/items/storage/uplink_kits.dm
@@ -32,7 +32,7 @@
new /obj/item/chameleon(src) // 7 tc
if("stealth")
- new /obj/item/gun/energy/kinetic_accelerator/crossbow(src)
+ new /obj/item/gun/energy/recharge/ebow(src)
new /obj/item/pen/sleepy(src)
new /obj/item/healthanalyzer/rad_laser(src)
new /obj/item/chameleon(src)
diff --git a/code/modules/antagonists/role_preference/role_antagonists.dm b/code/modules/antagonists/role_preference/role_antagonists.dm
index 55c885ceb53a0..44111cecfddfe 100644
--- a/code/modules/antagonists/role_preference/role_antagonists.dm
+++ b/code/modules/antagonists/role_preference/role_antagonists.dm
@@ -32,7 +32,7 @@
gloves = /obj/item/clothing/gloves/combat
mask = /obj/item/clothing/mask/gas
l_hand = /obj/item/melee/transforming/energy/sword
- r_hand = /obj/item/gun/energy/kinetic_accelerator/crossbow
+ r_hand = /obj/item/gun/energy/recharge/ebow
/datum/outfit/traitor/post_equip(mob/living/carbon/human/H, visualsOnly)
var/obj/item/melee/transforming/energy/sword/sword = locate() in H.held_items
diff --git a/code/modules/clothing/outfits/standard.dm b/code/modules/clothing/outfits/standard.dm
index 1d21dce3b330b..c215d0e44b4a2 100644
--- a/code/modules/clothing/outfits/standard.dm
+++ b/code/modules/clothing/outfits/standard.dm
@@ -219,7 +219,7 @@
qdel(briefcase_item)
for(var/i = 3 to 0 step -1)
SEND_SIGNAL(sec_briefcase, COMSIG_TRY_STORAGE_INSERT, new /obj/item/stack/spacecash/c1000, null, TRUE, TRUE)
- SEND_SIGNAL(sec_briefcase, COMSIG_TRY_STORAGE_INSERT, new /obj/item/gun/energy/kinetic_accelerator/crossbow, null, TRUE, TRUE)
+ SEND_SIGNAL(sec_briefcase, COMSIG_TRY_STORAGE_INSERT, new /obj/item/gun/energy/recharge/ebow, null, TRUE, TRUE)
SEND_SIGNAL(sec_briefcase, COMSIG_TRY_STORAGE_INSERT, new /obj/item/gun/ballistic/revolver/mateba, null, TRUE, TRUE)
SEND_SIGNAL(sec_briefcase, COMSIG_TRY_STORAGE_INSERT, new /obj/item/ammo_box/a357, null, TRUE, TRUE)
SEND_SIGNAL(sec_briefcase, COMSIG_TRY_STORAGE_INSERT, new /obj/item/grenade/plastic/x4, null, TRUE, TRUE)
diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm
index 2a17d4a2f90a0..bb3793fd174d5 100644
--- a/code/modules/clothing/spacesuits/hardsuit.dm
+++ b/code/modules/clothing/spacesuits/hardsuit.dm
@@ -351,7 +351,7 @@
heat_protection = HEAD
armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 15, BOMB = 50, BIO = 100, RAD = 50, FIRE = 50, ACID = 75, STAMINA = 40, BLEED = 70)
light_range = 7
- allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator)
+ allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/recharge/kinetic_accelerator)
high_pressure_multiplier = 0.6
/obj/item/clothing/head/helmet/space/hardsuit/mining/Initialize(mapload)
@@ -386,7 +386,7 @@
heat_protection = HEAD
armor = list(MELEE = 35, BULLET = 15, LASER = 20, ENERGY = 10, BOMB = 50, BIO = 100, RAD = 50, FIRE = 50, ACID = 75, STAMINA = 20, BLEED = 70)
light_range = 6
- allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator)
+ allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/recharge/kinetic_accelerator)
actions_types = list(
/datum/action/item_action/toggle_helmet_light,
/datum/action/item_action/toggle_beacon_hud/explorer
@@ -888,7 +888,7 @@
icon_state = "hardsuit0-ancient"
item_state = "anc_helm"
armor = list(MELEE = 30, BULLET = 5, LASER = 5, ENERGY = 10, BOMB = 50, BIO = 100, RAD = 100, FIRE = 100, ACID = 75, STAMINA = 30, BLEED = 70)
- allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/gun/energy/plasmacutter, /obj/item/gun/energy/plasmacutter/adv, /obj/item/gun/energy/laser/retro, /obj/item/gun/energy/laser/retro/old, /obj/item/gun/energy/e_gun/old)
+ allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/recharge/kinetic_accelerator, /obj/item/gun/energy/plasmacutter, /obj/item/gun/energy/plasmacutter/adv, /obj/item/gun/energy/laser/retro, /obj/item/gun/energy/laser/retro/old, /obj/item/gun/energy/e_gun/old)
hardsuit_type = "ancient"
resistance_flags = FIRE_PROOF
@@ -898,7 +898,7 @@
icon_state = "hardsuit-ancient"
item_state = "anc_hardsuit"
armor = list(MELEE = 30, BULLET = 5, LASER = 5, ENERGY = 10, BOMB = 50, BIO = 100, RAD = 100, FIRE = 100, ACID = 75, STAMINA = 30, BLEED = 70)
- allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/storage/bag/ore, /obj/item/pickaxe, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/gun/energy/laser/retro, /obj/item/gun/energy/laser/retro/old, /obj/item/gun/energy/e_gun/old)
+ allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/storage/bag/ore, /obj/item/pickaxe, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/recharge/kinetic_accelerator, /obj/item/gun/energy/laser/retro, /obj/item/gun/energy/laser/retro/old, /obj/item/gun/energy/e_gun/old)
slowdown = 3
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ancient
resistance_flags = FIRE_PROOF
diff --git a/code/modules/clothing/suits/cloaks.dm b/code/modules/clothing/suits/cloaks.dm
index 2e2214d96b77f..cd1322e2543bb 100644
--- a/code/modules/clothing/suits/cloaks.dm
+++ b/code/modules/clothing/suits/cloaks.dm
@@ -81,7 +81,7 @@
name = "drake armour"
icon_state = "dragon"
desc = "A suit of armour fashioned from the remains of an ash drake."
- allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe, /obj/item/spear)
+ allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/recharge/kinetic_accelerator, /obj/item/pickaxe, /obj/item/spear)
armor = list(MELEE = 70, BULLET = 30, LASER = 50, ENERGY = 40, BOMB = 70, BIO = 60, RAD = 50, FIRE = 100, ACID = 100, STAMINA = 30, BLEED = 50)
hoodtype = /obj/item/clothing/head/hooded/cloakhood/drake
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
diff --git a/code/modules/clothing/suits/wintercoats.dm b/code/modules/clothing/suits/wintercoats.dm
index 7a65f42337de7..5423c6961e8fa 100644
--- a/code/modules/clothing/suits/wintercoats.dm
+++ b/code/modules/clothing/suits/wintercoats.dm
@@ -362,7 +362,7 @@
/obj/item/resonator,
/obj/item/mining_scanner,
/obj/item/t_scanner/adv_mining_scanner,
- /obj/item/gun/energy/kinetic_accelerator,
+ /obj/item/gun/energy/recharge/kinetic_accelerator,
/obj/item/reagent_containers/cup/glass/bottle,
/obj/item/flashlight,
/obj/item/tank/internals/emergency_oxygen,
diff --git a/code/modules/jobs/job_types/shaft_miner.dm b/code/modules/jobs/job_types/shaft_miner.dm
index 1c3ad34cdf10c..c22955627c696 100644
--- a/code/modules/jobs/job_types/shaft_miner.dm
+++ b/code/modules/jobs/job_types/shaft_miner.dm
@@ -52,7 +52,7 @@
duffelbag = /obj/item/storage/backpack/duffelbag
box = /obj/item/storage/box/survival/mining
- chameleon_extras = /obj/item/gun/energy/kinetic_accelerator
+ chameleon_extras = /obj/item/gun/energy/recharge/kinetic_accelerator
/datum/outfit/job/miner/equipped
name = "Shaft Miner (Equipment)"
@@ -66,7 +66,7 @@
/obj/item/knife/combat/survival=1,
/obj/item/mining_voucher=1,
/obj/item/t_scanner/adv_mining_scanner/lesser=1,
- /obj/item/gun/energy/kinetic_accelerator=1,\
+ /obj/item/gun/energy/recharge/kinetic_accelerator=1,\
/obj/item/stack/marker_beacon/ten=1)
/datum/outfit/job/miner/equipped/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
diff --git a/code/modules/mining/equipment/explorer_gear.dm b/code/modules/mining/equipment/explorer_gear.dm
index 080ee5fad139e..467d6464a9af5 100644
--- a/code/modules/mining/equipment/explorer_gear.dm
+++ b/code/modules/mining/equipment/explorer_gear.dm
@@ -19,7 +19,7 @@
/obj/item/resonator,
/obj/item/mining_scanner,
/obj/item/t_scanner/adv_mining_scanner,
- /obj/item/gun/energy/kinetic_accelerator,
+ /obj/item/gun/energy/recharge/kinetic_accelerator,
/obj/item/pickaxe
)
resistance_flags = FIRE_PROOF
@@ -84,7 +84,7 @@
resistance_flags = FIRE_PROOF | LAVA_PROOF
slowdown = 0
armor = list(MELEE = 70, BULLET = 40, LASER = 20, ENERGY = 20, BOMB = 50, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, STAMINA = 40, BLEED = 50)
- allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe)
+ allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/recharge/kinetic_accelerator, /obj/item/pickaxe)
high_pressure_multiplier = 0.6
/obj/item/clothing/suit/space/hostile_environment/Initialize(mapload)
diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm
index 85c8da179e38d..319673f7c94c4 100644
--- a/code/modules/mining/machine_vending.dm
+++ b/code/modules/mining/machine_vending.dm
@@ -157,7 +157,7 @@
icon_deny = "mining-deny"
prize_list = list( //if you add something to this, please, for the love of god, sort it by price/type. use tabs and not spaces.
//Direct mining tools go here
- new /datum/data/vendor_equipment("Proto-Kinetic Accelerator", /obj/item/gun/energy/kinetic_accelerator, 500),
+ new /datum/data/vendor_equipment("Proto-Kinetic Accelerator", /obj/item/gun/energy/recharge/kinetic_accelerator, 500),
new /datum/data/vendor_equipment("Proto-Kinetic Crusher", /obj/item/kinetic_crusher, 800),
new /datum/data/vendor_equipment("Mining Conscription Kit", /obj/item/storage/backpack/duffelbag/mining_conscript, 1000),
new /datum/data/vendor_equipment("Plasma Cutter", /obj/item/gun/energy/plasmacutter, 2000),
diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm
index 63cb84d979023..7b92133cf8d0c 100644
--- a/code/modules/mining/mine_items.dm
+++ b/code/modules/mining/mine_items.dm
@@ -63,7 +63,7 @@
new /obj/item/storage/bag/plants(src)
new /obj/item/storage/bag/ore(src)
new /obj/item/t_scanner/adv_mining_scanner/lesser(src)
- new /obj/item/gun/energy/kinetic_accelerator(src)
+ new /obj/item/gun/energy/recharge/kinetic_accelerator(src)
new /obj/item/clothing/glasses/meson(src)
new /obj/item/survivalcapsule(src)
new /obj/item/assault_pod/mining(src)
diff --git a/code/modules/mining/minebot.dm b/code/modules/mining/minebot.dm
index 8d203c326d6e2..22541a75e7d9d 100644
--- a/code/modules/mining/minebot.dm
+++ b/code/modules/mining/minebot.dm
@@ -53,7 +53,7 @@
var/mode = MODE_MINING /// What mode the minebot is in
var/mining_enabled = FALSE /// Whether or not the minebot will mine new ores while in mining mode.
var/list/installed_upgrades /// A list of all the minebot's installed upgrades
- var/obj/item/gun/energy/kinetic_accelerator/minebot/stored_pka /// The minebot's stored PKA
+ var/obj/item/gun/energy/recharge/kinetic_accelerator/minebot/stored_pka /// The minebot's stored PKA
var/obj/item/gun/energy/plasmacutter/stored_cutter /// The minebot's stored plasma cutter
var/obj/item/pickaxe/drill/stored_drill /// The minebot's stored drill
var/obj/item/t_scanner/adv_mining_scanner/stored_scanner /// The minebot's stored mining scanner
diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm
index 3a3cd3f151ba2..3e15fb60590f4 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -592,7 +592,7 @@
/obj/item/weldingtool/cyborg/mini,
/obj/item/extinguisher/mini,
/obj/item/storage/bag/sheetsnatcher/borg,
- /obj/item/gun/energy/kinetic_accelerator/cyborg,
+ /obj/item/gun/energy/recharge/kinetic_accelerator/cyborg,
/obj/item/gps/cyborg,
/obj/item/stack/marker_beacon)
emag_modules = list(/obj/item/borg/stun)
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index b98d0f1e51171..a122e86690b80 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -231,7 +231,7 @@
return loc != user ? TRUE : FALSE
/obj/item/gun/proc/shoot_with_empty_chamber(mob/living/user as mob|obj)
- balloon_alert(user, "[src] clicks.")
+ balloon_alert_to_viewers("*click*")
playsound(src, dry_fire_sound, 30, TRUE)
/obj/item/gun/proc/fire_sounds()
diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm
index 4311e4548f739..ab643adb8de73 100644
--- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm
+++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm
@@ -1,37 +1,28 @@
-/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."
- automatic_charge_overlays = FALSE
icon_state = "kineticgun"
item_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
- automatic_charge_overlays = FALSE
- var/overheat_time = 16
- var/holds_charge = FALSE
- var/unique_frequency = FALSE // modified by KA modkits
- var/overheat = FALSE
can_bayonet = TRUE
knife_x_offset = 20
knife_y_offset = 12
has_weapon_slowdown = FALSE
-
+ var/mob/holder
var/max_mod_capacity = 100
var/list/modkits = list()
- var/recharge_timerid
-
-/obj/item/gun/energy/kinetic_accelerator/add_seclight_point()
+/obj/item/gun/energy/recharge/kinetic_accelerator/add_seclight_point()
AddComponent(/datum/component/seclite_attachable, \
light_overlay_icon = 'icons/obj/guns/flashlights.dmi', \
light_overlay = "flight", \
overlay_x = 15, \
overlay_y = 9)
-/obj/item/gun/energy/kinetic_accelerator/examine(mob/user)
+/obj/item/gun/energy/recharge/kinetic_accelerator/examine(mob/user)
. = ..()
if(max_mod_capacity)
. += "[get_remaining_mod_capacity()]% mod capacity remaining."
@@ -39,7 +30,7 @@
var/obj/item/borg/upgrade/modkit/M = A
. += "[icon2html(M, user)] There is \a [M] installed, using [M.cost]% 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, "You pry the modifications out.")
@@ -49,113 +40,44 @@
else
to_chat(user, "There are no modifications currently installed.")
-/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 get_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/get_modkits()
+/obj/item/gun/energy/recharge/kinetic_accelerator/proc/get_modkits()
. = list()
for(var/A in modkits)
. += A
-/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 get_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
holds_charge = TRUE
unique_frequency = TRUE
requires_wielding = FALSE
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
requires_wielding = FALSE
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/user)
- . = ..()
- attempt_reload(user)
-
-/obj/item/gun/energy/kinetic_accelerator/equipped(mob/user)
- . = ..()
- if(!can_shoot())
- attempt_reload(user)
-
-/obj/item/gun/energy/kinetic_accelerator/dropped()
- ..()
- if(!QDELING(src) && !holds_charge)
- // Put it on a delay because moving item from slot to hand
- // calls dropped().
- addtimer(CALLBACK(src, PROC_REF(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_icon()
-
-/obj/item/gun/energy/kinetic_accelerator/proc/attempt_reload(mob/user, 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.GetAllContents())
- if(!K.unique_frequency)
- carried++
-
- carried = max(carried, 1)
- else
- carried = 1
-
- // If we are overriding a crosshair, then clear it
- if (deltimer(recharge_timerid))
- user?.client.clear_cooldown_cursor()
- recharge_timerid = addtimer(CALLBACK(src, PROC_REF(reload)), recharge_time * carried, TIMER_STOPPABLE)
- user?.client?.give_cooldown_cursor(recharge_time * carried + 1)
-
-/obj/item/gun/energy/kinetic_accelerator/proc/reload()
- cell.give(cell.maxcharge)
- if(!suppressed)
- playsound(src.loc, 'sound/weapons/kenetic_reload.ogg', 60, 1)
- else
- to_chat(loc, "[src] silently charges up.")
- update_icon()
- overheat = FALSE
-
-/obj/item/gun/energy/kinetic_accelerator/update_overlays()
- . = ..()
- if(!can_shoot())
- . += "[icon_state]_empty"
-
//Casing
/obj/item/ammo_casing/energy/kinetic
projectile_type = /obj/projectile/kinetic
@@ -165,8 +87,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(BB)
//Projectiles
@@ -181,7 +103,7 @@
var/pressure_decrease_active = FALSE
var/pressure_decrease = 0.5
- 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
@@ -252,7 +174,7 @@
. += "Occupies [cost]% 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
..()
@@ -260,10 +182,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.module.modules)
+ for(var/obj/item/gun/energy/recharge/kinetic_accelerator/cyborg/H in R.module.modules)
return install(H, usr)
-/obj/item/borg/upgrade/modkit/proc/install(obj/item/gun/energy/kinetic_accelerator/KA, mob/user)
+/obj/item/borg/upgrade/modkit/proc/install(obj/item/gun/energy/recharge/kinetic_accelerator/KA, mob/user)
. = TRUE
if(restricted_mod_type)
var/restricted_mod_count = 0
@@ -290,10 +212,10 @@
/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.module.modules)
+ for(var/obj/item/gun/energy/recharge/kinetic_accelerator/cyborg/KA in R.module.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)
forceMove(get_turf(KA))
KA.modkits -= src
@@ -302,11 +224,11 @@
/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
@@ -335,13 +257,13 @@
modifier = 3.2
restricted_mod_type = /obj/item/borg/upgrade/modkit/cooldown/repeater
-/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
..()
@@ -353,7 +275,7 @@
restricted_mod_type = /obj/item/borg/upgrade/modkit/aoe
maximum_of_type = 2
-/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
@@ -365,7 +287,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)
@@ -374,7 +296,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)
@@ -418,7 +340,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
@@ -427,8 +349,8 @@
if(ismineralturf(target_turf))
valid_repeat = TRUE
if(valid_repeat)
- KA.overheat = FALSE
- KA.attempt_reload(K.firer, KA.overheat_time * 0.25) //If you hit, the cooldown drops to 0.75 seconds.
+ KA.cell.use(KA.cell.charge)
+ KA.attempt_reload(K.firer, KA.recharge_time * 0.25) //If you hit, the cooldown drops to 0.75 seconds.
/obj/item/borg/upgrade/modkit/lifesteal
name = "lifesteal crystal"
@@ -438,7 +360,7 @@
cost = 0 //Obtained only from chests in limited quantities
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)
@@ -452,7 +374,7 @@
restricted_mod_type = /obj/item/borg/upgrade/modkit/resonator_blasts
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)
@@ -469,7 +391,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(STATUS_EFFECT_SYPHONMARK)
@@ -480,7 +402,7 @@
qdel(SM)
L.apply_status_effect(STATUS_EFFECT_SYPHONMARK, 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])
@@ -518,12 +440,12 @@
cost = 0
restricted_mod_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
..()
@@ -538,15 +460,21 @@
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
KA.name = chassis_name
+ if(iscarbon(KA.loc))
+ 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.name = initial(KA.name)
+ if(iscarbon(KA.loc))
+ var/mob/living/carbon/holder = KA.loc
+ holder.update_inv_hands()
..()
/obj/item/borg/upgrade/modkit/chassis_mod/orange
diff --git a/code/modules/projectiles/guns/energy/recharge.dm b/code/modules/projectiles/guns/energy/recharge.dm
new file mode 100644
index 0000000000000..75db236aba82f
--- /dev/null
+++ b/code/modules/projectiles/guns/energy/recharge.dm
@@ -0,0 +1,147 @@
+
+
+//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_REF(empty_if_not_held)), 0.1 SECONDS)
+
+/obj/item/gun/energy/recharge/process_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(mob/user, 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.GetAllContents())
+ if(recharging_gun.type != type || recharging_gun.unique_frequency)
+ continue
+ carried++
+ carried = max(carried, 1)
+
+ // If we are overriding a crosshair, then clear it
+ if (deltimer(recharge_timerid))
+ user?.client.clear_cooldown_cursor()
+ recharge_timerid = addtimer(CALLBACK(src, PROC_REF(reload)), set_recharge_time * carried, TIMER_STOPPABLE)
+ user?.client?.give_cooldown_cursor(set_recharge_time * carried + 1)
+
+/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, "[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"
+ item_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_NORMAL
+ custom_materials = list(/datum/material/iron=4000)
+ suppressed = null
+ ammo_type = list(/obj/item/ammo_casing/energy/bolt/large)
+ pin = null
+
+/obj/item/gun/energy/recharge/ebow/radbow
+ name = "gamma bow"
+ desc = "A weapon favored by Madmen."
+ icon_state = "crossbow"
+ item_state = "crossbow"
+ ammo_type = list(/obj/item/ammo_casing/energy/bolt/radbolt)
+ recharge_time = 250
+
+/obj/item/gun/energy/recharge/ebow/add_seclight_point()
+ return
diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm
index 416c973ddfaf4..6fa3812ad6a64 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -97,50 +97,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"
- item_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
- max_mod_capacity = 0
-
-/obj/item/gun/energy/kinetic_accelerator/crossbow/add_seclight_point()
- return
-
-/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"
- item_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"
- w_class = WEIGHT_CLASS_NORMAL
- custom_materials = list(/datum/material/iron=4000)
- suppressed = null
- ammo_type = list(/obj/item/ammo_casing/energy/bolt/large)
- pin = null
-
-/obj/item/gun/energy/kinetic_accelerator/crossbow/radbow
- name = "gamma bow"
- desc = "A weapon favored by Madmen."
- icon_state = "crossbow"
- item_state = "crossbow"
- ammo_type = list(/obj/item/ammo_casing/energy/bolt/radbolt)
- overheat_time = 250
-
/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."
diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm
index 4fe37792e9299..c43da8e7f5985 100644
--- a/code/modules/research/designs/weapon_designs.dm
+++ b/code/modules/research/designs/weapon_designs.dm
@@ -396,7 +396,7 @@
id = "largecrossbow"
build_type = PROTOLATHE
materials = list(/datum/material/iron = 5000, /datum/material/glass = 1500, /datum/material/uranium = 1500, /datum/material/silver = 1500)
- build_path = /obj/item/gun/energy/kinetic_accelerator/crossbow/large
+ build_path = /obj/item/gun/energy/recharge/ebow/large
category = list("Weapons")
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
diff --git a/code/modules/spells/spell_types/rightandwrong.dm b/code/modules/spells/spell_types/rightandwrong.dm
index 7e5371b6d878a..c301093154e1a 100644
--- a/code/modules/spells/spell_types/rightandwrong.dm
+++ b/code/modules/spells/spell_types/rightandwrong.dm
@@ -23,7 +23,7 @@ GLOBAL_LIST_INIT(summoned_guns, list(
/obj/item/pneumatic_cannon/speargun,
/obj/item/gun/ballistic/automatic/mini_uzi,
/obj/item/gun/energy/lasercannon,
- /obj/item/gun/energy/kinetic_accelerator/crossbow/large,
+ /obj/item/gun/energy/recharge/ebow/large,
/obj/item/gun/energy/e_gun/nuclear,
/obj/item/gun/ballistic/automatic/proto,
/obj/item/gun/ballistic/automatic/c20r,
@@ -35,7 +35,7 @@ GLOBAL_LIST_INIT(summoned_guns, list(
/obj/item/gun/energy/pulse/carbine,
/obj/item/gun/energy/decloner,
/obj/item/gun/energy/mindflayer,
- /obj/item/gun/energy/kinetic_accelerator,
+ /obj/item/gun/energy/recharge/kinetic_accelerator,
/obj/item/gun/energy/plasmacutter/adv,
/obj/item/gun/energy/wormhole_projector,
/obj/item/gun/ballistic/automatic/wt550,
diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm
index b98bdcc0cff5c..750ed038d02c4 100644
--- a/code/modules/uplink/uplink_items.dm
+++ b/code/modules/uplink/uplink_items.dm
@@ -832,7 +832,7 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
and fire bolts tipped with dangerous toxins that will disorient and \
irradiate targets. It can produce an infinite number of bolts \
which automatically recharge roughly 25 seconds after each shot."
- item = /obj/item/gun/energy/kinetic_accelerator/crossbow/radbow
+ item = /obj/item/gun/energy/recharge/ebow/radbow
cost = 8
surplus = 50
@@ -844,7 +844,7 @@ GLOBAL_LIST_INIT(illegal_tech_blacklist, typecacheof(list(
toxin that will damage and disorient targets, causing them to \
slur as if inebriated. It can produce an infinite number \
of bolts, but takes a small amount of time to automatically recharge after each shot."
- item = /obj/item/gun/energy/kinetic_accelerator/crossbow
+ item = /obj/item/gun/energy/recharge/ebow
cost = 12
surplus = 50
purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS)