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