From eb39ca8e6ed30a0d386fd82d7315ab1a2b2f398a Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Fri, 19 Aug 2016 04:04:25 -0500 Subject: [PATCH] Kinetic Accelerator Mods (#19942) * KA Mods * Better examing * Removes excess returns * WHY indeed * Updates projectiles properly * Removes or replaces old hyper KA stuff * Nerfs cooldown mod --- code/game/asteroid.dm | 2 +- .../objects/items/robot/robot_upgrades.dm | 2 +- code/modules/mining/abandoned_crates.dm | 2 +- code/modules/mining/machine_vending.dm | 3 + code/modules/projectiles/guns/energy.dm | 12 +- .../guns/energy/kinetic_accelerator.dm | 141 ++++++++++++++---- code/modules/research/designs.dm | 91 +++++++---- .../spells/spell_types/rightandwrong.dm | 2 +- 8 files changed, 188 insertions(+), 67 deletions(-) diff --git a/code/game/asteroid.dm b/code/game/asteroid.dm index b7c62bb1644..0fed81d7bb8 100644 --- a/code/game/asteroid.dm +++ b/code/game/asteroid.dm @@ -92,7 +92,7 @@ var/global/max_secret_rooms = 6 theme = "cavein" walltypes = list(/turf/closed/mineral/random/high_chance=1) floortypes = list(/turf/open/floor/plating/asteroid/basalt, /turf/open/floor/plating/beach/sand) - treasureitems = list(/obj/mecha/working/ripley/mining=1, /obj/item/weapon/pickaxe/drill/diamonddrill=2,/obj/item/weapon/gun/energy/kinetic_accelerator/hyper=1, + treasureitems = list(/obj/mecha/working/ripley/mining=1, /obj/item/weapon/pickaxe/drill/diamonddrill=2, /obj/item/weapon/resonator/upgraded=1, /obj/item/weapon/pickaxe/drill/jackhammer=5) fluffitems = list(/obj/effect/decal/cleanable/blood=3,/obj/effect/decal/remains/human=1,/obj/item/clothing/under/overalls=1, /obj/item/weapon/reagent_containers/food/snacks/grown/chili=1,/obj/item/weapon/tank/internals/oxygen/red=2) diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index 03a596a3939..793e1bd0803 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -209,7 +209,7 @@ for(var/obj/item/weapon/gun/energy/kinetic_accelerator/cyborg/H in R.module.modules) qdel(H) - R.module.modules += new /obj/item/weapon/gun/energy/kinetic_accelerator/hyper/cyborg(R.module) + R.module.modules += new /obj/item/weapon/gun/energy/kinetic_accelerator/cyborg/hyper(R.module) R.module.rebuild() return 1 diff --git a/code/modules/mining/abandoned_crates.dm b/code/modules/mining/abandoned_crates.dm index aa0f56f0bff..7408cd520ed 100644 --- a/code/modules/mining/abandoned_crates.dm +++ b/code/modules/mining/abandoned_crates.dm @@ -65,7 +65,7 @@ if(57 to 58) new /obj/item/toy/syndicateballoon(src) if(59 to 60) - new /obj/item/weapon/gun/energy/kinetic_accelerator/hyper(src) + new /obj/item/modkit/projectile_mod(src) new /obj/item/clothing/suit/space(src) new /obj/item/clothing/head/helmet/space(src) if(61 to 62) diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm index e0dad1897ff..6fa00908eb8 100644 --- a/code/modules/mining/machine_vending.dm +++ b/code/modules/mining/machine_vending.dm @@ -38,6 +38,9 @@ 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("KA Range Increase", /obj/item/modkit/range, 1000), + new /datum/data/mining_equipment("KA Damage Increase", /obj/item/modkit/damage, 1000), + new /datum/data/mining_equipment("KA Cooldown Decrease",/obj/item/modkit/cooldown, 1000), 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/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index f1887a4f5b4..9001dd964d5 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -29,6 +29,14 @@ else power_supply = new(src) power_supply.give(power_supply.maxcharge) + update_ammo_types() + if(selfcharge) + START_PROCESSING(SSobj, src) + update_icon() + return + + +/obj/item/weapon/gun/energy/proc/update_ammo_types() var/obj/item/ammo_casing/energy/shot for (var/i = 1, i <= ammo_type.len, i++) var/shottype = ammo_type[i] @@ -37,10 +45,6 @@ shot = ammo_type[select] fire_sound = shot.fire_sound fire_delay = shot.delay - if(selfcharge) - START_PROCESSING(SSobj, src) - update_icon() - return /obj/item/weapon/gun/energy/Destroy() STOP_PROCESSING(SSobj, src) diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index 4d5d8ffa6a2..608215ae631 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -1,6 +1,6 @@ /obj/item/weapon/gun/energy/kinetic_accelerator name = "proto-kinetic accelerator" - desc = "A self recharging, " + desc = "A self recharging, ranged mining tool that does increased damage in low pressure. Capable of holding up to six slots worth of mod kits." icon_state = "kineticgun" item_state = "kineticgun" ammo_type = list(/obj/item/ammo_casing/energy/kinetic) @@ -17,16 +17,22 @@ var/unique_frequency = FALSE // modified by KA modkits var/overheat = FALSE - var/list/max_mod_capacity = 2 + var/max_mod_capacity = 6 var/list/modkits = list() +/obj/item/weapon/gun/energy/kinetic_accelerator/examine(mob/user) + ..() + for(var/A in modkits) + var/obj/item/modkit/M = A + user <<"There is a [M.name] mod installed." /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." + playsound(loc, 'sound/items/Crowbar.ogg', 100, 1) for(var/obj/item/modkit/M in modkits) - M.forceMove(get_turf(user)) + M.uninstall(src) else user << "There are no modifications currently installed." else if(istype(A, /obj/item/modkit)) @@ -39,6 +45,8 @@ return else user << "You install the modkit." + playsound(loc, 'sound/items/Screwdriver.ogg', 100, 1) + user.unEquip(MK) MK.install(src) else ..() @@ -52,9 +60,8 @@ 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/cyborg/hyper + ammo_type = list(/obj/item/ammo_casing/energy/kinetic/hyper) /obj/item/weapon/gun/energy/kinetic_accelerator/New() . = ..() @@ -148,6 +155,16 @@ var/obj/item/weapon/gun/energy/kinetic_accelerator/KA = loc KA.modify_projectile(BB) + var/turf/proj_turf = get_turf(BB) + if(!istype(proj_turf, /turf)) + return + var/datum/gas_mixture/environment = proj_turf.return_air() + var/pressure = environment.return_pressure() + if(pressure > 50) + BB.name = "weakened [BB.name]" + var/obj/item/projectile/kinetic/K = BB + K.damage /= K.damage_divisor + /obj/item/ammo_casing/energy/kinetic/hyper projectile_type = /obj/item/projectile/kinetic/hyper @@ -158,26 +175,11 @@ /obj/item/projectile/kinetic name = "kinetic force" icon_state = null - damage = 10 + damage = 40 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 - ..() + var/damage_divisor = 4 /obj/item/projectile/kinetic/on_range() PoolOrNew(/obj/effect/overlay/temp/kinetic_blast, loc) @@ -196,8 +198,6 @@ /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) @@ -225,14 +225,97 @@ /obj/item/modkit name = "modification kit" - desc = "An upgrade for kinetic accelerators.." + 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 + var/modifier = 1 //For use in any mod kit that has numerical modifiers /obj/item/modkit/proc/install(obj/item/weapon/gun/energy/kinetic_accelerator/KA) - return + forceMove(KA) + KA.modkits += src -/obj/item/modkit/proc/modify_projectile(/obj/item/projectile/kinetic/K) - return \ No newline at end of file +/obj/item/modkit/proc/uninstall(obj/item/weapon/gun/energy/kinetic_accelerator/KA) + forceMove(get_turf(KA)) + KA.modkits -= src + +/obj/item/modkit/proc/modify_projectile(obj/item/projectile/kinetic/K) + + + +//Types + +/obj/item/modkit/range + name = "range increase" + desc = "Increases the range of a kinetic accelerator when installed. Occupies two mod slots." + modifier = 1 + +/obj/item/modkit/range/modify_projectile(obj/item/projectile/kinetic/K) + K.range += modifier + +//Damage + +/obj/item/modkit/damage + name = "damage increase" + desc = "Increases the damage of kinetic accelerator when installed. Occupies two mod slots." + modifier = 10 + +/obj/item/modkit/damage/modify_projectile(obj/item/projectile/kinetic/K) + K.damage += modifier + +//Cooldown + +/obj/item/modkit/cooldown + name = "coolodown decrease" + desc = "Decreases the cooldown of a kinetic accelerator. Occupies two mod slots." + modifier = 2.5 + +/obj/item/modkit/cooldown/install(obj/item/weapon/gun/energy/kinetic_accelerator/KA) + KA.overheat_time -= modifier + ..() + +/obj/item/modkit/cooldown/uninstall(obj/item/weapon/gun/energy/kinetic_accelerator/KA) + KA.overheat_time += modifier + ..() + + +//Projectile Type + +/obj/item/modkit/projectile_mod + name = "hyper shot" + desc = "Causes the kinetic accelerator to destroy rock in an AoE. Occupies two mod slots." + var/projectile_type = /obj/item/ammo_casing/energy/kinetic/hyper + +/obj/item/modkit/projectile_mod/install(obj/item/weapon/gun/energy/kinetic_accelerator/KA) + KA.ammo_type = list(projectile_type) + KA.update_ammo_types() + ..() + +/obj/item/modkit/projectile_mod/uninstall(obj/item/weapon/gun/energy/kinetic_accelerator/KA) + KA.ammo_type = list(/obj/item/ammo_casing/energy/kinetic) + KA.update_ammo_types() + ..() + +//Indoors +/obj/item/modkit/indoors + name = "decrease pressure penalty" + desc = "Increases the damage a kinetic accelerator does in a high pressure environment. Occupies three mod slots." + modifier = 2 + cost = 3 + +/obj/item/modkit/indoors/modify_projectile(obj/item/projectile/kinetic/K) + K.damage_divisor = Clamp(K.damage_divisor - modifier, 0, INFINITY) + +//Trigger Guard +/obj/item/modkit/trigger_guard + name = "modified trigger guard" + desc = "Allows creatures normally incapable of firing guns to operate the weapon when installed. Occupies two mod slots." + +/obj/item/modkit/trigger_guard/install(obj/item/weapon/gun/energy/kinetic_accelerator/KA) + KA.trigger_guard = TRIGGER_GUARD_ALLOW_ALL + ..() + +/obj/item/modkit/trigger_guard/uninstall(obj/item/weapon/gun/energy/kinetic_accelerator/KA) + KA.trigger_guard = TRIGGER_GUARD_NORMAL + ..() \ No newline at end of file diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index 3f20d597265..22e467962ff 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -159,36 +159,6 @@ other types of metals and chemistry for reagents). build_path = /obj/item/weapon/pickaxe/drill/jackhammer category = list("Mining Designs") -/*/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" - req_tech = list("materials" = 5, "powerstorage" = 4, "engineering" = 4, "magnets" = 4, "combat" = 3) - build_type = PROTOLATHE - materials = list(MAT_METAL = 8000, MAT_GLASS = 1500, MAT_GOLD = 1500, MAT_URANIUM = 1000) - build_path = /obj/item/modkit - category = list("Mining Designs") - -/datum/design/superaccelerator - name = "Super-Kinetic Accelerator" - desc = "An upgraded version of the proto-kinetic accelerator, with superior damage, speed and range." - id = "superaccelerator" - req_tech = list("materials" = 5, "powerstorage" = 4, "engineering" = 4, "magnets" = 4, "combat" = 3) - build_type = PROTOLATHE - materials = list(MAT_METAL = 8000, MAT_GLASS = 1500, MAT_SILVER = 2000, MAT_URANIUM = 2000) - build_path = /obj/item/weapon/gun/energy/kinetic_accelerator/super - category = list("Mining Designs") - -/datum/design/hyperaccelerator - name = "Hyper-Kinetic Accelerator" - desc = "An upgraded version of the proto-kinetic accelerator, with even more superior damage, speed and range." - id = "hyperaccelerator" - req_tech = list("materials" = 7, "powerstorage" = 5, "engineering" = 5, "magnets" = 5, "combat" = 4) - build_type = PROTOLATHE - 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." @@ -199,6 +169,67 @@ other types of metals and chemistry for reagents). build_path = /obj/item/weapon/resonator/upgraded category = list("Mining Designs") +/datum/design/trigger_guard_mod + name = "Kinetic Accelerator Trigger Guard Mod" + desc = "A device which allows kinetic accelerators to be wielded by any organism." + id = "triggermod" + req_tech = list("materials" = 5, "powerstorage" = 4, "engineering" = 4, "magnets" = 4, "combat" = 3) + build_type = PROTOLATHE + materials = list(MAT_METAL = 2000, MAT_GLASS = 1500, MAT_GOLD = 1500, MAT_URANIUM = 1000) + build_path = /obj/item/modkit/trigger_guard + category = list("Mining Designs") + +/datum/design/damage_mod + name = "Kinetic Accelerator Damage Mod" + desc = "A device which allows kinetic accelerators to deal more damage." + id = "damagemod" + req_tech = list("materials" = 5, "powerstorage" = 4, "engineering" = 4, "magnets" = 4, "combat" = 3) + build_type = PROTOLATHE + materials = list(MAT_METAL = 2000, MAT_GLASS = 1500, MAT_GOLD = 1500, MAT_URANIUM = 1000) + build_path = /obj/item/modkit/damage + category = list("Mining Designs") + +/datum/design/cooldown_mod + name = "Kinetic Accelerator Cooldown Mod" + desc = "A device which decreases the cooldown of a Kinetic Accelerator." + id = "cooldownmod" + req_tech = list("materials" = 5, "powerstorage" = 4, "engineering" = 4, "magnets" = 4, "combat" = 3) + build_type = PROTOLATHE + materials = list(MAT_METAL = 2000, MAT_GLASS = 1500, MAT_GOLD = 1500, MAT_URANIUM = 1000) + build_path = /obj/item/modkit/cooldown + category = list("Mining Designs") + +/datum/design/range_mod + name = "Kinetic Accelerator Range Mod" + desc = "A device which allows kinetic accelerators to fire at a further range." + id = "rangemod" + req_tech = list("materials" = 5, "powerstorage" = 4, "engineering" = 4, "magnets" = 4, "combat" = 3) + build_type = PROTOLATHE + materials = list(MAT_METAL = 2000, MAT_GLASS = 1500, MAT_GOLD = 1500, MAT_URANIUM = 1000) + build_path = /obj/item/modkit/range + category = list("Mining Designs") + +/datum/design/superaccelerator + name = "Kinetic Accelerator Pressure Mod" + desc = "A modification kit which allows Kinetic Accelerators to do more damage while indoors." + id = "indoormod" + req_tech = list("materials" = 5, "powerstorage" = 4, "engineering" = 4, "magnets" = 4, "combat" = 3) + build_type = PROTOLATHE + materials = list(MAT_METAL = 2000, MAT_GLASS = 1500, MAT_SILVER = 2000, MAT_URANIUM = 2000) + build_path = /obj/item/modkit/indoors + category = list("Mining Designs") + +/datum/design/hyperaccelerator + name = "Hyper-Kinetic Accelerator Mod" + desc = "A modification kit for Kinetic Accelerators which causes it to fire AoE blasts.." + id = "hypermod" + req_tech = list("materials" = 7, "powerstorage" = 5, "engineering" = 5, "magnets" = 5, "combat" = 4) + build_type = PROTOLATHE + materials = list(MAT_METAL = 8000, MAT_GLASS = 1500, MAT_SILVER = 2000, MAT_GOLD = 2000, MAT_DIAMOND = 2000) + build_path = /obj/item/modkit/projectile_mod + category = list("Mining Designs") + + ///////////////////////////////////////// //////////////Blue Space///////////////// ///////////////////////////////////////// diff --git a/code/modules/spells/spell_types/rightandwrong.dm b/code/modules/spells/spell_types/rightandwrong.dm index 29e3e10e9ac..39a8b7768cd 100644 --- a/code/modules/spells/spell_types/rightandwrong.dm +++ b/code/modules/spells/spell_types/rightandwrong.dm @@ -102,7 +102,7 @@ if("mindflayer") G = new /obj/item/weapon/gun/energy/mindflayer(get_turf(H)) if("hyperkinetic") - G = new /obj/item/weapon/gun/energy/kinetic_accelerator/hyper(get_turf(H)) + G = new /obj/item/weapon/gun/energy/kinetic_accelerator(get_turf(H)) if("advplasmacutter") G = new /obj/item/weapon/gun/energy/plasmacutter/adv(get_turf(H)) if("wormhole")