Skip to content

Commit

Permalink
okay then
Browse files Browse the repository at this point in the history
  • Loading branch information
NightDawnFox committed Dec 9, 2023
1 parent ba96ed4 commit b715049
Show file tree
Hide file tree
Showing 9 changed files with 244 additions and 5 deletions.
10 changes: 10 additions & 0 deletions code/datums/uplink_items/uplink_traitor.dm
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@
cost = 25 //A chef can get a knife that sharp easily, though it won't block. While you can get endless boomerang, they are less deadly than a stech, and slower / more predictable.
job = list("Mime", "Chef")

//shaft miner
/datum/uplink_item/jobspecific/pressure_mod
name = "Kinetic Accelerator Pressure Mod"
desc = "A modification kit which allows Kinetic Accelerators to do greatly increased damage while indoors. Occupies 35% mod capacity."
Expand All @@ -86,6 +87,15 @@
job = list("Shaft Miner")
surplus = 0 // Requires a KA to even be used.

/datum/uplink_item/jobspecific/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."
reference = "MCH"
item = /obj/item/t_scanner/adv_mining_scanner/syndicate
cost = 25 //I'm not really good at balancing build what I don't even play..
job = list("Shaft Miner")

//Chef
/datum/uplink_item/jobspecific/specialsauce
name = "Chef Excellence's Special Sauce"
Expand Down
7 changes: 4 additions & 3 deletions code/game/objects/items/weapons/explosives.dm
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
var/image_overlay = null
var/obj/item/assembly/nadeassembly = null
var/assemblyattacher
var/notify_admins = TRUE

/obj/item/grenade/plastic/Initialize(mapload)
. = ..()
Expand Down Expand Up @@ -78,9 +79,9 @@
return
target = AM
loc = null

message_admins("[key_name_admin(user)]([ADMIN_QUE(user,"?")]) ([ADMIN_FLW(user,"FLW")]) planted [src.name] on [target.name] at ([target.x],[target.y],[target.z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[target.x];Y=[target.y];Z=[target.z]'>JMP</a>) with [det_time] second fuse",0,1)
log_game("[key_name(user)] planted [name] on [target.name] at ([target.x],[target.y],[target.z]) with [det_time] second fuse")
if(notify_admins)
message_admins("[key_name_admin(user)]([ADMIN_QUE(user,"?")]) ([ADMIN_FLW(user,"FLW")]) planted [src.name] on [target.name] at ([target.x],[target.y],[target.z] - <A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[target.x];Y=[target.y];Z=[target.z]'>JMP</a>) with [det_time] second fuse",0,1)
log_game("[key_name(user)] planted [name] on [target.name] at ([target.x],[target.y],[target.z]) with [det_time] second fuse")

AddComponent(/datum/component/persistent_overlay, image_overlay, target)
if(!nadeassembly)
Expand Down
4 changes: 3 additions & 1 deletion code/game/turfs/simulated/minerals.dm
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,10 @@
else
return attack_hand(user)

/turf/simulated/mineral/proc/gets_drilled()
/turf/simulated/mineral/proc/gets_drilled(mob/user, triggered_by_explosion = FALSE)
if(mineralType && (mineralAmt > 0))
if(triggered_by_explosion)
mineralAmt += 3 //bonus if it was exploded
new mineralType(src, mineralAmt)
SSticker.score?.score_ore_mined++
SSblackbox.record_feedback("tally", "ore_mined", mineralAmt, mineralType)
Expand Down
210 changes: 210 additions & 0 deletions code/modules/mining/equipment/mining_charges.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,210 @@
/obj/item/grenade/plastic/miningcharge
name = "industrial mining charge"
desc = "Used to make big holes in rocks. Only works on rocks!"
icon = 'icons/obj/mining.dmi'
icon_state = "mining-charge-2"
det_time = 5
notify_admins = FALSE // no need to make adminlogs on lavaland, while they are "safe" to use
var/timer_off = FALSE
var/installed = FALSE
var/smoke_amount = 3
var/boom_sizes = list(2,3,5)
var/hacked = FALSE

