mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-22 20:48:56 +01:00
Tram door/panel hotfix [NO GBP] (#79093)
## About The Pull Request - The actions to open/close and lock/unlock are supposed to match closets, but I got it backwards. Swaps them around. - The lock now works as expected no matter if your ID card is in hand, in a wallet, or in your PDA. - Moves early return for when welder has no fuel. - There was no indication spoilers were tampered/malfunctioning. Added an overlay, examine text, context hint, and welder action so it's more apparent to players. - Fixing an emagged spoiler is now multitool-weld, to match the overlay. - Added some missing var docs. - Improved the wording of some tram error messages about why it's broken (ie: no power.) - Fixed crossing signals not showing correct status/examine text when broken/no power  ## Changelog 🆑 LT3 fix: Fixed tram cabinet LMB/RMB actions being reversed fix: Tram cabinet can now read IDs inside PDAs and wallets fix: Crossing signals now correctly indicate broken/no power fix: Trying to repair tram (weld) without welding fuel fails fix: You can actually unbolt the tram controller from the wall qol: Tram spoilers now have visual and examine hints about being malfunctioning/emagged qol: Improved some tram error messages /🆑 --------- Co-authored-by: Jacquerel <hnevard@gmail.com>
This commit is contained in:
co-authored by
Jacquerel
parent
f081befc3f
commit
1abede91a1
@@ -132,6 +132,7 @@
|
||||
QDEL_LAZYLIST(methods_to_fix)
|
||||
malfunctioning = FALSE
|
||||
set_machine_stat(machine_stat & ~EMAGGED)
|
||||
set_is_operational(TRUE)
|
||||
update_appearance()
|
||||
return TRUE
|
||||
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
*/
|
||||
/datum/tram_mfg_info/New(specific_transport_id)
|
||||
if(GLOB.round_id)
|
||||
serial_number = "LT306TG[add_leading(GLOB.round_id, 6, 0)]"
|
||||
serial_number = "LT306TG[add_leading(GLOB.round_id, 6, "0")]"
|
||||
else
|
||||
serial_number = "LT306TG[rand(000000, 999999)]"
|
||||
|
||||
@@ -724,10 +724,9 @@
|
||||
context[SCREENTIP_CONTEXT_RMB] = panel_open ? "close panel" : "open panel"
|
||||
|
||||
if(!held_item)
|
||||
context[SCREENTIP_CONTEXT_RMB] = cover_open ? "close cabinet" : "open cabinet"
|
||||
context[SCREENTIP_CONTEXT_LMB] = cover_open ? "access controls" : "open cabinet"
|
||||
context[SCREENTIP_CONTEXT_RMB] = cover_open ? "close cabinet" : "toggle lock"
|
||||
|
||||
if(istype(held_item, /obj/item/card/id/) && allowed(user) && !cover_open)
|
||||
context[SCREENTIP_CONTEXT_LMB] = cover_locked ? "unlock cabinet" : "lock cabinet"
|
||||
|
||||
if(panel_open)
|
||||
if(held_item?.tool_behaviour == TOOL_WRENCH)
|
||||
@@ -748,6 +747,7 @@
|
||||
. += span_notice("The door appears to be [cover_locked ? "locked. Swipe an ID card to unlock" : "unlocked. Swipe an ID card to lock"].")
|
||||
if(panel_open)
|
||||
. += span_notice("It is secured to the tram wall with [EXAMINE_HINT("bolts.")]")
|
||||
. += span_notice("The maintenance panel can be closed with a [EXAMINE_HINT("screwdriver.")]")
|
||||
else
|
||||
. += span_notice("The maintenance panel can be opened with a [EXAMINE_HINT("screwdriver.")]")
|
||||
|
||||
@@ -756,35 +756,108 @@
|
||||
. += span_notice("The [EXAMINE_HINT("red stop button")] immediately stops the tram, requiring a reset afterwards.")
|
||||
. += span_notice("The cabinet can be closed with a [EXAMINE_HINT("Right-click.")]")
|
||||
else
|
||||
. += span_notice("The cabinet can be opened with a [EXAMINE_HINT("Right-click.")]")
|
||||
. += span_notice("The cabinet can be opened with a [EXAMINE_HINT("Left-click.")]")
|
||||
|
||||
|
||||
/obj/machinery/transport/tram_controller/attackby(obj/item/weapon, mob/living/user, params)
|
||||
if(!user.combat_mode)
|
||||
if(weapon && istype(weapon, /obj/item/card/id) && !cover_open)
|
||||
return try_toggle_lock(user)
|
||||
if(user.combat_mode || cover_open)
|
||||
return ..()
|
||||
|
||||
var/obj/item/card/id/id_card = user.get_id_in_hand()
|
||||
if(!isnull(id_card))
|
||||
try_toggle_lock(user, id_card)
|
||||
return
|
||||
|
||||
return ..()
|
||||
|
||||
/obj/machinery/transport/tram_controller/attack_hand(mob/living/user, params)
|
||||
. = ..()
|
||||
if(cover_open)
|
||||
return
|
||||
|
||||
if(cover_locked)
|
||||
var/obj/item/card/id/id_card = user.get_idcard(TRUE)
|
||||
if(isnull(id_card))
|
||||
balloon_alert(user, "access denied!")
|
||||
return
|
||||
|
||||
try_toggle_lock(user, id_card)
|
||||
return
|
||||
|
||||
toggle_door()
|
||||
|
||||
/obj/machinery/transport/tram_controller/attack_hand_secondary(mob/living/user, params)
|
||||
. = ..()
|
||||
|
||||
if(!cover_open)
|
||||
var/obj/item/card/id/id_card = user.get_idcard(TRUE)
|
||||
if(isnull(id_card))
|
||||
balloon_alert(user, "access denied!")
|
||||
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
|
||||
|
||||
try_toggle_lock(user, id_card)
|
||||
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
|
||||
|
||||
toggle_door()
|
||||
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
|
||||
|
||||
/obj/machinery/transport/tram_controller/proc/toggle_door()
|
||||
if(!cover_open)
|
||||
playsound(loc, 'sound/machines/closet_open.ogg', 35, TRUE, -3)
|
||||
else
|
||||
playsound(loc, 'sound/machines/closet_close.ogg', 50, TRUE, -3)
|
||||
cover_open = !cover_open
|
||||
update_appearance()
|
||||
|
||||
/obj/machinery/transport/tram_controller/proc/try_toggle_lock(mob/living/user, obj/item/card/id_card, params)
|
||||
if(isnull(id_card))
|
||||
id_card = user.get_idcard(TRUE)
|
||||
if(obj_flags & EMAGGED)
|
||||
balloon_alert(user, "access controller damaged!")
|
||||
return FALSE
|
||||
|
||||
if(check_access(id_card))
|
||||
cover_locked = !cover_locked
|
||||
balloon_alert(user, "controls [cover_locked ? "locked" : "unlocked"]")
|
||||
update_appearance()
|
||||
return TRUE
|
||||
|
||||
balloon_alert(user, "access denied!")
|
||||
return FALSE
|
||||
|
||||
/obj/machinery/transport/tram_controller/wrench_act_secondary(mob/living/user, obj/item/tool)
|
||||
. = ..()
|
||||
if(panel_open)
|
||||
if(panel_open && cover_open)
|
||||
balloon_alert(user, "unsecuring...")
|
||||
tool.play_tool_sound(src)
|
||||
if(tool.use_tool(src, user, 6 SECONDS))
|
||||
playsound(loc, 'sound/items/deconstruct.ogg', 50, vary = TRUE)
|
||||
balloon_alert(user, "unsecured")
|
||||
deconstruct()
|
||||
if(!tool.use_tool(src, user, 6 SECONDS))
|
||||
return
|
||||
playsound(loc, 'sound/items/deconstruct.ogg', 50, vary = TRUE)
|
||||
balloon_alert(user, "unsecured")
|
||||
deconstruct()
|
||||
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
|
||||
|
||||
/obj/machinery/transport/tram_controller/screwdriver_act_secondary(mob/living/user, obj/item/tool)
|
||||
. = ..()
|
||||
if(!cover_open)
|
||||
return
|
||||
|
||||
tool.play_tool_sound(src)
|
||||
panel_open = !panel_open
|
||||
balloon_alert(user, "[panel_open ? "mounting bolts exposed" : "mounting bolts hidden"]")
|
||||
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
|
||||
|
||||
/obj/machinery/transport/tram_controller/deconstruct(disassembled = TRUE)
|
||||
if(flags_1 & NODECONSTRUCT_1)
|
||||
return
|
||||
|
||||
var/turf/drop_location = find_obstruction_free_location(1, src)
|
||||
|
||||
if(disassembled)
|
||||
new /obj/item/wallframe/tram/controller(drop_location())
|
||||
new /obj/item/wallframe/tram/controller(drop_location)
|
||||
else
|
||||
new /obj/item/stack/sheet/mineral/titanium(drop_location(), 2)
|
||||
new /obj/item/stack/sheet/iron(drop_location(), 1)
|
||||
new /obj/item/shard(drop_location())
|
||||
new /obj/item/stack/sheet/mineral/titanium(drop_location, 2)
|
||||
new /obj/item/stack/sheet/iron(drop_location, 1)
|
||||
qdel(src)
|
||||
|
||||
/**
|
||||
@@ -877,46 +950,6 @@
|
||||
return
|
||||
update_appearance()
|
||||
|
||||
/obj/machinery/transport/tram_controller/attack_hand(mob/living/user, params)
|
||||
. = ..()
|
||||
if(!cover_open && cover_locked)
|
||||
balloon_alert(user, "it's locked! swipe ID!")
|
||||
return
|
||||
|
||||
/obj/machinery/transport/tram_controller/attack_hand_secondary(mob/living/user, params)
|
||||
. = ..()
|
||||
|
||||
if(!cover_open && cover_locked)
|
||||
balloon_alert(user, "it's locked! swipe ID!")
|
||||
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
|
||||
|
||||
toggle_door()
|
||||
return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN
|
||||
|
||||
/obj/machinery/transport/tram_controller/proc/toggle_door()
|
||||
if(!cover_open)
|
||||
playsound(loc, 'sound/machines/closet_open.ogg', 35, TRUE, -3)
|
||||
else
|
||||
playsound(loc, 'sound/machines/closet_close.ogg', 50, TRUE, -3)
|
||||
cover_open = !cover_open
|
||||
update_appearance()
|
||||
|
||||
/obj/machinery/transport/tram_controller/proc/try_toggle_lock(mob/living/user, item, params)
|
||||
var/obj/item/card/id/id_card = user.get_idcard(TRUE)
|
||||
if(obj_flags & EMAGGED)
|
||||
balloon_alert(user, "access controller damaged!")
|
||||
return FALSE
|
||||
|
||||
else if(check_access(id_card))
|
||||
cover_locked = !cover_locked
|
||||
balloon_alert(user, "controls [cover_locked ? "locked" : "unlocked"]")
|
||||
update_appearance()
|
||||
return TRUE
|
||||
|
||||
else
|
||||
balloon_alert(user, "access denied")
|
||||
return FALSE
|
||||
|
||||
/obj/machinery/transport/tram_controller/emag_act(mob/user, obj/item/card/emag/emag_card)
|
||||
if(obj_flags & EMAGGED)
|
||||
balloon_alert(user, "already fried!")
|
||||
|
||||
@@ -241,7 +241,7 @@
|
||||
if(INVALID_PLATFORM)
|
||||
say("Configuration error. Please contact the nearest engineer.")
|
||||
if(INTERNAL_ERROR)
|
||||
say("Tram controller error. Please contact the nearest engineer.")
|
||||
say("Tram controller error. Please contact the nearest engineer or crew member with telecommunications access to reset the controller.")
|
||||
else
|
||||
return
|
||||
|
||||
|
||||
@@ -58,17 +58,17 @@
|
||||
if(BROKEN_BEYOND_REPAIR)
|
||||
say("The tram has suffered a catastrophic failure. Please seek alternate modes of travel.")
|
||||
if(NOT_IN_SERVICE) //tram has no power or other fault, but it's not broken forever
|
||||
say("The tram is not in service. Please contact the nearest engineer.")
|
||||
say("The tram is not in service due to loss of power or system problems. Please contact the nearest engineer to check power and controller.")
|
||||
if(INVALID_PLATFORM) //engineer needs to fix button
|
||||
say("Button configuration error. Please contact the nearest engineer.")
|
||||
if(TRANSPORT_IN_USE)
|
||||
say("The tram is tramversing the station, please wait.")
|
||||
if(INTERNAL_ERROR)
|
||||
say("Tram controller error. Please contact the nearest engineer.")
|
||||
say("Tram controller error. Please contact the nearest engineer or crew member with telecommunications access to reset the controller.")
|
||||
if(NO_CALL_REQUIRED) //already here
|
||||
say("The tram is already here. Please board the tram and select a destination.")
|
||||
else
|
||||
say("Tram controller error. Please contact the nearest engineer.")
|
||||
say("Tram controller error. Please contact the nearest engineer or crew member with telecommunications access to reset the controller.")
|
||||
|
||||
/obj/item/assembly/control/transport/call_button/activate()
|
||||
if(cooldown)
|
||||
|
||||
@@ -151,7 +151,7 @@
|
||||
. += span_notice("It can be flipped or rotated with a [EXAMINE_HINT("wrench.")]")
|
||||
switch(operating_status)
|
||||
if(TRANSPORT_REMOTE_WARNING)
|
||||
. += span_notice("The yellow [EXAMINE_HINT("remote warning")] light is on.")
|
||||
. += span_notice("The orange [EXAMINE_HINT("remote warning")] light is on.")
|
||||
. += span_notice("The status display reads: Check track sensor.")
|
||||
if(TRANSPORT_REMOTE_FAULT)
|
||||
. += span_notice("The blue [EXAMINE_HINT("remote fault")] light is on.")
|
||||
@@ -250,19 +250,24 @@
|
||||
SIGNAL_HANDLER
|
||||
|
||||
if(machine_stat & BROKEN || machine_stat & NOPOWER)
|
||||
operating_status = TRANSPORT_LOCAL_FAULT
|
||||
update_appearance()
|
||||
return
|
||||
|
||||
if(prob(TRANSPORT_BREAKDOWN_RATE))
|
||||
operating_status = TRANSPORT_LOCAL_FAULT
|
||||
local_fault()
|
||||
return
|
||||
|
||||
operating_status = TRANSPORT_SYSTEM_NORMAL
|
||||
|
||||
var/datum/transport_controller/linear/tram/tram = transport_ref?.resolve()
|
||||
var/obj/machinery/transport/guideway_sensor/linked_sensor = sensor_ref?.resolve()
|
||||
|
||||
if(isnull(tram) || tram.controller_status & COMM_ERROR)
|
||||
if(malfunctioning)
|
||||
operating_status = TRANSPORT_LOCAL_FAULT
|
||||
else if(isnull(tram) || tram.controller_status & COMM_ERROR)
|
||||
operating_status = TRANSPORT_REMOTE_FAULT
|
||||
else
|
||||
operating_status = TRANSPORT_SYSTEM_NORMAL
|
||||
|
||||
if(isnull(linked_sensor))
|
||||
link_sensor()
|
||||
@@ -271,14 +276,17 @@
|
||||
|
||||
/obj/machinery/transport/crossing_signal/on_set_machine_stat()
|
||||
. = ..()
|
||||
if(machine_stat & BROKEN)
|
||||
operating_status = TRANSPORT_REMOTE_FAULT
|
||||
if(machine_stat & BROKEN || machine_stat & NOPOWER)
|
||||
operating_status = TRANSPORT_LOCAL_FAULT
|
||||
else
|
||||
operating_status = TRANSPORT_SYSTEM_NORMAL
|
||||
|
||||
/obj/machinery/transport/crossing_signal/on_set_is_operational()
|
||||
. = ..()
|
||||
|
||||
if(!is_operational)
|
||||
operating_status = TRANSPORT_LOCAL_FAULT
|
||||
else
|
||||
operating_status = TRANSPORT_SYSTEM_NORMAL
|
||||
update_operating()
|
||||
|
||||
/obj/machinery/transport/crossing_signal/proc/comms_change(source, controller, new_status)
|
||||
@@ -529,7 +537,7 @@
|
||||
. += span_notice("It can be rotated with a [EXAMINE_HINT("wrench.")]")
|
||||
switch(operating_status)
|
||||
if(TRANSPORT_REMOTE_WARNING)
|
||||
. += span_notice("The yellow [EXAMINE_HINT("remote warning")] light is on.")
|
||||
. += span_notice("The orange [EXAMINE_HINT("remote warning")] light is on.")
|
||||
. += span_notice("The status display reads: Check paired sensor.")
|
||||
if(TRANSPORT_REMOTE_FAULT)
|
||||
. += span_notice("The blue [EXAMINE_HINT("remote fault")] light is on.")
|
||||
@@ -603,10 +611,8 @@
|
||||
|
||||
/obj/machinery/transport/guideway_sensor/update_overlays()
|
||||
. = ..()
|
||||
if(machine_stat & NOPOWER)
|
||||
return
|
||||
|
||||
if(machine_stat & BROKEN)
|
||||
if(machine_stat & BROKEN || machine_stat & NOPOWER || malfunctioning)
|
||||
operating_status = TRANSPORT_LOCAL_FAULT
|
||||
. += mutable_appearance(icon, "sensor-[TRANSPORT_LOCAL_FAULT]")
|
||||
. += emissive_appearance(icon, "sensor-[TRANSPORT_LOCAL_FAULT]", src, alpha = src.alpha)
|
||||
@@ -649,9 +655,11 @@
|
||||
SIGNAL_HANDLER
|
||||
|
||||
if(machine_stat & BROKEN)
|
||||
update_appearance()
|
||||
return
|
||||
|
||||
if(prob(TRANSPORT_BREAKDOWN_RATE))
|
||||
operating_status = TRANSPORT_LOCAL_FAULT
|
||||
local_fault()
|
||||
|
||||
var/obj/machinery/transport/guideway_sensor/buddy = paired_sensor?.resolve()
|
||||
|
||||
@@ -40,14 +40,22 @@
|
||||
explosion_block = 3
|
||||
receive_ricochet_chance_mod = 1.2
|
||||
rad_insulation = RAD_MEDIUM_INSULATION
|
||||
/// What state of de/construction it's in
|
||||
var/state = TRAM_SCREWED_TO_FRAME
|
||||
/// Mineral to return when deconstructed
|
||||
var/mineral = /obj/item/stack/sheet/titaniumglass
|
||||
/// Amount of mineral to return when deconstructed
|
||||
var/mineral_amount = 2
|
||||
/// Type of structure made out of girder
|
||||
var/tram_wall_type = /obj/structure/tram
|
||||
/// Type of girder made when deconstructed
|
||||
var/girder_type = /obj/structure/girder/tram
|
||||
var/mutable_appearance/damage_overlay
|
||||
/// Sound when it breaks
|
||||
var/break_sound = SFX_SHATTER
|
||||
/// Sound when hit without combat mode
|
||||
var/knock_sound = 'sound/effects/glassknock.ogg'
|
||||
/// Sound when hit with combat mode
|
||||
var/bash_sound = 'sound/effects/glassbash.ogg'
|
||||
|
||||
/obj/structure/tram/split
|
||||
@@ -459,18 +467,20 @@
|
||||
desc = "Nanotrasen bought the luxury package under the impression titanium spoilers make the tram go faster. They're just for looks, or potentially stabbing anybody who gets in the way."
|
||||
icon_state = "tram-spoiler-retracted"
|
||||
max_integrity = 400
|
||||
///Position of the spoiler
|
||||
var/deployed = FALSE
|
||||
///Weakref to the tram piece we control
|
||||
var/datum/weakref/tram_ref
|
||||
///The tram we're attached to
|
||||
var/tram_id = TRAMSTATION_LINE_1
|
||||
obj_flags = CAN_BE_HIT
|
||||
mineral = /obj/item/stack/sheet/mineral/titanium
|
||||
girder_type = /obj/structure/girder/tram/corner
|
||||
smoothing_flags = NONE
|
||||
smoothing_groups = null
|
||||
canSmoothWith = null
|
||||
/// Position of the spoiler
|
||||
var/deployed = FALSE
|
||||
/// Malfunctioning due to tampering or emag
|
||||
var/malfunctioning = FALSE
|
||||
/// Weakref to the tram piece we control
|
||||
var/datum/weakref/tram_ref
|
||||
/// The tram we're attached to
|
||||
var/tram_id = TRAMSTATION_LINE_1
|
||||
|
||||
/obj/structure/tram/spoiler/Initialize(mapload)
|
||||
. = ..()
|
||||
@@ -485,15 +495,33 @@
|
||||
if(held_item?.tool_behaviour == TOOL_MULTITOOL && (obj_flags & EMAGGED))
|
||||
context[SCREENTIP_CONTEXT_LMB] = "repair"
|
||||
|
||||
if(held_item?.tool_behaviour == TOOL_WELDER && atom_integrity >= max_integrity)
|
||||
context[SCREENTIP_CONTEXT_LMB] = "[malfunctioning ? "repair" : "lock"]"
|
||||
|
||||
return CONTEXTUAL_SCREENTIP_SET
|
||||
|
||||
/obj/structure/tram/spoiler/examine(mob/user)
|
||||
. = ..()
|
||||
if(obj_flags & EMAGGED)
|
||||
. += span_warning("The electronics panel is sparking occasionally. It can be reset with a [EXAMINE_HINT("multitool.")]")
|
||||
|
||||
if(malfunctioning)
|
||||
. += span_warning("The spoiler is [EXAMINE_HINT("welded")] in place!")
|
||||
else
|
||||
. += span_notice("The spoiler can be locked in to place with a [EXAMINE_HINT("welder.")]")
|
||||
|
||||
/obj/structure/tram/spoiler/proc/set_spoiler(source, controller, controller_active, controller_status, travel_direction)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
var/spoiler_direction = travel_direction
|
||||
if(obj_flags & EMAGGED || controller_status & COMM_ERROR)
|
||||
if(obj_flags & EMAGGED && !malfunctioning)
|
||||
malfunctioning = TRUE
|
||||
|
||||
if(malfunctioning || controller_status & COMM_ERROR)
|
||||
if(!deployed)
|
||||
// Bring out the blades
|
||||
if(malfunctioning)
|
||||
visible_message(span_danger("\the [src] locks up due to its servo overheating!"))
|
||||
do_sparks(3, cardinal_only = FALSE, source = src)
|
||||
deploy_spoiler()
|
||||
return
|
||||
@@ -523,6 +551,7 @@
|
||||
flick("tram-spoiler-deploying", src)
|
||||
icon_state = "tram-spoiler-deployed"
|
||||
deployed = TRUE
|
||||
update_appearance()
|
||||
|
||||
/obj/structure/tram/spoiler/proc/retract_spoiler()
|
||||
if(!deployed)
|
||||
@@ -530,11 +559,12 @@
|
||||
flick("tram-spoiler-retracting", src)
|
||||
icon_state = "tram-spoiler-retracted"
|
||||
deployed = FALSE
|
||||
update_appearance()
|
||||
|
||||
/obj/structure/tram/spoiler/emag_act(mob/user)
|
||||
if(obj_flags & EMAGGED)
|
||||
return
|
||||
to_chat(user, span_warning("You short-circuit the [src]'s locking mechanism!"), type = MESSAGE_TYPE_INFO)
|
||||
to_chat(user, span_warning("You short-circuit the [src]'s servo to overheat!"), type = MESSAGE_TYPE_INFO)
|
||||
playsound(src, SFX_SPARKS, 100, vary = TRUE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE)
|
||||
do_sparks(5, cardinal_only = FALSE, source = src)
|
||||
obj_flags |= EMAGGED
|
||||
@@ -550,6 +580,37 @@
|
||||
|
||||
return FALSE
|
||||
|
||||
/obj/structure/tram/spoiler/welder_act(mob/living/user, obj/item/tool)
|
||||
if(!tool.tool_start_check(user, amount = 1))
|
||||
return FALSE
|
||||
|
||||
if(atom_integrity >= max_integrity)
|
||||
to_chat(user, span_warning("You begin to weld \the [src], [malfunctioning ? "repairing damage" : "preventing retraction"]."))
|
||||
if(!tool.use_tool(src, user, 4 SECONDS, volume = 50))
|
||||
return
|
||||
malfunctioning = !malfunctioning
|
||||
user.visible_message(span_warning("[user] [malfunctioning ? "welds \the [src] in place" : "repairs \the [src]"] with [tool]."), \
|
||||
span_warning("You finish welding \the [src], [malfunctioning ? "locking it in place." : "it can move freely again!"]"), null, COMBAT_MESSAGE_RANGE)
|
||||
|
||||
if(malfunctioning)
|
||||
deploy_spoiler()
|
||||
|
||||
update_appearance()
|
||||
return TOOL_ACT_TOOLTYPE_SUCCESS
|
||||
|
||||
to_chat(user, span_notice("You begin repairing [src]..."))
|
||||
if(!tool.use_tool(src, user, 4 SECONDS, volume = 50))
|
||||
return
|
||||
atom_integrity = max_integrity
|
||||
to_chat(user, span_notice("You repair [src]."))
|
||||
update_appearance()
|
||||
return TOOL_ACT_TOOLTYPE_SUCCESS
|
||||
|
||||
/obj/structure/tram/spoiler/update_overlays()
|
||||
. = ..()
|
||||
if(deployed && malfunctioning)
|
||||
. += mutable_appearance(icon, "tram-spoiler-welded")
|
||||
|
||||
/obj/structure/chair/sofa/bench/tram
|
||||
name = "bench"
|
||||
desc = "Perfectly designed to be comfortable to sit on, and hellish to sleep on."
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 9.2 KiB After Width: | Height: | Size: 5.1 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 38 KiB |
@@ -1,11 +0,0 @@
|
||||
#comment Repathing for Transport Subsystem
|
||||
|
||||
/obj/structure/industrial_lift : /obj/structure/transport/linear{@OLD}
|
||||
/obj/structure/industrial_lift/public : /obj/structure/transport/linear/public{@OLD}
|
||||
/obj/structure/industrial_lift/debug : /obj/structure/transport/linear/debug{@OLD}
|
||||
/obj/structure/industrial_lift/tram : /obj/structure/transport/linear/tram{@OLD}
|
||||
/obj/effect/landmark/lift_id : /obj/effect/landmark/transport/transport_id{@OLD}
|
||||
/obj/effect/landmark/tram/nav/immovable_rod : /obj/effect/landmark/transport/nav_beacon/tram/nav/immovable_rod{@OLD}
|
||||
/turf/open/floor/noslip/tram_plate : /turf/open/floor/tram/plate{@OLD}
|
||||
/turf/open/floor/noslip/tram_plate/energized : /turf/open/floor/tram/plate/energized{@OLD}
|
||||
/turf/open/floor/noslip/tram_platform : /turf/open/floor/tram{@OLD}
|
||||
@@ -0,0 +1,21 @@
|
||||
#comment Repathing for Transport Subsystem
|
||||
|
||||
/obj/structure/industrial_lift{specific_lift_id=@ANY} : /obj/structure/transport/linear{@OLD; specific_lift_id=@SKIP; specific_transport_id=@OLD:specific_lift_id}
|
||||
/obj/structure/industrial_lift/public{specific_lift_id=@ANY} : /obj/structure/transport/linear/public{@OLD; specific_lift_id=@SKIP; specific_transport_id=@OLD:specific_lift_id}
|
||||
/obj/structure/industrial_lift/debug{specific_lift_id=@ANY} : /obj/structure/transport/linear/debug{@OLD; specific_lift_id=@SKIP; specific_transport_id=@OLD:specific_lift_id}
|
||||
/obj/structure/industrial_lift/tram{specific_lift_id=@ANY} : /obj/structure/transport/linear/tram{@OLD; specific_lift_id=@SKIP; specific_transport_id=@OLD:specific_lift_id}
|
||||
/obj/effect/landmark/lift_id{specific_lift_id=@ANY} : /obj/effect/landmark/transport/transport_id{@OLD; specific_lift_id=@SKIP; specific_transport_id=@OLD:specific_lift_id}
|
||||
/obj/effect/landmark/tram/nav/immovable_rod{specific_lift_id=@ANY} : /obj/effect/landmark/transport/nav_beacon/tram/nav/immovable_rod{@OLD; specific_lift_id=@SKIP; specific_transport_id=@OLD:specific_lift_id}
|
||||
/turf/open/floor/noslip/tram_plate : /turf/open/floor/tram/plate{@OLD}
|
||||
/turf/open/floor/noslip/tram_plate/energized : /turf/open/floor/tram/plate/energized{@OLD}
|
||||
/turf/open/floor/noslip/tram_platform : /turf/open/floor/tram{@OLD}
|
||||
/obj/machinery/door/window/elevator/left{elevator_linked_id=@ANY} : /obj/machinery/door/window/elevator/left{@OLD; elevator_linked_id=@SKIP; transport_linked_id=@OLD:elevator_linked_id}
|
||||
/obj/machinery/door/window/elevator/left/directional/north{elevator_linked_id=@ANY} : /obj/machinery/door/window/elevator/left/directional/north{@OLD; elevator_linked_id=@SKIP; transport_linked_id=@OLD:elevator_linked_id}
|
||||
/obj/machinery/door/window/elevator/left/directional/south{elevator_linked_id=@ANY} : /obj/machinery/door/window/elevator/left/directional/south{@OLD; elevator_linked_id=@SKIP; transport_linked_id=@OLD:elevator_linked_id}
|
||||
/obj/machinery/door/window/elevator/left/directional/east{elevator_linked_id=@ANY} : /obj/machinery/door/window/elevator/left/directional/east{@OLD; elevator_linked_id=@SKIP; transport_linked_id=@OLD:elevator_linked_id}
|
||||
/obj/machinery/door/window/elevator/left/directional/west{elevator_linked_id=@ANY} : /obj/machinery/door/window/elevator/left/directional/west{@OLD; elevator_linked_id=@SKIP; transport_linked_id=@OLD:elevator_linked_id}
|
||||
/obj/machinery/door/window/elevator/right{elevator_linked_id=@ANY} : /obj/machinery/door/window/elevator/right{@OLD; elevator_linked_id=@SKIP; transport_linked_id=@OLD:elevator_linked_id}
|
||||
/obj/machinery/door/window/elevator/right/directional/north{elevator_linked_id=@ANY} : /obj/machinery/door/window/elevator/right/directional/north{@OLD; elevator_linked_id=@SKIP; transport_linked_id=@OLD:elevator_linked_id}
|
||||
/obj/machinery/door/window/elevator/right/directional/south{elevator_linked_id=@ANY} : /obj/machinery/door/window/elevator/right/directional/south{@OLD; elevator_linked_id=@SKIP; transport_linked_id=@OLD:elevator_linked_id}
|
||||
/obj/machinery/door/window/elevator/right/directional/east{elevator_linked_id=@ANY} : /obj/machinery/door/window/elevator/right/directional/east{@OLD; elevator_linked_id=@SKIP; transport_linked_id=@OLD:elevator_linked_id}
|
||||
/obj/machinery/door/window/elevator/right/directional/west{elevator_linked_id=@ANY} : /obj/machinery/door/window/elevator/right/directional/west{@OLD; elevator_linked_id=@SKIP; transport_linked_id=@OLD:elevator_linked_id}
|
||||
Reference in New Issue
Block a user