From 9da929d4a1670748e33d50405c2a4e27386e15f7 Mon Sep 17 00:00:00 2001 From: BurgerLUA Date: Sun, 17 Jun 2018 13:02:42 -0700 Subject: [PATCH] Custom Kinetic Accelerators (#4802) This is honestly one of my biggest and most ambitious projects. I hope people are happy with this. Custom kinetic accelerators are special, customizable mining weapons that are meant to give a sense of progression, and a sense of pride and accomplishment while mining. Each custom KA is made up of 3 or 4 parts: The Frame (5 to choose from) The Cell (5 to choose from, +1 traitor) The Barrel (5 to choose from, +1 traitor) The Upgrade Chip (7 to choose from, +1 traitor) The sprites change with each addon, they are truly dynamic and there are so many combinations of parts that a miner can have. You can have several different builds for each desired mining style, it's quite a robust system. You can have a KA that shoots slowly, but delivers high-penetrating shots that go through several walls of rock. You can have a KA that shoots REALLY fast, but precisely destroys 1 rock at a time. You can have an absolute canon of a beast, that destroys rocks in a 3 tile radius around it. The parts can be obtained via research, via abandoned crates, or via RNG in the cargo warehouse. There are some custom KAs that spawn on the raider's ship, on the mercs ship, and a laser one on the merc's headquarters. That laser one can also be bought from the traitor uplink as well. ERT get a class 4 KA for use in special operations, if they choose to use it. --- aurorastation.dme | 6 + code/_helpers/unsorted.dm | 2 +- code/datums/trading/goods.dm | 7 +- .../highly visible and dangerous weapons.dm | 5 + code/game/objects/items/weapons/manuals.dm | 49 ++ .../objects/items/weapons/storage/belt.dm | 2 +- code/game/objects/random/random.dm | 47 +- code/modules/cargo/randomstock.dm | 3 + .../clothing/spacesuits/rig/modules/combat.dm | 9 - code/modules/custom_ka/barrels.dm | 96 ++++ code/modules/custom_ka/cells.dm | 136 +++++ code/modules/custom_ka/core.dm | 495 ++++++++++++++++++ code/modules/custom_ka/frames.dm | 88 ++++ code/modules/custom_ka/projectiles.dm | 43 ++ code/modules/custom_ka/upgrade_chips.dm | 64 +++ code/modules/item_worth/worths_list.dm | 9 +- code/modules/mining/abandonedcrates.dm | 6 +- code/modules/mining/machine_rigpress.dm | 20 +- code/modules/mining/machine_vending.dm | 10 +- code/modules/mining/mine_items.dm | 1 + code/modules/mining/mine_turfs.dm | 15 + .../mob/living/silicon/robot/gripper.dm | 7 +- .../mob/living/silicon/robot/robot_modules.dm | 9 +- code/modules/projectiles/gun.dm | 23 +- .../modules/projectiles/guns/energy/mining.dm | 283 ---------- code/modules/projectiles/projectile.dm | 1 + .../research/designs/weapon_designs.dm | 160 +++++- html/changelogs/burgerbb-ka.yml | 39 ++ icons/obj/kinetic_accelerators.dmi | Bin 0 -> 5655 bytes maps/aurora/aurora-4_mainlevel.dmm | 36 +- 30 files changed, 1316 insertions(+), 355 deletions(-) create mode 100644 code/modules/custom_ka/barrels.dm create mode 100644 code/modules/custom_ka/cells.dm create mode 100644 code/modules/custom_ka/core.dm create mode 100644 code/modules/custom_ka/frames.dm create mode 100644 code/modules/custom_ka/projectiles.dm create mode 100644 code/modules/custom_ka/upgrade_chips.dm create mode 100644 html/changelogs/burgerbb-ka.yml create mode 100644 icons/obj/kinetic_accelerators.dmi diff --git a/aurorastation.dme b/aurorastation.dme index 6681baf0dba..b694de3daad 100644 --- a/aurorastation.dme +++ b/aurorastation.dme @@ -1270,6 +1270,12 @@ #include "code\modules\clothing\under\jobs\security.dm" #include "code\modules\clothing\under\xenos\resomi.dm" #include "code\modules\clothing\under\xenos\tajara.dm" +#include "code\modules\custom_ka\barrels.dm" +#include "code\modules\custom_ka\cells.dm" +#include "code\modules\custom_ka\core.dm" +#include "code\modules\custom_ka\frames.dm" +#include "code\modules\custom_ka\projectiles.dm" +#include "code\modules\custom_ka\upgrade_chips.dm" #include "code\modules\customitems\item_defines.dm" #include "code\modules\customitems\item_spawning.dm" #include "code\modules\detectivework\footprints.dm" diff --git a/code/_helpers/unsorted.dm b/code/_helpers/unsorted.dm index 29799c25a2f..bc76a49c51f 100644 --- a/code/_helpers/unsorted.dm +++ b/code/_helpers/unsorted.dm @@ -714,7 +714,7 @@ proc/GaussRandRound(var/sigma,var/roundto) else user_loc_to_check = user.loc - if (!user || user.stat || user.weakened || user.stunned || !(user_loc_to_check == Location)) + if (!user || user.stat || user.weakened || user.stunned || (use_user_turf >= 0 && user_loc_to_check != Location)) . = 0 break diff --git a/code/datums/trading/goods.dm b/code/datums/trading/goods.dm index 4e46687815e..f0409e6ad6d 100644 --- a/code/datums/trading/goods.dm +++ b/code/datums/trading/goods.dm @@ -344,8 +344,11 @@ Sells devices, odds and ends, and medical stuff /obj/item/weapon/autochisel = TRADER_ALL, /obj/structure/sculpting_block = TRADER_ALL, /obj/item/weapon/plastique/seismic = TRADER_THIS_TYPE, - /obj/item/weapon/gun/energy/kinetic_accelerator = TRADER_THIS_TYPE, - /obj/item/borg/upgrade/modkit = TRADER_SUBTYPES_ONLY, + /obj/item/weapon/gun/custom_ka/frame01/prebuilt = TRADER_THIS_TYPE, + /obj/item/weapon/gun/custom_ka/frame02/prebuilt = TRADER_THIS_TYPE, + /obj/item/weapon/gun/custom_ka/frame03/prebuilt = TRADER_THIS_TYPE, + /obj/item/weapon/gun/custom_ka/frame04/prebuilt = TRADER_THIS_TYPE, + /obj/item/weapon/gun/custom_ka/frame05/prebuilt = TRADER_THIS_TYPE, /obj/item/weapon/gun/energy/plasmacutter = TRADER_THIS_TYPE, /obj/item/clothing/head/helmet/space/void/mining = TRADER_THIS_TYPE, /obj/item/clothing/suit/space/void/mining = TRADER_THIS_TYPE, diff --git a/code/datums/uplink/highly visible and dangerous weapons.dm b/code/datums/uplink/highly visible and dangerous weapons.dm index 3364bfc3506..bbbb6bc353b 100644 --- a/code/datums/uplink/highly visible and dangerous weapons.dm +++ b/code/datums/uplink/highly visible and dangerous weapons.dm @@ -103,3 +103,8 @@ name = "Steel Throwing Star" item_cost = 2 path = /obj/item/weapon/material/star + +/datum/uplink_item/item/visible_weapons/custom_ka + name = "Kinetic Laser Assembly" + item_cost = 12 + path = /obj/item/weapon/gun/custom_ka/frame01/illegal \ No newline at end of file diff --git a/code/game/objects/items/weapons/manuals.dm b/code/game/objects/items/weapons/manuals.dm index cfdd0ea3eaa..a7cb46c5589 100644 --- a/code/game/objects/items/weapons/manuals.dm +++ b/code/game/objects/items/weapons/manuals.dm @@ -1367,4 +1367,53 @@ Remember; once you have been afflicted with brain trauma you are over four times as likely to suffer it again! Keep your patient's best interests at heart. + "} + +/obj/item/weapon/book/manual/ka_custom + name = "Guide to Custom Kinetic Accelerators" + icon_state ="rulebook" + author = "Quartermaster Burgs" + title = "Guide to Custom Kinetic Accelerators" + dat = {" + + + + +

Metal Snowflake: Your Guide to Custom Kinetic Accelerators

+

by Quartermaster Burgs

+
+

So you want to make your own custom kinetic accelerator. While it may look simple to take apart, swap, and modify parts to fit your working needs, there are a few things to keep in mind before assembling.

+ +

Know your parts. To make a working kinetic accelerator, you require a power converter, a kinetic cell, and a frame to store it all on. Some parts are better for certain jobs than others. Some are more compact, more economical, more powerful, more quick, more durable. Mix and match parts to your liking, however there may be some parts that are incompatible with other parts due to software differences.

+ +

A power converter contains a complex assembly that converts kinetic energy into destructive energy via powerful magnets and heat induction, which are perfect for destroying rock in areas with minimal atmosphere.

+ +

A kinetic cell holds the kinetic energy and usually has a means of creating it, such as a lever, a pump, or an internal power source. Manual pumps are quite the common and wise choice given how electrical outlets and recharging station are not too common while out on the dig.

+ +

A frame is quite literally a frame; the weapon's base. All frames contain special software that allows the components to interact with eachother easily and safely without causing sparks or other malfunctions. Some frames contain extra bonus software, such as over-clocking or recoil damping predictors.

+ +

Assembly is very easy. First, you secure the power cell, then you secure the power converter, then you install any additional upgrade chips. The bolts will quite literally screw themselves securely. If you wish to remove the parts, a wrench is required to disassemble.

+ +

It's best to test fire the weapon in a safe location before going out for a long haul. There are plenty of things that could go wrong with the assembly, but thankfully do to regulations and other legalwork, the weapon will prevent itself from firing if the software detects an issue. There is a digital screen located on the top of the frame that would state if there was anything wrong with the weapon if an attempt to fire is made. Here are the error codes for said weapon.

+
+

Error Codes:

+ +

0: Means that there is a component connection issue. Ensure that the entire assembly (Frame, Power Converter, Cell) are secured together as one.

+ +

101: Means that there is not enough voltage going into the power converter. Ensure that the cell is rated enough to handle the power consumption of the entire assembly.

+ +

102: Means that there is not enough amps going into the power converter. Ensure that there are no other modules that may reduce the amount of amps going into the power converter.

+ +

103: Means that there are not enough watts going into the power converter. Ensure that the power cell is rated enough to handle the power consumption of the entire assembly.

+ +

201: Means that the frame is not rated to handle the entirety of the heat energy of the components. Either upgrade the frame, or downgrade the components.

+ + "} \ No newline at end of file diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index 576f555a25d..0f954a099ea 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -305,5 +305,5 @@ /obj/item/warp_core, /obj/item/weapon/extraction_pack, /obj/item/weapon/rrf, - /obj/item/weapon/gun/energy/kinetic_accelerator + /obj/item/weapon/gun/custom_ka/ ) diff --git a/code/game/objects/random/random.dm b/code/game/objects/random/random.dm index bf76fc401f1..ff782f10438 100644 --- a/code/game/objects/random/random.dm +++ b/code/game/objects/random/random.dm @@ -985,4 +985,49 @@ /obj/item/weapon/gun/energy/wand/toy = 5, /obj/item/device/binoculars = 11, /obj/item/device/megaphone = 11 - ) \ No newline at end of file + ) + +/obj/random/custom_ka + name = "random custom kinetic accelerator" + desc = "Wew." + icon = 'icons/obj/kinetic_accelerators.dmi' + icon_state = "frame01" + + spawnlist = list( + /obj/item/toy/prize/honk + ) + has_postspawn = TRUE + post_spawn(obj/thing) + var/list/frames = list( + /obj/item/weapon/gun/custom_ka/frame01 = 3, + /obj/item/weapon/gun/custom_ka/frame02 = 2, + /obj/item/weapon/gun/custom_ka/frame03 = 1 + ) + + var/list/cells = list( + /obj/item/custom_ka_upgrade/cells/cell01 = 3, + /obj/item/custom_ka_upgrade/cells/cell02 = 2, + /obj/item/custom_ka_upgrade/cells/cell03 = 1 + ) + + var/list/barrels = list( + /obj/item/custom_ka_upgrade/barrels/barrel01 = 3, + /obj/item/custom_ka_upgrade/barrels/barrel02 = 2, + /obj/item/custom_ka_upgrade/barrels/barrel03 = 1 + ) + + var/frame_type = pickweight(frames) + var/obj/item/weapon/gun/custom_ka/spawned_frame = new frame_type(thing.loc) + + var/cell_type = pickweight(cells) + spawned_frame.installed_cell = new cell_type(spawned_frame) + + var/barrel_type = pickweight(barrels) + spawned_frame.installed_barrel = new barrel_type(spawned_frame) + + spawned_frame.installed_upgrade_chip = new /obj/item/custom_ka_upgrade/upgrade_chips/capacity(spawned_frame) + + spawned_frame.update_icon() + spawned_frame.update_stats() + + qdel(thing) \ No newline at end of file diff --git a/code/modules/cargo/randomstock.dm b/code/modules/cargo/randomstock.dm index 4fa9c4f39ed..b603c320a67 100644 --- a/code/modules/cargo/randomstock.dm +++ b/code/modules/cargo/randomstock.dm @@ -225,6 +225,7 @@ var/list/global/random_stock_rare = list( "humanhide" = 0.5, "modkit" = 1, "contraband" = 0.8, + "custom_ka" = 0.5, "nothing" = 0) var/list/global/random_stock_large = list( @@ -1396,6 +1397,8 @@ var/list/global/random_stock_large = list( //============================================================= //============================================================= //============================================================= + if("custom_ka") + new /obj/random/custom_ka(L) if("gold") new /obj/item/stack/material/gold(L, rand(2,15)) if("diamond") diff --git a/code/modules/clothing/spacesuits/rig/modules/combat.dm b/code/modules/clothing/spacesuits/rig/modules/combat.dm index 7ad9d7d148e..ffddb786256 100644 --- a/code/modules/clothing/spacesuits/rig/modules/combat.dm +++ b/code/modules/clothing/spacesuits/rig/modules/combat.dm @@ -232,15 +232,6 @@ gun_type = /obj/item/weapon/gun/energy/plasmacutter/mounted -/obj/item/rig_module/mounted/kinetic_accelerator - name = "hardsuit kinetic accelerator" - desc = "A lethal-looking industrial cutter." - icon_state = "kineticgun" - interface_name = "kinetic accelerator" - interface_desc = "A ranged mining tool that does increased damage in low pressure." - - gun_type = /obj/item/weapon/gun/energy/kinetic_accelerator/cyborg - /obj/item/rig_module/mounted/thermalldrill name = "hardsuit thermal drill" desc = "An incredibly lethal looking thermal drill." diff --git a/code/modules/custom_ka/barrels.dm b/code/modules/custom_ka/barrels.dm new file mode 100644 index 00000000000..703f2dc9e1f --- /dev/null +++ b/code/modules/custom_ka/barrels.dm @@ -0,0 +1,96 @@ +/obj/item/custom_ka_upgrade/barrels/barrel01 + name = "standard core KA power converter" + build_name = "'Standard'" + desc = "A very standard kinetic accelerator energy converter and barrel assembly. Has poor range, but gets the job done." + icon_state = "barrel01" + damage_increase = 10 + firedelay_increase = 0.75 SECONDS + range_increase = 2 + recoil_increase = 2 + cost_increase = 1 + cell_increase = 0 + capacity_increase = -1 + fire_sound = 'sound/weapons/Kenetic_accel.ogg' + projectile_type = /obj/item/projectile/kinetic + origin_tech = list(TECH_MATERIAL = 2,TECH_ENGINEERING = 2,TECH_MAGNET = 2) + +/obj/item/custom_ka_upgrade/barrels/barrel02 + name = "professional core KA power converter" + build_name = "'Professional'" + desc = "A more advanced kinetic accelerator energy converter and barrel assembly intended for professional miners out on the rock." + icon_state = "barrel02" + damage_increase = 15 + firedelay_increase = 0.75 SECONDS + range_increase = 3 + recoil_increase = 3 + cost_increase = 1 + cell_increase = 0 + capacity_increase = -2 + fire_sound = 'sound/weapons/Kenetic_accel.ogg' + projectile_type = /obj/item/projectile/kinetic + origin_tech = list(TECH_MATERIAL = 3,TECH_ENGINEERING = 3,TECH_MAGNET = 3) + +/obj/item/custom_ka_upgrade/barrels/barrel03 + name = "meteor core KA power converter" + build_name = "'Meteor'" + desc = "A very robust kinetic accelerator energy converter used by professional mining contractors intended for the use in mining soft metals such as gold on asteroids." + icon_state = "barrel03" + damage_increase = 20 + firedelay_increase = 0.75 SECONDS + range_increase = 4 + recoil_increase = 4 + cost_increase = 2 + cell_increase = 0 + capacity_increase = -3 + fire_sound = 'sound/weapons/resonator_fire.ogg' + projectile_type = /obj/item/projectile/kinetic + origin_tech = list(TECH_MATERIAL = 4,TECH_ENGINEERING = 4,TECH_MAGNET = 4) + + +/obj/item/custom_ka_upgrade/barrels/barrel04 + name = "planet core KA power converter" + build_name = "'Planet'" + desc = "An incredibly powerful and efficient kinetic accelerator energy converter intended for the use in atmospheric areas such as planets and gas giants." + icon_state = "barrel04" + damage_increase = 25 + firedelay_increase = 1 SECONDS + range_increase = 5 + recoil_increase = 6 + cost_increase = 5 + cell_increase = 0 + capacity_increase = -4 + fire_sound = 'sound/weapons/pulse.ogg' + projectile_type = /obj/item/projectile/kinetic + origin_tech = list(TECH_MATERIAL = 5,TECH_ENGINEERING = 5,TECH_MAGNET = 5) + +/obj/item/custom_ka_upgrade/barrels/barrel05 + name = "experimental core KA power converter" + build_name = "'Experimental'" + desc = "A very experimental kinetic accelerator energy converter. Not much is known about this thing, other than it kicks like a mule and stings like an e-sword." + icon_state = "barrel05" + damage_increase = 30 + firedelay_increase = 1 SECONDS + range_increase = 6 + recoil_increase = 10 + cost_increase = 10 + cell_increase = 0 + capacity_increase = -5 + fire_sound = 'sound/weapons/resonator_blast.ogg' + projectile_type = /obj/item/projectile/kinetic + origin_tech = list(TECH_MATERIAL = 6,TECH_ENGINEERING = 6,TECH_MAGNET = 6) + +/obj/item/custom_ka_upgrade/barrels/illegal + name = "laser KA power converter" + build_name = "'Syndicate''" + desc = "A laser crystal ripped from a laser rifle and repurposed for kinetic accelerator assemblies." + icon_state = "barrel_laser" + damage_increase = 15 + firedelay_increase = 1.5 SECONDS + range_increase = 64 + recoil_increase = 6 + cost_increase = 4 + cell_increase = 0 + capacity_increase = 0 + fire_sound = 'sound/weapons/lasercannonfire.ogg' + projectile_type = /obj/item/projectile/beam/midlaser + origin_tech = list(TECH_MATERIAL = 4,TECH_ENGINEERING = 4,TECH_MAGNET = 4,TECH_COMBAT = 5,TECH_ILLEGAL = 5) diff --git a/code/modules/custom_ka/cells.dm b/code/modules/custom_ka/cells.dm new file mode 100644 index 00000000000..c56f6dc64a2 --- /dev/null +++ b/code/modules/custom_ka/cells.dm @@ -0,0 +1,136 @@ +/obj/item/custom_ka_upgrade/cells/attack_self(mob/user as mob) + + if(is_pumping) + return + + if(pump_restore) + is_pumping = TRUE + if(stored_charge >= cell_increase) + to_chat(user,"The pump on the [src] refuses to move.") + else + if(!pump_delay || do_after(user,pump_delay,use_user_turf = -1)) + if(isturf(src.loc)) + to_chat(user,"You pump \the [src].") + else + to_chat(user,"You pump \the [src.loc].") + stored_charge = min(stored_charge + pump_restore,cell_increase) + playsound(src,'sound/weapons/kenetic_reload.ogg', 50, 0) + + is_pumping = FALSE + user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + +/obj/item/custom_ka_upgrade/cells/cell01 + //Pump Action + name = "pump action KA cell" + build_name = "pump-action" + desc = "A very basic power cell and pump action combo that stores a single charge. A pump is required after each shot, however it deals increased damage and has increased range." + icon_state = "cell01" + damage_increase = 5 + firedelay_increase = 0.25 SECONDS + range_increase = 3 + recoil_increase = -1 + cost_increase = -100 //Always have a single charge + cell_increase = 1 + capacity_increase = -1 + mod_limit_increase = 0 + + pump_restore = 1 + pump_delay = 0.4 SECONDS + + origin_tech = list(TECH_MATERIAL = 2,TECH_ENGINEERING = 2,TECH_MAGNET = 2,TECH_POWER = 2) + +/obj/item/custom_ka_upgrade/cells/cell02 + //Pump Action + name = "pump recharging KA cell" + build_name = "pump-recharging" + desc = "A somewhat more advanced, standard issue pump and cell assembly that allows the user to 'pre-pump' their charges, up to a capacity of 12. Can fire quite quickly." + icon_state = "cell02" + firedelay_increase = 0 + recoil_increase = 1 + cell_increase = 12 + capacity_increase = -2 + mod_limit_increase = 0 + + pump_restore = 1 + pump_delay = 0.5 SECONDS + + origin_tech = list(TECH_MATERIAL = 3,TECH_ENGINEERING = 3,TECH_MAGNET = 3,TECH_POWER = 3) + +/obj/item/custom_ka_upgrade/cells/cell03 + name = "kinetic charging KA cell" + build_name = "kinetic-reloading" + desc = "A complex pump and cell assembly that uses the kinetic energy of an initial pump to significantly charge the cell. Deals increased damage at the cost of severely increased recoil and reduced firerate." + icon_state = "cell03" + damage_increase = 10 + firedelay_increase = 0.5 SECONDS + recoil_increase = 4 + cost_increase = -1 + cell_increase = 40 + capacity_increase = -3 + mod_limit_increase = 0 + + pump_restore = 40 + pump_delay = 1 SECONDS + + origin_tech = list(TECH_MATERIAL = 4,TECH_ENGINEERING = 4,TECH_MAGNET = 4,TECH_POWER = 4) + +/obj/item/custom_ka_upgrade/cells/cell04 + name = "uranium charging KA cell" + build_name = "recharging" + desc = "A pumpless cell assembly that containes a miniaturized nuclear reactor housed safely inside the assembly. Recharges the cell shortly over time, however deals slightly reduced damage." + icon_state = "cell04" + damage_increase = -5 + recoil_increase = 0 + cost_increase = -2 + cell_increase = 60 + capacity_increase = -4 + mod_limit_increase = 0 + + pump_restore = 0 + pump_delay = 0 + + origin_tech = list(TECH_MATERIAL = 5,TECH_ENGINEERING = 5,TECH_MAGNET = 5,TECH_POWER = 5) + +/obj/item/custom_ka_upgrade/cells/cell04/on_update(var/obj/item/weapon/gun/custom_ka/the_gun) + stored_charge = min(stored_charge + 4,cell_increase) + +/obj/item/custom_ka_upgrade/cells/cell05 + name = "recoil reloader KA cell" + build_name = "recoil-reloading" + desc = "A very experimental and well designed cell and pump assembly that converts some of the kinetic energy from the weapon's recoil into usable energy. Only works if the recoil is high enough. Contains a basic top-mounted pump just in case." + icon_state = "cell05" + firedelay_increase = 0.4 SECONDS + damage_increase = 0 + recoil_increase = -5 + cost_increase = -3 + cell_increase = 80 + capacity_increase = -5 + mod_limit_increase = 0 + + pump_restore = 5 + pump_delay = 0.5 SECONDS + + origin_tech = list(TECH_MATERIAL = 6,TECH_ENGINEERING = 6,TECH_MAGNET = 6,TECH_POWER = 6) + +/obj/item/custom_ka_upgrade/cells/cell05/on_fire(var/obj/item/weapon/gun/custom_ka/the_gun) + if(the_gun.recoil_increase > 0) + stored_charge = min(stored_charge + min(the_gun.recoil_increase*2,the_gun.cost_increase*0.5),cell_increase) + +/obj/item/custom_ka_upgrade/cells/illegal + //Pump Action + name = "pump action KA cell" + build_name = "static" + desc = "A clusterfuck of circuitry and battery parts all snuggly fit inside a solid, static plastisteel frame." + icon_state = "cell_illegal" + firedelay_increase = 0 + recoil_increase = 0 + cost_increase = 0 + stored_charge = 20 + cell_increase = 20 + capacity_increase = 0 + mod_limit_increase = 0 + + pump_restore = 20 + pump_delay = 0.5 SECONDS + + origin_tech = list(TECH_MATERIAL = 3,TECH_ENGINEERING = 3,TECH_MAGNET = 3,TECH_POWER = 3, TECH_ILLEGAL = 4) \ No newline at end of file diff --git a/code/modules/custom_ka/core.dm b/code/modules/custom_ka/core.dm new file mode 100644 index 00000000000..e0a4228e7a9 --- /dev/null +++ b/code/modules/custom_ka/core.dm @@ -0,0 +1,495 @@ +/obj/item/weapon/gun/custom_ka + name = null // Abstract + var/official_name + var/custom_name + desc = "A kinetic accelerator assembly." + icon = 'icons/obj/kinetic_accelerators.dmi' + icon_state = "" + item_state = "kineticgun" + contained_sprite = 1 + flags = CONDUCT + slot_flags = SLOT_BELT|SLOT_HOLSTER + matter = list(DEFAULT_WALL_MATERIAL = 2000) + w_class = 3 + origin_tech = list(TECH_MATERIAL = 2,TECH_ENGINEERING = 2) + + burst = 1 + fire_delay = 0 //delay after shooting before the gun can be used again + burst_delay = 2 //delay between shots, if firing in bursts + move_delay = 1 + fire_sound = 'sound/weapons/Kenetic_accel.ogg' + fire_sound_text = "blast" + recoil = 0 + silenced = 0 + muzzle_flash = 3 + accuracy = 0 //accuracy is measured in tiles. +1 accuracy means that everything is effectively one tile closer for the purpose of miss chance, -1 means the opposite. launchers are not supported, at the moment. + scoped_accuracy = null + burst_accuracy = list(0) //allows for different accuracies for each shot in a burst. Applied on top of accuracy + dispersion = list(0) + reliability = 100 + + var/obj/item/projectile/projectile_type = /obj/item/projectile/kinetic + + pin = /obj/item/device/firing_pin + + sel_mode = 1 //index of the currently selected mode + firemodes = list() + + //wielding information + fire_delay_wielded = 0 + recoil_wielded = 0 + accuracy_wielded = 0 + wielded = 0 + needspin = TRUE + + var/build_name = "" + + //Custom stuff + var/obj/item/custom_ka_upgrade/cells/installed_cell + var/obj/item/custom_ka_upgrade/barrels/installed_barrel + var/obj/item/custom_ka_upgrade/upgrade_chips/installed_upgrade_chip + + var/damage_increase = 0 //The amount of damage this weapon does, in total. + var/firedelay_increase = 0 //How long it takes for the weapon to fire, in deciseconds. + var/range_increase = 0 + var/recoil_increase = 0 //The amount of recoil this weapon has, in total. + var/cost_increase = 0 //How much energy to take per shot, in total. + var/cell_increase = 0 //The total increase in battery. This actually doesn't do anything and is just a display variable. Power is handled in their own parts. + var/capacity_increase = 0 //How much/big this frame can hold a mod. + var/mod_limit_increase = 0 //Maximum size of a mod this frame can take. + var/aoe_increase = 0 + + var/current_highest_mod = 0 + + var/is_emagged = 0 + var/is_emped = 0 + + var/can_disassemble_cell = TRUE + +/obj/item/weapon/gun/custom_ka/examine(var/mob/user) + . = ..() + if(installed_upgrade_chip) + to_chat(user,"It is equipped with \the [installed_barrel], \the [installed_cell], and \the [installed_upgrade_chip].") + else if(installed_barrel) + to_chat(user,"It is equipped with \the [installed_barrel] and \the [installed_cell]. It has space for an upgrade chip.") + else if(installed_cell) + to_chat(user,"It is equipped with \the [installed_cell]. The assembly lacks a barrel installation.") + + if(installed_barrel) + if(custom_name) + to_chat(user,"[custom_name] is written crudely in pen across the side, covering up the offical designation.") + else + to_chat(user,"The offical designation \"[official_name]\" is etched neatly on the side.") + + if(installed_cell) + to_chat(user,"It has [round(installed_cell.stored_charge / cost_increase)] shots remaining.") + +/obj/item/weapon/gun/custom_ka/emag_act(var/remaining_charges, var/mob/user, var/emag_source) + to_chat(user,"You override the safeties on the [src]...") + is_emagged = 1 + return 1 + +/obj/item/weapon/gun/custom_ka/emp_act(severity) + is_emped = 1 + return 1 + +/obj/item/weapon/gun/custom_ka/Fire(atom/target, mob/living/user, clickparams, pointblank=0, reflex=0) + + if(!fire_checks(target,user,clickparams,pointblank,reflex)) + return + + //Custom fire checks + var/warning_message + var/disaster + + if(is_emped && prob(10)) + var/list/warning_messages = list( + "ERROR CODE: ERROR CODE", + "ERROR CODE: PLEASE REPORT THIS", + "ERROR CODE: OH GOD HELP", + "ERROR CODE: 404 NOT FOUND", + "ERROR CODE: KEYBOARD NOT FOUND, PRESS F11 TO CONTINUE", + "ERROR CODE: CLICK OKAY TO CONTINUE", + "ERROR CODE: AN ERROR HAS OCCURED TRYING TO DISPLAY AN ERROR CODE", + "ERROR CODE: NO ERROR CODE FOUND", + "ERROR CODE: LOADING.." + ) + warning_message = pick(warning_messages) + spark(src.loc, 3, alldirs) + else if(!installed_cell || !installed_barrel) + if(!is_emagged || (is_emped && prob(5)) ) + warning_message = "ERROR CODE: 0" + else + disaster = "spark" + else if (damage_increase <= 0) + if(!is_emagged || (is_emped && prob(5)) ) + warning_message = "ERROR CODE: 100" + else + disaster = "overheat" + else if (range_increase < 2) + if(!is_emagged || (is_emped && prob(5)) ) + warning_message = "ERROR CODE: 101" + else + disaster = "explode" + else if (cost_increase > cell_increase) + if(!is_emagged || (is_emped && prob(5)) ) + warning_message = "ERROR CODE: 102" + else + disaster = "overheat" + else if (capacity_increase < 0) + if(!is_emagged || (is_emped && prob(5)) ) + warning_message = "ERROR CODE: 201" + else + disaster = "overheat" + else if (mod_limit_increase < current_highest_mod) + if(is_emagged || (is_emped && prob(5)) ) + warning_message = "ERROR CODE: 202" + else + disaster = "overheat" + + if(warning_message) + to_chat(user,"\The [src] flashes, \"[warning_message].\"") + playsound(src,'sound/machines/buzz-two.ogg', 50, 0) + handle_click_empty(user) + user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN*4) + return + else + switch(disaster) + if("spark") + to_chat(user,"\The [src] sparks!") + spark(src.loc, 3, alldirs) + if("overheat") + to_chat(user,"\The [src] turns red hot!") + user.IgniteMob() + if("explode") + to_chat(user,"\The [src] violently explodes!") + explosion(get_turf(src.loc), 0, 1, 2, 4) + qdel(src) + + //actually attempt to shoot + var/turf/targloc = get_turf(target) //cache this in case target gets deleted during shooting, e.g. if it was a securitron that got destroyed. + for(var/i in 1 to burst) + var/obj/projectile = consume_next_projectile(user) + if(!projectile) + handle_click_empty(user) + break + + var/acc = burst_accuracy[min(i, burst_accuracy.len)] + var/disp = dispersion[min(i, dispersion.len)] + process_accuracy(projectile, user, target, acc, disp) + + if(pointblank) + process_point_blank(projectile, user, target) + + if(process_projectile(projectile, user, target, user.zone_sel.selecting, clickparams)) + handle_post_fire(user, target, pointblank, reflex, i == burst) + update_icon() + + if(i < burst) + sleep(burst_delay) + + if(!(target && target.loc)) + target = targloc + pointblank = 0 + + update_held_icon() + //update timing + user.setClickCooldown(DEFAULT_QUICK_COOLDOWN) + user.setMoveCooldown(move_delay) + next_fire_time = world.time + fire_delay + +/obj/item/weapon/gun/custom_ka/consume_next_projectile() + if(!installed_cell || installed_cell.stored_charge < cost_increase) + return null + + installed_cell.stored_charge -= cost_increase + + var/obj/item/projectile/shot_projectile + //Send fire events + if(installed_cell) + installed_cell.on_fire(src) + if(installed_barrel) + installed_barrel.on_fire(src) + shot_projectile = new installed_barrel.projectile_type(src.loc) + if(installed_upgrade_chip) + installed_upgrade_chip.on_fire(src) + + shot_projectile.damage = damage_increase + shot_projectile.range = range_increase + shot_projectile.aoe = aoe_increase + return shot_projectile + +/obj/item/weapon/gun/custom_ka/Initialize() + . = ..() + START_PROCESSING(SSprocessing, src) + + if(installed_cell) + installed_cell = new installed_cell(src) + if(installed_barrel) + installed_barrel = new installed_barrel(src) + if(installed_upgrade_chip) + installed_upgrade_chip = new installed_upgrade_chip(src) + + update_stats() + queue_icon_update() + +/obj/item/weapon/gun/custom_ka/Destroy() + . = ..() + STOP_PROCESSING(SSprocessing, src) + +/obj/item/weapon/gun/custom_ka/process() + if(installed_cell) + installed_cell.on_update(src) + if(installed_barrel) + installed_barrel.on_update(src) + if(installed_upgrade_chip) + installed_upgrade_chip.on_update(src) + . = ..() + +/obj/item/weapon/gun/custom_ka/update_icon() + . = ..() + cut_overlays() + var/name_list = list("","","","") + + name_list[3] = src.build_name + + if(installed_upgrade_chip) + add_overlay(installed_upgrade_chip.icon_state) + name_list[4] = installed_upgrade_chip.build_name + + if(installed_cell) + add_overlay(installed_cell.icon_state) + name_list[1] = installed_cell.build_name + + if(installed_barrel) + add_overlay(installed_barrel.icon_state) + name_list[2] = installed_barrel.build_name + + official_name = sanitize(jointext(name_list," ")) + + if(installed_barrel) + if(custom_name) + name = custom_name + else + name = official_name + else + name = initial(name) + +/obj/item/weapon/gun/custom_ka/proc/update_stats() + //pls don't bully me for this code + damage_increase = initial(damage_increase) + firedelay_increase = initial(firedelay_increase) + range_increase = initial(range_increase) + recoil_increase = initial(recoil_increase) + cost_increase = initial(cost_increase) + cell_increase = initial(cell_increase) + capacity_increase = initial(capacity_increase) + mod_limit_increase = initial(mod_limit_increase) + aoe_increase = initial(aoe_increase) + + if(installed_cell) + damage_increase += installed_cell.damage_increase + firedelay_increase += installed_cell.firedelay_increase + range_increase += installed_cell.range_increase + recoil_increase += installed_cell.recoil_increase + cost_increase += installed_cell.cost_increase + cell_increase += installed_cell.cell_increase + capacity_increase += installed_cell.capacity_increase + mod_limit_increase += installed_cell.mod_limit_increase + aoe_increase += installed_cell.aoe_increase + current_highest_mod = max(-installed_cell.capacity_increase,current_highest_mod) + + if(installed_barrel) + fire_sound = installed_barrel.fire_sound + damage_increase += installed_barrel.damage_increase + firedelay_increase += installed_barrel.firedelay_increase + range_increase += installed_barrel.range_increase + recoil_increase += installed_barrel.recoil_increase + cost_increase += installed_barrel.cost_increase + cell_increase += installed_barrel.cell_increase + capacity_increase += installed_barrel.capacity_increase + mod_limit_increase += installed_barrel.mod_limit_increase + aoe_increase += installed_barrel.aoe_increase + current_highest_mod = max(-installed_barrel.capacity_increase,current_highest_mod) + + if(installed_upgrade_chip) + damage_increase += installed_upgrade_chip.damage_increase + firedelay_increase += installed_upgrade_chip.firedelay_increase + range_increase += installed_upgrade_chip.range_increase + recoil_increase += installed_upgrade_chip.recoil_increase + cost_increase += installed_upgrade_chip.cost_increase + cell_increase += installed_upgrade_chip.cell_increase + capacity_increase += installed_upgrade_chip.capacity_increase + mod_limit_increase += installed_upgrade_chip.mod_limit_increase + aoe_increase += installed_upgrade_chip.aoe_increase + current_highest_mod = max(-installed_upgrade_chip.capacity_increase,current_highest_mod) + + //Explot fixing + cell_increase = max(cell_increase,0) + cost_increase = max(cost_increase,1) + recoil_increase = max(recoil_increase,1) + firedelay_increase = max(firedelay_increase,0.125 SECONDS) + + aoe_increase += round(damage_increase/30) + aoe_increase = max(0,aoe_increase) + + //Gun stats + recoil = recoil_increase*0.25 + fire_delay = firedelay_increase + accuracy = round(recoil_increase*0.25) + +/obj/item/weapon/gun/custom_ka/attack_self(mob/user as mob) + . = ..() + if(installed_cell) + installed_cell.attack_self(user) + if(installed_barrel) + installed_barrel.attack_self(user) + if(installed_upgrade_chip) + installed_upgrade_chip.attack_self(user) + +/obj/item/weapon/gun/custom_ka/attackby(var/obj/item/I as obj, var/mob/user as mob) + + . = ..() + + if(istype(I,/obj/item/weapon/pen)) + custom_name = sanitize(input("Enter a custom name for your [name]", "Set Name") as text|null) + to_chat(user,"You label \the [name] as \"[custom_name]\"") + update_icon() + else if(istype(I,/obj/item/weapon/wrench)) + if(installed_upgrade_chip) + playsound(src,'sound/items/Screwdriver.ogg', 50, 0) + to_chat(user,"You remove \the [installed_upgrade_chip].") + installed_upgrade_chip.forceMove(user.loc) + installed_upgrade_chip.update_icon() + installed_upgrade_chip = null + update_stats() + update_icon() + else if(installed_barrel) + playsound(src,'sound/items/Ratchet.ogg', 50, 0) + to_chat(user,"You remove \the [installed_barrel].") + installed_barrel.forceMove(user.loc) + installed_barrel.update_icon() + installed_barrel = null + update_stats() + update_icon() + else if(installed_cell && can_disassemble_cell) + playsound(src,'sound/items/Ratchet.ogg', 50, 0) + to_chat(user,"You remove \the [installed_cell].") + installed_cell.forceMove(user.loc) + installed_cell.update_icon() + installed_cell = null + update_stats() + update_icon() + else + to_chat(user,"There is nothing to remove from \the [src].") + else if(istype(I,/obj/item/custom_ka_upgrade/cells)) + if(installed_cell) + to_chat(user,"There is already \an [installed_cell] installed.") + else + var/obj/item/custom_ka_upgrade/cells/tempvar = I + installed_cell = tempvar + user.remove_from_mob(installed_cell) + installed_cell.loc = src + update_stats() + update_icon() + playsound(src,'sound/items/Wirecutter.ogg', 50, 0) + else if(istype(I,/obj/item/custom_ka_upgrade/barrels)) + if(!installed_cell) + to_chat(user,"You must install a power cell before installing \the [I].") + else if(installed_barrel) + to_chat(user,"There is already \an [installed_barrel] installed.") + else + var/obj/item/custom_ka_upgrade/barrels/tempvar = I + installed_barrel = tempvar + user.remove_from_mob(installed_barrel) + installed_barrel.loc = src + update_stats() + update_icon() + playsound(src,'sound/items/Wirecutter.ogg', 50, 0) + else if(istype(I,/obj/item/custom_ka_upgrade/upgrade_chips)) + if(!installed_cell || !installed_barrel) + to_chat(user,"A barrel and a cell need to be installed before you install \the [I].") + else if(installed_upgrade_chip) + to_chat(user,"There is already \an [installed_upgrade_chip] installed.") + else + var/obj/item/custom_ka_upgrade/upgrade_chips/tempvar = I + installed_upgrade_chip = tempvar + user.remove_from_mob(installed_upgrade_chip) + installed_upgrade_chip.loc = src + update_stats() + update_icon() + playsound(src,'sound/items/Wirecutter.ogg', 50, 0) + +/obj/item/custom_ka_upgrade //base item + name = null //abstract + icon = 'icons/obj/kinetic_accelerators.dmi' + icon_state = "" + var/build_name = "" + var/damage_increase = 0 + var/firedelay_increase = 0 + var/range_increase = 0 + var/recoil_increase = 0 + var/cost_increase = 0 + var/cell_increase = 0 + var/capacity_increase = 0 + var/mod_limit_increase = 0 + var/aoe_increase = 0 + + var/is_emagged = 0 + var/is_emped = 0 + +/obj/item/custom_ka_upgrade/proc/on_update(var/obj/item/weapon/gun/custom_ka) + //Do update related things here + return + +/obj/item/custom_ka_upgrade/proc/on_fire(var/obj/item/weapon/gun/custom_ka) + //Do fire related things here + return + +/obj/item/custom_ka_upgrade/cells + name = null //Abstract + icon = 'icons/obj/kinetic_accelerators.dmi' + icon_state = "" + damage_increase = 0 + firedelay_increase = 0 + range_increase = 0 + recoil_increase = 0 + cost_increase = 0 + cell_increase = 0 + capacity_increase = 0 + mod_limit_increase = 0 + var/stored_charge = 0 + var/pump_restore = 0 + var/pump_delay = 0 + var/is_pumping = FALSE //Prevents from pumping stupidly fast do to a do_after exploit + origin_tech = list(TECH_MATERIAL = 2,TECH_ENGINEERING = 2,TECH_MAGNET = 2,TECH_POWER=2) + +/obj/item/custom_ka_upgrade/barrels + name = null //Abstract + icon = 'icons/obj/kinetic_accelerators.dmi' + icon_state = "" + damage_increase = 0 + firedelay_increase = 0 + range_increase = 0 + recoil_increase = 0 + cost_increase = 0 + cell_increase = 0 + capacity_increase = 0 + mod_limit_increase = 0 + var/fire_sound = 'sound/weapons/Kenetic_accel.ogg' + var/projectile_type = /obj/item/projectile/kinetic + origin_tech = list(TECH_MATERIAL = 2,TECH_ENGINEERING = 2,TECH_MAGNET = 2) + +/obj/item/custom_ka_upgrade/upgrade_chips + name = null + icon = 'icons/obj/kinetic_accelerators.dmi' + damage_increase = 0 + firedelay_increase = 0 + range_increase = 0 + recoil_increase = 0 + cost_increase = 0 + cell_increase = 0 + capacity_increase = 0 + mod_limit_increase = 0 + + origin_tech = list(TECH_POWER = 4,TECH_MAGNET = 4, TECH_DATA = 4) \ No newline at end of file diff --git a/code/modules/custom_ka/frames.dm b/code/modules/custom_ka/frames.dm new file mode 100644 index 00000000000..b838f18bf01 --- /dev/null +++ b/code/modules/custom_ka/frames.dm @@ -0,0 +1,88 @@ +/obj/item/weapon/gun/custom_ka/frame01 + name = "compact kinetic accelerator frame" + build_name = "compact" + icon_state = "frame01" + w_class = 3 + capacity_increase = 3 + mod_limit_increase = 2 + origin_tech = list(TECH_MATERIAL = 2,TECH_ENGINEERING = 2) + slot_flags = SLOT_BELT + +/obj/item/weapon/gun/custom_ka/frame02 + name = "light kinetic accelerator frame" + build_name = "light" + icon_state = "frame02" + w_class = 3 + recoil_increase = -1 + capacity_increase = 5 + mod_limit_increase = 3 + origin_tech = list(TECH_MATERIAL = 3,TECH_ENGINEERING = 3) + +/obj/item/weapon/gun/custom_ka/frame03 + name = "medium kinetic accelerator frame" + build_name = "medium" + icon_state = "frame03" + w_class = 4 + recoil_increase = -2 + capacity_increase = 7 + mod_limit_increase = 4 + origin_tech = list(TECH_MATERIAL = 4,TECH_ENGINEERING = 4) + +/obj/item/weapon/gun/custom_ka/frame04 + name = "heavy kinetic accelerator frame" + build_name = "heavy" + icon_state = "frame04" + w_class = 5 + recoil_increase = -5 + capacity_increase = 9 + mod_limit_increase = 5 + origin_tech = list(TECH_MATERIAL = 5,TECH_ENGINEERING = 5) + +/obj/item/weapon/gun/custom_ka/frame05 + name = "tactical kinetic accelerator frame" + build_name = "tactical" + icon_state = "frame05" + w_class = 5 + recoil_increase = -6 + capacity_increase = 10 + mod_limit_increase = 5 + origin_tech = list(TECH_MATERIAL = 6,TECH_ENGINEERING = 6) + +/obj/item/weapon/gun/custom_ka/frame01/prebuilt + installed_cell = /obj/item/custom_ka_upgrade/cells/cell01 + installed_barrel = /obj/item/custom_ka_upgrade/barrels/barrel01 + installed_upgrade_chip = /obj/item/custom_ka_upgrade/upgrade_chips/focusing + +/obj/item/weapon/gun/custom_ka/frame02/prebuilt + installed_cell = /obj/item/custom_ka_upgrade/cells/cell02 + installed_barrel = /obj/item/custom_ka_upgrade/barrels/barrel02 + installed_upgrade_chip = /obj/item/custom_ka_upgrade/upgrade_chips/firerate + +/obj/item/weapon/gun/custom_ka/frame03/prebuilt + installed_cell = /obj/item/custom_ka_upgrade/cells/cell03 + installed_barrel = /obj/item/custom_ka_upgrade/barrels/barrel03 + installed_upgrade_chip = /obj/item/custom_ka_upgrade/upgrade_chips/focusing + +/obj/item/weapon/gun/custom_ka/frame04/prebuilt + installed_cell = /obj/item/custom_ka_upgrade/cells/cell04 + installed_barrel = /obj/item/custom_ka_upgrade/barrels/barrel04 + installed_upgrade_chip = /obj/item/custom_ka_upgrade/upgrade_chips/effeciency + +/obj/item/weapon/gun/custom_ka/frame04/illegal + installed_cell = /obj/item/custom_ka_upgrade/cells/illegal + installed_barrel = /obj/item/custom_ka_upgrade/barrels/illegal + +/obj/item/weapon/gun/custom_ka/frame05/prebuilt + installed_cell = /obj/item/custom_ka_upgrade/cells/cell05 + installed_barrel = /obj/item/custom_ka_upgrade/barrels/barrel05 + installed_upgrade_chip = /obj/item/custom_ka_upgrade/upgrade_chips/damage + +/obj/item/weapon/gun/custom_ka/frame01/illegal + installed_cell = /obj/item/custom_ka_upgrade/cells/illegal + installed_barrel = /obj/item/custom_ka_upgrade/barrels/illegal + installed_upgrade_chip = /obj/item/custom_ka_upgrade/upgrade_chips/illegal + +/obj/item/weapon/gun/custom_ka/frame05/cyborg + can_disassemble_cell = FALSE + installed_cell = /obj/item/custom_ka_upgrade/cells/cell04 + installed_barrel = /obj/item/custom_ka_upgrade/barrels/barrel02 \ No newline at end of file diff --git a/code/modules/custom_ka/projectiles.dm b/code/modules/custom_ka/projectiles.dm new file mode 100644 index 00000000000..db14b17e228 --- /dev/null +++ b/code/modules/custom_ka/projectiles.dm @@ -0,0 +1,43 @@ +//Projectiles +/obj/item/projectile/kinetic + name = "kinetic force" + icon_state = null + damage = 0 //Base damage handled elsewhere. + damage_type = BRUTE + check_armour = "bomb" + range = 5 + var/pressure_decrease = 0.25 + +/obj/item/projectile/kinetic/on_impact(var/atom/A,var/aoe_scale = 1, var/damage_scale = 1) + + + var/turf/target_turf = get_turf(A) + if(!target_turf) + target_turf = get_turf(src) + var/datum/gas_mixture/environment = target_turf.return_air() + + damage *= max(1 - (environment.return_pressure()/100)*0.75,0) + + if(isliving(A)) //Never do more than 15 damage to a living being per shot. + damage = min(damage,15) + + + strike_thing(A,aoe*aoe_scale,damage) + + . = ..() + +/obj/item/projectile/kinetic/proc/strike_thing(atom/target,var/new_aoe,var/damage_scale) + + var/turf/target_turf = get_turf(target) + if(istype(target_turf, /turf/simulated/mineral)) + var/turf/simulated/mineral/M = target_turf + M.kinetic_hit(damage,dir) + else if(istype(target_turf, /turf/simulated/floor/asteroid)) + var/turf/simulated/floor/asteroid/A = target_turf + A.gets_dug() + + new /obj/effect/overlay/temp/kinetic_blast(target_turf) + + if(new_aoe > 0) + for(var/new_target in orange(new_aoe, target_turf)) + src.on_impact(new_target,0,0.5) \ No newline at end of file diff --git a/code/modules/custom_ka/upgrade_chips.dm b/code/modules/custom_ka/upgrade_chips.dm new file mode 100644 index 00000000000..979333ae413 --- /dev/null +++ b/code/modules/custom_ka/upgrade_chips.dm @@ -0,0 +1,64 @@ +/obj/item/custom_ka_upgrade/upgrade_chips/damage + name = "upgrade chip - damage increase" + desc = "Increases damage and recoil." + icon_state = "upgrade_chip" + damage_increase = 10 + recoil_increase = 3 + +/obj/item/custom_ka_upgrade/upgrade_chips/firerate + name = "upgrade chip - firedelay increase" + desc = "Increases the rate of fire, reduces damage." + icon_state = "upgrade_chip" + damage_increase = -5 + firedelay_increase = -0.5 SECONDS + +/obj/item/custom_ka_upgrade/upgrade_chips/effeciency + name = "upgrade chip - effeciency increase" + desc = "Reduces the cost of shots by 1, reduces damage." + icon_state = "upgrade_chip" + damage_increase = -5 + cost_increase = -1 + +/obj/item/custom_ka_upgrade/upgrade_chips/recoil + name = "upgrade chip - recoil reduction" + desc = "Reduces recoil, increases accuracy, reduces rate of fire" + icon_state = "upgrade_chip" + recoil_increase = -5 + firedelay_increase = 0.25 SECONDS + +/obj/item/custom_ka_upgrade/upgrade_chips/focusing + name = "upgrade chip - focusing" + desc = "Increases damage and accuracy, however reduces the range and explosion size, if any." + icon_state = "upgrade_chip" + damage_increase = 10 + recoil_increase = -4 + range_increase = -2 + aoe_increase = -100 + +/obj/item/custom_ka_upgrade/upgrade_chips/capacity + name = "upgrade chip - capacity increase" + desc = "Increases the maximum capacity of the assembly at the cost of more power drain per shot." + icon_state = "upgrade_chip" + cost_increase = 3 + capacity_increase = 5 + mod_limit_increase = 1 + +/obj/item/custom_ka_upgrade/upgrade_chips/explosive + name = "upgrade chip - aoe explosion MKI" + desc = "Kinetic blasts explode in an increased AoE radius at significantly increased power drain per shot." + icon_state = "upgrade_chip" + cost_increase = 5 + aoe_increase = 2 + +/obj/item/custom_ka_upgrade/upgrade_chips/illegal + name = "illegal custom KA upgrade chip" + desc = "Overrides safety settings for a custom kinetic accelerator. What's the worst that could happen?" + icon_state = "upgrade_chip_illegal" + damage_increase = 10 + firedelay_increase = -0.5 SECONDS + recoil_increase = 4 + cost_increase = 1 + range_increase = 4 + capacity_increase = 100 + mod_limit_increase = 5 + origin_tech = list(TECH_POWER = 6,TECH_MAGNET = 6, TECH_DATA = 6, TECH_ILLEGAL = 4) \ No newline at end of file diff --git a/code/modules/item_worth/worths_list.dm b/code/modules/item_worth/worths_list.dm index 0ac19037800..e68af2a3f43 100644 --- a/code/modules/item_worth/worths_list.dm +++ b/code/modules/item_worth/worths_list.dm @@ -63,8 +63,12 @@ var/list/worths = list( /obj/item/weapon/gun/energy/crossbow = 750, /obj/item/weapon/gun/energy/temperature = 3000, /obj/item/weapon/gun/energy/lawgiver = 7000, - /obj/item/weapon/gun/energy/kinetic_accelerator = 2500, - /obj/item/weapon/gun/energy/plasmacutter = 4000, + /obj/item/weapon/gun/custom_ka/frame01/prebuilt = 2500, + /obj/item/weapon/gun/custom_ka/frame02/prebuilt = 3500, + /obj/item/weapon/gun/custom_ka/frame03/prebuilt = 4500, + /obj/item/weapon/gun/custom_ka/frame04/prebuilt = 5500, + /obj/item/weapon/gun/custom_ka/frame05/prebuilt = 6500, + /obj/item/weapon/gun/energy/plasmacutter = 6000, /obj/item/weapon/gun/energy/stunrevolver = 650, /obj/item/weapon/gun/energy/tesla = 7000, /obj/item/weapon/gun/energy/gravity_gun = 4500, @@ -683,7 +687,6 @@ var/list/worths = list( /obj/item/rig_module/grenade_launcher = 1500, /obj/item/rig_module/mounted/energy_blade = 5000, /obj/item/rig_module/mounted/thermalldrill = 2500, - /obj/item/rig_module/mounted/kinetic_accelerator = 1500, /obj/item/rig_module/mounted/plasmacutter = 2500, /obj/item/rig_module/mounted/ion = 2000, /obj/item/rig_module/mounted/xray = 3500, diff --git a/code/modules/mining/abandonedcrates.dm b/code/modules/mining/abandonedcrates.dm index 04d9ebd32e0..184c89395f3 100644 --- a/code/modules/mining/abandonedcrates.dm +++ b/code/modules/mining/abandonedcrates.dm @@ -95,7 +95,11 @@ new/obj/item/weapon/pickaxe/gold(src) if(81 to 82) new/obj/item/weapon/gun/energy/plasmacutter(src) - if(83 to 84) + if(83) + new/obj/random/custom_ka(src) + new/obj/random/custom_ka(src) + new/obj/random/custom_ka(src) + if(84) new/obj/item/toy/katana(src) if(85) new/obj/item/seeds/random(src) diff --git a/code/modules/mining/machine_rigpress.dm b/code/modules/mining/machine_rigpress.dm index e224395a1c2..7c58d3676d8 100644 --- a/code/modules/mining/machine_rigpress.dm +++ b/code/modules/mining/machine_rigpress.dm @@ -19,8 +19,7 @@ /obj/machinery/mineral/rigpress/attackby(obj/item/W, mob/user) if(!pressing) var/outcome_path - var/list/kinetic_mods = list() - var/kineticaccelerator + if(istype(W, /obj/item/clothing/glasses/material)) outcome_path = /obj/item/rig_module/vision/meson @@ -33,13 +32,6 @@ if(istype(W, /obj/item/weapon/pickaxe/drill)) outcome_path = /obj/item/rig_module/device/basicdrill - if(istype(W, /obj/item/weapon/gun/energy/kinetic_accelerator)) - outcome_path = /obj/item/rig_module/mounted/kinetic_accelerator - var/obj/item/weapon/gun/energy/kinetic_accelerator/KA = W - kineticaccelerator = 1 - for(var/obj/item/borg/upgrade/modkit/kmod in KA.modkits) - kinetic_mods += kmod - if(istype(W, /obj/item/weapon/gun/energy/plasmacutter)) outcome_path = /obj/item/rig_module/mounted/plasmacutter @@ -61,13 +53,9 @@ qdel(W) spawn(300) ping( "\The [src] pings, \"Module successfuly produced!\"" ) - if(kineticaccelerator) - var/obj/item/rig_module/mounted/kinetic_accelerator/KA = new /obj/item/rig_module/mounted/kinetic_accelerator(src.loc) - var/obj/item/weapon/gun/energy/kinetic_accelerator/cyborg/KGUN = KA.gun - for(var/obj/item/borg/upgrade/modkit/kmod in kinetic_mods) - KGUN.modkits += kmod - else - new outcome_path(src.loc) + + new outcome_path(src.loc) + use_power(500) pressing = 0 update_icon() diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm index 31bcf58f3ba..4af9cf457bc 100644 --- a/code/modules/mining/machine_vending.dm +++ b/code/modules/mining/machine_vending.dm @@ -17,12 +17,11 @@ var/global/list/minevendor_list = list( //keep in order of price new /datum/data/mining_equipment("Lantern", /obj/item/device/flashlight/lantern, 10, 75), new /datum/data/mining_equipment("Shovel", /obj/item/weapon/shovel, 15, 100), new /datum/data/mining_equipment("Pickaxe", /obj/item/weapon/pickaxe, 10, 100), - new /datum/data/mining_equipment("KA White Tracer Rounds", /obj/item/borg/upgrade/modkit/tracer, 40, 100), new /datum/data/mining_equipment("Compressed rail cartridge", /obj/item/weapon/rrf_ammo, 50, 100), + new /datum/data/mining_equipment("Class E Kinetic Accelerator", /obj/item/weapon/gun/custom_ka/frame01/prebuilt, 12, 200), new /datum/data/mining_equipment("Ore Box", /obj/structure/ore_box, -1, 150, 1), new /datum/data/mining_equipment("Emergency Floodlight", /obj/item/weapon/floodlight_diy, -1, 150, 1), new /datum/data/mining_equipment("Premium Cigar", /obj/item/clothing/mask/smokable/cigarette/cigar/havana, 30, 150), - new /datum/data/mining_equipment("KA Adjustable Tracer Rounds", /obj/item/borg/upgrade/modkit/tracer/adjustable, 30, 150), new /datum/data/mining_equipment("Seismic Charge", /obj/item/weapon/plastique/seismic, 25, 150), new /datum/data/mining_equipment("Lottery Chip", /obj/item/weapon/spacecash/ewallet/lotto, 50, 200), new /datum/data/mining_equipment("Ripley Paint Kit", /obj/item/device/kit/paint/ripley/random, 15, 200), @@ -30,6 +29,7 @@ var/global/list/minevendor_list = list( //keep in order of price new /datum/data/mining_equipment("Mining Drill", /obj/item/weapon/pickaxe/drill, 10, 200), new /datum/data/mining_equipment("Deep Ore Scanner", /obj/item/weapon/mining_scanner, 10, 250), new /datum/data/mining_equipment("Magboots", /obj/item/clothing/shoes/magboots, 10, 300), + new /datum/data/mining_equipment("Class D Kinetic Accelerator", /obj/item/weapon/gun/custom_ka/frame02/prebuilt, 12, 400), new /datum/data/mining_equipment("Autochisel", /obj/item/weapon/autochisel, 10, 400), new /datum/data/mining_equipment("Jetpack", /obj/item/weapon/tank/jetpack, 10, 400), new /datum/data/mining_equipment("Drone Drill Upgrade", /obj/item/device/mine_bot_ugprade, 10, 400), @@ -45,20 +45,16 @@ var/global/list/minevendor_list = list( //keep in order of price new /datum/data/mining_equipment("Minecart", /obj/vehicle/train/cargo/trolley/mining, -1, 600, 1), new /datum/data/mining_equipment("Resonator", /obj/item/weapon/resonator, 10, 700), new /datum/data/mining_equipment("Mining RIG", /obj/item/weapon/rig/industrial, 5, 750), - new /datum/data/mining_equipment("KA Range Increase", /obj/item/borg/upgrade/modkit/range, 10, 750), new /datum/data/mining_equipment("Jaunter", /obj/item/device/wormhole_jaunter, 20, 750), - new /datum/data/mining_equipment("Kinetic Accelerator", /obj/item/weapon/gun/energy/kinetic_accelerator, 10, 750), new /datum/data/mining_equipment("100 credits", /obj/item/weapon/spacecash/c100, -1, 1000), new /datum/data/mining_equipment("Mass Driver", /obj/item/weapon/mass_driver_diy, 5, 800), new /datum/data/mining_equipment("Mining Drone", /mob/living/silicon/robot/drone/mining, 15, 800), new /datum/data/mining_equipment("Minecart Engine", /obj/vehicle/train/cargo/engine/mining, -1, 800, 1), - new /datum/data/mining_equipment("Drone Kinetic Accelerator Upgrade", /obj/item/device/mine_bot_ugprade/ka, 10, 800), + new /datum/data/mining_equipment("Drone KA Upgrade", /obj/item/device/mine_bot_ugprade/ka, 10, 800), new /datum/data/mining_equipment("Ore Summoner", /obj/item/weapon/oreportal, 35, 800), - new /datum/data/mining_equipment("KA Cooldown Decrease", /obj/item/borg/upgrade/modkit/cooldown, 15, 1000), new /datum/data/mining_equipment("Lazarus Injector", /obj/item/weapon/lazarus_injector, 25, 1000), new /datum/data/mining_equipment("Industrial Drill Head", /obj/machinery/mining/drill, -1, 1000, 1), new /datum/data/mining_equipment("Super Resonator", /obj/item/weapon/resonator/upgraded, 10, 1250), - new /datum/data/mining_equipment("KA AoE Damage", /obj/item/borg/upgrade/modkit/aoe/turfs, 15, 1500), new /datum/data/mining_equipment("Diamond Pickaxe", /obj/item/weapon/pickaxe/diamond, 10, 1500), new /datum/data/mining_equipment("Thermal Drill", /obj/item/weapon/gun/energy/vaurca/thermaldrill, 5, 3750) ) diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index 9124097e819..b3d13c22aae 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -27,6 +27,7 @@ new /obj/item/weapon/ore_radar(src) new /obj/item/weapon/key/minecarts(src) new /obj/item/device/gps/mining(src) + new /obj/item/weapon/book/manual/ka_custom(src) /******************************Lantern*******************************/ diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index d7c80fab171..4e839d10816 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -53,8 +53,21 @@ var/list/mineral_can_smooth_with = list( var/obj/effect/mineral/my_mineral + var/rock_health = 20 //10 to 20, in initialize + has_resources = 1 +/turf/simulated/mineral/proc/kinetic_hit(var/damage,var/direction) + + rock_health -= damage + + if(rock_health <= 0) + var/turf/simulated/mineral/next_rock = get_step(src,direction) + if(istype(next_rock)) + new /obj/effect/overlay/temp/kinetic_blast(next_rock) + next_rock.kinetic_hit(-rock_health,direction) + GetDrilled(1) + // Copypaste parent call for performance. /turf/simulated/mineral/Initialize(mapload) if (initialized) @@ -83,6 +96,8 @@ var/list/mineral_can_smooth_with = list( if (!mapload) queue_smooth_neighbors(src) + rock_health = rand(10,20) + return INITIALIZE_HINT_NORMAL /turf/simulated/mineral/examine(mob/user) diff --git a/code/modules/mob/living/silicon/robot/gripper.dm b/code/modules/mob/living/silicon/robot/gripper.dm index d9fb8e3d519..7b0af48a663 100644 --- a/code/modules/mob/living/silicon/robot/gripper.dm +++ b/code/modules/mob/living/silicon/robot/gripper.dm @@ -183,15 +183,16 @@ //Definitions of gripper subtypes */ -// VEEEEERY limited version for mining borgs. Basically only for swapping cells and upgrading the drills. +// VEEEEERY limited version for mining borgs. Basically only for swapping cells, upgrading the drills, and upgrading custom KAs. /obj/item/weapon/gripper/miner name = "drill maintenance gripper" desc = "A simple grasping tool for the maintenance of heavy drilling machines." icon_state = "gripper-mining" can_hold = list( - /obj/item/weapon/cell, - /obj/item/weapon/stock_parts + /obj/item/weapon/cell, + /obj/item/weapon/stock_parts, + /obj/item/custom_ka_upgrade ) /obj/item/weapon/gripper/paperwork diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index ebaf3a715a2..a08d332f2ca 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -712,6 +712,7 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/weapon/pickaxe/borgdrill(src) src.modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src) src.modules += new /obj/item/weapon/gripper/miner(src) + src.modules += new /obj/item/weapon/wrench(src) src.modules += new /obj/item/weapon/mining_scanner(src) src.modules += new /obj/item/device/gps/mining(src) // for locating itself in the deep space src.emag = new /obj/item/weapon/gun/energy/plasmacutter/mounted(src) @@ -924,6 +925,7 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/weapon/pickaxe/drill(src) src.modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src) src.modules += new /obj/item/weapon/gripper/miner(src) + src.modules += new /obj/item/weapon/wrench(src) src.modules += new /obj/item/weapon/mining_scanner(src) src.emag = new /obj/item/weapon/gun/energy/plasmacutter/mounted(src) @@ -937,6 +939,7 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/weapon/pickaxe/jackhammer(src) src.modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src) src.modules += new /obj/item/weapon/gripper/miner(src) + src.modules += new /obj/item/weapon/wrench(src) src.modules += new /obj/item/weapon/mining_scanner(src) src.emag = new /obj/item/weapon/gun/energy/plasmacutter/mounted(src) @@ -947,9 +950,10 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/device/flash(src) src.modules += new /obj/item/borg/sight/material(src) src.modules += new /obj/item/weapon/storage/bag/ore/drone(src) - src.modules += new /obj/item/weapon/gun/energy/kinetic_accelerator/cyborg(src) + src.modules += new /obj/item/weapon/gun/custom_ka/frame05/cyborg(src) src.modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src) src.modules += new /obj/item/weapon/gripper/miner(src) + src.modules += new /obj/item/weapon/wrench(src) src.modules += new /obj/item/weapon/mining_scanner(src) src.emag = new /obj/item/weapon/gun/energy/plasmacutter/mounted(src) @@ -960,10 +964,11 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/device/flash(src) src.modules += new /obj/item/borg/sight/material(src) src.modules += new /obj/item/weapon/storage/bag/ore/drone(src) - src.modules += new /obj/item/weapon/gun/energy/kinetic_accelerator/cyborg(src) + src.modules += new /obj/item/weapon/gun/custom_ka/frame05/cyborg(src) src.modules += new /obj/item/weapon/pickaxe/jackhammer(src) src.modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src) src.modules += new /obj/item/weapon/gripper/miner(src) + src.modules += new /obj/item/weapon/wrench(src) src.modules += new /obj/item/weapon/mining_scanner(src) src.emag = new /obj/item/weapon/gun/energy/plasmacutter/mounted(src) diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 140dd037c44..22ff91acea5 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -198,32 +198,39 @@ else return ..() //Pistolwhippin' -/obj/item/weapon/gun/proc/Fire(atom/target, mob/living/user, clickparams, pointblank=0, reflex=0) - if(!user || !target) return +/obj/item/weapon/gun/proc/fire_checks(atom/target, mob/living/user, clickparams, pointblank=0, reflex=0) + if(!user || !target) + return 0 add_fingerprint(user) if(user.client && (user.client.prefs.toggles_secondary & SAFETY_CHECK) && user.a_intent != I_HURT) //Check this first to save time. user << "You refrain from firing, as you aren't on harm intent." - return + return 0 if(!special_check(user)) - return + return 0 var/failure_chance = 100 - reliability if(failure_chance && prob(failure_chance)) handle_reliability_fail(user) - return + return 0 if(world.time < next_fire_time) if (world.time % 3) //to prevent spam user << "[src] is not ready to fire again!" - return + return 0 var/shoot_time = (burst - 1)* burst_delay - user.setClickCooldown(shoot_time) //no clicking on things while shooting - user.setMoveCooldown(shoot_time) //no moving while shooting either + user.setClickCooldown(shoot_time) + user.setMoveCooldown(shoot_time) next_fire_time = world.time + shoot_time + return 1 + +/obj/item/weapon/gun/proc/Fire(atom/target, mob/living/user, clickparams, pointblank=0, reflex=0) + if(!fire_checks(target,user,clickparams,pointblank,reflex)) + return + //actually attempt to shoot var/turf/targloc = get_turf(target) //cache this in case target gets deleted during shooting, e.g. if it was a securitron that got destroyed. for(var/i in 1 to burst) diff --git a/code/modules/projectiles/guns/energy/mining.dm b/code/modules/projectiles/guns/energy/mining.dm index fb6cc027bb7..bfed3785cac 100644 --- a/code/modules/projectiles/guns/energy/mining.dm +++ b/code/modules/projectiles/guns/energy/mining.dm @@ -1,286 +1,3 @@ -/obj/item/weapon/gun/energy/kinetic_accelerator/cyborg - name = "mounted proto-kinetic accelerator" - self_recharge = 1 - use_external_power = 1 - -/obj/item/weapon/gun/energy/kinetic_accelerator - name = "proto-kinetic accelerator" - desc = "A reloadable, ranged mining tool that does increased damage in low pressure. Capable of holding up to six slots worth of mod kits." - icon = 'icons/obj/mining_contained.dmi' - icon_state = "kineticgun" - item_state = "kineticgun" - contained_sprite = 1 - charge_meter = 0 - fire_delay = 16 - slot_flags = SLOT_BELT|SLOT_BACK - origin_tech = list(TECH_COMBAT = 2, TECH_MAGNET = 4, TECH_POWER = 4) - projectile_type = /obj/item/projectile/kinetic - fire_sound = 'sound/weapons/Kenetic_accel.ogg' - var/max_mod_capacity = 100 - var/list/modkits = list() - -/obj/item/weapon/gun/energy/kinetic_accelerator/attack_self(mob/living/user as mob) - if(power_supply.charge < power_supply.maxcharge) - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - user << "You begin charging \the [src]..." - if(do_after(user,20)) - playsound(src.loc, 'sound/weapons/kenetic_reload.ogg', 60, 1) - user.visible_message( - "\The [user] pumps \the [src]!", - "You pump \the [src]!" - ) - power_supply.charge = power_supply.maxcharge - -/obj/item/weapon/gun/energy/kinetic_accelerator/examine(mob/user) - ..() - if(max_mod_capacity) - user << "[get_remaining_mod_capacity()]% mod capacity remaining." - for(var/A in get_modkits()) - var/obj/item/borg/upgrade/modkit/M = A - 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(iscrowbar(A)) - if(modkits.len) - user << "You pry the modifications out." - playsound(loc, 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/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 - -//Projectiles -/obj/item/projectile/kinetic - name = "kinetic force" - icon_state = null - damage = 15 - damage_type = BRUTE - check_armour = "bomb" - range = 5 - - var/pressure_decrease = 0.25 - var/turf_aoe = FALSE - var/mob_aoe = 0 - var/list/hit_overlays = list() - -/obj/item/projectile/kinetic/launch_from_gun(atom/target, target_zone, mob/user, params, angle_override, forced_spread, obj/item/weapon/gun/launcher) - if(istype(launcher, /obj/item/weapon/gun/energy/kinetic_accelerator)) - var/obj/item/weapon/gun/energy/kinetic_accelerator/KA = launcher - for(var/A in KA.get_modkits()) - var/obj/item/borg/upgrade/modkit/M = A - M.modify_projectile(src) - ..() - -/obj/item/projectile/kinetic/on_impact(var/atom/A) - strike_thing(A) - . = ..() - -/obj/item/projectile/kinetic/proc/strike_thing(atom/target) - var/turf/target_turf = get_turf(target) - if(!target_turf) - target_turf = get_turf(src) - var/datum/gas_mixture/environment = target_turf.return_air() - var/pressure = environment.return_pressure() - if(pressure > 50) - name = "weakened [name]" - damage *= pressure_decrease - if(istype(target_turf, /turf/simulated/mineral)) - var/turf/simulated/mineral/M = target_turf - M.GetDrilled(1) - 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 orange(1, target_turf)) - if(istype(T, /turf/simulated/mineral)) - var/turf/simulated/mineral/M = T - M.GetDrilled(1) - if(mob_aoe) - for(var/mob/living/L in range(1, target_turf) - firer - target) - L.apply_damage(damage*mob_aoe, damage_type, def_zone, armor) - L << "You're struck by a [name]!" - - -//Modkits -/obj/item/borg/upgrade/modkit - name = "modification kit" - desc = "An upgrade for kinetic accelerators." - icon = 'icons/obj/mining.dmi' - icon_state = "modkit" - origin_tech = "programming=2;materials=2;magnets=4" - 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/borg/upgrade/modkit/examine(mob/user) - ..() - user << "Occupies [cost]% of mod capacity." - -/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(.) - user << "You install the modkit." - playsound(loc, 'sound/items/Screwdriver.ogg', 100, 1) - user.unEquip(src) - forceMove(KA) - KA.modkits += src - else - user << "The modkit you're trying to install would conflict with an already installed modkit. Use a crowbar to remove existing modkits." - else - 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 = 20 - 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 and increases the recharge rate." - modifier = 2 - -/obj/item/borg/upgrade/modkit/cooldown/install(obj/item/weapon/gun/energy/kinetic_accelerator/KA, mob/user) - . = ..() - if(.) - KA.fire_delay -= modifier - KA.recharge_time -= modifier - -/obj/item/borg/upgrade/modkit/cooldown/uninstall(obj/item/weapon/gun/energy/kinetic_accelerator/KA) - KA.fire_delay += modifier - KA.recharge_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 - -/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 - /*******************PLASMA CUTTER*******************/ /obj/item/weapon/gun/energy/plasmacutter/mounted diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 3ac1562bbb2..72a23e84863 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -83,6 +83,7 @@ var/datum/point/vector/trajectory var/trajectory_ignore_forcemove = FALSE //instructs forceMove to NOT reset our trajectory to the new location! var/range = 50 //This will de-increment every step. When 0, it will deletze the projectile. + var/aoe = 0 //For KAs, really //Hitscan var/hitscan = FALSE //Whether this is hitscan. If it is, speed is basically ignored. diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index 15378adb9b9..3cd7025f371 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -437,4 +437,162 @@ req_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 3, TECH_POWER = 3) materials = list(DEFAULT_WALL_MATERIAL = 750, "glass" = 500, "phoron" = 1000) build_path = /obj/item/laser_components/modulator - sort_string = "TZZEN" \ No newline at end of file + sort_string = "TZZEN" + +//Frames +/datum/design/item/weapon/ka_frame01 + id = "ka_frame01" + req_tech = list(TECH_MATERIAL = 2,TECH_ENGINEERING = 2) + materials = list(DEFAULT_WALL_MATERIAL = 3000) + build_path = /obj/item/weapon/gun/custom_ka/frame01 + sort_string = "TZZFA" + +/datum/design/item/weapon/ka_frame02 + id = "ka_frame02" + req_tech = list(TECH_MATERIAL = 3,TECH_ENGINEERING = 3) + materials = list(DEFAULT_WALL_MATERIAL = 4000, "silver" = 1000) + build_path = /obj/item/weapon/gun/custom_ka/frame02 + sort_string = "TZZFB" + +/datum/design/item/weapon/ka_frame03 + id = "ka_frame03" + req_tech = list(TECH_MATERIAL = 4,TECH_ENGINEERING = 4) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "silver" = 2000) + build_path = /obj/item/weapon/gun/custom_ka/frame03 + sort_string = "TZZFC" + +/datum/design/item/weapon/ka_frame04 + id = "ka_frame04" + req_tech = list(TECH_MATERIAL = 5,TECH_ENGINEERING = 5) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "silver" = 2000, "diamond" = 1000) + build_path = /obj/item/weapon/gun/custom_ka/frame04 + sort_string = "TZZFD" + +/datum/design/item/weapon/ka_frame05 + id = "ka_frame05" + req_tech = list(TECH_MATERIAL = 6,TECH_ENGINEERING = 6) + materials = list(DEFAULT_WALL_MATERIAL = 6000, "silver" = 4000, "diamond" = 2000) + build_path = /obj/item/weapon/gun/custom_ka/frame05 + sort_string = "TZZFE" + +//Cells +/datum/design/item/weapon/ka_cell01 + id = "ka_cell01" + req_tech = list(TECH_MATERIAL = 2,TECH_ENGINEERING = 2,TECH_MAGNET = 2,TECH_POWER = 2) + materials = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 1000) + build_path = /obj/item/custom_ka_upgrade/cells/cell01 + sort_string = "TZZGA" + +/datum/design/item/weapon/ka_cell02 + id = "ka_cell02" + req_tech = list(TECH_MATERIAL = 3,TECH_ENGINEERING = 3,TECH_MAGNET = 3,TECH_POWER = 3) + materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 1000, "silver" = 1000, "gold" = 1000) + build_path = /obj/item/custom_ka_upgrade/cells/cell02 + sort_string = "TZZGB" + +/datum/design/item/weapon/ka_cell03 + id = "ka_cell03" + req_tech = list(TECH_MATERIAL = 4,TECH_ENGINEERING = 4,TECH_MAGNET = 4,TECH_POWER = 4) + materials = list(DEFAULT_WALL_MATERIAL = 3000, "glass" = 3000, "silver" = 3000, "gold" = 1000) + build_path = /obj/item/custom_ka_upgrade/cells/cell03 + sort_string = "TZZGC" + +/datum/design/item/weapon/ka_cell04 + id = "ka_cell04" + req_tech = list(TECH_MATERIAL = 5,TECH_ENGINEERING = 5,TECH_MAGNET = 5,TECH_POWER = 5) + materials = list(DEFAULT_WALL_MATERIAL = 4000, "glass" = 3000, "silver" = 3000, "gold" = 1000, "uranium" = 5000) + build_path = /obj/item/custom_ka_upgrade/cells/cell04 + sort_string = "TZZGD" + +/datum/design/item/weapon/ka_cell05 + id = "ka_cell05" + req_tech = list(TECH_MATERIAL = 6,TECH_ENGINEERING = 6,TECH_MAGNET = 6,TECH_POWER = 6) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 3000, "silver" = 3000, "gold" = 1000, "phoron" = 5000) + build_path = /obj/item/custom_ka_upgrade/cells/cell05 + sort_string = "TZZGE" + +//Barrels +/datum/design/item/weapon/ka_barrel01 + id = "ka_barrel01" + req_tech = list(TECH_MATERIAL = 2,TECH_ENGINEERING = 2,TECH_MAGNET = 2) + materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 2000, "gold" = 1000, "phoron" = 500) + build_path = /obj/item/custom_ka_upgrade/barrels/barrel01 + sort_string = "TZZHA" + +/datum/design/item/weapon/ka_barrel02 + id = "ka_barrel02" + req_tech = list(TECH_MATERIAL = 3,TECH_ENGINEERING = 3,TECH_MAGNET = 3) + materials = list(DEFAULT_WALL_MATERIAL = 3000, "glass" = 2000, "gold" = 1000, "phoron" = 500) + build_path = /obj/item/custom_ka_upgrade/barrels/barrel02 + sort_string = "TZZHB" + +/datum/design/item/weapon/ka_barrel03 + id = "ka_barrel03" + req_tech = list(TECH_MATERIAL = 4,TECH_ENGINEERING = 4,TECH_MAGNET = 4) + materials = list(DEFAULT_WALL_MATERIAL = 4000, "glass" = 2000, "gold" = 2000, "phoron" = 1000) + build_path = /obj/item/custom_ka_upgrade/barrels/barrel03 + sort_string = "TZZHC" + +/datum/design/item/weapon/ka_barrel04 + id = "ka_barrel04" + req_tech = list(TECH_MATERIAL = 5,TECH_ENGINEERING = 5,TECH_MAGNET = 5) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 3000, "gold" = 3000, "phoron" = 3000, "diamond" = 1000) + build_path = /obj/item/custom_ka_upgrade/barrels/barrel04 + sort_string = "TZZHD" + +/datum/design/item/weapon/ka_barrel05 + id = "ka_barrel05" + req_tech = list(TECH_MATERIAL = 6,TECH_ENGINEERING = 6,TECH_MAGNET = 6) + materials = list(DEFAULT_WALL_MATERIAL = 6000, "glass" = 4000, "gold" = 4000, "phoron" = 4000, "diamond" = 2000) + build_path = /obj/item/custom_ka_upgrade/barrels/barrel05 + sort_string = "TZZHE" + +//Upgrades +/datum/design/item/weapon/ka_upgrade01 + id = "ka_upgrade01" + req_tech = list(TECH_POWER = 4,TECH_MAGNET = 4, TECH_DATA = 4) + materials = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 2000, "gold" = 1000, "diamond" = 1000) + build_path = /obj/item/custom_ka_upgrade/upgrade_chips/damage + sort_string = "TZZIA" + +/datum/design/item/weapon/ka_upgrade02 + id = "ka_upgrade02" + req_tech = list(TECH_POWER = 4,TECH_MAGNET = 4, TECH_DATA = 4) + materials = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 2000, "gold" = 1000, "diamond" = 1000) + build_path = /obj/item/custom_ka_upgrade/upgrade_chips/firerate + sort_string = "TZZIB" + +/datum/design/item/weapon/ka_upgrade03 + id = "ka_upgrade03" + req_tech = list(TECH_POWER = 4,TECH_MAGNET = 4, TECH_DATA = 4) + materials = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 2000, "gold" = 1000, "diamond" = 1000) + build_path = /obj/item/custom_ka_upgrade/upgrade_chips/effeciency + sort_string = "TZZIC" + +/datum/design/item/weapon/ka_upgrade04 + id = "ka_upgrade04" + req_tech = list(TECH_POWER = 4,TECH_MAGNET = 4, TECH_DATA = 4) + materials = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 2000, "gold" = 1000, "diamond" = 1000) + build_path = /obj/item/custom_ka_upgrade/upgrade_chips/recoil + sort_string = "TZZID" + +/datum/design/item/weapon/ka_upgrade05 + id = "ka_upgrade05" + req_tech = list(TECH_POWER = 4,TECH_MAGNET = 4, TECH_DATA = 4) + materials = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 2000, "gold" = 1000, "diamond" = 1000) + build_path = /obj/item/custom_ka_upgrade/upgrade_chips/focusing + sort_string = "TZZIE" + +/datum/design/item/weapon/ka_upgrade06 + id = "ka_upgrade06" + req_tech = list(TECH_POWER = 4,TECH_MAGNET = 4, TECH_DATA = 4) + materials = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 2000, "gold" = 1000, "diamond" = 1000) + build_path = /obj/item/custom_ka_upgrade/upgrade_chips/capacity + sort_string = "TZZIF" + +/datum/design/item/weapon/ka_upgrade07 + id = "ka_upgrade07" + req_tech = list(TECH_POWER = 4,TECH_MAGNET = 4, TECH_DATA = 4) + materials = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 2000, "gold" = 1000, "diamond" = 1000) + build_path = /obj/item/custom_ka_upgrade/upgrade_chips/explosive + sort_string = "TZZIF" \ No newline at end of file diff --git a/html/changelogs/burgerbb-ka.yml b/html/changelogs/burgerbb-ka.yml new file mode 100644 index 00000000000..ec866f8ecb4 --- /dev/null +++ b/html/changelogs/burgerbb-ka.yml @@ -0,0 +1,39 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +# balance +################################# + +# Your name. +author: BurgerBB + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "Removed basic kinetic accelerators from code. Replaced them with customizable kinetic accelerators with a robust array of customization. Weaker custom kinetic accelerators can be purchased from the mining vendor or found randomly in cargo, while the stronger variants can be researched and produced by science." + - rscadd: "Added traitor kinetic accelerators to uplink. These ones shoot laser beams, and can accept custom accelerator parts." + - rscadd: "Gave wrenches to mining drones and mining cyborgs, so synthetics can tinker with custom KAs." \ No newline at end of file diff --git a/icons/obj/kinetic_accelerators.dmi b/icons/obj/kinetic_accelerators.dmi new file mode 100644 index 0000000000000000000000000000000000000000..1dfa8da669030457219383bd42ca92b072bdea0c GIT binary patch literal 5655 zcmai2XH-+&wmnJcy-AlYqI9XB(mMhof;0^+K{wi4OlbpS=lu^ zMQyOh3+dPBB{Ree^;PR7QxI2~y6EDrAIDO{HM_pzZz+$ezI*a%!1YqE^-M|G(fkk zYW^r~v|Kldh$?t+Bh@`b-`LehzEscrrC6XT>8yyvLwACpxkH(m@sfOG z;Uu&)*y5T(fPflZ&waZ7X1ms6_BmutV#oAp??KXhATlt(IWQpbFb*H4l8hT3PQvHn z!}75wDp(|*BU@~MkHREKY+gZ)VdEKz8U-z7Bm*ZCz%MHVXt?MB&qiMZ6ovdC1`SOx z-!oxyz|GB#1(dQcVK6oqu|8V(c|S*@ zy17pNDkrCgt81x!|1iwaoon);#m20b5GQ^8C(n*bgwm*6ow!x4mQ{@d>2RKM{M(!{ zPM^RhOmuM&0JDE2)$)-75*_WGnilh+2nK5o%Dh4%6G_V@Z-+!$&SP=GAij6}-H)7Q zGYLf;u=i%^E7c*=Ot%>rP~bR-^4G7Hk4@||59w*_)TAbzR<~YLC^EI|LjfM%s?;Lc;i zwE1d#2w>;o$AaIPhX8}QGP=q;BBIm=y6B$W-zmnizn7nUN!8NT${6@Cy&ceSiu~TB z#Ipi7GLl!ZH8)nSv~4MF^nLFaV8ST8vyf;R*FM_@J=!SAkFD2~rH{M{SIiJI`Q|K4 z3J&O6d-GA`RSu|8i8>Tiusoe@XCJxp#%n*?EseFYh9|h zp4KKa5p;DXVDvmnYU<%Cv51B4a;rMPQV;+v+iTg;#&K)k4zEs0hl}&eM8179wjChq zL1wqkQN(i!PDJ-!tZ0*|;qsvp8SlPY5HSJI%m!8*-l7VCM3S9NDyyr?6T#!asjoh0}nXlxFSWZ<9hXdPU(px~xP&g4G|3Ty!_P$QhPM)*Y4 z$B*~P-@5n*e0hAASiG89zcYX9jG-1(xw4us%p4t0di_$nJ#tXs9uKGW5p zg1UQ_g@Q1BD!AyvecP{BSU(x8mB&~wBN>ec68a}!rgYGg1xF_>9J||jOKo4|Plv3J zWeJl@;msV~-0niZp{cm`5^nC`f;DyS>%61AGJrE5(nv{3d0x*-EY38ph$7JXa+0ci z7&iFA;yGyrIjZq2JVGyjf9c@lj1fBC*QXB+RGjajf7Wa)U)N3<&@xZuE>d<;Q|Q@k zrjSgGV$Qu1r@H$>cu{5=HG}u?gHvf6n!f62KZX=wIzZkmCyvA8mNUOVowRtQ$MyL- zhBrKyyfHdeNck_~i2eVVZ#hB>V zPny0o#!Cy@nm zj`LhiK&0;8OoOY~-b`I-Xl&ytmYlZE=g|izC-<{sB1>U_X}*PWhs;og8YG4dDHXt31QDI|Gg4=}z4M2vX6Q3K(oZr^AkEeS`r#Sj z+fTg?8r0_B2B*JshR;Iip^fFCdFkn_T()f{$Jz(wVlefMW&4e}DzTonF6HzY+C}n{ zPi3jZzfZ!%r))`pP?@OLW(FD(_lw7o1(W7@w-+wErWjPBUQ8nS&k){rRf)_ zJG0FaPW4py_g6YsMz!XjC58cWwH2oo`$;j%Wao>I zpktDT(k$E=dQ>_)HaE4{`)H5rR~9w;uU|Gywy}cG{v)n0TdIHS(AU360>9%N@hE4< zw!ny75BQ$ySy@8UC0Xm8s^xdNd<8?q#z0&B4#iLVsqHu-OIAOeu%^V$ZJTFhXEW!` z|MY6o09U`(V;nos6H+rHf~41nwWw&Zs(1@}&qHw=eQfa(WMmfW@r;sxfu&%PCm%YxwlIR$X9lzK?;fyR}WxH&`%a>FK z$dEUtBueZdeqtpQnXOsgj2uJ6is*BG8YE`h_ESnZ=&w*{SlBwrC?)0#rXd%|sm*Ca zSPerpL3(IASC!vhsPk8+*2ZADx>hHp9#tjR78HOLoDY_MIihyoil$nS{p2MLKQDPQA%}9--vm|b)jcBP+sHXL z2B-it*F#%KH5g?JxJ+=LRLNVNcR1^h*S+{5Zxw!RR@v=EBbkV(Xcq=kkfkGF4{~9H z1>4sg?M|0kXL2O|pp;M=8U|v2b%2EG36sk|utF;i^wl2Hs1o;ZM{9t7)-kBmxgCtL z%NA>AJv~hV&RJ0=K*SGLZgmBN2UjAyDA+IJfHtp`6}D)!4f!rL@Ca1TCuMqSvO6sS zVCzC1qA1ne*LBDc2febt&;>-=zgxaHW4dSasd@9}HIBWFAsY+g`F<~;q`16??QfJ@ zr1fw&t@B8Kuly5zfjN`}?8v3a)#$;MjC1rrS@Z@3NPltCbD3PV04X8##X)SOf?L@mq{C=}M&5 zM+Y7`>&>pWjY!ePCpG@(()CJb0zY6%ANDq)Hkf&G7(<(joXU;TM@WyfEPsgrwL(^Eq38tC*)d{4dL6q_)`5_+NBjCZY;c! zV62)uEv7FccomVd(h|H@bM_~5bzgvFVemIGGnD7Sp5dqd8Ig)r<_yjZKzQ$0E#YK*2; z&*Yv@>%>fHHdD7BpBJbc%y)%#X?Sx|L_~zbfYRYM10L~os2t)#tLAvyX9S2p=hQ%# zT(5-~EQ4RLA6+1sEL$Q4q8{7wVWU+=;zr)RhfkImG;bO(KO0xZiE{A0L;5fk}^asD*04Zc`Yg*n zn?Ao>AhUCGldzSQ6@Cem;x~Fws5Oio@M3CYQDa8+rRr#*m-&5Y}~%J zd=U7xhfIx%0@2XW*f}@|46?r~ygIYFwdIM!;pF+GS{$1xmMWU8-f^fhSe^!dU3gqI zmCYsIUT#GKr{YP{wfB0BUN$kWu#Pb;xo5vI{$bZv5ri2VAZ@q-utdPGHn+5NRJyyl z)#@k9c5V1A46J`cFgQOS+w_!gciHZ8MkBEqB(F*8n#pb6nmd3?=(}bh_HCSjUcgW$NK4b=(LIx*qaBD8kIZ~(&KEg9cARx5_MM9im z>hlW{#I{gt4{}kj5RQ8Mbtrl8u#kgKTkGT{>Uw_YE!g_cDZD_g%+;FBGR8hP-b>}@ zH<`- zcUZZ0hepv@PbswX77Z!G4V|#!OECTY`vm9vZttjpJ?5IRwpgeNq6kUQI$ftiiI9Z| zlf#{K`a5^832HS3Fy{QRB!uR@S^CAi$1DsKvHuyYzV&vl2~l(jVnpb_FPEcMY;lU3ShT>R zV_Vdnw|O8uiLzqz`yZ~Vas)$|nVH=Zjtv7M>hb8japHl6IXHkXUxc*PLnx};WeM7n zqVcN3HWY94IF!bYpH{QZ9ha=$aE495Ybok8Uzn;Q;bA{<_L3FVwFyLuHVw0PQl;R% z(&>?Kyy19CjJy_z)?`c(P*ggF(+!L9U literal 0 HcmV?d00001 diff --git a/maps/aurora/aurora-4_mainlevel.dmm b/maps/aurora/aurora-4_mainlevel.dmm index d9806f64fa9..efcf182d422 100644 --- a/maps/aurora/aurora-4_mainlevel.dmm +++ b/maps/aurora/aurora-4_mainlevel.dmm @@ -58179,22 +58179,6 @@ /obj/item/weapon/ladder_mobile, /turf/simulated/floor/tiled, /area/outpost/mining_main/eva) -"ceO" = ( -/obj/structure/table/rack{ - dir = 1 - }, -/obj/item/weapon/pickaxe{ - pixel_x = 5 - }, -/obj/item/weapon/shovel{ - pixel_x = -5 - }, -/obj/effect/floor_decal/corner/brown{ - icon_state = "corner_white"; - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/outpost/mining_main/eva) "ceP" = ( /obj/structure/window/reinforced{ dir = 8 @@ -65178,6 +65162,24 @@ icon_state = "asteroidfloor" }, /area/maintenance/disposal) +"cxQ" = ( +/obj/structure/table/rack{ + dir = 1 + }, +/obj/item/weapon/pickaxe{ + pixel_x = 5 + }, +/obj/item/weapon/shovel{ + pixel_x = -5 + }, +/obj/effect/floor_decal/corner/brown{ + icon_state = "corner_white"; + dir = 6 + }, +/obj/item/weapon/wrench, +/obj/item/weapon/crowbar, +/turf/simulated/floor/tiled, +/area/outpost/mining_main/eva) (1,1,1) = {" aaa @@ -90055,7 +90057,7 @@ cdV cec cer ceH -ceO +cxQ cff cfs cfG