diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm
index 093a8e544d..a5e1563972 100644
--- a/code/ATMOSPHERICS/atmospherics.dm
+++ b/code/ATMOSPHERICS/atmospherics.dm
@@ -16,7 +16,8 @@ Pipelines + Other Objects -> Pipe network
power_channel = ENVIRON
var/nodealert = 0
var/power_rating //the maximum amount of power the machine can use to do work, affects how powerful the machine is, in Watts
-
+
+ unacidable = TRUE
layer = ATMOS_LAYER
plane = PLATING_PLANE
diff --git a/code/ATMOSPHERICS/components/binary_devices/circulator.dm b/code/ATMOSPHERICS/components/binary_devices/circulator.dm
index 5291627786..c5fe955523 100644
--- a/code/ATMOSPHERICS/components/binary_devices/circulator.dm
+++ b/code/ATMOSPHERICS/components/binary_devices/circulator.dm
@@ -6,6 +6,7 @@
icon = 'icons/obj/power.dmi'
icon_state = "circ-unassembled"
anchored = FALSE
+ unacidable = TRUE
pipe_flags = PIPING_DEFAULT_LAYER_ONLY|PIPING_ONE_PER_TURF
var/kinetic_efficiency = 0.04 //combined kinetic and kinetic-to-electric efficiency
diff --git a/code/controllers/subsystems/ticker.dm b/code/controllers/subsystems/ticker.dm
index 90e4254d2b..20a9ffeaa4 100644
--- a/code/controllers/subsystems/ticker.dm
+++ b/code/controllers/subsystems/ticker.dm
@@ -9,7 +9,7 @@ SUBSYSTEM_DEF(ticker)
flags = SS_NO_TICK_CHECK | SS_KEEP_TIMING
runlevels = RUNLEVEL_LOBBY | RUNLEVEL_SETUP | RUNLEVEL_GAME | RUNLEVEL_POSTGAME // Every runlevel!
- var/const/restart_timeout = 3 MINUTES // Default time to wait before rebooting in desiseconds.
+ var/const/restart_timeout = 4 MINUTES // Default time to wait before rebooting in desiseconds.
var/current_state = GAME_STATE_INIT // We aren't even at pregame yet // TODO replace with CURRENT_GAME_STATE
/* Relies upon the following globals (TODO move those in here) */
diff --git a/code/game/antagonist/outsider/raider.dm b/code/game/antagonist/outsider/raider.dm
index d6c7857ace..58b8ffc0ee 100644
--- a/code/game/antagonist/outsider/raider.dm
+++ b/code/game/antagonist/outsider/raider.dm
@@ -70,6 +70,7 @@ var/datum/antagonist/raider/raiders
/obj/item/weapon/gun/energy/mindflayer,
/obj/item/weapon/gun/energy/toxgun,
/obj/item/weapon/gun/energy/stunrevolver,
+ /obj/item/weapon/gun/energy/stunrevolver/vintage,
/obj/item/weapon/gun/energy/ionrifle,
/obj/item/weapon/gun/energy/taser,
/obj/item/weapon/gun/energy/crossbow/largecrossbow,
diff --git a/code/game/machinery/OpTable.dm b/code/game/machinery/OpTable.dm
index 228857a2dc..9a5eb65ba6 100644
--- a/code/game/machinery/OpTable.dm
+++ b/code/game/machinery/OpTable.dm
@@ -5,6 +5,7 @@
icon_state = "table2-idle"
density = TRUE
anchored = TRUE
+ unacidable = TRUE
use_power = USE_POWER_IDLE
idle_power_usage = 1
active_power_usage = 5
diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm
index c3be1bbf46..b785a42639 100644
--- a/code/game/machinery/Sleeper.dm
+++ b/code/game/machinery/Sleeper.dm
@@ -6,6 +6,7 @@
var/obj/machinery/sleeper/sleeper
anchored = TRUE //About time someone fixed this.
density = TRUE //VOREStation Edit - Big console
+ unacidable = TRUE
dir = 8
use_power = USE_POWER_IDLE
idle_power_usage = 40
@@ -89,6 +90,7 @@
icon_state = "sleeper_0"
density = TRUE
anchored = TRUE
+ unacidable = TRUE
circuit = /obj/item/weapon/circuitboard/sleeper
var/mob/living/carbon/human/occupant = null
var/list/available_chemicals = list()
diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm
index bd8edfcd8a..c2170d5b7b 100644
--- a/code/game/machinery/adv_med.dm
+++ b/code/game/machinery/adv_med.dm
@@ -8,6 +8,7 @@
icon_state = "body_scanner_0"
density = TRUE
anchored = TRUE
+ unacidable = TRUE
circuit = /obj/item/weapon/circuitboard/body_scanner
use_power = USE_POWER_IDLE
idle_power_usage = 60
@@ -547,6 +548,7 @@
dir = 8
density = FALSE
anchored = TRUE
+ unacidable = TRUE
circuit = /obj/item/weapon/circuitboard/scanner_console
var/printing = null
diff --git a/code/game/machinery/air_alarm.dm b/code/game/machinery/air_alarm.dm
index 6983be8b75..dd653d746a 100644
--- a/code/game/machinery/air_alarm.dm
+++ b/code/game/machinery/air_alarm.dm
@@ -36,6 +36,7 @@
layer = ABOVE_WINDOW_LAYER
vis_flags = VIS_HIDE // They have an emissive that looks bad in openspace due to their wall-mounted nature
anchored = TRUE
+ unacidable = TRUE
use_power = USE_POWER_IDLE
idle_power_usage = 80
active_power_usage = 1000 //For heating/cooling rooms. 1000 joules equates to about 1 degree every 2 seconds for a single tile of air.
diff --git a/code/game/machinery/computer/ai_core.dm b/code/game/machinery/computer/ai_core.dm
index fd6d65d9fd..73cde92e1b 100644
--- a/code/game/machinery/computer/ai_core.dm
+++ b/code/game/machinery/computer/ai_core.dm
@@ -1,6 +1,7 @@
/obj/structure/AIcore
density = TRUE
anchored = FALSE
+ unacidable = TRUE
name = "\improper AI core"
icon = 'icons/mob/AI.dmi'
icon_state = "0"
diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm
index d6847d7cf4..60935a8472 100644
--- a/code/game/machinery/computer/computer.dm
+++ b/code/game/machinery/computer/computer.dm
@@ -4,6 +4,7 @@
icon_state = "computer"
density = TRUE
anchored = TRUE
+ unacidable = TRUE
use_power = USE_POWER_IDLE
idle_power_usage = 300
active_power_usage = 300
diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm
index 19ae206605..78f8569cb4 100644
--- a/code/game/machinery/cryopod.dm
+++ b/code/game/machinery/cryopod.dm
@@ -194,6 +194,7 @@
icon_state = "cryopod_0" //VOREStation Edit - New Icon
density = TRUE
anchored = TRUE
+ unacidable = TRUE
dir = WEST
var/base_icon_state = "cryopod_0" //VOREStation Edit - New Icon
diff --git a/code/game/machinery/fire_alarm.dm b/code/game/machinery/fire_alarm.dm
index d8d3fde222..a7e0da37f6 100644
--- a/code/game/machinery/fire_alarm.dm
+++ b/code/game/machinery/fire_alarm.dm
@@ -15,6 +15,7 @@ FIRE ALARM
var/timing = 0.0
var/lockdownbyai = 0
anchored = TRUE
+ unacidable = TRUE
use_power = USE_POWER_IDLE
idle_power_usage = 2
active_power_usage = 6
diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm
index 0b4d054858..8827dc8782 100644
--- a/code/game/machinery/pipe/pipe_dispenser.dm
+++ b/code/game/machinery/pipe/pipe_dispenser.dm
@@ -5,6 +5,7 @@
icon_state = "pipe_d"
density = TRUE
anchored = TRUE
+ unacidable = TRUE
var/unwrenched = 0
var/wait = 0
var/p_layer = PIPING_LAYER_REGULAR
diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm
index de35add336..a1d44b9838 100644
--- a/code/game/machinery/rechargestation.dm
+++ b/code/game/machinery/rechargestation.dm
@@ -5,6 +5,7 @@
icon_state = "borgcharger0"
density = TRUE
anchored = TRUE
+ unacidable = TRUE
circuit = /obj/item/weapon/circuitboard/recharge_station
use_power = USE_POWER_IDLE
idle_power_usage = 50
diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm
index bc7c4fcebe..d1db08374a 100644
--- a/code/game/machinery/status_display.dm
+++ b/code/game/machinery/status_display.dm
@@ -17,6 +17,7 @@
name = "status display"
anchored = TRUE
density = FALSE
+ unacidable = TRUE
use_power = USE_POWER_IDLE
idle_power_usage = 10
circuit = /obj/item/weapon/circuitboard/status_display
diff --git a/code/game/machinery/telecomms/telecomunications.dm b/code/game/machinery/telecomms/telecomunications.dm
index 654f0598c6..784a752bda 100644
--- a/code/game/machinery/telecomms/telecomunications.dm
+++ b/code/game/machinery/telecomms/telecomunications.dm
@@ -17,6 +17,7 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list()
/obj/machinery/telecomms
icon = 'icons/obj/stationobjs_vr.dmi' //VOREStation Add
+ unacidable = TRUE
var/list/links = list() // list of machines this machine is linked to
var/traffic = 0 // value increases as traffic increases
var/netspeed = 5 // how much traffic to lose per tick (50 gigabytes/second * netspeed)
diff --git a/code/game/machinery/turret_control.dm b/code/game/machinery/turret_control.dm
index ad55fe14a1..cb9226ad99 100644
--- a/code/game/machinery/turret_control.dm
+++ b/code/game/machinery/turret_control.dm
@@ -13,6 +13,7 @@
icon_state = "control_standby"
anchored = TRUE
density = FALSE
+ unacidable = TRUE
var/enabled = FALSE
var/lethal = FALSE
var/lethal_is_configurable = TRUE
diff --git a/code/game/mecha/mech_prosthetics.dm b/code/game/mecha/mech_prosthetics.dm
index 5a2906dfae..470ede8a0f 100644
--- a/code/game/mecha/mech_prosthetics.dm
+++ b/code/game/mecha/mech_prosthetics.dm
@@ -5,6 +5,7 @@
desc = "A machine used for construction of prosthetics."
density = TRUE
anchored = TRUE
+ unacidable = TRUE
use_power = USE_POWER_IDLE
idle_power_usage = 20
active_power_usage = 5000
diff --git a/code/game/objects/effects/alien/aliens.dm b/code/game/objects/effects/alien/aliens.dm
index 0a75ea2087..c9b68f9cfe 100644
--- a/code/game/objects/effects/alien/aliens.dm
+++ b/code/game/objects/effects/alien/aliens.dm
@@ -164,6 +164,7 @@
icon_state = "weeds"
anchored = TRUE
density = FALSE
+ unacidable = TRUE
plane = TURF_PLANE
layer = ABOVE_TURF_LAYER
diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm
index 048d089fed..b27ebc27c5 100644
--- a/code/game/objects/items/bodybag.dm
+++ b/code/game/objects/items/bodybag.dm
@@ -26,7 +26,6 @@
closet_appearance = null
open_sound = 'sound/items/zip.ogg'
close_sound = 'sound/items/zip.ogg'
- door_anim_time = 0 //Unsupported
var/item_path = /obj/item/bodybag
density = FALSE
storage_capacity = (MOB_MEDIUM * 2) - 1
diff --git a/code/game/objects/items/devices/defib.dm b/code/game/objects/items/devices/defib.dm
index a98d984d17..782edc83f0 100644
--- a/code/game/objects/items/devices/defib.dm
+++ b/code/game/objects/items/devices/defib.dm
@@ -13,6 +13,7 @@
throwforce = 6
preserve_item = 1
w_class = ITEMSIZE_LARGE
+ unacidable = TRUE
origin_tech = list(TECH_BIO = 4, TECH_POWER = 2)
action_button_name = "Remove/Replace Paddles"
diff --git a/code/game/objects/items/poi_items.dm b/code/game/objects/items/poi_items.dm
index 8e65ac005b..2c05f0cfca 100644
--- a/code/game/objects/items/poi_items.dm
+++ b/code/game/objects/items/poi_items.dm
@@ -65,7 +65,6 @@
closet_appearance = null
catalogue_data = list(/datum/category_item/catalogue/information/objects/oldreactor)
climbable = FALSE
- door_anim_time = 0 //Unsupported
starts_with = list(
/obj/item/weapon/fuel_assembly/deuterium = 6)
diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm
index dbe0292263..9cee87c945 100644
--- a/code/game/objects/items/weapons/storage/belt.dm
+++ b/code/game/objects/items/weapons/storage/belt.dm
@@ -167,6 +167,7 @@
/obj/item/weapon/melee/baton,
/obj/item/weapon/gun/energy/taser,
/obj/item/weapon/gun/energy/stunrevolver,
+ /obj/item/weapon/gun/energy/stunrevolver/vintage,
/obj/item/weapon/gun/magnetic/railgun/heater/pistol,
/obj/item/weapon/gun/energy/gun,
/obj/item/weapon/flame/lighter,
diff --git a/code/game/objects/random/guns_and_ammo.dm b/code/game/objects/random/guns_and_ammo.dm
index 736565b14d..cb8362879d 100644
--- a/code/game/objects/random/guns_and_ammo.dm
+++ b/code/game/objects/random/guns_and_ammo.dm
@@ -31,6 +31,7 @@
prob(4);/obj/item/weapon/gun/energy/taser,
prob(2);/obj/item/weapon/gun/energy/crossbow/largecrossbow,
prob(4);/obj/item/weapon/gun/energy/stunrevolver,
+ prob(2);/obj/item/weapon/gun/energy/stunrevolver/vintage,
prob(3);/obj/item/weapon/gun/energy/gun/compact)
/obj/random/energy/sec
diff --git a/code/game/objects/structures/alien/alien.dm b/code/game/objects/structures/alien/alien.dm
index 31a609e5a5..6aa1ec5060 100644
--- a/code/game/objects/structures/alien/alien.dm
+++ b/code/game/objects/structures/alien/alien.dm
@@ -4,6 +4,7 @@
icon = 'icons/mob/alien.dmi'
layer = ABOVE_JUNK_LAYER
var/health = 50
+ unacidable = TRUE
/obj/structure/alien/proc/healthcheck()
if(health <=0)
diff --git a/code/game/objects/structures/cliff.dm b/code/game/objects/structures/cliff.dm
index 10413e3424..9ee6570247 100644
--- a/code/game/objects/structures/cliff.dm
+++ b/code/game/objects/structures/cliff.dm
@@ -33,6 +33,7 @@ two tiles on initialization, and which way a cliff is facing may change during m
opacity = FALSE
climbable = TRUE
climb_delay = 10 SECONDS
+ unacidable = TRUE
block_turf_edges = TRUE // Don't want turf edges popping up from the cliff edge.
plane = TURF_PLANE
diff --git a/code/game/objects/structures/crates_lockers/__closets.dm b/code/game/objects/structures/crates_lockers/__closets.dm
index 7a91c6ad8f..8d75646886 100644
--- a/code/game/objects/structures/crates_lockers/__closets.dm
+++ b/code/game/objects/structures/crates_lockers/__closets.dm
@@ -34,19 +34,11 @@
var/list/starts_with // List of type = count (or just type for 1)
- var/closet_appearance = /decl/closet_appearance // The /decl that defines what decals we end up with, that makes our look unique
+ var/decl/closet_appearance/closet_appearance = /decl/closet_appearance // The /decl that defines what decals we end up with, that makes our look unique
/// Currently animating the door transform
var/is_animating_door = FALSE
- /// Length of time (ds) to animate the door transform
- var/door_anim_time = 2.0
- /// Amount to 'squish' the full width of the door by
- var/door_anim_squish = 0.30
- /// Virtual angle at which the door is opened to (136 by default, so not a full 180)
- var/door_anim_angle = 136
- /// Offset for the door hinge location from centerline
- var/door_hinge = -6.5
- /// Our visual object for the closet door
+ /// Our visual object for the closet door, if we're animating
var/obj/effect/overlay/closet_door/door_obj
/obj/structure/closet/Initialize()
@@ -73,15 +65,16 @@
storage_capacity = content_size + 5
if(ispath(closet_appearance))
- var/decl/closet_appearance/app = GLOB.closet_appearances[closet_appearance]
- if(app)
- icon = app.icon
+ closet_appearance = GLOB.closet_appearances[closet_appearance]
+ if(istype(closet_appearance))
+ icon = closet_appearance.icon
color = null
update_icon()
/obj/structure/closet/Destroy()
- . = ..()
qdel_null(door_obj)
+ closet_appearance = null
+ return ..()
/obj/structure/closet/examine(mob/user)
. = ..()
@@ -500,7 +493,7 @@
return 1
/obj/structure/closet/proc/animate_door(closing = FALSE)
- if(!door_anim_time)
+ if(!closet_appearance?.door_anim_time)
update_icon()
return
if(!door_obj)
@@ -511,9 +504,9 @@
is_animating_door = TRUE
if(!closing)
update_icon()
- var/num_steps = door_anim_time / world.tick_lag
+ var/num_steps = closet_appearance.door_anim_time / world.tick_lag
for(var/I in 0 to num_steps)
- var/angle = door_anim_angle * (closing ? 1 - (I/num_steps) : (I/num_steps))
+ var/angle = closet_appearance.door_anim_angle * (closing ? 1 - (I/num_steps) : (I/num_steps))
var/matrix/M = get_door_transform(angle)
var/door_state = angle >= 90 ? "door_back" : "door_front"
var/door_layer = angle >= 90 ? FLOAT_LAYER : ABOVE_MOB_LAYER
@@ -526,7 +519,7 @@
animate(door_obj, transform = M, icon_state = door_state, layer = door_layer, time = world.tick_lag, flags = ANIMATION_END_NOW)
else
animate(transform = M, icon_state = door_state, layer = door_layer, time = world.tick_lag)
- addtimer(CALLBACK(src,.proc/end_door_animation,closing),door_anim_time,TIMER_UNIQUE|TIMER_OVERRIDE)
+ addtimer(CALLBACK(src, .proc/end_door_animation,closing), closet_appearance.door_anim_time, TIMER_UNIQUE|TIMER_OVERRIDE)
/obj/structure/closet/proc/end_door_animation(closing = FALSE)
is_animating_door = FALSE
@@ -537,7 +530,9 @@
/obj/structure/closet/proc/get_door_transform(angle)
var/matrix/M = matrix()
- M.Translate(-door_hinge, 0)
- M.Multiply(matrix(cos(angle), 0, 0, -sin(angle) * door_anim_squish, 1, 0))
- M.Translate(door_hinge, 0)
+ if(!closet_appearance)
+ return M
+ M.Translate(-closet_appearance.door_hinge, 0)
+ M.Multiply(matrix(cos(angle), 0, 0, -sin(angle) * closet_appearance.door_anim_squish, 1, 0))
+ M.Translate(closet_appearance.door_hinge, 0)
return M
diff --git a/code/game/objects/structures/crates_lockers/_closets_appearance_definitions.dm b/code/game/objects/structures/crates_lockers/_closets_appearance_definitions.dm
index eb1ab2d780..0db94e5aaf 100644
--- a/code/game/objects/structures/crates_lockers/_closets_appearance_definitions.dm
+++ b/code/game/objects/structures/crates_lockers/_closets_appearance_definitions.dm
@@ -14,6 +14,15 @@
var/decal_icon = 'icons/obj/closets/decals/closet.dmi'
var/can_lock = FALSE
+ /// Length of time (ds) to animate the door transform
+ var/door_anim_time = 2.0
+ /// Amount to 'squish' the full width of the door by
+ var/door_anim_squish = 0.30
+ /// Virtual angle at which the door is opened to (136 by default, so not a full 180)
+ var/door_anim_angle = 136
+ /// Offset for the door hinge location from centerline
+ var/door_hinge = -6.5
+
/decl/closet_appearance/New()
// Build our colour and decal lists.
if(LAZYLEN(extra_decals))
@@ -725,6 +734,7 @@
base_icon = 'icons/obj/closets/bases/crate.dmi'
decal_icon = 'icons/obj/closets/decals/crate.dmi'
color = COLOR_GRAY40
+ door_anim_time = 0
/decl/closet_appearance/crate/plastic
color = COLOR_GRAY80
@@ -1237,6 +1247,7 @@
decal_icon = 'icons/obj/closets/decals/large_crate.dmi'
decals = null
extra_decals = null
+ door_anim_time = 0
/decl/closet_appearance/large_crate/critter
color = COLOR_BEIGE
@@ -1349,6 +1360,7 @@
color = WOOD_COLOR_RICH
decals = null
extra_decals = null
+ door_anim_time = 0
/decl/closet_appearance/cabinet/secure
can_lock = TRUE
@@ -1361,6 +1373,7 @@
"vent"
)
extra_decals = null
+ door_anim_time = 0
/decl/closet_appearance/wall/emergency
color = COLOR_LIGHT_CYAN
@@ -1402,6 +1415,7 @@
"vent"
)
extra_decals = null
+ door_anim_time = 0
/decl/closet_appearance/wall_double/kitchen
decals = null
@@ -1431,6 +1445,7 @@
decal_icon = 'icons/obj/closets/decals/cart.dmi'
decals = null
extra_decals = null
+ door_anim_time = 0
/decl/closet_appearance/cart/trash
color = COLOR_BOTTLE_GREEN
diff --git a/code/game/objects/structures/crates_lockers/closets/coffin.dm b/code/game/objects/structures/crates_lockers/closets/coffin.dm
index b42bbcb778..3865641552 100644
--- a/code/game/objects/structures/crates_lockers/closets/coffin.dm
+++ b/code/game/objects/structures/crates_lockers/closets/coffin.dm
@@ -7,7 +7,6 @@
seal_tool = /obj/item/weapon/tool/screwdriver
breakout_sound = 'sound/weapons/tablehit1.ogg'
closet_appearance = null // Special icon for us
- door_anim_time = 0 //Unsupported
/* Graves */
/obj/structure/closet/grave
@@ -21,7 +20,6 @@
max_closets = 1
opened = 1
closet_appearance = null // Special icon for us
- door_anim_time = 0 //Unsupported
/obj/structure/closet/grave/attack_hand(mob/user as mob)
if(opened)
diff --git a/code/game/objects/structures/crates_lockers/closets/crittercrate.dm b/code/game/objects/structures/crates_lockers/closets/crittercrate.dm
index 0e7763e827..6b0196168b 100644
--- a/code/game/objects/structures/crates_lockers/closets/crittercrate.dm
+++ b/code/game/objects/structures/crates_lockers/closets/crittercrate.dm
@@ -2,4 +2,3 @@
name = "critter crate"
desc = "A crate which can sustain life for a while."
closet_appearance = /decl/closet_appearance/large_crate/critter
- door_anim_time = 0 //Unsupported
\ No newline at end of file
diff --git a/code/game/objects/structures/crates_lockers/closets/egg_vr.dm b/code/game/objects/structures/crates_lockers/closets/egg_vr.dm
index d024a71582..19d3f8b452 100644
--- a/code/game/objects/structures/crates_lockers/closets/egg_vr.dm
+++ b/code/game/objects/structures/crates_lockers/closets/egg_vr.dm
@@ -13,7 +13,6 @@
opened = 0
sealed = 0 //Don't touch this.
health = 100
- door_anim_time = 0 //Unsupported
/obj/structure/closet/secure_closet/egg/update_icon()
if(opened)
diff --git a/code/game/objects/structures/crates_lockers/closets/gimmick.dm b/code/game/objects/structures/crates_lockers/closets/gimmick.dm
index 2023737b8f..ca856f3ace 100644
--- a/code/game/objects/structures/crates_lockers/closets/gimmick.dm
+++ b/code/game/objects/structures/crates_lockers/closets/gimmick.dm
@@ -3,7 +3,6 @@
desc = "Old will forever be in fashion."
icon = 'icons/obj/closets/bases/cabinet.dmi'
closet_appearance = /decl/closet_appearance/cabinet
- door_anim_time = 0 //Unsupported
/obj/structure/closet/acloset
name = "strange closet"
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm
index 6ee9c88ba7..5e0944ed41 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm
@@ -47,6 +47,7 @@
/obj/item/clothing/glasses/meson,
/obj/item/clothing/head/soft,
/obj/item/clothing/suit/storage/hooded/wintercoat/cargo,
+ /obj/item/clothing/suit/storage/hooded/wintercoat/cargo/qm,
/obj/item/clothing/shoes/boots/winter/supply)
/obj/structure/closet/secure_closet/quartermaster/Initialize()
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
index feef58e05a..674a2e04b8 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm
@@ -26,6 +26,7 @@
/obj/item/device/t_scanner/upgraded,
/obj/item/taperoll/engineering,
/obj/item/clothing/suit/storage/hooded/wintercoat/engineering,
+ /obj/item/clothing/suit/storage/hooded/wintercoat/engineering/ce,
/obj/item/clothing/shoes/boots/winter/engineering,
/obj/item/weapon/tank/emergency/oxygen/engi,
/obj/item/weapon/reagent_containers/spray/windowsealant, //VOREStation Add,
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
index b6021a86c9..fd0c1c474f 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm
@@ -103,6 +103,7 @@
/obj/item/clothing/mask/gas,
/obj/item/clothing/suit/storage/toggle/fr_jacket,
/obj/item/clothing/suit/storage/toggle/labcoat/emt,
+ /obj/item/clothing/suit/storage/hooded/wintercoat/medical/para,
/obj/item/device/radio/headset/headset_med/alt,
/obj/item/weapon/cartridge/medical,
/obj/item/weapon/storage/briefcase/inflatable,
@@ -137,6 +138,7 @@
/obj/item/device/flash,
/obj/item/weapon/reagent_containers/hypospray/vial,
/obj/item/clothing/suit/storage/hooded/wintercoat/medical,
+ /obj/item/clothing/suit/storage/hooded/wintercoat/medical/cmo,
/obj/item/clothing/shoes/boots/winter/medical,
/obj/item/weapon/storage/box/freezer,
/obj/item/clothing/mask/gas,
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm
index 8f4c8ef1fc..c9cea196b3 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm
@@ -45,6 +45,7 @@
/obj/item/clothing/mask/gas,
/obj/item/device/flash,
/obj/item/clothing/suit/storage/hooded/wintercoat/science,
+ /obj/item/clothing/suit/storage/hooded/wintercoat/science/rd,
/obj/item/clothing/shoes/boots/winter/science,
/obj/item/weapon/bluespace_harpoon) //VOREStation Add
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
index 0e05016224..3dc6dfaf6b 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm
@@ -60,7 +60,8 @@
/obj/item/clothing/head/caphat/hop,
/obj/item/clothing/under/gimmick/rank/head_of_personnel/suit,
/obj/item/clothing/under/gimmick/rank/head_of_personnel/suit/skirt,
- /obj/item/clothing/glasses/sunglasses)
+ /obj/item/clothing/glasses/sunglasses,
+ /obj/item/clothing/suit/storage/hooded/wintercoat/hop)
/obj/structure/closet/secure_closet/hos
@@ -100,6 +101,7 @@
/obj/item/weapon/melee/telebaton,
/obj/item/clothing/head/beret/sec/corporate/hos,
/obj/item/clothing/suit/storage/hooded/wintercoat/security,
+ /obj/item/clothing/suit/storage/hooded/wintercoat/security/hos,
/obj/item/clothing/shoes/boots/winter/security,
/obj/item/device/flashlight/maglight,
/obj/item/clothing/mask/gas/half,
@@ -240,6 +242,7 @@
/obj/item/clothing/accessory/badge/holo/detective,
/obj/item/clothing/gloves/forensic, //CHOMP Edit replaces black gloves
/obj/item/gunbox, //CHOMP Edit undoes vorestation removal and adds back gunbox
+ ///obj/item/weapon/gun/energy/stunrevolver/vintage, // VOREStation Removal
/obj/item/weapon/storage/belt/detective,
/obj/item/weapon/storage/box/evidence,
/obj/item/device/radio/headset/headset_sec,
@@ -312,4 +315,3 @@ GLOBAL_LIST_BOILERPLATE(all_brig_closets, /obj/structure/closet/secure_closet/br
//too small to put a man in
large = 0
- door_anim_time = 0 // Unsupported
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security_vr.dm b/code/game/objects/structures/crates_lockers/closets/secure/security_vr.dm
index eba2913e7a..1372d70623 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/security_vr.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/security_vr.dm
@@ -21,6 +21,7 @@
/obj/item/clothing/accessory/holster/waist,
/obj/item/clothing/head/beret/sec/corporate/hos,
/obj/item/clothing/suit/storage/hooded/wintercoat/security,
+ /obj/item/clothing/suit/storage/hooded/wintercoat/security/hos,
/obj/item/clothing/mask/gas/half)
/obj/structure/closet/secure_closet/hos2
diff --git a/code/game/objects/structures/crates_lockers/closets/statue.dm b/code/game/objects/structures/crates_lockers/closets/statue.dm
index c930b032a1..9b66918be0 100644
--- a/code/game/objects/structures/crates_lockers/closets/statue.dm
+++ b/code/game/objects/structures/crates_lockers/closets/statue.dm
@@ -7,7 +7,6 @@
anchored = TRUE
health = 0 //destroying the statue kills the mob within
blocks_emissive = EMISSIVE_BLOCK_UNIQUE
- door_anim_time = 0 // Why is this a closet??
var/intialTox = 0 //these are here to keep the mob from taking damage from things that logically wouldn't affect a rock
var/intialFire = 0 //it's a little sloppy I know but it was this or the GODMODE flag. Lesser of two evils.
var/intialBrute = 0
diff --git a/code/game/objects/structures/crates_lockers/closets/walllocker.dm b/code/game/objects/structures/crates_lockers/closets/walllocker.dm
index c806dbbaba..561f15369d 100644
--- a/code/game/objects/structures/crates_lockers/closets/walllocker.dm
+++ b/code/game/objects/structures/crates_lockers/closets/walllocker.dm
@@ -10,7 +10,6 @@
anchored = TRUE
store_mobs = 0
wall_mounted = 1
- door_anim_time = 0 // Unsupported
//spawns 2 sets of breathmask, emergency oxy tank and crowbar
@@ -92,7 +91,6 @@
wall_mounted = 1
plane = TURF_PLANE
layer = ABOVE_TURF_LAYER
- door_anim_time = 0 //Unsupported
/obj/structure/closet/walllocker_double/north
pixel_y = 32
diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm
index bc178de97e..eec6a8d892 100644
--- a/code/game/objects/structures/crates_lockers/crates.dm
+++ b/code/game/objects/structures/crates_lockers/crates.dm
@@ -7,7 +7,6 @@
closet_appearance = /decl/closet_appearance/crate
climbable = TRUE
dir = 4 //Spawn facing 'forward' by default.
- door_anim_time = 0 //Unsupported until appropriate sprites are available
var/points_per_crate = 5
var/rigged = 0
diff --git a/code/game/objects/structures/ghost_pods/ghost_pods.dm b/code/game/objects/structures/ghost_pods/ghost_pods.dm
index f5b7756485..c77e00e13e 100644
--- a/code/game/objects/structures/ghost_pods/ghost_pods.dm
+++ b/code/game/objects/structures/ghost_pods/ghost_pods.dm
@@ -8,6 +8,7 @@
var/used = FALSE
var/busy = FALSE // Don't spam ghosts by spamclicking.
var/needscharger //For drone pods that want their pod to turn into a charger.
+ unacidable = TRUE
// Call this to get a ghost volunteer.
/obj/structure/ghost_pod/proc/trigger(var/alert, var/adminalert)
diff --git a/code/game/objects/structures/loot_piles.dm b/code/game/objects/structures/loot_piles.dm
index 4443fb6da3..a0737da55c 100644
--- a/code/game/objects/structures/loot_piles.dm
+++ b/code/game/objects/structures/loot_piles.dm
@@ -21,6 +21,7 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
icon_state = "randompile"
density = FALSE
anchored = TRUE
+ unacidable = TRUE
var/list/icon_states_to_use = list() // List of icon states the pile can choose from on initialization. If empty or null, it will stay the initial icon_state.
diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm
index f9f2287302..47f4aa26cf 100644
--- a/code/game/objects/structures/morgue.dm
+++ b/code/game/objects/structures/morgue.dm
@@ -20,6 +20,7 @@
var/obj/structure/m_tray/connected = null
var/list/occupants = list()
anchored = TRUE
+ unacidable = TRUE
/obj/structure/morgue/Destroy()
if(connected)
diff --git a/code/game/objects/structures/props/esoteric.dm b/code/game/objects/structures/props/esoteric.dm
new file mode 100644
index 0000000000..8356c2cf71
--- /dev/null
+++ b/code/game/objects/structures/props/esoteric.dm
@@ -0,0 +1,60 @@
+/obj/structure/prop/esoteric
+ name = "some esoteric thing"
+ desc = "Perhaps it's of ritual significance?"
+ icon = 'icons/obj/props/decor.dmi'
+
+/obj/structure/prop/esoteric/nt_pedestal0_old
+ name = "pedestal"
+ desc = "A pedestal with a mysterious slot at its center."
+ icon_state = "nt_pedestal0_old"
+
+/obj/structure/prop/esoteric/nt_pedestal1_old
+ name = "pedestal"
+ desc = "A pedestal with some kind of sword slotted securely in the center."
+ icon_state = "nt_pedestal1_old"
+
+// eye of the protector from Eris
+/obj/structure/prop/esoteric/eotp
+ icon = 'icons/obj/props/decor32x64.dmi'
+ icon_state = "eotp"
+
+/**
+ * Possible 'state' options for change_state(state) are:
+ * off: Looks boring and off
+ * on: candles lit and stuff
+ * no_cruciform: No cruciform (the little triangle thing) inserted
+ * red_cruciform: Red light cruciform inserted
+ * green_cruciform: Green light cruciform inserted
+ * panel_open: The panel is open (wiring)
+ * panel_closed: The panel is closed
+ */
+// neotheology cruciform reader from Eris
+/obj/structure/prop/esoteric/reader
+ name = "electronic altar"
+ desc = "It looks like you're meant to scan something here."
+ icon = 'icons/obj/props/decor.dmi'
+ icon_state = "nt_reader_off"
+
+/obj/structure/prop/esoteric/reader/change_state(state)
+ . = ..()
+ switch(state)
+ if("off")
+ icon_state = "nt_reader_off"
+ if("on")
+ icon_state = "nt_reader_on"
+ if("no_cruciform")
+ cut_overlay("nt_reader_c_green")
+ cut_overlay("nt_reader_c_red")
+ if("red_cruciform")
+ cut_overlay("nt_reader_c_green")
+ cut_overlay("nt_reader_c_red")
+ add_overlay("nt_reader_c_red")
+ if("green_cruciform")
+ cut_overlay("nt_reader_c_red")
+ cut_overlay("nt_reader_c_green")
+ add_overlay("nt_reader_c_green")
+ if("panel_open")
+ cut_overlay("nt_reader_panel")
+ add_overlay("nt_reader_panel")
+ if("panel_closed")
+ cut_overlay("nt_reader_panel")
diff --git a/code/game/objects/structures/props/fences.dm b/code/game/objects/structures/props/fences.dm
new file mode 100644
index 0000000000..0d7ac7dbe2
--- /dev/null
+++ b/code/game/objects/structures/props/fences.dm
@@ -0,0 +1,7 @@
+// fences from TGMC
+// You'll need to 'create instances from icon_states' in an editor to use these well
+/obj/structure/prop/fence
+ name = "fence"
+ desc = "It's a fence! Not much else to say about it."
+ icon = 'icons/obj/props/decor_fences.dmi'
+
diff --git a/code/game/objects/structures/props/machines.dm b/code/game/objects/structures/props/machines.dm
new file mode 100644
index 0000000000..9e9e0d7714
--- /dev/null
+++ b/code/game/objects/structures/props/machines.dm
@@ -0,0 +1,686 @@
+/obj/structure/prop/machine
+ name = "doodad"
+ desc = "Some kind of machine."
+ icon = 'icons/obj/props/decor.dmi'
+
+//Eris Bluespace Beacon
+
+/obj/structure/prop/machine/bsb_off
+ name = "beacon"
+ icon_state = "bsb_off"
+
+/obj/structure/prop/machine/bsb_on
+ name = "beacon"
+ icon_state = "bsb_on"
+
+/obj/structure/prop/machine/biosyphon
+ icon_state = "biosyphon"
+
+/obj/structure/prop/machine/von_krabin
+ icon_state = "von_krabin"
+
+/obj/structure/prop/machine/last_shelter
+ icon_state = "last_shelter"
+
+/obj/structure/prop/machine/complicator
+ icon_state = "complicator"
+
+/obj/structure/prop/machine/random_radio
+ name = "radio"
+ icon_state = "random_radio"
+
+// vatgrowing thing from /tg/
+/obj/structure/prop/machine/green_egg
+ icon_state = "gel_cocoon"
+
+// gravity generator from Eris
+/obj/structure/prop/machine/gravygen
+ icon = 'icons/obj/props/decor64x64.dmi'
+ icon_state = "bigdice"
+ bound_width = 64
+ bound_height = 64
+
+// dna vault from /tg/
+/obj/structure/prop/dna_vault
+ icon = 'icons/obj/props/decor96x96.dmi'
+ icon_state = "vault"
+
+/**
+ * Possible 'state' options for change_state(state) are:
+ * panel_open: The panel is opened
+ * panel_closed: The panel is closed
+ */
+// neotheology cloning biocan from Eris
+/obj/structure/prop/machine/nt_biocan
+ icon = 'icons/obj/props/decor.dmi'
+ icon_state = "nt_biocan"
+
+/obj/structure/prop/nt_biocan/change_state(state)
+ . = ..()
+ switch(state)
+ if("panel_open")
+ cut_overlay("nt_biocan_panel")
+ add_overlay("nt_biocan_panel")
+ if("panel_closed")
+ cut_overlay("nt_biocan_panel")
+
+/**
+ * Possible 'state' options for change_state(state) are:
+ * blue, red, orange, yellow, green, purple: Set that color
+ * damaged: add damage overlay
+ * undamaged: remove damage overlay
+ * broken: become damaged
+ * plain: undamaged white version, otherwise use a color
+ */
+// dominator console from /tg/
+/obj/structure/prop/dominator
+ icon = 'icons/obj/props/decor.dmi'
+ icon_state = "dominator"
+
+/obj/structure/prop/dominator/change_state(state)
+ . = ..()
+ switch(state)
+ if("blue")
+ icon_state = "dominator-blue"
+ if("red")
+ icon_state = "dominator-red"
+ if("orange")
+ icon_state = "dominator-orange"
+ if("yellow")
+ icon_state = "dominator-yellow"
+ if("green")
+ icon_state = "dominator-green"
+ if("purple")
+ icon_state = "dominator-purple"
+ if("damaged")
+ add_overlay("dom_damage")
+ if("undamaged")
+ cut_overlay("dom_damage")
+ if("broken")
+ icon_state = "dominator-broken"
+ if("plain")
+ icon_state = "dominator"
+
+/obj/structure/prop/dominator/blue
+ icon_state = "dominator-blue"
+/obj/structure/prop/dominator/red
+ icon_state = "dominator-red"
+/obj/structure/prop/dominator/orange
+ icon_state = "dominator-orange"
+/obj/structure/prop/dominator/yellow
+ icon_state = "dominator-yellow"
+/obj/structure/prop/dominator/green
+ icon_state = "dominator-green"
+/obj/structure/prop/dominator/purple
+ icon_state = "dominator-purple"
+
+/**
+ * Possible 'state' options for change_state(state) are:
+ * off: Default, boring
+ * on: Pumping or something
+ */
+// some neotheology thing from Eris
+/obj/structure/prop/machine/solifier
+ icon_state = "nt_solidifier"
+
+/obj/structure/prop/machine/solifier/change_state(state)
+ . = ..()
+ switch(state)
+ if("off")
+ icon_state = "nt_solidifier"
+ if("on")
+ icon_state = "nt_solidifier_on"
+
+/obj/structure/prop/machine/solifier/starts_on
+ icon_state = "nt_solidifier_on"
+
+/**
+ * Possible 'state' options for change_state(state) are:
+ * off: Boring, round
+ * on: Spinny glowy
+ */
+// conduit of soul from Eris
+/obj/structure/prop/machine/conduit
+ icon_state = "conduit_off"
+
+/obj/structure/prop/machine/conduit/change_state(state)
+ . = ..()
+ switch(state)
+ if("on")
+ icon_state = "conduit_spin"
+ flick("conduit_starting", src)
+ if("off")
+ icon_state = "conduit_off"
+ flick("conduit_stopping", src)
+
+/obj/structure/prop/machine/conduit/starts_on
+ icon_state = "conduit_spin"
+
+/**
+ * Possible 'state' options for change_state(state) are:
+ * on: Doing some kinda worky thing
+ * off: Not doing much of anything
+ * empty: No blue crystal thingy
+ * loaded: off but without the animation
+ */
+// some kinda NT thing from Eris
+/obj/structure/prop/machine/core
+ icon_state = "core_inactive"
+
+/obj/structure/prop/machine/core/change_state(state)
+ . = ..()
+ switch(state)
+ if("on")
+ icon_state = "core_active"
+ flick("core_warmup", src)
+ if("off")
+ icon_state = "core_inactive"
+ flick("core_shutdown", src)
+ if("empty")
+ icon_state = "core_empty"
+ if("loaded")
+ icon_state = "core_inactive"
+
+/obj/structure/prop/machine/core/starts_on
+ icon_state = "core_active"
+
+/**
+ * Possible 'state' options for change_state(state) are:
+ * down: In the ground, glowing
+ * up: Out of the ground, open
+ */
+// experimental science destructor from /tg/
+/obj/structure/prop/machine/tube
+ icon = 'icons/obj/props/decor32x64.dmi'
+ icon_state = "tube_open"
+
+/obj/structure/prop/machine/tube/change_state(state)
+ . = ..()
+ switch(state)
+ if("down")
+ icon_state = "tube_on"
+ flick("tube_down", src)
+ if("up")
+ icon_state = "tube_open"
+ flick("tube_up", src)
+
+/obj/structure/prop/machine/tube/starts_down
+ icon_state = "tube_on"
+
+/**
+ * Possible 'state' options for change_state(state) are:
+ * off: Boring, static
+ * on: Turny and blinky
+ */
+// experimental science destructor from /tg/
+/obj/structure/prop/machine/comm_tower
+ icon = 'icons/obj/props/decor.dmi'
+ icon = 'icons/obj/props/decor96x96.dmi'
+ icon_state = "comm_tower"
+
+/obj/structure/prop/machine/comm_tower/change_state(state)
+ . = ..()
+ switch(state)
+ if("on")
+ icon_state = "comm_tower_on"
+ if("off")
+ icon_state = "comm_tower"
+
+/obj/structure/prop/machine/comm_tower/starts_on
+ icon_state = "comm_tower_on"
+
+/**
+ * Possible 'state' options for change_state(state) are:
+ * off: Not doing much
+ * on: Stamping mysterious substances
+ */
+// sheetizer from /tg/
+/obj/structure/prop/machine/stamper
+ icon = 'icons/obj/props/decor.dmi'
+ icon_state = "stamper"
+
+/obj/structure/prop/machine/stamper/change_state(state)
+ . = ..()
+ switch(state)
+ if("off")
+ cut_overlays()
+ if("on")
+ add_overlay("stamper_proc")
+ add_overlay("stamper_but")
+
+/obj/structure/prop/machine/stamper/starts_on
+ icon_state = "stamper_on"
+
+/obj/structure/prop/machine/stamper/starts_on/Initialize()
+ add_overlay("stamper_proc")
+ add_overlay("stamper_but")
+
+
+/**
+ * Possible 'state' options for change_state(state) are:
+ * whole: Not doing much
+ * broken: Stamping mysterious substances
+ */
+// alien autopsy thing from TGMC
+/obj/structure/prop/machine/alien_tank
+ icon_state = "tank_larva"
+
+/obj/structure/prop/machine/alien_tank/change_state(state)
+ . = ..()
+ switch(state)
+ if("whole")
+ icon_state = "tank_larva"
+ if("broken")
+ icon_state = "tank_broken"
+
+/obj/structure/prop/machine/alien_tank/starts_broken
+ icon_state = "tank_broken"
+
+/**
+ * Possible 'state' options for change_state(state) are:
+ * idle: The default look
+ * active: Glowy lights underneath
+ * panel_open: Opened panel (wiring)
+ * panel_closed: Closed panel
+ */
+// neotheology optable from Eris
+/obj/structure/prop/machine/nt_optable
+ icon_state = "nt_optable-idle"
+
+/obj/structure/prop/machine/nt_optable/change_state(state)
+ . = ..()
+ switch(state)
+ if("idle")
+ icon_state = "nt_optable-idle"
+ if("active")
+ icon_state = "nt_optable-active"
+ if("panel_open")
+ cut_overlay("nt_optable_panel")
+ add_overlay("nt_optable_panel")
+ if("panel_closed")
+ cut_overlay("nt_optable_panel")
+
+/obj/structure/prop/nt_optable/starts_active
+ icon_state = "nt_optable-active"
+
+/**
+ * Possible 'state' options for change_state(state) are:
+ * idle: The default look
+ * active: Glowy lights in the center
+ * panel_open: Opened panel (wiring)
+ * panel_closed: Closed panel
+ */
+// trade beacon from Eris
+/obj/structure/prop/machine/tradebeacon
+ icon_state = "tradebeacon"
+
+/obj/structure/prop/machine/tradebeacon/change_state(state)
+ . = ..()
+ switch(state)
+ if("idle")
+ icon_state = "tradebeacon"
+ if("active")
+ icon_state = "tradebeacon_active"
+ if("panel_open")
+ cut_overlay("tradebeacon_panel")
+ add_overlay("tradebeacon_panel")
+ if("panel_closed")
+ cut_overlay("tradebeacon_panel")
+
+/obj/structure/prop/machine/tradebeacon/starts_active
+ icon_state = "tradebeacon_active"
+
+/**
+ * Possible 'state' options for change_state(state) are:
+ * idle: The default look
+ * active: Glowy lights in the center
+ * panel_open: Opened panel (wiring)
+ * panel_closed: Closed panel
+ */
+// another trade beacon from Eris
+/obj/structure/prop/machine/tradebeacon2
+ icon_state = "tradebeacon"
+
+/obj/structure/prop/machine/tradebeacon2/change_state(state)
+ . = ..()
+ switch(state)
+ if("idle")
+ icon_state = "tradebeacon_sending"
+ if("active")
+ icon_state = "tradebeacon_sending_active"
+ if("panel_open")
+ cut_overlay("tradebeacon_sending_panel")
+ add_overlay("tradebeacon_sending_panel")
+ if("panel_closed")
+ cut_overlay("tradebeacon_sending_panel")
+
+/obj/structure/prop/machine/tradebeacon2/starts_active
+ icon_state = "tradebeacon_sending_active"
+
+/**
+ * Possible 'state' options for change_state(state) are:
+ * off: Non-spinny
+ * on: Spinny and floaty
+ */
+// neotheology decorative(?) obelisk from Eris
+/obj/structure/prop/machine/nt_obelisk
+ icon = 'icons/obj/props/decor.dmi'
+ icon_state = "nt_obelisk"
+
+/obj/structure/prop/machine/nt_obelisk/change_state(state)
+ . = ..()
+ switch(state)
+ if("off")
+ icon_state = "nt_obelisk"
+ if("on")
+ icon_state = "nt_obelisk_on"
+
+/obj/structure/prop/machine/nt_obelisk/starts_on
+ icon_state = "nt_obelisk_on"
+
+/**
+ * Possible 'state' options for change_state(state) are:
+ * off: Inert
+ * on: Hand destroying machinery
+ */
+// 'sorter' from Eris
+/obj/structure/prop/machine/sorter
+ icon = 'icons/obj/props/decor.dmi'
+ icon_state = "sorter"
+
+/obj/structure/prop/machine/sorter/change_state(state)
+ . = ..()
+ switch(state)
+ if("off")
+ icon_state = "sorter"
+ if("on")
+ icon_state = "sorter-process"
+
+/obj/structure/prop/machine/sorter/starts_on
+ icon_state = "sorter-process"
+
+/**
+ * Possible 'state' options for change_state(state) are:
+ * off: Inert
+ * on: Hand destroying machinery
+ */
+// 'smelter' from Eris
+/obj/structure/prop/machine/smelter
+ icon = 'icons/obj/props/decor.dmi'
+ icon_state = "smelter"
+
+/obj/structure/prop/machine/smelter/change_state(state)
+ . = ..()
+ switch(state)
+ if("off")
+ icon_state = "smelter"
+ if("on")
+ icon_state = "smelter-process"
+
+/obj/structure/prop/machine/smelter/starts_on
+ icon_state = "smelter-process"
+
+/**
+ * Possible 'state' options for change_state(state) are:
+ * idle: Not doing anything, with yellow template exposed
+ * work: busy doing work
+ * pause: paused work
+ */
+// cruciform forge from Eris
+/obj/structure/prop/machine/nt_cruciforge
+ icon = 'icons/obj/props/decor.dmi'
+ icon_state = "nt_cruciforge"
+
+/obj/structure/prop/machine/nt_cruciforge/change_state(state)
+ . = ..()
+ switch(state)
+ if("idle")
+ icon_state = "nt_cruciforge"
+ flick("nt_cruciforge_finish", src) // 8ds
+ if("work")
+ icon_state = "nt_cruciforge_work"
+ flick("nt_cruciforge_start", src) // 8ds
+ if("pause")
+ icon_state = "nt_cruciforge_pause"
+
+/obj/structure/prop/machine/nt_cruciforge/starts_working
+ icon_state = "nt_cruciforge_work"
+
+/**
+ * Possible 'state' options for change_state(state) are:
+ * off: Default, boring
+ * on: Showing a display/powered up
+ */
+// A console from TGMC
+/obj/structure/prop/machine/tgmc_console1
+ name = "console"
+ icon = 'icons/obj/props/decor.dmi'
+ icon_state = "tgmc_console1"
+
+/obj/structure/prop/machine/tgmc_console1/change_state(state)
+ . = ..()
+ switch(state)
+ if("off")
+ icon_state = "tgmc_console1"
+ if("on")
+ icon_state = "tgmc_console1_on"
+
+/obj/structure/prop/machine/tgmc_console1/starts_on
+ icon_state = "tgmc_console1_on"
+
+/**
+ * Possible 'state' options for change_state(state) are:
+ * off: Default, boring
+ * on: Showing a display/powered up
+ */
+// A console from TGMC
+/obj/structure/prop/machine/tgmc_console2
+ name = "console"
+ icon_state = "tgmc_console2"
+
+/obj/structure/prop/machine/tgmc_console2/change_state(state)
+ . = ..()
+ switch(state)
+ if("off")
+ icon_state = "tgmc_console2"
+ if("on")
+ icon_state = "tgmc_console2_on"
+
+/obj/structure/prop/machine/tgmc_console2/starts_on
+ icon_state = "tgmc_console2_on"
+
+/**
+ * Possible 'state' options for change_state(state) are:
+ * off: Default, boring
+ * on: Showing a display/powered up
+ */
+// A console from TGMC
+/obj/structure/prop/machine/tgmc_console3
+ name = "console"
+ icon_state = "tgmc_console3"
+
+/obj/structure/prop/machine/tgmc_console3/change_state(state)
+ . = ..()
+ switch(state)
+ if("off")
+ icon_state = "tgmc_console3"
+ if("on")
+ icon_state = "tgmc_console3_on"
+
+/obj/structure/prop/machine/tgmc_console3/starts_on
+ icon_state = "tgmc_console3_on"
+
+/**
+ * Possible 'state' options for change_state(state) are:
+ * off: Default, boring
+ * on: Showing a display/powered up
+ */
+// A console from TGMC
+/obj/structure/prop/machine/tgmc_console4
+ name = "console"
+ icon_state = "tgmc_console4"
+
+/obj/structure/prop/machine/tgmc_console4/change_state(state)
+ . = ..()
+ switch(state)
+ if("off")
+ icon_state = "tgmc_console4"
+ if("on")
+ icon_state = "tgmc_console4_on"
+
+/obj/structure/prop/machine/tgmc_console4/starts_on
+ icon_state = "tgmc_console4_on"
+
+/**
+ * Possible 'state' options for change_state(state) are:
+ * off: Default, boring
+ * on: Showing a display/powered up
+ */
+// A console from TGMC
+/obj/structure/prop/machine/tgmc_console5
+ name = "console"
+ icon_state = "tgmc_console5"
+
+/obj/structure/prop/machine/tgmc_console5/change_state(state)
+ . = ..()
+ switch(state)
+ if("off")
+ icon_state = "tgmc_console5"
+ if("on")
+ icon_state = "tgmc_console5_on"
+
+/obj/structure/prop/machine/tgmc_console5/starts_on
+ icon_state = "tgmc_console5_on"
+
+/**
+ * This one is a bit more fancy than others. Anything in the contents (PLEASE LIMIT TO ONE THING)
+ * will show up inside it! Also if you map in an item on it, it will grab that at mapload and start
+ * in the 'closed, full of fluid' state, so you can put a body on it or whatever.
+ *
+ * As an aghost you can also dragdrop something into it (you have to be ghosted next to it)
+ *
+ * Possible 'state' options for change_state(state) are:
+ * open: Open, no fluid or anything. At the end the contents are ejected.
+ * closed: Closed, full of liquid
+ * panel_open: Shows panel
+ * panel_closed: Unshows panel
+ */
+// neotheology cloning pod from Eris
+/obj/structure/prop/machine/nt_pod
+ icon = 'icons/obj/props/decor.dmi'
+ icon = 'icons/obj/props/decor32x64.dmi'
+ icon_state = "nt_pod_mappreview"
+ bound_height = 64
+
+ var/obj/effect/overlay/vis/outside
+ var/obj/effect/overlay/vis/door
+ var/obj/effect/overlay/vis/fluid
+
+ var/contents_vis_flags = NONE
+ var/contents_original_pixel_y = 0
+
+/obj/structure/prop/machine/nt_pod/Initialize(mapload)
+ // Our non-map-preview state
+ icon_state = "nt_pod"
+
+ // Alpha mask to make sure things don't sneak out
+ var/obj/effect/overlay/vis/mask = new
+ mask.icon = icon
+ mask.icon_state = "nt_pod_mask"
+ mask.render_target = "*nt_podmask[REF(src)]"
+ mask.vis_flags = VIS_INHERIT_ID
+ vis_contents += mask
+
+ outside = add_vis_overlay(icon, "nt_pod_over", ABOVE_MOB_LAYER, MOB_PLANE, unique = TRUE)
+ door = add_vis_overlay(icon, "nothing", ABOVE_MOB_LAYER, MOB_PLANE, unique = TRUE)
+ fluid = add_vis_overlay(icon, "nothing", ABOVE_MOB_LAYER, MOB_PLANE, unique = TRUE)
+
+ // Gather up our friends
+ if(mapload)
+ var/atom/movable/AM = locate() in loc
+ AM?.forceMove(src)
+
+/obj/structure/prop/machine/nt_pod/Entered(atom/movable/mover)
+ abduct(mover)
+
+/obj/structure/prop/machine/nt_pod/proc/abduct(var/atom/movable/AM)
+ // Save old settings
+ contents_vis_flags = AM.vis_flags
+ contents_original_pixel_y = AM.pixel_y
+
+ // Arrange
+ AM.add_filter("podmask", 1, alpha_mask_filter(render_source = "nt_podmask[REF(src)]", flags = MASK_INVERSE))
+ AM.pixel_y = 12
+ AM.vis_flags = VIS_INHERIT_ID|VIS_INHERIT_DIR
+ vis_contents += AM
+ if(ismob(AM))
+ var/mob/M = AM
+ buckle_mob(M, TRUE, FALSE)
+
+ // TRAP THEM
+ change_state("closed")
+
+/obj/structure/prop/machine/nt_pod/proc/unduct(var/atom/movable/AM)
+ // Geddout
+ vis_contents -= AM
+ if(ismob(AM))
+ var/mob/M = AM
+ unbuckle_mob(M, TRUE)
+ // Cleanup
+ AM.remove_filter("podmask")
+ AM.forceMove(drop_location())
+ AM.vis_flags = contents_vis_flags
+ AM.pixel_y = contents_original_pixel_y
+
+/obj/structure/prop/machine/nt_pod/MouseDrop_T(var/atom/movable/AM, var/mob/user)
+ if(contents.len)
+ return
+ if(!ismovable(AM))
+ return
+ if(!user.client?.holder)
+ return
+
+ AM.forceMove(src)
+
+/obj/structure/prop/machine/nt_pod/change_state(state)
+ . = ..()
+ switch(state)
+ if("open")
+ cut_overlay("nt_pod_top_on")
+ cut_overlay("nt_pod_under")
+
+ // Fluid drains
+ fluid.icon_state = "nothing"
+ flick("nt_pod_emptying", fluid) // 8ds
+ sleep(8)
+
+ // Door opens
+ door.icon_state = "nothing"
+ flick("nt_pod_opening", door) // 9ds
+ sleep(9)
+
+ // GET OUT
+ outside.layer = BELOW_MOB_LAYER
+ if(contents.len)
+ for(var/atom/movable/AM as anything in contents)
+ unduct(AM)
+
+ if("closed")
+ outside.layer = ABOVE_MOB_LAYER
+ cut_overlay("nt_pod_top_on")
+ add_overlay("nt_pod_top_on")
+ add_overlay("nt_pod_under")
+
+ // Door closes
+ door.icon_state = "nt_pod_glass"
+ flick("nt_pod_closing", door) // 9ds
+ sleep(9)
+ // Fluid fills
+ fluid.icon_state = "nt_pod_liquid"
+ flick("nt_pod_filling", fluid) // 8ds
+
+ if("panel_open")
+ cut_overlay("nt_pod_panel")
+ add_overlay("nt_pod_panel")
+ if("panel_closed")
+ cut_overlay("nt_pod_panel")
\ No newline at end of file
diff --git a/code/game/objects/structures/props/prop.dm b/code/game/objects/structures/props/prop.dm
index 1ddd91285e..87fde972fc 100644
--- a/code/game/objects/structures/props/prop.dm
+++ b/code/game/objects/structures/props/prop.dm
@@ -1,19 +1,20 @@
/**
+ * Decorative items for PoIs etc.
* These are generally sprites ported from other servers, which don't have any unique code.
* They can be used by mappers for decorating their maps. They're mostly here so people who aren't
* rummaging around in the sprites can be aware of some neat sprites they can use.
- *
+ *
* Obviously you can swipe the sprites for real structures and add code, but please don't add any code
* (beyond decorative things like maybe light) directly to these types or this file!
* Take the icon and state and make your own type under /obj/structure.
- *
+ *
* Some of these do have a SMIDGE of code to allow a mapper to twirl them through states/animations without
* much effort, but beyond 'visuals logic', I'd rather keep all the logic out of here.
*/
/obj/structure/prop
name = "mysterious structure"
- desc = "A mysterious structure!"
+ desc = "You're not sure what this is."
icon = 'icons/obj/structures.dmi'
icon_state = "safe"
density = TRUE
@@ -30,8 +31,6 @@
else
to_chat(user, interaction_message)
-/// Changes the visual state of the machine between icon_states or overlays or whatever
-/// the machine needs to look like it's in a different state.
/obj/structure/prop/proc/change_state(state)
SHOULD_CALL_PARENT(TRUE)
src.state = state
@@ -41,694 +40,30 @@
if(var_name == "state")
change_state(var_value)
-// bluespace beacon from Eris
-/obj/structure/prop/bsb_off
- icon = 'icons/obj/structures/decor.dmi'
- icon_state = "bsb_off"
-/obj/structure/prop/bsb_on
- icon = 'icons/obj/structures/decor.dmi'
- icon_state = "bsb_on"
-// bluespace crystal from Eris
-/obj/structure/prop/bsc
- icon = 'icons/obj/structures/decor.dmi'
- icon_state = "bsc"
-/obj/structure/prop/bsc_dust
- icon = 'icons/obj/structures/decor.dmi'
- icon_state = "bsc_dust"
+//Misc stuff that fits no category
-// same as state names, from faction items on Eris
-/obj/structure/prop/biosyphon
- icon = 'icons/obj/structures/decor.dmi'
- icon_state = "biosyphon"
-/obj/structure/prop/von_krabin
- icon = 'icons/obj/structures/decor.dmi'
- icon_state = "von_krabin"
-/obj/structure/prop/last_shelter
- icon = 'icons/obj/structures/decor.dmi'
- icon_state = "last_shelter"
-/obj/structure/prop/complicator
- icon = 'icons/obj/structures/decor.dmi'
- icon_state = "complicator"
-/obj/structure/prop/random_radio
- icon = 'icons/obj/structures/decor.dmi'
- icon_state = "random_radio"
-/obj/structure/prop/nt_pedestal0_old
- icon = 'icons/obj/structures/decor.dmi'
- icon_state = "nt_pedestal0_old"
-/obj/structure/prop/nt_pedestal1_old
- icon = 'icons/obj/structures/decor.dmi'
- icon_state = "nt_pedestal1_old"
-
-// statues from Eris
-/obj/structure/prop/statue1
- icon = 'icons/obj/structures/decor.dmi'
- icon_state = "artwork_statue_1"
-/obj/structure/prop/statue2
- icon = 'icons/obj/structures/decor.dmi'
- icon_state = "artwork_statue_2"
-/obj/structure/prop/statue3
- icon = 'icons/obj/structures/decor.dmi'
- icon_state = "artwork_statue_3"
-/obj/structure/prop/statue4
- icon = 'icons/obj/structures/decor.dmi'
- icon_state = "artwork_statue_4"
-/obj/structure/prop/statue5
- icon = 'icons/obj/structures/decor.dmi'
- icon_state = "artwork_statue_5"
-/obj/structure/prop/statue6
- icon = 'icons/obj/structures/decor.dmi'
- icon_state = "artwork_statue_6"
-
-// ship mast from TGMC
-/obj/structure/prop/stump_plaque
- icon = 'icons/obj/structures/decor.dmi'
- icon_state = "stump"
-
-// vatgrowing thing from /tg/
-/obj/structure/prop/green_egg
- icon = 'icons/obj/structures/decor.dmi'
- icon_state = "gel_cocoon"
-
-// eye of the protector from Eris
-/obj/structure/prop/eotp
- icon = 'icons/obj/structures/decor32x64.dmi'
- icon_state = "eotp"
-
-// gravity generator from Eris
-/obj/structure/prop/gravygen
- icon = 'icons/obj/structures/decor64x64.dmi'
- icon_state = "bigdice"
+// ship memorial from TGMC
+/obj/structure/prop/memorial
+ name = "engraved wall"
+ desc = "A finely engraved list on dark stone."
+ icon = 'icons/obj/props/decor64x64.dmi'
+ icon_state = "ship_memorial"
bound_width = 64
- bound_height = 64
-
-// dna vault from /tg/
-/obj/structure/prop/dna_vault
- icon = 'icons/obj/structures/decor96x96.dmi'
- icon_state = "vault"
-
-// fences from TGMC
-// You'll need to 'create instances from icon_states' in an editor to use these well
-/obj/structure/prop/fence
- name = "fence"
- desc = "It's a fence! Not much else to say about it."
- icon = 'icons/obj/structures/decor_fences.dmi'
/**
- *
+ *
+ Notes on change_state
+ *
* tl;dr "You can varedit 'state' on these to the things in the comments below to get cool animations"
- *
+ *
* These items have some logic to handle some fun animations on them. Mappers can call the 'change_state(state)' proc
* while referring to the comments here for what states they can use. You'll notice some crazy overlay handling,
* and that's because I don't want to add any vars to these mappers think they can fiddle with, which requires
* more logic than I'm willing to do at the moment. So we get crazy cut/add operations instead.
- *
+ *
* There's also a VV helper so if you varedit 'state' to these during the game, you can get that to work.
- *
+ *
* Like, I don't want to add a state machine to decorative objects. You can if you want.
- *
+ *
*/
-
-/**
- * Possible 'state' options for change_state(state) are:
- * off: Looks boring and off
- * on: candles lit and stuff
- * no_cruciform: No cruciform (the little triangle thing) inserted
- * red_cruciform: Red light cruciform inserted
- * green_cruciform: Green light cruciform inserted
- * panel_open: The panel is open (wiring)
- * panel_closed: The panel is closed
- */
-// neotheology cruciform reader from Eris
-/obj/structure/prop/nt_reader
- icon = 'icons/obj/structures/decor.dmi'
- icon_state = "nt_reader_off"
-
-/obj/structure/prop/nt_reader/change_state(state)
- . = ..()
- switch(state)
- if("off")
- icon_state = "nt_reader_off"
- if("on")
- icon_state = "nt_reader_on"
- if("no_cruciform")
- cut_overlay("nt_reader_c_green")
- cut_overlay("nt_reader_c_red")
- if("red_cruciform")
- cut_overlay("nt_reader_c_green")
- cut_overlay("nt_reader_c_red")
- add_overlay("nt_reader_c_red")
- if("green_cruciform")
- cut_overlay("nt_reader_c_red")
- cut_overlay("nt_reader_c_green")
- add_overlay("nt_reader_c_green")
- if("panel_open")
- cut_overlay("nt_reader_panel")
- add_overlay("nt_reader_panel")
- if("panel_closed")
- cut_overlay("nt_reader_panel")
-
-/**
- * Possible 'state' options for change_state(state) are:
- * panel_open: The panel is opened
- * panel_closed: The panel is closed
- */
-// neotheology cloning biocan from Eris
-/obj/structure/prop/nt_biocan
- icon = 'icons/obj/structures/decor.dmi'
- icon_state = "nt_biocan"
-
-/obj/structure/prop/nt_biocan/change_state(state)
- . = ..()
- switch(state)
- if("panel_open")
- cut_overlay("nt_biocan_panel")
- add_overlay("nt_biocan_panel")
- if("panel_closed")
- cut_overlay("nt_biocan_panel")
-
-/**
- * Possible 'state' options for change_state(state) are:
- * blue, red, orange, yellow, green, purple: Set that color
- * damaged: add damage overlay
- * undamaged: remove damage overlay
- * broken: become damaged
- * plain: undamaged white version, otherwise use a color
- */
-// dominator console from /tg/
-/obj/structure/prop/dominator
- icon = 'icons/obj/structures/decor.dmi'
- icon_state = "dominator"
-
-/obj/structure/prop/dominator/change_state(state)
- . = ..()
- switch(state)
- if("blue")
- icon_state = "dominator-blue"
- if("red")
- icon_state = "dominator-red"
- if("orange")
- icon_state = "dominator-orange"
- if("yellow")
- icon_state = "dominator-yellow"
- if("green")
- icon_state = "dominator-green"
- if("purple")
- icon_state = "dominator-purple"
- if("damaged")
- add_overlay("dom_damage")
- if("undamaged")
- cut_overlay("dom_damage")
- if("broken")
- icon_state = "dominator-broken"
- if("plain")
- icon_state = "dominator"
-
-/obj/structure/prop/dominator/blue
- icon_state = "dominator-blue"
-/obj/structure/prop/dominator/red
- icon_state = "dominator-red"
-/obj/structure/prop/dominator/orange
- icon_state = "dominator-orange"
-/obj/structure/prop/dominator/yellow
- icon_state = "dominator-yellow"
-/obj/structure/prop/dominator/green
- icon_state = "dominator-green"
-/obj/structure/prop/dominator/purple
- icon_state = "dominator-purple"
-
-/**
- * Possible 'state' options for change_state(state) are:
- * off: Default, boring
- * on: Pumping or something
- */
-// some neotheology thing from Eris
-/obj/structure/prop/nt_solifier
- icon = 'icons/obj/structures/decor.dmi'
- icon_state = "nt_solidifier"
-
-/obj/structure/prop/nt_solifier/change_state(state)
- . = ..()
- switch(state)
- if("off")
- icon_state = "nt_solidifier"
- if("on")
- icon_state = "nt_solidifier_on"
-
-/obj/structure/prop/nt_solifier/starts_on
- icon_state = "nt_solidifier_on"
-
-/**
- * Possible 'state' options for change_state(state) are:
- * off: Boring, round
- * on: Spinny glowy
- */
-// conduit of soul from Eris
-/obj/structure/prop/conduit
- icon = 'icons/obj/structures/decor.dmi'
- icon_state = "conduit_off"
-
-/obj/structure/prop/conduit/change_state(state)
- . = ..()
- switch(state)
- if("on")
- icon_state = "conduit_spin"
- flick("conduit_starting", src)
- if("off")
- icon_state = "conduit_off"
- flick("conduit_stopping", src)
-
-/obj/structure/prop/conduit/starts_on
- icon_state = "conduit_spin"
-
-/**
- * Possible 'state' options for change_state(state) are:
- * on: Doing some kinda worky thing
- * off: Not doing much of anything
- * empty: No blue crystal thingy
- * loaded: off but without the animation
- */
-// some kinda NT thing from Eris
-/obj/structure/prop/core
- icon = 'icons/obj/structures/decor.dmi'
- icon_state = "core_inactive"
-
-/obj/structure/prop/core/change_state(state)
- . = ..()
- switch(state)
- if("on")
- icon_state = "core_active"
- flick("core_warmup", src)
- if("off")
- icon_state = "core_inactive"
- flick("core_shutdown", src)
- if("empty")
- icon_state = "core_empty"
- if("loaded")
- icon_state = "core_inactive"
-
-/obj/structure/prop/core/starts_on
- icon_state = "core_active"
-
-/**
- * Possible 'state' options for change_state(state) are:
- * down: In the ground, glowing
- * up: Out of the ground, open
- */
-// experimental science destructor from /tg/
-/obj/structure/prop/tube
- icon = 'icons/obj/structures/decor32x64.dmi'
- icon_state = "tube_open"
-
-/obj/structure/prop/tube/change_state(state)
- . = ..()
- switch(state)
- if("down")
- icon_state = "tube_on"
- flick("tube_down", src)
- if("up")
- icon_state = "tube_open"
- flick("tube_up", src)
-
-/obj/structure/prop/tube/starts_down
- icon_state = "tube_on"
-
-/**
- * Possible 'state' options for change_state(state) are:
- * off: Boring, static
- * on: Turny and blinky
- */
-// experimental science destructor from /tg/
-/obj/structure/prop/comm_tower
- icon = 'icons/obj/structures/decor.dmi'
- icon = 'icons/obj/structures/decor96x96.dmi'
- icon_state = "comm_tower"
-
-/obj/structure/prop/comm_tower/change_state(state)
- . = ..()
- switch(state)
- if("on")
- icon_state = "comm_tower_on"
- if("off")
- icon_state = "comm_tower"
-
-/obj/structure/prop/comm_tower/starts_on
- icon_state = "comm_tower_on"
-
-/**
- * Possible 'state' options for change_state(state) are:
- * off: Not doing much
- * on: Stamping mysterious substances
- */
-// sheetizer from /tg/
-/obj/structure/prop/stamper
- icon = 'icons/obj/structures/decor.dmi'
- icon_state = "stamper"
-
-/obj/structure/prop/stamper/change_state(state)
- . = ..()
- switch(state)
- if("off")
- cut_overlays()
- if("on")
- add_overlay("stamper_proc")
- add_overlay("stamper_but")
-
-/obj/structure/prop/stamper/starts_on
- icon_state = "stamper_on"
-
-/obj/structure/prop/stamper/starts_on/Initialize()
- add_overlay("stamper_proc")
- add_overlay("stamper_but")
-
-
-/**
- * Possible 'state' options for change_state(state) are:
- * whole: Not doing much
- * broken: Stamping mysterious substances
- */
-// alien autopsy thing from TGMC
-/obj/structure/prop/alien_tank
- icon = 'icons/obj/structures/decor.dmi'
- icon_state = "tank_larva"
-
-/obj/structure/prop/alien_tank/change_state(state)
- . = ..()
- switch(state)
- if("whole")
- icon_state = "tank_larva"
- if("broken")
- icon_state = "tank_broken"
-
-/obj/structure/prop/alien_tank/starts_broken
- icon_state = "tank_broken"
-
-/**
- * Possible 'state' options for change_state(state) are:
- * idle: The default look
- * active: Glowy lights underneath
- * panel_open: Opened panel (wiring)
- * panel_closed: Closed panel
- */
-// neotheology optable from Eris
-/obj/structure/prop/nt_optable
- icon = 'icons/obj/structures/decor.dmi'
- icon_state = "nt_optable-idle"
-
-/obj/structure/prop/nt_optable/change_state(state)
- . = ..()
- switch(state)
- if("idle")
- icon_state = "nt_optable-idle"
- if("active")
- icon_state = "nt_optable-active"
- if("panel_open")
- cut_overlay("nt_optable_panel")
- add_overlay("nt_optable_panel")
- if("panel_closed")
- cut_overlay("nt_optable_panel")
-
-/obj/structure/prop/nt_optable/starts_active
- icon_state = "nt_optable-active"
-
-/**
- * Possible 'state' options for change_state(state) are:
- * idle: The default look
- * active: Glowy lights in the center
- * panel_open: Opened panel (wiring)
- * panel_closed: Closed panel
- */
-// trade beacon from Eris
-/obj/structure/prop/tradebeacon
- icon = 'icons/obj/structures/decor.dmi'
- icon_state = "tradebeacon"
-
-/obj/structure/prop/tradebeacon/change_state(state)
- . = ..()
- switch(state)
- if("idle")
- icon_state = "tradebeacon"
- if("active")
- icon_state = "tradebeacon_active"
- if("panel_open")
- cut_overlay("tradebeacon_panel")
- add_overlay("tradebeacon_panel")
- if("panel_closed")
- cut_overlay("tradebeacon_panel")
-
-/obj/structure/prop/tradebeacon/starts_active
- icon_state = "tradebeacon_active"
-
-/**
- * Possible 'state' options for change_state(state) are:
- * idle: The default look
- * active: Glowy lights in the center
- * panel_open: Opened panel (wiring)
- * panel_closed: Closed panel
- */
-// another trade beacon from Eris
-/obj/structure/prop/tradebeacon2
- icon = 'icons/obj/structures/decor.dmi'
- icon_state = "tradebeacon"
-
-/obj/structure/prop/tradebeacon2/change_state(state)
- . = ..()
- switch(state)
- if("idle")
- icon_state = "tradebeacon_sending"
- if("active")
- icon_state = "tradebeacon_sending_active"
- if("panel_open")
- cut_overlay("tradebeacon_sending_panel")
- add_overlay("tradebeacon_sending_panel")
- if("panel_closed")
- cut_overlay("tradebeacon_sending_panel")
-
-/obj/structure/prop/tradebeacon2/starts_active
- icon_state = "tradebeacon_sending_active"
-
-/**
- * Possible 'state' options for change_state(state) are:
- * off: Non-spinny
- * on: Spinny and floaty
- */
-// neotheology decorative(?) obelisk from Eris
-/obj/structure/prop/nt_obelisk
- icon = 'icons/obj/structures/decor.dmi'
- icon_state = "nt_obelisk"
-
-/obj/structure/prop/nt_obelisk/change_state(state)
- . = ..()
- switch(state)
- if("off")
- icon_state = "nt_obelisk"
- if("on")
- icon_state = "nt_obelisk_on"
-
-/obj/structure/prop/nt_obelisk/starts_on
- icon_state = "nt_obelisk_on"
-
-/**
- * Possible 'state' options for change_state(state) are:
- * off: Inert
- * on: Hand destroying machinery
- */
-// 'sorter' from Eris
-/obj/structure/prop/sorter
- icon = 'icons/obj/structures/decor.dmi'
- icon_state = "sorter"
-
-/obj/structure/prop/sorter/change_state(state)
- . = ..()
- switch(state)
- if("off")
- icon_state = "sorter"
- if("on")
- icon_state = "sorter-process"
-
-/obj/structure/prop/sorter/starts_on
- icon_state = "sorter-process"
-
-/**
- * Possible 'state' options for change_state(state) are:
- * off: Inert
- * on: Hand destroying machinery
- */
-// 'smelter' from Eris
-/obj/structure/prop/smelter
- icon = 'icons/obj/structures/decor.dmi'
- icon_state = "smelter"
-
-/obj/structure/prop/smelter/change_state(state)
- . = ..()
- switch(state)
- if("off")
- icon_state = "smelter"
- if("on")
- icon_state = "smelter-process"
-
-/obj/structure/prop/smelter/starts_on
- icon_state = "smelter-process"
-
-/**
- * Possible 'state' options for change_state(state) are:
- * idle: Not doing anything, with yellow template exposed
- * work: busy doing work
- * pause: paused work
- */
-// cruciform forge from Eris
-/obj/structure/prop/nt_cruciforge
- icon = 'icons/obj/structures/decor.dmi'
- icon_state = "nt_cruciforge"
-
-/obj/structure/prop/nt_cruciforge/change_state(state)
- . = ..()
- switch(state)
- if("idle")
- icon_state = "nt_cruciforge"
- flick("nt_cruciforge_finish", src) // 8ds
- if("work")
- icon_state = "nt_cruciforge_work"
- flick("nt_cruciforge_start", src) // 8ds
- if("pause")
- icon_state = "nt_cruciforge_pause"
-
-/obj/structure/prop/nt_cruciforge/starts_working
- icon_state = "nt_cruciforge_work"
-
-/**
- * This one is a bit more fancy than others. Anything in the contents (PLEASE LIMIT TO ONE THING)
- * will show up inside it! Also if you map in an item on it, it will grab that at mapload and start
- * in the 'closed, full of fluid' state, so you can put a body on it or whatever.
- *
- * As an aghost you can also dragdrop something into it (you have to be ghosted next to it)
- *
- * Possible 'state' options for change_state(state) are:
- * open: Open, no fluid or anything. At the end the contents are ejected.
- * closed: Closed, full of liquid
- * panel_open: Shows panel
- * panel_closed: Unshows panel
- */
-// neotheology cloning pod from Eris
-/obj/structure/prop/nt_pod
- icon = 'icons/obj/structures/decor.dmi'
- icon = 'icons/obj/structures/decor32x64.dmi'
- icon_state = "nt_pod_mappreview"
- bound_height = 64
-
- var/obj/effect/overlay/vis/outside
- var/obj/effect/overlay/vis/door
- var/obj/effect/overlay/vis/fluid
-
- var/contents_vis_flags = NONE
- var/contents_original_pixel_y = 0
-
-/obj/structure/prop/nt_pod/Initialize(mapload)
- // Our non-map-preview state
- icon_state = "nt_pod"
-
- // Alpha mask to make sure things don't sneak out
- var/obj/effect/overlay/vis/mask = new
- mask.icon = icon
- mask.icon_state = "nt_pod_mask"
- mask.render_target = "*nt_podmask[REF(src)]"
- mask.vis_flags = VIS_INHERIT_ID
- vis_contents += mask
-
- outside = add_vis_overlay(icon, "nt_pod_over", ABOVE_MOB_LAYER, MOB_PLANE, unique = TRUE)
- door = add_vis_overlay(icon, "nothing", ABOVE_MOB_LAYER, MOB_PLANE, unique = TRUE)
- fluid = add_vis_overlay(icon, "nothing", ABOVE_MOB_LAYER, MOB_PLANE, unique = TRUE)
-
- // Gather up our friends
- if(mapload)
- var/atom/movable/AM = locate() in loc
- AM?.forceMove(src)
-
-/obj/structure/prop/nt_pod/Entered(atom/movable/mover)
- abduct(mover)
-
-/obj/structure/prop/nt_pod/proc/abduct(var/atom/movable/AM)
- // Save old settings
- contents_vis_flags = AM.vis_flags
- contents_original_pixel_y = AM.pixel_y
-
- // Arrange
- AM.add_filter("podmask", 1, alpha_mask_filter(render_source = "nt_podmask[REF(src)]", flags = MASK_INVERSE))
- AM.pixel_y = 12
- AM.vis_flags = VIS_INHERIT_ID|VIS_INHERIT_DIR
- vis_contents += AM
- if(ismob(AM))
- var/mob/M = AM
- buckle_mob(M, TRUE, FALSE)
-
- // TRAP THEM
- change_state("closed")
-
-/obj/structure/prop/nt_pod/proc/unduct(var/atom/movable/AM)
- // Geddout
- vis_contents -= AM
- if(ismob(AM))
- var/mob/M = AM
- unbuckle_mob(M, TRUE)
- // Cleanup
- AM.remove_filter("podmask")
- AM.forceMove(drop_location())
- AM.vis_flags = contents_vis_flags
- AM.pixel_y = contents_original_pixel_y
-
-/obj/structure/prop/nt_pod/MouseDrop_T(var/atom/movable/AM, var/mob/user)
- if(contents.len)
- return
- if(!ismovable(AM))
- return
- if(!user.client?.holder)
- return
-
- AM.forceMove(src)
-
-/obj/structure/prop/nt_pod/change_state(state)
- . = ..()
- switch(state)
- if("open")
- cut_overlay("nt_pod_top_on")
- cut_overlay("nt_pod_under")
-
- // Fluid drains
- fluid.icon_state = "nothing"
- flick("nt_pod_emptying", fluid) // 8ds
- sleep(8)
-
- // Door opens
- door.icon_state = "nothing"
- flick("nt_pod_opening", door) // 9ds
- sleep(9)
-
- // GET OUT
- outside.layer = BELOW_MOB_LAYER
- if(contents.len)
- for(var/atom/movable/AM as anything in contents)
- unduct(AM)
-
- if("closed")
- outside.layer = ABOVE_MOB_LAYER
- cut_overlay("nt_pod_top_on")
- add_overlay("nt_pod_top_on")
- add_overlay("nt_pod_under")
-
- // Door closes
- door.icon_state = "nt_pod_glass"
- flick("nt_pod_closing", door) // 9ds
- sleep(9)
- // Fluid fills
- fluid.icon_state = "nt_pod_liquid"
- flick("nt_pod_filling", fluid) // 8ds
-
- if("panel_open")
- cut_overlay("nt_pod_panel")
- add_overlay("nt_pod_panel")
- if("panel_closed")
- cut_overlay("nt_pod_panel")
-
-/**
- * Possible 'state' options for change_state(state) are:
- */
\ No newline at end of file
diff --git a/code/game/objects/structures/props/rocks.dm b/code/game/objects/structures/props/rocks.dm
index 5d343c0744..82a4696887 100644
--- a/code/game/objects/structures/props/rocks.dm
+++ b/code/game/objects/structures/props/rocks.dm
@@ -38,4 +38,15 @@
density = FALSE
/obj/structure/prop/rock/small/wateralt
- icon_state = "waterrocks2"
\ No newline at end of file
+ icon_state = "waterrocks2"
+
+// bluespace crystal from Eris
+/obj/structure/prop/rock/crystal
+ name = "crystal"
+ icon = 'icons/obj/props/decor.dmi'
+ icon_state = "bsc"
+
+/obj/structure/prop/rock/crystal_dust
+ name = "crystal dust"
+ icon = 'icons/obj/props/decor.dmi'
+ icon_state = "bsc_dust"
\ No newline at end of file
diff --git a/code/game/objects/structures/props/statue.dm b/code/game/objects/structures/props/statue.dm
new file mode 100644
index 0000000000..1fe74ffba0
--- /dev/null
+++ b/code/game/objects/structures/props/statue.dm
@@ -0,0 +1,65 @@
+//Eris statues
+
+/obj/structure/prop/statue
+ name = "statue"
+ desc = "It's art!"
+ icon = 'icons/obj/props/decor.dmi'
+ icon_state = "artwork_statue"
+
+/obj/structure/prop/statue/statue1
+ icon_state = "artwork_statue_1"
+
+/obj/structure/prop/statue/statue2
+ icon_state = "artwork_statue_2"
+
+/obj/structure/prop/statue/statue3
+ icon_state = "artwork_statue_3"
+
+/obj/structure/prop/statue/statue4
+ icon_state = "artwork_statue_4"
+
+/obj/structure/prop/statue/statue5
+ icon_state = "artwork_statue_5"
+
+//TGMC Ship Mast
+
+/obj/structure/prop/statue/stump_plaque
+ name = "commemorative stump"
+ desc = "A wooden stump adorned with a little plaque."
+ icon = 'icons/obj/props/decor.dmi'
+ icon_state = "stump"
+
+//World Server statues
+
+/obj/structure/prop/statue
+ name = "statue"
+ desc = "A statue."
+ icon = 'icons/obj/props/decor32x64.dmi'
+ icon_state = "venus"
+
+/obj/structure/prop/statue/lion
+ icon_state = "lion"
+
+/obj/structure/prop/statue/angel
+ icon = 'icons/obj/props/decor.dmi'
+ icon_state = "angel"
+
+/obj/structure/prop/statue/phoron
+ name = "phoronic cascade"
+ desc = "A sculpture made of pure phoron. It is covered in a lacquer that prevents erosion and renders it fireproof. It's safe. Probably."
+ icon_state = "phoronic"
+ layer = ABOVE_WINDOW_LAYER
+ interaction_message = "Cool to touch and unbelievable smooth. You can almost see your reflection in it."
+
+/obj/structure/prop/statue/phoron/New()
+ set_light(2, 3, "#cc66ff")
+
+/obj/structure/prop/statue/pillar
+ name = "pillar"
+ desc = "A pillar."
+ icon_state = "pillar"
+
+/obj/structure/prop/statue/pillar/dark
+ name = "pillar"
+ desc = "A dark pillar."
+ icon_state = "dark_pillar"
\ No newline at end of file
diff --git a/code/game/objects/structures/props/warfare.dm b/code/game/objects/structures/props/warfare.dm
new file mode 100644
index 0000000000..04a903c15c
--- /dev/null
+++ b/code/game/objects/structures/props/warfare.dm
@@ -0,0 +1,167 @@
+/obj/structure/prop/war
+ name = "military hardware"
+ desc = "What is it good for?"
+ icon = 'icons/obj/props/decor.dmi'
+
+// warheads from TGMC
+/obj/structure/prop/war/warhead1
+ name = "nuclear warhead"
+ icon_state = "ob_warhead_1"
+
+/obj/structure/prop/war/warhead2
+ name = "incindiary warhead"
+ icon_state = "ob_warhead_2"
+
+/obj/structure/prop/war/warhead3
+ name = "bluespace warhead"
+ icon_state = "ob_warhead_3"
+
+/obj/structure/prop/war/warhead4
+ name = "phoron warhead"
+ icon_state = "ob_warhead_4"
+
+// minirocket pod from TGMC
+/obj/structure/prop/war/minirocket_pod
+ name = "rocket pod"
+ icon_state = "minirocket_pod"
+
+// sentry console from TGMC
+/obj/structure/prop/war/sentry_control
+ name = "portable sentry gun"
+ desc = "Needs a dispenser."
+ icon_state = "tgmc_sentry"
+
+// various weapons from TGMC
+/obj/structure/prop/war/tgmc_missile
+ name = "missile"
+ desc = "It seems to be some sort of spacecraft-tier ordinance."
+ icon = 'icons/obj/props/decor64x64.dmi'
+ icon_state = "single"
+ bound_width = 64
+
+/obj/structure/prop/war/tgmc_missile/double
+ icon_state = "widowmaker"
+
+/obj/structure/prop/war/tgmc_missile/banshee
+ icon_state = "banshee"
+
+/obj/structure/prop/war/tgmc_missile/keeper
+ icon_state = "keeper"
+
+/obj/structure/prop/war/tgmc_missile/fatty
+ icon_state = "fatty"
+
+/obj/structure/prop/war/tgmc_missile/napalm
+ icon_state = "napalm"
+
+/**
+ * Possible 'state' options for change_state(state) are:
+ * empty, single, banshee, keeper, fatty, napalm
+ */
+// ship weapons from TGMC
+/obj/structure/prop/war/tgmc_missile_rack
+ name = "missile launcher"
+ desc = "Some sort of spacecraft-tier missile weapon."
+ icon = 'icons/obj/props/decor64x64.dmi'
+ icon_state = "rocket_pod"
+ bound_height = 64
+
+/obj/structure/prop/war/tgmc_missile_rack/change_state(state)
+ . = ..()
+ switch(state)
+ if("empty")
+ icon_state = "rocket_pod"
+ if("single")
+ icon_state = "rocket_pod_loaded"
+ if("banshee")
+ icon_state = "rocket_pod_loadedb"
+ if("keeper")
+ icon_state = "rocket_pod_loadedk"
+ if("fatty")
+ icon_state = "rocket_pod_loadedf"
+ if("napalm")
+ icon_state = "rocket_pod_loadedn"
+
+/obj/structure/prop/war/tgmc_missile_rack/single
+ icon_state = "rocket_pod_loaded"
+/obj/structure/prop/war/tgmc_missile_rack/banshee
+ icon_state = "rocket_pod_loadedb"
+/obj/structure/prop/war/tgmc_missile_rack/keeper
+ icon_state = "rocket_pod_loadedk"
+/obj/structure/prop/war/tgmc_missile_rack/fatty
+ icon_state = "rocket_pod_loadedf"
+/obj/structure/prop/war/tgmc_missile_rack/napalm
+ icon_state = "rocket_pod_loadedn"
+
+/**
+ * Possible 'state' options for change_state(state) are:
+ * empty, loaded
+ */
+// ship weapons from TGMC
+/obj/structure/prop/war/tgmc_minirockets
+ name = "rocket pod"
+ desc = "Some sort of spacecraft-tier rocket weapon."
+ icon = 'icons/obj/props/decor64x64.dmi'
+ icon_state = "minirocket_pod"
+ bound_height = 64
+
+/obj/structure/prop/war/tgmc_minirockets/change_state(state)
+ . = ..()
+ switch(state)
+ if("empty")
+ icon_state = "minirocket_pod"
+ if("loaded")
+ icon_state = "minirocket_pod_loaded"
+
+/obj/structure/prop/war/tgmc_minirockets/loaded
+ icon_state = "minirocket_pod_loaded"
+
+/**
+ * Possible 'state' options for change_state(state) are:
+ * empty, loaded
+ */
+// ship weapons from TGMC
+/obj/structure/prop/war/tgmc_laser
+ name = "laser cannon"
+ desc = "Some sort of spacecraft-tier energy weapon."
+ icon = 'icons/obj/props/decor64x64.dmi'
+ icon_state = "laser_beam"
+ bound_height = 64
+
+/obj/structure/prop/war/tgmc_laser/change_state(state)
+ . = ..()
+ switch(state)
+ if("empty")
+ icon_state = "laser_beam"
+ if("loaded")
+ icon_state = "laser_beam_loaded"
+
+/obj/structure/prop/war/tgmc_laser/loaded
+ icon_state = "laser_beam_loaded"
+
+/**
+ * Possible 'state' options for change_state(state) are:
+ * empty, loaded, loadedempty
+ */
+// ship weapons from TGMC
+/obj/structure/prop/war/tgmc_30mm
+ name = "30mm cannon"
+ desc = "Some sort of spacecraft-tier rotary cannon weapon."
+ icon = 'icons/obj/props/decor64x64.dmi'
+ icon_state = "30mm_cannon"
+ bound_height = 64
+
+/obj/structure/prop/war/tgmc_30mm/change_state(state)
+ . = ..()
+ switch(state)
+ if("empty")
+ icon_state = "30mm_cannon"
+ if("loaded")
+ icon_state = "30mm_cannon_loaded1"
+ if("loadedempty")
+ icon_state = "30mm_cannon_loaded0"
+
+/obj/structure/prop/war/tgmc_30mm/loaded
+ icon_state = "30mm_cannon_loaded1"
+/obj/structure/prop/war/tgmc_30mm/loadedempty
+ icon_state = "30mm_cannon_loaded0"
\ No newline at end of file
diff --git a/code/game/objects/structures/stasis_cage.dm b/code/game/objects/structures/stasis_cage.dm
index b9cae77fa3..b0c9034014 100644
--- a/code/game/objects/structures/stasis_cage.dm
+++ b/code/game/objects/structures/stasis_cage.dm
@@ -4,6 +4,7 @@
icon = 'icons/obj/storage_vr.dmi' //VOREStation Edit
icon_state = "critteropen"
density = TRUE
+ unacidable = TRUE
var/mob/living/simple_mob/contained
diff --git a/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm b/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm
index 697e8cffbc..c08a9d1951 100644
--- a/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm
+++ b/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm
@@ -6,6 +6,7 @@
icon = 'icons/mob/alien.dmi'
icon_state = "nest"
var/health = 100
+ unacidable = TRUE
/obj/structure/bed/nest/update_icon()
return
diff --git a/code/game/shuttle_engines.dm b/code/game/shuttle_engines.dm
index 9217d132bb..e68b33089a 100644
--- a/code/game/shuttle_engines.dm
+++ b/code/game/shuttle_engines.dm
@@ -1,6 +1,7 @@
/obj/structure/shuttle
name = "shuttle"
icon = 'icons/turf/shuttle_parts.dmi'
+ unacidable = TRUE
/obj/structure/shuttle/window
name = "shuttle window"
diff --git a/code/game/turfs/flooring/flooring.dm b/code/game/turfs/flooring/flooring.dm
index c5b3de8eda..d7e8713edd 100644
--- a/code/game/turfs/flooring/flooring.dm
+++ b/code/game/turfs/flooring/flooring.dm
@@ -213,7 +213,7 @@ var/list/flooring_types
desc = "Gritty and unpleasant."
icon = 'icons/turf/flooring/asteroid.dmi'
icon_base = "asteroid"
- flags = TURF_REMOVE_SHOVEL
+ flags = TURF_REMOVE_SHOVEL | TURF_ACID_IMMUNE
build_type = null
footstep_sounds = list("human" = list(
'sound/effects/footstep/asteroid1.ogg',
@@ -554,7 +554,7 @@ var/list/flooring_types
icon = 'icons/turf/outdoors.dmi'
icon_base = "lava"
is_plating = TRUE
- flags = 0
+ flags = TURF_ACID_IMMUNE
footstep_sounds = list("human" = list(
'sound/effects/footstep/lava1.ogg',
'sound/effects/footstep/lava2.ogg',
diff --git a/code/game/turfs/simulated/floor_types.dm b/code/game/turfs/simulated/floor_types.dm
index 71c25b0755..486e215325 100644
--- a/code/game/turfs/simulated/floor_types.dm
+++ b/code/game/turfs/simulated/floor_types.dm
@@ -76,6 +76,7 @@
icon = 'icons/turf/shuttle_white.dmi'
thermal_conductivity = 0.05
heat_capacity = 0
+ flags = TURF_ACID_IMMUNE
var/obj/landed_holder/landed_holder
var/interior_corner = 0
diff --git a/code/game/turfs/simulated/lava.dm b/code/game/turfs/simulated/lava.dm
index e44ac49a66..f7d0644819 100644
--- a/code/game/turfs/simulated/lava.dm
+++ b/code/game/turfs/simulated/lava.dm
@@ -15,6 +15,7 @@
can_build_into_floor = TRUE
can_dirty = FALSE
initial_flooring = /decl/flooring/lava // Defining this in case someone DOES step on lava and survive. Somehow.
+ flags = TURF_ACID_IMMUNE
/turf/simulated/floor/lava/outdoors
outdoors = OUTDOORS_YES
diff --git a/code/game/turfs/simulated/water.dm b/code/game/turfs/simulated/water.dm
index d1f0dd37dd..e986e085a5 100644
--- a/code/game/turfs/simulated/water.dm
+++ b/code/game/turfs/simulated/water.dm
@@ -9,6 +9,7 @@
edge_blending_priority = -1
movement_cost = 4
outdoors = OUTDOORS_YES
+ flags = TURF_ACID_IMMUNE
layer = WATER_FLOOR_LAYER
diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm
index aa8d775b9b..4986701fcc 100644
--- a/code/game/turfs/space/space.dm
+++ b/code/game/turfs/space/space.dm
@@ -4,7 +4,7 @@
icon_state = "default"
dynamic_lighting = 0
plane = SPACE_PLANE
-
+ flags = TURF_ACID_IMMUNE
temperature = T20C
thermal_conductivity = OPEN_HEAT_TRANSFER_COEFFICIENT
can_build_into_floor = TRUE
diff --git a/code/game/turfs/unsimulated.dm b/code/game/turfs/unsimulated.dm
index 39c217a006..0e8c5c98b6 100644
--- a/code/game/turfs/unsimulated.dm
+++ b/code/game/turfs/unsimulated.dm
@@ -3,6 +3,7 @@
oxygen = MOLES_O2STANDARD
nitrogen = MOLES_N2STANDARD
var/skip_init = TRUE // Don't call down the chain, apparently for performance when loading maps at runtime.
+ flags = TURF_ACID_IMMUNE
/turf/unsimulated/Initialize(mapload)
if(skip_init)
diff --git a/code/modules/awaymissions/gateway.dm b/code/modules/awaymissions/gateway.dm
index 9e8967732e..9a4fd1028e 100644
--- a/code/modules/awaymissions/gateway.dm
+++ b/code/modules/awaymissions/gateway.dm
@@ -5,6 +5,7 @@
icon_state = "off"
density = TRUE
anchored = TRUE
+ unacidable = TRUE
var/active = 0
diff --git a/code/modules/client/preference_setup/global/setting_datums.dm b/code/modules/client/preference_setup/global/setting_datums.dm
index 7138d28626..a0c91e60d6 100644
--- a/code/modules/client/preference_setup/global/setting_datums.dm
+++ b/code/modules/client/preference_setup/global/setting_datums.dm
@@ -312,13 +312,13 @@ var/list/_client_preferences_by_type
key = "RUNECHAT_BORDER"
enabled_description = "Show"
disabled_description = "Hide"
- enabled_by_default = FALSE
+ enabled_by_default = TRUE
/datum/client_preference/runechat_long_messages
description = "Runechat Message Length"
key = "RUNECHAT_LONG"
- enabled_description = "ERP KING"
- disabled_description = "Normie"
+ enabled_description = "Long"
+ disabled_description = "Short"
enabled_by_default = FALSE
/datum/client_preference/status_indicators/toggled(mob/preference_mob, enabled)
diff --git a/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm b/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm
index ca36bb5b1d..cdb7c337c9 100644
--- a/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm
@@ -695,7 +695,7 @@
path = /obj/item/clothing/suit/storage/hooded/wintercoat/security/fluff/evelyn/
display_name = "warden's navy winter coat"
ckeywhitelist = list("pandora029")
- character_name = list("Evelyn Tareen")
+ character_name = list("Evelyn Tareen", "Velyn Tareen")
/datum/gear/fluff/lily_medal
path = /obj/item/clothing/accessory/medal/silver/unity
@@ -762,7 +762,7 @@
display_name = "LUNA's Distinguished Conduct Medal"
ckeywhitelist = list("residentcody")
character_name = list("LUNA")
-
+
/datum/gear/fluff/pathfinder_id
path = /obj/item/weapon/card/id/event/polymorphic/itg
display_name = "Pathfinder's ITG ID"
diff --git a/code/modules/client/preference_setup/loadout/loadout_xeno.dm b/code/modules/client/preference_setup/loadout/loadout_xeno.dm
index d402fd4c4e..fb5825b743 100644
--- a/code/modules/client/preference_setup/loadout/loadout_xeno.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_xeno.dm
@@ -677,3 +677,14 @@
whitelisted = SPECIES_TESHARI
sort_category = "Xenowear"
cost = 4
+
+/datum/gear/shoes/teshwrap
+ display_name = "Teshari legwraps"
+ path = /obj/item/clothing/shoes/footwraps/teshari
+ sort_category = "Xenowear"
+ whitelisted = SPECIES_TESHARI
+ cost = 1
+
+/datum/gear/shoes/teshwrap/New()
+ ..()
+ gear_tweaks += gear_tweak_free_color_choice
diff --git a/code/modules/clothing/shoes/xeno/teshari.dm b/code/modules/clothing/shoes/xeno/teshari.dm
new file mode 100644
index 0000000000..47fdd90aa8
--- /dev/null
+++ b/code/modules/clothing/shoes/xeno/teshari.dm
@@ -0,0 +1,8 @@
+/obj/item/clothing/shoes/footwraps/teshari
+ name = "Teshari legwraps"
+ desc = "Traditional Teshari footwear, consisting of a cloth wrapping to cover the foot and lower leg."
+ icon = 'icons/inventory/feet/item_teshari.dmi'
+ icon_state = "teshwrap"
+ item_state = "teshwrap"
+ shoes_under_pants = 1 //these are thin and wrapped around the leg, clothing would go over it
+ species_restricted = list(SPECIES_TESHARI)
\ No newline at end of file
diff --git a/code/modules/clothing/suits/hooded.dm b/code/modules/clothing/suits/hooded.dm
index 6ee01a78f1..1a250bc683 100644
--- a/code/modules/clothing/suits/hooded.dm
+++ b/code/modules/clothing/suits/hooded.dm
@@ -254,7 +254,7 @@
hoodtype = /obj/item/clothing/head/hood/winter/engineering/atmos
/obj/item/clothing/suit/storage/hooded/wintercoat/engineering/ce
- name = "atmospherics winter coat"
+ name = "chief engineer's winter coat"
desc = "A heavy jacket made from 'synthetic' animal furs. It seems to have burn marks on the inside from a phoron fire."
icon_state = "coatce"
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 20)
diff --git a/code/modules/economy/vending.dm b/code/modules/economy/vending.dm
index bc8130d0e0..ddd4520bdf 100644
--- a/code/modules/economy/vending.dm
+++ b/code/modules/economy/vending.dm
@@ -13,6 +13,7 @@
icon_state = "generic"
anchored = TRUE
density = TRUE
+ unacidable = TRUE
clicksound = "button"
// Power
diff --git a/code/modules/economy/vending_machines.dm b/code/modules/economy/vending_machines.dm
index 17ca55d67f..ad3f52d488 100644
--- a/code/modules/economy/vending_machines.dm
+++ b/code/modules/economy/vending_machines.dm
@@ -1153,6 +1153,7 @@
/obj/item/clothing/head/that = 5,
/obj/item/clothing/head/flatcap = 5,
/obj/item/clothing/shoes/brown = 5,
+ /obj/item/clothing/suit/storage/hooded/wintercoat/bar = 5,
/obj/item/clothing/accessory/permit/gun/bar = 1
)
req_log_access = access_hop
@@ -1225,6 +1226,7 @@
/obj/item/clothing/suit/storage/toggle/labcoat/modern = 5,
/obj/item/clothing/mask/surgical = 5,
/obj/item/clothing/suit/storage/hooded/wintercoat/medical = 5,
+ /obj/item/clothing/suit/storage/hooded/wintercoat/medical/alt = 5,
/obj/item/clothing/shoes/boots/winter/medical = 5
)
req_log_access = access_hop
@@ -1241,6 +1243,7 @@
/obj/item/clothing/under/rank/chemist/skirt = 5,
/obj/item/clothing/shoes/white = 5,
/obj/item/clothing/suit/storage/toggle/labcoat/chemist = 5,
+ /obj/item/clothing/suit/storage/hooded/wintercoat/medical/chemist = 5,
/obj/item/weapon/storage/backpack/chemistry = 5,
/obj/item/weapon/storage/backpack/satchel/chem = 5,
/obj/item/weapon/storage/bag/chemistry = 5
@@ -1276,6 +1279,7 @@
/obj/item/clothing/under/rank/virologist/skirt = 5,
/obj/item/clothing/shoes/white = 5,
/obj/item/clothing/suit/storage/toggle/labcoat/virologist = 5,
+ /obj/item/clothing/suit/storage/hooded/wintercoat/medical/viro = 5,
/obj/item/clothing/mask/surgical = 5,
/obj/item/weapon/storage/backpack/virology = 5,
/obj/item/weapon/storage/backpack/satchel/vir = 5
@@ -1314,6 +1318,7 @@
products = list(
/obj/item/clothing/under/rank/roboticist = 5,
/obj/item/clothing/suit/storage/toggle/labcoat/roboticist = 5,
+ /obj/item/clothing/suit/storage/hooded/wintercoat/science/robotics = 5,
/obj/item/clothing/shoes/black = 5,
/obj/item/clothing/gloves/black = 5,
/obj/item/weapon/storage/backpack/toxins = 5,
@@ -1345,7 +1350,9 @@
/obj/item/weapon/storage/fancy/whitecandle_box = 5,
/obj/item/weapon/storage/fancy/blackcandle_box = 5,
/obj/item/godfig = 5,
- /obj/item/weapon/deck/tarot = 5
+ /obj/item/weapon/deck/tarot = 5,
+ /obj/item/clothing/suit/storage/hooded/wintercoat/ratvar = 1,
+ /obj/item/clothing/suit/storage/hooded/wintercoat/narsie = 1
)
req_log_access = access_hop
has_logs = 1
@@ -1455,6 +1462,7 @@
/obj/item/device/radio/headset/headset_service = 5,
/obj/item/clothing/under/rank/janitor = 5,
/obj/item/clothing/under/dress/maid/janitor = 5,
+ /obj/item/clothing/suit/storage/hooded/wintercoat/janitor = 5,
/obj/item/clothing/gloves/black = 5,
/obj/item/weapon/storage/belt/janitor = 5,
/obj/item/clothing/shoes/galoshes = 5,
@@ -1517,4 +1525,4 @@
/obj/item/clothing/suit/storage/forensics/red = 5
)
req_log_access = access_hop
- has_logs = 1
\ No newline at end of file
+ has_logs = 1
diff --git a/code/modules/economy/vending_machines_vr.dm b/code/modules/economy/vending_machines_vr.dm
index c8b6f036fe..d430215a1c 100644
--- a/code/modules/economy/vending_machines_vr.dm
+++ b/code/modules/economy/vending_machines_vr.dm
@@ -1243,6 +1243,7 @@
/obj/item/clothing/suit/varsity/blue = 5,
/obj/item/clothing/suit/varsity/brown = 5,
/obj/item/clothing/suit/storage/hooded/wintercoat = 5,
+ /obj/item/clothing/suit/storage/hooded/wintercoat/aformal = 5,
/obj/item/clothing/suit/storage/teshari/cloak/standard/white_grey = 5)
prices = list(/obj/item/clothing/suit/storage/apron = 100,
/obj/item/clothing/suit/storage/flannel/aqua = 100,
@@ -1329,8 +1330,10 @@
/obj/item/clothing/suit/varsity/blue = 100,
/obj/item/clothing/suit/varsity/brown = 100,
/obj/item/clothing/suit/storage/hooded/wintercoat = 100,
+ /obj/item/clothing/suit/storage/hooded/wintercoat/aformal = 100,
/obj/item/clothing/suit/storage/teshari/cloak/standard/white_grey = 100)
- premium = list(/obj/item/clothing/suit/imperium_monk = 3)
+ premium = list(/obj/item/clothing/suit/imperium_monk = 3,
+ /obj/item/clothing/suit/storage/hooded/wintercoat/cosmic = 1)
contraband = list(/obj/item/toy/katana = 1)
/obj/machinery/vending/loadout/costume
@@ -3262,61 +3265,6 @@
/obj/item/weapon/reagent_containers/food/snacks/xenomeat/spidermeat = 10)
vend_delay = 15
-/obj/machinery/seed_storage/brig
- name = "Prisoners' food seed storage"
- starting_seeds = list(
- /obj/item/seeds/appleseed = 3,
- /obj/item/seeds/bananaseed = 3,
- /obj/item/seeds/berryseed = 3,
- /obj/item/seeds/cabbageseed = 3,
- /obj/item/seeds/carrotseed = 3,
- /obj/item/seeds/celery = 3,
- /obj/item/seeds/chantermycelium = 3,
- /obj/item/seeds/cherryseed = 3,
- /obj/item/seeds/chiliseed = 3,
- /obj/item/seeds/cocoapodseed = 3,
- /obj/item/seeds/cornseed = 3,
- /obj/item/seeds/durian = 3,
- /obj/item/seeds/eggplantseed = 3,
- /obj/item/seeds/grapeseed = 3,
- /obj/item/seeds/grassseed = 3,
- /obj/item/seeds/replicapod = 3,
- /obj/item/seeds/lavenderseed = 3,
- /obj/item/seeds/lemonseed = 3,
- /obj/item/seeds/lettuce = 3,
- /obj/item/seeds/limeseed = 3,
- /obj/item/seeds/mtearseed = 2,
- /obj/item/seeds/orangeseed = 3,
- /obj/item/seeds/onionseed = 3,
- /obj/item/seeds/peanutseed = 3,
- /obj/item/seeds/plumpmycelium = 3,
- /obj/item/seeds/poppyseed = 3,
- /obj/item/seeds/potatoseed = 3,
- /obj/item/seeds/pumpkinseed = 3,
- /obj/item/seeds/rhubarb = 3,
- /obj/item/seeds/riceseed = 3,
- /obj/item/seeds/rose = 3,
- /obj/item/seeds/soyaseed = 3,
- /obj/item/seeds/pineapple = 3,
- /obj/item/seeds/sugarcaneseed = 3,
- /obj/item/seeds/sunflowerseed = 3,
- /obj/item/seeds/shandseed = 2,
- /obj/item/seeds/tobaccoseed = 3,
- /obj/item/seeds/tomatoseed = 3,
- /obj/item/seeds/towermycelium = 3,
- /obj/item/seeds/vanilla = 3,
- /obj/item/seeds/watermelonseed = 3,
- /obj/item/seeds/wheatseed = 3,
- /obj/item/seeds/whitebeetseed = 3,
- /obj/item/seeds/wabback = 2)
-
-/obj/machinery/vending/hydronutrients/brig
- name = "Brig NutriMax"
- desc = "A plant nutrients vendor. Seems some items aren't included."
- products = list(/obj/item/weapon/reagent_containers/glass/bottle/eznutrient = 6,/obj/item/weapon/reagent_containers/glass/bottle/left4zed = 4,/obj/item/weapon/reagent_containers/glass/bottle/robustharvest = 3,/obj/item/weapon/plantspray/pests = 20,
- /obj/item/weapon/reagent_containers/glass/beaker = 4,/obj/item/weapon/storage/bag/plants = 5)
- premium = list(/obj/item/weapon/reagent_containers/glass/bottle/ammonia = 10,/obj/item/weapon/reagent_containers/glass/bottle/diethylamine = 5)
-
/obj/machinery/vending/emergencyfood
name = "Food Cube Dispenser"
desc = "An ominous machine dispensing food cubes. It will keep you fed, but at what cost?"
@@ -3331,9 +3279,6 @@
products = list(/obj/item/weapon/storage/box/wings/tray = 40)
contraband = list(/obj/item/weapon/storage/box/wings/tray = 20)
-/obj/machinery/vending/cola
- icon_state = "Soda_Machine"
-
/obj/machinery/vending/cola/soft
icon = 'icons/obj/vending_vr.dmi'
icon_state = "Cola_Machine"
diff --git a/code/modules/food/kitchen/gibber.dm b/code/modules/food/kitchen/gibber.dm
index 737072ba55..d348715bc6 100644
--- a/code/modules/food/kitchen/gibber.dm
+++ b/code/modules/food/kitchen/gibber.dm
@@ -6,6 +6,7 @@
icon_state = "grinder"
density = TRUE
anchored = TRUE
+ unacidable = TRUE
req_access = list(access_kitchen,access_morgue)
var/operating = 0 //Is it on?
diff --git a/code/modules/food/kitchen/microwave.dm b/code/modules/food/kitchen/microwave.dm
index f7c7194e9f..510e2b617a 100644
--- a/code/modules/food/kitchen/microwave.dm
+++ b/code/modules/food/kitchen/microwave.dm
@@ -1,618 +1,616 @@
-/obj/machinery/microwave
- name = "Microwave"
- desc = "Studies are inconclusive on whether pressing your face against the glass is harmful."
- icon = 'icons/obj/kitchen.dmi'
- icon_state = "mw"
- layer = 2.9
- density = TRUE
- anchored = TRUE
- use_power = USE_POWER_IDLE
- idle_power_usage = 5
- active_power_usage = 2000
- clicksound = "button"
- clickvol = "30"
- flags = OPENCONTAINER | NOREACT
- circuit = /obj/item/weapon/circuitboard/microwave
- var/operating = 0 // Is it on?
- var/dirty = 0 // = {0..100} Does it need cleaning?
- var/broken = 0 // ={0,1,2} How broken is it???
- var/circuit_item_capacity = 1 //how many items does the circuit add to max number of items
- var/item_level = 0 // items microwave can handle, 0 foodstuff, 1 materials
- var/global/list/acceptable_items // List of the items you can put in
- var/global/list/available_recipes // List of the recipes you can use
- var/global/list/acceptable_reagents // List of the reagents you can put in
-
- var/global/max_n_of_items = 20
- var/appliancetype = MICROWAVE
- var/datum/looping_sound/microwave/soundloop
-
-
-//see code/modules/food/recipes_microwave.dm for recipes
-
-/*******************
-* Initialising
-********************/
-
-/obj/machinery/microwave/Initialize()
- . = ..()
-
- reagents = new/datum/reagents(100)
- reagents.my_atom = src
-
- default_apply_parts()
-
- if(!available_recipes)
- available_recipes = new
- for(var/datum/recipe/typepath as anything in subtypesof(/datum/recipe))
- if((initial(typepath.appliance) & appliancetype))
- available_recipes += new typepath
-
- acceptable_items = new
- acceptable_reagents = new
- for (var/datum/recipe/recipe in available_recipes)
- for (var/item in recipe.items)
- acceptable_items |= item
- for (var/reagent in recipe.reagents)
- acceptable_reagents |= reagent
- // This will do until I can think of a fun recipe to use dionaea in -
- // will also allow anything using the holder item to be microwaved into
- // impure carbon. ~Z
- acceptable_items |= /obj/item/weapon/holder
- acceptable_items |= /obj/item/weapon/reagent_containers/food/snacks/grown
- acceptable_items |= /obj/item/device/soulstone
- acceptable_items |= /obj/item/weapon/fuel_assembly/supermatter
-
- soundloop = new(list(src), FALSE)
-
-/obj/machinery/microwave/Destroy()
- QDEL_NULL(soundloop)
- return ..()
-
-/*******************
-* Item Adding
-********************/
-
-/obj/machinery/microwave/attackby(var/obj/item/O as obj, var/mob/user as mob)
- if(src.broken > 0)
- if(src.broken == 2 && O.is_screwdriver()) // If it's broken and they're using a screwdriver
- user.visible_message( \
- "\The [user] starts to fix part of the microwave.", \
- "You start to fix part of the microwave." \
- )
- playsound(src, O.usesound, 50, 1)
- if (do_after(user,20 * O.toolspeed))
- user.visible_message( \
- "\The [user] fixes part of the microwave.", \
- "You have fixed part of the microwave." \
- )
- src.broken = 1 // Fix it a bit
- else if(src.broken == 1 && O.is_wrench()) // If it's broken and they're doing the wrench
- user.visible_message( \
- "\The [user] starts to fix part of the microwave.", \
- "You start to fix part of the microwave." \
- )
- if (do_after(user,20 * O.toolspeed))
- user.visible_message( \
- "\The [user] fixes the microwave.", \
- "You have fixed the microwave." \
- )
- src.icon_state = "mw"
- src.broken = 0 // Fix it!
- src.dirty = 0 // just to be sure
- src.flags = OPENCONTAINER | NOREACT
- else
- to_chat(user, "It's broken!")
- return 1
-
- else if(src.dirty==100) // The microwave is all dirty so can't be used!
- if(istype(O, /obj/item/weapon/reagent_containers/spray/cleaner) || istype(O, /obj/item/weapon/soap)) // If they're trying to clean it then let them
- user.visible_message( \
- "\The [user] starts to clean the microwave.", \
- "You start to clean the microwave." \
- )
- if (do_after(user,20))
- user.visible_message( \
- "\The [user] has cleaned the microwave.", \
- "You have cleaned the microwave." \
- )
- src.dirty = 0 // It's clean!
- src.broken = 0 // just to be sure
- src.icon_state = "mw"
- src.flags = OPENCONTAINER | NOREACT
- SStgui.update_uis(src)
- else //Otherwise bad luck!!
- to_chat(user, "It's dirty!")
- return 1
- else if(is_type_in_list(O,acceptable_items))
- if(contents.len>=(max_n_of_items + component_parts.len + circuit_item_capacity)) //Adds component_parts to the maximum number of items. changed 1 to actually just be the circuit item capacity var.
- to_chat(user, "This [src] is full of ingredients, you cannot put more.")
- return 1
- if(istype(O, /obj/item/stack) && O:get_amount() > 1) // This is bad, but I can't think of how to change it
- var/obj/item/stack/S = O
- new O.type (src)
- S.use(1)
- user.visible_message( \
- "\The [user] has added one of [O] to \the [src].", \
- "You add one of [O] to \the [src].")
- return
- else
- // user.remove_from_mob(O) //This just causes problems so far as I can tell. -Pete - Man whoever you are, it's been years. o7
- user.drop_from_inventory(O,src)
- user.visible_message( \
- "\The [user] has added \the [O] to \the [src].", \
- "You add \the [O] to \the [src].")
- SStgui.update_uis(src)
- return
- else if(istype(O,/obj/item/weapon/reagent_containers/glass) || \
- istype(O,/obj/item/weapon/reagent_containers/food/drinks) || \
- istype(O,/obj/item/weapon/reagent_containers/food/condiment) \
- )
- if (!O.reagents)
- return 1
- for (var/datum/reagent/R in O.reagents.reagent_list)
- if (!(R.id in acceptable_reagents))
- to_chat(user, "Your [O] contains components unsuitable for cookery.")
- return 1
- return
- else if(istype(O,/obj/item/weapon/grab))
- var/obj/item/weapon/grab/G = O
- to_chat(user, "This is ridiculous. You can not fit \the [G.affecting] in this [src].")
- return 1
- else if(O.is_screwdriver())
- default_deconstruction_screwdriver(user, O)
- return
- else if(O.is_crowbar())
- if(default_deconstruction_crowbar(user, O))
- return
- else
- user.visible_message( \
- "\The [user] begins [src.anchored ? "unsecuring" : "securing"] the microwave.", \
- "You attempt to [src.anchored ? "unsecure" : "secure"] the microwave."
- )
- if (do_after(user,20/O.toolspeed))
- user.visible_message( \
- "\The [user] [src.anchored ? "unsecures" : "secures"] the microwave.", \
- "You [src.anchored ? "unsecure" : "secure"] the microwave."
- )
- src.anchored = !src.anchored
- else
- to_chat(user, "You decide not to do that.")
- else if(default_part_replacement(user, O))
- return
- else
- to_chat(user, "You have no idea what you can cook with this [O].")
- ..()
- SStgui.update_uis(src)
-
-/obj/machinery/microwave/tgui_state(mob/user)
- return GLOB.tgui_physical_state
-
-/obj/machinery/microwave/attack_ai(mob/user as mob)
- attack_hand(user)
-
-/obj/machinery/microwave/attack_hand(mob/user as mob)
- user.set_machine(src)
- tgui_interact(user)
-
-/*******************
-* Microwave Menu
-********************/
-/obj/machinery/microwave/tgui_interact(mob/user, datum/tgui/ui)
- ui = SStgui.try_update_ui(user, src, ui)
- if(!ui)
- ui = new(user, src, "Microwave", name)
- ui.open()
-
-/obj/machinery/microwave/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state)
- var/list/data = ..()
-
- data["broken"] = broken
- data["operating"] = operating
- data["dirty"] = dirty == 100
- data["items"] = get_items_list()
-
- return data
-
-/obj/machinery/microwave/proc/get_items_list()
- var/list/data = list()
-
- var/list/items_counts = list()
- var/list/items_measures = list()
- var/list/items_measures_p = list()
- for(var/obj/O in ((contents - component_parts) - circuit))
- var/display_name = O.name
- if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/egg))
- items_measures[display_name] = "egg"
- items_measures_p[display_name] = "eggs"
- if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/tofu))
- items_measures[display_name] = "tofu chunk"
- items_measures_p[display_name] = "tofu chunks"
- if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/meat)) //any meat
- items_measures[display_name] = "slab of meat"
- items_measures_p[display_name] = "slabs of meat"
- if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/donkpocket))
- display_name = "Turnovers"
- items_measures[display_name] = "turnover"
- items_measures_p[display_name] = "turnovers"
- if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/carpmeat))
- items_measures[display_name] = "fillet of meat"
- items_measures_p[display_name] = "fillets of meat"
- items_counts[display_name]++
- for(var/O in items_counts)
- var/N = items_counts[O]
- if(!(O in items_measures))
- data.Add(list(list(
- "name" = capitalize(O),
- "amt" = N,
- "extra" = "[lowertext(O)][N > 1 ? "s" : ""]",
- )))
- else
- data.Add(list(list(
- "name" = capitalize(O),
- "amt" = N,
- "extra" = N == 1 ? items_measures[O] : items_measures_p[O],
- )))
-
- for(var/datum/reagent/R in reagents.reagent_list)
- var/display_name = R.name
- if(R.id == "capsaicin")
- display_name = "Hotsauce"
- if(R.id == "frostoil")
- display_name = "Coldsauce"
- data.Add(list(list(
- "name" = display_name,
- "amt" = R.volume,
- "extra" = "unit[R.volume > 1 ? "s" : ""]"
- )))
-
- return data
-
-/obj/machinery/microwave/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state)
- if(..())
- return TRUE
-
- if(operating)
- return TRUE
-
- switch(action)
- if("cook")
- cook()
- return TRUE
-
- if("dispose")
- dispose()
- return TRUE
-/*
-/obj/machinery/microwave/interact(mob/user as mob) // The microwave Menu
- var/dat = ""
- if(src.broken > 0)
- dat = {"Bzzzzttttt"}
- else if(src.operating)
- dat = {"Microwaving in progress!
Please wait...!"}
- else if(src.dirty==100)
- dat = {"This microwave is dirty!
Please clean it before use!"}
- else
- var/list/items_counts = new
- var/list/items_measures = new
- var/list/items_measures_p = new
- for (var/obj/O in ((contents - component_parts) - circuit))
- var/display_name = O.name
- if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/egg))
- items_measures[display_name] = "egg"
- items_measures_p[display_name] = "eggs"
- if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/tofu))
- items_measures[display_name] = "tofu chunk"
- items_measures_p[display_name] = "tofu chunks"
- if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/meat)) //any meat
- items_measures[display_name] = "slab of meat"
- items_measures_p[display_name] = "slabs of meat"
- if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/donkpocket))
- display_name = "Turnovers"
- items_measures[display_name] = "turnover"
- items_measures_p[display_name] = "turnovers"
- if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/carpmeat))
- items_measures[display_name] = "fillet of meat"
- items_measures_p[display_name] = "fillets of meat"
- items_counts[display_name]++
- for (var/O in items_counts)
- var/N = items_counts[O]
- if (!(O in items_measures))
- dat += {"[capitalize(O)]: [N] [lowertext(O)]\s
"}
- else
- if (N==1)
- dat += {"[capitalize(O)]: [N] [items_measures[O]]
"}
- else
- dat += {"[capitalize(O)]: [N] [items_measures_p[O]]
"}
-
- for (var/datum/reagent/R in reagents.reagent_list)
- var/display_name = R.name
- if (R.id == "capsaicin")
- display_name = "Hotsauce"
- if (R.id == "frostoil")
- display_name = "Coldsauce"
- dat += {"[display_name]: [R.volume] unit\s
"}
-
- if (items_counts.len==0 && reagents.reagent_list.len==0)
- dat = {"The microwave is empty
"}
- else
- dat = {"Ingredients:
[dat]"}
- dat += {"