/obj/item/grenade/plastic/miningcharge/Initialize()
. = ..()
image_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."
if(timer_off)
. += "<span class='notice'>The mining charge is connected to a detonator.</span>"

/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)
if(ismineralturf(AM) || hacked)
if(is_ancient_rock(AM) && !hacked)
visible_message("<span class='notice'>This rock appears to be resistant to all mining tools except pickaxes!</span>")
return
if(timer_off) //override original proc for plastic explosions
if(!flag)
return
if(istype(AM, /mob/living/carbon))
return
to_chat(user, "<span class='notice'>You start planting the [src].</span>")
if(do_after(user, 25 * toolspeed, target = AM))
if(!user.unEquip(src))
return
src.target = AM
loc = null
if(hacked)
message_admins("[ADMIN_LOOKUPFLW(user)] planted [src.name] on [target.name] at [ADMIN_COORDJMP(target)]")
log_game("planted [name] on [target.name] at [COORD(target)]", user)
installed = TRUE
target.overlays += image_overlay
return
..()

/obj/item/grenade/plastic/miningcharge/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/detonator))
var/obj/item/detonator/detonator = I
if(!(src in detonator.bombs) && !timer_off)
detonator.bombs += src
timer_off = TRUE
to_chat(user, "<span class='notice'>You synchronized [src] to a detonator.</span>")
playsound(src, 'sound/machines/twobeep.ogg', 50)
else
to_chat(user, "<span class='warning'>[src] was already synchronized to a existing detonator!</span>")
detonator.update_icon()
..()

/obj/item/grenade/plastic/miningcharge/proc/detonate()
addtimer(CALLBACK(src, PROC_REF(prime)), 3 SECONDS)

/obj/item/grenade/plastic/miningcharge/prime()
if(hacked) //explosion
explode()
return
var/turf/simulated/mineral/location = get_turf(target)
var/datum/effect_system/smoke_spread/S = new
S.set_up(smoke_amount,0,location,null)
S.start()
//location.attempt_drill(null,TRUE,3) //orange says it doesnt include the actual middle
for(var/turf/simulated/mineral/rock in circlerangeturfs(location, boom_sizes[3]))
var/distance = get_dist_euclidian(location,rock)
if(distance <= boom_sizes[1]) //all this will be needed later on
rock.gets_drilled(null,TRUE,3)
else if (distance <= boom_sizes[2])
rock.gets_drilled(null,TRUE,2)
else if (distance <= boom_sizes[3])
rock.gets_drilled(null,TRUE,1)
for(var/mob/living/carbon/C in circlerange(location,boom_sizes[3]))
if(ishuman(C)) //working on everyone
var/distance = get_dist_euclidian(location,C)
C.flash_eyes()
C.Weaken((boom_sizes[2] - distance) * 1 SECONDS) //1 second for how close you are to center if you're in range
C.AdjustDeaf((boom_sizes[3] - distance) * 10 SECONDS)
var/obj/item/organ/internal/ears/ears = C.get_int_organ(/obj/item/organ/internal/ears)
if(istype(ears))
ears.receive_damage((boom_sizes[3] - distance) * 2) //something like that i guess. Mega charge makes 12 damage to ears if nearby
to_chat(C, "<span class='warning'><font size='2'><b>You are knocked down by the power of the mining charge!</font></b></span>")
qdel(src)

/obj/item/grenade/plastic/miningcharge/proc/explode() //c4 code
var/turf/location
if(target)
if(!QDELETED(target))
if(istype(target, /turf/))
location = get_turf(target)
else
location = get_atom_on_turf(target)
target.overlays -= image_overlay
else
location = get_atom_on_turf(src)
if(location)
explosion(location, boom_sizes[1], boom_sizes[2], boom_sizes[3], cause = src)
location.ex_act(2, target)
if(istype(target, /mob))
var/mob/M = target
M.gib()
qdel(src)

/obj/item/grenade/plastic/miningcharge/proc/override_safety()
hacked = TRUE
notify_admins = TRUE
boom_sizes[1] = round(boom_sizes[1]/3) //lesser - 0, normal - 0, mega - 1; c4 - 0
boom_sizes[2] = round(boom_sizes[2]/3) //lesser - 0, normal - 1, mega - 2; c4 - 0
boom_sizes[3] = round(boom_sizes[3]/1.5)//lesser - 2, normal - 3, mega - 5; c4 - 3

