diff --git a/code/modules/mining/equipment/mining_charges.dm b/code/modules/mining/equipment/mining_charges.dm index 493cc907263b..2fc6788e0420 100644 --- a/code/modules/mining/equipment/mining_charges.dm +++ b/code/modules/mining/equipment/mining_charges.dm @@ -6,22 +6,33 @@ det_time = 5 //uses real world seconds cause screw you i guess boom_sizes = list(1,3,5) alert_admins = FALSE + var/hacked = FALSE /obj/item/grenade/plastic/miningcharge/Initialize() . = ..() plastic_overlay = mutable_appearance(icon, "[icon_state]_active", ON_EDGED_TURF_LAYER) +/obj/item/grenade/plastic/miningcharge/examine(mob/user) + . = ..() + if(hacked) + . += "Its wiring is haphazardly changed." + /obj/item/grenade/plastic/miningcharge/attack_self(mob/user) if(nadeassembly) nadeassembly.attack_self(user) /obj/item/grenade/plastic/miningcharge/afterattack(atom/movable/AM, mob/user, flag, notify_ghosts = FALSE) - if(ismineralturf(AM)) + if(ismineralturf(AM) || hacked) ..() else to_chat(user,span_warning("The charge only works on rocks!")) /obj/item/grenade/plastic/miningcharge/prime() + if(hacked) //big boom override + var/turf/location = get_turf(target) + explosion(location, boom_sizes[1], boom_sizes[2], boom_sizes[3]) + qdel(src) + return //don't know if this is needed... var/turf/closed/mineral/location = get_turf(target) location.attempt_drill(null,TRUE,3) //orange says it doesnt include the actual middle for(var/turf/closed/mineral/rock in circlerangeturfs(location,boom_sizes[3])) @@ -45,6 +56,41 @@ if(!QDELETED(src)) qdel(src) +/obj/item/grenade/plastic/miningcharge/proc/override_safety() + hacked = TRUE + boom_sizes[1] = max(boom_sizes[1]/3, 1) //sorry, too powerful otherwise. + boom_sizes[2] = max(boom_sizes[2]/3, 1) + boom_sizes[3] = max(boom_sizes[3]/3, 1) + alert_admins = TRUE //i'm telling teacher you're gibbing clown! + +//MINING CHARGE HACKER +/obj/item/t_scanner/adv_mining_scanner/syndicate + var/charges = 6 + +/obj/item/t_scanner/adv_mining_scanner/syndicate/examine(mob/user) + . = ..() + if(is_syndicate(user)) //helpful to other syndicates + . += "This scanner has an extra port for overriding mining charge safeties." + +/obj/item/t_scanner/adv_mining_scanner/syndicate/afterattack(atom/target, mob/user, proximity_flag, click_parameters) + if(!is_syndicate(user)) + . = ..() //just a normal scanner... + return + if(istype(target,/obj/item/grenade/plastic/miningcharge)) + var/obj/item/grenade/plastic/miningcharge/charge = target + if(charge.hacked) + to_chat(span_notice("[src] is already overridden!")) + return + if(charges <= 0) + to_chat(span_notice("Its overriding function is depleted.")) + return + charge.override_safety() + visible_message(span_warning("Sparks fly out of [src]!"), span_notice("You override [src], disabling its safeties.")) + playsound(src, "sparks", 50, 1) + charges-- + if(charges <= 0) + to_chat(span_warning("[src]'s internal battery for overriding mining charges has run dry!")) + /obj/item/grenade/plastic/miningcharge/lesser name = "lesser mining charge" desc = "A mining charge. This one seems less powerful than normal. Only works on rocks!" diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm index 4cdd5a646c19..d797a6424a19 100644 --- a/code/modules/uplink/uplink_items.dm +++ b/code/modules/uplink/uplink_items.dm @@ -2153,6 +2153,15 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) item = /obj/item/hierophant_antenna restricted_roles = list("Shaft Miner") +/datum/uplink_item/role_restricted/mining_charge_hacker + name = "Mining Charge Hacker" + desc = "Looks and functions like an advanced mining scanner, but allows mining charges to be placed anywhere and destroy more than rocks. \ + Use it on a mining charge to override its safeties. Reduces explosive power of mining charges due to the modification of their internals." + cost = 4 + manufacturer = /datum/corporation/traitor/cybersun + item = /obj/item/t_scanner/adv_mining_scanner/syndicate + restricted_roles = list("Shaft Miner","Quartermaster","Mining Medic") + // Pointless /datum/uplink_item/badass category = "(Pointless) Badassery"