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
+5
View File
@@ -196,3 +196,8 @@
#define TRAIT_UNHITTABLE_BY_PROJECTILES "unhittable_by_projectiles"
///This mob is currently blocking a projectile.
#define TRAIT_BLOCKING_PROJECTILES "blocking_projectiles"
/// This trait is used for double shuttle seats in a single tile, used in handling occupant density.
#define TRAIT_DOUBLE_SEATS "double_seats"
/// Apply this to make a mob passable by other mobs.
#define TRAIT_UNDENSE "undense"
@@ -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"
@@ -20,6 +20,12 @@
var/open = FALSE // Start closed so people don't heat up ovens with the door open
///Looping sound for the oven
var/datum/looping_sound/oven/oven_loop
///Open door icon_state
var/door_open = "ovenopen"
///Closed door icon_state
var/door_closed = "ovenclosed"
var/door_open_overlay = "ovenopen_on"
var/door_closed_overlay = "ovenclosed_on"
starts_with = list(
/obj/item/reagent_containers/cooking_container/oven,
@@ -54,15 +60,15 @@
ClearOverlays()
update_baking_audio()
if(!open)
icon_state = "ovenclosed"
icon_state = door_closed
if(!stat)
var/image/ovenclosed_on = image('icons/obj/machinery/cooking_machines.dmi', "ovenclosed_on")
var/image/ovenclosed_on = image('icons/obj/machinery/cooking_machines.dmi', door_closed_overlay)
ovenclosed_on.plane = EFFECTS_ABOVE_LIGHTING_PLANE
AddOverlays(ovenclosed_on)
else
icon_state = "ovenopen"
icon_state = door_open
if(!stat)
var/image/ovenopen_on = image('icons/obj/machinery/cooking_machines.dmi', "ovenopen_on")
var/image/ovenopen_on = image('icons/obj/machinery/cooking_machines.dmi', door_open_overlay)
ovenopen_on.plane = EFFECTS_ABOVE_LIGHTING_PLANE
AddOverlays(ovenopen_on)
..()
@@ -141,3 +147,15 @@
icon_state = "adhomai_ovenclosed_off"
else
icon_state = "adhomai_oven_open"
/obj/machinery/appliance/cooker/oven/small
name = "compact oven"
desc = "A lightweight, small oven. Doesn't hold much, but it cooks just fine."
density = FALSE
max_contents = 2
icon_state = "small_ovenopen"
door_open = "small_ovenopen"
door_closed = "small_ovenclosed"
door_open_overlay = "small_ovenopen_on"
door_closed_overlay = "small_ovenclosed_on"
+2
View File
@@ -13,6 +13,8 @@
for(var/obj/item/grab/G in moving_mob.grabbed_by)
if(G.assailant == src)
return TRUE
if(HAS_TRAIT(src, TRAIT_UNDENSE))
return TRUE
return (!mover.density || !density || lying)
else
return (!mover.density || !density || lying)
@@ -0,0 +1,7 @@
author: Kano
delete-after: True
changes:
- rscadd: "Remapped the SCCV Intrepid."
- rscadd: "Ports CM's double vehicle seats."
Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 21 KiB

+13 -4
View File
@@ -322,8 +322,17 @@
/area/shuttle/intrepid/main_compartment
name = "Intrepid Main Compartment"
/area/shuttle/intrepid/cargo_bay
name = "Intrepid Cargo Bay"
/area/shuttle/intrepid/port_compartment
name = "Intrepid Port Compartment"
/area/shuttle/intrepid/starboard_compartment
name = "Intrepid Starboard Compartment"
/area/shuttle/intrepid/junction_compartment
name = "Intrepid Junction Compartment"
/area/shuttle/intrepid/buffet
name = "Intrepid Buffet"
/area/shuttle/intrepid/medical
name = "Intrepid Medical Compartment"
@@ -334,8 +343,8 @@
/area/shuttle/intrepid/port_storage
name = "Intrepid Port Nacelle"
/area/shuttle/intrepid/cockpit
name = "Intrepid Cockpit"
/area/shuttle/intrepid/flight_deck
name = "Intrepid Flight Deck"
/area/shuttle/canary
name = "Canary"
@@ -106,7 +106,7 @@
/datum/shuttle/autodock/overmap/intrepid
name = "Intrepid"
move_time = 20
shuttle_area = list(/area/shuttle/intrepid/main_compartment, /area/shuttle/intrepid/cargo_bay, /area/shuttle/intrepid/medical, /area/shuttle/intrepid/engineering, /area/shuttle/intrepid/port_storage, /area/shuttle/intrepid/cockpit)
shuttle_area = list(/area/shuttle/intrepid/main_compartment, /area/shuttle/intrepid/port_compartment, /area/shuttle/intrepid/starboard_compartment, /area/shuttle/intrepid/junction_compartment, /area/shuttle/intrepid/buffet, /area/shuttle/intrepid/medical, /area/shuttle/intrepid/engineering, /area/shuttle/intrepid/port_storage, /area/shuttle/intrepid/flight_deck)
dock_target = "airlock_shuttle_intrepid"
current_location = "nav_hangar_intrepid"
landmark_transition = "nav_transit_intrepid"
File diff suppressed because it is too large Load Diff