/obj/item/grenade/plastic/miningcharge/deconstruct(disassembled = TRUE) //no gibbing a miner with pda bombs
if(!QDELETED(src))
qdel(src)

/obj/item/grenade/plastic/miningcharge/lesser
name = "mining charge"
desc = "A mining charge. This one seems less powerful than industrial. Only works on rocks!"
icon_state = "mining-charge-1"
smoke_amount = 1
boom_sizes = list(1,2,3)

/obj/item/grenade/plastic/miningcharge/mega
name = "experimental mining charge"
desc = "A mining charge. This one seems much more powerful than normal!"
icon_state = "mining-charge-3"
smoke_amount = 5
boom_sizes = list(4,6,8)

/obj/item/storage/backpack/duffel/miningcharges/populate_contents()
for(var/i in 1 to 5)
new /obj/item/grenade/plastic/miningcharge/lesser(src)
for(var/i in 1 to 3)
new /obj/item/grenade/plastic/miningcharge(src)
new /obj/item/detonator(src)

//MINING CHARGE HACKER

/obj/item/t_scanner/adv_mining_scanner/syndicate
var/charges = 6
desc = "A scanner that automatically checks surrounding rock for useful minerals; it can also be used to stop gibtonite detonations. Wear meson scanners for optimal results. 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(istype(target,/obj/item/grenade/plastic/miningcharge))
var/obj/item/grenade/plastic/miningcharge/charge = target
if(charge.hacked)
to_chat(user, "<span class='notice'>[src] is already overridden!</span>")
return
if(charges <= 0)
to_chat(user, "<span class='notice'>Its overriding function is depleted.</span>")
return
charge.override_safety()
visible_message("<span class='warning'>Sparks fly out of [src]!</span>")
playsound(src, "sparks", 50, 1)
charges--
if(charges <= 0)
to_chat(user ,"<span class='warning'>[src]'s internal battery for overriding mining charges has run dry!</span>")

// MINING CHARGES DETONATOR

/obj/item/detonator
name = "mining charge detonator"
desc = "A specialized mining device designed for controlled demolition operations using mining explosives."
w_class = WEIGHT_CLASS_SMALL
icon = 'icons/obj/mining.dmi'
icon_state = "Detonator-0"
var/list/bombs = list()

/obj/item/detonator/examine(mob/user)
. = ..()
if(bombs.len)
. += "<span class='notice'>List of synched bombs:</span>"
for(var/obj/item/grenade/plastic/miningcharge/charge in bombs)
. += "<span class='notice'>[bicon(charge)] [charge]. Current status: [charge.installed ? "ready to detonate" : "ready to deploy"]."

/obj/item/detonator/update_icon()
. = ..()
if(bombs.len)
icon_state = "Detonator-1"
else
icon_state = initial(icon_state)

