Merge pull request #6272 from Mechoid/Mining_Expansion_The_Diggening

Mining Expansion, the Diggening.
This commit is contained in:
Atermonera
2019-07-12 23:47:42 -08:00
committed by GitHub
21 changed files with 464 additions and 39 deletions
+12 -1
View File
@@ -235,6 +235,12 @@ Proc for attack log creation, because really why not
var/atom/original_loc = user.loc
var/obj/mecha/M = null
if(istype(user.loc, /obj/mecha))
original_loc = get_turf(original_loc)
M = user.loc
var/holding = user.get_active_hand()
var/datum/progressbar/progbar
@@ -253,7 +259,12 @@ Proc for attack log creation, because really why not
. = FALSE
break
if(user.loc != original_loc && !ignore_movement)
if(M)
if(user.loc != M || (M.loc != original_loc && !ignore_movement)) // Mech coooooode.
. = FALSE
break
else if(user.loc != original_loc && !ignore_movement)
. = FALSE
break
+2
View File
@@ -63,6 +63,8 @@
H.reagents.add_reagent("carpotoxin", force)
if(H.reagents.get_reagent_amount("cryptobiolin") + force < force*2)
H.reagents.add_reagent("cryptobiolin", force)
if("halloss")
H.stun_effect_act(1, force / 2, BP_TORSO, src)
else
return
if(update) H.UpdateDamageIcon()
@@ -11,6 +11,7 @@
icon_state = "mecha_equip"
force = 5
origin_tech = list(TECH_MATERIAL = 2)
description_info = "Some equipment may gain new abilities or advantages if equipped to certain types of Exosuits."
var/equip_cooldown = 0
var/equip_ready = 1
var/energy_drain = 0
@@ -21,6 +22,7 @@
var/equip_type = null //mechaequip2
var/allow_duplicate = FALSE
var/ready_sound = 'sound/mecha/mech_reload_default.ogg' //Sound to play once the fire delay passed.
var/enable_special = FALSE // Will the tool do its special?
/obj/item/mecha_parts/mecha_equipment/proc/do_after_cooldown(target=1)
sleep(equip_cooldown)
@@ -110,6 +112,15 @@
/obj/item/mecha_parts/mecha_equipment/proc/is_melee()
return range&MELEE
/obj/item/mecha_parts/mecha_equipment/proc/enable_special_checks(atom/target)
if(ispath(required_type))
return istype(target, required_type)
for (var/path in required_type)
if (istype(target, path))
return 1
return 0
/obj/item/mecha_parts/mecha_equipment/proc/action_checks(atom/target)
if(!target)
@@ -176,6 +187,10 @@
M.equipment += src
chassis = M
src.loc = M
if(enable_special_checks(M))
enable_special = TRUE
M.log_message("[src] initialized.")
if(!M.selected)
M.selected = src
@@ -203,6 +218,7 @@
chassis.log_message("[src] removed from equipment.")
chassis = null
set_ready_state(1)
enable_special = FALSE
return
/obj/item/mecha_parts/mecha_equipment/Topic(href,href_list)
+209 -11
View File
@@ -8,11 +8,13 @@
energy_drain = 10
var/dam_force = 20
var/obj/mecha/working/ripley/cargo_holder
required_type = /obj/mecha/working
required_type = list(/obj/mecha/working)
ready_sound = 'sound/mecha/gasdisconnected.ogg'
/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp/attach(obj/mecha/M as obj)
..()
cargo_holder = M
return
/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp/action(atom/target)
@@ -28,7 +30,48 @@
occupant_message("<span class='warning'>You can't load living things into the cargo compartment.</span>")
return
if(O.anchored)
occupant_message("<span class='warning'>[target] is firmly secured.</span>")
if(enable_special)
if(istype(O, /obj/machinery/door/firedoor)) // I love doors.
var/obj/machinery/door/firedoor/FD = O
if(FD.blocked)
FD.visible_message("<span class='danger'>\The [chassis] begins prying on \the [FD]!</span>")
if(do_after(chassis.occupant,10 SECONDS,FD))
playsound(FD.loc, 'sound/machines/airlock_creaking.ogg', 100, 1)
FD.blocked = 0
FD.update_icon()
FD.open(1)
FD.visible_message("<span class='warning'>\The [chassis] tears \the [FD] open!</span>")
else if(FD.density)
FD.visible_message("<span class='warning'>\The [chassis] begins forcing \the [FD] open!</span>")
if(do_after(chassis.occupant, 5 SECONDS,FD))
playsound(FD.loc, 'sound/machines/airlock_creaking.ogg', 100, 1)
FD.visible_message("<span class='danger'>\The [chassis] forces \the [FD] open!</span>")
FD.open(1)
else
FD.visible_message("<span class='danger'>\The [chassis] forces \the [FD] closed!</span>")
FD.close(1)
else if(istype(O, /obj/machinery/door/airlock)) // D o o r s.
var/obj/machinery/door/airlock/AD = O
if(AD.locked)
occupant_message("<span class='notice'>The airlock's bolts prevent it from being forced.</span>")
else if(!AD.operating)
if(AD.welded)
AD.visible_message("<span class='warning'>\The [chassis] begins prying on \the [AD]!</span>")
if(do_after(chassis.occupant, 15 SECONDS,AD) && chassis.Adjacent(AD))
AD.welded = FALSE
AD.update_icon()
playsound(AD.loc, 'sound/machines/airlock_creaking.ogg', 100, 1)
AD.visible_message("<span class='danger'>\The [chassis] tears \the [AD] open!</span>")
if(!AD.welded)
if(density)
spawn(0)
AD.open(1)
else
spawn(0)
AD.close(1)
return
else
occupant_message("<span class='warning'>[target] is firmly secured.</span>")
return
if(cargo_holder.cargo.len >= cargo_holder.cargo_capacity)
occupant_message("<span class='warning'>Not enough room in cargo compartment.</span>")
@@ -62,6 +105,15 @@
occupant_message("<span class='warning'>You squeeze [target] with [src.name]. Something cracks.</span>")
playsound(src.loc, "fracture", 5, 1, -2) //CRACK
chassis.visible_message("<span class='warning'>[chassis] squeezes [target].</span>")
else if(chassis.occupant.a_intent == I_DISARM && enable_special)
playsound(src.loc, 'sound/mecha/hydraulic.ogg', 10, 1, -2)
M.take_overall_damage(dam_force/2)
M.adjustOxyLoss(round(dam_force/3))
M.updatehealth()
occupant_message("<span class='warning'>You slam [target] with [src.name]. Something cracks.</span>")
playsound(src.loc, "fracture", 3, 1, -2) //CRACK 2
chassis.visible_message("<span class='warning'>[chassis] slams [target].</span>")
M.throw_at(get_step(M,get_dir(src, M)), 14, 1.5, chassis)
else
step_away(M,chassis)
occupant_message("You push [target] out of the way.")
@@ -73,12 +125,12 @@
/obj/item/mecha_parts/mecha_equipment/tool/drill
name = "drill"
desc = "This is the drill that'll pierce the heavens! (Can be attached to: Combat and Engineering Exosuits)"
desc = "This is the drill that'll pierce the heavens!"
icon_state = "mecha_drill"
equip_cooldown = 30
energy_drain = 10
force = 15
required_type = list(/obj/mecha/working/ripley, /obj/mecha/combat)
required_type = list(/obj/mecha/working/ripley)
/obj/item/mecha_parts/mecha_equipment/tool/drill/action(atom/target)
if(!action_checks(target)) return
@@ -101,9 +153,13 @@
log_message("Drilled through [target]")
target.ex_act(2)
else if(istype(target, /turf/simulated/mineral))
for(var/turf/simulated/mineral/M in range(chassis,1))
if(get_dir(chassis,M)&chassis.dir)
M.GetDrilled()
if(enable_special)
for(var/turf/simulated/mineral/M in range(chassis,1))
if(get_dir(chassis,M)&chassis.dir)
M.GetDrilled()
else
var/turf/simulated/mineral/M1 = target
M1.GetDrilled()
log_message("Drilled through [target]")
if(locate(/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp) in chassis.equipment)
var/obj/structure/ore_box/ore_box = locate(/obj/structure/ore_box) in chassis:cargo
@@ -125,7 +181,7 @@
/obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill
name = "diamond drill"
desc = "This is an upgraded version of the drill that'll pierce the heavens! (Can be attached to: Combat and Engineering Exosuits)"
desc = "This is an upgraded version of the drill that'll pierce the heavens!"
icon_state = "mecha_diamond_drill"
origin_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 3)
equip_cooldown = 10
@@ -150,9 +206,13 @@
log_message("Drilled through [target]")
target.ex_act(3)
else if(istype(target, /turf/simulated/mineral))
for(var/turf/simulated/mineral/M in range(chassis,1))
if(get_dir(chassis,M)&chassis.dir)
M.GetDrilled()
if(enable_special)
for(var/turf/simulated/mineral/M in range(chassis,1))
if(get_dir(chassis,M)&chassis.dir)
M.GetDrilled()
else
var/turf/simulated/mineral/M1 = target
M1.GetDrilled()
log_message("Drilled through [target]")
if(locate(/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp) in chassis.equipment)
var/obj/structure/ore_box/ore_box = locate(/obj/structure/ore_box) in chassis:cargo
@@ -165,6 +225,102 @@
target.ex_act(2)
return 1
/obj/item/mecha_parts/mecha_equipment/tool/drill/bore
name = "depth bore"
desc = "This is the drill that'll pierce the depths!"
icon_state = "mecha_bore"
equip_cooldown = 5 SECONDS
energy_drain = 30
force = 20
required_type = list(/obj/mecha/working/ripley)
/obj/item/mecha_parts/mecha_equipment/tool/drill/bore/action(atom/target)
if(!action_checks(target)) return
if(isobj(target))
var/obj/target_obj = target
if(target_obj.unacidable) return
set_ready_state(0)
chassis.use_power(energy_drain)
chassis.visible_message("<span class='danger'>[chassis] starts to bore into \the [target]</span>", "<span class='warning'>You hear the bore.</span>")
occupant_message("<span class='danger'>You start to bore into \the [target]</span>")
var/T = chassis.loc
var/C = target.loc
if(do_after_cooldown(target))
if(T == chassis.loc && src == chassis.selected)
if(istype(target, /turf/simulated/wall))
var/turf/simulated/wall/W = target
if(W.reinf_material)
occupant_message("<span class='warning'>[target] is too durable to bore through.</span>")
else
log_message("Bored through [target]")
target.ex_act(2)
else if(istype(target, /turf/simulated/mineral))
var/turf/simulated/mineral/M = target
if(enable_special && !M.density)
M.ex_act(2)
log_message("Bored into [target]")
else
M.GetDrilled()
log_message("Bored through [target]")
if(locate(/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp) in chassis.equipment)
var/obj/structure/ore_box/ore_box = locate(/obj/structure/ore_box) in chassis:cargo
if(ore_box)
for(var/obj/item/weapon/ore/ore in range(chassis,1))
if(get_dir(chassis,ore)&chassis.dir)
ore.Move(ore_box)
if(locate(/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp) in chassis.equipment)
var/obj/structure/ore_box/ore_box = locate(/obj/structure/ore_box) in chassis:cargo
if(ore_box)
for(var/obj/item/weapon/ore/ore in range(chassis,1))
if(get_dir(chassis,ore)&chassis.dir)
ore.Move(ore_box)
else if(target.loc == C)
log_message("Drilled through [target]")
target.ex_act(2)
return 1
/obj/item/mecha_parts/mecha_equipment/tool/orescanner
name = "mounted ore scanner"
desc = "An exosuit-mounted ore scanner."
icon_state = "mecha_analyzer"
origin_tech = list(TECH_MATERIAL = 2, TECH_MAGNET = 2, TECH_POWER = 2)
equip_cooldown = 5
energy_drain = 30
range = MELEE|RANGED
equip_type = EQUIP_SPECIAL
ready_sound = 'sound/items/goggles_charge.ogg'
required_type = list(/obj/mecha/working/ripley)
var/obj/item/weapon/mining_scanner/my_scanner = null
var/exact_scan = FALSE
/obj/item/mecha_parts/mecha_equipment/tool/orescanner/Initialize()
my_scanner = new(src)
return ..()
/obj/item/mecha_parts/mecha_equipment/tool/orescanner/Destroy()
QDEL_NULL(my_scanner)
return ..()
/obj/item/mecha_parts/mecha_equipment/tool/orescanner/action(var/atom/target)
if(!action_checks(target) || get_dist(chassis, target) > 5)
return FALSE
if(!enable_special)
target = get_turf(chassis)
var/datum/beam/ScanBeam = chassis.Beam(target,"g_beam",'icons/effects/beam.dmi',time=2 SECONDS,10,/obj/effect/ebeam,2)
if(do_after(chassis.occupant, 2 SECONDS))
my_scanner.ScanTurf(target, chassis.occupant, exact_scan)
QDEL_NULL(ScanBeam)
/obj/item/mecha_parts/mecha_equipment/tool/orescanner/advanced
name = "advanced ore scanner"
icon_state = "mecha_analyzer_adv"
exact_scan = TRUE
/obj/item/mecha_parts/mecha_equipment/tool/extinguisher
name = "extinguisher"
desc = "Exosuit-mounted extinguisher (Can be attached to: Engineering exosuits)"
@@ -235,6 +391,48 @@
/obj/item/mecha_parts/mecha_equipment/tool/extinguisher/on_reagent_change()
return
/obj/item/mecha_parts/mecha_equipment/tool/powertool
name = "pneumatic wrench"
desc = "An exosuit-mounted hydraulic wrench."
icon_state = "mecha_wrench"
origin_tech = list(TECH_MATERIAL = 2, TECH_MAGNET = 2, TECH_POWER = 2)
equip_cooldown = 3
energy_drain = 15
range = MELEE
equip_type = EQUIP_UTILITY
ready_sound = 'sound/items/Ratchet.ogg'
required_type = list(/obj/mecha/working/ripley)
var/obj/item/my_tool = null
var/tooltype = /obj/item/weapon/tool/wrench/power
/obj/item/mecha_parts/mecha_equipment/tool/powertool/Initialize()
my_tool = new tooltype(src)
my_tool.name = name
my_tool.anchored = TRUE
my_tool.canremove = FALSE
return ..()
/obj/item/mecha_parts/mecha_equipment/tool/powertool/Destroy()
QDEL_NULL(my_tool)
return ..()
/obj/item/mecha_parts/mecha_equipment/tool/powertool/action(var/atom/target)
if(!action_checks(target))
return FALSE
if(isliving(target))
my_tool.attack(target, chassis.occupant, BP_TORSO)
target.attackby(my_tool,chassis.occupant)
/obj/item/mecha_parts/mecha_equipment/tool/powertool/prybar
name = "pneumatic prybar"
desc = "An exosuit-mounted pneumatic prybar."
icon_state = "mecha_crowbar"
tooltype = /obj/item/weapon/tool/crowbar/power
ready_sound = 'sound/mecha/gasdisconnected.ogg'
/obj/item/mecha_parts/mecha_equipment/tool/rcd
name = "mounted RCD"
desc = "An exosuit-mounted Rapid Construction Device. (Can be attached to: Any exosuit)"
+13 -1
View File
@@ -13,6 +13,10 @@
var/atom/target = null
var/open_panel = 0
var/image_overlay = null
var/blast_dev = -1
var/blast_heavy = -1
var/blast_light = 2
var/blast_flash = 3
/obj/item/weapon/plastique/New()
wires = new(src)
@@ -72,7 +76,7 @@
if(!target)
target = src
if(location)
explosion(location, -1, -1, 2, 3)
explosion(location, blast_dev, blast_heavy, blast_light, blast_flash)
if(target)
if (istype(target, /turf/simulated/wall))
@@ -88,3 +92,11 @@
/obj/item/weapon/plastique/attack(mob/M as mob, mob/user as mob, def_zone)
return
/obj/item/weapon/plastique/seismic
name = "seismic charge"
desc = "Used to dig holes in specific areas without too much extra hole."
blast_heavy = 3
blast_light = 5
blast_flash = 8
@@ -41,6 +41,19 @@
/obj/item/weapon/grenade/spawnergrenade/manhacks/raider
spawner_type = /mob/living/simple_mob/mechanical/viscerator/raider
/obj/item/weapon/grenade/spawnergrenade/manhacks/station
desc = "It is set to detonate in 5 seconds. It will deploy three weaponized survey drones."
deliveryamt = 3
spawner_type = /mob/living/simple_mob/mechanical/viscerator/station
origin_tech = list(TECH_MATERIAL = 3, TECH_MAGNET = 3, TECH_ILLEGAL = 1)
/obj/item/weapon/grenade/spawnergrenade/ward
name = "sentry delivery grenade"
desc = "It is set to detonate in 5 seconds. It will deploy a single thermal-optic sentry drone."
spawner_type = /mob/living/simple_mob/mechanical/ward/monitor/crew
deliveryamt = 1
origin_tech = list(TECH_MATERIAL = 4, TECH_MAGNET = 3, TECH_BLUESPACE = 2)
/obj/item/weapon/grenade/spawnergrenade/spesscarp
name = "carp delivery grenade"
spawner_type = /mob/living/simple_mob/animal/space/carp
+18
View File
@@ -200,6 +200,24 @@ BLIND // can't see anything
name = "prescription optical material scanner"
prescription = 1
/obj/item/clothing/glasses/graviton
name = "graviton goggles"
desc = "The secrets of space travel are.. not quite yours."
icon_state = "grav"
item_state_slots = list(slot_r_hand_str = "glasses", slot_l_hand_str = "glasses")
origin_tech = list(TECH_MAGNET = 2, TECH_BLUESPACE = 1)
darkness_view = 5
toggleable = 1
action_button_name = "Toggle Goggles"
off_state = "denight"
vision_flags = SEE_OBJS | SEE_TURFS
flash_protection = FLASH_PROTECTION_REDUCED
enables_planes = list(VIS_FULLBRIGHT, VIS_MESONS)
/obj/item/clothing/glasses/graviton/New()
..()
overlay = global_hud.material
/obj/item/clothing/glasses/regular
name = "prescription glasses"
desc = "Made by Nerd. Co."
@@ -89,6 +89,19 @@
new_grenade.activate(H)
new_grenade.throw_at(target,fire_force,fire_distance)
/obj/item/rig_module/grenade_launcher/smoke
name = "mounted smoke-bomb launcher"
desc = "A shoulder-mounted smoke-bomb dispenser."
interface_name = "integrated smoke-bomb launcher"
interface_desc = "Discharges loaded smoke-bombs against the wearer's location."
fire_force = 15
charges = list(
list("smoke bomb", "smoke bomb", /obj/item/weapon/grenade/smokebomb, 6)
)
/obj/item/rig_module/mounted
name = "mounted laser cannon"
@@ -192,8 +192,6 @@
smoke = null
return ..()
/obj/item/rig_module/self_destruct/activate()
return
@@ -15,29 +15,40 @@
/datum/rig_vision/nvg
mode = "night vision"
/datum/rig_vision/nvg/New()
glasses = new /obj/item/clothing/glasses/night
/datum/rig_vision/thermal
mode = "thermal scanner"
/datum/rig_vision/thermal/New()
glasses = new /obj/item/clothing/glasses/thermal
/datum/rig_vision/meson
mode = "meson scanner"
/datum/rig_vision/meson/New()
glasses = new /obj/item/clothing/glasses/meson
/datum/rig_vision/sechud
mode = "security HUD"
/datum/rig_vision/sechud/New()
glasses = new /obj/item/clothing/glasses/hud/security
/datum/rig_vision/medhud
mode = "medical HUD"
/datum/rig_vision/medhud/New()
glasses = new /obj/item/clothing/glasses/hud/health
/datum/rig_vision/material
mode = "material scanner"
/datum/rig_vision/material/New()
glasses = new /obj/item/clothing/glasses/material
/obj/item/rig_module/vision
name = "hardsuit visor"
@@ -76,6 +87,7 @@
interface_desc = "An integrated multi-mode vision system."
vision_modes = list(/datum/rig_vision/meson,
/datum/rig_vision/material,
/datum/rig_vision/nvg,
/datum/rig_vision/thermal,
/datum/rig_vision/sechud,
@@ -94,6 +106,33 @@
vision_modes = list(/datum/rig_vision/meson)
/obj/item/rig_module/vision/material
name = "hardsuit material scanner"
desc = "A layered, translucent visor system for a hardsuit."
icon_state = "meson"
usable = 0
interface_name = "material scanner"
interface_desc = "An integrated material scanner."
vision_modes = list(/datum/rig_vision/material)
/obj/item/rig_module/vision/mining
name = "hardsuit mining scanners"
desc = "A layered, translucent visor system for a hardsuit."
icon_state = "optics"
usable = 0
interface_name = "mining scanners"
interface_desc = "An integrated mining scanner array."
vision_modes = list(/datum/rig_vision/material,
/datum/rig_vision/meson)
/obj/item/rig_module/vision/thermal
name = "hardsuit thermal scanner"
+18 -8
View File
@@ -6,14 +6,18 @@
item_state = "electronic"
origin_tech = list(TECH_MAGNET = 1, TECH_ENGINEERING = 1)
matter = list(DEFAULT_WALL_MATERIAL = 150)
var/scan_time = 5 SECONDS
/obj/item/weapon/mining_scanner/attack_self(mob/user as mob)
user << "You begin sweeping \the [src] about, scanning for metal deposits."
playsound(loc, 'sound/items/goggles_charge.ogg', 50, 1, -6)
if(!do_after(user, 50))
if(!do_after(user, scan_time))
return
ScanTurf(user, get_turf(user))
/obj/item/weapon/mining_scanner/proc/ScanTurf(var/atom/target, var/mob/user, var/exact = FALSE)
var/list/metals = list(
"surface minerals" = 0,
"precious metals" = 0,
@@ -22,7 +26,9 @@
"anomalous matter" = 0
)
for(var/turf/simulated/T in range(2, get_turf(user)))
var/turf/Turf = get_turf(target)
for(var/turf/simulated/T in range(2, Turf))
if(!T.has_resources)
continue
@@ -39,14 +45,18 @@
if(ore_type) metals[ore_type] += T.resources[metal]
user << "\icon[src] <span class='notice'>The scanner beeps and displays a readout.</span>"
to_chat(user, "\icon[src] <span class='notice'>The scanner beeps and displays a readout.</span>")
for(var/ore_type in metals)
var/result = "no sign"
switch(metals[ore_type])
if(1 to 25) result = "trace amounts"
if(26 to 75) result = "significant amounts"
if(76 to INFINITY) result = "huge quantities"
if(!exact)
switch(metals[ore_type])
if(1 to 25) result = "trace amounts"
if(26 to 75) result = "significant amounts"
if(76 to INFINITY) result = "huge quantities"
user << "- [result] of [ore_type]."
else
result = metals[ore_type]
to_chat(user, "- [result] of [ore_type].")
@@ -19,21 +19,43 @@
new /datum/data/mining_equipment("Cigar", /obj/item/clothing/mask/smokable/cigarette/cigar/havana, 150),
new /datum/data/mining_equipment("Soap", /obj/item/weapon/soap/nanotrasen, 200),
new /datum/data/mining_equipment("Laser Pointer", /obj/item/device/laser_pointer, 900),
new /datum/data/mining_equipment("Geiger Counter", /obj/item/device/geiger, 750),
new /datum/data/mining_equipment("Plush Toy", /obj/random/plushie, 300),
new /datum/data/mining_equipment("Umbrella", /obj/item/weapon/melee/umbrella/random, 200),
// new /datum/data/mining_equipment("Fulton Beacon", /obj/item/fulton_core, 500),
new /datum/data/mining_equipment("Point Transfer Card", /obj/item/weapon/card/mining_point_card, 500),
// new /datum/data/mining_equipment("Fulton Pack", /obj/item/extraction_pack, 1200),
new /datum/data/mining_equipment("Silver Pickaxe", /obj/item/weapon/pickaxe/silver, 1200),
// new /datum/data/mining_equipment("Space Cash", /obj/item/weapon/spacecash/c1000, 2000),
// new /datum/data/mining_equipment("Industrial Hardsuit - Control Module", /obj/item/weapon/rig/industrial, 2000),
// new /datum/data/mining_equipment("Industrial Hardsuit - Plasma Cutter", /obj/item/rig_module/device/plasmacutter, 800),
// new /datum/data/mining_equipment("Industrial Hardsuit - Drill", /obj/item/rig_module/device/drill, 2000),
// new /datum/data/mining_equipment("Industrial Hardsuit - Ore Scanner", /obj/item/rig_module/device/orescanner, 1000),
// new /datum/data/mining_equipment("Industrial Hardsuit - Material Scanner", /obj/item/rig_module/vision/material, 500),
// new /datum/data/mining_equipment("Industrial Hardsuit - Maneuvering Jets", /obj/item/rig_module/maneuvering_jets, 1250),
// new /datum/data/mining_equipment("Diamond Pickaxe", /obj/item/weapon/pickaxe/diamond, 2000),
new /datum/data/mining_equipment("Diamond Pickaxe", /obj/item/weapon/pickaxe/diamond, 2000),
new /datum/data/mining_equipment("Fishing Net", /obj/item/weapon/material/fishing_net, 500),
new /datum/data/mining_equipment("Titanium Fishing Rod", /obj/item/weapon/material/fishing_rod/modern, 1000)
new /datum/data/mining_equipment("Titanium Fishing Rod", /obj/item/weapon/material/fishing_rod/modern, 1000),
// new /datum/data/mining_equipment("Space Cash", /obj/item/weapon/spacecash/c1000, 2000),
new /datum/data/mining_equipment("Industrial Hardsuit - Control Module", /obj/item/weapon/rig/industrial, 10000),
new /datum/data/mining_equipment("Industrial Hardsuit - Plasma Cutter", /obj/item/rig_module/device/plasmacutter, 800),
new /datum/data/mining_equipment("Industrial Hardsuit - Drill", /obj/item/rig_module/device/drill, 2000),
new /datum/data/mining_equipment("Industrial Hardsuit - Ore Scanner", /obj/item/rig_module/device/orescanner, 1000),
new /datum/data/mining_equipment("Industrial Hardsuit - Advanced Optics", /obj/item/rig_module/vision/mining, 1250),
new /datum/data/mining_equipment("Industrial Hardsuit - Maneuvering Jets", /obj/item/rig_module/maneuvering_jets, 1250),
new /datum/data/mining_equipment("Hardsuit - Intelligence Storage", /obj/item/rig_module/ai_container, 2500),
new /datum/data/mining_equipment("Hardsuit - Smoke Bomb Deployer", /obj/item/rig_module/grenade_launcher/smoke, 2000),
new /datum/data/mining_equipment("Industrial Equipment - Sheet-Snatcher", /obj/item/weapon/gun/magnetic/matfed, 3000),
new /datum/data/mining_equipment("Industrial Equipment - Phoron Bore",/obj/item/weapon/storage/bag/sheetsnatcher, 500),
new /datum/data/mining_equipment("Digital Tablet - Standard", /obj/item/modular_computer/tablet/preset/custom_loadout/standard, 500),
new /datum/data/mining_equipment("Digital Tablet - Advanced", /obj/item/modular_computer/tablet/preset/custom_loadout/advanced, 1000),
new /datum/data/mining_equipment("Fine Excavation Kit - Chisels",/obj/item/weapon/storage/excavation, 500),
new /datum/data/mining_equipment("Fine Excavation Kit - Measuring Tape",/obj/item/device/measuring_tape, 125),
new /datum/data/mining_equipment("Fine Excavation Kit - Hand Pick",/obj/item/weapon/pickaxe/hand, 375),
new /datum/data/mining_equipment("Explosive Excavation Kit - Plastic Charge",/obj/item/weapon/plastique/seismic, 750),
new /datum/data/mining_equipment("Injector (L) - Glucose",/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose, 500),
new /datum/data/mining_equipment("Injector (L) - Panacea",/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/purity, 500),
new /datum/data/mining_equipment("Injector (L) - Trauma",/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/brute, 500),
new /datum/data/mining_equipment("Nanopaste Tube", /obj/item/stack/nanopaste, 1000),
new /datum/data/mining_equipment("Misc: Graviton Visor", /obj/item/clothing/glasses/graviton, 1500),
new /datum/data/mining_equipment("Defense Equipment - Phase Pistol",/obj/item/weapon/gun/energy/phasegun/pistol, 400),
new /datum/data/mining_equipment("Defense Equipment - Smoke Bomb",/obj/item/weapon/grenade/smokebomb, 100),
new /datum/data/mining_equipment("Defense Equipment - Razor Drone Deployer",/obj/item/weapon/grenade/spawnergrenade/manhacks/station, 1000),
new /datum/data/mining_equipment("Defense Equipment - Sentry Drone Deployer",/obj/item/weapon/grenade/spawnergrenade/ward, 1500),
new /datum/data/mining_equipment("Defense Equipment - Steel Machete", /obj/item/weapon/material/knife/machete, 500)
)
/datum/data/mining_equipment
@@ -63,4 +63,24 @@
. = ..()
if(!.) // Not friendly, see if they're a baddie first.
if(L.mind && raiders.is_antagonist(L.mind))
return TRUE
return TRUE
// Variant that is neutral, and thus on the station's side. It checks records.
/mob/living/simple_mob/mechanical/viscerator/station
icon_state = "viscerator_b_attack"
icon_living = "viscerator_b_attack"
faction = "station"
maxHealth = 20
health = 20
melee_damage_lower = 2
melee_damage_upper = 5
base_attack_cooldown = 8
/mob/living/simple_mob/mechanical/viscerator/station/IIsAlly(mob/living/L)
. = ..()
if(!.)
if(isrobot(L)) // They ignore synths.
return TRUE
return L.assess_perp(src, FALSE, FALSE, TRUE, FALSE) <= 4
@@ -43,7 +43,20 @@
faction = "syndicate"
/mob/living/simple_mob/mechanical/ward/monitor/crew
faction = "neutral"
icon_state = "ward-nt"
/mob/living/simple_mob/mechanical/ward/monitor/crew/attackby(var/obj/item/O as obj, var/mob/user as mob)
if(istype(O, /obj/item/weapon/card/id) && !owner)
owner = user
return
..()
/mob/living/simple_mob/mechanical/ward/monitor/crew/IIsAlly(mob/living/L)
. = ..()
if(!.)
if(isrobot(L)) // They ignore synths.
return TRUE
return L.assess_perp(src, FALSE, FALSE, TRUE, FALSE) <= 4
/mob/living/simple_mob/mechanical/ward/monitor/death()
if(owner)
@@ -55,10 +68,10 @@
/mob/living/simple_mob/mechanical/ward/monitor/update_icon()
if(seen_mobs.len)
icon_living = "ward_spotted"
icon_living = "[initial(icon_state)]_spotted"
glow_color = "#FF0000"
else
icon_living = "ward"
icon_living = "[initial(icon_state)]_ward"
glow_color = "#00FF00"
handle_light() // Update the light immediately.
..()
@@ -118,4 +131,4 @@
return FALSE
/datum/ai_holder/simple_mob/monitor/ranged_attack(atom/A)
return FALSE
return FALSE
+1 -1
View File
@@ -63,7 +63,7 @@
icon_state = "emitter"
fire_sound = 'sound/weapons/emitter.ogg'
light_color = "#00CC33"
excavation_amount = 70 // 3 shots to mine a turf
excavation_amount = 140 // 2 shots to dig a standard rock turf. Superior due to being a mounted tool beam, to make it actually viable.
muzzle_type = /obj/effect/projectile/muzzle/emitter
tracer_type = /obj/effect/projectile/tracer/emitter
+1 -1
View File
@@ -136,7 +136,7 @@
if(isrobot(user))
return
if(!I)
if(!I || I.anchored || !I.canremove)
return
user.drop_item()
+40
View File
@@ -616,6 +616,46 @@
materials = list(DEFAULT_WALL_MATERIAL = 7500, "diamond" = 4875)
build_path = /obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill
/datum/design/item/mecha/ground_drill
name = "Surface Bore"
desc = "A heavy duty bore. Bigger, better, stronger than the core sampler, but not quite as good as a large drill."
id = "mech_ground_drill"
req_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 2, TECH_PHORON = 1)
materials = list(DEFAULT_WALL_MATERIAL = 7000, "silver" = 3000, "phoron" = 2000)
build_path = /obj/item/mecha_parts/mecha_equipment/tool/drill/bore
/datum/design/item/mecha/orescanner
name = "Ore Scanner"
desc = "A hefty device used to scan for subterranean veins of ore."
id = "mech_ore_scanner"
req_tech = list(TECH_MATERIAL = 2, TECH_MAGNET = 2, TECH_POWER = 2)
materials = list(DEFAULT_WALL_MATERIAL = 4000, "glass" = 1000)
build_path = /obj/item/mecha_parts/mecha_equipment/tool/orescanner
/datum/design/item/mecha/advorescanner
name = "Advanced Ore Scanner"
desc = "A hefty device used to scan for the exact volumes of subterranean veins of ore."
id = "mech_ore_scanner_adv"
req_tech = list(TECH_MATERIAL = 5, TECH_MAGNET = 4, TECH_POWER = 4, TECH_BLUESPACE = 2)
materials = list(DEFAULT_WALL_MATERIAL = 5000, "osmium" = 3000, "silver" = 1000)
build_path = /obj/item/mecha_parts/mecha_equipment/tool/orescanner/advanced
/datum/design/item/mecha/powerwrench
name = "hydraulic wrench"
desc = "A large, hydraulic wrench."
id = "mech_wrench"
req_tech = list(TECH_MATERIAL = 2, TECH_ENGINEERING = 2, TECH_POWER = 2)
materials = list(DEFAULT_WALL_MATERIAL = 5000, "plastic" = 2000, "glass" = 1250)
build_path = /obj/item/mecha_parts/mecha_equipment/tool/powertool
/datum/design/item/mecha/powercrowbar
name = "hydraulic prybar"
desc = "A large, hydraulic prybar."
id = "mech_crowbar"
req_tech = list(TECH_MATERIAL = 2, TECH_ENGINEERING = 2, TECH_POWER = 2)
materials = list(DEFAULT_WALL_MATERIAL = 4000, "osmium" = 3000, "glass" = 1000)
build_path = /obj/item/mecha_parts/mecha_equipment/tool/powertool/prybar
/datum/design/item/mecha/generator_nuclear
name = "Nuclear Reactor"
desc = "Exosuit-held nuclear reactor. Converts uranium and everyone's health to energy."
Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.9 KiB

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 10 KiB