diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm
index c482eac5412..83e23606fcc 100644
--- a/code/game/mecha/equipment/tools/tools.dm
+++ b/code/game/mecha/equipment/tools/tools.dm
@@ -838,11 +838,13 @@
range = MELEE
var/datum/global_iterator/pr_mech_generator
var/coeff = 100
- var/obj/item/stack/sheet/fuel
+ var/fuel_type = MAT_PLASMA
var/max_fuel = 150000
- var/fuel_per_cycle_idle = 25
- var/fuel_per_cycle_active = 200
- var/power_per_cycle = 20
+ var/fuel_name = "plasma" // Our fuel name as a string
+ var/fuel_amount = 0
+ var/fuel_per_cycle_idle = 10
+ var/fuel_per_cycle_active = 100
+ var/power_per_cycle = 30
reliability = 1000
New()
@@ -851,8 +853,7 @@
return
proc/init()
- fuel = new /obj/item/stack/sheet/mineral/plasma(src)
- fuel.amount = 0
+ fuel_amount = 0
pr_mech_generator = new /datum/global_iterator/mecha_generator(list(src),0)
pr_mech_generator.set_delay(equip_cooldown)
return
@@ -877,7 +878,7 @@
get_equip_info()
var/output = ..()
if(output)
- return "[output] \[[fuel]: [round(fuel.amount*fuel.perunit,0.1)] cm3\] - [pr_mech_generator.active()?"Dea":"A"]ctivate"
+ return "[output] \[[fuel_name]: [round(fuel_amount,0.1)] cm3\] - [pr_mech_generator.active()?"Dea":"A"]ctivate"
return
action(target)
@@ -885,36 +886,55 @@
var/result = load_fuel(target)
var/message
if(isnull(result))
- message = "[fuel] traces in target minimal. [target] cannot be used as fuel."
+ message = "[fuel_name] traces in target minimal. [target] cannot be used as fuel."
else if(!result)
message = "Unit is full."
else
- message = "[result] unit\s of [fuel] successfully loaded."
+ message = "[result] unit\s of [fuel_name] successfully loaded."
send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info())
occupant_message(message)
return
- proc/load_fuel(var/obj/item/stack/sheet/P)
- if(P.type == fuel.type && P.amount)
- var/to_load = max(max_fuel - fuel.amount*fuel.perunit,0)
- if(to_load)
- var/units = min(max(round(to_load / P.perunit),1),P.amount)
- if(units)
- fuel.amount += units
- P.use(units)
- return units
- else
- return 0
+ proc/load_fuel(var/obj/item/I)
+ if(istype(I) && (fuel_type in I.materials))
+ if(istype(I, /obj/item/stack/sheet))
+ var/obj/item/stack/sheet/P = I
+ var/to_load = max(max_fuel - P.amount*P.perunit,0)
+ if(to_load)
+ var/units = min(max(round(to_load / P.perunit),1),P.amount)
+ if(units)
+ var/added_fuel = units * P.perunit
+ fuel_amount += added_fuel
+ P.use(units)
+ return added_fuel
+ else
+ return 0
+ else // Some other object containing our fuel's type, so we just eat it (ores mainly)
+ var/to_load = max(min(I.materials[fuel_type], max_fuel - fuel_amount),0)
+ if(to_load == 0)
+ return 0
+ fuel_amount += to_load
+ qdel(I)
+ return to_load
+ else if(istype(I, /obj/structure/ore_box))
+ var/fuel_added = 0
+ for(var/baz in I.contents) // Istypeless loop
+ var/obj/item/O = baz
+ if(fuel_type in O.materials)
+ fuel_added = load_fuel(O)
+ break
+ return fuel_added
return
attackby(weapon,mob/user, params)
var/result = load_fuel(weapon)
+ var/weapon_name = "[weapon]"
if(isnull(result))
- user.visible_message("[user] tries to shove [weapon] into [src]. What a dumb-ass.","[fuel] traces minimal. [weapon] cannot be used as fuel.")
+ user.visible_message("[user] tries to shove [weapon_name] into [src], but \the [src] rejects it.","[fuel_name] traces in target minimal. [weapon_name] cannot be used as fuel.")
else if(!result)
user << "Unit is full."
else
- user.visible_message("[user] loads [src] with [fuel].","[result] unit\s of [fuel] successfully loaded.")
+ user.visible_message("[user] loads [src] with \the [weapon_name].","[result] unit\s of [fuel_name] successfully loaded.")
return
critfail()
@@ -942,7 +962,7 @@
stop()
EG.set_ready_state(1)
return 0
- if(EG.fuel.amount<=0)
+ if(EG.fuel_amount<=0)
stop()
EG.log_message("Deactivated - no fuel.")
EG.set_ready_state(1)
@@ -962,7 +982,7 @@
if(cur_chargeYou start digging..."
- playsound(src, 'sound/effects/shovel_dig.ogg', 50, 1) //FUCK YO RUSTLE I GOT'S THE DIGS SOUND HERE
sleep(20)
if ((user.loc == T && user.get_active_hand() == W))
@@ -487,7 +486,6 @@ var/global/list/rockTurfEdgeCache
return
user << "You start digging..."
- playsound(src, 'sound/effects/shovel_dig.ogg', 50, 1) //FUCK YO RUSTLE I GOT'S THE DIGS SOUND HERE
sleep(P.digspeed)
if ((user.loc == T && user.get_active_hand() == W))
@@ -502,6 +500,12 @@ var/global/list/rockTurfEdgeCache
O.attackby(W,user)
return
+/turf/simulated/floor/plating/airless/asteroid/gets_drilled()
+ if(!dug)
+ gets_dug()
+ else
+ ..()
+
/turf/simulated/floor/plating/airless/asteroid/proc/gets_dug()
if(dug)
return
@@ -511,6 +515,7 @@ var/global/list/rockTurfEdgeCache
new/obj/item/weapon/ore/glass(src)
new/obj/item/weapon/ore/glass(src)
dug = 1
+ playsound(src, 'sound/effects/shovel_dig.ogg', 50, 1) //FUCK YO RUSTLE I GOT'S THE DIGS SOUND HERE
icon_plating = "asteroid_dug"
icon_state = "asteroid_dug"
return