From 88d88741f5106852c8a328a60b1e903dc49a00b6 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Wed, 24 May 2017 08:28:08 -0500 Subject: [PATCH] Splits equipment.dm into several component files --- code/game/objects/structures/signs.dm | 6 + code/modules/mining/equipment.dm | 557 ------------------ .../modules/mining/equipment/explorer_gear.dm | 48 ++ .../mining/equipment/kinetic_crusher.dm | 86 +++ .../mining/equipment/lazarus_injector.dm | 61 ++ .../mining/equipment/mineral_scanner.dm | 79 +++ code/modules/mining/equipment/resonator.dm | 120 ++++ code/modules/mining/equipment/vendor_items.dm | 33 ++ .../mining/equipment/wormhole_jaunter.dm | 109 ++++ tgstation.dme | 8 +- 10 files changed, 549 insertions(+), 558 deletions(-) delete mode 100644 code/modules/mining/equipment.dm create mode 100644 code/modules/mining/equipment/explorer_gear.dm create mode 100644 code/modules/mining/equipment/kinetic_crusher.dm create mode 100644 code/modules/mining/equipment/lazarus_injector.dm create mode 100644 code/modules/mining/equipment/mineral_scanner.dm create mode 100644 code/modules/mining/equipment/resonator.dm create mode 100644 code/modules/mining/equipment/vendor_items.dm create mode 100644 code/modules/mining/equipment/wormhole_jaunter.dm diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm index 11d20a2dc1..445af97b4e 100644 --- a/code/game/objects/structures/signs.dm +++ b/code/game/objects/structures/signs.dm @@ -246,6 +246,12 @@ desc = "A sign labelling an area as a place where xenobiological entities are researched." icon_state = "xenobio" +/obj/structure/sign/xeno_warning_mining + name = "DANGEROUS ALIEN LIFE" + desc = "A sign that warns would-be travellers of hostile alien life in the vicinity." + icon = 'icons/obj/mining.dmi' + icon_state = "xeno_warning" + /obj/structure/sign/enginesafety name = "\improper ENGINEERING SAFETY" desc = "A sign detailing the various safety protocols when working on-site to ensure a safe shift." diff --git a/code/modules/mining/equipment.dm b/code/modules/mining/equipment.dm deleted file mode 100644 index a9315b7bea..0000000000 --- a/code/modules/mining/equipment.dm +++ /dev/null @@ -1,557 +0,0 @@ -/****************Explorer's Suit**************************/ - -/obj/item/clothing/suit/hooded/explorer - name = "explorer suit" - desc = "An armoured suit for exploring harsh environments." - icon_state = "explorer" - item_state = "explorer" - body_parts_covered = CHEST|GROIN|LEGS|ARMS - min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT - cold_protection = CHEST|GROIN|LEGS|ARMS - max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT - heat_protection = CHEST|GROIN|LEGS|ARMS - hoodtype = /obj/item/clothing/head/hooded/explorer - armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 50, bio = 100, rad = 50, fire = 50, acid = 50) - allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals, /obj/item/weapon/resonator, /obj/item/device/mining_scanner, /obj/item/device/t_scanner/adv_mining_scanner, /obj/item/weapon/gun/energy/kinetic_accelerator, /obj/item/weapon/pickaxe) - resistance_flags = FIRE_PROOF - -/obj/item/clothing/head/hooded/explorer - name = "explorer hood" - desc = "An armoured hood for exploring harsh environments." - icon_state = "explorer" - body_parts_covered = HEAD - flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS - min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT - max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT - armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 50, bio = 100, rad = 50, fire = 50, acid = 50) - resistance_flags = FIRE_PROOF - -/obj/item/clothing/mask/gas/explorer - name = "explorer gas mask" - desc = "A military-grade gas mask that can be connected to an air supply." - icon_state = "gas_mining" - visor_flags = BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS - visor_flags_inv = HIDEFACIALHAIR - visor_flags_cover = MASKCOVERSMOUTH - actions_types = list(/datum/action/item_action/adjust) - armor = list(melee = 10, bullet = 5, laser = 5, energy = 5, bomb = 0, bio = 50, rad = 0, fire = 20, acid = 40) - resistance_flags = FIRE_PROOF - -/obj/item/clothing/mask/gas/explorer/attack_self(mob/user) - adjustmask(user) - -/obj/item/clothing/mask/gas/explorer/adjustmask(user) - ..() - w_class = mask_adjusted ? WEIGHT_CLASS_NORMAL : WEIGHT_CLASS_SMALL - -/obj/item/clothing/mask/gas/explorer/folded/New() - ..() - adjustmask() - - -/**********************Mining Equipment Vendor Items**************************/ - -/**********************Jaunter**********************/ - -/obj/item/device/wormhole_jaunter - name = "wormhole jaunter" - desc = "A single use device harnessing outdated wormhole technology, Nanotrasen has since turned its eyes to blue space for more accurate teleportation. The wormholes it creates are unpleasant to travel through, to say the least.\nThanks to modifications provided by the Free Golems, this jaunter can be worn on the belt to provide protection from chasms." - icon = 'icons/obj/mining.dmi' - icon_state = "Jaunter" - item_state = "electronic" - throwforce = 0 - w_class = WEIGHT_CLASS_SMALL - throw_speed = 3 - throw_range = 5 - origin_tech = "bluespace=2" - slot_flags = SLOT_BELT - -/obj/item/device/wormhole_jaunter/attack_self(mob/user) - user.visible_message("[user.name] activates the [src.name]!") - SSblackbox.add_details("jaunter", "User") // user activated - activate(user) - -/obj/item/device/wormhole_jaunter/proc/turf_check(mob/user) - var/turf/device_turf = get_turf(user) - if(!device_turf||device_turf.z==2||device_turf.z>=7) - to_chat(user, "You're having difficulties getting the [src.name] to work.") - return FALSE - return TRUE - -/obj/item/device/wormhole_jaunter/proc/get_destinations(mob/user) - var/list/destinations = list() - - if(isgolem(user)) - for(var/obj/item/device/radio/beacon/B in GLOB.teleportbeacons) - var/turf/T = get_turf(B) - if(istype(T.loc, /area/ruin/powered/golem_ship)) - destinations += B - - // In the event golem beacon is destroyed, send to station instead - if(destinations.len) - return destinations - - for(var/obj/item/device/radio/beacon/B in GLOB.teleportbeacons) - var/turf/T = get_turf(B) - if(T.z == ZLEVEL_STATION) - destinations += B - - return destinations - -/obj/item/device/wormhole_jaunter/proc/activate(mob/user) - if(!turf_check(user)) - return - - var/list/L = get_destinations(user) - if(!L.len) - to_chat(user, "The [src.name] found no beacons in the world to anchor a wormhole to.") - return - var/chosen_beacon = pick(L) - var/obj/effect/portal/wormhole/jaunt_tunnel/J = new /obj/effect/portal/wormhole/jaunt_tunnel(get_turf(src), chosen_beacon, lifespan=100) - J.target = chosen_beacon - try_move_adjacent(J) - playsound(src,'sound/effects/sparks4.ogg',50,1) - qdel(src) - -/obj/item/device/wormhole_jaunter/emp_act(power) - var/triggered = FALSE - - if(usr.get_item_by_slot(slot_belt) == src) - if(power == 1) - triggered = TRUE - else if(power == 2 && prob(50)) - triggered = TRUE - - if(triggered) - usr.visible_message("The [src] overloads and activates!") - SSblackbox.add_details("jaunter","EMP") // EMP accidental activation - activate(usr) - -/obj/item/device/wormhole_jaunter/proc/chasm_react(mob/user) - if(user.get_item_by_slot(slot_belt) == src) - to_chat(user, "Your [src] activates, saving you from the chasm!") - SSblackbox.add_details("jaunter","Chasm") // chasm automatic activation - activate(user) - else - to_chat(user, "The [src] is not attached to your belt, preventing it from saving you from the chasm. RIP.") - - -/obj/effect/portal/wormhole/jaunt_tunnel - name = "jaunt tunnel" - icon = 'icons/effects/effects.dmi' - icon_state = "bhole3" - desc = "A stable hole in the universe made by a wormhole jaunter. Turbulent doesn't even begin to describe how rough passage through one of these is, but at least it will always get you somewhere near a beacon." - mech_sized = TRUE //save your ripley - -/obj/effect/portal/wormhole/jaunt_tunnel/teleport(atom/movable/M) - if(istype(M, /obj/effect)) - return - - if(M.anchored) - if(!(istype(M, /obj/mecha) && mech_sized)) - return - - if(istype(M, /atom/movable)) - if(do_teleport(M, target, 6)) - // KERPLUNK - playsound(M,'sound/weapons/resonator_blast.ogg',50,1) - if(iscarbon(M)) - var/mob/living/carbon/L = M - L.Weaken(3) - if(ishuman(L)) - shake_camera(L, 20, 1) - addtimer(CALLBACK(L, /mob/living/carbon.proc/vomit), 20) - -/**********************Resonator**********************/ - -/obj/item/weapon/resonator - name = "resonator" - icon = 'icons/obj/mining.dmi' - icon_state = "resonator" - item_state = "resonator" - desc = "A handheld device that creates small fields of energy that resonate until they detonate, crushing rock. It's more effective in a vacuum." - w_class = WEIGHT_CLASS_NORMAL - force = 15 - throwforce = 10 - var/burst_time = 30 - var/fieldlimit = 4 - var/list/fields = list() - var/quick_burst_mod = 0.8 - origin_tech = "magnets=3;engineering=3" - -/obj/item/weapon/resonator/upgraded - name = "upgraded resonator" - desc = "An upgraded version of the resonator that can produce more fields at once, as well as having no damage penalty for bursting a resonance field early." - icon_state = "resonator_u" - item_state = "resonator_u" - origin_tech = "materials=4;powerstorage=3;engineering=3;magnets=3" - fieldlimit = 6 - quick_burst_mod = 1 - -/obj/item/weapon/resonator/attack_self(mob/user) - if(burst_time == 50) - burst_time = 30 - to_chat(user, "You set the resonator's fields to detonate after 3 seconds.") - else - burst_time = 50 - to_chat(user, "You set the resonator's fields to detonate after 5 seconds.") - -/obj/item/weapon/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/item/weapon/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. More damaging in low pressure environments." - icon_state = "shield1" - layer = ABOVE_ALL_MOB_LAYER - duration = 50 - var/resonance_damage = 20 - var/damage_multiplier = 1 - var/creator - var/obj/item/weapon/resonator/res - -/obj/effect/temp_visual/resonance/Initialize(mapload, 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 - . = ..() - -/obj/effect/temp_visual/resonance/proc/check_pressure(turf/proj_turf) - if(!proj_turf) - proj_turf = get_turf(src) - if(!istype(proj_turf)) - return - var/datum/gas_mixture/environment = proj_turf.return_air() - var/pressure = environment.return_pressure() - resonance_damage = initial(resonance_damage) - if(pressure < 50) - name = "strong [initial(name)]" - resonance_damage *= 3 - else - 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/closed/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_logs(creator, L, "used a resonator field on", "resonator") - 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/Initialize() - . = ..() - transform = matrix()*1.5 - animate(src, transform = matrix()*0.1, alpha = 50, time = 4) - -/**********************Facehugger toy**********************/ - -/obj/item/clothing/mask/facehugger/toy - item_state = "facehugger_inactive" - desc = "A toy often used to play pranks on other miners by putting it in their beds. It takes a bit to recharge after latching onto something." - throwforce = 0 - real = 0 - sterile = 1 - tint = 3 //Makes it feel more authentic when it latches on - -/obj/item/clothing/mask/facehugger/toy/Die() - return - -/**********************Lazarus Injector**********************/ - -/obj/item/weapon/lazarus_injector - name = "lazarus injector" - desc = "An injector with a cocktail of nanomachines and chemicals, this device can seemingly raise animals from the dead, making them become friendly to the user. Unfortunately, the process is useless on higher forms of life and incredibly costly, so these were hidden in storage until an executive thought they'd be great motivation for some of their employees." - icon = 'icons/obj/syringe.dmi' - icon_state = "lazarus_hypo" - item_state = "hypo" - throwforce = 0 - w_class = WEIGHT_CLASS_SMALL - throw_speed = 3 - throw_range = 5 - var/loaded = 1 - var/malfunctioning = 0 - var/revive_type = SENTIENCE_ORGANIC //So you can't revive boss monsters or robots with it - origin_tech = "biotech=4;magnets=6" - -/obj/item/weapon/lazarus_injector/afterattack(atom/target, mob/user, proximity_flag) - if(!loaded) - return - if(isliving(target) && proximity_flag) - if(istype(target, /mob/living/simple_animal)) - var/mob/living/simple_animal/M = target - if(M.sentience_type != revive_type) - to_chat(user, "[src] does not work on this sort of creature.") - return - if(M.stat == DEAD) - M.faction = list("neutral") - M.revive(full_heal = 1, admin_revive = 1) - if(ishostile(target)) - var/mob/living/simple_animal/hostile/H = M - if(malfunctioning) - H.faction |= list("lazarus", "\ref[user]") - H.robust_searching = 1 - H.friends += user - H.attack_same = 1 - log_game("[user] has revived hostile mob [target] with a malfunctioning lazarus injector") - else - H.attack_same = 0 - loaded = 0 - user.visible_message("[user] injects [M] with [src], reviving it.") - SSblackbox.add_details("lazarus_injector", "[M.type]") - playsound(src,'sound/effects/refill.ogg',50,1) - icon_state = "lazarus_empty" - return - else - to_chat(user, "[src] is only effective on the dead.") - return - else - to_chat(user, "[src] is only effective on lesser beings.") - return - -/obj/item/weapon/lazarus_injector/emp_act() - if(!malfunctioning) - malfunctioning = 1 - -/obj/item/weapon/lazarus_injector/examine(mob/user) - ..() - if(!loaded) - to_chat(user, "[src] is empty.") - if(malfunctioning) - to_chat(user, "The display on [src] seems to be flickering.") - -/**********************Mining Scanners**********************/ - -/obj/item/device/mining_scanner - desc = "A scanner that checks surrounding rock for useful minerals; it can also be used to stop gibtonite detonations." - name = "manual mining scanner" - icon_state = "mining1" - item_state = "analyzer" - w_class = WEIGHT_CLASS_SMALL - flags = CONDUCT - slot_flags = SLOT_BELT - var/cooldown = 35 - var/current_cooldown = 0 - origin_tech = "engineering=1;magnets=1" - -/obj/item/device/mining_scanner/attack_self(mob/user) - if(!user.client) - return - if(current_cooldown <= world.time) - current_cooldown = world.time + cooldown - mineral_scan_pulse(get_turf(user)) - - -//Debug item to identify all ore spread quickly -/obj/item/device/mining_scanner/admin - -/obj/item/device/mining_scanner/admin/attack_self(mob/user) - for(var/turf/closed/mineral/M in world) - if(M.scan_state) - M.icon_state = M.scan_state - qdel(src) - -/obj/item/device/t_scanner/adv_mining_scanner - desc = "A scanner that automatically checks surrounding rock for useful minerals; it can also be used to stop gibtonite detonations. This one has an extended range." - name = "advanced automatic mining scanner" - icon_state = "mining0" - item_state = "analyzer" - w_class = WEIGHT_CLASS_SMALL - flags = CONDUCT - slot_flags = SLOT_BELT - var/cooldown = 35 - var/current_cooldown = 0 - var/range = 7 - origin_tech = "engineering=3;magnets=3" - -/obj/item/device/t_scanner/adv_mining_scanner/lesser - name = "automatic mining scanner" - desc = "A scanner that automatically checks surrounding rock for useful minerals; it can also be used to stop gibtonite detonations." - range = 4 - cooldown = 50 - -/obj/item/device/t_scanner/adv_mining_scanner/scan() - if(current_cooldown <= world.time) - current_cooldown = world.time + cooldown - var/turf/t = get_turf(src) - mineral_scan_pulse(t, range) - -/proc/mineral_scan_pulse(turf/T, range = world.view) - var/list/minerals = list() - for(var/turf/closed/mineral/M in range(range, T)) - if(M.scan_state) - minerals += M - if(LAZYLEN(minerals)) - for(var/turf/closed/mineral/M in minerals) - var/obj/effect/temp_visual/mining_overlay/oldC = locate(/obj/effect/temp_visual/mining_overlay) in M - if(oldC) - qdel(oldC) - var/obj/effect/temp_visual/mining_overlay/C = new /obj/effect/temp_visual/mining_overlay(M) - C.icon_state = M.scan_state - -/obj/effect/temp_visual/mining_overlay - plane = FULLSCREEN_PLANE - layer = FLASH_LAYER - icon = 'icons/effects/ore_visuals.dmi' - appearance_flags = 0 //to avoid having TILE_BOUND in the flags, so that the 480x480 icon states let you see it no matter where you are - duration = 35 - pixel_x = -224 - pixel_y = -224 - -/obj/effect/temp_visual/mining_overlay/Initialize() - . = ..() - animate(src, alpha = 0, time = duration, easing = EASE_IN) - - -/**********************Xeno Warning Sign**********************/ -/obj/structure/sign/xeno_warning_mining - name = "DANGEROUS ALIEN LIFE" - desc = "A sign that warns would be travellers of hostile alien life in the vicinity." - icon = 'icons/obj/mining.dmi' - icon_state = "xeno_warning" - -/*********************Hivelord stabilizer****************/ - -/obj/item/weapon/hivelordstabilizer - name = "stabilizing serum" - icon = 'icons/obj/chemical.dmi' - icon_state = "bottle19" - desc = "Inject certain types of monster organs with this stabilizer to preserve their healing powers indefinitely." - w_class = WEIGHT_CLASS_TINY - origin_tech = "biotech=3" - -/obj/item/weapon/hivelordstabilizer/afterattack(obj/item/organ/M, mob/user) - var/obj/item/organ/hivelord_core/C = M - if(!istype(C, /obj/item/organ/hivelord_core)) - to_chat(user, "The stabilizer only works on certain types of monster organs, generally regenerative in nature.") - return ..() - - C.preserved() - to_chat(user, "You inject the [M] with the stabilizer. It will no longer go inert.") - qdel(src) - -/*********************Mining Hammer****************/ -/obj/item/weapon/twohanded/required/mining_hammer - icon = 'icons/obj/mining.dmi' - icon_state = "mining_hammer1" - item_state = "mining_hammer1" - name = "proto-kinetic crusher" - desc = "An early design of the proto-kinetic accelerator, it is little more than an combination of various mining tools cobbled together, forming a high-tech club. \ - While it is an effective mining tool, it did little to aid any but the most skilled and/or suicidal miners against local fauna.\ - \nMark a mob with the destabilizing force, then hit them in melee to activate it for extra damage. Extra damage if backstabbed in this fashion. \ - This weapon is only particularly effective against large creatures." - force = 20 //As much as a bone spear, but this is significantly more annoying to carry around due to requiring the use of both hands at all times - w_class = WEIGHT_CLASS_BULKY - slot_flags = SLOT_BACK - force_unwielded = 20 //It's never not wielded so these are the same - force_wielded = 20 - throwforce = 5 - throw_speed = 4 - luminosity = 4 - armour_penetration = 10 - materials = list(MAT_METAL=1150, MAT_GLASS=2075) - hitsound = 'sound/weapons/bladeslice.ogg' - attack_verb = list("smashed", "crushed", "cleaved", "chopped", "pulped") - sharpness = IS_SHARP - var/charged = TRUE - var/charge_time = 14 - -/obj/item/projectile/destabilizer - name = "destabilizing force" - icon_state = "pulse1" - nodamage = TRUE - damage = 0 //We're just here to mark people. This is still a melee weapon. - damage_type = BRUTE - flag = "bomb" - range = 6 - log_override = TRUE - var/obj/item/weapon/twohanded/required/mining_hammer/hammer_synced - -/obj/item/projectile/destabilizer/Destroy() - hammer_synced = null - return ..() - -/obj/item/projectile/destabilizer/on_hit(atom/target, blocked = 0) - if(isliving(target)) - var/mob/living/L = target - var/datum/status_effect/crusher_mark/CM = L.apply_status_effect(STATUS_EFFECT_CRUSHERMARK) - CM.hammer_synced = hammer_synced - var/target_turf = get_turf(target) - if(ismineralturf(target_turf)) - var/turf/closed/mineral/M = target_turf - new /obj/effect/temp_visual/kinetic_blast(M) - M.gets_drilled(firer) - ..() - -/obj/item/weapon/twohanded/required/mining_hammer/afterattack(atom/target, mob/user, proximity_flag) - if(!proximity_flag && charged)//Mark a target, or mine a tile. - var/turf/proj_turf = user.loc - if(!isturf(proj_turf)) - return - var/obj/item/projectile/destabilizer/D = new /obj/item/projectile/destabilizer(proj_turf) - D.preparePixelProjectile(target, get_turf(target), user) - D.hammer_synced = src - playsound(user, 'sound/weapons/plasma_cutter.ogg', 100, 1) - D.fire() - charged = FALSE - icon_state = "mining_hammer1_uncharged" - addtimer(CALLBACK(src, .proc/Recharge), charge_time) - return - if(proximity_flag && isliving(target)) - var/mob/living/L = target - var/datum/status_effect/crusher_mark/CM = L.has_status_effect(STATUS_EFFECT_CRUSHERMARK) - if(!CM || CM.hammer_synced != src || !L.remove_status_effect(STATUS_EFFECT_CRUSHERMARK)) - return - new /obj/effect/temp_visual/kinetic_blast(get_turf(L)) - var/backstab_dir = get_dir(user, L) - var/def_check = L.getarmor(type = "bomb") - if((user.dir & backstab_dir) && (L.dir & backstab_dir)) - L.apply_damage(80, BRUTE, blocked = def_check) - playsound(user, 'sound/weapons/Kenetic_accel.ogg', 100, 1) //Seriously who spelled it wrong - else - L.apply_damage(50, BRUTE, blocked = def_check) - -/obj/item/weapon/twohanded/required/mining_hammer/proc/Recharge() - if(!charged) - charged = TRUE - icon_state = "mining_hammer1" - playsound(src.loc, 'sound/weapons/kenetic_reload.ogg', 60, 1) diff --git a/code/modules/mining/equipment/explorer_gear.dm b/code/modules/mining/equipment/explorer_gear.dm new file mode 100644 index 0000000000..e4acea1cf0 --- /dev/null +++ b/code/modules/mining/equipment/explorer_gear.dm @@ -0,0 +1,48 @@ +/****************Explorer's Suit and Mask****************/ +/obj/item/clothing/suit/hooded/explorer + name = "explorer suit" + desc = "An armoured suit for exploring harsh environments." + icon_state = "explorer" + item_state = "explorer" + body_parts_covered = CHEST|GROIN|LEGS|ARMS + min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT + cold_protection = CHEST|GROIN|LEGS|ARMS + max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT + heat_protection = CHEST|GROIN|LEGS|ARMS + hoodtype = /obj/item/clothing/head/hooded/explorer + armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 50, bio = 100, rad = 50, fire = 50, acid = 50) + allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals, /obj/item/weapon/resonator, /obj/item/device/mining_scanner, /obj/item/device/t_scanner/adv_mining_scanner, /obj/item/weapon/gun/energy/kinetic_accelerator, /obj/item/weapon/pickaxe) + resistance_flags = FIRE_PROOF + +/obj/item/clothing/head/hooded/explorer + name = "explorer hood" + desc = "An armoured hood for exploring harsh environments." + icon_state = "explorer" + body_parts_covered = HEAD + flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS + min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT + max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT + armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 50, bio = 100, rad = 50, fire = 50, acid = 50) + resistance_flags = FIRE_PROOF + +/obj/item/clothing/mask/gas/explorer + name = "explorer gas mask" + desc = "A military-grade gas mask that can be connected to an air supply." + icon_state = "gas_mining" + visor_flags = BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS + visor_flags_inv = HIDEFACIALHAIR + visor_flags_cover = MASKCOVERSMOUTH + actions_types = list(/datum/action/item_action/adjust) + armor = list(melee = 10, bullet = 5, laser = 5, energy = 5, bomb = 0, bio = 50, rad = 0, fire = 20, acid = 40) + resistance_flags = FIRE_PROOF + +/obj/item/clothing/mask/gas/explorer/attack_self(mob/user) + adjustmask(user) + +/obj/item/clothing/mask/gas/explorer/adjustmask(user) + ..() + w_class = mask_adjusted ? WEIGHT_CLASS_NORMAL : WEIGHT_CLASS_SMALL + +/obj/item/clothing/mask/gas/explorer/folded/New() + ..() + adjustmask() diff --git a/code/modules/mining/equipment/kinetic_crusher.dm b/code/modules/mining/equipment/kinetic_crusher.dm new file mode 100644 index 0000000000..15d6c6afc5 --- /dev/null +++ b/code/modules/mining/equipment/kinetic_crusher.dm @@ -0,0 +1,86 @@ +/*********************Mining Hammer****************/ +/obj/item/weapon/twohanded/required/mining_hammer + icon = 'icons/obj/mining.dmi' + icon_state = "mining_hammer1" + item_state = "mining_hammer1" + name = "proto-kinetic crusher" + desc = "An early design of the proto-kinetic accelerator, it is little more than an combination of various mining tools cobbled together, forming a high-tech club. \ + While it is an effective mining tool, it did little to aid any but the most skilled and/or suicidal miners against local fauna.\ + \nMark a mob with the destabilizing force, then hit them in melee to activate it for extra damage. Extra damage if backstabbed in this fashion. \ + This weapon is only particularly effective against large creatures." + force = 20 //As much as a bone spear, but this is significantly more annoying to carry around due to requiring the use of both hands at all times + w_class = WEIGHT_CLASS_BULKY + slot_flags = SLOT_BACK + force_unwielded = 20 //It's never not wielded so these are the same + force_wielded = 20 + throwforce = 5 + throw_speed = 4 + luminosity = 4 + armour_penetration = 10 + materials = list(MAT_METAL=1150, MAT_GLASS=2075) + hitsound = 'sound/weapons/bladeslice.ogg' + attack_verb = list("smashed", "crushed", "cleaved", "chopped", "pulped") + sharpness = IS_SHARP + var/charged = TRUE + var/charge_time = 14 + +/obj/item/projectile/destabilizer + name = "destabilizing force" + icon_state = "pulse1" + nodamage = TRUE + damage = 0 //We're just here to mark people. This is still a melee weapon. + damage_type = BRUTE + flag = "bomb" + range = 6 + log_override = TRUE + var/obj/item/weapon/twohanded/required/mining_hammer/hammer_synced + +/obj/item/projectile/destabilizer/Destroy() + hammer_synced = null + return ..() + +/obj/item/projectile/destabilizer/on_hit(atom/target, blocked = 0) + if(isliving(target)) + var/mob/living/L = target + var/datum/status_effect/crusher_mark/CM = L.apply_status_effect(STATUS_EFFECT_CRUSHERMARK) + CM.hammer_synced = hammer_synced + var/target_turf = get_turf(target) + if(ismineralturf(target_turf)) + var/turf/closed/mineral/M = target_turf + new /obj/effect/temp_visual/kinetic_blast(M) + M.gets_drilled(firer) + ..() + +/obj/item/weapon/twohanded/required/mining_hammer/afterattack(atom/target, mob/user, proximity_flag) + if(!proximity_flag && charged)//Mark a target, or mine a tile. + var/turf/proj_turf = user.loc + if(!isturf(proj_turf)) + return + var/obj/item/projectile/destabilizer/D = new /obj/item/projectile/destabilizer(proj_turf) + D.preparePixelProjectile(target, get_turf(target), user) + D.hammer_synced = src + playsound(user, 'sound/weapons/plasma_cutter.ogg', 100, 1) + D.fire() + charged = FALSE + icon_state = "mining_hammer1_uncharged" + addtimer(CALLBACK(src, .proc/Recharge), charge_time) + return + if(proximity_flag && isliving(target)) + var/mob/living/L = target + var/datum/status_effect/crusher_mark/CM = L.has_status_effect(STATUS_EFFECT_CRUSHERMARK) + if(!CM || CM.hammer_synced != src || !L.remove_status_effect(STATUS_EFFECT_CRUSHERMARK)) + return + new /obj/effect/temp_visual/kinetic_blast(get_turf(L)) + var/backstab_dir = get_dir(user, L) + var/def_check = L.getarmor(type = "bomb") + if((user.dir & backstab_dir) && (L.dir & backstab_dir)) + L.apply_damage(80, BRUTE, blocked = def_check) + playsound(user, 'sound/weapons/Kenetic_accel.ogg', 100, 1) //Seriously who spelled it wrong + else + L.apply_damage(50, BRUTE, blocked = def_check) + +/obj/item/weapon/twohanded/required/mining_hammer/proc/Recharge() + if(!charged) + charged = TRUE + icon_state = "mining_hammer1" + playsound(src.loc, 'sound/weapons/kenetic_reload.ogg', 60, 1) diff --git a/code/modules/mining/equipment/lazarus_injector.dm b/code/modules/mining/equipment/lazarus_injector.dm new file mode 100644 index 0000000000..7199e29bf4 --- /dev/null +++ b/code/modules/mining/equipment/lazarus_injector.dm @@ -0,0 +1,61 @@ +/**********************Lazarus Injector**********************/ +/obj/item/weapon/lazarus_injector + name = "lazarus injector" + desc = "An injector with a cocktail of nanomachines and chemicals, this device can seemingly raise animals from the dead, making them become friendly to the user. Unfortunately, the process is useless on higher forms of life and incredibly costly, so these were hidden in storage until an executive thought they'd be great motivation for some of their employees." + icon = 'icons/obj/syringe.dmi' + icon_state = "lazarus_hypo" + item_state = "hypo" + throwforce = 0 + w_class = WEIGHT_CLASS_SMALL + throw_speed = 3 + throw_range = 5 + var/loaded = 1 + var/malfunctioning = 0 + var/revive_type = SENTIENCE_ORGANIC //So you can't revive boss monsters or robots with it + origin_tech = "biotech=4;magnets=6" + +/obj/item/weapon/lazarus_injector/afterattack(atom/target, mob/user, proximity_flag) + if(!loaded) + return + if(isliving(target) && proximity_flag) + if(istype(target, /mob/living/simple_animal)) + var/mob/living/simple_animal/M = target + if(M.sentience_type != revive_type) + to_chat(user, "[src] does not work on this sort of creature.") + return + if(M.stat == DEAD) + M.faction = list("neutral") + M.revive(full_heal = 1, admin_revive = 1) + if(ishostile(target)) + var/mob/living/simple_animal/hostile/H = M + if(malfunctioning) + H.faction |= list("lazarus", "\ref[user]") + H.robust_searching = 1 + H.friends += user + H.attack_same = 1 + log_game("[user] has revived hostile mob [target] with a malfunctioning lazarus injector") + else + H.attack_same = 0 + loaded = 0 + user.visible_message("[user] injects [M] with [src], reviving it.") + SSblackbox.add_details("lazarus_injector", "[M.type]") + playsound(src,'sound/effects/refill.ogg',50,1) + icon_state = "lazarus_empty" + return + else + to_chat(user, "[src] is only effective on the dead.") + return + else + to_chat(user, "[src] is only effective on lesser beings.") + return + +/obj/item/weapon/lazarus_injector/emp_act() + if(!malfunctioning) + malfunctioning = 1 + +/obj/item/weapon/lazarus_injector/examine(mob/user) + ..() + if(!loaded) + to_chat(user, "[src] is empty.") + if(malfunctioning) + to_chat(user, "The display on [src] seems to be flickering.") diff --git a/code/modules/mining/equipment/mineral_scanner.dm b/code/modules/mining/equipment/mineral_scanner.dm new file mode 100644 index 0000000000..4f76c98a28 --- /dev/null +++ b/code/modules/mining/equipment/mineral_scanner.dm @@ -0,0 +1,79 @@ +/**********************Mining Scanners**********************/ +/obj/item/device/mining_scanner + desc = "A scanner that checks surrounding rock for useful minerals; it can also be used to stop gibtonite detonations." + name = "manual mining scanner" + icon_state = "mining1" + item_state = "analyzer" + w_class = WEIGHT_CLASS_SMALL + flags = CONDUCT + slot_flags = SLOT_BELT + var/cooldown = 35 + var/current_cooldown = 0 + origin_tech = "engineering=1;magnets=1" + +/obj/item/device/mining_scanner/attack_self(mob/user) + if(!user.client) + return + if(current_cooldown <= world.time) + current_cooldown = world.time + cooldown + mineral_scan_pulse(get_turf(user)) + +//Debug item to identify all ore spread quickly +/obj/item/device/mining_scanner/admin + +/obj/item/device/mining_scanner/admin/attack_self(mob/user) + for(var/turf/closed/mineral/M in world) + if(M.scan_state) + M.icon_state = M.scan_state + qdel(src) + +/obj/item/device/t_scanner/adv_mining_scanner + desc = "A scanner that automatically checks surrounding rock for useful minerals; it can also be used to stop gibtonite detonations. This one has an extended range." + name = "advanced automatic mining scanner" + icon_state = "mining0" + item_state = "analyzer" + w_class = WEIGHT_CLASS_SMALL + flags = CONDUCT + slot_flags = SLOT_BELT + var/cooldown = 35 + var/current_cooldown = 0 + var/range = 7 + origin_tech = "engineering=3;magnets=3" + +/obj/item/device/t_scanner/adv_mining_scanner/lesser + name = "automatic mining scanner" + desc = "A scanner that automatically checks surrounding rock for useful minerals; it can also be used to stop gibtonite detonations." + range = 4 + cooldown = 50 + +/obj/item/device/t_scanner/adv_mining_scanner/scan() + if(current_cooldown <= world.time) + current_cooldown = world.time + cooldown + var/turf/t = get_turf(src) + mineral_scan_pulse(t, range) + +/proc/mineral_scan_pulse(turf/T, range = world.view) + var/list/minerals = list() + for(var/turf/closed/mineral/M in range(range, T)) + if(M.scan_state) + minerals += M + if(LAZYLEN(minerals)) + for(var/turf/closed/mineral/M in minerals) + var/obj/effect/temp_visual/mining_overlay/oldC = locate(/obj/effect/temp_visual/mining_overlay) in M + if(oldC) + qdel(oldC) + var/obj/effect/temp_visual/mining_overlay/C = new /obj/effect/temp_visual/mining_overlay(M) + C.icon_state = M.scan_state + +/obj/effect/temp_visual/mining_overlay + plane = FULLSCREEN_PLANE + layer = FLASH_LAYER + icon = 'icons/effects/ore_visuals.dmi' + appearance_flags = 0 //to avoid having TILE_BOUND in the flags, so that the 480x480 icon states let you see it no matter where you are + duration = 35 + pixel_x = -224 + pixel_y = -224 + +/obj/effect/temp_visual/mining_overlay/Initialize() + . = ..() + animate(src, alpha = 0, time = duration, easing = EASE_IN) diff --git a/code/modules/mining/equipment/resonator.dm b/code/modules/mining/equipment/resonator.dm new file mode 100644 index 0000000000..c54def1b2b --- /dev/null +++ b/code/modules/mining/equipment/resonator.dm @@ -0,0 +1,120 @@ +/**********************Resonator**********************/ +/obj/item/weapon/resonator + name = "resonator" + icon = 'icons/obj/mining.dmi' + icon_state = "resonator" + item_state = "resonator" + desc = "A handheld device that creates small fields of energy that resonate until they detonate, crushing rock. It's more effective in a vacuum." + w_class = WEIGHT_CLASS_NORMAL + force = 15 + throwforce = 10 + var/burst_time = 30 + var/fieldlimit = 4 + var/list/fields = list() + var/quick_burst_mod = 0.8 + origin_tech = "magnets=3;engineering=3" + +/obj/item/weapon/resonator/upgraded + name = "upgraded resonator" + desc = "An upgraded version of the resonator that can produce more fields at once, as well as having no damage penalty for bursting a resonance field early." + icon_state = "resonator_u" + item_state = "resonator_u" + origin_tech = "materials=4;powerstorage=3;engineering=3;magnets=3" + fieldlimit = 6 + quick_burst_mod = 1 + +/obj/item/weapon/resonator/attack_self(mob/user) + if(burst_time == 50) + burst_time = 30 + to_chat(user, "You set the resonator's fields to detonate after 3 seconds.") + else + burst_time = 50 + to_chat(user, "You set the resonator's fields to detonate after 5 seconds.") + +/obj/item/weapon/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/item/weapon/resonator/pre_attackby(atom/target, mob/user, params) + if(check_allowed_items(target, 1)) + CreateResonance(target, user) + return TRUE + +//resonance field, crushes rock, damages mobs +/obj/effect/temp_visual/resonance + name = "resonance field" + desc = "A resonating field that significantly damages anything inside of it when the field eventually ruptures. More damaging in low pressure environments." + icon_state = "shield1" + layer = ABOVE_ALL_MOB_LAYER + duration = 50 + var/resonance_damage = 20 + var/damage_multiplier = 1 + var/creator + var/obj/item/weapon/resonator/res + +/obj/effect/temp_visual/resonance/Initialize(mapload, 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 + . = ..() + +/obj/effect/temp_visual/resonance/proc/check_pressure(turf/proj_turf) + if(!proj_turf) + proj_turf = get_turf(src) + if(!istype(proj_turf)) + return + var/datum/gas_mixture/environment = proj_turf.return_air() + var/pressure = environment.return_pressure() + resonance_damage = initial(resonance_damage) + if(pressure < 50) + name = "strong [initial(name)]" + resonance_damage *= 3 + else + 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/closed/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_logs(creator, L, "used a resonator field on", "resonator") + 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/Initialize() + . = ..() + transform = matrix()*1.5 + animate(src, transform = matrix()*0.1, alpha = 50, time = 4) diff --git a/code/modules/mining/equipment/vendor_items.dm b/code/modules/mining/equipment/vendor_items.dm new file mode 100644 index 0000000000..4ff83ea21f --- /dev/null +++ b/code/modules/mining/equipment/vendor_items.dm @@ -0,0 +1,33 @@ +/**********************Mining Equipment Vendor Items**************************/ +//misc stuff you can buy from the vendor that has special code but doesn't really need its own file + +/**********************Facehugger toy**********************/ +/obj/item/clothing/mask/facehugger/toy + item_state = "facehugger_inactive" + desc = "A toy often used to play pranks on other miners by putting it in their beds. It takes a bit to recharge after latching onto something." + throwforce = 0 + real = 0 + sterile = 1 + tint = 3 //Makes it feel more authentic when it latches on + +/obj/item/clothing/mask/facehugger/toy/Die() + return + +/*********************Hivelord stabilizer****************/ +/obj/item/weapon/hivelordstabilizer + name = "stabilizing serum" + icon = 'icons/obj/chemical.dmi' + icon_state = "bottle19" + desc = "Inject certain types of monster organs with this stabilizer to preserve their healing powers indefinitely." + w_class = WEIGHT_CLASS_TINY + origin_tech = "biotech=3" + +/obj/item/weapon/hivelordstabilizer/afterattack(obj/item/organ/M, mob/user) + var/obj/item/organ/hivelord_core/C = M + if(!istype(C, /obj/item/organ/hivelord_core)) + to_chat(user, "The stabilizer only works on certain types of monster organs, generally regenerative in nature.") + return ..() + + C.preserved() + to_chat(user, "You inject the [M] with the stabilizer. It will no longer go inert.") + qdel(src) diff --git a/code/modules/mining/equipment/wormhole_jaunter.dm b/code/modules/mining/equipment/wormhole_jaunter.dm new file mode 100644 index 0000000000..135f4482fc --- /dev/null +++ b/code/modules/mining/equipment/wormhole_jaunter.dm @@ -0,0 +1,109 @@ +/**********************Jaunter**********************/ +/obj/item/device/wormhole_jaunter + name = "wormhole jaunter" + desc = "A single use device harnessing outdated wormhole technology, Nanotrasen has since turned its eyes to blue space for more accurate teleportation. The wormholes it creates are unpleasant to travel through, to say the least.\nThanks to modifications provided by the Free Golems, this jaunter can be worn on the belt to provide protection from chasms." + icon = 'icons/obj/mining.dmi' + icon_state = "Jaunter" + item_state = "electronic" + throwforce = 0 + w_class = WEIGHT_CLASS_SMALL + throw_speed = 3 + throw_range = 5 + origin_tech = "bluespace=2" + slot_flags = SLOT_BELT + +/obj/item/device/wormhole_jaunter/attack_self(mob/user) + user.visible_message("[user.name] activates the [src.name]!") + SSblackbox.add_details("jaunter", "User") // user activated + activate(user) + +/obj/item/device/wormhole_jaunter/proc/turf_check(mob/user) + var/turf/device_turf = get_turf(user) + if(!device_turf||device_turf.z==2||device_turf.z>=7) + to_chat(user, "You're having difficulties getting the [src.name] to work.") + return FALSE + return TRUE + +/obj/item/device/wormhole_jaunter/proc/get_destinations(mob/user) + var/list/destinations = list() + + if(isgolem(user)) + for(var/obj/item/device/radio/beacon/B in GLOB.teleportbeacons) + var/turf/T = get_turf(B) + if(istype(T.loc, /area/ruin/powered/golem_ship)) + destinations += B + + // In the event golem beacon is destroyed, send to station instead + if(destinations.len) + return destinations + + for(var/obj/item/device/radio/beacon/B in GLOB.teleportbeacons) + var/turf/T = get_turf(B) + if(T.z == ZLEVEL_STATION) + destinations += B + + return destinations + +/obj/item/device/wormhole_jaunter/proc/activate(mob/user) + if(!turf_check(user)) + return + + var/list/L = get_destinations(user) + if(!L.len) + to_chat(user, "The [src.name] found no beacons in the world to anchor a wormhole to.") + return + var/chosen_beacon = pick(L) + var/obj/effect/portal/wormhole/jaunt_tunnel/J = new /obj/effect/portal/wormhole/jaunt_tunnel(get_turf(src), chosen_beacon, lifespan=100) + J.target = chosen_beacon + try_move_adjacent(J) + playsound(src,'sound/effects/sparks4.ogg',50,1) + qdel(src) + +/obj/item/device/wormhole_jaunter/emp_act(power) + var/triggered = FALSE + + if(usr.get_item_by_slot(slot_belt) == src) + if(power == 1) + triggered = TRUE + else if(power == 2 && prob(50)) + triggered = TRUE + + if(triggered) + usr.visible_message("The [src] overloads and activates!") + SSblackbox.add_details("jaunter","EMP") // EMP accidental activation + activate(usr) + +/obj/item/device/wormhole_jaunter/proc/chasm_react(mob/user) + if(user.get_item_by_slot(slot_belt) == src) + to_chat(user, "Your [src] activates, saving you from the chasm!") + SSblackbox.add_details("jaunter","Chasm") // chasm automatic activation + activate(user) + else + to_chat(user, "The [src] is not attached to your belt, preventing it from saving you from the chasm. RIP.") + +//jaunter tunnel +/obj/effect/portal/wormhole/jaunt_tunnel + name = "jaunt tunnel" + icon = 'icons/effects/effects.dmi' + icon_state = "bhole3" + desc = "A stable hole in the universe made by a wormhole jaunter. Turbulent doesn't even begin to describe how rough passage through one of these is, but at least it will always get you somewhere near a beacon." + mech_sized = TRUE //save your ripley + +/obj/effect/portal/wormhole/jaunt_tunnel/teleport(atom/movable/M) + if(istype(M, /obj/effect)) + return + + if(M.anchored) + if(!(istype(M, /obj/mecha) && mech_sized)) + return + + if(istype(M, /atom/movable)) + if(do_teleport(M, target, 6)) + // KERPLUNK + playsound(M,'sound/weapons/resonator_blast.ogg',50,1) + if(iscarbon(M)) + var/mob/living/carbon/L = M + L.Weaken(3) + if(ishuman(L)) + shake_camera(L, 20, 1) + addtimer(CALLBACK(L, /mob/living/carbon.proc/vomit), 20) diff --git a/tgstation.dme b/tgstation.dme index 2d2e35f59e..d7d2b0949d 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1472,7 +1472,6 @@ #include "code\modules\mining\abandoned_crates.dm" #include "code\modules\mining\aux_base.dm" #include "code\modules\mining\aux_base_camera.dm" -#include "code\modules\mining\equipment.dm" #include "code\modules\mining\fulton.dm" #include "code\modules\mining\machine_input_output_plates.dm" #include "code\modules\mining\machine_processing.dm" @@ -1487,6 +1486,13 @@ #include "code\modules\mining\ores_coins.dm" #include "code\modules\mining\satchel_ore_boxdm.dm" #include "code\modules\mining\shelters.dm" +#include "code\modules\mining\equipment\explorer_gear.dm" +#include "code\modules\mining\equipment\kinetic_crusher.dm" +#include "code\modules\mining\equipment\lazarus_injector.dm" +#include "code\modules\mining\equipment\mineral_scanner.dm" +#include "code\modules\mining\equipment\resonator.dm" +#include "code\modules\mining\equipment\vendor_items.dm" +#include "code\modules\mining\equipment\wormhole_jaunter.dm" #include "code\modules\mining\laborcamp\laborshuttle.dm" #include "code\modules\mining\laborcamp\laborstacker.dm" #include "code\modules\mining\lavaland\ash_flora.dm"