mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-06-05 06:05:58 +01:00
c0e46fabf7
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 /🆑
189 lines
5.9 KiB
Plaintext
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
|