Files
Batrachophreno 8ebd7c9ad5 SCCV Horizon Aft Extension & Partial Remap (#21495)
**Overview:**
The first huge fuckoff mapping PR for giving the Horizon enough extra
space to be able to comfortably map on it for the duration before NBT2
and not be super cramped (extends aft by 6 turfs).

Includes a SECOND vault to heist at the back of the ship and a lot of
maint area people can repurpose. Notably, this also removes the Xenobio
Hazardous Containment room and the Medical Emergency Storage room
(contents of the latter have been moved). Otherwise, y'all got more
ship.

**Map Images (OUTDATED NOW):**
<img width="2453" height="868" alt="Screenshot 2025-10-16 141649"
src="https://github.com/user-attachments/assets/be9a540d-af92-46b4-b59f-e298204a678a"
/>
<img width="2450" height="940" alt="Screenshot 2025-10-16 141702"
src="https://github.com/user-attachments/assets/b96f3f3e-dd4b-4457-9c5c-1f09f8bb7a00"
/>
<img width="2452" height="895" alt="Screenshot 2025-10-16 141714"
src="https://github.com/user-attachments/assets/9a16e55d-8386-46d9-a3d3-d4e5a0ff6ec0"
/>

**Misc Features:**
<img width="1069" height="685" alt="Screenshot 2025-10-16 141727"
src="https://github.com/user-attachments/assets/89c14f85-f476-4f91-bd02-7c36f36a4418"
/>
<img width="983" height="825" alt="Screenshot 2025-10-16 141736"
src="https://github.com/user-attachments/assets/6b20da20-982c-4ec1-b252-3507f1211e94"
/>
<img width="1382" height="951" alt="Screenshot 2025-10-16 141743"
src="https://github.com/user-attachments/assets/fdfd683d-33a4-47e3-9df8-dec1f9286598"
/>
<img width="2405" height="863" alt="Screenshot 2025-10-16 141803"
src="https://github.com/user-attachments/assets/c539c4bd-4a8f-4326-a30b-5a1d09eca26b"
/>

**changes:**
- qol: "Hugely expands the Horizon's maints and adjusts/expands much of
the aft of the ship."
  - rscadd: "Adds a new Vault to Horizon (Deck 3 aft, behind the Gym)."
  - rscdel: "Removes Xenobiology Hazardous Specimens compartment."
  - rscdel: "Removes Medical Emergency Storage compartment."
  - spellcheck: "Replaces a few mentions of 'room' with 'compartment.'"
  - spellcheck: "Renames the Bridge Break Room to Bridge Wardroom."
  - spellcheck: "Renames the Kitchen to the Galley."
  - spellcheck: "Renames the Dining Hall to the Mess Hall."
  - spellcheck: "Renames each Washroom to the Head."
2025-11-04 09:52:40 +00:00

165 lines
4.9 KiB
Plaintext

/obj/item/holomenu
name = "holo-menu"
desc = "A hologram projector, this one has been set up to display text above itself."
icon = 'icons/obj/holomenu.dmi'
icon_state = "holomenu"
layer = ABOVE_OBJ_LAYER
light_color = LIGHT_COLOR_CYAN
light_range = 1.4
req_one_access = list(ACCESS_BAR, ACCESS_GALLEY, ACCESS_HYDROPONICS)
var/rave_mode = FALSE
var/menu_text = ""
var/border_on = FALSE
var/image/holo_lights
var/image/holo_text
var/image/holo_border
/obj/item/holomenu/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "If you have Bar, Galley, or Hydroponics access, you can swipe your ID on this to anchor it in place."
. += "You can enter text manually by clicking it with an empty hand, or you can use a paper on the [src] to transfer its written contents."
. += "ALT-click the [src] to toggle its border."
. += "CTRL-click the [src] to toggle RAVE MODE."
/obj/item/holomenu/Initialize()
. = ..()
holo_lights = image(icon, null, "holomenu-lights")
holo_text = image(icon, null, "holomenu-text")
holo_border = image(icon, null, "holomenu-border")
/obj/item/holomenu/Destroy()
STOP_PROCESSING(SSfast_process, src)
return ..()
/obj/item/holomenu/process()
update_icon()
/obj/item/holomenu/update_icon()
ClearOverlays()
if(anchored)
set_light(2)
if(rave_mode)
var/color_rotate = color_rotation(rand(-80, 80))
holo_lights.color = color_rotate
holo_text.color = color_rotate
holo_border.color = color_rotate
else
holo_lights.color = null
holo_text.color = null
holo_border.color = null
AddOverlays(holo_lights)
if(length(menu_text))
AddOverlays(holo_text)
if(border_on)
AddOverlays(holo_border)
else
set_light(0)
/obj/item/holomenu/attackby(obj/item/attacking_item, mob/user)
var/obj/item/card/id/ID = attacking_item.GetID()
if(istype(ID))
if(check_access(ID))
anchored = !anchored
to_chat(user, SPAN_NOTICE("You [anchored ? "" : "un"]anchor \the [src]."))
update_icon()
else
to_chat(user, SPAN_WARNING("Access denied."))
return TRUE
if(istype(attacking_item, /obj/item/paper) && allowed(user))
var/obj/item/paper/P = attacking_item
to_chat(user, SPAN_NOTICE("You scan \the [attacking_item.name] into \the [name]."))
menu_text = P.info
menu_text = replacetext(menu_text, "color=black>", "color=white>")
update_icon()
return TRUE
return ..()
/obj/item/holomenu/examine(mob/user, distance, is_adjacent, infix, suffix, show_extended)
if(anchored && length(menu_text))
interact(user)
return TRUE
else
. = ..()
/obj/item/holomenu/attack_hand(mob/user)
if(anchored)
if(allowed(user))
var/new_text = sanitize(input(user, "Enter new text for the holo-menu to display.", "Holo-Menu Display", html2pencode(menu_text, TRUE)) as null|message)
if(!isnull(new_text))
menu_text = pencode2html(new_text)
update_icon()
else
interact(user)
return
return ..()
/obj/item/holomenu/interact(mob/user)
var/datum/browser/holomenu_win = new(user, "holomenu", "Holo-Display", 450, 500)
holomenu_win.set_content(menu_text)
holomenu_win.open()
/obj/item/holomenu/AltClick(mob/user)
if(Adjacent(user))
if(allowed(user))
border_on = !border_on
to_chat(user, SPAN_NOTICE("You toggle \the [src]'s border to be [border_on ? "on" : "off"]."))
update_icon()
else
to_chat(user, SPAN_WARNING("Access denied."))
return
return ..()
/obj/item/holomenu/CtrlClick(mob/user)
if(Adjacent(user))
if(allowed(user))
rave_mode = !rave_mode
to_chat(user, SPAN_NOTICE("You toggle \the [src]'s rave mode [rave_mode ? "on" : "off"]."))
update_icon()
if(rave_mode)
START_PROCESSING(SSfast_process, src)
light_color = LIGHT_COLOR_HALOGEN // a more generic lighting
else
STOP_PROCESSING(SSfast_process, src)
light_color = initial(light_color)
else
to_chat(user, SPAN_WARNING("Access denied."))
return
return ..()
/obj/item/holomenu/holodeck
name = "holodeck status projector"
desc = "A hologram projector, this one has been set up to display text."
icon = 'icons/obj/holomenu_holodeck.dmi'
anchored = 1
layer = 4
req_one_access = list()
/obj/item/holomenu/holodeck/mechanics_hints(mob/user, distance, is_adjacent)
. += ..()
. += "Note that holodecks do not support RAVE MODE."
/obj/item/holomenu/holodeck/attack_hand(mob/user)
var/new_text = sanitize(input(user, "Enter new text for the hologram to display.", "Hologram Display", html2pencode(menu_text, TRUE)) as null|message)
if(!isnull(new_text))
menu_text = pencode2html(new_text)
update_icon()
/obj/item/holomenu/holodeck/attackby(obj/item/attacking_item, mob/user)
var/obj/item/card/id/ID = attacking_item.GetID()
if(istype(ID))
return TRUE
if(istype(attacking_item, /obj/item/paper))
var/obj/item/paper/P = attacking_item
to_chat(user, SPAN_NOTICE("You scan \the [attacking_item.name] into \the [name]."))
menu_text = P.info
menu_text = replacetext(menu_text, "color=black>", "color=white>")
update_icon()
return TRUE
return ..()