Remaps Intrepid and ports CM's double seats (#20809)

## About PR

- Introduces a dropship-esque Intrepid, making it feel more like a
public transport in a overpopulous city, while trying to avoid
chokepoints.

- Ports the CM's double seats.

- Removes access restriction from Intrepid's side airlocks, to be in par
with the main airlock.

- Deletes some rogue pipes near hangar bay.

- Re-adds a small oven which was introduced in #16449. With slight
tweaks and different colour palette.

This is probably an awful way to port CM's vehicle seats, but in testing
only issue I've found is: when the chair occupant punches someone, their
own buckle off-set will get reset. I am not sure why.

The way the double seats work is, it'll let anyone pass through as long
as both of the seats aren't occupied at the same time.

## Images

<details><summary>Details</summary>
<p>


![a](https://github.com/user-attachments/assets/19813e63-a773-46a7-9f2c-43b5a23906ab)


</p>
</details>

---------

Signed-off-by: Kano <89972582+kano-dot@users.noreply.github.com>
Co-authored-by: hazelrat <83198434+hazelrat@users.noreply.github.com>
This commit is contained in:
Kano
2025-06-30 21:05:45 +03:00
committed by GitHub
parent f8c39bfe82
commit 09f7ac5e39
9 changed files with 1778 additions and 1198 deletions
@@ -227,6 +227,68 @@
if(!buckled)
generate_overlay_cache(material, CACHE_TYPE_SPECIAL, ABOVE_HUMAN_LAYER)
/// Unique feature - you can put two seats on same tile with different pixel_offsets, humans will be buckled with respective offsets
/// and only when both seats taken, seats will be made dense and, therefore, tile will become unpassible
/// **Does not support more than two seats on a tile. It causes layer issues when used facing horizontal directions in a vertical row.**
/obj/structure/bed/stool/chair/shuttle/double
obj_flags = NONE // We don't want this subtype able to be rotated.
var/buckle_offset_x = 0
var/buckle_offset_y = 0
var/mob_old_x = 0
var/mob_old_y = 0
/obj/structure/bed/stool/chair/shuttle/double/Initialize()
. = ..()
addtimer(CALLBACK(src, PROC_REF(setup_buckle_offsets)), 1 SECONDS)
/obj/structure/bed/stool/chair/shuttle/double/CanPass(atom/movable/mover, turf/target, height, air_group)
return TRUE
/obj/structure/bed/stool/chair/shuttle/double/proc/setup_buckle_offsets()
if(pixel_x != 0)
buckle_offset_x = pixel_x
if(pixel_y != 0)
buckle_offset_y = pixel_y
/// Buckling offset and density adjustment.
/obj/structure/bed/stool/chair/shuttle/double/post_buckle(mob/M)
. = ..()
if(buckled)
if(buckled != M)
return
if(buckle_offset_x != 0)
mob_old_x = M.pixel_x
M.pixel_x = buckle_offset_x
if(buckle_offset_y != 0)
mob_old_y = M.pixel_y
M.pixel_y = buckle_offset_y
else
icon_state = initial(icon_state)
if(buckle_offset_x != 0)
M.pixel_x = mob_old_x
mob_old_x = 0
if(buckle_offset_y != 0)
M.pixel_y = mob_old_y
mob_old_y = 0
for(var/obj/structure/bed/stool/chair/shuttle/double/VS in get_turf(src))
if(VS != src)
//if both seats on same tile have buckled mob, we become dense, otherwise, not dense.
if(buckled)
if(VS.buckled)
REMOVE_TRAIT(buckled, TRAIT_UNDENSE, TRAIT_DOUBLE_SEATS)
REMOVE_TRAIT(VS.buckled, TRAIT_UNDENSE, TRAIT_DOUBLE_SEATS)
else
ADD_TRAIT(buckled, TRAIT_UNDENSE, TRAIT_DOUBLE_SEATS)
else
if(VS.buckled)
ADD_TRAIT(VS.buckled, TRAIT_UNDENSE, TRAIT_DOUBLE_SEATS)
REMOVE_TRAIT(M, TRAIT_UNDENSE, TRAIT_DOUBLE_SEATS)
break
/obj/structure/bed/stool/chair/cockpit
name = "cockpit seating"
icon_state = "cockpit_preview"