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