mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-12 15:45:25 +01:00
3f87165a03
* CI change * world.dm * .dme world.dm * subsystem renaming * .dme for subsystems * ai_laws.dm * armor.dm * emote.dm * logging.dm * spell.dm * air_alarm.dm * crew.dm * decal.dm * emissive_blocker.dm * footstep.dm * spawner.dm * fire.dm * carbon.dm * living.dm * mob.dm * movement.dm * thermal_drill.dm * plasmamen.dm * lavaland.dm * chaplain.dm * lightning.dm * magnet.dm * mimic.dm * wizard.dm * morph.dm * vampire.dm * click.dm * self.dm * radiation_storm.dm * airlock.dm * autolathe.dm * mulebot.dm * nuclearbomb.dm * particle_accelerator.dm * smartfridge.dm * syndicatebomb.dm * vending.dm * wires.dm * sound.dm * mining.dm * syndicate_space_base.dm * monkey.dm * guardian.dm * bomb.dm * standard.dm * nuclear.dm * pinpointer.dm * access.dm * departments.dm * job.dm * science.dm * buttons.dm * cloning.dm * igniter.dm * wishgranter.dm * atmos_control.dm * message.dm * power_monitor.dm * mecha.dm * combat.dm * mining_tools.dm * meteors.dm * spiders.dm * contraband.dm * aliens.dm * uplinks.dm * voice.dm * intercom.dm * lights.dm * robot_items.dm * mineral.dm * dice.dm * extinguisher.dm * paint.dm * signs.dm * staff.dm * smokebomb.dm * boxes.dm * random.dm * janicart.dm * statue.dm * cargo.dm * asteroid.dm * headslug.dm * fulton.dm * atmospherics.dm * pump.dm * corpse.dm * oldstation.dm * gps.dm * preferences.dm * clothing.dm * ears.dm * glasses.dm * boxing.dm * color.dm * renames ninja gear files * recipes.dm * error_handler.dm * anomaly.dm * floorcluwne.dm * undead.dm * overmind.dm * shield.dm * bottle.dm * organ.dm * piano.dm * plasma_fist.dm * language.dm * mob_defines.dm * mob_helpers.dm * damage_procs.dm * _defines.dm * empress.dm and queen.dm * brain.dm * organ file renaming * subsystems.dm * constructs.dm * bot.dm * pet.dm * nature.dm * magic.dm * colors.dm * drugs.dm * medicine.dm * toxins.dm * shuttle.dm * surgery.dm * moves a bunch of define files * traits.dm * names.dm * other_mobs.dm * flags.dm * some final define files * well turns out contractor_pinpointer.dm was taken * I forgot to remove this file * how in the hell did this get unticked * I DID INCLUDE IT, but there was a "w" there * swaps the world definitions * camera renamed to SScamera * examine -> alien_examine
166 lines
5.9 KiB
Plaintext
166 lines
5.9 KiB
Plaintext
|
|
// 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 = 15
|
|
energy_drain = 10
|
|
force = 15
|
|
harmful = TRUE
|
|
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(isspaceturf(target))
|
|
return
|
|
if(isobj(target))
|
|
var/obj/target_obj = target
|
|
if(target_obj.resistance_flags & UNACIDABLE)
|
|
return
|
|
if(is_ancient_rock(target))
|
|
visible_message("<span class='notice'>This rock appears to be resistant to all mining tools except pickaxes!</span>")
|
|
return
|
|
|
|
target.visible_message("<span class='warning'>[chassis] starts to drill [target].</span>",
|
|
"<span class='userdanger'>[chassis] starts to drill [target]...</span>",
|
|
"<span class='italics'>You hear drilling.</span>")
|
|
|
|
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)
|
|
set_ready_state(TRUE)
|
|
return
|
|
while(do_after_mecha(target, drill_delay))
|
|
if(isliving(target))
|
|
drill_mob(target, chassis.occupant)
|
|
playsound(src, 'sound/weapons/drill.ogg', 40, TRUE)
|
|
else if(isobj(target))
|
|
var/obj/O = target
|
|
O.take_damage(15, BRUTE, 0, FALSE, get_dir(chassis, target))
|
|
playsound(src, 'sound/weapons/drill.ogg', 40, TRUE)
|
|
else
|
|
set_ready_state(TRUE)
|
|
return
|
|
set_ready_state(TRUE)
|
|
|
|
/turf/proc/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill)
|
|
return
|
|
|
|
/turf/simulated/wall/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill)
|
|
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(drill.drill_level >= DRILL_HARDENED)
|
|
if(drill.do_after_mecha(src, 120 / drill.drill_level))
|
|
drill.log_message("Drilled through [src]")
|
|
dismantle_wall(TRUE, FALSE)
|
|
else
|
|
drill.occupant_message("<span class='danger'>[src] is too durable to drill through.</span>")
|
|
|
|
/turf/simulated/mineral/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill)
|
|
for(var/turf/simulated/mineral/M in range(drill.chassis, 1))
|
|
if(get_dir(drill.chassis, M) & drill.chassis.dir)
|
|
M.gets_drilled()
|
|
drill.log_message("Drilled through [src]")
|
|
drill.move_ores()
|
|
|
|
/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.getDug()
|
|
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) && 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(..())
|
|
if(istype(M, /obj/mecha/working) || istype(M, /obj/mecha/combat))
|
|
return TRUE
|
|
return FALSE
|
|
|
|
/obj/item/mecha_parts/mecha_equipment/drill/proc/drill_mob(mob/living/target, mob/user)
|
|
target.visible_message("<span class='danger'>[chassis] is drilling [target] with [src]!</span>",
|
|
"<span class='userdanger'>[chassis] is drilling you with [src]!</span>")
|
|
add_attack_logs(user, target, "DRILLED with [src] ([uppertext(user.a_intent)]) ([uppertext(damtype)])")
|
|
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
|
|
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))
|
|
|
|
//blood splatters
|
|
new /obj/effect/temp_visual/dir_setting/bloodsplatter(H.drop_location(), splatter_dir, H.dna.species.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 = 10
|
|
drill_delay = 4
|
|
drill_level = DRILL_HARDENED
|
|
force = 15
|
|
|
|
|
|
/obj/item/mecha_parts/mecha_equipment/mining_scanner
|
|
name = "exosuit mining scanner"
|
|
desc = "Equipment for engineering and combat exosuits. It will automatically check surrounding rock for useful minerals."
|
|
icon_state = "mecha_analyzer"
|
|
selectable = 0
|
|
equip_cooldown = 15
|
|
var/scanning_time = 0
|
|
|
|
/obj/item/mecha_parts/mecha_equipment/mining_scanner/Initialize(mapload)
|
|
. = ..()
|
|
START_PROCESSING(SSfastprocess, src)
|
|
|
|
/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(istype(loc, /obj/mecha/working) && scanning_time <= world.time)
|
|
var/obj/mecha/working/mecha = loc
|
|
if(!mecha.occupant)
|
|
return
|
|
scanning_time = world.time + equip_cooldown
|
|
mineral_scan_pulse(get_turf(src))
|
|
|
|
#undef DRILL_BASIC
|
|
#undef DRILL_HARDENED
|