diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm
index 9445cd73a6..20ab8199a5 100644
--- a/code/game/objects/items/devices/multitool.dm
+++ b/code/game/objects/items/devices/multitool.dm
@@ -26,6 +26,7 @@
var/obj/machinery/buffer // simple machine buffer for device linkage
hitsound = 'sound/weapons/tap.ogg'
toolspeed = 1
+ tool_behaviour = TOOL_MULTITOOL
var/datum/integrated_io/selected_io = null //functional for integrated circuits.
var/mode = 0
@@ -159,4 +160,4 @@
desc = "An omni-technological interface."
icon = 'icons/obj/abductor.dmi'
icon_state = "multitool"
- toolspeed = 0.1
\ No newline at end of file
+ toolspeed = 0.1
diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm
index a5e9db1fde..8523ab9f43 100644
--- a/code/modules/power/singularity/collector.dm
+++ b/code/modules/power/singularity/collector.dm
@@ -2,6 +2,7 @@
#define RAD_COLLECTOR_EFFICIENCY 80 // radiation needs to be over this amount to get power
#define RAD_COLLECTOR_COEFFICIENT 100
#define RAD_COLLECTOR_STORED_OUT 0.04 // (this*100)% of stored power outputted per tick. Doesn't actualy change output total, lower numbers just means collectors output for longer in absence of a source
+#define RAD_COLLECTOR_MINING_CONVERSION_RATE 0.00001 //This is gonna need a lot of tweaking to get right. This is the number used to calculate the conversion of watts to research points per process()
/obj/machinery/power/rad_collector
name = "Radiation Collector Array"
@@ -19,6 +20,10 @@
var/active = 0
var/locked = FALSE
var/drainratio = 1
+ var/powerproduction_drain = 0.001
+
+ var/bitcoinproduction_drain = 0.15
+ var/bitcoinmining = FALSE
/obj/machinery/power/rad_collector/anchored
anchored = TRUE
@@ -31,19 +36,37 @@
return ..()
/obj/machinery/power/rad_collector/process()
- if(loaded_tank)
+ if(!loaded_tank)
+ return
+ if(!bitcoinmining)
if(!loaded_tank.air_contents.gases[/datum/gas/plasma])
investigate_log("out of fuel.", INVESTIGATE_SINGULO)
+ playsound(src, 'sound/machines/ding.ogg', 50, 1)
eject()
else
- loaded_tank.air_contents.gases[/datum/gas/plasma][MOLES] -= 0.001*drainratio
+ var/gasdrained = powerproduction_drain*drainratio
+ loaded_tank.air_contents.gases[/datum/gas/plasma][MOLES] -= gasdrained
loaded_tank.air_contents.assert_gas(/datum/gas/tritium)
- loaded_tank.air_contents.gases[/datum/gas/tritium][MOLES] += 0.001*drainratio
+ loaded_tank.air_contents.gases[/datum/gas/tritium][MOLES] += gasdrained
loaded_tank.air_contents.garbage_collect()
var/power_produced = min(last_power, (last_power*RAD_COLLECTOR_STORED_OUT)+1000) //Produces at least 1000 watts if it has more than that stored
add_avail(power_produced)
last_power-=power_produced
+ else if(is_station_level(z) && SSresearch.science_tech)
+ if(!loaded_tank.air_contents.gases[/datum/gas/tritium] || !loaded_tank.air_contents.gases[/datum/gas/oxygen])
+ playsound(src, 'sound/machines/ding.ogg', 50, 1)
+ eject()
+ else
+ var/gasdrained = bitcoinproduction_drain*drainratio
+ loaded_tank.air_contents.gases[/datum/gas/tritium][MOLES] -= gasdrained
+ loaded_tank.air_contents.gases[/datum/gas/oxygen][MOLES] -= gasdrained
+ loaded_tank.air_contents.assert_gas(/datum/gas/carbon_dioxide)
+ loaded_tank.air_contents.gases[/datum/gas/carbon_dioxide][MOLES] += gasdrained*2
+ loaded_tank.air_contents.garbage_collect()
+ var/bitcoins_mined = min(last_power, (last_power*RAD_COLLECTOR_STORED_OUT)+1000)
+ SSresearch.science_tech.research_points += bitcoins_mined*RAD_COLLECTOR_MINING_CONVERSION_RATE
+ last_power-=bitcoins_mined
/obj/machinery/power/rad_collector/attack_hand(mob/user)
if(..())
@@ -79,10 +102,7 @@
disconnect_from_network()
/obj/machinery/power/rad_collector/attackby(obj/item/W, mob/user, params)
- if(istype(W, /obj/item/device/multitool))
- to_chat(user, "[W] detects that [last_power]W is being processed.")
- return TRUE
- else if(istype(W, /obj/item/device/analyzer) && loaded_tank)
+ if(istype(W, /obj/item/device/analyzer) && loaded_tank)
atmosanalyzer_scan(loaded_tank.air_contents, user)
else if(istype(W, /obj/item/tank/internals/plasma))
if(!anchored)
@@ -95,19 +115,6 @@
return
loaded_tank = W
update_icons()
- else if(istype(W, /obj/item/crowbar))
- if(loaded_tank)
- if(locked)
- to_chat(user, "The controls are locked!")
- return TRUE
- eject()
- return TRUE
- else
- to_chat(user, "There isn't a tank loaded!")
- return TRUE
- else if(istype(W, /obj/item/wrench))
- default_unfasten_wrench(user, W, 0)
- return TRUE
else if(W.GetID())
if(allowed(user))
if(active)
@@ -121,6 +128,46 @@
else
return ..()
+/obj/machinery/power/rad_collector/wrench_act(mob/living/user, obj/item/wrench)
+ default_unfasten_wrench(user, wrench, 0)
+ return TRUE
+
+/obj/machinery/power/rad_collector/crowbar_act(mob/living/user, obj/item/crowbar)
+ if(loaded_tank)
+ if(locked)
+ to_chat(user, "The controls are locked!")
+ return TRUE
+ eject()
+ return TRUE
+ to_chat(user, "There isn't a tank loaded!")
+ return TRUE
+
+/obj/machinery/power/rad_collector/multitool_act(mob/living/user, obj/item/multitool)
+ if(!is_station_level(z) && !SSresearch.science_tech)
+ to_chat(user, "[src] isn't linked to a research system!")
+ return TRUE
+ if(locked)
+ to_chat(user, "[src] is locked!")
+ return TRUE
+ if(active)
+ to_chat(user, "[src] is currently active, producing [bitcoinmining ? "research points":"power"].")
+ return TRUE
+ bitcoinmining = !bitcoinmining
+ to_chat(user, "You [bitcoinmining ? "enable":"disable"] the research point production feature of [src].")
+ return TRUE
+
+/obj/machinery/power/rad_collector/examine(mob/user)
+ . = ..()
+ if(active)
+ if(!bitcoinmining)
+ to_chat(user, "[src]'s display states that it is processing [DisplayPower(last_power)].")
+ else
+ to_chat(user, "[src]'s display states that it is producing a total of [last_power*RAD_COLLECTOR_MINING_CONVERSION_RATE] research points per minute.")
+ else
+ if(!bitcoinmining)
+ to_chat(user,"[src]'s display displays the words: \"Power production mode. Please insert Plasma. Use a multitool to change production modes.\"")
+ else
+ to_chat(user,"[src]'s display displays the words: \"Research point production mode. Please insert Tritium and Oxygen. Use a multitool to change production modes.\"")
/obj/machinery/power/rad_collector/obj_break(damage_flag)
if(!(stat & BROKEN) && !(flags_1 & NODECONSTRUCT_1))