Electrified tram plate (#74334)

A new addition for the bad luck smite/cursed trait. A chance of getting
an electric shock when crossing the tram rails.

While it adds no additional danger for normal crew, if you have the bad
luck smite or cursed trait you may be in for a shocking surprise!
This commit is contained in:
lessthanthree
2023-04-04 16:04:27 -05:00
committed by GitHub
parent 8f7acf8c3e
commit 70aef0490a
5 changed files with 148 additions and 35 deletions
+49 -8
View File
@@ -20422,6 +20422,12 @@
},
/turf/open/floor/iron/dark,
/area/station/engineering/storage/tech)
"fPa" = (
/turf/open/floor/noslip/tram_plate/energized{
outbound = 2;
inbound = 1
},
/area/station/hallway/primary/tram/left)
"fPh" = (
/obj/machinery/power/apc/auto_name/directional/east,
/obj/machinery/firealarm/directional/south,
@@ -27294,6 +27300,16 @@
},
/turf/open/floor/iron,
/area/station/cargo/miningdock)
"iBj" = (
/obj/effect/turf_decal/stripes/white/line{
dir = 1
},
/obj/effect/turf_decal/stripes/white/line,
/turf/open/floor/noslip/tram_plate/energized{
inbound = 1;
outbound = 2
},
/area/station/hallway/primary/tram/left)
"iBm" = (
/obj/machinery/light/directional/west,
/obj/structure/bed{
@@ -35571,7 +35587,10 @@
dir = 1
},
/obj/effect/turf_decal/stripes/white/line,
/turf/open/floor/noslip/tram_plate,
/turf/open/floor/noslip/tram_plate/energized{
outbound = 2;
inbound = 1
},
/area/station/hallway/primary/tram/left)
"lxH" = (
/obj/structure/table,
@@ -45688,6 +45707,16 @@
/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2,
/turf/open/floor/iron,
/area/station/hallway/secondary/service)
"ppb" = (
/obj/effect/turf_decal/stripes/white/line{
dir = 1
},
/obj/effect/turf_decal/stripes/white/line,
/turf/open/floor/noslip/tram_plate/energized{
outbound = 3;
inbound = 2
},
/area/station/hallway/primary/tram/center)
"pph" = (
/obj/structure/table/glass,
/obj/item/storage/box/syringes{
@@ -46875,7 +46904,10 @@
dir = 1
},
/obj/effect/turf_decal/stripes/white/line,
/turf/open/floor/noslip/tram_plate,
/turf/open/floor/noslip/tram_plate/energized{
outbound = 2;
inbound = 1
},
/area/station/hallway/primary/tram/center)
"pHM" = (
/obj/structure/lattice,
@@ -48564,6 +48596,12 @@
/obj/structure/cable,
/turf/open/floor/wood,
/area/station/commons/vacant_room/office)
"qog" = (
/turf/open/floor/noslip/tram_plate/energized{
outbound = 3;
inbound = 2
},
/area/station/hallway/primary/tram/right)
"qoo" = (
/obj/machinery/door/airlock/research/glass{
name = "Robotics Lab"
@@ -70103,7 +70141,10 @@
dir = 1
},
/obj/effect/turf_decal/stripes/white/line,
/turf/open/floor/noslip/tram_plate,
/turf/open/floor/noslip/tram_plate/energized{
outbound = 3;
inbound = 2
},
/area/station/hallway/primary/tram/right)
"yfw" = (
/obj/effect/turf_decal/trimline/blue/filled/line{
@@ -153082,7 +153123,7 @@ wqg
yiM
cFs
lNP
nJq
fPa
vVY
cFs
yiM
@@ -156423,7 +156464,7 @@ xBV
xlT
jva
qWY
lxz
iBj
jEc
jva
vlb
@@ -169787,7 +169828,7 @@ vok
aFp
kNT
brr
pHL
ppb
fbk
kNT
xXb
@@ -170044,7 +170085,7 @@ hEp
qRq
kNT
brr
pHL
ppb
fbk
kNT
wuH
@@ -182894,7 +182935,7 @@ vie
bMb
brm
iOd
ozQ
qog
vPi
brm
bMb
+10 -1
View File
@@ -2,7 +2,7 @@
* omen.dm: For when you want someone to have a really bad day
*
* When you attach an omen component to someone, they start running the risk of all sorts of bad environmental injuries, like nearby vending machines randomly falling on you,
* or hitting your head really hard when you slip and fall, or... well, for now those two are all I have. More will come.
* or hitting your head really hard when you slip and fall, or you get shocked by the tram rails at an unfortunate moment.
*
* Omens are removed once the victim is either maimed by one of the possible injuries, or if they receive a blessing (read: bashing with a bible) from the chaplain.
*/
@@ -69,7 +69,16 @@
qdel(src)
return
if(istype(our_guy_pos, /turf/open/floor/noslip/tram_plate/energized))
var/turf/open/floor/noslip/tram_plate/energized/future_tram_victim = our_guy_pos
if(future_tram_victim.toast(living_guy))
if(!permanent)
qdel(src)
return
for(var/turf/the_turf as anything in get_adjacent_open_turfs(living_guy))
if(istype(the_turf, /turf/open/floor/glass/reinforced/tram)) // don't fall off the tram bridge, we want to hit you instead
return
if(the_turf.zPassOut(living_guy, DOWN) && living_guy.can_z_move(DOWN, the_turf, z_move_flags = ZMOVE_FALL_FLAGS))
to_chat(living_guy, span_warning("A malevolent force guides you towards the edge..."))
living_guy.throw_at(the_turf, 1, 10, force = MOVE_FORCE_EXTREMELY_STRONG)
-26
View File
@@ -145,38 +145,12 @@
floor_tile = /obj/item/stack/tile/noslip
slowdown = -0.3
/turf/open/floor/noslip/tram_plate
name = "linear induction plate"
desc = "The linear induction plate that powers the tram."
icon_state = "tram_plate"
base_icon_state = "tram_plate"
slowdown = 0
/turf/open/floor/noslip/tram_platform
name = "tram platform"
desc = "A sturdy looking tram platform."
icon_state = "tram_platform"
base_icon_state = "tram_platform"
slowdown = 0
/turf/open/floor/noslip/broken_states()
return list("noslip-damaged1","noslip-damaged2","noslip-damaged3")
/turf/open/floor/noslip/burnt_states()
return list("noslip-scorched1","noslip-scorched2")
/turf/open/floor/noslip/tram_plate/broken_states()
return list("tram_plate-damaged1","tram_plate-damaged2")
/turf/open/floor/noslip/tram_plate/burnt_states()
return list("tram_plate-scorched1","tram_plate-scorched2")
/turf/open/floor/noslip/tram_platform/broken_states()
return list("tram_platform-damaged1","tram_platform-damaged2")
/turf/open/floor/noslip/tram_platform/burnt_states()
return list("tram_platform-scorched1","tram_platform-scorched2")
/turf/open/floor/noslip/MakeSlippery(wet_setting, min_wet_time, wet_time_to_add, max_wet_time, permanent)
return
@@ -0,0 +1,88 @@
/turf/open/floor/noslip/tram_plate
name = "linear induction plate"
desc = "The linear induction plate that powers the tram."
icon_state = "tram_plate"
base_icon_state = "tram_plate"
slowdown = 0
flags_1 = NONE
/turf/open/floor/noslip/tram_plate/energized
desc = "The linear induction plate that powers the tram. It is currently energized."
/// Inbound station
var/inbound
/// Outbound station
var/outbound
/turf/open/floor/noslip/tram_platform
name = "tram platform"
desc = "A sturdy looking tram platform."
icon_state = "tram_platform"
base_icon_state = "tram_platform"
slowdown = 0
/turf/open/floor/noslip/tram_plate/broken_states()
return list("tram_plate-damaged1","tram_plate-damaged2")
/turf/open/floor/noslip/tram_plate/burnt_states()
return list("tram_plate-scorched1","tram_plate-scorched2")
/turf/open/floor/noslip/tram_platform/broken_states()
return list("tram_platform-damaged1","tram_platform-damaged2")
/turf/open/floor/noslip/tram_platform/burnt_states()
return list("tram_platform-scorched1","tram_platform-scorched2")
/turf/open/floor/noslip/tram_plate/energized/proc/find_tram()
for(var/datum/lift_master/tram/tram as anything in GLOB.active_lifts_by_type[TRAM_LIFT_ID])
if(tram.specific_lift_id != MAIN_STATION_TRAM)
continue
return tram
/turf/open/floor/noslip/tram_plate/energized/proc/toast(mob/living/future_tram_victim)
var/datum/lift_master/tram/tram = find_tram()
// Check for stopped states.
if(!tram || !tram.is_operational || !inbound || !outbound)
return FALSE
var/obj/structure/industrial_lift/tram/tram_part = tram.return_closest_platform_to(src)
if(QDELETED(tram_part))
return FALSE
// Everything will be based on position and travel direction
var/plate_pos
var/tram_pos
var/tram_velocity_sign // 1 for positive axis movement, -1 for negative
// Try to be agnostic about N-S vs E-W movement
if(tram.travel_direction & (NORTH|SOUTH))
plate_pos = y
tram_pos = tram_part.y
tram_velocity_sign = tram.travel_direction & NORTH ? 1 : -1
else
plate_pos = x
tram_pos = tram_part.x
tram_velocity_sign = tram.travel_direction & EAST ? 1 : -1
// How far away are we? negative if already passed.
var/approach_distance = tram_velocity_sign * (plate_pos - (tram_pos + (XING_DEFAULT_TRAM_LENGTH * 0.5)))
// Check if our victim is in the active path of the tram.
if(!tram.travelling)
return FALSE
if(approach_distance < 0)
return FALSE
playsound(src, SFX_SPARKS, 75, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
audible_message(
span_hear("You hear an electric crackle when you step on the plate...")
)
if(tram.travel_direction & WEST && inbound < tram.idle_platform.platform_code)
return FALSE
if(tram.travel_direction & EAST && outbound > tram.idle_platform.platform_code)
return FALSE
if(approach_distance >= XING_DISTANCE_AMBER)
return FALSE
// Finally the interesting part where they ACTUALLY get hit!
future_tram_victim.electrocute_act(15, src, 1)
return TRUE
+1
View File
@@ -3492,6 +3492,7 @@
#include "code\modules\industrial_lift\industrial_lift.dm"
#include "code\modules\industrial_lift\lift_indicator.dm"
#include "code\modules\industrial_lift\lift_master.dm"
#include "code\modules\industrial_lift\tram\tram_floors.dm"
#include "code\modules\industrial_lift\tram\tram_landmark.dm"
#include "code\modules\industrial_lift\tram\tram_lift_master.dm"
#include "code\modules\industrial_lift\tram\tram_machinery.dm"