Files
Bubberstation/code/game/shuttle_engines.dm
T
Couls c0e46fabf7 Standardize Welder Fuel Usage (#76021)
Remove welder fuel usage from all actions except attacking and leaving
it on
most welder tasks require a minimum of 1u of fuel, some longer tasks
require a minimum of 2 or 3u welders now drain 1u every 5 seconds
they're active
## About The Pull Request
Prior to this PR welder fuel usage was random, a lot of tasks didn't use
any welder fuel and welders were basically near infinite so long as you
didn't use them for combat, it took 26 seconds of activity to drain 1u
of fuel, that means an emergency welder alone could run for 5 minutes
straight before needing a refuel

After this PR all welders will drain 1u every 5 seconds instead of every
26 seconds, but welding objects won't require extra fuel anymore, making
the fuel usage much more consistent.

resolves #55018
## Why It's Good For The Game
Actually makes fuel tanks useful and relevant without making it
obnoxious to do repetitive quick tasks like turn rods into plates,
there's actually a reason to upgrade off the emergency welder now since
it lasts 50 seconds rather than 5 minutes
## Changelog
🆑
qol: Welders now have a more consistent fuel usage
/🆑
2023-06-19 23:01:10 -07:00

189 lines
5.9 KiB
Plaintext

#define ENGINE_UNWRENCHED 0
#define ENGINE_WRENCHED 1
#define ENGINE_WELDED 2
///How long it takes to weld/unweld an engine in place.
#define ENGINE_WELDTIME (20 SECONDS)
/obj/machinery/power/shuttle_engine
name = "engine"
desc = "A bluespace engine used to make shuttles move."
icon = 'icons/turf/shuttle.dmi'
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
smoothing_groups = SMOOTH_GROUP_SHUTTLE_PARTS
armor_type = /datum/armor/power_shuttle_engine
can_atmos_pass = ATMOS_PASS_DENSITY
max_integrity = 500
density = TRUE
anchored = TRUE
use_power = NO_POWER_USE
circuit = /obj/item/circuitboard/machine/engine
///How well the engine affects the ship's speed.
var/engine_power = 1
///Construction state of the Engine.
var/engine_state = ENGINE_WELDED //welding shmelding //i love welding
///The mobile ship we are connected to.
var/datum/weakref/connected_ship_ref
/datum/armor/power_shuttle_engine
melee = 100
bullet = 10
laser = 10
fire = 50
acid = 70
/obj/machinery/power/shuttle_engine/connect_to_shuttle(mapload, obj/docking_port/mobile/port, obj/docking_port/stationary/dock)
. = ..()
if(!port)
return FALSE
connected_ship_ref = WEAKREF(port)
port.engine_list += src
port.current_engine_power += engine_power
if(mapload)
port.initial_engine_power += engine_power
/obj/machinery/power/shuttle_engine/Destroy()
if(engine_state == ENGINE_WELDED)
alter_engine_power(-engine_power)
unsync_ship()
return ..()
/**
* Called on destroy and when we need to unsync an engine from their ship.
*/
/obj/machinery/power/shuttle_engine/proc/unsync_ship()
var/obj/docking_port/mobile/port = connected_ship_ref?.resolve()
if(port)
port.engine_list -= src
port.current_engine_power -= initial(engine_power)
connected_ship_ref = null
//Ugh this is a lot of copypasta from emitters, welding need some boilerplate reduction
/obj/machinery/power/shuttle_engine/can_be_unfasten_wrench(mob/user, silent)
if(engine_state == ENGINE_WELDED)
if(!silent)
to_chat(user, span_warning("[src] is welded to the floor!"))
return FAILED_UNFASTEN
return ..()
/obj/machinery/power/shuttle_engine/default_unfasten_wrench(mob/user, obj/item/tool, time = 20)
. = ..()
if(. == SUCCESSFUL_UNFASTEN)
if(anchored)
connect_to_shuttle(port = SSshuttle.get_containing_shuttle(src)) //connect to a new ship, if needed
engine_state = ENGINE_WRENCHED
else
unsync_ship() //not part of the ship anymore
engine_state = ENGINE_UNWRENCHED
/obj/machinery/power/shuttle_engine/wrench_act(mob/living/user, obj/item/tool)
. = ..()
default_unfasten_wrench(user, tool)
return TOOL_ACT_TOOLTYPE_SUCCESS
/obj/machinery/power/shuttle_engine/welder_act(mob/living/user, obj/item/tool)
. = ..()
switch(engine_state)
if(ENGINE_UNWRENCHED)
to_chat(user, span_warning("The [src.name] needs to be wrenched to the floor!"))
if(ENGINE_WRENCHED)
if(!tool.tool_start_check(user, amount=round(ENGINE_WELDTIME / 5)))
return TRUE
user.visible_message(span_notice("[user.name] starts to weld the [name] to the floor."), \
span_notice("You start to weld \the [src] to the floor..."), \
span_hear("You hear welding."))
if(tool.use_tool(src, user, ENGINE_WELDTIME, volume=50))
engine_state = ENGINE_WELDED
to_chat(user, span_notice("You weld \the [src] to the floor."))
alter_engine_power(engine_power)
if(ENGINE_WELDED)
if(!tool.tool_start_check(user, amount=round(ENGINE_WELDTIME / 5)))
return TRUE
user.visible_message(span_notice("[user.name] starts to cut the [name] free from the floor."), \
span_notice("You start to cut \the [src] free from the floor..."), \
span_hear("You hear welding."))
if(tool.use_tool(src, user, ENGINE_WELDTIME, volume=50))
engine_state = ENGINE_WRENCHED
to_chat(user, span_notice("You cut \the [src] free from the floor."))
alter_engine_power(-engine_power)
return TRUE
//Propagates the change to the shuttle.
/obj/machinery/power/shuttle_engine/proc/alter_engine_power(mod)
if(!mod)
return
var/obj/docking_port/mobile/port = connected_ship_ref?.resolve()
if(port)
port.alter_engines(mod)
/obj/machinery/power/shuttle_engine/heater
name = "engine heater"
desc = "Directs energy into compressed particles in order to power engines."
icon_state = "heater"
circuit = /obj/item/circuitboard/machine/engine/heater
engine_power = 0 // todo make these into 2x1 parts
/obj/machinery/power/shuttle_engine/propulsion
name = "propulsion engine"
icon_state = "propulsion"
desc = "A standard reliable bluespace engine used by many forms of shuttles."
circuit = /obj/item/circuitboard/machine/engine/propulsion
opacity = TRUE
/obj/machinery/power/shuttle_engine/propulsion/left
name = "left propulsion engine"
icon_state = "propulsion_l"
/obj/machinery/power/shuttle_engine/propulsion/right
name = "right propulsion engine"
icon_state = "propulsion_r"
/obj/machinery/power/shuttle_engine/propulsion/burst
name = "burst engine"
desc = "An engine that releases a large bluespace burst to propel it."
/obj/machinery/power/shuttle_engine/propulsion/burst/cargo
engine_state = ENGINE_UNWRENCHED
anchored = FALSE
/obj/machinery/power/shuttle_engine/propulsion/burst/left
name = "left burst engine"
icon_state = "burst_l"
/obj/machinery/power/shuttle_engine/propulsion/burst/right
name = "right burst engine"
icon_state = "burst_r"
/obj/machinery/power/shuttle_engine/large
name = "engine"
icon = 'icons/obj/2x2.dmi'
icon_state = "large_engine"
desc = "A very large bluespace engine used to propel very large ships."
circuit = null
opacity = TRUE
bound_width = 64
bound_height = 64
appearance_flags = LONG_GLIDE
/obj/machinery/power/shuttle_engine/huge
name = "engine"
icon = 'icons/obj/3x3.dmi'
icon_state = "huge_engine"
desc = "An extremely large bluespace engine used to propel extremely large ships."
circuit = null
opacity = TRUE
bound_width = 96
bound_height = 96
appearance_flags = LONG_GLIDE
#undef ENGINE_UNWRENCHED
#undef ENGINE_WRENCHED
#undef ENGINE_WELDED
#undef ENGINE_WELDTIME