forked from BeeStation/BeeStation-Hornet
/
machine_bluespaceminer.dm
51 lines (43 loc) · 2.22 KB
/
machine_bluespaceminer.dm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
/obj/machinery/mineral/bluespace_miner
name = "bluespace mining machine"
desc = "A machine that uses the magic of Satan to slowly generate materials and add them to a linked ore silo."
icon = 'icons/obj/machines/mining_machines.dmi'
icon_state = "bs_miner"
density = TRUE
circuit = /obj/item/circuitboard/machine/bluespace_miner
layer = BELOW_OBJ_LAYER
var/list/ore_rates = list(/datum/material/iron = 0.6, /datum/material/glass = 0.6, /datum/material/copper = 0.4, /datum/material/plasma = 0.2, /datum/material/silver = 0.2, /datum/material/gold = 0.1, /datum/material/titanium = 0.1, /datum/material/uranium = 0.1, /datum/material/diamond = 0.1)
var/datum/component/remote_materials/materials
/obj/machinery/mineral/bluespace_miner/Initialize(mapload)
. = ..()
materials = AddComponent(/datum/component/remote_materials, "bsm", mapload)
/obj/machinery/mineral/bluespace_miner/Destroy()
materials = null
return ..()
/obj/machinery/mineral/bluespace_miner/multitool_act(mob/living/user, obj/item/multitool/M)
if(istype(M))
if(!M.buffer || !istype(M.buffer, /obj/machinery/ore_silo))
to_chat(user, "<span class='warning'>You need to multitool the ore silo first.</span>")
return FALSE
/obj/machinery/mineral/bluespace_miner/examine(mob/user)
. = ..()
if(!materials?.silo)
. += "<span class='notice'>No ore silo connected. Use a multi-tool to link an ore silo to this machine.</span>"
else if(materials?.on_hold())
. += "<span class='warning'>Ore silo access is on hold, please contact the quartermaster.</span>"
/obj/machinery/mineral/bluespace_miner/process()
if(!materials?.silo || materials?.on_hold())
return
var/datum/component/material_container/mat_container = materials.mat_container
if(!mat_container || panel_open || !powered())
return
// profit requires a sacrifice
var/victims = get_living_station_crew()
if(length(victims)<=1) // https://youtu.be/1FzZ7llgeAU
return
var/mob/living/carbon/human/victim = pick(victims)
victim.adjustBruteLoss(5000)
victim.adjustFireLoss(5000)
visible_message("<span class='notice'>[src] has has provided a bounty of materials, at the cost of something dear to you!</span>")
for(var/datum/material/ore in ore_rates)
mat_container.insert_amount_mat((ore_rates[ore] * 10000), ore)