Split body scanner and cryopod sprites (#20794)

Port of https://github.com/Baystation12/Baystation12/pull/34190, though
a recolor and touchup was done by CormallenField/Steviii.

I've been concerned for a while that the cryopod and body scanner shared
the same sprites. For the most part, this merely bugged me, as generally
these machines wouldn't be in the same place, so the likelihood of
confusing the two is low. The merging of #20772 changed this, as there
is now a cryopod in medical.

This splits the cryopod, sleeper, and body scanner into their own files.
The body scanner now has a different sprite with a slightly different
shape, and a completely different coloration as well. I also ported the
animated (and smaller!) console from Baystation while I was at it.

Compared to the one in baystation, this has been recolored purple by
CormallenField/Steviii to fit better with our color theming for medical
equipment.

![image](https://github.com/user-attachments/assets/82faa75c-aca6-4ded-a6c3-4c9d9cc00c05)
Note: Since this image was taken, a fix was done to fix the missing bits
on the broken state.

I noticed some incorrect states for sleeper panel icons, and an unused
sleeper working animation. I fixed up and implemented these during the
transition.

### Asset Licenses
The following assets that **have not** been created by myself are
included in this PR:

| Path | Original Author | License |
| --- | --- | --- |
| icons/obj/machinery/bodyscanner.dmi | Remission (Baystation12) |
CC-BY-SA 3.0 |
This commit is contained in:
Cody Brittain
2025-06-11 09:52:33 +00:00
committed by GitHub
parent b5cdb862d1
commit df344e752d
7 changed files with 96 additions and 18 deletions
+5 -2
View File
@@ -85,7 +85,10 @@
/obj/machinery/sleeper/update_icon()
flick("[initial(icon_state)]-anim", src)
if(occupant)
icon_state = "[initial(icon_state)]-closed"
if(stat & NOPOWER || stat & BROKEN)
icon_state = "[initial(icon_state)]-closed"
else
icon_state = "[initial(icon_state)]-working"
return
else
icon_state = initial(icon_state)
@@ -272,7 +275,7 @@
to_chat(user, "You [src.panel_open ? "open" : "close"] the maintenance panel.")
ClearOverlays()
if(src.panel_open)
AddOverlays("[initial(icon_state)]-o")
AddOverlays("[initial(icon_state)]-panel")
return TRUE
else if(default_part_replacement(user, attacking_item))
return TRUE
+27 -12
View File
@@ -7,7 +7,7 @@
Click your target with Grab intent, then click on the scanner to place them in it. Click the connected terminal to operate. \
Right-click the scanner and click 'Eject Occupant' to remove them. You can enter the scanner yourself in a similar way, using the 'Enter Body Scanner' \
verb."
icon = 'icons/obj/machinery/sleeper.dmi'
icon = 'icons/obj/machinery/bodyscanner.dmi'
icon_state = "body_scanner"
density = TRUE
anchored = TRUE
@@ -56,12 +56,15 @@
/obj/machinery/bodyscanner/Destroy()
// So the GC can qdel this.
if (connected)
connected.connected = null
connected.unlink_scanner()
connected = null
occupant = null
return ..()
/obj/machinery/bodyscanner/update_icon()
ClearOverlays()
if(panel_open)
AddOverlays("[icon_state]-panel")
flick("[initial(icon_state)]-anim", src)
if(occupant)
name = "[name] ([occupant])"
@@ -247,8 +250,8 @@
name = "body scanner console"
var/tgui_name = "Zeng-Hu Pharmaceuticals Body Scanner"
desc = "An advanced control panel that can be used to interface with a connected body scanner."
icon = 'icons/obj/machinery/sleeper.dmi'
icon_state = "body_scannerconsole"
icon = 'icons/obj/machinery/bodyscanner.dmi'
icon_state = "body_scanner_console"
var/obj/machinery/bodyscanner/connected
var/collapse_desc = ""
var/broken_desc = ""
@@ -262,7 +265,6 @@
/obj/item/stock_parts/scanning_module = 2,
/obj/item/stock_parts/console_screen
)
var/global/image/console_overlay
var/list/connected_displays = list()
var/list/data = list()
var/scan_data
@@ -285,23 +287,36 @@
/obj/machinery/body_scanconsole/update_icon()
ClearOverlays()
if(panel_open)
AddOverlays("[icon_state]_panel")
if((stat & BROKEN) || (stat & NOPOWER))
return
else
if(!console_overlay)
console_overlay = image(icon, "body_scannerconsole-screen")
var/emissive_overlay = emissive_appearance(icon, "body_scannerconsole-screen")
AddOverlays(console_overlay)
AddOverlays(emissive_overlay)
set_light(1.4, 1, COLOR_PURPLE)
if(connected)
if(connected.stat & BROKEN || connected.stat & NOPOWER)
return
AddOverlays(emissive_appearance(icon, "[icon_state]_lights"))
AddOverlays("[icon_state]_lights")
/obj/machinery/body_scanconsole/Initialize()
. = ..()
FindScanner()
update_icon()
/obj/machinery/body_scanconsole/proc/FindScanner()
for(var/obj/machinery/bodyscanner/C in orange(1,src))
connected = C
RegisterSignal(connected, COMSIG_QDELETING, PROC_REF(on_linked_scanner_deletion))
break
if(connected)
connected.connected = src
/obj/machinery/body_scanconsole/proc/on_linked_scanner_deletion()
SIGNAL_HANDLER
unlink_scanner()
/obj/machinery/body_scanconsole/proc/unlink_scanner()
connected = null
UnregisterSignal(connected, COMSIG_QDELETING)
update_icon()
/obj/machinery/body_scanconsole/attack_ai(var/mob/user)
+4 -4
View File
@@ -166,7 +166,7 @@
/obj/structure/cryofeed
name = "cryogenic feed"
desc = "A bewildering tangle of machinery and pipes."
icon = 'icons/obj/machinery/sleeper.dmi'
icon = 'icons/obj/machinery/cryopod.dmi'
icon_state = "cryo_rear"
anchored = TRUE
dir = WEST
@@ -174,15 +174,15 @@
/obj/structure/cryofeed/pipes
name = "cryogenic feed pipes"
desc = "A bewildering tangle of pipes."
icon = 'icons/obj/machinery/sleeper.dmi'
icon = 'icons/obj/machinery/cryopod.dmi'
icon_state = "cryo_rear_pipes"
//Cryopods themselves.
/obj/machinery/cryopod
name = "cryogenic freezer"
desc = "A man-sized pod for entering suspended animation."
icon = 'icons/obj/machinery/sleeper.dmi'
icon_state = "body_scanner"
icon = 'icons/obj/machinery/cryopod.dmi'
icon_state = "cryo_pod"
density = TRUE
anchored = TRUE
dir = WEST
@@ -0,0 +1,60 @@
################################
# Example Changelog File
#
# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
#
# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
# When it is, any changes listed below will disappear.
#
# Valid Prefixes:
# bugfix
# - (fixes bugs)
# wip
# - (work in progress)
# qol
# - (quality of life)
# soundadd
# - (adds a sound)
# sounddel
# - (removes a sound)
# rscadd
# - (adds a feature)
# rscdel
# - (removes a feature)
# imageadd
# - (adds an image or sprite)
# imagedel
# - (removes an image or sprite)
# spellcheck
# - (fixes spelling or grammar)
# experiment
# - (experimental change)
# balance
# - (balance changes)
# code_imp
# - (misc internal code change)
# refactor
# - (refactors code)
# config
# - (makes a change to the config files)
# admin
# - (makes changes to administrator tools)
# server
# - (miscellaneous changes to server)
#################################
# Your name.
author: GeneralCamo
# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
delete-after: True
# Any changes you've made. See valid prefix list above.
# INDENT WITH TWO SPACES. NOT TABS. SPACES.
# SCREW THIS UP AND IT WON'T WORK.
# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit.
# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog.
changes:
- rscadd: "Split body scanner and cryopod sprites; body scanners have new sprites. New sprites by Remission on Baystation12, recolor and touchups by CormallenField/Steviii."
- rscadd: "Working sleepers now use their working sprite states."
- bugfix: "Sleepers now correctly show their panel sprites."
Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 33 KiB