/obj/item/detonator/attack_self(mob/user)
playsound(src, 'sound/items/detonator.ogg', 40)
if(bombs.len)
to_chat(user, "<span class='notice'>Activating explosives...</span>")
for(var/obj/item/grenade/plastic/miningcharge/charge in bombs)
if(QDELETED(charge))
to_chat(user, "<span class='notice'>Can't reach [charge]. Deleting from the list...</span>")
bombs -= charge
return
if(charge.installed)
bombs -= charge
charge.detonate()
else
to_chat(user, "<span class='warning'>There is no charges linked to a detonator!</span>")
update_icon()
. = ..()
7 changes: 6 additions & 1 deletion code/modules/mining/machine_vending.dm
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
EQUIPMENT("Mining MODsuit", /obj/item/mod/control/pre_equipped/mining/vendor, 3500),
EQUIPMENT("Asteroid MODsuit Skin", /obj/item/mod/skin_applier/asteroid, 1000),
EQUIPMENT("Tracking Bio-chip Kit", /obj/item/storage/box/minertracker, 600),
EQUIPMENT("Mining Charge Detonator", /obj/item/detonator, 150),
)
prize_list["Consumables"] = list(
EQUIPMENT("10 Marker Beacons", /obj/item/stack/marker_beacon/ten, 100),
Expand All @@ -50,6 +51,8 @@
EQUIPMENT("Jaunter", /obj/item/wormhole_jaunter, 750),
EQUIPMENT("Chasm Jaunter Recovery Grenade", /obj/item/grenade/jaunter_grenade, 1500),
EQUIPMENT("Lazarus Injector", /obj/item/lazarus_injector, 1000),
EQUIPMENT("Mining Charge", /obj/item/grenade/plastic/miningcharge/lesser, 150),
EQUIPMENT("Industrial Mining Charge", /obj/item/grenade/plastic/miningcharge, 500),
EQUIPMENT("Point Transfer Card", /obj/item/card/mining_point_card, 500),
EQUIPMENT("Shelter Capsule", /obj/item/survivalcapsule, 400),
EQUIPMENT("Stabilizing Serum", /obj/item/hivelordstabilizer, 400),
Expand Down Expand Up @@ -240,7 +243,7 @@
* * redeemer - The person holding it
*/
/obj/machinery/mineral/equipment_vendor/proc/redeem_voucher(obj/item/mining_voucher/voucher, mob/redeemer)
var/items = list("Survival Capsule and Explorer's Webbing", "Resonator Kit", "Minebot Kit", "Extraction and Rescue Kit", "Crusher Kit", "Plasma Cutter", "Jaunter Kit", "Mining Conscription Kit")
var/items = list("Survival Capsule and Explorer's Webbing", "Resonator Kit", "Minebot Kit", "Extraction and Rescue Kit", "Crusher Kit", "Plasma Cutter", "Mining Explosives Kit", "Jaunter Kit", "Mining Conscription Kit")

var/selection = input(redeemer, "Pick your equipment", "Mining Voucher Redemption") as null|anything in items
if(!selection || !Adjacent(redeemer) || QDELETED(voucher) || voucher.loc != redeemer)
Expand All @@ -266,6 +269,8 @@
new /obj/item/kinetic_crusher(drop_location)
if("Plasma Cutter")
new /obj/item/gun/energy/plasmacutter(drop_location)
if("Mining Explosives Kit")
new /obj/item/storage/backpack/duffel/miningcharges(drop_location)
if("Jaunter Kit")
new /obj/item/wormhole_jaunter(drop_location)
new /obj/item/stack/medical/bruise_pack/advanced(drop_location)
Expand Down
10 changes: 10 additions & 0 deletions code/modules/research/designs/mining_designs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -110,3 +110,13 @@
materials = list(MAT_METAL = 8000, MAT_GLASS = 1500, MAT_SILVER = 2000, MAT_GOLD = 2000, MAT_DIAMOND = 2000)
build_path = /obj/item/borg/upgrade/modkit/aoe/turfs
category = list("Mining", "Cyborg Upgrade Modules")

/datum/design/mining_charges
name = "Experimental Mining Charge"
desc = "An experimental mining charge used to make big holes in rocks."
id = "megacharge"
req_tech = list("materials" = 5, "engineering" = 5, "plasmatech" = 6)
build_type = PROTOLATHE
materials = list(MAT_METAL = 4000, MAT_PLASMA = 6000, MAT_URANIUM = 1000)
build_path = /obj/item/grenade/plastic/miningcharge/mega
category = list("Mining")
Binary file modified icons/obj/mining.dmi
Binary file not shown.
1 change: 1 addition & 0 deletions paradise.dme
Original file line number Diff line number Diff line change
Expand Up @@ -1953,6 +1953,7 @@
#include "code\modules\mining\equipment\marker_beacons.dm"
#include "code\modules\mining\equipment\mineral_scanner.dm"
#include "code\modules\mining\equipment\mining_tools.dm"
#include "code\modules\mining\equipment\mining_charges.dm"
#include "code\modules\mining\equipment\regenerative_core.dm"
#include "code\modules\mining\equipment\resonator.dm"
#include "code\modules\mining\equipment\survival_pod.dm"
Expand Down
Binary file added sound/items/detonator.ogg
Binary file not shown.

0 comments on commit b715049

Please sign in to comment.