The rest of angled doors

This commit is contained in:
Aronai Sieyes
2021-07-23 12:57:08 -04:00
parent 2c73f8cbb7
commit 5b758e6151
14 changed files with 249 additions and 70 deletions
+248 -70
View File
@@ -3,6 +3,41 @@
#define FILL_GLASS 2
#define FILL_COLOR 3
/**
* A fairly rough translation of Bay's airlock icon system into ours, with the
* icons being built at runtime to afford the luxury of not needing to pre-bake
* all the icons like we have in the past, but preventing the overlay thrashing that
* Bay's seem to encounter. All the heavy lifting is just done once at initialization.
*
* The input state names from the various Bay files are:
* preview: Only in base_icon for mapping
* closed: static, when closed
* open: static, when open
* closing: anim, from open to closed transition
* opening: anim, from closed to open transition
* deny: static/anim, when denying a mob access
*
* The output state names to our system are:
* door_closed: closed
* door_locked: closed+bolted lights
* door_deny: deny
* door_open: open
* door_opening: opening+allow lights
* door_closing: closing+allow lights
* o_door_opening: opening+panel
* o_door_closing: closing+panel
* door_opening_stat: opening
* door_closing_stat: closing
*
* These do not include the door icon and are overlays:
* panel_open: bare panel overlay
* welded: bare welded overlay
* sparks_damaged: sparks for partial damage overlay
* sparks_broken: sparks for full damage overlay
* sparks_open: sparks when door is open overlay
*/
/obj/machinery/door/airlock/angled
icon_state = "preview"
dir = 2
@@ -10,27 +45,45 @@
var/fill_type = FILL_NONE
var/static/list/angled_airlock_icon_cache = list()
/// Mandatory: The base door structure icon, very required.
var/base_icon
/// Optional: Applied when fill_type is FILL_METAL
var/metal_fill_icon
/// Optional: Applied when fill_type is FILL_GLASS
var/glass_fill_icon
/// Optional: Applied when fill_type is FILL_COLOR
var/color_fill_icon
/// Optional: Used if stripe_color is set to a color value
var/stripe_icon
/// Optional: Used if stripe_color is set to a color value
var/stripe_fill_icon
/// Optional: Used if door_color is set to a color value
var/door_color_icon
/// Optional: Lights to flash when the door denies access
var/lights_deny_icon
/// Optional: Lights to flash when the door is opening/closing
var/lights_green_icon
/// Optional: Lights to display when the door is closed and locked
var/lights_bolts_icon
/// Optional: Lights and/or sparks to display when the door is being emagged
var/lights_emag_icon
var/panel_icon
var/welded_icon
var/spark_damaged_icon
var/spark_broken_icon
/// Optional: Icon that contains the panel overlays for the door being worked on
var/panel_icon = 'icons/obj/doors/angled/station/panel.dmi' // bay seems to think these are 'close enough' for default use
/// Optional: Icon that contains the welded overlay
var/welded_icon = 'icons/obj/doors/angled/station/welded.dmi'
/// Optional: Icon that contains the spark animations for the door being partially destroyed
var/spark_damaged_icon = 'icons/obj/doors/angled/station/sparks_damaged.dmi'
/// Optional: Icon that contains the spark animations for the door being fully destroyed
var/spark_broken_icon = 'icons/obj/doors/angled/station/sparks_broken.dmi'
/// Optional: If fill_value is not FILL_NONE, this color will be applied to the fill of the door
var/fill_color
/// Optional: If stripe_icon is not null, this color will be applied to the stripe on the door
var/stripe_color
/// Optional: If door_color_icon is not null, this color will be applied to the door color overlay
var/door_color
/obj/machinery/door/airlock/angled/Initialize()
@@ -62,7 +115,7 @@
update_icon()
return // hooray
// Base layer - the bare metal
// Base layer - the bare metal - absolutely required sprites
var/icon/door_closed = icon(base_icon, "closed")
var/icon/door_open = icon(base_icon, "open")
var/icon/door_locked = icon(base_icon, "closed")
@@ -70,17 +123,42 @@
var/icon/door_spark = icon(base_icon, "closed")
var/icon/door_opening = icon(base_icon, "opening")
var/icon/door_closing = icon(base_icon, "closing")
var/icon/o_door_opening = icon(base_icon, "opening")
var/icon/o_door_closing = icon(base_icon, "closing")
var/icon/door_opening_stat = icon(base_icon, "opening")
var/icon/door_closing_stat = icon(base_icon, "closing")
var/icon/o_door_opening = icon(base_icon, "opening")
var/icon/o_door_closing = icon(base_icon, "closing")
var/icon/panel_open = icon(panel_icon, "closed")
var/icon/welded = icon(welded_icon, "closed")
// Optional icons
var/icon/panel_open
var/icon/welded_closed
var/icon/welded_open
var/icon/sparks_damaged
var/icon/sparks_open
var/icon/sparks_broken
var/icon/sparks_damaged = icon(spark_damaged_icon, "closed")
var/icon/sparks_open = icon(spark_damaged_icon, "open")
var/icon/sparks_broken = icon(spark_broken_icon, "closed")
if(panel_icon)
panel_open = icon(panel_icon, "closed")
else
panel_open = icon('icons/effects/effects.dmi', "nothing")
if(welded_icon)
welded_closed = icon(welded_icon, "closed")
welded_open = icon(welded_icon, "open") // only used on firedoors far as I can tell
else
welded_closed = icon('icons/effects/effects.dmi', "nothing")
welded_open = icon('icons/effects/effects.dmi', "nothing")
if(spark_damaged_icon)
sparks_damaged = icon(spark_damaged_icon, "closed")
sparks_open = icon(spark_damaged_icon, "open")
else
sparks_damaged = icon('icons/effects/effects.dmi', "nothing")
sparks_open = icon('icons/effects/effects.dmi', "nothing")
if(spark_broken_icon)
sparks_broken = icon(spark_broken_icon, "closed")
else
sparks_broken = icon('icons/effects/effects.dmi', "nothing")
// The filler for the gaps in the door, metal or glass or other
if(fill_icon)
@@ -168,6 +246,9 @@
o_door_closing.Blend(icon(panel_icon, "closing"), ICON_OVERLAY)
var/icon/final = icon('icons/effects/effects.dmi', "nothing")
if(width > 1)
var/pixel_width = world.icon_size * width
final.Crop(1,1,pixel_width,pixel_width)
final.Insert(door_closed, "door_closed")
final.Insert(door_open, "door_open")
final.Insert(door_locked, "door_locked")
@@ -180,21 +261,29 @@
final.Insert(door_opening_stat, "door_opening_stat")
final.Insert(door_closing_stat, "door_closing_stat")
final.Insert(panel_open, "panel_open")
final.Insert(welded, "welded")
final.Insert(welded_closed, "welded")
final.Insert(welded_open, "welded_open")
final.Insert(sparks_damaged, "sparks_damaged")
final.Insert(sparks_broken, "sparks_broken")
final.Insert(sparks_open, "sparks_open")
angled_airlock_icon_cache[cache_key] = final
icon = final
update_icon()
/obj/machinery/door/airlock/angled/standard/proc/gimme_icon()
/obj/machinery/door/airlock/angled/proc/gimme_icon()
usr << ftp(icon, "[name].dmi")
/**
* The actual door types you can map in.
* Comments show what you can customize.
*/
// Fills: Metal, glass, color
// Supports stripe color
// Supports door color
/obj/machinery/door/airlock/angled/standard
icon = 'icons/obj/doors/angled/station/door.dmi'
icon_state = "preview"
fill_type = FILL_METAL
base_icon = 'icons/obj/doors/angled/station/door.dmi'
@@ -210,77 +299,166 @@
lights_emag_icon = 'icons/obj/doors/angled/station/emag.dmi'
panel_icon = 'icons/obj/doors/angled/station/panel.dmi'
welded_icon = 'icons/obj/doors/angled/station/welded.dmi'
spark_damaged_icon = 'icons/obj/doors/angled/station/sparks_damaged.dmi'
spark_broken_icon = 'icons/obj/doors/angled/station/sparks_broken.dmi'
/obj/machinery/door/airlock/angled/standard/demo_fill_color
/obj/machinery/door/airlock/angled/standard/glass
icon_state = "preview_glass"
fill_type = FILL_GLASS
/obj/machinery/door/airlock/angled/standard/color
icon_state = "preview_color"
fill_type = FILL_COLOR
fill_color = "#FF0000"
/obj/machinery/door/airlock/angled/standard/demo_stripe
stripe_color = "#FF0000"
// Fills: Metal
// Supports stripe color
/obj/machinery/door/airlock/angled/hatch
icon = 'icons/obj/doors/angled/hatch/door.dmi'
fill_type = FILL_METAL
/obj/machinery/door/airlock/angled/standard/demo_door_color
door_color = "#FF0000"
base_icon = 'icons/obj/doors/angled/hatch/door.dmi'
metal_fill_icon = 'icons/obj/doors/angled/hatch/fill_steel.dmi'
stripe_fill_icon = 'icons/obj/doors/angled/hatch/fill_stripe.dmi'
stripe_icon = 'icons/obj/doors/angled/hatch/stripe.dmi'
lights_deny_icon = 'icons/obj/doors/angled/hatch/lights_deny.dmi'
lights_green_icon = 'icons/obj/doors/angled/hatch/lights_green.dmi'
lights_bolts_icon = 'icons/obj/doors/angled/hatch/lights_bolts.dmi'
lights_emag_icon = 'icons/obj/doors/angled/hatch/emag.dmi'
panel_icon = 'icons/obj/doors/angled/hatch/panel.dmi'
welded_icon = 'icons/obj/doors/angled/hatch/welded.dmi'
/*
door_closed - static
base
metal or glass
stripe
door color
// Fills: None
/obj/machinery/door/airlock/angled/ascent
icon = 'icons/obj/doors/angled/ascent/door.dmi'
door_locked - static
as door_closed, plus lights_bolts_icon
base_icon = 'icons/obj/doors/angled/ascent/door.dmi'
lights_deny_icon = 'icons/obj/doors/angled/ascent/lights_deny.dmi'
lights_green_icon = 'icons/obj/doors/angled/ascent/lights_green.dmi'
lights_bolts_icon = 'icons/obj/doors/angled/ascent/lights_bolts.dmi'
lights_emag_icon = 'icons/obj/doors/angled/ascent/emag.dmi'
panel_icon = 'icons/obj/doors/angled/ascent/panel.dmi'
welded_icon = 'icons/obj/doors/angled/ascent/welded.dmi'
spark_damaged_icon = 'icons/obj/doors/angled/ascent/sparks_damaged.dmi'
spark_broken_icon = 'icons/obj/doors/angled/ascent/sparks_broken.dmi'
door_opening - animated
as door_closed, but opening states
lights_green opening
// Fills: Metal, glass, color
// Supports door color
/obj/machinery/door/airlock/angled/external
icon = 'icons/obj/doors/angled/external/door.dmi'
fill_type = FILL_METAL
door_deny - animated
as door_closed, plus lights_deny_icon
base_icon = 'icons/obj/doors/angled/external/door.dmi'
metal_fill_icon = 'icons/obj/doors/angled/external/fill_steel.dmi'
glass_fill_icon = 'icons/obj/doors/angled/external/fill_glass.dmi'
color_fill_icon = 'icons/obj/doors/angled/external/fill_color.dmi'
door_color_icon = 'icons/obj/doors/angled/external/color.dmi'
lights_deny_icon = 'icons/obj/doors/angled/external/lights_deny.dmi'
lights_green_icon = 'icons/obj/doors/angled/external/lights_green.dmi'
lights_bolts_icon = 'icons/obj/doors/angled/external/lights_bolts.dmi'
lights_emag_icon = 'icons/obj/doors/angled/external/emag.dmi'
/obj/machinery/door/airlock/angled/external/glass
icon_state = "preview_glass"
fill_type = FILL_GLASS
/obj/machinery/door/airlock/angled/external/color
icon_state = "preview_color"
fill_type = FILL_COLOR
door_closing - animated
as door_open, but closing states
lights_green closing
// Fills: Metal, glass
/obj/machinery/door/airlock/angled/elevator
icon = 'icons/obj/doors/angled/elevator/door.dmi'
fill_type = FILL_METAL
door_open - static
as door_closed, but open states
base_icon = 'icons/obj/doors/angled/elevator/door.dmi'
metal_fill_icon = 'icons/obj/doors/angled/elevator/fill_steel.dmi'
glass_fill_icon = 'icons/obj/doors/angled/elevator/fill_glass.dmi'
lights_deny_icon = 'icons/obj/doors/angled/elevator/lights_deny.dmi'
lights_green_icon = 'icons/obj/doors/angled/elevator/lights_green.dmi'
lights_bolts_icon = 'icons/obj/doors/angled/elevator/lights_bolts.dmi'
welded_icon = 'icons/obj/doors/angled/elevator/welded.dmi'
/obj/machinery/door/airlock/angled/elevator/glass
icon_state = "preview_glass"
fill_type = FILL_GLASS
door_spark - animated
as door_closed
spark_icon closed
o_door_opening
as door_opening
panel_icon opening
// Very few options on these, basically just static doors.
/obj/machinery/door/airlock/angled/hazard // firedoors
icon = 'icons/obj/doors/angled/hazard/door.dmi'
o_door_closing
as door_closing
panel_icon closing
base_icon = 'icons/obj/doors/angled/hazard/door.dmi'
panel_icon = 'icons/obj/doors/angled/hazard/panel.dmi'
welded_icon = 'icons/obj/doors/angled/hazard/welded.dmi'
door_opening_stat
as door_closed, but opening states without lights
/obj/machinery/door/airlock/angled/vault
icon = 'icons/obj/doors/angled/vault/door.dmi'
fill_type = FILL_METAL // the only option
door_closing_stat
as door_open, but closing states without lights
base_icon = 'icons/obj/doors/angled/vault/door.dmi'
metal_fill_icon = 'icons/obj/doors/angled/vault/fill_steel.dmi'
panel_open
just the panel
/obj/machinery/door/airlock/angled/secure
icon = 'icons/obj/doors/angled/secure/door.dmi'
fill_type = FILL_METAL // the only option
welded
just welded
base_icon = 'icons/obj/doors/angled/secure/door.dmi'
metal_fill_icon = 'icons/obj/doors/angled/secure/fill_steel.dmi'
sparks_damaged
spark_icon closed
/obj/machinery/door/airlock/angled/centcomm
icon = 'icons/obj/doors/angled/centcomm/door.dmi'
fill_type = FILL_METAL // the only option
sparks_broken
spark_icon closed
base_icon = 'icons/obj/doors/angled/centcomm/door.dmi'
metal_fill_icon = 'icons/obj/doors/angled/centcomm/fill_steel.dmi'
sparks_open
spark_icon open
*/
// Double door requires a little code
// Fills: Metal, glass, color
// Supports stripe color
// Supports door color
/obj/machinery/door/airlock/angled/double
width = 2
appearance_flags = 0
icon = 'icons/obj/doors/angled/double/door.dmi'
fill_type = FILL_METAL
#undef FILL_METAL
#undef FILL_GLASS
#undef FILL_COLOR
base_icon = 'icons/obj/doors/angled/double/door.dmi'
metal_fill_icon = 'icons/obj/doors/angled/double/fill_steel.dmi'
glass_fill_icon = 'icons/obj/doors/angled/double/fill_glass.dmi'
color_fill_icon = 'icons/obj/doors/angled/double/fill_color.dmi'
stripe_fill_icon = 'icons/obj/doors/angled/double/fill_stripe.dmi'
stripe_icon = 'icons/obj/doors/angled/double/stripe.dmi'
door_color_icon = 'icons/obj/doors/angled/double/color.dmi'
lights_deny_icon = 'icons/obj/doors/angled/double/lights_deny.dmi'
lights_green_icon = 'icons/obj/doors/angled/double/lights_green.dmi'
lights_bolts_icon = 'icons/obj/doors/angled/double/lights_bolts.dmi'
lights_emag_icon = 'icons/obj/doors/angled/double/emag.dmi'
panel_icon = 'icons/obj/doors/angled/double/panel.dmi'
welded_icon = 'icons/obj/doors/angled/double/welded.dmi'
spark_damaged_icon = 'icons/obj/doors/angled/double/sparks_damaged.dmi'
spark_broken_icon = 'icons/obj/doors/angled/double/sparks_broken.dmi'
/obj/machinery/door/airlock/angled/double/glass
icon_state = "preview_glass"
fill_type = FILL_GLASS
/obj/machinery/door/airlock/angled/double/color
icon_state = "preview_color"
fill_type = FILL_COLOR
/obj/machinery/door/airlock/angled/double/Initialize(mapload)
. = ..()
SetBounds()
apply_opacity_to_my_turfs(opacity)
/obj/machinery/door/airlock/angled/double/set_opacity()
. = ..()
apply_opacity_to_my_turfs(opacity)
/obj/machinery/door/airlock/angled/double/Moved()
. = ..()
SetBounds()
/obj/machinery/door/airlock/angled/double/proc/apply_opacity_to_my_turfs(new_opacity)
for(var/turf/T in locs)
T.set_opacity(new_opacity)
update_nearby_tiles()
/obj/machinery/door/airlock/angled/double/proc/SetBounds()
if(dir & 3)
bound_width = width * world.icon_size
bound_height = world.icon_size
else
bound_width = world.icon_size
bound_height = width * world.icon_size

Before

Width:  |  Height:  |  Size: 9.5 KiB

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 344 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 442 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.8 KiB

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.9 KiB

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 5.1 KiB

+1
View File
@@ -927,6 +927,7 @@
#include "code\game\machinery\computer\timeclock_vr.dm"
#include "code\game\machinery\computer\~computer_vr.dm"
#include "code\game\machinery\doors\airlock.dm"
#include "code\game\machinery\doors\airlock_angled.dm"
#include "code\game\machinery\doors\airlock_control.dm"
#include "code\game\machinery\doors\airlock_electronics.dm"
#include "code\game\machinery\doors\airlock_vr.dm"