From 7a4c33bbcdd12a2b926e8dd93371ea56df9f0df4 Mon Sep 17 00:00:00 2001 From: Markolie Date: Mon, 6 Feb 2017 19:55:37 +0100 Subject: [PATCH] Add meat hook, warp cube, wisp lantern, rename flashlight variable on weapons, add layer/inventory definitions --- code/__DEFINES/inventory.dm | 7 + code/__DEFINES/layers.dm | 73 ++++ code/game/asteroid.dm | 2 +- .../shadowling/shadowling_abilities.dm | 4 +- code/game/objects/effects/overlays.dm | 12 + .../objects/items/robot/robot_upgrades.dm | 19 - code/game/objects/items/weapons/powerfist.dm | 2 +- code/modules/mining/abandonedcrates.dm | 2 +- code/modules/mining/equipment_locker.dm | 12 +- .../mining/lavaland/loot/tendril_loot.dm | 157 +++++++- code/modules/projectiles/gun.dm | 34 +- code/modules/projectiles/guns/energy.dm | 13 +- .../guns/energy/kinetic_accelerator.dm | 378 +++++++++++++----- .../projectiles/guns/energy/nuclear.dm | 4 +- .../projectiles/guns/energy/special.dm | 3 + code/modules/projectiles/projectile.dm | 5 +- code/modules/projectiles/projectile/beams.dm | 4 +- .../projectiles/projectile/reusable.dm | 4 +- .../designs/mechfabricator_designs.dm | 10 - .../research/designs/mining_designs.dm | 62 ++- icons/effects/96x96.dmi | Bin 314419 -> 371132 bytes icons/effects/beam.dmi | Bin 7054 -> 7365 bytes icons/obj/guns/magic.dmi | Bin 10596 -> 11629 bytes icons/obj/lighting.dmi | Bin 56005 -> 59954 bytes icons/obj/objects.dmi | Bin 145911 -> 146103 bytes paradise.dme | 3 + 26 files changed, 639 insertions(+), 171 deletions(-) create mode 100644 code/__DEFINES/inventory.dm create mode 100644 code/__DEFINES/layers.dm diff --git a/code/__DEFINES/inventory.dm b/code/__DEFINES/inventory.dm new file mode 100644 index 00000000000..83db83c329c --- /dev/null +++ b/code/__DEFINES/inventory.dm @@ -0,0 +1,7 @@ +//ITEM INVENTORY WEIGHT, FOR w_class +#define WEIGHT_CLASS_TINY 1 //Usually items smaller then a human hand, ex: Playing Cards, Lighter, Scalpel, Coins/Money +#define WEIGHT_CLASS_SMALL 2 //Pockets can hold small and tiny items, ex: Flashlight, Multitool, Grenades, GPS Device +#define WEIGHT_CLASS_NORMAL 3 //Standard backpacks can carry tiny, small & normal items, ex: Fire extinguisher, Stunbaton, Gas Mask, Metal Sheets +#define WEIGHT_CLASS_BULKY 4 //Items that can be weilded or equipped but not stored in an inventory, ex: Defibrillator, Backpack, Space Suits +#define WEIGHT_CLASS_HUGE 5 //Usually represents objects that require two hands to operate, ex: Shotgun, Two Handed Melee Weapons +#define WEIGHT_CLASS_GIGANTIC 6 //Essentially means it cannot be picked up or placed in an inventory, ex: Mech Parts, Safe \ No newline at end of file diff --git a/code/__DEFINES/layers.dm b/code/__DEFINES/layers.dm new file mode 100644 index 00000000000..fa040bf866b --- /dev/null +++ b/code/__DEFINES/layers.dm @@ -0,0 +1,73 @@ +//Defines for atom layers and planes +//KEEP THESE IN A NICE ACSCENDING ORDER, PLEASE + +#define CLICKCATCHER_PLANE -99 + +#define PLANE_SPACE -95 +#define PLANE_SPACE_PARALLAX -90 + +#define GAME_PLANE 0 +//#define TURF_LAYER 2 //For easy recordkeeping; this is a byond define +#define MID_TURF_LAYER 2.02 +#define HIGH_TURF_LAYER 2.03 +#define ABOVE_OPEN_TURF_LAYER 2.04 +#define CLOSED_TURF_LAYER 2.05 +#define ABOVE_NORMAL_TURF_LAYER 2.08 +#define LATTICE_LAYER 2.2 +#define DISPOSAL_PIPE_LAYER 2.3 +#define GAS_PIPE_LAYER 2.35 +#define WIRE_LAYER 2.4 +#define WIRE_TERMINAL_LAYER 2.45 +#define LOW_OBJ_LAYER 2.5 + +#define BELOW_OPEN_DOOR_LAYER 2.6 +#define OPEN_DOOR_LAYER 2.7 +#define PROJECTILE_HIT_THRESHHOLD_LAYER 2.75 //projectiles won't hit objects at or below this layer if possible +#define TABLE_LAYER 2.8 +#define BELOW_OBJ_LAYER 2.9 +#define LOW_ITEM_LAYER 2.95 +//#define OBJ_LAYER 3 //For easy recordkeeping; this is a byond define +#define CLOSED_DOOR_LAYER 3.1 +#define CLOSED_FIREDOOR_LAYER 3.11 +#define ABOVE_OBJ_LAYER 3.2 +#define ABOVE_WINDOW_LAYER 3.3 +#define SIGN_LAYER 3.4 +#define NOT_HIGH_OBJ_LAYER 3.5 +#define HIGH_OBJ_LAYER 3.6 + +#define BELOW_MOB_LAYER 3.7 +#define LYING_MOB_LAYER 3.8 +//#define MOB_LAYER 4 //For easy recordkeeping; this is a byond define +#define ABOVE_MOB_LAYER 4.1 +#define WALL_OBJ_LAYER 4.25 +#define EDGED_TURF_LAYER 4.3 +#define ON_EDGED_TURF_LAYER 4.35 +#define LARGE_MOB_LAYER 4.4 +#define ABOVE_ALL_MOB_LAYER 4.5 + +#define SPACEVINE_LAYER 4.8 +#define SPACEVINE_MOB_LAYER 4.9 +//#define FLY_LAYER 5 //For easy recordkeeping; this is a byond define +#define RIPPLE_LAYER 5.1 + +#define GHOST_LAYER 6 +#define AREA_LAYER 10 +#define MASSIVE_OBJ_LAYER 11 +#define POINT_LAYER 12 + +#define LIGHTING_PLANE 15 +#define LIGHTING_LAYER 15 + +//HUD layer defines + +#define FULLSCREEN_PLANE 18 +#define FLASH_LAYER 18 +#define FULLSCREEN_LAYER 18.1 +#define UI_DAMAGE_LAYER 18.2 +#define BLIND_LAYER 18.3 +#define CRIT_LAYER 18.4 + +#define HUD_PLANE 19 +#define HUD_LAYER 19 +#define ABOVE_HUD_PLANE 20 +#define ABOVE_HUD_LAYER 20 diff --git a/code/game/asteroid.dm b/code/game/asteroid.dm index c78037a73b4..77c3179adf5 100644 --- a/code/game/asteroid.dm +++ b/code/game/asteroid.dm @@ -88,7 +88,7 @@ var/global/max_secret_rooms = 6 theme = "cavein" walltypes = list(/turf/simulated/mineral/random/high_chance=1) floortypes = list(/turf/simulated/floor/plating/airless/asteroid, /turf/simulated/floor/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/oxygen/red=2) diff --git a/code/game/gamemodes/shadowling/shadowling_abilities.dm b/code/game/gamemodes/shadowling/shadowling_abilities.dm index fbfbbb12527..b04a3012fc3 100644 --- a/code/game/gamemodes/shadowling/shadowling_abilities.dm +++ b/code/game/gamemodes/shadowling/shadowling_abilities.dm @@ -84,8 +84,8 @@ P.visible_message("[P]'s light fades and turns off.") else if(istype(I, /obj/item/weapon/gun)) var/obj/item/weapon/gun/G = I - if(G.F) - var/obj/item/device/flashlight/F = G.F + if(G.gun_light) + var/obj/item/device/flashlight/F = G.gun_light if(F.on) G.toggle_gunlight() G.visible_message("[G]'s light fades and turns off.") diff --git a/code/game/objects/effects/overlays.dm b/code/game/objects/effects/overlays.dm index 140c013b270..0bb6278c0bc 100644 --- a/code/game/objects/effects/overlays.dm +++ b/code/game/objects/effects/overlays.dm @@ -113,6 +113,18 @@ layer = 4.1 duration = 4 +/obj/effect/overlay/temp/explosion + name = "explosion" + icon = 'icons/effects/96x96.dmi' + icon_state = "explosion" + pixel_x = -32 + pixel_y = -32 + duration = 8 + +/obj/effect/overlay/temp/explosion/fast + icon_state = "explosionfast" + duration = 4 + /obj/effect/overlay/temp/decoy desc = "It's a decoy!" duration = 15 diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index bd6f3acfdee..40cc65da34a 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -196,25 +196,6 @@ return 1 -/obj/item/borg/upgrade/hyperka - name = "mining cyborg hyper-kinetic accelerator" - desc = "A satchel of holding replacement for mining cyborg's ore satchel module." - icon_state = "cyborg_upgrade3" - require_module = 1 - module_type = /obj/item/weapon/robot_module/miner - -/obj/item/borg/upgrade/hyperka/action(mob/living/silicon/robot/R) - if(..()) - return - - 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.rebuild() - - return 1 - /obj/item/borg/upgrade/syndicate name = "illegal equipment module" desc = "Unlocks the hidden, deadlier functions of a cyborg" diff --git a/code/game/objects/items/weapons/powerfist.dm b/code/game/objects/items/weapons/powerfist.dm index eefd3b7d0f6..0167ab589be 100644 --- a/code/game/objects/items/weapons/powerfist.dm +++ b/code/game/objects/items/weapons/powerfist.dm @@ -87,7 +87,7 @@ target.apply_damage(force * fisto_setting, BRUTE) target.visible_message("[user]'s powerfist lets out a loud hiss as they punch [target.name]!", \ "You cry out in pain as [user]'s punch flings you backwards!") - new/obj/effect/kinetic_blast(target.loc) + new /obj/effect/overlay/temp/kinetic_blast(target.loc) playsound(loc, 'sound/weapons/resonator_blast.ogg', 50, 1) playsound(loc, 'sound/weapons/genhit2.ogg', 50, 1) diff --git a/code/modules/mining/abandonedcrates.dm b/code/modules/mining/abandonedcrates.dm index db641754240..c7212fe5a15 100644 --- a/code/modules/mining/abandonedcrates.dm +++ b/code/modules/mining/abandonedcrates.dm @@ -63,7 +63,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/borg/upgrade/modkit/aoe/mobs(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/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index 4e8274dac1e..56ca8ba9ff9 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -313,7 +313,7 @@ anchored = 1.0 var/obj/item/weapon/card/id/inserted_id var/list/prize_list = list( - new /datum/data/mining_equipment("Stimpack", /obj/item/weapon/reagent_containers/hypospray/autoinjector/stimpack, 50), + new /datum/data/mining_equipment("Stimpack", /obj/item/weapon/reagent_containers/hypospray/autoinjector/stimpack, 50), new /datum/data/mining_equipment("Teporone MediPen", /obj/item/weapon/reagent_containers/hypospray/autoinjector/teporone, 50), new /datum/data/mining_equipment("MediPen Bundle", /obj/item/weapon/storage/box/autoinjector/utility, 200), new /datum/data/mining_equipment("Whiskey", /obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey, 100), @@ -327,7 +327,7 @@ new /datum/data/mining_equipment("Drone Melee Upgrade", /obj/item/device/mine_bot_ugprade, 400), new /datum/data/mining_equipment("Drone Health Upgrade",/obj/item/device/mine_bot_ugprade/health, 400), new /datum/data/mining_equipment("Drone Ranged Upgrade",/obj/item/device/mine_bot_ugprade/cooldown, 600), - new /datum/data/mining_equipment("Kinetic Crusher", /obj/item/weapon/twohanded/required/mining_hammer, 750), + new /datum/data/mining_equipment("Kinetic Crusher", /obj/item/weapon/twohanded/required/mining_hammer, 750), new /datum/data/mining_equipment("Drone AI Upgrade", /obj/item/slimepotion/sentience/mining, 1000), new /datum/data/mining_equipment("GAR mesons", /obj/item/clothing/glasses/meson/gar, 500), new /datum/data/mining_equipment("Brute First-Aid Kit", /obj/item/weapon/storage/firstaid/brute, 600), @@ -342,6 +342,14 @@ new /datum/data/mining_equipment("Space Cash", /obj/item/weapon/spacecash/c1000, 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 White Tracer Rounds", /obj/item/borg/upgrade/modkit/tracer, 100), + new /datum/data/mining_equipment("KA Adjustable Tracer Rounds", /obj/item/borg/upgrade/modkit/tracer/adjustable, 150), + new /datum/data/mining_equipment("KA Super Chassis", /obj/item/borg/upgrade/modkit/chassis_mod, 250), + new /datum/data/mining_equipment("KA Hyper Chassis", /obj/item/borg/upgrade/modkit/chassis_mod/orange, 300), + new /datum/data/mining_equipment("KA Range Increase", /obj/item/borg/upgrade/modkit/range, 1000), + new /datum/data/mining_equipment("KA Damage Increase", /obj/item/borg/upgrade/modkit/damage, 1000), + new /datum/data/mining_equipment("KA Cooldown Decrease",/obj/item/borg/upgrade/modkit/cooldown, 1000), + new /datum/data/mining_equipment("KA AoE Damage", /obj/item/borg/upgrade/modkit/aoe/mobs, 2000), new /datum/data/mining_equipment("Point Transfer Card", /obj/item/weapon/card/mining_point_card, 500), ) diff --git a/code/modules/mining/lavaland/loot/tendril_loot.dm b/code/modules/mining/lavaland/loot/tendril_loot.dm index e489b35ad62..757c8dfc1d4 100644 --- a/code/modules/mining/lavaland/loot/tendril_loot.dm +++ b/code/modules/mining/lavaland/loot/tendril_loot.dm @@ -90,8 +90,8 @@ color = "#FFEBEB" /datum/reagent/flightpotion/reaction_mob(mob/living/M, method = TOUCH, reac_volume, show_message = 1) - return // This item currently does not work as we do not have the angel species. - if(ishuman(M) && M.stat != DEAD) + to_chat(M, "This item is currently non-functional.") + /*if(ishuman(M) && M.stat != DEAD) var/mob/living/carbon/human/H = M if(H.species.name != "Human" || reac_volume < 5) // implying xenohumans are holy if(method == INGEST && show_message) @@ -103,7 +103,7 @@ playsound(H.loc, 'sound/items/poster_ripped.ogg', 50, 1, -1) H.adjustBruteLoss(20) H.emote("scream") - ..() + ..()*/ //Boat @@ -158,7 +158,7 @@ icon_state = "ship_bottle" /obj/item/ship_in_a_bottle/attack_self(mob/user) - user << "You're not sure how they get the ships in these things, but you're pretty sure you know how to get it out." + to_chat(user, "You're not sure how they get the ships in these things, but you're pretty sure you know how to get it out.") playsound(user.loc, 'sound/effects/Glassbr1.ogg', 100, 1) new /obj/vehicle/lavaboat/dragon(get_turf(src)) qdel(src) @@ -170,4 +170,151 @@ icon_state = "dragon_boat" generic_pixel_y = 2 generic_pixel_x = 1 - vehicle_move_delay = 1 \ No newline at end of file + vehicle_move_delay = 1 + +// Wisp Lantern +/obj/item/device/wisp_lantern + name = "spooky lantern" + desc = "This lantern gives off no light, but is home to a friendly wisp." + icon = 'icons/obj/lighting.dmi' + icon_state = "lantern-blue" + var/obj/effect/wisp/wisp + +/obj/item/device/wisp_lantern/attack_self(mob/user) + if(!wisp) + to_chat(user, "The wisp has gone missing!") + return + if(wisp.loc == src) + to_chat(user, "You release the wisp. It begins to bob around your head.") + user.sight |= SEE_MOBS + icon_state = "lantern" + wisp.orbit(user, 20) + feedback_add_details("wisp_lantern","F") // freed + + else + to_chat(user, "You return the wisp to the lantern.") + + if(wisp.orbiting) + var/atom/A = wisp.orbiting.orbiting + if(isliving(A)) + var/mob/living/M = A + M.sight &= ~SEE_MOBS + to_chat(M, "Your vision returns to normal.") + + wisp.stop_orbit() + wisp.loc = src + icon_state = "lantern-blue" + feedback_add_details("wisp_lantern","R") // returned + +/obj/item/device/wisp_lantern/New() + ..() + wisp = new(src) + +/obj/item/device/wisp_lantern/Destroy() + if(wisp) + if(wisp.loc == src) + qdel(wisp) + else + wisp.visible_message("[wisp] has a sad feeling for a moment, then it passes.") + ..() + +/obj/effect/wisp + name = "friendly wisp" + desc = "Happy to light your way." + icon = 'icons/obj/lighting.dmi' + icon_state = "orb" + luminosity = 7 + layer = ABOVE_ALL_MOB_LAYER + +//Red/Blue Cubes + +/obj/item/device/warp_cube + name = "blue cube" + desc = "A mysterious blue cube." + icon = 'icons/obj/lavaland/artefacts.dmi' + icon_state = "blue_cube" + var/obj/item/device/warp_cube/linked + +/obj/item/device/warp_cube/Destroy() + if(linked) + linked.linked = null + linked = null + return ..() + +/obj/item/device/warp_cube/attack_self(mob/user) + if(!linked) + to_chat(user, "[src] fizzles uselessly.") + return + + var/datum/effect/system/harmless_smoke_spread/smoke = new /datum/effect/system/harmless_smoke_spread() + smoke.set_up(1, 0, user.loc) + smoke.start() + + user.forceMove(get_turf(linked)) + feedback_add_details("warp_cube","[src.type]") + + var/datum/effect/system/harmless_smoke_spread/smoke = new /datum/effect/system/harmless_smoke_spread() + smoke.set_up(1, 0, user.loc) + smoke.start() + +/obj/item/device/warp_cube/red + name = "red cube" + desc = "A mysterious red cube." + icon_state = "red_cube" + +/obj/item/device/warp_cube/red/New() + ..() + if(!linked) + var/obj/item/device/warp_cube/blue = new(src.loc) + linked = blue + blue.linked = src + +//Meat Hook + +/obj/item/weapon/gun/magic/hook + name = "meat hook" + desc = "Mid or feed." + ammo_type = /obj/item/ammo_casing/magic/hook + icon_state = "hook" + item_state = "chain" + fire_sound = 'sound/weapons/batonextend.ogg' + max_charges = 1 + flags = NOBLUDGEON + force = 18 + +/obj/item/ammo_casing/magic/hook + name = "hook" + desc = "a hook." + projectile_type = /obj/item/projectile/hook + caliber = "hook" + icon_state = "hook" + +/obj/item/projectile/hook + name = "hook" + icon_state = "hook" + icon = 'icons/obj/lavaland/artefacts.dmi' + pass_flags = PASSTABLE + damage = 25 + armour_penetration = 100 + damage_type = BRUTE + hitsound = 'sound/effects/splat.ogg' + weaken = 3 + var/chain + +/obj/item/projectile/hook/fire(setAngle) + if(firer) + chain = firer.Beam(src, icon_state = "chain", time = INFINITY, maxdistance = INFINITY) + ..() + //TODO: root the firer until the chain returns + +/obj/item/projectile/hook/on_hit(atom/target) + . = ..() + if(isliving(target)) + var/mob/living/L = target + if(!L.anchored) + L.visible_message("[L] is snagged by [firer]'s hook!") + L.forceMove(get_turf(firer)) + +/obj/item/projectile/hook/Destroy() + qdel(chain) + return ..() \ No newline at end of file diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 6cafcce56c3..22d45c51015 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -45,7 +45,7 @@ lefthand_file = 'icons/mob/inhands/guns_lefthand.dmi' righthand_file = 'icons/mob/inhands/guns_righthand.dmi' - var/obj/item/device/flashlight/F = null + var/obj/item/device/flashlight/gun_light = null var/can_flashlight = 0 var/list/upgrades = list() @@ -63,7 +63,7 @@ /obj/item/weapon/gun/New() ..() - if(F) + if(gun_light) verbs += /obj/item/weapon/gun/proc/toggle_gunlight build_zooming() @@ -241,27 +241,27 @@ obj/item/weapon/gun/proc/newshot() if(istype(I, /obj/item/device/flashlight/seclite)) var/obj/item/device/flashlight/seclite/S = I if(can_flashlight) - if(!F) + if(!gun_light) if(!user.unEquip(I)) return to_chat(user, "You click [S] into place on [src].") if(S.on) set_light(0) - F = S + gun_light = S I.loc = src update_icon() - update_gunlight(user) + update_gun_light(user) var/datum/action/A = new /datum/action/item_action/toggle_gunlight(src) if(loc == user) A.Grant(user) if(istype(I, /obj/item/weapon/screwdriver)) - if(F && can_flashlight) + if(gun_light && can_flashlight) for(var/obj/item/device/flashlight/seclite/S in src) to_chat(user, "You unscrew the seclite from [src].") - F = null + gun_light = null S.loc = get_turf(user) - update_gunlight(user) + update_gun_light(user) S.update_brightness(user) update_icon() for(var/datum/action/item_action/toggle_gunlight/TGL in actions) @@ -273,26 +273,26 @@ obj/item/weapon/gun/proc/newshot() ..() /obj/item/weapon/gun/proc/toggle_gunlight() - set name = "Toggle Gunlight" + set name = "Toggle gun_light" set category = "Object" set desc = "Click to toggle your weapon's attached flashlight." - if(!F) + if(!gun_light) return var/mob/living/carbon/human/user = usr if(!isturf(user.loc)) to_chat(user, "You cannot turn the light on while in this [user.loc]!") - F.on = !F.on - to_chat(user, "You toggle the gunlight [F.on ? "on":"off"].") + gun_light.on = !gun_light.on + to_chat(user, "You toggle the gun_light [gun_light.on ? "on":"off"].") playsound(user, 'sound/weapons/empty.ogg', 100, 1) - update_gunlight(user) + update_gun_light(user) -/obj/item/weapon/gun/proc/update_gunlight(mob/user = null) - if(F) - if(F.on) - set_light(F.brightness_on) +/obj/item/weapon/gun/proc/update_gun_light(mob/user = null) + if(gun_light) + if(gun_light.on) + set_light(gun_light.brightness_on) else set_light(0) update_icon() diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index 2d87a32be2b..4d94f96f4a2 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -30,6 +30,12 @@ else power_supply = new(src) power_supply.give(power_supply.maxcharge) + update_ammo_types() + if(selfcharge) + processing_objects.Add(src) + update_icon() + +/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] @@ -38,9 +44,6 @@ shot = ammo_type[select] fire_sound = shot.fire_sound fire_delay = shot.delay - if(selfcharge) - processing_objects.Add(src) - update_icon() /obj/item/weapon/gun/energy/Destroy() if(selfcharge) @@ -129,9 +132,9 @@ overlays += image(icon = icon, icon_state = iconState, pixel_x = ammo_x_offset * (i -1)) else overlays += image(icon = icon, icon_state = "[icon_state]_[modifystate ? "[shot.select_name]_" : ""]charge[ratio]") - if(F && can_flashlight) + if(gun_light && can_flashlight) var/iconF = "flight" - if(F.on) + if(gun_light.on) iconF = "flight_on" overlays += image(icon = icon, icon_state = iconF, pixel_x = flight_x_offset, pixel_y = flight_y_offset) if(itemState) diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index af1f6593982..326df69b73b 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,44 +17,55 @@ var/unique_frequency = FALSE // modified by KA modkits var/overheat = FALSE - var/list/max_mod_capacity = 2 + var/max_mod_capacity = 100 var/list/modkits = list() + var/empty_state = "kineticgun_empty" + +/obj/item/weapon/gun/energy/kinetic_accelerator/examine(mob/user) + ..() + if(max_mod_capacity) + to_chat(user, "[get_remaining_mod_capacity()]% mod capacity remaining.") + for(var/A in get_modkits()) + var/obj/item/borg/upgrade/modkit/M = A + to_chat(user, "There is a [M.name] mod installed, using [M.cost]% capacity.") /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)) + to_chat(user, "You pry the modifications out.") + playsound(loc, 'sound/items/Crowbar.ogg', 100, 1) + for(var/obj/item/borg/upgrade/modkit/M in modkits) + M.uninstall(src) 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) + to_chat(user, "There are no modifications currently installed.") + else if(istype(A, /obj/item/borg/upgrade/modkit)) + var/obj/item/borg/upgrade/modkit/MK = A + MK.install(src, user) else ..() +/obj/item/weapon/gun/energy/kinetic_accelerator/proc/get_remaining_mod_capacity() + var/current_capacity_used = 0 + for(var/A in get_modkits()) + var/obj/item/borg/upgrade/modkit/M = A + current_capacity_used += M.cost + return max_mod_capacity - current_capacity_used + +/obj/item/weapon/gun/energy/kinetic_accelerator/proc/get_modkits() + . = list() + for(var/A in modkits) + . += A /obj/item/weapon/gun/energy/kinetic_accelerator/proc/modify_projectile(obj/item/projectile/kinetic/K) - for(var/obj/item/modkit/M in src) + for(var/A in get_modkits()) + var/obj/item/borg/upgrade/modkit/M = A 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 + max_mod_capacity = 80 /obj/item/weapon/gun/energy/kinetic_accelerator/New() . = ..() @@ -75,9 +86,12 @@ if(!holds_charge) // Put it on a delay because moving item from slot to hand // calls dropped(). - sleep(1) - if(!ismob(loc)) - empty() + spawn(2) + empty_if_not_held() + +/obj/item/weapon/gun/energy/kinetic_accelerator/proc/empty_if_not_held() + if(!ismob(loc)) + empty() /obj/item/weapon/gun/energy/kinetic_accelerator/proc/empty() power_supply.use(500) @@ -99,7 +113,8 @@ else carried = 1 - addtimer(src, "reload", overheat_time * carried) + spawn(overheat_time * carried) + reload() /obj/item/weapon/gun/energy/kinetic_accelerator/emp_act(severity) return @@ -107,35 +122,25 @@ /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) + playsound(loc, 'sound/weapons/kenetic_reload.ogg', 60, 1) else - loc << "[src] silently charges up." + to_chat(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") + overlays.Cut() + if(empty_state && !can_shoot()) + overlays += empty_state - if(F && can_flashlight) + if(gun_light && can_flashlight) var/iconF = "flight" - if(F.on) + if(gun_light.on) iconF = "flight_on" - add_overlay(image(icon = icon, icon_state = iconF, pixel_x = flight_x_offset, pixel_y = flight_y_offset)) - - - - - - - - + overlays += 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" @@ -148,87 +153,262 @@ 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 - + var/turf/proj_turf = get_turf(BB) + if(!isturf(proj_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.pressure_decrease //Projectiles - /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 + log_override = TRUE -/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/pressure_decrease = 0.25 + var/turf_aoe = FALSE + var/mob_aoe = 0 + var/list/hit_overlays = list() /obj/item/projectile/kinetic/on_range() - PoolOrNew(/obj/effect/overlay/temp/kinetic_blast, loc) + strike_thing() ..() /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) + strike_thing(target) . = ..() - -//AoE - -/obj/item/projectile/kinetic/hyper - name = "kinetic explosion" - damage = 10 - range = 3 - -/obj/item/projectile/kinetic/hyper/proc/aoe_blast(atom/target) +/obj/item/projectile/kinetic/proc/strike_thing(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) + if(ismineralturf(target_turf)) + var/turf/simulated/mineral/M = target_turf + M.gets_drilled(firer) + var/obj/effect/overlay/temp/kinetic_blast/K = new /obj/effect/overlay/temp/kinetic_blast(target_turf) + K.color = color + for(var/type in hit_overlays) + new type(target_turf) + if(turf_aoe) + for(var/T in RANGE_TURFS(1, target_turf) - target_turf) + if(ismineralturf(T)) + var/turf/simulated/mineral/M = T + M.gets_drilled(firer) + if(mob_aoe) + for(var/mob/living/L in range(1, target_turf) - firer - target) + var/armor = L.run_armor_check(def_zone, flag, "", "", armour_penetration) + L.apply_damage(damage*mob_aoe, damage_type, def_zone, armor) + to_chat(L, "You're struck by a [name]!") -/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 +/obj/item/borg/upgrade/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 + require_module = 1 + module_type = /obj/item/weapon/robot_module/miner + var/denied_type = null + var/maximum_of_type = 1 + var/cost = 30 + 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 +/obj/item/borg/upgrade/modkit/examine(mob/user) + ..() + to_chat(user, "Occupies [cost]% of mod capacity.") -/obj/item/modkit/proc/modify_projectile(/obj/item/projectile/kinetic/K) - return \ No newline at end of file +/obj/item/borg/upgrade/modkit/attackby(obj/item/A, mob/user) + if(istype(A, /obj/item/weapon/gun/energy/kinetic_accelerator) && !issilicon(user)) + install(A, user) + else + ..() + +/obj/item/borg/upgrade/modkit/action(mob/living/silicon/robot/R) + if(..()) + return + + for(var/obj/item/weapon/gun/energy/kinetic_accelerator/cyborg/H in R.module.modules) + return install(H, usr) + +/obj/item/borg/upgrade/modkit/proc/install(obj/item/weapon/gun/energy/kinetic_accelerator/KA, mob/user) + . = TRUE + if(denied_type) + var/number_of_denied = 0 + for(var/A in KA.get_modkits()) + var/obj/item/borg/upgrade/modkit/M = A + if(istype(M, denied_type)) + number_of_denied++ + if(number_of_denied >= maximum_of_type) + . = FALSE + break + if(KA.get_remaining_mod_capacity() >= cost) + if(.) + to_chat(user, "You install the modkit.") + playsound(loc, 'sound/items/Screwdriver.ogg', 100, 1) + user.unEquip(src) + forceMove(KA) + KA.modkits += src + else + to_chat(user, "The modkit you're trying to install would conflict with an already installed modkit. Use a crowbar to remove existing modkits.") + else + to_chat(user, "You don't have room([KA.get_remaining_mod_capacity()]% remaining, [cost]% needed) to install this modkit. Use a crowbar to remove existing modkits.") + . = FALSE + + + +/obj/item/borg/upgrade/modkit/proc/uninstall(obj/item/weapon/gun/energy/kinetic_accelerator/KA) + forceMove(get_turf(KA)) + KA.modkits -= src + +/obj/item/borg/upgrade/modkit/proc/modify_projectile(obj/item/projectile/kinetic/K) + + +//Range +/obj/item/borg/upgrade/modkit/range + name = "range increase" + desc = "Increases the range of a kinetic accelerator when installed." + modifier = 1 + cost = 24 //so you can fit four plus a tracer cosmetic + +/obj/item/borg/upgrade/modkit/range/modify_projectile(obj/item/projectile/kinetic/K) + K.range += modifier + + +//Damage +/obj/item/borg/upgrade/modkit/damage + name = "damage increase" + desc = "Increases the damage of kinetic accelerator when installed." + modifier = 10 + +/obj/item/borg/upgrade/modkit/damage/modify_projectile(obj/item/projectile/kinetic/K) + K.damage += modifier + + +//Cooldown +/obj/item/borg/upgrade/modkit/cooldown + name = "cooldown decrease" + desc = "Decreases the cooldown of a kinetic accelerator." + modifier = 2.5 + +/obj/item/borg/upgrade/modkit/cooldown/install(obj/item/weapon/gun/energy/kinetic_accelerator/KA, mob/user) + . = ..() + if(.) + KA.overheat_time -= modifier + +/obj/item/borg/upgrade/modkit/cooldown/uninstall(obj/item/weapon/gun/energy/kinetic_accelerator/KA) + KA.overheat_time += modifier + ..() + + +//AoE blasts +/obj/item/borg/upgrade/modkit/aoe + modifier = 0 + +/obj/item/borg/upgrade/modkit/aoe/modify_projectile(obj/item/projectile/kinetic/K) + K.name = "kinetic explosion" + if(!K.turf_aoe && !K.mob_aoe) + K.hit_overlays += /obj/effect/overlay/temp/explosion/fast + K.mob_aoe += modifier + +/obj/item/borg/upgrade/modkit/aoe/turfs + name = "mining explosion" + desc = "Causes the kinetic accelerator to destroy rock in an AoE." + denied_type = /obj/item/borg/upgrade/modkit/aoe/turfs + +/obj/item/borg/upgrade/modkit/aoe/turfs/modify_projectile(obj/item/projectile/kinetic/K) + ..() + K.turf_aoe = TRUE + +/obj/item/borg/upgrade/modkit/aoe/turfs/andmobs + name = "offensive mining explosion" + desc = "Causes the kinetic accelerator to destroy rock and damage mobs in an AoE." + maximum_of_type = 3 + modifier = 0.25 + +/obj/item/borg/upgrade/modkit/aoe/mobs + name = "offensive explosion" + desc = "Causes the kinetic accelerator to damage mobs in an AoE." + modifier = 0.2 + + +//Indoors +/obj/item/borg/upgrade/modkit/indoors + name = "decrease pressure penalty" + desc = "Increases the damage a kinetic accelerator does in a high pressure environment." + modifier = 2 + denied_type = /obj/item/borg/upgrade/modkit/indoors + maximum_of_type = 2 + cost = 40 + +/obj/item/borg/upgrade/modkit/indoors/modify_projectile(obj/item/projectile/kinetic/K) + K.pressure_decrease *= modifier + + +//Trigger Guard +/obj/item/borg/upgrade/modkit/trigger_guard + name = "modified trigger guard" + desc = "Allows creatures normally incapable of firing guns to operate the weapon when installed." + cost = 20 + denied_type = /obj/item/borg/upgrade/modkit/trigger_guard + +/obj/item/borg/upgrade/modkit/trigger_guard/install(obj/item/weapon/gun/energy/kinetic_accelerator/KA, mob/user) + . = ..() + if(.) + KA.trigger_guard = TRIGGER_GUARD_ALLOW_ALL + +/obj/item/borg/upgrade/modkit/trigger_guard/uninstall(obj/item/weapon/gun/energy/kinetic_accelerator/KA) + KA.trigger_guard = TRIGGER_GUARD_NORMAL + ..() + + +//Cosmetic + +/obj/item/borg/upgrade/modkit/chassis_mod + name = "super chassis" + desc = "Makes your KA yellow. All the fun of having a more powerful KA without actually having a more powerful KA." + cost = 10 + denied_type = /obj/item/borg/upgrade/modkit/chassis_mod + var/chassis_icon = "kineticgun_u" + +/obj/item/borg/upgrade/modkit/chassis_mod/install(obj/item/weapon/gun/energy/kinetic_accelerator/KA, mob/user) + . = ..() + if(.) + KA.icon_state = chassis_icon + +/obj/item/borg/upgrade/modkit/chassis_mod/uninstall(obj/item/weapon/gun/energy/kinetic_accelerator/KA) + KA.icon_state = initial(KA.icon_state) + ..() + +/obj/item/borg/upgrade/modkit/chassis_mod/orange + name = "hyper chassis" + desc = "Makes your KA orange. All the fun of having explosive blasts without actually having explosive blasts." + chassis_icon = "kineticgun_h" + +/obj/item/borg/upgrade/modkit/tracer + name = "white tracer bolts" + desc = "Causes kinetic accelerator bolts to have a white tracer trail and explosion." + cost = 4 + denied_type = /obj/item/borg/upgrade/modkit/tracer + var/bolt_color = "#FFFFFF" + +/obj/item/borg/upgrade/modkit/tracer/modify_projectile(obj/item/projectile/kinetic/K) + K.icon_state = "ka_tracer" + K.color = bolt_color + +/obj/item/borg/upgrade/modkit/tracer/adjustable + name = "adjustable tracer bolts" + desc = "Causes kinetic accelerator bolts to have a adjustably-colored tracer trail and explosion. Use in-hand to change color." + +/obj/item/borg/upgrade/modkit/tracer/adjustable/attack_self(mob/user) + bolt_color = input(user,"Choose Color") as color diff --git a/code/modules/projectiles/guns/energy/nuclear.dm b/code/modules/projectiles/guns/energy/nuclear.dm index 8d920a7e736..ef184bd8d5b 100644 --- a/code/modules/projectiles/guns/energy/nuclear.dm +++ b/code/modules/projectiles/guns/energy/nuclear.dm @@ -37,14 +37,14 @@ can_flashlight = 0 // Can't attach or detach the flashlight, and override it's icon update /obj/item/weapon/gun/energy/gun/mini/New() - F = new /obj/item/device/flashlight/seclite(src) + gun_light = new /obj/item/device/flashlight/seclite(src) ..() power_supply.maxcharge = 6000 power_supply.charge = 6000 /obj/item/weapon/gun/energy/gun/mini/update_icon() ..() - if(F && F.on) + if(gun_light && gun_light.on) overlays += "mini-light" /obj/item/weapon/gun/energy/gun/hos diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 5818a0ee7a2..12eb34e8c54 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -99,6 +99,9 @@ overheat_time = 20 holds_charge = TRUE unique_frequency = TRUE + can_flashlight = 0 + max_mod_capacity = 0 + empty_state = null /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow/ninja name = "energy dart thrower" diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 7b0bcda17d0..4a3afd18684 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -52,7 +52,7 @@ var/forcedodge = 0 //to pass through everything var/dismemberment = 0 //The higher the number, the greater the bonus to dismembering. 0 will not dismember at all. - var/log = 1 //whether print to admin attack logs or just keep it in the diary + var/log_override = FALSE //whether print to admin attack logs or just keep it in the diary /obj/item/projectile/New() permutated = list() @@ -90,7 +90,8 @@ for(var/datum/reagent/R in reagents.reagent_list) reagent_note += R.id + " (" reagent_note += num2text(R.volume) + ") " - add_logs(firer, L, "shot", src, reagent_note, print_attack_log = log) + if(!log_override && firer && original) + add_logs(firer, L, "shot", src, reagent_note) return L.apply_effects(stun, weaken, paralyze, irradiate, slur, stutter, eyeblur, drowsy, blocked, stamina, jitter) /obj/item/projectile/proc/vol_by_damage() diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index 872ee7c3f26..6cddc1c1b91 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -20,7 +20,7 @@ name = "practice laser" damage = 0 nodamage = 1 - log = 0 + log_override = TRUE /obj/item/projectile/beam/scatter name = "laser pellet" @@ -75,7 +75,7 @@ damage_type = STAMINA flag = "laser" var/suit_types = list(/obj/item/clothing/suit/redtag, /obj/item/clothing/suit/bluetag) - log = 0 + log_override = TRUE /obj/item/projectile/beam/lasertag/on_hit(atom/target, blocked = 0) . = ..() diff --git a/code/modules/projectiles/projectile/reusable.dm b/code/modules/projectiles/projectile/reusable.dm index 17aaad71a2a..cb0ee34ad75 100644 --- a/code/modules/projectiles/projectile/reusable.dm +++ b/code/modules/projectiles/projectile/reusable.dm @@ -37,7 +37,7 @@ var/obj/item/weapon/pen/pen = null edge = 0 embed = 0 - log = 0//it won't log even when there's a pen inside, but since the damage will be so low, I don't think there's any point in making it any more complex + log_override = TRUE//it won't log even when there's a pen inside, but since the damage will be so low, I don't think there's any point in making it any more complex /obj/item/projectile/bullet/reusable/foam_dart/handle_drop() if(dropped) @@ -65,4 +65,4 @@ icon_state = "foamdart_riot" ammo_type = /obj/item/ammo_casing/caseless/foam_dart/riot stamina = 25 - log = 1 + log_override = FALSE diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm index 702afa68f2f..ff5708576cf 100644 --- a/code/modules/research/designs/mechfabricator_designs.dm +++ b/code/modules/research/designs/mechfabricator_designs.dm @@ -1038,16 +1038,6 @@ construction_time = 120 category = list("Cyborg Upgrade Modules") -/datum/design/borg_upgrade_hyperka - name = "Cyborg Upgrade (Hyper-Kinetic Accelerator)" - id = "borg_upgrade_hyperka" - req_tech = list("materials" = 7, "powerstorage" = 5, "engineering" = 5, "magnets" = 5, "combat" = 4) - build_type = MECHFAB //Reqs same as human Hyper KA - materials = list(MAT_METAL = 8000, MAT_GLASS = 1500, MAT_SILVER = 2000, MAT_GOLD = 2000, MAT_DIAMOND = 2000) - build_path = /obj/item/borg/upgrade/hyperka - construction_time = 120 - category = list("Cyborg Upgrade Modules") - /datum/design/borg_syndicate_module name = "Cyborg Upgrade (Illegal Modules)" id = "borg_syndicate_module" diff --git a/code/modules/research/designs/mining_designs.dm b/code/modules/research/designs/mining_designs.dm index 0ee8c58aa7e..aa3014e2825 100644 --- a/code/modules/research/designs/mining_designs.dm +++ b/code/modules/research/designs/mining_designs.dm @@ -72,4 +72,64 @@ build_type = PROTOLATHE materials = list(MAT_METAL = 4000, MAT_GLASS = 1500, MAT_SILVER = 2000, MAT_URANIUM = 2000) build_path = /obj/item/weapon/resonator/upgraded - category = list("Mining") \ No newline at end of file + category = list("Mining") + +/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/borg/upgrade/modkit/trigger_guard + category = list("Mining") + +/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 | MECHFAB + materials = list(MAT_METAL = 2000, MAT_GLASS = 1500, MAT_GOLD = 1500, MAT_URANIUM = 1000) + build_path = /obj/item/borg/upgrade/modkit/damage + category = list("Mining", "Cyborg Upgrade Modules") + +/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 | MECHFAB + materials = list(MAT_METAL = 2000, MAT_GLASS = 1500, MAT_GOLD = 1500, MAT_URANIUM = 1000) + build_path = /obj/item/borg/upgrade/modkit/cooldown + category = list("Mining", "Cyborg Upgrade Modules") + +/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 | MECHFAB + materials = list(MAT_METAL = 2000, MAT_GLASS = 1500, MAT_GOLD = 1500, MAT_URANIUM = 1000) + build_path = /obj/item/borg/upgrade/modkit/range + category = list("Mining", "Cyborg Upgrade Modules") + +/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 | MECHFAB + materials = list(MAT_METAL = 2000, MAT_GLASS = 1500, MAT_SILVER = 2000, MAT_URANIUM = 2000) + build_path = /obj/item/borg/upgrade/modkit/indoors + category = list("Mining", "Cyborg Upgrade Modules") + +/datum/design/hyperaccelerator + name = "Kinetic Accelerator Mining AoE Mod" + desc = "A modification kit for Kinetic Accelerators which causes it to fire AoE blasts that destroy rock." + id = "hypermod" + req_tech = list("materials" = 7, "powerstorage" = 5, "engineering" = 5, "magnets" = 5, "combat" = 4) + build_type = PROTOLATHE | MECHFAB + materials = list(MAT_METAL = 8000, MAT_GLASS = 1500, MAT_SILVER = 2000, MAT_GOLD = 2000, MAT_DIAMOND = 2000) + build_path = /obj/item/borg/upgrade/modkit/aoe/turfs + category = list("Mining", "Cyborg Upgrade Modules") \ No newline at end of file diff --git a/icons/effects/96x96.dmi b/icons/effects/96x96.dmi index 01729aa70afef3d9357254df291c3fea7fd09747..9111297a2669ed0a201899659c18fa6edb511907 100644 GIT binary patch literal 371132 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