From 61f1c5ee190025cf9704ec9515fbcd2e89e8affa Mon Sep 17 00:00:00 2001
From: Fikou <23585223+Fikou@users.noreply.github.com>
Date: Tue, 19 Apr 2022 13:55:37 +0200
Subject: [PATCH] [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
---
_maps/RandomZLevels/caves.dmm | 6 +-
code/datums/components/crafting/recipes.dm | 8 +-
code/game/objects/items/storage/holsters.dm | 2 +-
.../game/objects/items/storage/uplink_kits.dm | 2 +-
code/game/objects/structures/mystery_box.dm | 2 +-
.../antagonists/traitor/datum_traitor.dm | 2 +-
code/modules/clothing/outfits/standard.dm | 2 +-
code/modules/clothing/suits/cloaks.dm | 4 +-
code/modules/clothing/suits/wintercoats.dm | 2 +-
code/modules/jobs/job_types/shaft_miner.dm | 4 +-
.../modules/mining/equipment/explorer_gear.dm | 2 +-
.../modules/mining/lavaland/megafauna_loot.dm | 2 +-
code/modules/mining/machine_vending.dm | 4 +-
code/modules/mining/mine_items.dm | 2 +-
code/modules/mining/minebot.dm | 4 +-
.../mob/living/silicon/robot/robot_model.dm | 2 +-
.../hostile/megafauna/blood_drunk_miner.dm | 4 +-
.../guns/energy/kinetic_accelerator.dm | 161 +++++-------------
.../projectiles/guns/energy/recharge.dm | 129 ++++++++++++++
.../projectiles/guns/energy/special.dm | 36 ----
.../spells/spell_types/rightandwrong.dm | 4 +-
code/modules/uplink/uplink_items/stealthy.dm | 2 +-
tgstation.dme | 1 +
23 files changed, 198 insertions(+), 189 deletions(-)
create mode 100644 code/modules/projectiles/guns/energy/recharge.dm
diff --git a/_maps/RandomZLevels/caves.dmm b/_maps/RandomZLevels/caves.dmm
index 65506463dd4..af080819eac 100644
--- a/_maps/RandomZLevels/caves.dmm
+++ b/_maps/RandomZLevels/caves.dmm
@@ -739,7 +739,7 @@
/area/awaymission/caves/northblock)
"dA" = (
/obj/structure/closet/secure_closet/personal,
-/obj/item/gun/energy/kinetic_accelerator,
+/obj/item/gun/energy/recharge/kinetic_accelerator,
/turf/open/floor/wood,
/area/awaymission/caves/northblock)
"dB" = (
@@ -989,8 +989,8 @@
/area/awaymission/caves/listeningpost)
"eK" = (
/obj/structure/table,
-/obj/item/gun/energy/kinetic_accelerator,
-/obj/item/gun/energy/kinetic_accelerator,
+/obj/item/gun/energy/recharge/kinetic_accelerator,
+/obj/item/gun/energy/recharge/kinetic_accelerator,
/obj/effect/decal/cleanable/cobweb/cobweb2,
/turf/open/floor/iron,
/area/awaymission/caves/listeningpost)
diff --git a/code/datums/components/crafting/recipes.dm b/code/datums/components/crafting/recipes.dm
index a3ae2554dca..83a6e40a710 100644
--- a/code/datums/components/crafting/recipes.dm
+++ b/code/datums/components/crafting/recipes.dm
@@ -241,8 +241,8 @@
/datum/crafting_recipe/ebow
name = "Energy Crossbow"
tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
- result = /obj/item/gun/energy/kinetic_accelerator/crossbow/large
- reqs = list(/obj/item/gun/energy/kinetic_accelerator = 1,
+ result = /obj/item/gun/energy/recharge/ebow/large
+ reqs = list(/obj/item/gun/energy/recharge/kinetic_accelerator = 1,
/obj/item/stack/cable_coil = 5,
/obj/item/weaponcrafting/gunkit/ebow = 1,
/datum/reagent/uranium/radium = 15)
@@ -250,10 +250,6 @@
category = CAT_WEAPONRY
subcategory = CAT_WEAPON
-/datum/crafting_recipe/ebow/New()
- ..()
- blacklist += subtypesof(/obj/item/gun/energy/kinetic_accelerator)
-
/datum/crafting_recipe/xraylaser
name = "X-ray Laser Gun"
tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
diff --git a/code/game/objects/items/storage/holsters.dm b/code/game/objects/items/storage/holsters.dm
index 1cc2039b6cf..ce8cda00113 100644
--- a/code/game/objects/items/storage/holsters.dm
+++ b/code/game/objects/items/storage/holsters.dm
@@ -149,7 +149,7 @@
/obj/item/ammo_box/a357,
/obj/item/ammo_box/a762,
/obj/item/ammo_box/magazine/toy/pistol,
- /obj/item/gun/energy/kinetic_accelerator/crossbow,
+ /obj/item/gun/energy/recharge/ebow,
/obj/item/gun/energy/e_gun/mini,
/obj/item/gun/energy/disabler,
/obj/item/gun/energy/dueling
diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm
index dcb07f09a02..37db789e2cf 100644
--- a/code/game/objects/items/storage/uplink_kits.dm
+++ b/code/game/objects/items/storage/uplink_kits.dm
@@ -61,7 +61,7 @@
new /obj/item/chameleon(src) // 7 tc
if(KIT_STEALTHY)
- 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/game/objects/structures/mystery_box.dm b/code/game/objects/structures/mystery_box.dm
index 2d59a0e61e8..2ffcf1ce82b 100644
--- a/code/game/objects/structures/mystery_box.dm
+++ b/code/game/objects/structures/mystery_box.dm
@@ -20,7 +20,7 @@
GLOBAL_LIST_INIT(mystery_box_guns, list(
/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,
/obj/item/gun/energy/e_gun/advtaser,
/obj/item/gun/energy/e_gun/nuclear,
diff --git a/code/modules/antagonists/traitor/datum_traitor.dm b/code/modules/antagonists/traitor/datum_traitor.dm
index ec724ee7182..1ce69e9d907 100644
--- a/code/modules/antagonists/traitor/datum_traitor.dm
+++ b/code/modules/antagonists/traitor/datum_traitor.dm
@@ -325,7 +325,7 @@
gloves = /obj/item/clothing/gloves/color/yellow
mask = /obj/item/clothing/mask/gas
l_hand = /obj/item/melee/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/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 cd7a1339f47..c6f8901e354 100644
--- a/code/modules/clothing/outfits/standard.dm
+++ b/code/modules/clothing/outfits/standard.dm
@@ -252,7 +252,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/c4/x4, null, TRUE, TRUE)
diff --git a/code/modules/clothing/suits/cloaks.dm b/code/modules/clothing/suits/cloaks.dm
index e9c745b2dd4..3cd48509c3d 100644
--- a/code/modules/clothing/suits/cloaks.dm
+++ b/code/modules/clothing/suits/cloaks.dm
@@ -71,7 +71,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 = 65, BULLET = 15, LASER = 40, ENERGY = 40, BOMB = 70, BIO = 60, FIRE = 100, ACID = 100)
hoodtype = /obj/item/clothing/head/hooded/cloakhood/drake
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
@@ -98,7 +98,7 @@
name = "godslayer armour"
icon_state = "godslayer"
desc = "A suit of armour fashioned from the remnants of a knight's armor, and parts of a wendigo."
- 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 = 50, BULLET = 25, LASER = 25, ENERGY = 25, BOMB = 50, BIO = 50, FIRE = 100, ACID = 100)
clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL
hoodtype = /obj/item/clothing/head/hooded/cloakhood/godslayer
diff --git a/code/modules/clothing/suits/wintercoats.dm b/code/modules/clothing/suits/wintercoats.dm
index 8f2d9f51b42..440d3cc307c 100644
--- a/code/modules/clothing/suits/wintercoats.dm
+++ b/code/modules/clothing/suits/wintercoats.dm
@@ -422,7 +422,7 @@
icon_state = "coatminer"
inhand_icon_state = "coatminer"
allowed = list(
- /obj/item/gun/energy/kinetic_accelerator,
+ /obj/item/gun/energy/recharge/kinetic_accelerator,
/obj/item/mining_scanner,
/obj/item/pickaxe,
/obj/item/resonator,
diff --git a/code/modules/jobs/job_types/shaft_miner.dm b/code/modules/jobs/job_types/shaft_miner.dm
index 8a950babf33..3a5342b6dfb 100644
--- a/code/modules/jobs/job_types/shaft_miner.dm
+++ b/code/modules/jobs/job_types/shaft_miner.dm
@@ -51,7 +51,7 @@
duffelbag = /obj/item/storage/backpack/duffelbag/explorer
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)"
@@ -60,7 +60,7 @@
suit_store = /obj/item/tank/internals/oxygen
backpack_contents = list(
/obj/item/flashlight/seclite = 1,
- /obj/item/gun/energy/kinetic_accelerator = 1,
+ /obj/item/gun/energy/recharge/kinetic_accelerator = 1,
/obj/item/knife/combat/survival = 1,
/obj/item/mining_voucher = 1,
/obj/item/stack/marker_beacon/ten = 1,
diff --git a/code/modules/mining/equipment/explorer_gear.dm b/code/modules/mining/equipment/explorer_gear.dm
index 7aea6835aff..20dd85a50f5 100644
--- a/code/modules/mining/equipment/explorer_gear.dm
+++ b/code/modules/mining/equipment/explorer_gear.dm
@@ -11,7 +11,7 @@
max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT
hoodtype = /obj/item/clothing/head/hooded/explorer
armor = list(MELEE = 30, BULLET = 10, LASER = 10, ENERGY = 20, BOMB = 50, BIO = 100, FIRE = 50, ACID = 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, /obj/item/storage/bag/ore)
+ 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/storage/bag/ore)
resistance_flags = FIRE_PROOF
/obj/item/clothing/head/hooded/explorer
diff --git a/code/modules/mining/lavaland/megafauna_loot.dm b/code/modules/mining/lavaland/megafauna_loot.dm
index ebc8600eb0d..75e9a7ef4f0 100644
--- a/code/modules/mining/lavaland/megafauna_loot.dm
+++ b/code/modules/mining/lavaland/megafauna_loot.dm
@@ -273,7 +273,7 @@
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
clothing_flags = THICKMATERIAL
resistance_flags = FIRE_PROOF|LAVA_PROOF|ACID_PROOF
- 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)
/obj/item/clothing/suit/hooded/hostile_environment/Initialize(mapload)
. = ..()
diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm
index 44c43aee415..25b23ce9b38 100644
--- a/code/modules/mining/machine_vending.dm
+++ b/code/modules/mining/machine_vending.dm
@@ -32,7 +32,7 @@
new /datum/data/mining_equipment("Tracking Implant Kit", /obj/item/storage/box/minertracker, 600),
new /datum/data/mining_equipment("Jaunter", /obj/item/wormhole_jaunter, 750),
new /datum/data/mining_equipment("Kinetic Crusher", /obj/item/kinetic_crusher, 750),
- new /datum/data/mining_equipment("Kinetic Accelerator", /obj/item/gun/energy/kinetic_accelerator, 750),
+ new /datum/data/mining_equipment("Kinetic Accelerator", /obj/item/gun/energy/recharge/kinetic_accelerator, 750),
new /datum/data/mining_equipment("Advanced Scanner", /obj/item/t_scanner/adv_mining_scanner, 800),
new /datum/data/mining_equipment("Resonator", /obj/item/resonator, 800),
new /datum/data/mining_equipment("Luxury Medipen", /obj/item/reagent_containers/hypospray/medipen/survival/luxury, 1000),
@@ -273,6 +273,6 @@
new /obj/item/encryptionkey/headset_mining(src)
new /obj/item/clothing/mask/gas/explorer(src)
new /obj/item/card/id/advanced/mining(src)
- new /obj/item/gun/energy/kinetic_accelerator(src)
+ new /obj/item/gun/energy/recharge/kinetic_accelerator(src)
new /obj/item/knife/combat/survival(src)
new /obj/item/flashlight/seclite(src)
diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm
index e2e779053a5..7326cbc4da2 100644
--- a/code/modules/mining/mine_items.dm
+++ b/code/modules/mining/mine_items.dm
@@ -61,7 +61,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 df318a8bd51..01f83396d4c 100644
--- a/code/modules/mining/minebot.dm
+++ b/code/modules/mining/minebot.dm
@@ -39,7 +39,7 @@
light_range = 6
light_on = FALSE
var/mode = MINEDRONE_COLLECT
- var/obj/item/gun/energy/kinetic_accelerator/minebot/stored_gun
+ var/obj/item/gun/energy/recharge/kinetic_accelerator/minebot/stored_gun
/mob/living/simple_animal/hostile/mining_drone/Initialize(mapload)
. = ..()
@@ -319,7 +319,7 @@
minebot.melee_damage_lower = initial(minebot.melee_damage_lower) + base_damage_add
minebot.melee_damage_upper = initial(minebot.melee_damage_upper) + base_damage_add
minebot.move_to_delay = initial(minebot.move_to_delay) + base_speed_add
- minebot.stored_gun?.overheat_time += base_cooldown_add
+ minebot.stored_gun?.recharge_time += base_cooldown_add
#undef MINEDRONE_COLLECT
#undef MINEDRONE_ATTACK
diff --git a/code/modules/mob/living/silicon/robot/robot_model.dm b/code/modules/mob/living/silicon/robot/robot_model.dm
index 73040d7928b..db9636a6d0b 100644
--- a/code/modules/mob/living/silicon/robot/robot_model.dm
+++ b/code/modules/mob/living/silicon/robot/robot_model.dm
@@ -638,7 +638,7 @@
/obj/item/weldingtool/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)
radio_channels = list(RADIO_CHANNEL_SCIENCE, RADIO_CHANNEL_SUPPLY)
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm
index 30528abb72e..0e58e5398a6 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm
@@ -37,8 +37,8 @@ Difficulty: Medium
ranged_cooldown_time = 1.6 SECONDS
pixel_x = -16
base_pixel_x = -16
- crusher_loot = list(/obj/item/melee/cleaving_saw, /obj/item/gun/energy/kinetic_accelerator, /obj/item/crusher_trophy/miner_eye)
- loot = list(/obj/item/melee/cleaving_saw, /obj/item/gun/energy/kinetic_accelerator)
+ crusher_loot = list(/obj/item/melee/cleaving_saw, /obj/item/gun/energy/recharge/kinetic_accelerator, /obj/item/crusher_trophy/miner_eye)
+ loot = list(/obj/item/melee/cleaving_saw, /obj/item/gun/energy/recharge/kinetic_accelerator)
wander = FALSE
del_on_death = TRUE
blood_volume = BLOOD_VOLUME_NORMAL
diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm
index 97b61e3dc67..a6e73985001 100644
--- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm
+++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm
@@ -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)
. += "[get_remaining_mod_capacity()]% mod capacity remaining."
@@ -37,7 +27,7 @@
var/obj/item/borg/upgrade/modkit/M = A
. += span_notice("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, 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 [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
..()
@@ -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)
diff --git a/code/modules/projectiles/guns/energy/recharge.dm b/code/modules/projectiles/guns/energy/recharge.dm
new file mode 100644
index 00000000000..1c667e12e74
--- /dev/null
+++ b/code/modules/projectiles/guns/energy/recharge.dm
@@ -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)
diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm
index 4ea68efdd1c..f14ab16058e 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -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."
diff --git a/code/modules/spells/spell_types/rightandwrong.dm b/code/modules/spells/spell_types/rightandwrong.dm
index 7a31b45c0f7..bc4fdda5e8c 100644
--- a/code/modules/spells/spell_types/rightandwrong.dm
+++ b/code/modules/spells/spell_types/rightandwrong.dm
@@ -27,7 +27,7 @@ GLOBAL_LIST_INIT(summoned_guns, list(
/obj/item/gun/ballistic/rifle/boltaction/harpoon,
/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,
@@ -39,7 +39,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/stealthy.dm b/code/modules/uplink/uplink_items/stealthy.dm
index 466d69fd13c..2d867744d16 100644
--- a/code/modules/uplink/uplink_items/stealthy.dm
+++ b/code/modules/uplink/uplink_items/stealthy.dm
@@ -93,7 +93,7 @@
toxin that will damage and disorient targets, causing them to \
slur as if inebriated. It can produce an infinite number \
of bolts, but takes time to automatically recharge after each shot."
- item = /obj/item/gun/energy/kinetic_accelerator/crossbow
+ item = /obj/item/gun/energy/recharge/ebow
progression_minimum = 30 MINUTES
cost = 10
surplus = 50
diff --git a/tgstation.dme b/tgstation.dme
index 63b4c51fd9d..1b02a5967c2 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -3776,6 +3776,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"