diff --git a/code/game/mecha/equipment/mecha_equipment.dm b/code/game/mecha/equipment/mecha_equipment.dm
index 7b3dcbf899d..0db0dff7ea1 100644
--- a/code/game/mecha/equipment/mecha_equipment.dm
+++ b/code/game/mecha/equipment/mecha_equipment.dm
@@ -91,10 +91,18 @@
var/C = chassis.loc
set_ready_state(0)
chassis.use_power(energy_drain)
- . = do_after(chassis.occupant, equip_cooldown, target=target)
+ . = do_after(chassis.occupant, equip_cooldown, target = target)
set_ready_state(1)
- if(!chassis || chassis.loc != C || src != chassis.selected)
- return 0
+ if(!chassis || chassis.loc != C || src != chassis.selected || !(get_dir(chassis, target) & chassis.dir))
+ return FALSE
+
+/obj/item/mecha_parts/mecha_equipment/proc/do_after_mecha(atom/target, delay)
+ if(!chassis)
+ return
+ var/C = chassis.loc
+ . = do_after(chassis.occupant, delay, target = target)
+ if(!chassis || chassis.loc != C || src != chassis.selected || !(get_dir(chassis, target) & chassis.dir))
+ return FALSE
/obj/item/mecha_parts/mecha_equipment/proc/can_attach(obj/mecha/M)
if(istype(M))
diff --git a/code/game/mecha/equipment/tools/mining_tools.dm b/code/game/mecha/equipment/tools/mining_tools.dm
index 635f1718134..445d881ee50 100644
--- a/code/game/mecha/equipment/tools/mining_tools.dm
+++ b/code/game/mecha/equipment/tools/mining_tools.dm
@@ -1,54 +1,69 @@
+
// Drill, Diamond drill, Mining scanner
+#define DRILL_BASIC 1
+#define DRILL_HARDENED 2
+
/obj/item/mecha_parts/mecha_equipment/drill
name = "exosuit drill"
desc = "Equipment for engineering and combat exosuits. This is the drill that'll pierce the heavens!"
icon_state = "mecha_drill"
- equip_cooldown = 30
+ equip_cooldown = 15
energy_drain = 10
force = 15
+ sharp = TRUE
+ var/drill_delay = 7
+ var/drill_level = DRILL_BASIC
/obj/item/mecha_parts/mecha_equipment/drill/action(atom/target)
if(!action_checks(target))
return
- if(istype(target, /turf/space))
+ if(isspaceturf(target))
return
if(isobj(target))
var/obj/target_obj = target
- if(target_obj.unacidable && !istype(target_obj, /obj/mecha))
+ if(target_obj.unacidable && !ismecha(target_obj))
occupant_message("[target] is too durable to drill through.")
return
target.visible_message("[chassis] starts to drill [target].",
"[chassis] starts to drill [target]...",
- blind_message = "You hear drilling.")
+ "You hear drilling.")
+
if(do_after_cooldown(target))
+ set_ready_state(FALSE)
+ log_message("Started drilling [target]")
if(isturf(target))
var/turf/T = target
T.drill_act(src)
- else
- log_message("Drilled through [target]")
+ set_ready_state(TRUE)
+ return
+ while(do_after_mecha(target, drill_delay))
if(isliving(target))
- if(istype(src , /obj/item/mecha_parts/mecha_equipment/drill/diamonddrill))
- drill_mob(target, chassis.occupant, 120)
- else
- drill_mob(target, chassis.occupant)
+ drill_mob(target, chassis.occupant)
+ playsound(src, 'sound/weapons/drill.ogg', 40, TRUE)
+ else if(istype(target, /obj))
+ var/obj/O = target
+ //O.take_damage(15, BRUTE, 0, FALSE, get_dir(chassis, target))
+ O.ex_act(2)//TO-DO-OBJECT-DAMAGE: Kill off when everything is damageable
+ playsound(src, 'sound/weapons/drill.ogg', 40, TRUE)
else
- target.ex_act(2)
+ set_ready_state(TRUE)
+ return
+ set_ready_state(TRUE)
/turf/proc/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill)
return
-/turf/simulated/floor/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill)
- ex_act(1)
-
/turf/simulated/wall/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill)
- ex_act(2)
+ if(drill.do_after_mecha(src, 60 / drill.drill_level))
+ drill.log_message("Drilled through [src]")
+ dismantle_wall(TRUE, FALSE)
/turf/simulated/wall/r_wall/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill)
- if(istype(drill, /obj/item/mecha_parts/mecha_equipment/drill/diamonddrill))
- if(drill.do_after_cooldown(src))//To slow down how fast mechs can drill through the station
+ if(drill.drill_level >= DRILL_HARDENED)
+ if(drill.do_after_mecha(src, 120 / drill.drill_level))
drill.log_message("Drilled through [src]")
- ex_act(3)
+ dismantle_wall(TRUE, FALSE)
else
drill.occupant_message("[src] is too durable to drill through.")
@@ -59,24 +74,17 @@
drill.log_message("Drilled through [src]")
drill.move_ores()
-/turf/simulated/floor/plating/asteroid/airless/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill)
- if(istype(drill, /obj/item/mecha_parts/mecha_equipment/drill/diamonddrill))
- for(var/turf/simulated/floor/plating/asteroid/airless/M in range(1, src))
- M.gets_drilled()
- else
- for(var/turf/simulated/floor/plating/asteroid/airless/M in range(1, drill.chassis))
- if(get_dir(drill.chassis, M) & drill.chassis.dir)
- M.gets_drilled()
+/turf/simulated/floor/plating/asteroid/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill)
+ for(var/turf/simulated/floor/plating/asteroid/M in range(1, drill.chassis))
+ if((get_dir(drill.chassis, M) & drill.chassis.dir) && !M.dug)
+ M.gets_dug()
drill.log_message("Drilled through [src]")
drill.move_ores()
/obj/item/mecha_parts/mecha_equipment/drill/proc/move_ores()
- if(locate(/obj/item/mecha_parts/mecha_equipment/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/stack/ore/ore in range(1, chassis))
- if(get_dir(chassis, ore) & chassis.dir)
- ore.Move(ore_box)
+ if(locate(/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp) in chassis.equipment && istype(chassis, /obj/mecha/working/ripley))
+ var/obj/mecha/working/ripley/R = chassis //we could assume that it's a ripley because it has a clamp, but that's ~unsafe~ and ~bad practice~
+ R.collect_ore()
/obj/item/mecha_parts/mecha_equipment/drill/can_attach(obj/mecha/M)
if(..())
@@ -84,25 +92,44 @@
return 1
return 0
-/obj/item/mecha_parts/mecha_equipment/drill/proc/drill_mob(mob/living/target, mob/user, var/drill_damage=80)
- target.visible_message("[chassis] drills [target] with [src].", \
- "[chassis] drills [target] with [src].")
+/obj/item/mecha_parts/mecha_equipment/drill/proc/drill_mob(mob/living/target, mob/user)
+ target.visible_message("[chassis] is drilling [target] with [src]!",
+ "[chassis] is drilling you with [src]!")
add_attack_logs(user, target, "DRILLED with [src] (INTENT: [uppertext(user.a_intent)]) (DAMTYPE: [uppertext(damtype)])")
- if(target.stat == DEAD && target.butcher_results)
- target.harvest(chassis) // Butcher the mob with our drill.
+ if(target.stat == DEAD && target.getBruteLoss() >= 200)
+ add_attack_logs(user, target, "gibbed")
+ if(LAZYLEN(target.butcher_results))
+ target.harvest(chassis) // Butcher the mob with our drill.
+ else
+ target.gib()
else
- target.take_organ_damage(drill_damage)
+ var/splatter_dir = get_dir(chassis, target)
+ if(ishuman(target))
+ var/mob/living/carbon/human/H = target
+ var/obj/item/organ/external/target_part = H.get_organ(ran_zone("chest"))
+ H.apply_damage(10, BRUTE, "chest", H.run_armor_check(target_part, "melee"))
- if(target)
- target.Paralyse(10)
+ //blood splatters
+ blood_color = H.dna.species.blood_color
+ new /obj/effect/temp_visual/dir_setting/bloodsplatter(H.drop_location(), splatter_dir, blood_color)
+
+ //organs go everywhere
+ if(target_part && prob(10 * drill_level))
+ target_part.droplimb()
+ else
+ target.adjustBruteLoss(10)
+ if(isalien(target))
+ new /obj/effect/temp_visual/dir_setting/bloodsplatter/xenosplatter(target.drop_location(), splatter_dir)
/obj/item/mecha_parts/mecha_equipment/drill/diamonddrill
name = "diamond-tipped exosuit drill"
desc = "Equipment for engineering and combat exosuits. This is an upgraded version of the drill that'll pierce the heavens!"
icon_state = "mecha_diamond_drill"
origin_tech = "materials=4;engineering=4"
- equip_cooldown = 20
+ equip_cooldown = 10
+ drill_delay = 4
+ drill_level = DRILL_HARDENED
force = 15
@@ -111,35 +138,27 @@
desc = "Equipment for engineering and combat exosuits. It will automatically check surrounding rock for useful minerals."
icon_state = "mecha_analyzer"
selectable = 0
- equip_cooldown = 30
- var/scanning = 0
+ equip_cooldown = 15
+ var/scanning_time = 0
-/obj/item/mecha_parts/mecha_equipment/mining_scanner/attach(obj/mecha/M)
+/obj/item/mecha_parts/mecha_equipment/mining_scanner/Initialize(mapload)
. = ..()
- START_PROCESSING(SSobj, src)
- M.occupant_sight_flags |= SEE_TURFS
- if(M.occupant)
- M.occupant.update_sight()
+ START_PROCESSING(SSfastprocess, src)
-/obj/item/mecha_parts/mecha_equipment/mining_scanner/detach()
- chassis.occupant_sight_flags &= ~SEE_TURFS
- STOP_PROCESSING(SSobj, src)
- if(chassis.occupant)
- chassis.occupant.update_sight()
+/obj/item/mecha_parts/mecha_equipment/mining_scanner/Destroy()
+ STOP_PROCESSING(SSfastprocess, src)
return ..()
/obj/item/mecha_parts/mecha_equipment/mining_scanner/process()
if(!loc)
+ STOP_PROCESSING(SSfastprocess, src)
qdel(src)
- if(scanning)
- return
- if(istype(loc,/obj/mecha/working))
+ if(istype(loc, /obj/mecha/working) && scanning_time <= world.time)
var/obj/mecha/working/mecha = loc
if(!mecha.occupant)
return
- var/list/occupant = list()
- occupant |= mecha.occupant
- scanning = 1
- mineral_scan_pulse(occupant,get_turf(loc))
- spawn(equip_cooldown)
- scanning = 0
+ scanning_time = world.time + equip_cooldown
+ mineral_scan_pulse(get_turf(src))
+
+#undef DRILL_BASIC
+#undef DRILL_HARDENED
\ No newline at end of file
diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm
index 185ce411d9a..b4ec817c4cc 100644
--- a/code/game/mecha/equipment/weapons/weapons.dm
+++ b/code/game/mecha/equipment/weapons/weapons.dm
@@ -509,18 +509,20 @@
return
/obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma
- equip_cooldown = 20
+ equip_cooldown = 10
name = "217-D Heavy Plasma Cutter"
desc = "A device that shoots resonant plasma bursts at extreme velocity. The blasts are capable of crushing rock and demloishing solid obstacles."
icon_state = "mecha_plasmacutter"
item_state = "plasmacutter"
+ lefthand_file = 'icons/mob/inhands/guns_lefthand.dmi'
+ righthand_file = 'icons/mob/inhands/guns_righthand.dmi'
energy_drain = 30
origin_tech = "materials=3;plasmatech=4;engineering=3"
projectile = /obj/item/projectile/plasma/adv/mech
fire_sound = 'sound/weapons/laser.ogg'
-/obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma/can_attach(obj/mecha/M as obj)
+/obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma/can_attach(obj/mecha/M)
if(istype(M, /obj/mecha/working))
if(M.equipment.len