Energy Weapon Recharging: The Future Is Now (#17969)

* charge stuff

backpack charging

adds to antag uplink & ert suits

* modules for breachers & backpacks for lizards

* Update code/modules/projectiles/guns/energy.dm

Co-authored-by: Fluffy <65877598+FluffyGhoster@users.noreply.github.com>

* requested changes

* hghghuh

* Update code/game/objects/items/recharger_backpack.dm

Co-authored-by: Matt Atlas <mattiathebest2000@hotmail.it>

* variable tweaking

* Update code/modules/projectiles/guns/energy.dm

Co-authored-by: Fluffy <65877598+FluffyGhoster@users.noreply.github.com>

* Update code/game/objects/items/recharger_backpack.dm

Co-authored-by: Fluffy <65877598+FluffyGhoster@users.noreply.github.com>

* Update code/modules/clothing/spacesuits/rig/modules/utility.dm

Co-authored-by: Fluffy <65877598+FluffyGhoster@users.noreply.github.com>

* Update code/modules/clothing/spacesuits/rig/modules/utility.dm

Co-authored-by: Fluffy <65877598+FluffyGhoster@users.noreply.github.com>

* Update code/modules/clothing/spacesuits/rig/modules/utility.dm

Co-authored-by: Fluffy <65877598+FluffyGhoster@users.noreply.github.com>

* Update code/modules/clothing/spacesuits/rig/modules/utility.dm

Co-authored-by: Fluffy <65877598+FluffyGhoster@users.noreply.github.com>

* recharger for new suits

---------

Co-authored-by: Fluffy <65877598+FluffyGhoster@users.noreply.github.com>
Co-authored-by: Matt Atlas <mattiathebest2000@hotmail.it>
Co-authored-by: Alberyk <Alberyk@users.noreply.github.com>
This commit is contained in:
RustingWithYou
2023-12-26 02:31:25 +00:00
committed by GitHub
co-authored by Fluffy Matt Atlas Alberyk
parent cadd19beac
commit c07340bcf5
15 changed files with 335 additions and 12 deletions
+1
View File
@@ -996,6 +996,7 @@
#include "code\game\objects\items\items_icon.dm"
#include "code\game\objects\items\knitting.dm"
#include "code\game\objects\items\paintkit.dm"
#include "code\game\objects\items\recharger_backpack.dm"
#include "code\game\objects\items\shooting_range.dm"
#include "code\game\objects\items\skrell.dm"
#include "code\game\objects\items\spirit_board.dm"
+7
View File
@@ -250,3 +250,10 @@
telecrystal_cost = 2
bluecrystal_cost = 2
path = /obj/item/stack/liquidbags/half_full
/datum/uplink_item/item/tools/recharger_backpack
name = "Weapon Recharger Backpack"
desc = "A backpack which can recharge a connected energy weapon. Runs off normal power cells."
telecrystal_cost = 4
bluecrystal_cost = 4
path = /obj/item/recharger_backpack/high
+6
View File
@@ -45,6 +45,12 @@
path = /obj/item/rig_module/cooling_unit
desc = "A mounted suit cooling unit for use with hardsuits."
/datum/uplink_item/item/hardsuit_modules/recharger
name = "Mounted Weapon Recharge Module"
telecrystal_cost = 6
path = /obj/item/rig_module/recharger
desc = "A mounted system for recharging energy weapons."
/datum/uplink_item/item/hardsuit_modules/ai_container
name = "Integrated Intelligence System"
telecrystal_cost = 1
@@ -0,0 +1,107 @@
/obj/item/recharger_backpack
name = "weapon recharger backpack"
desc = "Developed by Hephaestus Industries, the HI-92 Recharge Platform is designed for long-term field recharge of energy weapons. Due to legal concerns, the design is rarely seen outside of military hands."
icon = 'icons/obj/recharger_backpack.dmi'
icon_state = "recharger_backpack"
item_state = "recharger_backpack"
contained_sprite = TRUE
w_class = ITEMSIZE_LARGE
slot_flags = SLOT_BACK
///Power cell used to recharge the gun. Empty by default.
var/obj/item/cell/powersupply
///The gun we're currently recharging. Connection handled in connect() and /obj/item/gun/energy/connect()
var/obj/item/gun/energy/connected
/obj/item/recharger_backpack/Initialize()
. = ..()
//To update the icon based on the power cell charge we spawn with
update_icon()
/obj/item/recharger_backpack/examine(mob/user)
. = ..()
if(powersupply)
to_chat(user, SPAN_NOTICE("The backpack display shows that the installed power cell is at [round(powersupply.percent())]%."))
/obj/item/recharger_backpack/attackby(obj/item/I, mob/user)
if(istype(I, /obj/item/cell) && !powersupply)
to_chat(usr, SPAN_NOTICE("You slot \the [I] into \the [src]'s power socket."))
playsound(get_turf(src), 'sound/machines/click.ogg', 30, 0)
user.drop_from_inventory(I, src)
powersupply = I
update_icon()
else if(istype(I, /obj/item/screwdriver) && powersupply)
to_chat(user, SPAN_NOTICE("You remove \the [powersupply] from \the [src]'s power socket"))
powersupply.forceMove(get_turf(src))
user.put_in_hands(powersupply)
powersupply = null
update_icon()
else if(istype(I, /obj/item/gun/energy))
connect(I)
else
. = ..()
/obj/item/recharger_backpack/proc/connect(obj/item/gun/energy/newgun)
if(connected)
to_chat(usr, SPAN_WARNING("\The [src] already has an energy weapon connected!"))
return
connected = newgun
/obj/item/recharger_backpack/verb/disconnect()
set name = "Disconnect Energy Weapon"
set category = "Object"
if(!connected)
to_chat(usr, SPAN_WARNING("\The [src] has no energy weapon connected!"))
return
connected.disconnect()
/obj/item/recharger_backpack/update_icon()
. = ..()
if(!powersupply)
icon_state = "recharger_backpack"
item_state = "recharger_backpack"
set_light(0)
else
var/current_charge = powersupply.percent()
switch(current_charge)
if(70 to INFINITY)
icon_state = "recharger_backpack_full"
item_state = "recharger_backpack_full"
set_light(2, 0.75, LIGHT_COLOR_GREEN)
if(35 to 70)
icon_state = "recharger_backpack_med"
item_state = "recharger_backpack_med"
set_light(2, 0.75, LIGHT_COLOR_FIRE)
if(1 to 35)
icon_state = "recharger_backpack_low"
item_state = "recharger_backpack_low"
set_light(2, 0.75, LIGHT_COLOR_RED)
if(-INFINITY to 1)
icon_state = "recharger_backpack"
item_state = "recharger_backpack"
set_light(0)
/obj/item/recharger_backpack/Destroy()
if(connected)
connected.disconnect()
if(powersupply)
QDEL_NULL(powersupply)
. = ..()
/obj/item/recharger_backpack/high/Initialize()
. = ..()
powersupply = new /obj/item/cell/high(src)
update_icon()
/obj/item/recharger_backpack/get_cell()
if(powersupply)
return powersupply
return ..()
@@ -878,3 +878,41 @@ GLOBAL_LIST_EMPTY(lattice_users)
previous_turf = T
sleep(1)
return TRUE
/obj/item/rig_module/recharger
name = "weapon recharge module"
desc = "A specialised power cable designed to connect an energy weapon to a hardsuit's power supply."
toggleable = TRUE
icon_state = "powersink"
interface_name = "integrated weapon recharger"
interface_desc = "Can connect to an energy weapon, recharging it off the hardsuit's power supply. Drag the weapon onto the hardsuit control module to connect it."
category = MODULE_LIGHT_COMBAT
usable = FALSE
disruptive = FALSE
confined_use = TRUE
///The gun charging off our hardsuit
var/obj/item/gun/energy/connected
/obj/item/rig_module/recharger/activate(mob/user)
if (!..())
return FALSE
if(!connected)
to_chat(user, SPAN_NOTICE("\The [src] does not have a connected energy weapon to charge!"))
return FALSE
to_chat(user, SPAN_NOTICE("\The [connected] is now connected to your hardsuit power supply. Deactivate this module to disconnect it."))
return TRUE
/obj/item/rig_module/recharger/deactivate(mob/user)
if (!..())
return FALSE
if(connected)
connected.disconnect()
return TRUE
@@ -56,7 +56,8 @@
/obj/item/rig_module/actuators/combat,
/obj/item/rig_module/maneuvering_jets,
/obj/item/rig_module/device/drill,
/obj/item/rig_module/chem_dispenser/combat
/obj/item/rig_module/chem_dispenser/combat,
/obj/item/rig_module/recharger
)
/obj/item/rig/unathi/fancy/ninja
@@ -105,7 +106,8 @@
/obj/item/rig_module/maneuvering_jets,
/obj/item/rig_module/grenade_launcher/frag,
/obj/item/rig_module/grenade_launcher,
/obj/item/rig_module/vision/nvg
/obj/item/rig_module/vision/nvg,
/obj/item/rig_module/recharger
)
/obj/item/rig/vaurca
@@ -142,7 +144,8 @@
/obj/item/rig_module/chem_dispenser/vaurca,
/obj/item/rig_module/boring,
/obj/item/rig_module/lattice,
/obj/item/rig_module/maneuvering_jets
/obj/item/rig_module/maneuvering_jets,
/obj/item/rig_module/recharger
)
@@ -37,7 +37,8 @@
/obj/item/rig_module/ai_container,
/obj/item/rig_module/power_sink,
/obj/item/rig_module/electrowarfare_suite,
/obj/item/rig_module/chem_dispenser/combat
/obj/item/rig_module/chem_dispenser/combat,
/obj/item/rig_module/recharger
)
/obj/item/rig/military
@@ -161,7 +162,8 @@
/obj/item/rig_module/actuators,
/obj/item/rig_module/device/drill,
/obj/item/rig_module/cooling_unit,
/obj/item/rig_module/fabricator/energy_net
/obj/item/rig_module/fabricator/energy_net,
/obj/item/rig_module/recharger
)
/obj/item/clothing/head/helmet/space/rig/tcfl
@@ -33,7 +33,8 @@
/obj/item/rig_module/vision/nvg,
/obj/item/rig_module/maneuvering_jets,
/obj/item/rig_module/datajack,
/obj/item/rig_module/actuators/combat
/obj/item/rig_module/actuators/combat,
/obj/item/rig_module/recharger
)
allowed_module_types = MODULE_GENERAL | MODULE_LIGHT_COMBAT | MODULE_HEAVY_COMBAT | MODULE_SPECIAL | MODULE_MEDICAL | MODULE_UTILITY | MODULE_VAURCA
@@ -61,7 +62,8 @@
/obj/item/rig_module/maneuvering_jets,
/obj/item/rig_module/mounted/plasmacutter,
/obj/item/rig_module/device/rfd_c,
/obj/item/rig_module/actuators
/obj/item/rig_module/actuators,
/obj/item/rig_module/recharger
)
allowed_module_types = MODULE_GENERAL | MODULE_LIGHT_COMBAT | MODULE_HEAVY_COMBAT | MODULE_SPECIAL | MODULE_UTILITY
@@ -87,7 +89,8 @@
/obj/item/rig_module/maneuvering_jets,
/obj/item/rig_module/device/healthscanner,
/obj/item/rig_module/chem_dispenser/injector,
/obj/item/rig_module/actuators
/obj/item/rig_module/actuators,
/obj/item/rig_module/recharger
)
allowed_module_types = MODULE_GENERAL | MODULE_LIGHT_COMBAT | MODULE_HEAVY_COMBAT | MODULE_SPECIAL | MODULE_MEDICAL
@@ -114,7 +117,8 @@
/obj/item/rig_module/maneuvering_jets,
/obj/item/rig_module/grenade_launcher,
/obj/item/rig_module/mounted/egun,
/obj/item/rig_module/actuators
/obj/item/rig_module/actuators,
/obj/item/rig_module/recharger
)
allowed_module_types = MODULE_GENERAL | MODULE_LIGHT_COMBAT | MODULE_HEAVY_COMBAT | MODULE_SPECIAL
@@ -142,7 +146,8 @@
/obj/item/rig_module/vision/nvg,
/obj/item/rig_module/maneuvering_jets,
/obj/item/rig_module/actuators/combat,
/obj/item/rig_module/storage
/obj/item/rig_module/storage,
/obj/item/rig_module/recharger
)
/obj/item/rig/ert/scc/engineer
@@ -204,7 +209,8 @@
/obj/item/rig_module/device/drill,
/obj/item/rig_module/device/rfd_c,
/obj/item/rig_module/datajack,
/obj/item/rig_module/actuators/combat
/obj/item/rig_module/actuators/combat,
/obj/item/rig_module/recharger
)
allowed_module_types = MODULE_GENERAL | MODULE_LIGHT_COMBAT | MODULE_HEAVY_COMBAT | MODULE_SPECIAL | MODULE_MEDICAL | MODULE_UTILITY | MODULE_VAURCA // all modules
@@ -40,6 +40,7 @@
/obj/item/rig_module/chem_dispenser/injector,
/obj/item/rig_module/datajack,
/obj/item/rig_module/actuators/combat,
/obj/item/rig_module/recharger,
/obj/item/rig_module/mounted/skrell_gun
)
@@ -78,7 +79,8 @@
/obj/item/rig_module/device/rfd_c,
/obj/item/rig_module/datajack,
/obj/item/rig_module/actuators/combat,
/obj/item/rig_module/teleporter/skrell
/obj/item/rig_module/teleporter/skrell,
/obj/item/rig_module/recharger
)
/obj/item/rig/skrell/tup/ninja
+95
View File
@@ -33,6 +33,9 @@
var/recharge_multiplier = 1
var/charge_tick = 0
/// External power source for the gun. Checked by get_external_power_supply()
var/obj/item/recharger
//vars passed to turrets
var/can_turret = 0 //1 allows you to attach the gun on a turret
var/secondary_projectile_type = null //if null, turret defaults to projectile_type
@@ -82,6 +85,8 @@
update_maptext()
/obj/item/gun/energy/Destroy()
if(recharger)
disconnect()
QDEL_NULL(power_supply)
return ..()
@@ -119,6 +124,8 @@
if(isrobot(src.loc.loc)) // for things inside a robot's module
var/mob/living/silicon/robot/R = src.loc.loc
return R.cell
if(recharger)
return recharger.get_cell()
if(istype(src.loc, /obj/item/rig_module))
var/obj/item/rig_module/module = src.loc
if(module.holder && module.holder.wearer)
@@ -132,6 +139,94 @@
return null
/**
* Connects the energy gun to an external power supply
*
* * powersource - the power supply in question. Can either be /obj/item/rig_module/recharger or /obj/item/recharger_backpack.
*/
/obj/item/gun/energy/proc/connect(obj/item/powersource)
SHOULD_NOT_SLEEP(TRUE)
if(recharger)
to_chat(usr, SPAN_WARNING("\The [src] is already connected to \the [recharger]!"))
return
if(istype(powersource, /obj/item/rig_module/recharger))
var/obj/item/rig_module/recharger/rigcharge = powersource
if(!rigcharge.holder || !rigcharge.holder.wearer)
to_chat(usr, SPAN_WARNING("\The [rigcharge] must be installed in a rig and active!"))
return
to_chat(usr, SPAN_NOTICE("You neatly plug \the [src] into \the [powersource]."))
playsound(get_turf(src), 'sound/machines/click.ogg', 30, 0)
rigcharge.connected = src
recharger = rigcharge.holder
self_recharge = TRUE
use_external_power = TRUE
if(istype(powersource, /obj/item/recharger_backpack))
var/obj/item/recharger_backpack/back_charge = powersource
if(!ismob(loc))
to_chat(usr, SPAN_WARNING("\The [back_charge] must be worn on the back before a weapon can be connected!"))
return
to_chat(usr, SPAN_NOTICE("You neatly plug \the [src] into \the [powersource]."))
playsound(get_turf(src), 'sound/machines/click.ogg', 30, 0)
back_charge.connect(src)
recharger = back_charge
self_recharge = TRUE
use_external_power = TRUE
///Disconnects the energy gun from its external power source if one exists.
/obj/item/gun/energy/proc/disconnect()
SHOULD_NOT_SLEEP(TRUE)
if(!recharger)
to_chat(usr, SPAN_WARNING("\The [src] lacks an external power source to disconnect!"))
return
if(istype(recharger, /obj/item/rig))
var/obj/item/rig/rig = recharger
var/obj/item/rig_module/recharger/rigcharger = locate() in rig.installed_modules
to_chat(usr, SPAN_NOTICE("With a snap, \the [src] is disconnected from \the [recharger]."))
playsound(get_turf(src), 'sound/machines/click.ogg', 30, 0)
if(rigcharger.active)
rigcharger.deactivate()
rigcharger.connected = null
else if(istype(recharger, /obj/item/recharger_backpack))
var/obj/item/recharger_backpack/backcharger = recharger
to_chat(usr, SPAN_NOTICE("With a snap, \the [src] is disconnected from \the [recharger]."))
playsound(get_turf(src), 'sound/machines/click.ogg', 30, 0)
backcharger.connected = null
recharger = null
self_recharge = initial(self_recharge)
use_external_power = initial(use_external_power)
/obj/item/gun/energy/MouseDrop(atom/over)
. = ..()
if(istype(over, /obj/item/rig))
var/obj/item/rig/rig = over
var/obj/item/rig_module/recharger/rigcharge = locate() in rig.installed_modules
if(rigcharge)
connect(rigcharge)
else if(istype(over, /obj/item/recharger_backpack))
var/obj/item/recharger_backpack/backcharge = over
connect(backcharge)
/obj/item/gun/energy/dropped(mob/living/user)
. = ..()
if(recharger)
disconnect()
/obj/item/gun/energy/examine(mob/user, distance, is_adjacent)
. = ..()
if(distance > 1)
@@ -121,3 +121,10 @@
req_tech = list(TECH_MATERIAL = 3, TECH_ENGINEERING = 3, TECH_POWER = 2)
materials = list(DEFAULT_WALL_MATERIAL = 15000, MATERIAL_GLASS = 6000)
build_path = /obj/item/rig_module/foam_sprayer
/datum/design/hardsuitmodules/recharge_module
name = "Mounted Weapon Recharger"
desc = "A hardsuit-integrated recharging system for energy weapons."
req_tech = list(TECH_MATERIAL = 3, TECH_POWER = 7, TECH_COMBAT = 5)
materials = list(DEFAULT_WALL_MATERIAL = 7000, MATERIAL_GLASS = 2250, MATERIAL_URANIUM = 3250, MATERIAL_GOLD = 2500)
build_path = /obj/item/rig_module/recharger
@@ -162,3 +162,9 @@
/datum/design/item/tool/inductive_charger/engineering
name = "Inductive Charger (Engineering)"
build_path = /obj/item/inductive_charger/handheld/engineering
/datum/design/item/tool/recharger_backpack
desc = "A man-portable recharger backpack developed by Hephaestus Industries. Often used by military organisations of the Spur for extended field use of energy weapons."
req_tech = list(TECH_POWER = 7, TECH_MATERIAL = 3, TECH_COMBAT = 5)
materials = list(DEFAULT_WALL_MATERIAL = 7000, MATERIAL_GLASS = 2250, MATERIAL_URANIUM = 3250, MATERIAL_GOLD = 2500)
build_path = /obj/item/recharger_backpack
@@ -0,0 +1,41 @@
################################
# Example Changelog File
#
# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
#
# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
# When it is, any changes listed below will disappear.
#
# Valid Prefixes:
# bugfix
# wip (For works in progress)
# tweak
# soundadd
# sounddel
# rscadd (general adding of nice things)
# rscdel (general deleting of nice things)
# imageadd
# imagedel
# maptweak
# spellcheck (typo fixes)
# experiment
# balance
# admin
# backend
# security
# refactor
#################################
# Your name.
author: RustingWithYou
# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
delete-after: True
# Any changes you've made. See valid prefix list above.
# INDENT WITH TWO SPACES. NOT TABS. SPACES.
# SCREW THIS UP AND IT WON'T WORK.
# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
changes:
- rscadd: "Adds the ability to recharge energy weapons from power backpacks and hardsuit modules."
Binary file not shown.

After

Width:  |  Height:  |  Size: 997 B

@@ -5979,6 +5979,8 @@
/obj/item/shield/energy/hegemony,
/obj/item/shield/energy/hegemony,
/obj/item/shield/energy/hegemony,
/obj/item/recharger_backpack/high,
/obj/item/recharger_backpack/high,
/turf/simulated/floor,
/area/hegemony_ship/armory)
"JO" = (