diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm
index 058ab8fa647..5acc2adba16 100644
--- a/_maps/map_files/cyberiad/cyberiad.dmm
+++ b/_maps/map_files/cyberiad/cyberiad.dmm
@@ -65384,7 +65384,7 @@
/turf/simulated/wall,
/area/toxins/test_area)
"cnl" = (
-/obj/structure/closet/wardrobe/miner/lavaland,
+/obj/structure/closet/wardrobe/miner,
/turf/simulated/floor/plasteel{
dir = 2;
icon_state = "brown"
diff --git a/code/__DEFINES/atmospherics.dm b/code/__DEFINES/atmospherics.dm
index 67eea12291a..1ccb0cd0786 100644
--- a/code/__DEFINES/atmospherics.dm
+++ b/code/__DEFINES/atmospherics.dm
@@ -128,3 +128,6 @@
#define ATMOS_ALARM_NONE 0
#define ATMOS_ALARM_WARNING 1
#define ATMOS_ALARM_DANGER 2
+
+//LAVALAND
+#define LAVALAND_EQUIPMENT_EFFECT_PRESSURE 50 //what pressure you have to be under to increase the effect of equipment meant for lavaland
\ No newline at end of file
diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm
index abd9aeb5a03..3bb6b742a04 100644
--- a/code/__HELPERS/game.dm
+++ b/code/__HELPERS/game.dm
@@ -435,6 +435,17 @@
/proc/GetBluePart(const/hexa)
return hex2num(copytext(hexa, 6, 8))
+/proc/lavaland_equipment_pressure_check(turf/T)
+ . = FALSE
+ if(!istype(T))
+ return
+ var/datum/gas_mixture/environment = T.return_air()
+ if(!istype(environment))
+ return
+ var/pressure = environment.return_pressure()
+ if(pressure <= LAVALAND_EQUIPMENT_EFFECT_PRESSURE)
+ . = TRUE
+
/proc/GetHexColors(const/hexa)
return list(
GetRedPart(hexa),
diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm
index 4c1fb437046..f0ba75d5e10 100644
--- a/code/datums/uplink_item.dm
+++ b/code/datums/uplink_item.dm
@@ -207,6 +207,14 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
cost = 10
job = list("Mime")
+/datum/uplink_item/jobspecific/pressure_mod
+ name = "Kinetic Accelerator Pressure Mod"
+ desc = "A modification kit which allows Kinetic Accelerators to do greatly increased damage while indoors. Occupies 35% mod capacity."
+ reference = "KPM"
+ item = /obj/item/borg/upgrade/modkit/indoors
+ cost = 5 //you need two for full damage, so total of 10 for maximum damage
+ job = list("Shaft Miner")
+
//Chef
/datum/uplink_item/jobspecific/specialsauce
name = "Chef Excellence's Special Sauce"
diff --git a/code/game/jobs/job/support.dm b/code/game/jobs/job/support.dm
index 22c2d47e3b9..aac1c291355 100644
--- a/code/game/jobs/job/support.dm
+++ b/code/game/jobs/job/support.dm
@@ -175,23 +175,24 @@
name = "Shaft Miner"
jobtype = /datum/job/mining
- uniform = /obj/item/clothing/under/rank/miner/lavaland
- gloves = /obj/item/clothing/gloves/color/black
- shoes = /obj/item/clothing/shoes/workboots/mining
l_ear = /obj/item/radio/headset/headset_cargo/mining
- id = /obj/item/card/id/supply
+ shoes = /obj/item/clothing/shoes/workboots/mining
+ gloves = /obj/item/clothing/gloves/color/black
+ uniform = /obj/item/clothing/under/rank/miner/lavaland
l_pocket = /obj/item/reagent_containers/hypospray/autoinjector/survival
- r_pocket = /obj/item/flashlight/seclite
+ r_pocket = /obj/item/storage/bag/ore
+ id = /obj/item/card/id/supply
pda = /obj/item/pda/shaftminer
backpack_contents = list(
- /obj/item/storage/bag/ore=1,\
+ /obj/item/flashlight/seclite=1,\
/obj/item/kitchen/knife/combat/survival=1,\
/obj/item/mining_voucher=1,\
/obj/item/stack/marker_beacon/ten=1
)
-
+
backpack = /obj/item/storage/backpack/explorer
- satchel = /obj/item/storage/backpack/explorer
+ satchel = /obj/item/storage/backpack/satchel/explorer
+ box = /obj/item/storage/box/survival_mining
/datum/outfit/job/mining/equipped
name = "Shaft Miner"
@@ -210,9 +211,6 @@
/obj/item/stack/marker_beacon/ten=1
)
- backpack = /obj/item/storage/backpack/explorer
- satchel = /obj/item/storage/backpack/explorer
-
/datum/outfit/job/miner/equipped/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE)
..()
if(visualsOnly)
diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm
index 5b4a8143bef..8cce6cdcdfc 100644
--- a/code/game/mecha/working/ripley.dm
+++ b/code/game/mecha/working/ripley.dm
@@ -171,10 +171,8 @@
/obj/mecha/working/ripley/proc/update_pressure()
var/turf/T = get_turf(loc)
- var/datum/gas_mixture/environment = T.return_air()
- var/pressure = environment.return_pressure()
- if(pressure < 20)
+ if(lavaland_equipment_pressure_check(T))
step_in = 3
for(var/obj/item/mecha_parts/mecha_equipment/drill/drill in equipment)
drill.equip_cooldown = initial(drill.equip_cooldown)/2
diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm
index e7342774619..3fe5c140407 100644
--- a/code/game/objects/items/weapons/storage/boxes.dm
+++ b/code/game/objects/items/weapons/storage/boxes.dm
@@ -113,7 +113,7 @@
New()
..()
contents = list()
- new /obj/item/clothing/mask/breath(src)
+ new /obj/item/clothing/mask/gas/explorer(src)
new /obj/item/tank/emergency_oxygen/engi(src)
new /obj/item/crowbar/red(src)
new /obj/item/reagent_containers/hypospray/autoinjector(src)
@@ -372,6 +372,20 @@
new /obj/item/implantpad(src)
new /obj/item/locator(src)
+/obj/item/storage/box/minertracker
+ name = "boxed tracking implant kit"
+ desc = "For finding those who have died on the accursed lavaworld."
+ icon_state = "implant"
+
+/obj/item/storage/box/minertracker/New()
+ ..()
+ new /obj/item/implantcase/tracking(src)
+ new /obj/item/implantcase/tracking(src)
+ new /obj/item/implantcase/tracking(src)
+ new /obj/item/implanter(src)
+ new /obj/item/implantpad(src)
+ new /obj/item/locator(src)
+
/obj/item/storage/box/chemimp
name = "chemical implant kit"
desc = "Box of stuff used to implant chemicals."
diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm
index 1001a2aa514..c821bf84baa 100644
--- a/code/modules/mining/equipment_locker.dm
+++ b/code/modules/mining/equipment_locker.dm
@@ -400,54 +400,57 @@
density = 1
anchored = 1.0
var/obj/item/card/id/inserted_id
- var/list/prize_list = list(
- new /datum/data/mining_equipment("Stimpack", /obj/item/reagent_containers/hypospray/autoinjector/stimpack, 50),
- new /datum/data/mining_equipment("Teporone MediPen", /obj/item/reagent_containers/hypospray/autoinjector/teporone, 50),
- new /datum/data/mining_equipment("MediPen Bundle", /obj/item/storage/box/autoinjector/utility, 200),
- new /datum/data/mining_equipment("Whiskey", /obj/item/reagent_containers/food/drinks/bottle/whiskey, 100),
- new /datum/data/mining_equipment("Cigar", /obj/item/clothing/mask/cigarette/cigar/havana, 150),
- new /datum/data/mining_equipment("Soap", /obj/item/soap/nanotrasen, 200),
- new /datum/data/mining_equipment("Laser Pointer", /obj/item/laser_pointer, 300),
- new /datum/data/mining_equipment("Alien Toy", /obj/item/clothing/mask/facehugger/toy, 300),
- new /datum/data/mining_equipment("Advanced Scanner", /obj/item/t_scanner/adv_mining_scanner, 400),
- new /datum/data/mining_equipment("Hivelord Stabilizer", /obj/item/hivelordstabilizer, 400),
- new /datum/data/mining_equipment("Mining Drone", /obj/item/mining_drone_cube, 500),
- new /datum/data/mining_equipment("Drone Melee Upgrade", /obj/item/mine_bot_upgrade, 400),
- new /datum/data/mining_equipment("Drone Health Upgrade", /obj/item/mine_bot_upgrade/health, 400),
- new /datum/data/mining_equipment("Drone Ranged Upgrade", /obj/item/mine_bot_upgrade/cooldown, 600),
- new /datum/data/mining_equipment("Kinetic Crusher", /obj/item/twohanded/required/kinetic_crusher, 750),
- new /datum/data/mining_equipment("Shelter Capsule", /obj/item/survivalcapsule, 400),
- new /datum/data/mining_equipment("Luxury Shelter Capsule", /obj/item/survivalcapsule/luxury, 3000),
- new /datum/data/mining_equipment("Explorer\'s Webbing", /obj/item/storage/belt/mining, 500),
- 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/storage/firstaid/brute, 600),
- new /datum/data/mining_equipment("Jaunter", /obj/item/wormhole_jaunter, 600),
- new /datum/data/mining_equipment("Kinetic Accelerator", /obj/item/gun/energy/kinetic_accelerator, 750),
- new /datum/data/mining_equipment("Resonator", /obj/item/resonator, 800),
- new /datum/data/mining_equipment("Lazarus Injector", /obj/item/lazarus_injector, 1000),
- new /datum/data/mining_equipment("Silver Pickaxe", /obj/item/pickaxe/silver, 1000),
- new /datum/data/mining_equipment("Lazarus Capsule", /obj/item/mobcapsule, 800),
- new /datum/data/mining_equipment("Lazarus Capsule belt", /obj/item/storage/belt/lazarus, 200),
- new /datum/data/mining_equipment("Jetpack", /obj/item/tank/jetpack/carbondioxide/mining, 2000),
- new /datum/data/mining_equipment("Space Cash", /obj/item/stack/spacecash/c1000, 2000),
- new /datum/data/mining_equipment("Diamond Pickaxe", /obj/item/pickaxe/diamond, 2000),
- new /datum/data/mining_equipment("Super Resonator", /obj/item/resonator/upgraded, 2500),
- new /datum/data/mining_equipment("Jump Boots", /obj/item/clothing/shoes/bhop, 2500),
- new /datum/data/mining_equipment("Mining Hardsuit", /obj/item/storage/box/mininghardsuit, 2000),
- new /datum/data/mining_equipment("1 Marker Beacon", /obj/item/stack/marker_beacon, 10),
- new /datum/data/mining_equipment("10 Marker Beacons", /obj/item/stack/marker_beacon/ten, 100),
- new /datum/data/mining_equipment("30 Marker Beacons", /obj/item/stack/marker_beacon/thirty, 300),
- 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/card/mining_point_card, 500),
- new /datum/data/mining_equipment("Mining Conscription Kit", /obj/item/storage/backpack/duffel/mining_conscript, 1000),
+ var/list/prize_list = list( //if you add something to this, please, for the love of god, sort it by price/type. use tabs and not spaces.
+ new /datum/data/mining_equipment("1 Marker Beacon", /obj/item/stack/marker_beacon, 10),
+ new /datum/data/mining_equipment("10 Marker Beacons", /obj/item/stack/marker_beacon/ten, 100),
+ new /datum/data/mining_equipment("30 Marker Beacons", /obj/item/stack/marker_beacon/thirty, 300),
+ new /datum/data/mining_equipment("Whiskey", /obj/item/reagent_containers/food/drinks/bottle/whiskey, 100),
+ new /datum/data/mining_equipment("Absinthe", /obj/item/reagent_containers/food/drinks/bottle/absinthe/premium, 100),
+ new /datum/data/mining_equipment("Cigar", /obj/item/clothing/mask/cigarette/cigar/havana, 150),
+ new /datum/data/mining_equipment("Soap", /obj/item/soap/nanotrasen, 200),
+ new /datum/data/mining_equipment("Laser Pointer", /obj/item/laser_pointer, 300),
+ new /datum/data/mining_equipment("Alien Toy", /obj/item/clothing/mask/facehugger/toy, 300),
+ new /datum/data/mining_equipment("Stabilizing Serum", /obj/item/hivelordstabilizer, 400),
+ new /datum/data/mining_equipment("Space Cash", /obj/item/stack/spacecash/c1000, 2000),
+ new /datum/data/mining_equipment("Point Transfer Card", /obj/item/card/mining_point_card, 500),
+// new /datum/data/mining_equipment("Fulton Beacon", /obj/item/fulton_core, 400),
+ new /datum/data/mining_equipment("Shelter Capsule", /obj/item/survivalcapsule, 400),
+ new /datum/data/mining_equipment("GAR Meson Scanners", /obj/item/clothing/glasses/meson/gar, 500),
+ new /datum/data/mining_equipment("Explorer's Webbing", /obj/item/storage/belt/mining, 500),
+ new /datum/data/mining_equipment("Survival Medipen", /obj/item/reagent_containers/hypospray/autoinjector/survival, 500),
+ new /datum/data/mining_equipment("Brute First-Aid Kit", /obj/item/storage/firstaid/brute, 600),
+ new /datum/data/mining_equipment("Tracking Implant Kit", /obj/item/storage/box/minertracker, 600),
+ new /datum/data/mining_equipment("Jaunter", /obj/item/wormhole_jaunter, 750),
+ new /datum/data/mining_equipment("Kinetic Crusher", /obj/item/twohanded/required/kinetic_crusher, 750),
+ new /datum/data/mining_equipment("Kinetic Accelerator", /obj/item/gun/energy/kinetic_accelerator, 750),
+ new /datum/data/mining_equipment("Advanced Scanner", /obj/item/t_scanner/adv_mining_scanner, 800),
+ new /datum/data/mining_equipment("Resonator", /obj/item/resonator, 800),
+// new /datum/data/mining_equipment("Fulton Pack", /obj/item/extraction_pack, 1000),
+ new /datum/data/mining_equipment("Lazarus Injector", /obj/item/lazarus_injector, 1000),
+ new /datum/data/mining_equipment("Silver Pickaxe", /obj/item/pickaxe/silver, 1000),
+ new /datum/data/mining_equipment("Mining Conscription Kit", /obj/item/storage/backpack/duffel/mining_conscript, 1500),
+ new /datum/data/mining_equipment("Jetpack", /obj/item/tank/jetpack/carbondioxide/mining, 2000),
+ new /datum/data/mining_equipment("Mining Hardsuit", /obj/item/clothing/suit/space/hardsuit/mining, 2000),
+ new /datum/data/mining_equipment("Diamond Pickaxe", /obj/item/pickaxe/diamond, 2000),
+ new /datum/data/mining_equipment("Super Resonator", /obj/item/resonator/upgraded, 2500),
+ new /datum/data/mining_equipment("Jump Boots", /obj/item/clothing/shoes/bhop, 2500),
+ new /datum/data/mining_equipment("Luxury Shelter Capsule", /obj/item/survivalcapsule/luxury, 3000),
+ new /datum/data/mining_equipment("Nanotrasen Minebot", /obj/item/mining_drone_cube, 800),
+ new /datum/data/mining_equipment("Minebot Melee Upgrade", /obj/item/mine_bot_upgrade, 400),
+ new /datum/data/mining_equipment("Minebot Armor Upgrade", /obj/item/mine_bot_upgrade/health, 400),
+ new /datum/data/mining_equipment("Minebot Cooldown Upgrade", /obj/item/borg/upgrade/modkit/cooldown/minebot, 600),
+ new /datum/data/mining_equipment("Minebot AI Upgrade", /obj/item/slimepotion/sentience/mining, 1000),
+ new /datum/data/mining_equipment("KA Minebot Passthrough", /obj/item/borg/upgrade/modkit/minebot_passthrough, 100),
+ new /datum/data/mining_equipment("Lazarus Capsule", /obj/item/mobcapsule, 800),
+ new /datum/data/mining_equipment("Lazarus Capsule belt", /obj/item/storage/belt/lazarus, 200),
+ 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)
)
/obj/machinery/mineral/equipment_vendor/golem
@@ -599,16 +602,14 @@
..()
/obj/machinery/mineral/equipment_vendor/proc/RedeemVoucher(obj/item/mining_voucher/voucher, mob/redeemer)
- var/items = list("Kinetic Accelerator", "Survival Capsule and Explorer's Webbing", "Resonator Kit", "Minebot Kit", "Crusher Kit", "Mining Conscription Kit", "Advanced Scanner")
+ var/items = list("Survival Capsule and Explorer's Webbing", "Resonator Kit", "Minebot Kit", "Crusher Kit", "Mining Conscription Kit")
var/selection = input(redeemer, "Pick your equipment", "Mining Voucher Redemption") as null|anything in items
if(!selection || !Adjacent(redeemer) || QDELETED(voucher) || voucher.loc != redeemer)
return
- var/drop_location = loc
+ var/drop_location = drop_location()
switch(selection)
- if("Kinetic Accelerator")
- new /obj/item/gun/energy/kinetic_accelerator(drop_location)
if("Survival Capsule and Explorer's Webbing")
new /obj/item/storage/belt/mining(drop_location)
if("Resonator Kit")
@@ -618,13 +619,15 @@
new /obj/item/mining_drone_cube(drop_location)
new /obj/item/weldingtool/hugetank(drop_location)
new /obj/item/clothing/head/welding(drop_location)
+// if("Extraction and Rescue Kit")
+// new /obj/item/extraction_pack(drop_location)
+// new /obj/item/fulton_core(drop_location)
+// new /obj/item/stack/marker_beacon/thirty(drop_location)
if("Crusher Kit")
new /obj/item/extinguisher/mini(drop_location)
new /obj/item/twohanded/required/kinetic_crusher(drop_location)
if("Mining Conscription Kit")
new /obj/item/storage/backpack/duffel/mining_conscript(drop_location)
- if("Advanced Scanner")
- new /obj/item/t_scanner/adv_mining_scanner(drop_location)
qdel(voucher)
@@ -688,14 +691,16 @@
/obj/item/storage/backpack/duffel/mining_conscript/New()
..()
- new /obj/item/pickaxe(src)
new /obj/item/clothing/glasses/meson(src)
new /obj/item/t_scanner/adv_mining_scanner/lesser(src)
new /obj/item/storage/bag/ore(src)
- new /obj/item/clothing/under/rank/miner/lavaland(src)
+ new /obj/item/clothing/suit/hooded/explorer(src)
new /obj/item/encryptionkey/headset_cargo(src)
- new /obj/item/clothing/mask/gas(src)
+ new /obj/item/clothing/mask/gas/explorer(src)
new /obj/item/card/id/mining_access_card(src)
+ new /obj/item/gun/energy/kinetic_accelerator(src)
+ new /obj/item/kitchen/knife/combat/survival(src)
+ new /obj/item/flashlight/seclite(src)
/**********************Jaunter**********************/
@@ -786,30 +791,20 @@
origin_tech = "magnets=3;engineering=3"
desc = "A handheld device that creates small fields of energy that resonate until they detonate, crushing rock. It can also be activated without a target to create a field at the user's location, to act as a delayed time trap. It's more effective in a vaccuum."
w_class = WEIGHT_CLASS_NORMAL
- force = 8
+ force = 15
throwforce = 10
- var/cooldown = 0
- var/fieldsactive = 0
- var/burst_time = 50
- var/fieldlimit = 3
+ var/burst_time = 30
+ var/fieldlimit = 4
+ var/list/fields = list()
+ var/quick_burst_mod = 0.8
/obj/item/resonator/upgraded
name = "upgraded resonator"
desc = "An upgraded version of the resonator that can produce more fields at once."
icon_state = "resonator_u"
origin_tech = "materials=4;powerstorage=3;engineering=3;magnets=3"
- fieldlimit = 5
-
-/obj/item/resonator/proc/CreateResonance(var/target, var/creator)
- var/turf/T = get_turf(target)
- if(locate(/obj/effect/resonance) in T)
- return
- if(fieldsactive < fieldlimit)
- playsound(src,'sound/weapons/resonator_fire.ogg',50,1)
- new /obj/effect/resonance(T, creator, burst_time)
- fieldsactive++
- spawn(burst_time)
- fieldsactive--
+ fieldlimit = 6
+ quick_burst_mod = 1
/obj/item/resonator/attack_self(mob/user)
if(burst_time == 50)
@@ -819,48 +814,88 @@
burst_time = 50
to_chat(user, "You set the resonator's fields to detonate after 5 seconds.")
-/obj/item/resonator/afterattack(atom/target, mob/user, proximity_flag)
- if(proximity_flag)
- if(!check_allowed_items(target, 1)) return
- CreateResonance(target, user)
+/obj/item/resonator/proc/CreateResonance(target, mob/user)
+ var/turf/T = get_turf(target)
+ var/obj/effect/temp_visual/resonance/R = locate(/obj/effect/temp_visual/resonance) in T
+ if(R)
+ R.damage_multiplier = quick_burst_mod
+ R.burst()
+ return
+ if(LAZYLEN(fields) < fieldlimit)
+ new /obj/effect/temp_visual/resonance(T, user, src, burst_time)
+ user.changeNext_move(CLICK_CD_MELEE)
-/obj/effect/resonance
+/obj/item/resonator/pre_attackby(atom/target, mob/user, params)
+ if(check_allowed_items(target, 1))
+ CreateResonance(target, user)
+ return TRUE
+
+/obj/effect/temp_visual/resonance
name = "resonance field"
- desc = "A resonating field that significantly damages anything inside of it when the field eventually ruptures."
+ desc = "A resonating field that significantly damages anything inside of it when the field eventually ruptures. More damaging in low pressure environments."
icon = 'icons/effects/effects.dmi'
icon_state = "shield1"
- layer = 4.1
- mouse_opacity = MOUSE_OPACITY_TRANSPARENT
+ duration = 50
var/resonance_damage = 20
+ var/damage_multiplier = 1
+ var/creator
+ var/obj/item/resonator/res
-/obj/effect/resonance/New(loc, var/creator = null, var/timetoburst)
- var/turf/proj_turf = get_turf(src)
- if(!istype(proj_turf))
- return
- if(istype(proj_turf, /turf/simulated/mineral))
- var/turf/simulated/mineral/M = proj_turf
- spawn(timetoburst)
- playsound(src,'sound/weapons/resonator_blast.ogg',50,1)
- M.gets_drilled(creator)
- qdel(src)
+/obj/effect/temp_visual/resonance/New(loc, set_creator, set_resonator, set_duration)
+ duration = set_duration
+ . = ..()
+ creator = set_creator
+ res = set_resonator
+ if(res)
+ res.fields += src
+ playsound(src,'sound/weapons/resonator_fire.ogg',50,1)
+ transform = matrix() * 0.75
+ animate(src, transform = matrix() * 1.5, time = duration)
+ deltimer(timerid)
+ timerid = addtimer(CALLBACK(src, .proc/burst), duration, TIMER_STOPPABLE)
+
+/obj/effect/temp_visual/resonance/Destroy()
+ if(res)
+ res.fields -= src
+ res = null
+ creator = null
+ return ..()
+
+/obj/effect/temp_visual/resonance/proc/check_pressure(turf/proj_turf)
+ if(!proj_turf)
+ proj_turf = get_turf(src)
+ resonance_damage = initial(resonance_damage)
+ if(lavaland_equipment_pressure_check(proj_turf))
+ name = "strong [initial(name)]"
+ resonance_damage *= 3
else
- var/datum/gas_mixture/environment = proj_turf.return_air()
- var/pressure = environment.return_pressure()
- if(pressure < 50)
- name = "strong resonance field"
- resonance_damage = 50
- spawn(timetoburst)
- playsound(src,'sound/weapons/resonator_blast.ogg',50,1)
- if(creator)
- for(var/mob/living/L in src.loc)
- add_attack_logs(creator, L, "Resonance field'ed")
- to_chat(L, "The [src.name] ruptured with you in it!")
- L.adjustBruteLoss(resonance_damage)
- else
- for(var/mob/living/L in src.loc)
- to_chat(L, "The [src.name] ruptured with you in it!")
- L.adjustBruteLoss(resonance_damage)
- qdel(src)
+ name = initial(name)
+ resonance_damage *= damage_multiplier
+
+/obj/effect/temp_visual/resonance/proc/burst()
+ var/turf/T = get_turf(src)
+ new /obj/effect/temp_visual/resonance_crush(T)
+ if(ismineralturf(T))
+ var/turf/simulated/mineral/M = T
+ M.gets_drilled(creator)
+ check_pressure(T)
+ playsound(T,'sound/weapons/resonator_blast.ogg',50,1)
+ for(var/mob/living/L in T)
+ if(creator)
+ add_attack_logs(creator, L, "Resonance field'ed")
+ to_chat(L, "[src] ruptured with you in it!")
+ L.apply_damage(resonance_damage, BRUTE)
+ qdel(src)
+
+/obj/effect/temp_visual/resonance_crush
+ icon_state = "shield1"
+ layer = ABOVE_ALL_MOB_LAYER
+ duration = 4
+
+/obj/effect/temp_visual/resonance_crush/New()
+ ..()
+ transform = matrix()*1.5
+ animate(src, transform = matrix() * 0.1, alpha = 50, time = 4)
/**********************Facehugger toy**********************/
@@ -1212,4 +1247,4 @@
if(!charged)
charged = 1
icon_state = "mining_hammer1"
- playsound(loc, 'sound/weapons/kenetic_reload.ogg', 60, 1)
+ playsound(loc, 'sound/weapons/kenetic_reload.ogg', 60, 1)
\ No newline at end of file
diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm
index 7eed5577aeb..76f4637473a 100644
--- a/code/modules/mining/lavaland/necropolis_chests.dm
+++ b/code/modules/mining/lavaland/necropolis_chests.dm
@@ -8,18 +8,18 @@
icon_closed = "necrocrate"
burn_state = LAVA_PROOF | FIRE_PROOF
unacidable = 1
-
+
/obj/structure/closet/crate/necropolis/tendril
desc = "It's watching you suspiciously."
/obj/structure/closet/crate/necropolis/tendril/New(add_loot = TRUE)
..()
-
+
if(!add_loot)
return
- var/loot = rand(1,24)
- switch(loot)
+ var/loot = rand(1,25)
+ switch(loot)
if(1)
new /obj/item/shared_storage/red(src)
if(2)
@@ -37,7 +37,10 @@
new /obj/item/clothing/suit/hooded/cultrobes(src)
new /obj/item/bedsheet/cult(src)
if(8)
- new /obj/item/organ/internal/brain/xeno(src)
+ if(prob(50))
+ new /obj/item/disk/design_disk/modkit_disc/resonator_blast(src)
+ else
+ new /obj/item/disk/design_disk/modkit_disc/rapid_repeater(src)
if(9)
new /obj/item/organ/internal/heart/cursed/wizard(src)
if(10)
@@ -54,7 +57,7 @@
if(15)
new /obj/item/guardiancreator(src)
if(16)
- new /obj/item/borg/upgrade/modkit/aoe/turfs/andmobs(src)
+ new /obj/item/disk/design_disk/modkit_disc/mob_and_turf_aoe(src)
if(17)
new /obj/item/warp_cube/red(src)
if(18)
@@ -73,6 +76,9 @@
new /obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor(src)
if(24)
new /obj/item/spellbook/oneuse/summonitem(src)
+ if(25)
+ new /obj/item/borg/upgrade/modkit/lifesteal(src)
+ new /obj/item/bedsheet/cult(src)
/obj/structure/closet/crate/necropolis/puzzle
name = "puzzling chest"
@@ -88,3 +94,51 @@
new /obj/item/wisp_lantern(src)
if(3)
new /obj/item/prisoncube(src)
+
+//KA modkit design discs
+/obj/item/disk/design_disk/modkit_disc
+ name = "KA Mod Disk"
+ desc = "A design disc containing the design for a unique kinetic accelerator modkit. It's compatible with a research console."
+ icon_state = "datadisk1"
+ var/modkit_design = /datum/design/unique_modkit
+
+/obj/item/disk/design_disk/modkit_disc/New()
+ . = ..()
+ blueprint = new modkit_design
+
+/obj/item/disk/design_disk/modkit_disc/mob_and_turf_aoe
+ name = "Offensive Mining Explosion Mod Disk"
+ modkit_design = /datum/design/unique_modkit/offensive_turf_aoe
+
+/obj/item/disk/design_disk/modkit_disc/rapid_repeater
+ name = "Rapid Repeater Mod Disk"
+ modkit_design = /datum/design/unique_modkit/rapid_repeater
+
+/obj/item/disk/design_disk/modkit_disc/resonator_blast
+ name = "Resonator Blast Mod Disk"
+ modkit_design = /datum/design/unique_modkit/resonator_blast
+
+/datum/design/unique_modkit
+ category = list("Mining", "Cyborg Upgrade Modules") //can't be normally obtained
+ build_type = PROTOLATHE | MECHFAB
+
+/datum/design/unique_modkit/offensive_turf_aoe
+ name = "Kinetic Accelerator Offensive Mining Explosion Mod"
+ desc = "A device which causes kinetic accelerators to fire AoE blasts that destroy rock and damage creatures."
+ id = "hyperaoemod"
+ materials = list(MAT_METAL = 7000, MAT_GLASS = 3000, MAT_SILVER= 3000, MAT_GOLD = 3000, MAT_DIAMOND = 4000)
+ build_path = /obj/item/borg/upgrade/modkit/aoe/turfs/andmobs
+
+/datum/design/unique_modkit/rapid_repeater
+ name = "Kinetic Accelerator Rapid Repeater Mod"
+ desc = "A device which greatly reduces a kinetic accelerator's cooldown on striking a living target or rock, but greatly increases its base cooldown."
+ id = "repeatermod"
+ materials = list(MAT_METAL = 5000, MAT_GLASS = 5000, MAT_URANIUM = 8000, MAT_BLUESPACE = 2000)
+ build_path = /obj/item/borg/upgrade/modkit/cooldown/repeater
+
+/datum/design/unique_modkit/resonator_blast
+ name = "Kinetic Accelerator Resonator Blast Mod"
+ desc = "A device which causes kinetic accelerators to fire shots that leave and detonate resonator blasts."
+ id = "resonatormod"
+ materials = list(MAT_METAL = 5000, MAT_GLASS = 5000, MAT_SILVER= 5000, MAT_URANIUM = 5000)
+ build_path = /obj/item/borg/upgrade/modkit/resonator_blasts
\ No newline at end of file
diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm
index f10b78dc526..87b919ea238 100644
--- a/code/modules/mining/mine_items.dm
+++ b/code/modules/mining/mine_items.dm
@@ -17,35 +17,20 @@
icon_closed = "mixed"
/obj/structure/closet/wardrobe/miner/New()
- ..()
- contents = list()
- new /obj/item/storage/backpack/duffel(src)
- new /obj/item/storage/backpack/industrial(src)
- new /obj/item/storage/backpack/satchel_eng(src)
- new /obj/item/clothing/under/rank/miner(src)
- new /obj/item/clothing/under/rank/miner(src)
- new /obj/item/clothing/under/rank/miner(src)
- new /obj/item/clothing/shoes/workboots(src)
- new /obj/item/clothing/shoes/workboots(src)
- new /obj/item/clothing/shoes/workboots(src)
- new /obj/item/clothing/gloves/fingerless(src)
- new /obj/item/clothing/gloves/fingerless(src)
- new /obj/item/clothing/gloves/fingerless(src)
-
-/obj/structure/closet/wardrobe/miner/lavaland
-
-/obj/structure/closet/wardrobe/miner/lavaland/New()
..()
contents = list()
new /obj/item/storage/backpack/duffel(src)
new /obj/item/storage/backpack/explorer(src)
- new /obj/item/storage/backpack/explorer(src)
+ new /obj/item/storage/backpack/satchel/explorer(src)
new /obj/item/clothing/under/rank/miner/lavaland(src)
new /obj/item/clothing/under/rank/miner/lavaland(src)
new /obj/item/clothing/under/rank/miner/lavaland(src)
new /obj/item/clothing/shoes/workboots/mining(src)
new /obj/item/clothing/shoes/workboots/mining(src)
new /obj/item/clothing/shoes/workboots/mining(src)
+ new /obj/item/clothing/gloves/color/black(src)
+ new /obj/item/clothing/gloves/color/black(src)
+ new /obj/item/clothing/gloves/color/black(src)
/obj/structure/closet/secure_closet/miner
name = "miner's equipment"
@@ -59,14 +44,18 @@
/obj/structure/closet/secure_closet/miner/New()
..()
+// new /obj/item/stack/sheet/mineral/sandbags(src, 5)
+// new /obj/item/storage/box/emptysandbags(src)
new /obj/item/shovel(src)
- new /obj/item/pickaxe(src)
+ new /obj/item/pickaxe/mini(src)
new /obj/item/radio/headset/headset_cargo/mining(src)
- new /obj/item/t_scanner/adv_mining_scanner/lesser(src)
+ new /obj/item/flashlight/seclite(src)
+ new /obj/item/storage/bag/plants(src)
new /obj/item/storage/bag/ore(src)
+ new /obj/item/t_scanner/adv_mining_scanner/lesser(src)
+ new /obj/item/gun/energy/kinetic_accelerator(src)
new /obj/item/clothing/glasses/meson(src)
new /obj/item/survivalcapsule(src)
- new /obj/item/stack/marker_beacon/ten
/**********************Shuttle Computer**************************/
@@ -122,6 +111,15 @@
throwforce = 1
attack_verb = list("ineffectively hit")
+/obj/item/pickaxe/mini
+ name = "compact pickaxe"
+ desc = "A smaller, compact version of the standard pickaxe."
+ icon_state = "minipick"
+ force = 10
+ throwforce = 7
+ w_class = WEIGHT_CLASS_NORMAL
+ materials = list(MAT_METAL = 1000)
+
/obj/item/pickaxe/silver
name = "silver-plated pickaxe"
icon_state = "spickaxe"
diff --git a/code/modules/mining/minebot.dm b/code/modules/mining/minebot.dm
index 5b20aad5047..2ff2a686439 100644
--- a/code/modules/mining/minebot.dm
+++ b/code/modules/mining/minebot.dm
@@ -5,6 +5,7 @@
/mob/living/simple_animal/hostile/mining_drone
name = "nanotrasen minebot"
desc = "The instructions printed on the side read: This is a small robot used to support miners, can be set to search and collect loose ore, or to help fend off wildlife. A mining scanner can instruct it to drop loose ore. Field repairs can be done with a welder."
+ gender = NEUTER
icon = 'icons/obj/aibots.dmi'
icon_state = "mining_drone"
icon_living = "mining_drone"
@@ -14,36 +15,31 @@
a_intent = INTENT_HARM
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
- wander = 0
idle_vision_range = 5
move_to_delay = 10
- retreat_distance = 1
- minimum_distance = 2
health = 125
maxHealth = 125
melee_damage_lower = 15
melee_damage_upper = 15
- obj_damage = 0
+ obj_damage = 10
environment_smash = 0
- check_friendly_fire = 1
- stop_automated_movement_when_pulled = 1
+ check_friendly_fire = TRUE
+ stop_automated_movement_when_pulled = TRUE
attacktext = "drills"
attack_sound = 'sound/weapons/circsawhit.ogg'
- ranged = 1
sentience_type = SENTIENCE_MINEBOT
- ranged_message = "shoots"
- ranged_cooldown_time = 30
- projectiletype = /obj/item/projectile/kinetic
- projectilesound = 'sound/weapons/gunshots/gunshot4.ogg'
speak_emote = list("states")
wanted_objects = list(/obj/item/stack/ore/diamond, /obj/item/stack/ore/gold, /obj/item/stack/ore/silver,
/obj/item/stack/ore/plasma, /obj/item/stack/ore/uranium, /obj/item/stack/ore/iron,
/obj/item/stack/ore/bananium, /obj/item/stack/ore/tranquillite, /obj/item/stack/ore/glass,
/obj/item/stack/ore/titanium)
healable = 0
+ loot = list(/obj/effect/decal/cleanable/robot_debris)
+ del_on_death = TRUE
var/mode = MINEDRONE_COLLECT
var/light_on = 0
var/mesons_active
+ var/obj/item/gun/energy/kinetic_accelerator/minebot/stored_gun
var/datum/action/innate/minedrone/toggle_light/toggle_light_action
var/datum/action/innate/minedrone/toggle_meson_vision/toggle_meson_vision_action
@@ -52,6 +48,8 @@
/mob/living/simple_animal/hostile/mining_drone/New()
..()
+ stored_gun = new(src)
+ zone_sel = new /obj/screen/zone_sel(src) //Gross, but necessary TO-DO; remove this.
toggle_light_action = new()
toggle_light_action.Grant(src)
toggle_meson_vision_action = new()
@@ -72,8 +70,27 @@
..()
check_friendly_fire = 0
+/mob/living/simple_animal/hostile/mining_drone/examine(mob/user)
+ . = ..()
+ var/t_He = p_they(TRUE)
+ var/t_him = p_them()
+ var/t_s = p_s()
+ if(health < maxHealth)
+ if(health >= maxHealth * 0.5)
+ . += "[t_He] look[t_s] slightly dented."
+ else
+ . += "[t_He] look[t_s] severely dented!"
+ . += {"Using a mining scanner on [t_him] will instruct [t_him] to drop stored ore. [max(0, LAZYLEN(contents) - 1)] Stored Ore\n
+ Field repairs can be done with a welder."}
+ if(stored_gun && stored_gun.max_mod_capacity)
+ . += "[stored_gun.get_remaining_mod_capacity()]% mod capacity remaining."
+ for(var/A in stored_gun.get_modkits())
+ var/obj/item/borg/upgrade/modkit/M = A
+ . += "There is \a [M] installed, using [M.cost]% capacity."
+
+
/mob/living/simple_animal/hostile/mining_drone/attackby(obj/item/I, mob/user, params)
- if(istype(I, /obj/item/weldingtool) && user.a_intent == INTENT_HELP)
+ if(iswelder(I) && user.a_intent == INTENT_HELP)
var/obj/item/weldingtool/W = I
if(W.welding && !stat)
if(AIStatus != AI_OFF && AIStatus != AI_IDLE)
@@ -90,29 +107,18 @@
to_chat(user, "You instruct [src] to drop any collected ore.")
DropOre()
return
+ if(iscrowbar(I) || istype(I, /obj/item/borg/upgrade/modkit))
+ I.melee_attack_chain(user, stored_gun, params)
+ return
..()
/mob/living/simple_animal/hostile/mining_drone/death()
- // Only execute the below if we successfully died
- . = ..()
- if(!.)
- return FALSE
- visible_message("[src] is destroyed!")
- new /obj/effect/decal/cleanable/blood/gibs/robot(loc)
DropOre(0)
- qdel(src)
-
-/mob/living/simple_animal/hostile/mining_drone/Shoot(atom/targeted_atom)
- var/obj/item/projectile/kinetic/K = ..()
- var/turf/proj_turf = get_turf(K)
- if(!isturf(proj_turf))
- return
- var/datum/gas_mixture/environment = proj_turf.return_air()
- var/pressure = environment.return_pressure()
- if(pressure > 50)
- K.name = "weakened [K.name]"
-
- K.damage *= K.pressure_decrease
+ if(stored_gun)
+ for(var/obj/item/borg/upgrade/modkit/M in stored_gun.modkits)
+ M.uninstall(stored_gun)
+ deathmessage = "blows apart!"
+ . = ..()
/mob/living/simple_animal/hostile/mining_drone/attack_hand(mob/living/carbon/human/M)
if(M.a_intent == INTENT_HELP)
@@ -125,12 +131,24 @@
return
..()
+/mob/living/simple_animal/hostile/mining_drone/CanPass(atom/movable/O)
+ if(istype(O, /obj/item/projectile/kinetic))
+ var/obj/item/projectile/kinetic/K = O
+ if(K.kinetic_gun)
+ for(var/A in K.kinetic_gun.get_modkits())
+ var/obj/item/borg/upgrade/modkit/M = A
+ if(istype(M, /obj/item/borg/upgrade/modkit/minebot_passthrough))
+ return TRUE
+ if(istype(O, /obj/item/projectile/destabilizer))
+ return TRUE
+ return ..()
+
/mob/living/simple_animal/hostile/mining_drone/proc/SetCollectBehavior()
mode = MINEDRONE_COLLECT
idle_vision_range = 9
search_objects = 2
- wander = 1
- ranged = 0
+ wander = TRUE
+ ranged = FALSE
minimum_distance = 1
retreat_distance = null
icon_state = "mining_drone"
@@ -140,18 +158,25 @@
mode = MINEDRONE_ATTACK
idle_vision_range = 7
search_objects = 0
- wander = 0
- ranged = 1
- retreat_distance = 1
- minimum_distance = 2
+ wander = FALSE
+ ranged = TRUE
+ retreat_distance = 2
+ minimum_distance = 1
icon_state = "mining_drone_offense"
to_chat(src, "You are set to attack mode. You can now attack from range.")
/mob/living/simple_animal/hostile/mining_drone/AttackingTarget()
- if(istype(target, /obj/item/stack/ore) && mode == MINEDRONE_COLLECT)
+ if(istype(target, /obj/item/stack/ore) && mode == MINEDRONE_COLLECT)
CollectOre()
return
- ..()
+ if(isliving(target))
+ SetOffenseBehavior()
+ return ..()
+
+/mob/living/simple_animal/hostile/mining_drone/OpenFire(atom/A)
+ if(CheckFriendlyFire(A))
+ return
+ stored_gun.afterattack(A, src) //of the possible options to allow minebots to have KA mods, would you believe this is the best?
/mob/living/simple_animal/hostile/mining_drone/proc/CollectOre()
for(var/obj/item/stack/ore/O in range(1, src))
@@ -160,14 +185,12 @@
/mob/living/simple_animal/hostile/mining_drone/proc/DropOre(message = 1)
if(!contents.len)
if(message)
- to_chat(src, "You attempt to dump your stored ore, but you have none.")
+ to_chat(src, "You attempt to dump your stored ore, but you have none.")
return
if(message)
to_chat(src, "You dump your stored ore.")
for(var/obj/item/stack/ore/O in contents)
- contents -= O
- O.forceMove(loc)
- return
+ O.forceMove(drop_location())
/mob/living/simple_animal/hostile/mining_drone/adjustHealth(amount)
if(mode != MINEDRONE_ATTACK && amount > 0)
@@ -176,13 +199,10 @@
/mob/living/simple_animal/hostile/mining_drone/proc/toggle_mode()
switch(mode)
- if(MINEDRONE_COLLECT)
- SetOffenseBehavior()
if(MINEDRONE_ATTACK)
SetCollectBehavior()
- else //This should never happen.
- mode = MINEDRONE_COLLECT
- SetCollectBehavior()
+ else
+ SetOffenseBehavior()
//Actions for sentient minebots
@@ -264,41 +284,24 @@
if(M.melee_damage_upper != initial(M.melee_damage_upper))
to_chat(user, "[M] already has a combat upgrade installed!")
return
- M.melee_damage_lower = 22
- M.melee_damage_upper = 22
+ M.melee_damage_lower += 7
+ M.melee_damage_upper += 7
to_chat(user, "You upgrade [M]'s combat module.")
qdel(src)
//Health
/obj/item/mine_bot_upgrade/health
- name = "minebot chassis upgrade"
+ name = "minebot armor upgrade"
/obj/item/mine_bot_upgrade/health/upgrade_bot(mob/living/simple_animal/hostile/mining_drone/M, mob/user)
if(M.maxHealth != initial(M.maxHealth))
to_chat(user, "[M] already has a reinforced chassis!")
return
- var/previous = M.maxHealth
- M.maxHealth = 170
- M.health += M.maxHealth - previous
- to_chat(user, "You reinforce [M]'s chassis.")
+ M.maxHealth += 45
+ M.updatehealth()
qdel(src)
-
-//Cooldown
-
-/obj/item/mine_bot_upgrade/cooldown
- name = "minebot cooldown upgrade"
-
-/obj/item/mine_bot_upgrade/cooldown/upgrade_bot(mob/living/simple_animal/hostile/mining_drone/M, mob/user)
- if(M.ranged_cooldown_time != initial(M.ranged_cooldown_time))
- to_chat(user, "[M] already has a decreased weapon cooldown!")
- return
- M.ranged_cooldown_time = 10
- to_chat(user, "You upgrade [M]'s ranged weaponry, reducing its cooldown.")
- qdel(src)
-
-
//AI
/obj/item/slimepotion/sentience/mining
name = "minebot AI upgrade"
@@ -307,6 +310,20 @@
icon = 'icons/obj/doors/door_assembly.dmi'
sentience_type = SENTIENCE_MINEBOT
origin_tech = "programming=6"
+ var/base_health_add = 5 //sentient minebots are penalized for beign sentient; they have their stats reset to normal plus these values
+ var/base_damage_add = 1 //this thus disables other minebot upgrades
+ var/base_speed_add = 1
+ var/base_cooldown_add = 10 //base cooldown isn't reset to normal, it's just added on, since it's not practical to disable the cooldown module
+
+/obj/item/slimepotion/sentience/mining/after_success(mob/living/user, mob/living/simple_animal/SM)
+ if(istype(SM, /mob/living/simple_animal/hostile/mining_drone))
+ var/mob/living/simple_animal/hostile/mining_drone/M = SM
+ M.maxHealth = initial(M.maxHealth) + base_health_add
+ M.melee_damage_lower = initial(M.melee_damage_lower) + base_damage_add
+ M.melee_damage_upper = initial(M.melee_damage_upper) + base_damage_add
+ M.move_to_delay = initial(M.move_to_delay) + base_speed_add
+ if(M.stored_gun)
+ M.stored_gun.overheat_time += base_cooldown_add
#undef MINEDRONE_COLLECT
#undef MINEDRONE_ATTACK
diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm
index afca9ad8798..4f2323e2025 100644
--- a/code/modules/mob/living/damage_procs.dm
+++ b/code/modules/mob/living/damage_procs.dm
@@ -44,6 +44,22 @@
if(BRAIN)
return adjustBrainLoss(damage)
+/mob/living/proc/get_damage_amount(damagetype = BRUTE)
+ switch(damagetype)
+ if(BRUTE)
+ return getBruteLoss()
+ if(BURN)
+ return getFireLoss()
+ if(TOX)
+ return getToxLoss()
+ if(OXY)
+ return getOxyLoss()
+ if(CLONE)
+ return getCloneLoss()
+ if(STAMINA)
+ return getStaminaLoss()
+
+
/mob/living/proc/apply_damages(var/brute = 0, var/burn = 0, var/tox = 0, var/oxy = 0, var/clone = 0, var/def_zone = null, var/blocked = 0, var/stamina = 0)
if(blocked >= 100) return 0
if(brute) apply_damage(brute, BRUTE, def_zone, blocked)
@@ -309,4 +325,16 @@
updatehealth("take overall damage")
/mob/living/proc/has_organic_damage()
- return (maxHealth - health)
\ No newline at end of file
+ return (maxHealth - health)
+
+//heal up to amount damage, in a given order
+/mob/living/proc/heal_ordered_damage(amount, list/damage_types)
+ . = amount //we'll return the amount of damage healed
+ for(var/i in damage_types)
+ var/amount_to_heal = min(amount, get_damage_amount(i)) //heal only up to the amount of damage we have
+ if(amount_to_heal)
+ apply_damage_type(-amount_to_heal, i)
+ amount -= amount_to_heal //remove what we healed from our current amount
+ if(!amount)
+ break
+ . -= amount //if there's leftover healing, remove it from what we return
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm
index 9c787639ba4..a96c78d09d6 100644
--- a/code/modules/mob/living/simple_animal/hostile/hostile.dm
+++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm
@@ -309,14 +309,18 @@
else
M.Goto(src,M.move_to_delay,M.minimum_distance)
-/mob/living/simple_animal/hostile/proc/OpenFire(atom/A)
+/mob/living/simple_animal/hostile/proc/CheckFriendlyFire(atom/A)
if(check_friendly_fire)
for(var/turf/T in getline(src,A)) // Not 100% reliable but this is faster than simulating actual trajectory
for(var/mob/living/L in T)
if(L == src || L == A)
continue
- if(faction_check(L) && !attack_same)
- return
+ if(faction_check_mob(L) && !attack_same)
+ return TRUE
+
+/mob/living/simple_animal/hostile/proc/OpenFire(atom/A)
+ if(CheckFriendlyFire(A))
+ return
visible_message("[src] [ranged_message] at [A]!")
if(rapid)
diff --git a/code/modules/projectiles/firing.dm b/code/modules/projectiles/firing.dm
index 9d16a9c2123..c2333da9107 100644
--- a/code/modules/projectiles/firing.dm
+++ b/code/modules/projectiles/firing.dm
@@ -40,14 +40,16 @@
if(!istype(targloc) || !istype(curloc) || !BB)
return 0
BB.ammo_casing = src
-
+
if(target && get_dist(user, target) <= 1) //Point blank shot must always hit
+ BB.prehit(target)
target.bullet_act(BB, BB.def_zone)
QDEL_NULL(BB)
return 1
if(targloc == curloc)
if(target) //if the target is right on our location we go straight to bullet_act()
+ BB.prehit(target)
target.bullet_act(BB, BB.def_zone)
QDEL_NULL(BB)
return 1
diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm
index fa483903012..4662062a56e 100644
--- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm
+++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm
@@ -20,6 +20,8 @@
var/max_mod_capacity = 100
var/list/modkits = list()
+ var/recharge_timerid
+
var/empty_state = "kineticgun_empty"
/obj/item/gun/energy/kinetic_accelerator/examine(mob/user)
@@ -30,20 +32,20 @@
var/obj/item/borg/upgrade/modkit/M = A
to_chat(user, "There is a [M.name] mod installed, using [M.cost]% capacity.")
-/obj/item/gun/energy/kinetic_accelerator/attackby(obj/item/A, mob/user)
- if(istype(A, /obj/item/crowbar))
+/obj/item/gun/energy/kinetic_accelerator/attackby(obj/item/I, mob/user)
+ if(iscrowbar(I))
if(modkits.len)
to_chat(user, "You pry the modifications out.")
- playsound(loc, A.usesound, 100, 1)
+ playsound(loc, I.usesound, 100, 1)
for(var/obj/item/borg/upgrade/modkit/M in modkits)
M.uninstall(src)
else
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
+ else if(istype(I, /obj/item/borg/upgrade/modkit))
+ var/obj/item/borg/upgrade/modkit/MK = I
MK.install(src, user)
else
- ..()
+ return ..()
/obj/item/gun/energy/kinetic_accelerator/proc/get_remaining_mod_capacity()
var/current_capacity_used = 0
@@ -58,6 +60,7 @@
. += A
/obj/item/gun/energy/kinetic_accelerator/proc/modify_projectile(obj/item/projectile/kinetic/K)
+ K.kinetic_gun = src //do something special on-hit, easy!
for(var/A in get_modkits())
var/obj/item/borg/upgrade/modkit/M = A
M.modify_projectile(K)
@@ -67,6 +70,12 @@
unique_frequency = TRUE
max_mod_capacity = 80
+/obj/item/gun/energy/kinetic_accelerator/minebot
+ trigger_guard = TRIGGER_GUARD_ALLOW_ALL
+ overheat_time = 20
+ holds_charge = TRUE
+ unique_frequency = TRUE
+
/obj/item/gun/energy/kinetic_accelerator/New()
. = ..()
if(!holds_charge)
@@ -83,7 +92,7 @@
/obj/item/gun/energy/kinetic_accelerator/dropped()
. = ..()
- if(!holds_charge)
+ if(!QDELING(src) && !holds_charge)
// Put it on a delay because moving item from slot to hand
// calls dropped().
spawn(2)
@@ -97,24 +106,25 @@
power_supply.use(500)
update_icon()
-/obj/item/gun/energy/kinetic_accelerator/proc/attempt_reload()
+/obj/item/gun/energy/kinetic_accelerator/proc/attempt_reload(recharge_time)
if(overheat)
return
+ if(!recharge_time)
+ recharge_time = overheat_time
overheat = TRUE
var/carried = 0
if(!unique_frequency)
- for(var/obj/item/gun/energy/kinetic_accelerator/K in \
- loc.GetAllContents())
-
- carried++
+ for(var/obj/item/gun/energy/kinetic_accelerator/K in loc.GetAllContents())
+ if(!K.unique_frequency)
+ carried++
carried = max(carried, 1)
else
carried = 1
- spawn(overheat_time * carried)
- reload()
+ deltimer(recharge_timerid)
+ recharge_timerid = addtimer(CALLBACK(src, .proc/reload), recharge_time * carried, TIMER_STOPPABLE)
/obj/item/gun/energy/kinetic_accelerator/emp_act(severity)
return
@@ -161,16 +171,6 @@
var/obj/item/gun/energy/kinetic_accelerator/KA = loc
KA.modify_projectile(BB)
- 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
@@ -181,10 +181,9 @@
flag = "bomb"
range = 3
+ var/pressure_decrease_active = FALSE
var/pressure_decrease = 0.25
- var/turf_aoe = FALSE
- var/mob_aoe = FALSE
- var/list/hit_overlays = list()
+ var/obj/item/gun/energy/kinetic_accelerator/kinetic_gun
/obj/item/projectile/kinetic/pod
range = 4
@@ -193,9 +192,22 @@
damage = 50
pressure_decrease = 0.5
-/obj/item/projectile/kinetic/pod/enhanced
- turf_aoe = TRUE
- mob_aoe = TRUE
+/obj/item/projectile/kinetic/Destroy()
+ kinetic_gun = null
+ return ..()
+
+/obj/item/projectile/kinetic/prehit(atom/target)
+ . = ..()
+ if(.)
+ if(kinetic_gun)
+ var/list/mods = kinetic_gun.get_modkits()
+ for(var/obj/item/borg/upgrade/modkit/M in mods)
+ M.projectile_prehit(src, target, kinetic_gun)
+ if(!lavaland_equipment_pressure_check(get_turf(target)))
+ name = "weakened [name]"
+ damage = damage * pressure_decrease
+ pressure_decrease_active = TRUE
+
/obj/item/projectile/kinetic/on_range()
strike_thing()
@@ -209,30 +221,22 @@
var/turf/target_turf = get_turf(target)
if(!target_turf)
target_turf = get_turf(src)
+ if(kinetic_gun) //hopefully whoever shot this was not very, very unfortunate.
+ var/list/mods = kinetic_gun.get_modkits()
+ for(var/obj/item/borg/upgrade/modkit/M in mods)
+ M.projectile_strike_predamage(src, target_turf, target, kinetic_gun)
+ for(var/obj/item/borg/upgrade/modkit/M in mods)
+ M.projectile_strike(src, target_turf, target, kinetic_gun)
if(ismineralturf(target_turf))
var/turf/simulated/mineral/M = target_turf
M.gets_drilled(firer)
var/obj/effect/temp_visual/kinetic_blast/K = new /obj/effect/temp_visual/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)
- L.visible_message("[L] is hit by \a [src]!",
- "You are hit by \a [src]!")
- add_attack_logs(firer, L, "Shot with a [type]")
//Modkits
/obj/item/borg/upgrade/modkit
- name = "modification kit"
+ name = "kinetic accelerator modification kit"
desc = "An upgrade for kinetic accelerators."
icon = 'icons/obj/objects.dmi'
icon_state = "modkit"
@@ -244,6 +248,8 @@
var/maximum_of_type = 1
var/cost = 30
var/modifier = 1 //For use in any mod kit that has numerical modifiers
+ var/minebot_upgrade = TRUE
+ var/minebot_exclusive = FALSE
/obj/item/borg/upgrade/modkit/examine(mob/user)
if(..(user, 1))
@@ -253,7 +259,7 @@
if(istype(A, /obj/item/gun/energy/kinetic_accelerator) && !issilicon(user))
install(A, user)
else
- ..()
+ return ..()
/obj/item/borg/upgrade/modkit/action(mob/living/silicon/robot/R)
if(..())
@@ -264,6 +270,13 @@
/obj/item/borg/upgrade/modkit/proc/install(obj/item/gun/energy/kinetic_accelerator/KA, mob/user)
. = TRUE
+ if(minebot_upgrade)
+ if(minebot_exclusive && !istype(KA.loc, /mob/living/simple_animal/hostile/mining_drone))
+ to_chat(user, "The modkit you're trying to install is only rated for minebot use.")
+ return FALSE
+ else if(istype(KA.loc, /mob/living/simple_animal/hostile/mining_drone))
+ to_chat(user, "The modkit you're trying to install is not rated for minebot use.")
+ return FALSE
if(denied_type)
var/number_of_denied = 0
for(var/A in KA.get_modkits())
@@ -292,6 +305,12 @@
/obj/item/borg/upgrade/modkit/proc/modify_projectile(obj/item/projectile/kinetic/K)
+//use this one for effects you want to trigger before any damage is done at all and before damage is decreased by pressure
+/obj/item/borg/upgrade/modkit/proc/projectile_prehit(obj/item/projectile/kinetic/K, atom/target, obj/item/gun/energy/kinetic_accelerator/KA)
+//use this one for effects you want to trigger before mods that do damage
+/obj/item/borg/upgrade/modkit/proc/projectile_strike_predamage(obj/item/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/gun/energy/kinetic_accelerator/KA)
+//and this one for things that don't need to trigger before other damage-dealing mods
+/obj/item/borg/upgrade/modkit/proc/projectile_strike(obj/item/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/gun/energy/kinetic_accelerator/KA)
//Range
/obj/item/borg/upgrade/modkit/range
@@ -317,8 +336,9 @@
//Cooldown
/obj/item/borg/upgrade/modkit/cooldown
name = "cooldown decrease"
- desc = "Decreases the cooldown of a kinetic accelerator."
- modifier = 2.5
+ desc = "Decreases the cooldown of a kinetic accelerator. Not rated for minebot use."
+ modifier = 3.2
+ minebot_upgrade = FALSE
/obj/item/borg/upgrade/modkit/cooldown/install(obj/item/gun/energy/kinetic_accelerator/KA, mob/user)
. = ..()
@@ -329,25 +349,61 @@
KA.overheat_time += modifier
..()
+/obj/item/borg/upgrade/modkit/cooldown/minebot
+ name = "minebot cooldown decrease"
+ desc = "Decreases the cooldown of a kinetic accelerator. Only rated for minebot use."
+ icon_state = "door_electronics"
+ icon = 'icons/obj/module.dmi'
+ denied_type = /obj/item/borg/upgrade/modkit/cooldown/minebot
+ modifier = 10
+ cost = 0
+ minebot_upgrade = TRUE
+ minebot_exclusive = TRUE
//AoE blasts
/obj/item/borg/upgrade/modkit/aoe
modifier = 0
+ var/turf_aoe = FALSE
+ var/stats_stolen = FALSE
-/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/temp_visual/explosion/fast
- K.mob_aoe += modifier
+/obj/item/borg/upgrade/modkit/aoe/install(obj/item/gun/energy/kinetic_accelerator/KA, mob/user)
+ if(..())
+ return
+ for(var/obj/item/borg/upgrade/modkit/aoe/AOE in KA.modkits) //make sure only one of the aoe modules has values if somebody has multiple
+ if(AOE.stats_stolen || AOE == src)
+ continue
+ modifier += AOE.modifier //take its modifiers
+ AOE.modifier = 0
+ turf_aoe += AOE.turf_aoe
+ AOE.turf_aoe = FALSE
+ AOE.stats_stolen = TRUE
+
+/obj/item/borg/upgrade/modkit/aoe/uninstall(obj/item/gun/energy/kinetic_accelerator/KA)
+ ..()
+ modifier = initial(modifier) //get our modifiers back
+ turf_aoe = initial(turf_aoe)
+ stats_stolen = FALSE
+
+/obj/item/borg/upgrade/modkit/aoe/projectile_strike(obj/item/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/gun/energy/kinetic_accelerator/KA)
+ if(stats_stolen)
+ return
+ new /obj/effect/temp_visual/explosion/fast(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(K.firer)
+ if(modifier)
+ for(var/mob/living/L in range(1, target_turf) - K.firer - target)
+ var/armor = L.run_armor_check(K.def_zone, K.flag, "", "", K.armour_penetration)
+ L.apply_damage(K.damage * modifier, K.damage_type, K.def_zone, armor)
+ to_chat(L, "You're struck by a [K.name]!")
/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
+ turf_aoe = TRUE
/obj/item/borg/upgrade/modkit/aoe/turfs/andmobs
name = "offensive mining explosion"
@@ -360,15 +416,72 @@
desc = "Causes the kinetic accelerator to damage mobs in an AoE."
modifier = 0.2
+//Minebot passthrough
+/obj/item/borg/upgrade/modkit/minebot_passthrough
+ name = "minebot passthrough"
+ desc = "Causes kinetic accelerator shots to pass through minebots."
+ cost = 0
+
+//Tendril-unique modules
+/obj/item/borg/upgrade/modkit/cooldown/repeater
+ name = "rapid repeater"
+ desc = "Quarters the kinetic accelerator's cooldown on striking a living target, but greatly increases the base cooldown."
+ denied_type = /obj/item/borg/upgrade/modkit/cooldown/repeater
+ modifier = -14 //Makes the cooldown 3 seconds(with no cooldown mods) if you miss. Don't miss.
+ cost = 50
+
+/obj/item/borg/upgrade/modkit/cooldown/repeater/projectile_strike_predamage(obj/item/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/gun/energy/kinetic_accelerator/KA)
+ var/valid_repeat = FALSE
+ if(isliving(target))
+ var/mob/living/L = target
+ if(L.stat != DEAD)
+ valid_repeat = TRUE
+ if(ismineralturf(target_turf))
+ valid_repeat = TRUE
+ if(valid_repeat)
+ KA.overheat = FALSE
+ KA.attempt_reload(KA.overheat_time * 0.25) //If you hit, the cooldown drops to 0.75 seconds.
+
+/obj/item/borg/upgrade/modkit/lifesteal
+ name = "lifesteal crystal"
+ desc = "Causes kinetic accelerator shots to slightly heal the firer on striking a living target."
+ icon_state = "modkit_crystal"
+ modifier = 2.5 //Not a very effective method of healing.
+ cost = 20
+ var/static/list/damage_heal_order = list(BRUTE, BURN, OXY)
+
+/obj/item/borg/upgrade/modkit/lifesteal/projectile_prehit(obj/item/projectile/kinetic/K, atom/target, obj/item/gun/energy/kinetic_accelerator/KA)
+ if(isliving(target) && isliving(K.firer))
+ var/mob/living/L = target
+ if(L.stat == DEAD)
+ return
+ L = K.firer
+ L.heal_ordered_damage(modifier, damage_heal_order)
+
+/obj/item/borg/upgrade/modkit/resonator_blasts
+ name = "resonator blast"
+ desc = "Causes kinetic accelerator shots to leave and detonate resonator blasts."
+ denied_type = /obj/item/borg/upgrade/modkit/resonator_blasts
+ cost = 30
+ modifier = 0.25 //A bonus 15 damage if you burst the field on a target, 60 if you lure them into it.
+
+/obj/item/borg/upgrade/modkit/resonator_blasts/projectile_strike(obj/item/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/gun/energy/kinetic_accelerator/KA)
+ if(target_turf && !ismineralturf(target_turf)) //Don't make fields on mineral turfs.
+ var/obj/effect/temp_visual/resonance/R = locate(/obj/effect/temp_visual/resonance) in target_turf
+ if(R)
+ R.damage_multiplier = modifier
+ R.burst()
+ return
+ new /obj/effect/temp_visual/resonance(target_turf, K.firer, null, 30)
//Indoors
/obj/item/borg/upgrade/modkit/indoors
name = "decrease pressure penalty"
- desc = "Increases the damage a kinetic accelerator does in a high pressure environment."
+ desc = "A syndicate modification kit that increases the damage a kinetic accelerator does in high pressure environments."
modifier = 2
denied_type = /obj/item/borg/upgrade/modkit/indoors
maximum_of_type = 2
- cost = 40
+ cost = 35
/obj/item/borg/upgrade/modkit/indoors/modify_projectile(obj/item/projectile/kinetic/K)
K.pressure_decrease *= modifier
@@ -431,7 +544,7 @@
/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."
+ desc = "Causes kinetic accelerator bolts to have an adjustable-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
+ bolt_color = input(user,"","Choose Color",bolt_color) as color|null
\ No newline at end of file
diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm
index 2c55ed48692..881635d0e21 100644
--- a/code/modules/projectiles/projectile.dm
+++ b/code/modules/projectiles/projectile.dm
@@ -30,9 +30,9 @@
var/spread = 0 //amount (in degrees) of projectile spread
var/legacy = FALSE //legacy projectile system
animate_movement = 0
-
+
var/ignore_source_check = FALSE
-
+
var/damage = 10
var/tile_dropoff = 0 //how much damage should be decremented as the bullet moves
var/tile_dropoff_s = 0 //same as above but for stamina
@@ -81,6 +81,9 @@
/obj/item/projectile/proc/on_range() //if we want there to be effects when they reach the end of their range
qdel(src)
+/obj/item/projectile/proc/prehit(atom/target)
+ return TRUE
+
/obj/item/projectile/proc/on_hit(atom/target, blocked = 0, hit_zone)
var/turf/target_loca = get_turf(target)
var/hitx
@@ -181,7 +184,7 @@
/obj/item/projectile/Bump(atom/A, yes)
if(!yes) //prevents double bumps.
return
-
+
if(check_ricochet(A) && check_ricochet_flag(A) && ricochets < ricochets_max)
ricochets++
if(A.handle_ricochet(src))
@@ -209,7 +212,7 @@
return
var/turf/target_turf = get_turf(A)
-
+ prehit(A)
var/permutation = A.bullet_act(src, def_zone) // searches for return value, could be deleted after run so check A isn't null
if(permutation == -1 || forcedodge)// the bullet passes through a dense object!
loc = target_turf
@@ -223,6 +226,7 @@
mobs_list += L
if(mobs_list.len)
var/mob/living/picked_mob = pick(mobs_list)
+ prehit(picked_mob)
picked_mob.bullet_act(src, def_zone)
qdel(src)
@@ -312,7 +316,7 @@ obj/item/projectile/Crossed(atom/movable/AM, oldloc) //A mob moving on a tile wi
/obj/item/projectile/proc/dumbfire(var/dir)
current = get_ranged_target_turf(src, dir, world.maxx) //world.maxx is the range. Not sure how to handle this better.
fire()
-
+
/obj/item/projectile/proc/on_ricochet(atom/A)
return
@@ -326,7 +330,7 @@ obj/item/projectile/Crossed(atom/movable/AM, oldloc) //A mob moving on a tile wi
if(A.flags_2 & CHECK_RICOCHET_1)
return TRUE
return FALSE
-
+
/obj/item/projectile/proc/setAngle(new_angle) //wrapper for overrides.
Angle = new_angle
return TRUE
diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm
index e8099332a61..de11cb557a9 100644
--- a/code/modules/projectiles/projectile/special.dm
+++ b/code/modules/projectiles/projectile/special.dm
@@ -248,18 +248,6 @@
dismemberment = 20
impact_effect_type = /obj/effect/temp_visual/impact_effect/purple_laser
-/obj/item/projectile/plasma/New()
- var/turf/proj_turf = get_turf(src)
- if(!istype(proj_turf, /turf))
- return
- var/datum/gas_mixture/environment = proj_turf.return_air()
- if(environment)
- var/pressure = environment.return_pressure()
- if(pressure < 30)
- name = "full strength plasma blast"
- damage *= 3
- ..()
-
/obj/item/projectile/plasma/on_hit(atom/target)
. = ..()
if(ismineralturf(target))
@@ -270,7 +258,8 @@
forcedodge = 0
/obj/item/projectile/plasma/adv
- range = 6
+ damage = 7
+ range = 5
/obj/item/projectile/plasma/adv/mech
damage = 10
diff --git a/code/modules/research/designs/mining_designs.dm b/code/modules/research/designs/mining_designs.dm
index 14cd12c6837..76439c64987 100644
--- a/code/modules/research/designs/mining_designs.dm
+++ b/code/modules/research/designs/mining_designs.dm
@@ -1,16 +1,6 @@
/////////////////////////////////////////
/////////////////Mining//////////////////
/////////////////////////////////////////
-/datum/design/drill_diamond
- name = "Diamond Mining Drill"
- desc = "Yours is the drill that will pierce the heavens!"
- id = "drill_diamond"
- req_tech = list("materials" = 6, "powerstorage" = 5, "engineering" = 5)
- build_type = PROTOLATHE
- materials = list(MAT_METAL = 3000, MAT_GLASS = 1000, MAT_DIAMOND = 2000) //Yes, a whole diamond is needed.
- build_path = /obj/item/pickaxe/drill/diamonddrill
- category = list("Mining")
-
/datum/design/drill
name = "Mining Drill"
desc = "Yours is the drill that will pierce through the rock walls."
@@ -21,13 +11,23 @@
build_path = /obj/item/pickaxe/drill
category = list("Mining")
+/datum/design/drill_diamond
+ name = "Diamond Mining Drill"
+ desc = "Yours is the drill that will pierce the heavens!"
+ id = "drill_diamond"
+ req_tech = list("materials" = 6, "powerstorage" = 5, "engineering" = 5)
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 3000, MAT_GLASS = 1000, MAT_DIAMOND = 2000) //Yes, a whole diamond is needed.
+ build_path = /obj/item/pickaxe/drill/diamonddrill
+ category = list("Mining")
+
/datum/design/plasmacutter
name = "Plasma Cutter"
desc = "You could use it to cut limbs off of xenos! Or, you know, mine stuff."
id = "plasmacutter"
req_tech = list("materials" = 3, "plasmatech" = 3, "magnets" = 2)
build_type = PROTOLATHE
- materials = list(MAT_METAL = 2000, MAT_GLASS = 1000, MAT_PLASMA = 1500)
+ materials = list(MAT_METAL = 1500, MAT_GLASS = 500, MAT_PLASMA = 400)
build_path = /obj/item/gun/energy/plasmacutter
category = list("Mining")
@@ -37,7 +37,7 @@
id = "plasmacutter_adv"
req_tech = list("materials" = 4, "plasmatech" = 4, "engineering" = 2, "combat" = 3, "magnets" = 3)
build_type = PROTOLATHE
- materials = list(MAT_METAL = 4000, MAT_GLASS = 1000, MAT_PLASMA = 4000, MAT_GOLD = 500)
+ materials = list(MAT_METAL = 3000, MAT_GLASS = 1000, MAT_PLASMA = 2000, MAT_GOLD = 500)
build_path = /obj/item/gun/energy/plasmacutter/adv
category = list("Mining")
@@ -101,16 +101,6 @@
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."
@@ -119,4 +109,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")
+ category = list("Mining", "Cyborg Upgrade Modules")
\ No newline at end of file
diff --git a/code/modules/research/designs/spacepod_designs.dm b/code/modules/research/designs/spacepod_designs.dm
index 44bef918678..9930426df86 100644
--- a/code/modules/research/designs/spacepod_designs.dm
+++ b/code/modules/research/designs/spacepod_designs.dm
@@ -149,17 +149,6 @@
build_path = /obj/item/spacepod_equipment/weaponry/mining_laser
category = list("Pod_Weaponry")
-/datum/design/pod_mining_laser_hyper
- construction_time = 200
- name = "Enhanced Mining Laser"
- desc = "Allows for the construction of an enhanced mining laser."
- id = "pod_mining_laser_hyper"
- req_tech = list("materials" = 7, "powerstorage" = 6, "engineering" = 5, "magnets" = 6, "combat" = 4)
- build_type = PODFAB
- materials = list(MAT_METAL = 10000, MAT_GLASS = 5000, MAT_SILVER = 4000, MAT_GOLD = 4000, MAT_DIAMOND = 4000)
- build_path = /obj/item/spacepod_equipment/weaponry/mining_laser_hyper
- category = list("Pod_Weaponry")
-
//////////////////////////////////////////
//////SPACEPOD MISC. ITEMS////////////////
//////////////////////////////////////////
diff --git a/code/modules/research/research.dm b/code/modules/research/research.dm
index 4d1195e29ce..05786daed94 100644
--- a/code/modules/research/research.dm
+++ b/code/modules/research/research.dm
@@ -372,8 +372,9 @@ datum/tech/robotics
var/default_desc = "A disk for storing device design data for construction in lathes."
/obj/item/disk/design_disk/New()
- src.pixel_x = rand(-5.0, 5)
- src.pixel_y = rand(-5.0, 5)
+ ..()
+ pixel_x = rand(-5, 5)
+ pixel_y = rand(-5, 5)
/obj/item/disk/design_disk/proc/load_blueprint(datum/design/D)
name = "[default_name] \[[D]\]"
diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm
index 0587f6e4f73..81ca4bfeb9b 100644
--- a/code/modules/research/xenobiology/xenobiology.dm
+++ b/code/modules/research/xenobiology/xenobiology.dm
@@ -211,12 +211,16 @@
if(SM.flags_2 & HOLOGRAM_2) //Check to see if it's a holodeck creature
to_chat(SM, "You also become depressingly aware that you are not a real creature, but instead a holoform. Your existence is limited to the parameters of the holodeck.")
to_chat(user, "[M] accepts the potion and suddenly becomes attentive and aware. It worked!")
+ after_success(user, SM)
qdel(src)
else
to_chat(user, "[M] looks interested for a moment, but then looks back down. Maybe you should try again later.")
being_used = 0
..()
+/obj/item/slimepotion/sentience/proc/after_success(mob/living/user, mob/living/simple_animal/SM)
+ return
+
/obj/item/slimepotion/transference
name = "consciousness transference potion"
desc = "A strange slime-based chemical that, when used, allows the user to transfer their consciousness to a lesser being."
diff --git a/code/modules/spacepods/equipment.dm b/code/modules/spacepods/equipment.dm
index e64087d5561..d509b4f745c 100644
--- a/code/modules/spacepods/equipment.dm
+++ b/code/modules/spacepods/equipment.dm
@@ -131,16 +131,6 @@
fire_delay = 10
fire_sound = 'sound/weapons/kenetic_accel.ogg'
-/obj/item/spacepod_equipment/weaponry/mining_laser_hyper
- name = "enhanced mining laser system"
- desc = "An enhanced mining laser system for space pods, fires bursts of energy that cut through rock."
- icon = 'icons/goonstation/pods/ship.dmi'
- icon_state = "pod_w_laser"
- projectile_type = /obj/item/projectile/kinetic/pod/enhanced
- shot_cost = 200
- fire_delay = 8
- fire_sound = 'sound/weapons/kenetic_accel.ogg'
-
/*
///////////////////////////////////////
/////////Misc. System///////////////////
diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi
index 05a5768ce89..c303e2135bd 100644
Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ
diff --git a/icons/obj/objects.dmi b/icons/obj/objects.dmi
index f9c13a5c332..f3cff7fbd9a 100644
Binary files a/icons/obj/objects.dmi and b/icons/obj/objects.dmi differ