[MIRROR] Immovable rod meets unstoppable tram [MDB IGNORE] (#23299)

* Immovable rod meets unstoppable tram (#77656)

## About The Pull Request

Adds interaction between immovable rod and the tram for the rare
occasions the rod hits it at the front or back while flying at a
parallel angle.

The rod will push/pull the tram in the direction it's flying until a
short distance past the tram's usual landmark, eventually winning and
carrying on.

- Only applies to random rods, if the rod has a target it will ignore
the tram as usual.
- Looping rod only pushes the tram once.
- As long as the tram has power, can be returned to the rails as usual
by calling it.

## Why It's Good For The Game

When the HoP is having a really unlucky day.

https://github.com/tgstation/tgstation/assets/83487515/2f0393cd-f796-4b00-8674-d97e57358543

https://github.com/tgstation/tgstation/assets/83487515/f74c8497-8d62-4fcf-80a0-da7259160b7f

## Changelog

🆑 LT3
add: Immovable rod will now battle the unstoppable tram should they
cross paths
fix: Birdshot's maint tram doors now work properly
fix: Tramstation's exterior light fixtures no longer get destroyed as
soon as the tram moves
code: Tram landmarks are now all subtyped instead of map varedits
/🆑

* Immovable rod meets unstoppable tram

---------

Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
This commit is contained in:
SkyratBot
2023-08-24 16:06:58 -07:00
committed by GitHub
co-authored by lessthanthree
parent 3f9fec7b03
commit a4fae9cdb5
13 changed files with 1562 additions and 1352 deletions
+9 -3
View File
@@ -221,9 +221,12 @@
if(!tram || !tram.is_operational) //tram is QDEL or has no power
say("The tram is not in service. Please send a technician to repair the internals of the tram.")
return
if(tram.travelling) //in use
if(tram.travelling) //already on its way
say("The tram is already travelling to [tram.idle_platform].")
return
if(tram.controls_locked) //attempting a dispatch or on cooldown
say("The tram controller is busy. Try again in a moment.")
return
if(!destination_platform)
return
var/obj/effect/landmark/tram/current_location = destination_platform.resolve()
@@ -233,5 +236,8 @@
say("The tram is already here. Please board the tram and select a destination.")
return
say("The tram has been called to [current_location.name]. Please wait for its arrival.")
tram.tram_travel(current_location)
if(tram.tram_travel(current_location))
say("The tram has been called to [current_location.name]. Please wait for its arrival.")
return
else
say("The tram controller has encountered an error. Try again in a moment.")