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 01729aa70af..9111297a266 100644 Binary files a/icons/effects/96x96.dmi and b/icons/effects/96x96.dmi differ diff --git a/icons/effects/beam.dmi b/icons/effects/beam.dmi index b20f8abf0b8..67da41362f8 100644 Binary files a/icons/effects/beam.dmi and b/icons/effects/beam.dmi differ diff --git a/icons/obj/guns/magic.dmi b/icons/obj/guns/magic.dmi index 05c8aa7794f..b057d644918 100644 Binary files a/icons/obj/guns/magic.dmi and b/icons/obj/guns/magic.dmi differ diff --git a/icons/obj/lighting.dmi b/icons/obj/lighting.dmi index b0a35a3f35b..06afc67979c 100644 Binary files a/icons/obj/lighting.dmi and b/icons/obj/lighting.dmi differ diff --git a/icons/obj/objects.dmi b/icons/obj/objects.dmi index ea68e3dbdbd..6fbc869583c 100644 Binary files a/icons/obj/objects.dmi and b/icons/obj/objects.dmi differ diff --git a/paradise.dme b/paradise.dme index 48fd64e1c6b..dba17381e54 100644 --- a/paradise.dme +++ b/paradise.dme @@ -29,8 +29,10 @@ #include "code\__DEFINES\genetics.dm" #include "code\__DEFINES\hud.dm" #include "code\__DEFINES\hydroponics.dm" +#include "code\__DEFINES\inventory.dm" #include "code\__DEFINES\is_helpers.dm" #include "code\__DEFINES\language.dm" +#include "code\__DEFINES\layers.dm" #include "code\__DEFINES\lighting.dm" #include "code\__DEFINES\machines.dm" #include "code\__DEFINES\math.dm" @@ -1862,6 +1864,7 @@ #include "code\modules\projectiles\guns\rocket.dm" #include "code\modules\projectiles\guns\syringe_gun.dm" #include "code\modules\projectiles\guns\throw.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"