From 100275b85f835a7fa972559c63db5cc1c16b5c03 Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Sat, 13 Aug 2016 18:06:28 -0500 Subject: [PATCH] Kinetic Accelerator Overhaul --- .../objects/items/devices/modificationkit.dm | 35 --- code/modules/mining/machine_vending.dm | 1 - code/modules/projectiles/ammunition/energy.dm | 12 - .../guns/energy/kinetic_accelerator.dm | 238 ++++++++++++++++++ .../projectiles/guns/energy/special.dm | 140 ----------- .../modules/projectiles/projectile/special.dm | 58 ----- code/modules/research/designs.dm | 4 +- tgstation.dme | 2 +- 8 files changed, 241 insertions(+), 249 deletions(-) delete mode 100644 code/game/objects/items/devices/modificationkit.dm create mode 100644 code/modules/projectiles/guns/energy/kinetic_accelerator.dm diff --git a/code/game/objects/items/devices/modificationkit.dm b/code/game/objects/items/devices/modificationkit.dm deleted file mode 100644 index cd25b38140a..00000000000 --- a/code/game/objects/items/devices/modificationkit.dm +++ /dev/null @@ -1,35 +0,0 @@ -/obj/item/modkit - name = "modification kit" - desc = "A one-use kit, which enables kinetic accelerators to retain their \ - charge when away from a bioelectric source, renders them immune to \ - interference with other accelerators, as well as allowing less \ - dextrous races to use the tool." - icon = 'icons/obj/objects.dmi' - icon_state = "modkit" - origin_tech = "programming=2;materials=2;magnets=4" - var/uses = 1 - -/obj/item/modkit/afterattack(obj/item/weapon/gun/energy/kinetic_accelerator/C, mob/user) - ..() - if(!uses) - qdel(src) - return - if(!istype(C)) - user << "This kit can only modify kinetic \ - accelerators!" - return ..() - // RIP the 'improved improved improved improved kinetic accelerator - if(C.holds_charge && C.unique_frequency) - user << "This kinetic accelerator already has \ - these upgrades." - return ..() - - user <<"You modify the [C], adjusting the trigger \ - guard and internal capacitor." - C.name = "improved [C.name]" - C.holds_charge = TRUE - C.unique_frequency = TRUE - C.trigger_guard = TRIGGER_GUARD_ALLOW_ALL - uses-- - if(!uses) - qdel(src) diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm index 7bfeefc707a..4f6e067477d 100644 --- a/code/modules/mining/machine_vending.dm +++ b/code/modules/mining/machine_vending.dm @@ -38,7 +38,6 @@ new /datum/data/mining_equipment("Mining Hardsuit", /obj/item/clothing/suit/space/hardsuit/mining, 2000), new /datum/data/mining_equipment("Diamond Pickaxe", /obj/item/weapon/pickaxe/diamond, 2000), new /datum/data/mining_equipment("Super Resonator", /obj/item/weapon/resonator/upgraded, 2500), - new /datum/data/mining_equipment("Super Accelerator", /obj/item/weapon/gun/energy/kinetic_accelerator/super, 3000), new /datum/data/mining_equipment("Point Transfer Card", /obj/item/weapon/card/mining_point_card, 500), new /datum/data/mining_equipment("Mining Drone", /mob/living/simple_animal/hostile/mining_drone, 800), new /datum/data/mining_equipment("Drone Melee Upgrade", /obj/item/device/mine_bot_ugprade, 400), diff --git a/code/modules/projectiles/ammunition/energy.dm b/code/modules/projectiles/ammunition/energy.dm index 8d37a225f4a..abe46e6732d 100644 --- a/code/modules/projectiles/ammunition/energy.dm +++ b/code/modules/projectiles/ammunition/energy.dm @@ -111,18 +111,6 @@ projectile_type = /obj/item/projectile/meteor select_name = "goddamn meteor" -/obj/item/ammo_casing/energy/kinetic - projectile_type = /obj/item/projectile/kinetic - select_name = "kinetic" - e_cost = 500 - fire_sound = 'sound/weapons/Kenetic_accel.ogg' // fine spelling there chap - -/obj/item/ammo_casing/energy/kinetic/super - projectile_type = /obj/item/projectile/kinetic/super - -/obj/item/ammo_casing/energy/kinetic/hyper - projectile_type = /obj/item/projectile/kinetic/hyper - /obj/item/ammo_casing/energy/disabler projectile_type = /obj/item/projectile/beam/disabler select_name = "disable" diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm new file mode 100644 index 00000000000..4d5d8ffa6a2 --- /dev/null +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -0,0 +1,238 @@ +/obj/item/weapon/gun/energy/kinetic_accelerator + name = "proto-kinetic accelerator" + desc = "A self recharging, " + icon_state = "kineticgun" + item_state = "kineticgun" + ammo_type = list(/obj/item/ammo_casing/energy/kinetic) + cell_type = /obj/item/weapon/stock_parts/cell/emproof + needs_permit = 0 + unique_rename = 1 + origin_tech = "combat=3;powerstorage=3;engineering=3" + weapon_weight = WEAPON_LIGHT + can_flashlight = 1 + flight_x_offset = 15 + flight_y_offset = 9 + var/overheat_time = 16 + var/holds_charge = FALSE + var/unique_frequency = FALSE // modified by KA modkits + var/overheat = FALSE + + var/list/max_mod_capacity = 2 + var/list/modkits = list() + + +/obj/item/weapon/gun/energy/kinetic_accelerator/attackby(obj/item/A, mob/user) + if(istype(A, /obj/item/weapon/crowbar)) + if(modkits.len) + user << "You pry the modifications out." + for(var/obj/item/modkit/M in modkits) + M.forceMove(get_turf(user)) + else + user << "There are no modifications currently installed." + else if(istype(A, /obj/item/modkit)) + var/obj/item/modkit/MK = A + var/current_mod_capacity = 0 + for(var/obj/item/modkit/M in modkits) + current_mod_capacity += M.cost + if((current_mod_capacity + MK.cost) > max_mod_capacity) + user << "You don't have room to install this modkit. Use a crowbar to remove existing modkits." + return + else + user << "You install the modkit." + MK.install(src) + else + ..() + + +/obj/item/weapon/gun/energy/kinetic_accelerator/proc/modify_projectile(obj/item/projectile/kinetic/K) + for(var/obj/item/modkit/M in src) + M.modify_projectile(K) + +/obj/item/weapon/gun/energy/kinetic_accelerator/cyborg + holds_charge = TRUE + unique_frequency = TRUE + +/obj/item/weapon/gun/energy/kinetic_accelerator/hyper/cyborg + holds_charge = TRUE + unique_frequency = TRUE + +/obj/item/weapon/gun/energy/kinetic_accelerator/New() + . = ..() + if(!holds_charge) + empty() + +/obj/item/weapon/gun/energy/kinetic_accelerator/shoot_live_shot() + . = ..() + attempt_reload() + +/obj/item/weapon/gun/energy/kinetic_accelerator/equipped(mob/user) + . = ..() + if(!can_shoot()) + attempt_reload() + +/obj/item/weapon/gun/energy/kinetic_accelerator/dropped() + . = ..() + if(!holds_charge) + // Put it on a delay because moving item from slot to hand + // calls dropped(). + sleep(1) + if(!ismob(loc)) + empty() + +/obj/item/weapon/gun/energy/kinetic_accelerator/proc/empty() + power_supply.use(500) + update_icon() + +/obj/item/weapon/gun/energy/kinetic_accelerator/proc/attempt_reload() + if(overheat) + return + overheat = TRUE + + var/carried = 0 + if(!unique_frequency) + for(var/obj/item/weapon/gun/energy/kinetic_accelerator/K in \ + loc.GetAllContents()) + + carried++ + + carried = max(carried, 1) + else + carried = 1 + + addtimer(src, "reload", overheat_time * carried) + +/obj/item/weapon/gun/energy/kinetic_accelerator/emp_act(severity) + return + +/obj/item/weapon/gun/energy/kinetic_accelerator/proc/reload() + power_supply.give(500) + if(!suppressed) + playsound(src.loc, 'sound/weapons/kenetic_reload.ogg', 60, 1) + else + loc << "[src] silently charges up." + update_icon() + overheat = FALSE + +/obj/item/weapon/gun/energy/kinetic_accelerator/update_icon() + cut_overlays() + if(!can_shoot()) + add_overlay("kineticgun_empty") + + if(F && can_flashlight) + var/iconF = "flight" + if(F.on) + iconF = "flight_on" + add_overlay(image(icon = icon, icon_state = iconF, pixel_x = flight_x_offset, pixel_y = flight_y_offset)) + + + + + + + + + + +//Casing + + +/obj/item/ammo_casing/energy/kinetic + projectile_type = /obj/item/projectile/kinetic + select_name = "kinetic" + e_cost = 500 + fire_sound = 'sound/weapons/Kenetic_accel.ogg' // fine spelling there chap + +/obj/item/ammo_casing/energy/kinetic/ready_proj(atom/target, mob/living/user, quiet, zone_override = "") + ..() + if(loc && istype(loc, /obj/item/weapon/gun/energy/kinetic_accelerator)) + var/obj/item/weapon/gun/energy/kinetic_accelerator/KA = loc + KA.modify_projectile(BB) + +/obj/item/ammo_casing/energy/kinetic/hyper + projectile_type = /obj/item/projectile/kinetic/hyper + + + +//Projectiles + +/obj/item/projectile/kinetic + name = "kinetic force" + icon_state = null + damage = 10 + damage_type = BRUTE + flag = "bomb" + range = 3 + var/damage_multiplier = 4 + +/obj/item/projectile/kinetic/super + damage = 11 + range = 4 + +/obj/item/projectile/kinetic/New() + var/turf/proj_turf = get_turf(src) + if(!istype(proj_turf, /turf)) + return + var/datum/gas_mixture/environment = proj_turf.return_air() + var/pressure = environment.return_pressure() + if(pressure < 50) + name = "full strength [name]" + damage *= damage_multiplier + ..() + +/obj/item/projectile/kinetic/on_range() + PoolOrNew(/obj/effect/overlay/temp/kinetic_blast, loc) + ..() + +/obj/item/projectile/kinetic/on_hit(atom/target) + var/turf/target_turf= get_turf(target) + if(istype(target_turf, /turf/closed/mineral)) + var/turf/closed/mineral/M = target_turf + M.gets_drilled(firer) + PoolOrNew(/obj/effect/overlay/temp/kinetic_blast, target_turf) + . = ..() + + +//AoE + +/obj/item/projectile/kinetic/hyper + name = "kinetic explosion" + damage = 10 + range = 3 + +/obj/item/projectile/kinetic/hyper/proc/aoe_blast(atom/target) + var/turf/target_turf = get_turf(target) + if(!target_turf) + target_turf = get_turf(src) + PoolOrNew(/obj/effect/overlay/temp/explosion/fast, target_turf) + for(var/T in RANGE_TURFS(1, target_turf) - target_turf) + if(istype(T, /turf/closed/mineral)) + var/turf/closed/mineral/M = T + M.gets_drilled(firer) + +/obj/item/projectile/kinetic/hyper/on_range() + aoe_blast() + ..() + +/obj/item/projectile/kinetic/hyper/on_hit(atom/target) + aoe_blast(target) + . = ..() + + + + + +//Modkits + +/obj/item/modkit + name = "modification kit" + desc = "An upgrade for kinetic accelerators.." + icon = 'icons/obj/objects.dmi' + icon_state = "modkit" + origin_tech = "programming=2;materials=2;magnets=4" + var/cost = 2 + +/obj/item/modkit/proc/install(obj/item/weapon/gun/energy/kinetic_accelerator/KA) + return + +/obj/item/modkit/proc/modify_projectile(/obj/item/projectile/kinetic/K) + return \ No newline at end of file diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 4f8e3253eea..e6af08ed230 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -82,146 +82,6 @@ ammo_type = list(/obj/item/ammo_casing/energy/mindflayer) ammo_x_offset = 2 -/obj/item/weapon/gun/energy/kinetic_accelerator - name = "proto-kinetic accelerator" - desc = "In the year 2544, only a year after the discovery of a potentially \ - world-changing substance, now colloquially referred to as plasma, the \ - Nanotrasen-UEG mining conglomerate introduced a prototype of a gun-like \ - device intended for quick, effective mining of plasma in the low \ - pressures of the solar system. Included in this presentation were \ - demonstrations of the gun being fired at collections of rocks contained \ - in vacuumed environments, obliterating them instantly while maintaining \ - the structure of the ores buried within them. Additionally, volunteers \ - were called from the crowd to have the gun used on them, only proving that \ - the gun caused little harm to objects in standard pressure. \n\ - An official from an unnamed, now long dissipated company observed this \ - presentation and offered to share their self-recharger cells, powered \ - by the user's bioelectrical field, another new and unknown technology. \ - They warned that the cells were incredibly experimental and several times \ - had injured workers, but the scientists as Nanotrasen were unable to resist \ - the money-saving potential of self recharging cells. Upon accepting this \ - offer, it took only a matter of days to prove the volatility of these cells, \ - as they exploded left and right whenever inserted into the prototype devices, \ - only throwing more money in the bin. \n\ - Whenever the Nanotrasen scientists were on the edge of giving up, a \ - breakthrough was made by head researcher Miles Parks McCollum, who \ - demonstrated that the cells could be stabilized when exposed to radium \ - then cooled with cryostylane. After this discovery, the low pressure gun, \ - now named the Kinetic Accelerator, was hastily completed and made compatible \ - with the self-recharging cells. As a result of poor testing, the currently \ - used guns lose their charge when not in use, and when two Kinetic Accelerators \ - come in proximity of one another, they will interfere with each other. Despite \ - this, the shoddy guns still see use in the mining of plasma to this day." - icon_state = "kineticgun" - item_state = "kineticgun" - ammo_type = list(/obj/item/ammo_casing/energy/kinetic) - cell_type = /obj/item/weapon/stock_parts/cell/emproof - // Apparently these are safe to carry? I'm sure goliaths would disagree. - needs_permit = 0 - unique_rename = 1 - origin_tech = "combat=3;powerstorage=3;engineering=3" - weapon_weight = WEAPON_LIGHT - can_flashlight = 1 - flight_x_offset = 15 - flight_y_offset = 9 - var/overheat_time = 16 - var/holds_charge = FALSE - var/unique_frequency = FALSE // modified by KA modkits - var/overheat = FALSE - -/obj/item/weapon/gun/energy/kinetic_accelerator/super - name = "super-kinetic accelerator" - desc = "An upgraded, superior version of the proto-kinetic accelerator." - icon_state = "kineticgun_u" - ammo_type = list(/obj/item/ammo_casing/energy/kinetic/super) - overheat_time = 15 - origin_tech = "materials=5;powerstorage=3;engineering=4;magnets=3;combat=3" - -/obj/item/weapon/gun/energy/kinetic_accelerator/hyper - name = "hyper-kinetic accelerator" - desc = "An upgraded, even more superior version of the proto-kinetic accelerator." - icon_state = "kineticgun_h" - ammo_type = list(/obj/item/ammo_casing/energy/kinetic/hyper) - overheat_time = 14 - origin_tech = "materials=6;powerstorage=4;engineering=4;magnets=4;combat=4" - -/obj/item/weapon/gun/energy/kinetic_accelerator/cyborg - holds_charge = TRUE - unique_frequency = TRUE - -/obj/item/weapon/gun/energy/kinetic_accelerator/hyper/cyborg - holds_charge = TRUE - unique_frequency = TRUE - -/obj/item/weapon/gun/energy/kinetic_accelerator/New() - . = ..() - if(!holds_charge) - empty() - -/obj/item/weapon/gun/energy/kinetic_accelerator/shoot_live_shot() - . = ..() - attempt_reload() - -/obj/item/weapon/gun/energy/kinetic_accelerator/equipped(mob/user) - . = ..() - if(!can_shoot()) - attempt_reload() - -/obj/item/weapon/gun/energy/kinetic_accelerator/dropped() - . = ..() - if(!holds_charge) - // Put it on a delay because moving item from slot to hand - // calls dropped(). - sleep(1) - if(!ismob(loc)) - empty() - -/obj/item/weapon/gun/energy/kinetic_accelerator/proc/empty() - power_supply.use(500) - update_icon() - -/obj/item/weapon/gun/energy/kinetic_accelerator/proc/attempt_reload() - if(overheat) - return - overheat = TRUE - - var/carried = 0 - if(!unique_frequency) - for(var/obj/item/weapon/gun/energy/kinetic_accelerator/K in \ - loc.GetAllContents()) - - carried++ - - carried = max(carried, 1) - else - carried = 1 - - addtimer(src, "reload", overheat_time * carried) - -/obj/item/weapon/gun/energy/kinetic_accelerator/emp_act(severity) - return - -/obj/item/weapon/gun/energy/kinetic_accelerator/proc/reload() - power_supply.give(500) - if(!suppressed) - playsound(src.loc, 'sound/weapons/kenetic_reload.ogg', 60, 1) - else - loc << "[src] silently charges up." - update_icon() - overheat = FALSE - -/obj/item/weapon/gun/energy/kinetic_accelerator/update_icon() - cut_overlays() - if(!can_shoot()) - add_overlay("kineticgun_empty") - - if(F && can_flashlight) - var/iconF = "flight" - if(F.on) - iconF = "flight_on" - add_overlay(image(icon = icon, icon_state = iconF, pixel_x = flight_x_offset, pixel_y = flight_y_offset)) - - /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow name = "mini energy crossbow" desc = "A weapon favored by syndicate stealth specialists." diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm index aabb1fd448e..0dadac9de80 100644 --- a/code/modules/projectiles/projectile/special.dm +++ b/code/modules/projectiles/projectile/special.dm @@ -121,64 +121,6 @@ M.adjustBrainLoss(20) M.hallucination += 20 -/obj/item/projectile/kinetic - name = "kinetic force" - icon_state = null - damage = 10 - damage_type = BRUTE - flag = "bomb" - range = 3 - -/obj/item/projectile/kinetic/super - damage = 11 - range = 4 - -/obj/item/projectile/kinetic/New() - var/turf/proj_turf = get_turf(src) - if(!istype(proj_turf, /turf)) - return - var/datum/gas_mixture/environment = proj_turf.return_air() - var/pressure = environment.return_pressure() - if(pressure < 50) - name = "full strength [name]" - damage *= 4 - ..() - -/obj/item/projectile/kinetic/on_range() - PoolOrNew(/obj/effect/overlay/temp/kinetic_blast, loc) - ..() - -/obj/item/projectile/kinetic/on_hit(atom/target) - var/turf/target_turf= get_turf(target) - if(istype(target_turf, /turf/closed/mineral)) - var/turf/closed/mineral/M = target_turf - M.gets_drilled(firer) - PoolOrNew(/obj/effect/overlay/temp/kinetic_blast, target_turf) - . = ..() - -/obj/item/projectile/kinetic/hyper - name = "kinetic explosion" - damage = 12 - range = 5 - -/obj/item/projectile/kinetic/hyper/proc/aoe_blast(atom/target) - var/turf/target_turf = get_turf(target) - if(!target_turf) - target_turf = get_turf(src) - PoolOrNew(/obj/effect/overlay/temp/explosion/fast, target_turf) - for(var/T in RANGE_TURFS(1, target_turf) - target_turf) - if(istype(T, /turf/closed/mineral)) - var/turf/closed/mineral/M = T - M.gets_drilled(firer) - -/obj/item/projectile/kinetic/hyper/on_range() - aoe_blast() - ..() - -/obj/item/projectile/kinetic/hyper/on_hit(atom/target) - aoe_blast(target) - . = ..() - /obj/item/projectile/beam/wormhole name = "bluespace beam" icon_state = "spark" diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index 8d2f17106e7..3f20d597265 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -159,7 +159,7 @@ other types of metals and chemistry for reagents). build_path = /obj/item/weapon/pickaxe/drill/jackhammer category = list("Mining Designs") -/datum/design/modkit +/*/datum/design/modkit name = "Modification Kit" desc = "A device which allows kinetic accelerators to be wielded with one hand, and by any organism." id = "modkit" @@ -188,7 +188,7 @@ other types of metals and chemistry for reagents). materials = list(MAT_METAL = 8000, MAT_GLASS = 1500, MAT_SILVER = 2000, MAT_GOLD = 2000, MAT_DIAMOND = 2000) build_path = /obj/item/weapon/gun/energy/kinetic_accelerator/hyper category = list("Mining Designs") - +*/ /datum/design/superresonator name = "Upgraded Resonator" desc = "An upgraded version of the resonator that allows more fields to be active at once." diff --git a/tgstation.dme b/tgstation.dme index 85719642ba1..f3c4c78a1e7 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -612,7 +612,6 @@ #include "code\game\objects\items\devices\lightreplacer.dm" #include "code\game\objects\items\devices\machineprototype.dm" #include "code\game\objects\items\devices\megaphone.dm" -#include "code\game\objects\items\devices\modificationkit.dm" #include "code\game\objects\items\devices\multitool.dm" #include "code\game\objects\items\devices\paicard.dm" #include "code\game\objects\items\devices\pipe_painter.dm" @@ -1625,6 +1624,7 @@ #include "code\modules\projectiles\guns\mounted.dm" #include "code\modules\projectiles\guns\projectile.dm" #include "code\modules\projectiles\guns\syringe_gun.dm" +#include "code\modules\projectiles\guns\energy\kinetic_accelerator.dm" #include "code\modules\projectiles\guns\energy\laser.dm" #include "code\modules\projectiles\guns\energy\nuclear.dm" #include "code\modules\projectiles\guns\energy\pulse.dm"